ZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNTUxMTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC0wLDAgKzEsNzM2IEBACisjCisjIEZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBzeW50YXggb2YgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUsCisjIHNlZSBEb2N1bWVudGF0aW9uL2tidWlsZC9rY29uZmlnLWxhbmd1YWdlLnR4dC4KKyMKKworbWFpbm1lbnUgIkxpbnV4IEtlcm5lbCBDb25maWd1cmF0aW9uIgorCitjb25maWcgQVJNCisJYm9vbAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoZSBBUk0gc2VyaWVzIGlzIGEgbGluZSBvZiBsb3ctcG93ZXItY29uc3VtcHRpb24gUklTQyBjaGlwIGRlc2lnbnMKKwkgIGxpY2Vuc2VkIGJ5IEFSTSBsdGQgYW5kIHRhcmdldGVkIGF0IGVtYmVkZGVkIGFwcGxpY2F0aW9ucyBhbmQKKwkgIGhhbmRoZWxkcyBzdWNoIGFzIHRoZSBDb21wYXEgSVBBUS4gIEFSTS1iYXNlZCBQQ3MgYXJlIG5vIGxvbmdlcgorCSAgbWFudWZhY3R1cmVkLCBidXQgIGxlZ2FjeSBBUk0tYmFzZWQgUEMgaGFyZHdhcmUgcmVtYWlucyBwb3B1bGFyIGluCisJICBFdXJvcGUuICBUaGVyZSBpcyBhbiBBUk0gTGludXggcHJvamVjdCB3aXRoIGEgd2ViIHBhZ2UgYXQKKwkgIDxodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvPi4KKworY29uZmlnIE1NVQorCWJvb2wKKwlkZWZhdWx0IHkKKworY29uZmlnIEVJU0EKKwlib29sCisJLS0taGVscC0tLQorCSAgVGhlIEV4dGVuZGVkIEluZHVzdHJ5IFN0YW5kYXJkIEFyY2hpdGVjdHVyZSAoRUlTQSkgYnVzIHdhcworCSAgZGV2ZWxvcGVkIGFzIGFuIG9wZW4gYWx0ZXJuYXRpdmUgdG8gdGhlIElCTSBNaWNyb0NoYW5uZWwgYnVzLgorCisJICBUaGUgRUlTQSBidXMgcHJvdmlkZWQgc29tZSBvZiB0aGUgZmVhdHVyZXMgb2YgdGhlIElCTSBNaWNyb0NoYW5uZWwKKwkgIGJ1cyB3aGlsZSBtYWludGFpbmluZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggY2FyZHMgbWFkZSBmb3IKKwkgIHRoZSBvbGRlciBJU0EgYnVzLiAgVGhlIEVJU0EgYnVzIHNhdyBsaW1pdGVkIHVzZSBiZXR3ZWVuIDE5ODggYW5kCisJICAxOTk1IHdoZW4gaXQgd2FzIG1hZGUgb2Jzb2xldGUgYnkgdGhlIFBDSSBidXMuCisKKwkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSBidWlsZGluZyBhIGtlcm5lbCBmb3IgYW4gRUlTQS1iYXNlZCBtYWNoaW5lLgorCisJICBPdGhlcndpc2UsIHNheSBOLgorCitjb25maWcgU0JVUworCWJvb2wKKworY29uZmlnIE1DQQorCWJvb2wKKwloZWxwCisJICBNaWNyb0NoYW5uZWwgQXJjaGl0ZWN0dXJlIGlzIGZvdW5kIGluIHNvbWUgSUJNIFBTLzIgbWFjaGluZXMgYW5kCisJICBsYXB0b3BzLiAgSXQgaXMgYSBidXMgc3lzdGVtIHNpbWlsYXIgdG8gUENJIG9yIElTQS4gU2VlCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL21jYS50eHQ+IChhbmQgZXNwZWNpYWxseSB0aGUgd2ViIHBhZ2UgZ2l2ZW4KKwkgIHRoZXJlKSBiZWZvcmUgYXR0ZW1wdGluZyB0byBidWlsZCBhbiBNQ0EgYnVzIGtlcm5lbC4KKworY29uZmlnIFVJRDE2CisJYm9vbAorCWRlZmF1bHQgeQorCitjb25maWcgUldTRU1fR0VORVJJQ19TUElOTE9DSworCWJvb2wKKwlkZWZhdWx0IHkKKworY29uZmlnIFJXU0VNX1hDSEdBRERfQUxHT1JJVEhNCisJYm9vbAorCitjb25maWcgR0VORVJJQ19DQUxJQlJBVEVfREVMQVkKKwlib29sCisJZGVmYXVsdCB5CisKK2NvbmZpZyBHRU5FUklDX0JVU1RfU1BJTkxPQ0sKKwlib29sCisKK2NvbmZpZyBHRU5FUklDX0lTQV9ETUEKKwlib29sCisKK2NvbmZpZyBHRU5FUklDX0lPTUFQCisJYm9vbAorCWRlZmF1bHQgeQorCitjb25maWcgRklRCisJYm9vbAorCitzb3VyY2UgImluaXQvS2NvbmZpZyIKKworbWVudSAiU3lzdGVtIFR5cGUiCisKK2Nob2ljZQorCXByb21wdCAiQVJNIHN5c3RlbSB0eXBlIgorCWRlZmF1bHQgQVJDSF9SUEMKKworY29uZmlnIEFSQ0hfQ0xQUzc1MDAKKwlib29sICJDaXJydXMtQ0wtUFM3NTAwRkUiCisJc2VsZWN0IFRJTUVSX0FDT1JOCisKK2NvbmZpZyBBUkNIX0NMUFM3MTFYCisJYm9vbCAiQ0xQUzcxMXgvRVA3MjF4LWJhc2VkIgorCitjb25maWcgQVJDSF9DTzI4NQorCWJvb2wgIkNvLUVCU0EyODUiCisJc2VsZWN0IEZPT1RCUklER0UKKwlzZWxlY3QgRk9PVEJSSURHRV9BRERJTgorCitjb25maWcgQVJDSF9FQlNBMTEwCisJYm9vbCAiRUJTQS0xMTAiCisJaGVscAorCSAgVGhpcyBpcyBhbiBldmFsdWF0aW9uIGJvYXJkIGZvciB0aGUgU3Ryb25nQVJNIHByb2Nlc3NvciBhdmFpbGFibGUKKwkgIGZyb20gRGlnaXRhbC4gSXQgaGFzIGxpbWl0ZWQgaGFyZHdhcmUgb24tYm9hcmQsIGluY2x1ZGluZyBhbiBvbmJvYXJkCisJICBFdGhlcm5ldCBpbnRlcmZhY2UsIHR3byBQQ01DSUEgc29ja2V0cywgdHdvIHNlcmlhbCBwb3J0cyBhbmQgYQorCSAgcGFyYWxsZWwgcG9ydC4KKworY29uZmlnIEFSQ0hfQ0FNRUxPVAorCWJvb2wgIkVweGExMGRiIgorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBBbHRlcmEncyBFeGNhbGlidXIgWEExMCBkZXZlbG9wbWVudCBib2FyZC4KKwkgIElmIHlvdSB3b3VsZCBsaWtlIHRvIGJ1aWxkIHlvdXIga2VybmVsIHRvIHJ1biBvbiBvbmUgb2YgdGhlc2UgYm9hcmRzCisJICB0aGVuIHlvdSBtdXN0IHNheSAnWScgaGVyZS4gT3RoZXJ3aXNlIHNheSAnTicKKworY29uZmlnIEFSQ0hfRk9PVEJSSURHRQorCWJvb2wgIkZvb3RCcmlkZ2UiCisJc2VsZWN0IEZPT1RCUklER0UKKworY29uZmlnIEFSQ0hfSU5URUdSQVRPUgorCWJvb2wgIkludGVncmF0b3IiCisJc2VsZWN0IEFSTV9BTUJBCisJc2VsZWN0IElDU1Q1MjUKKworY29uZmlnIEFSQ0hfSU9QM1hYCisJYm9vbCAiSU9QM3h4LWJhc2VkIgorCitjb25maWcgQVJDSF9JWFA0WFgKKwlib29sICJJWFA0eHgtYmFzZWQiCisJc2VsZWN0IERNQUJPVU5DRQorCitjb25maWcgQVJDSF9JWFAyMDAwCisJYm9vbCAiSVhQMjQwMC8yODAwLWJhc2VkIgorCitjb25maWcgQVJDSF9MNzIwMAorCWJvb2wgIkxpbmtVcC1MNzIwMCIKKwlzZWxlY3QgRklRCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiBhIExpbmtVcCBTeXN0ZW1zCisJICBMNzIwMCBTb2Z0d2FyZSBEZXZlbG9wbWVudCBCb2FyZCB3aGljaCB1c2VzIGFuIEFSTTcyMFQgcHJvY2Vzc29yLgorCSAgSW5mb3JtYXRpb24gb24gdGhpcyBib2FyZCBjYW4gYmUgb2J0YWluZWQgYXQ6CisKKwkgIDxodHRwOi8vd3d3Lmxpbmt1cHN5cy5jb20vPgorCisJICBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIGNvbW1lbnRzIGFib3V0IHRoZSBMaW51eCBrZXJuZWwgcG9ydAorCSAgdG8gdGhpcyBib2FyZCwgc2VuZCBlLW1haWwgdG8gPHNqaGlsbEBjb3R3LmNvbT4uCisKK2NvbmZpZyBBUkNIX1BYQQorCWJvb2wgIlBYQTJ4eC1iYXNlZCIKKworY29uZmlnIEFSQ0hfUlBDCisJYm9vbCAiUmlzY1BDIgorCXNlbGVjdCBBUkNIX0FDT1JOCisJc2VsZWN0IEZJUQorCXNlbGVjdCBUSU1FUl9BQ09STgorCWhlbHAKKwkgIE9uIHRoZSBBY29ybiBSaXNjLVBDLCBMaW51eCBjYW4gc3VwcG9ydCB0aGUgaW50ZXJuYWwgSURFIGRpc2sgYW5kCisJICBDRC1ST00gaW50ZXJmYWNlLCBzZXJpYWwgYW5kIHBhcmFsbGVsIHBvcnQsIGFuZCB0aGUgZmxvcHB5IGRyaXZlLgorCitjb25maWcgQVJDSF9TQTExMDAKKwlib29sICJTQTExMDAtYmFzZWQiCisKK2NvbmZpZyBBUkNIX1MzQzI0MTAKKwlib29sICJTYW1zdW5nIFMzQzI0MTAiCisJaGVscAorCSAgU2Ftc3VuZyBTM0MyNDEwWCBDUFUgYmFzZWQgc3lzdGVtcywgc3VjaCBhcyB0aGUgU2ltdGVjIEVsZWN0cm9uaWNzCisJICBCQVNUICg8aHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvRUIxMTBJVFgvPiksIHRoZSBJUEFRIDE5NDAgb3IKKwkgIHRoZSBTYW1zdW5nIFNNREsyNDEwIGRldmVsb3BtZW50IGJvYXJkIChhbmQgZGVydmlhdGl2ZXMpLgorCitjb25maWcgQVJDSF9TSEFSSworCWJvb2wgIlNoYXJrIgorCitjb25maWcgQVJDSF9MSDdBNDBYCisJYm9vbCAiU2hhcnAgTEg3QTQwWCIKKwloZWxwCisJICBTYXkgWSBoZXJlIGZvciBzeXN0ZW1zIGJhc2VkIG9uIG9uZSBvZiB0aGUgU2hhcnAgTEg3QTQwWAorCSAgU3lzdGVtIG9uIGEgQ2hpcCBwcm9jZXNzb3JzLiAgVGhlc2UgQ1BVcyBpbmNsdWRlIGFuIEFSTTkyMlQKKwkgIGNvcmUgd2l0aCBhIHdpZGUgYXJyYXkgb2YgaW50ZWdyYXRlZCBkZXZpY2VzIGZvcgorCSAgaGFuZC1oZWxkIGFuZCBsb3ctcG93ZXIgYXBwbGljYXRpb25zLgorCitjb25maWcgQVJDSF9PTUFQCisJYm9vbCAiVEkgT01BUCIKKworY29uZmlnIEFSQ0hfVkVSU0FUSUxFCisJYm9vbCAiVmVyc2F0aWxlIgorCXNlbGVjdCBBUk1fQU1CQQorCXNlbGVjdCBJQ1NUMzA3CisJaGVscAorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIEFSTSBMdGQgVmVyc2F0aWxlIGJvYXJkLgorCitjb25maWcgQVJDSF9JTVgKKwlib29sICJJTVgiCisKK2NvbmZpZyBBUkNIX0g3MjBYCisJYm9vbCAiSHluaXgtSE1TNzIweC1iYXNlZCIKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyBiYXNlZCBvbiB0aGUgSHluaXggSE1TNzIweAorCitlbmRjaG9pY2UKKworc291cmNlICJhcmNoL2FybS9tYWNoLWNscHM3MTF4L0tjb25maWciCisKK3NvdXJjZSAiYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9LY29uZmlnIgorCitzb3VyY2UgImFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9LY29uZmlnIgorCitzb3VyY2UgImFyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9LY29uZmlnIgorCitzb3VyY2UgImFyY2gvYXJtL21hY2gtaW9wM3h4L0tjb25maWciCisKK3NvdXJjZSAiYXJjaC9hcm0vbWFjaC1peHA0eHgvS2NvbmZpZyIKKworc291cmNlICJhcmNoL2FybS9tYWNoLWl4cDIwMDAvS2NvbmZpZyIKKworc291cmNlICJhcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnIgorCitzb3VyY2UgImFyY2gvYXJtL21hY2gtc2ExMTAwL0tjb25maWciCisKK3NvdXJjZSAiYXJjaC9hcm0vbWFjaC1vbWFwL0tjb25maWciCisKK3NvdXJjZSAiYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWciCisKK3NvdXJjZSAiYXJjaC9hcm0vbWFjaC1saDdhNDB4L0tjb25maWciCisKK3NvdXJjZSAiYXJjaC9hcm0vbWFjaC1pbXgvS2NvbmZpZyIKKworc291cmNlICJhcmNoL2FybS9tYWNoLWg3MjB4L0tjb25maWciCisKK3NvdXJjZSAiYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvS2NvbmZpZyIKKworIyBEZWZpbml0aW9ucyB0byBtYWtlIGxpZmUgZWFzaWVyCitjb25maWcgQVJDSF9BQ09STgorCWJvb2wKKworc291cmNlIGFyY2gvYXJtL21tL0tjb25maWcKKworIyAgYm9vbCAnVXNlIFhTY2FsZSBQTVUgYXMgdGltZXIgc291cmNlJyBDT05GSUdfWFNDQUxFX1BNVV9USU1FUgorY29uZmlnIFhTQ0FMRV9QTVUKKwlib29sCisJZGVwZW5kcyBvbiBDUFVfWFNDQUxFICYmICFYU0NBTEVfUE1VX1RJTUVSCisJZGVmYXVsdCB5CisKK2VuZG1lbnUKKworc291cmNlICJhcmNoL2FybS9jb21tb24vS2NvbmZpZyIKKworY29uZmlnIEZPUkNFX01BWF9aT05FT1JERVIKKwlpbnQKKwlkZXBlbmRzIG9uIFNBMTExMQorCWRlZmF1bHQgIjkiCisKK21lbnUgIkJ1cyBzdXBwb3J0IgorCitjb25maWcgQVJNX0FNQkEKKwlib29sCisKK2NvbmZpZyBJU0EKKwlib29sCisJZGVwZW5kcyBvbiBGT09UQlJJREdFX0hPU1QgfHwgQVJDSF9TSEFSSyB8fCBBUkNIX0NMUFM3NTAwIHx8IEFSQ0hfRUJTQTExMCB8fCBBUkNIX0NEQjg5NzEyIHx8IEFSQ0hfRURCNzIxMSB8fCBBUkNIX1NBMTEwMCB8fCBBUkNIX01YMUFEUworCWRlZmF1bHQgeQorCWhlbHAKKwkgIEZpbmQgb3V0IHdoZXRoZXIgeW91IGhhdmUgSVNBIHNsb3RzIG9uIHlvdXIgbW90aGVyYm9hcmQuICBJU0EgaXMgdGhlCisJICBuYW1lIG9mIGEgYnVzIHN5c3RlbSwgaS5lLiB0aGUgd2F5IHRoZSBDUFUgdGFsa3MgdG8gdGhlIG90aGVyIHN0dWZmCisJICBpbnNpZGUgeW91ciBib3guICBPdGhlciBidXMgc3lzdGVtcyBhcmUgUENJLCBFSVNBLCBNaWNyb0NoYW5uZWwKKwkgIChNQ0EpIG9yIFZFU0EuICBJU0EgaXMgYW4gb2xkZXIgc3lzdGVtLCBub3cgYmVpbmcgZGlzcGxhY2VkIGJ5IFBDSTsKKwkgIG5ld2VyIGJvYXJkcyBkb24ndCBzdXBwb3J0IGl0LiAgSWYgeW91IGhhdmUgSVNBLCBzYXkgWSwgb3RoZXJ3aXNlIE4uCisKK2NvbmZpZyBJU0FfRE1BCisJYm9vbAorCWRlcGVuZHMgb24gRk9PVEJSSURHRV9IT1NUIHx8IEFSQ0hfU0hBUksKKwlkZWZhdWx0IHkKKworY29uZmlnIFBDSQorCWJvb2wgIlBDSSBzdXBwb3J0IiBpZiBBUkNIX0lOVEVHUkFUT1JfQVAKKwlkZWZhdWx0IHkgaWYgQVJDSF9TSEFSSyB8fCBGT09UQlJJREdFX0hPU1QgfHwgQVJDSF9JT1AzWFggfHwgQVJDSF9JWFA0WFggfHwgQVJDSF9JWFAyMDAwCisJaGVscAorCSAgRmluZCBvdXQgd2hldGhlciB5b3UgaGF2ZSBhIFBDSSBtb3RoZXJib2FyZC4gUENJIGlzIHRoZSBuYW1lIG9mIGEKKwkgIGJ1cyBzeXN0ZW0sIGkuZS4gdGhlIHdheSB0aGUgQ1BVIHRhbGtzIHRvIHRoZSBvdGhlciBzdHVmZiBpbnNpZGUKKwkgIHlvdXIgYm94LiBPdGhlciBidXMgc3lzdGVtcyBhcmUgSVNBLCBFSVNBLCBNaWNyb0NoYW5uZWwgKE1DQSkgb3IKKwkgIFZFU0EuIElmIHlvdSBoYXZlIFBDSSwgc2F5IFksIG90aGVyd2lzZSBOLgorCisJICBUaGUgUENJLUhPV1RPLCBhdmFpbGFibGUgZnJvbQorCSAgPGh0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvPiwgY29udGFpbnMgdmFsdWFibGUKKwkgIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIFBDSSBoYXJkd2FyZSBkb2VzIHdvcmsgdW5kZXIgTGludXggYW5kIHdoaWNoCisJICBkb2Vzbid0LgorCisjIFNlbGVjdCB0aGUgaG9zdCBicmlkZ2UgdHlwZQorY29uZmlnIFBDSV9IT1NUX1ZJQTgyQzUwNQorCWJvb2wKKwlkZXBlbmRzIG9uIFBDSSAmJiBBUkNIX1NIQVJLCisJZGVmYXVsdCB5CisKK3NvdXJjZSAiZHJpdmVycy9wY2kvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3BjbWNpYS9LY29uZmlnIgorCitlbmRtZW51CisKK21lbnUgIktlcm5lbCBGZWF0dXJlcyIKKworY29uZmlnIFNNUAorCWJvb2wgIlN5bW1ldHJpYyBNdWx0aS1Qcm9jZXNzaW5nIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIG4KKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiBvbmUgQ1BVLiBJZiB5b3UgaGF2ZQorCSAgYSBzeXN0ZW0gd2l0aCBvbmx5IG9uZSBDUFUsIGxpa2UgbW9zdCBwZXJzb25hbCBjb21wdXRlcnMsIHNheSBOLiBJZgorCSAgeW91IGhhdmUgYSBzeXN0ZW0gd2l0aCBtb3JlIHRoYW4gb25lIENQVSwgc2F5IFkuCisKKwkgIElmIHlvdSBzYXkgTiBoZXJlLCB0aGUga2VybmVsIHdpbGwgcnVuIG9uIHNpbmdsZSBhbmQgbXVsdGlwcm9jZXNzb3IKKwkgIG1hY2hpbmVzLCBidXQgd2lsbCB1c2Ugb25seSBvbmUgQ1BVIG9mIGEgbXVsdGlwcm9jZXNzb3IgbWFjaGluZS4gSWYKKwkgIHlvdSBzYXkgWSBoZXJlLCB0aGUga2VybmVsIHdpbGwgcnVuIG9uIG1hbnksIGJ1dCBub3QgYWxsLCBzaW5nbGUKKwkgIHByb2Nlc3NvciBtYWNoaW5lcy4gT24gYSBzaW5nbGUgcHJvY2Vzc29yIG1hY2hpbmUsIHRoZSBrZXJuZWwgd2lsbAorCSAgcnVuIGZhc3RlciBpZiB5b3Ugc2F5IE4gaGVyZS4KKworCSAgU2VlIGFsc28gdGhlIDxmaWxlOkRvY3VtZW50YXRpb24vc21wLnRleD4sCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL3NtcC50eHQ+LCA8ZmlsZTpEb2N1bWVudGF0aW9uL2kzODYvSU8tQVBJQy50eHQ+LAorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9ubWlfd2F0Y2hkb2cudHh0PiBhbmQgdGhlIFNNUC1IT1dUTyBhdmFpbGFibGUgYXQKKwkgIDxodHRwOi8vd3d3LmxpbnV4ZG9jLm9yZy9kb2NzLmh0bWwjaG93dG8+LgorCisJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLgorCitjb25maWcgTlJfQ1BVUworCWludCAiTWF4aW11bSBudW1iZXIgb2YgQ1BVcyAoMi0zMikiCisJcmFuZ2UgMiAzMgorCWRlcGVuZHMgb24gU01QCisJZGVmYXVsdCAiNCIKKworY29uZmlnIFBSRUVNUFQKKwlib29sICJQcmVlbXB0aWJsZSBLZXJuZWwgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBUaGlzIG9wdGlvbiByZWR1Y2VzIHRoZSBsYXRlbmN5IG9mIHRoZSBrZXJuZWwgd2hlbiByZWFjdGluZyB0bworCSAgcmVhbC10aW1lIG9yIGludGVyYWN0aXZlIGV2ZW50cyBieSBhbGxvd2luZyBhIGxvdyBwcmlvcml0eSBwcm9jZXNzIHRvCisJICBiZSBwcmVlbXB0ZWQgZXZlbiBpZiBpdCBpcyBpbiBrZXJuZWwgbW9kZSBleGVjdXRpbmcgYSBzeXN0ZW0gY2FsbC4KKwkgIFRoaXMgYWxsb3dzIGFwcGxpY2F0aW9ucyB0byBydW4gbW9yZSByZWxpYWJseSBldmVuIHdoZW4gdGhlIHN5c3RlbSBpcworCSAgdW5kZXIgbG9hZC4KKworCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEga2VybmVsIGZvciBhIGRlc2t0b3AsIGVtYmVkZGVkCisJICBvciByZWFsLXRpbWUgc3lzdGVtLiAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCisKK2NvbmZpZyBESVNDT05USUdNRU0KKwlib29sCisJZGVwZW5kcyBvbiBBUkNIX0VEQjcyMTEgfHwgQVJDSF9TQTExMDAgfHwgKEFSQ0hfTEg3QTQwWCAmJiAhTEg3QTQwWF9DT05USUdNRU0pCisJZGVmYXVsdCB5CisJaGVscAorCSAgU2F5IFkgdG8gc3VwcG9ydCBlZmZpY2llbnQgaGFuZGxpbmcgb2YgZGlzY29udGlndW91cyBwaHlzaWNhbCBtZW1vcnksCisJICBmb3IgYXJjaGl0ZWN0dXJlcyB3aGljaCBhcmUgZWl0aGVyIE5VTUEgKE5vbi1Vbmlmb3JtIE1lbW9yeSBBY2Nlc3MpCisJICBvciBoYXZlIGh1Z2UgaG9sZXMgaW4gdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgZm9yIG90aGVyIHJlYXNvbnMuCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi92bS9udW1hPiBmb3IgbW9yZS4KKworY29uZmlnIExFRFMKKwlib29sICJUaW1lciBhbmQgQ1BVIHVzYWdlIExFRHMiCisJZGVwZW5kcyBvbiBBUkNIX0NEQjg5NzEyIHx8IEFSQ0hfQ08yODUgfHwgQVJDSF9FQlNBMTEwIHx8IFwKKwkJICAgQVJDSF9FQlNBMjg1IHx8IEFSQ0hfSU1YIHx8IEFSQ0hfSU5URUdSQVRPUiB8fCBcCisJCSAgIEFSQ0hfTFVCQk9DSyB8fCBNQUNIX01BSU5TVE9ORSB8fCBBUkNIX05FVFdJTkRFUiB8fCBcCisJCSAgIEFSQ0hfT01BUCB8fCBBUkNIX1A3MjBUIHx8IEFSQ0hfUFhBX0lEUCB8fCBcCisJCSAgIEFSQ0hfU0ExMTAwIHx8IEFSQ0hfU0hBUksgfHwgQVJDSF9WRVJTQVRJTEUKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIExFRHMgb24geW91ciBtYWNoaW5lIHdpbGwgYmUgdXNlZAorCSAgdG8gcHJvdmlkZSB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBjdXJyZW50IHN5c3RlbSBzdGF0dXMuCisKKwkgIElmIHlvdSBhcmUgY29tcGlsaW5nIGEga2VybmVsIGZvciBhIE5ldFdpbmRlciBvciBFQlNBLTI4NSwgeW91IHdpbGwKKwkgIGJlIGFibGUgdG8gc2VsZWN0IHdoaWNoIExFRHMgYXJlIGFjdGl2ZSB1c2luZyB0aGUgb3B0aW9ucyBiZWxvdy4gSWYKKwkgIHlvdSBhcmUgY29tcGlsaW5nIGEga2VybmVsIGZvciB0aGUgRUJTQS0xMTAgb3IgdGhlIExBUlQgaG93ZXZlciwgdGhlCisJICByZWQgTEVEIHdpbGwgc2ltcGx5IGZsYXNoIHJlZ3VsYXJseSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzeXN0ZW0gaXMKKwkgIHN0aWxsIGZ1bmN0aW9uYWwuIEl0IGlzIHNhZmUgdG8gc2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIENBVFMKKwkgIHN5c3RlbSwgYnV0IHRoZSBkcml2ZXIgd2lsbCBkbyBub3RoaW5nLgorCitjb25maWcgTEVEU19USU1FUgorCWJvb2wgIlRpbWVyIExFRCIgaWYgKCFBUkNIX0NEQjg5NzEyICYmICFBUkNIX09NQVApIHx8IFwKKwkJCSAgICBNQUNIX09NQVBfSDIgfHwgTUFDSF9PTUFQX1BFUlNFVVMyCisJZGVwZW5kcyBvbiBMRURTCisJZGVmYXVsdCB5IGlmIEFSQ0hfRUJTQTExMAorCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlLCBvbmUgb2YgdGhlIHN5c3RlbSBMRURzICh0aGUgZ3JlZW4gb25lIG9uIHRoZQorCSAgTmV0V2luZGVyLCB0aGUgYW1iZXIgb25lIG9uIHRoZSBFQlNBMjg1LCBvciB0aGUgcmVkIG9uZSBvbiB0aGUgTEFSVCkKKwkgIHdpbGwgZmxhc2ggcmVndWxhcmx5IHRvIGluZGljYXRlIHRoYXQgdGhlIHN5c3RlbSBpcyBzdGlsbAorCSAgb3BlcmF0aW9uYWwuIFRoaXMgaXMgbWFpbmx5IHVzZWZ1bCB0byBrZXJuZWwgaGFja2VycyB3aG8gYXJlCisJICBkZWJ1Z2dpbmcgdW5zdGFibGUga2VybmVscy4KKworCSAgVGhlIExBUlQgdXNlcyB0aGUgc2FtZSBMRUQgZm9yIGJvdGggVGltZXIgTEVEIGFuZCBDUFUgdXNhZ2UgTEVECisJICBmdW5jdGlvbnMuIFlvdSBtYXkgY2hvb3NlIHRvIHVzZSBib3RoLCBidXQgdGhlIFRpbWVyIExFRCBmdW5jdGlvbgorCSAgd2lsbCBvdmVycnVsZSB0aGUgQ1BVIHVzYWdlIExFRC4KKworY29uZmlnIExFRFNfQ1BVCisJYm9vbCAiQ1BVIHVzYWdlIExFRCIgaWYgKCFBUkNIX0NEQjg5NzEyICYmICFBUkNIX0VCU0ExMTAgJiYgXAorCQkJIUFSQ0hfT01BUCkgfHwgTUFDSF9PTUFQX0gyIHx8IE1BQ0hfT01BUF9QRVJTRVVTMgorCWRlcGVuZHMgb24gTEVEUworCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUgcmVkIExFRCB3aWxsIGJlIHVzZWQgdG8gZ2l2ZSBhIGdvb2QgcmVhbAorCSAgdGltZSBpbmRpY2F0aW9uIG9mIENQVSB1c2FnZSwgYnkgbGlnaHRpbmcgd2hlbmV2ZXIgdGhlIGlkbGUgdGFzaworCSAgaXMgbm90IGN1cnJlbnRseSBleGVjdXRpbmcuCisKKwkgIFRoZSBMQVJUIHVzZXMgdGhlIHNhbWUgTEVEIGZvciBib3RoIFRpbWVyIExFRCBhbmQgQ1BVIHVzYWdlIExFRAorCSAgZnVuY3Rpb25zLiBZb3UgbWF5IGNob29zZSB0byB1c2UgYm90aCwgYnV0IHRoZSBUaW1lciBMRUQgZnVuY3Rpb24KKwkgIHdpbGwgb3ZlcnJ1bGUgdGhlIENQVSB1c2FnZSBMRUQuCisKK2NvbmZpZyBBTElHTk1FTlRfVFJBUAorCWJvb2wKKwlkZWZhdWx0IHkgaWYgIUFSQ0hfRUJTQTExMAorCWhlbHAKKwkgIEFSTSBwcm9jZXNzb3JzIGNhbiBub3QgZmV0Y2gvc3RvcmUgaW5mb3JtYXRpb24gd2hpY2ggaXMgbm90CisJICBuYXR1cmFsbHkgYWxpZ25lZCBvbiB0aGUgYnVzLCBpLmUuLCBhIDQgYnl0ZSBmZXRjaCBtdXN0IHN0YXJ0IGF0IGFuCisJICBhZGRyZXNzIGRpdmlzaWJsZSBieSA0LiBPbiAzMi1iaXQgQVJNIHByb2Nlc3NvcnMsIHRoZXNlIG5vbi1hbGlnbmVkCisJICBmZXRjaC9zdG9yZSBpbnN0cnVjdGlvbnMgd2lsbCBiZSBlbXVsYXRlZCBpbiBzb2Z0d2FyZSBpZiB5b3Ugc2F5CisJICBoZXJlLCB3aGljaCBoYXMgYSBzZXZlcmUgcGVyZm9ybWFuY2UgaW1wYWN0LiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IKKwkgIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIHNvbWUgbmV0d29yayBwcm90b2NvbHMuIFdpdGggYW4gSVAtb25seQorCSAgY29uZmlndXJhdGlvbiBpdCBpcyBzYWZlIHRvIHNheSBOLCBvdGhlcndpc2Ugc2F5IFkuCisKK2VuZG1lbnUKKworbWVudSAiQm9vdCBvcHRpb25zIgorCisjIENvbXByZXNzZWQgYm9vdCBsb2FkZXIgaW4gUk9NLiAgWWVzLCB3ZSByZWFsbHkgd2FudCB0byBhc2sgYWJvdXQKKyMgVEVYVCBhbmQgQlNTIHNvIHdlIHByZXNlcnZlIHRoZWlyIHZhbHVlcyBpbiB0aGUgY29uZmlnIGZpbGVzLgorY29uZmlnIFpCT09UX1JPTV9URVhUCisJaGV4ICJDb21wcmVzc2VkIFJPTSBib290IGxvYWRlciBiYXNlIGFkZHJlc3MiCisJZGVmYXVsdCAiMCIKKwloZWxwCisJICBUaGUgcGh5c2ljYWwgYWRkcmVzcyBhdCB3aGljaCB0aGUgUk9NLWFibGUgekltYWdlIGlzIHRvIGJlCisJICBwbGFjZWQgaW4gdGhlIHRhcmdldC4gIFBsYXRmb3JtcyB3aGljaCBub3JtYWxseSBtYWtlIHVzZSBvZgorCSAgUk9NLWFibGUgekltYWdlIGZvcm1hdHMgbm9ybWFsbHkgc2V0IHRoaXMgdG8gYSBzdWl0YWJsZQorCSAgdmFsdWUgaW4gdGhlaXIgZGVmY29uZmlnIGZpbGUuCisKKwkgIElmIFpCT09UX1JPTSBpcyBub3QgZW5hYmxlZCwgdGhpcyBoYXMgbm8gZWZmZWN0LgorCitjb25maWcgWkJPT1RfUk9NX0JTUworCWhleCAiQ29tcHJlc3NlZCBST00gYm9vdCBsb2FkZXIgQlNTIGFkZHJlc3MiCisJZGVmYXVsdCAiMCIKKwloZWxwCisJICBUaGUgYmFzZSBhZGRyZXNzIG9mIDY0S2lCIG9mIHJlYWQvd3JpdGUgbWVtb3J5IGluIHRoZSB0YXJnZXQKKwkgIGZvciB0aGUgUk9NLWFibGUgekltYWdlLCB3aGljaCBtdXN0IGJlIGF2YWlsYWJsZSB3aGlsZSB0aGUKKwkgIGRlY29tcHJlc3NvciBpcyBydW5uaW5nLiAgUGxhdGZvcm1zIHdoaWNoIG5vcm1hbGx5IG1ha2UgdXNlIG9mCisJICBST00tYWJsZSB6SW1hZ2UgZm9ybWF0cyBub3JtYWxseSBzZXQgdGhpcyB0byBhIHN1aXRhYmxlCisJICB2YWx1ZSBpbiB0aGVpciBkZWZjb25maWcgZmlsZS4KKworCSAgSWYgWkJPT1RfUk9NIGlzIG5vdCBlbmFibGVkLCB0aGlzIGhhcyBubyBlZmZlY3QuCisKK2NvbmZpZyBaQk9PVF9ST00KKwlib29sICJDb21wcmVzc2VkIGJvb3QgbG9hZGVyIGluIFJPTS9mbGFzaCIKKwlkZXBlbmRzIG9uIFpCT09UX1JPTV9URVhUICE9IFpCT09UX1JPTV9CU1MKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gZXhlY3V0ZSB5b3VyIGNvbXByZXNzZWQga2VybmVsIGltYWdlCisJICAoekltYWdlKSBkaXJlY3RseSBmcm9tIFJPTSBvciBmbGFzaC4gIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBDTURMSU5FCisJc3RyaW5nICJEZWZhdWx0IGtlcm5lbCBjb21tYW5kIHN0cmluZyIKKwlkZWZhdWx0ICIiCisJaGVscAorCSAgT24gc29tZSBhcmNoaXRlY3R1cmVzIChFQlNBMTEwIGFuZCBDQVRTKSwgdGhlcmUgaXMgY3VycmVudGx5IG5vIHdheQorCSAgZm9yIHRoZSBib290IGxvYWRlciB0byBwYXNzIGFyZ3VtZW50cyB0byB0aGUga2VybmVsLiBGb3IgdGhlc2UKKwkgIGFyY2hpdGVjdHVyZXMsIHlvdSBzaG91bGQgc3VwcGx5IHNvbWUgY29tbWFuZC1saW5lIG9wdGlvbnMgYXQgYnVpbGQKKwkgIHRpbWUgYnkgZW50ZXJpbmcgdGhlbSBoZXJlLiBBcyBhIG1pbmltdW0sIHlvdSBzaG91bGQgc3BlY2lmeSB0aGUKKwkgIG1lbW9yeSBzaXplIGFuZCB0aGUgcm9vdCBkZXZpY2UgKGUuZy4sIG1lbT02NE0gcm9vdD0vZGV2L25mcykuCisKK2NvbmZpZyBYSVBfS0VSTkVMCisJYm9vbCAiS2VybmVsIEV4ZWN1dGUtSW4tUGxhY2UgZnJvbSBST00iCisJZGVwZW5kcyBvbiAhWkJPT1RfUk9NCisJaGVscAorCSAgRXhlY3V0ZS1Jbi1QbGFjZSBhbGxvd3MgdGhlIGtlcm5lbCB0byBydW4gZnJvbSBub24tdm9sYXRpbGUgc3RvcmFnZQorCSAgZGlyZWN0bHkgYWRkcmVzc2FibGUgYnkgdGhlIENQVSwgc3VjaCBhcyBOT1IgZmxhc2guIFRoaXMgc2F2ZXMgUkFNCisJICBzcGFjZSBzaW5jZSB0aGUgdGV4dCBzZWN0aW9uIG9mIHRoZSBrZXJuZWwgaXMgbm90IGxvYWRlZCBmcm9tIGZsYXNoCisJICB0byBSQU0uICBSZWFkLXdyaXRlIHNlY3Rpb25zLCBzdWNoIGFzIHRoZSBkYXRhIHNlY3Rpb24gYW5kIHN0YWNrLAorCSAgYXJlIHN0aWxsIGNvcGllZCB0byBSQU0uICBUaGUgWElQIGtlcm5lbCBpcyBub3QgY29tcHJlc3NlZCBzaW5jZQorCSAgaXQgaGFzIHRvIHJ1biBkaXJlY3RseSBmcm9tIGZsYXNoLCBzbyBpdCB3aWxsIHRha2UgbW9yZSBzcGFjZSB0bworCSAgc3RvcmUgaXQuICBUaGUgZmxhc2ggYWRkcmVzcyB1c2VkIHRvIGxpbmsgdGhlIGtlcm5lbCBvYmplY3QgZmlsZXMsCisJICBhbmQgZm9yIHN0b3JpbmcgaXQsIGlzIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW50LiBUaGVyZWZvcmUsIGlmIHlvdQorCSAgc2F5IFkgaGVyZSwgeW91IG11c3Qga25vdyB0aGUgcHJvcGVyIHBoeXNpY2FsIGFkZHJlc3Mgd2hlcmUgdG8KKwkgIHN0b3JlIHRoZSBrZXJuZWwgaW1hZ2UgZGVwZW5kaW5nIG9uIHlvdXIgb3duIGZsYXNoIG1lbW9yeSB1c2FnZS4KKworCSAgQWxzbyBub3RlIHRoYXQgdGhlIG1ha2UgdGFyZ2V0IGJlY29tZXMgIm1ha2UgeGlwSW1hZ2UiIHJhdGhlciB0aGFuCisJICAibWFrZSB6SW1hZ2UiIG9yICJtYWtlIEltYWdlIi4gIFRoZSBmaW5hbCBrZXJuZWwgYmluYXJ5IHRvIHB1dCBpbgorCSAgUk9NIG1lbW9yeSB3aWxsIGJlIGFyY2gvYXJtL2Jvb3QveGlwSW1hZ2UuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBYSVBfUEhZU19BRERSCisJaGV4ICJYSVAgS2VybmVsIFBoeXNpY2FsIExvY2F0aW9uIgorCWRlcGVuZHMgb24gWElQX0tFUk5FTAorCWRlZmF1bHQgIjB4MDAwODAwMDAiCisJaGVscAorCSAgVGhpcyBpcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBpbiB5b3VyIGZsYXNoIG1lbW9yeSB0aGUga2VybmVsIHdpbGwKKwkgIGJlIGxpbmtlZCBmb3IgYW5kIHN0b3JlZCB0by4gIFRoaXMgYWRkcmVzcyBpcyBkZXBlbmRlbnQgb24geW91cgorCSAgb3duIGZsYXNoIHVzYWdlLgorCitlbmRtZW51CisKK2lmIChBUkNIX1NBMTEwMCB8fCBBUkNIX0lOVEVHUkFUT1IpCisKK21lbnUgIkNQVSBGcmVxdWVuY3kgc2NhbGluZyIKKworc291cmNlICJkcml2ZXJzL2NwdWZyZXEvS2NvbmZpZyIKKworY29uZmlnIENQVV9GUkVRX1NBMTEwMAorCWJvb2wKKwlkZXBlbmRzIG9uIENQVV9GUkVRICYmIChTQTExMDBfTEFSVCB8fCBTQTExMDBfUExFQikKKwlkZWZhdWx0IHkKKworY29uZmlnIENQVV9GUkVRX1NBMTExMAorCWJvb2wKKwlkZXBlbmRzIG9uIENQVV9GUkVRICYmIChTQTExMDBfQVNTQUJFVCB8fCBTQTExMDBfQ0VSRiB8fCBTQTExMDBfUFRfU1lTVEVNMykKKwlkZWZhdWx0IHkKKworY29uZmlnIENQVV9GUkVRX0lOVEVHUkFUT1IKKwl0cmlzdGF0ZSAiQ1BVZnJlcSBkcml2ZXIgZm9yIEFSTSBJbnRlZ3JhdG9yIENQVXMiCisJZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IgJiYgQ1BVX0ZSRVEKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgdGhlIENQVWZyZXEgZHJpdmVyIGZvciBBUk0gSW50ZWdyYXRvciBDUFVzLgorCisJICBGb3IgZGV0YWlscywgdGFrZSBhIGxvb2sgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi9jcHUtZnJlcT4uCisKKwkgIElmIGluIGRvdWJ0LCBzYXkgWS4KKworZW5kbWVudQorCitlbmRpZgorCittZW51ICJGbG9hdGluZyBwb2ludCBlbXVsYXRpb24iCisKK2NvbW1lbnQgIkF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZCIKKworY29uZmlnIEZQRV9OV0ZQRQorCWJvb2wgIk5XRlBFIG1hdGggZW11bGF0aW9uIgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIHRvIGluY2x1ZGUgdGhlIE5XRlBFIGZsb2F0aW5nIHBvaW50IGVtdWxhdG9yIGluIHRoZSBrZXJuZWwuCisJICBUaGlzIGlzIG5lY2Vzc2FyeSB0byBydW4gbW9zdCBiaW5hcmllcy4gTGludXggZG9lcyBub3QgY3VycmVudGx5CisJICBzdXBwb3J0IGZsb2F0aW5nIHBvaW50IGhhcmR3YXJlIHNvIHlvdSBuZWVkIHRvIHNheSBZIGhlcmUgZXZlbiBpZgorCSAgeW91ciBtYWNoaW5lIGhhcyBhbiBGUEEgb3IgZmxvYXRpbmcgcG9pbnQgY28tcHJvY2Vzc29yIHBvZHVsZS4KKworCSAgWW91IG1heSBzYXkgTiBoZXJlIGlmIHlvdSBhcmUgZ29pbmcgdG8gbG9hZCB0aGUgQWNvcm4gRlBFbXVsYXRvcgorCSAgZWFybHkgaW4gdGhlIGJvb3R1cC4KKworY29uZmlnIEZQRV9OV0ZQRV9YUAorCWJvb2wgIlN1cHBvcnQgZXh0ZW5kZWQgcHJlY2lzaW9uIgorCWRlcGVuZHMgb24gRlBFX05XRlBFICYmICFDUFVfQklHX0VORElBTgorCWhlbHAKKwkgIFNheSBZIHRvIGluY2x1ZGUgODAtYml0IHN1cHBvcnQgaW4gdGhlIGtlcm5lbCBmbG9hdGluZy1wb2ludAorCSAgZW11bGF0b3IuICBPdGhlcndpc2UsIG9ubHkgMzIgYW5kIDY0LWJpdCBzdXBwb3J0IGlzIGNvbXBpbGVkIGluLgorCSAgTm90ZSB0aGF0IGdjYyBkb2VzIG5vdCBnZW5lcmF0ZSA4MC1iaXQgb3BlcmF0aW9ucyBieSBkZWZhdWx0LAorCSAgc28gaW4gbW9zdCBjYXNlcyB0aGlzIG9wdGlvbiBvbmx5IGVubGFyZ2VzIHRoZSBzaXplIG9mIHRoZQorCSAgZmxvYXRpbmcgcG9pbnQgZW11bGF0b3Igd2l0aG91dCBhbnkgZ29vZCByZWFzb24uCisKKwkgIFlvdSBhbG1vc3Qgc3VyZWx5IHdhbnQgdG8gc2F5IE4gaGVyZS4KKworY29uZmlnIEZQRV9GQVNURlBFCisJYm9vbCAiRmFzdEZQRSBtYXRoIGVtdWxhdGlvbiAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uICFDUFVfMzJ2MyAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgdGhlIEZBU1QgZmxvYXRpbmcgcG9pbnQgZW11bGF0b3IgaW4gdGhlIGtlcm5lbC4KKwkgIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIG11Y2ggZmFzdGVyIGVtdWxhdG9yIHdoaWNoIG5vdyBhbHNvIGhhcyBmdWxsCisJICBwcmVjaXNpb24gZm9yIHRoZSBtYW50aXNzYS4gIEl0IGRvZXMgbm90IHN1cHBvcnQgYW55IGV4Y2VwdGlvbnMuCisJICBJdCBpcyB2ZXJ5IHNpbXBsZSwgYW5kIGFwcHJveGltYXRlbHkgMy02IHRpbWVzIGZhc3RlciB0aGFuIE5XRlBFLgorCisJICBJdCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgbW9zdCBwcm9ncmFtcy4gIEl0IG1heSBiZSBub3Qgc3VpdGFibGUKKwkgIGZvciBzY2llbnRpZmljIGNhbGN1bGF0aW9ucywgYnV0IHlvdSBoYXZlIHRvIGNoZWNrIHRoaXMgZm9yIHlvdXJzZWxmLgorCSAgSWYgeW91IGRvIG5vdCBmZWVsIHlvdSBuZWVkIGEgZmFzdGVyIEZQIGVtdWxhdGlvbiB5b3Ugc2hvdWxkIGJldHRlcgorCSAgY2hvb3NlIE5XRlBFLgorCitjb25maWcgVkZQCisJYm9vbCAiVkZQLWZvcm1hdCBmbG9hdGluZyBwb2ludCBtYXRocyIKKwlkZXBlbmRzIG9uIENQVV9WNiB8fCBDUFVfQVJNOTI2VAorCWhlbHAKKwkgIFNheSBZIHRvIGluY2x1ZGUgVkZQIHN1cHBvcnQgY29kZSBpbiB0aGUga2VybmVsLiBUaGlzIGlzIG5lZWRlZAorCSAgaWYgeW91ciBoYXJkd2FyZSBpbmNsdWRlcyBhIFZGUCB1bml0LgorCisJICBQbGVhc2Ugc2VlIDxmaWxlOkRvY3VtZW50YXRpb24vYXJtL1ZGUC9yZWxlYXNlLW5vdGVzLnR4dD4gZm9yCisJICByZWxlYXNlIG5vdGVzIGFuZCBhZGRpdGlvbmFsIHN0YXR1cyBpbmZvcm1hdGlvbi4KKworCSAgU2F5IE4gaWYgeW91ciB0YXJnZXQgZG9lcyBub3QgaGF2ZSBWRlAgaGFyZHdhcmUuCisKK2VuZG1lbnUKKworbWVudSAiVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzIgorCitzb3VyY2UgImZzL0tjb25maWcuYmluZm10IgorCitjb25maWcgQVJUSFVSCisJdHJpc3RhdGUgIlJJU0MgT1MgcGVyc29uYWxpdHkiCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHRoZSBrZXJuZWwgY29kZSBuZWNlc3NhcnkgaWYgeW91IHdhbnQgdG8gcnVuCisJICBBY29ybiBSSVNDIE9TL0FydGh1ciBiaW5hcmllcyB1bmRlciBMaW51eC4gVGhpcyBjb2RlIGlzIHN0aWxsIHZlcnkKKwkgIGV4cGVyaW1lbnRhbDsgaWYgdGhpcyBzb3VuZHMgZnJpZ2h0ZW5pbmcsIHNheSBOIGFuZCBzbGVlcCBpbiBwZWFjZS4KKwkgIFlvdSBjYW4gYWxzbyBzYXkgTSBoZXJlIHRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlICh3aGljaAorCSAgd2lsbCBiZSBjYWxsZWQgYXJ0aHVyKS4KKworZW5kbWVudQorCittZW51ICJQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMiCisKK2NvbmZpZyBQTQorCWJvb2wgIlBvd2VyIE1hbmFnZW1lbnQgc3VwcG9ydCIKKwktLS1oZWxwLS0tCisJICAiUG93ZXIgTWFuYWdlbWVudCIgbWVhbnMgdGhhdCBwYXJ0cyBvZiB5b3VyIGNvbXB1dGVyIGFyZSBzaHV0CisJICBvZmYgb3IgcHV0IGludG8gYSBwb3dlciBjb25zZXJ2aW5nICJzbGVlcCIgbW9kZSBpZiB0aGV5IGFyZSBub3QKKwkgIGJlaW5nIHVzZWQuICBUaGVyZSBhcmUgdHdvIGNvbXBldGluZyBzdGFuZGFyZHMgZm9yIGRvaW5nIHRoaXM6IEFQTQorCSAgYW5kIEFDUEkuICBJZiB5b3Ugd2FudCB0byB1c2UgZWl0aGVyIG9uZSwgc2F5IFkgaGVyZSBhbmQgdGhlbiBhbHNvCisJICB0byB0aGUgcmVxdWlzaXRlIHN1cHBvcnQgYmVsb3cuCisKKwkgIFBvd2VyIE1hbmFnZW1lbnQgaXMgbW9zdCBpbXBvcnRhbnQgZm9yIGJhdHRlcnkgcG93ZXJlZCBsYXB0b3AKKwkgIGNvbXB1dGVyczsgaWYgeW91IGhhdmUgYSBsYXB0b3AsIGNoZWNrIG91dCB0aGUgTGludXggTGFwdG9wIGhvbWUKKwkgIHBhZ2Ugb24gdGhlIFdXVyBhdCA8aHR0cDovL3d3dy5saW51eC1vbi1sYXB0b3BzLmNvbS8+IG9yCisJICBUdXhtb2JpbCAtIExpbnV4IG9uIE1vYmlsZSBDb21wdXRlcnMgYXQgPGh0dHA6Ly93d3cudHV4bW9iaWwub3JnLz4KKwkgIGFuZCB0aGUgQmF0dGVyeSBQb3dlcmVkIExpbnV4IG1pbmktSE9XVE8sIGF2YWlsYWJsZSBmcm9tCisJICA8aHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG8+LgorCisJICBOb3RlIHRoYXQsIGV2ZW4gaWYgeW91IHNheSBOIGhlcmUsIExpbnV4IG9uIHRoZSB4ODYgYXJjaGl0ZWN0dXJlCisJICB3aWxsIGlzc3VlIHRoZSBobHQgaW5zdHJ1Y3Rpb24gaWYgbm90aGluZyBpcyB0byBiZSBkb25lLCB0aGVyZWJ5CisJICBzZW5kaW5nIHRoZSBwcm9jZXNzb3IgdG8gc2xlZXAgYW5kIHNhdmluZyBwb3dlci4KKworY29uZmlnIEFQTQorCXRyaXN0YXRlICJBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50IEVtdWxhdGlvbiIKKwlkZXBlbmRzIG9uIFBNCisJLS0taGVscC0tLQorCSAgQVBNIGlzIGEgQklPUyBzcGVjaWZpY2F0aW9uIGZvciBzYXZpbmcgcG93ZXIgdXNpbmcgc2V2ZXJhbCBkaWZmZXJlbnQKKwkgIHRlY2huaXF1ZXMuIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBmb3IgYmF0dGVyeSBwb3dlcmVkIGxhcHRvcHMgd2l0aAorCSAgQVBNIGNvbXBsaWFudCBCSU9TZXMuIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUgc3lzdGVtIHRpbWUgd2lsbCBiZQorCSAgcmVzZXQgYWZ0ZXIgYSBSRVNVTUUgb3BlcmF0aW9uLCB0aGUgL3Byb2MvYXBtIGRldmljZSB3aWxsIHByb3ZpZGUKKwkgIGJhdHRlcnkgc3RhdHVzIGluZm9ybWF0aW9uLCBhbmQgdXNlci1zcGFjZSBwcm9ncmFtcyB3aWxsIHJlY2VpdmUKKwkgIG5vdGlmaWNhdGlvbiBvZiBBUE0gImV2ZW50cyIgKGUuZy4gYmF0dGVyeSBzdGF0dXMgY2hhbmdlKS4KKworCSAgSWYgeW91IHNlbGVjdCAiWSIgaGVyZSwgeW91IGNhbiBkaXNhYmxlIGFjdHVhbCB1c2Ugb2YgdGhlIEFQTQorCSAgQklPUyBieSBwYXNzaW5nIHRoZSAiYXBtPW9mZiIgb3B0aW9uIHRvIHRoZSBrZXJuZWwgYXQgYm9vdCB0aW1lLgorCisJICBOb3RlIHRoYXQgdGhlIEFQTSBzdXBwb3J0IGlzIGFsbW9zdCBjb21wbGV0ZWx5IGRpc2FibGVkIGZvcgorCSAgbWFjaGluZXMgd2l0aCBtb3JlIHRoYW4gb25lIENQVS4KKworCSAgSW4gb3JkZXIgdG8gdXNlIEFQTSwgeW91IHdpbGwgbmVlZCBzdXBwb3J0aW5nIHNvZnR3YXJlLiBGb3IgbG9jYXRpb24KKwkgIGFuZCBtb3JlIGluZm9ybWF0aW9uLCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vcG0udHh0PiBhbmQgdGhlCisJICBCYXR0ZXJ5IFBvd2VyZWQgTGludXggbWluaS1IT1dUTywgYXZhaWxhYmxlIGZyb20KKwkgIDxodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0bz4uCisKKwkgIFRoaXMgZHJpdmVyIGRvZXMgbm90IHNwaW4gZG93biBkaXNrIGRyaXZlcyAoc2VlIHRoZSBoZHBhcm0oOCkKKwkgIG1hbnBhZ2UgKCJtYW4gOCBoZHBhcm0iKSBmb3IgdGhhdCksIGFuZCBpdCBkb2Vzbid0IHR1cm4gb2ZmCisJICBWRVNBLWNvbXBsaWFudCAiZ3JlZW4iIG1vbml0b3JzLgorCisJICBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBUSSA0MDAwTSBUcmF2ZWxNYXRlIGFuZCB0aGUgQUNFUgorCSAgNDg2L0RYNC83NSBiZWNhdXNlIHRoZXkgZG9uJ3QgaGF2ZSBjb21wbGlhbnQgQklPU2VzLiBNYW55ICJncmVlbiIKKwkgIGRlc2t0b3AgbWFjaGluZXMgYWxzbyBkb24ndCBoYXZlIGNvbXBsaWFudCBCSU9TZXMsIGFuZCB0aGlzIGRyaXZlcgorCSAgbWF5IGNhdXNlIHRob3NlIG1hY2hpbmVzIHRvIHBhbmljIGR1cmluZyB0aGUgYm9vdCBwaGFzZS4KKworCSAgR2VuZXJhbGx5LCBpZiB5b3UgZG9uJ3QgaGF2ZSBhIGJhdHRlcnkgaW4geW91ciBtYWNoaW5lLCB0aGVyZSBpc24ndAorCSAgbXVjaCBwb2ludCBpbiB1c2luZyB0aGlzIGRyaXZlciBhbmQgeW91IHNob3VsZCBzYXkgTi4gSWYgeW91IGdldAorCSAgcmFuZG9tIGtlcm5lbCBPT1BTZXMgb3IgcmVib290cyB0aGF0IGRvbid0IHNlZW0gdG8gYmUgcmVsYXRlZCB0bworCSAgYW55dGhpbmcsIHRyeSBkaXNhYmxpbmcvZW5hYmxpbmcgdGhpcyBvcHRpb24gKG9yIGRpc2FibGluZy9lbmFibGluZworCSAgQVBNIGluIHlvdXIgQklPUykuCisKKwkgIFNvbWUgb3RoZXIgdGhpbmdzIHlvdSBzaG91bGQgdHJ5IHdoZW4gZXhwZXJpZW5jaW5nIHNlZW1pbmdseSByYW5kb20sCisJICAid2VpcmQiIHByb2JsZW1zOgorCisJICAxKSBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBlbm91Z2ggc3dhcCBzcGFjZSBhbmQgdGhhdCBpdCBpcworCSAgZW5hYmxlZC4KKwkgIDIpIHBhc3MgdGhlICJuby1obHQiIG9wdGlvbiB0byB0aGUga2VybmVsCisJICAzKSBzd2l0Y2ggb24gZmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uIGluIHRoZSBrZXJuZWwgYW5kIHBhc3MKKwkgIHRoZSAibm8zODciIG9wdGlvbiB0byB0aGUga2VybmVsCisJICA0KSBwYXNzIHRoZSAiZmxvcHB5PW5vZG1hIiBvcHRpb24gdG8gdGhlIGtlcm5lbAorCSAgNSkgcGFzcyB0aGUgIm1lbT00TSIgb3B0aW9uIHRvIHRoZSBrZXJuZWwgKHRoZXJlYnkgZGlzYWJsaW5nCisJICBhbGwgYnV0IHRoZSBmaXJzdCA0IE1CIG9mIFJBTSkKKwkgIDYpIG1ha2Ugc3VyZSB0aGF0IHRoZSBDUFUgaXMgbm90IG92ZXIgY2xvY2tlZC4KKwkgIDcpIHJlYWQgdGhlIHNpZzExIEZBUSBhdCA8aHR0cDovL3d3dy5iaXR3aXphcmQubmwvc2lnMTEvPgorCSAgOCkgZGlzYWJsZSB0aGUgY2FjaGUgZnJvbSB5b3VyIEJJT1Mgc2V0dGluZ3MKKwkgIDkpIGluc3RhbGwgYSBmYW4gZm9yIHRoZSB2aWRlbyBjYXJkIG9yIGV4Y2hhbmdlIHZpZGVvIFJBTQorCSAgMTApIGluc3RhbGwgYSBiZXR0ZXIgZmFuIGZvciB0aGUgQ1BVCisJICAxMSkgZXhjaGFuZ2UgUkFNIGNoaXBzCisJICAxMikgZXhjaGFuZ2UgdGhlIG1vdGhlcmJvYXJkLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhcG0uCisKK2VuZG1lbnUKKworbWVudSAiRGV2aWNlIERyaXZlcnMiCisKK3NvdXJjZSAiZHJpdmVycy9iYXNlL0tjb25maWciCisKK2lmIEFMSUdOTUVOVF9UUkFQCitzb3VyY2UgImRyaXZlcnMvbXRkL0tjb25maWciCitlbmRpZgorCitzb3VyY2UgImRyaXZlcnMvcGFycG9ydC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvcG5wL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9ibG9jay9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvYWNvcm4vYmxvY2svS2NvbmZpZyIKKworaWYgQVJDSF9DTFBTNzUwMCB8fCBBUkNIX0lPUDNYWCB8fCBBUkNIX0lYUDRYWCB8fCBBUkNIX0w3MjAwIHx8IEFSQ0hfTEg3QTQwWCB8fCBBUkNIX1BYQSB8fCBBUkNIX1JQQyB8fCBBUkNIX1MzQzI0MTAgfHwgQVJDSF9TQTExMDAgfHwgQVJDSF9TSEFSSyB8fCBGT09UQlJJREdFCitzb3VyY2UgImRyaXZlcnMvaWRlL0tjb25maWciCitlbmRpZgorCitzb3VyY2UgImRyaXZlcnMvc2NzaS9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvbWQvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL21lc3NhZ2UvZnVzaW9uL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9pZWVlMTM5NC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvbWVzc2FnZS9pMm8vS2NvbmZpZyIKKworc291cmNlICJuZXQvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL2lzZG4vS2NvbmZpZyIKKworIyBpbnB1dCBiZWZvcmUgY2hhciAtIGNoYXIvam95c3RpY2sgZGVwZW5kcyBvbiBpdC4gQXMgZG9lcyBVU0IuCisKK3NvdXJjZSAiZHJpdmVycy9pbnB1dC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvY2hhci9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvaTJjL0tjb25maWciCisKKyNzb3VyY2UgImRyaXZlcnMvbDMvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL21pc2MvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL21lZGlhL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy92aWRlby9LY29uZmlnIgorCitzb3VyY2UgInNvdW5kL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy91c2IvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL21tYy9LY29uZmlnIgorCitlbmRtZW51CisKK3NvdXJjZSAiZnMvS2NvbmZpZyIKKworc291cmNlICJhcmNoL2FybS9vcHJvZmlsZS9LY29uZmlnIgorCitzb3VyY2UgImFyY2gvYXJtL0tjb25maWcuZGVidWciCisKK3NvdXJjZSAic2VjdXJpdHkvS2NvbmZpZyIKKworc291cmNlICJjcnlwdG8vS2NvbmZpZyIKKworc291cmNlICJsaWIvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcgYi9hcmNoL2FybS9LY29uZmlnLmRlYnVnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YTU3MDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9LY29uZmlnLmRlYnVnCkBAIC0wLDAgKzEsMTA5IEBACittZW51ICJLZXJuZWwgaGFja2luZyIKKworc291cmNlICJsaWIvS2NvbmZpZy5kZWJ1ZyIKKworIyBSTUsgd2FudHMgYXJtIGtlcm5lbHMgY29tcGlsZWQgd2l0aCBmcmFtZSBwb2ludGVycyBzbyBoYXJkd2lyZSB0aGlzIHRvIHkuCisjIElmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBhbmQgYXJlIHdpbGxpbmcgdG8gbGl2ZSB3aXRob3V0IHN0YWNrCisjIHRyYWNlcywgeW91IGNhbiBnZXQgYSBzbGlnaHRseSBzbWFsbGVyIGtlcm5lbCBieSBzZXR0aW5nIHRoaXMgb3B0aW9uIHRvCisjIG4sIGJ1dCB0aGVuIFJNSyB3aWxsIGhhdmUgdG8ga2lsbCB5b3UgOykuCitjb25maWcgRlJBTUVfUE9JTlRFUgorCWJvb2wKKwlkZWZhdWx0IHkKKwloZWxwCisJICBJZiB5b3Ugc2F5IE4gaGVyZSwgdGhlIHJlc3VsdGluZyBrZXJuZWwgd2lsbCBiZSBzbGlnaHRseSBzbWFsbGVyIGFuZAorCSAgZmFzdGVyLiBIb3dldmVyLCB3aGVuIGEgcHJvYmxlbSBvY2N1cnMgd2l0aCB0aGUga2VybmVsLCB0aGUKKwkgIGluZm9ybWF0aW9uIHRoYXQgaXMgcmVwb3J0ZWQgaXMgc2V2ZXJlbHkgbGltaXRlZC4gTW9zdCBwZW9wbGUKKwkgIHNob3VsZCBzYXkgWSBoZXJlLgorCitjb25maWcgREVCVUdfVVNFUgorCWJvb2wgIlZlcmJvc2UgdXNlciBmYXVsdCBtZXNzYWdlcyIKKwloZWxwCisJICBXaGVuIGEgdXNlciBwcm9ncmFtIGNyYXNoZXMgZHVlIHRvIGFuIGV4Y2VwdGlvbiwgdGhlIGtlcm5lbCBjYW4KKwkgIHByaW50IGEgYnJpZWYgbWVzc2FnZSBleHBsYWluaW5nIHdoYXQgdGhlIHByb2JsZW0gd2FzLiBUaGlzIGlzCisJICBzb21ldGltZXMgaGVscGZ1bCBmb3IgZGVidWdnaW5nIGJ1dCBzZXJ2ZXMgbm8gcHVycG9zZSBvbiBhCisJICBwcm9kdWN0aW9uIHN5c3RlbS4gTW9zdCBwZW9wbGUgc2hvdWxkIHNheSBOIGhlcmUuCisKKwkgIEluIGFkZGl0aW9uLCB5b3UgbmVlZCB0byBwYXNzIHVzZXJfZGVidWc9TiBvbiB0aGUga2VybmVsIGNvbW1hbmQKKwkgIGxpbmUgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZS4gIE4gY29uc2lzdHMgb2YgdGhlIHN1bSBvZjoKKworCSAgICAgIDEgLSB1bmRlZmluZWQgaW5zdHJ1Y3Rpb24gZXZlbnRzCisJICAgICAgMiAtIHN5c3RlbSBjYWxscworCSAgICAgIDQgLSBpbnZhbGlkIGRhdGEgYWJvcnRzCisJICAgICAgOCAtIFNJR1NFR1YgZmF1bHRzCisJICAgICAxNiAtIFNJR0JVUyBmYXVsdHMKKworY29uZmlnIERFQlVHX1dBSVRRCisJYm9vbCAiV2FpdCBxdWV1ZSBkZWJ1Z2dpbmciCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKKworY29uZmlnIERFQlVHX0VSUk9SUworCWJvb2wgIlZlcmJvc2Uga2VybmVsIGVycm9yIG1lc3NhZ2VzIgorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCisJaGVscAorCSAgVGhpcyBvcHRpb24gY29udHJvbHMgdmVyYm9zZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gd2hpY2ggY2FuIGJlCisJICBwcmludGVkIHdoZW4gdGhlIGtlcm5lbCBkZXRlY3RzIGFuIGludGVybmFsIGVycm9yLiBUaGlzIGRlYnVnZ2luZworCSAgaW5mb3JtYXRpb24gaXMgdXNlZnVsIHRvIGtlcm5lbCBoYWNrZXJzIHdoZW4gdHJhY2tpbmcgZG93biBwcm9ibGVtcywKKwkgIGJ1dCBtb3N0bHkgbWVhbmluZ2xlc3MgdG8gb3RoZXIgcGVvcGxlLiBJdCdzIHNhZmUgdG8gc2F5IFkgdW5sZXNzCisJICB5b3UgYXJlIGNvbmNlcm5lZCB3aXRoIHRoZSBjb2RlIHNpemUgb3IgZG9uJ3Qgd2FudCB0byBzZWUgdGhlc2UKKwkgIG1lc3NhZ2VzLgorCisKKyMgVGhlc2Ugb3B0aW9ucyBhcmUgb25seSBmb3IgcmVhbCBrZXJuZWwgaGFja2VycyB3aG8gd2FudCB0byBnZXQgdGhlaXIgaGFuZHMgZGlydHkuCitjb25maWcgREVCVUdfTEwKKwlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBmdW5jdGlvbnMiCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgZGVmaW5pdGlvbnMgb2YgcHJpbnRhc2NpaSwgcHJpbnRjaGFyLCBwcmludGhleAorCSAgaW4gdGhlIGtlcm5lbC4gIFRoaXMgaXMgaGVscGZ1bCBpZiB5b3UgYXJlIGRlYnVnZ2luZyBjb2RlIHRoYXQKKwkgIGV4ZWN1dGVzIGJlZm9yZSB0aGUgY29uc29sZSBpcyBpbml0aWFsaXplZC4KKworY29uZmlnIERFQlVHX0lDRURDQworCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHZpYSBFbWJlZGRlZElDRSBEQ0MgY2hhbm5lbCIKKwlkZXBlbmRzIG9uIERFQlVHX0xMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0aGUgZGVidWcgcHJpbnQgcm91dGluZXMgdG8gZGlyZWN0IHRoZWlyCisJICBvdXRwdXQgdG8gdGhlIEVtYmVkZGVkSUNFIG1hY3JvY2VsbCdzIERDQyBjaGFubmVsIHVzaW5nCisJICBjby1wcm9jZXNzb3IgMTQuIFRoaXMgaXMga25vd24gdG8gd29yayBvbiB0aGUgQVJNOSBzdHlsZSBJQ0UKKwkgIGNoYW5uZWwuCisKKwkgIEl0IGRvZXMgaW5jbHVkZSBhIHRpbWVvdXQgdG8gZW5zdXJlIHRoYXQgdGhlIHN5c3RlbSBkb2VzIG5vdAorCSAgdG90YWxseSBmcmVlemUgd2hlbiB0aGVyZSBpcyBub3RoaW5nIGNvbm5lY3RlZCB0byByZWFkLgorCitjb25maWcgREVCVUdfREMyMTI4NV9QT1JUCisJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdmlhIGZvb3RicmlkZ2Ugc2VyaWFsIHBvcnQiCisJZGVwZW5kcyBvbiBERUJVR19MTCAmJiBGT09UQlJJREdFCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0aGUgZGVidWcgcHJpbnQgcm91dGluZXMgdG8gZGlyZWN0IHRoZWlyCisJICBvdXRwdXQgdG8gdGhlIHNlcmlhbCBwb3J0IGluIHRoZSBEQzIxMjg1IChGb290YnJpZGdlKS4gU2F5aW5nIE4KKwkgIHdpbGwgY2F1c2UgdGhlIGRlYnVnIG1lc3NhZ2VzIHRvIGFwcGVhciBvbiB0aGUgZmlyc3QgMTY1NTAKKwkgIHNlcmlhbCBwb3J0LgorCitjb25maWcgREVCVUdfQ0xQUzcxMVhfVUFSVDIKKwlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBtZXNzYWdlcyB2aWEgVUFSVDIiCisJZGVwZW5kcyBvbiBERUJVR19MTCAmJiBBUkNIX0NMUFM3MTFYCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0aGUgZGVidWcgcHJpbnQgcm91dGluZXMgdG8gZGlyZWN0IHRoZWlyCisJICBvdXRwdXQgdG8gdGhlIHNlY29uZCBzZXJpYWwgcG9ydCBvbiB0aGVzZSBkZXZpY2VzLiAgU2F5aW5nIE4gd2lsbAorCSAgY2F1c2UgdGhlIGRlYnVnIG1lc3NhZ2VzIHRvIGFwcGVhciBvbiB0aGUgZmlyc3Qgc2VyaWFsIHBvcnQuCisKK2NvbmZpZyBERUJVR19TM0MyNDEwX1BPUlQKKwlkZXBlbmRzIG9uIERFQlVHX0xMICYmIEFSQ0hfUzNDMjQxMAorCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIG1lc3NhZ2VzIHZpYSBTM0MyNDEwIFVBUlQiCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBkZWJ1ZyBwcmludCByb3V0aW5lcyB0byBnbyB0byBvbmUgb2YgdGhlCisJICBTM0MyNDEwIGludGVybmFsIFVBUlRzLiBUaGUgY2hvc2VuIFVBUlQgbXVzdCBoYXZlIGJlZW4gY29uZmlndXJlZAorCSAgYmVmb3JlIGl0IGlzIHVzZWQuCisKK2NvbmZpZyBERUJVR19TM0MyNDEwX1VBUlQKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMAorCWludCAiUzNDMjQxMCBVQVJUIHRvIHVzZSBmb3IgbG93LWxldmVsIGRlYnVnIgorCWRlZmF1bHQgIjAiCisJaGVscAorCSAgQ2hvaWNlIGZvciBVQVJUIGZvciBrZXJuZWwgbG93LWxldmVsIHVzaW5nIFMzQzI0MTAgVUFSVFMsCisJICBzaG91bGQgYmUgYmV0d2VlbiB6ZXJvIGFuZCB0d28uIFRoZSBwb3J0IG11c3QgaGF2ZSBiZWVuCisJICBpbml0YWxpc2VkIGJ5IHRoZSBib290LWxvYWRlciBiZWZvcmUgdXNlLgorCisJICBUaGUgdW5jb21wcmVzc29yIGNvZGUgcG9ydCBjb25maWd1cmF0aW9uIGlzIG5vdyBoYW5kbGVkCisJICBieSBDT05GSUdfUzNDMjQxMF9MT1dMRVZFTF9VQVJUX1BPUlQuCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI3N2UzZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL01ha2VmaWxlCkBAIC0wLDAgKzEsMjE2IEBACisjCisjIGFyY2gvYXJtL01ha2VmaWxlCisjCisjIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDEgYnkgUnVzc2VsbCBLaW5nCisKK0xERkxBR1Nfdm1saW51eAk6PS1wIC0tbm8tdW5kZWZpbmVkIC1YCitDUFBGTEFHU192bWxpbnV4LmxkcyA9IC1EVEVYVEFERFI9JChURVhUQUREUikgLUREQVRBQUREUj0kKERBVEFBRERSKQorT0JKQ09QWUZMQUdTCTo9LU8gYmluYXJ5IC1SIC5ub3RlIC1SIC5jb21tZW50IC1TCitHWkZMQUdTCQk6PS05CisjQ0ZMQUdTCQkrPS1waXBlCisKKyMgRG8gbm90IHVzZSBhcmNoL2FybS9kZWZjb25maWcgLSBpdCdzIGFsd2F5cyBvdXRkYXRlZC4KKyMgU2VsZWN0IGEgcGxhdGZvcm0gdGh0IGlzIGtlcHQgdXAtdG8tZGF0ZQorS0JVSUxEX0RFRkNPTkZJRyA6PSB2ZXJzYXRpbGVfZGVmY29uZmlnCisKK2lmZXEgKCQoQ09ORklHX0ZSQU1FX1BPSU5URVIpLHkpCitDRkxBR1MJCSs9LWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLW1hcGNzIC1tbm8tc2NoZWQtcHJvbG9nCitlbmRpZgorCitpZmVxICgkKENPTkZJR19DUFVfQklHX0VORElBTikseSkKK0NQUEZMQUdTCSs9IC1tYmlnLWVuZGlhbgorQVMJCSs9IC1FQgorTEQJCSs9IC1FQgorZWxzZQorQ1BQRkxBR1MJKz0gLW1saXR0bGUtZW5kaWFuCitBUwkJKz0gLUVMCitMRAkJKz0gLUVMCitlbmRpZgorCitjb21tYSA9ICwKKworIyBUaGlzIHNlbGVjdHMgd2hpY2ggaW5zdHJ1Y3Rpb24gc2V0IGlzIHVzZWQuCisjIE5vdGUgdGhhdCBHQ0MgZG9lcyBub3QgbnVtZXJpY2FsbHkgZGVmaW5lIGFuIGFyY2hpdGVjdHVyZSB2ZXJzaW9uCisjIG1hY3JvLCBidXQgaW5zdGVhZCBkZWZpbmVzIGEgd2hvbGUgc2VyaWVzIG9mIG1hY3JvcyB3aGljaCBtYWtlcworIyB0ZXN0aW5nIGZvciBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBvciBsYXRlciByYXRoZXIgaW1wb3NzaWJsZS4KK2FyY2gtJChDT05GSUdfQ1BVXzMydjYpCQk6PS1EX19MSU5VWF9BUk1fQVJDSF9fPTYgJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9YXJtdjYsLW1hcmNoPWFybXY1dCAtV2EkKGNvbW1hKS1tYXJjaD1hcm12NikKK2FyY2gtJChDT05GSUdfQ1BVXzMydjUpCQk6PS1EX19MSU5VWF9BUk1fQVJDSF9fPTUgJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9YXJtdjV0ZSwtbWFyY2g9YXJtdjQpCithcmNoLSQoQ09ORklHX0NQVV8zMnY0KQkJOj0tRF9fTElOVVhfQVJNX0FSQ0hfXz00IC1tYXJjaD1hcm12NAorYXJjaC0kKENPTkZJR19DUFVfMzJ2MykJCTo9LURfX0xJTlVYX0FSTV9BUkNIX189MyAtbWFyY2g9YXJtdjMKKworIyBUaGlzIHNlbGVjdHMgaG93IHdlIG9wdGltaXNlIGZvciB0aGUgcHJvY2Vzc29yLgordHVuZS0kKENPTkZJR19DUFVfQVJNNjEwKQk6PS1tdHVuZT1hcm02MTAKK3R1bmUtJChDT05GSUdfQ1BVX0FSTTcxMCkJOj0tbXR1bmU9YXJtNzEwCit0dW5lLSQoQ09ORklHX0NQVV9BUk03MjBUKQk6PS1tdHVuZT1hcm03dGRtaQordHVuZS0kKENPTkZJR19DUFVfQVJNOTIwVCkJOj0tbXR1bmU9YXJtOXRkbWkKK3R1bmUtJChDT05GSUdfQ1BVX0FSTTkyMlQpCTo9LW10dW5lPWFybTl0ZG1pCit0dW5lLSQoQ09ORklHX0NQVV9BUk05MjVUKQk6PS1tdHVuZT1hcm05dGRtaQordHVuZS0kKENPTkZJR19DUFVfQVJNOTI2VCkJOj0tbXR1bmU9YXJtOXRkbWkKK3R1bmUtJChDT05GSUdfQ1BVX1NBMTEwKQk6PS1tdHVuZT1zdHJvbmdhcm0xMTAKK3R1bmUtJChDT05GSUdfQ1BVX1NBMTEwMCkJOj0tbXR1bmU9c3Ryb25nYXJtMTEwMAordHVuZS0kKENPTkZJR19DUFVfWFNDQUxFKQk6PSQoY2FsbCBjYy1vcHRpb24sLW10dW5lPXhzY2FsZSwtbXR1bmU9c3Ryb25nYXJtMTEwKSAtV2EsLW1jcHU9eHNjYWxlCit0dW5lLSQoQ09ORklHX0NQVV9WNikJCTo9LW10dW5lPXN0cm9uZ2FybQorCisjIE5lZWQgLVVhcm0gZm9yIGdjYyA8IDMueAorQ0ZMQUdTX0FCSQk6PSQoY2FsbCBjYy1vcHRpb24sLW1hcGNzLTMyLC1tYWJpPWFwY3MtZ251KQorQ0ZMQUdTCQkrPSQoQ0ZMQUdTX0FCSSkgJChhcmNoLXkpICQodHVuZS15KSAkKGNhbGwgY2Mtb3B0aW9uLC1tc2hvcnQtbG9hZC1ieXRlcywkKGNhbGwgY2Mtb3B0aW9uLC1tYWxpZ25tZW50LXRyYXBzLCkpIC1tc29mdC1mbG9hdCAtVWFybQorQUZMQUdTCQkrPSQoQ0ZMQUdTX0FCSSkgJChhcmNoLXkpICQodHVuZS15KSAtbXNvZnQtZmxvYXQKKworQ0hFQ0tGTEFHUwkrPSAtRF9fYXJtX18KKworI0RlZmF1bHQgdmFsdWUKK2hlYWQteQkJOj0gYXJjaC9hcm0va2VybmVsL2hlYWQubyBhcmNoL2FybS9rZXJuZWwvaW5pdF90YXNrLm8KK3RleHRhZGRyLXkJOj0gMHhDMDAwODAwMAorCisgbWFjaGluZS0kKENPTkZJR19BUkNIX1JQQykJICAgOj0gcnBjCisgbWFjaGluZS0kKENPTkZJR19BUkNIX0VCU0ExMTApCSAgIDo9IGVic2ExMTAKKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfQ0xQUzc1MDApICAgOj0gY2xwczc1MDAKKyAgaW5jZGlyLSQoQ09ORklHX0FSQ0hfQ0xQUzc1MDApICAgOj0gY2w3NTAwCisgbWFjaGluZS0kKENPTkZJR19GT09UQlJJREdFKQkgICA6PSBmb290YnJpZGdlCisgIGluY2Rpci0kKENPTkZJR19GT09UQlJJREdFKQkgICA6PSBlYnNhMjg1Cit0ZXh0YWRkci0kKENPTkZJR19BUkNIX0NPMjg1KQkgICA6PSAweDYwMDA4MDAwCisgbWFjaGluZS0kKENPTkZJR19BUkNIX0NPMjg1KQkgICA6PSBmb290YnJpZGdlCisgIGluY2Rpci0kKENPTkZJR19BUkNIX0NPMjg1KQkgICA6PSBlYnNhMjg1CisgbWFjaGluZS0kKENPTkZJR19BUkNIX1NIQVJLKQkgICA6PSBzaGFyaworIG1hY2hpbmUtJChDT05GSUdfQVJDSF9TQTExMDApCSAgIDo9IHNhMTEwMAoraWZlcSAoJChDT05GSUdfQVJDSF9TQTExMDApLHkpCisjIFNBMTExMSBETUEgYnVnOiB3ZSBkb24ndCB3YW50IHRoZSBrZXJuZWwgdG8gbGl2ZSBpbiBwcmVjaW91cyBETUEtYWJsZSBtZW1vcnkKK3RleHRhZGRyLSQoQ09ORklHX1NBMTExMSkJICAgOj0gMHhjMDIwODAwMAorZW5kaWYKKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfUFhBKQkgICA6PSBweGEKKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTDcyMDApCSAgIDo9IGw3MjAwCisgbWFjaGluZS0kKENPTkZJR19BUkNIX0lOVEVHUkFUT1IpIDo9IGludGVncmF0b3IKKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfQ0FNRUxPVCkJICAgOj0gZXB4YTEwZGIKK3RleHRhZGRyLSQoQ09ORklHX0FSQ0hfQ0xQUzcxMVgpICAgOj0gMHhjMDAyODAwMAorIG1hY2hpbmUtJChDT05GSUdfQVJDSF9DTFBTNzExWCkgICA6PSBjbHBzNzExeAordGV4dGFkZHItJChDT05GSUdfQVJDSF9GT1JUVU5FVCkgICA6PSAweGMwMDA4MDAwCisgbWFjaGluZS0kKENPTkZJR19BUkNIX0lPUDNYWCkJICAgOj0gaW9wM3h4CisgbWFjaGluZS0kKENPTkZJR19BUkNIX0lYUDRYWCkJICAgOj0gaXhwNHh4CisgbWFjaGluZS0kKENPTkZJR19BUkNIX0lYUDIwMDApICAgIDo9IGl4cDIwMDAKKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfT01BUCkJICAgOj0gb21hcAorIG1hY2hpbmUtJChDT05GSUdfQVJDSF9TM0MyNDEwKQkgICA6PSBzM2MyNDEwCisgbWFjaGluZS0kKENPTkZJR19BUkNIX0xIN0E0MFgpCSAgIDo9IGxoN2E0MHgKKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfVkVSU0FUSUxFKSAgOj0gdmVyc2F0aWxlCisgbWFjaGluZS0kKENPTkZJR19BUkNIX0lNWCkJICAgOj0gaW14CisgbWFjaGluZS0kKENPTkZJR19BUkNIX0g3MjBYKQkgICA6PSBoNzIweAorCitpZmVxICgkKENPTkZJR19BUkNIX0VCU0ExMTApLHkpCisjIFRoaXMgaXMgd2hhdCBoYXBwZW5zIGlmIHlvdSBmb3JnZXQgdGhlIElPQ1MxNiBsaW5lLgorIyBQQ01DSUEgY2FyZHMgc3RvcCB3b3JraW5nLgorQ0ZMQUdTXzNjNTg5X2NzLm8gOj0tRElTQV9TSVhURUVOX0JJVF9QRVJJUEhFUkFMCitleHBvcnQgQ0ZMQUdTXzNjNTg5X2NzLm8KK2VuZGlmCisKK1RFWFRBRERSIDo9ICQodGV4dGFkZHIteSkKK2lmZXEgKCQoQ09ORklHX1hJUF9LRVJORUwpLHkpCisgIERBVEFBRERSIDo9ICQoVEVYVEFERFIpCisgIHhpcGFkZHItJChDT05GSUdfQVJDSF9DTzI4NSkgOj0gMHg1ZjAwMDAwMAorICB4aXBhZGRyLXkgPz0gMHhiZjAwMDAwMAorICAjIFJlcGxhY2UgcGh5cyBhZGRyIHdpdGggdmlydCBhZGRyIHdoaWxlIGtlZXBpbmcgb2Zmc2V0IGZyb20gYmFzZS4KKyAgVEVYVEFERFIgOj0gJChzaGVsbCBlY2hvICQoQ09ORklHX1hJUF9QSFlTX0FERFIpICQoeGlwYWRkci15KSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICBhd2sgLS1ub24tZGVjaW1hbC1kYXRhICcvWzp4ZGlnaXQ6XS8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW50ZigiMHgleFxuIiwgYW5kKCQkMSwgMHgwMDBmZmZmZikgKyAkJDIpIH0nICkKK2VuZGlmCisKK2lmZXEgKCQoaW5jZGlyLXkpLCkKK2luY2Rpci15IDo9ICQobWFjaGluZS15KQorZW5kaWYKK0lOQ0RJUiAgIDo9IGFyY2gtJChpbmNkaXIteSkKK2lmbmVxICgkKG1hY2hpbmUteSksKQorTUFDSElORSAgOj0gYXJjaC9hcm0vbWFjaC0kKG1hY2hpbmUteSkvCitlbHNlCitNQUNISU5FICA6PQorZW5kaWYKKyAgCitleHBvcnQJVEVYVEFERFIgREFUQUFERFIgR1pGTEFHUworCisjIERvIHdlIGhhdmUgRkFTVEZQRT8KK0ZBU1RGUEUJCTo9YXJjaC9hcm0vZmFzdGZwZQoraWZlcSAoJChGQVNURlBFKSwkKHdpbGRjYXJkICQoRkFTVEZQRSkpKQorRkFTVEZQRV9PQkoJOj0kKEZBU1RGUEUpLworZW5kaWYKKworIyBJZiB3ZSBoYXZlIGEgbWFjaGluZS1zcGVjaWZpYyBkaXJlY3RvcnksIHRoZW4gaW5jbHVkZSBpdCBpbiB0aGUgYnVpbGQuCitjb3JlLXkJCQkJKz0gYXJjaC9hcm0va2VybmVsLyBhcmNoL2FybS9tbS8gYXJjaC9hcm0vY29tbW9uLworY29yZS15CQkJCSs9ICQoTUFDSElORSkKK2NvcmUtJChDT05GSUdfRlBFX05XRlBFKQkrPSBhcmNoL2FybS9ud2ZwZS8KK2NvcmUtJChDT05GSUdfRlBFX0ZBU1RGUEUpCSs9ICQoRkFTVEZQRV9PQkopCitjb3JlLSQoQ09ORklHX1ZGUCkJCSs9IGFyY2gvYXJtL3ZmcC8KKworZHJpdmVycy0kKENPTkZJR19PUFJPRklMRSkgICAgICArPSBhcmNoL2FybS9vcHJvZmlsZS8KK2RyaXZlcnMtJChDT05GSUdfQVJDSF9DTFBTNzUwMCkJKz0gZHJpdmVycy9hY29ybi9jaGFyLworZHJpdmVycy0kKENPTkZJR19BUkNIX0w3MjAwKQkrPSBkcml2ZXJzL2Fjb3JuL2NoYXIvCisKK2xpYnMteQkJCQkrPSBhcmNoL2FybS9saWIvCisKKyMgRGVmYXVsdCB0YXJnZXQgd2hlbiBleGVjdXRpbmcgcGxhaW4gbWFrZQoraWZlcSAoJChDT05GSUdfWElQX0tFUk5FTCkseSkKK2FsbDogeGlwSW1hZ2UKK2Vsc2UKK2FsbDogekltYWdlCitlbmRpZgorCitib290IDo9IGFyY2gvYXJtL2Jvb3QKKworIwlVcGRhdGUgbWFjaGluZSBhcmNoIGFuZCBwcm9jIHN5bWxpbmtzIGlmIHNvbWV0aGluZyB3aGljaCBhZmZlY3RzCisjCXRoZW0gY2hhbmdlZC4gIFdlIHVzZSAuYXJjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgd2VyZSB1cGRhdGVkCisjCWxhc3QsIG90aGVyd2lzZSBtYWtlIHVzZXMgdGhlIHRhcmdldCBkaXJlY3RvcnkgbXRpbWUuCisKK2luY2x1ZGUvYXNtLWFybS8uYXJjaDogJCh3aWxkY2FyZCBpbmNsdWRlL2NvbmZpZy9hcmNoLyouaCkgaW5jbHVkZS9jb25maWcvTUFSS0VSCisJQGVjaG8gJyAgU1lNTElOSyBpbmNsdWRlL2FzbS1hcm0vYXJjaCAtPiBpbmNsdWRlL2FzbS1hcm0vJChJTkNESVIpJworaWZuZXEgKCQoS0JVSUxEX1NSQyksKQorCSQoUSlta2RpciAtcCBpbmNsdWRlL2FzbS1hcm0KKwkkKFEpbG4gLWZzbiAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtLWFybS8kKElOQ0RJUikgaW5jbHVkZS9hc20tYXJtL2FyY2gKK2Vsc2UKKwkkKFEpbG4gLWZzbiAkKElOQ0RJUikgaW5jbHVkZS9hc20tYXJtL2FyY2gKK2VuZGlmCisJQHRvdWNoICRACisKK3ByZXBhcmU6IG1ha2V0b29scyBpbmNsdWRlL2FzbS1hcm0vLmFyY2gKKworLlBIT05ZOiBtYWtldG9vbHMgRk9SQ0UKK21ha2V0b29sczogaW5jbHVkZS9hc20tYXJtL2NvbnN0YW50cy5oIGluY2x1ZGUvbGludXgvdmVyc2lvbi5oIEZPUkNFCisJJChRKSQoTUFLRSkgJChidWlsZCk9YXJjaC9hcm0vdG9vbHMgaW5jbHVkZS9hc20tYXJtL21hY2gtdHlwZXMuaAorCisjIENvbnZlcnQgYnpJbWFnZSB0byB6SW1hZ2UKK2J6SW1hZ2U6IHpJbWFnZQorCit6SW1hZ2UgSW1hZ2UgeGlwSW1hZ2UgYm9vdHBJbWFnZSB1SW1hZ2U6IHZtbGludXgKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpIE1BQ0hJTkU9JChNQUNISU5FKSAkKGJvb3QpLyRACisKK3ppbnN0YWxsIGluc3RhbGw6IHZtbGludXgKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpIE1BQ0hJTkU9JChNQUNISU5FKSAkQAorCitDTEVBTl9GSUxFUyArPSBpbmNsdWRlL2FzbS1hcm0vY29uc3RhbnRzLmgqIGluY2x1ZGUvYXNtLWFybS9tYWNoLXR5cGVzLmggXAorCSAgICAgICBpbmNsdWRlL2FzbS1hcm0vYXJjaCBpbmNsdWRlL2FzbS1hcm0vLmFyY2gKKworIyBXZSB1c2UgTVJQUk9QRVJfRklMRVMgYW5kIENMRUFOX0ZJTEVTIG5vdworYXJjaGNsZWFuOgorCSQoUSkkKE1BS0UpICQoY2xlYW4pPSQoYm9vdCkKKworIyBNeSB0ZXN0aW5nIHRhcmdldHMgKGJ5cGFzc2VzIGRlcGVuZGVuY2llcykKK2JwOjsJJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSBNQUNISU5FPSQoTUFDSElORSkgJChib290KS9ib290cEltYWdlCitpIHppOjsJJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSBNQUNISU5FPSQoTUFDSElORSkgJEAKKworYXJjaC8kKEFSQ0gpL2tlcm5lbC9hc20tb2Zmc2V0cy5zOiBpbmNsdWRlL2FzbSBpbmNsdWRlL2xpbnV4L3ZlcnNpb24uaCBcCisJCQkJICAgaW5jbHVkZS9hc20tYXJtLy5hcmNoCisKK2luY2x1ZGUvYXNtLSQoQVJDSCkvY29uc3RhbnRzLmg6IGFyY2gvJChBUkNIKS9rZXJuZWwvYXNtLW9mZnNldHMucworCSQoY2FsbCBmaWxlY2hrLGdlbi1hc20tb2Zmc2V0cykKKworZGVmaW5lIGFyY2hoZWxwCisgIGVjaG8gICcqIHpJbWFnZSAgICAgICAgLSBDb21wcmVzc2VkIGtlcm5lbCBpbWFnZSAoYXJjaC8kKEFSQ0gpL2Jvb3QvekltYWdlKScKKyAgZWNobyAgJyAgSW1hZ2UgICAgICAgICAtIFVuY29tcHJlc3NlZCBrZXJuZWwgaW1hZ2UgKGFyY2gvJChBUkNIKS9ib290L0ltYWdlKScKKyAgZWNobyAgJyogeGlwSW1hZ2UgICAgICAtIFhJUCBrZXJuZWwgaW1hZ2UsIGlmIGNvbmZpZ3VyZWQgKGFyY2gvJChBUkNIKS9ib290L3hpcEltYWdlKScKKyAgZWNobyAgJyAgYm9vdHBJbWFnZSAgICAtIENvbWJpbmVkIHpJbWFnZSBhbmQgaW5pdGlhbCBSQU0gZGlzaycgCisgIGVjaG8gICcgICAgICAgICAgICAgICAgICAoc3VwcGx5IGluaXRyZCBpbWFnZSB2aWEgbWFrZSB2YXJpYWJsZSBJTklUUkQ9PHBhdGg+KScKKyAgZWNobyAgJyAgaW5zdGFsbCAgICAgICAtIEluc3RhbGwgdW5jb21wcmVzc2VkIGtlcm5lbCcKKyAgZWNobyAgJyAgemluc3RhbGwgICAgICAtIEluc3RhbGwgY29tcHJlc3NlZCBrZXJuZWwnCisgIGVjaG8gICcgICAgICAgICAgICAgICAgICBJbnN0YWxsIHVzaW5nICh5b3VyKSB+L2Jpbi9pbnN0YWxsa2VybmVsIG9yJworICBlY2hvICAnICAgICAgICAgICAgICAgICAgKGRpc3RyaWJ1dGlvbikgL3NiaW4vaW5zdGFsbGtlcm5lbCBvcicKKyAgZWNobyAgJyAgICAgICAgICAgICAgICAgIGluc3RhbGwgdG8gJCQoSU5TVEFMTF9QQVRIKSBhbmQgcnVuIGxpbG8nCitlbmRlZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9NYWtlZmlsZSBiL2FyY2gvYXJtL2Jvb3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM3YTM1MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvTWFrZWZpbGUKQEAgLTAsMCArMSw5MSBAQAorIworIyBhcmNoL2FybS9ib290L01ha2VmaWxlCisjCisjIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgUnVzc2VsbCBLaW5nCisjCisKK01LSU1BR0UgICAgICAgICA6PSAkKHNyY3RyZWUpL3NjcmlwdHMvbWt1Ym9vdC5zaAorCitpZm5lcSAoJChNQUNISU5FKSwpCitpbmNsdWRlICQoc3JjdHJlZSkvJChNQUNISU5FKS9NYWtlZmlsZS5ib290CitlbmRpZgorCisjIE5vdGU6IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBtdXN0IGFsd2F5cyBiZSB0cnVlOgorIyAgIFpSRUxBRERSID09IHZpcnRfdG9fcGh5cyhURVhUQUREUikKKyMgICBQQVJBTVNfUEhZUyBtdXN0IGJlIHdpdGhpbiA0TUIgb2YgWlJFTEFERFIKKyMgICBJTklUUkRfUEhZUyBtdXN0IGJlIGluIFJBTQorWlJFTEFERFIgICAgOj0gJCh6cmVsYWRkci15KQorUEFSQU1TX1BIWVMgOj0gJChwYXJhbXNfcGh5cy15KQorSU5JVFJEX1BIWVMgOj0gJChpbml0cmRfcGh5cy15KQorCitleHBvcnQgWlJFTEFERFIgSU5JVFJEX1BIWVMgUEFSQU1TX1BIWVMKKwordGFyZ2V0cyA6PSBJbWFnZSB6SW1hZ2UgeGlwSW1hZ2UgYm9vdHBJbWFnZSB1SW1hZ2UKKworaWZlcSAoJChDT05GSUdfWElQX0tFUk5FTCkseSkKKworJChvYmopL3hpcEltYWdlOiB2bWxpbnV4IEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKKwlAZWNobyAnICBLZXJuZWw6ICRAIGlzIHJlYWR5IChwaHlzaWNhbCBhZGRyZXNzOiAkKENPTkZJR19YSVBfUEhZU19BRERSKSknCisKKyQob2JqKS9JbWFnZSAkKG9iaikvekltYWdlOiBGT1JDRQorCUBlY2hvICdLZXJuZWwgY29uZmlndXJlZCBmb3IgWElQIChDT05GSUdfWElQX0tFUk5FTD15KScKKwlAZWNobyAnT25seSB0aGUgeGlwSW1hZ2UgdGFyZ2V0IGlzIGF2YWlsYWJsZSBpbiB0aGlzIGNhc2UnCisJQGZhbHNlCisKK2Vsc2UKKworJChvYmopL3hpcEltYWdlOiBGT1JDRQorCUBlY2hvICdLZXJuZWwgbm90IGNvbmZpZ3VyZWQgZm9yIFhJUCAoQ09ORklHX1hJUF9LRVJORUwhPXkpJworCUBmYWxzZQorCiskKG9iaikvSW1hZ2U6IHZtbGludXggRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KQorCUBlY2hvICcgIEtlcm5lbDogJEAgaXMgcmVhZHknCisKKyQob2JqKS9jb21wcmVzc2VkL3ZtbGludXg6ICQob2JqKS9JbWFnZSBGT1JDRQorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQob2JqKS9jb21wcmVzc2VkICRACisKKyQob2JqKS96SW1hZ2U6CSQob2JqKS9jb21wcmVzc2VkL3ZtbGludXggRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KQorCUBlY2hvICcgIEtlcm5lbDogJEAgaXMgcmVhZHknCisKK2VuZGlmCisKK3F1aWV0X2NtZF91aW1hZ2UgPSBVSU1BR0UgICRACisgICAgICBjbWRfdWltYWdlID0gJChDT05GSUdfU0hFTEwpICQoTUtJTUFHRSkgLUEgYXJtIC1PIGxpbnV4IC1UIGtlcm5lbCBcCisJCSAgIC1DIG5vbmUgLWEgJChaUkVMQUREUikgLWUgJChaUkVMQUREUikgXAorCQkgICAtbiAnTGludXgtJChLRVJORUxSRUxFQVNFKScgLWQgJDwgJEAKKworJChvYmopL3VJbWFnZToJJChvYmopL3pJbWFnZSBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSkKKwlAZWNobyAnICBJbWFnZSAkQCBpcyByZWFkeScKKworJChvYmopL2Jvb3RwL2Jvb3RwOiAkKG9iaikvekltYWdlIGluaXRyZCBGT1JDRQorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQob2JqKS9ib290cCAkQAorCUA6CisKKyQob2JqKS9ib290cEltYWdlOiAkKG9iaikvYm9vdHAvYm9vdHAgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KQorCUBlY2hvICcgIEtlcm5lbDogJEAgaXMgcmVhZHknCisKKy5QSE9OWTogaW5pdHJkIEZPUkNFCitpbml0cmQ6CisJQHRlc3QgIiQoSU5JVFJEX1BIWVMpIiAhPSAiIiB8fCBcCisJKGVjaG8gVGhpcyBtYWNoaW5lIGRvZXMgbm90IHN1cHBvcnQgSU5JVFJEOyBleGl0IC0xKQorCUB0ZXN0ICIkKElOSVRSRCkiICE9ICIiIHx8IFwKKwkoZWNobyBZb3UgbXVzdCBzcGVjaWZ5IElOSVRSRDsgZXhpdCAtMSkKKworaW5zdGFsbDogJChvYmopL0ltYWdlCisJJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvJChzcmMpL2luc3RhbGwuc2ggJChLRVJORUxSRUxFQVNFKSBcCisJJChvYmopL0ltYWdlIFN5c3RlbS5tYXAgIiQoSU5TVEFMTF9QQVRIKSIKKworemluc3RhbGw6ICQob2JqKS96SW1hZ2UKKwkkKENPTkZJR19TSEVMTCkgJChzcmN0cmVlKS8kKHNyYykvaW5zdGFsbC5zaCAkKEtFUk5FTFJFTEVBU0UpIFwKKwkkKG9iaikvekltYWdlIFN5c3RlbS5tYXAgIiQoSU5TVEFMTF9QQVRIKSIKKworc3ViZGlyLQkgICAgOj0gYm9vdHAgY29tcHJlc3NlZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9ib290cC9NYWtlZmlsZSBiL2FyY2gvYXJtL2Jvb3QvYm9vdHAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU4ODc5YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvYm9vdHAvTWFrZWZpbGUKQEAgLTAsMCArMSwyNCBAQAorIworIyBsaW51eC9hcmNoL2FybS9ib290L2Jvb3RwL01ha2VmaWxlCisjCisKK0xERkxBR1NfYm9vdHAJOj0tcCAtLW5vLXVuZGVmaW5lZCAtWCBcCisJCSAtLWRlZnN5bSBpbml0cmRfcGh5cz0kKElOSVRSRF9QSFlTKSBcCisJCSAtLWRlZnN5bSBwYXJhbXNfcGh5cz0kKFBBUkFNU19QSFlTKSAtVAorQUZMQUdTX2luaXRyZC5vIDo9LURJTklUUkQ9XCIkKElOSVRSRClcIgorCit0YXJnZXRzCTo9IGJvb3RwIGluaXQubyBrZXJuZWwubyBpbml0cmQubworCisjIE5vdGUgdGhhdCBib290cC5sZHMgcGlja3MgdXAga2VybmVsLm8gYW5kIGluaXRyZC5vCiskKG9iaikvYm9vdHA6CSQoc3JjKS9ib290cC5sZHMgJChhZGRwcmVmaXggJChvYmopLyxpbml0Lm8ga2VybmVsLm8gaW5pdHJkLm8pIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsbGQpCisJQDoKKworIyBrZXJuZWwubyBhbmQgaW5pdHJkLm8gaW5jbHVkZXMgYSBiaW5hcnkgaW1hZ2UgdXNpbmcKKyMgLmluY2JpbiwgYSBkZXBlbmRlbmN5IHdoaWNoIGlzIG5vdCB0cmFja2VkIGF1dG9tYXRpY2FsbHkKKworJChvYmopL2tlcm5lbC5vOiBhcmNoL2FybS9ib290L3pJbWFnZSBGT1JDRQorCiskKG9iaikvaW5pdHJkLm86ICQoSU5JVFJEKSBGT1JDRQorCisuUEhPTlk6CSQoSU5JVFJEKSBGT1JDRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9ib290cC9ib290cC5sZHMgYi9hcmNoL2FybS9ib290L2Jvb3RwL2Jvb3RwLmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTNkODFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9ib290cC9ib290cC5sZHMKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9ib290L2Jvb3RwL2Jvb3RwLmxkcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUNUSU9OUworeworICAuID0gMDsKKyAgLnRleHQgOiB7CisgICBfc3RleHQgPSAuOworICAgKiguc3RhcnQpCisgICAqKC50ZXh0KQorICAgaW5pdHJkX3NpemUgPSBpbml0cmRfZW5kIC0gaW5pdHJkX3N0YXJ0OworICAgX2V0ZXh0ID0gLjsKKyAgfQorICAKKyAgLnN0YWIgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4IDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAwIDogeyAqKC5jb21tZW50KSB9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2Jvb3RwL2luaXQuUyBiL2FyY2gvYXJtL2Jvb3QvYm9vdHAvaW5pdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmN2JjNzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2Jvb3RwL2luaXQuUwpAQCAtMCwwICsxLDg2IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2Jvb3QvYm9vdHAvaW5pdC5TCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMC0yMDAzIFJ1c3NlbGwgS2luZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICAiSGVhZGVyIiBmaWxlIGZvciBzcGxpdHRpbmcga2VybmVsICsgaW5pdHJkLiAgTm90ZSB0aGF0IHdlIHBhc3MKKyAqICByMCB0aHJvdWdoIHRvIHIzIHN0cmFpZ2h0IHRocm91Z2guCisgKgorICogIFRoaXMgZGVtb25zdHJhdGVzIGhvdyB0byBhcHBlbmQgY29kZSB0byB0aGUgc3RhcnQgb2YgdGhlIGtlcm5lbAorICogIHpJbWFnZSwgYW5kIGJvb3QgdGhlIGtlcm5lbCB3aXRob3V0IGNvcHlpbmcgaXQgYXJvdW5kLiAgVGhpcworICogIGV4YW1wbGUgd291bGQgYmUgc2ltcGxlcjsgaWYgd2UgZGlkbid0IGhhdmUgYW4gb2JqZWN0IG9mIHVua25vd24KKyAqICBzaXplIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUga2VybmVsLCB3ZSBjb3VsZCBidWlsZCB0aGlzIGludG8KKyAqICBhIGJpbmFyeSBibG9iLCBhbmQgY29uY2F0ZW5hdGUgdGhlIHpJbWFnZSB1c2luZyB0aGUgY2F0IGNvbW1hbmQuCisgKi8KKwkJLnNlY3Rpb24gLnN0YXJ0LCNhbGxvYywjZXhlY2luc3RyCisJCS50eXBlCV9zdGFydCwgI2Z1bmN0aW9uCisJCS5nbG9ibAlfc3RhcnQKKworX3N0YXJ0OgkJYWRkCWxyLCBwYywgIy0weDgJCUAgbHIgPSBjdXJyZW50IGxvYWQgYWRkcgorCQlhZHIJcjEzLCBkYXRhCisJCWxkbWlhCXIxMyEsIHtyNC1yNn0JCUAgcjUgPSBkZXN0LCByNiA9IGxlbmd0aAorCQlhZGQJcjQsIHI0LCBscgkJQCByNCA9IGluaXRyZF9zdGFydCArIGxvYWQgYWRkcgorCQlibAltb3ZlCQkJQCBtb3ZlIHRoZSBpbml0cmQKKworLyoKKyAqIFNldHVwIHRoZSBpbml0cmQgcGFyYW1ldGVycyB0byBwYXNzIHRvIHRoZSBrZXJuZWwuICBUaGlzIGNhbiBvbmx5IGJlCisgKiBwYXNzZWQgaW4gdmlhIHRoZSB0YWdnZWQgbGlzdC4KKyAqLworCQlsZG1pYQlyMTMsIHtyNS1yOX0JCUAgZ2V0IHNpemUgYW5kIGFkZHIgb2YgaW5pdHJkCisJCQkJCQlAIHI1ID0gQVRBR19DT1JFCisJCQkJCQlAIHI2ID0gQVRBR19JTklUUkQyCisJCQkJCQlAIHI3ID0gaW5pdHJkIHN0YXJ0CisJCQkJCQlAIHI4ID0gaW5pdHJkIGVuZAorCQkJCQkJQCByOSA9IHBhcmFtX3N0cnVjdCBhZGRyZXNzCisKKwkJbGRyCXIxMCwgW3I5LCAjNF0JCUAgZ2V0IGZpcnN0IHRhZworCQl0ZXEJcjEwLCByNQkJCUAgaXMgaXQgQVRBR19DT1JFPworLyoKKyAqIElmIHdlIGRpZG4ndCBmaW5kIGEgdmFsaWQgdGFnIGxpc3QsIGNyZWF0ZSBhIGR1bW15IEFUQUdfQ09SRSBlbnRyeS4KKyAqLworCQltb3ZuZQlyMTAsICMwCQkJQCB0ZXJtaW5hdG9yCisJCW1vdm5lCXI0LCAjMgkJCUAgU2l6ZSBvZiB0aGlzIGVudHJ5ICgyIHdvcmRzKQorCQlzdG1uZWlhCXI5LCB7cjQsIHI1LCByMTB9CUAgU2l6ZSwgQVRBR19DT1JFLCB0ZXJtaW5hdG9yCisKKy8qCisgKiBmaW5kIHRoZSBlbmQgb2YgdGhlIHRhZyBsaXN0LCBhbmQgdGhlbiBhZGQgYW4gSU5JVFJEIHRhZyBvbiB0aGUgZW5kLgorICogSWYgdGhlcmUgaXMgYWxyZWFkeSBhbiBJTklUUkQgdGFnLCB0aGVuIHdlIGlnbm9yZSBpdDsgdGhlIGxhc3QgSU5JVFJECisgKiB0YWcgdGFrZXMgcHJlY2lkZW5jZS4KKyAqLwordGFnbGlzdDoJbGRyCXIxMCwgW3I5LCAjMF0JCUAgdGFnIGxlbmd0aAorCQl0ZXEJcjEwLCAjMAkJCUAgbGFzdCB0YWcgKHplcm8gbGVuZ3RoKT8KKwkJYWRkbmUJcjksIHI5LCByMTAsIGxzbCAjMgorCQlibmUJdGFnbGlzdAorCisJCW1vdglyNSwgIzQJCQlAIFNpemUgb2YgaW5pdHJkIHRhZyAoNCB3b3JkcykKKwkJc3RtaWEJcjksIHtyNSwgcjYsIHI3LCByOCwgcjEwfQorCQliCWtlcm5lbF9zdGFydAkJQCBjYWxsIGtlcm5lbAorCisvKgorICogTW92ZSB0aGUgYmxvY2sgb2YgbWVtb3J5IGxlbmd0aCByNiBmcm9tIGFkZHJlc3MgcjQgdG8gYWRkcmVzcyByNQorICovCittb3ZlOgkJbGRtaWEJcjQhLCB7cjcgLSByMTB9CQlAIG1vdmUgMzItYnl0ZXMgYXQgYSB0aW1lCisJCXN0bWlhCXI1ISwge3I3IC0gcjEwfQorCQlsZG1pYQlyNCEsIHtyNyAtIHIxMH0KKwkJc3RtaWEJcjUhLCB7cjcgLSByMTB9CisJCXN1YnMJcjYsIHI2LCAjOCAqIDQKKwkJYmNzCW1vdmUKKwkJbW92CXBjLCBscgorCisJCS5zaXplCV9zdGFydCwgLiAtIF9zdGFydAorCisJCS50eXBlCWRhdGEsI29iamVjdAorZGF0YToJCS53b3JkCWluaXRyZF9zdGFydAkJQCBzb3VyY2UgaW5pdHJkIGFkZHJlc3MKKwkJLndvcmQJaW5pdHJkX3BoeXMJCUAgZGVzdGluYXRpb24gaW5pdHJkIGFkZHJlc3MKKwkJLndvcmQJaW5pdHJkX3NpemUJCUAgaW5pdHJkIHNpemUKKworCQkud29yZAkweDU0NDEwMDAxCQlAIHI1ID0gQVRBR19DT1JFCisJCS53b3JkCTB4NTQ0MjAwMDUJCUAgcjYgPSBBVEFHX0lOSVRSRDIKKwkJLndvcmQJaW5pdHJkX3BoeXMJCUAgcjcKKwkJLndvcmQJaW5pdHJkX3NpemUJCUAgcjgKKwkJLndvcmQJcGFyYW1zX3BoeXMJCUAgcjkKKwkJLnNpemUJZGF0YSwgLiAtIGRhdGEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvYm9vdHAvaW5pdHJkLlMgYi9hcmNoL2FybS9ib290L2Jvb3RwL2luaXRyZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MWVhMTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2Jvb3RwL2luaXRyZC5TCkBAIC0wLDAgKzEsNiBAQAorCS50eXBlCWluaXRyZF9zdGFydCwjb2JqZWN0CisJLmdsb2JsCWluaXRyZF9zdGFydAoraW5pdHJkX3N0YXJ0OgorCS5pbmNiaW4JSU5JVFJECisJLmdsb2JsCWluaXRyZF9lbmQKK2luaXRyZF9lbmQ6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2Jvb3RwL2tlcm5lbC5TIGIvYXJjaC9hcm0vYm9vdC9ib290cC9rZXJuZWwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODdhMjVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9ib290cC9rZXJuZWwuUwpAQCAtMCwwICsxLDYgQEAKKwkuZ2xvYmwJa2VybmVsX3N0YXJ0CitrZXJuZWxfc3RhcnQ6CisJLmluY2JpbgkiYXJjaC9hcm0vYm9vdC96SW1hZ2UiCisJLmdsb2JsCWtlcm5lbF9lbmQKK2tlcm5lbF9lbmQ6CisJLmFsaWduCTIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjUwNWNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC0wLDAgKzEsMTE0IEBACisjCisjIGxpbnV4L2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorIworIyBjcmVhdGUgYSBjb21wcmVzc2VkIHZtbGludXogaW1hZ2UgZnJvbSB0aGUgb3JpZ2luYWwgdm1saW51eAorIworCitIRUFECT0gaGVhZC5vCitPQkpTCT0gbWlzYy5vCitGT05UQwk9IGRyaXZlcnMvdmlkZW8vY29uc29sZS9mb250X2Fjb3JuXzh4OC5jCisKK0ZPTlQgPSAkKGFkZHByZWZpeCAuLi8uLi8uLi8uLi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvLCBmb250X2Fjb3JuXzh4OC5vKQorCisjCisjIEFyY2hpdGVjdHVyZSBkZXBlbmRlbmNpZXMKKyMKK2lmZXEgKCQoQ09ORklHX0FSQ0hfQUNPUk4pLHkpCitPQkpTCQkrPSBsbF9jaGFyX3dyLm8gJChGT05UKQorZW5kaWYKKworaWZlcSAoJChDT05GSUdfQVJDSF9TSEFSSykseSkKK09CSlMJCSs9IGhlYWQtc2hhcmsubyBvZnctc2hhcmsubworZW5kaWYKKworaWZlcSAoJChDT05GSUdfQVJDSF9DQU1FTE9UKSx5KQorT0JKUwkJKz0gaGVhZC1lcHhhMTBkYi5vCitlbmRpZgorCitpZmVxICgkKENPTkZJR19BUkNIX0w3MjAwKSx5KQorT0JKUwkJKz0gaGVhZC1sNzIwMC5vCitlbmRpZgorCitpZmVxICgkKENPTkZJR19BUkNIX0NMUFM3NTAwKSx5KQorSEVBRAkJPSBoZWFkLWNscHM3NTAwLm8KK2VuZGlmCisKK2lmZXEgKCQoQ09ORklHX0FSQ0hfUDcyMFQpLHkpCisjIEJvcnJvdyB0aGlzIGNvZGUgZnJvbSBTQTExMDAKK09CSlMJCSs9IGhlYWQtc2ExMTAwLm8KK2VuZGlmCisKK2lmZXEgKCQoQ09ORklHX0FSQ0hfU0ExMTAwKSx5KQorT0JKUwkJKz0gaGVhZC1zYTExMDAubworZW5kaWYKKworaWZlcSAoJChDT05GSUdfQ1BVX1hTQ0FMRSkseSkKK09CSlMJCSs9IGhlYWQteHNjYWxlLm8KK2VuZGlmCisKK2lmZXEgKCQoQ09ORklHX1BYQV9TSEFSUFNMKSx5KQorT0JKUwkJKz0gaGVhZC1zaGFycHNsLm8KK2VuZGlmCisKK2lmZXEgKCQoQ09ORklHX0RFQlVHX0lDRURDQykseSkKK09CSlMgICAgICAgICAgICArPSBpY2UtZGNjLm8KK2VuZGlmCisKK2lmZXEgKCQoQ09ORklHX0NQVV9CSUdfRU5ESUFOKSx5KQorT0JKUwkJKz0gYmlnLWVuZGlhbi5vCitlbmRpZgorCisjCisjIFdlIG5vdyBoYXZlIGEgUElDIGRlY29tcHJlc3NvciBpbXBsZW1lbnRhdGlvbi4gIERlY29tcHJlc3NvcnMgcnVubmluZworIyBmcm9tIFJBTSBzaG91bGQgbm90IGRlZmluZSBaVEVYVEFERFIuICBEZWNvbXByZXNzb3JzIHJ1bm5pbmcgZGlyZWN0bHkKKyMgZnJvbSBST00gb3IgRmxhc2ggbXVzdCBkZWZpbmUgWlRFWFRBRERSIChwcmVmZXJhYmx5IHZpYSB0aGUgY29uZmlnKQorIyBGSVhNRTogUHJldmlvdXMgYXNzaWdubWVudCB0byB6dGV4dGFkZHIteSBpcyBsb3N0IGhlcmUuIFNlZSBTSEFSSworaWZlcSAoJChDT05GSUdfWkJPT1RfUk9NKSx5KQorWlRFWFRBRERSCTo9ICQoQ09ORklHX1pCT09UX1JPTV9URVhUKQorWkJTU0FERFIJOj0gJChDT05GSUdfWkJPT1RfUk9NX0JTUykKK2Vsc2UKK1pURVhUQUREUgk6PSAwCitaQlNTQUREUgk6PSBBTElHTig0KQorZW5kaWYKKworU0VERkxBR1MJPSBzL1RFWFRfU1RBUlQvJChaVEVYVEFERFIpLztzL0JTU19TVEFSVC8kKFpCU1NBRERSKS8KKwordGFyZ2V0cyAgICAgICA6PSB2bWxpbnV4IHZtbGludXgubGRzIHBpZ2d5Lmd6IHBpZ2d5Lm8gJChGT05UKSBcCisJCSBoZWFkLm8gbWlzYy5vICQoT0JKUykKK0VYVFJBX0NGTEFHUyAgOj0gLWZwaWMKK0VYVFJBX0FGTEFHUyAgOj0KKworIyBTdXBwbHkgWlJFTEFERFIsIElOSVRSRF9QSFlTIGFuZCBQQVJBTVNfUEhZUyB0byB0aGUgZGVjb21wcmVzc29yIHZpYQorIyBsaW5rZXIgc3ltYm9scy4gIFdlIG9ubHkgZGVmaW5lIGluaXRyZF9waHlzIGFuZCBwYXJhbXNfcGh5cyBpZiB0aGUKKyMgbWFjaGluZSBjbGFzcyBkZWZpbmVkIHRoZSBjb3JyZXNwb25kaW5nIG1ha2VmaWxlIHZhcmlhYmxlLgorTERGTEFHU192bWxpbnV4IDo9IC0tZGVmc3ltIHpyZWxhZGRyPSQoWlJFTEFERFIpCitpZm5lcSAoJChJTklUUkRfUEhZUyksKQorTERGTEFHU192bWxpbnV4ICs9IC0tZGVmc3ltIGluaXRyZF9waHlzPSQoSU5JVFJEX1BIWVMpCitlbmRpZgoraWZuZXEgKCQoUEFSQU1TX1BIWVMpLCkKK0xERkxBR1Nfdm1saW51eCArPSAtLWRlZnN5bSBwYXJhbXNfcGh5cz0kKFBBUkFNU19QSFlTKQorZW5kaWYKK0xERkxBR1Nfdm1saW51eCArPSAtcCAtLW5vLXVuZGVmaW5lZCAtWCBcCisJJChzaGVsbCAkKENDKSAkKENGTEFHUykgLS1wcmludC1saWJnY2MtZmlsZS1uYW1lKSAtVAorCisjIERvbid0IGFsbG93IGFueSBzdGF0aWMgZGF0YSBpbiBtaXNjLm8sIHdoaWNoCisjIHdvdWxkIG90aGVyd2lzZSBtZXNzIHVwIG91ciBHT1QgdGFibGUKK0NGTEFHU19taXNjLm8gOj0gLURzdGF0aWM9CisKKyQob2JqKS92bWxpbnV4OiAkKG9iaikvdm1saW51eC5sZHMgJChvYmopLyQoSEVBRCkgJChvYmopL3BpZ2d5Lm8gXAorCSAJJChhZGRwcmVmaXggJChvYmopLywgJChPQkpTKSkgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxsZCkKKwlAOgorCiskKG9iaikvcGlnZ3kuZ3o6ICQob2JqKS8uLi9JbWFnZSBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLGd6aXApCisKKyQob2JqKS9waWdneS5vOiAgJChvYmopL3BpZ2d5Lmd6IEZPUkNFCisKK0NGTEFHU19mb250X2Fjb3JuXzh4OC5vIDo9IC1Ec3RhdGljPQorCiskKG9iaikvdm1saW51eC5sZHM6ICQob2JqKS92bWxpbnV4Lmxkcy5pbiBhcmNoL2FybS9ib290L01ha2VmaWxlIC5jb25maWcKKwlAc2VkICIkKFNFREZMQUdTKSIgPCAkPCA+ICRACisKKyQob2JqKS9taXNjLm86ICQob2JqKS9taXNjLmMgaW5jbHVkZS9hc20vYXJjaC91bmNvbXByZXNzLmggbGliL2luZmxhdGUuYworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUuZGVidWcgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUuZGVidWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkxYTAzNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZS5kZWJ1ZwpAQCAtMCwwICsxLDIzIEBACisjCisjIGxpbnV4L2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorIworIyBjcmVhdGUgYSBjb21wcmVzc2VkIHZtbGludXggaW1hZ2UgZnJvbSB0aGUgb3JpZ2luYWwgdm1saW51eAorIworCitDT01QUkVTU0VEX0VYVFJBPS4uLy4uL2xpYi9sbF9jaGFyX3dyLm8KK09CSkVDVFM9bWlzYy1kZWJ1Zy5vIGxsX2NoYXJfd3IuYW91dC5vCisKK0NGTEFHUz0tRF9fS0VSTkVMX18gLU8yIC1EU1REQ19IRUFERVJTIC1EU1RBTkRBTE9ORV9ERUJVRyAtV2FsbCAtSS4uLy4uLy4uLy4uL2luY2x1ZGUgLWMKKwordGVzdC1nemlwOiBwaWdneS5hb3V0Lm8gJChPQkpFQ1RTKQorCSQoQ0MpIC1vICRAICQoT0JKRUNUUykgcGlnZ3kuYW91dC5vCisKK21pc2MtZGVidWcubzogbWlzYy5jCisJJChDQykgJChDRkxBR1MpIC1vICRAIG1pc2MuYworCitwaWdneS5hb3V0Lm86IHBpZ2d5Lm8KKwlhcm0tbGludXhlbGYtb2JqY29weSAtLWNoYW5nZS1sZWFkaW5nLWNoYXIgLUkgZWxmMzItYXJtIC1PIGFybS1hb3V0MzItbGludXggcGlnZ3kubyBwaWdneS5hb3V0Lm8KKworbGxfY2hhcl93ci5hb3V0Lm86ICQoQ09NUFJFU1NFRF9FWFRSQSkKKwlhcm0tbGludXhlbGYtb2JqY29weSAtLWNoYW5nZS1sZWFkaW5nLWNoYXIgLUkgZWxmMzItYXJtIC1PIGFybS1hb3V0MzItbGludXggJChDT01QUkVTU0VEX0VYVFJBKSBsbF9jaGFyX3dyLmFvdXQubworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvYmlnLWVuZGlhbi5TIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2JpZy1lbmRpYW4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWFiMjZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2JpZy1lbmRpYW4uUwpAQCAtMCwwICsxLDEzIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9iaWctZW5kaWFuLlMKKyAqCisgKiAgU3dpdGNoIENQVSBpbnRvIGJpZyBlbmRpYW4gbW9kZS4KKyAqICBBdXRob3I6IE5pY29sYXMgUGl0cmUKKyAqLworCisJLnNlY3Rpb24gIi5zdGFydCIsICNhbGxvYywgI2V4ZWNpbnN0cgorCisJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAlAIHJlYWQgY29udHJvbCByZWcKKwlvcnIJcjAsIHIwLCAjKDEgPDwgNykJQCBlbmFibGUgYmlnIGVuZGlhbiBtb2RlCisJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAlAIHdyaXRlIGNvbnRyb2wgcmVnCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLWNscHM3NTAwLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1jbHBzNzUwMC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhOGE2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1jbHBzNzUwMC5TCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxIE5leHVzIEVsZWN0cm9uaWNzIEx0ZAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworCQkvKiBUaGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IHdheXMgdGhlIGtlcm5lbCBjYW4gYmUKKwkJICAgYm9vdGVkIG9uIGEgNzUwMCBzeXN0ZW06IGZyb20gQW5nZWwgKGxvYWRlZCBpbiBSQU0pLCBmcm9tCisJCSAgIDE2LWJpdCBST00gb3IgZnJvbSAzMi1iaXQgRmxhc2guICBMdWNraWx5LCBhIHNpbmdsZSBrZXJuZWwKKwkJICAgaW1hZ2UgZG9lcyBmb3IgdGhlbSBhbGwuICovCisJCS8qIFRoaXMgYnJhbmNoIGlzIHRha2VuIGlmIHRoZSBDUFUgbWVtb3J5IHdpZHRoIG1hdGNoZXMgdGhlCisJCSAgIGFjdHVhbCBkZXZpY2UgaW4gdXNlLiAgVGhlIGRlZmF1bHQgYXQgcG93ZXIgb24gaXMgMTYgYml0cworCQkgICBzbyB3ZSBtdXN0IGJlIHByZXBhcmVkIGZvciBhIG1pc21hdGNoLiAqLworCQkuc2VjdGlvbiAiLnN0YXJ0IiwgImF4IgorMjoKKwkJYgkxZgorCQkud29yZAkweGZmZmYKKwkJLndvcmQJMHhiNjMyCQlAIG1vdiByMTEsICMweDAzMjAwMDAwCisJCS53b3JkCTB4ZTNhMAorCQkud29yZAkweDAwMDAJCUAgbW92IHIwLCAjMAorCQkud29yZAkweGUzYTAKKwkJLndvcmQJMHgwMDgwCQlAIHN0cmIgcjAsIFtyMTEsICMweDgwXQorCQkud29yZAkweGU1Y2IKKwkJLndvcmQJMHhmMDAwCQlAIG1vdiBwYywgIzAKKwkJLndvcmQJMHhlM2EwCisxOgorCQlhZHIJcjEsIDJiCisJCXRlcQlyMSwgIzAKKwkJYm5lCS5MYW5nZWwKKwkJLyogVGhpcyBpcyBhIGRpcmVjdC1mcm9tLVJPTSBib290LiAgQ29weSB0aGUga2VybmVsIGludG8gCisJCSAgIFJBTSBhbmQgcnVuIGl0IHRoZXJlLiAqLworCQltb3YJcjAsICMweDMwCisJCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAKKwkJbW92CXIwLCAjMHgxMworCQltc3IJY3Bzcl9jeHNmLCByMAorCQltb3YJcjEyLCAjMHgwMzAwMDAwMAlAIHBvaW50IHRvIExFRHMKKwkJb3JyCXIxMiwgcjEyLCAjMHgwMDAyMDAwMAorCQlvcnIJcjEyLCByMTIsICMweGJhMDAKKwkJbW92CXIwLCAjMHg1NTAwCisJCXN0cglyMCwgW3IxMl0KKwkJbW92CXIwLCAjMHgxMDAwMDAwMAorCQlvcnIJcjAsIHIwLCAjMHg4MDAwCisJCW1vdglyNCwgcjAKKwkJbGRyCXIyLCA9X2VuZAorMjoKKwkJbGRyCXIzLCBbcjFdLCAjNAorCQlzdHIJcjMsIFtyMF0sICM0CisJCXRlcQlyMCwgcjIKKwkJYm5lCTJiCisJCW1vdglyMCwgIzB4ZmYwMAorCQlzdHIJcjAsIFtyMTJdCisxOgkKKwkJbW92CXIxMiwgIzB4MDMwMDAwMDAJQCBwb2ludCB0byBMRURzCisJCW9ycglyMTIsIHIxMiwgIzB4MDAwMjAwMDAKKwkJb3JyCXIxMiwgcjEyLCAjMHhiYTAwCisJCW1vdglyMCwgIzB4ZmUwMAorCQlzdHIJcjAsIFtyMTJdCisKKwkJYWRyCWxyLCAxZgorCQltb3YJcjAsICMwCisJCW1vdglyMSwgIzE0CQkvKiBNQUNIX1RZUEVfQ0xQUzc1MDAgKi8KKwkJbW92CXBjLCBscgorLkxhbmdlbDoKKyNpZmRlZiBDT05GSUdfQU5HRUxCT09UCisJCS8qIENhbGwgQW5nZWwgdG8gc3dpdGNoIGludG8gU1ZDIG1vZGUuICovCisJCW1vdglyMCwgIzB4MTcKKwkJc3dpCTB4MTIzNDU2CisjZW5kaWYKKwkJLyogRW5zdXJlIGFsbCBpbnRlcnJ1cHRzIGFyZSBvZmYgYW5kIE1NVSBkaXNhYmxlZCAqLworCQltcnMJcjAsIGNwc3IKKwkJb3JyCXIwLCByMCwgIzB4YzAKKwkJbXNyCWNwc3JfY3hzZiwgcjAKKworCQlhZHIJbHIsIDFiCisJCW9ycglsciwgbHIsICMweDEwMDAwMDAwCisJCW1vdglyMCwgIzB4MzAJCUAgTU1VIG9mZgorCQltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCisJCW1vdglyMCwgcjAKKwkgCW1vdglwYywgbHIKKworCQkubHRvcmcKKworMToKKy8qIEFuZCB0aGUgcmVzdCAqLworI2luY2x1ZGUgImhlYWQuUyIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLWVweGExMGRiLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1lcHhhMTBkYi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NzY4MWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1lcHhhMTBkYi5TCkBAIC0wLDAgKzEsNSBAQAorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZXhjYWxpYnVyLmg+CisKKwkJLnNlY3Rpb24JIi5zdGFydCIsICJheCIKKwkJbW92CXI3LCAjTUFDSF9UWVBFX0NBTUVMT1QKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLWw3MjAwLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1sNzIwMC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOGJkMjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1sNzIwMC5TCkBAIC0wLDAgKzEsMzAgQEAKKy8qIAorICogbGludXgvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtbDcyMDAuUworICogCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgU3RldmUgSGlsbCA8c2poaWxsQGNvdHcuY29tPgorICogCisgKiBTb21lIGNvZGUgYm9ycm93ZWQgZnJvbSBOaWNvbGFzIFBpdHJlJ3MgJ2hlYWQtc2ExMTAwLlMnIGZpbGUuIFRoaXMKKyAqIGlzIG1lcmdlZCB3aXRoIGhlYWQuUyBieSB0aGUgbGlua2VyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaWZuZGVmIENPTkZJR19BUkNIX0w3MjAwCisjZXJyb3IgV2hhdCBhbSBJIGRvaW5nIGhlcmUuLi4KKyNlbmRpZgorCisJCS5zZWN0aW9uICAgICAgICAiLnN0YXJ0IiwgImF4IgorCitfX0w3MjAwX3N0YXJ0OgorCQltb3YJcjAsICMweDAwMTAwMDAwCQlAIEZMQVNIIGFkZHJlc3Mgb2YgaW5pdHJkCisJCW1vdglyMiwgIzB4ZjEwMDAwMDAJCUAgUkFNIGFkZHJlc3Mgb2YgaW5pdHJkCisJCWFkZAlyMywgcjIsICMweDAwNzAwMDAwCUAgU2l6ZSBvZiBpbml0cmQgCisxOgorCQlsZG1pYSAgIHIwISwge3I0LCByNSwgcjYsIHI3fQorCQlzdG1pYSAgIHIyISwge3I0LCByNSwgcjYsIHI3fQorCQljbXAJcjIsIHIzCisJCWJsZQkxYgorCisJCW1vdglyOCwgIzAJCQlAIFplcm8gaXQgb3V0CisJCW1vdglyNywgI01BQ0hfVFlQRV9MNzIwMAlAIFNldCBhcmNoaXRlY3R1cmUgSUQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXNhMTEwMC5TIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtc2ExMTAwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFlZmZmZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXNhMTEwMC5TCkBAIC0wLDAgKzEsNDggQEAKKy8qIAorICogbGludXgvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtc2ExMTAwLlMKKyAqIAorICogQ29weXJpZ2h0IChDKSAxOTk5IE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KKyAqIAorICogU0ExMTAwIHNwZWNpZmljIHR3ZWFrcy4gIFRoaXMgaXMgbWVyZ2VkIGludG8gaGVhZC5TIGJ5IHRoZSBsaW5rZXIuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworCQkuc2VjdGlvbiAgICAgICAgIi5zdGFydCIsICJheCIKKworX19TQTExMDBfc3RhcnQ6CisKKwkJQCBQcmVzZXJ2ZSByOC9yNyBpLmUuIGtlcm5lbCBlbnRyeSB2YWx1ZXMKKyNpZmRlZiBDT05GSUdfU0ExMTAwX0NPTExJRQorCQltb3YJcjcsICNNQUNIX1RZUEVfQ09MTElFCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0ExMTAwX1NJTVBBRAorCQlAIFVOVElMIHdlJ3ZlIHNvbWV0aGluZyBsaWtlIGFuIG9wZW4gYm9vdGxkcgorCQltb3YJcjcsICNNQUNIX1RZUEVfU0lNUEFECUBzaG91bGQgYmUgODcKKyNlbmRpZgorCQltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCUAgcmVhZCBjb250cm9sIHJlZworCQlhbmRzCXIwLCByMCwgIzB4MGQKKwkJYmVxCTk5ZgorCisJCUAgRGF0YSBjYWNoZSBtaWdodCBiZSBhY3RpdmUuCisJCUAgQmUgc3VyZSB0byBmbHVzaCBrZXJuZWwgYmluYXJ5IG91dCBvZiB0aGUgY2FjaGUsCisJCUAgd2hhdGV2ZXIgc3RhdGUgaXQgaXMsIGJlZm9yZSBpdCBpcyB0dXJuZWQgb2ZmLgorCQlAIFRoaXMgaXMgZG9uZSBieSBmZXRjaGluZyB0aHJvdWdoIGN1cnJlbnRseSBleGVjdXRlZAorCQlAIG1lbW9yeSB0byBiZSBzdXJlIHdlIGhpdCB0aGUgc2FtZSBjYWNoZS4KKwkJYmljCXIyLCBwYywgIzB4MWYKKwkJYWRkCXIzLCByMiwgIzB4NDAwMAkJQCAxNiBrYiBpcyBxdWl0ZSBlbm91Z2guLi4KKzE6CQlsZHIJcjAsIFtyMl0sICMzMgorCQl0ZXEJcjIsIHIzCisJCWJuZQkxYgorCQltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAlAIGRyYWluIFdCCisJCW1jcglwMTUsIDAsIHIwLCBjNywgYzcsIDAJQCBmbHVzaCBJICYgRCBjYWNoZXMKKworCQlAIGRpc2FibGluZyBNTVUgYW5kIGNhY2hlcworCQltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCUAgcmVhZCBjb250cm9sIHJlZworCQliaWMJcjAsIHIwLCAjMHgwZAkJQCBjbGVhciBXQiwgREMsIE1NVQorCQliaWMJcjAsIHIwLCAjMHgxMDAwCQlAIGNsZWFyIEljYWNoZQorCQltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCis5OToKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXNoYXJrLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1zaGFyay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OGY2MGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1zaGFyay5TCkBAIC0wLDAgKzEsMTE1IEBACisvKiBUaGUgaGVhZC1maWxlIGZvciB0aGUgU2hhcmsKKyAqIGJ5IEFsZXhhbmRlciBTY2h1bHoKKyAqCisgKiBEb2VzIHRoZSBmb2xsb3dpbmc6CisgKiAtIGdldCB0aGUgbWVtb3J5IGxheW91dCBmcm9tIGZpcm13YXJlLiBUaGlzIGNhbiBvbmx5IGJlIGRvbmUgYXMgbG9uZyBhcyB0aGUgbW11CisgKiAgIGlzIHN0aWxsIG9uLgorICogLSBzd2l0Y2ggdGhlIG1tdSBvZmYsIHNvIHdlIGhhdmUgcGh5c2ljYWwgYWRkcmVzc2VzCisgKiAtIGNvcHkgdGhlIGtlcm5lbCB0byAweDA4NTA4MDAwLiBUaGlzIGlzIGRvbmUgdG8gaGF2ZSBhIGZpeGVkIGFkZHJlc3Mgd2hlcmUgdGhlCisgKiAgIEMtcGFydHMgKG1pc2MuYykgYXJlIGV4ZWN1dGVkLiBUaGlzIGFkZHJlc3MgbXVzdCBiZSBrbm93biBhdCBjb21waWxlLXRpbWUsCisgKiAgIGJ1dCB0aGUgbG9hZC1hZGRyZXNzIG9mIHRoZSBrZXJuZWwgZGVwZW5kcyBvbiBob3cgbXVjaCBtZW1vcnkgaXMgaW5zdGFsbGVkLgorICogLSBKdW1wIHRvIHRoaXMgbG9jYXRpb24uCisgKiAtIFNldCByOCB3aXRoIDAsIHI3IHdpdGggdGhlIGFyY2hpdGVjdHVyZSBJRCBmb3IgaGVhZC5TCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKwkKKwkJLnNlY3Rpb24JIi5zdGFydCIsICJheCIKKworCQliCV9fYmVnaW5uaW5nCisJCitfX29md19kYXRhOgkubG9uZwkwCQkJCUAgdGhlIG51bWJlciBvZiBtZW1vcnkgYmxvY2tzCisJCS5zcGFjZSAgMTI4CQkJCUAgKHN0YXJ0YWRkcixzaXplKSAuLi4KKwkJLnNwYWNlICAxMjgJCQkJQCBib290YXJncworCQkuYWxpZ24KKworX19iZWdpbm5pbmc6CW1vdglyNCwgcjAJCQkJQCBzYXZlIHRoZSBlbnRyeSB0byB0aGUgZmlybXdhcmUKKworCQltb3YJcjAsICMweEMwCQkJQCBkaXNhYmxlIGlycSBhbmQgZmlxCisJCW1vdglyMSwgcjAKKwkJbXJzCXIzLCBjcHNyCisJCWJpYwlyMiwgcjMsIHIwCisJCWVvcglyMiwgcjIsIHIxCisJCW1zcgljcHNyX2MsIHIyCisKKwkJbW92CXIwLCByNAkJCQlAIGdldCB0aGUgTWVtb3J5IGxheW91dCBmcm9tIGZpcm13YXJlCisJCWFkcglyMSwgX19vZndfZGF0YQorCQlhZGQJcjIsIHIxLCAjNAorCQltb3YJbHIsIHBjCisJCWIJb2Z3X2luaXQKKwkJbW92CXIxLCAjMAorCisJCWFkcglyMiwgX19tbXVfb2ZmCQkJQCBjYWxjdWxhdGUgcGh5c2ljYWwgYWRkcmVzcworCQlzdWIJcjIsIHIyLCAjMHhmMDAwMDAwMAkJQCBvcGVucHJvbSBtYXBzIHVzIGF0IGYwMDAgdmlydCwgMGU1MCBwaHlzCisJCWFkcglyMCwgX19vZndfZGF0YQorCQlsZHIJcjAsIFtyMCwgIzRdCisJCWFkZAlyMiwgcjIsIHIwCisJCWFkZAlyMiwgcjIsICMweDAwNTAwMDAwCisKKwkJbXJjCXAxNSwgMCwgcjMsIGMxLCBjMAorCQliaWMJcjMsIHIzLCAjMHhDCQkJQCBXcml0ZSBCdWZmZXIgYW5kIERDYWNoZQorCQliaWMJcjMsIHIzLCAjMHgxMDAwCQkJQCBJQ2FjaGUKKwkJbWNyCXAxNSwgMCwgcjMsIGMxLCBjMAkJQCBkaXNhYmxlZAorCisJCW1vdglyMCwgIzAKKwkJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNwkJQCBmbHVzaCBJLEQgY2FjaGVzIG9uIHY0CisJCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlciBvbiB2NAorCQltY3IJcDE1LCAwLCByMCwgYzgsIGM3CQlAIGZsdXNoIEksRCBUTEJzIG9uIHY0CisKKwkJYmljCXIzLCByMywgIzB4MQkJCUAgTU1VCisJCW1jcglwMTUsIDAsIHIzLCBjMSwgYzAJCUAgZGlzYWJsZWQKKworCQltb3YJcGMsIHIyCisKK19fY29weV90YXJnZXQ6CS5sb25nCTB4MDg1MDgwMDAKK19fY29weV9lbmQ6CS5sb25nCTB4MDg2MDgwMDAKKwkJCisJCS53b3JkCV9zdGFydAorCQkud29yZAlfX2Jzc19zdGFydAorCisJCS5hbGlnbgorX190ZW1wX3N0YWNrOgkuc3BhY2UgMTI4CisKK19fbW11X29mZjoKKwkJYWRyCXIwLCBfX29md19kYXRhCisJCWxkcglyMCwgW3IwLCAjNF0KKwkJb3JyCXIwLCByMCwgIzB4MDA2MDAwMDAKKwkKKwkJbGRyCXIxLCBfX2NvcHlfZW5kCisJCWxkcglyMywgX19jb3B5X3RhcmdldAorCisvKiByMCA9IDB4MGU2MDAwMDAgKGN1cnJlbnQgZW5kIG9mIGtlcm5lbGNvZGUpCisgKiByMyA9IDB4MDg1MDgwMDAgKHdoZXJlIGl0IHNob3VsZCBiZWdpbikKKyAqIHIxID0gMHgwODYwODAwMCAoZW5kIG9mIGNvcHlpbmcgYXJlYSwgMU1CKQorICogVGhlIGtlcm5lbCBpcyBjb21wcmVzc2VkLCBzbyAxIE1CIHNob3VsZCBiZSBlbm91Z2guCisgKiBjb3B5IHRoZSBrZXJuZWwgdG8gdGhlIGJlZ2lubmluZyBvZiBwaHlzaWNhbCBtZW1vcnkKKyAqIFdlIHN0YXJ0IGZyb20gdGhlIGhpZ2hlc3QgYWRkcmVzcywgc28gd2UgY2FuIGNvcHkKKyAqIGZyb20gMHgwODUwMDAwMCB0byAweDA4NTA4MDAwIGlmIHdlIGhhdmUgb25seSA4TUIKKyAqLworCisJCitfX0NvcHk6CQlsZHIJcjIsIFtyMF0sICMtNAorCQlzdHIJcjIsIFtyMV0sICMtNAorCQl0ZXEJcjEsIHIzCisJCWJuZQlfX0NvcHkKKwkJLyogYW5kIGp1bXAgdG8gaXQgKi8KKwkJYWRyCXIyLCBfX2dvX29uCisJCWFkcglyMCwgX19vZndfZGF0YQorCQlsZHIJcjAsIFtyMCwgIzRdCisJCXN1YglyMiwgcjIsIHIwCisJCXN1YglyMiwgcjIsICMweDAwNTAwMDAwCisJCWxkcglyMCwgX19jb3B5X3RhcmdldAorCQlhZGQJcjIsIHIyLCByMAorCQltb3YJcGMsIHIyCisKK19fZ29fb246CisJCWFkcglzcCwgX190ZW1wX3N0YWNrCisJCWFkZAlzcCwgc3AsICMxMjgKKwkJYWRyCXIwLCBfX29md19kYXRhCisJCW1vdglsciwgcGMKKwkJYgljcmVhdGVfcGFyYW1zCisJCisJCW1vdglyOCwgIzAKKwkJbW92CXI3LCAjMTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXNoYXJwc2wuUyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXNoYXJwc2wuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmJmOGEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtc2hhcnBzbC5TCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1zaGFycHNsLlMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBycHN5cy5uZXQ+CisgKgorICogU2hhcnAncyBib290bG9hZGVyIGRvZXNuJ3QgcGFzcyBhbnkga2luZCBvZiBtYWNoaW5lIElECisgKiBzbyB3ZSBoYXZlIHRvIGZpZ3VyZSBvdXQgdGhlIG1hY2hpbmUgZm9yIG91cnNlbHZlcy4uLgorICoKKyAqIFN1cHBvcnQgZm9yIFBvb2RsZSwgQ29yZ2kgKFNMLUM3MDApLCBTaGVwaGVyZCAoU0wtQzc1MCkKKyAqIGFuZCBIdXNreSAoU0wtQzc2MCkuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2lmbmRlZiBDT05GSUdfUFhBX1NIQVJQU0wKKyNlcnJvciBXaGF0IGFtIEkgZG9pbmcgaGVyZS4uLgorI2VuZGlmCisKKwkJLnNlY3Rpb24gICAgICAgICIuc3RhcnQiLCAiYXgiCisKK19fU2hhcnBTTF9zdGFydDoKKworCWxkcglyMSwgLlcxMDBBRERSCQlAIEJhc2UgYWRkcmVzcyBvZiB3MTAwIGNoaXAgKyByZWdzIG9mZnNldAorCisJbW92IHI2LCAjMHgzMQkJCUAgTG9hZCBNYWdpYyBJbml0IHZhbHVlCisJc3RyCXI2LCBbcjEsICMweDI4MF0JQCB0byBTQ1JBVENIX1VNU0sKKwltb3YgcjUsICMweDMwMDAKKy5XMTAwTE9PUDoKKwlzdWJzIHI1LCByNSwgIzEKKyAgICBibmUgLlcxMDBMT09QCisJbW92IHI2LCAjMHgzMAkJCUAgTG9hZCAybmQgTWFnaWMgSW5pdCB2YWx1ZQorCXN0cglyNiwgW3IxLCAjMHgyODBdCUAgdG8gU0NSQVRDSF9VTVNLCisKKwlsZHIJcjYsIFtyMSwgIzBdCQlAIExvYWQgQ2hpcCBJRAorCWxkcglyMywgLlcxMDBJRAorCWxkcglyNywgLlBPT0RMRUlECisJY21wCXI2LCByMworCWJuZQkuU0hBUlBFTkQJCQlAIFdlIGhhdmUgbm8gdzEwMCAtIFBvb2RsZQorCisJbXJjIHAxNSwgMCwgcjYsIGMwLCBjMAlAIEdldCBQcm9jZXNzb3IgSUQKKwlhbmQJcjYsIHI2LCAjMHhmZmZmZmYwMAorCWxkcglyNywgLkNPUkdJSUQKKwlsZHIJcjMsIC5QWEEyNTVJRAorCWNtcAlyNiwgcjMKKwlibG8JLlNIQVJQRU5ECQkJQCBXZSBoYXZlIGEgUFhBMjUwIC0gQ29yZ2kKKworCW1vdglyMSwgIzB4MGMwMDAwMDAJCUAgQmFzZSBhZGRyZXNzIG9mIE5BTkQgY2hpcAorCWxkcmIJcjMsIFtyMSwgIzI0XQlAIExvYWQgRkxBU0hDVEwKKwliaWMJcjMsIHIzLCAjMHgxMQkJQCBTRVQgTkNFCisJb3JyCXIzLCByMywgIzB4MGEJCUAgU0VUIENMUiArIEZMV1AKKwlzdHJiCXIzLCBbcjEsICMyNF0JQCBTYXZlIHRvIEZMQVNIQ1RMCisJbW92IAlyMiwgIzB4OTAJCUAgQ29tbWFuZCAicmVhZGlkIgorCXN0cmIJcjIsIFtyMSwgIzIwXQlAIFNhdmUgdG8gRkxBU0hJTworCWJpYwlyMywgcjMsICMyCQkJQCBDTFIgQ0xFCisJb3JyCXIzLCByMywgIzQJCQlAIFNFVCBBTEUKKwlzdHJiCXIzLCBbcjEsICMyNF0JQCBTYXZlIHRvIEZMQVNIQ1RMCisJbW92CQlyMiwgIzAJCQlAIEFkZHJlc3MgMHgwMAorCXN0cmIJcjIsIFtyMSwgIzIwXQlAIFNhdmUgdG8gRkxBU0hJTworCWJpYwlyMywgcjMsICM0CQkJQCBDTFIgQUxFCisJc3RyYglyMywgW3IxLCAjMjRdCUAgU2F2ZSB0byBGTEFTSENUTAorLlNIQVJQMToKKwlsZHJiCXIzLCBbcjEsICMyNF0JQCBMb2FkIEZMQVNIQ1RMCisJdHN0CXIzLCAjMzIJCQkJQCBJcyBjaGlwIHJlYWR5PworCWJlcQkuU0hBUlAxCisJbGRyYglyMiwgW3IxLCAjMjBdCUAgTkFORCBNYW51ZmFjdHVyZXIgSUQKKwlsZHJiCXIzLCBbcjEsICMyMF0JQCBOQU5EIENoaXAgSUQKKwlsZHIJcjcsIC5TSEVQSEVSRElECisJY21wCXIzLCAjMHg3NgkJCUAgNjRNaUIgZmxhc2gKKwliZXEJLlNIQVJQRU5ECQkJQCBXZSBoYXZlIFNoZXBoZXJkCisJbGRyCXI3LCAuSFVTS1lJRAkJQCBNdXN0IGJlIEh1c2t5CisJYiAuU0hBUlBFTkQKKworLlBYQTI1NUlEOgorCS53b3JkCTB4NjkwNTJkMDAJCUAgUFhBMjU1IFByb2Nlc3NvciBJRAorLlcxMDBJRDoKKwkud29yZAkweDU3NDExMDAyCQlAIHcxMDAgQ2hpcCBJRAorLlcxMDBBRERSOgorCS53b3JkIAkweDA4MDEwMDAwCQlAIHcxMDAgQ2hpcCBJRCBSZWcgQWRkcmVzcworLlBPT0RMRUlEOgorCS53b3JkCU1BQ0hfVFlQRV9QT09ETEUKKy5DT1JHSUlEOgorCS53b3JkCU1BQ0hfVFlQRV9DT1JHSQorLlNIRVBIRVJESUQ6CisJLndvcmQJTUFDSF9UWVBFX1NIRVBIRVJECisuSFVTS1lJRDoKKwkud29yZAlNQUNIX1RZUEVfSFVTS1kKKy5TSEFSUEVORDoKKworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC14c2NhbGUuUyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXhzY2FsZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NWJkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC14c2NhbGUuUwpAQCAtMCwwICsxLDQ5IEBACisvKgorICogbGludXgvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQteHNjYWxlLlMKKyAqCisgKiBYU2NhbGUgc3BlY2lmaWMgdHdlYWtzLiAgVGhpcyBpcyBtZXJnZWQgaW50byBoZWFkLlMgYnkgdGhlIGxpbmtlci4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisJCS5zZWN0aW9uICAgICAgICAiLnN0YXJ0IiwgImF4IgorCitfX1hTY2FsZV9zdGFydDoKKworCQlAIFByZXNlcnZlIHI4L3I3IGkuZS4ga2VybmVsIGVudHJ5IHZhbHVlcworCisJCUAgRGF0YSBjYWNoZSBtaWdodCBiZSBhY3RpdmUuCisJCUAgQmUgc3VyZSB0byBmbHVzaCBrZXJuZWwgYmluYXJ5IG91dCBvZiB0aGUgY2FjaGUsCisJCUAgd2hhdGV2ZXIgc3RhdGUgaXQgaXMsIGJlZm9yZSBpdCBpcyB0dXJuZWQgb2ZmLgorCQlAIFRoaXMgaXMgZG9uZSBieSBmZXRjaGluZyB0aHJvdWdoIGN1cnJlbnRseSBleGVjdXRlZAorCQlAIG1lbW9yeSB0byBiZSBzdXJlIHdlIGhpdCB0aGUgc2FtZSBjYWNoZS4KKwkJYmljCXIyLCBwYywgIzB4MWYKKwkJYWRkCXIzLCByMiwgIzB4MTAwMDAJQCA2NCBrYiBpcyBxdWl0ZSBlbm91Z2guLi4KKzE6CQlsZHIJcjAsIFtyMl0sICMzMgorCQl0ZXEJcjIsIHIzCisJCWJuZQkxYgorCQltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAlAIGRyYWluIFdCCisJCW1jcglwMTUsIDAsIHIwLCBjNywgYzcsIDAJQCBmbHVzaCBJICYgRCBjYWNoZXMKKworCQlAIGRpc2FibGluZyBNTVUgYW5kIGNhY2hlcworCQltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCUAgcmVhZCBjb250cm9sIHJlZworCQliaWMJcjAsIHIwLCAjMHgwNQkJQCBjbGVhciBEQywgTU1VCisJCWJpYwlyMCwgcjAsICMweDEwMDAJCUAgY2xlYXIgSWNhY2hlCisJCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAKKworI2lmZGVmIENPTkZJR19BUkNIX0xVQkJPQ0sKKwkJbW92CXI3LCAjTUFDSF9UWVBFX0xVQkJPQ0sKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfQ09UVUxMQV9JRFAKKwkJbW92CXI3LCAjTUFDSF9UWVBFX0NPVFVMTEFfSURQCisjZW5kaWYKKworI2lmZGVmICBDT05GSUdfTUFDSF9HVFdYNTcxNQorICAgICAgICAgICAgICAgbW92ICAgICByNywgIyhNQUNIX1RZUEVfR1RXWDU3MTUgJiAweGZmKQorICAgICAgICAgICAgICAgb3JyICAgICByNywgcjcsICMoTUFDSF9UWVBFX0dUV1g1NzE1ICYgMHhmZjAwKQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZTdhZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCkBAIC0wLDAgKzEsNzg2IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDIgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworLyoKKyAqIERlYnVnZ2luZyBzdHVmZgorICoKKyAqIE5vdGUgdGhhdCB0aGVzZSBtYWNyb3MgbXVzdCBub3QgY29udGFpbiBhbnkgY29kZSB3aGljaCBpcyBub3QKKyAqIDEwMCUgcmVsb2NhdGFibGUuICBBbnkgYXR0ZW1wdCB0byBkbyBzbyB3aWxsIHJlc3VsdCBpbiBhIGNyYXNoLgorICogUGxlYXNlIHNlbGVjdCBvbmUgb2YgdGhlIGZvbGxvd2luZyB3aGVuIHR1cm5pbmcgb24gZGVidWdnaW5nLgorICovCisjaWZkZWYgREVCVUcKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19EQzIxMjg1X1BPUlQpCisJCS5tYWNybwlsb2Fkc3AsIHJiCisJCW1vdglccmIsICMweDQyMDAwMDAwCisJCS5lbmRtCisJCS5tYWNybwl3cml0ZWIsIHJiCisJCXN0cglccmIsIFtyMywgIzB4MTYwXQorCQkuZW5kbQorI2VsaWYgZGVmaW5lZChDT05GSUdfREVCVUdfSUNFRENDKQorCQkubWFjcm8JbG9hZHNwLCByYgorCQkuZW5kbQorCQkubWFjcm8gd3JpdGViLCByYgorCQltY3IJcDE0LCAwLCBccmIsIGMwLCBjMSwgMAorCQkuZW5kbQorI2VsaWYgZGVmaW5lZChDT05GSUdfRk9PVEJSSURHRSkKKwkJLm1hY3JvCWxvYWRzcCwJcmIKKwkJbW92CVxyYiwgIzB4N2MwMDAwMDAKKwkJLmVuZG0KKwkJLm1hY3JvCXdyaXRlYiwJcmIKKwkJc3RyYglccmIsIFtyMywgIzB4M2Y4XQorCQkuZW5kbQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9SUEMpCisJCS5tYWNybwlsb2Fkc3AsCXJiCisJCW1vdglccmIsICMweDAzMDAwMDAwCisJCW9ycglccmIsIFxyYiwgIzB4MDAwMTAwMDAKKwkJLmVuZG0KKwkJLm1hY3JvCXdyaXRlYiwJcmIKKwkJc3RyYglccmIsIFtyMywgIzB4M2Y4IDw8IDJdCisJCS5lbmRtCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lOVEVHUkFUT1IpCisJCS5tYWNybwlsb2Fkc3AsIHJiCisJCW1vdglccmIsICMweDE2MDAwMDAwCisJCS5lbmRtCisJCS5tYWNybwl3cml0ZWIsIHJiCisJCXN0cmIJXHJiLCBbcjMsICMwXQorCQkuZW5kbQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9QWEEpIC8qIFhzY2FsZS10eXBlICovCisJCS5tYWNybyAJbG9hZHNwLCByYgorCQltb3YJXHJiLCAjMHg0MDAwMDAwMAorCQlvcnIJXHJiLCBccmIsICMweDAwMTAwMDAwCisJCS5lbmRtCisJCS5tYWNybwl3cml0ZWIsIHJiCisJCXN0cmIJXHJiLCBbcjMsICMwXQorCQkuZW5kbQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9TQTExMDApCisJCS5tYWNybwlsb2Fkc3AsIHJiCisJCW1vdglccmIsICMweDgwMDAwMDAwCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCisjICBpZiBkZWZpbmVkKENPTkZJR19ERUJVR19MTF9TRVIzKQorCQlhZGQJXHJiLCBccmIsICMweDAwMDUwMDAwCUAgU2VyMworIyAgZWxzZQorCQlhZGQJXHJiLCBccmIsICMweDAwMDEwMDAwCUAgU2VyMQorIyAgZW5kaWYKKwkJLmVuZG0KKwkJLm1hY3JvCXdyaXRlYiwgcmIKKwkJc3RyCVxyYiwgW3IzLCAjMHgxNF0JQCBVVERSCisJCS5lbmRtCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lYUDRYWCkKKwkJLm1hY3JvCWxvYWRzcCwgcmIKKwkJbW92CVxyYiwgIzB4YzgwMDAwMDAKKwkJLmVuZG0KKwkJLm1hY3JvCXdyaXRlYiwgcmIKKwkJc3RyCVxyYiwgW3IzLCAjMF0KKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfSVhQMjAwMCkKKwkJLm1hY3JvCWxvYWRzcCwgcmIKKwkJbW92CVxyYiwgIzB4YzAwMDAwMDAKKwkJb3JyCVxyYiwgXHJiLCAjMHgwMDAzMDAwMAorCQkuZW5kbQorCQkubWFjcm8Jd3JpdGViLCByYgorCQlzdHIJXHJiLCBbcjMsICMwXQorCQkuZW5kbQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9MSDdBNDBYKQorCQkubWFjcm8JbG9hZHNwLCByYgorCQlsZHIJXHJiLCA9MHg4MDAwMDcwMAlAIFVBUlQyIFVBUlRCQVNFCisJCS5lbmRtCisJCS5tYWNybwl3cml0ZWIsIHJiCisJCXN0cmIJXHJiLCBbcjMsICMwXQorCQkuZW5kbQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQKQorCQkubWFjcm8gIGxvYWRzcCwgcmIKKwkJbW92CVxyYiwgIzB4ZmYwMDAwMDAJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKKwkJYWRkCVxyYiwgXHJiLCAjMHgwMGZiMDAwMAorI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIpIHx8IGRlZmluZWQoQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDMpCisJCWFkZAlccmIsIFxyYiwgIzB4MDAwMDA4MDAKKyNlbmRpZgorI2lmZGVmIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzCisJCWFkZAlccmIsIFxyYiwgIzB4MDAwMDkwMDAKKyNlbmRpZgorCQkuZW5kbQorCQkubWFjcm8Jd3JpdGViLCByYgorCQlzdHJiCVxyYiwgW3IzXQorCQkuZW5kbQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9JT1AzMzEpCisJCS5tYWNybyBsb2Fkc3AsIHJiCisgICAgICAgICAgICAgICAgbW92ICAgCVxyYiwgIzB4ZmYwMDAwMDAKKyAgICAgICAgICAgICAgICBvcnIgICAgIFxyYiwgXHJiLCAjMHgwMGZmMDAwMAorICAgICAgICAgICAgICAgIG9yciAgICAgXHJiLCBccmIsICMweDAwMDBmNzAwICAgQCBsb2NhdGlvbiBvZiB0aGUgVUFSVAorCQkuZW5kbQorCQkubWFjcm8Jd3JpdGViLCByYgorCQlzdHIJXHJiLCBbcjMsICMwXQorCQkuZW5kbQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9TM0MyNDEwKQorCQkJLm1hY3JvIGxvYWRzcCwgcmIKKwkJbW92CVxyYiwgIzB4NTAwMDAwMDAKKwkJYWRkCVxyYiwgXHJiLCAjMHg0MDAwICogQ09ORklHX1MzQzI0MTBfTE9XTEVWRUxfVUFSVF9QT1JUCisJCS5lbmRtCisJCS5tYWNybwl3cml0ZWIsIHJiCisJCXN0cmIJXHJiLCBbcjMsICMweDIwXQorCQkuZW5kbQorI2Vsc2UKKyNlcnJvciBubyBzZXJpYWwgYXJjaGl0ZWN0dXJlIGRlZmluZWQKKyNlbmRpZgorI2VuZGlmCisKKwkJLm1hY3JvCWtwdXRjLHZhbAorCQltb3YJcjAsIFx2YWwKKwkJYmwJcHV0YworCQkuZW5kbQorCisJCS5tYWNybwlrcGhleCx2YWwsbGVuCisJCW1vdglyMCwgXHZhbAorCQltb3YJcjEsICNcbGVuCisJCWJsCXBoZXgKKwkJLmVuZG0KKworCQkubWFjcm8JZGVidWdfcmVsb2Nfc3RhcnQKKyNpZmRlZiBERUJVRworCQlrcHV0YwkjJ1xuJworCQlrcGhleAlyNiwgOAkJLyogcHJvY2Vzc29yIGlkICovCisJCWtwdXRjCSMnOicKKwkJa3BoZXgJcjcsIDgJCS8qIGFyY2hpdGVjdHVyZSBpZCAqLworCQlrcHV0YwkjJzonCisJCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAKKwkJa3BoZXgJcjAsIDgJCS8qIGNvbnRyb2wgcmVnICovCisJCWtwdXRjCSMnXG4nCisJCWtwaGV4CXI1LCA4CQkvKiBkZWNvbXByZXNzZWQga2VybmVsIHN0YXJ0ICovCisJCWtwdXRjCSMnLScKKwkJa3BoZXgJcjgsIDgJCS8qIGRlY29tcHJlc3NlZCBrZXJuZWwgZW5kICAqLworCQlrcHV0YwkjJz4nCisJCWtwaGV4CXI0LCA4CQkvKiBrZXJuZWwgZXhlY3V0aW9uIGFkZHJlc3MgKi8KKwkJa3B1dGMJIydcbicKKyNlbmRpZgorCQkuZW5kbQorCisJCS5tYWNybwlkZWJ1Z19yZWxvY19lbmQKKyNpZmRlZiBERUJVRworCQlrcGhleAlyNSwgOAkJLyogZW5kIG9mIGtlcm5lbCAqLworCQlrcHV0YwkjJ1xuJworCQltb3YJcjAsIHI0CisJCWJsCW1lbWR1bXAJCS8qIGR1bXAgMjU2IGJ5dGVzIGF0IHN0YXJ0IG9mIGtlcm5lbCAqLworI2VuZGlmCisJCS5lbmRtCisKKwkJLnNlY3Rpb24gIi5zdGFydCIsICNhbGxvYywgI2V4ZWNpbnN0cgorLyoKKyAqIHNvcnQgb3V0IGRpZmZlcmVudCBjYWxsaW5nIGNvbnZlbnRpb25zCisgKi8KKwkJLmFsaWduCitzdGFydDoKKwkJLnR5cGUJc3RhcnQsI2Z1bmN0aW9uCisJCS5yZXB0CTgKKwkJbW92CXIwLCByMAorCQkuZW5kcgorCisJCWIJMWYKKwkJLndvcmQJMHgwMTZmMjgxOAkJQCBNYWdpYyBudW1iZXJzIHRvIGhlbHAgdGhlIGxvYWRlcgorCQkud29yZAlzdGFydAkJCUAgYWJzb2x1dGUgbG9hZC9ydW4gekltYWdlIGFkZHJlc3MKKwkJLndvcmQJX2VkYXRhCQkJQCB6SW1hZ2UgZW5kIGFkZHJlc3MKKzE6CQltb3YJcjcsIHIxCQkJQCBzYXZlIGFyY2hpdGVjdHVyZSBJRAorCQltb3YJcjgsICMwCQkJQCBzYXZlIHIwCisKKyNpZm5kZWYgX19BUk1fQVJDSF8yX18KKwkJLyoKKwkJICogQm9vdGluZyBmcm9tIEFuZ2VsIC0gbmVlZCB0byBlbnRlciBTVkMgbW9kZSBhbmQgZGlzYWJsZQorCQkgKiBGSVFzL0lSUXMgKG51bWVyaWMgZGVmaW5pdGlvbnMgZnJvbSBhbmdlbCBhcm0uaCBzb3VyY2UpLgorCQkgKiBXZSBvbmx5IGRvIHRoaXMgaWYgd2Ugd2VyZSBpbiB1c2VyIG1vZGUgb24gZW50cnkuCisJCSAqLworCQltcnMJcjIsIGNwc3IJCUAgZ2V0IGN1cnJlbnQgbW9kZQorCQl0c3QJcjIsICMzCQkJQCBub3QgdXNlcj8KKwkJYm5lCW5vdF9hbmdlbAorCQltb3YJcjAsICMweDE3CQlAIGFuZ2VsX1NXSXJlYXNvbl9FbnRlclNWQworCQlzd2kJMHgxMjM0NTYJCUAgYW5nZWxfU1dJX0FSTQorbm90X2FuZ2VsOgorCQltcnMJcjIsIGNwc3IJCUAgdHVybiBvZmYgaW50ZXJydXB0cyB0bworCQlvcnIJcjIsIHIyLCAjMHhjMAkJQCBwcmV2ZW50IGFuZ2VsIGZyb20gcnVubmluZworCQltc3IJY3Bzcl9jLCByMgorI2Vsc2UKKwkJdGVxcAlwYywgIzB4MGMwMDAwMDMJCUAgdHVybiBvZmYgaW50ZXJydXB0cworI2VuZGlmCisKKwkJLyoKKwkJICogTm90ZSB0aGF0IHNvbWUgY2FjaGUgZmx1c2hpbmcgYW5kIG90aGVyIHN0dWZmIG1heQorCQkgKiBiZSBuZWVkZWQgaGVyZSAtIGlzIHRoZXJlIGFuIEFuZ2VsIFNXSSBjYWxsIGZvciB0aGlzPworCQkgKi8KKworCQkvKgorCQkgKiBzb21lIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb2RlIGNhbiBiZSBpbnNlcnRlZAorCQkgKiBieSB0aGUgbGlua2VyIGhlcmUsIGJ1dCBpdCBzaG91bGQgcHJlc2VydmUgcjcgYW5kIHI4LgorCQkgKi8KKworCQkudGV4dAorCQlhZHIJcjAsIExDMAorCQlsZG1pYQlyMCwge3IxLCByMiwgcjMsIHI0LCByNSwgcjYsIGlwLCBzcH0KKwkJc3VicwlyMCwgcjAsIHIxCQlAIGNhbGN1bGF0ZSB0aGUgZGVsdGEgb2Zmc2V0CisKKwkJCQkJCUAgaWYgZGVsdGEgaXMgemVybywgd2UgYXJlCisJCWJlcQlub3RfcmVsb2NhdGVkCQlAIHJ1bm5pbmcgYXQgdGhlIGFkZHJlc3Mgd2UKKwkJCQkJCUAgd2VyZSBsaW5rZWQgYXQuCisKKwkJLyoKKwkJICogV2UncmUgcnVubmluZyBhdCBhIGRpZmZlcmVudCBhZGRyZXNzLiAgV2UgbmVlZCB0byBmaXgKKwkJICogdXAgdmFyaW91cyBwb2ludGVyczoKKwkJICogICByNSAtIHpJbWFnZSBiYXNlIGFkZHJlc3MKKwkJICogICByNiAtIEdPVCBzdGFydAorCQkgKiAgIGlwIC0gR09UIGVuZAorCQkgKi8KKwkJYWRkCXI1LCByNSwgcjAKKwkJYWRkCXI2LCByNiwgcjAKKwkJYWRkCWlwLCBpcCwgcjAKKworI2lmbmRlZiBDT05GSUdfWkJPT1RfUk9NCisJCS8qCisJCSAqIElmIHdlJ3JlIHJ1bm5pbmcgZnVsbHkgUElDID09PSBDT05GSUdfWkJPT1RfUk9NID0gbiwKKwkJICogd2UgbmVlZCB0byBmaXggdXAgcG9pbnRlcnMgaW50byB0aGUgQlNTIHJlZ2lvbi4KKwkJICogICByMiAtIEJTUyBzdGFydAorCQkgKiAgIHIzIC0gQlNTIGVuZAorCQkgKiAgIHNwIC0gc3RhY2sgcG9pbnRlcgorCQkgKi8KKwkJYWRkCXIyLCByMiwgcjAKKwkJYWRkCXIzLCByMywgcjAKKwkJYWRkCXNwLCBzcCwgcjAKKworCQkvKgorCQkgKiBSZWxvY2F0ZSBhbGwgZW50cmllcyBpbiB0aGUgR09UIHRhYmxlLgorCQkgKi8KKzE6CQlsZHIJcjEsIFtyNiwgIzBdCQlAIHJlbG9jYXRlIGVudHJpZXMgaW4gdGhlIEdPVAorCQlhZGQJcjEsIHIxLCByMAkJQCB0YWJsZS4gIFRoaXMgZml4ZXMgdXAgdGhlCisJCXN0cglyMSwgW3I2XSwgIzQJCUAgQyByZWZlcmVuY2VzLgorCQljbXAJcjYsIGlwCisJCWJsbwkxYgorI2Vsc2UKKworCQkvKgorCQkgKiBSZWxvY2F0ZSBlbnRyaWVzIGluIHRoZSBHT1QgdGFibGUuICBXZSBvbmx5IHJlbG9jYXRlCisJCSAqIHRoZSBlbnRyaWVzIHRoYXQgYXJlIG91dHNpZGUgdGhlIChyZWxvY2F0ZWQpIEJTUyByZWdpb24uCisJCSAqLworMToJCWxkcglyMSwgW3I2LCAjMF0JCUAgcmVsb2NhdGUgZW50cmllcyBpbiB0aGUgR09UCisJCWNtcAlyMSwgcjIJCQlAIGVudHJ5IDwgYnNzX3N0YXJ0IHx8CisJCWNtcGhzCXIzLCByMQkJCUAgX2VuZCA8IGVudHJ5CisJCWFkZGxvCXIxLCByMSwgcjAJCUAgdGFibGUuICBUaGlzIGZpeGVzIHVwIHRoZQorCQlzdHIJcjEsIFtyNl0sICM0CQlAIEMgcmVmZXJlbmNlcy4KKwkJY21wCXI2LCBpcAorCQlibG8JMWIKKyNlbmRpZgorCitub3RfcmVsb2NhdGVkOgltb3YJcjAsICMwCisxOgkJc3RyCXIwLCBbcjJdLCAjNAkJQCBjbGVhciBic3MKKwkJc3RyCXIwLCBbcjJdLCAjNAorCQlzdHIJcjAsIFtyMl0sICM0CisJCXN0cglyMCwgW3IyXSwgIzQKKwkJY21wCXIyLCByMworCQlibG8JMWIKKworCQkvKgorCQkgKiBUaGUgQyBydW50aW1lIGVudmlyb25tZW50IHNob3VsZCBub3cgYmUgc2V0dXAKKwkJICogc3VmZmljaWVudGx5LiAgVHVybiB0aGUgY2FjaGUgb24sIHNldCB1cCBzb21lCisJCSAqIHBvaW50ZXJzLCBhbmQgc3RhcnQgZGVjb21wcmVzc2luZy4KKwkJICovCisJCWJsCWNhY2hlX29uCisKKwkJbW92CXIxLCBzcAkJCUAgbWFsbG9jIHNwYWNlIGFib3ZlIHN0YWNrCisJCWFkZAlyMiwgc3AsICMweDEwMDAwCUAgNjRrIG1heAorCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIHdlIHdpbGwgb3ZlcndyaXRlIG91cnNlbHZlcy4KKyAqICAgcjQgPSBmaW5hbCBrZXJuZWwgYWRkcmVzcworICogICByNSA9IHN0YXJ0IG9mIHRoaXMgaW1hZ2UKKyAqICAgcjIgPSBlbmQgb2YgbWFsbG9jIHNwYWNlIChhbmQgdGhlcmVmb3JlIHRoaXMgaW1hZ2UpCisgKiBXZSBiYXNpY2FsbHkgd2FudDoKKyAqICAgcjQgPj0gcjIgLT4gT0sKKyAqICAgcjQgKyBpbWFnZSBsZW5ndGggPD0gcjUgLT4gT0sKKyAqLworCQljbXAJcjQsIHIyCisJCWJocwl3b250X292ZXJ3cml0ZQorCQlhZGQJcjAsIHI0LCAjNDA5NioxMDI0CUAgNE1CIGxhcmdlc3Qga2VybmVsIHNpemUKKwkJY21wCXIwLCByNQorCQlibHMJd29udF9vdmVyd3JpdGUKKworCQltb3YJcjUsIHIyCQkJQCBkZWNvbXByZXNzIGFmdGVyIG1hbGxvYyBzcGFjZQorCQltb3YJcjAsIHI1CisJCW1vdglyMywgcjcKKwkJYmwJZGVjb21wcmVzc19rZXJuZWwKKworCQlhZGQJcjAsIHIwLCAjMTI3CisJCWJpYwlyMCwgcjAsICMxMjcJCUAgYWxpZ24gdGhlIGtlcm5lbCBsZW5ndGgKKy8qCisgKiByMCAgICAgPSBkZWNvbXByZXNzZWQga2VybmVsIGxlbmd0aAorICogcjEtcjMgID0gdW51c2VkCisgKiByNCAgICAgPSBrZXJuZWwgZXhlY3V0aW9uIGFkZHJlc3MKKyAqIHI1ICAgICA9IGRlY29tcHJlc3NlZCBrZXJuZWwgc3RhcnQKKyAqIHI2ICAgICA9IHByb2Nlc3NvciBJRAorICogcjcgICAgID0gYXJjaGl0ZWN0dXJlIElECisgKiByOC1yMTQgPSB1bnVzZWQKKyAqLworCQlhZGQJcjEsIHI1LCByMAkJQCBlbmQgb2YgZGVjb21wcmVzc2VkIGtlcm5lbAorCQlhZHIJcjIsIHJlbG9jX3N0YXJ0CisJCWxkcglyMywgTEMxCisJCWFkZAlyMywgcjIsIHIzCisxOgkJbGRtaWEJcjIhLCB7cjggLSByMTN9CQlAIGNvcHkgcmVsb2NhdGlvbiBjb2RlCisJCXN0bWlhCXIxISwge3I4IC0gcjEzfQorCQlsZG1pYQlyMiEsIHtyOCAtIHIxM30KKwkJc3RtaWEJcjEhLCB7cjggLSByMTN9CisJCWNtcAlyMiwgcjMKKwkJYmxvCTFiCisKKwkJYmwJY2FjaGVfY2xlYW5fZmx1c2gKKwkJYWRkCXBjLCByNSwgcjAJCUAgY2FsbCByZWxvY2F0aW9uIGNvZGUKKworLyoKKyAqIFdlJ3JlIG5vdCBpbiBkYW5nZXIgb2Ygb3ZlcndyaXRpbmcgb3Vyc2VsdmVzLiAgRG8gdGhpcyB0aGUgc2ltcGxlIHdheS4KKyAqCisgKiByNCAgICAgPSBrZXJuZWwgZXhlY3V0aW9uIGFkZHJlc3MKKyAqIHI3ICAgICA9IGFyY2hpdGVjdHVyZSBJRAorICovCit3b250X292ZXJ3cml0ZToJbW92CXIwLCByNAorCQltb3YJcjMsIHI3CisJCWJsCWRlY29tcHJlc3Nfa2VybmVsCisJCWIJY2FsbF9rZXJuZWwKKworCQkudHlwZQlMQzAsICNvYmplY3QKK0xDMDoJCS53b3JkCUxDMAkJCUAgcjEKKwkJLndvcmQJX19ic3Nfc3RhcnQJCUAgcjIKKwkJLndvcmQJX2VuZAkJCUAgcjMKKwkJLndvcmQJenJlbGFkZHIJCUAgcjQKKwkJLndvcmQJX3N0YXJ0CQkJQCByNQorCQkud29yZAlfZ290X3N0YXJ0CQlAIHI2CisJCS53b3JkCV9nb3RfZW5kCQlAIGlwCisJCS53b3JkCXVzZXJfc3RhY2srNDA5NgkJQCBzcAorTEMxOgkJLndvcmQJcmVsb2NfZW5kIC0gcmVsb2Nfc3RhcnQKKwkJLnNpemUJTEMwLCAuIC0gTEMwCisKKyNpZmRlZiBDT05GSUdfQVJDSF9SUEMKKwkJLmdsb2JsCXBhcmFtcworcGFyYW1zOgkJbGRyCXIwLCA9cGFyYW1zX3BoeXMKKwkJbW92CXBjLCBscgorCQkubHRvcmcKKwkJLmFsaWduCisjZW5kaWYKKworLyoKKyAqIFR1cm4gb24gdGhlIGNhY2hlLiAgV2UgbmVlZCB0byBzZXR1cCBzb21lIHBhZ2UgdGFibGVzIHNvIHRoYXQgd2UKKyAqIGNhbiBoYXZlIGJvdGggdGhlIEkgYW5kIEQgY2FjaGVzIG9uLgorICoKKyAqIFdlIHBsYWNlIHRoZSBwYWdlIHRhYmxlcyAxNmsgZG93biBmcm9tIHRoZSBrZXJuZWwgZXhlY3V0aW9uIGFkZHJlc3MsCisgKiBhbmQgd2UgaG9wZSB0aGF0IG5vdGhpbmcgZWxzZSBpcyB1c2luZyBpdC4gIElmIHdlJ3JlIHVzaW5nIGl0LCB3ZQorICogd2lsbCBnbyBwb3AhCisgKgorICogT24gZW50cnksCisgKiAgcjQgPSBrZXJuZWwgZXhlY3V0aW9uIGFkZHJlc3MKKyAqICByNiA9IHByb2Nlc3NvciBJRAorICogIHI3ID0gYXJjaGl0ZWN0dXJlIG51bWJlcgorICogIHI4ID0gcnVuLXRpbWUgYWRkcmVzcyBvZiAic3RhcnQiCisgKiBPbiBleGl0LAorICogIHIxLCByMiwgcjMsIHI4LCByOSwgcjEyIGNvcnJ1cHRlZAorICogVGhpcyByb3V0aW5lIG11c3QgcHJlc2VydmU6CisgKiAgcjQsIHI1LCByNiwgcjcKKyAqLworCQkuYWxpZ24JNQorY2FjaGVfb246CW1vdglyMywgIzgJCQlAIGNhY2hlX29uIGZ1bmN0aW9uCisJCWIJY2FsbF9jYWNoZV9mbgorCitfX3NldHVwX21tdToJc3ViCXIzLCByNCwgIzE2Mzg0CQlAIFBhZ2UgZGlyZWN0b3J5IHNpemUKKwkJYmljCXIzLCByMywgIzB4ZmYJCUAgQWxpZ24gdGhlIHBvaW50ZXIKKwkJYmljCXIzLCByMywgIzB4M2YwMAorLyoKKyAqIEluaXRpYWxpc2UgdGhlIHBhZ2UgdGFibGVzLCB0dXJuaW5nIG9uIHRoZSBjYWNoZWFibGUgYW5kIGJ1ZmZlcmFibGUKKyAqIGJpdHMgZm9yIHRoZSBSQU0gYXJlYSBvbmx5LgorICovCisJCW1vdglyMCwgcjMKKwkJbW92CXI4LCByMCwgbHNyICMxOAorCQltb3YJcjgsIHI4LCBsc2wgIzE4CQlAIHN0YXJ0IG9mIFJBTQorCQlhZGQJcjksIHI4LCAjMHgxMDAwMDAwMAlAIGEgcmVhc29uYWJsZSBSQU0gc2l6ZQorCQltb3YJcjEsICMweDEyCisJCW9ycglyMSwgcjEsICMzIDw8IDEwCisJCWFkZAlyMiwgcjMsICMxNjM4NAorMToJCWNtcAlyMSwgcjgJCQlAIGlmIHZpcnQgPiBzdGFydCBvZiBSQU0KKwkJb3JyaHMJcjEsIHIxLCAjMHgwYwkJQCBzZXQgY2FjaGVhYmxlLCBidWZmZXJhYmxlCisJCWNtcAlyMSwgcjkJCQlAIGlmIHZpcnQgPiBlbmQgb2YgUkFNCisJCWJpY2hzCXIxLCByMSwgIzB4MGMJCUAgY2xlYXIgY2FjaGVhYmxlLCBidWZmZXJhYmxlCisJCXN0cglyMSwgW3IwXSwgIzQJCUAgMToxIG1hcHBpbmcKKwkJYWRkCXIxLCByMSwgIzEwNDg1NzYKKwkJdGVxCXIwLCByMgorCQlibmUJMWIKKy8qCisgKiBJZiBldmVyIHdlIGFyZSBydW5uaW5nIGZyb20gRmxhc2gsIHRoZW4gd2Ugc3VyZWx5IHdhbnQgdGhlIGNhY2hlCisgKiB0byBiZSBlbmFibGVkIGFsc28gZm9yIG91ciBleGVjdXRpb24gaW5zdGFuY2UuLi4gIFdlIG1hcCAyTUIgb2YgaXQKKyAqIHNvIHRoZXJlIGlzIG5vIG1hcCBvdmVybGFwIHByb2JsZW0gZm9yIHVwIHRvIDEgTUIgY29tcHJlc3NlZCBrZXJuZWwuCisgKiBJZiB0aGUgZXhlY3V0aW9uIGlzIGluIFJBTSB0aGVuIHdlIHdvdWxkIG9ubHkgYmUgZHVwbGljYXRpbmcgdGhlIGFib3ZlLgorICovCisJCW1vdglyMSwgIzB4MWUKKwkJb3JyCXIxLCByMSwgIzMgPDwgMTAKKwkJbW92CXIyLCBwYywgbHNyICMyMAorCQlvcnIJcjEsIHIxLCByMiwgbHNsICMyMAorCQlhZGQJcjAsIHIzLCByMiwgbHNsICMyCisJCXN0cglyMSwgW3IwXSwgIzQKKwkJYWRkCXIxLCByMSwgIzEwNDg1NzYKKwkJc3RyCXIxLCBbcjBdCisJCW1vdglwYywgbHIKKworX19hcm12NF9jYWNoZV9vbjoKKwkJbW92CXIxMiwgbHIKKwkJYmwJX19zZXR1cF9tbXUKKwkJbW92CXIwLCAjMAorCQltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAlAIGRyYWluIHdyaXRlIGJ1ZmZlcgorCQltY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAwCUAgZmx1c2ggSSxEIFRMQnMKKwkJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAlAIHJlYWQgY29udHJvbCByZWcKKwkJb3JyCXIwLCByMCwgIzB4NTAwMAkJQCBJLWNhY2hlIGVuYWJsZSwgUlIgY2FjaGUgcmVwbGFjZW1lbnQKKwkJb3JyCXIwLCByMCwgIzB4MDAzMAorCQlibAlfX2NvbW1vbl9jYWNoZV9vbgorCQltb3YJcjAsICMwCisJCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJQCBmbHVzaCBJLEQgVExCcworCQltb3YJcGMsIHIxMgorCitfX2FybTZfY2FjaGVfb246CisJCW1vdglyMTIsIGxyCisJCWJsCV9fc2V0dXBfbW11CisJCW1vdglyMCwgIzAKKwkJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMCwgMAlAIGludmFsaWRhdGUgd2hvbGUgY2FjaGUgdjMKKwkJbWNyCXAxNSwgMCwgcjAsIGM1LCBjMCwgMAlAIGludmFsaWRhdGUgd2hvbGUgVExCIHYzCisJCW1vdglyMCwgIzB4MzAKKwkJYmwJX19jb21tb25fY2FjaGVfb24KKwkJbW92CXIwLCAjMAorCQltY3IJcDE1LCAwLCByMCwgYzUsIGMwLCAwCUAgaW52YWxpZGF0ZSB3aG9sZSBUTEIgdjMKKwkJbW92CXBjLCByMTIKKworX19jb21tb25fY2FjaGVfb246CisjaWZuZGVmIERFQlVHCisJCW9ycglyMCwgcjAsICMweDAwMGQJCUAgV3JpdGUgYnVmZmVyLCBtbXUKKyNlbmRpZgorCQltb3YJcjEsICMtMQorCQltY3IJcDE1LCAwLCByMywgYzIsIGMwLCAwCUAgbG9hZCBwYWdlIHRhYmxlIHBvaW50ZXIKKwkJbWNyCXAxNSwgMCwgcjEsIGMzLCBjMCwgMAlAIGxvYWQgZG9tYWluIGFjY2VzcyBjb250cm9sCisJCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJQCBsb2FkIGNvbnRyb2wgcmVnaXN0ZXIKKwkJbW92CXBjLCBscgorCisvKgorICogQWxsIGNvZGUgZm9sbG93aW5nIHRoaXMgbGluZSBpcyByZWxvY2F0YWJsZS4gIEl0IGlzIHJlbG9jYXRlZCBieQorICogdGhlIGFib3ZlIGNvZGUgdG8gdGhlIGVuZCBvZiB0aGUgZGVjb21wcmVzc2VkIGtlcm5lbCBpbWFnZSBhbmQKKyAqIGV4ZWN1dGVkIHRoZXJlLiAgRHVyaW5nIHRoaXMgdGltZSwgd2UgaGF2ZSBubyBzdGFja3MuCisgKgorICogcjAgICAgID0gZGVjb21wcmVzc2VkIGtlcm5lbCBsZW5ndGgKKyAqIHIxLXIzICA9IHVudXNlZAorICogcjQgICAgID0ga2VybmVsIGV4ZWN1dGlvbiBhZGRyZXNzCisgKiByNSAgICAgPSBkZWNvbXByZXNzZWQga2VybmVsIHN0YXJ0CisgKiByNiAgICAgPSBwcm9jZXNzb3IgSUQKKyAqIHI3ICAgICA9IGFyY2hpdGVjdHVyZSBJRAorICogcjgtcjE0ID0gdW51c2VkCisgKi8KKwkJLmFsaWduCTUKK3JlbG9jX3N0YXJ0OglhZGQJcjgsIHI1LCByMAorCQlkZWJ1Z19yZWxvY19zdGFydAorCQltb3YJcjEsIHI0CisxOgorCQkucmVwdAk0CisJCWxkbWlhCXI1ISwge3IwLCByMiwgcjMsIHI5IC0gcjEzfQlAIHJlbG9jYXRlIGtlcm5lbAorCQlzdG1pYQlyMSEsIHtyMCwgcjIsIHIzLCByOSAtIHIxM30KKwkJLmVuZHIKKworCQljbXAJcjUsIHI4CisJCWJsbwkxYgorCQlkZWJ1Z19yZWxvY19lbmQKKworY2FsbF9rZXJuZWw6CWJsCWNhY2hlX2NsZWFuX2ZsdXNoCisJCWJsCWNhY2hlX29mZgorCQltb3YJcjAsICMwCisJCW1vdglyMSwgcjcJCQlAIHJlc3RvcmUgYXJjaGl0ZWN0dXJlIG51bWJlcgorCQltb3YJcGMsIHI0CQkJQCBjYWxsIGtlcm5lbAorCisvKgorICogSGVyZSBmb2xsb3cgdGhlIHJlbG9jYXRhYmxlIGNhY2hlIHN1cHBvcnQgZnVuY3Rpb25zIGZvciB0aGUKKyAqIHZhcmlvdXMgcHJvY2Vzc29ycy4gIFRoaXMgaXMgYSBnZW5lcmljIGhvb2sgZm9yIGxvY2F0aW5nIGFuCisgKiBlbnRyeSBhbmQganVtcGluZyB0byBhbiBpbnN0cnVjdGlvbiBhdCB0aGUgc3BlY2lmaWVkIG9mZnNldAorICogZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGJsb2NrLiAgUGxlYXNlIG5vdGUgdGhpcyBpcyBhbGwgcG9zaXRpb24KKyAqIGluZGVwZW5kZW50IGNvZGUuCisgKgorICogIHIxICA9IGNvcnJ1cHRlZAorICogIHIyICA9IGNvcnJ1cHRlZAorICogIHIzICA9IGJsb2NrIG9mZnNldAorICogIHI2ICA9IGNvcnJ1cHRlZAorICogIHIxMiA9IGNvcnJ1cHRlZAorICovCisKK2NhbGxfY2FjaGVfZm46CWFkcglyMTIsIHByb2NfdHlwZXMKKwkJbXJjCXAxNSwgMCwgcjYsIGMwLCBjMAlAIGdldCBwcm9jZXNzb3IgSUQKKzE6CQlsZHIJcjEsIFtyMTIsICMwXQkJQCBnZXQgdmFsdWUKKwkJbGRyCXIyLCBbcjEyLCAjNF0JCUAgZ2V0IG1hc2sKKwkJZW9yCXIxLCByMSwgcjYJCUAgKHJlYWwgXiBtYXRjaCkKKwkJdHN0CXIxLCByMgkJCUAgICAgICAgJiBtYXNrCisJCWFkZGVxCXBjLCByMTIsIHIzCQlAIGNhbGwgY2FjaGUgZnVuY3Rpb24KKwkJYWRkCXIxMiwgcjEyLCAjNCo1CisJCWIJMWIKKworLyoKKyAqIFRhYmxlIGZvciBjYWNoZSBvcGVyYXRpb25zLiAgVGhpcyBpcyBiYXNpY2FsbHk6CisgKiAgIC0gQ1BVIElEIG1hdGNoCisgKiAgIC0gQ1BVIElEIG1hc2sKKyAqICAgLSAnY2FjaGUgb24nIG1ldGhvZCBpbnN0cnVjdGlvbgorICogICAtICdjYWNoZSBvZmYnIG1ldGhvZCBpbnN0cnVjdGlvbgorICogICAtICdjYWNoZSBmbHVzaCcgbWV0aG9kIGluc3RydWN0aW9uCisgKgorICogV2UgbWF0Y2ggYW4gZW50cnkgdXNpbmc6ICgocmVhbF9pZCBeIG1hdGNoKSAmIG1hc2spID09IDAKKyAqCisgKiBXcml0ZXRocm91Z2ggY2FjaGVzIGdlbmVyYWxseSBvbmx5IG5lZWQgJ29uJyBhbmQgJ29mZicKKyAqIG1ldGhvZHMuICBXcml0ZWJhY2sgY2FjaGVzIF9tdXN0XyBoYXZlIHRoZSBmbHVzaCBtZXRob2QKKyAqIGRlZmluZWQuCisgKi8KKwkJLnR5cGUJcHJvY190eXBlcywjb2JqZWN0Citwcm9jX3R5cGVzOgorCQkud29yZAkweDQxNTYwNjAwCQlAIEFSTTYvNjEwCisJCS53b3JkCTB4ZmZmZmZmZTAKKwkJYglfX2FybTZfY2FjaGVfb2ZmCUAgd29ya3MsIGJ1dCBzbG93CisJCWIJX19hcm02X2NhY2hlX29mZgorCQltb3YJcGMsIGxyCitACQliCV9fYXJtNl9jYWNoZV9vbgkJQCB1bnRlc3RlZAorQAkJYglfX2FybTZfY2FjaGVfb2ZmCitACQliCV9fYXJtdjNfY2FjaGVfZmx1c2gKKworCQkud29yZAkweDAwMDAwMDAwCQlAIG9sZCBBUk0gSUQKKwkJLndvcmQJMHgwMDAwZjAwMAorCQltb3YJcGMsIGxyCisJCW1vdglwYywgbHIKKwkJbW92CXBjLCBscgorCisJCS53b3JkCTB4NDEwMDcwMDAJCUAgQVJNNy83MTAKKwkJLndvcmQJMHhmZmY4ZmUwMAorCQliCV9fYXJtN19jYWNoZV9vZmYKKwkJYglfX2FybTdfY2FjaGVfb2ZmCisJCW1vdglwYywgbHIKKworCQkud29yZAkweDQxODA3MjAwCQlAIEFSTTcyMFQgKHdyaXRldGhyb3VnaCkKKwkJLndvcmQJMHhmZmZmZmYwMAorCQliCV9fYXJtdjRfY2FjaGVfb24KKwkJYglfX2FybXY0X2NhY2hlX29mZgorCQltb3YJcGMsIGxyCisKKwkJLndvcmQJMHgwMDAwNzAwMAkJQCBBUk03IElEcworCQkud29yZAkweDAwMDBmMDAwCisJCW1vdglwYywgbHIKKwkJbW92CXBjLCBscgorCQltb3YJcGMsIGxyCisKKwkJQCBFdmVyeXRoaW5nIGZyb20gaGVyZSBvbiB3aWxsIGJlIHRoZSBuZXcgSUQgc3lzdGVtLgorCisJCS53b3JkCTB4NDQwMWExMDAJCUAgc2ExMTAgLyBzYTExMDAKKwkJLndvcmQJMHhmZmZmZmZlMAorCQliCV9fYXJtdjRfY2FjaGVfb24KKwkJYglfX2FybXY0X2NhY2hlX29mZgorCQliCV9fYXJtdjRfY2FjaGVfZmx1c2gKKworCQkud29yZAkweDY5MDFiMTEwCQlAIHNhMTExMAorCQkud29yZAkweGZmZmZmZmYwCisJCWIJX19hcm12NF9jYWNoZV9vbgorCQliCV9fYXJtdjRfY2FjaGVfb2ZmCisJCWIJX19hcm12NF9jYWNoZV9mbHVzaAorCisJCUAgVGhlc2UgbWF0Y2ggb24gdGhlIGFyY2hpdGVjdHVyZSBJRAorCisJCS53b3JkCTB4MDAwMjAwMDAJCUAgQVJNdjRUCisJCS53b3JkCTB4MDAwZjAwMDAKKwkJYglfX2FybXY0X2NhY2hlX29uCisJCWIJX19hcm12NF9jYWNoZV9vZmYKKwkJYglfX2FybXY0X2NhY2hlX2ZsdXNoCisKKwkJLndvcmQJMHgwMDA1MDAwMAkJQCBBUk12NVRFCisJCS53b3JkCTB4MDAwZjAwMDAKKwkJYglfX2FybXY0X2NhY2hlX29uCisJCWIJX19hcm12NF9jYWNoZV9vZmYKKwkJYglfX2FybXY0X2NhY2hlX2ZsdXNoCisKKwkJLndvcmQJMHgwMDA2MDAwMAkJQCBBUk12NVRFSgorCQkud29yZAkweDAwMGYwMDAwCisJCWIJX19hcm12NF9jYWNoZV9vbgorCQliCV9fYXJtdjRfY2FjaGVfb2ZmCisJCWIJX19hcm12NF9jYWNoZV9mbHVzaAorCisJCS53b3JkCTB4MDAwNzAwMDAJCUAgQVJNdjYKKwkJLndvcmQJMHgwMDBmMDAwMAorCQliCV9fYXJtdjRfY2FjaGVfb24KKwkJYglfX2FybXY0X2NhY2hlX29mZgorCQliCV9fYXJtdjZfY2FjaGVfZmx1c2gKKworCQkud29yZAkwCQkJQCB1bnJlY29nbmlzZWQgdHlwZQorCQkud29yZAkwCisJCW1vdglwYywgbHIKKwkJbW92CXBjLCBscgorCQltb3YJcGMsIGxyCisKKwkJLnNpemUJcHJvY190eXBlcywgLiAtIHByb2NfdHlwZXMKKworLyoKKyAqIFR1cm4gb2ZmIHRoZSBDYWNoZSBhbmQgTU1VLiAgQVJNdjMgZG9lcyBub3Qgc3VwcG9ydAorICogcmVhZGluZyB0aGUgY29udHJvbCByZWdpc3RlciwgYnV0IEFSTXY0IGRvZXMuCisgKgorICogT24gZW50cnksICByNiA9IHByb2Nlc3NvciBJRAorICogT24gZXhpdCwgICByMCwgcjEsIHIyLCByMywgcjEyIGNvcnJ1cHRlZAorICogVGhpcyByb3V0aW5lIG11c3QgcHJlc2VydmU6IHI0LCByNiwgcjcKKyAqLworCQkuYWxpZ24JNQorY2FjaGVfb2ZmOgltb3YJcjMsICMxMgkJCUAgY2FjaGVfb2ZmIGZ1bmN0aW9uCisJCWIJY2FsbF9jYWNoZV9mbgorCitfX2FybXY0X2NhY2hlX29mZjoKKwkJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMAorCQliaWMJcjAsIHIwLCAjMHgwMDBkCisJCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAJQCB0dXJuIE1NVSBhbmQgY2FjaGUgb2ZmCisJCW1vdglyMCwgIzAKKwkJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNwlAIGludmFsaWRhdGUgd2hvbGUgY2FjaGUgdjQKKwkJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNwlAIGludmFsaWRhdGUgd2hvbGUgVExCIHY0CisJCW1vdglwYywgbHIKKworX19hcm02X2NhY2hlX29mZjoKKwkJbW92CXIwLCAjMHgwMDAwMDAzMAkJQCBBUk02IGNvbnRyb2wgcmVnLgorCQliCV9fYXJtdjNfY2FjaGVfb2ZmCisKK19fYXJtN19jYWNoZV9vZmY6CisJCW1vdglyMCwgIzB4MDAwMDAwNzAJCUAgQVJNNyBjb250cm9sIHJlZy4KKwkJYglfX2FybXYzX2NhY2hlX29mZgorCitfX2FybXYzX2NhY2hlX29mZjoKKwkJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAlAIHR1cm4gTU1VIGFuZCBjYWNoZSBvZmYKKwkJbW92CXIwLCAjMAorCQltY3IJcDE1LCAwLCByMCwgYzcsIGMwLCAwCUAgaW52YWxpZGF0ZSB3aG9sZSBjYWNoZSB2MworCQltY3IJcDE1LCAwLCByMCwgYzUsIGMwLCAwCUAgaW52YWxpZGF0ZSB3aG9sZSBUTEIgdjMKKwkJbW92CXBjLCBscgorCisvKgorICogQ2xlYW4gYW5kIGZsdXNoIHRoZSBjYWNoZSB0byBtYWludGFpbiBjb25zaXN0ZW5jeS4KKyAqCisgKiBPbiBlbnRyeSwKKyAqICByNiA9IHByb2Nlc3NvciBJRAorICogT24gZXhpdCwKKyAqICByMSwgcjIsIHIzLCByMTEsIHIxMiBjb3JydXB0ZWQKKyAqIFRoaXMgcm91dGluZSBtdXN0IHByZXNlcnZlOgorICogIHIwLCByNCwgcjUsIHI2LCByNworICovCisJCS5hbGlnbgk1CitjYWNoZV9jbGVhbl9mbHVzaDoKKwkJbW92CXIzLCAjMTYKKwkJYgljYWxsX2NhY2hlX2ZuCisKK19fYXJtdjZfY2FjaGVfZmx1c2g6CisJCW1vdglyMSwgIzAKKwkJbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTQsIDAJQCBjbGVhbitpbnZhbGlkYXRlIEQKKwkJbWNyCXAxNSwgMCwgcjEsIGM3LCBjNSwgMAlAIGludmFsaWRhdGUgSStCVEIKKwkJbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTUsIDAJQCBjbGVhbitpbnZhbGlkYXRlIHVuaWZpZWQKKwkJbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDQJQCBkcmFpbiBXQgorCQltb3YJcGMsIGxyCisKK19fYXJtdjRfY2FjaGVfZmx1c2g6CisJCW1vdglyMiwgIzY0KjEwMjQJCUAgZGVmYXVsdDogMzJLIGRjYWNoZSBzaXplICgqMikKKwkJbW92CXIxMSwgIzMyCQlAIGRlZmF1bHQ6IDMyIGJ5dGUgbGluZSBzaXplCisJCW1yYwlwMTUsIDAsIHIzLCBjMCwgYzAsIDEJQCByZWFkIGNhY2hlIHR5cGUKKwkJdGVxCXIzLCByNgkJCUAgY2FjaGUgSUQgcmVnaXN0ZXIgcHJlc2VudD8KKwkJYmVxCW5vX2NhY2hlX2lkCisJCW1vdglyMSwgcjMsIGxzciAjMTgKKwkJYW5kCXIxLCByMSwgIzcKKwkJbW92CXIyLCAjMTAyNAorCQltb3YJcjIsIHIyLCBsc2wgcjEJCUAgYmFzZSBkY2FjaGUgc2l6ZSAqMgorCQl0c3QJcjMsICMxIDw8IDE0CQlAIHRlc3QgTSBiaXQKKwkJYWRkbmUJcjIsIHIyLCByMiwgbHNyICMxCUAgKzEvMiBzaXplIGlmIE0gPT0gMQorCQltb3YJcjMsIHIzLCBsc3IgIzEyCisJCWFuZAlyMywgcjMsICMzCisJCW1vdglyMTEsICM4CisJCW1vdglyMTEsIHIxMSwgbHNsIHIzCUAgY2FjaGUgbGluZSBzaXplIGluIGJ5dGVzCitub19jYWNoZV9pZDoKKwkJYmljCXIxLCBwYywgIzYzCQlAIGFsaWduIHRvIGxvbmdlc3QgY2FjaGUgbGluZQorCQlhZGQJcjIsIHIxLCByMgorMToJCWxkcglyMywgW3IxXSwgcjExCQlAIHMvdyBmbHVzaCBEIGNhY2hlCisJCXRlcQlyMSwgcjIKKwkJYm5lCTFiCisKKwkJbWNyCXAxNSwgMCwgcjEsIGM3LCBjNSwgMAlAIGZsdXNoIEkgY2FjaGUKKwkJbWNyCXAxNSwgMCwgcjEsIGM3LCBjNiwgMAlAIGZsdXNoIEQgY2FjaGUKKwkJbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDQJQCBkcmFpbiBXQgorCQltb3YJcGMsIGxyCisKK19fYXJtdjNfY2FjaGVfZmx1c2g6CisJCW1vdglyMSwgIzAKKwkJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMCwgMAlAIGludmFsaWRhdGUgd2hvbGUgY2FjaGUgdjMKKwkJbW92CXBjLCBscgorCisvKgorICogVmFyaW91cyBkZWJ1Z2dpbmcgcm91dGluZXMgZm9yIHByaW50aW5nIGhleCBjaGFyYWN0ZXJzIGFuZAorICogbWVtb3J5LCB3aGljaCBhZ2FpbiBtdXN0IGJlIHJlbG9jYXRhYmxlLgorICovCisjaWZkZWYgREVCVUcKKwkJLnR5cGUJcGhleGJ1Ziwjb2JqZWN0CitwaGV4YnVmOgkuc3BhY2UJMTIKKwkJLnNpemUJcGhleGJ1ZiwgLiAtIHBoZXhidWYKKworcGhleDoJCWFkcglyMywgcGhleGJ1ZgorCQltb3YJcjIsICMwCisJCXN0cmIJcjIsIFtyMywgcjFdCisxOgkJc3VicwlyMSwgcjEsICMxCisJCW1vdm1pCXIwLCByMworCQlibWkJcHV0cworCQlhbmQJcjIsIHIwLCAjMTUKKwkJbW92CXIwLCByMCwgbHNyICM0CisJCWNtcAlyMiwgIzEwCisJCWFkZGdlCXIyLCByMiwgIzcKKwkJYWRkCXIyLCByMiwgIycwJworCQlzdHJiCXIyLCBbcjMsIHIxXQorCQliCTFiCisKK3B1dHM6CQlsb2Fkc3AJcjMKKzE6CQlsZHJiCXIyLCBbcjBdLCAjMQorCQl0ZXEJcjIsICMwCisJCW1vdmVxCXBjLCBscgorMjoJCXdyaXRlYglyMgorCQltb3YJcjEsICMweDAwMDIwMDAwCiszOgkJc3VicwlyMSwgcjEsICMxCisJCWJuZQkzYgorCQl0ZXEJcjIsICMnXG4nCisJCW1vdmVxCXIyLCAjJ1xyJworCQliZXEJMmIKKwkJdGVxCXIwLCAjMAorCQlibmUJMWIKKwkJbW92CXBjLCBscgorcHV0YzoKKwkJbW92CXIyLCByMAorCQltb3YJcjAsICMwCisJCWxvYWRzcAlyMworCQliCTJiCisKK21lbWR1bXA6CW1vdglyMTIsIHIwCisJCW1vdglyMTAsIGxyCisJCW1vdglyMTEsICMwCisyOgkJbW92CXIwLCByMTEsIGxzbCAjMgorCQlhZGQJcjAsIHIwLCByMTIKKwkJbW92CXIxLCAjOAorCQlibAlwaGV4CisJCW1vdglyMCwgIyc6JworCQlibAlwdXRjCisxOgkJbW92CXIwLCAjJyAnCisJCWJsCXB1dGMKKwkJbGRyCXIwLCBbcjEyLCByMTEsIGxzbCAjMl0KKwkJbW92CXIxLCAjOAorCQlibAlwaGV4CisJCWFuZAlyMCwgcjExLCAjNworCQl0ZXEJcjAsICMzCisJCW1vdmVxCXIwLCAjJyAnCisJCWJsZXEJcHV0YworCQlhbmQJcjAsIHIxMSwgIzcKKwkJYWRkCXIxMSwgcjExLCAjMQorCQl0ZXEJcjAsICM3CisJCWJuZQkxYgorCQltb3YJcjAsICMnXG4nCisJCWJsCXB1dGMKKwkJY21wCXIxMSwgIzY0CisJCWJsdAkyYgorCQltb3YJcGMsIHIxMAorI2VuZGlmCisKK3JlbG9jX2VuZDoKKworCQkuYWxpZ24KKwkJLnNlY3Rpb24gIi5zdGFjayIsICJ3IgordXNlcl9zdGFjazoJLnNwYWNlCTQwOTYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9pY2UtZGNjLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaWNlLWRjYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNDM3N2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaWNlLWRjYy5TCkBAIC0wLDAgKzEsMTcgQEAKKworCisJLnRleHQKKworCS5nbG9iYWwJaWNlZGNjX3B1dGMKKworaWNlZGNjX3B1dGM6CisJbW92CXIyLCAjMHg0MDAwMDAwCisxOgorCXN1YnMJcjIsIHIyLCAjMQorCW1vdmx0CXBjLCByMTQKKwltcmMJcDE0LCAwLCByMSwgYzAsIGMwLCAwCisJdHN0CXIxLCAjMgorCWJuZQkxYgorCisJbWNyCXAxNCwgMCwgcjAsIGMxLCBjMCwgMAorCW1vdglwYywgcjE0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbGxfY2hhcl93ci5TIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2xsX2NoYXJfd3IuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2JiZDlkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2xsX2NoYXJfd3IuUwpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9saWIvbGxfY2hhcl93ci5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBSdXNzZWxsIEtpbmcuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgU3BlZWR1cHMgJiAxYnBwIGNvZGUgKEMpIDE5OTYgUGhpbGlwIEJsdW5kZWxsICYgUnVzc2VsbCBLaW5nLgorICoKKyAqICAxMC0wNC05NglSTUsJVmFyaW91cyBjbGVhbnVwcyAmIHJlZHVjZWQgcmVnaXN0ZXIgdXNhZ2UuCisgKiAgMDgtMDQtOTgJUk1LCVNoaWZ0cyByZS1vcmRlcmVkCisgKi8KKworQCBSZWdzOiBbXSA9IGNvcnJ1cHRpYmxlCitAICAgICAgIHt9ID0gdXNlZAorQCAgICAgICAoKSA9IGRvIG5vdCB1c2UKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisJLnRleHQKKworTEMwOgkud29yZAlMQzAKKwkud29yZAlieXRlc19wZXJfY2hhcl9oCisJLndvcmQJdmlkZW9fc2l6ZV9yb3cKKwkud29yZAlhY29ybmRhdGFfOHg4CisJLndvcmQJY29uX2NoYXJjb252dGFibGUKKworLyoKKyAqIHIwID0gcHRyCisgKiByMSA9IGNoYXIKKyAqIHIyID0gd2hpdGUKKyAqLworRU5UUlkobGxfd3JpdGVfY2hhcikKKwlzdG1mZAlzcCEsIHtyNCAtIHI3LCBscn0KK0AKK0AgU21hc2hhYmxlIHJlZ3M6IHtyMCAtIHIzfSwgW3I0IC0gcjddLCAocjggLSBmcCksIFtpcF0sIChzcCksIFtscl0sIChwYykKK0AKKwkvKgorCSAqIGNhbGN1bGF0ZSBvZmZzZXQgaW50byBjaGFyYWN0ZXIgdGFibGUKKwkgKi8KKwltb3YJcjEsIHIxLCBsc2wgIzMKKwkvKgorCSAqIGNhbGN1bGF0ZSBvZmZzZXQgcmVxdWlyZWQgZm9yIGVhY2ggcm93LgorCSAqLworCWFkcglpcCwgTEMwCisJbGRtaWEJaXAsIHtyMywgcjQsIHI1LCByNiwgbHJ9CisJc3ViCWlwLCBpcCwgcjMKKwlhZGQJcjYsIHI2LCBpcAorCWFkZAlsciwgbHIsIGlwCisJbGRyCXI0LCBbcjQsIGlwXQorCWxkcglyNSwgW3I1LCBpcF0KKwkvKgorCSAqIEdvIHRvIHJlc29sdXRpb24tZGVwZW5kZW50IHJvdXRpbmUuLi4KKwkgKi8KKwljbXAJcjQsICM0CisJYmx0CUxyb3cxYnBwCisJYWRkCXIwLCByMCwgcjUsIGxzbCAjMwkJQCBNb3ZlIHRvIGJvdHRvbSBvZiBjaGFyYWN0ZXIKKwlvcnIJcjEsIHIxLCAjNworCWxkcmIJcjcsIFtyNiwgcjFdCisJdGVxCXI0LCAjOAorCWJlcQlMcm93OGJwcGxwCitACitAIFNtYXNoYWJsZSByZWdzOiB7cjAgLSByM30sIFtyNF0sIHtyNSAtIHI3fSwgKHI4IC0gZnApLCBbaXBdLCAoc3ApLCB7bHJ9LCAocGMpCitACitMcm93NGJwcGxwOgorCWxkcglyNywgW2xyLCByNywgbHNsICMyXQorCW11bAlyNywgcjIsIHI3CisJc3ViCXIxLCByMSwgIzEJCQlAIGF2b2lkIHVzaW5nIHI3IGRpcmVjdGx5IGFmdGVyCisJc3RyCXI3LCBbcjAsIC1yNV0hCisJbGRyYglyNywgW3I2LCByMV0KKwlsZHIJcjcsIFtsciwgcjcsIGxzbCAjMl0KKwltdWwJcjcsIHIyLCByNworCXRzdAlyMSwgIzcJCQkJQCBhdm9pZCB1c2luZyByNyBkaXJlY3RseSBhZnRlcgorCXN0cglyNywgW3IwLCAtcjVdIQorCXN1Ym5lCXIxLCByMSwgIzEKKwlsZHJuZWIJcjcsIFtyNiwgcjFdCisJYm5lCUxyb3c0YnBwbHAKKwlMT0FEUkVHUyhmZCwgc3AhLCB7cjQgLSByNywgcGN9KQorCitACitAIFNtYXNoYWJsZSByZWdzOiB7cjAgLSByM30sIFtyNF0sIHtyNSAtIHI3fSwgKHI4IC0gZnApLCBbaXBdLCAoc3ApLCB7bHJ9LCAocGMpCitACitMcm93OGJwcGxwOgorCW1vdglpcCwgcjcsIGxzciAjNAorCWxkcglpcCwgW2xyLCBpcCwgbHNsICMyXQorCW11bAlyNCwgcjIsIGlwCisJYW5kCWlwLCByNywgIzE1CQkJQCBhdm9pZCByNAorCWxkcglpcCwgW2xyLCBpcCwgbHNsICMyXQkJQCBhdm9pZCByNAorCW11bAlpcCwgcjIsIGlwCQkJQCBhdm9pZCByNAorCXN1YglyMSwgcjEsICMxCQkJQCBhdm9pZCBpcAorCXN1YglyMCwgcjAsIHI1CQkJQCBhdm9pZCBpcAorCXN0bWlhCXIwLCB7cjQsIGlwfQorCWxkcmIJcjcsIFtyNiwgcjFdCisJbW92CWlwLCByNywgbHNyICM0CisJbGRyCWlwLCBbbHIsIGlwLCBsc2wgIzJdCisJbXVsCXI0LCByMiwgaXAKKwlhbmQJaXAsIHI3LCAjMTUJCQlAIGF2b2lkIHI0CisJbGRyCWlwLCBbbHIsIGlwLCBsc2wgIzJdCQlAIGF2b2lkIHI0CisJbXVsCWlwLCByMiwgaXAJCQlAIGF2b2lkIHI0CisJdHN0CXIxLCAjNwkJCQlAIGF2b2lkIGlwCisJc3ViCXIwLCByMCwgcjUJCQlAIGF2b2lkIGlwCisJc3RtaWEJcjAsIHtyNCwgaXB9CisJc3VibmUJcjEsIHIxLCAjMQorCWxkcm5lYglyNywgW3I2LCByMV0KKwlibmUJTHJvdzhicHBscAorCUxPQURSRUdTKGZkLCBzcCEsIHtyNCAtIHI3LCBwY30pCisKK0AKK0AgU21hc2hhYmxlIHJlZ3M6IHtyMCAtIHIzfSwgW3I0XSwge3I1LCByNn0sIFtyN10sIChyOCAtIGZwKSwgW2lwXSwgKHNwKSwgW2xyXSwgKHBjKQorQAorTHJvdzFicHA6CisJYWRkCXI2LCByNiwgcjEKKwlsZG1pYQlyNiwge3I0LCByN30KKwlzdHJiCXI0LCBbcjBdLCByNQorCW1vdglyNCwgcjQsIGxzciAjOAorCXN0cmIJcjQsIFtyMF0sIHI1CisJbW92CXI0LCByNCwgbHNyICM4CisJc3RyYglyNCwgW3IwXSwgcjUKKwltb3YJcjQsIHI0LCBsc3IgIzgKKwlzdHJiCXI0LCBbcjBdLCByNQorCXN0cmIJcjcsIFtyMF0sIHI1CisJbW92CXI3LCByNywgbHNyICM4CisJc3RyYglyNywgW3IwXSwgcjUKKwltb3YJcjcsIHI3LCBsc3IgIzgKKwlzdHJiCXI3LCBbcjBdLCByNQorCW1vdglyNywgcjcsIGxzciAjOAorCXN0cmIJcjcsIFtyMF0sIHI1CisJTE9BRFJFR1MoZmQsIHNwISwge3I0IC0gcjcsIHBjfSkKKworCS5ic3MKK0VOVFJZKGNvbl9jaGFyY29udnRhYmxlKQorCS5zcGFjZQkxMDI0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzQzNGI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtMCwwICsxLDMyOSBAQAorLyoKKyAqIG1pc2MuYworICogCisgKiBUaGlzIGlzIGEgY29sbGVjdGlvbiBvZiBzZXZlcmFsIHJvdXRpbmVzIGZyb20gZ3ppcC0xLjAuMyAKKyAqIGFkYXB0ZWQgZm9yIExpbnV4LgorICoKKyAqIG1hbGxvYyBieSBIYW5udSBTYXZvbGFpbmVuIDE5OTMgYW5kIE1hdHRoaWFzIFVybGljaHMgMTk5NAorICoKKyAqIE1vZGlmaWVkIGZvciBBUk0gTGludXggYnkgUnVzc2VsbCBLaW5nCisgKgorICogTmljb2xhcyBQaXRyZSA8bmljb0B2aXN1YWlkZS5jb20+ICAxOTk5LzA0LzE0IDoKKyAqICBGb3IgdGhpcyBjb2RlIHRvIHJ1biBkaXJlY3RseSBmcm9tIEZsYXNoLCBhbGwgY29uc3RhbnQgdmFyaWFibGVzIG11c3QKKyAqICBiZSBtYXJrZWQgd2l0aCAnY29uc3QnIGFuZCBhbGwgb3RoZXIgdmFyaWFibGVzIGluaXRpYWxpemVkIGF0IHJ1bi10aW1lIAorICogIG9ubHkuICBUaGlzIHdheSBhbGwgbm9uIGNvbnN0YW50IHZhcmlhYmxlcyB3aWxsIGVuZCB1cCBpbiB0aGUgYnNzIHNlZ21lbnQsCisgKiAgd2hpY2ggc2hvdWxkIHBvaW50IHRvIGFkZHJlc3NlcyBpbiBSQU0gYW5kIGNsZWFyZWQgdG8gMCBvbiBzdGFydC4KKyAqICBUaGlzIGFsbG93cyBmb3IgYSBtdWNoIHF1aWNrZXIgYm9vdCB0aW1lLgorICovCisKK3Vuc2lnbmVkIGludCBfX21hY2hpbmVfYXJjaF90eXBlOworCisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC91bmNvbXByZXNzLmg+CisKKyNpZmRlZiBTVEFOREFMT05FX0RFQlVHCisjZGVmaW5lIHB1dHN0ciBwcmludGYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0RFQlVHX0lDRURDQworI2RlZmluZSBwdXRzdHIgaWNlZGNjX3B1dHN0cgorI2RlZmluZSBwdXRjIGljZWRjY19wdXRjCisKK2V4dGVybiB2b2lkIGlkZWRjY19wdXRjKGludCBjaCk7CisKK3N0YXRpYyB2b2lkCitpY2VkY2NfcHV0c3RyKGNvbnN0IGNoYXIgKnB0cikKK3sKKwlmb3IgKDsgKnB0ciAhPSAnXDAnOyBwdHIrKykgeworCQlpY2VkY2NfcHV0YygqcHRyKTsKKwl9Cit9CisKKyNlbmRpZgorCisjZGVmaW5lIF9fcHRyX3Qgdm9pZCAqCisKKy8qCisgKiBPcHRpbWlzZWQgQyB2ZXJzaW9uIG9mIG1lbXplcm8gZm9yIHRoZSBBUk0uCisgKi8KK3ZvaWQgX19tZW16ZXJvIChfX3B0cl90IHMsIHNpemVfdCBuKQoreworCXVuaW9uIHsgdm9pZCAqdnA7IHVuc2lnbmVkIGxvbmcgKnVscDsgdW5zaWduZWQgY2hhciAqdWNwOyB9IHU7CisJaW50IGk7CisKKwl1LnZwID0gczsKKworCWZvciAoaSA9IG4gPj4gNTsgaSA+IDA7IGktLSkgeworCQkqdS51bHArKyA9IDA7CisJCSp1LnVscCsrID0gMDsKKwkJKnUudWxwKysgPSAwOworCQkqdS51bHArKyA9IDA7CisJCSp1LnVscCsrID0gMDsKKwkJKnUudWxwKysgPSAwOworCQkqdS51bHArKyA9IDA7CisJCSp1LnVscCsrID0gMDsKKwl9CisKKwlpZiAobiAmIDEgPDwgNCkgeworCQkqdS51bHArKyA9IDA7CisJCSp1LnVscCsrID0gMDsKKwkJKnUudWxwKysgPSAwOworCQkqdS51bHArKyA9IDA7CisJfQorCisJaWYgKG4gJiAxIDw8IDMpIHsKKwkJKnUudWxwKysgPSAwOworCQkqdS51bHArKyA9IDA7CisJfQorCisJaWYgKG4gJiAxIDw8IDIpCisJCSp1LnVscCsrID0gMDsKKworCWlmIChuICYgMSA8PCAxKSB7CisJCSp1LnVjcCsrID0gMDsKKwkJKnUudWNwKysgPSAwOworCX0KKworCWlmIChuICYgMSkKKwkJKnUudWNwKysgPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fcHRyX3QgbWVtY3B5KF9fcHRyX3QgX19kZXN0LCBfX2NvbnN0IF9fcHRyX3QgX19zcmMsCisJCQkgICAgc2l6ZV90IF9fbikKK3sKKwlpbnQgaSA9IDA7CisJdW5zaWduZWQgY2hhciAqZCA9ICh1bnNpZ25lZCBjaGFyICopX19kZXN0LCAqcyA9ICh1bnNpZ25lZCBjaGFyICopX19zcmM7CisKKwlmb3IgKGkgPSBfX24gPj4gMzsgaSA+IDA7IGktLSkgeworCQkqZCsrID0gKnMrKzsKKwkJKmQrKyA9ICpzKys7CisJCSpkKysgPSAqcysrOworCQkqZCsrID0gKnMrKzsKKwkJKmQrKyA9ICpzKys7CisJCSpkKysgPSAqcysrOworCQkqZCsrID0gKnMrKzsKKwkJKmQrKyA9ICpzKys7CisJfQorCisJaWYgKF9fbiAmIDEgPDwgMikgeworCQkqZCsrID0gKnMrKzsKKwkJKmQrKyA9ICpzKys7CisJCSpkKysgPSAqcysrOworCQkqZCsrID0gKnMrKzsKKwl9CisKKwlpZiAoX19uICYgMSA8PCAxKSB7CisJCSpkKysgPSAqcysrOworCQkqZCsrID0gKnMrKzsKKwl9CisKKwlpZiAoX19uICYgMSkKKwkJKmQrKyA9ICpzKys7CisKKwlyZXR1cm4gX19kZXN0OworfQorCisvKgorICogZ3ppcCBkZWxhcmF0aW9ucworICovCisjZGVmaW5lIE9GKGFyZ3MpICBhcmdzCisjZGVmaW5lIFNUQVRJQyBzdGF0aWMKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICB1Y2g7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgdWxnOworCisjZGVmaW5lIFdTSVpFIDB4ODAwMAkJLyogV2luZG93IHNpemUgbXVzdCBiZSBhdCBsZWFzdCAzMmssICovCisJCQkJLyogYW5kIGEgcG93ZXIgb2YgdHdvICovCisKK3N0YXRpYyB1Y2ggKmluYnVmOwkJLyogaW5wdXQgYnVmZmVyICovCitzdGF0aWMgdWNoIHdpbmRvd1tXU0laRV07CS8qIFNsaWRpbmcgd2luZG93IGJ1ZmZlciAqLworCitzdGF0aWMgdW5zaWduZWQgaW5zaXplOwkJLyogdmFsaWQgYnl0ZXMgaW4gaW5idWYgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnB0cjsJCS8qIGluZGV4IG9mIG5leHQgYnl0ZSB0byBiZSBwcm9jZXNzZWQgaW4gaW5idWYgKi8KK3N0YXRpYyB1bnNpZ25lZCBvdXRjbnQ7CQkvKiBieXRlcyBpbiBvdXRwdXQgYnVmZmVyICovCisKKy8qIGd6aXAgZmxhZyBieXRlICovCisjZGVmaW5lIEFTQ0lJX0ZMQUcgICAweDAxIC8qIGJpdCAwIHNldDogZmlsZSBwcm9iYWJseSBhc2NpaSB0ZXh0ICovCisjZGVmaW5lIENPTlRJTlVBVElPTiAweDAyIC8qIGJpdCAxIHNldDogY29udGludWF0aW9uIG9mIG11bHRpLXBhcnQgZ3ppcCBmaWxlICovCisjZGVmaW5lIEVYVFJBX0ZJRUxEICAweDA0IC8qIGJpdCAyIHNldDogZXh0cmEgZmllbGQgcHJlc2VudCAqLworI2RlZmluZSBPUklHX05BTUUgICAgMHgwOCAvKiBiaXQgMyBzZXQ6IG9yaWdpbmFsIGZpbGUgbmFtZSBwcmVzZW50ICovCisjZGVmaW5lIENPTU1FTlQgICAgICAweDEwIC8qIGJpdCA0IHNldDogZmlsZSBjb21tZW50IHByZXNlbnQgKi8KKyNkZWZpbmUgRU5DUllQVEVEICAgIDB4MjAgLyogYml0IDUgc2V0OiBmaWxlIGlzIGVuY3J5cHRlZCAqLworI2RlZmluZSBSRVNFUlZFRCAgICAgMHhDMCAvKiBiaXQgNiw3OiAgIHJlc2VydmVkICovCisKKyNkZWZpbmUgZ2V0X2J5dGUoKSAgKGlucHRyIDwgaW5zaXplID8gaW5idWZbaW5wdHIrK10gOiBmaWxsX2luYnVmKCkpCisKKy8qIERpYWdub3N0aWMgZnVuY3Rpb25zICovCisjaWZkZWYgREVCVUcKKyMgIGRlZmluZSBBc3NlcnQoY29uZCxtc2cpIHtpZighKGNvbmQpKSBlcnJvcihtc2cpO30KKyMgIGRlZmluZSBUcmFjZSh4KSBmcHJpbnRmIHgKKyMgIGRlZmluZSBUcmFjZXYoeCkge2lmICh2ZXJib3NlKSBmcHJpbnRmIHggO30KKyMgIGRlZmluZSBUcmFjZXZ2KHgpIHtpZiAodmVyYm9zZT4xKSBmcHJpbnRmIHggO30KKyMgIGRlZmluZSBUcmFjZWMoYyx4KSB7aWYgKHZlcmJvc2UgJiYgKGMpKSBmcHJpbnRmIHggO30KKyMgIGRlZmluZSBUcmFjZWN2KGMseCkge2lmICh2ZXJib3NlPjEgJiYgKGMpKSBmcHJpbnRmIHggO30KKyNlbHNlCisjICBkZWZpbmUgQXNzZXJ0KGNvbmQsbXNnKQorIyAgZGVmaW5lIFRyYWNlKHgpCisjICBkZWZpbmUgVHJhY2V2KHgpCisjICBkZWZpbmUgVHJhY2V2dih4KQorIyAgZGVmaW5lIFRyYWNlYyhjLHgpCisjICBkZWZpbmUgVHJhY2VjdihjLHgpCisjZW5kaWYKKworc3RhdGljIGludCAgZmlsbF9pbmJ1Zih2b2lkKTsKK3N0YXRpYyB2b2lkIGZsdXNoX3dpbmRvdyh2b2lkKTsKK3N0YXRpYyB2b2lkIGVycm9yKGNoYXIgKm0pOworc3RhdGljIHZvaWQgZ3ppcF9tYXJrKHZvaWQgKiopOworc3RhdGljIHZvaWQgZ3ppcF9yZWxlYXNlKHZvaWQgKiopOworCitleHRlcm4gY2hhciBpbnB1dF9kYXRhW107CitleHRlcm4gY2hhciBpbnB1dF9kYXRhX2VuZFtdOworCitzdGF0aWMgdWNoICpvdXRwdXRfZGF0YTsKK3N0YXRpYyB1bGcgb3V0cHV0X3B0cjsKK3N0YXRpYyB1bGcgYnl0ZXNfb3V0OworCitzdGF0aWMgdm9pZCAqbWFsbG9jKGludCBzaXplKTsKK3N0YXRpYyB2b2lkIGZyZWUodm9pZCAqd2hlcmUpOworc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqbSk7CitzdGF0aWMgdm9pZCBnemlwX21hcmsodm9pZCAqKik7CitzdGF0aWMgdm9pZCBnemlwX3JlbGVhc2Uodm9pZCAqKik7CisKK3N0YXRpYyB2b2lkIHB1dHN0cihjb25zdCBjaGFyICopOworCitleHRlcm4gaW50IGVuZDsKK3N0YXRpYyB1bGcgZnJlZV9tZW1fcHRyOworc3RhdGljIHVsZyBmcmVlX21lbV9wdHJfZW5kOworCisjZGVmaW5lIEhFQVBfU0laRSAweDIwMDAKKworI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9pbmZsYXRlLmMiCisKKyNpZm5kZWYgU1RBTkRBTE9ORV9ERUJVRworc3RhdGljIHZvaWQgKm1hbGxvYyhpbnQgc2l6ZSkKK3sKKwl2b2lkICpwOworCisJaWYgKHNpemUgPDApIGVycm9yKCJNYWxsb2MgZXJyb3IiKTsKKwlpZiAoZnJlZV9tZW1fcHRyIDw9IDApIGVycm9yKCJNZW1vcnkgZXJyb3IiKTsKKworCWZyZWVfbWVtX3B0ciA9IChmcmVlX21lbV9wdHIgKyAzKSAmIH4zOwkvKiBBbGlnbiAqLworCisJcCA9ICh2b2lkICopZnJlZV9tZW1fcHRyOworCWZyZWVfbWVtX3B0ciArPSBzaXplOworCisJaWYgKGZyZWVfbWVtX3B0ciA+PSBmcmVlX21lbV9wdHJfZW5kKQorCQllcnJvcigiT3V0IG9mIG1lbW9yeSIpOworCXJldHVybiBwOworfQorCitzdGF0aWMgdm9pZCBmcmVlKHZvaWQgKndoZXJlKQoreyAvKiBnemlwX21hcmsgJiBnemlwX3JlbGVhc2UgZG8gdGhlIGZyZWUgKi8KK30KKworc3RhdGljIHZvaWQgZ3ppcF9tYXJrKHZvaWQgKipwdHIpCit7CisJYXJjaF9kZWNvbXBfd2RvZygpOworCSpwdHIgPSAodm9pZCAqKSBmcmVlX21lbV9wdHI7Cit9CisKK3N0YXRpYyB2b2lkIGd6aXBfcmVsZWFzZSh2b2lkICoqcHRyKQoreworCWFyY2hfZGVjb21wX3dkb2coKTsKKwlmcmVlX21lbV9wdHIgPSAobG9uZykgKnB0cjsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBnemlwX21hcmsodm9pZCAqKnB0cikKK3sKK30KKworc3RhdGljIHZvaWQgZ3ppcF9yZWxlYXNlKHZvaWQgKipwdHIpCit7Cit9CisjZW5kaWYKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBGaWxsIHRoZSBpbnB1dCBidWZmZXIuIFRoaXMgaXMgY2FsbGVkIG9ubHkgd2hlbiB0aGUgYnVmZmVyIGlzIGVtcHR5CisgKiBhbmQgYXQgbGVhc3Qgb25lIGJ5dGUgaXMgcmVhbGx5IG5lZWRlZC4KKyAqLworaW50IGZpbGxfaW5idWYodm9pZCkKK3sKKwlpZiAoaW5zaXplICE9IDApCisJCWVycm9yKCJyYW4gb3V0IG9mIGlucHV0IGRhdGEiKTsKKworCWluYnVmID0gaW5wdXRfZGF0YTsKKwlpbnNpemUgPSAmaW5wdXRfZGF0YV9lbmRbMF0gLSAmaW5wdXRfZGF0YVswXTsKKworCWlucHRyID0gMTsKKwlyZXR1cm4gaW5idWZbMF07Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogV3JpdGUgdGhlIG91dHB1dCB3aW5kb3cgd2luZG93WzAuLm91dGNudC0xXSBhbmQgdXBkYXRlIGNyYyBhbmQgYnl0ZXNfb3V0LgorICogKFVzZWQgZm9yIHRoZSBkZWNvbXByZXNzZWQgZGF0YSBvbmx5LikKKyAqLwordm9pZCBmbHVzaF93aW5kb3codm9pZCkKK3sKKwl1bGcgYyA9IGNyYzsKKwl1bnNpZ25lZCBuOworCXVjaCAqaW4sICpvdXQsIGNoOworCisJaW4gPSB3aW5kb3c7CisJb3V0ID0gJm91dHB1dF9kYXRhW291dHB1dF9wdHJdOworCWZvciAobiA9IDA7IG4gPCBvdXRjbnQ7IG4rKykgeworCQljaCA9ICpvdXQrKyA9ICppbisrOworCQljID0gY3JjXzMyX3RhYlsoKGludCljIF4gY2gpICYgMHhmZl0gXiAoYyA+PiA4KTsKKwl9CisJY3JjID0gYzsKKwlieXRlc19vdXQgKz0gKHVsZylvdXRjbnQ7CisJb3V0cHV0X3B0ciArPSAodWxnKW91dGNudDsKKwlvdXRjbnQgPSAwOworCXB1dHN0cigiLiIpOworfQorCitzdGF0aWMgdm9pZCBlcnJvcihjaGFyICp4KQoreworCXB1dHN0cigiXG5cbiIpOworCXB1dHN0cih4KTsKKwlwdXRzdHIoIlxuXG4gLS0gU3lzdGVtIGhhbHRlZCIpOworCisJd2hpbGUoMSk7CS8qIEhhbHQgKi8KK30KKworI2lmbmRlZiBTVEFOREFMT05FX0RFQlVHCisKK3VsZworZGVjb21wcmVzc19rZXJuZWwodWxnIG91dHB1dF9zdGFydCwgdWxnIGZyZWVfbWVtX3B0cl9wLCB1bGcgZnJlZV9tZW1fcHRyX2VuZF9wLAorCQkgIGludCBhcmNoX2lkKQoreworCW91dHB1dF9kYXRhCQk9ICh1Y2ggKilvdXRwdXRfc3RhcnQ7CS8qIFBvaW50cyB0byBrZXJuZWwgc3RhcnQgKi8KKwlmcmVlX21lbV9wdHIJCT0gZnJlZV9tZW1fcHRyX3A7CisJZnJlZV9tZW1fcHRyX2VuZAk9IGZyZWVfbWVtX3B0cl9lbmRfcDsKKwlfX21hY2hpbmVfYXJjaF90eXBlCT0gYXJjaF9pZDsKKworCWFyY2hfZGVjb21wX3NldHVwKCk7CisKKwltYWtlY3JjKCk7CisJcHV0c3RyKCJVbmNvbXByZXNzaW5nIExpbnV4Li4uIik7CisJZ3VuemlwKCk7CisJcHV0c3RyKCIgZG9uZSwgYm9vdGluZyB0aGUga2VybmVsLlxuIik7CisJcmV0dXJuIG91dHB1dF9wdHI7Cit9CisjZWxzZQorCitjaGFyIG91dHB1dF9idWZmZXJbMTUwMCoxMDI0XTsKKworaW50IG1haW4oKQoreworCW91dHB1dF9kYXRhID0gb3V0cHV0X2J1ZmZlcjsKKworCW1ha2VjcmMoKTsKKwlwdXRzdHIoIlVuY29tcHJlc3NpbmcgTGludXguLi4iKTsKKwlndW56aXAoKTsKKwlwdXRzdHIoImRvbmUuXG4iKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL29mdy1zaGFyay5jIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL29mdy1zaGFyay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNmY1ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvb2Z3LXNoYXJrLmMKQEAgLTAsMCArMSwyNjAgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvb2Z3LXNoYXJrLmMKKyAqCisgKiBieSBBbGV4YW5kZXIgU2NodWx6CisgKgorICogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZ2V0IHNvbWUgYmFzaWMgaW5mb3JtYXRpb24KKyAqIGFib3V0IHRoZSBtZW1vcnkgbGF5b3V0IG9mIHRoZSBzaGFyayB3ZSBhcmUgcnVubmluZworICogb24uIE1lbW9yeSBpcyB1c3VhbGx5IGRpdmlkZWQgaW4gYmxvY2tzIGEgOCBNQi4KKyAqIEFuZCBib290YXJncyBhcmUgY29waWVkIGZyb20gT3BlbkZpcm13YXJlLgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworCithc21saW5rYWdlIHZvaWQKK2NyZWF0ZV9wYXJhbXMgKHVuc2lnbmVkIGxvbmcgKmJ1ZmZlcikKK3sKKwkvKiBJcyB0aGVyZSBhIGJldHRlciBhZGRyZXNzPyBBbHNvIGNoYW5nZSBpbiBtYWNoLXNoYXJrL2NvcmUuYyAqLworCXN0cnVjdCB0YWcgKnRhZyA9IChzdHJ1Y3QgdGFnICopIDB4MDgwMDMwMDA7CisJaW50IGosaSxtLGssbnJfYmFua3Msc2l6ZTsKKwl1bnNpZ25lZCBjaGFyICpjOworCisJayA9IDA7CisKKwkvKiBIZWFkIG9mIHRoZSB0YWdsaXN0ICovCisJdGFnLT5oZHIudGFnICA9IEFUQUdfQ09SRTsKKwl0YWctPmhkci5zaXplID0gdGFnX3NpemUodGFnX2NvcmUpOworCXRhZy0+dS5jb3JlLmZsYWdzID0gMTsKKwl0YWctPnUuY29yZS5wYWdlc2l6ZSA9IFBBR0VfU0laRTsKKwl0YWctPnUuY29yZS5yb290ZGV2ID0gMDsKKworCS8qIEJ1aWxkIHVwIG9uZSB0YWdnZWQgYmxvY2sgZm9yIGVhY2ggbWVtb3J5IHJlZ2lvbiAqLworCXNpemU9MDsKKwlucl9iYW5rcz0odW5zaWduZWQgaW50KSBidWZmZXJbMF07CisJZm9yIChqPTA7ajxucl9iYW5rcztqKyspeworCQkvKiBzZWFyY2ggdGhlIGxvd2VzdCBhZGRyZXNzIGFuZCBwdXQgaXQgaW50byB0aGUgbmV4dCBlbnRyeSAgICovCisJCS8qIG5vdCBhIGZhc3Qgc29ydCBhbGdvcml0aG0sIGJ1dCB0aGVyZSBhcmUgYXQgbW9zdCA4IGVudHJpZXMgKi8KKwkJLyogYW5kIHRoaXMgaXMgdXNlZCBvbmx5IG9uY2UgYW55d2F5ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQltPTB4ZmZmZmZmZmY7CisJCWZvciAoaT0wO2k8KHVuc2lnbmVkIGludCkgYnVmZmVyWzBdO2krKyl7CisJCQlpZiAoYnVmZmVyWzIqaSsxXTxtKSB7CisJCQkJbT1idWZmZXJbMippKzFdOworCQkJCWs9aTsKKwkJCX0KKwkJfQorCSAgCisJCXRhZyA9IHRhZ19uZXh0KHRhZyk7CisJCXRhZy0+aGRyLnRhZyA9IEFUQUdfTUVNOworCQl0YWctPmhkci5zaXplID0gdGFnX3NpemUodGFnX21lbTMyKTsKKwkJdGFnLT51Lm1lbS5zaXplID0gYnVmZmVyWzIqaysyXTsKKwkJdGFnLT51Lm1lbS5zdGFydCA9IGJ1ZmZlclsyKmsrMV07CisKKwkJc2l6ZSArPSBidWZmZXJbMiprKzJdOworCisJCWJ1ZmZlclsyKmsrMV09MHhmZmZmZmZmZjsgICAgICAgICAgICAgICAgICAgIC8qIG1hcmsgYXMgY29waWVkICovCisJfQorCQorCS8qIFRoZSBjb21tYW5kIGxpbmUgKi8KKwl0YWcgPSB0YWdfbmV4dCh0YWcpOworCXRhZy0+aGRyLnRhZyA9IEFUQUdfQ01ETElORTsKKwkKKwljPSh1bnNpZ25lZCBjaGFyICopKCZidWZmZXJbMzRdKTsKKwlqPTA7CisJd2hpbGUgKCpjKSB0YWctPnUuY21kbGluZS5jbWRsaW5lW2orK109KmMrKzsKKworCXRhZy0+dS5jbWRsaW5lLmNtZGxpbmVbal09MDsKKwl0YWctPmhkci5zaXplID0gKGogKyA3ICsgc2l6ZW9mKHN0cnVjdCB0YWdfaGVhZGVyKSkgPj4gMjsKKworCS8qIEhhcmR3YXJlIHJldmlzaW9uICovCisJdGFnID0gdGFnX25leHQodGFnKTsKKwl0YWctPmhkci50YWcgPSBBVEFHX1JFVklTSU9OOworCXRhZy0+aGRyLnNpemUgPSB0YWdfc2l6ZSh0YWdfcmV2aXNpb24pOworCXRhZy0+dS5yZXZpc2lvbi5yZXYgPSAoKHVuc2lnbmVkIGNoYXIpIGJ1ZmZlclszM10pLScwJzsKKworCS8qIEVuZCBvZiB0aGUgdGFnbGlzdCAqLworCXRhZyA9IHRhZ19uZXh0KHRhZyk7CisJdGFnLT5oZHIudGFnID0gMDsKKwl0YWctPmhkci5zaXplID0gMDsKK30KKworCit0eXBlZGVmIGludCAoKm9md19oYW5kbGVfdCkodm9pZCAqKTsKKworLyogRXZlcnl0aGluZyBiZWxvdyBpcyBjYWxsZWQgd2l0aCBhIHdyb25nIE1NVSBzZXR0aW5nLgorICogVGhpcyBtZWFuczogbm8gc3RyaW5nIGNvbnN0YW50cywgbm8gaW5pdGlhbGl6YXRpb24gb2YKKyAqIGFycmF5cywgbm8gZ2xvYmFsIHZhcmlhYmxlcyEgVGhpcyBpcyB1Z2x5IGJ1dCBJIGRpZG4ndAorICogd2FudCB0byB3cml0ZSB0aGlzIGluIGFzc2VtYmxlciA6LSkKKyAqLworCitpbnQKK29mX2RlY29kZV9pbnQoY29uc3QgdW5zaWduZWQgY2hhciAqcCkKK3sKKwl1bnNpZ25lZCBpbnQgaSA9ICpwKysgPDwgODsKKwlpID0gKGkgKyAqcCsrKSA8PCA4OworCWkgPSAoaSArICpwKyspIDw8IDg7CisJcmV0dXJuIChpICsgKnApOworfQorICAKK2ludAorT0ZfZmluZGRldmljZShvZndfaGFuZGxlX3Qgb3BlbmZpcm13YXJlLCBjaGFyICpuYW1lKQoreworCXVuc2lnbmVkIGludCBhcmdzWzhdOworCWNoYXIgc2VydmljZVsxMl07CisKKwlzZXJ2aWNlWzBdPSdmJzsKKwlzZXJ2aWNlWzFdPSdpJzsKKwlzZXJ2aWNlWzJdPSduJzsKKwlzZXJ2aWNlWzNdPSdkJzsKKwlzZXJ2aWNlWzRdPSdkJzsKKwlzZXJ2aWNlWzVdPSdlJzsKKwlzZXJ2aWNlWzZdPSd2JzsKKwlzZXJ2aWNlWzddPSdpJzsKKwlzZXJ2aWNlWzhdPSdjJzsKKwlzZXJ2aWNlWzldPSdlJzsKKwlzZXJ2aWNlWzEwXT0nXDAnOworCisJYXJnc1swXT0odW5zaWduZWQgaW50KXNlcnZpY2U7CisJYXJnc1sxXT0xOworCWFyZ3NbMl09MTsKKwlhcmdzWzNdPSh1bnNpZ25lZCBpbnQpbmFtZTsKKworCWlmIChvcGVuZmlybXdhcmUoYXJncykgPT0gLTEpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gYXJnc1s0XTsKK30KKworaW50CitPRl9nZXRwcm9wbGVuKG9md19oYW5kbGVfdCBvcGVuZmlybXdhcmUsIGludCBoYW5kbGUsIGNoYXIgKnByb3ApCit7CisJdW5zaWduZWQgaW50IGFyZ3NbOF07CisJY2hhciBzZXJ2aWNlWzEyXTsKKworCXNlcnZpY2VbMF09J2cnOworCXNlcnZpY2VbMV09J2UnOworCXNlcnZpY2VbMl09J3QnOworCXNlcnZpY2VbM109J3AnOworCXNlcnZpY2VbNF09J3InOworCXNlcnZpY2VbNV09J28nOworCXNlcnZpY2VbNl09J3AnOworCXNlcnZpY2VbN109J2wnOworCXNlcnZpY2VbOF09J2UnOworCXNlcnZpY2VbOV09J24nOworCXNlcnZpY2VbMTBdPSdcMCc7CisKKwlhcmdzWzBdID0gKHVuc2lnbmVkIGludClzZXJ2aWNlOworCWFyZ3NbMV0gPSAyOworCWFyZ3NbMl0gPSAxOworCWFyZ3NbM10gPSAodW5zaWduZWQgaW50KWhhbmRsZTsKKwlhcmdzWzRdID0gKHVuc2lnbmVkIGludClwcm9wOworCisJaWYgKG9wZW5maXJtd2FyZShhcmdzKSA9PSAtMSkKKwkJcmV0dXJuIC0xOworCXJldHVybiBhcmdzWzVdOworfQorICAKK2ludAorT0ZfZ2V0cHJvcChvZndfaGFuZGxlX3Qgb3BlbmZpcm13YXJlLCBpbnQgaGFuZGxlLCBjaGFyICpwcm9wLCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBidWZsZW4pCit7CisJdW5zaWduZWQgaW50IGFyZ3NbOF07CisJY2hhciBzZXJ2aWNlWzhdOworCisJc2VydmljZVswXT0nZyc7CisJc2VydmljZVsxXT0nZSc7CisJc2VydmljZVsyXT0ndCc7CisJc2VydmljZVszXT0ncCc7CisJc2VydmljZVs0XT0ncic7CisJc2VydmljZVs1XT0nbyc7CisJc2VydmljZVs2XT0ncCc7CisJc2VydmljZVs3XT0nXDAnOworCisJYXJnc1swXSA9ICh1bnNpZ25lZCBpbnQpc2VydmljZTsKKwlhcmdzWzFdID0gNDsKKwlhcmdzWzJdID0gMTsKKwlhcmdzWzNdID0gKHVuc2lnbmVkIGludCloYW5kbGU7CisJYXJnc1s0XSA9ICh1bnNpZ25lZCBpbnQpcHJvcDsKKwlhcmdzWzVdID0gKHVuc2lnbmVkIGludClidWY7CisJYXJnc1s2XSA9IGJ1ZmxlbjsKKworCWlmIChvcGVuZmlybXdhcmUoYXJncykgPT0gLTEpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gYXJnc1s3XTsKK30KKyAgCithc21saW5rYWdlIHZvaWQgb2Z3X2luaXQob2Z3X2hhbmRsZV90IG8sIGludCAqbm9tciwgaW50ICpwb2ludGVyKQoreworCWludCBwaGFuZGxlLGksbWVtX2xlbixidWZmZXJbMzJdOworCWNoYXIgdGVtcFsxNV07CisgIAorCXRlbXBbMF09Jy8nOworCXRlbXBbMV09J20nOworCXRlbXBbMl09J2UnOworCXRlbXBbM109J20nOworCXRlbXBbNF09J28nOworCXRlbXBbNV09J3InOworCXRlbXBbNl09J3knOworCXRlbXBbN109J1wwJzsKKworCXBoYW5kbGU9T0ZfZmluZGRldmljZShvLHRlbXApOworCisJdGVtcFswXT0ncic7CisJdGVtcFsxXT0nZSc7CisJdGVtcFsyXT0nZyc7CisJdGVtcFszXT0nXDAnOworCisJbWVtX2xlbiA9IE9GX2dldHByb3BsZW4obyxwaGFuZGxlLCB0ZW1wKTsKKwlPRl9nZXRwcm9wKG8scGhhbmRsZSwgdGVtcCwgYnVmZmVyLCBtZW1fbGVuKTsKKwkqbm9tcj1tZW1fbGVuID4+IDM7CisKKwlmb3IgKGk9MDsgaTw9bWVtX2xlbi80OyBpKyspIHBvaW50ZXJbaV09b2ZfZGVjb2RlX2ludCgoY29uc3QgdW5zaWduZWQgY2hhciAqKSZidWZmZXJbaV0pOworCisJdGVtcFswXT0nLyc7CisJdGVtcFsxXT0nYyc7CisJdGVtcFsyXT0naCc7CisJdGVtcFszXT0nbyc7CisJdGVtcFs0XT0ncyc7CisJdGVtcFs1XT0nZSc7CisJdGVtcFs2XT0nbic7CisJdGVtcFs3XT0nXDAnOworCisJcGhhbmRsZT1PRl9maW5kZGV2aWNlKG8sdGVtcCk7CisKKwl0ZW1wWzBdPSdiJzsKKwl0ZW1wWzFdPSdvJzsKKwl0ZW1wWzJdPSdvJzsKKwl0ZW1wWzNdPSd0JzsKKwl0ZW1wWzRdPSdhJzsKKwl0ZW1wWzVdPSdyJzsKKwl0ZW1wWzZdPSdnJzsKKwl0ZW1wWzddPSdzJzsKKwl0ZW1wWzhdPSdcMCc7CisKKwltZW1fbGVuID0gT0ZfZ2V0cHJvcGxlbihvLHBoYW5kbGUsIHRlbXApOworCU9GX2dldHByb3AobyxwaGFuZGxlLCB0ZW1wLCBidWZmZXIsIG1lbV9sZW4pOworCWlmIChtZW1fbGVuID4gMTI4KSBtZW1fbGVuPTEyODsKKwlmb3IgKGk9MDsgaTw9bWVtX2xlbi80OyBpKyspIHBvaW50ZXJbaSszM109YnVmZmVyW2ldOworCXBvaW50ZXJbaSszM109MDsKKworCXRlbXBbMF09Jy8nOworCXRlbXBbMV09J1wwJzsKKwlwaGFuZGxlPU9GX2ZpbmRkZXZpY2Uobyx0ZW1wKTsKKwl0ZW1wWzBdPSdiJzsKKwl0ZW1wWzFdPSdhJzsKKwl0ZW1wWzJdPSduJzsKKwl0ZW1wWzNdPSduJzsKKwl0ZW1wWzRdPSdlJzsKKwl0ZW1wWzVdPSdyJzsKKwl0ZW1wWzZdPSctJzsKKwl0ZW1wWzddPSduJzsKKwl0ZW1wWzhdPSdhJzsKKwl0ZW1wWzldPSdtJzsKKwl0ZW1wWzEwXT0nZSc7CisJdGVtcFsxMV09J1wwJzsKKwltZW1fbGVuID0gT0ZfZ2V0cHJvcGxlbihvLHBoYW5kbGUsIHRlbXApOworCU9GX2dldHByb3AobyxwaGFuZGxlLCB0ZW1wLCBidWZmZXIsIG1lbV9sZW4pOworCSh1bnNpZ25lZCBjaGFyKSBwb2ludGVyWzMyXSA9ICgodW5zaWduZWQgY2hhciAqKSBidWZmZXIpW21lbV9sZW4tMl07Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvcGlnZ3kuUyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9waWdneS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0Yzk1MTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvcGlnZ3kuUwpAQCAtMCwwICsxLDYgQEAKKwkuc2VjdGlvbiAucGlnZ3lkYXRhLCNhbGxvYworCS5nbG9ibAlpbnB1dF9kYXRhCitpbnB1dF9kYXRhOgorCS5pbmNiaW4JImFyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9waWdneS5neiIKKwkuZ2xvYmwJaW5wdXRfZGF0YV9lbmQKK2lucHV0X2RhdGFfZW5kOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZDYxNjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuaW4KQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuaW4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisgIC4gPSBURVhUX1NUQVJUOworICBfdGV4dCA9IC47CisKKyAgLnRleHQgOiB7CisgICAgX3N0YXJ0ID0gLjsKKyAgICAqKC5zdGFydCkKKyAgICAqKC50ZXh0KQorICAgICooLmZpeHVwKQorICAgICooLmdudS53YXJuaW5nKQorICAgICooLnJvZGF0YSkKKyAgICAqKC5yb2RhdGEuKikKKyAgICAqKC5nbHVlXzcpCisgICAgKiguZ2x1ZV83dCkKKyAgICAqKC5waWdneWRhdGEpCisgICAgLiA9IEFMSUdOKDQpOworICB9CisKKyAgX2V0ZXh0ID0gLjsKKworICBfZ290X3N0YXJ0ID0gLjsKKyAgLmdvdAkJCTogeyAqKC5nb3QpIH0KKyAgX2dvdF9lbmQgPSAuOworICAuZ290LnBsdAkJOiB7ICooLmdvdC5wbHQpIH0KKyAgLmRhdGEJCQk6IHsgKiguZGF0YSkgfQorICBfZWRhdGEgPSAuOworCisgIC4gPSBCU1NfU1RBUlQ7CisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgLmJzcwkJCTogeyAqKC5ic3MpIH0KKyAgX2VuZCA9IC47CisKKyAgLnN0YWNrIChOT0xPQUQpCTogeyAqKC5zdGFjaykgfQorCisgIC5zdGFiIDAJCTogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyIDAJCTogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgMAkJOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyIDAJOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAwCQk6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwCTogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50IDAJCTogeyAqKC5jb21tZW50KSB9Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvaW5zdGFsbC5zaCBiL2FyY2gvYXJtL2Jvb3QvaW5zdGFsbC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzViYjI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9pbnN0YWxsLnNoCkBAIC0wLDAgKzEsNTIgQEAKKyMhL2Jpbi9zaAorIworIyBhcmNoL2FybS9ib290L2luc3RhbGwuc2gKKyMKKyMgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUgYnkgTGludXMgVG9ydmFsZHMKKyMKKyMgQWRhcHRlZCBmcm9tIGNvZGUgaW4gYXJjaC9pMzg2L2Jvb3QvTWFrZWZpbGUgYnkgSC4gUGV0ZXIgQW52aW4KKyMgQWRhcHRlZCBmcm9tIGNvZGUgaW4gYXJjaC9pMzg2L2Jvb3QvaW5zdGFsbC5zaCBieSBSdXNzZWxsIEtpbmcKKyMKKyMgIm1ha2UgaW5zdGFsbCIgc2NyaXB0IGZvciBhcm0gYXJjaGl0ZWN0dXJlCisjCisjIEFyZ3VtZW50czoKKyMgICAkMSAtIGtlcm5lbCB2ZXJzaW9uCisjICAgJDIgLSBrZXJuZWwgaW1hZ2UgZmlsZQorIyAgICQzIC0ga2VybmVsIG1hcCBmaWxlCisjICAgJDQgLSBkZWZhdWx0IGluc3RhbGwgcGF0aCAoYmxhbmsgaWYgcm9vdCBkaXJlY3RvcnkpCisjCisKKyMgVXNlciBtYXkgaGF2ZSBhIGN1c3RvbSBpbnN0YWxsIHNjcmlwdAoraWYgWyAteCB+L2Jpbi9pbnN0YWxsa2VybmVsIF07IHRoZW4gZXhlYyB+L2Jpbi9pbnN0YWxsa2VybmVsICIkQCI7IGZpCitpZiBbIC14IC9zYmluL2luc3RhbGxrZXJuZWwgXTsgdGhlbiBleGVjIC9zYmluL2luc3RhbGxrZXJuZWwgIiRAIjsgZmkKKworaWYgWyAiJChiYXNlbmFtZSAkMikiID0gInpJbWFnZSIgXTsgdGhlbgorIyBDb21wcmVzc2VkIGluc3RhbGwKKyAgZWNobyAiSW5zdGFsbGluZyBjb21wcmVzc2VkIGtlcm5lbCIKKyAgYmFzZT12bWxpbnV6CitlbHNlCisjIE5vcm1hbCBpbnN0YWxsCisgIGVjaG8gIkluc3RhbGxpbmcgbm9ybWFsIGtlcm5lbCIKKyAgYmFzZT12bWxpbnV4CitmaQorCitpZiBbIC1mICQ0LyRiYXNlLSQxIF07IHRoZW4KKyAgbXYgJDQvJGJhc2UtJDEgJDQvJGJhc2UtJDEub2xkCitmaQorY2F0ICQyID4gJDQvJGJhc2UtJDEKKworIyBJbnN0YWxsIHN5c3RlbSBtYXAgZmlsZQoraWYgWyAtZiAkNC9TeXN0ZW0ubWFwLSQxIF07IHRoZW4KKyAgbXYgJDQvU3lzdGVtLm1hcC0kMSAkNC9TeXN0ZW0ubWFwLSQxLm9sZAorZmkKK2NwICQzICQ0L1N5c3RlbS5tYXAtJDEKKworaWYgWyAteCAvc2Jpbi9sb2FkbWFwIF07IHRoZW4KKyAgL3NiaW4vbG9hZG1hcAorZWxzZQorICBlY2hvICJZb3UgaGF2ZSB0byBpbnN0YWxsIGl0IHlvdXJzZWxmIgorZmkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9LY29uZmlnIGIvYXJjaC9hcm0vY29tbW9uL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkyYWY2YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9LY29uZmlnCkBAIC0wLDAgKzEsMjQgQEAKK2NvbmZpZyBJQ1NUNTI1CisJYm9vbAorCitjb25maWcgSUNTVDMwNworCWJvb2wKKworY29uZmlnIFNBMTExMQorCWJvb2wKKwlzZWxlY3QgRE1BQk9VTkNFCisKK2NvbmZpZyBETUFCT1VOQ0UKKwlib29sCisKK2NvbmZpZyBUSU1FUl9BQ09STgorCWJvb2wKKworY29uZmlnIFNIQVJQX0xPQ09NTworCWJvb2wKKworY29uZmlnIFNIQVJQX1BBUkFNCisJYm9vbAorCitjb25maWcgU0hBUlBfU0NPT1AKKwlib29sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vTWFrZWZpbGUgYi9hcmNoL2FybS9jb21tb24vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFmMjBhNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9NYWtlZmlsZQpAQCAtMCwwICsxLDE1IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgorIworCitvYmoteQkJCQkrPSBydGN0aW1lLm8KK29iai0kKENPTkZJR19BUk1fQU1CQSkJCSs9IGFtYmEubworb2JqLSQoQ09ORklHX0lDU1Q1MjUpCQkrPSBpY3N0NTI1Lm8KK29iai0kKENPTkZJR19JQ1NUMzA3KQkJKz0gaWNzdDMwNy5vCitvYmotJChDT05GSUdfU0ExMTExKQkJKz0gc2ExMTExLm8KK29iai0kKENPTkZJR19QQ0lfSE9TVF9WSUE4MkM1MDUpICs9IHZpYTgyYzUwNS5vCitvYmotJChDT05GSUdfRE1BQk9VTkNFKQkJKz0gZG1hYm91bmNlLm8KK29iai0kKENPTkZJR19USU1FUl9BQ09STikJKz0gdGltZS1hY29ybi5vCitvYmotJChDT05GSUdfU0hBUlBfTE9DT01PKQkrPSBsb2NvbW8ubworb2JqLSQoQ09ORklHX1NIQVJQX1BBUkFNKQkrPSBzaGFycHNsX3BhcmFtLm8KK29iai0kKENPTkZJR19TSEFSUF9TQ09PUCkJKz0gc2Nvb3AubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2FtYmEuYyBiL2FyY2gvYXJtL2NvbW1vbi9hbWJhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA1MDdmOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9hbWJhLmMKQEAgLTAsMCArMSwzNTcgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vY29tbW9uL2FtYmEuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvYW1iYS5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorCisjZGVmaW5lIHRvX2FtYmFfZGV2aWNlKGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgYW1iYV9kZXZpY2UsIGRldikKKyNkZWZpbmUgdG9fYW1iYV9kcml2ZXIoZCkJY29udGFpbmVyX29mKGQsIHN0cnVjdCBhbWJhX2RyaXZlciwgZHJ2KQorCitzdGF0aWMgc3RydWN0IGFtYmFfaWQgKgorYW1iYV9sb29rdXAoc3RydWN0IGFtYmFfaWQgKnRhYmxlLCBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0ID0gMDsKKworCXdoaWxlICh0YWJsZS0+bWFzaykgeworCQlyZXQgPSAoZGV2LT5wZXJpcGhpZCAmIHRhYmxlLT5tYXNrKSA9PSB0YWJsZS0+aWQ7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwkJdGFibGUrKzsKKwl9CisKKwlyZXR1cm4gcmV0ID8gdGFibGUgOiBOVUxMOworfQorCitzdGF0aWMgaW50IGFtYmFfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQoreworCXN0cnVjdCBhbWJhX2RldmljZSAqcGNkZXYgPSB0b19hbWJhX2RldmljZShkZXYpOworCXN0cnVjdCBhbWJhX2RyaXZlciAqcGNkcnYgPSB0b19hbWJhX2RyaXZlcihkcnYpOworCisJcmV0dXJuIGFtYmFfbG9va3VwKHBjZHJ2LT5pZF90YWJsZSwgcGNkZXYpICE9IE5VTEw7Cit9CisKKyNpZmRlZiBDT05GSUdfSE9UUExVRworc3RhdGljIGludCBhbWJhX2hvdHBsdWcoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICoqZW52cCwgaW50IG5yX2VudiwgY2hhciAqYnVmLCBpbnQgYnVmc3opCit7CisJc3RydWN0IGFtYmFfZGV2aWNlICpwY2RldiA9IHRvX2FtYmFfZGV2aWNlKGRldik7CisKKwlpZiAobnJfZW52IDwgMikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzbnByaW50ZihidWYsIGJ1ZnN6LCAiQU1CQV9JRD0lMDh4IiwgcGNkZXYtPnBlcmlwaGlkKTsKKwkqZW52cCsrID0gYnVmOworCSplbnZwKysgPSBOVUxMOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgYW1iYV9ob3RwbHVnIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgaW50IGFtYmFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgYW1iYV9kcml2ZXIgKmRydiA9IHRvX2FtYmFfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChkZXYtPmRyaXZlciAmJiBkcnYtPnN1c3BlbmQpCisJCXJldCA9IGRydi0+c3VzcGVuZCh0b19hbWJhX2RldmljZShkZXYpLCBzdGF0ZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhbWJhX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFtYmFfZHJpdmVyICpkcnYgPSB0b19hbWJhX2RyaXZlcihkZXYtPmRyaXZlcik7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZGV2LT5kcml2ZXIgJiYgZHJ2LT5yZXN1bWUpCisJCXJldCA9IGRydi0+cmVzdW1lKHRvX2FtYmFfZGV2aWNlKGRldikpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBQcmltZWNlbGxzIGFyZSBwYXJ0IG9mIHRoZSBBZHZhbmNlZCBNaWNyb2NvbnRyb2xsZXIgQnVzIEFyY2hpdGVjdHVyZSwKKyAqIHNvIHdlIGNhbGwgdGhlIGJ1cyAiYW1iYSIuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYnVzX3R5cGUgYW1iYV9idXN0eXBlID0geworCS5uYW1lCQk9ICJhbWJhIiwKKwkubWF0Y2gJCT0gYW1iYV9tYXRjaCwKKwkuaG90cGx1Zwk9IGFtYmFfaG90cGx1ZywKKwkuc3VzcGVuZAk9IGFtYmFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGFtYmFfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYW1iYV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGJ1c19yZWdpc3RlcigmYW1iYV9idXN0eXBlKTsKK30KKworcG9zdGNvcmVfaW5pdGNhbGwoYW1iYV9pbml0KTsKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgZGV2aWNlIG1vZGVsIGNvbnZlcnNpb24gdmVuZWVyczsgdGhleSBjb252ZXJ0IHRoZQorICogZGV2aWNlIG1vZGVsIHN0cnVjdHVyZXMgdG8gb3VyIG1vcmUgc3BlY2lmaWMgc3RydWN0dXJlcy4KKyAqLworc3RhdGljIGludCBhbWJhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYW1iYV9kZXZpY2UgKnBjZGV2ID0gdG9fYW1iYV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYW1iYV9kcml2ZXIgKnBjZHJ2ID0gdG9fYW1iYV9kcml2ZXIoZGV2LT5kcml2ZXIpOworCXN0cnVjdCBhbWJhX2lkICppZDsKKworCWlkID0gYW1iYV9sb29rdXAocGNkcnYtPmlkX3RhYmxlLCBwY2Rldik7CisKKwlyZXR1cm4gcGNkcnYtPnByb2JlKHBjZGV2LCBpZCk7Cit9CisKK3N0YXRpYyBpbnQgYW1iYV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBhbWJhX2RyaXZlciAqZHJ2ID0gdG9fYW1iYV9kcml2ZXIoZGV2LT5kcml2ZXIpOworCXJldHVybiBkcnYtPnJlbW92ZSh0b19hbWJhX2RldmljZShkZXYpKTsKK30KKworc3RhdGljIHZvaWQgYW1iYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFtYmFfZHJpdmVyICpkcnYgPSB0b19hbWJhX2RyaXZlcihkZXYtPmRyaXZlcik7CisJZHJ2LT5zaHV0ZG93bih0b19hbWJhX2RldmljZShkZXYpKTsKK30KKworLyoqCisgKglhbWJhX2RyaXZlcl9yZWdpc3RlciAtIHJlZ2lzdGVyIGFuIEFNQkEgZGV2aWNlIGRyaXZlcgorICoJQGRydjogYW1iYSBkZXZpY2UgZHJpdmVyIHN0cnVjdHVyZQorICoKKyAqCVJlZ2lzdGVyIGFuIEFNQkEgZGV2aWNlIGRyaXZlciB3aXRoIHRoZSBMaW51eCBkZXZpY2UgbW9kZWwKKyAqCWNvcmUuICBJZiBkZXZpY2VzIHByZS1leGlzdCwgdGhlIGRyaXZlcnMgcHJvYmUgZnVuY3Rpb24gd2lsbAorICoJYmUgY2FsbGVkLgorICovCitpbnQgYW1iYV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGFtYmFfZHJpdmVyICpkcnYpCit7CisJZHJ2LT5kcnYuYnVzID0gJmFtYmFfYnVzdHlwZTsKKworI2RlZmluZSBTRVRGTihmbikJaWYgKGRydi0+Zm4pIGRydi0+ZHJ2LmZuID0gYW1iYV8jI2ZuCisJU0VURk4ocHJvYmUpOworCVNFVEZOKHJlbW92ZSk7CisJU0VURk4oc2h1dGRvd24pOworCisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcnYpOworfQorCisvKioKKyAqCWFtYmFfZHJpdmVyX3VucmVnaXN0ZXIgLSByZW1vdmUgYW4gQU1CQSBkZXZpY2UgZHJpdmVyCisgKglAZHJ2OiBBTUJBIGRldmljZSBkcml2ZXIgc3RydWN0dXJlIHRvIHJlbW92ZQorICoKKyAqCVVucmVnaXN0ZXIgYW4gQU1CQSBkZXZpY2UgZHJpdmVyIGZyb20gdGhlIExpbnV4IGRldmljZQorICoJbW9kZWwuICBUaGUgZGV2aWNlIG1vZGVsIHdpbGwgY2FsbCB0aGUgZHJpdmVycyByZW1vdmUgZnVuY3Rpb24KKyAqCWZvciBlYWNoIGRldmljZSB0aGUgZGV2aWNlIGRyaXZlciBpcyBjdXJyZW50bHkgaGFuZGxpbmcuCisgKi8KK3ZvaWQgYW1iYV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgYW1iYV9kcml2ZXIgKmRydikKK3sKKwlkcml2ZXJfdW5yZWdpc3RlcigmZHJ2LT5kcnYpOworfQorCisKK3N0YXRpYyB2b2lkIGFtYmFfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBhbWJhX2RldmljZSAqZCA9IHRvX2FtYmFfZGV2aWNlKGRldik7CisKKwlpZiAoZC0+cmVzLnBhcmVudCkKKwkJcmVsZWFzZV9yZXNvdXJjZSgmZC0+cmVzKTsKKwlrZnJlZShkKTsKK30KKworI2RlZmluZSBhbWJhX2F0dHIobmFtZSxmbXQsYXJnLi4uKQkJCQlcCitzdGF0aWMgc3NpemVfdCBzaG93XyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpfZGV2LCBjaGFyICpidWYpCVwKK3sJCQkJCQkJCVwKKwlzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldiA9IHRvX2FtYmFfZGV2aWNlKF9kZXYpOwkJXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgZm10LCBhcmcpOwkJCQlcCit9CQkJCQkJCQlcCitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd18jI25hbWUsIE5VTEwpCisKK2FtYmFfYXR0cihpZCwgIiUwOHhcbiIsIGRldi0+cGVyaXBoaWQpOworYW1iYV9hdHRyKGlycTAsICIldVxuIiwgZGV2LT5pcnFbMF0pOworYW1iYV9hdHRyKGlycTEsICIldVxuIiwgZGV2LT5pcnFbMV0pOworYW1iYV9hdHRyKHJlc291cmNlLCAiXHQlMDhseFx0JTA4bHhcdCUwOGx4XG4iLAorCSAgZGV2LT5yZXMuc3RhcnQsIGRldi0+cmVzLmVuZCwgZGV2LT5yZXMuZmxhZ3MpOworCisvKioKKyAqCWFtYmFfZGV2aWNlX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYW4gQU1CQSBkZXZpY2UKKyAqCUBkZXY6IEFNQkEgZGV2aWNlIHRvIHJlZ2lzdGVyCisgKglAcGFyZW50OiBwYXJlbnQgbWVtb3J5IHJlc291cmNlCisgKgorICoJU2V0dXAgdGhlIEFNQkEgZGV2aWNlLCByZWFkaW5nIHRoZSBjZWxsIElEIGlmIHByZXNlbnQuCisgKglDbGFpbSB0aGUgcmVzb3VyY2UsIGFuZCByZWdpc3RlciB0aGUgQU1CQSBkZXZpY2Ugd2l0aAorICoJdGhlIExpbnV4IGRldmljZSBtYW5hZ2VyLgorICovCitpbnQgYW1iYV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcGFyZW50KQoreworCXUzMiBwaWQsIGNpZDsKKwl2b2lkIF9faW9tZW0gKnRtcDsKKwlpbnQgaSwgcmV0OworCisJZGV2LT5kZXYucmVsZWFzZSA9IGFtYmFfZGV2aWNlX3JlbGVhc2U7CisJZGV2LT5kZXYuYnVzID0gJmFtYmFfYnVzdHlwZTsKKwlkZXYtPmRldi5kbWFfbWFzayA9ICZkZXYtPmRtYV9tYXNrOworCWRldi0+cmVzLm5hbWUgPSBkZXYtPmRldi5idXNfaWQ7CisKKwlpZiAoIWRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrICYmIGRldi0+ZG1hX21hc2spCisJCWRldl93YXJuKCZkZXYtPmRldiwgImNvaGVyZW50IGRtYSBtYXNrIGlzIHVuc2V0XG4iKTsKKworCXJldCA9IHJlcXVlc3RfcmVzb3VyY2UocGFyZW50LCAmZGV2LT5yZXMpOworCWlmIChyZXQgPT0gMCkgeworCQl0bXAgPSBpb3JlbWFwKGRldi0+cmVzLnN0YXJ0LCBTWl80Syk7CisJCWlmICghdG1wKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKworCQlmb3IgKHBpZCA9IDAsIGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJcGlkIHw9IChyZWFkbCh0bXAgKyAweGZlMCArIDQgKiBpKSAmIDI1NSkgPDwgKGkgKiA4KTsKKwkJZm9yIChjaWQgPSAwLCBpID0gMDsgaSA8IDQ7IGkrKykKKwkJCWNpZCB8PSAocmVhZGwodG1wICsgMHhmZjAgKyA0ICogaSkgJiAyNTUpIDw8IChpICogOCk7CisKKwkJaW91bm1hcCh0bXApOworCisJCWlmIChjaWQgPT0gMHhiMTA1ZjAwZCkKKwkJCWRldi0+cGVyaXBoaWQgPSBwaWQ7CisKKwkJaWYgKGRldi0+cGVyaXBoaWQpCisJCQlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJmRldi0+ZGV2KTsKKwkJZWxzZQorCQkJcmV0ID0gLUVOT0RFVjsKKworCQlpZiAocmV0ID09IDApIHsKKwkJCWRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9pZCk7CisJCQlpZiAoZGV2LT5pcnFbMF0gIT0gTk9fSVJRKQorCQkJCWRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9pcnEwKTsKKwkJCWlmIChkZXYtPmlycVsxXSAhPSBOT19JUlEpCisJCQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2lycTEpOworCQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX3Jlc291cmNlKTsKKwkJfSBlbHNlIHsKKyBvdXQ6CisJCQlyZWxlYXNlX3Jlc291cmNlKCZkZXYtPnJlcyk7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKglhbWJhX2RldmljZV91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBhbiBBTUJBIGRldmljZQorICoJQGRldjogQU1CQSBkZXZpY2UgdG8gcmVtb3ZlCisgKgorICoJUmVtb3ZlIHRoZSBzcGVjaWZpZWQgQU1CQSBkZXZpY2UgZnJvbSB0aGUgTGludXggZGV2aWNlCisgKgltYW5hZ2VyLiAgQWxsIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9iamVjdCB3aWxsIGJlCisgKglkZXN0cm95ZWQsIGFuZCBkZXZpY2UgZHJpdmVycyBub3RpZmllZCB0aGF0IHRoZSBkZXZpY2UgaGFzCisgKgliZWVuIHJlbW92ZWQuICBUaGUgQU1CQSBkZXZpY2UncyByZXNvdXJjZXMgaW5jbHVkaW5nCisgKgl0aGUgYW1iYV9kZXZpY2Ugc3RydWN0dXJlIHdpbGwgYmUgZnJlZWQgb25jZSBhbGwKKyAqCXJlZmVyZW5jZXMgdG8gaXQgaGF2ZSBiZWVuIGRyb3BwZWQuCisgKi8KK3ZvaWQgYW1iYV9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldikKK3sKKwlkZXZpY2VfdW5yZWdpc3RlcigmZGV2LT5kZXYpOworfQorCisKK3N0cnVjdCBmaW5kX2RhdGEgeworCXN0cnVjdCBhbWJhX2RldmljZSAqZGV2OworCXN0cnVjdCBkZXZpY2UgKnBhcmVudDsKKwljb25zdCBjaGFyICpidXNpZDsKKwl1bnNpZ25lZCBpbnQgaWQ7CisJdW5zaWduZWQgaW50IG1hc2s7Cit9OworCitzdGF0aWMgaW50IGFtYmFfZmluZF9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGZpbmRfZGF0YSAqZCA9IGRhdGE7CisJc3RydWN0IGFtYmFfZGV2aWNlICpwY2RldiA9IHRvX2FtYmFfZGV2aWNlKGRldik7CisJaW50IHI7CisKKwlyID0gKHBjZGV2LT5wZXJpcGhpZCAmIGQtPm1hc2spID09IGQtPmlkOworCWlmIChkLT5wYXJlbnQpCisJCXIgJj0gZC0+cGFyZW50ID09IGRldi0+cGFyZW50OworCWlmIChkLT5idXNpZCkKKwkJciAmPSBzdHJjbXAoZGV2LT5idXNfaWQsIGQtPmJ1c2lkKSA9PSAwOworCisJaWYgKHIpIHsKKwkJZ2V0X2RldmljZShkZXYpOworCQlkLT5kZXYgPSBwY2RldjsKKwl9CisKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKglhbWJhX2ZpbmRfZGV2aWNlIC0gbG9jYXRlIGFuIEFNQkEgZGV2aWNlIGdpdmVuIGEgYnVzIGlkCisgKglAYnVzaWQ6IGJ1cyBpZCBmb3IgZGV2aWNlIChvciBOVUxMKQorICoJQHBhcmVudDogcGFyZW50IGRldmljZSAob3IgTlVMTCkKKyAqCUBpZDogcGVyaXBoZXJhbCBJRCAob3IgMCkKKyAqCUBtYXNrOiBwZXJpcGhlcmFsIElEIG1hc2sgKG9yIDApCisgKgorICoJUmV0dXJuIHRoZSBBTUJBIGRldmljZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzLgorICoJSWYgbm8gZGV2aWNlIG1hdGNoZXMsIHJldHVybnMgTlVMTC4KKyAqCisgKglOT1RFOiBXaGVuIGEgdmFsaWQgZGV2aWNlIGlzIGZvdW5kLCBpdHMgcmVmY291bnQgaXMKKyAqCWluY3JlbWVudGVkLCBhbmQgbXVzdCBiZSBkZWNyZW1lbnRlZCBiZWZvcmUgdGhlIHJldHVybmVkCisgKglyZWZlcmVuY2UuCisgKi8KK3N0cnVjdCBhbWJhX2RldmljZSAqCithbWJhX2ZpbmRfZGV2aWNlKGNvbnN0IGNoYXIgKmJ1c2lkLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHVuc2lnbmVkIGludCBpZCwKKwkJIHVuc2lnbmVkIGludCBtYXNrKQoreworCXN0cnVjdCBmaW5kX2RhdGEgZGF0YTsKKworCWRhdGEuZGV2ID0gTlVMTDsKKwlkYXRhLnBhcmVudCA9IHBhcmVudDsKKwlkYXRhLmJ1c2lkID0gYnVzaWQ7CisJZGF0YS5pZCA9IGlkOworCWRhdGEubWFzayA9IG1hc2s7CisKKwlidXNfZm9yX2VhY2hfZGV2KCZhbWJhX2J1c3R5cGUsIE5VTEwsICZkYXRhLCBhbWJhX2ZpbmRfbWF0Y2gpOworCisJcmV0dXJuIGRhdGEuZGV2OworfQorCisvKioKKyAqCWFtYmFfcmVxdWVzdF9yZWdpb25zIC0gcmVxdWVzdCBhbGwgbWVtIHJlZ2lvbnMgYXNzb2NpYXRlZCB3aXRoIGRldmljZQorICoJQGRldjogYW1iYV9kZXZpY2Ugc3RydWN0dXJlIGZvciBkZXZpY2UKKyAqCUBuYW1lOiBuYW1lLCBvciBOVUxMIHRvIHVzZSBkcml2ZXIgbmFtZQorICovCitpbnQgYW1iYV9yZXF1ZXN0X3JlZ2lvbnMoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIW5hbWUpCisJCW5hbWUgPSBkZXYtPmRldi5kcml2ZXItPm5hbWU7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihkZXYtPnJlcy5zdGFydCwgU1pfNEssIG5hbWUpKQorCQlyZXQgPSAtRUJVU1k7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqCWFtYmFfcmVsZWFzZV9yZWdpb25zIC0gcmVsZWFzZSBtZW0gcmVnaW9ucyBhc3NvaWNhdGVkIHdpdGggZGV2aWNlCisgKglAZGV2OiBhbWJhX2RldmljZSBzdHJ1Y3R1cmUgZm9yIGRldmljZQorICoKKyAqCVJlbGVhc2UgcmVnaW9ucyBjbGFpbWVkIGJ5IGEgc3VjY2Vzc2Z1bCBjYWxsIHRvIGFtYmFfcmVxdWVzdF9yZWdpb25zLgorICovCit2b2lkIGFtYmFfcmVsZWFzZV9yZWdpb25zKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2KQoreworCXJlbGVhc2VfbWVtX3JlZ2lvbihkZXYtPnJlcy5zdGFydCwgU1pfNEspOworfQorCitFWFBPUlRfU1lNQk9MKGFtYmFfZHJpdmVyX3JlZ2lzdGVyKTsKK0VYUE9SVF9TWU1CT0woYW1iYV9kcml2ZXJfdW5yZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MKGFtYmFfZGV2aWNlX3JlZ2lzdGVyKTsKK0VYUE9SVF9TWU1CT0woYW1iYV9kZXZpY2VfdW5yZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MKGFtYmFfZmluZF9kZXZpY2UpOworRVhQT1JUX1NZTUJPTChhbWJhX3JlcXVlc3RfcmVnaW9ucyk7CitFWFBPUlRfU1lNQk9MKGFtYmFfcmVsZWFzZV9yZWdpb25zKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYyBiL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Nzk3YjFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jCkBAIC0wLDAgKzEsNjgyIEBACisvKgorICogIGFyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYworICoKKyAqICBTcGVjaWFsIGRtYV97bWFwL3VubWFwL2RtYV9zeW5jfV8qIHJvdXRpbmVzIGZvciBzeXN0ZW1zIHRoYXQgaGF2ZQorICogIGxpbWl0ZWQgRE1BIHdpbmRvd3MuIFRoZXNlIGZ1bmN0aW9ucyB1dGlsaXplIGJvdW5jZSBidWZmZXJzIHRvCisgKiAgY29weSBkYXRhIHRvL2Zyb20gYnVmZmVycyBsb2NhdGVkIG91dHNpZGUgdGhlIERNQSByZWdpb24uIFRoaXMKKyAqICBvbmx5IHdvcmtzIGZvciBzeXN0ZW1zIGluIHdoaWNoIERNQSBtZW1vcnkgaXMgYXQgdGhlIGJvdHRvbSBvZgorICogIFJBTSBhbmQgdGhlIHJlbWFpbmRlciBvZiBtZW1vcnkgaXMgYXQgdGhlIHRvcCBhbiB0aGUgRE1BIG1lbW9yeQorICogIGNhbiBiZSBtYXJrZWQgYXMgWk9ORV9ETUEuIEFueXRoaW5nIGJleW9uZCB0aGF0IHN1Y2ggYXMgZGlzY29udGlnb3VzCisgKiAgRE1BIHdpbmRvd3Mgd2lsbCByZXF1aXJlIGN1c3RvbSBpbXBsZW1lbnRhdGlvbnMgdGhhdCByZXNlcnZlIG1lbW9yeQorICogIGFyZWFzIGF0IGVhcmx5IGJvb3R1cC4KKyAqCisgKiAgT3JpZ2luYWwgdmVyc2lvbiBieSBCcmFkIFBhcmtlciAoYnJhZEBoZWVsdG9lLmNvbSkKKyAqICBSZS13cml0dGVuIGJ5IENocmlzdG9waGVyIEhvb3ZlciA8Y2hAbXVyZ2F0cm9pZC5jb20+CisgKiAgTWFkZSBnZW5lcmljIGJ5IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+CisgKgorICogIENvcHlyaWdodCAoQykgMjAwMiBIZXdsZXR0IFBhY2thcmQgQ29tcGFueS4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjdW5kZWYgREVCVUcKKworI3VuZGVmIFNUQVRTCisjaWZkZWYgU1RBVFMKKyNkZWZpbmUgRE9fU1RBVFMoWCkgZG8geyBYIDsgfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIERPX1NUQVRTKFgpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCitzdHJ1Y3Qgc2FmZV9idWZmZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKworCS8qIG9yaWdpbmFsIHJlcXVlc3QgKi8KKwl2b2lkCQkqcHRyOworCXNpemVfdAkJc2l6ZTsKKwlpbnQJCWRpcmVjdGlvbjsKKworCS8qIHNhZmUgYnVmZmVyIGluZm8gKi8KKwlzdHJ1Y3QgZG1hX3Bvb2wgKnBvb2w7CisJdm9pZAkJKnNhZmU7CisJZG1hX2FkZHJfdAlzYWZlX2RtYV9hZGRyOworfTsKKworc3RydWN0IGRtYWJvdW5jZV9kZXZpY2VfaW5mbyB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBkbWFfcG9vbCAqc21hbGxfYnVmZmVyX3Bvb2w7CisJc3RydWN0IGRtYV9wb29sICpsYXJnZV9idWZmZXJfcG9vbDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNhZmVfYnVmZmVyczsKKwl1bnNpZ25lZCBsb25nIHNtYWxsX2J1ZmZlcl9zaXplLCBsYXJnZV9idWZmZXJfc2l6ZTsKKyNpZmRlZiBTVEFUUworCXVuc2lnbmVkIGxvbmcgc2JwX2FsbG9jczsKKwl1bnNpZ25lZCBsb25nIGxicF9hbGxvY3M7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9hbGxvY3M7CisJdW5zaWduZWQgbG9uZyBtYXBfb3BfY291bnQ7CisJdW5zaWduZWQgbG9uZyBib3VuY2VfY291bnQ7CisjZW5kaWYKK307CisKK3N0YXRpYyBMSVNUX0hFQUQoZG1hYm91bmNlX2RldnMpOworCisjaWZkZWYgU1RBVFMKK3N0YXRpYyB2b2lkIHByaW50X2FsbG9jX3N0YXRzKHN0cnVjdCBkbWFib3VuY2VfZGV2aWNlX2luZm8gKmRldmljZV9pbmZvKQoreworCXByaW50ayhLRVJOX0lORk8KKwkJIiVzOiBkbWFib3VuY2U6IHNicDogJWx1LCBsYnA6ICVsdSwgb3RoZXI6ICVsdSwgdG90YWw6ICVsdVxuIiwKKwkJZGV2aWNlX2luZm8tPmRldi0+YnVzX2lkLAorCQlkZXZpY2VfaW5mby0+c2JwX2FsbG9jcywgZGV2aWNlX2luZm8tPmxicF9hbGxvY3MsCisJCWRldmljZV9pbmZvLT50b3RhbF9hbGxvY3MgLSBkZXZpY2VfaW5mby0+c2JwX2FsbG9jcyAtCisJCQlkZXZpY2VfaW5mby0+bGJwX2FsbG9jcywKKwkJZGV2aWNlX2luZm8tPnRvdGFsX2FsbG9jcyk7Cit9CisjZW5kaWYKKworLyogZmluZCB0aGUgZ2l2ZW4gZGV2aWNlIGluIHRoZSBkbWFib3VuY2UgZGV2aWNlIGxpc3QgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRtYWJvdW5jZV9kZXZpY2VfaW5mbyAqCitmaW5kX2RtYWJvdW5jZV9kZXYoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OworCisJbGlzdF9mb3JfZWFjaChlbnRyeSwgJmRtYWJvdW5jZV9kZXZzKSB7CisJCXN0cnVjdCBkbWFib3VuY2VfZGV2aWNlX2luZm8gKmQgPQorCQkJbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IGRtYWJvdW5jZV9kZXZpY2VfaW5mbywgbm9kZSk7CisKKwkJaWYgKGQtPmRldiA9PSBkZXYpCisJCQlyZXR1cm4gZDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKworLyogYWxsb2NhdGUgYSAnc2FmZScgYnVmZmVyIGFuZCBrZWVwIHRyYWNrIG9mIGl0ICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzYWZlX2J1ZmZlciAqCithbGxvY19zYWZlX2J1ZmZlcihzdHJ1Y3QgZG1hYm91bmNlX2RldmljZV9pbmZvICpkZXZpY2VfaW5mbywgdm9pZCAqcHRyLAorCQkJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlzdHJ1Y3Qgc2FmZV9idWZmZXIgKmJ1ZjsKKwlzdHJ1Y3QgZG1hX3Bvb2wgKnBvb2w7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGV2aWNlX2luZm8tPmRldjsKKwl2b2lkICpzYWZlOworCWRtYV9hZGRyX3Qgc2FmZV9kbWFfYWRkcjsKKworCWRldl9kYmcoZGV2LCAiJXMocHRyPSVwLCBzaXplPSVkLCBkaXI9JWQpXG4iLAorCQlfX2Z1bmNfXywgcHRyLCBzaXplLCBkaXIpOworCisJRE9fU1RBVFMgKCBkZXZpY2VfaW5mby0+dG90YWxfYWxsb2NzKysgKTsKKworCWJ1ZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWZlX2J1ZmZlciksIEdGUF9BVE9NSUMpOworCWlmIChidWYgPT0gTlVMTCkgeworCQlkZXZfd2FybihkZXYsICIlczoga21hbGxvYyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKHNpemUgPD0gZGV2aWNlX2luZm8tPnNtYWxsX2J1ZmZlcl9zaXplKSB7CisJCXBvb2wgPSBkZXZpY2VfaW5mby0+c21hbGxfYnVmZmVyX3Bvb2w7CisJCXNhZmUgPSBkbWFfcG9vbF9hbGxvYyhwb29sLCBHRlBfQVRPTUlDLCAmc2FmZV9kbWFfYWRkcik7CisKKwkJRE9fU1RBVFMgKCBkZXZpY2VfaW5mby0+c2JwX2FsbG9jcysrICk7CisJfSBlbHNlIGlmIChzaXplIDw9IGRldmljZV9pbmZvLT5sYXJnZV9idWZmZXJfc2l6ZSkgeworCQlwb29sID0gZGV2aWNlX2luZm8tPmxhcmdlX2J1ZmZlcl9wb29sOworCQlzYWZlID0gZG1hX3Bvb2xfYWxsb2MocG9vbCwgR0ZQX0FUT01JQywgJnNhZmVfZG1hX2FkZHIpOworCisJCURPX1NUQVRTICggZGV2aWNlX2luZm8tPmxicF9hbGxvY3MrKyApOworCX0gZWxzZSB7CisJCXBvb2wgPSBOVUxMOworCQlzYWZlID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgJnNhZmVfZG1hX2FkZHIsIEdGUF9BVE9NSUMpOworCX0KKworCWlmIChzYWZlID09IE5VTEwpIHsKKwkJZGV2X3dhcm4oZGV2aWNlX2luZm8tPmRldiwKKwkJCSIlczogY291bGQgbm90IGFsbG9jIGRtYSBtZW1vcnkgKHNpemU9JWQpXG4iLAorCQkgICAgICAgX19mdW5jX18sIHNpemUpOworCQlrZnJlZShidWYpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKyNpZmRlZiBTVEFUUworCWlmIChkZXZpY2VfaW5mby0+dG90YWxfYWxsb2NzICUgMTAwMCA9PSAwKQorCQlwcmludF9hbGxvY19zdGF0cyhkZXZpY2VfaW5mbyk7CisjZW5kaWYKKworCWJ1Zi0+cHRyID0gcHRyOworCWJ1Zi0+c2l6ZSA9IHNpemU7CisJYnVmLT5kaXJlY3Rpb24gPSBkaXI7CisJYnVmLT5wb29sID0gcG9vbDsKKwlidWYtPnNhZmUgPSBzYWZlOworCWJ1Zi0+c2FmZV9kbWFfYWRkciA9IHNhZmVfZG1hX2FkZHI7CisKKwlsaXN0X2FkZCgmYnVmLT5ub2RlLCAmZGV2aWNlX2luZm8tPnNhZmVfYnVmZmVycyk7CisKKwlyZXR1cm4gYnVmOworfQorCisvKiBkZXRlcm1pbmUgaWYgYSBidWZmZXIgaXMgZnJvbSBvdXIgInNhZmUiIHBvb2wgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNhZmVfYnVmZmVyICoKK2ZpbmRfc2FmZV9idWZmZXIoc3RydWN0IGRtYWJvdW5jZV9kZXZpY2VfaW5mbyAqZGV2aWNlX2luZm8sIGRtYV9hZGRyX3Qgc2FmZV9kbWFfYWRkcikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKKworCWxpc3RfZm9yX2VhY2goZW50cnksICZkZXZpY2VfaW5mby0+c2FmZV9idWZmZXJzKSB7CisJCXN0cnVjdCBzYWZlX2J1ZmZlciAqYiA9CisJCQlsaXN0X2VudHJ5KGVudHJ5LCBzdHJ1Y3Qgc2FmZV9idWZmZXIsIG5vZGUpOworCisJCWlmIChiLT5zYWZlX2RtYV9hZGRyID09IHNhZmVfZG1hX2FkZHIpCisJCQlyZXR1cm4gYjsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitmcmVlX3NhZmVfYnVmZmVyKHN0cnVjdCBkbWFib3VuY2VfZGV2aWNlX2luZm8gKmRldmljZV9pbmZvLCBzdHJ1Y3Qgc2FmZV9idWZmZXIgKmJ1ZikKK3sKKwlkZXZfZGJnKGRldmljZV9pbmZvLT5kZXYsICIlcyhidWY9JXApXG4iLCBfX2Z1bmNfXywgYnVmKTsKKworCWxpc3RfZGVsKCZidWYtPm5vZGUpOworCisJaWYgKGJ1Zi0+cG9vbCkKKwkJZG1hX3Bvb2xfZnJlZShidWYtPnBvb2wsIGJ1Zi0+c2FmZSwgYnVmLT5zYWZlX2RtYV9hZGRyKTsKKwllbHNlCisJCWRtYV9mcmVlX2NvaGVyZW50KGRldmljZV9pbmZvLT5kZXYsIGJ1Zi0+c2l6ZSwgYnVmLT5zYWZlLAorCQkJCSAgICBidWYtPnNhZmVfZG1hX2FkZHIpOworCisJa2ZyZWUoYnVmKTsKK30KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworI2lmZGVmIFNUQVRTCisKK3N0YXRpYyB2b2lkIHByaW50X21hcF9zdGF0cyhzdHJ1Y3QgZG1hYm91bmNlX2RldmljZV9pbmZvICpkZXZpY2VfaW5mbykKK3sKKwlwcmludGsoS0VSTl9JTkZPCisJCSIlczogZG1hYm91bmNlOiBtYXBfb3BfY291bnQ9JWx1LCBib3VuY2VfY291bnQ9JWx1XG4iLAorCQlkZXZpY2VfaW5mby0+ZGV2LT5idXNfaWQsCisJCWRldmljZV9pbmZvLT5tYXBfb3BfY291bnQsIGRldmljZV9pbmZvLT5ib3VuY2VfY291bnQpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdAorbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlzdHJ1Y3QgZG1hYm91bmNlX2RldmljZV9pbmZvICpkZXZpY2VfaW5mbyA9IGZpbmRfZG1hYm91bmNlX2RldihkZXYpOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJaW50IG5lZWRzX2JvdW5jZSA9IDA7CisKKwlpZiAoZGV2aWNlX2luZm8pCisJCURPX1NUQVRTICggZGV2aWNlX2luZm8tPm1hcF9vcF9jb3VudCsrICk7CisKKwlkbWFfYWRkciA9IHZpcnRfdG9fZG1hKGRldiwgcHRyKTsKKworCWlmIChkZXYtPmRtYV9tYXNrKSB7CisJCXVuc2lnbmVkIGxvbmcgbWFzayA9ICpkZXYtPmRtYV9tYXNrOworCQl1bnNpZ25lZCBsb25nIGxpbWl0OworCisJCWxpbWl0ID0gKG1hc2sgKyAxKSAmIH5tYXNrOworCQlpZiAobGltaXQgJiYgc2l6ZSA+IGxpbWl0KSB7CisJCQlkZXZfZXJyKGRldiwgIkRNQSBtYXBwaW5nIHRvbyBiaWcgKHJlcXVlc3RlZCAlI3ggIgorCQkJCSJtYXNrICUjTHgpXG4iLCBzaXplLCAqZGV2LT5kbWFfbWFzayk7CisJCQlyZXR1cm4gfjA7CisJCX0KKworCQkvKgorCQkgKiBGaWd1cmUgb3V0IGlmIHdlIG5lZWQgdG8gYm91bmNlIGZyb20gdGhlIERNQSBtYXNrLgorCQkgKi8KKwkJbmVlZHNfYm91bmNlID0gKGRtYV9hZGRyIHwgKGRtYV9hZGRyICsgc2l6ZSAtIDEpKSAmIH5tYXNrOworCX0KKworCWlmIChkZXZpY2VfaW5mbyAmJiAobmVlZHNfYm91bmNlIHx8IGRtYV9uZWVkc19ib3VuY2UoZGV2LCBkbWFfYWRkciwgc2l6ZSkpKSB7CisJCXN0cnVjdCBzYWZlX2J1ZmZlciAqYnVmOworCisJCWJ1ZiA9IGFsbG9jX3NhZmVfYnVmZmVyKGRldmljZV9pbmZvLCBwdHIsIHNpemUsIGRpcik7CisJCWlmIChidWYgPT0gMCkgeworCQkJZGV2X2VycihkZXYsICIlczogdW5hYmxlIHRvIG1hcCB1bnNhZmUgYnVmZmVyICVwIVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgcHRyKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJZGV2X2RiZyhkZXYsCisJCQkiJXM6IHVuc2FmZSBidWZmZXIgJXAgKHBoeT0lcCkgbWFwcGVkIHRvICVwIChwaHk9JXApXG4iLAorCQkJX19mdW5jX18sIGJ1Zi0+cHRyLCAodm9pZCAqKSB2aXJ0X3RvX2RtYShkZXYsIGJ1Zi0+cHRyKSwKKwkJCWJ1Zi0+c2FmZSwgKHZvaWQgKikgYnVmLT5zYWZlX2RtYV9hZGRyKTsKKworCQlpZiAoKGRpciA9PSBETUFfVE9fREVWSUNFKSB8fAorCQkgICAgKGRpciA9PSBETUFfQklESVJFQ1RJT05BTCkpIHsKKwkJCWRldl9kYmcoZGV2LCAiJXM6IGNvcHkgdW5zYWZlICVwIHRvIHNhZmUgJXAsIHNpemUgJWRcbiIsCisJCQkJX19mdW5jX18sIHB0ciwgYnVmLT5zYWZlLCBzaXplKTsKKwkJCW1lbWNweShidWYtPnNhZmUsIHB0ciwgc2l6ZSk7CisJCX0KKwkJY29uc2lzdGVudF9zeW5jKGJ1Zi0+c2FmZSwgc2l6ZSwgZGlyKTsKKworCQlkbWFfYWRkciA9IGJ1Zi0+c2FmZV9kbWFfYWRkcjsKKwl9IGVsc2UgeworCQljb25zaXN0ZW50X3N5bmMocHRyLCBzaXplLCBkaXIpOworCX0KKworCXJldHVybiBkbWFfYWRkcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit1bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKKwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXN0cnVjdCBkbWFib3VuY2VfZGV2aWNlX2luZm8gKmRldmljZV9pbmZvID0gZmluZF9kbWFib3VuY2VfZGV2KGRldik7CisJc3RydWN0IHNhZmVfYnVmZmVyICpidWYgPSBOVUxMOworCisJLyoKKwkgKiBUcnlpbmcgdG8gdW5tYXAgYW4gaW52YWxpZCBtYXBwaW5nCisJICovCisJaWYgKGRtYV9hZGRyID09IH4wKSB7CisJCWRldl9lcnIoZGV2LCAiVHJ5aW5nIHRvIHVubWFwIGludmFsaWQgbWFwcGluZ1xuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZGV2aWNlX2luZm8pCisJCWJ1ZiA9IGZpbmRfc2FmZV9idWZmZXIoZGV2aWNlX2luZm8sIGRtYV9hZGRyKTsKKworCWlmIChidWYpIHsKKwkJQlVHX09OKGJ1Zi0+c2l6ZSAhPSBzaXplKTsKKworCQlkZXZfZGJnKGRldiwKKwkJCSIlczogdW5zYWZlIGJ1ZmZlciAlcCAocGh5PSVwKSBtYXBwZWQgdG8gJXAgKHBoeT0lcClcbiIsCisJCQlfX2Z1bmNfXywgYnVmLT5wdHIsICh2b2lkICopIHZpcnRfdG9fZG1hKGRldiwgYnVmLT5wdHIpLAorCQkJYnVmLT5zYWZlLCAodm9pZCAqKSBidWYtPnNhZmVfZG1hX2FkZHIpOworCisKKwkJRE9fU1RBVFMgKCBkZXZpY2VfaW5mby0+Ym91bmNlX2NvdW50KysgKTsKKworCQlpZiAoKGRpciA9PSBETUFfRlJPTV9ERVZJQ0UpIHx8CisJCSAgICAoZGlyID09IERNQV9CSURJUkVDVElPTkFMKSkgeworCQkJZGV2X2RiZyhkZXYsCisJCQkJIiVzOiBjb3B5IGJhY2sgc2FmZSAlcCB0byB1bnNhZmUgJXAgc2l6ZSAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgYnVmLT5zYWZlLCBidWYtPnB0ciwgc2l6ZSk7CisJCQltZW1jcHkoYnVmLT5wdHIsIGJ1Zi0+c2FmZSwgc2l6ZSk7CisJCX0KKwkJZnJlZV9zYWZlX2J1ZmZlcihkZXZpY2VfaW5mbywgYnVmKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc3luY19zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKKwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXN0cnVjdCBkbWFib3VuY2VfZGV2aWNlX2luZm8gKmRldmljZV9pbmZvID0gZmluZF9kbWFib3VuY2VfZGV2KGRldik7CisJc3RydWN0IHNhZmVfYnVmZmVyICpidWYgPSBOVUxMOworCisJaWYgKGRldmljZV9pbmZvKQorCQlidWYgPSBmaW5kX3NhZmVfYnVmZmVyKGRldmljZV9pbmZvLCBkbWFfYWRkcik7CisKKwlpZiAoYnVmKSB7CisJCS8qCisJCSAqIEJvdGggb2YgdGhlc2UgY2hlY2tzIGZyb20gb3JpZ2luYWwgY29kZSBuZWVkIHRvIGJlCisJCSAqIGNvbW1lbnRlZCBvdXQgYi9jIHNvbWUgZHJpdmVycyByZWx5IG9uIHRoZSBmb2xsb3dpbmc6CisJCSAqCisJCSAqIDEpIERyaXZlcnMgbWF5IG1hcCBhIGxhcmdlIGNodW5rIG9mIG1lbW9yeSBpbnRvIERNQSBzcGFjZQorCQkgKiAgICBidXQgb25seSBzeW5jIGEgc21hbGwgcG9ydGlvbiBvZiBpdC4gR29vZCBleGFtcGxlIGlzCisJCSAqICAgIGFsbG9jYXRpbmcgYSBsYXJnZSBidWZmZXIsIG1hcHBpbmcgaXQsIGFuZCB0aGVuCisJCSAqICAgIGJyZWFraW5nIGl0IHVwIGludG8gc21hbGwgZGVzY3JpcHRvcnMuIE5vIHBvaW50CisJCSAqICAgIGluIHN5bmNpbmcgdGhlIHdob2xlIGJ1ZmZlciBpZiB5b3Ugb25seSBoYXZlIHRvCisJCSAqICAgIHRvdWNoIG9uZSBkZXNjcmlwdG9yLgorCQkgKgorCQkgKiAyKSBCdWZmZXJzIHRoYXQgYXJlIG1hcHBlZCBhcyBETUFfQklESVJFQ1RJT05BTCBhcmUKKwkJICogICAgdXN1YWxseSBvbmx5IHN5bmNlZCBpbiBvbmUgZGlyIGF0IGEgdGltZS4KKwkJICoKKwkJICogU2VlIGRyaXZlcnMvbmV0L2VlcHJvMTAwLmMgZm9yIGV4YW1wbGVzIG9mIGJvdGggY2FzZXMuCisJCSAqCisJCSAqIC1kcworCQkgKgorCQkgKiBCVUdfT04oYnVmLT5zaXplICE9IHNpemUpOworCQkgKiBCVUdfT04oYnVmLT5kaXJlY3Rpb24gIT0gZGlyKTsKKwkJICovCisKKwkJZGV2X2RiZyhkZXYsCisJCQkiJXM6IHVuc2FmZSBidWZmZXIgJXAgKHBoeT0lcCkgbWFwcGVkIHRvICVwIChwaHk9JXApXG4iLAorCQkJX19mdW5jX18sIGJ1Zi0+cHRyLCAodm9pZCAqKSB2aXJ0X3RvX2RtYShkZXYsIGJ1Zi0+cHRyKSwKKwkJCWJ1Zi0+c2FmZSwgKHZvaWQgKikgYnVmLT5zYWZlX2RtYV9hZGRyKTsKKworCQlET19TVEFUUyAoIGRldmljZV9pbmZvLT5ib3VuY2VfY291bnQrKyApOworCisJCXN3aXRjaCAoZGlyKSB7CisJCWNhc2UgRE1BX0ZST01fREVWSUNFOgorCQkJZGV2X2RiZyhkZXYsCisJCQkJIiVzOiBjb3B5IGJhY2sgc2FmZSAlcCB0byB1bnNhZmUgJXAgc2l6ZSAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgYnVmLT5zYWZlLCBidWYtPnB0ciwgc2l6ZSk7CisJCQltZW1jcHkoYnVmLT5wdHIsIGJ1Zi0+c2FmZSwgc2l6ZSk7CisJCQlicmVhazsKKwkJY2FzZSBETUFfVE9fREVWSUNFOgorCQkJZGV2X2RiZyhkZXYsCisJCQkJIiVzOiBjb3B5IG91dCB1bnNhZmUgJXAgdG8gc2FmZSAlcCwgc2l6ZSAlZFxuIiwKKwkJCQlfX2Z1bmNfXyxidWYtPnB0ciwgYnVmLT5zYWZlLCBzaXplKTsKKwkJCW1lbWNweShidWYtPnNhZmUsIGJ1Zi0+cHRyLCBzaXplKTsKKwkJCWJyZWFrOworCQljYXNlIERNQV9CSURJUkVDVElPTkFMOgorCQkJQlVHKCk7CS8qIGlzIHRoaXMgYWxsb3dlZD8gIHdoYXQgZG9lcyBpdCBtZWFuPyAqLworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCX0KKwkJY29uc2lzdGVudF9zeW5jKGJ1Zi0+c2FmZSwgc2l6ZSwgZGlyKTsKKwl9IGVsc2UgeworCQljb25zaXN0ZW50X3N5bmMoZG1hX3RvX3ZpcnQoZGV2LCBkbWFfYWRkciksIHNpemUsIGRpcik7CisJfQorfQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvKgorICogc2VlIGlmIGEgYnVmZmVyIGFkZHJlc3MgaXMgaW4gYW4gJ3Vuc2FmZScgcmFuZ2UuICBpZiBpdCBpcworICogYWxsb2NhdGUgYSAnc2FmZScgYnVmZmVyIGFuZCBjb3B5IHRoZSB1bnNhZmUgYnVmZmVyIGludG8gaXQuCisgKiBzdWJzdGl0dXRlIHRoZSBzYWZlIGJ1ZmZlciBmb3IgdGhlIHVuc2FmZSBvbmUuCisgKiAoYmFzaWNhbGx5IG1vdmUgdGhlIGJ1ZmZlciBmcm9tIGFuIHVuc2FmZSBhcmVhIHRvIGEgc2FmZSBvbmUpCisgKi8KK2RtYV9hZGRyX3QKK2RtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKKwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKworCWRldl9kYmcoZGV2LCAiJXMocHRyPSVwLHNpemU9JWQsZGlyPSV4KVxuIiwKKwkJX19mdW5jX18sIHB0ciwgc2l6ZSwgZGlyKTsKKworCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJZG1hX2FkZHIgPSBtYXBfc2luZ2xlKGRldiwgcHRyLCBzaXplLCBkaXIpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIGRtYV9hZGRyOworfQorCisvKgorICogc2VlIGlmIGEgbWFwcGVkIGFkZHJlc3Mgd2FzIHJlYWxseSBhICJzYWZlIiBidWZmZXIgYW5kIGlmIHNvLCBjb3B5CisgKiB0aGUgZGF0YSBmcm9tIHRoZSBzYWZlIGJ1ZmZlciBiYWNrIHRvIHRoZSB1bnNhZmUgYnVmZmVyIGFuZCBmcmVlIHVwCisgKiB0aGUgc2FmZSBidWZmZXIuICAoYmFzaWNhbGx5IHJldHVybiB0aGluZ3MgYmFjayB0byB0aGUgd2F5IHRoZXkKKyAqIHNob3VsZCBiZSkKKyAqLworCit2b2lkCitkbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUsCisJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRldl9kYmcoZGV2LCAiJXMocHRyPSVwLHNpemU9JWQsZGlyPSV4KVxuIiwKKwkJX19mdW5jX18sICh2b2lkICopIGRtYV9hZGRyLCBzaXplLCBkaXIpOworCisJQlVHX09OKGRpciA9PSBETUFfTk9ORSk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwl1bm1hcF9zaW5nbGUoZGV2LCBkbWFfYWRkciwgc2l6ZSwgZGlyKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworaW50CitkbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKworCWRldl9kYmcoZGV2LCAiJXMoc2c9JXAsbmVudHM9JWQsZGlyPSV4KVxuIiwKKwkJX19mdW5jX18sIHNnLCBuZW50cywgZGlyKTsKKworCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJZm9yIChpID0gMDsgaSA8IG5lbnRzOyBpKyssIHNnKyspIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBzZy0+cGFnZTsKKwkJdW5zaWduZWQgaW50IG9mZnNldCA9IHNnLT5vZmZzZXQ7CisJCXVuc2lnbmVkIGludCBsZW5ndGggPSBzZy0+bGVuZ3RoOworCQl2b2lkICpwdHIgPSBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQ7CisKKwkJc2ctPmRtYV9hZGRyZXNzID0KKwkJCW1hcF9zaW5nbGUoZGV2LCBwdHIsIGxlbmd0aCwgZGlyKTsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gbmVudHM7Cit9CisKK3ZvaWQKK2RtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisKKwlkZXZfZGJnKGRldiwgIiVzKHNnPSVwLG5lbnRzPSVkLGRpcj0leClcbiIsCisJCV9fZnVuY19fLCBzZywgbmVudHMsIGRpcik7CisKKwlCVUdfT04oZGlyID09IERNQV9OT05FKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBuZW50czsgaSsrLCBzZysrKSB7CisJCWRtYV9hZGRyX3QgZG1hX2FkZHIgPSBzZy0+ZG1hX2FkZHJlc3M7CisJCXVuc2lnbmVkIGludCBsZW5ndGggPSBzZy0+bGVuZ3RoOworCisJCXVubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBsZW5ndGgsIGRpcik7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCit2b2lkCitkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLAorCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGV2X2RiZyhkZXYsICIlcyhwdHI9JXAsc2l6ZT0lZCxkaXI9JXgpXG4iLAorCQlfX2Z1bmNfXywgKHZvaWQgKikgZG1hX2FkZHIsIHNpemUsIGRpcik7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzeW5jX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBzaXplLCBkaXIpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCit2b2lkCitkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLAorCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGV2X2RiZyhkZXYsICIlcyhwdHI9JXAsc2l6ZT0lZCxkaXI9JXgpXG4iLAorCQlfX2Z1bmNfXywgKHZvaWQgKikgZG1hX2FkZHIsIHNpemUsIGRpcik7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzeW5jX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBzaXplLCBkaXIpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCit2b2lkCitkbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAorCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisKKwlkZXZfZGJnKGRldiwgIiVzKHNnPSVwLG5lbnRzPSVkLGRpcj0leClcbiIsCisJCV9fZnVuY19fLCBzZywgbmVudHMsIGRpcik7CisKKwlCVUdfT04oZGlyID09IERNQV9OT05FKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBuZW50czsgaSsrLCBzZysrKSB7CisJCWRtYV9hZGRyX3QgZG1hX2FkZHIgPSBzZy0+ZG1hX2FkZHJlc3M7CisJCXVuc2lnbmVkIGludCBsZW5ndGggPSBzZy0+bGVuZ3RoOworCisJCXN5bmNfc2luZ2xlKGRldiwgZG1hX2FkZHIsIGxlbmd0aCwgZGlyKTsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3ZvaWQKK2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKworCWRldl9kYmcoZGV2LCAiJXMoc2c9JXAsbmVudHM9JWQsZGlyPSV4KVxuIiwKKwkJX19mdW5jX18sIHNnLCBuZW50cywgZGlyKTsKKworCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJZm9yIChpID0gMDsgaSA8IG5lbnRzOyBpKyssIHNnKyspIHsKKwkJZG1hX2FkZHJfdCBkbWFfYWRkciA9IHNnLT5kbWFfYWRkcmVzczsKKwkJdW5zaWduZWQgaW50IGxlbmd0aCA9IHNnLT5sZW5ndGg7CisKKwkJc3luY19zaW5nbGUoZGV2LCBkbWFfYWRkciwgbGVuZ3RoLCBkaXIpOworCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworaW50CitkbWFib3VuY2VfcmVnaXN0ZXJfZGV2KHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBzbWFsbF9idWZmZXJfc2l6ZSwKKwkJCXVuc2lnbmVkIGxvbmcgbGFyZ2VfYnVmZmVyX3NpemUpCit7CisJc3RydWN0IGRtYWJvdW5jZV9kZXZpY2VfaW5mbyAqZGV2aWNlX2luZm87CisKKwlkZXZpY2VfaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkbWFib3VuY2VfZGV2aWNlX2luZm8pLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWRldmljZV9pbmZvKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIkNvdWxkIG5vdCBhbGxvY2F0ZWQgZG1hYm91bmNlX2RldmljZV9pbmZvIGZvciAlcyIsCisJCQlkZXYtPmJ1c19pZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRldmljZV9pbmZvLT5zbWFsbF9idWZmZXJfcG9vbCA9CisJCWRtYV9wb29sX2NyZWF0ZSgic21hbGxfZG1hYm91bmNlX3Bvb2wiLAorCQkJCWRldiwKKwkJCQlzbWFsbF9idWZmZXJfc2l6ZSwKKwkJCQkwIC8qIGJ5dGUgYWxpZ25tZW50ICovLAorCQkJCTAgLyogbm8gcGFnZS1jcm9zc2luZyBpc3N1ZXMgKi8pOworCWlmICghZGV2aWNlX2luZm8tPnNtYWxsX2J1ZmZlcl9wb29sKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImRtYWJvdW5jZTogY291bGQgbm90IGFsbG9jYXRlIHNtYWxsIERNQSBwb29sIGZvciAlc1xuIiwKKwkJCWRldi0+YnVzX2lkKTsKKwkJa2ZyZWUoZGV2aWNlX2luZm8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAobGFyZ2VfYnVmZmVyX3NpemUpIHsKKwkJZGV2aWNlX2luZm8tPmxhcmdlX2J1ZmZlcl9wb29sID0KKwkJCWRtYV9wb29sX2NyZWF0ZSgibGFyZ2VfZG1hYm91bmNlX3Bvb2wiLAorCQkJCQlkZXYsCisJCQkJCWxhcmdlX2J1ZmZlcl9zaXplLAorCQkJCQkwIC8qIGJ5dGUgYWxpZ25tZW50ICovLAorCQkJCQkwIC8qIG5vIHBhZ2UtY3Jvc3NpbmcgaXNzdWVzICovKTsKKwkJaWYgKCFkZXZpY2VfaW5mby0+bGFyZ2VfYnVmZmVyX3Bvb2wpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiZG1hYm91bmNlOiBjb3VsZCBub3QgYWxsb2NhdGUgbGFyZ2UgRE1BIHBvb2wgZm9yICVzXG4iLAorCQkJZGV2LT5idXNfaWQpOworCQkJZG1hX3Bvb2xfZGVzdHJveShkZXZpY2VfaW5mby0+c21hbGxfYnVmZmVyX3Bvb2wpOworCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKworCWRldmljZV9pbmZvLT5kZXYgPSBkZXY7CisJZGV2aWNlX2luZm8tPnNtYWxsX2J1ZmZlcl9zaXplID0gc21hbGxfYnVmZmVyX3NpemU7CisJZGV2aWNlX2luZm8tPmxhcmdlX2J1ZmZlcl9zaXplID0gbGFyZ2VfYnVmZmVyX3NpemU7CisJSU5JVF9MSVNUX0hFQUQoJmRldmljZV9pbmZvLT5zYWZlX2J1ZmZlcnMpOworCisjaWZkZWYgU1RBVFMKKwlkZXZpY2VfaW5mby0+c2JwX2FsbG9jcyA9IDA7CisJZGV2aWNlX2luZm8tPmxicF9hbGxvY3MgPSAwOworCWRldmljZV9pbmZvLT50b3RhbF9hbGxvY3MgPSAwOworCWRldmljZV9pbmZvLT5tYXBfb3BfY291bnQgPSAwOworCWRldmljZV9pbmZvLT5ib3VuY2VfY291bnQgPSAwOworI2VuZGlmCisKKwlsaXN0X2FkZCgmZGV2aWNlX2luZm8tPm5vZGUsICZkbWFib3VuY2VfZGV2cyk7CisKKwlwcmludGsoS0VSTl9JTkZPICJkbWFib3VuY2U6IHJlZ2lzdGVyZWQgZGV2aWNlICVzIG9uICVzIGJ1c1xuIiwKKwkJZGV2LT5idXNfaWQsIGRldi0+YnVzLT5uYW1lKTsKKworCXJldHVybiAwOworfQorCit2b2lkCitkbWFib3VuY2VfdW5yZWdpc3Rlcl9kZXYoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkbWFib3VuY2VfZGV2aWNlX2luZm8gKmRldmljZV9pbmZvID0gZmluZF9kbWFib3VuY2VfZGV2KGRldik7CisKKwlpZiAoIWRldmljZV9pbmZvKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSIlczogTmV2ZXIgcmVnaXN0ZXJlZCB3aXRoIGRtYWJvdW5jZSBidXQgYXR0ZW1wdGluZyIgXAorCQkJInRvIHVucmVnaXN0ZXIhXG4iLCBkZXYtPmJ1c19pZCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWxpc3RfZW1wdHkoJmRldmljZV9pbmZvLT5zYWZlX2J1ZmZlcnMpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIiVzOiBSZW1vdmluZyBmcm9tIGRtYWJvdW5jZSB3aXRoIHBlbmRpbmcgYnVmZmVycyFcbiIsCisJCQlkZXYtPmJ1c19pZCk7CisJCUJVRygpOworCX0KKworCWlmIChkZXZpY2VfaW5mby0+c21hbGxfYnVmZmVyX3Bvb2wpCisJCWRtYV9wb29sX2Rlc3Ryb3koZGV2aWNlX2luZm8tPnNtYWxsX2J1ZmZlcl9wb29sKTsKKwlpZiAoZGV2aWNlX2luZm8tPmxhcmdlX2J1ZmZlcl9wb29sKQorCQlkbWFfcG9vbF9kZXN0cm95KGRldmljZV9pbmZvLT5sYXJnZV9idWZmZXJfcG9vbCk7CisKKyNpZmRlZiBTVEFUUworCXByaW50X2FsbG9jX3N0YXRzKGRldmljZV9pbmZvKTsKKwlwcmludF9tYXBfc3RhdHMoZGV2aWNlX2luZm8pOworI2VuZGlmCisKKwlsaXN0X2RlbCgmZGV2aWNlX2luZm8tPm5vZGUpOworCisJa2ZyZWUoZGV2aWNlX2luZm8pOworCisJcHJpbnRrKEtFUk5fSU5GTyAiZG1hYm91bmNlOiBkZXZpY2UgJXMgb24gJXMgYnVzIHVucmVnaXN0ZXJlZFxuIiwKKwkJZGV2LT5idXNfaWQsIGRldi0+YnVzLT5uYW1lKTsKK30KKworCitFWFBPUlRfU1lNQk9MKGRtYV9tYXBfc2luZ2xlKTsKK0VYUE9SVF9TWU1CT0woZG1hX3VubWFwX3NpbmdsZSk7CitFWFBPUlRfU1lNQk9MKGRtYV9tYXBfc2cpOworRVhQT1JUX1NZTUJPTChkbWFfdW5tYXBfc2cpOworRVhQT1JUX1NZTUJPTChkbWFfc3luY19zaW5nbGUpOworRVhQT1JUX1NZTUJPTChkbWFfc3luY19zZyk7CitFWFBPUlRfU1lNQk9MKGRtYWJvdW5jZV9yZWdpc3Rlcl9kZXYpOworRVhQT1JUX1NZTUJPTChkbWFib3VuY2VfdW5yZWdpc3Rlcl9kZXYpOworCitNT0RVTEVfQVVUSE9SKCJDaHJpc3RvcGhlciBIb292ZXIgPGNoQGhwbC5ocC5jb20+LCBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTcGVjaWFsIGRtYV97bWFwL3VubWFwL2RtYV9zeW5jfV8qIHJvdXRpbmVzIGZvciBzeXN0ZW1zIHdpdGggbGltaXRlZCBETUEgd2luZG93cyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2ljc3QzMDcuYyBiL2FyY2gvYXJtL2NvbW1vbi9pY3N0MzA3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFmZThiMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9pY3N0MzA3LmMKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vY29tbW9uL2ljc3QzMDcuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgRGVlcCBCbHVlIFNvbHV0aW9ucywgTHRkLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFN1cHBvcnQgZnVuY3Rpb25zIGZvciBjYWxjdWxhdGluZyBjbG9ja3MvZGl2aXNvcnMgZm9yIHRoZSBJQ1NUMzA3CisgKiAgY2xvY2sgZ2VuZXJhdG9ycy4gIFNlZSBodHRwOi8vd3d3Lmljc3QuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICogIG9uIHRoZXNlIGRldmljZXMuCisgKgorICogIFRoaXMgaXMgYW4gYWxtb3N0IGlkZW50aWNhbCBpbXBsZW1lbnRhdGlvbiB0byB0aGUgSUNTVDUyNSBjbG9jayBnZW5lcmF0b3IuCisgKiAgVGhlIHMyZGl2IGFuZCBpZHgycyBmaWxlcyBhcmUgZGlmZmVyZW50CisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pY3N0MzA3Lmg+CisKKy8qCisgKiBEaXZpc29ycyBmb3IgZWFjaCBPRCBzZXR0aW5nLgorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBzMmRpdls4XSA9IHsgMTAsIDIsIDgsIDQsIDUsIDcsIDMsIDYgfTsKKwordW5zaWduZWQgbG9uZyBpY3N0MzA3X2toeihjb25zdCBzdHJ1Y3QgaWNzdDMwN19wYXJhbXMgKnAsIHN0cnVjdCBpY3N0MzA3X3ZjbyB2Y28pCit7CisJcmV0dXJuIHAtPnJlZiAqIDIgKiAodmNvLnYgKyA4KSAvICgodmNvLnIgKyAyKSAqIHMyZGl2W3Zjby5zXSk7Cit9CisKK0VYUE9SVF9TWU1CT0woaWNzdDMwN19raHopOworCisvKgorICogQXNjZW5kaW5nIGRpdmlzb3IgUyB2YWx1ZXMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGlkeDJzWzhdID0geyAxLCA2LCAzLCA0LCA3LCA1LCAyLCAwIH07CisKK3N0cnVjdCBpY3N0MzA3X3ZjbworaWNzdDMwN19raHpfdG9fdmNvKGNvbnN0IHN0cnVjdCBpY3N0MzA3X3BhcmFtcyAqcCwgdW5zaWduZWQgbG9uZyBmcmVxKQoreworCXN0cnVjdCBpY3N0MzA3X3ZjbyB2Y28gPSB7IC5zID0gMSwgLnYgPSBwLT52ZF9tYXgsIC5yID0gcC0+cmRfbWF4IH07CisJdW5zaWduZWQgbG9uZyBmOworCXVuc2lnbmVkIGludCBpID0gMCwgcmQsIGJlc3QgPSAodW5zaWduZWQgaW50KS0xOworCisJLyoKKwkgKiBGaXJzdCwgZmluZCB0aGUgUExMIG91dHB1dCBkaXZpc29yIHN1Y2gKKwkgKiB0aGF0IHRoZSBQTEwgb3V0cHV0IGlzIHdpdGhpbiBzcGVjLgorCSAqLworCWRvIHsKKwkJZiA9IGZyZXEgKiBzMmRpdltpZHgyc1tpXV07CisKKwkJLyoKKwkJICogZiBtdXN0IGJlIGJldHdlZW4gNk1IeiBhbmQgMjAwTUh6ICgzLjMgb3IgNVYpCisJCSAqLworCQlpZiAoZiA+IDYwMDAgJiYgZiA8PSBwLT52Y29fbWF4KQorCQkJYnJlYWs7CisJfSB3aGlsZSAoaSA8IEFSUkFZX1NJWkUoaWR4MnMpKTsKKworCWlmIChpID4gQVJSQVlfU0laRShpZHgycykpCisJCXJldHVybiB2Y287CisKKwl2Y28ucyA9IGlkeDJzW2ldOworCisJLyoKKwkgKiBOb3cgZmluZCB0aGUgY2xvc2VzdCBkaXZpc29yIGNvbWJpbmF0aW9uCisJICogd2hpY2ggZ2l2ZXMgYSBQTEwgb3V0cHV0IG9mICdmJy4KKwkgKi8KKwlmb3IgKHJkID0gcC0+cmRfbWluOyByZCA8PSBwLT5yZF9tYXg7IHJkKyspIHsKKwkJdW5zaWduZWQgbG9uZyBmcmVmX2RpdiwgZl9wbGw7CisJCXVuc2lnbmVkIGludCB2ZDsKKwkJaW50IGZfZGlmZjsKKworCQlmcmVmX2RpdiA9ICgyICogcC0+cmVmKSAvIHJkOworCisJCXZkID0gKGYgKyBmcmVmX2RpdiAvIDIpIC8gZnJlZl9kaXY7CisJCWlmICh2ZCA8IHAtPnZkX21pbiB8fCB2ZCA+IHAtPnZkX21heCkKKwkJCWNvbnRpbnVlOworCisJCWZfcGxsID0gZnJlZl9kaXYgKiB2ZDsKKwkJZl9kaWZmID0gZl9wbGwgLSBmOworCQlpZiAoZl9kaWZmIDwgMCkKKwkJCWZfZGlmZiA9IC1mX2RpZmY7CisKKwkJaWYgKCh1bnNpZ25lZClmX2RpZmYgPCBiZXN0KSB7CisJCQl2Y28udiA9IHZkIC0gODsKKwkJCXZjby5yID0gcmQgLSAyOworCQkJaWYgKGZfZGlmZiA9PSAwKQorCQkJCWJyZWFrOworCQkJYmVzdCA9IGZfZGlmZjsKKwkJfQorCX0KKworCXJldHVybiB2Y287Cit9CisKK0VYUE9SVF9TWU1CT0woaWNzdDMwN19raHpfdG9fdmNvKTsKKworc3RydWN0IGljc3QzMDdfdmNvCitpY3N0MzA3X3BzX3RvX3Zjbyhjb25zdCBzdHJ1Y3QgaWNzdDMwN19wYXJhbXMgKnAsIHVuc2lnbmVkIGxvbmcgcGVyaW9kKQoreworCXN0cnVjdCBpY3N0MzA3X3ZjbyB2Y28gPSB7IC5zID0gMSwgLnYgPSBwLT52ZF9tYXgsIC5yID0gcC0+cmRfbWF4IH07CisJdW5zaWduZWQgbG9uZyBmLCBwczsKKwl1bnNpZ25lZCBpbnQgaSA9IDAsIHJkLCBiZXN0ID0gKHVuc2lnbmVkIGludCktMTsKKworCXBzID0gMTAwMDAwMDAwMFVMIC8gcC0+dmNvX21heDsKKworCS8qCisJICogRmlyc3QsIGZpbmQgdGhlIFBMTCBvdXRwdXQgZGl2aXNvciBzdWNoCisJICogdGhhdCB0aGUgUExMIG91dHB1dCBpcyB3aXRoaW4gc3BlYy4KKwkgKi8KKwlkbyB7CisJCWYgPSBwZXJpb2QgLyBzMmRpdltpZHgyc1tpXV07CisKKwkJLyoKKwkJICogZiBtdXN0IGJlIGJldHdlZW4gNk1IeiBhbmQgMjAwTUh6ICgzLjMgb3IgNVYpCisJCSAqLworCQlpZiAoZiA+PSBwcyAmJiBmIDwgMTAwMDAwMDAwMFVMIC8gNjAwMCArIDEpCisJCQlicmVhazsKKwl9IHdoaWxlIChpIDwgQVJSQVlfU0laRShpZHgycykpOworCisJaWYgKGkgPiBBUlJBWV9TSVpFKGlkeDJzKSkKKwkJcmV0dXJuIHZjbzsKKworCXZjby5zID0gaWR4MnNbaV07CisKKwlwcyA9IDUwMDAwMDAwMFVMIC8gcC0+cmVmOworCisJLyoKKwkgKiBOb3cgZmluZCB0aGUgY2xvc2VzdCBkaXZpc29yIGNvbWJpbmF0aW9uCisJICogd2hpY2ggZ2l2ZXMgYSBQTEwgb3V0cHV0IG9mICdmJy4KKwkgKi8KKwlmb3IgKHJkID0gcC0+cmRfbWluOyByZCA8PSBwLT5yZF9tYXg7IHJkKyspIHsKKwkJdW5zaWduZWQgbG9uZyBmX2luX2RpdiwgZl9wbGw7CisJCXVuc2lnbmVkIGludCB2ZDsKKwkJaW50IGZfZGlmZjsKKworCQlmX2luX2RpdiA9IHBzICogcmQ7CisKKwkJdmQgPSAoZl9pbl9kaXYgKyBmIC8gMikgLyBmOworCQlpZiAodmQgPCBwLT52ZF9taW4gfHwgdmQgPiBwLT52ZF9tYXgpCisJCQljb250aW51ZTsKKworCQlmX3BsbCA9IChmX2luX2RpdiArIHZkIC8gMikgLyB2ZDsKKwkJZl9kaWZmID0gZl9wbGwgLSBmOworCQlpZiAoZl9kaWZmIDwgMCkKKwkJCWZfZGlmZiA9IC1mX2RpZmY7CisKKwkJaWYgKCh1bnNpZ25lZClmX2RpZmYgPCBiZXN0KSB7CisJCQl2Y28udiA9IHZkIC0gODsKKwkJCXZjby5yID0gcmQgLSAyOworCQkJaWYgKGZfZGlmZiA9PSAwKQorCQkJCWJyZWFrOworCQkJYmVzdCA9IGZfZGlmZjsKKwkJfQorCX0KKworCXJldHVybiB2Y287Cit9CisKK0VYUE9SVF9TWU1CT0woaWNzdDMwN19wc190b192Y28pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2ljc3Q1MjUuYyBiL2FyY2gvYXJtL2NvbW1vbi9pY3N0NTI1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQzZWY4OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9pY3N0NTI1LmMKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vY29tbW9uL2ljc3Q1MjUuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgRGVlcCBCbHVlIFNvbHV0aW9ucywgTHRkLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFN1cHBvcnQgZnVuY3Rpb25zIGZvciBjYWxjdWxhdGluZyBjbG9ja3MvZGl2aXNvcnMgZm9yIHRoZSBJQ1NUNTI1CisgKiAgY2xvY2sgZ2VuZXJhdG9ycy4gIFNlZSBodHRwOi8vd3d3Lmljc3QuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICogIG9uIHRoZXNlIGRldmljZXMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pY3N0NTI1Lmg+CisKKy8qCisgKiBEaXZpc29ycyBmb3IgZWFjaCBPRCBzZXR0aW5nLgorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBzMmRpdls4XSA9IHsgMTAsIDIsIDgsIDQsIDUsIDcsIDksIDYgfTsKKwordW5zaWduZWQgbG9uZyBpY3N0NTI1X2toeihjb25zdCBzdHJ1Y3QgaWNzdDUyNV9wYXJhbXMgKnAsIHN0cnVjdCBpY3N0NTI1X3ZjbyB2Y28pCit7CisJcmV0dXJuIHAtPnJlZiAqIDIgKiAodmNvLnYgKyA4KSAvICgodmNvLnIgKyAyKSAqIHMyZGl2W3Zjby5zXSk7Cit9CisKK0VYUE9SVF9TWU1CT0woaWNzdDUyNV9raHopOworCisvKgorICogQXNjZW5kaW5nIGRpdmlzb3IgUyB2YWx1ZXMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGlkeDJzW10gPSB7IDEsIDMsIDQsIDcsIDUsIDIsIDYsIDAgfTsKKworc3RydWN0IGljc3Q1MjVfdmNvCitpY3N0NTI1X2toel90b192Y28oY29uc3Qgc3RydWN0IGljc3Q1MjVfcGFyYW1zICpwLCB1bnNpZ25lZCBsb25nIGZyZXEpCit7CisJc3RydWN0IGljc3Q1MjVfdmNvIHZjbyA9IHsgLnMgPSAxLCAudiA9IHAtPnZkX21heCwgLnIgPSBwLT5yZF9tYXggfTsKKwl1bnNpZ25lZCBsb25nIGY7CisJdW5zaWduZWQgaW50IGkgPSAwLCByZCwgYmVzdCA9ICh1bnNpZ25lZCBpbnQpLTE7CisKKwkvKgorCSAqIEZpcnN0LCBmaW5kIHRoZSBQTEwgb3V0cHV0IGRpdmlzb3Igc3VjaAorCSAqIHRoYXQgdGhlIFBMTCBvdXRwdXQgaXMgd2l0aGluIHNwZWMuCisJICovCisJZG8geworCQlmID0gZnJlcSAqIHMyZGl2W2lkeDJzW2ldXTsKKworCQkvKgorCQkgKiBmIG11c3QgYmUgYmV0d2VlbiAxME1IeiBhbmQKKwkJICogIDMyME1IeiAoNVYpIG9yIDIwME1IeiAoM1YpCisJCSAqLworCQlpZiAoZiA+IDEwMDAwICYmIGYgPD0gcC0+dmNvX21heCkKKwkJCWJyZWFrOworCX0gd2hpbGUgKGkgPCBBUlJBWV9TSVpFKGlkeDJzKSk7CisKKwlpZiAoaSA+IEFSUkFZX1NJWkUoaWR4MnMpKQorCQlyZXR1cm4gdmNvOworCisJdmNvLnMgPSBpZHgyc1tpXTsKKworCS8qCisJICogTm93IGZpbmQgdGhlIGNsb3Nlc3QgZGl2aXNvciBjb21iaW5hdGlvbgorCSAqIHdoaWNoIGdpdmVzIGEgUExMIG91dHB1dCBvZiAnZicuCisJICovCisJZm9yIChyZCA9IHAtPnJkX21pbjsgcmQgPD0gcC0+cmRfbWF4OyByZCsrKSB7CisJCXVuc2lnbmVkIGxvbmcgZnJlZl9kaXYsIGZfcGxsOworCQl1bnNpZ25lZCBpbnQgdmQ7CisJCWludCBmX2RpZmY7CisKKwkJZnJlZl9kaXYgPSAoMiAqIHAtPnJlZikgLyByZDsKKworCQl2ZCA9IChmICsgZnJlZl9kaXYgLyAyKSAvIGZyZWZfZGl2OworCQlpZiAodmQgPCBwLT52ZF9taW4gfHwgdmQgPiBwLT52ZF9tYXgpCisJCQljb250aW51ZTsKKworCQlmX3BsbCA9IGZyZWZfZGl2ICogdmQ7CisJCWZfZGlmZiA9IGZfcGxsIC0gZjsKKwkJaWYgKGZfZGlmZiA8IDApCisJCQlmX2RpZmYgPSAtZl9kaWZmOworCisJCWlmICgodW5zaWduZWQpZl9kaWZmIDwgYmVzdCkgeworCQkJdmNvLnYgPSB2ZCAtIDg7CisJCQl2Y28uciA9IHJkIC0gMjsKKwkJCWlmIChmX2RpZmYgPT0gMCkKKwkJCQlicmVhazsKKwkJCWJlc3QgPSBmX2RpZmY7CisJCX0KKwl9CisKKwlyZXR1cm4gdmNvOworfQorCitFWFBPUlRfU1lNQk9MKGljc3Q1MjVfa2h6X3RvX3Zjbyk7CisKK3N0cnVjdCBpY3N0NTI1X3ZjbworaWNzdDUyNV9wc190b192Y28oY29uc3Qgc3RydWN0IGljc3Q1MjVfcGFyYW1zICpwLCB1bnNpZ25lZCBsb25nIHBlcmlvZCkKK3sKKwlzdHJ1Y3QgaWNzdDUyNV92Y28gdmNvID0geyAucyA9IDEsIC52ID0gcC0+dmRfbWF4LCAuciA9IHAtPnJkX21heCB9OworCXVuc2lnbmVkIGxvbmcgZiwgcHM7CisJdW5zaWduZWQgaW50IGkgPSAwLCByZCwgYmVzdCA9ICh1bnNpZ25lZCBpbnQpLTE7CisKKwlwcyA9IDEwMDAwMDAwMDBVTCAvIHAtPnZjb19tYXg7CisKKwkvKgorCSAqIEZpcnN0LCBmaW5kIHRoZSBQTEwgb3V0cHV0IGRpdmlzb3Igc3VjaAorCSAqIHRoYXQgdGhlIFBMTCBvdXRwdXQgaXMgd2l0aGluIHNwZWMuCisJICovCisJZG8geworCQlmID0gcGVyaW9kIC8gczJkaXZbaWR4MnNbaV1dOworCisJCS8qCisJCSAqIGYgbXVzdCBiZSBiZXR3ZWVuIDEwTUh6IGFuZAorCQkgKiAgMzIwTUh6ICg1Vikgb3IgMjAwTUh6ICgzVikKKwkJICovCisJCWlmIChmID49IHBzICYmIGYgPCAxMDAwMDApCisJCQlicmVhazsKKwl9IHdoaWxlIChpIDwgQVJSQVlfU0laRShpZHgycykpOworCisJaWYgKGkgPiBBUlJBWV9TSVpFKGlkeDJzKSkKKwkJcmV0dXJuIHZjbzsKKworCXZjby5zID0gaWR4MnNbaV07CisKKwlwcyA9IDUwMDAwMDAwMFVMIC8gcC0+cmVmOworCisJLyoKKwkgKiBOb3cgZmluZCB0aGUgY2xvc2VzdCBkaXZpc29yIGNvbWJpbmF0aW9uCisJICogd2hpY2ggZ2l2ZXMgYSBQTEwgb3V0cHV0IG9mICdmJy4KKwkgKi8KKwlmb3IgKHJkID0gcC0+cmRfbWluOyByZCA8PSBwLT5yZF9tYXg7IHJkKyspIHsKKwkJdW5zaWduZWQgbG9uZyBmX2luX2RpdiwgZl9wbGw7CisJCXVuc2lnbmVkIGludCB2ZDsKKwkJaW50IGZfZGlmZjsKKworCQlmX2luX2RpdiA9IHBzICogcmQ7CisKKwkJdmQgPSAoZl9pbl9kaXYgKyBmIC8gMikgLyBmOworCQlpZiAodmQgPCBwLT52ZF9taW4gfHwgdmQgPiBwLT52ZF9tYXgpCisJCQljb250aW51ZTsKKworCQlmX3BsbCA9IChmX2luX2RpdiArIHZkIC8gMikgLyB2ZDsKKwkJZl9kaWZmID0gZl9wbGwgLSBmOworCQlpZiAoZl9kaWZmIDwgMCkKKwkJCWZfZGlmZiA9IC1mX2RpZmY7CisKKwkJaWYgKCh1bnNpZ25lZClmX2RpZmYgPCBiZXN0KSB7CisJCQl2Y28udiA9IHZkIC0gODsKKwkJCXZjby5yID0gcmQgLSAyOworCQkJaWYgKGZfZGlmZiA9PSAwKQorCQkJCWJyZWFrOworCQkJYmVzdCA9IGZfZGlmZjsKKwkJfQorCX0KKworCXJldHVybiB2Y287Cit9CisKK0VYUE9SVF9TWU1CT0woaWNzdDUyNV9wc190b192Y28pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jIGIvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZjEyNjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb21tb24vbG9jb21vLmMKQEAgLTAsMCArMSwxMDU4IEBACisvKgorICogbGludXgvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jCisgKgorICogU2hhcnAgTG9Db01vIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhbGwgZ2VuZXJpYyBMb0NvTW8gc3VwcG9ydC4KKyAqCisgKiBBbGwgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIHByb3ZpZGVkIGhlcmUgYXJlIGludGVuZGVkIHRvIGJlIGNhbGxlZAorICogZnJvbSBtYWNoaW5lIHNwZWNpZmljIGNvZGUgd2l0aCBwcm9wZXIgYXJndW1lbnRzIHdoZW4gcmVxdWlyZWQuCisgKgorICogQmFzZWQgb24gc2ExMTExLmMKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2xvY29tby5oPgorCisvKiBNNjIzMzIgb3V0cHV0IGNoYW5uZWwgc2VsZWN0aW9uICovCisjZGVmaW5lIE02MjMzMl9FVlJfQ0gJMQkvKiBNNjIzMzIgdm9sdW1lIGNoYW5uZWwgbnVtYmVyICAqLworCQkJCS8qICAgMCA6IENILjEgLCAxIDogQ0guIDIgICAgICAgICovCisvKiBEQUMgc2VuZCBkYXRhICovCisjZGVmaW5lCU02MjMzMl9TTEFWRV9BRERSCTB4NGUJLyogU2xhdmUgYWRkcmVzcyAgKi8KKyNkZWZpbmUJTTYyMzMyX1dfQklUCQkweDAwCS8qIFcgYml0ICgwIG9ubHkpICovCisjZGVmaW5lCU02MjMzMl9TVUJfQUREUgkJMHgwMAkvKiBTdWIgYWRkcmVzcyAgICAqLworI2RlZmluZQlNNjIzMzJfQV9CSVQJCTB4MDAJLyogQSBiaXQgKDAgb25seSkgKi8KKworLyogREFDIHNldHVwIGFuZCBob2xkIHRpbWVzIChleHByZXNzZWQgaW4gdXMpICovCisjZGVmaW5lIERBQ19CVVNfRlJFRV9USU1FCTUJLyogICA0LjcgdXMgKi8KKyNkZWZpbmUgREFDX1NUQVJUX1NFVFVQX1RJTUUJNQkvKiAgIDQuNyB1cyAqLworI2RlZmluZSBEQUNfU1RPUF9TRVRVUF9USU1FCTQJLyogICA0LjAgdXMgKi8KKyNkZWZpbmUgREFDX1NUQVJUX0hPTERfVElNRQk1CS8qICAgNC43IHVzICovCisjZGVmaW5lIERBQ19TQ0xfTE9XX0hPTERfVElNRQk1CS8qICAgNC43IHVzICovCisjZGVmaW5lIERBQ19TQ0xfSElHSF9IT0xEX1RJTUUJNAkvKiAgIDQuMCB1cyAqLworI2RlZmluZSBEQUNfREFUQV9TRVRVUF9USU1FCTEJLyogICAyNTAgbnMgKi8KKyNkZWZpbmUgREFDX0RBVEFfSE9MRF9USU1FCTEJLyogICAzMDAgbnMgKi8KKyNkZWZpbmUgREFDX0xPV19TRVRVUF9USU1FCTEJLyogICAzMDAgbnMgKi8KKyNkZWZpbmUgREFDX0hJR0hfU0VUVVBfVElNRQkxCS8qICAxMDAwIG5zICovCisKKy8qIHRoZSBmb2xsb3dpbmcgaXMgdGhlIG92ZXJhbGwgZGF0YSBmb3IgdGhlIGxvY29tbyBjaGlwICovCitzdHJ1Y3QgbG9jb21vIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdW5zaWduZWQgbG9uZyBwaHlzOworCXVuc2lnbmVkIGludCBpcnE7CisJc3BpbmxvY2tfdCBsb2NrOworCXZvaWQgKmJhc2U7Cit9OworCitzdHJ1Y3QgbG9jb21vX2Rldl9pbmZvIHsKKwl1bnNpZ25lZCBsb25nCW9mZnNldDsKKwl1bnNpZ25lZCBsb25nCWxlbmd0aDsKKwl1bnNpZ25lZCBpbnQJZGV2aWQ7CisJdW5zaWduZWQgaW50CWlycVsxXTsKKwljb25zdCBjaGFyICoJbmFtZTsKK307CisKKy8qIEFsbCB0aGUgbG9jb21vIGRldmljZXMuICBJZiBvZmZzZXQgaXMgbm9uLXplcm8sIHRoZSBtYXBiYXNlIGZvciB0aGUKKyAqIGxvY29tb19kZXYgd2lsbCBiZSBzZXQgdG8gdGhlIGNoaXAgYmFzZSBwbHVzIG9mZnNldC4gIElmIG9mZnNldCBpcworICogemVybywgdGhlbiB0aGUgbWFwYmFzZSBmb3IgdGhlIGxvY29tb19kZXYgd2lsbCBiZSBzZXQgdG8gemVyby4gIEFuCisgKiBvZmZzZXQgb2YgemVybyBtZWFucyB0aGUgZGV2aWNlIG9ubHkgdXNlcyBHUElPcyBvciBvdGhlciBoZWxwZXIKKyAqIGZ1bmN0aW9ucyBpbnNpZGUgdGhpcyBmaWxlICovCitzdGF0aWMgc3RydWN0IGxvY29tb19kZXZfaW5mbyBsb2NvbW9fZGV2aWNlc1tdID0geworCXsKKwkJLmRldmlkIAkJPSBMT0NPTU9fREVWSURfS0VZQk9BUkQsCisJCS5pcnEgPSB7CisJCQlJUlFfTE9DT01PX0tFWSwKKwkJfSwKKwkJLm5hbWUJCT0gImxvY29tby1rZXlib2FyZCIsCisJCS5vZmZzZXQJCT0gTE9DT01PX0tFWUJPQVJELAorCQkubGVuZ3RoCQk9IDE2LAorCX0sCisJeworCQkuZGV2aWQJCT0gTE9DT01PX0RFVklEX0ZST05UTElHSFQsCisJCS5pcnEJCT0ge30sCisJCS5uYW1lCQk9ICJsb2NvbW8tZnJvbnRsaWdodCIsCisJCS5vZmZzZXQJCT0gTE9DT01PX0ZST05UTElHSFQsCisJCS5sZW5ndGgJCT0gOCwKKworCX0sCisJeworCQkuZGV2aWQJCT0gTE9DT01PX0RFVklEX0JBQ0tMSUdIVCwKKwkJLmlycQkJPSB7fSwKKwkJLm5hbWUJCT0gImxvY29tby1iYWNrbGlnaHQiLAorCQkub2Zmc2V0CQk9IExPQ09NT19CQUNLTElHSFQsCisJCS5sZW5ndGgJCT0gOCwKKwl9LAorCXsKKwkJLmRldmlkCQk9IExPQ09NT19ERVZJRF9BVURJTywKKwkJLmlycQkJPSB7fSwKKwkJLm5hbWUJCT0gImxvY29tby1hdWRpbyIsCisJCS5vZmZzZXQJCT0gTE9DT01PX0FVRElPLAorCQkubGVuZ3RoCQk9IDQsCisJfSwKKwl7CisJCS5kZXZpZAkJPSBMT0NPTU9fREVWSURfTEVELAorCQkuaXJxIAkJPSB7fSwKKwkJLm5hbWUJCT0gImxvY29tby1sZWQiLAorCQkub2Zmc2V0CQk9IExPQ09NT19MRUQsCisJCS5sZW5ndGgJCT0gOCwKKwl9LAorCXsKKwkJLmRldmlkCQk9IExPQ09NT19ERVZJRF9VQVJULAorCQkuaXJxCQk9IHt9LAorCQkubmFtZQkJPSAibG9jb21vLXVhcnQiLAorCQkub2Zmc2V0CQk9IDAsCisJCS5sZW5ndGgJCT0gMCwKKwl9LAorfTsKKworCisvKiogTG9Db01vIGludGVycnVwdCBoYW5kbGluZyBzdHVmZi4KKyAqIE5PVEU6IExvQ29NbyBoYXMgYSAxIHRvIG1hbnkgbWFwcGluZyBvbiBhbGwgb2YgaXRzIElSUXMuCisgKiB0aGF0IGlzLCB0aGVyZSBpcyBvbmx5IG9uZSByZWFsIGhhcmR3YXJlIGludGVycnVwdAorICogd2UgZGV0ZXJtaW5lIHdoaWNoIGludGVycnVwdCBpdCBpcyBieSByZWFkaW5nIHNvbWUgSU8gbWVtb3J5LgorICogV2UgaGF2ZSB0d28gbGV2ZWxzIG9mIGV4cGFuc2lvbiwgZmlyc3QgaW4gdGhlIGhhbmRsZXIgZm9yIHRoZQorICogaGFyZHdhcmUgaW50ZXJydXB0IHdlIGdlbmVyYXRlIGFuIGludGVycnVwdAorICogSVJRX0xPQ09NT18qX0JBU0UgYW5kIHRob3NlIGhhbmRsZXJzIGdlbmVyYXRlIG1vcmUgaW50ZXJydXB0cworICoKKyAqIGhhcmR3YXJlIGlycSByZWFkcyBMT0NPTU9fSUNSICYgMHgwZjAwCisgKiAgIElSUV9MT0NPTU9fS0VZX0JBU0UKKyAqICAgSVJRX0xPQ09NT19HUElPX0JBU0UKKyAqICAgSVJRX0xPQ09NT19MVF9CQVNFCisgKiAgIElSUV9MT0NPTU9fU1BJX0JBU0UKKyAqIElSUV9MT0NPTU9fS0VZX0JBU0UgcmVhZHMgTE9DT01PX0tJQyAmIDB4MDAwMQorICogICBJUlFfTE9DT01PX0tFWQorICogSVJRX0xPQ09NT19HUElPX0JBU0UgcmVhZHMgTE9DT01PX0dJUiAmIExPQ09NT19HUEQgJiAweGZmZmYKKyAqICAgSVJRX0xPQ09NT19HUElPWzAtMTVdCisgKiBJUlFfTE9DT01PX0xUX0JBU0UgcmVhZHMgTE9DT01PX0xUSU5UICYgMHgwMDAxCisgKiAgIElSUV9MT0NPTU9fTFQKKyAqIElSUV9MT0NPTU9fU1BJX0JBU0UgcmVhZHMgTE9DT01PX1NQSUlSICYgMHgwMDBGCisgKiAgIElSUV9MT0NPTU9fU1BJX1JGUgorICogICBJUlFfTE9DT01PX1NQSV9SRlcKKyAqICAgSVJRX0xPQ09NT19TUElfT1ZSTgorICogICBJUlFfTE9DT01PX1NQSV9URU5ECisgKi8KKworI2RlZmluZSBMT0NPTU9fSVJRX1NUQVJUCShJUlFfTE9DT01PX0tFWV9CQVNFKQorI2RlZmluZSBMT0NPTU9fSVJRX0tFWV9TVEFSVAkoSVJRX0xPQ09NT19LRVkpCisjZGVmaW5lCUxPQ09NT19JUlFfR1BJT19TVEFSVAkoSVJRX0xPQ09NT19HUElPMCkKKyNkZWZpbmUJTE9DT01PX0lSUV9MVF9TVEFSVAkoSVJRX0xPQ09NT19MVCkKKyNkZWZpbmUJTE9DT01PX0lSUV9TUElfU1RBUlQJKElSUV9MT0NPTU9fU1BJX1JGUikKKworc3RhdGljIHZvaWQgbG9jb21vX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWRlc2MgKmRlc2MsCisJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgcmVxLCBpOworCXN0cnVjdCBpcnFkZXNjICpkOworCXZvaWQgKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CisKKwkvKiBBY2tub3dsZWRnZSB0aGUgcGFyZW50IElSUSAqLworCWRlc2MtPmNoaXAtPmFjayhpcnEpOworCisJLyogY2hlY2sgd2h5IHRoaXMgaW50ZXJydXB0IHdhcyBnZW5lcmF0ZWQgKi8KKwlyZXEgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19JQ1IpICYgMHgwZjAwOworCisJaWYgKHJlcSkgeworCQkvKiBnZW5lcmF0ZSB0aGUgbmV4dCBpbnRlcnJ1cHQocykgKi8KKwkJaXJxID0gTE9DT01PX0lSUV9TVEFSVDsKKwkJZCA9IGlycV9kZXNjICsgaXJxOworCQlmb3IgKGkgPSAwOyBpIDw9IDM7IGkrKywgZCsrLCBpcnErKykgeworCQkJaWYgKHJlcSAmICgweDAxMDAgPDwgaSkpIHsKKwkJCQlkLT5oYW5kbGUoaXJxLCBkLCByZWdzKTsKKwkJCX0KKworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBsb2NvbW9fYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworfQorCitzdGF0aWMgdm9pZCBsb2NvbW9fbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXVuc2lnbmVkIGludCByOworCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19JQ1IpOworCXIgJj0gfigweDAwMTAgPDwgKGlycSAtIExPQ09NT19JUlFfU1RBUlQpKTsKKwlsb2NvbW9fd3JpdGVsKHIsIG1hcGJhc2UgKyBMT0NPTU9fSUNSKTsKK30KKworc3RhdGljIHZvaWQgbG9jb21vX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXVuc2lnbmVkIGludCByOworCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19JQ1IpOworCXIgfD0gKDB4MDAxMCA8PCAoaXJxIC0gTE9DT01PX0lSUV9TVEFSVCkpOworCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19JQ1IpOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgbG9jb21vX2NoaXAgPSB7CisJLmFjawk9IGxvY29tb19hY2tfaXJxLAorCS5tYXNrCT0gbG9jb21vX21hc2tfaXJxLAorCS51bm1hc2sJPSBsb2NvbW9fdW5tYXNrX2lycSwKK307CisKK3N0YXRpYyB2b2lkIGxvY29tb19rZXlfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywKKwkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaXJxZGVzYyAqZDsKKwl2b2lkICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCisJaWYgKGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX0tFWUJPQVJEICsgTE9DT01PX0tJQykgJiAweDAwMDEpIHsKKwkJZCA9IGlycV9kZXNjICsgTE9DT01PX0lSUV9LRVlfU1RBUlQ7CisJCWQtPmhhbmRsZShMT0NPTU9fSVJRX0tFWV9TVEFSVCwgZCwgcmVncyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBsb2NvbW9fa2V5X2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXVuc2lnbmVkIGludCByOworCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19LRVlCT0FSRCArIExPQ09NT19LSUMpOworCXIgJj0gfigweDAxMDAgPDwgKGlycSAtIExPQ09NT19JUlFfS0VZX1NUQVJUKSk7CisJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX0tFWUJPQVJEICsgTE9DT01PX0tJQyk7Cit9CisKK3N0YXRpYyB2b2lkIGxvY29tb19rZXlfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXVuc2lnbmVkIGludCByOworCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19LRVlCT0FSRCArIExPQ09NT19LSUMpOworCXIgJj0gfigweDAwMTAgPDwgKGlycSAtIExPQ09NT19JUlFfS0VZX1NUQVJUKSk7CisJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX0tFWUJPQVJEICsgTE9DT01PX0tJQyk7Cit9CisKK3N0YXRpYyB2b2lkIGxvY29tb19rZXlfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXZvaWQgKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CisJdW5zaWduZWQgaW50IHI7CisJciA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX0tFWUJPQVJEICsgTE9DT01PX0tJQyk7CisJciB8PSAoMHgwMDEwIDw8IChpcnEgLSBMT0NPTU9fSVJRX0tFWV9TVEFSVCkpOworCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19LRVlCT0FSRCArIExPQ09NT19LSUMpOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgbG9jb21vX2tleV9jaGlwID0geworCS5hY2sJPSBsb2NvbW9fa2V5X2Fja19pcnEsCisJLm1hc2sJPSBsb2NvbW9fa2V5X21hc2tfaXJxLAorCS51bm1hc2sJPSBsb2NvbW9fa2V5X3VubWFza19pcnEsCit9OworCitzdGF0aWMgdm9pZCBsb2NvbW9fZ3Bpb19oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFkZXNjICpkZXNjLAorCQkJICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgcmVxLCBpOworCXN0cnVjdCBpcnFkZXNjICpkOworCXZvaWQgKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CisKKwlyZXEgPSAJbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fR0lSKSAmCisJCWxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX0dQRCkgJgorCQkweGZmZmY7CisKKwlpZiAocmVxKSB7CisJCWlycSA9IExPQ09NT19JUlFfR1BJT19TVEFSVDsKKwkJZCA9IGlycV9kZXNjICsgTE9DT01PX0lSUV9HUElPX1NUQVJUOworCQlmb3IgKGkgPSAwOyBpIDw9IDE1OyBpKyssIGlycSsrLCBkKyspIHsKKwkJCWlmIChyZXEgJiAoMHgwMDAxIDw8IGkpKSB7CisJCQkJZC0+aGFuZGxlKGlycSwgZCwgcmVncyk7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxvY29tb19ncGlvX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXVuc2lnbmVkIGludCByOworCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19HV0UpOworCXIgfD0gKDB4MDAwMSA8PCAoaXJxIC0gTE9DT01PX0lSUV9HUElPX1NUQVJUKSk7CisJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX0dXRSk7CisKKwlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fR0lTKTsKKwlyICY9IH4oMHgwMDAxIDw8IChpcnEgLSBMT0NPTU9fSVJRX0dQSU9fU1RBUlQpKTsKKwlsb2NvbW9fd3JpdGVsKHIsIG1hcGJhc2UgKyBMT0NPTU9fR0lTKTsKKworCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19HV0UpOworCXIgJj0gfigweDAwMDEgPDwgKGlycSAtIExPQ09NT19JUlFfR1BJT19TVEFSVCkpOworCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19HV0UpOworfQorCitzdGF0aWMgdm9pZCBsb2NvbW9fZ3Bpb19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXZvaWQgKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CisJdW5zaWduZWQgaW50IHI7CisJciA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX0dJRSk7CisJciAmPSB+KDB4MDAwMSA8PCAoaXJxIC0gTE9DT01PX0lSUV9HUElPX1NUQVJUKSk7CisJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX0dJRSk7Cit9CisKK3N0YXRpYyB2b2lkIGxvY29tb19ncGlvX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXVuc2lnbmVkIGludCByOworCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19HSUUpOworCXIgfD0gKDB4MDAwMSA8PCAoaXJxIC0gTE9DT01PX0lSUV9HUElPX1NUQVJUKSk7CisJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX0dJRSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBsb2NvbW9fZ3Bpb19jaGlwID0geworCS5hY2sJPSBsb2NvbW9fZ3Bpb19hY2tfaXJxLAorCS5tYXNrCT0gbG9jb21vX2dwaW9fbWFza19pcnEsCisJLnVubWFzawk9IGxvY29tb19ncGlvX3VubWFza19pcnEsCit9OworCitzdGF0aWMgdm9pZCBsb2NvbW9fbHRfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywKKwkJCSAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBpcnFkZXNjICpkOworCXZvaWQgKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CisKKwlpZiAobG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fTFRJTlQpICYgMHgwMDAxKSB7CisJCWQgPSBpcnFfZGVzYyArIExPQ09NT19JUlFfTFRfU1RBUlQ7CisJCWQtPmhhbmRsZShMT0NPTU9fSVJRX0xUX1NUQVJULCBkLCByZWdzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxvY29tb19sdF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdm9pZCAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcGRhdGEoaXJxKTsKKwl1bnNpZ25lZCBpbnQgcjsKKwlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fTFRJTlQpOworCXIgJj0gfigweDAxMDAgPDwgKGlycSAtIExPQ09NT19JUlFfTFRfU1RBUlQpKTsKKwlsb2NvbW9fd3JpdGVsKHIsIG1hcGJhc2UgKyBMT0NPTU9fTFRJTlQpOworfQorCitzdGF0aWMgdm9pZCBsb2NvbW9fbHRfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXVuc2lnbmVkIGludCByOworCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19MVElOVCk7CisJciAmPSB+KDB4MDAxMCA8PCAoaXJxIC0gTE9DT01PX0lSUV9MVF9TVEFSVCkpOworCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19MVElOVCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvY29tb19sdF91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdm9pZCAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcGRhdGEoaXJxKTsKKwl1bnNpZ25lZCBpbnQgcjsKKwlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fTFRJTlQpOworCXIgfD0gKDB4MDAxMCA8PCAoaXJxIC0gTE9DT01PX0lSUV9MVF9TVEFSVCkpOworCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19MVElOVCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBsb2NvbW9fbHRfY2hpcCA9IHsKKwkuYWNrCT0gbG9jb21vX2x0X2Fja19pcnEsCisJLm1hc2sJPSBsb2NvbW9fbHRfbWFza19pcnEsCisJLnVubWFzawk9IGxvY29tb19sdF91bm1hc2tfaXJxLAorfTsKKworc3RhdGljIHZvaWQgbG9jb21vX3NwaV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFkZXNjICpkZXNjLAorCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCByZXEsIGk7CisJc3RydWN0IGlycWRlc2MgKmQ7CisJdm9pZCAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcGRhdGEoaXJxKTsKKworCXJlcSA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX1NQSUlSKSAmIDB4MDAwRjsKKwlpZiAocmVxKSB7CisJCWlycSA9IExPQ09NT19JUlFfU1BJX1NUQVJUOworCQlkID0gaXJxX2Rlc2MgKyBpcnE7CisKKwkJZm9yIChpID0gMDsgaSA8PSAzOyBpKyssIGlycSsrLCBkKyspIHsKKwkJCWlmIChyZXEgJiAoMHgwMDAxIDw8IGkpKSB7CisJCQkJZC0+aGFuZGxlKGlycSwgZCwgcmVncyk7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxvY29tb19zcGlfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXZvaWQgKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CisJdW5zaWduZWQgaW50IHI7CisJciA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX1NQSVdFKTsKKwlyIHw9ICgweDAwMDEgPDwgKGlycSAtIExPQ09NT19JUlFfU1BJX1NUQVJUKSk7CisJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX1NQSVdFKTsKKworCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19TUElJUyk7CisJciAmPSB+KDB4MDAwMSA8PCAoaXJxIC0gTE9DT01PX0lSUV9TUElfU1RBUlQpKTsKKwlsb2NvbW9fd3JpdGVsKHIsIG1hcGJhc2UgKyBMT0NPTU9fU1BJSVMpOworCisJciA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX1NQSVdFKTsKKwlyICY9IH4oMHgwMDAxIDw8IChpcnEgLSBMT0NPTU9fSVJRX1NQSV9TVEFSVCkpOworCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19TUElXRSk7Cit9CisKK3N0YXRpYyB2b2lkIGxvY29tb19zcGlfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXVuc2lnbmVkIGludCByOworCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19TUElJRSk7CisJciAmPSB+KDB4MDAwMSA8PCAoaXJxIC0gTE9DT01PX0lSUV9TUElfU1RBUlQpKTsKKwlsb2NvbW9fd3JpdGVsKHIsIG1hcGJhc2UgKyBMT0NPTU9fU1BJSUUpOworfQorCitzdGF0aWMgdm9pZCBsb2NvbW9fc3BpX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXVuc2lnbmVkIGludCByOworCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19TUElJRSk7CisJciB8PSAoMHgwMDAxIDw8IChpcnEgLSBMT0NPTU9fSVJRX1NQSV9TVEFSVCkpOworCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19TUElJRSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBsb2NvbW9fc3BpX2NoaXAgPSB7CisJLmFjawk9IGxvY29tb19zcGlfYWNrX2lycSwKKwkubWFzawk9IGxvY29tb19zcGlfbWFza19pcnEsCisJLnVubWFzawk9IGxvY29tb19zcGlfdW5tYXNrX2lycSwKK307CisKK3N0YXRpYyB2b2lkIGxvY29tb19zZXR1cF9pcnEoc3RydWN0IGxvY29tbyAqbGNoaXApCit7CisJaW50IGlycTsKKwl2b2lkICppcnFiYXNlID0gbGNoaXAtPmJhc2U7CisKKwkvKgorCSAqIEluc3RhbGwgaGFuZGxlciBmb3IgSVJRX0xPQ09NT19IVy4KKwkgKi8KKwlzZXRfaXJxX3R5cGUobGNoaXAtPmlycSwgSVJRVF9GQUxMSU5HKTsKKwlzZXRfaXJxX2NoaXBkYXRhKGxjaGlwLT5pcnEsIGlycWJhc2UpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGxjaGlwLT5pcnEsIGxvY29tb19oYW5kbGVyKTsKKworCS8qIEluc3RhbGwgaGFuZGxlcnMgZm9yIElSUV9MT0NPTU9fKl9CQVNFICovCisJc2V0X2lycV9jaGlwKElSUV9MT0NPTU9fS0VZX0JBU0UsICZsb2NvbW9fY2hpcCk7CisJc2V0X2lycV9jaGlwZGF0YShJUlFfTE9DT01PX0tFWV9CQVNFLCBpcnFiYXNlKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfTE9DT01PX0tFWV9CQVNFLCBsb2NvbW9fa2V5X2hhbmRsZXIpOworCXNldF9pcnFfZmxhZ3MoSVJRX0xPQ09NT19LRVlfQkFTRSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOworCisJc2V0X2lycV9jaGlwKElSUV9MT0NPTU9fR1BJT19CQVNFLCAmbG9jb21vX2NoaXApOworCXNldF9pcnFfY2hpcGRhdGEoSVJRX0xPQ09NT19HUElPX0JBU0UsIGlycWJhc2UpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9MT0NPTU9fR1BJT19CQVNFLCBsb2NvbW9fZ3Bpb19oYW5kbGVyKTsKKwlzZXRfaXJxX2ZsYWdzKElSUV9MT0NPTU9fR1BJT19CQVNFLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisKKwlzZXRfaXJxX2NoaXAoSVJRX0xPQ09NT19MVF9CQVNFLCAmbG9jb21vX2NoaXApOworCXNldF9pcnFfY2hpcGRhdGEoSVJRX0xPQ09NT19MVF9CQVNFLCBpcnFiYXNlKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfTE9DT01PX0xUX0JBU0UsIGxvY29tb19sdF9oYW5kbGVyKTsKKwlzZXRfaXJxX2ZsYWdzKElSUV9MT0NPTU9fTFRfQkFTRSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOworCisJc2V0X2lycV9jaGlwKElSUV9MT0NPTU9fU1BJX0JBU0UsICZsb2NvbW9fY2hpcCk7CisJc2V0X2lycV9jaGlwZGF0YShJUlFfTE9DT01PX1NQSV9CQVNFLCBpcnFiYXNlKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfTE9DT01PX1NQSV9CQVNFLCBsb2NvbW9fc3BpX2hhbmRsZXIpOworCXNldF9pcnFfZmxhZ3MoSVJRX0xPQ09NT19TUElfQkFTRSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOworCisJLyogaW5zdGFsbCBoYW5kbGVycyBmb3IgSVJRX0xPQ09NT19LRVlfQkFTRSBnZW5lcmF0ZWQgaW50ZXJydXB0cyAqLworCXNldF9pcnFfY2hpcChMT0NPTU9fSVJRX0tFWV9TVEFSVCwgJmxvY29tb19rZXlfY2hpcCk7CisJc2V0X2lycV9jaGlwZGF0YShMT0NPTU9fSVJRX0tFWV9TVEFSVCwgaXJxYmFzZSk7CisJc2V0X2lycV9oYW5kbGVyKExPQ09NT19JUlFfS0VZX1NUQVJULCBkb19lZGdlX0lSUSk7CisJc2V0X2lycV9mbGFncyhMT0NPTU9fSVJRX0tFWV9TVEFSVCwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOworCisJLyogaW5zdGFsbCBoYW5kbGVycyBmb3IgSVJRX0xPQ09NT19HUElPX0JBU0UgZ2VuZXJhdGVkIGludGVycnVwdHMgKi8KKwlmb3IgKGlycSA9IExPQ09NT19JUlFfR1BJT19TVEFSVDsgaXJxIDwgTE9DT01PX0lSUV9HUElPX1NUQVJUICsgMTY7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZsb2NvbW9fZ3Bpb19jaGlwKTsKKwkJc2V0X2lycV9jaGlwZGF0YShpcnEsIGlycWJhc2UpOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBkb19lZGdlX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJfQorCisJLyogaW5zdGFsbCBoYW5kbGVycyBmb3IgSVJRX0xPQ09NT19MVF9CQVNFIGdlbmVyYXRlZCBpbnRlcnJ1cHRzICovCisJc2V0X2lycV9jaGlwKExPQ09NT19JUlFfTFRfU1RBUlQsICZsb2NvbW9fbHRfY2hpcCk7CisJc2V0X2lycV9jaGlwZGF0YShMT0NPTU9fSVJRX0xUX1NUQVJULCBpcnFiYXNlKTsKKwlzZXRfaXJxX2hhbmRsZXIoTE9DT01PX0lSUV9MVF9TVEFSVCwgZG9fZWRnZV9JUlEpOworCXNldF9pcnFfZmxhZ3MoTE9DT01PX0lSUV9MVF9TVEFSVCwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOworCisJLyogaW5zdGFsbCBoYW5kbGVycyBmb3IgSVJRX0xPQ09NT19TUElfQkFTRSBnZW5lcmF0ZWQgaW50ZXJydXB0cyAqLworCWZvciAoaXJxID0gTE9DT01PX0lSUV9TUElfU1RBUlQ7IGlycSA8IExPQ09NT19JUlFfU1BJX1NUQVJUICsgMzsgaXJxKyspIHsKKwkJc2V0X2lycV9jaGlwKGlycSwgJmxvY29tb19zcGlfY2hpcCk7CisJCXNldF9pcnFfY2hpcGRhdGEoaXJxLCBpcnFiYXNlKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgZG9fZWRnZV9JUlEpOworCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOworCX0KK30KKworCitzdGF0aWMgdm9pZCBsb2NvbW9fZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqX2RldikKK3sKKwlzdHJ1Y3QgbG9jb21vX2RldiAqZGV2ID0gTE9DT01PX0RFVihfZGV2KTsKKworCWtmcmVlKGRldik7Cit9CisKK3N0YXRpYyBpbnQKK2xvY29tb19pbml0X29uZV9jaGlsZChzdHJ1Y3QgbG9jb21vICpsY2hpcCwgc3RydWN0IGxvY29tb19kZXZfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgbG9jb21vX2RldiAqZGV2OworCWludCByZXQ7CisKKwlkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbG9jb21vX2RldiksIEdGUF9LRVJORUwpOworCWlmICghZGV2KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwltZW1zZXQoZGV2LCAwLCBzaXplb2Yoc3RydWN0IGxvY29tb19kZXYpKTsKKworCXN0cm5jcHkoZGV2LT5kZXYuYnVzX2lkLGluZm8tPm5hbWUsc2l6ZW9mKGRldi0+ZGV2LmJ1c19pZCkpOworCS8qCisJICogSWYgdGhlIHBhcmVudCBkZXZpY2UgaGFzIGEgRE1BIG1hc2sgYXNzb2NpYXRlZCB3aXRoIGl0LAorCSAqIHByb3BhZ2F0ZSBpdCBkb3duIHRvIHRoZSBjaGlsZHJlbi4KKwkgKi8KKwlpZiAobGNoaXAtPmRldi0+ZG1hX21hc2spIHsKKwkJZGV2LT5kbWFfbWFzayA9ICpsY2hpcC0+ZGV2LT5kbWFfbWFzazsKKwkJZGV2LT5kZXYuZG1hX21hc2sgPSAmZGV2LT5kbWFfbWFzazsKKwl9CisKKwlkZXYtPmRldmlkCSA9IGluZm8tPmRldmlkOworCWRldi0+ZGV2LnBhcmVudCAgPSBsY2hpcC0+ZGV2OworCWRldi0+ZGV2LmJ1cyAgICAgPSAmbG9jb21vX2J1c190eXBlOworCWRldi0+ZGV2LnJlbGVhc2UgPSBsb2NvbW9fZGV2X3JlbGVhc2U7CisJZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2sgPSBsY2hpcC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzazsKKworCWlmIChpbmZvLT5vZmZzZXQpCisJCWRldi0+bWFwYmFzZSA9IGxjaGlwLT5iYXNlICsgaW5mby0+b2Zmc2V0OworCWVsc2UKKwkJZGV2LT5tYXBiYXNlID0gMDsKKwlkZXYtPmxlbmd0aCA9IGluZm8tPmxlbmd0aDsKKworCW1lbW1vdmUoZGV2LT5pcnEsIGluZm8tPmlycSwgc2l6ZW9mKGRldi0+aXJxKSk7CisKKwlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJmRldi0+ZGV2KTsKKwlpZiAocmV0KSB7Cisgb3V0OgorCQlrZnJlZShkZXYpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqCWxvY29tb19wcm9iZSAtIHByb2JlIGZvciBhIHNpbmdsZSBMb0NvTW8gY2hpcC4KKyAqCUBwaHlzX2FkZHI6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgZGV2aWNlLgorICoKKyAqCVByb2JlIGZvciBhIExvQ29NbyBjaGlwLiAgVGhpcyBtdXN0IGJlIGNhbGxlZAorICoJYmVmb3JlIGFueSBvdGhlciBsb2NvbW8tc3BlY2lmaWMgY29kZS4KKyAqCisgKglSZXR1cm5zOgorICoJJS1FTk9ERVYJZGV2aWNlIG5vdCBmb3VuZC4KKyAqCSUtRUJVU1kJCXBoeXNpY2FsIGFkZHJlc3MgYWxyZWFkeSBtYXJrZWQgaW4tdXNlLgorICoJJTAJCXN1Y2Nlc3NmdWwuCisgKi8KK3N0YXRpYyBpbnQKK19fbG9jb21vX3Byb2JlKHN0cnVjdCBkZXZpY2UgKm1lLCBzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwgaW50IGlycSkKK3sKKwlzdHJ1Y3QgbG9jb21vICpsY2hpcDsKKwl1bnNpZ25lZCBsb25nIHI7CisJaW50IGksIHJldCA9IC1FTk9ERVY7CisKKwlsY2hpcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2NvbW8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxjaGlwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChsY2hpcCwgMCwgc2l6ZW9mKHN0cnVjdCBsb2NvbW8pKTsKKworCXNwaW5fbG9ja19pbml0KCZsY2hpcC0+bG9jayk7CisKKwlsY2hpcC0+ZGV2ID0gbWU7CisJZGV2X3NldF9kcnZkYXRhKGxjaGlwLT5kZXYsIGxjaGlwKTsKKworCWxjaGlwLT5waHlzID0gbWVtLT5zdGFydDsKKwlsY2hpcC0+aXJxID0gaXJxOworCisJLyoKKwkgKiBNYXAgdGhlIHdob2xlIHJlZ2lvbi4gIFRoaXMgYWxzbyBtYXBzIHRoZQorCSAqIHJlZ2lzdGVycyBmb3Igb3VyIGNoaWxkcmVuLgorCSAqLworCWxjaGlwLT5iYXNlID0gaW9yZW1hcChtZW0tPnN0YXJ0LCBQQUdFX1NJWkUpOworCWlmICghbGNoaXAtPmJhc2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogbG9jb21vIGluaXRpYWxpemUgKi8KKwlsb2NvbW9fd3JpdGVsKDAsIGxjaGlwLT5iYXNlICsgTE9DT01PX0lDUik7CisJLyogS0VZQk9BUkQgKi8KKwlsb2NvbW9fd3JpdGVsKDAsIGxjaGlwLT5iYXNlICsgTE9DT01PX0tFWUJPQVJEICsgTE9DT01PX0tJQyk7CisKKwkvKiBHUElPICovCisJbG9jb21vX3dyaXRlbCgwLCBsY2hpcC0+YmFzZSArIExPQ09NT19HUE8pOworCWxvY29tb193cml0ZWwoIChMT0NPTU9fR1BJTygyKSB8IExPQ09NT19HUElPKDMpIHwgTE9DT01PX0dQSU8oMTMpIHwgTE9DT01PX0dQSU8oMTQpKQorCQkJLCBsY2hpcC0+YmFzZSArIExPQ09NT19HUEUpOworCWxvY29tb193cml0ZWwoIChMT0NPTU9fR1BJTygyKSB8IExPQ09NT19HUElPKDMpIHwgTE9DT01PX0dQSU8oMTMpIHwgTE9DT01PX0dQSU8oMTQpKQorCQkJLCBsY2hpcC0+YmFzZSArIExPQ09NT19HUEQpOworCWxvY29tb193cml0ZWwoMCwgbGNoaXAtPmJhc2UgKyBMT0NPTU9fR0lFKTsKKworCS8qIEZyb250TGlnaHQgKi8KKwlsb2NvbW9fd3JpdGVsKDAsIGxjaGlwLT5iYXNlICsgTE9DT01PX0ZST05UTElHSFQgKyBMT0NPTU9fQUxTKTsKKwlsb2NvbW9fd3JpdGVsKDAsIGxjaGlwLT5iYXNlICsgTE9DT01PX0ZST05UTElHSFQgKyBMT0NPTU9fQUxEKTsKKwkvKiBMb25ndGltZSB0aW1lciAqLworCWxvY29tb193cml0ZWwoMCwgbGNoaXAtPmJhc2UgKyBMT0NPTU9fTFRJTlQpOworCS8qIFNQSSAqLworCWxvY29tb193cml0ZWwoMCwgbGNoaXAtPmJhc2UgKyBMT0NPTU9fU1BJSUUpOworCisJbG9jb21vX3dyaXRlbCg2ICsgOCArIDMyMCArIDMwIC0gMTAsIGxjaGlwLT5iYXNlICsgTE9DT01PX0FTRCk7CisJciA9IGxvY29tb19yZWFkbChsY2hpcC0+YmFzZSArIExPQ09NT19BU0QpOworCXIgfD0gMHg4MDAwOworCWxvY29tb193cml0ZWwociwgbGNoaXAtPmJhc2UgKyBMT0NPTU9fQVNEKTsKKworCWxvY29tb193cml0ZWwoNiArIDggKyAzMjAgKyAzMCAtIDEwIC0gMTI4ICsgNCwgbGNoaXAtPmJhc2UgKyBMT0NPTU9fSFNEKTsKKwlyID0gbG9jb21vX3JlYWRsKGxjaGlwLT5iYXNlICsgTE9DT01PX0hTRCk7CisJciB8PSAweDgwMDA7CisJbG9jb21vX3dyaXRlbChyLCBsY2hpcC0+YmFzZSArIExPQ09NT19IU0QpOworCisJbG9jb21vX3dyaXRlbCgxMjggLyA4LCBsY2hpcC0+YmFzZSArIExPQ09NT19IU0MpOworCisJLyogWE9OICovCisJbG9jb21vX3dyaXRlbCgweDgwLCBsY2hpcC0+YmFzZSArIExPQ09NT19UQURDKTsKKwl1ZGVsYXkoMTAwMCk7CisJLyogQ0xLOU1FTiAqLworCXIgPSBsb2NvbW9fcmVhZGwobGNoaXAtPmJhc2UgKyBMT0NPTU9fVEFEQyk7CisJciB8PSAweDEwOworCWxvY29tb193cml0ZWwociwgbGNoaXAtPmJhc2UgKyBMT0NPTU9fVEFEQyk7CisJdWRlbGF5KDEwMCk7CisKKwkvKiBpbml0IERBQyAqLworCXIgPSBsb2NvbW9fcmVhZGwobGNoaXAtPmJhc2UgKyBMT0NPTU9fREFDKTsKKwlyIHw9IExPQ09NT19EQUNfU0NMT0VCIHwgTE9DT01PX0RBQ19TREFPRUI7CisJbG9jb21vX3dyaXRlbChyLCBsY2hpcC0+YmFzZSArIExPQ09NT19EQUMpOworCisJciA9IGxvY29tb19yZWFkbChsY2hpcC0+YmFzZSArIExPQ09NT19WRVIpOworCXByaW50ayhLRVJOX0lORk8gIkxvQ29NbyBDaGlwOiAlbHUlbHVcbiIsIChyID4+IDgpLCAociAmIDB4ZmYpKTsKKworCS8qCisJICogVGhlIGludGVycnVwdCBjb250cm9sbGVyIG11c3QgYmUgaW5pdGlhbGlzZWQgYmVmb3JlIGFueQorCSAqIG90aGVyIGRldmljZSB0byBlbnN1cmUgdGhhdCB0aGUgaW50ZXJydXB0cyBhcmUgYXZhaWxhYmxlLgorCSAqLworCWlmIChsY2hpcC0+aXJxICE9IE5PX0lSUSkKKwkJbG9jb21vX3NldHVwX2lycShsY2hpcCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb2NvbW9fZGV2aWNlcyk7IGkrKykKKwkJbG9jb21vX2luaXRfb25lX2NoaWxkKGxjaGlwLCAmbG9jb21vX2RldmljZXNbaV0pOworCisJcmV0dXJuIDA7CisKKyBvdXQ6CisJa2ZyZWUobGNoaXApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fbG9jb21vX3JlbW92ZShzdHJ1Y3QgbG9jb21vICpsY2hpcCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsLCAqbjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShsLCBuLCAmbGNoaXAtPmRldi0+Y2hpbGRyZW4pIHsKKwkJc3RydWN0IGRldmljZSAqZCA9IGxpc3RfdG9fZGV2KGwpOworCisJCWRldmljZV91bnJlZ2lzdGVyKGQpOworCX0KKworCWlmIChsY2hpcC0+aXJxICE9IE5PX0lSUSkgeworCQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihsY2hpcC0+aXJxLCBOVUxMKTsKKwkJc2V0X2lycV9kYXRhKGxjaGlwLT5pcnEsIE5VTEwpOworCX0KKworCWlvdW5tYXAobGNoaXAtPmJhc2UpOworCWtmcmVlKGxjaGlwKTsKK30KKworc3RhdGljIGludCBsb2NvbW9fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlpbnQgaXJxOworCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIW1lbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKworCXJldHVybiBfX2xvY29tb19wcm9iZShkZXYsIG1lbSwgaXJxKTsKK30KKworc3RhdGljIGludCBsb2NvbW9fcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbG9jb21vICpsY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGxjaGlwKSB7CisJCV9fbG9jb21vX3JlbW92ZShsY2hpcCk7CisJCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICoJTm90IHN1cmUgaWYgdGhpcyBzaG91bGQgYmUgb24gdGhlIHN5c3RlbSBidXMgb3Igbm90IHlldC4KKyAqCVdlIHJlYWxseSB3YW50IHNvbWUgd2F5IHRvIHJlZ2lzdGVyIGEgc3lzdGVtIGRldmljZSBhdAorICoJdGhlIHBlci1tYWNoaW5lIGxldmVsLCBhbmQgdGhlbiBoYXZlIHRoaXMgZHJpdmVyIHBpY2sKKyAqCXVwIHRoZSByZWdpc3RlcmVkIGRldmljZXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBsb2NvbW9fZGV2aWNlX2RyaXZlciA9IHsKKwkubmFtZQkJPSAibG9jb21vIiwKKwkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUJCT0gbG9jb21vX3Byb2JlLAorCS5yZW1vdmUJCT0gbG9jb21vX3JlbW92ZSwKK307CisKKy8qCisgKglHZXQgdGhlIHBhcmVudCBkZXZpY2UgZHJpdmVyICh1cykgc3RydWN0dXJlCisgKglmcm9tIGEgY2hpbGQgZnVuY3Rpb24gZGV2aWNlCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxvY29tbyAqbG9jb21vX2NoaXBfZHJpdmVyKHN0cnVjdCBsb2NvbW9fZGV2ICpsZGV2KQoreworCXJldHVybiAoc3RydWN0IGxvY29tbyAqKWRldl9nZXRfZHJ2ZGF0YShsZGV2LT5kZXYucGFyZW50KTsKK30KKwordm9pZCBsb2NvbW9fZ3Bpb19zZXRfZGlyKHN0cnVjdCBsb2NvbW9fZGV2ICpsZGV2LCB1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IGRpcikKK3sKKwlzdHJ1Y3QgbG9jb21vICpsY2hpcCA9IGxvY29tb19jaGlwX2RyaXZlcihsZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCByOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxjaGlwLT5sb2NrLCBmbGFncyk7CisKKwlyID0gbG9jb21vX3JlYWRsKGxjaGlwLT5iYXNlICsgTE9DT01PX0dQRCk7CisJciAmPSB+Yml0czsKKwlsb2NvbW9fd3JpdGVsKHIsIGxjaGlwLT5iYXNlICsgTE9DT01PX0dQRCk7CisKKwlyID0gbG9jb21vX3JlYWRsKGxjaGlwLT5iYXNlICsgTE9DT01PX0dQRSk7CisJaWYgKGRpcikKKwkJciB8PSBiaXRzOworCWVsc2UKKwkJciAmPSB+Yml0czsKKwlsb2NvbW9fd3JpdGVsKHIsIGxjaGlwLT5iYXNlICsgTE9DT01PX0dQRSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsY2hpcC0+bG9jaywgZmxhZ3MpOworfQorCit1bnNpZ25lZCBpbnQgbG9jb21vX2dwaW9fcmVhZF9sZXZlbChzdHJ1Y3QgbG9jb21vX2RldiAqbGRldiwgdW5zaWduZWQgaW50IGJpdHMpCit7CisJc3RydWN0IGxvY29tbyAqbGNoaXAgPSBsb2NvbW9fY2hpcF9kcml2ZXIobGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxjaGlwLT5sb2NrLCBmbGFncyk7CisJcmV0ID0gbG9jb21vX3JlYWRsKGxjaGlwLT5iYXNlICsgTE9DT01PX0dQTCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGNoaXAtPmxvY2ssIGZsYWdzKTsKKworCXJldCAmPSBiaXRzOworCXJldHVybiByZXQ7Cit9CisKK3Vuc2lnbmVkIGludCBsb2NvbW9fZ3Bpb19yZWFkX291dHB1dChzdHJ1Y3QgbG9jb21vX2RldiAqbGRldiwgdW5zaWduZWQgaW50IGJpdHMpCit7CisJc3RydWN0IGxvY29tbyAqbGNoaXAgPSBsb2NvbW9fY2hpcF9kcml2ZXIobGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxjaGlwLT5sb2NrLCBmbGFncyk7CisJcmV0ID0gbG9jb21vX3JlYWRsKGxjaGlwLT5iYXNlICsgTE9DT01PX0dQTyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGNoaXAtPmxvY2ssIGZsYWdzKTsKKworCXJldCAmPSBiaXRzOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgbG9jb21vX2dwaW9fd3JpdGUoc3RydWN0IGxvY29tb19kZXYgKmxkZXYsIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgc2V0KQoreworCXN0cnVjdCBsb2NvbW8gKmxjaGlwID0gbG9jb21vX2NoaXBfZHJpdmVyKGxkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGNoaXAtPmxvY2ssIGZsYWdzKTsKKworCXIgPSBsb2NvbW9fcmVhZGwobGNoaXAtPmJhc2UgKyBMT0NPTU9fR1BPKTsKKwlpZiAoc2V0KQorCQlyIHw9IGJpdHM7CisJZWxzZQorCQlyICY9IH5iaXRzOworCWxvY29tb193cml0ZWwociwgbGNoaXAtPmJhc2UgKyBMT0NPTU9fR1BPKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxjaGlwLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGxvY29tb19tNjIzMzJfc2VuZGJpdCh2b2lkICptYXBiYXNlLCBpbnQgYml0KQoreworCXVuc2lnbmVkIGludCByOworCisJciA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX0RBQyk7CisJciAmPSAgfihMT0NPTU9fREFDX1NDTE9FQik7CisJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX0RBQyk7CisJdWRlbGF5KERBQ19MT1dfU0VUVVBfVElNRSk7CS8qIDMwMCBuc2VjICovCisJdWRlbGF5KERBQ19EQVRBX0hPTERfVElNRSk7CS8qIDMwMCBuc2VjICovCisJciA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX0RBQyk7CisJciAmPSAgfihMT0NPTU9fREFDX1NDTE9FQik7CisJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX0RBQyk7CisJdWRlbGF5KERBQ19MT1dfU0VUVVBfVElNRSk7CS8qIDMwMCBuc2VjICovCisJdWRlbGF5KERBQ19TQ0xfTE9XX0hPTERfVElNRSk7CS8qIDQuNyB1c2VjICovCisKKwlpZiAoYml0ICYgMSkgeworCQlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fREFDKTsKKwkJciB8PSAgTE9DT01PX0RBQ19TREFPRUI7CisJCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19EQUMpOworCQl1ZGVsYXkoREFDX0hJR0hfU0VUVVBfVElNRSk7CS8qIDEwMDAgbnNlYyAqLworCX0gZWxzZSB7CisJCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19EQUMpOworCQlyICY9ICB+KExPQ09NT19EQUNfU0RBT0VCKTsKKwkJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX0RBQyk7CisJCXVkZWxheShEQUNfTE9XX1NFVFVQX1RJTUUpOwkvKiAzMDAgbnNlYyAqLworCX0KKworCXVkZWxheShEQUNfREFUQV9TRVRVUF9USU1FKTsJLyogMjUwIG5zZWMgKi8KKwlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fREFDKTsKKwlyIHw9ICBMT0NPTU9fREFDX1NDTE9FQjsKKwlsb2NvbW9fd3JpdGVsKHIsIG1hcGJhc2UgKyBMT0NPTU9fREFDKTsKKwl1ZGVsYXkoREFDX0hJR0hfU0VUVVBfVElNRSk7CS8qIDEwMDAgbnNlYyAqLworCXVkZWxheShEQUNfU0NMX0hJR0hfSE9MRF9USU1FKTsJLyogIDQuMCB1c2VjICovCit9CisKK3ZvaWQgbG9jb21vX202MjMzMl9zZW5kZGF0YShzdHJ1Y3QgbG9jb21vX2RldiAqbGRldiwgdW5zaWduZWQgaW50IGRhY19kYXRhLCBpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgbG9jb21vICpsY2hpcCA9IGxvY29tb19jaGlwX2RyaXZlcihsZGV2KTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyIGRhdGE7CisJdW5zaWduZWQgaW50IHI7CisJdm9pZCAqbWFwYmFzZSA9IGxjaGlwLT5iYXNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGNoaXAtPmxvY2ssIGZsYWdzKTsKKworCS8qIFN0YXJ0ICovCisJdWRlbGF5KERBQ19CVVNfRlJFRV9USU1FKTsJLyogNS4wIHVzZWMgKi8KKwlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fREFDKTsKKwlyIHw9ICBMT0NPTU9fREFDX1NDTE9FQiB8IExPQ09NT19EQUNfU0RBT0VCOworCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19EQUMpOworCXVkZWxheShEQUNfSElHSF9TRVRVUF9USU1FKTsJLyogMTAwMCBuc2VjICovCisJdWRlbGF5KERBQ19TQ0xfSElHSF9IT0xEX1RJTUUpOwkvKiA0LjAgdXNlYyAqLworCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19EQUMpOworCXIgJj0gIH4oTE9DT01PX0RBQ19TREFPRUIpOworCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19EQUMpOworCXVkZWxheShEQUNfU1RBUlRfSE9MRF9USU1FKTsJLyogNS4wIHVzZWMgKi8KKwl1ZGVsYXkoREFDX0RBVEFfSE9MRF9USU1FKTsJLyogMzAwIG5zZWMgKi8KKworCS8qIFNlbmQgc2xhdmUgYWRkcmVzcyBhbmQgVyBiaXQgKExTQiBpcyBXIGJpdCkgKi8KKwlkYXRhID0gKE02MjMzMl9TTEFWRV9BRERSIDw8IDEpIHwgTTYyMzMyX1dfQklUOworCWZvciAoaSA9IDE7IGkgPD0gODsgaSsrKSB7CisJCWxvY29tb19tNjIzMzJfc2VuZGJpdChtYXBiYXNlLCBkYXRhID4+ICg4IC0gaSkpOworCX0KKworCS8qIENoZWNrIEEgYml0ICovCisJciA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX0RBQyk7CisJciAmPSAgfihMT0NPTU9fREFDX1NDTE9FQik7CisJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX0RBQyk7CisJdWRlbGF5KERBQ19MT1dfU0VUVVBfVElNRSk7CS8qIDMwMCBuc2VjICovCisJdWRlbGF5KERBQ19TQ0xfTE9XX0hPTERfVElNRSk7CS8qIDQuNyB1c2VjICovCisJciA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX0RBQyk7CisJciAmPSAgfihMT0NPTU9fREFDX1NEQU9FQik7CisJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX0RBQyk7CisJdWRlbGF5KERBQ19MT1dfU0VUVVBfVElNRSk7CS8qIDMwMCBuc2VjICovCisJciA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX0RBQyk7CisJciB8PSAgTE9DT01PX0RBQ19TQ0xPRUI7CisJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX0RBQyk7CisJdWRlbGF5KERBQ19ISUdIX1NFVFVQX1RJTUUpOwkvKiAxMDAwIG5zZWMgKi8KKwl1ZGVsYXkoREFDX1NDTF9ISUdIX0hPTERfVElNRSk7CS8qIDQuNyB1c2VjICovCisJaWYgKGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX0RBQykgJiBMT0NPTU9fREFDX1NEQU9FQikgewkvKiBIaWdoIGlzIGVycm9yICovCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImxvY29tbzogbTYyMzMyX3NlbmRkYXRhIEVycm9yIDFcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogU2VuZCBTdWIgYWRkcmVzcyAoTFNCIGlzIGNoYW5uZWwgc2VsZWN0KSAqLworCS8qICAgIGNoYW5uZWwgPSAwIDogY2gxIHNlbGVjdCAgICAgICAgICAgICAgKi8KKwkvKiAgICAgICAgICAgID0gMSA6IGNoMiBzZWxlY3QgICAgICAgICAgICAgICovCisJZGF0YSA9IE02MjMzMl9TVUJfQUREUiArIGNoYW5uZWw7CisJZm9yIChpID0gMTsgaSA8PSA4OyBpKyspIHsKKwkJbG9jb21vX202MjMzMl9zZW5kYml0KG1hcGJhc2UsIGRhdGEgPj4gKDggLSBpKSk7CisJfQorCisJLyogQ2hlY2sgQSBiaXQgKi8KKwlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fREFDKTsKKwlyICY9ICB+KExPQ09NT19EQUNfU0NMT0VCKTsKKwlsb2NvbW9fd3JpdGVsKHIsIG1hcGJhc2UgKyBMT0NPTU9fREFDKTsKKwl1ZGVsYXkoREFDX0xPV19TRVRVUF9USU1FKTsJLyogMzAwIG5zZWMgKi8KKwl1ZGVsYXkoREFDX1NDTF9MT1dfSE9MRF9USU1FKTsJLyogNC43IHVzZWMgKi8KKwlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fREFDKTsKKwlyICY9ICB+KExPQ09NT19EQUNfU0RBT0VCKTsKKwlsb2NvbW9fd3JpdGVsKHIsIG1hcGJhc2UgKyBMT0NPTU9fREFDKTsKKwl1ZGVsYXkoREFDX0xPV19TRVRVUF9USU1FKTsJLyogMzAwIG5zZWMgKi8KKwlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fREFDKTsKKwlyIHw9ICBMT0NPTU9fREFDX1NDTE9FQjsKKwlsb2NvbW9fd3JpdGVsKHIsIG1hcGJhc2UgKyBMT0NPTU9fREFDKTsKKwl1ZGVsYXkoREFDX0hJR0hfU0VUVVBfVElNRSk7CS8qIDEwMDAgbnNlYyAqLworCXVkZWxheShEQUNfU0NMX0hJR0hfSE9MRF9USU1FKTsJLyogNC43IHVzZWMgKi8KKwlpZiAobG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fREFDKSAmIExPQ09NT19EQUNfU0RBT0VCKSB7CS8qIEhpZ2ggaXMgZXJyb3IgKi8KKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibG9jb21vOiBtNjIzMzJfc2VuZGRhdGEgRXJyb3IgMlxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBTZW5kIERBQyBkYXRhICovCisJZm9yIChpID0gMTsgaSA8PSA4OyBpKyspIHsKKwkJbG9jb21vX202MjMzMl9zZW5kYml0KG1hcGJhc2UsIGRhY19kYXRhID4+ICg4IC0gaSkpOworCX0KKworCS8qIENoZWNrIEEgYml0ICovCisJciA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX0RBQyk7CisJciAmPSAgfihMT0NPTU9fREFDX1NDTE9FQik7CisJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX0RBQyk7CisJdWRlbGF5KERBQ19MT1dfU0VUVVBfVElNRSk7CS8qIDMwMCBuc2VjICovCisJdWRlbGF5KERBQ19TQ0xfTE9XX0hPTERfVElNRSk7CS8qIDQuNyB1c2VjICovCisJciA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX0RBQyk7CisJciAmPSAgfihMT0NPTU9fREFDX1NEQU9FQik7CisJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX0RBQyk7CisJdWRlbGF5KERBQ19MT1dfU0VUVVBfVElNRSk7CS8qIDMwMCBuc2VjICovCisJciA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX0RBQyk7CisJciB8PSAgTE9DT01PX0RBQ19TQ0xPRUI7CisJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX0RBQyk7CisJdWRlbGF5KERBQ19ISUdIX1NFVFVQX1RJTUUpOwkvKiAxMDAwIG5zZWMgKi8KKwl1ZGVsYXkoREFDX1NDTF9ISUdIX0hPTERfVElNRSk7CS8qIDQuNyB1c2VjICovCisJaWYgKGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX0RBQykgJiBMT0NPTU9fREFDX1NEQU9FQikgewkvKiBIaWdoIGlzIGVycm9yICovCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImxvY29tbzogbTYyMzMyX3NlbmRkYXRhIEVycm9yIDNcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogc3RvcCAqLworCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19EQUMpOworCXIgJj0gIH4oTE9DT01PX0RBQ19TQ0xPRUIpOworCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19EQUMpOworCXVkZWxheShEQUNfTE9XX1NFVFVQX1RJTUUpOwkvKiAzMDAgbnNlYyAqLworCXVkZWxheShEQUNfU0NMX0xPV19IT0xEX1RJTUUpOwkvKiA0LjcgdXNlYyAqLworCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19EQUMpOworCXIgfD0gIExPQ09NT19EQUNfU0NMT0VCOworCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19EQUMpOworCXVkZWxheShEQUNfSElHSF9TRVRVUF9USU1FKTsJLyogMTAwMCBuc2VjICovCisJdWRlbGF5KERBQ19TQ0xfSElHSF9IT0xEX1RJTUUpOwkvKiA0IHVzZWMgKi8KKwlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fREFDKTsKKwlyIHw9ICBMT0NPTU9fREFDX1NEQU9FQjsKKwlsb2NvbW9fd3JpdGVsKHIsIG1hcGJhc2UgKyBMT0NPTU9fREFDKTsKKwl1ZGVsYXkoREFDX0hJR0hfU0VUVVBfVElNRSk7CS8qIDEwMDAgbnNlYyAqLworCXVkZWxheShEQUNfU0NMX0hJR0hfSE9MRF9USU1FKTsJLyogNCB1c2VjICovCisKKwlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fREFDKTsKKwlyIHw9ICBMT0NPTU9fREFDX1NDTE9FQiB8IExPQ09NT19EQUNfU0RBT0VCOworCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19EQUMpOworCXVkZWxheShEQUNfTE9XX1NFVFVQX1RJTUUpOwkvKiAxMDAwIG5zZWMgKi8KKwl1ZGVsYXkoREFDX1NDTF9MT1dfSE9MRF9USU1FKTsJLyogNC43IHVzZWMgKi8KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxjaGlwLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKglMb0NvTW8gIlJlZ2lzdGVyIEFjY2VzcyBCdXMuIgorICoKKyAqCVdlIG1vZGVsIHRoaXMgYXMgYSByZWd1bGFyIGJ1cyB0eXBlLCBhbmQgaGFuZyBkZXZpY2VzIGRpcmVjdGx5CisgKglvZmYgdGhpcy4KKyAqLworc3RhdGljIGludCBsb2NvbW9fbWF0Y2goc3RydWN0IGRldmljZSAqX2Rldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKl9kcnYpCit7CisJc3RydWN0IGxvY29tb19kZXYgKmRldiA9IExPQ09NT19ERVYoX2Rldik7CisJc3RydWN0IGxvY29tb19kcml2ZXIgKmRydiA9IExPQ09NT19EUlYoX2Rydik7CisKKwlyZXR1cm4gZGV2LT5kZXZpZCA9PSBkcnYtPmRldmlkOworfQorCitzdGF0aWMgaW50IGxvY29tb19idXNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbG9jb21vX2RldiAqbGRldiA9IExPQ09NT19ERVYoZGV2KTsKKwlzdHJ1Y3QgbG9jb21vX2RyaXZlciAqZHJ2ID0gTE9DT01PX0RSVihkZXYtPmRyaXZlcik7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZHJ2ICYmIGRydi0+c3VzcGVuZCkKKwkJcmV0ID0gZHJ2LT5zdXNwZW5kKGxkZXYsIHN0YXRlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGxvY29tb19idXNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbG9jb21vX2RldiAqbGRldiA9IExPQ09NT19ERVYoZGV2KTsKKwlzdHJ1Y3QgbG9jb21vX2RyaXZlciAqZHJ2ID0gTE9DT01PX0RSVihkZXYtPmRyaXZlcik7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZHJ2ICYmIGRydi0+cmVzdW1lKQorCQlyZXQgPSBkcnYtPnJlc3VtZShsZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGxvY29tb19idXNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBsb2NvbW9fZGV2ICpsZGV2ID0gTE9DT01PX0RFVihkZXYpOworCXN0cnVjdCBsb2NvbW9fZHJpdmVyICpkcnYgPSBMT0NPTU9fRFJWKGRldi0+ZHJpdmVyKTsKKwlpbnQgcmV0ID0gLUVOT0RFVjsKKworCWlmIChkcnYtPnByb2JlKQorCQlyZXQgPSBkcnYtPnByb2JlKGxkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbG9jb21vX2J1c19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBsb2NvbW9fZGV2ICpsZGV2ID0gTE9DT01PX0RFVihkZXYpOworCXN0cnVjdCBsb2NvbW9fZHJpdmVyICpkcnYgPSBMT0NPTU9fRFJWKGRldi0+ZHJpdmVyKTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChkcnYtPnJlbW92ZSkKKwkJcmV0ID0gZHJ2LT5yZW1vdmUobGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGJ1c190eXBlIGxvY29tb19idXNfdHlwZSA9IHsKKwkubmFtZQkJPSAibG9jb21vLWJ1cyIsCisJLm1hdGNoCQk9IGxvY29tb19tYXRjaCwKKwkuc3VzcGVuZAk9IGxvY29tb19idXNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGxvY29tb19idXNfcmVzdW1lLAorfTsKKworaW50IGxvY29tb19kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGxvY29tb19kcml2ZXIgKmRyaXZlcikKK3sKKwlkcml2ZXItPmRydi5wcm9iZSA9IGxvY29tb19idXNfcHJvYmU7CisJZHJpdmVyLT5kcnYucmVtb3ZlID0gbG9jb21vX2J1c19yZW1vdmU7CisJZHJpdmVyLT5kcnYuYnVzID0gJmxvY29tb19idXNfdHlwZTsKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXItPmRydik7Cit9CisKK3ZvaWQgbG9jb21vX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBsb2NvbW9fZHJpdmVyICpkcml2ZXIpCit7CisJZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKK30KKworc3RhdGljIGludCBfX2luaXQgbG9jb21vX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0ID0gYnVzX3JlZ2lzdGVyKCZsb2NvbW9fYnVzX3R5cGUpOworCWlmIChyZXQgPT0gMCkKKwkJZHJpdmVyX3JlZ2lzdGVyKCZsb2NvbW9fZGV2aWNlX2RyaXZlcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGxvY29tb19leGl0KHZvaWQpCit7CisJZHJpdmVyX3VucmVnaXN0ZXIoJmxvY29tb19kZXZpY2VfZHJpdmVyKTsKKwlidXNfdW5yZWdpc3RlcigmbG9jb21vX2J1c190eXBlKTsKK30KKworbW9kdWxlX2luaXQobG9jb21vX2luaXQpOworbW9kdWxlX2V4aXQobG9jb21vX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNoYXJwIExvQ29NbyBjb3JlIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSm9obiBMZW56IDxsZW56QGNzLndpc2MuZWR1PiIpOworCitFWFBPUlRfU1lNQk9MKGxvY29tb19kcml2ZXJfcmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTChsb2NvbW9fZHJpdmVyX3VucmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTChsb2NvbW9fZ3Bpb19zZXRfZGlyKTsKK0VYUE9SVF9TWU1CT0wobG9jb21vX2dwaW9fcmVhZF9sZXZlbCk7CitFWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3JlYWRfb3V0cHV0KTsKK0VYUE9SVF9TWU1CT0wobG9jb21vX2dwaW9fd3JpdGUpOworRVhQT1JUX1NZTUJPTChsb2NvbW9fbTYyMzMyX3NlbmRkYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9ydGN0aW1lLmMgYi9hcmNoL2FybS9jb21tb24vcnRjdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOTdlNzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb21tb24vcnRjdGltZS5jCkBAIC0wLDAgKzEsNTA2IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2NvbW1vbi9ydGN0aW1lLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICogIEJhc2VkIG9uIHNhMTEwMC1ydGMuYywgTmlscyBGYWVyYmVyLCBDSUgsIE5pY29sYXMgUGl0cmUuCisgKiAgQmFzZWQgb24gcnRjLmMgYnkgUGF1bCBHb3J0bWFrZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vcnRjLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorCitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocnRjX3dhaXQpOworc3RhdGljIHN0cnVjdCBmYXN5bmNfc3RydWN0ICpydGNfYXN5bmNfcXVldWU7CisKKy8qCisgKiBydGNfbG9jayBwcm90ZWN0cyBydGNfaXJxX2RhdGEKKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhydGNfbG9jayk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBydGNfaXJxX2RhdGE7CisKKy8qCisgKiBydGNfc2VtIHByb3RlY3RzIHJ0Y19pbnVzZSBhbmQgcnRjX29wcworICovCitzdGF0aWMgREVDTEFSRV9NVVRFWChydGNfc2VtKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJ0Y19pbnVzZTsKK3N0YXRpYyBzdHJ1Y3QgcnRjX29wcyAqcnRjX29wczsKKworI2RlZmluZSBydGNfZXBvY2ggMTkwMFVMCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRheXNfaW5fbW9udGhbXSA9IHsKKwkzMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxCit9OworCisjZGVmaW5lIExFQVBTX1RIUlVfRU5EX09GKHkpICgoeSkvNCAtICh5KS8xMDAgKyAoeSkvNDAwKQorI2RlZmluZSBMRUFQX1lFQVIoeWVhcikgKCghKHllYXIgJSA0KSAmJiAoeWVhciAlIDEwMCkpIHx8ICEoeWVhciAlIDQwMCkpCisKK3N0YXRpYyBpbnQgbW9udGhfZGF5cyh1bnNpZ25lZCBpbnQgbW9udGgsIHVuc2lnbmVkIGludCB5ZWFyKQoreworCXJldHVybiBkYXlzX2luX21vbnRoW21vbnRoXSArIChMRUFQX1lFQVIoeWVhcikgJiYgbW9udGggPT0gMSk7Cit9CisKKy8qCisgKiBDb252ZXJ0IHNlY29uZHMgc2luY2UgMDEtMDEtMTk3MCAwMDowMDowMCB0byBHcmVnb3JpYW4gZGF0ZS4KKyAqLwordm9pZCBydGNfdGltZV90b190bSh1bnNpZ25lZCBsb25nIHRpbWUsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJaW50IGRheXMsIG1vbnRoLCB5ZWFyOworCisJZGF5cyA9IHRpbWUgLyA4NjQwMDsKKwl0aW1lIC09IGRheXMgKiA4NjQwMDsKKworCXRtLT50bV93ZGF5ID0gKGRheXMgKyA0KSAlIDc7CisKKwl5ZWFyID0gMTk3MCArIGRheXMgLyAzNjU7CisJZGF5cyAtPSAoeWVhciAtIDE5NzApICogMzY1CisJICAgICAgICArIExFQVBTX1RIUlVfRU5EX09GKHllYXIgLSAxKQorCSAgICAgICAgLSBMRUFQU19USFJVX0VORF9PRigxOTcwIC0gMSk7CisJaWYgKGRheXMgPCAwKSB7CisJCXllYXIgLT0gMTsKKwkJZGF5cyArPSAzNjUgKyBMRUFQX1lFQVIoeWVhcik7CisJfQorCXRtLT50bV95ZWFyID0geWVhciAtIDE5MDA7CisJdG0tPnRtX3lkYXkgPSBkYXlzICsgMTsKKworCWZvciAobW9udGggPSAwOyBtb250aCA8IDExOyBtb250aCsrKSB7CisJCWludCBuZXdkYXlzOworCisJCW5ld2RheXMgPSBkYXlzIC0gbW9udGhfZGF5cyhtb250aCwgeWVhcik7CisJCWlmIChuZXdkYXlzIDwgMCkKKwkJCWJyZWFrOworCQlkYXlzID0gbmV3ZGF5czsKKwl9CisJdG0tPnRtX21vbiA9IG1vbnRoOworCXRtLT50bV9tZGF5ID0gZGF5cyArIDE7CisKKwl0bS0+dG1faG91ciA9IHRpbWUgLyAzNjAwOworCXRpbWUgLT0gdG0tPnRtX2hvdXIgKiAzNjAwOworCXRtLT50bV9taW4gPSB0aW1lIC8gNjA7CisJdG0tPnRtX3NlYyA9IHRpbWUgLSB0bS0+dG1fbWluICogNjA7Cit9CitFWFBPUlRfU1lNQk9MKHJ0Y190aW1lX3RvX3RtKTsKKworLyoKKyAqIERvZXMgdGhlIHJ0Y190aW1lIHJlcHJlc2VudCBhIHZhbGlkIGRhdGUvdGltZT8KKyAqLworaW50IHJ0Y192YWxpZF90bShzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCWlmICh0bS0+dG1feWVhciA8IDcwIHx8CisJICAgIHRtLT50bV9tb24gPj0gMTIgfHwKKwkgICAgdG0tPnRtX21kYXkgPCAxIHx8CisJICAgIHRtLT50bV9tZGF5ID4gbW9udGhfZGF5cyh0bS0+dG1fbW9uLCB0bS0+dG1feWVhciArIDE5MDApIHx8CisJICAgIHRtLT50bV9ob3VyID49IDI0IHx8CisJICAgIHRtLT50bV9taW4gPj0gNjAgfHwKKwkgICAgdG0tPnRtX3NlYyA+PSA2MCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wocnRjX3ZhbGlkX3RtKTsKKworLyoKKyAqIENvbnZlcnQgR3JlZ29yaWFuIGRhdGUgdG8gc2Vjb25kcyBzaW5jZSAwMS0wMS0xOTcwIDAwOjAwOjAwLgorICovCitpbnQgcnRjX3RtX3RvX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0bSwgdW5zaWduZWQgbG9uZyAqdGltZSkKK3sKKwkqdGltZSA9IG1rdGltZSh0bS0+dG1feWVhciArIDE5MDAsIHRtLT50bV9tb24gKyAxLCB0bS0+dG1fbWRheSwKKwkJICAgICAgIHRtLT50bV9ob3VyLCB0bS0+dG1fbWluLCB0bS0+dG1fc2VjKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChydGNfdG1fdG9fdGltZSk7CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIG5leHQgYWxhcm0gdGltZSBnaXZlbiB0aGUgcmVxdWVzdGVkIGFsYXJtIHRpbWUgbWFzaworICogYW5kIHRoZSBjdXJyZW50IHRpbWUuCisgKgorICogRklYTUU6IGZvciBub3csIHdlIGp1c3QgY29weSB0aGUgYWxhcm0gdGltZSBiZWNhdXNlIHdlJ3JlIGxhenkgKGFuZAorICogaXMgdGhlcmVmb3JlIGJ1Z2d5IC0gc2V0dGluZyBhIDEwYW0gYWxhcm0gYXQgOHBtIHdpbGwgbm90IHJlc3VsdCBpbgorICogdGhlIGFsYXJtIHRyaWdnZXJpbmcuKQorICovCit2b2lkIHJ0Y19uZXh0X2FsYXJtX3RpbWUoc3RydWN0IHJ0Y190aW1lICpuZXh0LCBzdHJ1Y3QgcnRjX3RpbWUgKm5vdywgc3RydWN0IHJ0Y190aW1lICphbHJtKQoreworCW5leHQtPnRtX3llYXIgPSBub3ctPnRtX3llYXI7CisJbmV4dC0+dG1fbW9uID0gbm93LT50bV9tb247CisJbmV4dC0+dG1fbWRheSA9IG5vdy0+dG1fbWRheTsKKwluZXh0LT50bV9ob3VyID0gYWxybS0+dG1faG91cjsKKwluZXh0LT50bV9taW4gPSBhbHJtLT50bV9taW47CisJbmV4dC0+dG1fc2VjID0gYWxybS0+dG1fc2VjOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcnRjX3JlYWRfdGltZShzdHJ1Y3QgcnRjX29wcyAqb3BzLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCW1lbXNldCh0bSwgMCwgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpOworCW9wcy0+cmVhZF90aW1lKHRtKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcnRjX3NldF90aW1lKHN0cnVjdCBydGNfb3BzICpvcHMsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJaW50IHJldDsKKworCXJldCA9IHJ0Y192YWxpZF90bSh0bSk7CisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBvcHMtPnNldF90aW1lKHRtKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJ0Y19yZWFkX2FsYXJtKHN0cnVjdCBydGNfb3BzICpvcHMsIHN0cnVjdCBydGNfd2thbHJtICphbHJtKQoreworCWludCByZXQgPSAtRUlOVkFMOworCWlmIChvcHMtPnJlYWRfYWxhcm0pIHsKKwkJbWVtc2V0KGFscm0sIDAsIHNpemVvZihzdHJ1Y3QgcnRjX3drYWxybSkpOworCQlvcHMtPnJlYWRfYWxhcm0oYWxybSk7CisJCXJldCA9IDA7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJ0Y19zZXRfYWxhcm0oc3RydWN0IHJ0Y19vcHMgKm9wcywgc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJaWYgKG9wcy0+c2V0X2FsYXJtKQorCQlyZXQgPSBvcHMtPnNldF9hbGFybShhbHJtKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJ0Y191cGRhdGUodW5zaWduZWQgbG9uZyBudW0sIHVuc2lnbmVkIGxvbmcgZXZlbnRzKQoreworCXNwaW5fbG9jaygmcnRjX2xvY2spOworCXJ0Y19pcnFfZGF0YSA9IChydGNfaXJxX2RhdGEgKyAobnVtIDw8IDgpKSB8IGV2ZW50czsKKwlzcGluX3VubG9jaygmcnRjX2xvY2spOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZydGNfd2FpdCk7CisJa2lsbF9mYXN5bmMoJnJ0Y19hc3luY19xdWV1ZSwgU0lHSU8sIFBPTExfSU4pOworfQorRVhQT1JUX1NZTUJPTChydGNfdXBkYXRlKTsKKworCitzdGF0aWMgc3NpemVfdAorcnRjX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCXVuc2lnbmVkIGxvbmcgZGF0YTsKKwlzc2l6ZV90IHJldDsKKworCWlmIChjb3VudCA8IHNpemVvZih1bnNpZ25lZCBsb25nKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhZGRfd2FpdF9xdWV1ZSgmcnRjX3dhaXQsICZ3YWl0KTsKKwlkbyB7CisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKworCQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisJCWRhdGEgPSBydGNfaXJxX2RhdGE7CisJCXJ0Y19pcnFfZGF0YSA9IDA7CisJCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOworCisJCWlmIChkYXRhICE9IDApIHsKKwkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCXJldCA9IC1FQUdBSU47CisJCQlicmVhazsKKwkJfQorCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXJldCA9IC1FUkVTVEFSVFNZUzsKKwkJCWJyZWFrOworCQl9CisJCXNjaGVkdWxlKCk7CisJfSB3aGlsZSAoMSk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcnRjX3dhaXQsICZ3YWl0KTsKKworCWlmIChyZXQgPT0gMCkgeworCQlyZXQgPSBwdXRfdXNlcihkYXRhLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilidWYpOworCQlpZiAocmV0ID09IDApCisJCQlyZXQgPSBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnRjX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJdW5zaWduZWQgbG9uZyBkYXRhOworCisJcG9sbF93YWl0KGZpbGUsICZydGNfd2FpdCwgd2FpdCk7CisKKwlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisJZGF0YSA9IHJ0Y19pcnFfZGF0YTsKKwlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCXJldHVybiBkYXRhICE9IDAgPyBQT0xMSU4gfCBQT0xMUkROT1JNIDogMDsKK30KKworc3RhdGljIGludCBydGNfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHJ0Y19vcHMgKm9wcyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcnRjX3RpbWUgdG07CisJc3RydWN0IHJ0Y193a2Fscm0gYWxybTsKKwl2b2lkIF9fdXNlciAqdWFyZyA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSVENfQUxNX1JFQUQ6CisJCXJldCA9IHJ0Y19yZWFkX2FsYXJtKG9wcywgJmFscm0pOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJCXJldCA9IGNvcHlfdG9fdXNlcih1YXJnLCAmYWxybS50aW1lLCBzaXplb2YodG0pKTsKKwkJaWYgKHJldCkKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWJyZWFrOworCisJY2FzZSBSVENfQUxNX1NFVDoKKwkJcmV0ID0gY29weV9mcm9tX3VzZXIoJmFscm0udGltZSwgdWFyZywgc2l6ZW9mKHRtKSk7CisJCWlmIChyZXQpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCQlhbHJtLmVuYWJsZWQgPSAwOworCQlhbHJtLnBlbmRpbmcgPSAwOworCQlhbHJtLnRpbWUudG1fbWRheSA9IC0xOworCQlhbHJtLnRpbWUudG1fbW9uID0gLTE7CisJCWFscm0udGltZS50bV95ZWFyID0gLTE7CisJCWFscm0udGltZS50bV93ZGF5ID0gLTE7CisJCWFscm0udGltZS50bV95ZGF5ID0gLTE7CisJCWFscm0udGltZS50bV9pc2RzdCA9IC0xOworCQlyZXQgPSBydGNfc2V0X2FsYXJtKG9wcywgJmFscm0pOworCQlicmVhazsKKworCWNhc2UgUlRDX1JEX1RJTUU6CisJCXJ0Y19yZWFkX3RpbWUob3BzLCAmdG0pOworCQlyZXQgPSBjb3B5X3RvX3VzZXIodWFyZywgJnRtLCBzaXplb2YodG0pKTsKKwkJaWYgKHJldCkKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWJyZWFrOworCisJY2FzZSBSVENfU0VUX1RJTUU6CisJCWlmICghY2FwYWJsZShDQVBfU1lTX1RJTUUpKSB7CisJCQlyZXQgPSAtRUFDQ0VTOworCQkJYnJlYWs7CisJCX0KKwkJcmV0ID0gY29weV9mcm9tX3VzZXIoJnRtLCB1YXJnLCBzaXplb2YodG0pKTsKKwkJaWYgKHJldCkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisJCXJldCA9IHJ0Y19zZXRfdGltZShvcHMsICZ0bSk7CisJCWJyZWFrOworCisJY2FzZSBSVENfRVBPQ0hfU0VUOgorI2lmbmRlZiBydGNfZXBvY2gKKwkJLyoKKwkJICogVGhlcmUgd2VyZSBubyBSVEMgY2xvY2tzIGJlZm9yZSAxOTAwLgorCQkgKi8KKwkJaWYgKGFyZyA8IDE5MDApIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19USU1FKSkgeworCQkJcmV0ID0gLUVBQ0NFUzsKKwkJCWJyZWFrOworCQl9CisJCXJ0Y19lcG9jaCA9IGFyZzsKKwkJcmV0ID0gMDsKKyNlbmRpZgorCQlicmVhazsKKworCWNhc2UgUlRDX0VQT0NIX1JFQUQ6CisJCXJldCA9IHB1dF91c2VyKHJ0Y19lcG9jaCwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopdWFyZyk7CisJCWJyZWFrOworCisJY2FzZSBSVENfV0tBTE1fU0VUOgorCQlyZXQgPSBjb3B5X2Zyb21fdXNlcigmYWxybSwgdWFyZywgc2l6ZW9mKGFscm0pKTsKKwkJaWYgKHJldCkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisJCXJldCA9IHJ0Y19zZXRfYWxhcm0ob3BzLCAmYWxybSk7CisJCWJyZWFrOworCisJY2FzZSBSVENfV0tBTE1fUkQ6CisJCXJldCA9IHJ0Y19yZWFkX2FsYXJtKG9wcywgJmFscm0pOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJCXJldCA9IGNvcHlfdG9fdXNlcih1YXJnLCAmYWxybSwgc2l6ZW9mKGFscm0pKTsKKwkJaWYgKHJldCkKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJaWYgKG9wcy0+aW9jdGwpCisJCQlyZXQgPSBvcHMtPmlvY3RsKGNtZCwgYXJnKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcnRjX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IHJldDsKKworCWRvd24oJnJ0Y19zZW0pOworCisJaWYgKHJ0Y19pbnVzZSkgeworCQlyZXQgPSAtRUJVU1k7CisJfSBlbHNlIGlmICghcnRjX29wcyB8fCAhdHJ5X21vZHVsZV9nZXQocnRjX29wcy0+b3duZXIpKSB7CisJCXJldCA9IC1FTk9ERVY7CisJfSBlbHNlIHsKKwkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcnRjX29wczsKKworCQlyZXQgPSBydGNfb3BzLT5vcGVuID8gcnRjX29wcy0+b3BlbigpIDogMDsKKwkJaWYgKHJldCA9PSAwKSB7CisJCQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisJCQlydGNfaXJxX2RhdGEgPSAwOworCQkJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CisKKwkJCXJ0Y19pbnVzZSA9IDE7CisJCX0KKwl9CisJdXAoJnJ0Y19zZW0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBydGNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgcnRjX29wcyAqb3BzID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKG9wcy0+cmVsZWFzZSkKKwkJb3BzLT5yZWxlYXNlKCk7CisKKwlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisJcnRjX2lycV9kYXRhID0gMDsKKwlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCW1vZHVsZV9wdXQocnRjX29wcy0+b3duZXIpOworCXJ0Y19pbnVzZSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGNfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKK3sKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZydGNfYXN5bmNfcXVldWUpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBydGNfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmxsc2VlawkJPSBub19sbHNlZWssCisJLnJlYWQJCT0gcnRjX3JlYWQsCisJLnBvbGwJCT0gcnRjX3BvbGwsCisJLmlvY3RsCQk9IHJ0Y19pb2N0bCwKKwkub3BlbgkJPSBydGNfb3BlbiwKKwkucmVsZWFzZQk9IHJ0Y19yZWxlYXNlLAorCS5mYXN5bmMJCT0gcnRjX2Zhc3luYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBydGNfbWlzY2RldiA9IHsKKwkubWlub3IJCT0gUlRDX01JTk9SLAorCS5uYW1lCQk9ICJydGMiLAorCS5mb3BzCQk9ICZydGNfZm9wcywKK307CisKKworc3RhdGljIGludCBydGNfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBydGNfb3BzICpvcHMgPSBkYXRhOworCXN0cnVjdCBydGNfd2thbHJtIGFscm07CisJc3RydWN0IHJ0Y190aW1lIHRtOworCWNoYXIgKnAgPSBwYWdlOworCisJcnRjX3JlYWRfdGltZShvcHMsICZ0bSk7CisKKwlwICs9IHNwcmludGYocCwKKwkJInJ0Y190aW1lXHQ6ICUwMmQ6JTAyZDolMDJkXG4iCisJCSJydGNfZGF0ZVx0OiAlMDRkLSUwMmQtJTAyZFxuIgorCQkicnRjX2Vwb2NoXHQ6ICUwNGx1XG4iLAorCQl0bS50bV9ob3VyLCB0bS50bV9taW4sIHRtLnRtX3NlYywKKwkJdG0udG1feWVhciArIDE5MDAsIHRtLnRtX21vbiArIDEsIHRtLnRtX21kYXksCisJCXJ0Y19lcG9jaCk7CisKKwlpZiAocnRjX3JlYWRfYWxhcm0ob3BzLCAmYWxybSkgPT0gMCkgeworCQlwICs9IHNwcmludGYocCwgImFscm1fdGltZVx0OiAiKTsKKwkJaWYgKCh1bnNpZ25lZCBpbnQpYWxybS50aW1lLnRtX2hvdXIgPD0gMjQpCisJCQlwICs9IHNwcmludGYocCwgIiUwMmQ6IiwgYWxybS50aW1lLnRtX2hvdXIpOworCQllbHNlCisJCQlwICs9IHNwcmludGYocCwgIioqOiIpOworCQlpZiAoKHVuc2lnbmVkIGludClhbHJtLnRpbWUudG1fbWluIDw9IDU5KQorCQkJcCArPSBzcHJpbnRmKHAsICIlMDJkOiIsIGFscm0udGltZS50bV9taW4pOworCQllbHNlCisJCQlwICs9IHNwcmludGYocCwgIioqOiIpOworCQlpZiAoKHVuc2lnbmVkIGludClhbHJtLnRpbWUudG1fc2VjIDw9IDU5KQorCQkJcCArPSBzcHJpbnRmKHAsICIlMDJkXG4iLCBhbHJtLnRpbWUudG1fc2VjKTsKKwkJZWxzZQorCQkJcCArPSBzcHJpbnRmKHAsICIqKlxuIik7CisKKwkJcCArPSBzcHJpbnRmKHAsICJhbHJtX2RhdGVcdDogIik7CisJCWlmICgodW5zaWduZWQgaW50KWFscm0udGltZS50bV95ZWFyIDw9IDIwMCkKKwkJCXAgKz0gc3ByaW50ZihwLCAiJTA0ZC0iLCBhbHJtLnRpbWUudG1feWVhciArIDE5MDApOworCQllbHNlCisJCQlwICs9IHNwcmludGYocCwgIioqKiotIik7CisJCWlmICgodW5zaWduZWQgaW50KWFscm0udGltZS50bV9tb24gPD0gMTEpCisJCQlwICs9IHNwcmludGYocCwgIiUwMmQtIiwgYWxybS50aW1lLnRtX21vbiArIDEpOworCQllbHNlCisJCQlwICs9IHNwcmludGYocCwgIioqLSIpOworCQlpZiAoKHVuc2lnbmVkIGludClhbHJtLnRpbWUudG1fbWRheSA8PSAzMSkKKwkJCXAgKz0gc3ByaW50ZihwLCAiJTAyZFxuIiwgYWxybS50aW1lLnRtX21kYXkpOworCQllbHNlCisJCQlwICs9IHNwcmludGYocCwgIioqXG4iKTsKKwkJcCArPSBzcHJpbnRmKHAsICJhbHJtX3dha2V1cFx0OiAlc1xuIiwKKwkJCSAgICAgYWxybS5lbmFibGVkID8gInllcyIgOiAibm8iKTsKKwkJcCArPSBzcHJpbnRmKHAsICJhbHJtX3BlbmRpbmdcdDogJXNcbiIsCisJCQkgICAgIGFscm0ucGVuZGluZyA/ICJ5ZXMiIDogIm5vIik7CisJfQorCisJaWYgKG9wcy0+cHJvYykKKwkJcCArPSBvcHMtPnByb2MocCk7CisKKwlyZXR1cm4gcCAtIHBhZ2U7Cit9CisKK2ludCByZWdpc3Rlcl9ydGMoc3RydWN0IHJ0Y19vcHMgKm9wcykKK3sKKwlpbnQgcmV0ID0gLUVCVVNZOworCisJZG93bigmcnRjX3NlbSk7CisJaWYgKHJ0Y19vcHMgPT0gTlVMTCkgeworCQlydGNfb3BzID0gb3BzOworCisJCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnJ0Y19taXNjZGV2KTsKKwkJaWYgKHJldCA9PSAwKQorCQkJY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiZHJpdmVyL3J0YyIsIDAsIE5VTEwsCisJCQkJCSAgICAgICBydGNfcmVhZF9wcm9jLCBvcHMpOworCX0KKwl1cCgmcnRjX3NlbSk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9ydGMpOworCit2b2lkIHVucmVnaXN0ZXJfcnRjKHN0cnVjdCBydGNfb3BzICpydGMpCit7CisJZG93bigmcnRjX3NlbSk7CisJaWYgKHJ0YyA9PSBydGNfb3BzKSB7CisJCXJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcnRjIiwgTlVMTCk7CisJCW1pc2NfZGVyZWdpc3RlcigmcnRjX21pc2NkZXYpOworCQlydGNfb3BzID0gTlVMTDsKKwl9CisJdXAoJnJ0Y19zZW0pOworfQorRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX3J0Yyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2ExMTExLmMgYi9hcmNoL2FybS9jb21tb24vc2ExMTExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFmY2UzNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYwpAQCAtMCwwICsxLDEyOTIgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXNhMTEwMC9zYTExMTEuYworICoKKyAqIFNBMTExMSBzdXBwb3J0CisgKgorICogT3JpZ2luYWwgY29kZSBieSBKb2huIERvcnNleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCBnZW5lcmljIFNBMTExMSBzdXBwb3J0LgorICoKKyAqIEFsbCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgcHJvdmlkZWQgaGVyZSBhcmUgaW50ZW5kZWQgdG8gYmUgY2FsbGVkCisgKiBmcm9tIG1hY2hpbmUgc3BlY2lmaWMgY29kZSB3aXRoIHByb3BlciBhcmd1bWVudHMgd2hlbiByZXF1aXJlZC4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3NhMTExMS5oPgorCisjaWZkZWYgQ09ORklHX0FSQ0hfUFhBCisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKyNlbmRpZgorCitleHRlcm4gdm9pZCBfX2luaXQgc2ExMTEwX21iX2VuYWJsZSh2b2lkKTsKKworLyoKKyAqIFdlIGtlZXAgdGhlIGZvbGxvd2luZyBkYXRhIGZvciB0aGUgb3ZlcmFsbCBTQTExMTEuICBOb3RlIHRoYXQgdGhlCisgKiBzdHJ1Y3QgZGV2aWNlIGFuZCBzdHJ1Y3QgcmVzb3VyY2UgYXJlICJmYWtlIjsgdGhleSBzaG91bGQgYmUgc3VwcGxpZWQKKyAqIGJ5IHRoZSBidXMgYWJvdmUgdXMuICBIb3dldmVyLCBpbiB0aGUgaW50ZXJlc3RzIG9mIGdldHRpbmcgYWxsIFNBMTExMQorICogZHJpdmVycyBjb252ZXJ0ZWQgb3ZlciB0byB0aGUgZGV2aWNlIG1vZGVsLCB3ZSBwcm92aWRlIHRoaXMgYXMgYW4KKyAqIGFuY2hvciBwb2ludCBmb3IgYWxsIHRoZSBvdGhlciBkcml2ZXJzLgorICovCitzdHJ1Y3Qgc2ExMTExIHsKKwlzdHJ1Y3QgZGV2aWNlCSpkZXY7CisJdW5zaWduZWQgbG9uZwlwaHlzOworCWludAkJaXJxOworCXNwaW5sb2NrX3QJbG9jazsKKwl2b2lkIF9faW9tZW0JKmJhc2U7Cit9OworCisvKgorICogV2UgX3JlYWxseV8gbmVlZCB0byBlbGltaW5hdGUgdGhpcy4gIEl0cyBvbmx5IHVzZXJzCisgKiBhcmUgdGhlIFBXTSBhbmQgRE1BIGNoZWNraW5nIGNvZGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2ExMTExICpnX3NhMTExMTsKKworc3RydWN0IHNhMTExMV9kZXZfaW5mbyB7CisJdW5zaWduZWQgbG9uZwlvZmZzZXQ7CisJdW5zaWduZWQgbG9uZwlza3Bjcl9tYXNrOworCXVuc2lnbmVkIGludAlkZXZpZDsKKwl1bnNpZ25lZCBpbnQJaXJxWzZdOworfTsKKworc3RhdGljIHN0cnVjdCBzYTExMTFfZGV2X2luZm8gc2ExMTExX2RldmljZXNbXSA9IHsKKwl7CisJCS5vZmZzZXQJCT0gU0ExMTExX1VTQiwKKwkJLnNrcGNyX21hc2sJPSBTS1BDUl9VQ0xLRU4sCisJCS5kZXZpZAkJPSBTQTExMTFfREVWSURfVVNCLAorCQkuaXJxID0geworCQkJSVJRX1VTQlBXUiwKKwkJCUlSUV9IQ0lNLAorCQkJSVJRX0hDSUJVRkZBQ0MsCisJCQlJUlFfSENJUk1UV0tQLAorCQkJSVJRX05IQ0lNRkNJUiwKKwkJCUlSUV9VU0JfUE9SVF9SRVNVTUUKKwkJfSwKKwl9LAorCXsKKwkJLm9mZnNldAkJPSAweDA2MDAsCisJCS5za3Bjcl9tYXNrCT0gU0tQQ1JfSTJTQ0xLRU4gfCBTS1BDUl9MM0NMS0VOLAorCQkuZGV2aWQJCT0gU0ExMTExX0RFVklEX1NBQywKKwkJLmlycSA9IHsKKwkJCUFVRFhNVERNQURPTkVBLAorCQkJQVVEWE1URE1BRE9ORUIsCisJCQlBVURSQ1ZETUFET05FQSwKKwkJCUFVRFJDVkRNQURPTkVCCisJCX0sCisJfSwKKwl7CisJCS5vZmZzZXQJCT0gMHgwODAwLAorCQkuc2twY3JfbWFzawk9IFNLUENSX1NDTEtFTiwKKwkJLmRldmlkCQk9IFNBMTExMV9ERVZJRF9TU1AsCisJfSwKKwl7CisJCS5vZmZzZXQJCT0gU0ExMTExX0tCRCwKKwkJLnNrcGNyX21hc2sJPSBTS1BDUl9QVENMS0VOLAorCQkuZGV2aWQJCT0gU0ExMTExX0RFVklEX1BTMiwKKwkJLmlycSA9IHsKKwkJCUlSUV9UUFJYSU5ULAorCQkJSVJRX1RQVFhJTlQKKwkJfSwKKwl9LAorCXsKKwkJLm9mZnNldAkJPSBTQTExMTFfTVNFLAorCQkuc2twY3JfbWFzawk9IFNLUENSX1BNQ0xLRU4sCisJCS5kZXZpZAkJPSBTQTExMTFfREVWSURfUFMyLAorCQkuaXJxID0geworCQkJSVJRX01TUlhJTlQsCisJCQlJUlFfTVNUWElOVAorCQl9LAorCX0sCisJeworCQkub2Zmc2V0CQk9IDB4MTgwMCwKKwkJLnNrcGNyX21hc2sJPSAwLAorCQkuZGV2aWQJCT0gU0ExMTExX0RFVklEX1BDTUNJQSwKKwkJLmlycSA9IHsKKwkJCUlSUV9TMF9SRUFEWV9OSU5ULAorCQkJSVJRX1MwX0NEX1ZBTElELAorCQkJSVJRX1MwX0JWRDFfU1RTQ0hHLAorCQkJSVJRX1MxX1JFQURZX05JTlQsCisJCQlJUlFfUzFfQ0RfVkFMSUQsCisJCQlJUlFfUzFfQlZEMV9TVFNDSEcsCisJCX0sCisJfSwKK307CisKKy8qCisgKiBTQTExMTEgaW50ZXJydXB0IHN1cHBvcnQuICBTaW5jZSBjbGVhcmluZyBhbiBJUlEgd2hpbGUgdGhlcmUgYXJlCisgKiBhY3RpdmUgSVJRcyBjYXVzZXMgdGhlIGludGVycnVwdCBvdXRwdXQgdG8gcHVsc2UsIHRoZSB1cHBlciBsZXZlbHMKKyAqIHdpbGwgY2FsbCB1cyBhZ2FpbiBpZiB0aGVyZSBhcmUgbW9yZSBpbnRlcnJ1cHRzIHRvIHByb2Nlc3MuCisgKi8KK3N0YXRpYyB2b2lkCitzYTExMTFfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWRlc2MgKmRlc2MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBzdGF0MCwgc3RhdDEsIGk7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gZGVzYy0+ZGF0YTsKKworCXN0YXQwID0gc2ExMTExX3JlYWRsKGJhc2UgKyBTQTExMTFfSU5UU1RBVENMUjApOworCXN0YXQxID0gc2ExMTExX3JlYWRsKGJhc2UgKyBTQTExMTFfSU5UU1RBVENMUjEpOworCisJc2ExMTExX3dyaXRlbChzdGF0MCwgYmFzZSArIFNBMTExMV9JTlRTVEFUQ0xSMCk7CisKKwlkZXNjLT5jaGlwLT5hY2soaXJxKTsKKworCXNhMTExMV93cml0ZWwoc3RhdDEsIGJhc2UgKyBTQTExMTFfSU5UU1RBVENMUjEpOworCisJaWYgKHN0YXQwID09IDAgJiYgc3RhdDEgPT0gMCkgeworCQlkb19iYWRfSVJRKGlycSwgZGVzYywgcmVncyk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSBJUlFfU0ExMTExX1NUQVJUOyBzdGF0MDsgaSsrLCBzdGF0MCA+Pj0gMSkKKwkJaWYgKHN0YXQwICYgMSkKKwkJCWRvX2VkZ2VfSVJRKGksIGlycV9kZXNjICsgaSwgcmVncyk7CisKKwlmb3IgKGkgPSBJUlFfU0ExMTExX1NUQVJUICsgMzI7IHN0YXQxOyBpKyssIHN0YXQxID4+PSAxKQorCQlpZiAoc3RhdDEgJiAxKQorCQkJZG9fZWRnZV9JUlEoaSwgaXJxX2Rlc2MgKyBpLCByZWdzKTsKKworCS8qIEZvciBsZXZlbC1iYXNlZCBpbnRlcnJ1cHRzICovCisJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7Cit9CisKKyNkZWZpbmUgU0ExMTExX0lSUU1BU0tfTE8oeCkJKDEgPDwgKHggLSBJUlFfU0ExMTExX1NUQVJUKSkKKyNkZWZpbmUgU0ExMTExX0lSUU1BU0tfSEkoeCkJKDEgPDwgKHggLSBJUlFfU0ExMTExX1NUQVJUIC0gMzIpKQorCitzdGF0aWMgdm9pZCBzYTExMTFfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworfQorCitzdGF0aWMgdm9pZCBzYTExMTFfbWFza19sb3dpcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CisJdW5zaWduZWQgbG9uZyBpZTA7CisKKwlpZTAgPSBzYTExMTFfcmVhZGwobWFwYmFzZSArIFNBMTExMV9JTlRFTjApOworCWllMCAmPSB+U0ExMTExX0lSUU1BU0tfTE8oaXJxKTsKKwl3cml0ZWwoaWUwLCBtYXBiYXNlICsgU0ExMTExX0lOVEVOMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNhMTExMV91bm1hc2tfbG93aXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXVuc2lnbmVkIGxvbmcgaWUwOworCisJaWUwID0gc2ExMTExX3JlYWRsKG1hcGJhc2UgKyBTQTExMTFfSU5URU4wKTsKKwlpZTAgfD0gU0ExMTExX0lSUU1BU0tfTE8oaXJxKTsKKwlzYTExMTFfd3JpdGVsKGllMCwgbWFwYmFzZSArIFNBMTExMV9JTlRFTjApOworfQorCisvKgorICogQXR0ZW1wdCB0byByZS10cmlnZ2VyIHRoZSBpbnRlcnJ1cHQuICBUaGUgU0ExMTExIGNvbnRhaW5zIGEgcmVnaXN0ZXIKKyAqIChJTlRTRVQpIHdoaWNoIGNsYWltcyB0byBkbyB0aGlzLiAgSG93ZXZlciwgaW4gcHJhY3RpY2Ugbm8gYW1vdW50IG9mCisgKiBtYW5pcHVsYXRpb24gb2YgSU5URU4gYW5kIElOVFNFVCBndWFyYW50ZWVzIHRoYXQgdGhlIGludGVycnVwdCB3aWxsCisgKiBiZSB0cmlnZ2VyZWQuICBJbiBmYWN0LCBpdHMgdmVyeSBkaWZmaWN1bHQsIGlmIG5vdCBpbXBvc3NpYmxlIHRvIGdldAorICogSU5UU0VUIHRvIHJlLXRyaWdnZXIgdGhlIGludGVycnVwdC4KKyAqLworc3RhdGljIGludCBzYTExMTFfcmV0cmlnZ2VyX2xvd2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCBtYXNrID0gU0ExMTExX0lSUU1BU0tfTE8oaXJxKTsKKwl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CisJdW5zaWduZWQgbG9uZyBpcDA7CisJaW50IGk7CisKKwlpcDAgPSBzYTExMTFfcmVhZGwobWFwYmFzZSArIFNBMTExMV9JTlRQT0wwKTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCXNhMTExMV93cml0ZWwoaXAwIF4gbWFzaywgbWFwYmFzZSArIFNBMTExMV9JTlRQT0wwKTsKKwkJc2ExMTExX3dyaXRlbChpcDAsIG1hcGJhc2UgKyBTQTExMTFfSU5UUE9MMCk7CisJCWlmIChzYTExMTFfcmVhZGwobWFwYmFzZSArIFNBMTExMV9JTlRTVEFUQ0xSMSkgJiBtYXNrKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gOCkKKwkJcHJpbnRrKEtFUk5fRVJSICJEYW5nZXIgV2lsbCBSb2JpbnNvbjogZmFpbGVkIHRvICIKKwkJCSJyZS10cmlnZ2VyIElSUSVkXG4iLCBpcnEpOworCXJldHVybiBpID09IDggPyAtMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgc2ExMTExX3R5cGVfbG93aXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwl1bnNpZ25lZCBpbnQgbWFzayA9IFNBMTExMV9JUlFNQVNLX0xPKGlycSk7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXVuc2lnbmVkIGxvbmcgaXAwOworCisJaWYgKGZsYWdzID09IElSUVRfUFJPQkUpCisJCXJldHVybiAwOworCisJaWYgKCghKGZsYWdzICYgX19JUlFUX1JJU0VER0UpIF4gIShmbGFncyAmIF9fSVJRVF9GQUxFREdFKSkgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpcDAgPSBzYTExMTFfcmVhZGwobWFwYmFzZSArIFNBMTExMV9JTlRQT0wwKTsKKwlpZiAoZmxhZ3MgJiBfX0lSUVRfUklTRURHRSkKKwkJaXAwICY9IH5tYXNrOworCWVsc2UKKwkJaXAwIHw9IG1hc2s7CisJc2ExMTExX3dyaXRlbChpcDAsIG1hcGJhc2UgKyBTQTExMTFfSU5UUE9MMCk7CisJc2ExMTExX3dyaXRlbChpcDAsIG1hcGJhc2UgKyBTQTExMTFfV0FLRVBPTDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2ExMTExX3dha2VfbG93aXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBvbikKK3sKKwl1bnNpZ25lZCBpbnQgbWFzayA9IFNBMTExMV9JUlFNQVNLX0xPKGlycSk7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXVuc2lnbmVkIGxvbmcgd2UwOworCisJd2UwID0gc2ExMTExX3JlYWRsKG1hcGJhc2UgKyBTQTExMTFfV0FLRUVOMCk7CisJaWYgKG9uKQorCQl3ZTAgfD0gbWFzazsKKwllbHNlCisJCXdlMCAmPSB+bWFzazsKKwlzYTExMTFfd3JpdGVsKHdlMCwgbWFwYmFzZSArIFNBMTExMV9XQUtFRU4wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgc2ExMTExX2xvd19jaGlwID0geworCS5hY2sJCT0gc2ExMTExX2Fja19pcnEsCisJLm1hc2sJCT0gc2ExMTExX21hc2tfbG93aXJxLAorCS51bm1hc2sJCT0gc2ExMTExX3VubWFza19sb3dpcnEsCisJLnJldHJpZ2dlcgk9IHNhMTExMV9yZXRyaWdnZXJfbG93aXJxLAorCS50eXBlCQk9IHNhMTExMV90eXBlX2xvd2lycSwKKwkud2FrZQkJPSBzYTExMTFfd2FrZV9sb3dpcnEsCit9OworCitzdGF0aWMgdm9pZCBzYTExMTFfbWFza19oaWdoaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXVuc2lnbmVkIGxvbmcgaWUxOworCisJaWUxID0gc2ExMTExX3JlYWRsKG1hcGJhc2UgKyBTQTExMTFfSU5URU4xKTsKKwlpZTEgJj0gflNBMTExMV9JUlFNQVNLX0hJKGlycSk7CisJc2ExMTExX3dyaXRlbChpZTEsIG1hcGJhc2UgKyBTQTExMTFfSU5URU4xKTsKK30KKworc3RhdGljIHZvaWQgc2ExMTExX3VubWFza19oaWdoaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXVuc2lnbmVkIGxvbmcgaWUxOworCisJaWUxID0gc2ExMTExX3JlYWRsKG1hcGJhc2UgKyBTQTExMTFfSU5URU4xKTsKKwlpZTEgfD0gU0ExMTExX0lSUU1BU0tfSEkoaXJxKTsKKwlzYTExMTFfd3JpdGVsKGllMSwgbWFwYmFzZSArIFNBMTExMV9JTlRFTjEpOworfQorCisvKgorICogQXR0ZW1wdCB0byByZS10cmlnZ2VyIHRoZSBpbnRlcnJ1cHQuICBUaGUgU0ExMTExIGNvbnRhaW5zIGEgcmVnaXN0ZXIKKyAqIChJTlRTRVQpIHdoaWNoIGNsYWltcyB0byBkbyB0aGlzLiAgSG93ZXZlciwgaW4gcHJhY3RpY2Ugbm8gYW1vdW50IG9mCisgKiBtYW5pcHVsYXRpb24gb2YgSU5URU4gYW5kIElOVFNFVCBndWFyYW50ZWVzIHRoYXQgdGhlIGludGVycnVwdCB3aWxsCisgKiBiZSB0cmlnZ2VyZWQuICBJbiBmYWN0LCBpdHMgdmVyeSBkaWZmaWN1bHQsIGlmIG5vdCBpbXBvc3NpYmxlIHRvIGdldAorICogSU5UU0VUIHRvIHJlLXRyaWdnZXIgdGhlIGludGVycnVwdC4KKyAqLworc3RhdGljIGludCBzYTExMTFfcmV0cmlnZ2VyX2hpZ2hpcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzayA9IFNBMTExMV9JUlFNQVNLX0hJKGlycSk7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXVuc2lnbmVkIGxvbmcgaXAxOworCWludCBpOworCisJaXAxID0gc2ExMTExX3JlYWRsKG1hcGJhc2UgKyBTQTExMTFfSU5UUE9MMSk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlzYTExMTFfd3JpdGVsKGlwMSBeIG1hc2ssIG1hcGJhc2UgKyBTQTExMTFfSU5UUE9MMSk7CisJCXNhMTExMV93cml0ZWwoaXAxLCBtYXBiYXNlICsgU0ExMTExX0lOVFBPTDEpOworCQlpZiAoc2ExMTExX3JlYWRsKG1hcGJhc2UgKyBTQTExMTFfSU5UU1RBVENMUjEpICYgbWFzaykKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IDgpCisJCXByaW50ayhLRVJOX0VSUiAiRGFuZ2VyIFdpbGwgUm9iaW5zb246IGZhaWxlZCB0byAiCisJCQkicmUtdHJpZ2dlciBJUlElZFxuIiwgaXJxKTsKKwlyZXR1cm4gaSA9PSA4ID8gLTEgOiAwOworfQorCitzdGF0aWMgaW50IHNhMTExMV90eXBlX2hpZ2hpcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXVuc2lnbmVkIGludCBtYXNrID0gU0ExMTExX0lSUU1BU0tfSEkoaXJxKTsKKwl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CisJdW5zaWduZWQgbG9uZyBpcDE7CisKKwlpZiAoZmxhZ3MgPT0gSVJRVF9QUk9CRSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKCEoZmxhZ3MgJiBfX0lSUVRfUklTRURHRSkgXiAhKGZsYWdzICYgX19JUlFUX0ZBTEVER0UpKSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlwMSA9IHNhMTExMV9yZWFkbChtYXBiYXNlICsgU0ExMTExX0lOVFBPTDEpOworCWlmIChmbGFncyAmIF9fSVJRVF9SSVNFREdFKQorCQlpcDEgJj0gfm1hc2s7CisJZWxzZQorCQlpcDEgfD0gbWFzazsKKwlzYTExMTFfd3JpdGVsKGlwMSwgbWFwYmFzZSArIFNBMTExMV9JTlRQT0wxKTsKKwlzYTExMTFfd3JpdGVsKGlwMSwgbWFwYmFzZSArIFNBMTExMV9XQUtFUE9MMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYTExMTFfd2FrZV9oaWdoaXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBvbikKK3sKKwl1bnNpZ25lZCBpbnQgbWFzayA9IFNBMTExMV9JUlFNQVNLX0hJKGlycSk7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXVuc2lnbmVkIGxvbmcgd2UxOworCisJd2UxID0gc2ExMTExX3JlYWRsKG1hcGJhc2UgKyBTQTExMTFfV0FLRUVOMSk7CisJaWYgKG9uKQorCQl3ZTEgfD0gbWFzazsKKwllbHNlCisJCXdlMSAmPSB+bWFzazsKKwlzYTExMTFfd3JpdGVsKHdlMSwgbWFwYmFzZSArIFNBMTExMV9XQUtFRU4xKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgc2ExMTExX2hpZ2hfY2hpcCA9IHsKKwkuYWNrCQk9IHNhMTExMV9hY2tfaXJxLAorCS5tYXNrCQk9IHNhMTExMV9tYXNrX2hpZ2hpcnEsCisJLnVubWFzawkJPSBzYTExMTFfdW5tYXNrX2hpZ2hpcnEsCisJLnJldHJpZ2dlcgk9IHNhMTExMV9yZXRyaWdnZXJfaGlnaGlycSwKKwkudHlwZQkJPSBzYTExMTFfdHlwZV9oaWdoaXJxLAorCS53YWtlCQk9IHNhMTExMV93YWtlX2hpZ2hpcnEsCit9OworCitzdGF0aWMgdm9pZCBzYTExMTFfc2V0dXBfaXJxKHN0cnVjdCBzYTExMTEgKnNhY2hpcCkKK3sKKwl2b2lkIF9faW9tZW0gKmlycWJhc2UgPSBzYWNoaXAtPmJhc2UgKyBTQTExMTFfSU5UQzsKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJLyoKKwkgKiBXZSdyZSBndWFyYW50ZWVkIHRoYXQgdGhpcyByZWdpb24gaGFzbid0IGJlZW4gdGFrZW4uCisJICovCisJcmVxdWVzdF9tZW1fcmVnaW9uKHNhY2hpcC0+cGh5cyArIFNBMTExMV9JTlRDLCA1MTIsICJpcnEiKTsKKworCS8qIGRpc2FibGUgYWxsIElSUXMgKi8KKwlzYTExMTFfd3JpdGVsKDAsIGlycWJhc2UgKyBTQTExMTFfSU5URU4wKTsKKwlzYTExMTFfd3JpdGVsKDAsIGlycWJhc2UgKyBTQTExMTFfSU5URU4xKTsKKwlzYTExMTFfd3JpdGVsKDAsIGlycWJhc2UgKyBTQTExMTFfV0FLRUVOMCk7CisJc2ExMTExX3dyaXRlbCgwLCBpcnFiYXNlICsgU0ExMTExX1dBS0VFTjEpOworCisJLyoKKwkgKiBkZXRlY3Qgb24gcmlzaW5nIGVkZ2UuICBOb3RlOiBGZWIgMjAwMSBFcnJhdGEgZm9yIFNBMTExMQorCSAqIHNwZWNpZmllcyB0aGF0IFMwUmVhZHlJbnQgYW5kIFMxUmVhZHlJbnQgc2hvdWxkIGJlICcxJy4KKwkgKi8KKwlzYTExMTFfd3JpdGVsKDAsIGlycWJhc2UgKyBTQTExMTFfSU5UUE9MMCk7CisJc2ExMTExX3dyaXRlbChTQTExMTFfSVJRTUFTS19ISShJUlFfUzBfUkVBRFlfTklOVCkgfAorCQkgICAgICBTQTExMTFfSVJRTUFTS19ISShJUlFfUzFfUkVBRFlfTklOVCksCisJCSAgICAgIGlycWJhc2UgKyBTQTExMTFfSU5UUE9MMSk7CisKKwkvKiBjbGVhciBhbGwgSVJRcyAqLworCXNhMTExMV93cml0ZWwofjAsIGlycWJhc2UgKyBTQTExMTFfSU5UU1RBVENMUjApOworCXNhMTExMV93cml0ZWwofjAsIGlycWJhc2UgKyBTQTExMTFfSU5UU1RBVENMUjEpOworCisJZm9yIChpcnEgPSBJUlFfR1BBSU4wOyBpcnEgPD0gU1NQUk9SOyBpcnErKykgeworCQlzZXRfaXJxX2NoaXAoaXJxLCAmc2ExMTExX2xvd19jaGlwKTsKKwkJc2V0X2lycV9jaGlwZGF0YShpcnEsIGlycWJhc2UpOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBkb19lZGdlX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJfQorCisJZm9yIChpcnEgPSBBVURYTVRETUFET05FQTsgaXJxIDw9IElSUV9TMV9CVkQxX1NUU0NIRzsgaXJxKyspIHsKKwkJc2V0X2lycV9jaGlwKGlycSwgJnNhMTExMV9oaWdoX2NoaXApOworCQlzZXRfaXJxX2NoaXBkYXRhKGlycSwgaXJxYmFzZSk7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2VkZ2VfSVJRKTsKKwkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKKwl9CisKKwkvKgorCSAqIFJlZ2lzdGVyIFNBMTExMSBpbnRlcnJ1cHQKKwkgKi8KKwlzZXRfaXJxX3R5cGUoc2FjaGlwLT5pcnEsIElSUVRfUklTSU5HKTsKKwlzZXRfaXJxX2RhdGEoc2FjaGlwLT5pcnEsIGlycWJhc2UpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKHNhY2hpcC0+aXJxLCBzYTExMTFfaXJxX2hhbmRsZXIpOworfQorCisvKgorICogQnJpbmcgdGhlIFNBMTExMSBvdXQgb2YgcmVzZXQuICBUaGlzIHJlcXVpcmVzIGEgc2V0IHByb2NlZHVyZToKKyAqICAxLiBuUkVTRVQgYXNzZXJ0ZWQgKGJ5IGhhcmR3YXJlKQorICogIDIuIENMSyB0dXJuZWQgb24gZnJvbSBTQTExMTAKKyAqICAzLiBuUkVTRVQgZGVhc3NlcnRlZAorICogIDQuIFZDTyB0dXJuZWQgb24sIFBMTF9CWVBBU1MgdHVybmVkIG9mZgorICogIDUuIFdhaXQgbG9jayB0aW1lLCB0aGVuIGFzc2VydCBSQ0xLRW4KKyAqICA3LiBQQ1Igc2V0IHRvIGFsbG93IGNsb2NraW5nIG9mIGluZGl2aWR1YWwgZnVuY3Rpb25zCisgKgorICogVW50aWwgd2UndmUgZG9uZSB0aGlzLCB0aGUgb25seSByZWdpc3RlcnMgd2UgY2FuIGFjY2VzcyBhcmU6CisgKiAgIFNCSV9TS0NSCisgKiAgIFNCSV9TTUNSCisgKiAgIFNCSV9TS0lECisgKi8KK3N0YXRpYyB2b2lkIHNhMTExMV93YWtlKHN0cnVjdCBzYTExMTEgKnNhY2hpcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCByOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOworCisjaWZkZWYgQ09ORklHX0FSQ0hfU0ExMTAwCisJLyoKKwkgKiBGaXJzdCwgc2V0IHVwIHRoZSAzLjY4NjRNSHogY2xvY2sgb24gR1BJTyAyNyBmb3IgdGhlIFNBLTExMTE6CisJICogKFNBLTExMTAgRGV2ZWxvcGVyJ3MgTWFudWFsLCBzZWN0aW9uIDkuMS4yLjEpCisJICovCisJR0FGUiB8PSBHUElPXzMyXzc2OGtIejsKKwlHUERSIHw9IEdQSU9fMzJfNzY4a0h6OworCVRVQ1IgPSBUVUNSXzNfNjg2NE1IejsKKyNlbGlmIENPTkZJR19BUkNIX1BYQQorCXB4YV9ncGlvX21vZGUoR1BJTzExXzNfNk1Iel9NRCk7CisjZWxzZQorI2Vycm9yIG1pc3NpbmcgY2xvY2sgc2V0dXAKKyNlbmRpZgorCisJLyoKKwkgKiBUdXJuIFZDTyBvbiwgYW5kIGRpc2FibGUgUExMIEJ5cGFzcy4KKwkgKi8KKwlyID0gc2ExMTExX3JlYWRsKHNhY2hpcC0+YmFzZSArIFNBMTExMV9TS0NSKTsKKwlyICY9IH5TS0NSX1ZDT19PRkY7CisJc2ExMTExX3dyaXRlbChyLCBzYWNoaXAtPmJhc2UgKyBTQTExMTFfU0tDUik7CisJciB8PSBTS0NSX1BMTF9CWVBBU1MgfCBTS0NSX09FX0VOOworCXNhMTExMV93cml0ZWwociwgc2FjaGlwLT5iYXNlICsgU0ExMTExX1NLQ1IpOworCisJLyoKKwkgKiBXYWl0IGxvY2sgdGltZS4gIFNBMTExMSBtYW51YWwgX2RvZXNuJ3RfCisJICogc3BlY2lmeSBhIGZpZ3VyZSBmb3IgdGhpcyEgIFdlIGNob29zZSAxMDB1cy4KKwkgKi8KKwl1ZGVsYXkoMTAwKTsKKworCS8qCisJICogRW5hYmxlIFJDTEsuICBXZSBhbHNvIGVuc3VyZSB0aGF0IFJEWUVOIGlzIHNldC4KKwkgKi8KKwlyIHw9IFNLQ1JfUkNMS0VOIHwgU0tDUl9SRFlFTjsKKwlzYTExMTFfd3JpdGVsKHIsIHNhY2hpcC0+YmFzZSArIFNBMTExMV9TS0NSKTsKKworCS8qCisJICogV2FpdCAxNCBSQ0xLIGN5Y2xlcyBmb3IgdGhlIGNoaXAgdG8gZmluaXNoIGNvbWluZyBvdXQKKwkgKiBvZiByZXNldC4gKFJDTEs9MjRNSHopLiAgVGhpcyBpcyA1OTBucy4KKwkgKi8KKwl1ZGVsYXkoMSk7CisKKwkvKgorCSAqIEVuc3VyZSBhbGwgY2xvY2tzIGFyZSBpbml0aWFsbHkgb2ZmLgorCSAqLworCXNhMTExMV93cml0ZWwoMCwgc2FjaGlwLT5iYXNlICsgU0ExMTExX1NLUENSKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOworfQorCisjaWZkZWYgQ09ORklHX0FSQ0hfU0ExMTAwCisKK3N0YXRpYyB1MzIgc2ExMTExX2RtYV9tYXNrW10gPSB7CisJfjAsCisJfigxIDw8IDIwKSwKKwl+KDEgPDwgMjMpLAorCX4oMSA8PCAyNCksCisJfigxIDw8IDI1KSwKKwl+KDEgPDwgMjApLAorCX4oMSA8PCAyMCksCisJMCwKK307CisKKy8qCisgKiBDb25maWd1cmUgdGhlIFNBMTExMSBzaGFyZWQgbWVtb3J5IGNvbnRyb2xsZXIuCisgKi8KK3ZvaWQKK3NhMTExMV9jb25maWd1cmVfc21jKHN0cnVjdCBzYTExMTEgKnNhY2hpcCwgaW50IHNkcmFtLCB1bnNpZ25lZCBpbnQgZHJhYywKKwkJICAgICB1bnNpZ25lZCBpbnQgY2FzX2xhdGVuY3kpCit7CisJdW5zaWduZWQgaW50IHNtY3IgPSBTTUNSX0RUSU0gfCBTTUNSX01CR0UgfCBGSW5zcnQoZHJhYywgU01DUl9EUkFDKTsKKworCWlmIChjYXNfbGF0ZW5jeSA9PSAzKQorCQlzbWNyIHw9IFNNQ1JfQ0xBVDsKKworCXNhMTExMV93cml0ZWwoc21jciwgc2FjaGlwLT5iYXNlICsgU0ExMTExX1NNQ1IpOworCisJLyoKKwkgKiBOb3cgY2xlYXIgdGhlIGJpdHMgaW4gdGhlIERNQSBtYXNrIHRvIHdvcmsgYXJvdW5kIHRoZSBTQTExMTEKKwkgKiBETUEgZXJyYXR1bSAoSW50ZWwgU3Ryb25nQVJNIFNBLTExMTEgTWljcm9wcm9jZXNzb3IgQ29tcGFuaW9uCisJICogQ2hpcCBTcGVjaWZpY2F0aW9uIFVwZGF0ZSwgSnVuZSAyMDAwLCBFcnJhdHVtICM3KS4KKwkgKi8KKwlpZiAoc2FjaGlwLT5kZXYtPmRtYV9tYXNrKQorCQkqc2FjaGlwLT5kZXYtPmRtYV9tYXNrICY9IHNhMTExMV9kbWFfbWFza1tkcmFjID4+IDJdOworCisJc2FjaGlwLT5kZXYtPmNvaGVyZW50X2RtYV9tYXNrICY9IHNhMTExMV9kbWFfbWFza1tkcmFjID4+IDJdOworfQorCisjZW5kaWYKKworc3RhdGljIHZvaWQgc2ExMTExX2Rldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCit7CisJc3RydWN0IHNhMTExMV9kZXYgKmRldiA9IFNBMTExMV9ERVYoX2Rldik7CisKKwlyZWxlYXNlX3Jlc291cmNlKCZkZXYtPnJlcyk7CisJa2ZyZWUoZGV2KTsKK30KKworc3RhdGljIGludAorc2ExMTExX2luaXRfb25lX2NoaWxkKHN0cnVjdCBzYTExMTEgKnNhY2hpcCwgc3RydWN0IHJlc291cmNlICpwYXJlbnQsCisJCSAgICAgIHN0cnVjdCBzYTExMTFfZGV2X2luZm8gKmluZm8pCit7CisJc3RydWN0IHNhMTExMV9kZXYgKmRldjsKKwlpbnQgcmV0OworCisJZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNhMTExMV9kZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJbWVtc2V0KGRldiwgMCwgc2l6ZW9mKHN0cnVjdCBzYTExMTFfZGV2KSk7CisKKwlzbnByaW50ZihkZXYtPmRldi5idXNfaWQsIHNpemVvZihkZXYtPmRldi5idXNfaWQpLAorCQkgIiU0LjRseCIsIGluZm8tPm9mZnNldCk7CisKKwlkZXYtPmRldmlkCSA9IGluZm8tPmRldmlkOworCWRldi0+ZGV2LnBhcmVudCAgPSBzYWNoaXAtPmRldjsKKwlkZXYtPmRldi5idXMgICAgID0gJnNhMTExMV9idXNfdHlwZTsKKwlkZXYtPmRldi5yZWxlYXNlID0gc2ExMTExX2Rldl9yZWxlYXNlOworCWRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gc2FjaGlwLT5kZXYtPmNvaGVyZW50X2RtYV9tYXNrOworCWRldi0+cmVzLnN0YXJ0ICAgPSBzYWNoaXAtPnBoeXMgKyBpbmZvLT5vZmZzZXQ7CisJZGV2LT5yZXMuZW5kICAgICA9IGRldi0+cmVzLnN0YXJ0ICsgNTExOworCWRldi0+cmVzLm5hbWUgICAgPSBkZXYtPmRldi5idXNfaWQ7CisJZGV2LT5yZXMuZmxhZ3MgICA9IElPUkVTT1VSQ0VfTUVNOworCWRldi0+bWFwYmFzZSAgICAgPSBzYWNoaXAtPmJhc2UgKyBpbmZvLT5vZmZzZXQ7CisJZGV2LT5za3Bjcl9tYXNrICA9IGluZm8tPnNrcGNyX21hc2s7CisJbWVtbW92ZShkZXYtPmlycSwgaW5mby0+aXJxLCBzaXplb2YoZGV2LT5pcnEpKTsKKworCXJldCA9IHJlcXVlc3RfcmVzb3VyY2UocGFyZW50LCAmZGV2LT5yZXMpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKCJTQTExMTE6IGZhaWxlZCB0byBhbGxvY2F0ZSByZXNvdXJjZSBmb3IgJXNcbiIsCisJCQlkZXYtPnJlcy5uYW1lKTsKKwkJa2ZyZWUoZGV2KTsKKwkJZ290byBvdXQ7CisJfQorCisKKwlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJmRldi0+ZGV2KTsKKwlpZiAocmV0KSB7CisJCXJlbGVhc2VfcmVzb3VyY2UoJmRldi0+cmVzKTsKKwkJa2ZyZWUoZGV2KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgcGFyZW50IGRldmljZSBoYXMgYSBETUEgbWFzayBhc3NvY2lhdGVkIHdpdGggaXQsCisJICogcHJvcGFnYXRlIGl0IGRvd24gdG8gdGhlIGNoaWxkcmVuLgorCSAqLworCWlmIChzYWNoaXAtPmRldi0+ZG1hX21hc2spIHsKKwkJZGV2LT5kbWFfbWFzayA9ICpzYWNoaXAtPmRldi0+ZG1hX21hc2s7CisJCWRldi0+ZGV2LmRtYV9tYXNrID0gJmRldi0+ZG1hX21hc2s7CisKKwkJaWYgKGRldi0+ZG1hX21hc2sgIT0gMHhmZmZmZmZmZlVMKSB7CisJCQlyZXQgPSBkbWFib3VuY2VfcmVnaXN0ZXJfZGV2KCZkZXYtPmRldiwgMTAyNCwgNDA5Nik7CisJCQlpZiAocmV0KSB7CisJCQkJcHJpbnRrKCJTQTExMTE6IEZhaWxlZCB0byByZWdpc3RlciAlcyB3aXRoIGRtYWJvdW5jZSIsIGRldi0+ZGV2LmJ1c19pZCk7CisJCQkJZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+ZGV2KTsKKwkJCX0KKwkJfQorCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICoJc2ExMTExX3Byb2JlIC0gcHJvYmUgZm9yIGEgc2luZ2xlIFNBMTExMSBjaGlwLgorICoJQHBoeXNfYWRkcjogcGh5c2ljYWwgYWRkcmVzcyBvZiBkZXZpY2UuCisgKgorICoJUHJvYmUgZm9yIGEgU0ExMTExIGNoaXAuICBUaGlzIG11c3QgYmUgY2FsbGVkCisgKgliZWZvcmUgYW55IG90aGVyIFNBMTExMS1zcGVjaWZpYyBjb2RlLgorICoKKyAqCVJldHVybnM6CisgKgklLUVOT0RFVglkZXZpY2Ugbm90IGZvdW5kLgorICoJJS1FQlVTWQkJcGh5c2ljYWwgYWRkcmVzcyBhbHJlYWR5IG1hcmtlZCBpbi11c2UuCisgKgklMAkJc3VjY2Vzc2Z1bC4KKyAqLworc3RhdGljIGludAorX19zYTExMTFfcHJvYmUoc3RydWN0IGRldmljZSAqbWUsIHN0cnVjdCByZXNvdXJjZSAqbWVtLCBpbnQgaXJxKQoreworCXN0cnVjdCBzYTExMTEgKnNhY2hpcDsKKwl1bnNpZ25lZCBsb25nIGlkOworCXVuc2lnbmVkIGludCBoYXNfZGV2cywgdmFsOworCWludCBpLCByZXQgPSAtRU5PREVWOworCisJc2FjaGlwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNhMTExMSksIEdGUF9LRVJORUwpOworCWlmICghc2FjaGlwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChzYWNoaXAsIDAsIHNpemVvZihzdHJ1Y3Qgc2ExMTExKSk7CisKKwlzcGluX2xvY2tfaW5pdCgmc2FjaGlwLT5sb2NrKTsKKworCXNhY2hpcC0+ZGV2ID0gbWU7CisJZGV2X3NldF9kcnZkYXRhKHNhY2hpcC0+ZGV2LCBzYWNoaXApOworCisJc2FjaGlwLT5waHlzID0gbWVtLT5zdGFydDsKKwlzYWNoaXAtPmlycSA9IGlycTsKKworCS8qCisJICogTWFwIHRoZSB3aG9sZSByZWdpb24uICBUaGlzIGFsc28gbWFwcyB0aGUKKwkgKiByZWdpc3RlcnMgZm9yIG91ciBjaGlsZHJlbi4KKwkgKi8KKwlzYWNoaXAtPmJhc2UgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIFBBR0VfU0laRSAqIDIpOworCWlmICghc2FjaGlwLT5iYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogUHJvYmUgZm9yIHRoZSBjaGlwLiAgT25seSB0b3VjaCB0aGUgU0JJIHJlZ2lzdGVycy4KKwkgKi8KKwlpZCA9IHNhMTExMV9yZWFkbChzYWNoaXAtPmJhc2UgKyBTQTExMTFfU0tJRCk7CisJaWYgKChpZCAmIFNLSURfSURfTUFTSykgIT0gU0tJRF9TQTExMTFfSUQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlNBMTExMSBub3QgZGV0ZWN0ZWQ6IElEID0gJTA4bHhcbiIsIGlkKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byB1bm1hcDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJTQTExMTEgTWljcm9wcm9jZXNzb3IgQ29tcGFuaW9uIENoaXA6ICIKKwkJInNpbGljb24gcmV2aXNpb24gJWx4LCBtZXRhbCByZXZpc2lvbiAlbHhcbiIsCisJCShpZCAmIFNLSURfU0lSRVZfTUFTSyk+PjQsIChpZCAmIFNLSURfTVRSRVZfTUFTSykpOworCisJLyoKKwkgKiBXZSBmb3VuZCBpdC4gIFdha2UgdGhlIGNoaXAgdXAsIGFuZCBpbml0aWFsaXNlLgorCSAqLworCXNhMTExMV93YWtlKHNhY2hpcCk7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9TQTExMDAKKwkvKgorCSAqIFRoZSBTRFJBTSBjb25maWd1cmF0aW9uIG9mIHRoZSBTQTExMTAgYW5kIHRoZSBTQTExMTEgbXVzdAorCSAqIG1hdGNoLiAgVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCBTQTExMTEgYWNjZXNzZXMKKwkgKiBkb24ndCBjb3JydXB0IHRoZSBTRFJBTS4gIE5vdGUgdGhhdCB0aGlzIHVuZ2F0ZXMgdGhlIFNBMTExMSdzCisJICogTUJHTlQgc2lnbmFsLCBzbyB3ZSBtdXN0IGhhdmUgY2FsbGVkIHNhMTExMF9tYl9kaXNhYmxlKCkKKwkgKiBiZWZvcmVoYW5kLgorCSAqLworCXNhMTExMV9jb25maWd1cmVfc21jKHNhY2hpcCwgMSwKKwkJCSAgICAgRkV4dHIoTURDTkZHLCBNRENORkdfU0ExMTEwX0RSQUMwKSwKKwkJCSAgICAgRkV4dHIoTURDTkZHLCBNRENORkdfU0ExMTEwX1RETDApKTsKKworCS8qCisJICogV2Ugb25seSBuZWVkIHRvIHR1cm4gb24gRENMSyB3aGVuZXZlciB3ZSB3YW50IHRvIHVzZSB0aGUKKwkgKiBETUEuICBJdCBjYW4gb3RoZXJ3aXNlIGJlIGhlbGQgZmlybWx5IGluIHRoZSBvZmYgcG9zaXRpb24uCisJICogKGN1cnJlbnRseSwgd2UgYWx3YXlzIGVuYWJsZSBpdC4pCisJICovCisJdmFsID0gc2ExMTExX3JlYWRsKHNhY2hpcC0+YmFzZSArIFNBMTExMV9TS1BDUik7CisJc2ExMTExX3dyaXRlbCh2YWwgfCBTS1BDUl9EQ0xLRU4sIHNhY2hpcC0+YmFzZSArIFNBMTExMV9TS1BDUik7CisKKwkvKgorCSAqIEVuYWJsZSB0aGUgU0ExMTEwIG1lbW9yeSBidXMgcmVxdWVzdCBhbmQgZ3JhbnQgc2lnbmFscy4KKwkgKi8KKwlzYTExMTBfbWJfZW5hYmxlKCk7CisjZW5kaWYKKworCS8qCisJICogVGhlIGludGVycnVwdCBjb250cm9sbGVyIG11c3QgYmUgaW5pdGlhbGlzZWQgYmVmb3JlIGFueQorCSAqIG90aGVyIGRldmljZSB0byBlbnN1cmUgdGhhdCB0aGUgaW50ZXJydXB0cyBhcmUgYXZhaWxhYmxlLgorCSAqLworCWlmIChzYWNoaXAtPmlycSAhPSBOT19JUlEpCisJCXNhMTExMV9zZXR1cF9pcnEoc2FjaGlwKTsKKworCWdfc2ExMTExID0gc2FjaGlwOworCisJaGFzX2RldnMgPSB+MDsKKwlpZiAobWFjaGluZV9pc19hc3NhYmV0KCkgfHwgbWFjaGluZV9pc19qb3JuYWRhNzIwKCkgfHwKKwkgICAgbWFjaGluZV9pc19iYWRnZTQoKSkKKwkJaGFzX2RldnMgJj0gfigxIDw8IDQpOworCWVsc2UKKwkJaGFzX2RldnMgJj0gfigxIDw8IDEpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2ExMTExX2RldmljZXMpOyBpKyspCisJCWlmIChoYXNfZGV2cyAmICgxIDw8IGkpKQorCQkJc2ExMTExX2luaXRfb25lX2NoaWxkKHNhY2hpcCwgbWVtLCAmc2ExMTExX2RldmljZXNbaV0pOworCisJcmV0dXJuIDA7CisKKyB1bm1hcDoKKwlpb3VubWFwKHNhY2hpcC0+YmFzZSk7Cisgb3V0OgorCWtmcmVlKHNhY2hpcCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19zYTExMTFfcmVtb3ZlKHN0cnVjdCBzYTExMTEgKnNhY2hpcCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsLCAqbjsKKwl2b2lkIF9faW9tZW0gKmlycWJhc2UgPSBzYWNoaXAtPmJhc2UgKyBTQTExMTFfSU5UQzsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShsLCBuLCAmc2FjaGlwLT5kZXYtPmNoaWxkcmVuKSB7CisJCXN0cnVjdCBkZXZpY2UgKmQgPSBsaXN0X3RvX2RldihsKTsKKworCQlkZXZpY2VfdW5yZWdpc3RlcihkKTsKKwl9CisKKwkvKiBkaXNhYmxlIGFsbCBJUlFzICovCisJc2ExMTExX3dyaXRlbCgwLCBpcnFiYXNlICsgU0ExMTExX0lOVEVOMCk7CisJc2ExMTExX3dyaXRlbCgwLCBpcnFiYXNlICsgU0ExMTExX0lOVEVOMSk7CisJc2ExMTExX3dyaXRlbCgwLCBpcnFiYXNlICsgU0ExMTExX1dBS0VFTjApOworCXNhMTExMV93cml0ZWwoMCwgaXJxYmFzZSArIFNBMTExMV9XQUtFRU4xKTsKKworCWlmIChzYWNoaXAtPmlycSAhPSBOT19JUlEpIHsKKwkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoc2FjaGlwLT5pcnEsIE5VTEwpOworCQlzZXRfaXJxX2RhdGEoc2FjaGlwLT5pcnEsIE5VTEwpOworCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihzYWNoaXAtPnBoeXMgKyBTQTExMTFfSU5UQywgNTEyKTsKKwl9CisKKwlpb3VubWFwKHNhY2hpcC0+YmFzZSk7CisJa2ZyZWUoc2FjaGlwKTsKK30KKworLyoKKyAqIEFjY29yZGluZyB0byB0aGUgIkludGVsIFN0cm9uZ0FSTSBTQS0xMTExIE1pY3JvcHJvY2Vzc29yIENvbXBhbmlvbgorICogQ2hpcCBTcGVjaWZpY2F0aW9uIFVwZGF0ZSIgKEp1bmUgMjAwMCksIGVycmF0dW0gIzcsIHRoZXJlIGlzIGEKKyAqIHNpZ25pZmljYW50IGJ1ZyBpbiB0aGUgU0ExMTExIFNEUkFNIHNoYXJlZCBtZW1vcnkgY29udHJvbGxlci4gIElmCisgKiBhbiBhY2Nlc3MgdG8gYSByZWdpb24gb2YgbWVtb3J5IGFib3ZlIDFNQiByZWxhdGl2ZSB0byB0aGUgYmFuayBiYXNlLAorICogaXQgaXMgaW1wb3J0YW50IHRoYXQgYWRkcmVzcyBiaXQgMTAgX05PVF8gYmUgYXNzZXJ0ZWQuIERlcGVuZGluZworICogb24gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIFJBTSwgYml0IDEwIG1heSBjb3JyZXNwb25kIHRvIG9uZQorICogb2Ygc2V2ZXJhbCBkaWZmZXJlbnQgKHByb2Nlc3Nvci1yZWxhdGl2ZSkgYWRkcmVzcyBiaXRzLgorICoKKyAqIFRoaXMgcm91dGluZSBvbmx5IGlkZW50aWZpZXMgd2hldGhlciBvciBub3QgYSBnaXZlbiBETUEgYWRkcmVzcworICogaXMgc3VzY2VwdGlibGUgdG8gdGhlIGJ1Zy4KKyAqCisgKiBUaGlzIHNob3VsZCBvbmx5IGdldCBjYWxsZWQgZm9yIHNhMTExMV9kZXZpY2UgdHlwZXMgZHVlIHRvIHRoZQorICogd2F5IHdlIGNvbmZpZ3VyZSBvdXIgZGV2aWNlIGRtYV9tYXNrcy4KKyAqLworaW50IGRtYV9uZWVkc19ib3VuY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsIHNpemVfdCBzaXplKQoreworCS8qCisJICogU2VjdGlvbiA0LjYgb2YgdGhlICJJbnRlbCBTdHJvbmdBUk0gU0EtMTExMSBEZXZlbG9wbWVudCBNb2R1bGUKKwkgKiBVc2VyJ3MgR3VpZGUiIG1lbnRpb25zIHRoYXQganVtcGVycyBSNTEgYW5kIFI1MiBjb250cm9sIHRoZQorCSAqIHRhcmdldCBvZiBTQS0xMTExIERNQSAoZWl0aGVyIFNEUkFNIGJhbmsgMCBvbiBBc3NhYmV0LCBvcgorCSAqIFNEUkFNIGJhbmsgMSBvbiBOZXBvbnNldCkuIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gc2VsZWN0cworCSAqIEFzc2FiZXQsIHNvIGFueSBhZGRyZXNzIGluIGJhbmsgMSBpcyBuZWNlc3NhcmlseSBpbnZhbGlkLgorCSAqLworCXJldHVybiAoKG1hY2hpbmVfaXNfYXNzYWJldCgpIHx8IG1hY2hpbmVfaXNfcGZzMTY4KCkpICYmCisJCShhZGRyID49IDB4YzgwMDAwMDAgfHwgKGFkZHIgKyBzaXplKSA+PSAweGM4MDAwMDAwKSk7Cit9CisKK3N0cnVjdCBzYTExMTFfc2F2ZV9kYXRhIHsKKwl1bnNpZ25lZCBpbnQJc2tjcjsKKwl1bnNpZ25lZCBpbnQJc2twY3I7CisJdW5zaWduZWQgaW50CXNrY2RyOworCXVuc2lnbmVkIGNoYXIJc2thdWQ7CisJdW5zaWduZWQgY2hhcglza3B3bTA7CisJdW5zaWduZWQgY2hhcglza3B3bTE7CisKKwkvKgorCSAqIEludGVycnVwdCBjb250cm9sbGVyCisJICovCisJdW5zaWduZWQgaW50CWludHBvbDA7CisJdW5zaWduZWQgaW50CWludHBvbDE7CisJdW5zaWduZWQgaW50CWludGVuMDsKKwl1bnNpZ25lZCBpbnQJaW50ZW4xOworCXVuc2lnbmVkIGludAl3YWtlcG9sMDsKKwl1bnNpZ25lZCBpbnQJd2FrZXBvbDE7CisJdW5zaWduZWQgaW50CXdha2VlbjA7CisJdW5zaWduZWQgaW50CXdha2VlbjE7Cit9OworCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgc2ExMTExX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUsIHUzMiBsZXZlbCkKK3sKKwlzdHJ1Y3Qgc2ExMTExICpzYWNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2ExMTExX3NhdmVfZGF0YSAqc2F2ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCB2YWw7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJaWYgKGxldmVsICE9IFNVU1BFTkRfRElTQUJMRSkKKwkJcmV0dXJuIDA7CisKKwlzYXZlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNhMTExMV9zYXZlX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNhdmUpCisJCXJldHVybiAtRU5PTUVNOworCWRldi0+cG93ZXIuc2F2ZWRfc3RhdGUgPSBzYXZlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBTYXZlIHN0YXRlLgorCSAqLworCWJhc2UgPSBzYWNoaXAtPmJhc2U7CisJc2F2ZS0+c2tjciAgICAgPSBzYTExMTFfcmVhZGwoYmFzZSArIFNBMTExMV9TS0NSKTsKKwlzYXZlLT5za3BjciAgICA9IHNhMTExMV9yZWFkbChiYXNlICsgU0ExMTExX1NLUENSKTsKKwlzYXZlLT5za2NkciAgICA9IHNhMTExMV9yZWFkbChiYXNlICsgU0ExMTExX1NLQ0RSKTsKKwlzYXZlLT5za2F1ZCAgICA9IHNhMTExMV9yZWFkbChiYXNlICsgU0ExMTExX1NLQVVEKTsKKwlzYXZlLT5za3B3bTAgICA9IHNhMTExMV9yZWFkbChiYXNlICsgU0ExMTExX1NLUFdNMCk7CisJc2F2ZS0+c2twd20xICAgPSBzYTExMTFfcmVhZGwoYmFzZSArIFNBMTExMV9TS1BXTTEpOworCisJYmFzZSA9IHNhY2hpcC0+YmFzZSArIFNBMTExMV9JTlRDOworCXNhdmUtPmludHBvbDAgID0gc2ExMTExX3JlYWRsKGJhc2UgKyBTQTExMTFfSU5UUE9MMCk7CisJc2F2ZS0+aW50cG9sMSAgPSBzYTExMTFfcmVhZGwoYmFzZSArIFNBMTExMV9JTlRQT0wxKTsKKwlzYXZlLT5pbnRlbjAgICA9IHNhMTExMV9yZWFkbChiYXNlICsgU0ExMTExX0lOVEVOMCk7CisJc2F2ZS0+aW50ZW4xICAgPSBzYTExMTFfcmVhZGwoYmFzZSArIFNBMTExMV9JTlRFTjEpOworCXNhdmUtPndha2Vwb2wwID0gc2ExMTExX3JlYWRsKGJhc2UgKyBTQTExMTFfV0FLRVBPTDApOworCXNhdmUtPndha2Vwb2wxID0gc2ExMTExX3JlYWRsKGJhc2UgKyBTQTExMTFfV0FLRVBPTDEpOworCXNhdmUtPndha2VlbjAgID0gc2ExMTExX3JlYWRsKGJhc2UgKyBTQTExMTFfV0FLRUVOMCk7CisJc2F2ZS0+d2FrZWVuMSAgPSBzYTExMTFfcmVhZGwoYmFzZSArIFNBMTExMV9XQUtFRU4xKTsKKworCS8qCisJICogRGlzYWJsZS4KKwkgKi8KKwl2YWwgPSBzYTExMTFfcmVhZGwoc2FjaGlwLT5iYXNlICsgU0ExMTExX1NLQ1IpOworCXNhMTExMV93cml0ZWwodmFsIHwgU0tDUl9TTEVFUCwgc2FjaGlwLT5iYXNlICsgU0ExMTExX1NLQ1IpOworCXNhMTExMV93cml0ZWwoMCwgc2FjaGlwLT5iYXNlICsgU0ExMTExX1NLUFdNMCk7CisJc2ExMTExX3dyaXRlbCgwLCBzYWNoaXAtPmJhc2UgKyBTQTExMTFfU0tQV00xKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKglzYTExMTFfcmVzdW1lIC0gUmVzdG9yZSB0aGUgU0ExMTExIGRldmljZSBzdGF0ZS4KKyAqCUBkZXY6IGRldmljZSB0byByZXN0b3JlCisgKglAbGV2ZWw6IHJlc3VtZSBsZXZlbAorICoKKyAqCVJlc3RvcmUgdGhlIGdlbmVyYWwgc3RhdGUgb2YgdGhlIFNBMTExMTsgY2xvY2sgY29udHJvbCBhbmQKKyAqCWludGVycnVwdCBjb250cm9sbGVyLiAgT3RoZXIgcGFydHMgb2YgdGhlIFNBMTExMSBtdXN0IGJlCisgKglyZXN0b3JlZCBieSB0aGVpciByZXNwZWN0aXZlIGRyaXZlcnMsIGFuZCBtdXN0IGJlIGNhbGxlZAorICoJdmlhIExETSBhZnRlciB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW50IHNhMTExMV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgbGV2ZWwpCit7CisJc3RydWN0IHNhMTExMSAqc2FjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNhMTExMV9zYXZlX2RhdGEgKnNhdmU7CisJdW5zaWduZWQgbG9uZyBmbGFncywgaWQ7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJaWYgKGxldmVsICE9IFJFU1VNRV9FTkFCTEUpCisJCXJldHVybiAwOworCisJc2F2ZSA9IChzdHJ1Y3Qgc2ExMTExX3NhdmVfZGF0YSAqKWRldi0+cG93ZXIuc2F2ZWRfc3RhdGU7CisJaWYgKCFzYXZlKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogRW5zdXJlIHRoYXQgdGhlIFNBMTExMSBpcyBzdGlsbCBoZXJlLgorCSAqIEZJWE1FOiBzaG91bGRuJ3QgZG8gdGhpcyBoZXJlLgorCSAqLworCWlkID0gc2ExMTExX3JlYWRsKHNhY2hpcC0+YmFzZSArIFNBMTExMV9TS0lEKTsKKwlpZiAoKGlkICYgU0tJRF9JRF9NQVNLKSAhPSBTS0lEX1NBMTExMV9JRCkgeworCQlfX3NhMTExMV9yZW1vdmUoc2FjaGlwKTsKKwkJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJCWtmcmVlKHNhdmUpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIEZpcnN0IG9mIGFsbCwgd2FrZSB1cCB0aGUgY2hpcC4KKwkgKi8KKwlzYTExMTFfd2FrZShzYWNoaXApOworCXNhMTExMV93cml0ZWwoMCwgc2FjaGlwLT5iYXNlICsgU0ExMTExX0lOVEMgKyBTQTExMTFfSU5URU4wKTsKKwlzYTExMTFfd3JpdGVsKDAsIHNhY2hpcC0+YmFzZSArIFNBMTExMV9JTlRDICsgU0ExMTExX0lOVEVOMSk7CisKKwliYXNlID0gc2FjaGlwLT5iYXNlOworCXNhMTExMV93cml0ZWwoc2F2ZS0+c2tjciwgICAgIGJhc2UgKyBTQTExMTFfU0tDUik7CisJc2ExMTExX3dyaXRlbChzYXZlLT5za3BjciwgICAgYmFzZSArIFNBMTExMV9TS1BDUik7CisJc2ExMTExX3dyaXRlbChzYXZlLT5za2NkciwgICAgYmFzZSArIFNBMTExMV9TS0NEUik7CisJc2ExMTExX3dyaXRlbChzYXZlLT5za2F1ZCwgICAgYmFzZSArIFNBMTExMV9TS0FVRCk7CisJc2ExMTExX3dyaXRlbChzYXZlLT5za3B3bTAsICAgYmFzZSArIFNBMTExMV9TS1BXTTApOworCXNhMTExMV93cml0ZWwoc2F2ZS0+c2twd20xLCAgIGJhc2UgKyBTQTExMTFfU0tQV00xKTsKKworCWJhc2UgPSBzYWNoaXAtPmJhc2UgKyBTQTExMTFfSU5UQzsKKwlzYTExMTFfd3JpdGVsKHNhdmUtPmludHBvbDAsICBiYXNlICsgU0ExMTExX0lOVFBPTDApOworCXNhMTExMV93cml0ZWwoc2F2ZS0+aW50cG9sMSwgIGJhc2UgKyBTQTExMTFfSU5UUE9MMSk7CisJc2ExMTExX3dyaXRlbChzYXZlLT5pbnRlbjAsICAgYmFzZSArIFNBMTExMV9JTlRFTjApOworCXNhMTExMV93cml0ZWwoc2F2ZS0+aW50ZW4xLCAgIGJhc2UgKyBTQTExMTFfSU5URU4xKTsKKwlzYTExMTFfd3JpdGVsKHNhdmUtPndha2Vwb2wwLCBiYXNlICsgU0ExMTExX1dBS0VQT0wwKTsKKwlzYTExMTFfd3JpdGVsKHNhdmUtPndha2Vwb2wxLCBiYXNlICsgU0ExMTExX1dBS0VQT0wxKTsKKwlzYTExMTFfd3JpdGVsKHNhdmUtPndha2VlbjAsICBiYXNlICsgU0ExMTExX1dBS0VFTjApOworCXNhMTExMV93cml0ZWwoc2F2ZS0+d2FrZWVuMSwgIGJhc2UgKyBTQTExMTFfV0FLRUVOMSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKKworCWRldi0+cG93ZXIuc2F2ZWRfc3RhdGUgPSBOVUxMOworCWtmcmVlKHNhdmUpOworCisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIHNhMTExMV9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgc2ExMTExX3Jlc3VtZSAgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBpbnQgc2ExMTExX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHJlc291cmNlICptZW07CisJaW50IGlycTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFtZW0pCisJCXJldHVybiAtRUlOVkFMOworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisKKwlyZXR1cm4gX19zYTExMTFfcHJvYmUoZGV2LCBtZW0sIGlycSk7Cit9CisKK3N0YXRpYyBpbnQgc2ExMTExX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNhMTExMSAqc2FjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoc2FjaGlwKSB7CisJCV9fc2ExMTExX3JlbW92ZShzYWNoaXApOworCQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKworI2lmZGVmIENPTkZJR19QTQorCQlrZnJlZShkZXYtPnBvd2VyLnNhdmVkX3N0YXRlKTsKKwkJZGV2LT5wb3dlci5zYXZlZF9zdGF0ZSA9IE5VTEw7CisjZW5kaWYKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqCU5vdCBzdXJlIGlmIHRoaXMgc2hvdWxkIGJlIG9uIHRoZSBzeXN0ZW0gYnVzIG9yIG5vdCB5ZXQuCisgKglXZSByZWFsbHkgd2FudCBzb21lIHdheSB0byByZWdpc3RlciBhIHN5c3RlbSBkZXZpY2UgYXQKKyAqCXRoZSBwZXItbWFjaGluZSBsZXZlbCwgYW5kIHRoZW4gaGF2ZSB0aGlzIGRyaXZlciBwaWNrCisgKgl1cCB0aGUgcmVnaXN0ZXJlZCBkZXZpY2VzLgorICoKKyAqCVdlIGFsc28gbmVlZCB0byBoYW5kbGUgdGhlIFNEUkFNIGNvbmZpZ3VyYXRpb24gZm9yCisgKglQWEEyNTAvU0ExMTEwIG1hY2hpbmUgY2xhc3Nlcy4KKyAqLworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNhMTExMV9kZXZpY2VfZHJpdmVyID0geworCS5uYW1lCQk9ICJzYTExMTEiLAorCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorCS5wcm9iZQkJPSBzYTExMTFfcHJvYmUsCisJLnJlbW92ZQkJPSBzYTExMTFfcmVtb3ZlLAorCS5zdXNwZW5kCT0gc2ExMTExX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzYTExMTFfcmVzdW1lLAorfTsKKworLyoKKyAqCUdldCB0aGUgcGFyZW50IGRldmljZSBkcml2ZXIgKHVzKSBzdHJ1Y3R1cmUKKyAqCWZyb20gYSBjaGlsZCBmdW5jdGlvbiBkZXZpY2UKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2ExMTExICpzYTExMTFfY2hpcF9kcml2ZXIoc3RydWN0IHNhMTExMV9kZXYgKnNhZGV2KQoreworCXJldHVybiAoc3RydWN0IHNhMTExMSAqKWRldl9nZXRfZHJ2ZGF0YShzYWRldi0+ZGV2LnBhcmVudCk7Cit9CisKKy8qCisgKiBUaGUgYml0cyBpbiB0aGUgb3BkaXYgZmllbGQgYXJlIG5vbi1saW5lYXIuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG9wZGl2X3RhYmxlW10gPSB7IDEsIDQsIDIsIDggfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBfX3NhMTExMV9wbGxfY2xvY2soc3RydWN0IHNhMTExMSAqc2FjaGlwKQoreworCXVuc2lnbmVkIGludCBza2NkciwgZmJkaXYsIGlwZGl2LCBvcGRpdjsKKworCXNrY2RyID0gc2ExMTExX3JlYWRsKHNhY2hpcC0+YmFzZSArIFNBMTExMV9TS0NEUik7CisKKwlmYmRpdiA9IChza2NkciAmIDB4MDA3ZikgKyAyOworCWlwZGl2ID0gKChza2NkciAmIDB4MGY4MCkgPj4gNykgKyAyOworCW9wZGl2ID0gb3BkaXZfdGFibGVbKHNrY2RyICYgMHgzMDAwKSA+PiAxMl07CisKKwlyZXR1cm4gMzY4NjQwMCAqIGZiZGl2IC8gKGlwZGl2ICogb3BkaXYpOworfQorCisvKioKKyAqCXNhMTExMV9wbGxfY2xvY2sgLSByZXR1cm4gdGhlIGN1cnJlbnQgUExMIGNsb2NrIGZyZXF1ZW5jeS4KKyAqCUBzYWRldjogU0ExMTExIGZ1bmN0aW9uIGJsb2NrCisgKgorICoJQlVHOiB3ZSBzaG91bGQgbG9vayBhdCBTS0NSLiAgV2UgYWxzbyBibGluZGx5IGJlbGlldmUgdGhhdAorICoJdGhlIGNoaXAgaXMgYmVpbmcgZmVkIHdpdGggdGhlIDMuNjg2NE1IeiBjbG9jay4KKyAqCisgKglSZXR1cm5zIHRoZSBQTEwgY2xvY2sgaW4gSHouCisgKi8KK3Vuc2lnbmVkIGludCBzYTExMTFfcGxsX2Nsb2NrKHN0cnVjdCBzYTExMTFfZGV2ICpzYWRldikKK3sKKwlzdHJ1Y3Qgc2ExMTExICpzYWNoaXAgPSBzYTExMTFfY2hpcF9kcml2ZXIoc2FkZXYpOworCisJcmV0dXJuIF9fc2ExMTExX3BsbF9jbG9jayhzYWNoaXApOworfQorCisvKioKKyAqCXNhMTExMV9zZWxlY3RfYXVkaW9fbW9kZSAtIHNlbGVjdCBJMlMgb3IgQUMgbGluayBtb2RlCisgKglAc2FkZXY6IFNBMTExMSBmdW5jdGlvbiBibG9jaworICoJQG1vZGU6IE9uZSBvZiAlU0ExMTExX0FVRElPX0FDTElOSyBvciAlU0ExMTExX0FVRElPX0kyUworICoKKyAqCUZyb2IgdGhlIFNLQ1IgdG8gc2VsZWN0IEFDIExpbmsgbW9kZSBvciBJMlMgbW9kZSBmb3IKKyAqCXRoZSBhdWRpbyBibG9jay4KKyAqLwordm9pZCBzYTExMTFfc2VsZWN0X2F1ZGlvX21vZGUoc3RydWN0IHNhMTExMV9kZXYgKnNhZGV2LCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3Qgc2ExMTExICpzYWNoaXAgPSBzYTExMTFfY2hpcF9kcml2ZXIoc2FkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKKworCXZhbCA9IHNhMTExMV9yZWFkbChzYWNoaXAtPmJhc2UgKyBTQTExMTFfU0tDUik7CisJaWYgKG1vZGUgPT0gU0ExMTExX0FVRElPX0kyUykgeworCQl2YWwgJj0gflNLQ1JfU0VMQUM7CisJfSBlbHNlIHsKKwkJdmFsIHw9IFNLQ1JfU0VMQUM7CisJfQorCXNhMTExMV93cml0ZWwodmFsLCBzYWNoaXAtPmJhc2UgKyBTQTExMTFfU0tDUik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKglzYTExMTFfc2V0X2F1ZGlvX3JhdGUgLSBzZXQgdGhlIGF1ZGlvIHNhbXBsZSByYXRlCisgKglAc2FkZXY6IFNBMTExMSBTQUMgZnVuY3Rpb24gYmxvY2sKKyAqCUByYXRlOiBzYW1wbGUgcmF0ZSB0byBzZWxlY3QKKyAqLworaW50IHNhMTExMV9zZXRfYXVkaW9fcmF0ZShzdHJ1Y3Qgc2ExMTExX2RldiAqc2FkZXYsIGludCByYXRlKQoreworCXN0cnVjdCBzYTExMTEgKnNhY2hpcCA9IHNhMTExMV9jaGlwX2RyaXZlcihzYWRldik7CisJdW5zaWduZWQgaW50IGRpdjsKKworCWlmIChzYWRldi0+ZGV2aWQgIT0gU0ExMTExX0RFVklEX1NBQykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkaXYgPSAoX19zYTExMTFfcGxsX2Nsb2NrKHNhY2hpcCkgLyAyNTYgKyByYXRlIC8gMikgLyByYXRlOworCWlmIChkaXYgPT0gMCkKKwkJZGl2ID0gMTsKKwlpZiAoZGl2ID4gMTI4KQorCQlkaXYgPSAxMjg7CisKKwlzYTExMTFfd3JpdGVsKGRpdiAtIDEsIHNhY2hpcC0+YmFzZSArIFNBMTExMV9TS0FVRCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKglzYTExMTFfZ2V0X2F1ZGlvX3JhdGUgLSBnZXQgdGhlIGF1ZGlvIHNhbXBsZSByYXRlCisgKglAc2FkZXY6IFNBMTExMSBTQUMgZnVuY3Rpb24gYmxvY2sgZGV2aWNlCisgKi8KK2ludCBzYTExMTFfZ2V0X2F1ZGlvX3JhdGUoc3RydWN0IHNhMTExMV9kZXYgKnNhZGV2KQoreworCXN0cnVjdCBzYTExMTEgKnNhY2hpcCA9IHNhMTExMV9jaGlwX2RyaXZlcihzYWRldik7CisJdW5zaWduZWQgbG9uZyBkaXY7CisKKwlpZiAoc2FkZXYtPmRldmlkICE9IFNBMTExMV9ERVZJRF9TQUMpCisJCXJldHVybiAtRUlOVkFMOworCisJZGl2ID0gc2ExMTExX3JlYWRsKHNhY2hpcC0+YmFzZSArIFNBMTExMV9TS0FVRCkgKyAxOworCisJcmV0dXJuIF9fc2ExMTExX3BsbF9jbG9jayhzYWNoaXApIC8gKDI1NiAqIGRpdik7Cit9CisKK3ZvaWQgc2ExMTExX3NldF9pb19kaXIoc3RydWN0IHNhMTExMV9kZXYgKnNhZGV2LAorCQkgICAgICAgdW5zaWduZWQgaW50IGJpdHMsIHVuc2lnbmVkIGludCBkaXIsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgc2xlZXBfZGlyKQoreworCXN0cnVjdCBzYTExMTEgKnNhY2hpcCA9IHNhMTExMV9jaGlwX2RyaXZlcihzYWRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgdmFsOworCXZvaWQgX19pb21lbSAqZ3BpbyA9IHNhY2hpcC0+YmFzZSArIFNBMTExMV9HUElPOworCisjZGVmaW5lIE1PRElGWV9CSVRTKHBvcnQsIG1hc2ssIGRpcikJCVwKKwlpZiAobWFzaykgewkJCQlcCisJCXZhbCA9IHNhMTExMV9yZWFkbChwb3J0KTsJXAorCQl2YWwgJj0gfihtYXNrKTsJCQlcCisJCXZhbCB8PSAoZGlyKSAmIChtYXNrKTsJCVwKKwkJc2ExMTExX3dyaXRlbCh2YWwsIHBvcnQpOwlcCisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOworCU1PRElGWV9CSVRTKGdwaW8gKyBTQTExMTFfR1BJT19QQUREUiwgYml0cyAmIDE1LCBkaXIpOworCU1PRElGWV9CSVRTKGdwaW8gKyBTQTExMTFfR1BJT19QQkREUiwgKGJpdHMgPj4gOCkgJiAyNTUsIGRpciA+PiA4KTsKKwlNT0RJRllfQklUUyhncGlvICsgU0ExMTExX0dQSU9fUENERFIsIChiaXRzID4+IDE2KSAmIDI1NSwgZGlyID4+IDE2KTsKKworCU1PRElGWV9CSVRTKGdwaW8gKyBTQTExMTFfR1BJT19QQVNEUiwgYml0cyAmIDE1LCBzbGVlcF9kaXIpOworCU1PRElGWV9CSVRTKGdwaW8gKyBTQTExMTFfR1BJT19QQlNEUiwgKGJpdHMgPj4gOCkgJiAyNTUsIHNsZWVwX2RpciA+PiA4KTsKKwlNT0RJRllfQklUUyhncGlvICsgU0ExMTExX0dQSU9fUENTRFIsIChiaXRzID4+IDE2KSAmIDI1NSwgc2xlZXBfZGlyID4+IDE2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKK30KKwordm9pZCBzYTExMTFfc2V0X2lvKHN0cnVjdCBzYTExMTFfZGV2ICpzYWRldiwgdW5zaWduZWQgaW50IGJpdHMsIHVuc2lnbmVkIGludCB2KQoreworCXN0cnVjdCBzYTExMTEgKnNhY2hpcCA9IHNhMTExMV9jaGlwX2RyaXZlcihzYWRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgdmFsOworCXZvaWQgX19pb21lbSAqZ3BpbyA9IHNhY2hpcC0+YmFzZSArIFNBMTExMV9HUElPOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOworCU1PRElGWV9CSVRTKGdwaW8gKyBTQTExMTFfR1BJT19QQURXUiwgYml0cyAmIDE1LCB2KTsKKwlNT0RJRllfQklUUyhncGlvICsgU0ExMTExX0dQSU9fUEJEV1IsIChiaXRzID4+IDgpICYgMjU1LCB2ID4+IDgpOworCU1PRElGWV9CSVRTKGdwaW8gKyBTQTExMTFfR1BJT19QQ0RXUiwgKGJpdHMgPj4gMTYpICYgMjU1LCB2ID4+IDE2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKK30KKwordm9pZCBzYTExMTFfc2V0X3NsZWVwX2lvKHN0cnVjdCBzYTExMTFfZGV2ICpzYWRldiwgdW5zaWduZWQgaW50IGJpdHMsIHVuc2lnbmVkIGludCB2KQoreworCXN0cnVjdCBzYTExMTEgKnNhY2hpcCA9IHNhMTExMV9jaGlwX2RyaXZlcihzYWRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgdmFsOworCXZvaWQgX19pb21lbSAqZ3BpbyA9IHNhY2hpcC0+YmFzZSArIFNBMTExMV9HUElPOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOworCU1PRElGWV9CSVRTKGdwaW8gKyBTQTExMTFfR1BJT19QQVNTUiwgYml0cyAmIDE1LCB2KTsKKwlNT0RJRllfQklUUyhncGlvICsgU0ExMTExX0dQSU9fUEJTU1IsIChiaXRzID4+IDgpICYgMjU1LCB2ID4+IDgpOworCU1PRElGWV9CSVRTKGdwaW8gKyBTQTExMTFfR1BJT19QQ1NTUiwgKGJpdHMgPj4gMTYpICYgMjU1LCB2ID4+IDE2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIEluZGl2aWR1YWwgZGV2aWNlIG9wZXJhdGlvbnMuCisgKi8KKworLyoqCisgKglzYTExMTFfZW5hYmxlX2RldmljZSAtIGVuYWJsZSBhbiBvbi1jaGlwIFNBMTExMSBmdW5jdGlvbiBibG9jaworICoJQHNhZGV2OiBTQTExMTEgZnVuY3Rpb24gYmxvY2sgZGV2aWNlIHRvIGVuYWJsZQorICovCit2b2lkIHNhMTExMV9lbmFibGVfZGV2aWNlKHN0cnVjdCBzYTExMTFfZGV2ICpzYWRldikKK3sKKwlzdHJ1Y3Qgc2ExMTExICpzYWNoaXAgPSBzYTExMTFfY2hpcF9kcml2ZXIoc2FkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKKwl2YWwgPSBzYTExMTFfcmVhZGwoc2FjaGlwLT5iYXNlICsgU0ExMTExX1NLUENSKTsKKwlzYTExMTFfd3JpdGVsKHZhbCB8IHNhZGV2LT5za3Bjcl9tYXNrLCBzYWNoaXAtPmJhc2UgKyBTQTExMTFfU0tQQ1IpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqCXNhMTExMV9kaXNhYmxlX2RldmljZSAtIGRpc2FibGUgYW4gb24tY2hpcCBTQTExMTEgZnVuY3Rpb24gYmxvY2sKKyAqCUBzYWRldjogU0ExMTExIGZ1bmN0aW9uIGJsb2NrIGRldmljZSB0byBkaXNhYmxlCisgKi8KK3ZvaWQgc2ExMTExX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCBzYTExMTFfZGV2ICpzYWRldikKK3sKKwlzdHJ1Y3Qgc2ExMTExICpzYWNoaXAgPSBzYTExMTFfY2hpcF9kcml2ZXIoc2FkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKKwl2YWwgPSBzYTExMTFfcmVhZGwoc2FjaGlwLT5iYXNlICsgU0ExMTExX1NLUENSKTsKKwlzYTExMTFfd3JpdGVsKHZhbCAmIH5zYWRldi0+c2twY3JfbWFzaywgc2FjaGlwLT5iYXNlICsgU0ExMTExX1NLUENSKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqCVNBMTExMSAiUmVnaXN0ZXIgQWNjZXNzIEJ1cy4iCisgKgorICoJV2UgbW9kZWwgdGhpcyBhcyBhIHJlZ3VsYXIgYnVzIHR5cGUsIGFuZCBoYW5nIGRldmljZXMgZGlyZWN0bHkKKyAqCW9mZiB0aGlzLgorICovCitzdGF0aWMgaW50IHNhMTExMV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpfZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqX2RydikKK3sKKwlzdHJ1Y3Qgc2ExMTExX2RldiAqZGV2ID0gU0ExMTExX0RFVihfZGV2KTsKKwlzdHJ1Y3Qgc2ExMTExX2RyaXZlciAqZHJ2ID0gU0ExMTExX0RSVihfZHJ2KTsKKworCXJldHVybiBkZXYtPmRldmlkID09IGRydi0+ZGV2aWQ7Cit9CisKK3N0YXRpYyBpbnQgc2ExMTExX2J1c19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzYTExMTFfZGV2ICpzYWRldiA9IFNBMTExMV9ERVYoZGV2KTsKKwlzdHJ1Y3Qgc2ExMTExX2RyaXZlciAqZHJ2ID0gU0ExMTExX0RSVihkZXYtPmRyaXZlcik7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZHJ2ICYmIGRydi0+c3VzcGVuZCkKKwkJcmV0ID0gZHJ2LT5zdXNwZW5kKHNhZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzYTExMTFfYnVzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNhMTExMV9kZXYgKnNhZGV2ID0gU0ExMTExX0RFVihkZXYpOworCXN0cnVjdCBzYTExMTFfZHJpdmVyICpkcnYgPSBTQTExMTFfRFJWKGRldi0+ZHJpdmVyKTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChkcnYgJiYgZHJ2LT5yZXN1bWUpCisJCXJldCA9IGRydi0+cmVzdW1lKHNhZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNhMTExMV9idXNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzYTExMTFfZGV2ICpzYWRldiA9IFNBMTExMV9ERVYoZGV2KTsKKwlzdHJ1Y3Qgc2ExMTExX2RyaXZlciAqZHJ2ID0gU0ExMTExX0RSVihkZXYtPmRyaXZlcik7CisJaW50IHJldCA9IC1FTk9ERVY7CisKKwlpZiAoZHJ2LT5wcm9iZSkKKwkJcmV0ID0gZHJ2LT5wcm9iZShzYWRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzYTExMTFfYnVzX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNhMTExMV9kZXYgKnNhZGV2ID0gU0ExMTExX0RFVihkZXYpOworCXN0cnVjdCBzYTExMTFfZHJpdmVyICpkcnYgPSBTQTExMTFfRFJWKGRldi0+ZHJpdmVyKTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChkcnYtPnJlbW92ZSkKKwkJcmV0ID0gZHJ2LT5yZW1vdmUoc2FkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBidXNfdHlwZSBzYTExMTFfYnVzX3R5cGUgPSB7CisJLm5hbWUJCT0gInNhMTExMS1yYWIiLAorCS5tYXRjaAkJPSBzYTExMTFfbWF0Y2gsCisJLnN1c3BlbmQJPSBzYTExMTFfYnVzX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzYTExMTFfYnVzX3Jlc3VtZSwKK307CisKK2ludCBzYTExMTFfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBzYTExMTFfZHJpdmVyICpkcml2ZXIpCit7CisJZHJpdmVyLT5kcnYucHJvYmUgPSBzYTExMTFfYnVzX3Byb2JlOworCWRyaXZlci0+ZHJ2LnJlbW92ZSA9IHNhMTExMV9idXNfcmVtb3ZlOworCWRyaXZlci0+ZHJ2LmJ1cyA9ICZzYTExMTFfYnVzX3R5cGU7CisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZHJpdmVyLT5kcnYpOworfQorCit2b2lkIHNhMTExMV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3Qgc2ExMTExX2RyaXZlciAqZHJpdmVyKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXItPmRydik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNhMTExMV9pbml0KHZvaWQpCit7CisJaW50IHJldCA9IGJ1c19yZWdpc3Rlcigmc2ExMTExX2J1c190eXBlKTsKKwlpZiAocmV0ID09IDApCisJCWRyaXZlcl9yZWdpc3Rlcigmc2ExMTExX2RldmljZV9kcml2ZXIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzYTExMTFfZXhpdCh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZzYTExMTFfZGV2aWNlX2RyaXZlcik7CisJYnVzX3VucmVnaXN0ZXIoJnNhMTExMV9idXNfdHlwZSk7Cit9CisKK21vZHVsZV9pbml0KHNhMTExMV9pbml0KTsKK21vZHVsZV9leGl0KHNhMTExMV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbCBDb3Jwb3JhdGlvbiBTQTExMTEgY29yZSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworRVhQT1JUX1NZTUJPTChzYTExMTFfc2VsZWN0X2F1ZGlvX21vZGUpOworRVhQT1JUX1NZTUJPTChzYTExMTFfc2V0X2F1ZGlvX3JhdGUpOworRVhQT1JUX1NZTUJPTChzYTExMTFfZ2V0X2F1ZGlvX3JhdGUpOworRVhQT1JUX1NZTUJPTChzYTExMTFfc2V0X2lvX2Rpcik7CitFWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfaW8pOworRVhQT1JUX1NZTUJPTChzYTExMTFfc2V0X3NsZWVwX2lvKTsKK0VYUE9SVF9TWU1CT0woc2ExMTExX2VuYWJsZV9kZXZpY2UpOworRVhQT1JUX1NZTUJPTChzYTExMTFfZGlzYWJsZV9kZXZpY2UpOworRVhQT1JUX1NZTUJPTChzYTExMTFfcGxsX2Nsb2NrKTsKK0VYUE9SVF9TWU1CT0woc2ExMTExX2J1c190eXBlKTsKK0VYUE9SVF9TWU1CT0woc2ExMTExX2RyaXZlcl9yZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MKHNhMTExMV9kcml2ZXJfdW5yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2Nvb3AuYyBiL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZDBkM2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb21tb24vc2Nvb3AuYwpAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIFN1cHBvcnQgY29kZSBmb3IgdGhlIFNDT09QIGludGVyZmFjZSBmb3VuZCBvbiB2YXJpb3VzIFNoYXJwIFBEQXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgUmljaGFyZCBQdXJkaWUKKyAqCisgKglCYXNlZCBvbiBjb2RlIHdyaXR0ZW4gYnkgU2hhcnAvTGluZW8gZm9yIDIuNCBrZXJuZWxzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zY29vcC5oPgorCisjZGVmaW5lIFNDT09QX1JFRyhkLGFkcikgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqKShkICsoYWRyKSkpCisKK3N0cnVjdCAgc2Nvb3BfZGV2IHsKKwl2b2lkICAqYmFzZTsKKwlzcGlubG9ja190IHNjb29wX2xvY2s7CisJdTMyIHNjb29wX2dwd3I7Cit9OworCit2b2lkIHJlc2V0X3Njb29wKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2Nvb3BfZGV2ICpzZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9NQ1IpID0gMHgwMTAwOyAgLy8gMDAKKwlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9DRFIpID0gMHgwMDAwOyAgLy8gMDQKKwlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9DUFIpID0gMHgwMDAwOyAgLy8gMEMKKwlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9DQ1IpID0gMHgwMDAwOyAgLy8gMTAKKwlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9JTVIpID0gMHgwMDAwOyAgLy8gMTgKKwlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9JUk0pID0gMHgwMEZGOyAgLy8gMTQKKwlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9JU1IpID0gMHgwMDAwOyAgLy8gMUMKKwlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9JUk0pID0gMHgwMDAwOworfQorCit1bnNpZ25lZCBzaG9ydCBzZXRfc2Nvb3BfZ3BpbyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IGJpdCkKK3sKKwl1bnNpZ25lZCBzaG9ydCBncGlvX2JpdDsKKwl1bnNpZ25lZCBsb25nIGZsYWc7CisJc3RydWN0IHNjb29wX2RldiAqc2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnNjb29wX2xvY2ssIGZsYWcpOworCWdwaW9fYml0ID0gU0NPT1BfUkVHKHNkZXYtPmJhc2UsIFNDT09QX0dQV1IpIHwgYml0OworCVNDT09QX1JFRyhzZGV2LT5iYXNlLCBTQ09PUF9HUFdSKSA9IGdwaW9fYml0OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnNjb29wX2xvY2ssIGZsYWcpOworCisJcmV0dXJuIGdwaW9fYml0OworfQorCit1bnNpZ25lZCBzaG9ydCByZXNldF9zY29vcF9ncGlvKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgYml0KQoreworCXVuc2lnbmVkIHNob3J0IGdwaW9fYml0OworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKwlzdHJ1Y3Qgc2Nvb3BfZGV2ICpzZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+c2Nvb3BfbG9jaywgZmxhZyk7CisJZ3Bpb19iaXQgPSBTQ09PUF9SRUcoc2Rldi0+YmFzZSwgU0NPT1BfR1BXUikgJiB+Yml0OworCVNDT09QX1JFRyhzZGV2LT5iYXNlLFNDT09QX0dQV1IpID0gZ3Bpb19iaXQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+c2Nvb3BfbG9jaywgZmxhZyk7CisKKwlyZXR1cm4gZ3Bpb19iaXQ7Cit9CisKK0VYUE9SVF9TWU1CT0woc2V0X3Njb29wX2dwaW8pOworRVhQT1JUX1NZTUJPTChyZXNldF9zY29vcF9ncGlvKTsKKwordW5zaWduZWQgc2hvcnQgcmVhZF9zY29vcF9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCByZWcpCit7CisJc3RydWN0IHNjb29wX2RldiAqc2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBTQ09PUF9SRUcoc2Rldi0+YmFzZSxyZWcpOworfQorCit2b2lkIHdyaXRlX3Njb29wX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgc2hvcnQgZGF0YSkKK3sKKwlzdHJ1Y3Qgc2Nvb3BfZGV2ICpzZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJU0NPT1BfUkVHKHNkZXYtPmJhc2UscmVnKT1kYXRhOworfQorCitFWFBPUlRfU1lNQk9MKHJlc2V0X3Njb29wKTsKK0VYUE9SVF9TWU1CT0wocmVhZF9zY29vcF9yZWcpOworRVhQT1JUX1NZTUJPTCh3cml0ZV9zY29vcF9yZWcpOworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHNjb29wX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB1aW50MzJfdCBzdGF0ZSwgdWludDMyX3QgbGV2ZWwpCit7CisJaWYgKGxldmVsID09IFNVU1BFTkRfUE9XRVJfRE9XTikgeworCQlzdHJ1Y3Qgc2Nvb3BfZGV2ICpzZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwkJc2Rldi0+c2Nvb3BfZ3B3ciA9IFNDT09QX1JFRyhzZGV2LT5iYXNlLFNDT09QX0dQV1IpOworCQlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9HUFdSKSA9IDA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNjb29wX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVpbnQzMl90IGxldmVsKQoreworCWlmIChsZXZlbCA9PSBSRVNVTUVfUE9XRVJfT04pIHsKKwkJc3RydWN0IHNjb29wX2RldiAqc2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJCVNDT09QX1JFRyhzZGV2LT5iYXNlLFNDT09QX0dQV1IpID0gc2Rldi0+c2Nvb3BfZ3B3cjsKKwl9CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBzY29vcF9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgc2Nvb3BfcmVzdW1lCU5VTEwKKyNlbmRpZgorCitpbnQgX19pbml0IHNjb29wX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2Nvb3BfZGV2ICpkZXZwdHI7CisJc3RydWN0IHNjb29wX2NvbmZpZyAqaW5mOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisKKwlpZiAoIW1lbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXZwdHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2Nvb3BfZGV2KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWRldnB0cikKKwkJcmV0dXJuICAtRU5PTUVNOworCisJbWVtc2V0KGRldnB0ciwgMCwgc2l6ZW9mKHN0cnVjdCBzY29vcF9kZXYpKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2cHRyLT5zY29vcF9sb2NrKTsKKworCWluZiA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlkZXZwdHItPmJhc2UgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIG1lbS0+ZW5kIC0gbWVtLT5zdGFydCArIDEpOworCisJaWYgKCFkZXZwdHItPmJhc2UpIHsKKwkJa2ZyZWUoZGV2cHRyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2X3NldF9kcnZkYXRhKGRldiwgZGV2cHRyKTsKKworCXByaW50aygiU2hhcnAgU2Nvb3AgRGV2aWNlIGZvdW5kIGF0IDB4JTA4eCAtPiAweCUwOHhcbiIsKHVuc2lnbmVkIGludCltZW0tPnN0YXJ0LCh1bnNpZ25lZCBpbnQpZGV2cHRyLT5iYXNlKTsKKworCVNDT09QX1JFRyhkZXZwdHItPmJhc2UsIFNDT09QX01DUikgPSAweDAxNDA7CisJcmVzZXRfc2Nvb3AoZGV2KTsKKwlTQ09PUF9SRUcoZGV2cHRyLT5iYXNlLCBTQ09PUF9HUENSKSA9IGluZi0+aW9fZGlyICYgMHhmZmZmOworCVNDT09QX1JFRyhkZXZwdHItPmJhc2UsIFNDT09QX0dQV1IpID0gaW5mLT5pb19vdXQgJiAweGZmZmY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzY29vcF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzY29vcF9kZXYgKnNkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpZiAoc2RldikgeworCQlpb3VubWFwKHNkZXYtPmJhc2UpOworCQlrZnJlZShzZGV2KTsKKwkJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2Nvb3BfZHJpdmVyID0geworCS5uYW1lCQk9ICJzaGFycC1zY29vcCIsCisJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJLnByb2JlCQk9IHNjb29wX3Byb2JlLAorCS5yZW1vdmUgCT0gc2Nvb3BfcmVtb3ZlLAorCS5zdXNwZW5kCT0gc2Nvb3Bfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNjb29wX3Jlc3VtZSwKK307CisKK2ludCBfX2luaXQgc2Nvb3BfaW5pdCh2b2lkKQoreworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnNjb29wX2RyaXZlcik7Cit9CisKK3N1YnN5c19pbml0Y2FsbChzY29vcF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9zaGFycHNsX3BhcmFtLmMgYi9hcmNoL2FybS9jb21tb24vc2hhcnBzbF9wYXJhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYzU1N2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb21tb24vc2hhcnBzbF9wYXJhbS5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBIYXJkd2FyZSBwYXJhbWV0ZXIgYXJlYSBzcGVjaWZpYyB0byBTaGFycCBTTCBzZXJpZXMgZGV2aWNlcworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBSaWNoYXJkIFB1cmRpZQorICoKKyAqIEJhc2VkIG9uIFNoYXJwJ3MgMi40IGtlcm5lbCBwYXRjaGVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3NoYXJwc2xfcGFyYW0uaD4KKworLyoKKyAqIENlcnRhaW4gaGFyZHdhcmUgcGFyYW1ldGVycyBkZXRlcm1pbmVkIGF0IHRoZSB0aW1lIG9mIGRldmljZSBtYW51ZmFjdHVyZSwKKyAqIHR5cGljYWxseSBpbmNsdWRpbmcgTENEIHBhcmFtZXRlcnMgYXJlIGxvYWRlZCBieSB0aGUgYm9vdGxvYWRlciBhdCB0aGUKKyAqIGFkZHJlc3MgUEFSQU1fQkFTRS4gQXMgdGhlIGtlcm5lbCB3aWxsIG92ZXJ3cml0ZSB0aGVtLCB3ZSBuZWVkIHRvIHN0b3JlCisgKiB0aGVtIGVhcmx5IGluIHRoZSBib290IHByb2Nlc3MsIHRoZW4gcGFzcyB0aGVtIHRvIHRoZSBhcHByb3ByaWF0ZSBkcml2ZXJzLgorICogTm90IGFsbCBkZXZpY2VzIHVzZSBhbGwgcGFyYW1hdGVycyBidXQgdGhlIGZvcm1hdCBpcyBjb21tb24gdG8gYWxsLgorICovCisjaWZkZWYgQVJDSF9TQTExMDAKKyNkZWZpbmUgUEFSQU1fQkFTRQkweGU4ZmZjMDAwCisjZWxzZQorI2RlZmluZSBQQVJBTV9CQVNFCTB4YTAwMDBhMDAKKyNlbmRpZgorI2RlZmluZSBNQUdJQ19DSEcoYSxiLGMsZCkgKCAoIGQgPDwgMjQgKSB8ICggYyA8PCAxNiApICB8ICggYiA8PCA4ICkgfCBhICkKKworI2RlZmluZSBDT01BREpfTUFHSUMJTUFHSUNfQ0hHKCdDJywnTScsJ0EnLCdEJykKKyNkZWZpbmUgVVVJRF9NQUdJQwlNQUdJQ19DSEcoJ1UnLCdVJywnSScsJ0QnKQorI2RlZmluZSBUT1VDSF9NQUdJQwlNQUdJQ19DSEcoJ1QnLCdVJywnQycsJ0gnKQorI2RlZmluZSBBRF9NQUdJQwlNQUdJQ19DSEcoJ0InLCdWJywnQScsJ0QnKQorI2RlZmluZSBQSEFEX01BR0lDCU1BR0lDX0NIRygnUCcsJ0gnLCdBJywnRCcpCisKK3N0cnVjdCBzaGFycHNsX3BhcmFtX2luZm8gc2hhcnBzbF9wYXJhbTsKKwordm9pZCBzaGFycHNsX3NhdmVfcGFyYW0odm9pZCkKK3sKKwltZW1jcHkoJnNoYXJwc2xfcGFyYW0sICh2b2lkICopUEFSQU1fQkFTRSwgc2l6ZW9mKHN0cnVjdCBzaGFycHNsX3BhcmFtX2luZm8pKTsKKworCWlmIChzaGFycHNsX3BhcmFtLmNvbWFkal9rZXl3b3JkICE9IENPTUFESl9NQUdJQykKKwkJc2hhcnBzbF9wYXJhbS5jb21hZGo9LTE7CisKKwlpZiAoc2hhcnBzbF9wYXJhbS5waGFkX2tleXdvcmQgIT0gUEhBRF9NQUdJQykKKwkJc2hhcnBzbF9wYXJhbS5waGFkYWRqPS0xOworCisJaWYgKHNoYXJwc2xfcGFyYW0udXVpZF9rZXl3b3JkICE9IFVVSURfTUFHSUMpCisJCXNoYXJwc2xfcGFyYW0udXVpZFswXT0tMTsKKworCWlmIChzaGFycHNsX3BhcmFtLnRvdWNoX2tleXdvcmQgIT0gVE9VQ0hfTUFHSUMpCisJCXNoYXJwc2xfcGFyYW0udG91Y2hfeHA9LTE7CisKKwlpZiAoc2hhcnBzbF9wYXJhbS5hZGFkal9rZXl3b3JkICE9IEFEX01BR0lDKQorCQlzaGFycHNsX3BhcmFtLmFkYWRqPS0xOworfQorCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi90aW1lLWFjb3JuLmMgYi9hcmNoL2FybS9jb21tb24vdGltZS1hY29ybi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NmFkZDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb21tb24vdGltZS1hY29ybi5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vY29tbW9uL3RpbWUtYWNvcm4uYworICoKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwMCBSdXNzZWxsIEtpbmcuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ2hhbmdlbG9nOgorICogICAyNC1TZXAtMTk5NglSTUsJQ3JlYXRlZAorICogICAxMC1PY3QtMTk5NglSTUsJQnJvdWdodCB1cCB0byBkYXRlIHdpdGggYXJjaC1zYTExMGV2YWwKKyAqICAgMDQtRGVjLTE5OTcJUk1LCVVwZGF0ZWQgZm9yIG5ldyBhcmNoL2FybS90aW1lLmMKKyAqICAgMTM9SnVuLTIwMDQJRFMJTW92ZWQgdG8gYXJjaC9hcm0vY29tbW9uIGIvYyBzaGFyZWQgdy9DTFBTNzUwMAorICovCisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9jLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKK3Vuc2lnbmVkIGxvbmcgaW9jX3RpbWVyX2dldHRpbWVvZmZzZXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgY291bnQxLCBjb3VudDIsIHN0YXR1czsKKwlsb25nIG9mZnNldDsKKworCWlvY193cml0ZWIgKDAsIElPQ19UMExBVENIKTsKKwliYXJyaWVyICgpOworCWNvdW50MSA9IGlvY19yZWFkYihJT0NfVDBDTlRMKSB8IChpb2NfcmVhZGIoSU9DX1QwQ05USCkgPDwgOCk7CisJYmFycmllciAoKTsKKwlzdGF0dXMgPSBpb2NfcmVhZGIoSU9DX0lSUVJFUUEpOworCWJhcnJpZXIgKCk7CisJaW9jX3dyaXRlYiAoMCwgSU9DX1QwTEFUQ0gpOworCWJhcnJpZXIgKCk7CisJY291bnQyID0gaW9jX3JlYWRiKElPQ19UMENOVEwpIHwgKGlvY19yZWFkYihJT0NfVDBDTlRIKSA8PCA4KTsKKworCW9mZnNldCA9IGNvdW50MjsKKwlpZiAoY291bnQyIDwgY291bnQxKSB7CisJCS8qCisJCSAqIFdlIGhhdmUgbm90IGhhZCBhbiBpbnRlcnJ1cHQgYmV0d2VlbiByZWFkaW5nIGNvdW50MQorCQkgKiBhbmQgY291bnQyLgorCQkgKi8KKwkJaWYgKHN0YXR1cyAmICgxIDw8IDUpKQorCQkJb2Zmc2V0IC09IExBVENIOworCX0gZWxzZSBpZiAoY291bnQyID4gY291bnQxKSB7CisJCS8qCisJCSAqIFdlIGhhdmUganVzdCBoYWQgYW5vdGhlciBpbnRlcnJ1cHQgYmV0d2VlbiByZWFkaW5nCisJCSAqIGNvdW50MSBhbmQgY291bnQyLgorCQkgKi8KKwkJb2Zmc2V0IC09IExBVENIOworCX0KKworCW9mZnNldCA9IChMQVRDSCAtIG9mZnNldCkgKiAodGlja19uc2VjIC8gMTAwMCk7CisJcmV0dXJuIChvZmZzZXQgKyBMQVRDSC8yKSAvIExBVENIOworfQorCit2b2lkIF9faW5pdCBpb2N0aW1lX2luaXQodm9pZCkKK3sKKwlpb2Nfd3JpdGViKExBVENIICYgMjU1LCBJT0NfVDBMVENITCk7CisJaW9jX3dyaXRlYihMQVRDSCA+PiA4LCBJT0NfVDBMVENISCk7CisJaW9jX3dyaXRlYigwLCBJT0NfVDBHTyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAoraW9jX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOworCXRpbWVyX3RpY2socmVncyk7CisJd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlvY190aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gInRpbWVyIiwKKwkuZmxhZ3MJCT0gU0FfSU5URVJSVVBULAorCS5oYW5kbGVyCT0gaW9jX3RpbWVyX2ludGVycnVwdAorfTsKKworLyoKKyAqIFNldCB1cCB0aW1lciBpbnRlcnJ1cHQuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBpb2NfdGltZXJfaW5pdCh2b2lkKQoreworCWlvY3RpbWVfaW5pdCgpOworCXNldHVwX2lycShJUlFfVElNRVIsICZpb2NfdGltZXJfaXJxKTsKK30KKworc3RydWN0IHN5c190aW1lciBpb2NfdGltZXIgPSB7CisJLmluaXQJCT0gaW9jX3RpbWVyX2luaXQsCisJLm9mZnNldAkJPSBpb2NfdGltZXJfZ2V0dGltZW9mZnNldCwKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi92aWE4MmM1MDUuYyBiL2FyY2gvYXJtL2NvbW1vbi92aWE4MmM1MDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjcxNmE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29tbW9uL3ZpYTgyYzUwNS5jCkBAIC0wLDAgKzEsOTQgQEAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorCisjZGVmaW5lIE1BWF9TTE9UUwkJNworCisjZGVmaW5lIENPTkZJR19DTUQoYnVzLCBkZXZmbiwgd2hlcmUpICAgKDB4ODAwMDAwMDAgfCAoYnVzLT5udW1iZXIgPDwgMTYpIHwgKGRldmZuIDw8IDgpIHwgKHdoZXJlICYgfjMpKQorCitzdGF0aWMgaW50Cit2aWE4MmM1MDVfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsCisJCSAgICAgIGludCBzaXplLCB1MzIgKnZhbHVlKQoreworCW91dGwoQ09ORklHX0NNRChidXMsZGV2Zm4sd2hlcmUpLDB4Q0Y4KTsKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCSp2YWx1ZT1pbmIoMHhDRkMgKyAod2hlcmUmMykpOworCQlicmVhazsKKwljYXNlIDI6CisJCSp2YWx1ZT1pbncoMHhDRkMgKyAod2hlcmUmMikpOworCQlicmVhazsKKwljYXNlIDQ6CisJCSp2YWx1ZT1pbmwoMHhDRkMpOworCQlicmVhazsKKwl9CisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIGludAordmlhODJjNTA1X3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwKKwkJICAgICAgIGludCBzaXplLCB1MzIgdmFsdWUpCit7CisJb3V0bChDT05GSUdfQ01EKGJ1cyxkZXZmbix3aGVyZSksMHhDRjgpOworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJb3V0Yih2YWx1ZSwgMHhDRkMgKyAod2hlcmUmMykpOworCQlicmVhazsKKwljYXNlIDI6CisJCW91dHcodmFsdWUsIDB4Q0ZDICsgKHdoZXJlJjIpKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlvdXRsKHZhbHVlLCAweENGQyk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9vcHMgdmlhODJjNTA1X29wcyA9IHsKKwkucmVhZAk9IHZpYTgyYzUwNV9yZWFkX2NvbmZpZywKKwkud3JpdGUJPSB2aWE4MmM1MDVfd3JpdGVfY29uZmlnLAorfTsKKwordm9pZCBfX2luaXQgdmlhODJjNTA1X3ByZWluaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBWSUEgODJjNTA1XG4iKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKDB4QTgsMiwidmlhIGNvbmZpZyIpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkciVklBIDgyYzUwNTogVW5hYmxlIHRvIHJlcXVlc3QgcmVnaW9uIDB4QThcbiIpOworCQlyZXR1cm47CisJfQorCWlmICghcmVxdWVzdF9yZWdpb24oMHhDRjgsOCwicGNpIGNvbmZpZyIpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkciVklBIDgyYzUwNTogVW5hYmxlIHRvIHJlcXVlc3QgcmVnaW9uIDB4Q0Y4XG4iKTsKKwkJcmVsZWFzZV9yZWdpb24oMHhBOCwgMik7CisJCXJldHVybjsKKwl9CisKKwkvKiBFbmFibGUgY29tcGF0aWJsZSBNb2RlICovCisJb3V0YigweDk2LDB4QTgpOworCW91dGIoMHgxOCwweEE5KTsKKwlvdXRiKDB4OTMsMHhBOCk7CisJb3V0YigweGQwLDB4QTkpOworCit9CisKK2ludCBfX2luaXQgdmlhODJjNTA1X3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQoreworCXJldHVybiAobnIgPT0gMCk7Cit9CisKK3N0cnVjdCBwY2lfYnVzICogX19pbml0IHZpYTgyYzUwNV9zY2FuX2J1cyhpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5c2RhdGEpCit7CisJaWYgKG5yID09IDApCisJCXJldHVybiBwY2lfc2Nhbl9idXMoMCwgJnZpYTgyYzUwNV9vcHMsIHN5c2RhdGEpOworCisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2Fzc2FiZXRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hc3NhYmV0X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2JiNGMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hc3NhYmV0X2RlZmNvbmZpZwpAQCAtMCwwICsxLDkwNiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjExCisjIFdlZCBNYXIgIDkgMTM6MTM6MzAgMjAwNQorIworQ09ORklHX0FSTT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NBMTEwMD15CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorCisjCisjIFNBMTF4MCBJbXBsZW1lbnRhdGlvbnMKKyMKK0NPTkZJR19TQTExMDBfQVNTQUJFVD15CisjIENPTkZJR19BU1NBQkVUX05FUE9OU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9DRVJGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9DT0xMSUUgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSDM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfTEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfUExFQiBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfU0hBTk5PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfU0lNUEFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9TU1AgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfU0ExMTAwPXkKK0NPTkZJR19DUFVfMzJ2ND15CitDT05GSUdfQ1BVX0FCUlRfRVY0PXkKK0NPTkZJR19DUFVfQ0FDSEVfVjRXQj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQj15CitDT05GSUdfQ1BVX01JTklDQUNIRT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19JU0E9eQorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKK0NPTkZJR19QQ0NBUkQ9eQorIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUE9eQorCisjCisjIFBDLWNhcmQgYnJpZGdlcworIworIyBDT05GSUdfSTgyMzY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDSUMgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9TQTExMDA9eQorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfRElTQ09OVElHTUVNPXkKK0NPTkZJR19MRURTPXkKK0NPTkZJR19MRURTX1RJTUVSPXkKK0NPTkZJR19MRURTX0NQVT15CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0ibWVtPTMyTSBjb25zb2xlPXR0eVNBMCwzODQwMG44IGluaXRyZD0weGMwODAwMDAwLDNNIHJvb3Q9L2Rldi9yYW0iCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUT15CisjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfU0ExMTEwPXkKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfQVBNIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKK0NPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX05PU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9HRU9NRVRSWT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREX1NBMTEwMD15CisjIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisjIENPTkZJR19QTlAgaXMgbm90IHNldAorCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9YRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD1tCisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKK0NPTkZJR19JREU9eQorQ09ORklHX0JMS19ERVZfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz15CisjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworQ09ORklHX0lERV9HRU5FUklDPXkKKyMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorIyBDT05GSUdfSURFX0NISVBTRVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CitDT05GSUdfSVJEQT1tCisKKyMKKyMgSXJEQSBwcm90b2NvbHMKKyMKK0NPTkZJR19JUkxBTj1tCisjIENPTkZJR19JUkNPTU0gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQV9VTFRSQSBpcyBub3Qgc2V0CisKKyMKKyMgSXJEQSBvcHRpb25zCisjCisjIENPTkZJR19JUkRBX0NBQ0hFX0xBU1RfTFNBUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBX0ZBU1RfUlIgaXMgbm90IHNldAorIyBDT05GSUdfSVJEQV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5mcmFyZWQtcG9ydCBkZXZpY2UgZHJpdmVycworIworCisjCisjIFNJUiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfSVJUVFlfU0lSIGlzIG5vdCBzZXQKKworIworIyBEb25nbGUgc3VwcG9ydAorIworCisjCisjIE9sZCBTSVIgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0lSUE9SVF9TSVIgaXMgbm90IHNldAorCisjCisjIE9sZCBTZXJpYWwgZG9uZ2xlIHN1cHBvcnQKKyMKKworIworIyBGSVIgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX05TQ19GSVIgaXMgbm90IHNldAorIyBDT05GSUdfV0lOQk9ORF9GSVIgaXMgbm90IHNldAorIyBDT05GSUdfU01DX0lSQ0NfRklSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMSV9GSVIgaXMgbm90IHNldAorQ09ORklHX1NBMTEwMF9GSVI9bQorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBBUkNuZXQgZGV2aWNlcworIworIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19MQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9SQUNBTCBpcyBub3Qgc2V0CisjIENPTkZJR19BVDE3MDAgaXMgbm90IHNldAorIyBDT05GSUdfREVQQ0EgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lTQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0NLRVQgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfTkVUX1BDTUNJQT15CisjIENPTkZJR19QQ01DSUFfM0M1ODkgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBXzNDNTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9GTVZKMThYIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUFfUENORVQ9eQorIyBDT05GSUdfUENNQ0lBX05NQ0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfU01DOTFDOTIgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1hJUkMyUFMgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX0FYTkVUIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UU0RFVj15CitDT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1g9MjQwCitDT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1k9MzIwCitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IEkvTyBkcml2ZXJzCisjCisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD1tCisjIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0ExMTAwPXkKK0NPTkZJR19TRVJJQUxfU0ExMTAwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKworIworIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TQTExMDA9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPXkKKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKKyMgQ09ORklHX1NORCBpcyBub3Qgc2V0CisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgWEZTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCisjIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKKyMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9iYWRnZTRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9iYWRnZTRfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNDA1OWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2JhZGdlNF9kZWZjb25maWcKQEAgLTAsMCArMSwxMjQwIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgorIyBTYXQgTWFyIDI2IDIxOjMyOjI2IDIwMDUKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19TV0FQPXkKKyMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CitDT05GSUdfTU9EVkVSU0lPTlM9eQorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NBMTEwMD15CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorCisjCisjIFNBMTF4MCBJbXBsZW1lbnRhdGlvbnMKKyMKKyMgQ09ORklHX1NBMTEwMF9BU1NBQkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9DRVJGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9DT0xMSUUgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSDM4MDAgaXMgbm90IHNldAorQ09ORklHX1NBMTEwMF9CQURHRTQ9eQorIyBDT05GSUdfU0ExMTAwX0pPUk5BREE3MjAgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0hBQ0tLSVQgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0xBUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX1BMRUIgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX1NIQU5OT04gaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX1NJTVBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfU1NQIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1NBMTEwMD15CitDT05GSUdfQ1BVXzMydjQ9eQorQ09ORklHX0NQVV9BQlJUX0VWND15CitDT05GSUdfQ1BVX0NBQ0hFX1Y0V0I9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0I9eQorQ09ORklHX0NQVV9NSU5JQ0FDSEU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX1NBMTExMT15CitDT05GSUdfRE1BQk9VTkNFPXkKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTkKKworIworIyBCdXMgc3VwcG9ydAorIworQ09ORklHX0lTQT15CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0RJU0NPTlRJR01FTT15CisjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJpbml0PS9saW51eHJjIHJvb3Q9L2Rldi9tdGRibG9jazMiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKK0NPTkZJR19DUFVfRlJFUT15CitDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfQU9VVD1tCitDT05GSUdfQklORk1UX01JU0M9bQorQ09ORklHX0FSVEhVUj1tCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKK0NPTkZJR19NVERfREVCVUc9eQorQ09ORklHX01URF9ERUJVR19WRVJCT1NFPTAKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX05PU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9HRU9NRVRSWT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKKyMgQ09ORklHX01URF9DRklfSTIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKK0NPTkZJR19NVERfUkFNPXkKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorQ09ORklHX01URF9TQTExMDA9eQorIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19QQVJQT1JUPW0KKyMgQ09ORklHX1BBUlBPUlRfUEMgaXMgbm90IHNldAorQ09ORklHX1BBUlBPUlRfTk9UX1BDPXkKKyMgQ09ORklHX1BBUlBPUlRfQVJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfR1NDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfMTI4NCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisjIENPTkZJR19QTlAgaXMgbm90IHNldAorCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9YRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJJREUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05CRD1tCisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworQ09ORklHX0lERT1tCitDT05GSUdfQkxLX0RFVl9JREU9bQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVESVNLPW0KKyMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDRD1tCisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRkxPUFBZPW0KK0NPTkZJR19CTEtfREVWX0lERVNDU0k9bQorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz1tCisjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9DSElQU0VUUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9bQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPW0KKyMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19TQ1NJXzcwMDBGQVNTVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FIQTE1MlggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSEExNTQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTjIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EVEMzMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QUEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTU0gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OQ1I1M0M0MDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUEFTMTYgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QU0kyNDBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDX0ZBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzQxNiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1QxMjggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9VMTRfMzRGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lQX1RDUERJQUc9eQorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKK0NPTkZJR19JUkRBPXkKKworIworIyBJckRBIHByb3RvY29scworIworQ09ORklHX0lSTEFOPXkKK0NPTkZJR19JUkNPTU09eQorQ09ORklHX0lSREFfVUxUUkE9eQorCisjCisjIElyREEgb3B0aW9ucworIworIyBDT05GSUdfSVJEQV9DQUNIRV9MQVNUX0xTQVAgaXMgbm90IHNldAorIyBDT05GSUdfSVJEQV9GQVNUX1JSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREFfREVCVUcgaXMgbm90IHNldAorCisjCisjIEluZnJhcmVkLXBvcnQgZGV2aWNlIGRyaXZlcnMKKyMKKworIworIyBTSVIgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0lSVFRZX1NJUiBpcyBub3Qgc2V0CisKKyMKKyMgRG9uZ2xlIHN1cHBvcnQKKyMKKworIworIyBPbGQgU0lSIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19JUlBPUlRfU0lSIGlzIG5vdCBzZXQKKworIworIyBPbGQgU2VyaWFsIGRvbmdsZSBzdXBwb3J0CisjCisKKyMKKyMgRklSIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUdNQVRFTF9GSVIgaXMgbm90IHNldAorIyBDT05GSUdfTlNDX0ZJUiBpcyBub3Qgc2V0CisjIENPTkZJR19XSU5CT05EX0ZJUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTUNfSVJDQ19GSVIgaXMgbm90IHNldAorIyBDT05GSUdfQUxJX0ZJUiBpcyBub3Qgc2V0CitDT05GSUdfU0ExMTAwX0ZJUj15CitDT05GSUdfQlQ9bQorQ09ORklHX0JUX0wyQ0FQPW0KKyMgQ09ORklHX0JUX1NDTyBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9SRkNPTU0gaXMgbm90IHNldAorIyBDT05GSUdfQlRfQk5FUCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9ISURQIGlzIG5vdCBzZXQKKworIworIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19CVF9IQ0lVU0I9bQorIyBDT05GSUdfQlRfSENJVVNCX1NDTyBpcyBub3Qgc2V0CitDT05GSUdfQlRfSENJVUFSVD1tCisjIENPTkZJR19CVF9IQ0lVQVJUX0g0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVVBUlRfQkNTUCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCQ00yMDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCRlVTQiBpcyBub3Qgc2V0CitDT05GSUdfQlRfSENJVkhDST1tCitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIEFSQ25ldCBkZXZpY2VzCisjCisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19NSUk9bQorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCitDT05GSUdfTkVUX1JBRElPPXkKKworIworIyBPYnNvbGV0ZSBXaXJlbGVzcyBjYXJkcyBzdXBwb3J0IChwcmUtODAyLjExKQorIworIyBDT05GSUdfU1RSSVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJMQU4gaXMgbm90IHNldAorIyBDT05GSUdfV0FWRUxBTiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgODAyLjExYiBJU0EvUENJIGNhcmRzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfV0lSRUxFU1M9eQorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUExJUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TQTExMDA9eQorQ09ORklHX1NFUklBTF9TQTExMDBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfUFBERVYgaXMgbm90IHNldAorIyBDT05GSUdfVElQQVIgaXMgbm90IHNldAorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19TT0ZUX1dBVENIRE9HPW0KK0NPTkZJR19TQTExMDBfV0FUQ0hET0c9bQorCisjCisjIElTQS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVhDT01XRCBpcyBub3Qgc2V0CisjIENPTkZJR19XRFQgaXMgbm90IHNldAorCisjCisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CitDT05GSUdfUlRDPW0KKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworQ09ORklHX0kyQz1tCitDT05GSUdfSTJDX0NIQVJERVY9bQorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCitDT05GSUdfSTJDX0FMR09CSVQ9bQorQ09ORklHX0kyQ19BTEdPUENGPW0KKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19JMkNfRUxFS1RPUj1tCisjIENPTkZJR19JMkNfSVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBTZW5zb3JzIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX1NFTlNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCitDT05GSUdfVklERU9fREVWPXkKKworIworIyBWaWRlbyBGb3IgTGludXgKKyMKKworIworIyBWaWRlbyBBZGFwdGVycworIworIyBDT05GSUdfVklERU9fUE1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0JXUUNBTSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUUNBTSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAorIyBDT05GSUdfVFVORVJfMzAzNiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVkNBTUNISVAgaXMgbm90IHNldAorCisjCisjIFJhZGlvIEFkYXB0ZXJzCisjCisjIENPTkZJR19SQURJT19DQURFVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19SVFJBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fUlRSQUNLMiBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19BWlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fR0VNVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX01BRVNUUk8gaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fU0YxNkZNSSBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19TRjE2Rk1SMiBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19URVJSQVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19UUlVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19UWVBIT09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1pPTFRSSVggaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRkIgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCitDT05GSUdfU09VTkQ9eQorCisjCisjIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQorIworIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKKworIworIyBPcGVuIFNvdW5kIFN5c3RlbQorIworQ09ORklHX1NPVU5EX1BSSU1FPXkKKyMgQ09ORklHX1NPVU5EX0JUODc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0ZVU0lPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9DUzQyODEgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX01TTkRDTEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX01TTkRQSU4gaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1RWTUlYRVIgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfQUQxOTgwIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9ERUJVRz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CisjIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfQVVESU89eQorCisjCisjIFVTQiBCbHVldG9vdGggVFRZIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBkaXNhYmxlZCBCbHVldG9vdGggc3Vic3lzdGVtCisjCisjIENPTkZJR19VU0JfTUlESSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0FDTT1tCitDT05GSUdfVVNCX1BSSU5URVI9bQorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKK0NPTkZJR19VU0JfU1RPUkFHRV9ERUJVRz15CisjIENPTkZJR19VU0JfU1RPUkFHRV9SV19ERVRFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCisjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKKworIworIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycworIworCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKK0NPTkZJR19VU0JfTURDODAwPW0KK0NPTkZJR19VU0JfTUlDUk9URUs9bQorCisjCisjIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKKyMKK0NPTkZJR19VU0JfREFCVVNCPW0KK0NPTkZJR19VU0JfVklDQU09bQorQ09ORklHX1VTQl9EU0JSPW0KK0NPTkZJR19VU0JfSUJNQ0FNPW0KK0NPTkZJR19VU0JfS09OSUNBV0M9bQorQ09ORklHX1VTQl9PVjUxMT1tCitDT05GSUdfVVNCX1NFNDAxPW0KKyMgQ09ORklHX1VTQl9TTjlDMTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVFY2ODAgaXMgbm90IHNldAorQ09ORklHX1VTQl9QV0M9bQorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCitDT05GSUdfVVNCX0NBVEM9bQorQ09ORklHX1VTQl9LQVdFVEg9bQorQ09ORklHX1VTQl9QRUdBU1VTPW0KKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfVVNCTkVUPW0KKworIworIyBVU0IgSG9zdC10by1Ib3N0IENhYmxlcworIworQ09ORklHX1VTQl9BTElfTTU2MzI9eQorQ09ORklHX1VTQl9BTjI3MjA9eQorQ09ORklHX1VTQl9CRUxLSU49eQorQ09ORklHX1VTQl9HRU5FU1lTPXkKK0NPTkZJR19VU0JfTkVUMTA4MD15CitDT05GSUdfVVNCX1BMMjMwMT15CitDT05GSUdfVVNCX0tDMjE5MD15CisKKyMKKyMgSW50ZWxsaWdlbnQgVVNCIERldmljZXMvR2FkZ2V0cworIworQ09ORklHX1VTQl9BUk1MSU5VWD15CitDT05GSUdfVVNCX0VQU09OMjg4OD15CitDT05GSUdfVVNCX1pBVVJVUz15CitDT05GSUdfVVNCX0NEQ0VUSEVSPXkKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworQ09ORklHX1VTQl9VU1M3MjA9bQorCisjCisjIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfU0VSSUFMPW0KK0NPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQorQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOPW0KK0NPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVD1tCitDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQ9bQorIyBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004IGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX0VNUEVHPW0KK0NPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPPW0KK0NPTkZJR19VU0JfU0VSSUFMX1ZJU09SPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9JUj1tCitDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVD1tCisjIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSVBXIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBPW0KK0NPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU49bQorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX01QUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE4WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVFJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0E0OVcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTQ5V0xDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0xTSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMj1tCitDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9bQorIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfVEkgaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLPW0KK0NPTkZJR19VU0JfU0VSSUFMX1hJUkNPTT1tCitDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUPW0KK0NPTkZJR19VU0JfRVpVU0I9eQorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1JJTzUwMD1tCisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKworIworIyBVU0IgQVRNL0RTTCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9bQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz1tCitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9bQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPW0KKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgWEZTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9bQorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfREVWRlNfRlM9eQorQ09ORklHX0RFVkZTX01PVU5UPXkKKyMgQ09ORklHX0RFVkZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorIyBDT05GSUdfSkZGUzJfRlNfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19OT1JfRUNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9bQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9bQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPW0KK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfU1VOUlBDPW0KKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKK0NPTkZJR19TTUJfRlM9bQorIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfREVCVUdfVVNFUj15CisjIENPTkZJR19ERUJVR19XQUlUUSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRVJST1JTPXkKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19DUkNfQ0NJVFQ9eQorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9iYXN0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYmFzdF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5ODVlOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYmFzdF9kZWZjb25maWcKQEAgLTAsMCArMSw5NTIgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCisjIFN1biBNYXIgMjcgMDI6MjQ6MTYgMjAwNQorIworQ09ORklHX0FSTT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CisjIENPTkZJR19DTEVBTl9DT01QSUxFIGlzIG5vdCBzZXQKK0NPTkZJR19CUk9LRU49eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TM0MyNDEwPXkKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKworIworIyBTM0MyNFhYIEltcGxlbWVudGF0aW9ucworIworQ09ORklHX0FSQ0hfQkFTVD15CisjIENPTkZJR19BUkNIX0gxOTQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU01ESzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDQwIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX1ZSMTAwMD15CisjIENPTkZJR19NQUNIX1JYMzcxNSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX09UT00gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9ORVhDT0RFUl8yNDQwIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfUzNDMjQxMD15CisKKyMKKyMgUzNDMjQxMCBCb290CisjCisjIENPTkZJR19TM0MyNDEwX0JPT1RfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFMzQzI0MTAgU2V0dXAKKyMKK0NPTkZJR19TM0MyNDEwX0RNQT15CisjIENPTkZJR19TM0MyNDEwX0RNQV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TM0MyNDEwX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MzQzI0MTBfUE1fQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX1MzQzI0MTBfTE9XTEVWRUxfVUFSVF9QT1JUPTAKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX0FSTTkyMFQ9eQorQ09ORklHX0NQVV8zMnY0PXkKK0NPTkZJR19DUFVfQUJSVF9FVjRUPXkKK0NPTkZJR19DUFVfQ0FDSEVfVjRXVD15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorCisjCisjIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9oZGExIHJvIGluaXQ9L2Jpbi9iYXNoIGNvbnNvbGU9dHR5U0FDMCIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorQ09ORklHX0FQTT15CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQorQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQorQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAorQ09ORklHX01URF9CQVNUPXkKK0NPTkZJR19NVERfQkFTVF9NQVhTSVpFPTQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorQ09ORklHX01URF9OQU5EX1MzQzI0MTA9eQorIyBDT05GSUdfTVREX05BTkRfUzNDMjQxMF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9TM0MyNDEwX0hXRUNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfUEFSUE9SVD15CisjIENPTkZJR19QQVJQT1JUX1BDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfQVJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfR1NDIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJQT1JUXzEyODQ9eQorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFSSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9OQkQ9bQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKK0NPTkZJR19JREU9eQorQ09ORklHX0JMS19ERVZfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz15CisjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorQ09ORklHX0JMS19ERVZfSURFVEFQRT1tCitDT05GSUdfQkxLX0RFVl9JREVGTE9QUFk9bQorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CisjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERV9CQVNUPXkKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSVBfVENQRElBRz15CisjIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CisjIENPTkZJR19NSUkgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BMSVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fUEFSS0JEIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKKyMgQ09ORklHX0NPTVBVVE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19ST0NLRVRQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NZQ0xBREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PWEFfSU5URUxMSU8gaXMgbm90IHNldAorIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5DTElOS01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0CisjIENPTkZJR19SSVNDT004IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TWCBpcyBub3Qgc2V0CisjIENPTkZJR19SSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBTERSViBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9OAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKK0NPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9NVUxUSVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1MzQzI0MTA9eQorQ09ORklHX1NFUklBTF9TM0MyNDEwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9CQVNUX1NJTz15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKK0NPTkZJR19QUklOVEVSPXkKKyMgQ09ORklHX0xQX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX1BQREVWPXkKKyMgQ09ORklHX1RJUEFSIGlzIG5vdCBzZXQKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TM0MyNDEwX1dBVENIRE9HPXkKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CitDT05GSUdfUzNDMjQxMF9SVEM9eQorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj1tCisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKK0NPTkZJR19JMkNfQUxHT0JJVD1tCisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfSVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfUzNDMjQxMD15CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgU2Vuc29ycyBDaGlwIHN1cHBvcnQKKyMKK0NPTkZJR19JMkNfU0VOU09SPW0KKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfTE03NT1tCisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfTE03OD1tCisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0xNODU9bQorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMgQ2hpcCBzdXBwb3J0CisjCitDT05GSUdfU0VOU09SU19FRVBST009bQorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZCX0NGQl9GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TT0ZUX0NVUlNPUiBpcyBub3Qgc2V0CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAorCisjCisjIExvZ28gY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgWEZTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlNfRlM9eQorQ09ORklHX0pGRlNfRlNfVkVSQk9TRT0wCisjIENPTkZJR19KRkZTX1BST0NfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCisjIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKKyMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19CU0RfRElTS0xBQkVMPXkKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OPXkKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfREVCVUdfVVNFUj15CisjIENPTkZJR19ERUJVR19XQUlUUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUzNDMjQxMF9QT1JUPXkKK0NPTkZJR19ERUJVR19TM0MyNDEwX1VBUlQ9MAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NlcmZjdWJlX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY2VyZmN1YmVfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZmUwZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2NlcmZjdWJlX2RlZmNvbmZpZwpAQCAtMCwwICsxLDkwNSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKKyMgU3VuIE1hciAyNyAxNDoxOTo0MCAyMDA1CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19JT01BUD15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TQTExMDA9eQorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKworIworIyBTQTExeDAgSW1wbGVtZW50YXRpb25zCisjCisjIENPTkZJR19TQTExMDBfQVNTQUJFVCBpcyBub3Qgc2V0CitDT05GSUdfU0ExMTAwX0NFUkY9eQorIyBDT05GSUdfU0ExMTAwX0NFUkZfRkxBU0hfOE1CIGlzIG5vdCBzZXQKK0NPTkZJR19TQTExMDBfQ0VSRl9GTEFTSF8xNk1CPXkKKyMgQ09ORklHX1NBMTEwMF9DRVJGX0ZMQVNIXzMyTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0NPTExJRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSDMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0gzNjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9IMzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfQkFER0U0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9IQUNLS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9MQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9QTEVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9TSEFOTk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9TSU1QQUQgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX1NTUCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9TQTExMDA9eQorQ09ORklHX0NQVV8zMnY0PXkKK0NPTkZJR19DUFVfQUJSVF9FVjQ9eQorQ09ORklHX0NQVV9DQUNIRV9WNFdCPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX1RMQl9WNFdCPXkKK0NPTkZJR19DUFVfTUlOSUNBQ0hFPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKKworIworIyBCdXMgc3VwcG9ydAorIworQ09ORklHX0lTQT15CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworQ09ORklHX1BDQ0FSRD1tCisjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQT1tCisKKyMKKyMgUEMtY2FyZCBicmlkZ2VzCisjCisjIENPTkZJR19JODIzNjUgaXMgbm90IHNldAorIyBDT05GSUdfVENJQyBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBX1NBMTEwMD1tCisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19ESVNDT05USUdNRU09eQorQ09ORklHX0xFRFM9eQorQ09ORklHX0xFRFNfVElNRVI9eQorQ09ORklHX0xFRFNfQ1BVPXkKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNBMCwzODQwMCByb290PS9kZXYvbXRkYmxvY2szIHJvb3Rmc3R5cGU9amZmczIgcncgbWVtPTMyTSBpbml0PS9saW51eHJjIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCitDT05GSUdfQ1BVX0ZSRVE9eQorQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9TVEFUPXkKKyMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT1tCisjIENPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX1NBMTExMD15CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCisjIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAorQ09ORklHX0ZQRV9GQVNURlBFPXkKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfQVBNIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKK0NPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CitDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj1tCitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorQ09ORklHX01URF9TQTExMDA9eQorIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfWEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9bQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT1tCitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKK0NPTkZJR19JREU9eQorQ09ORklHX0JMS19ERVZfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz1tCisjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworQ09ORklHX0lERV9HRU5FUklDPXkKKyMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorIyBDT05GSUdfSURFX0NISVBTRVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSVBfVENQRElBRz15CisjIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIEFSQ25ldCBkZXZpY2VzCisjCisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CisjIENPTkZJR19NSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMTcwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVBDQSBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVNBIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENJPXkKKyMgQ09ORklHX0FDMzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFJJQ09UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NTODl4MCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1NBMTEwMD15CitDT05GSUdfU0VSSUFMX1NBMTEwMF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NBMTEwMF9XQVRDSERPRz1tCisKKyMKKyMgSVNBLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JWENPTVdEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVCBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorCisjCisjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPW0KKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9bQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSkJEPW0KKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT1tCisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisKKyMKKyMgWEZTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPW0KK0NPTkZJR19NU0RPU19GUz1tCitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKKyMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9bQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMz15CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTkZTRF9UQ1A9eQorQ09ORklHX0xPQ0tEPW0KK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9bQorQ09ORklHX1NVTlJQQz1tCitDT05GSUdfU1VOUlBDX0dTUz1tCitDT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCisjIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0VSUk9SUz15CitDT05GSUdfREVCVUdfTEw9eQorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKK0NPTkZJR19DUllQVE89eQorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT1tCisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9bQorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jbHBzNzUwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NscHM3NTAwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDg3NTgzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jbHBzNzUwMF9kZWZjb25maWcKQEAgLTAsMCArMSw4MDMgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCisjIFN1biBNYXIgMjcgMTc6MjA6NDggMjAwNQorIworQ09ORklHX0FSTT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKK0NPTkZJR19BUkNIX0NMUFM3NTAwPXkKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX0FSTTcxMD15CitDT05GSUdfQ1BVXzMydjM9eQorQ09ORklHX0NQVV9DQUNIRV9WMz15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9DT1BZX1YzPXkKK0NPTkZJR19DUFVfVExCX1YzPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19USU1FUl9BQ09STj15CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19JU0E9eQorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJtZW09MTZNIHJvb3Q9bmZzIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCisjIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKKyMgQ09ORklHX01URF9DSEFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCisjIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1BBUlBPUlQ9eQorQ09ORklHX1BBUlBPUlRfUEM9eQorQ09ORklHX1BBUlBPUlRfUENfRklGTz15CisjIENPTkZJR19QQVJQT1JUX1BDX1NVUEVSSU8gaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVF9BUkMgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVF9HU0MgaXMgbm90IHNldAorQ09ORklHX1BBUlBPUlRfMTI4ND15CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisjIENPTkZJR19QTlAgaXMgbm90IHNldAorCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9YRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJJREUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9OQkQ9eQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lQX1RDUERJQUc9eQorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPXkKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTEFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAorIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAorQ09ORklHX05FVF9QQ0k9eQorIyBDT05GSUdfQUMzMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUklDT1QgaXMgbm90IHNldAorQ09ORklHX0NTODl4MD15CisjIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BMSVAgaXMgbm90IHNldAorQ09ORklHX1BQUD15CisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfUFBQX0FTWU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfQlNEQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBPRSBpcyBub3Qgc2V0CitDT05GSUdfU0xJUD15CitDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKKyMgQ09ORklHX1NMSVBfU01BUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUF9NT0RFX1NMSVA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9JTlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfTE9HSUJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BDMTEwUEFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19QQVJLQkQgaXMgbm90IHNldAorQ09ORklHX1NFUklPX1JQQ0tCRD15CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CitDT05GSUdfUFJJTlRFUj15CisjIENPTkZJR19MUF9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEFSIGlzIG5vdCBzZXQKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCitDT05GSUdfSTJDPXkKKyMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKKworIworIyBJMkMgQWxnb3JpdGhtcworIworQ09ORklHX0kyQ19BTEdPQklUPXkKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19FTEVLVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0EgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIFNlbnNvcnMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfU0VOU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfRkI9eQorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKK0NPTkZJR19GQl9TT0ZUX0NVUlNPUj15CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9BQ09STj15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKK0NPTkZJR19GT05UUz15CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CisjIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KQkQgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBYRlMgc3VwcG9ydAorIworIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCisjIENPTkZJR19OTFMgaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lYnNhMTEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZWJzYTExMF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY2MTkyOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZWJzYTExMF9kZWZjb25maWcKQEAgLTAsMCArMSw3NDkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCisjIFN1biBNYXIgMjcgMTg6Mjk6NDggMjAwNQorIworQ09ORklHX0FSTT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VCU0ExMTA9eQorIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1NBMTEwPXkKK0NPTkZJR19DUFVfMzJ2ND15CitDT05GSUdfQ1BVX0FCUlRfRVY0PXkKK0NPTkZJR19DUFVfQ0FDSEVfVjRXQj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQorQ09ORklHX0NQVV9UTEJfVjRXQj15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19JU0E9eQorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKK0NPTkZJR19QQ0NBUkQ9bQorIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUE9bQorCisjCisjIFBDLWNhcmQgYnJpZGdlcworIworQ09ORklHX0k4MjM2NT1tCisjIENPTkZJR19UQ0lDIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUFfUFJPQkU9eQorQ09ORklHX1BDQ0FSRF9OT05TVEFUSUM9bQorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfTEVEUz15CitDT05GSUdfTEVEU19USU1FUj15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIHJ3IG1lbT0xNk0gY29uc29sZT10dHlTMSwzODQwMG44IgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CitDT05GSUdfRlBFX0ZBU1RGUEU9eQorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1BBUlBPUlQ9eQorQ09ORklHX1BBUlBPUlRfUEM9eQorQ09ORklHX1BBUlBPUlRfUENfRklGTz15CisjIENPTkZJR19QQVJQT1JUX1BDX1NVUEVSSU8gaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVF9QQ19QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVF9BUkMgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVF9HU0MgaXMgbm90IHNldAorQ09ORklHX1BBUlBPUlRfMTI4ND15CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisjIENPTkZJR19QTlAgaXMgbm90IHNldAorCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9YRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJJREUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKKyMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQX1JPVVRFX0ZXTUFSSz15CisjIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEggaXMgbm90IHNldAorQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSVBfVENQRElBRz15CitDT05GSUdfSVBfVENQRElBR19JUFY2PXkKKworIworIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorQ09ORklHX0lQVjY9eQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0s9eQorIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9GVFA9eQorQ09ORklHX0lQX05GX0lSQz15CisjIENPTkZJR19JUF9ORl9URlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0FNQU5EQSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfSVBUQUJMRVM9eQorQ09ORklHX0lQX05GX01BVENIX0xJTUlUPXkKK0NPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPXkKK0NPTkZJR19JUF9ORl9NQVRDSF9NQUM9eQorQ09ORklHX0lQX05GX01BVENIX1BLVFRZUEU9eQorQ09ORklHX0lQX05GX01BVENIX01BUks9eQorQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD15CitDT05GSUdfSVBfTkZfTUFUQ0hfVE9TPXkKK0NPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9eQorQ09ORklHX0lQX05GX01BVENIX0VDTj15CitDT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD15CitDT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPXkKK0NPTkZJR19JUF9ORl9NQVRDSF9MRU5HVEg9eQorQ09ORklHX0lQX05GX01BVENIX1RUTD15CitDT05GSUdfSVBfTkZfTUFUQ0hfVENQTVNTPXkKK0NPTkZJR19JUF9ORl9NQVRDSF9IRUxQRVI9eQorQ09ORklHX0lQX05GX01BVENIX1NUQVRFPXkKK0NPTkZJR19JUF9ORl9NQVRDSF9DT05OVFJBQ0s9eQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfRklMVEVSPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPXkKKyMgQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9UQVJHRVRfVENQTVNTPXkKK0NPTkZJR19JUF9ORl9OQVQ9eQorQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9eQorQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9eQorQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPXkKKyMgQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9OQVRfSVJDPXkKK0NPTkZJR19JUF9ORl9OQVRfRlRQPXkKK0NPTkZJR19JUF9ORl9NQU5HTEU9eQorQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9eQorQ09ORklHX0lQX05GX1RBUkdFVF9FQ049eQorQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz15CitDT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPXkKKyMgQ09ORklHX0lQX05GX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUDZfTkZfUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz15CitDT05GSUdfSVA2X05GX01BVENIX0xJTUlUPXkKK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUFDPXkKK0NPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9eQorQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPXkKK0NPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz15CitDT05GSUdfSVA2X05GX01BVENIX0hMPXkKK0NPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPXkKKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUiBpcyBub3Qgc2V0CitDT05GSUdfSVA2X05GX01BVENIX01BUks9eQorIyBDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVIgaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUD15CitDT05GSUdfSVA2X05GX01BVENIX0xFTkdUSD15CisjIENPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQgaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9GSUxURVI9eQorIyBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0cgaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9NQU5HTEU9eQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSz15CisjIENPTkZJR19JUDZfTkZfUkFXIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBBUkNuZXQgZGV2aWNlcworIworIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fQU03OUM5NjFBPXkKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19MQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9SQUNBTCBpcyBub3Qgc2V0CisjIENPTkZJR19BVDE3MDAgaXMgbm90IHNldAorIyBDT05GSUdfREVQQ0EgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lTQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0NLRVQgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfTkVUX1BDTUNJQT15CisjIENPTkZJR19QQ01DSUFfM0M1ODkgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBXzNDNTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9GTVZKMThYIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUFfUENORVQ9bQorIyBDT05GSUdfUENNQ0lBX05NQ0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfU01DOTFDOTIgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1hJUkMyUFMgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX0FYTkVUIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BMSVAgaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorQ09ORklHX1BQUF9BU1lOQz1tCisjIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCisjIENPTkZJR19QUFBPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfQ1M9bQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKK0NPTkZJR19QUklOVEVSPW0KKyMgQ09ORklHX0xQX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfUFBERVYgaXMgbm90IHNldAorIyBDT05GSUdfVElQQVIgaXMgbm90IHNldAorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19TT0ZUX1dBVENIRE9HPXkKKworIworIyBJU0EtYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1BDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfTUlYQ09NV0QgaXMgbm90IHNldAorIyBDT05GSUdfV0RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRkIgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorCisjCisjIFhGUyBzdXBwb3J0CisjCisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQVVUT0ZTNF9GUz15CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCisjIENPTkZJR19OTFMgaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9bQorQ09ORklHX1pMSUJfREVGTEFURT1tCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VkYjcyMTFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lZGI3MjExX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGIwOGVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lZGI3MjExX2RlZmNvbmZpZwpAQCAtMCwwICsxLDU3NSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKKyMgU3VuIE1hciAyNyAyMTo0ODoxMiAyMDA1CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19JT01BUD15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQ0xQUzcxMVg9eQorIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKworIworIyBDTFBTNzExWC9FUDcyMVggSW1wbGVtZW50YXRpb25zCisjCisjIENPTkZJR19BUkNIX0FVVENQVTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0RCODk3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DRUlWQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMRVA3MzEyIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VEQjcyMTE9eQorIyBDT05GSUdfQVJDSF9QNzIwVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPUlRVTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VQNzIxMT15CisjIENPTkZJR19FUDcyWFhfUk9NX0JPT1QgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfQVJNNzIwVD15CitDT05GSUdfQ1BVXzMydjQ9eQorQ09ORklHX0NQVV9BQlJUX0xWNFQ9eQorQ09ORklHX0NQVV9DQUNIRV9WND15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9DT1BZX1Y0V1Q9eQorQ09ORklHX0NQVV9UTEJfVjRXVD15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKworIworIyBCdXMgc3VwcG9ydAorIworQ09ORklHX0lTQT15CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0RJU0NPTlRJR01FTT15CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCisjIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfWEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCisjIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NMUFM3MTFYPXkKK0NPTkZJR19TRVJJQUxfQ0xQUzcxMVhfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KQkQgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBYRlMgc3VwcG9ydAorIworIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCisjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfREVCVUdfVVNFUj15CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lbnAyNjExX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZW5wMjYxMV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThmOWZjYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZW5wMjYxMV9kZWZjb25maWcKQEAgLTAsMCArMSw4ODcgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCisjIFN1biBNYXIgMjcgMjI6MDg6MjQgMjAwNQorIworQ09ORklHX0FSTT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCisjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0lYUDIwMDA9eQorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfQklHX0VORElBTj15CisKKyMKKyMgSW50ZWwgSVhQMjQwMC8yODAwIEltcGxlbWVudGF0aW9uIE9wdGlvbnMKKyMKKworIworIyBJWFAyNDAwLzI4MDAgUGxhdGZvcm1zCisjCitDT05GSUdfQVJDSF9FTlAyNjExPXkKKyMgQ09ORklHX0FSQ0hfSVhEUDI0MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWERQMjgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYRFAyNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhEUDI4MDEgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfWFNDQUxFPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9NSU5JQ0FDSEU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfQklHX0VORElBTj15CitDT05GSUdfWFNDQUxFX1BNVT15CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CitDT05GSUdfUENJX05BTUVTPXkKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCw1NzYwMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIG1lbT02NE1AMHgwIHBjaT1maXJtd2FyZSIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQorQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQorQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEPXkKK0NPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWT15CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKK0NPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorQ09ORklHX01URF9JWFAyMDAwPXkKKyMgQ09ORklHX01URF9FREI3MzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QQ0kgaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JMk8gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CisjIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT15CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIEFSQ25ldCBkZXZpY2VzCisjCisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisKKyMKKyMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15CisjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19ER1JTIGlzIG5vdCBzZXQKK0NPTkZJR19FRVBSTzEwMD15CisjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKK0NPTkZJR19XQU49eQorIyBDT05GSUdfTEFOTUVESUEgaXMgbm90IHNldAorIyBDT05GSUdfU1lOQ0xJTktfU1lOQ1BQUCBpcyBub3Qgc2V0CitDT05GSUdfSERMQz15CitDT05GSUdfSERMQ19SQVc9eQorIyBDT05GSUdfSERMQ19SQVdfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19IRExDX0NJU0NPPXkKK0NPTkZJR19IRExDX0ZSPXkKK0NPTkZJR19IRExDX1BQUD15CisKKyMKKyMgWC4yNS9MQVBCIHN1cHBvcnQgaXMgZGlzYWJsZWQKKyMKKyMgQ09ORklHX1BDSTIwMFNZTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5YTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19ETENJPXkKK0NPTkZJR19ETENJX0NPVU5UPTI0CitDT05GSUdfRExDSV9NQVg9OAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfSVhQMjAwMF9XQVRDSERPRz15CisKKyMKKyMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKK0NPTkZJR19JMkNfQUxHT0JJVD15CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0EgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAorIyBDT05GSUdfU0N4MjAwX0FDQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBTZW5zb3JzIENoaXAgc3VwcG9ydAorIworQ09ORklHX0kyQ19TRU5TT1I9eQorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDIENoaXAgc3VwcG9ydAorIworQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CitDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisKKyMKKyMgWEZTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCisjIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCisjIENPTkZJR19OTFMgaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfREVCVUdfVVNFUj15CisjIENPTkZJR19ERUJVR19XQUlUUSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRVJST1JTPXkKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VwODAyMTlfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lcDgwMjE5X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjM0MmFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lcDgwMjE5X2RlZmNvbmZpZwpAQCAtMCwwICsxLDk1MiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKKyMgU3VuIE1hciAyNyAyMjozNDoxMiAyMDA1CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19JT01BUD15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9JT1AzWFg9eQorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKworIworIyBJT1AzeHggSW1wbGVtZW50YXRpb24gT3B0aW9ucworIworCisjCisjIElPUDN4eCBQbGF0Zm9ybSBUeXBlcworIworIyBDT05GSUdfQVJDSF9JUTgwMzIxIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0lRMzEyNDQ9eQorIyBDT05GSUdfQVJDSF9JUTgwMzMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSVE4MDMzMiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FUDgwMjE5PXkKK0NPTkZJR19BUkNIX0lPUDMyMT15CisjIENPTkZJR19BUkNIX0lPUDMzMSBpcyBub3Qgc2V0CisKKyMKKyMgSU9QM3h4IENoaXBzZXQgRmVhdHVyZXMKKyMKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1hTQ0FMRT15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfTUlOSUNBQ0hFPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKKyMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0CitDT05GSUdfWFNDQUxFX1BNVT15CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19QQ0k9eQorIyBDT05GSUdfUENJX0xFR0FDWV9QUk9DIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTkFNRVM9eQorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJpcD1ib290IHJvb3Q9bmZzIGNvbnNvbGU9dHR5UzAsMTE1MjAwIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKK0NPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKK0NPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRD15CitDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfUkVBRE9OTFk9eQorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4ZjAwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwMDgwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0yCisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9RTEEyWFhYPXkKKyMgQ09ORklHX1NDU0lfUUxBMjFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQTIyWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEEyMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBMjMyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQTYzMTIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPXkKKyMgQ09ORklHX01EX0xJTkVBUiBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDA9eQorQ09ORklHX01EX1JBSUQxPXkKKyMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDU9eQorIyBDT05GSUdfTURfUkFJRDYgaXMgbm90IHNldAorIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9ETT15CisjIENPTkZJR19ETV9DUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9TTkFQU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9NSVJST1IgaXMgbm90IHNldAorIyBDT05GSUdfRE1fWkVSTyBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9NVUxUSVBBVEggaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lQX1RDUERJQUc9eQorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBBUkNuZXQgZGV2aWNlcworIworIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorCisjCisjIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorQ09ORklHX05FVF9QQ0k9eQorIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CitDT05GSUdfRTEwMD15CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAorIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwMD15CitDT05GSUdfRTEwMDBfTkFQST15CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorQ09ORklHX0kyQ19JT1AzWFg9eQorIyBDT05GSUdfSTJDX0lTQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ3gyMDBfQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIFNlbnNvcnMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfU0VOU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBYRlMgc3VwcG9ydAorIworQ09ORklHX1hGU19GUz15CitDT05GSUdfWEZTX0VYUE9SVD15CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19YRlNfU0VDVVJJVFk9eQorQ09ORklHX1hGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorIyBDT05GSUdfSkZGUzJfRlNfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19OT1JfRUNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX05GU0Q9eQorQ09ORklHX05GU0RfVjM9eQorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VweGExMGRiX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXB4YTEwZGJfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYjhiNTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2VweGExMGRiX2RlZmNvbmZpZwpAQCAtMCwwICsxLDY0NCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKKyMgU3VuIE1hciAyNyAyMjo0Njo1MSAyMDA1CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19JT01BUD15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0NBTUVMT1Q9eQorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorCisjCisjIEVweGExMGRiCisjCisKKyMKKyMgUExEIGhvdHN3YXAgc3VwcG9ydAorIworQ09ORklHX1BMRD15CisjIENPTkZJR19QTERfSE9UU1dBUCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9BUk05MjJUPXkKK0NPTkZJR19DUFVfMzJ2ND15CitDT05GSUdfQ1BVX0FCUlRfRVY0VD15CitDT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKKyMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJtZW09MzJNIGNvbnNvbGU9dHR5VUEwLDExNTIwMCBpbml0cmQ9MHgwMDIwMDAwMCw4TSByb290PS9kZXYvcmFtMCBydyIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCisjIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD15CitDT05GSUdfUFBQX01VTFRJTElOSz15CisjIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfQVNZTkM9eQorQ09ORklHX1BQUF9TWU5DX1RUWT15CitDT05GSUdfUFBQX0RFRkxBVEU9eQorIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfVUFSVDAwPXkKK0NPTkZJR19TRVJJQUxfVUFSVDAwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgWEZTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfQVVUT0ZTX0ZTPXkKK0NPTkZJR19BVVRPRlM0X0ZTPXkKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKKyMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19TTUJfRlM9eQorIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQ1JDX0NDSVRUPXkKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZm9vdGJyaWRnZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Zvb3RicmlkZ2VfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MzdjNDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2Zvb3RicmlkZ2VfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTI1NyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKKyMgU3VuIE1hciAyNyAyMzowMjoyNCAyMDA1CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19JT01BUD15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZPT1RCUklER0U9eQorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisKKyMKKyMgRm9vdGJyaWRnZSBJbXBsZW1lbnRhdGlvbnMKKyMKK0NPTkZJR19BUkNIX0NBVFM9eQorQ09ORklHX0FSQ0hfUEVSU09OQUxfU0VSVkVSPXkKKyMgQ09ORklHX0FSQ0hfRUJTQTI4NV9BRERJTiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FQlNBMjg1X0hPU1Q9eQorQ09ORklHX0FSQ0hfTkVUV0lOREVSPXkKK0NPTkZJR19GT09UQlJJREdFPXkKK0NPTkZJR19GT09UQlJJREdFX0hPU1Q9eQorQ09ORklHX0FSQ0hfRUJTQTI4NT15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9TQTExMD15CitDT05GSUdfQ1BVXzMydjQ9eQorQ09ORklHX0NQVV9BQlJUX0VWND15CitDT05GSUdfQ1BVX0NBQ0hFX1Y0V0I9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKK0NPTkZJR19DUFVfVExCX1Y0V0I9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworCisjCisjIEJ1cyBzdXBwb3J0CisjCitDT05GSUdfSVNBPXkKK0NPTkZJR19JU0FfRE1BPXkKK0NPTkZJR19QQ0k9eQorIyBDT05GSUdfUENJX0xFR0FDWV9QUk9DIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTkFNRVM9eQorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTPXkKK0NPTkZJR19MRURTX1RJTUVSPXkKKyMgQ09ORklHX0xFRFNfQ1BVIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorQ09ORklHX0ZQRV9OV0ZQRV9YUD15CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19QQVJQT1JUPXkKK0NPTkZJR19QQVJQT1JUX1BDPXkKK0NPTkZJR19QQVJQT1JUX1BDX0ZJRk89eQorIyBDT05GSUdfUEFSUE9SVF9QQ19TVVBFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfQVJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfR1NDIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJQT1JUXzEyODQ9eQorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworQ09ORklHX1BOUD15CisjIENPTkZJR19QTlBfREVCVUcgaXMgbm90IHNldAorCisjCisjIFByb3RvY29scworIworQ09ORklHX0lTQVBOUD15CisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1hEIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJJREU9bQorQ09ORklHX1BBUklERV9QQVJQT1JUPXkKKworIworIyBQYXJhbGxlbCBJREUgaGlnaC1sZXZlbCBkcml2ZXJzCisjCitDT05GSUdfUEFSSURFX1BEPW0KK0NPTkZJR19QQVJJREVfUENEPW0KK0NPTkZJR19QQVJJREVfUEY9bQorQ09ORklHX1BBUklERV9QVD1tCitDT05GSUdfUEFSSURFX1BHPW0KKworIworIyBQYXJhbGxlbCBJREUgcHJvdG9jb2wgbW9kdWxlcworIworQ09ORklHX1BBUklERV9BVEVOPW0KK0NPTkZJR19QQVJJREVfQlBDSz1tCisjIENPTkZJR19QQVJJREVfQlBDSzYgaXMgbm90IHNldAorQ09ORklHX1BBUklERV9DT01NPW0KK0NPTkZJR19QQVJJREVfRFNUUj1tCitDT05GSUdfUEFSSURFX0ZJVDI9bQorQ09ORklHX1BBUklERV9GSVQzPW0KK0NPTkZJR19QQVJJREVfRVBBVD1tCisjIENPTkZJR19QQVJJREVfRVBBVEM4IGlzIG5vdCBzZXQKK0NPTkZJR19QQVJJREVfRVBJQT1tCitDT05GSUdfUEFSSURFX0ZSSVE9bQorQ09ORklHX1BBUklERV9GUlBXPW0KK0NPTkZJR19QQVJJREVfS0JJQz1tCitDT05GSUdfUEFSSURFX0tUVEk9bQorQ09ORklHX1BBUklERV9PTjIwPW0KK0NPTkZJR19QQVJJREVfT04yNj1tCisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9bQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05CRD1tCisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCitDT05GSUdfSURFPXkKK0NPTkZJR19CTEtfREVWX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURJU0s9eQorQ09ORklHX0lERURJU0tfTVVMVElfTU9ERT15CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworQ09ORklHX0lERV9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfSURFUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorIyBDT05GSUdfSURFX0NISVBTRVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKKyMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKK0NPTkZJR19BVE09eQorIyBDT05GSUdfQVRNX0NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0xBTkUgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0JSMjY4NCBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CitDT05GSUdfSVJEQT1tCisKKyMKKyMgSXJEQSBwcm90b2NvbHMKKyMKK0NPTkZJR19JUkxBTj1tCitDT05GSUdfSVJORVQ9bQorQ09ORklHX0lSQ09NTT1tCitDT05GSUdfSVJEQV9VTFRSQT15CisKKyMKKyMgSXJEQSBvcHRpb25zCisjCitDT05GSUdfSVJEQV9DQUNIRV9MQVNUX0xTQVA9eQorQ09ORklHX0lSREFfRkFTVF9SUj15CitDT05GSUdfSVJEQV9ERUJVRz15CisKKyMKKyMgSW5mcmFyZWQtcG9ydCBkZXZpY2UgZHJpdmVycworIworCisjCisjIFNJUiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfSVJUVFlfU0lSIGlzIG5vdCBzZXQKKworIworIyBEb25nbGUgc3VwcG9ydAorIworCisjCisjIE9sZCBTSVIgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0lSUE9SVF9TSVIgaXMgbm90IHNldAorCisjCisjIE9sZCBTZXJpYWwgZG9uZ2xlIHN1cHBvcnQKKyMKKworIworIyBGSVIgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJR01BVEVMX0ZJUiBpcyBub3Qgc2V0CisjIENPTkZJR19OU0NfRklSIGlzIG5vdCBzZXQKK0NPTkZJR19XSU5CT05EX0ZJUj1tCisjIENPTkZJR19UT1NISUJBX0ZJUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTUNfSVJDQ19GSVIgaXMgbm90IHNldAorIyBDT05GSUdfQUxJX0ZJUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTFNJX0ZJUiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfRklSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0IxMDAwIGlzIG5vdCBzZXQKKworIworIyBBUkNuZXQgZGV2aWNlcworIworIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfVkVORE9SXzNDT009eQorIyBDT05GSUdfRUwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VMMiBpcyBub3Qgc2V0CisjIENPTkZJR19FTFBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfRUwxNiBpcyBub3Qgc2V0CisjIENPTkZJR19FTDMgaXMgbm90IHNldAorIyBDT05GSUdfM0M1MTUgaXMgbm90IHNldAorQ09ORklHX1ZPUlRFWD15CisjIENPTkZJR19UWVBIT09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKKworIworIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMTcwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVBDQSBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVNBIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENJPXkKKyMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BQzMyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVBSSUNPVCBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NTODl4MCBpcyBub3Qgc2V0CisjIENPTkZJR19ER1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAorQ09ORklHX05FMktfUENJPXkKKyMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0NLRVQgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKworIworIyBBVE0gZHJpdmVycworIworIyBDT05GSUdfQVRNX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fTEFOQUkgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0VOSSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fRklSRVNUUkVBTSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fWkFUTSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fTklDU1RBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSURUNzcyNTIgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0FNQkFTU0FET1IgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0hPUklaT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9GT1JFMjAwRV9NQVlCRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSEUgaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QTElQIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfQVNZTkM9bQorIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUE9BVE0gaXMgbm90IHNldAorQ09ORklHX1NMSVA9bQorQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CitDT05GSUdfU0xJUF9TTUFSVD15CitDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9JTlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfTE9HSUJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BDMTEwUEFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX0k4MDQyPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX1BBUktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQ9eQorIyBDT05GSUdfQ09NUFVUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPQ0tFVFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1lDTEFERVMgaXMgbm90IHNldAorIyBDT05GSUdfRElHSUVQQ0EgaXMgbm90IHNldAorIyBDT05GSUdfRVNQU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PWEFfSU5URUxMSU8gaXMgbm90IHNldAorIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5DTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5DTElOS01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0CisjIENPTkZJR19SSVNDT004IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TWCBpcyBub3Qgc2V0CisjIENPTkZJR19SSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBTERSViBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMXzIxMjg1PXkKK0NPTkZJR19TRVJJQUxfMjEyODVfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKK0NPTkZJR19QUklOVEVSPW0KKyMgQ09ORklHX0xQX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfUFBERVYgaXMgbm90IHNldAorIyBDT05GSUdfVElQQVIgaXMgbm90IHNldAorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19TT0ZUX1dBVENIRE9HPXkKK0NPTkZJR18yMTI4NV9XQVRDSERPRz1tCitDT05GSUdfOTc3X1dBVENIRE9HPW0KKworIworIyBJU0EtYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1BDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfTUlYQ09NV0QgaXMgbm90IHNldAorIyBDT05GSUdfV0RUIGlzIG5vdCBzZXQKKworIworIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0RTMTYyMD15CitDT05GSUdfTldCVVRUT049eQorQ09ORklHX05XQlVUVE9OX1JFQk9PVD15CitDT05GSUdfTldGTEFTSD1tCitDT05GSUdfTlZSQU09bQorQ09ORklHX1JUQz15CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKK0NPTkZJR19JMkM9bQorIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19FTEVLVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0EgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAorIyBDT05GSUdfU0N4MjAwX0FDQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBTZW5zb3JzIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX1NFTlNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKK0NPTkZJR19WSURFT19ERVY9bQorCisjCisjIFZpZGVvIEZvciBMaW51eAorIworCisjCisjIFZpZGVvIEFkYXB0ZXJzCisjCisjIENPTkZJR19WSURFT19CVDg0OCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19QTVMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQldRQ0FNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NRQ0FNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1c5OTY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NQSUEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNTI0NkEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNTI0OSBpcyBub3Qgc2V0CisjIENPTkZJR19UVU5FUl8zMDM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NUUkFESVMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNzEzNCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NWEIgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fRFBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0hFWElVTV9PUklPTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19IRVhJVU1fR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NYODggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1ZDQU1DSElQIGlzIG5vdCBzZXQKKworIworIyBSYWRpbyBBZGFwdGVycworIworIyBDT05GSUdfUkFESU9fQ0FERVQgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fUlRSQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1JUUkFDSzIgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fQVpURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX0dFTVRFSyBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19HRU1URUtfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX01BWElSQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19NQUVTVFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1NGMTZGTUkgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fU0YxNkZNUjIgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fVEVSUkFURUMgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fVFJVU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fVFlQSE9PTiBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19aT0xUUklYIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorQ09ORklHX0ZCX1NPRlRfQ1VSU09SPXkKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ1lCRVIyMDAwPXkKKyMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SQURFT05fT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19WR0FfQ09OU09MRT15CisjIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPW0KKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKKyMgQ09ORklHX1NORCBpcyBub3Qgc2V0CisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0I9bQorQ09ORklHX1VTQl9ERUJVRz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CisjIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworQ09ORklHX1VTQl9BVURJTz1tCisjIENPTkZJR19VU0JfQkxVRVRPT1RIX1RUWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlESSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfUFJJTlRFUj1tCisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCisjIENPTkZJR19VU0JfU1RPUkFHRSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKKyMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZJQ0FNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EU0JSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JQk1DQU0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tPTklDQVdDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVjUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0U0MDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NOOUMxMDIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUVjY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFdDIGlzIG5vdCBzZXQKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPW0KKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfVVNTNzIwIGlzIG5vdCBzZXQKKworIworIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0CisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKworIworIyBVU0IgQVRNL0RTTCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TUEVFRFRPVUNIIGlzIG5vdCBzZXQKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgWEZTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0FVVE9GUzRfRlM9eQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPW0KK0NPTkZJR19KT0xJRVQ9eQorIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz1tCitDT05GSUdfTVNET1NfRlM9bQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19BREZTX0ZTPW0KKyMgQ09ORklHX0FERlNfRlNfUlcgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKKyMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEPW0KKyMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAorQ09ORklHX05GU0RfVENQPXkKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorQ09ORklHX0FDT1JOX1BBUlRJVElPTj15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT05fQ1VNQU5BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTl9FRVNPWCBpcyBub3Qgc2V0CisjIENPTkZJR19BQ09STl9QQVJUSVRJT05fSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19BQ09STl9QQVJUSVRJT05fQURGUz15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT05fUE9XRVJURUMgaXMgbm90IHNldAorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OX1JJU0NJWCBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19ERUJVR19VU0VSPXkKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT1tCitDT05GSUdfWkxJQl9ERUZMQVRFPW0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZm9ydHVuZXRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9mb3J0dW5ldF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZmNjg4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZm9ydHVuZXRfZGVmY29uZmlnCkBAIC0wLDAgKzEsNTU4IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgorIyBTdW4gTWFyIDI3IDIzOjUxOjEwIDIwMDUKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCisjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9DTFBTNzExWD15CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorCisjCisjIENMUFM3MTFYL0VQNzIxWCBJbXBsZW1lbnRhdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfQVVUQ1BVMTIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DREI4OTcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NFSVZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xFUDczMTIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FREI3MjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUDcyMFQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRk9SVFVORVQ9eQorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfQVJNNzIwVD15CitDT05GSUdfQ1BVXzMydjQ9eQorQ09ORklHX0NQVV9BQlJUX0xWNFQ9eQorQ09ORklHX0NQVV9DQUNIRV9WND15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9DT1BZX1Y0V1Q9eQorQ09ORklHX0NQVV9UTEJfVjRXVD15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCisjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAorCisjCisjIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKK0NPTkZJR19GUEVfRkFTVEZQRT15CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCisjIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NMUFM3MTFYPXkKK0NPTkZJR19TRVJJQUxfQ0xQUzcxMVhfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRkIgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorCisjCisjIFhGUyBzdXBwb3J0CisjCisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTX0ZTPXkKK0NPTkZJR19KRkZTX0ZTX1ZFUkJPU0U9MAorIyBDT05GSUdfSkZGU19QUk9DX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCisjIENPTkZJR19OTFMgaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaDM2MDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9oMzYwMF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRlMjk3ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDM2MDBfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTEzIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgorIyBNb24gTWFyIDI4IDAwOjAyOjI2IDIwMDUKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NBMTEwMD15CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorCisjCisjIFNBMTF4MCBJbXBsZW1lbnRhdGlvbnMKKyMKKyMgQ09ORklHX1NBMTEwMF9BU1NBQkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9DRVJGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9DT0xMSUUgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TQTExMDBfSDM2MDA9eQorIyBDT05GSUdfU0ExMTAwX0gzODAwIGlzIG5vdCBzZXQKK0NPTkZJR19TQTExMDBfSDNYWFg9eQorIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfTEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfUExFQiBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfU0hBTk5PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfU0lNUEFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9TU1AgaXMgbm90IHNldAorIyBDT05GSUdfSDM2MDBfU0xFRVZFIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1NBMTEwMD15CitDT05GSUdfQ1BVXzMydjQ9eQorQ09ORklHX0NQVV9BQlJUX0VWND15CitDT05GSUdfQ1BVX0NBQ0hFX1Y0V0I9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0I9eQorQ09ORklHX0NQVV9NSU5JQ0FDSEU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworCisjCisjIEJ1cyBzdXBwb3J0CisjCitDT05GSUdfSVNBPXkKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCitDT05GSUdfUENDQVJEPXkKKyMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBPXkKKworIworIyBQQy1jYXJkIGJyaWRnZXMKKyMKKyMgQ09ORklHX0k4MjM2NSBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0lDIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUFfU0ExMTAwPXkKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0RJU0NPTlRJR01FTT15CisjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKK0NPTkZJR19DUFVfRlJFUT15CitDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfQVBNIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKK0NPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX05PU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9HRU9NRVRSWT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREX1NBMTEwMD15CisjIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisjIENPTkZJR19QTlAgaXMgbm90IHNldAorCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9YRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD1tCisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKK0NPTkZJR19JREU9bQorQ09ORklHX0JMS19ERVZfSURFPW0KKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz1tCisjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDRD1tCisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz1tCisjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9DSElQU0VUUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorQ09ORklHX0lSREE9bQorCisjCisjIElyREEgcHJvdG9jb2xzCisjCitDT05GSUdfSVJMQU49bQorQ09ORklHX0lSTkVUPW0KK0NPTkZJR19JUkNPTU09bQorIyBDT05GSUdfSVJEQV9VTFRSQSBpcyBub3Qgc2V0CisKKyMKKyMgSXJEQSBvcHRpb25zCisjCisjIENPTkZJR19JUkRBX0NBQ0hFX0xBU1RfTFNBUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBX0ZBU1RfUlIgaXMgbm90IHNldAorIyBDT05GSUdfSVJEQV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5mcmFyZWQtcG9ydCBkZXZpY2UgZHJpdmVycworIworCisjCisjIFNJUiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfSVJUVFlfU0lSIGlzIG5vdCBzZXQKKworIworIyBEb25nbGUgc3VwcG9ydAorIworCisjCisjIE9sZCBTSVIgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0lSUE9SVF9TSVIgaXMgbm90IHNldAorCisjCisjIE9sZCBTZXJpYWwgZG9uZ2xlIHN1cHBvcnQKKyMKKworIworIyBGSVIgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX05TQ19GSVIgaXMgbm90IHNldAorIyBDT05GSUdfV0lOQk9ORF9GSVIgaXMgbm90IHNldAorIyBDT05GSUdfU01DX0lSQ0NfRklSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMSV9GSVIgaXMgbm90IHNldAorQ09ORklHX1NBMTEwMF9GSVI9bQorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBBUkNuZXQgZGV2aWNlcworIworIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKKyMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ORVRfUENNQ0lBPXkKKyMgQ09ORklHX1BDTUNJQV8zQzU4OSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfM0M1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX0ZNVkoxOFggaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9QQ05FVD15CisjIENPTkZJR19QQ01DSUFfTk1DTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9TTUM5MUM5MiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfWElSQzJQUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfQVhORVQgaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorQ09ORklHX1BQUF9BU1lOQz1tCisjIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCisjIENPTkZJR19QUFBPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9JTlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfTE9HSUJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BDMTEwUEFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD1tCisjIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0ExMTAwPXkKK0NPTkZJR19TRVJJQUxfU0ExMTAwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKworIworIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfRkI9eQorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKK0NPTkZJR19GQl9TT0ZUX0NVUlNPUj15CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TQTExMDA9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPXkKKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKKyMgQ09ORklHX1NORCBpcyBub3Qgc2V0CisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgWEZTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9bQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCisjIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz1tCisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CisjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD1tCisjIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1RDUD15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCisjIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9oNzIwMV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2g3MjAxX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWMxM2EzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9oNzIwMV9kZWZjb25maWcKQEAgLTAsMCArMSw1NjcgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCisjIE1vbiBNYXIgMjggMDA6MTE6MzMgMjAwNQorIworQ09ORklHX0FSTT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0g3MjBYPXkKKworIworIyBoNzIweCBJbXBsZW1lbnRhdGlvbnMKKyMKK0NPTkZJR19BUkNIX0g3MjAxPXkKKyMgQ09ORklHX0FSQ0hfSDcyMDIgaXMgbm90IHNldAorQ09ORklHX0NQVV9INzIwMT15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9BUk03MjBUPXkKK0NPTkZJR19DUFVfMzJ2ND15CitDT05GSUdfQ1BVX0FCUlRfTFY0VD15CitDT05GSUdfQ1BVX0NBQ0hFX1Y0PXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX0NPUFlfVjRXVD15CitDT05GSUdfQ1BVX1RMQl9WNFdUPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CitDT05GSUdfTVREX0RFQlVHPXkKK0NPTkZJR19NVERfREVCVUdfVkVSQk9TRT0wCisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05GSUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0g3MjBYIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisKKyMKKyMgU291bmQKKyMKK0NPTkZJR19TT1VORD1tCisKKyMKKyMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisjCisjIENPTkZJR19TTkQgaXMgbm90IHNldAorCisjCisjIE9wZW4gU291bmQgU3lzdGVtCisjCisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorCisjCisjIFhGUyBzdXBwb3J0CisjCisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCisjIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCisjIENPTkZJR19OTFMgaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19ERUJVR19VU0VSPXkKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9oNzIwMl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2g3MjAyX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmY1YzI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9oNzIwMl9kZWZjb25maWcKQEAgLTAsMCArMSw3MzIgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCisjIE1vbiBNYXIgMjggMDA6MTU6NDUgMjAwNQorIworQ09ORklHX0FSTT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX01PRFBBUk09eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSDcyMFg9eQorCisjCisjIGg3MjB4IEltcGxlbWVudGF0aW9ucworIworIyBDT05GSUdfQVJDSF9INzIwMSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9INzIwMj15CitDT05GSUdfQ1BVX0g3MjAyPXkKKyMgQ09ORklHX0g3MjAyX1NFUklBTDIzIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX0FSTTcyMFQ9eQorQ09ORklHX0NQVV8zMnY0PXkKK0NPTkZJR19DUFVfQUJSVF9MVjRUPXkKK0NPTkZJR19DUFVfQ0FDSEVfVjQ9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdUPXkKK0NPTkZJR19DUFVfVExCX1Y0V1Q9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDE5MjAwIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKK0NPTkZJR19GUEVfTldGUEVfWFA9eQorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0g3MjBYPXkKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CisjIENPTkZJR19NSUkgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CisjIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU09GVF9DVVJTT1IgaXMgbm90IHNldAorQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworQ09ORklHX1VTQl9HQURHRVQ9bQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9aRVJPPW0KKyMgQ09ORklHX1VTQl9FVEggaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRGUz1tCitDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCitDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUPXkKK0NPTkZJR19VU0JfR19TRVJJQUw9bQorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgWEZTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX0RFVkZTX0ZTPXkKK0NPTkZJR19ERVZGU19NT1VOVD15CisjIENPTkZJR19ERVZGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKKyMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorIyBDT05GSUdfUk9PVF9ORlMgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfREVCVUdfVVNFUj15CisjIENPTkZJR19ERUJVR19XQUlUUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2hhY2traXRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9oYWNra2l0X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTg3YzhjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9oYWNra2l0X2RlZmNvbmZpZwpAQCAtMCwwICsxLDc2OCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKKyMgTW9uIE1hciAyOCAwMDoyMjozNCAyMDA1CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19JT01BUD15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU0ExMTAwPXkKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisKKyMKKyMgU0ExMXgwIEltcGxlbWVudGF0aW9ucworIworIyBDT05GSUdfU0ExMTAwX0FTU0FCRVQgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0NFUkYgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0NPTExJRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSDMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0gzNjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9IMzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfQkFER0U0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKK0NPTkZJR19TQTExMDBfSEFDS0tJVD15CisjIENPTkZJR19TQTExMDBfTEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfUExFQiBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfU0hBTk5PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfU0lNUEFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9TU1AgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfU0ExMTAwPXkKK0NPTkZJR19DUFVfMzJ2ND15CitDT05GSUdfQ1BVX0FCUlRfRVY0PXkKK0NPTkZJR19DUFVfQ0FDSEVfVjRXQj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQj15CitDT05GSUdfQ1BVX01JTklDQUNIRT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19JU0E9eQorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19ESVNDT05USUdNRU09eQorQ09ORklHX0xFRFM9eQorQ09ORklHX0xFRFNfVElNRVI9eQorQ09ORklHX0xFRFNfQ1BVPXkKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNBMCwxMTUyMDAgcm9vdD0vZGV2L3JhbTAgaW5pdHJkPTB4YzA0MDAwMDAsOE0gaW5pdD0vcm9vdHNoZWxsIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCitDT05GSUdfQ1BVX0ZSRVE9eQorQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9TVEFUPXkKKyMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorQ09ORklHX01URF9ERUJVRz15CitDT05GSUdfTVREX0RFQlVHX1ZFUkJPU0U9MworIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfWEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT15CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIEFSQ25ldCBkZXZpY2VzCisjCisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworQ09ORklHX05FVF9SQURJTz15CisKKyMKKyMgT2Jzb2xldGUgV2lyZWxlc3MgY2FyZHMgc3VwcG9ydCAocHJlLTgwMi4xMSkKKyMKKyMgQ09ORklHX1NUUklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVkVMQU4gaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIDgwMi4xMWIgSVNBL1BDSSBjYXJkcyBzdXBwb3J0CisjCisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1dJUkVMRVNTPXkKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TQTExMDA9eQorQ09ORklHX1NFUklBTF9TQTExMDBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KQkQgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBYRlMgc3VwcG9ydAorIworIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NMQUI9eQorQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfREVCVUdfVVNFUj15CitDT05GSUdfREVCVUdfV0FJVFE9eQorQ09ORklHX0RFQlVHX0VSUk9SUz15CitDT05GSUdfREVCVUdfTEw9eQorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pbnRlZ3JhdG9yX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW50ZWdyYXRvcl9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdlZTc2OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW50ZWdyYXRvcl9kZWZjb25maWcKQEAgLTAsMCArMSw4NjQgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCisjIFN1biBNYXIgMjcgMjE6MTQ6NTEgMjAwNQorIworQ09ORklHX0FSTT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0lOVEVHUkFUT1I9eQorIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKworIworIyBJbnRlZ3JhdG9yIE9wdGlvbnMKKyMKK0NPTkZJR19BUkNIX0lOVEVHUkFUT1JfQVA9eQorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SX0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOVEVHUkFUT1JfSU1QRDEgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfQVJNNzIwVD15CitDT05GSUdfQ1BVX0FSTTkyMFQ9eQorIyBDT05GSUdfQ1BVX0FSTTkyMlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0FSTTkyNlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0FSTTEwMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0FSTTEwMjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0FSTTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1Y2IGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfMzJ2ND15CitDT05GSUdfQ1BVX0FCUlRfRVY0VD15CitDT05GSUdfQ1BVX0FCUlRfTFY0VD15CitDT05GSUdfQ1BVX0NBQ0hFX1Y0PXkKK0NPTkZJR19DUFVfQ0FDSEVfVjRXVD15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9DT1BZX1Y0V1Q9eQorQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQorQ09ORklHX0NQVV9UTEJfVjRXVD15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorQ09ORklHX0lDU1Q1MjU9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCitDT05GSUdfQVJNX0FNQkE9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKK0NPTkZJR19QQ0lfTkFNRVM9eQorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTPXkKK0NPTkZJR19MRURTX1RJTUVSPXkKK0NPTkZJR19MRURTX0NQVT15CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlBTTAsMzg0MDBuOCByb290PS9kZXYvbmZzIGlwPWJvb3RwIG1lbT0zMk0iCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKK0NPTkZJR19DUFVfRlJFUT15CitDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EPXkKK0NPTkZJR19DUFVfRlJFUV9JTlRFR1JBVE9SPXkKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfQVBNIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CitDT05GSUdfTVREX0FGU19QQVJUUz15CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfR0VPTUVUUlkgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9FREI3MzEyIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9UQ1BESUFHPXkKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKworIworIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENJPXkKKyMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RHUlMgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAorQ09ORklHX0UxMDA9eQorIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAorIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CisjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0FNQkFLTUkgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9BTUJBX1BMMDEwPXkKK0NPTkZJR19TRVJJQUxfQU1CQV9QTDAxMF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9BTUJBX1BMMDExIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworQ09ORklHX0ZCPXkKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CitDT05GSUdfRkJfU09GVF9DVVJTT1I9eQorQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CitDT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJNQ0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAorQ09ORklHX0ZCX01BVFJPWD15CitDT05GSUdfRkJfTUFUUk9YX01JTExFTklVTT15CitDT05GSUdfRkJfTUFUUk9YX01ZU1RJUVVFPXkKKyMgQ09ORklHX0ZCX01BVFJPWF9HIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9NQVRST1hfTVVMVElIRUFEPXkKKyMgQ09ORklHX0ZCX1JBREVPTl9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAorCisjCisjIExvZ28gY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KQkQgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBYRlMgc3VwcG9ydAorIworIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKKyMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD15CitDT05GSUdfTkZTRF9WMz15CisjIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XQUlUUSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRVJST1JTPXkKKyMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pcTMxMjQ0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXEzMTI0NF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcxNDQzYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXEzMTI0NF9kZWZjb25maWcKQEAgLTAsMCArMSw5MjIgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCisjIFN1biBNYXIgMjcgMDI6MTA6MzggMjAwNQorIworQ09ORklHX0FSTT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX01PRFBBUk09eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0lPUDNYWD15CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorCisjCisjIElPUDN4eCBJbXBsZW1lbnRhdGlvbiBPcHRpb25zCisjCisKKyMKKyMgSU9QM3h4IFBsYXRmb3JtIFR5cGVzCisjCisjIENPTkZJR19BUkNIX0lRODAzMjEgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSVEzMTI0ND15CisjIENPTkZJR19BUkNIX0lRODAzMzEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9JUTgwMzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA4MDIxOSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9JT1AzMjE9eQorIyBDT05GSUdfQVJDSF9JT1AzMzEgaXMgbm90IHNldAorCisjCisjIElPUDN4eCBDaGlwc2V0IEZlYXR1cmVzCisjCisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9YU0NBTEU9eQorQ09ORklHX0NQVV8zMnY1PXkKK0NPTkZJR19DUFVfQUJSVF9FVjVUPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX01JTklDQUNIRT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCisjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAorQ09ORklHX1hTQ0FMRV9QTVU9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCitDT05GSUdfUENJPXkKKyMgQ09ORklHX1BDSV9MRUdBQ1lfUFJPQyBpcyBub3Qgc2V0CitDT05GSUdfUENJX05BTUVTPXkKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0iaXA9Ym9vdCByb290PW5mcyBjb25zb2xlPXR0eVMwLDExNTIwMCIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKK0NPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CitDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCitDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQ9eQorQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZPXkKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weGYwMDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MDA4MDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9FREI3MzEyIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CitDT05GSUdfQ0hSX0RFVl9TRz15CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUUxBMlhYWD15CisjIENPTkZJR19TQ1NJX1FMQTIxWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEEyMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBMjMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQTIzMjIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEE2MzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD15CisjIENPTkZJR19NRF9MSU5FQVIgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQwPXkKK0NPTkZJR19NRF9SQUlEMT15CisjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ1PXkKKyMgQ09ORklHX01EX1JBSUQ2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01EX01VTFRJUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfRE09eQorIyBDT05GSUdfRE1fQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfRE1fU05BUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfRE1fTUlSUk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX1pFUk8gaXMgbm90IHNldAorIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKKyMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9UQ1BESUFHPXkKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCisjIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CitDT05GSUdfRTEwMDA9eQorQ09ORklHX0UxMDAwX05BUEk9eQorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorQ09ORklHX0kyQ19JT1AzWFg9eQorIyBDT05GSUdfSTJDX0lTQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ3gyMDBfQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIFNlbnNvcnMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfU0VOU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBYRlMgc3VwcG9ydAorIworQ09ORklHX1hGU19GUz15CitDT05GSUdfWEZTX0VYUE9SVD15CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19YRlNfU0VDVVJJVFk9eQorQ09ORklHX1hGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorIyBDT05GSUdfSkZGUzJfRlNfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19OT1JfRUNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX05GU0Q9eQorQ09ORklHX05GU0RfVjM9eQorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2lxODAzMjFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pcTgwMzIxX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjVhZDIzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pcTgwMzIxX2RlZmNvbmZpZwpAQCAtMCwwICsxLDg0MyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKKyMgU3VuIE1hciAyNyAxMzoyNDoxMCAyMDA1CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19JT01BUD15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9JT1AzWFg9eQorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKworIworIyBJT1AzeHggSW1wbGVtZW50YXRpb24gT3B0aW9ucworIworCisjCisjIElPUDN4eCBQbGF0Zm9ybSBUeXBlcworIworQ09ORklHX0FSQ0hfSVE4MDMyMT15CisjIENPTkZJR19BUkNIX0lRMzEyNDQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JUTgwMzMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSVE4MDMzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQODAyMTkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSU9QMzIxPXkKKyMgQ09ORklHX0FSQ0hfSU9QMzMxIGlzIG5vdCBzZXQKKworIworIyBJT1AzeHggQ2hpcHNldCBGZWF0dXJlcworIworCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfWFNDQUxFPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9NSU5JQ0FDSEU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKK0NPTkZJR19YU0NBTEVfUE1VPXkKKworIworIyBCdXMgc3VwcG9ydAorIworQ09ORklHX1BDST15CisjIENPTkZJR19QQ0lfTEVHQUNZX1BST0MgaXMgbm90IHNldAorQ09ORklHX1BDSV9OQU1FUz15CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9ImlwPWJvb3Qgcm9vdD1uZnMgY29uc29sZT10dHlTMCwxMTUyMDAiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfQU9VVD15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQorQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQorQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEPXkKK0NPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWT15CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CitDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHhmMDAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAwODAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTEKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lQX1RDUERJQUc9eQorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBBUkNuZXQgZGV2aWNlcworIworIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKKyMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwMD15CitDT05GSUdfRTEwMDBfTkFQST15CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfSU9QM1hYPXkKKyMgQ09ORklHX0kyQ19JU0EgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAorIyBDT05GSUdfU0N4MjAwX0FDQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBTZW5zb3JzIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX1NFTlNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgWEZTIHN1cHBvcnQKKyMKK0NPTkZJR19YRlNfRlM9eQorQ09ORklHX1hGU19FWFBPUlQ9eQorIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfWEZTX1NFQ1VSSVRZPXkKK0NPTkZJR19YRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKKyMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEPXkKK0NPTkZJR19ORlNEX1YzPXkKKyMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCisjIENPTkZJR19OTFMgaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19ERUJVR19VU0VSPXkKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pcTgwMzMxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXE4MDMzMV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI1MzYxMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXE4MDMzMV9kZWZjb25maWcKQEAgLTAsMCArMSw5MTYgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCisjIFN1biBNYXIgMjcgMTU6MTM6MzcgMjAwNQorIworQ09ORklHX0FSTT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSU9QM1hYPXkKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisKKyMKKyMgSU9QM3h4IEltcGxlbWVudGF0aW9uIE9wdGlvbnMKKyMKKworIworIyBJT1AzeHggUGxhdGZvcm0gVHlwZXMKKyMKKyMgQ09ORklHX0FSQ0hfSVE4MDMyMSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lRMzEyNDQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSVE4MDMzMT15CisjIENPTkZJR19NQUNIX0lRODAzMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDgwMjE5IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0lPUDMzMT15CisKKyMKKyMgSU9QM3h4IENoaXBzZXQgRmVhdHVyZXMKKyMKK0NPTkZJR19JT1AzMzFfU1RFUEQ9eQorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfWFNDQUxFPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9NSU5JQ0FDSEU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKK0NPTkZJR19YU0NBTEVfUE1VPXkKKworIworIyBCdXMgc3VwcG9ydAorIworQ09ORklHX1BDST15CisjIENPTkZJR19QQ0lfTEVHQUNZX1BST0MgaXMgbm90IHNldAorQ09ORklHX1BDSV9OQU1FUz15CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9ImlwPWJvb3Qgcm9vdD1uZnMgY29uc29sZT10dHlTMCwxMTUyMDAiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfQU9VVD15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQorQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQorQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEPXkKK0NPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWT15CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05GSUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwMDgwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0xCisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9RTEEyWFhYPXkKKyMgQ09ORklHX1NDU0lfUUxBMjFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQTIyWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEEyMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBMjMyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQTYzMTIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPXkKK0NPTkZJR19NRF9MSU5FQVI9eQorQ09ORklHX01EX1JBSUQwPXkKK0NPTkZJR19NRF9SQUlEMT15CisjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ1PXkKKyMgQ09ORklHX01EX1JBSUQ2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01EX01VTFRJUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfRE09eQorIyBDT05GSUdfRE1fQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfRE1fU05BUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfRE1fTUlSUk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX1pFUk8gaXMgbm90IHNldAorIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKKyMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9UQ1BESUFHPXkKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCisjIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CitDT05GSUdfRTEwMDA9eQorQ09ORklHX0UxMDAwX05BUEk9eQorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorQ09ORklHX0kyQ19JT1AzWFg9eQorIyBDT05GSUdfSTJDX0lTQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ3gyMDBfQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIFNlbnNvcnMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfU0VOU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBYRlMgc3VwcG9ydAorIworQ09ORklHX1hGU19GUz15CitDT05GSUdfWEZTX0VYUE9SVD15CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19YRlNfU0VDVVJJVFk9eQorQ09ORklHX1hGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX05GU0Q9eQorQ09ORklHX05GU0RfVjM9eQorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pcTgwMzMyX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXE4MDMzMl9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1ZjAxZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXE4MDMzMl9kZWZjb25maWcKQEAgLTAsMCArMSw5MTYgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCisjIFN1biBNYXIgMjcgMTc6MzM6MzkgMjAwNQorIworQ09ORklHX0FSTT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSU9QM1hYPXkKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisKKyMKKyMgSU9QM3h4IEltcGxlbWVudGF0aW9uIE9wdGlvbnMKKyMKKworIworIyBJT1AzeHggUGxhdGZvcm0gVHlwZXMKKyMKKyMgQ09ORklHX0FSQ0hfSVE4MDMyMSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lRMzEyNDQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JUTgwMzMxIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX0lRODAzMzI9eQorIyBDT05GSUdfQVJDSF9FUDgwMjE5IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0lPUDMzMT15CisKKyMKKyMgSU9QM3h4IENoaXBzZXQgRmVhdHVyZXMKKyMKKyMgQ09ORklHX0lPUDMzMV9TVEVQRCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9YU0NBTEU9eQorQ09ORklHX0NQVV8zMnY1PXkKK0NPTkZJR19DUFVfQUJSVF9FVjVUPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX01JTklDQUNIRT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCisjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAorQ09ORklHX1hTQ0FMRV9QTVU9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCitDT05GSUdfUENJPXkKKyMgQ09ORklHX1BDSV9MRUdBQ1lfUFJPQyBpcyBub3Qgc2V0CitDT05GSUdfUENJX05BTUVTPXkKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0iaXA9Ym9vdCByb290PW5mcyBjb25zb2xlPXR0eVMwLDExNTIwMCIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKK0NPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CitDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCitDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQ9eQorQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZPXkKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX05PU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CitDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAwODAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTEKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9eQorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1FMQTJYWFg9eQorIyBDT05GSUdfU0NTSV9RTEEyMVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBMjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQTIzMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEEyMzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBNjMxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0xJTkVBUj15CitDT05GSUdfTURfUkFJRDA9eQorQ09ORklHX01EX1JBSUQxPXkKKyMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDU9eQorIyBDT05GSUdfTURfUkFJRDYgaXMgbm90IHNldAorIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9ETT15CisjIENPTkZJR19ETV9DUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9TTkFQU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9NSVJST1IgaXMgbm90IHNldAorIyBDT05GSUdfRE1fWkVSTyBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9NVUxUSVBBVEggaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lQX1RDUERJQUc9eQorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBBUkNuZXQgZGV2aWNlcworIworIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKKyMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwMD15CitDT05GSUdfRTEwMDBfTkFQST15CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgQWxnb3JpdGhtcworIworIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0lPUDNYWD15CisjIENPTkZJR19JMkNfSVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDeDIwMF9BQ0IgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgU2Vuc29ycyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19TRU5TT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRkIgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorCisjCisjIFhGUyBzdXBwb3J0CisjCitDT05GSUdfWEZTX0ZTPXkKK0NPTkZJR19YRlNfRVhQT1JUPXkKKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX1hGU19TRUNVUklUWT15CitDT05GSUdfWEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD15CitDT05GSUdfTkZTRF9WMz15CisjIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfREVCVUdfVVNFUj15CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2l4ZHAyNDAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZDY2M2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2l4ZHAyNDAwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDg4OCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKKyMgU3VuIE1hciAyNyAyMToxMzozOCAyMDA1CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19JT01BUD15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKKyMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSVhQMjAwMD15CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19CSUdfRU5ESUFOPXkKKworIworIyBJbnRlbCBJWFAyNDAwLzI4MDAgSW1wbGVtZW50YXRpb24gT3B0aW9ucworIworCisjCisjIElYUDI0MDAvMjgwMCBQbGF0Zm9ybXMKKyMKKyMgQ09ORklHX0FSQ0hfRU5QMjYxMSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9JWERQMjQwMD15CisjIENPTkZJR19BUkNIX0lYRFAyODAwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0lYRFAyWDAwPXkKKyMgQ09ORklHX0FSQ0hfSVhEUDI0MDEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWERQMjgwMSBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9YU0NBTEU9eQorQ09ORklHX0NQVV8zMnY1PXkKK0NPTkZJR19DUFVfQUJSVF9FVjVUPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX01JTklDQUNIRT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCisjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAorQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKK0NPTkZJR19YU0NBTEVfUE1VPXkKKworIworIyBCdXMgc3VwcG9ydAorIworQ09ORklHX1BDST15CitDT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKK0NPTkZJR19QQ0lfTkFNRVM9eQorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDU3NjAwIHJvb3Q9L2Rldi9uZnMgaXA9Ym9vdHAgbWVtPTY0TUAweDAgcGNpPWZpcm13YXJlIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CisjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKK0NPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CitDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCitDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQ9eQorQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZPXkKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0lYUDIwMDA9eQorIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKKyMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPXkKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKworIworIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENJPXkKKyMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RHUlMgaXMgbm90IHNldAorQ09ORklHX0VFUFJPMTAwPXkKKyMgQ09ORklHX0UxMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAorIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworQ09ORklHX1dBTj15CisjIENPTkZJR19MQU5NRURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5DTElOS19TWU5DUFBQIGlzIG5vdCBzZXQKK0NPTkZJR19IRExDPXkKK0NPTkZJR19IRExDX1JBVz15CisjIENPTkZJR19IRExDX1JBV19FVEggaXMgbm90IHNldAorQ09ORklHX0hETENfQ0lTQ089eQorQ09ORklHX0hETENfRlI9eQorQ09ORklHX0hETENfUFBQPXkKKworIworIyBYLjI1L0xBUEIgc3VwcG9ydCBpcyBkaXNhYmxlZAorIworIyBDT05GSUdfUENJMjAwU1lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTlhMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBUlNZTkMgaXMgbm90IHNldAorQ09ORklHX0RMQ0k9eQorQ09ORklHX0RMQ0lfQ09VTlQ9MjQKK0NPTkZJR19ETENJX01BWD04CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19JWFAyMDAwX1dBVENIRE9HPXkKKworIworIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgQWxnb3JpdGhtcworIworQ09ORklHX0kyQ19BTEdPQklUPXkKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ3gyMDBfQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIFNlbnNvcnMgQ2hpcCBzdXBwb3J0CisjCitDT05GSUdfSTJDX1NFTlNPUj15CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMgQ2hpcCBzdXBwb3J0CisjCitDT05GSUdfU0VOU09SU19FRVBST009eQorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRkIgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKKworIworIyBYRlMgc3VwcG9ydAorIworIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKKyMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19ERUJVR19VU0VSPXkKKyMgQ09ORklHX0RFQlVHX1dBSVRRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9peGRwMjQwMV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY1MWM5OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDFfZGVmY29uZmlnCkBAIC0wLDAgKzEsODg5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgorIyBTdW4gTWFyIDI3IDIxOjUzOjU1IDIwMDUKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9JWFAyMDAwPXkKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0JJR19FTkRJQU49eQorCisjCisjIEludGVsIElYUDI0MDAvMjgwMCBJbXBsZW1lbnRhdGlvbiBPcHRpb25zCisjCisKKyMKKyMgSVhQMjQwMC8yODAwIFBsYXRmb3JtcworIworIyBDT05GSUdfQVJDSF9FTlAyNjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhEUDI0MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWERQMjgwMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9JWERQMjQwMT15CisjIENPTkZJR19BUkNIX0lYRFAyODAxIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0lYRFAyWDAxPXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1hTQ0FMRT15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfTUlOSUNBQ0hFPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKKyMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0JJR19FTkRJQU49eQorQ09ORklHX1hTQ0FMRV9QTVU9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQorQ09ORklHX1BDSV9OQU1FUz15CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsNTc2MDAgcm9vdD0vZGV2L25mcyBpcD1ib290cCBtZW09NjRNQDB4MCBwY2k9ZmlybXdhcmUiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKKyMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKK0NPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKK0NPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRD15CitDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfUkVBRE9OTFk9eQorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfSVhQMjAwMD15CisjIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUENJIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lQX1RDUERJQUc9eQorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPXkKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKworIworIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENJPXkKKyMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKK0NPTkZJR19DUzg5eDA9eQorIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0CitDT05GSUdfRUVQUk8xMDA9eQorIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAorIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCitDT05GSUdfV0FOPXkKKyMgQ09ORklHX0xBTk1FRElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTkNMSU5LX1NZTkNQUFAgaXMgbm90IHNldAorQ09ORklHX0hETEM9eQorQ09ORklHX0hETENfUkFXPXkKKyMgQ09ORklHX0hETENfUkFXX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfSERMQ19DSVNDTz15CitDT05GSUdfSERMQ19GUj15CitDT05GSUdfSERMQ19QUFA9eQorCisjCisjIFguMjUvTEFQQiBzdXBwb3J0IGlzIGRpc2FibGVkCisjCisjIENPTkZJR19QQ0kyMDBTWU4gaXMgbm90IHNldAorIyBDT05GSUdfV0FOWEwgaXMgbm90IHNldAorIyBDT05GSUdfUEMzMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkFSU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfRExDST15CitDT05GSUdfRExDSV9DT1VOVD0yNAorQ09ORklHX0RMQ0lfTUFYPTgKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0lYUDIwMDBfV0FUQ0hET0c9eQorCisjCisjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCitDT05GSUdfSTJDX0FMR09CSVQ9eQorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDeDIwMF9BQ0IgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgU2Vuc29ycyBDaGlwIHN1cHBvcnQKKyMKK0NPTkZJR19JMkNfU0VOU09SPXkKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQyBDaGlwIHN1cHBvcnQKKyMKK0NPTkZJR19TRU5TT1JTX0VFUFJPTT15CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorCisjCisjIFhGUyBzdXBwb3J0CisjCisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorIyBDT05GSUdfSkZGUzJfRlNfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19OT1JfRUNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0VSUk9SUz15CitDT05GSUdfREVCVUdfTEw9eQorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4ZHAyODAwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzZmOTkxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMF9kZWZjb25maWcKQEAgLTAsMCArMSw4ODggQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCisjIFN1biBNYXIgMjcgMjI6MTU6MjMgMjAwNQorIworQ09ORklHX0FSTT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCisjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0lYUDIwMDA9eQorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfQklHX0VORElBTj15CisKKyMKKyMgSW50ZWwgSVhQMjQwMC8yODAwIEltcGxlbWVudGF0aW9uIE9wdGlvbnMKKyMKKworIworIyBJWFAyNDAwLzI4MDAgUGxhdGZvcm1zCisjCisjIENPTkZJR19BUkNIX0VOUDI2MTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWERQMjQwMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9JWERQMjgwMD15CitDT05GSUdfQVJDSF9JWERQMlgwMD15CisjIENPTkZJR19BUkNIX0lYRFAyNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhEUDI4MDEgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfWFNDQUxFPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9NSU5JQ0FDSEU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfQklHX0VORElBTj15CitDT05GSUdfWFNDQUxFX1BNVT15CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CitDT05GSUdfUENJX05BTUVTPXkKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCw5NjAwIHJvb3Q9L2Rldi9uZnMgaXA9Ym9vdHAgbWVtPTY0TUAweDAgcGNpPWZpcm13YXJlIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CisjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKK0NPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CitDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCitDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQ9eQorQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZPXkKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0lYUDIwMDA9eQorIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKKyMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPXkKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKworIworIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENJPXkKKyMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RHUlMgaXMgbm90IHNldAorQ09ORklHX0VFUFJPMTAwPXkKKyMgQ09ORklHX0UxMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAorIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworQ09ORklHX1dBTj15CisjIENPTkZJR19MQU5NRURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5DTElOS19TWU5DUFBQIGlzIG5vdCBzZXQKK0NPTkZJR19IRExDPXkKK0NPTkZJR19IRExDX1JBVz15CisjIENPTkZJR19IRExDX1JBV19FVEggaXMgbm90IHNldAorQ09ORklHX0hETENfQ0lTQ089eQorQ09ORklHX0hETENfRlI9eQorQ09ORklHX0hETENfUFBQPXkKKworIworIyBYLjI1L0xBUEIgc3VwcG9ydCBpcyBkaXNhYmxlZAorIworIyBDT05GSUdfUENJMjAwU1lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTlhMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBUlNZTkMgaXMgbm90IHNldAorQ09ORklHX0RMQ0k9eQorQ09ORklHX0RMQ0lfQ09VTlQ9MjQKK0NPTkZJR19ETENJX01BWD04CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19JWFAyMDAwX1dBVENIRE9HPXkKKworIworIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgQWxnb3JpdGhtcworIworQ09ORklHX0kyQ19BTEdPQklUPXkKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ3gyMDBfQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIFNlbnNvcnMgQ2hpcCBzdXBwb3J0CisjCitDT05GSUdfSTJDX1NFTlNPUj15CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMgQ2hpcCBzdXBwb3J0CisjCitDT05GSUdfU0VOU09SU19FRVBST009eQorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRkIgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKKworIworIyBYRlMgc3VwcG9ydAorIworIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKKyMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19ERUJVR19VU0VSPXkKKyMgQ09ORklHX0RFQlVHX1dBSVRRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI4MDFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4NGEyMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI4MDFfZGVmY29uZmlnCkBAIC0wLDAgKzEsODg5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgorIyBTdW4gTWFyIDI3IDIyOjM5OjE5IDIwMDUKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9JWFAyMDAwPXkKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0JJR19FTkRJQU49eQorCisjCisjIEludGVsIElYUDI0MDAvMjgwMCBJbXBsZW1lbnRhdGlvbiBPcHRpb25zCisjCisKKyMKKyMgSVhQMjQwMC8yODAwIFBsYXRmb3JtcworIworIyBDT05GSUdfQVJDSF9FTlAyNjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhEUDI0MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWERQMjgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYRFAyNDAxIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0lYRFAyODAxPXkKK0NPTkZJR19BUkNIX0lYRFAyWDAxPXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1hTQ0FMRT15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfTUlOSUNBQ0hFPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKKyMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0JJR19FTkRJQU49eQorQ09ORklHX1hTQ0FMRV9QTVU9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQorQ09ORklHX1BDSV9OQU1FUz15CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwIHJvb3Q9L2Rldi9uZnMgaXA9Ym9vdHAgbWVtPTY0TUAweDAgcGNpPWZpcm13YXJlIGl4ZHAyeDAxX2Nsb2NrPTUwMDAwMDAwIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CisjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKK0NPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CitDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCitDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQ9eQorQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZPXkKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0lYUDIwMDA9eQorIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKKyMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPXkKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKworIworIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENJPXkKKyMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKK0NPTkZJR19DUzg5eDA9eQorIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0CitDT05GSUdfRUVQUk8xMDA9eQorIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAorIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCitDT05GSUdfV0FOPXkKKyMgQ09ORklHX0xBTk1FRElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTkNMSU5LX1NZTkNQUFAgaXMgbm90IHNldAorQ09ORklHX0hETEM9eQorQ09ORklHX0hETENfUkFXPXkKKyMgQ09ORklHX0hETENfUkFXX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfSERMQ19DSVNDTz15CitDT05GSUdfSERMQ19GUj15CitDT05GSUdfSERMQ19QUFA9eQorCisjCisjIFguMjUvTEFQQiBzdXBwb3J0IGlzIGRpc2FibGVkCisjCisjIENPTkZJR19QQ0kyMDBTWU4gaXMgbm90IHNldAorIyBDT05GSUdfV0FOWEwgaXMgbm90IHNldAorIyBDT05GSUdfUEMzMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkFSU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfRExDST15CitDT05GSUdfRExDSV9DT1VOVD0yNAorQ09ORklHX0RMQ0lfTUFYPTgKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0lYUDIwMDBfV0FUQ0hET0c9eQorCisjCisjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCitDT05GSUdfSTJDX0FMR09CSVQ9eQorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDeDIwMF9BQ0IgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgU2Vuc29ycyBDaGlwIHN1cHBvcnQKKyMKK0NPTkZJR19JMkNfU0VOU09SPXkKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQyBDaGlwIHN1cHBvcnQKKyMKK0NPTkZJR19TRU5TT1JTX0VFUFJPTT15CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorCisjCisjIFhGUyBzdXBwb3J0CisjCisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorIyBDT05GSUdfSkZGUzJfRlNfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19OT1JfRUNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0VSUk9SUz15CitDT05GSUdfREVCVUdfTEw9eQorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YWFmZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2l4cDR4eF9kZWZjb25maWcKQEAgLTAsMCArMSwxMTY0IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgorIyBTdW4gTWFyIDI3IDIyOjUzOjQwIDIwMDUKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CitDT05GSUdfTU9EVkVSU0lPTlM9eQorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0lYUDRYWD15CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfQklHX0VORElBTj15CisKKyMKKyMgSW50ZWwgSVhQNHh4IEltcGxlbWVudGF0aW9uIE9wdGlvbnMKKyMKKworIworIyBJWFA0eHggUGxhdGZvcm1zCisjCisjIENPTkZJR19BUkNIX0FWSUxBIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0FESV9DT1lPVEU9eQorQ09ORklHX0FSQ0hfSVhEUDQyNT15CisjIENPTkZJR19NQUNIX0lYRFBHNDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSVhEUDQ2NSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9JWENEUDExMDA9eQorQ09ORklHX0FSQ0hfUFJQTUMxMTAwPXkKK0NPTkZJR19BUkNIX0lYRFA0WFg9eQorIyBDT05GSUdfTUFDSF9HVFdYNTcxNSBpcyBub3Qgc2V0CisKKyMKKyMgSVhQNHh4IE9wdGlvbnMKKyMKKyMgQ09ORklHX0lYUDRYWF9JTkRJUkVDVF9QQ0kgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfWFNDQUxFPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9NSU5JQ0FDSEU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfQklHX0VORElBTj15CitDT05GSUdfWFNDQUxFX1BNVT15CitDT05GSUdfRE1BQk9VTkNFPXkKKworIworIyBCdXMgc3VwcG9ydAorIworQ09ORklHX1BDST15CitDT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKK0NPTkZJR19QQ0lfTkFNRVM9eQorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCBpcD1ib290cCByb290PS9kZXYvbmZzIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorQ09ORklHX0FQTT15CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQorQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfUkVBRE9OTFkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfSVhQNFhYPXkKKyMgQ09ORklHX01URF9FREI3MzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QQ0kgaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX01URF9OQU5EPW0KKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPW0KKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKK0NPTkZJR19JREU9eQorQ09ORklHX0JMS19ERVZfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz15CisjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CitDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQorIyBDT05GSUdfSURFUENJX1NIQVJFX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BX0ZPUkNFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JREVETUFfUENJX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfQ01ENjRYPXkKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0hQVDM2Nj15CisjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVz15CisjIENPTkZJR19QREMyMDJYWF9GT1JDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BPXkKKyMgQ09ORklHX0lERURNQV9JVkIgaXMgbm90IHNldAorIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD1tCitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX05FVExJTktfREVWPW0KK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQX1JPVVRFX0ZXTUFSSz15CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKKyMgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSF9DQUNIRUQgaXMgbm90IHNldAorQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0lQR1JFPW0KK0NPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKK0NPTkZJR19JUF9QSU1TTV9WMj15CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1RVTk5FTD1tCisjIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUF9WUz1tCitDT05GSUdfSVBfVlNfREVCVUc9eQorQ09ORklHX0lQX1ZTX1RBQl9CSVRTPTEyCisKKyMKKyMgSVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydAorIworIyBDT05GSUdfSVBfVlNfUFJPVE9fVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTX1BST1RPX1VEUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9WU19QUk9UT19FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlNfUFJPVE9fQUggaXMgbm90IHNldAorCisjCisjIElQVlMgc2NoZWR1bGVyCisjCitDT05GSUdfSVBfVlNfUlI9bQorQ09ORklHX0lQX1ZTX1dSUj1tCitDT05GSUdfSVBfVlNfTEM9bQorQ09ORklHX0lQX1ZTX1dMQz1tCitDT05GSUdfSVBfVlNfTEJMQz1tCitDT05GSUdfSVBfVlNfTEJMQ1I9bQorQ09ORklHX0lQX1ZTX0RIPW0KK0NPTkZJR19JUF9WU19TSD1tCisjIENPTkZJR19JUF9WU19TRUQgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlNfTlEgaXMgbm90IHNldAorCisjCisjIElQVlMgYXBwbGljYXRpb24gaGVscGVyCisjCisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19CUklER0VfTkVURklMVEVSPXkKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQorIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9GVFA9bQorQ09ORklHX0lQX05GX0lSQz1tCisjIENPTkZJR19JUF9ORl9URlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0FNQU5EQSBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9NQVRDSF9NQUM9bQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfUEtUVFlQRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfTUFSSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0VDTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9NQVRDSF9BSF9FU1A9bQorQ09ORklHX0lQX05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KKyMgQ09ORklHX0lQX05GX01BVENIX1BIWVNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTkFUPW0KK0NPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1NBTUUgaXMgbm90IHNldAorQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDPW0KK0NPTkZJR19JUF9ORl9OQVRfSVJDPW0KK0NPTkZJR19JUF9ORl9OQVRfRlRQPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfRFNDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfVEFSR0VUX01BUks9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1JBVyBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9BUlBGSUxURVI9bQorIyBDT05GSUdfSVBfTkZfQVJQX01BTkdMRSBpcyBub3Qgc2V0CisKKyMKKyMgQnJpZGdlOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKK0NPTkZJR19BVE09eQorQ09ORklHX0FUTV9DTElQPXkKKyMgQ09ORklHX0FUTV9DTElQX05PX0lDTVAgaXMgbm90IHNldAorQ09ORklHX0FUTV9MQU5FPW0KK0NPTkZJR19BVE1fTVBPQT1tCitDT05GSUdfQVRNX0JSMjY4ND1tCisjIENPTkZJR19BVE1fQlIyNjg0X0lQRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19CUklER0U9bQorQ09ORklHX1ZMQU5fODAyMVE9bQorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9bQorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CitDT05GSUdfSVBYPW0KKyMgQ09ORklHX0lQWF9JTlRFUk4gaXMgbm90IHNldAorQ09ORklHX0FUQUxLPW0KK0NPTkZJR19ERVZfQVBQTEVUQUxLPXkKK0NPTkZJR19JUEREUD1tCitDT05GSUdfSVBERFBfRU5DQVA9eQorQ09ORklHX0lQRERQX0RFQ0FQPXkKK0NPTkZJR19YMjU9bQorQ09ORklHX0xBUEI9bQorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CitDT05GSUdfRUNPTkVUPW0KK0NPTkZJR19FQ09ORVRfQVVOVURQPXkKK0NPTkZJR19FQ09ORVRfTkFUSVZFPXkKK0NPTkZJR19XQU5fUk9VVEVSPW0KKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKK0NPTkZJR19ORVRfU0NIRUQ9eQorQ09ORklHX05FVF9TQ0hfQ0xLX0pJRkZJRVM9eQorIyBDT05GSUdfTkVUX1NDSF9DTEtfR0VUVElNRU9GREFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfQ0xLX0NQVSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSF9DQlE9bQorQ09ORklHX05FVF9TQ0hfSFRCPW0KKyMgQ09ORklHX05FVF9TQ0hfSEZTQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0FUTSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSF9QUklPPW0KK0NPTkZJR19ORVRfU0NIX1JFRD1tCitDT05GSUdfTkVUX1NDSF9TRlE9bQorQ09ORklHX05FVF9TQ0hfVEVRTD1tCitDT05GSUdfTkVUX1NDSF9UQkY9bQorQ09ORklHX05FVF9TQ0hfR1JFRD1tCitDT05GSUdfTkVUX1NDSF9EU01BUks9bQorIyBDT05GSUdfTkVUX1NDSF9ORVRFTSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSF9JTkdSRVNTPW0KK0NPTkZJR19ORVRfUU9TPXkKK0NPTkZJR19ORVRfRVNUSU1BVE9SPXkKK0NPTkZJR19ORVRfQ0xTPXkKKyMgQ09ORklHX05FVF9DTFNfQkFTSUMgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfVENJTkRFWD1tCitDT05GSUdfTkVUX0NMU19ST1VURTQ9bQorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorQ09ORklHX05FVF9DTFNfRlc9bQorQ09ORklHX05FVF9DTFNfVTMyPW0KKyMgQ09ORklHX0NMU19VMzJfUEVSRiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX0lORCBpcyBub3Qgc2V0CisjIENPTkZJR19DTFNfVTMyX01BUksgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUlNWUD1tCitDT05GSUdfTkVUX0NMU19SU1ZQNj1tCisjIENPTkZJR19ORVRfRU1BVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfQUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1BPTElDRT15CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCitDT05GSUdfTkVUX1BLVEdFTj1tCisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9eQorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSEVSVEFQIGlzIG5vdCBzZXQKKworIworIyBBUkNuZXQgZGV2aWNlcworIworIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorCisjCisjIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorQ09ORklHX05FVF9QQ0k9eQorIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0CitDT05GSUdfRUVQUk8xMDA9eQorIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAorIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCitDT05GSUdfTkVUX1JBRElPPXkKKworIworIyBPYnNvbGV0ZSBXaXJlbGVzcyBjYXJkcyBzdXBwb3J0IChwcmUtODAyLjExKQorIworIyBDT05GSUdfU1RSSVAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIDgwMi4xMWIgSVNBL1BDSSBjYXJkcyBzdXBwb3J0CisjCitDT05GSUdfSEVSTUVTPXkKKyMgQ09ORklHX1BMWF9IRVJNRVMgaXMgbm90IHNldAorIyBDT05GSUdfVE1EX0hFUk1FUyBpcyBub3Qgc2V0CitDT05GSUdfUENJX0hFUk1FUz15CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisKKyMKKyMgUHJpc20gR1QvRHVldHRlIDgwMi4xMShhL2IvZykgUENJL0NhcmRidXMgc3VwcG9ydAorIworIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1dJUkVMRVNTPXkKKworIworIyBXYW4gaW50ZXJmYWNlcworIworQ09ORklHX1dBTj15CisjIENPTkZJR19EU0NDNCBpcyBub3Qgc2V0CisjIENPTkZJR19MQU5NRURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5DTElOS19TWU5DUFBQIGlzIG5vdCBzZXQKK0NPTkZJR19IRExDPW0KK0NPTkZJR19IRExDX1JBVz15CisjIENPTkZJR19IRExDX1JBV19FVEggaXMgbm90IHNldAorQ09ORklHX0hETENfQ0lTQ089eQorQ09ORklHX0hETENfRlI9eQorQ09ORklHX0hETENfUFBQPXkKK0NPTkZJR19IRExDX1gyNT15CisjIENPTkZJR19QQ0kyMDBTWU4gaXMgbm90IHNldAorIyBDT05GSUdfV0FOWEwgaXMgbm90IHNldAorIyBDT05GSUdfUEMzMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkFSU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfRExDST1tCitDT05GSUdfRExDSV9DT1VOVD0yNAorQ09ORklHX0RMQ0lfTUFYPTgKK0NPTkZJR19XQU5fUk9VVEVSX0RSSVZFUlM9eQorIyBDT05GSUdfQ1lDTEFERVNfU1lOQyBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCRVRIRVIgaXMgbm90IHNldAorIyBDT05GSUdfWDI1X0FTWSBpcyBub3Qgc2V0CisKKyMKKyMgQVRNIGRyaXZlcnMKKyMKK0NPTkZJR19BVE1fVENQPW0KKyMgQ09ORklHX0FUTV9MQU5BSSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fRU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9GSVJFU1RSRUFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9aQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9OSUNTVEFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9JRFQ3NzI1MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fQU1CQVNTQURPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSE9SSVpPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSUEgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0ZPUkUyMDBFX01BWUJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9IRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19JWFA0WFhfV0FUQ0hET0c9eQorCisjCisjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCitDT05GSUdfSTJDX0FMR09CSVQ9eQorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSU9QM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0EgaXMgbm90IHNldAorQ09ORklHX0kyQ19JWFA0WFg9eQorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAorIyBDT05GSUdfU0N4MjAwX0FDQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBTZW5zb3JzIENoaXAgc3VwcG9ydAorIworQ09ORklHX0kyQ19TRU5TT1I9eQorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDIENoaXAgc3VwcG9ydAorIworQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CitDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisKKyMKKyMgWEZTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCisjIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCisjIENPTkZJR19OTFMgaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dBSVRRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvam9ybmFkYTcyMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2pvcm5hZGE3MjBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OGFlYmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2pvcm5hZGE3MjBfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTE5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgorIyBTdW4gTWFyIDI3IDIzOjEwOjM1IDIwMDUKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU0ExMTAwPXkKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisKKyMKKyMgU0ExMXgwIEltcGxlbWVudGF0aW9ucworIworIyBDT05GSUdfU0ExMTAwX0FTU0FCRVQgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0NFUkYgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0NPTExJRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSDMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0gzNjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9IMzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfQkFER0U0IGlzIG5vdCBzZXQKK0NPTkZJR19TQTExMDBfSk9STkFEQTcyMD15CisjIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfTEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfUExFQiBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfU0hBTk5PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfU0lNUEFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9TU1AgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfU0ExMTAwPXkKK0NPTkZJR19DUFVfMzJ2ND15CitDT05GSUdfQ1BVX0FCUlRfRVY0PXkKK0NPTkZJR19DUFVfQ0FDSEVfVjRXQj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQj15CitDT05GSUdfQ1BVX01JTklDQUNIRT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfU0ExMTExPXkKK0NPTkZJR19ETUFCT1VOQ0U9eQorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9OQorCisjCisjIEJ1cyBzdXBwb3J0CisjCitDT05GSUdfSVNBPXkKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCitDT05GSUdfUENDQVJEPXkKKyMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBPXkKKworIworIyBQQy1jYXJkIGJyaWRnZXMKKyMKK0NPTkZJR19JODIzNjU9eQorIyBDT05GSUdfVENJQyBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBX1NBMTEwMD15CisjIENPTkZJR19QQ01DSUFfU0ExMTExIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0NBUkRfTk9OU1RBVElDPXkKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0RJU0NPTlRJR01FTT15CisjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJrZWVwaW5pdHJkIG1lbT0zMk0iCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKK0NPTkZJR19GUEVfRkFTVEZQRT15CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9bQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19BUE0gaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CitDT05GSUdfTVREX0RFQlVHPXkKK0NPTkZJR19NVERfREVCVUdfVkVSQk9TRT0xCisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPW0KK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05GSUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfU0ExMTAwPXkKKyMgQ09ORklHX01URF9FREI3MzEyIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BOUCBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPW0KKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9OQkQ9bQorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCitDT05GSUdfSURFPW0KK0NPTkZJR19CTEtfREVWX0lERT1tCisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURJU0s9bQorIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFQ1MgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ0Q9bQorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCitDT05GSUdfSURFX0dFTkVSSUM9bQorIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfQ0hJUFNFVFMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAorIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CisjIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CitDT05GSUdfSVJEQT1tCisKKyMKKyMgSXJEQSBwcm90b2NvbHMKKyMKK0NPTkZJR19JUkxBTj1tCisjIENPTkZJR19JUk5FVCBpcyBub3Qgc2V0CitDT05GSUdfSVJDT01NPW0KKyMgQ09ORklHX0lSREFfVUxUUkEgaXMgbm90IHNldAorCisjCisjIElyREEgb3B0aW9ucworIworIyBDT05GSUdfSVJEQV9DQUNIRV9MQVNUX0xTQVAgaXMgbm90IHNldAorIyBDT05GSUdfSVJEQV9GQVNUX1JSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREFfREVCVUcgaXMgbm90IHNldAorCisjCisjIEluZnJhcmVkLXBvcnQgZGV2aWNlIGRyaXZlcnMKKyMKKworIworIyBTSVIgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0lSVFRZX1NJUiBpcyBub3Qgc2V0CisKKyMKKyMgRG9uZ2xlIHN1cHBvcnQKKyMKKworIworIyBPbGQgU0lSIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19JUlBPUlRfU0lSIGlzIG5vdCBzZXQKKworIworIyBPbGQgU2VyaWFsIGRvbmdsZSBzdXBwb3J0CisjCisKKyMKKyMgRklSIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19OU0NfRklSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTkJPTkRfRklSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQ19JUkNDX0ZJUiBpcyBub3Qgc2V0CisjIENPTkZJR19BTElfRklSIGlzIG5vdCBzZXQKK0NPTkZJR19TQTExMDBfRklSPW0KKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCisjIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAorQ09ORklHX01JST1tCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKK0NPTkZJR19ORVRfUkFESU89eQorCisjCisjIE9ic29sZXRlIFdpcmVsZXNzIGNhcmRzIHN1cHBvcnQgKHByZS04MDIuMTEpCisjCisjIENPTkZJR19TVFJJUCBpcyBub3Qgc2V0CitDT05GSUdfQVJMQU49bQorQ09ORklHX1dBVkVMQU49bQorQ09ORklHX1BDTUNJQV9XQVZFTEFOPW0KKyMgQ09ORklHX1BDTUNJQV9ORVRXQVZFIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyA4MDIuMTEgRnJlcXVlbmN5IEhvcHBpbmcgY2FyZHMgc3VwcG9ydAorIworIyBDT05GSUdfUENNQ0lBX1JBWUNTIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyA4MDIuMTFiIElTQS9QQ0kgY2FyZHMgc3VwcG9ydAorIworQ09ORklHX0hFUk1FUz1tCisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgODAyLjExYiBQY21jaWEvQ2FyZGJ1cyBjYXJkcyBzdXBwb3J0CisjCitDT05GSUdfUENNQ0lBX0hFUk1FUz1tCitDT05GSUdfQUlST19DUz1tCisjIENPTkZJR19QQ01DSUFfV0wzNTAxIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfV0lSRUxFU1M9eQorCisjCisjIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfTkVUX1BDTUNJQT15CitDT05GSUdfUENNQ0lBXzNDNTg5PW0KK0NPTkZJR19QQ01DSUFfM0M1NzQ9bQorQ09ORklHX1BDTUNJQV9GTVZKMThYPW0KK0NPTkZJR19QQ01DSUFfUENORVQ9bQorQ09ORklHX1BDTUNJQV9OTUNMQU49bQorQ09ORklHX1BDTUNJQV9TTUM5MUM5Mj1tCitDT05GSUdfUENNQ0lBX1hJUkMyUFM9bQorQ09ORklHX1BDTUNJQV9BWE5FVD1tCisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KKyMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0FTWU5DPW0KKyMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KKyMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD02NDAKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT0yNDAKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfSU5QT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0xPR0lCTSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QQzExMFBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX1NBMTExMSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0ExMTAwPXkKK0NPTkZJR19TRVJJQUxfU0ExMTAwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKworIworIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfRkI9eQorIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NPRlRfQ1VSU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKK0NPTkZJR19TT1VORD1tCisKKyMKKyMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisjCisjIENPTkZJR19TTkQgaXMgbm90IHNldAorCisjCisjIE9wZW4gU291bmQgU3lzdGVtCisjCisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KQkQgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBYRlMgc3VwcG9ydAorIworIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz1tCisjIENPTkZJR19KT0xJRVQgaXMgbm90IHNldAorIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfREVWRlNfRlM9eQorQ09ORklHX0RFVkZTX01PVU5UPXkKK0NPTkZJR19ERVZGU19ERUJVRz15CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MgorIyBDT05GSUdfSkZGUzJfRlNfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19OT1JfRUNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz1tCitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9bQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19TVU5SUEM9bQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU0xBQj15CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XQUlUUSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRVJST1JTPXkKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9sYXJ0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbGFydF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAzMzgyOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbGFydF9kZWZjb25maWcKQEAgLTAsMCArMSw4NzcgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCisjIFN1biBNYXIgMjcgMjM6NTM6MjQgMjAwNQorIworQ09ORklHX0FSTT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU0ExMTAwPXkKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisKKyMKKyMgU0ExMXgwIEltcGxlbWVudGF0aW9ucworIworIyBDT05GSUdfU0ExMTAwX0FTU0FCRVQgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0NFUkYgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0NPTExJRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSDMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0gzNjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9IMzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfQkFER0U0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9IQUNLS0lUIGlzIG5vdCBzZXQKK0NPTkZJR19TQTExMDBfTEFSVD15CisjIENPTkZJR19TQTExMDBfUExFQiBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfU0hBTk5PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfU0lNUEFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9TU1AgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfU0ExMTAwPXkKK0NPTkZJR19DUFVfMzJ2ND15CitDT05GSUdfQ1BVX0FCUlRfRVY0PXkKK0NPTkZJR19DUFVfQ0FDSEVfVjRXQj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQj15CitDT05GSUdfQ1BVX01JTklDQUNIRT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19JU0E9eQorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19ESVNDT05USUdNRU09eQorQ09ORklHX0xFRFM9eQorIyBDT05GSUdfTEVEU19USU1FUiBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19DUFU9eQorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0EwLDk2MDAgcm9vdD0vZGV2L3JhbSIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworQ09ORklHX0NQVV9GUkVRPXkKK0NPTkZJR19DUFVfRlJFUV9UQUJMRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfU1RBVD15CisjIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9TQTExMDA9eQorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorQ09ORklHX0FQTT1tCisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorQ09ORklHX01URF9ERUJVRz15CitDT05GSUdfTVREX0RFQlVHX1ZFUkJPU0U9MQorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0xBUlQ9eQorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BOUCBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKK0NPTkZJR19JREU9bQorQ09ORklHX0JMS19ERVZfSURFPW0KKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz1tCisjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ0Q9bQorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCitDT05GSUdfSURFX0dFTkVSSUM9bQorIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfQ0hJUFNFVFMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAorIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPW0KKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lQX1RDUERJQUc9eQorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKK0NPTkZJR19JUkRBPW0KKworIworIyBJckRBIHByb3RvY29scworIworQ09ORklHX0lSTEFOPW0KK0NPTkZJR19JUk5FVD1tCitDT05GSUdfSVJDT01NPW0KKyMgQ09ORklHX0lSREFfVUxUUkEgaXMgbm90IHNldAorCisjCisjIElyREEgb3B0aW9ucworIworQ09ORklHX0lSREFfQ0FDSEVfTEFTVF9MU0FQPXkKKyMgQ09ORklHX0lSREFfRkFTVF9SUiBpcyBub3Qgc2V0CitDT05GSUdfSVJEQV9ERUJVRz15CisKKyMKKyMgSW5mcmFyZWQtcG9ydCBkZXZpY2UgZHJpdmVycworIworCisjCisjIFNJUiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfSVJUVFlfU0lSIGlzIG5vdCBzZXQKKworIworIyBEb25nbGUgc3VwcG9ydAorIworCisjCisjIE9sZCBTSVIgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0lSUE9SVF9TSVIgaXMgbm90IHNldAorCisjCisjIE9sZCBTZXJpYWwgZG9uZ2xlIHN1cHBvcnQKKyMKKworIworIyBGSVIgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX05TQ19GSVIgaXMgbm90IHNldAorIyBDT05GSUdfV0lOQk9ORF9GSVIgaXMgbm90IHNldAorIyBDT05GSUdfU01DX0lSQ0NfRklSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMSV9GSVIgaXMgbm90IHNldAorQ09ORklHX1NBMTEwMF9GSVI9bQorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPW0KKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTEFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAorIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfQVNZTkM9bQorIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAorQ09ORklHX1NMSVA9bQorQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CisjIENPTkZJR19TTElQX1NNQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVBfTU9ERV9TTElQNiBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfSU5QT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0xPR0lCTSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QQzExMFBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TQTExMDA9eQorQ09ORklHX1NFUklBTF9TQTExMDBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPW0KKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKKyMgQ09ORklHX1NORCBpcyBub3Qgc2V0CisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPW0KK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0pCRD1tCisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorQ09ORklHX1JFSVNFUkZTX0ZTPW0KKyMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorCisjCisjIFhGUyBzdXBwb3J0CisjCisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPW0KK0NPTkZJR19KT0xJRVQ9eQorIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPW0KK0NPTkZJR19KRkZTMl9GU19ERUJVRz0xCisjIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz1tCisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz1tCitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX05GU0Q9bQorQ09ORklHX05GU0RfVjM9eQorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9bQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfU1VOUlBDPW0KKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PW0KKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfREVCVUdfVVNFUj15CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMzI9bQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9bQorQ09ORklHX1pMSUJfREVGTEFURT1tCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2xwZDdhNDAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NDcwNmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2xwZDdhNDAwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDc4MSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKKyMgTW9uIE1hciAyOCAwMDowNjozMyAyMDA1CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19JT01BUD15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKK0NPTkZJR19JS0NPTkZJRz15CisjIENPTkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXQKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9MSDdBNDBYPXkKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKworIworIyBMSDdBNDBYIEltcGxlbWVudGF0aW9ucworIworIyBDT05GSUdfTUFDSF9LRVY3QTQwMCBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9MUEQ3QTQwMD15CisjIENPTkZJR19NQUNIX0xQRDdBNDA0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0xIN0E0MDA9eQorIyBDT05GSUdfTEg3QTQwWF9DT05USUdNRU0gaXMgbm90IHNldAorIyBDT05GSUdfTEg3QTQwWF9PTkVfQkFOS19QRVJfTk9ERSBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9BUk05MjJUPXkKK0NPTkZJR19DUFVfMzJ2ND15CitDT05GSUdfQ1BVX0FCUlRfRVY0VD15CitDT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0RJU0NPTlRJR01FTT15CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKK0NPTkZJR19JREU9eQorQ09ORklHX0JMS19ERVZfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz15CisjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CisjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorQ09ORklHX1NNQzkxWD15CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9MSDdBNDBYPXkKK0NPTkZJR19TRVJJQUxfTEg3QTQwWF9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorQ09ORklHX1JUQz15CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRkIgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgWEZTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCisjIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUFJFRU1QVD15CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19ERUJVR19VU0VSPXkKKyMgQ09ORklHX0RFQlVHX1dBSVRRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2xwZDdhNDA0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDRfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3Y2JlZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2xwZDdhNDA0X2RlZmNvbmZpZwpAQCAtMCwwICsxLDkxOSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKKyMgTW9uIE1hciAyOCAwMDoxNDowOCAyMDA1CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19JT01BUD15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKK0NPTkZJR19JS0NPTkZJRz15CisjIENPTkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXQKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9MSDdBNDBYPXkKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKworIworIyBMSDdBNDBYIEltcGxlbWVudGF0aW9ucworIworIyBDT05GSUdfTUFDSF9LRVY3QTQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xQRDdBNDAwIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX0xQRDdBNDA0PXkKK0NPTkZJR19BUkNIX0xIN0E0MDQ9eQorIyBDT05GSUdfTEg3QTQwWF9DT05USUdNRU0gaXMgbm90IHNldAorIyBDT05GSUdfTEg3QTQwWF9PTkVfQkFOS19QRVJfTk9ERSBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9BUk05MjJUPXkKK0NPTkZJR19DUFVfMzJ2ND15CitDT05GSUdfQ1BVX0FCUlRfRVY0VD15CitDT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0RJU0NPTlRJR01FTT15CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworQ09ORklHX0lERT15CitDT05GSUdfQkxLX0RFVl9JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKKyMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CisjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19TQ1NJPXkKKyMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKKyMgQ09ORklHX0JMS19ERVZfU0QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CitDT05GSUdfU01DOTFYPXkKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0xIN0E0MFg9eQorQ09ORklHX1NFUklBTF9MSDdBNDBYX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CitDT05GSUdfUlRDPXkKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKKyMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0JMVUVUT09USF9UVFkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1JXX0RFVEVDVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj15CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CitDT05GSUdfVVNCX0hJRElOUFVUPXkKKyMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorCisjCisjIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKworIworIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0CisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKworIworIyBVU0IgQVRNL0RTTCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgWEZTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCisjIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUFJFRU1QVD15CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19ERUJVR19VU0VSPXkKKyMgQ09ORklHX0RFQlVHX1dBSVRRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2x1YmJvY2tfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9sdWJib2NrX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmM4NzE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9sdWJib2NrX2RlZmNvbmZpZwpAQCAtMCwwICsxLDgwMyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKKyMgTW9uIE1hciAyOCAwMDoxODoxMyAyMDA1CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19JT01BUD15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX01PRFBBUk09eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNT0QgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUFhBPXkKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisKKyMKKyMgSW50ZWwgUFhBMnh4IEltcGxlbWVudGF0aW9ucworIworQ09ORklHX0FSQ0hfTFVCQk9DSz15CisjIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAorIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAorQ09ORklHX1BYQTI1eD15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9YU0NBTEU9eQorQ09ORklHX0NQVV8zMnY1PXkKK0NPTkZJR19DUFVfQUJSVF9FVjVUPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX01JTklDQUNIRT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCisjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAorQ09ORklHX1hTQ0FMRV9QTVU9eQorQ09ORklHX1NBMTExMT15CitDT05GSUdfRE1BQk9VTkNFPXkKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTkKKworIworIyBCdXMgc3VwcG9ydAorIworCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKK0NPTkZJR19QQ0NBUkQ9eQorIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUE9eQorCisjCisjIFBDLWNhcmQgYnJpZGdlcworIworIyBDT05GSUdfVENJQyBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBX1BYQTJYWD15CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTPXkKK0NPTkZJR19MRURTX1RJTUVSPXkKK0NPTkZJR19MRURTX0NQVT15CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyBpcD1ib290cCBjb25zb2xlPXR0eVMwLDExNTIwMCBtZW09NjRNIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKK0NPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX05PU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9HRU9NRVRSWT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTFVCQk9DSz15CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NIQVJQX1NMIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorQ09ORklHX1NNQzkxWD15CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ORVRfUENNQ0lBPXkKKyMgQ09ORklHX1BDTUNJQV8zQzU4OSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfM0M1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX0ZNVkoxOFggaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9QQ05FVD15CisjIENPTkZJR19QQ01DSUFfTk1DTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9TTUM5MUM5MiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfWElSQzJQUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfQVhORVQgaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorQ09ORklHX1NFUklPX1NBMTExMT15CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfUFhBPXkKK0NPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKworIworIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCitDT05GSUdfVVNCX0dBREdFVD15CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9QWEEyWFg9eQorQ09ORklHX1VTQl9QWEEyWFg9eQorQ09ORklHX1VTQl9QWEEyWFhfU01BTEw9eQorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dfU0VSSUFMPXkKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorCisjCisjIFhGUyBzdXBwb3J0CisjCisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCisjIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKKyMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0VSUk9SUz15CitDT05GSUdfREVCVUdfTEw9eQorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9sdXNsNzIwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2x1c2w3MjAwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2E2NGNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9sdXNsNzIwMF9kZWZjb25maWcKQEAgLTAsMCArMSw0NTUgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCisjIE1vbiBNYXIgMjggMDA6MjQ6MzggMjAwNQorIworQ09ORklHX0FSTT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorQ09ORklHX0ZJUT15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX01PRFBBUk09eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9MNzIwMD15CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfQVJNNzIwVD15CitDT05GSUdfQ1BVXzMydjQ9eQorQ09ORklHX0NQVV9BQlJUX0xWNFQ9eQorQ09ORklHX0NQVV9DQUNIRV9WND15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9DT1BZX1Y0V1Q9eQorQ09ORklHX0NQVV9UTEJfVjRXVD15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCisjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAorCisjCisjIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAwMDEwMDAwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weGYwM2UwMDAwCitDT05GSUdfWkJPT1RfUk9NPXkKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eTAgY29uc29sZT10dHlMVTEsMTE1MjAwIHJvb3Q9L2Rldi9yYW0gaW5pdHJkPTB4ZjEwMDAwMDAsMHgwMDVkYWM3YiBtZW09MzJNIgorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfQU9VVD15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCisjIENPTkZJR19NVEQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKKyMgQ09ORklHX0NPTVBVVE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19ST0NLRVRQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NZQ0xBREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PWEFfSU5URUxMSU8gaXMgbm90IHNldAorIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5DTElOS01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0CisjIENPTkZJR19SSVNDT004IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TWCBpcyBub3Qgc2V0CisjIENPTkZJR19SSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBTERSViBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgWEZTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCisjIENPTkZJR19OTFMgaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9tYWluc3RvbmVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9tYWluc3RvbmVfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1M2Q2ODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL21haW5zdG9uZV9kZWZjb25maWcKQEAgLTAsMCArMSw3OTcgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCisjIFNhdCBNYXIgMjYgMjA6MDA6NDUgMjAwNQorIworQ09ORklHX0FSTT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1BYQT15CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorCisjCisjIEludGVsIFBYQTJ4eCBJbXBsZW1lbnRhdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9NQUlOU1RPTkU9eQorIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKK0NPTkZJR19QWEEyN3g9eQorQ09ORklHX0lXTU1YVD15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9YU0NBTEU9eQorQ09ORklHX0NQVV8zMnY1PXkKK0NPTkZJR19DUFVfQUJSVF9FVjVUPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX01JTklDQUNIRT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCisjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAorQ09ORklHX1hTQ0FMRV9QTVU9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0xFRFM9eQorQ09ORklHX0xFRFNfVElNRVI9eQorQ09ORklHX0xFRFNfQ1BVPXkKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIGlwPWJvb3RwIGNvbnNvbGU9dHR5UzAsMTE1MjAwIG1lbT02NE0iCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQorQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfUkVBRE9OTFkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JMSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9FREI3MzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TSEFSUF9TTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworQ09ORklHX0lERT15CitDT05GSUdfQkxLX0RFVl9JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKKyMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lQX1RDUERJQUc9eQorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CitDT05GSUdfU01DOTFYPXkKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CisjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9QWEE9eQorQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorQ09ORklHX0ZCX1NPRlRfQ1VSU09SPXkKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorQ09ORklHX0ZCX1BYQT15CisjIENPTkZJR19GQl9QWEFfUEFSQU1FVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KQkQgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBYRlMgc3VwcG9ydAorIworIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorIyBDT05GSUdfSkZGUzJfRlNfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19OT1JfRUNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CisjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19ERUJVR19VU0VSPXkKKyMgQ09ORklHX0RFQlVHX1dBSVRRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgxYWRzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgxYWRzX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTE3ZDE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDFhZHNfZGVmY29uZmlnCkBAIC0wLDAgKzEsNzQ1IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgorIyBTdW4gTWFyIDI3IDAyOjE1OjQ2IDIwMDUKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVEwgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0VNQkVEREVEPXkKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0lNWD15CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKworIworIyBJTVggSW1wbGVtZW50YXRpb25zCisjCitDT05GSUdfQVJDSF9NWDFBRFM9eQorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfQVJNOTIwVD15CitDT05GSUdfQ1BVXzMydjQ9eQorQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQorQ09ORklHX0NQVV9DQUNIRV9WNFdUPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX0NPUFlfVjRXQj15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCisjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19JU0E9eQorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfUFJFRU1QVD15CisjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNNWDAsNTc2MDBuOCBpcD1ib290cCByb290PS9kZXYvbmZzIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKK0NPTkZJR19GUEVfTldGUEVfWFA9eQorQ09ORklHX0ZQRV9GQVNURlBFPXkKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCisjIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorQ09ORklHX01URF9ST009eQorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfWEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9bQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKKyMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lQX1RDUERJQUc9eQorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBBUkNuZXQgZGV2aWNlcworIworIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTEFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAorIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9eQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPXkKKyMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0RFRkxBVEU9eQorQ09ORklHX1BQUF9CU0RDT01QPXkKKyMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfSU1YPXkKK0NPTkZJR19TRVJJQUxfSU1YX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorQ09ORklHX1JUQz1tCisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRkIgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorCisjCisjIFhGUyBzdXBwb3J0CisjCisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfREVWRlNfRlM9eQorQ09ORklHX0RFVkZTX01PVU5UPXkKKyMgQ09ORklHX0RFVkZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorIyBDT05GSUdfSkZGUzJfRlNfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19OT1JfRUNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19QUkVFTVBUPXkKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0VSUk9SUz15CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCitDT05GSUdfQ1JZUFRPPXkKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19DUkNfQ0NJVFQ9eQorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uZXBvbnNldF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL25lcG9uc2V0X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmIxZjdjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uZXBvbnNldF9kZWZjb25maWcKQEAgLTAsMCArMSwxMTQ1IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTEKKyMgV2VkIE1hciAgOSAxNDoyODoyNiAyMDA1CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19JT01BUD15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NBMTEwMD15CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorCisjCisjIFNBMTF4MCBJbXBsZW1lbnRhdGlvbnMKKyMKK0NPTkZJR19TQTExMDBfQVNTQUJFVD15CitDT05GSUdfQVNTQUJFVF9ORVBPTlNFVD15CisjIENPTkZJR19TQTExMDBfQ0VSRiBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSDM2MDAgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0gzODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9CQURHRTQgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0pPUk5BREE3MjAgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0hBQ0tLSVQgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0xBUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX1BMRUIgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX1NIQU5OT04gaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX1NJTVBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfU1NQIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1NBMTEwMD15CitDT05GSUdfQ1BVXzMydjQ9eQorQ09ORklHX0NQVV9BQlJUX0VWND15CitDT05GSUdfQ1BVX0NBQ0hFX1Y0V0I9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0I9eQorQ09ORklHX0NQVV9NSU5JQ0FDSEU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX1NBMTExMT15CitDT05GSUdfRE1BQk9VTkNFPXkKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTkKKworIworIyBCdXMgc3VwcG9ydAorIworQ09ORklHX0lTQT15CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworQ09ORklHX1BDQ0FSRD15CisjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQT15CisKKyMKKyMgUEMtY2FyZCBicmlkZ2VzCisjCisjIENPTkZJR19JODIzNjUgaXMgbm90IHNldAorIyBDT05GSUdfVENJQyBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBX1NBMTEwMD15CitDT05GSUdfUENNQ0lBX1NBMTExMT15CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19ESVNDT05USUdNRU09eQorQ09ORklHX0xFRFM9eQorQ09ORklHX0xFRFNfVElNRVI9eQorQ09ORklHX0xFRFNfQ1BVPXkKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHg4MDAwMAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHhjMTAwMDAwMAorQ09ORklHX1pCT09UX1JPTT15CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQTAsMzg0MDBuOCBjcHVmcmVxPTIyMTIwMCBydyByb290PS9kZXYvbXRkYmxvY2syIG10ZHBhcnRzPXNhMTEwMDo1MTJLKGJvb3QpLDFNKGtlcm5lbCksMjU2MEsoaW5pdHJkKSw0TShyb290KSBsb2FkX3JhbWRpc2s9MSBwcm9tcHRfcmFtZGlzaz0wIG1lbT0zMk0gbm9pbml0cmQgaW5pdHJkPTB4YzA4MDAwMDAsM00iCitDT05GSUdfQ1BVX0ZSRVE9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRT15CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX1NBMTExMD15CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CitDT05GSUdfQVBNPXkKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQorQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfUkVBRE9OTFkgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCisjIENPTkZJR19NVERfQ0hBUiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfR0VPTUVUUlkgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorQ09ORklHX01URF9SQU09eQorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREX1NBMTEwMD15CisjIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisjIENPTkZJR19QTlAgaXMgbm90IHNldAorCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9YRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1NDU0k9bQorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPW0KKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfU0NTSV83MDAwRkFTU1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSEExNTJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUhBMTU0MiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU4yMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFRDMzI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBX1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OQ1I1M0M0MDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUEFTMTYgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QU0kyNDBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDX0ZBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzQxNiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1QxMjggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9VMTRfMzRGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorCisjCisjIFBDTUNJQSBTQ1NJIGFkYXB0ZXIgc3VwcG9ydAorIworIyBDT05GSUdfUENNQ0lBX0FIQTE1MlggaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX0ZET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX05JTkpBX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1FMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfU1lNNTNDNTAwIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKKyMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBTkNFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfVkVORE9SX1NNQz15CisjIENPTkZJR19XRDgweDMgaXMgbm90IHNldAorIyBDT05GSUdfVUxUUkEgaXMgbm90IHNldAorQ09ORklHX1NNQzkxWD15CitDT05GSUdfU01DOTE5ND15CisjIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMTcwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVBDQSBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPQ0tFVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ORVRfUENNQ0lBPXkKKyMgQ09ORklHX1BDTUNJQV8zQzU4OSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfM0M1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX0ZNVkoxOFggaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9QQ05FVD15CisjIENPTkZJR19QQ01DSUFfTk1DTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9TTUM5MUM5MiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfWElSQzJQUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfQVhORVQgaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RTREVWPXkKK0NPTkZJR19JTlBVVF9UU0RFVl9TQ1JFRU5fWD0yNDAKK0NPTkZJR19JTlBVVF9UU0RFVl9TQ1JFRU5fWT0zMjAKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBJL08gZHJpdmVycworIworIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fU0VSUE9SVD1tCisjIENPTkZJR19TRVJJT19DVDgyQzcxMCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fU0ExMTExPXkKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQ9eQorIyBDT05GSUdfQ09NUFVUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPQ0tFVFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1lDTEFERVMgaXMgbm90IHNldAorIyBDT05GSUdfRElHSUVQQ0EgaXMgbm90IHNldAorIyBDT05GSUdfRElHSSBpcyBub3Qgc2V0CisjIENPTkZJR19FU1BTRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9YQV9JTlRFTExJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NT1hBX1NNQVJUSU8gaXMgbm90IHNldAorIyBDT05GSUdfSVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTkNMSU5LTVAgaXMgbm90IHNldAorIyBDT05GSUdfTl9IRExDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJU0NPTTggaXMgbm90IHNldAorIyBDT05GSUdfU1BFQ0lBTElYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFMRFJWIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX0NTPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TQTExMDA9eQorQ09ORklHX1NFUklBTF9TQTExMDBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD02NAorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NBMTEwMF9XQVRDSERPRz1tCisKKyMKKyMgSVNBLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JWENPTVdEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCitDT05GSUdfSTJDX0FMR09CSVQ9eQorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX0VMRUtUT1IgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgU2Vuc29ycyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19TRU5TT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TQTExMDA9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKK0NPTkZJR19TT1VORD15CisKKyMKKyMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisjCisjIENPTkZJR19TTkQgaXMgbm90IHNldAorCisjCisjIE9wZW4gU291bmQgU3lzdGVtCisjCitDT05GSUdfU09VTkRfUFJJTUU9eQorIyBDT05GSUdfU09VTkRfQlQ4NzggaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfRlVTSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0NTNDI4MSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9TT05JQ1ZJQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfTVNORENMQVMgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfTVNORFBJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfVFZNSVhFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9BRDE5ODAgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCPW0KK0NPTkZJR19VU0JfREVCVUc9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1VTQl9PSENJX0hDRD1tCisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CTFVFVE9PVEhfVFRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSURJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1JXX0RFVEVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT1VTRT1tCisjIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKworIworIyBWaWRlbzRMaW51eCBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE11bHRpbWVkaWEgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPW0KKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVRLSVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVRTRVJWTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEFUTS9EU0wgZHJpdmVycworIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KQkQgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBYRlMgc3VwcG9ydAorIworIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz1tCitDT05GSUdfTVNET1NfRlM9bQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKKyMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU0xBQj15CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0VSUk9SUz15CitDT05GSUdfREVCVUdfTEw9eQorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uZXR3aW5kZXJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uZXR3aW5kZXJfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlODFhY2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL25ldHdpbmRlcl9kZWZjb25maWcKQEAgLTAsMCArMSwxMDQ2IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgorIyBTdW4gTWFyIDI3IDE1OjE4OjQyIDIwMDUKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCisjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GT09UQlJJREdFPXkKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorCisjCisjIEZvb3RicmlkZ2UgSW1wbGVtZW50YXRpb25zCisjCisjIENPTkZJR19BUkNIX0NBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QRVJTT05BTF9TRVJWRVIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMjg1X0FERElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTI4NV9IT1NUIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05FVFdJTkRFUj15CitDT05GSUdfRk9PVEJSSURHRT15CitDT05GSUdfRk9PVEJSSURHRV9IT1NUPXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1NBMTEwPXkKK0NPTkZJR19DUFVfMzJ2ND15CitDT05GSUdfQ1BVX0FCUlRfRVY0PXkKK0NPTkZJR19DUFVfQ0FDSEVfVjRXQj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQorQ09ORklHX0NQVV9UTEJfVjRXQj15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19JU0E9eQorQ09ORklHX0lTQV9ETUE9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKK0NPTkZJR19QQ0lfTkFNRVM9eQorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTPXkKKyMgQ09ORklHX0xFRFNfVElNRVIgaXMgbm90IHNldAorQ09ORklHX0xFRFNfQ1BVPXkKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJyb290PTB4MzAxIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfUEFSUE9SVD15CitDT05GSUdfUEFSUE9SVF9QQz15CisjIENPTkZJR19QQVJQT1JUX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUX1BDX0ZJRk8gaXMgbm90IHNldAorQ09ORklHX1BBUlBPUlRfUENfU1VQRVJJTz15CisjIENPTkZJR19QQVJQT1JUX0FSQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUX0dTQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUXzEyODQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfWEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFSSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCitDT05GSUdfSURFPXkKK0NPTkZJR19CTEtfREVWX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURJU0s9eQorQ09ORklHX0lERURJU0tfTVVMVElfTU9ERT15CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworQ09ORklHX0lERV9HRU5FUklDPXkKK0NPTkZJR19CTEtfREVWX0lERVBDST15CisjIENPTkZJR19JREVQQ0lfU0hBUkVfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TTDgyQzEwNT15CitDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BX0ZPUkNFRCBpcyBub3Qgc2V0CitDT05GSUdfSURFRE1BX1BDSV9BVVRPPXkKKyMgQ09ORklHX0lERURNQV9PTkxZRElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAorIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfQ0hJUFNFVFMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BPXkKKyMgQ09ORklHX0lERURNQV9JVkIgaXMgbm90IHNldAorQ09ORklHX0lERURNQV9BVVRPPXkKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX05FVExJTktfREVWPXkKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9UQ1BESUFHPXkKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQX05GX0NPTk5UUkFDSz15CisjIENPTkZJR19JUF9ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0ZUUD15CisjIENPTkZJR19JUF9ORl9JUkMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfVEZUUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9BTUFOREEgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1FVRVVFPXkKK0NPTkZJR19JUF9ORl9JUFRBQkxFUz15CisjIENPTkZJR19JUF9ORl9NQVRDSF9MSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX01BQyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX01BUksgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX1RPUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0RTQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0xFTkdUSCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9UVEwgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfVENQTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9TVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9DT05OVFJBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9GSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX05BVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQU5HTEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhFUlRBUCBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTEFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAorCisjCisjIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfTkVUX1RVTElQPXkKKyMgQ09ORklHX0RFMjEwNFggaXMgbm90IHNldAorQ09ORklHX1RVTElQPXkKKyMgQ09ORklHX1RVTElQX01XSSBpcyBub3Qgc2V0CitDT05GSUdfVFVMSVBfTU1JTz15CisjIENPTkZJR19UVUxJUF9OQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFNFg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTkJPTkRfODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTEwMiBpcyBub3Qgc2V0CisjIENPTkZJR19BVDE3MDAgaXMgbm90IHNldAorIyBDT05GSUdfREVQQ0EgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lTQSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15CisjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAorIyBDT05GSUdfQUMzMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUklDT1QgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUzg5eDAgaXMgbm90IHNldAorIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKK0NPTkZJR19ORTJLX1BDST15CisjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAorIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BMSVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1NFUklBTD15CisjIENPTkZJR19NT1VTRV9JTlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfTE9HSUJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BDMTEwUEFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorQ09ORklHX0lOUFVUX1VJTlBVVD15CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX0k4MDQyPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX1BBUktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF8yMTI4NSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKK0NPTkZJR19QUklOVEVSPXkKKyMgQ09ORklHX0xQX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfUFBERVYgaXMgbm90IHNldAorIyBDT05GSUdfVElQQVIgaXMgbm90IHNldAorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfMjEyODVfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHXzk3N19XQVRDSERPRz15CisKKyMKKyMgSVNBLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JWENPTVdEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVCBpcyBub3Qgc2V0CisKKyMKKyMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CitDT05GSUdfRFMxNjIwPXkKK0NPTkZJR19OV0JVVFRPTj15CitDT05GSUdfTldCVVRUT05fUkVCT09UPXkKK0NPTkZJR19OV0ZMQVNIPXkKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19SVEM9eQorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorQ09ORklHX0ZCX1NPRlRfQ1VSU09SPXkKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ1lCRVIyMDAwPXkKKyMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SQURFT05fT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19WR0FfQ09OU09MRT15CisjIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CitDT05GSUdfRk9OVFM9eQorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAorCisjCisjIExvZ28gY29uZmlndXJhdGlvbgorIworQ09ORklHX0xPR089eQorQ09ORklHX0xPR09fTElOVVhfTU9OTz15CitDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKK0NPTkZJR19TT1VORD15CisKKyMKKyMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisjCisjIENPTkZJR19TTkQgaXMgbm90IHNldAorCisjCisjIE9wZW4gU291bmQgU3lzdGVtCisjCitDT05GSUdfU09VTkRfUFJJTUU9eQorIyBDT05GSUdfU09VTkRfQlQ4NzggaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfQ01QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfRU1VMTBLMSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9GVVNJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfQ1M0MjgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0VTMTM3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9FUzEzNzEgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfRVNTU09MTzEgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfTUFFU1RSTyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9NQUVTVFJPMyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9JQ0ggaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfT1NTPXkKK0NPTkZJR19TT1VORF9UUkFDRUlOSVQ9eQorQ09ORklHX1NPVU5EX0RNQVA9eQorIyBDT05GSUdfU09VTkRfQUQxODE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0FEMTg4OSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9TR0FMQVhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0FETElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0FDSV9NSVhFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9DUzQyMzIgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfU1NDQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0dVUyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9WTUlESSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9UUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX01TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9NUFU0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfTUFEMTYgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfUEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1BTUyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9TQiBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9BV0UzMl9TWU5USCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9NQVVJIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9ZTTM4MTI9eQorIyBDT05GSUdfU09VTkRfT1BMM1NBMSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9PUEwzU0EyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1lNRlBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9VQVJUNjg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9BRURTUDE2IGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9XQVZFQVJUSVNUPXkKKyMgQ09ORklHX1NPVU5EX0FMSTU0NTUgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfRk9SVEUgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfUk1FOTZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9BRDE5ODAgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgWEZTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfQVVUT0ZTX0ZTPXkKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPXkKK0NPTkZJR19KT0xJRVQ9eQorIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX05GU0Q9eQorQ09ORklHX05GU0RfVjM9eQorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz15CisjIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE1PXkKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfREVCVUdfVVNFUj15CisjIENPTkZJR19ERUJVR19XQUlUUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworQ09ORklHX0NSWVBUTz15CisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTU4ZDkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2gyXzE2MTBfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTcxIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgorIyBTdW4gTWFyIDI3IDE3OjUyOjQxIDIwMDUKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorQ09ORklHX0FSQ0hfT01BUD15CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKworIworIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucworIworCisjCisjIE9NQVAgQ29yZSBUeXBlCisjCisjIENPTkZJR19BUkNIX09NQVA3MzAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQMTUxMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9PTUFQMTZYWD15CitDT05GSUdfQVJDSF9PTUFQX09URz15CisKKyMKKyMgT01BUCBCb2FyZCBUeXBlCisjCisjIENPTkZJR19NQUNIX09NQVBfSU5OT1ZBVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX09NQVBfSDI9eQorIyBDT05GSUdfTUFDSF9PTUFQX0gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT01BUF9INCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX09NQVBfT1NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT01BUF9HRU5FUklDIGlzIG5vdCBzZXQKKworIworIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucworIworQ09ORklHX09NQVBfTVVYPXkKKyMgQ09ORklHX09NQVBfTVVYX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX01VWF9XQVJOSU5HUz15CitDT05GSUdfT01BUF9NUFVfVElNRVI9eQorIyBDT05GSUdfT01BUF8zMktfVElNRVIgaXMgbm90IHNldAorQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDE9eQorIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX0FSTV8xOTJNSFo9eQorIyBDT05GSUdfT01BUF9BUk1fMTY4TUhaIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfQVJNXzEyME1IWiBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX0FSTV82ME1IWiBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX0FSTV8zME1IWiBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9BUk05MjZUPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAorCisjCisjIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19QUkVFTVBUPXkKKyMgQ09ORklHX0xFRFMgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9Im1lbT0zMk0gY29uc29sZT10dHlTMCwxMTUyMDBuOCByb290PTA4MDEgcm8gaW5pdD0vYmluL3NoIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisjIENPTkZJR19WRlAgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfQVBNIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRFJJVkVSPXkKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKK0NPTkZJR19NVERfREVCVUc9eQorQ09ORklHX01URF9ERUJVR19WRVJCT1NFPTMKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfQVRBX09WRVJfRVRIPW0KKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworIyBDT05GSUdfQkxLX0RFVl9TRCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSVBfVENQRElBRz15CisjIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKK0NPTkZJR19TTUM5MVg9eQorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD15CisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfUFBQX0FTWU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfQlNEQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBPRSBpcyBub3Qgc2V0CitDT05GSUdfU0xJUD15CitDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKKyMgQ09ORklHX1NMSVBfU01BUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUF9NT0RFX1NMSVA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CitDT05GSUdfSU5QVVRfRVZCVUc9eQorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTUlTQz15CitDT05GSUdfSU5QVVRfVUlOUFVUPXkKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKK0NPTkZJR19XQVRDSERPRz15CitDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgQWxnb3JpdGhtcworIworIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX0lTQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgU2Vuc29ycyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19TRU5TT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKK0NPTkZJR19JU1AxMzAxX09NQVA9eQorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZCX0NGQl9GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TT0ZUX0NVUlNPUiBpcyBub3Qgc2V0CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKK0NPTkZJR19GT05UUz15CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CisjIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCitDT05GSUdfTE9HTz15CisjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKK0NPTkZJR19TT1VORD15CisKKyMKKyMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisjCisjIENPTkZJR19TTkQgaXMgbm90IHNldAorCisjCisjIE9wZW4gU291bmQgU3lzdGVtCisjCitDT05GSUdfU09VTkRfUFJJTUU9eQorIyBDT05GSUdfU09VTkRfQlQ4NzggaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfRlVTSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0NTNDI4MSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9TT05JQ1ZJQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfTVNORENMQVMgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfTVNORFBJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfVFZNSVhFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9BRDE5ODAgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKK0NPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfT01BUD15CitDT05GSUdfVVNCX09NQVA9eQorIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9eQorQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorCisjCisjIFhGUyBzdXBwb3J0CisjCisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorQ09ORklHX1JPTUZTX0ZTPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MgorIyBDT05GSUdfSkZGUzJfRlNfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19OT1JfRUNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUFJFRU1QVD15CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19ERUJVR19VU0VSPXkKKyMgQ09ORklHX0RFQlVHX1dBSVRRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCitDT05GSUdfQ1JZUFRPPXkKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21uaW1ldGVyX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21uaW1ldGVyX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGZkYjRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbW5pbWV0ZXJfZGVmY29uZmlnCkBAIC0wLDAgKzEsODAzIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgorIyBTdW4gTWFyIDI3IDIxOjMxOjQ1IDIwMDUKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TQTExMDA9eQorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKworIworIyBTQTExeDAgSW1wbGVtZW50YXRpb25zCisjCisjIENPTkZJR19TQTExMDBfQVNTQUJFVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfQ0VSRiBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSDM2MDAgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0gzODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9CQURHRTQgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0pPUk5BREE3MjAgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0hBQ0tLSVQgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0xBUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX1BMRUIgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX1NIQU5OT04gaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX1NJTVBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfU1NQIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1NBMTEwMD15CitDT05GSUdfQ1BVXzMydjQ9eQorQ09ORklHX0NQVV9BQlJUX0VWND15CitDT05GSUdfQ1BVX0NBQ0hFX1Y0V0I9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0I9eQorQ09ORklHX0NQVV9NSU5JQ0FDSEU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworCisjCisjIEJ1cyBzdXBwb3J0CisjCitDT05GSUdfSVNBPXkKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCitDT05GSUdfUENDQVJEPXkKKyMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBPXkKKworIworIyBQQy1jYXJkIGJyaWRnZXMKKyMKK0NPTkZJR19JODIzNjU9eQorIyBDT05GSUdfVENJQyBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBX1NBMTEwMD15CitDT05GSUdfUENDQVJEX05PTlNUQVRJQz15CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19ESVNDT05USUdNRU09eQorIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0ia2VlcGluaXRyZCBtZW09MTZNIHJvb3Q9L2Rldi9yYW0gcmFtZGlzaz04MTkyIGluaXRyZD0weGQwMDAwMDAwLDRNIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCisjIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BOUCBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPW0KKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9OQkQ9bQorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCitDT05GSUdfSURFPXkKK0NPTkZJR19CTEtfREVWX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURJU0s9eQorIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFQ1MgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CisjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9DSElQU0VUUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKKyMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9UQ1BESUFHPXkKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTEFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAorIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworQ09ORklHX05FVF9SQURJTz15CisKKyMKKyMgT2Jzb2xldGUgV2lyZWxlc3MgY2FyZHMgc3VwcG9ydCAocHJlLTgwMi4xMSkKKyMKKyMgQ09ORklHX1NUUklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVkVMQU4gaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9XQVZFTEFOPXkKKyMgQ09ORklHX1BDTUNJQV9ORVRXQVZFIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyA4MDIuMTEgRnJlcXVlbmN5IEhvcHBpbmcgY2FyZHMgc3VwcG9ydAorIworIyBDT05GSUdfUENNQ0lBX1JBWUNTIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyA4MDIuMTFiIElTQS9QQ0kgY2FyZHMgc3VwcG9ydAorIworIyBDT05GSUdfSEVSTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyA4MDIuMTFiIFBjbWNpYS9DYXJkYnVzIGNhcmRzIHN1cHBvcnQKKyMKK0NPTkZJR19BSVJPX0NTPXkKK0NPTkZJR19QQ01DSUFfV0wzNTAxPXkKK0NPTkZJR19ORVRfV0lSRUxFU1M9eQorCisjCisjIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfTkVUX1BDTUNJQT15CitDT05GSUdfUENNQ0lBXzNDNTg5PXkKKyMgQ09ORklHX1BDTUNJQV8zQzU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfRk1WSjE4WCBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBX1BDTkVUPXkKKyMgQ09ORklHX1BDTUNJQV9OTUNMQU4gaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1NNQzkxQzkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9YSVJDMlBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9BWE5FVCBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfSU5QT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0xPR0lCTSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QQzExMFBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TQTExMDA9eQorQ09ORklHX1NFUklBTF9TQTExMDBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorCisjCisjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorQ09ORklHX0ZCX1NPRlRfQ1VSU09SPXkKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorQ09ORklHX0ZCX1NBMTEwMD15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKK0NPTkZJR19GT05UUz15CitDT05GSUdfRk9OVF84eDg9eQorIyBDT05GSUdfRk9OVF84eDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KQkQgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBYRlMgc3VwcG9ydAorIworIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGxlYl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3BsZWJfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZmVjODkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL3BsZWJfZGVmY29uZmlnCkBAIC0wLDAgKzEsNzQ5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgorIyBTdW4gTWFyIDI3IDIyOjAzOjAyIDIwMDUKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tPQkpFQ1RfVUVWRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CisjIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfVElOWV9TSE1FTT15CitDT05GSUdfQkFTRV9TTUFMTD0wCisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX01PRFBBUk09eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NBMTEwMD15CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorCisjCisjIFNBMTF4MCBJbXBsZW1lbnRhdGlvbnMKKyMKKyMgQ09ORklHX1NBMTEwMF9BU1NBQkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9DRVJGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9DT0xMSUUgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSDM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfTEFSVCBpcyBub3Qgc2V0CitDT05GSUdfU0ExMTAwX1BMRUI9eQorIyBDT05GSUdfU0ExMTAwX1NIQU5OT04gaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX1NJTVBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfU1NQIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1NBMTEwMD15CitDT05GSUdfQ1BVXzMydjQ9eQorQ09ORklHX0NQVV9BQlJUX0VWND15CitDT05GSUdfQ1BVX0NBQ0hFX1Y0V0I9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0I9eQorQ09ORklHX0NQVV9NSU5JQ0FDSEU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworCisjCisjIEJ1cyBzdXBwb3J0CisjCitDT05GSUdfSVNBPXkKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfRElTQ09OVElHTUVNPXkKKyMgQ09ORklHX0xFRFMgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0EwLDk2MDAgbWVtPTE2TUAweGMwMDAwMDAwIG1lbT0xNk1AMHhjODAwMDAwMCByb290PS9kZXYvcmFtIGluaXRyZD0weGMwNDAwMDAwLDRNIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCitDT05GSUdfQ1BVX0ZSRVE9eQorQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9TVEFUPXkKKyMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9eQorQ09ORklHX0NQVV9GUkVRX1NBMTEwMD15CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKK0NPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKK0NPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRD15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorQ09ORklHX01URF9TQTExMDA9eQorIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfWEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBBUkNuZXQgZGV2aWNlcworIworIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTEFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAorQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMTcwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVBDQSBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPQ0tFVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TQTExMDA9eQorQ09ORklHX1NFUklBTF9TQTExMDBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorCisjCisjIFhGUyBzdXBwb3J0CisjCisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9bQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz1tCitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX0RJUkVDVElPPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPW0KK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfU1VOUlBDPW0KKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3B4YTI1NS1pZHBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9weGEyNTUtaWRwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWMzMjc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9weGEyNTUtaWRwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDc5OSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKKyMgU3VuIE1hciAyNyAyMjoyMDoxNyAyMDA1CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19JT01BUD15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX01PRFBBUk09eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNT0QgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUFhBPXkKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisKKyMKKyMgSW50ZWwgUFhBMnh4IEltcGxlbWVudGF0aW9ucworIworIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1BYQV9JRFA9eQorIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAorQ09ORklHX1BYQTI1eD15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9YU0NBTEU9eQorQ09ORklHX0NQVV8zMnY1PXkKK0NPTkZJR19DUFVfQUJSVF9FVjVUPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX01JTklDQUNIRT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCisjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAorQ09ORklHX1hTQ0FMRV9QTVU9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0xFRFM9eQorQ09ORklHX0xFRFNfVElNRVI9eQorQ09ORklHX0xFRFNfQ1BVPXkKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIGlwPWRoY3AgY29uc29sZT10dHlTMCwxMTUyMDAgbWVtPTY0TSIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX05PU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9HRU9NRVRSWT15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0kxIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NIQVJQX1NMIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCitDT05GSUdfSURFPXkKK0NPTkZJR19CTEtfREVWX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURJU0s9eQorIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCisjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSVBfVENQRElBRz15CisjIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKK0NPTkZJR19TTUM5MVg9eQorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1BYQT15CitDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworQ09ORklHX0ZCPXkKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CitDT05GSUdfRkJfU09GVF9DVVJTT1I9eQorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CitDT05GSUdfRkJfUFhBPXkKKyMgQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorQ09ORklHX0ZPTlRTPXkKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKKyMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorCisjCisjIFhGUyBzdXBwb3J0CisjCisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCisjIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKKyMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0VSUk9SUz15CitDT05GSUdfREVCVUdfTEw9eQorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9ycGNfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9ycGNfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MTg0YzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL3JwY19kZWZjb25maWcKQEAgLTAsMCArMSw5MzkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMQorIyBXZWQgTWFyICA5IDE0OjQxOjQ4IDIwMDUKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKK0NPTkZJR19GSVE9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SUEM9eQorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0FDT1JOPXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX0FSTTYxMD15CitDT05GSUdfQ1BVX0FSTTcxMD15CitDT05GSUdfQ1BVX1NBMTEwPXkKK0NPTkZJR19DUFVfMzJ2Mz15CitDT05GSUdfQ1BVX0FCUlRfRVY0PXkKK0NPTkZJR19DUFVfQ0FDSEVfVjM9eQorQ09ORklHX0NQVV9DQUNIRV9WNFdCPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX0NPUFlfVjM9eQorQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQorQ09ORklHX0NQVV9UTEJfVjM9eQorQ09ORklHX0NQVV9UTEJfVjRXQj15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfVElNRVJfQUNPUk49eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBQQy1jYXJkIGJyaWRnZXMKKyMKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCisjIENPTkZJR19NVEQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1BBUlBPUlQ9eQorQ09ORklHX1BBUlBPUlRfUEM9eQorQ09ORklHX1BBUlBPUlRfUENfQ01MMT15CitDT05GSUdfUEFSUE9SVF9QQ19GSUZPPXkKKyMgQ09ORklHX1BBUlBPUlRfUENfU1VQRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUX0FSQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUX09USEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfMTI4NCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworQ09ORklHX0JMS19ERVZfRkQ9eQorIyBDT05GSUdfUEFSSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPW0KKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgQWNvcm4tc3BlY2lmaWMgYmxvY2sgZGV2aWNlcworIworCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKK0NPTkZJR19JREU9eQorQ09ORklHX0JMS19ERVZfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz15CitDT05GSUdfSURFRElTS19NVUxUSV9NT0RFPXkKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CitDT05GSUdfSURFX0FSTT15CitDT05GSUdfQkxLX0RFVl9JREVfSUNTSURFPXkKK0NPTkZJR19CTEtfREVWX0lERURNQV9JQ1M9eQorQ09ORklHX0lERURNQV9JQ1NfQVVUTz15CitDT05GSUdfQkxLX0RFVl9JREVfUkFQSURFPXkKK0NPTkZJR19CTEtfREVWX0lERURNQT15CisjIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKK0NPTkZJR19JREVETUFfQVVUTz15CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9bQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CitDT05GSUdfQ0hSX0RFVl9TRz15CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorQ09ORklHX1NDU0lfTE9HR0lORz15CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFBBPW0KK0NPTkZJR19TQ1NJX0lNTT1tCisjIENPTkZJR19TQ1NJX0laSVBfRVBQMTYgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JWklQX1NMT1dfQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NDU0lfQUNPUk5TQ1NJXzM9bQorQ09ORklHX1NDU0lfQUNPUk5TQ1NJX1RBR0dFRF9RVUVVRT15CitDT05GSUdfU0NTSV9BQ09STlNDU0lfU1lOQz15CitDT05GSUdfU0NTSV9BUlhFU0NTST1tCitDT05GSUdfU0NTSV9DVU1BTkFfMj1tCitDT05GSUdfU0NTSV9FRVNPWFNDU0k9bQorQ09ORklHX1NDU0lfUE9XRVJURUNTQ1NJPXkKKworIworIyBUaGUgZm9sbG93aW5nIGRyaXZlcnMgYXJlIG5vdCBmdWxseSBzdXBwb3J0ZWQKKyMKK0NPTkZJR19TQ1NJX0NVTUFOQV8xPW0KK0NPTkZJR19TQ1NJX09BSzE9bQorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRMSU5LX0RFVj15CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj1tCisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSEVSVEFQIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fRVRIRVIxPXkKK0NPTkZJR19BUk1fRVRIRVIzPXkKK0NPTkZJR19BUk1fRVRIRVJIPXkKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QTElQIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9BU1lOQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAorQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBJL08gZHJpdmVycworIworIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKK0NPTkZJR19TRVJJTz15CisjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0NUODJDNzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1BBUktCRCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fUlBDS0JEPXkKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CisjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKK0NPTkZJR19NT1VTRV9SSVNDUEM9eQorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MTYKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMXzgyNTBfQUNPUk49eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9NjQKK0NPTkZJR19QUklOVEVSPW0KKyMgQ09ORklHX0xQX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfUFBERVYgaXMgbm90IHNldAorIyBDT05GSUdfVElQQVIgaXMgbm90IHNldAorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCitDT05GSUdfSTJDX0FMR09CSVQ9eQorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX0lTQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgU2Vuc29ycyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19TRU5TT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9BQ09STj15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKK0NPTkZJR19GT05UUz15CisjIENPTkZJR19GT05UXzh4OCBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDE2PXkKKyMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF9BQ09STl84eDg9eQorIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPW0KKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKKyMgQ09ORklHX1NORCBpcyBub3Qgc2V0CisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKK0NPTkZJR19TT1VORF9QUklNRT1tCisjIENPTkZJR19TT1VORF9CVDg3OCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9GVVNJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfQ1M0MjgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1NPTklDVklCRVMgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9NU05EQ0xBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9NU05EUElOIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9PU1M9bQorIyBDT05GSUdfU09VTkRfVFJBQ0VJTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0RNQVAgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfQUQxODE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0FEMTg4OSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9TR0FMQVhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0FETElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0FDSV9NSVhFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9DUzQyMzIgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfU1NDQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0dVUyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9WTUlESSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9UUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX01TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9NUFU0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfTUFEMTYgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfUEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1BTUyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9TQiBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9BV0UzMl9TWU5USCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9XQVZFRlJPTlQgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfTUFVSSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9ZTTM4MTIgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfT1BMM1NBMSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9PUEwzU0EyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1VBUlQ2ODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0FFRFNQMTYgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX1ZJREM9bQorIyBDT05GSUdfU09VTkRfVFZNSVhFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9BRDE5ODAgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCisjIENPTkZJR19VU0IgaXMgbm90IHNldAorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorCisjCisjIFhGUyBzdXBwb3J0CisjCisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BVVRPRlM0X0ZTPW0KKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz15CitDT05GSUdfSk9MSUVUPXkKKyMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9bQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfQURGU19GUz15CisjIENPTkZJR19BREZTX0ZTX1JXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CisjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKK0NPTkZJR19BQ09STl9QQVJUSVRJT049eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OX0NVTUFOQSBpcyBub3Qgc2V0CisjIENPTkZJR19BQ09STl9QQVJUSVRJT05fRUVTT1ggaXMgbm90IHNldAorQ09ORklHX0FDT1JOX1BBUlRJVElPTl9JQ1M9eQorQ09ORklHX0FDT1JOX1BBUlRJVElPTl9BREZTPXkKK0NPTkZJR19BQ09STl9QQVJUSVRJT05fUE9XRVJURUM9eQorQ09ORklHX0FDT1JOX1BBUlRJVElPTl9SSVNDSVg9eQorQ09ORklHX09TRl9QQVJUSVRJT049eQorQ09ORklHX0FNSUdBX1BBUlRJVElPTj15CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01BQ19QQVJUSVRJT049eQorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfQlNEX0RJU0tMQUJFTD15CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTj15CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfU0dJX1BBUlRJVElPTj15CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TVU5fUEFSVElUSU9OPXkKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KK0NPTkZJR19OTFNfSVNPODg1OV8yPW0KK0NPTkZJR19OTFNfSVNPODg1OV8zPW0KK0NPTkZJR19OTFNfSVNPODg1OV80PW0KK0NPTkZJR19OTFNfSVNPODg1OV81PW0KK0NPTkZJR19OTFNfSVNPODg1OV82PW0KK0NPTkZJR19OTFNfSVNPODg1OV83PW0KK0NPTkZJR19OTFNfSVNPODg1OV85PW0KKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfS09JOF9SPW0KKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19ERUJVR19VU0VSPXkKKyMgQ09ORklHX0RFQlVHX1dBSVRRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zM2MyNDEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvczNjMjQxMF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE2M2ZiMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvczNjMjQxMF9kZWZjb25maWcKQEAgLTAsMCArMSw5NTQgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCisjIFN1biBNYXIgMjcgMTc6NDc6NDUgMjAwNQorIworQ09ORklHX0FSTT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CisjIENPTkZJR19DTEVBTl9DT01QSUxFIGlzIG5vdCBzZXQKK0NPTkZJR19CUk9LRU49eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TM0MyNDEwPXkKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKworIworIyBTM0MyNFhYIEltcGxlbWVudGF0aW9ucworIworQ09ORklHX0FSQ0hfQkFTVD15CitDT05GSUdfQVJDSF9IMTk0MD15CitDT05GSUdfTUFDSF9OMzA9eQorQ09ORklHX0FSQ0hfU01ESzI0MTA9eQorQ09ORklHX0FSQ0hfUzNDMjQ0MD15CitDT05GSUdfTUFDSF9WUjEwMDA9eQorQ09ORklHX01BQ0hfUlgzNzE1PXkKK0NPTkZJR19NQUNIX09UT009eQorQ09ORklHX01BQ0hfTkVYQ09ERVJfMjQ0MD15CitDT05GSUdfQ1BVX1MzQzI0MTA9eQorQ09ORklHX0NQVV9TM0MyNDQwPXkKKworIworIyBTM0MyNDEwIEJvb3QKKyMKKyMgQ09ORklHX1MzQzI0MTBfQk9PVF9XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgUzNDMjQxMCBTZXR1cAorIworQ09ORklHX1MzQzI0MTBfRE1BPXkKKyMgQ09ORklHX1MzQzI0MTBfRE1BX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MzQzI0MTBfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUzNDMjQxMF9QTV9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfUzNDMjQxMF9MT1dMRVZFTF9VQVJUX1BPUlQ9MAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfQVJNOTIwVD15CitDT05GSUdfQ1BVXzMydjQ9eQorQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQorQ09ORklHX0NQVV9DQUNIRV9WNFdUPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX0NPUFlfVjRXQj15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCisjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L2hkYTEgcm8gaW5pdD0vYmluL2Jhc2ggY29uc29sZT10dHlTQUMwIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CitDT05GSUdfQVBNPXkKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKK0NPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CitDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCitDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQ9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfUkVBRE9OTFkgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTY9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorQ09ORklHX01URF9DRklfQU1EU1REX1JFVFJZPTAKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorQ09ORklHX01URF9ST009eQorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9FREI3MzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0JBU1Q9eQorQ09ORklHX01URF9CQVNUX01BWFNJWkU9NAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19NVERfTkFORD15CisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CitDT05GSUdfTVREX05BTkRfUzNDMjQxMD15CisjIENPTkZJR19NVERfTkFORF9TM0MyNDEwX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1MzQzI0MTBfSFdFQ0MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19QQVJQT1JUPXkKKyMgQ09ORklHX1BBUlBPUlRfUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVF9BUkMgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVF9HU0MgaXMgbm90IHNldAorQ09ORklHX1BBUlBPUlRfMTI4ND15CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJJREUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19BVEFfT1ZFUl9FVEg9bQorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKK0NPTkZJR19JREU9eQorQ09ORklHX0JMS19ERVZfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz15CisjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorQ09ORklHX0JMS19ERVZfSURFVEFQRT1tCitDT05GSUdfQkxLX0RFVl9JREVGTE9QUFk9bQorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CisjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERV9CQVNUPXkKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSVBfVENQRElBRz15CisjIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CisjIENPTkZJR19NSUkgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BMSVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fUEFSS0JEIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKKyMgQ09ORklHX0NPTVBVVE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19ST0NLRVRQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NZQ0xBREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PWEFfSU5URUxMSU8gaXMgbm90IHNldAorIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5DTElOS01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0CisjIENPTkZJR19SSVNDT004IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TWCBpcyBub3Qgc2V0CisjIENPTkZJR19SSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBTERSViBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9OAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKK0NPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9NVUxUSVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1MzQzI0MTA9eQorQ09ORklHX1NFUklBTF9TM0MyNDEwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9CQVNUX1NJTz15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKK0NPTkZJR19QUklOVEVSPXkKKyMgQ09ORklHX0xQX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX1BQREVWPXkKKyMgQ09ORklHX1RJUEFSIGlzIG5vdCBzZXQKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TM0MyNDEwX1dBVENIRE9HPXkKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CitDT05GSUdfUzNDMjQxMF9SVEM9eQorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj1tCisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKK0NPTkZJR19JMkNfQUxHT0JJVD1tCisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfSVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfUzNDMjQxMD15CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgU2Vuc29ycyBDaGlwIHN1cHBvcnQKKyMKK0NPTkZJR19JMkNfU0VOU09SPW0KKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfTE03NT1tCisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfTE03OD1tCisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0xNODU9bQorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMgQ2hpcCBzdXBwb3J0CisjCitDT05GSUdfU0VOU09SU19FRVBST009bQorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZCX0NGQl9GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TT0ZUX0NVUlNPUiBpcyBub3Qgc2V0CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAorCisjCisjIExvZ28gY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgWEZTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlNfRlM9eQorQ09ORklHX0pGRlNfRlNfVkVSQk9TRT0wCisjIENPTkZJR19KRkZTX1BST0NfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCisjIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKKyMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19CU0RfRElTS0xBQkVMPXkKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OPXkKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfREVCVUdfVVNFUj15CisjIENPTkZJR19ERUJVR19XQUlUUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUzNDMjQxMF9QT1JUPXkKK0NPTkZJR19ERUJVR19TM0MyNDEwX1VBUlQ9MAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NoYW5ub25fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zaGFubm9uX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2ZhY2M0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zaGFubm9uX2RlZmNvbmZpZwpAQCAtMCwwICsxLDg3MiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKKyMgU3VuIE1hciAyNyAyMzoyNjo0NiAyMDA1CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19JT01BUD15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TQTExMDA9eQorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKworIworIyBTQTExeDAgSW1wbGVtZW50YXRpb25zCisjCisjIENPTkZJR19TQTExMDBfQVNTQUJFVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfQ0VSRiBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSDM2MDAgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0gzODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9CQURHRTQgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0pPUk5BREE3MjAgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0hBQ0tLSVQgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0xBUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX1BMRUIgaXMgbm90IHNldAorQ09ORklHX1NBMTEwMF9TSEFOTk9OPXkKKyMgQ09ORklHX1NBMTEwMF9TSU1QQUQgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX1NTUCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9TQTExMDA9eQorQ09ORklHX0NQVV8zMnY0PXkKK0NPTkZJR19DUFVfQUJSVF9FVjQ9eQorQ09ORklHX0NQVV9DQUNIRV9WNFdCPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX1RMQl9WNFdCPXkKK0NPTkZJR19DUFVfTUlOSUNBQ0hFPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKKworIworIyBCdXMgc3VwcG9ydAorIworQ09ORklHX0lTQT15CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworQ09ORklHX1BDQ0FSRD15CisjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQT15CisKKyMKKyMgUEMtY2FyZCBicmlkZ2VzCisjCisjIENPTkZJR19JODIzNjUgaXMgbm90IHNldAorIyBDT05GSUdfVENJQyBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBX1NBMTEwMD15CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19ESVNDT05USUdNRU09eQorIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQTAsOTYwMCBjb25zb2xlPXR0eTEgcm9vdD0vZGV2L210ZGJsb2NrMiBpbml0PS9saW51eHJjIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURF9SRVRSWT0wCisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfU0ExMTAwPXkKKyMgQ09ORklHX01URF9FREI3MzEyIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BOUCBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKK0NPTkZJR19JREU9bQorQ09ORklHX0JMS19ERVZfSURFPW0KKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVESVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCitDT05GSUdfSURFX0dFTkVSSUM9bQorIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfQ0hJUFNFVFMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAorIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CisjIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIEFSQ25ldCBkZXZpY2VzCisjCisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19MQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9SQUNBTCBpcyBub3Qgc2V0CisjIENPTkZJR19BVDE3MDAgaXMgbm90IHNldAorIyBDT05GSUdfREVQQ0EgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lTQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0NLRVQgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfTkVUX1BDTUNJQT15CisjIENPTkZJR19QQ01DSUFfM0M1ODkgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBXzNDNTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9GTVZKMThYIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUFfUENORVQ9eQorIyBDT05GSUdfUENNQ0lBX05NQ0xBTiBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBX1NNQzkxQzkyPXkKKyMgQ09ORklHX1BDTUNJQV9YSVJDMlBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9BWE5FVCBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfSU5QT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0xPR0lCTSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QQzExMFBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TQTExMDA9eQorQ09ORklHX1NFUklBTF9TQTExMDBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TQTExMDBfV0FUQ0hET0c9eQorCisjCisjIElTQS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVhDT01XRCBpcyBub3Qgc2V0CisjIENPTkZJR19XRFQgaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKworIworIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfRkI9eQorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKK0NPTkZJR19GQl9TT0ZUX0NVUlNPUj15CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TQTExMDA9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPXkKKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKKyMgQ09ORklHX1NORCBpcyBub3Qgc2V0CisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgWEZTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9eQorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorIyBDT05GSUdfSkZGUzJfRlNfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19OT1JfRUNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CisjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfREVCVUdfVVNFUj15CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zaGFya19kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ5YmNiYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTc0IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgorIyBTdW4gTWFyIDI3IDIzOjU5OjE0IDIwMDUKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorIyBDT05GSUdfQ0xFQU5fQ09NUElMRSBpcyBub3Qgc2V0CitDT05GSUdfQlJPS0VOPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NIQVJLPXkKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9TQTExMD15CitDT05GSUdfQ1BVXzMydjQ9eQorQ09ORklHX0NQVV9BQlJUX0VWND15CitDT05GSUdfQ1BVX0NBQ0hFX1Y0V0I9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKK0NPTkZJR19DUFVfVExCX1Y0V0I9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworCisjCisjIEJ1cyBzdXBwb3J0CisjCitDT05GSUdfSVNBPXkKK0NPTkZJR19JU0FfRE1BPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9IT1NUX1ZJQTgyQzUwNT15CitDT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKKyMgQ09ORklHX1BDSV9OQU1FUyBpcyBub3Qgc2V0CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0xFRFM9eQorQ09ORklHX0xFRFNfVElNRVI9eQorIyBDT05GSUdfTEVEU19DUFUgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKK0NPTkZJR19GUEVfRkFTVEZQRT15CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfUEFSUE9SVD15CitDT05GSUdfUEFSUE9SVF9QQz15CisjIENPTkZJR19QQVJQT1JUX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUX1BDX0ZJRk8gaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVF9QQ19TVVBFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfQVJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfR1NDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfMTI4NCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisjIENPTkZJR19QTlAgaXMgbm90IHNldAorCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9YRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJJREUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCitDT05GSUdfSURFPXkKK0NPTkZJR19CTEtfREVWX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURJU0s9eQorIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVGTE9QUFk9eQorIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCitDT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfQkxLX0RFVl9JREVQQ0kgaXMgbm90IHNldAorQ09ORklHX0lERV9BUk09eQorIyBDT05GSUdfSURFX0NISVBTRVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19TQ1NJPW0KK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD1tCitDT05GSUdfQ0hSX0RFVl9TVD1tCisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9bQorIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9bQorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzcwMDBGQVNTVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUhBMTUyWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FIQTE1NDIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ1BRRkNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFRDMzI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBX1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUFBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU1NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkNSNTNDNDA2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUEFTMTYgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QQ0kyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUENJMjIyMEkgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QU0kyNDBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDX0ZBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ19JU1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9RTEEyWFhYPW0KKyMgQ09ORklHX1NDU0lfUUxBMjFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQTIyWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEEyMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBMjMyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQTYzMTIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M0MTYgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9UMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfVTE0XzM0RiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JMk8gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19MQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9SQUNBTCBpcyBub3Qgc2V0CisKKyMKKyMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVDE3MDAgaXMgbm90IHNldAorIyBDT05GSUdfREVQQ0EgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lTQSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15CisjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAorIyBDT05GSUdfQUMzMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUklDT1QgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CitDT05GSUdfQ1M4OXgwPXkKKyMgQ09ORklHX0RHUlMgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAorIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BMSVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9JTlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfTE9HSUJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BDMTEwUEFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX0k4MDQyPXkKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUEFSS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CitDT05GSUdfUFJJTlRFUj1tCisjIENPTkZJR19MUF9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEFSIGlzIG5vdCBzZXQKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CitDT05GSUdfUlRDPXkKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfRkI9eQorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKK0NPTkZJR19GQl9TT0ZUX0NVUlNPUj15CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorQ09ORklHX0ZCX0NZQkVSMjAwMD15CisjIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAorIyBDT05GSUdfRkJfUkFERU9OX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAorIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorCisjCisjIExvZ28gY29uZmlndXJhdGlvbgorIworQ09ORklHX0xPR089eQorIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCitDT05GSUdfU09VTkQ9bQorCisjCisjIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQorIworIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKKworIworIyBPcGVuIFNvdW5kIFN5c3RlbQorIworQ09ORklHX1NPVU5EX1BSSU1FPW0KKyMgQ09ORklHX1NPVU5EX0JUODc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0NNUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0VNVTEwSzEgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfRlVTSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0NTNDI4MSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9FUzEzNzAgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfRVMxMzcxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0VTU1NPTE8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX01BRVNUUk8gaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfTUFFU1RSTzMgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfSUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1NPTklDVklCRVMgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9NU05EQ0xBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9NU05EUElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfT1NTPW0KKyMgQ09ORklHX1NPVU5EX1RSQUNFSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9ETUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0FEMTgxNiBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfU0dBTEFYWSBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfQURMSUI9bQorIyBDT05GSUdfU09VTkRfQUNJX01JWEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0NTNDIzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9TU0NBUEUgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfR1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1ZNSURJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1RSSVggaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX01QVTQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9OTTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9NQUQxNiBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QQVMgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfUFNTIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9TQj1tCisjIENPTkZJR19TT1VORF9BV0UzMl9TWU5USCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9XQVZFRlJPTlQgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfTUFVSSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9ZTTM4MTIgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfT1BMM1NBMSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9PUEwzU0EyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1lNRlBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9VQVJUNjg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9BRURTUDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0tBSExVQSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9BTEk1NDU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0ZPUlRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1JNRTk2WFggaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfQUQxOTgwIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgWEZTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CisjIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfREVWRlNfRlM9eQorQ09ORklHX0RFVkZTX01PVU5UPXkKKyMgQ09ORklHX0RFVkZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2ltcGFkX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2ltcGFkX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzczZWViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zaW1wYWRfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTY0IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgorIyBNb24gTWFyIDI4IDAwOjEwOjM2IDIwMDUKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSJvZTEiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX01PRFBBUk09eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NBMTEwMD15CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorCisjCisjIFNBMTF4MCBJbXBsZW1lbnRhdGlvbnMKKyMKKyMgQ09ORklHX1NBMTEwMF9BU1NBQkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9DRVJGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9DT0xMSUUgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSDM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfTEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfUExFQiBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfU0hBTk5PTiBpcyBub3Qgc2V0CitDT05GSUdfU0ExMTAwX1NJTVBBRD15CisjIENPTkZJR19TQTExMDBfU1NQIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1NBMTEwMD15CitDT05GSUdfQ1BVXzMydjQ9eQorQ09ORklHX0NQVV9BQlJUX0VWND15CitDT05GSUdfQ1BVX0NBQ0hFX1Y0V0I9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0I9eQorQ09ORklHX0NQVV9NSU5JQ0FDSEU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworCisjCisjIEJ1cyBzdXBwb3J0CisjCitDT05GSUdfSVNBPXkKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCitDT05GSUdfUENDQVJEPXkKKyMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBPXkKKworIworIyBQQy1jYXJkIGJyaWRnZXMKKyMKKyMgQ09ORklHX0k4MjM2NSBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0lDIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUFfU0ExMTAwPXkKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19ESVNDT05USUdNRU09eQorQ09ORklHX0xFRFM9eQorQ09ORklHX0xFRFNfVElNRVI9eQorIyBDT05GSUdfTEVEU19DUFUgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9Im10ZHBhcnRzPXNhMTEwMDo1MTJrKGJvb3QpLDFtKGtlcm5lbCksLShyb290KSBjb25zb2xlPXR0eVNBMCByb290PTFmMDIgbm9pbml0cmQgbWVtPTY0TSBqZmZzMl9vcnBoYW5lZF9pbm9kZXM9ZGVsZXRlIHJvb3Rmc3R5cGU9amZmczIiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz1tCisjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKK0NPTkZJR19BUE09eQorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj1tCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9KRURFQ1BST0JFPXkKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX05PU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9HRU9NRVRSWT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKKyMgQ09ORklHX01URF9DRklfSTIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKK0NPTkZJR19NVERfUkFNPXkKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorQ09ORklHX01URF9TQTExMDA9eQorIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lNUEE3IGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BOUCBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPW0KKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09bQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CitDT05GSUdfSVJEQT1tCisKKyMKKyMgSXJEQSBwcm90b2NvbHMKKyMKK0NPTkZJR19JUkxBTj1tCitDT05GSUdfSVJORVQ9bQorQ09ORklHX0lSQ09NTT1tCisjIENPTkZJR19JUkRBX1VMVFJBIGlzIG5vdCBzZXQKKworIworIyBJckRBIG9wdGlvbnMKKyMKKyMgQ09ORklHX0lSREFfQ0FDSEVfTEFTVF9MU0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREFfRkFTVF9SUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBJbmZyYXJlZC1wb3J0IGRldmljZSBkcml2ZXJzCisjCisKKyMKKyMgU0lSIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfSVJUVFlfU0lSPW0KKworIworIyBEb25nbGUgc3VwcG9ydAorIworIyBDT05GSUdfRE9OR0xFIGlzIG5vdCBzZXQKKworIworIyBPbGQgU0lSIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfSVJQT1JUX1NJUj1tCisKKyMKKyMgT2xkIFNlcmlhbCBkb25nbGUgc3VwcG9ydAorIworIyBDT05GSUdfRE9OR0xFX09MRCBpcyBub3Qgc2V0CisKKyMKKyMgRklSIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19OU0NfRklSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTkJPTkRfRklSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQ19JUkNDX0ZJUiBpcyBub3Qgc2V0CisjIENPTkZJR19BTElfRklSIGlzIG5vdCBzZXQKK0NPTkZJR19TQTExMDBfRklSPW0KK0NPTkZJR19CVD1tCitDT05GSUdfQlRfTDJDQVA9bQorQ09ORklHX0JUX1NDTz1tCitDT05GSUdfQlRfUkZDT01NPW0KK0NPTkZJR19CVF9SRkNPTU1fVFRZPXkKK0NPTkZJR19CVF9CTkVQPW0KK0NPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15CitDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQorIyBDT05GSUdfQlRfSElEUCBpcyBub3Qgc2V0CisKKyMKKyMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19CVF9IQ0lVQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSURUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlQzQyBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCTFVFQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCVFVBUlQgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9eQorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBBUkNuZXQgZGV2aWNlcworIworIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST1tCisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTEFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAorIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAorQ09ORklHX05FVF9QQ0k9eQorIyBDT05GSUdfQUMzMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUklDT1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1M4OXgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0NLRVQgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCitDT05GSUdfTkVUX1JBRElPPXkKKworIworIyBPYnNvbGV0ZSBXaXJlbGVzcyBjYXJkcyBzdXBwb3J0IChwcmUtODAyLjExKQorIworIyBDT05GSUdfU1RSSVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJMQU4gaXMgbm90IHNldAorIyBDT05GSUdfV0FWRUxBTiBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBX1dBVkVMQU49bQorIyBDT05GSUdfUENNQ0lBX05FVFdBVkUgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIDgwMi4xMSBGcmVxdWVuY3kgSG9wcGluZyBjYXJkcyBzdXBwb3J0CisjCisjIENPTkZJR19QQ01DSUFfUkFZQ1MgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIDgwMi4xMWIgSVNBL1BDSSBjYXJkcyBzdXBwb3J0CisjCisjIENPTkZJR19IRVJNRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIDgwMi4xMWIgUGNtY2lhL0NhcmRidXMgY2FyZHMgc3VwcG9ydAorIworIyBDT05GSUdfQUlST19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfV0wzNTAxIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfV0lSRUxFU1M9eQorCisjCisjIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfTkVUX1BDTUNJQT15CitDT05GSUdfUENNQ0lBXzNDNTg5PW0KK0NPTkZJR19QQ01DSUFfM0M1NzQ9bQorIyBDT05GSUdfUENNQ0lBX0ZNVkoxOFggaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9QQ05FVD1tCisjIENPTkZJR19QQ01DSUFfTk1DTEFOIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUFfU01DOTFDOTI9bQorQ09ORklHX1BDTUNJQV9YSVJDMlBTPW0KKyMgQ09ORklHX1BDTUNJQV9BWE5FVCBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KK0NPTkZJR19QUFBfTVVMVElMSU5LPXkKK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBPRT1tCisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9ODAwCitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NjAwCisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RTREVWPXkKK0NPTkZJR19JTlBVVF9UU0RFVl9TQ1JFRU5fWD04MDAKK0NPTkZJR19JTlBVVF9UU0RFVl9TQ1JFRU5fWT02MDAKK0NPTkZJR19JTlBVVF9FVkRFVj1tCitDT05GSUdfSU5QVVRfRVZCVUc9eQorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz1tCitDT05GSUdfU0VSSU9fU0VSUE9SVD1tCisjIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TQTExMDA9eQorQ09ORklHX1NFUklBTF9TQTExMDBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorCisjCisjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CisjIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU09GVF9DVVJTT1IgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPXkKKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKKyMgQ09ORklHX1NORCBpcyBub3Qgc2V0CisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz1tCisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPW0KK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0pCRD1tCisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9bQorQ09ORklHX1JFSVNFUkZTX0ZTPW0KKyMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19SRUlTRVJGU19QUk9DX0lORk89eQorIyBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBYRlMgc3VwcG9ydAorIworIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz1tCitDT05GSUdfTVNET1NfRlM9bQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX0RFVkZTX0ZTPXkKK0NPTkZJR19ERVZGU19NT1VOVD15CisjIENPTkZJR19ERVZGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGU19GUz1tCitDT05GSUdfSkZGU19GU19WRVJCT1NFPTAKKyMgQ09ORklHX0pGRlNfUFJPQ19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKKyMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPW0KKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPT1RfTkZTIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CitDT05GSUdfU01CX0ZTPW0KKyMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19ERUJVR19VU0VSPXkKKyMgQ09ORklHX0RFQlVHX1dBSVRRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NtZGsyNDEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc21kazI0MTBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNjA4NjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL3NtZGsyNDEwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDczNiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKKyMgU3VuIE1hciAyNyAyMjo0Mjo0MCAyMDA1CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19JT01BUD15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TM0MyNDEwPXkKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKworIworIyBTM0MyNFhYIEltcGxlbWVudGF0aW9ucworIworIyBDT05GSUdfQVJDSF9CQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDE5NDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9OMzAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU01ESzI0MTA9eQorIyBDT05GSUdfQVJDSF9TM0MyNDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfUlgzNzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT1RPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX05FWENPREVSXzI0NDAgaXMgbm90IHNldAorQ09ORklHX0NQVV9TM0MyNDEwPXkKKworIworIyBTM0MyNDEwIEJvb3QKKyMKKworIworIyBTM0MyNDEwIFNldHVwCisjCisjIENPTkZJR19TM0MyNDEwX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfUzNDMjQxMF9MT1dMRVZFTF9VQVJUX1BPUlQ9MAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfQVJNOTIwVD15CitDT05GSUdfQ1BVXzMydjQ9eQorQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQorQ09ORklHX0NQVV9DQUNIRV9WNFdUPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX0NPUFlfVjRXQj15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorCisjCisjIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9InJvb3Q9MWYwNCBtZW09MzJNIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCisjIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QQVJUSVRJT05TIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCisjIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfUzNDMjQxMD15CitDT05GSUdfU0VSSUFMX1MzQzI0MTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfUzNDMjQxMF9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorQ09ORklHX0ZCX1NPRlRfQ1VSU09SPXkKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorQ09ORklHX0ZCX1ZJUlRVQUw9eQorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorCisjCisjIExvZ28gY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorCisjCisjIFhGUyBzdXBwb3J0CisjCisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorQ09ORklHX1JPTUZTX0ZTPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CisjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1MzQzI0MTBfUE9SVD15CitDT05GSUdfREVCVUdfUzNDMjQxMF9VQVJUPTAKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKK0NPTkZJR19MSUJDUkMzMkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy92ZXJzYXRpbGVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy92ZXJzYXRpbGVfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MmYyYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL3ZlcnNhdGlsZV9kZWZjb25maWcKQEAgLTAsMCArMSw5MDIgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCisjIE1vbiBNYXIgMjggMDA6MjA6NTAgMjAwNQorIworQ09ORklHX0FSTT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1ZFUlNBVElMRT15CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKworIworIyBWZXJzYXRpbGUgcGxhdGZvcm0gdHlwZQorIworQ09ORklHX0FSQ0hfVkVSU0FUSUxFX1BCPXkKKyMgQ09ORklHX01BQ0hfVkVSU0FUSUxFX0FCIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX0FSTTkyNlQ9eQorQ09ORklHX0NQVV8zMnY1PXkKK0NPTkZJR19DUFVfQUJSVF9FVjVUSj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0CitDT05GSUdfSUNTVDMwNz15CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19BUk1fQU1CQT15CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0xFRFM9eQorQ09ORklHX0xFRFNfVElNRVI9eQorQ09ORklHX0xFRFNfQ1BVPXkKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJyb290PTFmMDMgbWVtPTMyTSIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfQVBNIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05GSUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SPXkKKyMgQ09ORklHX01URF9FREI3MzEyIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKK0NPTkZJR19TTUM5MVg9eQorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fQU1CQUtNST15CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPW0KK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CisjIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9NVUxUSVBPUlQ9eQorQ09ORklHX1NFUklBTF84MjUwX1JTQT15CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTAgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9BTUJBX1BMMDExPXkKK0NPTkZJR19TRVJJQUxfQU1CQV9QTDAxMV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTE2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0NIQVJERVY9bQorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCitDT05GSUdfSTJDX0FMR09CSVQ9eQorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX0lTQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgU2Vuc29ycyBDaGlwIHN1cHBvcnQKKyMKK0NPTkZJR19JMkNfU0VOU09SPW0KKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMgQ2hpcCBzdXBwb3J0CisjCitDT05GSUdfU0VOU09SU19FRVBST009bQorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworQ09ORklHX0ZCPXkKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CitDT05GSUdfRkJfU09GVF9DVVJTT1I9eQorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CitDT05GSUdfRkJfQVJNQ0xDRD15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKK0NPTkZJR19GT05UUz15CisjIENPTkZJR19GT05UXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzh4MTYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKK0NPTkZJR19GT05UX0FDT1JOXzh4OD15CisjIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPXkKKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKK0NPTkZJR19TTkQ9bQorQ09ORklHX1NORF9USU1FUj1tCitDT05GSUdfU05EX1BDTT1tCisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1M9bQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgR2VuZXJpYyBkZXZpY2VzCisjCisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorCisjCisjIEFMU0EgQVJNIGRldmljZXMKKyMKKworIworIyBPcGVuIFNvdW5kIFN5c3RlbQorIworIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0FSTU1NQ0k9bQorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorCisjCisjIFhGUyBzdXBwb3J0CisjCisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKK0NPTkZJR19ST01GU19GUz15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9bQorIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKKyMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD15CitDT05GSUdfTkZTRF9WMz15CisjIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz1tCitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9bQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfREVCVUdfVVNFUj15CisjIENPTkZJR19ERUJVR19XQUlUUSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRVJST1JTPXkKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdhNTZmZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQpAQCAtMCwwICsxLDM4IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgorIworCitBRkxBR1NfaGVhZC5vIDo9IC1EVEVYVEFERFI9JChURVhUQUREUikgLUREQVRBQUREUj0kKERBVEFBRERSKQorCisjIE9iamVjdCBmaWxlIGxpc3RzLgorCitvYmoteQkJOj0gYXJjaC5vIGNvbXBhdC5vIGRtYS5vIGVudHJ5LWFybXYubyBlbnRyeS1jb21tb24ubyBpcnEubyAgIFwKKwkJICAgcHJvY2Vzcy5vIHB0cmFjZS5vIHNlbWFwaG9yZS5vIHNldHVwLm8gc2lnbmFsLm8gc3lzX2FybS5vIFwKKwkJICAgdGltZS5vIHRyYXBzLm8KKworb2JqLSQoQ09ORklHX0FQTSkJCSs9IGFwbS5vCitvYmotJChDT05GSUdfQVJDSF9BQ09STikJKz0gZWNhcmQubyAKK29iai0kKENPTkZJR19GT09UQlJJREdFKQkrPSBpc2Eubworb2JqLSQoQ09ORklHX0ZJUSkJCSs9IGZpcS5vCitvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IGFybWtzeW1zLm8gbW9kdWxlLm8KK29iai0kKENPTkZJR19BUlRIVVIpCQkrPSBhcnRodXIubworb2JqLSQoQ09ORklHX0lTQV9ETUEpCQkrPSBkbWEtaXNhLm8KK29iai0kKENPTkZJR19QQ0kpCQkrPSBiaW9zMzIubworb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCisKK29iai0kKENPTkZJR19JV01NWFQpCQkrPSBpd21teHQubworQUZMQUdTX2l3bW14dC5vCQkJOj0gLVdhLC1tY3B1PWl3bW14dAorCitpZm5lcSAoJChDT05GSUdfQVJDSF9FQlNBMTEwKSx5KQorICBvYmoteQkJKz0gaW8ubworZW5kaWYKKworaGVhZC15CQkJOj0gaGVhZC5vCitvYmotJChDT05GSUdfREVCVUdfTEwpCSs9IGRlYnVnLm8KKworZXh0cmEteSA6PSAkKGhlYWQteSkgaW5pdF90YXNrLm8gdm1saW51eC5sZHMKKworIyBTcGVsbCBvdXQgc29tZSBkZXBlbmRlbmNpZXMgdGhhdCBhcmVuJ3QgYXV0b21hdGljYWxseSBmaWd1cmVkIG91dAorJChvYmopL2VudHJ5LWFybXYubzogCSQob2JqKS9lbnRyeS1oZWFkZXIuUyBpbmNsdWRlL2FzbS1hcm0vY29uc3RhbnRzLmgKKyQob2JqKS9lbnRyeS1jb21tb24ubzogCSQob2JqKS9lbnRyeS1oZWFkZXIuUyBpbmNsdWRlL2FzbS1hcm0vY29uc3RhbnRzLmggXAorCQkJJChvYmopL2NhbGxzLlMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9hcG0uYyBiL2FyY2gvYXJtL2tlcm5lbC9hcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGJiZDFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL2FwbS5jCkBAIC0wLDAgKzEsNjEwIEBACisvKgorICogYmlvcy1sZXNzIEFQTSBkcml2ZXIgZm9yIEFSTSBMaW51eCAKKyAqICBKYW1leSBIaWNrcyA8amFtZXlAY3JsLmRlYy5jb20+CisgKiAgYWRhcHRlZCBmcm9tIHRoZSBBUE0gQklPUyBkcml2ZXIgZm9yIExpbnV4IGJ5IFN0ZXBoZW4gUm90aHdlbGwgKHNmckBsaW51eGNhcmUuY29tKQorICoKKyAqIEFQTSAxLjIgUmVmZXJlbmNlOgorICogICBJbnRlbCBDb3Jwb3JhdGlvbiwgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50CisgKiAgIChBUE0pIEJJT1MgSW50ZXJmYWNlIFNwZWNpZmljYXRpb24sIFJldmlzaW9uIDEuMiwgRmVicnVhcnkgMTk5Ni4KKyAqCisgKiBbVGhpcyBkb2N1bWVudCBpcyBhdmFpbGFibGUgZnJvbSBNaWNyb3NvZnQgYXQ6CisgKiAgICBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vaHdkZXYvYnVzYmlvcy9hbXBfMTIuaHRtXQorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYXBtX2Jpb3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisKKyNpbmNsdWRlIDxhc20vYXBtLmg+IC8qIGFwbV9wb3dlcl9pbmZvICovCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisvKgorICogVGhlIGFwbV9iaW9zIGRldmljZSBpcyBvbmUgb2YgdGhlIG1pc2MgY2hhciBkZXZpY2VzLgorICogVGhpcyBpcyBpdHMgbWlub3IgbnVtYmVyLgorICovCisjZGVmaW5lIEFQTV9NSU5PUl9ERVYJMTM0CisKKy8qCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9Db25maWcuaGVscCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKyAqCisgKiBWYXJpb3VzIG9wdGlvbnMgY2FuIGJlIGNoYW5nZWQgYXQgYm9vdCB0aW1lIGFzIGZvbGxvd3M6CisgKiAoV2UgYWxsb3cgdW5kZXJzY29yZXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgbW9kdWxlcyBjb2RlKQorICoJYXBtPW9uL29mZgkJCWVuYWJsZS9kaXNhYmxlIEFQTQorICovCisKKy8qCisgKiBNYXhpbXVtIG51bWJlciBvZiBldmVudHMgc3RvcmVkCisgKi8KKyNkZWZpbmUgQVBNX01BWF9FVkVOVFMJCTE2CisKK3N0cnVjdCBhcG1fcXVldWUgeworCXVuc2lnbmVkIGludAkJZXZlbnRfaGVhZDsKKwl1bnNpZ25lZCBpbnQJCWV2ZW50X3RhaWw7CisJYXBtX2V2ZW50X3QJCWV2ZW50c1tBUE1fTUFYX0VWRU5UU107Cit9OworCisvKgorICogVGhlIHBlci1maWxlIEFQTSBkYXRhCisgKi8KK3N0cnVjdCBhcG1fdXNlciB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCisJdW5zaWduZWQgaW50CQlzdXNlcjogMTsKKwl1bnNpZ25lZCBpbnQJCXdyaXRlcjogMTsKKwl1bnNpZ25lZCBpbnQJCXJlYWRlcjogMTsKKworCWludAkJCXN1c3BlbmRfcmVzdWx0OworCXVuc2lnbmVkIGludAkJc3VzcGVuZF9zdGF0ZTsKKyNkZWZpbmUgU1VTUEVORF9OT05FCTAJCS8qIG5vIHN1c3BlbmQgcGVuZGluZyAqLworI2RlZmluZSBTVVNQRU5EX1BFTkRJTkcJMQkJLyogc3VzcGVuZCBwZW5kaW5nIHJlYWQgKi8KKyNkZWZpbmUgU1VTUEVORF9SRUFECTIJCS8qIHN1c3BlbmQgcmVhZCwgcGVuZGluZyBhY2sgKi8KKyNkZWZpbmUgU1VTUEVORF9BQ0tFRAkzCQkvKiBzdXNwZW5kIGFja2VkICovCisjZGVmaW5lIFNVU1BFTkRfRE9ORQk0CQkvKiBzdXNwZW5kIGNvbXBsZXRlZCAqLworCisJc3RydWN0IGFwbV9xdWV1ZQlxdWV1ZTsKK307CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXMKKyAqLworc3RhdGljIGludCBzdXNwZW5kc19wZW5kaW5nOworc3RhdGljIGludCBhcG1fZGlzYWJsZWQ7CisKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChhcG1fd2FpdHF1ZXVlKTsKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChhcG1fc3VzcGVuZF93YWl0cXVldWUpOworCisvKgorICogVGhpcyBpcyBhIGxpc3Qgb2YgZXZlcnlvbmUgd2hvIGhhcyBvcGVuZWQgL2Rldi9hcG1fYmlvcworICovCitzdGF0aWMgREVDTEFSRV9SV1NFTSh1c2VyX2xpc3RfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKGFwbV91c2VyX2xpc3QpOworCisvKgorICoga2FwbWQgaW5mby4gIGthcG1kIHByb3ZpZGVzIHVzIGEgcHJvY2VzcyBjb250ZXh0IHRvIGhhbmRsZQorICogIkFQTSIgZXZlbnRzIHdpdGhpbiAtIHNwZWNpZmljYWxseSBuZWNlc3NhcnkgaWYgd2UncmUgZ29pbmcKKyAqIHRvIGJlIHN1c3BlbmRpbmcgdGhlIHN5c3RlbS4KKyAqLworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGthcG1kX3dhaXQpOworc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihrYXBtZF9leGl0KTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soa2FwbWRfcXVldWVfbG9jayk7CitzdGF0aWMgc3RydWN0IGFwbV9xdWV1ZSBrYXBtZF9xdWV1ZTsKKworCitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfdmVyc2lvbltdID0gIjEuMTMiOwkvKiBubyBzcGFjZXMgKi8KKworCisKKy8qCisgKiBDb21wYXRpYmlsaXR5IGNydWZ0IHVudGlsIHRoZSBJUEFRIHBlb3BsZSBtb3ZlIG92ZXIgdG8gdGhlIG5ldworICogaW50ZXJmYWNlLgorICovCitzdGF0aWMgdm9pZCBfX2FwbV9nZXRfcG93ZXJfc3RhdHVzKHN0cnVjdCBhcG1fcG93ZXJfaW5mbyAqaW5mbykKK3sKK30KKworLyoKKyAqIFRoaXMgYWxsb3dzIG1hY2hpbmVzIHRvIHByb3ZpZGUgdGhlaXIgb3duICJhcG0gZ2V0IHBvd2VyIHN0YXR1cyIgZnVuY3Rpb24uCisgKi8KK3ZvaWQgKCphcG1fZ2V0X3Bvd2VyX3N0YXR1cykoc3RydWN0IGFwbV9wb3dlcl9pbmZvICopID0gX19hcG1fZ2V0X3Bvd2VyX3N0YXR1czsKK0VYUE9SVF9TWU1CT0woYXBtX2dldF9wb3dlcl9zdGF0dXMpOworCisKKy8qCisgKiBBUE0gZXZlbnQgcXVldWUgbWFuYWdlbWVudC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcXVldWVfZW1wdHkoc3RydWN0IGFwbV9xdWV1ZSAqcSkKK3sKKwlyZXR1cm4gcS0+ZXZlbnRfaGVhZCA9PSBxLT5ldmVudF90YWlsOworfQorCitzdGF0aWMgaW5saW5lIGFwbV9ldmVudF90IHF1ZXVlX2dldF9ldmVudChzdHJ1Y3QgYXBtX3F1ZXVlICpxKQoreworCXEtPmV2ZW50X3RhaWwgPSAocS0+ZXZlbnRfdGFpbCArIDEpICUgQVBNX01BWF9FVkVOVFM7CisJcmV0dXJuIHEtPmV2ZW50c1txLT5ldmVudF90YWlsXTsKK30KKworc3RhdGljIHZvaWQgcXVldWVfYWRkX2V2ZW50KHN0cnVjdCBhcG1fcXVldWUgKnEsIGFwbV9ldmVudF90IGV2ZW50KQoreworCXEtPmV2ZW50X2hlYWQgPSAocS0+ZXZlbnRfaGVhZCArIDEpICUgQVBNX01BWF9FVkVOVFM7CisJaWYgKHEtPmV2ZW50X2hlYWQgPT0gcS0+ZXZlbnRfdGFpbCkgeworCQlzdGF0aWMgaW50IG5vdGlmaWVkOworCisJCWlmIChub3RpZmllZCsrID09IDApCisJCSAgICBwcmludGsoS0VSTl9FUlIgImFwbTogYW4gZXZlbnQgcXVldWUgb3ZlcmZsb3dlZFxuIik7CisJCXEtPmV2ZW50X3RhaWwgPSAocS0+ZXZlbnRfdGFpbCArIDEpICUgQVBNX01BWF9FVkVOVFM7CisJfQorCXEtPmV2ZW50c1txLT5ldmVudF9oZWFkXSA9IGV2ZW50OworfQorCitzdGF0aWMgdm9pZCBxdWV1ZV9ldmVudF9vbmVfdXNlcihzdHJ1Y3QgYXBtX3VzZXIgKmFzLCBhcG1fZXZlbnRfdCBldmVudCkKK3sKKwlpZiAoYXMtPnN1c2VyICYmIGFzLT53cml0ZXIpIHsKKwkJc3dpdGNoIChldmVudCkgeworCQljYXNlIEFQTV9TWVNfU1VTUEVORDoKKwkJY2FzZSBBUE1fVVNFUl9TVVNQRU5EOgorCQkJLyoKKwkJCSAqIElmIHRoaXMgdXNlciBhbHJlYWR5IGhhcyBhIHN1c3BlbmQgcGVuZGluZywKKwkJCSAqIGRvbid0IHF1ZXVlIGFub3RoZXIgb25lLgorCQkJICovCisJCQlpZiAoYXMtPnN1c3BlbmRfc3RhdGUgIT0gU1VTUEVORF9OT05FKQorCQkJCXJldHVybjsKKworCQkJYXMtPnN1c3BlbmRfc3RhdGUgPSBTVVNQRU5EX1BFTkRJTkc7CisJCQlzdXNwZW5kc19wZW5kaW5nKys7CisJCQlicmVhazsKKwkJfQorCX0KKwlxdWV1ZV9hZGRfZXZlbnQoJmFzLT5xdWV1ZSwgZXZlbnQpOworfQorCitzdGF0aWMgdm9pZCBxdWV1ZV9ldmVudChhcG1fZXZlbnRfdCBldmVudCwgc3RydWN0IGFwbV91c2VyICpzZW5kZXIpCit7CisJc3RydWN0IGFwbV91c2VyICphczsKKworCWRvd25fcmVhZCgmdXNlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYXMsICZhcG1fdXNlcl9saXN0LCBsaXN0KSB7CisJCWlmIChhcyAhPSBzZW5kZXIgJiYgYXMtPnJlYWRlcikKKwkJCXF1ZXVlX2V2ZW50X29uZV91c2VyKGFzLCBldmVudCk7CisJfQorCXVwX3JlYWQoJnVzZXJfbGlzdF9sb2NrKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFwbV93YWl0cXVldWUpOworfQorCitzdGF0aWMgdm9pZCBhcG1fc3VzcGVuZCh2b2lkKQoreworCXN0cnVjdCBhcG1fdXNlciAqYXM7CisJaW50IGVyciA9IHBtX3N1c3BlbmQoUE1fU1VTUEVORF9NRU0pOworCisJLyoKKwkgKiBBbnlvbmUgb24gdGhlIEFQTSBxdWV1ZXMgd2lsbCB0aGluayB3ZSdyZSBzdGlsbCBzdXNwZW5kZWQuCisJICogU2VuZCBhIG1lc3NhZ2Ugc28gZXZlcnlvbmUga25vd3Mgd2UncmUgbm93IGF3YWtlIGFnYWluLgorCSAqLworCXF1ZXVlX2V2ZW50KEFQTV9OT1JNQUxfUkVTVU1FLCBOVUxMKTsKKworCS8qCisJICogRmluYWxseSwgd2FrZSB1cCBhbnlvbmUgd2hvIGlzIHNsZWVwaW5nIG9uIHRoZSBzdXNwZW5kLgorCSAqLworCWRvd25fcmVhZCgmdXNlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYXMsICZhcG1fdXNlcl9saXN0LCBsaXN0KSB7CisJCWFzLT5zdXNwZW5kX3Jlc3VsdCA9IGVycjsKKwkJYXMtPnN1c3BlbmRfc3RhdGUgPSBTVVNQRU5EX0RPTkU7CisJfQorCXVwX3JlYWQoJnVzZXJfbGlzdF9sb2NrKTsKKworCXdha2VfdXAoJmFwbV9zdXNwZW5kX3dhaXRxdWV1ZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFwbV9yZWFkKHN0cnVjdCBmaWxlICpmcCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGFwbV91c2VyICphcyA9IGZwLT5wcml2YXRlX2RhdGE7CisJYXBtX2V2ZW50X3QgZXZlbnQ7CisJaW50IGkgPSBjb3VudCwgcmV0ID0gMDsKKworCWlmIChjb3VudCA8IHNpemVvZihhcG1fZXZlbnRfdCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHF1ZXVlX2VtcHR5KCZhcy0+cXVldWUpICYmIGZwLT5mX2ZsYWdzICYgT19OT05CTE9DSykKKwkJcmV0dXJuIC1FQUdBSU47CisKKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYXBtX3dhaXRxdWV1ZSwgIXF1ZXVlX2VtcHR5KCZhcy0+cXVldWUpKTsKKworCXdoaWxlICgoaSA+PSBzaXplb2YoZXZlbnQpKSAmJiAhcXVldWVfZW1wdHkoJmFzLT5xdWV1ZSkpIHsKKwkJZXZlbnQgPSBxdWV1ZV9nZXRfZXZlbnQoJmFzLT5xdWV1ZSk7CisKKwkJcmV0ID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWYsICZldmVudCwgc2l6ZW9mKGV2ZW50KSkpCisJCQlicmVhazsKKworCQlpZiAoZXZlbnQgPT0gQVBNX1NZU19TVVNQRU5EIHx8IGV2ZW50ID09IEFQTV9VU0VSX1NVU1BFTkQpCisJCQlhcy0+c3VzcGVuZF9zdGF0ZSA9IFNVU1BFTkRfUkVBRDsKKworCQlidWYgKz0gc2l6ZW9mKGV2ZW50KTsKKwkJaSAtPSBzaXplb2YoZXZlbnQpOworCX0KKworCWlmIChpIDwgY291bnQpCisJCXJldCA9IGNvdW50IC0gaTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXBtX3BvbGwoc3RydWN0IGZpbGUgKmZwLCBwb2xsX3RhYmxlICogd2FpdCkKK3sKKwlzdHJ1Y3QgYXBtX3VzZXIgKmFzID0gZnAtPnByaXZhdGVfZGF0YTsKKworCXBvbGxfd2FpdChmcCwgJmFwbV93YWl0cXVldWUsIHdhaXQpOworCXJldHVybiBxdWV1ZV9lbXB0eSgmYXMtPnF1ZXVlKSA/IDAgOiBQT0xMSU4gfCBQT0xMUkROT1JNOworfQorCisvKgorICogYXBtX2lvY3RsIC0gaGFuZGxlIEFQTSBpb2N0bAorICoKKyAqIEFQTV9JT0NfU1VTUEVORAorICogICBUaGlzIElPQ1RMIGlzIG92ZXJsb2FkZWQsIGFuZCBwZXJmb3JtcyB0d28gZnVuY3Rpb25zLiAgSXQgaXMgdXNlZCB0bzoKKyAqICAgICAtIGluaXRpYXRlIGEgc3VzcGVuZAorICogICAgIC0gYWNrbm93bGVkZ2UgYSBzdXNwZW5kIHJlYWQgZnJvbSAvZGV2L2FwbV9iaW9zLgorICogICBPbmx5IHdoZW4gZXZlcnlvbmUgd2hvIGhhcyBvcGVuZWQgL2Rldi9hcG1fYmlvcyB3aXRoIHdyaXRlIHBlcm1pc3Npb24KKyAqICAgaGFzIGFja25vd2xlZGdlIGRvZXMgdGhlIGFjdHVhbCBzdXNwZW5kIGhhcHBlbi4KKyAqLworc3RhdGljIGludAorYXBtX2lvY3RsKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwgdV9pbnQgY21kLCB1X2xvbmcgYXJnKQoreworCXN0cnVjdCBhcG1fdXNlciAqYXMgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKworCWlmICghYXMtPnN1c2VyIHx8ICFhcy0+d3JpdGVyKQorCQlyZXR1cm4gLUVQRVJNOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEFQTV9JT0NfU1VTUEVORDoKKwkJYXMtPnN1c3BlbmRfcmVzdWx0ID0gLUVJTlRSOworCisJCWlmIChhcy0+c3VzcGVuZF9zdGF0ZSA9PSBTVVNQRU5EX1JFQUQpIHsKKwkJCS8qCisJCQkgKiBJZiB3ZSByZWFkIGEgc3VzcGVuZCBjb21tYW5kIGZyb20gL2Rldi9hcG1fYmlvcywKKwkJCSAqIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQVBNX0lPQ19TVVNQRU5EIGlvY3RsIGlzCisJCQkgKiBpbnRlcnByZXRlZCBhcyBhbiBhY2tub3dsZWRnZS4KKwkJCSAqLworCQkJYXMtPnN1c3BlbmRfc3RhdGUgPSBTVVNQRU5EX0FDS0VEOworCQkJc3VzcGVuZHNfcGVuZGluZy0tOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIE90aGVyd2lzZSBpdCBpcyBhIHJlcXVlc3QgdG8gc3VzcGVuZCB0aGUgc3lzdGVtLgorCQkJICogUXVldWUgYW4gZXZlbnQgZm9yIGFsbCByZWFkZXJzLCBhbmQgZXhwZWN0IGFuCisJCQkgKiBhY2tub3dsZWRnZSBmcm9tIGFsbCB3cml0ZXJzIHdobyBoYXZlbid0IGFscmVhZHkKKwkJCSAqIGFja25vd2xlZGdlZC4KKwkJCSAqLworCQkJcXVldWVfZXZlbnQoQVBNX1VTRVJfU1VTUEVORCwgYXMpOworCQl9CisKKwkJLyoKKwkJICogSWYgdGhlcmUgYXJlIG5vIGZ1cnRoZXIgYWNrbm93bGVkZ2VzIHJlcXVpcmVkLCBzdXNwZW5kCisJCSAqIHRoZSBzeXN0ZW0uCisJCSAqLworCQlpZiAoc3VzcGVuZHNfcGVuZGluZyA9PSAwKQorCQkJYXBtX3N1c3BlbmQoKTsKKworCQkvKgorCQkgKiBXYWl0IGZvciB0aGUgc3VzcGVuZC9yZXN1bWUgdG8gY29tcGxldGUuICBJZiB0aGVyZSBhcmUKKwkJICogcGVuZGluZyBhY2tub3dsZWRnZXMsIHdlIHdhaXQgaGVyZSBmb3IgdGhlbS4KKwkJICoKKwkJICogTm90ZSB0aGF0IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIFBNIHN1YnN5c3RlbSBkb2VzCisJCSAqIG5vdCBraWNrIHVzIG91dCBvZiB0aGUgd2FpdCB3aGVuIGl0IHN1c3BlbmRzIHRoZSB0aHJlYWRzLgorCQkgKi8KKwkJZmxhZ3MgPSBjdXJyZW50LT5mbGFnczsKKwkJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CisKKwkJLyoKKwkJICogTm90ZTogZG8gbm90IGFsbG93IGEgdGhyZWFkIHdoaWNoIGlzIGFja2luZyB0aGUgc3VzcGVuZAorCQkgKiB0byBlc2NhcGUgdW50aWwgdGhlIHJlc3VtZSBpcyBjb21wbGV0ZS4KKwkJICovCisJCWlmIChhcy0+c3VzcGVuZF9zdGF0ZSA9PSBTVVNQRU5EX0FDS0VEKQorCQkJd2FpdF9ldmVudChhcG1fc3VzcGVuZF93YWl0cXVldWUsCisJCQkJCSBhcy0+c3VzcGVuZF9zdGF0ZSA9PSBTVVNQRU5EX0RPTkUpOworCQllbHNlCisJCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYXBtX3N1c3BlbmRfd2FpdHF1ZXVlLAorCQkJCQkgYXMtPnN1c3BlbmRfc3RhdGUgPT0gU1VTUEVORF9ET05FKTsKKworCQljdXJyZW50LT5mbGFncyA9IGZsYWdzOworCQllcnIgPSBhcy0+c3VzcGVuZF9yZXN1bHQ7CisJCWFzLT5zdXNwZW5kX3N0YXRlID0gU1VTUEVORF9OT05FOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGFwbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJc3RydWN0IGFwbV91c2VyICphcyA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCisJZG93bl93cml0ZSgmdXNlcl9saXN0X2xvY2spOworCWxpc3RfZGVsKCZhcy0+bGlzdCk7CisJdXBfd3JpdGUoJnVzZXJfbGlzdF9sb2NrKTsKKworCS8qCisJICogV2UgYXJlIG5vdyB1bmhvb2tlZCBmcm9tIHRoZSBjaGFpbi4gIEFzIGZhciBhcyBuZXcKKwkgKiBldmVudHMgYXJlIGNvbmNlcm5lZCwgd2Ugbm8gbG9uZ2VyIGV4aXN0LiAgSG93ZXZlciwgd2UKKwkgKiBuZWVkIHRvIGJhbGFuY2Ugc3VzcGVuZHNfcGVuZGluZywgd2hpY2ggbWVhbnMgdGhlCisJICogcG9zc2liaWxpdHkgb2Ygc2xlZXBpbmcuCisJICovCisJaWYgKGFzLT5zdXNwZW5kX3N0YXRlICE9IFNVU1BFTkRfTk9ORSkgeworCQlzdXNwZW5kc19wZW5kaW5nIC09IDE7CisJCWlmIChzdXNwZW5kc19wZW5kaW5nID09IDApCisJCQlhcG1fc3VzcGVuZCgpOworCX0KKworCWtmcmVlKGFzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcG1fb3BlbihzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCXN0cnVjdCBhcG1fdXNlciAqYXM7CisKKwlhcyA9IChzdHJ1Y3QgYXBtX3VzZXIgKilrbWFsbG9jKHNpemVvZigqYXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYXMpIHsKKwkJbWVtc2V0KGFzLCAwLCBzaXplb2YoKmFzKSk7CisKKwkJLyoKKwkJICogWFhYIC0gdGhpcyBpcyBhIHRpbnkgYml0IGJyb2tlbiwgd2hlbiB3ZSBjb25zaWRlciBCU0QKKwkJICogcHJvY2VzcyBhY2NvdW50aW5nLiBJZiB0aGUgZGV2aWNlIGlzIG9wZW5lZCBieSByb290LCB3ZQorCQkgKiBpbnN0YW50bHkgZmxhZyB0aGF0IHdlIHVzZWQgc3VwZXJ1c2VyIHByaXZzLiBXaG8ga25vd3MsCisJCSAqIHdlIG1pZ2h0IGNsb3NlIHRoZSBkZXZpY2UgaW1tZWRpYXRlbHkgd2l0aG91dCBkb2luZyBhCisJCSAqIHByaXZpbGVnZWQgb3BlcmF0aW9uIC0tIGNldmFucworCQkgKi8KKwkJYXMtPnN1c2VyID0gY2FwYWJsZShDQVBfU1lTX0FETUlOKTsKKwkJYXMtPndyaXRlciA9IChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkgPT0gRk1PREVfV1JJVEU7CisJCWFzLT5yZWFkZXIgPSAoZmlscC0+Zl9tb2RlICYgRk1PREVfUkVBRCkgPT0gRk1PREVfUkVBRDsKKworCQlkb3duX3dyaXRlKCZ1c2VyX2xpc3RfbG9jayk7CisJCWxpc3RfYWRkKCZhcy0+bGlzdCwgJmFwbV91c2VyX2xpc3QpOworCQl1cF93cml0ZSgmdXNlcl9saXN0X2xvY2spOworCisJCWZpbHAtPnByaXZhdGVfZGF0YSA9IGFzOworCX0KKworCXJldHVybiBhcyA/IDAgOiAtRU5PTUVNOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhcG1fYmlvc19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucmVhZAkJPSBhcG1fcmVhZCwKKwkucG9sbAkJPSBhcG1fcG9sbCwKKwkuaW9jdGwJCT0gYXBtX2lvY3RsLAorCS5vcGVuCQk9IGFwbV9vcGVuLAorCS5yZWxlYXNlCT0gYXBtX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgYXBtX2RldmljZSA9IHsKKwkubWlub3IJCT0gQVBNX01JTk9SX0RFViwKKwkubmFtZQkJPSAiYXBtX2Jpb3MiLAorCS5mb3BzCQk9ICZhcG1fYmlvc19mb3BzCit9OworCisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworLyoKKyAqIEFyZ3VtZW50cywgd2l0aCBzeW1ib2xzIGZyb20gbGludXgvYXBtX2Jpb3MuaC4KKyAqCisgKiAgIDApIExpbnV4IGRyaXZlciB2ZXJzaW9uICh0aGlzIHdpbGwgY2hhbmdlIGlmIGZvcm1hdCBjaGFuZ2VzKQorICogICAxKSBBUE0gQklPUyBWZXJzaW9uLiAgVXN1YWxseSAxLjAsIDEuMSBvciAxLjIuCisgKiAgIDIpIEFQTSBmbGFncyBmcm9tIEFQTSBJbnN0YWxsYXRpb24gQ2hlY2sgKDB4MDApOgorICoJYml0IDA6IEFQTV8xNl9CSVRfU1VQUE9SVAorICoJYml0IDE6IEFQTV8zMl9CSVRfU1VQUE9SVAorICoJYml0IDI6IEFQTV9JRExFX1NMT1dTX0NMT0NLCisgKgliaXQgMzogQVBNX0JJT1NfRElTQUJMRUQKKyAqCWJpdCA0OiBBUE1fQklPU19ESVNFTkdBR0VECisgKiAgIDMpIEFDIGxpbmUgc3RhdHVzCisgKgkweDAwOiBPZmYtbGluZQorICoJMHgwMTogT24tbGluZQorICoJMHgwMjogT24gYmFja3VwIHBvd2VyIChCSU9TID49IDEuMSBvbmx5KQorICoJMHhmZjogVW5rbm93bgorICogICA0KSBCYXR0ZXJ5IHN0YXR1cworICoJMHgwMDogSGlnaAorICoJMHgwMTogTG93CisgKgkweDAyOiBDcml0aWNhbAorICoJMHgwMzogQ2hhcmdpbmcKKyAqCTB4MDQ6IFNlbGVjdGVkIGJhdHRlcnkgbm90IHByZXNlbnQgKEJJT1MgPj0gMS4yIG9ubHkpCisgKgkweGZmOiBVbmtub3duCisgKiAgIDUpIEJhdHRlcnkgZmxhZworICoJYml0IDA6IEhpZ2gKKyAqCWJpdCAxOiBMb3cKKyAqCWJpdCAyOiBDcml0aWNhbAorICoJYml0IDM6IENoYXJnaW5nCisgKgliaXQgNzogTm8gc3lzdGVtIGJhdHRlcnkKKyAqCTB4ZmY6IFVua25vd24KKyAqICAgNikgUmVtYWluaW5nIGJhdHRlcnkgbGlmZSAocGVyY2VudGFnZSBvZiBjaGFyZ2UpOgorICoJMC0xMDA6IHZhbGlkCisgKgktMTogVW5rbm93bgorICogICA3KSBSZW1haW5pbmcgYmF0dGVyeSBsaWZlICh0aW1lIHVuaXRzKToKKyAqCU51bWJlciBvZiByZW1haW5pbmcgbWludXRlcyBvciBzZWNvbmRzCisgKgktMTogVW5rbm93bgorICogICA4KSBtaW4gPSBtaW51dGVzOyBzZWMgPSBzZWNvbmRzCisgKi8KK3N0YXRpYyBpbnQgYXBtX2dldF9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBmcG9zLCBpbnQgbGVuZ3RoKQoreworCXN0cnVjdCBhcG1fcG93ZXJfaW5mbyBpbmZvOworCWNoYXIgKnVuaXRzOworCWludCByZXQ7CisKKwlpbmZvLmFjX2xpbmVfc3RhdHVzID0gMHhmZjsKKwlpbmZvLmJhdHRlcnlfc3RhdHVzID0gMHhmZjsKKwlpbmZvLmJhdHRlcnlfZmxhZyAgID0gMHhmZjsKKwlpbmZvLmJhdHRlcnlfbGlmZSAgID0gLTE7CisJaW5mby50aW1lCSAgICA9IC0xOworCWluZm8udW5pdHMJICAgID0gLTE7CisKKwlpZiAoYXBtX2dldF9wb3dlcl9zdGF0dXMpCisJCWFwbV9nZXRfcG93ZXJfc3RhdHVzKCZpbmZvKTsKKworCXN3aXRjaCAoaW5mby51bml0cykgeworCWRlZmF1bHQ6CXVuaXRzID0gIj8iOwlicmVhazsKKwljYXNlIDA6IAl1bml0cyA9ICJtaW4iOwlicmVhazsKKwljYXNlIDE6IAl1bml0cyA9ICJzZWMiOwlicmVhazsKKwl9CisKKwlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVzIDEuMiAweCUwMnggMHglMDJ4IDB4JTAyeCAweCUwMnggJWQlJSAlZCAlc1xuIiwKKwkJICAgICBkcml2ZXJfdmVyc2lvbiwgQVBNXzMyX0JJVF9TVVBQT1JULAorCQkgICAgIGluZm8uYWNfbGluZV9zdGF0dXMsIGluZm8uYmF0dGVyeV9zdGF0dXMsCisJCSAgICAgaW5mby5iYXR0ZXJ5X2ZsYWcsIGluZm8uYmF0dGVyeV9saWZlLAorCQkgICAgIGluZm8udGltZSwgdW5pdHMpOworCisgCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBrYXBtZCh2b2lkICphcmcpCit7CisJZGFlbW9uaXplKCJrYXBtZCIpOworCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFOworCisJZG8geworCQlhcG1fZXZlbnRfdCBldmVudDsKKworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoa2FwbWRfd2FpdCwKKwkJCQkhcXVldWVfZW1wdHkoJmthcG1kX3F1ZXVlKSB8fCAhcG1fYWN0aXZlKTsKKworCQlpZiAoIXBtX2FjdGl2ZSkKKwkJCWJyZWFrOworCisJCXNwaW5fbG9ja19pcnEoJmthcG1kX3F1ZXVlX2xvY2spOworCQlldmVudCA9IDA7CisJCWlmICghcXVldWVfZW1wdHkoJmthcG1kX3F1ZXVlKSkKKwkJCWV2ZW50ID0gcXVldWVfZ2V0X2V2ZW50KCZrYXBtZF9xdWV1ZSk7CisJCXNwaW5fdW5sb2NrX2lycSgma2FwbWRfcXVldWVfbG9jayk7CisKKwkJc3dpdGNoIChldmVudCkgeworCQljYXNlIDA6CisJCQlicmVhazsKKworCQljYXNlIEFQTV9MT1dfQkFUVEVSWToKKwkJY2FzZSBBUE1fUE9XRVJfU1RBVFVTX0NIQU5HRToKKwkJCXF1ZXVlX2V2ZW50KGV2ZW50LCBOVUxMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgQVBNX1VTRVJfU1VTUEVORDoKKwkJY2FzZSBBUE1fU1lTX1NVU1BFTkQ6CisJCQlxdWV1ZV9ldmVudChldmVudCwgTlVMTCk7CisJCQlpZiAoc3VzcGVuZHNfcGVuZGluZyA9PSAwKQorCQkJCWFwbV9zdXNwZW5kKCk7CisJCQlicmVhazsKKworCQljYXNlIEFQTV9DUklUSUNBTF9TVVNQRU5EOgorCQkJYXBtX3N1c3BlbmQoKTsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoMSk7CisKKwljb21wbGV0ZV9hbmRfZXhpdCgma2FwbWRfZXhpdCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFwbV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWlmIChhcG1fZGlzYWJsZWQpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJhcG06IGRpc2FibGVkIG9uIHVzZXIgcmVxdWVzdC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoUE1fSVNfQUNUSVZFKCkpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJhcG06IG92ZXJyaWRkZW4gYnkgQUNQSS5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwbV9hY3RpdmUgPSAxOworCisJcmV0ID0ga2VybmVsX3RocmVhZChrYXBtZCwgTlVMTCwgQ0xPTkVfS0VSTkVMKTsKKwlpZiAocmV0IDwgMCkgeworCQlwbV9hY3RpdmUgPSAwOworCQlyZXR1cm4gcmV0OworCX0KKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJY3JlYXRlX3Byb2NfaW5mb19lbnRyeSgiYXBtIiwgMCwgTlVMTCwgYXBtX2dldF9pbmZvKTsKKyNlbmRpZgorCisJcmV0ID0gbWlzY19yZWdpc3RlcigmYXBtX2RldmljZSk7CisJaWYgKHJldCAhPSAwKSB7CisJCXJlbW92ZV9wcm9jX2VudHJ5KCJhcG0iLCBOVUxMKTsKKworCQlwbV9hY3RpdmUgPSAwOworCQl3YWtlX3VwKCZrYXBtZF93YWl0KTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigma2FwbWRfZXhpdCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFwbV9leGl0KHZvaWQpCit7CisJbWlzY19kZXJlZ2lzdGVyKCZhcG1fZGV2aWNlKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiYXBtIiwgTlVMTCk7CisKKwlwbV9hY3RpdmUgPSAwOworCXdha2VfdXAoJmthcG1kX3dhaXQpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmthcG1kX2V4aXQpOworfQorCittb2R1bGVfaW5pdChhcG1faW5pdCk7Cittb2R1bGVfZXhpdChhcG1fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlN0ZXBoZW4gUm90aHdlbGwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjaWZuZGVmIE1PRFVMRQorc3RhdGljIGludCBfX2luaXQgYXBtX3NldHVwKGNoYXIgKnN0cikKK3sKKwl3aGlsZSAoKHN0ciAhPSBOVUxMKSAmJiAoKnN0ciAhPSAnXDAnKSkgeworCQlpZiAoc3RybmNtcChzdHIsICJvZmYiLCAzKSA9PSAwKQorCQkJYXBtX2Rpc2FibGVkID0gMTsKKwkJaWYgKHN0cm5jbXAoc3RyLCAib24iLCAyKSA9PSAwKQorCQkJYXBtX2Rpc2FibGVkID0gMDsKKwkJc3RyID0gc3RyY2hyKHN0ciwgJywnKTsKKwkJaWYgKHN0ciAhPSBOVUxMKQorCQkJc3RyICs9IHN0cnNwbihzdHIsICIsIFx0Iik7CisJfQorCXJldHVybiAxOworfQorCitfX3NldHVwKCJhcG09IiwgYXBtX3NldHVwKTsKKyNlbmRpZgorCisvKioKKyAqIGFwbV9xdWV1ZV9ldmVudCAtIHF1ZXVlIGFuIEFQTSBldmVudCBmb3Iga2FwbWQKKyAqIEBldmVudDogQVBNIGV2ZW50CisgKgorICogUXVldWUgYW4gQVBNIGV2ZW50IGZvciBrYXBtZCB0byBwcm9jZXNzIGFuZCB1bHRpbWF0ZWx5IHRha2UgdGhlCisgKiBhcHByb3ByaWF0ZSBhY3Rpb24uICBPbmx5IGEgc3Vic2V0IG9mIGV2ZW50cyBhcmUgaGFuZGxlZDoKKyAqICAgJUFQTV9MT1dfQkFUVEVSWQorICogICAlQVBNX1BPV0VSX1NUQVRVU19DSEFOR0UKKyAqICAgJUFQTV9VU0VSX1NVU1BFTkQKKyAqICAgJUFQTV9TWVNfU1VTUEVORAorICogICAlQVBNX0NSSVRJQ0FMX1NVU1BFTkQKKyAqLwordm9pZCBhcG1fcXVldWVfZXZlbnQoYXBtX2V2ZW50X3QgZXZlbnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZrYXBtZF9xdWV1ZV9sb2NrLCBmbGFncyk7CisJcXVldWVfYWRkX2V2ZW50KCZrYXBtZF9xdWV1ZSwgZXZlbnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmthcG1kX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgma2FwbWRfd2FpdCk7Cit9CitFWFBPUlRfU1lNQk9MKGFwbV9xdWV1ZV9ldmVudCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvYXJjaC5jIGIvYXJjaC9hcm0va2VybmVsL2FyY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTAyZmJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL2FyY2guYwpAQCAtMCwwICsxLDQ2IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9hcmNoLmMKKyAqCisgKiAgQXJjaGl0ZWN0dXJlIHNwZWNpZmljIGZpeHVwcy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2VsZi5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCit1bnNpZ25lZCBpbnQgdnJhbV9zaXplOworCisjaWZkZWYgQ09ORklHX0FSQ0hfQUNPUk4KKwordW5zaWduZWQgaW50IG1lbWNfY3RybF9yZWc7Cit1bnNpZ25lZCBpbnQgbnVtYmVyX21mbV9kcml2ZXM7CisKK3N0YXRpYyBpbnQgX19pbml0IHBhcnNlX3RhZ19hY29ybihjb25zdCBzdHJ1Y3QgdGFnICp0YWcpCit7CisJbWVtY19jdHJsX3JlZyA9IHRhZy0+dS5hY29ybi5tZW1jX2NvbnRyb2xfcmVnOworCW51bWJlcl9tZm1fZHJpdmVzID0gdGFnLT51LmFjb3JuLmFkZnNkcml2ZXM7CisKKwlzd2l0Y2ggKHRhZy0+dS5hY29ybi52cmFtX3BhZ2VzKSB7CisJY2FzZSA1MTI6CisJCXZyYW1fc2l6ZSArPSBQQUdFX1NJWkUgKiAyNTY7CisJY2FzZSAyNTY6CisJCXZyYW1fc2l6ZSArPSBQQUdFX1NJWkUgKiAyNTY7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorI2lmIDAKKwlpZiAodnJhbV9zaXplKSB7CisJCWRlc2MtPnZpZGVvX3N0YXJ0ID0gMHgwMjAwMDAwMDsKKwkJZGVzYy0+dmlkZW9fZW5kICAgPSAweDAyMDAwMDAwICsgdnJhbV9zaXplOworCX0KKyNlbmRpZgorCXJldHVybiAwOworfQorCitfX3RhZ3RhYmxlKEFUQUdfQUNPUk4sIHBhcnNlX3RhZ19hY29ybik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMgYi9hcmNoL2FybS9rZXJuZWwvYXJta3N5bXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzM4YmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisKKyNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworLyoKKyAqIGxpYmdjYyBmdW5jdGlvbnMgLSBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZQorICogY29tcGlsZXIuLi4gIChwcm90b3R5cGVzIGFyZSBub3QgY29ycmVjdCB0aG91Z2gsIGJ1dCB0aGF0CisgKiBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgc2luY2UgdGhleSdyZSBub3QgdmVyc2lvbmVkKS4KKyAqLworZXh0ZXJuIHZvaWQgX19hc2hsZGkzKHZvaWQpOworZXh0ZXJuIHZvaWQgX19hc2hyZGkzKHZvaWQpOworZXh0ZXJuIHZvaWQgX19kaXZzaTModm9pZCk7CitleHRlcm4gdm9pZCBfX2xzaHJkaTModm9pZCk7CitleHRlcm4gdm9pZCBfX21vZHNpMyh2b2lkKTsKK2V4dGVybiB2b2lkIF9fbXVsZGkzKHZvaWQpOworZXh0ZXJuIHZvaWQgX191Y21wZGkyKHZvaWQpOworZXh0ZXJuIHZvaWQgX191ZGl2ZGkzKHZvaWQpOworZXh0ZXJuIHZvaWQgX191bW9kZGkzKHZvaWQpOworZXh0ZXJuIHZvaWQgX191ZGl2bW9kZGk0KHZvaWQpOworZXh0ZXJuIHZvaWQgX191ZGl2c2kzKHZvaWQpOworZXh0ZXJuIHZvaWQgX191bW9kc2kzKHZvaWQpOworZXh0ZXJuIHZvaWQgX19kb19kaXY2NCh2b2lkKTsKKworZXh0ZXJuIHZvaWQgZnB1bmRlZmluc3RyKHZvaWQpOworZXh0ZXJuIHZvaWQgZnBfZW50ZXIodm9pZCk7CisKKy8qCisgKiBUaGlzIGhhcyBhIHNwZWNpYWwgY2FsbGluZyBjb252ZW50aW9uOyBpdCBkb2Vzbid0CisgKiBtb2RpZnkgYW55IG9mIHRoZSB1c3VhbCByZWdpc3RlcnMsIGV4Y2VwdCBmb3IgTFIuCisgKi8KKyNkZWZpbmUgRVhQT1JUX1NZTUJPTF9BTElBUyhzeW0sb3JpZykJCVwKKyBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCBfX2tzeW10YWJfIyNzeW0JXAorICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX2tzeW10YWIiKSkpID0JXAorICAgIHsgKHVuc2lnbmVkIGxvbmcpJm9yaWcsICNzeW0gfTsKKworLyoKKyAqIGZsb2F0aW5nIHBvaW50IG1hdGggZW11bGF0b3Igc3VwcG9ydC4KKyAqIFRoZXNlIHN5bWJvbHMgd2lsbCBuZXZlciBjaGFuZ2UgdGhlaXIgY2FsbGluZyBjb252ZW50aW9uLi4uCisgKi8KK0VYUE9SVF9TWU1CT0xfQUxJQVMoa2Vybl9mcF9lbnRlcixmcF9lbnRlcik7CitFWFBPUlRfU1lNQk9MX0FMSUFTKGZwX3ByaW50ayxwcmludGspOworRVhQT1JUX1NZTUJPTF9BTElBUyhmcF9zZW5kX3NpZyxzZW5kX3NpZyk7CisKK0VYUE9SVF9TWU1CT0woX19iYWNrdHJhY2UpOworCisJLyogcGxhdGZvcm0gZGVwZW5kZW50IHN1cHBvcnQgKi8KK0VYUE9SVF9TWU1CT0woX191ZGVsYXkpOworRVhQT1JUX1NZTUJPTChfX2NvbnN0X3VkZWxheSk7CisKKwkvKiBuZXR3b3JraW5nICovCitFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbCk7CitFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2spOworRVhQT1JUX1NZTUJPTChfX2NzdW1faXB2Nl9tYWdpYyk7CisKKwkvKiBpbyAqLworI2lmbmRlZiBfX3Jhd19yZWFkc2IKK0VYUE9SVF9TWU1CT0woX19yYXdfcmVhZHNiKTsKKyNlbmRpZgorI2lmbmRlZiBfX3Jhd19yZWFkc3cKK0VYUE9SVF9TWU1CT0woX19yYXdfcmVhZHN3KTsKKyNlbmRpZgorI2lmbmRlZiBfX3Jhd19yZWFkc2wKK0VYUE9SVF9TWU1CT0woX19yYXdfcmVhZHNsKTsKKyNlbmRpZgorI2lmbmRlZiBfX3Jhd193cml0ZXNiCitFWFBPUlRfU1lNQk9MKF9fcmF3X3dyaXRlc2IpOworI2VuZGlmCisjaWZuZGVmIF9fcmF3X3dyaXRlc3cKK0VYUE9SVF9TWU1CT0woX19yYXdfd3JpdGVzdyk7CisjZW5kaWYKKyNpZm5kZWYgX19yYXdfd3JpdGVzbAorRVhQT1JUX1NZTUJPTChfX3Jhd193cml0ZXNsKTsKKyNlbmRpZgorCisJLyogc3RyaW5nIC8gbWVtIGZ1bmN0aW9ucyAqLworRVhQT1JUX1NZTUJPTChzdHJjcHkpOworRVhQT1JUX1NZTUJPTChzdHJuY3B5KTsKK0VYUE9SVF9TWU1CT0woc3RyY2F0KTsKK0VYUE9SVF9TWU1CT0woc3RybmNhdCk7CitFWFBPUlRfU1lNQk9MKHN0cmNtcCk7CitFWFBPUlRfU1lNQk9MKHN0cm5jbXApOworRVhQT1JUX1NZTUJPTChzdHJjaHIpOworRVhQT1JUX1NZTUJPTChzdHJsZW4pOworRVhQT1JUX1NZTUJPTChzdHJubGVuKTsKK0VYUE9SVF9TWU1CT0woc3RycGJyayk7CitFWFBPUlRfU1lNQk9MKHN0cnJjaHIpOworRVhQT1JUX1NZTUJPTChzdHJzdHIpOworRVhQT1JUX1NZTUJPTChtZW1zZXQpOworRVhQT1JUX1NZTUJPTChtZW1jcHkpOworRVhQT1JUX1NZTUJPTChtZW1tb3ZlKTsKK0VYUE9SVF9TWU1CT0wobWVtY21wKTsKK0VYUE9SVF9TWU1CT0wobWVtc2Nhbik7CitFWFBPUlRfU1lNQk9MKG1lbWNocik7CitFWFBPUlRfU1lNQk9MKF9fbWVtemVybyk7CisKKwkvKiB1c2VyIG1lbSAoc2VnbWVudCkgKi8KK0VYUE9SVF9TWU1CT0woX19hcmNoX2NvcHlfZnJvbV91c2VyKTsKK0VYUE9SVF9TWU1CT0woX19hcmNoX2NvcHlfdG9fdXNlcik7CitFWFBPUlRfU1lNQk9MKF9fYXJjaF9jbGVhcl91c2VyKTsKK0VYUE9SVF9TWU1CT0woX19hcmNoX3N0cm5sZW5fdXNlcik7CitFWFBPUlRfU1lNQk9MKF9fYXJjaF9zdHJuY3B5X2Zyb21fdXNlcik7CisKK0VYUE9SVF9TWU1CT0woX19nZXRfdXNlcl8xKTsKK0VYUE9SVF9TWU1CT0woX19nZXRfdXNlcl8yKTsKK0VYUE9SVF9TWU1CT0woX19nZXRfdXNlcl80KTsKK0VYUE9SVF9TWU1CT0woX19nZXRfdXNlcl84KTsKKworRVhQT1JUX1NZTUJPTChfX3B1dF91c2VyXzEpOworRVhQT1JUX1NZTUJPTChfX3B1dF91c2VyXzIpOworRVhQT1JUX1NZTUJPTChfX3B1dF91c2VyXzQpOworRVhQT1JUX1NZTUJPTChfX3B1dF91c2VyXzgpOworCisJLyogZ2NjIGxpYiBmdW5jdGlvbnMgKi8KK0VYUE9SVF9TWU1CT0woX19hc2hsZGkzKTsKK0VYUE9SVF9TWU1CT0woX19hc2hyZGkzKTsKK0VYUE9SVF9TWU1CT0woX19kaXZzaTMpOworRVhQT1JUX1NZTUJPTChfX2xzaHJkaTMpOworRVhQT1JUX1NZTUJPTChfX21vZHNpMyk7CitFWFBPUlRfU1lNQk9MKF9fbXVsZGkzKTsKK0VYUE9SVF9TWU1CT0woX191Y21wZGkyKTsKK0VYUE9SVF9TWU1CT0woX191ZGl2ZGkzKTsKK0VYUE9SVF9TWU1CT0woX191bW9kZGkzKTsKK0VYUE9SVF9TWU1CT0woX191ZGl2bW9kZGk0KTsKK0VYUE9SVF9TWU1CT0woX191ZGl2c2kzKTsKK0VYUE9SVF9TWU1CT0woX191bW9kc2kzKTsKK0VYUE9SVF9TWU1CT0woX19kb19kaXY2NCk7CisKKwkvKiBiaXRvcHMgKi8KK0VYUE9SVF9TWU1CT0woX3NldF9iaXRfbGUpOworRVhQT1JUX1NZTUJPTChfdGVzdF9hbmRfc2V0X2JpdF9sZSk7CitFWFBPUlRfU1lNQk9MKF9jbGVhcl9iaXRfbGUpOworRVhQT1JUX1NZTUJPTChfdGVzdF9hbmRfY2xlYXJfYml0X2xlKTsKK0VYUE9SVF9TWU1CT0woX2NoYW5nZV9iaXRfbGUpOworRVhQT1JUX1NZTUJPTChfdGVzdF9hbmRfY2hhbmdlX2JpdF9sZSk7CitFWFBPUlRfU1lNQk9MKF9maW5kX2ZpcnN0X3plcm9fYml0X2xlKTsKK0VYUE9SVF9TWU1CT0woX2ZpbmRfbmV4dF96ZXJvX2JpdF9sZSk7CitFWFBPUlRfU1lNQk9MKF9maW5kX2ZpcnN0X2JpdF9sZSk7CitFWFBPUlRfU1lNQk9MKF9maW5kX25leHRfYml0X2xlKTsKKworI2lmZGVmIF9fQVJNRUJfXworRVhQT1JUX1NZTUJPTChfc2V0X2JpdF9iZSk7CitFWFBPUlRfU1lNQk9MKF90ZXN0X2FuZF9zZXRfYml0X2JlKTsKK0VYUE9SVF9TWU1CT0woX2NsZWFyX2JpdF9iZSk7CitFWFBPUlRfU1lNQk9MKF90ZXN0X2FuZF9jbGVhcl9iaXRfYmUpOworRVhQT1JUX1NZTUJPTChfY2hhbmdlX2JpdF9iZSk7CitFWFBPUlRfU1lNQk9MKF90ZXN0X2FuZF9jaGFuZ2VfYml0X2JlKTsKK0VYUE9SVF9TWU1CT0woX2ZpbmRfZmlyc3RfemVyb19iaXRfYmUpOworRVhQT1JUX1NZTUJPTChfZmluZF9uZXh0X3plcm9fYml0X2JlKTsKK0VYUE9SVF9TWU1CT0woX2ZpbmRfZmlyc3RfYml0X2JlKTsKK0VYUE9SVF9TWU1CT0woX2ZpbmRfbmV4dF9iaXRfYmUpOworI2VuZGlmCisKKwkvKiBzeXNjYWxscyAqLworRVhQT1JUX1NZTUJPTChzeXNfd3JpdGUpOworRVhQT1JUX1NZTUJPTChzeXNfcmVhZCk7CitFWFBPUlRfU1lNQk9MKHN5c19sc2Vlayk7CitFWFBPUlRfU1lNQk9MKHN5c19vcGVuKTsKK0VYUE9SVF9TWU1CT0woc3lzX2V4aXQpOworRVhQT1JUX1NZTUJPTChzeXNfd2FpdDQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2FydGh1ci5jIGIvYXJjaC9hcm0va2VybmVsL2FydGh1ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MThkYWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvYXJ0aHVyLmMKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvYXJ0aHVyLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxIFBoaWxpcCBCbHVuZGVsbAorICoKKyAqIEFydGh1ciBwZXJzb25hbGl0eQorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworLyogQXJ0aHVyIGRvZXNuJ3QgaGF2ZSBtYW55IHNpZ25hbHMsIGFuZCBhIGxvdCBvZiB0aG9zZSB0aGF0IGl0IGRvZXMKKyAgIGhhdmUgZG9uJ3QgbWFwIGVhc2lseSB0byBhbnkgTGludXggZXF1aXZhbGVudC4gIE5ldmVyIG1pbmQuICAqLworCisjZGVmaW5lIEFSVEhVUl9TSUdBQlJUCQkxCisjZGVmaW5lIEFSVEhVUl9TSUdGUEUJCTIKKyNkZWZpbmUgQVJUSFVSX1NJR0lMTAkJMworI2RlZmluZSBBUlRIVVJfU0lHSU5UCQk0CisjZGVmaW5lIEFSVEhVUl9TSUdTRUdWCQk1CisjZGVmaW5lIEFSVEhVUl9TSUdURVJNCQk2CisjZGVmaW5lIEFSVEhVUl9TSUdTVEFLCQk3CisjZGVmaW5lIEFSVEhVUl9TSUdVU1IxCQk4CisjZGVmaW5lIEFSVEhVUl9TSUdVU1IyCQk5CisjZGVmaW5lIEFSVEhVUl9TSUdPU0VSUk9SCTEwCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFydGh1cl90b19saW51eF9zaWduYWxzWzMyXSA9IHsKKwkwLAkxLAkyLAkzLAk0LAk1LAk2LAk3LAorCTgsCTksCTEwLAkxMSwJMTIsCTEzLAkxNCwJMTUsCisJMTYsCTE3LAkxOCwJMTksCTIwLAkyMSwJMjIsCTIzLAorCTI0LAkyNSwJMjYsCTI3LAkyOCwJMjksCTMwLAkzMQorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbGludXhfdG9fYXJ0aHVyX3NpZ25hbHNbMzJdID0geworCTAsCQktMSwJCUFSVEhVUl9TSUdJTlQsCS0xLAorICAgICAgIAlBUlRIVVJfU0lHSUxMLAk1LAkJQVJUSFVSX1NJR0FCUlQsCTcsCisJQVJUSFVSX1NJR0ZQRSwJOSwJCUFSVEhVUl9TSUdVU1IxLAlBUlRIVVJfU0lHU0VHViwJCisJQVJUSFVSX1NJR1VTUjIsCTEzLAkJMTQsCQlBUlRIVVJfU0lHVEVSTSwKKwkxNiwJCTE3LAkJMTgsCQkxOSwKKwkyMCwJCTIxLAkJMjIsCQkyMywKKwkyNCwJCTI1LAkJMjYsCQkyNywKKwkyOCwJCTI5LAkJMzAsCQkzMQorfTsKKworc3RhdGljIHZvaWQgYXJ0aHVyX2xjYWxsNyhpbnQgbnIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBzaWdpbmZvIGluZm87CisJaW5mby5zaV9zaWdubyA9IFNJR1NXSTsKKwlpbmZvLnNpX2Vycm5vID0gbnI7CisJLyogQm91bmNlIGl0IHRvIHRoZSBlbXVsYXRvciAqLworCXNlbmRfc2lnX2luZm8oU0lHU1dJLCAmaW5mbywgY3VycmVudCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXhlY19kb21haW4gYXJ0aHVyX2V4ZWNfZG9tYWluID0geworCS5uYW1lCQk9ICJBcnRodXIiLAorCS5oYW5kbGVyCT0gYXJ0aHVyX2xjYWxsNywKKwkucGVyc19sb3cJPSBQRVJfUklTQ09TLAorCS5wZXJzX2hpZ2gJPSBQRVJfUklTQ09TLAorCS5zaWduYWxfbWFwCT0gYXJ0aHVyX3RvX2xpbnV4X3NpZ25hbHMsCisJLnNpZ25hbF9pbnZtYXAJPSBsaW51eF90b19hcnRodXJfc2lnbmFscywKKwkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAorfTsKKworLyoKKyAqIFdlIGNvdWxkIGRvIHdpdGggc29tZSBsb2NraW5nIHRvIHN0b3AgQXJ0aHVyIGJlaW5nIHJlbW92ZWQgd2hpbGUKKyAqIHByb2Nlc3NlcyBhcmUgdXNpbmcgaXQuCisgKi8KKworc3RhdGljIGludCBfX2luaXQgYXJ0aHVyX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfZXhlY19kb21haW4oJmFydGh1cl9leGVjX2RvbWFpbik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhcnRodXJfZXhpdCh2b2lkKQoreworCXVucmVnaXN0ZXJfZXhlY19kb21haW4oJmFydGh1cl9leGVjX2RvbWFpbik7Cit9CisKK21vZHVsZV9pbml0KGFydGh1cl9pbml0KTsKK21vZHVsZV9leGl0KGFydGh1cl9leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlkNDMyNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMyBSdXNzZWxsIEtpbmcKKyAqICAgICAgICAgICAgICAgMjAwMS0yMDAyIEtlaXRoIE93ZW5zCisgKiAgICAgCisgKiBHZW5lcmF0ZSBkZWZpbml0aW9ucyBuZWVkZWQgYnkgYXNzZW1ibHkgbGFuZ3VhZ2UgbW9kdWxlcy4KKyAqIFRoaXMgY29kZSBnZW5lcmF0ZXMgcmF3IGFzbSBvdXRwdXQgd2hpY2ggaXMgcG9zdC1wcm9jZXNzZWQgdG8gZXh0cmFjdAorICogYW5kIGZvcm1hdCB0aGUgcmVxdWlyZWQgZGF0YS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCB0aGUgY29tcGlsZXIgYW5kIHRhcmdldCBhcmUgY29tcGF0aWJsZS4KKyAqLworI2lmIGRlZmluZWQoX19BUENTXzI2X18pCisjZXJyb3IgU29ycnksIHlvdXIgY29tcGlsZXIgdGFyZ2V0cyBBUENTLTI2IGJ1dCB0aGlzIGtlcm5lbCByZXF1aXJlcyBBUENTLTMyCisjZW5kaWYKKy8qCisgKiBHQ0MgMi45NS4xLCAyLjk1LjI6IGlnbm9yZXMgcmVnaXN0ZXIgY2xvYmJlciBsaXN0IGluIGFzbSgpLgorICogR0NDIDMuMCwgMy4xOiBnZW5lcmFsIGJhZCBjb2RlIGdlbmVyYXRpb24uCisgKiBHQ0MgMy4yLjA6IGluY29ycmVjdCBmdW5jdGlvbiBhcmd1bWVudCBvZmZzZXQgY2FsY3VsYXRpb24uCisgKiBHQ0MgMy4yLng6IG1pc2NvbXBpbGVzIE5FV19BVVhfRU5UIGluIGZzL2JpbmZtdF9lbGYuYworICogICAgICAgICAgICAoaHR0cDovL2djYy5nbnUub3JnL1BSODg5NikgYW5kIGluY29ycmVjdCBzdHJ1Y3R1cmUKKyAqCSAgICAgIGluaXRpYWxpc2F0aW9uIGluIGZzL2pmZnMyL2VyYXNlLmMKKyAqLworI2lmIF9fR05VQ19fIDwgMiB8fCBcCisgICAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDk1KSB8fCBcCisgICAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA9PSA5NSAmJiBfX0dOVUNfUEFUQ0hMRVZFTF9fICE9IDAgJiYgXAorCQkJCQkgICAgIF9fR05VQ19QQVRDSExFVkVMX18gPCAzKSB8fCBcCisgICAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8IDMpCisjZXJyb3IgWW91ciBjb21waWxlciBpcyB0b28gYnVnZ3k7IGl0IGlzIGtub3duIHRvIG1pc2NvbXBpbGUga2VybmVscy4KKyNlcnJvciAgICBLbm93biBnb29kIGNvbXBpbGVyczogMi45NS4zLCAyLjk1LjQsIDIuOTYsIDMuMworI2VuZGlmCisKKy8qIFVzZSBtYXJrZXIgaWYgeW91IG5lZWQgdG8gc2VwYXJhdGUgdGhlIHZhbHVlcyBsYXRlciAqLworCisjZGVmaW5lIERFRklORShzeW0sIHZhbCkgXAorICAgICAgICBhc20gdm9sYXRpbGUoIlxuLT4iICNzeW0gIiAlMCAiICN2YWwgOiA6ICJpIiAodmFsKSkKKworI2RlZmluZSBCTEFOSygpIGFzbSB2b2xhdGlsZSgiXG4tPiIgOiA6ICkKKworaW50IG1haW4odm9pZCkKK3sKKyAgREVGSU5FKFRTS19BQ1RJVkVfTU0sCQlvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIGFjdGl2ZV9tbSkpOworICBCTEFOSygpOworICBERUZJTkUoVElfRkxBR1MsCQlvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIGZsYWdzKSk7CisgIERFRklORShUSV9QUkVFTVBULAkJb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBwcmVlbXB0X2NvdW50KSk7CisgIERFRklORShUSV9BRERSX0xJTUlULAkJb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBhZGRyX2xpbWl0KSk7CisgIERFRklORShUSV9UQVNLLAkJb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCB0YXNrKSk7CisgIERFRklORShUSV9FWEVDX0RPTUFJTiwJb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBleGVjX2RvbWFpbikpOworICBERUZJTkUoVElfQ1BVLAkJb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBjcHUpKTsKKyAgREVGSU5FKFRJX0NQVV9ET01BSU4sCQlvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIGNwdV9kb21haW4pKTsKKyAgREVGSU5FKFRJX0NQVV9TQVZFLAkJb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBjcHVfY29udGV4dCkpOworICBERUZJTkUoVElfVVNFRF9DUCwJCW9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgdXNlZF9jcCkpOworICBERUZJTkUoVElfVFBfVkFMVUUsCQlvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHRwX3ZhbHVlKSk7CisgIERFRklORShUSV9GUFNUQVRFLAkJb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBmcHN0YXRlKSk7CisgIERFRklORShUSV9WRlBTVEFURSwJCW9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgdmZwc3RhdGUpKTsKKyAgREVGSU5FKFRJX0lXTU1YVF9TVEFURSwJKG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgZnBzdGF0ZSkrNCkmfjcpOworICBCTEFOSygpOworI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA2CisgIERFRklORShNTV9DT05URVhUX0lELAkJb2Zmc2V0b2Yoc3RydWN0IG1tX3N0cnVjdCwgY29udGV4dC5pZCkpOworICBCTEFOSygpOworI2VuZGlmCisgIERFRklORShWTUFfVk1fTU0sCQlvZmZzZXRvZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QsIHZtX21tKSk7CisgIERFRklORShWTUFfVk1fRkxBR1MsCQlvZmZzZXRvZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QsIHZtX2ZsYWdzKSk7CisgIEJMQU5LKCk7CisgIERFRklORShWTV9FWEVDLAkgICAgICAgCVZNX0VYRUMpOworICBCTEFOSygpOworICBERUZJTkUoUEFHRV9TWiwJICAgICAgIAlQQUdFX1NJWkUpOworICBERUZJTkUoVklSVF9PRkZTRVQsCQlQQUdFX09GRlNFVCk7CisgIEJMQU5LKCk7CisgIERFRklORShTWVNfRVJST1IwLAkJMHg5ZjAwMDApOworICBCTEFOSygpOworICBERUZJTkUoU0laRU9GX01BQ0hJTkVfREVTQywJc2l6ZW9mKHN0cnVjdCBtYWNoaW5lX2Rlc2MpKTsKKyAgcmV0dXJuIDA7IAorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jIGIvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMjZlOTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvYmlvczMyLmMKQEAgLTAsMCArMSw2OTkgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jCisgKgorICogIFBDSSBiaW9zLXR5cGUgaW5pdGlhbGlzYXRpb24gZm9yIFBDSSBtYWNoaW5lcworICoKKyAqICBCaXRzIHRha2VuIGZyb20gdmFyaW91cyBwbGFjZXMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KKworc3RhdGljIGludCBkZWJ1Z19wY2k7CitzdGF0aWMgaW50IHVzZV9maXJtd2FyZTsKKworLyoKKyAqIFdlIGNhbid0IHVzZSBwY2lfZmluZF9kZXZpY2UoKSBoZXJlIHNpbmNlIHdlIGFyZQorICogY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK3N0YXRpYyB2b2lkIHBjaWJpb3NfYnVzX3JlcG9ydF9zdGF0dXMoc3RydWN0IHBjaV9idXMgKmJ1cywgdV9pbnQgc3RhdHVzX21hc2ssIGludCB3YXJuKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJdTE2IHN0YXR1czsKKworCQkvKgorCQkgKiBpZ25vcmUgaG9zdCBicmlkZ2UgLSB3ZSBoYW5kbGUKKwkJICogdGhhdCBzZXBhcmF0ZWx5CisJCSAqLworCQlpZiAoZGV2LT5idXMtPm51bWJlciA9PSAwICYmIGRldi0+ZGV2Zm4gPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX1NUQVRVUywgJnN0YXR1cyk7CisJCWlmIChzdGF0dXMgPT0gMHhmZmZmKQorCQkJY29udGludWU7CisKKwkJaWYgKChzdGF0dXMgJiBzdGF0dXNfbWFzaykgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qIGNsZWFyIHRoZSBzdGF0dXMgZXJyb3JzICovCisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9TVEFUVVMsIHN0YXR1cyAmIHN0YXR1c19tYXNrKTsKKworCQlpZiAod2FybikKKwkJCXByaW50aygiKCVzOiAlMDRYKSAiLCBwY2lfbmFtZShkZXYpLCBzdGF0dXMpOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkKKwkJaWYgKGRldi0+c3Vib3JkaW5hdGUpCisJCQlwY2liaW9zX2J1c19yZXBvcnRfc3RhdHVzKGRldi0+c3Vib3JkaW5hdGUsIHN0YXR1c19tYXNrLCB3YXJuKTsKK30KKwordm9pZCBwY2liaW9zX3JlcG9ydF9zdGF0dXModV9pbnQgc3RhdHVzX21hc2ssIGludCB3YXJuKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmw7CisKKwlsaXN0X2Zvcl9lYWNoKGwsICZwY2lfcm9vdF9idXNlcykgeworCQlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gcGNpX2J1c19iKGwpOworCisJCXBjaWJpb3NfYnVzX3JlcG9ydF9zdGF0dXMoYnVzLCBzdGF0dXNfbWFzaywgd2Fybik7CisJfQorfQorCisvKgorICogV2UgZG9uJ3QgdXNlIHRoaXMgdG8gZml4IHRoZSBkZXZpY2UsIGJ1dCBpbml0aWFsaXNhdGlvbiBvZiBpdC4KKyAqIEl0J3Mgbm90IHRoZSBjb3JyZWN0IHVzZSBmb3IgdGhpcywgYnV0IGl0IHdvcmtzLgorICogTm90ZSB0aGF0IHRoZSBhcmJpdGVyL0lTQSBicmlkZ2UgYXBwZWFycyB0byBiZSBidWdneSwgc3BlY2lmaWNhbGx5IGluCisgKiB0aGUgZm9sbG93aW5nIGFyZWE6CisgKiAxLiBwYXJrIG9uIENQVQorICogMi4gSVNBIGJyaWRnZSBwaW5nLXBvbmcKKyAqIDMuIElTQSBicmlkZ2UgbWFzdGVyIGhhbmRsaW5nIG9mIHRhcmdldCBSRVRSWQorICoKKyAqIEJ1ZyAzIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgc291bmQgRE1BIGdyaW5kaW5nIHRvIGEgaGFsdC4gIFdlIG5vdworICogbGl2ZSB3aXRoIGJ1ZyAyLgorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcGNpX2ZpeHVwXzgzYzU1MyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCS8qCisJICogU2V0IG1lbW9yeSByZWdpb24gdG8gc3RhcnQgYXQgYWRkcmVzcyAwLCBhbmQgZW5hYmxlIElPCisJICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9CQVNFX0FERFJFU1NfMCwgUENJX0JBU0VfQUREUkVTU19TUEFDRV9NRU1PUlkpOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBQQ0lfQ09NTUFORF9JTyk7CisKKwlkZXYtPnJlc291cmNlWzBdLmVuZCAtPSBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OworCWRldi0+cmVzb3VyY2VbMF0uc3RhcnQgPSAwOworCisJLyoKKwkgKiBBbGwgbWVtb3J5IHJlcXVlc3RzIGZyb20gSVNBIHRvIGJlIGNoYW5uZWxsZWQgdG8gUENJCisJICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg0OCwgMHhmZik7CisKKwkvKgorCSAqIEVuYWJsZSBwaW5nLXBvbmcgb24gYnVzIG1hc3RlciB0byBJU0EgYnJpZGdlIHRyYW5zYWN0aW9ucy4KKwkgKiBUaGlzIGltcHJvdmVzIHRoZSBzb3VuZCBETUEgc3Vic3RhbnRpYWxseS4gIFRoZSBmaXhlZAorCSAqIHByaW9yaXR5IGFyYml0ZXIgYWxzbyBoZWxwcyAoc2VlIGJlbG93KS4KKwkgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDQyLCAweDAxKTsKKworCS8qCisJICogRW5hYmxlIFBDSSByZXRyeQorCSAqLworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NDAsIDB4MjIpOworCisJLyoKKwkgKiBXZSB1c2VkIHRvIHNldCB0aGUgYXJiaXRlciB0byAicGFyayBvbiBsYXN0IG1hc3RlciIgKGJpdAorCSAqIDEgc2V0KSwgYnV0IHVuZm9ydHVuYXRlbHkgdGhlIEN5YmVyUHJvIGRvZXMgbm90IHBhcmsgdGhlCisJICogYnVzLiAgV2UgbXVzdCB0aGVyZWZvcmUgcGFyayBvbiBDUFUuICBVbmZvcnR1bmF0ZWx5LCB0aGlzCisJICogbWF5IHRyaWdnZXIgeWV0IGFub3RoZXIgYnVnIGluIHRoZSA1NTMuCisJICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4MywgMHgwMik7CisKKwkvKgorCSAqIE1ha2UgdGhlIElTQSBETUEgcmVxdWVzdCBsb3dlc3QgcHJpb3JpdHksIGFuZCBkaXNhYmxlCisJICogcm90YXRpbmcgcHJpb3JpdGllcyBjb21wbGV0ZWx5LgorCSAqLworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4ODAsIDB4MTEpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4ODEsIDB4MDApOworCisJLyoKKwkgKiBSb3V0ZSBJTlRBIGlucHV0IHRvIElSUSAxMSwgYW5kIHNldCBJUlExMSB0byBiZSBsZXZlbAorCSAqIHNlbnNpdGl2ZS4KKwkgKi8KKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCAweDQ0LCAweGIwMDApOworCW91dGIoMHgwOCwgMHg0ZDEpOworfQorREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfV0lOQk9ORCwgUENJX0RFVklDRV9JRF9XSU5CT05EXzgzQzU1MywgcGNpX2ZpeHVwXzgzYzU1Myk7CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY2lfZml4dXBfdW5hc3NpZ24oc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlkZXYtPnJlc291cmNlWzBdLmVuZCAtPSBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OworCWRldi0+cmVzb3VyY2VbMF0uc3RhcnQgPSAwOworfQorREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfV0lOQk9ORDIsIFBDSV9ERVZJQ0VfSURfV0lOQk9ORDJfODlDOTQwRiwgcGNpX2ZpeHVwX3VuYXNzaWduKTsKKworLyoKKyAqIFByZXZlbnQgdGhlIFBDSSBsYXllciBmcm9tIHNlZWluZyB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCB0byB0aGlzIGRldmljZQorICogaWYgaXQgaXMgdGhlIGhvc3QgYnJpZGdlIGJ5IG1hcmtpbmcgaXQgYXMgc3VjaC4gIFRoZXNlIHJlc291cmNlcyBhcmUgb2YKKyAqIG5vIGNvbnNlcXVlbmNlIHRvIHRoZSBQQ0kgbGF5ZXIgKHRoZXkgYXJlIGhhbmRsZWQgZWxzZXdoZXJlKS4KKyAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaV9maXh1cF9kZWMyMTI4NShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCBpOworCisJaWYgKGRldi0+ZGV2Zm4gPT0gMCkgeworCQlkZXYtPmNsYXNzICY9IDB4ZmY7CisJCWRldi0+Y2xhc3MgfD0gUENJX0NMQVNTX0JSSURHRV9IT1NUIDw8IDg7CisJCWZvciAoaSA9IDA7IGkgPCBQQ0lfTlVNX1JFU09VUkNFUzsgaSsrKSB7CisJCQlkZXYtPnJlc291cmNlW2ldLnN0YXJ0ID0gMDsKKwkJCWRldi0+cmVzb3VyY2VbaV0uZW5kICAgPSAwOworCQkJZGV2LT5yZXNvdXJjZVtpXS5mbGFncyA9IDA7CisJCX0KKwl9Cit9CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9ERUMsIFBDSV9ERVZJQ0VfSURfREVDXzIxMjg1LCBwY2lfZml4dXBfZGVjMjEyODUpOworCisvKgorICogU2FtZSBhcyBhYm92ZS4gVGhlIFByUE1DODAwIGNhcnJpZXIgYm9hcmQgZm9yIHRoZSBQclBNQzExMDAgCisgKiBjYXJkIG1hcHMgdGhlIGhvc3QtYnJpZGdlIEAgMDA6MDE6MDAgZm9yIHNvbWUgcmVhc29uIGFuZCBpdAorICogZW5kcyB1cCBnZXR0aW5nIHNjYW5uZWQuIE5vdGUgdGhhdCB3ZSBvbmx5IHdhbnQgdG8gZG8gdGhpcworICogZml4dXAgd2hlbiB3ZSBmaW5kIHRoZSBJWFA0eHggb24gYSBQclBNQyBzeXN0ZW0sIHdoaWNoIGlzIHdoeQorICogd2UgY2hlY2sgdGhlIG1hY2hpbmUgdHlwZS4gV2UgY291bGQgYmUgcnVubmluZyBvbiBhIGJvYXJkCisgKiB3aXRoIGFuIElYUDR4eCB0YXJnZXQgZGV2aWNlIGFuZCB3ZSBkb24ndCB3YW50IHRvIGtpbGwgdGhlCisgKiByZXNvdXJjZXMgaW4gdGhhdCBjYXNlLgorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcGNpX2ZpeHVwX3BycG1jMTEwMChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCBpOworCisJaWYgKG1hY2hpbmVfaXNfcHJwbWMxMTAwKCkpIHsKKwkJZGV2LT5jbGFzcyAmPSAweGZmOworCQlkZXYtPmNsYXNzIHw9IFBDSV9DTEFTU19CUklER0VfSE9TVCA8PCA4OworCQlmb3IgKGkgPSAwOyBpIDwgUENJX05VTV9SRVNPVVJDRVM7IGkrKykgeworCQkJZGV2LT5yZXNvdXJjZVtpXS5zdGFydCA9IDA7CisJCQlkZXYtPnJlc291cmNlW2ldLmVuZCAgID0gMDsKKwkJCWRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgPSAwOworCQl9CisJfQorfQorREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfSVhQNFhYLCBwY2lfZml4dXBfcHJwbWMxMTAwKTsKKworLyoKKyAqIFBDSSBJREUgY29udHJvbGxlcnMgdXNlIG5vbi1zdGFuZGFyZCBJL08gcG9ydCBkZWNvZGluZywgcmVzcGVjdCBpdC4KKyAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaV9maXh1cF9pZGVfYmFzZXMoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisJaW50IGk7CisKKwlpZiAoKGRldi0+Y2xhc3MgPj4gOCkgIT0gUENJX0NMQVNTX1NUT1JBR0VfSURFKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgUENJX05VTV9SRVNPVVJDRVM7IGkrKykgeworCQlyID0gZGV2LT5yZXNvdXJjZSArIGk7CisJCWlmICgoci0+c3RhcnQgJiB+MHg4MCkgPT0gMHgzNzQpIHsKKwkJCXItPnN0YXJ0IHw9IDI7CisJCQlyLT5lbmQgPSByLT5zdGFydDsKKwkJfQorCX0KK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lfZml4dXBfaWRlX2Jhc2VzKTsKKworLyoKKyAqIFB1dCB0aGUgREVDMjExNDIgdG8gc2xlZXAKKyAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaV9maXh1cF9kZWMyMTE0MihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQwLCAweDgwMDAwMDAwKTsKK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0RFQywgUENJX0RFVklDRV9JRF9ERUNfMjExNDIsIHBjaV9maXh1cF9kZWMyMTE0Mik7CisKKy8qCisgKiBUaGUgQ1k4MkM2OTMgbmVlZHMgc29tZSByYXRoZXIgbWFqb3IgZml4dXBzIHRvIGVuc3VyZSB0aGF0IGl0IGRvZXMKKyAqIHRoZSByaWdodCB0aGluZy4gIElkZWEgZnJvbSB0aGUgQWxwaGEgcGVvcGxlLCB3aXRoIGEgZmV3IGFkZGl0aW9ucy4KKyAqCisgKiBXZSBlbnN1cmUgdGhhdCB0aGUgSURFIGJhc2UgcmVnaXN0ZXJzIGFyZSBzZXQgdG8gMWYwLzNmNCBmb3IgdGhlCisgKiBwcmltYXJ5IGJ1cywgYW5kIDE3MC8zNzQgZm9yIHRoZSBzZWNvbmRhcnkgYnVzLiAgQWxzbywgaGlkZSB0aGVtCisgKiBmcm9tIHRoZSBQQ0kgc3Vic3lzdGVtIHZpZXcgYXMgd2VsbCBzbyB3ZSB3b24ndCB0cnkgdG8gcGVyZm9ybQorICogb3VyIG93biBhdXRvLWNvbmZpZ3VyYXRpb24gb24gdGhlbS4KKyAqCisgKiBJbiBhZGRpdGlvbiwgd2UgZW5zdXJlIHRoYXQgdGhlIFBDSSBJREUgaW50ZXJydXB0cyBhcmUgcm91dGVkIHRvCisgKiBJUlEgMTQgYW5kIElSUSAxNSByZXNwZWN0aXZlbHkuCisgKgorICogVGhlIGFib3ZlIGdldHMgdXMgdG8gYSBwb2ludCB3aGVyZSB0aGUgSURFIG9uIHRoaXMgZGV2aWNlIGlzCisgKiBmdW5jdGlvbmFsLiAgSG93ZXZlciwgVGhlIENZODJDNjkzVSBfZG9lcyBub3Qgd29ya18gaW4gYnVzCisgKiBtYXN0ZXIgbW9kZSB3aXRob3V0IGxvY2tpbmcgdGhlIFBDSSBidXMgc29saWQuCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY2lfZml4dXBfY3k4MmM2OTMoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpZiAoKGRldi0+Y2xhc3MgPj4gOCkgPT0gUENJX0NMQVNTX1NUT1JBR0VfSURFKSB7CisJCXUzMiBiYXNlMCwgYmFzZTE7CisKKwkJaWYgKGRldi0+Y2xhc3MgJiAweDgwKSB7CS8qIHByaW1hcnkgKi8KKwkJCWJhc2UwID0gMHgxZjA7CisJCQliYXNlMSA9IDB4M2Y0OworCQl9IGVsc2UgewkJCS8qIHNlY29uZGFyeSAqLworCQkJYmFzZTAgPSAweDE3MDsKKwkJCWJhc2UxID0gMHgzNzQ7CisJCX0KKworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX0JBU0VfQUREUkVTU18wLAorCQkJCSAgICAgICBiYXNlMCB8IFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX0JBU0VfQUREUkVTU18xLAorCQkJCSAgICAgICBiYXNlMSB8IFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pOworCisJCWRldi0+cmVzb3VyY2VbMF0uc3RhcnQgPSAwOworCQlkZXYtPnJlc291cmNlWzBdLmVuZCAgID0gMDsKKwkJZGV2LT5yZXNvdXJjZVswXS5mbGFncyA9IDA7CisKKwkJZGV2LT5yZXNvdXJjZVsxXS5zdGFydCA9IDA7CisJCWRldi0+cmVzb3VyY2VbMV0uZW5kICAgPSAwOworCQlkZXYtPnJlc291cmNlWzFdLmZsYWdzID0gMDsKKwl9IGVsc2UgaWYgKFBDSV9GVU5DKGRldi0+ZGV2Zm4pID09IDApIHsKKwkJLyoKKwkJICogU2V0dXAgSURFIElSUSByb3V0aW5nLgorCQkgKi8KKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg0YiwgMTQpOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDRjLCAxNSk7CisKKwkJLyoKKwkJICogRGlzYWJsZSBGUkVRQUNLIGhhbmRzaGFrZSwgZW5hYmxlIFVTQi4KKwkJICovCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NGQsIDB4NDEpOworCisJCS8qCisJCSAqIEVuYWJsZSBQQ0kgcmV0cnksIGFuZCBQQ0kgcG9zdC13cml0ZSBidWZmZXIuCisJCSAqLworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDQ0LCAweDE3KTsKKworCQkvKgorCQkgKiBFbmFibGUgSVNBIG1hc3RlciBhbmQgRE1BIHBvc3Qgd3JpdGUgYnVmZmVyaW5nLgorCQkgKi8KKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg0NSwgMHgwMyk7CisJfQorfQorREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQ09OVEFRLCBQQ0lfREVWSUNFX0lEX0NPTlRBUV84MkM2OTMsIHBjaV9maXh1cF9jeTgyYzY5Myk7CisKK3ZvaWQgX19kZXZpbml0IHBjaWJpb3NfdXBkYXRlX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaXJxKQoreworCWlmIChkZWJ1Z19wY2kpCisJCXByaW50aygiUENJOiBBc3NpZ25pbmcgSVJRICUwMmQgdG8gJXNcbiIsIGlycSwgcGNpX25hbWUoZGV2KSk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLCBpcnEpOworfQorCisvKgorICogSWYgdGhlIGJ1cyBjb250YWlucyBhbnkgb2YgdGhlc2UgZGV2aWNlcywgdGhlbiB3ZSBtdXN0IG5vdCB0dXJuIG9uCisgKiBwYXJpdHkgY2hlY2tpbmcgb2YgYW55IGtpbmQuICBDdXJyZW50bHkgdGhpcyBpcyBDeWJlclBybyAyMHgwIG9ubHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBkZXZfYmFkX2Zvcl9wYXJpdHkoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlyZXR1cm4gKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfSU5URVJHICYmCisJCShkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVSR18yMDAwIHx8CisJCSBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVSR18yMDEwKSk7Cit9CisKKy8qCisgKiBBZGp1c3QgdGhlIGRldmljZSByZXNvdXJjZXMgZnJvbSBidXMtY2VudHJpYyB0byBMaW51eC1jZW50cmljLgorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQKK3BkZXZfZml4dXBfZGV2aWNlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX3N5c19kYXRhICpyb290LCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFBDSV9OVU1fUkVTT1VSQ0VTOyBpKyspIHsKKwkJaWYgKGRldi0+cmVzb3VyY2VbaV0uc3RhcnQgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGV2LT5yZXNvdXJjZVtpXS5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKQorCQkJb2Zmc2V0ID0gcm9vdC0+bWVtX29mZnNldDsKKwkJZWxzZQorCQkJb2Zmc2V0ID0gcm9vdC0+aW9fb2Zmc2V0OworCisJCWRldi0+cmVzb3VyY2VbaV0uc3RhcnQgKz0gb2Zmc2V0OworCQlkZXYtPnJlc291cmNlW2ldLmVuZCAgICs9IG9mZnNldDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdAorcGJ1c19hc3NpZ25fYnVzX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpyb290KQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBidXMtPnNlbGY7CisJaW50IGk7CisKKwlpZiAoIWRldikgeworCQkvKgorCQkgKiBBc3NpZ24gcm9vdCBidXMgcmVzb3VyY2VzLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCWJ1cy0+cmVzb3VyY2VbaV0gPSByb290LT5yZXNvdXJjZVtpXTsKKwl9Cit9CisKKy8qCisgKiBwY2liaW9zX2ZpeHVwX2J1cyAtIENhbGxlZCBhZnRlciBlYWNoIGJ1cyBpcyBwcm9iZWQsCisgKiBidXQgYmVmb3JlIGl0cyBjaGlsZHJlbiBhcmUgZXhhbWluZWQuCisgKi8KK3ZvaWQgX19kZXZpbml0IHBjaWJpb3NfZml4dXBfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9zeXNfZGF0YSAqcm9vdCA9IGJ1cy0+c3lzZGF0YTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXUxNiBmZWF0dXJlcyA9IFBDSV9DT01NQU5EX1NFUlIgfCBQQ0lfQ09NTUFORF9QQVJJVFkgfCBQQ0lfQ09NTUFORF9GQVNUX0JBQ0s7CisKKwlwYnVzX2Fzc2lnbl9idXNfcmVzb3VyY2VzKGJ1cywgcm9vdCk7CisKKwkvKgorCSAqIFdhbGsgdGhlIGRldmljZXMgb24gdGhpcyBidXMsIHdvcmtpbmcgb3V0IHdoYXQgd2UgY2FuCisJICogYW5kIGNhbid0IHN1cHBvcnQuCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCXUxNiBzdGF0dXM7CisKKwkJcGRldl9maXh1cF9kZXZpY2VfcmVzb3VyY2VzKHJvb3QsIGRldik7CisKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfU1RBVFVTLCAmc3RhdHVzKTsKKworCQkvKgorCQkgKiBJZiBhbnkgZGV2aWNlIG9uIHRoaXMgYnVzIGRvZXMgbm90IHN1cHBvcnQgZmFzdCBiYWNrCisJCSAqIHRvIGJhY2sgdHJhbnNmZXJzLCB0aGVuIHRoZSBidXMgYXMgYSB3aG9sZSBpcyBub3QgYWJsZQorCQkgKiB0byBzdXBwb3J0IHRoZW0uICBIYXZpbmcgZmFzdCBiYWNrIHRvIGJhY2sgdHJhbnNmZXJzCisJCSAqIG9uIHNhdmVzIHVzIG9uZSBQQ0kgY3ljbGUgcGVyIHRyYW5zYWN0aW9uLgorCQkgKi8KKwkJaWYgKCEoc3RhdHVzICYgUENJX1NUQVRVU19GQVNUX0JBQ0spKQorCQkJZmVhdHVyZXMgJj0gflBDSV9DT01NQU5EX0ZBU1RfQkFDSzsKKworCQlpZiAocGRldl9iYWRfZm9yX3Bhcml0eShkZXYpKQorCQkJZmVhdHVyZXMgJj0gfihQQ0lfQ09NTUFORF9TRVJSIHwgUENJX0NPTU1BTkRfUEFSSVRZKTsKKworCQlzd2l0Y2ggKGRldi0+Y2xhc3MgPj4gOCkgeworI2lmIGRlZmluZWQoQ09ORklHX0lTQSkgfHwgZGVmaW5lZChDT05GSUdfRUlTQSkKKwkJY2FzZSBQQ0lfQ0xBU1NfQlJJREdFX0lTQToKKwkJY2FzZSBQQ0lfQ0xBU1NfQlJJREdFX0VJU0E6CisJCQkvKgorCQkJICogSWYgdGhpcyBkZXZpY2UgaXMgYW4gSVNBIGJyaWRnZSwgc2V0IGlzYV9icmlkZ2UKKwkJCSAqIHRvIHBvaW50IGF0IHRoaXMgZGV2aWNlLiAgV2Ugd2lsbCB0aGVuIGdvIGxvb2tpbmcKKwkJCSAqIGZvciB0aGluZ3MgbGlrZSBrZXlib2FyZCwgZXRjLgorCQkJICovCisJCQlpc2FfYnJpZGdlID0gZGV2OworCQkJYnJlYWs7CisjZW5kaWYKKwkJY2FzZSBQQ0lfQ0xBU1NfQlJJREdFX1BDSToKKwkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0JSSURHRV9DT05UUk9MLCAmc3RhdHVzKTsKKwkJCXN0YXR1cyB8PSBQQ0lfQlJJREdFX0NUTF9QQVJJVFl8UENJX0JSSURHRV9DVExfTUFTVEVSX0FCT1JUOworCQkJc3RhdHVzICY9IH4oUENJX0JSSURHRV9DVExfQlVTX1JFU0VUfFBDSV9CUklER0VfQ1RMX0ZBU1RfQkFDSyk7CisJCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQlJJREdFX0NPTlRST0wsIHN0YXR1cyk7CisJCQlicmVhazsKKworCQljYXNlIFBDSV9DTEFTU19CUklER0VfQ0FSREJVUzoKKwkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NCX0JSSURHRV9DT05UUk9MLCAmc3RhdHVzKTsKKwkJCXN0YXR1cyB8PSBQQ0lfQ0JfQlJJREdFX0NUTF9QQVJJVFl8UENJX0NCX0JSSURHRV9DVExfTUFTVEVSX0FCT1JUOworCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0NCX0JSSURHRV9DT05UUk9MLCBzdGF0dXMpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIE5vdyB3YWxrIHRoZSBkZXZpY2VzIGFnYWluLCB0aGlzIHRpbWUgc2V0dGluZyB0aGVtIHVwLgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgeworCQl1MTYgY21kOworCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZjbWQpOworCQljbWQgfD0gZmVhdHVyZXM7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQpOworCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsCisJCQkJICAgICAgTDFfQ0FDSEVfQllURVMgPj4gMik7CisJfQorCisJLyoKKwkgKiBQcm9wYWdhdGUgdGhlIGZsYWdzIHRvIHRoZSBQQ0kgYnJpZGdlLgorCSAqLworCWlmIChidXMtPnNlbGYgJiYgYnVzLT5zZWxmLT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7CisJCWlmIChmZWF0dXJlcyAmIFBDSV9DT01NQU5EX0ZBU1RfQkFDSykKKwkJCWJ1cy0+YnJpZGdlX2N0bCB8PSBQQ0lfQlJJREdFX0NUTF9GQVNUX0JBQ0s7CisJCWlmIChmZWF0dXJlcyAmIFBDSV9DT01NQU5EX1BBUklUWSkKKwkJCWJ1cy0+YnJpZGdlX2N0bCB8PSBQQ0lfQlJJREdFX0NUTF9QQVJJVFk7CisJfQorCisJLyoKKwkgKiBSZXBvcnQgd2hhdCB3ZSBkaWQgZm9yIHRoaXMgYnVzCisJICovCisJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBidXMlZDogRmFzdCBiYWNrIHRvIGJhY2sgdHJhbnNmZXJzICVzYWJsZWRcbiIsCisJCWJ1cy0+bnVtYmVyLCAoZmVhdHVyZXMgJiBQQ0lfQ09NTUFORF9GQVNUX0JBQ0spID8gImVuIiA6ICJkaXMiKTsKK30KKworLyoKKyAqIENvbnZlcnQgZnJvbSBMaW51eC1jZW50cmljIHRvIGJ1cy1jZW50cmljIGFkZHJlc3NlcyBmb3IgYnJpZGdlIGRldmljZXMuCisgKi8KK3ZvaWQgX19kZXZpbml0CitwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbiwKKwkJCSBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKK3sKKwlzdHJ1Y3QgcGNpX3N5c19kYXRhICpyb290ID0gZGV2LT5zeXNkYXRhOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKKworCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKKwkJb2Zmc2V0ID0gcm9vdC0+aW9fb2Zmc2V0OworCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pCisJCW9mZnNldCA9IHJvb3QtPm1lbV9vZmZzZXQ7CisKKwlyZWdpb24tPnN0YXJ0ID0gcmVzLT5zdGFydCAtIG9mZnNldDsKKwlyZWdpb24tPmVuZCAgID0gcmVzLT5lbmQgLSBvZmZzZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfSE9UUExVRworRVhQT1JUX1NZTUJPTChwY2liaW9zX2ZpeHVwX2J1cyk7CitFWFBPUlRfU1lNQk9MKHBjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKTsKKyNlbmRpZgorCisvKgorICogVGhpcyBpcyB0aGUgc3RhbmRhcmQgUENJLVBDSSBicmlkZ2Ugc3dpenpsaW5nIGFsZ29yaXRobToKKyAqCisgKiAgIERldjogMCAgMSAgMiAgMworICogICAgQSAgIEEgIEIgIEMgIEQKKyAqICAgIEIgICBCICBDICBEICBBCisgKiAgICBDICAgQyAgRCAgQSAgQgorICogICAgRCAgIEQgIEEgIEIgIEMKKyAqICAgICAgICBeXl5eXl5eXl5eIGlycSBwaW4gb24gYnJpZGdlCisgKi8KK3U4IF9fZGV2aW5pdCBwY2lfc3RkX3N3aXp6bGUoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggKnBpbnApCit7CisJaW50IHBpbiA9ICpwaW5wIC0gMTsKKworCXdoaWxlIChkZXYtPmJ1cy0+c2VsZikgeworCQlwaW4gPSAocGluICsgUENJX1NMT1QoZGV2LT5kZXZmbikpICYgMzsKKwkJLyoKKwkJICogbW92ZSB1cCB0aGUgY2hhaW4gb2YgYnJpZGdlcywKKwkJICogc3dpenpsaW5nIGFzIHdlIGdvLgorCQkgKi8KKwkJZGV2ID0gZGV2LT5idXMtPnNlbGY7CisJfQorCSpwaW5wID0gcGluICsgMTsKKworCXJldHVybiBQQ0lfU0xPVChkZXYtPmRldmZuKTsKK30KKworLyoKKyAqIFN3aXp6bGUgdGhlIGRldmljZSBwaW4gZWFjaCB0aW1lIHdlIGNyb3NzIGEgYnJpZGdlLgorICogVGhpcyBtaWdodCB1cGRhdGUgcGluIGFuZCByZXR1cm5zIHRoZSBzbG90IG51bWJlci4KKyAqLworc3RhdGljIHU4IF9fZGV2aW5pdCBwY2liaW9zX3N3aXp6bGUoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggKnBpbikKK3sKKwlzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMgPSBkZXYtPnN5c2RhdGE7CisJaW50IHNsb3QgPSAwLCBvbGRwaW4gPSAqcGluOworCisJaWYgKHN5cy0+c3dpenpsZSkKKwkJc2xvdCA9IHN5cy0+c3dpenpsZShkZXYsIHBpbik7CisKKwlpZiAoZGVidWdfcGNpKQorCQlwcmludGsoIlBDSTogJXMgc3dpenpsaW5nIHBpbiAlZCA9PiBwaW4gJWQgc2xvdCAlZFxuIiwKKwkJCXBjaV9uYW1lKGRldiksIG9sZHBpbiwgKnBpbiwgc2xvdCk7CisKKwlyZXR1cm4gc2xvdDsKK30KKworLyoKKyAqIE1hcCBhIHNsb3QvcGluIHRvIGFuIElSUS4KKyAqLworc3RhdGljIGludCBwY2liaW9zX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoreworCXN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cyA9IGRldi0+c3lzZGF0YTsKKwlpbnQgaXJxID0gLTE7CisKKwlpZiAoc3lzLT5tYXBfaXJxKQorCQlpcnEgPSBzeXMtPm1hcF9pcnEoZGV2LCBzbG90LCBwaW4pOworCisJaWYgKGRlYnVnX3BjaSkKKwkJcHJpbnRrKCJQQ0k6ICVzIG1hcHBpbmcgc2xvdCAlZCBwaW4gJWQgPT4gaXJxICVkXG4iLAorCQkJcGNpX25hbWUoZGV2KSwgc2xvdCwgcGluLCBpcnEpOworCisJcmV0dXJuIGlycTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHBjaWJpb3NfaW5pdF9odyhzdHJ1Y3QgaHdfcGNpICpodykKK3sKKwlzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMgPSBOVUxMOworCWludCByZXQ7CisJaW50IG5yLCBidXNucjsKKworCWZvciAobnIgPSBidXNuciA9IDA7IG5yIDwgaHctPm5yX2NvbnRyb2xsZXJzOyBucisrKSB7CisJCXN5cyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfc3lzX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzeXMpCisJCQlwYW5pYygiUENJOiB1bmFibGUgdG8gYWxsb2NhdGUgc3lzIGRhdGEhIik7CisKKwkJbWVtc2V0KHN5cywgMCwgc2l6ZW9mKHN0cnVjdCBwY2lfc3lzX2RhdGEpKTsKKworCQlzeXMtPmh3ICAgICAgPSBodzsKKwkJc3lzLT5idXNuciAgID0gYnVzbnI7CisJCXN5cy0+c3dpenpsZSA9IGh3LT5zd2l6emxlOworCQlzeXMtPm1hcF9pcnEgPSBody0+bWFwX2lycTsKKwkJc3lzLT5yZXNvdXJjZVswXSA9ICZpb3BvcnRfcmVzb3VyY2U7CisJCXN5cy0+cmVzb3VyY2VbMV0gPSAmaW9tZW1fcmVzb3VyY2U7CisKKwkJcmV0ID0gaHctPnNldHVwKG5yLCBzeXMpOworCisJCWlmIChyZXQgPiAwKSB7CisJCQlzeXMtPmJ1cyA9IGh3LT5zY2FuKG5yLCBzeXMpOworCisJCQlpZiAoIXN5cy0+YnVzKQorCQkJCXBhbmljKCJQQ0k6IHVuYWJsZSB0byBzY2FuIGJ1cyEiKTsKKworCQkJYnVzbnIgPSBzeXMtPmJ1cy0+c3Vib3JkaW5hdGUgKyAxOworCisJCQlsaXN0X2FkZCgmc3lzLT5ub2RlLCAmaHctPmJ1c2VzKTsKKwkJfSBlbHNlIHsKKwkJCWtmcmVlKHN5cyk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlicmVhazsKKwkJfQorCX0KK30KKwordm9pZCBfX2luaXQgcGNpX2NvbW1vbl9pbml0KHN0cnVjdCBod19wY2kgKmh3KQoreworCXN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5czsKKworCUlOSVRfTElTVF9IRUFEKCZody0+YnVzZXMpOworCisJaWYgKGh3LT5wcmVpbml0KQorCQlody0+cHJlaW5pdCgpOworCXBjaWJpb3NfaW5pdF9odyhodyk7CisJaWYgKGh3LT5wb3N0aW5pdCkKKwkJaHctPnBvc3Rpbml0KCk7CisKKwlwY2lfZml4dXBfaXJxcyhwY2liaW9zX3N3aXp6bGUsIHBjaWJpb3NfbWFwX2lycSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN5cywgJmh3LT5idXNlcywgbm9kZSkgeworCQlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gc3lzLT5idXM7CisKKwkJaWYgKCF1c2VfZmlybXdhcmUpIHsKKwkJCS8qCisJCQkgKiBTaXplIHRoZSBicmlkZ2Ugd2luZG93cy4KKwkJCSAqLworCQkJcGNpX2J1c19zaXplX2JyaWRnZXMoYnVzKTsKKworCQkJLyoKKwkJCSAqIEFzc2lnbiByZXNvdXJjZXMuCisJCQkgKi8KKwkJCXBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhidXMpOworCQl9CisKKwkJLyoKKwkJICogVGVsbCBkcml2ZXJzIGFib3V0IGRldmljZXMgZm91bmQuCisJCSAqLworCQlwY2lfYnVzX2FkZF9kZXZpY2VzKGJ1cyk7CisJfQorfQorCitjaGFyICogX19pbml0IHBjaWJpb3Nfc2V0dXAoY2hhciAqc3RyKQoreworCWlmICghc3RyY21wKHN0ciwgImRlYnVnIikpIHsKKwkJZGVidWdfcGNpID0gMTsKKwkJcmV0dXJuIE5VTEw7CisJfSBlbHNlIGlmICghc3RyY21wKHN0ciwgImZpcm13YXJlIikpIHsKKwkJdXNlX2Zpcm13YXJlID0gMTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBzdHI7Cit9CisKKy8qCisgKiBGcm9tIGFyY2gvaTM4Ni9rZXJuZWwvcGNpLWkzODYuYzoKKyAqCisgKiBXZSBuZWVkIHRvIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBgbWlycm9yZWQnIFZHQSBwb3J0cworICogYW5kIG90aGVyIHN0cmFuZ2UgSVNBIGhhcmR3YXJlLCBzbyB3ZSBhbHdheXMgd2FudCB0aGUKKyAqIGFkZHJlc3NlcyB0byBiZSBhbGxvY2F0ZWQgaW4gdGhlIDB4MDAwLTB4MGZmIHJlZ2lvbgorICogbW9kdWxvIDB4NDAwLgorICoKKyAqIFdoeT8gQmVjYXVzZSBzb21lIHNpbGx5IGV4dGVybmFsIElPIGNhcmRzIG9ubHkgZGVjb2RlCisgKiB0aGUgbG93IDEwIGJpdHMgb2YgdGhlIElPIGFkZHJlc3MuIFRoZSAweDAwLTB4ZmYgcmVnaW9uCisgKiBpcyByZXNlcnZlZCBmb3IgbW90aGVyYm9hcmQgZGV2aWNlcyB0aGF0IGRlY29kZSBhbGwgMTYKKyAqIGJpdHMsIHNvIGl0J3Mgb2sgdG8gYWxsb2NhdGUgYXQsIHNheSwgMHgyODAwLTB4MjhmZiwKKyAqIGJ1dCB3ZSB3YW50IHRvIHRyeSB0byBhdm9pZCBhbGxvY2F0aW5nIGF0IDB4MjkwMC0weDJiZmYKKyAqIHdoaWNoIG1pZ2h0IGJlIG1pcnJvcmVkIGF0IDB4MDEwMC0weDAzZmYuLgorICovCit2b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSByZXMtPnN0YXJ0OworCisJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPICYmIHN0YXJ0ICYgMHgzMDApCisJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOworCisJcmVzLT5zdGFydCA9IChzdGFydCArIGFsaWduIC0gMSkgJiB+KGFsaWduIC0gMSk7Cit9CisKKy8qKgorICogcGNpYmlvc19lbmFibGVfZGV2aWNlIC0gRW5hYmxlIEkvTyBhbmQgbWVtb3J5LgorICogQGRldjogUENJIGRldmljZSB0byBiZSBlbmFibGVkCisgKi8KK2ludCBwY2liaW9zX2VuYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG1hc2spCit7CisJdTE2IGNtZCwgb2xkX2NtZDsKKwlpbnQgaWR4OworCXN0cnVjdCByZXNvdXJjZSAqcjsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZjbWQpOworCW9sZF9jbWQgPSBjbWQ7CisJZm9yIChpZHggPSAwOyBpZHggPCA2OyBpZHgrKykgeworCQkvKiBPbmx5IHNldCB1cCB0aGUgcmVxdWVzdGVkIHN0dWZmICovCisJCWlmICghKG1hc2sgJiAoMSA8PCBpZHgpKSkKKwkJCWNvbnRpbnVlOworCisJCXIgPSBkZXYtPnJlc291cmNlICsgaWR4OworCQlpZiAoIXItPnN0YXJ0ICYmIHItPmVuZCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IERldmljZSAlcyBub3QgYXZhaWxhYmxlIGJlY2F1c2UiCisJCQkgICAgICAgIiBvZiByZXNvdXJjZSBjb2xsaXNpb25zXG4iLCBwY2lfbmFtZShkZXYpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCisJCQljbWQgfD0gUENJX0NPTU1BTkRfSU87CisJCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKQorCQkJY21kIHw9IFBDSV9DT01NQU5EX01FTU9SWTsKKwl9CisKKwkvKgorCSAqIEJyaWRnZXMgKGVnLCBjYXJkYnVzIGJyaWRnZXMpIG5lZWQgdG8gYmUgZnVsbHkgZW5hYmxlZAorCSAqLworCWlmICgoZGV2LT5jbGFzcyA+PiAxNikgPT0gUENJX0JBU0VfQ0xBU1NfQlJJREdFKQorCQljbWQgfD0gUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlk7CisKKwlpZiAoY21kICE9IG9sZF9jbWQpIHsKKwkJcHJpbnRrKCJQQ0k6IGVuYWJsaW5nIGRldmljZSAlcyAoJTA0eCAtPiAlMDR4KVxuIiwKKwkJICAgICAgIHBjaV9uYW1lKGRldiksIG9sZF9jbWQsIGNtZCk7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHBjaV9tbWFwX3BhZ2VfcmFuZ2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQllbnVtIHBjaV9tbWFwX3N0YXRlIG1tYXBfc3RhdGUsIGludCB3cml0ZV9jb21iaW5lKQoreworCXN0cnVjdCBwY2lfc3lzX2RhdGEgKnJvb3QgPSBkZXYtPnN5c2RhdGE7CisJdW5zaWduZWQgbG9uZyBwaHlzOworCisJaWYgKG1tYXBfc3RhdGUgPT0gcGNpX21tYXBfaW8pIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJcGh5cyA9IHZtYS0+dm1fcGdvZmYgKyAocm9vdC0+bWVtX29mZnNldCA+PiBQQUdFX1NISUZUKTsKKwl9CisKKwkvKgorCSAqIE1hcmsgdGhpcyBhcyBJTworCSAqLworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fU0hNIHwgVk1fTE9DS0VEIHwgVk1fSU87CisJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS0+dm1fcGFnZV9wcm90KTsKKworCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCBwaHlzLAorCQkJICAgICB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCisJCQkgICAgIHZtYS0+dm1fcGFnZV9wcm90KSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TIGIvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVkMzcwYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCkBAIC0wLDAgKzEsMzM1IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NS0yMDA1IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCB0d2ljZSBpbiBlbnRyeS1jb21tb24uUworICovCisjaWZuZGVmIE5SX3N5c2NhbGxzCisjZGVmaW5lIE5SX3N5c2NhbGxzIDMyMAorI2Vsc2UKKworX19zeXNjYWxsX3N0YXJ0OgorLyogMCAqLwkJLmxvbmcJc3lzX3Jlc3RhcnRfc3lzY2FsbAorCQkubG9uZwlzeXNfZXhpdAorCQkubG9uZwlzeXNfZm9ya193cmFwcGVyCisJCS5sb25nCXN5c19yZWFkCisJCS5sb25nCXN5c193cml0ZQorLyogNSAqLwkJLmxvbmcJc3lzX29wZW4KKwkJLmxvbmcJc3lzX2Nsb3NlCisJCS5sb25nCXN5c19uaV9zeXNjYWxsCQkvKiB3YXMgc3lzX3dhaXRwaWQgKi8KKwkJLmxvbmcJc3lzX2NyZWF0CisJCS5sb25nCXN5c19saW5rCisvKiAxMCAqLwkubG9uZwlzeXNfdW5saW5rCisJCS5sb25nCXN5c19leGVjdmVfd3JhcHBlcgorCQkubG9uZwlzeXNfY2hkaXIKKwkJLmxvbmcJc3lzX3RpbWUJCS8qIHVzZWQgYnkgbGliYzQgKi8KKwkJLmxvbmcJc3lzX21rbm9kCisvKiAxNSAqLwkubG9uZwlzeXNfY2htb2QKKwkJLmxvbmcJc3lzX2xjaG93bjE2CisJCS5sb25nCXN5c19uaV9zeXNjYWxsCQkvKiB3YXMgc3lzX2JyZWFrICovCisJCS5sb25nCXN5c19uaV9zeXNjYWxsCQkvKiB3YXMgc3lzX3N0YXQgKi8KKwkJLmxvbmcJc3lzX2xzZWVrCisvKiAyMCAqLwkubG9uZwlzeXNfZ2V0cGlkCisJCS5sb25nCXN5c19tb3VudAorCQkubG9uZwlzeXNfb2xkdW1vdW50CQkvKiB1c2VkIGJ5IGxpYmM0ICovCisJCS5sb25nCXN5c19zZXR1aWQxNgorCQkubG9uZwlzeXNfZ2V0dWlkMTYKKy8qIDI1ICovCS5sb25nCXN5c19zdGltZQorCQkubG9uZwlzeXNfcHRyYWNlCisJCS5sb25nCXN5c19hbGFybQkJLyogdXNlZCBieSBsaWJjNCAqLworCQkubG9uZwlzeXNfbmlfc3lzY2FsbAkJLyogd2FzIHN5c19mc3RhdCAqLworCQkubG9uZwlzeXNfcGF1c2UKKy8qIDMwICovCS5sb25nCXN5c191dGltZQkJLyogdXNlZCBieSBsaWJjNCAqLworCQkubG9uZwlzeXNfbmlfc3lzY2FsbAkJLyogd2FzIHN5c19zdHR5ICovCisJCS5sb25nCXN5c19uaV9zeXNjYWxsCQkvKiB3YXMgc3lzX2dldHR5ICovCisJCS5sb25nCXN5c19hY2Nlc3MKKwkJLmxvbmcJc3lzX25pY2UKKy8qIDM1ICovCS5sb25nCXN5c19uaV9zeXNjYWxsCQkvKiB3YXMgc3lzX2Z0aW1lICovCisJCS5sb25nCXN5c19zeW5jCisJCS5sb25nCXN5c19raWxsCisJCS5sb25nCXN5c19yZW5hbWUKKwkJLmxvbmcJc3lzX21rZGlyCisvKiA0MCAqLwkubG9uZwlzeXNfcm1kaXIKKwkJLmxvbmcJc3lzX2R1cAorCQkubG9uZwlzeXNfcGlwZQorCQkubG9uZwlzeXNfdGltZXMKKwkJLmxvbmcJc3lzX25pX3N5c2NhbGwJCS8qIHdhcyBzeXNfcHJvZiAqLworLyogNDUgKi8JLmxvbmcJc3lzX2JyaworCQkubG9uZwlzeXNfc2V0Z2lkMTYKKwkJLmxvbmcJc3lzX2dldGdpZDE2CisJCS5sb25nCXN5c19uaV9zeXNjYWxsCQkvKiB3YXMgc3lzX3NpZ25hbCAqLworCQkubG9uZwlzeXNfZ2V0ZXVpZDE2CisvKiA1MCAqLwkubG9uZwlzeXNfZ2V0ZWdpZDE2CisJCS5sb25nCXN5c19hY2N0CisJCS5sb25nCXN5c191bW91bnQKKwkJLmxvbmcJc3lzX25pX3N5c2NhbGwJCS8qIHdhcyBzeXNfbG9jayAqLworCQkubG9uZwlzeXNfaW9jdGwKKy8qIDU1ICovCS5sb25nCXN5c19mY250bAorCQkubG9uZwlzeXNfbmlfc3lzY2FsbAkJLyogd2FzIHN5c19tcHggKi8KKwkJLmxvbmcJc3lzX3NldHBnaWQKKwkJLmxvbmcJc3lzX25pX3N5c2NhbGwJCS8qIHdhcyBzeXNfdWxpbWl0ICovCisJCS5sb25nCXN5c19uaV9zeXNjYWxsCQkvKiB3YXMgc3lzX29sZHVuYW1lICovCisvKiA2MCAqLwkubG9uZwlzeXNfdW1hc2sKKwkJLmxvbmcJc3lzX2Nocm9vdAorCQkubG9uZwlzeXNfdXN0YXQKKwkJLmxvbmcJc3lzX2R1cDIKKwkJLmxvbmcJc3lzX2dldHBwaWQKKy8qIDY1ICovCS5sb25nCXN5c19nZXRwZ3JwCisJCS5sb25nCXN5c19zZXRzaWQKKwkJLmxvbmcJc3lzX3NpZ2FjdGlvbgorCQkubG9uZwlzeXNfbmlfc3lzY2FsbAkJLyogd2FzIHN5c19zZ2V0bWFzayAqLworCQkubG9uZwlzeXNfbmlfc3lzY2FsbAkJLyogd2FzIHN5c19zc2V0bWFzayAqLworLyogNzAgKi8JLmxvbmcJc3lzX3NldHJldWlkMTYKKwkJLmxvbmcJc3lzX3NldHJlZ2lkMTYKKwkJLmxvbmcJc3lzX3NpZ3N1c3BlbmRfd3JhcHBlcgorCQkubG9uZwlzeXNfc2lncGVuZGluZworCQkubG9uZwlzeXNfc2V0aG9zdG5hbWUKKy8qIDc1ICovCS5sb25nCXN5c19zZXRybGltaXQKKwkJLmxvbmcJc3lzX29sZF9nZXRybGltaXQJLyogdXNlZCBieSBsaWJjNCAqLworCQkubG9uZwlzeXNfZ2V0cnVzYWdlCisJCS5sb25nCXN5c19nZXR0aW1lb2ZkYXkKKwkJLmxvbmcJc3lzX3NldHRpbWVvZmRheQorLyogODAgKi8JLmxvbmcJc3lzX2dldGdyb3VwczE2CisJCS5sb25nCXN5c19zZXRncm91cHMxNgorCQkubG9uZwlvbGRfc2VsZWN0CQkvKiB1c2VkIGJ5IGxpYmM0ICovCisJCS5sb25nCXN5c19zeW1saW5rCisJCS5sb25nCXN5c19uaV9zeXNjYWxsCQkvKiB3YXMgc3lzX2xzdGF0ICovCisvKiA4NSAqLwkubG9uZwlzeXNfcmVhZGxpbmsKKwkJLmxvbmcJc3lzX3VzZWxpYgorCQkubG9uZwlzeXNfc3dhcG9uCisJCS5sb25nCXN5c19yZWJvb3QKKwkJLmxvbmcJb2xkX3JlYWRkaXIJCS8qIHVzZWQgYnkgbGliYzQgKi8KKy8qIDkwICovCS5sb25nCW9sZF9tbWFwCQkvKiB1c2VkIGJ5IGxpYmM0ICovCisJCS5sb25nCXN5c19tdW5tYXAKKwkJLmxvbmcJc3lzX3RydW5jYXRlCisJCS5sb25nCXN5c19mdHJ1bmNhdGUKKwkJLmxvbmcJc3lzX2ZjaG1vZAorLyogOTUgKi8JLmxvbmcJc3lzX2ZjaG93bjE2CisJCS5sb25nCXN5c19nZXRwcmlvcml0eQorCQkubG9uZwlzeXNfc2V0cHJpb3JpdHkKKwkJLmxvbmcJc3lzX25pX3N5c2NhbGwJCS8qIHdhcyBzeXNfcHJvZmlsICovCisJCS5sb25nCXN5c19zdGF0ZnMKKy8qIDEwMCAqLwkubG9uZwlzeXNfZnN0YXRmcworCQkubG9uZwlzeXNfbmlfc3lzY2FsbAorCQkubG9uZwlzeXNfc29ja2V0Y2FsbAorCQkubG9uZwlzeXNfc3lzbG9nCisJCS5sb25nCXN5c19zZXRpdGltZXIKKy8qIDEwNSAqLwkubG9uZwlzeXNfZ2V0aXRpbWVyCisJCS5sb25nCXN5c19uZXdzdGF0CisJCS5sb25nCXN5c19uZXdsc3RhdAorCQkubG9uZwlzeXNfbmV3ZnN0YXQKKwkJLmxvbmcJc3lzX25pX3N5c2NhbGwJCS8qIHdhcyBzeXNfdW5hbWUgKi8KKy8qIDExMCAqLwkubG9uZwlzeXNfbmlfc3lzY2FsbAkJLyogd2FzIHN5c19pb3BsICovCisJCS5sb25nCXN5c192aGFuZ3VwCisJCS5sb25nCXN5c19uaV9zeXNjYWxsCisJCS5sb25nCXN5c19zeXNjYWxsCQkvKiBjYWxsIGEgc3lzY2FsbCAqLworCQkubG9uZwlzeXNfd2FpdDQKKy8qIDExNSAqLwkubG9uZwlzeXNfc3dhcG9mZgorCQkubG9uZwlzeXNfc3lzaW5mbworCQkubG9uZwlzeXNfaXBjCisJCS5sb25nCXN5c19mc3luYworCQkubG9uZwlzeXNfc2lncmV0dXJuX3dyYXBwZXIKKy8qIDEyMCAqLwkubG9uZwlzeXNfY2xvbmVfd3JhcHBlcgorCQkubG9uZwlzeXNfc2V0ZG9tYWlubmFtZQorCQkubG9uZwlzeXNfbmV3dW5hbWUKKwkJLmxvbmcJc3lzX25pX3N5c2NhbGwKKwkJLmxvbmcJc3lzX2FkanRpbWV4CisvKiAxMjUgKi8JLmxvbmcJc3lzX21wcm90ZWN0CisJCS5sb25nCXN5c19zaWdwcm9jbWFzaworCQkubG9uZwlzeXNfbmlfc3lzY2FsbAkJLyogd2FzIHN5c19jcmVhdGVfbW9kdWxlICovCisJCS5sb25nCXN5c19pbml0X21vZHVsZQorCQkubG9uZwlzeXNfZGVsZXRlX21vZHVsZQorLyogMTMwICovCS5sb25nCXN5c19uaV9zeXNjYWxsCQkvKiB3YXMgc3lzX2dldF9rZXJuZWxfc3ltcyAqLworCQkubG9uZwlzeXNfcXVvdGFjdGwKKwkJLmxvbmcJc3lzX2dldHBnaWQKKwkJLmxvbmcJc3lzX2ZjaGRpcgorCQkubG9uZwlzeXNfYmRmbHVzaAorLyogMTM1ICovCS5sb25nCXN5c19zeXNmcworCQkubG9uZwlzeXNfcGVyc29uYWxpdHkKKwkJLmxvbmcJc3lzX25pX3N5c2NhbGwJCS8qIC5sb25nCV9zeXNfYWZzX3N5c2NhbGwgKi8KKwkJLmxvbmcJc3lzX3NldGZzdWlkMTYKKwkJLmxvbmcJc3lzX3NldGZzZ2lkMTYKKy8qIDE0MCAqLwkubG9uZwlzeXNfbGxzZWVrCisJCS5sb25nCXN5c19nZXRkZW50cworCQkubG9uZwlzeXNfc2VsZWN0CisJCS5sb25nCXN5c19mbG9jaworCQkubG9uZwlzeXNfbXN5bmMKKy8qIDE0NSAqLwkubG9uZwlzeXNfcmVhZHYKKwkJLmxvbmcJc3lzX3dyaXRldgorCQkubG9uZwlzeXNfZ2V0c2lkCisJCS5sb25nCXN5c19mZGF0YXN5bmMKKwkJLmxvbmcJc3lzX3N5c2N0bAorLyogMTUwICovCS5sb25nCXN5c19tbG9jaworCQkubG9uZwlzeXNfbXVubG9jaworCQkubG9uZwlzeXNfbWxvY2thbGwKKwkJLmxvbmcJc3lzX211bmxvY2thbGwKKwkJLmxvbmcJc3lzX3NjaGVkX3NldHBhcmFtCisvKiAxNTUgKi8JLmxvbmcJc3lzX3NjaGVkX2dldHBhcmFtCisJCS5sb25nCXN5c19zY2hlZF9zZXRzY2hlZHVsZXIKKwkJLmxvbmcJc3lzX3NjaGVkX2dldHNjaGVkdWxlcgorCQkubG9uZwlzeXNfc2NoZWRfeWllbGQKKwkJLmxvbmcJc3lzX3NjaGVkX2dldF9wcmlvcml0eV9tYXgKKy8qIDE2MCAqLwkubG9uZwlzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgorCQkubG9uZwlzeXNfc2NoZWRfcnJfZ2V0X2ludGVydmFsCisJCS5sb25nCXN5c19uYW5vc2xlZXAKKwkJLmxvbmcJc3lzX2FybV9tcmVtYXAKKwkJLmxvbmcJc3lzX3NldHJlc3VpZDE2CisvKiAxNjUgKi8JLmxvbmcJc3lzX2dldHJlc3VpZDE2CisJCS5sb25nCXN5c19uaV9zeXNjYWxsCisJCS5sb25nCXN5c19uaV9zeXNjYWxsCQkvKiB3YXMgc3lzX3F1ZXJ5X21vZHVsZSAqLworCQkubG9uZwlzeXNfcG9sbAorCQkubG9uZwlzeXNfbmZzc2VydmN0bAorLyogMTcwICovCS5sb25nCXN5c19zZXRyZXNnaWQxNgorCQkubG9uZwlzeXNfZ2V0cmVzZ2lkMTYKKwkJLmxvbmcJc3lzX3ByY3RsCisJCS5sb25nCXN5c19ydF9zaWdyZXR1cm5fd3JhcHBlcgorCQkubG9uZwlzeXNfcnRfc2lnYWN0aW9uCisvKiAxNzUgKi8JLmxvbmcJc3lzX3J0X3NpZ3Byb2NtYXNrCisJCS5sb25nCXN5c19ydF9zaWdwZW5kaW5nCisJCS5sb25nCXN5c19ydF9zaWd0aW1lZHdhaXQKKwkJLmxvbmcJc3lzX3J0X3NpZ3F1ZXVlaW5mbworCQkubG9uZwlzeXNfcnRfc2lnc3VzcGVuZF93cmFwcGVyCisvKiAxODAgKi8JLmxvbmcJc3lzX3ByZWFkNjQKKwkJLmxvbmcJc3lzX3B3cml0ZTY0CisJCS5sb25nCXN5c19jaG93bjE2CisJCS5sb25nCXN5c19nZXRjd2QKKwkJLmxvbmcJc3lzX2NhcGdldAorLyogMTg1ICovCS5sb25nCXN5c19jYXBzZXQKKwkJLmxvbmcJc3lzX3NpZ2FsdHN0YWNrX3dyYXBwZXIKKwkJLmxvbmcJc3lzX3NlbmRmaWxlCisJCS5sb25nCXN5c19uaV9zeXNjYWxsCisJCS5sb25nCXN5c19uaV9zeXNjYWxsCisvKiAxOTAgKi8JLmxvbmcJc3lzX3Zmb3JrX3dyYXBwZXIKKwkJLmxvbmcJc3lzX2dldHJsaW1pdAorCQkubG9uZwlzeXNfbW1hcDIKKwkJLmxvbmcJc3lzX3RydW5jYXRlNjQKKwkJLmxvbmcJc3lzX2Z0cnVuY2F0ZTY0CisvKiAxOTUgKi8JLmxvbmcJc3lzX3N0YXQ2NAorCQkubG9uZwlzeXNfbHN0YXQ2NAorCQkubG9uZwlzeXNfZnN0YXQ2NAorCQkubG9uZwlzeXNfbGNob3duCisJCS5sb25nCXN5c19nZXR1aWQKKy8qIDIwMCAqLwkubG9uZwlzeXNfZ2V0Z2lkCisJCS5sb25nCXN5c19nZXRldWlkCisJCS5sb25nCXN5c19nZXRlZ2lkCisJCS5sb25nCXN5c19zZXRyZXVpZAorCQkubG9uZwlzeXNfc2V0cmVnaWQKKy8qIDIwNSAqLwkubG9uZwlzeXNfZ2V0Z3JvdXBzCisJCS5sb25nCXN5c19zZXRncm91cHMKKwkJLmxvbmcJc3lzX2ZjaG93bgorCQkubG9uZwlzeXNfc2V0cmVzdWlkCisJCS5sb25nCXN5c19nZXRyZXN1aWQKKy8qIDIxMCAqLwkubG9uZwlzeXNfc2V0cmVzZ2lkCisJCS5sb25nCXN5c19nZXRyZXNnaWQKKwkJLmxvbmcJc3lzX2Nob3duCisJCS5sb25nCXN5c19zZXR1aWQKKwkJLmxvbmcJc3lzX3NldGdpZAorLyogMjE1ICovCS5sb25nCXN5c19zZXRmc3VpZAorCQkubG9uZwlzeXNfc2V0ZnNnaWQKKwkJLmxvbmcJc3lzX2dldGRlbnRzNjQKKwkJLmxvbmcJc3lzX3Bpdm90X3Jvb3QKKwkJLmxvbmcJc3lzX21pbmNvcmUKKy8qIDIyMCAqLwkubG9uZwlzeXNfbWFkdmlzZQorCQkubG9uZwlzeXNfZmNudGw2NAorCQkubG9uZwlzeXNfbmlfc3lzY2FsbCAvKiBUVVggKi8KKwkJLmxvbmcJc3lzX25pX3N5c2NhbGwKKwkJLmxvbmcJc3lzX2dldHRpZAorLyogMjI1ICovCS5sb25nCXN5c19yZWFkYWhlYWQKKwkJLmxvbmcJc3lzX3NldHhhdHRyCisJCS5sb25nCXN5c19sc2V0eGF0dHIKKwkJLmxvbmcJc3lzX2ZzZXR4YXR0cgorCQkubG9uZwlzeXNfZ2V0eGF0dHIKKy8qIDIzMCAqLwkubG9uZwlzeXNfbGdldHhhdHRyCisJCS5sb25nCXN5c19mZ2V0eGF0dHIKKwkJLmxvbmcJc3lzX2xpc3R4YXR0cgorCQkubG9uZwlzeXNfbGxpc3R4YXR0cgorCQkubG9uZwlzeXNfZmxpc3R4YXR0cgorLyogMjM1ICovCS5sb25nCXN5c19yZW1vdmV4YXR0cgorCQkubG9uZwlzeXNfbHJlbW92ZXhhdHRyCisJCS5sb25nCXN5c19mcmVtb3ZleGF0dHIKKwkJLmxvbmcJc3lzX3RraWxsCisJCS5sb25nCXN5c19zZW5kZmlsZTY0CisvKiAyNDAgKi8JLmxvbmcJc3lzX2Z1dGV4X3dyYXBwZXIKKwkJLmxvbmcJc3lzX3NjaGVkX3NldGFmZmluaXR5CisJCS5sb25nCXN5c19zY2hlZF9nZXRhZmZpbml0eQorCQkubG9uZwlzeXNfaW9fc2V0dXAKKwkJLmxvbmcJc3lzX2lvX2Rlc3Ryb3kKKy8qIDI0NSAqLwkubG9uZwlzeXNfaW9fZ2V0ZXZlbnRzCisJCS5sb25nCXN5c19pb19zdWJtaXQKKwkJLmxvbmcJc3lzX2lvX2NhbmNlbAorCQkubG9uZwlzeXNfZXhpdF9ncm91cAorCQkubG9uZwlzeXNfbG9va3VwX2Rjb29raWUKKy8qIDI1MCAqLwkubG9uZwlzeXNfZXBvbGxfY3JlYXRlCisJCS5sb25nCXN5c19lcG9sbF9jdGwKKwkJLmxvbmcJc3lzX2Vwb2xsX3dhaXQKKwkgCS5sb25nCXN5c19yZW1hcF9maWxlX3BhZ2VzCisJCS5sb25nCXN5c19uaV9zeXNjYWxsCS8qIHN5c19zZXRfdGhyZWFkX2FyZWEgKi8KKy8qIDI1NSAqLwkubG9uZwlzeXNfbmlfc3lzY2FsbAkvKiBzeXNfZ2V0X3RocmVhZF9hcmVhICovCisgCQkubG9uZwlzeXNfc2V0X3RpZF9hZGRyZXNzCisJCS5sb25nCXN5c190aW1lcl9jcmVhdGUKKwkJLmxvbmcJc3lzX3RpbWVyX3NldHRpbWUKKwkJLmxvbmcJc3lzX3RpbWVyX2dldHRpbWUKKy8qIDI2MCAqLwkubG9uZwlzeXNfdGltZXJfZ2V0b3ZlcnJ1bgorCQkubG9uZwlzeXNfdGltZXJfZGVsZXRlCisJCS5sb25nCXN5c19jbG9ja19zZXR0aW1lCisJCS5sb25nCXN5c19jbG9ja19nZXR0aW1lCisJCS5sb25nCXN5c19jbG9ja19nZXRyZXMKKy8qIDI2NSAqLwkubG9uZwlzeXNfY2xvY2tfbmFub3NsZWVwCisJCS5sb25nCXN5c19zdGF0ZnM2NAorCQkubG9uZwlzeXNfZnN0YXRmczY0CisJCS5sb25nCXN5c190Z2tpbGwKKwkJLmxvbmcJc3lzX3V0aW1lcworLyogMjcwICovCS5sb25nCXN5c19mYWR2aXNlNjRfNjQKKwkJLmxvbmcJc3lzX3BjaWNvbmZpZ19pb2Jhc2UKKwkJLmxvbmcJc3lzX3BjaWNvbmZpZ19yZWFkCisJCS5sb25nCXN5c19wY2ljb25maWdfd3JpdGUKKwkJLmxvbmcJc3lzX21xX29wZW4KKy8qIDI3NSAqLwkubG9uZwlzeXNfbXFfdW5saW5rCisJCS5sb25nCXN5c19tcV90aW1lZHNlbmQKKwkJLmxvbmcJc3lzX21xX3RpbWVkcmVjZWl2ZQorCQkubG9uZwlzeXNfbXFfbm90aWZ5CisJCS5sb25nCXN5c19tcV9nZXRzZXRhdHRyCisvKiAyODAgKi8JLmxvbmcJc3lzX3dhaXRpZAorCQkubG9uZwlzeXNfc29ja2V0CisJCS5sb25nCXN5c19iaW5kCisJCS5sb25nCXN5c19jb25uZWN0CisJCS5sb25nCXN5c19saXN0ZW4KKy8qIDI4NSAqLwkubG9uZwlzeXNfYWNjZXB0CisJCS5sb25nCXN5c19nZXRzb2NrbmFtZQorCQkubG9uZwlzeXNfZ2V0cGVlcm5hbWUKKwkJLmxvbmcJc3lzX3NvY2tldHBhaXIKKwkJLmxvbmcJc3lzX3NlbmQKKy8qIDI5MCAqLwkubG9uZwlzeXNfc2VuZHRvCisJCS5sb25nCXN5c19yZWN2CisJCS5sb25nCXN5c19yZWN2ZnJvbQorCQkubG9uZwlzeXNfc2h1dGRvd24KKwkJLmxvbmcJc3lzX3NldHNvY2tvcHQKKy8qIDI5NSAqLwkubG9uZwlzeXNfZ2V0c29ja29wdAorCQkubG9uZwlzeXNfc2VuZG1zZworCQkubG9uZwlzeXNfcmVjdm1zZworCQkubG9uZwlzeXNfc2Vtb3AKKwkJLmxvbmcJc3lzX3NlbWdldAorLyogMzAwICovCS5sb25nCXN5c19zZW1jdGwKKwkJLmxvbmcJc3lzX21zZ3NuZAorCQkubG9uZwlzeXNfbXNncmN2CisJCS5sb25nCXN5c19tc2dnZXQKKwkJLmxvbmcJc3lzX21zZ2N0bAorLyogMzA1ICovCS5sb25nCXN5c19zaG1hdAorCQkubG9uZwlzeXNfc2htZHQKKwkJLmxvbmcJc3lzX3NobWdldAorCQkubG9uZwlzeXNfc2htY3RsCisJCS5sb25nCXN5c19hZGRfa2V5CisvKiAzMTAgKi8JLmxvbmcJc3lzX3JlcXVlc3Rfa2V5CisJCS5sb25nCXN5c19rZXljdGwKKwkJLmxvbmcJc3lzX3NlbXRpbWVkb3AKK19fc3lzY2FsbF9lbmQ6CisKKwkJLnJlcHQJTlJfc3lzY2FsbHMgLSAoX19zeXNjYWxsX2VuZCAtIF9fc3lzY2FsbF9zdGFydCkgLyA0CisJCQkubG9uZwlzeXNfbmlfc3lzY2FsbAorCQkuZW5kcgorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvY29tcGF0LmMgYi9hcmNoL2FybS9rZXJuZWwvY29tcGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE5NWFkZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9jb21wYXQuYwpAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvY29tcGF0LmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogV2Uga2VlcCB0aGUgb2xkIHBhcmFtcyBjb21wYXRpYmlsaXR5IGNydWZ0IGluIG9uZSBwbGFjZSAoaGVyZSkKKyAqIHNvIHdlIGRvbid0IGVuZCB1cCB3aXRoIGxvdHMgb2YgbWVzcyBhcm91bmQgb3RoZXIgcGxhY2VzLgorICoKKyAqIE5PVEU6CisgKiAgVGhlIG9sZCBzdHJ1Y3QgcGFyYW1fc3RydWN0IGlzIGRlcHJlY2F0ZWQsIGJ1dCBpdCB3aWxsIGJlIGtlcHQgaW4KKyAqICB0aGUga2VybmVsIGZvciA1IHllYXJzIGZyb20gbm93ICgyMDAxKS4gVGhpcyB3aWxsIGFsbG93IGJvb3QgbG9hZGVycworICogIHRvIGNvbnZlcnQgdG8gdGhlIG5ldyBzdHJ1Y3QgdGFnIHdheS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCisvKgorICogVXNhZ2U6CisgKiAgLSBkbyBub3QgZ28gYmxpbmRseSBhZGRpbmcgZmllbGRzLCBhZGQgdGhlbSBhdCB0aGUgZW5kCisgKiAgLSB3aGVuIGFkZGluZyBmaWVsZHMsIGRvbid0IHJlbHkgb24gdGhlIGFkZHJlc3MgdW50aWwKKyAqICAgIGEgcGF0Y2ggZnJvbSBtZSBoYXMgYmVlbiByZWxlYXNlZAorICogIC0gdW51c2VkIGZpZWxkcyBzaG91bGQgYmUgemVybyAoZm9yIGZ1dHVyZSBleHBhbnNpb24pCisgKiAgLSB0aGlzIHN0cnVjdHVyZSBpcyByZWxhdGl2ZWx5IHNob3J0LWxpdmVkIC0gb25seQorICogICAgZ3VhcmFudGVlZCB0byBjb250YWluIHVzZWZ1bCBkYXRhIGluIHNldHVwX2FyY2goKQorICoKKyAqIFRoaXMgaXMgdGhlIG9sZCBkZXByZWNhdGVkIHdheSB0byBwYXNzIHBhcmFtZXRlcnMgdG8gdGhlIGtlcm5lbAorICovCitzdHJ1Y3QgcGFyYW1fc3RydWN0IHsKKyAgICB1bmlvbiB7CisJc3RydWN0IHsKKwkgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemU7CQkvKiAgMCAqLworCSAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwkJLyogIDQgKi8KKwkgICAgdW5zaWduZWQgbG9uZyByYW1kaXNrX3NpemU7CQkvKiAgOCAqLworCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwkJLyogMTIgKi8KKyNkZWZpbmUgRkxBR19SRUFET05MWQkxCisjZGVmaW5lIEZMQUdfUkRMT0FECTQKKyNkZWZpbmUgRkxBR19SRFBST01QVAk4CisJICAgIHVuc2lnbmVkIGxvbmcgcm9vdGRldjsJCS8qIDE2ICovCisJICAgIHVuc2lnbmVkIGxvbmcgdmlkZW9fbnVtX2NvbHM7CS8qIDIwICovCisJICAgIHVuc2lnbmVkIGxvbmcgdmlkZW9fbnVtX3Jvd3M7CS8qIDI0ICovCisJICAgIHVuc2lnbmVkIGxvbmcgdmlkZW9feDsJCS8qIDI4ICovCisJICAgIHVuc2lnbmVkIGxvbmcgdmlkZW9feTsJCS8qIDMyICovCisJICAgIHVuc2lnbmVkIGxvbmcgbWVtY19jb250cm9sX3JlZzsJLyogMzYgKi8KKwkgICAgdW5zaWduZWQgY2hhciBzb3VuZGRlZmF1bHQ7CQkvKiA0MCAqLworCSAgICB1bnNpZ25lZCBjaGFyIGFkZnNkcml2ZXM7CQkvKiA0MSAqLworCSAgICB1bnNpZ25lZCBjaGFyIGJ5dGVzX3Blcl9jaGFyX2g7CS8qIDQyICovCisJICAgIHVuc2lnbmVkIGNoYXIgYnl0ZXNfcGVyX2NoYXJfdjsJLyogNDMgKi8KKwkgICAgdW5zaWduZWQgbG9uZyBwYWdlc19pbl9iYW5rWzRdOwkvKiA0NCAqLworCSAgICB1bnNpZ25lZCBsb25nIHBhZ2VzX2luX3ZyYW07CS8qIDYwICovCisJICAgIHVuc2lnbmVkIGxvbmcgaW5pdHJkX3N0YXJ0OwkJLyogNjQgKi8KKwkgICAgdW5zaWduZWQgbG9uZyBpbml0cmRfc2l6ZTsJCS8qIDY4ICovCisJICAgIHVuc2lnbmVkIGxvbmcgcmRfc3RhcnQ7CQkvKiA3MiAqLworCSAgICB1bnNpZ25lZCBsb25nIHN5c3RlbV9yZXY7CQkvKiA3NiAqLworCSAgICB1bnNpZ25lZCBsb25nIHN5c3RlbV9zZXJpYWxfbG93OwkvKiA4MCAqLworCSAgICB1bnNpZ25lZCBsb25nIHN5c3RlbV9zZXJpYWxfaGlnaDsJLyogODQgKi8KKwkgICAgdW5zaWduZWQgbG9uZyBtZW1fZmNsa18yMTI4NTsgICAgICAgLyogODggKi8KKwl9IHM7CisJY2hhciB1bnVzZWRbMjU2XTsKKyAgICB9IHUxOworICAgIHVuaW9uIHsKKwljaGFyIHBhdGhzWzhdWzEyOF07CisJc3RydWN0IHsKKwkgICAgdW5zaWduZWQgbG9uZyBtYWdpYzsKKwkgICAgY2hhciBuWzEwMjQgLSBzaXplb2YodW5zaWduZWQgbG9uZyldOworCX0gczsKKyAgICB9IHUyOworICAgIGNoYXIgY29tbWFuZGxpbmVbQ09NTUFORF9MSU5FX1NJWkVdOworfTsKKworc3RhdGljIHN0cnVjdCB0YWcgKiBfX2luaXQgbWVtdGFnKHN0cnVjdCB0YWcgKnRhZywgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXRhZyA9IHRhZ19uZXh0KHRhZyk7CisJdGFnLT5oZHIudGFnID0gQVRBR19NRU07CisJdGFnLT5oZHIuc2l6ZSA9IHRhZ19zaXplKHRhZ19tZW0zMik7CisJdGFnLT51Lm1lbS5zaXplID0gc2l6ZTsKKwl0YWctPnUubWVtLnN0YXJ0ID0gc3RhcnQ7CisKKwlyZXR1cm4gdGFnOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgYnVpbGRfdGFnX2xpc3Qoc3RydWN0IHBhcmFtX3N0cnVjdCAqcGFyYW1zLCB2b2lkICp0YWdsaXN0KQoreworCXN0cnVjdCB0YWcgKnRhZyA9IHRhZ2xpc3Q7CisKKwlpZiAocGFyYW1zLT51MS5zLnBhZ2Vfc2l6ZSAhPSBQQUdFX1NJWkUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogYmFkIGNvbmZpZ3VyYXRpb24gcGFnZSwgIgorCQkgICAgICAgInRyeWluZyB0byBjb250aW51ZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiQ29udmVydGluZyBvbGQtc3R5bGUgcGFyYW0gc3RydWN0IHRvIHRhZ2xpc3RcbiIpOworCisjaWZkZWYgQ09ORklHX0FSQ0hfTkVUV0lOREVSCisJaWYgKHBhcmFtcy0+dTEucy5ucl9wYWdlcyAhPSAweDAyMDAwICYmCisJICAgIHBhcmFtcy0+dTEucy5ucl9wYWdlcyAhPSAweDA0MDAwICYmCisJICAgIHBhcmFtcy0+dTEucy5ucl9wYWdlcyAhPSAweDA4MDAwICYmCisJICAgIHBhcmFtcy0+dTEucy5ucl9wYWdlcyAhPSAweDEwMDAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6IGJhZCBOZVRUcm9tIHBhcmFtZXRlcnMgIgorCQkgICAgICAgImRldGVjdGVkLCB1c2luZyBkZWZhdWx0c1xuIik7CisKKwkJcGFyYW1zLT51MS5zLm5yX3BhZ2VzID0gMHgxMDAwOwkvKiAxNk1CICovCisJCXBhcmFtcy0+dTEucy5yYW1kaXNrX3NpemUgPSAwOworCQlwYXJhbXMtPnUxLnMuZmxhZ3MgPSBGTEFHX1JFQURPTkxZOworCQlwYXJhbXMtPnUxLnMuaW5pdHJkX3N0YXJ0ID0gMDsKKwkJcGFyYW1zLT51MS5zLmluaXRyZF9zaXplID0gMDsKKwkJcGFyYW1zLT51MS5zLnJkX3N0YXJ0ID0gMDsKKwl9CisjZW5kaWYKKworCXRhZy0+aGRyLnRhZyAgPSBBVEFHX0NPUkU7CisJdGFnLT5oZHIuc2l6ZSA9IHRhZ19zaXplKHRhZ19jb3JlKTsKKwl0YWctPnUuY29yZS5mbGFncyA9IHBhcmFtcy0+dTEucy5mbGFncyAmIEZMQUdfUkVBRE9OTFk7CisJdGFnLT51LmNvcmUucGFnZXNpemUgPSBwYXJhbXMtPnUxLnMucGFnZV9zaXplOworCXRhZy0+dS5jb3JlLnJvb3RkZXYgPSBwYXJhbXMtPnUxLnMucm9vdGRldjsKKworCXRhZyA9IHRhZ19uZXh0KHRhZyk7CisJdGFnLT5oZHIudGFnID0gQVRBR19SQU1ESVNLOworCXRhZy0+aGRyLnNpemUgPSB0YWdfc2l6ZSh0YWdfcmFtZGlzayk7CisJdGFnLT51LnJhbWRpc2suZmxhZ3MgPSAocGFyYW1zLT51MS5zLmZsYWdzICYgRkxBR19SRExPQUQgPyAxIDogMCkgfAorCQkJICAgICAgIChwYXJhbXMtPnUxLnMuZmxhZ3MgJiBGTEFHX1JEUFJPTVBUID8gMiA6IDApOworCXRhZy0+dS5yYW1kaXNrLnNpemUgID0gcGFyYW1zLT51MS5zLnJhbWRpc2tfc2l6ZTsKKwl0YWctPnUucmFtZGlzay5zdGFydCA9IHBhcmFtcy0+dTEucy5yZF9zdGFydDsKKworCXRhZyA9IHRhZ19uZXh0KHRhZyk7CisJdGFnLT5oZHIudGFnID0gQVRBR19JTklUUkQ7CisJdGFnLT5oZHIuc2l6ZSA9IHRhZ19zaXplKHRhZ19pbml0cmQpOworCXRhZy0+dS5pbml0cmQuc3RhcnQgPSBwYXJhbXMtPnUxLnMuaW5pdHJkX3N0YXJ0OworCXRhZy0+dS5pbml0cmQuc2l6ZSAgPSBwYXJhbXMtPnUxLnMuaW5pdHJkX3NpemU7CisKKwl0YWcgPSB0YWdfbmV4dCh0YWcpOworCXRhZy0+aGRyLnRhZyA9IEFUQUdfU0VSSUFMOworCXRhZy0+aGRyLnNpemUgPSB0YWdfc2l6ZSh0YWdfc2VyaWFsbnIpOworCXRhZy0+dS5zZXJpYWxuci5sb3cgPSBwYXJhbXMtPnUxLnMuc3lzdGVtX3NlcmlhbF9sb3c7CisJdGFnLT51LnNlcmlhbG5yLmhpZ2ggPSBwYXJhbXMtPnUxLnMuc3lzdGVtX3NlcmlhbF9oaWdoOworCisJdGFnID0gdGFnX25leHQodGFnKTsKKwl0YWctPmhkci50YWcgPSBBVEFHX1JFVklTSU9OOworCXRhZy0+aGRyLnNpemUgPSB0YWdfc2l6ZSh0YWdfcmV2aXNpb24pOworCXRhZy0+dS5yZXZpc2lvbi5yZXYgPSBwYXJhbXMtPnUxLnMuc3lzdGVtX3JldjsKKworI2lmZGVmIENPTkZJR19BUkNIX0FDT1JOCisJaWYgKG1hY2hpbmVfaXNfcmlzY3BjKCkpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCQl0YWcgPSBtZW10YWcodGFnLCBQSFlTX09GRlNFVCArIChpIDw8IDI2KSwKKwkJCQkgcGFyYW1zLT51MS5zLnBhZ2VzX2luX2JhbmtbaV0gKiBQQUdFX1NJWkUpOworCX0gZWxzZQorI2VuZGlmCisJdGFnID0gbWVtdGFnKHRhZywgUEhZU19PRkZTRVQsIHBhcmFtcy0+dTEucy5ucl9wYWdlcyAqIFBBR0VfU0laRSk7CisKKyNpZmRlZiBDT05GSUdfRk9PVEJSSURHRQorCWlmIChwYXJhbXMtPnUxLnMubWVtX2ZjbGtfMjEyODUpIHsKKwkJdGFnID0gdGFnX25leHQodGFnKTsKKwkJdGFnLT5oZHIudGFnID0gQVRBR19NRU1DTEs7CisJCXRhZy0+aGRyLnNpemUgPSB0YWdfc2l6ZSh0YWdfbWVtY2xrKTsKKwkJdGFnLT51Lm1lbWNsay5mbWVtY2xrID0gcGFyYW1zLT51MS5zLm1lbV9mY2xrXzIxMjg1OworCX0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfRUJTQTI4NQorCWlmIChtYWNoaW5lX2lzX2Vic2EyODUoKSkgeworCQl0YWcgPSB0YWdfbmV4dCh0YWcpOworCQl0YWctPmhkci50YWcgPSBBVEFHX1ZJREVPVEVYVDsKKwkJdGFnLT5oZHIuc2l6ZSA9IHRhZ19zaXplKHRhZ192aWRlb3RleHQpOworCQl0YWctPnUudmlkZW90ZXh0LnggICAgICAgICAgICA9IHBhcmFtcy0+dTEucy52aWRlb194OworCQl0YWctPnUudmlkZW90ZXh0LnkgICAgICAgICAgICA9IHBhcmFtcy0+dTEucy52aWRlb195OworCQl0YWctPnUudmlkZW90ZXh0LnZpZGVvX3BhZ2UgICA9IDA7CisJCXRhZy0+dS52aWRlb3RleHQudmlkZW9fbW9kZSAgID0gMDsKKwkJdGFnLT51LnZpZGVvdGV4dC52aWRlb19jb2xzICAgPSBwYXJhbXMtPnUxLnMudmlkZW9fbnVtX2NvbHM7CisJCXRhZy0+dS52aWRlb3RleHQudmlkZW9fZWdhX2J4ID0gMDsKKwkJdGFnLT51LnZpZGVvdGV4dC52aWRlb19saW5lcyAgPSBwYXJhbXMtPnUxLnMudmlkZW9fbnVtX3Jvd3M7CisJCXRhZy0+dS52aWRlb3RleHQudmlkZW9faXN2Z2EgID0gMTsKKwkJdGFnLT51LnZpZGVvdGV4dC52aWRlb19wb2ludHMgPSA4OworCX0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfQUNPUk4KKwl0YWcgPSB0YWdfbmV4dCh0YWcpOworCXRhZy0+aGRyLnRhZyA9IEFUQUdfQUNPUk47CisJdGFnLT5oZHIuc2l6ZSA9IHRhZ19zaXplKHRhZ19hY29ybik7CisJdGFnLT51LmFjb3JuLm1lbWNfY29udHJvbF9yZWcgPSBwYXJhbXMtPnUxLnMubWVtY19jb250cm9sX3JlZzsKKwl0YWctPnUuYWNvcm4udnJhbV9wYWdlcyAgICAgICA9IHBhcmFtcy0+dTEucy5wYWdlc19pbl92cmFtOworCXRhZy0+dS5hY29ybi5zb3VuZGRlZmF1bHQgICAgID0gcGFyYW1zLT51MS5zLnNvdW5kZGVmYXVsdDsKKwl0YWctPnUuYWNvcm4uYWRmc2RyaXZlcyAgICAgICA9IHBhcmFtcy0+dTEucy5hZGZzZHJpdmVzOworI2VuZGlmCisKKwl0YWcgPSB0YWdfbmV4dCh0YWcpOworCXRhZy0+aGRyLnRhZyA9IEFUQUdfQ01ETElORTsKKwl0YWctPmhkci5zaXplID0gKHN0cmxlbihwYXJhbXMtPmNvbW1hbmRsaW5lKSArIDMgKworCQkJIHNpemVvZihzdHJ1Y3QgdGFnX2hlYWRlcikpID4+IDI7CisJc3RyY3B5KHRhZy0+dS5jbWRsaW5lLmNtZGxpbmUsIHBhcmFtcy0+Y29tbWFuZGxpbmUpOworCisJdGFnID0gdGFnX25leHQodGFnKTsKKwl0YWctPmhkci50YWcgPSBBVEFHX05PTkU7CisJdGFnLT5oZHIuc2l6ZSA9IDA7CisKKwltZW1tb3ZlKHBhcmFtcywgdGFnbGlzdCwgKChpbnQpdGFnKSAtICgoaW50KXRhZ2xpc3QpICsKKwkJCQkgc2l6ZW9mKHN0cnVjdCB0YWdfaGVhZGVyKSk7Cit9CisKK3ZvaWQgX19pbml0IGNvbnZlcnRfdG9fdGFnX2xpc3Qoc3RydWN0IHRhZyAqdGFncykKK3sKKwlzdHJ1Y3QgcGFyYW1fc3RydWN0ICpwYXJhbXMgPSAoc3RydWN0IHBhcmFtX3N0cnVjdCAqKXRhZ3M7CisJYnVpbGRfdGFnX2xpc3QocGFyYW1zLCAmcGFyYW1zLT51Mik7Cit9CisKK3ZvaWQgX19pbml0IHNxdWFzaF9tZW1fdGFncyhzdHJ1Y3QgdGFnICp0YWcpCit7CisJZm9yICg7IHRhZy0+aGRyLnNpemU7IHRhZyA9IHRhZ19uZXh0KHRhZykpCisJCWlmICh0YWctPmhkci50YWcgPT0gQVRBR19NRU0pCisJCQl0YWctPmhkci50YWcgPSBBVEFHX05PTkU7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBiL2FyY2gvYXJtL2tlcm5lbC9kZWJ1Zy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYWE5MTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvZGVidWcuUwpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvZGVidWcuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OSBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICAzMi1iaXQgZGVidWdnaW5nIGNvZGUKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworCQkudGV4dAorCisvKgorICogU29tZSBkZWJ1Z2dpbmcgcm91dGluZXMgKHVzZWZ1bCBpZiB5b3UndmUgZ290IE1NIHByb2JsZW1zIGFuZAorICogcHJpbnRrIGlzbid0IHdvcmtpbmcpLiAgRm9yIERFQlVHR0lORyBPTkxZISEhICBEbyBub3QgbGVhdmUKKyAqIHJlZmVyZW5jZXMgdG8gdGhlc2UgaW4gYSBwcm9kdWN0aW9uIGtlcm5lbCEKKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfSUNFRENDKQorCQlAQCBkZWJ1ZyB1c2luZyBBUk0gRW1iZWRkZWRJQ0UgRENDIGNoYW5uZWwKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeAorCQkuZW5kbQorCisJCS5tYWNybwlzZW5kdWFydCwgcmQsIHJ4CisJCW1jcglwMTQsIDAsIFxyZCwgYzEsIGMwLCAwCisJCS5lbmRtCisKKwkJLm1hY3JvCWJ1c3l1YXJ0LCByZCwgcngKKzEwMDE6CisJCW1yYwlwMTQsIDAsIFxyeCwgYzAsIGMwLCAwCisJCXRzdAlccngsICMyCisJCWJlcQkxMDAxYgorCisJCS5lbmRtCisKKwkJLm1hY3JvCXdhaXR1YXJ0LCByZCwgcngKKwkJbW92CVxyZCwgIzB4MjAwMDAwMAorMTAwMToKKwkJc3VicwlccmQsIFxyZCwgIzEKKwkJYm1pCTEwMDJmCisJCW1yYwlwMTQsIDAsIFxyeCwgYzAsIGMwLCAwCisJCXRzdAlccngsICMyCisJCWJuZQkxMDAxYgorMTAwMjoKKwkJLmVuZG0KKyNlbHNlCisjaW5jbHVkZSA8YXNtL2FyY2gvZGVidWctbWFjcm8uUz4KKyNlbmRpZgorCisvKgorICogVXNlZnVsIGRlYnVnZ2luZyByb3V0aW5lcworICovCitFTlRSWShwcmludGhleDgpCisJCW1vdglyMSwgIzgKKwkJYglwcmludGhleAorCitFTlRSWShwcmludGhleDQpCisJCW1vdglyMSwgIzQKKwkJYglwcmludGhleAorCitFTlRSWShwcmludGhleDIpCisJCW1vdglyMSwgIzIKK3ByaW50aGV4OglhZHIJcjIsIGhleGJ1ZgorCQlhZGQJcjMsIHIyLCByMQorCQltb3YJcjEsICMwCisJCXN0cmIJcjEsIFtyM10KKzE6CQlhbmQJcjEsIHIwLCAjMTUKKwkJbW92CXIwLCByMCwgbHNyICM0CisJCWNtcAlyMSwgIzEwCisJCWFkZGx0CXIxLCByMSwgIycwJworCQlhZGRnZQlyMSwgcjEsICMnYScgLSAxMAorCQlzdHJiCXIxLCBbcjMsICMtMV0hCisJCXRlcQlyMywgcjIKKwkJYm5lCTFiCisJCW1vdglyMCwgcjIKKwkJYglwcmludGFzY2lpCisKKwkJLmx0b3JnCisKK0VOVFJZKHByaW50YXNjaWkpCisJCWFkZHJ1YXJ0IHIzCisJCWIJMmYKKzE6CQl3YWl0dWFydCByMiwgcjMKKwkJc2VuZHVhcnQgcjEsIHIzCisJCWJ1c3l1YXJ0IHIyLCByMworCQl0ZXEJcjEsICMnXG4nCisJCW1vdmVxCXIxLCAjJ1xyJworCQliZXEJMWIKKzI6CQl0ZXEJcjAsICMwCisJCWxkcm5lYglyMSwgW3IwXSwgIzEKKwkJdGVxbmUJcjEsICMwCisJCWJuZQkxYgorCQltb3YJcGMsIGxyCisKK0VOVFJZKHByaW50Y2gpCisJCWFkZHJ1YXJ0IHIzCisJCW1vdglyMSwgcjAKKwkJbW92CXIwLCAjMAorCQliCTFiCisKK2hleGJ1ZjoJCS5zcGFjZSAxNgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2RtYS1pc2EuYyBiL2FyY2gvYXJtL2tlcm5lbC9kbWEtaXNhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhMzYzMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9kbWEtaXNhLmMKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0va2VybmVsL2RtYS1pc2EuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBJU0EgRE1BIHByaW1pdGl2ZXMKKyAqICBUYWtlbiBmcm9tIHZhcmlvdXMgc291cmNlcywgaW5jbHVkaW5nOgorICogICBsaW51eC9pbmNsdWRlL2FzbS9kbWEuaDogRGVmaW5lcyBmb3IgdXNpbmcgYW5kIGFsbG9jYXRpbmcgZG1hIGNoYW5uZWxzLgorICogICAgIFdyaXR0ZW4gYnkgSGVubnVzIEJlcmdtYW4sIDE5OTIuCisgKiAgICAgSGlnaCBETUEgY2hhbm5lbCBzdXBwb3J0ICYgaW5mbyBieSBIYW5udSBTYXZvbGFpbmVuIGFuZCBKb2huIEJveWQsCisgKiAgICAgTm92LiAxOTkyLgorICogICBhcmNoL2FybS9rZXJuZWwvZG1hLWVic2EyODUuYworICogICBDb3B5cmlnaHQgKEMpIDE5OTggUGhpbCBCbHVuZGVsbAorICovCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvZG1hLmg+CisKKyNkZWZpbmUgSVNBX0RNQV9NT0RFX1JFQUQJMHg0NAorI2RlZmluZSBJU0FfRE1BX01PREVfV1JJVEUJMHg0OAorI2RlZmluZSBJU0FfRE1BX01PREVfQ0FTQ0FERQkweGMwCisjZGVmaW5lIElTQV9ETUFfQVVUT0lOSVQJMHgxMAorCisjZGVmaW5lIElTQV9ETUFfTUFTSwkJMAorI2RlZmluZSBJU0FfRE1BX01PREUJCTEKKyNkZWZpbmUgSVNBX0RNQV9DTFJGRgkJMgorI2RlZmluZSBJU0FfRE1BX1BHSEkJCTMKKyNkZWZpbmUgSVNBX0RNQV9QR0xPCQk0CisjZGVmaW5lIElTQV9ETUFfQUREUgkJNQorI2RlZmluZSBJU0FfRE1BX0NPVU5UCQk2CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXNhX2RtYV9wb3J0WzhdWzddID0geworCS8qIE1BU0sgICBNT0RFICAgQ0xSRkYgIFBBR0VfSEkgUEFHRV9MTyBBRERSIENPVU5UICovCisJeyAgMHgwYSwgIDB4MGIsICAweDBjLCAgMHg0ODcsICAweDA4NywgIDB4MDAsIDB4MDEgfSwKKwl7ICAweDBhLCAgMHgwYiwgIDB4MGMsICAweDQ4MywgIDB4MDgzLCAgMHgwMiwgMHgwMyB9LAorCXsgIDB4MGEsICAweDBiLCAgMHgwYywgIDB4NDgxLCAgMHgwODEsICAweDA0LCAweDA1IH0sCisJeyAgMHgwYSwgIDB4MGIsICAweDBjLCAgMHg0ODIsICAweDA4MiwgIDB4MDYsIDB4MDcgfSwKKwl7ICAweGQ0LCAgMHhkNiwgIDB4ZDgsICAweDAwMCwgIDB4MDAwLCAgMHhjMCwgMHhjMiB9LAorCXsgIDB4ZDQsICAweGQ2LCAgMHhkOCwgIDB4NDhiLCAgMHgwOGIsICAweGM0LCAweGM2IH0sCisJeyAgMHhkNCwgIDB4ZDYsICAweGQ4LCAgMHg0ODksICAweDA4OSwgIDB4YzgsIDB4Y2EgfSwKKwl7ICAweGQ0LCAgMHhkNiwgIDB4ZDgsICAweDQ4YSwgIDB4MDhhLCAgMHhjYywgMHhjZSB9Cit9OworCitzdGF0aWMgaW50IGlzYV9nZXRfZG1hX3Jlc2lkdWUoZG1hY2hfdCBjaGFubmVsLCBkbWFfdCAqZG1hKQoreworCXVuc2lnbmVkIGludCBpb19wb3J0ID0gaXNhX2RtYV9wb3J0W2NoYW5uZWxdW0lTQV9ETUFfQ09VTlRdOworCWludCBjb3VudDsKKworCWNvdW50ID0gMSArIGluYihpb19wb3J0KTsKKwljb3VudCB8PSBpbmIoaW9fcG9ydCkgPDwgODsKKworCXJldHVybiBjaGFubmVsIDwgNCA/IGNvdW50IDogKGNvdW50IDw8IDEpOworfQorCitzdGF0aWMgdm9pZCBpc2FfZW5hYmxlX2RtYShkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCit7CisJaWYgKGRtYS0+aW52YWxpZCkgeworCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGxlbmd0aDsKKwkJdW5zaWduZWQgaW50IG1vZGUsIGRpcmVjdGlvbjsKKworCQltb2RlID0gY2hhbm5lbCAmIDM7CisJCXN3aXRjaCAoZG1hLT5kbWFfbW9kZSAmIERNQV9NT0RFX01BU0spIHsKKwkJY2FzZSBETUFfTU9ERV9SRUFEOgorCQkJbW9kZSB8PSBJU0FfRE1BX01PREVfUkVBRDsKKwkJCWRpcmVjdGlvbiA9IFBDSV9ETUFfRlJPTURFVklDRTsKKwkJCWJyZWFrOworCisJCWNhc2UgRE1BX01PREVfV1JJVEU6CisJCQltb2RlIHw9IElTQV9ETUFfTU9ERV9XUklURTsKKwkJCWRpcmVjdGlvbiA9IFBDSV9ETUFfVE9ERVZJQ0U7CisJCQlicmVhazsKKworCQljYXNlIERNQV9NT0RFX0NBU0NBREU6CisJCQltb2RlIHw9IElTQV9ETUFfTU9ERV9DQVNDQURFOworCQkJZGlyZWN0aW9uID0gUENJX0RNQV9CSURJUkVDVElPTkFMOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWRpcmVjdGlvbiA9IFBDSV9ETUFfTk9ORTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKCFkbWEtPnVzaW5nX3NnKSB7CisJCQkvKgorCQkJICogQ29wZSB3aXRoIElTQS1zdHlsZSBkcml2ZXJzIHdoaWNoIGV4cGVjdCBjYWNoZQorCQkJICogY29oZXJlbmNlLgorCQkJICovCisJCQlkbWEtPmJ1Zi5kbWFfYWRkcmVzcyA9IHBjaV9tYXBfc2luZ2xlKE5VTEwsCisJCQkJZG1hLT5idWYuX19hZGRyZXNzLCBkbWEtPmJ1Zi5sZW5ndGgsCisJCQkJZGlyZWN0aW9uKTsKKwkJfQorCisJCWFkZHJlc3MgPSBkbWEtPmJ1Zi5kbWFfYWRkcmVzczsKKwkJbGVuZ3RoICA9IGRtYS0+YnVmLmxlbmd0aCAtIDE7CisKKwkJb3V0YihhZGRyZXNzID4+IDE2LCBpc2FfZG1hX3BvcnRbY2hhbm5lbF1bSVNBX0RNQV9QR0xPXSk7CisJCW91dGIoYWRkcmVzcyA+PiAyNCwgaXNhX2RtYV9wb3J0W2NoYW5uZWxdW0lTQV9ETUFfUEdISV0pOworCisJCWlmIChjaGFubmVsID49IDQpIHsKKwkJCWFkZHJlc3MgPj49IDE7CisJCQlsZW5ndGggPj49IDE7CisJCX0KKworCQlvdXRiKDAsIGlzYV9kbWFfcG9ydFtjaGFubmVsXVtJU0FfRE1BX0NMUkZGXSk7CisKKwkJb3V0YihhZGRyZXNzLCBpc2FfZG1hX3BvcnRbY2hhbm5lbF1bSVNBX0RNQV9BRERSXSk7CisJCW91dGIoYWRkcmVzcyA+PiA4LCBpc2FfZG1hX3BvcnRbY2hhbm5lbF1bSVNBX0RNQV9BRERSXSk7CisKKwkJb3V0YihsZW5ndGgsIGlzYV9kbWFfcG9ydFtjaGFubmVsXVtJU0FfRE1BX0NPVU5UXSk7CisJCW91dGIobGVuZ3RoID4+IDgsIGlzYV9kbWFfcG9ydFtjaGFubmVsXVtJU0FfRE1BX0NPVU5UXSk7CisKKwkJaWYgKGRtYS0+ZG1hX21vZGUgJiBETUFfQVVUT0lOSVQpCisJCQltb2RlIHw9IElTQV9ETUFfQVVUT0lOSVQ7CisKKwkJb3V0Yihtb2RlLCBpc2FfZG1hX3BvcnRbY2hhbm5lbF1bSVNBX0RNQV9NT0RFXSk7CisJCWRtYS0+aW52YWxpZCA9IDA7CisJfQorCW91dGIoY2hhbm5lbCAmIDMsIGlzYV9kbWFfcG9ydFtjaGFubmVsXVtJU0FfRE1BX01BU0tdKTsKK30KKworc3RhdGljIHZvaWQgaXNhX2Rpc2FibGVfZG1hKGRtYWNoX3QgY2hhbm5lbCwgZG1hX3QgKmRtYSkKK3sKKwlvdXRiKGNoYW5uZWwgfCA0LCBpc2FfZG1hX3BvcnRbY2hhbm5lbF1bSVNBX0RNQV9NQVNLXSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX29wcyBpc2FfZG1hX29wcyA9IHsKKwkudHlwZQkJPSAiSVNBIiwKKwkuZW5hYmxlCQk9IGlzYV9lbmFibGVfZG1hLAorCS5kaXNhYmxlCT0gaXNhX2Rpc2FibGVfZG1hLAorCS5yZXNpZHVlCT0gaXNhX2dldF9kbWFfcmVzaWR1ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZG1hX3Jlc291cmNlc1tdID0geworCXsgImRtYTEiLAkJMHgwMDAwLCAweDAwMGYgfSwKKwl7ICJkbWEgbG93IHBhZ2UiLCAJMHgwMDgwLCAweDAwOGYgfSwKKwl7ICJkbWEyIiwJCTB4MDBjMCwgMHgwMGRmIH0sCisJeyAiZG1hIGhpZ2ggcGFnZSIsCTB4MDQ4MCwgMHgwNDhmIH0KK307CisKK3ZvaWQgX19pbml0IGlzYV9pbml0X2RtYShkbWFfdCAqZG1hKQoreworCS8qCisJICogVHJ5IHRvIGF1dG9kZXRlY3QgcHJlc2VuY2Ugb2YgYW4gSVNBIERNQSBjb250cm9sbGVyLgorCSAqIFdlIGRvIHNvbWUgbWluaW1hbCBpbml0aWFsaXNhdGlvbiwgYW5kIGNoZWNrIHRoYXQKKwkgKiBjaGFubmVsIDAncyBETUEgYWRkcmVzcyByZWdpc3RlcnMgYXJlIHdyaXRlYWJsZS4KKwkgKi8KKwlvdXRiKDB4ZmYsIDB4MGQpOworCW91dGIoMHhmZiwgMHhkYSk7CisKKwkvKgorCSAqIFdyaXRlIGhpZ2ggYW5kIGxvdyBhZGRyZXNzLCBhbmQgdGhlbiByZWFkIHRoZW0gYmFjaworCSAqIGluIHRoZSBzYW1lIG9yZGVyLgorCSAqLworCW91dGIoMHg1NSwgMHgwMCk7CisJb3V0YigweGFhLCAweDAwKTsKKworCWlmIChpbmIoMCkgPT0gMHg1NSAmJiBpbmIoMCkgPT0gMHhhYSkgeworCQlpbnQgY2hhbm5lbCwgaTsKKworCQlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgODsgY2hhbm5lbCsrKSB7CisJCQlkbWFbY2hhbm5lbF0uZF9vcHMgPSAmaXNhX2RtYV9vcHM7CisJCQlpc2FfZGlzYWJsZV9kbWEoY2hhbm5lbCwgTlVMTCk7CisJCX0KKworCQlvdXRiKDB4NDAsIDB4MGIpOworCQlvdXRiKDB4NDEsIDB4MGIpOworCQlvdXRiKDB4NDIsIDB4MGIpOworCQlvdXRiKDB4NDMsIDB4MGIpOworCisJCW91dGIoMHhjMCwgMHhkNik7CisJCW91dGIoMHg0MSwgMHhkNik7CisJCW91dGIoMHg0MiwgMHhkNik7CisJCW91dGIoMHg0MywgMHhkNik7CisKKwkJb3V0YigwLCAweGQ0KTsKKworCQlvdXRiKDB4MTAsIDB4MDgpOworCQlvdXRiKDB4MTAsIDB4ZDApOworCisJCS8qCisJCSAqIElzIHRoaXMgY29ycmVjdD8gIEFjY29yZGluZyB0byBteSBkb2N1bWVudGF0aW9uLCBpdAorCQkgKiBkb2Vzbid0IGFwcGVhciB0byBiZS4gIEl0IHNob3VsZCBiZToKKwkJICogIG91dGIoMHgzZiwgMHg0MGIpOyBvdXRiKDB4M2YsIDB4NGQ2KTsKKwkJICovCisJCW91dGIoMHgzMCwgMHg0MGIpOworCQlvdXRiKDB4MzEsIDB4NDBiKTsKKwkJb3V0YigweDMyLCAweDQwYik7CisJCW91dGIoMHgzMywgMHg0MGIpOworCQlvdXRiKDB4MzEsIDB4NGQ2KTsKKwkJb3V0YigweDMyLCAweDRkNik7CisJCW91dGIoMHgzMywgMHg0ZDYpOworCisJCXJlcXVlc3RfZG1hKERNQV9JU0FfQ0FTQ0FERSwgImNhc2NhZGUiKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGRtYV9yZXNvdXJjZXMpIC8gc2l6ZW9mKGRtYV9yZXNvdXJjZXNbMF0pOyBpKyspCisJCQlyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsIGRtYV9yZXNvdXJjZXMgKyBpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZG1hLmMgYi9hcmNoL2FybS9rZXJuZWwvZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI3ODgzOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9kbWEuYwpAQCAtMCwwICsxLDMwMiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvZG1hLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDAgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgRnJvbnQtZW5kIHRvIHRoZSBETUEgaGFuZGxpbmcuICBUaGlzIGhhbmRsZXMgdGhlIGFsbG9jYXRpb24vZnJlZWluZworICogIG9mIERNQSBjaGFubmVscywgYW5kIHByb3ZpZGVzIGEgdW5pZmllZCBpbnRlcmZhY2UgdG8gdGhlIG1hY2hpbmVzCisgKiAgRE1BIGZhY2lsaXRpZXMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKyNpbmNsdWRlIDxhc20vZG1hLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9kbWEuaD4KKworREVGSU5FX1NQSU5MT0NLKGRtYV9zcGluX2xvY2spOworCisjaWYgTUFYX0RNQV9DSEFOTkVMUyA+IDAKKworc3RhdGljIGRtYV90IGRtYV9jaGFuW01BWF9ETUFfQ0hBTk5FTFNdOworCisvKgorICogR2V0IGRtYSBsaXN0IGZvciAvcHJvYy9kbWEKKyAqLworaW50IGdldF9kbWFfbGlzdChjaGFyICpidWYpCit7CisJZG1hX3QgKmRtYTsKKwljaGFyICpwID0gYnVmOworCWludCBpOworCisJZm9yIChpID0gMCwgZG1hID0gZG1hX2NoYW47IGkgPCBNQVhfRE1BX0NIQU5ORUxTOyBpKyssIGRtYSsrKQorCQlpZiAoZG1hLT5sb2NrKQorCQkJcCArPSBzcHJpbnRmKHAsICIlMmQ6ICUxNHMgJXNcbiIsIGksCisJCQkJICAgICBkbWEtPmRfb3BzLT50eXBlLCBkbWEtPmRldmljZV9pZCk7CisKKwlyZXR1cm4gcCAtIGJ1ZjsKK30KKworLyoKKyAqIFJlcXVlc3QgRE1BIGNoYW5uZWwKKyAqCisgKiBPbiBjZXJ0YWluIHBsYXRmb3Jtcywgd2UgaGF2ZSB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgYXMgd2VsbC4uLgorICovCitpbnQgcmVxdWVzdF9kbWEoZG1hY2hfdCBjaGFubmVsLCBjb25zdCBjaGFyICpkZXZpY2VfaWQpCit7CisJZG1hX3QgKmRtYSA9IGRtYV9jaGFuICsgY2hhbm5lbDsKKwlpbnQgcmV0OworCisJaWYgKGNoYW5uZWwgPj0gTUFYX0RNQV9DSEFOTkVMUyB8fCAhZG1hLT5kX29wcykKKwkJZ290byBiYWRfZG1hOworCisJaWYgKHhjaGcoJmRtYS0+bG9jaywgMSkgIT0gMCkKKwkJZ290byBidXN5OworCisJZG1hLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CisJZG1hLT5hY3RpdmUgICAgPSAwOworCWRtYS0+aW52YWxpZCAgID0gMTsKKworCXJldCA9IDA7CisJaWYgKGRtYS0+ZF9vcHMtPnJlcXVlc3QpCisJCXJldCA9IGRtYS0+ZF9vcHMtPnJlcXVlc3QoY2hhbm5lbCwgZG1hKTsKKworCWlmIChyZXQpCisJCXhjaGcoJmRtYS0+bG9jaywgMCk7CisKKwlyZXR1cm4gcmV0OworCitiYWRfZG1hOgorCXByaW50ayhLRVJOX0VSUiAiZG1hOiB0cnlpbmcgdG8gYWxsb2NhdGUgRE1BJWRcbiIsIGNoYW5uZWwpOworCXJldHVybiAtRUlOVkFMOworCitidXN5OgorCXJldHVybiAtRUJVU1k7Cit9CisKKy8qCisgKiBGcmVlIERNQSBjaGFubmVsCisgKgorICogT24gY2VydGFpbiBwbGF0Zm9ybXMsIHdlIGhhdmUgdG8gZnJlZSBpbnRlcnJ1cHQgYXMgd2VsbC4uLgorICovCit2b2lkIGZyZWVfZG1hKGRtYWNoX3QgY2hhbm5lbCkKK3sKKwlkbWFfdCAqZG1hID0gZG1hX2NoYW4gKyBjaGFubmVsOworCisJaWYgKGNoYW5uZWwgPj0gTUFYX0RNQV9DSEFOTkVMUyB8fCAhZG1hLT5kX29wcykKKwkJZ290byBiYWRfZG1hOworCisJaWYgKGRtYS0+YWN0aXZlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IGZyZWVpbmcgYWN0aXZlIERNQVxuIiwgY2hhbm5lbCk7CisJCWRtYS0+ZF9vcHMtPmRpc2FibGUoY2hhbm5lbCwgZG1hKTsKKwkJZG1hLT5hY3RpdmUgPSAwOworCX0KKworCWlmICh4Y2hnKCZkbWEtPmxvY2ssIDApICE9IDApIHsKKwkJaWYgKGRtYS0+ZF9vcHMtPmZyZWUpCisJCQlkbWEtPmRfb3BzLT5mcmVlKGNoYW5uZWwsIGRtYSk7CisJCXJldHVybjsKKwl9CisKKwlwcmludGsoS0VSTl9FUlIgImRtYSVkOiB0cnlpbmcgdG8gZnJlZSBmcmVlIERNQVxuIiwgY2hhbm5lbCk7CisJcmV0dXJuOworCitiYWRfZG1hOgorCXByaW50ayhLRVJOX0VSUiAiZG1hOiB0cnlpbmcgdG8gZnJlZSBETUElZFxuIiwgY2hhbm5lbCk7Cit9CisKKy8qIFNldCBETUEgU2NhdHRlci1HYXRoZXIgbGlzdAorICovCit2b2lkIHNldF9kbWFfc2cgKGRtYWNoX3QgY2hhbm5lbCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5yX3NnKQoreworCWRtYV90ICpkbWEgPSBkbWFfY2hhbiArIGNoYW5uZWw7CisKKwlpZiAoZG1hLT5hY3RpdmUpCisJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IGFsdGVyaW5nIERNQSBTRyB3aGlsZSAiCisJCSAgICAgICAiRE1BIGFjdGl2ZVxuIiwgY2hhbm5lbCk7CisKKwlkbWEtPnNnID0gc2c7CisJZG1hLT5zZ2NvdW50ID0gbnJfc2c7CisJZG1hLT51c2luZ19zZyA9IDE7CisJZG1hLT5pbnZhbGlkID0gMTsKK30KKworLyogU2V0IERNQSBhZGRyZXNzCisgKgorICogQ29weSBhZGRyZXNzIHRvIHRoZSBzdHJ1Y3R1cmUsIGFuZCBzZXQgdGhlIGludmFsaWQgYml0CisgKi8KK3ZvaWQgc2V0X2RtYV9hZGRyIChkbWFjaF90IGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIpCit7CisJZG1hX3QgKmRtYSA9IGRtYV9jaGFuICsgY2hhbm5lbDsKKworCWlmIChkbWEtPmFjdGl2ZSkKKwkJcHJpbnRrKEtFUk5fRVJSICJkbWElZDogYWx0ZXJpbmcgRE1BIGFkZHJlc3Mgd2hpbGUgIgorCQkgICAgICAgIkRNQSBhY3RpdmVcbiIsIGNoYW5uZWwpOworCisJZG1hLT5zZyA9ICZkbWEtPmJ1ZjsKKwlkbWEtPnNnY291bnQgPSAxOworCWRtYS0+YnVmLl9fYWRkcmVzcyA9IGJ1c190b192aXJ0KHBoeXNhZGRyKTsKKwlkbWEtPnVzaW5nX3NnID0gMDsKKwlkbWEtPmludmFsaWQgPSAxOworfQorCisvKiBTZXQgRE1BIGJ5dGUgY291bnQKKyAqCisgKiBDb3B5IGFkZHJlc3MgdG8gdGhlIHN0cnVjdHVyZSwgYW5kIHNldCB0aGUgaW52YWxpZCBiaXQKKyAqLwordm9pZCBzZXRfZG1hX2NvdW50IChkbWFjaF90IGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJZG1hX3QgKmRtYSA9IGRtYV9jaGFuICsgY2hhbm5lbDsKKworCWlmIChkbWEtPmFjdGl2ZSkKKwkJcHJpbnRrKEtFUk5fRVJSICJkbWElZDogYWx0ZXJpbmcgRE1BIGNvdW50IHdoaWxlICIKKwkJICAgICAgICJETUEgYWN0aXZlXG4iLCBjaGFubmVsKTsKKworCWRtYS0+c2cgPSAmZG1hLT5idWY7CisJZG1hLT5zZ2NvdW50ID0gMTsKKwlkbWEtPmJ1Zi5sZW5ndGggPSBjb3VudDsKKwlkbWEtPnVzaW5nX3NnID0gMDsKKwlkbWEtPmludmFsaWQgPSAxOworfQorCisvKiBTZXQgRE1BIGRpcmVjdGlvbiBtb2RlCisgKi8KK3ZvaWQgc2V0X2RtYV9tb2RlIChkbWFjaF90IGNoYW5uZWwsIGRtYW1vZGVfdCBtb2RlKQoreworCWRtYV90ICpkbWEgPSBkbWFfY2hhbiArIGNoYW5uZWw7CisKKwlpZiAoZG1hLT5hY3RpdmUpCisJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IGFsdGVyaW5nIERNQSBtb2RlIHdoaWxlICIKKwkJICAgICAgICJETUEgYWN0aXZlXG4iLCBjaGFubmVsKTsKKworCWRtYS0+ZG1hX21vZGUgPSBtb2RlOworCWRtYS0+aW52YWxpZCA9IDE7Cit9CisKKy8qIEVuYWJsZSBETUEgY2hhbm5lbAorICovCit2b2lkIGVuYWJsZV9kbWEgKGRtYWNoX3QgY2hhbm5lbCkKK3sKKwlkbWFfdCAqZG1hID0gZG1hX2NoYW4gKyBjaGFubmVsOworCisJaWYgKCFkbWEtPmxvY2spCisJCWdvdG8gZnJlZV9kbWE7CisKKwlpZiAoZG1hLT5hY3RpdmUgPT0gMCkgeworCQlkbWEtPmFjdGl2ZSA9IDE7CisJCWRtYS0+ZF9vcHMtPmVuYWJsZShjaGFubmVsLCBkbWEpOworCX0KKwlyZXR1cm47CisKK2ZyZWVfZG1hOgorCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IHRyeWluZyB0byBlbmFibGUgZnJlZSBETUFcbiIsIGNoYW5uZWwpOworCUJVRygpOworfQorCisvKiBEaXNhYmxlIERNQSBjaGFubmVsCisgKi8KK3ZvaWQgZGlzYWJsZV9kbWEgKGRtYWNoX3QgY2hhbm5lbCkKK3sKKwlkbWFfdCAqZG1hID0gZG1hX2NoYW4gKyBjaGFubmVsOworCisJaWYgKCFkbWEtPmxvY2spCisJCWdvdG8gZnJlZV9kbWE7CisKKwlpZiAoZG1hLT5hY3RpdmUgPT0gMSkgeworCQlkbWEtPmFjdGl2ZSA9IDA7CisJCWRtYS0+ZF9vcHMtPmRpc2FibGUoY2hhbm5lbCwgZG1hKTsKKwl9CisJcmV0dXJuOworCitmcmVlX2RtYToKKwlwcmludGsoS0VSTl9FUlIgImRtYSVkOiB0cnlpbmcgdG8gZGlzYWJsZSBmcmVlIERNQVxuIiwgY2hhbm5lbCk7CisJQlVHKCk7Cit9CisKKy8qCisgKiBJcyB0aGUgc3BlY2lmaWVkIERNQSBjaGFubmVsIGFjdGl2ZT8KKyAqLworaW50IGRtYV9jaGFubmVsX2FjdGl2ZShkbWFjaF90IGNoYW5uZWwpCit7CisJcmV0dXJuIGRtYV9jaGFuW2NoYW5uZWxdLmFjdGl2ZTsKK30KKwordm9pZCBzZXRfZG1hX3BhZ2UoZG1hY2hfdCBjaGFubmVsLCBjaGFyIHBhZ2VucikKK3sKKwlwcmludGsoS0VSTl9FUlIgImRtYSVkOiB0cnlpbmcgdG8gc2V0X2RtYV9wYWdlXG4iLCBjaGFubmVsKTsKK30KKwordm9pZCBzZXRfZG1hX3NwZWVkKGRtYWNoX3QgY2hhbm5lbCwgaW50IGN5Y2xlX25zKQoreworCWRtYV90ICpkbWEgPSBkbWFfY2hhbiArIGNoYW5uZWw7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZG1hLT5kX29wcy0+c2V0c3BlZWQpCisJCXJldCA9IGRtYS0+ZF9vcHMtPnNldHNwZWVkKGNoYW5uZWwsIGRtYSwgY3ljbGVfbnMpOworCWRtYS0+c3BlZWQgPSByZXQ7Cit9CisKK2ludCBnZXRfZG1hX3Jlc2lkdWUoZG1hY2hfdCBjaGFubmVsKQoreworCWRtYV90ICpkbWEgPSBkbWFfY2hhbiArIGNoYW5uZWw7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZG1hLT5kX29wcy0+cmVzaWR1ZSkKKwkJcmV0ID0gZG1hLT5kX29wcy0+cmVzaWR1ZShjaGFubmVsLCBkbWEpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBfX2luaXQgaW5pdF9kbWEodm9pZCkKK3sKKwlhcmNoX2RtYV9pbml0KGRtYV9jaGFuKTsKK30KKworI2Vsc2UKKworaW50IHJlcXVlc3RfZG1hKGRtYWNoX3QgY2hhbm5lbCwgY29uc3QgY2hhciAqZGV2aWNlX2lkKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitpbnQgZ2V0X2RtYV9yZXNpZHVlKGRtYWNoX3QgY2hhbm5lbCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBHTE9CQUxfQUxJQVMoX2EsX2IpIGFzbSAoIi5zZXQgIiAjX2EgIiwiICNfYiAiOyAuZ2xvYmwgIiAjX2EpCitHTE9CQUxfQUxJQVMoZGlzYWJsZV9kbWEsIGdldF9kbWFfcmVzaWR1ZSk7CitHTE9CQUxfQUxJQVMoZW5hYmxlX2RtYSwgZ2V0X2RtYV9yZXNpZHVlKTsKK0dMT0JBTF9BTElBUyhmcmVlX2RtYSwgZ2V0X2RtYV9yZXNpZHVlKTsKK0dMT0JBTF9BTElBUyhnZXRfZG1hX2xpc3QsIGdldF9kbWFfcmVzaWR1ZSk7CitHTE9CQUxfQUxJQVMoc2V0X2RtYV9tb2RlLCBnZXRfZG1hX3Jlc2lkdWUpOworR0xPQkFMX0FMSUFTKHNldF9kbWFfcGFnZSwgZ2V0X2RtYV9yZXNpZHVlKTsKK0dMT0JBTF9BTElBUyhzZXRfZG1hX2NvdW50LCBnZXRfZG1hX3Jlc2lkdWUpOworR0xPQkFMX0FMSUFTKHNldF9kbWFfYWRkciwgZ2V0X2RtYV9yZXNpZHVlKTsKK0dMT0JBTF9BTElBUyhzZXRfZG1hX3NnLCBnZXRfZG1hX3Jlc2lkdWUpOworR0xPQkFMX0FMSUFTKHNldF9kbWFfc3BlZWQsIGdldF9kbWFfcmVzaWR1ZSk7CitHTE9CQUxfQUxJQVMoaW5pdF9kbWEsIGdldF9kbWFfcmVzaWR1ZSk7CisKKyNlbmRpZgorCitFWFBPUlRfU1lNQk9MKHJlcXVlc3RfZG1hKTsKK0VYUE9SVF9TWU1CT0woZnJlZV9kbWEpOworRVhQT1JUX1NZTUJPTChlbmFibGVfZG1hKTsKK0VYUE9SVF9TWU1CT0woZGlzYWJsZV9kbWEpOworRVhQT1JUX1NZTUJPTChzZXRfZG1hX2FkZHIpOworRVhQT1JUX1NZTUJPTChzZXRfZG1hX2NvdW50KTsKK0VYUE9SVF9TWU1CT0woc2V0X2RtYV9tb2RlKTsKK0VYUE9SVF9TWU1CT0woc2V0X2RtYV9wYWdlKTsKK0VYUE9SVF9TWU1CT0woZ2V0X2RtYV9yZXNpZHVlKTsKK0VYUE9SVF9TWU1CT0woc2V0X2RtYV9zZyk7CitFWFBPUlRfU1lNQk9MKHNldF9kbWFfc3BlZWQpOworCitFWFBPUlRfU1lNQk9MKGRtYV9zcGluX2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VjYXJkLmMgYi9hcmNoL2FybS9rZXJuZWwvZWNhcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGMxNWIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL2VjYXJkLmMKQEAgLTAsMCArMSwxMjEwIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9lY2FyZC5jCisgKgorICogIENvcHlyaWdodCAxOTk1LTIwMDEgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgRmluZCBhbGwgaW5zdGFsbGVkIGV4cGFuc2lvbiBjYXJkcywgYW5kIGhhbmRsZSBpbnRlcnJ1cHRzIGZyb20gdGhlbS4KKyAqCisgKiAgQ3JlYXRlZCBmcm9tIGluZm9ybWF0aW9uIGZyb20gQWNvcm5zIFJpc2NPUzMgUFJNcworICoKKyAqICAwOC1EZWMtMTk5NglSTUsJQWRkZWQgY29kZSBmb3IgdGhlIDkndGggZXhwYW5zaW9uIGNhcmQgLSB0aGUgZXRoZXIKKyAqCQkJcG9kdWxlIHNsb3QuCisgKiAgMDYtTWF5LTE5OTcJUk1LCUFkZGVkIGJsYWNrbGlzdCBmb3IgY2FyZHMgd2hvc2UgbG9hZGVyIGRvZXNuJ3Qgd29yay4KKyAqICAxMi1TZXAtMTk5NwlSTUsJQ3JlYXRlZCBuZXcgaGFuZGxpbmcgb2YgaW50ZXJydXB0IGVuYWJsZXMvZGlzYWJsZXMKKyAqCQkJLSBjYXJkcyBjYW4gbm93IHJlZ2lzdGVyIHRoZWlyIG93biByb3V0aW5lIHRvIGNvbnRyb2wKKyAqCQkJaW50ZXJydXB0cyAocmVjb21tZW5kZWQpLgorICogIDI5LVNlcC0xOTk3CVJNSwlFeHBhbnNpb24gY2FyZCBpbnRlcnJ1cHQgaGFyZHdhcmUgbm90IGJlaW5nIHJlLWVuYWJsZWQKKyAqCQkJb24gcmVzZXQgZnJvbSBMaW51eC4gKENhdXNlZCBjYXJkcyBub3QgdG8gcmVzcG9uZAorICoJCQl1bmRlciBSaXNjT1Mgd2l0aG91dCBoYXJkIHJlc2V0KS4KKyAqICAxNS1GZWItMTk5OAlSTUsJQWRkZWQgRE1BIHN1cHBvcnQKKyAqICAxMi1TZXAtMTk5OAlSTUsJQWRkZWQgRUFTSSBzdXBwb3J0CisgKiAgMTAtSmFuLTE5OTkJUk1LCVJ1biBsb2FkZXJzIGluIGEgc2ltdWxhdGVkIFJJU0MgT1MgZW52aXJvbm1lbnQuCisgKiAgMTctQXByLTE5OTkJUk1LCVN1cHBvcnQgZm9yIEVBU0kgVHlwZSBDIGN5Y2xlcy4KKyAqLworI2RlZmluZSBFQ0FSRF9DCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL2VjYXJkLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorCisjaWZuZGVmIENPTkZJR19BUkNIX1JQQworI2RlZmluZSBIQVZFX0VYUE1BU0sKKyNlbmRpZgorCitzdHJ1Y3QgZWNhcmRfcmVxdWVzdCB7CisJdm9pZAkJKCpmbikoc3RydWN0IGVjYXJkX3JlcXVlc3QgKik7CisJZWNhcmRfdAkJKmVjOworCXVuc2lnbmVkIGludAlhZGRyZXNzOworCXVuc2lnbmVkIGludAlsZW5ndGg7CisJdW5zaWduZWQgaW50CXVzZV9sb2FkZXI7CisJdm9pZAkJKmJ1ZmZlcjsKKwlzdHJ1Y3QgY29tcGxldGlvbiAqY29tcGxldGU7Cit9OworCitzdHJ1Y3QgZXhwY2FyZF9ibGFja2xpc3QgeworCXVuc2lnbmVkIHNob3J0CSBtYW51ZmFjdHVyZXI7CisJdW5zaWduZWQgc2hvcnQJIHByb2R1Y3Q7CisJY29uc3QgY2hhcgkqdHlwZTsKK307CisKK3N0YXRpYyBlY2FyZF90ICpjYXJkczsKK3N0YXRpYyBlY2FyZF90ICpzbG90X3RvX2V4cGNhcmRbTUFYX0VDQVJEU107CitzdGF0aWMgdW5zaWduZWQgaW50IGVjdGNyOworI2lmZGVmIEhBU19FWFBNQVNLCitzdGF0aWMgdW5zaWduZWQgaW50IGhhdmVfZXhwbWFzazsKKyNlbmRpZgorCisvKiBMaXN0IG9mIGRlc2NyaXB0aW9ucyBvZiBjYXJkcyB3aGljaCBkb24ndCBoYXZlIGFuIGV4dGVuZGVkCisgKiBpZGVudGlmaWNhdGlvbiwgb3IgY2h1bmsgZGlyZWN0b3JpZXMgY29udGFpbmluZyBhIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgc3RydWN0IGV4cGNhcmRfYmxhY2tsaXN0IF9faW5pdGRhdGEgYmxhY2tsaXN0W10gPSB7CisJeyBNQU5VX0FDT1JOLCBQUk9EX0FDT1JOX0VUSEVSMSwgIkFjb3JuIEV0aGVyMSIgfQorfTsKKworYXNtbGlua2FnZSBleHRlcm4gaW50CitlY2FyZF9sb2FkZXJfcmVzZXQodW5zaWduZWQgbG9uZyBiYXNlLCBsb2FkZXJfdCBsb2FkZXIpOworYXNtbGlua2FnZSBleHRlcm4gaW50CitlY2FyZF9sb2FkZXJfcmVhZChpbnQgb2ZmLCB1bnNpZ25lZCBsb25nIGJhc2UsIGxvYWRlcl90IGxvYWRlcik7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgZWNhcmRfZ2V0dTE2KHVuc2lnbmVkIGNoYXIgKnYpCit7CisJcmV0dXJuIHZbMF0gfCB2WzFdIDw8IDg7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2lnbmVkIGxvbmcgZWNhcmRfZ2V0czI0KHVuc2lnbmVkIGNoYXIgKnYpCit7CisJcmV0dXJuIHZbMF0gfCB2WzFdIDw8IDggfCB2WzJdIDw8IDE2IHwgKCh2WzJdICYgMHg4MCkgPyAweGZmMDAwMDAwIDogMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZWNhcmRfdCAqc2xvdF90b19lY2FyZCh1bnNpZ25lZCBpbnQgc2xvdCkKK3sKKwlyZXR1cm4gc2xvdCA8IE1BWF9FQ0FSRFMgPyBzbG90X3RvX2V4cGNhcmRbc2xvdF0gOiBOVUxMOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT0gRXhwYW5zaW9uIGNhcmQgZGFlbW9uID09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyoKKyAqIFNpbmNlIHRoZSBsb2FkZXIgcHJvZ3JhbXMgb24gdGhlIGV4cGFuc2lvbiBjYXJkcyBuZWVkIHRvIGJlIHJ1bgorICogaW4gYSBzcGVjaWZpYyBlbnZpcm9ubWVudCwgY3JlYXRlIGEgc2VwYXJhdGUgdGFzayB3aXRoIHRoaXMKKyAqIGVudmlyb25tZW50IHVwLCBhbmQgcGFzcyByZXF1ZXN0cyB0byB0aGlzIHRhc2sgYXMgYW5kIHdoZW4gd2UKKyAqIG5lZWQgdG8uCisgKgorICogVGhpcyBzaG91bGQgYWxsb3cgOTklIG9mIGxvYWRlcnMgdG8gYmUgY2FsbGVkIGZyb20gTGludXguCisgKgorICogRnJvbSBhIHNlY3VyaXR5IHN0YW5kcG9pbnQsIHdlIHRydXN0IHRoZSBjYXJkIHZlbmRvcnMuICBUaGlzCisgKiBtYXkgYmUgYSBtaXNwbGFjZWQgdHJ1c3QuCisgKi8KK3N0YXRpYyB2b2lkIGVjYXJkX3Rhc2tfcmVzZXQoc3RydWN0IGVjYXJkX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjID0gcmVxLT5lYzsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCXJlcyA9IGVjLT5zbG90X25vID09IDgKKwkJPyAmZWMtPnJlc291cmNlW0VDQVJEX1JFU19NRU1DXQorCQk6IGVjLT50eXBlID09IEVDQVJEX0VBU0kKKwkJICA/ICZlYy0+cmVzb3VyY2VbRUNBUkRfUkVTX0VBU0ldCisJCSAgOiAmZWMtPnJlc291cmNlW0VDQVJEX1JFU19JT0NTWU5DXTsKKworCWVjYXJkX2xvYWRlcl9yZXNldChyZXMtPnN0YXJ0LCBlYy0+bG9hZGVyKTsKK30KKworc3RhdGljIHZvaWQgZWNhcmRfdGFza19yZWFkYnl0ZXMoc3RydWN0IGVjYXJkX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjID0gcmVxLT5lYzsKKwl1bnNpZ25lZCBjaGFyICpidWYgPSByZXEtPmJ1ZmZlcjsKKwl1bnNpZ25lZCBpbnQgbGVuID0gcmVxLT5sZW5ndGg7CisJdW5zaWduZWQgaW50IG9mZiA9IHJlcS0+YWRkcmVzczsKKworCWlmIChlYy0+c2xvdF9ubyA9PSA4KSB7CisJCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKikKKwkJCQllYy0+cmVzb3VyY2VbRUNBUkRfUkVTX01FTUNdLnN0YXJ0OworCisJCS8qCisJCSAqIFRoZSBjYXJkIG1haW50YWlucyBhbiBpbmRleCB3aGljaCBpbmNyZW1lbnRzIHRoZSBhZGRyZXNzCisJCSAqIGludG8gYSA0MDk2LWJ5dGUgcGFnZSBvbiBlYWNoIGFjY2Vzcy4gIFdlIG5lZWQgdG8ga2VlcAorCQkgKiB0cmFjayBvZiB0aGUgY291bnRlci4KKwkJICovCisJCXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5kZXg7CisJCXVuc2lnbmVkIGludCBwYWdlOworCisJCXBhZ2UgPSAob2ZmID4+IDEyKSAqIDQ7CisJCWlmIChwYWdlID4gMjU2ICogNCkKKwkJCXJldHVybjsKKworCQlvZmYgJj0gNDA5NTsKKworCQkvKgorCQkgKiBJZiB3ZSBhcmUgcmVhZGluZyBvZmZzZXQgMCwgb3Igb3VyIGN1cnJlbnQgaW5kZXggaXMKKwkJICogZ3JlYXRlciB0aGFuIHRoZSBvZmZzZXQsIHJlc2V0IHRoZSBoYXJkd2FyZSBpbmRleCBjb3VudGVyLgorCQkgKi8KKwkJaWYgKG9mZiA9PSAwIHx8IGluZGV4ID4gb2ZmKSB7CisJCQl3cml0ZWIoMCwgYmFzZSk7CisJCQlpbmRleCA9IDA7CisJCX0KKworCQkvKgorCQkgKiBJbmNyZW1lbnQgdGhlIGhhcmR3YXJlIGluZGV4IGNvdW50ZXIgdW50aWwgd2UgZ2V0IHRvIHRoZQorCQkgKiByZXF1aXJlZCBvZmZzZXQuICBUaGUgcmVhZCBieXRlcyBhcmUgZGlzY2FyZGVkLgorCQkgKi8KKwkJd2hpbGUgKGluZGV4IDwgb2ZmKSB7CisJCQlyZWFkYihiYXNlICsgcGFnZSk7CisJCQlpbmRleCArPSAxOworCQl9CisKKwkJd2hpbGUgKGxlbi0tKSB7CisJCQkqYnVmKysgPSByZWFkYihiYXNlICsgcGFnZSk7CisJCQlpbmRleCArPSAxOworCQl9CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBiYXNlID0gKGVjLT50eXBlID09IEVDQVJEX0VBU0kKKwkJCSA/ICZlYy0+cmVzb3VyY2VbRUNBUkRfUkVTX0VBU0ldCisJCQkgOiAmZWMtPnJlc291cmNlW0VDQVJEX1JFU19JT0NTWU5DXSktPnN0YXJ0OworCQl2b2lkIF9faW9tZW0gKnBiYXNlID0gKHZvaWQgX19pb21lbSAqKWJhc2U7CisKKwkJaWYgKCFyZXEtPnVzZV9sb2FkZXIgfHwgIWVjLT5sb2FkZXIpIHsKKwkJCW9mZiAqPSA0OworCQkJd2hpbGUgKGxlbi0tKSB7CisJCQkJKmJ1ZisrID0gcmVhZGIocGJhc2UgKyBvZmYpOworCQkJCW9mZiArPSA0OworCQkJfQorCQl9IGVsc2UgeworCQkJd2hpbGUobGVuLS0pIHsKKwkJCQkvKgorCQkJCSAqIFRoZSBmb2xsb3dpbmcgaXMgcmVxdWlyZWQgYnkgc29tZQorCQkJCSAqIGV4cGFuc2lvbiBjYXJkIGxvYWRlciBwcm9ncmFtcy4KKwkJCQkgKi8KKwkJCQkqKHVuc2lnbmVkIGxvbmcgKikweDEwOCA9IDA7CisJCQkJKmJ1ZisrID0gZWNhcmRfbG9hZGVyX3JlYWQob2ZmKyssIGJhc2UsCisJCQkJCQkJICAgZWMtPmxvYWRlcik7CisJCQl9CisJCX0KKwl9CisKK30KKworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGVjYXJkX3dhaXQpOworc3RhdGljIHN0cnVjdCBlY2FyZF9yZXF1ZXN0ICplY2FyZF9yZXE7CitzdGF0aWMgREVDTEFSRV9NVVRFWChlY2FyZF9zZW0pOworCisvKgorICogU2V0IHVwIHRoZSBleHBhbnNpb24gY2FyZCBkYWVtb24ncyBwYWdlIHRhYmxlcy4KKyAqLworc3RhdGljIHZvaWQgZWNhcmRfaW5pdF9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qgdm1hOworCisJLyogV2Ugd2FudCB0byBzZXQgdXAgdGhlIHBhZ2UgdGFibGVzIGZvciB0aGUgZm9sbG93aW5nIG1hcHBpbmc6CisJICogIFZpcnR1YWwJUGh5c2ljYWwKKwkgKiAgMHgwMzAwMDAwMAkweDAzMDAwMDAwCisJICogIDB4MDMwMTAwMDAJdW5tYXBwZWQKKwkgKiAgMHgwMzIxMDAwMAkweDAzMjEwMDAwCisJICogIDB4MDM0MDAwMDAJdW5tYXBwZWQKKwkgKiAgMHgwODAwMDAwMAkweDA4MDAwMDAwCisJICogIDB4MTAwMDAwMDAJdW5tYXBwZWQKKwkgKgorCSAqIEZJWE1FOiB3ZSBkb24ndCBmb2xsb3cgdGhpcyAxMDAlIHlldC4KKwkgKi8KKwlwZ2RfdCAqc3JjX3BnZCwgKmRzdF9wZ2Q7CisKKwlzcmNfcGdkID0gcGdkX29mZnNldChtbSwgKHVuc2lnbmVkIGxvbmcpSU9fQkFTRSk7CisJZHN0X3BnZCA9IHBnZF9vZmZzZXQobW0sIElPX1NUQVJUKTsKKworCW1lbWNweShkc3RfcGdkLCBzcmNfcGdkLCBzaXplb2YocGdkX3QpICogKElPX1NJWkUgLyBQR0RJUl9TSVpFKSk7CisKKwlzcmNfcGdkID0gcGdkX29mZnNldChtbSwgRUFTSV9CQVNFKTsKKwlkc3RfcGdkID0gcGdkX29mZnNldChtbSwgRUFTSV9TVEFSVCk7CisKKwltZW1jcHkoZHN0X3BnZCwgc3JjX3BnZCwgc2l6ZW9mKHBnZF90KSAqIChFQVNJX1NJWkUgLyBQR0RJUl9TSVpFKSk7CisKKwl2bWEudm1fbW0gPSBtbTsKKworCWZsdXNoX3RsYl9yYW5nZSgmdm1hLCBJT19TVEFSVCwgSU9fU1RBUlQgKyBJT19TSVpFKTsKKwlmbHVzaF90bGJfcmFuZ2UoJnZtYSwgRUFTSV9TVEFSVCwgRUFTSV9TVEFSVCArIEVBU0lfU0laRSk7Cit9CisKK3N0YXRpYyBpbnQgZWNhcmRfaW5pdF9tbSh2b2lkKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSA9IG1tX2FsbG9jKCk7CisJc3RydWN0IG1tX3N0cnVjdCAqYWN0aXZlX21tID0gY3VycmVudC0+YWN0aXZlX21tOworCisJaWYgKCFtbSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljdXJyZW50LT5tbSA9IG1tOworCWN1cnJlbnQtPmFjdGl2ZV9tbSA9IG1tOworCWFjdGl2YXRlX21tKGFjdGl2ZV9tbSwgbW0pOworCW1tZHJvcChhY3RpdmVfbW0pOworCWVjYXJkX2luaXRfcGd0YWJsZXMobW0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitlY2FyZF90YXNrKHZvaWQgKiB1bnVzZWQpCit7CisJZGFlbW9uaXplKCJrZWNhcmRkIik7CisKKwkvKgorCSAqIEFsbG9jYXRlIGEgbW0uICBXZSdyZSBub3QgYSBsYXp5LVRMQiBrZXJuZWwgdGFzayBzaW5jZSB3ZSBuZWVkCisJICogdG8gc2V0IHBhZ2UgdGFibGUgZW50cmllcyB3aGVyZSB0aGUgdXNlciBzcGFjZSB3b3VsZCBiZS4gIE5vdGUKKwkgKiB0aGF0IHRoaXMgYWxzbyBjcmVhdGVzIHRoZSBwYWdlIHRhYmxlcy4gIEZhaWx1cmUgaXMgbm90IGFuCisJICogb3B0aW9uIGhlcmUuCisJICovCisJaWYgKGVjYXJkX2luaXRfbW0oKSkKKwkJcGFuaWMoImtlY2FyZGQ6IHVuYWJsZSB0byBhbGxvYyBtbVxuIik7CisKKwl3aGlsZSAoMSkgeworCQlzdHJ1Y3QgZWNhcmRfcmVxdWVzdCAqcmVxOworCisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShlY2FyZF93YWl0LCBlY2FyZF9yZXEgIT0gTlVMTCk7CisKKwkJcmVxID0geGNoZygmZWNhcmRfcmVxLCBOVUxMKTsKKwkJaWYgKHJlcSAhPSBOVUxMKSB7CisJCQlyZXEtPmZuKHJlcSk7CisJCQljb21wbGV0ZShyZXEtPmNvbXBsZXRlKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFdha2UgdGhlIGV4cGFuc2lvbiBjYXJkIGRhZW1vbiB0byBhY3Rpb24gb3VyIHJlcXVlc3QuCisgKgorICogRklYTUU6IFRoZSB0ZXN0IGhlcmUgaXMgbm90IHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGlmIHRoZQorICoga2NhcmRkIGlzIHJ1bm5pbmcuCisgKi8KK3N0YXRpYyB2b2lkIGVjYXJkX2NhbGwoc3RydWN0IGVjYXJkX3JlcXVlc3QgKnJlcSkKK3sKKwlERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbik7CisKKwlyZXEtPmNvbXBsZXRlID0gJmNvbXBsZXRpb247CisKKwlkb3duKCZlY2FyZF9zZW0pOworCWVjYXJkX3JlcSA9IHJlcTsKKwl3YWtlX3VwKCZlY2FyZF93YWl0KTsKKworCS8qCisJICogTm93IHdhaXQgZm9yIGtlY2FyZGQgdG8gcnVuLgorCSAqLworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNvbXBsZXRpb24pOworCXVwKCZlY2FyZF9zZW0pOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PSBNaWQtbGV2ZWwgY2FyZCBjb250cm9sID09PT09PT09PT09PT09PT09PT09PSAqLworCitzdGF0aWMgdm9pZAorZWNhcmRfcmVhZGJ5dGVzKHZvaWQgKmFkZHIsIGVjYXJkX3QgKmVjLCBpbnQgb2ZmLCBpbnQgbGVuLCBpbnQgdXNlbGQpCit7CisJc3RydWN0IGVjYXJkX3JlcXVlc3QgcmVxOworCisJcmVxLmZuCQk9IGVjYXJkX3Rhc2tfcmVhZGJ5dGVzOworCXJlcS5lYwkJPSBlYzsKKwlyZXEuYWRkcmVzcwk9IG9mZjsKKwlyZXEubGVuZ3RoCT0gbGVuOworCXJlcS51c2VfbG9hZGVyCT0gdXNlbGQ7CisJcmVxLmJ1ZmZlcgk9IGFkZHI7CisKKwllY2FyZF9jYWxsKCZyZXEpOworfQorCitpbnQgZWNhcmRfcmVhZGNodW5rKHN0cnVjdCBpbl9jaHVua19kaXIgKmNkLCBlY2FyZF90ICplYywgaW50IGlkLCBpbnQgbnVtKQoreworCXN0cnVjdCBleF9jaHVua19kaXIgZXhjZDsKKwlpbnQgaW5kZXggPSAxNjsKKwlpbnQgdXNlbGQgPSAwOworCisJaWYgKCFlYy0+Y2lkLmNkKQorCQlyZXR1cm4gMDsKKworCXdoaWxlKDEpIHsKKwkJZWNhcmRfcmVhZGJ5dGVzKCZleGNkLCBlYywgaW5kZXgsIDgsIHVzZWxkKTsKKwkJaW5kZXggKz0gODsKKwkJaWYgKGNfaWQoJmV4Y2QpID09IDApIHsKKwkJCWlmICghdXNlbGQgJiYgZWMtPmxvYWRlcikgeworCQkJCXVzZWxkID0gMTsKKwkJCQlpbmRleCA9IDA7CisJCQkJY29udGludWU7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoY19pZCgmZXhjZCkgPT0gMHhmMCkgeyAvKiBsaW5rICovCisJCQlpbmRleCA9IGNfc3RhcnQoJmV4Y2QpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGNfaWQoJmV4Y2QpID09IDB4ODApIHsgLyogbG9hZGVyICovCisJCQlpZiAoIWVjLT5sb2FkZXIpIHsKKwkJCQllYy0+bG9hZGVyID0gKGxvYWRlcl90KWttYWxsb2MoY19sZW4oJmV4Y2QpLAorCQkJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwkJCQlpZiAoZWMtPmxvYWRlcikKKwkJCQkJZWNhcmRfcmVhZGJ5dGVzKGVjLT5sb2FkZXIsIGVjLAorCQkJCQkJCShpbnQpY19zdGFydCgmZXhjZCksCisJCQkJCQkJY19sZW4oJmV4Y2QpLCB1c2VsZCk7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjX2lkKCZleGNkKSA9PSBpZCAmJiBudW0tLSA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGNfaWQoJmV4Y2QpICYgMHg4MCkgeworCQlzd2l0Y2ggKGNfaWQoJmV4Y2QpICYgMHg3MCkgeworCQljYXNlIDB4NzA6CisJCQllY2FyZF9yZWFkYnl0ZXMoKHVuc2lnbmVkIGNoYXIgKilleGNkLmQuc3RyaW5nLCBlYywKKwkJCQkJKGludCljX3N0YXJ0KCZleGNkKSwgY19sZW4oJmV4Y2QpLAorCQkJCQl1c2VsZCk7CisJCQlicmVhazsKKwkJY2FzZSAweDAwOgorCQkJYnJlYWs7CisJCX0KKwl9CisJY2QtPnN0YXJ0X29mZnNldCA9IGNfc3RhcnQoJmV4Y2QpOworCW1lbWNweShjZC0+ZC5zdHJpbmcsIGV4Y2QuZC5zdHJpbmcsIDI1Nik7CisJcmV0dXJuIDE7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09IEludGVycnVwdCBjb250cm9sID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworc3RhdGljIHZvaWQgZWNhcmRfZGVmX2lycV9lbmFibGUoZWNhcmRfdCAqZWMsIGludCBpcnFucikKK3sKKyNpZmRlZiBIQVNfRVhQTUFTSworCWlmIChpcnFuciA8IDQgJiYgaGF2ZV9leHBtYXNrKSB7CisJCWhhdmVfZXhwbWFzayB8PSAxIDw8IGlycW5yOworCQlfX3Jhd193cml0ZWIoaGF2ZV9leHBtYXNrLCBFWFBNQVNLX0VOQUJMRSk7CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGVjYXJkX2RlZl9pcnFfZGlzYWJsZShlY2FyZF90ICplYywgaW50IGlycW5yKQoreworI2lmZGVmIEhBU19FWFBNQVNLCisJaWYgKGlycW5yIDwgNCAmJiBoYXZlX2V4cG1hc2spIHsKKwkJaGF2ZV9leHBtYXNrICY9IH4oMSA8PCBpcnFucik7CisJCV9fcmF3X3dyaXRlYihoYXZlX2V4cG1hc2ssIEVYUE1BU0tfRU5BQkxFKTsKKwl9CisjZW5kaWYKK30KKworc3RhdGljIGludCBlY2FyZF9kZWZfaXJxX3BlbmRpbmcoZWNhcmRfdCAqZWMpCit7CisJcmV0dXJuICFlYy0+aXJxbWFzayB8fCByZWFkYihlYy0+aXJxYWRkcikgJiBlYy0+aXJxbWFzazsKK30KKworc3RhdGljIHZvaWQgZWNhcmRfZGVmX2ZpcV9lbmFibGUoZWNhcmRfdCAqZWMsIGludCBmaXFucikKK3sKKwlwYW5pYygiZWNhcmRfZGVmX2ZpcV9lbmFibGUgY2FsbGVkIC0gaW1wb3NzaWJsZSIpOworfQorCitzdGF0aWMgdm9pZCBlY2FyZF9kZWZfZmlxX2Rpc2FibGUoZWNhcmRfdCAqZWMsIGludCBmaXFucikKK3sKKwlwYW5pYygiZWNhcmRfZGVmX2ZpcV9kaXNhYmxlIGNhbGxlZCAtIGltcG9zc2libGUiKTsKK30KKworc3RhdGljIGludCBlY2FyZF9kZWZfZmlxX3BlbmRpbmcoZWNhcmRfdCAqZWMpCit7CisJcmV0dXJuICFlYy0+ZmlxbWFzayB8fCByZWFkYihlYy0+ZmlxYWRkcikgJiBlYy0+ZmlxbWFzazsKK30KKworc3RhdGljIGV4cGFuc2lvbmNhcmRfb3BzX3QgZWNhcmRfZGVmYXVsdF9vcHMgPSB7CisJZWNhcmRfZGVmX2lycV9lbmFibGUsCisJZWNhcmRfZGVmX2lycV9kaXNhYmxlLAorCWVjYXJkX2RlZl9pcnFfcGVuZGluZywKKwllY2FyZF9kZWZfZmlxX2VuYWJsZSwKKwllY2FyZF9kZWZfZmlxX2Rpc2FibGUsCisJZWNhcmRfZGVmX2ZpcV9wZW5kaW5nCit9OworCisvKgorICogRW5hYmxlIGFuZCBkaXNhYmxlIGludGVycnVwdHMgZnJvbSBleHBhbnNpb24gY2FyZHMuCisgKiAoaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgZm9yIHRoZXNlIGZ1bmN0aW9ucykuCisgKgorICogVGhleSBhcmUgbm90IG1lYW50IHRvIGJlIGNhbGxlZCBkaXJlY3RseSwgYnV0IHZpYSBlbmFibGUvZGlzYWJsZV9pcnEuCisgKi8KK3N0YXRpYyB2b2lkIGVjYXJkX2lycV91bm1hc2sodW5zaWduZWQgaW50IGlycW5yKQoreworCWVjYXJkX3QgKmVjID0gc2xvdF90b19lY2FyZChpcnFuciAtIDMyKTsKKworCWlmIChlYykgeworCQlpZiAoIWVjLT5vcHMpCisJCQllYy0+b3BzID0gJmVjYXJkX2RlZmF1bHRfb3BzOworCisJCWlmIChlYy0+Y2xhaW1lZCAmJiBlYy0+b3BzLT5pcnFlbmFibGUpCisJCQllYy0+b3BzLT5pcnFlbmFibGUoZWMsIGlycW5yKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fRVJSICJlY2FyZDogcmVqZWN0aW5nIHJlcXVlc3QgdG8gIgorCQkJCSJlbmFibGUgSVJRcyBmb3IgJWRcbiIsIGlycW5yKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGVjYXJkX2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnFucikKK3sKKwllY2FyZF90ICplYyA9IHNsb3RfdG9fZWNhcmQoaXJxbnIgLSAzMik7CisKKwlpZiAoZWMpIHsKKwkJaWYgKCFlYy0+b3BzKQorCQkJZWMtPm9wcyA9ICZlY2FyZF9kZWZhdWx0X29wczsKKworCQlpZiAoZWMtPm9wcyAmJiBlYy0+b3BzLT5pcnFkaXNhYmxlKQorCQkJZWMtPm9wcy0+aXJxZGlzYWJsZShlYywgaXJxbnIpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIGVjYXJkX2NoaXAgPSB7CisJLmFjawk9IGVjYXJkX2lycV9tYXNrLAorCS5tYXNrCT0gZWNhcmRfaXJxX21hc2ssCisJLnVubWFzayA9IGVjYXJkX2lycV91bm1hc2ssCit9OworCit2b2lkIGVjYXJkX2VuYWJsZWZpcSh1bnNpZ25lZCBpbnQgZmlxbnIpCit7CisJZWNhcmRfdCAqZWMgPSBzbG90X3RvX2VjYXJkKGZpcW5yKTsKKworCWlmIChlYykgeworCQlpZiAoIWVjLT5vcHMpCisJCQllYy0+b3BzID0gJmVjYXJkX2RlZmF1bHRfb3BzOworCisJCWlmIChlYy0+Y2xhaW1lZCAmJiBlYy0+b3BzLT5maXFlbmFibGUpCisJCQllYy0+b3BzLT5maXFlbmFibGUoZWMsIGZpcW5yKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fRVJSICJlY2FyZDogcmVqZWN0aW5nIHJlcXVlc3QgdG8gIgorCQkJCSJlbmFibGUgRklRcyBmb3IgJWRcbiIsIGZpcW5yKTsKKwl9Cit9CisKK3ZvaWQgZWNhcmRfZGlzYWJsZWZpcSh1bnNpZ25lZCBpbnQgZmlxbnIpCit7CisJZWNhcmRfdCAqZWMgPSBzbG90X3RvX2VjYXJkKGZpcW5yKTsKKworCWlmIChlYykgeworCQlpZiAoIWVjLT5vcHMpCisJCQllYy0+b3BzID0gJmVjYXJkX2RlZmF1bHRfb3BzOworCisJCWlmIChlYy0+b3BzLT5maXFkaXNhYmxlKQorCQkJZWMtPm9wcy0+ZmlxZGlzYWJsZShlYywgZmlxbnIpOworCX0KK30KKworc3RhdGljIHZvaWQgZWNhcmRfZHVtcF9pcnFfc3RhdGUodm9pZCkKK3sKKwllY2FyZF90ICplYzsKKworCXByaW50aygiRXhwYW5zaW9uIGNhcmQgSVJRIHN0YXRlOlxuIik7CisKKwlmb3IgKGVjID0gY2FyZHM7IGVjOyBlYyA9IGVjLT5uZXh0KSB7CisJCWlmIChlYy0+c2xvdF9ubyA9PSA4KQorCQkJY29udGludWU7CisKKwkJcHJpbnRrKCIgICVkOiAlc2NsYWltZWQsICIsCisJCSAgICAgICBlYy0+c2xvdF9ubywgZWMtPmNsYWltZWQgPyAiIiA6ICJub3QgIik7CisKKwkJaWYgKGVjLT5vcHMgJiYgZWMtPm9wcy0+aXJxcGVuZGluZyAmJgorCQkgICAgZWMtPm9wcyAhPSAmZWNhcmRfZGVmYXVsdF9vcHMpCisJCQlwcmludGsoImlycSAlc3BlbmRpbmdcbiIsCisJCQkgICAgICAgZWMtPm9wcy0+aXJxcGVuZGluZyhlYykgPyAiIiA6ICJub3QgIik7CisJCWVsc2UKKwkJCXByaW50aygiaXJxYWRkciAlcCwgbWFzayA9ICUwMlgsIHN0YXR1cyA9ICUwMlhcbiIsCisJCQkgICAgICAgZWMtPmlycWFkZHIsIGVjLT5pcnFtYXNrLCByZWFkYihlYy0+aXJxYWRkcikpOworCX0KK30KKworc3RhdGljIHZvaWQgZWNhcmRfY2hlY2tfbG9ja3VwKHN0cnVjdCBpcnFkZXNjICpkZXNjKQoreworCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3Q7CisJc3RhdGljIGludCBsb2NrdXA7CisKKwkvKgorCSAqIElmIHRoZSB0aW1lciBpbnRlcnJ1cHQgaGFzIG5vdCBydW4gc2luY2UgdGhlIGxhc3QgbWlsbGlvbgorCSAqIHVucmVjb2duaXNlZCBleHBhbnNpb24gY2FyZCBpbnRlcnJ1cHRzLCB0aGVuIHRoZXJlIGlzCisJICogc29tZXRoaW5nIHNlcmlvdXNseSB3cm9uZy4gIERpc2FibGUgdGhlIGV4cGFuc2lvbiBjYXJkCisJICogaW50ZXJydXB0cyBzbyBhdCBsZWFzdCB3ZSBjYW4gY29udGludWUuCisJICoKKwkgKiBNYXliZSB3ZSBvdWdodCB0byBzdGFydCBhIHRpbWVyIHRvIHJlLWVuYWJsZSB0aGVtIHNvbWUgdGltZQorCSAqIGxhdGVyPworCSAqLworCWlmIChsYXN0ID09IGppZmZpZXMpIHsKKwkJbG9ja3VwICs9IDE7CisJCWlmIChsb2NrdXAgPiAxMDAwMDAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlxuSW50ZXJydXB0IGxvY2t1cCBkZXRlY3RlZCAtICIKKwkJCSAgICAgICAiZGlzYWJsaW5nIGFsbCBleHBhbnNpb24gY2FyZCBpbnRlcnJ1cHRzXG4iKTsKKworCQkJZGVzYy0+Y2hpcC0+bWFzayhJUlFfRVhQQU5TSU9OQ0FSRCk7CisJCQllY2FyZF9kdW1wX2lycV9zdGF0ZSgpOworCQl9CisJfSBlbHNlCisJCWxvY2t1cCA9IDA7CisKKwkvKgorCSAqIElmIHdlIGRpZCBub3QgcmVjb2duaXNlIHRoZSBzb3VyY2Ugb2YgdGhpcyBpbnRlcnJ1cHQsCisJICogd2FybiB0aGUgdXNlciwgYnV0IGRvbid0IGZsb29kIHRoZSB1c2VyIHdpdGggdGhlc2UgbWVzc2FnZXMuCisJICovCisJaWYgKCFsYXN0IHx8IHRpbWVfYWZ0ZXIoamlmZmllcywgbGFzdCArIDUqSFopKSB7CisJCWxhc3QgPSBqaWZmaWVzOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbnJlY29nbmlzZWQgaW50ZXJydXB0IGZyb20gYmFja3BsYW5lXG4iKTsKKwkJZWNhcmRfZHVtcF9pcnFfc3RhdGUoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitlY2FyZF9pcnFfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJZWNhcmRfdCAqZWM7CisJaW50IGNhbGxlZCA9IDA7CisKKwlkZXNjLT5jaGlwLT5tYXNrKGlycSk7CisJZm9yIChlYyA9IGNhcmRzOyBlYzsgZWMgPSBlYy0+bmV4dCkgeworCQlpbnQgcGVuZGluZzsKKworCQlpZiAoIWVjLT5jbGFpbWVkIHx8IGVjLT5pcnEgPT0gTk9fSVJRIHx8IGVjLT5zbG90X25vID09IDgpCisJCQljb250aW51ZTsKKworCQlpZiAoZWMtPm9wcyAmJiBlYy0+b3BzLT5pcnFwZW5kaW5nKQorCQkJcGVuZGluZyA9IGVjLT5vcHMtPmlycXBlbmRpbmcoZWMpOworCQllbHNlCisJCQlwZW5kaW5nID0gZWNhcmRfZGVmYXVsdF9vcHMuaXJxcGVuZGluZyhlYyk7CisKKwkJaWYgKHBlbmRpbmcpIHsKKwkJCXN0cnVjdCBpcnFkZXNjICpkID0gaXJxX2Rlc2MgKyBlYy0+aXJxOworCQkJZC0+aGFuZGxlKGVjLT5pcnEsIGQsIHJlZ3MpOworCQkJY2FsbGVkICsrOworCQl9CisJfQorCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOworCisJaWYgKGNhbGxlZCA9PSAwKQorCQllY2FyZF9jaGVja19sb2NrdXAoZGVzYyk7Cit9CisKKyNpZmRlZiBIQVNfRVhQTUFTSworc3RhdGljIHVuc2lnbmVkIGNoYXIgcHJpb3JpdHlfbWFza3NbXSA9Cit7CisJMHhmMCwgMHhmMSwgMHhmMywgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgZmlyc3Rfc2V0W10gPQoreworCTB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDEsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMSwgMHgwMAorfTsKKworc3RhdGljIHZvaWQKK2VjYXJkX2lycWV4cF9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFkZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwljb25zdCB1bnNpZ25lZCBpbnQgc3RhdHVzbWFzayA9IDE1OworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBfX3Jhd19yZWFkYihFWFBNQVNLX1NUQVRVUykgJiBzdGF0dXNtYXNrOworCWlmIChzdGF0dXMpIHsKKwkJdW5zaWduZWQgaW50IHNsb3QgPSBmaXJzdF9zZXRbc3RhdHVzXTsKKwkJZWNhcmRfdCAqZWMgPSBzbG90X3RvX2VjYXJkKHNsb3QpOworCisJCWlmIChlYy0+Y2xhaW1lZCkgeworCQkJc3RydWN0IGlycWRlc2MgKmQgPSBpcnFkZXNjICsgZWMtPmlycTsKKwkJCS8qCisJCQkgKiB0aGlzIHVnbHkgY29kZSBpcyBzbyB0aGF0IHdlIGNhbiBvcGVyYXRlIGEKKwkJCSAqIHByaW9yaXRvcmlzaW5nIHN5c3RlbToKKwkJCSAqCisJCQkgKiBDYXJkIDAgCWhpZ2hlc3QgcHJpb3JpdHkKKwkJCSAqIENhcmQgMQorCQkJICogQ2FyZCAyCisJCQkgKiBDYXJkIDMJbG93ZXN0IHByaW9yaXR5CisJCQkgKgorCQkJICogU2VyaWFsIGNhcmRzIHNob3VsZCBnbyBpbiAwLzEsIGV0aGVybmV0L3Njc2kgaW4gMi8zCisJCQkgKiBvdGhlcndpc2UgeW91IHdpbGwgbG9zZSBzZXJpYWwgZGF0YSBhdCBoaWdoIHNwZWVkcyEKKwkJCSAqLworCQkJZC0+aGFuZGxlKGVjLT5pcnEsIGQsIHJlZ3MpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2FyZCVkOiBpbnRlcnJ1cHQgZnJvbSB1bmNsYWltZWQgIgorCQkJICAgICAgICJjYXJkPz8/XG4iLCBzbG90KTsKKwkJCWhhdmVfZXhwbWFzayAmPSB+KDEgPDwgc2xvdCk7CisJCQlfX3Jhd193cml0ZWIoaGF2ZV9leHBtYXNrLCBFWFBNQVNLX0VOQUJMRSk7CisJCX0KKwl9IGVsc2UKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2lsZCBpbnRlcnJ1cHQgZnJvbSBiYWNrcGxhbmUgKG1hc2tzKVxuIik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGVjYXJkX3Byb2JlaXJxaHcodm9pZCkKK3sKKwllY2FyZF90ICplYzsKKwlpbnQgZm91bmQ7CisKKwlfX3Jhd193cml0ZWIoMHgwMCwgRVhQTUFTS19FTkFCTEUpOworCV9fcmF3X3dyaXRlYigweGZmLCBFWFBNQVNLX1NUQVRVUyk7CisJZm91bmQgPSAoX19yYXdfcmVhZGIoRVhQTUFTS19TVEFUVVMpICYgMTUpID09IDA7CisJX19yYXdfd3JpdGViKDB4ZmYsIEVYUE1BU0tfRU5BQkxFKTsKKworCWlmIChmb3VuZCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiRXhwYW5zaW9uIGNhcmQgaW50ZXJydXB0ICIKKwkJICAgICAgICJtYW5hZ2VtZW50IGhhcmR3YXJlIGZvdW5kXG4iKTsKKworCQkvKiBmb3IgZWFjaCBjYXJkIHByZXNlbnQsIHNldCBhIGJpdCB0byAnMScgKi8KKwkJaGF2ZV9leHBtYXNrID0gMHg4MDAwMDAwMDsKKworCQlmb3IgKGVjID0gY2FyZHM7IGVjOyBlYyA9IGVjLT5uZXh0KQorCQkJaGF2ZV9leHBtYXNrIHw9IDEgPDwgZWMtPnNsb3Rfbm87CisKKwkJX19yYXdfd3JpdGViKGhhdmVfZXhwbWFzaywgRVhQTUFTS19FTkFCTEUpOworCX0KKworCXJldHVybiBmb3VuZDsKK30KKyNlbHNlCisjZGVmaW5lIGVjYXJkX2lycWV4cF9oYW5kbGVyIE5VTEwKKyNkZWZpbmUgZWNhcmRfcHJvYmVpcnFodygpICgwKQorI2VuZGlmCisKKyNpZm5kZWYgSU9fRUNfTUVNQzhfQkFTRQorI2RlZmluZSBJT19FQ19NRU1DOF9CQVNFIDAKKyNlbmRpZgorCit1bnNpZ25lZCBpbnQgX19lY2FyZF9hZGRyZXNzKGVjYXJkX3QgKmVjLCBjYXJkX3R5cGVfdCB0eXBlLCBjYXJkX3NwZWVkX3Qgc3BlZWQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gMDsKKwlpbnQgc2xvdCA9IGVjLT5zbG90X25vOworCisJaWYgKGVjLT5zbG90X25vID09IDgpCisJCXJldHVybiBJT19FQ19NRU1DOF9CQVNFOworCisJZWN0Y3IgJj0gfigxIDw8IHNsb3QpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBFQ0FSRF9NRU1DOgorCQlpZiAoc2xvdCA8IDQpCisJCQlhZGRyZXNzID0gSU9fRUNfTUVNQ19CQVNFICsgKHNsb3QgPDwgMTIpOworCQlicmVhazsKKworCWNhc2UgRUNBUkRfSU9DOgorCQlpZiAoc2xvdCA8IDQpCisJCQlhZGRyZXNzID0gSU9fRUNfSU9DX0JBU0UgKyAoc2xvdCA8PCAxMik7CisjaWZkZWYgSU9fRUNfSU9DNF9CQVNFCisJCWVsc2UKKwkJCWFkZHJlc3MgPSBJT19FQ19JT0M0X0JBU0UgKyAoKHNsb3QgLSA0KSA8PCAxMik7CisjZW5kaWYKKwkJaWYgKGFkZHJlc3MpCisJCQlhZGRyZXNzICs9ICBzcGVlZCA8PCAxNzsKKwkJYnJlYWs7CisKKyNpZmRlZiBJT19FQ19FQVNJX0JBU0UKKwljYXNlIEVDQVJEX0VBU0k6CisJCWFkZHJlc3MgPSBJT19FQ19FQVNJX0JBU0UgKyAoc2xvdCA8PCAyMik7CisJCWlmIChzcGVlZCA9PSBFQ0FSRF9GQVNUKQorCQkJZWN0Y3IgfD0gMSA8PCBzbG90OworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworI2lmZGVmIElPTURfRUNUQ1IKKwlpb21kX3dyaXRlYihlY3RjciwgSU9NRF9FQ1RDUik7CisjZW5kaWYKKwlyZXR1cm4gYWRkcmVzczsKK30KKworc3RhdGljIGludCBlY2FyZF9wcmludHMoY2hhciAqYnVmZmVyLCBlY2FyZF90ICplYykKK3sKKwljaGFyICpzdGFydCA9IGJ1ZmZlcjsKKworCWJ1ZmZlciArPSBzcHJpbnRmKGJ1ZmZlciwgIiAgJWQ6ICVzICIsIGVjLT5zbG90X25vLAorCQkJICBlYy0+dHlwZSA9PSBFQ0FSRF9FQVNJID8gIkVBU0kiIDogIiAgICAiKTsKKworCWlmIChlYy0+Y2lkLmlkID09IDApIHsKKwkJc3RydWN0IGluX2NodW5rX2RpciBpbmNkOworCisJCWJ1ZmZlciArPSBzcHJpbnRmKGJ1ZmZlciwgIlslMDRYOiUwNFhdICIsCisJCQllYy0+Y2lkLm1hbnVmYWN0dXJlciwgZWMtPmNpZC5wcm9kdWN0KTsKKworCQlpZiAoIWVjLT5jYXJkX2Rlc2MgJiYgZWMtPmNpZC5jZCAmJgorCQkgICAgZWNhcmRfcmVhZGNodW5rKCZpbmNkLCBlYywgMHhmNSwgMCkpIHsKKwkJCWVjLT5jYXJkX2Rlc2MgPSBrbWFsbG9jKHN0cmxlbihpbmNkLmQuc3RyaW5nKSsxLCBHRlBfS0VSTkVMKTsKKworCQkJaWYgKGVjLT5jYXJkX2Rlc2MpCisJCQkJc3RyY3B5KChjaGFyICopZWMtPmNhcmRfZGVzYywgaW5jZC5kLnN0cmluZyk7CisJCX0KKworCQlidWZmZXIgKz0gc3ByaW50ZihidWZmZXIsICIlc1xuIiwgZWMtPmNhcmRfZGVzYyA/IGVjLT5jYXJkX2Rlc2MgOiAiKnVua25vd24qIik7CisJfSBlbHNlCisJCWJ1ZmZlciArPSBzcHJpbnRmKGJ1ZmZlciwgIlNpbXBsZSBjYXJkICVkXG4iLCBlYy0+Y2lkLmlkKTsKKworCXJldHVybiBidWZmZXIgLSBzdGFydDsKK30KKworc3RhdGljIGludCBnZXRfZWNhcmRfZGV2X2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IHBvcywgaW50IGNvdW50KQoreworCWVjYXJkX3QgKmVjID0gY2FyZHM7CisJb2ZmX3QgYXQgPSAwOworCWludCBsZW4sIGNudDsKKworCWNudCA9IDA7CisJd2hpbGUgKGVjICYmIGNvdW50ID4gY250KSB7CisJCWxlbiA9IGVjYXJkX3ByaW50cyhidWYsIGVjKTsKKwkJYXQgKz0gbGVuOworCQlpZiAoYXQgPj0gcG9zKSB7CisJCQlpZiAoISpzdGFydCkgeworCQkJCSpzdGFydCA9IGJ1ZiArIChwb3MgLSAoYXQgLSBsZW4pKTsKKwkJCQljbnQgPSBhdCAtIHBvczsKKwkJCX0gZWxzZQorCQkJCWNudCArPSBsZW47CisJCQlidWYgKz0gbGVuOworCQl9CisJCWVjID0gZWMtPm5leHQ7CisJfQorCXJldHVybiAoY291bnQgPiBjbnQpID8gY250IDogY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfYnVzX2VjYXJkX2RpciA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIGVjYXJkX3Byb2NfaW5pdCh2b2lkKQoreworCXByb2NfYnVzX2VjYXJkX2RpciA9IHByb2NfbWtkaXIoImVjYXJkIiwgcHJvY19idXMpOworCWNyZWF0ZV9wcm9jX2luZm9fZW50cnkoImRldmljZXMiLCAwLCBwcm9jX2J1c19lY2FyZF9kaXIsCisJCWdldF9lY2FyZF9kZXZfaW5mbyk7Cit9CisKKyNkZWZpbmUgZWNfc2V0X3Jlc291cmNlKGVjLG5yLHN0LHN6KQkJCQlcCisJZG8gewkJCQkJCQlcCisJCShlYyktPnJlc291cmNlW25yXS5uYW1lID0gZWMtPmRldi5idXNfaWQ7CVwKKwkJKGVjKS0+cmVzb3VyY2VbbnJdLnN0YXJ0ID0gc3Q7CQkJXAorCQkoZWMpLT5yZXNvdXJjZVtucl0uZW5kID0gKHN0KSArIChzeikgLSAxOwlcCisJCShlYyktPnJlc291cmNlW25yXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIHZvaWQgX19pbml0IGVjYXJkX2ZyZWVfY2FyZChzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEVDQVJEX05VTV9SRVNPVVJDRVM7IGkrKykKKwkJaWYgKGVjLT5yZXNvdXJjZVtpXS5mbGFncykKKwkJCXJlbGVhc2VfcmVzb3VyY2UoJmVjLT5yZXNvdXJjZVtpXSk7CisKKwlrZnJlZShlYyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKl9faW5pdCBlY2FyZF9hbGxvY19jYXJkKGludCB0eXBlLCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjOworCXVuc2lnbmVkIGxvbmcgYmFzZTsKKwlpbnQgaTsKKworCWVjID0ga21hbGxvYyhzaXplb2YoZWNhcmRfdCksIEdGUF9LRVJORUwpOworCWlmICghZWMpIHsKKwkJZWMgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIG5vbWVtOworCX0KKworCW1lbXNldChlYywgMCwgc2l6ZW9mKGVjYXJkX3QpKTsKKworCWVjLT5zbG90X25vID0gc2xvdDsKKwllYy0+dHlwZSA9IHR5cGU7CisJZWMtPmlycSA9IE5PX0lSUTsKKwllYy0+ZmlxID0gTk9fSVJROworCWVjLT5kbWEgPSBOT19ETUE7CisJZWMtPm9wcyA9ICZlY2FyZF9kZWZhdWx0X29wczsKKworCXNucHJpbnRmKGVjLT5kZXYuYnVzX2lkLCBzaXplb2YoZWMtPmRldi5idXNfaWQpLCAiZWNhcmQlZCIsIHNsb3QpOworCWVjLT5kZXYucGFyZW50ID0gTlVMTDsKKwllYy0+ZGV2LmJ1cyA9ICZlY2FyZF9idXNfdHlwZTsKKwllYy0+ZGV2LmRtYV9tYXNrID0gJmVjLT5kbWFfbWFzazsKKwllYy0+ZG1hX21hc2sgPSAodTY0KTB4ZmZmZmZmZmY7CisKKwlpZiAoc2xvdCA8IDQpIHsKKwkJZWNfc2V0X3Jlc291cmNlKGVjLCBFQ0FSRF9SRVNfTUVNQywKKwkJCQlQT0RTTE9UX01FTUNfQkFTRSArIChzbG90IDw8IDE0KSwKKwkJCQlQT0RTTE9UX01FTUNfU0laRSk7CisJCWJhc2UgPSBQT0RTTE9UX0lPQzBfQkFTRSArIChzbG90IDw8IDE0KTsKKwl9IGVsc2UKKwkJYmFzZSA9IFBPRFNMT1RfSU9DNF9CQVNFICsgKChzbG90IC0gNCkgPDwgMTQpOworCisjaWZkZWYgQ09ORklHX0FSQ0hfUlBDCisJaWYgKHNsb3QgPCA4KSB7CisJCWVjX3NldF9yZXNvdXJjZShlYywgRUNBUkRfUkVTX0VBU0ksCisJCQkJUE9EU0xPVF9FQVNJX0JBU0UgKyAoc2xvdCA8PCAyNCksCisJCQkJUE9EU0xPVF9FQVNJX1NJWkUpOworCX0KKworCWlmIChzbG90ID09IDgpIHsKKwkJZWNfc2V0X3Jlc291cmNlKGVjLCBFQ0FSRF9SRVNfTUVNQywgTkVUU0xPVF9CQVNFLCBORVRTTE9UX1NJWkUpOworCX0gZWxzZQorI2VuZGlmCisKKwlmb3IgKGkgPSAwOyBpIDw9IEVDQVJEX1JFU19JT0NTWU5DIC0gRUNBUkRfUkVTX0lPQ1NMT1c7IGkrKykKKwkJZWNfc2V0X3Jlc291cmNlKGVjLCBpICsgRUNBUkRfUkVTX0lPQ1NMT1csCisJCQkJYmFzZSArIChpIDw8IDE5KSwgUE9EU0xPVF9JT0NfU0laRSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRUNBUkRfTlVNX1JFU09VUkNFUzsgaSsrKSB7CisJCWlmIChlYy0+cmVzb3VyY2VbaV0uZmxhZ3MgJiYKKwkJICAgIHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmZWMtPnJlc291cmNlW2ldKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVzb3VyY2Uocykgbm90IGF2YWlsYWJsZVxuIiwKKwkJCQllYy0+ZGV2LmJ1c19pZCk7CisJCQllYy0+cmVzb3VyY2VbaV0uZW5kIC09IGVjLT5yZXNvdXJjZVtpXS5zdGFydDsKKwkJCWVjLT5yZXNvdXJjZVtpXS5zdGFydCA9IDA7CisJCQllYy0+cmVzb3VyY2VbaV0uZmxhZ3MgPSAwOworCQl9CisJfQorCisgbm9tZW06CisJcmV0dXJuIGVjOworfQorCitzdGF0aWMgc3NpemVfdCBlY2FyZF9zaG93X2lycShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjID0gRUNBUkRfREVWKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGVjLT5pcnEpOworfQorCitzdGF0aWMgc3NpemVfdCBlY2FyZF9zaG93X2RtYShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjID0gRUNBUkRfREVWKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGVjLT5kbWEpOworfQorCitzdGF0aWMgc3NpemVfdCBlY2FyZF9zaG93X3Jlc291cmNlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjID0gRUNBUkRfREVWKGRldik7CisJY2hhciAqc3RyID0gYnVmOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEVDQVJEX05VTV9SRVNPVVJDRVM7IGkrKykKKwkJc3RyICs9IHNwcmludGYoc3RyLCAiJTA4bHggJTA4bHggJTA4bHhcbiIsCisJCQkJZWMtPnJlc291cmNlW2ldLnN0YXJ0LAorCQkJCWVjLT5yZXNvdXJjZVtpXS5lbmQsCisJCQkJZWMtPnJlc291cmNlW2ldLmZsYWdzKTsKKworCXJldHVybiBzdHIgLSBidWY7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGVjYXJkX3Nob3dfdmVuZG9yKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMgPSBFQ0FSRF9ERVYoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgZWMtPmNpZC5tYW51ZmFjdHVyZXIpOworfQorCitzdGF0aWMgc3NpemVfdCBlY2FyZF9zaG93X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjID0gRUNBUkRfREVWKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGVjLT5jaWQucHJvZHVjdCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGVjYXJkX3Nob3dfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjID0gRUNBUkRfREVWKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGVjLT50eXBlID09IEVDQVJEX0VBU0kgPyAiRUFTSSIgOiAiSU9DIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBlY2FyZF9kZXZfYXR0cnNbXSA9IHsKKwlfX0FUVFIoZGV2aWNlLCAgIFNfSVJVR08sIGVjYXJkX3Nob3dfZGV2aWNlLCAgICBOVUxMKSwKKwlfX0FUVFIoZG1hLCAgICAgIFNfSVJVR08sIGVjYXJkX3Nob3dfZG1hLCAgICAgICBOVUxMKSwKKwlfX0FUVFIoaXJxLCAgICAgIFNfSVJVR08sIGVjYXJkX3Nob3dfaXJxLCAgICAgICBOVUxMKSwKKwlfX0FUVFIocmVzb3VyY2UsIFNfSVJVR08sIGVjYXJkX3Nob3dfcmVzb3VyY2VzLCBOVUxMKSwKKwlfX0FUVFIodHlwZSwgICAgIFNfSVJVR08sIGVjYXJkX3Nob3dfdHlwZSwgICAgICBOVUxMKSwKKwlfX0FUVFIodmVuZG9yLCAgIFNfSVJVR08sIGVjYXJkX3Nob3dfdmVuZG9yLCAgICBOVUxMKSwKKwlfX0FUVFJfTlVMTCwKK307CisKKworaW50IGVjYXJkX3JlcXVlc3RfcmVzb3VyY2VzKHN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMpCit7CisJaW50IGksIGVyciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgRUNBUkRfTlVNX1JFU09VUkNFUzsgaSsrKSB7CisJCWlmIChlY2FyZF9yZXNvdXJjZV9lbmQoZWMsIGkpICYmCisJCSAgICAhcmVxdWVzdF9tZW1fcmVnaW9uKGVjYXJkX3Jlc291cmNlX3N0YXJ0KGVjLCBpKSwKKwkJCQkJZWNhcmRfcmVzb3VyY2VfbGVuKGVjLCBpKSwKKwkJCQkJZWMtPmRldi5kcml2ZXItPm5hbWUpKSB7CisJCQllcnIgPSAtRUJVU1k7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChlcnIpIHsKKwkJd2hpbGUgKGktLSkKKwkJCWlmIChlY2FyZF9yZXNvdXJjZV9lbmQoZWMsIGkpKQorCQkJCXJlbGVhc2VfbWVtX3JlZ2lvbihlY2FyZF9yZXNvdXJjZV9zdGFydChlYywgaSksCisJCQkJCQkgICBlY2FyZF9yZXNvdXJjZV9sZW4oZWMsIGkpKTsKKwl9CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0woZWNhcmRfcmVxdWVzdF9yZXNvdXJjZXMpOworCit2b2lkIGVjYXJkX3JlbGVhc2VfcmVzb3VyY2VzKHN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRUNBUkRfTlVNX1JFU09VUkNFUzsgaSsrKQorCQlpZiAoZWNhcmRfcmVzb3VyY2VfZW5kKGVjLCBpKSkKKwkJCXJlbGVhc2VfbWVtX3JlZ2lvbihlY2FyZF9yZXNvdXJjZV9zdGFydChlYywgaSksCisJCQkJCSAgIGVjYXJkX3Jlc291cmNlX2xlbihlYywgaSkpOworfQorRVhQT1JUX1NZTUJPTChlY2FyZF9yZWxlYXNlX3Jlc291cmNlcyk7CisKKy8qCisgKiBQcm9iZSBmb3IgYW4gZXhwYW5zaW9uIGNhcmQuCisgKgorICogSWYgYml0IDEgb2YgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGNhcmQgaXMgc2V0LCB0aGVuIHRoZQorICogY2FyZCBkb2VzIG5vdCBleGlzdC4KKyAqLworc3RhdGljIGludCBfX2luaXQKK2VjYXJkX3Byb2JlKGludCBzbG90LCBjYXJkX3R5cGVfdCB0eXBlKQoreworCWVjYXJkX3QgKiplY3A7CisJZWNhcmRfdCAqZWM7CisJc3RydWN0IGV4X2VjaWQgY2lkOworCWludCBpLCByYzsKKworCWVjID0gZWNhcmRfYWxsb2NfY2FyZCh0eXBlLCBzbG90KTsKKwlpZiAoSVNfRVJSKGVjKSkgeworCQlyYyA9IFBUUl9FUlIoZWMpOworCQlnb3RvIG5vbWVtOworCX0KKworCXJjID0gLUVOT0RFVjsKKwlpZiAoKGVjLT5wb2RhZGRyID0gZWNhcmRfYWRkcmVzcyhlYywgdHlwZSwgRUNBUkRfU1lOQykpID09IDApCisJCWdvdG8gbm9kZXY7CisKKwljaWQucl96ZXJvID0gMTsKKwllY2FyZF9yZWFkYnl0ZXMoJmNpZCwgZWMsIDAsIDE2LCAwKTsKKwlpZiAoY2lkLnJfemVybykKKwkJZ290byBub2RldjsKKworCWVjLT5jaWQuaWQJPSBjaWQucl9pZDsKKwllYy0+Y2lkLmNkCT0gY2lkLnJfY2Q7CisJZWMtPmNpZC5pcwk9IGNpZC5yX2lzOworCWVjLT5jaWQudwk9IGNpZC5yX3c7CisJZWMtPmNpZC5tYW51ZmFjdHVyZXIgPSBlY2FyZF9nZXR1MTYoY2lkLnJfbWFudSk7CisJZWMtPmNpZC5wcm9kdWN0ID0gZWNhcmRfZ2V0dTE2KGNpZC5yX3Byb2QpOworCWVjLT5jaWQuY291bnRyeSA9IGNpZC5yX2NvdW50cnk7CisJZWMtPmNpZC5pcnFtYXNrID0gY2lkLnJfaXJxbWFzazsKKwllYy0+Y2lkLmlycW9mZiAgPSBlY2FyZF9nZXRzMjQoY2lkLnJfaXJxb2ZmKTsKKwllYy0+Y2lkLmZpcW1hc2sgPSBjaWQucl9maXFtYXNrOworCWVjLT5jaWQuZmlxb2ZmICA9IGVjYXJkX2dldHMyNChjaWQucl9maXFvZmYpOworCWVjLT5maXFhZGRyCT0KKwllYy0+aXJxYWRkcgk9ICh2b2lkIF9faW9tZW0gKilpb2FkZHIoZWMtPnBvZGFkZHIpOworCisJaWYgKGVjLT5jaWQuaXMpIHsKKwkJZWMtPmlycW1hc2sgPSBlYy0+Y2lkLmlycW1hc2s7CisJCWVjLT5pcnFhZGRyICs9IGVjLT5jaWQuaXJxb2ZmOworCQllYy0+ZmlxbWFzayA9IGVjLT5jaWQuZmlxbWFzazsKKwkJZWMtPmZpcWFkZHIgKz0gZWMtPmNpZC5maXFvZmY7CisJfSBlbHNlIHsKKwkJZWMtPmlycW1hc2sgPSAxOworCQllYy0+ZmlxbWFzayA9IDQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihibGFja2xpc3QpIC8gc2l6ZW9mKCpibGFja2xpc3QpOyBpKyspCisJCWlmIChibGFja2xpc3RbaV0ubWFudWZhY3R1cmVyID09IGVjLT5jaWQubWFudWZhY3R1cmVyICYmCisJCSAgICBibGFja2xpc3RbaV0ucHJvZHVjdCA9PSBlYy0+Y2lkLnByb2R1Y3QpIHsKKwkJCWVjLT5jYXJkX2Rlc2MgPSBibGFja2xpc3RbaV0udHlwZTsKKwkJCWJyZWFrOworCQl9CisKKwkvKgorCSAqIGhvb2sgdGhlIGludGVycnVwdCBoYW5kbGVycworCSAqLworCWlmIChzbG90IDwgOCkgeworCQllYy0+aXJxID0gMzIgKyBzbG90OworCQlzZXRfaXJxX2NoaXAoZWMtPmlycSwgJmVjYXJkX2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoZWMtPmlycSwgZG9fbGV2ZWxfSVJRKTsKKwkJc2V0X2lycV9mbGFncyhlYy0+aXJxLCBJUlFGX1ZBTElEKTsKKwl9CisKKyNpZmRlZiBJT19FQ19NRU1DOF9CQVNFCisJaWYgKHNsb3QgPT0gOCkKKwkJZWMtPmlycSA9IDExOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfUlBDCisJLyogT24gUmlzY1BDLCBvbmx5IGZpcnN0IHR3byBzbG90cyBoYXZlIERNQSBjYXBhYmlsaXR5ICovCisJaWYgKHNsb3QgPCAyKQorCQllYy0+ZG1hID0gMiArIHNsb3Q7CisjZW5kaWYKKworCWZvciAoZWNwID0gJmNhcmRzOyAqZWNwOyBlY3AgPSAmKCplY3ApLT5uZXh0KTsKKworCSplY3AgPSBlYzsKKwlzbG90X3RvX2V4cGNhcmRbc2xvdF0gPSBlYzsKKworCWRldmljZV9yZWdpc3RlcigmZWMtPmRldik7CisKKwlyZXR1cm4gMDsKKworIG5vZGV2OgorCWVjYXJkX2ZyZWVfY2FyZChlYyk7Cisgbm9tZW06CisJcmV0dXJuIHJjOworfQorCisvKgorICogSW5pdGlhbGlzZSB0aGUgZXhwYW5zaW9uIGNhcmQgc3lzdGVtLgorICogTG9jYXRlIGFsbCBoYXJkd2FyZSAtIGludGVycnVwdCBtYW5hZ2VtZW50IGFuZAorICogYWN0dWFsIGNhcmRzLgorICovCitzdGF0aWMgaW50IF9faW5pdCBlY2FyZF9pbml0KHZvaWQpCit7CisJaW50IHNsb3QsIGlycWh3LCByZXQ7CisKKwlyZXQgPSBrZXJuZWxfdGhyZWFkKGVjYXJkX3Rhc2ssIE5VTEwsIENMT05FX0tFUk5FTCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFY2FyZDogdW5hYmxlIHRvIGNyZWF0ZSBrZXJuZWwgdGhyZWFkOiAlZFxuIiwKKwkJICAgICAgIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcHJpbnRrKCJQcm9iaW5nIGV4cGFuc2lvbiBjYXJkc1xuIik7CisKKwlmb3IgKHNsb3QgPSAwOyBzbG90IDwgODsgc2xvdCArKykgeworCQlpZiAoZWNhcmRfcHJvYmUoc2xvdCwgRUNBUkRfRUFTSSkgPT0gLUVOT0RFVikKKwkJCWVjYXJkX3Byb2JlKHNsb3QsIEVDQVJEX0lPQyk7CisJfQorCisjaWZkZWYgSU9fRUNfTUVNQzhfQkFTRQorCWVjYXJkX3Byb2JlKDgsIEVDQVJEX0lPQyk7CisjZW5kaWYKKworCWlycWh3ID0gZWNhcmRfcHJvYmVpcnFodygpOworCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VYUEFOU0lPTkNBUkQsCisJCQkJaXJxaHcgPyBlY2FyZF9pcnFleHBfaGFuZGxlciA6IGVjYXJkX2lycV9oYW5kbGVyKTsKKworCWVjYXJkX3Byb2NfaW5pdCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N1YnN5c19pbml0Y2FsbChlY2FyZF9pbml0KTsKKworLyoKKyAqCUVDQVJEICJidXMiCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWNhcmRfaWQgKgorZWNhcmRfbWF0Y2hfZGV2aWNlKGNvbnN0IHN0cnVjdCBlY2FyZF9pZCAqaWRzLCBzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaWRzW2ldLm1hbnVmYWN0dXJlciAhPSA2NTUzNTsgaSsrKQorCQlpZiAoZWMtPmNpZC5tYW51ZmFjdHVyZXIgPT0gaWRzW2ldLm1hbnVmYWN0dXJlciAmJgorCQkgICAgZWMtPmNpZC5wcm9kdWN0ID09IGlkc1tpXS5wcm9kdWN0KQorCQkJcmV0dXJuIGlkcyArIGk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBlY2FyZF9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMgPSBFQ0FSRF9ERVYoZGV2KTsKKwlzdHJ1Y3QgZWNhcmRfZHJpdmVyICpkcnYgPSBFQ0FSRF9EUlYoZGV2LT5kcml2ZXIpOworCWNvbnN0IHN0cnVjdCBlY2FyZF9pZCAqaWQ7CisJaW50IHJldDsKKworCWlkID0gZWNhcmRfbWF0Y2hfZGV2aWNlKGRydi0+aWRfdGFibGUsIGVjKTsKKworCWVjYXJkX2NsYWltKGVjKTsKKwlyZXQgPSBkcnYtPnByb2JlKGVjLCBpZCk7CisJaWYgKHJldCkKKwkJZWNhcmRfcmVsZWFzZShlYyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBlY2FyZF9kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjID0gRUNBUkRfREVWKGRldik7CisJc3RydWN0IGVjYXJkX2RyaXZlciAqZHJ2ID0gRUNBUkRfRFJWKGRldi0+ZHJpdmVyKTsKKworCWRydi0+cmVtb3ZlKGVjKTsKKwllY2FyZF9yZWxlYXNlKGVjKTsKKworCXJldHVybiAwOworfQorCisvKgorICogQmVmb3JlIHJlYm9vdGluZywgd2UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGUgZXhwYW5zaW9uIGNhcmQgaXMgaW4gYQorICogc2Vuc2libGUgc3RhdGUsIHNvIGl0IGNhbiBiZSByZS1kZXRlY3RlZC4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgZmlyc3QKKyAqIHBhZ2Ugb2YgdGhlIFJPTSBtdXN0IGJlIHZpc2libGUuICBXZSBjYWxsIHRoZSBleHBhbnNpb24gY2FyZHMgcmVzZXQKKyAqIGhhbmRsZXIsIGlmIGFueS4KKyAqLworc3RhdGljIHZvaWQgZWNhcmRfZHJ2X3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjID0gRUNBUkRfREVWKGRldik7CisJc3RydWN0IGVjYXJkX2RyaXZlciAqZHJ2ID0gRUNBUkRfRFJWKGRldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgZWNhcmRfcmVxdWVzdCByZXE7CisKKwlpZiAoZHJ2LT5zaHV0ZG93bikKKwkJZHJ2LT5zaHV0ZG93bihlYyk7CisJZWNhcmRfcmVsZWFzZShlYyk7CisKKwkvKgorCSAqIElmIHRoaXMgY2FyZCBoYXMgYSBsb2FkZXIsIGNhbGwgdGhlIHJlc2V0IGhhbmRsZXIuCisJICovCisJaWYgKGVjLT5sb2FkZXIpIHsKKwkJcmVxLmZuID0gZWNhcmRfdGFza19yZXNldDsKKwkJcmVxLmVjID0gZWM7CisJCWVjYXJkX2NhbGwoJnJlcSk7CisJfQorfQorCitpbnQgZWNhcmRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBlY2FyZF9kcml2ZXIgKmRydikKK3sKKwlkcnYtPmRydi5idXMgPSAmZWNhcmRfYnVzX3R5cGU7CisJZHJ2LT5kcnYucHJvYmUgPSBlY2FyZF9kcnZfcHJvYmU7CisJZHJ2LT5kcnYucmVtb3ZlID0gZWNhcmRfZHJ2X3JlbW92ZTsKKwlkcnYtPmRydi5zaHV0ZG93biA9IGVjYXJkX2Rydl9zaHV0ZG93bjsKKworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmRydi0+ZHJ2KTsKK30KKwordm9pZCBlY2FyZF9yZW1vdmVfZHJpdmVyKHN0cnVjdCBlY2FyZF9kcml2ZXIgKmRydikKK3sKKwlkcml2ZXJfdW5yZWdpc3RlcigmZHJ2LT5kcnYpOworfQorCitzdGF0aWMgaW50IGVjYXJkX21hdGNoKHN0cnVjdCBkZXZpY2UgKl9kZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpfZHJ2KQoreworCXN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMgPSBFQ0FSRF9ERVYoX2Rldik7CisJc3RydWN0IGVjYXJkX2RyaXZlciAqZHJ2ID0gRUNBUkRfRFJWKF9kcnYpOworCWludCByZXQ7CisKKwlpZiAoZHJ2LT5pZF90YWJsZSkgeworCQlyZXQgPSBlY2FyZF9tYXRjaF9kZXZpY2UoZHJ2LT5pZF90YWJsZSwgZWMpICE9IE5VTEw7CisJfSBlbHNlIHsKKwkJcmV0ID0gZWMtPmNpZC5pZCA9PSBkcnYtPmlkOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBidXNfdHlwZSBlY2FyZF9idXNfdHlwZSA9IHsKKwkubmFtZQkJPSAiZWNhcmQiLAorCS5kZXZfYXR0cnMJPSBlY2FyZF9kZXZfYXR0cnMsCisJLm1hdGNoCQk9IGVjYXJkX21hdGNoLAorfTsKKworc3RhdGljIGludCBlY2FyZF9idXNfaW5pdCh2b2lkKQoreworCXJldHVybiBidXNfcmVnaXN0ZXIoJmVjYXJkX2J1c190eXBlKTsKK30KKworcG9zdGNvcmVfaW5pdGNhbGwoZWNhcmRfYnVzX2luaXQpOworCitFWFBPUlRfU1lNQk9MKGVjYXJkX3JlYWRjaHVuayk7CitFWFBPUlRfU1lNQk9MKF9fZWNhcmRfYWRkcmVzcyk7CitFWFBPUlRfU1lNQk9MKGVjYXJkX3JlZ2lzdGVyX2RyaXZlcik7CitFWFBPUlRfU1lNQk9MKGVjYXJkX3JlbW92ZV9kcml2ZXIpOworRVhQT1JUX1NZTUJPTChlY2FyZF9idXNfdHlwZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjI3YzMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwpAQCAtMCwwICsxLDc0NSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NiwxOTk3LDE5OTggUnVzc2VsbCBLaW5nLgorICogIEFSTTcwMCBmaXggYnkgTWF0dGhldyBHb2Rib2x0IChsaW51eC11c2VyQHdpbGxvdGhld2lzcC5kZW1vbi5jby51aykKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBMb3ctbGV2ZWwgdmVjdG9yIGludGVyZmFjZSByb3V0aW5lcworICoKKyAqICBOb3RlOiAgdGhlcmUgaXMgYSBTdHJvbmdBUk0gYnVnIGluIHRoZSBTVE1JQSBybiwge3JlZ3N9XiBpbnN0cnVjdGlvbiB0aGF0IGNhdXNlcworICogIGl0IHRvIHNhdmUgd3JvbmcgdmFsdWVzLi4uICBCZSBhd2FyZSEKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS9nbHVlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS92ZnBtYWNyb3MuaD4KKworI2luY2x1ZGUgImVudHJ5LWhlYWRlci5TIgorCisvKgorICogSW52YWxpZCBtb2RlIGhhbmRsZXJzCisgKi8KKwkubWFjcm8JaW52X2VudHJ5LCBzeW0sIHJlYXNvbgorCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUJCUAgQWxsb2NhdGUgZnJhbWUgc2l6ZSBpbiBvbmUgZ28KKwlzdG1pYQlzcCwge3IwIC0gbHJ9CQkJQCBTYXZlIFhYWCByMCAtIGxyCisJbGRyCXI0LCAuTENcc3ltCisJbW92CXIxLCAjXHJlYXNvbgorCS5lbmRtCisKK19fcGFidF9pbnZhbGlkOgorCWludl9lbnRyeSBhYnQsIEJBRF9QUkVGRVRDSAorCWIJMWYKKworX19kYWJ0X2ludmFsaWQ6CisJaW52X2VudHJ5IGFidCwgQkFEX0RBVEEKKwliCTFmCisKK19faXJxX2ludmFsaWQ6CisJaW52X2VudHJ5IGlycSwgQkFEX0lSUQorCWIJMWYKKworX191bmRfaW52YWxpZDoKKwlpbnZfZW50cnkgdW5kLCBCQURfVU5ERUZJTlNUUgorCisxOgl6ZXJvX2ZwCisJbGRtaWEJcjQsIHtyNSAtIHI3fQkJCUAgR2V0IFhYWCBwYywgY3Bzciwgb2xkX3IwCisJYWRkCXI0LCBzcCwgI1NfUEMKKwlzdG1pYQlyNCwge3I1IC0gcjd9CQkJQCBTYXZlIFhYWCBwYywgY3Bzciwgb2xkX3IwCisJbW92CXIwLCBzcAorCWFuZAlyMiwgcjYsICMzMQkJCUAgaW50IG1vZGUKKwliCWJhZF9tb2RlCisKKy8qCisgKiBTVkMgbW9kZSBoYW5kbGVycworICovCisJLm1hY3JvCXN2Y19lbnRyeSwgc3ltCisJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQorCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBzYXZlIHIwIC0gcjEyCisJbGRyCXIyLCAuTENcc3ltCisJYWRkCXIwLCBzcCwgI1NfRlJBTUVfU0laRQorCWxkbWlhCXIyLCB7cjIgLSByNH0JCQlAIGdldCBwYywgY3BzcgorCWFkZAlyNSwgc3AsICNTX1NQCisJbW92CXIxLCBscgorCisJQAorCUAgV2UgYXJlIG5vdyByZWFkeSB0byBmaWxsIGluIHRoZSByZW1haW5pbmcgYmxhbmtzIG9uIHRoZSBzdGFjazoKKwlACisJQCAgcjAgLSBzcF9zdmMKKwlAICByMSAtIGxyX3N2YworCUAgIHIyIC0gbHJfPGV4Y2VwdGlvbj4sIGFscmVhZHkgZml4ZWQgdXAgZm9yIGNvcnJlY3QgcmV0dXJuL3Jlc3RhcnQKKwlAICByMyAtIHNwc3JfPGV4Y2VwdGlvbj4KKwlAICByNCAtIG9yaWdfcjAgKHNlZSBwdF9yZWdzIGRlZmluaXRpb24gaW4gcHRyYWNlLmgpCisJQAorCXN0bWlhCXI1LCB7cjAgLSByNH0KKwkuZW5kbQorCisJLmFsaWduCTUKK19fZGFidF9zdmM6CisJc3ZjX2VudHJ5IGFidAorCisJQAorCUAgZ2V0IHJlYWR5IHRvIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIGFwcHJvcHJpYXRlCisJQAorCW1ycwlyOSwgY3BzcgorCXRzdAlyMywgI1BTUl9JX0JJVAorCWJpY2VxCXI5LCByOSwgI1BTUl9JX0JJVAorCisJQAorCUAgQ2FsbCB0aGUgcHJvY2Vzc29yLXNwZWNpZmljIGFib3J0IGhhbmRsZXI6CisJQAorCUAgIHIyIC0gYWJvcnRlZCBjb250ZXh0IHBjCisJQCAgcjMgLSBhYm9ydGVkIGNvbnRleHQgY3BzcgorCUAKKwlAIFRoZSBhYm9ydCBoYW5kbGVyIG11c3QgcmV0dXJuIHRoZSBhYm9ydGVkIGFkZHJlc3MgaW4gcjAsIGFuZAorCUAgdGhlIGZhdWx0IHN0YXR1cyByZWdpc3RlciBpbiByMS4gIHI5IG11c3QgYmUgcHJlc2VydmVkLgorCUAKKyNpZmRlZiBNVUxUSV9BQk9SVAorCWxkcglyNCwgLkxDcHJvY2ZucworCW1vdglsciwgcGMKKwlsZHIJcGMsIFtyNF0KKyNlbHNlCisJYmwJQ1BVX0FCT1JUX0hBTkRMRVIKKyNlbmRpZgorCisJQAorCUAgc2V0IGRlc2lyZWQgSVJRIHN0YXRlLCB0aGVuIGNhbGwgbWFpbiBoYW5kbGVyCisJQAorCW1zcgljcHNyX2MsIHI5CisJbW92CXIyLCBzcAorCWJsCWRvX0RhdGFBYm9ydAorCisJQAorCUAgSVJRcyBvZmYgYWdhaW4gYmVmb3JlIHB1bGxpbmcgcHJlc2VydmVkIGRhdGEgb2ZmIHRoZSBzdGFjaworCUAKKwlkaXNhYmxlX2lycSByMAorCisJQAorCUAgcmVzdG9yZSBTUFNSIGFuZCByZXN0YXJ0IHRoZSBpbnN0cnVjdGlvbgorCUAKKwlsZHIJcjAsIFtzcCwgI1NfUFNSXQorCW1zcglzcHNyX2N4c2YsIHIwCisJbGRtaWEJc3AsIHtyMCAtIHBjfV4JCQlAIGxvYWQgcjAgLSBwYywgY3BzcgorCisJLmFsaWduCTUKK19faXJxX3N2YzoKKwlzdmNfZW50cnkgaXJxCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwlnZXRfdGhyZWFkX2luZm8gcjgKKwlsZHIJcjksIFtyOCwgI1RJX1BSRUVNUFRdCQlAIGdldCBwcmVlbXB0IGNvdW50CisJYWRkCXI3LCByOSwgIzEJCQlAIGluY3JlbWVudCBpdAorCXN0cglyNywgW3I4LCAjVElfUFJFRU1QVF0KKyNlbmRpZgorMToJZ2V0X2lycW5yX2FuZF9iYXNlIHIwLCByNiwgcjUsIGxyCisJbW92bmUJcjEsIHNwCisJQAorCUAgcm91dGluZSBjYWxsZWQgd2l0aCByMCA9IGlycSBudW1iZXIsIHIxID0gc3RydWN0IHB0X3JlZ3MgKgorCUAKKwlhZHJuZQlsciwgMWIKKwlibmUJYXNtX2RvX0lSUQorI2lmZGVmIENPTkZJR19QUkVFTVBUCisJbGRyCXIwLCBbcjgsICNUSV9GTEFHU10JCUAgZ2V0IGZsYWdzCisJdHN0CXIwLCAjX1RJRl9ORUVEX1JFU0NIRUQKKwlibG5lCXN2Y19wcmVlbXB0CitwcmVlbXB0X3JldHVybjoKKwlsZHIJcjAsIFtyOCwgI1RJX1BSRUVNUFRdCQlAIHJlYWQgcHJlZW1wdCB2YWx1ZQorCXRlcQlyMCwgcjcKKwlzdHIJcjksIFtyOCwgI1RJX1BSRUVNUFRdCQlAIHJlc3RvcmUgcHJlZW1wdCBjb3VudAorCXN0cm5lCXIwLCBbcjAsIC1yMF0JCQlAIGJ1ZygpCisjZW5kaWYKKwlsZHIJcjAsIFtzcCwgI1NfUFNSXQkJQCBpcnFzIGFyZSBhbHJlYWR5IGRpc2FibGVkCisJbXNyCXNwc3JfY3hzZiwgcjAKKwlsZG1pYQlzcCwge3IwIC0gcGN9XgkJCUAgbG9hZCByMCAtIHBjLCBjcHNyCisKKwkubHRvcmcKKworI2lmZGVmIENPTkZJR19QUkVFTVBUCitzdmNfcHJlZW1wdDoKKwl0ZXEJcjksICMwCQkJCUAgd2FzIHByZWVtcHQgY291bnQgPSAwCisJbGRyZXEJcjYsIC5MQ2lycV9zdGF0CisJbW92bmUJcGMsIGxyCQkJCUAgbm8KKwlsZHIJcjAsIFtyNiwgIzRdCQkJQCBsb2NhbF9pcnFfY291bnQKKwlsZHIJcjEsIFtyNiwgIzhdCQkJQCBsb2NhbF9iaF9jb3VudAorCWFkZHMJcjAsIHIwLCByMQorCW1vdm5lCXBjLCBscgorCW1vdglyNywgIzAJCQkJQCBwcmVlbXB0X3NjaGVkdWxlX2lycQorCXN0cglyNywgW3I4LCAjVElfUFJFRU1QVF0JCUAgZXhwZWN0cyBwcmVlbXB0X2NvdW50ID09IDAKKzE6CWJsCXByZWVtcHRfc2NoZWR1bGVfaXJxCQlAIGlycSBlbi9kaXNhYmxlIGlzIGRvbmUgaW5zaWRlCisJbGRyCXIwLCBbcjgsICNUSV9GTEFHU10JCUAgZ2V0IG5ldyB0YXNrcyBUSV9GTEFHUworCXRzdAlyMCwgI19USUZfTkVFRF9SRVNDSEVECisJYmVxCXByZWVtcHRfcmV0dXJuCQkJQCBnbyBhZ2FpbgorCWIJMWIKKyNlbmRpZgorCisJLmFsaWduCTUKK19fdW5kX3N2YzoKKwlzdmNfZW50cnkgdW5kCisKKwlACisJQCBjYWxsIGVtdWxhdGlvbiBjb2RlLCB3aGljaCByZXR1cm5zIHVzaW5nIHI5IGlmIGl0IGhhcyBlbXVsYXRlZAorCUAgdGhlIGluc3RydWN0aW9uLCBvciB0aGUgbW9yZSBjb252ZW50aW9uYWwgbHIgaWYgd2UgYXJlIHRvIHRyZWF0CisJQCB0aGlzIGFzIGEgcmVhbCB1bmRlZmluZWQgaW5zdHJ1Y3Rpb24KKwlACisJQCAgcjAgLSBpbnN0cnVjdGlvbgorCUAKKwlsZHIJcjAsIFtyMiwgIy00XQorCWFkcglyOSwgMWYKKwlibAljYWxsX2ZwZQorCisJbW92CXIwLCBzcAkJCQlAIHN0cnVjdCBwdF9yZWdzICpyZWdzCisJYmwJZG9fdW5kZWZpbnN0cgorCisJQAorCUAgSVJRcyBvZmYgYWdhaW4gYmVmb3JlIHB1bGxpbmcgcHJlc2VydmVkIGRhdGEgb2ZmIHRoZSBzdGFjaworCUAKKzE6CWRpc2FibGVfaXJxIHIwCisKKwlACisJQCByZXN0b3JlIFNQU1IgYW5kIHJlc3RhcnQgdGhlIGluc3RydWN0aW9uCisJQAorCWxkcglsciwgW3NwLCAjU19QU1JdCQlAIEdldCBTVkMgY3BzcgorCW1zcglzcHNyX2N4c2YsIGxyCisJbGRtaWEJc3AsIHtyMCAtIHBjfV4JCQlAIFJlc3RvcmUgU1ZDIHJlZ2lzdGVycworCisJLmFsaWduCTUKK19fcGFidF9zdmM6CisJc3ZjX2VudHJ5IGFidAorCisJQAorCUAgcmUtZW5hYmxlIGludGVycnVwdHMgaWYgYXBwcm9wcmlhdGUKKwlACisJbXJzCXI5LCBjcHNyCisJdHN0CXIzLCAjUFNSX0lfQklUCisJYmljZXEJcjksIHI5LCAjUFNSX0lfQklUCisJbXNyCWNwc3JfYywgcjkKKworCUAKKwlAIHNldCBhcmdzLCB0aGVuIGNhbGwgbWFpbiBoYW5kbGVyCisJQAorCUAgIHIwIC0gYWRkcmVzcyBvZiBmYXVsdGluZyBpbnN0cnVjdGlvbgorCUAgIHIxIC0gcG9pbnRlciB0byByZWdpc3RlcnMgb24gc3RhY2sKKwlACisJbW92CXIwLCByMgkJCQlAIGFkZHJlc3MgKHBjKQorCW1vdglyMSwgc3AJCQkJQCByZWdzCisJYmwJZG9fUHJlZmV0Y2hBYm9ydAkJQCBjYWxsIGFib3J0IGhhbmRsZXIKKworCUAKKwlAIElSUXMgb2ZmIGFnYWluIGJlZm9yZSBwdWxsaW5nIHByZXNlcnZlZCBkYXRhIG9mZiB0aGUgc3RhY2sKKwlACisJZGlzYWJsZV9pcnEgcjAKKworCUAKKwlAIHJlc3RvcmUgU1BTUiBhbmQgcmVzdGFydCB0aGUgaW5zdHJ1Y3Rpb24KKwlACisJbGRyCXIwLCBbc3AsICNTX1BTUl0KKwltc3IJc3Bzcl9jeHNmLCByMAorCWxkbWlhCXNwLCB7cjAgLSBwY31eCQkJQCBsb2FkIHIwIC0gcGMsIGNwc3IKKworCS5hbGlnbgk1CisuTENpcnE6CisJLndvcmQJX190ZW1wX2lycQorLkxDdW5kOgorCS53b3JkCV9fdGVtcF91bmQKKy5MQ2FidDoKKwkud29yZAlfX3RlbXBfYWJ0CisjaWZkZWYgTVVMVElfQUJPUlQKKy5MQ3Byb2NmbnM6CisJLndvcmQJcHJvY2Vzc29yCisjZW5kaWYKKy5MQ2ZwOgorCS53b3JkCWZwX2VudGVyCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKy5MQ2lycV9zdGF0OgorCS53b3JkCWlycV9zdGF0CisjZW5kaWYKKworLyoKKyAqIFVzZXIgbW9kZSBoYW5kbGVycworICovCisJLm1hY3JvCXVzcl9lbnRyeSwgc3ltCisJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQkJQCBBbGxvY2F0ZSBmcmFtZSBzaXplIGluIG9uZSBnbworCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBzYXZlIHIwIC0gcjEyCisJbGRyCXI3LCAuTENcc3ltCisJYWRkCXI1LCBzcCwgI1NfUEMKKwlsZG1pYQlyNywge3IyIC0gcjR9CQkJQCBHZXQgVVNSIHBjLCBjcHNyCisKKwlACisJQCBXZSBhcmUgbm93IHJlYWR5IHRvIGZpbGwgaW4gdGhlIHJlbWFpbmluZyBibGFua3Mgb24gdGhlIHN0YWNrOgorCUAKKwlAICByMiAtIGxyXzxleGNlcHRpb24+LCBhbHJlYWR5IGZpeGVkIHVwIGZvciBjb3JyZWN0IHJldHVybi9yZXN0YXJ0CisJQCAgcjMgLSBzcHNyXzxleGNlcHRpb24+CisJQCAgcjQgLSBvcmlnX3IwIChzZWUgcHRfcmVncyBkZWZpbml0aW9uIGluIHB0cmFjZS5oKQorCUAKKwlAIEFsc28sIHNlcGFyYXRlbHkgc2F2ZSBzcF91c3IgYW5kIGxyX3VzcgorCUAKKwlzdG1pYQlyNSwge3IyIC0gcjR9CisJc3RtZGIJcjUsIHtzcCwgbHJ9XgorCisJQAorCUAgRW5hYmxlIHRoZSBhbGlnbm1lbnQgdHJhcCB3aGlsZSBpbiBrZXJuZWwgbW9kZQorCUAKKwlhbGlnbm1lbnRfdHJhcCByNywgcjAsIF9fdGVtcF9cc3ltCisKKwlACisJQCBDbGVhciBGUCB0byBtYXJrIHRoZSBmaXJzdCBzdGFjayBmcmFtZQorCUAKKwl6ZXJvX2ZwCisJLmVuZG0KKworCS5hbGlnbgk1CitfX2RhYnRfdXNyOgorCXVzcl9lbnRyeSBhYnQKKworCUAKKwlAIENhbGwgdGhlIHByb2Nlc3Nvci1zcGVjaWZpYyBhYm9ydCBoYW5kbGVyOgorCUAKKwlAICByMiAtIGFib3J0ZWQgY29udGV4dCBwYworCUAgIHIzIC0gYWJvcnRlZCBjb250ZXh0IGNwc3IKKwlACisJQCBUaGUgYWJvcnQgaGFuZGxlciBtdXN0IHJldHVybiB0aGUgYWJvcnRlZCBhZGRyZXNzIGluIHIwLCBhbmQKKwlAIHRoZSBmYXVsdCBzdGF0dXMgcmVnaXN0ZXIgaW4gcjEuCisJQAorI2lmZGVmIE1VTFRJX0FCT1JUCisJbGRyCXI0LCAuTENwcm9jZm5zCisJbW92CWxyLCBwYworCWxkcglwYywgW3I0XQorI2Vsc2UKKwlibAlDUFVfQUJPUlRfSEFORExFUgorI2VuZGlmCisKKwlACisJQCBJUlFzIG9uLCB0aGVuIGNhbGwgdGhlIG1haW4gaGFuZGxlcgorCUAKKwllbmFibGVfaXJxIHIyCisJbW92CXIyLCBzcAorCWFkcglsciwgcmV0X2Zyb21fZXhjZXB0aW9uCisJYglkb19EYXRhQWJvcnQKKworCS5hbGlnbgk1CitfX2lycV91c3I6CisJdXNyX2VudHJ5IGlycQorCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwlnZXRfdGhyZWFkX2luZm8gcjgKKwlsZHIJcjksIFtyOCwgI1RJX1BSRUVNUFRdCQlAIGdldCBwcmVlbXB0IGNvdW50CisJYWRkCXI3LCByOSwgIzEJCQlAIGluY3JlbWVudCBpdAorCXN0cglyNywgW3I4LCAjVElfUFJFRU1QVF0KKyNlbmRpZgorMToJZ2V0X2lycW5yX2FuZF9iYXNlIHIwLCByNiwgcjUsIGxyCisJbW92bmUJcjEsIHNwCisJYWRybmUJbHIsIDFiCisJQAorCUAgcm91dGluZSBjYWxsZWQgd2l0aCByMCA9IGlycSBudW1iZXIsIHIxID0gc3RydWN0IHB0X3JlZ3MgKgorCUAKKwlibmUJYXNtX2RvX0lSUQorI2lmZGVmIENPTkZJR19QUkVFTVBUCisJbGRyCXIwLCBbcjgsICNUSV9QUkVFTVBUXQorCXRlcQlyMCwgcjcKKwlzdHIJcjksIFtyOCwgI1RJX1BSRUVNUFRdCisJc3RybmUJcjAsIFtyMCwgLXIwXQorCW1vdgl0c2ssIHI4CisjZWxzZQorCWdldF90aHJlYWRfaW5mbyB0c2sKKyNlbmRpZgorCW1vdgl3aHksICMwCisJYglyZXRfdG9fdXNlcgorCisJLmx0b3JnCisKKwkuYWxpZ24JNQorX191bmRfdXNyOgorCXVzcl9lbnRyeSB1bmQKKworCXRzdAlyMywgI1BTUl9UX0JJVAkJCUAgVGh1bWIgbW9kZT8KKwlibmUJZnB1bmRlZmluc3RyCQkJQCBpZ25vcmUgRlAKKwlzdWIJcjQsIHIyLCAjNAorCisJQAorCUAgZmFsbCB0aHJvdWdoIHRvIHRoZSBlbXVsYXRpb24gY29kZSwgd2hpY2ggcmV0dXJucyB1c2luZyByOSBpZgorCUAgaXQgaGFzIGVtdWxhdGVkIHRoZSBpbnN0cnVjdGlvbiwgb3IgdGhlIG1vcmUgY29udmVudGlvbmFsIGxyCisJQCBpZiB3ZSBhcmUgdG8gdHJlYXQgdGhpcyBhcyBhIHJlYWwgdW5kZWZpbmVkIGluc3RydWN0aW9uCisJQAorCUAgIHIwIC0gaW5zdHJ1Y3Rpb24KKwlACisxOglsZHJ0CXIwLCBbcjRdCisJYWRyCXI5LCByZXRfZnJvbV9leGNlcHRpb24KKwlhZHIJbHIsIGZwdW5kZWZpbnN0cgorCUAKKwlAIGZhbGx0aHJvdWdoIHRvIGNhbGxfZnBlCisJQAorCisvKgorICogVGhlIG91dCBvZiBsaW5lIGZpeHVwIGZvciB0aGUgbGRydCBhYm92ZS4KKyAqLworCS5zZWN0aW9uIC5maXh1cCwgImF4IgorMjoJbW92CXBjLCByOQorCS5wcmV2aW91cworCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCisJLmxvbmcJMWIsIDJiCisJLnByZXZpb3VzCisKKy8qCisgKiBDaGVjayB3aGV0aGVyIHRoZSBpbnN0cnVjdGlvbiBpcyBhIGNvLXByb2Nlc3NvciBpbnN0cnVjdGlvbi4KKyAqIElmIHllcywgd2UgbmVlZCB0byBjYWxsIHRoZSByZWxldmFudCBjby1wcm9jZXNzb3IgaGFuZGxlci4KKyAqCisgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgZG8gYSBmdWxsIGNoZWNrIGhlcmUgZm9yIHRoZSBjby1wcm9jZXNzb3IKKyAqIGluc3RydWN0aW9uczsgYWxsIGluc3RydWN0aW9ucyB3aXRoIGJpdCAyNyBzZXQgYXJlIHdlbGwKKyAqIGRlZmluZWQuICBUaGUgb25seSBpbnN0cnVjdGlvbnMgdGhhdCBzaG91bGQgZmF1bHQgYXJlIHRoZQorICogY28tcHJvY2Vzc29yIGluc3RydWN0aW9ucy4gIEhvd2V2ZXIsIHdlIGhhdmUgdG8gd2F0Y2ggb3V0CisgKiBmb3IgdGhlIEFSTTYvQVJNNyBTV0kgYnVnLgorICoKKyAqIEVtdWxhdG9ycyBtYXkgd2lzaCB0byBtYWtlIHVzZSBvZiB0aGUgZm9sbG93aW5nIHJlZ2lzdGVyczoKKyAqICByMCAgPSBpbnN0cnVjdGlvbiBvcGNvZGUuCisgKiAgcjIgID0gUEMrNAorICogIHIxMCA9IHRoaXMgdGhyZWFkcyB0aHJlYWRfaW5mbyBzdHJ1Y3R1cmUuCisgKi8KK2NhbGxfZnBlOgorCXRzdAlyMCwgIzB4MDgwMDAwMDAJCQlAIG9ubHkgQ0RQL0NQUlQvTERDL1NUQyBoYXZlIGJpdCAyNworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9BUk02MTApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9BUk03MTApCisJYW5kCXI4LCByMCwgIzB4MGYwMDAwMDAJCUAgbWFzayBvdXQgb3AtY29kZSBiaXRzCisJdGVxbmUJcjgsICMweDBmMDAwMDAwCQkJQCBTV0kgKEFSTTYvNyBidWcpPworI2VuZGlmCisJbW92ZXEJcGMsIGxyCisJZ2V0X3RocmVhZF9pbmZvIHIxMAkJCUAgZ2V0IGN1cnJlbnQgdGhyZWFkCisJYW5kCXI4LCByMCwgIzB4MDAwMDBmMDAJCUAgbWFzayBvdXQgQ1AgbnVtYmVyCisJbW92CXI3LCAjMQorCWFkZAlyNiwgcjEwLCAjVElfVVNFRF9DUAorCXN0cmIJcjcsIFtyNiwgcjgsIGxzciAjOF0JCUAgc2V0IGFwcHJvcHJpYXRlIHVzZWRfY3BbXQorI2lmZGVmIENPTkZJR19JV01NWFQKKwlAIFRlc3QgaWYgd2UgbmVlZCB0byBnaXZlIGFjY2VzcyB0byBpV01NWHQgY29wcm9jZXNzb3JzCisJbGRyCXI1LCBbcjEwLCAjVElfRkxBR1NdCisJcnNicwlyNywgcjgsICMoMSA8PCA4KQkJQCBDUCAwIG9yIDEgb25seQorCW1vdmNzcwlyNywgcjUsIGxzciAjKFRJRl9VU0lOR19JV01NWFQgKyAxKQorCWJjcwlpd21teHRfdGFza19lbmFibGUKKyNlbmRpZgorCWVuYWJsZV9pcnEgcjcKKwlhZGQJcGMsIHBjLCByOCwgbHNyICM2CisJbW92CXIwLCByMAorCisJbW92CXBjLCBscgkJCQlAIENQIzAKKwliCWRvX2ZwZQkJCQlAIENQIzEgKEZQRSkKKwliCWRvX2ZwZQkJCQlAIENQIzIgKEZQRSkKKwltb3YJcGMsIGxyCQkJCUAgQ1AjMworCW1vdglwYywgbHIJCQkJQCBDUCM0CisJbW92CXBjLCBscgkJCQlAIENQIzUKKwltb3YJcGMsIGxyCQkJCUAgQ1AjNgorCW1vdglwYywgbHIJCQkJQCBDUCM3CisJbW92CXBjLCBscgkJCQlAIENQIzgKKwltb3YJcGMsIGxyCQkJCUAgQ1AjOQorI2lmZGVmIENPTkZJR19WRlAKKwliCWRvX3ZmcAkJCQlAIENQIzEwIChWRlApCisJYglkb192ZnAJCQkJQCBDUCMxMSAoVkZQKQorI2Vsc2UKKwltb3YJcGMsIGxyCQkJCUAgQ1AjMTAgKFZGUCkKKwltb3YJcGMsIGxyCQkJCUAgQ1AjMTEgKFZGUCkKKyNlbmRpZgorCW1vdglwYywgbHIJCQkJQCBDUCMxMgorCW1vdglwYywgbHIJCQkJQCBDUCMxMworCW1vdglwYywgbHIJCQkJQCBDUCMxNCAoRGVidWcpCisJbW92CXBjLCBscgkJCQlAIENQIzE1IChDb250cm9sKQorCitkb19mcGU6CisJbGRyCXI0LCAuTENmcAorCWFkZAlyMTAsIHIxMCwgI1RJX0ZQU1RBVEUJCUAgcjEwID0gd29ya3NwYWNlCisJbGRyCXBjLCBbcjRdCQkJQCBDYWxsIEZQIG1vZHVsZSBVU1IgZW50cnkgcG9pbnQKKworLyoKKyAqIFRoZSBGUCBtb2R1bGUgaXMgY2FsbGVkIHdpdGggdGhlc2UgcmVnaXN0ZXJzIHNldDoKKyAqICByMCAgPSBpbnN0cnVjdGlvbgorICogIHIyICA9IFBDKzQKKyAqICByOSAgPSBub3JtYWwgInN1Y2Nlc3NmdWwiIHJldHVybiBhZGRyZXNzCisgKiAgcjEwID0gRlAgd29ya3NwYWNlCisgKiAgbHIgID0gdW5yZWNvZ25pc2VkIEZQIGluc3RydWN0aW9uIHJldHVybiBhZGRyZXNzCisgKi8KKworCS5kYXRhCitFTlRSWShmcF9lbnRlcikKKwkud29yZAlmcHVuZGVmaW5zdHIKKwkudGV4dAorCitmcHVuZGVmaW5zdHI6CisJbW92CXIwLCBzcAorCWFkcglsciwgcmV0X2Zyb21fZXhjZXB0aW9uCisJYglkb191bmRlZmluc3RyCisKKwkuYWxpZ24JNQorX19wYWJ0X3VzcjoKKwl1c3JfZW50cnkgYWJ0CisKKwllbmFibGVfaXJxIHIwCQkJCUAgRW5hYmxlIGludGVycnVwdHMKKwltb3YJcjAsIHIyCQkJCUAgYWRkcmVzcyAocGMpCisJbW92CXIxLCBzcAkJCQlAIHJlZ3MKKwlibAlkb19QcmVmZXRjaEFib3J0CQlAIGNhbGwgYWJvcnQgaGFuZGxlcgorCS8qIGZhbGwgdGhyb3VnaCAqLworLyoKKyAqIFRoaXMgaXMgdGhlIHJldHVybiBjb2RlIHRvIHVzZXIgbW9kZSBmb3IgYWJvcnQgaGFuZGxlcnMKKyAqLworRU5UUlkocmV0X2Zyb21fZXhjZXB0aW9uKQorCWdldF90aHJlYWRfaW5mbyB0c2sKKwltb3YJd2h5LCAjMAorCWIJcmV0X3RvX3VzZXIKKworLyoKKyAqIFJlZ2lzdGVyIHN3aXRjaCBmb3IgQVJNdjMgYW5kIEFSTXY0IHByb2Nlc3NvcnMKKyAqIHIwID0gcHJldmlvdXMgdGFza19zdHJ1Y3QsIHIxID0gcHJldmlvdXMgdGhyZWFkX2luZm8sIHIyID0gbmV4dCB0aHJlYWRfaW5mbworICogcHJldmlvdXMgYW5kIG5leHQgYXJlIGd1YXJhbnRlZWQgbm90IHRvIGJlIHRoZSBzYW1lLgorICovCitFTlRSWShfX3N3aXRjaF90bykKKwlhZGQJaXAsIHIxLCAjVElfQ1BVX1NBVkUKKwlsZHIJcjMsIFtyMiwgI1RJX1RQX1ZBTFVFXQorCXN0bWlhCWlwISwge3I0IC0gc2wsIGZwLCBzcCwgbHJ9CUAgU3RvcmUgbW9zdCByZWdzIG9uIHN0YWNrCisJbGRyCXI2LCBbcjIsICNUSV9DUFVfRE9NQUlOXSEKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfWFNDQUxFKSAmJiAhZGVmaW5lZChDT05GSUdfSVdNTVhUKQorCW1yYQlyNCwgcjUsIGFjYzAKKwlzdG1pYSAgIGlwLCB7cjQsIHI1fQorI2VuZGlmCisJbW92CXI0LCAjMHhmZmZmMGZmZgorCXN0cglyMywgW3I0LCAjLTNdCQkJQCBTZXQgVExTIHB0cgorCW1jcglwMTUsIDAsIHI2LCBjMywgYzAsIDAJCUAgU2V0IGRvbWFpbiByZWdpc3RlcgorI2lmZGVmIENPTkZJR19WRlAKKwlAIEFsd2F5cyBkaXNhYmxlIFZGUCBzbyB3ZSBjYW4gbGF6aWx5IHNhdmUvcmVzdG9yZSB0aGUgb2xkCisJQCBzdGF0ZS4gVGhpcyBvY2N1cnMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByZXZpb3VzIHRocmVhZC4KKwlWRlBGTVJYCXI0LCBGUEVYQworCWJpYwlyNCwgcjQsICNGUEVYQ19FTkFCTEUKKwlWRlBGTVhSCUZQRVhDLCByNAorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfSVdNTVhUKQorCWJsCWl3bW14dF90YXNrX3N3aXRjaAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1hTQ0FMRSkKKwlhZGQJcjQsIHIyLCAjNDAJCQlAIGNwdV9jb250ZXh0X3NhdmUtPmV4dHJhCisJbGRtaWIJcjQsIHtyNCwgcjV9CisJbWFyCWFjYzAsIHI0LCByNQorI2VuZGlmCisJbGRtaWIJcjIsIHtyNCAtIHNsLCBmcCwgc3AsIHBjfQlAIExvYWQgYWxsIHJlZ3Mgc2F2ZWQgcHJldmlvdXNseQorCisJX19JTklUCisvKgorICogVmVjdG9yIHN0dWJzLgorICoKKyAqIFRoaXMgY29kZSBpcyBjb3BpZWQgdG8gMHgyMDAgb3IgMHhmZmZmMDIwMCBzbyB3ZSBjYW4gdXNlIGJyYW5jaGVzIGluIHRoZQorICogdmVjdG9ycywgcmF0aGVyIHRoYW4gbGRyJ3MuCisgKgorICogQ29tbW9uIHN0dWIgZW50cnkgbWFjcm86CisgKiAgIEVudGVyIGluIElSUSBtb2RlLCBzcHNyID0gU1ZDL1VTUiBDUFNSLCBsciA9IFNWQy9VU1IgUEMKKyAqLworCS5tYWNybwl2ZWN0b3Jfc3R1YiwgbmFtZSwgc3ltLCBjb3JyZWN0aW9uPTAKKwkuYWxpZ24JNQorCit2ZWN0b3JfXG5hbWU6CisJbGRyCXIxMywgLkxDc1xzeW0KKwkuaWYgXGNvcnJlY3Rpb24KKwlzdWIJbHIsIGxyLCAjXGNvcnJlY3Rpb24KKwkuZW5kaWYKKwlzdHIJbHIsIFtyMTNdCQkJQCBzYXZlIGxyX0lSUQorCW1ycwlsciwgc3BzcgorCXN0cglsciwgW3IxMywgIzRdCQkJQCBzYXZlIHNwc3JfSVJRCisJQAorCUAgbm93IGJyYW5jaCB0byB0aGUgcmVsZXZhbnQgTU9ERSBoYW5kbGluZyByb3V0aW5lCisJQAorCW1ycwlyMTMsIGNwc3IKKwliaWMJcjEzLCByMTMsICNNT0RFX01BU0sKKwlvcnIJcjEzLCByMTMsICNNT0RFX1NWQworCW1zcglzcHNyX2N4c2YsIHIxMwkJCUAgc3dpdGNoIHRvIFNWQ18zMiBtb2RlCisKKwlhbmQJbHIsIGxyLCAjMTUKKwlsZHIJbHIsIFtwYywgbHIsIGxzbCAjMl0KKwltb3ZzCXBjLCBscgkJCQlAIENoYW5nZXMgbW9kZSBhbmQgYnJhbmNoZXMKKwkuZW5kbQorCitfX3N0dWJzX3N0YXJ0OgorLyoKKyAqIEludGVycnVwdCBkaXNwYXRjaGVyCisgKi8KKwl2ZWN0b3Jfc3R1YglpcnEsIGlycSwgNAorCisJLmxvbmcJX19pcnFfdXNyCQkJQCAgMCAgKFVTUl8yNiAvIFVTUl8zMikKKwkubG9uZwlfX2lycV9pbnZhbGlkCQkJQCAgMSAgKEZJUV8yNiAvIEZJUV8zMikKKwkubG9uZwlfX2lycV9pbnZhbGlkCQkJQCAgMiAgKElSUV8yNiAvIElSUV8zMikKKwkubG9uZwlfX2lycV9zdmMJCQlAICAzICAoU1ZDXzI2IC8gU1ZDXzMyKQorCS5sb25nCV9faXJxX2ludmFsaWQJCQlAICA0CisJLmxvbmcJX19pcnFfaW52YWxpZAkJCUAgIDUKKwkubG9uZwlfX2lycV9pbnZhbGlkCQkJQCAgNgorCS5sb25nCV9faXJxX2ludmFsaWQJCQlAICA3CisJLmxvbmcJX19pcnFfaW52YWxpZAkJCUAgIDgKKwkubG9uZwlfX2lycV9pbnZhbGlkCQkJQCAgOQorCS5sb25nCV9faXJxX2ludmFsaWQJCQlAICBhCisJLmxvbmcJX19pcnFfaW52YWxpZAkJCUAgIGIKKwkubG9uZwlfX2lycV9pbnZhbGlkCQkJQCAgYworCS5sb25nCV9faXJxX2ludmFsaWQJCQlAICBkCisJLmxvbmcJX19pcnFfaW52YWxpZAkJCUAgIGUKKwkubG9uZwlfX2lycV9pbnZhbGlkCQkJQCAgZgorCisvKgorICogRGF0YSBhYm9ydCBkaXNwYXRjaGVyCisgKiBFbnRlciBpbiBBQlQgbW9kZSwgc3BzciA9IFVTUiBDUFNSLCBsciA9IFVTUiBQQworICovCisJdmVjdG9yX3N0dWIJZGFidCwgYWJ0LCA4CisKKwkubG9uZwlfX2RhYnRfdXNyCQkJQCAgMCAgKFVTUl8yNiAvIFVTUl8zMikKKwkubG9uZwlfX2RhYnRfaW52YWxpZAkJCUAgIDEgIChGSVFfMjYgLyBGSVFfMzIpCisJLmxvbmcJX19kYWJ0X2ludmFsaWQJCQlAICAyICAoSVJRXzI2IC8gSVJRXzMyKQorCS5sb25nCV9fZGFidF9zdmMJCQlAICAzICAoU1ZDXzI2IC8gU1ZDXzMyKQorCS5sb25nCV9fZGFidF9pbnZhbGlkCQkJQCAgNAorCS5sb25nCV9fZGFidF9pbnZhbGlkCQkJQCAgNQorCS5sb25nCV9fZGFidF9pbnZhbGlkCQkJQCAgNgorCS5sb25nCV9fZGFidF9pbnZhbGlkCQkJQCAgNworCS5sb25nCV9fZGFidF9pbnZhbGlkCQkJQCAgOAorCS5sb25nCV9fZGFidF9pbnZhbGlkCQkJQCAgOQorCS5sb25nCV9fZGFidF9pbnZhbGlkCQkJQCAgYQorCS5sb25nCV9fZGFidF9pbnZhbGlkCQkJQCAgYgorCS5sb25nCV9fZGFidF9pbnZhbGlkCQkJQCAgYworCS5sb25nCV9fZGFidF9pbnZhbGlkCQkJQCAgZAorCS5sb25nCV9fZGFidF9pbnZhbGlkCQkJQCAgZQorCS5sb25nCV9fZGFidF9pbnZhbGlkCQkJQCAgZgorCisvKgorICogUHJlZmV0Y2ggYWJvcnQgZGlzcGF0Y2hlcgorICogRW50ZXIgaW4gQUJUIG1vZGUsIHNwc3IgPSBVU1IgQ1BTUiwgbHIgPSBVU1IgUEMKKyAqLworCXZlY3Rvcl9zdHViCXBhYnQsIGFidCwgNAorCisJLmxvbmcJX19wYWJ0X3VzcgkJCUAgIDAgKFVTUl8yNiAvIFVTUl8zMikKKwkubG9uZwlfX3BhYnRfaW52YWxpZAkJCUAgIDEgKEZJUV8yNiAvIEZJUV8zMikKKwkubG9uZwlfX3BhYnRfaW52YWxpZAkJCUAgIDIgKElSUV8yNiAvIElSUV8zMikKKwkubG9uZwlfX3BhYnRfc3ZjCQkJQCAgMyAoU1ZDXzI2IC8gU1ZDXzMyKQorCS5sb25nCV9fcGFidF9pbnZhbGlkCQkJQCAgNAorCS5sb25nCV9fcGFidF9pbnZhbGlkCQkJQCAgNQorCS5sb25nCV9fcGFidF9pbnZhbGlkCQkJQCAgNgorCS5sb25nCV9fcGFidF9pbnZhbGlkCQkJQCAgNworCS5sb25nCV9fcGFidF9pbnZhbGlkCQkJQCAgOAorCS5sb25nCV9fcGFidF9pbnZhbGlkCQkJQCAgOQorCS5sb25nCV9fcGFidF9pbnZhbGlkCQkJQCAgYQorCS5sb25nCV9fcGFidF9pbnZhbGlkCQkJQCAgYgorCS5sb25nCV9fcGFidF9pbnZhbGlkCQkJQCAgYworCS5sb25nCV9fcGFidF9pbnZhbGlkCQkJQCAgZAorCS5sb25nCV9fcGFidF9pbnZhbGlkCQkJQCAgZQorCS5sb25nCV9fcGFidF9pbnZhbGlkCQkJQCAgZgorCisvKgorICogVW5kZWYgaW5zdHIgZW50cnkgZGlzcGF0Y2hlcgorICogRW50ZXIgaW4gVU5EIG1vZGUsIHNwc3IgPSBTVkMvVVNSIENQU1IsIGxyID0gU1ZDL1VTUiBQQworICovCisJdmVjdG9yX3N0dWIJdW5kLCB1bmQKKworCS5sb25nCV9fdW5kX3VzcgkJCUAgIDAgKFVTUl8yNiAvIFVTUl8zMikKKwkubG9uZwlfX3VuZF9pbnZhbGlkCQkJQCAgMSAoRklRXzI2IC8gRklRXzMyKQorCS5sb25nCV9fdW5kX2ludmFsaWQJCQlAICAyIChJUlFfMjYgLyBJUlFfMzIpCisJLmxvbmcJX191bmRfc3ZjCQkJQCAgMyAoU1ZDXzI2IC8gU1ZDXzMyKQorCS5sb25nCV9fdW5kX2ludmFsaWQJCQlAICA0CisJLmxvbmcJX191bmRfaW52YWxpZAkJCUAgIDUKKwkubG9uZwlfX3VuZF9pbnZhbGlkCQkJQCAgNgorCS5sb25nCV9fdW5kX2ludmFsaWQJCQlAICA3CisJLmxvbmcJX191bmRfaW52YWxpZAkJCUAgIDgKKwkubG9uZwlfX3VuZF9pbnZhbGlkCQkJQCAgOQorCS5sb25nCV9fdW5kX2ludmFsaWQJCQlAICBhCisJLmxvbmcJX191bmRfaW52YWxpZAkJCUAgIGIKKwkubG9uZwlfX3VuZF9pbnZhbGlkCQkJQCAgYworCS5sb25nCV9fdW5kX2ludmFsaWQJCQlAICBkCisJLmxvbmcJX191bmRfaW52YWxpZAkJCUAgIGUKKwkubG9uZwlfX3VuZF9pbnZhbGlkCQkJQCAgZgorCisJLmFsaWduCTUKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVW5kZWZpbmVkIEZJUXMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEVudGVyIGluIEZJUSBtb2RlLCBzcHNyID0gQU5ZIENQU1IsIGxyID0gQU5ZIFBDCisgKiBNVVNUIFBSRVNFUlZFIFNWQyBTUFNSLCBidXQgbmVlZCB0byBzd2l0Y2ggdG8gU1ZDIG1vZGUgdG8gc2hvdyBvdXIgbXNnLgorICogQmFzaWNhbGx5IHRvIHN3aXRjaCBtb2Rlcywgd2UgKkhBVkUqIHRvIGNsb2JiZXIgb25lIHJlZ2lzdGVyLi4uICBicmFpbgorICogZGFtYWdlIGFsZXJ0ISAgSSBkb24ndCB0aGluayB0aGF0IHdlIGNhbiBleGVjdXRlIGFueSBjb2RlIGluIGhlcmUgaW4gYW55CisgKiBvdGhlciBtb2RlIHRoYW4gRklRLi4uICBPayB5b3UgY2FuIHN3aXRjaCB0byBhbm90aGVyIG1vZGUsIGJ1dCB5b3UgY2FuJ3QKKyAqIGdldCBvdXQgb2YgdGhhdCBtb2RlIHdpdGhvdXQgY2xvYmJlcmluZyBvbmUgcmVnaXN0ZXIuCisgKi8KK3ZlY3Rvcl9maXE6CisJZGlzYWJsZV9maXEKKwlzdWJzCXBjLCBsciwgIzQKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQWRkcmVzcyBleGNlcHRpb24gaGFuZGxlcgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVGhlc2UgYXJlbid0IHRvbyBjcml0aWNhbC4KKyAqICh0aGV5J3JlIG5vdCBzdXBwb3NlZCB0byBoYXBwZW4sIGFuZCB3b24ndCBoYXBwZW4gaW4gMzItYml0IGRhdGEgbW9kZSkuCisgKi8KKwordmVjdG9yX2FkZHJleGNwdG46CisJYgl2ZWN0b3JfYWRkcmV4Y3B0bgorCisvKgorICogV2UgZ3JvdXAgYWxsIHRoZSBmb2xsb3dpbmcgZGF0YSB0b2dldGhlciB0byBvcHRpbWlzZQorICogZm9yIENQVXMgd2l0aCBzZXBhcmF0ZSBJICYgRCBjYWNoZXMuCisgKi8KKwkuYWxpZ24JNQorCisuTEN2c3dpOgorCS53b3JkCXZlY3Rvcl9zd2kKKworLkxDc2lycToKKwkud29yZAlfX3RlbXBfaXJxCisuTENzdW5kOgorCS53b3JkCV9fdGVtcF91bmQKKy5MQ3NhYnQ6CisJLndvcmQJX190ZW1wX2FidAorCitfX3N0dWJzX2VuZDoKKworCS5lcXUJX19yZWFsX3N0dWJzX3N0YXJ0LCAuTEN2ZWN0b3JzICsgMHgyMDAKKworLkxDdmVjdG9yczoKKwlzd2kJU1lTX0VSUk9SMAorCWIJX19yZWFsX3N0dWJzX3N0YXJ0ICsgKHZlY3Rvcl91bmQgLSBfX3N0dWJzX3N0YXJ0KQorCWxkcglwYywgX19yZWFsX3N0dWJzX3N0YXJ0ICsgKC5MQ3Zzd2kgLSBfX3N0dWJzX3N0YXJ0KQorCWIJX19yZWFsX3N0dWJzX3N0YXJ0ICsgKHZlY3Rvcl9wYWJ0IC0gX19zdHVic19zdGFydCkKKwliCV9fcmVhbF9zdHVic19zdGFydCArICh2ZWN0b3JfZGFidCAtIF9fc3R1YnNfc3RhcnQpCisJYglfX3JlYWxfc3R1YnNfc3RhcnQgKyAodmVjdG9yX2FkZHJleGNwdG4gLSBfX3N0dWJzX3N0YXJ0KQorCWIJX19yZWFsX3N0dWJzX3N0YXJ0ICsgKHZlY3Rvcl9pcnEgLSBfX3N0dWJzX3N0YXJ0KQorCWIJX19yZWFsX3N0dWJzX3N0YXJ0ICsgKHZlY3Rvcl9maXEgLSBfX3N0dWJzX3N0YXJ0KQorCitFTlRSWShfX3RyYXBfaW5pdCkKKwlzdG1mZAlzcCEsIHtyNCAtIHI2LCBscn0KKworCW1vdglyMCwgIzB4ZmYwMDAwMDAKKwlvcnIJcjAsIHIwLCAjMHgwMGZmMDAwMAkJQCBoaWdoIHZlY3RvcnMgcG9zaXRpb24KKwlhZHIJcjEsIC5MQ3ZlY3RvcnMJCQlAIHNldCB1cCB0aGUgdmVjdG9ycworCWxkbWlhCXIxLCB7cjEsIHIyLCByMywgcjQsIHI1LCByNiwgaXAsIGxyfQorCXN0bWlhCXIwLCB7cjEsIHIyLCByMywgcjQsIHI1LCByNiwgaXAsIGxyfQorCisJYWRkCXIyLCByMCwgIzB4MjAwCisJYWRyCXIwLCBfX3N0dWJzX3N0YXJ0CQlAIGNvcHkgc3R1YnMgdG8gMHgyMDAKKwlhZHIJcjEsIF9fc3R1YnNfZW5kCisxOglsZHIJcjMsIFtyMF0sICM0CisJc3RyCXIzLCBbcjJdLCAjNAorCWNtcAlyMCwgcjEKKwlibHQJMWIKKwlMT0FEUkVHUyhmZCwgc3AhLCB7cjQgLSByNiwgcGN9KQorCisJLmRhdGEKKworLyoKKyAqIERvIG5vdCByZW9yZGVyIHRoZXNlLCBhbmQgZG8gbm90IGluc2VydCBleHRyYSBkYXRhIGJldHdlZW4uLi4KKyAqLworCitfX3RlbXBfaXJxOgorCS53b3JkCTAJCQkJQCBzYXZlZCBscl9pcnEKKwkud29yZAkwCQkJCUAgc2F2ZWQgc3Bzcl9pcnEKKwkud29yZAktMQkJCQlAIG9sZF9yMAorX190ZW1wX3VuZDoKKwkud29yZAkwCQkJCUAgU2F2ZWQgbHJfdW5kCisJLndvcmQJMAkJCQlAIFNhdmVkIHNwc3JfdW5kCisJLndvcmQJLTEJCQkJQCBvbGRfcjAKK19fdGVtcF9hYnQ6CisJLndvcmQJMAkJCQlAIFNhdmVkIGxyX2FidAorCS53b3JkCTAJCQkJQCBTYXZlZCBzcHNyX2FidAorCS53b3JkCS0xCQkJCUAgb2xkX3IwCisKKwkuZ2xvYmwJY3JfYWxpZ25tZW50CisJLmdsb2JsCWNyX25vX2FsaWdubWVudAorY3JfYWxpZ25tZW50OgorCS5zcGFjZQk0Citjcl9ub19hbGlnbm1lbnQ6CisJLnNwYWNlCTQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2E3ZTBkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCkBAIC0wLDAgKzEsMjYwIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworI2luY2x1ZGUgImVudHJ5LWhlYWRlci5TIgorCisvKiAKKyAqIFdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCBSMCBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjayAoZHVlIHRvCisgKiBzbG93L2Zhc3QgcmVzdG9yZSB1c2VyIHJlZ3MpLgorICovCisjaWYgU19SMCAhPSAwCisjZXJyb3IgIlBsZWFzZSBmaXgiCisjZW5kaWYKKworCS5hbGlnbgk1CisvKgorICogVGhpcyBpcyB0aGUgZmFzdCBzeXNjYWxsIHJldHVybiBwYXRoLiAgV2UgZG8gYXMgbGl0dGxlIGFzCisgKiBwb3NzaWJsZSBoZXJlLCBhbmQgdGhpcyBpbmNsdWRlcyBzYXZpbmcgcjAgYmFjayBpbnRvIHRoZSBTVkMKKyAqIHN0YWNrLgorICovCityZXRfZmFzdF9zeXNjYWxsOgorCWRpc2FibGVfaXJxIHIxCQkJCUAgZGlzYWJsZSBpbnRlcnJ1cHRzCisJbGRyCXIxLCBbdHNrLCAjVElfRkxBR1NdCisJdHN0CXIxLCAjX1RJRl9XT1JLX01BU0sKKwlibmUJZmFzdF93b3JrX3BlbmRpbmcKKwlmYXN0X3Jlc3RvcmVfdXNlcl9yZWdzCisKKy8qCisgKiBPaywgd2UgbmVlZCB0byBkbyBleHRyYSBwcm9jZXNzaW5nLCBlbnRlciB0aGUgc2xvdyBwYXRoLgorICovCitmYXN0X3dvcmtfcGVuZGluZzoKKwlzdHIJcjAsIFtzcCwgI1NfUjArU19PRkZdIQkJQCByZXR1cm5lZCByMAord29ya19wZW5kaW5nOgorCXRzdAlyMSwgI19USUZfTkVFRF9SRVNDSEVECisJYm5lCXdvcmtfcmVzY2hlZAorCXRzdAlyMSwgI19USUZfTk9USUZZX1JFU1VNRSB8IF9USUZfU0lHUEVORElORworCWJlcQlub193b3JrX3BlbmRpbmcKKwltb3YJcjAsIHNwCQkJCUAgJ3JlZ3MnCisJbW92CXIyLCB3aHkJCQkJQCAnc3lzY2FsbCcKKwlibAlkb19ub3RpZnlfcmVzdW1lCisJZGlzYWJsZV9pcnEgcjEJCQkJQCBkaXNhYmxlIGludGVycnVwdHMKKwliCW5vX3dvcmtfcGVuZGluZworCit3b3JrX3Jlc2NoZWQ6CisJYmwJc2NoZWR1bGUKKy8qCisgKiAic2xvdyIgc3lzY2FsbCByZXR1cm4gcGF0aC4gICJ3aHkiIHRlbGxzIHVzIGlmIHRoaXMgd2FzIGEgcmVhbCBzeXNjYWxsLgorICovCitFTlRSWShyZXRfdG9fdXNlcikKK3JldF9zbG93X3N5c2NhbGw6CisJZGlzYWJsZV9pcnEgcjEJCQkJQCBkaXNhYmxlIGludGVycnVwdHMKKwlsZHIJcjEsIFt0c2ssICNUSV9GTEFHU10KKwl0c3QJcjEsICNfVElGX1dPUktfTUFTSworCWJuZQl3b3JrX3BlbmRpbmcKK25vX3dvcmtfcGVuZGluZzoKKwlzbG93X3Jlc3RvcmVfdXNlcl9yZWdzCisKKy8qCisgKiBUaGlzIGlzIGhvdyB3ZSByZXR1cm4gZnJvbSBhIGZvcmsuCisgKi8KK0VOVFJZKHJldF9mcm9tX2ZvcmspCisJYmwJc2NoZWR1bGVfdGFpbAorCWdldF90aHJlYWRfaW5mbyB0c2sKKwlsZHIJcjEsIFt0c2ssICNUSV9GTEFHU10JCUAgY2hlY2sgZm9yIHN5c2NhbGwgdHJhY2luZworCW1vdgl3aHksICMxCisJdHN0CXIxLCAjX1RJRl9TWVNDQUxMX1RSQUNFCQlAIGFyZSB3ZSB0cmFjaW5nIHN5c2NhbGxzPworCWJlcQlyZXRfc2xvd19zeXNjYWxsCisJbW92CXIxLCBzcAorCW1vdglyMCwgIzEJCQkJQCB0cmFjZSBleGl0IFtJUCA9IDFdCisJYmwJc3lzY2FsbF90cmFjZQorCWIJcmV0X3Nsb3dfc3lzY2FsbAorCQorCisjaW5jbHVkZSAiY2FsbHMuUyIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogU1dJIGhhbmRsZXIKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisJLyogSWYgd2UncmUgb3B0aW1pc2luZyBmb3IgU3Ryb25nQVJNIHRoZSByZXN1bHRpbmcgY29kZSB3b24ndCAKKwkgICBydW4gb24gYW4gQVJNNyBhbmQgd2UgY2FuIHNhdmUgYSBjb3VwbGUgb2YgaW5zdHJ1Y3Rpb25zLiAgCisJCQkJCQkJCS0tcGIgKi8KKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTcxMAorCS5tYWNybwlhcm03MTBfYnVnX2NoZWNrLCBpbnN0ciwgdGVtcAorCWFuZAlcdGVtcCwgXGluc3RyLCAjMHgwZjAwMDAwMAlAIGNoZWNrIGZvciBTV0kKKwl0ZXEJXHRlbXAsICMweDBmMDAwMDAwCisJYm5lCS5MYXJtNzAwYnVnCisJLmVuZG0KKworLkxhcm03MDBidWc6CisJbGRyCXIwLCBbc3AsICNTX1BTUl0JCUAgR2V0IGNhbGxpbmcgY3BzcgorCXN1YglsciwgbHIsICM0CisJc3RyCWxyLCBbcjhdCisJbXNyCXNwc3JfY3hzZiwgcjAKKwlsZG1pYQlzcCwge3IwIC0gbHJ9XgkJCUAgR2V0IGNhbGxpbmcgcjAgLSBscgorCW1vdglyMCwgcjAKKwlsZHIJbHIsIFtzcCwgI1NfUENdCQkJQCBHZXQgUEMKKwlhZGQJc3AsIHNwLCAjU19GUkFNRV9TSVpFCisJbW92cwlwYywgbHIKKyNlbHNlCisJLm1hY3JvCWFybTcxMF9idWdfY2hlY2ssIGluc3RyLCB0ZW1wCisJLmVuZG0KKyNlbmRpZgorCisJLmFsaWduCTUKK0VOVFJZKHZlY3Rvcl9zd2kpCisJc2F2ZV91c2VyX3JlZ3MKKwl6ZXJvX2ZwCisJZ2V0X3Njbm8KKwlhcm03MTBfYnVnX2NoZWNrIHNjbm8sIGlwCisKKyNpZmRlZiBDT05GSUdfQUxJR05NRU5UX1RSQVAKKwlsZHIJaXAsIF9fY3JfYWxpZ25tZW50CisJbGRyCWlwLCBbaXBdCisJbWNyCXAxNSwgMCwgaXAsIGMxLCBjMAkJQCB1cGRhdGUgY29udHJvbCByZWdpc3RlcgorI2VuZGlmCisJZW5hYmxlX2lycSBpcAorCisJc3RyCXI0LCBbc3AsICMtU19PRkZdIQkJQCBwdXNoIGZpZnRoIGFyZworCisJZ2V0X3RocmVhZF9pbmZvIHRzaworCWxkcglpcCwgW3RzaywgI1RJX0ZMQUdTXQkJQCBjaGVjayBmb3Igc3lzY2FsbCB0cmFjaW5nCisJYmljCXNjbm8sIHNjbm8sICMweGZmMDAwMDAwCQlAIG1hc2sgb2ZmIFNXSSBvcC1jb2RlCisJZW9yCXNjbm8sIHNjbm8sICNPU19OVU1CRVIgPDwgMjAJQCBjaGVjayBPUyBudW1iZXIKKwlhZHIJdGJsLCBzeXNfY2FsbF90YWJsZQkJQCBsb2FkIHN5c2NhbGwgdGFibGUgcG9pbnRlcgorCXRzdAlpcCwgI19USUZfU1lTQ0FMTF9UUkFDRQkJQCBhcmUgd2UgdHJhY2luZyBzeXNjYWxscz8KKwlibmUJX19zeXNfdHJhY2UKKworCWFkcglsciwgcmV0X2Zhc3Rfc3lzY2FsbAkJQCByZXR1cm4gYWRkcmVzcworCWNtcAlzY25vLCAjTlJfc3lzY2FsbHMJCUAgY2hlY2sgdXBwZXIgc3lzY2FsbCBsaW1pdAorCWxkcmNjCXBjLCBbdGJsLCBzY25vLCBsc2wgIzJdCQlAIGNhbGwgc3lzXyogcm91dGluZQorCisJYWRkCXIxLCBzcCwgI1NfT0ZGCisyOgltb3YJd2h5LCAjMAkJCQlAIG5vIGxvbmdlciBhIHJlYWwgc3lzY2FsbAorCWNtcAlzY25vLCAjQVJNU1dJX09GRlNFVAorCWVvcglyMCwgc2NubywgI09TX05VTUJFUiA8PCAyMAlAIHB1dCBPUyBudW1iZXIgYmFjaworCWJjcwlhcm1fc3lzY2FsbAkKKwliCXN5c19uaV9zeXNjYWxsCQkJQCBub3QgcHJpdmF0ZSBmdW5jCisKKwkvKgorCSAqIFRoaXMgaXMgdGhlIHJlYWxseSBzbG93IHBhdGguICBXZSdyZSBnb2luZyB0byBiZSBkb2luZworCSAqIGNvbnRleHQgc3dpdGNoZXMsIGFuZCB3YWl0aW5nIGZvciBvdXIgcGFyZW50IHRvIHJlc3BvbmQuCisJICovCitfX3N5c190cmFjZToKKwlhZGQJcjEsIHNwLCAjU19PRkYKKwltb3YJcjAsICMwCQkJCUAgdHJhY2UgZW50cnkgW0lQID0gMF0KKwlibAlzeXNjYWxsX3RyYWNlCisKKwlhZHIJbHIsIF9fc3lzX3RyYWNlX3JldHVybgkJQCByZXR1cm4gYWRkcmVzcworCWFkZAlyMSwgc3AsICNTX1IwICsgU19PRkYJCUAgcG9pbnRlciB0byByZWdzCisJY21wCXNjbm8sICNOUl9zeXNjYWxscwkJQCBjaGVjayB1cHBlciBzeXNjYWxsIGxpbWl0CisJbGRtY2NpYQlyMSwge3IwIC0gcjN9CQkJQCBoYXZlIHRvIHJlbG9hZCByMCAtIHIzCisJbGRyY2MJcGMsIFt0YmwsIHNjbm8sIGxzbCAjMl0JCUAgY2FsbCBzeXNfKiByb3V0aW5lCisJYgkyYgorCitfX3N5c190cmFjZV9yZXR1cm46CisJc3RyCXIwLCBbc3AsICNTX1IwICsgU19PRkZdIQlAIHNhdmUgcmV0dXJuZWQgcjAKKwltb3YJcjEsIHNwCisJbW92CXIwLCAjMQkJCQlAIHRyYWNlIGV4aXQgW0lQID0gMV0KKwlibAlzeXNjYWxsX3RyYWNlCisJYglyZXRfc2xvd19zeXNjYWxsCisKKwkuYWxpZ24JNQorI2lmZGVmIENPTkZJR19BTElHTk1FTlRfVFJBUAorCS50eXBlCV9fY3JfYWxpZ25tZW50LCAjb2JqZWN0CitfX2NyX2FsaWdubWVudDoKKwkud29yZAljcl9hbGlnbm1lbnQKKyNlbmRpZgorCisJLnR5cGUJc3lzX2NhbGxfdGFibGUsICNvYmplY3QKK0VOVFJZKHN5c19jYWxsX3RhYmxlKQorI2luY2x1ZGUgImNhbGxzLlMiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogU3BlY2lhbCBzeXN0ZW0gY2FsbCB3cmFwcGVycworICovCitAIHIwID0gc3lzY2FsbCBudW1iZXIKK0AgcjUgPSBzeXNjYWxsIHRhYmxlCisJCS50eXBlCXN5c19zeXNjYWxsLCAjZnVuY3Rpb24KK3N5c19zeXNjYWxsOgorCQllb3IJc2NubywgcjAsICNPU19OVU1CRVIgPDwgMjAKKwkJY21wCXNjbm8sICNfX05SX3N5c2NhbGwgLSBfX05SX1NZU0NBTExfQkFTRQorCQljbXBuZQlzY25vLCAjTlJfc3lzY2FsbHMJQCBjaGVjayByYW5nZQorCQlzdG1sb2lhCXNwLCB7cjUsIHI2fQkJQCBzaHVmZmxlIGFyZ3MKKwkJbW92bG8JcjAsIHIxCisJCW1vdmxvCXIxLCByMgorCQltb3ZsbwlyMiwgcjMKKwkJbW92bG8JcjMsIHI0CisJCWxkcmxvCXBjLCBbdGJsLCBzY25vLCBsc2wgIzJdCisJCWIJc3lzX25pX3N5c2NhbGwKKworc3lzX2Zvcmtfd3JhcHBlcjoKKwkJYWRkCXIwLCBzcCwgI1NfT0ZGCisJCWIJc3lzX2ZvcmsKKworc3lzX3Zmb3JrX3dyYXBwZXI6CisJCWFkZAlyMCwgc3AsICNTX09GRgorCQliCXN5c192Zm9yaworCitzeXNfZXhlY3ZlX3dyYXBwZXI6CisJCWFkZAlyMywgc3AsICNTX09GRgorCQliCXN5c19leGVjdmUKKworc3lzX2Nsb25lX3dyYXBwZXI6CisJCWFkZAlpcCwgc3AsICNTX09GRgorCQlzdHIJaXAsIFtzcCwgIzRdCisJCWIJc3lzX2Nsb25lCisKK3N5c19zaWdzdXNwZW5kX3dyYXBwZXI6CisJCWFkZAlyMywgc3AsICNTX09GRgorCQliCXN5c19zaWdzdXNwZW5kCisKK3N5c19ydF9zaWdzdXNwZW5kX3dyYXBwZXI6CisJCWFkZAlyMiwgc3AsICNTX09GRgorCQliCXN5c19ydF9zaWdzdXNwZW5kCisKK3N5c19zaWdyZXR1cm5fd3JhcHBlcjoKKwkJYWRkCXIwLCBzcCwgI1NfT0ZGCisJCWIJc3lzX3NpZ3JldHVybgorCitzeXNfcnRfc2lncmV0dXJuX3dyYXBwZXI6CisJCWFkZAlyMCwgc3AsICNTX09GRgorCQliCXN5c19ydF9zaWdyZXR1cm4KKworc3lzX3NpZ2FsdHN0YWNrX3dyYXBwZXI6CisJCWxkcglyMiwgW3NwLCAjU19PRkYgKyBTX1NQXQorCQliCWRvX3NpZ2FsdHN0YWNrCisKK3N5c19mdXRleF93cmFwcGVyOgorCQlzdHIJcjUsIFtzcCwgIzRdCQlAIHB1c2ggc2l4dGggYXJnCisJCWIJc3lzX2Z1dGV4CisKKy8qCisgKiBOb3RlOiBvZmZfNGsgKHI1KSBpcyBhbHdheXMgdW5pdHMgb2YgNEsuICBJZiB3ZSBjYW4ndCBkbyB0aGUgcmVxdWVzdGVkCisgKiBvZmZzZXQsIHdlIHJldHVybiBFSU5WQUwuCisgKi8KK3N5c19tbWFwMjoKKyNpZiBQQUdFX1NISUZUID4gMTIKKwkJdHN0CXI1LCAjUEdPRkZfTUFTSworCQltb3ZlcQlyNSwgcjUsIGxzciAjUEFHRV9TSElGVCAtIDEyCisJCXN0cmVxCXI1LCBbc3AsICM0XQorCQliZXEJZG9fbW1hcDIKKwkJbW92CXIwLCAjLUVJTlZBTAorCQlSRVRJTlNUUihtb3YscGMsIGxyKQorI2Vsc2UKKwkJc3RyCXI1LCBbc3AsICM0XQorCQliCWRvX21tYXAyCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDM5ZDhjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TCkBAIC0wLDAgKzEsMTgyIEBACisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+IC8qIGZvciBDT05GSUdfQVJDSF94eHh4ICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS9jb25zdGFudHMuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZW50cnktbWFjcm8uUz4KKworI2lmbmRlZiBNT0RFX1NWQworI2RlZmluZSBNT0RFX1NWQyAweDEzCisjZW5kaWYKKworCS5tYWNybwl6ZXJvX2ZwCisjaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKKwltb3YJZnAsICMwCisjZW5kaWYKKwkuZW5kbQorCisJLnRleHQKKworQCBCYWQgQWJvcnQgbnVtYmVycworQCAtLS0tLS0tLS0tLS0tLS0tLQorQAorI2RlZmluZSBCQURfUFJFRkVUQ0gJMAorI2RlZmluZSBCQURfREFUQQkxCisjZGVmaW5lIEJBRF9BRERSRVhDUFROCTIKKyNkZWZpbmUgQkFEX0lSUQkJMworI2RlZmluZSBCQURfVU5ERUZJTlNUUgk0CisKKyNkZWZpbmUgUFRfVFJBQ0VTWVMJMHgwMDAwMDAwMgorCitAIE9TIHZlcnNpb24gbnVtYmVyIHVzZWQgaW4gU1dJcworQCAgUklTQyBPUyBpcyAwCitAICBSSVNDIGlYIGlzIDgKK0AKKyNkZWZpbmUgT1NfTlVNQkVSCTkKKyNkZWZpbmUgQVJNU1dJX09GRlNFVAkweDAwMGYwMDAwCisKK0AKK0AgU3RhY2sgZm9ybWF0IChlbnN1cmVkIGJ5IFVTRVJfKiBhbmQgU1ZDXyopCitACisjZGVmaW5lIFNfRlJBTUVfU0laRQk3MgorI2RlZmluZSBTX09MRF9SMAk2OAorI2RlZmluZSBTX1BTUgkJNjQKKworI2RlZmluZSBTX1BDCQk2MAorI2RlZmluZSBTX0xSCQk1NgorI2RlZmluZSBTX1NQCQk1MgorI2RlZmluZSBTX0lQCQk0OAorI2RlZmluZSBTX0ZQCQk0NAorI2RlZmluZSBTX1IxMAkJNDAKKyNkZWZpbmUgU19SOQkJMzYKKyNkZWZpbmUgU19SOAkJMzIKKyNkZWZpbmUgU19SNwkJMjgKKyNkZWZpbmUgU19SNgkJMjQKKyNkZWZpbmUgU19SNQkJMjAKKyNkZWZpbmUgU19SNAkJMTYKKyNkZWZpbmUgU19SMwkJMTIKKyNkZWZpbmUgU19SMgkJOAorI2RlZmluZSBTX1IxCQk0CisjZGVmaW5lIFNfUjAJCTAKKyNkZWZpbmUgU19PRkYJCTgKKworCS5tYWNybwlzZXRfY3Bzcl9jLCByZWcsIG1vZGUKKwltc3IJY3Bzcl9jLCBcbW9kZQorCS5lbmRtCisKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNgorCS5tYWNybwlkaXNhYmxlX2lycSwgdGVtcAorCWNwc2lkCWkKKwkuZW5kbQorCisJLm1hY3JvCWVuYWJsZV9pcnEsIHRlbXAKKwljcHNpZQlpCisJLmVuZG0KKyNlbHNlCisJLm1hY3JvCWRpc2FibGVfaXJxLCB0ZW1wCisJc2V0X2Nwc3JfYyBcdGVtcCwgI1BTUl9JX0JJVCB8IE1PREVfU1ZDCisJLmVuZG0KKworCS5tYWNybwllbmFibGVfaXJxLCB0ZW1wCisJc2V0X2Nwc3JfYyBcdGVtcCwgI01PREVfU1ZDCisJLmVuZG0KKyNlbmRpZgorCisJLm1hY3JvCXNhdmVfdXNlcl9yZWdzCisJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQorCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBDYWxsaW5nIHIwIC0gcjEyCisJYWRkCXI4LCBzcCwgI1NfUEMKKwlzdG1kYglyOCwge3NwLCBscn1eCQkJQCBDYWxsaW5nIHNwLCBscgorCW1ycwlyOCwgc3BzcgkJCUAgY2FsbGVkIGZyb20gbm9uLUZJUSBtb2RlLCBzbyBvay4KKwlzdHIJbHIsIFtzcCwgI1NfUENdCQkJQCBTYXZlIGNhbGxpbmcgUEMKKwlzdHIJcjgsIFtzcCwgI1NfUFNSXQkJQCBTYXZlIENQU1IKKwlzdHIJcjAsIFtzcCwgI1NfT0xEX1IwXQkJQCBTYXZlIE9MRF9SMAorCS5lbmRtCisKKwkubWFjcm8JcmVzdG9yZV91c2VyX3JlZ3MKKwlsZHIJcjEsIFtzcCwgI1NfUFNSXQkJQCBHZXQgY2FsbGluZyBjcHNyCisJZGlzYWJsZV9pcnEgaXAJCQkJQCBkaXNhYmxlIElSUXMKKwlsZHIJbHIsIFtzcCwgI1NfUENdIQkJQCBHZXQgUEMKKwltc3IJc3Bzcl9jeHNmLCByMQkJCUAgc2F2ZSBpbiBzcHNyX3N2YworCWxkbWRiCXNwLCB7cjAgLSBscn1eCQkJQCBHZXQgY2FsbGluZyByMCAtIGxyCisJbW92CXIwLCByMAorCWFkZAlzcCwgc3AsICNTX0ZSQU1FX1NJWkUgLSBTX1BDCisJbW92cwlwYywgbHIJCQkJQCByZXR1cm4gJiBtb3ZlIHNwc3Jfc3ZjIGludG8gY3BzcgorCS5lbmRtCisKKy8qCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIElSUXMgYWxyZWFkeSBkaXNhYmxlZC4KKyAqLworCS5tYWNybwlmYXN0X3Jlc3RvcmVfdXNlcl9yZWdzCisJbGRyCXIxLCBbc3AsICNTX09GRiArIFNfUFNSXQlAIGdldCBjYWxsaW5nIGNwc3IKKwlsZHIJbHIsIFtzcCwgI1NfT0ZGICsgU19QQ10hCUAgZ2V0IHBjCisJbXNyCXNwc3JfY3hzZiwgcjEJCQlAIHNhdmUgaW4gc3Bzcl9zdmMKKwlsZG1kYglzcCwge3IxIC0gbHJ9XgkJCUAgZ2V0IGNhbGxpbmcgcjEgLSBscgorCW1vdglyMCwgcjAKKwlhZGQJc3AsIHNwLCAjU19GUkFNRV9TSVpFIC0gU19QQworCW1vdnMJcGMsIGxyCQkJCUAgcmV0dXJuICYgbW92ZSBzcHNyX3N2YyBpbnRvIGNwc3IKKwkuZW5kbQorCisvKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBJUlFzIGFscmVhZHkgZGlzYWJsZWQuCisgKi8KKwkubWFjcm8Jc2xvd19yZXN0b3JlX3VzZXJfcmVncworCWxkcglyMSwgW3NwLCAjU19QU1JdCQlAIGdldCBjYWxsaW5nIGNwc3IKKwlsZHIJbHIsIFtzcCwgI1NfUENdIQkJQCBnZXQgcGMKKwltc3IJc3Bzcl9jeHNmLCByMQkJCUAgc2F2ZSBpbiBzcHNyX3N2YworCWxkbWRiCXNwLCB7cjAgLSBscn1eCQkJQCBnZXQgY2FsbGluZyByMSAtIGxyCisJbW92CXIwLCByMAorCWFkZAlzcCwgc3AsICNTX0ZSQU1FX1NJWkUgLSBTX1BDCisJbW92cwlwYywgbHIJCQkJQCByZXR1cm4gJiBtb3ZlIHNwc3Jfc3ZjIGludG8gY3BzcgorCS5lbmRtCisKKwkubWFjcm8JbWFza19wYywgcmQsIHJtCisJLmVuZG0KKworCS5tYWNybwlnZXRfdGhyZWFkX2luZm8sIHJkCisJbW92CVxyZCwgc3AsIGxzciAjMTMKKwltb3YJXHJkLCBccmQsIGxzbCAjMTMKKwkuZW5kbQorCisJLm1hY3JvCWFsaWdubWVudF90cmFwLCByYmFzZSwgcnRlbXAsIHN5bQorI2lmZGVmIENPTkZJR19BTElHTk1FTlRfVFJBUAorI2RlZmluZSBPRkZfQ1JfQUxJR05NRU5UKHgpCWNyX2FsaWdubWVudCAtIHgKKworCWxkcglccnRlbXAsIFtccmJhc2UsICNPRkZfQ1JfQUxJR05NRU5UKFxzeW0pXQorCW1jcglwMTUsIDAsIFxydGVtcCwgYzEsIGMwCisjZW5kaWYKKwkuZW5kbQorCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIHJlZ2lzdGVycyB1c2VkIGluIHRoZSBzeXNjYWxsIGhhbmRsZXIsIGFuZCBhbGxvdyB1cyB0bworICogaGF2ZSBpbiB0aGVvcnkgdXAgdG8gNyBhcmd1bWVudHMgdG8gYSBmdW5jdGlvbiAtIHIwIHRvIHI2LgorICoKKyAqIHI3IGlzIHJlc2VydmVkIGZvciB0aGUgc3lzdGVtIGNhbGwgbnVtYmVyIGZvciB0aHVtYiBtb2RlLgorICoKKyAqIE5vdGUgdGhhdCB0YmwgPT0gd2h5IGlzIGludGVudGlvbmFsLgorICoKKyAqIFdlIG11c3Qgc2V0IGF0IGxlYXN0ICJ0c2siIGFuZCAid2h5IiB3aGVuIGNhbGxpbmcgcmV0X3dpdGhfcmVzY2hlZHVsZS4KKyAqLworc2NubwkucmVxCXI3CQlAIHN5c2NhbGwgbnVtYmVyCit0YmwJLnJlcQlyOAkJQCBzeXNjYWxsIHRhYmxlIHBvaW50ZXIKK3doeQkucmVxCXI4CQlAIExpbnV4IHN5c2NhbGwgKCE9IDApCit0c2sJLnJlcQlyOQkJQCBjdXJyZW50IHRocmVhZF9pbmZvCisKKy8qCisgKiBHZXQgdGhlIHN5c3RlbSBjYWxsIG51bWJlci4KKyAqLworCS5tYWNybwlnZXRfc2NubworI2lmZGVmIENPTkZJR19BUk1fVEhVTUIKKwl0c3QJcjgsICNQU1JfVF9CSVQJCUAgdGhpcyBpcyBTUFNSIGZyb20gc2F2ZV91c2VyX3JlZ3MKKwlhZGRuZQlzY25vLCByNywgI09TX05VTUJFUiA8PCAyMCBAIHB1dCBPUyBudW1iZXIgaW4KKwlsZHJlcQlzY25vLCBbbHIsICMtNF0KKworI2Vsc2UKKwltYXNrX3BjCWxyLCBscgorCWxkcglzY25vLCBbbHIsICMtNF0JCUAgZ2V0IFNXSSBpbnN0cnVjdGlvbgorI2VuZGlmCisJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9maXEuYyBiL2FyY2gvYXJtL2tlcm5lbC9maXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mjk5ZGZjMjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvZmlxLmMKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0va2VybmVsL2ZpcS5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OCBSdXNzZWxsIEtpbmcKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgUGhpbCBCbHVuZGVsbAorICoKKyAqICBGSVEgc3VwcG9ydCB3cml0dGVuIGJ5IFBoaWxpcCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4sIDE5OTguCisgKgorICogIEZJUSBzdXBwb3J0IHJlLXdyaXR0ZW4gYnkgUnVzc2VsbCBLaW5nIHRvIGJlIG1vcmUgZ2VuZXJpYworICoKKyAqIFdlIG5vdyBwcm9wZXJseSBzdXBwb3J0IGEgbWV0aG9kIGJ5IHdoaWNoIHRoZSBGSVEgaGFuZGxlcnMgY2FuCisgKiBiZSBzdGFja2VkIG9udG8gdGhlIHZlY3Rvci4gIFdlIHN0aWxsIGRvIG5vdCBzdXBwb3J0IHNoYXJpbmcKKyAqIHRoZSBGSVEgdmVjdG9yIGl0c2VsZi4KKyAqCisgKiBPcGVyYXRpb24gaXMgYXMgZm9sbG93czoKKyAqICAxLiBPd25lciBBIGNsYWltcyBGSVE6CisgKiAgICAgLSBkZWZhdWx0X2ZpcSByZWxpbnF1aXNoZXMgY29udHJvbC4KKyAqICAyLiBPd25lciBBOgorICogICAgIC0gaW5zZXJ0cyBjb2RlLgorICogICAgIC0gc2V0cyBhbnkgcmVnaXN0ZXJzLAorICogICAgIC0gZW5hYmxlcyBGSVEuCisgKiAgMy4gT3duZXIgQiBjbGFpbXMgRklROgorICogICAgIC0gaWYgb3duZXIgQSBoYXMgYSByZWxpbnF1aXNoIGZ1bmN0aW9uLgorICogICAgICAgLSBkaXNhYmxlIEZJUXMuCisgKiAgICAgICAtIHNhdmVzIGFueSByZWdpc3RlcnMuCisgKiAgICAgICAtIHJldHVybnMgemVyby4KKyAqICA0LiBPd25lciBCOgorICogICAgIC0gaW5zZXJ0cyBjb2RlLgorICogICAgIC0gc2V0cyBhbnkgcmVnaXN0ZXJzLAorICogICAgIC0gZW5hYmxlcyBGSVEuCisgKiAgNS4gT3duZXIgQiByZWxlYXNlcyBGSVE6CisgKiAgICAgLSBPd25lciBBIGlzIGFza2VkIHRvIHJlYWNxdWlyZSBGSVE6CisgKgkgLSBpbnNlcnRzIGNvZGUuCisgKgkgLSByZXN0b3JlcyBzYXZlZCByZWdpc3RlcnMuCisgKgkgLSBlbmFibGVzIEZJUS4KKyAqICA2LiBHb3RvIDMKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vZmlxLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBub19maXFfaW5zbjsKKworLyogRGVmYXVsdCByZWFjcXVpcmUgZnVuY3Rpb24KKyAqIC0gd2UgYWx3YXlzIHJlbGlucXVpc2ggRklRIGNvbnRyb2wKKyAqIC0gd2UgYWx3YXlzIHJlYWNxdWlyZSBGSVEgY29udHJvbAorICovCitzdGF0aWMgaW50IGZpcV9kZWZfb3Aodm9pZCAqcmVmLCBpbnQgcmVsaW5xdWlzaCkKK3sKKwlpZiAoIXJlbGlucXVpc2gpCisJCXNldF9maXFfaGFuZGxlcigmbm9fZmlxX2luc24sIHNpemVvZihub19maXFfaW5zbikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlxX2hhbmRsZXIgZGVmYXVsdF9vd25lciA9IHsKKwkubmFtZQk9ICJkZWZhdWx0IiwKKwkuZmlxX29wID0gZmlxX2RlZl9vcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlxX2hhbmRsZXIgKmN1cnJlbnRfZmlxID0gJmRlZmF1bHRfb3duZXI7CisKK2ludCBzaG93X2ZpcV9saXN0KHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKK3sKKwlpZiAoY3VycmVudF9maXEgIT0gJmRlZmF1bHRfb3duZXIpCisJCXNlcV9wcmludGYocCwgIkZJUTogICAgICAgICAgICAgICVzXG4iLCBjdXJyZW50X2ZpcS0+bmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzZXRfZmlxX2hhbmRsZXIodm9pZCAqc3RhcnQsIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisJbWVtY3B5KCh2b2lkICopMHhmZmZmMDAxYywgc3RhcnQsIGxlbmd0aCk7CisJZmx1c2hfaWNhY2hlX3JhbmdlKDB4ZmZmZjAwMWMsIDB4ZmZmZjAwMWMgKyBsZW5ndGgpOworCWlmICghdmVjdG9yc19oaWdoKCkpCisJCWZsdXNoX2ljYWNoZV9yYW5nZSgweDFjLCAweDFjICsgbGVuZ3RoKTsKK30KKworLyoKKyAqIFRha2luZyBhbiBpbnRlcnJ1cHQgaW4gRklRIG1vZGUgaXMgZGVhdGgsIHNvIGJvdGggdGhlc2UgZnVuY3Rpb25zCisgKiBkaXNhYmxlIGlycXMgZm9yIHRoZSBkdXJhdGlvbi4gIE5vdGUgLSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFsbW9zdAorICogZW50aXJlbHkgY29kZWQgaW4gYXNzZW1ibHkuCisgKi8KK3ZvaWQgX19hdHRyaWJ1dGVfXygobmFrZWQpKSBzZXRfZmlxX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyB0bXA7CisJYXNtIHZvbGF0aWxlICgKKwkibW92CWlwLCBzcFxuXAorCXN0bWZkCXNwISwge2ZwLCBpcCwgbHIsIHBjfVxuXAorCXN1YglmcCwgaXAsICM0XG5cCisJbXJzCSUwLCBjcHNyXG5cCisJbXNyCWNwc3JfYywgJTIJQCBzZWxlY3QgRklRIG1vZGVcblwKKwltb3YJcjAsIHIwXG5cCisJbGRtaWEJJTEsIHtyOCAtIHIxNH1cblwKKwltc3IJY3Bzcl9jLCAlMAlAIHJldHVybiB0byBTVkMgbW9kZVxuXAorCW1vdglyMCwgcjBcblwKKwlsZG1lYQlmcCwge2ZwLCBzcCwgcGN9IgorCTogIj0mciIgKHRtcCkKKwk6ICJyIiAoJnJlZ3MtPkFSTV9yOCksICJJIiAoUFNSX0lfQklUIHwgUFNSX0ZfQklUIHwgRklRX01PREUpKTsKK30KKwordm9pZCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpIGdldF9maXFfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHRtcDsKKwlhc20gdm9sYXRpbGUgKAorCSJtb3YJaXAsIHNwXG5cCisJc3RtZmQJc3AhLCB7ZnAsIGlwLCBsciwgcGN9XG5cCisJc3ViCWZwLCBpcCwgIzRcblwKKwltcnMJJTAsIGNwc3JcblwKKwltc3IJY3Bzcl9jLCAlMglAIHNlbGVjdCBGSVEgbW9kZVxuXAorCW1vdglyMCwgcjBcblwKKwlzdG1pYQklMSwge3I4IC0gcjE0fVxuXAorCW1zcgljcHNyX2MsICUwCUAgcmV0dXJuIHRvIFNWQyBtb2RlXG5cCisJbW92CXIwLCByMFxuXAorCWxkbWVhCWZwLCB7ZnAsIHNwLCBwY30iCisJOiAiPSZyIiAodG1wKQorCTogInIiICgmcmVncy0+QVJNX3I4KSwgIkkiIChQU1JfSV9CSVQgfCBQU1JfRl9CSVQgfCBGSVFfTU9ERSkpOworfQorCitpbnQgY2xhaW1fZmlxKHN0cnVjdCBmaXFfaGFuZGxlciAqZikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChjdXJyZW50X2ZpcSkgeworCQlyZXQgPSAtRUJVU1k7CisKKwkJaWYgKGN1cnJlbnRfZmlxLT5maXFfb3AgIT0gTlVMTCkKKwkJCXJldCA9IGN1cnJlbnRfZmlxLT5maXFfb3AoY3VycmVudF9maXEtPmRldl9pZCwgMSk7CisJfQorCisJaWYgKCFyZXQpIHsKKwkJZi0+bmV4dCA9IGN1cnJlbnRfZmlxOworCQljdXJyZW50X2ZpcSA9IGY7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZWxlYXNlX2ZpcShzdHJ1Y3QgZmlxX2hhbmRsZXIgKmYpCit7CisJaWYgKGN1cnJlbnRfZmlxICE9IGYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcyBGSVEgdHJ5aW5nIHRvIHJlbGVhc2UgJXMgRklRXG4iLAorCQkgICAgICAgZi0+bmFtZSwgY3VycmVudF9maXEtPm5hbWUpOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybjsKKwl9CisKKwlkbworCQljdXJyZW50X2ZpcSA9IGN1cnJlbnRfZmlxLT5uZXh0OworCXdoaWxlIChjdXJyZW50X2ZpcS0+ZmlxX29wKGN1cnJlbnRfZmlxLT5kZXZfaWQsIDApKTsKK30KKwordm9pZCBlbmFibGVfZmlxKGludCBmaXEpCit7CisJZW5hYmxlX2lycShmaXEgKyBGSVFfU1RBUlQpOworfQorCit2b2lkIGRpc2FibGVfZmlxKGludCBmaXEpCit7CisJZGlzYWJsZV9pcnEoZmlxICsgRklRX1NUQVJUKTsKK30KKworRVhQT1JUX1NZTUJPTChzZXRfZmlxX2hhbmRsZXIpOworRVhQT1JUX1NZTUJPTChzZXRfZmlxX3JlZ3MpOworRVhQT1JUX1NZTUJPTChnZXRfZmlxX3JlZ3MpOworRVhQT1JUX1NZTUJPTChjbGFpbV9maXEpOworRVhQT1JUX1NZTUJPTChyZWxlYXNlX2ZpcSk7CitFWFBPUlRfU1lNQk9MKGVuYWJsZV9maXEpOworRVhQT1JUX1NZTUJPTChkaXNhYmxlX2ZpcSk7CisKK3ZvaWQgX19pbml0IGluaXRfRklRKHZvaWQpCit7CisJbm9fZmlxX2luc24gPSAqKHVuc2lnbmVkIGxvbmcgKikweGZmZmYwMDFjOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2hlYWQuUyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxYjNlOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMKQEAgLTAsMCArMSw1MTYgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0va2VybmVsL2hlYWQuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMjAwMiBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBLZXJuZWwgc3RhcnR1cCBjb2RlIGZvciBhbGwgMzItYml0IENQVXMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2RvbWFpbi5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3Byb2NpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9jb25zdGFudHMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNkZWZpbmUgUFJPQ0lORk9fTU1VRkxBR1MJOAorI2RlZmluZSBQUk9DSU5GT19JTklURlVOQwkxMgorCisjZGVmaW5lIE1BQ0hJTkZPX1RZUEUJCTAKKyNkZWZpbmUgTUFDSElORk9fUEhZU1JBTQk0CisjZGVmaW5lIE1BQ0hJTkZPX1BIWVNJTwkJOAorI2RlZmluZSBNQUNISU5GT19QR09GRklPCTEyCisjZGVmaW5lIE1BQ0hJTkZPX05BTUUJCTE2CisKKyNpZm5kZWYgQ09ORklHX1hJUF9LRVJORUwKKy8qCisgKiBXZSBwbGFjZSB0aGUgcGFnZSB0YWJsZXMgMTZLIGJlbG93IFRFWFRBRERSLiAgVGhlcmVmb3JlLCB3ZSBtdXN0IG1ha2Ugc3VyZQorICogdGhhdCBURVhUQUREUiBpcyBjb3JyZWN0bHkgc2V0LiAgQ3VycmVudGx5LCB3ZSBleHBlY3QgdGhlIGxlYXN0IHNpZ25pZmljYW50CisgKiAxNiBiaXRzIHRvIGJlIDB4ODAwMCwgYnV0IHdlIGNvdWxkIHByb2JhYmx5IHJlbGF4IHRoaXMgcmVzdHJpY3Rpb24gdG8KKyAqIFRFWFRBRERSID49IFBBR0VfT0ZGU0VUICsgMHg0MDAwCisgKgorICogTm90ZSB0aGF0IHN3YXBwZXJfcGdfZGlyIGlzIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIHBhZ2UgdGFibGVzLCBhbmQKKyAqIHBndGJsIGdpdmVzIHVzIGEgcG9zaXRpb24taW5kZXBlbmRlbnQgcmVmZXJlbmNlIHRvIHRoZXNlIHRhYmxlcy4gIFdlIGNhbgorICogZG8gdGhpcyBiZWNhdXNlIHN0ZXh0ID09IFRFWFRBRERSCisgKi8KKyNpZiAoVEVYVEFERFIgJiAweGZmZmYpICE9IDB4ODAwMAorI2Vycm9yIFRFWFRBRERSIG11c3Qgc3RhcnQgYXQgMHhYWFhYODAwMAorI2VuZGlmCisKKwkuZ2xvYmwJc3dhcHBlcl9wZ19kaXIKKwkuZXF1CXN3YXBwZXJfcGdfZGlyLCBURVhUQUREUiAtIDB4NDAwMAorCisJLm1hY3JvCXBndGJsLCByZCwgcGh5cworCWFkcglccmQsIHN0ZXh0CisJc3ViCVxyZCwgXHJkLCAjMHg0MDAwCisJLmVuZG0KKyNlbHNlCisvKgorICogWElQIEtlcm5lbDoKKyAqCisgKiBXZSBwbGFjZSB0aGUgcGFnZSB0YWJsZXMgMTZLIGJlbG93IERBVEFBRERSLiAgVGhlcmVmb3JlLCB3ZSBtdXN0IG1ha2Ugc3VyZQorICogdGhhdCBEQVRBQUREUiBpcyBjb3JyZWN0bHkgc2V0LiAgQ3VycmVudGx5LCB3ZSBleHBlY3QgdGhlIGxlYXN0IHNpZ25pZmljYW50CisgKiAxNiBiaXRzIHRvIGJlIDB4ODAwMCwgYnV0IHdlIGNvdWxkIHByb2JhYmx5IHJlbGF4IHRoaXMgcmVzdHJpY3Rpb24gdG8KKyAqIERBVEFBRERSID49IFBBR0VfT0ZGU0VUICsgMHg0MDAwCisgKgorICogTm90ZSB0aGF0IHBndGJsIGlzIG1lYW50IHRvIHJldHVybiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBzd2FwcGVyX3BnX2Rpci4KKyAqIFdlIGNhbid0IG1ha2UgaXQgcmVsYXRpdmUgdG8gdGhlIGtlcm5lbCBwb3NpdGlvbiBpbiB0aGlzIGNhc2Ugc2luY2UKKyAqIHRoZSBrZXJuZWwgY2FuIHBoeXNpY2FsbHkgYmUgYW55d2hlcmUuCisgKi8KKyNpZiAoREFUQUFERFIgJiAweGZmZmYpICE9IDB4ODAwMAorI2Vycm9yIERBVEFBRERSIG11c3Qgc3RhcnQgYXQgMHhYWFhYODAwMAorI2VuZGlmCisKKwkuZ2xvYmwJc3dhcHBlcl9wZ19kaXIKKwkuZXF1CXN3YXBwZXJfcGdfZGlyLCBEQVRBQUREUiAtIDB4NDAwMAorCisJLm1hY3JvCXBndGJsLCByZCwgcGh5cworCWxkcglccmQsID0oKERBVEFBRERSIC0gMHg0MDAwKSAtIFZJUlRfT0ZGU0VUKQorCWFkZAlccmQsIFxyZCwgXHBoeXMKKwkuZW5kbQorI2VuZGlmCisKKy8qCisgKiBLZXJuZWwgc3RhcnR1cCBlbnRyeSBwb2ludC4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFRoaXMgaXMgbm9ybWFsbHkgY2FsbGVkIGZyb20gdGhlIGRlY29tcHJlc3NvciBjb2RlLiAgVGhlIHJlcXVpcmVtZW50cworICogYXJlOiBNTVUgPSBvZmYsIEQtY2FjaGUgPSBvZmYsIEktY2FjaGUgPSBkb250IGNhcmUsIHIwID0gMCwKKyAqIHIxID0gbWFjaGluZSBuci4KKyAqCisgKiBUaGlzIGNvZGUgaXMgbW9zdGx5IHBvc2l0aW9uIGluZGVwZW5kZW50LCBzbyBpZiB5b3UgbGluayB0aGUga2VybmVsIGF0CisgKiAweGMwMDA4MDAwLCB5b3UgY2FsbCB0aGlzIGF0IF9fcGEoMHhjMDAwODAwMCkuCisgKgorICogU2VlIGxpbnV4L2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMgZm9yIHRoZSBjb21wbGV0ZSBsaXN0IG9mIG1hY2hpbmUKKyAqIG51bWJlcnMgZm9yIHIxLgorICoKKyAqIFdlJ3JlIHRyeWluZyB0byBrZWVwIGNyYXAgdG8gYSBtaW5pbXVtOyBETyBOT1QgYWRkIGFueSBtYWNoaW5lIHNwZWNpZmljCisgKiBjcmFwIGhlcmUgLSB0aGF0J3Mgd2hhdCB0aGUgYm9vdCBsb2FkZXIgKG9yIGluIGV4dHJlbWUsIHdlbGwganVzdGlmaWVkCisgKiBjaXJjdW1zdGFuY2VzLCB6SW1hZ2UpIGlzIGZvci4KKyAqLworCV9fSU5JVAorCS50eXBlCXN0ZXh0LCAlZnVuY3Rpb24KK0VOVFJZKHN0ZXh0KQorCW1zcgljcHNyX2MsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBNT0RFX1NWQyBAIGVuc3VyZSBzdmMgbW9kZQorCQkJCQkJQCBhbmQgaXJxcyBkaXNhYmxlZAorCWJsCV9fbG9va3VwX3Byb2Nlc3Nvcl90eXBlCQlAIHI1PXByb2NpbmZvIHI5PWNwdWlkCisJbW92cwlyMTAsIHI1CQkJCUAgaW52YWxpZCBwcm9jZXNzb3IgKHI1PTApPworCWJlcQlfX2Vycm9yX3AJCQkJQCB5ZXMsIGVycm9yICdwJworCWJsCV9fbG9va3VwX21hY2hpbmVfdHlwZQkJQCByNT1tYWNoaW5mbworCW1vdnMJcjgsIHI1CQkJCUAgaW52YWxpZCBtYWNoaW5lIChyNT0wKT8KKwliZXEJX19lcnJvcl9hCQkJQCB5ZXMsIGVycm9yICdhJworCWJsCV9fY3JlYXRlX3BhZ2VfdGFibGVzCisKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgY2FsbHMgQ1BVIHNwZWNpZmljIGNvZGUgaW4gYSBwb3NpdGlvbiBpbmRlcGVuZGVudAorCSAqIG1hbm5lci4gIFNlZSBhcmNoL2FybS9tbS9wcm9jLSouUyBmb3IgZGV0YWlscy4gIHIxMCA9IGJhc2Ugb2YKKwkgKiB4eHhfcHJvY19pbmZvIHN0cnVjdHVyZSBzZWxlY3RlZCBieSBfX2xvb2t1cF9tYWNoaW5lX3R5cGUKKwkgKiBhYm92ZS4gIE9uIHJldHVybiwgdGhlIENQVSB3aWxsIGJlIHJlYWR5IGZvciB0aGUgTU1VIHRvIGJlCisJICogdHVybmVkIG9uLCBhbmQgcjAgd2lsbCBob2xkIHRoZSBDUFUgY29udHJvbCByZWdpc3RlciB2YWx1ZS4KKwkgKi8KKwlsZHIJcjEzLCBfX3N3aXRjaF9kYXRhCQlAIGFkZHJlc3MgdG8ganVtcCB0byBhZnRlcgorCQkJCQkJQCBtbXUgaGFzIGJlZW4gZW5hYmxlZAorCWFkcglsciwgX19lbmFibGVfbW11CQlAIHJldHVybiAoUElDKSBhZGRyZXNzCisJYWRkCXBjLCByMTAsICNQUk9DSU5GT19JTklURlVOQworCisJLnR5cGUJX19zd2l0Y2hfZGF0YSwgJW9iamVjdAorX19zd2l0Y2hfZGF0YToKKwkubG9uZwlfX21tYXBfc3dpdGNoZWQKKwkubG9uZwlfX2RhdGFfbG9jCQkJQCByNAorCS5sb25nCV9fZGF0YV9zdGFydAkJCUAgcjUKKwkubG9uZwlfX2Jzc19zdGFydAkJCUAgcjYKKwkubG9uZwlfZW5kCQkJCUAgcjcKKwkubG9uZwlwcm9jZXNzb3JfaWQJCQlAIHI0CisJLmxvbmcJX19tYWNoaW5lX2FyY2hfdHlwZQkJQCByNQorCS5sb25nCWNyX2FsaWdubWVudAkJCUAgcjYKKwkubG9uZwlpbml0X3RocmVhZF91bmlvbis4MTkyCQlAIHNwCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGZyYWdtZW50IG9mIGNvZGUgaXMgZXhlY3V0ZWQgd2l0aCB0aGUgTU1VIG9uLCBhbmQgdXNlcworICogYWJzb2x1dGUgYWRkcmVzc2VzOyB0aGlzIGlzIG5vdCBwb3NpdGlvbiBpbmRlcGVuZGVudC4KKyAqCisgKiAgcjAgID0gY3AjMTUgY29udHJvbCByZWdpc3RlcgorICogIHIxICA9IG1hY2hpbmUgSUQKKyAqICByOSAgPSBwcm9jZXNzb3IgSUQKKyAqLworCS50eXBlCV9fbW1hcF9zd2l0Y2hlZCwgJWZ1bmN0aW9uCitfX21tYXBfc3dpdGNoZWQ6CisJYWRyCXIzLCBfX3N3aXRjaF9kYXRhICsgNAorCisJbGRtaWEJcjMhLCB7cjQsIHI1LCByNiwgcjd9CisJY21wCXI0LCByNQkJCQlAIENvcHkgZGF0YSBzZWdtZW50IGlmIG5lZWRlZAorMToJY21wbmUJcjUsIHI2CisJbGRybmUJZnAsIFtyNF0sICM0CisJc3RybmUJZnAsIFtyNV0sICM0CisJYm5lCTFiCisKKwltb3YJZnAsICMwCQkJCUAgQ2xlYXIgQlNTIChhbmQgemVybyBmcCkKKzE6CWNtcAlyNiwgcjcKKwlzdHJjYwlmcCwgW3I2XSwjNAorCWJjYwkxYgorCisJbGRtaWEJcjMsIHtyNCwgcjUsIHI2LCBzcH0KKwlzdHIJcjksIFtyNF0JCQlAIFNhdmUgcHJvY2Vzc29yIElECisJc3RyCXIxLCBbcjVdCQkJQCBTYXZlIG1hY2hpbmUgdHlwZQorCWJpYwlyNCwgcjAsICNDUl9BCQkJQCBDbGVhciAnQScgYml0CisJc3RtaWEJcjYsIHtyMCwgcjR9CQkJQCBTYXZlIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWVzCisJYglzdGFydF9rZXJuZWwKKworCisKKy8qCisgKiBTZXR1cCBjb21tb24gYml0cyBiZWZvcmUgZmluYWxseSBlbmFibGluZyB0aGUgTU1VLiAgRXNzZW50aWFsbHkKKyAqIHRoaXMgaXMganVzdCBsb2FkaW5nIHRoZSBwYWdlIHRhYmxlIHBvaW50ZXIgYW5kIGRvbWFpbiBhY2Nlc3MKKyAqIHJlZ2lzdGVycy4KKyAqLworCS50eXBlCV9fZW5hYmxlX21tdSwgJWZ1bmN0aW9uCitfX2VuYWJsZV9tbXU6CisjaWZkZWYgQ09ORklHX0FMSUdOTUVOVF9UUkFQCisJb3JyCXIwLCByMCwgI0NSX0EKKyNlbHNlCisJYmljCXIwLCByMCwgI0NSX0EKKyNlbmRpZgorI2lmZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKKwliaWMJcjAsIHIwLCAjQ1JfQworI2VuZGlmCisjaWZkZWYgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFCisJYmljCXIwLCByMCwgI0NSX1oKKyNlbmRpZgorI2lmZGVmIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUKKwliaWMJcjAsIHIwLCAjQ1JfSQorI2VuZGlmCisJbW92CXI1LCAjKGRvbWFpbl92YWwoRE9NQUlOX1VTRVIsIERPTUFJTl9NQU5BR0VSKSB8IFwKKwkJICAgICAgZG9tYWluX3ZhbChET01BSU5fS0VSTkVMLCBET01BSU5fTUFOQUdFUikgfCBcCisJCSAgICAgIGRvbWFpbl92YWwoRE9NQUlOX1RBQkxFLCBET01BSU5fTUFOQUdFUikgfCBcCisJCSAgICAgIGRvbWFpbl92YWwoRE9NQUlOX0lPLCBET01BSU5fQ0xJRU5UKSkKKwltY3IJcDE1LCAwLCByNSwgYzMsIGMwLCAwCQlAIGxvYWQgZG9tYWluIGFjY2VzcyByZWdpc3RlcgorCW1jcglwMTUsIDAsIHI0LCBjMiwgYzAsIDAJCUAgbG9hZCBwYWdlIHRhYmxlIHBvaW50ZXIKKwliCV9fdHVybl9tbXVfb24KKworLyoKKyAqIEVuYWJsZSB0aGUgTU1VLiAgVGhpcyBjb21wbGV0ZWx5IGNoYW5nZXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgdmlzaWJsZQorICogbWVtb3J5IHNwYWNlLiAgWW91IHdpbGwgbm90IGJlIGFibGUgdG8gdHJhY2UgZXhlY3V0aW9uIHRocm91Z2ggdGhpcy4KKyAqIElmIHlvdSBoYXZlIGFuIGVucXVpcnkgYWJvdXQgdGhpcywgKnBsZWFzZSogY2hlY2sgdGhlIGxpbnV4LWFybS1rZXJuZWwKKyAqIG1haWxpbmcgbGlzdCBhcmNoaXZlcyBCRUZPUkUgc2VuZGluZyBhbm90aGVyIHBvc3QgdG8gdGhlIGxpc3QuCisgKgorICogIHIwICA9IGNwIzE1IGNvbnRyb2wgcmVnaXN0ZXIKKyAqICByMTMgPSAqdmlydHVhbCogYWRkcmVzcyB0byBqdW1wIHRvIHVwb24gY29tcGxldGlvbgorICoKKyAqIG90aGVyIHJlZ2lzdGVycyBkZXBlbmQgb24gdGhlIGZ1bmN0aW9uIGNhbGxlZCB1cG9uIGNvbXBsZXRpb24KKyAqLworCS5hbGlnbgk1CisJLnR5cGUJX190dXJuX21tdV9vbiwgJWZ1bmN0aW9uCitfX3R1cm5fbW11X29uOgorCW1vdglyMCwgcjAKKwltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIHdyaXRlIGNvbnRyb2wgcmVnCisJbXJjCXAxNSwgMCwgcjMsIGMwLCBjMCwgMAkJQCByZWFkIGlkIHJlZworCW1vdglyMywgcjMKKwltb3YJcjMsIHIzCisJbW92CXBjLCByMTMKKworCisKKy8qCisgKiBTZXR1cCB0aGUgaW5pdGlhbCBwYWdlIHRhYmxlcy4gIFdlIG9ubHkgc2V0dXAgdGhlIGJhcmVzdAorICogYW1vdW50IHdoaWNoIGFyZSByZXF1aXJlZCB0byBnZXQgdGhlIGtlcm5lbCBydW5uaW5nLCB3aGljaAorICogZ2VuZXJhbGx5IG1lYW5zIG1hcHBpbmcgaW4gdGhlIGtlcm5lbCBjb2RlLgorICoKKyAqIHI4ICA9IG1hY2hpbmZvCisgKiByOSAgPSBjcHVpZAorICogcjEwID0gcHJvY2luZm8KKyAqCisgKiBSZXR1cm5zOgorICogIHIwLCByMywgcjUsIHI2LCByNyBjb3JydXB0ZWQKKyAqICByNCA9IHBoeXNpY2FsIHBhZ2UgdGFibGUgYWRkcmVzcworICovCisJLnR5cGUJX19jcmVhdGVfcGFnZV90YWJsZXMsICVmdW5jdGlvbgorX19jcmVhdGVfcGFnZV90YWJsZXM6CisJbGRyCXI1LCBbcjgsICNNQUNISU5GT19QSFlTUkFNXQlAIHBoeXNyYW0KKwlwZ3RibAlyNCwgcjUJCQkJQCBwYWdlIHRhYmxlIGFkZHJlc3MKKworCS8qCisJICogQ2xlYXIgdGhlIDE2SyBsZXZlbCAxIHN3YXBwZXIgcGFnZSB0YWJsZQorCSAqLworCW1vdglyMCwgcjQKKwltb3YJcjMsICMwCisJYWRkCXI2LCByMCwgIzB4NDAwMAorMToJc3RyCXIzLCBbcjBdLCAjNAorCXN0cglyMywgW3IwXSwgIzQKKwlzdHIJcjMsIFtyMF0sICM0CisJc3RyCXIzLCBbcjBdLCAjNAorCXRlcQlyMCwgcjYKKwlibmUJMWIKKworCWxkcglyNywgW3IxMCwgI1BST0NJTkZPX01NVUZMQUdTXQlAIG1tdWZsYWdzCisKKwkvKgorCSAqIENyZWF0ZSBpZGVudGl0eSBtYXBwaW5nIGZvciBmaXJzdCBNQiBvZiBrZXJuZWwgdG8KKwkgKiBjYXRlciBmb3IgdGhlIE1NVSBlbmFibGUuICBUaGlzIGlkZW50aXR5IG1hcHBpbmcKKwkgKiB3aWxsIGJlIHJlbW92ZWQgYnkgcGFnaW5nX2luaXQoKS4gIFdlIHVzZSBvdXIgY3VycmVudCBwcm9ncmFtCisJICogY291bnRlciB0byBkZXRlcm1pbmUgY29ycmVzcG9uZGluZyBzZWN0aW9uIGJhc2UgYWRkcmVzcy4KKwkgKi8KKwltb3YJcjYsIHBjLCBsc3IgIzIwCQkJQCBzdGFydCBvZiBrZXJuZWwgc2VjdGlvbgorCW9ycglyMywgcjcsIHI2LCBsc2wgIzIwCQlAIGZsYWdzICsga2VybmVsIGJhc2UKKwlzdHIJcjMsIFtyNCwgcjYsIGxzbCAjMl0JCUAgaWRlbnRpdHkgbWFwcGluZworCisJLyoKKwkgKiBOb3cgc2V0dXAgdGhlIHBhZ2V0YWJsZXMgZm9yIG91ciBrZXJuZWwgZGlyZWN0CisJICogbWFwcGVkIHJlZ2lvbi4gIFdlIHJvdW5kIFRFWFRBRERSIGRvd24gdG8gdGhlCisJICogbmVhcmVzdCBtZWdhYnl0ZSBib3VuZGFyeS4gIEl0IGlzIGFzc3VtZWQgdGhhdAorCSAqIHRoZSBrZXJuZWwgZml0cyB3aXRoaW4gNCBjb250aWdvdXMgMU1CIHNlY3Rpb25zLgorCSAqLworCWFkZAlyMCwgcjQsICAjKFRFWFRBRERSICYgMHhmZjAwMDAwMCkgPj4gMTgJQCBzdGFydCBvZiBrZXJuZWwKKwlzdHIJcjMsIFtyMCwgIyhURVhUQUREUiAmIDB4MDBmMDAwMDApID4+IDE4XSEKKwlhZGQJcjMsIHIzLCAjMSA8PCAyMAorCXN0cglyMywgW3IwLCAjNF0hCQkJQCBLRVJORUwgKyAxTUIKKwlhZGQJcjMsIHIzLCAjMSA8PCAyMAorCXN0cglyMywgW3IwLCAjNF0hCQkJQCBLRVJORUwgKyAyTUIKKwlhZGQJcjMsIHIzLCAjMSA8PCAyMAorCXN0cglyMywgW3IwLCAjNF0JCQlAIEtFUk5FTCArIDNNQgorCisJLyoKKwkgKiBUaGVuIG1hcCBmaXJzdCAxTUIgb2YgcmFtIGluIGNhc2UgaXQgY29udGFpbnMgb3VyIGJvb3QgcGFyYW1zLgorCSAqLworCWFkZAlyMCwgcjQsICNWSVJUX09GRlNFVCA+PiAxOAorCW9ycglyNiwgcjUsIHI3CisJc3RyCXI2LCBbcjBdCisKKyNpZmRlZiBDT05GSUdfWElQX0tFUk5FTAorCS8qCisJICogTWFwIHNvbWUgcmFtIHRvIGNvdmVyIG91ciAuZGF0YSBhbmQgLmJzcyBhcmVhcy4KKwkgKiBNYXBwaW5nIDNNQiBzaG91bGQgYmUgcGxlbnR5LgorCSAqLworCXN1YglyMywgcjQsIHI1CisJbW92CXIzLCByMywgbHNyICMyMAorCWFkZAlyMCwgcjAsIHIzLCBsc2wgIzIKKwlhZGQJcjYsIHI2LCByMywgbHNsICMyMAorCXN0cglyNiwgW3IwXSwgIzQKKwlhZGQJcjYsIHI2LCAjKDEgPDwgMjApCisJc3RyCXI2LCBbcjBdLCAjNAorCWFkZAlyNiwgcjYsICMoMSA8PCAyMCkKKwlzdHIJcjYsIFtyMF0KKyNlbmRpZgorCisJYmljCXI3LCByNywgIzB4MGMJCQlAIHR1cm4gb2ZmIGNhY2hlYWJsZQorCQkJCQkJQCBhbmQgYnVmZmVyYWJsZSBiaXRzCisjaWZkZWYgQ09ORklHX0RFQlVHX0xMCisJLyoKKwkgKiBNYXAgaW4gSU8gc3BhY2UgZm9yIHNlcmlhbCBkZWJ1Z2dpbmcuCisJICogVGhpcyBhbGxvd3MgZGVidWcgbWVzc2FnZXMgdG8gYmUgb3V0cHV0CisJICogdmlhIGEgc2VyaWFsIGNvbnNvbGUgYmVmb3JlIHBhZ2luZ19pbml0LgorCSAqLworCWxkcglyMywgW3I4LCAjTUFDSElORk9fUEdPRkZJT10KKwlhZGQJcjAsIHI0LCByMworCXJzYglyMywgcjMsICMweDQwMDAJCQlAIFBUUlNfUEVSX1BHRCpzaXplb2YobG9uZykKKwljbXAJcjMsICMweDA4MDAJCQlAIGxpbWl0IHRvIDUxMk1CCisJbW92aGkJcjMsICMweDA4MDAKKwlhZGQJcjYsIHIwLCByMworCWxkcglyMywgW3I4LCAjTUFDSElORk9fUEhZU0lPXQorCW9ycglyMywgcjMsIHI3CisxOglzdHIJcjMsIFtyMF0sICM0CisJYWRkCXIzLCByMywgIzEgPDwgMjAKKwl0ZXEJcjAsIHI2CisJYm5lCTFiCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9ORVRXSU5ERVIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfQ0FUUykKKwkvKgorCSAqIElmIHdlJ3JlIHVzaW5nIHRoZSBOZXRXaW5kZXIsIHdlIG5lZWQgdG8gbWFwIGluCisJICogdGhlIDE2NTUwLXR5cGUgc2VyaWFsIHBvcnQgZm9yIHRoZSBkZWJ1ZyBtZXNzYWdlcworCSAqLworCXRlcQlyMSwgI01BQ0hfVFlQRV9ORVRXSU5ERVIKKwl0ZXFuZQlyMSwgI01BQ0hfVFlQRV9DQVRTCisJYm5lCTFmCisJYWRkCXIwLCByNCwgIzB4M2ZjMAkJCUAgZmYwMDAwMDAKKwltb3YJcjMsICMweDdjMDAwMDAwCisJb3JyCXIzLCByMywgcjcKKwlzdHIJcjMsIFtyMF0sICM0CisJYWRkCXIzLCByMywgIzEgPDwgMjAKKwlzdHIJcjMsIFtyMF0sICM0CisxOgorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9SUEMKKwkvKgorCSAqIE1hcCBpbiBzY3JlZW4gYXQgMHgwMjAwMDAwMCAmIFNDUkVFTjJfQkFTRQorCSAqIFNpbWlsYXIgcmVhc29ucyBoZXJlIC0gZm9yIGRlYnVnLiAgVGhpcyBpcworCSAqIG9ubHkgZm9yIEFjb3JuIFJpc2NQQyBhcmNoaXRlY3R1cmVzLgorCSAqLworCWFkZAlyMCwgcjQsICMweDgwCQkJQCAwMjAwMDAwMAorCW1vdglyMywgIzB4MDIwMDAwMDAKKwlvcnIJcjMsIHIzLCByNworCXN0cglyMywgW3IwXQorCWFkZAlyMCwgcjQsICMweDM2MDAJCQlAIGQ4MDAwMDAwCisJc3RyCXIzLCBbcjBdCisjZW5kaWYKKwltb3YJcGMsIGxyCisJLmx0b3JnCisKKworCisvKgorICogRXhjZXB0aW9uIGhhbmRsaW5nLiAgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHdlIGNhbid0IHByb2NlZWQuICBXZQorICogb3VnaHQgdG8gdGVsbCB0aGUgdXNlciwgYnV0IHNpbmNlIHdlIGRvbid0IGhhdmUgYW55IGd1YXJhbnRlZSB0aGF0CisgKiB3ZSdyZSBldmVuIHJ1bm5pbmcgb24gdGhlIHJpZ2h0IGFyY2hpdGVjdHVyZSwgd2UgZG8gdmlydHVhbGx5IG5vdGhpbmcuCisgKgorICogSWYgQ09ORklHX0RFQlVHX0xMIGlzIHNldCB3ZSB0cnkgdG8gcHJpbnQgb3V0IHNvbWV0aGluZyBhYm91dCB0aGUgZXJyb3IKKyAqIGFuZCBob3BlIGZvciB0aGUgYmVzdCAodXNlZnVsIGlmIGJvb3Rsb2FkZXIgZmFpbHMgdG8gcGFzcyBhIHByb3BlcgorICogbWFjaGluZSBJRCBmb3IgZXhhbXBsZSkuCisgKi8KKworCS50eXBlCV9fZXJyb3JfcCwgJWZ1bmN0aW9uCitfX2Vycm9yX3A6CisjaWZkZWYgQ09ORklHX0RFQlVHX0xMCisJYWRyCXIwLCBzdHJfcDEKKwlibAlwcmludGFzY2lpCisJYglfX2Vycm9yCitzdHJfcDE6CS5hc2NpegkiXG5FcnJvcjogdW5yZWNvZ25pemVkL3Vuc3VwcG9ydGVkIHByb2Nlc3NvciB2YXJpYW50LlxuIgorCS5hbGlnbgorI2VuZGlmCisKKwkudHlwZQlfX2Vycm9yX2EsICVmdW5jdGlvbgorX19lcnJvcl9hOgorI2lmZGVmIENPTkZJR19ERUJVR19MTAorCW1vdglyNCwgcjEJCQkJQCBwcmVzZXJ2ZSBtYWNoaW5lIElECisJYWRyCXIwLCBzdHJfYTEKKwlibAlwcmludGFzY2lpCisJbW92CXIwLCByNAorCWJsCXByaW50aGV4OAorCWFkcglyMCwgc3RyX2EyCisJYmwJcHJpbnRhc2NpaQorCWFkcglyMywgM2YKKwlsZG1pYQlyMywge3I0LCByNSwgcjZ9CQlAIGdldCBtYWNoaW5lIGRlc2MgbGlzdAorCXN1YglyNCwgcjMsIHI0CQkJQCBnZXQgb2Zmc2V0IGJldHdlZW4gdmlydCZwaHlzCisJYWRkCXI1LCByNSwgcjQJCQlAIGNvbnZlcnQgdmlydCBhZGRyZXNzZXMgdG8KKwlhZGQJcjYsIHI2LCByNAkJCUAgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZQorMToJbGRyCXIwLCBbcjUsICNNQUNISU5GT19UWVBFXQlAIGdldCBtYWNoaW5lIHR5cGUKKwlibAlwcmludGhleDgKKwltb3YJcjAsICMnXHQnCisJYmwJcHJpbnRjaAorCWxkciAgICAgcjAsIFtyNSwgI01BQ0hJTkZPX05BTUVdCUAgZ2V0IG1hY2hpbmUgbmFtZQorCWFkZAlyMCwgcjAsIHI0CisJYmwJcHJpbnRhc2NpaQorCW1vdglyMCwgIydcbicKKwlibAlwcmludGNoCisJYWRkCXI1LCByNSwgI1NJWkVPRl9NQUNISU5FX0RFU0MJQCBuZXh0IG1hY2hpbmVfZGVzYworCWNtcAlyNSwgcjYKKwlibG8JMWIKKwlhZHIJcjAsIHN0cl9hMworCWJsCXByaW50YXNjaWkKKwliCV9fZXJyb3IKK3N0cl9hMToJLmFzY2l6CSJcbkVycm9yOiB1bnJlY29nbml6ZWQvdW5zdXBwb3J0ZWQgbWFjaGluZSBJRCAocjEgPSAweCIKK3N0cl9hMjoJLmFzY2l6CSIpLlxuXG5BdmFpbGFibGUgbWFjaGluZSBzdXBwb3J0OlxuXG5JRCAoaGV4KVx0TkFNRVxuIgorc3RyX2EzOgkuYXNjaXoJIlxuUGxlYXNlIGNoZWNrIHlvdXIga2VybmVsIGNvbmZpZyBhbmQvb3IgYm9vdGxvYWRlci5cbiIKKwkuYWxpZ24KKyNlbmRpZgorCisJLnR5cGUJX19lcnJvciwgJWZ1bmN0aW9uCitfX2Vycm9yOgorI2lmZGVmIENPTkZJR19BUkNIX1JQQworLyoKKyAqIFR1cm4gdGhlIHNjcmVlbiByZWQgb24gYSBlcnJvciAtIFJpc2NQQyBvbmx5LgorICovCisJbW92CXIwLCAjMHgwMjAwMDAwMAorCW1vdglyMywgIzB4MTEKKwlvcnIJcjMsIHIzLCByMywgbHNsICM4CisJb3JyCXIzLCByMywgcjMsIGxzbCAjMTYKKwlzdHIJcjMsIFtyMF0sICM0CisJc3RyCXIzLCBbcjBdLCAjNAorCXN0cglyMywgW3IwXSwgIzQKKwlzdHIJcjMsIFtyMF0sICM0CisjZW5kaWYKKzE6CW1vdglyMCwgcjAKKwliCTFiCisKKworLyoKKyAqIFJlYWQgcHJvY2Vzc29yIElEIHJlZ2lzdGVyIChDUCMxNSwgQ1IwKSwgYW5kIGxvb2sgdXAgaW4gdGhlIGxpbmtlci1idWlsdAorICogc3VwcG9ydGVkIHByb2Nlc3NvciBsaXN0LiAgTm90ZSB0aGF0IHdlIGNhbid0IHVzZSB0aGUgYWJzb2x1dGUgYWRkcmVzc2VzCisgKiBmb3IgdGhlIF9fcHJvY19pbmZvIGxpc3RzIHNpbmNlIHdlIGFyZW4ndCBydW5uaW5nIHdpdGggdGhlIE1NVSBvbgorICogKGFuZCB0aGVyZWZvcmUsIHdlIGFyZSBub3QgaW4gdGhlIGNvcnJlY3QgYWRkcmVzcyBzcGFjZSkuICBXZSBoYXZlIHRvCisgKiBjYWxjdWxhdGUgdGhlIG9mZnNldC4KKyAqCisgKiBSZXR1cm5zOgorICoJcjMsIHI0LCByNiBjb3JydXB0ZWQKKyAqCXI1ID0gcHJvY19pbmZvIHBvaW50ZXIgaW4gcGh5c2ljYWwgYWRkcmVzcyBzcGFjZQorICoJcjkgPSBjcHVpZAorICovCisJLnR5cGUJX19sb29rdXBfcHJvY2Vzc29yX3R5cGUsICVmdW5jdGlvbgorX19sb29rdXBfcHJvY2Vzc29yX3R5cGU6CisJYWRyCXIzLCAzZgorCWxkbWRhCXIzLCB7cjUsIHI2LCByOX0KKwlzdWIJcjMsIHIzLCByOQkJCUAgZ2V0IG9mZnNldCBiZXR3ZWVuIHZpcnQmcGh5cworCWFkZAlyNSwgcjUsIHIzCQkJQCBjb252ZXJ0IHZpcnQgYWRkcmVzc2VzIHRvCisJYWRkCXI2LCByNiwgcjMJCQlAIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UKKwltcmMJcDE1LCAwLCByOSwgYzAsIGMwCQlAIGdldCBwcm9jZXNzb3IgaWQKKzE6CWxkbWlhCXI1LCB7cjMsIHI0fQkJCUAgdmFsdWUsIG1hc2sKKwlhbmQJcjQsIHI0LCByOQkJCUAgbWFzayB3YW50ZWQgYml0cworCXRlcQlyMywgcjQKKwliZXEJMmYKKwlhZGQJcjUsIHI1LCAjUFJPQ19JTkZPX1NaCQlAIHNpemVvZihwcm9jX2luZm9fbGlzdCkKKwljbXAJcjUsIHI2CisJYmxvCTFiCisJbW92CXI1LCAjMAkJCQlAIHVua25vd24gcHJvY2Vzc29yCisyOgltb3YJcGMsIGxyCisKKy8qCisgKiBUaGlzIHByb3ZpZGVzIGEgQy1BUEkgdmVyc2lvbiBvZiB0aGUgYWJvdmUgZnVuY3Rpb24uCisgKi8KK0VOVFJZKGxvb2t1cF9wcm9jZXNzb3JfdHlwZSkKKwlzdG1mZAlzcCEsIHtyNCAtIHI2LCByOSwgbHJ9CisJYmwJX19sb29rdXBfcHJvY2Vzc29yX3R5cGUKKwltb3YJcjAsIHI1CisJbGRtZmQJc3AhLCB7cjQgLSByNiwgcjksIHBjfQorCisvKgorICogTG9vayBpbiBpbmNsdWRlL2FzbS1hcm0vcHJvY2luZm8uaCBhbmQgYXJjaC9hcm0va2VybmVsL2FyY2guW2NoXSBmb3IKKyAqIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIF9fcHJvY19pbmZvIGFuZCBfX2FyY2hfaW5mbyBzdHJ1Y3R1cmVzLgorICovCisJLmxvbmcJX19wcm9jX2luZm9fYmVnaW4KKwkubG9uZwlfX3Byb2NfaW5mb19lbmQKKzM6CS5sb25nCS4KKwkubG9uZwlfX2FyY2hfaW5mb19iZWdpbgorCS5sb25nCV9fYXJjaF9pbmZvX2VuZAorCisvKgorICogTG9va3VwIG1hY2hpbmUgYXJjaGl0ZWN0dXJlIGluIHRoZSBsaW5rZXItYnVpbGQgbGlzdCBvZiBhcmNoaXRlY3R1cmVzLgorICogTm90ZSB0aGF0IHdlIGNhbid0IHVzZSB0aGUgYWJzb2x1dGUgYWRkcmVzc2VzIGZvciB0aGUgX19hcmNoX2luZm8KKyAqIGxpc3RzIHNpbmNlIHdlIGFyZW4ndCBydW5uaW5nIHdpdGggdGhlIE1NVSBvbiAoYW5kIHRoZXJlZm9yZSwgd2UgYXJlCisgKiBub3QgaW4gdGhlIGNvcnJlY3QgYWRkcmVzcyBzcGFjZSkuICBXZSBoYXZlIHRvIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0LgorICoKKyAqICByMSA9IG1hY2hpbmUgYXJjaGl0ZWN0dXJlIG51bWJlcgorICogUmV0dXJuczoKKyAqICByMywgcjQsIHI2IGNvcnJ1cHRlZAorICogIHI1ID0gbWFjaF9pbmZvIHBvaW50ZXIgaW4gcGh5c2ljYWwgYWRkcmVzcyBzcGFjZQorICovCisJLnR5cGUJX19sb29rdXBfbWFjaGluZV90eXBlLCAlZnVuY3Rpb24KK19fbG9va3VwX21hY2hpbmVfdHlwZToKKwlhZHIJcjMsIDNiCisJbGRtaWEJcjMsIHtyNCwgcjUsIHI2fQorCXN1YglyMywgcjMsIHI0CQkJQCBnZXQgb2Zmc2V0IGJldHdlZW4gdmlydCZwaHlzCisJYWRkCXI1LCByNSwgcjMJCQlAIGNvbnZlcnQgdmlydCBhZGRyZXNzZXMgdG8KKwlhZGQJcjYsIHI2LCByMwkJCUAgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZQorMToJbGRyCXIzLCBbcjUsICNNQUNISU5GT19UWVBFXQlAIGdldCBtYWNoaW5lIHR5cGUKKwl0ZXEJcjMsIHIxCQkJCUAgbWF0Y2hlcyBsb2FkZXIgbnVtYmVyPworCWJlcQkyZgkJCQlAIGZvdW5kCisJYWRkCXI1LCByNSwgI1NJWkVPRl9NQUNISU5FX0RFU0MJQCBuZXh0IG1hY2hpbmVfZGVzYworCWNtcAlyNSwgcjYKKwlibG8JMWIKKwltb3YJcjUsICMwCQkJCUAgdW5rbm93biBtYWNoaW5lCisyOgltb3YJcGMsIGxyCisKKy8qCisgKiBUaGlzIHByb3ZpZGVzIGEgQy1BUEkgdmVyc2lvbiBvZiB0aGUgYWJvdmUgZnVuY3Rpb24uCisgKi8KK0VOVFJZKGxvb2t1cF9tYWNoaW5lX3R5cGUpCisJc3RtZmQJc3AhLCB7cjQgLSByNiwgbHJ9CisJbW92CXIxLCByMAorCWJsCV9fbG9va3VwX21hY2hpbmVfdHlwZQorCW1vdglyMCwgcjUKKwlsZG1mZAlzcCEsIHtyNCAtIHI2LCBwY30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9pbml0X3Rhc2suYyBiL2FyY2gvYXJtL2tlcm5lbC9pbml0X3Rhc2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDBjY2EwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL2luaXRfdGFzay5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0va2VybmVsL2luaXRfdGFzay5jCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdF90YXNrLmg+CisjaW5jbHVkZSA8bGludXgvbXF1ZXVlLmg+CisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisKK3N0YXRpYyBzdHJ1Y3QgZnNfc3RydWN0IGluaXRfZnMgPSBJTklUX0ZTOworc3RhdGljIHN0cnVjdCBmaWxlc19zdHJ1Y3QgaW5pdF9maWxlcyA9IElOSVRfRklMRVM7CitzdGF0aWMgc3RydWN0IHNpZ25hbF9zdHJ1Y3QgaW5pdF9zaWduYWxzID0gSU5JVF9TSUdOQUxTKGluaXRfc2lnbmFscyk7CitzdGF0aWMgc3RydWN0IHNpZ2hhbmRfc3RydWN0IGluaXRfc2lnaGFuZCA9IElOSVRfU0lHSEFORChpbml0X3NpZ2hhbmQpOworc3RydWN0IG1tX3N0cnVjdCBpbml0X21tID0gSU5JVF9NTShpbml0X21tKTsKKworRVhQT1JUX1NZTUJPTChpbml0X21tKTsKKworLyoKKyAqIEluaXRpYWwgdGhyZWFkIHN0cnVjdHVyZS4KKyAqCisgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgaXMgODE5Mi1ieXRlIGFsaWduZWQgZHVlIHRvIHRoZQorICogd2F5IHByb2Nlc3Mgc3RhY2tzIGFyZSBoYW5kbGVkLiBUaGlzIGlzIGRvbmUgYnkgbWFraW5nIHN1cmUKKyAqIHRoZSBsaW5rZXIgbWFwcyB0aGlzIGluIHRoZSAudGV4dCBzZWdtZW50IHJpZ2h0IGFmdGVyIGhlYWQuUywKKyAqIGFuZCBtYWtpbmcgaGVhZC5TIGVuc3VyZSB0aGUgcHJvcGVyIGFsaWdubWVudC4KKyAqCisgKiBUaGUgdGhpbmdzIHdlIGRvIGZvciBwZXJmb3JtYW5jZS4uCisgKi8KK3VuaW9uIHRocmVhZF91bmlvbiBpbml0X3RocmVhZF91bmlvbgorCV9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuaW5pdC50YXNrIikpKSA9CisJCXsgSU5JVF9USFJFQURfSU5GTyhpbml0X3Rhc2spIH07CisKKy8qCisgKiBJbml0aWFsIHRhc2sgc3RydWN0dXJlLgorICoKKyAqIEFsbCBvdGhlciB0YXNrIHN0cnVjdHMgd2lsbCBiZSBhbGxvY2F0ZWQgb24gc2xhYnMgaW4gZm9yay5jCisgKi8KK3N0cnVjdCB0YXNrX3N0cnVjdCBpbml0X3Rhc2sgPSBJTklUX1RBU0soaW5pdF90YXNrKTsKKworRVhQT1JUX1NZTUJPTChpbml0X3Rhc2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2lvLmMgYi9hcmNoL2FybS9rZXJuZWwvaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzIwYzExCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL2lvLmMKQEAgLTAsMCArMSw1MSBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworLyoKKyAqIENvcHkgZGF0YSBmcm9tIElPIG1lbW9yeSBzcGFjZSB0byAicmVhbCIgbWVtb3J5IHNwYWNlLgorICogVGhpcyBuZWVkcyB0byBiZSBvcHRpbWl6ZWQuCisgKi8KK3ZvaWQgX21lbWNweV9mcm9taW8odm9pZCAqdG8sIHZvaWQgX19pb21lbSAqZnJvbSwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGNoYXIgKnQgPSB0bzsKKwl3aGlsZSAoY291bnQpIHsKKwkJY291bnQtLTsKKwkJKnQgPSByZWFkYihmcm9tKTsKKwkJdCsrOworCQlmcm9tKys7CisJfQorfQorCisvKgorICogQ29weSBkYXRhIGZyb20gInJlYWwiIG1lbW9yeSBzcGFjZSB0byBJTyBtZW1vcnkgc3BhY2UuCisgKiBUaGlzIG5lZWRzIHRvIGJlIG9wdGltaXplZC4KKyAqLwordm9pZCBfbWVtY3B5X3RvaW8odm9pZCBfX2lvbWVtICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgc2l6ZV90IGNvdW50KQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmYgPSBmcm9tOworCXdoaWxlIChjb3VudCkgeworCQljb3VudC0tOworCQl3cml0ZWIoKmYsIHRvKTsKKwkJZisrOworCQl0bysrOworCX0KK30KKworLyoKKyAqICJtZW1zZXQiIG9uIElPIG1lbW9yeSBzcGFjZS4KKyAqIFRoaXMgbmVlZHMgdG8gYmUgb3B0aW1pemVkLgorICovCit2b2lkIF9tZW1zZXRfaW8odm9pZCBfX2lvbWVtICpkc3QsIGludCBjLCBzaXplX3QgY291bnQpCit7CisJd2hpbGUgKGNvdW50KSB7CisJCWNvdW50LS07CisJCXdyaXRlYihjLCBkc3QpOworCQlkc3QrKzsKKwl9Cit9CisKK0VYUE9SVF9TWU1CT0woX21lbWNweV9mcm9taW8pOworRVhQT1JUX1NZTUJPTChfbWVtY3B5X3RvaW8pOworRVhQT1JUX1NZTUJPTChfbWVtc2V0X2lvKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9pcnEuYyBiL2FyY2gvYXJtL2tlcm5lbC9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjE4N2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL2lycS5jCkBAIC0wLDAgKzEsMTAzOCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvaXJxLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTkyIExpbnVzIFRvcnZhbGRzCisgKiAgTW9kaWZpY2F0aW9ucyBmb3IgQVJNIHByb2Nlc3NvciBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMCBSdXNzZWxsIEtpbmcuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb2RlIHVzZWQgYnkgdmFyaW91cyBJUlEgaGFuZGxpbmcgcm91dGluZXM6CisgKiAgYXNraW5nIGZvciBkaWZmZXJlbnQgSVJRJ3Mgc2hvdWxkIGJlIGRvbmUgdGhyb3VnaCB0aGVzZSByb3V0aW5lcworICogIGluc3RlYWQgb2YganVzdCBncmFiYmluZyB0aGVtLiBUaHVzIHNldHVwcyB3aXRoIGRpZmZlcmVudCBJUlEgbnVtYmVycworICogIHNob3VsZG4ndCByZXN1bHQgaW4gYW55IHdlaXJkIHN1cnByaXNlcywgYW5kIGluc3RhbGxpbmcgbmV3IGhhbmRsZXJzCisgKiAgc2hvdWxkIGJlIGVhc2llci4KKyAqCisgKiAgSVJRJ3MgYXJlIGluIGZhY3QgaW1wbGVtZW50ZWQgYSBiaXQgbGlrZSBzaWduYWwgaGFuZGxlcnMgZm9yIHRoZSBrZXJuZWwuCisgKiAgTmF0dXJhbGx5IGl0J3Mgbm90IGEgMToxIHJlbGF0aW9uLCBidXQgdGhlcmUgYXJlIHNpbWlsYXJpdGllcy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworLyoKKyAqIE1heGltdW0gSVJRIGNvdW50LiAgQ3VycmVudGx5LCB0aGlzIGlzIGFyYml0YXJ5LiAgSG93ZXZlciwgaXQgc2hvdWxkCisgKiBub3QgYmUgc2V0IHRvbyBsb3cgdG8gcHJldmVudCBmYWxzZSB0cmlnZ2VyaW5nLiAgQ29udmVyc2VseSwgaWYgaXQKKyAqIGlzIHNldCB0b28gaGlnaCwgdGhlbiB5b3UgY291bGQgbWlzcyBhIHN0dWNrIElSUS4KKyAqCisgKiBNYXliZSB3ZSBvdWdodCB0byBzZXQgYSB0aW1lciBhbmQgcmUtZW5hYmxlIHRoZSBJUlEgYXQgYSBsYXRlciB0aW1lPworICovCisjZGVmaW5lIE1BWF9JUlFfQ05UCTEwMDAwMAorCitzdGF0aWMgaW50IG5vaXJxZGVidWc7CitzdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBpcnFfZXJyX2NvdW50Oworc3RhdGljIERFRklORV9TUElOTE9DSyhpcnFfY29udHJvbGxlcl9sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQoaXJxX3BlbmRpbmcpOworCitzdHJ1Y3QgaXJxZGVzYyBpcnFfZGVzY1tOUl9JUlFTXTsKK3ZvaWQgKCppbml0X2FyY2hfaXJxKSh2b2lkKSBfX2luaXRkYXRhID0gTlVMTDsKKworLyoKKyAqIE5vIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpcnFfZmluaXNoIGZ1bmN0aW9uIGRlZmluZWQgaW4gYXJtL2FyY2gvaXJxcy5oLgorICovCisjaWZuZGVmIGlycV9maW5pc2gKKyNkZWZpbmUgaXJxX2ZpbmlzaChpcnEpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKgorICogRHVtbXkgbWFzay91bm1hc2sgaGFuZGxlcgorICovCit2b2lkIGR1bW15X21hc2tfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworfQorCitpcnFyZXR1cm5fdCBub19hY3Rpb24oaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKK3ZvaWQgZG9fYmFkX0lSUSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaXJxX2Vycl9jb3VudCArPSAxOworCXByaW50ayhLRVJOX0VSUiAiSVJROiBzcHVyaW91cyBpbnRlcnJ1cHQgJWRcbiIsIGlycSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBiYWRfY2hpcCA9IHsKKwkuYWNrCT0gZHVtbXlfbWFza191bm1hc2tfaXJxLAorCS5tYXNrCT0gZHVtbXlfbWFza191bm1hc2tfaXJxLAorCS51bm1hc2sgPSBkdW1teV9tYXNrX3VubWFza19pcnEsCit9OworCitzdGF0aWMgc3RydWN0IGlycWRlc2MgYmFkX2lycV9kZXNjID0geworCS5jaGlwCQk9ICZiYWRfY2hpcCwKKwkuaGFuZGxlCQk9IGRvX2JhZF9JUlEsCisJLnBlbmQJCT0gTElTVF9IRUFEX0lOSVQoYmFkX2lycV9kZXNjLnBlbmQpLAorCS5kaXNhYmxlX2RlcHRoCT0gMSwKK307CisKKyNpZmRlZiBDT05GSUdfU01QCit2b2lkIHN5bmNocm9uaXplX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcnFkZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisKKwl3aGlsZSAoZGVzYy0+cnVubmluZykKKwkJYmFycmllcigpOworfQorRVhQT1JUX1NZTUJPTChzeW5jaHJvbml6ZV9pcnEpOworCisjZGVmaW5lIHNtcF9zZXRfcnVubmluZyhkZXNjKQlkbyB7IGRlc2MtPnJ1bm5pbmcgPSAxOyB9IHdoaWxlICgwKQorI2RlZmluZSBzbXBfY2xlYXJfcnVubmluZyhkZXNjKQlkbyB7IGRlc2MtPnJ1bm5pbmcgPSAwOyB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgc21wX3NldF9ydW5uaW5nKGRlc2MpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc21wX2NsZWFyX3J1bm5pbmcoZGVzYykJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qKgorICoJZGlzYWJsZV9pcnFfbm9zeW5jIC0gZGlzYWJsZSBhbiBpcnEgd2l0aG91dCB3YWl0aW5nCisgKglAaXJxOiBJbnRlcnJ1cHQgdG8gZGlzYWJsZQorICoKKyAqCURpc2FibGUgdGhlIHNlbGVjdGVkIGludGVycnVwdCBsaW5lLiAgRW5hYmxlcyBhbmQgZGlzYWJsZXMKKyAqCWFyZSBuZXN0ZWQuICBXZSBkbyB0aGlzIGxhemlseS4KKyAqCisgKglUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBJUlEgY29udGV4dC4KKyAqLwordm9pZCBkaXNhYmxlX2lycV9ub3N5bmModW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2NvbnRyb2xsZXJfbG9jaywgZmxhZ3MpOworCWRlc2MtPmRpc2FibGVfZGVwdGgrKzsKKwlsaXN0X2RlbF9pbml0KCZkZXNjLT5wZW5kKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGRpc2FibGVfaXJxX25vc3luYyk7CisKKy8qKgorICoJZGlzYWJsZV9pcnEgLSBkaXNhYmxlIGFuIGlycSBhbmQgd2FpdCBmb3IgY29tcGxldGlvbgorICoJQGlycTogSW50ZXJydXB0IHRvIGRpc2FibGUKKyAqCisgKglEaXNhYmxlIHRoZSBzZWxlY3RlZCBpbnRlcnJ1cHQgbGluZS4gIEVuYWJsZXMgYW5kIGRpc2FibGVzCisgKglhcmUgbmVzdGVkLiAgVGhpcyBmdW5jdGlvbnMgd2FpdHMgZm9yIGFueSBwZW5kaW5nIElSUQorICoJaGFuZGxlcnMgZm9yIHRoaXMgaW50ZXJydXB0IHRvIGNvbXBsZXRlIGJlZm9yZSByZXR1cm5pbmcuCisgKglJZiB5b3UgdXNlIHRoaXMgZnVuY3Rpb24gd2hpbGUgaG9sZGluZyBhIHJlc291cmNlIHRoZSBJUlEKKyAqCWhhbmRsZXIgbWF5IG5lZWQgeW91IHdpbGwgZGVhZGxvY2suCisgKgorICoJVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIC0gd2l0aCBjYXJlIC0gZnJvbSBJUlEgY29udGV4dC4KKyAqLwordm9pZCBkaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcnFkZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisKKwlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKKwlpZiAoZGVzYy0+YWN0aW9uKQorCQlzeW5jaHJvbml6ZV9pcnEoaXJxKTsKK30KK0VYUE9SVF9TWU1CT0woZGlzYWJsZV9pcnEpOworCisvKioKKyAqCWVuYWJsZV9pcnEgLSBlbmFibGUgaW50ZXJydXB0IGhhbmRsaW5nIG9uIGFuIGlycQorICoJQGlycTogSW50ZXJydXB0IHRvIGVuYWJsZQorICoKKyAqCVJlLWVuYWJsZXMgdGhlIHByb2Nlc3Npbmcgb2YgaW50ZXJydXB0cyBvbiB0aGlzIElSUSBsaW5lLgorICoJTm90ZSB0aGF0IHRoaXMgbWF5IGNhbGwgdGhlIGludGVycnVwdCBoYW5kbGVyLCBzbyB5b3UgbWF5CisgKglnZXQgdW5leHBlY3RlZCByZXN1bHRzIGlmIHlvdSBob2xkIElSUXMgZGlzYWJsZWQuCisgKgorICoJVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gSVJRIGNvbnRleHQuCisgKi8KK3ZvaWQgZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcnFkZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7CisJaWYgKHVubGlrZWx5KCFkZXNjLT5kaXNhYmxlX2RlcHRoKSkgeworCQlwcmludGsoImVuYWJsZV9pcnEoJXUpIHVuYmFsYW5jZWQgZnJvbSAlcFxuIiwgaXJxLAorCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwl9IGVsc2UgaWYgKCEtLWRlc2MtPmRpc2FibGVfZGVwdGgpIHsKKwkJZGVzYy0+cHJvYmluZyA9IDA7CisJCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOworCisJCS8qCisJCSAqIElmIHRoZSBpbnRlcnJ1cHQgaXMgd2FpdGluZyB0byBiZSBwcm9jZXNzZWQsCisJCSAqIHRyeSB0byByZS1ydW4gaXQuICBXZSBjYW4ndCBkaXJlY3RseSBydW4gaXQKKwkJICogZnJvbSBoZXJlIHNpbmNlIHRoZSBjYWxsZXIgbWlnaHQgYmUgaW4gYW4KKwkJICogaW50ZXJydXB0LXByb3RlY3RlZCByZWdpb24uCisJCSAqLworCQlpZiAoZGVzYy0+cGVuZGluZyAmJiBsaXN0X2VtcHR5KCZkZXNjLT5wZW5kKSkgeworCQkJZGVzYy0+cGVuZGluZyA9IDA7CisJCQlpZiAoIWRlc2MtPmNoaXAtPnJldHJpZ2dlciB8fAorCQkJICAgIGRlc2MtPmNoaXAtPnJldHJpZ2dlcihpcnEpKQorCQkJCWxpc3RfYWRkKCZkZXNjLT5wZW5kLCAmaXJxX3BlbmRpbmcpOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9jb250cm9sbGVyX2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woZW5hYmxlX2lycSk7CisKKy8qCisgKiBFbmFibGUgd2FrZSBvbiBzZWxlY3RlZCBpcnEKKyAqLwordm9pZCBlbmFibGVfaXJxX3dha2UodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2NvbnRyb2xsZXJfbG9jaywgZmxhZ3MpOworCWlmIChkZXNjLT5jaGlwLT53YWtlKQorCQlkZXNjLT5jaGlwLT53YWtlKGlycSwgMSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2NvbnRyb2xsZXJfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChlbmFibGVfaXJxX3dha2UpOworCit2b2lkIGRpc2FibGVfaXJxX3dha2UodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2NvbnRyb2xsZXJfbG9jaywgZmxhZ3MpOworCWlmIChkZXNjLT5jaGlwLT53YWtlKQorCQlkZXNjLT5jaGlwLT53YWtlKGlycSwgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2NvbnRyb2xsZXJfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChkaXNhYmxlX2lycV93YWtlKTsKKworaW50IHNob3dfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCit7CisJaW50IGkgPSAqKGxvZmZfdCAqKSB2LCBjcHU7CisJc3RydWN0IGlycWFjdGlvbiAqIGFjdGlvbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGkgPT0gMCkgeworCQljaGFyIGNwdW5hbWVbMTJdOworCisJCXNlcV9wcmludGYocCwgIiAgICAiKTsKKwkJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSB7CisJCQlzcHJpbnRmKGNwdW5hbWUsICJDUFUlZCIsIGNwdSk7CisJCQlzZXFfcHJpbnRmKHAsICIgJTEwcyIsIGNwdW5hbWUpOworCQl9CisJCXNlcV9wdXRjKHAsICdcbicpOworCX0KKworCWlmIChpIDwgTlJfSVJRUykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2NvbnRyb2xsZXJfbG9jaywgZmxhZ3MpOworCSAgICAJYWN0aW9uID0gaXJxX2Rlc2NbaV0uYWN0aW9uOworCQlpZiAoIWFjdGlvbikKKwkJCWdvdG8gdW5sb2NrOworCisJCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7CisJCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGNwdSkuaXJxc1tpXSk7CisJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOworCQlmb3IgKGFjdGlvbiA9IGFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCisJCQlzZXFfcHJpbnRmKHAsICIsICVzIiwgYWN0aW9uLT5uYW1lKTsKKworCQlzZXFfcHV0YyhwLCAnXG4nKTsKK3VubG9jazoKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2NvbnRyb2xsZXJfbG9jaywgZmxhZ3MpOworCX0gZWxzZSBpZiAoaSA9PSBOUl9JUlFTKSB7CisjaWZkZWYgQ09ORklHX0FSQ0hfQUNPUk4KKwkJc2hvd19maXFfbGlzdChwLCB2KTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TTVAKKwkJc2hvd19pcGlfbGlzdChwKTsKKyNlbmRpZgorCQlzZXFfcHJpbnRmKHAsICJFcnI6ICUxMGx1XG4iLCBpcnFfZXJyX2NvdW50KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJUlEgbG9jayBkZXRlY3Rpb24uCisgKgorICogSG9wZWZ1bGx5LCB0aGlzIHNob3VsZCBnZXQgdXMgb3V0IG9mIGEgZmV3IGxvY2tlZCBzaXR1YXRpb25zLgorICogSG93ZXZlciwgaXQgbWF5IHRha2UgYSB3aGlsZSBmb3IgdGhpcyB0byBoYXBwZW4sIHNpbmNlIHdlIG5lZWQKKyAqIGEgbGFyZ2UgbnVtYmVyIGlmIElSUXMgdG8gYXBwZWFyIGluIHRoZSBzYW1lIGppZmZpZSB3aXRoIHRoZQorICogc2FtZSBpbnN0cnVjdGlvbiBwb2ludGVyIChvciB3aXRoaW4gMiBpbnN0cnVjdGlvbnMpLgorICovCitzdGF0aWMgaW50IGNoZWNrX2lycV9sb2NrKHN0cnVjdCBpcnFkZXNjICpkZXNjLCBpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGluc3RyX3B0ciA9IGluc3RydWN0aW9uX3BvaW50ZXIocmVncyk7CisKKwlpZiAoZGVzYy0+bGNrX2ppZiA9PSBqaWZmaWVzICYmCisJICAgIGRlc2MtPmxja19wYyA+PSBpbnN0cl9wdHIgJiYgZGVzYy0+bGNrX3BjIDwgaW5zdHJfcHRyICsgOCkgeworCQlkZXNjLT5sY2tfY250ICs9IDE7CisKKwkJaWYgKGRlc2MtPmxja19jbnQgPiBNQVhfSVJRX0NOVCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJJUlEgTE9DSzogSVJRJWQgaXMgbG9ja2luZyB0aGUgc3lzdGVtLCBkaXNhYmxlZFxuIiwgaXJxKTsKKwkJCXJldHVybiAxOworCQl9CisJfSBlbHNlIHsKKwkJZGVzYy0+bGNrX2NudCA9IDA7CisJCWRlc2MtPmxja19wYyAgPSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOworCQlkZXNjLT5sY2tfamlmID0gamlmZmllczsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCityZXBvcnRfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IGlycWRlc2MgKmRlc2MsIGludCByZXQpCit7CisJc3RhdGljIGludCBjb3VudCA9IDEwMDsKKwlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CisKKwlpZiAoIWNvdW50IHx8IG5vaXJxZGVidWcpCisJCXJldHVybjsKKworCWNvdW50LS07CisKKwlpZiAocmV0ICE9IElSUV9IQU5ETEVEICYmIHJldCAhPSBJUlFfTk9ORSkgeworCQlwcmludGsoImlycSV1OiBib2d1cyByZXR2YWwgbWFzayAleFxuIiwgaXJxLCByZXQpOworCX0gZWxzZSB7CisJCXByaW50aygiaXJxJXU6IG5vYm9keSBjYXJlZFxuIiwgaXJxKTsKKwl9CisJc2hvd19yZWdzKHJlZ3MpOworCWR1bXBfc3RhY2soKTsKKwlwcmludGsoS0VSTl9FUlIgImhhbmRsZXJzOiIpOworCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKKwlkbyB7CisJCXByaW50aygiXG4iIEtFUk5fRVJSICJbPCVwPl0iLCBhY3Rpb24tPmhhbmRsZXIpOworCQlwcmludF9zeW1ib2woIiAoJXMpIiwgKHVuc2lnbmVkIGxvbmcpYWN0aW9uLT5oYW5kbGVyKTsKKwkJYWN0aW9uID0gYWN0aW9uLT5uZXh0OworCX0gd2hpbGUgKGFjdGlvbik7CisJcHJpbnRrKCJcbiIpOworfQorCitzdGF0aWMgaW50CitfX2RvX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24sIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBzdGF0dXM7CisJaW50IHJldCwgcmV0dmFsID0gMDsKKworCXNwaW5fdW5sb2NrKCZpcnFfY29udHJvbGxlcl9sb2NrKTsKKworCWlmICghKGFjdGlvbi0+ZmxhZ3MgJiBTQV9JTlRFUlJVUFQpKQorCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwlzdGF0dXMgPSAwOworCWRvIHsKKwkJcmV0ID0gYWN0aW9uLT5oYW5kbGVyKGlycSwgYWN0aW9uLT5kZXZfaWQsIHJlZ3MpOworCQlpZiAocmV0ID09IElSUV9IQU5ETEVEKQorCQkJc3RhdHVzIHw9IGFjdGlvbi0+ZmxhZ3M7CisJCXJldHZhbCB8PSByZXQ7CisJCWFjdGlvbiA9IGFjdGlvbi0+bmV4dDsKKwl9IHdoaWxlIChhY3Rpb24pOworCisJaWYgKHN0YXR1cyAmIFNBX1NBTVBMRV9SQU5ET00pCisJCWFkZF9pbnRlcnJ1cHRfcmFuZG9tbmVzcyhpcnEpOworCisJc3Bpbl9sb2NrX2lycSgmaXJxX2NvbnRyb2xsZXJfbG9jayk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogVGhpcyBpcyBmb3Igc29mdHdhcmUtZGVjb2RlZCBJUlFzLiAgVGhlIGNhbGxlciBpcyBleHBlY3RlZCB0bworICogaGFuZGxlIHRoZSBhY2ssIGNsZWFyLCBtYXNrIGFuZCB1bm1hc2sgaXNzdWVzLgorICovCit2b2lkCitkb19zaW1wbGVfSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFkZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CisJY29uc3QgdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWRlc2MtPnRyaWdnZXJlZCA9IDE7CisKKwlrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV0rKzsKKworCXNtcF9zZXRfcnVubmluZyhkZXNjKTsKKworCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKKwlpZiAoYWN0aW9uKSB7CisJCWludCByZXQgPSBfX2RvX2lycShpcnEsIGFjdGlvbiwgcmVncyk7CisJCWlmIChyZXQgIT0gSVJRX0hBTkRMRUQpCisJCQlyZXBvcnRfYmFkX2lycShpcnEsIHJlZ3MsIGRlc2MsIHJldCk7CisJfQorCisJc21wX2NsZWFyX3J1bm5pbmcoZGVzYyk7Cit9CisKKy8qCisgKiBNb3N0IGVkZ2UtdHJpZ2dlcmVkIElSUSBpbXBsZW1lbnRhdGlvbnMgc2VlbSB0byB0YWtlIGEgYnJva2VuCisgKiBhcHByb2FjaCB0byB0aGlzLiAgSGVuY2UgdGhlIGNvbXBsZXhpdHkuCisgKi8KK3ZvaWQKK2RvX2VkZ2VfSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFkZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwljb25zdCB1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJZGVzYy0+dHJpZ2dlcmVkID0gMTsKKworCS8qCisJICogSWYgd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgdGhpcyBJUlEsIG9yIGl0cyBkaXNhYmxlZCwKKwkgKiB3ZSBzaG91bGRuJ3QgcHJvY2VzcyB0aGUgSVJRLiAgSW5zdGVhZCwgdHVybiBvbiB0aGUKKwkgKiBoYXJkd2FyZSBtYXNrcy4KKwkgKi8KKwlpZiAodW5saWtlbHkoZGVzYy0+cnVubmluZyB8fCBkZXNjLT5kaXNhYmxlX2RlcHRoKSkKKwkJZ290byBydW5uaW5nOworCisJLyoKKwkgKiBBY2tub3dsZWRnZSBhbmQgY2xlYXIgdGhlIElSUSwgYnV0IGRvbid0IG1hc2sgaXQuCisJICovCisJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CisKKwkvKgorCSAqIE1hcmsgdGhlIElSUSBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuCisJICovCisJZGVzYy0+cnVubmluZyA9IDE7CisKKwlrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV0rKzsKKworCWRvIHsKKwkJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOworCisJCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKKwkJaWYgKCFhY3Rpb24pCisJCQlicmVhazsKKworCQlpZiAoZGVzYy0+cGVuZGluZyAmJiAhZGVzYy0+ZGlzYWJsZV9kZXB0aCkgeworCQkJZGVzYy0+cGVuZGluZyA9IDA7CisJCQlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKKwkJfQorCisJCV9fZG9faXJxKGlycSwgYWN0aW9uLCByZWdzKTsKKwl9IHdoaWxlIChkZXNjLT5wZW5kaW5nICYmICFkZXNjLT5kaXNhYmxlX2RlcHRoKTsKKworCWRlc2MtPnJ1bm5pbmcgPSAwOworCisJLyoKKwkgKiBJZiB3ZSB3ZXJlIGRpc2FibGVkIG9yIGZyZWVkLCBzaHV0IGRvd24gdGhlIGhhbmRsZXIuCisJICovCisJaWYgKGxpa2VseShkZXNjLT5hY3Rpb24gJiYgIWNoZWNrX2lycV9sb2NrKGRlc2MsIGlycSwgcmVncykpKQorCQlyZXR1cm47CisKKyBydW5uaW5nOgorCS8qCisJICogV2UgZ290IGFub3RoZXIgSVJRIHdoaWxlIHRoaXMgb25lIHdhcyBtYXNrZWQgb3IKKwkgKiBjdXJyZW50bHkgcnVubmluZy4gIERlbGF5IGl0LgorCSAqLworCWRlc2MtPnBlbmRpbmcgPSAxOworCWRlc2MtPmNoaXAtPm1hc2soaXJxKTsKKwlkZXNjLT5jaGlwLT5hY2soaXJxKTsKK30KKworLyoKKyAqIExldmVsLWJhc2VkIElSUSBoYW5kbGVyLiAgTmljZSBhbmQgc2ltcGxlLgorICovCit2b2lkCitkb19sZXZlbF9JUlEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWRlc2MgKmRlc2MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKKwljb25zdCB1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJZGVzYy0+dHJpZ2dlcmVkID0gMTsKKworCS8qCisJICogQWNrbm93bGVkZ2UsIGNsZWFyIF9BTkRfIGRpc2FibGUgdGhlIGludGVycnVwdC4KKwkgKi8KKwlkZXNjLT5jaGlwLT5hY2soaXJxKTsKKworCWlmIChsaWtlbHkoIWRlc2MtPmRpc2FibGVfZGVwdGgpKSB7CisJCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOworCisJCXNtcF9zZXRfcnVubmluZyhkZXNjKTsKKworCQkvKgorCQkgKiBSZXR1cm4gd2l0aCB0aGlzIGludGVycnVwdCBtYXNrZWQgaWYgbm8gYWN0aW9uCisJCSAqLworCQlhY3Rpb24gPSBkZXNjLT5hY3Rpb247CisJCWlmIChhY3Rpb24pIHsKKwkJCWludCByZXQgPSBfX2RvX2lycShpcnEsIGRlc2MtPmFjdGlvbiwgcmVncyk7CisKKwkJCWlmIChyZXQgIT0gSVJRX0hBTkRMRUQpCisJCQkJcmVwb3J0X2JhZF9pcnEoaXJxLCByZWdzLCBkZXNjLCByZXQpOworCisJCQlpZiAobGlrZWx5KCFkZXNjLT5kaXNhYmxlX2RlcHRoICYmCisJCQkJICAgIWNoZWNrX2lycV9sb2NrKGRlc2MsIGlycSwgcmVncykpKQorCQkJCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOworCQl9CisKKwkJc21wX2NsZWFyX3J1bm5pbmcoZGVzYyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkb19wZW5kaW5nX2lycXMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGxpc3RfaGVhZCBoZWFkLCAqbCwgKm47CisKKwlkbyB7CisJCXN0cnVjdCBpcnFkZXNjICpkZXNjOworCisJCS8qCisJCSAqIEZpcnN0LCB0YWtlIHRoZSBwZW5kaW5nIGludGVycnVwdHMgb2ZmIHRoZSBsaXN0LgorCQkgKiBUaGUgYWN0IG9mIGNhbGxpbmcgdGhlIGhhbmRsZXJzIG1heSBhZGQgc29tZSBJUlFzCisJCSAqIGJhY2sgb250byB0aGUgbGlzdC4KKwkJICovCisJCWhlYWQgPSBpcnFfcGVuZGluZzsKKwkJSU5JVF9MSVNUX0hFQUQoJmlycV9wZW5kaW5nKTsKKwkJaGVhZC5uZXh0LT5wcmV2ID0gJmhlYWQ7CisJCWhlYWQucHJldi0+bmV4dCA9ICZoZWFkOworCisJCS8qCisJCSAqIE5vdyBydW4gZWFjaCBlbnRyeS4gIFdlIG11c3QgZGVsZXRlIGl0IGZyb20gb3VyCisJCSAqIGxpc3QgYmVmb3JlIGNhbGxpbmcgdGhlIGhhbmRsZXIuCisJCSAqLworCQlsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbiwgJmhlYWQpIHsKKwkJCWRlc2MgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBpcnFkZXNjLCBwZW5kKTsKKwkJCWxpc3RfZGVsX2luaXQoJmRlc2MtPnBlbmQpOworCQkJZGVzYy0+aGFuZGxlKGRlc2MgLSBpcnFfZGVzYywgZGVzYywgcmVncyk7CisJCX0KKworCQkvKgorCQkgKiBUaGUgbGlzdCBtdXN0IGJlIGVtcHR5LgorCQkgKi8KKwkJQlVHX09OKCFsaXN0X2VtcHR5KCZoZWFkKSk7CisJfSB3aGlsZSAoIWxpc3RfZW1wdHkoJmlycV9wZW5kaW5nKSk7Cit9CisKKy8qCisgKiBkb19JUlEgaGFuZGxlcyBhbGwgaGFyZHdhcmUgSVJRJ3MuICBEZWNvZGVkIElSUXMgc2hvdWxkIG5vdAorICogY29tZSB2aWEgdGhpcyBmdW5jdGlvbi4gIEluc3RlYWQsIHRoZXkgc2hvdWxkIHByb3ZpZGUgdGhlaXIKKyAqIG93biAnaGFuZGxlcicKKyAqLworYXNtbGlua2FnZSB2b2lkIGFzbV9kb19JUlEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGlycWRlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKworCS8qCisJICogU29tZSBoYXJkd2FyZSBnaXZlcyByYW5kb21seSB3cm9uZyBpbnRlcnJ1cHRzLiAgUmF0aGVyCisJICogdGhhbiBjcmFzaGluZywgZG8gc29tZXRoaW5nIHNlbnNpYmxlLgorCSAqLworCWlmIChpcnEgPj0gTlJfSVJRUykKKwkJZGVzYyA9ICZiYWRfaXJxX2Rlc2M7CisKKwlpcnFfZW50ZXIoKTsKKwlzcGluX2xvY2soJmlycV9jb250cm9sbGVyX2xvY2spOworCWRlc2MtPmhhbmRsZShpcnEsIGRlc2MsIHJlZ3MpOworCisJLyoKKwkgKiBOb3cgcmUtcnVuIGFueSBwZW5kaW5nIGludGVycnVwdHMuCisJICovCisJaWYgKCFsaXN0X2VtcHR5KCZpcnFfcGVuZGluZykpCisJCWRvX3BlbmRpbmdfaXJxcyhyZWdzKTsKKworCWlycV9maW5pc2goaXJxKTsKKworCXNwaW5fdW5sb2NrKCZpcnFfY29udHJvbGxlcl9sb2NrKTsKKwlpcnFfZXhpdCgpOworfQorCit2b2lkIF9fc2V0X2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIGlycV9oYW5kbGVyX3QgaGFuZGxlLCBpbnQgaXNfY2hhaW5lZCkKK3sKKwlzdHJ1Y3QgaXJxZGVzYyAqZGVzYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGlycSA+PSBOUl9JUlFTKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVHJ5aW5nIHRvIGluc3RhbGwgaGFuZGxlciBmb3IgSVJRJWRcbiIsIGlycSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaGFuZGxlID09IE5VTEwpCisJCWhhbmRsZSA9IGRvX2JhZF9JUlE7CisKKwlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisKKwlpZiAoaXNfY2hhaW5lZCAmJiBkZXNjLT5jaGlwID09ICZiYWRfY2hpcCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVHJ5aW5nIHRvIGluc3RhbGwgY2hhaW5lZCBoYW5kbGVyIGZvciBJUlElZFxuIiwgaXJxKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7CisJaWYgKGhhbmRsZSA9PSBkb19iYWRfSVJRKSB7CisJCWRlc2MtPmNoaXAtPm1hc2soaXJxKTsKKwkJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CisJCWRlc2MtPmRpc2FibGVfZGVwdGggPSAxOworCX0KKwlkZXNjLT5oYW5kbGUgPSBoYW5kbGU7CisJaWYgKGhhbmRsZSAhPSBkb19iYWRfSVJRICYmIGlzX2NoYWluZWQpIHsKKwkJZGVzYy0+dmFsaWQgPSAwOworCQlkZXNjLT5wcm9iZV9vayA9IDA7CisJCWRlc2MtPmRpc2FibGVfZGVwdGggPSAwOworCQlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2NvbnRyb2xsZXJfbG9jaywgZmxhZ3MpOworfQorCit2b2lkIHNldF9pcnFfY2hpcCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxY2hpcCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaXJxZGVzYyAqZGVzYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGlycSA+PSBOUl9JUlFTKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVHJ5aW5nIHRvIGluc3RhbGwgY2hpcCBmb3IgSVJRJWRcbiIsIGlycSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY2hpcCA9PSBOVUxMKQorCQljaGlwID0gJmJhZF9jaGlwOworCisJZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7CisJZGVzYy0+Y2hpcCA9IGNoaXA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2NvbnRyb2xsZXJfbG9jaywgZmxhZ3MpOworfQorCitpbnQgc2V0X2lycV90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXN0cnVjdCBpcnFkZXNjICpkZXNjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IC1FTlhJTzsKKworCWlmIChpcnEgPj0gTlJfSVJRUykgeworCQlwcmludGsoS0VSTl9FUlIgIlRyeWluZyB0byBzZXQgaXJxIHR5cGUgZm9yIElSUSVkXG4iLCBpcnEpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJaWYgKGRlc2MtPmNoaXAtPnR5cGUpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9jb250cm9sbGVyX2xvY2ssIGZsYWdzKTsKKwkJcmV0ID0gZGVzYy0+Y2hpcC0+dHlwZShpcnEsIHR5cGUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woc2V0X2lycV90eXBlKTsKKwordm9pZCBzZXRfaXJxX2ZsYWdzKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBpZmxhZ3MpCit7CisJc3RydWN0IGlycWRlc2MgKmRlc2M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChpcnEgPj0gTlJfSVJRUykgeworCQlwcmludGsoS0VSTl9FUlIgIlRyeWluZyB0byBzZXQgaXJxIGZsYWdzIGZvciBJUlElZFxuIiwgaXJxKTsKKwkJcmV0dXJuOworCX0KKworCWRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2NvbnRyb2xsZXJfbG9jaywgZmxhZ3MpOworCWRlc2MtPnZhbGlkID0gKGlmbGFncyAmIElSUUZfVkFMSUQpICE9IDA7CisJZGVzYy0+cHJvYmVfb2sgPSAoaWZsYWdzICYgSVJRRl9QUk9CRSkgIT0gMDsKKwlkZXNjLT5ub2F1dG9lbmFibGUgPSAoaWZsYWdzICYgSVJRRl9OT0FVVE9FTikgIT0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7Cit9CisKK2ludCBzZXR1cF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqbmV3KQoreworCWludCBzaGFyZWQgPSAwOworCXN0cnVjdCBpcnFhY3Rpb24gKm9sZCwgKipwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGlycWRlc2MgKmRlc2M7CisKKwkvKgorCSAqIFNvbWUgZHJpdmVycyBsaWtlIHNlcmlhbC5jIHVzZSByZXF1ZXN0X2lycSgpIGhlYXZpbHksCisJICogc28gd2UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBhCisJICogcnVubmluZyBzeXN0ZW0uCisJICovCisJaWYgKG5ldy0+ZmxhZ3MgJiBTQV9TQU1QTEVfUkFORE9NKSB7CisJCS8qCisJCSAqIFRoaXMgZnVuY3Rpb24gbWlnaHQgc2xlZXAsIHdlIHdhbnQgdG8gY2FsbCBpdCBmaXJzdCwKKwkJICogb3V0c2lkZSBvZiB0aGUgYXRvbWljIGJsb2NrLgorCQkgKiBZZXMsIHRoaXMgbWlnaHQgY2xlYXIgdGhlIGVudHJvcHkgcG9vbCBpZiB0aGUgd3JvbmcKKwkJICogZHJpdmVyIGlzIGF0dGVtcHRlZCB0byBiZSBsb2FkZWQsIHdpdGhvdXQgYWN0dWFsbHkKKwkJICogaW5zdGFsbGluZyBhIG5ldyBoYW5kbGVyLCBidXQgaXMgdGhpcyByZWFsbHkgYSBwcm9ibGVtLAorCQkgKiBvbmx5IHRoZSBzeXNhZG1pbiBpcyBhYmxlIHRvIGRvIHRoaXMuCisJCSAqLworCSAgICAgICAgcmFuZF9pbml0aWFsaXplX2lycShpcnEpOworCX0KKworCS8qCisJICogVGhlIGZvbGxvd2luZyBibG9jayBvZiBjb2RlIGhhcyB0byBiZSBleGVjdXRlZCBhdG9taWNhbGx5CisJICovCisJZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7CisJcCA9ICZkZXNjLT5hY3Rpb247CisJaWYgKChvbGQgPSAqcCkgIT0gTlVMTCkgeworCQkvKiBDYW4ndCBzaGFyZSBpbnRlcnJ1cHRzIHVubGVzcyBib3RoIGFncmVlIHRvICovCisJCWlmICghKG9sZC0+ZmxhZ3MgJiBuZXctPmZsYWdzICYgU0FfU0hJUlEpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisKKwkJLyogYWRkIG5ldyBpbnRlcnJ1cHQgYXQgZW5kIG9mIGlycSBxdWV1ZSAqLworCQlkbyB7CisJCQlwID0gJm9sZC0+bmV4dDsKKwkJCW9sZCA9ICpwOworCQl9IHdoaWxlIChvbGQpOworCQlzaGFyZWQgPSAxOworCX0KKworCSpwID0gbmV3OworCisJaWYgKCFzaGFyZWQpIHsKKyAJCWRlc2MtPnByb2JpbmcgPSAwOworCQlkZXNjLT5ydW5uaW5nID0gMDsKKwkJZGVzYy0+cGVuZGluZyA9IDA7CisJCWRlc2MtPmRpc2FibGVfZGVwdGggPSAxOworCQlpZiAoIWRlc2MtPm5vYXV0b2VuYWJsZSkgeworCQkJZGVzYy0+ZGlzYWJsZV9kZXB0aCA9IDA7CisJCQlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9jb250cm9sbGVyX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKglyZXF1ZXN0X2lycSAtIGFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lCisgKglAaXJxOiBJbnRlcnJ1cHQgbGluZSB0byBhbGxvY2F0ZQorICoJQGhhbmRsZXI6IEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBJUlEgb2NjdXJzCisgKglAaXJxZmxhZ3M6IEludGVycnVwdCB0eXBlIGZsYWdzCisgKglAZGV2bmFtZTogQW4gYXNjaWkgbmFtZSBmb3IgdGhlIGNsYWltaW5nIGRldmljZQorICoJQGRldl9pZDogQSBjb29raWUgcGFzc2VkIGJhY2sgdG8gdGhlIGhhbmRsZXIgZnVuY3Rpb24KKyAqCisgKglUaGlzIGNhbGwgYWxsb2NhdGVzIGludGVycnVwdCByZXNvdXJjZXMgYW5kIGVuYWJsZXMgdGhlCisgKglpbnRlcnJ1cHQgbGluZSBhbmQgSVJRIGhhbmRsaW5nLiBGcm9tIHRoZSBwb2ludCB0aGlzCisgKgljYWxsIGlzIG1hZGUgeW91ciBoYW5kbGVyIGZ1bmN0aW9uIG1heSBiZSBpbnZva2VkLiBTaW5jZQorICoJeW91ciBoYW5kbGVyIGZ1bmN0aW9uIG11c3QgY2xlYXIgYW55IGludGVycnVwdCB0aGUgYm9hcmQKKyAqCXJhaXNlcywgeW91IG11c3QgdGFrZSBjYXJlIGJvdGggdG8gaW5pdGlhbGlzZSB5b3VyIGhhcmR3YXJlCisgKglhbmQgdG8gc2V0IHVwIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpbiB0aGUgcmlnaHQgb3JkZXIuCisgKgorICoJRGV2X2lkIG11c3QgYmUgZ2xvYmFsbHkgdW5pcXVlLiBOb3JtYWxseSB0aGUgYWRkcmVzcyBvZiB0aGUKKyAqCWRldmljZSBkYXRhIHN0cnVjdHVyZSBpcyB1c2VkIGFzIHRoZSBjb29raWUuIFNpbmNlIHRoZSBoYW5kbGVyCisgKglyZWNlaXZlcyB0aGlzIHZhbHVlIGl0IG1ha2VzIHNlbnNlIHRvIHVzZSBpdC4KKyAqCisgKglJZiB5b3VyIGludGVycnVwdCBpcyBzaGFyZWQgeW91IG11c3QgcGFzcyBhIG5vbiBOVUxMIGRldl9pZAorICoJYXMgdGhpcyBpcyByZXF1aXJlZCB3aGVuIGZyZWVpbmcgdGhlIGludGVycnVwdC4KKyAqCisgKglGbGFnczoKKyAqCisgKglTQV9TSElSUQkJSW50ZXJydXB0IGlzIHNoYXJlZAorICoKKyAqCVNBX0lOVEVSUlVQVAkJRGlzYWJsZSBsb2NhbCBpbnRlcnJ1cHRzIHdoaWxlIHByb2Nlc3NpbmcKKyAqCisgKglTQV9TQU1QTEVfUkFORE9NCVRoZSBpbnRlcnJ1cHQgY2FuIGJlIHVzZWQgZm9yIGVudHJvcHkKKyAqCisgKi8KK2ludCByZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJIHVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzLCBjb25zdCBjaGFyICogZGV2bmFtZSwgdm9pZCAqZGV2X2lkKQoreworCXVuc2lnbmVkIGxvbmcgcmV0dmFsOworCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKKworCWlmIChpcnEgPj0gTlJfSVJRUyB8fCAhaXJxX2Rlc2NbaXJxXS52YWxpZCB8fCAhaGFuZGxlciB8fAorCSAgICAoaXJxX2ZsYWdzICYgU0FfU0hJUlEgJiYgIWRldl9pZCkpCisJCXJldHVybiAtRUlOVkFMOworCisJYWN0aW9uID0gKHN0cnVjdCBpcnFhY3Rpb24gKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXJxYWN0aW9uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3Rpb24pCisJCXJldHVybiAtRU5PTUVNOworCisJYWN0aW9uLT5oYW5kbGVyID0gaGFuZGxlcjsKKwlhY3Rpb24tPmZsYWdzID0gaXJxX2ZsYWdzOworCWNwdXNfY2xlYXIoYWN0aW9uLT5tYXNrKTsKKwlhY3Rpb24tPm5hbWUgPSBkZXZuYW1lOworCWFjdGlvbi0+bmV4dCA9IE5VTEw7CisJYWN0aW9uLT5kZXZfaWQgPSBkZXZfaWQ7CisKKwlyZXR2YWwgPSBzZXR1cF9pcnEoaXJxLCBhY3Rpb24pOworCisJaWYgKHJldHZhbCkKKwkJa2ZyZWUoYWN0aW9uKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitFWFBPUlRfU1lNQk9MKHJlcXVlc3RfaXJxKTsKKworLyoqCisgKglmcmVlX2lycSAtIGZyZWUgYW4gaW50ZXJydXB0CisgKglAaXJxOiBJbnRlcnJ1cHQgbGluZSB0byBmcmVlCisgKglAZGV2X2lkOiBEZXZpY2UgaWRlbnRpdHkgdG8gZnJlZQorICoKKyAqCVJlbW92ZSBhbiBpbnRlcnJ1cHQgaGFuZGxlci4gVGhlIGhhbmRsZXIgaXMgcmVtb3ZlZCBhbmQgaWYgdGhlCisgKglpbnRlcnJ1cHQgbGluZSBpcyBubyBsb25nZXIgaW4gdXNlIGJ5IGFueSBkcml2ZXIgaXQgaXMgZGlzYWJsZWQuCisgKglPbiBhIHNoYXJlZCBJUlEgdGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgaW50ZXJydXB0IGlzIGRpc2FibGVkCisgKglvbiB0aGUgY2FyZCBpdCBkcml2ZXMgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKglUaGlzIGZ1bmN0aW9uIG11c3Qgbm90IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LgorICovCit2b2lkIGZyZWVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgaXJxYWN0aW9uICogYWN0aW9uLCAqKnA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChpcnEgPj0gTlJfSVJRUyB8fCAhaXJxX2Rlc2NbaXJxXS52YWxpZCkgeworCQlwcmludGsoS0VSTl9FUlIgIlRyeWluZyB0byBmcmVlIElSUSVkXG4iLGlycSk7CisJCWR1bXBfc3RhY2soKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7CisJZm9yIChwID0gJmlycV9kZXNjW2lycV0uYWN0aW9uOyAoYWN0aW9uID0gKnApICE9IE5VTEw7IHAgPSAmYWN0aW9uLT5uZXh0KSB7CisJCWlmIChhY3Rpb24tPmRldl9pZCAhPSBkZXZfaWQpCisJCQljb250aW51ZTsKKworCSAgICAJLyogRm91bmQgaXQgLSBub3cgZnJlZSBpdCAqLworCQkqcCA9IGFjdGlvbi0+bmV4dDsKKwkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9jb250cm9sbGVyX2xvY2ssIGZsYWdzKTsKKworCWlmICghYWN0aW9uKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVHJ5aW5nIHRvIGZyZWUgZnJlZSBJUlElZFxuIixpcnEpOworCQlkdW1wX3N0YWNrKCk7CisJfSBlbHNlIHsKKwkJc3luY2hyb25pemVfaXJxKGlycSk7CisJCWtmcmVlKGFjdGlvbik7CisJfQorfQorCitFWFBPUlRfU1lNQk9MKGZyZWVfaXJxKTsKKworc3RhdGljIERFQ0xBUkVfTVVURVgocHJvYmVfc2VtKTsKKworLyogU3RhcnQgdGhlIGludGVycnVwdCBwcm9iaW5nLiAgVW5saWtlIG90aGVyIGFyY2hpdGVjdHVyZXMsCisgKiB3ZSBkb24ndCByZXR1cm4gYSBtYXNrIG9mIGludGVycnVwdHMgZnJvbSBwcm9iZV9pcnFfb24sCisgKiBidXQgcmV0dXJuIHRoZSBudW1iZXIgb2YgaW50ZXJydXB0cyBlbmFibGVkIGZvciB0aGUgcHJvYmUuCisgKiBUaGUgaW50ZXJydXB0cyB3aGljaCBoYXZlIGJlZW4gZW5hYmxlZCBmb3IgcHJvYmluZyBpcworICogaW5zdGVhZCByZWNvcmRlZCBpbiB0aGUgaXJxX2Rlc2Mgc3RydWN0dXJlLgorICovCit1bnNpZ25lZCBsb25nIHByb2JlX2lycV9vbih2b2lkKQoreworCXVuc2lnbmVkIGludCBpLCBpcnFzID0gMDsKKwl1bnNpZ25lZCBsb25nIGRlbGF5OworCisJZG93bigmcHJvYmVfc2VtKTsKKworCS8qCisJICogZmlyc3Qgc25hZmZsZSB1cCBhbnkgdW5hc3NpZ25lZCBidXQKKwkgKiBwcm9iZS1hYmxlIGludGVycnVwdHMKKwkgKi8KKwlzcGluX2xvY2tfaXJxKCZpcnFfY29udHJvbGxlcl9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKSB7CisJCWlmICghaXJxX2Rlc2NbaV0ucHJvYmVfb2sgfHwgaXJxX2Rlc2NbaV0uYWN0aW9uKQorCQkJY29udGludWU7CisKKwkJaXJxX2Rlc2NbaV0ucHJvYmluZyA9IDE7CisJCWlycV9kZXNjW2ldLnRyaWdnZXJlZCA9IDA7CisJCWlmIChpcnFfZGVzY1tpXS5jaGlwLT50eXBlKQorCQkJaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZShpLCBJUlFUX1BST0JFKTsKKwkJaXJxX2Rlc2NbaV0uY2hpcC0+dW5tYXNrKGkpOworCQlpcnFzICs9IDE7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmaXJxX2NvbnRyb2xsZXJfbG9jayk7CisKKwkvKgorCSAqIHdhaXQgZm9yIHNwdXJpb3VzIGludGVycnVwdHMgdG8gbWFzayB0aGVtc2VsdmVzIG91dCBhZ2FpbgorCSAqLworCWZvciAoZGVsYXkgPSBqaWZmaWVzICsgSFovMTA7IHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlbGF5KTsgKQorCQkvKiBtaW4gMTAwbXMgZGVsYXkgKi87CisKKwkvKgorCSAqIG5vdyBmaWx0ZXIgb3V0IGFueSBvYnZpb3VzbHkgc3B1cmlvdXMgaW50ZXJydXB0cworCSAqLworCXNwaW5fbG9ja19pcnEoJmlycV9jb250cm9sbGVyX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspIHsKKwkJaWYgKGlycV9kZXNjW2ldLnByb2JpbmcgJiYgaXJxX2Rlc2NbaV0udHJpZ2dlcmVkKSB7CisJCQlpcnFfZGVzY1tpXS5wcm9iaW5nID0gMDsKKwkJCWlycXMgLT0gMTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnEoJmlycV9jb250cm9sbGVyX2xvY2spOworCisJcmV0dXJuIGlycXM7Cit9CisKK0VYUE9SVF9TWU1CT0wocHJvYmVfaXJxX29uKTsKKwordW5zaWduZWQgaW50IHByb2JlX2lycV9tYXNrKHVuc2lnbmVkIGxvbmcgaXJxcykKK3sKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDAsIGk7CisKKwlzcGluX2xvY2tfaXJxKCZpcnFfY29udHJvbGxlcl9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTYgJiYgaSA8IE5SX0lSUVM7IGkrKykKKwkJaWYgKGlycV9kZXNjW2ldLnByb2JpbmcgJiYgaXJxX2Rlc2NbaV0udHJpZ2dlcmVkKQorCQkJbWFzayB8PSAxIDw8IGk7CisJc3Bpbl91bmxvY2tfaXJxKCZpcnFfY29udHJvbGxlcl9sb2NrKTsKKworCXVwKCZwcm9iZV9zZW0pOworCisJcmV0dXJuIG1hc2s7Cit9CitFWFBPUlRfU1lNQk9MKHByb2JlX2lycV9tYXNrKTsKKworLyoKKyAqIFBvc3NpYmxlIHJldHVybiB2YWx1ZXM6CisgKiAgPj0gMCAtIGludGVycnVwdCBudW1iZXIKKyAqICAgIC0xIC0gbm8gaW50ZXJydXB0L21hbnkgaW50ZXJydXB0cworICovCitpbnQgcHJvYmVfaXJxX29mZih1bnNpZ25lZCBsb25nIGlycXMpCit7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGlycV9mb3VuZCA9IE5PX0lSUTsKKworCS8qCisJICogbG9vayBhdCB0aGUgaW50ZXJydXB0cywgYW5kIGZpbmQgZXhhY3RseSBvbmUKKwkgKiB0aGF0IHdlIHdlcmUgcHJvYmluZyBoYXMgYmVlbiB0cmlnZ2VyZWQKKwkgKi8KKwlzcGluX2xvY2tfaXJxKCZpcnFfY29udHJvbGxlcl9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKSB7CisJCWlmIChpcnFfZGVzY1tpXS5wcm9iaW5nICYmCisJCSAgICBpcnFfZGVzY1tpXS50cmlnZ2VyZWQpIHsKKwkJCWlmIChpcnFfZm91bmQgIT0gTk9fSVJRKSB7CisJCQkJaXJxX2ZvdW5kID0gTk9fSVJROworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJaXJxX2ZvdW5kID0gaTsKKwkJfQorCX0KKworCWlmIChpcnFfZm91bmQgPT0gLTEpCisJCWlycV9mb3VuZCA9IE5PX0lSUTsKK291dDoKKwlzcGluX3VubG9ja19pcnEoJmlycV9jb250cm9sbGVyX2xvY2spOworCisJdXAoJnByb2JlX3NlbSk7CisKKwlyZXR1cm4gaXJxX2ZvdW5kOworfQorCitFWFBPUlRfU1lNQk9MKHByb2JlX2lycV9vZmYpOworCisjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIHZvaWQgcm91dGVfaXJxKHN0cnVjdCBpcnFkZXNjICpkZXNjLCB1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgY3B1KQoreworCXByX2RlYnVnKCJJUlEldTogbW92aW5nIGZyb20gY3B1JXUgdG8gY3B1JXVcbiIsIGlycSwgZGVzYy0+Y3B1LCBjcHUpOworCisJc3Bpbl9sb2NrX2lycSgmaXJxX2NvbnRyb2xsZXJfbG9jayk7CisJZGVzYy0+Y3B1ID0gY3B1OworCWRlc2MtPmNoaXAtPnNldF9jcHUoZGVzYywgaXJxLCBjcHUpOworCXNwaW5fdW5sb2NrX2lycSgmaXJxX2NvbnRyb2xsZXJfbG9jayk7Cit9CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworc3RhdGljIGludAoraXJxX2FmZmluaXR5X3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAorCQkgICAgICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlycWRlc2MgKmRlc2MgPSBpcnFfZGVzYyArICgoaW50KWRhdGEpOworCWludCBsZW4gPSBjcHVtYXNrX3NjbnByaW50ZihwYWdlLCBjb3VudCwgZGVzYy0+YWZmaW5pdHkpOworCisJaWYgKGNvdW50IC0gbGVuIDwgMikKKwkJcmV0dXJuIC1FSU5WQUw7CisJcGFnZVtsZW4rK10gPSAnXG4nOworCXBhZ2VbbGVuXSA9ICdcMCc7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50CitpcnFfYWZmaW5pdHlfd3JpdGVfcHJvYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCXVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCit7CisJdW5zaWduZWQgaW50IGlycSA9ICh1bnNpZ25lZCBpbnQpZGF0YTsKKwlzdHJ1Y3QgaXJxZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCWNwdW1hc2tfdCBhZmZpbml0eSwgdG1wOworCWludCByZXQgPSAtRUlPOworCisJaWYgKCFkZXNjLT5jaGlwLT5zZXRfY3B1KQorCQlnb3RvIG91dDsKKworCXJldCA9IGNwdW1hc2tfcGFyc2UoYnVmZmVyLCBjb3VudCwgYWZmaW5pdHkpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJY3B1c19hbmQodG1wLCBhZmZpbml0eSwgY3B1X29ubGluZV9tYXApOworCWlmIChjcHVzX2VtcHR5KHRtcCkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJZGVzYy0+YWZmaW5pdHkgPSBhZmZpbml0eTsKKwlyb3V0ZV9pcnEoZGVzYywgaXJxLCBmaXJzdF9jcHUodG1wKSk7CisJcmV0ID0gY291bnQ7CisKKyBvdXQ6CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorI2VuZGlmCisKK3ZvaWQgX19pbml0IGluaXRfaXJxX3Byb2Modm9pZCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpCisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkaXI7CisJaW50IGlycTsKKworCWRpciA9IHByb2NfbWtkaXIoImlycSIsIDApOworCWlmICghZGlyKQorCQlyZXR1cm47CisKKwlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKSB7CisJCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7CisJCXN0cnVjdCBpcnFkZXNjICpkZXNjOworCQljaGFyIG5hbWVbMTZdOworCisJCWRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwkJbWVtc2V0KG5hbWUsIDAsIHNpemVvZihuYW1lKSk7CisJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSAtIDEsICIldSIsIGlycSk7CisKKwkJZGVzYy0+cHJvY2RpciA9IHByb2NfbWtkaXIobmFtZSwgZGlyKTsKKwkJaWYgKCFkZXNjLT5wcm9jZGlyKQorCQkJY29udGludWU7CisKKwkJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgic21wX2FmZmluaXR5IiwgMDYwMCwgZGVzYy0+cHJvY2Rpcik7CisJCWlmIChlbnRyeSkgeworCQkJZW50cnktPm5saW5rID0gMTsKKwkJCWVudHJ5LT5kYXRhID0gKHZvaWQgKilpcnE7CisJCQllbnRyeS0+cmVhZF9wcm9jID0gaXJxX2FmZmluaXR5X3JlYWRfcHJvYzsKKwkJCWVudHJ5LT53cml0ZV9wcm9jID0gaXJxX2FmZmluaXR5X3dyaXRlX3Byb2M7CisJCX0KKwl9CisjZW5kaWYKK30KKwordm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCkKK3sKKwlzdHJ1Y3QgaXJxZGVzYyAqZGVzYzsKKwlleHRlcm4gdm9pZCBpbml0X2RtYSh2b2lkKTsKKwlpbnQgaXJxOworCisjaWZkZWYgQ09ORklHX1NNUAorCWJhZF9pcnFfZGVzYy5hZmZpbml0eSA9IENQVV9NQVNLX0FMTDsKKwliYWRfaXJxX2Rlc2MuY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworI2VuZGlmCisKKwlmb3IgKGlycSA9IDAsIGRlc2MgPSBpcnFfZGVzYzsgaXJxIDwgTlJfSVJRUzsgaXJxKyssIGRlc2MrKykgeworCQkqZGVzYyA9IGJhZF9pcnFfZGVzYzsKKwkJSU5JVF9MSVNUX0hFQUQoJmRlc2MtPnBlbmQpOworCX0KKworCWluaXRfYXJjaF9pcnEoKTsKKwlpbml0X2RtYSgpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBub2lycWRlYnVnX3NldHVwKGNoYXIgKnN0cikKK3sKKwlub2lycWRlYnVnID0gMTsKKwlyZXR1cm4gMTsKK30KKworX19zZXR1cCgibm9pcnFkZWJ1ZyIsIG5vaXJxZGVidWdfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2lzYS5jIGIvYXJjaC9hcm0va2VybmVsL2lzYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NWMzZTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvaXNhLmMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvaXNhLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5IFBoaWwgQmx1bmRlbGwKKyAqCisgKiAgSVNBIHNoYXJlZCBtZW1vcnkgYW5kIEkvTyBwb3J0IHN1cHBvcnQKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKiAKKyAqIE5vdGhpbmcgYWJvdXQgdGhpcyBpcyBhY3R1YWxseSBBUk0gc3BlY2lmaWMuICBPbmUgZGF5IHdlIGNvdWxkIG1vdmUKKyAqIGl0IGludG8ga2VybmVsL3Jlc291cmNlLmMgb3Igc29tZSBwbGFjZSBsaWtlIHRoYXQuICAKKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworc3RhdGljIHVuc2lnbmVkIGludCBpc2FfbWVtYmFzZSwgaXNhX3BvcnRiYXNlLCBpc2FfcG9ydHNoaWZ0OworCitzdGF0aWMgY3RsX3RhYmxlIGN0bF9pc2FfdmFyc1s0XSA9IHsKKwl7QlVTX0lTQV9NRU1fQkFTRSwgIm1lbWJhc2UiLCAmaXNhX21lbWJhc2UsIAorCSBzaXplb2YoaXNhX21lbWJhc2UpLCAwNDQ0LCBOVUxMLCAmcHJvY19kb2ludHZlY30sCisJe0JVU19JU0FfUE9SVF9CQVNFLCAicG9ydGJhc2UiLCAmaXNhX3BvcnRiYXNlLCAKKwkgc2l6ZW9mKGlzYV9wb3J0YmFzZSksIDA0NDQsIE5VTEwsICZwcm9jX2RvaW50dmVjfSwKKwl7QlVTX0lTQV9QT1JUX1NISUZULCAicG9ydHNoaWZ0IiwgJmlzYV9wb3J0c2hpZnQsIAorCSBzaXplb2YoaXNhX3BvcnRzaGlmdCksIDA0NDQsIE5VTEwsICZwcm9jX2RvaW50dmVjfSwKKwl7MH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaXNhX3N5c2N0bF9oZWFkZXI7CisKK3N0YXRpYyBjdGxfdGFibGUgY3RsX2lzYVsyXSA9IHt7Q1RMX0JVU19JU0EsICJpc2EiLCBOVUxMLCAwLCAwNTU1LCBjdGxfaXNhX3ZhcnN9LAorCQkJICAgICAgIHswfX07CitzdGF0aWMgY3RsX3RhYmxlIGN0bF9idXNbMl0gPSB7e0NUTF9CVVMsICJidXMiLCBOVUxMLCAwLCAwNTU1LCBjdGxfaXNhfSwKKwkJCSAgICAgICB7MH19OworCit2b2lkIF9faW5pdAorcmVnaXN0ZXJfaXNhX3BvcnRzKHVuc2lnbmVkIGludCBtZW1iYXNlLCB1bnNpZ25lZCBpbnQgcG9ydGJhc2UsIHVuc2lnbmVkIGludCBwb3J0c2hpZnQpCit7CisJaXNhX21lbWJhc2UgPSBtZW1iYXNlOworCWlzYV9wb3J0YmFzZSA9IHBvcnRiYXNlOworCWlzYV9wb3J0c2hpZnQgPSBwb3J0c2hpZnQ7CisJaXNhX3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUoY3RsX2J1cywgMCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaXdtbXh0LlMgYi9hcmNoL2FybS9rZXJuZWwvaXdtbXh0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY3NGUyNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9pd21teHQuUwpAQCAtMCwwICsxLDMyMCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvaXdtbXh0LlMKKyAqCisgKiAgWFNjYWxlIGlXTU1YdCAoQ29uY2FuKSBjb250ZXh0IHN3aXRjaGluZyBhbmQgaGFuZGxpbmcKKyAqCisgKiAgSW5pdGlhbCBjb2RlOgorICogIENvcHlyaWdodCAoYykgMjAwMywgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiAgRnVsbCBsYXp5IHN3aXRjaGluZyBzdXBwb3J0LCBvcHRpbWl6YXRpb25zIGFuZCBtb3JlLCBieSBOaWNvbGFzIFBpdHJlCisqICAgQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQsIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS9jb25zdGFudHMuaD4KKworI2RlZmluZSBNTVhfV1IwCQkgCSgweDAwKQorI2RlZmluZSBNTVhfV1IxCQkgCSgweDA4KQorI2RlZmluZSBNTVhfV1IyCQkgCSgweDEwKQorI2RlZmluZSBNTVhfV1IzCQkJKDB4MTgpCisjZGVmaW5lIE1NWF9XUjQJCSAJKDB4MjApCisjZGVmaW5lIE1NWF9XUjUJCSAJKDB4MjgpCisjZGVmaW5lIE1NWF9XUjYJCSAJKDB4MzApCisjZGVmaW5lIE1NWF9XUjcJCSAJKDB4MzgpCisjZGVmaW5lIE1NWF9XUjgJCSAJKDB4NDApCisjZGVmaW5lIE1NWF9XUjkJCSAJKDB4NDgpCisjZGVmaW5lIE1NWF9XUjEwCQkoMHg1MCkKKyNkZWZpbmUgTU1YX1dSMTEJCSgweDU4KQorI2RlZmluZSBNTVhfV1IxMgkJKDB4NjApCisjZGVmaW5lIE1NWF9XUjEzCQkoMHg2OCkKKyNkZWZpbmUgTU1YX1dSMTQJCSgweDcwKQorI2RlZmluZSBNTVhfV1IxNQkJKDB4NzgpCisjZGVmaW5lIE1NWF9XQ1NTRgkJKDB4ODApCisjZGVmaW5lIE1NWF9XQ0FTRgkJKDB4ODQpCisjZGVmaW5lIE1NWF9XQ0dSMAkJKDB4ODgpCisjZGVmaW5lIE1NWF9XQ0dSMQkJKDB4OEMpCisjZGVmaW5lIE1NWF9XQ0dSMgkJKDB4OTApCisjZGVmaW5lIE1NWF9XQ0dSMwkJKDB4OTQpCisKKyNkZWZpbmUgTU1YX1NJWkUJCSgweDk4KQorCisJLnRleHQKKworLyoKKyAqIExhenkgc3dpdGNoaW5nIG9mIENvbmNhbiBjb3Byb2Nlc3NvciBjb250ZXh0CisgKgorICogcjEwID0gc3RydWN0IHRocmVhZF9pbmZvIHBvaW50ZXIKKyAqIHI5ICA9IHJldF9mcm9tX2V4Y2VwdGlvbgorICogbHIgID0gdW5kZWZpbmVkIGluc3RyIGV4aXQKKyAqCisgKiBjYWxsZWQgZnJvbSBwcmVmZXRjaCBleGNlcHRpb24gaGFuZGxlciB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQKKyAqLworCitFTlRSWShpd21teHRfdGFza19lbmFibGUpCisKKwltcmMJcDE1LCAwLCByMiwgYzE1LCBjMSwgMAorCXRzdAlyMiwgIzB4MwkJCUAgQ1AwIGFuZCBDUDEgYWNjZXNzaWJsZT8KKwltb3ZuZQlwYywgbHIJCQkJQCBpZiBzbyBubyBidXNpbmVzcyBoZXJlCisJb3JyCXIyLCByMiwgIzB4MwkJCUAgZW5hYmxlIGFjY2VzcyB0byBDUDAgYW5kIENQMQorCW1jcglwMTUsIDAsIHIyLCBjMTUsIGMxLCAwCisKKwlsZHIJcjMsID1jb25jYW5fb3duZXIKKwlhZGQJcjAsIHIxMCwgI1RJX0lXTU1YVF9TVEFURQlAIGdldCB0YXNrIENvbmNhbiBzYXZlIGFyZWEKKwlsZHIJcjIsIFtzcCwgIzYwXQkJCUAgY3VycmVudCB0YXNrIHBjIHZhbHVlCisJbGRyCXIxLCBbcjNdCQkJQCBnZXQgY3VycmVudCBDb25jYW4gb3duZXIKKwlzdHIJcjAsIFtyM10JCQlAIHRoaXMgdGFzayBub3cgb3ducyBDb25jYW4gcmVncworCXN1YglyMiwgcjIsICM0CQkJQCBhZGp1c3QgcGMgYmFjaworCXN0cglyMiwgW3NwLCAjNjBdCisKKwltcmMJcDE1LCAwLCByMiwgYzIsIGMwLCAwCisJbW92CXIyLCByMgkJCQlAIGNwd2FpdAorCisJdGVxCXIxLCAjMAkJCQlAIHRlc3QgZm9yIGxhc3Qgb3duZXJzaGlwCisJbW92CWxyLCByOQkJCQlAIG5vcm1hbCBleGl0IGZyb20gZXhjZXB0aW9uCisJYmVxCWNvbmNhbl9sb2FkCQkJQCBubyBvd25lciwgc2tpcCBzYXZlCisKK2NvbmNhbl9zYXZlOgorCisJdG1yYwlyMiwgd0NvbgorCisJQCBDVVA/IHdDeAorCXRzdAlyMiwgIzB4MQorCWJlcSAJMWYKKworY29uY2FuX2R1bXA6CisKKwl3c3Rydwl3Q1NTRiwgW3IxLCAjTU1YX1dDU1NGXQorCXdzdHJ3CXdDQVNGLCBbcjEsICNNTVhfV0NBU0ZdCisJd3N0cncJd0NHUjAsIFtyMSwgI01NWF9XQ0dSMF0KKwl3c3Rydwl3Q0dSMSwgW3IxLCAjTU1YX1dDR1IxXQorCXdzdHJ3CXdDR1IyLCBbcjEsICNNTVhfV0NHUjJdCisJd3N0cncJd0NHUjMsIFtyMSwgI01NWF9XQ0dSM10KKworMToJQCBNVVA/IHdSbgorCXRzdAlyMiwgIzB4MgorCWJlcQkyZgorCisJd3N0cmQJd1IwLCAgW3IxLCAjTU1YX1dSMF0KKwl3c3RyZAl3UjEsICBbcjEsICNNTVhfV1IxXQorCXdzdHJkCXdSMiwgIFtyMSwgI01NWF9XUjJdCisJd3N0cmQJd1IzLCAgW3IxLCAjTU1YX1dSM10KKwl3c3RyZAl3UjQsICBbcjEsICNNTVhfV1I0XQorCXdzdHJkCXdSNSwgIFtyMSwgI01NWF9XUjVdCisJd3N0cmQJd1I2LCAgW3IxLCAjTU1YX1dSNl0KKwl3c3RyZAl3UjcsICBbcjEsICNNTVhfV1I3XQorCXdzdHJkCXdSOCwgIFtyMSwgI01NWF9XUjhdCisJd3N0cmQJd1I5LCAgW3IxLCAjTU1YX1dSOV0KKwl3c3RyZAl3UjEwLCBbcjEsICNNTVhfV1IxMF0KKwl3c3RyZAl3UjExLCBbcjEsICNNTVhfV1IxMV0KKwl3c3RyZAl3UjEyLCBbcjEsICNNTVhfV1IxMl0KKwl3c3RyZAl3UjEzLCBbcjEsICNNTVhfV1IxM10KKwl3c3RyZAl3UjE0LCBbcjEsICNNTVhfV1IxNF0KKwl3c3RyZAl3UjE1LCBbcjEsICNNTVhfV1IxNV0KKworMjoJdGVxCXIwLCAjMAkJCQlAIGFueXRoaW5nIHRvIGxvYWQ/CisJbW92ZXEJcGMsIGxyCisKK2NvbmNhbl9sb2FkOgorCisJQCBMb2FkIHdSbgorCXdsZHJkCXdSMCwgIFtyMCwgI01NWF9XUjBdCisJd2xkcmQJd1IxLCAgW3IwLCAjTU1YX1dSMV0KKwl3bGRyZAl3UjIsICBbcjAsICNNTVhfV1IyXQorCXdsZHJkCXdSMywgIFtyMCwgI01NWF9XUjNdCisJd2xkcmQJd1I0LCAgW3IwLCAjTU1YX1dSNF0KKwl3bGRyZAl3UjUsICBbcjAsICNNTVhfV1I1XQorCXdsZHJkCXdSNiwgIFtyMCwgI01NWF9XUjZdCisJd2xkcmQJd1I3LCAgW3IwLCAjTU1YX1dSN10KKwl3bGRyZAl3UjgsICBbcjAsICNNTVhfV1I4XQorCXdsZHJkCXdSOSwgIFtyMCwgI01NWF9XUjldCisJd2xkcmQJd1IxMCwgW3IwLCAjTU1YX1dSMTBdCisJd2xkcmQJd1IxMSwgW3IwLCAjTU1YX1dSMTFdCisJd2xkcmQJd1IxMiwgW3IwLCAjTU1YX1dSMTJdCisJd2xkcmQJd1IxMywgW3IwLCAjTU1YX1dSMTNdCisJd2xkcmQJd1IxNCwgW3IwLCAjTU1YX1dSMTRdCisJd2xkcmQJd1IxNSwgW3IwLCAjTU1YX1dSMTVdCisKKwlAIExvYWQgd0N4CisJd2xkcncJd0NTU0YsIFtyMCwgI01NWF9XQ1NTRl0KKwl3bGRydwl3Q0FTRiwgW3IwLCAjTU1YX1dDQVNGXQorCXdsZHJ3CXdDR1IwLCBbcjAsICNNTVhfV0NHUjBdCisJd2xkcncJd0NHUjEsIFtyMCwgI01NWF9XQ0dSMV0KKwl3bGRydwl3Q0dSMiwgW3IwLCAjTU1YX1dDR1IyXQorCXdsZHJ3CXdDR1IzLCBbcjAsICNNTVhfV0NHUjNdCisKKwlAIGNsZWFyIENVUC9NVVAgKG9ubHkgaWYgcjEgIT0gMCkKKwl0ZXEJcjEsICMwCisJbW92IAlyMiwgIzAKKwltb3ZlcQlwYywgbHIKKwl0bWNyCXdDb24sIHIyCisJbW92CXBjLCBscgorCisvKgorICogQmFjayB1cCBDb25jYW4gcmVncyB0byBzYXZlIGFyZWEgYW5kIGRpc2FibGUgYWNjZXNzIHRvIHRoZW0KKyAqIChtYWlubHkgZm9yIGdkYiBvciBzbGVlcCBtb2RlIHVzYWdlKQorICoKKyAqIHIwID0gc3RydWN0IHRocmVhZF9pbmZvIHBvaW50ZXIgb2YgdGFyZ2V0IHRhc2sgb3IgTlVMTCBmb3IgYW55CisgKi8KKworRU5UUlkoaXdtbXh0X3Rhc2tfZGlzYWJsZSkKKworCXN0bWZkCXNwISwge3I0LCBscn0KKworCW1ycwlpcCwgY3BzcgorCW9ycglyMiwgaXAsICNQU1JfSV9CSVQJCUAgZGlzYWJsZSBpbnRlcnJ1cHRzCisJbXNyCWNwc3JfYywgcjIKKworCWxkcglyMywgPWNvbmNhbl9vd25lcgorCWFkZAlyMiwgcjAsICNUSV9JV01NWFRfU1RBVEUJQCBnZXQgdGFzayBDb25jYW4gc2F2ZSBhcmVhCisJbGRyCXIxLCBbcjNdCQkJQCBnZXQgY3VycmVudCBDb25jYW4gb3duZXIKKwl0ZXEJcjEsICMwCQkJCUAgYW55IGN1cnJlbnQgb3duZXI/CisJYmVxCTFmCQkJCUAgbm86IHF1aXQKKwl0ZXEJcjAsICMwCQkJCUAgYW55IG93bmVyPworCXRlcW5lCXIxLCByMgkJCQlAIG9yIHNwZWNpZmllZCBvbmU/CisJYm5lCTFmCQkJCUAgbm86IHF1aXQKKworCW1yYwlwMTUsIDAsIHI0LCBjMTUsIGMxLCAwCisJb3JyCXI0LCByNCwgIzB4MwkJCUAgZW5hYmxlIGFjY2VzcyB0byBDUDAgYW5kIENQMQorCW1jcglwMTUsIDAsIHI0LCBjMTUsIGMxLCAwCisJbW92CXIwLCAjMAkJCQlAIG5vdGhpbmcgdG8gbG9hZAorCXN0cglyMCwgW3IzXQkJCUAgbm8gbW9yZSBjdXJyZW50IG93bmVyCisJbXJjCXAxNSwgMCwgcjIsIGMyLCBjMCwgMAorCW1vdglyMiwgcjIJCQkJQCBjcHdhaXQKKwlibAljb25jYW5fc2F2ZQorCisJYmljCXI0LCByNCwgIzB4MwkJCUAgZGlzYWJsZSBhY2Nlc3MgdG8gQ1AwIGFuZCBDUDEKKwltY3IJcDE1LCAwLCByNCwgYzE1LCBjMSwgMAorCW1yYwlwMTUsIDAsIHIyLCBjMiwgYzAsIDAKKwltb3YJcjIsIHIyCQkJCUAgY3B3YWl0CisKKzE6CW1zcgljcHNyX2MsIGlwCQkJQCByZXN0b3JlIGludGVycnVwdCBtb2RlCisJbGRtZmQJc3AhLCB7cjQsIHBjfQorCisvKgorICogQ29weSBDb25jYW4gc3RhdGUgdG8gZ2l2ZW4gbWVtb3J5IGFkZHJlc3MKKyAqCisgKiByMCA9IHN0cnVjdCB0aHJlYWRfaW5mbyBwb2ludGVyIG9mIHRhcmdldCB0YXNrCisgKiByMSA9IG1lbW9yeSBhZGRyZXNzIHdoZXJlIHRvIHN0b3JlIENvbmNhbiBzdGF0ZQorICoKKyAqIHRoaXMgaXMgY2FsbGVkIG1haW5seSBpbiB0aGUgY3JlYXRpb24gb2Ygc2lnbmFsIHN0YWNrIGZyYW1lcworICovCisKK0VOVFJZKGl3bW14dF90YXNrX2NvcHkpCisKKwltcnMJaXAsIGNwc3IKKwlvcnIJcjIsIGlwLCAjUFNSX0lfQklUCQlAIGRpc2FibGUgaW50ZXJydXB0cworCW1zcgljcHNyX2MsIHIyCisKKwlsZHIJcjMsID1jb25jYW5fb3duZXIKKwlhZGQJcjIsIHIwLCAjVElfSVdNTVhUX1NUQVRFCUAgZ2V0IHRhc2sgQ29uY2FuIHNhdmUgYXJlYQorCWxkcglyMywgW3IzXQkJCUAgZ2V0IGN1cnJlbnQgQ29uY2FuIG93bmVyCisJdGVxCXIyLCByMwkJCQlAIGRvZXMgdGhpcyB0YXNrIG93biBpdC4uLgorCWJlcQkxZgorCisJQCBjdXJyZW50IENvbmNhbiB2YWx1ZXMgYXJlIGluIHRoZSB0YXNrIHNhdmUgYXJlYQorCW1zcgljcHNyX2MsIGlwCQkJQCByZXN0b3JlIGludGVycnVwdCBtb2RlCisJbW92CXIwLCByMQorCW1vdglyMSwgcjIKKwltb3YJcjIsICNNTVhfU0laRQorCWIJbWVtY3B5CisKKzE6CUAgdGhpcyB0YXNrIG93bnMgQ29uY2FuIHJlZ3MgLS0gZ3JhYiBhIGNvcHkgZnJvbSB0aGVyZQorCW1vdglyMCwgIzAJCQkJQCBub3RoaW5nIHRvIGxvYWQKKwltb3YJcjIsICMzCQkJCUAgc2F2ZSBhbGwgcmVncworCW1vdglyMywgbHIJCQkJQCBwcmVzZXJ2ZSByZXR1cm4gYWRkcmVzcworCWJsCWNvbmNhbl9kdW1wCisJbXNyCWNwc3JfYywgaXAJCQlAIHJlc3RvcmUgaW50ZXJydXB0IG1vZGUKKwltb3YJcGMsIHIzCisKKy8qCisgKiBSZXN0b3JlIENvbmNhbiBzdGF0ZSBmcm9tIGdpdmVuIG1lbW9yeSBhZGRyZXNzCisgKgorICogcjAgPSBzdHJ1Y3QgdGhyZWFkX2luZm8gcG9pbnRlciBvZiB0YXJnZXQgdGFzaworICogcjEgPSBtZW1vcnkgYWRkcmVzcyB3aGVyZSB0byBnZXQgQ29uY2FuIHN0YXRlIGZyb20KKyAqCisgKiB0aGlzIGlzIHVzZWQgdG8gcmVzdG9yZSBDb25jYW4gc3RhdGUgd2hlbiB1bndpbmRpbmcgYSBzaWduYWwgc3RhY2sgZnJhbWUKKyAqLworCitFTlRSWShpd21teHRfdGFza19yZXN0b3JlKQorCisJbXJzCWlwLCBjcHNyCisJb3JyCXIyLCBpcCwgI1BTUl9JX0JJVAkJQCBkaXNhYmxlIGludGVycnVwdHMKKwltc3IJY3Bzcl9jLCByMgorCisJbGRyCXIzLCA9Y29uY2FuX293bmVyCisJYWRkCXIyLCByMCwgI1RJX0lXTU1YVF9TVEFURQlAIGdldCB0YXNrIENvbmNhbiBzYXZlIGFyZWEKKwlsZHIJcjMsIFtyM10JCQlAIGdldCBjdXJyZW50IENvbmNhbiBvd25lcgorCWJpYwlyMiwgcjIsICMweDcJCQlAIDY0LWJpdCBhbGlnbm1lbnQKKwl0ZXEJcjIsIHIzCQkJCUAgZG9lcyB0aGlzIHRhc2sgb3duIGl0Li4uCisJYmVxCTFmCisKKwlAIHRoaXMgdGFzayBkb2Vzbid0IG93biBDb25jYW4gcmVncyAtLSB1c2UgaXRzIHNhdmUgYXJlYQorCW1zcgljcHNyX2MsIGlwCQkJQCByZXN0b3JlIGludGVycnVwdCBtb2RlCisJbW92CXIwLCByMgorCW1vdglyMiwgI01NWF9TSVpFCisJYgltZW1jcHkKKworMToJQCB0aGlzIHRhc2sgb3ducyBDb25jYW4gcmVncyAtLSBsb2FkIHRoZW0gZGlyZWN0bHkKKwltb3YJcjAsIHIxCisJbW92CXIxLCAjMAkJCQlAIGRvbid0IGNsZWFyIENVUC9NVVAKKwltb3YJcjMsIGxyCQkJCUAgcHJlc2VydmUgcmV0dXJuIGFkZHJlc3MKKwlibAljb25jYW5fbG9hZAorCW1zcgljcHNyX2MsIGlwCQkJQCByZXN0b3JlIGludGVycnVwdCBtb2RlCisJbW92CXBjLCByMworCisvKgorICogQ29uY2FuIGhhbmRsaW5nIG9uIHRhc2sgc3dpdGNoCisgKgorICogcjAgPSBwcmV2aW91cyB0YXNrX3N0cnVjdCBwb2ludGVyIChtdXN0IGJlIHByZXNlcnZlZCkKKyAqIHIxID0gcHJldmlvdXMgdGhyZWFkX2luZm8gcG9pbnRlcgorICogcjIgPSBuZXh0IHRocmVhZF9pbmZvLmNwdV9kb21haW4gcG9pbnRlciAobXVzdCBiZSBwcmVzZXJ2ZWQpCisgKgorICogQ2FsbGVkIG9ubHkgZnJvbSBfX3N3aXRjaF90byB3aXRoIHRhc2sgcHJlZW1wdGlvbiBkaXNhYmxlZC4KKyAqIE5vIG5lZWQgdG8gY2FyZSBhYm91dCBwcmVzZXJ2aW5nIHI0IGFuZCBhYm92ZS4KKyAqLworRU5UUlkoaXdtbXh0X3Rhc2tfc3dpdGNoKQorCisJbXJjCXAxNSwgMCwgcjQsIGMxNSwgYzEsIDAKKwl0c3QJcjQsICMweDMJCQlAIENQMCBhbmQgQ1AxIGFjY2Vzc2libGU/CisJYm5lCTFmCQkJCUAgeWVzOiBibG9jayB0aGVtIGZvciBuZXh0IHRhc2sKKworCWxkcglyNSwgPWNvbmNhbl9vd25lcgorCWFkZAlyNiwgcjIsICMoVElfSVdNTVhUX1NUQVRFIC0gVElfQ1BVX0RPTUFJTikgQCBnZXQgbmV4dCB0YXNrIENvbmNhbiBzYXZlIGFyZWEKKwlsZHIJcjUsIFtyNV0JCQlAIGdldCBjdXJyZW50IENvbmNhbiBvd25lcgorCXRlcQlyNSwgcjYJCQkJQCBuZXh0IHRhc2sgb3ducyBpdD8KKwltb3ZuZQlwYywgbHIJCQkJQCBubzogbGVhdmUgQ29uY2FuIGRpc2FibGVkCisKKzE6CWVvcglyNCwgcjQsICMzCQkJQCBmbGlwIENvbmNhbiBhY2Nlc3MKKwltY3IJcDE1LCAwLCByNCwgYzE1LCBjMSwgMAorCisJbXJjCXAxNSwgMCwgcjQsIGMyLCBjMCwgMAorCXN1YglwYywgbHIsIHI0LCBsc3IgIzMyCQlAIGNwd2FpdCBhbmQgcmV0dXJuCisKKy8qCisgKiBSZW1vdmUgQ29uY2FuIG93bmVyc2hpcCBvZiBnaXZlbiB0YXNrCisgKgorICogcjAgPSBzdHJ1Y3QgdGhyZWFkX2luZm8gcG9pbnRlcgorICovCitFTlRSWShpd21teHRfdGFza19yZWxlYXNlKQorCisJbXJzCXIyLCBjcHNyCisJb3JyCWlwLCByMiwgI1BTUl9JX0JJVAkJQCBkaXNhYmxlIGludGVycnVwdHMKKwltc3IJY3Bzcl9jLCBpcAorCWxkcglyMywgPWNvbmNhbl9vd25lcgorCWFkZAlyMCwgcjAsICNUSV9JV01NWFRfU1RBVEUJQCBnZXQgdGFzayBDb25jYW4gc2F2ZSBhcmVhCisJbGRyCXIxLCBbcjNdCQkJQCBnZXQgY3VycmVudCBDb25jYW4gb3duZXIKKwllb3JzCXIwLCByMCwgcjEJCQlAIGlmIGVxdWFsLi4uCisJc3RyZXEJcjAsIFtyM10JCQlAIHRoZW4gY2xlYXIgb3duZXJzaGlwCisJbXNyCWNwc3JfYywgcjIJCQlAIHJlc3RvcmUgaW50ZXJydXB0cworCW1vdglwYywgbHIKKworCS5kYXRhCitjb25jYW5fb3duZXI6CisJLndvcmQJMAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE4NWNmZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYwpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIFJ1c3NlbGwgS2luZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE1vZHVsZSBhbGxvY2F0aW9uIG1ldGhvZCBzdWdnZXN0ZWQgYnkgQW5kaSBLbGVlbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisKKyNpZmRlZiBDT05GSUdfWElQX0tFUk5FTAorLyoKKyAqIFRoZSBYSVAga2VybmVsIHRleHQgaXMgbWFwcGVkIGluIHRoZSBtb2R1bGUgYXJlYSBmb3IgbW9kdWxlcyBhbmQKKyAqIHNvbWUgb3RoZXIgc3R1ZmYgdG8gd29yayB3aXRob3V0IGFueSBpbmRpcmVjdCByZWxvY2F0aW9ucy4KKyAqIE1PRFVMRV9TVEFSVCBpcyByZWRlZmluZWQgaGVyZSBhbmQgbm90IGluIGFzbS9tZW1vcnkuaCB0byBhdm9pZAorICogcmVjb21waWxpbmcgdGhlIHdob2xlIGtlcm5lbCB3aGVuIENPTkZJR19YSVBfS0VSTkVMIGlzIHR1cm5lZCBvbi9vZmYuCisgKi8KK2V4dGVybiB2b2lkIF9ldGV4dDsKKyN1bmRlZiBNT0RVTEVfU1RBUlQKKyNkZWZpbmUgTU9EVUxFX1NUQVJUCSgoKHVuc2lnbmVkIGxvbmcpJl9ldGV4dCArIH5QR0RJUl9NQVNLKSAmIFBHRElSX01BU0spCisjZW5kaWYKKwordm9pZCAqbW9kdWxlX2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOworCisJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CisJaWYgKCFzaXplKQorCQlyZXR1cm4gTlVMTDsKKworCWFyZWEgPSBfX2dldF92bV9hcmVhKHNpemUsIFZNX0FMTE9DLCBNT0RVTEVfU1RBUlQsIE1PRFVMRV9FTkQpOworCWlmICghYXJlYSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gX192bWFsbG9jX2FyZWEoYXJlYSwgR0ZQX0tFUk5FTCwgUEFHRV9LRVJORUwpOworfQorCit2b2lkIG1vZHVsZV9mcmVlKHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgdm9pZCAqcmVnaW9uKQoreworCXZmcmVlKHJlZ2lvbik7Cit9CisKK2ludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICpoZHIsCisJCQkgICAgICBFbGZfU2hkciAqc2VjaGRycywKKwkJCSAgICAgIGNoYXIgKnNlY3N0cmluZ3MsCisJCQkgICAgICBzdHJ1Y3QgbW9kdWxlICptb2QpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludAorYXBwbHlfcmVsb2NhdGUoRWxmMzJfU2hkciAqc2VjaGRycywgY29uc3QgY2hhciAqc3RydGFiLCB1bnNpZ25lZCBpbnQgc3ltaW5kZXgsCisJICAgICAgIHVuc2lnbmVkIGludCByZWxpbmRleCwgc3RydWN0IG1vZHVsZSAqbW9kdWxlKQoreworCUVsZjMyX1NoZHIgKnN5bXNlYyA9IHNlY2hkcnMgKyBzeW1pbmRleDsKKwlFbGYzMl9TaGRyICpyZWxzZWMgPSBzZWNoZHJzICsgcmVsaW5kZXg7CisJRWxmMzJfU2hkciAqZHN0c2VjID0gc2VjaGRycyArIHJlbHNlYy0+c2hfaW5mbzsKKwlFbGYzMl9SZWwgKnJlbCA9ICh2b2lkICopcmVsc2VjLT5zaF9hZGRyOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IHJlbHNlYy0+c2hfc2l6ZSAvIHNpemVvZihFbGYzMl9SZWwpOyBpKyssIHJlbCsrKSB7CisJCXVuc2lnbmVkIGxvbmcgbG9jOworCQlFbGYzMl9TeW0gKnN5bTsKKwkJczMyIG9mZnNldDsKKworCQlvZmZzZXQgPSBFTEYzMl9SX1NZTShyZWwtPnJfaW5mbyk7CisJCWlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IChzeW1zZWMtPnNoX3NpemUgLyBzaXplb2YoRWxmMzJfU3ltKSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJhZCByZWxvY2F0aW9uLCBzZWN0aW9uICVkIHJlbG9jICVkXG4iLAorCQkJCW1vZHVsZS0+bmFtZSwgcmVsaW5kZXgsIGkpOworCQkJcmV0dXJuIC1FTk9FWEVDOworCQl9CisKKwkJc3ltID0gKChFbGYzMl9TeW0gKilzeW1zZWMtPnNoX2FkZHIpICsgb2Zmc2V0OworCisJCWlmIChyZWwtPnJfb2Zmc2V0IDwgMCB8fCByZWwtPnJfb2Zmc2V0ID4gZHN0c2VjLT5zaF9zaXplIC0gc2l6ZW9mKHUzMikpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG91dCBvZiBib3VuZHMgcmVsb2NhdGlvbiwgIgorCQkJCSJzZWN0aW9uICVkIHJlbG9jICVkIG9mZnNldCAlZCBzaXplICVkXG4iLAorCQkJCW1vZHVsZS0+bmFtZSwgcmVsaW5kZXgsIGksIHJlbC0+cl9vZmZzZXQsCisJCQkJZHN0c2VjLT5zaF9zaXplKTsKKwkJCXJldHVybiAtRU5PRVhFQzsKKwkJfQorCisJCWxvYyA9IGRzdHNlYy0+c2hfYWRkciArIHJlbC0+cl9vZmZzZXQ7CisKKwkJc3dpdGNoIChFTEYzMl9SX1RZUEUocmVsLT5yX2luZm8pKSB7CisJCWNhc2UgUl9BUk1fQUJTMzI6CisJCQkqKHUzMiAqKWxvYyArPSBzeW0tPnN0X3ZhbHVlOworCQkJYnJlYWs7CisKKwkJY2FzZSBSX0FSTV9QQzI0OgorCQkJb2Zmc2V0ID0gKCoodTMyICopbG9jICYgMHgwMGZmZmZmZikgPDwgMjsKKwkJCWlmIChvZmZzZXQgJiAweDAyMDAwMDAwKQorCQkJCW9mZnNldCAtPSAweDA0MDAwMDAwOworCisJCQlvZmZzZXQgKz0gc3ltLT5zdF92YWx1ZSAtIGxvYzsKKwkJCWlmIChvZmZzZXQgJiAzIHx8CisJCQkgICAgb2Zmc2V0IDw9IChzMzIpMHhmYzAwMDAwMCB8fAorCQkJICAgIG9mZnNldCA+PSAoczMyKTB4MDQwMDAwMDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIiVzOiByZWxvY2F0aW9uIG91dCBvZiByYW5nZSwgc2VjdGlvbiAiCisJCQkJICAgICAgICIlZCByZWxvYyAlZCBzeW0gJyVzJ1xuIiwgbW9kdWxlLT5uYW1lLAorCQkJCSAgICAgICByZWxpbmRleCwgaSwgc3RydGFiICsgc3ltLT5zdF9uYW1lKTsKKwkJCQlyZXR1cm4gLUVOT0VYRUM7CisJCQl9CisKKwkJCW9mZnNldCA+Pj0gMjsKKworCQkJKih1MzIgKilsb2MgJj0gMHhmZjAwMDAwMDsKKwkJCSoodTMyICopbG9jIHw9IG9mZnNldCAmIDB4MDBmZmZmZmY7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5rbm93biByZWxvY2F0aW9uOiAldVxuIiwKKwkJCSAgICAgICBtb2R1bGUtPm5hbWUsIEVMRjMyX1JfVFlQRShyZWwtPnJfaW5mbykpOworCQkJcmV0dXJuIC1FTk9FWEVDOworCQl9CisJfQorCXJldHVybiAwOworfQorCitpbnQKK2FwcGx5X3JlbG9jYXRlX2FkZChFbGYzMl9TaGRyICpzZWNoZHJzLCBjb25zdCBjaGFyICpzdHJ0YWIsCisJCSAgIHVuc2lnbmVkIGludCBzeW1pbmRleCwgdW5zaWduZWQgaW50IHJlbHNlYywgc3RydWN0IG1vZHVsZSAqbW9kdWxlKQoreworCXByaW50ayhLRVJOX0VSUiAibW9kdWxlICVzOiBBREQgUkVMT0NBVElPTiB1bnN1cHBvcnRlZFxuIiwKKwkgICAgICAgbW9kdWxlLT5uYW1lKTsKKwlyZXR1cm4gLUVOT0VYRUM7Cit9CisKK2ludAorbW9kdWxlX2ZpbmFsaXplKGNvbnN0IEVsZjMyX0VoZHIgKmhkciwgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsCisJCXN0cnVjdCBtb2R1bGUgKm1vZHVsZSkKK3sKKwlyZXR1cm4gMDsKK30KKwordm9pZAorbW9kdWxlX2FyY2hfY2xlYW51cChzdHJ1Y3QgbW9kdWxlICptb2QpCit7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmQ4Y2E4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwpAQCAtMCwwICsxLDQ2MCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwIFJ1c3NlbGwgS2luZyAtIENvbnZlcnRlZCB0byBBUk0uCisgKiAgT3JpZ2luYWwgQ29weXJpZ2h0IChDKSAxOTk1ICBMaW51cyBUb3J2YWxkcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdXNlci5oPgorI2luY2x1ZGUgPGxpbnV4L2Eub3V0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCitleHRlcm4gY29uc3QgY2hhciAqcHJvY2Vzc29yX21vZGVzW107CitleHRlcm4gdm9pZCBzZXR1cF9tbV9mb3JfcmVib290KGNoYXIgbW9kZSk7CisKK3N0YXRpYyB2b2xhdGlsZSBpbnQgaGx0X2NvdW50ZXI7CisKKyNpbmNsdWRlIDxhc20vYXJjaC9zeXN0ZW0uaD4KKwordm9pZCBkaXNhYmxlX2hsdCh2b2lkKQoreworCWhsdF9jb3VudGVyKys7Cit9CisKK0VYUE9SVF9TWU1CT0woZGlzYWJsZV9obHQpOworCit2b2lkIGVuYWJsZV9obHQodm9pZCkKK3sKKwlobHRfY291bnRlci0tOworfQorCitFWFBPUlRfU1lNQk9MKGVuYWJsZV9obHQpOworCitzdGF0aWMgaW50IF9faW5pdCBub2hsdF9zZXR1cChjaGFyICpfX3VudXNlZCkKK3sKKwlobHRfY291bnRlciA9IDE7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGhsdF9zZXR1cChjaGFyICpfX3VudXNlZCkKK3sKKwlobHRfY291bnRlciA9IDA7CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoIm5vaGx0Iiwgbm9obHRfc2V0dXApOworX19zZXR1cCgiaGx0IiwgaGx0X3NldHVwKTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlbid0IGN1cnJlbnRseSB1c2VkLgorICovCit2b2lkICgqcG1faWRsZSkodm9pZCk7CitFWFBPUlRfU1lNQk9MKHBtX2lkbGUpOworCit2b2lkICgqcG1fcG93ZXJfb2ZmKSh2b2lkKTsKK0VYUE9SVF9TWU1CT0wocG1fcG93ZXJfb2ZmKTsKKworLyoKKyAqIFRoaXMgaXMgb3VyIGRlZmF1bHQgaWRsZSBoYW5kbGVyLiAgV2UgbmVlZCB0byBkaXNhYmxlCisgKiBpbnRlcnJ1cHRzIGhlcmUgdG8gZW5zdXJlIHdlIGRvbid0IG1pc3MgYSB3YWtldXAgY2FsbC4KKyAqLwordm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWlmICghbmVlZF9yZXNjaGVkKCkgJiYgIWhsdF9jb3VudGVyKQorCQlhcmNoX2lkbGUoKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7Cit9CisKKy8qCisgKiBUaGUgaWRsZSB0aHJlYWQuICBXZSB0cnkgdG8gY29uc2VydmUgcG93ZXIsIHdoaWxlIHRyeWluZyB0byBrZWVwCisgKiBvdmVyYWxsIGxhdGVuY3kgbG93LiAgVGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBpZGxlIGlzIHBhc3NlZAorICogYSB2YWx1ZSB0byBpbmRpY2F0ZSB0aGUgbGV2ZWwgb2YgImlkbGVuZXNzIiBvZiB0aGUgc3lzdGVtLgorICovCit2b2lkIGNwdV9pZGxlKHZvaWQpCit7CisJbG9jYWxfZmlxX2VuYWJsZSgpOworCisJLyogZW5kbGVzcyBpZGxlIGxvb3Agd2l0aCBubyBwcmlvcml0eSBhdCBhbGwgKi8KKwl3aGlsZSAoMSkgeworCQl2b2lkICgqaWRsZSkodm9pZCkgPSBwbV9pZGxlOworCQlpZiAoIWlkbGUpCisJCQlpZGxlID0gZGVmYXVsdF9pZGxlOworCQlwcmVlbXB0X2Rpc2FibGUoKTsKKwkJbGVkc19ldmVudChsZWRfaWRsZV9zdGFydCk7CisJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpCisJCQlpZGxlKCk7CisJCWxlZHNfZXZlbnQobGVkX2lkbGVfZW5kKTsKKwkJcHJlZW1wdF9lbmFibGUoKTsKKwkJc2NoZWR1bGUoKTsKKwl9Cit9CisKK3N0YXRpYyBjaGFyIHJlYm9vdF9tb2RlID0gJ2gnOworCitpbnQgX19pbml0IHJlYm9vdF9zZXR1cChjaGFyICpzdHIpCit7CisJcmVib290X21vZGUgPSBzdHJbMF07CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoInJlYm9vdD0iLCByZWJvb3Rfc2V0dXApOworCit2b2lkIG1hY2hpbmVfaGFsdCh2b2lkKQoreworfQorCitFWFBPUlRfU1lNQk9MKG1hY2hpbmVfaGFsdCk7CisKK3ZvaWQgbWFjaGluZV9wb3dlcl9vZmYodm9pZCkKK3sKKwlpZiAocG1fcG93ZXJfb2ZmKQorCQlwbV9wb3dlcl9vZmYoKTsKK30KKworRVhQT1JUX1NZTUJPTChtYWNoaW5lX3Bvd2VyX29mZik7CisKK3ZvaWQgbWFjaGluZV9yZXN0YXJ0KGNoYXIgKiBfX3VudXNlZCkKK3sKKwkvKgorCSAqIENsZWFuIGFuZCBkaXNhYmxlIGNhY2hlLCBhbmQgdHVybiBvZmYgaW50ZXJydXB0cworCSAqLworCWNwdV9wcm9jX2ZpbigpOworCisJLyoKKwkgKiBUZWxsIHRoZSBtbSBzeXN0ZW0gdGhhdCB3ZSBhcmUgZ29pbmcgdG8gcmVib290IC0KKwkgKiB3ZSBtYXkgbmVlZCBpdCB0byBpbnNlcnQgc29tZSAxOjEgbWFwcGluZ3Mgc28gdGhhdAorCSAqIHNvZnQgYm9vdCB3b3Jrcy4KKwkgKi8KKwlzZXR1cF9tbV9mb3JfcmVib290KHJlYm9vdF9tb2RlKTsKKworCS8qCisJICogTm93IGNhbGwgdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyByZWJvb3QgY29kZS4KKwkgKi8KKwlhcmNoX3Jlc2V0KHJlYm9vdF9tb2RlKTsKKworCS8qCisJICogV2hvb3BzIC0gdGhlIGFyY2hpdGVjdHVyZSB3YXMgdW5hYmxlIHRvIHJlYm9vdC4KKwkgKiBUZWxsIHRoZSB1c2VyIQorCSAqLworCW1kZWxheSgxMDAwKTsKKwlwcmludGsoIlJlYm9vdCBmYWlsZWQgLS0gU3lzdGVtIGhhbHRlZFxuIik7CisJd2hpbGUgKDEpOworfQorCitFWFBPUlRfU1lNQk9MKG1hY2hpbmVfcmVzdGFydCk7CisKK3ZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZmxhZ3MgPSBjb25kaXRpb25fY29kZXMocmVncyk7CisKKwlwcmludF9zeW1ib2woIlBDIGlzIGF0ICVzXG4iLCBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpKTsKKwlwcmludF9zeW1ib2woIkxSIGlzIGF0ICVzXG4iLCByZWdzLT5BUk1fbHIpOworCXByaW50aygicGMgOiBbPCUwOGx4Pl0gICAgbHIgOiBbPCUwOGx4Pl0gICAgJXNcbiIKKwkgICAgICAgInNwIDogJTA4bHggIGlwIDogJTA4bHggIGZwIDogJTA4bHhcbiIsCisJCWluc3RydWN0aW9uX3BvaW50ZXIocmVncyksCisJCXJlZ3MtPkFSTV9sciwgcHJpbnRfdGFpbnRlZCgpLCByZWdzLT5BUk1fc3AsCisJCXJlZ3MtPkFSTV9pcCwgcmVncy0+QVJNX2ZwKTsKKwlwcmludGsoInIxMDogJTA4bHggIHI5IDogJTA4bHggIHI4IDogJTA4bHhcbiIsCisJCXJlZ3MtPkFSTV9yMTAsIHJlZ3MtPkFSTV9yOSwKKwkJcmVncy0+QVJNX3I4KTsKKwlwcmludGsoInI3IDogJTA4bHggIHI2IDogJTA4bHggIHI1IDogJTA4bHggIHI0IDogJTA4bHhcbiIsCisJCXJlZ3MtPkFSTV9yNywgcmVncy0+QVJNX3I2LAorCQlyZWdzLT5BUk1fcjUsIHJlZ3MtPkFSTV9yNCk7CisJcHJpbnRrKCJyMyA6ICUwOGx4ICByMiA6ICUwOGx4ICByMSA6ICUwOGx4ICByMCA6ICUwOGx4XG4iLAorCQlyZWdzLT5BUk1fcjMsIHJlZ3MtPkFSTV9yMiwKKwkJcmVncy0+QVJNX3IxLCByZWdzLT5BUk1fcjApOworCXByaW50aygiRmxhZ3M6ICVjJWMlYyVjIiwKKwkJZmxhZ3MgJiBQU1JfTl9CSVQgPyAnTicgOiAnbicsCisJCWZsYWdzICYgUFNSX1pfQklUID8gJ1onIDogJ3onLAorCQlmbGFncyAmIFBTUl9DX0JJVCA/ICdDJyA6ICdjJywKKwkJZmxhZ3MgJiBQU1JfVl9CSVQgPyAnVicgOiAndicpOworCXByaW50aygiICBJUlFzIG8lcyAgRklRcyBvJXMgIE1vZGUgJXMlcyAgU2VnbWVudCAlc1xuIiwKKwkJaW50ZXJydXB0c19lbmFibGVkKHJlZ3MpID8gIm4iIDogImZmIiwKKwkJZmFzdF9pbnRlcnJ1cHRzX2VuYWJsZWQocmVncykgPyAibiIgOiAiZmYiLAorCQlwcm9jZXNzb3JfbW9kZXNbcHJvY2Vzc29yX21vZGUocmVncyldLAorCQl0aHVtYl9tb2RlKHJlZ3MpID8gIiAoVCkiIDogIiIsCisJCWdldF9mcygpID09IGdldF9kcygpID8gImtlcm5lbCIgOiAidXNlciIpOworCXsKKwkJdW5zaWduZWQgaW50IGN0cmwsIHRyYW5zYmFzZSwgZGFjOworCQkgIF9fYXNtX18gKAorCQkiCW1yYyBwMTUsIDAsICUwLCBjMSwgYzBcbiIKKwkJIgltcmMgcDE1LCAwLCAlMSwgYzIsIGMwXG4iCisJCSIJbXJjIHAxNSwgMCwgJTIsIGMzLCBjMFxuIgorCQk6ICI9ciIgKGN0cmwpLCAiPXIiICh0cmFuc2Jhc2UpLCAiPXIiIChkYWMpKTsKKwkJcHJpbnRrKCJDb250cm9sOiAlMDRYICBUYWJsZTogJTA4WCAgREFDOiAlMDhYXG4iLAorCQkgIAljdHJsLCB0cmFuc2Jhc2UsIGRhYyk7CisJfQorfQorCit2b2lkIHNob3dfZnByZWdzKHN0cnVjdCB1c2VyX2ZwICpyZWdzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQl1bnNpZ25lZCBsb25nICpwOworCQljaGFyIHR5cGU7CisKKwkJcCA9ICh1bnNpZ25lZCBsb25nICopKHJlZ3MtPmZwcmVncyArIGkpOworCisJCXN3aXRjaCAocmVncy0+ZnR5cGVbaV0pIHsKKwkJCWNhc2UgMTogdHlwZSA9ICdmJzsgYnJlYWs7CisJCQljYXNlIDI6IHR5cGUgPSAnZCc7IGJyZWFrOworCQkJY2FzZSAzOiB0eXBlID0gJ2UnOyBicmVhazsKKwkJCWRlZmF1bHQ6IHR5cGUgPSAnPyc7IGJyZWFrOworCQl9CisJCWlmIChyZWdzLT5pbml0X2ZsYWcpCisJCQl0eXBlID0gJz8nOworCisJCXByaW50aygiICBmJWQoJWMpOiAlMDhseCAlMDhseCAlMDhseCVjIiwKKwkJCWksIHR5cGUsIHBbMF0sIHBbMV0sIHBbMl0sIGkgJiAxID8gJ1xuJyA6ICcgJyk7CisJfQorCQkJCisKKwlwcmludGsoIkZQU1I6ICUwOGx4IEZQQ1I6ICUwOGx4XG4iLAorCQkodW5zaWduZWQgbG9uZylyZWdzLT5mcHNyLAorCQkodW5zaWduZWQgbG9uZylyZWdzLT5mcGNyKTsKK30KKworLyoKKyAqIFRhc2sgc3RydWN0dXJlIGFuZCBrZXJuZWwgc3RhY2sgYWxsb2NhdGlvbi4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgKnRocmVhZF9pbmZvX2hlYWQ7CitzdGF0aWMgdW5zaWduZWQgaW50IG5yX3RocmVhZF9pbmZvOworCisjZGVmaW5lIEVYVFJBX1RBU0tfU1RSVUNUCTQKKyNkZWZpbmUgbGxfYWxsb2NfdGFza19zdHJ1Y3QoKSAoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsMSkpCisjZGVmaW5lIGxsX2ZyZWVfdGFza19zdHJ1Y3QocCkgZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykocCksMSkKKworc3RydWN0IHRocmVhZF9pbmZvICphbGxvY190aHJlYWRfaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQgPSBOVUxMOworCisJaWYgKEVYVFJBX1RBU0tfU1RSVUNUKSB7CisJCXVuc2lnbmVkIGxvbmcgKnAgPSB0aHJlYWRfaW5mb19oZWFkOworCisJCWlmIChwKSB7CisJCQl0aHJlYWRfaW5mb19oZWFkID0gKHVuc2lnbmVkIGxvbmcgKilwWzBdOworCQkJbnJfdGhyZWFkX2luZm8gLT0gMTsKKwkJfQorCQl0aHJlYWQgPSAoc3RydWN0IHRocmVhZF9pbmZvICopcDsKKwl9CisKKwlpZiAoIXRocmVhZCkKKwkJdGhyZWFkID0gbGxfYWxsb2NfdGFza19zdHJ1Y3QoKTsKKworI2lmZGVmIENPTkZJR19NQUdJQ19TWVNSUQorCS8qCisJICogVGhlIHN0YWNrIG11c3QgYmUgY2xlYXJlZCBpZiB5b3Ugd2FudCBTWVNSUS1UIHRvCisJICogZ2l2ZSBzZW5zaWJsZSBzdGFjayB1c2FnZSBpbmZvcm1hdGlvbgorCSAqLworCWlmICh0aHJlYWQpIHsKKwkJY2hhciAqcCA9IChjaGFyICopdGhyZWFkOworCQltZW16ZXJvKHArS0VSTkVMX1NUQUNLX1NJWkUsIEtFUk5FTF9TVEFDS19TSVpFKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gdGhyZWFkOworfQorCit2b2lkIGZyZWVfdGhyZWFkX2luZm8oc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQpCit7CisJaWYgKEVYVFJBX1RBU0tfU1RSVUNUICYmIG5yX3RocmVhZF9pbmZvIDwgRVhUUkFfVEFTS19TVFJVQ1QpIHsKKwkJdW5zaWduZWQgbG9uZyAqcCA9ICh1bnNpZ25lZCBsb25nICopdGhyZWFkOworCQlwWzBdID0gKHVuc2lnbmVkIGxvbmcpdGhyZWFkX2luZm9faGVhZDsKKwkJdGhyZWFkX2luZm9faGVhZCA9IHA7CisJCW5yX3RocmVhZF9pbmZvICs9IDE7CisJfSBlbHNlCisJCWxsX2ZyZWVfdGFza19zdHJ1Y3QodGhyZWFkKTsKK30KKworLyoKKyAqIEZyZWUgY3VycmVudCB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVzIGV0Yy4uCisgKi8KK3ZvaWQgZXhpdF90aHJlYWQodm9pZCkKK3sKK30KKworc3RhdGljIHZvaWQgZGVmYXVsdF9mcF9pbml0KHVuaW9uIGZwX3N0YXRlICpmcCkKK3sKKwltZW1zZXQoZnAsIDAsIHNpemVvZih1bmlvbiBmcF9zdGF0ZSkpOworfQorCit2b2lkICgqZnBfaW5pdCkodW5pb24gZnBfc3RhdGUgKikgPSBkZWZhdWx0X2ZwX2luaXQ7CitFWFBPUlRfU1lNQk9MKGZwX2luaXQpOworCit2b2lkIGZsdXNoX3RocmVhZCh2b2lkKQoreworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gY3VycmVudF90aHJlYWRfaW5mbygpOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKworCW1lbXNldCh0aHJlYWQtPnVzZWRfY3AsIDAsIHNpemVvZih0aHJlYWQtPnVzZWRfY3ApKTsKKwltZW1zZXQoJnRzay0+dGhyZWFkLmRlYnVnLCAwLCBzaXplb2Yoc3RydWN0IGRlYnVnX2luZm8pKTsKKyNpZiBkZWZpbmVkKENPTkZJR19JV01NWFQpCisJaXdtbXh0X3Rhc2tfcmVsZWFzZSh0aHJlYWQpOworI2VuZGlmCisJZnBfaW5pdCgmdGhyZWFkLT5mcHN0YXRlKTsKKyNpZiBkZWZpbmVkKENPTkZJR19WRlApCisJdmZwX2ZsdXNoX3RocmVhZCgmdGhyZWFkLT52ZnBzdGF0ZSk7CisjZW5kaWYKK30KKwordm9pZCByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRlYWRfdGFzaykKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19WRlApCisJdmZwX3JlbGVhc2VfdGhyZWFkKCZkZWFkX3Rhc2stPnRocmVhZF9pbmZvLT52ZnBzdGF0ZSk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19JV01NWFQpCisJaXdtbXh0X3Rhc2tfcmVsZWFzZShkZWFkX3Rhc2stPnRocmVhZF9pbmZvKTsKKyNlbmRpZgorfQorCithc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKSBfX2FzbV9fKCJyZXRfZnJvbV9mb3JrIik7CisKK2ludAorY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHN0YWNrX3N0YXJ0LAorCSAgICB1bnNpZ25lZCBsb25nIHN0a19zeiwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IHAtPnRocmVhZF9pbmZvOworCXN0cnVjdCBwdF9yZWdzICpjaGlsZHJlZ3M7CisKKwljaGlsZHJlZ3MgPSAoKHN0cnVjdCBwdF9yZWdzICopKCh1bnNpZ25lZCBsb25nKXRocmVhZCArIFRIUkVBRF9TSVpFIC0gOCkpIC0gMTsKKwkqY2hpbGRyZWdzID0gKnJlZ3M7CisJY2hpbGRyZWdzLT5BUk1fcjAgPSAwOworCWNoaWxkcmVncy0+QVJNX3NwID0gc3RhY2tfc3RhcnQ7CisKKwltZW1zZXQoJnRocmVhZC0+Y3B1X2NvbnRleHQsIDAsIHNpemVvZihzdHJ1Y3QgY3B1X2NvbnRleHRfc2F2ZSkpOworCXRocmVhZC0+Y3B1X2NvbnRleHQuc3AgPSAodW5zaWduZWQgbG9uZyljaGlsZHJlZ3M7CisJdGhyZWFkLT5jcHVfY29udGV4dC5wYyA9ICh1bnNpZ25lZCBsb25nKXJldF9mcm9tX2Zvcms7CisKKwlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9TRVRUTFMpCisJCXRocmVhZC0+dHBfdmFsdWUgPSByZWdzLT5BUk1fcjM7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGZpbGwgaW4gdGhlIGZwZSBzdHJ1Y3R1cmUgZm9yIGEgY29yZSBkdW1wLi4uCisgKi8KK2ludCBkdW1wX2ZwdSAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB1c2VyX2ZwICpmcCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwlpbnQgdXNlZF9tYXRoID0gdGhyZWFkLT51c2VkX2NwWzFdIHwgdGhyZWFkLT51c2VkX2NwWzJdOworCisJaWYgKHVzZWRfbWF0aCkKKwkJbWVtY3B5KGZwLCAmdGhyZWFkLT5mcHN0YXRlLnNvZnQsIHNpemVvZiAoKmZwKSk7CisKKwlyZXR1cm4gdXNlZF9tYXRoICE9IDA7Cit9CitFWFBPUlRfU1lNQk9MKGR1bXBfZnB1KTsKKworLyoKKyAqIGZpbGwgaW4gdGhlIHVzZXIgc3RydWN0dXJlIGZvciBhIGNvcmUgZHVtcC4uCisgKi8KK3ZvaWQgZHVtcF90aHJlYWQoc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBzdHJ1Y3QgdXNlciAqIGR1bXApCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCisJZHVtcC0+bWFnaWMgPSBDTUFHSUM7CisJZHVtcC0+c3RhcnRfY29kZSA9IHRzay0+bW0tPnN0YXJ0X2NvZGU7CisJZHVtcC0+c3RhcnRfc3RhY2sgPSByZWdzLT5BUk1fc3AgJiB+KFBBR0VfU0laRSAtIDEpOworCisJZHVtcC0+dV90c2l6ZSA9ICh0c2stPm1tLT5lbmRfY29kZSAtIHRzay0+bW0tPnN0YXJ0X2NvZGUpID4+IFBBR0VfU0hJRlQ7CisJZHVtcC0+dV9kc2l6ZSA9ICh0c2stPm1tLT5icmsgLSB0c2stPm1tLT5zdGFydF9kYXRhICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKKwlkdW1wLT51X3NzaXplID0gMDsKKworCWR1bXAtPnVfZGVidWdyZWdbMF0gPSB0c2stPnRocmVhZC5kZWJ1Zy5icFswXS5hZGRyZXNzOworCWR1bXAtPnVfZGVidWdyZWdbMV0gPSB0c2stPnRocmVhZC5kZWJ1Zy5icFsxXS5hZGRyZXNzOworCWR1bXAtPnVfZGVidWdyZWdbMl0gPSB0c2stPnRocmVhZC5kZWJ1Zy5icFswXS5pbnNuLmFybTsKKwlkdW1wLT51X2RlYnVncmVnWzNdID0gdHNrLT50aHJlYWQuZGVidWcuYnBbMV0uaW5zbi5hcm07CisJZHVtcC0+dV9kZWJ1Z3JlZ1s0XSA9IHRzay0+dGhyZWFkLmRlYnVnLm5zYXZlZDsKKworCWlmIChkdW1wLT5zdGFydF9zdGFjayA8IDB4MDQwMDAwMDApCisJCWR1bXAtPnVfc3NpemUgPSAoMHgwNDAwMDAwMCAtIGR1bXAtPnN0YXJ0X3N0YWNrKSA+PiBQQUdFX1NISUZUOworCisJZHVtcC0+cmVncyA9ICpyZWdzOworCWR1bXAtPnVfZnB2YWxpZCA9IGR1bXBfZnB1IChyZWdzLCAmZHVtcC0+dV9mcCk7Cit9CitFWFBPUlRfU1lNQk9MKGR1bXBfdGhyZWFkKTsKKworLyoKKyAqIFNodWZmbGUgdGhlIGFyZ3VtZW50IGludG8gdGhlIGNvcnJlY3QgcmVnaXN0ZXIgYmVmb3JlIGNhbGxpbmcgdGhlCisgKiB0aHJlYWQgZnVuY3Rpb24uICByMSBpcyB0aGUgdGhyZWFkIGFyZ3VtZW50LCByMiBpcyB0aGUgcG9pbnRlciB0bworICogdGhlIHRocmVhZCBmdW5jdGlvbiwgYW5kIHIzIHBvaW50cyB0byB0aGUgZXhpdCBmdW5jdGlvbi4KKyAqLworZXh0ZXJuIHZvaWQga2VybmVsX3RocmVhZF9oZWxwZXIodm9pZCk7Cithc20oCSIuc2VjdGlvbiAudGV4dFxuIgorIgkuYWxpZ25cbiIKKyIJLnR5cGUJa2VybmVsX3RocmVhZF9oZWxwZXIsICNmdW5jdGlvblxuIgorImtlcm5lbF90aHJlYWRfaGVscGVyOlxuIgorIgltb3YJcjAsIHIxXG4iCisiCW1vdglsciwgcjNcbiIKKyIJbW92CXBjLCByMlxuIgorIgkuc2l6ZQlrZXJuZWxfdGhyZWFkX2hlbHBlciwgLiAtIGtlcm5lbF90aHJlYWRfaGVscGVyXG4iCisiCS5wcmV2aW91cyIpOworCisvKgorICogQ3JlYXRlIGEga2VybmVsIHRocmVhZC4KKyAqLworcGlkX3Qga2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CisKKwltZW1zZXQoJnJlZ3MsIDAsIHNpemVvZihyZWdzKSk7CisKKwlyZWdzLkFSTV9yMSA9ICh1bnNpZ25lZCBsb25nKWFyZzsKKwlyZWdzLkFSTV9yMiA9ICh1bnNpZ25lZCBsb25nKWZuOworCXJlZ3MuQVJNX3IzID0gKHVuc2lnbmVkIGxvbmcpZG9fZXhpdDsKKwlyZWdzLkFSTV9wYyA9ICh1bnNpZ25lZCBsb25nKWtlcm5lbF90aHJlYWRfaGVscGVyOworCXJlZ3MuQVJNX2Nwc3IgPSBTVkNfTU9ERTsKKworCXJldHVybiBkb19mb3JrKGZsYWdzfENMT05FX1ZNfENMT05FX1VOVFJBQ0VELCAwLCAmcmVncywgMCwgTlVMTCwgTlVMTCk7Cit9CitFWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpOworCit1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJdW5zaWduZWQgbG9uZyBmcCwgbHI7CisJdW5zaWduZWQgbG9uZyBzdGFja19wYWdlOworCWludCBjb3VudCA9IDA7CisJaWYgKCFwIHx8IHAgPT0gY3VycmVudCB8fCBwLT5zdGF0ZSA9PSBUQVNLX1JVTk5JTkcpCisJCXJldHVybiAwOworCisJc3RhY2tfcGFnZSA9IDQwOTYgKyAodW5zaWduZWQgbG9uZylwLT50aHJlYWRfaW5mbzsKKwlmcCA9IHRocmVhZF9zYXZlZF9mcChwKTsKKwlkbyB7CisJCWlmIChmcCA8IHN0YWNrX3BhZ2UgfHwgZnAgPiA0MDkyK3N0YWNrX3BhZ2UpCisJCQlyZXR1cm4gMDsKKwkJbHIgPSBwY19wb2ludGVyICgoKHVuc2lnbmVkIGxvbmcgKilmcClbLTFdKTsKKwkJaWYgKCFpbl9zY2hlZF9mdW5jdGlvbnMobHIpKQorCQkJcmV0dXJuIGxyOworCQlmcCA9ICoodW5zaWduZWQgbG9uZyAqKSAoZnAgLSAxMik7CisJfSB3aGlsZSAoY291bnQgKysgPCAxNik7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGdldF93Y2hhbik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZkN2EzNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwpAQCAtMCwwICsxLDg2MSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKKyAqCisgKiAgQnkgUm9zcyBCaXJvIDEvMjMvOTIKKyAqIGVkaXRlZCBieSBMaW51cyBUb3J2YWxkcworICogQVJNIG1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDAwIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91c2VyLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorCisjaW5jbHVkZSAicHRyYWNlLmgiCisKKyNkZWZpbmUgUkVHX1BDCTE1CisjZGVmaW5lIFJFR19QU1IJMTYKKy8qCisgKiBkb2VzIG5vdCB5ZXQgY2F0Y2ggc2lnbmFscyBzZW50IHdoZW4gdGhlIGNoaWxkIGRpZXMuCisgKiBpbiBleGl0LmMgb3IgaW4gc2lnbmFsLmMuCisgKi8KKworI2lmIDAKKy8qCisgKiBCcmVha3BvaW50IFNXSSBpbnN0cnVjdGlvbjogU1dJICY5RjAwMDEKKyAqLworI2RlZmluZSBCUkVBS0lOU1RfQVJNCTB4ZWY5ZjAwMDEKKyNkZWZpbmUgQlJFQUtJTlNUX1RIVU1CCTB4ZGYwMAkJLyogZmlsbCB0aGlzIGluIGxhdGVyICovCisjZWxzZQorLyoKKyAqIE5ldyBicmVha3BvaW50cyAtIHVzZSBhbiB1bmRlZmluZWQgaW5zdHJ1Y3Rpb24uICBUaGUgQVJNIGFyY2hpdGVjdHVyZQorICogcmVmZXJlbmNlIG1hbnVhbCBndWFyYW50ZWVzIHRoYXQgdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbiBzcGFjZQorICogd2lsbCBwcm9kdWNlIGFuIHVuZGVmaW5lZCBpbnN0cnVjdGlvbiBleGNlcHRpb24gb24gYWxsIENQVXM6CisgKgorICogIEFSTTogICB4eHh4IDAxMTEgMTExMSB4eHh4IHh4eHggeHh4eCAxMTExIHh4eHgKKyAqICBUaHVtYjogMTEwMSAxMTEwIHh4eHggeHh4eAorICovCisjZGVmaW5lIEJSRUFLSU5TVF9BUk0JMHhlN2YwMDFmMAorI2RlZmluZSBCUkVBS0lOU1RfVEhVTUIJMHhkZTAxCisjZW5kaWYKKworLyoKKyAqIEdldCB0aGUgYWRkcmVzcyBvZiB0aGUgbGl2ZSBwdF9yZWdzIGZvciB0aGUgc3BlY2lmaWVkIHRhc2suCisgKiBUaGVzZSBhcmUgc2F2ZWQgb250byB0aGUgdG9wIGtlcm5lbCBzdGFjayB3aGVuIHRoZSBwcm9jZXNzCisgKiBpcyBub3QgcnVubmluZy4KKyAqCisgKiBOb3RlOiBpZiBhIHVzZXIgdGhyZWFkIGlzIGV4ZWN2ZSdkIGZyb20ga2VybmVsIHNwYWNlLCB0aGUKKyAqIGtlcm5lbCBzdGFjayB3aWxsIG5vdCBiZSBlbXB0eSBvbiBlbnRyeSB0byB0aGUga2VybmVsLCBzbworICogcHRyYWNpbmcgdGhlc2UgdGFza3Mgd2lsbCBmYWlsLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwdF9yZWdzICoKK2dldF91c2VyX3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXJldHVybiAoc3RydWN0IHB0X3JlZ3MgKikKKwkJKCh1bnNpZ25lZCBsb25nKXRhc2stPnRocmVhZF9pbmZvICsgVEhSRUFEX1NJWkUgLQorCQkJCSA4IC0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7Cit9CisKKy8qCisgKiB0aGlzIHJvdXRpbmUgd2lsbCBnZXQgYSB3b3JkIG9mZiBvZiB0aGUgcHJvY2Vzc2VzIHByaXZpbGVnZWQgc3RhY2suCisgKiB0aGUgb2Zmc2V0IGlzIGhvdyBmYXIgZnJvbSB0aGUgYmFzZSBhZGRyIGFzIHN0b3JlZCBpbiB0aGUgVEhSRUFELgorICogdGhpcyByb3V0aW5lIGFzc3VtZXMgdGhhdCBhbGwgdGhlIHByaXZpbGVnZWQgc3RhY2tzIGFyZSBpbiBvdXIKKyAqIGRhdGEgc3BhY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgbG9uZyBnZXRfdXNlcl9yZWcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgb2Zmc2V0KQoreworCXJldHVybiBnZXRfdXNlcl9yZWdzKHRhc2spLT51cmVnc1tvZmZzZXRdOworfQorCisvKgorICogdGhpcyByb3V0aW5lIHdpbGwgcHV0IGEgd29yZCBvbiB0aGUgcHJvY2Vzc2VzIHByaXZpbGVnZWQgc3RhY2suCisgKiB0aGUgb2Zmc2V0IGlzIGhvdyBmYXIgZnJvbSB0aGUgYmFzZSBhZGRyIGFzIHN0b3JlZCBpbiB0aGUgVEhSRUFELgorICogdGhpcyByb3V0aW5lIGFzc3VtZXMgdGhhdCBhbGwgdGhlIHByaXZpbGVnZWQgc3RhY2tzIGFyZSBpbiBvdXIKKyAqIGRhdGEgc3BhY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitwdXRfdXNlcl9yZWcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgb2Zmc2V0LCBsb25nIGRhdGEpCit7CisJc3RydWN0IHB0X3JlZ3MgbmV3cmVncywgKnJlZ3MgPSBnZXRfdXNlcl9yZWdzKHRhc2spOworCWludCByZXQgPSAtRUlOVkFMOworCisJbmV3cmVncyA9ICpyZWdzOworCW5ld3JlZ3MudXJlZ3Nbb2Zmc2V0XSA9IGRhdGE7CisKKwlpZiAodmFsaWRfdXNlcl9yZWdzKCZuZXdyZWdzKSkgeworCQlyZWdzLT51cmVnc1tvZmZzZXRdID0gZGF0YTsKKwkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludAorcmVhZF91MzIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nIGFkZHIsIHUzMiAqcmVzKQoreworCWludCByZXQ7CisKKwlyZXQgPSBhY2Nlc3NfcHJvY2Vzc192bSh0YXNrLCBhZGRyLCByZXMsIHNpemVvZigqcmVzKSwgMCk7CisKKwlyZXR1cm4gcmV0ID09IHNpemVvZigqcmVzKSA/IDAgOiAtRUlPOworfQorCitzdGF0aWMgaW5saW5lIGludAorcmVhZF9pbnN0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgYWRkciwgdTMyICpyZXMpCit7CisJaW50IHJldDsKKworCWlmIChhZGRyICYgMSkgeworCQl1MTYgdmFsOworCQlyZXQgPSBhY2Nlc3NfcHJvY2Vzc192bSh0YXNrLCBhZGRyICYgfjEsICZ2YWwsIHNpemVvZih2YWwpLCAwKTsKKwkJcmV0ID0gcmV0ID09IHNpemVvZih2YWwpID8gMCA6IC1FSU87CisJCSpyZXMgPSB2YWw7CisJfSBlbHNlIHsKKwkJdTMyIHZhbDsKKwkJcmV0ID0gYWNjZXNzX3Byb2Nlc3Nfdm0odGFzaywgYWRkciAmIH4zLCAmdmFsLCBzaXplb2YodmFsKSwgMCk7CisJCXJldCA9IHJldCA9PSBzaXplb2YodmFsKSA/IDAgOiAtRUlPOworCQkqcmVzID0gdmFsOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogR2V0IHZhbHVlIG9mIHJlZ2lzdGVyIGBybicgKGluIHRoZSBpbnN0cnVjdGlvbikKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcKK3B0cmFjZV9nZXRybihzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCB1bnNpZ25lZCBsb25nIGluc24pCit7CisJdW5zaWduZWQgaW50IHJlZyA9IChpbnNuID4+IDE2KSAmIDE1OworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJdmFsID0gZ2V0X3VzZXJfcmVnKGNoaWxkLCByZWcpOworCWlmIChyZWcgPT0gMTUpCisJCXZhbCA9IHBjX3BvaW50ZXIodmFsICsgOCk7CisKKwlyZXR1cm4gdmFsOworfQorCisvKgorICogR2V0IHZhbHVlIG9mIG9wZXJhbmQgMiAoaW4gYW4gQUxVIGluc3RydWN0aW9uKQorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZworcHRyYWNlX2dldGFsdW9wMihzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCB1bnNpZ25lZCBsb25nIGluc24pCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHNoaWZ0OworCWludCB0eXBlOworCisJaWYgKGluc24gJiAxIDw8IDI1KSB7CisJCXZhbCA9IGluc24gJiAyNTU7CisJCXNoaWZ0ID0gKGluc24gPj4gOCkgJiAxNTsKKwkJdHlwZSA9IDM7CisJfSBlbHNlIHsKKwkJdmFsID0gZ2V0X3VzZXJfcmVnIChjaGlsZCwgaW5zbiAmIDE1KTsKKworCQlpZiAoaW5zbiAmICgxIDw8IDQpKQorCQkJc2hpZnQgPSAoaW50KWdldF91c2VyX3JlZyAoY2hpbGQsIChpbnNuID4+IDgpICYgMTUpOworCQllbHNlCisJCQlzaGlmdCA9IChpbnNuID4+IDcpICYgMzE7CisKKwkJdHlwZSA9IChpbnNuID4+IDUpICYgMzsKKwl9CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIDA6CXZhbCA8PD0gc2hpZnQ7CWJyZWFrOworCWNhc2UgMToJdmFsID4+PSBzaGlmdDsJYnJlYWs7CisJY2FzZSAyOgorCQl2YWwgPSAoKChzaWduZWQgbG9uZyl2YWwpID4+IHNoaWZ0KTsKKwkJYnJlYWs7CisJY2FzZSAzOgorIAkJdmFsID0gKHZhbCA+PiBzaGlmdCkgfCAodmFsIDw8ICgzMiAtIHNoaWZ0KSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gdmFsOworfQorCisvKgorICogR2V0IHZhbHVlIG9mIG9wZXJhbmQgMiAoaW4gYSBMRFIgaW5zdHJ1Y3Rpb24pCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nCitwdHJhY2VfZ2V0bGRyb3AyKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGxvbmcgaW5zbikKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgc2hpZnQ7CisJaW50IHR5cGU7CisKKwl2YWwgPSBnZXRfdXNlcl9yZWcoY2hpbGQsIGluc24gJiAxNSk7CisJc2hpZnQgPSAoaW5zbiA+PiA3KSAmIDMxOworCXR5cGUgPSAoaW5zbiA+PiA1KSAmIDM7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIDA6CXZhbCA8PD0gc2hpZnQ7CWJyZWFrOworCWNhc2UgMToJdmFsID4+PSBzaGlmdDsJYnJlYWs7CisJY2FzZSAyOgorCQl2YWwgPSAoKChzaWduZWQgbG9uZyl2YWwpID4+IHNoaWZ0KTsKKwkJYnJlYWs7CisJY2FzZSAzOgorIAkJdmFsID0gKHZhbCA+PiBzaGlmdCkgfCAodmFsIDw8ICgzMiAtIHNoaWZ0KSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gdmFsOworfQorCisjZGVmaW5lIE9QX01BU0sJMHgwMWUwMDAwMAorI2RlZmluZSBPUF9BTkQJMHgwMDAwMDAwMAorI2RlZmluZSBPUF9FT1IJMHgwMDIwMDAwMAorI2RlZmluZSBPUF9TVUIJMHgwMDQwMDAwMAorI2RlZmluZSBPUF9SU0IJMHgwMDYwMDAwMAorI2RlZmluZSBPUF9BREQJMHgwMDgwMDAwMAorI2RlZmluZSBPUF9BREMJMHgwMGEwMDAwMAorI2RlZmluZSBPUF9TQkMJMHgwMGMwMDAwMAorI2RlZmluZSBPUF9SU0MJMHgwMGUwMDAwMAorI2RlZmluZSBPUF9PUlIJMHgwMTgwMDAwMAorI2RlZmluZSBPUF9NT1YJMHgwMWEwMDAwMAorI2RlZmluZSBPUF9CSUMJMHgwMWMwMDAwMAorI2RlZmluZSBPUF9NVk4JMHgwMWUwMDAwMAorCitzdGF0aWMgdW5zaWduZWQgbG9uZworZ2V0X2JyYW5jaF9hZGRyZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGxvbmcgcGMsIHVuc2lnbmVkIGxvbmcgaW5zbikKK3sKKwl1MzIgYWx0ID0gMDsKKworCXN3aXRjaCAoaW5zbiAmIDB4MGUwMDAwMDApIHsKKwljYXNlIDB4MDAwMDAwMDA6CisJY2FzZSAweDAyMDAwMDAwOiB7CisJCS8qCisJCSAqIGRhdGEgcHJvY2Vzc2luZworCQkgKi8KKwkJbG9uZyBhbHVvcDEsIGFsdW9wMiwgY2NiaXQ7CisKKwkJaWYgKChpbnNuICYgMHhmMDAwKSAhPSAweGYwMDApCisJCQlicmVhazsKKworCQlhbHVvcDEgPSBwdHJhY2VfZ2V0cm4oY2hpbGQsIGluc24pOworCQlhbHVvcDIgPSBwdHJhY2VfZ2V0YWx1b3AyKGNoaWxkLCBpbnNuKTsKKwkJY2NiaXQgID0gZ2V0X3VzZXJfcmVnKGNoaWxkLCBSRUdfUFNSKSAmIFBTUl9DX0JJVCA/IDEgOiAwOworCisJCXN3aXRjaCAoaW5zbiAmIE9QX01BU0spIHsKKwkJY2FzZSBPUF9BTkQ6IGFsdCA9IGFsdW9wMSAmIGFsdW9wMjsJCWJyZWFrOworCQljYXNlIE9QX0VPUjogYWx0ID0gYWx1b3AxIF4gYWx1b3AyOwkJYnJlYWs7CisJCWNhc2UgT1BfU1VCOiBhbHQgPSBhbHVvcDEgLSBhbHVvcDI7CQlicmVhazsKKwkJY2FzZSBPUF9SU0I6IGFsdCA9IGFsdW9wMiAtIGFsdW9wMTsJCWJyZWFrOworCQljYXNlIE9QX0FERDogYWx0ID0gYWx1b3AxICsgYWx1b3AyOwkJYnJlYWs7CisJCWNhc2UgT1BfQURDOiBhbHQgPSBhbHVvcDEgKyBhbHVvcDIgKyBjY2JpdDsJYnJlYWs7CisJCWNhc2UgT1BfU0JDOiBhbHQgPSBhbHVvcDEgLSBhbHVvcDIgKyBjY2JpdDsJYnJlYWs7CisJCWNhc2UgT1BfUlNDOiBhbHQgPSBhbHVvcDIgLSBhbHVvcDEgKyBjY2JpdDsJYnJlYWs7CisJCWNhc2UgT1BfT1JSOiBhbHQgPSBhbHVvcDEgfCBhbHVvcDI7CQlicmVhazsKKwkJY2FzZSBPUF9NT1Y6IGFsdCA9IGFsdW9wMjsJCQlicmVhazsKKwkJY2FzZSBPUF9CSUM6IGFsdCA9IGFsdW9wMSAmIH5hbHVvcDI7CQlicmVhazsKKwkJY2FzZSBPUF9NVk46IGFsdCA9IH5hbHVvcDI7CQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCisJY2FzZSAweDA0MDAwMDAwOgorCWNhc2UgMHgwNjAwMDAwMDoKKwkJLyoKKwkJICogbGRyCisJCSAqLworCQlpZiAoKGluc24gJiAweDAwMTBmMDAwKSA9PSAweDAwMTBmMDAwKSB7CisJCQl1bnNpZ25lZCBsb25nIGJhc2U7CisKKwkJCWJhc2UgPSBwdHJhY2VfZ2V0cm4oY2hpbGQsIGluc24pOworCQkJaWYgKGluc24gJiAxIDw8IDI0KSB7CisJCQkJbG9uZyBhbHVvcDI7CisKKwkJCQlpZiAoaW5zbiAmIDB4MDIwMDAwMDApCisJCQkJCWFsdW9wMiA9IHB0cmFjZV9nZXRsZHJvcDIoY2hpbGQsIGluc24pOworCQkJCWVsc2UKKwkJCQkJYWx1b3AyID0gaW5zbiAmIDB4ZmZmOworCisJCQkJaWYgKGluc24gJiAxIDw8IDIzKQorCQkJCQliYXNlICs9IGFsdW9wMjsKKwkJCQllbHNlCisJCQkJCWJhc2UgLT0gYWx1b3AyOworCQkJfQorCQkJaWYgKHJlYWRfdTMyKGNoaWxkLCBiYXNlLCAmYWx0KSA9PSAwKQorCQkJCWFsdCA9IHBjX3BvaW50ZXIoYWx0KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgMHgwODAwMDAwMDoKKwkJLyoKKwkJICogbGRtCisJCSAqLworCQlpZiAoKGluc24gJiAweDAwMTA4MDAwKSA9PSAweDAwMTA4MDAwKSB7CisJCQl1bnNpZ25lZCBsb25nIGJhc2U7CisJCQl1bnNpZ25lZCBpbnQgbnJfcmVnczsKKworCQkJaWYgKGluc24gJiAoMSA8PCAyMykpIHsKKwkJCQlucl9yZWdzID0gaHdlaWdodDE2KGluc24gJiA2NTUzNSkgPDwgMjsKKworCQkJCWlmICghKGluc24gJiAoMSA8PCAyNCkpKQorCQkJCQlucl9yZWdzIC09IDQ7CisJCQl9IGVsc2UgeworCQkJCWlmIChpbnNuICYgKDEgPDwgMjQpKQorCQkJCQlucl9yZWdzID0gLTQ7CisJCQkJZWxzZQorCQkJCQlucl9yZWdzID0gMDsKKwkJCX0KKworCQkJYmFzZSA9IHB0cmFjZV9nZXRybihjaGlsZCwgaW5zbik7CisKKwkJCWlmIChyZWFkX3UzMihjaGlsZCwgYmFzZSArIG5yX3JlZ3MsICZhbHQpID09IDApCisJCQkJYWx0ID0gcGNfcG9pbnRlcihhbHQpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIDB4MGEwMDAwMDA6IHsKKwkJLyoKKwkJICogYmwgb3IgYgorCQkgKi8KKwkJc2lnbmVkIGxvbmcgZGlzcGw7CisJCS8qIEl0J3MgYSBicmFuY2gvYnJhbmNoIGxpbms6IGluc3RlYWQgb2YgdHJ5aW5nIHRvCisJCSAqIGZpZ3VyZSBvdXQgd2hldGhlciB0aGUgYnJhbmNoIHdpbGwgYmUgdGFrZW4gb3Igbm90LAorCQkgKiB3ZSdsbCBwdXQgYSBicmVha3BvaW50IGF0IGJvdGggbG9jYXRpb25zLiAgVGhpcyBpcworCQkgKiBzaW1wbGVyLCBtb3JlIHJlbGlhYmxlLCBhbmQgcHJvYmFibHkgbm90IGEgd2hvbGUgbG90CisJCSAqIHNsb3dlciB0aGFuIHRoZSBhbHRlcm5hdGl2ZSBhcHByb2FjaCBvZiBlbXVsYXRpbmcgdGhlCisJCSAqIGJyYW5jaC4KKwkJICovCisJCWRpc3BsID0gKGluc24gJiAweDAwZmZmZmZmKSA8PCA4OworCQlkaXNwbCA9IChkaXNwbCA+PiA2KSArIDg7CisJCWlmIChkaXNwbCAhPSAwICYmIGRpc3BsICE9IDQpCisJCQlhbHQgPSBwYyArIGRpc3BsOworCSAgICB9CisJICAgIGJyZWFrOworCX0KKworCXJldHVybiBhbHQ7Cit9CisKK3N0YXRpYyBpbnQKK3N3YXBfaW5zbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkgIHZvaWQgKm9sZF9pbnNuLCB2b2lkICpuZXdfaW5zbiwgaW50IHNpemUpCit7CisJaW50IHJldDsKKworCXJldCA9IGFjY2Vzc19wcm9jZXNzX3ZtKHRhc2ssIGFkZHIsIG9sZF9pbnNuLCBzaXplLCAwKTsKKwlpZiAocmV0ID09IHNpemUpCisJCXJldCA9IGFjY2Vzc19wcm9jZXNzX3ZtKHRhc2ssIGFkZHIsIG5ld19pbnNuLCBzaXplLCAxKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorYWRkX2JyZWFrcG9pbnQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgZGVidWdfaW5mbyAqZGJnLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJaW50IG5yID0gZGJnLT5uc2F2ZWQ7CisKKwlpZiAobnIgPCAyKSB7CisJCXUzMiBuZXdfaW5zbiA9IEJSRUFLSU5TVF9BUk07CisJCWludCByZXM7CisKKwkJcmVzID0gc3dhcF9pbnNuKHRhc2ssIGFkZHIsICZkYmctPmJwW25yXS5pbnNuLCAmbmV3X2luc24sIDQpOworCisJCWlmIChyZXMgPT0gNCkgeworCQkJZGJnLT5icFtucl0uYWRkcmVzcyA9IGFkZHI7CisJCQlkYmctPm5zYXZlZCArPSAxOworCQl9CisJfSBlbHNlCisJCXByaW50ayhLRVJOX0VSUiAicHRyYWNlOiB0b28gbWFueSBicmVha3BvaW50c1xuIik7Cit9CisKKy8qCisgKiBDbGVhciBvbmUgYnJlYWtwb2ludCBpbiB0aGUgdXNlciBwcm9ncmFtLiAgV2UgY29weSB3aGF0IHRoZSBoYXJkd2FyZQorICogZG9lcyBhbmQgdXNlIGJpdCAwIG9mIHRoZSBhZGRyZXNzIHRvIGluZGljYXRlIHdoZXRoZXIgdGhpcyBpcyBhIFRodW1iCisgKiBicmVha3BvaW50IG9yIGFuIEFSTSBicmVha3BvaW50LgorICovCitzdGF0aWMgdm9pZCBjbGVhcl9icmVha3BvaW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGRlYnVnX2VudHJ5ICpicCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBicC0+YWRkcmVzczsKKwl1bmlvbiBkZWJ1Z19pbnNuIG9sZF9pbnNuOworCWludCByZXQ7CisKKwlpZiAoYWRkciAmIDEpIHsKKwkJcmV0ID0gc3dhcF9pbnNuKHRhc2ssIGFkZHIgJiB+MSwgJm9sZF9pbnNuLnRodW1iLAorCQkJCSZicC0+aW5zbi50aHVtYiwgMik7CisKKwkJaWYgKHJldCAhPSAyIHx8IG9sZF9pbnNuLnRodW1iICE9IEJSRUFLSU5TVF9USFVNQikKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6JWQ6IGNvcnJ1cHRlZCBUaHVtYiBicmVha3BvaW50IGF0ICIKKwkJCQkiMHglMDhseCAoMHglMDR4KVxuIiwgdGFzay0+Y29tbSwgdGFzay0+cGlkLAorCQkJCWFkZHIsIG9sZF9pbnNuLnRodW1iKTsKKwl9IGVsc2UgeworCQlyZXQgPSBzd2FwX2luc24odGFzaywgYWRkciAmIH4zLCAmb2xkX2luc24uYXJtLAorCQkJCSZicC0+aW5zbi5hcm0sIDQpOworCisJCWlmIChyZXQgIT0gNCB8fCBvbGRfaW5zbi5hcm0gIT0gQlJFQUtJTlNUX0FSTSkKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6JWQ6IGNvcnJ1cHRlZCBBUk0gYnJlYWtwb2ludCBhdCAiCisJCQkJIjB4JTA4bHggKDB4JTA4eClcbiIsIHRhc2stPmNvbW0sIHRhc2stPnBpZCwKKwkJCQlhZGRyLCBvbGRfaW5zbi5hcm0pOworCX0KK30KKwordm9pZCBwdHJhY2Vfc2V0X2JwdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQoreworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCXVuc2lnbmVkIGxvbmcgcGM7CisJdTMyIGluc247CisJaW50IHJlczsKKworCXJlZ3MgPSBnZXRfdXNlcl9yZWdzKGNoaWxkKTsKKwlwYyA9IGluc3RydWN0aW9uX3BvaW50ZXIocmVncyk7CisKKwlpZiAodGh1bWJfbW9kZShyZWdzKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJwdHJhY2U6IGNhbid0IGhhbmRsZSB0aHVtYiBtb2RlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXJlcyA9IHJlYWRfaW5zdHIoY2hpbGQsIHBjLCAmaW5zbik7CisJaWYgKCFyZXMpIHsKKwkJc3RydWN0IGRlYnVnX2luZm8gKmRiZyA9ICZjaGlsZC0+dGhyZWFkLmRlYnVnOworCQl1bnNpZ25lZCBsb25nIGFsdDsKKworCQlkYmctPm5zYXZlZCA9IDA7CisKKwkJYWx0ID0gZ2V0X2JyYW5jaF9hZGRyZXNzKGNoaWxkLCBwYywgaW5zbik7CisJCWlmIChhbHQpCisJCQlhZGRfYnJlYWtwb2ludChjaGlsZCwgZGJnLCBhbHQpOworCisJCS8qCisJCSAqIE5vdGUgdGhhdCB3ZSBpZ25vcmUgdGhlIHJlc3VsdCBvZiBzZXR0aW5nIHRoZSBhYm92ZQorCQkgKiBicmVha3BvaW50IHNpbmNlIGl0IG1heSBmYWlsLiAgV2hlbiBpdCBkb2VzLCB0aGlzIGlzCisJCSAqIG5vdCBzbyBtdWNoIGFuIGVycm9yLCBidXQgYSBmb3Jld2FybmluZyB0aGF0IHdlIG1heQorCQkgKiBiZSByZWNlaXZpbmcgYSBwcmVmZXRjaCBhYm9ydCBzaG9ydGx5LgorCQkgKgorCQkgKiBJZiB3ZSBkb24ndCBzZXQgdGhpcyBicmVha3BvaW50IGhlcmUsIHRoZW4gd2UgY2FuCisJCSAqIGxvc2UgY29udHJvbCBvZiB0aGUgdGhyZWFkIGR1cmluZyBzaW5nbGUgc3RlcHBpbmcuCisJCSAqLworCQlpZiAoIWFsdCB8fCBwcmVkaWNhdGUoaW5zbikgIT0gUFJFRElDQVRFX0FMV0FZUykKKwkJCWFkZF9icmVha3BvaW50KGNoaWxkLCBkYmcsIHBjICsgNCk7CisJfQorfQorCisvKgorICogRW5zdXJlIG5vIHNpbmdsZS1zdGVwIGJyZWFrcG9pbnQgaXMgcGVuZGluZy4gIFJldHVybnMgbm9uLXplcm8KKyAqIHZhbHVlIGlmIGNoaWxkIHdhcyBiZWluZyBzaW5nbGUtc3RlcHBlZC4KKyAqLwordm9pZCBwdHJhY2VfY2FuY2VsX2JwdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQoreworCWludCBpLCBuc2F2ZWQgPSBjaGlsZC0+dGhyZWFkLmRlYnVnLm5zYXZlZDsKKworCWNoaWxkLT50aHJlYWQuZGVidWcubnNhdmVkID0gMDsKKworCWlmIChuc2F2ZWQgPiAyKSB7CisJCXByaW50aygicHRyYWNlX2NhbmNlbF9icHQ6IGJvZ3VzIG5zYXZlZDogJWQhXG4iLCBuc2F2ZWQpOworCQluc2F2ZWQgPSAyOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBuc2F2ZWQ7IGkrKykKKwkJY2xlYXJfYnJlYWtwb2ludChjaGlsZCwgJmNoaWxkLT50aHJlYWQuZGVidWcuYnBbaV0pOworfQorCisvKgorICogQ2FsbGVkIGJ5IGtlcm5lbC9wdHJhY2UuYyB3aGVuIGRldGFjaGluZy4uCisgKgorICogTWFrZSBzdXJlIHRoZSBzaW5nbGUgc3RlcCBiaXQgaXMgbm90IHNldC4KKyAqLwordm9pZCBwdHJhY2VfZGlzYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQoreworCWNoaWxkLT5wdHJhY2UgJj0gflBUX1NJTkdMRVNURVA7CisJcHRyYWNlX2NhbmNlbF9icHQoY2hpbGQpOworfQorCisvKgorICogSGFuZGxlIGhpdHRpbmcgYSBicmVha3BvaW50LgorICovCit2b2lkIHB0cmFjZV9icmVhayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc2lnaW5mb190IGluZm87CisKKwlwdHJhY2VfY2FuY2VsX2JwdCh0c2spOworCisJaW5mby5zaV9zaWdubyA9IFNJR1RSQVA7CisJaW5mby5zaV9lcnJubyA9IDA7CisJaW5mby5zaV9jb2RlICA9IFRSQVBfQlJLUFQ7CisJaW5mby5zaV9hZGRyICA9ICh2b2lkIF9fdXNlciAqKWluc3RydWN0aW9uX3BvaW50ZXIocmVncyk7CisKKwlmb3JjZV9zaWdfaW5mbyhTSUdUUkFQLCAmaW5mbywgdHNrKTsKK30KKworc3RhdGljIGludCBicmVha190cmFwKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaW5zdHIpCit7CisJcHRyYWNlX2JyZWFrKGN1cnJlbnQsIHJlZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHVuZGVmX2hvb2sgYXJtX2JyZWFrX2hvb2sgPSB7CisJLmluc3RyX21hc2sJPSAweDBmZmZmZmZmLAorCS5pbnN0cl92YWwJPSAweDA3ZjAwMWYwLAorCS5jcHNyX21hc2sJPSBQU1JfVF9CSVQsCisJLmNwc3JfdmFsCT0gMCwKKwkuZm4JCT0gYnJlYWtfdHJhcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdW5kZWZfaG9vayB0aHVtYl9icmVha19ob29rID0geworCS5pbnN0cl9tYXNrCT0gMHhmZmZmLAorCS5pbnN0cl92YWwJPSAweGRlMDEsCisJLmNwc3JfbWFzawk9IFBTUl9UX0JJVCwKKwkuY3Bzcl92YWwJPSBQU1JfVF9CSVQsCisJLmZuCQk9IGJyZWFrX3RyYXAsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwdHJhY2VfYnJlYWtfaW5pdCh2b2lkKQoreworCXJlZ2lzdGVyX3VuZGVmX2hvb2soJmFybV9icmVha19ob29rKTsKKwlyZWdpc3Rlcl91bmRlZl9ob29rKCZ0aHVtYl9icmVha19ob29rKTsKKwlyZXR1cm4gMDsKK30KKworY29yZV9pbml0Y2FsbChwdHJhY2VfYnJlYWtfaW5pdCk7CisKKy8qCisgKiBSZWFkIHRoZSB3b3JkIGF0IG9mZnNldCAib2ZmIiBpbnRvIHRoZSAic3RydWN0IHVzZXIiLiAgV2UKKyAqIGFjdHVhbGx5IGFjY2VzcyB0aGUgcHRfcmVncyBzdG9yZWQgb24gdGhlIGtlcm5lbCBzdGFjay4KKyAqLworc3RhdGljIGludCBwdHJhY2VfcmVhZF91c2VyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIG9mZiwKKwkJCSAgICB1bnNpZ25lZCBsb25nIF9fdXNlciAqcmV0KQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJaWYgKG9mZiAmIDMgfHwgb2ZmID49IHNpemVvZihzdHJ1Y3QgdXNlcikpCisJCXJldHVybiAtRUlPOworCisJdG1wID0gMDsKKwlpZiAob2ZmIDwgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSkKKwkJdG1wID0gZ2V0X3VzZXJfcmVnKHRzaywgb2ZmID4+IDIpOworCisJcmV0dXJuIHB1dF91c2VyKHRtcCwgcmV0KTsKK30KKworLyoKKyAqIFdyaXRlIHRoZSB3b3JkIGF0IG9mZnNldCAib2ZmIiBpbnRvICJzdHJ1Y3QgdXNlciIuICBXZQorICogYWN0dWFsbHkgYWNjZXNzIHRoZSBwdF9yZWdzIHN0b3JlZCBvbiB0aGUga2VybmVsIHN0YWNrLgorICovCitzdGF0aWMgaW50IHB0cmFjZV93cml0ZV91c2VyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIG9mZiwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJaWYgKG9mZiAmIDMgfHwgb2ZmID49IHNpemVvZihzdHJ1Y3QgdXNlcikpCisJCXJldHVybiAtRUlPOworCisJaWYgKG9mZiA+PSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBwdXRfdXNlcl9yZWcodHNrLCBvZmYgPj4gMiwgdmFsKTsKK30KKworLyoKKyAqIEdldCBhbGwgdXNlciBpbnRlZ2VyIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIGludCBwdHJhY2VfZ2V0cmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdm9pZCBfX3VzZXIgKnVyZWdzKQoreworCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gZ2V0X3VzZXJfcmVncyh0c2spOworCisJcmV0dXJuIGNvcHlfdG9fdXNlcih1cmVncywgcmVncywgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSkgPyAtRUZBVUxUIDogMDsKK30KKworLyoKKyAqIFNldCBhbGwgdXNlciBpbnRlZ2VyIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIGludCBwdHJhY2Vfc2V0cmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdm9pZCBfX3VzZXIgKnVyZWdzKQoreworCXN0cnVjdCBwdF9yZWdzIG5ld3JlZ3M7CisJaW50IHJldDsKKworCXJldCA9IC1FRkFVTFQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdyZWdzLCB1cmVncywgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSkgPT0gMCkgeworCQlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGdldF91c2VyX3JlZ3ModHNrKTsKKworCQlyZXQgPSAtRUlOVkFMOworCQlpZiAodmFsaWRfdXNlcl9yZWdzKCZuZXdyZWdzKSkgeworCQkJKnJlZ3MgPSBuZXdyZWdzOworCQkJcmV0ID0gMDsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBHZXQgdGhlIGNoaWxkIEZQVSBzdGF0ZS4KKyAqLworc3RhdGljIGludCBwdHJhY2VfZ2V0ZnByZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB2b2lkIF9fdXNlciAqdWZwKQoreworCXJldHVybiBjb3B5X3RvX3VzZXIodWZwLCAmdHNrLT50aHJlYWRfaW5mby0+ZnBzdGF0ZSwKKwkJCSAgICBzaXplb2Yoc3RydWN0IHVzZXJfZnApKSA/IC1FRkFVTFQgOiAwOworfQorCisvKgorICogU2V0IHRoZSBjaGlsZCBGUFUgc3RhdGUuCisgKi8KK3N0YXRpYyBpbnQgcHRyYWNlX3NldGZwcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdm9pZCBfX3VzZXIgKnVmcCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IHRzay0+dGhyZWFkX2luZm87CisJdGhyZWFkLT51c2VkX2NwWzFdID0gdGhyZWFkLT51c2VkX2NwWzJdID0gMTsKKwlyZXR1cm4gY29weV9mcm9tX3VzZXIoJnRocmVhZC0+ZnBzdGF0ZSwgdWZwLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB1c2VyX2ZwKSkgPyAtRUZBVUxUIDogMDsKK30KKworI2lmZGVmIENPTkZJR19JV01NWFQKKworLyoKKyAqIEdldCB0aGUgY2hpbGQgaVdNTVh0IHN0YXRlLgorICovCitzdGF0aWMgaW50IHB0cmFjZV9nZXR3bW14cmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdm9pZCBfX3VzZXIgKnVmcCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IHRzay0+dGhyZWFkX2luZm87CisJdm9pZCAqcHRyID0gJnRocmVhZC0+ZnBzdGF0ZTsKKworCWlmICghdGVzdF90aV90aHJlYWRfZmxhZyh0aHJlYWQsIFRJRl9VU0lOR19JV01NWFQpKQorCQlyZXR1cm4gLUVOT0RBVEE7CisJaXdtbXh0X3Rhc2tfZGlzYWJsZSh0aHJlYWQpOyAgLyogZm9yY2UgaXQgdG8gcmFtICovCisJLyogVGhlIGlXTU1YdCBzdGF0ZSBpcyBzdG9yZWQgZG91Ymxld29yZC1hbGlnbmVkLiAgKi8KKwlpZiAoKChsb25nKSBwdHIpICYgNCkKKwkJcHRyICs9IDQ7CisJcmV0dXJuIGNvcHlfdG9fdXNlcih1ZnAsIHB0ciwgMHg5OCkgPyAtRUZBVUxUIDogMDsKK30KKworLyoKKyAqIFNldCB0aGUgY2hpbGQgaVdNTVh0IHN0YXRlLgorICovCitzdGF0aWMgaW50IHB0cmFjZV9zZXR3bW14cmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdm9pZCBfX3VzZXIgKnVmcCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IHRzay0+dGhyZWFkX2luZm87CisJdm9pZCAqcHRyID0gJnRocmVhZC0+ZnBzdGF0ZTsKKworCWlmICghdGVzdF90aV90aHJlYWRfZmxhZyh0aHJlYWQsIFRJRl9VU0lOR19JV01NWFQpKQorCQlyZXR1cm4gLUVBQ0NFUzsKKwlpd21teHRfdGFza19yZWxlYXNlKHRocmVhZCk7ICAvKiBmb3JjZSBhIHJlbG9hZCAqLworCS8qIFRoZSBpV01NWHQgc3RhdGUgaXMgc3RvcmVkIGRvdWJsZXdvcmQtYWxpZ25lZC4gICovCisJaWYgKCgobG9uZykgcHRyKSAmIDQpCisJCXB0ciArPSA0OworCXJldHVybiBjb3B5X2Zyb21fdXNlcihwdHIsIHVmcCwgMHg5OCkgPyAtRUZBVUxUIDogMDsKK30KKworI2VuZGlmCisKK3N0YXRpYyBpbnQgZG9fcHRyYWNlKGludCByZXF1ZXN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBsb25nIGFkZHIsIGxvbmcgZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKwlpbnQgcmV0OworCisJc3dpdGNoIChyZXF1ZXN0KSB7CisJCS8qCisJCSAqIHJlYWQgd29yZCBhdCBsb2NhdGlvbiAiYWRkciIgaW4gdGhlIGNoaWxkIHByb2Nlc3MuCisJCSAqLworCQljYXNlIFBUUkFDRV9QRUVLVEVYVDoKKwkJY2FzZSBQVFJBQ0VfUEVFS0RBVEE6CisJCQlyZXQgPSBhY2Nlc3NfcHJvY2Vzc192bShjaGlsZCwgYWRkciwgJnRtcCwKKwkJCQkJCXNpemVvZih1bnNpZ25lZCBsb25nKSwgMCk7CisJCQlpZiAocmV0ID09IHNpemVvZih1bnNpZ25lZCBsb25nKSkKKwkJCQlyZXQgPSBwdXRfdXNlcih0bXAsICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKSBkYXRhKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSAtRUlPOworCQkJYnJlYWs7CisKKwkJY2FzZSBQVFJBQ0VfUEVFS1VTUjoKKwkJCXJldCA9IHB0cmFjZV9yZWFkX3VzZXIoY2hpbGQsIGFkZHIsICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWRhdGEpOworCQkJYnJlYWs7CisKKwkJLyoKKwkJICogd3JpdGUgdGhlIHdvcmQgYXQgbG9jYXRpb24gYWRkci4KKwkJICovCisJCWNhc2UgUFRSQUNFX1BPS0VURVhUOgorCQljYXNlIFBUUkFDRV9QT0tFREFUQToKKwkJCXJldCA9IGFjY2Vzc19wcm9jZXNzX3ZtKGNoaWxkLCBhZGRyLCAmZGF0YSwKKwkJCQkJCXNpemVvZih1bnNpZ25lZCBsb25nKSwgMSk7CisJCQlpZiAocmV0ID09IHNpemVvZih1bnNpZ25lZCBsb25nKSkKKwkJCQlyZXQgPSAwOworCQkJZWxzZQorCQkJCXJldCA9IC1FSU87CisJCQlicmVhazsKKworCQljYXNlIFBUUkFDRV9QT0tFVVNSOgorCQkJcmV0ID0gcHRyYWNlX3dyaXRlX3VzZXIoY2hpbGQsIGFkZHIsIGRhdGEpOworCQkJYnJlYWs7CisKKwkJLyoKKwkJICogY29udGludWUvcmVzdGFydCBhbmQgc3RvcCBhdCBuZXh0IChyZXR1cm4gZnJvbSkgc3lzY2FsbAorCQkgKi8KKwkJY2FzZSBQVFJBQ0VfU1lTQ0FMTDoKKwkJY2FzZSBQVFJBQ0VfQ09OVDoKKwkJCXJldCA9IC1FSU87CisJCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJCQlicmVhazsKKwkJCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9TWVNDQUxMKQorCQkJCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKKwkJCWVsc2UKKwkJCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKKwkJCWNoaWxkLT5leGl0X2NvZGUgPSBkYXRhOworCQkJLyogbWFrZSBzdXJlIHNpbmdsZS1zdGVwIGJyZWFrcG9pbnQgaXMgZ29uZS4gKi8KKwkJCWNoaWxkLT5wdHJhY2UgJj0gflBUX1NJTkdMRVNURVA7CisJCQlwdHJhY2VfY2FuY2VsX2JwdChjaGlsZCk7CisJCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIG1ha2UgdGhlIGNoaWxkIGV4aXQuICBCZXN0IEkgY2FuIGRvIGlzIHNlbmQgaXQgYSBzaWdraWxsLgorCQkgKiBwZXJoYXBzIGl0IHNob3VsZCBiZSBwdXQgaW4gdGhlIHN0YXR1cyB0aGF0IGl0IHdhbnRzIHRvCisJCSAqIGV4aXQuCisJCSAqLworCQljYXNlIFBUUkFDRV9LSUxMOgorCQkJLyogbWFrZSBzdXJlIHNpbmdsZS1zdGVwIGJyZWFrcG9pbnQgaXMgZ29uZS4gKi8KKwkJCWNoaWxkLT5wdHJhY2UgJj0gflBUX1NJTkdMRVNURVA7CisJCQlwdHJhY2VfY2FuY2VsX2JwdChjaGlsZCk7CisJCQlpZiAoY2hpbGQtPmV4aXRfc3RhdGUgIT0gRVhJVF9aT01CSUUpIHsKKwkJCQljaGlsZC0+ZXhpdF9jb2RlID0gU0lHS0lMTDsKKwkJCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOworCQkJfQorCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIGV4ZWN1dGUgc2luZ2xlIGluc3RydWN0aW9uLgorCQkgKi8KKwkJY2FzZSBQVFJBQ0VfU0lOR0xFU1RFUDoKKwkJCXJldCA9IC1FSU87CisJCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJCQlicmVhazsKKwkJCWNoaWxkLT5wdHJhY2UgfD0gUFRfU0lOR0xFU1RFUDsKKwkJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOworCQkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7CisJCQkvKiBnaXZlIGl0IGEgY2hhbmNlIHRvIHJ1bi4gKi8KKwkJCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7CisJCQlyZXQgPSAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBQVFJBQ0VfREVUQUNIOgorCQkJcmV0ID0gcHRyYWNlX2RldGFjaChjaGlsZCwgZGF0YSk7CisJCQlicmVhazsKKworCQljYXNlIFBUUkFDRV9HRVRSRUdTOgorCQkJcmV0ID0gcHRyYWNlX2dldHJlZ3MoY2hpbGQsICh2b2lkIF9fdXNlciAqKWRhdGEpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQVFJBQ0VfU0VUUkVHUzoKKwkJCXJldCA9IHB0cmFjZV9zZXRyZWdzKGNoaWxkLCAodm9pZCBfX3VzZXIgKilkYXRhKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUFRSQUNFX0dFVEZQUkVHUzoKKwkJCXJldCA9IHB0cmFjZV9nZXRmcHJlZ3MoY2hpbGQsICh2b2lkIF9fdXNlciAqKWRhdGEpOworCQkJYnJlYWs7CisJCQorCQljYXNlIFBUUkFDRV9TRVRGUFJFR1M6CisJCQlyZXQgPSBwdHJhY2Vfc2V0ZnByZWdzKGNoaWxkLCAodm9pZCBfX3VzZXIgKilkYXRhKTsKKwkJCWJyZWFrOworCisjaWZkZWYgQ09ORklHX0lXTU1YVAorCQljYXNlIFBUUkFDRV9HRVRXTU1YUkVHUzoKKwkJCXJldCA9IHB0cmFjZV9nZXR3bW14cmVncyhjaGlsZCwgKHZvaWQgX191c2VyICopZGF0YSk7CisJCQlicmVhazsKKworCQljYXNlIFBUUkFDRV9TRVRXTU1YUkVHUzoKKwkJCXJldCA9IHB0cmFjZV9zZXR3bW14cmVncyhjaGlsZCwgKHZvaWQgX191c2VyICopZGF0YSk7CisJCQlicmVhazsKKyNlbmRpZgorCisJCWNhc2UgUFRSQUNFX0dFVF9USFJFQURfQVJFQToKKwkJCXJldCA9IHB1dF91c2VyKGNoaWxkLT50aHJlYWRfaW5mby0+dHBfdmFsdWUsCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKSBkYXRhKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlyZXQgPSBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCithc21saW5rYWdlIGludCBzeXNfcHRyYWNlKGxvbmcgcmVxdWVzdCwgbG9uZyBwaWQsIGxvbmcgYWRkciwgbG9uZyBkYXRhKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQ7CisJaW50IHJldDsKKworCWxvY2tfa2VybmVsKCk7CisJcmV0ID0gLUVQRVJNOworCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9UUkFDRU1FKSB7CisJCS8qIGFyZSB3ZSBhbHJlYWR5IGJlaW5nIHRyYWNlZD8gKi8KKwkJaWYgKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpCisJCQlnb3RvIG91dDsKKwkJcmV0ID0gc2VjdXJpdHlfcHRyYWNlKGN1cnJlbnQtPnBhcmVudCwgY3VycmVudCk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwkJLyogc2V0IHRoZSBwdHJhY2UgYml0IGluIHRoZSBwcm9jZXNzIGZsYWdzLiAqLworCQljdXJyZW50LT5wdHJhY2UgfD0gUFRfUFRSQUNFRDsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXQ7CisJfQorCXJldCA9IC1FU1JDSDsKKwlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCWNoaWxkID0gZmluZF90YXNrX2J5X3BpZChwaWQpOworCWlmIChjaGlsZCkKKwkJZ2V0X3Rhc2tfc3RydWN0KGNoaWxkKTsKKwlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJaWYgKCFjaGlsZCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSAtRVBFUk07CisJaWYgKHBpZCA9PSAxKQkJLyogeW91IG1heSBub3QgbWVzcyB3aXRoIGluaXQgKi8KKwkJZ290byBvdXRfdHNrOworCisJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX0FUVEFDSCkgeworCQlyZXQgPSBwdHJhY2VfYXR0YWNoKGNoaWxkKTsKKwkJZ290byBvdXRfdHNrOworCX0KKwlyZXQgPSBwdHJhY2VfY2hlY2tfYXR0YWNoKGNoaWxkLCByZXF1ZXN0ID09IFBUUkFDRV9LSUxMKTsKKwlpZiAocmV0ID09IDApCisJCXJldCA9IGRvX3B0cmFjZShyZXF1ZXN0LCBjaGlsZCwgYWRkciwgZGF0YSk7CisKK291dF90c2s6CisJcHV0X3Rhc2tfc3RydWN0KGNoaWxkKTsKK291dDoKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHJldDsKK30KKworYXNtbGlua2FnZSB2b2lkIHN5c2NhbGxfdHJhY2UoaW50IHdoeSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgbG9uZyBpcDsKKworCWlmICghdGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkpCisJCXJldHVybjsKKwlpZiAoIShjdXJyZW50LT5wdHJhY2UgJiBQVF9QVFJBQ0VEKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBTYXZlIElQLiAgSVAgaXMgdXNlZCB0byBkZW5vdGUgc3lzY2FsbCBlbnRyeS9leGl0OgorCSAqICBJUCA9IDAgLT4gZW50cnksID0gMSAtPiBleGl0CisJICovCisJaXAgPSByZWdzLT5BUk1faXA7CisJcmVncy0+QVJNX2lwID0gd2h5OworCisJLyogdGhlIDB4ODAgcHJvdmlkZXMgYSB3YXkgZm9yIHRoZSB0cmFjaW5nIHBhcmVudCB0byBkaXN0aW5ndWlzaAorCSAgIGJldHdlZW4gYSBzeXNjYWxsIHN0b3AgYW5kIFNJR1RSQVAgZGVsaXZlcnkgKi8KKwlwdHJhY2Vfbm90aWZ5KFNJR1RSQVAgfCAoKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1RSQUNFU1lTR09PRCkKKwkJCQkgPyAweDgwIDogMCkpOworCS8qCisJICogdGhpcyBpc24ndCB0aGUgc2FtZSBhcyBjb250aW51aW5nIHdpdGggYSBzaWduYWwsIGJ1dCBpdCB3aWxsIGRvCisJICogZm9yIG5vcm1hbCB1c2UuICBzdHJhY2Ugb25seSBjb250aW51ZXMgd2l0aCBhIHNpZ25hbCBpZiB0aGUKKwkgKiBzdG9wcGluZyBzaWduYWwgaXMgbm90IFNJR1RSQVAuICAtYnJsCisJICovCisJaWYgKGN1cnJlbnQtPmV4aXRfY29kZSkgeworCQlzZW5kX3NpZyhjdXJyZW50LT5leGl0X2NvZGUsIGN1cnJlbnQsIDEpOworCQljdXJyZW50LT5leGl0X2NvZGUgPSAwOworCX0KKwlyZWdzLT5BUk1faXAgPSBpcDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuaCBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2NhZDEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMC0yMDAzIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KK2V4dGVybiB2b2lkIHB0cmFjZV9jYW5jZWxfYnB0KHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHB0cmFjZV9zZXRfYnB0KHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHB0cmFjZV9icmVhayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3RydWN0IHB0X3JlZ3MgKik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc2VtYXBob3JlLmMgYi9hcmNoL2FybS9rZXJuZWwvc2VtYXBob3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM0MjNlMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zZW1hcGhvcmUuYwpAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqICBBUk0gc2VtYXBob3JlIGltcGxlbWVudGF0aW9uLCB0YWtlbiBmcm9tCisgKgorICogIGkzODYgc2VtYXBob3JlIGltcGxlbWVudGF0aW9uLgorICoKKyAqICAoQykgQ29weXJpZ2h0IDE5OTkgTGludXMgVG9ydmFsZHMKKyAqCisgKiAgTW9kaWZpZWQgZm9yIEFSTSBieSBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKworLyoKKyAqIFNlbWFwaG9yZXMgYXJlIGltcGxlbWVudGVkIHVzaW5nIGEgdHdvLXdheSBjb3VudGVyOgorICogVGhlICJjb3VudCIgdmFyaWFibGUgaXMgZGVjcmVtZW50ZWQgZm9yIGVhY2ggcHJvY2VzcworICogdGhhdCB0cmllcyB0byBhY3F1aXJlIHRoZSBzZW1hcGhvcmUsIHdoaWxlIHRoZSAic2xlZXBpbmciCisgKiB2YXJpYWJsZSBpcyBhIGNvdW50IG9mIHN1Y2ggYWNxdWlyZXMuCisgKgorICogTm90YWJseSwgdGhlIGlubGluZSAidXAoKSIgYW5kICJkb3duKCkiIGZ1bmN0aW9ucyBjYW4KKyAqIGVmZmljaWVudGx5IHRlc3QgaWYgdGhleSBuZWVkIHRvIGRvIGFueSBleHRyYSB3b3JrICh1cAorICogbmVlZHMgdG8gZG8gc29tZXRoaW5nIG9ubHkgaWYgY291bnQgd2FzIG5lZ2F0aXZlIGJlZm9yZQorICogdGhlIGluY3JlbWVudCBvcGVyYXRpb24uCisgKgorICogInNsZWVwaW5nIiBhbmQgdGhlIGNvbnRlbnRpb24gcm91dGluZSBvcmRlcmluZyBpcworICogcHJvdGVjdGVkIGJ5IHRoZSBzZW1hcGhvcmUgc3BpbmxvY2suCisgKgorICogTm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSBjYWxsZWQgd2hlbiB0aGVyZSBpcworICogY29udGVudGlvbiBvbiB0aGUgbG9jaywgYW5kIGFzIHN1Y2ggYWxsIHRoaXMgaXMgdGhlCisgKiAibm9uLWNyaXRpY2FsIiBwYXJ0IG9mIHRoZSB3aG9sZSBzZW1hcGhvcmUgYnVzaW5lc3MuIFRoZQorICogY3JpdGljYWwgcGFydCBpcyB0aGUgaW5saW5lIHN0dWZmIGluIDxhc20vc2VtYXBob3JlLmg+CisgKiB3aGVyZSB3ZSB3YW50IHRvIGF2b2lkIGFueSBleHRyYSBqdW1wcyBhbmQgY2FsbHMuCisgKi8KKworLyoKKyAqIExvZ2ljOgorICogIC0gb25seSBvbiBhIGJvdW5kYXJ5IGNvbmRpdGlvbiBkbyB3ZSBuZWVkIHRvIGNhcmUuIFdoZW4gd2UgZ28KKyAqICAgIGZyb20gYSBuZWdhdGl2ZSBjb3VudCB0byBhIG5vbi1uZWdhdGl2ZSwgd2Ugd2FrZSBwZW9wbGUgdXAuCisgKiAgLSB3aGVuIHdlIGdvIGZyb20gYSBub24tbmVnYXRpdmUgY291bnQgdG8gYSBuZWdhdGl2ZSBkbyB3ZQorICogICAgKGEpIHN5bmNocm9uaXplIHdpdGggdGhlICJzbGVlcGVyIiBjb3VudCBhbmQgKGIpIG1ha2Ugc3VyZQorICogICAgdGhhdCB3ZSdyZSBvbiB0aGUgd2FrZXVwIGxpc3QgYmVmb3JlIHdlIHN5bmNocm9uaXplIHNvIHRoYXQKKyAqICAgIHdlIGNhbm5vdCBsb3NlIHdha2V1cCBldmVudHMuCisgKi8KKwordm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwl3YWtlX3VwKCZzZW0tPndhaXQpOworfQorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNlbWFwaG9yZV9sb2NrKTsKKwordm9pZCBfX3NjaGVkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCB0c2spOworCXRzay0+c3RhdGUgPSBUQVNLX1VOSU5URVJSVVBUSUJMRTsKKwlhZGRfd2FpdF9xdWV1ZV9leGNsdXNpdmUoJnNlbS0+d2FpdCwgJndhaXQpOworCisJc3Bpbl9sb2NrX2lycSgmc2VtYXBob3JlX2xvY2spOworCXNlbS0+c2xlZXBlcnMrKzsKKwlmb3IgKDs7KSB7CisJCWludCBzbGVlcGVycyA9IHNlbS0+c2xlZXBlcnM7CisKKwkJLyoKKwkJICogQWRkICJldmVyeWJvZHkgZWxzZSIgaW50byBpdC4gVGhleSBhcmVuJ3QKKwkJICogcGxheWluZywgYmVjYXVzZSB3ZSBvd24gdGhlIHNwaW5sb2NrLgorCQkgKi8KKwkJaWYgKCFhdG9taWNfYWRkX25lZ2F0aXZlKHNsZWVwZXJzIC0gMSwgJnNlbS0+Y291bnQpKSB7CisJCQlzZW0tPnNsZWVwZXJzID0gMDsKKwkJCWJyZWFrOworCQl9CisJCXNlbS0+c2xlZXBlcnMgPSAxOwkvKiB1cyAtIHNlZSAtMSBhYm92ZSAqLworCQlzcGluX3VubG9ja19pcnEoJnNlbWFwaG9yZV9sb2NrKTsKKworCQlzY2hlZHVsZSgpOworCQl0c2stPnN0YXRlID0gVEFTS19VTklOVEVSUlVQVElCTEU7CisJCXNwaW5fbG9ja19pcnEoJnNlbWFwaG9yZV9sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZzZW1hcGhvcmVfbG9jayk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJnNlbS0+d2FpdCwgJndhaXQpOworCXRzay0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisJd2FrZV91cCgmc2VtLT53YWl0KTsKK30KKworaW50IF9fc2NoZWQgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgdHNrKTsKKwl0c2stPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCWFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZSgmc2VtLT53YWl0LCAmd2FpdCk7CisKKwlzcGluX2xvY2tfaXJxKCZzZW1hcGhvcmVfbG9jayk7CisJc2VtLT5zbGVlcGVycyArKzsKKwlmb3IgKDs7KSB7CisJCWludCBzbGVlcGVycyA9IHNlbS0+c2xlZXBlcnM7CisKKwkJLyoKKwkJICogV2l0aCBzaWduYWxzIHBlbmRpbmcsIHRoaXMgdHVybnMgaW50bworCQkgKiB0aGUgdHJ5bG9jayBmYWlsdXJlIGNhc2UgLSB3ZSB3b24ndCBiZQorCQkgKiBzbGVlcGluZywgYW5kIHdlKiBjYW4ndCBnZXQgdGhlIGxvY2sgYXMKKwkJICogaXQgaGFzIGNvbnRlbnRpb24uIEp1c3QgY29ycmVjdCB0aGUgY291bnQKKwkJICogYW5kIGV4aXQuCisJCSAqLworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXJldHZhbCA9IC1FSU5UUjsKKwkJCXNlbS0+c2xlZXBlcnMgPSAwOworCQkJYXRvbWljX2FkZChzbGVlcGVycywgJnNlbS0+Y291bnQpOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBBZGQgImV2ZXJ5Ym9keSBlbHNlIiBpbnRvIGl0LiBUaGV5IGFyZW4ndAorCQkgKiBwbGF5aW5nLCBiZWNhdXNlIHdlIG93biB0aGUgc3BpbmxvY2suIFRoZQorCQkgKiAiLTEiIGlzIGJlY2F1c2Ugd2UncmUgc3RpbGwgaG9waW5nIHRvIGdldAorCQkgKiB0aGUgbG9jay4KKwkJICovCisJCWlmICghYXRvbWljX2FkZF9uZWdhdGl2ZShzbGVlcGVycyAtIDEsICZzZW0tPmNvdW50KSkgeworCQkJc2VtLT5zbGVlcGVycyA9IDA7CisJCQlicmVhazsKKwkJfQorCQlzZW0tPnNsZWVwZXJzID0gMTsJLyogdXMgLSBzZWUgLTEgYWJvdmUgKi8KKwkJc3Bpbl91bmxvY2tfaXJxKCZzZW1hcGhvcmVfbG9jayk7CisKKwkJc2NoZWR1bGUoKTsKKwkJdHNrLT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKwkJc3Bpbl9sb2NrX2lycSgmc2VtYXBob3JlX2xvY2spOworCX0KKwlzcGluX3VubG9ja19pcnEoJnNlbWFwaG9yZV9sb2NrKTsKKwl0c2stPnN0YXRlID0gVEFTS19SVU5OSU5HOworCXJlbW92ZV93YWl0X3F1ZXVlKCZzZW0tPndhaXQsICZ3YWl0KTsKKwl3YWtlX3VwKCZzZW0tPndhaXQpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBUcnlsb2NrIGZhaWxlZCAtIG1ha2Ugc3VyZSB3ZSBjb3JyZWN0IGZvcgorICogaGF2aW5nIGRlY3JlbWVudGVkIHRoZSBjb3VudC4KKyAqCisgKiBXZSBjb3VsZCBoYXZlIGRvbmUgdGhlIHRyeWxvY2sgd2l0aCBhCisgKiBzaW5nbGUgImNtcHhjaGciIHdpdGhvdXQgZmFpbHVyZSBjYXNlcywKKyAqIGJ1dCB0aGVuIGl0IHdvdWxkbid0IHdvcmsgb24gYSAzODYuCisgKi8KK2ludCBfX2Rvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCWludCBzbGVlcGVyczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV9sb2NrLCBmbGFncyk7CisJc2xlZXBlcnMgPSBzZW0tPnNsZWVwZXJzICsgMTsKKwlzZW0tPnNsZWVwZXJzID0gMDsKKworCS8qCisJICogQWRkICJldmVyeWJvZHkgZWxzZSIgYW5kIHVzIGludG8gaXQuIFRoZXkgYXJlbid0CisJICogcGxheWluZywgYmVjYXVzZSB3ZSBvd24gdGhlIHNwaW5sb2NrLgorCSAqLworCWlmICghYXRvbWljX2FkZF9uZWdhdGl2ZShzbGVlcGVycywgJnNlbS0+Y291bnQpKQorCQl3YWtlX3VwKCZzZW0tPndhaXQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFRoZSBzZW1hcGhvcmUgb3BlcmF0aW9ucyBoYXZlIGEgc3BlY2lhbCBjYWxsaW5nIHNlcXVlbmNlIHRoYXQKKyAqIGFsbG93IHVzIHRvIGRvIGEgc2ltcGxlciBpbi1saW5lIHZlcnNpb24gb2YgdGhlbS4gVGhlc2Ugcm91dGluZXMKKyAqIG5lZWQgdG8gY29udmVydCB0aGF0IHNlcXVlbmNlIGJhY2sgaW50byB0aGUgQyBzZXF1ZW5jZSB3aGVuCisgKiB0aGVyZSBpcyBjb250ZW50aW9uIG9uIHRoZSBzZW1hcGhvcmUuCisgKgorICogaXAgY29udGFpbnMgdGhlIHNlbWFwaG9yZSBwb2ludGVyIG9uIGVudHJ5LiBTYXZlIHRoZSBDLWNsb2JiZXJlZAorICogcmVnaXN0ZXJzIChyMCB0byByMyBhbmQgbHIpLCBidXQgbm90IGlwLCBhcyB3ZSB1c2UgaXQgYXMgYSByZXR1cm4KKyAqIHZhbHVlIGluIHNvbWUgY2FzZXMuLgorICovCithc20oIgkuc2VjdGlvbiAuc2NoZWQudGV4dCxcImF4XCIJCVxuXAorCS5hbGlnbgk1CQkJCVxuXAorCS5nbG9ibAlfX2Rvd25fZmFpbGVkCQkJXG5cCitfX2Rvd25fZmFpbGVkOgkJCQkJXG5cCisJc3RtZmQJc3AhLCB7cjAgLSByMywgbHJ9CQlcblwKKwltb3YJcjAsIGlwCQkJCVxuXAorCWJsCV9fZG93bgkJCQlcblwKKwlsZG1mZAlzcCEsIHtyMCAtIHIzLCBwY30JCVxuXAorCQkJCQkJXG5cCisJLmFsaWduCTUJCQkJXG5cCisJLmdsb2JsCV9fZG93bl9pbnRlcnJ1cHRpYmxlX2ZhaWxlZAlcblwKK19fZG93bl9pbnRlcnJ1cHRpYmxlX2ZhaWxlZDoJCQlcblwKKwlzdG1mZAlzcCEsIHtyMCAtIHIzLCBscn0JCVxuXAorCW1vdglyMCwgaXAJCQkJXG5cCisJYmwJX19kb3duX2ludGVycnVwdGlibGUJCVxuXAorCW1vdglpcCwgcjAJCQkJXG5cCisJbGRtZmQJc3AhLCB7cjAgLSByMywgcGN9CQlcblwKKwkJCQkJCVxuXAorCS5hbGlnbgk1CQkJCVxuXAorCS5nbG9ibAlfX2Rvd25fdHJ5bG9ja19mYWlsZWQJCVxuXAorX19kb3duX3RyeWxvY2tfZmFpbGVkOgkJCQlcblwKKwlzdG1mZAlzcCEsIHtyMCAtIHIzLCBscn0JCVxuXAorCW1vdglyMCwgaXAJCQkJXG5cCisJYmwJX19kb3duX3RyeWxvY2sJCQlcblwKKwltb3YJaXAsIHIwCQkJCVxuXAorCWxkbWZkCXNwISwge3IwIC0gcjMsIHBjfQkJXG5cCisJCQkJCQlcblwKKwkuYWxpZ24JNQkJCQlcblwKKwkuZ2xvYmwJX191cF93YWtldXAJCQlcblwKK19fdXBfd2FrZXVwOgkJCQkJXG5cCisJc3RtZmQJc3AhLCB7cjAgLSByMywgbHJ9CQlcblwKKwltb3YJcjAsIGlwCQkJCVxuXAorCWJsCV9fdXAJCQkJXG5cCisJbGRtZmQJc3AhLCB7cjAgLSByMywgcGN9CQlcblwKKwkiKTsKKworRVhQT1JUX1NZTUJPTChfX2Rvd25fZmFpbGVkKTsKK0VYUE9SVF9TWU1CT0woX19kb3duX2ludGVycnVwdGlibGVfZmFpbGVkKTsKK0VYUE9SVF9TWU1CT0woX19kb3duX3RyeWxvY2tfZmFpbGVkKTsKK0VYUE9SVF9TWU1CT0woX191cF93YWtldXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmE3ZGEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKQEAgLTAsMCArMSw4NzUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDEgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPGFzbS9jcHUuaD4KKyNpbmNsdWRlIDxhc20vZWxmLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3Byb2NpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2lmbmRlZiBNRU1fU0laRQorI2RlZmluZSBNRU1fU0laRQkoMTYqMTAyNCoxMDI0KQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19GUEVfTldGUEUpIHx8IGRlZmluZWQoQ09ORklHX0ZQRV9GQVNURlBFKQorY2hhciBmcGVfdHlwZVs4XTsKKworc3RhdGljIGludCBfX2luaXQgZnBlX3NldHVwKGNoYXIgKmxpbmUpCit7CisJbWVtY3B5KGZwZV90eXBlLCBsaW5lLCA4KTsKKwlyZXR1cm4gMTsKK30KKworX19zZXR1cCgiZnBlPSIsIGZwZV9zZXR1cCk7CisjZW5kaWYKKworZXh0ZXJuIHVuc2lnbmVkIGludCBtZW1fZmNsa18yMTI4NTsKK2V4dGVybiB2b2lkIHBhZ2luZ19pbml0KHN0cnVjdCBtZW1pbmZvICosIHN0cnVjdCBtYWNoaW5lX2Rlc2MgKmRlc2MpOworZXh0ZXJuIHZvaWQgY29udmVydF90b190YWdfbGlzdChzdHJ1Y3QgdGFnICp0YWdzKTsKK2V4dGVybiB2b2lkIHNxdWFzaF9tZW1fdGFncyhzdHJ1Y3QgdGFnICp0YWcpOworZXh0ZXJuIHZvaWQgcmVib290X3NldHVwKGNoYXIgKnN0cik7CitleHRlcm4gaW50IHJvb3RfbW91bnRmbGFnczsKK2V4dGVybiB2b2lkIF9zdGV4dCwgX3RleHQsIF9ldGV4dCwgX19kYXRhX3N0YXJ0LCBfZWRhdGEsIF9lbmQ7CisKK3Vuc2lnbmVkIGludCBwcm9jZXNzb3JfaWQ7Cit1bnNpZ25lZCBpbnQgX19tYWNoaW5lX2FyY2hfdHlwZTsKK0VYUE9SVF9TWU1CT0woX19tYWNoaW5lX2FyY2hfdHlwZSk7CisKK3Vuc2lnbmVkIGludCBzeXN0ZW1fcmV2OworRVhQT1JUX1NZTUJPTChzeXN0ZW1fcmV2KTsKKwordW5zaWduZWQgaW50IHN5c3RlbV9zZXJpYWxfbG93OworRVhQT1JUX1NZTUJPTChzeXN0ZW1fc2VyaWFsX2xvdyk7CisKK3Vuc2lnbmVkIGludCBzeXN0ZW1fc2VyaWFsX2hpZ2g7CitFWFBPUlRfU1lNQk9MKHN5c3RlbV9zZXJpYWxfaGlnaCk7CisKK3Vuc2lnbmVkIGludCBlbGZfaHdjYXA7CitFWFBPUlRfU1lNQk9MKGVsZl9od2NhcCk7CisKKworI2lmZGVmIE1VTFRJX0NQVQorc3RydWN0IHByb2Nlc3NvciBwcm9jZXNzb3I7CisjZW5kaWYKKyNpZmRlZiBNVUxUSV9UTEIKK3N0cnVjdCBjcHVfdGxiX2ZucyBjcHVfdGxiOworI2VuZGlmCisjaWZkZWYgTVVMVElfVVNFUgorc3RydWN0IGNwdV91c2VyX2ZucyBjcHVfdXNlcjsKKyNlbmRpZgorI2lmZGVmIE1VTFRJX0NBQ0hFCitzdHJ1Y3QgY3B1X2NhY2hlX2ZucyBjcHVfY2FjaGU7CisjZW5kaWYKKworY2hhciBlbGZfcGxhdGZvcm1bRUxGX1BMQVRGT1JNX1NJWkVdOworRVhQT1JUX1NZTUJPTChlbGZfcGxhdGZvcm0pOworCit1bnNpZ25lZCBsb25nIHBoeXNfaW5pdHJkX3N0YXJ0IF9faW5pdGRhdGEgPSAwOwordW5zaWduZWQgbG9uZyBwaHlzX2luaXRyZF9zaXplIF9faW5pdGRhdGEgPSAwOworCitzdGF0aWMgc3RydWN0IG1lbWluZm8gbWVtaW5mbyBfX2luaXRkYXRhID0geyAwLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKmNwdV9uYW1lOworc3RhdGljIGNvbnN0IGNoYXIgKm1hY2hpbmVfbmFtZTsKK3N0YXRpYyBjaGFyIGNvbW1hbmRfbGluZVtDT01NQU5EX0xJTkVfU0laRV07CisKK3N0YXRpYyBjaGFyIGRlZmF1bHRfY29tbWFuZF9saW5lW0NPTU1BTkRfTElORV9TSVpFXSBfX2luaXRkYXRhID0gQ09ORklHX0NNRExJTkU7CitzdGF0aWMgdW5pb24geyBjaGFyIGNbNF07IHVuc2lnbmVkIGxvbmcgbDsgfSBlbmRpYW5fdGVzdCBfX2luaXRkYXRhID0geyB7ICdsJywgJz8nLCAnPycsICdiJyB9IH07CisjZGVmaW5lIEVORElBTk5FU1MgKChjaGFyKWVuZGlhbl90ZXN0LmwpCisKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVpbmZvX2FybSwgY3B1X2RhdGEpOworCisvKgorICogU3RhbmRhcmQgbWVtb3J5IHJlc291cmNlcworICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG1lbV9yZXNbXSA9IHsKKwl7ICJWaWRlbyBSQU0iLCAgIDAsICAgICAwLCAgICAgSU9SRVNPVVJDRV9NRU0JCQl9LAorCXsgIktlcm5lbCB0ZXh0IiwgMCwgICAgIDAsICAgICBJT1JFU09VUkNFX01FTQkJCX0sCisJeyAiS2VybmVsIGRhdGEiLCAwLCAgICAgMCwgICAgIElPUkVTT1VSQ0VfTUVNCQkJfQorfTsKKworI2RlZmluZSB2aWRlb19yYW0gICBtZW1fcmVzWzBdCisjZGVmaW5lIGtlcm5lbF9jb2RlIG1lbV9yZXNbMV0KKyNkZWZpbmUga2VybmVsX2RhdGEgbWVtX3Jlc1syXQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlvX3Jlc1tdID0geworCXsgInJlc2VydmVkIiwgICAgMHgzYmMsIDB4M2JlLCBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9CVVNZIH0sCisJeyAicmVzZXJ2ZWQiLCAgICAweDM3OCwgMHgzN2YsIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX0JVU1kgfSwKKwl7ICJyZXNlcnZlZCIsICAgIDB4Mjc4LCAweDI3ZiwgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfQlVTWSB9Cit9OworCisjZGVmaW5lIGxwMCBpb19yZXNbMF0KKyNkZWZpbmUgbHAxIGlvX3Jlc1sxXQorI2RlZmluZSBscDIgaW9fcmVzWzJdCisKK3N0YXRpYyBjb25zdCBjaGFyICpjYWNoZV90eXBlc1sxNl0gPSB7CisJIndyaXRlLXRocm91Z2giLAorCSJ3cml0ZS1iYWNrIiwKKwkid3JpdGUtYmFjayIsCisJInVuZGVmaW5lZCAzIiwKKwkidW5kZWZpbmVkIDQiLAorCSJ1bmRlZmluZWQgNSIsCisJIndyaXRlLWJhY2siLAorCSJ3cml0ZS1iYWNrIiwKKwkidW5kZWZpbmVkIDgiLAorCSJ1bmRlZmluZWQgOSIsCisJInVuZGVmaW5lZCAxMCIsCisJInVuZGVmaW5lZCAxMSIsCisJInVuZGVmaW5lZCAxMiIsCisJInVuZGVmaW5lZCAxMyIsCisJIndyaXRlLWJhY2siLAorCSJ1bmRlZmluZWQgMTUiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNhY2hlX2NsZWFuWzE2XSA9IHsKKwkibm90IHJlcXVpcmVkIiwKKwkicmVhZC1ibG9jayIsCisJImNwMTUgYzcgb3BzIiwKKwkidW5kZWZpbmVkIDMiLAorCSJ1bmRlZmluZWQgNCIsCisJInVuZGVmaW5lZCA1IiwKKwkiY3AxNSBjNyBvcHMiLAorCSJjcDE1IGM3IG9wcyIsCisJInVuZGVmaW5lZCA4IiwKKwkidW5kZWZpbmVkIDkiLAorCSJ1bmRlZmluZWQgMTAiLAorCSJ1bmRlZmluZWQgMTEiLAorCSJ1bmRlZmluZWQgMTIiLAorCSJ1bmRlZmluZWQgMTMiLAorCSJjcDE1IGM3IG9wcyIsCisJInVuZGVmaW5lZCAxNSIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY2FjaGVfbG9ja2Rvd25bMTZdID0geworCSJub3Qgc3VwcG9ydGVkIiwKKwkibm90IHN1cHBvcnRlZCIsCisJIm5vdCBzdXBwb3J0ZWQiLAorCSJ1bmRlZmluZWQgMyIsCisJInVuZGVmaW5lZCA0IiwKKwkidW5kZWZpbmVkIDUiLAorCSJmb3JtYXQgQSIsCisJImZvcm1hdCBCIiwKKwkidW5kZWZpbmVkIDgiLAorCSJ1bmRlZmluZWQgOSIsCisJInVuZGVmaW5lZCAxMCIsCisJInVuZGVmaW5lZCAxMSIsCisJInVuZGVmaW5lZCAxMiIsCisJInVuZGVmaW5lZCAxMyIsCisJImZvcm1hdCBDIiwKKwkidW5kZWZpbmVkIDE1IiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpwcm9jX2FyY2hbXSA9IHsKKwkidW5kZWZpbmVkL3Vua25vd24iLAorCSIzIiwKKwkiNCIsCisJIjRUIiwKKwkiNSIsCisJIjVUIiwKKwkiNVRFIiwKKwkiNVRFSiIsCisJIjZURUoiLAorCSI/KDEwKSIsCisJIj8oMTEpIiwKKwkiPygxMikiLAorCSI/KDEzKSIsCisJIj8oMTQpIiwKKwkiPygxNSkiLAorCSI/KDE2KSIsCisJIj8oMTcpIiwKK307CisKKyNkZWZpbmUgQ0FDSEVfVFlQRSh4KQkoKCh4KSA+PiAyNSkgJiAxNSkKKyNkZWZpbmUgQ0FDSEVfUyh4KQkoKHgpICYgKDEgPDwgMjQpKQorI2RlZmluZSBDQUNIRV9EU0laRSh4KQkoKCh4KSA+PiAxMikgJiA0MDk1KQkvKiBvbmx5IGlmIFM9MSAqLworI2RlZmluZSBDQUNIRV9JU0laRSh4KQkoKHgpICYgNDA5NSkKKworI2RlZmluZSBDQUNIRV9TSVpFKHkpCSgoKHkpID4+IDYpICYgNykKKyNkZWZpbmUgQ0FDSEVfQVNTT0MoeSkJKCgoeSkgPj4gMykgJiA3KQorI2RlZmluZSBDQUNIRV9NKHkpCSgoeSkgJiAoMSA8PCAyKSkKKyNkZWZpbmUgQ0FDSEVfTElORSh5KQkoKHkpICYgMykKKworc3RhdGljIGlubGluZSB2b2lkIGR1bXBfY2FjaGUoY29uc3QgY2hhciAqcHJlZml4LCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgY2FjaGUpCit7CisJdW5zaWduZWQgaW50IG11bHQgPSAyICsgKENBQ0hFX00oY2FjaGUpID8gMSA6IDApOworCisJcHJpbnRrKCJDUFUldTogJXM6ICVkIGJ5dGVzLCBhc3NvY2lhdGl2aXR5ICVkLCAlZCBieXRlIGxpbmVzLCAlZCBzZXRzXG4iLAorCQljcHUsIHByZWZpeCwKKwkJbXVsdCA8PCAoOCArIENBQ0hFX1NJWkUoY2FjaGUpKSwKKwkJKG11bHQgPDwgQ0FDSEVfQVNTT0MoY2FjaGUpKSA+PiAxLAorCQk4IDw8IENBQ0hFX0xJTkUoY2FjaGUpLAorCQkxIDw8ICg2ICsgQ0FDSEVfU0laRShjYWNoZSkgLSBDQUNIRV9BU1NPQyhjYWNoZSkgLQorCQkJQ0FDSEVfTElORShjYWNoZSkpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGR1bXBfY3B1X2luZm8oaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBpbnQgaW5mbyA9IHJlYWRfY3B1aWQoQ1BVSURfQ0FDSEVUWVBFKTsKKworCWlmIChpbmZvICE9IHByb2Nlc3Nvcl9pZCkgeworCQlwcmludGsoIkNQVSV1OiBEICVzICVzIGNhY2hlXG4iLCBjcHUsIGNhY2hlX2lzX3ZpdnQoKSA/ICJWSVZUIiA6ICJWSVBUIiwKKwkJICAgICAgIGNhY2hlX3R5cGVzW0NBQ0hFX1RZUEUoaW5mbyldKTsKKwkJaWYgKENBQ0hFX1MoaW5mbykpIHsKKwkJCWR1bXBfY2FjaGUoIkkgY2FjaGUiLCBjcHUsIENBQ0hFX0lTSVpFKGluZm8pKTsKKwkJCWR1bXBfY2FjaGUoIkQgY2FjaGUiLCBjcHUsIENBQ0hFX0RTSVpFKGluZm8pKTsKKwkJfSBlbHNlIHsKKwkJCWR1bXBfY2FjaGUoImNhY2hlIiwgY3B1LCBDQUNIRV9JU0laRShpbmZvKSk7CisJCX0KKwl9Cit9CisKK2ludCBjcHVfYXJjaGl0ZWN0dXJlKHZvaWQpCit7CisJaW50IGNwdV9hcmNoOworCisJaWYgKChwcm9jZXNzb3JfaWQgJiAweDAwMDBmMDAwKSA9PSAwKSB7CisJCWNwdV9hcmNoID0gQ1BVX0FSQ0hfVU5LTk9XTjsKKwl9IGVsc2UgaWYgKChwcm9jZXNzb3JfaWQgJiAweDAwMDBmMDAwKSA9PSAweDAwMDA3MDAwKSB7CisJCWNwdV9hcmNoID0gKHByb2Nlc3Nvcl9pZCAmICgxIDw8IDIzKSkgPyBDUFVfQVJDSF9BUk12NFQgOiBDUFVfQVJDSF9BUk12MzsKKwl9IGVsc2UgeworCQljcHVfYXJjaCA9IChwcm9jZXNzb3JfaWQgPj4gMTYpICYgNzsKKwkJaWYgKGNwdV9hcmNoKQorCQkJY3B1X2FyY2ggKz0gQ1BVX0FSQ0hfQVJNdjM7CisJfQorCisJcmV0dXJuIGNwdV9hcmNoOworfQorCisvKgorICogVGhlc2UgZnVuY3Rpb25zIHJlLXVzZSB0aGUgYXNzZW1ibHkgY29kZSBpbiBoZWFkLlMsIHdoaWNoCisgKiBhbHJlYWR5IHByb3ZpZGUgdGhlIHJlcXVpcmVkIGZ1bmN0aW9uYWxpdHkuCisgKi8KK2V4dGVybiBzdHJ1Y3QgcHJvY19pbmZvX2xpc3QgKmxvb2t1cF9wcm9jZXNzb3JfdHlwZSh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgbWFjaGluZV9kZXNjICpsb29rdXBfbWFjaGluZV90eXBlKHVuc2lnbmVkIGludCk7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9wcm9jZXNzb3Iodm9pZCkKK3sKKwlzdHJ1Y3QgcHJvY19pbmZvX2xpc3QgKmxpc3Q7CisKKwkvKgorCSAqIGxvY2F0ZSBwcm9jZXNzb3IgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHByb2Nlc3NvcgorCSAqIHR5cGVzLiAgVGhlIGxpbmtlciBidWlsZHMgdGhpcyB0YWJsZSBmb3IgdXMgZnJvbSB0aGUKKwkgKiBlbnRyaWVzIGluIGFyY2gvYXJtL21tL3Byb2MtKi5TCisJICovCisJbGlzdCA9IGxvb2t1cF9wcm9jZXNzb3JfdHlwZSgpOworCWlmICghbGlzdCkgeworCQlwcmludGsoIkNQVSBjb25maWd1cmF0aW9uIGJvdGNoZWQgKElEICUwOHgpLCB1bmFibGUgIgorCQkgICAgICAgInRvIGNvbnRpbnVlLlxuIiwgcHJvY2Vzc29yX2lkKTsKKwkJd2hpbGUgKDEpOworCX0KKworCWNwdV9uYW1lID0gbGlzdC0+Y3B1X25hbWU7CisKKyNpZmRlZiBNVUxUSV9DUFUKKwlwcm9jZXNzb3IgPSAqbGlzdC0+cHJvYzsKKyNlbmRpZgorI2lmZGVmIE1VTFRJX1RMQgorCWNwdV90bGIgPSAqbGlzdC0+dGxiOworI2VuZGlmCisjaWZkZWYgTVVMVElfVVNFUgorCWNwdV91c2VyID0gKmxpc3QtPnVzZXI7CisjZW5kaWYKKyNpZmRlZiBNVUxUSV9DQUNIRQorCWNwdV9jYWNoZSA9ICpsaXN0LT5jYWNoZTsKKyNlbmRpZgorCisJcHJpbnRrKCJDUFU6ICVzIFslMDh4XSByZXZpc2lvbiAlZCAoQVJNdiVzKVxuIiwKKwkgICAgICAgY3B1X25hbWUsIHByb2Nlc3Nvcl9pZCwgKGludClwcm9jZXNzb3JfaWQgJiAxNSwKKwkgICAgICAgcHJvY19hcmNoW2NwdV9hcmNoaXRlY3R1cmUoKV0pOworCisJZHVtcF9jcHVfaW5mbyhzbXBfcHJvY2Vzc29yX2lkKCkpOworCisJc3ByaW50ZihzeXN0ZW1fdXRzbmFtZS5tYWNoaW5lLCAiJXMlYyIsIGxpc3QtPmFyY2hfbmFtZSwgRU5ESUFOTkVTUyk7CisJc3ByaW50ZihlbGZfcGxhdGZvcm0sICIlcyVjIiwgbGlzdC0+ZWxmX25hbWUsIEVORElBTk5FU1MpOworCWVsZl9od2NhcCA9IGxpc3QtPmVsZl9od2NhcDsKKworCWNwdV9wcm9jX2luaXQoKTsKK30KKworc3RhdGljIHN0cnVjdCBtYWNoaW5lX2Rlc2MgKiBfX2luaXQgc2V0dXBfbWFjaGluZSh1bnNpZ25lZCBpbnQgbnIpCit7CisJc3RydWN0IG1hY2hpbmVfZGVzYyAqbGlzdDsKKworCS8qCisJICogbG9jYXRlIG1hY2hpbmUgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIG1hY2hpbmVzLgorCSAqLworCWxpc3QgPSBsb29rdXBfbWFjaGluZV90eXBlKG5yKTsKKwlpZiAoIWxpc3QpIHsKKwkJcHJpbnRrKCJNYWNoaW5lIGNvbmZpZ3VyYXRpb24gYm90Y2hlZCAobnIgJWQpLCB1bmFibGUgIgorCQkgICAgICAgInRvIGNvbnRpbnVlLlxuIiwgbnIpOworCQl3aGlsZSAoMSk7CisJfQorCisJcHJpbnRrKCJNYWNoaW5lOiAlc1xuIiwgbGlzdC0+bmFtZSk7CisKKwlyZXR1cm4gbGlzdDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2luaXRyZChjaGFyICoqcCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplOworCisJc3RhcnQgPSBtZW1wYXJzZSgqcCwgcCk7CisJaWYgKCoqcCA9PSAnLCcpIHsKKwkJc2l6ZSA9IG1lbXBhcnNlKCgqcCkgKyAxLCBwKTsKKworCQlwaHlzX2luaXRyZF9zdGFydCA9IHN0YXJ0OworCQlwaHlzX2luaXRyZF9zaXplID0gc2l6ZTsKKwl9Cit9CitfX2Vhcmx5X3BhcmFtKCJpbml0cmQ9IiwgZWFybHlfaW5pdHJkKTsKKworLyoKKyAqIFBpY2sgb3V0IHRoZSBtZW1vcnkgc2l6ZS4gIFdlIGxvb2sgZm9yIG1lbT1zaXplQHN0YXJ0LAorICogd2hlcmUgc3RhcnQgYW5kIHNpemUgYXJlICJzaXplW0trTW1dIgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfbWVtKGNoYXIgKipwKQoreworCXN0YXRpYyBpbnQgdXNlcm1lbSBfX2luaXRkYXRhID0gMDsKKwl1bnNpZ25lZCBsb25nIHNpemUsIHN0YXJ0OworCisJLyoKKwkgKiBJZiB0aGUgdXNlciBzcGVjaWZpZXMgbWVtb3J5IHNpemUsIHdlCisJICogYmxvdyBhd2F5IGFueSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZAorCSAqIHNpemUuCisJICovCisJaWYgKHVzZXJtZW0gPT0gMCkgeworCQl1c2VybWVtID0gMTsKKwkJbWVtaW5mby5ucl9iYW5rcyA9IDA7CisJfQorCisJc3RhcnQgPSBQSFlTX09GRlNFVDsKKwlzaXplICA9IG1lbXBhcnNlKCpwLCBwKTsKKwlpZiAoKipwID09ICdAJykKKwkJc3RhcnQgPSBtZW1wYXJzZSgqcCArIDEsIHApOworCisJbWVtaW5mby5iYW5rW21lbWluZm8ubnJfYmFua3NdLnN0YXJ0ID0gc3RhcnQ7CisJbWVtaW5mby5iYW5rW21lbWluZm8ubnJfYmFua3NdLnNpemUgID0gc2l6ZTsKKwltZW1pbmZvLmJhbmtbbWVtaW5mby5ucl9iYW5rc10ubm9kZSAgPSBQSFlTX1RPX05JRChzdGFydCk7CisJbWVtaW5mby5ucl9iYW5rcyArPSAxOworfQorX19lYXJseV9wYXJhbSgibWVtPSIsIGVhcmx5X21lbSk7CisKKy8qCisgKiBJbml0aWFsIHBhcnNpbmcgb2YgdGhlIGNvbW1hbmQgbGluZS4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHBhcnNlX2NtZGxpbmUoY2hhciAqKmNtZGxpbmVfcCwgY2hhciAqZnJvbSkKK3sKKwljaGFyIGMgPSAnICcsICp0byA9IGNvbW1hbmRfbGluZTsKKwlpbnQgbGVuID0gMDsKKworCWZvciAoOzspIHsKKwkJaWYgKGMgPT0gJyAnKSB7CisJCQlleHRlcm4gc3RydWN0IGVhcmx5X3BhcmFtcyBfX2Vhcmx5X2JlZ2luLCBfX2Vhcmx5X2VuZDsKKwkJCXN0cnVjdCBlYXJseV9wYXJhbXMgKnA7CisKKwkJCWZvciAocCA9ICZfX2Vhcmx5X2JlZ2luOyBwIDwgJl9fZWFybHlfZW5kOyBwKyspIHsKKwkJCQlpbnQgbGVuID0gc3RybGVuKHAtPmFyZyk7CisKKwkJCQlpZiAobWVtY21wKGZyb20sIHAtPmFyZywgbGVuKSA9PSAwKSB7CisJCQkJCWlmICh0byAhPSBjb21tYW5kX2xpbmUpCisJCQkJCQl0byAtPSAxOworCQkJCQlmcm9tICs9IGxlbjsKKwkJCQkJcC0+Zm4oJmZyb20pOworCisJCQkJCXdoaWxlICgqZnJvbSAhPSAnICcgJiYgKmZyb20gIT0gJ1wwJykKKwkJCQkJCWZyb20rKzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJCWMgPSAqZnJvbSsrOworCQlpZiAoIWMpCisJCQlicmVhazsKKwkJaWYgKENPTU1BTkRfTElORV9TSVpFIDw9ICsrbGVuKQorCQkJYnJlYWs7CisJCSp0bysrID0gYzsKKwl9CisJKnRvID0gJ1wwJzsKKwkqY21kbGluZV9wID0gY29tbWFuZF9saW5lOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQKK3NldHVwX3JhbWRpc2soaW50IGRvbG9hZCwgaW50IHByb21wdCwgaW50IGltYWdlX3N0YXJ0LCB1bnNpZ25lZCBpbnQgcmRfc3opCit7CisjaWZkZWYgQ09ORklHX0JMS19ERVZfUkFNCisJZXh0ZXJuIGludCByZF9zaXplLCByZF9pbWFnZV9zdGFydCwgcmRfcHJvbXB0LCByZF9kb2xvYWQ7CisKKwlyZF9pbWFnZV9zdGFydCA9IGltYWdlX3N0YXJ0OworCXJkX3Byb21wdCA9IHByb21wdDsKKwlyZF9kb2xvYWQgPSBkb2xvYWQ7CisKKwlpZiAocmRfc3opCisJCXJkX3NpemUgPSByZF9zejsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBfX2luaXQKK3JlcXVlc3Rfc3RhbmRhcmRfcmVzb3VyY2VzKHN0cnVjdCBtZW1pbmZvICptaSwgc3RydWN0IG1hY2hpbmVfZGVzYyAqbWRlc2MpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGk7CisKKwlrZXJuZWxfY29kZS5zdGFydCAgID0gdmlydF90b19waHlzKCZfdGV4dCk7CisJa2VybmVsX2NvZGUuZW5kICAgICA9IHZpcnRfdG9fcGh5cygmX2V0ZXh0IC0gMSk7CisJa2VybmVsX2RhdGEuc3RhcnQgICA9IHZpcnRfdG9fcGh5cygmX19kYXRhX3N0YXJ0KTsKKwlrZXJuZWxfZGF0YS5lbmQgICAgID0gdmlydF90b19waHlzKCZfZW5kIC0gMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWktPm5yX2JhbmtzOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyB2aXJ0X3N0YXJ0LCB2aXJ0X2VuZDsKKworCQlpZiAobWktPmJhbmtbaV0uc2l6ZSA9PSAwKQorCQkJY29udGludWU7CisKKwkJdmlydF9zdGFydCA9IF9fcGh5c190b192aXJ0KG1pLT5iYW5rW2ldLnN0YXJ0KTsKKwkJdmlydF9lbmQgICA9IHZpcnRfc3RhcnQgKyBtaS0+YmFua1tpXS5zaXplIC0gMTsKKworCQlyZXMgPSBhbGxvY19ib290bWVtX2xvdyhzaXplb2YoKnJlcykpOworCQlyZXMtPm5hbWUgID0gIlN5c3RlbSBSQU0iOworCQlyZXMtPnN0YXJ0ID0gX192aXJ0X3RvX3BoeXModmlydF9zdGFydCk7CisJCXJlcy0+ZW5kICAgPSBfX3ZpcnRfdG9fcGh5cyh2aXJ0X2VuZCk7CisJCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWTsKKworCQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzKTsKKworCQlpZiAoa2VybmVsX2NvZGUuc3RhcnQgPj0gcmVzLT5zdGFydCAmJgorCQkgICAga2VybmVsX2NvZGUuZW5kIDw9IHJlcy0+ZW5kKQorCQkJcmVxdWVzdF9yZXNvdXJjZShyZXMsICZrZXJuZWxfY29kZSk7CisJCWlmIChrZXJuZWxfZGF0YS5zdGFydCA+PSByZXMtPnN0YXJ0ICYmCisJCSAgICBrZXJuZWxfZGF0YS5lbmQgPD0gcmVzLT5lbmQpCisJCQlyZXF1ZXN0X3Jlc291cmNlKHJlcywgJmtlcm5lbF9kYXRhKTsKKwl9CisKKwlpZiAobWRlc2MtPnZpZGVvX3N0YXJ0KSB7CisJCXZpZGVvX3JhbS5zdGFydCA9IG1kZXNjLT52aWRlb19zdGFydDsKKwkJdmlkZW9fcmFtLmVuZCAgID0gbWRlc2MtPnZpZGVvX2VuZDsKKwkJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZ2aWRlb19yYW0pOworCX0KKworCS8qCisJICogU29tZSBtYWNoaW5lcyBkb24ndCBoYXZlIHRoZSBwb3NzaWJpbGl0eSBvZiBldmVyCisJICogcG9zc2Vzc2luZyBscDAsIGxwMSBvciBscDIKKwkgKi8KKwlpZiAobWRlc2MtPnJlc2VydmVfbHAwKQorCQlyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZscDApOworCWlmIChtZGVzYy0+cmVzZXJ2ZV9scDEpCisJCXJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJmxwMSk7CisJaWYgKG1kZXNjLT5yZXNlcnZlX2xwMikKKwkJcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmbHAyKTsKK30KKworLyoKKyAqICBUYWcgcGFyc2luZy4KKyAqCisgKiBUaGlzIGlzIHRoZSBuZXcgd2F5IG9mIHBhc3NpbmcgZGF0YSB0byB0aGUga2VybmVsIGF0IGJvb3QgdGltZS4gIFJhdGhlcgorICogdGhhbiBwYXNzaW5nIGEgZml4ZWQgaW5mbGV4aWJsZSBzdHJ1Y3R1cmUgdG8gdGhlIGtlcm5lbCwgd2UgcGFzcyBhIGxpc3QKKyAqIG9mIHZhcmlhYmxlLXNpemVkIHRhZ3MgdG8gdGhlIGtlcm5lbC4gIFRoZSBmaXJzdCB0YWcgbXVzdCBiZSBhIEFUQUdfQ09SRQorICogdGFnIGZvciB0aGUgbGlzdCB0byBiZSByZWNvZ25pc2VkICh0byBkaXN0aW5ndWlzaCB0aGUgdGFnZ2VkIGxpc3QgZnJvbQorICogYSBwYXJhbV9zdHJ1Y3QpLiAgVGhlIGxpc3QgaXMgdGVybWluYXRlZCB3aXRoIGEgemVyby1sZW5ndGggdGFnICh0aGlzIHRhZworICogaXMgbm90IHBhcnNlZCBpbiBhbnkgd2F5KS4KKyAqLworc3RhdGljIGludCBfX2luaXQgcGFyc2VfdGFnX2NvcmUoY29uc3Qgc3RydWN0IHRhZyAqdGFnKQoreworCWlmICh0YWctPmhkci5zaXplID4gMikgeworCQlpZiAoKHRhZy0+dS5jb3JlLmZsYWdzICYgMSkgPT0gMCkKKwkJCXJvb3RfbW91bnRmbGFncyAmPSB+TVNfUkRPTkxZOworCQlST09UX0RFViA9IG9sZF9kZWNvZGVfZGV2KHRhZy0+dS5jb3JlLnJvb3RkZXYpOworCX0KKwlyZXR1cm4gMDsKK30KKworX190YWd0YWJsZShBVEFHX0NPUkUsIHBhcnNlX3RhZ19jb3JlKTsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2VfdGFnX21lbTMyKGNvbnN0IHN0cnVjdCB0YWcgKnRhZykKK3sKKwlpZiAobWVtaW5mby5ucl9iYW5rcyA+PSBOUl9CQU5LUykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiSWdub3JpbmcgbWVtb3J5IGJhbmsgMHglMDh4IHNpemUgJWRLQlxuIiwKKwkJCXRhZy0+dS5tZW0uc3RhcnQsIHRhZy0+dS5tZW0uc2l6ZSAvIDEwMjQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJbWVtaW5mby5iYW5rW21lbWluZm8ubnJfYmFua3NdLnN0YXJ0ID0gdGFnLT51Lm1lbS5zdGFydDsKKwltZW1pbmZvLmJhbmtbbWVtaW5mby5ucl9iYW5rc10uc2l6ZSAgPSB0YWctPnUubWVtLnNpemU7CisJbWVtaW5mby5iYW5rW21lbWluZm8ubnJfYmFua3NdLm5vZGUgID0gUEhZU19UT19OSUQodGFnLT51Lm1lbS5zdGFydCk7CisJbWVtaW5mby5ucl9iYW5rcyArPSAxOworCisJcmV0dXJuIDA7Cit9CisKK19fdGFndGFibGUoQVRBR19NRU0sIHBhcnNlX3RhZ19tZW0zMik7CisKKyNpZiBkZWZpbmVkKENPTkZJR19WR0FfQ09OU09MRSkgfHwgZGVmaW5lZChDT05GSUdfRFVNTVlfQ09OU09MRSkKK3N0cnVjdCBzY3JlZW5faW5mbyBzY3JlZW5faW5mbyA9IHsKKyAub3JpZ192aWRlb19saW5lcwk9IDMwLAorIC5vcmlnX3ZpZGVvX2NvbHMJPSA4MCwKKyAub3JpZ192aWRlb19tb2RlCT0gMCwKKyAub3JpZ192aWRlb19lZ2FfYngJPSAwLAorIC5vcmlnX3ZpZGVvX2lzVkdBCT0gMSwKKyAub3JpZ192aWRlb19wb2ludHMJPSA4Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV90YWdfdmlkZW90ZXh0KGNvbnN0IHN0cnVjdCB0YWcgKnRhZykKK3sKKwlzY3JlZW5faW5mby5vcmlnX3ggICAgICAgICAgICA9IHRhZy0+dS52aWRlb3RleHQueDsKKwlzY3JlZW5faW5mby5vcmlnX3kgICAgICAgICAgICA9IHRhZy0+dS52aWRlb3RleHQueTsKKwlzY3JlZW5faW5mby5vcmlnX3ZpZGVvX3BhZ2UgICA9IHRhZy0+dS52aWRlb3RleHQudmlkZW9fcGFnZTsKKwlzY3JlZW5faW5mby5vcmlnX3ZpZGVvX21vZGUgICA9IHRhZy0+dS52aWRlb3RleHQudmlkZW9fbW9kZTsKKwlzY3JlZW5faW5mby5vcmlnX3ZpZGVvX2NvbHMgICA9IHRhZy0+dS52aWRlb3RleHQudmlkZW9fY29sczsKKwlzY3JlZW5faW5mby5vcmlnX3ZpZGVvX2VnYV9ieCA9IHRhZy0+dS52aWRlb3RleHQudmlkZW9fZWdhX2J4OworCXNjcmVlbl9pbmZvLm9yaWdfdmlkZW9fbGluZXMgID0gdGFnLT51LnZpZGVvdGV4dC52aWRlb19saW5lczsKKwlzY3JlZW5faW5mby5vcmlnX3ZpZGVvX2lzVkdBICA9IHRhZy0+dS52aWRlb3RleHQudmlkZW9faXN2Z2E7CisJc2NyZWVuX2luZm8ub3JpZ192aWRlb19wb2ludHMgPSB0YWctPnUudmlkZW90ZXh0LnZpZGVvX3BvaW50czsKKwlyZXR1cm4gMDsKK30KKworX190YWd0YWJsZShBVEFHX1ZJREVPVEVYVCwgcGFyc2VfdGFnX3ZpZGVvdGV4dCk7CisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgcGFyc2VfdGFnX3JhbWRpc2soY29uc3Qgc3RydWN0IHRhZyAqdGFnKQoreworCXNldHVwX3JhbWRpc2soKHRhZy0+dS5yYW1kaXNrLmZsYWdzICYgMSkgPT0gMCwKKwkJICAgICAgKHRhZy0+dS5yYW1kaXNrLmZsYWdzICYgMikgPT0gMCwKKwkJICAgICAgdGFnLT51LnJhbWRpc2suc3RhcnQsIHRhZy0+dS5yYW1kaXNrLnNpemUpOworCXJldHVybiAwOworfQorCitfX3RhZ3RhYmxlKEFUQUdfUkFNRElTSywgcGFyc2VfdGFnX3JhbWRpc2spOworCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV90YWdfaW5pdHJkKGNvbnN0IHN0cnVjdCB0YWcgKnRhZykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICJBVEFHX0lOSVRSRCBpcyBkZXByZWNhdGVkOyAiCisJCSJwbGVhc2UgdXBkYXRlIHlvdXIgYm9vdGxvYWRlci5cbiIpOworCXBoeXNfaW5pdHJkX3N0YXJ0ID0gX192aXJ0X3RvX3BoeXModGFnLT51LmluaXRyZC5zdGFydCk7CisJcGh5c19pbml0cmRfc2l6ZSA9IHRhZy0+dS5pbml0cmQuc2l6ZTsKKwlyZXR1cm4gMDsKK30KKworX190YWd0YWJsZShBVEFHX0lOSVRSRCwgcGFyc2VfdGFnX2luaXRyZCk7CisKK3N0YXRpYyBpbnQgX19pbml0IHBhcnNlX3RhZ19pbml0cmQyKGNvbnN0IHN0cnVjdCB0YWcgKnRhZykKK3sKKwlwaHlzX2luaXRyZF9zdGFydCA9IHRhZy0+dS5pbml0cmQuc3RhcnQ7CisJcGh5c19pbml0cmRfc2l6ZSA9IHRhZy0+dS5pbml0cmQuc2l6ZTsKKwlyZXR1cm4gMDsKK30KKworX190YWd0YWJsZShBVEFHX0lOSVRSRDIsIHBhcnNlX3RhZ19pbml0cmQyKTsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2VfdGFnX3NlcmlhbG5yKGNvbnN0IHN0cnVjdCB0YWcgKnRhZykKK3sKKwlzeXN0ZW1fc2VyaWFsX2xvdyA9IHRhZy0+dS5zZXJpYWxuci5sb3c7CisJc3lzdGVtX3NlcmlhbF9oaWdoID0gdGFnLT51LnNlcmlhbG5yLmhpZ2g7CisJcmV0dXJuIDA7Cit9CisKK19fdGFndGFibGUoQVRBR19TRVJJQUwsIHBhcnNlX3RhZ19zZXJpYWxucik7CisKK3N0YXRpYyBpbnQgX19pbml0IHBhcnNlX3RhZ19yZXZpc2lvbihjb25zdCBzdHJ1Y3QgdGFnICp0YWcpCit7CisJc3lzdGVtX3JldiA9IHRhZy0+dS5yZXZpc2lvbi5yZXY7CisJcmV0dXJuIDA7Cit9CisKK19fdGFndGFibGUoQVRBR19SRVZJU0lPTiwgcGFyc2VfdGFnX3JldmlzaW9uKTsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2VfdGFnX2NtZGxpbmUoY29uc3Qgc3RydWN0IHRhZyAqdGFnKQoreworCXN0cmxjcHkoZGVmYXVsdF9jb21tYW5kX2xpbmUsIHRhZy0+dS5jbWRsaW5lLmNtZGxpbmUsIENPTU1BTkRfTElORV9TSVpFKTsKKwlyZXR1cm4gMDsKK30KKworX190YWd0YWJsZShBVEFHX0NNRExJTkUsIHBhcnNlX3RhZ19jbWRsaW5lKTsKKworLyoKKyAqIFNjYW4gdGhlIHRhZyB0YWJsZSBmb3IgdGhpcyB0YWcsIGFuZCBjYWxsIGl0cyBwYXJzZSBmdW5jdGlvbi4KKyAqIFRoZSB0YWcgdGFibGUgaXMgYnVpbHQgYnkgdGhlIGxpbmtlciBmcm9tIGFsbCB0aGUgX190YWd0YWJsZQorICogZGVjbGFyYXRpb25zLgorICovCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV90YWcoY29uc3Qgc3RydWN0IHRhZyAqdGFnKQoreworCWV4dGVybiBzdHJ1Y3QgdGFndGFibGUgX190YWd0YWJsZV9iZWdpbiwgX190YWd0YWJsZV9lbmQ7CisJc3RydWN0IHRhZ3RhYmxlICp0OworCisJZm9yICh0ID0gJl9fdGFndGFibGVfYmVnaW47IHQgPCAmX190YWd0YWJsZV9lbmQ7IHQrKykKKwkJaWYgKHRhZy0+aGRyLnRhZyA9PSB0LT50YWcpIHsKKwkJCXQtPnBhcnNlKHRhZyk7CisJCQlicmVhazsKKwkJfQorCisJcmV0dXJuIHQgPCAmX190YWd0YWJsZV9lbmQ7Cit9CisKKy8qCisgKiBQYXJzZSBhbGwgdGFncyBpbiB0aGUgbGlzdCwgY2hlY2tpbmcgYm90aCB0aGUgZ2xvYmFsIGFuZCBhcmNoaXRlY3R1cmUKKyAqIHNwZWNpZmljIHRhZyB0YWJsZXMuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBwYXJzZV90YWdzKGNvbnN0IHN0cnVjdCB0YWcgKnQpCit7CisJZm9yICg7IHQtPmhkci5zaXplOyB0ID0gdGFnX25leHQodCkpCisJCWlmICghcGFyc2VfdGFnKHQpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSJJZ25vcmluZyB1bnJlY29nbmlzZWQgdGFnIDB4JTA4eFxuIiwKKwkJCQl0LT5oZHIudGFnKTsKK30KKworLyoKKyAqIFRoaXMgaG9sZHMgb3VyIGRlZmF1bHRzLgorICovCitzdGF0aWMgc3RydWN0IGluaXRfdGFncyB7CisJc3RydWN0IHRhZ19oZWFkZXIgaGRyMTsKKwlzdHJ1Y3QgdGFnX2NvcmUgICBjb3JlOworCXN0cnVjdCB0YWdfaGVhZGVyIGhkcjI7CisJc3RydWN0IHRhZ19tZW0zMiAgbWVtOworCXN0cnVjdCB0YWdfaGVhZGVyIGhkcjM7Cit9IGluaXRfdGFncyBfX2luaXRkYXRhID0geworCXsgdGFnX3NpemUodGFnX2NvcmUpLCBBVEFHX0NPUkUgfSwKKwl7IDEsIFBBR0VfU0laRSwgMHhmZiB9LAorCXsgdGFnX3NpemUodGFnX21lbTMyKSwgQVRBR19NRU0gfSwKKwl7IE1FTV9TSVpFLCBQSFlTX09GRlNFVCB9LAorCXsgMCwgQVRBR19OT05FIH0KK307CisKK3N0YXRpYyB2b2lkICgqaW5pdF9tYWNoaW5lKSh2b2lkKSBfX2luaXRkYXRhOworCitzdGF0aWMgaW50IF9faW5pdCBjdXN0b21pemVfbWFjaGluZSh2b2lkKQoreworCS8qIGN1c3RvbWl6ZXMgcGxhdGZvcm0gZGV2aWNlcywgb3IgYWRkcyBuZXcgb25lcyAqLworCWlmIChpbml0X21hY2hpbmUpCisJCWluaXRfbWFjaGluZSgpOworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChjdXN0b21pemVfbWFjaGluZSk7CisKK3ZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcCkKK3sKKwlzdHJ1Y3QgdGFnICp0YWdzID0gKHN0cnVjdCB0YWcgKikmaW5pdF90YWdzOworCXN0cnVjdCBtYWNoaW5lX2Rlc2MgKm1kZXNjOworCWNoYXIgKmZyb20gPSBkZWZhdWx0X2NvbW1hbmRfbGluZTsKKworCXNldHVwX3Byb2Nlc3NvcigpOworCW1kZXNjID0gc2V0dXBfbWFjaGluZShtYWNoaW5lX2FyY2hfdHlwZSk7CisJbWFjaGluZV9uYW1lID0gbWRlc2MtPm5hbWU7CisKKwlpZiAobWRlc2MtPnNvZnRfcmVib290KQorCQlyZWJvb3Rfc2V0dXAoInMiKTsKKworCWlmIChtZGVzYy0+cGFyYW1fb2Zmc2V0KQorCQl0YWdzID0gcGh5c190b192aXJ0KG1kZXNjLT5wYXJhbV9vZmZzZXQpOworCisJLyoKKwkgKiBJZiB3ZSBoYXZlIHRoZSBvbGQgc3R5bGUgcGFyYW1ldGVycywgY29udmVydCB0aGVtIHRvCisJICogYSB0YWcgbGlzdC4KKwkgKi8KKwlpZiAodGFncy0+aGRyLnRhZyAhPSBBVEFHX0NPUkUpCisJCWNvbnZlcnRfdG9fdGFnX2xpc3QodGFncyk7CisJaWYgKHRhZ3MtPmhkci50YWcgIT0gQVRBR19DT1JFKQorCQl0YWdzID0gKHN0cnVjdCB0YWcgKikmaW5pdF90YWdzOworCisJaWYgKG1kZXNjLT5maXh1cCkKKwkJbWRlc2MtPmZpeHVwKG1kZXNjLCB0YWdzLCAmZnJvbSwgJm1lbWluZm8pOworCisJaWYgKHRhZ3MtPmhkci50YWcgPT0gQVRBR19DT1JFKSB7CisJCWlmIChtZW1pbmZvLm5yX2JhbmtzICE9IDApCisJCQlzcXVhc2hfbWVtX3RhZ3ModGFncyk7CisJCXBhcnNlX3RhZ3ModGFncyk7CisJfQorCisJaW5pdF9tbS5zdGFydF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpICZfdGV4dDsKKwlpbml0X21tLmVuZF9jb2RlICAgPSAodW5zaWduZWQgbG9uZykgJl9ldGV4dDsKKwlpbml0X21tLmVuZF9kYXRhICAgPSAodW5zaWduZWQgbG9uZykgJl9lZGF0YTsKKwlpbml0X21tLmJyawkgICA9ICh1bnNpZ25lZCBsb25nKSAmX2VuZDsKKworCW1lbWNweShzYXZlZF9jb21tYW5kX2xpbmUsIGZyb20sIENPTU1BTkRfTElORV9TSVpFKTsKKwlzYXZlZF9jb21tYW5kX2xpbmVbQ09NTUFORF9MSU5FX1NJWkUtMV0gPSAnXDAnOworCXBhcnNlX2NtZGxpbmUoY21kbGluZV9wLCBmcm9tKTsKKwlwYWdpbmdfaW5pdCgmbWVtaW5mbywgbWRlc2MpOworCXJlcXVlc3Rfc3RhbmRhcmRfcmVzb3VyY2VzKCZtZW1pbmZvLCBtZGVzYyk7CisKKwkvKgorCSAqIFNldCB1cCB2YXJpb3VzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwb2ludGVycworCSAqLworCWluaXRfYXJjaF9pcnEgPSBtZGVzYy0+aW5pdF9pcnE7CisJc3lzdGVtX3RpbWVyID0gbWRlc2MtPnRpbWVyOworCWluaXRfbWFjaGluZSA9IG1kZXNjLT5pbml0X21hY2hpbmU7CisKKyNpZmRlZiBDT05GSUdfVlQKKyNpZiBkZWZpbmVkKENPTkZJR19WR0FfQ09OU09MRSkKKwljb25zd2l0Y2hwID0gJnZnYV9jb247CisjZWxpZiBkZWZpbmVkKENPTkZJR19EVU1NWV9DT05TT0xFKQorCWNvbnN3aXRjaHAgPSAmZHVtbXlfY29uOworI2VuZGlmCisjZW5kaWYKK30KKworCitzdGF0aWMgaW50IF9faW5pdCB0b3BvbG9neV9pbml0KHZvaWQpCit7CisJaW50IGNwdTsKKworCWZvcl9lYWNoX2NwdShjcHUpCisJCXJlZ2lzdGVyX2NwdSgmcGVyX2NwdShjcHVfZGF0YSwgY3B1KS5jcHUsIGNwdSwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKHRvcG9sb2d5X2luaXQpOworCitzdGF0aWMgY29uc3QgY2hhciAqaHdjYXBfc3RyW10gPSB7CisJInN3cCIsCisJImhhbGYiLAorCSJ0aHVtYiIsCisJIjI2Yml0IiwKKwkiZmFzdG11bHQiLAorCSJmcGEiLAorCSJ2ZnAiLAorCSJlZHNwIiwKKwkiamF2YSIsCisJTlVMTAorfTsKKworc3RhdGljIHZvaWQKK2Nfc2hvd19jYWNoZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNvbnN0IGNoYXIgKnR5cGUsIHVuc2lnbmVkIGludCBjYWNoZSkKK3sKKwl1bnNpZ25lZCBpbnQgbXVsdCA9IDIgKyAoQ0FDSEVfTShjYWNoZSkgPyAxIDogMCk7CisKKwlzZXFfcHJpbnRmKG0sICIlcyBzaXplXHRcdDogJWRcbiIKKwkJICAgICAgIiVzIGFzc29jXHRcdDogJWRcbiIKKwkJICAgICAgIiVzIGxpbmUgbGVuZ3RoXHQ6ICVkXG4iCisJCSAgICAgICIlcyBzZXRzXHRcdDogJWRcbiIsCisJCXR5cGUsIG11bHQgPDwgKDggKyBDQUNIRV9TSVpFKGNhY2hlKSksCisJCXR5cGUsIChtdWx0IDw8IENBQ0hFX0FTU09DKGNhY2hlKSkgPj4gMSwKKwkJdHlwZSwgOCA8PCBDQUNIRV9MSU5FKGNhY2hlKSwKKwkJdHlwZSwgMSA8PCAoNiArIENBQ0hFX1NJWkUoY2FjaGUpIC0gQ0FDSEVfQVNTT0MoY2FjaGUpIC0KKwkJCSAgICBDQUNIRV9MSU5FKGNhY2hlKSkpOworfQorCitzdGF0aWMgaW50IGNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJaW50IGk7CisKKwlzZXFfcHJpbnRmKG0sICJQcm9jZXNzb3JcdDogJXMgcmV2ICVkICglcylcbiIsCisJCSAgIGNwdV9uYW1lLCAoaW50KXByb2Nlc3Nvcl9pZCAmIDE1LCBlbGZfcGxhdGZvcm0pOworCisjaWYgZGVmaW5lZChDT05GSUdfU01QKQorCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgeworCQlzZXFfcHJpbnRmKG0sICJQcm9jZXNzb3JcdDogJWRcbiIsIGkpOworCQlzZXFfcHJpbnRmKG0sICJCb2dvTUlQU1x0OiAlbHUuJTAybHVcblxuIiwKKwkJCSAgIHBlcl9jcHUoY3B1X2RhdGEsIGkpLmxvb3BzX3Blcl9qaWZmeSAvICg1MDAwMDBVTC9IWiksCisJCQkgICAocGVyX2NwdShjcHVfZGF0YSwgaSkubG9vcHNfcGVyX2ppZmZ5IC8gKDUwMDBVTC9IWikpICUgMTAwKTsKKwl9CisjZWxzZSAvKiBDT05GSUdfU01QICovCisJc2VxX3ByaW50ZihtLCAiQm9nb01JUFNcdDogJWx1LiUwMmx1XG4iLAorCQkgICBsb29wc19wZXJfamlmZnkgLyAoNTAwMDAwL0haKSwKKwkJICAgKGxvb3BzX3Blcl9qaWZmeSAvICg1MDAwL0haKSkgJSAxMDApOworI2VuZGlmCisKKwkvKiBkdW1wIG91dCB0aGUgcHJvY2Vzc29yIGZlYXR1cmVzICovCisJc2VxX3B1dHMobSwgIkZlYXR1cmVzXHQ6ICIpOworCisJZm9yIChpID0gMDsgaHdjYXBfc3RyW2ldOyBpKyspCisJCWlmIChlbGZfaHdjYXAgJiAoMSA8PCBpKSkKKwkJCXNlcV9wcmludGYobSwgIiVzICIsIGh3Y2FwX3N0cltpXSk7CisKKwlzZXFfcHJpbnRmKG0sICJcbkNQVSBpbXBsZW1lbnRlclx0OiAweCUwMnhcbiIsIHByb2Nlc3Nvcl9pZCA+PiAyNCk7CisJc2VxX3ByaW50ZihtLCAiQ1BVIGFyY2hpdGVjdHVyZTogJXNcbiIsIHByb2NfYXJjaFtjcHVfYXJjaGl0ZWN0dXJlKCldKTsKKworCWlmICgocHJvY2Vzc29yX2lkICYgMHgwMDAwZjAwMCkgPT0gMHgwMDAwMDAwMCkgeworCQkvKiBwcmUtQVJNNyAqLworCQlzZXFfcHJpbnRmKG0sICJDUFUgcGFydFx0XHQ6ICUwN3hcbiIsIHByb2Nlc3Nvcl9pZCA+PiA0KTsKKwl9IGVsc2UgeworCQlpZiAoKHByb2Nlc3Nvcl9pZCAmIDB4MDAwMGYwMDApID09IDB4MDAwMDcwMDApIHsKKwkJCS8qIEFSTTcgKi8KKwkJCXNlcV9wcmludGYobSwgIkNQVSB2YXJpYW50XHQ6IDB4JTAyeFxuIiwKKwkJCQkgICAocHJvY2Vzc29yX2lkID4+IDE2KSAmIDEyNyk7CisJCX0gZWxzZSB7CisJCQkvKiBwb3N0LUFSTTcgKi8KKwkJCXNlcV9wcmludGYobSwgIkNQVSB2YXJpYW50XHQ6IDB4JXhcbiIsCisJCQkJICAgKHByb2Nlc3Nvcl9pZCA+PiAyMCkgJiAxNSk7CisJCX0KKwkJc2VxX3ByaW50ZihtLCAiQ1BVIHBhcnRcdDogMHglMDN4XG4iLAorCQkJICAgKHByb2Nlc3Nvcl9pZCA+PiA0KSAmIDB4ZmZmKTsKKwl9CisJc2VxX3ByaW50ZihtLCAiQ1BVIHJldmlzaW9uXHQ6ICVkXG4iLCBwcm9jZXNzb3JfaWQgJiAxNSk7CisKKwl7CisJCXVuc2lnbmVkIGludCBjYWNoZV9pbmZvID0gcmVhZF9jcHVpZChDUFVJRF9DQUNIRVRZUEUpOworCQlpZiAoY2FjaGVfaW5mbyAhPSBwcm9jZXNzb3JfaWQpIHsKKwkJCXNlcV9wcmludGYobSwgIkNhY2hlIHR5cGVcdDogJXNcbiIKKwkJCQkgICAgICAiQ2FjaGUgY2xlYW5cdDogJXNcbiIKKwkJCQkgICAgICAiQ2FjaGUgbG9ja2Rvd25cdDogJXNcbiIKKwkJCQkgICAgICAiQ2FjaGUgZm9ybWF0XHQ6ICVzXG4iLAorCQkJCSAgIGNhY2hlX3R5cGVzW0NBQ0hFX1RZUEUoY2FjaGVfaW5mbyldLAorCQkJCSAgIGNhY2hlX2NsZWFuW0NBQ0hFX1RZUEUoY2FjaGVfaW5mbyldLAorCQkJCSAgIGNhY2hlX2xvY2tkb3duW0NBQ0hFX1RZUEUoY2FjaGVfaW5mbyldLAorCQkJCSAgIENBQ0hFX1MoY2FjaGVfaW5mbykgPyAiSGFydmFyZCIgOiAiVW5pZmllZCIpOworCisJCQlpZiAoQ0FDSEVfUyhjYWNoZV9pbmZvKSkgeworCQkJCWNfc2hvd19jYWNoZShtLCAiSSIsIENBQ0hFX0lTSVpFKGNhY2hlX2luZm8pKTsKKwkJCQljX3Nob3dfY2FjaGUobSwgIkQiLCBDQUNIRV9EU0laRShjYWNoZV9pbmZvKSk7CisJCQl9IGVsc2UgeworCQkJCWNfc2hvd19jYWNoZShtLCAiQ2FjaGUiLCBDQUNIRV9JU0laRShjYWNoZV9pbmZvKSk7CisJCQl9CisJCX0KKwl9CisKKwlzZXFfcHV0cyhtLCAiXG4iKTsKKworCXNlcV9wcmludGYobSwgIkhhcmR3YXJlXHQ6ICVzXG4iLCBtYWNoaW5lX25hbWUpOworCXNlcV9wcmludGYobSwgIlJldmlzaW9uXHQ6ICUwNHhcbiIsIHN5c3RlbV9yZXYpOworCXNlcV9wcmludGYobSwgIlNlcmlhbFx0XHQ6ICUwOHglMDh4XG4iLAorCQkgICBzeXN0ZW1fc2VyaWFsX2hpZ2gsIHN5c3RlbV9zZXJpYWxfbG93KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAqY19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQoreworCXJldHVybiAqcG9zIDwgMSA/ICh2b2lkICopMSA6IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICpjX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwkrKypwb3M7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7Cit9CisKK3N0cnVjdCBzZXFfb3BlcmF0aW9ucyBjcHVpbmZvX29wID0geworCS5zdGFydAk9IGNfc3RhcnQsCisJLm5leHQJPSBjX25leHQsCisJLnN0b3AJPSBjX3N0b3AsCisJLnNob3cJPSBjX3Nob3cKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMxOTE5ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYwpAQCAtMCwwICsxLDc0OCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KKworI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3Vjb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisKKyNpbmNsdWRlICJwdHJhY2UuaCIKKworI2RlZmluZSBfQkxPQ0tBQkxFICh+KHNpZ21hc2soU0lHS0lMTCkgfCBzaWdtYXNrKFNJR1NUT1ApKSkKKworLyoKKyAqIEZvciBBUk0gc3lzY2FsbHMsIHdlIGVuY29kZSB0aGUgc3lzY2FsbCBudW1iZXIgaW50byB0aGUgaW5zdHJ1Y3Rpb24uCisgKi8KKyNkZWZpbmUgU1dJX1NZU19TSUdSRVRVUk4JKDB4ZWYwMDAwMDB8KF9fTlJfc2lncmV0dXJuKSkKKyNkZWZpbmUgU1dJX1NZU19SVF9TSUdSRVRVUk4JKDB4ZWYwMDAwMDB8KF9fTlJfcnRfc2lncmV0dXJuKSkKKworLyoKKyAqIEZvciBUaHVtYiBzeXNjYWxscywgd2UgcGFzcyB0aGUgc3lzY2FsbCBudW1iZXIgdmlhIHI3LiAgV2UgdGhlcmVmb3JlCisgKiBuZWVkIHR3byAxNi1iaXQgaW5zdHJ1Y3Rpb25zLgorICovCisjZGVmaW5lIFNXSV9USFVNQl9TSUdSRVRVUk4JKDB4ZGYwMCA8PCAxNiB8IDB4MjcwMCB8IChfX05SX3NpZ3JldHVybiAtIF9fTlJfU1lTQ0FMTF9CQVNFKSkKKyNkZWZpbmUgU1dJX1RIVU1CX1JUX1NJR1JFVFVSTgkoMHhkZjAwIDw8IDE2IHwgMHgyNzAwIHwgKF9fTlJfcnRfc2lncmV0dXJuIC0gX19OUl9TWVNDQUxMX0JBU0UpKQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyByZXRjb2Rlc1s0XSA9IHsKKwlTV0lfU1lTX1NJR1JFVFVSTiwJU1dJX1RIVU1CX1NJR1JFVFVSTiwKKwlTV0lfU1lTX1JUX1NJR1JFVFVSTiwJU1dJX1RIVU1CX1JUX1NJR1JFVFVSTgorfTsKKworc3RhdGljIGludCBkb19zaWduYWwoc2lnc2V0X3QgKm9sZHNldCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBpbnQgc3lzY2FsbCk7CisKKy8qCisgKiBhdG9taWNhbGx5IHN3YXAgaW4gdGhlIG5ldyBzaWduYWwgbWFzaywgYW5kIHdhaXQgZm9yIGEgc2lnbmFsLgorICovCithc21saW5rYWdlIGludCBzeXNfc2lnc3VzcGVuZChpbnQgcmVzdGFydCwgdW5zaWduZWQgbG9uZyBvbGRtYXNrLCBvbGRfc2lnc2V0X3QgbWFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc2lnc2V0X3Qgc2F2ZXNldDsKKworCW1hc2sgJj0gX0JMT0NLQUJMRTsKKwlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwlzYXZlc2V0ID0gY3VycmVudC0+YmxvY2tlZDsKKwlzaWdpbml0c2V0KCZjdXJyZW50LT5ibG9ja2VkLCBtYXNrKTsKKwlyZWNhbGNfc2lncGVuZGluZygpOworCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJcmVncy0+QVJNX3IwID0gLUVJTlRSOworCisJd2hpbGUgKDEpIHsKKwkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisJCXNjaGVkdWxlKCk7CisJCWlmIChkb19zaWduYWwoJnNhdmVzZXQsIHJlZ3MsIDApKQorCQkJcmV0dXJuIHJlZ3MtPkFSTV9yMDsKKwl9Cit9CisKK2FzbWxpbmthZ2UgaW50CitzeXNfcnRfc2lnc3VzcGVuZChzaWdzZXRfdCBfX3VzZXIgKnVuZXdzZXQsIHNpemVfdCBzaWdzZXRzaXplLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzaWdzZXRfdCBzYXZlc2V0LCBuZXdzZXQ7CisKKwkvKiBYWFg6IERvbid0IHByZWNsdWRlIGhhbmRsaW5nIGRpZmZlcmVudCBzaXplZCBzaWdzZXRfdCdzLiAqLworCWlmIChzaWdzZXRzaXplICE9IHNpemVvZihzaWdzZXRfdCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdzZXQsIHVuZXdzZXQsIHNpemVvZihuZXdzZXQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJc2lnZGVsc2V0bWFzaygmbmV3c2V0LCB+X0JMT0NLQUJMRSk7CisKKwlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwlzYXZlc2V0ID0gY3VycmVudC0+YmxvY2tlZDsKKwljdXJyZW50LT5ibG9ja2VkID0gbmV3c2V0OworCXJlY2FsY19zaWdwZW5kaW5nKCk7CisJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwlyZWdzLT5BUk1fcjAgPSAtRUlOVFI7CisKKwl3aGlsZSAoMSkgeworCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKwkJc2NoZWR1bGUoKTsKKwkJaWYgKGRvX3NpZ25hbCgmc2F2ZXNldCwgcmVncywgMCkpCisJCQlyZXR1cm4gcmVncy0+QVJNX3IwOworCX0KK30KKworYXNtbGlua2FnZSBpbnQgCitzeXNfc2lnYWN0aW9uKGludCBzaWcsIGNvbnN0IHN0cnVjdCBvbGRfc2lnYWN0aW9uIF9fdXNlciAqYWN0LAorCSAgICAgIHN0cnVjdCBvbGRfc2lnYWN0aW9uIF9fdXNlciAqb2FjdCkKK3sKKwlzdHJ1Y3Qga19zaWdhY3Rpb24gbmV3X2thLCBvbGRfa2E7CisJaW50IHJldDsKKworCWlmIChhY3QpIHsKKwkJb2xkX3NpZ3NldF90IG1hc2s7CisJCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBhY3QsIHNpemVvZigqYWN0KSkgfHwKKwkJICAgIF9fZ2V0X3VzZXIobmV3X2thLnNhLnNhX2hhbmRsZXIsICZhY3QtPnNhX2hhbmRsZXIpIHx8CisJCSAgICBfX2dldF91c2VyKG5ld19rYS5zYS5zYV9yZXN0b3JlciwgJmFjdC0+c2FfcmVzdG9yZXIpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCV9fZ2V0X3VzZXIobmV3X2thLnNhLnNhX2ZsYWdzLCAmYWN0LT5zYV9mbGFncyk7CisJCV9fZ2V0X3VzZXIobWFzaywgJmFjdC0+c2FfbWFzayk7CisJCXNpZ2luaXRzZXQoJm5ld19rYS5zYS5zYV9tYXNrLCBtYXNrKTsKKwl9CisKKwlyZXQgPSBkb19zaWdhY3Rpb24oc2lnLCBhY3QgPyAmbmV3X2thIDogTlVMTCwgb2FjdCA/ICZvbGRfa2EgOiBOVUxMKTsKKworCWlmICghcmV0ICYmIG9hY3QpIHsKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBvYWN0LCBzaXplb2YoKm9hY3QpKSB8fAorCQkgICAgX19wdXRfdXNlcihvbGRfa2Euc2Euc2FfaGFuZGxlciwgJm9hY3QtPnNhX2hhbmRsZXIpIHx8CisJCSAgICBfX3B1dF91c2VyKG9sZF9rYS5zYS5zYV9yZXN0b3JlciwgJm9hY3QtPnNhX3Jlc3RvcmVyKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlfX3B1dF91c2VyKG9sZF9rYS5zYS5zYV9mbGFncywgJm9hY3QtPnNhX2ZsYWdzKTsKKwkJX19wdXRfdXNlcihvbGRfa2Euc2Euc2FfbWFzay5zaWdbMF0sICZvYWN0LT5zYV9tYXNrKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX0lXTU1YVAorCisvKiBpd21teHRfYXJlYSBpcyAweDk4IGJ5dGVzIGxvbmcsIHByZWNlZWRlZCBieSA4IGJ5dGVzIG9mIHNpZ25hdHVyZSAqLworI2RlZmluZSBJV01NWFRfU1RPUkFHRV9TSVpFCSgweDk4ICsgOCkKKyNkZWZpbmUgSVdNTVhUX01BR0lDMAkJMHgxMmVmODQyYQorI2RlZmluZSBJV01NWFRfTUFHSUMxCQkweDFjMDdjYTcxCisKK3N0cnVjdCBpd21teHRfc2lnZnJhbWUgeworCXVuc2lnbmVkIGxvbmcJbWFnaWMwOworCXVuc2lnbmVkIGxvbmcJbWFnaWMxOworCXVuc2lnbmVkIGxvbmcJc3RvcmFnZVsweDk4LzRdOworfTsKKworc3RhdGljIGludCBwYWdlX3ByZXNlbnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHZvaWQgX191c2VyICp1cHRyLCBpbnQgd3IpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpdXB0cjsKKwlwZ2RfdCAqcGdkID0gcGdkX29mZnNldChtbSwgYWRkcik7CisJaWYgKHBnZF9wcmVzZW50KCpwZ2QpKSB7CisJCXBtZF90ICpwbWQgPSBwbWRfb2Zmc2V0KHBnZCwgYWRkcik7CisJCWlmIChwbWRfcHJlc2VudCgqcG1kKSkgeworCQkJcHRlX3QgKnB0ZSA9IHB0ZV9vZmZzZXRfbWFwKHBtZCwgYWRkcik7CisJCQlyZXR1cm4gKHB0ZV9wcmVzZW50KCpwdGUpICYmICghd3IgfHwgcHRlX3dyaXRlKCpwdGUpKSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29weV9sb2NrZWQodm9pZCBfX3VzZXIgKnVwdHIsIHZvaWQgKmtwdHIsIHNpemVfdCBzaXplLCBpbnQgd3JpdGUsCisJCSAgICAgICB2b2lkICgqY29weWZuKSh2b2lkICosIHZvaWQgX191c2VyICopKQoreworCXVuc2lnbmVkIGNoYXIgdiwgX191c2VyICp1c2VycHRyID0gdXB0cjsKKwlpbnQgZXJyID0gMDsKKworCWRvIHsKKwkJc3RydWN0IG1tX3N0cnVjdCAqbW07CisKKwkJaWYgKHdyaXRlKSB7CisJCQlfX3B1dF91c2VyX2Vycm9yKDAsIHVzZXJwdHIsIGVycik7CisJCQlfX3B1dF91c2VyX2Vycm9yKDAsIHVzZXJwdHIgKyBzaXplIC0gMSwgZXJyKTsKKwkJfSBlbHNlIHsKKwkJCV9fZ2V0X3VzZXJfZXJyb3IodiwgdXNlcnB0ciwgZXJyKTsKKwkJCV9fZ2V0X3VzZXJfZXJyb3IodiwgdXNlcnB0ciArIHNpemUgLSAxLCBlcnIpOworCQl9CisKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCisJCW1tID0gY3VycmVudC0+bW07CisJCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJCWlmIChwYWdlX3ByZXNlbnQobW0sIHVzZXJwdHIsIHdyaXRlKSAmJgorCQkgICAgcGFnZV9wcmVzZW50KG1tLCB1c2VycHRyICsgc2l6ZSAtIDEsIHdyaXRlKSkgeworCQkgICAgCWNvcHlmbihrcHRyLCB1cHRyKTsKKwkJfSBlbHNlCisJCQllcnIgPSAxOworCQlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJfSB3aGlsZSAoZXJyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcHJlc2VydmVfaXdtbXh0X2NvbnRleHQoc3RydWN0IGl3bW14dF9zaWdmcmFtZSAqZnJhbWUpCit7CisJaW50IGVyciA9IDA7CisKKwkvKiB0aGUgaVdNTVh0IGNvbnRleHQgbXVzdCBiZSA2NCBiaXQgYWxpZ25lZCAqLworCVdBUk5fT04oKHVuc2lnbmVkIGxvbmcpZnJhbWUgJiA3KTsKKworCV9fcHV0X3VzZXJfZXJyb3IoSVdNTVhUX01BR0lDMCwgJmZyYW1lLT5tYWdpYzAsIGVycik7CisJX19wdXRfdXNlcl9lcnJvcihJV01NWFRfTUFHSUMxLCAmZnJhbWUtPm1hZ2ljMSwgZXJyKTsKKworCS8qCisJICogaXdtbXh0X3Rhc2tfY29weSgpIGRvZXNuJ3QgY2hlY2sgdXNlciBwZXJtaXNzaW9ucy4KKwkgKiBMZXQncyBkbyBhIGR1bW15IHdyaXRlIG9uIHRoZSB1cHBlciBib3VuZGFyeSB0byBlbnN1cmUKKwkgKiBhY2Nlc3MgdG8gdXNlciBtZW0gaXMgT0sgYWxsIHdheSB1cC4KKwkgKi8KKwllcnIgfD0gY29weV9sb2NrZWQoJmZyYW1lLT5zdG9yYWdlLCBjdXJyZW50X3RocmVhZF9pbmZvKCksCisJCQkgICBzaXplb2YoZnJhbWUtPnN0b3JhZ2UpLCAxLCBpd21teHRfdGFza19jb3B5KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHJlc3RvcmVfaXdtbXh0X2NvbnRleHQoc3RydWN0IGl3bW14dF9zaWdmcmFtZSAqZnJhbWUpCit7CisJdW5zaWduZWQgbG9uZyBtYWdpYzAsIG1hZ2ljMTsKKwlpbnQgZXJyID0gMDsKKworCS8qIHRoZSBpV01NWHQgY29udGV4dCBpcyA2NCBiaXQgYWxpZ25lZCAqLworCVdBUk5fT04oKHVuc2lnbmVkIGxvbmcpZnJhbWUgJiA3KTsKKworCS8qCisJICogVmFsaWRhdGUgaVdNTVh0IGNvbnRleHQgc2lnbmF0dXJlLgorCSAqIEFsc28sIGl3bW14dF90YXNrX3Jlc3RvcmUoKSBkb2Vzbid0IGNoZWNrIHVzZXIgcGVybWlzc2lvbnMuCisJICogTGV0J3MgZG8gYSBkdW1teSB3cml0ZSBvbiB0aGUgdXBwZXIgYm91bmRhcnkgdG8gZW5zdXJlCisJICogYWNjZXNzIHRvIHVzZXIgbWVtIGlzIE9LIGFsbCB3YXkgdXAuCisJICovCisJX19nZXRfdXNlcl9lcnJvcihtYWdpYzAsICZmcmFtZS0+bWFnaWMwLCBlcnIpOworCV9fZ2V0X3VzZXJfZXJyb3IobWFnaWMxLCAmZnJhbWUtPm1hZ2ljMSwgZXJyKTsKKwlpZiAoIWVyciAmJiBtYWdpYzAgPT0gSVdNTVhUX01BR0lDMCAmJiBtYWdpYzEgPT0gSVdNTVhUX01BR0lDMSkKKwkJZXJyID0gY29weV9sb2NrZWQoJmZyYW1lLT5zdG9yYWdlLCBjdXJyZW50X3RocmVhZF9pbmZvKCksCisJCQkJICBzaXplb2YoZnJhbWUtPnN0b3JhZ2UpLCAwLCBpd21teHRfdGFza19yZXN0b3JlKTsKKwlyZXR1cm4gZXJyOworfQorCisjZW5kaWYKKworLyoKKyAqIEF1eGlsaWFyeSBzaWduYWwgZnJhbWUuICBUaGlzIHNhdmVzIHN0dWZmIGxpa2UgRlAgc3RhdGUuCisgKiBUaGUgbGF5b3V0IG9mIHRoaXMgc3RydWN0dXJlIGlzIG5vdCBwYXJ0IG9mIHRoZSB1c2VyIEFCSS4KKyAqLworc3RydWN0IGF1eF9zaWdmcmFtZSB7CisjaWZkZWYgQ09ORklHX0lXTU1YVAorCXN0cnVjdCBpd21teHRfc2lnZnJhbWUJaXdtbXh0OworI2VuZGlmCisjaWZkZWYgQ09ORklHX1ZGUAorCXVuaW9uIHZmcF9zdGF0ZQkJdmZwOworI2VuZGlmCit9OworCisvKgorICogRG8gYSBzaWduYWwgcmV0dXJuOyB1bmRvIHRoZSBzaWduYWwgc3RhY2suICBUaGVzZSBhcmUgYWxpZ25lZCB0byA2NC1iaXQuCisgKi8KK3N0cnVjdCBzaWdmcmFtZSB7CisJc3RydWN0IHNpZ2NvbnRleHQgc2M7CisJdW5zaWduZWQgbG9uZyBleHRyYW1hc2tbX05TSUdfV09SRFMtMV07CisJdW5zaWduZWQgbG9uZyByZXRjb2RlOworCXN0cnVjdCBhdXhfc2lnZnJhbWUgYXV4IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKK307CisKK3N0cnVjdCBydF9zaWdmcmFtZSB7CisJc3RydWN0IHNpZ2luZm8gX191c2VyICpwaW5mbzsKKwl2b2lkIF9fdXNlciAqcHVjOworCXN0cnVjdCBzaWdpbmZvIGluZm87CisJc3RydWN0IHVjb250ZXh0IHVjOworCXVuc2lnbmVkIGxvbmcgcmV0Y29kZTsKKwlzdHJ1Y3QgYXV4X3NpZ2ZyYW1lIGF1eCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7Cit9OworCitzdGF0aWMgaW50CityZXN0b3JlX3NpZ2NvbnRleHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqc2MsCisJCSAgIHN0cnVjdCBhdXhfc2lnZnJhbWUgX191c2VyICphdXgpCit7CisJaW50IGVyciA9IDA7CisKKwlfX2dldF91c2VyX2Vycm9yKHJlZ3MtPkFSTV9yMCwgJnNjLT5hcm1fcjAsIGVycik7CisJX19nZXRfdXNlcl9lcnJvcihyZWdzLT5BUk1fcjEsICZzYy0+YXJtX3IxLCBlcnIpOworCV9fZ2V0X3VzZXJfZXJyb3IocmVncy0+QVJNX3IyLCAmc2MtPmFybV9yMiwgZXJyKTsKKwlfX2dldF91c2VyX2Vycm9yKHJlZ3MtPkFSTV9yMywgJnNjLT5hcm1fcjMsIGVycik7CisJX19nZXRfdXNlcl9lcnJvcihyZWdzLT5BUk1fcjQsICZzYy0+YXJtX3I0LCBlcnIpOworCV9fZ2V0X3VzZXJfZXJyb3IocmVncy0+QVJNX3I1LCAmc2MtPmFybV9yNSwgZXJyKTsKKwlfX2dldF91c2VyX2Vycm9yKHJlZ3MtPkFSTV9yNiwgJnNjLT5hcm1fcjYsIGVycik7CisJX19nZXRfdXNlcl9lcnJvcihyZWdzLT5BUk1fcjcsICZzYy0+YXJtX3I3LCBlcnIpOworCV9fZ2V0X3VzZXJfZXJyb3IocmVncy0+QVJNX3I4LCAmc2MtPmFybV9yOCwgZXJyKTsKKwlfX2dldF91c2VyX2Vycm9yKHJlZ3MtPkFSTV9yOSwgJnNjLT5hcm1fcjksIGVycik7CisJX19nZXRfdXNlcl9lcnJvcihyZWdzLT5BUk1fcjEwLCAmc2MtPmFybV9yMTAsIGVycik7CisJX19nZXRfdXNlcl9lcnJvcihyZWdzLT5BUk1fZnAsICZzYy0+YXJtX2ZwLCBlcnIpOworCV9fZ2V0X3VzZXJfZXJyb3IocmVncy0+QVJNX2lwLCAmc2MtPmFybV9pcCwgZXJyKTsKKwlfX2dldF91c2VyX2Vycm9yKHJlZ3MtPkFSTV9zcCwgJnNjLT5hcm1fc3AsIGVycik7CisJX19nZXRfdXNlcl9lcnJvcihyZWdzLT5BUk1fbHIsICZzYy0+YXJtX2xyLCBlcnIpOworCV9fZ2V0X3VzZXJfZXJyb3IocmVncy0+QVJNX3BjLCAmc2MtPmFybV9wYywgZXJyKTsKKwlfX2dldF91c2VyX2Vycm9yKHJlZ3MtPkFSTV9jcHNyLCAmc2MtPmFybV9jcHNyLCBlcnIpOworCisJZXJyIHw9ICF2YWxpZF91c2VyX3JlZ3MocmVncyk7CisKKyNpZmRlZiBDT05GSUdfSVdNTVhUCisJaWYgKGVyciA9PSAwICYmIHRlc3RfdGhyZWFkX2ZsYWcoVElGX1VTSU5HX0lXTU1YVCkpCisJCWVyciB8PSByZXN0b3JlX2l3bW14dF9jb250ZXh0KCZhdXgtPml3bW14dCk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVkZQCisvLwlpZiAoZXJyID09IDApCisvLwkJZXJyIHw9IHZmcF9yZXN0b3JlX3N0YXRlKCZhdXgtPnZmcCk7CisjZW5kaWYKKworCXJldHVybiBlcnI7Cit9CisKK2FzbWxpbmthZ2UgaW50IHN5c19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHNpZ2ZyYW1lIF9fdXNlciAqZnJhbWU7CisJc2lnc2V0X3Qgc2V0OworCisJLyogQWx3YXlzIG1ha2UgYW55IHBlbmRpbmcgcmVzdGFydGVkIHN5c3RlbSBjYWxscyByZXR1cm4gLUVJTlRSICovCisJY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsOworCisJLyoKKwkgKiBTaW5jZSB3ZSBzdGFja2VkIHRoZSBzaWduYWwgb24gYSA2NC1iaXQgYm91bmRhcnksCisJICogdGhlbiAnc3AnIHNob3VsZCBiZSB3b3JkIGFsaWduZWQgaGVyZS4gIElmIGl0J3MKKwkgKiBub3QsIHRoZW4gdGhlIHVzZXIgaXMgdHJ5aW5nIHRvIG1lc3Mgd2l0aCB1cy4KKwkgKi8KKwlpZiAocmVncy0+QVJNX3NwICYgNykKKwkJZ290byBiYWRmcmFtZTsKKworCWZyYW1lID0gKHN0cnVjdCBzaWdmcmFtZSBfX3VzZXIgKilyZWdzLT5BUk1fc3A7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgZnJhbWUsIHNpemVvZiAoKmZyYW1lKSkpCisJCWdvdG8gYmFkZnJhbWU7CisJaWYgKF9fZ2V0X3VzZXIoc2V0LnNpZ1swXSwgJmZyYW1lLT5zYy5vbGRtYXNrKQorCSAgICB8fCAoX05TSUdfV09SRFMgPiAxCisJICAgICAgICAmJiBfX2NvcHlfZnJvbV91c2VyKCZzZXQuc2lnWzFdLCAmZnJhbWUtPmV4dHJhbWFzaywKKwkJCQkgICAgc2l6ZW9mKGZyYW1lLT5leHRyYW1hc2spKSkpCisJCWdvdG8gYmFkZnJhbWU7CisKKwlzaWdkZWxzZXRtYXNrKCZzZXQsIH5fQkxPQ0tBQkxFKTsKKwlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwljdXJyZW50LT5ibG9ja2VkID0gc2V0OworCXJlY2FsY19zaWdwZW5kaW5nKCk7CisJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKworCWlmIChyZXN0b3JlX3NpZ2NvbnRleHQocmVncywgJmZyYW1lLT5zYywgJmZyYW1lLT5hdXgpKQorCQlnb3RvIGJhZGZyYW1lOworCisJLyogU2VuZCBTSUdUUkFQIGlmIHdlJ3JlIHNpbmdsZS1zdGVwcGluZyAqLworCWlmIChjdXJyZW50LT5wdHJhY2UgJiBQVF9TSU5HTEVTVEVQKSB7CisJCXB0cmFjZV9jYW5jZWxfYnB0KGN1cnJlbnQpOworCQlzZW5kX3NpZyhTSUdUUkFQLCBjdXJyZW50LCAxKTsKKwl9CisKKwlyZXR1cm4gcmVncy0+QVJNX3IwOworCitiYWRmcmFtZToKKwlmb3JjZV9zaWcoU0lHU0VHViwgY3VycmVudCk7CisJcmV0dXJuIDA7Cit9CisKK2FzbWxpbmthZ2UgaW50IHN5c19ydF9zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHJ0X3NpZ2ZyYW1lIF9fdXNlciAqZnJhbWU7CisJc2lnc2V0X3Qgc2V0OworCisJLyogQWx3YXlzIG1ha2UgYW55IHBlbmRpbmcgcmVzdGFydGVkIHN5c3RlbSBjYWxscyByZXR1cm4gLUVJTlRSICovCisJY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsOworCisJLyoKKwkgKiBTaW5jZSB3ZSBzdGFja2VkIHRoZSBzaWduYWwgb24gYSA2NC1iaXQgYm91bmRhcnksCisJICogdGhlbiAnc3AnIHNob3VsZCBiZSB3b3JkIGFsaWduZWQgaGVyZS4gIElmIGl0J3MKKwkgKiBub3QsIHRoZW4gdGhlIHVzZXIgaXMgdHJ5aW5nIHRvIG1lc3Mgd2l0aCB1cy4KKwkgKi8KKwlpZiAocmVncy0+QVJNX3NwICYgNykKKwkJZ290byBiYWRmcmFtZTsKKworCWZyYW1lID0gKHN0cnVjdCBydF9zaWdmcmFtZSBfX3VzZXIgKilyZWdzLT5BUk1fc3A7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgZnJhbWUsIHNpemVvZiAoKmZyYW1lKSkpCisJCWdvdG8gYmFkZnJhbWU7CisJaWYgKF9fY29weV9mcm9tX3VzZXIoJnNldCwgJmZyYW1lLT51Yy51Y19zaWdtYXNrLCBzaXplb2Yoc2V0KSkpCisJCWdvdG8gYmFkZnJhbWU7CisKKwlzaWdkZWxzZXRtYXNrKCZzZXQsIH5fQkxPQ0tBQkxFKTsKKwlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwljdXJyZW50LT5ibG9ja2VkID0gc2V0OworCXJlY2FsY19zaWdwZW5kaW5nKCk7CisJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKworCWlmIChyZXN0b3JlX3NpZ2NvbnRleHQocmVncywgJmZyYW1lLT51Yy51Y19tY29udGV4dCwgJmZyYW1lLT5hdXgpKQorCQlnb3RvIGJhZGZyYW1lOworCisJaWYgKGRvX3NpZ2FsdHN0YWNrKCZmcmFtZS0+dWMudWNfc3RhY2ssIE5VTEwsIHJlZ3MtPkFSTV9zcCkgPT0gLUVGQVVMVCkKKwkJZ290byBiYWRmcmFtZTsKKworCS8qIFNlbmQgU0lHVFJBUCBpZiB3ZSdyZSBzaW5nbGUtc3RlcHBpbmcgKi8KKwlpZiAoY3VycmVudC0+cHRyYWNlICYgUFRfU0lOR0xFU1RFUCkgeworCQlwdHJhY2VfY2FuY2VsX2JwdChjdXJyZW50KTsKKwkJc2VuZF9zaWcoU0lHVFJBUCwgY3VycmVudCwgMSk7CisJfQorCisJcmV0dXJuIHJlZ3MtPkFSTV9yMDsKKworYmFkZnJhbWU6CisJZm9yY2Vfc2lnKFNJR1NFR1YsIGN1cnJlbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzZXR1cF9zaWdjb250ZXh0KHN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqc2MsIHN0cnVjdCBhdXhfc2lnZnJhbWUgX191c2VyICphdXgsCisJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBtYXNrKQoreworCWludCBlcnIgPSAwOworCisJX19wdXRfdXNlcl9lcnJvcihyZWdzLT5BUk1fcjAsICZzYy0+YXJtX3IwLCBlcnIpOworCV9fcHV0X3VzZXJfZXJyb3IocmVncy0+QVJNX3IxLCAmc2MtPmFybV9yMSwgZXJyKTsKKwlfX3B1dF91c2VyX2Vycm9yKHJlZ3MtPkFSTV9yMiwgJnNjLT5hcm1fcjIsIGVycik7CisJX19wdXRfdXNlcl9lcnJvcihyZWdzLT5BUk1fcjMsICZzYy0+YXJtX3IzLCBlcnIpOworCV9fcHV0X3VzZXJfZXJyb3IocmVncy0+QVJNX3I0LCAmc2MtPmFybV9yNCwgZXJyKTsKKwlfX3B1dF91c2VyX2Vycm9yKHJlZ3MtPkFSTV9yNSwgJnNjLT5hcm1fcjUsIGVycik7CisJX19wdXRfdXNlcl9lcnJvcihyZWdzLT5BUk1fcjYsICZzYy0+YXJtX3I2LCBlcnIpOworCV9fcHV0X3VzZXJfZXJyb3IocmVncy0+QVJNX3I3LCAmc2MtPmFybV9yNywgZXJyKTsKKwlfX3B1dF91c2VyX2Vycm9yKHJlZ3MtPkFSTV9yOCwgJnNjLT5hcm1fcjgsIGVycik7CisJX19wdXRfdXNlcl9lcnJvcihyZWdzLT5BUk1fcjksICZzYy0+YXJtX3I5LCBlcnIpOworCV9fcHV0X3VzZXJfZXJyb3IocmVncy0+QVJNX3IxMCwgJnNjLT5hcm1fcjEwLCBlcnIpOworCV9fcHV0X3VzZXJfZXJyb3IocmVncy0+QVJNX2ZwLCAmc2MtPmFybV9mcCwgZXJyKTsKKwlfX3B1dF91c2VyX2Vycm9yKHJlZ3MtPkFSTV9pcCwgJnNjLT5hcm1faXAsIGVycik7CisJX19wdXRfdXNlcl9lcnJvcihyZWdzLT5BUk1fc3AsICZzYy0+YXJtX3NwLCBlcnIpOworCV9fcHV0X3VzZXJfZXJyb3IocmVncy0+QVJNX2xyLCAmc2MtPmFybV9sciwgZXJyKTsKKwlfX3B1dF91c2VyX2Vycm9yKHJlZ3MtPkFSTV9wYywgJnNjLT5hcm1fcGMsIGVycik7CisJX19wdXRfdXNlcl9lcnJvcihyZWdzLT5BUk1fY3BzciwgJnNjLT5hcm1fY3BzciwgZXJyKTsKKworCV9fcHV0X3VzZXJfZXJyb3IoY3VycmVudC0+dGhyZWFkLnRyYXBfbm8sICZzYy0+dHJhcF9ubywgZXJyKTsKKwlfX3B1dF91c2VyX2Vycm9yKGN1cnJlbnQtPnRocmVhZC5lcnJvcl9jb2RlLCAmc2MtPmVycm9yX2NvZGUsIGVycik7CisJX19wdXRfdXNlcl9lcnJvcihjdXJyZW50LT50aHJlYWQuYWRkcmVzcywgJnNjLT5mYXVsdF9hZGRyZXNzLCBlcnIpOworCV9fcHV0X3VzZXJfZXJyb3IobWFzaywgJnNjLT5vbGRtYXNrLCBlcnIpOworCisjaWZkZWYgQ09ORklHX0lXTU1YVAorCWlmIChlcnIgPT0gMCAmJiB0ZXN0X3RocmVhZF9mbGFnKFRJRl9VU0lOR19JV01NWFQpKQorCQllcnIgfD0gcHJlc2VydmVfaXdtbXh0X2NvbnRleHQoJmF1eC0+aXdtbXh0KTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19WRlAKKy8vCWlmIChlcnIgPT0gMCkKKy8vCQllcnIgfD0gdmZwX3NhdmVfc3RhdGUoJmF1eC0+dmZwKTsKKyNlbmRpZgorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fdXNlciAqCitnZXRfc2lnZnJhbWUoc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBmcmFtZXNpemUpCit7CisJdW5zaWduZWQgbG9uZyBzcCA9IHJlZ3MtPkFSTV9zcDsKKwl2b2lkIF9fdXNlciAqZnJhbWU7CisKKwkvKgorCSAqIFRoaXMgaXMgdGhlIFgvT3BlbiBzYW5jdGlvbmVkIHNpZ25hbCBzdGFjayBzd2l0Y2hpbmcuCisJICovCisJaWYgKChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9PTlNUQUNLKSAmJiAhc2FzX3NzX2ZsYWdzKHNwKSkKKwkJc3AgPSBjdXJyZW50LT5zYXNfc3Nfc3AgKyBjdXJyZW50LT5zYXNfc3Nfc2l6ZTsKKworCS8qCisJICogQVRQQ1MgQjAxIG1hbmRhdGVzIDgtYnl0ZSBhbGlnbm1lbnQKKwkgKi8KKwlmcmFtZSA9ICh2b2lkIF9fdXNlciAqKSgoc3AgLSBmcmFtZXNpemUpICYgfjcpOworCisJLyoKKwkgKiBDaGVjayB0aGF0IHdlIGNhbiBhY3R1YWxseSB3cml0ZSB0byB0aGUgc2lnbmFsIGZyYW1lLgorCSAqLworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgZnJhbWUsIGZyYW1lc2l6ZSkpCisJCWZyYW1lID0gTlVMTDsKKworCXJldHVybiBmcmFtZTsKK30KKworc3RhdGljIGludAorc2V0dXBfcmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLAorCSAgICAgdW5zaWduZWQgbG9uZyBfX3VzZXIgKnJjLCB2b2lkIF9fdXNlciAqZnJhbWUsIGludCB1c2lnKQoreworCXVuc2lnbmVkIGxvbmcgaGFuZGxlciA9ICh1bnNpZ25lZCBsb25nKWthLT5zYS5zYV9oYW5kbGVyOworCXVuc2lnbmVkIGxvbmcgcmV0Y29kZTsKKwlpbnQgdGh1bWIgPSAwOworCXVuc2lnbmVkIGxvbmcgY3BzciA9IHJlZ3MtPkFSTV9jcHNyICYgflBTUl9mOworCisJLyoKKwkgKiBNYXliZSB3ZSBuZWVkIHRvIGRlbGl2ZXIgYSAzMi1iaXQgc2lnbmFsIHRvIGEgMjYtYml0IHRhc2suCisJICovCisJaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX1RISVJUWVRXTykKKwkJY3BzciA9IChjcHNyICYgfk1PREVfTUFTSykgfCBVU1JfTU9ERTsKKworI2lmZGVmIENPTkZJR19BUk1fVEhVTUIKKwlpZiAoZWxmX2h3Y2FwICYgSFdDQVBfVEhVTUIpIHsKKwkJLyoKKwkJICogVGhlIExTQiBvZiB0aGUgaGFuZGxlciBkZXRlcm1pbmVzIGlmIHdlJ3JlIGdvaW5nIHRvCisJCSAqIGJlIHVzaW5nIFRIVU1CIG9yIEFSTSBtb2RlIGZvciB0aGlzIHNpZ25hbCBoYW5kbGVyLgorCQkgKi8KKwkJdGh1bWIgPSBoYW5kbGVyICYgMTsKKworCQlpZiAodGh1bWIpCisJCQljcHNyIHw9IFBTUl9UX0JJVDsKKwkJZWxzZQorCQkJY3BzciAmPSB+UFNSX1RfQklUOworCX0KKyNlbmRpZgorCisJaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX1JFU1RPUkVSKSB7CisJCXJldGNvZGUgPSAodW5zaWduZWQgbG9uZylrYS0+c2Euc2FfcmVzdG9yZXI7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgaW50IGlkeCA9IHRodW1iOworCisJCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9TSUdJTkZPKQorCQkJaWR4ICs9IDI7CisKKwkJaWYgKF9fcHV0X3VzZXIocmV0Y29kZXNbaWR4XSwgcmMpKQorCQkJcmV0dXJuIDE7CisKKwkJLyoKKwkJICogRW5zdXJlIHRoYXQgdGhlIGluc3RydWN0aW9uIGNhY2hlIHNlZXMKKwkJICogdGhlIHJldHVybiBjb2RlIHdyaXR0ZW4gb250byB0aGUgc3RhY2suCisJCSAqLworCQlmbHVzaF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpcmMsCisJCQkJICAgKHVuc2lnbmVkIGxvbmcpKHJjICsgMSkpOworCisJCXJldGNvZGUgPSAoKHVuc2lnbmVkIGxvbmcpcmMpICsgdGh1bWI7CisJfQorCisJcmVncy0+QVJNX3IwID0gdXNpZzsKKwlyZWdzLT5BUk1fc3AgPSAodW5zaWduZWQgbG9uZylmcmFtZTsKKwlyZWdzLT5BUk1fbHIgPSByZXRjb2RlOworCXJlZ3MtPkFSTV9wYyA9IGhhbmRsZXI7CisJcmVncy0+QVJNX2Nwc3IgPSBjcHNyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NldHVwX2ZyYW1lKGludCB1c2lnLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLCBzaWdzZXRfdCAqc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgc2lnZnJhbWUgX191c2VyICpmcmFtZSA9IGdldF9zaWdmcmFtZShrYSwgcmVncywgc2l6ZW9mKCpmcmFtZSkpOworCWludCBlcnIgPSAwOworCisJaWYgKCFmcmFtZSkKKwkJcmV0dXJuIDE7CisKKwllcnIgfD0gc2V0dXBfc2lnY29udGV4dCgmZnJhbWUtPnNjLCAmZnJhbWUtPmF1eCwgcmVncywgc2V0LT5zaWdbMF0pOworCisJaWYgKF9OU0lHX1dPUkRTID4gMSkgeworCQllcnIgfD0gX19jb3B5X3RvX3VzZXIoZnJhbWUtPmV4dHJhbWFzaywgJnNldC0+c2lnWzFdLAorCQkJCSAgICAgIHNpemVvZihmcmFtZS0+ZXh0cmFtYXNrKSk7CisJfQorCisJaWYgKGVyciA9PSAwKQorCQllcnIgPSBzZXR1cF9yZXR1cm4ocmVncywga2EsICZmcmFtZS0+cmV0Y29kZSwgZnJhbWUsIHVzaWcpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludAorc2V0dXBfcnRfZnJhbWUoaW50IHVzaWcsIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIHNpZ2luZm9fdCAqaW5mbywKKwkgICAgICAgc2lnc2V0X3QgKnNldCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHJ0X3NpZ2ZyYW1lIF9fdXNlciAqZnJhbWUgPSBnZXRfc2lnZnJhbWUoa2EsIHJlZ3MsIHNpemVvZigqZnJhbWUpKTsKKwlzdGFja190IHN0YWNrOworCWludCBlcnIgPSAwOworCisJaWYgKCFmcmFtZSkKKwkJcmV0dXJuIDE7CisKKwlfX3B1dF91c2VyX2Vycm9yKCZmcmFtZS0+aW5mbywgJmZyYW1lLT5waW5mbywgZXJyKTsKKwlfX3B1dF91c2VyX2Vycm9yKCZmcmFtZS0+dWMsICZmcmFtZS0+cHVjLCBlcnIpOworCWVyciB8PSBjb3B5X3NpZ2luZm9fdG9fdXNlcigmZnJhbWUtPmluZm8sIGluZm8pOworCisJX19wdXRfdXNlcl9lcnJvcigwLCAmZnJhbWUtPnVjLnVjX2ZsYWdzLCBlcnIpOworCV9fcHV0X3VzZXJfZXJyb3IoTlVMTCwgJmZyYW1lLT51Yy51Y19saW5rLCBlcnIpOworCisJbWVtc2V0KCZzdGFjaywgMCwgc2l6ZW9mKHN0YWNrKSk7CisJc3RhY2suc3Nfc3AgPSAodm9pZCBfX3VzZXIgKiljdXJyZW50LT5zYXNfc3Nfc3A7CisJc3RhY2suc3NfZmxhZ3MgPSBzYXNfc3NfZmxhZ3MocmVncy0+QVJNX3NwKTsKKwlzdGFjay5zc19zaXplID0gY3VycmVudC0+c2FzX3NzX3NpemU7CisJZXJyIHw9IF9fY29weV90b191c2VyKCZmcmFtZS0+dWMudWNfc3RhY2ssICZzdGFjaywgc2l6ZW9mKHN0YWNrKSk7CisKKwllcnIgfD0gc2V0dXBfc2lnY29udGV4dCgmZnJhbWUtPnVjLnVjX21jb250ZXh0LCAmZnJhbWUtPmF1eCwKKwkJCQlyZWdzLCBzZXQtPnNpZ1swXSk7CisJZXJyIHw9IF9fY29weV90b191c2VyKCZmcmFtZS0+dWMudWNfc2lnbWFzaywgc2V0LCBzaXplb2YoKnNldCkpOworCisJaWYgKGVyciA9PSAwKQorCQllcnIgPSBzZXR1cF9yZXR1cm4ocmVncywga2EsICZmcmFtZS0+cmV0Y29kZSwgZnJhbWUsIHVzaWcpOworCisJaWYgKGVyciA9PSAwKSB7CisJCS8qCisJCSAqIEZvciByZWFsdGltZSBzaWduYWxzIHdlIG11c3QgYWxzbyBzZXQgdGhlIHNlY29uZCBhbmQgdGhpcmQKKwkJICogYXJndW1lbnRzIGZvciB0aGUgc2lnbmFsIGhhbmRsZXIuCisJCSAqICAgLS0gUGV0ZXIgTWF5ZGVsbCA8cG1heWRlbGxAY2hpYXJrLmdyZWVuZW5kLm9yZy51az4gMjAwMC0xMi0wNgorCQkgKi8KKwkJcmVncy0+QVJNX3IxID0gKHVuc2lnbmVkIGxvbmcpJmZyYW1lLT5pbmZvOworCQlyZWdzLT5BUk1fcjIgPSAodW5zaWduZWQgbG9uZykmZnJhbWUtPnVjOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZXN0YXJ0X3N5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmVncy0+QVJNX3IwID0gcmVncy0+QVJNX09SSUdfcjA7CisJcmVncy0+QVJNX3BjIC09IHRodW1iX21vZGUocmVncykgPyAyIDogNDsKK30KKworLyoKKyAqIE9LLCB3ZSdyZSBpbnZva2luZyBhIGhhbmRsZXIKKyAqLwkKK3N0YXRpYyB2b2lkCitoYW5kbGVfc2lnbmFsKHVuc2lnbmVkIGxvbmcgc2lnLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLAorCSAgICAgIHNpZ2luZm9fdCAqaW5mbywgc2lnc2V0X3QgKm9sZHNldCwKKwkgICAgICBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIGludCBzeXNjYWxsKQoreworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gY3VycmVudF90aHJlYWRfaW5mbygpOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwlpbnQgdXNpZyA9IHNpZzsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBJZiB3ZSB3ZXJlIGZyb20gYSBzeXN0ZW0gY2FsbCwgY2hlY2sgZm9yIHN5c3RlbSBjYWxsIHJlc3RhcnRpbmcuLi4KKwkgKi8KKwlpZiAoc3lzY2FsbCkgeworCQlzd2l0Y2ggKHJlZ3MtPkFSTV9yMCkgeworCQljYXNlIC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s6CisJCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgorCQkJcmVncy0+QVJNX3IwID0gLUVJTlRSOworCQkJYnJlYWs7CisJCWNhc2UgLUVSRVNUQVJUU1lTOgorCQkJaWYgKCEoa2EtPnNhLnNhX2ZsYWdzICYgU0FfUkVTVEFSVCkpIHsKKwkJCQlyZWdzLT5BUk1fcjAgPSAtRUlOVFI7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlIC1FUkVTVEFSVE5PSU5UUjoKKwkJCXJlc3RhcnRfc3lzY2FsbChyZWdzKTsKKwkJfQorCX0KKworCS8qCisJICogdHJhbnNsYXRlIHRoZSBzaWduYWwKKwkgKi8KKwlpZiAodXNpZyA8IDMyICYmIHRocmVhZC0+ZXhlY19kb21haW4gJiYgdGhyZWFkLT5leGVjX2RvbWFpbi0+c2lnbmFsX2ludm1hcCkKKwkJdXNpZyA9IHRocmVhZC0+ZXhlY19kb21haW4tPnNpZ25hbF9pbnZtYXBbdXNpZ107CisKKwkvKgorCSAqIFNldCB1cCB0aGUgc3RhY2sgZnJhbWUKKwkgKi8KKwlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfU0lHSU5GTykKKwkJcmV0ID0gc2V0dXBfcnRfZnJhbWUodXNpZywga2EsIGluZm8sIG9sZHNldCwgcmVncyk7CisJZWxzZQorCQlyZXQgPSBzZXR1cF9mcmFtZSh1c2lnLCBrYSwgb2xkc2V0LCByZWdzKTsKKworCS8qCisJICogQ2hlY2sgdGhhdCB0aGUgcmVzdWx0aW5nIHJlZ2lzdGVycyBhcmUgYWN0dWFsbHkgc2FuZS4KKwkgKi8KKwlyZXQgfD0gIXZhbGlkX3VzZXJfcmVncyhyZWdzKTsKKworCS8qCisJICogQmxvY2sgdGhlIHNpZ25hbCBpZiB3ZSB3ZXJlIHVuc3VjY2Vzc2Z1bC4KKwkgKi8KKwlpZiAocmV0ICE9IDAgfHwgIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9OT0RFRkVSKSkgeworCQlzcGluX2xvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCQlzaWdvcnNldHMoJnRzay0+YmxvY2tlZCwgJnRzay0+YmxvY2tlZCwKKwkJCSAgJmthLT5zYS5zYV9tYXNrKTsKKwkJc2lnYWRkc2V0KCZ0c2stPmJsb2NrZWQsIHNpZyk7CisJCXJlY2FsY19zaWdwZW5kaW5nKCk7CisJCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKKwl9CisKKwlpZiAocmV0ID09IDApCisJCXJldHVybjsKKworCWZvcmNlX3NpZ3NlZ3Yoc2lnLCB0c2spOworfQorCisvKgorICogTm90ZSB0aGF0ICdpbml0JyBpcyBhIHNwZWNpYWwgcHJvY2VzczogaXQgZG9lc24ndCBnZXQgc2lnbmFscyBpdCBkb2Vzbid0CisgKiB3YW50IHRvIGhhbmRsZS4gVGh1cyB5b3UgY2Fubm90IGtpbGwgaW5pdCBldmVuIHdpdGggYSBTSUdLSUxMIGV2ZW4gYnkKKyAqIG1pc3Rha2UuCisgKgorICogTm90ZSB0aGF0IHdlIGdvIHRocm91Z2ggdGhlIHNpZ25hbHMgdHdpY2U6IG9uY2UgdG8gY2hlY2sgdGhlIHNpZ25hbHMgdGhhdAorICogdGhlIGtlcm5lbCBjYW4gaGFuZGxlLCBhbmQgdGhlbiB3ZSBidWlsZCBhbGwgdGhlIHVzZXItbGV2ZWwgc2lnbmFsIGhhbmRsaW5nCisgKiBzdGFjay1mcmFtZXMgaW4gb25lIGdvIGFmdGVyIHRoYXQuCisgKi8KK3N0YXRpYyBpbnQgZG9fc2lnbmFsKHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc3lzY2FsbCkKK3sKKwlzdHJ1Y3Qga19zaWdhY3Rpb24ga2E7CisJc2lnaW5mb190IGluZm87CisJaW50IHNpZ25yOworCisJLyoKKwkgKiBXZSB3YW50IHRoZSBjb21tb24gY2FzZSB0byBnbyBmYXN0LCB3aGljaAorCSAqIGlzIHdoeSB3ZSBtYXkgaW4gY2VydGFpbiBjYXNlcyBnZXQgaGVyZSBmcm9tCisJICoga2VybmVsIG1vZGUuIEp1c3QgcmV0dXJuIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcKKwkgKiBpZiBzby4KKwkgKi8KKwlpZiAoIXVzZXJfbW9kZShyZWdzKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAodHJ5X3RvX2ZyZWV6ZSgwKSkKKwkJZ290byBub19zaWduYWw7CisKKwlpZiAoY3VycmVudC0+cHRyYWNlICYgUFRfU0lOR0xFU1RFUCkKKwkJcHRyYWNlX2NhbmNlbF9icHQoY3VycmVudCk7CisKKwlzaWduciA9IGdldF9zaWduYWxfdG9fZGVsaXZlcigmaW5mbywgJmthLCByZWdzLCBOVUxMKTsKKwlpZiAoc2lnbnIgPiAwKSB7CisJCWhhbmRsZV9zaWduYWwoc2lnbnIsICZrYSwgJmluZm8sIG9sZHNldCwgcmVncywgc3lzY2FsbCk7CisJCWlmIChjdXJyZW50LT5wdHJhY2UgJiBQVF9TSU5HTEVTVEVQKQorCQkJcHRyYWNlX3NldF9icHQoY3VycmVudCk7CisJCXJldHVybiAxOworCX0KKworIG5vX3NpZ25hbDoKKwkvKgorCSAqIE5vIHNpZ25hbCB0byBkZWxpdmVyIHRvIHRoZSBwcm9jZXNzIC0gcmVzdGFydCB0aGUgc3lzY2FsbC4KKwkgKi8KKwlpZiAoc3lzY2FsbCkgeworCQlpZiAocmVncy0+QVJNX3IwID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spIHsKKwkJCWlmICh0aHVtYl9tb2RlKHJlZ3MpKSB7CisJCQkJcmVncy0+QVJNX3I3ID0gX19OUl9yZXN0YXJ0X3N5c2NhbGw7CisJCQkJcmVncy0+QVJNX3BjIC09IDI7CisJCQl9IGVsc2UgeworCQkJCXUzMiBfX3VzZXIgKnVzcDsKKworCQkJCXJlZ3MtPkFSTV9zcCAtPSAxMjsKKwkJCQl1c3AgPSAodTMyIF9fdXNlciAqKXJlZ3MtPkFSTV9zcDsKKworCQkJCXB1dF91c2VyKHJlZ3MtPkFSTV9wYywgJnVzcFswXSk7CisJCQkJLyogc3dpIF9fTlJfcmVzdGFydF9zeXNjYWxsICovCisJCQkJcHV0X3VzZXIoMHhlZjAwMDAwMCB8IF9fTlJfcmVzdGFydF9zeXNjYWxsLCAmdXNwWzFdKTsKKwkJCQkvKiBsZHIJcGMsIFtzcF0sICMxMiAqLworCQkJCXB1dF91c2VyKDB4ZTQ5ZGYwMGMsICZ1c3BbMl0pOworCisJCQkJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXVzcCwKKwkJCQkJCSAgICh1bnNpZ25lZCBsb25nKSh1c3AgKyAzKSk7CisKKwkJCQlyZWdzLT5BUk1fcGMgPSByZWdzLT5BUk1fc3AgKyA0OworCQkJfQorCQl9CisJCWlmIChyZWdzLT5BUk1fcjAgPT0gLUVSRVNUQVJUTk9IQU5EIHx8CisJCSAgICByZWdzLT5BUk1fcjAgPT0gLUVSRVNUQVJUU1lTIHx8CisJCSAgICByZWdzLT5BUk1fcjAgPT0gLUVSRVNUQVJUTk9JTlRSKSB7CisJCQlyZXN0YXJ0X3N5c2NhbGwocmVncyk7CisJCX0KKwl9CisJaWYgKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1NJTkdMRVNURVApCisJCXB0cmFjZV9zZXRfYnB0KGN1cnJlbnQpOworCXJldHVybiAwOworfQorCithc21saW5rYWdlIHZvaWQKK2RvX25vdGlmeV9yZXN1bWUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCB0aHJlYWRfZmxhZ3MsIGludCBzeXNjYWxsKQoreworCWlmICh0aHJlYWRfZmxhZ3MgJiBfVElGX1NJR1BFTkRJTkcpCisJCWRvX3NpZ25hbCgmY3VycmVudC0+YmxvY2tlZCwgcmVncywgc3lzY2FsbCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc21wLmMgYi9hcmNoL2FybS9rZXJuZWwvc21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNjOGMzMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zbXAuYwpAQCAtMCwwICsxLDM5NiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvc21wLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworLyoKKyAqIGJpdG1hc2sgb2YgcHJlc2VudCBhbmQgb25saW5lIENQVXMuCisgKiBUaGUgcHJlc2VudCBiaXRtYXNrIGluZGljYXRlcyB0aGF0IHRoZSBDUFUgaXMgcGh5c2ljYWxseSBwcmVzZW50LgorICogVGhlIG9ubGluZSBiaXRtYXNrIGluZGljYXRlcyB0aGF0IHRoZSBDUFUgaXMgdXAgYW5kIHJ1bm5pbmcuCisgKi8KK2NwdW1hc2tfdCBjcHVfcHJlc2VudF9tYXNrOworY3B1bWFza190IGNwdV9vbmxpbmVfbWFwOworCisvKgorICogc3RydWN0dXJlcyBmb3IgaW50ZXItcHJvY2Vzc29yIGNhbGxzCisgKiAtIEEgY29sbGVjdGlvbiBvZiBzaW5nbGUgYml0IGlwaSBtZXNzYWdlcy4KKyAqLworc3RydWN0IGlwaV9kYXRhIHsKKwlzcGlubG9ja190IGxvY2s7CisJdW5zaWduZWQgbG9uZyBpcGlfY291bnQ7CisJdW5zaWduZWQgbG9uZyBiaXRzOworfTsKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBpcGlfZGF0YSwgaXBpX2RhdGEpID0geworCS5sb2NrCT0gU1BJTl9MT0NLX1VOTE9DS0VELAorfTsKKworZW51bSBpcGlfbXNnX3R5cGUgeworCUlQSV9USU1FUiwKKwlJUElfUkVTQ0hFRFVMRSwKKwlJUElfQ0FMTF9GVU5DLAorCUlQSV9DUFVfU1RPUCwKK307CisKK3N0cnVjdCBzbXBfY2FsbF9zdHJ1Y3QgeworCXZvaWQgKCpmdW5jKSh2b2lkICppbmZvKTsKKwl2b2lkICppbmZvOworCWludCB3YWl0OworCWNwdW1hc2tfdCBwZW5kaW5nOworCWNwdW1hc2tfdCB1bmZpbmlzaGVkOworfTsKKworc3RhdGljIHN0cnVjdCBzbXBfY2FsbF9zdHJ1Y3QgKiB2b2xhdGlsZSBzbXBfY2FsbF9mdW5jdGlvbl9kYXRhOworc3RhdGljIERFRklORV9TUElOTE9DSyhzbXBfY2FsbF9mdW5jdGlvbl9sb2NrKTsKKworaW50IF9faW5pdCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBTcGF3biBhIG5ldyBwcm9jZXNzIG1hbnVhbGx5LiAgR3JhYiBhIHBvaW50ZXIgdG8KKwkgKiBpdHMgdGFzayBzdHJ1Y3Qgc28gd2UgY2FuIG1lc3Mgd2l0aCBpdAorCSAqLworCWlkbGUgPSBmb3JrX2lkbGUoY3B1KTsKKwlpZiAoSVNfRVJSKGlkbGUpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ1BVJXU6IGZvcmsoKSBmYWlsZWRcbiIsIGNwdSk7CisJCXJldHVybiBQVFJfRVJSKGlkbGUpOworCX0KKworCS8qCisJICogTm93IGJyaW5nIHRoZSBDUFUgaW50byBvdXIgd29ybGQuCisJICovCisJcmV0ID0gYm9vdF9zZWNvbmRhcnkoY3B1LCBpZGxlKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0NSSVQgImNwdV91cDogcHJvY2Vzc29yICVkIGZhaWxlZCB0byBib290XG4iLCBjcHUpOworCQkvKgorCQkgKiBGSVhNRTogV2UgbmVlZCB0byBjbGVhbiB1cCB0aGUgbmV3IGlkbGUgdGhyZWFkLiAtLXJtaworCQkgKi8KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ2FsbGVkIGJ5IGJvdGggYm9vdCBhbmQgc2Vjb25kYXJpZXMgdG8gbW92ZSBnbG9iYWwgZGF0YSBpbnRvCisgKiBwZXItcHJvY2Vzc29yIHN0b3JhZ2UuCisgKi8KK3ZvaWQgX19pbml0IHNtcF9zdG9yZV9jcHVfaW5mbyh1bnNpZ25lZCBpbnQgY3B1aWQpCit7CisJc3RydWN0IGNwdWluZm9fYXJtICpjcHVfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYXRhLCBjcHVpZCk7CisKKwljcHVfaW5mby0+bG9vcHNfcGVyX2ppZmZ5ID0gbG9vcHNfcGVyX2ppZmZ5OworfQorCit2b2lkIF9faW5pdCBzbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3sKKwlpbnQgY3B1OworCXVuc2lnbmVkIGxvbmcgYm9nb3N1bSA9IDA7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKKwkJYm9nb3N1bSArPSBwZXJfY3B1KGNwdV9kYXRhLCBjcHUpLmxvb3BzX3Blcl9qaWZmeTsKKworCXByaW50ayhLRVJOX0lORk8gIlNNUDogVG90YWwgb2YgJWQgcHJvY2Vzc29ycyBhY3RpdmF0ZWQgIgorCSAgICAgICAiKCVsdS4lMDJsdSBCb2dvTUlQUykuXG4iLAorCSAgICAgICBudW1fb25saW5lX2NwdXMoKSwKKwkgICAgICAgYm9nb3N1bSAvICg1MDAwMDAvSFopLAorCSAgICAgICAoYm9nb3N1bSAvICg1MDAwL0haKSkgJSAxMDApOworfQorCit2b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKQoreworCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwljcHVfc2V0KGNwdSwgY3B1X3ByZXNlbnRfbWFzayk7CisJY3B1X3NldChjcHUsIGNwdV9vbmxpbmVfbWFwKTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9pcGlfbWVzc2FnZShjcHVtYXNrX3QgY2FsbG1hcCwgZW51bSBpcGlfbXNnX3R5cGUgbXNnKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGNwdTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgY2FsbG1hcCkgeworCQlzdHJ1Y3QgaXBpX2RhdGEgKmlwaSA9ICZwZXJfY3B1KGlwaV9kYXRhLCBjcHUpOworCisJCXNwaW5fbG9jaygmaXBpLT5sb2NrKTsKKwkJaXBpLT5iaXRzIHw9IDEgPDwgbXNnOworCQlzcGluX3VubG9jaygmaXBpLT5sb2NrKTsKKwl9CisKKwkvKgorCSAqIENhbGwgdGhlIHBsYXRmb3JtIHNwZWNpZmljIGNyb3NzLUNQVSBjYWxsIGZ1bmN0aW9uLgorCSAqLworCXNtcF9jcm9zc19jYWxsKGNhbGxtYXApOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogWW91IG11c3Qgbm90IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGRpc2FibGVkIGludGVycnVwdHMsIGZyb20gYQorICogaGFyZHdhcmUgaW50ZXJydXB0IGhhbmRsZXIsIG5vciBmcm9tIGEgYm90dG9tIGhhbGYgaGFuZGxlci4KKyAqLworaW50IHNtcF9jYWxsX2Z1bmN0aW9uX29uX2NwdSh2b2lkICgqZnVuYykodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sIGludCByZXRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdhaXQsIGNwdW1hc2tfdCBjYWxsbWFwKQoreworCXN0cnVjdCBzbXBfY2FsbF9zdHJ1Y3QgZGF0YTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJaW50IHJldCA9IDA7CisKKwlkYXRhLmZ1bmMgPSBmdW5jOworCWRhdGEuaW5mbyA9IGluZm87CisJZGF0YS53YWl0ID0gd2FpdDsKKworCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNhbGxtYXApOworCWlmIChjcHVzX2VtcHR5KGNhbGxtYXApKQorCQlnb3RvIG91dDsKKworCWRhdGEucGVuZGluZyA9IGNhbGxtYXA7CisJaWYgKHdhaXQpCisJCWRhdGEudW5maW5pc2hlZCA9IGNhbGxtYXA7CisKKwkvKgorCSAqIHRyeSB0byBnZXQgdGhlIG11dGV4IG9uIHNtcF9jYWxsX2Z1bmN0aW9uX2RhdGEKKwkgKi8KKwlzcGluX2xvY2soJnNtcF9jYWxsX2Z1bmN0aW9uX2xvY2spOworCXNtcF9jYWxsX2Z1bmN0aW9uX2RhdGEgPSAmZGF0YTsKKworCXNlbmRfaXBpX21lc3NhZ2UoY2FsbG1hcCwgSVBJX0NBTExfRlVOQyk7CisKKwl0aW1lb3V0ID0gamlmZmllcyArIEhaOworCXdoaWxlICghY3B1c19lbXB0eShkYXRhLnBlbmRpbmcpICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKQorCQliYXJyaWVyKCk7CisKKwkvKgorCSAqIGRpZCB3ZSB0aW1lIG91dD8KKwkgKi8KKwlpZiAoIWNwdXNfZW1wdHkoZGF0YS5wZW5kaW5nKSkgeworCQkvKgorCQkgKiB0aGlzIG1heSBiZSBjYXVzaW5nIG91ciBwYW5pYyAtIHJlcG9ydCBpdAorCQkgKi8KKwkJcHJpbnRrKEtFUk5fQ1JJVAorCQkgICAgICAgIkNQVSV1OiBzbXBfY2FsbF9mdW5jdGlvbiB0aW1lb3V0IGZvciAlcCglcClcbiIKKwkJICAgICAgICIgICAgICBjYWxsbWFwICVseCBwZW5kaW5nICVseCwgJXN3YWl0XG4iLAorCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCBmdW5jLCBpbmZvLCBjYWxsbWFwLCBkYXRhLnBlbmRpbmcsCisJCSAgICAgICB3YWl0ID8gIiIgOiAibm8gIik7CisKKwkJLyoKKwkJICogVFJBQ0UKKwkJICovCisJCXRpbWVvdXQgPSBqaWZmaWVzICsgKDUgKiBIWik7CisJCXdoaWxlICghY3B1c19lbXB0eShkYXRhLnBlbmRpbmcpICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKQorCQkJYmFycmllcigpOworCisJCWlmIChjcHVzX2VtcHR5KGRhdGEucGVuZGluZykpCisJCQlwcmludGsoS0VSTl9DUklUICIgICAgIFJFU09MVkVEXG4iKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fQ1JJVCAiICAgICBTVElMTCBTVFVDS1xuIik7CisJfQorCisJLyoKKwkgKiB3aGF0ZXZlciBoYXBwZW5lZCwgd2UncmUgZG9uZSB3aXRoIHRoZSBkYXRhLCBzbyByZWxlYXNlIGl0CisJICovCisJc21wX2NhbGxfZnVuY3Rpb25fZGF0YSA9IE5VTEw7CisJc3Bpbl91bmxvY2soJnNtcF9jYWxsX2Z1bmN0aW9uX2xvY2spOworCisJaWYgKCFjcHVzX2VtcHR5KGRhdGEucGVuZGluZykpIHsKKwkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHdhaXQpCisJCXdoaWxlICghY3B1c19lbXB0eShkYXRhLnVuZmluaXNoZWQpKQorCQkJYmFycmllcigpOworIG91dDoKKworCXJldHVybiAwOworfQorCitpbnQgc21wX2NhbGxfZnVuY3Rpb24odm9pZCAoKmZ1bmMpKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLCBpbnQgcmV0cnksCisgICAgICAgICAgICAgICAgICAgICAgaW50IHdhaXQpCit7CisJcmV0dXJuIHNtcF9jYWxsX2Z1bmN0aW9uX29uX2NwdShmdW5jLCBpbmZvLCByZXRyeSwgd2FpdCwKKwkJCQkJY3B1X29ubGluZV9tYXApOworfQorCit2b2lkIHNob3dfaXBpX2xpc3Qoc3RydWN0IHNlcV9maWxlICpwKQoreworCXVuc2lnbmVkIGludCBjcHU7CisKKwlzZXFfcHV0cyhwLCAiSVBJOiIpOworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCXNlcV9wcmludGYocCwgIiAlMTBsdSIsIHBlcl9jcHUoaXBpX2RhdGEsIGNwdSkuaXBpX2NvdW50KTsKKworCXNlcV9wdXRjKHAsICdcbicpOworfQorCitzdGF0aWMgdm9pZCBpcGlfdGltZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IHVzZXIgPSB1c2VyX21vZGUocmVncyk7CisKKwlpcnFfZW50ZXIoKTsKKwlwcm9maWxlX3RpY2soQ1BVX1BST0ZJTElORywgcmVncyk7CisJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcik7CisJaXJxX2V4aXQoKTsKK30KKworLyoKKyAqIGlwaV9jYWxsX2Z1bmN0aW9uIC0gaGFuZGxlIElQSSBmcm9tIHNtcF9jYWxsX2Z1bmN0aW9uKCkKKyAqCisgKiBOb3RlIHRoYXQgd2UgY29weSBkYXRhIG91dCBvZiB0aGUgY3Jvc3MtY2FsbCBzdHJ1Y3R1cmUgYW5kIHRoZW4KKyAqIGxldCB0aGUgY2FsbGVyIGtub3cgdGhhdCB3ZSdyZSBoZXJlIGFuZCBoYXZlIGRvbmUgd2l0aCB0aGVpciBkYXRhCisgKi8KK3N0YXRpYyB2b2lkIGlwaV9jYWxsX2Z1bmN0aW9uKHVuc2lnbmVkIGludCBjcHUpCit7CisJc3RydWN0IHNtcF9jYWxsX3N0cnVjdCAqZGF0YSA9IHNtcF9jYWxsX2Z1bmN0aW9uX2RhdGE7CisJdm9pZCAoKmZ1bmMpKHZvaWQgKmluZm8pID0gZGF0YS0+ZnVuYzsKKwl2b2lkICppbmZvID0gZGF0YS0+aW5mbzsKKwlpbnQgd2FpdCA9IGRhdGEtPndhaXQ7CisKKwljcHVfY2xlYXIoY3B1LCBkYXRhLT5wZW5kaW5nKTsKKworCWZ1bmMoaW5mbyk7CisKKwlpZiAod2FpdCkKKwkJY3B1X2NsZWFyKGNwdSwgZGF0YS0+dW5maW5pc2hlZCk7Cit9CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc3RvcF9sb2NrKTsKKworLyoKKyAqIGlwaV9jcHVfc3RvcCAtIGhhbmRsZSBJUEkgZnJvbSBzbXBfc2VuZF9zdG9wKCkKKyAqLworc3RhdGljIHZvaWQgaXBpX2NwdV9zdG9wKHVuc2lnbmVkIGludCBjcHUpCit7CisJc3Bpbl9sb2NrKCZzdG9wX2xvY2spOworCXByaW50ayhLRVJOX0NSSVQgIkNQVSV1OiBzdG9wcGluZ1xuIiwgY3B1KTsKKwlkdW1wX3N0YWNrKCk7CisJc3Bpbl91bmxvY2soJnN0b3BfbG9jayk7CisKKwljcHVfY2xlYXIoY3B1LCBjcHVfb25saW5lX21hcCk7CisKKwlsb2NhbF9maXFfZGlzYWJsZSgpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwl3aGlsZSAoMSkKKwkJY3B1X3JlbGF4KCk7Cit9CisKKy8qCisgKiBNYWluIGhhbmRsZXIgZm9yIGludGVyLXByb2Nlc3NvciBpbnRlcnJ1cHRzCisgKgorICogRm9yIEFSTSwgdGhlIGlwaW1hc2sgbm93IG9ubHkgaWRlbnRpZmllcyBhIHNpbmdsZQorICogY2F0ZWdvcnkgb2YgSVBJIChCaXQgMSBJUElzIGhhdmUgYmVlbiByZXBsYWNlZCBieSBhCisgKiBkaWZmZXJlbnQgbWVjaGFuaXNtKToKKyAqCisgKiAgQml0IDAgLSBJbnRlci1wcm9jZXNzb3IgZnVuY3Rpb24gY2FsbAorICovCit2b2lkIGRvX0lQSShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBpcGlfZGF0YSAqaXBpID0gJnBlcl9jcHUoaXBpX2RhdGEsIGNwdSk7CisKKwlpcGktPmlwaV9jb3VudCsrOworCisJZm9yICg7OykgeworCQl1bnNpZ25lZCBsb25nIG1zZ3M7CisKKwkJc3Bpbl9sb2NrKCZpcGktPmxvY2spOworCQltc2dzID0gaXBpLT5iaXRzOworCQlpcGktPmJpdHMgPSAwOworCQlzcGluX3VubG9jaygmaXBpLT5sb2NrKTsKKworCQlpZiAoIW1zZ3MpCisJCQlicmVhazsKKworCQlkbyB7CisJCQl1bnNpZ25lZCBuZXh0bXNnOworCisJCQluZXh0bXNnID0gbXNncyAmIC1tc2dzOworCQkJbXNncyAmPSB+bmV4dG1zZzsKKwkJCW5leHRtc2cgPSBmZnoofm5leHRtc2cpOworCisJCQlzd2l0Y2ggKG5leHRtc2cpIHsKKwkJCWNhc2UgSVBJX1RJTUVSOgorCQkJCWlwaV90aW1lcihyZWdzKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBJUElfUkVTQ0hFRFVMRToKKwkJCQkvKgorCQkJCSAqIG5vdGhpbmcgbW9yZSB0byBkbyAtIGV2ZXl0aGluZyBpcworCQkJCSAqIGRvbmUgb24gdGhlIGludGVycnVwdCByZXR1cm4gcGF0aAorCQkJCSAqLworCQkJCWJyZWFrOworCisJCQljYXNlIElQSV9DQUxMX0ZVTkM6CisJCQkJaXBpX2NhbGxfZnVuY3Rpb24oY3B1KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBJUElfQ1BVX1NUT1A6CisJCQkJaXBpX2NwdV9zdG9wKGNwdSk7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRrKEtFUk5fQ1JJVCAiQ1BVJXU6IFVua25vd24gSVBJIG1lc3NhZ2UgMHgleFxuIiwKKwkJCQkgICAgICAgY3B1LCBuZXh0bXNnKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSB3aGlsZSAobXNncyk7CisJfQorfQorCit2b2lkIHNtcF9zZW5kX3Jlc2NoZWR1bGUoaW50IGNwdSkKK3sKKwlzZW5kX2lwaV9tZXNzYWdlKGNwdW1hc2tfb2ZfY3B1KGNwdSksIElQSV9SRVNDSEVEVUxFKTsKK30KKwordm9pZCBzbXBfc2VuZF90aW1lcih2b2lkKQoreworCWNwdW1hc2tfdCBtYXNrID0gY3B1X29ubGluZV9tYXA7CisJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgbWFzayk7CisJc2VuZF9pcGlfbWVzc2FnZShtYXNrLCBJUElfVElNRVIpOworfQorCit2b2lkIHNtcF9zZW5kX3N0b3Aodm9pZCkKK3sKKwljcHVtYXNrX3QgbWFzayA9IGNwdV9vbmxpbmVfbWFwOworCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIG1hc2spOworCXNlbmRfaXBpX21lc3NhZ2UobWFzaywgSVBJX0NQVV9TVE9QKTsKK30KKworLyoKKyAqIG5vdCBzdXBwb3J0ZWQgaGVyZQorICovCitpbnQgX19pbml0IHNldHVwX3Byb2ZpbGluZ190aW1lcih1bnNpZ25lZCBpbnQgbXVsdGlwbGllcikKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zeXNfYXJtLmMgYi9hcmNoL2FybS9rZXJuZWwvc3lzX2FybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MWRjNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvc3lzX2FybS5jCkBAIC0wLDAgKzEsMzMyIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9zeXNfYXJtLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSBQZW9wbGUgd2hvIHdyb3RlIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvc3lzX2kzODYuYworICogIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBSdXNzZWxsIEtpbmcuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHZhcmlvdXMgcmFuZG9tIHN5c3RlbSBjYWxscyB0aGF0CisgKiAgaGF2ZSBhIG5vbi1zdGFuZGFyZCBjYWxsaW5nIHNlcXVlbmNlIG9uIHRoZSBMaW51eC9hcm0KKyAqICBwbGF0Zm9ybS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tc2cuaD4KKyNpbmNsdWRlIDxsaW51eC9zaG0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vaXBjLmg+CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGRvX21yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgb2xkX2xlbiwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIG5ld19sZW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBuZXdfYWRkcik7CisKKy8qCisgKiBzeXNfcGlwZSgpIGlzIHRoZSBub3JtYWwgQyBjYWxsaW5nIHN0YW5kYXJkIGZvciBjcmVhdGluZworICogYSBwaXBlLiBJdCdzIG5vdCB0aGUgd2F5IHVuaXggdHJhZGl0aW9uYWxseSBkb2VzIHRoaXMsIHRob3VnaC4KKyAqLworYXNtbGlua2FnZSBpbnQgc3lzX3BpcGUodW5zaWduZWQgbG9uZyBfX3VzZXIgKmZpbGRlcykKK3sKKwlpbnQgZmRbMl07CisJaW50IGVycm9yOworCisJZXJyb3IgPSBkb19waXBlKGZkKTsKKwlpZiAoIWVycm9yKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoZmlsZGVzLCBmZCwgMipzaXplb2YoaW50KSkpCisJCQllcnJvciA9IC1FRkFVTFQ7CisJfQorCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIGxvd2VzdCB2aXJ0dWFsIGFkZHJlc3Mgd2UgY2FuIHBlcm1pdCBhbnkgdXNlciBzcGFjZQorICogbWFwcGluZyB0byBiZSBtYXBwZWQgYXQuICBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yCisgKiBub24taGlnaCB2ZWN0b3IgQ1BVcy4KKyAqLworI2RlZmluZSBNSU5fTUFQX0FERFIJKFBBR0VfU0laRSkKKworLyogY29tbW9uIGNvZGUgZm9yIG9sZCBhbmQgbmV3IG1tYXBzICovCitpbmxpbmUgbG9uZyBkb19tbWFwMigKKwl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAorCXVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKKwl1bnNpZ25lZCBsb25nIGZkLCB1bnNpZ25lZCBsb25nIHBnb2ZmKQoreworCWludCBlcnJvciA9IC1FSU5WQUw7CisJc3RydWN0IGZpbGUgKiBmaWxlID0gTlVMTDsKKworCWZsYWdzICY9IH4oTUFQX0VYRUNVVEFCTEUgfCBNQVBfREVOWVdSSVRFKTsKKworCWlmIChmbGFncyAmIE1BUF9GSVhFRCAmJiBhZGRyIDwgTUlOX01BUF9BRERSKQorCQlnb3RvIG91dDsKKworCWVycm9yID0gLUVCQURGOworCWlmICghKGZsYWdzICYgTUFQX0FOT05ZTU9VUykpIHsKKwkJZmlsZSA9IGZnZXQoZmQpOworCQlpZiAoIWZpbGUpCisJCQlnb3RvIG91dDsKKwl9CisKKwlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCWVycm9yID0gZG9fbW1hcF9wZ29mZihmaWxlLCBhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBwZ29mZik7CisJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwlpZiAoZmlsZSkKKwkJZnB1dChmaWxlKTsKK291dDoKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKwl1bnNpZ25lZCBsb25nIHByb3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZkOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworfTsKKworYXNtbGlua2FnZSBpbnQgb2xkX21tYXAoc3RydWN0IG1tYXBfYXJnX3N0cnVjdCBfX3VzZXIgKmFyZykKK3sKKwlpbnQgZXJyb3IgPSAtRUZBVUxUOworCXN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgYTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYSwgYXJnLCBzaXplb2YoYSkpKQorCQlnb3RvIG91dDsKKworCWVycm9yID0gLUVJTlZBTDsKKwlpZiAoYS5vZmZzZXQgJiB+UEFHRV9NQVNLKQorCQlnb3RvIG91dDsKKworCWVycm9yID0gZG9fbW1hcDIoYS5hZGRyLCBhLmxlbiwgYS5wcm90LCBhLmZsYWdzLCBhLmZkLCBhLm9mZnNldCA+PiBQQUdFX1NISUZUKTsKK291dDoKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2FzbWxpbmthZ2UgdW5zaWduZWQgbG9uZworc3lzX2FybV9tcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG9sZF9sZW4sCisJICAgICAgIHVuc2lnbmVkIGxvbmcgbmV3X2xlbiwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkgICAgICAgdW5zaWduZWQgbG9uZyBuZXdfYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIHJldCA9IC1FSU5WQUw7CisKKwlpZiAoZmxhZ3MgJiBNUkVNQVBfRklYRUQgJiYgbmV3X2FkZHIgPCBNSU5fTUFQX0FERFIpCisJCWdvdG8gb3V0OworCisJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwlyZXQgPSBkb19tcmVtYXAoYWRkciwgb2xkX2xlbiwgbmV3X2xlbiwgZmxhZ3MsIG5ld19hZGRyKTsKKwl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBQZXJmb3JtIHRoZSBzZWxlY3QobmQsIGluLCBvdXQsIGV4LCB0dikgYW5kIG1tYXAoKSBzeXN0ZW0KKyAqIGNhbGxzLgorICovCisKK3N0cnVjdCBzZWxfYXJnX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBuOworCWZkX3NldCBfX3VzZXIgKmlucCwgKm91dHAsICpleHA7CisJc3RydWN0IHRpbWV2YWwgX191c2VyICp0dnA7Cit9OworCithc21saW5rYWdlIGludCBvbGRfc2VsZWN0KHN0cnVjdCBzZWxfYXJnX3N0cnVjdCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QgYTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYSwgYXJnLCBzaXplb2YoYSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwkvKiBzeXNfc2VsZWN0KCkgZG9lcyB0aGUgYXBwcm9wcmlhdGUga2VybmVsIGxvY2tpbmcgKi8KKwlyZXR1cm4gc3lzX3NlbGVjdChhLm4sIGEuaW5wLCBhLm91dHAsIGEuZXhwLCBhLnR2cCk7Cit9CisKKy8qCisgKiBzeXNfaXBjKCkgaXMgdGhlIGRlLW11bHRpcGxleGVyIGZvciB0aGUgU3lzViBJUEMgY2FsbHMuLgorICoKKyAqIFRoaXMgaXMgcmVhbGx5IGhvcnJpYmx5IHVnbHkuCisgKi8KK2FzbWxpbmthZ2UgaW50IHN5c19pcGModWludCBjYWxsLCBpbnQgZmlyc3QsIGludCBzZWNvbmQsIGludCB0aGlyZCwKKwkJICAgICAgIHZvaWQgX191c2VyICpwdHIsIGxvbmcgZmlmdGgpCit7CisJaW50IHZlcnNpb24sIHJldDsKKworCXZlcnNpb24gPSBjYWxsID4+IDE2OyAvKiBoYWNrIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisJY2FsbCAmPSAweGZmZmY7CisKKwlzd2l0Y2ggKGNhbGwpIHsKKwljYXNlIFNFTU9QOgorCQlyZXR1cm4gc3lzX3NlbXRpbWVkb3AgKGZpcnN0LCAoc3RydWN0IHNlbWJ1ZiBfX3VzZXIgKilwdHIsIHNlY29uZCwgTlVMTCk7CisJY2FzZSBTRU1USU1FRE9QOgorCQlyZXR1cm4gc3lzX3NlbXRpbWVkb3AoZmlyc3QsIChzdHJ1Y3Qgc2VtYnVmIF9fdXNlciAqKXB0ciwgc2Vjb25kLAorCQkJCQkoY29uc3Qgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqKWZpZnRoKTsKKworCWNhc2UgU0VNR0VUOgorCQlyZXR1cm4gc3lzX3NlbWdldCAoZmlyc3QsIHNlY29uZCwgdGhpcmQpOworCWNhc2UgU0VNQ1RMOiB7CisJCXVuaW9uIHNlbXVuIGZvdXJ0aDsKKwkJaWYgKCFwdHIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGdldF91c2VyKGZvdXJ0aC5fX3BhZCwgKHZvaWQgX191c2VyICogX191c2VyICopIHB0cikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIHN5c19zZW1jdGwgKGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBmb3VydGgpOworCX0KKworCWNhc2UgTVNHU05EOgorCQlyZXR1cm4gc3lzX21zZ3NuZChmaXJzdCwgKHN0cnVjdCBtc2didWYgX191c2VyICopIHB0ciwgCisJCQkJICBzZWNvbmQsIHRoaXJkKTsKKwljYXNlIE1TR1JDVjoKKwkJc3dpdGNoICh2ZXJzaW9uKSB7CisJCWNhc2UgMDogeworCQkJc3RydWN0IGlwY19rbHVkZ2UgdG1wOworCQkJaWYgKCFwdHIpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwoc3RydWN0IGlwY19rbHVkZ2UgX191c2VyICopcHRyLAorCQkJCQkgICBzaXplb2YgKHRtcCkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIHN5c19tc2dyY3YgKGZpcnN0LCB0bXAubXNncCwgc2Vjb25kLAorCQkJCQkgICB0bXAubXNndHlwLCB0aGlyZCk7CisJCX0KKwkJZGVmYXVsdDoKKwkJCXJldHVybiBzeXNfbXNncmN2IChmaXJzdCwKKwkJCQkJICAgKHN0cnVjdCBtc2didWYgX191c2VyICopIHB0ciwKKwkJCQkJICAgc2Vjb25kLCBmaWZ0aCwgdGhpcmQpOworCQl9CisJY2FzZSBNU0dHRVQ6CisJCXJldHVybiBzeXNfbXNnZ2V0ICgoa2V5X3QpIGZpcnN0LCBzZWNvbmQpOworCWNhc2UgTVNHQ1RMOgorCQlyZXR1cm4gc3lzX21zZ2N0bChmaXJzdCwgc2Vjb25kLCAoc3RydWN0IG1zcWlkX2RzIF9fdXNlciAqKXB0cik7CisKKwljYXNlIFNITUFUOgorCQlzd2l0Y2ggKHZlcnNpb24pIHsKKwkJZGVmYXVsdDogeworCQkJdWxvbmcgcmFkZHI7CisJCQlyZXQgPSBkb19zaG1hdChmaXJzdCwgKGNoYXIgX191c2VyICopcHRyLCBzZWNvbmQsICZyYWRkcik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCQlyZXR1cm4gcHV0X3VzZXIocmFkZHIsICh1bG9uZyBfX3VzZXIgKil0aGlyZCk7CisJCX0KKwkJY2FzZSAxOiAvKiBPZiBjb3Vyc2UsIHdlIGRvbid0IHN1cHBvcnQgaUJDUzIhICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCWNhc2UgU0hNRFQ6IAorCQlyZXR1cm4gc3lzX3NobWR0ICgoY2hhciBfX3VzZXIgKilwdHIpOworCWNhc2UgU0hNR0VUOgorCQlyZXR1cm4gc3lzX3NobWdldCAoZmlyc3QsIHNlY29uZCwgdGhpcmQpOworCWNhc2UgU0hNQ1RMOgorCQlyZXR1cm4gc3lzX3NobWN0bCAoZmlyc3QsIHNlY29uZCwKKwkJCQkgICAoc3RydWN0IHNobWlkX2RzIF9fdXNlciAqKSBwdHIpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PU1lTOworCX0KK30KKworYXNtbGlua2FnZSBsb25nIHN5c19zaG1hdChpbnQgc2htaWQsIGNoYXIgX191c2VyICpzaG1hZGRyLCBpbnQgc2htZmxnLAorCQkJICB1bnNpZ25lZCBsb25nIF9fdXNlciAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIHJldDsKKwlsb25nIGVycjsKKworCWVyciA9IGRvX3NobWF0KHNobWlkLCBzaG1hZGRyLCBzaG1mbGcsICZyZXQpOworCWlmIChlcnIgPT0gMCkKKwkJZXJyID0gcHV0X3VzZXIocmV0LCBhZGRyKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBGb3JrIGEgbmV3IHRhc2sgLSB0aGlzIGNyZWF0ZXMgYSBuZXcgcHJvZ3JhbSB0aHJlYWQuCisgKiBUaGlzIGlzIGNhbGxlZCBpbmRpcmVjdGx5IHZpYSBhIHNtYWxsIHdyYXBwZXIKKyAqLworYXNtbGlua2FnZSBpbnQgc3lzX2Zvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIGRvX2ZvcmsoU0lHQ0hMRCwgcmVncy0+QVJNX3NwLCByZWdzLCAwLCBOVUxMLCBOVUxMKTsKK30KKworLyogQ2xvbmUgYSB0YXNrIC0gdGhpcyBjbG9uZXMgdGhlIGNhbGxpbmcgcHJvZ3JhbSB0aHJlYWQuCisgKiBUaGlzIGlzIGNhbGxlZCBpbmRpcmVjdGx5IHZpYSBhIHNtYWxsIHdyYXBwZXIKKyAqLworYXNtbGlua2FnZSBpbnQgc3lzX2Nsb25lKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbmV3c3AsCisJCQkgaW50IF9fdXNlciAqcGFyZW50X3RpZHB0ciwgaW50IHRsc192YWwsCisJCQkgaW50IF9fdXNlciAqY2hpbGRfdGlkcHRyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAoIW5ld3NwKQorCQluZXdzcCA9IHJlZ3MtPkFSTV9zcDsKKworCXJldHVybiBkb19mb3JrKGNsb25lX2ZsYWdzLCBuZXdzcCwgcmVncywgMCwgcGFyZW50X3RpZHB0ciwgY2hpbGRfdGlkcHRyKTsKK30KKworYXNtbGlua2FnZSBpbnQgc3lzX3Zmb3JrKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiBkb19mb3JrKENMT05FX1ZGT1JLIHwgQ0xPTkVfVk0gfCBTSUdDSExELCByZWdzLT5BUk1fc3AsIHJlZ3MsIDAsIE5VTEwsIE5VTEwpOworfQorCisvKiBzeXNfZXhlY3ZlKCkgZXhlY3V0ZXMgYSBuZXcgcHJvZ3JhbS4KKyAqIFRoaXMgaXMgY2FsbGVkIGluZGlyZWN0bHkgdmlhIGEgc21hbGwgd3JhcHBlcgorICovCithc21saW5rYWdlIGludCBzeXNfZXhlY3ZlKGNoYXIgX191c2VyICpmaWxlbmFtZWksIGNoYXIgX191c2VyICogX191c2VyICphcmd2LAorCQkJICBjaGFyIF9fdXNlciAqIF9fdXNlciAqZW52cCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGVycm9yOworCWNoYXIgKiBmaWxlbmFtZTsKKworCWZpbGVuYW1lID0gZ2V0bmFtZShmaWxlbmFtZWkpOworCWVycm9yID0gUFRSX0VSUihmaWxlbmFtZSk7CisJaWYgKElTX0VSUihmaWxlbmFtZSkpCisJCWdvdG8gb3V0OworCWVycm9yID0gZG9fZXhlY3ZlKGZpbGVuYW1lLCBhcmd2LCBlbnZwLCByZWdzKTsKKwlwdXRuYW1lKGZpbGVuYW1lKTsKK291dDoKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2xvbmcgZXhlY3ZlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjaGFyICoqYXJndiwgY2hhciAqKmVudnApCit7CisJc3RydWN0IHB0X3JlZ3MgcmVnczsKKwlpbnQgcmV0OworCisJbWVtc2V0KCZyZWdzLCAwLCBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKKwlyZXQgPSBkb19leGVjdmUoKGNoYXIgKilmaWxlbmFtZSwgKGNoYXIgX191c2VyICogX191c2VyICopYXJndiwKKwkJCShjaGFyIF9fdXNlciAqIF9fdXNlciAqKWVudnAsICZyZWdzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIFNhdmUgYXJnYyB0byB0aGUgcmVnaXN0ZXIgc3RydWN0dXJlIGZvciB1c2Vyc3BhY2UuCisJICovCisJcmVncy5BUk1fcjAgPSByZXQ7CisKKwkvKgorCSAqIFdlIHdlcmUgc3VjY2Vzc2Z1bC4gIFdlIHdvbid0IGJlIHJldHVybmluZyB0byBvdXIgY2FsbGVyLCBidXQKKwkgKiBpbnN0ZWFkIHRvIHVzZXIgc3BhY2UgYnkgbWFuaXB1bGF0aW5nIHRoZSBrZXJuZWwgc3RhY2suCisJICovCisJYXNtKAkiYWRkCXIwLCAlMCwgJTFcblx0IgorCQkibW92CXIxLCAlMlxuXHQiCisJCSJtb3YJcjIsICUzXG5cdCIKKwkJImJsCW1lbW1vdmVcblx0IgkvKiBjb3B5IHJlZ3MgdG8gdG9wIG9mIHN0YWNrICovCisJCSJtb3YJcjgsICMwXG5cdCIJLyogbm90IGEgc3lzY2FsbCAqLworCQkibW92CXI5LCAlMFxuXHQiCS8qIHRocmVhZCBzdHJ1Y3R1cmUgKi8KKwkJIm1vdglzcCwgcjBcblx0IgkvKiByZXBvc2l0aW9uIHN0YWNrIHBvaW50ZXIgKi8KKwkJImIJcmV0X3RvX3VzZXIiCisJCToKKwkJOiAiciIgKGN1cnJlbnRfdGhyZWFkX2luZm8oKSksCisJCSAgIklyIiAoVEhSRUFEX1NJWkUgLSA4IC0gc2l6ZW9mKHJlZ3MpKSwKKwkJICAiciIgKCZyZWdzKSwKKwkJICAiSXIiIChzaXplb2YocmVncykpCisJCTogInIwIiwgInIxIiwgInIyIiwgInIzIiwgImlwIiwgIm1lbW9yeSIpOworCisgb3V0OgorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGV4ZWN2ZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdGltZS5jIGIvYXJjaC9hcm0va2VybmVsL3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjMyZjI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL3RpbWUuYwpAQCAtMCwwICsxLDQwMiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvdGltZS5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5NSAgTGludXMgVG9ydmFsZHMKKyAqICBNb2RpZmljYXRpb25zIGZvciBBUk0gKEMpIDE5OTQtMjAwMSBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIEFSTS1zcGVjaWZpYyB0aW1lIGhhbmRsaW5nIGRldGFpbHM6CisgKiAgcmVhZGluZyB0aGUgUlRDIGF0IGJvb3R1cCwgZXRjLi4uCisgKgorICogIDE5OTQtMDctMDIgIEFsYW4gTW9kcmEKKyAqICAgICAgICAgICAgICBmaXhlZCBzZXRfcnRjX21tc3MsIGZpeGVkIHRpbWUueWVhciBmb3IgPj0gMjAwMCwgbmV3IG1rdGltZQorICogIDE5OTgtMTItMjAgIFVwZGF0ZWQgTlRQIGNvZGUgYWNjb3JkaW5nIHRvIHRlY2huaWNhbCBtZW1vcmFuZHVtIEphbiAnOTYKKyAqICAgICAgICAgICAgICAiQSBLZXJuZWwgTW9kZWwgZm9yIFByZWNpc2lvbiBUaW1la2VlcGluZyIgYnkgRGF2ZSBNaWxscworICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKK3U2NCBqaWZmaWVzXzY0ID0gSU5JVElBTF9KSUZGSUVTOworCitFWFBPUlRfU1lNQk9MKGppZmZpZXNfNjQpOworCisvKgorICogT3VyIHN5c3RlbSB0aW1lci4KKyAqLworc3RydWN0IHN5c190aW1lciAqc3lzdGVtX3RpbWVyOworCitleHRlcm4gdW5zaWduZWQgbG9uZyB3YWxsX2ppZmZpZXM7CisKKy8qIHRoaXMgbmVlZHMgYSBiZXR0ZXIgaG9tZSAqLworREVGSU5FX1NQSU5MT0NLKHJ0Y19sb2NrKTsKKworI2lmZGVmIENPTkZJR19TQTExMDBfUlRDX01PRFVMRQorRVhQT1JUX1NZTUJPTChydGNfbG9jayk7CisjZW5kaWYKKworLyogY2hhbmdlIHRoaXMgaWYgeW91IGhhdmUgc29tZSBjb25zdGFudCB0aW1lIGRyaWZ0ICovCisjZGVmaW5lIFVTRUNTX1BFUl9KSUZGWQkoMTAwMDAwMC9IWikKKworI2lmZGVmIENPTkZJR19TTVAKK3Vuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGZwLCBwYyA9IGluc3RydWN0aW9uX3BvaW50ZXIocmVncyk7CisKKwlpZiAoaW5fbG9ja19mdW5jdGlvbnMocGMpKSB7CisJCWZwID0gcmVncy0+QVJNX2ZwOworCQlwYyA9IHBjX3BvaW50ZXIoKCh1bnNpZ25lZCBsb25nICopZnApWy0xXSk7CisJfQorCisJcmV0dXJuIHBjOworfQorRVhQT1JUX1NZTUJPTChwcm9maWxlX3BjKTsKKyNlbmRpZgorCisvKgorICogaG9vayBmb3Igc2V0dGluZyB0aGUgUlRDJ3MgaWRlYSBvZiB0aGUgY3VycmVudCB0aW1lLgorICovCitpbnQgKCpzZXRfcnRjKSh2b2lkKTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZHVtbXlfZ2V0dGltZW9mZnNldCh2b2lkKQoreworCXJldHVybiAwOworfQorCisvKgorICogU2NoZWR1bGVyIGNsb2NrIC0gcmV0dXJucyBjdXJyZW50IHRpbWUgaW4gbmFub3NlYyB1bml0cy4KKyAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uICBTdWItYXJjaGl0ZWN0dXJlCisgKiBpbXBsZW1lbnRhdGlvbnMgY2FuIG92ZXJyaWRlIHRoaXMuCisgKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgc2NoZWRfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZylqaWZmaWVzICogKDEwMDAwMDAwMDAgLyBIWik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5leHRfcnRjX3VwZGF0ZTsKKworLyoKKyAqIElmIHdlIGhhdmUgYW4gZXh0ZXJuYWxseSBzeW5jaHJvbml6ZWQgbGludXggY2xvY2ssIHRoZW4gdXBkYXRlCisgKiBDTU9TIGNsb2NrIGFjY29yZGluZ2x5IGV2ZXJ5IH4xMSBtaW51dGVzLiAgc2V0X3J0YygpIGhhcyB0byBiZQorICogY2FsbGVkIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIDUwMCBtcyBiZWZvcmUgdGhlIG5ldyBzZWNvbmQKKyAqIHN0YXJ0cy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGRvX3NldF9ydGModm9pZCkKK3sKKwlpZiAodGltZV9zdGF0dXMgJiBTVEFfVU5TWU5DIHx8IHNldF9ydGMgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKG5leHRfcnRjX3VwZGF0ZSAmJgorCSAgICB0aW1lX2JlZm9yZSgodW5zaWduZWQgbG9uZyl4dGltZS50dl9zZWMsIG5leHRfcnRjX3VwZGF0ZSkpCisJCXJldHVybjsKKworCWlmICh4dGltZS50dl9uc2VjIDwgNTAwMDAwMDAwIC0gKCh1bnNpZ25lZCkgdGlja19uc2VjID4+IDEpICYmCisJICAgIHh0aW1lLnR2X25zZWMgPj0gNTAwMDAwMDAwICsgKCh1bnNpZ25lZCkgdGlja19uc2VjID4+IDEpKQorCQlyZXR1cm47CisKKwlpZiAoc2V0X3J0YygpKQorCQkvKgorCQkgKiBydGMgdXBkYXRlIGZhaWxlZC4gIFRyeSBhZ2FpbiBpbiA2MHMKKwkJICovCisJCW5leHRfcnRjX3VwZGF0ZSA9IHh0aW1lLnR2X3NlYyArIDYwOworCWVsc2UKKwkJbmV4dF9ydGNfdXBkYXRlID0geHRpbWUudHZfc2VjICsgNjYwOworfQorCisjaWZkZWYgQ09ORklHX0xFRFMKKworc3RhdGljIHZvaWQgZHVtbXlfbGVkc19ldmVudChsZWRfZXZlbnRfdCBldnQpCit7Cit9CisKK3ZvaWQgKCpsZWRzX2V2ZW50KShsZWRfZXZlbnRfdCkgPSBkdW1teV9sZWRzX2V2ZW50OworCitzdHJ1Y3QgbGVkc19ldnRfbmFtZSB7CisJY29uc3QgY2hhcgluYW1lWzhdOworCWludAkJb247CisJaW50CQlvZmY7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGxlZHNfZXZ0X25hbWUgZXZ0X25hbWVzW10gPSB7CisJeyAiYW1iZXIiLCBsZWRfYW1iZXJfb24sIGxlZF9hbWJlcl9vZmYgfSwKKwl7ICJibHVlIiwgIGxlZF9ibHVlX29uLCAgbGVkX2JsdWVfb2ZmICB9LAorCXsgImdyZWVuIiwgbGVkX2dyZWVuX29uLCBsZWRfZ3JlZW5fb2ZmIH0sCisJeyAicmVkIiwgICBsZWRfcmVkX29uLCAgIGxlZF9yZWRfb2ZmICAgfSwKK307CisKK3N0YXRpYyBzc2l6ZV90IGxlZHNfc3RvcmUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTCwgbGVuID0gc3RyY3NwbihidWYsICIgIik7CisKKwlpZiAobGVuID4gMCAmJiBidWZbbGVuXSA9PSAnXDAnKQorCQlsZW4tLTsKKworCWlmIChzdHJuY21wKGJ1ZiwgImNsYWltIiwgbGVuKSA9PSAwKSB7CisJCWxlZHNfZXZlbnQobGVkX2NsYWltKTsKKwkJcmV0ID0gc2l6ZTsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoYnVmLCAicmVsZWFzZSIsIGxlbikgPT0gMCkgeworCQlsZWRzX2V2ZW50KGxlZF9yZWxlYXNlKTsKKwkJcmV0ID0gc2l6ZTsKKwl9IGVsc2UgeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShldnRfbmFtZXMpOyBpKyspIHsKKwkJCWlmIChzdHJsZW4oZXZ0X25hbWVzW2ldLm5hbWUpICE9IGxlbiB8fAorCQkJICAgIHN0cm5jbXAoYnVmLCBldnRfbmFtZXNbaV0ubmFtZSwgbGVuKSAhPSAwKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHN0cm5jbXAoYnVmK2xlbiwgIiBvbiIsIDMpID09IDApIHsKKwkJCQlsZWRzX2V2ZW50KGV2dF9uYW1lc1tpXS5vbik7CisJCQkJcmV0ID0gc2l6ZTsKKwkJCX0gZWxzZSBpZiAoc3RybmNtcChidWYrbGVuLCAiIG9mZiIsIDQpID09IDApIHsKKwkJCQlsZWRzX2V2ZW50KGV2dF9uYW1lc1tpXS5vZmYpOworCQkJCXJldCA9IHNpemU7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgU1lTREVWX0FUVFIoZXZlbnQsIDAyMDAsIE5VTEwsIGxlZHNfc3RvcmUpOworCitzdGF0aWMgaW50IGxlZHNfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJbGVkc19ldmVudChsZWRfc3RvcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGVkc19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwlsZWRzX2V2ZW50KGxlZF9zdGFydCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGVkc19zaHV0ZG93bihzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCWxlZHNfZXZlbnQobGVkX2hhbHRlZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGxlZHNfc3lzY2xhc3MgPSB7CisJc2V0X2tzZXRfbmFtZSgibGVkcyIpLAorCS5zaHV0ZG93bgk9IGxlZHNfc2h1dGRvd24sCisJLnN1c3BlbmQJPSBsZWRzX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBsZWRzX3Jlc3VtZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBsZWRzX2RldmljZSA9IHsKKwkuaWQJCT0gMCwKKwkuY2xzCQk9ICZsZWRzX3N5c2NsYXNzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbGVkc19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKwlyZXQgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmxlZHNfc3lzY2xhc3MpOworCWlmIChyZXQgPT0gMCkKKwkJcmV0ID0gc3lzZGV2X3JlZ2lzdGVyKCZsZWRzX2RldmljZSk7CisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBzeXNkZXZfY3JlYXRlX2ZpbGUoJmxlZHNfZGV2aWNlLCAmYXR0cl9ldmVudCk7CisJcmV0dXJuIHJldDsKK30KKworZGV2aWNlX2luaXRjYWxsKGxlZHNfaW5pdCk7CisKK0VYUE9SVF9TWU1CT0wobGVkc19ldmVudCk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19MRURTX1RJTUVSCitzdGF0aWMgaW5saW5lIHZvaWQgZG9fbGVkcyh2b2lkKQoreworCXN0YXRpYyB1bnNpZ25lZCBpbnQgY291bnQgPSA1MDsKKworCWlmICgtLWNvdW50ID09IDApIHsKKwkJY291bnQgPSA1MDsKKwkJbGVkc19ldmVudChsZWRfdGltZXIpOworCX0KK30KKyNlbHNlCisjZGVmaW5lCWRvX2xlZHMoKQorI2VuZGlmCisKK3ZvaWQgZG9fZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgc2VxOworCXVuc2lnbmVkIGxvbmcgdXNlYywgc2VjLCBsb3N0OworCisJZG8geworCQlzZXEgPSByZWFkX3NlcWJlZ2luX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKKwkJdXNlYyA9IHN5c3RlbV90aW1lci0+b2Zmc2V0KCk7CisKKwkJbG9zdCA9IGppZmZpZXMgLSB3YWxsX2ppZmZpZXM7CisJCWlmIChsb3N0KQorCQkJdXNlYyArPSBsb3N0ICogVVNFQ1NfUEVSX0pJRkZZOworCisJCXNlYyA9IHh0aW1lLnR2X3NlYzsKKwkJdXNlYyArPSB4dGltZS50dl9uc2VjIC8gMTAwMDsKKwl9IHdoaWxlIChyZWFkX3NlcXJldHJ5X2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIHNlcSwgZmxhZ3MpKTsKKworCS8qIHVzZWMgbWF5IGhhdmUgZ29uZSB1cCBhIGxvdDogYmUgc2FmZSAqLworCXdoaWxlICh1c2VjID49IDEwMDAwMDApIHsKKwkJdXNlYyAtPSAxMDAwMDAwOworCQlzZWMrKzsKKwl9CisKKwl0di0+dHZfc2VjID0gc2VjOworCXR2LT50dl91c2VjID0gdXNlYzsKK30KKworRVhQT1JUX1NZTUJPTChkb19nZXR0aW1lb2ZkYXkpOworCitpbnQgZG9fc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1lc3BlYyAqdHYpCit7CisJdGltZV90IHd0bV9zZWMsIHNlYyA9IHR2LT50dl9zZWM7CisJbG9uZyB3dG1fbnNlYywgbnNlYyA9IHR2LT50dl9uc2VjOworCisJaWYgKCh1bnNpZ25lZCBsb25nKXR2LT50dl9uc2VjID49IE5TRUNfUEVSX1NFQykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3cml0ZV9zZXFsb2NrX2lycSgmeHRpbWVfbG9jayk7CisJLyoKKwkgKiBUaGlzIGlzIHJldm9sdGluZy4gV2UgbmVlZCB0byBzZXQgInh0aW1lIiBjb3JyZWN0bHkuIEhvd2V2ZXIsIHRoZQorCSAqIHZhbHVlIGluIHRoaXMgbG9jYXRpb24gaXMgdGhlIHZhbHVlIGF0IHRoZSBtb3N0IHJlY2VudCB1cGRhdGUgb2YKKwkgKiB3YWxsIHRpbWUuICBEaXNjb3ZlciB3aGF0IGNvcnJlY3Rpb24gZ2V0dGltZW9mZGF5KCkgd291bGQgaGF2ZQorCSAqIGRvbmUsIGFuZCB0aGVuIHVuZG8gaXQhCisJICovCisJbnNlYyAtPSBzeXN0ZW1fdGltZXItPm9mZnNldCgpICogTlNFQ19QRVJfVVNFQzsKKwluc2VjIC09IChqaWZmaWVzIC0gd2FsbF9qaWZmaWVzKSAqIFRJQ0tfTlNFQzsKKworCXd0bV9zZWMgID0gd2FsbF90b19tb25vdG9uaWMudHZfc2VjICsgKHh0aW1lLnR2X3NlYyAtIHNlYyk7CisJd3RtX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjICsgKHh0aW1lLnR2X25zZWMgLSBuc2VjKTsKKworCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ4dGltZSwgc2VjLCBuc2VjKTsKKwlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsIHd0bV9zZWMsIHd0bV9uc2VjKTsKKworCXRpbWVfYWRqdXN0ID0gMDsJCS8qIHN0b3AgYWN0aXZlIGFkanRpbWUoKSAqLworCXRpbWVfc3RhdHVzIHw9IFNUQV9VTlNZTkM7CisJdGltZV9tYXhlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKKwl0aW1lX2VzdGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOworCXdyaXRlX3NlcXVubG9ja19pcnEoJnh0aW1lX2xvY2spOworCWNsb2NrX3dhc19zZXQoKTsKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChkb19zZXR0aW1lb2ZkYXkpOworCisvKioKKyAqIHNhdmVfdGltZV9kZWx0YSAtIFNhdmUgdGhlIG9mZnNldCBiZXR3ZWVuIHN5c3RlbSB0aW1lIGFuZCBSVEMgdGltZQorICogQGRlbHRhOiBwb2ludGVyIHRvIHRpbWVzcGVjIHRvIHN0b3JlIGRlbHRhCisgKiBAcnRjOiBwb2ludGVyIHRvIHRpbWVzcGVjIGZvciBjdXJyZW50IFJUQyB0aW1lCisgKgorICogUmV0dXJuIGEgZGVsdGEgYmV0d2VlbiB0aGUgc3lzdGVtIHRpbWUgYW5kIHRoZSBSVEMgdGltZSwgc3VjaAorICogdGhhdCBzeXN0ZW0gdGltZSBjYW4gYmUgcmVzdG9yZWQgbGF0ZXIgd2l0aCByZXN0b3JlX3RpbWVfZGVsdGEoKQorICovCit2b2lkIHNhdmVfdGltZV9kZWx0YShzdHJ1Y3QgdGltZXNwZWMgKmRlbHRhLCBzdHJ1Y3QgdGltZXNwZWMgKnJ0YykKK3sKKwlzZXRfbm9ybWFsaXplZF90aW1lc3BlYyhkZWx0YSwKKwkJCQl4dGltZS50dl9zZWMgLSBydGMtPnR2X3NlYywKKwkJCQl4dGltZS50dl9uc2VjIC0gcnRjLT50dl9uc2VjKTsKK30KK0VYUE9SVF9TWU1CT0woc2F2ZV90aW1lX2RlbHRhKTsKKworLyoqCisgKiByZXN0b3JlX3RpbWVfZGVsdGEgLSBSZXN0b3JlIHRoZSBjdXJyZW50IHN5c3RlbSB0aW1lCisgKiBAZGVsdGE6IGRlbHRhIHJldHVybmVkIGJ5IHNhdmVfdGltZV9kZWx0YSgpCisgKiBAcnRjOiBwb2ludGVyIHRvIHRpbWVzcGVjIGZvciBjdXJyZW50IFJUQyB0aW1lCisgKi8KK3ZvaWQgcmVzdG9yZV90aW1lX2RlbHRhKHN0cnVjdCB0aW1lc3BlYyAqZGVsdGEsIHN0cnVjdCB0aW1lc3BlYyAqcnRjKQoreworCXN0cnVjdCB0aW1lc3BlYyB0czsKKworCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ0cywKKwkJCQlkZWx0YS0+dHZfc2VjICsgcnRjLT50dl9zZWMsCisJCQkJZGVsdGEtPnR2X25zZWMgKyBydGMtPnR2X25zZWMpOworCisJZG9fc2V0dGltZW9mZGF5KCZ0cyk7Cit9CitFWFBPUlRfU1lNQk9MKHJlc3RvcmVfdGltZV9kZWx0YSk7CisKKy8qCisgKiBLZXJuZWwgc3lzdGVtIHRpbWVyIHN1cHBvcnQuCisgKi8KK3ZvaWQgdGltZXJfdGljayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlwcm9maWxlX3RpY2soQ1BVX1BST0ZJTElORywgcmVncyk7CisJZG9fbGVkcygpOworCWRvX3NldF9ydGMoKTsKKwlkb190aW1lcihyZWdzKTsKKyNpZm5kZWYgQ09ORklHX1NNUAorCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CisjZW5kaWYKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCB0aW1lcl9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc3lzX3RpbWVyICp0aW1lciA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzeXNfdGltZXIsIGRldik7CisKKwlpZiAodGltZXItPnN1c3BlbmQgIT0gTlVMTCkKKwkJdGltZXItPnN1c3BlbmQoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRpbWVyX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzeXNfdGltZXIgKnRpbWVyID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHN5c190aW1lciwgZGV2KTsKKworCWlmICh0aW1lci0+cmVzdW1lICE9IE5VTEwpCisJCXRpbWVyLT5yZXN1bWUoKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgdGltZXJfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHRpbWVyX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgdGltZXJfc3lzY2xhc3MgPSB7CisJc2V0X2tzZXRfbmFtZSgidGltZXIiKSwKKwkuc3VzcGVuZAk9IHRpbWVyX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB0aW1lcl9yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0aW1lcl9pbml0X3N5c2ZzKHZvaWQpCit7CisJaW50IHJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmdGltZXJfc3lzY2xhc3MpOworCWlmIChyZXQgPT0gMCkgeworCQlzeXN0ZW1fdGltZXItPmRldi5jbHMgPSAmdGltZXJfc3lzY2xhc3M7CisJCXJldCA9IHN5c2Rldl9yZWdpc3Rlcigmc3lzdGVtX3RpbWVyLT5kZXYpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitkZXZpY2VfaW5pdGNhbGwodGltZXJfaW5pdF9zeXNmcyk7CisKK3ZvaWQgX19pbml0IHRpbWVfaW5pdCh2b2lkKQoreworCWlmIChzeXN0ZW1fdGltZXItPm9mZnNldCA9PSBOVUxMKQorCQlzeXN0ZW1fdGltZXItPm9mZnNldCA9IGR1bW15X2dldHRpbWVvZmZzZXQ7CisJc3lzdGVtX3RpbWVyLT5pbml0KCk7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNkYzQ2NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCkBAIC0wLDAgKzEsNTkwIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIFJ1c3NlbGwgS2luZworICogIEZyYWdtZW50cyB0aGF0IGFwcGVhciB0aGUgc2FtZSBhcyBsaW51eC9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMgKEMpIExpbnVzIFRvcnZhbGRzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgJ3RyYXBzLmMnIGhhbmRsZXMgaGFyZHdhcmUgZXhjZXB0aW9ucyBhZnRlciB3ZSBoYXZlIHNhdmVkIHNvbWUgc3RhdGUgaW4KKyAqICAnbGludXgvYXJjaC9hcm0vbGliL3RyYXBzLlMnLiAgTW9zdGx5IGEgZGVidWdnaW5nIGFpZCwgYnV0IHdpbGwgcHJvYmFibHkKKyAqICBraWxsIHRoZSBvZmZlbmRpbmcgcHJvY2Vzcy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKworI2luY2x1ZGUgInB0cmFjZS5oIgorCitleHRlcm4gdm9pZCBjX2JhY2t0cmFjZSAodW5zaWduZWQgbG9uZyBmcCwgaW50IHBtb2RlKTsKK2V4dGVybiB2b2lkIHNob3dfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpOworCitjb25zdCBjaGFyICpwcm9jZXNzb3JfbW9kZXNbXT0KK3sgIlVTRVJfMjYiLCAiRklRXzI2IiAsICJJUlFfMjYiICwgIlNWQ18yNiIgLCAiVUs0XzI2IiAsICJVSzVfMjYiICwgIlVLNl8yNiIgLCAiVUs3XzI2IiAsCisgICJVSzhfMjYiICwgIlVLOV8yNiIgLCAiVUsxMF8yNiIsICJVSzExXzI2IiwgIlVLMTJfMjYiLCAiVUsxM18yNiIsICJVSzE0XzI2IiwgIlVLMTVfMjYiLAorICAiVVNFUl8zMiIsICJGSVFfMzIiICwgIklSUV8zMiIgLCAiU1ZDXzMyIiAsICJVSzRfMzIiICwgIlVLNV8zMiIgLCAiVUs2XzMyIiAsICJBQlRfMzIiICwKKyAgIlVLOF8zMiIgLCAiVUs5XzMyIiAsICJVSzEwXzMyIiwgIlVORF8zMiIgLCAiVUsxMl8zMiIsICJVSzEzXzMyIiwgIlVLMTRfMzIiLCAiU1lTXzMyIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmhhbmRsZXJbXT0geyAicHJlZmV0Y2ggYWJvcnQiLCAiZGF0YSBhYm9ydCIsICJhZGRyZXNzIGV4Y2VwdGlvbiIsICJpbnRlcnJ1cHQiIH07CisKKyNpZmRlZiBDT05GSUdfREVCVUdfVVNFUgordW5zaWduZWQgaW50IHVzZXJfZGVidWc7CisKK3N0YXRpYyBpbnQgX19pbml0IHVzZXJfZGVidWdfc2V0dXAoY2hhciAqc3RyKQoreworCWdldF9vcHRpb24oJnN0ciwgJnVzZXJfZGVidWcpOworCXJldHVybiAxOworfQorX19zZXR1cCgidXNlcl9kZWJ1Zz0iLCB1c2VyX2RlYnVnX3NldHVwKTsKKyNlbmRpZgorCit2b2lkIGR1bXBfYmFja3RyYWNlX2VudHJ5KHVuc2lnbmVkIGxvbmcgd2hlcmUsIHVuc2lnbmVkIGxvbmcgZnJvbSkKK3sKKyNpZmRlZiBDT05GSUdfS0FMTFNZTVMKKwlwcmludGsoIls8JTA4bHg+XSAiLCB3aGVyZSk7CisJcHJpbnRfc3ltYm9sKCIoJXMpICIsIHdoZXJlKTsKKwlwcmludGsoImZyb20gWzwlMDhseD5dICIsIGZyb20pOworCXByaW50X3N5bWJvbCgiKCVzKVxuIiwgZnJvbSk7CisjZWxzZQorCXByaW50aygiRnVuY3Rpb24gZW50ZXJlZCBhdCBbPCUwOGx4Pl0gZnJvbSBbPCUwOGx4Pl1cbiIsIHdoZXJlLCBmcm9tKTsKKyNlbmRpZgorfQorCisvKgorICogU3RhY2sgcG9pbnRlcnMgc2hvdWxkIGFsd2F5cyBiZSB3aXRoaW4gdGhlIGtlcm5lbHMgdmlldyBvZgorICogcGh5c2ljYWwgbWVtb3J5LiAgSWYgaXQgaXMgbm90IHRoZXJlLCB0aGVuIHdlIGNhbid0IGR1bXAKKyAqIG91dCBhbnkgaW5mb3JtYXRpb24gcmVsYXRpbmcgdG8gdGhlIHN0YWNrLgorICovCitzdGF0aWMgaW50IHZlcmlmeV9zdGFjayh1bnNpZ25lZCBsb25nIHNwKQoreworCWlmIChzcCA8IFBBR0VfT0ZGU0VUIHx8IChzcCA+ICh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICYmIGhpZ2hfbWVtb3J5ICE9IDApKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCisvKgorICogRHVtcCBvdXQgdGhlIGNvbnRlbnRzIG9mIHNvbWUgbWVtb3J5IG5pY2VseS4uLgorICovCitzdGF0aWMgdm9pZCBkdW1wX21lbShjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGxvbmcgYm90dG9tLCB1bnNpZ25lZCBsb25nIHRvcCkKK3sKKwl1bnNpZ25lZCBsb25nIHAgPSBib3R0b20gJiB+MzE7CisJbW1fc2VnbWVudF90IGZzOworCWludCBpOworCisJLyoKKwkgKiBXZSBuZWVkIHRvIHN3aXRjaCB0byBrZXJuZWwgbW9kZSBzbyB0aGF0IHdlIGNhbiB1c2UgX19nZXRfdXNlcgorCSAqIHRvIHNhZmVseSByZWFkIGZyb20ga2VybmVsIHNwYWNlLiAgTm90ZSB0aGF0IHdlIG5vdyBkdW1wIHRoZQorCSAqIGNvZGUgZmlyc3QsIGp1c3QgaW4gY2FzZSB0aGUgYmFja3RyYWNlIGtpbGxzIHVzLgorCSAqLworCWZzID0gZ2V0X2ZzKCk7CisJc2V0X2ZzKEtFUk5FTF9EUyk7CisKKwlwcmludGsoIiVzKDB4JTA4bHggdG8gMHglMDhseClcbiIsIHN0ciwgYm90dG9tLCB0b3ApOworCisJZm9yIChwID0gYm90dG9tICYgfjMxOyBwIDwgdG9wOykgeworCQlwcmludGsoIiUwNGx4OiAiLCBwICYgMHhmZmZmKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrLCBwICs9IDQpIHsKKwkJCXVuc2lnbmVkIGludCB2YWw7CisKKwkJCWlmIChwIDwgYm90dG9tIHx8IHAgPj0gdG9wKQorCQkJCXByaW50aygiICAgICAgICAgIik7CisJCQllbHNlIHsKKwkJCQlfX2dldF91c2VyKHZhbCwgKHVuc2lnbmVkIGxvbmcgKilwKTsKKwkJCQlwcmludGsoIiUwOHggIiwgdmFsKTsKKwkJCX0KKwkJfQorCQlwcmludGsgKCJcbiIpOworCX0KKworCXNldF9mcyhmcyk7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfaW5zdHIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsKKwljb25zdCBpbnQgdGh1bWIgPSB0aHVtYl9tb2RlKHJlZ3MpOworCWNvbnN0IGludCB3aWR0aCA9IHRodW1iID8gNCA6IDg7CisJbW1fc2VnbWVudF90IGZzOworCWludCBpOworCisJLyoKKwkgKiBXZSBuZWVkIHRvIHN3aXRjaCB0byBrZXJuZWwgbW9kZSBzbyB0aGF0IHdlIGNhbiB1c2UgX19nZXRfdXNlcgorCSAqIHRvIHNhZmVseSByZWFkIGZyb20ga2VybmVsIHNwYWNlLiAgTm90ZSB0aGF0IHdlIG5vdyBkdW1wIHRoZQorCSAqIGNvZGUgZmlyc3QsIGp1c3QgaW4gY2FzZSB0aGUgYmFja3RyYWNlIGtpbGxzIHVzLgorCSAqLworCWZzID0gZ2V0X2ZzKCk7CisJc2V0X2ZzKEtFUk5FTF9EUyk7CisKKwlwcmludGsoIkNvZGU6ICIpOworCWZvciAoaSA9IC00OyBpIDwgMTsgaSsrKSB7CisJCXVuc2lnbmVkIGludCB2YWwsIGJhZDsKKworCQlpZiAodGh1bWIpCisJCQliYWQgPSBfX2dldF91c2VyKHZhbCwgJigodTE2ICopYWRkcilbaV0pOworCQllbHNlCisJCQliYWQgPSBfX2dldF91c2VyKHZhbCwgJigodTMyICopYWRkcilbaV0pOworCisJCWlmICghYmFkKQorCQkJcHJpbnRrKGkgPT0gMCA/ICIoJTAqeCkgIiA6ICIlMCp4ICIsIHdpZHRoLCB2YWwpOworCQllbHNlIHsKKwkJCXByaW50aygiYmFkIFBDIHZhbHVlLiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisJcHJpbnRrKCJcbiIpOworCisJc2V0X2ZzKGZzKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9iYWNrdHJhY2Uoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXVuc2lnbmVkIGludCBmcDsKKwlpbnQgb2sgPSAxOworCisJcHJpbnRrKCJCYWNrdHJhY2U6ICIpOworCWZwID0gcmVncy0+QVJNX2ZwOworCWlmICghZnApIHsKKwkJcHJpbnRrKCJubyBmcmFtZSBwb2ludGVyIik7CisJCW9rID0gMDsKKwl9IGVsc2UgaWYgKHZlcmlmeV9zdGFjayhmcCkpIHsKKwkJcHJpbnRrKCJpbnZhbGlkIGZyYW1lIHBvaW50ZXIgMHglMDh4IiwgZnApOworCQlvayA9IDA7CisJfSBlbHNlIGlmIChmcCA8ICh1bnNpZ25lZCBsb25nKSh0c2stPnRocmVhZF9pbmZvICsgMSkpCisJCXByaW50aygiZnJhbWUgcG9pbnRlciB1bmRlcmZsb3ciKTsKKwlwcmludGsoIlxuIik7CisKKwlpZiAob2spCisJCWNfYmFja3RyYWNlKGZwLCBwcm9jZXNzb3JfbW9kZShyZWdzKSk7Cit9CisKK3ZvaWQgZHVtcF9zdGFjayh2b2lkKQoreworI2lmZGVmIENPTkZJR19ERUJVR19FUlJPUlMKKwlfX2JhY2t0cmFjZSgpOworI2VuZGlmCit9CisKK0VYUE9SVF9TWU1CT0woZHVtcF9zdGFjayk7CisKK3ZvaWQgc2hvd19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyAqc3ApCit7CisJdW5zaWduZWQgbG9uZyBmcDsKKworCWlmICghdHNrKQorCQl0c2sgPSBjdXJyZW50OworCisJaWYgKHRzayAhPSBjdXJyZW50KQorCQlmcCA9IHRocmVhZF9zYXZlZF9mcCh0c2spOworCWVsc2UKKwkJYXNtKCJtb3YlPyAlMCwgZnAiIDogIj1yIiAoZnApKTsKKworCWNfYmFja3RyYWNlKGZwLCAweDEwKTsKKwliYXJyaWVyKCk7Cit9CisKK0RFRklORV9TUElOTE9DSyhkaWVfbG9jayk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3RlY3RlZCBhZ2FpbnN0IHJlLWVudHJhbmN5LgorICovCitOT1JFVF9UWVBFIHZvaWQgZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBlcnIpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCXN0YXRpYyBpbnQgZGllX2NvdW50ZXI7CisKKwljb25zb2xlX3ZlcmJvc2UoKTsKKwlzcGluX2xvY2tfaXJxKCZkaWVfbG9jayk7CisJYnVzdF9zcGlubG9ja3MoMSk7CisKKwlwcmludGsoIkludGVybmFsIGVycm9yOiAlczogJXggWyMlZF1cbiIsIHN0ciwgZXJyLCArK2RpZV9jb3VudGVyKTsKKwlwcmludF9tb2R1bGVzKCk7CisJcHJpbnRrKCJDUFU6ICVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCXNob3dfcmVncyhyZWdzKTsKKwlwcmludGsoIlByb2Nlc3MgJXMgKHBpZDogJWQsIHN0YWNrIGxpbWl0ID0gMHglcClcbiIsCisJCXRzay0+Y29tbSwgdHNrLT5waWQsIHRzay0+dGhyZWFkX2luZm8gKyAxKTsKKworCWlmICghdXNlcl9tb2RlKHJlZ3MpIHx8IGluX2ludGVycnVwdCgpKSB7CisJCWR1bXBfbWVtKCJTdGFjazogIiwgcmVncy0+QVJNX3NwLCA4MTkyKyh1bnNpZ25lZCBsb25nKXRzay0+dGhyZWFkX2luZm8pOworCQlkdW1wX2JhY2t0cmFjZShyZWdzLCB0c2spOworCQlkdW1wX2luc3RyKHJlZ3MpOworCX0KKworCWJ1c3Rfc3BpbmxvY2tzKDApOworCXNwaW5fdW5sb2NrX2lycSgmZGllX2xvY2spOworCWRvX2V4aXQoU0lHU0VHVik7Cit9CisKK3ZvaWQgZGllX2lmX2tlcm5lbChjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZXJyKQoreworCWlmICh1c2VyX21vZGUocmVncykpCisgICAgCQlyZXR1cm47CisKKyAgICAJZGllKHN0ciwgcmVncywgZXJyKTsKK30KKworc3RhdGljIHZvaWQgbm90aWZ5X2RpZShjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzaWdpbmZvX3QgKmluZm8sCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGVyciwgdW5zaWduZWQgbG9uZyB0cmFwKQoreworCWlmICh1c2VyX21vZGUocmVncykpIHsKKwkJY3VycmVudC0+dGhyZWFkLmVycm9yX2NvZGUgPSBlcnI7CisJCWN1cnJlbnQtPnRocmVhZC50cmFwX25vID0gdHJhcDsKKworCQlmb3JjZV9zaWdfaW5mbyhpbmZvLT5zaV9zaWdubywgaW5mbywgY3VycmVudCk7CisJfSBlbHNlIHsKKwkJZGllKHN0ciwgcmVncywgZXJyKTsKKwl9Cit9CisKK3N0YXRpYyBMSVNUX0hFQUQodW5kZWZfaG9vayk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHVuZGVmX2xvY2spOworCit2b2lkIHJlZ2lzdGVyX3VuZGVmX2hvb2soc3RydWN0IHVuZGVmX2hvb2sgKmhvb2spCit7CisJc3Bpbl9sb2NrX2lycSgmdW5kZWZfbG9jayk7CisJbGlzdF9hZGQoJmhvb2stPm5vZGUsICZ1bmRlZl9ob29rKTsKKwlzcGluX3VubG9ja19pcnEoJnVuZGVmX2xvY2spOworfQorCit2b2lkIHVucmVnaXN0ZXJfdW5kZWZfaG9vayhzdHJ1Y3QgdW5kZWZfaG9vayAqaG9vaykKK3sKKwlzcGluX2xvY2tfaXJxKCZ1bmRlZl9sb2NrKTsKKwlsaXN0X2RlbCgmaG9vay0+bm9kZSk7CisJc3Bpbl91bmxvY2tfaXJxKCZ1bmRlZl9sb2NrKTsKK30KKworYXNtbGlua2FnZSB2b2lkIGRvX3VuZGVmaW5zdHIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IGNvcnJlY3Rpb24gPSB0aHVtYl9tb2RlKHJlZ3MpID8gMiA6IDQ7CisJdW5zaWduZWQgaW50IGluc3RyOworCXN0cnVjdCB1bmRlZl9ob29rICpob29rOworCXNpZ2luZm9fdCBpbmZvOworCXZvaWQgX191c2VyICpwYzsKKworCS8qCisJICogQWNjb3JkaW5nIHRvIHRoZSBBUk0gQVJNLCBQQyBpcyAyIG9yIDQgYnl0ZXMgYWhlYWQsCisJICogZGVwZW5kaW5nIHdoZXRoZXIgd2UncmUgaW4gVGh1bWIgbW9kZSBvciBub3QuCisJICogQ29ycmVjdCB0aGlzIG9mZnNldC4KKwkgKi8KKwlyZWdzLT5BUk1fcGMgLT0gY29ycmVjdGlvbjsKKworCXBjID0gKHZvaWQgX191c2VyICopaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsKKwlpZiAodGh1bWJfbW9kZShyZWdzKSkgeworCQlnZXRfdXNlcihpbnN0ciwgKHUxNiBfX3VzZXIgKilwYyk7CisJfSBlbHNlIHsKKwkJZ2V0X3VzZXIoaW5zdHIsICh1MzIgX191c2VyICopcGMpOworCX0KKworCXNwaW5fbG9ja19pcnEoJnVuZGVmX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaG9vaywgJnVuZGVmX2hvb2ssIG5vZGUpIHsKKwkJaWYgKChpbnN0ciAmIGhvb2stPmluc3RyX21hc2spID09IGhvb2stPmluc3RyX3ZhbCAmJgorCQkgICAgKHJlZ3MtPkFSTV9jcHNyICYgaG9vay0+Y3Bzcl9tYXNrKSA9PSBob29rLT5jcHNyX3ZhbCkgeworCQkJaWYgKGhvb2stPmZuKHJlZ3MsIGluc3RyKSA9PSAwKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxKCZ1bmRlZl9sb2NrKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZ1bmRlZl9sb2NrKTsKKworI2lmZGVmIENPTkZJR19ERUJVR19VU0VSCisJaWYgKHVzZXJfZGVidWcgJiBVREJHX1VOREVGSU5FRCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlcyAoJWQpOiB1bmRlZmluZWQgaW5zdHJ1Y3Rpb246IHBjPSVwXG4iLAorCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBwYyk7CisJCWR1bXBfaW5zdHIocmVncyk7CisJfQorI2VuZGlmCisKKwlpbmZvLnNpX3NpZ25vID0gU0lHSUxMOworCWluZm8uc2lfZXJybm8gPSAwOworCWluZm8uc2lfY29kZSAgPSBJTExfSUxMT1BDOworCWluZm8uc2lfYWRkciAgPSBwYzsKKworCW5vdGlmeV9kaWUoIk9vcHMgLSB1bmRlZmluZWQgaW5zdHJ1Y3Rpb24iLCByZWdzLCAmaW5mbywgMCwgNik7Cit9CisKK2FzbWxpbmthZ2Ugdm9pZCBkb191bmV4cF9maXEgKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworI2lmbmRlZiBDT05GSUdfSUdOT1JFX0ZJUQorCXByaW50aygiSG1tLiAgVW5leHBlY3RlZCBGSVEgcmVjZWl2ZWQsIGJ1dCB0cnlpbmcgdG8gY29udGludWVcbiIpOworCXByaW50aygiWW91IG1heSBoYXZlIGEgaGFyZHdhcmUgcHJvYmxlbS4uLlxuIik7CisjZW5kaWYKK30KKworLyoKKyAqIGJhZF9tb2RlIGhhbmRsZXMgdGhlIGltcG9zc2libGUgY2FzZSBpbiB0aGUgdmVjdG9ycy4gIElmIHlvdSBzZWUgb25lIG9mCisgKiB0aGVzZSwgdGhlbiBpdCdzIGV4dHJlbWVseSBzZXJpb3VzLCBhbmQgY291bGQgbWVhbiB5b3UgaGF2ZSBidWdneSBoYXJkd2FyZS4KKyAqIEl0IG5ldmVyIHJldHVybnMsIGFuZCBuZXZlciB0cmllcyB0byBzeW5jLiAgV2UgaG9wZSB0aGF0IHdlIGNhbiBhdCBsZWFzdAorICogZHVtcCBvdXQgc29tZSBzdGF0ZSBpbmZvcm1hdGlvbi4uLgorICovCithc21saW5rYWdlIHZvaWQgYmFkX21vZGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCByZWFzb24sIGludCBwcm9jX21vZGUpCit7CisJY29uc29sZV92ZXJib3NlKCk7CisKKwlwcmludGsoS0VSTl9DUklUICJCYWQgbW9kZSBpbiAlcyBoYW5kbGVyIGRldGVjdGVkOiBtb2RlICVzXG4iLAorCQloYW5kbGVyW3JlYXNvbl0sIHByb2Nlc3Nvcl9tb2Rlc1twcm9jX21vZGVdKTsKKworCWRpZSgiT29wcyAtIGJhZCBtb2RlIiwgcmVncywgMCk7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlwYW5pYygiYmFkIG1vZGUiKTsKK30KKworc3RhdGljIGludCBiYWRfc3lzY2FsbChpbnQgbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7CisJc2lnaW5mb190IGluZm87CisKKwlpZiAoY3VycmVudC0+cGVyc29uYWxpdHkgIT0gUEVSX0xJTlVYICYmIHRocmVhZC0+ZXhlY19kb21haW4tPmhhbmRsZXIpIHsKKwkJdGhyZWFkLT5leGVjX2RvbWFpbi0+aGFuZGxlcihuLCByZWdzKTsKKwkJcmV0dXJuIHJlZ3MtPkFSTV9yMDsKKwl9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfVVNFUgorCWlmICh1c2VyX2RlYnVnICYgVURCR19TWVNDQUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiWyVkXSAlczogb2Jzb2xldGUgc3lzdGVtIGNhbGwgJTA4eC5cbiIsCisJCQljdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0sIG4pOworCQlkdW1wX2luc3RyKHJlZ3MpOworCX0KKyNlbmRpZgorCisJaW5mby5zaV9zaWdubyA9IFNJR0lMTDsKKwlpbmZvLnNpX2Vycm5vID0gMDsKKwlpbmZvLnNpX2NvZGUgID0gSUxMX0lMTFRSUDsKKwlpbmZvLnNpX2FkZHIgID0gKHZvaWQgX191c2VyICopaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSAtCisJCQkgKHRodW1iX21vZGUocmVncykgPyAyIDogNCk7CisKKwlub3RpZnlfZGllKCJPb3BzIC0gYmFkIHN5c2NhbGwiLCByZWdzLCAmaW5mbywgbiwgMCk7CisKKwlyZXR1cm4gcmVncy0+QVJNX3IwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RvX2NhY2hlX29wKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisKKwlpZiAoZW5kIDwgc3RhcnQgfHwgZmxhZ3MpCisJCXJldHVybjsKKworCXZtYSA9IGZpbmRfdm1hKGN1cnJlbnQtPmFjdGl2ZV9tbSwgc3RhcnQpOworCWlmICh2bWEgJiYgdm1hLT52bV9zdGFydCA8IGVuZCkgeworCQlpZiAoc3RhcnQgPCB2bWEtPnZtX3N0YXJ0KQorCQkJc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OworCQlpZiAoZW5kID4gdm1hLT52bV9lbmQpCisJCQllbmQgPSB2bWEtPnZtX2VuZDsKKworCQlmbHVzaF9jYWNoZV91c2VyX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCk7CisJfQorfQorCisvKgorICogSGFuZGxlIGFsbCB1bnJlY29nbmlzZWQgc3lzdGVtIGNhbGxzLgorICogIDB4OWYwMDAwIC0gMHg5ZmZmZmYgYXJlIHNvbWUgbW9yZSBlc290ZXJpYyBzeXN0ZW0gY2FsbHMKKyAqLworI2RlZmluZSBOUih4KSAoKF9fQVJNX05SXyMjeCkgLSBfX0FSTV9OUl9CQVNFKQorYXNtbGlua2FnZSBpbnQgYXJtX3N5c2NhbGwoaW50IG5vLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwlzaWdpbmZvX3QgaW5mbzsKKworCWlmICgobm8gPj4gMTYpICE9IDB4OWYpCisJCXJldHVybiBiYWRfc3lzY2FsbChubywgcmVncyk7CisKKwlzd2l0Y2ggKG5vICYgMHhmZmZmKSB7CisJY2FzZSAwOiAvKiBicmFuY2ggdGhyb3VnaCAwICovCisJCWluZm8uc2lfc2lnbm8gPSBTSUdTRUdWOworCQlpbmZvLnNpX2Vycm5vID0gMDsKKwkJaW5mby5zaV9jb2RlICA9IFNFR1ZfTUFQRVJSOworCQlpbmZvLnNpX2FkZHIgID0gTlVMTDsKKworCQlub3RpZnlfZGllKCJicmFuY2ggdGhyb3VnaCB6ZXJvIiwgcmVncywgJmluZm8sIDAsIDApOworCQlyZXR1cm4gMDsKKworCWNhc2UgTlIoYnJlYWtwb2ludCk6IC8qIFNXSSBCUkVBS19QT0lOVCAqLworCQlyZWdzLT5BUk1fcGMgLT0gdGh1bWJfbW9kZShyZWdzKSA/IDIgOiA0OworCQlwdHJhY2VfYnJlYWsoY3VycmVudCwgcmVncyk7CisJCXJldHVybiByZWdzLT5BUk1fcjA7CisKKwkvKgorCSAqIEZsdXNoIGEgcmVnaW9uIGZyb20gdmlydHVhbCBhZGRyZXNzICdyMCcgdG8gdmlydHVhbCBhZGRyZXNzICdyMScKKwkgKiBfZXhjbHVzaXZlXy4gIFRoZXJlIGlzIG5vIGFsaWdubWVudCByZXF1aXJlbWVudCBvbiBlaXRoZXIgYWRkcmVzczsKKwkgKiB1c2VyIHNwYWNlIGRvZXMgbm90IG5lZWQgdG8ga25vdyB0aGUgaGFyZHdhcmUgY2FjaGUgbGF5b3V0LgorCSAqCisJICogcjIgY29udGFpbnMgZmxhZ3MuICBJdCBzaG91bGQgQUxXQVlTIGJlIHBhc3NlZCBhcyBaRVJPIHVudGlsIGl0CisJICogaXMgZGVmaW5lZCB0byBiZSBzb21ldGhpbmcgZWxzZS4gIEZvciBub3cgd2UgaWdub3JlIGl0LCBidXQgbWF5CisJICogdGhlIGZpcmVzIG9mIGhlbGwgYnVybiBpbiB5b3VyIGJlbGx5IGlmIHlvdSBicmVhayB0aGlzIHJ1bGUuIDspCisJICoKKwkgKiAoYXQgYSBsYXRlciBkYXRlLCB3ZSBtYXkgd2FudCB0byBhbGxvdyB0aGlzIGNhbGwgdG8gbm90IGZsdXNoCisJICogdmFyaW91cyBhc3BlY3RzIG9mIHRoZSBjYWNoZS4gIFBhc3NpbmcgJzAnIHdpbGwgZ3VhcmFudGVlIHRoYXQKKwkgKiBldmVyeXRoaW5nIG5lY2Vzc2FyeSBnZXRzIGZsdXNoZWQgdG8gbWFpbnRhaW4gY29uc2lzdGVuY3kgaW4KKwkgKiB0aGUgc3BlY2lmaWVkIHJlZ2lvbikuCisJICovCisJY2FzZSBOUihjYWNoZWZsdXNoKToKKwkJZG9fY2FjaGVfb3AocmVncy0+QVJNX3IwLCByZWdzLT5BUk1fcjEsIHJlZ3MtPkFSTV9yMik7CisJCXJldHVybiAwOworCisJY2FzZSBOUih1c3IyNik6CisJCWlmICghKGVsZl9od2NhcCAmIEhXQ0FQXzI2QklUKSkKKwkJCWJyZWFrOworCQlyZWdzLT5BUk1fY3BzciAmPSB+TU9ERTMyX0JJVDsKKwkJcmV0dXJuIHJlZ3MtPkFSTV9yMDsKKworCWNhc2UgTlIodXNyMzIpOgorCQlpZiAoIShlbGZfaHdjYXAgJiBIV0NBUF8yNkJJVCkpCisJCQlicmVhazsKKwkJcmVncy0+QVJNX2Nwc3IgfD0gTU9ERTMyX0JJVDsKKwkJcmV0dXJuIHJlZ3MtPkFSTV9yMDsKKworCWNhc2UgTlIoc2V0X3Rscyk6CisJCXRocmVhZC0+dHBfdmFsdWUgPSByZWdzLT5BUk1fcjA7CisJCS8qCisJCSAqIE91ciB1c2VyIGFjY2Vzc2libGUgVExTIHB0ciBpcyBsb2NhdGVkIGF0IDB4ZmZmZjBmZmMuCisJCSAqIE9uIFNNUCByZWFkIGFjY2VzcyB0byB0aGlzIGFkZHJlc3MgbXVzdCByYWlzZSBhIGZhdWx0CisJCSAqIGFuZCBiZSBlbXVsYXRlZCBmcm9tIHRoZSBkYXRhIGFib3J0IGhhbmRsZXIuCisJCSAqIG0KKwkJICovCisJCSooKHVuc2lnbmVkIGxvbmcgKikweGZmZmYwZmZjKSA9IHRocmVhZC0+dHBfdmFsdWU7CisJCXJldHVybiAwOworCisJZGVmYXVsdDoKKwkJLyogQ2FsbHMgOWYwMHh4Li45ZjA3ZmYgYXJlIGRlZmluZWQgdG8gcmV0dXJuIC1FTk9TWVMKKwkJICAgaWYgbm90IGltcGxlbWVudGVkLCByYXRoZXIgdGhhbiByYWlzaW5nIFNJR0lMTC4gIFRoaXMKKwkJICAgd2F5IHRoZSBjYWxsaW5nIHByb2dyYW0gY2FuIGdyYWNlZnVsbHkgZGV0ZXJtaW5lIHdoZXRoZXIKKwkJICAgYSBmZWF0dXJlIGlzIHN1cHBvcnRlZC4gICovCisJCWlmIChubyA8PSAweDdmZikKKwkJCXJldHVybiAtRU5PU1lTOworCQlicmVhazsKKwl9CisjaWZkZWYgQ09ORklHX0RFQlVHX1VTRVIKKwkvKgorCSAqIGV4cGVyaWVuY2Ugc2hvd3MgdGhhdCB0aGVzZSBzZWVtIHRvIGluZGljYXRlIHRoYXQKKwkgKiBzb21ldGhpbmcgY2F0YXN0cm9waGljIGhhcyBoYXBwZW5lZAorCSAqLworCWlmICh1c2VyX2RlYnVnICYgVURCR19TWVNDQUxMKSB7CisJCXByaW50aygiWyVkXSAlczogYXJtIHN5c2NhbGwgJWRcbiIsCisJCSAgICAgICBjdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0sIG5vKTsKKwkJZHVtcF9pbnN0cihyZWdzKTsKKwkJaWYgKHVzZXJfbW9kZShyZWdzKSkgeworCQkJc2hvd19yZWdzKHJlZ3MpOworCQkJY19iYWNrdHJhY2UocmVncy0+QVJNX2ZwLCBwcm9jZXNzb3JfbW9kZShyZWdzKSk7CisJCX0KKwl9CisjZW5kaWYKKwlpbmZvLnNpX3NpZ25vID0gU0lHSUxMOworCWluZm8uc2lfZXJybm8gPSAwOworCWluZm8uc2lfY29kZSAgPSBJTExfSUxMVFJQOworCWluZm8uc2lfYWRkciAgPSAodm9pZCBfX3VzZXIgKilpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpIC0KKwkJCSAodGh1bWJfbW9kZShyZWdzKSA/IDIgOiA0KTsKKworCW5vdGlmeV9kaWUoIk9vcHMgLSBiYWQgc3lzY2FsbCgyKSIsIHJlZ3MsICZpbmZvLCBubywgMCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19iYWRfeGNoZyh2b2xhdGlsZSB2b2lkICpwdHIsIGludCBzaXplKQoreworCXByaW50aygieGNoZzogYmFkIGRhdGEgc2l6ZTogcGMgMHglcCwgcHRyIDB4JXAsIHNpemUgJWRcbiIsCisJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgcHRyLCBzaXplKTsKKwlCVUcoKTsKK30KK0VYUE9SVF9TWU1CT0woX19iYWRfeGNoZyk7CisKKy8qCisgKiBBIGRhdGEgYWJvcnQgdHJhcCB3YXMgdGFrZW4sIGJ1dCB3ZSBkaWQgbm90IGhhbmRsZSB0aGUgaW5zdHJ1Y3Rpb24uCisgKiBUcnkgdG8gYWJvcnQgdGhlIHVzZXIgcHJvZ3JhbSwgb3IgcGFuaWMgaWYgaXQgd2FzIHRoZSBrZXJuZWwuCisgKi8KK2FzbWxpbmthZ2Ugdm9pZAorYmFkZGF0YWFib3J0KGludCBjb2RlLCB1bnNpZ25lZCBsb25nIGluc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOworCXNpZ2luZm9fdCBpbmZvOworCisjaWZkZWYgQ09ORklHX0RFQlVHX1VTRVIKKwlpZiAodXNlcl9kZWJ1ZyAmIFVEQkdfQkFEQUJPUlQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJbJWRdICVzOiBiYWQgZGF0YSBhYm9ydDogY29kZSAlZCBpbnN0ciAweCUwOGx4XG4iLAorCQkJY3VycmVudC0+cGlkLCBjdXJyZW50LT5jb21tLCBjb2RlLCBpbnN0cik7CisJCWR1bXBfaW5zdHIocmVncyk7CisJCXNob3dfcHRlKGN1cnJlbnQtPm1tLCBhZGRyKTsKKwl9CisjZW5kaWYKKworCWluZm8uc2lfc2lnbm8gPSBTSUdJTEw7CisJaW5mby5zaV9lcnJubyA9IDA7CisJaW5mby5zaV9jb2RlICA9IElMTF9JTExPUEM7CisJaW5mby5zaV9hZGRyICA9ICh2b2lkIF9fdXNlciAqKWFkZHI7CisKKwlub3RpZnlfZGllKCJ1bmtub3duIGRhdGEgYWJvcnQgY29kZSIsIHJlZ3MsICZpbmZvLCBpbnN0ciwgMCk7Cit9CisKK3ZvbGF0aWxlIHZvaWQgX19idWcoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHZvaWQgKmRhdGEpCit7CisJcHJpbnRrKEtFUk5fQ1JJVCJrZXJuZWwgQlVHIGF0ICVzOiVkISIsIGZpbGUsIGxpbmUpOworCWlmIChkYXRhKQorCQlwcmludGsoIiAtIGV4dHJhIGRhdGEgPSAlcCIsIGRhdGEpOworCXByaW50aygiXG4iKTsKKwkqKGludCAqKTAgPSAwOworfQorRVhQT1JUX1NZTUJPTChfX2J1Zyk7CisKK3ZvaWQgX19yZWFkd3JpdGVfYnVnKGNvbnN0IGNoYXIgKmZuKQoreworCXByaW50aygiJXMgY2FsbGVkLCBidXQgbm90IGltcGxlbWVudGVkXG4iLCBmbik7CisJQlVHKCk7Cit9CitFWFBPUlRfU1lNQk9MKF9fcmVhZHdyaXRlX2J1Zyk7CisKK3ZvaWQgX19wdGVfZXJyb3IoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXByaW50aygiJXM6JWQ6IGJhZCBwdGUgJTA4bHguXG4iLCBmaWxlLCBsaW5lLCB2YWwpOworfQorCit2b2lkIF9fcG1kX2Vycm9yKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlwcmludGsoIiVzOiVkOiBiYWQgcG1kICUwOGx4LlxuIiwgZmlsZSwgbGluZSwgdmFsKTsKK30KKwordm9pZCBfX3BnZF9lcnJvcihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJcHJpbnRrKCIlczolZDogYmFkIHBnZCAlMDhseC5cbiIsIGZpbGUsIGxpbmUsIHZhbCk7Cit9CisKK2FzbWxpbmthZ2Ugdm9pZCBfX2RpdjAodm9pZCkKK3sKKwlwcmludGsoIkRpdmlzaW9uIGJ5IHplcm8gaW4ga2VybmVsLlxuIik7CisJZHVtcF9zdGFjaygpOworfQorRVhQT1JUX1NZTUJPTChfX2RpdjApOworCit2b2lkIGFib3J0KHZvaWQpCit7CisJQlVHKCk7CisKKwkvKiBpZiB0aGF0IGRvZXNuJ3Qga2lsbCB1cywgaGFsdCAqLworCXBhbmljKCJPb3BzIGZhaWxlZCB0byBraWxsIHRocmVhZCIpOworfQorRVhQT1JUX1NZTUJPTChhYm9ydCk7CisKK3ZvaWQgX19pbml0IHRyYXBfaW5pdCh2b2lkKQoreworCWV4dGVybiB2b2lkIF9fdHJhcF9pbml0KHZvaWQpOworCisJX190cmFwX2luaXQoKTsKKwlmbHVzaF9pY2FjaGVfcmFuZ2UoMHhmZmZmMDAwMCwgMHhmZmZmMDAwMCArIFBBR0VfU0laRSk7CisJbW9kaWZ5X2RvbWFpbihET01BSU5fVVNFUiwgRE9NQUlOX0NMSUVOVCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOWM2YTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMCwwICsxLDE2NiBAQAorLyogbGQgc2NyaXB0IHRvIG1ha2UgQVJNIExpbnV4IGtlcm5lbAorICogdGFrZW4gZnJvbSB0aGUgaTM4NiB2ZXJzaW9uIGJ5IFJ1c3NlbGwgS2luZworICogV3JpdHRlbiBieSBNYXJ0aW4gTWFyZXMgPG1qQGF0cmV5Lmthcmxpbi5tZmYuY3VuaS5jej4KKyAqLworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKwkKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKHN0ZXh0KQorI2lmbmRlZiBfX0FSTUVCX18KK2ppZmZpZXMgPSBqaWZmaWVzXzY0OworI2Vsc2UKK2ppZmZpZXMgPSBqaWZmaWVzXzY0ICsgNDsKKyNlbmRpZgorU0VDVElPTlMKK3sKKwkuID0gVEVYVEFERFI7CisJLmluaXQgOiB7CQkJLyogSW5pdCBjb2RlIGFuZCBkYXRhCQkqLworCQlfc3RleHQgPSAuOworCQkJX3Npbml0dGV4dCA9IC47CisJCQkqKC5pbml0LnRleHQpCisJCQlfZWluaXR0ZXh0ID0gLjsKKwkJX19wcm9jX2luZm9fYmVnaW4gPSAuOworCQkJKigucHJvYy5pbmZvKQorCQlfX3Byb2NfaW5mb19lbmQgPSAuOworCQlfX2FyY2hfaW5mb19iZWdpbiA9IC47CisJCQkqKC5hcmNoLmluZm8pCisJCV9fYXJjaF9pbmZvX2VuZCA9IC47CisJCV9fdGFndGFibGVfYmVnaW4gPSAuOworCQkJKigudGFnbGlzdCkKKwkJX190YWd0YWJsZV9lbmQgPSAuOworCQkuID0gQUxJR04oMTYpOworCQlfX3NldHVwX3N0YXJ0ID0gLjsKKwkJCSooLmluaXQuc2V0dXApCisJCV9fc2V0dXBfZW5kID0gLjsKKwkJX19lYXJseV9iZWdpbiA9IC47CisJCQkqKF9fZWFybHlfcGFyYW0pCisJCV9fZWFybHlfZW5kID0gLjsKKwkJX19pbml0Y2FsbF9zdGFydCA9IC47CisJCQkqKC5pbml0Y2FsbDEuaW5pdCkKKwkJCSooLmluaXRjYWxsMi5pbml0KQorCQkJKiguaW5pdGNhbGwzLmluaXQpCisJCQkqKC5pbml0Y2FsbDQuaW5pdCkKKwkJCSooLmluaXRjYWxsNS5pbml0KQorCQkJKiguaW5pdGNhbGw2LmluaXQpCisJCQkqKC5pbml0Y2FsbDcuaW5pdCkKKwkJX19pbml0Y2FsbF9lbmQgPSAuOworCQlfX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47CisJCQkqKC5jb25faW5pdGNhbGwuaW5pdCkKKwkJX19jb25faW5pdGNhbGxfZW5kID0gLjsKKwkJX19zZWN1cml0eV9pbml0Y2FsbF9zdGFydCA9IC47CisJCQkqKC5zZWN1cml0eV9pbml0Y2FsbC5pbml0KQorCQlfX3NlY3VyaXR5X2luaXRjYWxsX2VuZCA9IC47CisJCS4gPSBBTElHTigzMik7CisJCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKKwkJCXVzci9idWlsdC1pbi5vKC5pbml0LnJhbWZzKQorCQlfX2luaXRyYW1mc19lbmQgPSAuOworCQkuID0gQUxJR04oNjQpOworCQlfX3Blcl9jcHVfc3RhcnQgPSAuOworCQkJKiguZGF0YS5wZXJjcHUpCisJCV9fcGVyX2NwdV9lbmQgPSAuOworI2lmbmRlZiBDT05GSUdfWElQX0tFUk5FTAorCQlfX2luaXRfYmVnaW4gPSBfc3RleHQ7CisJCSooLmluaXQuZGF0YSkKKwkJLiA9IEFMSUdOKDQwOTYpOworCQlfX2luaXRfZW5kID0gLjsKKyNlbmRpZgorCX0KKworCS9ESVNDQVJELyA6IHsJCQkvKiBFeGl0IGNvZGUgYW5kIGRhdGEJCSovCisJCSooLmV4aXQudGV4dCkKKwkJKiguZXhpdC5kYXRhKQorCQkqKC5leGl0Y2FsbC5leGl0KQorCX0KKworCS50ZXh0IDogewkJCS8qIFJlYWwgdGV4dCBzZWdtZW50CQkqLworCQlfdGV4dCA9IC47CQkvKiBUZXh0IGFuZCByZWFkLW9ubHkgZGF0YQkqLworCQkJKigudGV4dCkKKwkJCVNDSEVEX1RFWFQKKwkJCUxPQ0tfVEVYVAorCQkJKiguZml4dXApCisJCQkqKC5nbnUud2FybmluZykKKwkJCSooLnJvZGF0YSkKKwkJCSooLnJvZGF0YS4qKQorCQkJKiguZ2x1ZV83KQorCQkJKiguZ2x1ZV83dCkKKwkJKiguZ290KQkJCS8qIEdsb2JhbCBvZmZzZXQgdGFibGUJCSovCisJfQorCisJLiA9IEFMSUdOKDE2KTsKKwlfX2V4X3RhYmxlIDogewkJCS8qIEV4Y2VwdGlvbiB0YWJsZQkJKi8KKwkJX19zdGFydF9fX2V4X3RhYmxlID0gLjsKKwkJCSooX19leF90YWJsZSkKKwkJX19zdG9wX19fZXhfdGFibGUgPSAuOworCX0KKworCVJPREFUQQorCisJX2V0ZXh0ID0gLjsJCQkvKiBFbmQgb2YgdGV4dCBhbmQgcm9kYXRhIHNlY3Rpb24gKi8KKworI2lmZGVmIENPTkZJR19YSVBfS0VSTkVMCisJX19kYXRhX2xvYyA9IEFMSUdOKDQpOwkJLyogbG9jYXRpb24gaW4gYmluYXJ5ICovCisJLiA9IERBVEFBRERSOworI2Vsc2UKKwkuID0gQUxJR04oODE5Mik7CisJX19kYXRhX2xvYyA9IC47CisjZW5kaWYKKworCS5kYXRhIDogQVQoX19kYXRhX2xvYykgeworCQlfX2RhdGFfc3RhcnQgPSAuOwkvKiBhZGRyZXNzIGluIG1lbW9yeSAqLworCisJCS8qCisJCSAqIGZpcnN0LCB0aGUgaW5pdCB0YXNrIHVuaW9uLCBhbGlnbmVkCisJCSAqIHRvIGFuIDgxOTIgYnl0ZSBib3VuZGFyeS4KKwkJICovCisJCSooLmluaXQudGFzaykKKworI2lmZGVmIENPTkZJR19YSVBfS0VSTkVMCisJCS4gPSBBTElHTig0MDk2KTsKKwkJX19pbml0X2JlZ2luID0gLjsKKwkJKiguaW5pdC5kYXRhKQorCQkuID0gQUxJR04oNDA5Nik7CisJCV9faW5pdF9lbmQgPSAuOworI2VuZGlmCisKKwkJLiA9IEFMSUdOKDQwOTYpOworCQlfX25vc2F2ZV9iZWdpbiA9IC47CisJCSooLmRhdGEubm9zYXZlKQorCQkuID0gQUxJR04oNDA5Nik7CisJCV9fbm9zYXZlX2VuZCA9IC47CisKKwkJLyoKKwkJICogdGhlbiB0aGUgY2FjaGVsaW5lIGFsaWduZWQgZGF0YQorCQkgKi8KKwkJLiA9IEFMSUdOKDMyKTsKKwkJKiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkKKworCQkvKgorCQkgKiBhbmQgdGhlIHVzdWFsIGRhdGEgc2VjdGlvbgorCQkgKi8KKwkJKiguZGF0YSkKKwkJQ09OU1RSVUNUT1JTCisKKwkJX2VkYXRhID0gLjsKKwl9CisKKwkuYnNzIDogeworCQlfX2Jzc19zdGFydCA9IC47CS8qIEJTUwkJCQkqLworCQkqKC5ic3MpCisJCSooQ09NTU9OKQorCQlfZW5kID0gLjsKKwl9CisJCQkJCS8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4JKi8KKwkuc3RhYiAwIDogeyAqKC5zdGFiKSB9CisJLnN0YWJzdHIgMCA6IHsgKiguc3RhYnN0cikgfQorCS5zdGFiLmV4Y2wgMCA6IHsgKiguc3RhYi5leGNsKSB9CisJLnN0YWIuZXhjbHN0ciAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKwkuc3RhYi5pbmRleCAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisJLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorCS5jb21tZW50IDAgOiB7ICooLmNvbW1lbnQpIH0KK30KKworLyogdGhvc2UgbXVzdCBuZXZlciBiZSBlbXB0eSAqLworQVNTRVJUKChfX3Byb2NfaW5mb19lbmQgLSBfX3Byb2NfaW5mb19iZWdpbiksICJtaXNzaW5nIENQVSBzdXBwb3J0IikKK0FTU0VSVCgoX19hcmNoX2luZm9fZW5kIC0gX19hcmNoX2luZm9fYmVnaW4pLCAibm8gbWFjaGluZSByZWNvcmQgZGVmaW5lZCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvTWFrZWZpbGUgYi9hcmNoL2FybS9saWIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBlNjU4MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2xpYi9NYWtlZmlsZQpAQCAtMCwwICsxLDI5IEBACisjCisjIGxpbnV4L2FyY2gvYXJtL2xpYi9NYWtlZmlsZQorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMCBSdXNzZWxsIEtpbmcKKyMKKworbGliLXkJCTo9IGJhY2t0cmFjZS5vIGNoYW5nZWJpdC5vIGNzdW1pcHY2Lm8gY3N1bXBhcnRpYWwubyAgIFwKKwkJICAgY3N1bXBhcnRpYWxjb3B5Lm8gY3N1bXBhcnRpYWxjb3B5dXNlci5vIGNsZWFyYml0Lm8gXAorCQkgICBjb3B5X3BhZ2UubyBkZWxheS5vIGZpbmRiaXQubyBtZW1jaHIubyBtZW1jcHkubyAgICBcCisJCSAgIG1lbXNldC5vIG1lbXplcm8ubyBzZXRiaXQubyBzdHJuY3B5X2Zyb21fdXNlci5vICAgIFwKKwkJICAgc3Rybmxlbl91c2VyLm8gc3RyY2hyLm8gc3RycmNoci5vIHRlc3RjaGFuZ2ViaXQubyAgXAorCQkgICB0ZXN0Y2xlYXJiaXQubyB0ZXN0c2V0Yml0Lm8gdWFjY2Vzcy5vIGdldHVzZXIubyAgICBcCisJCSAgIHB1dHVzZXIubyBhc2hsZGkzLm8gYXNocmRpMy5vIGxzaHJkaTMubyBtdWxkaTMubyAgIFwKKwkJICAgdWNtcGRpMi5vIHVkaXZkaTMubyBsaWIxZnVuY3MubyBkaXY2NC5vCSAgICAgIFwKKwkJICAgaW8tcmVhZHNiLm8gaW8td3JpdGVzYi5vIGlvLXJlYWRzbC5vIGlvLXdyaXRlc2wubworCitpZmVxICgkKENPTkZJR19DUFVfMzJ2MykseSkKKyAgbGliLXkJKz0gaW8tcmVhZHN3LWFybXYzLm8gaW8td3JpdGVzdy1hcm12My5vCitlbHNlCisgIGxpYi15CSs9IGlvLXJlYWRzdy1hcm12NC5vIGlvLXdyaXRlc3ctYXJtdjQubworZW5kaWYKKworbGliLSQoQ09ORklHX0FSQ0hfUlBDKQkJKz0gZWNhcmQubyBpby1hY29ybi5vIGZsb3BweWRtYS5vCitsaWItJChDT05GSUdfQVJDSF9DTFBTNzUwMCkJKz0gaW8tYWNvcm4ubworbGliLSQoQ09ORklHX0FSQ0hfTDcyMDApCSs9IGlvLWFjb3JuLm8KK2xpYi0kKENPTkZJR19BUkNIX1NIQVJLKQkrPSBpby1zaGFyay5vCisKKyQob2JqKS9jc3VtcGFydGlhbGNvcHkubzoJJChvYmopL2NzdW1wYXJ0aWFsY29weWdlbmVyaWMuUworJChvYmopL2NzdW1wYXJ0aWFsY29weXVzZXIubzoJJChvYmopL2NzdW1wYXJ0aWFsY29weWdlbmVyaWMuUwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2FzaGxkaTMuYyBiL2FyY2gvYXJtL2xpYi9hc2hsZGkzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMwZjVhOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2xpYi9hc2hsZGkzLmMKQEAgLTAsMCArMSw2MSBAQAorLyogTW9yZSBzdWJyb3V0aW5lcyBuZWVkZWQgYnkgR0NDIG91dHB1dCBjb2RlIG9uIHNvbWUgbWFjaGluZXMuICAqLworLyogQ29tcGlsZSB0aGlzIG9uZSB3aXRoIGdjYy4gICovCisvKiBDb3B5cmlnaHQgKEMpIDE5ODksIDkyLTk4LCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgQ0MuCisKK0dOVSBDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dOVSBDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdOVSBDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCitCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIHlvdSBsaW5rIHRoaXMgbGlicmFyeSB3aXRoIG90aGVyIGZpbGVzLAorICAgc29tZSBvZiB3aGljaCBhcmUgY29tcGlsZWQgd2l0aCBHQ0MsIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwKKyAgIHRoaXMgbGlicmFyeSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlCisgICB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAgIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIgaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkKKyAgIHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKi8KKy8qIHN1cHBvcnQgZnVuY3Rpb25zIHJlcXVpcmVkIGJ5IHRoZSBrZXJuZWwuIGJhc2VkIG9uIGNvZGUgZnJvbSBnY2MtMi45NS4zICovCisvKiBJIE1vbHRvbgkyOS8wNy8wMSAqLworCisjaW5jbHVkZSAiZ2NjbGliLmgiCisKK0RJdHlwZQorX19hc2hsZGkzIChESXR5cGUgdSwgd29yZF90eXBlIGIpCit7CisgIERJdW5pb24gdzsKKyAgd29yZF90eXBlIGJtOworICBESXVuaW9uIHV1OworCisgIGlmIChiID09IDApCisgICAgcmV0dXJuIHU7CisKKyAgdXUubGwgPSB1OworCisgIGJtID0gKHNpemVvZiAoU0l0eXBlKSAqIEJJVFNfUEVSX1VOSVQpIC0gYjsKKyAgaWYgKGJtIDw9IDApCisgICAgeworICAgICAgdy5zLmxvdyA9IDA7CisgICAgICB3LnMuaGlnaCA9IChVU0l0eXBlKXV1LnMubG93IDw8IC1ibTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBVU0l0eXBlIGNhcnJpZXMgPSAoVVNJdHlwZSl1dS5zLmxvdyA+PiBibTsKKyAgICAgIHcucy5sb3cgPSAoVVNJdHlwZSl1dS5zLmxvdyA8PCBiOworICAgICAgdy5zLmhpZ2ggPSAoKFVTSXR5cGUpdXUucy5oaWdoIDw8IGIpIHwgY2FycmllczsKKyAgICB9CisKKyAgcmV0dXJuIHcubGw7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9hc2hyZGkzLmMgYi9hcmNoL2FybS9saWIvYXNocmRpMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNjI1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9saWIvYXNocmRpMy5jCkBAIC0wLDAgKzEsNjEgQEAKKy8qIE1vcmUgc3Vicm91dGluZXMgbmVlZGVkIGJ5IEdDQyBvdXRwdXQgY29kZSBvbiBzb21lIG1hY2hpbmVzLiAgKi8KKy8qIENvbXBpbGUgdGhpcyBvbmUgd2l0aCBnY2MuICAqLworLyogQ29weXJpZ2h0IChDKSAxOTg5LCA5Mi05OCwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIENDLgorCitHTlUgQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHTlUgQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHTlUgQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiB5b3UgbGluayB0aGlzIGxpYnJhcnkgd2l0aCBvdGhlciBmaWxlcywKKyAgIHNvbWUgb2Ygd2hpY2ggYXJlIGNvbXBpbGVkIHdpdGggR0NDLCB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsCisgICB0aGlzIGxpYnJhcnkgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZQorICAgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5CisgICB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICovCisvKiBzdXBwb3J0IGZ1bmN0aW9ucyByZXF1aXJlZCBieSB0aGUga2VybmVsLiBiYXNlZCBvbiBjb2RlIGZyb20gZ2NjLTIuOTUuMyAqLworLyogSSBNb2x0b24gICAgIDI5LzA3LzAxICovCisKKyNpbmNsdWRlICJnY2NsaWIuaCIKKworREl0eXBlCitfX2FzaHJkaTMgKERJdHlwZSB1LCB3b3JkX3R5cGUgYikKK3sKKyAgREl1bmlvbiB3OworICB3b3JkX3R5cGUgYm07CisgIERJdW5pb24gdXU7CisKKyAgaWYgKGIgPT0gMCkKKyAgICByZXR1cm4gdTsKKworICB1dS5sbCA9IHU7CisKKyAgYm0gPSAoc2l6ZW9mIChTSXR5cGUpICogQklUU19QRVJfVU5JVCkgLSBiOworICBpZiAoYm0gPD0gMCkKKyAgICB7CisgICAgICAvKiB3LnMuaGlnaCA9IDEuLjEgb3IgMC4uMCAqLworICAgICAgdy5zLmhpZ2ggPSB1dS5zLmhpZ2ggPj4gKHNpemVvZiAoU0l0eXBlKSAqIEJJVFNfUEVSX1VOSVQgLSAxKTsKKyAgICAgIHcucy5sb3cgPSB1dS5zLmhpZ2ggPj4gLWJtOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIFVTSXR5cGUgY2FycmllcyA9IChVU0l0eXBlKXV1LnMuaGlnaCA8PCBibTsKKyAgICAgIHcucy5oaWdoID0gdXUucy5oaWdoID4+IGI7CisgICAgICB3LnMubG93ID0gKChVU0l0eXBlKXV1LnMubG93ID4+IGIpIHwgY2FycmllczsKKyAgICB9CisKKyAgcmV0dXJuIHcubGw7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvYmFja3RyYWNlLlMgYi9hcmNoL2FybS9saWIvYmFja3RyYWNlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhhMjFjMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2xpYi9iYWNrdHJhY2UuUwpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9saWIvYmFja3RyYWNlLlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogMjcvMDMvMDMgSWFuIE1vbHRvbiBDbGVhbiB1cCBDT05GSUdfQ1BVCisgKgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKwkJLnRleHQKKworQCBmcCBpcyAwIG9yIHN0YWNrIGZyYW1lCisKKyNkZWZpbmUgZnJhbWUJcjQKKyNkZWZpbmUgbmV4dAlyNQorI2RlZmluZSBzYXZlCXI2CisjZGVmaW5lIG1hc2sJcjcKKyNkZWZpbmUgb2Zmc2V0CXI4CisKK0VOVFJZKF9fYmFja3RyYWNlKQorCQltb3YJcjEsICMweDEwCisJCW1vdglyMCwgZnAKKworRU5UUlkoY19iYWNrdHJhY2UpCisKKyNpZm5kZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKKwkJbW92CXBjLCBscgorI2Vsc2UKKworCQlzdG1mZAlzcCEsIHtyNCAtIHI4LCBscn0JQCBTYXZlIGFuIGV4dHJhIHJlZ2lzdGVyIHNvIHdlIGhhdmUgYSBsb2NhdGlvbi4uLgorCQl0c3QJcjEsICMweDEwCQlAIDI2IG9yIDMyLWJpdD8KKwkJbW92ZXEJbWFzaywgIzB4ZmMwMDAwMDMKKwkJbW92bmUJbWFzaywgIzAKKwkJdHN0CW1hc2ssIHIwCisJCW1vdm5lCXIwLCAjMAorCQltb3ZzCWZyYW1lLCByMAorMToJCW1vdmVxCXIwLCAjLTIKKwkJTE9BRFJFR1MoZXFmZCwgc3AhLCB7cjQgLSByOCwgcGN9KQorCisyOgkJc3RtZmQJc3AhLCB7cGN9CQlAIGNhbGN1bGF0ZSBvZmZzZXQgb2YgUEMgaW4gU1RNSUEgaW5zdHJ1Y3Rpb24KKwkJbGRyCXIwLCBbc3BdLCAjNAorCQlhZHIJcjEsIDJiIC0gNAorCQlzdWIJb2Zmc2V0LCByMCwgcjEKKworMzoJCXRzdAlmcmFtZSwgbWFzawkJQCBDaGVjayBmb3IgYWRkcmVzcyBleGNlcHRpb25zLi4uCisJCWJuZQkxYgorCisxMDAxOgkJbGRyCW5leHQsIFtmcmFtZSwgIy0xMl0JQCBnZXQgZnAKKzEwMDI6CQlsZHIJcjIsIFtmcmFtZSwgIy00XQlAIGdldCBscgorMTAwMzoJCWxkcglyMywgW2ZyYW1lLCAjMF0JCUAgZ2V0IHBjCisJCXN1YglzYXZlLCByMywgb2Zmc2V0CUAgQ29ycmVjdCBQQyBmb3IgcHJlZmV0Y2hpbmcKKwkJYmljCXNhdmUsIHNhdmUsIG1hc2sKKzEwMDQ6CQlsZHIJcjEsIFtzYXZlLCAjMF0JCUAgZ2V0IGluc3RydWN0aW9uIGF0IGZ1bmN0aW9uCisJCW1vdglyMSwgcjEsIGxzciAjMTAKKwkJbGRyCXIzLCAuTGRzaSs0CisJCXRlcQlyMSwgcjMKKwkJc3ViZXEJc2F2ZSwgc2F2ZSwgIzQKKwkJbW92CXIwLCBzYXZlCisJCWJpYwlyMSwgcjIsIG1hc2sKKwkJYmwJZHVtcF9iYWNrdHJhY2VfZW50cnkKKworCQlsZHIJcjAsIFtmcmFtZSwgIy04XQlAIGdldCBzcAorCQlzdWIJcjAsIHIwLCAjNAorMTAwNToJCWxkcglyMSwgW3NhdmUsICM0XQkJQCBnZXQgaW5zdHJ1Y3Rpb24gYXQgZnVuY3Rpb24rNAorCQltb3YJcjMsIHIxLCBsc3IgIzEwCisJCWxkcglyMiwgLkxkc2krNAorCQl0ZXEJcjMsIHIyCQkJQCBDaGVjayBmb3Igc3RtaWEgc3AhLCB7YXJnc30KKwkJYWRkZXEJc2F2ZSwgc2F2ZSwgIzQJCUAgbmV4dCBpbnN0cnVjdGlvbgorCQlibGVxCS5MZHVtcHN0bQorCisJCXN1YglyMCwgZnJhbWUsICMxNgorMTAwNjoJCWxkcglyMSwgW3NhdmUsICM0XQkJQCBHZXQgJ3N0bWlhIHNwISwge3JsaXN0LCBmcCwgaXAsIGxyLCBwY30nIGluc3RydWN0aW9uCisJCW1vdglyMywgcjEsIGxzciAjMTAKKwkJbGRyCXIyLCAuTGRzaQorCQl0ZXEJcjMsIHIyCisJCWJsZXEJLkxkdW1wc3RtCisKKwkJLyoKKwkJICogQSB6ZXJvIG5leHQgZnJhbWVwb2ludGVyIG1lYW5zIHdlJ3JlIGRvbmUuCisJCSAqLworCQl0ZXEJbmV4dCwgIzAKKwkJTE9BRFJFR1MoZXFmZCwgc3AhLCB7cjQgLSByOCwgcGN9KQorCisJCS8qCisJCSAqIFRoZSBuZXh0IGZyYW1lcG9pbnRlciBtdXN0IGJlIGFib3ZlIHRoZQorCQkgKiBjdXJyZW50IGZyYW1lcG9pbnRlci4KKwkJICovCisJCWNtcAluZXh0LCBmcmFtZQorCQltb3YJZnJhbWUsIG5leHQKKwkJYmhpCTNiCisJCWIJMTAwN2YKKworLyoKKyAqIEZpeHVwIGZvciBMRE1EQgorICovCisJCS5zZWN0aW9uIC5maXh1cCwiYXgiCisJCS5hbGlnbgkwCisxMDA3OgkJbGRyCXIwLCA9LkxiYWQKKwkJbW92CXIxLCBmcmFtZQorCQlibAlwcmludGsKKwkJTE9BRFJFR1MoZmQsIHNwISwge3I0IC0gcjgsIHBjfSkKKwkJLmx0b3JnCisJCS5wcmV2aW91cworCQkKKwkJLnNlY3Rpb24gX19leF90YWJsZSwiYSIKKwkJLmFsaWduCTMKKwkJLmxvbmcJMTAwMWIsIDEwMDdiCisJCS5sb25nCTEwMDJiLCAxMDA3YgorCQkubG9uZwkxMDAzYiwgMTAwN2IKKwkJLmxvbmcJMTAwNGIsIDEwMDdiCisJCS5sb25nCTEwMDViLCAxMDA3YgorCQkubG9uZwkxMDA2YiwgMTAwN2IKKwkJLnByZXZpb3VzCisKKyNkZWZpbmUgaW5zdHIgcjQKKyNkZWZpbmUgcmVnICAgcjUKKyNkZWZpbmUgc3RhY2sgcjYKKworLkxkdW1wc3RtOglzdG1mZAlzcCEsIHtpbnN0ciwgcmVnLCBzdGFjaywgcjcsIGxyfQorCQltb3YJc3RhY2ssIHIwCisJCW1vdglpbnN0ciwgcjEKKwkJbW92CXJlZywgIzkKKwkJbW92CXI3LCAjMAorMToJCW1vdglyMywgIzEKKwkJdHN0CWluc3RyLCByMywgbHNsIHJlZworCQliZXEJMmYKKwkJYWRkCXI3LCByNywgIzEKKwkJdGVxCXI3LCAjNAorCQltb3ZlcQlyNywgIzAKKwkJbW92ZXEJcjMsICMnXG4nCisJCW1vdm5lCXIzLCAjJyAnCisJCWxkcglyMiwgW3N0YWNrXSwgIy00CisJCW1vdglyMSwgcmVnCisJCWFkcglyMCwgLkxmcAorCQlibAlwcmludGsKKzI6CQlzdWJzCXJlZywgcmVnLCAjMQorCQlicGwJMWIKKwkJdGVxCXI3LCAjMAorCQlhZHJuZQlyMCwgLkxjcgorCQlibG5lCXByaW50aworCQltb3YJcjAsIHN0YWNrCisJCUxPQURSRUdTKGZkLCBzcCEsIHtpbnN0ciwgcmVnLCBzdGFjaywgcjcsIHBjfSkKKworLkxmcDoJCS5hc2NpegkiIHIlZCA9ICUwOFglYyIKKy5MY3I6CQkuYXNjaXoJIlxuIgorLkxiYWQ6CQkuYXNjaXoJIkJhY2t0cmFjZSBhYm9ydGVkIGR1ZSB0byBiYWQgZnJhbWUgcG9pbnRlciA8JXA+XG4iCisJCS5hbGlnbgorLkxkc2k6CQkud29yZAkweDAwZTkyZGQ4ID4+IDIKKwkJLndvcmQJMHgwMGU5MmQwMCA+PiAyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2NoYW5nZWJpdC5TIGIvYXJjaC9hcm0vbGliL2NoYW5nZWJpdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZjQ1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9saWIvY2hhbmdlYml0LlMKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9saWIvY2hhbmdlYml0LlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTYgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisgICAgICAgICAgICAgICAgLnRleHQKKworLyogUHVycG9zZSAgOiBGdW5jdGlvbiB0byBjaGFuZ2UgYSBiaXQKKyAqIFByb3RvdHlwZTogaW50IGNoYW5nZV9iaXQoaW50IGJpdCwgdm9pZCAqYWRkcikKKyAqLworRU5UUlkoX2NoYW5nZV9iaXRfYmUpCisJCWVvcglyMCwgcjAsICMweDE4CQlAIGJpZyBlbmRpYW4gYnl0ZSBvcmRlcmluZworRU5UUlkoX2NoYW5nZV9iaXRfbGUpCisJCWFuZAlyMiwgcjAsICM3CisJCW1vdglyMywgIzEKKwkJbW92CXIzLCByMywgbHNsIHIyCisJCXNhdmVfYW5kX2Rpc2FibGVfaXJxcyBpcCwgcjIKKwkJbGRyYglyMiwgW3IxLCByMCwgbHNyICMzXQorCQllb3IJcjIsIHIyLCByMworCQlzdHJiCXIyLCBbcjEsIHIwLCBsc3IgIzNdCisJCXJlc3RvcmVfaXJxcyBpcAorCQlSRVRJTlNUUihtb3YscGMsbHIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvY2xlYXJiaXQuUyBiL2FyY2gvYXJtL2xpYi9jbGVhcmJpdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2OWEyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9saWIvY2xlYXJiaXQuUwpAQCAtMCwwICsxLDMxIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2xpYi9jbGVhcmJpdC5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NS0xOTk2IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorICAgICAgICAgICAgICAgIC50ZXh0CisKKy8qCisgKiBQdXJwb3NlICA6IEZ1bmN0aW9uIHRvIGNsZWFyIGEgYml0CisgKiBQcm90b3R5cGU6IGludCBjbGVhcl9iaXQoaW50IGJpdCwgdm9pZCAqYWRkcikKKyAqLworRU5UUlkoX2NsZWFyX2JpdF9iZSkKKwkJZW9yCXIwLCByMCwgIzB4MTgJCUAgYmlnIGVuZGlhbiBieXRlIG9yZGVyaW5nCitFTlRSWShfY2xlYXJfYml0X2xlKQorCQlhbmQJcjIsIHIwLCAjNworCQltb3YJcjMsICMxCisJCW1vdglyMywgcjMsIGxzbCByMgorCQlzYXZlX2FuZF9kaXNhYmxlX2lycXMgaXAsIHIyCisJCWxkcmIJcjIsIFtyMSwgcjAsIGxzciAjM10KKwkJYmljCXIyLCByMiwgcjMKKwkJc3RyYglyMiwgW3IxLCByMCwgbHNyICMzXQorCQlyZXN0b3JlX2lycXMgaXAKKwkJUkVUSU5TVFIobW92LHBjLGxyKQorCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9jb3B5X3BhZ2UuUyBiL2FyY2gvYXJtL2xpYi9jb3B5X3BhZ2UuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzM4YWJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbGliL2NvcHlfcGFnZS5TCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbGliL2NvcHlwYWdlLlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTkgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQVNNIG9wdGltaXNlZCBzdHJpbmcgZnVuY3Rpb25zCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS9jb25zdGFudHMuaD4KKworI2RlZmluZSBDT1BZX0NPVU5UIChQQUdFX1NaLzY0IFBMRCggLTEgKSkKKworCQkudGV4dAorCQkuYWxpZ24JNQorLyoKKyAqIFN0cm9uZ0FSTSBvcHRpbWlzZWQgY29weV9wYWdlIHJvdXRpbmUKKyAqIG5vdyAxLjc4Ynl0ZXMvY3ljbGUsIHdhcyAxLjYwIGJ5dGVzL2N5Y2xlICg1ME1IeiBidXMgLT4gODlNQi9zKQorICogTm90ZSB0aGF0IHdlIHByb2JhYmx5IGFjaGlldmUgY2xvc2VyIHRvIHRoZSAxMDBNQi9zIHRhcmdldCB3aXRoCisgKiB0aGUgY29yZSBjbG9jayBzd2l0Y2hpbmcuCisgKi8KK0VOVFJZKGNvcHlfcGFnZSkKKwkJc3RtZmQJc3AhLCB7cjQsIGxyfQkJCUAJMgorCVBMRCgJcGxkCVtyMSwgIzBdCQkpCisJUExEKAlwbGQJW3IxLCAjMzJdCQkpCisJCW1vdglyMiwgI0NPUFlfQ09VTlQJCQlACTEKKwkJbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQrMQorMToJUExEKAlwbGQJW3IxLCAjNjRdCQkpCisJUExEKAlwbGQJW3IxLCAjOTZdCQkpCisyOgkJc3RtaWEJcjAhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQKKwkJbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQrMQorCQlzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAJNAorCQlsZG1pYQlyMSEsIHtyMywgcjQsIGlwLCBscn0JCUAJNCsxCisJCXN0bWlhCXIwISwge3IzLCByNCwgaXAsIGxyfQkJQAk0CisJCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQAk0CisJCXN1YnMJcjIsIHIyLCAjMQkJCUAJMQorCQlzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAJNAorCQlsZG1ndGlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQAk0CisJCWJndAkxYgkJCQlACTEKKwlQTEQoCWxkbWVxaWEgcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CSkKKwlQTEQoCWJlcQkyYgkJCSkKKwkJTE9BRFJFR1MoZmQsIHNwISwge3I0LCBwY30pCQlACTMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9jc3VtaXB2Ni5TIGIvYXJjaC9hcm0vbGliL2NzdW1pcHY2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2NWEyMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2xpYi9jc3VtaXB2Ni5TCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbGliL2NzdW1pcHY2LlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisKKwkJLnRleHQKKworRU5UUlkoX19jc3VtX2lwdjZfbWFnaWMpCisJCXN0cglsciwgW3NwLCAjLTRdIQorCQlhZGRzCWlwLCByMiwgcjMKKwkJbGRtaWEJcjEsIHtyMSAtIHIzLCBscn0KKwkJYWRjcwlpcCwgaXAsIHIxCisJCWFkY3MJaXAsIGlwLCByMgorCQlhZGNzCWlwLCBpcCwgcjMKKwkJYWRjcwlpcCwgaXAsIGxyCisJCWxkbWlhCXIwLCB7cjAgLSByM30KKwkJYWRjcwlyMCwgaXAsIHIwCisJCWFkY3MJcjAsIHIwLCByMQorCQlhZGNzCXIwLCByMCwgcjIKKwkJbGRyCXIyLCBbc3AsICM0XQorCQlhZGNzCXIwLCByMCwgcjMKKwkJYWRjcwlyMCwgcjAsIHIyCisJCWFkY3MJcjAsIHIwLCAjMAorCQlMT0FEUkVHUyhmZCwgc3AhLCB7cGN9KQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWwuUyBiL2FyY2gvYXJtL2xpYi9jc3VtcGFydGlhbC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNWUzNzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWwuUwpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWwuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKworCQkudGV4dAorCisvKgorICogRnVuY3Rpb246IF9fdTMyIGNzdW1fcGFydGlhbChjb25zdCBjaGFyICpzcmMsIGludCBsZW4sIF9fdTMyIHN1bSkKKyAqIFBhcmFtcyAgOiByMCA9IGJ1ZmZlciwgcjEgPSBsZW4sIHIyID0gY2hlY2tzdW0KKyAqIFJldHVybnMgOiByMCA9IG5ldyBjaGVja3N1bQorICovCisKK2J1ZgkucmVxCXIwCitsZW4JLnJlcQlyMQorc3VtCS5yZXEJcjIKK3RkMAkucmVxCXIzCit0ZDEJLnJlcQlyNAlAIHNhdmUgYmVmb3JlIHVzZQordGQyCS5yZXEJcjUJQCBzYXZlIGJlZm9yZSB1c2UKK3RkMwkucmVxCWxyCisKKy56ZXJvOgkJbW92CXIwLCBzdW0KKwkJYWRkCXNwLCBzcCwgIzQKKwkJbGRyCXBjLCBbc3BdLCAjNAorCisJCS8qCisJCSAqIEhhbmRsZSAwIHRvIDcgYnl0ZXMsIHdpdGggYW55IGFsaWdubWVudCBvZiBzb3VyY2UgYW5kCisJCSAqIGRlc3RpbmF0aW9uIHBvaW50ZXJzLiAgTm90ZSB0aGF0IHdoZW4gd2UgZ2V0IGhlcmUsIEMgPSAwCisJCSAqLworLmxlc3M4OgkJdGVxCWxlbiwgIzAJCQlAIGNoZWNrIGZvciB6ZXJvIGNvdW50CisJCWJlcQkuemVybworCisJCS8qIHdlIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgYnl0ZS4gKi8KKwkJdHN0CWJ1ZiwgIzEJCQlAIG9kZCBhZGRyZXNzPworCQlsZHJuZWIJdGQwLCBbYnVmXSwgIzEKKwkJc3VibmUJbGVuLCBsZW4sICMxCisJCWFkY25lcwlzdW0sIHN1bSwgdGQwLCBwdXRfYnl0ZV8xCisKKy5sZXNzNDoJCXRzdAlsZW4sICM2CisJCWJlcQkubGVzczhfYnl0ZQorCisJCS8qIHdlIGFyZSBub3cgaGFsZi13b3JkIGFsaWduZWQgKi8KKworLmxlc3M4X3dvcmRscDoKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNAorCQlsZHJoCXRkMCwgW2J1Zl0sICMyCisJCXN1YglsZW4sIGxlbiwgIzIKKyNlbHNlCisJCWxkcmIJdGQwLCBbYnVmXSwgIzEKKwkJbGRyYgl0ZDMsIFtidWZdLCAjMQorCQlzdWIJbGVuLCBsZW4sICMyCisjaWZuZGVmIF9fQVJNRUJfXworCQlvcnIJdGQwLCB0ZDAsIHRkMywgbHNsICM4CisjZWxzZQorCQlvcnIJdGQwLCB0ZDMsIHRkMCwgbHNsICM4CisjZW5kaWYKKyNlbmRpZgorCQlhZGNzCXN1bSwgc3VtLCB0ZDAKKwkJdHN0CWxlbiwgIzYKKwkJYm5lCS5sZXNzOF93b3JkbHAKKworLmxlc3M4X2J5dGU6CXRzdAlsZW4sICMxCQkJQCBvZGQgbnVtYmVyIG9mIGJ5dGVzCisJCWxkcm5lYgl0ZDAsIFtidWZdLCAjMQkJQCBpbmNsdWRlIGxhc3QgYnl0ZQorCQlhZGNuZXMJc3VtLCBzdW0sIHRkMCwgcHV0X2J5dGVfMAlAIHVwZGF0ZSBjaGVja3N1bQorCisuZG9uZToJCWFkYwlyMCwgc3VtLCAjMAkJQCBjb2xsZWN0IHVwIHRoZSBsYXN0IGNhcnJ5CisJCWxkcgl0ZDAsIFtzcF0sICM0CisJCXRzdAl0ZDAsICMxCQkJQCBjaGVjayBidWZmZXIgYWxpZ25tZW50CisJCW1vdm5lCXIwLCByMCwgcm9yICM4CQlAIHJvdGF0ZSBjaGVja3N1bSBieSA4IGJpdHMKKwkJbGRyCXBjLCBbc3BdLCAjNAkJQCByZXR1cm4KKworLm5vdF9hbGlnbmVkOgl0c3QJYnVmLCAjMQkJCUAgb2RkIGFkZHJlc3MKKwkJbGRybmViCXRkMCwgW2J1Zl0sICMxCQlAIG1ha2UgZXZlbgorCQlzdWJuZQlsZW4sIGxlbiwgIzEKKwkJYWRjbmVzCXN1bSwgc3VtLCB0ZDAsIHB1dF9ieXRlXzEJQCB1cGRhdGUgY2hlY2tzdW0KKworCQl0c3QJYnVmLCAjMgkJCUAgMzItYml0IGFsaWduZWQ/CisjaWYgX19MSU5VWF9BUk1fQVJDSF9fID49IDQKKwkJbGRybmVoCXRkMCwgW2J1Zl0sICMyCQlAIG1ha2UgMzItYml0IGFsaWduZWQKKwkJc3VibmUJbGVuLCBsZW4sICMyCisjZWxzZQorCQlsZHJuZWIJdGQwLCBbYnVmXSwgIzEKKwkJbGRybmViCWlwLCBbYnVmXSwgIzEKKwkJc3VibmUJbGVuLCBsZW4sICMyCisjaWZuZGVmIF9fQVJNRUJfXworCQlvcnJuZQl0ZDAsIHRkMCwgaXAsIGxzbCAjOAorI2Vsc2UKKwkJb3JybmUJdGQwLCBpcCwgdGQwLCBsc2wgIzgKKyNlbmRpZgorI2VuZGlmCisJCWFkY25lcwlzdW0sIHN1bSwgdGQwCQlAIHVwZGF0ZSBjaGVja3N1bQorCQltb3YJcGMsIGxyCisKK0VOVFJZKGNzdW1fcGFydGlhbCkKKwkJc3RtZmQJc3AhLCB7YnVmLCBscn0KKwkJY21wCWxlbiwgIzgJCQlAIEVuc3VyZSB0aGF0IHdlIGhhdmUgYXQgbGVhc3QKKwkJYmxvCS5sZXNzOAkJCUAgOCBieXRlcyB0byBjb3B5LgorCisJCWFkZHMJc3VtLCBzdW0sICMwCQlAIEMgPSAwCisJCXRzdAlidWYsICMzCQkJQCBUZXN0IGRlc3RpbmF0aW9uIGFsaWdubWVudAorCQlibG5lCS5ub3RfYWxpZ25lZAkJQCBhbGlnaCBkZXN0aW5hdGlvbiwgcmV0dXJuIGhlcmUKKworMToJCWJpY3MJaXAsIGxlbiwgIzMxCisJCWJlcQkzZgorCisJCXN0bWZkCXNwISwge3I0IC0gcjV9CisyOgkJbGRtaWEJYnVmISwge3RkMCwgdGQxLCB0ZDIsIHRkM30KKwkJYWRjcwlzdW0sIHN1bSwgdGQwCisJCWFkY3MJc3VtLCBzdW0sIHRkMQorCQlhZGNzCXN1bSwgc3VtLCB0ZDIKKwkJYWRjcwlzdW0sIHN1bSwgdGQzCisJCWxkbWlhCWJ1ZiEsIHt0ZDAsIHRkMSwgdGQyLCB0ZDN9CisJCWFkY3MJc3VtLCBzdW0sIHRkMAorCQlhZGNzCXN1bSwgc3VtLCB0ZDEKKwkJYWRjcwlzdW0sIHN1bSwgdGQyCisJCWFkY3MJc3VtLCBzdW0sIHRkMworCQlzdWIJaXAsIGlwLCAjMzIKKwkJdGVxCWlwLCAjMAorCQlibmUJMmIKKwkJbGRtZmQJc3AhLCB7cjQgLSByNX0KKworMzoJCXRzdAlsZW4sICMweDFjCQlAIHNob3VsZCBub3QgY2hhbmdlIEMKKwkJYmVxCS5sZXNzNAorCis0OgkJbGRyCXRkMCwgW2J1Zl0sICM0CisJCXN1YglsZW4sIGxlbiwgIzQKKwkJYWRjcwlzdW0sIHN1bSwgdGQwCisJCXRzdAlsZW4sICMweDFjCisJCWJuZQk0YgorCQliCS5sZXNzNApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2NzdW1wYXJ0aWFsY29weS5TIGIvYXJjaC9hcm0vbGliL2NzdW1wYXJ0aWFsY29weS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MGVlNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWxjb3B5LlMKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWxjb3B5LlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisKKwkJLnRleHQKKworLyogRnVuY3Rpb246IF9fdTMyIGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sIF9fdTMyIHN1bSkKKyAqIFBhcmFtcyAgOiByMCA9IHNyYywgcjEgPSBkc3QsIHIyID0gbGVuLCByMyA9IGNoZWNrc3VtCisgKiBSZXR1cm5zIDogcjAgPSBuZXcgY2hlY2tzdW0KKyAqLworCisJCS5tYWNybwlzYXZlX3JlZ3MKKwkJc3RtZmQJc3AhLCB7cjEsIHI0IC0gcjgsIGZwLCBpcCwgbHIsIHBjfQorCQkuZW5kbQorCisJCS5tYWNybwlsb2FkX3JlZ3MsZmxhZ3MKKwkJTE9BRFJFR1MoXGZsYWdzLGZwLHtyMSwgcjQgLSByOCwgZnAsIHNwLCBwY30pCisJCS5lbmRtCisKKwkJLm1hY3JvCWxvYWQxYiwgcmVnMQorCQlsZHJiCVxyZWcxLCBbcjBdLCAjMQorCQkuZW5kbQorCisJCS5tYWNybwlsb2FkMmIsIHJlZzEsIHJlZzIKKwkJbGRyYglccmVnMSwgW3IwXSwgIzEKKwkJbGRyYglccmVnMiwgW3IwXSwgIzEKKwkJLmVuZG0KKworCQkubWFjcm8JbG9hZDFsLCByZWcxCisJCWxkcglccmVnMSwgW3IwXSwgIzQKKwkJLmVuZG0KKworCQkubWFjcm8JbG9hZDJsLCByZWcxLCByZWcyCisJCWxkcglccmVnMSwgW3IwXSwgIzQKKwkJbGRyCVxyZWcyLCBbcjBdLCAjNAorCQkuZW5kbQorCisJCS5tYWNybwlsb2FkNGwsIHJlZzEsIHJlZzIsIHJlZzMsIHJlZzQKKwkJbGRtaWEJcjAhLCB7XHJlZzEsIFxyZWcyLCBccmVnMywgXHJlZzR9CisJCS5lbmRtCisKKyNkZWZpbmUgRk5fRU5UUlkJRU5UUlkoY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjaykKKworI2luY2x1ZGUgImNzdW1wYXJ0aWFsY29weWdlbmVyaWMuUyIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9jc3VtcGFydGlhbGNvcHlnZW5lcmljLlMgYi9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWxjb3B5Z2VuZXJpYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYTJmNDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWxjb3B5Z2VuZXJpYy5TCkBAIC0wLDAgKzEsMzMxIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2xpYi9jc3VtcGFydGlhbGNvcHlnZW5lcmljLlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDEgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKgorICogdW5zaWduZWQgaW50CisgKiBjc3VtX3BhcnRpYWxfY29weV94eHgoY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sIGludCBzdW0sICkKKyAqICByMCA9IHNyYywgcjEgPSBkc3QsIHIyID0gbGVuLCByMyA9IHN1bQorICogIFJldHVybnMgOiByMCA9IGNoZWNrc3VtCisgKgorICogTm90ZSB0aGF0ICd0c3QnIGFuZCAndGVxJyBwcmVzZXJ2ZSB0aGUgY2FycnkgZmxhZy4KKyAqLworCitzcmMJLnJlcQlyMAorZHN0CS5yZXEJcjEKK2xlbgkucmVxCXIyCitzdW0JLnJlcQlyMworCisuemVybzoJCW1vdglyMCwgc3VtCisJCWxvYWRfcmVncwllYQorCisJCS8qCisJCSAqIEFsaWduIGFuIHVuYWxpZ25lZCBkZXN0aW5hdGlvbiBwb2ludGVyLiAgV2Uga25vdyB0aGF0CisJCSAqIHdlIGhhdmUgPj0gOCBieXRlcyBoZXJlLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrCisJCSAqIHRoZSBsZW5ndGguICBOb3RlIHRoYXQgdGhlIHNvdXJjZSBwb2ludGVyIGhhc24ndCBiZWVuCisJCSAqIGFsaWduZWQgeWV0LgorCQkgKi8KKy5kc3RfdW5hbGlnbmVkOgl0c3QJZHN0LCAjMQorCQliZXEJLmRzdF8xNmJpdAorCisJCWxvYWQxYglpcAorCQlzdWIJbGVuLCBsZW4sICMxCisJCWFkY3MJc3VtLCBzdW0sIGlwLCBwdXRfYnl0ZV8xCUAgdXBkYXRlIGNoZWNrc3VtCisJCXN0cmIJaXAsIFtkc3RdLCAjMQorCQl0c3QJZHN0LCAjMgorCQltb3ZlcQlwYywgbHIJCQlAIGRzdCBpcyBub3cgMzJiaXQgYWxpZ25lZAorCisuZHN0XzE2Yml0Oglsb2FkMmIJcjgsIGlwCisJCXN1YglsZW4sIGxlbiwgIzIKKwkJYWRjcwlzdW0sIHN1bSwgcjgsIHB1dF9ieXRlXzAKKwkJc3RyYglyOCwgW2RzdF0sICMxCisJCWFkY3MJc3VtLCBzdW0sIGlwLCBwdXRfYnl0ZV8xCisJCXN0cmIJaXAsIFtkc3RdLCAjMQorCQltb3YJcGMsIGxyCQkJQCBkc3QgaXMgbm93IDMyYml0IGFsaWduZWQKKworCQkvKgorCQkgKiBIYW5kbGUgMCB0byA3IGJ5dGVzLCB3aXRoIGFueSBhbGlnbm1lbnQgb2Ygc291cmNlIGFuZAorCQkgKiBkZXN0aW5hdGlvbiBwb2ludGVycy4gIE5vdGUgdGhhdCB3aGVuIHdlIGdldCBoZXJlLCBDID0gMAorCQkgKi8KKy5sZXNzODoJCXRlcQlsZW4sICMwCQkJQCBjaGVjayBmb3IgemVybyBjb3VudAorCQliZXEJLnplcm8KKworCQkvKiB3ZSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGJ5dGUuICovCisJCXRzdAlkc3QsICMxCQkJQCBkc3QgMTYtYml0IGFsaWduZWQKKwkJYmVxCS5sZXNzOF9hbGlnbmVkCisKKwkJLyogQWxpZ24gZHN0ICovCisJCWxvYWQxYglpcAorCQlzdWIJbGVuLCBsZW4sICMxCisJCWFkY3MJc3VtLCBzdW0sIGlwLCBwdXRfYnl0ZV8xCUAgdXBkYXRlIGNoZWNrc3VtCisJCXN0cmIJaXAsIFtkc3RdLCAjMQorCQl0c3QJbGVuLCAjNgorCQliZXEJLmxlc3M4X2J5dGVvbmx5CisKKzE6CQlsb2FkMmIJcjgsIGlwCisJCXN1YglsZW4sIGxlbiwgIzIKKwkJYWRjcwlzdW0sIHN1bSwgcjgsIHB1dF9ieXRlXzAKKwkJc3RyYglyOCwgW2RzdF0sICMxCisJCWFkY3MJc3VtLCBzdW0sIGlwLCBwdXRfYnl0ZV8xCisJCXN0cmIJaXAsIFtkc3RdLCAjMQorLmxlc3M4X2FsaWduZWQ6CXRzdAlsZW4sICM2CisJCWJuZQkxYgorLmxlc3M4X2J5dGVvbmx5OgorCQl0c3QJbGVuLCAjMQorCQliZXEJLmRvbmUKKwkJbG9hZDFiCXI4CisJCWFkY3MJc3VtLCBzdW0sIHI4LCBwdXRfYnl0ZV8wCUAgdXBkYXRlIGNoZWNrc3VtCisJCXN0cmIJcjgsIFtkc3RdLCAjMQorCQliCS5kb25lCisKK0ZOX0VOVFJZCisJCW1vdglpcCwgc3AKKwkJc2F2ZV9yZWdzCisJCXN1YglmcCwgaXAsICM0CisKKwkJY21wCWxlbiwgIzgJCQlAIEVuc3VyZSB0aGF0IHdlIGhhdmUgYXQgbGVhc3QKKwkJYmxvCS5sZXNzOAkJCUAgOCBieXRlcyB0byBjb3B5LgorCisJCWFkZHMJc3VtLCBzdW0sICMwCQlAIEMgPSAwCisJCXRzdAlkc3QsICMzCQkJQCBUZXN0IGRlc3RpbmF0aW9uIGFsaWdubWVudAorCQlibG5lCS5kc3RfdW5hbGlnbmVkCQlAIGFsaWduIGRlc3RpbmF0aW9uLCByZXR1cm4gaGVyZQorCisJCS8qCisJCSAqIE9rLCB0aGUgZHN0IHBvaW50ZXIgaXMgbm93IDMyYml0IGFsaWduZWQsIGFuZCB3ZSBrbm93CisJCSAqIHRoYXQgd2UgbXVzdCBoYXZlIG1vcmUgdGhhbiA0IGJ5dGVzIHRvIGNvcHkuICBOb3RlCisJCSAqIHRoYXQgQyBjb250YWlucyB0aGUgY2FycnkgZnJvbSB0aGUgZHN0IGFsaWdubWVudCBhYm92ZS4KKwkJICovCisKKwkJdHN0CXNyYywgIzMJCQlAIFRlc3Qgc291cmNlIGFsaWdubWVudAorCQlibmUJLnNyY19ub3RfYWxpZ25lZAorCisJCS8qIFJvdXRpbmUgZm9yIHNyYyAmIGRzdCBhbGlnbmVkICovCisKKwkJYmljcwlpcCwgbGVuLCAjMTUKKwkJYmVxCTJmCisKKzE6CQlsb2FkNGwJcjQsIHI1LCByNiwgcjcKKwkJc3RtaWEJZHN0ISwge3I0LCByNSwgcjYsIHI3fQorCQlhZGNzCXN1bSwgc3VtLCByNAorCQlhZGNzCXN1bSwgc3VtLCByNQorCQlhZGNzCXN1bSwgc3VtLCByNgorCQlhZGNzCXN1bSwgc3VtLCByNworCQlzdWIJaXAsIGlwLCAjMTYKKwkJdGVxCWlwLCAjMAorCQlibmUJMWIKKworMjoJCWFuZHMJaXAsIGxlbiwgIzEyCisJCWJlcQk0ZgorCQl0c3QJaXAsICM4CisJCWJlcQkzZgorCQlsb2FkMmwJcjQsIHI1CisJCXN0bWlhCWRzdCEsIHtyNCwgcjV9CisJCWFkY3MJc3VtLCBzdW0sIHI0CisJCWFkY3MJc3VtLCBzdW0sIHI1CisJCXRzdAlpcCwgIzQKKwkJYmVxCTRmCisKKzM6CQlsb2FkMWwJcjQKKwkJc3RyCXI0LCBbZHN0XSwgIzQKKwkJYWRjcwlzdW0sIHN1bSwgcjQKKworNDoJCWFuZHMJbGVuLCBsZW4sICMzCisJCWJlcQkuZG9uZQorCQlsb2FkMWwJcjQKKwkJdHN0CWxlbiwgIzIKKwkJbW92CXI1LCByNCwgZ2V0X2J5dGVfMAorCQliZXEJLmV4aXQKKwkJYWRjcwlzdW0sIHN1bSwgcjQsIHB1c2ggIzE2CisJCXN0cmIJcjUsIFtkc3RdLCAjMQorCQltb3YJcjUsIHI0LCBnZXRfYnl0ZV8xCisJCXN0cmIJcjUsIFtkc3RdLCAjMQorCQltb3YJcjUsIHI0LCBnZXRfYnl0ZV8yCisuZXhpdDoJCXRzdAlsZW4sICMxCisJCXN0cm5lYglyNSwgW2RzdF0sICMxCisJCWFuZG5lCXI1LCByNSwgIzI1NQorCQlhZGNuZXMJc3VtLCBzdW0sIHI1LCBwdXRfYnl0ZV8wCisKKwkJLyoKKwkJICogSWYgdGhlIGRzdCBwb2ludGVyIHdhcyBub3QgMTYtYml0IGFsaWduZWQsIHdlCisJCSAqIG5lZWQgdG8gcm90YXRlIHRoZSBjaGVja3N1bSBoZXJlIHRvIGdldCBhcm91bmQKKwkJICogdGhlIGluZWZmaWNpZW50IGJ5dGUgbWFuaXB1bGF0aW9ucyBpbiB0aGUKKwkJICogYXJjaGl0ZWN0dXJlIGluZGVwZW5kZW50IGNvZGUuCisJCSAqLworLmRvbmU6CQlhZGMJcjAsIHN1bSwgIzAKKwkJbGRyCXN1bSwgW3NwLCAjMF0JCUAgZHN0CisJCXRzdAlzdW0sICMxCisJCW1vdm5lCXIwLCByMCwgcm9yICM4CisJCWxvYWRfcmVncwllYQorCisuc3JjX25vdF9hbGlnbmVkOgorCQlhZGMJc3VtLCBzdW0sICMwCQlAIGluY2x1ZGUgQyBmcm9tIGRzdCBhbGlnbm1lbnQKKwkJYW5kCWlwLCBzcmMsICMzCisJCWJpYwlzcmMsIHNyYywgIzMKKwkJbG9hZDFsCXI1CisJCWNtcAlpcCwgIzIKKwkJYmVxCS5zcmMyX2FsaWduZWQKKwkJYmhpCS5zcmMzX2FsaWduZWQKKwkJbW92CXI0LCByNSwgcHVsbCAjOAkJQCBDID0gMAorCQliaWNzCWlwLCBsZW4sICMxNQorCQliZXEJMmYKKzE6CQlsb2FkNGwJcjUsIHI2LCByNywgcjgKKwkJb3JyCXI0LCByNCwgcjUsIHB1c2ggIzI0CisJCW1vdglyNSwgcjUsIHB1bGwgIzgKKwkJb3JyCXI1LCByNSwgcjYsIHB1c2ggIzI0CisJCW1vdglyNiwgcjYsIHB1bGwgIzgKKwkJb3JyCXI2LCByNiwgcjcsIHB1c2ggIzI0CisJCW1vdglyNywgcjcsIHB1bGwgIzgKKwkJb3JyCXI3LCByNywgcjgsIHB1c2ggIzI0CisJCXN0bWlhCWRzdCEsIHtyNCwgcjUsIHI2LCByN30KKwkJYWRjcwlzdW0sIHN1bSwgcjQKKwkJYWRjcwlzdW0sIHN1bSwgcjUKKwkJYWRjcwlzdW0sIHN1bSwgcjYKKwkJYWRjcwlzdW0sIHN1bSwgcjcKKwkJbW92CXI0LCByOCwgcHVsbCAjOAorCQlzdWIJaXAsIGlwLCAjMTYKKwkJdGVxCWlwLCAjMAorCQlibmUJMWIKKzI6CQlhbmRzCWlwLCBsZW4sICMxMgorCQliZXEJNGYKKwkJdHN0CWlwLCAjOAorCQliZXEJM2YKKwkJbG9hZDJsCXI1LCByNgorCQlvcnIJcjQsIHI0LCByNSwgcHVzaCAjMjQKKwkJbW92CXI1LCByNSwgcHVsbCAjOAorCQlvcnIJcjUsIHI1LCByNiwgcHVzaCAjMjQKKwkJc3RtaWEJZHN0ISwge3I0LCByNX0KKwkJYWRjcwlzdW0sIHN1bSwgcjQKKwkJYWRjcwlzdW0sIHN1bSwgcjUKKwkJbW92CXI0LCByNiwgcHVsbCAjOAorCQl0c3QJaXAsICM0CisJCWJlcQk0ZgorMzoJCWxvYWQxbAlyNQorCQlvcnIJcjQsIHI0LCByNSwgcHVzaCAjMjQKKwkJc3RyCXI0LCBbZHN0XSwgIzQKKwkJYWRjcwlzdW0sIHN1bSwgcjQKKwkJbW92CXI0LCByNSwgcHVsbCAjOAorNDoJCWFuZHMJbGVuLCBsZW4sICMzCisJCWJlcQkuZG9uZQorCQltb3YJcjUsIHI0LCBnZXRfYnl0ZV8wCisJCXRzdAlsZW4sICMyCisJCWJlcQkuZXhpdAorCQlhZGNzCXN1bSwgc3VtLCByNCwgcHVzaCAjMTYKKwkJc3RyYglyNSwgW2RzdF0sICMxCisJCW1vdglyNSwgcjQsIGdldF9ieXRlXzEKKwkJc3RyYglyNSwgW2RzdF0sICMxCisJCW1vdglyNSwgcjQsIGdldF9ieXRlXzIKKwkJYgkuZXhpdAorCisuc3JjMl9hbGlnbmVkOgltb3YJcjQsIHI1LCBwdWxsICMxNgorCQlhZGRzCXN1bSwgc3VtLCAjMAorCQliaWNzCWlwLCBsZW4sICMxNQorCQliZXEJMmYKKzE6CQlsb2FkNGwJcjUsIHI2LCByNywgcjgKKwkJb3JyCXI0LCByNCwgcjUsIHB1c2ggIzE2CisJCW1vdglyNSwgcjUsIHB1bGwgIzE2CisJCW9ycglyNSwgcjUsIHI2LCBwdXNoICMxNgorCQltb3YJcjYsIHI2LCBwdWxsICMxNgorCQlvcnIJcjYsIHI2LCByNywgcHVzaCAjMTYKKwkJbW92CXI3LCByNywgcHVsbCAjMTYKKwkJb3JyCXI3LCByNywgcjgsIHB1c2ggIzE2CisJCXN0bWlhCWRzdCEsIHtyNCwgcjUsIHI2LCByN30KKwkJYWRjcwlzdW0sIHN1bSwgcjQKKwkJYWRjcwlzdW0sIHN1bSwgcjUKKwkJYWRjcwlzdW0sIHN1bSwgcjYKKwkJYWRjcwlzdW0sIHN1bSwgcjcKKwkJbW92CXI0LCByOCwgcHVsbCAjMTYKKwkJc3ViCWlwLCBpcCwgIzE2CisJCXRlcQlpcCwgIzAKKwkJYm5lCTFiCisyOgkJYW5kcwlpcCwgbGVuLCAjMTIKKwkJYmVxCTRmCisJCXRzdAlpcCwgIzgKKwkJYmVxCTNmCisJCWxvYWQybAlyNSwgcjYKKwkJb3JyCXI0LCByNCwgcjUsIHB1c2ggIzE2CisJCW1vdglyNSwgcjUsIHB1bGwgIzE2CisJCW9ycglyNSwgcjUsIHI2LCBwdXNoICMxNgorCQlzdG1pYQlkc3QhLCB7cjQsIHI1fQorCQlhZGNzCXN1bSwgc3VtLCByNAorCQlhZGNzCXN1bSwgc3VtLCByNQorCQltb3YJcjQsIHI2LCBwdWxsICMxNgorCQl0c3QJaXAsICM0CisJCWJlcQk0ZgorMzoJCWxvYWQxbAlyNQorCQlvcnIJcjQsIHI0LCByNSwgcHVzaCAjMTYKKwkJc3RyCXI0LCBbZHN0XSwgIzQKKwkJYWRjcwlzdW0sIHN1bSwgcjQKKwkJbW92CXI0LCByNSwgcHVsbCAjMTYKKzQ6CQlhbmRzCWxlbiwgbGVuLCAjMworCQliZXEJLmRvbmUKKwkJbW92CXI1LCByNCwgZ2V0X2J5dGVfMAorCQl0c3QJbGVuLCAjMgorCQliZXEJLmV4aXQKKwkJYWRjcwlzdW0sIHN1bSwgcjQKKwkJc3RyYglyNSwgW2RzdF0sICMxCisJCW1vdglyNSwgcjQsIGdldF9ieXRlXzEKKwkJc3RyYglyNSwgW2RzdF0sICMxCisJCXRzdAlsZW4sICMxCisJCWJlcQkuZG9uZQorCQlsb2FkMWIJcjUKKwkJYgkuZXhpdAorCisuc3JjM19hbGlnbmVkOgltb3YJcjQsIHI1LCBwdWxsICMyNAorCQlhZGRzCXN1bSwgc3VtLCAjMAorCQliaWNzCWlwLCBsZW4sICMxNQorCQliZXEJMmYKKzE6CQlsb2FkNGwJcjUsIHI2LCByNywgcjgKKwkJb3JyCXI0LCByNCwgcjUsIHB1c2ggIzgKKwkJbW92CXI1LCByNSwgcHVsbCAjMjQKKwkJb3JyCXI1LCByNSwgcjYsIHB1c2ggIzgKKwkJbW92CXI2LCByNiwgcHVsbCAjMjQKKwkJb3JyCXI2LCByNiwgcjcsIHB1c2ggIzgKKwkJbW92CXI3LCByNywgcHVsbCAjMjQKKwkJb3JyCXI3LCByNywgcjgsIHB1c2ggIzgKKwkJc3RtaWEJZHN0ISwge3I0LCByNSwgcjYsIHI3fQorCQlhZGNzCXN1bSwgc3VtLCByNAorCQlhZGNzCXN1bSwgc3VtLCByNQorCQlhZGNzCXN1bSwgc3VtLCByNgorCQlhZGNzCXN1bSwgc3VtLCByNworCQltb3YJcjQsIHI4LCBwdWxsICMyNAorCQlzdWIJaXAsIGlwLCAjMTYKKwkJdGVxCWlwLCAjMAorCQlibmUJMWIKKzI6CQlhbmRzCWlwLCBsZW4sICMxMgorCQliZXEJNGYKKwkJdHN0CWlwLCAjOAorCQliZXEJM2YKKwkJbG9hZDJsCXI1LCByNgorCQlvcnIJcjQsIHI0LCByNSwgcHVzaCAjOAorCQltb3YJcjUsIHI1LCBwdWxsICMyNAorCQlvcnIJcjUsIHI1LCByNiwgcHVzaCAjOAorCQlzdG1pYQlkc3QhLCB7cjQsIHI1fQorCQlhZGNzCXN1bSwgc3VtLCByNAorCQlhZGNzCXN1bSwgc3VtLCByNQorCQltb3YJcjQsIHI2LCBwdWxsICMyNAorCQl0c3QJaXAsICM0CisJCWJlcQk0ZgorMzoJCWxvYWQxbAlyNQorCQlvcnIJcjQsIHI0LCByNSwgcHVzaCAjOAorCQlzdHIJcjQsIFtkc3RdLCAjNAorCQlhZGNzCXN1bSwgc3VtLCByNAorCQltb3YJcjQsIHI1LCBwdWxsICMyNAorNDoJCWFuZHMJbGVuLCBsZW4sICMzCisJCWJlcQkuZG9uZQorCQltb3YJcjUsIHI0LCBnZXRfYnl0ZV8wCisJCXRzdAlsZW4sICMyCisJCWJlcQkuZXhpdAorCQlzdHJiCXI1LCBbZHN0XSwgIzEKKwkJYWRjcwlzdW0sIHN1bSwgcjQKKwkJbG9hZDFsCXI0CisJCW1vdglyNSwgcjQsIGdldF9ieXRlXzAKKwkJc3RyYglyNSwgW2RzdF0sICMxCisJCWFkY3MJc3VtLCBzdW0sIHI0LCBwdXNoICMyNAorCQltb3YJcjUsIHI0LCBnZXRfYnl0ZV8xCisJCWIJLmV4aXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9jc3VtcGFydGlhbGNvcHl1c2VyLlMgYi9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWxjb3B5dXNlci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YTJkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWxjb3B5dXNlci5TCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2xpYi9jc3VtcGFydGlhbGNvcHl1c2VyLlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAyNy8wMy8wMyBJYW4gTW9sdG9uIENsZWFuIHVwIENPTkZJR19DUFUKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9jb25zdGFudHMuaD4KKworCQkudGV4dAorCisJCS5tYWNybwlzYXZlX3JlZ3MKKwkJc3RtZmQJc3AhLCB7cjEgLSByMiwgcjQgLSByOCwgZnAsIGlwLCBsciwgcGN9CisJCS5lbmRtCisKKwkJLm1hY3JvCWxvYWRfcmVncyxmbGFncworCQlsZG1cZmxhZ3MJZnAsIHtyMSwgcjIsIHI0LXI4LCBmcCwgc3AsIHBjfQorCQkuZW5kbQorCisJCS5tYWNybwlsb2FkMWIsCXJlZzEKKzk5OTk6CQlsZHJidAlccmVnMSwgW3IwXSwgJDEKKwkJLnNlY3Rpb24gX19leF90YWJsZSwgImEiCisJCS5hbGlnbgkzCisJCS5sb25nCTk5OTliLCA2MDAxZgorCQkucHJldmlvdXMKKwkJLmVuZG0KKworCQkubWFjcm8JbG9hZDJiLCByZWcxLCByZWcyCis5OTk5OgkJbGRyYnQJXHJlZzEsIFtyMF0sICQxCis5OTk4OgkJbGRyYnQJXHJlZzIsIFtyMF0sICQxCisJCS5zZWN0aW9uIF9fZXhfdGFibGUsICJhIgorCQkubG9uZwk5OTk5YiwgNjAwMWYKKwkJLmxvbmcJOTk5OGIsIDYwMDFmCisJCS5wcmV2aW91cworCQkuZW5kbQorCisJCS5tYWNybwlsb2FkMWwsIHJlZzEKKzk5OTk6CQlsZHJ0CVxyZWcxLCBbcjBdLCAkNAorCQkuc2VjdGlvbiBfX2V4X3RhYmxlLCAiYSIKKwkJLmFsaWduCTMKKwkJLmxvbmcJOTk5OWIsIDYwMDFmCisJCS5wcmV2aW91cworCQkuZW5kbQorCisJCS5tYWNybwlsb2FkMmwsIHJlZzEsIHJlZzIKKzk5OTk6CQlsZHJ0CVxyZWcxLCBbcjBdLCAkNAorOTk5ODoJCWxkcnQJXHJlZzIsIFtyMF0sICQ0CisJCS5zZWN0aW9uIF9fZXhfdGFibGUsICJhIgorCQkubG9uZwk5OTk5YiwgNjAwMWYKKwkJLmxvbmcJOTk5OGIsIDYwMDFmCisJCS5wcmV2aW91cworCQkuZW5kbQorCisJCS5tYWNybwlsb2FkNGwsIHJlZzEsIHJlZzIsIHJlZzMsIHJlZzQKKzk5OTk6CQlsZHJ0CVxyZWcxLCBbcjBdLCAkNAorOTk5ODoJCWxkcnQJXHJlZzIsIFtyMF0sICQ0Cis5OTk3OgkJbGRydAlccmVnMywgW3IwXSwgJDQKKzk5OTY6CQlsZHJ0CVxyZWc0LCBbcjBdLCAkNAorCQkuc2VjdGlvbiBfX2V4X3RhYmxlLCAiYSIKKwkJLmxvbmcJOTk5OWIsIDYwMDFmCisJCS5sb25nCTk5OThiLCA2MDAxZgorCQkubG9uZwk5OTk3YiwgNjAwMWYKKwkJLmxvbmcJOTk5NmIsIDYwMDFmCisJCS5wcmV2aW91cworCQkuZW5kbQorCisvKgorICogdW5zaWduZWQgaW50CisgKiBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sIGludCBzdW0sIGludCAqZXJyX3B0cikKKyAqICByMCA9IHNyYywgcjEgPSBkc3QsIHIyID0gbGVuLCByMyA9IHN1bSwgW3NwXSA9ICplcnJfcHRyCisgKiAgUmV0dXJucyA6IHIwID0gY2hlY2tzdW0sIFtbc3AsICMwXSwgIzBdID0gMCBvciAtRUZBVUxUCisgKi8KKworI2RlZmluZSBGTl9FTlRSWQlFTlRSWShjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIpCisKKyNpbmNsdWRlICJjc3VtcGFydGlhbGNvcHlnZW5lcmljLlMiCisKKy8qCisgKiBGSVhNRTogbWlub3IgYnVnbGV0IGhlcmUKKyAqIFdlIGRvbid0IHJldHVybiB0aGUgY2hlY2tzdW0gZm9yIHRoZSBkYXRhIHByZXNlbnQgaW4gdGhlIGJ1ZmZlci4gIFRvIGRvCisgKiBzbyBwcm9wZXJseSwgd2Ugd291bGQgaGF2ZSB0byBhZGQgaW4gd2hhdGV2ZXIgcmVnaXN0ZXJzIHdlcmUgbG9hZGVkIGJlZm9yZQorICogdGhlIGZhdWx0LCB3aGljaCwgd2l0aCB0aGUgY3VycmVudCBhc20gYWJvdmUgaXMgbm90IHByZWRpY3RhYmxlLgorICovCisJCS5zZWN0aW9uIC5maXh1cCwiYXgiCisJCS5hbGlnbgk0Cis2MDAxOgkJbW92CXI0LCAjLUVGQVVMVAorCQlsZHIJcjUsIFtmcCwgIzRdCQlAICplcnJfcHRyCisJCXN0cglyNCwgW3I1XQorCQlsZG1pYQlzcCwge3IxLCByMn0JCUAgcmV0cmlldmUgZHN0LCBsZW4KKwkJYWRkCXIyLCByMiwgcjEKKwkJbW92CXIwLCAjMAkJCUAgemVybyB0aGUgYnVmZmVyCis2MDAyOgkJdGVxCXIyLCByMQorCQlzdHJuZWIJcjAsIFtyMV0sICMxCisJCWJuZQk2MDAyYgorCQlsb2FkX3JlZ3MJZWEKKwkJLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvZGVsYXkuUyBiL2FyY2gvYXJtL2xpYi9kZWxheS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjN2Y3ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9saWIvZGVsYXkuUwpAQCAtMCwwICsxLDU4IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2xpYi9kZWxheS5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKwkJLnRleHQKKworTEMwOgkJLndvcmQJbG9vcHNfcGVyX2ppZmZ5CisKKy8qCisgKiAwIDw9IHIwIDw9IDIwMDAKKyAqLworRU5UUlkoX191ZGVsYXkpCisJCW1vdglyMiwgICAgICMweDY4MDAKKwkJb3JyCXIyLCByMiwgIzB4MDBkYgorCQltdWwJcjAsIHIyLCByMAorRU5UUlkoX19jb25zdF91ZGVsYXkpCQkJCUAgMCA8PSByMCA8PSAweDAxZmZmZmZmCisJCWxkcglyMiwgTEMwCisJCWxkcglyMiwgW3IyXQkJQCBtYXggPSAweDBmZmZmZmZmCisJCW1vdglyMCwgcjAsIGxzciAjMTEJCUAgbWF4ID0gMHgwMDAwM2ZmZgorCQltb3YJcjIsIHIyLCBsc3IgIzExCQlAIG1heCA9IDB4MDAwM2ZmZmYKKwkJbXVsCXIwLCByMiwgcjAJCUAgbWF4ID0gMl4zMi0xCisJCW1vdnMJcjAsIHIwLCBsc3IgIzYKKwkJUkVUSU5TVFIobW92ZXEscGMsbHIpCisKKy8qCisgKiBsb29wcyA9IChyMCAqIDB4MTBjNiAqIDEwMCAqIGxvb3BzX3Blcl9qaWZmeSkgLyAyXjMyCisgKgorICogT2gsIGlmIG9ubHkgd2UgaGFkIGEgY3ljbGUgY291bnRlci4uLgorICovCisKK0AgRGVsYXkgcm91dGluZQorRU5UUlkoX19kZWxheSkKKwkJc3VicwlyMCwgcjAsICMxCisjaWYgMAorCQlSRVRJTlNUUihtb3ZscyxwYyxscikKKwkJc3VicwlyMCwgcjAsICMxCisJCVJFVElOU1RSKG1vdmxzLHBjLGxyKQorCQlzdWJzCXIwLCByMCwgIzEKKwkJUkVUSU5TVFIobW92bHMscGMsbHIpCisJCXN1YnMJcjAsIHIwLCAjMQorCQlSRVRJTlNUUihtb3ZscyxwYyxscikKKwkJc3VicwlyMCwgcjAsICMxCisJCVJFVElOU1RSKG1vdmxzLHBjLGxyKQorCQlzdWJzCXIwLCByMCwgIzEKKwkJUkVUSU5TVFIobW92bHMscGMsbHIpCisJCXN1YnMJcjAsIHIwLCAjMQorCQlSRVRJTlNUUihtb3ZscyxwYyxscikKKwkJc3VicwlyMCwgcjAsICMxCisjZW5kaWYKKwkJYmhpCV9fZGVsYXkKKwkJUkVUSU5TVFIobW92LHBjLGxyKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2RpdjY0LlMgYi9hcmNoL2FybS9saWIvZGl2NjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzlhMWNkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbGliL2RpdjY0LlMKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbGliL2RpdjY0LlMKKyAqCisgKiAgT3B0aW1pemVkIGNvbXB1dGF0aW9uIG9mIDY0LWJpdCBkaXZpZGVuZCAvIDMyLWJpdCBkaXZpc29yCisgKgorICogIEF1dGhvcjoJTmljb2xhcyBQaXRyZQorICogIENyZWF0ZWQ6CU9jdCA1LCAyMDAzCisgKiAgQ29weXJpZ2h0OglNb250YSBWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworI2lmZGVmIF9fQVJNRUJfXworI2RlZmluZSB4aCByMAorI2RlZmluZSB4bCByMQorI2RlZmluZSB5aCByMgorI2RlZmluZSB5bCByMworI2Vsc2UKKyNkZWZpbmUgeGwgcjAKKyNkZWZpbmUgeGggcjEKKyNkZWZpbmUgeWwgcjIKKyNkZWZpbmUgeWggcjMKKyNlbmRpZgorCisvKgorICogX19kb19kaXY2NDogcGVyZm9ybSBhIGRpdmlzaW9uIHdpdGggNjQtYml0IGRpdmlkZW5kIGFuZCAzMi1iaXQgZGl2aXNvci4KKyAqCisgKiBOb3RlOiBDYWxsaW5nIGNvbnZlbnRpb24gaXMgdG90YWxseSBub24gc3RhbmRhcmQgZm9yIG9wdGltYWwgY29kZS4KKyAqICAgICAgIFRoaXMgaXMgbWVhbnQgdG8gYmUgdXNlZCBieSBkb19kaXYoKSBmcm9tIGluY2x1ZGUvYXNtL2RpdjY0Lmggb25seS4KKyAqCisgKiBJbnB1dCBwYXJhbWV0ZXJzOgorICogCXhoLXhsCT0gZGl2aWRlbmQgKGNsb2JiZXJlZCkKKyAqIAlyNAk9IGRpdmlzb3IgKHByZXNlcnZlZCkKKyAqCisgKiBPdXRwdXQgdmFsdWVzOgorICogCXloLXlsCT0gcmVzdWx0CisgKiAJeGgJPSByZW1haW5kZXIKKyAqCisgKiBDbG9iYmVyZWQgcmVnczogeGwsIGlwCisgKi8KKworRU5UUlkoX19kb19kaXY2NCkKKworCUAgVGVzdCBmb3IgZWFzeSBwYXRocyBmaXJzdC4KKwlzdWJzCWlwLCByNCwgIzEKKwlibHMJOWYJCQlAIGRpdmlzb3IgaXMgMCBvciAxCisJdHN0CWlwLCByNAorCWJlcQk4ZgkJCUAgZGl2aXNvciBpcyBwb3dlciBvZiAyCisKKwlAIFNlZSBpZiB3ZSBuZWVkIHRvIGhhbmRsZSB1cHBlciAzMi1iaXQgcmVzdWx0LgorCWNtcAl4aCwgcjQKKwltb3YJeWgsICMwCisJYmxvCTNmCisKKwlAIEFsaWduIGRpdmlzb3Igd2l0aCB1cHBlciBwYXJ0IG9mIGRpdmlkZW5kLgorCUAgVGhlIGFsaWduZWQgZGl2aXNvciBpcyBzdG9yZWQgaW4geWwgcHJlc2VydmluZyB0aGUgb3JpZ2luYWwuCisJQCBUaGUgYml0IHBvc2l0aW9uIGlzIHN0b3JlZCBpbiBpcC4KKworI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA1CisKKwljbHoJeWwsIHI0CisJY2x6CWlwLCB4aAorCXN1Ygl5bCwgeWwsIGlwCisJbW92CWlwLCAjMQorCW1vdglpcCwgaXAsIGxzbCB5bAorCW1vdgl5bCwgcjQsIGxzbCB5bAorCisjZWxzZQorCisJbW92CXlsLCByNAorCW1vdglpcCwgIzEKKzE6CWNtcAl5bCwgIzB4ODAwMDAwMDAKKwljbXBjYwl5bCwgeGgKKwltb3ZjYwl5bCwgeWwsIGxzbCAjMQorCW1vdmNjCWlwLCBpcCwgbHNsICMxCisJYmNjCTFiCisKKyNlbmRpZgorCisJQCBUaGUgZGl2aXNpb24gbG9vcCBmb3IgbmVlZGVkIHVwcGVyIGJpdCBwb3NpdGlvbnMuCisgCUAgQnJlYWsgb3V0IGVhcmx5IGlmIGRpdmlkZW5kIHJlYWNoZXMgMC4KKzI6CWNtcAl4aCwgeWwKKwlvcnJjcwl5aCwgeWgsIGlwCisJc3ViY3NzCXhoLCB4aCwgeWwKKwltb3ZuZXMJaXAsIGlwLCBsc3IgIzEKKwltb3YJeWwsIHlsLCBsc3IgIzEKKwlibmUJMmIKKworCUAgU2VlIGlmIHdlIG5lZWQgdG8gaGFuZGxlIGxvd2VyIDMyLWJpdCByZXN1bHQuCiszOgljbXAJeGgsICMwCisJbW92CXlsLCAjMAorCWNtcGVxCXhsLCByNAorCW1vdmxvCXhoLCB4bAorCW1vdmxvCXBjLCBscgorCisJQCBUaGUgZGl2aXNpb24gbG9vcCBmb3IgbG93ZXIgYml0IHBvc2l0aW9ucy4KKwlAIEhlcmUgd2Ugc2hpZnQgcmVtYWluZXIgYml0cyBsZWZ0d2FyZHMgcmF0aGVyIHRoYW4gbW92aW5nIHRoZQorCUAgZGl2aXNvciBmb3IgY29tcGFyaXNvbnMsIGNvbnNpZGVyaW5nIHRoZSBjYXJyeS1vdXQgYml0IGFzIHdlbGwuCisJbW92CWlwLCAjMHg4MDAwMDAwMAorNDoJbW92cwl4bCwgeGwsIGxzbCAjMQorCWFkY3MJeGgsIHhoLCB4aAorCWJlcQk2ZgorCWNtcGNjCXhoLCByNAorNToJb3JyY3MJeWwsIHlsLCBpcAorCXN1YmNzCXhoLCB4aCwgcjQKKwltb3ZzCWlwLCBpcCwgbHNyICMxCisJYm5lCTRiCisJbW92CXBjLCBscgorCisJQCBUaGUgdG9wIHBhcnQgb2YgcmVtYWluZGVyIGJlY2FtZSB6ZXJvLiAgSWYgY2FycnkgaXMgc2V0CisJQCAodGhlIDMzdGggYml0KSB0aGlzIGlzIGEgZmFsc2UgcG9zaXRpdmUgc28gcmVzdW1lIHRoZSBsb29wLgorCUAgT3RoZXJ3aXNlLCBpZiBsb3dlciBwYXJ0IGlzIGFsc28gbnVsbCB0aGVuIHdlIGFyZSBkb25lLgorNjoJYmNzCTViCisJY21wCXhsLCAjMAorCW1vdmVxCXBjLCBscgorCisJQCBXZSBzdGlsbCBoYXZlIHJlbWFpbmVyIGJpdHMgaW4gdGhlIGxvdyBwYXJ0LiAgQnJpbmcgdGhlbSB1cC4KKworI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA1CisKKwljbHoJeGgsIHhsCQkJQCB3ZSBrbm93IHhoIGlzIHplcm8gaGVyZSBzby4uLgorCWFkZAl4aCwgeGgsICMxCisJbW92CXhsLCB4bCwgbHNsIHhoCisJbW92CWlwLCBpcCwgbHNyIHhoCisKKyNlbHNlCisKKzc6CW1vdnMJeGwsIHhsLCBsc2wgIzEKKwltb3YJaXAsIGlwLCBsc3IgIzEKKwliY2MJN2IKKworI2VuZGlmCisKKwlAIEN1cnJlbnQgcmVtYWluZGVyIGlzIG5vdyAxLiAgSXQgaXMgd29ydGhsZXNzIHRvIGNvbXBhcmUgd2l0aAorCUAgZGl2aXNvciBhdCB0aGlzIHBvaW50IHNpbmNlIGRpdmlzb3IgY2FuIG5vdCBiZSBzbWFsbGVyIHRoYW4gMyBoZXJlLgorCUAgSWYgcG9zc2libGUsIGJyYW5jaCBmb3IgYW5vdGhlciBzaGlmdCBpbiB0aGUgZGl2aXNpb24gbG9vcC4KKwlAIElmIG5vIGJpdCBwb3NpdGlvbiBsZWZ0IHRoZW4gd2UgYXJlIGRvbmUuCisJbW92cwlpcCwgaXAsIGxzciAjMQorCW1vdgl4aCwgIzEKKwlibmUJNGIKKwltb3YJcGMsIGxyCisKKzg6CUAgRGl2aXNpb24gYnkgYSBwb3dlciBvZiAyOiBkZXRlcm1pbmUgd2hhdCB0aGF0IGRpdmlzb3Igb3JkZXIgaXMKKwlAIHRoZW4gc2ltcGx5IHNoaWZ0IHZhbHVlcyBhcm91bmQKKworI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA1CisKKwljbHoJaXAsIHI0CisJcnNiCWlwLCBpcCwgIzMxCisKKyNlbHNlCisKKwltb3YJeWwsIHI0CisJY21wCXI0LCAjKDEgPDwgMTYpCisJbW92CWlwLCAjMAorCW1vdmhzCXlsLCB5bCwgbHNyICMxNgorCW1vdmhzCWlwLCAjMTYKKworCWNtcAl5bCwgIygxIDw8IDgpCisJbW92aHMJeWwsIHlsLCBsc3IgIzgKKwlhZGRocwlpcCwgaXAsICM4CisKKwljbXAJeWwsICMoMSA8PCA0KQorCW1vdmhzCXlsLCB5bCwgbHNyICM0CisJYWRkaHMJaXAsIGlwLCAjNAorCisJY21wCXlsLCAjKDEgPDwgMikKKwlhZGRoaQlpcCwgaXAsICMzCisJYWRkbHMJaXAsIGlwLCB5bCwgbHNyICMxCisKKyNlbmRpZgorCisJbW92CXloLCB4aCwgbHNyIGlwCisJbW92CXlsLCB4bCwgbHNyIGlwCisJcnNiCWlwLCBpcCwgIzMyCisJb3JyCXlsLCB5bCwgeGgsIGxzbCBpcAorCW1vdgl4aCwgeGwsIGxzbCBpcAorCW1vdgl4aCwgeGgsIGxzciBpcAorCW1vdglwYywgbHIKKworCUAgZXEgLT4gZGl2aXNpb24gYnkgMTogb2J2aW91cyBlbm91Z2guLi4KKzk6CW1vdmVxCXlsLCB4bAorCW1vdmVxCXloLCB4aAorCW1vdmVxCXhoLCAjMAorCW1vdmVxCXBjLCBscgorCisJQCBEaXZpc2lvbiBieSAwOgorCXN0cglsciwgW3NwLCAjLTRdIQorCWJsCV9fZGl2MAorCisJQCBhcyB3cm9uZyBhcyBpdCBjb3VsZCBiZS4uLgorCW1vdgl5bCwgIzAKKwltb3YJeWgsICMwCisJbW92CXhoLCAjMAorCWxkcglwYywgW3NwXSwgIzQKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2VjYXJkLlMgYi9hcmNoL2FybS9saWIvZWNhcmQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjdiNjAyYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2xpYi9lY2FyZC5TCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbGliL2VjYXJkLlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogMjcvMDMvMDMgSWFuIE1vbHRvbiBDbGVhbiB1cCBDT05GSUdfQ1BVCisgKgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworI2RlZmluZSBDUFNSMlNQU1IocnQpIFwKKwkJbXJzCXJ0LCBjcHNyOyBcCisJCW1zcglzcHNyX2N4c2YsIHJ0CisKK0AgUHVycG9zZTogY2FsbCBhbiBleHBhbnNpb24gY2FyZCBsb2FkZXIgdG8gcmVhZCBieXRlcy4KK0AgUHJvdG8gIDogY2hhciByZWFkX2xvYWRlcihpbnQgb2Zmc2V0LCBjaGFyICpjYXJkX2Jhc2UsIGNoYXIgKmxvYWRlcik7CitAIFJldHVybnM6IGJ5dGUgcmVhZAorCitFTlRSWShlY2FyZF9sb2FkZXJfcmVhZCkKKwkJc3RtZmQJc3AhLCB7cjQgLSByMTIsIGxyfQorCQltb3YJcjExLCByMQorCQltb3YJcjEsIHIwCisJCUNQU1IyU1BTUihyMCkKKwkJbW92CWxyLCBwYworCQltb3YJcGMsIHIyCisJCUxPQURSRUdTKGZkLCBzcCEsIHtyNCAtIHIxMiwgcGN9KQorCitAIFB1cnBvc2U6IGNhbGwgYW4gZXhwYW5zaW9uIGNhcmQgbG9hZGVyIHRvIHJlc2V0IHRoZSBjYXJkCitAIFByb3RvICA6IHZvaWQgcmVhZF9sb2FkZXIoaW50IGNhcmRfYmFzZSwgY2hhciAqbG9hZGVyKTsKK0AgUmV0dXJuczogYnl0ZSByZWFkCisKK0VOVFJZKGVjYXJkX2xvYWRlcl9yZXNldCkKKwkJc3RtZmQJc3AhLCB7cjQgLSByMTIsIGxyfQorCQltb3YJcjExLCByMAorCQlDUFNSMlNQU1IocjApCisJCW1vdglsciwgcGMKKwkJYWRkCXBjLCByMSwgIzgKKwkJTE9BRFJFR1MoZmQsIHNwISwge3I0IC0gcjEyLCBwY30pCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9maW5kYml0LlMgYi9hcmNoL2FybS9saWIvZmluZGJpdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNTVkNTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9saWIvZmluZGJpdC5TCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2xpYi9maW5kYml0LlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDAgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAxNnRoIE1hcmNoIDIwMDEgLSBKb2huIFJpcGxleSA8anJpcGxleUBzb25pY2JsdWUuY29tPgorICogICBGaXhlZCBzbyB0aGF0ICJzaXplIiBpcyBhbiBleGNsdXNpdmUgbm90IGFuIGluY2x1c2l2ZSBxdWFudGl0eS4KKyAqICAgQWxsIHVzZXJzIG9mIHRoZXNlIGZ1bmN0aW9ucyBleHBlY3QgZXhjbHVzaXZlIHNpemVzLCBhbmQgbWF5CisgKiAgIGFsc28gY2FsbCB3aXRoIHplcm8gc2l6ZS4KKyAqIFJld29ya2VkIGJ5IHJtay4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisgICAgICAgICAgICAgICAgLnRleHQKKworLyoKKyAqIFB1cnBvc2UgIDogRmluZCBhICd6ZXJvJyBiaXQKKyAqIFByb3RvdHlwZTogaW50IGZpbmRfZmlyc3RfemVyb19iaXQodm9pZCAqYWRkciwgdW5zaWduZWQgaW50IG1heGJpdCk7CisgKi8KK0VOVFJZKF9maW5kX2ZpcnN0X3plcm9fYml0X2xlKQorCQl0ZXEJcjEsICMwCQorCQliZXEJM2YKKwkJbW92CXIyLCAjMAorMToJCWxkcmIJcjMsIFtyMCwgcjIsIGxzciAjM10KKwkJZW9ycwlyMywgcjMsICMweGZmCQlAIGludmVydCBiaXRzCisJCWJuZQkuZm91bmQJCQlAIGFueSBub3cgc2V0IC0gZm91bmQgemVybyBiaXQKKwkJYWRkCXIyLCByMiwgIzgJCUAgbmV4dCBiaXQgcG9pbnRlcgorMjoJCWNtcAlyMiwgcjEJCQlAIGFueSBtb3JlPworCQlibG8JMWIKKzM6CQltb3YJcjAsIHIxCQkJQCBubyBmcmVlIGJpdHMKKwkJUkVUSU5TVFIobW92LHBjLGxyKQorCisvKgorICogUHVycG9zZSAgOiBGaW5kIG5leHQgJ3plcm8nIGJpdAorICogUHJvdG90eXBlOiBpbnQgZmluZF9uZXh0X3plcm9fYml0KHZvaWQgKmFkZHIsIHVuc2lnbmVkIGludCBtYXhiaXQsIGludCBvZmZzZXQpCisgKi8KK0VOVFJZKF9maW5kX25leHRfemVyb19iaXRfbGUpCisJCXRlcQlyMSwgIzAKKwkJYmVxCTNiCisJCWFuZHMJaXAsIHIyLCAjNworCQliZXEJMWIJCQlAIElmIG5ldyBieXRlLCBnb3RvIG9sZCByb3V0aW5lCisJCWxkcmIJcjMsIFtyMCwgcjIsIGxzciAjM10KKwkJZW9yCXIzLCByMywgIzB4ZmYJCUAgbm93IGxvb2tpbmcgZm9yIGEgMSBiaXQKKwkJbW92cwlyMywgcjMsIGxzciBpcAkJQCBzaGlmdCBvZmYgdW51c2VkIGJpdHMKKwkJYm5lCS5mb3VuZAorCQlvcnIJcjIsIHIyLCAjNwkJQCBpZiB6ZXJvLCB0aGVuIG5vIGJpdHMgaGVyZQorCQlhZGQJcjIsIHIyLCAjMQkJQCBhbGlnbiBiaXQgcG9pbnRlcgorCQliCTJiCQkJQCBsb29wIGZvciBuZXh0IGJpdAorCisvKgorICogUHVycG9zZSAgOiBGaW5kIGEgJ29uZScgYml0CisgKiBQcm90b3R5cGU6IGludCBmaW5kX2ZpcnN0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLCB1bnNpZ25lZCBpbnQgbWF4Yml0KTsKKyAqLworRU5UUlkoX2ZpbmRfZmlyc3RfYml0X2xlKQorCQl0ZXEJcjEsICMwCQorCQliZXEJM2YKKwkJbW92CXIyLCAjMAorMToJCWxkcmIJcjMsIFtyMCwgcjIsIGxzciAjM10KKwkJbW92cwlyMywgcjMKKwkJYm5lCS5mb3VuZAkJCUAgYW55IG5vdyBzZXQgLSBmb3VuZCB6ZXJvIGJpdAorCQlhZGQJcjIsIHIyLCAjOAkJQCBuZXh0IGJpdCBwb2ludGVyCisyOgkJY21wCXIyLCByMQkJCUAgYW55IG1vcmU/CisJCWJsbwkxYgorMzoJCW1vdglyMCwgcjEJCQlAIG5vIGZyZWUgYml0cworCQlSRVRJTlNUUihtb3YscGMsbHIpCisKKy8qCisgKiBQdXJwb3NlICA6IEZpbmQgbmV4dCAnb25lJyBiaXQKKyAqIFByb3RvdHlwZTogaW50IGZpbmRfbmV4dF96ZXJvX2JpdCh2b2lkICphZGRyLCB1bnNpZ25lZCBpbnQgbWF4Yml0LCBpbnQgb2Zmc2V0KQorICovCitFTlRSWShfZmluZF9uZXh0X2JpdF9sZSkKKwkJdGVxCXIxLCAjMAorCQliZXEJM2IKKwkJYW5kcwlpcCwgcjIsICM3CisJCWJlcQkxYgkJCUAgSWYgbmV3IGJ5dGUsIGdvdG8gb2xkIHJvdXRpbmUKKwkJbGRyYglyMywgW3IwLCByMiwgbHNyICMzXQorCQltb3ZzCXIzLCByMywgbHNyIGlwCQlAIHNoaWZ0IG9mZiB1bnVzZWQgYml0cworCQlibmUJLmZvdW5kCisJCW9ycglyMiwgcjIsICM3CQlAIGlmIHplcm8sIHRoZW4gbm8gYml0cyBoZXJlCisJCWFkZAlyMiwgcjIsICMxCQlAIGFsaWduIGJpdCBwb2ludGVyCisJCWIJMmIJCQlAIGxvb3AgZm9yIG5leHQgYml0CisKKyNpZmRlZiBfX0FSTUVCX18KKworRU5UUlkoX2ZpbmRfZmlyc3RfemVyb19iaXRfYmUpCisJCXRlcQlyMSwgIzAKKwkJYmVxCTNmCisJCW1vdglyMiwgIzAKKzE6CQllb3IJcjMsIHIyLCAjMHgxOAkJQCBiaWcgZW5kaWFuIGJ5dGUgb3JkZXJpbmcKKwkJbGRyYglyMywgW3IwLCByMywgbHNyICMzXQorCQllb3JzCXIzLCByMywgIzB4ZmYJCUAgaW52ZXJ0IGJpdHMKKwkJYm5lCS5mb3VuZAkJCUAgYW55IG5vdyBzZXQgLSBmb3VuZCB6ZXJvIGJpdAorCQlhZGQJcjIsIHIyLCAjOAkJQCBuZXh0IGJpdCBwb2ludGVyCisyOgkJY21wCXIyLCByMQkJCUAgYW55IG1vcmU/CisJCWJsbwkxYgorMzoJCW1vdglyMCwgcjEJCQlAIG5vIGZyZWUgYml0cworCQlSRVRJTlNUUihtb3YscGMsbHIpCisKK0VOVFJZKF9maW5kX25leHRfemVyb19iaXRfYmUpCisJCXRlcQlyMSwgIzAKKwkJYmVxCTNiCisJCWFuZHMJaXAsIHIyLCAjNworCQliZXEJMWIJCQlAIElmIG5ldyBieXRlLCBnb3RvIG9sZCByb3V0aW5lCisJCWVvcglyMywgcjIsICMweDE4CQlAIGJpZyBlbmRpYW4gYnl0ZSBvcmRlcmluZworCQlsZHJiCXIzLCBbcjAsIHIzLCBsc3IgIzNdCisJCWVvcglyMywgcjMsICMweGZmCQlAIG5vdyBsb29raW5nIGZvciBhIDEgYml0CisJCW1vdnMJcjMsIHIzLCBsc3IgaXAJCUAgc2hpZnQgb2ZmIHVudXNlZCBiaXRzCisJCWJuZQkuZm91bmQKKwkJb3JyCXIyLCByMiwgIzcJCUAgaWYgemVybywgdGhlbiBubyBiaXRzIGhlcmUKKwkJYWRkCXIyLCByMiwgIzEJCUAgYWxpZ24gYml0IHBvaW50ZXIKKwkJYgkyYgkJCUAgbG9vcCBmb3IgbmV4dCBiaXQKKworRU5UUlkoX2ZpbmRfZmlyc3RfYml0X2JlKQorCQl0ZXEJcjEsICMwCisJCWJlcQkzZgorCQltb3YJcjIsICMwCisxOgkJZW9yCXIzLCByMiwgIzB4MTgJCUAgYmlnIGVuZGlhbiBieXRlIG9yZGVyaW5nCisJCWxkcmIJcjMsIFtyMCwgcjMsIGxzciAjM10KKwkJbW92cwlyMywgcjMKKwkJYm5lCS5mb3VuZAkJCUAgYW55IG5vdyBzZXQgLSBmb3VuZCB6ZXJvIGJpdAorCQlhZGQJcjIsIHIyLCAjOAkJQCBuZXh0IGJpdCBwb2ludGVyCisyOgkJY21wCXIyLCByMQkJCUAgYW55IG1vcmU/CisJCWJsbwkxYgorMzoJCW1vdglyMCwgcjEJCQlAIG5vIGZyZWUgYml0cworCQlSRVRJTlNUUihtb3YscGMsbHIpCisKK0VOVFJZKF9maW5kX25leHRfYml0X2JlKQorCQl0ZXEJcjEsICMwCisJCWJlcQkzYgorCQlhbmRzCWlwLCByMiwgIzcKKwkJYmVxCTFiCQkJQCBJZiBuZXcgYnl0ZSwgZ290byBvbGQgcm91dGluZQorCQllb3IJcjMsIHIyLCAjMHgxOAkJQCBiaWcgZW5kaWFuIGJ5dGUgb3JkZXJpbmcKKwkJbGRyYglyMywgW3IwLCByMywgbHNyICMzXQorCQltb3ZzCXIzLCByMywgbHNyIGlwCQlAIHNoaWZ0IG9mZiB1bnVzZWQgYml0cworCQlibmUJLmZvdW5kCisJCW9ycglyMiwgcjIsICM3CQlAIGlmIHplcm8sIHRoZW4gbm8gYml0cyBoZXJlCisJCWFkZAlyMiwgcjIsICMxCQlAIGFsaWduIGJpdCBwb2ludGVyCisJCWIJMmIJCQlAIGxvb3AgZm9yIG5leHQgYml0CisKKyNlbmRpZgorCisvKgorICogT25lIG9yIG1vcmUgYml0cyBpbiB0aGUgTFNCIG9mIHIzIGFyZSBhc3N1bWVkIHRvIGJlIHNldC4KKyAqLworLmZvdW5kOgorI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA1CisJCXJzYglyMSwgcjMsICMwCisJCWFuZAlyMywgcjMsIHIxCisJCWNseglyMywgcjMKKwkJcnNiCXIzLCByMywgIzMxCisJCWFkZAlyMCwgcjIsIHIzCisjZWxzZQorCQl0c3QJcjMsICMweDBmCisJCWFkZGVxCXIyLCByMiwgIzQKKwkJbW92bmUJcjMsIHIzLCBsc2wgIzQKKwkJdHN0CXIzLCAjMHgzMAorCQlhZGRlcQlyMiwgcjIsICMyCisJCW1vdm5lCXIzLCByMywgbHNsICMyCisJCXRzdAlyMywgIzB4NDAKKwkJYWRkZXEJcjIsIHIyLCAjMQorCQltb3YJcjAsIHIyCisjZW5kaWYKKwkJUkVUSU5TVFIobW92LHBjLGxyKQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvZmxvcHB5ZG1hLlMgYi9hcmNoL2FybS9saWIvZmxvcHB5ZG1hLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE3MTUwYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2xpYi9mbG9wcHlkbWEuUwpAQCAtMCwwICsxLDMyIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2xpYi9mbG9wcHlkbWEuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisJCS50ZXh0CisKKwkJLmdsb2JhbAlmbG9wcHlfZmlxaW5fZW5kCitFTlRSWShmbG9wcHlfZmlxaW5fc3RhcnQpCisJCXN1YnMJcjksIHI5LCAjMQorCQlsZHJndGIJcjEyLCBbcjExLCAjLTRdCisJCWxkcmxlYglyMTIsIFtyMTFdLCAjMAorCQlzdHJiCXIxMiwgW3IxMF0sICMxCisJCXN1YnMJcGMsIGxyLCAjNAorZmxvcHB5X2ZpcWluX2VuZDoKKworCQkuZ2xvYmFsCWZsb3BweV9maXFvdXRfZW5kCitFTlRSWShmbG9wcHlfZmlxb3V0X3N0YXJ0KQorCQlzdWJzCXI5LCByOSwgIzEKKwkJbGRyZ2ViCXIxMiwgW3IxMF0sICMxCisJCW1vdmx0CXIxMiwgIzAKKwkJc3RybGViCXIxMiwgW3IxMV0sICMwCisJCXN1YmxlcwlwYywgbHIsICM0CisJCXN0cmIJcjEyLCBbcjExLCAjLTRdCisJCXN1YnMJcGMsIGxyLCAjNAorZmxvcHB5X2ZpcW91dF9lbmQ6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvZ2NjbGliLmggYi9hcmNoL2FybS9saWIvZ2NjbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUzMTRhMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2xpYi9nY2NsaWIuaApAQCAtMCwwICsxLDI1IEBACisvKiBnY2NsaWIuaCAtLSBkZWZpbml0aW9ucyBmb3IgdmFyaW91cyBmdW5jdGlvbnMgJ2JvcnJvd2VkJyBmcm9tIGdjYy0yLjk1LjMgKi8KKy8qIEkgTW9sdG9uICAgICAyOS8wNy8wMSAqLworCisjZGVmaW5lIEJJVFNfUEVSX1VOSVQgIDgKKyNkZWZpbmUgU0lfVFlQRV9TSVpFIChzaXplb2YgKFNJdHlwZSkgKiBCSVRTX1BFUl9VTklUKQorCit0eXBlZGVmIHVuc2lnbmVkIGludCBVUUl0eXBlICAgIF9fYXR0cmlidXRlX18gKChtb2RlIChRSSkpKTsKK3R5cGVkZWYgICAgICAgICAgaW50IFNJdHlwZSAgICAgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKFNJKSkpOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgVVNJdHlwZSAgICBfX2F0dHJpYnV0ZV9fICgobW9kZSAoU0kpKSk7Cit0eXBlZGVmICAgICAgICAgIGludCBESXR5cGUgICAgIF9fYXR0cmlidXRlX18gKChtb2RlIChESSkpKTsKK3R5cGVkZWYgICAgICAgICAgaW50IHdvcmRfdHlwZSAJX19hdHRyaWJ1dGVfXyAoKG1vZGUgKF9fd29yZF9fKSkpOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgVURJdHlwZSAgICBfX2F0dHJpYnV0ZV9fICgobW9kZSAoREkpKSk7CisKKyNpZmRlZiBfX0FSTUVCX18KKyAgc3RydWN0IERJc3RydWN0IHtTSXR5cGUgaGlnaCwgbG93O307CisjZWxzZQorICBzdHJ1Y3QgRElzdHJ1Y3Qge1NJdHlwZSBsb3csIGhpZ2g7fTsKKyNlbmRpZgorCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdCBESXN0cnVjdCBzOworICBESXR5cGUgbGw7Cit9IERJdW5pb247CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9nZXR1c2VyLlMgYi9hcmNoL2FybS9saWIvZ2V0dXNlci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YWE2ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9saWIvZ2V0dXNlci5TCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbGliL2dldHVzZXIuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgSWRlYSBmcm9tIHg4NiB2ZXJzaW9uLCAoQykgQ29weXJpZ2h0IDE5OTggTGludXMgVG9ydmFsZHMKKyAqCisgKiBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIG5vbi1zdGFuZGFyZCBjYWxsIGludGVyZmFjZSB0byBtYWtlIHRoZW0gbW9yZQorICogZWZmaWNpZW50LCBlc3BlY2lhbGx5IGFzIHRoZXkgcmV0dXJuIGFuIGVycm9yIHZhbHVlIGluIGFkZGl0aW9uIHRvCisgKiB0aGUgInJlYWwiIHJldHVybiB2YWx1ZS4KKyAqCisgKiBfX2dldF91c2VyX1gKKyAqCisgKiBJbnB1dHM6CXIwIGNvbnRhaW5zIHRoZSBhZGRyZXNzCisgKiBPdXRwdXRzOglyMCBpcyB0aGUgZXJyb3IgY29kZQorICoJCXIyLCByMyBjb250YWlucyB0aGUgemVyby1leHRlbmRlZCB2YWx1ZQorICoJCWxyIGNvcnJ1cHRlZAorICoKKyAqIE5vIG90aGVyIHJlZ2lzdGVycyBtdXN0IGJlIGFsdGVyZWQuICAoc2VlIGluY2x1ZGUvYXNtLWFybS91YWNjZXNzLmgKKyAqIGZvciBzcGVjaWZpYyBBU00gcmVnaXN0ZXIgdXNhZ2UpLgorICoKKyAqIE5vdGUgdGhhdCBBRERSX0xJTUlUIGlzIGVpdGhlciAwIG9yIDB4YzAwMDAwMDAuCisgKiBOb3RlIGFsc28gdGhhdCBpdCBpcyBpbnRlbmRlZCB0aGF0IF9fZ2V0X3VzZXJfYmFkIGlzIG5vdCBnbG9iYWwuCisgKi8KKyNpbmNsdWRlIDxhc20vY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisKKwkuZ2xvYmFsCV9fZ2V0X3VzZXJfMQorX19nZXRfdXNlcl8xOgorMToJbGRyYnQJcjIsIFtyMF0KKwltb3YJcjAsICMwCisJbW92CXBjLCBscgorCisJLmdsb2JhbAlfX2dldF91c2VyXzIKK19fZ2V0X3VzZXJfMjoKKzI6CWxkcmJ0CXIyLCBbcjBdLCAjMQorMzoJbGRyYnQJcjMsIFtyMF0KKyNpZm5kZWYgX19BUk1FQl9fCisJb3JyCXIyLCByMiwgcjMsIGxzbCAjOAorI2Vsc2UKKwlvcnIJcjIsIHIzLCByMiwgbHNsICM4CisjZW5kaWYKKwltb3YJcjAsICMwCisJbW92CXBjLCBscgorCisJLmdsb2JhbAlfX2dldF91c2VyXzQKK19fZ2V0X3VzZXJfNDoKKzQ6CWxkcnQJcjIsIFtyMF0KKwltb3YJcjAsICMwCisJbW92CXBjLCBscgorCisJLmdsb2JhbAlfX2dldF91c2VyXzgKK19fZ2V0X3VzZXJfODoKKzU6CWxkcnQJcjIsIFtyMF0sICM0Cis2OglsZHJ0CXIzLCBbcjBdCisJbW92CXIwLCAjMAorCW1vdglwYywgbHIKKworX19nZXRfdXNlcl9iYWRfODoKKwltb3YJcjMsICMwCitfX2dldF91c2VyX2JhZDoKKwltb3YJcjIsICMwCisJbW92CXIwLCAjLUVGQVVMVAorCW1vdglwYywgbHIKKworLnNlY3Rpb24gX19leF90YWJsZSwgImEiCisJLmxvbmcJMWIsIF9fZ2V0X3VzZXJfYmFkCisJLmxvbmcJMmIsIF9fZ2V0X3VzZXJfYmFkCisJLmxvbmcJM2IsIF9fZ2V0X3VzZXJfYmFkCisJLmxvbmcJNGIsIF9fZ2V0X3VzZXJfYmFkCisJLmxvbmcJNWIsIF9fZ2V0X3VzZXJfYmFkXzgKKwkubG9uZwk2YiwgX19nZXRfdXNlcl9iYWRfOAorLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvaW8tYWNvcm4uUyBiL2FyY2gvYXJtL2xpYi9pby1hY29ybi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYWNkMDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9saWIvaW8tYWNvcm4uUwpAQCAtMCwwICsxLDMyIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2xpYi9pby1hY29ybi5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIDI3LzAzLzAzIElhbiBNb2x0b24gQ2xlYW4gdXAgQ09ORklHX0NQVQorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKwkJLnRleHQKKwkJLmFsaWduCisKKy5pb3NsX3dhcm5pbmc6CisJCS5hc2NpaQkiPDQ+aW5zbC9vdXRzbCBub3QgaW1wbGVtZW50ZWQsIGNhbGxlZCBmcm9tICUwOGxYXDAiCisJCS5hbGlnbgorCisvKgorICogVGhlc2UgbWFrZSBubyBzZW5zZSBvbiBBY29ybiBtYWNoaW5lcy4KKyAqIFByaW50IGEgd2FybmluZyBtZXNzYWdlLgorICovCitFTlRSWShpbnNsKQorRU5UUlkob3V0c2wpCisJCWFkcglyMCwgLmlvc2xfd2FybmluZworCQltb3YJcjEsIGxyCisJCWIJcHJpbnRrCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvaW8tcmVhZHNiLlMgYi9hcmNoL2FybS9saWIvaW8tcmVhZHNiLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgxZWY3NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2xpYi9pby1yZWFkc2IuUwpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9saWIvaW8tcmVhZHNiLlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDAgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisKKy5pbnNiX2FsaWduOglyc2IJaXAsIGlwLCAjNAorCQljbXAJaXAsIHIyCisJCW1vdmd0CWlwLCByMgorCQljbXAJaXAsICMyCisJCWxkcmIJcjMsIFtyMF0KKwkJc3RyYglyMywgW3IxXSwgIzEKKwkJbGRyZ2ViCXIzLCBbcjBdCisJCXN0cmdlYglyMywgW3IxXSwgIzEKKwkJbGRyZ3RiCXIzLCBbcjBdCisJCXN0cmd0YglyMywgW3IxXSwgIzEKKwkJc3VicwlyMiwgcjIsIGlwCisJCWJuZQkuaW5zYl9hbGlnbmVkCisKK0VOVFJZKF9fcmF3X3JlYWRzYikKKwkJdGVxCXIyLCAjMAkJQCBkbyB3ZSBoYXZlIHRvIGNoZWNrIGZvciB0aGUgemVybyBsZW4/CisJCW1vdmVxCXBjLCBscgorCQlhbmRzCWlwLCByMSwgIzMKKwkJYm5lCS5pbnNiX2FsaWduCisKKy5pbnNiX2FsaWduZWQ6CXN0bWZkCXNwISwge3I0IC0gcjYsIGxyfQorCisJCXN1YnMJcjIsIHIyLCAjMTYKKwkJYm1pCS5pbnNiX25vXzE2CisKKy5pbnNiXzE2X2xwOglsZHJiCXIzLCBbcjBdCisJCWxkcmIJcjQsIFtyMF0KKwkJbGRyYglyNSwgW3IwXQorCQltb3YJcjMsIHIzLCAgICAgcHV0X2J5dGVfMAorCQlsZHJiCXI2LCBbcjBdCisJCW9ycglyMywgcjMsIHI0LCBwdXRfYnl0ZV8xCisJCWxkcmIJcjQsIFtyMF0KKwkJb3JyCXIzLCByMywgcjUsIHB1dF9ieXRlXzIKKwkJbGRyYglyNSwgW3IwXQorCQlvcnIJcjMsIHIzLCByNiwgcHV0X2J5dGVfMworCQlsZHJiCXI2LCBbcjBdCisJCW1vdglyNCwgcjQsICAgICBwdXRfYnl0ZV8wCisJCWxkcmIJaXAsIFtyMF0KKwkJb3JyCXI0LCByNCwgcjUsIHB1dF9ieXRlXzEKKwkJbGRyYglyNSwgW3IwXQorCQlvcnIJcjQsIHI0LCByNiwgcHV0X2J5dGVfMgorCQlsZHJiCXI2LCBbcjBdCisJCW9ycglyNCwgcjQsIGlwLCBwdXRfYnl0ZV8zCisJCWxkcmIJaXAsIFtyMF0KKwkJbW92CXI1LCByNSwgICAgIHB1dF9ieXRlXzAKKwkJbGRyYglsciwgW3IwXQorCQlvcnIJcjUsIHI1LCByNiwgcHV0X2J5dGVfMQorCQlsZHJiCXI2LCBbcjBdCisJCW9ycglyNSwgcjUsIGlwLCBwdXRfYnl0ZV8yCisJCWxkcmIJaXAsIFtyMF0KKwkJb3JyCXI1LCByNSwgbHIsIHB1dF9ieXRlXzMKKwkJbGRyYglsciwgW3IwXQorCQltb3YJcjYsIHI2LCAgICAgcHV0X2J5dGVfMAorCQlvcnIJcjYsIHI2LCBpcCwgcHV0X2J5dGVfMQorCQlsZHJiCWlwLCBbcjBdCisJCW9ycglyNiwgcjYsIGxyLCBwdXRfYnl0ZV8yCisJCW9ycglyNiwgcjYsIGlwLCBwdXRfYnl0ZV8zCisJCXN0bWlhCXIxISwge3IzIC0gcjZ9CisKKwkJc3VicwlyMiwgcjIsICMxNgorCQlicGwJLmluc2JfMTZfbHAKKworCQl0c3QJcjIsICMxNQorCQlMT0FEUkVHUyhlcWZkLCBzcCEsIHtyNCAtIHI2LCBwY30pCisKKy5pbnNiX25vXzE2Ogl0c3QJcjIsICM4CisJCWJlcQkuaW5zYl9ub184CisKKwkJbGRyYglyMywgW3IwXQorCQlsZHJiCXI0LCBbcjBdCisJCWxkcmIJcjUsIFtyMF0KKwkJbW92CXIzLCByMywgICAgIHB1dF9ieXRlXzAKKwkJbGRyYglyNiwgW3IwXQorCQlvcnIJcjMsIHIzLCByNCwgcHV0X2J5dGVfMQorCQlsZHJiCXI0LCBbcjBdCisJCW9ycglyMywgcjMsIHI1LCBwdXRfYnl0ZV8yCisJCWxkcmIJcjUsIFtyMF0KKwkJb3JyCXIzLCByMywgcjYsIHB1dF9ieXRlXzMKKwkJbGRyYglyNiwgW3IwXQorCQltb3YJcjQsIHI0LCAgICAgcHV0X2J5dGVfMAorCQlsZHJiCWlwLCBbcjBdCisJCW9ycglyNCwgcjQsIHI1LCBwdXRfYnl0ZV8xCisJCW9ycglyNCwgcjQsIHI2LCBwdXRfYnl0ZV8yCisJCW9ycglyNCwgcjQsIGlwLCBwdXRfYnl0ZV8zCisJCXN0bWlhCXIxISwge3IzLCByNH0KKworLmluc2Jfbm9fODoJdHN0CXIyLCAjNAorCQliZXEJLmluc2Jfbm9fNAorCisJCWxkcmIJcjMsIFtyMF0KKwkJbGRyYglyNCwgW3IwXQorCQlsZHJiCXI1LCBbcjBdCisJCWxkcmIJcjYsIFtyMF0KKwkJbW92CXIzLCByMywgICAgIHB1dF9ieXRlXzAKKwkJb3JyCXIzLCByMywgcjQsIHB1dF9ieXRlXzEKKwkJb3JyCXIzLCByMywgcjUsIHB1dF9ieXRlXzIKKwkJb3JyCXIzLCByMywgcjYsIHB1dF9ieXRlXzMKKwkJc3RyCXIzLCBbcjFdLCAjNAorCisuaW5zYl9ub180OglhbmRzCXIyLCByMiwgIzMKKwkJTE9BRFJFR1MoZXFmZCwgc3AhLCB7cjQgLSByNiwgcGN9KQorCisJCWNtcAlyMiwgIzIKKwkJbGRyYglyMywgW3IwXQorCQlzdHJiCXIzLCBbcjFdLCAjMQorCQlsZHJnZWIJcjMsIFtyMF0KKwkJc3RyZ2ViCXIzLCBbcjFdLCAjMQorCQlsZHJndGIJcjMsIFtyMF0KKwkJc3RyZ3RiCXIzLCBbcjFdCisKKwkJTE9BRFJFR1MoZmQsIHNwISwge3I0IC0gcjYsIHBjfSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9pby1yZWFkc2wuUyBiL2FyY2gvYXJtL2xpYi9pby1yZWFkc2wuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWE5MTIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbGliL2lvLXJlYWRzbC5TCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbGliL2lvLXJlYWRzbC5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NS0yMDAwIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorCitFTlRSWShfX3Jhd19yZWFkc2wpCisJCXRlcQlyMiwgIzAJCUAgZG8gd2UgaGF2ZSB0byBjaGVjayBmb3IgdGhlIHplcm8gbGVuPworCQltb3ZlcQlwYywgbHIKKwkJYW5kcwlpcCwgcjEsICMzCisJCWJuZQkzZgorCisJCXN1YnMJcjIsIHIyLCAjNAorCQlibWkJMmYKKwkJc3RtZmQJc3AhLCB7cjQsIGxyfQorMToJCWxkcglyMywgW3IwLCAjMF0KKwkJbGRyCXI0LCBbcjAsICMwXQorCQlsZHIJaXAsIFtyMCwgIzBdCisJCWxkcglsciwgW3IwLCAjMF0KKwkJc3VicwlyMiwgcjIsICM0CisJCXN0bWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQorCQlicGwJMWIKKwkJbGRtZmQJc3AhLCB7cjQsIGxyfQorMjoJCW1vdnMJcjIsIHIyLCBsc2wgIzMxCisJCWxkcmNzCXIzLCBbcjAsICMwXQorCQlsZHJjcwlpcCwgW3IwLCAjMF0KKwkJc3RtY3NpYQlyMSEsIHtyMywgaXB9CisJCWxkcm5lCXIzLCBbcjAsICMwXQorCQlzdHJuZQlyMywgW3IxLCAjMF0KKwkJbW92CXBjLCBscgorCiszOgkJbGRyCXIzLCBbcjBdCisJCWNtcAlpcCwgIzIKKwkJbW92CWlwLCByMywgZ2V0X2J5dGVfMAorCQlzdHJiCWlwLCBbcjFdLCAjMQorCQliZ3QJNmYKKwkJbW92CWlwLCByMywgZ2V0X2J5dGVfMQorCQlzdHJiCWlwLCBbcjFdLCAjMQorCQliZXEJNWYKKwkJbW92CWlwLCByMywgZ2V0X2J5dGVfMgorCQlzdHJiCWlwLCBbcjFdLCAjMQorCis0OgkJc3VicwlyMiwgcjIsICMxCisJCW1vdglpcCwgcjMsIHB1bGwgIzI0CisJCWxkcm5lCXIzLCBbcjBdCisJCW9ycm5lCWlwLCBpcCwgcjMsIHB1c2ggIzgKKwkJc3RybmUJaXAsIFtyMV0sICM0CisJCWJuZQk0YgorCQliCThmCisKKzU6CQlzdWJzCXIyLCByMiwgIzEKKwkJbW92CWlwLCByMywgcHVsbCAjMTYKKwkJbGRybmUJcjMsIFtyMF0KKwkJb3JybmUJaXAsIGlwLCByMywgcHVzaCAjMTYKKwkJc3RybmUJaXAsIFtyMV0sICM0CisJCWJuZQk1YgorCQliCTdmCisKKzY6CQlzdWJzCXIyLCByMiwgIzEKKwkJbW92CWlwLCByMywgcHVsbCAjOAorCQlsZHJuZQlyMywgW3IwXQorCQlvcnJuZQlpcCwgaXAsIHIzLCBwdXNoICMyNAorCQlzdHJuZQlpcCwgW3IxXSwgIzQKKwkJYm5lCTZiCisKKwkJbW92CXIzLCBpcCwgZ2V0X2J5dGVfMgorCQlzdHJiCXIzLCBbcjEsICMyXQorNzoJCW1vdglyMywgaXAsIGdldF9ieXRlXzEKKwkJc3RyYglyMywgW3IxLCAjMV0KKzg6CQltb3YJcjMsIGlwLCBnZXRfYnl0ZV8wCisJCXN0cmIJcjMsIFtyMSwgIzBdCisJCW1vdglwYywgbHIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9pby1yZWFkc3ctYXJtdjMuUyBiL2FyY2gvYXJtL2xpYi9pby1yZWFkc3ctYXJtdjMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzZjZjdmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbGliL2lvLXJlYWRzdy1hcm12My5TCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2xpYi9pby1yZWFkc3ctYXJtdjMuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMCBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLmluc3dfYmFkX2FsaWdubWVudDoKKwkJYWRyCXIwLCAuaW5zd19iYWRfYWxpZ25fbXNnCisJCW1vdglyMiwgbHIKKwkJYglwYW5pYworLmluc3dfYmFkX2FsaWduX21zZzoKKwkJLmFzY2l6CSJpbnN3OiBiYWQgYnVmZmVyIGFsaWdubWVudCAoMHglcCwgbHI9MHglMDhsWClcbiIKKwkJLmFsaWduCisKKy5pbnN3X2FsaWduOgl0c3QJcjEsICMxCisJCWJuZQkuaW5zd19iYWRfYWxpZ25tZW50CisKKwkJbGRyCXIzLCBbcjBdCisJCXN0cmIJcjMsIFtyMV0sICMxCisJCW1vdglyMywgcjMsIGxzciAjOAorCQlzdHJiCXIzLCBbcjFdLCAjMQorCisJCXN1YnMJcjIsIHIyLCAjMQorCQlSRVRJTlNUUihtb3ZlcSwgcGMsIGxyKQorCitFTlRSWShfX3Jhd19yZWFkc3cpCisJCXRlcQlyMiwgIzAJCUAgZG8gd2UgaGF2ZSB0byBjaGVjayBmb3IgdGhlIHplcm8gbGVuPworCQltb3ZlcQlwYywgbHIKKwkJdHN0CXIxLCAjMworCQlibmUJLmluc3dfYWxpZ24KKworLmluc3dfYWxpZ25lZDoJbW92CWlwLCAjMHhmZgorCQlvcnIJaXAsIGlwLCBpcCwgbHNsICM4CisJCXN0bWZkCXNwISwge3I0LCByNSwgcjYsIGxyfQorCisJCXN1YnMJcjIsIHIyLCAjOAorCQlibWkJLm5vX2luc3dfOAorCisuaW5zd184X2xwOglsZHIJcjMsIFtyMF0KKwkJYW5kCXIzLCByMywgaXAKKwkJbGRyCXI0LCBbcjBdCisJCW9ycglyMywgcjMsIHI0LCBsc2wgIzE2CisKKwkJbGRyCXI0LCBbcjBdCisJCWFuZAlyNCwgcjQsIGlwCisJCWxkcglyNSwgW3IwXQorCQlvcnIJcjQsIHI0LCByNSwgbHNsICMxNgorCisJCWxkcglyNSwgW3IwXQorCQlhbmQJcjUsIHI1LCBpcAorCQlsZHIJcjYsIFtyMF0KKwkJb3JyCXI1LCByNSwgcjYsIGxzbCAjMTYKKworCQlsZHIJcjYsIFtyMF0KKwkJYW5kCXI2LCByNiwgaXAKKwkJbGRyCWxyLCBbcjBdCisJCW9ycglyNiwgcjYsIGxyLCBsc2wgIzE2CisKKwkJc3RtaWEJcjEhLCB7cjMgLSByNn0KKworCQlzdWJzCXIyLCByMiwgIzgKKwkJYnBsCS5pbnN3XzhfbHAKKworCQl0c3QJcjIsICM3CisJCUxPQURSRUdTKGVxZmQsIHNwISwge3I0LCByNSwgcjYsIHBjfSkKKworLm5vX2luc3dfODoJdHN0CXIyLCAjNAorCQliZXEJLm5vX2luc3dfNAorCisJCWxkcglyMywgW3IwXQorCQlhbmQJcjMsIHIzLCBpcAorCQlsZHIJcjQsIFtyMF0KKwkJb3JyCXIzLCByMywgcjQsIGxzbCAjMTYKKworCQlsZHIJcjQsIFtyMF0KKwkJYW5kCXI0LCByNCwgaXAKKwkJbGRyCXI1LCBbcjBdCisJCW9ycglyNCwgcjQsIHI1LCBsc2wgIzE2CisKKwkJc3RtaWEJcjEhLCB7cjMsIHI0fQorCisubm9faW5zd180Ogl0c3QJcjIsICMyCisJCWJlcQkubm9faW5zd18yCisKKwkJbGRyCXIzLCBbcjBdCisJCWFuZAlyMywgcjMsIGlwCisJCWxkcglyNCwgW3IwXQorCQlvcnIJcjMsIHIzLCByNCwgbHNsICMxNgorCisJCXN0cglyMywgW3IxXSwgIzQKKworLm5vX2luc3dfMjoJdHN0CXIyLCAjMQorCQlsZHJuZQlyMywgW3IwXQorCQlzdHJuZWIJcjMsIFtyMV0sICMxCisJCW1vdm5lCXIzLCByMywgbHNyICM4CisJCXN0cm5lYglyMywgW3IxXQorCisJCUxPQURSRUdTKGZkLCBzcCEsIHtyNCwgcjUsIHI2LCBwY30pCisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2lvLXJlYWRzdy1hcm12NC5TIGIvYXJjaC9hcm0vbGliL2lvLXJlYWRzdy1hcm12NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MmI2NmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9saWIvaW8tcmVhZHN3LWFybXY0LlMKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbGliL2lvLXJlYWRzdy1hcm12NC5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NS0yMDAwIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorCisJCS5tYWNybwlwYWNrLCByZCwgaHcxLCBodzIKKyNpZm5kZWYgX19BUk1FQl9fCisJCW9ycglccmQsIFxodzEsIFxodzIsIGxzbCAjMTYKKyNlbHNlCisJCW9ycglccmQsIFxodzIsIFxodzEsIGxzbCAjMTYKKyNlbmRpZgorCQkuZW5kbQorCisuaW5zd19hbGlnbjoJbW92cwlpcCwgcjEsIGxzbCAjMzEKKwkJYm5lCS5pbnN3X25vYWxpZ24KKwkJbGRyaAlpcCwgW3IwXQorCQlzdWIJcjIsIHIyLCAjMQorCQlzdHJoCWlwLCBbcjFdLCAjMgorCitFTlRSWShfX3Jhd19yZWFkc3cpCisJCXRlcQlyMiwgIzAKKwkJbW92ZXEJcGMsIGxyCisJCXRzdAlyMSwgIzMKKwkJYm5lCS5pbnN3X2FsaWduCisKKwkJc3RtZmQJc3AhLCB7cjQsIHI1LCBscn0KKworCQlzdWJzCXIyLCByMiwgIzgKKwkJYm1pCS5ub19pbnN3XzgKKworLmluc3dfOF9scDoJbGRyaAlyMywgW3IwXQorCQlsZHJoCXI0LCBbcjBdCisJCXBhY2sJcjMsIHIzLCByNAorCisJCWxkcmgJcjQsIFtyMF0KKwkJbGRyaAlyNSwgW3IwXQorCQlwYWNrCXI0LCByNCwgcjUKKworCQlsZHJoCXI1LCBbcjBdCisJCWxkcmgJaXAsIFtyMF0KKwkJcGFjawlyNSwgcjUsIGlwCisKKwkJbGRyaAlpcCwgW3IwXQorCQlsZHJoCWxyLCBbcjBdCisJCXBhY2sJaXAsIGlwLCBscgorCisJCXN1YnMJcjIsIHIyLCAjOAorCQlzdG1pYQlyMSEsIHtyMyAtIHI1LCBpcH0KKwkJYnBsCS5pbnN3XzhfbHAKKworLm5vX2luc3dfODoJdHN0CXIyLCAjNAorCQliZXEJLm5vX2luc3dfNAorCisJCWxkcmgJcjMsIFtyMF0KKwkJbGRyaAlyNCwgW3IwXQorCQlwYWNrCXIzLCByMywgcjQKKworCQlsZHJoCXI0LCBbcjBdCisJCWxkcmgJaXAsIFtyMF0KKwkJcGFjawlyNCwgcjQsIGlwCisKKwkJc3RtaWEJcjEhLCB7cjMsIHI0fQorCisubm9faW5zd180Ogltb3ZzCXIyLCByMiwgbHNsICMzMQorCQliY2MJLm5vX2luc3dfMgorCisJCWxkcmgJcjMsIFtyMF0KKwkJbGRyaAlpcCwgW3IwXQorCQlwYWNrCXIzLCByMywgaXAKKwkJc3RyCXIzLCBbcjFdLCAjNAorCisubm9faW5zd18yOglsZHJuZWgJcjMsIFtyMF0KKwkJc3RybmVoCXIzLCBbcjFdCisKKwkJbGRtZmQJc3AhLCB7cjQsIHI1LCBwY30KKworI2lmZGVmIF9fQVJNRUJfXworI2RlZmluZSBfQkVfT05MWV8oY29kZS4uLikJY29kZQorI2RlZmluZSBfTEVfT05MWV8oY29kZS4uLikKKyNkZWZpbmUgcHVzaF9oYnl0ZTAJCWxzciAjOAorI2RlZmluZSBwdWxsX2hieXRlMQkJbHNsICMyNAorI2Vsc2UKKyNkZWZpbmUgX0JFX09OTFlfKGNvZGUuLi4pCisjZGVmaW5lIF9MRV9PTkxZXyhjb2RlLi4uKSBjb2RlCisjZGVmaW5lIHB1c2hfaGJ5dGUwCQlsc2wgIzI0CisjZGVmaW5lIHB1bGxfaGJ5dGUxCQlsc3IgIzgKKyNlbmRpZgorCisuaW5zd19ub2FsaWduOglzdG1mZAlzcCEsIHtyNCwgbHJ9CisJCWxkcmNjYglpcCwgW3IxLCAjLTFdIQorCQliY2MJMWYKKworCQlsZHJoCWlwLCBbcjBdCisJCXN1YglyMiwgcjIsICMxCisgICBfQkVfT05MWV8oCW1vdglpcCwgaXAsIHJvciAjOAkJKQorCQlzdHJiCWlwLCBbcjFdLCAjMQorICAgX0xFX09OTFlfKAltb3YJaXAsIGlwLCBsc3IgIzgJCSkKKyAgIF9CRV9PTkxZXygJbW92CWlwLCBpcCwgbHNyICMyNAkJKQorCisxOgkJc3VicwlyMiwgcjIsICMyCisJCWJtaQkzZgorICAgX0JFX09OTFlfKAltb3YJaXAsIGlwLCBsc2wgIzI0CQkpCisKKzI6CQlsZHJoCXIzLCBbcjBdCisJCWxkcmgJcjQsIFtyMF0KKwkJc3VicwlyMiwgcjIsICMyCisJCW9ycglpcCwgaXAsIHIzLCBsc2wgIzgKKwkJb3JyCWlwLCBpcCwgcjQsIHB1c2hfaGJ5dGUwCisJCXN0cglpcCwgW3IxXSwgIzQKKwkJbW92CWlwLCByNCwgcHVsbF9oYnl0ZTEKKwkJYnBsCTJiCisKKyAgIF9CRV9PTkxZXygJbW92CWlwLCBpcCwgbHNyICMyNAkJKQorCiszOgkJdHN0CXIyLCAjMQorCQlzdHJiCWlwLCBbcjFdLCAjMQorCQlsZHJuZWgJaXAsIFtyMF0KKyAgIF9CRV9PTkxZXygJbW92bmUJaXAsIGlwLCByb3IgIzgJCSkKKwkJc3RybmViCWlwLCBbcjFdLCAjMQorICAgX0xFX09OTFlfKAltb3ZuZQlpcCwgaXAsIGxzciAjOAkJKQorICAgX0JFX09OTFlfKAltb3ZuZQlpcCwgaXAsIGxzciAjMjQJCSkKKwkJc3RybmViCWlwLCBbcjFdCisJCWxkbWZkCXNwISwge3I0LCBwY30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9pby1zaGFyay5jIGIvYXJjaC9hcm0vbGliL2lvLXNoYXJrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4ZDQ1NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2xpYi9pby1zaGFyay5jCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbGliL2lvLXNoYXJrLmMKKyAqCisgKiAgYnkgQWxleGFuZGVyIFNjaHVsegorICoKKyAqIGRlcml2ZWQgZnJvbToKKyAqIGxpbnV4L2FyY2gvYXJtL2xpYi9pby1lYnNhLlMKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKwordm9pZCBwcmludF93YXJuaW5nKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiaW5zPy9vdXRzPyBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBhcmNoaXRlY3R1cmVcbiIpOworfQorCit2b2lkIGluc2wodW5zaWduZWQgaW50IHBvcnQsIHZvaWQgKnRvLCBpbnQgbGVuKQoreworCXByaW50X3dhcm5pbmcoKTsKK30KKwordm9pZCBpbnNiKHVuc2lnbmVkIGludCBwb3J0LCB2b2lkICp0bywgaW50IGxlbikKK3sKKwlwcmludF93YXJuaW5nKCk7Cit9CisKK3ZvaWQgb3V0c2wodW5zaWduZWQgaW50IHBvcnQsIGNvbnN0IHZvaWQgKmZyb20sIGludCBsZW4pCit7CisJcHJpbnRfd2FybmluZygpOworfQorCit2b2lkIG91dHNiKHVuc2lnbmVkIGludCBwb3J0LCBjb25zdCB2b2lkICpmcm9tLCBpbnQgbGVuKQoreworCXByaW50X3dhcm5pbmcoKTsKK30KKworLyogdGhlc2Ugc2hvdWxkIGJlIGluIGFzc2VtYmxlciBhZ2FpbiAqLworCisvKgorICogUHVycG9zZTogcmVhZCBhIGJsb2NrIG9mIGRhdGEgZnJvbSBhIGhhcmR3YXJlIHJlZ2lzdGVyIHRvIG1lbW9yeS4KKyAqIFByb3RvICA6IGluc3coaW50IGZyb21fcG9ydCwgdm9pZCAqdG8sIGludCBsZW5faW5fd29yZHMpOworICogUHJvdG8gIDogaW5zd2IoaW50IGZyb21fcG9ydCwgdm9pZCAqdG8sIGludCBsZW5faW5fYnl0ZXMpOworICogTm90ZXMgIDogaW5jcmVtZW50IHRvCisgKi8KKwordm9pZCBpbnN3KHVuc2lnbmVkIGludCBwb3J0LCB2b2lkICp0bywgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJKCh1bnNpZ25lZCBzaG9ydCAqKSB0bylbaV0gPSBpbncocG9ydCk7Cit9CisKK3ZvaWQgaW5zd2IodW5zaWduZWQgaW50IHBvcnQsIHZvaWQgKnRvLCBpbnQgbGVuKQoreworCWluc3cocG9ydCwgdG8sIGxlbiA+PiAyKTsKK30KKworLyoKKyAqIFB1cnBvc2U6IHdyaXRlIGEgYmxvY2sgb2YgZGF0YSBmcm9tIG1lbW9yeSB0byBhIGhhcmR3YXJlIHJlZ2lzdGVyLgorICogUHJvdG8gIDogb3V0c3coaW50IHRvX3JlZywgdm9pZCAqZnJvbSwgaW50IGxlbl9pbl93b3Jkcyk7CisgKiBQcm90byAgOiBvdXRzd2IoaW50IHRvX3JlZywgdm9pZCAqZnJvbSwgaW50IGxlbl9pbl9ieXRlcyk7CisgKiBOb3RlcyAgOiBpbmNyZW1lbnRzIGZyb20KKyAqLworCit2b2lkIG91dHN3KHVuc2lnbmVkIGludCBwb3J0LCBjb25zdCB2b2lkICpmcm9tLCBpbnQgbGVuKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlvdXR3KCgodW5zaWduZWQgc2hvcnQgKikgZnJvbSlbaV0sIHBvcnQpOworfQorCit2b2lkIG91dHN3Yih1bnNpZ25lZCBpbnQgcG9ydCwgY29uc3Qgdm9pZCAqZnJvbSwgaW50IGxlbikKK3sKKwlvdXRzdyhwb3J0LCBmcm9tLCBsZW4gPj4gMik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvaW8td3JpdGVzYi5TIGIvYXJjaC9hcm0vbGliL2lvLXdyaXRlc2IuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGIyNTYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbGliL2lvLXdyaXRlc2IuUwpAQCAtMCwwICsxLDkyIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2xpYi9pby13cml0ZXNiLlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDAgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisKKwkJLm1hY3JvCW91dHdvcmQsIHJkCisjaWZuZGVmIF9fQVJNRUJfXworCQlzdHJiCVxyZCwgW3IwXQorCQltb3YJXHJkLCBccmQsIGxzciAjOAorCQlzdHJiCVxyZCwgW3IwXQorCQltb3YJXHJkLCBccmQsIGxzciAjOAorCQlzdHJiCVxyZCwgW3IwXQorCQltb3YJXHJkLCBccmQsIGxzciAjOAorCQlzdHJiCVxyZCwgW3IwXQorI2Vsc2UKKwkJbW92CWxyLCBccmQsIGxzciAjMjQKKwkJc3RyYglsciwgW3IwXQorCQltb3YJbHIsIFxyZCwgbHNyICMxNgorCQlzdHJiCWxyLCBbcjBdCisJCW1vdglsciwgXHJkLCBsc3IgIzgKKwkJc3RyYglsciwgW3IwXQorCQlzdHJiCVxyZCwgW3IwXQorI2VuZGlmCisJCS5lbmRtCisKKy5vdXRzYl9hbGlnbjoJcnNiCWlwLCBpcCwgIzQKKwkJY21wCWlwLCByMgorCQltb3ZndAlpcCwgcjIKKwkJY21wCWlwLCAjMgorCQlsZHJiCXIzLCBbcjFdLCAjMQorCQlzdHJiCXIzLCBbcjBdCisJCWxkcmdlYglyMywgW3IxXSwgIzEKKwkJc3RyZ2ViCXIzLCBbcjBdCisJCWxkcmd0YglyMywgW3IxXSwgIzEKKwkJc3RyZ3RiCXIzLCBbcjBdCisJCXN1YnMJcjIsIHIyLCBpcAorCQlibmUJLm91dHNiX2FsaWduZWQKKworRU5UUlkoX19yYXdfd3JpdGVzYikKKwkJdGVxCXIyLCAjMAkJQCBkbyB3ZSBoYXZlIHRvIGNoZWNrIGZvciB0aGUgemVybyBsZW4/CisJCW1vdmVxCXBjLCBscgorCQlhbmRzCWlwLCByMSwgIzMKKwkJYm5lCS5vdXRzYl9hbGlnbgorCisub3V0c2JfYWxpZ25lZDoJc3RtZmQJc3AhLCB7cjQsIHI1LCBscn0KKworCQlzdWJzCXIyLCByMiwgIzE2CisJCWJtaQkub3V0c2Jfbm9fMTYKKworLm91dHNiXzE2X2xwOglsZG1pYQlyMSEsIHtyMywgcjQsIHI1LCBpcH0KKwkJb3V0d29yZAlyMworCQlvdXR3b3JkCXI0CisJCW91dHdvcmQJcjUKKwkJb3V0d29yZAlpcAorCQlzdWJzCXIyLCByMiwgIzE2CisJCWJwbAkub3V0c2JfMTZfbHAKKworCQl0c3QJcjIsICMxNQorCQlMT0FEUkVHUyhlcWZkLCBzcCEsIHtyNCwgcjUsIHBjfSkKKworLm91dHNiX25vXzE2Ogl0c3QJcjIsICM4CisJCWJlcQkub3V0c2Jfbm9fOAorCisJCWxkbWlhCXIxISwge3IzLCByNH0KKwkJb3V0d29yZAlyMworCQlvdXR3b3JkCXI0CisKKy5vdXRzYl9ub184Ogl0c3QJcjIsICM0CisJCWJlcQkub3V0c2Jfbm9fNAorCisJCWxkcglyMywgW3IxXSwgIzQKKwkJb3V0d29yZAlyMworCisub3V0c2Jfbm9fNDoJYW5kcwlyMiwgcjIsICMzCisJCUxPQURSRUdTKGVxZmQsIHNwISwge3I0LCByNSwgcGN9KQorCisJCWNtcAlyMiwgIzIKKwkJbGRyYglyMywgW3IxXSwgIzEKKwkJc3RyYglyMywgW3IwXQorCQlsZHJnZWIJcjMsIFtyMV0sICMxCisJCXN0cmdlYglyMywgW3IwXQorCQlsZHJndGIJcjMsIFtyMV0KKwkJc3RyZ3RiCXIzLCBbcjBdCisKKwkJTE9BRFJFR1MoZmQsIHNwISwge3I0LCByNSwgcGN9KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2lvLXdyaXRlc2wuUyBiL2FyY2gvYXJtL2xpYi9pby13cml0ZXNsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhmMTRkZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2xpYi9pby13cml0ZXNsLlMKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9saWIvaW8td3JpdGVzbC5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NS0yMDAwIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorCitFTlRSWShfX3Jhd193cml0ZXNsKQorCQl0ZXEJcjIsICMwCQlAIGRvIHdlIGhhdmUgdG8gY2hlY2sgZm9yIHRoZSB6ZXJvIGxlbj8KKwkJbW92ZXEJcGMsIGxyCisJCWFuZHMJaXAsIHIxLCAjMworCQlibmUJM2YKKworCQlzdWJzCXIyLCByMiwgIzQKKwkJYm1pCTJmCisJCXN0bWZkCXNwISwge3I0LCBscn0KKzE6CQlsZG1pYQlyMSEsIHtyMywgcjQsIGlwLCBscn0KKwkJc3VicwlyMiwgcjIsICM0CisJCXN0cglyMywgW3IwLCAjMF0KKwkJc3RyCXI0LCBbcjAsICMwXQorCQlzdHIJaXAsIFtyMCwgIzBdCisJCXN0cglsciwgW3IwLCAjMF0KKwkJYnBsCTFiCisJCWxkbWZkCXNwISwge3I0LCBscn0KKzI6CQltb3ZzCXIyLCByMiwgbHNsICMzMQorCQlsZG1jc2lhCXIxISwge3IzLCBpcH0KKwkJc3RyY3MJcjMsIFtyMCwgIzBdCisJCWxkcm5lCXIzLCBbcjEsICMwXQorCQlzdHJjcwlpcCwgW3IwLCAjMF0KKwkJc3RybmUJcjMsIFtyMCwgIzBdCisJCW1vdglwYywgbHIKKworMzoJCWJpYwlyMSwgcjEsICMzCisJCWxkcglyMywgW3IxXSwgIzQKKwkJY21wCWlwLCAjMgorCQlibHQJNWYKKwkJYmd0CTZmCisKKzQ6CQltb3YJaXAsIHIzLCBwdWxsICMxNgorCQlsZHIJcjMsIFtyMV0sICM0CisJCXN1YnMJcjIsIHIyLCAjMQorCQlvcnIJaXAsIGlwLCByMywgcHVzaCAjMTYKKwkJc3RyCWlwLCBbcjBdCisJCWJuZQk0YgorCQltb3YJcGMsIGxyCisKKzU6CQltb3YJaXAsIHIzLCBwdWxsICM4CisJCWxkcglyMywgW3IxXSwgIzQKKwkJc3VicwlyMiwgcjIsICMxCisJCW9ycglpcCwgaXAsIHIzLCBwdXNoICMyNAorCQlzdHIJaXAsIFtyMF0KKwkJYm5lCTViCisJCW1vdglwYywgbHIKKworNjoJCW1vdglpcCwgcjMsIHB1bGwgIzI0CisJCWxkcglyMywgW3IxXSwgIzQKKwkJc3VicwlyMiwgcjIsICMxCisJCW9ycglpcCwgaXAsIHIzLCBwdXNoICM4CisJCXN0cglpcCwgW3IwXQorCQlibmUJNmIKKwkJbW92CXBjLCBscgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2lvLXdyaXRlc3ctYXJtdjMuUyBiL2FyY2gvYXJtL2xpYi9pby13cml0ZXN3LWFybXYzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUwZTdlMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2xpYi9pby13cml0ZXN3LWFybXYzLlMKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbGliL2lvLXdyaXRlc3ctYXJtdjMuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMCBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLm91dHN3X2JhZF9hbGlnbm1lbnQ6CisJCWFkcglyMCwgLm91dHN3X2JhZF9hbGlnbl9tc2cKKwkJbW92CXIyLCBscgorCQliCXBhbmljCisub3V0c3dfYmFkX2FsaWduX21zZzoKKwkJLmFzY2l6CSJvdXRzdzogYmFkIGJ1ZmZlciBhbGlnbm1lbnQgKDB4JXAsIGxyPTB4JTA4bFgpXG4iCisJCS5hbGlnbgorCisub3V0c3dfYWxpZ246CXRzdAlyMSwgIzEKKwkJYm5lCS5vdXRzd19iYWRfYWxpZ25tZW50CisKKwkJYWRkCXIxLCByMSwgIzIKKworCQlsZHIJcjMsIFtyMSwgIy00XQorCQltb3YJcjMsIHIzLCBsc3IgIzE2CisJCW9ycglyMywgcjMsIHIzLCBsc2wgIzE2CisJCXN0cglyMywgW3IwXQorCQlzdWJzCXIyLCByMiwgIzEKKwkJUkVUSU5TVFIobW92ZXEsIHBjLCBscikKKworRU5UUlkoX19yYXdfd3JpdGVzdykKKwkJdGVxCXIyLCAjMAkJQCBkbyB3ZSBoYXZlIHRvIGNoZWNrIGZvciB0aGUgemVybyBsZW4/CisJCW1vdmVxCXBjLCBscgorCQl0c3QJcjEsICMzCisJCWJuZQkub3V0c3dfYWxpZ24KKworLm91dHN3X2FsaWduZWQ6CXN0bWZkCXNwISwge3I0LCByNSwgcjYsIGxyfQorCisJCXN1YnMJcjIsIHIyLCAjOAorCQlibWkJLm5vX291dHN3XzgKKworLm91dHN3XzhfbHA6CWxkbWlhCXIxISwge3IzLCByNCwgcjUsIHI2fQorCisJCW1vdglpcCwgcjMsIGxzbCAjMTYKKwkJb3JyCWlwLCBpcCwgaXAsIGxzciAjMTYKKwkJc3RyCWlwLCBbcjBdCisKKwkJbW92CWlwLCByMywgbHNyICMxNgorCQlvcnIJaXAsIGlwLCBpcCwgbHNsICMxNgorCQlzdHIJaXAsIFtyMF0KKworCQltb3YJaXAsIHI0LCBsc2wgIzE2CisJCW9ycglpcCwgaXAsIGlwLCBsc3IgIzE2CisJCXN0cglpcCwgW3IwXQorCisJCW1vdglpcCwgcjQsIGxzciAjMTYKKwkJb3JyCWlwLCBpcCwgaXAsIGxzbCAjMTYKKwkJc3RyCWlwLCBbcjBdCisKKwkJbW92CWlwLCByNSwgbHNsICMxNgorCQlvcnIJaXAsIGlwLCBpcCwgbHNyICMxNgorCQlzdHIJaXAsIFtyMF0KKworCQltb3YJaXAsIHI1LCBsc3IgIzE2CisJCW9ycglpcCwgaXAsIGlwLCBsc2wgIzE2CisJCXN0cglpcCwgW3IwXQorCisJCW1vdglpcCwgcjYsIGxzbCAjMTYKKwkJb3JyCWlwLCBpcCwgaXAsIGxzciAjMTYKKwkJc3RyCWlwLCBbcjBdCisKKwkJbW92CWlwLCByNiwgbHNyICMxNgorCQlvcnIJaXAsIGlwLCBpcCwgbHNsICMxNgorCQlzdHIJaXAsIFtyMF0KKworCQlzdWJzCXIyLCByMiwgIzgKKwkJYnBsCS5vdXRzd184X2xwCisKKwkJdHN0CXIyLCAjNworCQlMT0FEUkVHUyhlcWZkLCBzcCEsIHtyNCwgcjUsIHI2LCBwY30pCisKKy5ub19vdXRzd184Ogl0c3QJcjIsICM0CisJCWJlcQkubm9fb3V0c3dfNAorCisJCWxkbWlhCXIxISwge3IzLCByNH0KKworCQltb3YJaXAsIHIzLCBsc2wgIzE2CisJCW9ycglpcCwgaXAsIGlwLCBsc3IgIzE2CisJCXN0cglpcCwgW3IwXQorCisJCW1vdglpcCwgcjMsIGxzciAjMTYKKwkJb3JyCWlwLCBpcCwgaXAsIGxzbCAjMTYKKwkJc3RyCWlwLCBbcjBdCisKKwkJbW92CWlwLCByNCwgbHNsICMxNgorCQlvcnIJaXAsIGlwLCBpcCwgbHNyICMxNgorCQlzdHIJaXAsIFtyMF0KKworCQltb3YJaXAsIHI0LCBsc3IgIzE2CisJCW9ycglpcCwgaXAsIGlwLCBsc2wgIzE2CisJCXN0cglpcCwgW3IwXQorCisubm9fb3V0c3dfNDoJdHN0CXIyLCAjMgorCQliZXEJLm5vX291dHN3XzIKKworCQlsZHIJcjMsIFtyMV0sICM0CisKKwkJbW92CWlwLCByMywgbHNsICMxNgorCQlvcnIJaXAsIGlwLCBpcCwgbHNyICMxNgorCQlzdHIJaXAsIFtyMF0KKworCQltb3YJaXAsIHIzLCBsc3IgIzE2CisJCW9ycglpcCwgaXAsIGlwLCBsc2wgIzE2CisJCXN0cglpcCwgW3IwXQorCisubm9fb3V0c3dfMjoJdHN0CXIyLCAjMQorCisJCWxkcm5lCXIzLCBbcjFdCisKKwkJbW92bmUJaXAsIHIzLCBsc2wgIzE2CisJCW9ycm5lCWlwLCBpcCwgaXAsIGxzciAjMTYKKwkJc3RybmUJaXAsIFtyMF0KKworCQlMT0FEUkVHUyhmZCwgc3AhLCB7cjQsIHI1LCByNiwgcGN9KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2lvLXdyaXRlc3ctYXJtdjQuUyBiL2FyY2gvYXJtL2xpYi9pby13cml0ZXN3LWFybXY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQxZDdjMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2xpYi9pby13cml0ZXN3LWFybXY0LlMKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9saWIvaW8td3JpdGVzdy1hcm12NC5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NS0yMDAwIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorCisJCS5tYWNybwlvdXR3b3JkLCByZAorI2lmbmRlZiBfX0FSTUVCX18KKwkJc3RyaAlccmQsIFtyMF0KKwkJbW92CVxyZCwgXHJkLCBsc3IgIzE2CisJCXN0cmgJXHJkLCBbcjBdCisjZWxzZQorCQltb3YJbHIsIFxyZCwgbHNyICMxNgorCQlzdHJoCWxyLCBbcjBdCisJCXN0cmgJXHJkLCBbcjBdCisjZW5kaWYKKwkJLmVuZG0KKworLm91dHN3X2FsaWduOgltb3ZzCWlwLCByMSwgbHNsICMzMQorCQlibmUJLm91dHN3X25vYWxpZ24KKworCQlsZHJoCXIzLCBbcjFdLCAjMgorCQlzdWIJcjIsIHIyLCAjMQorCQlzdHJoCXIzLCBbcjBdCisKK0VOVFJZKF9fcmF3X3dyaXRlc3cpCisJCXRlcQlyMiwgIzAKKwkJbW92ZXEJcGMsIGxyCisJCWFuZHMJcjMsIHIxLCAjMworCQlibmUJLm91dHN3X2FsaWduCisKKwkJc3RtZmQJc3AhLCB7cjQsIHI1LCBscn0KKworCQlzdWJzCXIyLCByMiwgIzgKKwkJYm1pCS5ub19vdXRzd184CisKKy5vdXRzd184X2xwOglsZG1pYQlyMSEsIHtyMywgcjQsIHI1LCBpcH0KKwkJc3VicwlyMiwgcjIsICM4CisJCW91dHdvcmQJcjMKKwkJb3V0d29yZAlyNAorCQlvdXR3b3JkCXI1CisJCW91dHdvcmQJaXAKKwkJYnBsCS5vdXRzd184X2xwCisKKy5ub19vdXRzd184Ogl0c3QJcjIsICM0CisJCWJlcQkubm9fb3V0c3dfNAorCisJCWxkbWlhCXIxISwge3IzLCBpcH0KKwkJb3V0d29yZAlyMworCQlvdXR3b3JkCWlwCisKKy5ub19vdXRzd180Ogltb3ZzCXIyLCByMiwgbHNsICMzMQorCQliY2MJLm5vX291dHN3XzIKKworCQlsZHIJcjMsIFtyMV0sICM0CisJCW91dHdvcmQJcjMKKworLm5vX291dHN3XzI6CWxkcm5laAlyMywgW3IxXQorCQlzdHJuZWgJcjMsIFtyMF0KKworCQlsZG1mZAlzcCEsIHtyNCwgcjUsIHBjfQorCisjaWZkZWYgX19BUk1FQl9fCisjZGVmaW5lIHB1bGxfaGJ5dGUwCWxzbCAjOAorI2RlZmluZSBwdXNoX2hieXRlMQlsc3IgIzI0CisjZWxzZQorI2RlZmluZSBwdWxsX2hieXRlMAlsc3IgIzI0CisjZGVmaW5lIHB1c2hfaGJ5dGUxCWxzbCAjOAorI2VuZGlmCisKKy5vdXRzd19ub2FsaWduOglsZHIJcjMsIFtyMSwgLXIzXSEKKwkJc3ViY3MJcjIsIHIyLCAjMQorCQliY3MJMmYKKwkJc3VicwlyMiwgcjIsICMyCisJCWJtaQkzZgorCisxOgkJbW92CWlwLCByMywgbHNyICM4CisJCXN0cmgJaXAsIFtyMF0KKzI6CQltb3YJaXAsIHIzLCBwdWxsX2hieXRlMAorCQlsZHIJcjMsIFtyMSwgIzRdIQorCQlzdWJzCXIyLCByMiwgIzIKKwkJb3JyCWlwLCBpcCwgcjMsIHB1c2hfaGJ5dGUxCisJCXN0cmgJaXAsIFtyMF0KKwkJYnBsCTJiCisKKzM6CQl0c3QJcjIsICMxCisyOgkJbW92bmUJaXAsIHIzLCBsc3IgIzgKKwkJc3RybmVoCWlwLCBbcjBdCisJCW1vdglwYywgbHIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9saWIxZnVuY3MuUyBiL2FyY2gvYXJtL2xpYi9saWIxZnVuY3MuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTAyNjAyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbGliL2xpYjFmdW5jcy5TCkBAIC0wLDAgKzEsMzE0IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbGliL2xpYjFmdW5jcy5TOiBPcHRpbWl6ZWQgQVJNIGRpdmlzaW9uIHJvdXRpbmVzCisgKgorICogQXV0aG9yOiBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CisgKiAgIC0gY29udHJpYnV0ZWQgdG8gZ2NjLTMuNCBvbiBTZXAgMzAsIDIwMDMKKyAqICAgLSBhZGFwdGVkIGZvciB0aGUgTGludXgga2VybmVsIG9uIE9jdCAyLCAyMDAzCisgKi8KKworLyogQ29weXJpZ2h0IDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2xhdGVyIHZlcnNpb24uCisKK0luIGFkZGl0aW9uIHRvIHRoZSBwZXJtaXNzaW9ucyBpbiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzIHlvdSB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBsaW5rIHRoZQorY29tcGlsZWQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaW50byBjb21iaW5hdGlvbnMgd2l0aCBvdGhlciBwcm9ncmFtcywKK2FuZCB0byBkaXN0cmlidXRlIHRob3NlIGNvbWJpbmF0aW9ucyB3aXRob3V0IGFueSByZXN0cmljdGlvbiBjb21pbmcKK2Zyb20gdGhlIHVzZSBvZiB0aGlzIGZpbGUuICAoVGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgcmVzdHJpY3Rpb25zCitkbyBhcHBseSBpbiBvdGhlciByZXNwZWN0czsgZm9yIGV4YW1wbGUsIHRoZXkgY292ZXIgbW9kaWZpY2F0aW9uIG9mCit0aGUgZmlsZSwgYW5kIGRpc3RyaWJ1dGlvbiB3aGVuIG5vdCBsaW5rZWQgaW50byBhIGNvbWJpbmUKK2V4ZWN1dGFibGUuKQorCitUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorCisKKy5tYWNybyBBUk1fRElWX0JPRFkgZGl2aWRlbmQsIGRpdmlzb3IsIHJlc3VsdCwgY3VyYml0CisKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNQorCisJY2x6CVxjdXJiaXQsIFxkaXZpc29yCisJY2x6CVxyZXN1bHQsIFxkaXZpZGVuZAorCXN1YglccmVzdWx0LCBcY3VyYml0LCBccmVzdWx0CisJbW92CVxjdXJiaXQsICMxCisJbW92CVxkaXZpc29yLCBcZGl2aXNvciwgbHNsIFxyZXN1bHQKKwltb3YJXGN1cmJpdCwgXGN1cmJpdCwgbHNsIFxyZXN1bHQKKwltb3YJXHJlc3VsdCwgIzAKKwkKKyNlbHNlCisKKwlAIEluaXRpYWxseSBzaGlmdCB0aGUgZGl2aXNvciBsZWZ0IDMgYml0cyBpZiBwb3NzaWJsZSwKKwlAIHNldCBjdXJiaXQgYWNjb3JkaW5nbHkuICBUaGlzIGFsbG93cyBmb3IgY3VyYml0IHRvIGJlIGxvY2F0ZWQKKwlAIGF0IHRoZSBsZWZ0IGVuZCBvZiBlYWNoIDQgYml0IG5pYmJsZXMgaW4gdGhlIGRpdmlzaW9uIGxvb3AKKwlAIHRvIHNhdmUgb25lIGxvb3AgaW4gbW9zdCBjYXNlcy4KKwl0c3QJXGRpdmlzb3IsICMweGUwMDAwMDAwCisJbW92ZXEJXGRpdmlzb3IsIFxkaXZpc29yLCBsc2wgIzMKKwltb3ZlcQlcY3VyYml0LCAjOAorCW1vdm5lCVxjdXJiaXQsICMxCisKKwlAIFVubGVzcyB0aGUgZGl2aXNvciBpcyB2ZXJ5IGJpZywgc2hpZnQgaXQgdXAgaW4gbXVsdGlwbGVzIG9mCisJQCBmb3VyIGJpdHMsIHNpbmNlIHRoaXMgaXMgdGhlIGFtb3VudCBvZiB1bndpbmRpbmcgaW4gdGhlIG1haW4KKwlAIGRpdmlzaW9uIGxvb3AuICBDb250aW51ZSBzaGlmdGluZyB1bnRpbCB0aGUgZGl2aXNvciBpcyAKKwlAIGxhcmdlciB0aGFuIHRoZSBkaXZpZGVuZC4KKzE6CWNtcAlcZGl2aXNvciwgIzB4MTAwMDAwMDAKKwljbXBsbwlcZGl2aXNvciwgXGRpdmlkZW5kCisJbW92bG8JXGRpdmlzb3IsIFxkaXZpc29yLCBsc2wgIzQKKwltb3ZsbwlcY3VyYml0LCBcY3VyYml0LCBsc2wgIzQKKwlibG8JMWIKKworCUAgRm9yIHZlcnkgYmlnIGRpdmlzb3JzLCB3ZSBtdXN0IHNoaWZ0IGl0IGEgYml0IGF0IGEgdGltZSwgb3IKKwlAIHdlIHdpbGwgYmUgaW4gZGFuZ2VyIG9mIG92ZXJmbG93aW5nLgorMToJY21wCVxkaXZpc29yLCAjMHg4MDAwMDAwMAorCWNtcGxvCVxkaXZpc29yLCBcZGl2aWRlbmQKKwltb3ZsbwlcZGl2aXNvciwgXGRpdmlzb3IsIGxzbCAjMQorCW1vdmxvCVxjdXJiaXQsIFxjdXJiaXQsIGxzbCAjMQorCWJsbwkxYgorCisJbW92CVxyZXN1bHQsICMwCisKKyNlbmRpZgorCisJQCBEaXZpc2lvbiBsb29wCisxOgljbXAJXGRpdmlkZW5kLCBcZGl2aXNvcgorCXN1YmhzCVxkaXZpZGVuZCwgXGRpdmlkZW5kLCBcZGl2aXNvcgorCW9ycmhzCVxyZXN1bHQsICAgXHJlc3VsdCwgICBcY3VyYml0CisJY21wCVxkaXZpZGVuZCwgXGRpdmlzb3IsICBsc3IgIzEKKwlzdWJocwlcZGl2aWRlbmQsIFxkaXZpZGVuZCwgXGRpdmlzb3IsIGxzciAjMQorCW9ycmhzCVxyZXN1bHQsICAgXHJlc3VsdCwgICBcY3VyYml0LCAgbHNyICMxCisJY21wCVxkaXZpZGVuZCwgXGRpdmlzb3IsICBsc3IgIzIKKwlzdWJocwlcZGl2aWRlbmQsIFxkaXZpZGVuZCwgXGRpdmlzb3IsIGxzciAjMgorCW9ycmhzCVxyZXN1bHQsICAgXHJlc3VsdCwgICBcY3VyYml0LCAgbHNyICMyCisJY21wCVxkaXZpZGVuZCwgXGRpdmlzb3IsICBsc3IgIzMKKwlzdWJocwlcZGl2aWRlbmQsIFxkaXZpZGVuZCwgXGRpdmlzb3IsIGxzciAjMworCW9ycmhzCVxyZXN1bHQsICAgXHJlc3VsdCwgICBcY3VyYml0LCAgbHNyICMzCisJY21wCVxkaXZpZGVuZCwgIzAJCQlAIEVhcmx5IHRlcm1pbmF0aW9uPworCW1vdm5lcwlcY3VyYml0LCAgIFxjdXJiaXQsICBsc3IgIzQJQCBObywgYW55IG1vcmUgYml0cyB0byBkbz8KKwltb3ZuZQlcZGl2aXNvciwgIFxkaXZpc29yLCBsc3IgIzQKKwlibmUJMWIKKworLmVuZG0KKworCisubWFjcm8gQVJNX0RJVjJfT1JERVIgZGl2aXNvciwgb3JkZXIKKworI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA1CisKKwljbHoJXG9yZGVyLCBcZGl2aXNvcgorCXJzYglcb3JkZXIsIFxvcmRlciwgIzMxCisKKyNlbHNlCisKKwljbXAJXGRpdmlzb3IsICMoMSA8PCAxNikKKwltb3ZocwlcZGl2aXNvciwgXGRpdmlzb3IsIGxzciAjMTYKKwltb3Zocwlcb3JkZXIsICMxNgorCW1vdmxvCVxvcmRlciwgIzAKKworCWNtcAlcZGl2aXNvciwgIygxIDw8IDgpCisJbW92aHMJXGRpdmlzb3IsIFxkaXZpc29yLCBsc3IgIzgKKwlhZGRocwlcb3JkZXIsIFxvcmRlciwgIzgKKworCWNtcAlcZGl2aXNvciwgIygxIDw8IDQpCisJbW92aHMJXGRpdmlzb3IsIFxkaXZpc29yLCBsc3IgIzQKKwlhZGRocwlcb3JkZXIsIFxvcmRlciwgIzQKKworCWNtcAlcZGl2aXNvciwgIygxIDw8IDIpCisJYWRkaGkJXG9yZGVyLCBcb3JkZXIsICMzCisJYWRkbHMJXG9yZGVyLCBcb3JkZXIsIFxkaXZpc29yLCBsc3IgIzEKKworI2VuZGlmCisKKy5lbmRtCisKKworLm1hY3JvIEFSTV9NT0RfQk9EWSBkaXZpZGVuZCwgZGl2aXNvciwgb3JkZXIsIHNwYXJlCisKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNQorCisJY2x6CVxvcmRlciwgXGRpdmlzb3IKKwljbHoJXHNwYXJlLCBcZGl2aWRlbmQKKwlzdWIJXG9yZGVyLCBcb3JkZXIsIFxzcGFyZQorCW1vdglcZGl2aXNvciwgXGRpdmlzb3IsIGxzbCBcb3JkZXIKKworI2Vsc2UKKworCW1vdglcb3JkZXIsICMwCisKKwlAIFVubGVzcyB0aGUgZGl2aXNvciBpcyB2ZXJ5IGJpZywgc2hpZnQgaXQgdXAgaW4gbXVsdGlwbGVzIG9mCisJQCBmb3VyIGJpdHMsIHNpbmNlIHRoaXMgaXMgdGhlIGFtb3VudCBvZiB1bndpbmRpbmcgaW4gdGhlIG1haW4KKwlAIGRpdmlzaW9uIGxvb3AuICBDb250aW51ZSBzaGlmdGluZyB1bnRpbCB0aGUgZGl2aXNvciBpcyAKKwlAIGxhcmdlciB0aGFuIHRoZSBkaXZpZGVuZC4KKzE6CWNtcAlcZGl2aXNvciwgIzB4MTAwMDAwMDAKKwljbXBsbwlcZGl2aXNvciwgXGRpdmlkZW5kCisJbW92bG8JXGRpdmlzb3IsIFxkaXZpc29yLCBsc2wgIzQKKwlhZGRsbwlcb3JkZXIsIFxvcmRlciwgIzQKKwlibG8JMWIKKworCUAgRm9yIHZlcnkgYmlnIGRpdmlzb3JzLCB3ZSBtdXN0IHNoaWZ0IGl0IGEgYml0IGF0IGEgdGltZSwgb3IKKwlAIHdlIHdpbGwgYmUgaW4gZGFuZ2VyIG9mIG92ZXJmbG93aW5nLgorMToJY21wCVxkaXZpc29yLCAjMHg4MDAwMDAwMAorCWNtcGxvCVxkaXZpc29yLCBcZGl2aWRlbmQKKwltb3ZsbwlcZGl2aXNvciwgXGRpdmlzb3IsIGxzbCAjMQorCWFkZGxvCVxvcmRlciwgXG9yZGVyLCAjMQorCWJsbwkxYgorCisjZW5kaWYKKworCUAgUGVyZm9ybSBhbGwgbmVlZGVkIHN1YnN0cmFjdGlvbnMgdG8ga2VlcCBvbmx5IHRoZSByZW1pbmRlci4KKwlAIERvIGNvbXBhcmlzb25zIGluIGJhdGNoIG9mIDQgZmlyc3QuCisJc3Vicwlcb3JkZXIsIFxvcmRlciwgIzMJCUAgeWVzLCAzIGlzIGludGVuZGVkIGhlcmUKKwlibHQJMmYKKworMToJY21wCVxkaXZpZGVuZCwgXGRpdmlzb3IKKwlzdWJocwlcZGl2aWRlbmQsIFxkaXZpZGVuZCwgXGRpdmlzb3IKKwljbXAJXGRpdmlkZW5kLCBcZGl2aXNvciwgIGxzciAjMQorCXN1YmhzCVxkaXZpZGVuZCwgXGRpdmlkZW5kLCBcZGl2aXNvciwgbHNyICMxCisJY21wCVxkaXZpZGVuZCwgXGRpdmlzb3IsICBsc3IgIzIKKwlzdWJocwlcZGl2aWRlbmQsIFxkaXZpZGVuZCwgXGRpdmlzb3IsIGxzciAjMgorCWNtcAlcZGl2aWRlbmQsIFxkaXZpc29yLCAgbHNyICMzCisJc3ViaHMJXGRpdmlkZW5kLCBcZGl2aWRlbmQsIFxkaXZpc29yLCBsc3IgIzMKKwljbXAJXGRpdmlkZW5kLCAjMQorCW1vdglcZGl2aXNvciwgXGRpdmlzb3IsIGxzciAjNAorCXN1Ymdlcwlcb3JkZXIsIFxvcmRlciwgIzQKKwliZ2UJMWIKKworCXRzdAlcb3JkZXIsICMzCisJdGVxbmUJXGRpdmlkZW5kLCAjMAorCWJlcQk1ZgorCisJQCBFaXRoZXIgMSwgMiBvciAzIGNvbXBhcmlzb24vc3Vic3RyYWN0aW9ucyBhcmUgbGVmdC4KKzI6CWNtbglcb3JkZXIsICMyCisJYmx0CTRmCisJYmVxCTNmCisJY21wCVxkaXZpZGVuZCwgXGRpdmlzb3IKKwlzdWJocwlcZGl2aWRlbmQsIFxkaXZpZGVuZCwgXGRpdmlzb3IKKwltb3YJXGRpdmlzb3IsICBcZGl2aXNvciwgIGxzciAjMQorMzoJY21wCVxkaXZpZGVuZCwgXGRpdmlzb3IKKwlzdWJocwlcZGl2aWRlbmQsIFxkaXZpZGVuZCwgXGRpdmlzb3IKKwltb3YJXGRpdmlzb3IsICBcZGl2aXNvciwgIGxzciAjMQorNDoJY21wCVxkaXZpZGVuZCwgXGRpdmlzb3IKKwlzdWJocwlcZGl2aWRlbmQsIFxkaXZpZGVuZCwgXGRpdmlzb3IKKzU6CisuZW5kbQorCisKK0VOVFJZKF9fdWRpdnNpMykKKworCXN1YnMJcjIsIHIxLCAjMQorCW1vdmVxCXBjLCBscgorCWJjYwlMZGl2MAorCWNtcAlyMCwgcjEKKwlibHMJMTFmCisJdHN0CXIxLCByMgorCWJlcQkxMmYKKworCUFSTV9ESVZfQk9EWSByMCwgcjEsIHIyLCByMworCisJbW92CXIwLCByMgorCW1vdglwYywgbHIKKworMTE6CW1vdmVxCXIwLCAjMQorCW1vdm5lCXIwLCAjMAorCW1vdglwYywgbHIKKworMTI6CUFSTV9ESVYyX09SREVSIHIxLCByMgorCisJbW92CXIwLCByMCwgbHNyIHIyCisJbW92CXBjLCBscgorCisKK0VOVFJZKF9fdW1vZHNpMykKKworCXN1YnMJcjIsIHIxLCAjMQkJCUAgY29tcGFyZSBkaXZpc29yIHdpdGggMQorCWJjYwlMZGl2MAorCWNtcG5lCXIwLCByMQkJCQlAIGNvbXBhcmUgZGl2aWRlbmQgd2l0aCBkaXZpc29yCisJbW92ZXEgICByMCwgIzAKKwl0c3RoaQlyMSwgcjIJCQkJQCBzZWUgaWYgZGl2aXNvciBpcyBwb3dlciBvZiAyCisJYW5kZXEJcjAsIHIwLCByMgorCW1vdmxzCXBjLCBscgorCisJQVJNX01PRF9CT0RZIHIwLCByMSwgcjIsIHIzCisKKwltb3YJcGMsIGxyCisKKworRU5UUlkoX19kaXZzaTMpCisKKwljbXAJcjEsICMwCisJZW9yCWlwLCByMCwgcjEJCQlAIHNhdmUgdGhlIHNpZ24gb2YgdGhlIHJlc3VsdC4KKwliZXEJTGRpdjAKKwlyc2JtaQlyMSwgcjEsICMwCQkJQCBsb29wcyBiZWxvdyB1c2UgdW5zaWduZWQuCisJc3VicwlyMiwgcjEsICMxCQkJQCBkaXZpc2lvbiBieSAxIG9yIC0xID8KKwliZXEJMTBmCisJbW92cwlyMywgcjAKKwlyc2JtaQlyMywgcjAsICMwCQkJQCBwb3NpdGl2ZSBkaXZpZGVuZCB2YWx1ZQorCWNtcAlyMywgcjEKKwlibHMJMTFmCisJdHN0CXIxLCByMgkJCQlAIGRpdmlzb3IgaXMgcG93ZXIgb2YgMiA/CisJYmVxCTEyZgorCisJQVJNX0RJVl9CT0RZIHIzLCByMSwgcjAsIHIyCisKKwljbXAJaXAsICMwCisJcnNibWkJcjAsIHIwLCAjMAorCW1vdglwYywgbHIKKworMTA6CXRlcQlpcCwgcjAJCQkJQCBzYW1lIHNpZ24gPworCXJzYm1pCXIwLCByMCwgIzAKKwltb3YJcGMsIGxyCisKKzExOgltb3ZsbwlyMCwgIzAKKwltb3ZlcQlyMCwgaXAsIGFzciAjMzEKKwlvcnJlcQlyMCwgcjAsICMxCisJbW92CXBjLCBscgorCisxMjoJQVJNX0RJVjJfT1JERVIgcjEsIHIyCisKKwljbXAJaXAsICMwCisJbW92CXIwLCByMywgbHNyIHIyCisJcnNibWkJcjAsIHIwLCAjMAorCW1vdglwYywgbHIKKworCitFTlRSWShfX21vZHNpMykKKworCWNtcAlyMSwgIzAKKwliZXEJTGRpdjAKKwlyc2JtaQlyMSwgcjEsICMwCQkJQCBsb29wcyBiZWxvdyB1c2UgdW5zaWduZWQuCisJbW92cwlpcCwgcjAJCQkJQCBwcmVzZXJ2ZSBzaWduIG9mIGRpdmlkZW5kCisJcnNibWkJcjAsIHIwLCAjMAkJCUAgaWYgbmVnYXRpdmUgbWFrZSBwb3NpdGl2ZQorCXN1YnMJcjIsIHIxLCAjMQkJCUAgY29tcGFyZSBkaXZpc29yIHdpdGggMQorCWNtcG5lCXIwLCByMQkJCQlAIGNvbXBhcmUgZGl2aWRlbmQgd2l0aCBkaXZpc29yCisJbW92ZXEJcjAsICMwCisJdHN0aGkJcjEsIHIyCQkJCUAgc2VlIGlmIGRpdmlzb3IgaXMgcG93ZXIgb2YgMgorCWFuZGVxCXIwLCByMCwgcjIKKwlibHMJMTBmCisKKwlBUk1fTU9EX0JPRFkgcjAsIHIxLCByMiwgcjMKKworMTA6CWNtcAlpcCwgIzAKKwlyc2JtaQlyMCwgcjAsICMwCisJbW92CXBjLCBscgorCisKK0xkaXYwOgorCisJc3RyCWxyLCBbc3AsICMtNF0hCisJYmwJX19kaXYwCisJbW92CXIwLCAjMAkJCUAgQWJvdXQgYXMgd3JvbmcgYXMgaXQgY291bGQgYmUuCisJbGRyCXBjLCBbc3BdLCAjNAorCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9sb25nbG9uZy5oIGIvYXJjaC9hcm0vbGliL2xvbmdsb25nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5ZWVhNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2xpYi9sb25nbG9uZy5oCkBAIC0wLDAgKzEsMTgzIEBACisvKiBsb25nbG9uZy5oIC0tIGJhc2VkIG9uIGNvZGUgZnJvbSBnY2MtMi45NS4zCisKKyAgIGRlZmluaXRpb25zIGZvciBtaXhlZCBzaXplIDMyLzY0IGJpdCBhcml0aG1ldGljLgorICAgQ29weXJpZ2h0IChDKSAxOTkxLCA5MiwgOTQsIDk1LCA5NiwgMTk5NywgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBkZWZpbml0aW9uIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKKyAgIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIGRlZmluaXRpb24gZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKyAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAgIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKy8qIEJvcnJvd2VkIGZyb20gR0NDIDIuOTUuMywgSSBNb2x0b24gMjkvMDcvMDEgKi8KKworI2lmbmRlZiBTSV9UWVBFX1NJWkUKKyNkZWZpbmUgU0lfVFlQRV9TSVpFIDMyCisjZW5kaWYKKworI2RlZmluZSBfX0JJVFM0IChTSV9UWVBFX1NJWkUgLyA0KQorI2RlZmluZSBfX2xsX0IgKDFMIDw8IChTSV9UWVBFX1NJWkUgLyAyKSkKKyNkZWZpbmUgX19sbF9sb3dwYXJ0KHQpICgoVVNJdHlwZSkgKHQpICUgX19sbF9CKQorI2RlZmluZSBfX2xsX2hpZ2hwYXJ0KHQpICgoVVNJdHlwZSkgKHQpIC8gX19sbF9CKQorCisvKiBEZWZpbmUgYXV4aWxpYXJ5IGFzbSBtYWNyb3MuCisKKyAgIDEpIHVtdWxfcHBtbShoaWdoX3Byb2QsIGxvd19wcm9kLCBtdWx0aXBsZXIsIG11bHRpcGxpY2FuZCkKKyAgIG11bHRpcGxpZXMgdHdvIFVTSXR5cGUgaW50ZWdlcnMgTVVMVElQTEVSIGFuZCBNVUxUSVBMSUNBTkQsCisgICBhbmQgZ2VuZXJhdGVzIGEgdHdvLXBhcnQgVVNJdHlwZSBwcm9kdWN0IGluIEhJR0hfUFJPRCBhbmQKKyAgIExPV19QUk9ELgorCisgICAyKSBfX3VtdWxzaWRpMyhhLGIpIG11bHRpcGxpZXMgdHdvIFVTSXR5cGUgaW50ZWdlcnMgQSBhbmQgQiwKKyAgIGFuZCByZXR1cm5zIGEgVURJdHlwZSBwcm9kdWN0LiAgVGhpcyBpcyBqdXN0IGEgdmFyaWFudCBvZiB1bXVsX3BwbW0uCisKKyAgIDMpIHVkaXZfcXJubmQocXVvdGllbnQsIHJlbWFpbmRlciwgaGlnaF9udW1lcmF0b3IsIGxvd19udW1lcmF0b3IsCisgICBkZW5vbWluYXRvcikgZGl2aWRlcyBhIHR3by13b3JkIHVuc2lnbmVkIGludGVnZXIsIGNvbXBvc2VkIGJ5IHRoZQorICAgaW50ZWdlcnMgSElHSF9OVU1FUkFUT1IgYW5kIExPV19OVU1FUkFUT1IsIGJ5IERFTk9NSU5BVE9SIGFuZAorICAgcGxhY2VzIHRoZSBxdW90aWVudCBpbiBRVU9USUVOVCBhbmQgdGhlIHJlbWFpbmRlciBpbiBSRU1BSU5ERVIuCisgICBISUdIX05VTUVSQVRPUiBtdXN0IGJlIGxlc3MgdGhhbiBERU5PTUlOQVRPUiBmb3IgY29ycmVjdCBvcGVyYXRpb24uCisgICBJZiwgaW4gYWRkaXRpb24sIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiBERU5PTUlOQVRPUiBtdXN0IGJlIDEsCisgICB0aGVuIHRoZSBwcmUtcHJvY2Vzc29yIHN5bWJvbCBVRElWX05FRURTX05PUk1BTElaQVRJT04gaXMgZGVmaW5lZCB0byAxLgorCisgICA0KSBzZGl2X3Fybm5kKHF1b3RpZW50LCByZW1haW5kZXIsIGhpZ2hfbnVtZXJhdG9yLCBsb3dfbnVtZXJhdG9yLAorICAgZGVub21pbmF0b3IpLiAgTGlrZSB1ZGl2X3Fybm5kIGJ1dCB0aGUgbnVtYmVycyBhcmUgc2lnbmVkLiAgVGhlCisgICBxdW90aWVudCBpcyByb3VuZGVkIHRvd2FyZHMgMC4KKworICAgNSkgY291bnRfbGVhZGluZ196ZXJvcyhjb3VudCwgeCkgY291bnRzIHRoZSBudW1iZXIgb2YgemVyby1iaXRzIGZyb20KKyAgIHRoZSBtc2IgdG8gdGhlIGZpcnN0IG5vbi16ZXJvIGJpdC4gIFRoaXMgaXMgdGhlIG51bWJlciBvZiBzdGVwcyBYCisgICBuZWVkcyB0byBiZSBzaGlmdGVkIGxlZnQgdG8gc2V0IHRoZSBtc2IuICBVbmRlZmluZWQgZm9yIFggPT0gMC4KKworICAgNikgYWRkX3NzYWFhYShoaWdoX3N1bSwgbG93X3N1bSwgaGlnaF9hZGRlbmRfMSwgbG93X2FkZGVuZF8xLAorICAgaGlnaF9hZGRlbmRfMiwgbG93X2FkZGVuZF8yKSBhZGRzIHR3byB0d28td29yZCB1bnNpZ25lZCBpbnRlZ2VycywKKyAgIGNvbXBvc2VkIGJ5IEhJR0hfQURERU5EXzEgYW5kIExPV19BRERFTkRfMSwgYW5kIEhJR0hfQURERU5EXzIgYW5kCisgICBMT1dfQURERU5EXzIgcmVzcGVjdGl2ZWx5LiAgVGhlIHJlc3VsdCBpcyBwbGFjZWQgaW4gSElHSF9TVU0gYW5kCisgICBMT1dfU1VNLiAgT3ZlcmZsb3cgKGkuZS4gY2Fycnkgb3V0KSBpcyBub3Qgc3RvcmVkIGFueXdoZXJlLCBhbmQgaXMKKyAgIGxvc3QuCisKKyAgIDcpIHN1Yl9kZG1tc3MoaGlnaF9kaWZmZXJlbmNlLCBsb3dfZGlmZmVyZW5jZSwgaGlnaF9taW51ZW5kLAorICAgbG93X21pbnVlbmQsIGhpZ2hfc3VidHJhaGVuZCwgbG93X3N1YnRyYWhlbmQpIHN1YnRyYWN0cyB0d28KKyAgIHR3by13b3JkIHVuc2lnbmVkIGludGVnZXJzLCBjb21wb3NlZCBieSBISUdIX01JTlVFTkRfMSBhbmQKKyAgIExPV19NSU5VRU5EXzEsIGFuZCBISUdIX1NVQlRSQUhFTkRfMiBhbmQgTE9XX1NVQlRSQUhFTkRfMgorICAgcmVzcGVjdGl2ZWx5LiAgVGhlIHJlc3VsdCBpcyBwbGFjZWQgaW4gSElHSF9ESUZGRVJFTkNFIGFuZAorICAgTE9XX0RJRkZFUkVOQ0UuICBPdmVyZmxvdyAoaS5lLiBjYXJyeSBvdXQpIGlzIG5vdCBzdG9yZWQgYW55d2hlcmUsCisgICBhbmQgaXMgbG9zdC4KKworICAgSWYgYW55IG9mIHRoZXNlIG1hY3JvcyBhcmUgbGVmdCB1bmRlZmluZWQgZm9yIGEgcGFydGljdWxhciBDUFUsCisgICBDIG1hY3JvcyBhcmUgdXNlZC4gICovCisKKyNpZiBkZWZpbmVkIChfX2FybV9fKQorI2RlZmluZSBhZGRfc3NhYWFhKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIFwKKyAgX19hc21fXyAoImFkZHMJJTEsICU0LCAlNQkJCQkJXG5cCisJYWRjCSUwLCAlMiwgJTMiCQkJCQkJXAorCSAgIDogIj1yIiAoKFVTSXR5cGUpIChzaCkpLAkJCQkJXAorCSAgICAgIj0mciIgKChVU0l0eXBlKSAoc2wpKQkJCQkJXAorCSAgIDogIiVyIiAoKFVTSXR5cGUpIChhaCkpLAkJCQkJXAorCSAgICAgInJJIiAoKFVTSXR5cGUpIChiaCkpLAkJCQkJXAorCSAgICAgIiVyIiAoKFVTSXR5cGUpIChhbCkpLAkJCQkJXAorCSAgICAgInJJIiAoKFVTSXR5cGUpIChibCkpKQorI2RlZmluZSBzdWJfZGRtbXNzKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIFwKKyAgX19hc21fXyAoInN1YnMJJTEsICU0LCAlNQkJCQkJXG5cCisJc2JjCSUwLCAlMiwgJTMiCQkJCQkJXAorCSAgIDogIj1yIiAoKFVTSXR5cGUpIChzaCkpLAkJCQkJXAorCSAgICAgIj0mciIgKChVU0l0eXBlKSAoc2wpKQkJCQkJXAorCSAgIDogInIiICgoVVNJdHlwZSkgKGFoKSksCQkJCQlcCisJICAgICAickkiICgoVVNJdHlwZSkgKGJoKSksCQkJCQlcCisJICAgICAiciIgKChVU0l0eXBlKSAoYWwpKSwJCQkJCVwKKwkgICAgICJySSIgKChVU0l0eXBlKSAoYmwpKSkKKyNkZWZpbmUgdW11bF9wcG1tKHhoLCB4bCwgYSwgYikgXAore3JlZ2lzdGVyIFVTSXR5cGUgX190MCwgX190MSwgX190MjsJCQkJCVwKKyAgX19hc21fXyAoIiVAIElubGluZWQgdW11bF9wcG1tCQkJCQlcblwKKwltb3YJJTIsICU1LCBsc3IgIzE2CQkJCQkJXG5cCisJbW92CSUwLCAlNiwgbHNyICMxNgkJCQkJCVxuXAorCWJpYwklMywgJTUsICUyLCBsc2wgIzE2CQkJCQlcblwKKwliaWMJJTQsICU2LCAlMCwgbHNsICMxNgkJCQkJXG5cCisJbXVsCSUxLCAlMywgJTQJCQkJCQlcblwKKwltdWwJJTQsICUyLCAlNAkJCQkJCVxuXAorCW11bAklMywgJTAsICUzCQkJCQkJXG5cCisJbXVsCSUwLCAlMiwgJTAJCQkJCQlcblwKKwlhZGRzCSUzLCAlNCwgJTMJCQkJCQlcblwKKwlhZGRjcwklMCwgJTAsICM2NTUzNgkJCQkJCVxuXAorCWFkZHMJJTEsICUxLCAlMywgbHNsICMxNgkJCQkJXG5cCisJYWRjCSUwLCAlMCwgJTMsIGxzciAjMTYiCQkJCQlcCisJICAgOiAiPSZyIiAoKFVTSXR5cGUpICh4aCkpLAkJCQkJXAorCSAgICAgIj1yIiAoKFVTSXR5cGUpICh4bCkpLAkJCQkJXAorCSAgICAgIj0mciIgKF9fdDApLCAiPSZyIiAoX190MSksICI9ciIgKF9fdDIpCQkJXAorCSAgIDogInIiICgoVVNJdHlwZSkgKGEpKSwJCQkJCVwKKwkgICAgICJyIiAoKFVTSXR5cGUpIChiKSkpO30KKyNkZWZpbmUgVU1VTF9USU1FIDIwCisjZGVmaW5lIFVESVZfVElNRSAxMDAKKyNlbmRpZiAvKiBfX2FybV9fICovCisKKyNkZWZpbmUgX191bXVsc2lkaTModSwgdikgXAorICAoe0RJdW5pb24gX193OwkJCQkJCQlcCisgICAgdW11bF9wcG1tIChfX3cucy5oaWdoLCBfX3cucy5sb3csIHUsIHYpOwkJCQlcCisgICAgX193LmxsOyB9KQorCisjZGVmaW5lIF9fdWRpdl9xcm5uZF9jKHEsIHIsIG4xLCBuMCwgZCkgXAorICBkbyB7CQkJCQkJCQkJXAorICAgIFVTSXR5cGUgX19kMSwgX19kMCwgX19xMSwgX19xMDsJCQkJCVwKKyAgICBVU0l0eXBlIF9fcjEsIF9fcjAsIF9fbTsJCQkJCQlcCisgICAgX19kMSA9IF9fbGxfaGlnaHBhcnQgKGQpOwkJCQkJCVwKKyAgICBfX2QwID0gX19sbF9sb3dwYXJ0IChkKTsJCQkJCQlcCisJCQkJCQkJCQlcCisgICAgX19yMSA9IChuMSkgJSBfX2QxOwkJCQkJCQlcCisgICAgX19xMSA9IChuMSkgLyBfX2QxOwkJCQkJCQlcCisgICAgX19tID0gKFVTSXR5cGUpIF9fcTEgKiBfX2QwOwkJCQkJXAorICAgIF9fcjEgPSBfX3IxICogX19sbF9CIHwgX19sbF9oaWdocGFydCAobjApOwkJCQlcCisgICAgaWYgKF9fcjEgPCBfX20pCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJX19xMS0tLCBfX3IxICs9IChkKTsJCQkJCQlcCisJaWYgKF9fcjEgPj0gKGQpKSAvKiBpLmUuIHdlIGRpZG4ndCBnZXQgY2Fycnkgd2hlbiBhZGRpbmcgdG8gX19yMSAqL1wKKwkgIGlmIChfX3IxIDwgX19tKQkJCQkJCVwKKwkgICAgX19xMS0tLCBfX3IxICs9IChkKTsJCQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgICAgX19yMSAtPSBfX207CQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgICBfX3IwID0gX19yMSAlIF9fZDE7CQkJCQkJCVwKKyAgICBfX3EwID0gX19yMSAvIF9fZDE7CQkJCQkJCVwKKyAgICBfX20gPSAoVVNJdHlwZSkgX19xMCAqIF9fZDA7CQkJCQlcCisgICAgX19yMCA9IF9fcjAgKiBfX2xsX0IgfCBfX2xsX2xvd3BhcnQgKG4wKTsJCQkJXAorICAgIGlmIChfX3IwIDwgX19tKQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCV9fcTAtLSwgX19yMCArPSAoZCk7CQkJCQkJXAorCWlmIChfX3IwID49IChkKSkJCQkJCQlcCisJICBpZiAoX19yMCA8IF9fbSkJCQkJCQlcCisJICAgIF9fcTAtLSwgX19yMCArPSAoZCk7CQkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIF9fcjAgLT0gX19tOwkJCQkJCQlcCisJCQkJCQkJCQlcCisgICAgKHEpID0gKFVTSXR5cGUpIF9fcTEgKiBfX2xsX0IgfCBfX3EwOwkJCQlcCisgICAgKHIpID0gX19yMDsJCQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBVRElWX05FRURTX05PUk1BTElaQVRJT04gMQorI2RlZmluZSB1ZGl2X3Fybm5kIF9fdWRpdl9xcm5uZF9jCisKKyNkZWZpbmUgY291bnRfbGVhZGluZ196ZXJvcyhjb3VudCwgeCkgXAorICBkbyB7CQkJCQkJCQkJXAorICAgIFVTSXR5cGUgX194ciA9ICh4KTsJCQkJCQkJXAorICAgIFVTSXR5cGUgX19hOwkJCQkJCQlcCisJCQkJCQkJCQlcCisgICAgaWYgKFNJX1RZUEVfU0laRSA8PSAzMikJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCV9fYSA9IF9feHIgPCAoKFVTSXR5cGUpMTw8MipfX0JJVFM0KQkJCQlcCisJICA/IChfX3hyIDwgKChVU0l0eXBlKTE8PF9fQklUUzQpID8gMCA6IF9fQklUUzQpCQlcCisJICA6IChfX3hyIDwgKChVU0l0eXBlKTE8PDMqX19CSVRTNCkgPyAgMipfX0JJVFM0IDogMypfX0JJVFM0KTsJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICBlbHNlCQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCWZvciAoX19hID0gU0lfVFlQRV9TSVpFIC0gODsgX19hID4gMDsgX19hIC09IDgpCQkJXAorCSAgaWYgKCgoX194ciA+PiBfX2EpICYgMHhmZikgIT0gMCkJCQkJXAorCSAgICBicmVhazsJCQkJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgICAoY291bnQpID0gU0lfVFlQRV9TSVpFIC0gKF9fY2x6X3RhYltfX3hyID4+IF9fYV0gKyBfX2EpOwkJXAorICB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2xzaHJkaTMuYyBiL2FyY2gvYXJtL2xpYi9sc2hyZGkzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY2NmYxYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2xpYi9sc2hyZGkzLmMKQEAgLTAsMCArMSw2MSBAQAorLyogTW9yZSBzdWJyb3V0aW5lcyBuZWVkZWQgYnkgR0NDIG91dHB1dCBjb2RlIG9uIHNvbWUgbWFjaGluZXMuICAqLworLyogQ29tcGlsZSB0aGlzIG9uZSB3aXRoIGdjYy4gICovCisvKiBDb3B5cmlnaHQgKEMpIDE5ODksIDkyLTk4LCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgQ0MuCisKK0dOVSBDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dOVSBDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdOVSBDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCitCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIHlvdSBsaW5rIHRoaXMgbGlicmFyeSB3aXRoIG90aGVyIGZpbGVzLAorICAgc29tZSBvZiB3aGljaCBhcmUgY29tcGlsZWQgd2l0aCBHQ0MsIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwKKyAgIHRoaXMgbGlicmFyeSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlCisgICB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAgIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIgaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkKKyAgIHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKi8KKy8qIHN1cHBvcnQgZnVuY3Rpb25zIHJlcXVpcmVkIGJ5IHRoZSBrZXJuZWwuIGJhc2VkIG9uIGNvZGUgZnJvbSBnY2MtMi45NS4zICovCisvKiBJIE1vbHRvbiAgICAgMjkvMDcvMDEgKi8KKworI2luY2x1ZGUgImdjY2xpYi5oIgorCitESXR5cGUKK19fbHNocmRpMyAoREl0eXBlIHUsIHdvcmRfdHlwZSBiKQoreworICBESXVuaW9uIHc7CisgIHdvcmRfdHlwZSBibTsKKyAgREl1bmlvbiB1dTsKKworICBpZiAoYiA9PSAwKQorICAgIHJldHVybiB1OworCisgIHV1LmxsID0gdTsKKworICBibSA9IChzaXplb2YgKFNJdHlwZSkgKiBCSVRTX1BFUl9VTklUKSAtIGI7CisgIGlmIChibSA8PSAwKQorICAgIHsKKyAgICAgIHcucy5oaWdoID0gMDsKKyAgICAgIHcucy5sb3cgPSAoVVNJdHlwZSl1dS5zLmhpZ2ggPj4gLWJtOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIFVTSXR5cGUgY2FycmllcyA9IChVU0l0eXBlKXV1LnMuaGlnaCA8PCBibTsKKyAgICAgIHcucy5oaWdoID0gKFVTSXR5cGUpdXUucy5oaWdoID4+IGI7CisgICAgICB3LnMubG93ID0gKChVU0l0eXBlKXV1LnMubG93ID4+IGIpIHwgY2FycmllczsKKyAgICB9CisKKyAgcmV0dXJuIHcubGw7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9tZW1jaHIuUyBiL2FyY2gvYXJtL2xpYi9tZW1jaHIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzM0ZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbGliL21lbWNoci5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbGliL21lbWNoci5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NS0yMDAwIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIEFTTSBvcHRpbWlzZWQgc3RyaW5nIGZ1bmN0aW9ucworICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKworCS50ZXh0CisJLmFsaWduCTUKK0VOVFJZKG1lbWNocikKKzE6CXN1YnMJcjIsIHIyLCAjMQorCWJtaQkyZgorCWxkcmIJcjMsIFtyMF0sICMxCisJdGVxCXIzLCByMQorCWJuZQkxYgorCXN1YglyMCwgcjAsICMxCisyOgltb3ZuZQlyMCwgIzAKKwlSRVRJTlNUUihtb3YscGMsbHIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvbWVtY3B5LlMgYi9hcmNoL2FybS9saWIvbWVtY3B5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVhNTkzYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2xpYi9tZW1jcHkuUwpAQCAtMCwwICsxLDM5MyBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9saWIvbWVtY3B5LlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTkgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQVNNIG9wdGltaXNlZCBzdHJpbmcgZnVuY3Rpb25zCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorCisJCS50ZXh0CisKKyNkZWZpbmUgRU5URVIJXAorCQltb3YJaXAsc3AJO1wKKwkJc3RtZmQJc3AhLHtyMCxyNC1yOSxmcCxpcCxscixwY30JO1wKKwkJc3ViCWZwLGlwLCM0CisKKyNkZWZpbmUgRVhJVAlcCisJCUxPQURSRUdTKGVhLCBmcCwge3IwLCByNCAtIHI5LCBmcCwgc3AsIHBjfSkKKworI2RlZmluZSBFWElURVEJXAorCQlMT0FEUkVHUyhlcWVhLCBmcCwge3IwLCByNCAtIHI5LCBmcCwgc3AsIHBjfSkKKworLyoKKyAqIFByb3RvdHlwZTogdm9pZCBtZW1jcHkodm9pZCAqdG8sY29uc3Qgdm9pZCAqZnJvbSx1bnNpZ25lZCBsb25nIG4pOworICovCitFTlRSWShtZW1jcHkpCitFTlRSWShtZW1tb3ZlKQorCQlFTlRFUgorCQljbXAJcjEsIHIwCisJCWJjYwkyM2YKKwkJc3VicwlyMiwgcjIsICM0CisJCWJsdAk2ZgorCVBMRCgJcGxkCVtyMSwgIzBdCQkpCisJCWFuZHMJaXAsIHIwLCAjMworCQlibmUJN2YKKwkJYW5kcwlpcCwgcjEsICMzCisJCWJuZQk4ZgorCisxOgkJc3VicwlyMiwgcjIsICM4CisJCWJsdAk1ZgorCQlzdWJzCXIyLCByMiwgIzIwCisJCWJsdAk0ZgorCVBMRCgJcGxkCVtyMSwgIzI4XQkJKQorCVBMRCgJc3VicwlyMiwgcjIsICM2NAkJKQorCVBMRCgJYmx0CTNmCQkJKQorMjoJUExEKAlwbGQJW3IxLCAjNjBdCQkpCisJUExEKAlwbGQJW3IxLCAjOTJdCQkpCisJCWxkbWlhCXIxISwge3IzIC0gcjksIGlwfQorCQlzdWJzCXIyLCByMiwgIzMyCisJCXN0bWdlaWEJcjAhLCB7cjMgLSByOSwgaXB9CisJCWxkbWdlaWEJcjEhLCB7cjMgLSByOSwgaXB9CisJCXN1YmdlcwlyMiwgcjIsICMzMgorCQlzdG1pYQlyMCEsIHtyMyAtIHI5LCBpcH0KKwkJYmdlCTJiCiszOglQTEQoCWxkbWlhCXIxISwge3IzIC0gcjksIGlwfQkpCisJUExEKAlhZGRzCXIyLCByMiwgIzMyCQkpCisJUExEKAlzdG1nZWlhCXIwISwge3IzIC0gcjksIGlwfQkpCisJUExEKAlsZG1nZWlhCXIxISwge3IzIC0gcjksIGlwfQkpCisJUExEKAlzdWJnZXMJcjIsIHIyLCAjMzIJCSkKKwlQTEQoCXN0bWlhCXIwISwge3IzIC0gcjksIGlwfQkpCis0OgkJY21uCXIyLCAjMTYKKwkJbGRtZ2VpYQlyMSEsIHtyMyAtIHI2fQorCQlzdWJnZQlyMiwgcjIsICMxNgorCQlzdG1nZWlhCXIwISwge3IzIC0gcjZ9CisJCWFkZHMJcjIsIHIyLCAjMjAKKwkJbGRtZ2VpYQlyMSEsIHtyMyAtIHI1fQorCQlzdWJnZQlyMiwgcjIsICMxMgorCQlzdG1nZWlhCXIwISwge3IzIC0gcjV9Cis1OgkJYWRkcwlyMiwgcjIsICM4CisJCWJsdAk2ZgorCQlzdWJzCXIyLCByMiwgIzQKKwkJbGRybHQJcjMsIFtyMV0sICM0CisJCWxkbWdlaWEJcjEhLCB7cjQsIHI1fQorCQlzdWJnZQlyMiwgcjIsICM0CisJCXN0cmx0CXIzLCBbcjBdLCAjNAorCQlzdG1nZWlhCXIwISwge3I0LCByNX0KKworNjoJCWFkZHMJcjIsIHIyLCAjNAorCQlFWElURVEKKwkJY21wCXIyLCAjMgorCQlsZHJiCXIzLCBbcjFdLCAjMQorCQlsZHJnZWIJcjQsIFtyMV0sICMxCisJCWxkcmd0YglyNSwgW3IxXSwgIzEKKwkJc3RyYglyMywgW3IwXSwgIzEKKwkJc3RyZ2ViCXI0LCBbcjBdLCAjMQorCQlzdHJndGIJcjUsIFtyMF0sICMxCisJCUVYSVQKKworNzoJCXJzYglpcCwgaXAsICM0CisJCWNtcAlpcCwgIzIKKwkJbGRyYglyMywgW3IxXSwgIzEKKwkJbGRyZ2ViCXI0LCBbcjFdLCAjMQorCQlsZHJndGIJcjUsIFtyMV0sICMxCisJCXN0cmIJcjMsIFtyMF0sICMxCisJCXN0cmdlYglyNCwgW3IwXSwgIzEKKwkJc3RyZ3RiCXI1LCBbcjBdLCAjMQorCQlzdWJzCXIyLCByMiwgaXAKKwkJYmx0CTZiCisJCWFuZHMJaXAsIHIxLCAjMworCQliZXEJMWIKKworODoJCWJpYwlyMSwgcjEsICMzCisJCWxkcglyNywgW3IxXSwgIzQKKwkJY21wCWlwLCAjMgorCQliZ3QJMThmCisJCWJlcQkxM2YKKwkJY21wCXIyLCAjMTIKKwkJYmx0CTExZgorCVBMRCgJcGxkCVtyMSwgIzEyXQkJKQorCQlzdWIJcjIsIHIyLCAjMTIKKwlQTEQoCXN1YnMJcjIsIHIyLCAjMzIJCSkKKwlQTEQoCWJsdAkxMGYJCQkpCisJUExEKAlwbGQJW3IxLCAjMjhdCQkpCis5OglQTEQoCXBsZAlbcjEsICM0NF0JCSkKKzEwOgkJbW92CXIzLCByNywgcHVsbCAjOAorCQlsZG1pYQlyMSEsIHtyNCAtIHI3fQorCQlzdWJzCXIyLCByMiwgIzE2CisJCW9ycglyMywgcjMsIHI0LCBwdXNoICMyNAorCQltb3YJcjQsIHI0LCBwdWxsICM4CisJCW9ycglyNCwgcjQsIHI1LCBwdXNoICMyNAorCQltb3YJcjUsIHI1LCBwdWxsICM4CisJCW9ycglyNSwgcjUsIHI2LCBwdXNoICMyNAorCQltb3YJcjYsIHI2LCBwdWxsICM4CisJCW9ycglyNiwgcjYsIHI3LCBwdXNoICMyNAorCQlzdG1pYQlyMCEsIHtyMyAtIHI2fQorCQliZ2UJOWIKKwlQTEQoCWNtbglyMiwgIzMyCQkJKQorCVBMRCgJYmdlCTEwYgkJCSkKKwlQTEQoCWFkZAlyMiwgcjIsICMzMgkJKQorCQlhZGRzCXIyLCByMiwgIzEyCisJCWJsdAkxMmYKKzExOgkJbW92CXIzLCByNywgcHVsbCAjOAorCQlsZHIJcjcsIFtyMV0sICM0CisJCXN1YnMJcjIsIHIyLCAjNAorCQlvcnIJcjMsIHIzLCByNywgcHVzaCAjMjQKKwkJc3RyCXIzLCBbcjBdLCAjNAorCQliZ2UJMTFiCisxMjoJCXN1YglyMSwgcjEsICMzCisJCWIJNmIKKworMTM6CQljbXAJcjIsICMxMgorCQlibHQJMTZmCisJUExEKAlwbGQJW3IxLCAjMTJdCQkpCisJCXN1YglyMiwgcjIsICMxMgorCVBMRCgJc3VicwlyMiwgcjIsICMzMgkJKQorCVBMRCgJYmx0CTE1ZgkJCSkKKwlQTEQoCXBsZAlbcjEsICMyOF0JCSkKKzE0OglQTEQoCXBsZAlbcjEsICM0NF0JCSkKKzE1OgkJbW92CXIzLCByNywgcHVsbCAjMTYKKwkJbGRtaWEJcjEhLCB7cjQgLSByN30KKwkJc3VicwlyMiwgcjIsICMxNgorCQlvcnIJcjMsIHIzLCByNCwgcHVzaCAjMTYKKwkJbW92CXI0LCByNCwgcHVsbCAjMTYKKwkJb3JyCXI0LCByNCwgcjUsIHB1c2ggIzE2CisJCW1vdglyNSwgcjUsIHB1bGwgIzE2CisJCW9ycglyNSwgcjUsIHI2LCBwdXNoICMxNgorCQltb3YJcjYsIHI2LCBwdWxsICMxNgorCQlvcnIJcjYsIHI2LCByNywgcHVzaCAjMTYKKwkJc3RtaWEJcjAhLCB7cjMgLSByNn0KKwkJYmdlCTE0YgorCVBMRCgJY21uCXIyLCAjMzIJCQkpCisJUExEKAliZ2UJMTViCQkJKQorCVBMRCgJYWRkCXIyLCByMiwgIzMyCQkpCisJCWFkZHMJcjIsIHIyLCAjMTIKKwkJYmx0CTE3ZgorMTY6CQltb3YJcjMsIHI3LCBwdWxsICMxNgorCQlsZHIJcjcsIFtyMV0sICM0CisJCXN1YnMJcjIsIHIyLCAjNAorCQlvcnIJcjMsIHIzLCByNywgcHVzaCAjMTYKKwkJc3RyCXIzLCBbcjBdLCAjNAorCQliZ2UJMTZiCisxNzoJCXN1YglyMSwgcjEsICMyCisJCWIJNmIKKworMTg6CQljbXAJcjIsICMxMgorCQlibHQJMjFmCisJUExEKAlwbGQJW3IxLCAjMTJdCQkpCisJCXN1YglyMiwgcjIsICMxMgorCVBMRCgJc3VicwlyMiwgcjIsICMzMgkJKQorCVBMRCgJYmx0CTIwZgkJCSkKKwlQTEQoCXBsZAlbcjEsICMyOF0JCSkKKzE5OglQTEQoCXBsZAlbcjEsICM0NF0JCSkKKzIwOgkJbW92CXIzLCByNywgcHVsbCAjMjQKKwkJbGRtaWEJcjEhLCB7cjQgLSByN30KKwkJc3VicwlyMiwgcjIsICMxNgorCQlvcnIJcjMsIHIzLCByNCwgcHVzaCAjOAorCQltb3YJcjQsIHI0LCBwdWxsICMyNAorCQlvcnIJcjQsIHI0LCByNSwgcHVzaCAjOAorCQltb3YJcjUsIHI1LCBwdWxsICMyNAorCQlvcnIJcjUsIHI1LCByNiwgcHVzaCAjOAorCQltb3YJcjYsIHI2LCBwdWxsICMyNAorCQlvcnIJcjYsIHI2LCByNywgcHVzaCAjOAorCQlzdG1pYQlyMCEsIHtyMyAtIHI2fQorCQliZ2UJMTliCisJUExEKAljbW4JcjIsICMzMgkJCSkKKwlQTEQoCWJnZQkyMGIJCQkpCisJUExEKAlhZGQJcjIsIHIyLCAjMzIJCSkKKwkJYWRkcwlyMiwgcjIsICMxMgorCQlibHQJMjJmCisyMToJCW1vdglyMywgcjcsIHB1bGwgIzI0CisJCWxkcglyNywgW3IxXSwgIzQKKwkJc3VicwlyMiwgcjIsICM0CisJCW9ycglyMywgcjMsIHI3LCBwdXNoICM4CisJCXN0cglyMywgW3IwXSwgIzQKKwkJYmdlCTIxYgorMjI6CQlzdWIJcjEsIHIxLCAjMQorCQliCTZiCisKKworMjM6CQlhZGQJcjEsIHIxLCByMgorCQlhZGQJcjAsIHIwLCByMgorCQlzdWJzCXIyLCByMiwgIzQKKwkJYmx0CTI5ZgorCVBMRCgJcGxkCVtyMSwgIy00XQkJKQorCQlhbmRzCWlwLCByMCwgIzMKKwkJYm5lCTMwZgorCQlhbmRzCWlwLCByMSwgIzMKKwkJYm5lCTMxZgorCisyNDoJCXN1YnMJcjIsIHIyLCAjOAorCQlibHQJMjhmCisJCXN1YnMJcjIsIHIyLCAjMjAKKwkJYmx0CTI3ZgorCVBMRCgJcGxkCVtyMSwgIy0zMl0JCSkKKwlQTEQoCXN1YnMJcjIsIHIyLCAjNjQJCSkKKwlQTEQoCWJsdAkyNmYJCQkpCisyNToJUExEKAlwbGQJW3IxLCAjLTY0XQkJKQorCVBMRCgJcGxkCVtyMSwgIy05Nl0JCSkKKwkJbGRtZGIJcjEhLCB7cjMgLSByOSwgaXB9CisJCXN1YnMJcjIsIHIyLCAjMzIKKwkJc3RtZ2VkYglyMCEsIHtyMyAtIHI5LCBpcH0KKwkJbGRtZ2VkYglyMSEsIHtyMyAtIHI5LCBpcH0KKwkJc3ViZ2VzCXIyLCByMiwgIzMyCisJCXN0bWRiCXIwISwge3IzIC0gcjksIGlwfQorCQliZ2UJMjViCisyNjoJUExEKAlsZG1kYglyMSEsIHtyMyAtIHI5LCBpcH0JKQorCVBMRCgJYWRkcwlyMiwgcjIsICMzMgkJKQorCVBMRCgJc3RtZ2VkYglyMCEsIHtyMyAtIHI5LCBpcH0JKQorCVBMRCgJbGRtZ2VkYglyMSEsIHtyMyAtIHI5LCBpcH0JKQorCVBMRCgJc3ViZ2VzCXIyLCByMiwgIzMyCQkpCisJUExEKAlzdG1kYglyMCEsIHtyMyAtIHI5LCBpcH0JKQorMjc6CQljbW4JcjIsICMxNgorCQlsZG1nZWRiCXIxISwge3IzIC0gcjZ9CisJCXN1YmdlCXIyLCByMiwgIzE2CisJCXN0bWdlZGIJcjAhLCB7cjMgLSByNn0KKwkJYWRkcwlyMiwgcjIsICMyMAorCQlsZG1nZWRiCXIxISwge3IzIC0gcjV9CisJCXN1YmdlCXIyLCByMiwgIzEyCisJCXN0bWdlZGIJcjAhLCB7cjMgLSByNX0KKzI4OgkJYWRkcwlyMiwgcjIsICM4CisJCWJsdAkyOWYKKwkJc3VicwlyMiwgcjIsICM0CisJCWxkcmx0CXIzLCBbcjEsICMtNF0hCisJCWxkbWdlZGIJcjEhLCB7cjQsIHI1fQorCQlzdWJnZQlyMiwgcjIsICM0CisJCXN0cmx0CXIzLCBbcjAsICMtNF0hCisJCXN0bWdlZGIJcjAhLCB7cjQsIHI1fQorCisyOToJCWFkZHMJcjIsIHIyLCAjNAorCQlFWElURVEKKwkJY21wCXIyLCAjMgorCQlsZHJiCXIzLCBbcjEsICMtMV0hCisJCWxkcmdlYglyNCwgW3IxLCAjLTFdIQorCQlsZHJndGIJcjUsIFtyMSwgIy0xXSEKKwkJc3RyYglyMywgW3IwLCAjLTFdIQorCQlzdHJnZWIJcjQsIFtyMCwgIy0xXSEKKwkJc3RyZ3RiCXI1LCBbcjAsICMtMV0hCisJCUVYSVQKKworMzA6CQljbXAJaXAsICMyCisJCWxkcmIJcjMsIFtyMSwgIy0xXSEKKwkJbGRyZ2ViCXI0LCBbcjEsICMtMV0hCisJCWxkcmd0YglyNSwgW3IxLCAjLTFdIQorCQlzdHJiCXIzLCBbcjAsICMtMV0hCisJCXN0cmdlYglyNCwgW3IwLCAjLTFdIQorCQlzdHJndGIJcjUsIFtyMCwgIy0xXSEKKwkJc3VicwlyMiwgcjIsIGlwCisJCWJsdAkyOWIKKwkJYW5kcwlpcCwgcjEsICMzCisJCWJlcQkyNGIKKworMzE6CQliaWMJcjEsIHIxLCAjMworCQlsZHIJcjMsIFtyMV0sICMwCisJCWNtcAlpcCwgIzIKKwkJYmx0CTQxZgorCQliZXEJMzZmCisJCWNtcAlyMiwgIzEyCisJCWJsdAkzNGYKKwlQTEQoCXBsZAlbcjEsICMtMTZdCQkpCisJCXN1YglyMiwgcjIsICMxMgorCVBMRCgJc3VicwlyMiwgcjIsICMzMgkJKQorCVBMRCgJYmx0CTMzZgkJCSkKKwlQTEQoCXBsZAlbcjEsICMtMzJdCQkpCiszMjoJUExEKAlwbGQJW3IxLCAjLTQ4XQkJKQorMzM6CQltb3YJcjcsIHIzLCBwdXNoICM4CisJCWxkbWRiCXIxISwge3IzLCByNCwgcjUsIHI2fQorCQlzdWJzCXIyLCByMiwgIzE2CisJCW9ycglyNywgcjcsIHI2LCBwdWxsICMyNAorCQltb3YJcjYsIHI2LCBwdXNoICM4CisJCW9ycglyNiwgcjYsIHI1LCBwdWxsICMyNAorCQltb3YJcjUsIHI1LCBwdXNoICM4CisJCW9ycglyNSwgcjUsIHI0LCBwdWxsICMyNAorCQltb3YJcjQsIHI0LCBwdXNoICM4CisJCW9ycglyNCwgcjQsIHIzLCBwdWxsICMyNAorCQlzdG1kYglyMCEsIHtyNCwgcjUsIHI2LCByN30KKwkJYmdlCTMyYgorCVBMRCgJY21uCXIyLCAjMzIJCQkpCisJUExEKAliZ2UJMzNiCQkJKQorCVBMRCgJYWRkCXIyLCByMiwgIzMyCQkpCisJCWFkZHMJcjIsIHIyLCAjMTIKKwkJYmx0CTM1ZgorMzQ6CQltb3YJaXAsIHIzLCBwdXNoICM4CisJCWxkcglyMywgW3IxLCAjLTRdIQorCQlzdWJzCXIyLCByMiwgIzQKKwkJb3JyCWlwLCBpcCwgcjMsIHB1bGwgIzI0CisJCXN0cglpcCwgW3IwLCAjLTRdIQorCQliZ2UJMzRiCiszNToJCWFkZAlyMSwgcjEsICMzCisJCWIJMjliCisKKzM2OgkJY21wCXIyLCAjMTIKKwkJYmx0CTM5ZgorCVBMRCgJcGxkCVtyMSwgIy0xNl0JCSkKKwkJc3ViCXIyLCByMiwgIzEyCisJUExEKAlzdWJzCXIyLCByMiwgIzMyCQkpCisJUExEKAlibHQJMzhmCQkJKQorCVBMRCgJcGxkCVtyMSwgIy0zMl0JCSkKKzM3OglQTEQoCXBsZAlbcjEsICMtNDhdCQkpCiszODoJCW1vdglyNywgcjMsIHB1c2ggIzE2CisJCWxkbWRiCXIxISwge3IzLCByNCwgcjUsIHI2fQorCQlzdWJzCXIyLCByMiwgIzE2CisJCW9ycglyNywgcjcsIHI2LCBwdWxsICMxNgorCQltb3YJcjYsIHI2LCBwdXNoICMxNgorCQlvcnIJcjYsIHI2LCByNSwgcHVsbCAjMTYKKwkJbW92CXI1LCByNSwgcHVzaCAjMTYKKwkJb3JyCXI1LCByNSwgcjQsIHB1bGwgIzE2CisJCW1vdglyNCwgcjQsIHB1c2ggIzE2CisJCW9ycglyNCwgcjQsIHIzLCBwdWxsICMxNgorCQlzdG1kYglyMCEsIHtyNCwgcjUsIHI2LCByN30KKwkJYmdlCTM3YgorCVBMRCgJY21uCXIyLCAjMzIJCQkpCisJUExEKAliZ2UJMzhiCQkJKQorCVBMRCgJYWRkCXIyLCByMiwgIzMyCQkpCisJCWFkZHMJcjIsIHIyLCAjMTIKKwkJYmx0CTQwZgorMzk6CQltb3YJaXAsIHIzLCBwdXNoICMxNgorCQlsZHIJcjMsIFtyMSwgIy00XSEKKwkJc3VicwlyMiwgcjIsICM0CisJCW9ycglpcCwgaXAsIHIzLCBwdWxsICMxNgorCQlzdHIJaXAsIFtyMCwgIy00XSEKKwkJYmdlCTM5YgorNDA6CQlhZGQJcjEsIHIxLCAjMgorCQliCTI5YgorCis0MToJCWNtcAlyMiwgIzEyCisJCWJsdAk0NGYKKwlQTEQoCXBsZAlbcjEsICMtMTZdCQkpCisJCXN1YglyMiwgcjIsICMxMgorCVBMRCgJc3VicwlyMiwgcjIsICMzMgkJKQorCVBMRCgJYmx0CTQzZgkJCSkKKwlQTEQoCXBsZAlbcjEsICMtMzJdCQkpCis0MjoJUExEKAlwbGQJW3IxLCAjLTQ4XQkJKQorNDM6CQltb3YJcjcsIHIzLCBwdXNoICMyNAorCQlsZG1kYglyMSEsIHtyMywgcjQsIHI1LCByNn0KKwkJc3VicwlyMiwgcjIsICMxNgorCQlvcnIJcjcsIHI3LCByNiwgcHVsbCAjOAorCQltb3YJcjYsIHI2LCBwdXNoICMyNAorCQlvcnIJcjYsIHI2LCByNSwgcHVsbCAjOAorCQltb3YJcjUsIHI1LCBwdXNoICMyNAorCQlvcnIJcjUsIHI1LCByNCwgcHVsbCAjOAorCQltb3YJcjQsIHI0LCBwdXNoICMyNAorCQlvcnIJcjQsIHI0LCByMywgcHVsbCAjOAorCQlzdG1kYglyMCEsIHtyNCwgcjUsIHI2LCByN30KKwkJYmdlCTQyYgorCVBMRCgJY21uCXIyLCAjMzIJCQkpCisJUExEKAliZ2UJNDNiCQkJKQorCVBMRCgJYWRkCXIyLCByMiwgIzMyCQkpCisJCWFkZHMJcjIsIHIyLCAjMTIKKwkJYmx0CTQ1ZgorNDQ6CQltb3YJaXAsIHIzLCBwdXNoICMyNAorCQlsZHIJcjMsIFtyMSwgIy00XSEKKwkJc3VicwlyMiwgcjIsICM0CisJCW9ycglpcCwgaXAsIHIzLCBwdWxsICM4CisJCXN0cglpcCwgW3IwLCAjLTRdIQorCQliZ2UJNDRiCis0NToJCWFkZAlyMSwgcjEsICMxCisJCWIJMjliCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9tZW1zZXQuUyBiL2FyY2gvYXJtL2xpYi9tZW1zZXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTc5NWY1OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2xpYi9tZW1zZXQuUwpAQCAtMCwwICsxLDgwIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2xpYi9tZW1zZXQuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMCBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBBU00gb3B0aW1pc2VkIHN0cmluZyBmdW5jdGlvbnMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisKKwkudGV4dAorCS5hbGlnbgk1CisJLndvcmQJMAorCisxOglzdWJzCXIyLCByMiwgIzQJCUAgMSBkbyB3ZSBoYXZlIGVub3VnaAorCWJsdAk1ZgkJCUAgMSBieXRlcyB0byBhbGlnbiB3aXRoPworCWNtcAlyMywgIzIJCQlAIDEKKwlzdHJsdGIJcjEsIFtyMF0sICMxCQlAIDEKKwlzdHJsZWIJcjEsIFtyMF0sICMxCQlAIDEKKwlzdHJiCXIxLCBbcjBdLCAjMQkJQCAxCisJYWRkCXIyLCByMiwgcjMJCUAgMSAocjIgPSByMiAtICg0IC0gcjMpKQorLyoKKyAqIFRoZSBwb2ludGVyIGlzIG5vdyBhbGlnbmVkIGFuZCB0aGUgbGVuZ3RoIGlzIGFkanVzdGVkLiAgVHJ5IGRvaW5nIHRoZQorICogbWVtemVybyBhZ2Fpbi4KKyAqLworCitFTlRSWShtZW1zZXQpCisJYW5kcwlyMywgcjAsICMzCQlAIDEgdW5hbGlnbmVkPworCWJuZQkxYgkJCUAgMQorLyoKKyAqIHdlIGtub3cgdGhhdCB0aGUgcG9pbnRlciBpbiByMCBpcyBhbGlnbmVkIHRvIGEgd29yZCBib3VuZGFyeS4KKyAqLworCW9ycglyMSwgcjEsIHIxLCBsc2wgIzgKKwlvcnIJcjEsIHIxLCByMSwgbHNsICMxNgorCW1vdglyMywgcjEKKwljbXAJcjIsICMxNgorCWJsdAk0ZgorLyoKKyAqIFdlIG5lZWQgYW4gZXh0cmEgcmVnaXN0ZXIgZm9yIHRoaXMgbG9vcCAtIHNhdmUgdGhlIHJldHVybiBhZGRyZXNzIGFuZAorICogdXNlIHRoZSBMUgorICovCisJc3RyCWxyLCBbc3AsICMtNF0hCisJbW92CWlwLCByMQorCW1vdglsciwgcjEKKworMjoJc3VicwlyMiwgcjIsICM2NAorCXN0bWdlaWEJcjAhLCB7cjEsIHIzLCBpcCwgbHJ9CUAgNjQgYnl0ZXMgYXQgYSB0aW1lLgorCXN0bWdlaWEJcjAhLCB7cjEsIHIzLCBpcCwgbHJ9CisJc3RtZ2VpYQlyMCEsIHtyMSwgcjMsIGlwLCBscn0KKwlzdG1nZWlhCXIwISwge3IxLCByMywgaXAsIGxyfQorCWJndAkyYgorCUxPQURSRUdTKGVxZmQsIHNwISwge3BjfSkJQCBOb3cgPDY0IGJ5dGVzIHRvIGdvLgorLyoKKyAqIE5vIG5lZWQgdG8gY29ycmVjdCB0aGUgY291bnQ7IHdlJ3JlIG9ubHkgdGVzdGluZyBiaXRzIGZyb20gbm93IG9uCisgKi8KKwl0c3QJcjIsICMzMgorCXN0bW5laWEJcjAhLCB7cjEsIHIzLCBpcCwgbHJ9CisJc3RtbmVpYQlyMCEsIHtyMSwgcjMsIGlwLCBscn0KKwl0c3QJcjIsICMxNgorCXN0bW5laWEJcjAhLCB7cjEsIHIzLCBpcCwgbHJ9CisJbGRyCWxyLCBbc3BdLCAjNAorCis0Ogl0c3QJcjIsICM4CisJc3RtbmVpYQlyMCEsIHtyMSwgcjN9CisJdHN0CXIyLCAjNAorCXN0cm5lCXIxLCBbcjBdLCAjNAorLyoKKyAqIFdoZW4gd2UgZ2V0IGhlcmUsIHdlJ3ZlIGdvdCBsZXNzIHRoYW4gNCBieXRlcyB0byB6ZXJvLiAgV2UKKyAqIG1heSBoYXZlIGFuIHVuYWxpZ25lZCBwb2ludGVyIGFzIHdlbGwuCisgKi8KKzU6CXRzdAlyMiwgIzIKKwlzdHJuZWIJcjEsIFtyMF0sICMxCisJc3RybmViCXIxLCBbcjBdLCAjMQorCXRzdAlyMiwgIzEKKwlzdHJuZWIJcjEsIFtyMF0sICMxCisJUkVUSU5TVFIobW92LHBjLGxyKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL21lbXplcm8uUyBiL2FyY2gvYXJtL2xpYi9tZW16ZXJvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFjY2M2MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2xpYi9tZW16ZXJvLlMKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9saWIvbWVtemVyby5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NS0yMDAwIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorCisJLnRleHQKKwkuYWxpZ24JNQorCS53b3JkCTAKKy8qCisgKiBBbGlnbiB0aGUgcG9pbnRlciBpbiByMC4gIHIzIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3ZSBhcmUKKyAqIG1pcy1hbGlnbmVkIGJ5LCBhbmQgcjEgaXMgdGhlIG51bWJlciBvZiBieXRlcy4gIElmIHIxIDwgNCwgdGhlbiB3ZQorICogZG9uJ3QgYm90aGVyOyB3ZSB1c2UgYnl0ZSBzdG9yZXMgaW5zdGVhZC4KKyAqLworMToJc3VicwlyMSwgcjEsICM0CQlAIDEgZG8gd2UgaGF2ZSBlbm91Z2gKKwlibHQJNWYJCQlAIDEgYnl0ZXMgdG8gYWxpZ24gd2l0aD8KKwljbXAJcjMsICMyCQkJQCAxCisJc3RybHRiCXIyLCBbcjBdLCAjMQkJQCAxCisJc3RybGViCXIyLCBbcjBdLCAjMQkJQCAxCisJc3RyYglyMiwgW3IwXSwgIzEJCUAgMQorCWFkZAlyMSwgcjEsIHIzCQlAIDEgKHIxID0gcjEgLSAoNCAtIHIzKSkKKy8qCisgKiBUaGUgcG9pbnRlciBpcyBub3cgYWxpZ25lZCBhbmQgdGhlIGxlbmd0aCBpcyBhZGp1c3RlZC4gIFRyeSBkb2luZyB0aGUKKyAqIG1lbXplcm8gYWdhaW4uCisgKi8KKworRU5UUlkoX19tZW16ZXJvKQorCW1vdglyMiwgIzAJCQlAIDEKKwlhbmRzCXIzLCByMCwgIzMJCUAgMSB1bmFsaWduZWQ/CisJYm5lCTFiCQkJQCAxCisvKgorICogcjMgPSAwLCBhbmQgd2Uga25vdyB0aGF0IHRoZSBwb2ludGVyIGluIHIwIGlzIGFsaWduZWQgdG8gYSB3b3JkIGJvdW5kYXJ5LgorICovCisJY21wCXIxLCAjMTYJCQlAIDEgd2UgY2FuIHNraXAgdGhpcyBjaHVuayBpZiB3ZQorCWJsdAk0ZgkJCUAgMSBoYXZlIDwgMTYgYnl0ZXMKKy8qCisgKiBXZSBuZWVkIGFuIGV4dHJhIHJlZ2lzdGVyIGZvciB0aGlzIGxvb3AgLSBzYXZlIHRoZSByZXR1cm4gYWRkcmVzcyBhbmQKKyAqIHVzZSB0aGUgTFIKKyAqLworCXN0cglsciwgW3NwLCAjLTRdIQkJQCAxCisJbW92CWlwLCByMgkJCUAgMQorCW1vdglsciwgcjIJCQlAIDEKKworMzoJc3VicwlyMSwgcjEsICM2NAkJQCAxIHdyaXRlIDMyIGJ5dGVzIG91dCBwZXIgbG9vcAorCXN0bWdlaWEJcjAhLCB7cjIsIHIzLCBpcCwgbHJ9CUAgNAorCXN0bWdlaWEJcjAhLCB7cjIsIHIzLCBpcCwgbHJ9CUAgNAorCXN0bWdlaWEJcjAhLCB7cjIsIHIzLCBpcCwgbHJ9CUAgNAorCXN0bWdlaWEJcjAhLCB7cjIsIHIzLCBpcCwgbHJ9CUAgNAorCWJndAkzYgkJCUAgMQorCUxPQURSRUdTKGVxZmQsIHNwISwge3BjfSkJQCAxLzIgcXVpY2sgZXhpdAorLyoKKyAqIE5vIG5lZWQgdG8gY29ycmVjdCB0aGUgY291bnQ7IHdlJ3JlIG9ubHkgdGVzdGluZyBiaXRzIGZyb20gbm93IG9uCisgKi8KKwl0c3QJcjEsICMzMgkJCUAgMQorCXN0bW5laWEJcjAhLCB7cjIsIHIzLCBpcCwgbHJ9CUAgNAorCXN0bW5laWEJcjAhLCB7cjIsIHIzLCBpcCwgbHJ9CUAgNAorCXRzdAlyMSwgIzE2CQkJQCAxIDE2IGJ5dGVzIG9yIG1vcmU/CisJc3RtbmVpYQlyMCEsIHtyMiwgcjMsIGlwLCBscn0JQCA0CisJbGRyCWxyLCBbc3BdLCAjNAkJQCAxCisKKzQ6CXRzdAlyMSwgIzgJCQlAIDEgOCBieXRlcyBvciBtb3JlPworCXN0bW5laWEJcjAhLCB7cjIsIHIzfQkJQCAyCisJdHN0CXIxLCAjNAkJCUAgMSA0IGJ5dGVzIG9yIG1vcmU/CisJc3RybmUJcjIsIFtyMF0sICM0CQlAIDEKKy8qCisgKiBXaGVuIHdlIGdldCBoZXJlLCB3ZSd2ZSBnb3QgbGVzcyB0aGFuIDQgYnl0ZXMgdG8gemVyby4gIFdlCisgKiBtYXkgaGF2ZSBhbiB1bmFsaWduZWQgcG9pbnRlciBhcyB3ZWxsLgorICovCis1Ogl0c3QJcjEsICMyCQkJQCAxIDIgYnl0ZXMgb3IgbW9yZT8KKwlzdHJuZWIJcjIsIFtyMF0sICMxCQlAIDEKKwlzdHJuZWIJcjIsIFtyMF0sICMxCQlAIDEKKwl0c3QJcjEsICMxCQkJQCAxIGEgYnl0ZSBsZWZ0IG92ZXIKKwlzdHJuZWIJcjIsIFtyMF0sICMxCQlAIDEKKwlSRVRJTlNUUihtb3YscGMsbHIpCQlAIDEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9tdWxkaTMuYyBiL2FyY2gvYXJtL2xpYi9tdWxkaTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGQ2MTFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbGliL211bGRpMy5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qIE1vcmUgc3Vicm91dGluZXMgbmVlZGVkIGJ5IEdDQyBvdXRwdXQgY29kZSBvbiBzb21lIG1hY2hpbmVzLiAgKi8KKy8qIENvbXBpbGUgdGhpcyBvbmUgd2l0aCBnY2MuICAqLworLyogQ29weXJpZ2h0IChDKSAxOTg5LCA5Mi05OCwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIENDLgorCitHTlUgQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHTlUgQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHTlUgQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiB5b3UgbGluayB0aGlzIGxpYnJhcnkgd2l0aCBvdGhlciBmaWxlcywKKyAgIHNvbWUgb2Ygd2hpY2ggYXJlIGNvbXBpbGVkIHdpdGggR0NDLCB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsCisgICB0aGlzIGxpYnJhcnkgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZQorICAgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5CisgICB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICovCisvKiBzdXBwb3J0IGZ1bmN0aW9ucyByZXF1aXJlZCBieSB0aGUga2VybmVsLiBiYXNlZCBvbiBjb2RlIGZyb20gZ2NjLTIuOTUuMyAqLworLyogSSBNb2x0b24gICAgIDI5LzA3LzAxICovCisKKyNpbmNsdWRlICJnY2NsaWIuaCIKKworI2RlZmluZSB1bXVsX3BwbW0oeGgsIHhsLCBhLCBiKSBcCit7cmVnaXN0ZXIgVVNJdHlwZSBfX3QwLCBfX3QxLCBfX3QyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fYXNtX18gKCIlQCBJbmxpbmVkIHVtdWxfcHBtbQkJCQkJXG5cCisgICAgICAgIG1vdiAgICAgJTIsICU1LCBsc3IgIzE2CQkJCQkJXG5cCisgICAgICAgIG1vdiAgICAgJTAsICU2LCBsc3IgIzE2CQkJCQkJXG5cCisgICAgICAgIGJpYyAgICAgJTMsICU1LCAlMiwgbHNsICMxNgkJCQkJXG5cCisgICAgICAgIGJpYyAgICAgJTQsICU2LCAlMCwgbHNsICMxNgkJCQkJXG5cCisgICAgICAgIG11bCAgICAgJTEsICUzLCAlNAkJCQkJCVxuXAorICAgICAgICBtdWwgICAgICU0LCAlMiwgJTQJCQkJCQlcblwKKyAgICAgICAgbXVsICAgICAlMywgJTAsICUzCQkJCQkJXG5cCisgICAgICAgIG11bCAgICAgJTAsICUyLCAlMAkJCQkJCVxuXAorICAgICAgICBhZGRzICAgICUzLCAlNCwgJTMJCQkJCQlcblwKKyAgICAgICAgYWRkY3MgICAlMCwgJTAsICM2NTUzNgkJCQkJCVxuXAorICAgICAgICBhZGRzICAgICUxLCAlMSwgJTMsIGxzbCAjMTYJCQkJCVxuXAorICAgICAgICBhZGMgICAgICUwLCAlMCwgJTMsIGxzciAjMTYiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICA6ICI9JnIiICgoVVNJdHlwZSkgKHhoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICI9ciIgKChVU0l0eXBlKSAoeGwpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICI9JnIiIChfX3QwKSwgIj0mciIgKF9fdDEpLCAiPXIiIChfX3QyKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICA6ICJyIiAoKFVTSXR5cGUpIChhKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICJyIiAoKFVTSXR5cGUpIChiKSkpO30KKworCisjZGVmaW5lIF9fdW11bHNpZGkzKHUsIHYpIFwKKyAgKHtESXVuaW9uIF9fdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bXVsX3BwbW0gKF9fdy5zLmhpZ2gsIF9fdy5zLmxvdywgdSwgdik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX3cubGw7IH0pCisKKworREl0eXBlCitfX211bGRpMyAoREl0eXBlIHUsIERJdHlwZSB2KQoreworICBESXVuaW9uIHc7CisgIERJdW5pb24gdXUsIHZ2OworCisgIHV1LmxsID0gdSwKKyAgdnYubGwgPSB2OworCisgIHcubGwgPSBfX3VtdWxzaWRpMyAodXUucy5sb3csIHZ2LnMubG93KTsKKyAgdy5zLmhpZ2ggKz0gKChVU0l0eXBlKSB1dS5zLmxvdyAqIChVU0l0eXBlKSB2di5zLmhpZ2gKKyAgICAgICAgICAgICAgICsgKFVTSXR5cGUpIHV1LnMuaGlnaCAqIChVU0l0eXBlKSB2di5zLmxvdyk7CisKKyAgcmV0dXJuIHcubGw7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9wdXR1c2VyLlMgYi9hcmNoL2FybS9saWIvcHV0dXNlci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOTM5OGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9saWIvcHV0dXNlci5TCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbGliL3B1dHVzZXIuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgSWRlYSBmcm9tIHg4NiB2ZXJzaW9uLCAoQykgQ29weXJpZ2h0IDE5OTggTGludXMgVG9ydmFsZHMKKyAqCisgKiBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIG5vbi1zdGFuZGFyZCBjYWxsIGludGVyZmFjZSB0byBtYWtlCisgKiB0aGVtIG1vcmUgZWZmaWNpZW50LCBlc3BlY2lhbGx5IGFzIHRoZXkgcmV0dXJuIGFuIGVycm9yCisgKiB2YWx1ZSBpbiBhZGRpdGlvbiB0byB0aGUgInJlYWwiIHJldHVybiB2YWx1ZS4KKyAqCisgKiBfX3B1dF91c2VyX1gKKyAqCisgKiBJbnB1dHM6CXIwIGNvbnRhaW5zIHRoZSBhZGRyZXNzCisgKgkJcjIsIHIzIGNvbnRhaW5zIHRoZSB2YWx1ZQorICogT3V0cHV0czoJcjAgaXMgdGhlIGVycm9yIGNvZGUKKyAqCQlsciBjb3JydXB0ZWQKKyAqCisgKiBObyBvdGhlciByZWdpc3RlcnMgbXVzdCBiZSBhbHRlcmVkLiAgKHNlZSBpbmNsdWRlL2FzbS1hcm0vdWFjY2Vzcy5oCisgKiBmb3Igc3BlY2lmaWMgQVNNIHJlZ2lzdGVyIHVzYWdlKS4KKyAqCisgKiBOb3RlIHRoYXQgQUREUl9MSU1JVCBpcyBlaXRoZXIgMCBvciAweGMwMDAwMDAwCisgKiBOb3RlIGFsc28gdGhhdCBpdCBpcyBpbnRlbmRlZCB0aGF0IF9fcHV0X3VzZXJfYmFkIGlzIG5vdCBnbG9iYWwuCisgKi8KKyNpbmNsdWRlIDxhc20vY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisKKwkuZ2xvYmFsCV9fcHV0X3VzZXJfMQorX19wdXRfdXNlcl8xOgorMToJc3RyYnQJcjIsIFtyMF0KKwltb3YJcjAsICMwCisJbW92CXBjLCBscgorCisJLmdsb2JhbAlfX3B1dF91c2VyXzIKK19fcHV0X3VzZXJfMjoKKwltb3YJaXAsIHIyLCBsc3IgIzgKKyNpZm5kZWYgX19BUk1FQl9fCisyOglzdHJidAlyMiwgW3IwXSwgIzEKKzM6CXN0cmJ0CWlwLCBbcjBdCisjZWxzZQorMjoJc3RyYnQJaXAsIFtyMF0sICMxCiszOglzdHJidAlyMiwgW3IwXQorI2VuZGlmCisJbW92CXIwLCAjMAorCW1vdglwYywgbHIKKworCS5nbG9iYWwJX19wdXRfdXNlcl80CitfX3B1dF91c2VyXzQ6Cis0OglzdHJ0CXIyLCBbcjBdCisJbW92CXIwLCAjMAorCW1vdglwYywgbHIKKworCS5nbG9iYWwJX19wdXRfdXNlcl84CitfX3B1dF91c2VyXzg6Cis1OglzdHJ0CXIyLCBbcjBdLCAjNAorNjoJc3RydAlyMywgW3IwXQorCW1vdglyMCwgIzAKKwltb3YJcGMsIGxyCisKK19fcHV0X3VzZXJfYmFkOgorCW1vdglyMCwgIy1FRkFVTFQKKwltb3YJcGMsIGxyCisKKy5zZWN0aW9uIF9fZXhfdGFibGUsICJhIgorCS5sb25nCTFiLCBfX3B1dF91c2VyX2JhZAorCS5sb25nCTJiLCBfX3B1dF91c2VyX2JhZAorCS5sb25nCTNiLCBfX3B1dF91c2VyX2JhZAorCS5sb25nCTRiLCBfX3B1dF91c2VyX2JhZAorCS5sb25nCTViLCBfX3B1dF91c2VyX2JhZAorCS5sb25nCTZiLCBfX3B1dF91c2VyX2JhZAorLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvc2V0Yml0LlMgYi9hcmNoL2FybS9saWIvc2V0Yml0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYzMzdkZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2xpYi9zZXRiaXQuUwpAQCAtMCwwICsxLDI5IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2xpYi9zZXRiaXQuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NiBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKwkJLnRleHQKKworLyoKKyAqIFB1cnBvc2UgIDogRnVuY3Rpb24gdG8gc2V0IGEgYml0CisgKiBQcm90b3R5cGU6IGludCBzZXRfYml0KGludCBiaXQsIHZvaWQgKmFkZHIpCisgKi8KK0VOVFJZKF9zZXRfYml0X2JlKQorCQllb3IJcjAsIHIwLCAjMHgxOAkJQCBiaWcgZW5kaWFuIGJ5dGUgb3JkZXJpbmcKK0VOVFJZKF9zZXRfYml0X2xlKQorCQlhbmQJcjIsIHIwLCAjNworCQltb3YJcjMsICMxCisJCW1vdglyMywgcjMsIGxzbCByMgorCQlzYXZlX2FuZF9kaXNhYmxlX2lycXMgaXAsIHIyCisJCWxkcmIJcjIsIFtyMSwgcjAsIGxzciAjM10KKwkJb3JyCXIyLCByMiwgcjMKKwkJc3RyYglyMiwgW3IxLCByMCwgbHNyICMzXQorCQlyZXN0b3JlX2lycXMgaXAKKwkJUkVUSU5TVFIobW92LHBjLGxyKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL3N0cmNoci5TIGIvYXJjaC9hcm0vbGliL3N0cmNoci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViOWI0OTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9saWIvc3RyY2hyLlMKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9saWIvc3RyY2hyLlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDAgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQVNNIG9wdGltaXNlZCBzdHJpbmcgZnVuY3Rpb25zCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorCisJCS50ZXh0CisJCS5hbGlnbgk1CitFTlRSWShzdHJjaHIpCisJCWFuZAlyMSwgcjEsICMweGZmCisxOgkJbGRyYglyMiwgW3IwXSwgIzEKKwkJdGVxCXIyLCByMQorCQl0ZXFuZQlyMiwgIzAKKwkJYm5lCTFiCisJCXRlcQlyMiwgcjEKKwkJbW92bmUJcjAsICMwCisJCXN1YmVxCXIwLCByMCwgIzEKKwkJUkVUSU5TVFIobW92LHBjLGxyKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL3N0cm5jcHlfZnJvbV91c2VyLlMgYi9hcmNoL2FybS9saWIvc3RybmNweV9mcm9tX3VzZXIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjljYzg3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbGliL3N0cm5jcHlfZnJvbV91c2VyLlMKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9saWIvc3RybmNweV9mcm9tX3VzZXIuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMCBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKworCS50ZXh0CisJLmFsaWduCTUKKworLyoKKyAqIENvcHkgYSBzdHJpbmcgZnJvbSB1c2VyIHNwYWNlIHRvIGtlcm5lbCBzcGFjZS4KKyAqICByMCA9IGRzdCwgcjEgPSBzcmMsIHIyID0gYnl0ZSBsZW5ndGgKKyAqIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGNvcGllZCAoc3RybGVuIG9mIGNvcGllZCBzdHJpbmcpLAorICogIC1FRkFVTFQgb24gZXhjZXB0aW9uLCBvciAibGVuIiBpZiB3ZSBmaWxsIHRoZSB3aG9sZSBidWZmZXIKKyAqLworRU5UUlkoX19hcmNoX3N0cm5jcHlfZnJvbV91c2VyKQorCXNhdmVfbHIKKwltb3YJaXAsIHIxCisxOglzdWJzCXIyLCByMiwgIzEKK1VTRVIoCWxkcnBsYnQJcjMsIFtyMV0sICMxKQorCWJtaQkyZgorCXN0cmIJcjMsIFtyMF0sICMxCisJdGVxCXIzLCAjMAorCWJuZQkxYgorCXN1YglyMSwgcjEsICMxCUAgdGFrZSBOVUwgY2hhcmFjdGVyIG91dCBvZiBjb3VudAorMjoJc3ViCXIwLCByMSwgaXAKKwlyZXN0b3JlX3BjCisKKwkuc2VjdGlvbiAuZml4dXAsImF4IgorCS5hbGlnbgkwCis5MDAxOgltb3YJcjMsICMwCisJc3RyYglyMywgW3IwLCAjMF0JQCBudWxsIHRlcm1pbmF0ZQorCW1vdglyMCwgIy1FRkFVTFQKKwlyZXN0b3JlX3BjCisJLnByZXZpb3VzCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9zdHJubGVuX3VzZXIuUyBiL2FyY2gvYXJtL2xpYi9zdHJubGVuX3VzZXIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2JjZDgyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbGliL3N0cm5sZW5fdXNlci5TCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbGliL3N0cm5sZW5fdXNlci5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NS0yMDAwIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorCisJLnRleHQKKwkuYWxpZ24JNQorCisvKiBQcm90b3R5cGU6IHVuc2lnbmVkIGxvbmcgX19hcmNoX3N0cm5sZW5fdXNlcihjb25zdCBjaGFyICpzdHIsIGxvbmcgbikKKyAqIFB1cnBvc2UgIDogZ2V0IGxlbmd0aCBvZiBhIHN0cmluZyBpbiB1c2VyIG1lbW9yeQorICogUGFyYW1zICAgOiBzdHIgLSBhZGRyZXNzIG9mIHN0cmluZyBpbiB1c2VyIG1lbW9yeQorICogUmV0dXJucyAgOiBsZW5ndGggb2Ygc3RyaW5nICppbmNsdWRpbmcgdGVybWluYXRvcioKKyAqCSAgICAgIG9yIHplcm8gb24gZXhjZXB0aW9uLCBvciBuICsgMSBpZiB0b28gbG9uZworICovCitFTlRSWShfX2FyY2hfc3Rybmxlbl91c2VyKQorCXNhdmVfbHIKKwltb3YJcjIsIHIwCisxOgorVVNFUigJbGRyYnQJcjMsIFtyMF0sICMxKQorCXRlcQlyMywgIzAKKwliZXEJMmYKKwlzdWJzCXIxLCByMSwgIzEKKwlibmUJMWIKKwlhZGQJcjAsIHIwLCAjMQorMjoJc3ViCXIwLCByMCwgcjIKKwlyZXN0b3JlX3BjCisKKwkuc2VjdGlvbiAuZml4dXAsImF4IgorCS5hbGlnbgkwCis5MDAxOgltb3YJcjAsICMwCisJcmVzdG9yZV9wYworCS5wcmV2aW91cwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL3N0cnJjaHIuUyBiL2FyY2gvYXJtL2xpYi9zdHJyY2hyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE5MjNmMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2xpYi9zdHJyY2hyLlMKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9saWIvc3RycmNoci5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NS0yMDAwIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIEFTTSBvcHRpbWlzZWQgc3RyaW5nIGZ1bmN0aW9ucworICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKworCQkudGV4dAorCQkuYWxpZ24JNQorRU5UUlkoc3RycmNocikKKwkJbW92CXIzLCAjMAorMToJCWxkcmIJcjIsIFtyMF0sICMxCisJCXRlcQlyMiwgcjEKKwkJc3ViZXEJcjMsIHIwLCAjMQorCQl0ZXEJcjIsICMwCisJCWJuZQkxYgorCQltb3YJcjAsIHIzCisJCVJFVElOU1RSKG1vdixwYyxscikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi90ZXN0Y2hhbmdlYml0LlMgYi9hcmNoL2FybS9saWIvdGVzdGNoYW5nZWJpdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYmE0NjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9saWIvdGVzdGNoYW5nZWJpdC5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbGliL3Rlc3RjaGFuZ2ViaXQuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NiBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyAgICAgICAgICAgICAgICAudGV4dAorCitFTlRSWShfdGVzdF9hbmRfY2hhbmdlX2JpdF9iZSkKKwkJZW9yCXIwLCByMCwgIzB4MTgJCUAgYmlnIGVuZGlhbiBieXRlIG9yZGVyaW5nCitFTlRSWShfdGVzdF9hbmRfY2hhbmdlX2JpdF9sZSkKKwkJYWRkCXIxLCByMSwgcjAsIGxzciAjMworCQlhbmQJcjMsIHIwLCAjNworCQltb3YJcjAsICMxCisJCXNhdmVfYW5kX2Rpc2FibGVfaXJxcyBpcCwgcjIKKwkJbGRyYglyMiwgW3IxXQorCQl0c3QJcjIsIHIwLCBsc2wgcjMKKwkJZW9yCXIyLCByMiwgcjAsIGxzbCByMworCQlzdHJiCXIyLCBbcjFdCisJCXJlc3RvcmVfaXJxcyBpcAorCQltb3ZlcQlyMCwgIzAKKwkJUkVUSU5TVFIobW92LHBjLGxyKQorCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi90ZXN0Y2xlYXJiaXQuUyBiL2FyY2gvYXJtL2xpYi90ZXN0Y2xlYXJiaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDdjNWJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbGliL3Rlc3RjbGVhcmJpdC5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbGliL3Rlc3RjbGVhcmJpdC5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NS0xOTk2IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorICAgICAgICAgICAgICAgIC50ZXh0CisKK0VOVFJZKF90ZXN0X2FuZF9jbGVhcl9iaXRfYmUpCisJCWVvcglyMCwgcjAsICMweDE4CQlAIGJpZyBlbmRpYW4gYnl0ZSBvcmRlcmluZworRU5UUlkoX3Rlc3RfYW5kX2NsZWFyX2JpdF9sZSkKKwkJYWRkCXIxLCByMSwgcjAsIGxzciAjMwlAIEdldCBieXRlIG9mZnNldAorCQlhbmQJcjMsIHIwLCAjNwkJQCBHZXQgYml0IG9mZnNldAorCQltb3YJcjAsICMxCisJCXNhdmVfYW5kX2Rpc2FibGVfaXJxcyBpcCwgcjIKKwkJbGRyYglyMiwgW3IxXQorCQl0c3QJcjIsIHIwLCBsc2wgcjMKKwkJYmljCXIyLCByMiwgcjAsIGxzbCByMworCQlzdHJiCXIyLCBbcjFdCisJCXJlc3RvcmVfaXJxcyBpcAorCQltb3ZlcQlyMCwgIzAKKwkJUkVUSU5TVFIobW92LHBjLGxyKQorCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi90ZXN0c2V0Yml0LlMgYi9hcmNoL2FybS9saWIvdGVzdHNldGJpdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NzBmYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9saWIvdGVzdHNldGJpdC5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbGliL3Rlc3RzZXRiaXQuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NiBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyAgICAgICAgICAgICAgICAudGV4dAorCitFTlRSWShfdGVzdF9hbmRfc2V0X2JpdF9iZSkKKwkJZW9yCXIwLCByMCwgIzB4MTgJCUAgYmlnIGVuZGlhbiBieXRlIG9yZGVyaW5nCitFTlRSWShfdGVzdF9hbmRfc2V0X2JpdF9sZSkKKwkJYWRkCXIxLCByMSwgcjAsIGxzciAjMwlAIEdldCBieXRlIG9mZnNldAorCQlhbmQJcjMsIHIwLCAjNwkJQCBHZXQgYml0IG9mZnNldAorCQltb3YJcjAsICMxCisJCXNhdmVfYW5kX2Rpc2FibGVfaXJxcyBpcCwgcjIKKwkJbGRyYglyMiwgW3IxXQorCQl0c3QJcjIsIHIwLCBsc2wgcjMKKwkJb3JyCXIyLCByMiwgcjAsIGxzbCByMworCQlzdHJiCXIyLCBbcjFdCisJCXJlc3RvcmVfaXJxcyBpcAorCQltb3ZlcQlyMCwgIzAKKwkJUkVUSU5TVFIobW92LHBjLGxyKQorCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi91YWNjZXNzLlMgYi9hcmNoL2FybS9saWIvdWFjY2Vzcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZWQwNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9saWIvdWFjY2Vzcy5TCkBAIC0wLDAgKzEsNjk3IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2xpYi91YWNjZXNzLlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LDE5OTcsMTk5OCBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBSb3V0aW5lcyB0byBibG9jayBjb3B5IGRhdGEgdG8vZnJvbSB1c2VyIG1lbW9yeQorICogICBUaGVzZSBhcmUgaGlnaGx5IG9wdGltaXNlZCBib3RoIGZvciB0aGUgNGsgcGFnZSBzaXplCisgKiAgIGFuZCBmb3IgdmFyaW91cyBhbGlnbm1lbnRzLgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKworCQkudGV4dAorCisjZGVmaW5lIFBBR0VfU0hJRlQgMTIKKworLyogUHJvdG90eXBlOiBpbnQgX19hcmNoX2NvcHlfdG9fdXNlcih2b2lkICp0bywgY29uc3QgY2hhciAqZnJvbSwgc2l6ZV90IG4pCisgKiBQdXJwb3NlICA6IGNvcHkgYSBibG9jayB0byB1c2VyIG1lbW9yeSBmcm9tIGtlcm5lbCBtZW1vcnkKKyAqIFBhcmFtcyAgIDogdG8gICAtIHVzZXIgbWVtb3J5CisgKiAgICAgICAgICA6IGZyb20gLSBrZXJuZWwgbWVtb3J5CisgKiAgICAgICAgICA6IG4gICAgLSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weQorICogUmV0dXJucyAgOiBOdW1iZXIgb2YgYnl0ZXMgTk9UIGNvcGllZC4KKyAqLworCisuYzJ1X2Rlc3Rfbm90X2FsaWduZWQ6CisJCXJzYglpcCwgaXAsICM0CisJCWNtcAlpcCwgIzIKKwkJbGRyYglyMywgW3IxXSwgIzEKK1VTRVIoCQlzdHJidAlyMywgW3IwXSwgIzEpCQkJQCBNYXkgZmF1bHQKKwkJbGRyZ2ViCXIzLCBbcjFdLCAjMQorVVNFUigJCXN0cmdlYnQJcjMsIFtyMF0sICMxKQkJCUAgTWF5IGZhdWx0CisJCWxkcmd0YglyMywgW3IxXSwgIzEKK1VTRVIoCQlzdHJndGJ0CXIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAorCQlzdWIJcjIsIHIyLCBpcAorCQliCS5jMnVfZGVzdF9hbGlnbmVkCisKK0VOVFJZKF9fYXJjaF9jb3B5X3RvX3VzZXIpCisJCXN0bWZkCXNwISwge3IyLCByNCAtIHI3LCBscn0KKwkJY21wCXIyLCAjNAorCQlibHQJLmMydV9ub3RfZW5vdWdoCisJUExEKAlwbGQJW3IxLCAjMF0JCSkKKwlQTEQoCXBsZAlbcjAsICMwXQkJKQorCQlhbmRzCWlwLCByMCwgIzMKKwkJYm5lCS5jMnVfZGVzdF9ub3RfYWxpZ25lZAorLmMydV9kZXN0X2FsaWduZWQ6CisKKwkJYW5kcwlpcCwgcjEsICMzCisJCWJuZQkuYzJ1X3NyY19ub3RfYWxpZ25lZAorLyoKKyAqIFNlZWluZyBhcyB0aGVyZSBoYXMgdG8gYmUgYXQgbGVhc3QgOCBieXRlcyB0byBjb3B5LCB3ZSBjYW4KKyAqIGNvcHkgb25lIHdvcmQsIGFuZCBmb3JjZSBhIHVzZXItbW9kZSBwYWdlIGZhdWx0Li4uCisgKi8KKworLmMydV8wZnVwaToJc3VicwlyMiwgcjIsICM0CisJCWFkZG1pCWlwLCByMiwgIzQKKwkJYm1pCS5jMnVfMG5vd29yZHMKKwkJbGRyCXIzLCBbcjFdLCAjNAorVVNFUigJCXN0cnQJcjMsIFtyMF0sICM0KQkJCUAgTWF5IGZhdWx0CisJCW1vdglpcCwgcjAsIGxzbCAjMzIgLSBQQUdFX1NISUZUCUAgT24gZWFjaCBwYWdlLCB1c2UgYSBsZC9zdD8/dCBpbnN0cnVjdGlvbgorCQlyc2IJaXAsIGlwLCAjMAorCQltb3ZzCWlwLCBpcCwgbHNyICMzMiAtIFBBR0VfU0hJRlQKKwkJYmVxCS5jMnVfMGZ1cGkKKy8qCisgKiBpcCA9IG1heCBuby4gb2YgYnl0ZXMgdG8gY29weSBiZWZvcmUgbmVlZGluZyBhbm90aGVyICJzdHJ0IiBpbnNuCisgKi8KKwkJY21wCXIyLCBpcAorCQltb3ZsdAlpcCwgcjIKKwkJc3ViCXIyLCByMiwgaXAKKwkJc3VicwlpcCwgaXAsICMzMgorCQlibHQJLmMydV8wcmVtOGxwCisJUExEKAlwbGQJW3IxLCAjMjhdCQkpCisJUExEKAlwbGQJW3IwLCAjMjhdCQkpCisJUExEKAlzdWJzCWlwLCBpcCwgIzY0CQkJKQorCVBMRCgJYmx0CS5jMnVfMGNweW5vcGxkCQkpCisJUExEKAlwbGQJW3IxLCAjNjBdCQkpCisJUExEKAlwbGQJW3IwLCAjNjBdCQkpCisKKy5jMnVfMGNweThscDoKKwlQTEQoCXBsZAlbcjEsICM5Ml0JCSkKKwlQTEQoCXBsZAlbcjAsICM5Ml0JCSkKKy5jMnVfMGNweW5vcGxkOglsZG1pYQlyMSEsIHtyMyAtIHI2fQorCQlzdG1pYQlyMCEsIHtyMyAtIHI2fQkJCUAgU2hvdWxkbnQgZmF1bHQKKwkJbGRtaWEJcjEhLCB7cjMgLSByNn0KKwkJc3VicwlpcCwgaXAsICMzMgorCQlzdG1pYQlyMCEsIHtyMyAtIHI2fQkJCUAgU2hvdWxkbnQgZmF1bHQKKwkJYnBsCS5jMnVfMGNweThscAorCVBMRCgJY21uCWlwLCAjNjQJCQkpCisJUExEKAliZ2UJLmMydV8wY3B5bm9wbGQJCSkKKwlQTEQoCWFkZAlpcCwgaXAsICM2NAkJKQorCisuYzJ1XzByZW04bHA6CWNtbglpcCwgIzE2CisJCWxkbWdlaWEJcjEhLCB7cjMgLSByNn0KKwkJc3RtZ2VpYQlyMCEsIHtyMyAtIHI2fQkJCUAgU2hvdWxkbnQgZmF1bHQKKwkJdHN0CWlwLCAjOAorCQlsZG1uZWlhCXIxISwge3IzIC0gcjR9CisJCXN0bW5laWEJcjAhLCB7cjMgLSByNH0JCQlAIFNob3VsZG50IGZhdWx0CisJCXRzdAlpcCwgIzQKKwkJbGRybmUJcjMsIFtyMV0sICM0CisJCXN0cm5ldAlyMywgW3IwXSwgIzQJCQlAIFNob3VsZG50IGZhdWx0CisJCWFuZHMJaXAsIGlwLCAjMworCQliZXEJLmMydV8wZnVwaQorLmMydV8wbm93b3JkczoJdGVxCWlwLCAjMAorCQliZXEJLmMydV9maW5pc2hlZAorLmMydV9ub3dvcmRzOgljbXAJaXAsICMyCisJCWxkcmIJcjMsIFtyMV0sICMxCitVU0VSKAkJc3RyYnQJcjMsIFtyMF0sICMxKQkJCUAgTWF5IGZhdWx0CisJCWxkcmdlYglyMywgW3IxXSwgIzEKK1VTRVIoCQlzdHJnZWJ0CXIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAorCQlsZHJndGIJcjMsIFtyMV0sICMxCitVU0VSKAkJc3RyZ3RidAlyMywgW3IwXSwgIzEpCQkJQCBNYXkgZmF1bHQKKwkJYgkuYzJ1X2ZpbmlzaGVkCisKKy5jMnVfbm90X2Vub3VnaDoKKwkJbW92cwlpcCwgcjIKKwkJYm5lCS5jMnVfbm93b3JkcworLmMydV9maW5pc2hlZDoJbW92CXIwLCAjMAorCQlMT0FEUkVHUyhmZCxzcCEse3IyLCByNCAtIHI3LCBwY30pCisKKy5jMnVfc3JjX25vdF9hbGlnbmVkOgorCQliaWMJcjEsIHIxLCAjMworCQlsZHIJcjcsIFtyMV0sICM0CisJCWNtcAlpcCwgIzIKKwkJYmd0CS5jMnVfM2Z1cGkKKwkJYmVxCS5jMnVfMmZ1cGkKKy5jMnVfMWZ1cGk6CXN1YnMJcjIsIHIyLCAjNAorCQlhZGRtaQlpcCwgcjIsICM0CisJCWJtaQkuYzJ1XzFub3dvcmRzCisJCW1vdglyMywgcjcsIHB1bGwgIzgKKwkJbGRyCXI3LCBbcjFdLCAjNAorCQlvcnIJcjMsIHIzLCByNywgcHVzaCAjMjQKK1VTRVIoCQlzdHJ0CXIzLCBbcjBdLCAjNCkJCQlAIE1heSBmYXVsdAorCQltb3YJaXAsIHIwLCBsc2wgIzMyIC0gUEFHRV9TSElGVAorCQlyc2IJaXAsIGlwLCAjMAorCQltb3ZzCWlwLCBpcCwgbHNyICMzMiAtIFBBR0VfU0hJRlQKKwkJYmVxCS5jMnVfMWZ1cGkKKwkJY21wCXIyLCBpcAorCQltb3ZsdAlpcCwgcjIKKwkJc3ViCXIyLCByMiwgaXAKKwkJc3VicwlpcCwgaXAsICMxNgorCQlibHQJLmMydV8xcmVtOGxwCisJUExEKAlwbGQJW3IxLCAjMTJdCQkpCisJUExEKAlwbGQJW3IwLCAjMTJdCQkpCisJUExEKAlzdWJzCWlwLCBpcCwgIzMyCQkpCisJUExEKAlibHQJLmMydV8xY3B5bm9wbGQJCSkKKwlQTEQoCXBsZAlbcjEsICMyOF0JCSkKKwlQTEQoCXBsZAlbcjAsICMyOF0JCSkKKworLmMydV8xY3B5OGxwOgorCVBMRCgJcGxkCVtyMSwgIzQ0XQkJKQorCVBMRCgJcGxkCVtyMCwgIzQ0XQkJKQorLmMydV8xY3B5bm9wbGQ6CW1vdglyMywgcjcsIHB1bGwgIzgKKwkJbGRtaWEJcjEhLCB7cjQgLSByN30KKwkJc3VicwlpcCwgaXAsICMxNgorCQlvcnIJcjMsIHIzLCByNCwgcHVzaCAjMjQKKwkJbW92CXI0LCByNCwgcHVsbCAjOAorCQlvcnIJcjQsIHI0LCByNSwgcHVzaCAjMjQKKwkJbW92CXI1LCByNSwgcHVsbCAjOAorCQlvcnIJcjUsIHI1LCByNiwgcHVzaCAjMjQKKwkJbW92CXI2LCByNiwgcHVsbCAjOAorCQlvcnIJcjYsIHI2LCByNywgcHVzaCAjMjQKKwkJc3RtaWEJcjAhLCB7cjMgLSByNn0JCQlAIFNob3VsZG50IGZhdWx0CisJCWJwbAkuYzJ1XzFjcHk4bHAKKwlQTEQoCWNtbglpcCwgIzMyCQkJKQorCVBMRCgJYmdlCS5jMnVfMWNweW5vcGxkCQkpCisJUExEKAlhZGQJaXAsIGlwLCAjMzIJCSkKKworLmMydV8xcmVtOGxwOgl0c3QJaXAsICM4CisJCW1vdm5lCXIzLCByNywgcHVsbCAjOAorCQlsZG1uZWlhCXIxISwge3I0LCByN30KKwkJb3JybmUJcjMsIHIzLCByNCwgcHVzaCAjMjQKKwkJbW92bmUJcjQsIHI0LCBwdWxsICM4CisJCW9ycm5lCXI0LCByNCwgcjcsIHB1c2ggIzI0CisJCXN0bW5laWEJcjAhLCB7cjMgLSByNH0JCQlAIFNob3VsZG50IGZhdWx0CisJCXRzdAlpcCwgIzQKKwkJbW92bmUJcjMsIHI3LCBwdWxsICM4CisJCWxkcm5lCXI3LCBbcjFdLCAjNAorCQlvcnJuZQlyMywgcjMsIHI3LCBwdXNoICMyNAorCQlzdHJuZXQJcjMsIFtyMF0sICM0CQkJQCBTaG91bGRudCBmYXVsdAorCQlhbmRzCWlwLCBpcCwgIzMKKwkJYmVxCS5jMnVfMWZ1cGkKKy5jMnVfMW5vd29yZHM6CW1vdglyMywgcjcsIGdldF9ieXRlXzEKKwkJdGVxCWlwLCAjMAorCQliZXEJLmMydV9maW5pc2hlZAorCQljbXAJaXAsICMyCitVU0VSKAkJc3RyYnQJcjMsIFtyMF0sICMxKQkJCUAgTWF5IGZhdWx0CisJCW1vdmdlCXIzLCByNywgZ2V0X2J5dGVfMgorVVNFUigJCXN0cmdlYnQJcjMsIFtyMF0sICMxKQkJCUAgTWF5IGZhdWx0CisJCW1vdmd0CXIzLCByNywgZ2V0X2J5dGVfMworVVNFUigJCXN0cmd0YnQJcjMsIFtyMF0sICMxKQkJCUAgTWF5IGZhdWx0CisJCWIJLmMydV9maW5pc2hlZAorCisuYzJ1XzJmdXBpOglzdWJzCXIyLCByMiwgIzQKKwkJYWRkbWkJaXAsIHIyLCAjNAorCQlibWkJLmMydV8ybm93b3JkcworCQltb3YJcjMsIHI3LCBwdWxsICMxNgorCQlsZHIJcjcsIFtyMV0sICM0CisJCW9ycglyMywgcjMsIHI3LCBwdXNoICMxNgorVVNFUigJCXN0cnQJcjMsIFtyMF0sICM0KQkJCUAgTWF5IGZhdWx0CisJCW1vdglpcCwgcjAsIGxzbCAjMzIgLSBQQUdFX1NISUZUCisJCXJzYglpcCwgaXAsICMwCisJCW1vdnMJaXAsIGlwLCBsc3IgIzMyIC0gUEFHRV9TSElGVAorCQliZXEJLmMydV8yZnVwaQorCQljbXAJcjIsIGlwCisJCW1vdmx0CWlwLCByMgorCQlzdWIJcjIsIHIyLCBpcAorCQlzdWJzCWlwLCBpcCwgIzE2CisJCWJsdAkuYzJ1XzJyZW04bHAKKwlQTEQoCXBsZAlbcjEsICMxMl0JCSkKKwlQTEQoCXBsZAlbcjAsICMxMl0JCSkKKwlQTEQoCXN1YnMJaXAsIGlwLCAjMzIJCSkKKwlQTEQoCWJsdAkuYzJ1XzJjcHlub3BsZAkJKQorCVBMRCgJcGxkCVtyMSwgIzI4XQkJKQorCVBMRCgJcGxkCVtyMCwgIzI4XQkJKQorCisuYzJ1XzJjcHk4bHA6CisJUExEKAlwbGQJW3IxLCAjNDRdCQkpCisJUExEKAlwbGQJW3IwLCAjNDRdCQkpCisuYzJ1XzJjcHlub3BsZDoJbW92CXIzLCByNywgcHVsbCAjMTYKKwkJbGRtaWEJcjEhLCB7cjQgLSByN30KKwkJc3VicwlpcCwgaXAsICMxNgorCQlvcnIJcjMsIHIzLCByNCwgcHVzaCAjMTYKKwkJbW92CXI0LCByNCwgcHVsbCAjMTYKKwkJb3JyCXI0LCByNCwgcjUsIHB1c2ggIzE2CisJCW1vdglyNSwgcjUsIHB1bGwgIzE2CisJCW9ycglyNSwgcjUsIHI2LCBwdXNoICMxNgorCQltb3YJcjYsIHI2LCBwdWxsICMxNgorCQlvcnIJcjYsIHI2LCByNywgcHVzaCAjMTYKKwkJc3RtaWEJcjAhLCB7cjMgLSByNn0JCQlAIFNob3VsZG50IGZhdWx0CisJCWJwbAkuYzJ1XzJjcHk4bHAKKwlQTEQoCWNtbglpcCwgIzMyCQkJKQorCVBMRCgJYmdlCS5jMnVfMmNweW5vcGxkCQkpCisJUExEKAlhZGQJaXAsIGlwLCAjMzIJCSkKKworLmMydV8ycmVtOGxwOgl0c3QJaXAsICM4CisJCW1vdm5lCXIzLCByNywgcHVsbCAjMTYKKwkJbGRtbmVpYQlyMSEsIHtyNCwgcjd9CisJCW9ycm5lCXIzLCByMywgcjQsIHB1c2ggIzE2CisJCW1vdm5lCXI0LCByNCwgcHVsbCAjMTYKKwkJb3JybmUJcjQsIHI0LCByNywgcHVzaCAjMTYKKwkJc3RtbmVpYQlyMCEsIHtyMyAtIHI0fQkJCUAgU2hvdWxkbnQgZmF1bHQKKwkJdHN0CWlwLCAjNAorCQltb3ZuZQlyMywgcjcsIHB1bGwgIzE2CisJCWxkcm5lCXI3LCBbcjFdLCAjNAorCQlvcnJuZQlyMywgcjMsIHI3LCBwdXNoICMxNgorCQlzdHJuZXQJcjMsIFtyMF0sICM0CQkJQCBTaG91bGRudCBmYXVsdAorCQlhbmRzCWlwLCBpcCwgIzMKKwkJYmVxCS5jMnVfMmZ1cGkKKy5jMnVfMm5vd29yZHM6CW1vdglyMywgcjcsIGdldF9ieXRlXzIKKwkJdGVxCWlwLCAjMAorCQliZXEJLmMydV9maW5pc2hlZAorCQljbXAJaXAsICMyCitVU0VSKAkJc3RyYnQJcjMsIFtyMF0sICMxKQkJCUAgTWF5IGZhdWx0CisJCW1vdmdlCXIzLCByNywgZ2V0X2J5dGVfMworVVNFUigJCXN0cmdlYnQJcjMsIFtyMF0sICMxKQkJCUAgTWF5IGZhdWx0CisJCWxkcmd0YglyMywgW3IxXSwgIzAKK1VTRVIoCQlzdHJndGJ0CXIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAorCQliCS5jMnVfZmluaXNoZWQKKworLmMydV8zZnVwaToJc3VicwlyMiwgcjIsICM0CisJCWFkZG1pCWlwLCByMiwgIzQKKwkJYm1pCS5jMnVfM25vd29yZHMKKwkJbW92CXIzLCByNywgcHVsbCAjMjQKKwkJbGRyCXI3LCBbcjFdLCAjNAorCQlvcnIJcjMsIHIzLCByNywgcHVzaCAjOAorVVNFUigJCXN0cnQJcjMsIFtyMF0sICM0KQkJCUAgTWF5IGZhdWx0CisJCW1vdglpcCwgcjAsIGxzbCAjMzIgLSBQQUdFX1NISUZUCisJCXJzYglpcCwgaXAsICMwCisJCW1vdnMJaXAsIGlwLCBsc3IgIzMyIC0gUEFHRV9TSElGVAorCQliZXEJLmMydV8zZnVwaQorCQljbXAJcjIsIGlwCisJCW1vdmx0CWlwLCByMgorCQlzdWIJcjIsIHIyLCBpcAorCQlzdWJzCWlwLCBpcCwgIzE2CisJCWJsdAkuYzJ1XzNyZW04bHAKKwlQTEQoCXBsZAlbcjEsICMxMl0JCSkKKwlQTEQoCXBsZAlbcjAsICMxMl0JCSkKKwlQTEQoCXN1YnMJaXAsIGlwLCAjMzIJCSkKKwlQTEQoCWJsdAkuYzJ1XzNjcHlub3BsZAkJKQorCVBMRCgJcGxkCVtyMSwgIzI4XQkJKQorCVBMRCgJcGxkCVtyMCwgIzI4XQkJKQorCisuYzJ1XzNjcHk4bHA6CisJUExEKAlwbGQJW3IxLCAjNDRdCQkpCisJUExEKAlwbGQJW3IwLCAjNDRdCQkpCisuYzJ1XzNjcHlub3BsZDoJbW92CXIzLCByNywgcHVsbCAjMjQKKwkJbGRtaWEJcjEhLCB7cjQgLSByN30KKwkJc3VicwlpcCwgaXAsICMxNgorCQlvcnIJcjMsIHIzLCByNCwgcHVzaCAjOAorCQltb3YJcjQsIHI0LCBwdWxsICMyNAorCQlvcnIJcjQsIHI0LCByNSwgcHVzaCAjOAorCQltb3YJcjUsIHI1LCBwdWxsICMyNAorCQlvcnIJcjUsIHI1LCByNiwgcHVzaCAjOAorCQltb3YJcjYsIHI2LCBwdWxsICMyNAorCQlvcnIJcjYsIHI2LCByNywgcHVzaCAjOAorCQlzdG1pYQlyMCEsIHtyMyAtIHI2fQkJCUAgU2hvdWxkbnQgZmF1bHQKKwkJYnBsCS5jMnVfM2NweThscAorCVBMRCgJY21uCWlwLCAjMzIJCQkpCisJUExEKAliZ2UJLmMydV8zY3B5bm9wbGQJCSkKKwlQTEQoCWFkZAlpcCwgaXAsICMzMgkJKQorCisuYzJ1XzNyZW04bHA6CXRzdAlpcCwgIzgKKwkJbW92bmUJcjMsIHI3LCBwdWxsICMyNAorCQlsZG1uZWlhCXIxISwge3I0LCByN30KKwkJb3JybmUJcjMsIHIzLCByNCwgcHVzaCAjOAorCQltb3ZuZQlyNCwgcjQsIHB1bGwgIzI0CisJCW9ycm5lCXI0LCByNCwgcjcsIHB1c2ggIzgKKwkJc3RtbmVpYQlyMCEsIHtyMyAtIHI0fQkJCUAgU2hvdWxkbnQgZmF1bHQKKwkJdHN0CWlwLCAjNAorCQltb3ZuZQlyMywgcjcsIHB1bGwgIzI0CisJCWxkcm5lCXI3LCBbcjFdLCAjNAorCQlvcnJuZQlyMywgcjMsIHI3LCBwdXNoICM4CisJCXN0cm5ldAlyMywgW3IwXSwgIzQJCQlAIFNob3VsZG50IGZhdWx0CisJCWFuZHMJaXAsIGlwLCAjMworCQliZXEJLmMydV8zZnVwaQorLmMydV8zbm93b3JkczoJbW92CXIzLCByNywgZ2V0X2J5dGVfMworCQl0ZXEJaXAsICMwCisJCWJlcQkuYzJ1X2ZpbmlzaGVkCisJCWNtcAlpcCwgIzIKK1VTRVIoCQlzdHJidAlyMywgW3IwXSwgIzEpCQkJQCBNYXkgZmF1bHQKKwkJbGRyZ2ViCXIzLCBbcjFdLCAjMQorVVNFUigJCXN0cmdlYnQJcjMsIFtyMF0sICMxKQkJCUAgTWF5IGZhdWx0CisJCWxkcmd0YglyMywgW3IxXSwgIzAKK1VTRVIoCQlzdHJndGJ0CXIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAorCQliCS5jMnVfZmluaXNoZWQKKworCQkuc2VjdGlvbiAuZml4dXAsImF4IgorCQkuYWxpZ24JMAorOTAwMToJCUxPQURSRUdTKGZkLHNwISwge3IwLCByNCAtIHI3LCBwY30pCisJCS5wcmV2aW91cworCisvKiBQcm90b3R5cGU6IHVuc2lnbmVkIGxvbmcgX19hcmNoX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLGNvbnN0IHZvaWQgKmZyb20sdW5zaWduZWQgbG9uZyBuKTsKKyAqIFB1cnBvc2UgIDogY29weSBhIGJsb2NrIGZyb20gdXNlciBtZW1vcnkgdG8ga2VybmVsIG1lbW9yeQorICogUGFyYW1zICAgOiB0byAgIC0ga2VybmVsIG1lbW9yeQorICogICAgICAgICAgOiBmcm9tIC0gdXNlciBtZW1vcnkKKyAqICAgICAgICAgIDogbiAgICAtIG51bWJlciBvZiBieXRlcyB0byBjb3B5CisgKiBSZXR1cm5zICA6IE51bWJlciBvZiBieXRlcyBOT1QgY29waWVkLgorICovCisuY2Z1X2Rlc3Rfbm90X2FsaWduZWQ6CisJCXJzYglpcCwgaXAsICM0CisJCWNtcAlpcCwgIzIKK1VTRVIoCQlsZHJidAlyMywgW3IxXSwgIzEpCQkJQCBNYXkgZmF1bHQKKwkJc3RyYglyMywgW3IwXSwgIzEKK1VTRVIoCQlsZHJnZWJ0CXIzLCBbcjFdLCAjMSkJCQlAIE1heSBmYXVsdAorCQlzdHJnZWIJcjMsIFtyMF0sICMxCitVU0VSKAkJbGRyZ3RidAlyMywgW3IxXSwgIzEpCQkJQCBNYXkgZmF1bHQKKwkJc3RyZ3RiCXIzLCBbcjBdLCAjMQorCQlzdWIJcjIsIHIyLCBpcAorCQliCS5jZnVfZGVzdF9hbGlnbmVkCisKK0VOVFJZKF9fYXJjaF9jb3B5X2Zyb21fdXNlcikKKwkJc3RtZmQJc3AhLCB7cjAsIHIyLCByNCAtIHI3LCBscn0KKwkJY21wCXIyLCAjNAorCQlibHQJLmNmdV9ub3RfZW5vdWdoCisJUExEKAlwbGQJW3IxLCAjMF0JCSkKKwlQTEQoCXBsZAlbcjAsICMwXQkJKQorCQlhbmRzCWlwLCByMCwgIzMKKwkJYm5lCS5jZnVfZGVzdF9ub3RfYWxpZ25lZAorLmNmdV9kZXN0X2FsaWduZWQ6CisJCWFuZHMJaXAsIHIxLCAjMworCQlibmUJLmNmdV9zcmNfbm90X2FsaWduZWQKKy8qCisgKiBTZWVpbmcgYXMgdGhlcmUgaGFzIHRvIGJlIGF0IGxlYXN0IDggYnl0ZXMgdG8gY29weSwgd2UgY2FuCisgKiBjb3B5IG9uZSB3b3JkLCBhbmQgZm9yY2UgYSB1c2VyLW1vZGUgcGFnZSBmYXVsdC4uLgorICovCisKKy5jZnVfMGZ1cGk6CXN1YnMJcjIsIHIyLCAjNAorCQlhZGRtaQlpcCwgcjIsICM0CisJCWJtaQkuY2Z1XzBub3dvcmRzCitVU0VSKAkJbGRydAlyMywgW3IxXSwgIzQpCisJCXN0cglyMywgW3IwXSwgIzQKKwkJbW92CWlwLCByMSwgbHNsICMzMiAtIFBBR0VfU0hJRlQJQCBPbiBlYWNoIHBhZ2UsIHVzZSBhIGxkL3N0Pz90IGluc3RydWN0aW9uCisJCXJzYglpcCwgaXAsICMwCisJCW1vdnMJaXAsIGlwLCBsc3IgIzMyIC0gUEFHRV9TSElGVAorCQliZXEJLmNmdV8wZnVwaQorLyoKKyAqIGlwID0gbWF4IG5vLiBvZiBieXRlcyB0byBjb3B5IGJlZm9yZSBuZWVkaW5nIGFub3RoZXIgInN0cnQiIGluc24KKyAqLworCQljbXAJcjIsIGlwCisJCW1vdmx0CWlwLCByMgorCQlzdWIJcjIsIHIyLCBpcAorCQlzdWJzCWlwLCBpcCwgIzMyCisJCWJsdAkuY2Z1XzByZW04bHAKKwlQTEQoCXBsZAlbcjEsICMyOF0JCSkKKwlQTEQoCXBsZAlbcjAsICMyOF0JCSkKKwlQTEQoCXN1YnMJaXAsIGlwLCAjNjQJCQkpCisJUExEKAlibHQJLmNmdV8wY3B5bm9wbGQJCSkKKwlQTEQoCXBsZAlbcjEsICM2MF0JCSkKKwlQTEQoCXBsZAlbcjAsICM2MF0JCSkKKworLmNmdV8wY3B5OGxwOgorCVBMRCgJcGxkCVtyMSwgIzkyXQkJKQorCVBMRCgJcGxkCVtyMCwgIzkyXQkJKQorLmNmdV8wY3B5bm9wbGQ6CWxkbWlhCXIxISwge3IzIC0gcjZ9CQkJQCBTaG91bGRudCBmYXVsdAorCQlzdG1pYQlyMCEsIHtyMyAtIHI2fQorCQlsZG1pYQlyMSEsIHtyMyAtIHI2fQkJCUAgU2hvdWxkbnQgZmF1bHQKKwkJc3VicwlpcCwgaXAsICMzMgorCQlzdG1pYQlyMCEsIHtyMyAtIHI2fQorCQlicGwJLmNmdV8wY3B5OGxwCisJUExEKAljbW4JaXAsICM2NAkJCSkKKwlQTEQoCWJnZQkuY2Z1XzBjcHlub3BsZAkJKQorCVBMRCgJYWRkCWlwLCBpcCwgIzY0CQkpCisKKy5jZnVfMHJlbThscDoJY21uCWlwLCAjMTYKKwkJbGRtZ2VpYQlyMSEsIHtyMyAtIHI2fQkJCUAgU2hvdWxkbnQgZmF1bHQKKwkJc3RtZ2VpYQlyMCEsIHtyMyAtIHI2fQorCQl0c3QJaXAsICM4CisJCWxkbW5laWEJcjEhLCB7cjMgLSByNH0JCQlAIFNob3VsZG50IGZhdWx0CisJCXN0bW5laWEJcjAhLCB7cjMgLSByNH0KKwkJdHN0CWlwLCAjNAorCQlsZHJuZXQJcjMsIFtyMV0sICM0CQkJQCBTaG91bGRudCBmYXVsdAorCQlzdHJuZQlyMywgW3IwXSwgIzQKKwkJYW5kcwlpcCwgaXAsICMzCisJCWJlcQkuY2Z1XzBmdXBpCisuY2Z1XzBub3dvcmRzOgl0ZXEJaXAsICMwCisJCWJlcQkuY2Z1X2ZpbmlzaGVkCisuY2Z1X25vd29yZHM6CWNtcAlpcCwgIzIKK1VTRVIoCQlsZHJidAlyMywgW3IxXSwgIzEpCQkJQCBNYXkgZmF1bHQKKwkJc3RyYglyMywgW3IwXSwgIzEKK1VTRVIoCQlsZHJnZWJ0CXIzLCBbcjFdLCAjMSkJCQlAIE1heSBmYXVsdAorCQlzdHJnZWIJcjMsIFtyMF0sICMxCitVU0VSKAkJbGRyZ3RidAlyMywgW3IxXSwgIzEpCQkJQCBNYXkgZmF1bHQKKwkJc3RyZ3RiCXIzLCBbcjBdLCAjMQorCQliCS5jZnVfZmluaXNoZWQKKworLmNmdV9ub3RfZW5vdWdoOgorCQltb3ZzCWlwLCByMgorCQlibmUJLmNmdV9ub3dvcmRzCisuY2Z1X2ZpbmlzaGVkOgltb3YJcjAsICMwCisJCWFkZAlzcCwgc3AsICM4CisJCUxPQURSRUdTKGZkLHNwISx7cjQgLSByNywgcGN9KQorCisuY2Z1X3NyY19ub3RfYWxpZ25lZDoKKwkJYmljCXIxLCByMSwgIzMKK1VTRVIoCQlsZHJ0CXI3LCBbcjFdLCAjNCkJCQlAIE1heSBmYXVsdAorCQljbXAJaXAsICMyCisJCWJndAkuY2Z1XzNmdXBpCisJCWJlcQkuY2Z1XzJmdXBpCisuY2Z1XzFmdXBpOglzdWJzCXIyLCByMiwgIzQKKwkJYWRkbWkJaXAsIHIyLCAjNAorCQlibWkJLmNmdV8xbm93b3JkcworCQltb3YJcjMsIHI3LCBwdWxsICM4CitVU0VSKAkJbGRydAlyNywgW3IxXSwgIzQpCQkJQCBNYXkgZmF1bHQKKwkJb3JyCXIzLCByMywgcjcsIHB1c2ggIzI0CisJCXN0cglyMywgW3IwXSwgIzQKKwkJbW92CWlwLCByMSwgbHNsICMzMiAtIFBBR0VfU0hJRlQKKwkJcnNiCWlwLCBpcCwgIzAKKwkJbW92cwlpcCwgaXAsIGxzciAjMzIgLSBQQUdFX1NISUZUCisJCWJlcQkuY2Z1XzFmdXBpCisJCWNtcAlyMiwgaXAKKwkJbW92bHQJaXAsIHIyCisJCXN1YglyMiwgcjIsIGlwCisJCXN1YnMJaXAsIGlwLCAjMTYKKwkJYmx0CS5jZnVfMXJlbThscAorCVBMRCgJcGxkCVtyMSwgIzEyXQkJKQorCVBMRCgJcGxkCVtyMCwgIzEyXQkJKQorCVBMRCgJc3VicwlpcCwgaXAsICMzMgkJKQorCVBMRCgJYmx0CS5jZnVfMWNweW5vcGxkCQkpCisJUExEKAlwbGQJW3IxLCAjMjhdCQkpCisJUExEKAlwbGQJW3IwLCAjMjhdCQkpCisKKy5jZnVfMWNweThscDoKKwlQTEQoCXBsZAlbcjEsICM0NF0JCSkKKwlQTEQoCXBsZAlbcjAsICM0NF0JCSkKKy5jZnVfMWNweW5vcGxkOgltb3YJcjMsIHI3LCBwdWxsICM4CisJCWxkbWlhCXIxISwge3I0IC0gcjd9CQkJQCBTaG91bGRudCBmYXVsdAorCQlzdWJzCWlwLCBpcCwgIzE2CisJCW9ycglyMywgcjMsIHI0LCBwdXNoICMyNAorCQltb3YJcjQsIHI0LCBwdWxsICM4CisJCW9ycglyNCwgcjQsIHI1LCBwdXNoICMyNAorCQltb3YJcjUsIHI1LCBwdWxsICM4CisJCW9ycglyNSwgcjUsIHI2LCBwdXNoICMyNAorCQltb3YJcjYsIHI2LCBwdWxsICM4CisJCW9ycglyNiwgcjYsIHI3LCBwdXNoICMyNAorCQlzdG1pYQlyMCEsIHtyMyAtIHI2fQorCQlicGwJLmNmdV8xY3B5OGxwCisJUExEKAljbW4JaXAsICMzMgkJCSkKKwlQTEQoCWJnZQkuY2Z1XzFjcHlub3BsZAkJKQorCVBMRCgJYWRkCWlwLCBpcCwgIzMyCQkpCisKKy5jZnVfMXJlbThscDoJdHN0CWlwLCAjOAorCQltb3ZuZQlyMywgcjcsIHB1bGwgIzgKKwkJbGRtbmVpYQlyMSEsIHtyNCwgcjd9CQkJQCBTaG91bGRudCBmYXVsdAorCQlvcnJuZQlyMywgcjMsIHI0LCBwdXNoICMyNAorCQltb3ZuZQlyNCwgcjQsIHB1bGwgIzgKKwkJb3JybmUJcjQsIHI0LCByNywgcHVzaCAjMjQKKwkJc3RtbmVpYQlyMCEsIHtyMyAtIHI0fQorCQl0c3QJaXAsICM0CisJCW1vdm5lCXIzLCByNywgcHVsbCAjOAorVVNFUigJCWxkcm5ldAlyNywgW3IxXSwgIzQpCQkJQCBNYXkgZmF1bHQKKwkJb3JybmUJcjMsIHIzLCByNywgcHVzaCAjMjQKKwkJc3RybmUJcjMsIFtyMF0sICM0CisJCWFuZHMJaXAsIGlwLCAjMworCQliZXEJLmNmdV8xZnVwaQorLmNmdV8xbm93b3JkczoJbW92CXIzLCByNywgZ2V0X2J5dGVfMQorCQl0ZXEJaXAsICMwCisJCWJlcQkuY2Z1X2ZpbmlzaGVkCisJCWNtcAlpcCwgIzIKKwkJc3RyYglyMywgW3IwXSwgIzEKKwkJbW92Z2UJcjMsIHI3LCBnZXRfYnl0ZV8yCisJCXN0cmdlYglyMywgW3IwXSwgIzEKKwkJbW92Z3QJcjMsIHI3LCBnZXRfYnl0ZV8zCisJCXN0cmd0YglyMywgW3IwXSwgIzEKKwkJYgkuY2Z1X2ZpbmlzaGVkCisKKy5jZnVfMmZ1cGk6CXN1YnMJcjIsIHIyLCAjNAorCQlhZGRtaQlpcCwgcjIsICM0CisJCWJtaQkuY2Z1XzJub3dvcmRzCisJCW1vdglyMywgcjcsIHB1bGwgIzE2CitVU0VSKAkJbGRydAlyNywgW3IxXSwgIzQpCQkJQCBNYXkgZmF1bHQKKwkJb3JyCXIzLCByMywgcjcsIHB1c2ggIzE2CisJCXN0cglyMywgW3IwXSwgIzQKKwkJbW92CWlwLCByMSwgbHNsICMzMiAtIFBBR0VfU0hJRlQKKwkJcnNiCWlwLCBpcCwgIzAKKwkJbW92cwlpcCwgaXAsIGxzciAjMzIgLSBQQUdFX1NISUZUCisJCWJlcQkuY2Z1XzJmdXBpCisJCWNtcAlyMiwgaXAKKwkJbW92bHQJaXAsIHIyCisJCXN1YglyMiwgcjIsIGlwCisJCXN1YnMJaXAsIGlwLCAjMTYKKwkJYmx0CS5jZnVfMnJlbThscAorCVBMRCgJcGxkCVtyMSwgIzEyXQkJKQorCVBMRCgJcGxkCVtyMCwgIzEyXQkJKQorCVBMRCgJc3VicwlpcCwgaXAsICMzMgkJKQorCVBMRCgJYmx0CS5jZnVfMmNweW5vcGxkCQkpCisJUExEKAlwbGQJW3IxLCAjMjhdCQkpCisJUExEKAlwbGQJW3IwLCAjMjhdCQkpCisKKy5jZnVfMmNweThscDoKKwlQTEQoCXBsZAlbcjEsICM0NF0JCSkKKwlQTEQoCXBsZAlbcjAsICM0NF0JCSkKKy5jZnVfMmNweW5vcGxkOgltb3YJcjMsIHI3LCBwdWxsICMxNgorCQlsZG1pYQlyMSEsIHtyNCAtIHI3fQkJCUAgU2hvdWxkbnQgZmF1bHQKKwkJc3VicwlpcCwgaXAsICMxNgorCQlvcnIJcjMsIHIzLCByNCwgcHVzaCAjMTYKKwkJbW92CXI0LCByNCwgcHVsbCAjMTYKKwkJb3JyCXI0LCByNCwgcjUsIHB1c2ggIzE2CisJCW1vdglyNSwgcjUsIHB1bGwgIzE2CisJCW9ycglyNSwgcjUsIHI2LCBwdXNoICMxNgorCQltb3YJcjYsIHI2LCBwdWxsICMxNgorCQlvcnIJcjYsIHI2LCByNywgcHVzaCAjMTYKKwkJc3RtaWEJcjAhLCB7cjMgLSByNn0KKwkJYnBsCS5jZnVfMmNweThscAorCVBMRCgJY21uCWlwLCAjMzIJCQkpCisJUExEKAliZ2UJLmNmdV8yY3B5bm9wbGQJCSkKKwlQTEQoCWFkZAlpcCwgaXAsICMzMgkJKQorCisuY2Z1XzJyZW04bHA6CXRzdAlpcCwgIzgKKwkJbW92bmUJcjMsIHI3LCBwdWxsICMxNgorCQlsZG1uZWlhCXIxISwge3I0LCByN30JCQlAIFNob3VsZG50IGZhdWx0CisJCW9ycm5lCXIzLCByMywgcjQsIHB1c2ggIzE2CisJCW1vdm5lCXI0LCByNCwgcHVsbCAjMTYKKwkJb3JybmUJcjQsIHI0LCByNywgcHVzaCAjMTYKKwkJc3RtbmVpYQlyMCEsIHtyMyAtIHI0fQorCQl0c3QJaXAsICM0CisJCW1vdm5lCXIzLCByNywgcHVsbCAjMTYKK1VTRVIoCQlsZHJuZXQJcjcsIFtyMV0sICM0KQkJCUAgTWF5IGZhdWx0CisJCW9ycm5lCXIzLCByMywgcjcsIHB1c2ggIzE2CisJCXN0cm5lCXIzLCBbcjBdLCAjNAorCQlhbmRzCWlwLCBpcCwgIzMKKwkJYmVxCS5jZnVfMmZ1cGkKKy5jZnVfMm5vd29yZHM6CW1vdglyMywgcjcsIGdldF9ieXRlXzIKKwkJdGVxCWlwLCAjMAorCQliZXEJLmNmdV9maW5pc2hlZAorCQljbXAJaXAsICMyCisJCXN0cmIJcjMsIFtyMF0sICMxCisJCW1vdmdlCXIzLCByNywgZ2V0X2J5dGVfMworCQlzdHJnZWIJcjMsIFtyMF0sICMxCitVU0VSKAkJbGRyZ3RidAlyMywgW3IxXSwgIzApCQkJQCBNYXkgZmF1bHQKKwkJc3RyZ3RiCXIzLCBbcjBdLCAjMQorCQliCS5jZnVfZmluaXNoZWQKKworLmNmdV8zZnVwaToJc3VicwlyMiwgcjIsICM0CisJCWFkZG1pCWlwLCByMiwgIzQKKwkJYm1pCS5jZnVfM25vd29yZHMKKwkJbW92CXIzLCByNywgcHVsbCAjMjQKK1VTRVIoCQlsZHJ0CXI3LCBbcjFdLCAjNCkJCQlAIE1heSBmYXVsdAorCQlvcnIJcjMsIHIzLCByNywgcHVzaCAjOAorCQlzdHIJcjMsIFtyMF0sICM0CisJCW1vdglpcCwgcjEsIGxzbCAjMzIgLSBQQUdFX1NISUZUCisJCXJzYglpcCwgaXAsICMwCisJCW1vdnMJaXAsIGlwLCBsc3IgIzMyIC0gUEFHRV9TSElGVAorCQliZXEJLmNmdV8zZnVwaQorCQljbXAJcjIsIGlwCisJCW1vdmx0CWlwLCByMgorCQlzdWIJcjIsIHIyLCBpcAorCQlzdWJzCWlwLCBpcCwgIzE2CisJCWJsdAkuY2Z1XzNyZW04bHAKKwlQTEQoCXBsZAlbcjEsICMxMl0JCSkKKwlQTEQoCXBsZAlbcjAsICMxMl0JCSkKKwlQTEQoCXN1YnMJaXAsIGlwLCAjMzIJCSkKKwlQTEQoCWJsdAkuY2Z1XzNjcHlub3BsZAkJKQorCVBMRCgJcGxkCVtyMSwgIzI4XQkJKQorCVBMRCgJcGxkCVtyMCwgIzI4XQkJKQorCisuY2Z1XzNjcHk4bHA6CisJUExEKAlwbGQJW3IxLCAjNDRdCQkpCisJUExEKAlwbGQJW3IwLCAjNDRdCQkpCisuY2Z1XzNjcHlub3BsZDoJbW92CXIzLCByNywgcHVsbCAjMjQKKwkJbGRtaWEJcjEhLCB7cjQgLSByN30JCQlAIFNob3VsZG50IGZhdWx0CisJCW9ycglyMywgcjMsIHI0LCBwdXNoICM4CisJCW1vdglyNCwgcjQsIHB1bGwgIzI0CisJCW9ycglyNCwgcjQsIHI1LCBwdXNoICM4CisJCW1vdglyNSwgcjUsIHB1bGwgIzI0CisJCW9ycglyNSwgcjUsIHI2LCBwdXNoICM4CisJCW1vdglyNiwgcjYsIHB1bGwgIzI0CisJCW9ycglyNiwgcjYsIHI3LCBwdXNoICM4CisJCXN0bWlhCXIwISwge3IzIC0gcjZ9CisJCXN1YnMJaXAsIGlwLCAjMTYKKwkJYnBsCS5jZnVfM2NweThscAorCVBMRCgJY21uCWlwLCAjMzIJCQkpCisJUExEKAliZ2UJLmNmdV8zY3B5bm9wbGQJCSkKKwlQTEQoCWFkZAlpcCwgaXAsICMzMgkJKQorCisuY2Z1XzNyZW04bHA6CXRzdAlpcCwgIzgKKwkJbW92bmUJcjMsIHI3LCBwdWxsICMyNAorCQlsZG1uZWlhCXIxISwge3I0LCByN30JCQlAIFNob3VsZG50IGZhdWx0CisJCW9ycm5lCXIzLCByMywgcjQsIHB1c2ggIzgKKwkJbW92bmUJcjQsIHI0LCBwdWxsICMyNAorCQlvcnJuZQlyNCwgcjQsIHI3LCBwdXNoICM4CisJCXN0bW5laWEJcjAhLCB7cjMgLSByNH0KKwkJdHN0CWlwLCAjNAorCQltb3ZuZQlyMywgcjcsIHB1bGwgIzI0CitVU0VSKAkJbGRybmV0CXI3LCBbcjFdLCAjNCkJCQlAIE1heSBmYXVsdAorCQlvcnJuZQlyMywgcjMsIHI3LCBwdXNoICM4CisJCXN0cm5lCXIzLCBbcjBdLCAjNAorCQlhbmRzCWlwLCBpcCwgIzMKKwkJYmVxCS5jZnVfM2Z1cGkKKy5jZnVfM25vd29yZHM6CW1vdglyMywgcjcsIGdldF9ieXRlXzMKKwkJdGVxCWlwLCAjMAorCQliZXEJLmNmdV9maW5pc2hlZAorCQljbXAJaXAsICMyCisJCXN0cmIJcjMsIFtyMF0sICMxCitVU0VSKAkJbGRyZ2VidAlyMywgW3IxXSwgIzEpCQkJQCBNYXkgZmF1bHQKKwkJc3RyZ2ViCXIzLCBbcjBdLCAjMQorVVNFUigJCWxkcmd0YnQJcjMsIFtyMV0sICMxKQkJCUAgTWF5IGZhdWx0CisJCXN0cmd0YglyMywgW3IwXSwgIzEKKwkJYgkuY2Z1X2ZpbmlzaGVkCisKKwkJLnNlY3Rpb24gLmZpeHVwLCJheCIKKwkJLmFsaWduCTAKKwkJLyoKKwkJICogV2UgdG9vayBhbiBleGNlcHRpb24uICByMCBjb250YWlucyBhIHBvaW50ZXIgdG8KKwkJICogdGhlIGJ5dGUgbm90IGNvcGllZC4KKwkJICovCis5MDAxOgkJbGRyCXIyLCBbc3BdLCAjNAkJCUAgdm9pZCAqdG8KKwkJc3ViCXIyLCByMCwgcjIJCQlAIGJ5dGVzIGNvcGllZAorCQlsZHIJcjEsIFtzcF0sICM0CQkJQCB1bnNpZ25lZCBsb25nIGNvdW50CisJCXN1YnMJcjQsIHIxLCByMgkJCUAgYnl0ZXMgbGVmdCB0byBjb3B5CisJCW1vdm5lCXIxLCByNAorCQlibG5lCV9fbWVtemVybworCQltb3YJcjAsIHI0CisJCUxPQURSRUdTKGZkLHNwISwge3I0IC0gcjcsIHBjfSkKKwkJLnByZXZpb3VzCisKKy8qIFByb3RvdHlwZTogaW50IF9fYXJjaF9jbGVhcl91c2VyKHZvaWQgKmFkZHIsIHNpemVfdCBzeikKKyAqIFB1cnBvc2UgIDogY2xlYXIgc29tZSB1c2VyIG1lbW9yeQorICogUGFyYW1zICAgOiBhZGRyIC0gdXNlciBtZW1vcnkgYWRkcmVzcyB0byBjbGVhcgorICogICAgICAgICAgOiBzeiAgIC0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNsZWFyCisgKiBSZXR1cm5zICA6IG51bWJlciBvZiBieXRlcyBOT1QgY2xlYXJlZAorICovCitFTlRSWShfX2FyY2hfY2xlYXJfdXNlcikKKwkJc3RtZmQJc3AhLCB7cjEsIGxyfQorCQltb3YJcjIsICMwCisJCWNtcAlyMSwgIzQKKwkJYmx0CTJmCisJCWFuZHMJaXAsIHIwLCAjMworCQliZXEJMWYKKwkJY21wCWlwLCAjMgorVVNFUigJCXN0cmJ0CXIyLCBbcjBdLCAjMSkKK1VTRVIoCQlzdHJsZWJ0CXIyLCBbcjBdLCAjMSkKK1VTRVIoCQlzdHJsdGJ0CXIyLCBbcjBdLCAjMSkKKwkJcnNiCWlwLCBpcCwgIzQKKwkJc3ViCXIxLCByMSwgaXAJCUAgIDcgIDYgIDUgIDQgIDMgIDIgIDEKKzE6CQlzdWJzCXIxLCByMSwgIzgJCUAgLTEgLTIgLTMgLTQgLTUgLTYgLTcKK1VTRVIoCQlzdHJwbHQJcjIsIFtyMF0sICM0KQorVVNFUigJCXN0cnBsdAlyMiwgW3IwXSwgIzQpCisJCWJwbAkxYgorCQlhZGRzCXIxLCByMSwgIzQJCUAgIDMgIDIgIDEgIDAgLTEgLTIgLTMKK1VTRVIoCQlzdHJwbHQJcjIsIFtyMF0sICM0KQorMjoJCXRzdAlyMSwgIzIJCQlAIDF4IDF4IDB4IDB4IDF4IDF4IDB4CitVU0VSKAkJc3RybmVidAlyMiwgW3IwXSwgIzEpCitVU0VSKAkJc3RybmVidAlyMiwgW3IwXSwgIzEpCisJCXRzdAlyMSwgIzEJCQlAIHgxIHgwIHgxIHgwIHgxIHgwIHgxCitVU0VSKAkJc3RybmVidAlyMiwgW3IwXSwgIzEpCisJCW1vdglyMCwgIzAKKwkJTE9BRFJFR1MoZmQsc3AhLCB7cjEsIHBjfSkKKworCQkuc2VjdGlvbiAuZml4dXAsImF4IgorCQkuYWxpZ24JMAorOTAwMToJCUxPQURSRUdTKGZkLHNwISwge3IwLCBwY30pCisJCS5wcmV2aW91cworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvdWNtcGRpMi5jIGIvYXJjaC9hcm0vbGliL3VjbXBkaTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzZhZTYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbGliL3VjbXBkaTIuYwpAQCAtMCwwICsxLDUxIEBACisvKiBNb3JlIHN1YnJvdXRpbmVzIG5lZWRlZCBieSBHQ0Mgb3V0cHV0IGNvZGUgb24gc29tZSBtYWNoaW5lcy4gICovCisvKiBDb21waWxlIHRoaXMgb25lIHdpdGggZ2NjLiAgKi8KKy8qIENvcHlyaWdodCAoQykgMTk4OSwgOTItOTgsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBDQy4KKworR05VIENDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR05VIENDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR05VIENDOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKK0Jvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgaWYgeW91IGxpbmsgdGhpcyBsaWJyYXJ5IHdpdGggb3RoZXIgZmlsZXMsCisgICBzb21lIG9mIHdoaWNoIGFyZSBjb21waWxlZCB3aXRoIEdDQywgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLAorICAgdGhpcyBsaWJyYXJ5IGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUKKyAgIHRvIGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlciBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeQorICAgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAqLworLyogc3VwcG9ydCBmdW5jdGlvbnMgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbC4gYmFzZWQgb24gY29kZSBmcm9tIGdjYy0yLjk1LjMgKi8KKy8qIEkgTW9sdG9uICAgICAyOS8wNy8wMSAqLworCisjaW5jbHVkZSAiZ2NjbGliLmgiCisKK3dvcmRfdHlwZQorX191Y21wZGkyIChESXR5cGUgYSwgREl0eXBlIGIpCit7CisgIERJdW5pb24gYXUsIGJ1OworCisgIGF1LmxsID0gYSwgYnUubGwgPSBiOworCisgIGlmICgoVVNJdHlwZSkgYXUucy5oaWdoIDwgKFVTSXR5cGUpIGJ1LnMuaGlnaCkKKyAgICByZXR1cm4gMDsKKyAgZWxzZSBpZiAoKFVTSXR5cGUpIGF1LnMuaGlnaCA+IChVU0l0eXBlKSBidS5zLmhpZ2gpCisgICAgcmV0dXJuIDI7CisgIGlmICgoVVNJdHlwZSkgYXUucy5sb3cgPCAoVVNJdHlwZSkgYnUucy5sb3cpCisgICAgcmV0dXJuIDA7CisgIGVsc2UgaWYgKChVU0l0eXBlKSBhdS5zLmxvdyA+IChVU0l0eXBlKSBidS5zLmxvdykKKyAgICByZXR1cm4gMjsKKyAgcmV0dXJuIDE7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi91ZGl2ZGkzLmMgYi9hcmNoL2FybS9saWIvdWRpdmRpMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNTE5NWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9saWIvdWRpdmRpMy5jCkBAIC0wLDAgKzEsMjQyIEBACisvKiBNb3JlIHN1YnJvdXRpbmVzIG5lZWRlZCBieSBHQ0Mgb3V0cHV0IGNvZGUgb24gc29tZSBtYWNoaW5lcy4gICovCisvKiBDb21waWxlIHRoaXMgb25lIHdpdGggZ2NjLiAgKi8KKy8qIENvcHlyaWdodCAoQykgMTk4OSwgOTItOTgsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBDQy4KKworR05VIENDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR05VIENDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR05VIENDOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKK0Jvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgaWYgeW91IGxpbmsgdGhpcyBsaWJyYXJ5IHdpdGggb3RoZXIgZmlsZXMsCisgICBzb21lIG9mIHdoaWNoIGFyZSBjb21waWxlZCB3aXRoIEdDQywgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLAorICAgdGhpcyBsaWJyYXJ5IGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUKKyAgIHRvIGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlciBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeQorICAgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAqLworLyogc3VwcG9ydCBmdW5jdGlvbnMgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbC4gYmFzZWQgb24gY29kZSBmcm9tIGdjYy0yLjk1LjMgKi8KKy8qIEkgTW9sdG9uICAgICAyOS8wNy8wMSAqLworCisjaW5jbHVkZSAiZ2NjbGliLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworc3RhdGljIGNvbnN0IFVRSXR5cGUgX19jbHpfdGFiW10gPQoreworICAwLDEsMiwyLDMsMywzLDMsNCw0LDQsNCw0LDQsNCw0LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsCisgIDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiwKKyAgNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LAorICA3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsCisgIDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCwKKyAgOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LAorICA4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsCisgIDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCwKK307CisKK1VESXR5cGUKK19fdWRpdm1vZGRpNCAoVURJdHlwZSBuLCBVREl0eXBlIGQsIFVESXR5cGUgKnJwKQoreworICBESXVuaW9uIHd3OworICBESXVuaW9uIG5uLCBkZDsKKyAgREl1bmlvbiBycjsKKyAgVVNJdHlwZSBkMCwgZDEsIG4wLCBuMSwgbjI7CisgIFVTSXR5cGUgcTAsIHExOworICBVU0l0eXBlIGIsIGJtOworCisgIG5uLmxsID0gbjsKKyAgZGQubGwgPSBkOworCisgIGQwID0gZGQucy5sb3c7CisgIGQxID0gZGQucy5oaWdoOworICBuMCA9IG5uLnMubG93OworICBuMSA9IG5uLnMuaGlnaDsKKworICBpZiAoZDEgPT0gMCkKKyAgICB7CisgICAgICBpZiAoZDAgPiBuMSkKKyAgICAgICAgeworICAgICAgICAgIC8qIDBxID0gbm4gLyAwRCAqLworCisgICAgICAgICAgY291bnRfbGVhZGluZ196ZXJvcyAoYm0sIGQwKTsKKworICAgICAgICAgIGlmIChibSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBOb3JtYWxpemUsIGkuZS4gbWFrZSB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlCisgICAgICAgICAgICAgICAgIGRlbm9taW5hdG9yIHNldC4gICovCisKKyAgICAgICAgICAgICAgZDAgPSBkMCA8PCBibTsKKyAgICAgICAgICAgICAgbjEgPSAobjEgPDwgYm0pIHwgKG4wID4+IChTSV9UWVBFX1NJWkUgLSBibSkpOworICAgICAgICAgICAgICBuMCA9IG4wIDw8IGJtOworICAgICAgICAgICAgfQorCisgICAgICAgICAgdWRpdl9xcm5uZCAocTAsIG4wLCBuMSwgbjAsIGQwKTsKKyAgICAgICAgICBxMSA9IDA7CisKKyAgICAgICAgICAvKiBSZW1haW5kZXIgaW4gbjAgPj4gYm0uICAqLworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBxcSA9IE5OIC8gMGQgKi8KKworICAgICAgICAgIGlmIChkMCA9PSAwKQorICAgICAgICAgICAgZDAgPSAxIC8gZDA7ICAgICAgICAvKiBEaXZpZGUgaW50ZW50aW9uYWxseSBieSB6ZXJvLiAgKi8KKworICAgICAgICAgIGNvdW50X2xlYWRpbmdfemVyb3MgKGJtLCBkMCk7CisKKyAgICAgICAgICBpZiAoYm0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogRnJvbSAobjEgPj0gZDApIC9cICh0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgZDAgaXMgc2V0KSwKKyAgICAgICAgICAgICAgICAgY29uY2x1ZGUgKHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiBuMSBpcyBzZXQpIC9cICh0aGUKKyAgICAgICAgICAgICAgICAgbGVhZGluZyBxdW90aWVudCBkaWdpdCBxMSA9IDEpLgorCisgICAgICAgICAgICAgICAgIFRoaXMgc3BlY2lhbCBjYXNlIGlzIG5lY2Vzc2FyeSwgbm90IGFuIG9wdGltaXphdGlvbi4KKyAgICAgICAgICAgICAgICAgKFNoaWZ0cyBjb3VudHMgb2YgU0lfVFlQRV9TSVpFIGFyZSB1bmRlZmluZWQuKSAgKi8KKworICAgICAgICAgICAgICBuMSAtPSBkMDsKKyAgICAgICAgICAgICAgcTEgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogTm9ybWFsaXplLiAgKi8KKworICAgICAgICAgICAgICBiID0gU0lfVFlQRV9TSVpFIC0gYm07CisKKyAgICAgICAgICAgICAgZDAgPSBkMCA8PCBibTsKKyAgICAgICAgICAgICAgbjIgPSBuMSA+PiBiOworICAgICAgICAgICAgICBuMSA9IChuMSA8PCBibSkgfCAobjAgPj4gYik7CisgICAgICAgICAgICAgIG4wID0gbjAgPDwgYm07CisKKyAgICAgICAgICAgICAgdWRpdl9xcm5uZCAocTEsIG4xLCBuMiwgbjEsIGQwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIC8qIG4xICE9IGQwLi4uICAqLworCisgICAgICAgICAgdWRpdl9xcm5uZCAocTAsIG4wLCBuMSwgbjAsIGQwKTsKKworICAgICAgICAgIC8qIFJlbWFpbmRlciBpbiBuMCA+PiBibS4gICovCisgICAgICAgIH0KKworICAgICAgaWYgKHJwICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICByci5zLmxvdyA9IG4wID4+IGJtOworICAgICAgICAgIHJyLnMuaGlnaCA9IDA7CisgICAgICAgICAgKnJwID0gcnIubGw7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoZDEgPiBuMSkKKyAgICAgICAgeworICAgICAgICAgIC8qIDAwID0gbm4gLyBERCAqLworCisgICAgICAgICAgcTAgPSAwOworICAgICAgICAgIHExID0gMDsKKworICAgICAgICAgIC8qIFJlbWFpbmRlciBpbiBuMW4wLiAgKi8KKyAgICAgICAgICBpZiAocnAgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcnIucy5sb3cgPSBuMDsKKyAgICAgICAgICAgICAgcnIucy5oaWdoID0gbjE7CisgICAgICAgICAgICAgICpycCA9IHJyLmxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiAwcSA9IE5OIC8gZGQgKi8KKworICAgICAgICAgIGNvdW50X2xlYWRpbmdfemVyb3MgKGJtLCBkMSk7CisgICAgICAgICAgaWYgKGJtID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIEZyb20gKG4xID49IGQxKSAvXCAodGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIGQxIGlzIHNldCksCisgICAgICAgICAgICAgICAgIGNvbmNsdWRlICh0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgbjEgaXMgc2V0KSAvXCAodGhlCisgICAgICAgICAgICAgICAgIHF1b3RpZW50IGRpZ2l0IHEwID0gMCBvciAxKS4KKworICAgICAgICAgICAgICAgICBUaGlzIHNwZWNpYWwgY2FzZSBpcyBuZWNlc3NhcnksIG5vdCBhbiBvcHRpbWl6YXRpb24uICAqLworCisgICAgICAgICAgICAgIC8qIFRoZSBjb25kaXRpb24gb24gdGhlIG5leHQgbGluZSB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhhdAorICAgICAgICAgICAgICAgICBuMSA+PSBkMSAodHJ1ZSBkdWUgdG8gcHJvZ3JhbSBmbG93KS4gICovCisgICAgICAgICAgICAgIGlmIChuMSA+IGQxIHx8IG4wID49IGQwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHEwID0gMTsKKyAgICAgICAgICAgICAgICAgIHN1Yl9kZG1tc3MgKG4xLCBuMCwgbjEsIG4wLCBkMSwgZDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHEwID0gMDsKKworICAgICAgICAgICAgICBxMSA9IDA7CisKKyAgICAgICAgICAgICAgaWYgKHJwICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgcnIucy5sb3cgPSBuMDsKKyAgICAgICAgICAgICAgICAgIHJyLnMuaGlnaCA9IG4xOworICAgICAgICAgICAgICAgICAgKnJwID0gcnIubGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgVVNJdHlwZSBtMSwgbTA7CisgICAgICAgICAgICAgIC8qIE5vcm1hbGl6ZS4gICovCisKKyAgICAgICAgICAgICAgYiA9IFNJX1RZUEVfU0laRSAtIGJtOworCisgICAgICAgICAgICAgIGQxID0gKGQxIDw8IGJtKSB8IChkMCA+PiBiKTsKKyAgICAgICAgICAgICAgZDAgPSBkMCA8PCBibTsKKyAgICAgICAgICAgICAgbjIgPSBuMSA+PiBiOworICAgICAgICAgICAgICBuMSA9IChuMSA8PCBibSkgfCAobjAgPj4gYik7CisgICAgICAgICAgICAgIG4wID0gbjAgPDwgYm07CisKKyAgICAgICAgICAgICAgdWRpdl9xcm5uZCAocTAsIG4xLCBuMiwgbjEsIGQxKTsKKyAgICAgICAgICAgICAgdW11bF9wcG1tIChtMSwgbTAsIHEwLCBkMCk7CisKKyAgICAgICAgICAgICAgaWYgKG0xID4gbjEgfHwgKG0xID09IG4xICYmIG0wID4gbjApKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHEwLS07CisgICAgICAgICAgICAgICAgICBzdWJfZGRtbXNzIChtMSwgbTAsIG0xLCBtMCwgZDEsIGQwKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgcTEgPSAwOworCisgICAgICAgICAgICAgIC8qIFJlbWFpbmRlciBpbiAobjFuMCAtIG0xbTApID4+IGJtLiAgKi8KKyAgICAgICAgICAgICAgaWYgKHJwICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgc3ViX2RkbW1zcyAobjEsIG4wLCBuMSwgbjAsIG0xLCBtMCk7CisgICAgICAgICAgICAgICAgICByci5zLmxvdyA9IChuMSA8PCBiKSB8IChuMCA+PiBibSk7CisgICAgICAgICAgICAgICAgICByci5zLmhpZ2ggPSBuMSA+PiBibTsKKyAgICAgICAgICAgICAgICAgICpycCA9IHJyLmxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICB3dy5zLmxvdyA9IHEwOworICB3dy5zLmhpZ2ggPSBxMTsKKyAgcmV0dXJuIHd3LmxsOworfQorCitVREl0eXBlCitfX3VkaXZkaTMgKFVESXR5cGUgbiwgVURJdHlwZSBkKQoreworICByZXR1cm4gX191ZGl2bW9kZGk0IChuLCBkLCAoVURJdHlwZSAqKSAwKTsKK30KKworVURJdHlwZQorX191bW9kZGkzIChVREl0eXBlIHUsIFVESXR5cGUgdikKK3sKKyAgVURJdHlwZSB3OworCisgICh2b2lkKSBfX3VkaXZtb2RkaTQgKHUgLHYsICZ3KTsKKworICByZXR1cm4gdzsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZTY3NjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L0tjb25maWcKQEAgLTAsMCArMSw3MSBAQAoraWYgQVJDSF9DTFBTNzExWAorCittZW51ICJDTFBTNzExWC9FUDcyMVggSW1wbGVtZW50YXRpb25zIgorCitjb25maWcgQVJDSF9BVVRDUFUxMgorCWJvb2wgIkFVVENQVTEyIgorCWhlbHAKKwkgIFNheSBZIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoZSBrZXJuZWwgb24gdGhlIGF1dHJvbml4IGF1dGNwdTEyCisJICBib2FyZC4gVGhpcyBib2FyZCBpcyBiYXNlZCBvbiBhIENpcnJ1cyBMb2dpYyBDUzg5NzEyLgorCitjb25maWcgQVJDSF9DREI4OTcxMgorCWJvb2wgIkNEQjg5NzEyIgorCWhlbHAKKwkgIFRoaXMgaXMgYW4gZXZhbHVhdGlvbiBib2FyZCBmcm9tIENpcnJ1cyBmb3IgdGhlIENTODk3MTIgcHJvY2Vzc29yLgorCSAgVGhlIGJvYXJkIGluY2x1ZGVzIDIgc2VyaWFsIHBvcnRzLCBFdGhlcm5ldCwgSVJEQSwgYW5kIGV4cGFuc2lvbgorCSAgaGVhZGVycy4gIEl0IGNvbWVzIHdpdGggMTYgTUIgU0RSQU0gYW5kIDggTUIgZmxhc2ggUk9NLgorCitjb25maWcgQVJDSF9DRUlWQQorCWJvb2wgIkNFSVZBIgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gdGhlIENlaXZhL1BvbGFyb2lkCisJICBQaG90b01heCBEaWdpdGFsIFBpY3R1cmUgRnJhbWUuCisKK2NvbmZpZyBBUkNIX0NMRVA3MzEyCisJYm9vbCAiQ0xFUDczMTIiCisKK2NvbmZpZyBBUkNIX0VEQjcyMTEKKwlib29sICJFREI3MjExIgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYSBDaXJydXMgTG9naWMgRURCLTcyMTEKKwkgIGV2YWx1YXRpb24gYm9hcmQuCisKK2NvbmZpZyBBUkNIX1A3MjBUCisJYm9vbCAiUDcyMFQiCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiB0aGUgQVJNIFByb3NwZWN0b3IKKwkgIDcyMFQuCisKK2NvbmZpZyBBUkNIX0ZPUlRVTkVUCisJYm9vbCAiRk9SVFVORVQiCisKKyMgWFhYIE1heWJlIHRoZXNlIHNob3VsZCBpbmRpY2F0ZSByZWdpc3RlciBjb21wYXRpYmlsaXR5CisjIGluc3RlYWQgb2YgYmVpbmcgbXV0dWFsbHkgZXhjbHVzaXZlLgorY29uZmlnIEFSQ0hfRVA3MjExCisJYm9vbAorCWRlcGVuZHMgb24gQVJDSF9FREI3MjExCisJZGVmYXVsdCB5CisKK2NvbmZpZyBBUkNIX0VQNzIxMgorCWJvb2wKKwlkZXBlbmRzIG9uIEFSQ0hfUDcyMFQgfHwgQVJDSF9DRUlWQQorCWRlZmF1bHQgeQorCitjb25maWcgRVA3MlhYX1JPTV9CT09UCisJYm9vbCAiRVA3Mnh4IFJPTSBib290IgorCWRlcGVuZHMgb24gQVJDSF9FUDcyMTEgfHwgQVJDSF9FUDcyMTIKKwktLS1oZWxwLS0tCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91ciBDTFBTNzExeC1iYXNlZCBrZXJuZWwgd2lsbCB1c2UgdGhlIGJvb3RzdHJhcAorCSAgbW9kZSBtZW1vcnkgbWFwIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBtZW1vcnkgbWFwLgorCisJICBQcm9jZXNzb3JzIGRlcml2ZWQgZnJvbSB0aGUgQ2lycnVzIENMUFMtNzExWCBjb3JlIHN1cHBvcnQgdHdvIGJvb3QKKwkgIG1vZGVzLiAgTm9ybWFsIG1vZGUgYm9vdHMgZnJvbSB0aGUgZXh0ZXJuYWwgbWVtb3J5IGRldmljZSBhdCBDUzAuCisJICBCb290c3RyYXAgbW9kZSByZWFycmFuZ2VzIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFwLCBwbGFjaW5nIGFuCisJICBpbnRlcm5hbCAxMjggYnl0ZSBib290c3RyYXAgUk9NIGF0IENTMC4gIFRoaXMgb3B0aW9uIHBlcmZvcm1zIHRoZQorCSAgYWRkcmVzcyBtYXAgY2hhbmdlcyByZXF1aXJlZCB0byBzdXBwb3J0IGJvb3RpbmcgaW4gdGhpcyBtb2RlLgorCisJICBZb3UgYWxtb3N0IHN1cmVseSB3YW50IHRvIHNheSBOIGhlcmUuCisKK2VuZG1lbnUKKworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMTk3MzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L01ha2VmaWxlCkBAIC0wLDAgKzEsMjAgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisjCisKKyMgT2JqZWN0IGZpbGUgbGlzdHMuCisKK29iai15CQkJOj0gaXJxLm8gbW0ubyB0aW1lLm8KK29iai1tCQkJOj0KK29iai1uCQkJOj0KK29iai0JCQk6PQorCitvYmotJChDT05GSUdfQVJDSF9DRUlWQSkgKz0gY2VpdmEubworb2JqLSQoQ09ORklHX0FSQ0hfQVVUQ1BVMTIpICs9IGF1dGNwdTEyLm8KK29iai0kKENPTkZJR19BUkNIX0NEQjg5NzEyKSArPSBjZGI4OTcxMi5vCitvYmotJChDT05GSUdfQVJDSF9DTEVQNzMxMikgKz0gY2xlcDczMTIubworb2JqLSQoQ09ORklHX0FSQ0hfRURCNzIxMSkgICs9IGVkYjcyMTEtYXJjaC5vIGVkYjcyMTEtbW0ubworb2JqLSQoQ09ORklHX0FSQ0hfRk9SVFVORVQpICs9IGZvcnR1bmV0Lm8KK29iai0kKENPTkZJR19BUkNIX1A3MjBUKSAgICArPSBwNzIwdC5vCitsZWRzLSQoQ09ORklHX0FSQ0hfUDcyMFQpICAgKz0gcDcyMHQtbGVkcy5vCitvYmotJChDT05GSUdfTEVEUykgICAgICAgICAgKz0gJChsZWRzLXkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNscHM3MTF4L01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNkMjkzMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDcgQEAKKyMgVGhlIHN0YW5kYXJkIGxvY2F0aW9ucyBmb3Igc3R1ZmYgb24gQ0xQUzcxMXggdHlwZSBwcm9jZXNzb3JzCisgICB6cmVsYWRkci15CQkJCTo9IDB4YzAwMjgwMDAgCitwYXJhbXNfcGh5cy15CQkJCTo9IDB4YzAwMDAxMDAKKyMgU2hvdWxkIHByb2JhYmx5IGhhdmUgc29tZSBhZ3JlZW1lbnQgb24gdGhlc2UuLi4KK2luaXRyZF9waHlzLSQoQ09ORklHX0FSQ0hfUDcyMFQpCTo9IDB4YzA0MDAwMDAKK2luaXRyZF9waHlzLSQoQ09ORklHX0FSQ0hfQ0RCODk3MTIpCTo9IDB4MDA3MDAwMDAKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9hdXRjcHUxMi5jIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9hdXRjcHUxMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMDY3MDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2F1dGNwdTEyLmMKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2F1dGNwdTEyLmMKKyAqCisgKiAoYykgMjAwMSBUaG9tYXMgR2xlaXhuZXIsIGF1dHJvbml4IGF1dG9tYXRpb24gPGdsZWl4bmVyQGF1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hdXRjcHUxMi5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKKy8qCisgKiBUaGUgb24tY2hpcCByZWdpc3RlcnMgYXJlIGdpdmVuIGEgc2l6ZSBvZiAxTUIgc28gdGhhdCBhIHNlY3Rpb24gY2FuCisgKiBiZSB1c2VkIHRvIG1hcCB0aGVtOyB0aGlzIHNhdmVzIGEgcGFnZSB0YWJsZS4gIFRoaXMgaXMgdGhlIHBsYWNlIHRvCisgKiBhZGQgbWFwcGluZ3MgZm9yIFJPTSwgZXhwYW5zaW9uIG1lbW9yeSwgUENNQ0lBLCBldGMuICAoaWYgc3RhdGljCisgKiBtYXBwaW5ncyBhcmUgY2hvc2VuIGZvciB0aG9zZSBhcmVhcykuCisgKgorKi8KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBhdXRjcHUxMl9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKyAvKiB2aXJ0dWFsLCBwaHlzaWNhbCwgbGVuZ3RoLCB0eXBlICovCisgLyogbWVtb3J5LW1hcHBlZCBleHRyYSBpbyBhbmQgQ1M4OTAwQSBFdGhlcm5ldCBjaGlwICovCisgLyogZXRoZXJuZXQgY2hpcCAqLworIAl7IEFVVENQVTEyX1ZJUlRfQ1M4OTAwQSwgQVVUQ1BVMTJfUEhZU19DUzg5MDBBLCBTWl8xTSwgTVRfREVWSUNFIH0KK307CisKK3ZvaWQgX19pbml0IGF1dGNwdTEyX21hcF9pbyh2b2lkKQoreworICAgICAgICBjbHBzNzExeF9tYXBfaW8oKTsKKyAgICAgICAgaW90YWJsZV9pbml0KGF1dGNwdTEyX2lvX2Rlc2MsIEFSUkFZX1NJWkUoYXV0Y3B1MTJfaW9fZGVzYykpOworfQorCitNQUNISU5FX1NUQVJUKEFVVENQVTEyLCAiYXV0cm9uaXggYXV0Y3B1MTIiKQorCU1BSU5UQUlORVIoIlRob21hcyBHbGVpeG5lciIpCisgICAgICAgIEJPT1RfTUVNKDB4YzAwMDAwMDAsIDB4ODAwMDAwMDAsIDB4ZmYwMDAwMDApCisJQk9PVF9QQVJBTVMoMHhjMDAyMDAwMCkKKwlNQVBJTyhhdXRjcHUxMl9tYXBfaW8pCisJSU5JVElSUShjbHBzNzExeF9pbml0X2lycSkKKwkudGltZXIJCT0gJmNscHM3MTF4X3RpbWVyLAorTUFDSElORV9FTkQKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9jZGI4OTcxMi5jIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9jZGI4OTcxMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NjRmOWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2NkYjg5NzEyLmMKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2NkYjg5NzEyLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKKy8qCisgKiBNYXAgdGhlIENTODk3MTIgRXRoZXJuZXQgcG9ydC4gIFRoYXQgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZQorICogZXRoZXJuZXQgZHJpdmVyLCBwZXJoYXBzLgorICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGNkYjg5NzEyX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsgRVRIRVJfQkFTRSwgRVRIRVJfU1RBUlQsIEVUSEVSX1NJWkUsIE1UX0RFVklDRSB9Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY2RiODk3MTJfbWFwX2lvKHZvaWQpCit7CisJY2xwczcxMXhfbWFwX2lvKCk7CisJaW90YWJsZV9pbml0KGNkYjg5NzEyX2lvX2Rlc2MsIEFSUkFZX1NJWkUoY2RiODk3MTJfaW9fZGVzYykpOworfQorCitNQUNISU5FX1NUQVJUKENEQjg5NzEyLCAiQ2lycnVzLUNEQjg5NzEyIikKKwlNQUlOVEFJTkVSKCJSYXkgTGVodGluaWVtaSIpCisJQk9PVF9NRU0oMHhjMDAwMDAwMCwgMHg4MDAwMDAwMCwgMHhmZjAwMDAwMCkKKwlCT09UX1BBUkFNUygweGMwMDAwMTAwKQorCU1BUElPKGNkYjg5NzEyX21hcF9pbykKKwlJTklUSVJRKGNscHM3MTF4X2luaXRfaXJxKQorCS50aW1lcgkJPSAmY2xwczcxMXhfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9jZWl2YS5jIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9jZWl2YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MDkzYmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2NlaXZhLmMKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2FyY2gtY2VpdmEuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIsIFJvYiBTY290dCA8cnNjb3R0QG10cm9iLmZkbnMubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgY2VpdmFfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisgLyogdmlydHVhbCwgcGh5c2ljYWwsIGxlbmd0aCwgdHlwZSAqLworCisgLyogU0VEMTM1NSBjb250cm9sbGVkIHZpZGVvIFJBTSAmIHJlZ2lzdGVycyAqLworIHsgQ0VJVkFfVklSVF9TRUQxMzU1LCBDRUlWQV9QSFlTX1NFRDEzNTUsIFNaXzJNLCBNVF9ERVZJQ0UgfQorCit9OworCisKK3N0YXRpYyB2b2lkIF9faW5pdCBjZWl2YV9tYXBfaW8odm9pZCkKK3sKKyAgICAgICAgY2xwczcxMXhfbWFwX2lvKCk7CisgICAgICAgIGlvdGFibGVfaW5pdChjZWl2YV9pb19kZXNjLCBBUlJBWV9TSVpFKGNlaXZhX2lvX2Rlc2MpKTsKK30KKworCitNQUNISU5FX1NUQVJUKENFSVZBLCAiQ0VJVkEvUG9sYXJvaWQgUGhvdG8gTUFYIERpZ2l0YWwgUGljdHVyZSBGcmFtZSIpCisJTUFJTlRBSU5FUigiUm9iIFNjb3R0IikKKwlCT09UX01FTSgweGMwMDAwMDAwLCAweDgwMDAwMDAwLCAweGZmMDAwMDAwKQorCUJPT1RfUEFSQU1TKDB4YzAwMDAxMDApCisJTUFQSU8oY2VpdmFfbWFwX2lvKQorCUlOSVRJUlEoY2xwczcxMXhfaW5pdF9pcnEpCisJLnRpbWVyCQk9ICZjbHBzNzExeF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2NsZXA3MzEyLmMgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2NsZXA3MzEyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNhMjFjYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvY2xlcDczMTIuYwpAQCAtMCwwICsxLDQ4IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtY2xwczcxMXgvY2xlcDczMTIuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKworc3RhdGljIHZvaWQgX19pbml0CitmaXh1cF9jbGVwNzMxMihzdHJ1Y3QgbWFjaGluZV9kZXNjICpkZXNjLCBzdHJ1Y3QgdGFnICp0YWdzLAorCSAgICBjaGFyICoqY21kbGluZSwgc3RydWN0IG1lbWluZm8gKm1pKQoreworCW1pLT5ucl9iYW5rcz0xOworCW1pLT5iYW5rWzBdLnN0YXJ0ID0gMHhjMDAwMDAwMDsKKwltaS0+YmFua1swXS5zaXplID0gMHgwMTAwMDAwMDsKKwltaS0+YmFua1swXS5ub2RlID0gMDsKK30KKworCitNQUNISU5FX1NUQVJUKENMRVA3MjEyLCAiQ2lycnVzIExvZ2ljIDcyMTIvNzMxMiIpCisJTUFJTlRBSU5FUigiTm9ib2R5IikKKyAgICAgICAgQk9PVF9NRU0oMHhjMDAwMDAwMCwgMHg4MDAwMDAwMCwgMHhmZjAwMDAwMCkKKwlCT09UX1BBUkFNUygweGMwMDAwMTAwKQorCUZJWFVQKGZpeHVwX2NsZXA3MzEyKQorCU1BUElPKGNscHM3MTF4X21hcF9pbykKKwlJTklUSVJRKGNscHM3MTF4X2luaXRfaXJxKQorCS50aW1lcgkJPSAmY2xwczcxMXhfdGltZXIsCitNQUNISU5FX0VORAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjhiODAxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9jb21tb24uaApAQCAtMCwwICsxLDExIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9jb21tb24uaAorICoKKyAqIENvbW1vbiBiaXRzLgorICovCisKK3N0cnVjdCBzeXNfdGltZXI7CisKK2V4dGVybiB2b2lkIGNscHM3MTF4X21hcF9pbyh2b2lkKTsKK2V4dGVybiB2b2lkIGNscHM3MTF4X2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgY2xwczcxMXhfdGltZXI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjVhNGRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9kbWEuYwpAQCAtMCwwICsxLDI3IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtY2xwczcxMXgvZG1hLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2RtYS5oPgorCit2b2lkIF9faW5pdCBhcmNoX2RtYV9pbml0KGRtYV90ICpkbWEpCit7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2VkYjcyMTEtYXJjaC5jIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9lZGI3MjExLWFyY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmM0NjMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9lZGI3MjExLWFyY2guYwpAQCAtMCwwICsxLDYxIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtY2xwczcxMXgvYXJjaC1lZGI3MjExLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxIEJsdWUgTXVnLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKworZXh0ZXJuIHZvaWQgZWRiNzIxMV9tYXBfaW8odm9pZCk7CisKK3N0YXRpYyB2b2lkIF9faW5pdAorZml4dXBfZWRiNzIxMShzdHJ1Y3QgbWFjaGluZV9kZXNjICpkZXNjLCBzdHJ1Y3QgdGFnICp0YWdzLAorCSAgICAgIGNoYXIgKipjbWRsaW5lLCBzdHJ1Y3QgbWVtaW5mbyAqbWkpCit7CisJLyoKKwkgKiBCYW5rIHN0YXJ0IGFkZHJlc3NlcyBhcmUgbm90IHByZXNlbnQgaW4gdGhlIGluZm9ybWF0aW9uCisJICogcGFzc2VkIGluIGZyb20gdGhlIGJvb3QgbG9hZGVyLiAgV2UgY291bGQgcG90ZW50aWFsbHkKKwkgKiBkZXRlY3QgdGhlbSwgYnV0IGluc3RlYWQgd2UgaGFyZC1jb2RlIHRoZW0uCisJICoKKwkgKiBCYW5rcyBzaXplcyBfYXJlXyBwcmVzZW50IGluIHRoZSBwYXJhbSBibG9jaywgYnV0IHdlJ3JlCisJICogbm90IHVzaW5nIHRoYXQgaW5mb3JtYXRpb24geWV0LgorCSAqLworCW1pLT5iYW5rWzBdLnN0YXJ0ID0gMHhjMDAwMDAwMDsKKwltaS0+YmFua1swXS5zaXplID0gOCoxMDI0KjEwMjQ7CisJbWktPmJhbmtbMF0ubm9kZSA9IDA7CisJbWktPmJhbmtbMV0uc3RhcnQgPSAweGMxMDAwMDAwOworCW1pLT5iYW5rWzFdLnNpemUgPSA4KjEwMjQqMTAyNDsKKwltaS0+YmFua1sxXS5ub2RlID0gMTsKKwltaS0+bnJfYmFua3MgPSAyOworfQorCitNQUNISU5FX1NUQVJUKEVEQjcyMTEsICJDTC1FREI3MjExIChFUDcyMTEgZXZhbCBib2FyZCkiKQorCU1BSU5UQUlORVIoIkpvbiBNY0NsaW50b2NrIikKKwlCT09UX01FTSgweGMwMDAwMDAwLCAweDgwMDAwMDAwLCAweGZmMDAwMDAwKQorCUJPT1RfUEFSQU1TKDB4YzAwMjAxMDApCS8qIDB4YzAwMDAwMDAgLSAweGMwMDFmZmZmIGNhbiBiZSB2aWRlbyBSQU0gKi8KKwlGSVhVUChmaXh1cF9lZGI3MjExKQorCU1BUElPKGVkYjcyMTFfbWFwX2lvKQorCUlOSVRJUlEoY2xwczcxMXhfaW5pdF9pcnEpCisJLnRpbWVyCQk9ICZjbHBzNzExeF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2VkYjcyMTEtbW0uYyBiL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvZWRiNzIxMS1tbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZDdiMDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2VkYjcyMTEtbW0uYwpAQCAtMCwwICsxLDcwIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtY2xwczcxMXgvbW0uYworICoKKyAqICBFeHRyYSBNTSByb3V0aW5lcyBmb3IgdGhlIEVEQjcyMTEgYm9hcmQKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxIEJsdWUgTXVnLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyAKKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworZXh0ZXJuIHZvaWQgY2xwczcxMXhfbWFwX2lvKHZvaWQpOworCisvKgorICogVGhlIG9uLWNoaXAgcmVnaXN0ZXJzIGFyZSBnaXZlbiBhIHNpemUgb2YgMU1CIHNvIHRoYXQgYSBzZWN0aW9uIGNhbgorICogYmUgdXNlZCB0byBtYXAgdGhlbTsgdGhpcyBzYXZlcyBhIHBhZ2UgdGFibGUuICBUaGlzIGlzIHRoZSBwbGFjZSB0bworICogYWRkIG1hcHBpbmdzIGZvciBST00sIGV4cGFuc2lvbiBtZW1vcnksIFBDTUNJQSwgZXRjLiAgKGlmIHN0YXRpYworICogbWFwcGluZ3MgYXJlIGNob3NlbiBmb3IgdGhvc2UgYXJlYXMpLgorICoKKyAqIEhlcmUgaXMgYSBwaHlzaWNhbCBtZW1vcnkgbWFwICh0byBiZSBmbGVzaGVkIG91dCBsYXRlcik6CisgKgorICogUGh5c2ljYWwgQWRkcmVzcyAgU2l6ZSAgRGVzY3JpcHRpb24KKyAqIC0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogYzAwMDAwMDAtYzAwMWZmZmYgMTI4S0IgcmVzZXJ2ZWQgZm9yIHZpZGVvIFJBTSBbMV0KKyAqIGMwMDIwMDAwLWMwMDIzZmZmICAxNktCIHBhcmFtZXRlcnMgKHNlZSBEb2N1bWVudGF0aW9uL2FybS9TZXR1cCkKKyAqIGMwMDI0MDAwLWMwMDI3ZmZmICAxNktCIHN3YXBwZXJfcGdfZGlyICh0YXNrIDAgcGFnZSBkaXJlY3RvcnkpCisgKiBjMDAyODAwMC0uLi4gICAgICAgICAgICBrZXJuZWwgaW1hZ2UgKFRFWFRBRERSKQorICoKKyAqIFsxXSBVbnVzZWQgcGFnZXMgc2hvdWxkIGJlIGdpdmVuIGJhY2sgdG8gdGhlIFZNOyB0aGV5IGFyZSBub3QgeWV0LgorICogICAgIFRoZSBwYXJhbWV0ZXIgYmxvY2sgc2hvdWxkIGFsc28gYmUgcmVsZWFzZWQgKG5vdCBzdXJlIGlmIHRoaXMKKyAqICAgICBoYXBwZW5zKS4KKyAqLworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBlZGI3MjExX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworIC8qIHZpcnR1YWwsIHBoeXNpY2FsLCBsZW5ndGgsIHR5cGUgKi8KKworIC8qIG1lbW9yeS1tYXBwZWQgZXh0cmEga2V5Ym9hcmQgcm93IGFuZCBDUzg5MDBBIEV0aGVybmV0IGNoaXAgKi8KKyB7IEVQNzIxMV9WSVJUX0VYVEtCRCwgIEVQNzIxMV9QSFlTX0VYVEtCRCwgIFNaXzFNLCBNVF9ERVZJQ0UgfSwgCisgeyBFUDcyMTFfVklSVF9DUzg5MDBBLCBFUDcyMTFfUEhZU19DUzg5MDBBLCBTWl8xTSwgTVRfREVWSUNFIH0sCisKKyAvKiBmbGFzaCBiYW5rcyAqLworIHsgRVA3MjExX1ZJUlRfRkxBU0gxLCAgRVA3MjExX1BIWVNfRkxBU0gxLCAgU1pfOE0sIE1UX0RFVklDRSB9LAorIHsgRVA3MjExX1ZJUlRfRkxBU0gyLCAgRVA3MjExX1BIWVNfRkxBU0gyLCAgU1pfOE0sIE1UX0RFVklDRSB9Cit9OworCit2b2lkIF9faW5pdCBlZGI3MjExX21hcF9pbyh2b2lkKQoreworICAgICAgICBjbHBzNzExeF9tYXBfaW8oKTsKKyAgICAgICAgaW90YWJsZV9pbml0KGVkYjcyMTFfaW9fZGVzYywgQVJSQVlfU0laRShlZGI3MjExX2lvX2Rlc2MpKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9mb3J0dW5ldC5jIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9mb3J0dW5ldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYzViOGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2ZvcnR1bmV0LmMKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2ZvcnR1bmV0LmMKKyAqCisgKiAgRGVyaXZlZCBmcm9tIGxpbnV4L2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9hcmNoLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorCitzdHJ1Y3QgbWVtaW5mbyBtZW1tYXAgPSB7CisJLm5yX2JhbmtzCT0gMSwKKwkuYmFuawkJPSB7CisJCXsKKwkJCS5zdGFydAk9IDB4QzAwMDAwMDAsCisJCQkuc2l6ZQk9IDB4MDEwMDAwMDAsCisJCQkubm9kZQk9IDAKKwkJfSwKKwl9LAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgdGFnX0lNQUdFX1BBUkFNUworeworCWludAlyYW1kaXNrX29rOworCWludAlyYW1kaXNrX2FkZHJlc3M7CisJaW50CXJhbWRpc2tfc2l6ZTsKKwlpbnQJcmFtX3NpemU7CisJaW50CWV4dHJhX3BhcmFtX3R5cGU7CisJaW50CWV4dHJhX3BhcmFtX3B0cjsKKwlpbnQJY29tbWFuZF9saW5lOworfSBJTUFHRV9QQVJBTVM7CisKKyNkZWZpbmUgSU1BR0VfUEFSQU1TX1BIWVMJMHhDMDFGMDAwMAorCitzdGF0aWMgdm9pZCBfX2luaXQKK2ZvcnR1bmV0X2ZpeHVwKHN0cnVjdCBtYWNoaW5lX2Rlc2MgKmRlc2MsIHN0cnVjdCB0YWcgKnRhZ3MsCisJCSBjaGFyICoqY21kbGluZSwgc3RydWN0IG1lbWluZm8gKm1pKQoreworCUlNQUdFX1BBUkFNUyAqaXAgPSBwaHlzX3RvX3ZpcnQoSU1BR0VfUEFSQU1TX1BIWVMpOworCSpjbWRsaW5lID0gcGh5c190b192aXJ0KGlwLT5jb21tYW5kX2xpbmUpOworI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAorCWlmKGlwLT5yYW1kaXNrX29rKQorCXsKKwkJaW5pdHJkX3N0YXJ0ID0gX19waHlzX3RvX3ZpcnQoaXAtPnJhbWRpc2tfYWRkcmVzcyk7CisJCWluaXRyZF9lbmQgPSBpbml0cmRfc3RhcnQgKyBpcC0+cmFtZGlza19zaXplOworCX0KKyNlbmRpZgorCW1lbW1hcC5iYW5rWzBdLnNpemUgPSBpcC0+cmFtX3NpemU7CisJKm1pID0gbWVtbWFwOworfQorCitNQUNISU5FX1NUQVJUKEZPUlRVTkVULCAiQVJNLUZvcnR1TmV0IikKKwlNQUlOVEFJTkVSKCJGb3J0dU5ldCBJbmMuIikKKyAgICAgICAgQk9PVF9NRU0oMHhjMDAwMDAwMCwgMHg4MDAwMDAwMCwgMHhmMDAwMDAwMCkKKwlCT09UX1BBUkFNUygweDAwMDAwMDAwKQorCUZJWFVQKGZvcnR1bmV0X2ZpeHVwKQorCU1BUElPKGNscHM3MTF4X21hcF9pbykKKwlJTklUSVJRKGNscHM3MTF4X2luaXRfaXJxKQorCS50aW1lcgkJPSAmY2xwczcxMXhfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VlOTI2ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvaXJxLmMKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pcnEuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbHBzNzExMS5oPgorCitzdGF0aWMgdm9pZCBpbnQxX21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwl1MzIgaW50bXIxOworCisJaW50bXIxID0gY2xwc19yZWFkbChJTlRNUjEpOworCWludG1yMSAmPSB+KDEgPDwgaXJxKTsKKwljbHBzX3dyaXRlbChpbnRtcjEsIElOVE1SMSk7Cit9CisKK3N0YXRpYyB2b2lkIGludDFfYWNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdTMyIGludG1yMTsKKworCWludG1yMSA9IGNscHNfcmVhZGwoSU5UTVIxKTsKKwlpbnRtcjEgJj0gfigxIDw8IGlycSk7CisJY2xwc193cml0ZWwoaW50bXIxLCBJTlRNUjEpOworCisJc3dpdGNoIChpcnEpIHsKKwljYXNlIElSUV9DU0lOVDogIGNscHNfd3JpdGVsKDAsIENPRU9JKTsgIGJyZWFrOworCWNhc2UgSVJRX1RDMU9JOiAgY2xwc193cml0ZWwoMCwgVEMxRU9JKTsgYnJlYWs7CisJY2FzZSBJUlFfVEMyT0k6ICBjbHBzX3dyaXRlbCgwLCBUQzJFT0kpOyBicmVhazsKKwljYXNlIElSUV9SVENNSTogIGNscHNfd3JpdGVsKDAsIFJUQ0VPSSk7IGJyZWFrOworCWNhc2UgSVJRX1RJTlQ6ICAgY2xwc193cml0ZWwoMCwgVEVPSSk7ICAgYnJlYWs7CisJY2FzZSBJUlFfVU1TSU5UOiBjbHBzX3dyaXRlbCgwLCBVTVNFT0kpOyBicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGludDFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdTMyIGludG1yMTsKKworCWludG1yMSA9IGNscHNfcmVhZGwoSU5UTVIxKTsKKwlpbnRtcjEgfD0gMSA8PCBpcnE7CisJY2xwc193cml0ZWwoaW50bXIxLCBJTlRNUjEpOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgaW50MV9jaGlwID0geworCS5hY2sJPSBpbnQxX2FjaywKKwkubWFzawk9IGludDFfbWFzaywKKwkudW5tYXNrID0gaW50MV91bm1hc2ssCit9OworCitzdGF0aWMgdm9pZCBpbnQyX21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwl1MzIgaW50bXIyOworCisJaW50bXIyID0gY2xwc19yZWFkbChJTlRNUjIpOworCWludG1yMiAmPSB+KDEgPDwgKGlycSAtIDE2KSk7CisJY2xwc193cml0ZWwoaW50bXIyLCBJTlRNUjIpOworfQorCitzdGF0aWMgdm9pZCBpbnQyX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXUzMiBpbnRtcjI7CisKKwlpbnRtcjIgPSBjbHBzX3JlYWRsKElOVE1SMik7CisJaW50bXIyICY9IH4oMSA8PCAoaXJxIC0gMTYpKTsKKwljbHBzX3dyaXRlbChpbnRtcjIsIElOVE1SMik7CisKKwlzd2l0Y2ggKGlycSkgeworCWNhc2UgSVJRX0tCRElOVDogY2xwc193cml0ZWwoMCwgS0JERU9JKTsgYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBpbnQyX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXUzMiBpbnRtcjI7CisKKwlpbnRtcjIgPSBjbHBzX3JlYWRsKElOVE1SMik7CisJaW50bXIyIHw9IDEgPDwgKGlycSAtIDE2KTsKKwljbHBzX3dyaXRlbChpbnRtcjIsIElOVE1SMik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBpbnQyX2NoaXAgPSB7CisJLmFjawk9IGludDJfYWNrLAorCS5tYXNrCT0gaW50Ml9tYXNrLAorCS51bm1hc2sgPSBpbnQyX3VubWFzaywKK307CisKK3ZvaWQgX19pbml0IGNscHM3MTF4X2luaXRfaXJxKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKSB7CisJICAgICAgICBpZiAoSU5UMV9JUlFTICYgKDEgPDwgaSkpIHsKKwkgICAgICAgIAlzZXRfaXJxX2hhbmRsZXIoaSwgZG9fbGV2ZWxfSVJRKTsKKwkgICAgICAgIAlzZXRfaXJxX2NoaXAoaSwgJmludDFfY2hpcCk7CisJICAgICAgICAJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJCX0KKwkJaWYgKElOVDJfSVJRUyAmICgxIDw8IGkpKSB7CisJCQlzZXRfaXJxX2hhbmRsZXIoaSwgZG9fbGV2ZWxfSVJRKTsKKwkJCXNldF9pcnFfY2hpcChpLCAmaW50Ml9jaGlwKTsKKwkJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOworCQl9CQkJCisJfQorCisJLyoKKwkgKiBEaXNhYmxlIGludGVycnVwdHMKKwkgKi8KKwljbHBzX3dyaXRlbCgwLCBJTlRNUjEpOworCWNscHNfd3JpdGVsKDAsIElOVE1SMik7CisKKwkvKgorCSAqIENsZWFyIGRvd24gYW55IHBlbmRpbmcgaW50ZXJydXB0cworCSAqLworCWNscHNfd3JpdGVsKDAsIENPRU9JKTsKKwljbHBzX3dyaXRlbCgwLCBUQzFFT0kpOworCWNscHNfd3JpdGVsKDAsIFRDMkVPSSk7CisJY2xwc193cml0ZWwoMCwgUlRDRU9JKTsKKwljbHBzX3dyaXRlbCgwLCBURU9JKTsKKwljbHBzX3dyaXRlbCgwLCBVTVNFT0kpOworCWNscHNfd3JpdGVsKDAsIFNZTkNJTyk7CisJY2xwc193cml0ZWwoMCwgS0JERU9JKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvbW0uYyBiL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvbW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjBiN2NhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9tbS5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9tbS5jCisgKgorICogIEdlbmVyaWMgTU0gc2V0dXAgZm9yIHRoZSBDTFBTNzExeC1iYXNlZCBtYWNoaW5lcy4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbHBzNzExMS5oPgorCisvKgorICogVGhpcyBtYXBzIHRoZSBnZW5lcmljIENMUFM3MTF4IHJlZ2lzdGVycworICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGNscHM3MTF4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworIHsgQ0xQUzcxMTFfVklSVF9CQVNFLAlDTFBTNzExMV9QSFlTX0JBU0UsCTEwNDg1NzYsIE1UX0RFVklDRSB9Cit9OworCit2b2lkIF9faW5pdCBjbHBzNzExeF9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQoY2xwczcxMXhfaW9fZGVzYywgQVJSQVlfU0laRShjbHBzNzExeF9pb19kZXNjKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNscHM3MTF4L3A3MjB0LWxlZHMuYyBiL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvcDcyMHQtbGVkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MTViMzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L3A3MjB0LWxlZHMuYwpAQCAtMCwwICsxLDY3IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtY2xwczcxMXgvbGVkcy5jCisgKgorICogIEludGVncmF0b3IgTEVEIGNvbnRyb2wgcm91dGluZXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbHBzNzExMS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9lcDcyMTIuaD4KKworc3RhdGljIHZvaWQgcDcyMHRfbGVkc19ldmVudChsZWRfZXZlbnRfdCBsZWRldnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgcGRkcjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlzd2l0Y2gobGVkZXZ0KSB7CisJY2FzZSBsZWRfaWRsZV9zdGFydDoKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9pZGxlX2VuZDoKKwkJYnJlYWs7CisKKwljYXNlIGxlZF90aW1lcjoKKwkJcGRkciA9IGNscHNfcmVhZGIoUEREUik7CisJCWNscHNfd3JpdGViKHBkZHIgXiAxLCBQRERSKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGxlZHNfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX3A3MjB0KCkpCisJCWxlZHNfZXZlbnQgPSBwNzIwdF9sZWRzX2V2ZW50OworCisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwobGVkc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvcDcyMHQuYyBiL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvcDcyMHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTI2OWRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9wNzIwdC5jCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtY2xwczcxMXgvcDcyMHQuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzcGxkLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKworLyoKKyAqIE1hcCB0aGUgUDcyMFQgc3lzdGVtIFBMRC4gIEl0IG9jY3VwaWVzIHR3byBhZGRyZXNzIHNwYWNlczoKKyAqICBTWVNQTERfUEhZU19CQVNFIGFuZCBTWVNQTERfUEhZU19CQVNFICsgMHgwMDQwMDAwMAorICogV2UgbWFwIGJvdGggaGVyZS4KKyAqLworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBwNzIwdF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7IFNZU1BMRF9WSVJUX0JBU0UsCVNZU1BMRF9QSFlTX0JBU0UsIDEwNDg1NzYsIE1UX0RFVklDRSB9LAorCXsgMHhmZTQwMDAwMCwJCTB4MTA0MDAwMDAsCSAgMTA0ODU3NiwgTVRfREVWSUNFIH0KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdAorZml4dXBfcDcyMHQoc3RydWN0IG1hY2hpbmVfZGVzYyAqZGVzYywgc3RydWN0IHRhZyAqdGFnLAorCSAgICBjaGFyICoqY21kbGluZSwgc3RydWN0IG1lbWluZm8gKm1pKQoreworCS8qCisJICogT3VyIGJvb3Rsb2FkZXIgZG9lc24ndCBzZXR1cCBhbnkgdGFncyAoeWV0KS4KKwkgKi8KKwlpZiAodGFnLT5oZHIudGFnICE9IEFUQUdfQ09SRSkgeworCQl0YWctPmhkci50YWcgPSBBVEFHX0NPUkU7CisJCXRhZy0+aGRyLnNpemUgPSB0YWdfc2l6ZSh0YWdfY29yZSk7CisJCXRhZy0+dS5jb3JlLmZsYWdzID0gMDsKKwkJdGFnLT51LmNvcmUucGFnZXNpemUgPSBQQUdFX1NJWkU7CisJCXRhZy0+dS5jb3JlLnJvb3RkZXYgPSAweDAxMDA7CisKKwkJdGFnID0gdGFnX25leHQodGFnKTsKKwkJdGFnLT5oZHIudGFnID0gQVRBR19NRU07CisJCXRhZy0+aGRyLnNpemUgPSB0YWdfc2l6ZSh0YWdfbWVtMzIpOworCQl0YWctPnUubWVtLnNpemUgPSA0MDk2OworCQl0YWctPnUubWVtLnN0YXJ0ID0gUEhZU19PRkZTRVQ7CisKKwkJdGFnID0gdGFnX25leHQodGFnKTsKKwkJdGFnLT5oZHIudGFnID0gQVRBR19OT05FOworCQl0YWctPmhkci5zaXplID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwNzIwdF9tYXBfaW8odm9pZCkKK3sKKwljbHBzNzExeF9tYXBfaW8oKTsKKwlpb3RhYmxlX2luaXQocDcyMHRfaW9fZGVzYywgQVJSQVlfU0laRShwNzIwdF9pb19kZXNjKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoUDcyMFQsICJBUk0tUHJvc3BlY3RvcjcyMFQiKQorCU1BSU5UQUlORVIoIkFSTSBMdGQvRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQiKQorCUJPT1RfTUVNKDB4YzAwMDAwMDAsIDB4ODAwMDAwMDAsIDB4ZmYwMDAwMDApCisJQk9PVF9QQVJBTVMoMHhjMDAwMDEwMCkKKwlGSVhVUChmaXh1cF9wNzIwdCkKKwlNQVBJTyhwNzIwdF9tYXBfaW8pCisJSU5JVElSUShjbHBzNzExeF9pbml0X2lycSkKKwkudGltZXIJCT0gJmNscHM3MTF4X3RpbWVyLAorTUFDSElORV9FTkQKKworc3RhdGljIGludCBwNzIwdF9od19pbml0KHZvaWQpCit7CisJLyoKKwkgKiBQb3dlciBkb3duIGFzIG11Y2ggYXMgcG9zc2libGUgaW4gY2FzZSB3ZSBkb24ndAorCSAqIGhhdmUgdGhlIGRyaXZlcnMgbG9hZGVkLgorCSAqLworCVBMRF9MQ0RFTiA9IDA7CisJUExEX1BXUiAgJj0gfihQTERfUzRfT058UExEX1MzX09OfFBMRF9TMl9PTnxQTERfUzFfT04pOworCisJUExEX0tCRCAgID0gMDsKKwlQTERfSU8gICAgPSAwOworCVBMRF9JUkRBICA9IDA7CisJUExEX0NPREVDID0gMDsKKwlQTERfVENIICAgPSAwOworCVBMRF9TUEkgICA9IDA7CisjaWZuZGVmIENPTkZJR19ERUJVR19MTAorCVBMRF9DT00yICA9IDA7CisJUExEX0NPTTEgID0gMDsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK19faW5pdGNhbGwocDcyMHRfaHdfaW5pdCk7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzZDRlMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvdGltZS5jCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC90aW1lLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xwczcxMTEuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworCisvKgorICogZ2V0dGltZW9mZnNldCgpIHJldHVybnMgdGltZSBzaW5jZSBsYXN0IHRpbWVyIHRpY2ssIGluIHVzZWNzLgorICoKKyAqICdMQVRDSCcgaXMgaHdjbG9jayB0aWNrcyAoc2VlIENMT0NLX1RJQ0tfUkFURSBpbiB0aW1leC5oKSBwZXIgamlmZnkuCisgKiAndGljaycgaXMgdXNlY3MgcGVyIGppZmZ5LgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbHBzNzExeF9nZXR0aW1lb2Zmc2V0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBod3RpY2tzOworCWh3dGlja3MgPSBMQVRDSCAtIChjbHBzX3JlYWRsKFRDMkQpICYgMHhmZmZmKTsJLyogc2luY2UgbGFzdCB1bmRlcmZsb3cgKi8KKwlyZXR1cm4gKGh3dGlja3MgKiAodGlja19uc2VjIC8gMTAwMCkpIC8gTEFUQ0g7Cit9CisKKy8qCisgKiBJUlEgaGFuZGxlciBmb3IgdGhlIHRpbWVyCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdAorcDcyMHRfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CisJdGltZXJfdGljayhyZWdzKTsKKwl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gY2xwczcxMXhfdGltZXJfaXJxID0geworCS5uYW1lCQk9ICJDTFBTNzExeCBUaW1lciBUaWNrIiwKKwkuZmxhZ3MJCT0gU0FfSU5URVJSVVBULAorCS5oYW5kbGVyCT0gcDcyMHRfdGltZXJfaW50ZXJydXB0Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY2xwczcxMXhfdGltZXJfaW5pdCh2b2lkKQoreworCXN0cnVjdCB0aW1lc3BlYyB0djsKKwl1bnNpZ25lZCBpbnQgc3lzY29uOworCisJc3lzY29uID0gY2xwc19yZWFkbChTWVNDT04xKTsKKwlzeXNjb24gfD0gU1lTQ09OMV9UQzJTIHwgU1lTQ09OMV9UQzJNOworCWNscHNfd3JpdGVsKHN5c2NvbiwgU1lTQ09OMSk7CisKKwljbHBzX3dyaXRlbChMQVRDSC0xLCBUQzJEKTsgLyogNTEya0h6IC8gMTAwSHogLSAxICovCisKKwlzZXR1cF9pcnEoSVJRX1RDMk9JLCAmY2xwczcxMXhfdGltZXJfaXJxKTsKKworCXR2LnR2X25zZWMgPSAwOworCXR2LnR2X3NlYyA9IGNscHNfcmVhZGwoUlRDRFIpOworCWRvX3NldHRpbWVvZmRheSgmdHYpOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIGNscHM3MTF4X3RpbWVyID0geworCS5pbml0CQk9IGNscHM3MTF4X3RpbWVyX2luaXQsCisJLm9mZnNldAkJPSBjbHBzNzExeF9nZXR0aW1lb2Zmc2V0LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWNscHM3NTAwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZDhlYmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWNscHM3NTAwL01ha2VmaWxlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisjCisKKyMgT2JqZWN0IGZpbGUgbGlzdHMuCisKK29iai15CQkJOj0gY29yZS5vCitvYmotbQkJCTo9CitvYmotbgkJCTo9CitvYmotCQkJOj0KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMTY1MDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWNscHM3NTAwL01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSwyIEBACisgICB6cmVsYWRkci15CTo9IDB4MTAwMDgwMDAKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWNscHM3NTAwL2NvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGZlZGVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9jb3JlLmMKQEAgLTAsMCArMSwzNzQgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9jb3JlLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4IFJ1c3NlbGwgS2luZworICogIENvcHlyaWdodCAoQykgMTk5OSBOZXh1cyBFbGVjdHJvbmljcyBMdGQKKyAqCisgKiBFeHRyYSBNTSByb3V0aW5lcyBmb3IgQ0w3NTAwIGFyY2hpdGVjdHVyZQorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9tZC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCitzdGF0aWMgdm9pZCBjbDc1MDBfYWNrX2lycV9hKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IHZhbCwgbWFzazsKKworCW1hc2sgPSAxIDw8IGlycTsKKwl2YWwgPSBpb21kX3JlYWRiKElPTURfSVJRTUFTS0EpOworCWlvbWRfd3JpdGViKHZhbCAmIH5tYXNrLCBJT01EX0lSUU1BU0tBKTsKKwlpb21kX3dyaXRlYihtYXNrLCBJT01EX0lSUUNMUkEpOworfQorCitzdGF0aWMgdm9pZCBjbDc1MDBfbWFza19pcnFfYSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCB2YWwsIG1hc2s7CisKKwltYXNrID0gMSA8PCBpcnE7CisJdmFsID0gaW9tZF9yZWFkYihJT01EX0lSUU1BU0tBKTsKKwlpb21kX3dyaXRlYih2YWwgJiB+bWFzaywgSU9NRF9JUlFNQVNLQSk7Cit9CisKK3N0YXRpYyB2b2lkIGNsNzUwMF91bm1hc2tfaXJxX2EodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsLCBtYXNrOworCisJbWFzayA9IDEgPDwgaXJxOworCXZhbCA9IGlvbWRfcmVhZGIoSU9NRF9JUlFNQVNLQSk7CisJaW9tZF93cml0ZWIodmFsIHwgbWFzaywgSU9NRF9JUlFNQVNLQSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBjbHBzNzUwMF9hX2NoaXAgPSB7CisJLmFjawk9IGNsNzUwMF9hY2tfaXJxX2EsCisJLm1hc2sJPSBjbDc1MDBfbWFza19pcnFfYSwKKwkudW5tYXNrCT0gY2w3NTAwX3VubWFza19pcnFfYSwKK307CisKK3N0YXRpYyB2b2lkIGNsNzUwMF9tYXNrX2lycV9iKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IHZhbCwgbWFzazsKKworCW1hc2sgPSAxIDw8IChpcnEgJiA3KTsKKwl2YWwgPSBpb21kX3JlYWRiKElPTURfSVJRTUFTS0IpOworCWlvbWRfd3JpdGViKHZhbCAmIH5tYXNrLCBJT01EX0lSUU1BU0tCKTsKK30KKworc3RhdGljIHZvaWQgY2w3NTAwX3VubWFza19pcnFfYih1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCB2YWwsIG1hc2s7CisKKwltYXNrID0gMSA8PCAoaXJxICYgNyk7CisJdmFsID0gaW9tZF9yZWFkYihJT01EX0lSUU1BU0tCKTsKKwlpb21kX3dyaXRlYih2YWwgfCBtYXNrLCBJT01EX0lSUU1BU0tCKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIGNscHM3NTAwX2JfY2hpcCA9IHsKKwkuYWNrCT0gY2w3NTAwX21hc2tfaXJxX2IsCisJLm1hc2sJPSBjbDc1MDBfbWFza19pcnFfYiwKKwkudW5tYXNrCT0gY2w3NTAwX3VubWFza19pcnFfYiwKK307CisKK3N0YXRpYyB2b2lkIGNsNzUwMF9tYXNrX2lycV9jKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IHZhbCwgbWFzazsKKworCW1hc2sgPSAxIDw8IChpcnEgJiA3KTsKKwl2YWwgPSBpb21kX3JlYWRiKElPTURfSVJRTUFTS0MpOworCWlvbWRfd3JpdGViKHZhbCAmIH5tYXNrLCBJT01EX0lSUU1BU0tDKTsKK30KKworc3RhdGljIHZvaWQgY2w3NTAwX3VubWFza19pcnFfYyh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCB2YWwsIG1hc2s7CisKKwltYXNrID0gMSA8PCAoaXJxICYgNyk7CisJdmFsID0gaW9tZF9yZWFkYihJT01EX0lSUU1BU0tDKTsKKwlpb21kX3dyaXRlYih2YWwgfCBtYXNrLCBJT01EX0lSUU1BU0tDKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIGNscHM3NTAwX2NfY2hpcCA9IHsKKwkuYWNrCT0gY2w3NTAwX21hc2tfaXJxX2MsCisJLm1hc2sJPSBjbDc1MDBfbWFza19pcnFfYywKKwkudW5tYXNrCT0gY2w3NTAwX3VubWFza19pcnFfYywKK307CisKK3N0YXRpYyB2b2lkIGNsNzUwMF9tYXNrX2lycV9kKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IHZhbCwgbWFzazsKKworCW1hc2sgPSAxIDw8IChpcnEgJiA3KTsKKwl2YWwgPSBpb21kX3JlYWRiKElPTURfSVJRTUFTS0QpOworCWlvbWRfd3JpdGViKHZhbCAmIH5tYXNrLCBJT01EX0lSUU1BU0tEKTsKK30KKworc3RhdGljIHZvaWQgY2w3NTAwX3VubWFza19pcnFfZCh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCB2YWwsIG1hc2s7CisKKwltYXNrID0gMSA8PCAoaXJxICYgNyk7CisJdmFsID0gaW9tZF9yZWFkYihJT01EX0lSUU1BU0tEKTsKKwlpb21kX3dyaXRlYih2YWwgfCBtYXNrLCBJT01EX0lSUU1BU0tEKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIGNscHM3NTAwX2RfY2hpcCA9IHsKKwkuYWNrCT0gY2w3NTAwX21hc2tfaXJxX2QsCisJLm1hc2sJPSBjbDc1MDBfbWFza19pcnFfZCwKKwkudW5tYXNrCT0gY2w3NTAwX3VubWFza19pcnFfZCwKK307CisKK3N0YXRpYyB2b2lkIGNsNzUwMF9tYXNrX2lycV9kbWEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsLCBtYXNrOworCisJbWFzayA9IDEgPDwgKGlycSAmIDcpOworCXZhbCA9IGlvbWRfcmVhZGIoSU9NRF9ETUFNQVNLKTsKKwlpb21kX3dyaXRlYih2YWwgJiB+bWFzaywgSU9NRF9ETUFNQVNLKTsKK30KKworc3RhdGljIHZvaWQgY2w3NTAwX3VubWFza19pcnFfZG1hKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IHZhbCwgbWFzazsKKworCW1hc2sgPSAxIDw8IChpcnEgJiA3KTsKKwl2YWwgPSBpb21kX3JlYWRiKElPTURfRE1BTUFTSyk7CisJaW9tZF93cml0ZWIodmFsIHwgbWFzaywgSU9NRF9ETUFNQVNLKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIGNscHM3NTAwX2RtYV9jaGlwID0geworCS5hY2sJPSBjbDc1MDBfbWFza19pcnFfZG1hLAorCS5tYXNrCT0gY2w3NTAwX21hc2tfaXJxX2RtYSwKKwkudW5tYXNrCT0gY2w3NTAwX3VubWFza19pcnFfZG1hLAorfTsKKworc3RhdGljIHZvaWQgY2w3NTAwX21hc2tfaXJxX2ZpcSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCB2YWwsIG1hc2s7CisKKwltYXNrID0gMSA8PCAoaXJxICYgNyk7CisJdmFsID0gaW9tZF9yZWFkYihJT01EX0ZJUU1BU0spOworCWlvbWRfd3JpdGViKHZhbCAmIH5tYXNrLCBJT01EX0ZJUU1BU0spOworfQorCitzdGF0aWMgdm9pZCBjbDc1MDBfdW5tYXNrX2lycV9maXEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsLCBtYXNrOworCisJbWFzayA9IDEgPDwgKGlycSAmIDcpOworCXZhbCA9IGlvbWRfcmVhZGIoSU9NRF9GSVFNQVNLKTsKKwlpb21kX3dyaXRlYih2YWwgfCBtYXNrLCBJT01EX0ZJUU1BU0spOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgY2xwczc1MDBfZmlxX2NoaXAgPSB7CisJLmFjawk9IGNsNzUwMF9tYXNrX2lycV9maXEsCisJLm1hc2sJPSBjbDc1MDBfbWFza19pcnFfZmlxLAorCS51bm1hc2sJPSBjbDc1MDBfdW5tYXNrX2lycV9maXEsCit9OworCitzdGF0aWMgdm9pZCBjbDc1MDBfbm9fYWN0aW9uKHVuc2lnbmVkIGludCBpcnEpCit7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBjbHBzNzUwMF9ub19jaGlwID0geworCS5hY2sJPSBjbDc1MDBfbm9fYWN0aW9uLAorCS5tYXNrCT0gY2w3NTAwX25vX2FjdGlvbiwKKwkudW5tYXNrCT0gY2w3NTAwX25vX2FjdGlvbiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycV9pc2EgPSB7IG5vX2FjdGlvbiwgMCwgQ1BVX01BU0tfTk9ORSwgImlzYSIsIE5VTEwsIE5VTEwgfTsKKworc3RhdGljIHZvaWQgX19pbml0IGNscHM3NTAwX2luaXRfaXJxKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGlycSwgZmxhZ3M7CisKKwlpb21kX3dyaXRlYigwLCBJT01EX0lSUU1BU0tBKTsKKwlpb21kX3dyaXRlYigwLCBJT01EX0lSUU1BU0tCKTsKKwlpb21kX3dyaXRlYigwLCBJT01EX0ZJUU1BU0spOworCWlvbWRfd3JpdGViKDAsIElPTURfRE1BTUFTSyk7CisKKwlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKSB7CisJCWZsYWdzID0gSVJRRl9WQUxJRDsKKworCQlpZiAoaXJxIDw9IDYgfHwgKGlycSA+PSA5ICYmIGlycSA8PSAxNSkgfHwKKwkJICAgIChpcnEgPj0gNDggJiYgaXJxIDw9IDU1KSkKKwkJCWZsYWdzIHw9IElSUUZfUFJPQkU7CisKKwkJc3dpdGNoIChpcnEpIHsKKwkJY2FzZSAwIC4uLiA3OgorCQkJc2V0X2lycV9jaGlwKGlycSwgJmNscHM3NTAwX2FfY2hpcCk7CisJCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBkb19sZXZlbF9JUlEpOworCQkJc2V0X2lycV9mbGFncyhpcnEsIGZsYWdzKTsKKwkJCWJyZWFrOworCisJCWNhc2UgOCAuLi4gMTU6CisJCQlzZXRfaXJxX2NoaXAoaXJxLCAmY2xwczc1MDBfYl9jaGlwKTsKKwkJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2xldmVsX0lSUSk7CisJCQlzZXRfaXJxX2ZsYWdzKGlycSwgZmxhZ3MpOworCQkJYnJlYWs7CisKKwkJY2FzZSAxNiAuLi4gMjI6CisJCQlzZXRfaXJxX2NoaXAoaXJxLCAmY2xwczc1MDBfZG1hX2NoaXApOworCQkJc2V0X2lycV9oYW5kbGVyKGlycSwgZG9fbGV2ZWxfSVJRKTsKKwkJCXNldF9pcnFfZmxhZ3MoaXJxLCBmbGFncyk7CisJCQlicmVhazsKKworCQljYXNlIDI0IC4uLiAzMToKKwkJCXNldF9pcnFfY2hpcChpcnEsICZjbHBzNzUwMF9jX2NoaXApOworCQkJc2V0X2lycV9oYW5kbGVyKGlycSwgZG9fbGV2ZWxfSVJRKTsKKwkJCXNldF9pcnFfZmxhZ3MoaXJxLCBmbGFncyk7CisJCQlicmVhazsKKworCQljYXNlIDQwIC4uLiA0NzoKKwkJCXNldF9pcnFfY2hpcChpcnEsICZjbHBzNzUwMF9kX2NoaXApOworCQkJc2V0X2lycV9oYW5kbGVyKGlycSwgZG9fbGV2ZWxfSVJRKTsKKwkJCXNldF9pcnFfZmxhZ3MoaXJxLCBmbGFncyk7CisJCQlicmVhazsKKworCQljYXNlIDQ4IC4uLiA1NToKKwkJCXNldF9pcnFfY2hpcChpcnEsICZjbHBzNzUwMF9ub19jaGlwKTsKKwkJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2xldmVsX0lSUSk7CisJCQlzZXRfaXJxX2ZsYWdzKGlycSwgZmxhZ3MpOworCQkJYnJlYWs7CisKKwkJY2FzZSA2NCAuLi4gNzI6CisJCQlzZXRfaXJxX2NoaXAoaXJxLCAmY2xwczc1MDBfZmlxX2NoaXApOworCQkJc2V0X2lycV9oYW5kbGVyKGlycSwgZG9fbGV2ZWxfSVJRKTsKKwkJCXNldF9pcnFfZmxhZ3MoaXJxLCBmbGFncyk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNldHVwX2lycShJUlFfSVNBLCAmaXJxX2lzYSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgY2w3NTAwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsgSU9fQkFTRSwJSU9fU1RBUlQsCUlPX1NJWkUsICAgIE1UX0RFVklDRSB9LAkvKiBJTyBzcGFjZQkqLworCXsgSVNBX0JBU0UsCUlTQV9TVEFSVCwJSVNBX1NJWkUsICAgTVRfREVWSUNFIH0sCS8qIElTQSBzcGFjZQkqLworCXsgRkxBU0hfQkFTRSwJRkxBU0hfU1RBUlQsCUZMQVNIX1NJWkUsIE1UX0RFVklDRSB9LAkvKiBGbGFzaAkqLworCXsgTEVEX0JBU0UsCUxFRF9TVEFSVCwJTEVEX1NJWkUsICAgTVRfREVWSUNFIH0gCS8qIExFRAkJKi8KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjbHBzNzUwMF9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQoY2w3NTAwX2lvX2Rlc2MsIEFSUkFZX1NJWkUoY2w3NTAwX2lvX2Rlc2MpKTsKK30KKworZXh0ZXJuIHZvaWQgaW9jdGltZV9pbml0KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW9jX3RpbWVyX2dldHRpbWVvZmZzZXQodm9pZCk7CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorY2xwczc1MDBfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CisKKwl0aW1lcl90aWNrKHJlZ3MpOworCisJLyogV2h5IG5vdCB1c2luZyBkb19sZWRzIGludGVyZmFjZT8/ICovCisJeworCQkvKiBUd2lua2xlIHRoZSBsaWdodHMuICovCisJCXN0YXRpYyBpbnQgY291bnQsIHN0YXRlID0gMHhmZjAwOworCQlpZiAoY291bnQtLSA9PSAwKSB7CisJCQlzdGF0ZSBePSAweDEwMDsKKwkJCWNvdW50ID0gMjU7CisJCQkqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilMRURfQUREUkVTUykgPSBzdGF0ZTsKKwkJfQorCX0KKworCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGNscHM3NTAwX3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAiQ0xQUzc1MDAgVGltZXIgVGljayIsCisJLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCwKKwkuaGFuZGxlcgk9IGNscHM3NTAwX3RpbWVyX2ludGVycnVwdAorfTsKKworLyoKKyAqIFNldCB1cCB0aW1lciBpbnRlcnJ1cHQuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBjbHBzNzUwMF90aW1lcl9pbml0KHZvaWQpCit7CisJaW9jdGltZV9pbml0KCk7CisJc2V0dXBfaXJxKElSUV9USU1FUiwgJmNscHM3NTAwX3RpbWVyX2lycSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIGNscHM3NTAwX3RpbWVyID0geworCS5pbml0CQk9IGNscHM3NTAwX3RpbWVyX2luaXQsCisJLm9mZnNldAkJPSBpb2NfdGltZXJfZ2V0dGltZW9mZnNldCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tYXBiYXNlCT0gMHgwMzAxMGZlMCwKKwkJLmlycQkJPSAxMCwKKwkJLnVhcnRjbGsJPSAxODQzMjAwLAorCQkucmVnc2hpZnQJPSAyLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfSU9SRU1BUCB8IFVQRl9TS0lQX1RFU1QsCisJfSwKKwl7CisJCS5tYXBiYXNlCT0gMHgwMzAxMGJlMCwKKwkJLmlycQkJPSAwLAorCQkudWFydGNsawk9IDE4NDMyMDAsCisJCS5yZWdzaGlmdAk9IDIsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9JT1JFTUFQIHwgVVBGX1NLSVBfVEVTVCwKKwl9LAorCXsKKwkJLmlvYmFzZQkJPSBJU0FTTE9UX0lPICsgMHgyZTgsCisJCS5pcnEJCT0gNDEsCisJCS51YXJ0Y2xrCT0gMTg0MzIwMCwKKwkJLnJlZ3NoaWZ0CT0gMCwKKwkJLmlvdHlwZQkJPSBVUElPX1BPUlQsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QsCisJfSwKKwl7CisJCS5pb2Jhc2UJCT0gSVNBU0xPVF9JTyArIDB4M2U4LAorCQkuaXJxCQk9IDQwLAorCQkudWFydGNsawk9IDE4NDMyMDAsCisJCS5yZWdzaGlmdAk9IDAsCisJCS5pb3R5cGUJCT0gVVBJT19QT1JULAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNULAorCX0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2VyaWFsX2RldmljZSA9IHsKKwkubmFtZQkJCT0gInNlcmlhbDgyNTAiLAorCS5pZAkJCT0gMCwKKwkuZGV2CQkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gc2VyaWFsX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjbHBzNzUwMF9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZXJpYWxfZGV2aWNlKTsKK30KKworTUFDSElORV9TVEFSVChDTFBTNzUwMCwgIkNMLVBTNzUwMCIpCisJTUFJTlRBSU5FUigiUGhpbGlwIEJsdW5kZWxsIikKKwlCT09UX01FTSgweDEwMDAwMDAwLCAweDAzMDAwMDAwLCAweGUwMDAwMDAwKQorCU1BUElPKGNscHM3NTAwX21hcF9pbykKKwlJTklUSVJRKGNscHM3NTAwX2luaXRfaXJxKQorCQkuaW5pdF9tYWNoaW5lCT0gY2xwczc1MDBfaW5pdCwKKwkJLnRpbWVyCQk9ICZjbHBzNzUwMF90aW1lciwKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZWJzYTExMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTIwYWM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL01ha2VmaWxlCkBAIC0wLDAgKzEsMTIgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisjCisKKyMgT2JqZWN0IGZpbGUgbGlzdHMuCisKK29iai15CQkJOj0gY29yZS5vIGlvLm8KK29iai1tCQkJOj0KK29iai1uCQkJOj0KK29iai0JCQk6PQorCitvYmotJChDT05GSUdfTEVEUykJKz0gbGVkcy5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVic2ExMTAvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMjEyNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWVic2ExMTAvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDQgQEAKKyAgIHpyZWxhZGRyLXkJOj0gMHgwMDAwODAwMAorcGFyYW1zX3BoeXMteQk6PSAweDAwMDAwNDAwCitpbml0cmRfcGh5cy15CTo9IDB4MDA4MDAwMDAKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYzNjJkNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9jb3JlLmMKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2NvcmUuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMSBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBFeHRyYSBNTSByb3V0aW5lcyBmb3IgdGhlIEVCU0EtMTEwIGFyY2hpdGVjdHVyZQorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKKyNkZWZpbmUgSVJRX01BU0sJCTB4ZmUwMDAwMDAJLyogcmVhZCAqLworI2RlZmluZSBJUlFfTVNFVAkJMHhmZTAwMDAwMAkvKiB3cml0ZSAqLworI2RlZmluZSBJUlFfU1RBVAkJMHhmZjAwMDAwMAkvKiByZWFkICovCisjZGVmaW5lIElSUV9NQ0xSCQkweGZmMDAwMDAwCS8qIHdyaXRlICovCisKK3N0YXRpYyB2b2lkIGVic2ExMTBfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlfX3Jhd193cml0ZWIoMSA8PCBpcnEsIElSUV9NQ0xSKTsKK30KKworc3RhdGljIHZvaWQgZWJzYTExMF91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJX19yYXdfd3JpdGViKDEgPDwgaXJxLCBJUlFfTVNFVCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBlYnNhMTEwX2lycV9jaGlwID0geworCS5hY2sJPSBlYnNhMTEwX21hc2tfaXJxLAorCS5tYXNrCT0gZWJzYTExMF9tYXNrX2lycSwKKwkudW5tYXNrID0gZWJzYTExMF91bm1hc2tfaXJxLAorfTsKKyAKK3N0YXRpYyB2b2lkIF9faW5pdCBlYnNhMTEwX2luaXRfaXJxKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fcmF3X3dyaXRlYigweGZmLCBJUlFfTUNMUik7CisJX19yYXdfd3JpdGViKDB4NTUsIElSUV9NU0VUKTsKKwlfX3Jhd193cml0ZWIoMHgwMCwgSVJRX01TRVQpOworCWlmIChfX3Jhd19yZWFkYihJUlFfTUFTSykgIT0gMHg1NSkKKwkJd2hpbGUgKDEpOworCV9fcmF3X3dyaXRlYigweGZmLCBJUlFfTUNMUik7CS8qIGNsZWFyIGFsbCBpbnRlcnJ1cHQgZW5hYmxlcyAqLworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCWZvciAoaXJxID0gMDsgaXJxIDwgTlJfSVJRUzsgaXJxKyspIHsKKwkJc2V0X2lycV9jaGlwKGlycSwgJmVic2ExMTBfaXJxX2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBkb19sZXZlbF9JUlEpOworCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBlYnNhMTEwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCS8qCisJICogc3BhcnNlIGV4dGVybmFsLWRlY29kZSBJU0FJTyBzcGFjZQorCSAqLworCXsgSVJRX1NUQVQsICAgIFRSSUNLNF9QSFlTLCBQR0RJUl9TSVpFLCAgTVRfREVWSUNFIH0sIC8qIElSUV9TVEFUL0lSUV9NQ0xSICovCisJeyBJUlFfTUFTSywgICAgVFJJQ0szX1BIWVMsIFBHRElSX1NJWkUsICBNVF9ERVZJQ0UgfSwgLyogSVJRX01BU0svSVJRX01TRVQgKi8KKwl7IFNPRlRfQkFTRSwgICBUUklDSzFfUEhZUywgUEdESVJfU0laRSwgIE1UX0RFVklDRSB9LCAvKiBTT0ZUX0JBU0UgKi8KKwl7IFBJVF9CQVNFLCAgICBUUklDSzBfUEhZUywgUEdESVJfU0laRSwgIE1UX0RFVklDRSB9LCAvKiBQSVRfQkFTRSAqLworCisJLyoKKwkgKiBzZWxmLWRlY29kZSBJU0FJTyBzcGFjZQorCSAqLworCXsgSVNBSU9fQkFTRSwgIElTQUlPX1BIWVMsICBJU0FJT19TSVpFLCAgTVRfREVWSUNFIH0sCisJeyBJU0FNRU1fQkFTRSwgSVNBTUVNX1BIWVMsIElTQU1FTV9TSVpFLCBNVF9ERVZJQ0UgfQorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGVic2ExMTBfbWFwX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KGVic2ExMTBfaW9fZGVzYywgQVJSQVlfU0laRShlYnNhMTEwX2lvX2Rlc2MpKTsKK30KKworCisjZGVmaW5lIFBJVF9DVFJMCQkoUElUX0JBU0UgKyAweDBkKQorI2RlZmluZSBQSVRfVDIJCQkoUElUX0JBU0UgKyAweDA5KQorI2RlZmluZSBQSVRfVDEJCQkoUElUX0JBU0UgKyAweDA1KQorI2RlZmluZSBQSVRfVDAJCQkoUElUX0JBU0UgKyAweDAxKQorCisvKgorICogVGhpcyBpcyB0aGUgcmF0ZSBhdCB3aGljaCB5b3VyIE1DTEsgc2lnbmFsIHRvZ2dsZXMgKGluIEh6KQorICogVGhpcyB3YXMgbWVhc3VyZWQgb24gYSAxMCBkaWdpdCBmcmVxdWVuY3kgY291bnRlciBzYW1wbGluZworICogb3ZlciAxIHNlY29uZC4KKyAqLworI2RlZmluZSBNQ0xLCTQ3ODk0MDAwCisKKy8qCisgKiBUaGlzIGlzIHRoZSByYXRlIGF0IHdoaWNoIHRoZSBQSVQgdGltZXJzIGdldCBjbG9ja2VkCisgKi8KKyNkZWZpbmUgQ0xLQlk3CShNQ0xLIC8gNykKKworLyoKKyAqIFRoaXMgaXMgdGhlIGNvdW50ZXIgdmFsdWUuICBXZSB0aWNrIGF0IDIwMEh6IG9uIHRoaXMgcGxhdGZvcm0uCisgKi8KKyNkZWZpbmUgQ09VTlQJKChDTEtCWTcgKyAoSFogLyAyKSkgLyBIWikKKworLyoKKyAqIEdldCB0aGUgdGltZSBvZmZzZXQgZnJvbSB0aGUgc3lzdGVtIFBJVC4gIE5vdGUgdGhhdCBpZiB3ZSBoYXZlIG1pc3NlZCBhbgorICogaW50ZXJydXB0LCB0aGVuIHRoZSBQSVQgY291bnRlciB3aWxsIHJvbGwgb3ZlciAoaWUsIGJlIG5lZ2F0aXZlKS4KKyAqIFRoaXMgYWN0dWFsbHkgd29ya3Mgb3V0IHRvIGJlIGNvbnZlbmllbnQuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGVic2ExMTBfZ2V0dGltZW9mZnNldCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBjb3VudDsKKworCV9fcmF3X3dyaXRlYigweDQwLCBQSVRfQ1RSTCk7CisJY291bnQgPSBfX3Jhd19yZWFkYihQSVRfVDEpOworCWNvdW50IHw9IF9fcmF3X3JlYWRiKFBJVF9UMSkgPDwgODsKKworCS8qCisJICogSWYgY291bnQgPiBDT1VOVCwgbWFrZSB0aGUgbnVtYmVyIG5lZ2F0aXZlLgorCSAqLworCWlmIChjb3VudCA+IENPVU5UKQorCQljb3VudCB8PSAweGZmZmYwMDAwOworCisJb2Zmc2V0ID0gQ09VTlQ7CisJb2Zmc2V0IC09IGNvdW50OworCisJLyoKKwkgKiBgb2Zmc2V0JyBpcyBpbiB1bml0cyBvZiB0aW1lciBjb3VudHMuICBDb252ZXJ0CisJICogb2Zmc2V0IHRvIHVuaXRzIG9mIG1pY3Jvc2Vjb25kcy4KKwkgKi8KKwlvZmZzZXQgPSBvZmZzZXQgKiAoMTAwMDAwMCAvIEhaKSAvIENPVU5UOworCisJcmV0dXJuIG9mZnNldDsKK30KKworc3RhdGljIGlycXJldHVybl90CitlYnNhMTEwX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXUzMiBjb3VudDsKKworCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOworCisJLyogbGF0Y2ggYW5kIHJlYWQgdGltZXIgMSAqLworCV9fcmF3X3dyaXRlYigweDQwLCBQSVRfQ1RSTCk7CisJY291bnQgPSBfX3Jhd19yZWFkYihQSVRfVDEpOworCWNvdW50IHw9IF9fcmF3X3JlYWRiKFBJVF9UMSkgPDwgODsKKworCWNvdW50ICs9IENPVU5UOworCisJX19yYXdfd3JpdGViKGNvdW50ICYgMHhmZiwgUElUX1QxKTsKKwlfX3Jhd193cml0ZWIoY291bnQgPj4gOCwgUElUX1QxKTsKKworCXRpbWVyX3RpY2socmVncyk7CisKKwl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBlYnNhMTEwX3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAiRUJTQTExMCBUaW1lciBUaWNrIiwKKwkuZmxhZ3MJCT0gU0FfSU5URVJSVVBULAorCS5oYW5kbGVyCT0gZWJzYTExMF90aW1lcl9pbnRlcnJ1cHQKK307CisKKy8qCisgKiBTZXQgdXAgdGltZXIgaW50ZXJydXB0LgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgZWJzYTExMF90aW1lcl9pbml0KHZvaWQpCit7CisJLyoKKwkgKiBUaW1lciAxLCBtb2RlIDIsIExTQi9NU0IKKwkgKi8KKwlfX3Jhd193cml0ZWIoMHg3MCwgUElUX0NUUkwpOworCV9fcmF3X3dyaXRlYihDT1VOVCAmIDB4ZmYsIFBJVF9UMSk7CisJX19yYXdfd3JpdGViKENPVU5UID4+IDgsIFBJVF9UMSk7CisKKwlzZXR1cF9pcnEoSVJRX0VCU0ExMTBfVElNRVIwLCAmZWJzYTExMF90aW1lcl9pcnEpOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBlYnNhMTEwX3RpbWVyID0geworCS5pbml0CQk9IGVic2ExMTBfdGltZXJfaW5pdCwKKwkub2Zmc2V0CQk9IGVic2ExMTBfZ2V0dGltZW9mZnNldCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5pb2Jhc2UJCT0gMHgzZjgsCisJCS5pcnEJCT0gMSwKKwkJLnVhcnRjbGsJPSAxODQzMjAwLAorCQkucmVnc2hpZnQJPSAwLAorCQkuaW90eXBlCQk9IFVQSU9fUE9SVCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwKKwl9LAorCXsKKwkJLmlvYmFzZQkJPSAweDJmOCwKKwkJLmlycQkJPSAyLAorCQkudWFydGNsawk9IDE4NDMyMDAsCisJCS5yZWdzaGlmdAk9IDAsCisJCS5pb3R5cGUJCT0gVVBJT19QT1JULAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNULAorCX0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2VyaWFsX2RldmljZSA9IHsKKwkubmFtZQkJCT0gInNlcmlhbDgyNTAiLAorCS5pZAkJCT0gMCwKKwkuZGV2CQkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gc2VyaWFsX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGVic2ExMTBfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNlcmlhbF9kZXZpY2UpOworfQorCithcmNoX2luaXRjYWxsKGVic2ExMTBfaW5pdCk7CisKK01BQ0hJTkVfU1RBUlQoRUJTQTExMCwgIkVCU0ExMTAiKQorCU1BSU5UQUlORVIoIlJ1c3NlbGwgS2luZyIpCisJQk9PVF9NRU0oMHgwMDAwMDAwMCwgMHhlMDAwMDAwMCwgMHhlMDAwMDAwMCkKKwlCT09UX1BBUkFNUygweDAwMDAwNDAwKQorCURJU0FCTEVfUEFSUE9SVCgwKQorCURJU0FCTEVfUEFSUE9SVCgyKQorCVNPRlRfUkVCT09UCisJTUFQSU8oZWJzYTExMF9tYXBfaW8pCisJSU5JVElSUShlYnNhMTEwX2luaXRfaXJxKQorCS50aW1lcgkJPSAmZWJzYTExMF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW8uYyBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmN2ViNWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW8uYwpAQCAtMCwwICsxLDM3OCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLWVic2ExMTAvaXNhbWVtLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFJ1c3NlbGwgS2luZworICoKKyAqIFBlcmZvcm0gIklTQSIgbWVtb3J5IGFuZCBJTyBhY2Nlc3Nlcy4gIFRoZSBFQlNBMTEwIGhhcyBzb21lICJwZWN1bGlhcml0aWVzIgorICogaW4gdGhlIHdheSBpdCBoYW5kbGVzIGFjY2Vzc2VzIHRvIG9kZCBJTyBwb3J0cyBvbiAxNi1iaXQgZGV2aWNlcy4gIFRoZXNlCisgKiBkZXZpY2VzIGhhdmUgdGhlaXIgRDAtRDE1IGxpbmVzIGNvbm5lY3RlZCB0byB0aGUgcHJvY2Vzc29ycyBEMC1EMTUgbGluZXMuCisgKiBTaW5jZSB0aGV5IGV4cGVjdCBhbGwgYnl0ZSBJTyBvcGVyYXRpb25zIHRvIGJlIHBlcmZvcm1lZCBvbiBEMC1ENywgYW5kIHRoZQorICogU3Ryb25nQVJNIGV4cGVjdHMgdG8gdHJhbnNmZXIgdGhlIGJ5dGUgdG8gdGhlc2Ugb2RkIGFkZHJlc3NlcyBvbiBEOC1EMTUsCisgKiB3ZSBtdXN0IHVzZSBhIHRyaWNrIHRvIGdldCB0aGUgcmVxdWlyZWQgYmVoYXZpb3VyLgorICoKKyAqIFRoZSB0cmljayBlbXBsb3llZCBoZXJlIGlzIHRvIHVzZSBsb25nIHdvcmQgc3RvcmVzIHRvIG9kZCBhZGRyZXNzIC0xLiAgVGhlCisgKiBnbHVlIGxvZ2ljIHBpY2tzIHRoaXMgdXAgYXMgYSAidHJpY2siIGFjY2VzcywgYW5kIGFzc2VydHMgdGhlIExTQiBvZiB0aGUKKyAqIHBlcmlwaGVyYWxzIGFkZHJlc3MgYnVzLCB0aGVyZWJ5IGFjY2Vzc2luZyB0aGUgb2RkIElPIHBvcnQuICBNZWFud2hpbGUsIHRoZQorICogU3Ryb25nQVJNIHRyYW5zZmVycyBpdHMgZGF0YSBvbiBEMC1ENyBhcyBleHBlY3RlZC4KKyAqCisgKiBUaGluZ3MgZ2V0IG1vcmUgaW50ZXJlc3Rpbmcgb24gdGhlIHBhc3MtMSBFQlNBMTEwIC0gdGhlIFBDTUNJQSBjb250cm9sbGVyCisgKiB3aXJpbmcgd2FzIHNjcmV3ZWQgaW4gc3VjaCBhIHdheSB0aGF0IGl0IGhhZCBsaW1pdGVkIG1lbW9yeSBzcGFjZSBhY2Nlc3MuCisgKiBMdWNraWx5LCB0aGUgd29yay1hcm91bmQgZm9yIHRoaXMgaXMgbm90IHRvbyBob3JyaWJsZS4gIFNlZQorICogX19pc2FtZW1fY29udmVydF9hZGRyIGZvciB0aGUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCitzdGF0aWMgdm9pZCBfX2lvbWVtICpfX2lzYW1lbV9jb252ZXJ0X2FkZHIodm9pZCBfX2lvbWVtICphZGRyKQoreworCXUzMiByZXQsIGEgPSAodTMyIF9fZm9yY2UpIGFkZHI7CisKKwkvKgorCSAqIFRoZSBQQ01DSUEgY29udHJvbGxlciBpcyB3aXJlZCB1cCBhcyBmb2xsb3dzOgorCSAqICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rCisJICogUENNQ0lBIHwgMiAyIDIgMiB8IDEgMSAxIDEgfCAxIDEgMSAxIHwgMSAxICAgICB8ICAgICAgICAgfCAgICAgICAgIHwKKwkgKiAgICAgICAgfCAzIDIgMSAwIHwgOSA4IDcgNiB8IDUgNCAzIDIgfCAxIDAgOSA4IHwgNyA2IDUgNCB8IDMgMiAxIDAgfAorCSAqICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rCisJICogIENQVSAgIHwgMiAyIDIgMiB8IDIgMSAxIDEgfCAxIDEgMSAxIHwgMSAxIDEgICB8ICAgICAgICAgfCAgICAgICAgIHwKKwkgKiAgICAgICAgfCA0IDMgMiAxIHwgMCA5IDkgOCB8IDcgNiA1IDQgfCAzIDIgMCA5IHwgOCA3IDYgNSB8IDQgMyAyIHggfAorCSAqICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rCisJICoKKwkgKiBUaGlzIG1lYW5zIHRoYXQgd2UgY2FuIGFjY2VzcyBQQ01DSUEgcmVnaW9ucyBhcyBmb2xsb3dzOgorCSAqCTB4KjEwMDAwIC0+IDB4KjFmZmZmCisJICoJMHgqNzAwMDAgLT4gMHgqN2ZmZmYKKwkgKgkweCo5MDAwMCAtPiAweCo5ZmZmZgorCSAqCTB4KmYwMDAwIC0+IDB4KmZmZmZmCisJICovCisJcmV0ICA9IChhICYgMHhmODAzZmUpIDw8IDE7CisJcmV0IHw9IChhICYgMHgwM2ZjMDApIDw8IDI7CisKKwlyZXQgKz0gMHhlODAwMDAwMDsKKworCWlmICgoYSAmIDB4MjAwMDApID09IChhICYgMHg0MDAwMCkgPj4gMSkKKwkJcmV0dXJuICh2b2lkIF9faW9tZW0gKilyZXQ7CisKKwlCVUcoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIHJlYWRbYndsXSBhbmQgd3JpdGVbYndsXQorICovCit1OCBfX3JlYWRiKHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl2b2lkIF9faW9tZW0gKmEgPSBfX2lzYW1lbV9jb252ZXJ0X2FkZHIoYWRkcik7CisJdTMyIHJldDsKKworCWlmICgodW5zaWduZWQgbG9uZylhZGRyICYgMSkKKwkJcmV0ID0gX19yYXdfcmVhZGwoYSk7CisJZWxzZQorCQlyZXQgPSBfX3Jhd19yZWFkYihhKTsKKwlyZXR1cm4gcmV0OworfQorCit1MTYgX19yZWFkdyh2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdm9pZCBfX2lvbWVtICphID0gX19pc2FtZW1fY29udmVydF9hZGRyKGFkZHIpOworCisJaWYgKCh1bnNpZ25lZCBsb25nKWFkZHIgJiAxKQorCQlCVUcoKTsKKworCXJldHVybiBfX3Jhd19yZWFkdyhhKTsKK30KKwordTMyIF9fcmVhZGwodm9pZCBfX2lvbWVtICphZGRyKQoreworCXZvaWQgX19pb21lbSAqYSA9IF9faXNhbWVtX2NvbnZlcnRfYWRkcihhZGRyKTsKKwl1MzIgcmV0OworCisJaWYgKCh1bnNpZ25lZCBsb25nKWFkZHIgJiAzKQorCQlCVUcoKTsKKworCXJldCA9IF9fcmF3X3JlYWR3KGEpOworCXJldCB8PSBfX3Jhd19yZWFkdyhhICsgNCkgPDwgMTY7CisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTChfX3JlYWRiKTsKK0VYUE9SVF9TWU1CT0woX19yZWFkdyk7CitFWFBPUlRfU1lNQk9MKF9fcmVhZGwpOworCit2b2lkIF9fd3JpdGViKHU4IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXZvaWQgX19pb21lbSAqYSA9IF9faXNhbWVtX2NvbnZlcnRfYWRkcihhZGRyKTsKKworCWlmICgodW5zaWduZWQgbG9uZylhZGRyICYgMSkKKwkJX19yYXdfd3JpdGVsKHZhbCwgYSk7CisJZWxzZQorCQlfX3Jhd193cml0ZWIodmFsLCBhKTsKK30KKwordm9pZCBfX3dyaXRldyh1MTYgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdm9pZCBfX2lvbWVtICphID0gX19pc2FtZW1fY29udmVydF9hZGRyKGFkZHIpOworCisJaWYgKCh1bnNpZ25lZCBsb25nKWFkZHIgJiAxKQorCQlCVUcoKTsKKworCV9fcmF3X3dyaXRldyh2YWwsIGEpOworfQorCit2b2lkIF9fd3JpdGVsKHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl2b2lkIF9faW9tZW0gKmEgPSBfX2lzYW1lbV9jb252ZXJ0X2FkZHIoYWRkcik7CisKKwlpZiAoKHVuc2lnbmVkIGxvbmcpYWRkciAmIDMpCisJCUJVRygpOworCisJX19yYXdfd3JpdGV3KHZhbCwgYSk7CisJX19yYXdfd3JpdGV3KHZhbCA+PiAxNiwgYSArIDQpOworfQorCitFWFBPUlRfU1lNQk9MKF9fd3JpdGViKTsKK0VYUE9SVF9TWU1CT0woX193cml0ZXcpOworRVhQT1JUX1NZTUJPTChfX3dyaXRlbCk7CisKKyNkZWZpbmUgU1VQRVJJT19QT1JUKHApIFwKKwkoKChwKSA+PiAzKSA9PSAoMHgzZjggPj4gMykgfHwgXAorCSAoKHApID4+IDMpID09ICgweDJmOCA+PiAzKSB8fCBcCisJICgocCkgPj4gMykgPT0gKDB4Mzc4ID4+IDMpKQorCisvKgorICogV2UncmUgYWRkcmVzc2luZyBhbiA4IG9yIDE2LWJpdCBwZXJpcGhlcmFsIHdoaWNoIHRyYW5mZXJzCisgKiBvZGQgYWRkcmVzc2VzIG9uIHRoZSBsb3cgSVNBIGJ5dGUgbGFuZS4KKyAqLwordTggX19pbmI4KHVuc2lnbmVkIGludCBwb3J0KQoreworCXUzMiByZXQ7CisKKwkvKgorCSAqIFRoZSBTdXBlcklPIHJlZ2lzdGVycyB1c2Ugc2FuZSBhZGRyZXNzaW5nIHRlY2huaXF1ZXMuLi4KKwkgKi8KKwlpZiAoU1VQRVJJT19QT1JUKHBvcnQpKQorCQlyZXQgPSBfX3Jhd19yZWFkYigodm9pZCBfX2lvbWVtICopSVNBSU9fQkFTRSArIChwb3J0IDw8IDIpKTsKKwllbHNlIHsKKwkJdm9pZCBfX2lvbWVtICphID0gKHZvaWQgX19pb21lbSAqKUlTQUlPX0JBU0UgKyAoKHBvcnQgJiB+MSkgPDwgMSk7CisKKwkJLyoKKwkJICogU2hhbWUgbm90aGluZyBlbHNlIGRvZXMKKwkJICovCisJCWlmIChwb3J0ICYgMSkKKwkJCXJldCA9IF9fcmF3X3JlYWRsKGEpOworCQllbHNlCisJCQlyZXQgPSBfX3Jhd19yZWFkYihhKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFdlJ3JlIGFkZHJlc3NpbmcgYSAxNi1iaXQgcGVyaXBoZXJhbCB3aGljaCB0cmFuc2ZlcnMgb2RkCisgKiBhZGRyZXNzZXMgb24gdGhlIGhpZ2ggSVNBIGJ5dGUgbGFuZS4KKyAqLwordTggX19pbmIxNih1bnNpZ25lZCBpbnQgcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCisJLyoKKwkgKiBUaGUgU3VwZXJJTyByZWdpc3RlcnMgdXNlIHNhbmUgYWRkcmVzc2luZyB0ZWNobmlxdWVzLi4uCisJICovCisJaWYgKFNVUEVSSU9fUE9SVChwb3J0KSkKKwkJb2Zmc2V0ID0gcG9ydCA8PCAyOworCWVsc2UKKwkJb2Zmc2V0ID0gKHBvcnQgJiB+MSkgPDwgMSB8IChwb3J0ICYgMSk7CisKKwlyZXR1cm4gX19yYXdfcmVhZGIoKHZvaWQgX19pb21lbSAqKUlTQUlPX0JBU0UgKyBvZmZzZXQpOworfQorCit1MTYgX19pbncodW5zaWduZWQgaW50IHBvcnQpCit7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKworCS8qCisJICogVGhlIFN1cGVySU8gcmVnaXN0ZXJzIHVzZSBzYW5lIGFkZHJlc3NpbmcgdGVjaG5pcXVlcy4uLgorCSAqLworCWlmIChTVVBFUklPX1BPUlQocG9ydCkpCisJCW9mZnNldCA9IHBvcnQgPDwgMjsKKwllbHNlIHsKKwkJb2Zmc2V0ID0gcG9ydCA8PCAxOworCQlCVUdfT04ocG9ydCAmIDEpOworCX0KKwlyZXR1cm4gX19yYXdfcmVhZHcoKHZvaWQgX19pb21lbSAqKUlTQUlPX0JBU0UgKyBvZmZzZXQpOworfQorCisvKgorICogRmFrZSBhIDMyLWJpdCByZWFkIHdpdGggdHdvIDE2LWJpdCByZWFkcy4gIE5lZWRlZCBmb3IgM2M1ODkuCisgKi8KK3UzMiBfX2lubCh1bnNpZ25lZCBpbnQgcG9ydCkKK3sKKwl2b2lkIF9faW9tZW0gKmE7CisKKwlpZiAoU1VQRVJJT19QT1JUKHBvcnQpIHx8IHBvcnQgJiAzKQorCQlCVUcoKTsKKworCWEgPSAodm9pZCBfX2lvbWVtICopSVNBSU9fQkFTRSArICgocG9ydCAmIH4xKSA8PCAxKTsKKworCXJldHVybiBfX3Jhd19yZWFkdyhhKSB8IF9fcmF3X3JlYWR3KGEgKyA0KSA8PCAxNjsKK30KKworRVhQT1JUX1NZTUJPTChfX2luYjgpOworRVhQT1JUX1NZTUJPTChfX2luYjE2KTsKK0VYUE9SVF9TWU1CT0woX19pbncpOworRVhQT1JUX1NZTUJPTChfX2lubCk7CisKK3ZvaWQgX19vdXRiOCh1OCB2YWwsIHVuc2lnbmVkIGludCBwb3J0KQoreworCS8qCisJICogVGhlIFN1cGVySU8gcmVnaXN0ZXJzIHVzZSBzYW5lIGFkZHJlc3NpbmcgdGVjaG5pcXVlcy4uLgorCSAqLworCWlmIChTVVBFUklPX1BPUlQocG9ydCkpCisJCV9fcmF3X3dyaXRlYih2YWwsICh2b2lkIF9faW9tZW0gKilJU0FJT19CQVNFICsgKHBvcnQgPDwgMikpOworCWVsc2UgeworCQl2b2lkIF9faW9tZW0gKmEgPSAodm9pZCBfX2lvbWVtICopSVNBSU9fQkFTRSArICgocG9ydCAmIH4xKSA8PCAxKTsKKworCQkvKgorCQkgKiBTaGFtZSBub3RoaW5nIGVsc2UgZG9lcworCQkgKi8KKwkJaWYgKHBvcnQgJiAxKQorCQkJX19yYXdfd3JpdGVsKHZhbCwgYSk7CisJCWVsc2UKKwkJCV9fcmF3X3dyaXRlYih2YWwsIGEpOworCX0KK30KKwordm9pZCBfX291dGIxNih1OCB2YWwsIHVuc2lnbmVkIGludCBwb3J0KQoreworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisKKwkvKgorCSAqIFRoZSBTdXBlcklPIHJlZ2lzdGVycyB1c2Ugc2FuZSBhZGRyZXNzaW5nIHRlY2huaXF1ZXMuLi4KKwkgKi8KKwlpZiAoU1VQRVJJT19QT1JUKHBvcnQpKQorCQlvZmZzZXQgPSBwb3J0IDw8IDI7CisJZWxzZQorCQlvZmZzZXQgPSAocG9ydCAmIH4xKSA8PCAxIHwgKHBvcnQgJiAxKTsKKworCV9fcmF3X3dyaXRlYih2YWwsICh2b2lkIF9faW9tZW0gKilJU0FJT19CQVNFICsgb2Zmc2V0KTsKK30KKwordm9pZCBfX291dHcodTE2IHZhbCwgdW5zaWduZWQgaW50IHBvcnQpCit7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKworCS8qCisJICogVGhlIFN1cGVySU8gcmVnaXN0ZXJzIHVzZSBzYW5lIGFkZHJlc3NpbmcgdGVjaG5pcXVlcy4uLgorCSAqLworCWlmIChTVVBFUklPX1BPUlQocG9ydCkpCisJCW9mZnNldCA9IHBvcnQgPDwgMjsKKwllbHNlIHsKKwkJb2Zmc2V0ID0gcG9ydCA8PCAxOworCQlCVUdfT04ocG9ydCAmIDEpOworCX0KKwlfX3Jhd193cml0ZXcodmFsLCAodm9pZCBfX2lvbWVtICopSVNBSU9fQkFTRSArIG9mZnNldCk7Cit9CisKK3ZvaWQgX19vdXRsKHUzMiB2YWwsIHVuc2lnbmVkIGludCBwb3J0KQoreworCUJVRygpOworfQorCitFWFBPUlRfU1lNQk9MKF9fb3V0YjgpOworRVhQT1JUX1NZTUJPTChfX291dGIxNik7CitFWFBPUlRfU1lNQk9MKF9fb3V0dyk7CitFWFBPUlRfU1lNQk9MKF9fb3V0bCk7CisKK3ZvaWQgb3V0c2IodW5zaWduZWQgaW50IHBvcnQsIGNvbnN0IHZvaWQgKmZyb20sIGludCBsZW4pCit7CisJdTMyIG9mZjsKKworCWlmIChTVVBFUklPX1BPUlQocG9ydCkpCisJCW9mZiA9IHBvcnQgPDwgMjsKKwllbHNlIHsKKwkJb2ZmID0gKHBvcnQgJiB+MSkgPDwgMTsKKwkJaWYgKHBvcnQgJiAxKQorCQkJQlVHKCk7CisJfQorCisJX19yYXdfd3JpdGVzYigodm9pZCBfX2lvbWVtICopSVNBSU9fQkFTRSArIG9mZiwgZnJvbSwgbGVuKTsKK30KKwordm9pZCBpbnNiKHVuc2lnbmVkIGludCBwb3J0LCB2b2lkICpmcm9tLCBpbnQgbGVuKQoreworCXUzMiBvZmY7CisKKwlpZiAoU1VQRVJJT19QT1JUKHBvcnQpKQorCQlvZmYgPSBwb3J0IDw8IDI7CisJZWxzZSB7CisJCW9mZiA9IChwb3J0ICYgfjEpIDw8IDE7CisJCWlmIChwb3J0ICYgMSkKKwkJCUJVRygpOworCX0KKworCV9fcmF3X3JlYWRzYigodm9pZCBfX2lvbWVtICopSVNBSU9fQkFTRSArIG9mZiwgZnJvbSwgbGVuKTsKK30KKworRVhQT1JUX1NZTUJPTChvdXRzYik7CitFWFBPUlRfU1lNQk9MKGluc2IpOworCit2b2lkIG91dHN3KHVuc2lnbmVkIGludCBwb3J0LCBjb25zdCB2b2lkICpmcm9tLCBpbnQgbGVuKQoreworCXUzMiBvZmY7CisKKwlpZiAoU1VQRVJJT19QT1JUKHBvcnQpKQorCQlvZmYgPSBwb3J0IDw8IDI7CisJZWxzZSB7CisJCW9mZiA9IChwb3J0ICYgfjEpIDw8IDE7CisJCWlmIChwb3J0ICYgMSkKKwkJCUJVRygpOworCX0KKworCV9fcmF3X3dyaXRlc3coKHZvaWQgX19pb21lbSAqKUlTQUlPX0JBU0UgKyBvZmYsIGZyb20sIGxlbik7Cit9CisKK3ZvaWQgaW5zdyh1bnNpZ25lZCBpbnQgcG9ydCwgdm9pZCAqZnJvbSwgaW50IGxlbikKK3sKKwl1MzIgb2ZmOworCisJaWYgKFNVUEVSSU9fUE9SVChwb3J0KSkKKwkJb2ZmID0gcG9ydCA8PCAyOworCWVsc2UgeworCQlvZmYgPSAocG9ydCAmIH4xKSA8PCAxOworCQlpZiAocG9ydCAmIDEpCisJCQlCVUcoKTsKKwl9CisKKwlfX3Jhd19yZWFkc3coKHZvaWQgX19pb21lbSAqKUlTQUlPX0JBU0UgKyBvZmYsIGZyb20sIGxlbik7Cit9CisKK0VYUE9SVF9TWU1CT0wob3V0c3cpOworRVhQT1JUX1NZTUJPTChpbnN3KTsKKworLyoKKyAqIFdlIGltcGxlbWVudCB0aGVzZSBhcyAxNi1iaXQgaW5zdy9vdXRzdywgbWFpbmx5IGZvcgorICogM2M1ODkgY2FyZHMuCisgKi8KK3ZvaWQgb3V0c2wodW5zaWduZWQgaW50IHBvcnQsIGNvbnN0IHZvaWQgKmZyb20sIGludCBsZW4pCit7CisJdTMyIG9mZiA9IHBvcnQgPDwgMTsKKworCWlmIChTVVBFUklPX1BPUlQocG9ydCkgfHwgcG9ydCAmIDMpCisJCUJVRygpOworCisJX19yYXdfd3JpdGVzdygodm9pZCBfX2lvbWVtICopSVNBSU9fQkFTRSArIG9mZiwgZnJvbSwgbGVuIDw8IDEpOworfQorCit2b2lkIGluc2wodW5zaWduZWQgaW50IHBvcnQsIHZvaWQgKmZyb20sIGludCBsZW4pCit7CisJdTMyIG9mZiA9IHBvcnQgPDwgMTsKKworCWlmIChTVVBFUklPX1BPUlQocG9ydCkgfHwgcG9ydCAmIDMpCisJCUJVRygpOworCisJX19yYXdfcmVhZHN3KCh2b2lkIF9faW9tZW0gKilJU0FJT19CQVNFICsgb2ZmLCBmcm9tLCBsZW4gPDwgMSk7Cit9CisKK0VYUE9SVF9TWU1CT0wob3V0c2wpOworRVhQT1JUX1NZTUJPTChpbnNsKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZWJzYTExMC9sZWRzLmMgYi9hcmNoL2FybS9tYWNoLWVic2ExMTAvbGVkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYzhjNWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWVic2ExMTAvbGVkcy5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2xlZHMuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTggUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgRUJTQS0xMTAgTEVEIGNvbnRyb2wgcm91dGluZXMuICBXZSB1c2UgdGhlIGxlZCBhcyBmb2xsb3dzOgorICoKKyAqICAgLSBSZWQgLSB0b2dnbGVzIHN0YXRlIGV2ZXJ5IDUwIHRpbWVyIGludGVycnVwdHMKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworc3RhdGljIHNwaW5sb2NrX3QgbGVkc19sb2NrOworCitzdGF0aWMgdm9pZCBlYnNhMTEwX2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgbGVkZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGVkc19sb2NrLCBmbGFncyk7CisKKwlzd2l0Y2gobGVkZXZ0KSB7CisJY2FzZSBsZWRfdGltZXI6CisJCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKVNPRlRfQkFTRSBePSAxMjg7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGVkc19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGxlZHNfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX2Vic2ExMTAoKSkKKwkJbGVkc19ldmVudCA9IGVic2ExMTBfbGVkc19ldmVudDsKKworCXJldHVybiAwOworfQorCitfX2luaXRjYWxsKGxlZHNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVweGExMGRiL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWVweGExMGRiL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVkODk2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvS2NvbmZpZwpAQCAtMCwwICsxLDIzIEBACitpZiBBUkNIX0NBTUVMT1QKKworbWVudSAiRXB4YTEwZGIiCisKK2NvbW1lbnQgIlBMRCBob3Rzd2FwIHN1cHBvcnQiCisKK2NvbmZpZyBQTEQKKwlib29sCisJZGVmYXVsdCB5CisKK2NvbmZpZyBQTERfSE9UU1dBUAorCWJvb2wgIlN1cHBvcnQgZm9yIFBMRCBkZXZpY2UgaG90cGx1Z2dpbmcgKGV4cGVyaW1lbnRhbCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGR5bmFtaWMgbG9hZGluZyBhbmQgY29uZmlndXJhdGlvbiBvZgorCSAgY29tcGF0aWJsZSBkcml2ZXJzIHdoZW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBQTEQgYXJlIGNoYW5nZWQuIFRoaXMKKwkgIGlzIHN0aWxsIGV4cGVyaW1lbnRhbCBhbmQgcmVxdWlyZXMgY29uZmlndXJhdGlvbiB0b29scyB3aGljaCBhcmUKKwkgIG5vdCB5ZXQgZ2VuZXJhbGx5IGF2YWlsYWJsZS4gU2F5IE4gaGVyZS4gWW91IG11c3QgZW5hYmxlIHRoZSBrZXJuZWwKKwkgIG1vZHVsZSBsb2FkZXIgZm9yIHRoaXMgZmVhdHVyZSB0byB3b3JrLgorCitlbmRtZW51CisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVweGExMGRiL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGZiZDdkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9NYWtlZmlsZQpAQCAtMCwwICsxLDExIEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgorIworCisjIE9iamVjdCBmaWxlIGxpc3RzLgorCitvYmoteQkJCTo9IGFyY2gubyBpcnEubyBtbS5vIHRpbWUubyAKK29iai1tCQkJOj0KK29iai1uCQkJOj0KK29iai0JCQk6PQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVweGExMGRiL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLWVweGExMGRiL01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhiZWM3ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDIgQEAKKyAgIHpyZWxhZGRyLXkJOj0gMHgwMDAwODAwMAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVweGExMGRiL2FyY2guYyBiL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvYXJjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNDAzNDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWVweGExMGRiL2FyY2guYwpAQCAtMCwwICsxLDcyIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvYXJjaC5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICogIENvcHlyaWdodCAoQykgMjAwMSBBbHRlcmEgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0geworCXsKKwkJLmlvYmFzZQkJPSAweDNmOCwKKwkJLmlycQkJPSBJUlFfVUFSVElOVDAsCisjZXJyb3IgRklYTUUKKwkJLnVhcnRjbGsJPSAwLAorCQkucmVnc2hpZnQJPSAwLAorCQkuaW90eXBlCQk9IFVQSU9fUE9SVCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwKKwl9LAorCXsKKwkJLmlvYmFzZQkJPSAweDJmOCwKKwkJLmlycQkJPSBJUlFfVUFSVElOVDEsCisjZXJyb3IgRklYTUUKKwkJLnVhcnRjbGsJPSAwLAorCQkucmVnc2hpZnQJPSAwLAorCQkuaW90eXBlCQk9IFVQSU9fUE9SVCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwKKwl9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNlcmlhbF9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJzZXJpYWw4MjUwIiwKKwkuaWQJCQk9IDAsCisJLmRldgkJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitleHRlcm4gdm9pZCBlcHhhMTBkYl9tYXBfaW8odm9pZCk7CitleHRlcm4gdm9pZCBlcHhhMTBkYl9pbml0X2lycSh2b2lkKTsKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIGVweGExMGRiX3RpbWVyOworCitNQUNISU5FX1NUQVJUKENBTUVMT1QsICJBbHRlcmEgRXB4YTEwZGIiKQorCU1BSU5UQUlORVIoIkFsdGVyYSBDb3Jwb3JhdGlvbiIpCisJQk9PVF9NRU0oMHgwMDAwMDAwMCwgMHg3ZmZmYzAwMCwgMHhmZmZmYzAwMCkKKwlNQVBJTyhlcHhhMTBkYl9tYXBfaW8pCisJSU5JVElSUShlcHhhMTBkYl9pbml0X2lycSkKKwkudGltZXIJCT0gJmVweGExMGRiX3RpbWVyLAorTUFDSElORV9FTkQKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9kbWEuYyBiL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE1MWU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvZG1hLmMKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLWVweGExMGRiL2RtYS5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9kbWEuaD4KKwordm9pZCBfX2luaXQgYXJjaF9kbWFfaW5pdChkbWFfdCAqZG1hKQoreworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9pcnEuYyBiL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJmOTI3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvaXJxLmMKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLWVweGExMGRiL2lycS5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSBBbHRlcmEgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW50X2N0cmwwMC5oPgorCisKK3N0YXRpYyB2b2lkIGVweGFfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKyAgICAgICAgd3JpdGVsKDEgPDwgaXJxLCBJTlRfTUMoSU9fQUREUkVTUyhFWENfSU5UX0NUUkwwMF9CQVNFKSkpOworfQorCitzdGF0aWMgdm9pZCBlcHhhX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKyAgICAgICAgd3JpdGVsKDEgPDwgaXJxLCBJTlRfTVMoSU9fQUREUkVTUyhFWENfSU5UX0NUUkwwMF9CQVNFKSkpOworfQorIAorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgZXB4YV9pcnFfY2hpcCA9IHsKKwkuYWNrCQk9IGVweGFfbWFza19pcnEsCisJLm1hc2sJCT0gZXB4YV9tYXNrX2lycSwKKwkudW5tYXNrCQk9IGVweGFfdW5tYXNrX2lycSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXJxX3Jlc291cmNlID0geworCS5uYW1lCT0gImlycV9oYW5kbGVyIiwKKwkuc3RhcnQJPSBJT19BRERSRVNTKEVYQ19JTlRfQ1RSTDAwX0JBU0UpLAorCS5lbmQJPSBJT19BRERSRVNTKElOVF9QUklPUklUWV9GQyhFWENfSU5UX0NUUkwwMF9CQVNFKSkrNCwKK307CisKK3ZvaWQgX19pbml0IGVweGExMGRiX2luaXRfaXJxKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisJCisJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZpcnFfcmVzb3VyY2UpOworCisJLyoKKwkgKiBUaGlzIGJpdCBzZXRzIHVwIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciB1c2luZyAKKwkgKiB0aGUgNiBQTEQgaW50ZXJydXB0cyBtb2RlICh0aGUgZGVmYXVsdCkgZWFjaCAKKwkgKiBpcnFzIGlzIGFzc2lnbmVkIGEgcHJpb3JpdHkgd2hpY2ggaXMgdGhlIHNhbWUKKwkgKiBhcyBpdHMgaW50ZXJydXB0IG51bWJlci4gVGhpcyBzY2hlbWUgaXMgdXNlZCBiZWNhdXNlIAorCSAqIGl0cyBlYXN5LCBidXQgeW91IG1heSB3YW50IHRvIGNoYW5nZSBpdCBkZXBlbmRpbmcKKwkgKiBvbiB0aGUgY29udGVudHMgb2YgeW91ciBQTEQKKwkgKi8KKworCXdyaXRlbCgzLElOVF9NT0RFKElPX0FERFJFU1MoRVhDX0lOVF9DVFJMMDBfQkFTRSkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKXsKKwkJd3JpdGVsKGkrMSwgSU5UX1BSSU9SSVRZX1AwKElPX0FERFJFU1MoRVhDX0lOVF9DVFJMMDBfQkFTRSkpICsgKDQqaSkpOworCQlzZXRfaXJxX2NoaXAoaSwmZXB4YV9pcnFfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpLGRvX2xldmVsX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOworCX0KKworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwl3cml0ZWwoLTEsSU5UX01DKElPX0FERFJFU1MoRVhDX0lOVF9DVFJMMDBfQkFTRSkpKTsKKworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9tbS5jIGIvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9tbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYTU3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWVweGExMGRiL21tLmMKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLWVweGExMGRiL21tLmMKKyAqCisgKiAgTU0gcm91dGluZXMgZm9yIEFsdGVyYSdhIEVweGExMGRiIGJvYXJkCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSBBbHRlcmEgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyAKKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworLyogUGFnZSB0YWJsZSBtYXBwaW5nIGZvciBJL08gcmVnaW9uICovCisgCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGVweGExMGRiX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworIHsgSU9fQUREUkVTUyhFWENfUkVHSVNURVJTX0JBU0UpLCAgIEVYQ19SRUdJU1RFUlNfQkFTRSwgICAgU1pfMTZLLCBNVF9ERVZJQ0UgfSwgCisgeyBJT19BRERSRVNTKEVYQ19QTERfQkxPQ0swX0JBU0UpLCAgRVhDX1BMRF9CTE9DSzBfQkFTRSwgICBTWl8xNkssIE1UX0RFVklDRSB9LCAKKyB7IElPX0FERFJFU1MoRVhDX1BMRF9CTE9DSzFfQkFTRSksICBFWENfUExEX0JMT0NLMV9CQVNFLCAgIFNaXzE2SywgTVRfREVWSUNFIH0sIAorIHsgSU9fQUREUkVTUyhFWENfUExEX0JMT0NLMl9CQVNFKSwgIEVYQ19QTERfQkxPQ0syX0JBU0UsICAgU1pfMTZLLCBNVF9ERVZJQ0UgfSwgCisgeyBJT19BRERSRVNTKEVYQ19QTERfQkxPQ0szX0JBU0UpLCAgRVhDX1BMRF9CTE9DSzNfQkFTRSwgICBTWl8xNkssIE1UX0RFVklDRSB9LCAKKyB7IEZMQVNIX1ZBRERSKEVYQ19FQklfQkxPQ0swX0JBU0UpLCBFWENfRUJJX0JMT0NLMF9CQVNFLCAgIFNaXzE2TSwgTVRfREVWSUNFIH0KK307CisKK3ZvaWQgX19pbml0IGVweGExMGRiX21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdChlcHhhMTBkYl9pb19kZXNjLCBBUlJBWV9TSVpFKGVweGExMGRiX2lvX2Rlc2MpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI5OTFmMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvdGltZS5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi90aW1lLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9sZWRzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKKyNkZWZpbmUgVElNRVIwMF9UWVBFICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKQorI2luY2x1ZGUgPGFzbS9hcmNoL3RpbWVyMDAuaD4KKworc3RhdGljIGludCBlcHhhMTBkYl9zZXRfcnRjKHZvaWQpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZXB4YTEwZGJfcnRjX2luaXQodm9pZCkKK3sKKwlzZXRfcnRjID0gZXB4YTEwZGJfc2V0X3J0YzsKKworCXJldHVybiAwOworfQorCitfX2luaXRjYWxsKGVweGExMGRiX3J0Y19pbml0KTsKKworCisvKgorICogSVJRIGhhbmRsZXIgZm9yIHRoZSB0aW1lcgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QKK2VweGExMGRiX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOworCisJLy8gLi4uY2xlYXIgdGhlIGludGVycnVwdAorCSpUSU1FUjBfQ1IoSU9fQUREUkVTUyhFWENfVElNRVIwMF9CQVNFKSl8PVRJTUVSMF9DUl9DSV9NU0s7CisKKwl0aW1lcl90aWNrKHJlZ3MpOworCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGVweGExMGRiX3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAiRXhjYWxpYnVyIFRpbWVyIFRpY2siLAorCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLmhhbmRsZXIJPSBlcHhhMTBkYl90aW1lcl9pbnRlcnJ1cHQKK307CisKKy8qCisgKiBTZXQgdXAgdGltZXIgaW50ZXJydXB0LCBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgaW4gc2Vjb25kcy4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IGVweGExMGRiX3RpbWVyX2luaXQodm9pZCkKK3sKKwkvKiBTdGFydCB0aGUgdGltZXIgKi8KKwkqVElNRVIwX0xJTUlUKElPX0FERFJFU1MoRVhDX1RJTUVSMDBfQkFTRSkpPSh1bnNpZ25lZCBpbnQpKEVYQ19BSEIyX0NMS19GUkVRVUVOQ1kvMjAwKTsKKwkqVElNRVIwX1BSRVNDQUxFKElPX0FERFJFU1MoRVhDX1RJTUVSMDBfQkFTRSkpPTE7CisJKlRJTUVSMF9DUihJT19BRERSRVNTKEVYQ19USU1FUjAwX0JBU0UpKT1USU1FUjBfQ1JfSUVfTVNLIHwgVElNRVIwX0NSX1NfTVNLOworCisJc2V0dXBfaXJxKElSUV9USU1FUjAsICZlcHhhMTBkYl90aW1lcl9pcnEpOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIGVweGExMGRiX3RpbWVyID0geworCS5pbml0CQk9IGVweGExMGRiX3RpbWVyX2luaXQsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDkwYzY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL0tjb25maWcKQEAgLTAsMCArMSw4MCBAQAoraWYgQVJDSF9GT09UQlJJREdFCisKK21lbnUgIkZvb3RicmlkZ2UgSW1wbGVtZW50YXRpb25zIgorCitjb25maWcgQVJDSF9DQVRTCisJYm9vbCAiQ0FUUyIKKwlzZWxlY3QgRk9PVEJSSURHRV9IT1NUCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiB0aGUgQ0FUUy4KKworCSAgU2F5aW5nIE4gd2lsbCByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIEZvb3RicmlkZ2Uga2VybmVsLgorCitjb25maWcgQVJDSF9QRVJTT05BTF9TRVJWRVIKKwlib29sICJDb21wYXEgUGVyc29uYWwgU2VydmVyIgorCXNlbGVjdCBGT09UQlJJREdFX0hPU1QKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIHRoZSBDb21wYXEKKwkgIFBlcnNvbmFsIFNlcnZlci4KKworCSAgU2F5aW5nIE4gd2lsbCByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIEZvb3RicmlkZ2Uga2VybmVsLgorCisJICBUaGUgQ29tcGFxIFBlcnNvbmFsIFNlcnZlciBpcyBub3QgYXZhaWxhYmxlIGZvciBwdXJjaGFzZS4KKwkgIFRoZXJlIGFyZSBubyBwcm9kdWN0IHBsYW5zIGJleW9uZCB0aGUgY3VycmVudCByZXNlYXJjaAorCSAgcHJvdG90eXBlcyBhdCB0aGlzIHRpbWUuICBJbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgYXQ6CisKKwkgIDxodHRwOi8vd3d3LmNybC5ocGwuaHAuY29tL3Byb2plY3RzL3BlcnNvbmFsc2VydmVyLz4KKworCSAgSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBjb21tZW50cyBhYm91dCB0aGUgIENvbXBhcSBQZXJzb25hbAorCSAgU2VydmVyLCBzZW5kIGUtbWFpbCB0byA8c2tpZmZAY3JsLmRlYy5jb20+LgorCitjb25maWcgQVJDSF9FQlNBMjg1X0FERElOCisJYm9vbCAiRUJTQTI4NSAoYWRkaW4gbW9kZSkiCisJc2VsZWN0IEFSQ0hfRUJTQTI4NQorCXNlbGVjdCBGT09UQlJJREdFX0FERElOCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiB0aGUgRUJTQTI4NSBjYXJkCisJICBpbiBhZGRpbiBtb2RlLgorCisJICBTYXlpbmcgTiB3aWxsIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgRm9vdGJyaWRnZSBrZXJuZWwuCisKK2NvbmZpZyBBUkNIX0VCU0EyODVfSE9TVAorCWJvb2wgIkVCU0EyODUgKGhvc3QgbW9kZSkiCisJc2VsZWN0IEFSQ0hfRUJTQTI4NQorCXNlbGVjdCBGT09UQlJJREdFX0hPU1QKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIHRoZSBFQlNBMjg1IGNhcmQKKwkgIGluIGhvc3QgKCJjZW50cmFsIGZ1bmN0aW9uIikgbW9kZS4KKworCSAgU2F5aW5nIE4gd2lsbCByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIEZvb3RicmlkZ2Uga2VybmVsLgorCitjb25maWcgQVJDSF9ORVRXSU5ERVIKKwlib29sICJOZXRXaW5kZXIiCisJc2VsZWN0IEZPT1RCUklER0VfSE9TVAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gdGhlIFJlYmVsLkNPTQorCSAgTmV0V2luZGVyLiAgSW5mb3JtYXRpb24gYWJvdXQgdGhpcyBtYWNoaW5lIGNhbiBiZSBmb3VuZCBhdDoKKworCSAgPGh0dHA6Ly93d3cubmV0d2luZGVyLm9yZy8+CisKKwkgIFNheWluZyBOIHdpbGwgcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBGb290YnJpZGdlIGtlcm5lbC4KKworZW5kbWVudQorCisjIEZvb3RicmlkZ2Ugc3VwcG9ydAorY29uZmlnIEZPT1RCUklER0UKKwlib29sCisKKyMgRm9vdGJyaWRnZSBpbiBob3N0IG1vZGUKK2NvbmZpZyBGT09UQlJJREdFX0hPU1QKKwlib29sCisKKyMgRm9vdGJyaWRnZSBpbiBhZGRpbiBtb2RlCitjb25maWcgRk9PVEJSSURHRV9BRERJTgorCWJvb2wKKworIyBFQlNBMjg1IGJvYXJkIGluIGVpdGhlciBob3N0IG9yIGFkZGluIG1vZGUKK2NvbmZpZyBBUkNIX0VCU0EyODUKKwlib29sCisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY5NGFkNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9NYWtlZmlsZQpAQCAtMCwwICsxLDMwIEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgorIworCisjIE9iamVjdCBmaWxlIGxpc3RzLgorCitvYmoteQkJCTo9IGNvbW1vbi5vIGRjMjEyODUubyBkbWEubyBpc2EtaXJxLm8gdGltZS5vCitvYmotbQkJCTo9CitvYmotbgkJCTo9CitvYmotCQkJOj0KKworcGNpLSQoQ09ORklHX0FSQ0hfQ0FUUykgKz0gY2F0cy1wY2kubworcGNpLSQoQ09ORklHX0FSQ0hfRUJTQTI4NV9IT1NUKSArPSBlYnNhMjg1LXBjaS5vCitwY2ktJChDT05GSUdfQVJDSF9ORVRXSU5ERVIpICs9IG5ldHdpbmRlci1wY2kubworcGNpLSQoQ09ORklHX0FSQ0hfUEVSU09OQUxfU0VSVkVSKSArPSBwZXJzb25hbC1wY2kubworCitsZWRzLSQoQ09ORklHX0FSQ0hfQ08yODUpICs9IGVic2EyODUtbGVkcy5vCitsZWRzLSQoQ09ORklHX0FSQ0hfRUJTQTI4NSkgKz0gZWJzYTI4NS1sZWRzLm8KK2xlZHMtJChDT05GSUdfQVJDSF9ORVRXSU5ERVIpICs9IG5ldHdpbmRlci1sZWRzLm8KKworb2JqLSQoQ09ORklHX0FSQ0hfQ0FUUykgKz0gY2F0cy1ody5vIGlzYS10aW1lci5vCitvYmotJChDT05GSUdfQVJDSF9DTzI4NSkgKz0gY28yODUubyBkYzIxMjg1LXRpbWVyLm8KK29iai0kKENPTkZJR19BUkNIX0VCU0EyODUpICs9IGVic2EyODUubyBkYzIxMjg1LXRpbWVyLm8KK29iai0kKENPTkZJR19BUkNIX05FVFdJTkRFUikgKz0gbmV0d2luZGVyLWh3Lm8gaXNhLXRpbWVyLm8KK29iai0kKENPTkZJR19BUkNIX1BFUlNPTkFMX1NFUlZFUikgKz0gcGVyc29uYWwubyBkYzIxMjg1LXRpbWVyLm8KKworb2JqLSQoQ09ORklHX1BDSSkJKz0kKHBjaS15KQorb2JqLSQoQ09ORklHX0xFRFMpCSs9JChsZWRzLXkpCisKK29iai0kKENPTkZJR19JU0EpCSs9IGlzYS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZTc1YWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDQgQEAKKyAgIHpyZWxhZGRyLXkJOj0gMHgwMDAwODAwMAorcGFyYW1zX3BoeXMteQk6PSAweDAwMDAwMTAwCitpbml0cmRfcGh5cy15CTo9IDB4MDA4MDAwMDAKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NhdHMtaHcuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9jYXRzLWh3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFjZWQ4NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9jYXRzLWh3LmMKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9jYXRzLWh3LmMKKyAqCisgKiBDQVRTIG1hY2hpbmUgZml4dXAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgUnVzc2VsbCBLaW5nLCBQaGlsIEJsdW5kZWxsCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVjMjEyODUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKKyNkZWZpbmUgQ0ZHX1BPUlQJMHgzNzAKKyNkZWZpbmUgSU5ERVhfUE9SVAkoQ0ZHX1BPUlQpCisjZGVmaW5lIERBVEFfUE9SVAkoQ0ZHX1BPUlQgKyAxKQorCitzdGF0aWMgaW50IF9faW5pdCBjYXRzX2h3X2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19jYXRzKCkpIHsKKwkJLyogU2V0IEFsYWRkaW4gdG8gQ09ORklHVVJFIG1vZGUgKi8KKwkJb3V0YigweDUxLCBDRkdfUE9SVCk7CisJCW91dGIoMHgyMywgQ0ZHX1BPUlQpOworCisJCS8qIFNlbGVjdCBsb2dpY2FsIGRldmljZSAzICovCisJCW91dGIoMHgwNywgSU5ERVhfUE9SVCk7CisJCW91dGIoMHgwMywgREFUQV9QT1JUKTsKKworCQkvKiBTZXQgcGFyYWxsZWwgcG9ydCB0byBETUEgY2hhbm5lbCAzLCBFQ1ArRVBQMS45LCAKKwkJICAgZW5hYmxlIEVQUCB0aW1lb3V0ICovCisJCW91dGIoMHg3NCwgSU5ERVhfUE9SVCk7CisJCW91dGIoMHgwMywgREFUQV9QT1JUKTsKKwkKKwkJb3V0YigweGYwLCBJTkRFWF9QT1JUKTsKKwkJb3V0YigweDBmLCBEQVRBX1BPUlQpOworCisJCW91dGIoMHhmMSwgSU5ERVhfUE9SVCk7CisJCW91dGIoMHgwNywgREFUQV9QT1JUKTsKKworCQkvKiBTZWxlY3QgbG9naWNhbCBkZXZpY2UgNCAqLworCQlvdXRiKDB4MDcsIElOREVYX1BPUlQpOworCQlvdXRiKDB4MDQsIERBVEFfUE9SVCk7CisKKwkJLyogVUFSVDEgaGlnaCBzcGVlZCBtb2RlICovCisJCW91dGIoMHhmMCwgSU5ERVhfUE9SVCk7CisJCW91dGIoMHgwMiwgREFUQV9QT1JUKTsKKworCQkvKiBTZWxlY3QgbG9naWNhbCBkZXZpY2UgNSAqLworCQlvdXRiKDB4MDcsIElOREVYX1BPUlQpOworCQlvdXRiKDB4MDUsIERBVEFfUE9SVCk7CisKKwkJLyogVUFSVDIgaGlnaCBzcGVlZCBtb2RlICovCisJCW91dGIoMHhmMCwgSU5ERVhfUE9SVCk7CisJCW91dGIoMHgwMiwgREFUQV9QT1JUKTsKKworCQkvKiBTZXQgQWxhZGRpbiB0byBSVU4gbW9kZSAqLworCQlvdXRiKDB4YmIsIENGR19QT1JUKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworX19pbml0Y2FsbChjYXRzX2h3X2luaXQpOworCisvKgorICogQ0FUUyB1c2VzIHNvZnQtcmVib290IGJ5IGRlZmF1bHQsIHNpbmNlCisgKiBoYXJkIHJlYm9vdHMgZmFpbCBvbiBlYXJseSBib2FyZHMuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdAorZml4dXBfY2F0cyhzdHJ1Y3QgbWFjaGluZV9kZXNjICpkZXNjLCBzdHJ1Y3QgdGFnICp0YWdzLAorCSAgIGNoYXIgKipjbWRsaW5lLCBzdHJ1Y3QgbWVtaW5mbyAqbWkpCit7CisJT1JJR19WSURFT19MSU5FUyAgPSAyNTsKKwlPUklHX1ZJREVPX1BPSU5UUyA9IDE2OworCU9SSUdfWSA9IDI0OworfQorCitNQUNISU5FX1NUQVJUKENBVFMsICJDaGFsaWNlLUNBVFMiKQorCU1BSU5UQUlORVIoIlBoaWxpcCBCbHVuZGVsbCIpCisJQk9PVF9NRU0oMHgwMDAwMDAwMCwgREMyMTI4NV9BUk1DU1JfQkFTRSwgMHhmZTAwMDAwMCkKKwlCT09UX1BBUkFNUygweDAwMDAwMTAwKQorCVNPRlRfUkVCT09UCisJRklYVVAoZml4dXBfY2F0cykKKwlNQVBJTyhmb290YnJpZGdlX21hcF9pbykKKwlJTklUSVJRKGZvb3RicmlkZ2VfaW5pdF9pcnEpCisJLnRpbWVyCQk9ICZpc2FfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NhdHMtcGNpLmMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvY2F0cy1wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Zjk4NGZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NhdHMtcGNpLmMKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9jYXRzLXBjaS5jCisgKgorICogUENJIGJpb3MtdHlwZSBpbml0aWFsaXNhdGlvbiBmb3IgUENJIG1hY2hpbmVzCisgKgorICogQml0cyB0YWtlbiBmcm9tIHZhcmlvdXMgcGxhY2VzLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKy8qIGNhdHMgaG9zdC1zcGVjaWZpYyBzdHVmZiAqLworc3RhdGljIGludCBpcnFtYXBfY2F0c1tdIF9faW5pdGRhdGEgPSB7IElSUV9QQ0ksIElSUV9JTjAsIElSUV9JTjEsIElSUV9JTjMgfTsKKworc3RhdGljIGludCBfX2luaXQgY2F0c19tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlpZiAoZGV2LT5pcnEgPj0gMTI4KQorCQlyZXR1cm4gZGV2LT5pcnEgJiAweDFmOworCisJaWYgKGRldi0+aXJxID49IDEgJiYgZGV2LT5pcnEgPD0gNCkKKwkJcmV0dXJuIGlycW1hcF9jYXRzW2Rldi0+aXJxIC0gMV07CisKKwlpZiAoZGV2LT5pcnEgIT0gMCkKKwkJcHJpbnRrKCJQQ0k6IGRldmljZSAlMDJ4OiUwMnggaGFzIHVua25vd24gaXJxIGxpbmUgJXhcbiIsCisJCSAgICAgICBkZXYtPmJ1cy0+bnVtYmVyLCBkZXYtPmRldmZuLCBkZXYtPmlycSk7CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiB3aHkgbm90IHRoZSBzdGFuZGFyZCBQQ0kgc3dpenpsZT8gIGRvZXMgdGhpcyBwcmV2ZW50IDQtcG9ydCB0dWxpcAorICogY2FyZHMgYmVpbmcgdXNlZCAoaWUsIHBjaS1wY2kgYnJpZGdlIGJhc2VkIGNhcmRzKT8KKyAqLworc3RhdGljIHN0cnVjdCBod19wY2kgY2F0c19wY2kgX19pbml0ZGF0YSA9IHsKKwkuc3dpenpsZQkJPSBOVUxMLAorCS5tYXBfaXJxCQk9IGNhdHNfbWFwX2lycSwKKwkubnJfY29udHJvbGxlcnMJCT0gMSwKKwkuc2V0dXAJCQk9IGRjMjEyODVfc2V0dXAsCisJLnNjYW4JCQk9IGRjMjEyODVfc2Nhbl9idXMsCisJLnByZWluaXQJCT0gZGMyMTI4NV9wcmVpbml0LAorCS5wb3N0aW5pdAkJPSBkYzIxMjg1X3Bvc3Rpbml0LAorfTsKKworc3RhdGljIGludCBjYXRzX3BjaV9pbml0KHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfY2F0cygpKQorCQlwY2lfY29tbW9uX2luaXQoJmNhdHNfcGNpKTsKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKGNhdHNfcGNpX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NvMjg1LmMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvY28yODUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTU0MTkxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NvMjg1LmMKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9jbzI4NS5jCisgKgorICogQ08yODUgbWFjaGluZSBmaXh1cAorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYzIxMjg1Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorCitzdGF0aWMgdm9pZCBfX2luaXQKK2ZpeHVwX2NvZWJzYTI4NShzdHJ1Y3QgbWFjaGluZV9kZXNjICpkZXNjLCBzdHJ1Y3QgdGFnICp0YWdzLAorCQljaGFyICoqY21kbGluZSwgc3RydWN0IG1lbWluZm8gKm1pKQoreworCWV4dGVybiB1bnNpZ25lZCBsb25nIGJvb3RfbWVtb3J5X2VuZDsKKwlleHRlcm4gY2hhciBib290X2NvbW1hbmRfbGluZVtdOworCisJbWktPm5yX2JhbmtzICAgICAgPSAxOworCW1pLT5iYW5rWzBdLnN0YXJ0ID0gUEhZU19PRkZTRVQ7CisJbWktPmJhbmtbMF0uc2l6ZSAgPSBib290X21lbW9yeV9lbmQ7CisJbWktPmJhbmtbMF0ubm9kZSAgPSAwOworCisJKmNtZGxpbmUgPSBib290X2NvbW1hbmRfbGluZTsKK30KKworTUFDSElORV9TVEFSVChDTzI4NSwgImNvLUVCU0EyODUiKQorCU1BSU5UQUlORVIoIk1hcmsgdmFuIERvZXNidXJnIikKKwlCT09UX01FTSgweDAwMDAwMDAwLCBEQzIxMjg1X0FSTUNTUl9CQVNFLCAweDdjZjAwMDAwKQorCUZJWFVQKGZpeHVwX2NvZWJzYTI4NSkKKwlNQVBJTyhmb290YnJpZGdlX21hcF9pbykKKwlJTklUSVJRKGZvb3RicmlkZ2VfaW5pdF9pcnEpCisJLnRpbWVyCQk9ICZmb290YnJpZGdlX3RpbWVyLAorTUFDSElORV9FTkQKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViODIzOGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvY29tbW9uLmMKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NvbW1vbi5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OC0yMDAwIFJ1c3NlbGwgS2luZywgRGF2ZSBHaWxiZXJ0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyAKKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYzIxMjg1Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorCitleHRlcm4gdm9pZCBfX2luaXQgaXNhX2luaXRfaXJxKHVuc2lnbmVkIGludCBpcnEpOworCit1bnNpZ25lZCBpbnQgbWVtX2ZjbGtfMjEyODUgPSA1MDAwMDAwMDsKKworRVhQT1JUX1NZTUJPTChtZW1fZmNsa18yMTI4NSk7CisKK3N0YXRpYyBpbnQgX19pbml0IHBhcnNlX3RhZ19tZW1jbGsoY29uc3Qgc3RydWN0IHRhZyAqdGFnKQoreworCW1lbV9mY2xrXzIxMjg1ID0gdGFnLT51Lm1lbWNsay5mbWVtY2xrOworCXJldHVybiAwOworfQorCitfX3RhZ3RhYmxlKEFUQUdfTUVNQ0xLLCBwYXJzZV90YWdfbWVtY2xrKTsKKworLyoKKyAqIEZvb3RicmlkZ2UgSVJRIHRyYW5zbGF0aW9uIHRhYmxlCisgKiAgQ29udmVydHMgZnJvbSBvdXIgSVJRIG51bWJlcnMgaW50byBGb290QnJpZGdlIG1hc2tzCisgKi8KK3N0YXRpYyBjb25zdCBpbnQgZmJfaXJxX21hc2tbXSA9IHsKKwlJUlFfTUFTS19VQVJUX1JYLAkvKiAgMCAqLworCUlSUV9NQVNLX1VBUlRfVFgsCS8qICAxICovCisJSVJRX01BU0tfVElNRVIxLAkvKiAgMiAqLworCUlSUV9NQVNLX1RJTUVSMiwJLyogIDMgKi8KKwlJUlFfTUFTS19USU1FUjMsCS8qICA0ICovCisJSVJRX01BU0tfSU4wLAkJLyogIDUgKi8KKwlJUlFfTUFTS19JTjEsCQkvKiAgNiAqLworCUlSUV9NQVNLX0lOMiwJCS8qICA3ICovCisJSVJRX01BU0tfSU4zLAkJLyogIDggKi8KKwlJUlFfTUFTS19ET09SQkVMTEhPU1QsCS8qICA5ICovCisJSVJRX01BU0tfRE1BMSwJCS8qIDEwICovCisJSVJRX01BU0tfRE1BMiwJCS8qIDExICovCisJSVJRX01BU0tfUENJLAkJLyogMTIgKi8KKwlJUlFfTUFTS19TRFJBTVBBUklUWSwJLyogMTMgKi8KKwlJUlFfTUFTS19JMk9JTlBPU1QsCS8qIDE0ICovCisJSVJRX01BU0tfUENJX0FCT1JULAkvKiAxNSAqLworCUlSUV9NQVNLX1BDSV9TRVJSLAkvKiAxNiAqLworCUlSUV9NQVNLX0RJU0NBUkRfVElNRVIsCS8qIDE3ICovCisJSVJRX01BU0tfUENJX0RQRVJSLAkvKiAxOCAqLworCUlSUV9NQVNLX1BDSV9QRVJSLAkvKiAxOSAqLworfTsKKworc3RhdGljIHZvaWQgZmJfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwkqQ1NSX0lSUV9ESVNBQkxFID0gZmJfaXJxX21hc2tbX0RDMjEyODVfSU5SKGlycSldOworfQorCitzdGF0aWMgdm9pZCBmYl91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJKkNTUl9JUlFfRU5BQkxFID0gZmJfaXJxX21hc2tbX0RDMjEyODVfSU5SKGlycSldOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgZmJfY2hpcCA9IHsKKwkuYWNrCT0gZmJfbWFza19pcnEsCisJLm1hc2sJPSBmYl9tYXNrX2lycSwKKwkudW5tYXNrID0gZmJfdW5tYXNrX2lycSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBfX2ZiX2luaXRfaXJxKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGlycTsKKworCS8qCisJICogc2V0dXAgREMyMTI4NSBJUlFzCisJICovCisJKkNTUl9JUlFfRElTQUJMRSA9IC0xOworCSpDU1JfRklRX0RJU0FCTEUgPSAtMTsKKworCWZvciAoaXJxID0gX0RDMjEyODVfSVJRKDApOyBpcnEgPCBfREMyMTI4NV9JUlEoMjApOyBpcnErKykgeworCQlzZXRfaXJxX2NoaXAoaXJxLCAmZmJfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2xldmVsX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJfQorfQorCit2b2lkIF9faW5pdCBmb290YnJpZGdlX2luaXRfaXJxKHZvaWQpCit7CisJX19mYl9pbml0X2lycSgpOworCisJaWYgKCFmb290YnJpZGdlX2Nmbl9tb2RlKCkpCisJCXJldHVybjsKKworCWlmIChtYWNoaW5lX2lzX2Vic2EyODUoKSkKKwkJLyogVGhlIGZvbGxvd2luZyBpcyBkZXBlbmRlbnQgb24gd2hpY2ggc2xvdAorCQkgKiB5b3UgcGx1ZyB0aGUgU291dGhicmlkZ2UgY2FyZCBpbnRvLiAgV2UKKwkJICogY3VycmVudGx5IGFzc3VtZSB0aGF0IHlvdSBwbHVnIGl0IGludG8KKwkJICogdGhlIHJpZ2h0LWhhbmQgbW9zdCBzbG90LgorCQkgKi8KKwkJaXNhX2luaXRfaXJxKElSUV9QQ0kpOworCisJaWYgKG1hY2hpbmVfaXNfY2F0cygpKQorCQlpc2FfaW5pdF9pcnEoSVJRX0lOMik7CisKKwlpZiAobWFjaGluZV9pc19uZXR3aW5kZXIoKSkKKwkJaXNhX2luaXRfaXJxKElSUV9JTjMpOworfQorCisvKgorICogQ29tbW9uIG1hcHBpbmcgZm9yIGFsbCBzeXN0ZW1zLiAgTm90ZSB0aGF0IHRoZSBvdXRib3VuZCB3cml0ZSBmbHVzaCBpcworICogY29tbWVudGVkIG91dCBzaW5jZSB0aGVyZSBpcyBhICJObyBGaXgiIHByb2JsZW0gd2l0aCBpdC4gIE5vdCBtYXBwaW5nCisgKiBpdCBtZWFucyB0aGF0IHdlIGhhdmUgZXh0cmEgYnVsbGV0IHByb3RlY3Rpb24gb24gb3VyIGZlZXQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgZmJfY29tbW9uX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworIHsgQVJNQ1NSX0JBU0UsCSBEQzIxMjg1X0FSTUNTUl9CQVNFLAkgICAgQVJNQ1NSX1NJWkUsICBNVF9ERVZJQ0UgfSwKKyB7IFhCVVNfQkFTRSwgICAgMHg0MDAwMDAwMCwJCSAgICBYQlVTX1NJWkUsICAgIE1UX0RFVklDRSB9Cit9OworCisvKgorICogVGhlIG1hcHBpbmcgd2hlbiB0aGUgZm9vdGJyaWRnZSBpcyBpbiBob3N0IG1vZGUuICBXZSBkb24ndCBtYXAgYW55IG9mCisgKiB0aGlzIHdoZW4gd2UgYXJlIGluIGFkZC1pbiBtb2RlLgorICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGVic2EyODVfaG9zdF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0ZPT1RCUklER0UpICYmIGRlZmluZWQoQ09ORklHX0ZPT1RCUklER0VfSE9TVCkKKyB7IFBDSU1FTV9CQVNFLCAgREMyMTI4NV9QQ0lfTUVNLAkgICAgUENJTUVNX1NJWkUsICBNVF9ERVZJQ0UgfSwKKyB7IFBDSUNGRzBfQkFTRSwgREMyMTI4NV9QQ0lfVFlQRV8wX0NPTkZJRywgUENJQ0ZHMF9TSVpFLCBNVF9ERVZJQ0UgfSwKKyB7IFBDSUNGRzFfQkFTRSwgREMyMTI4NV9QQ0lfVFlQRV8xX0NPTkZJRywgUENJQ0ZHMV9TSVpFLCBNVF9ERVZJQ0UgfSwKKyB7IFBDSUlBQ0tfQkFTRSwgREMyMTI4NV9QQ0lfSUFDSywJICAgIFBDSUlBQ0tfU0laRSwgTVRfREVWSUNFIH0sCisgeyBQQ0lPX0JBU0UsICAgIERDMjEyODVfUENJX0lPLAkgICAgUENJT19TSVpFLAkgIE1UX0RFVklDRSB9CisjZW5kaWYKK307CisKKy8qCisgKiBUaGUgQ08tZWJzYTI4NSBtYXBwaW5nLgorICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGNvMjg1X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworI2lmZGVmIENPTkZJR19BUkNIX0NPMjg1CisgeyBQQ0lPX0JBU0UsCSBEQzIxMjg1X1BDSV9JTywJICAgIFBDSU9fU0laRSwgICAgTVRfREVWSUNFIH0sCisgeyBQQ0lNRU1fQkFTRSwJIERDMjEyODVfUENJX01FTSwJICAgIFBDSU1FTV9TSVpFLCAgTVRfREVWSUNFIH0KKyNlbmRpZgorfTsKKwordm9pZCBfX2luaXQgZm9vdGJyaWRnZV9tYXBfaW8odm9pZCkKK3sKKwkvKgorCSAqIFNldCB1cCB0aGUgY29tbW9uIG1hcHBpbmcgZmlyc3Q7IHdlIG5lZWQgdGhpcyB0bworCSAqIGRldGVybWluZSB3aGV0aGVyIHdlJ3JlIGluIGhvc3QgbW9kZSBvciBub3QuCisJICovCisJaW90YWJsZV9pbml0KGZiX2NvbW1vbl9pb19kZXNjLCBBUlJBWV9TSVpFKGZiX2NvbW1vbl9pb19kZXNjKSk7CisKKwkvKgorCSAqIE5vdywgd29yayBvdXQgd2hhdCB3ZSd2ZSBnb3QgdG8gbWFwIGluIGFkZGl0aW9uIG9uIHRoaXMKKwkgKiBwbGF0Zm9ybS4KKwkgKi8KKwlpZiAobWFjaGluZV9pc19jbzI4NSgpKQorCQlpb3RhYmxlX2luaXQoY28yODVfaW9fZGVzYywgQVJSQVlfU0laRShjbzI4NV9pb19kZXNjKSk7CisJaWYgKGZvb3RicmlkZ2VfY2ZuX21vZGUoKSkKKwkJaW90YWJsZV9pbml0KGVic2EyODVfaG9zdF9pb19kZXNjLCBBUlJBWV9TSVpFKGVic2EyODVfaG9zdF9pb19kZXNjKSk7Cit9CisKKyNpZmRlZiBDT05GSUdfRk9PVEJSSURHRV9BRERJTgorCisvKgorICogVGhlc2UgdHdvIGZ1bmN0aW9ucyBjb252ZXJ0IHZpcnR1YWwgYWRkcmVzc2VzIHRvIFBDSSBhZGRyZXNzZXMgYW5kIFBDSQorICogYWRkcmVzc2VzIHRvIHZpcnR1YWwgYWRkcmVzc2VzLiAgTm90ZSB0aGF0IGl0IGlzIG9ubHkgbGVnYWwgdG8gdXNlIHRoZXNlCisgKiBvbiBtZW1vcnkgb2J0YWluZWQgdmlhIGdldF96ZXJvZWRfcGFnZSBvciBrbWFsbG9jLgorICovCit1bnNpZ25lZCBsb25nIF9fdmlydF90b19idXModW5zaWduZWQgbG9uZyByZXMpCit7CisJV0FSTl9PTihyZXMgPCBQQUdFX09GRlNFVCB8fCByZXMgPj0gKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkpOworCisJcmV0dXJuIChyZXMgLSBQQUdFX09GRlNFVCkgKyAoKkNTUl9QQ0lTRFJBTUJBU0UgJiAweGZmZmZmZmYwKTsKK30KK0VYUE9SVF9TWU1CT0woX192aXJ0X3RvX2J1cyk7CisKK3Vuc2lnbmVkIGxvbmcgX19idXNfdG9fdmlydCh1bnNpZ25lZCBsb25nIHJlcykKK3sKKwlyZXMgLT0gKCpDU1JfUENJU0RSQU1CQVNFICYgMHhmZmZmZmZmMCk7CisJcmVzICs9IFBBR0VfT0ZGU0VUOworCisJV0FSTl9PTihyZXMgPCBQQUdFX09GRlNFVCB8fCByZXMgPj0gKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkpOworCisJcmV0dXJuIHJlczsKK30KK0VYUE9SVF9TWU1CT0woX19idXNfdG9fdmlydCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MGUzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvY29tbW9uLmgKQEAgLTAsMCArMSw5IEBACisKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIGZvb3RicmlkZ2VfdGltZXI7CitleHRlcm4gc3RydWN0IHN5c190aW1lciBpc2FfdGltZXI7CisKK2V4dGVybiB2b2lkIGlzYV9ydGNfaW5pdCh2b2lkKTsKKworZXh0ZXJuIHZvaWQgZm9vdGJyaWRnZV9tYXBfaW8odm9pZCk7CitleHRlcm4gdm9pZCBmb290YnJpZGdlX2luaXRfaXJxKHZvaWQpOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS10aW1lci5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUtdGltZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODBlMWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUtdGltZXIuYwpAQCAtMCwwICsxLDY4IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LXRpbWVyLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4IFJ1c3NlbGwgS2luZy4KKyAqICBDb3B5cmlnaHQgKEMpIDE5OTggUGhpbCBCbHVuZGVsbAorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYzIxMjg1Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKKy8qCisgKiBGb290YnJpZGdlIHRpbWVyIDEgc3VwcG9ydC4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZXIxX2xhdGNoOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcjFfZ2V0dGltZW9mZnNldCAodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlID0gdGltZXIxX2xhdGNoIC0gKkNTUl9USU1FUjFfVkFMVUU7CisKKwlyZXR1cm4gKCh0aWNrX25zZWMgLyAxMDAwKSAqIHZhbHVlKSAvIHRpbWVyMV9sYXRjaDsKK30KKworc3RhdGljIGlycXJldHVybl90Cit0aW1lcjFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CisKKwkqQ1NSX1RJTUVSMV9DTFIgPSAwOworCisJdGltZXJfdGljayhyZWdzKTsKKworCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGZvb3RicmlkZ2VfdGltZXJfaXJxID0geworCS5uYW1lCQk9ICJUaW1lcjEgdGltZXIgdGljayIsCisJLmhhbmRsZXIJPSB0aW1lcjFfaW50ZXJydXB0LAorCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCit9OworCisvKgorICogU2V0IHVwIHRpbWVyIGludGVycnVwdC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IGZvb3RicmlkZ2VfdGltZXJfaW5pdCh2b2lkKQoreworCWlzYV9ydGNfaW5pdCgpOworCisJdGltZXIxX2xhdGNoID0gKG1lbV9mY2xrXzIxMjg1ICsgOCAqIEhaKSAvICgxNiAqIEhaKTsKKworCSpDU1JfVElNRVIxX0NMUiAgPSAwOworCSpDU1JfVElNRVIxX0xPQUQgPSB0aW1lcjFfbGF0Y2g7CisJKkNTUl9USU1FUjFfQ05UTCA9IFRJTUVSX0NOVExfRU5BQkxFIHwgVElNRVJfQ05UTF9BVVRPUkVMT0FEIHwgVElNRVJfQ05UTF9ESVYxNjsKKworCXNldHVwX2lycShJUlFfVElNRVIxLCAmZm9vdGJyaWRnZV90aW1lcl9pcnEpOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIGZvb3RicmlkZ2VfdGltZXIgPSB7CisJLmluaXQJCT0gZm9vdGJyaWRnZV90aW1lcl9pbml0LAorCS5vZmZzZXQJCT0gdGltZXIxX2dldHRpbWVvZmZzZXQsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc5ODg0ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jCkBAIC0wLDAgKzEsMzg0IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9kZWMyMTI4NS5jOiBQQ0kgZnVuY3Rpb25zIGZvciBEQzIxMjg1CisgKgorICogIENvcHlyaWdodCAoQykgMTk5OC0yMDAxIFJ1c3NlbGwgS2luZworICogIENvcHlyaWdodCAoQykgMTk5OC0yMDAwIFBoaWwgQmx1bmRlbGwKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVjMjEyODUuaD4KKworI2RlZmluZSBNQVhfU0xPVFMJCTIxCisKKyNkZWZpbmUgUENJQ01EX0FCT1JUCQkoKFBDSV9TVEFUVVNfUkVDX01BU1RFUl9BQk9SVHwgXAorCQkJCSAgUENJX1NUQVRVU19SRUNfVEFSR0VUX0FCT1JUKTw8MTYpCisKKyNkZWZpbmUgUENJQ01EX0VSUk9SX0JJVFMJKChQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWSB8IFwKKwkJCQkgIFBDSV9TVEFUVVNfUkVDX01BU1RFUl9BQk9SVCB8IFwKKwkJCQkgIFBDSV9TVEFUVVNfUkVDX1RBUkdFVF9BQk9SVCB8IFwKKwkJCQkgIFBDSV9TVEFUVVNfUEFSSVRZKSA8PCAxNikKKworZXh0ZXJuIGludCBzZXR1cF9hcm1faXJxKGludCwgc3RydWN0IGlycWFjdGlvbiAqKTsKK2V4dGVybiB2b2lkIHBjaWJpb3NfcmVwb3J0X3N0YXR1cyh1X2ludCBzdGF0dXNfbWFzaywgaW50IHdhcm4pOworZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfaXNhX3BvcnRzKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworCitzdGF0aWMgdW5zaWduZWQgbG9uZworZGMyMTI4NV9iYXNlX2FkZHJlc3Moc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9IDA7CisKKwlpZiAoYnVzLT5udW1iZXIgPT0gMCkgeworCQlpZiAoUENJX1NMT1QoZGV2Zm4pID09IDApCisJCQkvKgorCQkJICogRm9yIGRldmZuIDAsIHBvaW50IGF0IHRoZSAyMTI4NQorCQkJICovCisJCQlhZGRyID0gQVJNQ1NSX0JBU0U7CisJCWVsc2UgeworCQkJZGV2Zm4gLT0gMSA8PCAzOworCisJCQlpZiAoZGV2Zm4gPCBQQ0lfREVWRk4oTUFYX1NMT1RTLCAwKSkKKwkJCQlhZGRyID0gUENJQ0ZHMF9CQVNFIHwgMHhjMDAwMDAgfCAoZGV2Zm4gPDwgOCk7CisJCX0KKwl9IGVsc2UKKwkJYWRkciA9IFBDSUNGRzFfQkFTRSB8IChidXMtPm51bWJlciA8PCAxNikgfCAoZGV2Zm4gPDwgOCk7CisKKwlyZXR1cm4gYWRkcjsKK30KKworc3RhdGljIGludAorZGMyMTI4NV9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwKKwkJICAgIGludCBzaXplLCB1MzIgKnZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9IGRjMjEyODVfYmFzZV9hZGRyZXNzKGJ1cywgZGV2Zm4pOworCXUzMiB2ID0gMHhmZmZmZmZmZjsKKworCWlmIChhZGRyKQorCQlzd2l0Y2ggKHNpemUpIHsKKwkJY2FzZSAxOgorCQkJYXNtKCJsZHIlP2IJJTAsIFslMSwgJTJdIgorCQkJCTogIj1yIiAodikgOiAiciIgKGFkZHIpLCAiciIgKHdoZXJlKSk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJYXNtKCJsZHIlP2gJJTAsIFslMSwgJTJdIgorCQkJCTogIj1yIiAodikgOiAiciIgKGFkZHIpLCAiciIgKHdoZXJlKSk7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJYXNtKCJsZHIlPwklMCwgWyUxLCAlMl0iCisJCQkJOiAiPXIiICh2KSA6ICJyIiAoYWRkciksICJyIiAod2hlcmUpKTsKKwkJCWJyZWFrOworCQl9CisKKwkqdmFsdWUgPSB2OworCisJdiA9ICpDU1JfUENJQ01EOworCWlmICh2ICYgUENJQ01EX0FCT1JUKSB7CisJCSpDU1JfUENJQ01EID0gdiAmICgweGZmZmZ8UENJQ01EX0FCT1JUKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0YXRpYyBpbnQKK2RjMjEyODVfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLAorCQkgICAgIGludCBzaXplLCB1MzIgdmFsdWUpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gZGMyMTI4NV9iYXNlX2FkZHJlc3MoYnVzLCBkZXZmbik7CisJdTMyIHY7CisKKwlpZiAoYWRkcikKKwkJc3dpdGNoIChzaXplKSB7CisJCWNhc2UgMToKKwkJCWFzbSgic3RyJT9iCSUwLCBbJTEsICUyXSIKKwkJCQk6IDogInIiICh2YWx1ZSksICJyIiAoYWRkciksICJyIiAod2hlcmUpKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlhc20oInN0ciU/aAklMCwgWyUxLCAlMl0iCisJCQkJOiA6ICJyIiAodmFsdWUpLCAiciIgKGFkZHIpLCAiciIgKHdoZXJlKSk7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJYXNtKCJzdHIlPwklMCwgWyUxLCAlMl0iCisJCQkJOiA6ICJyIiAodmFsdWUpLCAiciIgKGFkZHIpLCAiciIgKHdoZXJlKSk7CisJCQlicmVhazsKKwkJfQorCisJdiA9ICpDU1JfUENJQ01EOworCWlmICh2ICYgUENJQ01EX0FCT1JUKSB7CisJCSpDU1JfUENJQ01EID0gdiAmICgweGZmZmZ8UENJQ01EX0FCT1JUKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX29wcyBkYzIxMjg1X29wcyA9IHsKKwkucmVhZAk9IGRjMjEyODVfcmVhZF9jb25maWcsCisJLndyaXRlCT0gZGMyMTI4NV93cml0ZV9jb25maWcsCit9OworCitzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3Qgc2Vycl90aW1lcjsKK3N0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBwZXJyX3RpbWVyOworCitzdGF0aWMgdm9pZCBkYzIxMjg1X2VuYWJsZV9lcnJvcih1bnNpZ25lZCBsb25nIF9fZGF0YSkKK3sKKwlzd2l0Y2ggKF9fZGF0YSkgeworCWNhc2UgSVJRX1BDSV9TRVJSOgorCQlkZWxfdGltZXIoJnNlcnJfdGltZXIpOworCQlicmVhazsKKworCWNhc2UgSVJRX1BDSV9QRVJSOgorCQlkZWxfdGltZXIoJnBlcnJfdGltZXIpOworCQlicmVhazsKKwl9CisKKwllbmFibGVfaXJxKF9fZGF0YSk7Cit9CisKKy8qCisgKiBXYXJuIG9uIFBDSSBlcnJvcnMuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBkYzIxMjg1X2Fib3J0X2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBjbWQ7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKworCWNtZCA9ICpDU1JfUENJQ01EOworCXN0YXR1cyA9IGNtZCA+PiAxNjsKKwljbWQgPSBjbWQgJiAweGZmZmY7CisKKwlpZiAoc3RhdHVzICYgUENJX1NUQVRVU19SRUNfTUFTVEVSX0FCT1JUKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IG1hc3RlciBhYm9ydCwgcGM9MHglMDhseFxuIiwKKwkJCWluc3RydWN0aW9uX3BvaW50ZXIocmVncykpOworCQljbWQgfD0gUENJX1NUQVRVU19SRUNfTUFTVEVSX0FCT1JUIDw8IDE2OworCX0KKworCWlmIChzdGF0dXMgJiBQQ0lfU1RBVFVTX1JFQ19UQVJHRVRfQUJPUlQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogdGFyZ2V0IGFib3J0OiAiKTsKKwkJcGNpYmlvc19yZXBvcnRfc3RhdHVzKFBDSV9TVEFUVVNfUkVDX01BU1RFUl9BQk9SVCB8CisJCQkJICAgICAgUENJX1NUQVRVU19TSUdfVEFSR0VUX0FCT1JUIHwKKwkJCQkgICAgICBQQ0lfU1RBVFVTX1JFQ19UQVJHRVRfQUJPUlQsIDEpOworCQlwcmludGsoIlxuIik7CisKKwkJY21kIHw9IFBDSV9TVEFUVVNfUkVDX1RBUkdFVF9BQk9SVCA8PCAxNjsKKwl9CisKKwkqQ1NSX1BDSUNNRCA9IGNtZDsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGRjMjEyODVfc2Vycl9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIgPSBkZXZfaWQ7CisJdW5zaWduZWQgaW50IGNudGw7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBzeXN0ZW0gZXJyb3IgcmVjZWl2ZWQ6ICIpOworCXBjaWJpb3NfcmVwb3J0X3N0YXR1cyhQQ0lfU1RBVFVTX1NJR19TWVNURU1fRVJST1IsIDEpOworCXByaW50aygiXG4iKTsKKworCWNudGwgPSAqQ1NSX1NBMTEwX0NOVEwgJiAweGZmZmZkZjA3OworCSpDU1JfU0ExMTBfQ05UTCA9IGNudGwgfCBTQTExMF9DTlRMX1JYU0VSUjsKKworCS8qCisJICogYmFjayBvZmYgdGhpcyBpbnRlcnJ1cHQKKwkgKi8KKwlkaXNhYmxlX2lycShpcnEpOworCXRpbWVyLT5leHBpcmVzID0gamlmZmllcyArIEhaOworCWFkZF90aW1lcih0aW1lcik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkYzIxMjg1X2Rpc2NhcmRfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogZGlzY2FyZCB0aW1lciBleHBpcmVkXG4iKTsKKwkqQ1NSX1NBMTEwX0NOVEwgJj0gMHhmZmZmZGUwNzsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGRjMjEyODVfZHBhcml0eV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgY21kOworCisJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogZGF0YSBwYXJpdHkgZXJyb3IgZGV0ZWN0ZWQ6ICIpOworCXBjaWJpb3NfcmVwb3J0X3N0YXR1cyhQQ0lfU1RBVFVTX1BBUklUWSB8IFBDSV9TVEFUVVNfREVURUNURURfUEFSSVRZLCAxKTsKKwlwcmludGsoIlxuIik7CisKKwljbWQgPSAqQ1NSX1BDSUNNRCAmIDB4ZmZmZjsKKwkqQ1NSX1BDSUNNRCA9IGNtZCB8IDEgPDwgMjQ7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkYzIxMjg1X3Bhcml0eV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIgPSBkZXZfaWQ7CisJdW5zaWduZWQgaW50IGNtZDsKKworCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IHBhcml0eSBlcnJvciBkZXRlY3RlZDogIik7CisJcGNpYmlvc19yZXBvcnRfc3RhdHVzKFBDSV9TVEFUVVNfUEFSSVRZIHwgUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFksIDEpOworCXByaW50aygiXG4iKTsKKworCWNtZCA9ICpDU1JfUENJQ01EICYgMHhmZmZmOworCSpDU1JfUENJQ01EID0gY21kIHwgMSA8PCAzMTsKKworCS8qCisJICogYmFjayBvZmYgdGhpcyBpbnRlcnJ1cHQKKwkgKi8KKwlkaXNhYmxlX2lycShpcnEpOworCXRpbWVyLT5leHBpcmVzID0gamlmZmllcyArIEhaOworCWFkZF90aW1lcih0aW1lcik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK2ludCBfX2luaXQgZGMyMTI4NV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCWlmIChuciB8fCAhZm9vdGJyaWRnZV9jZm5fbW9kZSgpKQorCQlyZXR1cm4gMDsKKworCXJlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiAyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcykgeworCQlwcmludGsoIm91dCBvZiBtZW1vcnkgZm9yIHJvb3QgYnVzIHJlc291cmNlcyIpOworCQlyZXR1cm4gMDsKKwl9CisKKwltZW1zZXQocmVzLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIDIpOworCisJcmVzWzBdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisJcmVzWzBdLm5hbWUgID0gIkZvb3RicmlkZ2Ugbm9uLXByZWZldGNoIjsKKwlyZXNbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0g7CisJcmVzWzFdLm5hbWUgID0gIkZvb3RicmlkZ2UgcHJlZmV0Y2giOworCisJYWxsb2NhdGVfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmcmVzWzFdLCAweDIwMDAwMDAwLAorCQkJICAweGEwMDAwMDAwLCAweGZmZmZmZmZmLCAweDIwMDAwMDAwLCBOVUxMLCBOVUxMKTsKKwlhbGxvY2F0ZV9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZyZXNbMF0sIDB4NDAwMDAwMDAsCisJCQkgIDB4ODAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4NDAwMDAwMDAsIE5VTEwsIE5VTEwpOworCisJc3lzLT5yZXNvdXJjZVswXSA9ICZpb3BvcnRfcmVzb3VyY2U7CisJc3lzLT5yZXNvdXJjZVsxXSA9ICZyZXNbMF07CisJc3lzLT5yZXNvdXJjZVsyXSA9ICZyZXNbMV07CisJc3lzLT5tZW1fb2Zmc2V0ICA9IERDMjEyODVfUENJX01FTTsKKworCXJldHVybiAxOworfQorCitzdHJ1Y3QgcGNpX2J1cyAqIF9faW5pdCBkYzIxMjg1X3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQoreworCXJldHVybiBwY2lfc2Nhbl9idXMoMCwgJmRjMjEyODVfb3BzLCBzeXMpOworfQorCit2b2lkIF9faW5pdCBkYzIxMjg1X3ByZWluaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgbWVtX3NpemUsIG1lbV9tYXNrOworCWludCBjZm5fbW9kZTsKKworCW1lbV9zaXplID0gKHVuc2lnbmVkIGludCloaWdoX21lbW9yeSAtIFBBR0VfT0ZGU0VUOworCWZvciAobWVtX21hc2sgPSAweDAwMTAwMDAwOyBtZW1fbWFzayA8IDB4MTAwMDAwMDA7IG1lbV9tYXNrIDw8PSAxKQorCQlpZiAobWVtX21hc2sgPj0gbWVtX3NpemUpCisJCQlicmVhazsJCQorCisJLyoKKwkgKiBUaGVzZSByZWdpc3RlcnMgbmVlZCB0byBiZSBzZXQgdXAgd2hldGhlciB3ZSdyZSB0aGUKKwkgKiBjZW50cmFsIGZ1bmN0aW9uIG9yIG5vdC4KKwkgKi8KKwkqQ1NSX1NEUkFNQkFTRU1BU0sgICAgPSAobWVtX21hc2sgLSAxKSAmIDB4MGZmYzAwMDA7CisJKkNTUl9TRFJBTUJBU0VPRkZTRVQgID0gMDsKKwkqQ1NSX1JPTUJBU0VNQVNLICAgICAgPSAweDgwMDAwMDAwOworCSpDU1JfQ1NSQkFTRU1BU0sgICAgICA9IDA7CisJKkNTUl9DU1JCQVNFT0ZGU0VUICAgID0gMDsKKwkqQ1NSX1BDSUFERFJfRVhUTiAgICAgPSAwOworCisJY2ZuX21vZGUgPSBfX2Zvb3RicmlkZ2VfY2ZuX21vZGUoKTsKKworCXByaW50ayhLRVJOX0lORk8gIlBDSTogREMyMTI4NSBmb290YnJpZGdlLCByZXZpc2lvbiAlMDJsWCwgaW4gIgorCQkiJXMgbW9kZVxuIiwgKkNTUl9DTEFTU1JFViAmIDB4ZmYsIGNmbl9tb2RlID8KKwkJImNlbnRyYWwgZnVuY3Rpb24iIDogImFkZGluIik7CisKKwlpZiAoZm9vdGJyaWRnZV9jZm5fbW9kZSgpKSB7CisJCS8qCisJCSAqIENsZWFyIGFueSBleGlzdGluZyBlcnJvcnMgLSB3ZSBhcmVuJ3QKKwkJICogaW50ZXJlc3RlZCBpbiBoaXN0b3JpY2FsIGRhdGEuLi4KKwkJICovCisJCSpDU1JfU0ExMTBfQ05UTAk9ICgqQ1NSX1NBMTEwX0NOVEwgJiAweGZmZmZkZTA3KSB8CisJCQkJICBTQTExMF9DTlRMX1JYU0VSUjsKKwkJKkNTUl9QQ0lDTUQgPSAoKkNTUl9QQ0lDTUQgJiAweGZmZmYpIHwgUENJQ01EX0VSUk9SX0JJVFM7CisJfQorCisJaW5pdF90aW1lcigmc2Vycl90aW1lcik7CisJaW5pdF90aW1lcigmcGVycl90aW1lcik7CisKKwlzZXJyX3RpbWVyLmRhdGEgPSBJUlFfUENJX1NFUlI7CisJc2Vycl90aW1lci5mdW5jdGlvbiA9IGRjMjEyODVfZW5hYmxlX2Vycm9yOworCXBlcnJfdGltZXIuZGF0YSA9IElSUV9QQ0lfUEVSUjsKKwlwZXJyX3RpbWVyLmZ1bmN0aW9uID0gZGMyMTI4NV9lbmFibGVfZXJyb3I7CisKKwkvKgorCSAqIFdlIGRvbid0IGNhcmUgaWYgdGhlc2UgZmFpbC4KKwkgKi8KKwlyZXF1ZXN0X2lycShJUlFfUENJX1NFUlIsIGRjMjEyODVfc2Vycl9pcnEsIFNBX0lOVEVSUlVQVCwKKwkJICAgICJQQ0kgc3lzdGVtIGVycm9yIiwgJnNlcnJfdGltZXIpOworCXJlcXVlc3RfaXJxKElSUV9QQ0lfUEVSUiwgZGMyMTI4NV9wYXJpdHlfaXJxLCBTQV9JTlRFUlJVUFQsCisJCSAgICAiUENJIHBhcml0eSBlcnJvciIsICZwZXJyX3RpbWVyKTsKKwlyZXF1ZXN0X2lycShJUlFfUENJX0FCT1JULCBkYzIxMjg1X2Fib3J0X2lycSwgU0FfSU5URVJSVVBULAorCQkgICAgIlBDSSBhYm9ydCIsIE5VTEwpOworCXJlcXVlc3RfaXJxKElSUV9ESVNDQVJEX1RJTUVSLCBkYzIxMjg1X2Rpc2NhcmRfaXJxLCBTQV9JTlRFUlJVUFQsCisJCSAgICAiRGlzY2FyZCB0aW1lciIsIE5VTEwpOworCXJlcXVlc3RfaXJxKElSUV9QQ0lfRFBFUlIsIGRjMjEyODVfZHBhcml0eV9pcnEsIFNBX0lOVEVSUlVQVCwKKwkJICAgICJQQ0kgZGF0YSBwYXJpdHkiLCBOVUxMKTsKKworCWlmIChjZm5fbW9kZSkgeworCQlzdGF0aWMgc3RydWN0IHJlc291cmNlIGNzcmlvOworCisJCWNzcmlvLmZsYWdzICA9IElPUkVTT1VSQ0VfSU87CisJCWNzcmlvLm5hbWUgICA9ICJGb290YnJpZGdlIjsKKworCQlhbGxvY2F0ZV9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmY3NyaW8sIDEyOCwKKwkJCQkgIDB4ZmYwMCwgMHhmZmZmLCAxMjgsIE5VTEwsIE5VTEwpOworCisJCS8qCisJCSAqIE1hcCBvdXIgU0RSQU0gYXQgYSBrbm93biBhZGRyZXNzIGluIFBDSSBzcGFjZSwganVzdCBpbiBjYXNlCisJCSAqIHRoZSBmaXJtd2FyZSBoYWQgb3RoZXIgaWRlYXMuICBVc2luZyBhIG5vbnplcm8gYmFzZSBpcworCQkgKiBuZWNlc3NhcnksIHNpbmNlIHNvbWUgVkdBIGNhcmRzIGZvcmNlZnVsbHkgdXNlIFBDSSBhZGRyZXNzZXMKKwkJICogaW4gdGhlIHJhbmdlIDB4MDAwYTAwMDAgdG8gMHgwMDBjMDAwMC4gKGVnLCBTMyBjYXJkcykuCisJCSAqLworCQkqQ1NSX1BDSUNTUkJBU0UgICAgICAgPSAweGY0MDAwMDAwOworCQkqQ1NSX1BDSUNTUklPQkFTRSAgICAgPSBjc3Jpby5zdGFydDsKKwkJKkNTUl9QQ0lTRFJBTUJBU0UgICAgID0gX192aXJ0X3RvX2J1cyhQQUdFX09GRlNFVCk7CisJCSpDU1JfUENJUk9NQkFTRSAgICAgICA9IDA7CisJCSpDU1JfUENJQ01EID0gUENJX0NPTU1BTkRfTUVNT1JZIHwgUENJX0NPTU1BTkRfTUFTVEVSIHwKKwkJCSAgICAgIFBDSV9DT01NQU5EX0lOVkFMSURBVEUgfCBQQ0lDTURfRVJST1JfQklUUzsKKwl9IGVsc2UgaWYgKGZvb3RicmlkZ2VfY2ZuX21vZGUoKSAhPSAwKSB7CisJCS8qCisJCSAqIElmIHdlIGFyZSBub3QgY29tcGlsZWQgdG8gYWNjZXB0ICJhZGQtaW4iIG1vZGUsIHRoZW4KKwkJICogd2UgYXJlIHVzaW5nIGEgY29uc3RhbnQgdmlydF90b19idXMgdHJhbnNsYXRpb24gd2hpY2gKKwkJICogY2FuIG5vdCBob3BlIHRvIGNhdGVyIGZvciB0aGUgd2F5IHRoZSBob3N0IEJJT1MgIGhhcworCQkgKiBzZXQgdXAgdGhlIG1hY2hpbmUuCisJCSAqLworCQlwYW5pYygiUENJOiB0aGlzIGtlcm5lbCBpcyBjb21waWxlZCBmb3IgY2VudHJhbCAiCisJCQkiZnVuY3Rpb24gbW9kZSBvbmx5Iik7CisJfQorfQorCit2b2lkIF9faW5pdCBkYzIxMjg1X3Bvc3Rpbml0KHZvaWQpCit7CisJcmVnaXN0ZXJfaXNhX3BvcnRzKERDMjEyODVfUENJX01FTSwgREMyMTI4NV9QQ0lfSU8sIDApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YjEzOTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZG1hLmMKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvZG1hLWVic2EyODUuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTggUGhpbCBCbHVuZGVsbAorICoKKyAqIERNQSBmdW5jdGlvbnMgc3BlY2lmaWMgdG8gRUJTQS0yODUvQ0FUUyBhcmNoaXRlY3R1cmVzCisgKgorICogIENoYW5nZWxvZzoKKyAqICAgMDktTm92LTE5OTggUk1LCVNwbGl0IG91dCBJU0EgRE1BIGZ1bmN0aW9ucyB0byBkbWEtaXNhLmMKKyAqICAgMTctTWFyLTE5OTkgUk1LCUFsbG93IGFueSBFQlNBMjg1LWxpa2UgYXJjaGl0ZWN0dXJlIHRvIGhhdmUKKyAqCQkJSVNBIERNQSBjb250cm9sbGVycy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWMyMTI4NS5oPgorCisjaWYgMAorc3RhdGljIGludCBmYl9kbWFfcmVxdWVzdChkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIGZiX2RtYV9lbmFibGUoZG1hY2hfdCBjaGFubmVsLCBkbWFfdCAqZG1hKQoreworfQorCitzdGF0aWMgdm9pZCBmYl9kbWFfZGlzYWJsZShkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCit7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX29wcyBmYl9kbWFfb3BzID0geworCS50eXBlCQk9ICJmYiIsCisJLnJlcXVlc3QJPSBmYl9kbWFfcmVxdWVzdCwKKwkuZW5hYmxlCQk9IGZiX2RtYV9lbmFibGUsCisJLmRpc2FibGUJPSBmYl9kbWFfZGlzYWJsZSwKK307CisjZW5kaWYKKwordm9pZCBfX2luaXQgYXJjaF9kbWFfaW5pdChkbWFfdCAqZG1hKQoreworI2lmIDAKKwlkbWFbX0RDMjEyODVfRE1BKDApXS5kX29wcyA9ICZmYl9kbWFfb3BzOworCWRtYVtfREMyMTI4NV9ETUEoMSldLmRfb3BzID0gJmZiX2RtYV9vcHM7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSVNBX0RNQQorCWlmIChmb290YnJpZGdlX2Nmbl9tb2RlKCkpCisJCWlzYV9pbml0X2RtYShkbWEgKyBfSVNBX0RNQSgwKSk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LWxlZHMuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LWxlZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzdjMzYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUtbGVkcy5jCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LWxlZHMuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTgtMTk5OSBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICogRUJTQS0yODUgY29udHJvbCByb3V0aW5lcy4KKyAqCisgKiBUaGUgRUJTQS0yODUgdXNlcyB0aGUgbGVkcyBhcyBmb2xsb3dzOgorICogIC0gR3JlZW4gLSB0b2dnbGVzIHN0YXRlIGV2ZXJ5IDUwIHRpbWVyIGludGVycnVwdHMKKyAqICAtIEFtYmVyIC0gT24gaWYgc3lzdGVtIGlzIG5vdCBpZGxlCisgKiAgLSBSZWQgICAtIGN1cnJlbnRseSB1bnVzZWQKKyAqCisgKiBDaGFuZ2Vsb2c6CisgKiAgIDAyLTA1LTE5OTkJUk1LCVZhcmlvdXMgY2xlYW51cHMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2RlZmluZSBMRURfU1RBVEVfRU5BQkxFRAkxCisjZGVmaW5lIExFRF9TVEFURV9DTEFJTUVECTIKK3N0YXRpYyBjaGFyIGxlZF9zdGF0ZTsKK3N0YXRpYyBjaGFyIGh3X2xlZF9zdGF0ZTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhsZWRzX2xvY2spOworCitzdGF0aWMgdm9pZCBlYnNhMjg1X2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGVkc19sb2NrLCBmbGFncyk7CisKKwlzd2l0Y2ggKGV2dCkgeworCWNhc2UgbGVkX3N0YXJ0OgorCQlod19sZWRfc3RhdGUgPSBYQlVTX0xFRF9SRUQgfCBYQlVTX0xFRF9HUkVFTjsKKyNpZm5kZWYgQ09ORklHX0xFRFNfQ1BVCisJCWh3X2xlZF9zdGF0ZSB8PSBYQlVTX0xFRF9BTUJFUjsKKyNlbmRpZgorCQlsZWRfc3RhdGUgfD0gTEVEX1NUQVRFX0VOQUJMRUQ7CisJCWJyZWFrOworCisJY2FzZSBsZWRfc3RvcDoKKwkJbGVkX3N0YXRlICY9IH5MRURfU1RBVEVfRU5BQkxFRDsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9jbGFpbToKKwkJbGVkX3N0YXRlIHw9IExFRF9TVEFURV9DTEFJTUVEOworCQlod19sZWRfc3RhdGUgPSBYQlVTX0xFRF9SRUQgfCBYQlVTX0xFRF9HUkVFTiB8IFhCVVNfTEVEX0FNQkVSOworCQlicmVhazsKKworCWNhc2UgbGVkX3JlbGVhc2U6CisJCWxlZF9zdGF0ZSAmPSB+TEVEX1NUQVRFX0NMQUlNRUQ7CisJCWh3X2xlZF9zdGF0ZSA9IFhCVVNfTEVEX1JFRCB8IFhCVVNfTEVEX0dSRUVOIHwgWEJVU19MRURfQU1CRVI7CisJCWJyZWFrOworCisjaWZkZWYgQ09ORklHX0xFRFNfVElNRVIKKwljYXNlIGxlZF90aW1lcjoKKwkJaWYgKCEobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpKQorCQkJaHdfbGVkX3N0YXRlIF49IFhCVVNfTEVEX0dSRUVOOworCQlicmVhazsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0xFRFNfQ1BVCisJY2FzZSBsZWRfaWRsZV9zdGFydDoKKwkJaWYgKCEobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpKQorCQkJaHdfbGVkX3N0YXRlIHw9IFhCVVNfTEVEX0FNQkVSOworCQlicmVhazsKKworCWNhc2UgbGVkX2lkbGVfZW5kOgorCQlpZiAoIShsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkpCisJCQlod19sZWRfc3RhdGUgJj0gflhCVVNfTEVEX0FNQkVSOworCQlicmVhazsKKyNlbmRpZgorCisJY2FzZSBsZWRfaGFsdGVkOgorCQlpZiAoIShsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkpCisJCQlod19sZWRfc3RhdGUgJj0gflhCVVNfTEVEX1JFRDsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9ncmVlbl9vbjoKKwkJaWYgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKQorCQkJaHdfbGVkX3N0YXRlICY9IH5YQlVTX0xFRF9HUkVFTjsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9ncmVlbl9vZmY6CisJCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKKwkJCWh3X2xlZF9zdGF0ZSB8PSBYQlVTX0xFRF9HUkVFTjsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9hbWJlcl9vbjoKKwkJaWYgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKQorCQkJaHdfbGVkX3N0YXRlICY9IH5YQlVTX0xFRF9BTUJFUjsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9hbWJlcl9vZmY6CisJCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKKwkJCWh3X2xlZF9zdGF0ZSB8PSBYQlVTX0xFRF9BTUJFUjsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9yZWRfb246CisJCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKKwkJCWh3X2xlZF9zdGF0ZSAmPSB+WEJVU19MRURfUkVEOworCQlicmVhazsKKworCWNhc2UgbGVkX3JlZF9vZmY6CisJCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKKwkJCWh3X2xlZF9zdGF0ZSB8PSBYQlVTX0xFRF9SRUQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfRU5BQkxFRCkKKwkJKlhCVVNfTEVEUyA9IGh3X2xlZF9zdGF0ZTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxlZHNfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBsZWRzX2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19lYnNhMjg1KCkgfHwgbWFjaGluZV9pc19jbzI4NSgpKQorCQlsZWRzX2V2ZW50ID0gZWJzYTI4NV9sZWRzX2V2ZW50OworCisJbGVkc19ldmVudChsZWRfc3RhcnQpOworCisJcmV0dXJuIDA7Cit9CisKK19faW5pdGNhbGwobGVkc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUtcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIwYzBiYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LXBjaS5jCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS1wY2kuYworICoKKyAqIFBDSSBiaW9zLXR5cGUgaW5pdGlhbGlzYXRpb24gZm9yIFBDSSBtYWNoaW5lcworICoKKyAqIEJpdHMgdGFrZW4gZnJvbSB2YXJpb3VzIHBsYWNlcy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCitzdGF0aWMgaW50IGlycW1hcF9lYnNhMjg1W10gX19pbml0ZGF0YSA9IHsgSVJRX0lOMywgSVJRX0lOMSwgSVJRX0lOMCwgSVJRX1BDSSB9OworCitzdGF0aWMgaW50IF9faW5pdCBlYnNhMjg1X21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoreworCWlmIChkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0NPTlRBUSAmJgorCSAgICBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0NPTlRBUV84MkM2OTMpCisJCXN3aXRjaCAoUENJX0ZVTkMoZGV2LT5kZXZmbikpIHsKKwkJCWNhc2UgMToJcmV0dXJuIDE0OworCQkJY2FzZSAyOglyZXR1cm4gMTU7CisJCQljYXNlIDM6CXJldHVybiAxMjsKKwkJfQorCisJcmV0dXJuIGlycW1hcF9lYnNhMjg1WyhzbG90ICsgcGluKSAmIDNdOworfQorCitzdGF0aWMgc3RydWN0IGh3X3BjaSBlYnNhMjg1X3BjaSBfX2luaXRkYXRhID0geworCS5zd2l6emxlCQk9IHBjaV9zdGRfc3dpenpsZSwKKwkubWFwX2lycQkJPSBlYnNhMjg1X21hcF9pcnEsCisJLm5yX2NvbnRyb2xsZXJzCQk9IDEsCisJLnNldHVwCQkJPSBkYzIxMjg1X3NldHVwLAorCS5zY2FuCQkJPSBkYzIxMjg1X3NjYW5fYnVzLAorCS5wcmVpbml0CQk9IGRjMjEyODVfcHJlaW5pdCwKKwkucG9zdGluaXQJCT0gZGMyMTI4NV9wb3N0aW5pdCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGVic2EyODVfaW5pdF9wY2kodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19lYnNhMjg1KCkpCisJCXBjaV9jb21tb25faW5pdCgmZWJzYTI4NV9wY2kpOworCXJldHVybiAwOworfQorCitzdWJzeXNfaW5pdGNhbGwoZWJzYTI4NV9pbml0X3BjaSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDkzMWY1YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmMKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmMKKyAqCisgKiBFQlNBMjg1IG1hY2hpbmUgZml4dXAKKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWMyMTI4NS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKworTUFDSElORV9TVEFSVChFQlNBMjg1LCAiRUJTQTI4NSIpCisJTUFJTlRBSU5FUigiUnVzc2VsbCBLaW5nIikKKwlCT09UX01FTSgweDAwMDAwMDAwLCBEQzIxMjg1X0FSTUNTUl9CQVNFLCAweGZlMDAwMDAwKQorCUJPT1RfUEFSQU1TKDB4MDAwMDAxMDApCisJVklERU8oMHgwMDBhMDAwMCwgMHgwMDBiZmZmZikKKwlNQVBJTyhmb290YnJpZGdlX21hcF9pbykKKwlJTklUSVJRKGZvb3RicmlkZ2VfaW5pdF9pcnEpCisJLnRpbWVyCQk9ICZmb290YnJpZGdlX3RpbWVyLAorTUFDSElORV9FTkQKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS1pcnEuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIxMDE2MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtaXJxLmMKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lycS5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENoYW5nZWxvZzoKKyAqICAgMjItQXVnLTE5OTggUk1LCVJlc3RydWN0dXJlZCBJUlEgcm91dGluZXMKKyAqICAgMDMtU2VwLTE5OTggUEpCCU1lcmdlZCBDQVRTIHN1cHBvcnQKKyAqICAgMjAtSmFuLTE5OTggUk1LCVN0YXJ0ZWQgbWVyZ2Ugb2YgRUJTQTI4NiwgQ0FUUyBhbmQgTmV0V2luZGVyCisgKiAgIDI2LUphbi0xOTk5IFBKQglEb24ndCB1c2UgSUFDSyBvbiBDQVRTCisgKiAgIDE2LU1hci0xOTk5IFJNSwlBZGRlZCBhdXRvZGV0ZWN0IG9mIElTQSBQSUNzCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVjMjEyODUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworc3RhdGljIHZvaWQgaXNhX21hc2tfcGljX2xvX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCBtYXNrID0gMSA8PCAoaXJxICYgNyk7CisKKwlvdXRiKGluYihQSUNfTUFTS19MTykgfCBtYXNrLCBQSUNfTUFTS19MTyk7Cit9CisKK3N0YXRpYyB2b2lkIGlzYV9hY2tfcGljX2xvX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCBtYXNrID0gMSA8PCAoaXJxICYgNyk7CisKKwlvdXRiKGluYihQSUNfTUFTS19MTykgfCBtYXNrLCBQSUNfTUFTS19MTyk7CisJb3V0YigweDIwLCBQSUNfTE8pOworfQorCitzdGF0aWMgdm9pZCBpc2FfdW5tYXNrX3BpY19sb19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDEgPDwgKGlycSAmIDcpOworCisJb3V0YihpbmIoUElDX01BU0tfTE8pICYgfm1hc2ssIFBJQ19NQVNLX0xPKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIGlzYV9sb19jaGlwID0geworCS5hY2sJPSBpc2FfYWNrX3BpY19sb19pcnEsCisJLm1hc2sJPSBpc2FfbWFza19waWNfbG9faXJxLAorCS51bm1hc2sgPSBpc2FfdW5tYXNrX3BpY19sb19pcnEsCit9OworCitzdGF0aWMgdm9pZCBpc2FfbWFza19waWNfaGlfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IG1hc2sgPSAxIDw8IChpcnEgJiA3KTsKKworCW91dGIoaW5iKFBJQ19NQVNLX0hJKSB8IG1hc2ssIFBJQ19NQVNLX0hJKTsKK30KKworc3RhdGljIHZvaWQgaXNhX2Fja19waWNfaGlfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IG1hc2sgPSAxIDw8IChpcnEgJiA3KTsKKworCW91dGIoaW5iKFBJQ19NQVNLX0hJKSB8IG1hc2ssIFBJQ19NQVNLX0hJKTsKKwlvdXRiKDB4NjIsIFBJQ19MTyk7CisJb3V0YigweDIwLCBQSUNfSEkpOworfQorCitzdGF0aWMgdm9pZCBpc2FfdW5tYXNrX3BpY19oaV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDEgPDwgKGlycSAmIDcpOworCisJb3V0YihpbmIoUElDX01BU0tfSEkpICYgfm1hc2ssIFBJQ19NQVNLX0hJKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIGlzYV9oaV9jaGlwID0geworCS5hY2sJPSBpc2FfYWNrX3BpY19oaV9pcnEsCisJLm1hc2sJPSBpc2FfbWFza19waWNfaGlfaXJxLAorCS51bm1hc2sgPSBpc2FfdW5tYXNrX3BpY19oaV9pcnEsCit9OworCitzdGF0aWMgdm9pZAoraXNhX2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFkZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgaXNhX2lycSA9ICoodW5zaWduZWQgY2hhciAqKVBDSUlBQ0tfQkFTRTsKKworCWlmIChpc2FfaXJxIDwgX0lTQV9JUlEoMCkgfHwgaXNhX2lycSA+PSBfSVNBX0lSUSgxNikpIHsKKwkJZG9fYmFkX0lSUShpc2FfaXJxLCBkZXNjLCByZWdzKTsKKwkJcmV0dXJuOworCX0KKworCWRlc2MgPSBpcnFfZGVzYyArIGlzYV9pcnE7CisJZGVzYy0+aGFuZGxlKGlzYV9pcnEsIGRlc2MsIHJlZ3MpOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnFfY2FzY2FkZSA9IHsgLmhhbmRsZXIgPSBub19hY3Rpb24sIC5uYW1lID0gImNhc2NhZGUiLCB9Oworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwaWMxX3Jlc291cmNlID0geyAicGljMSIsIDB4MjAsIDB4M2YgfTsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGljMl9yZXNvdXJjZSA9IHsgInBpYzIiLCAweGEwLCAweGJmIH07CisKK3ZvaWQgX19pbml0IGlzYV9pbml0X2lycSh1bnNpZ25lZCBpbnQgaG9zdF9pcnEpCit7CisJdW5zaWduZWQgaW50IGlycTsKKworCS8qCisJICogU2V0dXAsIGFuZCB0aGVuIHByb2JlIGZvciBhbiBJU0EgUElDCisJICogSWYgdGhlIFBJQyBpcyBub3QgdGhlcmUsIHRoZW4gd2UKKwkgKiBpZ25vcmUgdGhlIFBJQy4KKwkgKi8KKwlvdXRiKDB4MTEsIFBJQ19MTyk7CisJb3V0YihfSVNBX0lSUSgwKSwgUElDX01BU0tfTE8pOwkvKiBJUlEgbnVtYmVyCQkqLworCW91dGIoMHgwNCwgUElDX01BU0tfTE8pOwkvKiBTbGF2ZSBvbiBDaDIJCSovCisJb3V0YigweDAxLCBQSUNfTUFTS19MTyk7CS8qIHg4NgkJCSovCisJb3V0YigweGY1LCBQSUNfTUFTS19MTyk7CS8qIHBhdHRlcm46IDExMTEwMTAxCSovCisKKwlvdXRiKDB4MTEsIFBJQ19ISSk7CisJb3V0YihfSVNBX0lSUSg4KSwgUElDX01BU0tfSEkpOwkvKiBJUlEgbnVtYmVyCQkqLworCW91dGIoMHgwMiwgUElDX01BU0tfSEkpOwkvKiBTbGF2ZSBvbiBDaDEJCSovCisJb3V0YigweDAxLCBQSUNfTUFTS19ISSk7CS8qIHg4NgkJCSovCisJb3V0YigweGZhLCBQSUNfTUFTS19ISSk7CS8qIHBhdHRlcm46IDExMTExMDEwCSovCisKKwlvdXRiKDB4MGIsIFBJQ19MTyk7CisJb3V0YigweDBiLCBQSUNfSEkpOworCisJaWYgKGluYihQSUNfTUFTS19MTykgPT0gMHhmNSAmJiBpbmIoUElDX01BU0tfSEkpID09IDB4ZmEpIHsKKwkJb3V0YigweGZmLCBQSUNfTUFTS19MTyk7LyogbWFzayBhbGwgSVJRcwkqLworCQlvdXRiKDB4ZmYsIFBJQ19NQVNLX0hJKTsvKiBtYXNrIGFsbCBJUlFzCSovCisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiSVJROiBJU0EgUElDIG5vdCBmb3VuZFxuIik7CisJCWhvc3RfaXJxID0gKHVuc2lnbmVkIGludCktMTsKKwl9CisKKwlpZiAoaG9zdF9pcnEgIT0gKHVuc2lnbmVkIGludCktMSkgeworCQlmb3IgKGlycSA9IF9JU0FfSVJRKDApOyBpcnEgPCBfSVNBX0lSUSg4KTsgaXJxKyspIHsKKwkJCXNldF9pcnFfY2hpcChpcnEsICZpc2FfbG9fY2hpcCk7CisJCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBkb19sZXZlbF9JUlEpOworCQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKKwkJfQorCisJCWZvciAoaXJxID0gX0lTQV9JUlEoOCk7IGlycSA8IF9JU0FfSVJRKDE2KTsgaXJxKyspIHsKKwkJCXNldF9pcnFfY2hpcChpcnEsICZpc2FfaGlfY2hpcCk7CisJCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBkb19sZXZlbF9JUlEpOworCQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKKwkJfQorCisJCXJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnBpYzFfcmVzb3VyY2UpOworCQlyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZwaWMyX3Jlc291cmNlKTsKKwkJc2V0dXBfaXJxKElSUV9JU0FfQ0FTQ0FERSwgJmlycV9jYXNjYWRlKTsKKworCQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihob3N0X2lycSwgaXNhX2lycV9oYW5kbGVyKTsKKworCQkvKgorCQkgKiBPbiB0aGUgTmV0V2luZGVyLCBkb24ndCBhdXRvbWF0aWNhbGx5CisJCSAqIGVuYWJsZSBJU0EgSVJRMTEgd2hlbiBpdCBpcyByZXF1ZXN0ZWQuCisJCSAqIFRoZXJlIGFwcGVhcnMgdG8gYmUgYSBtaXNzaW5nIHB1bGwtdXAKKwkJICogcmVzaXN0b3Igb24gdGhpcyBsaW5lLgorCQkgKi8KKwkJaWYgKG1hY2hpbmVfaXNfbmV0d2luZGVyKCkpCisJCQlzZXRfaXJxX2ZsYWdzKF9JU0FfSVJRKDExKSwgSVJRRl9WQUxJRCB8CisJCQkJICAgICAgSVJRRl9QUk9CRSB8IElSUUZfTk9BVVRPRU4pOworCX0KK30KKworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLXRpbWVyLmMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLXRpbWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRmZWZhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtdGltZXIuYwpAQCAtMCwwICsxLDk0IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtdGltZXIuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTggUnVzc2VsbCBLaW5nLgorICogIENvcHlyaWdodCAoQykgMTk5OCBQaGlsIEJsdW5kZWxsCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKworLyoKKyAqIElTQSB0aW1lciB0aWNrIHN1cHBvcnQKKyAqLworI2RlZmluZSBtU0VDXzEwX2Zyb21fMTQgKCgxNDMxODE4MCArIDEwMCkgLyAyMDApCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGlzYV9nZXR0aW1lb2Zmc2V0KHZvaWQpCit7CisJaW50IGNvdW50OworCisJc3RhdGljIGludCBjb3VudF9wID0gKG1TRUNfMTBfZnJvbV8xNC82KTsgICAgLyogZm9yIHRoZSBmaXJzdCBjYWxsIGFmdGVyIGJvb3QgKi8KKwlzdGF0aWMgdW5zaWduZWQgbG9uZyBqaWZmaWVzX3AgPSAwOworCisJLyoKKwkgKiBjYWNoZSB2b2xhdGlsZSBqaWZmaWVzIHRlbXBvcmFyaWx5OyB3ZSBoYXZlIElSUXMgdHVybmVkIG9mZi4gCisJICovCisJdW5zaWduZWQgbG9uZyBqaWZmaWVzX3Q7CisKKwkvKiB0aW1lciBjb3VudCBtYXkgdW5kZXJmbG93IHJpZ2h0IGhlcmUgKi8KKwlvdXRiX3AoMHgwMCwgMHg0Myk7CS8qIGxhdGNoIHRoZSBjb3VudCBBU0FQICovCisKKwljb3VudCA9IGluYl9wKDB4NDApOwkvKiByZWFkIHRoZSBsYXRjaGVkIGNvdW50ICovCisKKwkvKgorCSAqIFdlIGRvIHRoaXMgZ3VhcmFudGVlZCBkb3VibGUgbWVtb3J5IGFjY2VzcyBpbnN0ZWFkIG9mIGEgX3AgCisJICogcG9zdGZpeCBpbiB0aGUgcHJldmlvdXMgcG9ydCBhY2Nlc3MuIFdoZWVlLCBoYWNrYWR5IGhhY2sKKwkgKi8KKyAJamlmZmllc190ID0gamlmZmllczsKKworCWNvdW50IHw9IGluYl9wKDB4NDApIDw8IDg7CisKKwkvKiBEZXRlY3QgdGltZXIgdW5kZXJmbG93cy4gIElmIHdlIGhhdmVuJ3QgaGFkIGEgdGltZXIgdGljayBzaW5jZSAKKwkgICB0aGUgbGFzdCB0aW1lIHdlIHdlcmUgY2FsbGVkLCBhbmQgdGltZSBpcyBhcHBhcmVudGx5IGdvaW5nCisJICAgYmFja3dhcmRzLCB0aGUgY291bnRlciBtdXN0IGhhdmUgd3JhcHBlZCBkdXJpbmcgdGhpcyByb3V0aW5lLiAqLworCWlmICgoamlmZmllc190ID09IGppZmZpZXNfcCkgJiYgKGNvdW50ID4gY291bnRfcCkpCisJCWNvdW50IC09IChtU0VDXzEwX2Zyb21fMTQvNik7CisJZWxzZQorCQlqaWZmaWVzX3AgPSBqaWZmaWVzX3Q7CisKKwljb3VudF9wID0gY291bnQ7CisKKwljb3VudCA9ICgoKG1TRUNfMTBfZnJvbV8xNC82KS0xKSAtIGNvdW50KSAqICh0aWNrX25zZWMgLyAxMDAwKTsKKwljb3VudCA9IChjb3VudCArIChtU0VDXzEwX2Zyb21fMTQvNikvMikgLyAobVNFQ18xMF9mcm9tXzE0LzYpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK2lzYV90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKKwl0aW1lcl90aWNrKHJlZ3MpOworCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpc2FfdGltZXJfaXJxID0geworCS5uYW1lCQk9ICJJU0EgdGltZXIgdGljayIsCisJLmhhbmRsZXIJPSBpc2FfdGltZXJfaW50ZXJydXB0LAorCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgaXNhX3RpbWVyX2luaXQodm9pZCkKK3sKKwlpc2FfcnRjX2luaXQoKTsKKworCS8qIGVuYWJsZSBQSVQgdGltZXIgKi8KKwkvKiBzZXQgZm9yIHBlcmlvZGljICg0KSBhbmQgTFNCL01TQiB3cml0ZSAoMHgzMCkgKi8KKwlvdXRiKDB4MzQsIDB4NDMpOworCW91dGIoKG1TRUNfMTBfZnJvbV8xNC82KSAmIDB4RkYsIDB4NDApOworCW91dGIoKG1TRUNfMTBfZnJvbV8xNC82KSA+PiA4LCAweDQwKTsKKworCXNldHVwX2lycShJUlFfSVNBX1RJTUVSLCAmaXNhX3RpbWVyX2lycSk7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgaXNhX3RpbWVyID0geworCS5pbml0CQk9IGlzYV90aW1lcl9pbml0LAorCS5vZmZzZXQJCT0gaXNhX2dldHRpbWVvZmZzZXQsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhM2ExZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLmMKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IFJ1c3NlbGwgS2luZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5pb2Jhc2UJCT0gMHgzZjgsCisJCS5pcnEJCT0gSVJRX0lTQV9VQVJULAorCQkudWFydGNsawk9IDE4NDMyMDAsCisJCS5yZWdzaGlmdAk9IDAsCisJCS5pb3R5cGUJCT0gVVBJT19QT1JULAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNULAorCX0sCisJeworCQkuaW9iYXNlCQk9IDB4MmY4LAorCQkuaXJxCQk9IElSUV9JU0FfVUFSVDIsCisJCS51YXJ0Y2xrCT0gMTg0MzIwMCwKKwkJLnJlZ3NoaWZ0CT0gMCwKKwkJLmlvdHlwZQkJPSBVUElPX1BPUlQsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QsCisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZXJpYWxfZGV2aWNlID0geworCS5uYW1lCQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQkJPSAwLAorCS5kZXYJCQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSBzZXJpYWxfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZm9vdGJyaWRnZV9pc2FfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNlcmlhbF9kZXZpY2UpOworfQorCithcmNoX2luaXRjYWxsKGZvb3RicmlkZ2VfaXNhX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMWRmZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMKQEAgLTAsMCArMSw2NjAgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMKKyAqCisgKiBOZXR3aW5kZXIgbWFjaGluZSBmaXh1cAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSBSdXNzZWxsIEtpbmcsIFBoaWwgQmx1bmRlbGwKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYzIxMjg1Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKKyNkZWZpbmUgSVJEQV9JT19CQVNFCQkweDE4MAorI2RlZmluZSBHUDFfSU9fQkFTRQkJMHgzMzgKKyNkZWZpbmUgR1AyX0lPX0JBU0UJCTB4MzNhCisKKworI2lmZGVmIENPTkZJR19MRURTCisjZGVmaW5lIERFRkFVTFRfTEVEUwkwCisjZWxzZQorI2RlZmluZSBERUZBVUxUX0xFRFMJR1BJT19HUkVFTl9MRUQKKyNlbmRpZgorCisvKgorICogV2luYm9uZCBXQjgzOTc3RiBhY2Nlc3NpYmlsaXR5IHN0dWZmCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB3Yjk3N19vcGVuKHZvaWQpCit7CisJb3V0YigweDg3LCAweDM3MCk7CisJb3V0YigweDg3LCAweDM3MCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3Yjk3N19jbG9zZSh2b2lkKQoreworCW91dGIoMHhhYSwgMHgzNzApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2I5Nzdfd2IoaW50IHJlZywgaW50IHZhbCkKK3sKKwlvdXRiKHJlZywgMHgzNzApOworCW91dGIodmFsLCAweDM3MSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3Yjk3N193dyhpbnQgcmVnLCBpbnQgdmFsKQoreworCW91dGIocmVnLCAweDM3MCk7CisJb3V0Yih2YWwgPj4gOCwgMHgzNzEpOworCW91dGIocmVnICsgMSwgMHgzNzApOworCW91dGIodmFsICYgMjU1LCAweDM3MSk7Cit9CisKKyNkZWZpbmUgd2I5NzdfZGV2aWNlX3NlbGVjdChkZXYpCXdiOTc3X3diKDB4MDcsIGRldikKKyNkZWZpbmUgd2I5NzdfZGV2aWNlX2Rpc2FibGUoKQkJd2I5Nzdfd2IoMHgzMCwgMHgwMCkKKyNkZWZpbmUgd2I5NzdfZGV2aWNlX2VuYWJsZSgpCQl3Yjk3N193YigweDMwLCAweDAxKQorCisvKgorICogVGhpcyBpcyBhIGxvY2sgZm9yIGFjY2Vzc2luZyBwb3J0cyBHUDFfSU9fQkFTRSBhbmQgR1AyX0lPX0JBU0UKKyAqLworREVGSU5FX1NQSU5MT0NLKGdwaW9fbG9jayk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY3VycmVudF9ncGlvX29wOworc3RhdGljIHVuc2lnbmVkIGludCBjdXJyZW50X2dwaW9faW87CitzdGF0aWMgdW5zaWduZWQgaW50IGN1cnJlbnRfY3BsZDsKKwordm9pZCBncGlvX21vZGlmeV9vcChpbnQgbWFzaywgaW50IHNldCkKK3sKKwl1bnNpZ25lZCBpbnQgbmV3X2dwaW8sIGNoYW5nZWQ7CisKKwluZXdfZ3BpbyA9IChjdXJyZW50X2dwaW9fb3AgJiB+bWFzaykgfCBzZXQ7CisJY2hhbmdlZCA9IG5ld19ncGlvIF4gY3VycmVudF9ncGlvX29wOworCWN1cnJlbnRfZ3Bpb19vcCA9IG5ld19ncGlvOworCisJaWYgKGNoYW5nZWQgJiAweGZmKQorCQlvdXRiKG5ld19ncGlvLCBHUDFfSU9fQkFTRSk7CisJaWYgKGNoYW5nZWQgJiAweGZmMDApCisJCW91dGIobmV3X2dwaW8gPj4gOCwgR1AyX0lPX0JBU0UpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19ncGlvX21vZGlmeV9pbyhpbnQgbWFzaywgaW50IGluKQoreworCXVuc2lnbmVkIGludCBuZXdfZ3BpbywgY2hhbmdlZDsKKwlpbnQgcG9ydDsKKworCW5ld19ncGlvID0gKGN1cnJlbnRfZ3Bpb19pbyAmIH5tYXNrKSB8IGluOworCWNoYW5nZWQgPSBuZXdfZ3BpbyBeIGN1cnJlbnRfZ3Bpb19pbzsKKwljdXJyZW50X2dwaW9faW8gPSBuZXdfZ3BpbzsKKworCWNoYW5nZWQgPj49IDE7CisJbmV3X2dwaW8gPj49IDE7CisKKwl3Yjk3N19kZXZpY2Vfc2VsZWN0KDcpOworCisJZm9yIChwb3J0ID0gMHhlMTsgY2hhbmdlZCAmJiBwb3J0IDwgMHhlODsgY2hhbmdlZCA+Pj0gMSkgeworCQl3Yjk3N193Yihwb3J0LCBuZXdfZ3BpbyAmIDEpOworCisJCXBvcnQgKz0gMTsKKwkJbmV3X2dwaW8gPj49IDE7CisJfQorCisJd2I5NzdfZGV2aWNlX3NlbGVjdCg4KTsKKworCWZvciAocG9ydCA9IDB4ZTg7IGNoYW5nZWQgJiYgcG9ydCA8IDB4ZWM7IGNoYW5nZWQgPj49IDEpIHsKKwkJd2I5Nzdfd2IocG9ydCwgbmV3X2dwaW8gJiAxKTsKKworCQlwb3J0ICs9IDE7CisJCW5ld19ncGlvID4+PSAxOworCX0KK30KKwordm9pZCBncGlvX21vZGlmeV9pbyhpbnQgbWFzaywgaW50IGluKQoreworCS8qIE9wZW4gdXAgdGhlIFN1cGVySU8gY2hpcCAqLworCXdiOTc3X29wZW4oKTsKKworCV9fZ3Bpb19tb2RpZnlfaW8obWFzaywgaW4pOworCisJLyogQ2xvc2UgdXAgdGhlIEVGRVIgZ2F0ZSAqLworCXdiOTc3X2Nsb3NlKCk7Cit9CisKK2ludCBncGlvX3JlYWQodm9pZCkKK3sKKwlyZXR1cm4gaW5iKEdQMV9JT19CQVNFKSB8IGluYihHUDJfSU9fQkFTRSkgPDwgODsKK30KKworLyoKKyAqIEluaXRpYWxpc2UgdGhlIFdpbmJvbmQgVzgzOTc3RiBnbG9iYWwgcmVnaXN0ZXJzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB3Yjk3N19pbml0X2dsb2JhbCh2b2lkKQoreworCS8qCisJICogRW5hYmxlIFIvVyBjb25maWcgcmVnaXN0ZXJzCisJICovCisJd2I5Nzdfd2IoMHgyNiwgMHg0MCk7CisKKwkvKgorCSAqIFBvd2VyIGRvd24gRkRDIChub3QgdXNlZCkKKwkgKi8KKwl3Yjk3N193YigweDIyLCAweGZlKTsKKworCS8qCisJICogR1AxMiwgR1AxMSwgQ0lSUlgsIElSUlhILCBHUDEwCisJICovCisJd2I5Nzdfd2IoMHgyYSwgMHhjMSk7CisKKwkvKgorCSAqIEdQMjMsIEdQMjIsIEdQMjEsIEdQMjAsIEdQMTMKKwkgKi8KKwl3Yjk3N193YigweDJiLCAweDZiKTsKKworCS8qCisJICogR1AxNywgR1AxNiwgR1AxNSwgR1AxNAorCSAqLworCXdiOTc3X3diKDB4MmMsIDB4NTUpOworfQorCisvKgorICogSW5pdGlhbGlzZSB0aGUgV2luYm9uZCBXODM5NzdGIHByaW50ZXIgcG9ydAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgd2I5NzdfaW5pdF9wcmludGVyKHZvaWQpCit7CisJd2I5NzdfZGV2aWNlX3NlbGVjdCgxKTsKKworCS8qCisJICogbW9kZSAxID09IEVQUAorCSAqLworCXdiOTc3X3diKDB4ZjAsIDB4MDEpOworfQorCisvKgorICogSW5pdGlhbGlzZSB0aGUgV2luYm9uZCBXODM5NzdGIGtleWJvYXJkIGNvbnRyb2xsZXIKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHdiOTc3X2luaXRfa2V5Ym9hcmQodm9pZCkKK3sKKwl3Yjk3N19kZXZpY2Vfc2VsZWN0KDUpOworCisJLyoKKwkgKiBLZXlib2FyZCBjb250cm9sbGVyIGFkZHJlc3MKKwkgKi8KKwl3Yjk3N193dygweDYwLCAweDAwNjApOworCXdiOTc3X3d3KDB4NjIsIDB4MDA2NCk7CisKKwkvKgorCSAqIEtleWJvYXJkIElSUSAxLCBhY3RpdmUgaGlnaCwgZWRnZSB0cmlnZ2VyCisJICovCisJd2I5Nzdfd2IoMHg3MCwgMSk7CisJd2I5Nzdfd2IoMHg3MSwgMHgwMik7CisKKwkvKgorCSAqIE1vdXNlIElSUSA1LCBhY3RpdmUgaGlnaCwgZWRnZSB0cmlnZ2VyCisJICovCisJd2I5Nzdfd2IoMHg3MiwgNSk7CisJd2I5Nzdfd2IoMHg3MywgMHgwMik7CisKKwkvKgorCSAqIEtCQyA4TUh6CisJICovCisJd2I5Nzdfd2IoMHhmMCwgMHg0MCk7CisKKwkvKgorCSAqIEVuYWJsZSBkZXZpY2UKKwkgKi8KKwl3Yjk3N19kZXZpY2VfZW5hYmxlKCk7Cit9CisKKy8qCisgKiBJbml0aWFsaXNlIHRoZSBXaW5ib25kIFc4Mzk3N0YgSW5mcmEtUmVkIGRldmljZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgd2I5NzdfaW5pdF9pcmRhKHZvaWQpCit7CisJd2I5NzdfZGV2aWNlX3NlbGVjdCg2KTsKKworCS8qCisJICogSVIgYmFzZSBhZGRyZXNzCisJICovCisJd2I5Nzdfd3coMHg2MCwgSVJEQV9JT19CQVNFKTsKKworCS8qCisJICogSVJEQSBJUlEgNiwgYWN0aXZlIGhpZ2gsIGVkZ2UgdHJpZ2dlcgorCSAqLworCXdiOTc3X3diKDB4NzAsIDYpOworCXdiOTc3X3diKDB4NzEsIDB4MDIpOworCisJLyoKKwkgKiBSWCBETUEgLSBJU0EgRE1BIDAKKwkgKi8KKwl3Yjk3N193YigweDc0LCAweDAwKTsKKworCS8qCisJICogVFggRE1BIC0gRGlzYWJsZSBUeCBETUEKKwkgKi8KKwl3Yjk3N193YigweDc1LCAweDA0KTsKKworCS8qCisJICogQXBwZW5kIENSQywgRW5hYmxlIGJhbmsgc2VsZWN0aW9uCisJICovCisJd2I5Nzdfd2IoMHhmMCwgMHgwMyk7CisKKwkvKgorCSAqIEVuYWJsZSBkZXZpY2UKKwkgKi8KKwl3Yjk3N19kZXZpY2VfZW5hYmxlKCk7Cit9CisKKy8qCisgKiBJbml0aWFsaXNlIFdpbmJvbmQgVzgzOTc3RiBnZW5lcmFsIHB1cnBvc2UgSU8KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHdiOTc3X2luaXRfZ3Bpbyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIFNldCB1cCBpbml0aWFsIEkvTyBkZWZpbml0aW9ucworCSAqLworCWN1cnJlbnRfZ3Bpb19pbyA9IC0xOworCV9fZ3Bpb19tb2RpZnlfaW8oLTEsIEdQSU9fRE9ORSB8IEdQSU9fV0RUSU1FUik7CisKKwl3Yjk3N19kZXZpY2Vfc2VsZWN0KDcpOworCisJLyoKKwkgKiBHcm91cDEgYmFzZSBhZGRyZXNzCisJICovCisJd2I5Nzdfd3coMHg2MCwgR1AxX0lPX0JBU0UpOworCXdiOTc3X3d3KDB4NjIsIDApOworCXdiOTc3X3d3KDB4NjQsIDApOworCisJLyoKKwkgKiBHUDEwIChPcmFnZSBidXR0b24pIElSUSAxMCwgYWN0aXZlIGhpZ2gsIGVkZ2UgdHJpZ2dlcgorCSAqLworCXdiOTc3X3diKDB4NzAsIDEwKTsKKwl3Yjk3N193YigweDcxLCAweDAyKTsKKworCS8qCisJICogR1AxMDogRGVib3VuY2UgZmlsdGVyIGVuYWJsZWQsIElSUSwgaW5wdXQKKwkgKi8KKwl3Yjk3N193YigweGUwLCAweDE5KTsKKworCS8qCisJICogRW5hYmxlIEdyb3VwMQorCSAqLworCXdiOTc3X2RldmljZV9lbmFibGUoKTsKKworCXdiOTc3X2RldmljZV9zZWxlY3QoOCk7CisKKwkvKgorCSAqIEdyb3VwMiBiYXNlIGFkZHJlc3MKKwkgKi8KKwl3Yjk3N193dygweDYwLCBHUDJfSU9fQkFTRSk7CisKKwkvKgorCSAqIENsZWFyIHdhdGNoZG9nIHRpbWVyIHJlZ3MKKwkgKiAgLSB0aW1lciBkaXNhYmxlCisJICovCisJd2I5Nzdfd2IoMHhmMiwgMHgwMCk7CisKKwkvKgorCSAqICAtIGRpc2FibGUgTEVELCBubyBtb3VzZSBub3Iga2V5Ym9hcmQgSVJRCisJICovCisJd2I5Nzdfd2IoMHhmMywgMHgwMCk7CisKKwkvKgorCSAqICAtIHRpbWVyIGNvdW50aW5nLCBkaXNhYmxlIHBvd2VyIExFRCwgZGlzYWJsZSB0aW1lb3VvdAorCSAqLworCXdiOTc3X3diKDB4ZjQsIDB4MDApOworCisJLyoKKwkgKiBFbmFibGUgZ3JvdXAyCisJICovCisJd2I5NzdfZGV2aWNlX2VuYWJsZSgpOworCisJLyoKKwkgKiBTZXQgR3JvdXAxL0dyb3VwMiBvdXRwdXRzCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCWdwaW9fbW9kaWZ5X29wKC0xLCBHUElPX1JFRF9MRUQgfCBHUElPX0ZBTik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBJbml0aWFsaXNlIHRoZSBXaW5ib25kIFc4Mzk3N0YgY2hpcC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHdiOTc3X2luaXQodm9pZCkKK3sKKwlyZXF1ZXN0X3JlZ2lvbigweDM3MCwgMiwgIlc4Mzk3N0FGIGNvbmZpZ3VyYXRpb24iKTsKKworCS8qCisJICogT3BlbiB1cCB0aGUgU3VwZXJJTyBjaGlwCisJICovCisJd2I5Nzdfb3BlbigpOworCisJLyoKKwkgKiBJbml0aWFsaXNlIHRoZSBnbG9iYWwgcmVnaXN0ZXJzCisJICovCisJd2I5NzdfaW5pdF9nbG9iYWwoKTsKKworCS8qCisJICogSW5pdGlhbGlzZSB0aGUgdmFyaW91cyBkZXZpY2VzIGluCisJICogdGhlIG11bHRpLUlPIGNoaXAuCisJICovCisJd2I5NzdfaW5pdF9wcmludGVyKCk7CisJd2I5NzdfaW5pdF9rZXlib2FyZCgpOworCXdiOTc3X2luaXRfaXJkYSgpOworCXdiOTc3X2luaXRfZ3BpbygpOworCisJLyoKKwkgKiBDbG9zZSB1cCB0aGUgRUZFUiBnYXRlCisJICovCisJd2I5NzdfY2xvc2UoKTsKK30KKwordm9pZCBjcGxkX21vZGlmeShpbnQgbWFzaywgaW50IHNldCkKK3sKKwlpbnQgbXNrOworCisJY3VycmVudF9jcGxkID0gKGN1cnJlbnRfY3BsZCAmIH5tYXNrKSB8IHNldDsKKworCWdwaW9fbW9kaWZ5X2lvKEdQSU9fREFUQSB8IEdQSU9fSU9DTEsgfCBHUElPX0lPTE9BRCwgMCk7CisJZ3Bpb19tb2RpZnlfb3AoR1BJT19JT0xPQUQsIDApOworCisJZm9yIChtc2sgPSA4OyBtc2s7IG1zayA+Pj0gMSkgeworCQlpbnQgYml0ID0gY3VycmVudF9jcGxkICYgbXNrOworCisJCWdwaW9fbW9kaWZ5X29wKEdQSU9fREFUQSB8IEdQSU9fSU9DTEssIGJpdCA/IEdQSU9fREFUQSA6IDApOworCQlncGlvX21vZGlmeV9vcChHUElPX0lPQ0xLLCBHUElPX0lPQ0xLKTsKKwl9CisKKwlncGlvX21vZGlmeV9vcChHUElPX0lPQ0xLfEdQSU9fREFUQSwgMCk7CisJZ3Bpb19tb2RpZnlfb3AoR1BJT19JT0xPQUR8R1BJT19EU0NMSywgR1BJT19JT0xPQUR8R1BJT19EU0NMSyk7CisJZ3Bpb19tb2RpZnlfb3AoR1BJT19JT0xPQUQsIDApOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgY3BsZF9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwljcGxkX21vZGlmeSgtMSwgQ1BMRF9VTk1VVEUgfCBDUExEXzcxMTFfRElTQUJMRSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHJ3YV91bmxvY2tbXSBfX2luaXRkYXRhID0KK3sgMHgwMCwgMHgwMCwgMHg2YSwgMHhiNSwgMHhkYSwgMHhlZCwgMHhmNiwgMHhmYiwgMHg3ZCwgMHhiZSwgMHhkZiwgMHg2ZiwgMHgzNywgMHgxYiwKKyAgMHgwZCwgMHg4NiwgMHhjMywgMHg2MSwgMHhiMCwgMHg1OCwgMHgyYywgMHgxNiwgMHg4YiwgMHg0NSwgMHhhMiwgMHhkMSwgMHhlOCwgMHg3NCwKKyAgMHgzYSwgMHg5ZCwgMHhjZSwgMHhlNywgMHg3MywgMHgzOSB9OworCisjaWZuZGVmIERFQlVHCisjZGVmaW5lIGRwcmludGsoeC4uLikKKyNlbHNlCisjZGVmaW5lIGRwcmludGsoeC4uLikgcHJpbnRrKHgpCisjZW5kaWYKKworI2RlZmluZSBXUklURV9SV0Eocix2KSBkbyB7IG91dGIoKHIpLCAweDI3OSk7IHVkZWxheSgxMCk7IG91dGIoKHYpLCAweGE3OSk7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCByd2EwMTBfdW5sb2NrKHZvaWQpCit7CisJaW50IGk7CisKKwlXUklURV9SV0EoMiwgMik7CisJbWRlbGF5KDEwKTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocndhX3VubG9jayk7IGkrKykgeworCQlvdXRiKHJ3YV91bmxvY2tbaV0sIDB4Mjc5KTsKKwkJdWRlbGF5KDEwKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByd2EwMTBfcmVhZF9pZGVudCh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgc2lbOV07CisJaW50IGksIGo7CisKKwlXUklURV9SV0EoMywgMCk7CisJV1JJVEVfUldBKDAsIDEyOCk7CisKKwlvdXRiKDEsIDB4Mjc5KTsKKworCW1kZWxheSgxKTsKKworCWRwcmludGsoIklkZW50aWZpZXI6ICIpOworCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspIHsKKwkJc2lbaV0gPSAwOworCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7CisJCQlpbnQgYml0OworCQkJdWRlbGF5KDI1MCk7CisJCQlpbmIoMHgyMDMpOworCQkJdWRlbGF5KDI1MCk7CisJCQliaXQgPSBpbmIoMHgyMDMpOworCQkJZHByaW50aygiJTAyWCAiLCBiaXQpOworCQkJYml0ID0gKGJpdCA9PSAweGFhKSA/IDEgOiAwOworCQkJc2lbaV0gfD0gYml0IDw8IGo7CisJCX0KKwkJZHByaW50aygiKCUwMlgpICIsIHNpW2ldKTsKKwl9CisJZHByaW50aygiXG4iKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ3YTAxMF9nbG9iYWxfaW5pdCh2b2lkKQoreworCVdSSVRFX1JXQSg2LCAyKTsJLy8gQXNzaWduIGEgY2FyZCBubyA9IDIKKworCWRwcmludGsoIkNhcmQgbm8gPSAlZFxuIiwgaW5iKDB4MjAzKSk7CisKKwkvKiBkaXNhYmxlIHRoZSBtb2RlbSBzZWN0aW9uIG9mIHRoZSBjaGlwICovCisJV1JJVEVfUldBKDcsIDMpOworCVdSSVRFX1JXQSgweDMwLCAwKTsKKworCS8qIGRpc2FibGUgdGhlIGNkcm9tIHNlY3Rpb24gb2YgdGhlIGNoaXAgKi8KKwlXUklURV9SV0EoNywgNCk7CisJV1JJVEVfUldBKDB4MzAsIDApOworCisJLyogZGlzYWJsZSB0aGUgTVBVLTQwMSBzZWN0aW9uIG9mIHRoZSBjaGlwICovCisJV1JJVEVfUldBKDcsIDIpOworCVdSSVRFX1JXQSgweDMwLCAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ3YTAxMF9nYW1lX3BvcnRfaW5pdCh2b2lkKQoreworCWludCBpOworCisJV1JJVEVfUldBKDcsIDUpOworCisJZHByaW50aygiU2xpZGVyIGJhc2U6ICIpOworCVdSSVRFX1JXQSgweDYxLCAxKTsKKwlpID0gaW5iKDB4MjAzKTsKKworCVdSSVRFX1JXQSgweDYwLCAyKTsKKwlkcHJpbnRrKCIlMDJYJTAyWCAoMjAxKVxuIiwgaW5iKDB4MjAzKSwgaSk7CisKKwlXUklURV9SV0EoMHgzMCwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByd2EwMTBfd2F2ZWFydGlzdF9pbml0KGludCBiYXNlLCBpbnQgaXJxLCBpbnQgZG1hKQoreworCWludCBpOworCisJV1JJVEVfUldBKDcsIDApOworCisJZHByaW50aygiV2F2ZUFydGlzdCBiYXNlOiAiKTsKKwlXUklURV9SV0EoMHg2MSwgYmFzZSAmIDI1NSk7CisJaSA9IGluYigweDIwMyk7CisKKwlXUklURV9SV0EoMHg2MCwgYmFzZSA+PiA4KTsKKwlkcHJpbnRrKCIlMDJYJTAyWCAoJVgpLCIsIGluYigweDIwMyksIGksIGJhc2UpOworCisJV1JJVEVfUldBKDB4NzAsIGlycSk7CisJZHByaW50aygiIGlycTogJWQgKCVkKSwiLCBpbmIoMHgyMDMpLCBpcnEpOworCisJV1JJVEVfUldBKDB4NzQsIGRtYSk7CisJZHByaW50aygiIGRtYTogJWQgKCVkKVxuIiwgaW5iKDB4MjAzKSwgZG1hKTsKKworCVdSSVRFX1JXQSgweDMwLCAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ3YTAxMF9zb3VuZGJsYXN0ZXJfaW5pdChpbnQgc2JfYmFzZSwgaW50IGFsX2Jhc2UsIGludCBpcnEsIGludCBkbWEpCit7CisJaW50IGk7CisKKwlXUklURV9SV0EoNywgMSk7CisKKwlkcHJpbnRrKCJTb3VuZEJsYXN0ZXIgYmFzZTogIik7CisJV1JJVEVfUldBKDB4NjEsIHNiX2Jhc2UgJiAyNTUpOworCWkgPSBpbmIoMHgyMDMpOworCisJV1JJVEVfUldBKDB4NjAsIHNiX2Jhc2UgPj4gOCk7CisJZHByaW50aygiJTAyWCUwMlggKCVYKSwiLCBpbmIoMHgyMDMpLCBpLCBzYl9iYXNlKTsKKworCWRwcmludGsoIiBpcnE6ICIpOworCVdSSVRFX1JXQSgweDcwLCBpcnEpOworCWRwcmludGsoIiVkICglZCksIiwgaW5iKDB4MjAzKSwgaXJxKTsKKworCWRwcmludGsoIiA4LWJpdCBETUE6ICIpOworCVdSSVRFX1JXQSgweDc0LCBkbWEpOworCWRwcmludGsoIiVkICglZClcbiIsIGluYigweDIwMyksIGRtYSk7CisKKwlkcHJpbnRrKCJBZExpYiBiYXNlOiAiKTsKKwlXUklURV9SV0EoMHg2MywgYWxfYmFzZSAmIDI1NSk7CisJaSA9IGluYigweDIwMyk7CisKKwlXUklURV9SV0EoMHg2MiwgYWxfYmFzZSA+PiA4KTsKKwlkcHJpbnRrKCIlMDJYJTAyWCAoJVgpXG4iLCBpbmIoMHgyMDMpLCBpLCBhbF9iYXNlKTsKKworCVdSSVRFX1JXQSgweDMwLCAxKTsKK30KKworc3RhdGljIHZvaWQgcndhMDEwX3NvdW5kYmxhc3Rlcl9yZXNldCh2b2lkKQoreworCWludCBpOworCisJb3V0YigxLCAweDIyNik7CisJdWRlbGF5KDMpOworCW91dGIoMCwgMHgyMjYpOworCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlpZiAoaW5iKDB4MjJlKSAmIDB4ODApCisJCQlicmVhazsKKwkJbWRlbGF5KDEpOworCX0KKwlpZiAoaSA9PSA1KQorCQlwcmludGsoIlNvdW5kQmxhc3RlcjogRFNQIHJlc2V0IGZhaWxlZFxuIik7CisKKwlkcHJpbnRrKCJTb3VuZEJsYXN0ZXIgRFNQIHJlc2V0OiAlMDJYIChBQSlcbiIsIGluYigweDIyYSkpOworCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlpZiAoKGluYigweDIyYykgJiAweDgwKSA9PSAwKQorCQkJYnJlYWs7CisJCW1kZWxheSgxKTsKKwl9CisKKwlpZiAoaSA9PSA1KQorCQlwcmludGsoIlNvdW5kQmxhc3RlcjogRFNQIG5vdCByZWFkeVxuIik7CisJZWxzZSB7CisJCW91dGIoMHhlMSwgMHgyMmMpOworCisJCWRwcmludGsoIlNvdW5kQmxhc3RlciBEU1AgaWQ6ICIpOworCQlpID0gaW5iKDB4MjJhKTsKKwkJdWRlbGF5KDEpOworCQlpIHw9IGluYigweDIyYSkgPDwgODsKKwkJZHByaW50aygiJTA0WFxuIiwgaSk7CisKKwkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQkJaWYgKChpbmIoMHgyMmMpICYgMHg4MCkgPT0gMCkKKwkJCQlicmVhazsKKwkJCW1kZWxheSgxKTsKKwkJfQorCisJCWlmIChpID09IDUpCisJCQlwcmludGsoIlNvdW5kQmxhc3RlcjogY291bGQgbm90IHR1cm4gc3BlYWtlciBvZmZcbiIpOworCisJCW91dGIoMHhkMywgMHgyMmMpOworCX0KKworCS8qIHR1cm4gb24gT1BMMyAqLworCW91dGIoNSwgMHgzOGEpOworCW91dGIoMSwgMHgzOGIpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcndhMDEwX2luaXQodm9pZCkKK3sKKwlyd2EwMTBfdW5sb2NrKCk7CisJcndhMDEwX3JlYWRfaWRlbnQoKTsKKwlyd2EwMTBfZ2xvYmFsX2luaXQoKTsKKwlyd2EwMTBfZ2FtZV9wb3J0X2luaXQoKTsKKwlyd2EwMTBfd2F2ZWFydGlzdF9pbml0KDB4MjUwLCAzLCA3KTsKKwlyd2EwMTBfc291bmRibGFzdGVyX2luaXQoMHgyMjAsIDB4Mzg4LCAzLCAxKTsKKwlyd2EwMTBfc291bmRibGFzdGVyX3Jlc2V0KCk7Cit9CisKK0VYUE9SVF9TWU1CT0woZ3Bpb19sb2NrKTsKK0VYUE9SVF9TWU1CT0woZ3Bpb19tb2RpZnlfb3ApOworRVhQT1JUX1NZTUJPTChncGlvX21vZGlmeV9pbyk7CitFWFBPUlRfU1lNQk9MKGNwbGRfbW9kaWZ5KTsKKworLyoKKyAqIEluaXRpYWxpc2UgYW55IG90aGVyIGhhcmR3YXJlIGFmdGVyIHdlJ3ZlIGdvdCB0aGUgUENJIGJ1cworICogaW5pdGlhbGlzZWQuICBXZSBtYXkgbmVlZCB0aGUgUENJIGJ1cyB0byB0YWxrIHRvIHRoaXMgb3RoZXIKKyAqIGhhcmR3YXJlLgorICovCitzdGF0aWMgaW50IF9faW5pdCBud19od19pbml0KHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfbmV0d2luZGVyKCkpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQl3Yjk3N19pbml0KCk7CisJCWNwbGRfaW5pdCgpOworCQlyd2EwMTBfaW5pdCgpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwkJZ3Bpb19tb2RpZnlfb3AoR1BJT19SRURfTEVEfEdQSU9fR1JFRU5fTEVELCBERUZBVUxUX0xFRFMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK19faW5pdGNhbGwobndfaHdfaW5pdCk7CisKKy8qCisgKiBPbGRlciBOZVRUcm9tcyBlaXRoZXIgZG8gbm90IHByb3ZpZGUgYSBwYXJhbWV0ZXJzCisgKiBwYWdlLCBvciB0aGV5IGRvbid0IHN1cHBseSBjb3JyZWN0IGluZm9ybWF0aW9uIGluCisgKiB0aGUgcGFyYW1ldGVyIHBhZ2UuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdAorZml4dXBfbmV0d2luZGVyKHN0cnVjdCBtYWNoaW5lX2Rlc2MgKmRlc2MsIHN0cnVjdCB0YWcgKnRhZ3MsCisJCWNoYXIgKipjbWRsaW5lLCBzdHJ1Y3QgbWVtaW5mbyAqbWkpCit7CisjaWZkZWYgQ09ORklHX0lTQVBOUAorCWV4dGVybiBpbnQgaXNhcG5wX2Rpc2FibGU7CisKKwkvKgorCSAqIFdlIG11c3Qgbm90IHVzZSB0aGUga2VybmVscyBJU0FQblAgY29kZQorCSAqIG9uIHRoZSBOZXRXaW5kZXIgLSBpdCB3aWxsIHJlc2V0IHRoZSBzZXR0aW5ncworCSAqIGZvciB0aGUgV2F2ZUFydGlzdCBjaGlwIGFuZCByZW5kZXIgaXQgaW5vcGVyYWJsZS4KKwkgKi8KKwlpc2FwbnBfZGlzYWJsZSA9IDE7CisjZW5kaWYKK30KKworTUFDSElORV9TVEFSVChORVRXSU5ERVIsICJSZWJlbC1OZXRXaW5kZXIiKQorCU1BSU5UQUlORVIoIlJ1c3NlbGwgS2luZy9SZWJlbC5jb20iKQorCUJPT1RfTUVNKDB4MDAwMDAwMDAsIERDMjEyODVfQVJNQ1NSX0JBU0UsIDB4ZmUwMDAwMDApCisJQk9PVF9QQVJBTVMoMHgwMDAwMDEwMCkKKwlWSURFTygweDAwMGEwMDAwLCAweDAwMGJmZmZmKQorCURJU0FCTEVfUEFSUE9SVCgwKQorCURJU0FCTEVfUEFSUE9SVCgyKQorCUZJWFVQKGZpeHVwX25ldHdpbmRlcikKKwlNQVBJTyhmb290YnJpZGdlX21hcF9pbykKKwlJTklUSVJRKGZvb3RicmlkZ2VfaW5pdF9pcnEpCisJLnRpbWVyCQk9ICZpc2FfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1sZWRzLmMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWxlZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDUxZmMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1sZWRzLmMKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1sZWRzLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4LTE5OTkgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOZXRXaW5kZXIgTEVEIGNvbnRyb2wgcm91dGluZXMuCisgKgorICogVGhlIE5ldHdpbmRlciB1c2VzIHRoZSBsZWRzIGFzIGZvbGxvd3M6CisgKiAgLSBHcmVlbiAtIHRvZ2dsZXMgc3RhdGUgZXZlcnkgNTAgdGltZXIgaW50ZXJydXB0cworICogIC0gUmVkICAgLSBPbiBpZiB0aGUgc3lzdGVtIGlzIG5vdCBpZGxlCisgKgorICogQ2hhbmdlbG9nOgorICogICAwMi0wNS0xOTk5CVJNSwlWYXJpb3VzIGNsZWFudXBzCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9sZWRzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNkZWZpbmUgTEVEX1NUQVRFX0VOQUJMRUQJMQorI2RlZmluZSBMRURfU1RBVEVfQ0xBSU1FRAkyCitzdGF0aWMgY2hhciBsZWRfc3RhdGU7CitzdGF0aWMgY2hhciBod19sZWRfc3RhdGU7CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobGVkc19sb2NrKTsKK2V4dGVybiBzcGlubG9ja190IGdwaW9fbG9jazsKKworc3RhdGljIHZvaWQgbmV0d2luZGVyX2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGVkc19sb2NrLCBmbGFncyk7CisKKwlzd2l0Y2ggKGV2dCkgeworCWNhc2UgbGVkX3N0YXJ0OgorCQlsZWRfc3RhdGUgfD0gTEVEX1NUQVRFX0VOQUJMRUQ7CisJCWh3X2xlZF9zdGF0ZSA9IEdQSU9fR1JFRU5fTEVEOworCQlicmVhazsKKworCWNhc2UgbGVkX3N0b3A6CisJCWxlZF9zdGF0ZSAmPSB+TEVEX1NUQVRFX0VOQUJMRUQ7CisJCWJyZWFrOworCisJY2FzZSBsZWRfY2xhaW06CisJCWxlZF9zdGF0ZSB8PSBMRURfU1RBVEVfQ0xBSU1FRDsKKwkJaHdfbGVkX3N0YXRlID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9yZWxlYXNlOgorCQlsZWRfc3RhdGUgJj0gfkxFRF9TVEFURV9DTEFJTUVEOworCQlod19sZWRfc3RhdGUgPSAwOworCQlicmVhazsKKworI2lmZGVmIENPTkZJR19MRURTX1RJTUVSCisJY2FzZSBsZWRfdGltZXI6CisJCWlmICghKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKSkKKwkJCWh3X2xlZF9zdGF0ZSBePSBHUElPX0dSRUVOX0xFRDsKKwkJYnJlYWs7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19MRURTX0NQVQorCWNhc2UgbGVkX2lkbGVfc3RhcnQ6CisJCWlmICghKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKSkKKwkJCWh3X2xlZF9zdGF0ZSAmPSB+R1BJT19SRURfTEVEOworCQlicmVhazsKKworCWNhc2UgbGVkX2lkbGVfZW5kOgorCQlpZiAoIShsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkpCisJCQlod19sZWRfc3RhdGUgfD0gR1BJT19SRURfTEVEOworCQlicmVhazsKKyNlbmRpZgorCisJY2FzZSBsZWRfaGFsdGVkOgorCQlpZiAoIShsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkpCisJCQlod19sZWRfc3RhdGUgfD0gR1BJT19SRURfTEVEOworCQlicmVhazsKKworCWNhc2UgbGVkX2dyZWVuX29uOgorCQlpZiAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpCisJCQlod19sZWRfc3RhdGUgfD0gR1BJT19HUkVFTl9MRUQ7CisJCWJyZWFrOworCisJY2FzZSBsZWRfZ3JlZW5fb2ZmOgorCQlpZiAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpCisJCQlod19sZWRfc3RhdGUgJj0gfkdQSU9fR1JFRU5fTEVEOworCQlicmVhazsKKworCWNhc2UgbGVkX2FtYmVyX29uOgorCQlpZiAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpCisJCQlod19sZWRfc3RhdGUgfD0gR1BJT19HUkVFTl9MRUQgfCBHUElPX1JFRF9MRUQ7CisJCWJyZWFrOworCisJY2FzZSBsZWRfYW1iZXJfb2ZmOgorCQlpZiAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpCisJCQlod19sZWRfc3RhdGUgJj0gfihHUElPX0dSRUVOX0xFRCB8IEdQSU9fUkVEX0xFRCk7CisJCWJyZWFrOworCisJY2FzZSBsZWRfcmVkX29uOgorCQlpZiAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpCisJCQlod19sZWRfc3RhdGUgfD0gR1BJT19SRURfTEVEOworCQlicmVhazsKKworCWNhc2UgbGVkX3JlZF9vZmY6CisJCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKKwkJCWh3X2xlZF9zdGF0ZSAmPSB+R1BJT19SRURfTEVEOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxlZHNfbG9jaywgZmxhZ3MpOworCisJaWYgIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfRU5BQkxFRCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJCWdwaW9fbW9kaWZ5X29wKEdQSU9fUkVEX0xFRCB8IEdQSU9fR1JFRU5fTEVELCBod19sZWRfc3RhdGUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGxlZHNfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX25ldHdpbmRlcigpKQorCQlsZWRzX2V2ZW50ID0gbmV0d2luZGVyX2xlZHNfZXZlbnQ7CisKKwlsZWRzX2V2ZW50KGxlZF9zdGFydCk7CisKKwlyZXR1cm4gMDsKK30KKworX19pbml0Y2FsbChsZWRzX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1wY2kuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI2M2Q2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItcGNpLmMKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItcGNpLmMKKyAqCisgKiBQQ0kgYmlvcy10eXBlIGluaXRpYWxpc2F0aW9uIGZvciBQQ0kgbWFjaGluZXMKKyAqCisgKiBCaXRzIHRha2VuIGZyb20gdmFyaW91cyBwbGFjZXMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworLyoKKyAqIFdlIG5vdyB1c2UgdGhlIHNsb3QgSUQgaW5zdGVhZCBvZiB0aGUgZGV2aWNlIGlkZW50aWZpZXJzIHRvIHNlbGVjdAorICogd2hpY2ggaW50ZXJydXB0IGlzIHJvdXRlZCB3aGVyZS4KKyAqLworc3RhdGljIGludCBfX2luaXQgbmV0d2luZGVyX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoreworCXN3aXRjaCAoc2xvdCkgeworCWNhc2UgMDogIC8qIGhvc3QgYnJpZGdlICovCisJCXJldHVybiAwOworCisJY2FzZSA5OiAgLyogQ3liZXJQcm8gKi8KKwkJcmV0dXJuIElSUV9ORVRXSU5ERVJfVkdBOworCisJY2FzZSAxMDogLyogREMyMTE0MyAqLworCQlyZXR1cm4gSVJRX05FVFdJTkRFUl9FVEhFUjEwMDsKKworCWNhc2UgMTI6IC8qIFdpbmJvbmQgNTUzICovCisJCXJldHVybiBJUlFfSVNBX0hBUkRESVNLMTsKKworCWNhc2UgMTM6IC8qIFdpbmJvbmQgODlDOTQwRiAqLworCQlyZXR1cm4gSVJRX05FVFdJTkRFUl9FVEhFUjEwOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IHVua25vd24gZGV2aWNlIGluIHNsb3QgJXNcbiIsCisJCQlwY2lfbmFtZShkZXYpKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGh3X3BjaSBuZXR3aW5kZXJfcGNpIF9faW5pdGRhdGEgPSB7CisJLnN3aXp6bGUJCT0gcGNpX3N0ZF9zd2l6emxlLAorCS5tYXBfaXJxCQk9IG5ldHdpbmRlcl9tYXBfaXJxLAorCS5ucl9jb250cm9sbGVycwkJPSAxLAorCS5zZXR1cAkJCT0gZGMyMTI4NV9zZXR1cCwKKwkuc2NhbgkJCT0gZGMyMTI4NV9zY2FuX2J1cywKKwkucHJlaW5pdAkJPSBkYzIxMjg1X3ByZWluaXQsCisJLnBvc3Rpbml0CQk9IGRjMjEyODVfcG9zdGluaXQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBuZXR3aW5kZXJfcGNpX2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19uZXR3aW5kZXIoKSkKKwkJcGNpX2NvbW1vbl9pbml0KCZuZXR3aW5kZXJfcGNpKTsKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKG5ldHdpbmRlcl9wY2lfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvcGVyc29uYWwtcGNpLmMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvcGVyc29uYWwtcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVmY2E5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9wZXJzb25hbC1wY2kuYwpAQCAtMCwwICsxLDU2IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL3BlcnNvbmFsLXBjaS5jCisgKgorICogUENJIGJpb3MtdHlwZSBpbml0aWFsaXNhdGlvbiBmb3IgUENJIG1hY2hpbmVzCisgKgorICogQml0cyB0YWtlbiBmcm9tIHZhcmlvdXMgcGxhY2VzLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKK3N0YXRpYyBpbnQgaXJxbWFwX3BlcnNvbmFsX3NlcnZlcltdIF9faW5pdGRhdGEgPSB7CisJSVJRX0lOMCwgSVJRX0lOMSwgSVJRX0lOMiwgSVJRX0lOMywgMCwgMCwgMCwKKwlJUlFfRE9PUkJFTExIT1NULCBJUlFfRE1BMSwgSVJRX0RNQTIsIElSUV9QQ0kKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBlcnNvbmFsX3NlcnZlcl9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwl1bnNpZ25lZCBjaGFyIGxpbmU7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgJmxpbmUpOworCisJaWYgKGxpbmUgPiAweDQwICYmIGxpbmUgPD0gMHg1ZikgeworCQkvKiBsaW5lIGNvcnJlc3BvbmRzIHRvIHRoZSBiaXQgY29udHJvbGxpbmcgdGhpcyBpbnRlcnJ1cHQKKwkJICogaW4gdGhlIGZvb3RicmlkZ2UuICBJZ25vcmUgdGhlIGZpcnN0IDggaW50ZXJydXB0IGJpdHMsCisJCSAqIGxvb2sgdXAgdGhlIHJlc3QgaW4gdGhlIG1hcC4gIElOMCBpcyBiaXQgbnVtYmVyIDgKKwkJICovCisJCXJldHVybiBpcnFtYXBfcGVyc29uYWxfc2VydmVyWyhsaW5lICYgMHgxZikgLSA4XTsKKwl9IGVsc2UgaWYgKGxpbmUgPT0gMCkgeworCQkvKiBubyBpbnRlcnJ1cHQgKi8KKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiBpcnFtYXBfcGVyc29uYWxfc2VydmVyWyhsaW5lIC0gMSkgJiAzXTsKK30KKworc3RhdGljIHN0cnVjdCBod19wY2kgcGVyc29uYWxfc2VydmVyX3BjaSBfX2luaXRkYXRhID0geworCS5tYXBfaXJxCQk9IHBlcnNvbmFsX3NlcnZlcl9tYXBfaXJxLAorCS5ucl9jb250cm9sbGVycwkJPSAxLAorCS5zZXR1cAkJCT0gZGMyMTI4NV9zZXR1cCwKKwkuc2NhbgkJCT0gZGMyMTI4NV9zY2FuX2J1cywKKwkucHJlaW5pdAkJPSBkYzIxMjg1X3ByZWluaXQsCisJLnBvc3Rpbml0CQk9IGRjMjEyODVfcG9zdGluaXQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwZXJzb25hbF9wY2lfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX3BlcnNvbmFsX3NlcnZlcigpKQorCQlwY2lfY29tbW9uX2luaXQoJnBlcnNvbmFsX3NlcnZlcl9wY2kpOworCXJldHVybiAwOworfQorCitzdWJzeXNfaW5pdGNhbGwocGVyc29uYWxfcGNpX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL3BlcnNvbmFsLmMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvcGVyc29uYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTUwODZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL3BlcnNvbmFsLmMKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9wZXJzb25hbC5jCisgKgorICogUGVyc29uYWwgc2VydmVyIChTa2lmZikgbWFjaGluZSBmaXh1cAorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYzIxMjg1Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorCitNQUNISU5FX1NUQVJUKFBFUlNPTkFMX1NFUlZFUiwgIkNvbXBhcS1QZXJzb25hbFNlcnZlciIpCisJTUFJTlRBSU5FUigiSmFtZXkgSGlja3MgLyBHZW9yZ2UgRnJhbmNlIikKKwlCT09UX01FTSgweDAwMDAwMDAwLCBEQzIxMjg1X0FSTUNTUl9CQVNFLCAweGZlMDAwMDAwKQorCUJPT1RfUEFSQU1TKDB4MDAwMDAxMDApCisJTUFQSU8oZm9vdGJyaWRnZV9tYXBfaW8pCisJSU5JVElSUShmb290YnJpZGdlX2luaXRfaXJxKQorCS50aW1lcgkJPSAmZm9vdGJyaWRnZV90aW1lciwKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS90aW1lLmMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNjRhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvdGltZS5jCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvdGltZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OCBSdXNzZWxsIEtpbmcuCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4IFBoaWwgQmx1bmRlbGwKKyAqCisgKiBDQVRTIGhhcyBhIHJlYWwtdGltZSBjbG9jaywgdGhvdWdoIHRoZSBldmFsdWF0aW9uIGJvYXJkIGRvZXNuJ3QuCisgKgorICogQ2hhbmdlbG9nOgorICogIDIxLU1hci0xOTk4CVJNSwlDcmVhdGVkCisgKiAgMjctQXVnLTE5OTgJUEpCCUNBVFMgc3VwcG9ydAorICogIDI4LURlYy0xOTk4CUFQSAlNYWRlIGxlZHMgb3B0aW9uYWwKKyAqICAyMC1KYW4tMTk5OQlSTUsJU3RhcnRlZCBtZXJnZSBvZiBFQlNBMjg1LCBDQVRTIGFuZCBOZXRXaW5kZXIKKyAqICAxNi1NYXItMTk5OQlSTUsJTW9yZSBzdXBwb3J0IGZvciBFQlNBMjg1LWxpa2UgbWFjaGluZXMgd2l0aCBSVENzIGluCisgKi8KKworI2RlZmluZSBSVENfUE9SVCh4KQkJKHJ0Y19iYXNlKyh4KSkKKyNkZWZpbmUgUlRDX0FMV0FZU19CQ0QJCTAKKworI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9iY2QuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorCitzdGF0aWMgaW50IHJ0Y19iYXNlOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgZ2V0X2lzYV9jbW9zX3RpbWUodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjOworCWludCBpOworCisJLy8gY2hlY2sgdG8gc2VlIGlmIHRoZSBSVEMgbWFrZXMgc2Vuc2UuLi4uLgorCWlmICgoQ01PU19SRUFEKFJUQ19WQUxJRCkgJiBSVENfVlJUKSA9PSAwKQorCQlyZXR1cm4gbWt0aW1lKDE5NzAsIDEsIDEsIDAsIDAsIDApOworCisJLyogVGhlIExpbnV4IGludGVycHJldGF0aW9uIG9mIHRoZSBDTU9TIGNsb2NrIHJlZ2lzdGVyIGNvbnRlbnRzOgorCSAqIFdoZW4gdGhlIFVwZGF0ZS1Jbi1Qcm9ncmVzcyAoVUlQKSBmbGFnIGdvZXMgZnJvbSAxIHRvIDAsIHRoZQorCSAqIFJUQyByZWdpc3RlcnMgc2hvdyB0aGUgc2Vjb25kIHdoaWNoIGhhcyBwcmVjaXNlbHkganVzdCBzdGFydGVkLgorCSAqIExldCdzIGhvcGUgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMgaW50ZXJwcmV0IHRoZSBSVEMgdGhlIHNhbWUgd2F5LgorCSAqLworCS8qIHJlYWQgUlRDIGV4YWN0bHkgb24gZmFsbGluZyBlZGdlIG9mIHVwZGF0ZSBmbGFnICovCisJZm9yIChpID0gMCA7IGkgPCAxMDAwMDAwIDsgaSsrKSAvKiBtYXkgdGFrZSB1cCB0byAxIHNlY29uZC4uLiAqLworCQlpZiAoQ01PU19SRUFEKFJUQ19GUkVRX1NFTEVDVCkgJiBSVENfVUlQKQorCQkJYnJlYWs7CisKKwlmb3IgKGkgPSAwIDsgaSA8IDEwMDAwMDAgOyBpKyspIC8qIG11c3QgdHJ5IGF0IGxlYXN0IDIuMjI4IG1zICovCisJCWlmICghKENNT1NfUkVBRChSVENfRlJFUV9TRUxFQ1QpICYgUlRDX1VJUCkpCisJCQlicmVhazsKKworCWRvIHsgLyogSXNuJ3QgdGhpcyBvdmVya2lsbCA/IFVJUCBhYm92ZSBzaG91bGQgZ3VhcmFudGVlIGNvbnNpc3RlbmN5ICovCisJCXNlYyAgPSBDTU9TX1JFQUQoUlRDX1NFQ09ORFMpOworCQltaW4gID0gQ01PU19SRUFEKFJUQ19NSU5VVEVTKTsKKwkJaG91ciA9IENNT1NfUkVBRChSVENfSE9VUlMpOworCQlkYXkgID0gQ01PU19SRUFEKFJUQ19EQVlfT0ZfTU9OVEgpOworCQltb24gID0gQ01PU19SRUFEKFJUQ19NT05USCk7CisJCXllYXIgPSBDTU9TX1JFQUQoUlRDX1lFQVIpOworCX0gd2hpbGUgKHNlYyAhPSBDTU9TX1JFQUQoUlRDX1NFQ09ORFMpKTsKKworCWlmICghKENNT1NfUkVBRChSVENfQ09OVFJPTCkgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgeworCQlCQ0RfVE9fQklOKHNlYyk7CisJCUJDRF9UT19CSU4obWluKTsKKwkJQkNEX1RPX0JJTihob3VyKTsKKwkJQkNEX1RPX0JJTihkYXkpOworCQlCQ0RfVE9fQklOKG1vbik7CisJCUJDRF9UT19CSU4oeWVhcik7CisJfQorCWlmICgoeWVhciArPSAxOTAwKSA8IDE5NzApCisJCXllYXIgKz0gMTAwOworCXJldHVybiBta3RpbWUoeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjKTsKK30KKworc3RhdGljIGludCBzZXRfaXNhX2Ntb3NfdGltZSh2b2lkKQoreworCWludCByZXR2YWwgPSAwOworCWludCByZWFsX3NlY29uZHMsIHJlYWxfbWludXRlcywgY21vc19taW51dGVzOworCXVuc2lnbmVkIGNoYXIgc2F2ZV9jb250cm9sLCBzYXZlX2ZyZXFfc2VsZWN0OworCXVuc2lnbmVkIGxvbmcgbm93dGltZSA9IHh0aW1lLnR2X3NlYzsKKworCXNhdmVfY29udHJvbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7IC8qIHRlbGwgdGhlIGNsb2NrIGl0J3MgYmVpbmcgc2V0ICovCisJQ01PU19XUklURSgoc2F2ZV9jb250cm9sfFJUQ19TRVQpLCBSVENfQ09OVFJPTCk7CisKKwlzYXZlX2ZyZXFfc2VsZWN0ID0gQ01PU19SRUFEKFJUQ19GUkVRX1NFTEVDVCk7IC8qIHN0b3AgYW5kIHJlc2V0IHByZXNjYWxlciAqLworCUNNT1NfV1JJVEUoKHNhdmVfZnJlcV9zZWxlY3R8UlRDX0RJVl9SRVNFVDIpLCBSVENfRlJFUV9TRUxFQ1QpOworCisJY21vc19taW51dGVzID0gQ01PU19SRUFEKFJUQ19NSU5VVEVTKTsKKwlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkKKwkJQkNEX1RPX0JJTihjbW9zX21pbnV0ZXMpOworCisJLyoKKwkgKiBzaW5jZSB3ZSdyZSBvbmx5IGFkanVzdGluZyBtaW51dGVzIGFuZCBzZWNvbmRzLAorCSAqIGRvbid0IGludGVyZmVyZSB3aXRoIGhvdXIgb3ZlcmZsb3cuIFRoaXMgYXZvaWRzCisJICogbWVzc2luZyB3aXRoIHVua25vd24gdGltZSB6b25lcyBidXQgcmVxdWlyZXMgeW91cgorCSAqIFJUQyBub3QgdG8gYmUgb2ZmIGJ5IG1vcmUgdGhhbiAxNSBtaW51dGVzCisJICovCisJcmVhbF9zZWNvbmRzID0gbm93dGltZSAlIDYwOworCXJlYWxfbWludXRlcyA9IG5vd3RpbWUgLyA2MDsKKwlpZiAoKChhYnMocmVhbF9taW51dGVzIC0gY21vc19taW51dGVzKSArIDE1KS8zMCkgJiAxKQorCQlyZWFsX21pbnV0ZXMgKz0gMzA7CQkvKiBjb3JyZWN0IGZvciBoYWxmIGhvdXIgdGltZSB6b25lICovCisJcmVhbF9taW51dGVzICU9IDYwOworCisJaWYgKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpIDwgMzApIHsKKwkJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKKwkJCUJJTl9UT19CQ0QocmVhbF9zZWNvbmRzKTsKKwkJCUJJTl9UT19CQ0QocmVhbF9taW51dGVzKTsKKwkJfQorCQlDTU9TX1dSSVRFKHJlYWxfc2Vjb25kcyxSVENfU0VDT05EUyk7CisJCUNNT1NfV1JJVEUocmVhbF9taW51dGVzLFJUQ19NSU5VVEVTKTsKKwl9IGVsc2UKKwkJcmV0dmFsID0gLTE7CisKKwkvKiBUaGUgZm9sbG93aW5nIGZsYWdzIGhhdmUgdG8gYmUgcmVsZWFzZWQgZXhhY3RseSBpbiB0aGlzIG9yZGVyLAorCSAqIG90aGVyd2lzZSB0aGUgRFMxMjg4NyAocG9wdWxhciBNQzE0NjgxOEEgY2xvbmUgd2l0aCBpbnRlZ3JhdGVkCisJICogYmF0dGVyeSBhbmQgcXVhcnR6KSB3aWxsIG5vdCByZXNldCB0aGUgb3NjaWxsYXRvciBhbmQgd2lsbCBub3QKKwkgKiB1cGRhdGUgcHJlY2lzZWx5IDUwMCBtcyBsYXRlci4gWW91IHdvbid0IGZpbmQgdGhpcyBtZW50aW9uZWQgaW4KKwkgKiB0aGUgRGFsbGFzIFNlbWljb25kdWN0b3IgZGF0YSBzaGVldHMsIGJ1dCB3aG8gYmVsaWV2ZXMgZGF0YQorCSAqIHNoZWV0cyBhbnl3YXkgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gTWFya3VzIEt1aG4KKwkgKi8KKwlDTU9TX1dSSVRFKHNhdmVfY29udHJvbCwgUlRDX0NPTlRST0wpOworCUNNT1NfV1JJVEUoc2F2ZV9mcmVxX3NlbGVjdCwgUlRDX0ZSRVFfU0VMRUNUKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3ZvaWQgX19pbml0IGlzYV9ydGNfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX2NvMjg1KCkgfHwKKwkgICAgbWFjaGluZV9pc19wZXJzb25hbF9zZXJ2ZXIoKSkKKwkJLyoKKwkJICogQWRkLWluIDIxMjg1cyBzaG91bGRuJ3QgYWNjZXNzIHRoZSBSVEMKKwkJICovCisJCXJ0Y19iYXNlID0gMDsKKwllbHNlCisJCXJ0Y19iYXNlID0gMHg3MDsKKworCWlmIChydGNfYmFzZSkgeworCQlpbnQgcmVnX2QsIHJlZ19iOworCisJCS8qCisJCSAqIFByb2JlIGZvciB0aGUgUlRDLgorCQkgKi8KKwkJcmVnX2QgPSBDTU9TX1JFQUQoUlRDX1JFR19EKTsKKworCQkvKgorCQkgKiBtYWtlIHN1cmUgdGhlIGRpdmlkZXIgaXMgc2V0CisJCSAqLworCQlDTU9TX1dSSVRFKFJUQ19SRUZfQ0xDS18zMktIWiwgUlRDX1JFR19BKTsKKworCQkvKgorCQkgKiBTZXQgY29udHJvbCByZWcgQgorCQkgKiAgICgyNCBob3VyIG1vZGUsIHVwZGF0ZSBlbmFibGVkKQorCQkgKi8KKwkJcmVnX2IgPSBDTU9TX1JFQUQoUlRDX1JFR19CKSAmIDB4N2Y7CisJCXJlZ19iIHw9IDI7CisJCUNNT1NfV1JJVEUocmVnX2IsIFJUQ19SRUdfQik7CisKKwkJaWYgKChDTU9TX1JFQUQoUlRDX1JFR19BKSAmIDB4N2YpID09IFJUQ19SRUZfQ0xDS18zMktIWiAmJgorCQkgICAgQ01PU19SRUFEKFJUQ19SRUdfQikgPT0gcmVnX2IpIHsKKwkJCXN0cnVjdCB0aW1lc3BlYyB0djsKKworCQkJLyoKKwkJCSAqIFdlIGhhdmUgYSBSVEMuICBDaGVjayB0aGUgYmF0dGVyeQorCQkJICovCisJCQlpZiAoKHJlZ19kICYgMHg4MCkgPT0gMCkKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJSVEM6ICoqKiB3YXJuaW5nOiBDTU9TIGJhdHRlcnkgYmFkXG4iKTsKKworCQkJdHYudHZfbnNlYyA9IDA7CisJCQl0di50dl9zZWMgPSBnZXRfaXNhX2Ntb3NfdGltZSgpOworCQkJZG9fc2V0dGltZW9mZGF5KCZ0dik7CisJCQlzZXRfcnRjID0gc2V0X2lzYV9jbW9zX3RpbWU7CisJCX0gZWxzZQorCQkJcnRjX2Jhc2UgPSAwOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaDcyMHgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtaDcyMHgvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjY5ODJlZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaDcyMHgvS2NvbmZpZwpAQCAtMCwwICsxLDM4IEBACitpZiBBUkNIX0g3MjBYCisKK21lbnUgImg3MjB4IEltcGxlbWVudGF0aW9ucyIKKworY29uZmlnIEFSQ0hfSDcyMDEKKwlib29sICJnbXMzMGM3MjAxIgorCWRlcGVuZHMgb24gQVJDSF9INzIwWAorCXNlbGVjdCBDUFVfSDcyMDEKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEh5bml4IEdNUzMwQzcyMDEgUmVmZXJlbmNlIEJvYXJkCisKK2NvbmZpZyBBUkNIX0g3MjAyCisJYm9vbCAiaG1zMzBjNzIwMiIKKwlzZWxlY3QgQ1BVX0g3MjAyCisJZGVwZW5kcyBvbiBBUkNIX0g3MjBYCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBIeW5peCBITVMzMEM3MjAyIFJlZmVyZW5jZSBCb2FyZAorCitlbmRtZW51CisKK2NvbmZpZyBDUFVfSDcyMDEKKwlib29sCisJaGVscAorCSAgU2VsZWN0IGNvZGUgc3BlY2lmaWMgdG8gaDcyMDEgdmFyaWFudHMKKworY29uZmlnIENQVV9INzIwMgorCWJvb2wKKwloZWxwCisJICBTZWxlY3QgY29kZSBzcGVjaWZpYyB0byBoNzIwMiB2YXJpYW50cworY29uZmlnIEg3MjAyX1NFUklBTDIzCisJZGVwZW5kcyBvbiBDUFVfSDcyMDIKKwlib29sICJVc2Ugc2VyaWFsIHBvcnRzIDIrMyIKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3aXNoIHRvIHVzZSBzZXJpYWwgcG9ydHMgMiszLiBUaGV5IHNoYXJlIHRoZWlyCisJICBwaW5zIHdpdGggdGhlIGtleWJvYXJkIG1hdHJpeCBjb250cm9sbGVyLCBzbyB5b3UgaGF2ZSB0byBkZWNpZGUuCisKKworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaDcyMHgvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWg3MjB4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0Y2Y3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWg3MjB4L01ha2VmaWxlCkBAIC0wLDAgKzEsMTYgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisjCisKKyMgQ29tbW9uIHN1cHBvcnQKK29iai15IDo9IGNvbW1vbi5vCitvYmotbSA6PQorb2JqLW4gOj0KK29iai0gIDo9CisKKyMgU3BlY2lmaWMgYm9hcmQgc3VwcG9ydAorCitvYmotJChDT05GSUdfQVJDSF9INzIwMSkJCSs9IGg3MjAxLWV2YWwubworb2JqLSQoQ09ORklHX0FSQ0hfSDcyMDIpCQkrPSBoNzIwMi1ldmFsLm8KK29iai0kKENPTkZJR19DUFVfSDcyMDEpIAkJKz0gY3B1LWg3MjAxLm8KK29iai0kKENPTkZJR19DUFVfSDcyMDIpIAkJKz0gY3B1LWg3MjAyLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaDcyMHgvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtaDcyMHgvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mjk4NDAxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1oNzIweC9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsMiBAQAorICAgenJlbGFkZHItJChDT05GSUdfQVJDSF9INzIwWCkJOj0gMHg0MDAwODAwMAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWg3MjB4L2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1oNzIweC9jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmFhM2FmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1oNzIweC9jb21tb24uYwpAQCAtMCwwICsxLDI0NyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtaDcyMHgvY29tbW9uLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CisgKiAgICAgICAgICAgICAgIDIwMDMgUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPgorICogICAgICAgICAgICAgICAyMDA0IFNhc2NoYSBIYXVlciAgICA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBjb21tb24gc3R1ZmYgZm9yIEh5bml4IGg3MjB4IHByb2Nlc3NvcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2RtYS5oPgorCisjaWYgMAorI2RlZmluZSBJUlFEQkcoYXJncy4uLikgcHJpbnRrKGFyZ3MpCisjZWxzZQorI2RlZmluZSBJUlFEQkcoYXJncy4uLikgZG8ge30gd2hpbGUoMCkKKyNlbmRpZgorCit2b2lkIF9faW5pdCBhcmNoX2RtYV9pbml0KGRtYV90ICpkbWEpCit7Cit9CisKKy8qCisgKiBSZXR1cm4gdXNlY3Mgc2luY2UgbGFzdCB0aW1lciByZWxvYWQKKyAqICh0aW1lcmNvdW50ICogKHVzZWNzIHBlcmppZmZpZSkpIC8gKHRpY2tzIHBlciBqaWZmaWUpCisgKi8KK3Vuc2lnbmVkIGxvbmcgaDcyMHhfZ2V0dGltZW9mZnNldCh2b2lkKQoreworCXJldHVybiAoQ1BVX1JFRyAoVElNRVJfVklSVCwgVE0wX0NPVU5UKSAqIHRpY2tfdXNlYykgLyBMQVRDSDsKK30KKworLyoKKyAqIG1hc2sgR2xvYmFsIGlycSdzCisgKi8KK3N0YXRpYyB2b2lkIG1hc2tfZ2xvYmFsX2lycSAodW5zaWduZWQgaW50IGlycSApCit7CisJQ1BVX1JFRyAoSVJRQ19WSVJULCBJUlFDX0lFUikgJj0gfigxIDw8IGlycSk7Cit9CisKKy8qCisgKiB1bm1hc2sgR2xvYmFsIGlycSdzCisgKi8KK3N0YXRpYyB2b2lkIHVubWFza19nbG9iYWxfaXJxICh1bnNpZ25lZCBpbnQgaXJxICkKK3sKKwlDUFVfUkVHIChJUlFDX1ZJUlQsIElSUUNfSUVSKSB8PSAoMSA8PCBpcnEpOworfQorCisKKy8qCisgKiBhY2sgR1BJTyBpcnEncworICogQWNrIG9ubHkgZm9yIGVkZ2UgdHJpZ2dlcmVkIGludCdzIHZhbGlkCisgKi8KK3N0YXRpYyB2b2lkIGlubGluZSBhY2tfZ3Bpb19pcnEodTMyIGlycSkKK3sKKwl1MzIgcmVnX2Jhc2UgPSBHUElPX1ZJUlQoSVJRX1RPX1JFR05PKGlycSkpOworCXUzMiBiaXQgPSBJUlFfVE9fQklUKGlycSk7CisJaWYgKCAoQ1BVX1JFRyAocmVnX2Jhc2UsIEdQSU9fRURHRSkgJiBiaXQpKQorCQlDUFVfUkVHIChyZWdfYmFzZSwgR1BJT19DTFIpID0gYml0OworfQorCisvKgorICogbWFzayBHUElPIGlycSdzCisgKi8KK3N0YXRpYyB2b2lkIGlubGluZSBtYXNrX2dwaW9faXJxKHUzMiBpcnEpCit7CisJdTMyIHJlZ19iYXNlID0gR1BJT19WSVJUKElSUV9UT19SRUdOTyhpcnEpKTsKKwl1MzIgYml0ID0gSVJRX1RPX0JJVChpcnEpOworCUNQVV9SRUcgKHJlZ19iYXNlLCBHUElPX01BU0spICY9IH5iaXQ7Cit9CisKKy8qCisgKiB1bm1hc2sgR1BJTyBpcnEncworICovCitzdGF0aWMgdm9pZCBpbmxpbmUgdW5tYXNrX2dwaW9faXJxKHUzMiBpcnEpCit7CisJdTMyIHJlZ19iYXNlID0gR1BJT19WSVJUKElSUV9UT19SRUdOTyhpcnEpKTsKKwl1MzIgYml0ID0gSVJRX1RPX0JJVChpcnEpOworCUNQVV9SRUcgKHJlZ19iYXNlLCBHUElPX01BU0spIHw9IGJpdDsKK30KKworc3RhdGljIHZvaWQKK2g3MjB4X2dwaW9faGFuZGxlcih1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGlycSwKKyAgICAgICAgICAgICAgICAgc3RydWN0IGlycWRlc2MgKmRlc2MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCUlSUURCRygiJXMgaXJxOiAlZFxuIixfX0ZVTkNUSU9OX18saXJxKTsKKwlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJd2hpbGUgKG1hc2spIHsKKwkJaWYgKG1hc2sgJiAxKSB7CisJCQlJUlFEQkcoImhhbmRsaW5nIGlycSAlZFxuIiwgaXJxKTsKKwkJCWRlc2MtPmhhbmRsZShpcnEsIGRlc2MsIHJlZ3MpOworCQl9CisJCWlycSsrOworCQlkZXNjKys7CisJCW1hc2sgPj49IDE7CisJfQorfQorCitzdGF0aWMgdm9pZAoraDcyMHhfZ3Bpb2FfZGVtdXhfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxX3VudXNlZCwgc3RydWN0IGlycWRlc2MgKmRlc2MsCisJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgbWFzaywgaXJxOworCisJbWFzayA9IENQVV9SRUcoR1BJT19BX1ZJUlQsR1BJT19TVEFUKTsKKwlpcnEgPSBJUlFfQ0hBSU5FRF9HUElPQSgwKTsKKwlJUlFEQkcoIiVzIG1hc2s6IDB4JTA4eCBpcnE6ICVkXG4iLF9fRlVOQ1RJT05fXyxtYXNrLGlycSk7CisJaDcyMHhfZ3Bpb19oYW5kbGVyKG1hc2ssIGlycSwgZGVzYywgcmVncyk7Cit9CisKK3N0YXRpYyB2b2lkCitoNzIweF9ncGlvYl9kZW11eF9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnFfdW51c2VkLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywKKwkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBtYXNrLCBpcnE7CisJbWFzayA9IENQVV9SRUcoR1BJT19CX1ZJUlQsR1BJT19TVEFUKTsKKwlpcnEgPSBJUlFfQ0hBSU5FRF9HUElPQigwKTsKKwlJUlFEQkcoIiVzIG1hc2s6IDB4JTA4eCBpcnE6ICVkXG4iLF9fRlVOQ1RJT05fXyxtYXNrLGlycSk7CisJaDcyMHhfZ3Bpb19oYW5kbGVyKG1hc2ssIGlycSwgZGVzYywgcmVncyk7Cit9CisKK3N0YXRpYyB2b2lkCitoNzIweF9ncGlvY19kZW11eF9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnFfdW51c2VkLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywKKwkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBtYXNrLCBpcnE7CisKKwltYXNrID0gQ1BVX1JFRyhHUElPX0NfVklSVCxHUElPX1NUQVQpOworCWlycSA9IElSUV9DSEFJTkVEX0dQSU9DKDApOworCUlSUURCRygiJXMgbWFzazogMHglMDh4IGlycTogJWRcbiIsX19GVU5DVElPTl9fLG1hc2ssaXJxKTsKKwloNzIweF9ncGlvX2hhbmRsZXIobWFzaywgaXJxLCBkZXNjLCByZWdzKTsKK30KKworc3RhdGljIHZvaWQKK2g3MjB4X2dwaW9kX2RlbXV4X2hhbmRsZXIodW5zaWduZWQgaW50IGlycV91bnVzZWQsIHN0cnVjdCBpcnFkZXNjICpkZXNjLAorCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IG1hc2ssIGlycTsKKworCW1hc2sgPSBDUFVfUkVHKEdQSU9fRF9WSVJULEdQSU9fU1RBVCk7CisJaXJxID0gSVJRX0NIQUlORURfR1BJT0QoMCk7CisJSVJRREJHKCIlcyBtYXNrOiAweCUwOHggaXJxOiAlZFxuIixfX0ZVTkNUSU9OX18sbWFzayxpcnEpOworCWg3MjB4X2dwaW9faGFuZGxlcihtYXNrLCBpcnEsIGRlc2MsIHJlZ3MpOworfQorCisjaWZkZWYgQ09ORklHX0NQVV9INzIwMgorc3RhdGljIHZvaWQKK2g3MjB4X2dwaW9lX2RlbXV4X2hhbmRsZXIodW5zaWduZWQgaW50IGlycV91bnVzZWQsIHN0cnVjdCBpcnFkZXNjICpkZXNjLAorCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IG1hc2ssIGlycTsKKworCW1hc2sgPSBDUFVfUkVHKEdQSU9fRV9WSVJULEdQSU9fU1RBVCk7CisJaXJxID0gSVJRX0NIQUlORURfR1BJT0UoMCk7CisJSVJRREJHKCIlcyBtYXNrOiAweCUwOHggaXJxOiAlZFxuIixfX0ZVTkNUSU9OX18sbWFzayxpcnEpOworCWg3MjB4X2dwaW9faGFuZGxlcihtYXNrLCBpcnEsIGRlc2MsIHJlZ3MpOworfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBoNzIweF9nbG9iYWxfY2hpcCA9IHsKKwkuYWNrID0gbWFza19nbG9iYWxfaXJxLAorCS5tYXNrID0gbWFza19nbG9iYWxfaXJxLAorCS51bm1hc2sgPSB1bm1hc2tfZ2xvYmFsX2lycSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBoNzIweF9ncGlvX2NoaXAgPSB7CisJLmFjayA9IGFja19ncGlvX2lycSwKKwkubWFzayA9IG1hc2tfZ3Bpb19pcnEsCisJLnVubWFzayA9IHVubWFza19ncGlvX2lycSwKK307CisKKy8qCisgKiBJbml0aWFsaXplIElSUSdzLCBtYXNrIGFsbCwgZW5hYmxlIG11bHRpcGxleGVkIGlycSdzCisgKi8KK3ZvaWQgX19pbml0IGg3MjB4X2luaXRfaXJxICh2b2lkKQoreworCWludCAJaXJxOworCisJLyogTWFzayBnbG9iYWwgaXJxJ3MgKi8KKwlDUFVfUkVHIChJUlFDX1ZJUlQsIElSUUNfSUVSKSA9IDB4MDsKKworCS8qIE1hc2sgYWxsIG11bHRpcGxleGVkIGlycSdzICovCisJQ1BVX1JFRyAoR1BJT19BX1ZJUlQsIEdQSU9fTUFTSykgPSAweDA7CisJQ1BVX1JFRyAoR1BJT19CX1ZJUlQsIEdQSU9fTUFTSykgPSAweDA7CisJQ1BVX1JFRyAoR1BJT19DX1ZJUlQsIEdQSU9fTUFTSykgPSAweDA7CisJQ1BVX1JFRyAoR1BJT19EX1ZJUlQsIEdQSU9fTUFTSykgPSAweDA7CisKKwkvKiBJbml0aWFsaXplIGdsb2JhbCBJUlEncywgZmFzdCBwYXRoICovCisJZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9HTEJMX0lSUVM7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZoNzIweF9nbG9iYWxfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2xldmVsX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJfQorCisJLyogSW5pdGlhbGl6ZSBtdWx0aXBsZXhlZCBJUlEncywgc2xvdyBwYXRoICovCisJZm9yIChpcnEgPSBJUlFfQ0hBSU5FRF9HUElPQSgwKSA7IGlycSA8PSBJUlFfQ0hBSU5FRF9HUElPRCgzMSk7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZoNzIweF9ncGlvX2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBkb19lZGdlX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEICk7CisJfQorCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9HUElPQSwgaDcyMHhfZ3Bpb2FfZGVtdXhfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0dQSU9CLCBoNzIweF9ncGlvYl9kZW11eF9oYW5kbGVyKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfR1BJT0MsIGg3MjB4X2dwaW9jX2RlbXV4X2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9HUElPRCwgaDcyMHhfZ3Bpb2RfZGVtdXhfaGFuZGxlcik7CisKKyNpZmRlZiBDT05GSUdfQ1BVX0g3MjAyCisJZm9yIChpcnEgPSBJUlFfQ0hBSU5FRF9HUElPRSgwKSA7IGlycSA8PSBJUlFfQ0hBSU5FRF9HUElPRSgzMSk7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZoNzIweF9ncGlvX2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBkb19lZGdlX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEICk7CisJfQorCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9HUElPRSwgaDcyMHhfZ3Bpb2VfZGVtdXhfaGFuZGxlcik7CisjZW5kaWYKKworCS8qIEVuYWJsZSBtdWx0aXBsZXhlZCBpcnEncyAqLworCUNQVV9SRUcgKElSUUNfVklSVCwgSVJRQ19JRVIpID0gSVJRX0VOQV9NVVg7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaDcyMHhfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeyBJT19WSVJULCBJT19QSFlTLCBJT19TSVpFLCBNVF9ERVZJQ0UgfSwKK307CisKKy8qIEluaXRpYWxpemUgaW8gdGFibGVzICovCit2b2lkIF9faW5pdCBoNzIweF9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQoaDcyMHhfaW9fZGVzYyxBUlJBWV9TSVpFKGg3MjB4X2lvX2Rlc2MpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaDcyMHgvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLWg3MjB4L2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4Nzk4ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWg3MjB4L2NvbW1vbi5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWg3MjB4L2NvbW1vbi5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgorICogICAgICAgICAgICAgICAyMDAzIFJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4KKyAqICAgICAgICAgICAgICAgMjAwNCBTYXNjaGEgSGF1ZXIgICAgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+CisgKgorICogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIHN0dWZmIGZvciBIeW5peCBHTVMzMEM3MjAxIGRldmVsb3BtZW50IGJvYXJkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaDcyMHhfZ2V0dGltZW9mZnNldCh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBoNzIweF9pbml0X2lycSAodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgaDcyMHhfbWFwX2lvKHZvaWQpOworCisjaWZkZWYgQ09ORklHX0FSQ0hfSDcyMDIKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIGg3MjAyX3RpbWVyOworZXh0ZXJuIHZvaWQgX19pbml0IGluaXRfaHdfaDcyMDIodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgaDcyMDJfaW5pdF9pcnEgKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IGg3MjAyX2luaXRfdGltZSh2b2lkKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfSDcyMDEKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIGg3MjAxX3RpbWVyOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWg3MjB4L2NwdS1oNzIwMS5jIGIvYXJjaC9hcm0vbWFjaC1oNzIweC9jcHUtaDcyMDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDM2NTY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1oNzIweC9jcHUtaDcyMDEuYwpAQCAtMCwwICsxLDY0IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1oNzIweC9jcHUtaDcyMDEuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKyAqICAgICAgICAgICAgICAgMjAwMyBSb2JlcnQgU2Nod2ViZWwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+CisgKiAgICAgICAgICAgICAgIDIwMDQgU2FzY2hhIEhhdWVyICAgIDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIHByb2Nlc3NvciBzcGVjaWZpYyBzdHVmZiBmb3IgdGhlIEh5bml4IGg3MjAxCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKy8qCisgKiBUaW1lciBpbnRlcnJ1cHQgaGFuZGxlcgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QKK2g3MjAxX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOworCisJQ1BVX1JFRyAoVElNRVJfVklSVCwgVElNRVJfVE9QU1RBVCk7CisJdGltZXJfdGljayhyZWdzKTsKKworCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGg3MjAxX3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAiaDcyMDEgVGltZXIgVGljayIsCisJLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCwKKwkuaGFuZGxlcgk9IGg3MjAxX3RpbWVyX2ludGVycnVwdAorfTsKKworLyoKKyAqIFNldHVwIFRJTUVSMCBhcyBzeXN0ZW0gdGltZXIKKyAqLwordm9pZCBfX2luaXQgaDcyMDFfaW5pdF90aW1lKHZvaWQpCit7CisJQ1BVX1JFRyAoVElNRVJfVklSVCwgVE0wX1BFUklPRCkgPSBMQVRDSDsKKwlDUFVfUkVHIChUSU1FUl9WSVJULCBUTTBfQ1RSTCkgPSBUTV9SRVNFVDsKKwlDUFVfUkVHIChUSU1FUl9WSVJULCBUTTBfQ1RSTCkgPSBUTV9SRVBFQVQgfCBUTV9TVEFSVDsKKwlDUFVfUkVHIChUSU1FUl9WSVJULCBUSU1FUl9UT1BDVFJMKSA9IEVOQUJMRV9UTTBfSU5UUiB8IFRJTUVSX0VOQUJMRV9CSVQ7CisKKwlzZXR1cF9pcnEoSVJRX1RJTUVSMCwgJmg3MjAxX3RpbWVyX2lycSk7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgaDcyMDFfdGltZXIgPSB7CisJLmluaXQJCT0gaDcyMDFfaW5pdF90aW1lLAorCS5vZmZzZXQJCT0gaDcyMHhfZ2V0dGltZW9mZnNldCwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWg3MjB4L2NwdS1oNzIwMi5jIGIvYXJjaC9hcm0vbWFjaC1oNzIweC9jcHUtaDcyMDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWI4ZmI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1oNzIweC9jcHUtaDcyMDIuYwpAQCAtMCwwICsxLDIyOCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtaDcyMHgvY3B1LWg3MjAyLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CisgKiAgICAgICAgICAgICAgIDIwMDMgUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPgorICogICAgICAgICAgICAgICAyMDA0IFNhc2NoYSBIYXVlciAgICA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBwcm9jZXNzb3Igc3BlY2lmaWMgc3R1ZmYgZm9yIHRoZSBIeW5peCBoNzIwMgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoNzIwMnBzMl9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4ODAwMmMwMDAsCisJCS5lbmQJPSAweDgwMDJjMDQwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1BTMiwKKwkJLmVuZAk9IElSUV9QUzIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoNzIwMnBzMl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImg3MjAycHMyIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGg3MjAycHMyX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaDcyMDJwczJfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0geworCXsKKwkJLm1lbWJhc2UJPSAodm9pZCopU0VSSUFMMF9WSVJULAorCQkubWFwYmFzZQk9IFNFUklBTDBfQkFTRSwKKwkJLmlycQkJPSBJUlFfVUFSVDAsCisJCS51YXJ0Y2xrCT0gMioxODQzMjAwLAorCQkucmVnc2hpZnQJPSAyLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNULAorCX0sCisJeworCQkubWVtYmFzZQk9ICh2b2lkKilTRVJJQUwxX1ZJUlQsCisJCS5tYXBiYXNlCT0gU0VSSUFMMV9CQVNFLAorCQkuaXJxCQk9IElSUV9VQVJUMSwKKwkJLnVhcnRjbGsJPSAyKjE4NDMyMDAsCisJCS5yZWdzaGlmdAk9IDIsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QsCisJfSwKKyNpZmRlZiBDT05GSUdfSDcyMDJfU0VSSUFMMjMKKwl7CisJCS5tZW1iYXNlCT0gKHZvaWQqKVNFUklBTDJfVklSVCwKKwkJLm1hcGJhc2UJPSBTRVJJQUwyX0JBU0UsCisJCS5pcnEJCT0gSVJRX1VBUlQyLAorCQkudWFydGNsawk9IDIqMTg0MzIwMCwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwKKwl9LAorCXsKKwkJLm1lbWJhc2UJPSAodm9pZCopU0VSSUFMM19WSVJULAorCQkubWFwYmFzZQk9IFNFUklBTDNfQkFTRSwKKwkJLmlycQkJPSBJUlFfVUFSVDMsCisJCS51YXJ0Y2xrCT0gMioxODQzMjAwLAorCQkucmVnc2hpZnQJPSAyLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNULAorCX0sCisjZW5kaWYKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZXJpYWxfZGV2aWNlID0geworCS5uYW1lCQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQkJPSAwLAorCS5kZXYJCQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSBzZXJpYWxfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZoNzIwMnBzMl9kZXZpY2UsCisJJnNlcmlhbF9kZXZpY2UsCit9OworCisvKiBBbHRob3VnaCB3ZSBoYXZlIHR3byBpbnRlcnJ1cHQgbGluZXMgZm9yIHRoZSB0aW1lcnMsIHdlIG9ubHkgaGF2ZSBvbmUKKyAqIHN0YXR1cyByZWdpc3RlciB3aGljaCBjbGVhcnMgYWxsIHBlbmRpbmcgdGltZXIgaW50ZXJydXB0cyBvbiByZWFkaW5nLiBTbworICogd2UgaGF2ZSB0byBoYW5kbGUgYWxsIHRpbWVyIGludGVycnVwdHMgaW4gb25lIHBsYWNlLgorICovCitzdGF0aWMgdm9pZAoraDcyMDJfdGltZXJ4X2RlbXV4X2hhbmRsZXIodW5zaWduZWQgaW50IGlycV91bnVzZWQsIHN0cnVjdCBpcnFkZXNjICpkZXNjLAorCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IG1hc2ssIGlycTsKKworCW1hc2sgPSBDUFVfUkVHIChUSU1FUl9WSVJULCBUSU1FUl9UT1BTVEFUKTsKKworCWlmICggbWFzayAmIFRTVEFUX1QwSU5UICkgeworCQl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKKwkJdGltZXJfdGljayhyZWdzKTsKKwkJd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKKwkJaWYoIG1hc2sgPT0gVFNUQVRfVDBJTlQgKQorCQkJcmV0dXJuOworCX0KKworCW1hc2sgPj49IDE7CisJaXJxID0gSVJRX1RJTUVSMTsKKwlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJd2hpbGUgKG1hc2spIHsKKwkJaWYgKG1hc2sgJiAxKQorCQkJZGVzYy0+aGFuZGxlKGlycSwgZGVzYywgcmVncyk7CisJCWlycSsrOworCQlkZXNjKys7CisJCW1hc2sgPj49IDE7CisJfQorfQorCisvKgorICogVGltZXIgaW50ZXJydXB0IGhhbmRsZXIKKyAqLworc3RhdGljIGlycXJldHVybl90CitoNzIwMl90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwloNzIwMl90aW1lcnhfZGVtdXhfaGFuZGxlcigwLCBOVUxMLCByZWdzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBtYXNrIG11bHRpcGxleGVkIHRpbWVyIGlycSdzCisgKi8KK3N0YXRpYyB2b2lkIGlubGluZSBtYXNrX3RpbWVyeF9pcnEgKHUzMiBpcnEpCit7CisJdW5zaWduZWQgaW50IGJpdDsKKwliaXQgPSAyIDw8ICgoaXJxID09IElSUV9USU1FUjY0QikgPyA0IDogKGlycSAtIElSUV9USU1FUjEpKTsKKwlDUFVfUkVHIChUSU1FUl9WSVJULCBUSU1FUl9UT1BDVFJMKSAmPSB+Yml0OworfQorCisvKgorICogdW5tYXNrIG11bHRpcGxleGVkIHRpbWVyIGlycSdzCisgKi8KK3N0YXRpYyB2b2lkIGlubGluZSB1bm1hc2tfdGltZXJ4X2lycSAodTMyIGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgYml0OworCWJpdCA9IDIgPDwgKChpcnEgPT0gSVJRX1RJTUVSNjRCKSA/IDQgOiAoaXJxIC0gSVJRX1RJTUVSMSkpOworCUNQVV9SRUcgKFRJTUVSX1ZJUlQsIFRJTUVSX1RPUENUUkwpIHw9IGJpdDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIGg3MjAyX3RpbWVyeF9jaGlwID0geworCS5hY2sgPSBtYXNrX3RpbWVyeF9pcnEsCisJLm1hc2sgPSBtYXNrX3RpbWVyeF9pcnEsCisJLnVubWFzayA9IHVubWFza190aW1lcnhfaXJxLAorfTsKKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaDcyMDJfdGltZXJfaXJxID0geworCS5uYW1lCQk9ICJoNzIwMiBUaW1lciBUaWNrIiwKKwkuZmxhZ3MJCT0gU0FfSU5URVJSVVBULAorCS5oYW5kbGVyCT0gaDcyMDJfdGltZXJfaW50ZXJydXB0Cit9OworCisvKgorICogU2V0dXAgVElNRVIwIGFzIHN5c3RlbSB0aW1lcgorICovCit2b2lkIF9faW5pdCBoNzIwMl9pbml0X3RpbWUodm9pZCkKK3sKKwlDUFVfUkVHIChUSU1FUl9WSVJULCBUTTBfUEVSSU9EKSA9IExBVENIOworCUNQVV9SRUcgKFRJTUVSX1ZJUlQsIFRNMF9DVFJMKSA9IFRNX1JFU0VUOworCUNQVV9SRUcgKFRJTUVSX1ZJUlQsIFRNMF9DVFJMKSA9IFRNX1JFUEVBVCB8IFRNX1NUQVJUOworCUNQVV9SRUcgKFRJTUVSX1ZJUlQsIFRJTUVSX1RPUENUUkwpID0gRU5BQkxFX1RNMF9JTlRSIHwgVElNRVJfRU5BQkxFX0JJVDsKKworCXNldHVwX2lycShJUlFfVElNRVIwLCAmaDcyMDJfdGltZXJfaXJxKTsKK30KKworc3RydWN0IHN5c190aW1lciBoNzIwMl90aW1lciA9IHsKKwkuaW5pdAkJPSBoNzIwMl9pbml0X3RpbWUsCisJLm9mZnNldAkJPSBoNzIweF9nZXR0aW1lb2Zmc2V0LAorfTsKKwordm9pZCBfX2luaXQgaDcyMDJfaW5pdF9pcnEgKHZvaWQpCit7CisJaW50IAlpcnE7CisKKwlDUFVfUkVHIChHUElPX0VfVklSVCwgR1BJT19NQVNLKSA9IDB4MDsKKworCWZvciAoaXJxID0gSVJRX1RJTUVSMTsKKwkgICAgICAgICAgICAgICAgICBpcnEgPCBJUlFfQ0hBSU5FRF9USU1FUlgoTlJfVElNRVJYX0lSUVMpOyBpcnErKykgeworCQltYXNrX3RpbWVyeF9pcnEoaXJxKTsKKwkJc2V0X2lycV9jaGlwKGlycSwgJmg3MjAyX3RpbWVyeF9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgZG9fZWRnZV9JUlEpOworCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCApOworCX0KKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfVElNRVJYLCBoNzIwMl90aW1lcnhfZGVtdXhfaGFuZGxlcik7CisKKwloNzIweF9pbml0X2lycSgpOworfQorCit2b2lkIF9faW5pdCBpbml0X2h3X2g3MjAyKHZvaWQpCit7CisJLyogRW5hYmxlIGNsb2NrcyAqLworCUNQVV9SRUcgKFBNVV9CQVNFLCBQTVVfUExMX0NUUkwpIHw9IFBMTF8yX0VOIHwgUExMXzFfRU4gfCBQTExfM19NVVRFOworCisJQ1BVX1JFRyAoU0VSSUFMMF9WSVJULCBTRVJJQUxfRU5BQkxFKSA9IFNFUklBTF9FTkFCTEVfRU47CisJQ1BVX1JFRyAoU0VSSUFMMV9WSVJULCBTRVJJQUxfRU5BQkxFKSA9IFNFUklBTF9FTkFCTEVfRU47CisjaWZkZWYgQ09ORklHX0g3MjAyX1NFUklBTDIzCisJQ1BVX1JFRyAoU0VSSUFMMl9WSVJULCBTRVJJQUxfRU5BQkxFKSA9IFNFUklBTF9FTkFCTEVfRU47CisJQ1BVX1JFRyAoU0VSSUFMM19WSVJULCBTRVJJQUxfRU5BQkxFKSA9IFNFUklBTF9FTkFCTEVfRU47CisJQ1BVX0lPIChHUElPX0FNVUxTRUwpID0gQU1VTFNFTF9VU0lOMiB8IEFNVUxTRUxfVVNPVVQyIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICBBTVVMU0VMX1VTSU4zIHwgQU1VTFNFTF9VU09VVDM7CisjZW5kaWYKKwkodm9pZCkgcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWg3MjB4L2g3MjAxLWV2YWwuYyBiL2FyY2gvYXJtL21hY2gtaDcyMHgvaDcyMDEtZXZhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMjRiOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWg3MjB4L2g3MjAxLWV2YWwuYwpAQCAtMCwwICsxLDM5IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1oNzIweC9oNzIwMS1ldmFsLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CisgKiAgICAgICAgICAgICAgIDIwMDMgUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPgorICogICAgICAgICAgICAgICAyMDA0IFNhc2NoYSBIYXVlciAgICA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgc3R1ZmYgZm9yIEh5bml4IEdNUzMwQzcyMDEgZGV2ZWxvcG1lbnQgYm9hcmQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisKK01BQ0hJTkVfU1RBUlQoSDcyMDEsICJIeW5peCBHTVMzMEM3MjAxIikKKwlNQUlOVEFJTkVSKCJSb2JlcnQgU2Nod2ViZWwsIFBlbmd1dHJvbml4IikKKwlCT09UX01FTSgweDQwMDAwMDAwLCAweDgwMDAwMDAwLCAweGYwMDAwMDAwKQorCUJPT1RfUEFSQU1TKDB4YzAwMDEwMDApCisJTUFQSU8oaDcyMHhfbWFwX2lvKQorCUlOSVRJUlEoaDcyMHhfaW5pdF9pcnEpCisJLnRpbWVyID0gJmg3MjAxX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaDcyMHgvaDcyMDItZXZhbC5jIGIvYXJjaC9hcm0vbWFjaC1oNzIweC9oNzIwMi1ldmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ1NmEwMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaDcyMHgvaDcyMDItZXZhbC5jCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWg3MjB4L2g3MjAyLWV2YWwuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKyAqICAgICAgICAgICAgICAgMjAwMyBSb2JlcnQgU2Nod2ViZWwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+CisgKgkJIDIwMDQgU2FzY2hhIEhhdWVyIDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBzdHVmZiBmb3IgSHluaXggSE1TMzBDNzIwMiBkZXZlbG9wbWVudCBib2FyZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjaXJydXNfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBFVEgwX1BIWVMgKyAweDMwMCwKKwkJLmVuZAk9IEVUSDBfUEhZUyArIDB4MzAwICsgMHgxMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9DSEFJTkVEX0dQSU9CKDgpLAorCQkuZW5kCT0gSVJRX0NIQUlORURfR1BJT0IoOCksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjaXJydXNfZGV2aWNlID0geworCS5uYW1lCQk9ICJjaXJydXMtY3M4OXgwIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNpcnJ1c19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGNpcnJ1c19yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmNpcnJ1c19kZXZpY2UsCit9OworCisvKgorICogSGFyZHdhcmUgaW5pdC4gVGhpcyBpcyBjYWxsZWQgZWFybHkgaW4gaW5pdGNhbGxzCisgKiBQbGFjZSBwaW4gaW5pdHMgaGVyZS4gU28geW91IGF2b2lkIGFkZGluZyB1Z2x5CisgKiAjaWZkZWYgc3R1ZmYgdG8gY29tbW9uIGRyaXZlcnMuCisgKiBVc2UgdGhpcyBvbmx5LCBpZiB5b3VyIGJvb3Rsb2FkZXIgaXMgbm90IGFibGUKKyAqIHRvIGluaXRpYWxpemUgdGhlIHBpbnMgcHJvcGVyLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9ldmFsX2g3MjAyKHZvaWQpCit7CisJaW5pdF9od19oNzIwMigpOworCSh2b2lkKSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHQgb24gcG9ydGIgYml0IDggKGV0aGVybmV0KSAqLworCUNQVV9SRUcgKEdQSU9fQl9WSVJULCBHUElPX1BPTCkgJj0gfigxIDw8IDgpOworCUNQVV9SRUcgKEdQSU9fQl9WSVJULCBHUElPX0VOKSB8PSAoMSA8PCA4KTsKK30KKworTUFDSElORV9TVEFSVChINzIwMiwgIkh5bml4IEhNUzMwQzcyMDIiKQorCU1BSU5UQUlORVIoIlJvYmVydCBTY2h3ZWJlbCwgUGVuZ3V0cm9uaXgiKQorCUJPT1RfTUVNKDB4NDAwMDAwMDAsIDB4ODAwMDAwMDAsIDB4ZjAwMDAwMDApCisJQk9PVF9QQVJBTVMoMHg0MDAwMDEwMCkKKwlNQVBJTyhoNzIweF9tYXBfaW8pCisJSU5JVElSUShoNzIwMl9pbml0X2lycSkKKwkudGltZXIgPSAmaDcyMDJfdGltZXIsCisJSU5JVF9NQUNISU5FKGluaXRfZXZhbF9oNzIwMikKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1pbXgvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzg1ODEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvS2NvbmZpZwpAQCAtMCwwICsxLDEwIEBACittZW51ICJJTVggSW1wbGVtZW50YXRpb25zIgorCWRlcGVuZHMgb24gQVJDSF9JTVgKKworY29uZmlnIEFSQ0hfTVgxQURTCisJYm9vbCAibXgxYWRzIgorCWRlcGVuZHMgb24gQVJDSF9JTVgKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIE1vdG9yb2xhIE1YMUFEUyBib2FyZAorCitlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtaW14L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMjdkNzlmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvTWFrZWZpbGUKQEAgLTAsMCArMSwxOSBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMKKyMgTm90ZSEgRGVwZW5kZW5jaWVzIGFyZSBkb25lIGF1dG9tYWdpY2FsbHkgYnkgJ21ha2UgZGVwJywgd2hpY2ggYWxzbworIyByZW1vdmVzIGFueSBvbGQgZGVwZW5kZW5jaWVzLiBET04nVCBwdXQgeW91ciBvd24gZGVwZW5kZW5jaWVzIGhlcmUKKyMgdW5sZXNzIGl0J3Mgc29tZXRoaW5nIHNwZWNpYWwgKGllIG5vdCBhIC5jIGZpbGUpLgorCisjIE9iamVjdCBmaWxlIGxpc3RzLgorCitvYmoteQkJCSs9IGlycS5vIHRpbWUubyBkbWEubyBnZW5lcmljLm8KKworIyBTcGVjaWZpYyBib2FyZCBzdXBwb3J0CitvYmotJChDT05GSUdfQVJDSF9NWDFBRFMpICs9IG14MWFkcy5vCisKKyMgU3VwcG9ydCBmb3IgYmxpbmt5IGxpZ2h0cworbGVkLXkgOj0gbGVkcy5vCisKK29iai0kKENPTkZJR19MRURTKQkrPSAgJChsZWQteSkKK2xlZC0kKENPTkZJR19BUkNIX01YMUFEUykgKz0gbGVkcy1teDFhZHMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtaW14L01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ3MmNlNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSwyIEBACisgICAgenJlbGFkZHItJChDT05GSUdfQVJDSF9NWDFBRFMpCTo9IDB4MDgwMDgwMDAKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLmMgYi9hcmNoL2FybS9tYWNoLWlteC9kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWE1OWUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLmMKQEAgLTAsMCArMSwyMDMgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLmMKKyAqCisgKiAgaW14IERNQSByZWdpc3RyYXRpb24gYW5kIElSUSBkaXNwYXRjaGluZworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIDAzLzAzLzIwMDQgU2FzY2hhIEhhdWVyIDxzYXNjaGFAc2FzY2hhaGF1ZXIuZGU+CisgKiAgICAgICAgICAgICBpbml0aWFsIHZlcnNpb24gaGVhdmlseSBpbnNwaXJlZCBieQorICogICAgICAgICAgICAgbGludXgvYXJjaC9hcm0vbWFjaC1weGEvZG1hLmMKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKworc3RhdGljIHN0cnVjdCBkbWFfY2hhbm5lbCB7CisJY2hhciAqbmFtZTsKKwl2b2lkICgqaXJxX2hhbmRsZXIpIChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisJdm9pZCAoKmVycl9oYW5kbGVyKSAoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworCXZvaWQgKmRhdGE7Cit9IGRtYV9jaGFubmVsc1sxMV07CisKKy8qIHNldCBlcnJfaGFuZGxlciB0byBOVUxMIHRvIGhhdmUgdGhlIHN0YW5kYXJkIGluZm8tb25seSBlcnJvciBoYW5kbGVyICovCitpbnQKK2lteF9yZXF1ZXN0X2RtYShjaGFyICpuYW1lLCBpbXhfZG1hX3ByaW8gcHJpbywKKwkJdm9pZCAoKmlycV9oYW5kbGVyKSAoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAorCQl2b2lkICgqZXJyX2hhbmRsZXIpIChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksIHZvaWQgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaSwgZm91bmQgPSAwOworCisJLyogYmFzaWMgc2FuaXR5IGNoZWNrcyAqLworCWlmICghbmFtZSB8fCAhaXJxX2hhbmRsZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJLyogdHJ5IGdyYWJiaW5nIGEgRE1BIGNoYW5uZWwgd2l0aCB0aGUgcmVxdWVzdGVkIHByaW9yaXR5ICovCisJZm9yIChpID0gcHJpbzsgaSA8IHByaW8gKyAocHJpbyA9PSBETUFfUFJJT19MT1cpID8gOCA6IDQ7IGkrKykgeworCQlpZiAoIWRtYV9jaGFubmVsc1tpXS5uYW1lKSB7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghZm91bmQpIHsKKwkJLyogcmVxdWVzdGVkIHByaW8gZ3JvdXAgaXMgZnVsbCwgdHJ5IGhpZXIgcHJpb3JpdGllcyAqLworCQlmb3IgKGkgPSBwcmlvIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJCWlmICghZG1hX2NoYW5uZWxzW2ldLm5hbWUpIHsKKwkJCQlmb3VuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZm91bmQpIHsKKwkJRElNUiAmPSB+KDEgPDwgaSk7CisJCWRtYV9jaGFubmVsc1tpXS5uYW1lID0gbmFtZTsKKwkJZG1hX2NoYW5uZWxzW2ldLmlycV9oYW5kbGVyID0gaXJxX2hhbmRsZXI7CisJCWRtYV9jaGFubmVsc1tpXS5lcnJfaGFuZGxlciA9IGVycl9oYW5kbGVyOworCQlkbWFfY2hhbm5lbHNbaV0uZGF0YSA9IGRhdGE7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gbW9yZSBhdmFpbGFibGUgRE1BIGNoYW5uZWxzIGZvciAlc1xuIiwKKwkJICAgICAgIG5hbWUpOworCQlpID0gLUVOT0RFVjsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIGk7Cit9CisKK3ZvaWQKK2lteF9mcmVlX2RtYShpbnQgZG1hX2NoKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWRtYV9jaGFubmVsc1tkbWFfY2hdLm5hbWUpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVAorCQkgICAgICAgIiVzOiB0cnlpbmcgdG8gZnJlZSBjaGFubmVsICVkIHdoaWNoIGlzIGFscmVhZHkgZnJlZWRcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGRtYV9jaCk7CisJCXJldHVybjsKKwl9CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJRElNUiAmPSB+KDEgPDwgZG1hX2NoKTsKKwlkbWFfY2hhbm5lbHNbZG1hX2NoXS5uYW1lID0gTlVMTDsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorZG1hX2Vycl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGksIGRpc3IgPSBESVNSOworCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbDsKKwl1bnNpZ25lZCBpbnQgZXJyX21hc2sgPSBEQlRPU1IgfCBEUlRPU1IgfCBEU0VTUiB8IERCT1NSOworCisJRElTUiA9IGRpc3I7CisJZm9yIChpID0gMDsgaSA8IDExOyBpKyspIHsKKwkJY2hhbm5lbCA9ICZkbWFfY2hhbm5lbHNbaV07CisKKwkJaWYgKCAoZXJyX21hc2sgJiAxPDxpKSAmJiBjaGFubmVsLT5uYW1lICYmIGNoYW5uZWwtPmVycl9oYW5kbGVyKSB7CisJCQljaGFubmVsLT5lcnJfaGFuZGxlcihpLCBjaGFubmVsLT5kYXRhLCByZWdzKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKERCVE9TUiAmICgxIDw8IGkpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIkJ1cnN0IHRpbWVvdXQgb24gY2hhbm5lbCAlZCAoJXMpXG4iLAorCQkJICAgICAgIGksIGNoYW5uZWwtPm5hbWUpOworCQkJREJUT1NSIHw9ICgxIDw8IGkpOworCQl9CisJCWlmIChEUlRPU1IgJiAoMSA8PCBpKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJSZXF1ZXN0IHRpbWVvdXQgb24gY2hhbm5lbCAlZCAoJXMpXG4iLAorCQkJICAgICAgIGksIGNoYW5uZWwtPm5hbWUpOworCQkJRFJUT1NSIHw9ICgxIDw8IGkpOworCQl9CisJCWlmIChEU0VTUiAmICgxIDw8IGkpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIlRyYW5zZmVyIHRpbWVvdXQgb24gY2hhbm5lbCAlZCAoJXMpXG4iLAorCQkJICAgICAgIGksIGNoYW5uZWwtPm5hbWUpOworCQkJRFNFU1IgfD0gKDEgPDwgaSk7CisJCX0KKwkJaWYgKERCT1NSICYgKDEgPDwgaSkpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiQnVmZmVyIG92ZXJmbG93IHRpbWVvdXQgb24gY2hhbm5lbCAlZCAoJXMpXG4iLAorCQkJICAgICAgIGksIGNoYW5uZWwtPm5hbWUpOworCQkJREJPU1IgfD0gKDEgPDwgaSk7CisJCX0KKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK2RtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBpLCBkaXNyID0gRElTUjsKKworCURJU1IgPSBkaXNyOworCWZvciAoaSA9IDA7IGkgPCAxMTsgaSsrKSB7CisJCWlmIChkaXNyICYgKDEgPDwgaSkpIHsKKwkJCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCA9ICZkbWFfY2hhbm5lbHNbaV07CisJCQlpZiAoY2hhbm5lbC0+bmFtZSAmJiBjaGFubmVsLT5pcnFfaGFuZGxlcikgeworCQkJCWNoYW5uZWwtPmlycV9oYW5kbGVyKGksIGNoYW5uZWwtPmRhdGEsIHJlZ3MpOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIElSUSBmb3IgYW4gdW5yZWdpc3RlcmVkIERNQSBjaGFubmVsOgorCQkJCSAqIGxldCdzIGNsZWFyIHRoZSBpbnRlcnJ1cHRzIGFuZCBkaXNhYmxlIGl0LgorCQkJCSAqLworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAgICAgInNwdXJpb3VzIElSUSBmb3IgRE1BIGNoYW5uZWwgJWRcbiIsIGkpOworCQkJfQorCQl9CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBfX2luaXQKK2lteF9kbWFfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwkvKiByZXNldCBETUEgbW9kdWxlICovCisJRENSID0gRENSX0RSU1Q7CisKKwlyZXQgPSByZXF1ZXN0X2lycShETUFfSU5ULCBkbWFfaXJxX2hhbmRsZXIsIDAsICJETUEiLCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0NSSVQgIldvdyEgIENhbid0IHJlZ2lzdGVyIElSUSBmb3IgRE1BXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShETUFfRVJSLCBkbWFfZXJyX2hhbmRsZXIsIDAsICJETUEiLCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0NSSVQgIldvdyEgIENhbid0IHJlZ2lzdGVyIEVSUklSUSBmb3IgRE1BXG4iKTsKKwkJZnJlZV9pcnEoRE1BX0lOVCwgTlVMTCk7CisJfQorCisJLyogZW5hYmxlIERNQSBtb2R1bGUgKi8KKwlEQ1IgPSBEQ1JfREVOOworCisJLyogY2xlYXIgYWxsIGludGVycnVwdHMgKi8KKwlESVNSID0gMHgzZmY7CisKKwkvKiBlbmFibGUgaW50ZXJydXB0cyAqLworCURJTVIgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworYXJjaF9pbml0Y2FsbChpbXhfZG1hX2luaXQpOworCitFWFBPUlRfU1lNQk9MKGlteF9yZXF1ZXN0X2RtYSk7CitFWFBPUlRfU1lNQk9MKGlteF9mcmVlX2RtYSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLWlteC9nZW5lcmljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQzNzdkMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2dlbmVyaWMuYwpAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAqICBhcmNoL2FybS9tYWNoLWlteC9nZW5lcmljLmMKKyAqCisgKiAgYXV0aG9yOiBTYXNjaGEgSGF1ZXIKKyAqICBDcmVhdGVkOiBhcHJpbCAyMHRoLCAyMDA0CisgKiAgQ29weXJpZ2h0OiBTeW5lcnRyb25peHggR21iSAorICoKKyAqICBDb21tb24gY29kZSBmb3IgaS5NWCBtYWNoaW5lcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKwordm9pZCBpbXhfZ3Bpb19tb2RlKGludCBncGlvX21vZGUpCit7CisJdW5zaWduZWQgaW50IHBpbiA9IGdwaW9fbW9kZSAmIEdQSU9fUElOX01BU0s7CisJdW5zaWduZWQgaW50IHBvcnQgPSAoZ3Bpb19tb2RlICYgR1BJT19QT1JUX01BU0spID4+IDU7CisJdW5zaWduZWQgaW50IG9jciA9IChncGlvX21vZGUgJiBHUElPX09DUl9NQVNLKSA+PiAxMDsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJLyogUHVsbHVwIGVuYWJsZSAqLworCWlmKGdwaW9fbW9kZSAmIEdQSU9fUFVFTikKKwkJUFVFTihwb3J0KSB8PSAoMTw8cGluKTsKKwllbHNlCisJCVBVRU4ocG9ydCkgJj0gfigxPDxwaW4pOworCisJLyogRGF0YSBkaXJlY3Rpb24gKi8KKwlpZihncGlvX21vZGUgJiBHUElPX09VVCkKKwkJRERJUihwb3J0KSB8PSAxPDxwaW47CisJZWxzZQorCQlERElSKHBvcnQpICY9IH4oMTw8cGluKTsKKworCS8qIFByaW1hcnkgLyBhbHRlcm5hdGUgZnVuY3Rpb24gKi8KKwlpZihncGlvX21vZGUgJiBHUElPX0FGKQorCQlHUFIocG9ydCkgfD0gKDE8PHBpbik7CisJZWxzZQorCQlHUFIocG9ydCkgJj0gfigxPDxwaW4pOworCisJLyogdXNlIGFzIGdwaW8/ICovCisJaWYoIG9jciA9PSAzICkKKwkJR0lVUyhwb3J0KSB8PSAoMTw8cGluKTsKKwllbHNlCisJCUdJVVMocG9ydCkgJj0gfigxPDxwaW4pOworCisJLyogT3V0cHV0IC8gaW5wdXQgY29uZmlndXJhdGlvbiAqLworCS8qIEZJWE1FOiBJJ20gbm90IHZlcnkgc3VyZSBhYm91dCBPQ1IgYW5kIElDT05GLCBzb21lb25lCisJICogc2hvdWxkIGhhdmUgYSBsb29rIG92ZXIgaXQKKwkgKi8KKwlpZihwaW48MTYpIHsKKwkJdG1wID0gT0NSMShwb3J0KTsKKwkJdG1wICY9IH4oIDM8PChwaW4qMikpOworCQl0bXAgfD0gKG9jciA8PCAocGluKjIpKTsKKwkJT0NSMShwb3J0KSA9IHRtcDsKKworCQlpZiggZ3Bpb19tb2RlICYJR1BJT19BT1VUICkKKwkJCUlDT05GQTEocG9ydCkgJj0gfiggMzw8KHBpbioyKSk7CisJCWlmKCBncGlvX21vZGUgJglHUElPX0JPVVQgKQorCQkJSUNPTkZCMShwb3J0KSAmPSB+KCAzPDwocGluKjIpKTsKKwl9IGVsc2UgeworCQl0bXAgPSBPQ1IyKHBvcnQpOworCQl0bXAgJj0gfiggMzw8KChwaW4tMTYpKjIpKTsKKwkJdG1wIHw9IChvY3IgPDwgKChwaW4tMTYpKjIpKTsKKwkJT0NSMihwb3J0KSA9IHRtcDsKKworCQlpZiggZ3Bpb19tb2RlICYJR1BJT19BT1VUICkKKwkJCUlDT05GQTIocG9ydCkgJj0gfiggMzw8KChwaW4tMTYpKjIpKTsKKwkJaWYoIGdwaW9fbW9kZSAmCUdQSU9fQk9VVCApCisJCQlJQ09ORkIyKHBvcnQpICY9IH4oIDM8PCgocGluLTE2KSoyKSk7CisJfQorfQorCitFWFBPUlRfU1lNQk9MKGlteF9ncGlvX21vZGUpOworCisvKgorICogIGdldCB0aGUgc3lzdGVtIHBsbCBjbG9jayBpbiBIegorICoKKyAqICAgICAgICAgICAgICAgICAgbWZpICsgbWZuIC8gKG1mZCArMSkKKyAqICBmID0gMiAqIGZfcmVmICogLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgcGQgKyAxCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW14X2RlY29kZV9wbGwodW5zaWduZWQgaW50IHBsbCkKK3sKKwl1MzIgbWZpID0gKHBsbCA+PiAxMCkgJiAweGY7CisJdTMyIG1mbiA9IHBsbCAmIDB4M2ZmOworCXUzMiBtZmQgPSAocGxsID4+IDE2KSAmIDB4M2ZmOworCXUzMiBwZCA9ICAocGxsID4+IDI2KSAmIDB4ZjsKKwl1MzIgZl9yZWYgPSAoQ1NDUiAmIENTQ1JfU1lTVEVNX1NFTCkgPyAxNjAwMDAwMCA6IChDTEszMiAqIDUxMik7CisKKwltZmkgPSBtZmkgPD0gNSA/IDUgOiBtZmk7CisKKwlyZXR1cm4gKDIgKiAoZl9yZWY+PjEwKSAqICggKG1maTw8MTApICsgKG1mbjw8MTApIC8gKG1mZCsxKSApKSAvIChwZCsxKTsKK30KKwordW5zaWduZWQgaW50IGlteF9nZXRfc3lzdGVtX2Nsayh2b2lkKQoreworCXJldHVybiBpbXhfZGVjb2RlX3BsbChTUENUTDApOworfQorRVhQT1JUX1NZTUJPTChpbXhfZ2V0X3N5c3RlbV9jbGspOworCit1bnNpZ25lZCBpbnQgaW14X2dldF9tY3VfY2xrKHZvaWQpCit7CisJcmV0dXJuIGlteF9kZWNvZGVfcGxsKE1QQ1RMMCk7Cit9CitFWFBPUlRfU1lNQk9MKGlteF9nZXRfbWN1X2Nsayk7CisKKy8qCisgKiAgZ2V0IHBlcmlwaGVyYWwgY2xvY2sgMSAoIFVBUlRbMTJdLCBUaW1lclsxMl0sIFBXTSApCisgKi8KK3Vuc2lnbmVkIGludCBpbXhfZ2V0X3BlcmNsazEodm9pZCkKK3sKKwlyZXR1cm4gaW14X2dldF9zeXN0ZW1fY2xrKCkgLyAoKChQQ0RSKSAmIDB4ZikrMSk7Cit9CitFWFBPUlRfU1lNQk9MKGlteF9nZXRfcGVyY2xrMSk7CisKKy8qCisgKiAgZ2V0IHBlcmlwaGVyYWwgY2xvY2sgMiAoIExDRCwgU0QsIFNQSVsxMl0gKQorICovCit1bnNpZ25lZCBpbnQgaW14X2dldF9wZXJjbGsyKHZvaWQpCit7CisJcmV0dXJuIGlteF9nZXRfc3lzdGVtX2NsaygpIC8gKCgoUENEUj4+NCkgJiAweGYpKzEpOworfQorRVhQT1JUX1NZTUJPTChpbXhfZ2V0X3BlcmNsazIpOworCisvKgorICogIGdldCBwZXJpcGhlcmFsIGNsb2NrIDMgKCBTU0kgKQorICovCit1bnNpZ25lZCBpbnQgaW14X2dldF9wZXJjbGszKHZvaWQpCit7CisJcmV0dXJuIGlteF9nZXRfc3lzdGVtX2NsaygpIC8gKCgoUENEUj4+MTYpICYgMHg3ZikrMSk7Cit9CitFWFBPUlRfU1lNQk9MKGlteF9nZXRfcGVyY2xrMyk7CisKKy8qCisgKiAgZ2V0IGhjbGsgKCBTRFJBTSwgQ1NJLCBNZW1vcnkgU3RpY2ssIEkyQywgRE1BICkKKyAqLwordW5zaWduZWQgaW50IGlteF9nZXRfaGNsayh2b2lkKQoreworCXJldHVybiBpbXhfZ2V0X3N5c3RlbV9jbGsoKSAvICgoKENTQ1I+PjEwKSAmIDB4ZikrMSk7Cit9CitFWFBPUlRfU1lNQk9MKGlteF9nZXRfaGNsayk7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X21tY19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4MDAyMTQwMDAsCisJCS5lbmQJPSAweDAwMjE0MEZGLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gKFNESENfSU5UKSwKKwkJLmVuZAk9IChTREhDX0lOVCksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfbW1jX2RldmljZSA9IHsKKwkubmFtZQkJPSAiaW14LW1tYyIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGlteF9tbWNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBpbXhfbW1jX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3VhcnQxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHgwMDIwNjAwMCwKKwkJLmVuZAk9IDB4MDAyMDYwRkYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSAoVUFSVDFfTUlOVF9SWCksCisJCS5lbmQJPSAoVUFSVDFfTUlOVF9SWCksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSAoVUFSVDFfTUlOVF9UWCksCisJCS5lbmQJPSAoVUFSVDFfTUlOVF9UWCksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfdWFydDFfZGV2aWNlID0geworCS5uYW1lCQk9ICJpbXgtdWFydCIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGlteF91YXJ0MV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGlteF91YXJ0MV9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF91YXJ0Ml9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4MDAyMDcwMDAsCisJCS5lbmQJPSAweDAwMjA3MEZGLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gKFVBUlQyX01JTlRfUlgpLAorCQkuZW5kCT0gKFVBUlQyX01JTlRfUlgpLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gKFVBUlQyX01JTlRfVFgpLAorCQkuZW5kCT0gKFVBUlQyX01JTlRfVFgpLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3VhcnQyX2RldmljZSA9IHsKKwkubmFtZQkJPSAiaW14LXVhcnQiLAorCS5pZAkJPSAxLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpbXhfdWFydDJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBpbXhfdWFydDJfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhmYl9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4MDAyMDUwMDAsCisJCS5lbmQJPSAweDAwMjA1MEZGLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gTENEQ19JTlQsCisJCS5lbmQJPSBMQ0RDX0lOVCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteGZiX2RldmljZSA9IHsKKwkubmFtZQkJPSAiaW14LWZiIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaW14ZmJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBpbXhmYl9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmlteF9tbWNfZGV2aWNlLAorCSZpbXhmYl9kZXZpY2UsCisJJmlteF91YXJ0MV9kZXZpY2UsCisJJmlteF91YXJ0Ml9kZXZpY2UsCit9OworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGlteF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwkvKiB2aXJ0dWFsICAgICBwaHlzaWNhbCAgICBsZW5ndGggICAgICB0eXBlICovCisJe0lNWF9JT19CQVNFLCBJTVhfSU9fUEhZUywgSU1YX0lPX1NJWkUsIE1UX0RFVklDRX0sCit9OworCit2b2lkIF9faW5pdAoraW14X21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdChpbXhfaW9fZGVzYywgQVJSQVlfU0laRShpbXhfaW9fZGVzYykpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpbXhfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKK30KKworc3Vic3lzX2luaXRjYWxsKGlteF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2dlbmVyaWMuaCBiL2FyY2gvYXJtL21hY2gtaW14L2dlbmVyaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTEwMDNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvZ2VuZXJpYy5oCkBAIC0wLDAgKzEsMTYgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1pbXgvZ2VuZXJpYy5oCisgKgorICogQXV0aG9yOglTYXNjaGEgSGF1ZXIgPHNhc2NoYUBzYXNjaGFoYXVlci5kZT4KKyAqIENvcHlyaWdodDoJU3luZXJ0cm9uaXh4IEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKK2V4dGVybiB2b2lkIF9faW5pdCBpbXhfbWFwX2lvKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IGlteF9pbml0X2lycSh2b2lkKTsKKworc3RydWN0IHN5c190aW1lcjsKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIGlteF90aW1lcjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2lycS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMyNzEzNDI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvaXJxLmMKQEAgLTAsMCArMSwyNTIgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1pbXgvaXJxLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIFNoYW5lIE5heSAoc2hhbmVAbWluaXJsLmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogIDAzLzAzLzIwMDQgICBTYXNjaGEgSGF1ZXIgPHNhc2NoYUBzYXNjaGFoYXVlci5kZT4KKyAqICAgICAgICAgICAgICAgQ29waWVkIGZyb20gdGhlIG1vdG9yb2xhIGJzcCBwYWNrYWdlIGFuZCBhZGRlZCBncGlvIGRlbXV4CisgKiAgICAgICAgICAgICAgIGludGVycnVwdCBoYW5kbGVyCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisvKgorICoKKyAqIFdlIHNpbXBseSB1c2UgdGhlIEVOQUJMRSBESVNBQkxFIHJlZ2lzdGVycyBpbnNpZGUgb2YgdGhlIElNWAorICogdG8gdHVybiBvbi9vZmYgc3BlY2lmaWMgaW50ZXJydXB0cy4gIEZJWE1FLSBXZSBzaG91bGQKKyAqIGFsc28gYWRkIHN1cHBvcnQgZm9yIHRoZSBhY2NlbGVyYXRlZCBpbnRlcnJ1cHQgY29udHJvbGxlcgorICogYnkgcHV0dGluZyBvZmZldHMgdG8gaXJxIGp1bXAgY29kZSBpbiB0aGUgYXBwcm9wcmlhdGUKKyAqIHBsYWNlcy4KKyAqCisgKi8KKworI2RlZmluZSBJTlRFTk5VTV9PRkYgICAgICAgICAgICAgIDB4OAorI2RlZmluZSBJTlRESVNOVU1fT0ZGICAgICAgICAgICAgIDB4QworCisjZGVmaW5lIFZBX0FJVENfQkFTRSAgICAgICAgICAgICAgSU9fQUREUkVTUyhJTVhfQUlUQ19CQVNFKQorI2RlZmluZSBJTVhfQUlUQ19JTlRESVNOVU0gICAgICAgKFZBX0FJVENfQkFTRSArIElOVERJU05VTV9PRkYpCisjZGVmaW5lIElNWF9BSVRDX0lOVEVOTlVNICAgICAgICAoVkFfQUlUQ19CQVNFICsgSU5URU5OVU1fT0ZGKQorCisjaWYgMAorI2RlZmluZSBERUJVR19JUlEoZm10Li4uKQlwcmludGsoZm10KQorI2Vsc2UKKyNkZWZpbmUgREVCVUdfSVJRKGZtdC4uLikJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0YXRpYyB2b2lkCitpbXhfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlfX3Jhd193cml0ZWwoaXJxLCBJTVhfQUlUQ19JTlRESVNOVU0pOworfQorCitzdGF0aWMgdm9pZAoraW14X3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlfX3Jhd193cml0ZWwoaXJxLCBJTVhfQUlUQ19JTlRFTk5VTSk7Cit9CisKK3N0YXRpYyBpbnQKK2lteF9ncGlvX2lycV90eXBlKHVuc2lnbmVkIGludCBfaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgaXJxX3R5cGUgPSAwLCBpcnEsIHJlZywgYml0OworCisJaXJxID0gX2lycSAtIElSUV9HUElPQSgwKTsKKwlyZWcgPSBpcnEgPj4gNTsKKwliaXQgPSAxIDw8IChpcnEgJSAzMik7CisKKwlpZiAodHlwZSA9PSBJUlFUX1BST0JFKSB7CisJCS8qIERvbid0IG1lc3Mgd2l0aCBlbmFibGVkIEdQSU9zIHVzaW5nIHByZWNvbmZpZ3VyZWQgZWRnZXMgb3IKKwkJICAgR1BJT3Mgc2V0IHRvIGFsdGVybmF0ZSBmdW5jdGlvbiBkdXJpbmcgcHJvYmUgKi8KKwkJLyogVE9ETzogc3VwcG9ydCBwcm9iZSAqLworLy8gICAgICAgICAgICAgIGlmICgoR1BJT19JUlFfcmlzaW5nX2VkZ2VbaWR4XSB8IEdQSU9fSVJRX2ZhbGxpbmdfZWRnZVtpZHhdKSAmCisvLyAgICAgICAgICAgICAgICAgIEdQSU9fYml0KGdwaW8pKQorLy8gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisvLyAgICAgICAgICAgICAgaWYgKEdBRlIoZ3BpbykgJiAoMHgzIDw8ICgoKGdwaW8pICYgMHhmKSoyKSkpCisvLyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKy8vICAgICAgICAgICAgICB0eXBlID0gX19JUlFUX1JJU0VER0UgfCBfX0lSUVRfRkFMRURHRTsKKwl9CisKKwlHSVVTKHJlZykgfD0gYml0OworCURESVIocmVnKSAmPSB+KGJpdCk7CisKKwlERUJVR19JUlEoInNldHRpbmcgdHlwZSBvZiBpcnEgJWQgdG8gIiwgX2lycSk7CisKKwlpZiAodHlwZSAmIF9fSVJRVF9SSVNFREdFKSB7CisJCURFQlVHX0lSUSgicmlzaW5nIGVkZ2VzXG4iKTsKKwkJaXJxX3R5cGUgPSAweDA7CisJfQorCWlmICh0eXBlICYgX19JUlFUX0ZBTEVER0UpIHsKKwkJREVCVUdfSVJRKCJmYWxsaW5nIGVkZ2VzXG4iKTsKKwkJaXJxX3R5cGUgPSAweDE7CisJfQorCWlmICh0eXBlICYgX19JUlFUX0xPV0xWTCkgeworCQlERUJVR19JUlEoImxvdyBsZXZlbFxuIik7CisJCWlycV90eXBlID0gMHgzOworCX0KKwlpZiAodHlwZSAmIF9fSVJRVF9ISUdITFZMKSB7CisJCURFQlVHX0lSUSgiaGlnaCBsZXZlbFxuIik7CisJCWlycV90eXBlID0gMHgyOworCX0KKworCWlmIChpcnEgJSAzMiA8IDE2KSB7CisJCUlDUjEocmVnKSA9IChJQ1IxKHJlZykgJiB+KDB4MyA8PCAoKGlycSAlIDE2KSAqIDIpKSkgfAorCQkgICAgKGlycV90eXBlIDw8ICgoaXJxICUgMTYpICogMikpOworCX0gZWxzZSB7CisJCUlDUjIocmVnKSA9IChJQ1IyKHJlZykgJiB+KDB4MyA8PCAoKGlycSAlIDE2KSAqIDIpKSkgfAorCQkgICAgKGlycV90eXBlIDw8ICgoaXJxICUgMTYpICogMikpOworCX0KKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyB2b2lkCitpbXhfZ3Bpb19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJREVCVUdfSVJRKCIlczogaXJxICVkXG4iLCBfX0ZVTkNUSU9OX18sIGlycSk7CisJSVNSKElSUV9UT19SRUcoaXJxKSkgfD0gMSA8PCAoKGlycSAtIElSUV9HUElPQSgwKSkgJSAzMik7Cit9CisKK3N0YXRpYyB2b2lkCitpbXhfZ3Bpb19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCURFQlVHX0lSUSgiJXM6IGlycSAlZFxuIiwgX19GVU5DVElPTl9fLCBpcnEpOworCUlNUihJUlFfVE9fUkVHKGlycSkpICY9IH4oIDEgPDwgKChpcnEgLSBJUlFfR1BJT0EoMCkpICUgMzIpKTsKK30KKworc3RhdGljIHZvaWQKK2lteF9ncGlvX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlERUJVR19JUlEoIiVzOiBpcnEgJWRcbiIsIF9fRlVOQ1RJT05fXywgaXJxKTsKKwlJTVIoSVJRX1RPX1JFRyhpcnEpKSB8PSAxIDw8ICgoaXJxIC0gSVJRX0dQSU9BKDApKSAlIDMyKTsKK30KKworc3RhdGljIHZvaWQKK2lteF9ncGlvX2hhbmRsZXIodW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCBpcnEsCisgICAgICAgICAgICAgICAgIHN0cnVjdCBpcnFkZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJd2hpbGUgKG1hc2spIHsKKwkJaWYgKG1hc2sgJiAxKSB7CisJCQlERUJVR19JUlEoImhhbmRsaW5nIGlycSAlZFxuIiwgaXJxKTsKKwkJCWRlc2MtPmhhbmRsZShpcnEsIGRlc2MsIHJlZ3MpOworCQl9CisJCWlycSsrOworCQlkZXNjKys7CisJCW1hc2sgPj49IDE7CisJfQorfQorCitzdGF0aWMgdm9pZAoraW14X2dwaW9hX2RlbXV4X2hhbmRsZXIodW5zaWduZWQgaW50IGlycV91bnVzZWQsIHN0cnVjdCBpcnFkZXNjICpkZXNjLAorCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IG1hc2ssIGlycTsKKworCW1hc2sgPSBJU1IoMCk7CisJaXJxID0gSVJRX0dQSU9BKDApOworCWlteF9ncGlvX2hhbmRsZXIobWFzaywgaXJxLCBkZXNjLCByZWdzKTsKK30KKworc3RhdGljIHZvaWQKK2lteF9ncGlvYl9kZW11eF9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnFfdW51c2VkLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywKKwkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBtYXNrLCBpcnE7CisKKwltYXNrID0gSVNSKDEpOworCWlycSA9IElSUV9HUElPQigwKTsKKwlpbXhfZ3Bpb19oYW5kbGVyKG1hc2ssIGlycSwgZGVzYywgcmVncyk7Cit9CisKK3N0YXRpYyB2b2lkCitpbXhfZ3Bpb2NfZGVtdXhfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxX3VudXNlZCwgc3RydWN0IGlycWRlc2MgKmRlc2MsCisJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgbWFzaywgaXJxOworCisJbWFzayA9IElTUigyKTsKKwlpcnEgPSBJUlFfR1BJT0MoMCk7CisJaW14X2dwaW9faGFuZGxlcihtYXNrLCBpcnEsIGRlc2MsIHJlZ3MpOworfQorCitzdGF0aWMgdm9pZAoraW14X2dwaW9kX2RlbXV4X2hhbmRsZXIodW5zaWduZWQgaW50IGlycV91bnVzZWQsIHN0cnVjdCBpcnFkZXNjICpkZXNjLAorCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IG1hc2ssIGlycTsKKworCW1hc2sgPSBJU1IoMyk7CisJaXJxID0gSVJRX0dQSU9EKDApOworCWlteF9ncGlvX2hhbmRsZXIobWFzaywgaXJxLCBkZXNjLCByZWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIGlteF9pbnRlcm5hbF9jaGlwID0geworCS5hY2sgPSBpbXhfbWFza19pcnEsCisJLm1hc2sgPSBpbXhfbWFza19pcnEsCisJLnVubWFzayA9IGlteF91bm1hc2tfaXJxLAorfTsKKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIGlteF9ncGlvX2NoaXAgPSB7CisJLmFjayA9IGlteF9ncGlvX2Fja19pcnEsCisJLm1hc2sgPSBpbXhfZ3Bpb19tYXNrX2lycSwKKwkudW5tYXNrID0gaW14X2dwaW9fdW5tYXNrX2lycSwKKwkudHlwZSA9IGlteF9ncGlvX2lycV90eXBlLAorfTsKKwordm9pZCBfX2luaXQKK2lteF9pbml0X2lycSh2b2lkKQoreworCXVuc2lnbmVkIGludCBpcnE7CisKKwlERUJVR19JUlEoIkluaXRpYWxpemluZyBpbXggaW50ZXJydXB0c1xuIik7CisKKwkvKiBNYXNrIGFsbCBpbnRlcnJ1cHRzIGluaXRpYWxseSAqLworCUlNUigwKSA9IDA7CisJSU1SKDEpID0gMDsKKwlJTVIoMikgPSAwOworCUlNUigzKSA9IDA7CisKKwlmb3IgKGlycSA9IDA7IGlycSA8IElNWF9JUlFTOyBpcnErKykgeworCQlzZXRfaXJxX2NoaXAoaXJxLCAmaW14X2ludGVybmFsX2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBkb19sZXZlbF9JUlEpOworCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7CisJfQorCisJZm9yIChpcnEgPSBJUlFfR1BJT0EoMCk7IGlycSA8IElSUV9HUElPRCgzMik7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZpbXhfZ3Bpb19jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgZG9fZWRnZV9JUlEpOworCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7CisJfQorCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoR1BJT19JTlRfUE9SVEEsIGlteF9ncGlvYV9kZW11eF9oYW5kbGVyKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihHUElPX0lOVF9QT1JUQiwgaW14X2dwaW9iX2RlbXV4X2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKEdQSU9fSU5UX1BPUlRDLCBpbXhfZ3Bpb2NfZGVtdXhfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoR1BJT19JTlRfUE9SVEQsIGlteF9ncGlvZF9kZW11eF9oYW5kbGVyKTsKKworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgaW5pdGlhbGx5LiAqLworCS8qIEluIElNWCB0aGlzIGlzIGRvbmUgaW4gdGhlIGJvb3Rsb2FkZXIuICovCit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9sZWRzLW14MWFkcy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbGVkcy1teDFhZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjM5OWIwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbGVkcy1teDFhZHMuYwpAQCAtMCwwICsxLDU0IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1pbXgvbGVkcy1teDFhZHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBTYXNjaGEgSGF1ZXIgPHNhc2NoYUBzYXNjaGFoYXVlci5kZT4KKyAqCisgKiBPcmlnaW5hbCAobGVkcy1mb290YnJpZGdlLmMpIGJ5IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9sZWRzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlICJsZWRzLmgiCisKKy8qCisgKiBUaGUgTVgxQURTIEJvYXJkIGhhcyBvbmx5IG9uZSB1c2FibGUgTEVELAorICogc28gc2VsZWN0IG9ubHkgdGhlIHRpbWVyIGxlZCBvciB0aGUKKyAqIGNwdSB1c2FnZSBsZWQKKyAqLwordm9pZAorbXgxYWRzX2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgbGVkZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzd2l0Y2ggKGxlZGV2dCkgeworI2lmZGVmIENPTkZJR19MRURTX0NQVQorCWNhc2UgbGVkX2lkbGVfc3RhcnQ6CisJCURSKDApICY9IH4oMTw8Mik7CisJCWJyZWFrOworCisJY2FzZSBsZWRfaWRsZV9lbmQ6CisJCURSKDApIHw9IDE8PDI7CisJCWJyZWFrOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTEVEU19USU1FUgorCWNhc2UgbGVkX3RpbWVyOgorCQlEUigwKSBePSAxPDwyOworI2VuZGlmCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2xlZHMuYyBiL2FyY2gvYXJtL21hY2gtaW14L2xlZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzFjMWRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbGVkcy5jCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWlteC9sZWRzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgU2FzY2hhIEhhdWVyIDxzYXNjaGFAc2FzY2hhaGF1ZXIuZGU+CisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlICJsZWRzLmgiCisKK3N0YXRpYyBpbnQgX19pbml0CitsZWRzX2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19teDFhZHMoKSkgeworCQlsZWRzX2V2ZW50ID0gbXgxYWRzX2xlZHNfZXZlbnQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK19faW5pdGNhbGwobGVkc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2xlZHMuaCBiL2FyY2gvYXJtL21hY2gtaW14L2xlZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2ZhMjFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbGVkcy5oCkBAIC0wLDAgKzEsOSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9sZWRzLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2FzY2hhIEhhdWVyIDxzYXNjaGFAc2FzY2hhaGF1ZXIuZGU+CisgKgorICogYmxpbmt5IGxpZ2h0cyBmb3IgSU1YLWJhc2VkIHN5c3RlbXMKKyAqCisgKi8KK2V4dGVybiB2b2lkIG14MWFkc19sZWRzX2V2ZW50KGxlZF9ldmVudF90IGV2dCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9teDFhZHMuYyBiL2FyY2gvYXJtL21hY2gtaW14L214MWFkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNWRkMDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9teDFhZHMuYwpAQCAtMCwwICsxLDg4IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1pbXgvbXgxYWRzLmMKKyAqCisgKiBJbml0aWFsbHkgYmFzZWQgb246CisgKglsaW51eC0yLjYuNy1pbXgvYXJjaC9hcm0vbWFjaC1pbXgvc2NiOTMyOC5jCisgKglDb3B5cmlnaHQgKGMpIDIwMDQgU2FzY2hhIEhhdWVyIDxzYXNjaGFAc2FzY2hhaGF1ZXIuZGU+CisgKgorICogMjAwNCAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorI2luY2x1ZGUgPGFzbS9zZXJpYWwuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteDFhZHNfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBJTVhfQ1M0X1ZJUlQsCisJCS5lbmQJPSBJTVhfQ1M0X1ZJUlQgKyAxNiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IDEzLAorCQkuZW5kCT0gMTMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDFhZHNfZGV2aWNlID0geworCS5uYW1lCQk9ICJteDFhZHMiLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShteDFhZHNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBteDFhZHNfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZteDFhZHNfZGV2aWNlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0CitteDFhZHNfaW5pdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19MRURTCisJaW14X2dwaW9fbW9kZShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX0dQSU8gfCAyKTsKKyNlbmRpZgorCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworfQorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG14MWFkc19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwkvKiB2aXJ0dWFsICAgICBwaHlzaWNhbCAgICBsZW5ndGggICAgICB0eXBlICovCisJe0lNWF9DUzBfVklSVCwgSU1YX0NTMF9QSFlTLCBJTVhfQ1MwX1NJWkUsIE1UX0RFVklDRX0sCisJe0lNWF9DUzFfVklSVCwgSU1YX0NTMV9QSFlTLCBJTVhfQ1MxX1NJWkUsIE1UX0RFVklDRX0sCisJe0lNWF9DUzJfVklSVCwgSU1YX0NTMl9QSFlTLCBJTVhfQ1MyX1NJWkUsIE1UX0RFVklDRX0sCisJe0lNWF9DUzNfVklSVCwgSU1YX0NTM19QSFlTLCBJTVhfQ1MzX1NJWkUsIE1UX0RFVklDRX0sCisJe0lNWF9DUzRfVklSVCwgSU1YX0NTNF9QSFlTLCBJTVhfQ1M0X1NJWkUsIE1UX0RFVklDRX0sCisJe0lNWF9DUzVfVklSVCwgSU1YX0NTNV9QSFlTLCBJTVhfQ1M1X1NJWkUsIE1UX0RFVklDRX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQKK214MWFkc19tYXBfaW8odm9pZCkKK3sKKwlpbXhfbWFwX2lvKCk7CisJaW90YWJsZV9pbml0KG14MWFkc19pb19kZXNjLCBBUlJBWV9TSVpFKG14MWFkc19pb19kZXNjKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoTVgxQURTLCAiTW90b3JvbGEgTVgxQURTIikKKwlNQUlOVEFJTkVSKCJTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4IikKKwlCT09UX01FTSgweDA4MDAwMDAwLCAweDAwMjAwMDAwLCAweGUwMjAwMDAwKQorCUJPT1RfUEFSQU1TKDB4MDgwMDAxMDApCisJTUFQSU8obXgxYWRzX21hcF9pbykKKwlJTklUSVJRKGlteF9pbml0X2lycSkKKwkudGltZXIJCT0gJmlteF90aW1lciwKKwlJTklUX01BQ0hJTkUobXgxYWRzX2luaXQpCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZjFlNTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlteC90aW1lLmMKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1pbXgvdGltZS5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMC0yMDAxIERlZXAgQmx1ZSBTb2x1dGlvbnMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgU2hhbmUgTmF5IChzaGFuZUBtaW5pcmwuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKKy8qIFVzZSB0aW1lciAxIGFzIHN5c3RlbSB0aW1lciAqLworI2RlZmluZSBUSU1FUl9CQVNFIElNWF9USU0xX0JBU0UKKworLyoKKyAqIFJldHVybnMgbnVtYmVyIG9mIHVzIHNpbmNlIGxhc3QgY2xvY2sgaW50ZXJydXB0LiAgTm90ZSB0aGF0IGludGVycnVwdHMKKyAqIHdpbGwgaGF2ZSBiZWVuIGRpc2FibGVkIGJ5IGRvX2dldHRpbWVvZmZzZXQoKQorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbXhfZ2V0dGltZW9mZnNldCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdGlja3M7CisKKwkvKgorCSAqIEdldCB0aGUgY3VycmVudCBudW1iZXIgb2YgdGlja3MuICBOb3RlIHRoYXQgdGhlcmUgaXMgYSByYWNlCisJICogY29uZGl0aW9uIGJldHdlZW4gdXMgcmVhZGluZyB0aGUgdGltZXIgYW5kIGNoZWNraW5nIGZvcgorCSAqIGFuIGludGVycnVwdC4gIFdlIGdldCBhcm91bmQgdGhpcyBieSBlbnN1cmluZyB0aGF0IHRoZQorCSAqIGNvdW50ZXIgaGFzIG5vdCByZWxvYWRlZCBiZXR3ZWVuIG91ciB0d28gcmVhZHMuCisJICovCisJdGlja3MgPSBJTVhfVENOKFRJTUVSX0JBU0UpOworCisJLyoKKwkgKiBJbnRlcnJ1cHQgcGVuZGluZz8gIElmIHNvLCB3ZSd2ZSByZWxvYWRlZCBvbmNlIGFscmVhZHkuCisJICovCisJaWYgKElNWF9UU1RBVChUSU1FUl9CQVNFKSAmIFRTVEFUX0NPTVApCisJCXRpY2tzICs9IExBVENIOworCisJLyoKKwkgKiBDb252ZXJ0IHRoZSB0aWNrcyB0byB1c2VjcworCSAqLworCXJldHVybiAoMTAwMDAwMCAvIENMSzMyKSAqIHRpY2tzOworfQorCisvKgorICogSVJRIGhhbmRsZXIgZm9yIHRoZSB0aW1lcgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QKK2lteF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKKworCS8qIGNsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KKwlpZiAoSU1YX1RTVEFUKFRJTUVSX0JBU0UpKQorCQlJTVhfVFNUQVQoVElNRVJfQkFTRSkgPSAwOworCisJdGltZXJfdGljayhyZWdzKTsKKwl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpbXhfdGltZXJfaXJxID0geworCS5uYW1lCQk9ICJpLk1YIFRpbWVyIFRpY2siLAorCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLmhhbmRsZXIJPSBpbXhfdGltZXJfaW50ZXJydXB0Cit9OworCisvKgorICogU2V0IHVwIHRpbWVyIGludGVycnVwdCwgYW5kIHJldHVybiB0aGUgY3VycmVudCB0aW1lIGluIHNlY29uZHMuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBpbXhfdGltZXJfaW5pdCh2b2lkKQoreworCS8qCisJICogSW5pdGlhbGlzZSB0byBhIGtub3duIHN0YXRlIChhbGwgdGltZXJzIG9mZiwgYW5kIHRpbWluZyByZXNldCkKKwkgKi8KKwlJTVhfVENUTChUSU1FUl9CQVNFKSA9IDA7CisJSU1YX1RQUkVSKFRJTUVSX0JBU0UpID0gMDsKKwlJTVhfVENNUChUSU1FUl9CQVNFKSA9IExBVENIIC0gMTsKKwlJTVhfVENUTChUSU1FUl9CQVNFKSA9IFRDVExfQ0xLXzMyIHwgVENUTF9JUlFFTiB8IFRDVExfVEVOOworCisJLyoKKwkgKiBNYWtlIGlycXMgaGFwcGVuIGZvciB0aGUgc3lzdGVtIHRpbWVyCisJICovCisJc2V0dXBfaXJxKFRJTTFfSU5ULCAmaW14X3RpbWVyX2lycSk7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgaW14X3RpbWVyID0geworCS5pbml0CQk9IGlteF90aW1lcl9pbml0LAorCS5vZmZzZXQJCT0gaW14X2dldHRpbWVvZmZzZXQsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjk3ZDE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL0tjb25maWcKQEAgLTAsMCArMSwzMyBAQAoraWYgQVJDSF9JTlRFR1JBVE9SCisKK21lbnUgIkludGVncmF0b3IgT3B0aW9ucyIKKworY29uZmlnIEFSQ0hfSU5URUdSQVRPUl9BUAorCWJvb2wgIlN1cHBvcnQgSW50ZWdyYXRvci9BUCBhbmQgSW50ZWdyYXRvci9QUDIgcGxhdGZvcm1zIgorCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBJbnRlZ3JhdG9yL0FQIGFuZAorCSAgSW50ZWdyYXRvci9QUDIgcGxhdGZvcm1zLgorCitjb25maWcgQVJDSF9JTlRFR1JBVE9SX0NQCisJYm9vbCAiU3VwcG9ydCBJbnRlZ3JhdG9yL0NQIHBsYXRmb3JtIgorCXNlbGVjdCBBUkNIX0NJTlRFR1JBVE9SCisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIEludGVncmF0b3IgQ1AgcGxhdGZvcm0uCisKK2NvbmZpZyBBUkNIX0NJTlRFR1JBVE9SCisJYm9vbAorCitjb25maWcgSU5URUdSQVRPUl9JTVBEMQorCXRyaXN0YXRlICJJbmNsdWRlIHN1cHBvcnQgZm9yIEludGVncmF0b3IvSU0tUEQxIgorCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SX0FQCisJaGVscAorCSAgVGhlIElNLVBEMSBpcyBhbiBhZGQtb24gbG9naWMgbW9kdWxlIGZvciB0aGUgSW50ZWdyYXRvciB3aGljaAorCSAgYWxsb3dzIEFSTShSKSBMdGQgUHJpbWVDZWxscyB0byBiZSBkZXZlbG9wZWQgYW5kIGV2YWx1YXRlZC4KKwkgIFRoZSBJTS1QRDEgY2FuIGJlIGZvdW5kIG9uIHRoZSBJbnRlZ3JhdG9yL1BQMiBwbGF0Zm9ybS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaW1wZDEuCisKK2VuZG1lbnUKKworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNThkYWFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL01ha2VmaWxlCkBAIC0wLDAgKzEsMTQgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisjCisKKyMgT2JqZWN0IGZpbGUgbGlzdHMuCisKK29iai15CQkJCQk6PSBjbG9jay5vIGNvcmUubyBsbS5vIHRpbWUubworb2JqLSQoQ09ORklHX0FSQ0hfSU5URUdSQVRPUl9BUCkJKz0gaW50ZWdyYXRvcl9hcC5vCitvYmotJChDT05GSUdfQVJDSF9JTlRFR1JBVE9SX0NQKQkrPSBpbnRlZ3JhdG9yX2NwLm8KKworb2JqLSQoQ09ORklHX0xFRFMpCQkJKz0gbGVkcy5vCitvYmotJChDT05GSUdfUENJKQkJCSs9IHBjaV92My5vIHBjaS5vCitvYmotJChDT05GSUdfQ1BVX0ZSRVFfSU5URUdSQVRPUikJKz0gY3B1Lm8KK29iai0kKENPTkZJR19JTlRFR1JBVE9SX0lNUEQxKQkJKz0gaW1wZDEubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2U3NWFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSw0IEBACisgICB6cmVsYWRkci15CTo9IDB4MDAwMDgwMDAKK3BhcmFtc19waHlzLXkJOj0gMHgwMDAwMDEwMAoraW5pdHJkX3BoeXMteQk6PSAweDAwODAwMDAwCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyMDA1OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jbG9jay5jCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jbG9jay5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBBUk0gTGltaXRlZC4KKyAqICBXcml0dGVuIGJ5IERlZXAgQmx1ZSBTb2x1dGlvbnMgTGltaXRlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2ljc3Q1MjUuaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisKK3N0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKK3N0YXRpYyBERUNMQVJFX01VVEVYKGNsb2Nrc19zZW0pOworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCit7CisJc3RydWN0IGNsayAqcCwgKmNsayA9IEVSUl9QVFIoLUVOT0VOVCk7CisKKwlkb3duKCZjbG9ja3Nfc2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIG5vZGUpIHsKKwkJaWYgKHN0cmNtcChpZCwgcC0+bmFtZSkgPT0gMCAmJiB0cnlfbW9kdWxlX2dldChwLT5vd25lcikpIHsKKwkJCWNsayA9IHA7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cCgmY2xvY2tzX3NlbSk7CisKKwlyZXR1cm4gY2xrOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKKwordm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwltb2R1bGVfcHV0KGNsay0+b3duZXIpOworfQorRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKKworaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKKwordm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKKworaW50IGNsa191c2Uoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfdXNlKTsKKwordm9pZCBjbGtfdW51c2Uoc3RydWN0IGNsayAqY2xrKQoreworfQorRVhQT1JUX1NZTUJPTChjbGtfdW51c2UpOworCit1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsay0+cmF0ZTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKKworbG9uZyBjbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlzdHJ1Y3QgaWNzdDUyNV92Y28gdmNvOworCisJdmNvID0gaWNzdDUyNV9raHpfdG9fdmNvKGNsay0+cGFyYW1zLCByYXRlIC8gMTAwMCk7CisJcmV0dXJuIGljc3Q1MjVfa2h6KGNsay0+cGFyYW1zLCB2Y28pICogMTAwMDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3JvdW5kX3JhdGUpOworCitpbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWludCByZXQgPSAtRUlPOworCWlmIChjbGstPnNldHZjbykgeworCQlzdHJ1Y3QgaWNzdDUyNV92Y28gdmNvOworCisJCXZjbyA9IGljc3Q1MjVfa2h6X3RvX3ZjbyhjbGstPnBhcmFtcywgcmF0ZSAvIDEwMDApOworCQljbGstPnJhdGUgPSBpY3N0NTI1X2toeihjbGstPnBhcmFtcywgdmNvKSAqIDEwMDA7CisKKwkJcHJpbnRrKCJDbG9jayAlczogc2V0dGluZyBWQ08gcmVnIHBhcmFtczogUz0lZCBSPSVkIFY9JWRcbiIsCisJCQljbGstPm5hbWUsIHZjby5zLCB2Y28uciwgdmNvLnYpOworCisJCWNsay0+c2V0dmNvKGNsaywgdmNvKTsKKwkJcmV0ID0gMDsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19zZXRfcmF0ZSk7CisKKy8qCisgKiBUaGVzZSBhcmUgZml4ZWQgY2xvY2tzLgorICovCitzdGF0aWMgc3RydWN0IGNsayBrbWlfY2xrID0geworCS5uYW1lCT0gIktNSVJFRkNMSyIsCisJLnJhdGUJPSAyNDAwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnRfY2xrID0geworCS5uYW1lCT0gIlVBUlRDTEsiLAorCS5yYXRlCT0gMTQ3NDU2MDAsCit9OworCitpbnQgY2xrX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlkb3duKCZjbG9ja3Nfc2VtKTsKKwlsaXN0X2FkZCgmY2xrLT5ub2RlLCAmY2xvY2tzKTsKKwl1cCgmY2xvY2tzX3NlbSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19yZWdpc3Rlcik7CisKK3ZvaWQgY2xrX3VucmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKQoreworCWRvd24oJmNsb2Nrc19zZW0pOworCWxpc3RfZGVsKCZjbGstPm5vZGUpOworCXVwKCZjbG9ja3Nfc2VtKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3VucmVnaXN0ZXIpOworCitzdGF0aWMgaW50IF9faW5pdCBjbGtfaW5pdCh2b2lkKQoreworCWNsa19yZWdpc3Rlcigma21pX2Nsayk7CisJY2xrX3JlZ2lzdGVyKCZ1YXJ0X2Nsayk7CisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKGNsa19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllNjMyOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jbG9jay5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2Nsb2NrLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEFSTSBMaW1pdGVkLgorICogIFdyaXR0ZW4gYnkgRGVlcCBCbHVlIFNvbHV0aW9ucyBMaW1pdGVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KK3N0cnVjdCBtb2R1bGU7CitzdHJ1Y3QgaWNzdDUyNV9wYXJhbXM7CisKK3N0cnVjdCBjbGsgeworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKKwl1bnNpZ25lZCBsb25nCQlyYXRlOworCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKKwljb25zdCBjaGFyCQkqbmFtZTsKKwljb25zdCBzdHJ1Y3QgaWNzdDUyNV9wYXJhbXMgKnBhcmFtczsKKwl2b2lkCQkJKmRhdGE7CisJdm9pZAkJCSgqc2V0dmNvKShzdHJ1Y3QgY2xrICosIHN0cnVjdCBpY3N0NTI1X3ZjbyB2Y28pOworfTsKKworaW50IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOwordm9pZCBjbGtfdW5yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOWM0OWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY29tbW9uLmgKQEAgLTAsMCArMSwyIEBACitleHRlcm4gdm9pZCBpbnRlZ3JhdG9yX3RpbWVfaW5pdCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50ZWdyYXRvcl9nZXR0aW1lb2Zmc2V0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZjNTBjMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb3JlLmMKQEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvcmUuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMyBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hbWJhLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY20uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKworc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSBydGNfZGV2aWNlID0geworCS5kZXYJCT0geworCQkuYnVzX2lkCT0gIm1iOjE1IiwKKwl9LAorCS5yZXMJCT0geworCQkuc3RhcnQJPSBJTlRFR1JBVE9SX1JUQ19CQVNFLAorCQkuZW5kCT0gSU5URUdSQVRPUl9SVENfQkFTRSArIFNaXzRLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkuaXJxCQk9IHsgSVJRX1JUQ0lOVCwgTk9fSVJRIH0sCisJLnBlcmlwaGlkCT0gMHgwMDA0MTAzMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgdWFydDBfZGV2aWNlID0geworCS5kZXYJCT0geworCQkuYnVzX2lkCT0gIm1iOjE2IiwKKwl9LAorCS5yZXMJCT0geworCQkuc3RhcnQJPSBJTlRFR1JBVE9SX1VBUlQwX0JBU0UsCisJCS5lbmQJPSBJTlRFR1JBVE9SX1VBUlQwX0JBU0UgKyBTWl80SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLmlycQkJPSB7IElSUV9VQVJUSU5UMCwgTk9fSVJRIH0sCisJLnBlcmlwaGlkCT0gMHgwMDQxMDEwLAorfTsKKworc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSB1YXJ0MV9kZXZpY2UgPSB7CisJLmRldgkJPSB7CisJCS5idXNfaWQJPSAibWI6MTciLAorCX0sCisJLnJlcwkJPSB7CisJCS5zdGFydAk9IElOVEVHUkFUT1JfVUFSVDFfQkFTRSwKKwkJLmVuZAk9IElOVEVHUkFUT1JfVUFSVDFfQkFTRSArIFNaXzRLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkuaXJxCQk9IHsgSVJRX1VBUlRJTlQxLCBOT19JUlEgfSwKKwkucGVyaXBoaWQJPSAweDAwNDEwMTAsCit9OworCitzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlIGttaTBfZGV2aWNlID0geworCS5kZXYJCT0geworCQkuYnVzX2lkCT0gIm1iOjE4IiwKKwl9LAorCS5yZXMJCT0geworCQkuc3RhcnQJPSBLTUkwX0JBU0UsCisJCS5lbmQJPSBLTUkwX0JBU0UgKyBTWl80SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLmlycQkJPSB7IElSUV9LTUlJTlQwLCBOT19JUlEgfSwKKwkucGVyaXBoaWQJPSAweDAwMDQxMDUwLAorfTsKKworc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSBrbWkxX2RldmljZSA9IHsKKwkuZGV2CQk9IHsKKwkJLmJ1c19pZAk9ICJtYjoxOSIsCisJfSwKKwkucmVzCQk9IHsKKwkJLnN0YXJ0CT0gS01JMV9CQVNFLAorCQkuZW5kCT0gS01JMV9CQVNFICsgU1pfNEsgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS5pcnEJCT0geyBJUlFfS01JSU5UMSwgTk9fSVJRIH0sCisJLnBlcmlwaGlkCT0gMHgwMDA0MTA1MCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CisJJnJ0Y19kZXZpY2UsCisJJnVhcnQwX2RldmljZSwKKwkmdWFydDFfZGV2aWNlLAorCSZrbWkwX2RldmljZSwKKwkma21pMV9kZXZpY2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbnRlZ3JhdG9yX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFtYmFfZGV2cyk7IGkrKykgeworCQlzdHJ1Y3QgYW1iYV9kZXZpY2UgKmQgPSBhbWJhX2RldnNbaV07CisJCWFtYmFfZGV2aWNlX3JlZ2lzdGVyKGQsICZpb21lbV9yZXNvdXJjZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwoaW50ZWdyYXRvcl9pbml0KTsKKworI2RlZmluZSBDTV9DVFJMCUlPX0FERFJFU1MoSU5URUdSQVRPUl9IRFJfQkFTRSkgKyBJTlRFR1JBVE9SX0hEUl9DVFJMX09GRlNFVAorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNtX2xvY2spOworCisvKioKKyAqIGNtX2NvbnRyb2wgLSB1cGRhdGUgdGhlIENNX0NUUkwgcmVnaXN0ZXIuCisgKiBAbWFzazogYml0cyB0byBjaGFuZ2UKKyAqIEBzZXQ6IGJpdHMgdG8gc2V0CisgKi8KK3ZvaWQgY21fY29udHJvbCh1MzIgbWFzaywgdTMyIHNldCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2YWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY21fbG9jaywgZmxhZ3MpOworCXZhbCA9IHJlYWRsKENNX0NUUkwpICYgfm1hc2s7CisJd3JpdGVsKHZhbCB8IHNldCwgQ01fQ1RSTCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21fbG9jaywgZmxhZ3MpOworfQorCitFWFBPUlRfU1lNQk9MKGNtX2NvbnRyb2wpOworCisvKgorICogV2hlcmUgaXMgdGhlIHRpbWVyIChWQSk/CisgKi8KKyNkZWZpbmUgVElNRVIwX1ZBX0JBU0UgKElPX0FERFJFU1MoSU5URUdSQVRPUl9DVF9CQVNFKSsweDAwMDAwMDAwKQorI2RlZmluZSBUSU1FUjFfVkFfQkFTRSAoSU9fQUREUkVTUyhJTlRFR1JBVE9SX0NUX0JBU0UpKzB4MDAwMDAxMDApCisjZGVmaW5lIFRJTUVSMl9WQV9CQVNFIChJT19BRERSRVNTKElOVEVHUkFUT1JfQ1RfQkFTRSkrMHgwMDAwMDIwMCkKKyNkZWZpbmUgVkFfSUNfQkFTRSAgICAgSU9fQUREUkVTUyhJTlRFR1JBVE9SX0lDX0JBU0UpIAorCisvKgorICogSG93IGxvbmcgaXMgdGhlIHRpbWVyIGludGVydmFsPworICovCisjZGVmaW5lIFRJTUVSX0lOVEVSVkFMCShUSUNLU19QRVJfdVNFQyAqIG1TRUNfMTApCisjaWYgVElNRVJfSU5URVJWQUwgPj0gMHgxMDAwMDAKKyNkZWZpbmUgVElDS1MyVVNFQ1MoeCkJKDI1NiAqICh4KSAvIFRJQ0tTX1BFUl91U0VDKQorI2VsaWYgVElNRVJfSU5URVJWQUwgPj0gMHgxMDAwMAorI2RlZmluZSBUSUNLUzJVU0VDUyh4KQkoMTYgKiAoeCkgLyBUSUNLU19QRVJfdVNFQykKKyNlbHNlCisjZGVmaW5lIFRJQ0tTMlVTRUNTKHgpCSgoeCkgLyBUSUNLU19QRVJfdVNFQykKKyNlbmRpZgorCisvKgorICogV2hhdCBkb2VzIGl0IGxvb2sgbGlrZT8KKyAqLwordHlwZWRlZiBzdHJ1Y3QgVGltZXJTdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgVGltZXJMb2FkOworCXVuc2lnbmVkIGxvbmcgVGltZXJWYWx1ZTsKKwl1bnNpZ25lZCBsb25nIFRpbWVyQ29udHJvbDsKKwl1bnNpZ25lZCBsb25nIFRpbWVyQ2xlYXI7Cit9IFRpbWVyU3RydWN0X3Q7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX3JlbG9hZDsKKworLyoKKyAqIFJldHVybnMgbnVtYmVyIG9mIG1zIHNpbmNlIGxhc3QgY2xvY2sgaW50ZXJydXB0LiAgTm90ZSB0aGF0IGludGVycnVwdHMKKyAqIHdpbGwgaGF2ZSBiZWVuIGRpc2FibGVkIGJ5IGRvX2dldHRpbWVvZmZzZXQoKQorICovCit1bnNpZ25lZCBsb25nIGludGVncmF0b3JfZ2V0dGltZW9mZnNldCh2b2lkKQoreworCXZvbGF0aWxlIFRpbWVyU3RydWN0X3QgKnRpbWVyMSA9IChUaW1lclN0cnVjdF90ICopVElNRVIxX1ZBX0JBU0U7CisJdW5zaWduZWQgbG9uZyB0aWNrczEsIHRpY2tzMiwgc3RhdHVzOworCisJLyoKKwkgKiBHZXQgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHRpY2tzLiAgTm90ZSB0aGF0IHRoZXJlIGlzIGEgcmFjZQorCSAqIGNvbmRpdGlvbiBiZXR3ZWVuIHVzIHJlYWRpbmcgdGhlIHRpbWVyIGFuZCBjaGVja2luZyBmb3IKKwkgKiBhbiBpbnRlcnJ1cHQuICBXZSBnZXQgYXJvdW5kIHRoaXMgYnkgZW5zdXJpbmcgdGhhdCB0aGUKKwkgKiBjb3VudGVyIGhhcyBub3QgcmVsb2FkZWQgYmV0d2VlbiBvdXIgdHdvIHJlYWRzLgorCSAqLworCXRpY2tzMiA9IHRpbWVyMS0+VGltZXJWYWx1ZSAmIDB4ZmZmZjsKKwlkbyB7CisJCXRpY2tzMSA9IHRpY2tzMjsKKwkJc3RhdHVzID0gX19yYXdfcmVhZGwoVkFfSUNfQkFTRSArIElSUV9SQVdfU1RBVFVTKTsKKwkJdGlja3MyID0gdGltZXIxLT5UaW1lclZhbHVlICYgMHhmZmZmOworCX0gd2hpbGUgKHRpY2tzMiA+IHRpY2tzMSk7CisKKwkvKgorCSAqIE51bWJlciBvZiB0aWNrcyBzaW5jZSBsYXN0IGludGVycnVwdC4KKwkgKi8KKwl0aWNrczEgPSB0aW1lcl9yZWxvYWQgLSB0aWNrczI7CisKKwkvKgorCSAqIEludGVycnVwdCBwZW5kaW5nPyAgSWYgc28sIHdlJ3ZlIHJlbG9hZGVkIG9uY2UgYWxyZWFkeS4KKwkgKi8KKwlpZiAoc3RhdHVzICYgKDEgPDwgSVJRX1RJTUVSSU5UMSkpCisJCXRpY2tzMSArPSB0aW1lcl9yZWxvYWQ7CisKKwkvKgorCSAqIENvbnZlcnQgdGhlIHRpY2tzIHRvIHVzZWNzCisJICovCisJcmV0dXJuIFRJQ0tTMlVTRUNTKHRpY2tzMSk7Cit9CisKKy8qCisgKiBJUlEgaGFuZGxlciBmb3IgdGhlIHRpbWVyCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdAoraW50ZWdyYXRvcl90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl2b2xhdGlsZSBUaW1lclN0cnVjdF90ICp0aW1lcjEgPSAodm9sYXRpbGUgVGltZXJTdHJ1Y3RfdCAqKVRJTUVSMV9WQV9CQVNFOworCisJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CisKKwkvLyAuLi5jbGVhciB0aGUgaW50ZXJydXB0CisJdGltZXIxLT5UaW1lckNsZWFyID0gMTsKKworCXRpbWVyX3RpY2socmVncyk7CisKKwl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpbnRlZ3JhdG9yX3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAiSW50ZWdyYXRvciBUaW1lciBUaWNrIiwKKwkuZmxhZ3MJCT0gU0FfSU5URVJSVVBULAorCS5oYW5kbGVyCT0gaW50ZWdyYXRvcl90aW1lcl9pbnRlcnJ1cHQKK307CisKKy8qCisgKiBTZXQgdXAgdGltZXIgaW50ZXJydXB0LCBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgaW4gc2Vjb25kcy4KKyAqLwordm9pZCBfX2luaXQgaW50ZWdyYXRvcl90aW1lX2luaXQodW5zaWduZWQgbG9uZyByZWxvYWQsIHVuc2lnbmVkIGludCBjdHJsKQoreworCXZvbGF0aWxlIFRpbWVyU3RydWN0X3QgKnRpbWVyMCA9ICh2b2xhdGlsZSBUaW1lclN0cnVjdF90ICopVElNRVIwX1ZBX0JBU0U7CisJdm9sYXRpbGUgVGltZXJTdHJ1Y3RfdCAqdGltZXIxID0gKHZvbGF0aWxlIFRpbWVyU3RydWN0X3QgKilUSU1FUjFfVkFfQkFTRTsKKwl2b2xhdGlsZSBUaW1lclN0cnVjdF90ICp0aW1lcjIgPSAodm9sYXRpbGUgVGltZXJTdHJ1Y3RfdCAqKVRJTUVSMl9WQV9CQVNFOworCXVuc2lnbmVkIGludCB0aW1lcl9jdHJsID0gMHg4MCB8IDB4NDA7CS8qIHBlcmlvZGljICovCisKKwl0aW1lcl9yZWxvYWQgPSByZWxvYWQ7CisJdGltZXJfY3RybCB8PSBjdHJsOworCisJaWYgKHRpbWVyX3JlbG9hZCA+IDB4MTAwMDAwKSB7CisJCXRpbWVyX3JlbG9hZCA+Pj0gODsKKwkJdGltZXJfY3RybCB8PSAweDA4OyAvKiAvMjU2ICovCisJfSBlbHNlIGlmICh0aW1lcl9yZWxvYWQgPiAweDAxMDAwMCkgeworCQl0aW1lcl9yZWxvYWQgPj49IDQ7CisJCXRpbWVyX2N0cmwgfD0gMHgwNDsgLyogLzE2ICovCisJfQorCisJLyoKKwkgKiBJbml0aWFsaXNlIHRvIGEga25vd24gc3RhdGUgKGFsbCB0aW1lcnMgb2ZmKQorCSAqLworCXRpbWVyMC0+VGltZXJDb250cm9sID0gMDsKKwl0aW1lcjEtPlRpbWVyQ29udHJvbCA9IDA7CisJdGltZXIyLT5UaW1lckNvbnRyb2wgPSAwOworCisJdGltZXIxLT5UaW1lckxvYWQgICAgPSB0aW1lcl9yZWxvYWQ7CisJdGltZXIxLT5UaW1lclZhbHVlICAgPSB0aW1lcl9yZWxvYWQ7CisJdGltZXIxLT5UaW1lckNvbnRyb2wgPSB0aW1lcl9jdHJsOworCisJLyogCisJICogTWFrZSBpcnFzIGhhcHBlbiBmb3IgdGhlIHN5c3RlbSB0aW1lcgorCSAqLworCXNldHVwX2lycShJUlFfVElNRVJJTlQxLCAmaW50ZWdyYXRvcl90aW1lcl9pcnEpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NwdS5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYzU4YmZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NwdS5jCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jcHUuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZC4KKyAqCisgKiAgJElkOiBjcHUuYyx2IDEuNiAyMDAyLzA3LzE4IDEzOjU4OjUxIHJtayBFeHAgJAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ1BVIHN1cHBvcnQgZnVuY3Rpb25zCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pY3N0NTI1Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgaW50ZWdyYXRvcl9kcml2ZXI7CisKKyNkZWZpbmUgQ01fSUQgIAkoSU9fQUREUkVTUyhJTlRFR1JBVE9SX0hEUl9CQVNFKStJTlRFR1JBVE9SX0hEUl9JRF9PRkZTRVQpCisjZGVmaW5lIENNX09TQwkoSU9fQUREUkVTUyhJTlRFR1JBVE9SX0hEUl9CQVNFKStJTlRFR1JBVE9SX0hEUl9PU0NfT0ZGU0VUKQorI2RlZmluZSBDTV9TVEFUIChJT19BRERSRVNTKElOVEVHUkFUT1JfSERSX0JBU0UpK0lOVEVHUkFUT1JfSERSX1NUQVRfT0ZGU0VUKQorI2RlZmluZSBDTV9MT0NLIChJT19BRERSRVNTKElOVEVHUkFUT1JfSERSX0JBU0UpK0lOVEVHUkFUT1JfSERSX0xPQ0tfT0ZGU0VUKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGljc3Q1MjVfcGFyYW1zIGxjbGtfcGFyYW1zID0geworCS5yZWYJCT0gMjQwMDAsCisJLnZjb19tYXgJPSAzMjAwMDAsCisJLnZkX21pbgkJPSA4LAorCS52ZF9tYXgJCT0gMTMyLAorCS5yZF9taW4JCT0gMjQsCisJLnJkX21heAkJPSAyNCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWNzdDUyNV9wYXJhbXMgY2Nsa19wYXJhbXMgPSB7CisJLnJlZgkJPSAyNDAwMCwKKwkudmNvX21heAk9IDMyMDAwMCwKKwkudmRfbWluCQk9IDEyLAorCS52ZF9tYXgJCT0gMTYwLAorCS5yZF9taW4JCT0gMjQsCisJLnJkX21heAkJPSAyNCwKK307CisKKy8qCisgKiBWYWxpZGF0ZSB0aGUgc3BlZWQgcG9saWN5LgorICovCitzdGF0aWMgaW50IGludGVncmF0b3JfdmVyaWZ5X3BvbGljeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwlzdHJ1Y3QgaWNzdDUyNV92Y28gdmNvOworCisJY3B1ZnJlcV92ZXJpZnlfd2l0aGluX2xpbWl0cyhwb2xpY3ksIAorCQkJCSAgICAgcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxLCAKKwkJCQkgICAgIHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSk7CisKKwl2Y28gPSBpY3N0NTI1X2toel90b192Y28oJmNjbGtfcGFyYW1zLCBwb2xpY3ktPm1heCk7CisJcG9saWN5LT5tYXggPSBpY3N0NTI1X2toeigmY2Nsa19wYXJhbXMsIHZjbyk7CisKKwl2Y28gPSBpY3N0NTI1X2toel90b192Y28oJmNjbGtfcGFyYW1zLCBwb2xpY3ktPm1pbik7CisJcG9saWN5LT5taW4gPSBpY3N0NTI1X2toeigmY2Nsa19wYXJhbXMsIHZjbyk7CisKKwljcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHBvbGljeSwgCisJCQkJICAgICBwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXEsIAorCQkJCSAgICAgcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgaW50ZWdyYXRvcl9zZXRfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorCQkJCSB1bnNpZ25lZCBpbnQgdGFyZ2V0X2ZyZXEsCisJCQkJIHVuc2lnbmVkIGludCByZWxhdGlvbikKK3sKKwljcHVtYXNrX3QgY3B1c19hbGxvd2VkOworCWludCBjcHUgPSBwb2xpY3ktPmNwdTsKKwlzdHJ1Y3QgaWNzdDUyNV92Y28gdmNvOworCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOworCXVfaW50IGNtX29zYzsKKworCS8qCisJICogU2F2ZSB0aGlzIHRocmVhZHMgY3B1c19hbGxvd2VkIG1hc2suCisJICovCisJY3B1c19hbGxvd2VkID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOworCisJLyoKKwkgKiBCaW5kIHRvIHRoZSBzcGVjaWZpZWQgQ1BVLiAgV2hlbiB0aGlzIGNhbGwgcmV0dXJucywKKwkgKiB3ZSBzaG91bGQgYmUgcnVubmluZyBvbiB0aGUgcmlnaHQgQ1BVLgorCSAqLworCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgY3B1bWFza19vZl9jcHUoY3B1KSk7CisJQlVHX09OKGNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpOworCisJLyogZ2V0IGN1cnJlbnQgc2V0dGluZyAqLworCWNtX29zYyA9IF9fcmF3X3JlYWRsKENNX09TQyk7CisKKwlpZiAobWFjaGluZV9pc19pbnRlZ3JhdG9yKCkpIHsKKwkJdmNvLnMgPSAoY21fb3NjID4+IDgpICYgNzsKKwl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY2ludGVncmF0b3IoKSkgeworCQl2Y28ucyA9IDE7CisJfQorCXZjby52ID0gY21fb3NjICYgMjU1OworCXZjby5yID0gMjI7CisJZnJlcXMub2xkID0gaWNzdDUyNV9raHooJmNjbGtfcGFyYW1zLCB2Y28pOworCisJLyogaWNzdDUyNV9raHpfdG9fdmNvIHJvdW5kcyBkb3duIC0tIHNvIHdlIG5lZWQgdGhlIG5leHQKKwkgKiBsYXJnZXIgZnJlcSBpbiBjYXNlIG9mIENQVUZSRVFfUkVMQVRJT05fTC4KKwkgKi8KKwlpZiAocmVsYXRpb24gPT0gQ1BVRlJFUV9SRUxBVElPTl9MKQorCQl0YXJnZXRfZnJlcSArPSA5OTk7CisJaWYgKHRhcmdldF9mcmVxID4gcG9saWN5LT5tYXgpCisJCXRhcmdldF9mcmVxID0gcG9saWN5LT5tYXg7CisJdmNvID0gaWNzdDUyNV9raHpfdG9fdmNvKCZjY2xrX3BhcmFtcywgdGFyZ2V0X2ZyZXEpOworCWZyZXFzLm5ldyA9IGljc3Q1MjVfa2h6KCZjY2xrX3BhcmFtcywgdmNvKTsKKworCWZyZXFzLmNwdSA9IHBvbGljeS0+Y3B1OworCisJaWYgKGZyZXFzLm9sZCA9PSBmcmVxcy5uZXcpIHsKKwkJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVzX2FsbG93ZWQpOworCQlyZXR1cm4gMDsKKwl9CisKKwljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QUkVDSEFOR0UpOworCisJY21fb3NjID0gX19yYXdfcmVhZGwoQ01fT1NDKTsKKworCWlmIChtYWNoaW5lX2lzX2ludGVncmF0b3IoKSkgeworCQljbV9vc2MgJj0gMHhmZmZmZjgwMDsKKwkJY21fb3NjIHw9IHZjby5zIDw8IDg7CisJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NpbnRlZ3JhdG9yKCkpIHsKKwkJY21fb3NjICY9IDB4ZmZmZmZmMDA7CisJfQorCWNtX29zYyB8PSB2Y28udjsKKworCV9fcmF3X3dyaXRlbCgweGEwNWYsIENNX0xPQ0spOworCV9fcmF3X3dyaXRlbChjbV9vc2MsIENNX09TQyk7CisJX19yYXdfd3JpdGVsKDAsIENNX0xPQ0spOworCisJLyoKKwkgKiBSZXN0b3JlIHRoZSBDUFVzIGFsbG93ZWQgbWFzay4KKwkgKi8KKwlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdXNfYWxsb3dlZCk7CisKKwljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGludGVncmF0b3JfZ2V0KHVuc2lnbmVkIGludCBjcHUpCit7CisJY3B1bWFza190IGNwdXNfYWxsb3dlZDsKKwl1bnNpZ25lZCBpbnQgY3VycmVudF9mcmVxOworCXVfaW50IGNtX29zYzsKKwlzdHJ1Y3QgaWNzdDUyNV92Y28gdmNvOworCisJY3B1c19hbGxvd2VkID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOworCisJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShjcHUpKTsKKwlCVUdfT04oY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwkvKiBkZXRlY3QgbWVtb3J5IGV0Yy4gKi8KKwljbV9vc2MgPSBfX3Jhd19yZWFkbChDTV9PU0MpOworCisJaWYgKG1hY2hpbmVfaXNfaW50ZWdyYXRvcigpKSB7CisJCXZjby5zID0gKGNtX29zYyA+PiA4KSAmIDc7CisJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NpbnRlZ3JhdG9yKCkpIHsKKwkJdmNvLnMgPSAxOworCX0KKwl2Y28udiA9IGNtX29zYyAmIDI1NTsKKwl2Y28uciA9IDIyOworCisJY3VycmVudF9mcmVxID0gaWNzdDUyNV9raHooJmNjbGtfcGFyYW1zLCB2Y28pOyAvKiBjdXJyZW50IGZyZXEgKi8KKworCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgY3B1c19hbGxvd2VkKTsKKworCXJldHVybiBjdXJyZW50X2ZyZXE7Cit9CisKK3N0YXRpYyBpbnQgaW50ZWdyYXRvcl9jcHVmcmVxX2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCit7CisKKwkvKiBzZXQgZGVmYXVsdCBwb2xpY3kgYW5kIGNwdWluZm8gKi8KKwlwb2xpY3ktPmdvdmVybm9yID0gQ1BVRlJFUV9ERUZBVUxUX0dPVkVSTk9SOworCXBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSA9IDE2MDAwMDsKKwlwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXEgPSAxMjAwMDsKKwlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gMTAwMDAwMDsgLyogMSBtcywgYXNzdW1lZCAqLworCXBvbGljeS0+Y3VyID0gcG9saWN5LT5taW4gPSBwb2xpY3ktPm1heCA9IGludGVncmF0b3JfZ2V0KHBvbGljeS0+Y3B1KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZHJpdmVyIGludGVncmF0b3JfZHJpdmVyID0geworCS52ZXJpZnkJCT0gaW50ZWdyYXRvcl92ZXJpZnlfcG9saWN5LAorCS50YXJnZXQJCT0gaW50ZWdyYXRvcl9zZXRfdGFyZ2V0LAorCS5nZXQJCT0gaW50ZWdyYXRvcl9nZXQsCisJLmluaXQJCT0gaW50ZWdyYXRvcl9jcHVmcmVxX2luaXQsCisJLm5hbWUJCT0gImludGVncmF0b3IiLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW50ZWdyYXRvcl9jcHVfaW5pdCh2b2lkKQoreworCXJldHVybiBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcigmaW50ZWdyYXRvcl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaW50ZWdyYXRvcl9jcHVfZXhpdCh2b2lkKQoreworCWNwdWZyZXFfdW5yZWdpc3Rlcl9kcml2ZXIoJmludGVncmF0b3JfZHJpdmVyKTsKK30KKworTU9EVUxFX0FVVEhPUiAoIlJ1c3NlbGwgTS4gS2luZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OICgiY3B1ZnJlcSBkcml2ZXIgZm9yIEFSTSBJbnRlZ3JhdG9yIENQVXMiKTsKK01PRFVMRV9MSUNFTlNFICgiR1BMIik7CisKK21vZHVsZV9pbml0KGludGVncmF0b3JfY3B1X2luaXQpOworbW9kdWxlX2V4aXQoaW50ZWdyYXRvcl9jcHVfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvZG1hLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFlNmYyMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9kbWEuYwpAQCAtMCwwICsxLDM1IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9kbWEuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9kbWEuaD4KKwordm9pZCBfX2luaXQgYXJjaF9kbWFfaW5pdChkbWFfdCAqZG1hKQoreworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ltcGQxLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW1wZDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2MyZjE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ltcGQxLmMKQEAgLTAsMCArMSw0NzUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ltcGQxLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgZmlsZSBwcm92aWRlcyB0aGUgY29yZSBzdXBwb3J0IGZvciB0aGUgSU0tUEQxIG1vZHVsZS4KKyAqCisgKiBNb2R1bGUgLyBib290IHBhcmFtZXRlcnMuCisgKiAgIGxtaWQ9biAgIGltcGQxLmxtaWQ9biAtIHNldCB0aGUgbG9naWMgbW9kdWxlIHBvc2l0aW9uIGluIHN0YWNrIHRvICduJworICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2ljc3Q1MjUuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvYW1iYS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hbWJhX2NsY2QuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9sbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2ltcGQxLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorCitzdGF0aWMgaW50IG1vZHVsZV9pZDsKKworbW9kdWxlX3BhcmFtX25hbWVkKGxtaWQsIG1vZHVsZV9pZCwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobG1pZCwgImxvZ2ljIG1vZHVsZSBzdGFjayBwb3NpdGlvbiIpOworCitzdHJ1Y3QgaW1wZDFfbW9kdWxlIHsKKwl2b2lkIF9faW9tZW0JKmJhc2U7CisJc3RydWN0IGNsawl2Y29zWzJdOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpY3N0NTI1X3BhcmFtcyBpbXBkMV92Y29fcGFyYW1zID0geworCS5yZWYJCT0gMjQwMDAsCS8qIDI0IE1IeiAqLworCS52Y29fbWF4CT0gMjAwMDAwLAkvKiAyMDAgTUh6ICovCisJLnZkX21pbgkJPSAxMiwKKwkudmRfbWF4CQk9IDUxOSwKKwkucmRfbWluCQk9IDMsCisJLnJkX21heAkJPSAxMjAsCit9OworCitzdGF0aWMgdm9pZCBpbXBkMV9zZXR2Y28oc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgaWNzdDUyNV92Y28gdmNvKQoreworCXN0cnVjdCBpbXBkMV9tb2R1bGUgKmltcGQxID0gY2xrLT5kYXRhOworCWludCB2Y29uciA9IGNsayAtIGltcGQxLT52Y29zOworCXUzMiB2YWw7CisKKwl2YWwgPSB2Y28udiB8ICh2Y28uciA8PCA5KSB8ICh2Y28ucyA8PCAxNik7CisKKwl3cml0ZWwoMHhhMDVmLCBpbXBkMS0+YmFzZSArIElNUEQxX0xPQ0spOworCXN3aXRjaCAodmNvbnIpIHsKKwljYXNlIDA6CisJCXdyaXRlbCh2YWwsIGltcGQxLT5iYXNlICsgSU1QRDFfT1NDMSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJd3JpdGVsKHZhbCwgaW1wZDEtPmJhc2UgKyBJTVBEMV9PU0MyKTsKKwkJYnJlYWs7CisJfQorCXdyaXRlbCgwLCBpbXBkMS0+YmFzZSArIElNUEQxX0xPQ0spOworCisjaWYgREVCVUcKKwl2Y28udiA9IHZhbCAmIDB4MWZmOworCXZjby5yID0gKHZhbCA+PiA5KSAmIDB4N2Y7CisJdmNvLnMgPSAodmFsID4+IDE2KSAmIDc7CisKKwlwcl9kZWJ1ZygiSU0tUEQxOiBWQ08lZCBjbG9jayBpcyAlbGQga0h6XG4iLAorCQkgdmNvbnIsIGljc3Q1MjVfa2h6KCZpbXBkMV92Y29fcGFyYW1zLCB2Y28pKTsKKyNlbmRpZgorfQorCit2b2lkIGltcGQxX3R3ZWFrX2NvbnRyb2woc3RydWN0IGRldmljZSAqZGV2LCB1MzIgbWFzaywgdTMyIHZhbCkKK3sKKwlzdHJ1Y3QgaW1wZDFfbW9kdWxlICppbXBkMSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXUzMiBjdXI7CisKKwl2YWwgJj0gbWFzazsKKwljdXIgPSByZWFkbChpbXBkMS0+YmFzZSArIElNUEQxX0NUUkwpICYgfm1hc2s7CisJd3JpdGVsKGN1ciB8IHZhbCwgaW1wZDEtPmJhc2UgKyBJTVBEMV9DVFJMKTsKK30KKworRVhQT1JUX1NZTUJPTChpbXBkMV90d2Vha19jb250cm9sKTsKKworLyoKKyAqIENMQ0Qgc3VwcG9ydAorICovCisjZGVmaW5lIFBBTkVMCQlQUk9TUEVDVE9SCisKKyNkZWZpbmUgTFRNMTBDMjA5CQkxCisjZGVmaW5lIFBST1NQRUNUT1IJCTIKKyNkZWZpbmUgU1ZHQQkJCTMKKyNkZWZpbmUgVkdBCQkJNAorCisjaWYgUEFORUwgPT0gVkdBCisjZGVmaW5lIFBBTkVMVFlQRQl2Z2EKK3N0YXRpYyBzdHJ1Y3QgY2xjZF9wYW5lbCB2Z2EgPSB7CisJLm1vZGUJCT0geworCQkubmFtZQkJPSAiVkdBIiwKKwkJLnJlZnJlc2gJPSA2MCwKKwkJLnhyZXMJCT0gNjQwLAorCQkueXJlcwkJPSA0ODAsCisJCS5waXhjbG9jawk9IDM5NzIxLAorCQkubGVmdF9tYXJnaW4JPSA0MCwKKwkJLnJpZ2h0X21hcmdpbgk9IDI0LAorCQkudXBwZXJfbWFyZ2luCT0gMzIsCisJCS5sb3dlcl9tYXJnaW4JPSAxMSwKKwkJLmhzeW5jX2xlbgk9IDk2LAorCQkudnN5bmNfbGVuCT0gMiwKKwkJLnN5bmMJCT0gMCwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJfSwKKwkud2lkdGgJCT0gLTEsCisJLmhlaWdodAkJPSAtMSwKKwkudGltMgkJPSBUSU0yX0JDRCB8IFRJTTJfSVBDLAorCS5jbnRsCQk9IENOVExfTENEVEZUIHwgQ05UTF9MQ0RWQ09NUCgxKSwKKwkuY29ubmVjdG9yCT0gSU1QRDFfQ1RSTF9ESVNQX1ZHQSwKKwkuYnBwCQk9IDE2LAorCS5ncmF5c2NhbGUJPSAwLAorfTsKKworI2VsaWYgUEFORUwgPT0gU1ZHQQorI2RlZmluZSBQQU5FTFRZUEUJc3ZnYQorc3RhdGljIHN0cnVjdCBjbGNkX3BhbmVsIHN2Z2EgPSB7CisJLm1vZGUJCT0geworCQkubmFtZQkJPSAiU1ZHQSIsCisJCS5yZWZyZXNoCT0gMCwKKwkJLnhyZXMJCT0gODAwLAorCQkueXJlcwkJPSA2MDAsCisJCS5waXhjbG9jawk9IDI3Nzc4LAorCQkubGVmdF9tYXJnaW4JPSAyMCwKKwkJLnJpZ2h0X21hcmdpbgk9IDIwLAorCQkudXBwZXJfbWFyZ2luCT0gNSwKKwkJLmxvd2VyX21hcmdpbgk9IDUsCisJCS5oc3luY19sZW4JPSAxNjQsCisJCS52c3luY19sZW4JPSA2MiwKKwkJLnN5bmMJCT0gMCwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJfSwKKwkud2lkdGgJCT0gLTEsCisJLmhlaWdodAkJPSAtMSwKKwkudGltMgkJPSBUSU0yX0JDRCwKKwkuY250bAkJPSBDTlRMX0xDRFRGVCB8IENOVExfTENEVkNPTVAoMSksCisJLmNvbm5lY3Rvcgk9IElNUEQxX0NUUkxfRElTUF9WR0EsCisJLmJwcAkJPSAxNiwKKwkuZ3JheXNjYWxlCT0gMCwKK307CisKKyNlbGlmIFBBTkVMID09IFBST1NQRUNUT1IKKyNkZWZpbmUgUEFORUxUWVBFCXByb3NwZWN0b3IKK3N0YXRpYyBzdHJ1Y3QgY2xjZF9wYW5lbCBwcm9zcGVjdG9yID0geworCS5tb2RlCQk9IHsKKwkJLm5hbWUJCT0gIlBST1NQRUNUT1IiLAorCQkucmVmcmVzaAk9IDAsCisJCS54cmVzCQk9IDY0MCwKKwkJLnlyZXMJCT0gNDgwLAorCQkucGl4Y2xvY2sJPSA0MDAwMCwKKwkJLmxlZnRfbWFyZ2luCT0gMzMsCisJCS5yaWdodF9tYXJnaW4JPSA2NCwKKwkJLnVwcGVyX21hcmdpbgk9IDM2LAorCQkubG93ZXJfbWFyZ2luCT0gNywKKwkJLmhzeW5jX2xlbgk9IDY0LAorCQkudnN5bmNfbGVuCT0gMjUsCisJCS5zeW5jCQk9IEZCX1NZTkNfSE9SX0hJR0hfQUNUIHwgRkJfU1lOQ19WRVJUX0hJR0hfQUNULAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorCS53aWR0aAkJPSAtMSwKKwkuaGVpZ2h0CQk9IC0xLAorCS50aW0yCQk9IFRJTTJfQkNELAorCS5jbnRsCQk9IENOVExfTENEVEZUIHwgQ05UTF9MQ0RWQ09NUCgxKSwKKwkuZml4ZWR0aW1pbmdzCT0gMSwKKwkuY29ubmVjdG9yCT0gSU1QRDFfQ1RSTF9ESVNQX0xDRCwKKwkuYnBwCQk9IDE2LAorCS5ncmF5c2NhbGUJPSAwLAorfTsKKworI2VsaWYgUEFORUwgPT0gTFRNMTBDMjA5CisjZGVmaW5lIFBBTkVMVFlQRQlsdG0xMGMyMDkKKy8qCisgKiBVbnRlc3RlZC4KKyAqLworc3RhdGljIHN0cnVjdCBjbGNkX3BhbmVsIGx0bTEwYzIwOSA9IHsKKwkubW9kZQkJPSB7CisJCS5uYW1lCQk9ICJMVE0xMEMyMDkiLAorCQkucmVmcmVzaAk9IDAsCisJCS54cmVzCQk9IDY0MCwKKwkJLnlyZXMJCT0gNDgwLAorCQkucGl4Y2xvY2sJPSA0MDAwMCwKKwkJLmxlZnRfbWFyZ2luCT0gMjAsCisJCS5yaWdodF9tYXJnaW4JPSAyMCwKKwkJLnVwcGVyX21hcmdpbgk9IDE5LAorCQkubG93ZXJfbWFyZ2luCT0gMTksCisJCS5oc3luY19sZW4JPSAyMCwKKwkJLnZzeW5jX2xlbgk9IDEwLAorCQkuc3luYwkJPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJfSwKKwkud2lkdGgJCT0gLTEsCisJLmhlaWdodAkJPSAtMSwKKwkudGltMgkJPSBUSU0yX0JDRCwKKwkuY250bAkJPSBDTlRMX0xDRFRGVCB8IENOVExfTENEVkNPTVAoMSksCisJLmZpeGVkdGltaW5ncwk9IDEsCisJLmNvbm5lY3Rvcgk9IElNUEQxX0NUUkxfRElTUF9MQ0QsCisJLmJwcAkJPSAxNiwKKwkuZ3JheXNjYWxlCT0gMCwKK307CisjZW5kaWYKKworLyoKKyAqIERpc2FibGUgYWxsIGRpc3BsYXkgY29ubmVjdG9ycyBvbiB0aGUgaW50ZXJmYWNlIG1vZHVsZS4KKyAqLworc3RhdGljIHZvaWQgaW1wZDFmYl9jbGNkX2Rpc2FibGUoc3RydWN0IGNsY2RfZmIgKmZiKQoreworCWltcGQxX3R3ZWFrX2NvbnRyb2woZmItPmRldi0+ZGV2LnBhcmVudCwgSU1QRDFfQ1RSTF9ESVNQX01BU0ssIDApOworfQorCisvKgorICogRW5hYmxlIHRoZSByZWxldmFudCBjb25uZWN0b3Igb24gdGhlIGludGVyZmFjZSBtb2R1bGUuCisgKi8KK3N0YXRpYyB2b2lkIGltcGQxZmJfY2xjZF9lbmFibGUoc3RydWN0IGNsY2RfZmIgKmZiKQoreworCWltcGQxX3R3ZWFrX2NvbnRyb2woZmItPmRldi0+ZGV2LnBhcmVudCwgSU1QRDFfQ1RSTF9ESVNQX01BU0ssCisJCQlmYi0+cGFuZWwtPmNvbm5lY3RvciB8IElNUEQxX0NUUkxfRElTUF9FTkFCTEUpOworfQorCitzdGF0aWMgaW50IGltcGQxZmJfY2xjZF9zZXR1cChzdHJ1Y3QgY2xjZF9mYiAqZmIpCit7CisJdW5zaWduZWQgbG9uZyBmcmFtZWJhc2UgPSBmYi0+ZGV2LT5yZXMuc3RhcnQgKyAweDAxMDAwMDAwOworCXVuc2lnbmVkIGxvbmcgZnJhbWVzaXplID0gU1pfMU07CisJaW50IHJldCA9IDA7CisKKwlmYi0+cGFuZWwgPSAmUEFORUxUWVBFOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oZnJhbWViYXNlLCBmcmFtZXNpemUsICJjbGNkIGZyYW1lYnVmZmVyIikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJJTS1QRDE6IHVuYWJsZSB0byByZXNlcnZlIGZyYW1lYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlmYi0+ZmIuc2NyZWVuX2Jhc2UgPSBpb3JlbWFwKGZyYW1lYmFzZSwgZnJhbWVzaXplKTsKKwlpZiAoIWZiLT5mYi5zY3JlZW5fYmFzZSkgeworCQlwcmludGsoS0VSTl9FUlIgIklNLVBEMTogdW5hYmxlIHRvIG1hcCBmcmFtZWJ1ZmZlclxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9idWZmZXI7CisJfQorCisJZmItPmZiLmZpeC5zbWVtX3N0YXJ0CT0gZnJhbWViYXNlOworCWZiLT5mYi5maXguc21lbV9sZW4JPSBmcmFtZXNpemU7CisKKwlyZXR1cm4gMDsKKworIGZyZWVfYnVmZmVyOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihmcmFtZWJhc2UsIGZyYW1lc2l6ZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpbXBkMWZiX2NsY2RfbW1hcChzdHJ1Y3QgY2xjZF9mYiAqZmIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemU7CisKKwlzdGFydCA9IHZtYS0+dm1fcGdvZmYgKyAoZmItPmZiLmZpeC5zbWVtX3N0YXJ0ID4+IFBBR0VfU0hJRlQpOworCXNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7CisKKwlyZXR1cm4gcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgc3RhcnQsIHNpemUsCisJCQkgICAgICAgdm1hLT52bV9wYWdlX3Byb3QpOworfQorCitzdGF0aWMgdm9pZCBpbXBkMWZiX2NsY2RfcmVtb3ZlKHN0cnVjdCBjbGNkX2ZiICpmYikKK3sKKwlpb3VubWFwKGZiLT5mYi5zY3JlZW5fYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGZiLT5mYi5maXguc21lbV9zdGFydCwgZmItPmZiLmZpeC5zbWVtX2xlbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xjZF9ib2FyZCBpbXBkMV9jbGNkX2RhdGEgPSB7CisJLm5hbWUJCT0gIklNLVBELzEiLAorCS5jaGVjawkJPSBjbGNkZmJfY2hlY2ssCisJLmRlY29kZQkJPSBjbGNkZmJfZGVjb2RlLAorCS5kaXNhYmxlCT0gaW1wZDFmYl9jbGNkX2Rpc2FibGUsCisJLmVuYWJsZQkJPSBpbXBkMWZiX2NsY2RfZW5hYmxlLAorCS5zZXR1cAkJPSBpbXBkMWZiX2NsY2Rfc2V0dXAsCisJLm1tYXAJCT0gaW1wZDFmYl9jbGNkX21tYXAsCisJLnJlbW92ZQkJPSBpbXBkMWZiX2NsY2RfcmVtb3ZlLAorfTsKKworc3RydWN0IGltcGQxX2RldmljZSB7CisJdW5zaWduZWQgbG9uZwlvZmZzZXQ7CisJdW5zaWduZWQgaW50CWlycVsyXTsKKwl1bnNpZ25lZCBpbnQJaWQ7CisJdm9pZAkJKnBsYXRmb3JtX2RhdGE7Cit9OworCitzdGF0aWMgc3RydWN0IGltcGQxX2RldmljZSBpbXBkMV9kZXZzW10gPSB7CisJeworCQkub2Zmc2V0CT0gMHgwMzAwMDAwMCwKKwkJLmlkCT0gMHgwMDA0MTE5MCwKKwl9LCB7CisJCS5vZmZzZXQJPSAweDAwMTAwMDAwLAorCQkuaXJxCT0geyAxIH0sCisJCS5pZAk9IDB4MDAxNDEwMTEsCisJfSwgeworCQkub2Zmc2V0CT0gMHgwMDIwMDAwMCwKKwkJLmlycQk9IHsgMiB9LAorCQkuaWQJPSAweDAwMTQxMDExLAorCX0sIHsKKwkJLm9mZnNldAk9IDB4MDAzMDAwMDAsCisJCS5pcnEJPSB7IDMgfSwKKwkJLmlkCT0gMHgwMDA0MTAyMiwKKwl9LCB7CisJCS5vZmZzZXQJPSAweDAwNDAwMDAwLAorCQkuaXJxCT0geyA0IH0sCisJCS5pZAk9IDB4MDAwNDEwNjEsCisJfSwgeworCQkub2Zmc2V0CT0gMHgwMDUwMDAwMCwKKwkJLmlycQk9IHsgNSB9LAorCQkuaWQJPSAweDAwMDQxMDYxLAorCX0sIHsKKwkJLm9mZnNldAk9IDB4MDA2MDAwMDAsCisJCS5pcnEJPSB7IDYgfSwKKwkJLmlkCT0gMHgwMDA0MTEzMCwKKwl9LCB7CisJCS5vZmZzZXQJPSAweDAwNzAwMDAwLAorCQkuaXJxCT0geyA3LCA4IH0sCisJCS5pZAk9IDB4MDAwNDExODEsCisJfSwgeworCQkub2Zmc2V0CT0gMHgwMDgwMDAwMCwKKwkJLmlycQk9IHsgOSB9LAorCQkuaWQJPSAweDAwMDQxMDQxLAorCX0sIHsKKwkJLm9mZnNldAk9IDB4MDEwMDAwMDAsCisJCS5pcnEJPSB7IDExIH0sCisJCS5pZAk9IDB4MDAwNDExMTAsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmltcGQxX2NsY2RfZGF0YSwKKwl9Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqaW1wZDFfdmNvbmFtZXNbMl0gPSB7CisJIkNMQ0RDTEsiLAorCSJBVVhWQ08yIiwKK307CisKK3N0YXRpYyBpbnQgaW1wZDFfcHJvYmUoc3RydWN0IGxtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpbXBkMV9tb2R1bGUgKmltcGQxOworCWludCBpLCByZXQ7CisKKwlpZiAoZGV2LT5pZCAhPSBtb2R1bGVfaWQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oZGV2LT5yZXNvdXJjZS5zdGFydCwgU1pfNEssICJMTSByZWdpc3RlcnMiKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWltcGQxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGltcGQxX21vZHVsZSksIEdGUF9LRVJORUwpOworCWlmICghaW1wZDEpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byByZWxlYXNlX2xtOworCX0KKwltZW1zZXQoaW1wZDEsIDAsIHNpemVvZihzdHJ1Y3QgaW1wZDFfbW9kdWxlKSk7CisKKwlpbXBkMS0+YmFzZSA9IGlvcmVtYXAoZGV2LT5yZXNvdXJjZS5zdGFydCwgU1pfNEspOworCWlmICghaW1wZDEtPmJhc2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmcmVlX2ltcGQxOworCX0KKworCWxtX3NldF9kcnZkYXRhKGRldiwgaW1wZDEpOworCisJcHJpbnRrKCJJTS1QRDEgZm91bmQgYXQgMHglMDhseFxuIiwgZGV2LT5yZXNvdXJjZS5zdGFydCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbXBkMS0+dmNvcyk7IGkrKykgeworCQlpbXBkMS0+dmNvc1tpXS5vd25lciA9IFRISVNfTU9EVUxFLAorCQlpbXBkMS0+dmNvc1tpXS5uYW1lID0gaW1wZDFfdmNvbmFtZXNbaV0sCisJCWltcGQxLT52Y29zW2ldLnBhcmFtcyA9ICZpbXBkMV92Y29fcGFyYW1zLAorCQlpbXBkMS0+dmNvc1tpXS5kYXRhID0gaW1wZDEsCisJCWltcGQxLT52Y29zW2ldLnNldHZjbyA9IGltcGQxX3NldHZjbzsKKworCQljbGtfcmVnaXN0ZXIoJmltcGQxLT52Y29zW2ldKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbXBkMV9kZXZzKTsgaSsrKSB7CisJCXN0cnVjdCBpbXBkMV9kZXZpY2UgKmlkZXYgPSBpbXBkMV9kZXZzICsgaTsKKwkJc3RydWN0IGFtYmFfZGV2aWNlICpkOworCQl1bnNpZ25lZCBsb25nIHBjX2Jhc2U7CisKKwkJcGNfYmFzZSA9IGRldi0+cmVzb3VyY2Uuc3RhcnQgKyBpZGV2LT5vZmZzZXQ7CisKKwkJZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhbWJhX2RldmljZSksIEdGUF9LRVJORUwpOworCQlpZiAoIWQpCisJCQljb250aW51ZTsKKworCQltZW1zZXQoZCwgMCwgc2l6ZW9mKHN0cnVjdCBhbWJhX2RldmljZSkpOworCisJCXNucHJpbnRmKGQtPmRldi5idXNfaWQsIHNpemVvZihkLT5kZXYuYnVzX2lkKSwKKwkJCSAibG0leDolNS41bHgiLCBkZXYtPmlkLCBpZGV2LT5vZmZzZXQgPj4gMTIpOworCisJCWQtPmRldi5wYXJlbnQJPSAmZGV2LT5kZXY7CisJCWQtPnJlcy5zdGFydAk9IGRldi0+cmVzb3VyY2Uuc3RhcnQgKyBpZGV2LT5vZmZzZXQ7CisJCWQtPnJlcy5lbmQJPSBkLT5yZXMuc3RhcnQgKyBTWl80SyAtIDE7CisJCWQtPnJlcy5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCQlkLT5pcnFbMF0JPSBkZXYtPmlycTsKKwkJZC0+aXJxWzFdCT0gZGV2LT5pcnE7CisJCWQtPnBlcmlwaGlkCT0gaWRldi0+aWQ7CisJCWQtPmRldi5wbGF0Zm9ybV9kYXRhID0gaWRldi0+cGxhdGZvcm1fZGF0YTsKKworCQlyZXQgPSBhbWJhX2RldmljZV9yZWdpc3RlcihkLCAmZGV2LT5yZXNvdXJjZSk7CisJCWlmIChyZXQpIHsKKwkJCXByaW50aygidW5hYmxlIHRvIHJlZ2lzdGVyIGRldmljZSAlczogJWRcbiIsCisJCQkJZC0+ZGV2LmJ1c19pZCwgcmV0KTsKKwkJCWtmcmVlKGQpOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKKyBmcmVlX2ltcGQxOgorCWlmIChpbXBkMSAmJiBpbXBkMS0+YmFzZSkKKwkJaW91bm1hcChpbXBkMS0+YmFzZSk7CisJaWYgKGltcGQxKQorCQlrZnJlZShpbXBkMSk7CisgcmVsZWFzZV9sbToKKwlyZWxlYXNlX21lbV9yZWdpb24oZGV2LT5yZXNvdXJjZS5zdGFydCwgU1pfNEspOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGltcGQxX3JlbW92ZShzdHJ1Y3QgbG1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGltcGQxX21vZHVsZSAqaW1wZDEgPSBsbV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBsaXN0X2hlYWQgKmwsICpuOworCWludCBpOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKGwsIG4sICZkZXYtPmRldi5jaGlsZHJlbikgeworCQlzdHJ1Y3QgZGV2aWNlICpkID0gbGlzdF90b19kZXYobCk7CisKKwkJZGV2aWNlX3VucmVnaXN0ZXIoZCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW1wZDEtPnZjb3MpOyBpKyspCisJCWNsa191bnJlZ2lzdGVyKCZpbXBkMS0+dmNvc1tpXSk7CisKKwlsbV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCisJaW91bm1hcChpbXBkMS0+YmFzZSk7CisJa2ZyZWUoaW1wZDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihkZXYtPnJlc291cmNlLnN0YXJ0LCBTWl80Syk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbG1fZHJpdmVyIGltcGQxX2RyaXZlciA9IHsKKwkuZHJ2ID0geworCQkubmFtZQk9ICJpbXBkMSIsCisJfSwKKwkucHJvYmUJCT0gaW1wZDFfcHJvYmUsCisJLnJlbW92ZQkJPSBpbXBkMV9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbXBkMV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGxtX2RyaXZlcl9yZWdpc3RlcigmaW1wZDFfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGltcGQxX2V4aXQodm9pZCkKK3sKKwlsbV9kcml2ZXJfdW5yZWdpc3RlcigmaW1wZDFfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaW1wZDFfaW5pdCk7Cittb2R1bGVfZXhpdChpbXBkMV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlZ3JhdG9yL0lNLVBEMSBsb2dpYyBtb2R1bGUgY29yZSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkRlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9hcC5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWJhOWZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfYXAuYwpAQCAtMCwwICsxLDMwMiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9hcC5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMC0yMDAzIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hbWJhLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2FtYmFfa21pLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9sbS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKKy8qIAorICogQWxsIElPIGFkZHJlc3NlcyBhcmUgbWFwcGVkIG9udG8gVkEgMHhGRkZ4Lnh4eHgsIHdoZXJlIHgueHh4eAorICogaXMgdGhlIChQQSA+PiAxMikuCisgKgorICogU2V0dXAgYSBWQSBmb3IgdGhlIEludGVncmF0b3IgaW50ZXJydXB0IGNvbnRyb2xsZXIgKGZvciBoZWFkZXIgIzAsCisgKiBqdXN0IGZvciBub3cpLgorICovCisjZGVmaW5lIFZBX0lDX0JBU0UJSU9fQUREUkVTUyhJTlRFR1JBVE9SX0lDX0JBU0UpIAorI2RlZmluZSBWQV9TQ19CQVNFCUlPX0FERFJFU1MoSU5URUdSQVRPUl9TQ19CQVNFKQorI2RlZmluZSBWQV9FQklfQkFTRQlJT19BRERSRVNTKElOVEVHUkFUT1JfRUJJX0JBU0UpCisjZGVmaW5lIFZBX0NNSUNfQkFTRQlJT19BRERSRVNTKElOVEVHUkFUT1JfSERSX0JBU0UpICsgSU5URUdSQVRPUl9IRFJfSUNfT0ZGU0VUCisKKy8qCisgKiBMb2dpY2FsICAgICAgUGh5c2ljYWwKKyAqIGU4MDAwMDAwCTQwMDAwMDAwCVBDSSBtZW1vcnkJCVBIWVNfUENJX01FTV9CQVNFCShtYXggNTEyTSkKKyAqIGVjMDAwMDAwCTYxMDAwMDAwCVBDSSBjb25maWcgc3BhY2UJUEhZU19QQ0lfQ09ORklHX0JBU0UJKG1heCAxNk0pCisgKiBlZDAwMDAwMAk2MjAwMDAwMAlQQ0kgVjMgcmVncwkJUEhZU19QQ0lfVjNfQkFTRQkobWF4IDY0aykKKyAqIGVlMDAwMDAwCTYwMDAwMDAwCVBDSSBJTwkJCVBIWVNfUENJX0lPX0JBU0UJKG1heCAxNk0pCisgKiBlZjAwMDAwMAkJCUNhY2hlIGZsdXNoCisgKiBmMTAwMDAwMAkxMDAwMDAwMAlDb3JlIG1vZHVsZSByZWdpc3RlcnMKKyAqIGYxMTAwMDAwCTExMDAwMDAwCVN5c3RlbSBjb250cm9sbGVyIHJlZ2lzdGVycworICogZjEyMDAwMDAJMTIwMDAwMDAJRUJJIHJlZ2lzdGVycworICogZjEzMDAwMDAJMTMwMDAwMDAJQ291bnRlci9UaW1lcgorICogZjE0MDAwMDAJMTQwMDAwMDAJSW50ZXJydXB0IGNvbnRyb2xsZXIKKyAqIGYxNjAwMDAwCTE2MDAwMDAwCVVBUlQgMAorICogZjE3MDAwMDAJMTcwMDAwMDAJVUFSVCAxCisgKiBmMWEwMDAwMAkxYTAwMDAwMAlEZWJ1ZyBMRURzCisgKiBmMWIwMDAwMAkxYjAwMDAwMAlHUElPCisgKi8KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBhcF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKyB7IElPX0FERFJFU1MoSU5URUdSQVRPUl9IRFJfQkFTRSksICAgSU5URUdSQVRPUl9IRFJfQkFTRSwgICBTWl80SywgIE1UX0RFVklDRSB9LAorIHsgSU9fQUREUkVTUyhJTlRFR1JBVE9SX1NDX0JBU0UpLCAgICBJTlRFR1JBVE9SX1NDX0JBU0UsICAgIFNaXzRLLCAgTVRfREVWSUNFIH0sCisgeyBJT19BRERSRVNTKElOVEVHUkFUT1JfRUJJX0JBU0UpLCAgIElOVEVHUkFUT1JfRUJJX0JBU0UsICAgU1pfNEssICBNVF9ERVZJQ0UgfSwKKyB7IElPX0FERFJFU1MoSU5URUdSQVRPUl9DVF9CQVNFKSwgICAgSU5URUdSQVRPUl9DVF9CQVNFLCAgICBTWl80SywgIE1UX0RFVklDRSB9LAorIHsgSU9fQUREUkVTUyhJTlRFR1JBVE9SX0lDX0JBU0UpLCAgICBJTlRFR1JBVE9SX0lDX0JBU0UsICAgIFNaXzRLLCAgTVRfREVWSUNFIH0sCisgeyBJT19BRERSRVNTKElOVEVHUkFUT1JfVUFSVDBfQkFTRSksIElOVEVHUkFUT1JfVUFSVDBfQkFTRSwgU1pfNEssICBNVF9ERVZJQ0UgfSwKKyB7IElPX0FERFJFU1MoSU5URUdSQVRPUl9VQVJUMV9CQVNFKSwgSU5URUdSQVRPUl9VQVJUMV9CQVNFLCBTWl80SywgIE1UX0RFVklDRSB9LAorIHsgSU9fQUREUkVTUyhJTlRFR1JBVE9SX0RCR19CQVNFKSwgICBJTlRFR1JBVE9SX0RCR19CQVNFLCAgIFNaXzRLLCAgTVRfREVWSUNFIH0sCisgeyBJT19BRERSRVNTKElOVEVHUkFUT1JfR1BJT19CQVNFKSwgIElOVEVHUkFUT1JfR1BJT19CQVNFLCAgU1pfNEssICBNVF9ERVZJQ0UgfSwKKyB7IFBDSV9NRU1PUllfVkFERFIsICAgICAgICAgICAgICAgICAgUEhZU19QQ0lfTUVNX0JBU0UsICAgICBTWl8xNk0sIE1UX0RFVklDRSB9LAorIHsgUENJX0NPTkZJR19WQUREUiwgICAgICAgICAgICAgICAgICBQSFlTX1BDSV9DT05GSUdfQkFTRSwgIFNaXzE2TSwgTVRfREVWSUNFIH0sCisgeyBQQ0lfVjNfVkFERFIsICAgICAgICAgICAgICAgICAgICAgIFBIWVNfUENJX1YzX0JBU0UsICAgICAgU1pfNjRLLCBNVF9ERVZJQ0UgfSwKKyB7IFBDSV9JT19WQUREUiwgICAgICAgICAgICAgICAgICAgICAgUEhZU19QQ0lfSU9fQkFTRSwgICAgICBTWl82NEssIE1UX0RFVklDRSB9Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYXBfbWFwX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KGFwX2lvX2Rlc2MsIEFSUkFZX1NJWkUoYXBfaW9fZGVzYykpOworfQorCisjZGVmaW5lIElOVEVHUkFUT1JfU0NfVkFMSURfSU5UCTB4MDAzZmZmZmYKKworc3RhdGljIHZvaWQgc2NfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl3cml0ZWwoMSA8PCBpcnEsIFZBX0lDX0JBU0UgKyBJUlFfRU5BQkxFX0NMRUFSKTsKK30KKworc3RhdGljIHZvaWQgc2NfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXdyaXRlbCgxIDw8IGlycSwgVkFfSUNfQkFTRSArIElSUV9FTkFCTEVfU0VUKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIHNjX2NoaXAgPSB7CisJLmFjawk9IHNjX21hc2tfaXJxLAorCS5tYXNrCT0gc2NfbWFza19pcnEsCisJLnVubWFzayA9IHNjX3VubWFza19pcnEsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYXBfaW5pdF9pcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgaW5pdGlhbGx5LiAqLworCS8qIERvIHRoZSBjb3JlIG1vZHVsZSBvbmVzICovCisJd3JpdGVsKC0xLCBWQV9DTUlDX0JBU0UgKyBJUlFfRU5BQkxFX0NMRUFSKTsKKworCS8qIGRvIHRoZSBoZWFkZXIgY2FyZCBzdHVmZiBuZXh0ICovCisJd3JpdGVsKC0xLCBWQV9JQ19CQVNFICsgSVJRX0VOQUJMRV9DTEVBUik7CisJd3JpdGVsKC0xLCBWQV9JQ19CQVNFICsgRklRX0VOQUJMRV9DTEVBUik7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKSB7CisJCWlmICgoKDEgPDwgaSkgJiBJTlRFR1JBVE9SX1NDX1ZBTElEX0lOVCkgIT0gMCkgeworCQkJc2V0X2lycV9jaGlwKGksICZzY19jaGlwKTsKKwkJCXNldF9pcnFfaGFuZGxlcihpLCBkb19sZXZlbF9JUlEpOworCQkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJCX0KKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGljX2lycV9lbmFibGU7CisKK3N0YXRpYyBpbnQgaXJxX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCWljX2lycV9lbmFibGUgPSByZWFkbChWQV9JQ19CQVNFICsgSVJRX0VOQUJMRSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXJxX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCS8qIGRpc2FibGUgYWxsIGlycSBzb3VyY2VzICovCisJd3JpdGVsKC0xLCBWQV9DTUlDX0JBU0UgKyBJUlFfRU5BQkxFX0NMRUFSKTsKKwl3cml0ZWwoLTEsIFZBX0lDX0JBU0UgKyBJUlFfRU5BQkxFX0NMRUFSKTsKKwl3cml0ZWwoLTEsIFZBX0lDX0JBU0UgKyBGSVFfRU5BQkxFX0NMRUFSKTsKKworCXdyaXRlbChpY19pcnFfZW5hYmxlLCBWQV9JQ19CQVNFICsgSVJRX0VOQUJMRV9TRVQpOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgaXJxX3N1c3BlbmQgTlVMTAorI2RlZmluZSBpcnFfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBpcnFfY2xhc3MgPSB7CisJc2V0X2tzZXRfbmFtZSgiaXJxIiksCisJLnN1c3BlbmQJPSBpcnFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGlycV9yZXN1bWUsCit9OworCitzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgaXJxX2RldmljZSA9IHsKKwkuaWQJPSAwLAorCS5jbHMJPSAmaXJxX2NsYXNzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaXJxX2luaXRfc3lzZnModm9pZCkKK3sKKwlpbnQgcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZpcnFfY2xhc3MpOworCWlmIChyZXQgPT0gMCkKKwkJcmV0ID0gc3lzZGV2X3JlZ2lzdGVyKCZpcnFfZGV2aWNlKTsKKwlyZXR1cm4gcmV0OworfQorCitkZXZpY2VfaW5pdGNhbGwoaXJxX2luaXRfc3lzZnMpOworCisvKgorICogRmxhc2ggaGFuZGxpbmcuCisgKi8KKyNkZWZpbmUgU0NfQ1RSTEMgKFZBX1NDX0JBU0UgKyBJTlRFR1JBVE9SX1NDX0NUUkxDX09GRlNFVCkKKyNkZWZpbmUgU0NfQ1RSTFMgKFZBX1NDX0JBU0UgKyBJTlRFR1JBVE9SX1NDX0NUUkxTX09GRlNFVCkKKyNkZWZpbmUgRUJJX0NTUjEgKFZBX0VCSV9CQVNFICsgSU5URUdSQVRPUl9FQklfQ1NSMV9PRkZTRVQpCisjZGVmaW5lIEVCSV9MT0NLIChWQV9FQklfQkFTRSArIElOVEVHUkFUT1JfRUJJX0xPQ0tfT0ZGU0VUKQorCitzdGF0aWMgaW50IGFwX2ZsYXNoX2luaXQodm9pZCkKK3sKKwl1MzIgdG1wOworCisJd3JpdGVsKElOVEVHUkFUT1JfU0NfQ1RSTF9uRkxWUFBFTiB8IElOVEVHUkFUT1JfU0NfQ1RSTF9uRkxXUCwgU0NfQ1RSTEMpOworCisJdG1wID0gcmVhZGwoRUJJX0NTUjEpIHwgSU5URUdSQVRPUl9FQklfV1JJVEVfRU5BQkxFOworCXdyaXRlbCh0bXAsIEVCSV9DU1IxKTsKKworCWlmICghKHJlYWRsKEVCSV9DU1IxKSAmIElOVEVHUkFUT1JfRUJJX1dSSVRFX0VOQUJMRSkpIHsKKwkJd3JpdGVsKDB4YTA1ZiwgRUJJX0xPQ0spOworCQl3cml0ZWwodG1wLCBFQklfQ1NSMSk7CisJCXdyaXRlbCgwLCBFQklfTE9DSyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhcF9mbGFzaF9leGl0KHZvaWQpCit7CisJdTMyIHRtcDsKKworCXdyaXRlbChJTlRFR1JBVE9SX1NDX0NUUkxfbkZMVlBQRU4gfCBJTlRFR1JBVE9SX1NDX0NUUkxfbkZMV1AsIFNDX0NUUkxDKTsKKworCXRtcCA9IHJlYWRsKEVCSV9DU1IxKSAmIH5JTlRFR1JBVE9SX0VCSV9XUklURV9FTkFCTEU7CisJd3JpdGVsKHRtcCwgRUJJX0NTUjEpOworCisJaWYgKHJlYWRsKEVCSV9DU1IxKSAmIElOVEVHUkFUT1JfRUJJX1dSSVRFX0VOQUJMRSkgeworCQl3cml0ZWwoMHhhMDVmLCBFQklfTE9DSyk7CisJCXdyaXRlbCh0bXAsIEVCSV9DU1IxKTsKKwkJd3JpdGVsKDAsIEVCSV9MT0NLKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFwX2ZsYXNoX3NldF92cHAoaW50IG9uKQoreworCXVuc2lnbmVkIGxvbmcgcmVnID0gb24gPyBTQ19DVFJMUyA6IFNDX0NUUkxDOworCisJd3JpdGVsKElOVEVHUkFUT1JfU0NfQ1RSTF9uRkxWUFBFTiwgcmVnKTsKK30KKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGFwX2ZsYXNoX2RhdGEgPSB7CisJLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCisJLndpZHRoCQk9IDQsCisJLmluaXQJCT0gYXBfZmxhc2hfaW5pdCwKKwkuZXhpdAkJPSBhcF9mbGFzaF9leGl0LAorCS5zZXRfdnBwCT0gYXBfZmxhc2hfc2V0X3ZwcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2ZpX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAkJPSBJTlRFR1JBVE9SX0ZMQVNIX0JBU0UsCisJLmVuZAkJPSBJTlRFR1JBVE9SX0ZMQVNIX0JBU0UgKyBJTlRFR1JBVE9SX0ZMQVNIX1NJWkUgLSAxLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNmaV9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImFybWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmYXBfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmY2ZpX2ZsYXNoX3Jlc291cmNlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGFwX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHNjX2RlYzsKKwlpbnQgaTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY2ZpX2ZsYXNoX2RldmljZSk7CisKKwlzY19kZWMgPSByZWFkbChWQV9TQ19CQVNFICsgSU5URUdSQVRPUl9TQ19ERUNfT0ZGU0VUKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXN0cnVjdCBsbV9kZXZpY2UgKmxtZGV2OworCisJCWlmICgoc2NfZGVjICYgKDE2IDw8IGkpKSA9PSAwKQorCQkJY29udGludWU7CisKKwkJbG1kZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbG1fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbG1kZXYpCisJCQljb250aW51ZTsKKworCQltZW1zZXQobG1kZXYsIDAsIHNpemVvZihzdHJ1Y3QgbG1fZGV2aWNlKSk7CisKKwkJbG1kZXYtPnJlc291cmNlLnN0YXJ0ID0gMHhjMDAwMDAwMCArIDB4MTAwMDAwMDAgKiBpOworCQlsbWRldi0+cmVzb3VyY2UuZW5kID0gbG1kZXYtPnJlc291cmNlLnN0YXJ0ICsgMHgwZmZmZmZmZjsKKwkJbG1kZXYtPnJlc291cmNlLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisJCWxtZGV2LT5pcnEgPSBJUlFfQVBfRVhQSU5UMCArIGk7CisJCWxtZGV2LT5pZCA9IGk7CisKKwkJbG1fZGV2aWNlX3JlZ2lzdGVyKGxtZGV2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhcF9pbml0X3RpbWVyKHZvaWQpCit7CisJaW50ZWdyYXRvcl90aW1lX2luaXQoMTAwMDAwMCAqIFRJQ0tTX1BFUl91U0VDIC8gSFosIDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBhcF90aW1lciA9IHsKKwkuaW5pdAkJPSBhcF9pbml0X3RpbWVyLAorCS5vZmZzZXQJCT0gaW50ZWdyYXRvcl9nZXR0aW1lb2Zmc2V0LAorfTsKKworTUFDSElORV9TVEFSVChJTlRFR1JBVE9SLCAiQVJNLUludGVncmF0b3IiKQorCU1BSU5UQUlORVIoIkFSTSBMdGQvRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQiKQorCUJPT1RfTUVNKDB4MDAwMDAwMDAsIDB4MTYwMDAwMDAsIDB4ZjE2MDAwMDApCisJQk9PVF9QQVJBTVMoMHgwMDAwMDEwMCkKKwlNQVBJTyhhcF9tYXBfaW8pCisJSU5JVElSUShhcF9pbml0X2lycSkKKwkudGltZXIJCT0gJmFwX3RpbWVyLAorCUlOSVRfTUFDSElORShhcF9pbml0KQorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZTE1YzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCkBAIC0wLDAgKzEsNTI4IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2FtYmEuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvYW1iYV9rbWkuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvYW1iYV9jbGNkLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2ljc3Q1MjUuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2NtLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbG0uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisKKyNkZWZpbmUgSU5UQ1BfUEFfTU1DX0JBU0UJCTB4MWMwMDAwMDAKKyNkZWZpbmUgSU5UQ1BfUEFfQUFDSV9CQVNFCQkweDFkMDAwMDAwCisKKyNkZWZpbmUgSU5UQ1BfUEFfRkxBU0hfQkFTRQkJMHgyNDAwMDAwMAorI2RlZmluZSBJTlRDUF9GTEFTSF9TSVpFCQlTWl8zMk0KKworI2RlZmluZSBJTlRDUF9QQV9DTENEX0JBU0UJCTB4YzAwMDAwMDAKKworI2RlZmluZSBJTlRDUF9WQV9DSUNfQkFTRQkJMHhmMTAwMDA0MAorI2RlZmluZSBJTlRDUF9WQV9QSUNfQkFTRQkJMHhmMTQwMDAwMAorI2RlZmluZSBJTlRDUF9WQV9TSUNfQkFTRQkJMHhmY2EwMDAwMAorCisjZGVmaW5lIElOVENQX1BBX0VUSF9CQVNFCQkweGM4MDAwMDAwCisjZGVmaW5lIElOVENQX0VUSF9TSVpFCQkJMHgxMAorCisjZGVmaW5lIElOVENQX1ZBX0NUUkxfQkFTRQkJMHhmY2IwMDAwMAorI2RlZmluZSBJTlRDUF9GTEFTSFBST0cJCQkweDA0CisjZGVmaW5lIENJTlRFR1JBVE9SX0ZMQVNIUFJPR19GTFZQUEVOCSgxIDw8IDApCisjZGVmaW5lIENJTlRFR1JBVE9SX0ZMQVNIUFJPR19GTFdSRU4JKDEgPDwgMSkKKworLyoKKyAqIExvZ2ljYWwgICAgICBQaHlzaWNhbAorICogZjEwMDAwMDAJMTAwMDAwMDAJQ29yZSBtb2R1bGUgcmVnaXN0ZXJzCisgKiBmMTEwMDAwMAkxMTAwMDAwMAlTeXN0ZW0gY29udHJvbGxlciByZWdpc3RlcnMKKyAqIGYxMjAwMDAwCTEyMDAwMDAwCUVCSSByZWdpc3RlcnMKKyAqIGYxMzAwMDAwCTEzMDAwMDAwCUNvdW50ZXIvVGltZXIKKyAqIGYxNDAwMDAwCTE0MDAwMDAwCUludGVycnVwdCBjb250cm9sbGVyCisgKiBmMTYwMDAwMAkxNjAwMDAwMAlVQVJUIDAKKyAqIGYxNzAwMDAwCTE3MDAwMDAwCVVBUlQgMQorICogZjFhMDAwMDAJMWEwMDAwMDAJRGVidWcgTEVEcworICogZjFiMDAwMDAJMWIwMDAwMDAJR1BJTworICovCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaW50Y3BfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisgeyBJT19BRERSRVNTKElOVEVHUkFUT1JfSERSX0JBU0UpLCAgIElOVEVHUkFUT1JfSERSX0JBU0UsICAgU1pfNEssICBNVF9ERVZJQ0UgfSwKKyB7IElPX0FERFJFU1MoSU5URUdSQVRPUl9TQ19CQVNFKSwgICAgSU5URUdSQVRPUl9TQ19CQVNFLCAgICBTWl80SywgIE1UX0RFVklDRSB9LAorIHsgSU9fQUREUkVTUyhJTlRFR1JBVE9SX0VCSV9CQVNFKSwgICBJTlRFR1JBVE9SX0VCSV9CQVNFLCAgIFNaXzRLLCAgTVRfREVWSUNFIH0sCisgeyBJT19BRERSRVNTKElOVEVHUkFUT1JfQ1RfQkFTRSksICAgIElOVEVHUkFUT1JfQ1RfQkFTRSwgICAgU1pfNEssICBNVF9ERVZJQ0UgfSwKKyB7IElPX0FERFJFU1MoSU5URUdSQVRPUl9JQ19CQVNFKSwgICAgSU5URUdSQVRPUl9JQ19CQVNFLCAgICBTWl80SywgIE1UX0RFVklDRSB9LAorIHsgSU9fQUREUkVTUyhJTlRFR1JBVE9SX1VBUlQwX0JBU0UpLCBJTlRFR1JBVE9SX1VBUlQwX0JBU0UsIFNaXzRLLCAgTVRfREVWSUNFIH0sCisgeyBJT19BRERSRVNTKElOVEVHUkFUT1JfVUFSVDFfQkFTRSksIElOVEVHUkFUT1JfVUFSVDFfQkFTRSwgU1pfNEssICBNVF9ERVZJQ0UgfSwKKyB7IElPX0FERFJFU1MoSU5URUdSQVRPUl9EQkdfQkFTRSksICAgSU5URUdSQVRPUl9EQkdfQkFTRSwgICBTWl80SywgIE1UX0RFVklDRSB9LAorIHsgSU9fQUREUkVTUyhJTlRFR1JBVE9SX0dQSU9fQkFTRSksICBJTlRFR1JBVE9SX0dQSU9fQkFTRSwgIFNaXzRLLCAgTVRfREVWSUNFIH0sCisgeyAweGZjOTAwMDAwLCAweGM5MDAwMDAwLCBTWl80SywgTVRfREVWSUNFIH0sCisgeyAweGZjYTAwMDAwLCAweGNhMDAwMDAwLCBTWl80SywgTVRfREVWSUNFIH0sCisgeyAweGZjYjAwMDAwLCAweGNiMDAwMDAwLCBTWl80SywgTVRfREVWSUNFIH0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgaW50Y3BfbWFwX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KGludGNwX2lvX2Rlc2MsIEFSUkFZX1NJWkUoaW50Y3BfaW9fZGVzYykpOworfQorCisjZGVmaW5lIGNpY193cml0ZWwJX19yYXdfd3JpdGVsCisjZGVmaW5lIGNpY19yZWFkbAlfX3Jhd19yZWFkbAorI2RlZmluZSBwaWNfd3JpdGVsCV9fcmF3X3dyaXRlbAorI2RlZmluZSBwaWNfcmVhZGwJX19yYXdfcmVhZGwKKyNkZWZpbmUgc2ljX3dyaXRlbAlfX3Jhd193cml0ZWwKKyNkZWZpbmUgc2ljX3JlYWRsCV9fcmF3X3JlYWRsCisKK3N0YXRpYyB2b2lkIGNpY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlycSAtPSBJUlFfQ0lDX1NUQVJUOworCWNpY193cml0ZWwoMSA8PCBpcnEsIElOVENQX1ZBX0NJQ19CQVNFICsgSVJRX0VOQUJMRV9DTEVBUik7Cit9CisKK3N0YXRpYyB2b2lkIGNpY191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaXJxIC09IElSUV9DSUNfU1RBUlQ7CisJY2ljX3dyaXRlbCgxIDw8IGlycSwgSU5UQ1BfVkFfQ0lDX0JBU0UgKyBJUlFfRU5BQkxFX1NFVCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBjaWNfY2hpcCA9IHsKKwkuYWNrCT0gY2ljX21hc2tfaXJxLAorCS5tYXNrCT0gY2ljX21hc2tfaXJxLAorCS51bm1hc2sJPSBjaWNfdW5tYXNrX2lycSwKK307CisKK3N0YXRpYyB2b2lkIHBpY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlycSAtPSBJUlFfUElDX1NUQVJUOworCXBpY193cml0ZWwoMSA8PCBpcnEsIElOVENQX1ZBX1BJQ19CQVNFICsgSVJRX0VOQUJMRV9DTEVBUik7Cit9CisKK3N0YXRpYyB2b2lkIHBpY191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaXJxIC09IElSUV9QSUNfU1RBUlQ7CisJcGljX3dyaXRlbCgxIDw8IGlycSwgSU5UQ1BfVkFfUElDX0JBU0UgKyBJUlFfRU5BQkxFX1NFVCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBwaWNfY2hpcCA9IHsKKwkuYWNrCT0gcGljX21hc2tfaXJxLAorCS5tYXNrCT0gcGljX21hc2tfaXJxLAorCS51bm1hc2sgPSBwaWNfdW5tYXNrX2lycSwKK307CisKK3N0YXRpYyB2b2lkIHNpY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlycSAtPSBJUlFfU0lDX1NUQVJUOworCXNpY193cml0ZWwoMSA8PCBpcnEsIElOVENQX1ZBX1NJQ19CQVNFICsgSVJRX0VOQUJMRV9DTEVBUik7Cit9CisKK3N0YXRpYyB2b2lkIHNpY191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaXJxIC09IElSUV9TSUNfU1RBUlQ7CisJc2ljX3dyaXRlbCgxIDw8IGlycSwgSU5UQ1BfVkFfU0lDX0JBU0UgKyBJUlFfRU5BQkxFX1NFVCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBzaWNfY2hpcCA9IHsKKwkuYWNrCT0gc2ljX21hc2tfaXJxLAorCS5tYXNrCT0gc2ljX21hc2tfaXJxLAorCS51bm1hc2sJPSBzaWNfdW5tYXNrX2lycSwKK307CisKK3N0YXRpYyB2b2lkCitzaWNfaGFuZGxlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgbG9uZyBzdGF0dXMgPSBzaWNfcmVhZGwoSU5UQ1BfVkFfU0lDX0JBU0UgKyBJUlFfU1RBVFVTKTsKKworCWlmIChzdGF0dXMgPT0gMCkgeworCQlkb19iYWRfSVJRKGlycSwgZGVzYywgcmVncyk7CisJCXJldHVybjsKKwl9CisKKwlkbyB7CisJCWlycSA9IGZmcyhzdGF0dXMpIC0gMTsKKwkJc3RhdHVzICY9IH4oMSA8PCBpcnEpOworCisJCWlycSArPSBJUlFfU0lDX1NUQVJUOworCisJCWRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwkJZGVzYy0+aGFuZGxlKGlycSwgZGVzYywgcmVncyk7CisJfSB3aGlsZSAoc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGludGNwX2luaXRfaXJxKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKgorCSAqIERpc2FibGUgYWxsIGludGVycnVwdCBzb3VyY2VzCisJICovCisJcGljX3dyaXRlbCgweGZmZmZmZmZmLCBJTlRDUF9WQV9QSUNfQkFTRSArIElSUV9FTkFCTEVfQ0xFQVIpOworCXBpY193cml0ZWwoMHhmZmZmZmZmZiwgSU5UQ1BfVkFfUElDX0JBU0UgKyBGSVFfRU5BQkxFX0NMRUFSKTsKKworCWZvciAoaSA9IElSUV9QSUNfU1RBUlQ7IGkgPD0gSVJRX1BJQ19FTkQ7IGkrKykgeworCQlpZiAoaSA9PSAxMSkKKwkJCWkgPSAyMjsKKwkJaWYgKGkgPT0gSVJRX0NQX0NQUExESU5UKQorCQkJaSsrOworCQlpZiAoaSA9PSAyOSkKKwkJCWJyZWFrOworCQlzZXRfaXJxX2NoaXAoaSwgJnBpY19jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGksIGRvX2xldmVsX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOworCX0KKworCWNpY193cml0ZWwoMHhmZmZmZmZmZiwgSU5UQ1BfVkFfQ0lDX0JBU0UgKyBJUlFfRU5BQkxFX0NMRUFSKTsKKwljaWNfd3JpdGVsKDB4ZmZmZmZmZmYsIElOVENQX1ZBX0NJQ19CQVNFICsgRklRX0VOQUJMRV9DTEVBUik7CisKKwlmb3IgKGkgPSBJUlFfQ0lDX1NUQVJUOyBpIDw9IElSUV9DSUNfRU5EOyBpKyspIHsKKwkJc2V0X2lycV9jaGlwKGksICZjaWNfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpLCBkb19sZXZlbF9JUlEpOworCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOworCX0KKworCXNpY193cml0ZWwoMHgwMDAwMGZmZiwgSU5UQ1BfVkFfU0lDX0JBU0UgKyBJUlFfRU5BQkxFX0NMRUFSKTsKKwlzaWNfd3JpdGVsKDB4MDAwMDBmZmYsIElOVENQX1ZBX1NJQ19CQVNFICsgRklRX0VOQUJMRV9DTEVBUik7CisKKwlmb3IgKGkgPSBJUlFfU0lDX1NUQVJUOyBpIDw9IElSUV9TSUNfRU5EOyBpKyspIHsKKwkJc2V0X2lycV9jaGlwKGksICZzaWNfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpLCBkb19sZXZlbF9JUlEpOworCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKKwl9CisKKwlzZXRfaXJxX2hhbmRsZXIoSVJRX0NQX0NQUExESU5ULCBzaWNfaGFuZGxlX2lycSk7CisJcGljX3VubWFza19pcnEoSVJRX0NQX0NQUExESU5UKTsKK30KKworLyoKKyAqIENsb2NrIGhhbmRsaW5nCisgKi8KKyNkZWZpbmUgQ01fTE9DSyAoSU9fQUREUkVTUyhJTlRFR1JBVE9SX0hEUl9CQVNFKStJTlRFR1JBVE9SX0hEUl9MT0NLX09GRlNFVCkKKyNkZWZpbmUgQ01fQVVYT1NDIChJT19BRERSRVNTKElOVEVHUkFUT1JfSERSX0JBU0UpKzB4MWMpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWNzdDUyNV9wYXJhbXMgY3BfYXV4dmNvX3BhcmFtcyA9IHsKKwkucmVmCQk9IDI0MDAwLAorCS52Y29fbWF4CT0gMzIwMDAwLAorCS52ZF9taW4gCT0gOCwKKwkudmRfbWF4IAk9IDI2MywKKwkucmRfbWluIAk9IDMsCisJLnJkX21heCAJPSA2NSwKK307CisKK3N0YXRpYyB2b2lkIGNwX2F1eHZjb19zZXQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgaWNzdDUyNV92Y28gdmNvKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSByZWFkbChDTV9BVVhPU0MpICYgfjB4N2ZmZmY7CisJdmFsIHw9IHZjby52IHwgKHZjby5yIDw8IDkpIHwgKHZjby5zIDw8IDE2KTsKKworCXdyaXRlbCgweGEwNWYsIENNX0xPQ0spOworCXdyaXRlbCh2YWwsIENNX0FVWE9TQyk7CisJd3JpdGVsKDAsIENNX0xPQ0spOworfQorCitzdGF0aWMgc3RydWN0IGNsayBjcF9jbGNkX2NsayA9IHsKKwkubmFtZQk9ICJDTENEQ0xLIiwKKwkucGFyYW1zCT0gJmNwX2F1eHZjb19wYXJhbXMsCisJLnNldHZjbyA9IGNwX2F1eHZjb19zZXQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjcF9tbWNpX2NsayA9IHsKKwkubmFtZQk9ICJNQ0xLIiwKKwkucmF0ZQk9IDE0NzQ1NjAwLAorfTsKKworLyoKKyAqIEZsYXNoIGhhbmRsaW5nLgorICovCitzdGF0aWMgaW50IGludGNwX2ZsYXNoX2luaXQodm9pZCkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gcmVhZGwoSU5UQ1BfVkFfQ1RSTF9CQVNFICsgSU5UQ1BfRkxBU0hQUk9HKTsKKwl2YWwgfD0gQ0lOVEVHUkFUT1JfRkxBU0hQUk9HX0ZMV1JFTjsKKwl3cml0ZWwodmFsLCBJTlRDUF9WQV9DVFJMX0JBU0UgKyBJTlRDUF9GTEFTSFBST0cpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGludGNwX2ZsYXNoX2V4aXQodm9pZCkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gcmVhZGwoSU5UQ1BfVkFfQ1RSTF9CQVNFICsgSU5UQ1BfRkxBU0hQUk9HKTsKKwl2YWwgJj0gfihDSU5URUdSQVRPUl9GTEFTSFBST0dfRkxWUFBFTnxDSU5URUdSQVRPUl9GTEFTSFBST0dfRkxXUkVOKTsKKwl3cml0ZWwodmFsLCBJTlRDUF9WQV9DVFJMX0JBU0UgKyBJTlRDUF9GTEFTSFBST0cpOworfQorCitzdGF0aWMgdm9pZCBpbnRjcF9mbGFzaF9zZXRfdnBwKGludCBvbikKK3sKKwl1MzIgdmFsOworCisJdmFsID0gcmVhZGwoSU5UQ1BfVkFfQ1RSTF9CQVNFICsgSU5UQ1BfRkxBU0hQUk9HKTsKKwlpZiAob24pCisJCXZhbCB8PSBDSU5URUdSQVRPUl9GTEFTSFBST0dfRkxWUFBFTjsKKwllbHNlCisJCXZhbCAmPSB+Q0lOVEVHUkFUT1JfRkxBU0hQUk9HX0ZMVlBQRU47CisJd3JpdGVsKHZhbCwgSU5UQ1BfVkFfQ1RSTF9CQVNFICsgSU5UQ1BfRkxBU0hQUk9HKTsKK30KKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGludGNwX2ZsYXNoX2RhdGEgPSB7CisJLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCisJLndpZHRoCQk9IDQsCisJLmluaXQJCT0gaW50Y3BfZmxhc2hfaW5pdCwKKwkuZXhpdAkJPSBpbnRjcF9mbGFzaF9leGl0LAorCS5zZXRfdnBwCT0gaW50Y3BfZmxhc2hfc2V0X3ZwcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW50Y3BfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IElOVENQX1BBX0ZMQVNIX0JBU0UsCisJLmVuZAkJPSBJTlRDUF9QQV9GTEFTSF9CQVNFICsgSU5UQ1BfRkxBU0hfU0laRSAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW50Y3BfZmxhc2hfZGV2aWNlID0geworCS5uYW1lCQk9ICJhcm1mbGFzaCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmludGNwX2ZsYXNoX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmludGNwX2ZsYXNoX3Jlc291cmNlLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBJTlRDUF9QQV9FVEhfQkFTRSwKKwkJLmVuZAk9IElOVENQX1BBX0VUSF9CQVNFICsgSU5UQ1BfRVRIX1NJWkUgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX0NQX0VUSElOVCwKKwkJLmVuZAk9IElSUV9DUF9FVEhJTlQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbWM5MXgiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbWM5MXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzbWM5MXhfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmludGNwX2RldnNbXSBfX2luaXRkYXRhID0geworCSZpbnRjcF9mbGFzaF9kZXZpY2UsCisJJnNtYzkxeF9kZXZpY2UsCit9OworCisvKgorICogSXQgc2VlbXMgdGhhdCB0aGUgY2FyZCBpbnNlcnRpb24gaW50ZXJydXB0IHJlbWFpbnMgYWN0aXZlIGFmdGVyCisgKiB3ZSd2ZSBhY2tub3dsZWRnZWQgaXQuICBXZSB0aGVyZWZvcmUgaWdub3JlIHRoZSBpbnRlcnJ1cHQsIGFuZAorICogcmVseSBvbiByZWFkaW5nIGl0IGZyb20gdGhlIFNJQy4gIFRoaXMgYWxzbyBtZWFucyB0aGF0IHdlIG11c3QKKyAqIGNsZWFyIHRoZSBsYXRjaGVkIGludGVycnVwdC4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBtbWNfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdHVzID0gcmVhZGwoMHhmY2EwMDAwNCk7CisJd3JpdGVsKDgsIDB4ZmNiMDAwMDgpOworCisJcmV0dXJuIHN0YXR1cyAmIDg7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgbW1jX2RhdGEgPSB7CisJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5zdGF0dXMJCT0gbW1jX3N0YXR1cywKK307CisKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgbW1jX2RldmljZSA9IHsKKwkuZGV2CQk9IHsKKwkJLmJ1c19pZAk9ICJtYjoxYyIsCisJCS5wbGF0Zm9ybV9kYXRhID0gJm1tY19kYXRhLAorCX0sCisJLnJlcwkJPSB7CisJCS5zdGFydAk9IElOVENQX1BBX01NQ19CQVNFLAorCQkuZW5kCT0gSU5UQ1BfUEFfTU1DX0JBU0UgKyBTWl80SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLmlycQkJPSB7IElSUV9DUF9NTUNJSU5UMCwgSVJRX0NQX01NQ0lJTlQxIH0sCisJLnBlcmlwaGlkCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgYWFjaV9kZXZpY2UgPSB7CisJLmRldgkJPSB7CisJCS5idXNfaWQJPSAibWI6MWQiLAorCX0sCisJLnJlcwkJPSB7CisJCS5zdGFydAk9IElOVENQX1BBX0FBQ0lfQkFTRSwKKwkJLmVuZAk9IElOVENQX1BBX0FBQ0lfQkFTRSArIFNaXzRLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkuaXJxCQk9IHsgSVJRX0NQX0FBQ0lJTlQsIE5PX0lSUSB9LAorCS5wZXJpcGhpZAk9IDAsCit9OworCisKKy8qCisgKiBDTENEIHN1cHBvcnQKKyAqLworc3RhdGljIHN0cnVjdCBjbGNkX3BhbmVsIHZnYSA9IHsKKwkubW9kZQkJPSB7CisJCS5uYW1lCQk9ICJWR0EiLAorCQkucmVmcmVzaAk9IDYwLAorCQkueHJlcwkJPSA2NDAsCisJCS55cmVzCQk9IDQ4MCwKKwkJLnBpeGNsb2NrCT0gMzk3MjEsCisJCS5sZWZ0X21hcmdpbgk9IDQwLAorCQkucmlnaHRfbWFyZ2luCT0gMjQsCisJCS51cHBlcl9tYXJnaW4JPSAzMiwKKwkJLmxvd2VyX21hcmdpbgk9IDExLAorCQkuaHN5bmNfbGVuCT0gOTYsCisJCS52c3luY19sZW4JPSAyLAorCQkuc3luYwkJPSAwLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorCS53aWR0aAkJPSAtMSwKKwkuaGVpZ2h0CQk9IC0xLAorCS50aW0yCQk9IFRJTTJfQkNEIHwgVElNMl9JUEMsCisJLmNudGwJCT0gQ05UTF9MQ0RURlQgfCBDTlRMX0xDRFZDT01QKDEpLAorCS5icHAJCT0gMTYsCisJLmdyYXlzY2FsZQk9IDAsCit9OworCisvKgorICogRW5zdXJlIFZHQSBpcyBzZWxlY3RlZC4KKyAqLworc3RhdGljIHZvaWQgY3BfY2xjZF9lbmFibGUoc3RydWN0IGNsY2RfZmIgKmZiKQoreworCWNtX2NvbnRyb2woQ01fQ1RSTF9MQ0RNVVhTRUxfTUFTSywgQ01fQ1RSTF9MQ0RNVVhTRUxfVkdBKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZnJhbWVzaXplID0gU1pfMU07CisKK3N0YXRpYyBpbnQgY3BfY2xjZF9zZXR1cChzdHJ1Y3QgY2xjZF9mYiAqZmIpCit7CisJZG1hX2FkZHJfdCBkbWE7CisKKwlmYi0+cGFuZWwgPSAmdmdhOworCisJZmItPmZiLnNjcmVlbl9iYXNlID0gZG1hX2FsbG9jX3dyaXRlY29tYmluZSgmZmItPmRldi0+ZGV2LCBmcmFtZXNpemUsCisJCQkJCQkgICAgJmRtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmYi0+ZmIuc2NyZWVuX2Jhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDTENEOiB1bmFibGUgdG8gbWFwIGZyYW1lYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZmItPmZiLmZpeC5zbWVtX3N0YXJ0CT0gZG1hOworCWZiLT5mYi5maXguc21lbV9sZW4JPSBmcmFtZXNpemU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcF9jbGNkX21tYXAoc3RydWN0IGNsY2RfZmIgKmZiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlyZXR1cm4gZG1hX21tYXBfd3JpdGVjb21iaW5lKCZmYi0+ZGV2LT5kZXYsIHZtYSwKKwkJCQkgICAgIGZiLT5mYi5zY3JlZW5fYmFzZSwKKwkJCQkgICAgIGZiLT5mYi5maXguc21lbV9zdGFydCwKKwkJCQkgICAgIGZiLT5mYi5maXguc21lbV9sZW4pOworfQorCitzdGF0aWMgdm9pZCBjcF9jbGNkX3JlbW92ZShzdHJ1Y3QgY2xjZF9mYiAqZmIpCit7CisJZG1hX2ZyZWVfd3JpdGVjb21iaW5lKCZmYi0+ZGV2LT5kZXYsIGZiLT5mYi5maXguc21lbV9sZW4sCisJCQkgICAgICBmYi0+ZmIuc2NyZWVuX2Jhc2UsIGZiLT5mYi5maXguc21lbV9zdGFydCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xjZF9ib2FyZCBjbGNkX2RhdGEgPSB7CisJLm5hbWUJCT0gIkludGVncmF0b3IvQ1AiLAorCS5jaGVjawkJPSBjbGNkZmJfY2hlY2ssCisJLmRlY29kZQkJPSBjbGNkZmJfZGVjb2RlLAorCS5lbmFibGUJCT0gY3BfY2xjZF9lbmFibGUsCisJLnNldHVwCQk9IGNwX2NsY2Rfc2V0dXAsCisJLm1tYXAJCT0gY3BfY2xjZF9tbWFwLAorCS5yZW1vdmUJCT0gY3BfY2xjZF9yZW1vdmUsCit9OworCitzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlIGNsY2RfZGV2aWNlID0geworCS5kZXYJCT0geworCQkuYnVzX2lkCT0gIm1iOmMwIiwKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gfjAsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmNsY2RfZGF0YSwKKwl9LAorCS5yZXMJCT0geworCQkuc3RhcnQJPSBJTlRDUF9QQV9DTENEX0JBU0UsCisJCS5lbmQJPSBJTlRDUF9QQV9DTENEX0JBU0UgKyBTWl80SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLmRtYV9tYXNrCT0gfjAsCisJLmlycQkJPSB7IElSUV9DUF9DTENEQ0lOVCwgTk9fSVJRIH0sCisJLnBlcmlwaGlkCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CisJJm1tY19kZXZpY2UsCisJJmFhY2lfZGV2aWNlLAorCSZjbGNkX2RldmljZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbnRjcF9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwljbGtfcmVnaXN0ZXIoJmNwX2NsY2RfY2xrKTsKKwljbGtfcmVnaXN0ZXIoJmNwX21tY2lfY2xrKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGludGNwX2RldnMsIEFSUkFZX1NJWkUoaW50Y3BfZGV2cykpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW1iYV9kZXZzKTsgaSsrKSB7CisJCXN0cnVjdCBhbWJhX2RldmljZSAqZCA9IGFtYmFfZGV2c1tpXTsKKwkJYW1iYV9kZXZpY2VfcmVnaXN0ZXIoZCwgJmlvbWVtX3Jlc291cmNlKTsKKwl9Cit9CisKKyNkZWZpbmUgVElNRVJfQ1RSTF9JRQkoMSA8PCA1KQkJCS8qIEludGVycnVwdCBFbmFibGUgKi8KKworc3RhdGljIHZvaWQgX19pbml0IGludGNwX3RpbWVyX2luaXQodm9pZCkKK3sKKwlpbnRlZ3JhdG9yX3RpbWVfaW5pdCgxMDAwMDAwIC8gSFosIFRJTUVSX0NUUkxfSUUpOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBjcF90aW1lciA9IHsKKwkuaW5pdAkJPSBpbnRjcF90aW1lcl9pbml0LAorCS5vZmZzZXQJCT0gaW50ZWdyYXRvcl9nZXR0aW1lb2Zmc2V0LAorfTsKKworTUFDSElORV9TVEFSVChDSU5URUdSQVRPUiwgIkFSTS1JbnRlZ3JhdG9yQ1AiKQorCU1BSU5UQUlORVIoIkFSTSBMdGQvRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQiKQorCUJPT1RfTUVNKDB4MDAwMDAwMDAsIDB4MTYwMDAwMDAsIDB4ZjE2MDAwMDApCisJQk9PVF9QQVJBTVMoMHgwMDAwMDEwMCkKKwlNQVBJTyhpbnRjcF9tYXBfaW8pCisJSU5JVElSUShpbnRjcF9pbml0X2lycSkKKwkudGltZXIJCT0gJmNwX3RpbWVyLAorCUlOSVRfTUFDSElORShpbnRjcF9pbml0KQorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9sZWRzLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvbGVkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMTgyYjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvbGVkcy5jCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2xlZHMuYworICoKKyAqICBJbnRlZ3JhdG9yL0FQIGFuZCBJbnRlZ3JhdG9yL0NQIExFRCBjb250cm9sIHJvdXRpbmVzCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9sZWRzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY20uaD4KKworc3RhdGljIGludCBzYXZlZF9sZWRzOworCitzdGF0aWMgdm9pZCBpbnRlZ3JhdG9yX2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgbGVkZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY29uc3QgdW5zaWduZWQgaW50IGRiZ19iYXNlID0gSU9fQUREUkVTUyhJTlRFR1JBVE9SX0RCR19CQVNFKTsKKwl1bnNpZ25lZCBpbnQgdXBkYXRlX2FscGhhX2xlZHM7CisJCisJLy8geXVwLCBjaGFuZ2UgdGhlIExFRHMKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdXBkYXRlX2FscGhhX2xlZHMgPSAwOworCisJc3dpdGNoKGxlZGV2dCkgeworCWNhc2UgbGVkX2lkbGVfc3RhcnQ6CisJCWNtX2NvbnRyb2woQ01fQ1RSTF9MRUQsIDApOworCQlicmVhazsKKworCWNhc2UgbGVkX2lkbGVfZW5kOgorCQljbV9jb250cm9sKENNX0NUUkxfTEVELCBDTV9DVFJMX0xFRCk7CisJCWJyZWFrOworCisJY2FzZSBsZWRfdGltZXI6CisJCXNhdmVkX2xlZHMgXj0gR1JFRU5fTEVEOworCQl1cGRhdGVfYWxwaGFfbGVkcyA9IDE7CisJCWJyZWFrOworCisJY2FzZSBsZWRfcmVkX29uOgorCQlzYXZlZF9sZWRzIHw9IFJFRF9MRUQ7CisJCXVwZGF0ZV9hbHBoYV9sZWRzID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9yZWRfb2ZmOgorCQlzYXZlZF9sZWRzICY9IH5SRURfTEVEOworCQl1cGRhdGVfYWxwaGFfbGVkcyA9IDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKHVwZGF0ZV9hbHBoYV9sZWRzKSB7CisJCXdoaWxlIChfX3Jhd19yZWFkbChkYmdfYmFzZSArIElOVEVHUkFUT1JfREJHX0FMUEhBX09GRlNFVCkgJiAxKTsKKwkJX19yYXdfd3JpdGVsKHNhdmVkX2xlZHMsIGRiZ19iYXNlICsgSU5URUdSQVRPUl9EQkdfTEVEU19PRkZTRVQpOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGxlZHNfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX2ludGVncmF0b3IoKSB8fCBtYWNoaW5lX2lzX2NpbnRlZ3JhdG9yKCkpCisJCWxlZHNfZXZlbnQgPSBpbnRlZ3JhdG9yX2xlZHNfZXZlbnQ7CisKKwlyZXR1cm4gMDsKK30KKworX19pbml0Y2FsbChsZWRzX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2xtLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvbG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWYxOWQxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2xtLmMKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvbG0uYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2xtLmg+CisKKyNkZWZpbmUgdG9fbG1fZGV2aWNlKGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgbG1fZGV2aWNlLCBkZXYpCisjZGVmaW5lIHRvX2xtX2RyaXZlcihkKQljb250YWluZXJfb2YoZCwgc3RydWN0IGxtX2RyaXZlciwgZHJ2KQorCitzdGF0aWMgaW50IGxtX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBidXNfdHlwZSBsbV9idXN0eXBlID0geworCS5uYW1lCQk9ICJsb2dpY21vZHVsZSIsCisJLm1hdGNoCQk9IGxtX21hdGNoLAorLy8JLnN1c3BlbmQJPSBsbV9zdXNwZW5kLAorLy8JLnJlc3VtZQkJPSBsbV9yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBsbV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGJ1c19yZWdpc3RlcigmbG1fYnVzdHlwZSk7Cit9CisKK3Bvc3Rjb3JlX2luaXRjYWxsKGxtX2luaXQpOworCitzdGF0aWMgaW50IGxtX2J1c19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGxtX2RldmljZSAqbG1kZXYgPSB0b19sbV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgbG1fZHJpdmVyICpsbWRydiA9IHRvX2xtX2RyaXZlcihkZXYtPmRyaXZlcik7CisKKwlyZXR1cm4gbG1kcnYtPnByb2JlKGxtZGV2KTsKK30KKworc3RhdGljIGludCBsbV9idXNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbG1fZGV2aWNlICpsbWRldiA9IHRvX2xtX2RldmljZShkZXYpOworCXN0cnVjdCBsbV9kcml2ZXIgKmxtZHJ2ID0gdG9fbG1fZHJpdmVyKGRldi0+ZHJpdmVyKTsKKworCWxtZHJ2LT5yZW1vdmUobG1kZXYpOworCXJldHVybiAwOworfQorCitpbnQgbG1fZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBsbV9kcml2ZXIgKmRydikKK3sKKwlkcnYtPmRydi5idXMgPSAmbG1fYnVzdHlwZTsKKwlkcnYtPmRydi5wcm9iZSA9IGxtX2J1c19wcm9iZTsKKwlkcnYtPmRydi5yZW1vdmUgPSBsbV9idXNfcmVtb3ZlOworCisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcnYpOworfQorCit2b2lkIGxtX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBsbV9kcml2ZXIgKmRydikKK3sKKwlkcml2ZXJfdW5yZWdpc3RlcigmZHJ2LT5kcnYpOworfQorCitzdGF0aWMgdm9pZCBsbV9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGxtX2RldmljZSAqZCA9IHRvX2xtX2RldmljZShkZXYpOworCisJa2ZyZWUoZCk7Cit9CisKK2ludCBsbV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGxtX2RldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlkZXYtPmRldi5yZWxlYXNlID0gbG1fZGV2aWNlX3JlbGVhc2U7CisJZGV2LT5kZXYuYnVzID0gJmxtX2J1c3R5cGU7CisKKwlzbnByaW50ZihkZXYtPmRldi5idXNfaWQsIHNpemVvZihkZXYtPmRldi5idXNfaWQpLCAibG0lZCIsIGRldi0+aWQpOworCWRldi0+cmVzb3VyY2UubmFtZSA9IGRldi0+ZGV2LmJ1c19pZDsKKworCXJldCA9IHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmZGV2LT5yZXNvdXJjZSk7CisJaWYgKHJldCA9PSAwKSB7CisJCXJldCA9IGRldmljZV9yZWdpc3RlcigmZGV2LT5kZXYpOworCQlpZiAocmV0KQorCQkJcmVsZWFzZV9yZXNvdXJjZSgmZGV2LT5yZXNvdXJjZSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0wobG1fZHJpdmVyX3JlZ2lzdGVyKTsKK0VYUE9SVF9TWU1CT0wobG1fZHJpdmVyX3VucmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaS5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NGVjOTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvcGNpLmMKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaS1pbnRlZ3JhdG9yLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqCisgKiAgUENJIGZ1bmN0aW9ucyBmb3IgSW50ZWdyYXRvcgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisvKiAKKyAqIEEgc21hbGwgbm90ZSBhYm91dCBicmlkZ2VzIGFuZCBpbnRlcnJ1cHRzLiAgVGhlIERFQ2NoaXAgMjEwNTAgKGFuZAorICogbGF0ZXIpIGFkaGVyZXMgdG8gdGhlIFBDSS1QQ0kgYnJpZGdlIHNwZWNpZmljYXRpb24uICBUaGlzIHNheXMgdGhhdAorICogdGhlIGludGVycnVwdHMgb24gdGhlIG90aGVyIHNpZGUgb2YgYSBicmlkZ2UgYXJlIHN3aXp6bGVkIGluIHRoZQorICogZm9sbG93aW5nIG1hbm5lcjoKKyAqCisgKiBEZXYgICAgSW50ZXJydXB0ICAgSW50ZXJydXB0IAorICogICAgICAgIFBpbiBvbiAgICAgIFBpbiBvbiAKKyAqICAgICAgICBEZXZpY2UgICAgICBDb25uZWN0b3IKKyAqCisgKiAgIDQgICAgQSAgICAgICAgICAgQQorICogICAgICAgIEIgICAgICAgICAgIEIKKyAqICAgICAgICBDICAgICAgICAgICBDCisgKiAgICAgICAgRCAgICAgICAgICAgRAorICogCisgKiAgIDUgICAgQSAgICAgICAgICAgQgorICogICAgICAgIEIgICAgICAgICAgIEMKKyAqICAgICAgICBDICAgICAgICAgICBECisgKiAgICAgICAgRCAgICAgICAgICAgQQorICoKKyAqICAgNiAgICBBICAgICAgICAgICBDCisgKiAgICAgICAgQiAgICAgICAgICAgRAorICogICAgICAgIEMgICAgICAgICAgIEEKKyAqICAgICAgICBEICAgICAgICAgICBCCisgKgorICogICA3ICAgIEEgICAgICAgICAgIEQKKyAqICAgICAgICBCICAgICAgICAgICBBCisgKiAgICAgICAgQyAgICAgICAgICAgQgorICogICAgICAgIEQgICAgICAgICAgIEMKKyAqCisgKiBXaGVyZSBBID0gcGluIDEsIEIgPSBwaW4gMiBhbmQgc28gb24gYW5kIHBpbj0wID0gZGVmYXVsdCA9IEEuCisgKiBUaHVzLCBlYWNoIHN3aXp6bGUgaXMgKChwaW4tMSkgKyAoZGV2aWNlIy00KSkgJSA0CisgKgorICogVGhlIGZvbGxvd2luZyBjb2RlIHN3aXp6bGVzIGZvciBleGFjdGx5IG9uZSBicmlkZ2UuICAKKyAqLworc3RhdGljIGlubGluZSBpbnQgYnJpZGdlX3N3aXp6bGUoaW50IHBpbiwgdW5zaWduZWQgaW50IHNsb3QpIAoreworCXJldHVybiAocGluICsgc2xvdCkgJiAzOworfQorCisvKgorICogVGhpcyByb3V0aW5lIGhhbmRsZXMgbXVsdGlwbGUgYnJpZGdlcy4KKyAqLworc3RhdGljIHU4IF9faW5pdCBpbnRlZ3JhdG9yX3N3aXp6bGUoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggKnBpbnApCit7CisJaW50IHBpbiA9ICpwaW5wOworCisJaWYgKHBpbiA9PSAwKQorCQlwaW4gPSAxOworCisJcGluIC09IDE7CisJd2hpbGUgKGRldi0+YnVzLT5zZWxmKSB7CisJCXBpbiA9IGJyaWRnZV9zd2l6emxlKHBpbiwgUENJX1NMT1QoZGV2LT5kZXZmbikpOworCQkvKgorCQkgKiBtb3ZlIHVwIHRoZSBjaGFpbiBvZiBicmlkZ2VzLCBzd2l6emxpbmcgYXMgd2UgZ28uCisJCSAqLworCQlkZXYgPSBkZXYtPmJ1cy0+c2VsZjsKKwl9CisJKnBpbnAgPSBwaW4gKyAxOworCisJcmV0dXJuIFBDSV9TTE9UKGRldi0+ZGV2Zm4pOworfQorCitzdGF0aWMgaW50IGlycV90YWJbNF0gX19pbml0ZGF0YSA9IHsKKwlJUlFfQVBfUENJSU5UMCwJSVJRX0FQX1BDSUlOVDEsCUlSUV9BUF9QQ0lJTlQyLAlJUlFfQVBfUENJSU5UMworfTsKKworLyoKKyAqIG1hcCB0aGUgc3BlY2lmaWVkIGRldmljZS9zbG90L3BpbiB0byBhbiBJUlEuICBUaGlzIHdvcmtzIG91dCBzdWNoCisgKiB0aGF0IHNsb3QgOSBwaW4gMSBpcyBJTlQwLCBwaW4gMiBpcyBJTlQxLCBhbmQgc2xvdCAxMCBwaW4gMSBpcyBJTlQxLgorICovCitzdGF0aWMgaW50IF9faW5pdCBpbnRlZ3JhdG9yX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoreworCWludCBpbnRuciA9ICgoc2xvdCAtIDkpICsgKHBpbiAtIDEpKSAmIDM7CisKKwlyZXR1cm4gaXJxX3RhYltpbnRucl07Cit9CisKK2V4dGVybiB2b2lkIHBjaV92M19pbml0KHZvaWQgKik7CisKK3N0YXRpYyBzdHJ1Y3QgaHdfcGNpIGludGVncmF0b3JfcGNpIF9faW5pdGRhdGEgPSB7CisJLnN3aXp6bGUJCT0gaW50ZWdyYXRvcl9zd2l6emxlLAorCS5tYXBfaXJxCQk9IGludGVncmF0b3JfbWFwX2lycSwKKwkuc2V0dXAJCQk9IHBjaV92M19zZXR1cCwKKwkubnJfY29udHJvbGxlcnMJCT0gMSwKKwkuc2NhbgkJCT0gcGNpX3YzX3NjYW5fYnVzLAorCS5wcmVpbml0CQk9IHBjaV92M19wcmVpbml0LAorCS5wb3N0aW5pdAkJPSBwY2lfdjNfcG9zdGluaXQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbnRlZ3JhdG9yX3BjaV9pbml0KHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfaW50ZWdyYXRvcigpKQorCQlwY2lfY29tbW9uX2luaXQoJmludGVncmF0b3JfcGNpKTsKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKGludGVncmF0b3JfcGNpX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaV92My5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaV92My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOWE2M2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvcGNpX3YzLmMKQEAgLTAsMCArMSw2MDQgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaV92My5jCisgKgorICogIFBDSSBmdW5jdGlvbnMgZm9yIFYzIGhvc3QgUENJIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvcGNpX3YzLmg+CisKKy8qCisgKiBUaGUgVjMgUENJIGludGVyZmFjZSBjaGlwIGluIEludGVncmF0b3IgcHJvdmlkZXMgc2V2ZXJhbCB3aW5kb3dzIGZyb20KKyAqIGxvY2FsIGJ1cyBtZW1vcnkgaW50byB0aGUgUENJIG1lbW9yeSBhcmVhcy4gICBVbmZvcnR1bmF0ZWx5LCB0aGVyZQorICogYXJlIG5vdCByZWFsbHkgZW5vdWdoIHdpbmRvd3MgZm9yIG91ciB1c2FnZSwgdGhlcmVmb3JlIHdlIHJldXNlIAorICogb25lIG9mIHRoZSB3aW5kb3dzIGZvciBhY2Nlc3MgdG8gUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UuICBUaGUKKyAqIG1lbW9yeSBtYXAgaXMgYXMgZm9sbG93czoKKyAqIAorICogTG9jYWwgQnVzIE1lbW9yeSAgICAgICAgIFVzYWdlCisgKiAKKyAqIDQwMDAwMDAwIC0gNEZGRkZGRkYgICAgICBQQ0kgbWVtb3J5LiAgMjU2TSBub24tcHJlZmV0Y2hhYmxlCisgKiA1MDAwMDAwMCAtIDVGRkZGRkZGICAgICAgUENJIG1lbW9yeS4gIDI1Nk0gcHJlZmV0Y2hhYmxlCisgKiA2MDAwMDAwMCAtIDYwRkZGRkZGICAgICAgUENJIElPLiAgMTZNCisgKiA2MTAwMDAwMCAtIDYxRkZGRkZGICAgICAgUENJIENvbmZpZ3VyYXRpb24uIDE2TQorICogCisgKiBUaGVyZSBhcmUgdGhyZWUgVjMgd2luZG93cywgZWFjaCBkZXNjcmliZWQgYnkgYSBwYWlyIG9mIFYzIHJlZ2lzdGVycy4KKyAqIFRoZXNlIGFyZSBMQl9CQVNFMC9MQl9NQVAwLCBMQl9CQVNFMS9MQl9NQVAxIGFuZCBMQl9CQVNFMi9MQl9NQVAyLgorICogQmFzZTAgYW5kIEJhc2UxIGNhbiBiZSB1c2VkIGZvciBhbnkgdHlwZSBvZiBQQ0kgbWVtb3J5IGFjY2Vzcy4gICBCYXNlMgorICogY2FuIGJlIHVzZWQgZWl0aGVyIGZvciBQQ0kgSS9PIG9yIGZvciBJMjAgYWNjZXNzZXMuICBCeSBkZWZhdWx0LCB1SEFMCisgKiB1c2VzIHRoaXMgb25seSBmb3IgUENJIElPIHNwYWNlLgorICogCisgKiBOb3JtYWxseSB0aGVzZSBzcGFjZXMgYXJlIG1hcHBlZCB1c2luZyB0aGUgZm9sbG93aW5nIGJhc2UgcmVnaXN0ZXJzOgorICogCisgKiBVc2FnZSBMb2NhbCBCdXMgTWVtb3J5ICAgICAgICAgQmFzZS9NYXAgcmVnaXN0ZXJzIHVzZWQKKyAqIAorICogTWVtICAgNDAwMDAwMDAgLSA0RkZGRkZGRiAgICAgIExCX0JBU0UwL0xCX01BUDAKKyAqIE1lbSAgIDUwMDAwMDAwIC0gNUZGRkZGRkYgICAgICBMQl9CQVNFMS9MQl9NQVAxCisgKiBJTyAgICA2MDAwMDAwMCAtIDYwRkZGRkZGICAgICAgTEJfQkFTRTIvTEJfTUFQMgorICogQ2ZnICAgNjEwMDAwMDAgLSA2MUZGRkZGRgorICogCisgKiBUaGlzIG1lYW5zIHRoYXQgSTIwIGFuZCBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBhY2Nlc3NlcyB3aWxsIGZhaWwuCisgKiBXaGVuIFBDSSBjb25maWd1cmF0aW9uIGFjY2Vzc2VzIGFyZSBuZWVkZWQgKHZpYSB0aGUgdUhBTCBQQ0kgCisgKiBjb25maWd1cmF0aW9uIHNwYWNlIHByaW1pdGl2ZXMpIHdlIG11c3QgcmVtYXAgdGhlIHNwYWNlcyBhcyBmb2xsb3dzOgorICogCisgKiBVc2FnZSBMb2NhbCBCdXMgTWVtb3J5ICAgICAgICAgQmFzZS9NYXAgcmVnaXN0ZXJzIHVzZWQKKyAqIAorICogTWVtICAgNDAwMDAwMDAgLSA0RkZGRkZGRiAgICAgIExCX0JBU0UwL0xCX01BUDAKKyAqIE1lbSAgIDUwMDAwMDAwIC0gNUZGRkZGRkYgICAgICBMQl9CQVNFMC9MQl9NQVAwCisgKiBJTyAgICA2MDAwMDAwMCAtIDYwRkZGRkZGICAgICAgTEJfQkFTRTIvTEJfTUFQMgorICogQ2ZnICAgNjEwMDAwMDAgLSA2MUZGRkZGRiAgICAgIExCX0JBU0UxL0xCX01BUDEKKyAqIAorICogVG8gbWFrZSB0aGlzIHdvcmssIHRoZSBjb2RlIGRlcGVuZHMgb24gb3ZlcmxhcHBpbmcgd2luZG93cyB3b3JraW5nLgorICogVGhlIFYzIGNoaXAgdHJhbnNsYXRlcyBhbiBhZGRyZXNzIGJ5IGNoZWNraW5nIGl0cyByYW5nZSB3aXRoaW4gCisgKiBlYWNoIG9mIHRoZSBCQVNFL01BUCBwYWlycyBpbiB0dXJuIChpbiBhc2NlbmRpbmcgcmVnaXN0ZXIgbnVtYmVyCisgKiBvcmRlcikuICBJdCB3aWxsIHVzZSB0aGUgZmlyc3QgbWF0Y2hpbmcgcGFpci4gICBTbywgZm9yIGV4YW1wbGUsCisgKiBpZiB0aGUgc2FtZSBhZGRyZXNzIGlzIG1hcHBlZCBieSBib3RoIExCX0JBU0UwL0xCX01BUDAgYW5kCisgKiBMQl9CQVNFMS9MQl9NQVAxLCB0aGUgVjMgd2lsbCB1c2UgdGhlIHRyYW5zbGF0aW9uIGZyb20gCisgKiBMQl9CQVNFMC9MQl9NQVAwLgorICogCisgKiBUbyBhbGxvdyBQQ0kgQ29uZmlndXJhdGlvbiBzcGFjZSBhY2Nlc3MsIHRoZSBjb2RlIGVubGFyZ2VzIHRoZQorICogd2luZG93IG1hcHBlZCBieSBMQl9CQVNFMC9MQl9NQVAwIGZyb20gMjU2TSB0byA1MTJNLiAgVGhpcyBvY2NsdWRlcworICogdGhlIHdpbmRvd3MgY3VycmVudGx5IG1hcHBlZCBieSBMQl9CQVNFMS9MQl9NQVAxIHNvIHRoYXQgaXQgY2FuCisgKiBiZSByZW1hcHBlZCBmb3IgdXNlIGJ5IGNvbmZpZ3VyYXRpb24gY3ljbGVzLgorICogCisgKiBBdCB0aGUgZW5kIG9mIHRoZSBQQ0kgQ29uZmlndXJhdGlvbiBzcGFjZSBhY2Nlc3NlcywgCisgKiBMQl9CQVNFMS9MQl9NQVAxIGlzIHJlc2V0IHRvIG1hcCBQQ0kgTWVtb3J5LiAgRmluYWxseSB0aGUgd2luZG93CisgKiBtYXBwZWQgYnkgTEJfQkFTRTAvTEJfTUFQMCBpcyByZWR1Y2VkIGluIHNpemUgZnJvbSA1MTJNIHRvIDI1Nk0gdG8KKyAqIHJldmVhbCB0aGUgbm93IHJlc3RvcmVkIExCX0JBU0UxL0xCX01BUDEgd2luZG93LgorICogCisgKiBOT1RFOiBXZSBkbyBub3Qgc2V0IHVwIEkyTyBtYXBwaW5nLiAgSSBzdXNwZWN0IHRoYXQgdGhpcyBpcyBvbmx5CisgKiBmb3IgYW4gaW50ZWxsaWdlbnQgKHRhcmdldCkgZGV2aWNlLiAgVXNpbmcgSTJPIGRpc2FibGVzIG1vc3Qgb2YKKyAqIHRoZSBtYXBwaW5ncyBpbnRvIFBDSSBtZW1vcnkuCisgKi8KKworLy8gVjMgYWNjZXNzIHJvdXRpbmVzCisjZGVmaW5lIHYzX3dyaXRlYihvLHYpIF9fcmF3X3dyaXRlYih2LCBQQ0lfVjNfVkFERFIgKyAodW5zaWduZWQgaW50KShvKSkKKyNkZWZpbmUgdjNfcmVhZGIobykgICAgKF9fcmF3X3JlYWRiKFBDSV9WM19WQUREUiArICh1bnNpZ25lZCBpbnQpKG8pKSkKKworI2RlZmluZSB2M193cml0ZXcobyx2KSBfX3Jhd193cml0ZXcodiwgUENJX1YzX1ZBRERSICsgKHVuc2lnbmVkIGludCkobykpCisjZGVmaW5lIHYzX3JlYWR3KG8pICAgIChfX3Jhd19yZWFkdyhQQ0lfVjNfVkFERFIgKyAodW5zaWduZWQgaW50KShvKSkpCisKKyNkZWZpbmUgdjNfd3JpdGVsKG8sdikgX19yYXdfd3JpdGVsKHYsIFBDSV9WM19WQUREUiArICh1bnNpZ25lZCBpbnQpKG8pKQorI2RlZmluZSB2M19yZWFkbChvKSAgICAoX19yYXdfcmVhZGwoUENJX1YzX1ZBRERSICsgKHVuc2lnbmVkIGludCkobykpKQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiByb3V0aW5lOgl1SEFMaXJfUENJTWFrZUNvbmZpZ0FkZHJlc3MoKQorICoKKyAqIHBhcmFtZXRlcnM6CWJ1cyA9IHdoaWNoIGJ1cworICogICAgICAgICAgICAgIGRldmljZSA9IHdoaWNoIGRldmljZQorICogICAgICAgICAgICAgIGZ1bmN0aW9uID0gd2hpY2ggZnVuY3Rpb24KKyAqCQlvZmZzZXQgPSBjb25maWd1cmF0aW9uIHNwYWNlIHJlZ2lzdGVyIHdlIGFyZSBpbnRlcmVzdGVkIGluCisgKgorICogZGVzY3JpcHRpb246CXRoaXMgcm91dGluZSB3aWxsIGdlbmVyYXRlIGEgcGxhdGZvcm0gZGVwZW5kZW50IGNvbmZpZworICoJCWFkZHJlc3MuCisgKgorICogY2FsbHM6CW5vbmUKKyAqCisgKiByZXR1cm5zOgljb25maWd1cmF0aW9uIGFkZHJlc3MgdG8gcGxheSBvbiB0aGUgUENJIGJ1cworICoKKyAqIFRvIGdlbmVyYXRlIHRoZSBhcHByb3ByaWF0ZSBQQ0kgY29uZmlndXJhdGlvbiBjeWNsZXMgaW4gdGhlIFBDSSAKKyAqIGNvbmZpZ3VyYXRpb24gYWRkcmVzcyBzcGFjZSwgeW91IHByZXNlbnQgdGhlIFYzIHdpdGggdGhlIGZvbGxvd2luZyBwYXR0ZXJuIAorICogKHdoaWNoIGlzIHZlcnkgbmVhcmx5IGEgdHlwZSAxIChleGNlcHQgdGhhdCB0aGUgbG93ZXIgdHdvIGJpdHMgYXJlIDAwIGFuZAorICogbm90IDAxKS4gICBJbiBvcmRlciBmb3IgdGhpcyBtYXBwaW5nIHRvIHdvcmsgeW91IG5lZWQgdG8gc2V0IHVwIG9uZSBvZgorICogdGhlIGxvY2FsIHRvIFBDSSBhcGVyYXR1cmVzIHRvIDE2TWJ5dGVzIGluIGxlbmd0aCB0cmFuc2xhdGluZyB0bworICogUENJIGNvbmZpZ3VyYXRpb24gc3BhY2Ugc3RhcnRpbmcgYXQgMHgwMDAwLjAwMDAuCisgKgorICogUENJIGNvbmZpZ3VyYXRpb24gY3ljbGVzIGxvb2sgbGlrZSB0aGlzOgorICoKKyAqIFR5cGUgMDoKKyAqCisgKiAgMyAzfDMgMyAyIDJ8MiAyIDIgMnwyIDIgMiAyfDEgMSAxIDF8MSAxIDEgMXwxIDEgCisgKiAgMyAyfDEgMCA5IDh8NyA2IDUgNHwzIDIgMSAwfDkgOCA3IDZ8NSA0IDMgMnwxIDAgOSA4fDcgNiA1IDR8MyAyIDEgMAorICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiB8IHwgfER8RHxEfER8RHxEfER8RHxEfER8RHxEfER8RHxEfER8RHxEfER8RHxEfEZ8RnxGfFJ8UnxSfFJ8UnxSfDB8MHwKKyAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICoKKyAqCTMxOjExCURldmljZSBzZWxlY3QgYml0LgorICogCTEwOjgJRnVuY3Rpb24gbnVtYmVyCisgKiAJIDc6MglSZWdpc3RlciBudW1iZXIKKyAqCisgKiBUeXBlIDE6CisgKgorICogIDMgM3wzIDMgMiAyfDIgMiAyIDJ8MiAyIDIgMnwxIDEgMSAxfDEgMSAxIDF8MSAxIAorICogIDMgMnwxIDAgOSA4fDcgNiA1IDR8MyAyIDEgMHw5IDggNyA2fDUgNCAzIDJ8MSAwIDkgOHw3IDYgNSA0fDMgMiAxIDAKKyAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogfCB8IHwgfCB8IHwgfCB8IHwgfCB8QnxCfEJ8QnxCfEJ8QnxCfER8RHxEfER8RHxGfEZ8RnxSfFJ8UnxSfFJ8UnwwfDF8CisgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAqCisgKgkzMToyNAlyZXNlcnZlZAorICoJMjM6MTYJYnVzIG51bWJlciAoOCBiaXRzID0gMTI4IHBvc3NpYmxlIGJ1c2VzKQorICoJMTU6MTEJRGV2aWNlIG51bWJlciAoNSBiaXRzKQorICoJMTA6OAlmdW5jdGlvbiBudW1iZXIKKyAqCSA3OjIJcmVnaXN0ZXIgbnVtYmVyCisgKiAgCisgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodjNfbG9jayk7CisKKyNkZWZpbmUgUENJX0JVU19OT05NRU1fU1RBUlQJMHgwMDAwMDAwMAorI2RlZmluZSBQQ0lfQlVTX05PTk1FTV9TSVpFCVNaXzI1Nk0KKworI2RlZmluZSBQQ0lfQlVTX1BSRU1FTV9TVEFSVAlQQ0lfQlVTX05PTk1FTV9TVEFSVCArIFBDSV9CVVNfTk9OTUVNX1NJWkUKKyNkZWZpbmUgUENJX0JVU19QUkVNRU1fU0laRQlTWl8yNTZNCisKKyNpZiBQQ0lfQlVTX05PTk1FTV9TVEFSVCAmIDB4MDAwZmZmZmYKKyNlcnJvciBQQ0lfQlVTX05PTk1FTV9TVEFSVCBtdXN0IGJlIG1lZ2FieXRlIGFsaWduZWQKKyNlbmRpZgorI2lmIFBDSV9CVVNfUFJFTUVNX1NUQVJUICYgMHgwMDBmZmZmZgorI2Vycm9yIFBDSV9CVVNfUFJFTUVNX1NUQVJUIG11c3QgYmUgbWVnYWJ5dGUgYWxpZ25lZAorI2VuZGlmCisKKyN1bmRlZiBWM19MQl9CQVNFX1BSRUZFVENICisjZGVmaW5lIFYzX0xCX0JBU0VfUFJFRkVUQ0ggMAorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB2M19vcGVuX2NvbmZpZ193aW5kb3coc3RydWN0IHBjaV9idXMgKmJ1cywKKwkJCQkJICAgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgb2Zmc2V0KQoreworCXVuc2lnbmVkIGludCBhZGRyZXNzLCBtYXBhZGRyZXNzLCBidXNucjsKKworCWJ1c25yID0gYnVzLT5udW1iZXI7CisKKwkvKgorCSAqIFRyYXAgb3V0IGlsbGVnYWwgdmFsdWVzCisJICovCisJaWYgKG9mZnNldCA+IDI1NSkKKwkJQlVHKCk7CisJaWYgKGJ1c25yID4gMjU1KQorCQlCVUcoKTsKKwlpZiAoZGV2Zm4gPiAyNTUpCisJCUJVRygpOworCisJaWYgKGJ1c25yID09IDApIHsKKwkJaW50IHNsb3QgPSBQQ0lfU0xPVChkZXZmbik7CisKKwkJLyoKKwkJICogbG9jYWwgYnVzIHNlZ21lbnQgc28gbmVlZCBhIHR5cGUgMCBjb25maWcgY3ljbGUKKwkJICoKKwkJICogYnVpbGQgdGhlIFBDSSBjb25maWd1cmF0aW9uICJhZGRyZXNzIiB3aXRoIG9uZS1ob3QgaW4KKwkJICogQTMxLUExMQorCQkgKgorCQkgKiBtYXBhZGRyZXNzOgorCQkgKiAgMzoxID0gY29uZmlnIGN5Y2xlICgxMDEpCisJCSAqICAwICAgPSBQQ0kgQTEgJiBBMCBhcmUgMCAoMCkKKwkJICovCisJCWFkZHJlc3MgPSBQQ0lfRlVOQyhkZXZmbikgPDwgODsKKwkJbWFwYWRkcmVzcyA9IFYzX0xCX01BUF9UWVBFX0NPTkZJRzsKKworCQlpZiAoc2xvdCA+IDEyKQorCQkJLyoKKwkJCSAqIGhpZ2ggb3JkZXIgYml0cyBhcmUgaGFuZGxlZCBieSB0aGUgTUFQIHJlZ2lzdGVyCisJCQkgKi8KKwkJCW1hcGFkZHJlc3MgfD0gMSA8PCAoc2xvdCAtIDUpOworCQllbHNlCisJCQkvKgorCQkJICogbG93IG9yZGVyIGJpdHMgaGFuZGxlZCBkaXJlY3RseSBpbiB0aGUgYWRkcmVzcworCQkJICovCisJCQlhZGRyZXNzIHw9IDEgPDwgKHNsb3QgKyAxMSk7CisJfSBlbHNlIHsKKyAgICAgICAgCS8qCisJCSAqIG5vdCB0aGUgbG9jYWwgYnVzIHNlZ21lbnQgc28gbmVlZCBhIHR5cGUgMSBjb25maWcgY3ljbGUKKwkJICoKKwkJICogYWRkcmVzczoKKwkJICogIDIzOjE2ID0gYnVzIG51bWJlcgorCQkgKiAgMTU6MTEgPSBzbG90IG51bWJlciAoNzozIG9mIGRldmZuKQorCQkgKiAgMTA6OCAgPSBmdW5jIG51bWJlciAoMjowIG9mIGRldmZuKQorCQkgKgorCQkgKiBtYXBhZGRyZXNzOgorCQkgKiAgMzoxID0gY29uZmlnIGN5Y2xlICgxMDEpCisJCSAqICAwICAgPSBQQ0kgQTEgJiBBMCBmcm9tIGhvc3QgYnVzICgxKQorCQkgKi8KKwkJbWFwYWRkcmVzcyA9IFYzX0xCX01BUF9UWVBFX0NPTkZJRyB8IFYzX0xCX01BUF9BRF9MT1dfRU47CisJCWFkZHJlc3MgPSAoYnVzbnIgPDwgMTYpIHwgKGRldmZuIDw8IDgpOworCX0KKworCS8qCisJICogU2V0IHVwIGJhc2UwIHRvIHNlZSBhbGwgNTEyTWJ5dGVzIG9mIG1lbW9yeSBzcGFjZSAobm90CisJICogcHJlZmV0Y2hhYmxlKSwgdGhpcyBmcmVlcyB1cCBiYXNlMSBmb3IgcmUtdXNlIGJ5CisJICogY29uZmlndXJhdGlvbiBtZW1vcnkKKwkgKi8KKwl2M193cml0ZWwoVjNfTEJfQkFTRTAsIHYzX2FkZHJfdG9fbGJfYmFzZShQSFlTX1BDSV9NRU1fQkFTRSkgfAorCQkJVjNfTEJfQkFTRV9BRFJfU0laRV81MTJNQiB8IFYzX0xCX0JBU0VfRU5BQkxFKTsKKworCS8qCisJICogU2V0IHVwIGJhc2UxL21hcDEgdG8gcG9pbnQgaW50byBjb25maWd1cmF0aW9uIHNwYWNlLgorCSAqLworCXYzX3dyaXRlbChWM19MQl9CQVNFMSwgdjNfYWRkcl90b19sYl9iYXNlKFBIWVNfUENJX0NPTkZJR19CQVNFKSB8CisJCQlWM19MQl9CQVNFX0FEUl9TSVpFXzE2TUIgfCBWM19MQl9CQVNFX0VOQUJMRSk7CisJdjNfd3JpdGV3KFYzX0xCX01BUDEsIG1hcGFkZHJlc3MpOworCisJcmV0dXJuIFBDSV9DT05GSUdfVkFERFIgKyBhZGRyZXNzICsgb2Zmc2V0OworfQorCitzdGF0aWMgdm9pZCB2M19jbG9zZV9jb25maWdfd2luZG93KHZvaWQpCit7CisJLyoKKwkgKiBSZWFzc2lnbiBiYXNlMSBmb3IgdXNlIGJ5IHByZWZldGNoYWJsZSBQQ0kgbWVtb3J5CisJICovCisJdjNfd3JpdGVsKFYzX0xCX0JBU0UxLCB2M19hZGRyX3RvX2xiX2Jhc2UoUEhZU19QQ0lfTUVNX0JBU0UgKyBTWl8yNTZNKSB8CisJCQlWM19MQl9CQVNFX0FEUl9TSVpFXzI1Nk1CIHwgVjNfTEJfQkFTRV9QUkVGRVRDSCB8CisJCQlWM19MQl9CQVNFX0VOQUJMRSk7CisJdjNfd3JpdGV3KFYzX0xCX01BUDEsIHYzX2FkZHJfdG9fbGJfbWFwKFBDSV9CVVNfUFJFTUVNX1NUQVJUKSB8CisJCQlWM19MQl9NQVBfVFlQRV9NRU1fTVVMVElQTEUpOworCisJLyoKKwkgKiBBbmQgc2hyaW5rIGJhc2UwIGJhY2sgdG8gYSAyNTZNIHdpbmRvdyAoTk9URTogTUFQMCBhbHJlYWR5IGNvcnJlY3QpCisJICovCisJdjNfd3JpdGVsKFYzX0xCX0JBU0UwLCB2M19hZGRyX3RvX2xiX2Jhc2UoUEhZU19QQ0lfTUVNX0JBU0UpIHwKKwkJCVYzX0xCX0JBU0VfQURSX1NJWkVfMjU2TUIgfCBWM19MQl9CQVNFX0VOQUJMRSk7Cit9CisKK3N0YXRpYyBpbnQgdjNfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsCisJCQkgIGludCBzaXplLCB1MzIgKnZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2M19sb2NrLCBmbGFncyk7CisJYWRkciA9IHYzX29wZW5fY29uZmlnX3dpbmRvdyhidXMsIGRldmZuLCB3aGVyZSk7CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCXYgPSBfX3Jhd19yZWFkYihhZGRyKTsKKwkJYnJlYWs7CisKKwljYXNlIDI6CisJCXYgPSBfX3Jhd19yZWFkdyhhZGRyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQl2ID0gX19yYXdfcmVhZGwoYWRkcik7CisJCWJyZWFrOworCX0KKworCXYzX2Nsb3NlX2NvbmZpZ193aW5kb3coKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2M19sb2NrLCBmbGFncyk7CisKKwkqdmFsID0gdjsKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgaW50IHYzX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwKKwkJCSAgIGludCBzaXplLCB1MzIgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnYzX2xvY2ssIGZsYWdzKTsKKwlhZGRyID0gdjNfb3Blbl9jb25maWdfd2luZG93KGJ1cywgZGV2Zm4sIHdoZXJlKTsKKworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJX19yYXdfd3JpdGViKCh1OCl2YWwsIGFkZHIpOworCQlfX3Jhd19yZWFkYihhZGRyKTsKKwkJYnJlYWs7CisKKwljYXNlIDI6CisJCV9fcmF3X3dyaXRldygodTE2KXZhbCwgYWRkcik7CisJCV9fcmF3X3JlYWR3KGFkZHIpOworCQlicmVhazsKKworCWNhc2UgNDoKKwkJX19yYXdfd3JpdGVsKHZhbCwgYWRkcik7CisJCV9fcmF3X3JlYWRsKGFkZHIpOworCQlicmVhazsKKwl9CisKKwl2M19jbG9zZV9jb25maWdfd2luZG93KCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdjNfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfb3BzIHBjaV92M19vcHMgPSB7CisJLnJlYWQJPSB2M19yZWFkX2NvbmZpZywKKwkud3JpdGUJPSB2M193cml0ZV9jb25maWcsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5vbl9tZW0gPSB7CisJLm5hbWUJPSAiUENJIG5vbi1wcmVmZXRjaGFibGUiLAorCS5zdGFydAk9IFBIWVNfUENJX01FTV9CQVNFICsgUENJX0JVU19OT05NRU1fU1RBUlQsCisJLmVuZAk9IFBIWVNfUENJX01FTV9CQVNFICsgUENJX0JVU19OT05NRU1fU1RBUlQgKyBQQ0lfQlVTX05PTk1FTV9TSVpFIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcHJlX21lbSA9IHsKKwkubmFtZQk9ICJQQ0kgcHJlZmV0Y2hhYmxlIiwKKwkuc3RhcnQJPSBQSFlTX1BDSV9NRU1fQkFTRSArIFBDSV9CVVNfUFJFTUVNX1NUQVJULAorCS5lbmQJPSBQSFlTX1BDSV9NRU1fQkFTRSArIFBDSV9CVVNfUFJFTUVNX1NUQVJUICsgUENJX0JVU19QUkVNRU1fU0laRSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX1BSRUZFVENILAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGNpX3YzX3NldHVwX3Jlc291cmNlcyhzdHJ1Y3QgcmVzb3VyY2UgKipyZXNvdXJjZSkKK3sKKwlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZub25fbWVtKSkgeworCQlwcmludGsoS0VSTl9FUlIgIlBDSTogdW5hYmxlIHRvIGFsbG9jYXRlIG5vbi1wcmVmZXRjaGFibGUgIgorCQkgICAgICAgIm1lbW9yeSByZWdpb25cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZwcmVfbWVtKSkgeworCQlyZWxlYXNlX3Jlc291cmNlKCZub25fbWVtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IHVuYWJsZSB0byBhbGxvY2F0ZSBwcmVmZXRjaGFibGUgIgorCQkgICAgICAgIm1lbW9yeSByZWdpb25cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qCisJICogYnVzLT5yZXNvdXJjZVswXSBpcyB0aGUgSU8gcmVzb3VyY2UgZm9yIHRoaXMgYnVzCisJICogYnVzLT5yZXNvdXJjZVsxXSBpcyB0aGUgbWVtIHJlc291cmNlIGZvciB0aGlzIGJ1cworCSAqIGJ1cy0+cmVzb3VyY2VbMl0gaXMgdGhlIHByZWZldGNoIG1lbSByZXNvdXJjZSBmb3IgdGhpcyBidXMKKwkgKi8KKwlyZXNvdXJjZVswXSA9ICZpb3BvcnRfcmVzb3VyY2U7CisJcmVzb3VyY2VbMV0gPSAmbm9uX21lbTsKKwlyZXNvdXJjZVsyXSA9ICZwcmVfbWVtOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBUaGVzZSBkb24ndCBzZWVtIHRvIGJlIGltcGxlbWVudGVkIG9uIHRoZSBJbnRlZ3JhdG9yIEkgaGF2ZSwgd2hpY2gKKyAqIG1lYW5zIEkgY2FuJ3QgZ2V0IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gdGhlIHJlYXNvbiBmb3IgdGhlIHBtMmZiCisgKiBwcm9ibGVtcy4gIEkgc3VwcG9zZSBJJ2xsIGp1c3QgaGF2ZSB0byBtaW5kLW1lbGQgd2l0aCB0aGUgbWFjaGluZS4gOykKKyAqLworI2RlZmluZSBTQ19QQ0kgICAgIChJT19BRERSRVNTKElOVEVHUkFUT1JfU0NfQkFTRSkgKyBJTlRFR1JBVE9SX1NDX1BDSUVOQUJMRV9PRkZTRVQpCisjZGVmaW5lIFNDX0xCRkFERFIgKElPX0FERFJFU1MoSU5URUdSQVRPUl9TQ19CQVNFKSArIDB4MjApCisjZGVmaW5lIFNDX0xCRkNPREUgKElPX0FERFJFU1MoSU5URUdSQVRPUl9TQ19CQVNFKSArIDB4MjQpCisKK3N0YXRpYyBpbnQKK3YzX3BjaV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgcGMgPSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOworCXVuc2lnbmVkIGxvbmcgaW5zdHIgPSAqKHVuc2lnbmVkIGxvbmcgKilwYzsKKyNpZiAwCisJY2hhciBidWZbMTI4XTsKKworCXNwcmludGYoYnVmLCAiVjMgZmF1bHQ6IGFkZHIgMHglMDhseCwgRlNSIDB4JTAzeCwgUEMgMHglMDhseCBbJTA4bHhdIExCRkFERFI9JTA4eCBMQkZDT0RFPSUwMnggSVNUQVQ9JTAyeFxuIiwKKwkJYWRkciwgZnNyLCBwYywgaW5zdHIsIF9fcmF3X3JlYWRsKFNDX0xCRkFERFIpLCBfX3Jhd19yZWFkbChTQ19MQkZDT0RFKSAmIDI1NSwKKwkJdjNfcmVhZGIoVjNfTEJfSVNUQVQpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXMiLCBidWYpOworCXByaW50YXNjaWkoYnVmKTsKKyNlbmRpZgorCisJdjNfd3JpdGViKFYzX0xCX0lTVEFULCAwKTsKKwlfX3Jhd193cml0ZWwoMywgU0NfUENJKTsKKworCS8qCisJICogSWYgdGhlIGluc3RydWN0aW9uIGJlaW5nIGV4ZWN1dGVkIHdhcyBhIHJlYWQsCisJICogbWFrZSBpdCBsb29rIGxpa2UgaXQgcmVhZCBhbGwtb25lcy4KKwkgKi8KKwlpZiAoKGluc3RyICYgMHgwYzEwMDAwMCkgPT0gMHgwNDEwMDAwMCkgeworCQlpbnQgcmVnID0gKGluc3RyID4+IDEyKSAmIDE1OworCQl1bnNpZ25lZCBsb25nIHZhbDsKKworCQlpZiAoaW5zdHIgJiAweDAwNDAwMDAwKQorCQkJdmFsID0gMjU1OworCQllbHNlCisJCQl2YWwgPSAtMTsKKworCQlyZWdzLT51cmVnc1tyZWddID0gdmFsOworCQlyZWdzLT5BUk1fcGMgKz0gNDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKChpbnN0ciAmIDB4MGUxMDAwOTApID09IDB4MDAxMDAwOTApIHsKKwkJaW50IHJlZyA9IChpbnN0ciA+PiAxMikgJiAxNTsKKworCQlyZWdzLT51cmVnc1tyZWddID0gLTE7CisJCXJlZ3MtPkFSTV9wYyArPSA0OworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlycXJldHVybl90IHYzX2lycShpbnQgaXJxLCB2b2lkICpkZXZpZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisjaWZkZWYgQ09ORklHX0RFQlVHX0xMCisJdW5zaWduZWQgbG9uZyBwYyA9IGluc3RydWN0aW9uX3BvaW50ZXIocmVncyk7CisJdW5zaWduZWQgbG9uZyBpbnN0ciA9ICoodW5zaWduZWQgbG9uZyAqKXBjOworCWNoYXIgYnVmWzEyOF07CisKKwlzcHJpbnRmKGJ1ZiwgIlYzIGludCAlZDogcGM9MHglMDhseCBbJTA4bHhdIExCRkFERFI9JTA4eCBMQkZDT0RFPSUwMnggSVNUQVQ9JTAyeFxuIiwgaXJxLAorCQlwYywgaW5zdHIsIF9fcmF3X3JlYWRsKFNDX0xCRkFERFIpLCBfX3Jhd19yZWFkbChTQ19MQkZDT0RFKSAmIDI1NSwKKwkJdjNfcmVhZGIoVjNfTEJfSVNUQVQpKTsKKwlwcmludGFzY2lpKGJ1Zik7CisjZW5kaWYKKworCXYzX3dyaXRldyhWM19QQ0lfU1RBVCwgMHhmMDAwKTsKKwl2M193cml0ZWIoVjNfTEJfSVNUQVQsIDApOworCV9fcmF3X3dyaXRlbCgzLCBTQ19QQ0kpOworCisjaWZkZWYgQ09ORklHX0RFQlVHX0xMCisJLyoKKwkgKiBJZiB0aGUgaW5zdHJ1Y3Rpb24gYmVpbmcgZXhlY3V0ZWQgd2FzIGEgcmVhZCwKKwkgKiBtYWtlIGl0IGxvb2sgbGlrZSBpdCByZWFkIGFsbC1vbmVzLgorCSAqLworCWlmICgoaW5zdHIgJiAweDBjMTAwMDAwKSA9PSAweDA0MTAwMDAwKSB7CisJCWludCByZWcgPSAoaW5zdHIgPj4gMTYpICYgMTU7CisJCXNwcmludGYoYnVmLCAiICAgcmVnJWQgPSAlMDhseFxuIiwgcmVnLCByZWdzLT51cmVnc1tyZWddKTsKKwkJcHJpbnRhc2NpaShidWYpOworCX0KKyNlbmRpZgorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworaW50IF9faW5pdCBwY2lfdjNfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAobnIgPT0gMCkgeworCQlzeXMtPm1lbV9vZmZzZXQgPSBQSFlTX1BDSV9NRU1fQkFTRTsKKwkJcmV0ID0gcGNpX3YzX3NldHVwX3Jlc291cmNlcyhzeXMtPnJlc291cmNlKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgcGNpX2J1cyAqcGNpX3YzX3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQoreworCXJldHVybiBwY2lfc2Nhbl9idXMoc3lzLT5idXNuciwgJnBjaV92M19vcHMsIHN5cyk7Cit9CisKKy8qCisgKiBWM19MQl9CQVNFPyAtIGxvY2FsIGJ1cyBhZGRyZXNzCisgKiBWM19MQl9NQVA/ICAtIHBjaSBidXMgYWRkcmVzcworICovCit2b2lkIF9faW5pdCBwY2lfdjNfcHJlaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHRlbXA7CisJaW50IHJldDsKKworCS8qCisJICogSG9vayBpbiBvdXIgZmF1bHQgaGFuZGxlciBmb3IgUENJIGVycm9ycworCSAqLworCWhvb2tfZmF1bHRfY29kZSg0LCB2M19wY2lfZmF1bHQsIFNJR0JVUywgImV4dGVybmFsIGFib3J0IG9uIGxpbmVmZXRjaCIpOworCWhvb2tfZmF1bHRfY29kZSg2LCB2M19wY2lfZmF1bHQsIFNJR0JVUywgImV4dGVybmFsIGFib3J0IG9uIGxpbmVmZXRjaCIpOworCWhvb2tfZmF1bHRfY29kZSg4LCB2M19wY2lfZmF1bHQsIFNJR0JVUywgImV4dGVybmFsIGFib3J0IG9uIG5vbi1saW5lZmV0Y2giKTsKKwlob29rX2ZhdWx0X2NvZGUoMTAsIHYzX3BjaV9mYXVsdCwgU0lHQlVTLCAiZXh0ZXJuYWwgYWJvcnQgb24gbm9uLWxpbmVmZXRjaCIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnYzX2xvY2ssIGZsYWdzKTsKKworCS8qCisJICogVW5sb2NrIFYzIHJlZ2lzdGVycywgYnV0IG9ubHkgaWYgdGhleSB3ZXJlIHByZXZpb3VzbHkgbG9ja2VkLgorCSAqLworCWlmICh2M19yZWFkdyhWM19TWVNURU0pICYgVjNfU1lTVEVNX01fTE9DSykKKwkJdjNfd3JpdGV3KFYzX1NZU1RFTSwgMHhhMDVmKTsKKworCS8qCisJICogU2V0dXAgd2luZG93IDAgLSBQQ0kgbm9uLXByZWZldGNoYWJsZSBtZW1vcnkKKwkgKiAgTG9jYWw6IDB4NDAwMDAwMDAgQnVzOiAweDAwMDAwMDAwIFNpemU6IDI1Nk1CCisJICovCisJdjNfd3JpdGVsKFYzX0xCX0JBU0UwLCB2M19hZGRyX3RvX2xiX2Jhc2UoUEhZU19QQ0lfTUVNX0JBU0UpIHwKKwkJCVYzX0xCX0JBU0VfQURSX1NJWkVfMjU2TUIgfCBWM19MQl9CQVNFX0VOQUJMRSk7CisJdjNfd3JpdGV3KFYzX0xCX01BUDAsIHYzX2FkZHJfdG9fbGJfbWFwKFBDSV9CVVNfTk9OTUVNX1NUQVJUKSB8CisJCQlWM19MQl9NQVBfVFlQRV9NRU0pOworCisJLyoKKwkgKiBTZXR1cCB3aW5kb3cgMSAtIFBDSSBwcmVmZXRjaGFibGUgbWVtb3J5CisJICogIExvY2FsOiAweDUwMDAwMDAwIEJ1czogMHgxMDAwMDAwMCBTaXplOiAyNTZNQgorCSAqLworCXYzX3dyaXRlbChWM19MQl9CQVNFMSwgdjNfYWRkcl90b19sYl9iYXNlKFBIWVNfUENJX01FTV9CQVNFICsgU1pfMjU2TSkgfAorCQkJVjNfTEJfQkFTRV9BRFJfU0laRV8yNTZNQiB8IFYzX0xCX0JBU0VfUFJFRkVUQ0ggfAorCQkJVjNfTEJfQkFTRV9FTkFCTEUpOworCXYzX3dyaXRldyhWM19MQl9NQVAxLCB2M19hZGRyX3RvX2xiX21hcChQQ0lfQlVTX1BSRU1FTV9TVEFSVCkgfAorCQkJVjNfTEJfTUFQX1RZUEVfTUVNX01VTFRJUExFKTsKKworCS8qCisJICogU2V0dXAgd2luZG93IDIgLSBQQ0kgSU8KKwkgKi8KKwl2M193cml0ZWwoVjNfTEJfQkFTRTIsIHYzX2FkZHJfdG9fbGJfYmFzZTIoUEhZU19QQ0lfSU9fQkFTRSkgfAorCQkJVjNfTEJfQkFTRV9FTkFCTEUpOworCXYzX3dyaXRldyhWM19MQl9NQVAyLCB2M19hZGRyX3RvX2xiX21hcDIoMCkpOworCisJLyoKKwkgKiBEaXNhYmxlIFBDSSB0byBob3N0IElPIGN5Y2xlcworCSAqLworCXRlbXAgPSB2M19yZWFkdyhWM19QQ0lfQ0ZHKSAmIH5WM19QQ0lfQ0ZHX01fSTJPX0VOOworCXRlbXAgfD0gVjNfUENJX0NGR19NX0lPX1JFR19ESVMgfCBWM19QQ0lfQ0ZHX01fSU9fRElTOworCXYzX3dyaXRldyhWM19QQ0lfQ0ZHLCB0ZW1wKTsKKworCXByaW50ayhLRVJOX0RFQlVHICJGSUZPX0NGRzogJTA0eCAgRklGT19QUklPOiAlMDR4XG4iLAorCQl2M19yZWFkdyhWM19GSUZPX0NGRyksIHYzX3JlYWR3KFYzX0ZJRk9fUFJJT1JJVFkpKTsKKworCS8qCisJICogU2V0IHRoZSBWMyBGSUZPIHN1Y2ggdGhhdCB3cml0ZXMgaGF2ZSBoaWdoZXIgcHJpb3JpdHkgdGhhbgorCSAqIHJlYWRzLCBhbmQgbG9jYWwgYnVzIHdyaXRlIGNhdXNlcyBsb2NhbCBidXMgcmVhZCBmaWZvIGZsdXNoLgorCSAqIFNhbWUgZm9yIFBDSS4KKwkgKi8KKwl2M193cml0ZXcoVjNfRklGT19QUklPUklUWSwgMHgwYTBhKTsKKworCS8qCisJICogUmUtbG9jayB0aGUgc3lzdGVtIHJlZ2lzdGVyLgorCSAqLworCXRlbXAgPSB2M19yZWFkdyhWM19TWVNURU0pIHwgVjNfU1lTVEVNX01fTE9DSzsKKwl2M193cml0ZXcoVjNfU1lTVEVNLCB0ZW1wKTsKKworCS8qCisJICogQ2xlYXIgYW55IGVycm9yIGNvbmRpdGlvbnMsIGFuZCBlbmFibGUgd3JpdGUgZXJyb3JzLgorCSAqLworCXYzX3dyaXRlYihWM19MQl9JU1RBVCwgMCk7CisJdjNfd3JpdGV3KFYzX0xCX0NGRywgdjNfcmVhZHcoVjNfTEJfQ0ZHKSB8ICgxIDw8IDEwKSk7CisJdjNfd3JpdGViKFYzX0xCX0lNQVNLLCAweDI4KTsKKwlfX3Jhd193cml0ZWwoMywgU0NfUENJKTsKKworCS8qCisJICogR3JhYiB0aGUgUENJIGVycm9yIGludGVycnVwdC4KKwkgKi8KKwlyZXQgPSByZXF1ZXN0X2lycShJUlFfQVBfVjNJTlQsIHYzX2lycSwgMCwgIlYzIiwgTlVMTCk7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IHVuYWJsZSB0byBncmFiIFBDSSBlcnJvciAiCisJCSAgICAgICAiaW50ZXJydXB0OiAlZFxuIiwgcmV0KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnYzX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCBfX2luaXQgcGNpX3YzX3Bvc3Rpbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHBjaV9jbWQ7CisKKwlwY2lfY21kID0gUENJX0NPTU1BTkRfTUVNT1JZIHwKKwkJICBQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9JTlZBTElEQVRFOworCisJdjNfd3JpdGV3KFYzX1BDSV9DTUQsIHBjaV9jbWQpOworCisJdjNfd3JpdGViKFYzX0xCX0lTVEFULCB+MHg0MCk7CisJdjNfd3JpdGViKFYzX0xCX0lNQVNLLCAweDY4KTsKKworI2lmIDAKKwlyZXQgPSByZXF1ZXN0X2lycShJUlFfQVBfTEJVU1RJTUVPVVQsIGxiX3RpbWVvdXQsIDAsICJidXMgdGltZW91dCIsIE5VTEwpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiAiUENJOiB1bmFibGUgdG8gZ3JhYiBsb2NhbCBidXMgdGltZW91dCAiCisJCSAgICAgICAiaW50ZXJydXB0OiAlZFxuIiwgcmV0KTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA3MjlkZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci90aW1lLmMKQEAgLTAsMCArMSwyMTMgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3RpbWUuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2FtYmEuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9ydGMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2RlZmluZSBSVENfRFIJCSgwKQorI2RlZmluZSBSVENfTVIJCSg0KQorI2RlZmluZSBSVENfU1RBVAkoOCkKKyNkZWZpbmUgUlRDX0VPSQkJKDgpCisjZGVmaW5lIFJUQ19MUgkJKDEyKQorI2RlZmluZSBSVENfQ1IJCSgxNikKKyNkZWZpbmUgUlRDX0NSX01JRQkoMSA8PCAwKQorCitleHRlcm4gaW50ICgqc2V0X3J0Yykodm9pZCk7CitzdGF0aWMgdm9pZCBfX2lvbWVtICpydGNfYmFzZTsKKworc3RhdGljIGludCBpbnRlZ3JhdG9yX3NldF9ydGModm9pZCkKK3sKKwlfX3Jhd193cml0ZWwoeHRpbWUudHZfc2VjLCBydGNfYmFzZSArIFJUQ19MUik7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHJ0Y19yZWFkX2FsYXJtKHN0cnVjdCBydGNfd2thbHJtICphbHJtKQoreworCXJ0Y190aW1lX3RvX3RtKHJlYWRsKHJ0Y19iYXNlICsgUlRDX01SKSwgJmFscm0tPnRpbWUpOworfQorCitzdGF0aWMgaW50IHJ0Y19zZXRfYWxhcm0oc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCit7CisJdW5zaWduZWQgbG9uZyB0aW1lOworCWludCByZXQ7CisKKwlyZXQgPSBydGNfdG1fdG9fdGltZSgmYWxybS0+dGltZSwgJnRpbWUpOworCWlmIChyZXQgPT0gMCkKKwkJd3JpdGVsKHRpbWUsIHJ0Y19iYXNlICsgUlRDX01SKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBydGNfcmVhZF90aW1lKHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJcnRjX3RpbWVfdG9fdG0ocmVhZGwocnRjX2Jhc2UgKyBSVENfRFIpLCB0bSk7Cit9CisKKy8qCisgKiBTZXQgdGhlIFJUQyB0aW1lLiAgVW5mb3J0dW5hdGVseSwgd2UgY2FuJ3QgYWNjdXJhdGVseSBzZXQKKyAqIHRoZSBwb2ludCBhdCB3aGljaCB0aGUgY291bnRlciB1cGRhdGVzLgorICoKKyAqIEFsc28sIHNpbmNlIFJUQ19MUiBpcyB0cmFuc2ZlcnJlZCB0byBSVENfQ1Igb24gbmV4dCByaXNpbmcKKyAqIGVkZ2Ugb2YgdGhlIDFIeiBjbG9jaywgd2UgbXVzdCB3cml0ZSB0aGUgdGltZSBvbmUgc2Vjb25kCisgKiBpbiBhZHZhbmNlLgorICovCitzdGF0aWMgaW50IHJ0Y19zZXRfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXVuc2lnbmVkIGxvbmcgdGltZTsKKwlpbnQgcmV0OworCisJcmV0ID0gcnRjX3RtX3RvX3RpbWUodG0sICZ0aW1lKTsKKwlpZiAocmV0ID09IDApCisJCXdyaXRlbCh0aW1lICsgMSwgcnRjX2Jhc2UgKyBSVENfTFIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBydGNfb3BzIHJ0Y19vcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5yZWFkX3RpbWUJPSBydGNfcmVhZF90aW1lLAorCS5zZXRfdGltZQk9IHJ0Y19zZXRfdGltZSwKKwkucmVhZF9hbGFybQk9IHJ0Y19yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0JPSBydGNfc2V0X2FsYXJtLAorfTsKKworc3RhdGljIGlycXJldHVybl90IHJ0Y19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl3cml0ZWwoMCwgcnRjX2Jhc2UgKyBSVENfRU9JKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgcnRjX3Byb2JlKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2LCB2b2lkICppZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKHJ0Y19iYXNlKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0ID0gYW1iYV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCBOVUxMKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJ0Y19iYXNlID0gaW9yZW1hcChkZXYtPnJlcy5zdGFydCwgU1pfNEspOworCWlmICghcnRjX2Jhc2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byByZXNfb3V0OworCX0KKworCV9fcmF3X3dyaXRlbCgwLCBydGNfYmFzZSArIFJUQ19DUik7CisJX19yYXdfd3JpdGVsKDAsIHJ0Y19iYXNlICsgUlRDX0VPSSk7CisKKwl4dGltZS50dl9zZWMgPSBfX3Jhd19yZWFkbChydGNfYmFzZSArIFJUQ19EUik7CisKKwlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycVswXSwgcnRjX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAorCQkJICAicnRjLXBsMDMwIiwgZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG1hcF9vdXQ7CisKKwlyZXQgPSByZWdpc3Rlcl9ydGMoJnJ0Y19vcHMpOworCWlmIChyZXQpCisJCWdvdG8gaXJxX291dDsKKworCXNldF9ydGMgPSBpbnRlZ3JhdG9yX3NldF9ydGM7CisJcmV0dXJuIDA7CisKKyBpcnFfb3V0OgorCWZyZWVfaXJxKGRldi0+aXJxWzBdLCBkZXYpOworIG1hcF9vdXQ6CisJaW91bm1hcChydGNfYmFzZSk7CisJcnRjX2Jhc2UgPSBOVUxMOworIHJlc19vdXQ6CisJYW1iYV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKKyBvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBydGNfcmVtb3ZlKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2KQoreworCXNldF9ydGMgPSBOVUxMOworCisJd3JpdGVsKDAsIHJ0Y19iYXNlICsgUlRDX0NSKTsKKworCWZyZWVfaXJxKGRldi0+aXJxWzBdLCBkZXYpOworCXVucmVnaXN0ZXJfcnRjKCZydGNfb3BzKTsKKworCWlvdW5tYXAocnRjX2Jhc2UpOworCXJ0Y19iYXNlID0gTlVMTDsKKwlhbWJhX3JlbGVhc2VfcmVnaW9ucyhkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgcnRjX2RlbHRhOworCitzdGF0aWMgaW50IHJ0Y19zdXNwZW5kKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHRpbWVzcGVjIHJ0YzsKKworCXJ0Yy50dl9zZWMgPSByZWFkbChydGNfYmFzZSArIFJUQ19EUik7CisJcnRjLnR2X25zZWMgPSAwOworCXNhdmVfdGltZV9kZWx0YSgmcnRjX2RlbHRhLCAmcnRjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0Y19yZXN1bWUoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRpbWVzcGVjIHJ0YzsKKworCXJ0Yy50dl9zZWMgPSByZWFkbChydGNfYmFzZSArIFJUQ19EUik7CisJcnRjLnR2X25zZWMgPSAwOworCXJlc3RvcmVfdGltZV9kZWx0YSgmcnRjX2RlbHRhLCAmcnRjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGFtYmFfaWQgcnRjX2lkc1tdID0geworCXsKKwkJLmlkCT0gMHgwMDA0MTAzMCwKKwkJLm1hc2sJPSAweDAwMGZmZmZmLAorCX0sCisJeyAwLCAwIH0sCit9OworCitzdGF0aWMgc3RydWN0IGFtYmFfZHJpdmVyIHJ0Y19kcml2ZXIgPSB7CisJLmRydgkJPSB7CisJCS5uYW1lCT0gInJ0Yy1wbDAzMCIsCisJfSwKKwkucHJvYmUJCT0gcnRjX3Byb2JlLAorCS5yZW1vdmUJCT0gcnRjX3JlbW92ZSwKKwkuc3VzcGVuZAk9IHJ0Y19zdXNwZW5kLAorCS5yZXN1bWUJCT0gcnRjX3Jlc3VtZSwKKwkuaWRfdGFibGUJPSBydGNfaWRzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW50ZWdyYXRvcl9ydGNfaW5pdCh2b2lkKQoreworCXJldHVybiBhbWJhX2RyaXZlcl9yZWdpc3RlcigmcnRjX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpbnRlZ3JhdG9yX3J0Y19leGl0KHZvaWQpCit7CisJYW1iYV9kcml2ZXJfdW5yZWdpc3RlcigmcnRjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGludGVncmF0b3JfcnRjX2luaXQpOworbW9kdWxlX2V4aXQoaW50ZWdyYXRvcl9ydGNfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmZlOGM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvS2NvbmZpZwpAQCAtMCwwICsxLDYzIEBACitpZiBBUkNIX0lPUDNYWAorCittZW51ICJJT1AzeHggSW1wbGVtZW50YXRpb24gT3B0aW9ucyIKKworY29tbWVudCAiSU9QM3h4IFBsYXRmb3JtIFR5cGVzIgorCitjb25maWcgQVJDSF9JUTgwMzIxCisJYm9vbCAiRW5hYmxlIHN1cHBvcnQgZm9yIElRODAzMjEiCisJc2VsZWN0IEFSQ0hfSU9QMzIxCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBydW4geW91ciBrZXJuZWwgb24gdGhlIEludGVsIElRODAzMjEKKwkgIGV2YWx1YXRpb24ga2l0IGZvciB0aGUgSU9QMzIxIGNoaXBzZXQuCisKK2NvbmZpZyBBUkNIX0lRMzEyNDQKKwlib29sICJFbmFibGUgc3VwcG9ydCBmb3IgSVEzMTI0NCIKKwlzZWxlY3QgQVJDSF9JT1AzMjEKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHJ1biB5b3VyIGtlcm5lbCBvbiB0aGUgSW50ZWwgSVEzMTI0NAorCSAgZXZhbHVhdGlvbiBraXQgZm9yIHRoZSBJT1AzMjEgY2hpcHNldC4KKworY29uZmlnIEFSQ0hfSVE4MDMzMQorCWJvb2wgIkVuYWJsZSBzdXBwb3J0IGZvciBJUTgwMzMxIgorCXNlbGVjdCBBUkNIX0lPUDMzMQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gcnVuIHlvdXIga2VybmVsIG9uIHRoZSBJbnRlbCBJUTgwMzMxCisJICBldmFsdWF0aW9uIGtpdCBmb3IgdGhlIElPUDMzMSBjaGlwc2V0LgorCitjb25maWcgTUFDSF9JUTgwMzMyCisJYm9vbCAiRW5hYmxlIHN1cHBvcnQgZm9yIElRODAzMzIiCisJc2VsZWN0IEFSQ0hfSU9QMzMxCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBydW4geW91ciBrZXJuZWwgb24gdGhlIEludGVsIElRODAzMzIKKwkgIGV2YWx1YXRpb24ga2l0IGZvciB0aGUgSU9QMzMyIGNoaXBzZXQKKworY29uZmlnIEFSQ0hfRVA4MDIxOQorICAgIGJvb2wgIkVuYWJsZSBzdXBwb3J0IGZvciBFUDgwMjE5IgorICAgIHNlbGVjdCBBUkNIX0lPUDMyMQorICAgIHNlbGVjdCBBUkNIX0lRMzEyNDQKKworIyBXaGljaCBJT1AgdmFyaWFudCBhcmUgd2UgcnVubmluZz8KK2NvbmZpZyBBUkNIX0lPUDMyMQorCWJvb2wKKwloZWxwCisJICBUaGUgSVE4MDMyMSB1c2VzIHRoZSBJT1AzMjEgdmFyaWFudC4KKwkgIFRoZSBJUTMxMjQ0IGFuZCBFUDgwMjE5IHVzZXMgdGhlIElPUDMyMSB2YXJpYW50LgorCitjb25maWcgQVJDSF9JT1AzMzEKKwlib29sCisJZGVmYXVsdCBBUkNIX0lRODAzMzEKKwloZWxwCisJICBUaGUgSVE4MDMzMSwgSVE4MDMzMiwgYW5kIElRODAzMzMgdXNlcyB0aGUgSU9QMzMxIHZhcmlhbnQuCisKK2NvbW1lbnQgIklPUDN4eCBDaGlwc2V0IEZlYXR1cmVzIgorCitjb25maWcgSU9QMzMxX1NURVBECisJYm9vbCAiQ2hpcCBzdGVwcGluZyBEIG9mIHRoZSBJT1A4MDMzMSBwcm9jZXNzb3Igb3IgSU9QODAzMzMiCisJZGVwZW5kcyBvbiAoQVJDSF9JT1AzMzEpCisJaGVscAorCQkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgU3RlcEQgb2YgdGhlIElPUDgwMzMxIG9yIElPUDgwMzMKKwkJICBiYXNlZCBwbGF0Zm9ybXMuCisKK2VuZG1lbnUKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxN2ViMWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9NYWtlZmlsZQpAQCAtMCwwICsxLDIzIEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgorIworCisjIE9iamVjdCBmaWxlIGxpc3RzLgorCitvYmoteQkJCTo9IGNvbW1vbi5vCisKK29iai1tCQkJOj0KK29iai1uCQkJOj0KK29iai0JCQk6PQorCitvYmotJChDT05GSUdfQVJDSF9JT1AzMjEpICArPSBpb3AzMjEtc2V0dXAubyBpb3AzMjEtaXJxLm8gaW9wMzIxLXBjaS5vIGlvcDMyMS10aW1lLm8KKworb2JqLSQoQ09ORklHX0FSQ0hfSU9QMzMxKSAgKz0gaW9wMzMxLXNldHVwLm8gaW9wMzMxLWlycS5vIGlvcDMzMS1wY2kubyBpb3AzMzEtdGltZS5vCisKK29iai0kKENPTkZJR19BUkNIX0lRODAzMjEpICs9IGlxODAzMjEtbW0ubyBpcTgwMzIxLXBjaS5vCisKK29iai0kKENPTkZJR19BUkNIX0lRMzEyNDQpICs9IGlxMzEyNDQtbW0ubyBpcTMxMjQ0LXBjaS5vCisKK29iai0kKENPTkZJR19BUkNIX0lRODAzMzEpICs9IGlxODAzMzEtbW0ubyBpcTgwMzMxLXBjaS5vCisKK29iai0kKENPTkZJR19NQUNIX0lRODAzMzIpICs9IGlxODAzMzItbW0ubyBpcTgwMzMyLXBjaS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mzg3YWEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDkgQEAKKyAgIHpyZWxhZGRyLXkJOj0gMHhhMDAwODAwMAorcGFyYW1zX3BoeXMteQk6PSAweGEwMDAwMTAwCitpbml0cmRfcGh5cy15CTo9IDB4YTA4MDAwMDAKK2lmZXEgKCQoQ09ORklHX0FSQ0hfSU9QMzMxKSx5KQorICAgenJlbGFkZHIteQk6PSAweDAwMDA4MDAwCitwYXJhbXNfcGh5cy15CTo9IDB4MDAwMDAxMDAKK2luaXRyZF9waHlzLXkJOj0gMHgwMDgwMDAwMAorZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGE3Mzk0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvY29tbW9uLmMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtaW9wM3h4L2NvbW1vbi5jCisgKgorICogQ29tbW9uIHJvdXRpbmVzIHNoYXJlZCBhY3Jvc3MgYWxsIElPUDN4eCBpbXBsZW1lbnRhdGlvbnMKKyAqCisgKiBBdXRob3I6IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAbXZpc3RhLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMyAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLyoKKyAqIFNoYXJlZCB2YXJpYWJsZXMKKyAqLwordW5zaWduZWQgbG9uZyBpb3AzeHhfcGNpYmlvc19taW5faW8gPSAwOwordW5zaWduZWQgbG9uZyBpb3AzeHhfcGNpYmlvc19taW5fbWVtID0gMDsKKworI2lmZGVmIENPTkZJR19BUkNIX0VQODAyMTkKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKy8qCisgKiBEZWZhdWx0IHBvd2VyLW9mZiBmb3IgRVA4MDIxOQorICovCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworc3RhdGljIGlubGluZSB2b2lkIGVwODAyMTlfc2VuZF90b19waWMoX191OCBjKSB7Cit9CisKK3ZvaWQgZXA4MDIxOV9wb3dlcl9vZmYodm9pZCkKK3sKKwkvKgorICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZW5kIGEgU0hVVERPV05fQ09NUExFVEUgbWVzc2FnZSB0byB0aGUgUElDIGNvbnRyb2xsZXIKKyAgICAgKiBvdmVyIEkyQy4gIFdlIGFyZSBub3QgdXNpbmcgdGhlIGkyYyBzdWJzeXN0ZW0gc2luY2Ugd2UgYXJlIGdvaW5nIHRvIHBvd2VyCisgICAgICogb2ZmIGFuZCBpdCBtYXkgYmUgcmVtb3ZlZAorICAgICAqLworCisJLyogU2VuZCB0aGUgQWRkcmVzcyBieXRlIHcvIHRoZSBzdGFydCBjb25kaXRpb24gKi8KKwkqSU9QMzIxX0lEQlIxID0gMHg2MDsKKwkqSU9QMzIxX0lDUjEgPSAweEU5OworICAgIG1kZWxheSgxKTsKKworCS8qIFNlbmQgdGhlIFNUQVJUX01TRyBieXRlIHcvIG5vIHN0YXJ0IG9yIHN0b3AgY29uZGl0aW9uICovCisJKklPUDMyMV9JREJSMSA9IDB4MEY7CisJKklPUDMyMV9JQ1IxID0gMHhFODsKKyAgICBtZGVsYXkoMSk7CisKKwkvKiBTZW5kIHRoZSBTSFVURE9XTl9DT01QTEVURSBNZXNzYWdlIElEIGJ5dGUgdy8gbm8gc3RhcnQgb3Igc3RvcCBjb25kaXRpb24gKi8KKwkqSU9QMzIxX0lEQlIxID0gMHgwMzsKKwkqSU9QMzIxX0lDUjEgPSAweEU4OworICAgIG1kZWxheSgxKTsKKworCS8qIFNlbmQgYW4gaWdub3JlZCBieXRlIHcvIHN0b3AgY29uZGl0aW9uICovCisJKklPUDMyMV9JREJSMSA9IDB4MDA7CisJKklPUDMyMV9JQ1IxID0gMHhFQTsKKworCXdoaWxlICgxKSA7Cit9CisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKworc3RhdGljIGludCBfX2luaXQgZXA4MDIxOV9pbml0KHZvaWQpCit7CisJcG1fcG93ZXJfb2ZmID0gZXA4MDIxOV9wb3dlcl9vZmY7CisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKGVwODAyMTlfaW5pdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS1pcnEuYyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS1pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDJhYWU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzIxLWlycS5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMjEtaXJxLmMKKyAqCisgKiBHZW5lcmljIElPUDMyMSBJUlEgaGFuZGxpbmcgZnVuY3Rpb25hbGl0eQorICoKKyAqIEF1dGhvcjogUm9yeSBCb2x0IDxyb3J5Ym9sdEBwYWNiZWxsLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb3J5IEJvbHQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIEFkZGVkIElPUDNYWCBjaGlwc2V0IGFuZCBJUTgwMzIxIGJvYXJkIG1hc2tpbmcgY29kZS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworc3RhdGljIHUzMiBpb3AzMjFfbWFzayAvKiA9IDAgKi87CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnRjdGxfd3JpdGUodTMyIHZhbCkKK3sKKwlhc20gdm9sYXRpbGUoIm1jciBwNiwwLCUwLGMwLGMwLDAiOjoiciIgKHZhbCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW50c3RyX3dyaXRlKHUzMiB2YWwpCit7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDYsMCwlMCxjNCxjMCwwIjo6InIiICh2YWwpKTsKK30KKworc3RhdGljIHZvaWQKK2lvcDMyMV9pcnFfbWFzayAodW5zaWduZWQgaW50IGlycSkKK3sKKworCWlvcDMyMV9tYXNrICY9IH4oMSA8PCAoaXJxIC0gSU9QMzIxX0lSUV9PRlMpKTsKKworCWludGN0bF93cml0ZShpb3AzMjFfbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkCitpb3AzMjFfaXJxX3VubWFzayAodW5zaWduZWQgaW50IGlycSkKK3sKKwlpb3AzMjFfbWFzayB8PSAoMSA8PCAoaXJxIC0gSU9QMzIxX0lSUV9PRlMpKTsKKworCWludGN0bF93cml0ZShpb3AzMjFfbWFzayk7Cit9CisKK3N0cnVjdCBpcnFjaGlwIGV4dF9jaGlwID0geworCS5hY2sgICAgPSBpb3AzMjFfaXJxX21hc2ssCisJLm1hc2sgICA9IGlvcDMyMV9pcnFfbWFzaywKKwkudW5tYXNrID0gaW9wMzIxX2lycV91bm1hc2ssCit9OworCit2b2lkIF9faW5pdCBpb3AzMjFfaW5pdF9pcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgdG1wOworCisJLyogRW5hYmxlIGFjY2VzcyB0byBjb3Byb2Nlc3NvciA2IGZvciBkZWFsaW5nIHdpdGggSVJRcy4KKwkgKiBGcm9tIFJNSzoKKwkgKiBCYXNpY2FsbHksIHRoZSBJbnRlbCBkb2N1bWVudGF0aW9uIGhlcmUgaXMgcG9vci4gIEl0IGFwcGVhcnMgdGhhdAorCSAqIHlvdSBuZWVkIHRvIHNldCB0aGUgYml0IHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBjb3Byb2Nlc3NvciBmcm9tCisJICogU1ZDIG1vZGUuICBXaGV0aGVyIHRoYXQgYWxsb3dzIGFjY2VzcyBmcm9tIHVzZXIgc3BhY2Ugb3Igbm90IGlzCisJICogdW5jbGVhci4KKwkgKi8KKwlhc20gdm9sYXRpbGUgKAorCQkibXJjIHAxNSwgMCwgJTAsIGMxNSwgYzEsIDBcblx0IgorCQkib3JyICUwLCAlMCwgJTFcblx0IgorCQkibWNyIHAxNSwgMCwgJTAsIGMxNSwgYzEsIDBcblx0IgorCQkvKiBUaGUgYWN0aW9uIGlzIGRlbGF5ZWQsIHNvIHdlIGhhdmUgdG8gZG8gdGhpczogKi8KKwkJIm1yYyBwMTUsIDAsICUwLCBjMTUsIGMxLCAwXG5cdCIKKwkJIm1vdiAlMCwgJTBcblx0IgorCQkic3ViIHBjLCBwYywgIzQiCisJCTogIj1yIiAodG1wKSA6ICJpIiAoMSA8PCA2KSApOworCisJaW50Y3RsX3dyaXRlKDApOwkJLy8gZGlzYWJsZSBhbGwgaW50ZXJydXB0cworCWludHN0cl93cml0ZSgwKTsJCS8vIHRyZWF0IGFsbCBhcyBJUlEKKwlpZihtYWNoaW5lX2lzX2lxODAzMjEoKSB8fAorCSAgIG1hY2hpbmVfaXNfaXEzMTI0NCgpKSAJLy8gYWxsIGludGVycnVwdHMgYXJlIGlucHV0cyB0byBjaGlwCisJCSpJT1AzMjFfUENJSVJTUiA9IDB4MGY7CisKKwlmb3IoaSA9IElPUDMyMV9JUlFfT0ZTOyBpIDwgTlJfSU9QMzIxX0lSUVM7IGkrKykKKwl7CisJCXNldF9pcnFfY2hpcChpLCAmZXh0X2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaSwgZG9fbGV2ZWxfSVJRKTsKKwkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS1wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmE2YTBlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzIxLXBjaS5jCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzIxLXBjaS5jCisgKgorICogUENJIHN1cHBvcnQgZm9yIHRoZSBJbnRlbCBJT1AzMjEgY2hpcHNldAorICoKKyAqIEF1dGhvcjogUm9yeSBCb2x0IDxyb3J5Ym9sdEBwYWNiZWxsLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb3J5IEJvbHQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9pb3AzMjEuaD4KKworLy8gI2RlZmluZSBERUJVRworCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgIERCRyh4Li4uKSBwcmludGsoeCkKKyNlbHNlCisjZGVmaW5lICBEQkcoeC4uLikgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qCisgKiBUaGlzIHJvdXRpbmUgYnVpbGRzIGVpdGhlciBhIHR5cGUwIG9yIHR5cGUxIGNvbmZpZ3VyYXRpb24gY29tbWFuZC4gIElmIHRoZQorICogYnVzIGlzIG9uIHRoZSA4MDMyMSB0aGVuIGEgdHlwZTAgbWFkZSwgZWxzZSBhIHR5cGUxIGlzIGNyZWF0ZWQuCisgKi8KK3N0YXRpYyB1MzIgaW9wMzIxX2NmZ19hZGRyZXNzKHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBkZXZmbiwgaW50IHdoZXJlKQoreworCXN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cyA9IGJ1cy0+c3lzZGF0YTsKKwl1MzIgYWRkcjsKKworCWlmIChzeXMtPmJ1c25yID09IGJ1cy0+bnVtYmVyKQorCQlhZGRyID0gMSA8PCAoUENJX1NMT1QoZGV2Zm4pICsgMTYpIHwgKFBDSV9TTE9UKGRldmZuKSA8PCAxMSk7CisJZWxzZQorCQlhZGRyID0gYnVzLT5udW1iZXIgPDwgMTYgfCBQQ0lfU0xPVChkZXZmbikgPDwgMTEgfCAxOworCisJYWRkciB8PQlQQ0lfRlVOQyhkZXZmbikgPDwgOCB8ICh3aGVyZSAmIH4zKTsKKworCXJldHVybiBhZGRyOworfQorCisvKgorICogVGhpcyByb3V0aW5lIGNoZWNrcyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGNvbmZpZ3VyYXRpb24gY3ljbGUuICBJZiBhbiBlcnJvcgorICogd2FzIGRldGVjdGVkIGl0IHJldHVybnMgYSAxLCBlbHNlIGl0IHJldHVybnMgYSAwLiAgVGhlIGVycm9ycyBiZWluZyBjaGVja2VkCisgKiBhcmUgcGFyaXR5LCBtYXN0ZXIgYWJvcnQsIHRhcmdldCBhYm9ydCAobWFzdGVyIGFuZCB0YXJnZXQpLiAgVGhlc2UgdHlwZXMgb2YKKyAqIGVycm9ycyBvY2N1cmUgZHVyaW5nIGEgY29uZmlnIGN5Y2xlIHdoZXJlIHRoZXJlIGlzIG5vIGRldmljZSwgbGlrZSBkdXJpbmcKKyAqIHRoZSBkaXNjb3Zlcnkgc3RhZ2UuCisgKi8KK3N0YXRpYyBpbnQgaW9wMzIxX3BjaV9zdGF0dXModm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCWludCByZXQgPSAwOworCisJLyoKKwkgKiBDaGVjayB0aGUgc3RhdHVzIHJlZ2lzdGVycy4KKwkgKi8KKwlzdGF0dXMgPSAqSU9QMzIxX0FUVVNSOworCWlmIChzdGF0dXMgJiAweGY5MDApCisJeworCQlEQkcoIlx0XHRcdFBDSTogUDAgLSBzdGF0dXMgPSAweCUwOHhcbiIsIHN0YXR1cyk7CisJCSpJT1AzMjFfQVRVU1IgPSBzdGF0dXMgJiAweGY5MDA7CisJCXJldCA9IDE7CisJfQorCXN0YXR1cyA9ICpJT1AzMjFfQVRVSVNSOworCWlmIChzdGF0dXMgJiAweDY3OWYpCisJeworCQlEQkcoIlx0XHRcdFBDSTogUDEgLSBzdGF0dXMgPSAweCUwOHhcbiIsIHN0YXR1cyk7CisJCSpJT1AzMjFfQVRVSVNSID0gc3RhdHVzICYgMHg2NzlmOworCQlyZXQgPSAxOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU2ltcGx5IHdyaXRlIHRoZSBhZGRyZXNzIHJlZ2lzdGVyIGFuZCByZWFkIHRoZSBjb25maWd1cmF0aW9uCisgKiBkYXRhLiAgTm90ZSB0aGF0IHRoZSA0IG5vcCdzIGVuc3VyZSB0aGF0IHdlIGFyZSBhYmxlIHRvIGhhbmRsZQorICogYSBkZWxheWVkIGFib3J0IChpbiB0aGVvcnkuKQorICovCitzdGF0aWMgaW5saW5lIHUzMiBpb3AzMjFfcmVhZCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdTMyIHZhbDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkic3RyCSUxLCBbJTJdXG5cdCIKKwkJImxkcgklMCwgWyUzXVxuXHQiCisJCSJub3Bcblx0IgorCQkibm9wXG5cdCIKKwkJIm5vcFxuXHQiCisJCSJub3Bcblx0IgorCQk6ICI9ciIgKHZhbCkKKwkJOiAiciIgKGFkZHIpLCAiciIgKElPUDMyMV9PQ0NBUiksICJyIiAoSU9QMzIxX09DQ0RSKSk7CisKKwlyZXR1cm4gdmFsOworfQorCisvKgorICogVGhlIHJlYWQgcm91dGluZXMgbXVzdCBjaGVjayB0aGUgZXJyb3Igc3RhdHVzIG9mIHRoZSBsYXN0IGNvbmZpZ3VyYXRpb24KKyAqIGN5Y2xlLiAgSWYgdGhlcmUgd2FzIGFuIGVycm9yLCB0aGUgcm91dGluZSByZXR1cm5zIGFsbCBoZXggZidzLgorICovCitzdGF0aWMgaW50Citpb3AzMjFfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsCisJCWludCBzaXplLCB1MzIgKnZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9IGlvcDMyMV9jZmdfYWRkcmVzcyhidXMsIGRldmZuLCB3aGVyZSk7CisJdTMyIHZhbCA9IGlvcDMyMV9yZWFkKGFkZHIpID4+ICgod2hlcmUgJiAzKSAqIDgpOworCisJaWYoIGlvcDMyMV9wY2lfc3RhdHVzKCkgKQorCQl2YWwgPSAweGZmZmZmZmZmOworCisJKnZhbHVlID0gdmFsOworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIGludAoraW9wMzIxX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwKKwkJaW50IHNpemUsIHUzMiB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBpb3AzMjFfY2ZnX2FkZHJlc3MoYnVzLCBkZXZmbiwgd2hlcmUpOworCXUzMiB2YWw7CisKKwlpZiAoc2l6ZSAhPSA0KSB7CisJCXZhbCA9IGlvcDMyMV9yZWFkKGFkZHIpOworCQlpZiAoIWlvcDMyMV9wY2lfc3RhdHVzKCkgPT0gMCkKKwkJCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7CisKKwkJd2hlcmUgPSAod2hlcmUgJiAzKSAqIDg7CisKKwkJaWYgKHNpemUgPT0gMSkKKwkJCXZhbCAmPSB+KDB4ZmYgPDwgd2hlcmUpOworCQllbHNlCisJCQl2YWwgJj0gfigweGZmZmYgPDwgd2hlcmUpOworCisJCSpJT1AzMjFfT0NDRFIgPSB2YWwgfCB2YWx1ZSA8PCB3aGVyZTsKKwl9IGVsc2UgeworCQlhc20gdm9sYXRpbGUoCisJCQkic3RyCSUxLCBbJTJdXG5cdCIKKwkJCSJzdHIJJTAsIFslM11cblx0IgorCQkJIm5vcFxuXHQiCisJCQkibm9wXG5cdCIKKwkJCSJub3Bcblx0IgorCQkJIm5vcFxuXHQiCisJCQk6CisJCQk6ICJyIiAodmFsdWUpLCAiciIgKGFkZHIpLAorCQkJICAiciIgKElPUDMyMV9PQ0NBUiksICJyIiAoSU9QMzIxX09DQ0RSKSk7CisJfQorCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfb3BzIGlvcDMyMV9vcHMgPSB7CisJLnJlYWQJPSBpb3AzMjFfcmVhZF9jb25maWcsCisJLndyaXRlCT0gaW9wMzIxX3dyaXRlX2NvbmZpZywKK307CisKKy8qCisgKiBXaGVuIGEgUENJIGRldmljZSBkb2VzIG5vdCBleGlzdCBkdXJpbmcgY29uZmlnIGN5Y2xlcywgdGhlIDgwMjAwIGdldHMgYQorICogYnVzIGVycm9yIGluc3RlYWQgb2YgcmV0dXJuaW5nIDB4ZmZmZmZmZmYuIFRoaXMgaGFuZGxlciBzaW1wbHkgcmV0dXJucy4KKyAqLworaW50Citpb3AzMjFfcGNpX2Fib3J0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJREJHKCJQQ0kgYWJvcnQ6IGFkZHJlc3MgPSAweCUwOGx4IGZzciA9IDB4JTAzeCBQQyA9IDB4JTA4bHggTFIgPSAweCUwOGx4XG4iLAorCQlhZGRyLCBmc3IsIHJlZ3MtPkFSTV9wYywgcmVncy0+QVJNX2xyKTsKKworCS8qCisJICogSWYgaXQgd2FzIGFuIGltcHJlY2lzZSBhYm9ydCwgdGhlbiB3ZSBuZWVkIHRvIGNvcnJlY3QgdGhlCisJICogcmV0dXJuIGFkZHJlc3MgdG8gYmUgX2FmdGVyXyB0aGUgaW5zdHJ1Y3Rpb24uCisJICovCisJaWYgKGZzciAmICgxIDw8IDEwKSkKKwkJcmVncy0+QVJNX3BjICs9IDQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNjYW4gYW4gSU9QMzIxIFBDSSBidXMuICBzeXMtPmJ1cyBkZWZpbmVzIHdoaWNoIGJ1cyB3ZSBzY2FuLgorICovCitzdHJ1Y3QgcGNpX2J1cyAqaW9wMzIxX3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQoreworCXJldHVybiBwY2lfc2Nhbl9idXMoc3lzLT5idXNuciwgJmlvcDMyMV9vcHMsIHN5cyk7Cit9CisKK3ZvaWQgaW9wMzIxX2luaXQodm9pZCkKK3sKKwlEQkcoIlBDSTogIEludGVsIDgwMzIxIFBDSSBpbml0IGNvZGUuXG4iKTsKKwlEQkcoIkFUVTogSU9QMzIxX0FUVUNNRD0weCUwNHhcbiIsICpJT1AzMjFfQVRVQ01EKTsKKwlEQkcoIkFUVTogSU9QMzIxX09NV1RWUjA9MHglMDR4LCBJT1AzMjFfT0lPV1RWUj0weCUwNHhcbiIsCisJCQkqSU9QMzIxX09NV1RWUjAsCisJCQkqSU9QMzIxX09JT1dUVlIpOworCURCRygiQVRVOiBJT1AzMjFfQVRVQ1I9MHglMDh4XG4iLCAqSU9QMzIxX0FUVUNSKTsKKwlEQkcoIkFUVTogSU9QMzIxX0lBQkFSMD0weCUwOHggSU9QMzIxX0lBTFIwPTB4JTA4eCBJT1AzMjFfSUFUVlIwPSUwOHhcbiIsCisJCQkqSU9QMzIxX0lBQkFSMCwgKklPUDMyMV9JQUxSMCwgKklPUDMyMV9JQVRWUjApOworCURCRygiQVRVOiBJT1AzMjFfT01XVFZSMD0weCUwOHhcbiIsICpJT1AzMjFfT01XVFZSMCk7CisJREJHKCJBVFU6IElPUDMyMV9JQUJBUjE9MHglMDh4IElPUDMyMV9JQUxSMT0weCUwOHhcbiIsCisJCQkqSU9QMzIxX0lBQkFSMSwgKklPUDMyMV9JQUxSMSk7CisJREJHKCJBVFU6IElPUDMyMV9FUkJBUj0weCUwOHggSU9QMzIxX0VSTFI9MHglMDh4IElPUDMyMV9FUlRWUj0lMDh4XG4iLAorCQkJKklPUDMyMV9FUkJBUiwgKklPUDMyMV9FUkxSLCAqSU9QMzIxX0VSVFZSKTsKKwlEQkcoIkFUVTogSU9QMzIxX0lBQkFSMj0weCUwOHggSU9QMzIxX0lBTFIyPTB4JTA4eCBJT1AzMjFfSUFUVlIyPSUwOHhcbiIsCisJCQkqSU9QMzIxX0lBQkFSMiwgKklPUDMyMV9JQUxSMiwgKklPUDMyMV9JQVRWUjIpOworCURCRygiQVRVOiBJT1AzMjFfSUFCQVIzPTB4JTA4eCBJT1AzMjFfSUFMUjM9MHglMDh4IElPUDMyMV9JQVRWUjM9JTA4eFxuIiwKKwkJCSpJT1AzMjFfSUFCQVIzLCAqSU9QMzIxX0lBTFIzLCAqSU9QMzIxX0lBVFZSMyk7CisKKwlob29rX2ZhdWx0X2NvZGUoMTYrNiwgaW9wMzIxX3BjaV9hYm9ydCwgU0lHQlVTLCAiaW1wcmVjaXNlIGV4dGVybmFsIGFib3J0Iik7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzIxLXNldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYyM2UwZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS1zZXR1cC5jCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzIxLXNldHVwLmMKKyAqCisgKiBBdXRob3I6IE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworI2RlZmluZSBJT1AzMjFfVUFSVF9YVEFMIDE4NDMyMDAKKworLyoKKyAqIFN0YW5kYXJkIElPIG1hcHBpbmcgZm9yIGFsbCBJT1AzMjEgYmFzZWQgc3lzdGVtcworICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGlvcDMyMV9zdGRfZGVzY1tdIF9faW5pdGRhdGEgPSB7CisgLyogdmlydHVhbCAgICAgcGh5c2ljYWwgICAgICBsZW5ndGggICAgICB0eXBlICovCisKKyAvKiBtZW0gbWFwcGVkIHJlZ2lzdGVycyAqLworIHsgSU9QMzIxX1ZJUlRfTUVNX0JBU0UsICBJT1AzMjFfUEhZU19NRU1fQkFTRSwgICAweDAwMDAyMDAwLCAgTVRfREVWSUNFIH0sCisKKyAvKiBQQ0kgSU8gc3BhY2UgKi8KKyB7IElPUDMyMV9QQ0lfTE9XRVJfSU9fVkEsICBJT1AzMjFfUENJX0xPV0VSX0lPX1BBLCAgIElPUDMyMV9QQ0lfSU9fV0lORE9XX1NJWkUsICBNVF9ERVZJQ0UgfQorfTsKKworI2lmZGVmIENPTkZJR19BUkNIX0lRODAzMjEKKyNkZWZpbmUgVUFSVEJBU0UgSVE4MDMyMV9VQVJUCisjZGVmaW5lIElSUV9VQVJUIElSUV9JUTgwMzIxX1VBUlQKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfSVEzMTI0NAorI2RlZmluZSBVQVJUQkFTRSBJUTMxMjQ0X1VBUlQKKyNkZWZpbmUgSVJRX1VBUlQgSVJRX0lRMzEyNDRfVUFSVAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IGlvcDMyMV9zZXJpYWxfcG9ydHNbXSA9IHsKKwl7CisJCS5tZW1iYXNlCT0gKGNoYXIqKShVQVJUQkFTRSksCisJCS5tYXBiYXNlCT0gKFVBUlRCQVNFKSwKKwkJLmlycQkJPSBJUlFfVUFSVCwKKwkJLmZsYWdzCQk9IFVQRl9TS0lQX1RFU1QsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5yZWdzaGlmdAk9IDAsCisJCS51YXJ0Y2xrCT0gSU9QMzIxX1VBUlRfWFRBTCwKKwkJLmxpbmUJCT0gMCwKKwkJLnR5cGUJCT0gUE9SVF8xNjU1MEEsCisJCS5maWZvc2l6ZQk9IDE2CisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpb3AzMnhfaTJjXzBfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSAweGZmZmZmNjgwLAorCQkuZW5kID0gMHhmZmZmZjY5OCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9JT1AzMjFfSTJDXzAsCisJCS5lbmQgPSBJUlFfSU9QMzIxX0kyQ18wLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUQorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW9wMzJ4X2kyY18xX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gMHhmZmZmZjZhMCwKKwkJLmVuZCA9IDB4ZmZmZmY2YjgsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfSU9QMzIxX0kyQ18xLAorCQkuZW5kID0gSVJRX0lPUDMyMV9JMkNfMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpb3AzMnhfaTJjXzBfY29udHJvbGxlciA9IHsKKwkubmFtZSA9ICJJT1AzeHgtSTJDIiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gMiwKKwkucmVzb3VyY2UgPSBpb3AzMnhfaTJjXzBfcmVzb3VyY2VzCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpb3AzMnhfaTJjXzFfY29udHJvbGxlciA9IHsKKwkubmFtZSA9ICJJT1AzeHgtSTJDIiwKKwkuaWQgPSAxLAorCS5udW1fcmVzb3VyY2VzID0gMiwKKwkucmVzb3VyY2UgPSBpb3AzMnhfaTJjXzFfcmVzb3VyY2VzCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaW9wMzJ4X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZpb3AzMnhfaTJjXzBfY29udHJvbGxlciwKKwkmaW9wMzJ4X2kyY18xX2NvbnRyb2xsZXIKK307CisKK3ZvaWQgX19pbml0IGlvcDMyeF9pbml0KHZvaWQpCit7CisJaWYoaW9wX2lzXzMyMSgpKQorCXsKKwkJcGxhdGZvcm1fYWRkX2RldmljZXMoaW9wMzJ4X2RldmljZXMsCisJCQkJQVJSQVlfU0laRShpb3AzMnhfZGV2aWNlcykpOworCX0KK30KKwordm9pZCBfX2luaXQgaW9wMzIxX21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdChpb3AzMjFfc3RkX2Rlc2MsIEFSUkFZX1NJWkUoaW9wMzIxX3N0ZF9kZXNjKSk7CisJZWFybHlfc2VyaWFsX3NldHVwKCZpb3AzMjFfc2VyaWFsX3BvcnRzWzBdKTsKK30KKworI2lmZGVmIENPTkZJR19BUkNIX0lRODAzMjEKK2V4dGVybiB2b2lkIGlxODAzMjFfbWFwX2lvKHZvaWQpOworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgaW9wMzIxX3RpbWVyOworZXh0ZXJuIHZvaWQgaW9wMzIxX2luaXRfdGltZSh2b2lkKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfSVEzMTI0NAorZXh0ZXJuIHZvaWQgaXEzMTI0NF9tYXBfaW8odm9pZCk7CitleHRlcm4gc3RydWN0IHN5c190aW1lciBpb3AzMjFfdGltZXI7CitleHRlcm4gdm9pZCBpb3AzMjFfaW5pdF90aW1lKHZvaWQpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lRODAzMjEpCitNQUNISU5FX1NUQVJUKElRODAzMjEsICJJbnRlbCBJUTgwMzIxIikKKwlNQUlOVEFJTkVSKCJJbnRlbCBDb3Jwb3JhdGlvbiIpCisJQk9PVF9NRU0oUEhZU19PRkZTRVQsIElRODAzMjFfVUFSVCwgSVE4MDMyMV9VQVJUKQorCU1BUElPKGlxODAzMjFfbWFwX2lvKQorCUlOSVRJUlEoaW9wMzIxX2luaXRfaXJxKQorCS50aW1lcgkJPSAmaW9wMzIxX3RpbWVyLAorICAgIEJPT1RfUEFSQU1TKDB4YTAwMDAxMDApCisJSU5JVF9NQUNISU5FKGlvcDMyeF9pbml0KQorTUFDSElORV9FTkQKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfSVEzMTI0NCkKK01BQ0hJTkVfU1RBUlQoSVEzMTI0NCwgIkludGVsIElRMzEyNDQiKQorICAgIE1BSU5UQUlORVIoIkludGVsIENvcnAuIikKKyAgICBCT09UX01FTShQSFlTX09GRlNFVCwgSVEzMTI0NF9VQVJULCBJUTMxMjQ0X1VBUlQpCisgICAgTUFQSU8oaXEzMTI0NF9tYXBfaW8pCisgICAgSU5JVElSUShpb3AzMjFfaW5pdF9pcnEpCisJLnRpbWVyCQk9ICZpb3AzMjFfdGltZXIsCisgICAgQk9PVF9QQVJBTVMoMHhhMDAwMDEwMCkKKwlJTklUX01BQ0hJTkUoaW9wMzJ4X2luaXQpCitNQUNISU5FX0VORAorI2Vsc2UKKyNlcnJvciBObyBtYWNoaW5lIGRlc2NyaXB0b3IgZGVmaW5lZCBmb3IgdGhpcyBJT1AzWFggaW1wbGVtZW50YXRpb24KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzIxLXRpbWUuYyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS10aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI3ZGQ2NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS10aW1lLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMjEtdGltZS5jCisgKgorICogVGltZXIgY29kZSBmb3IgSU9QMzIxIGJhc2VkIHN5c3RlbXMKKyAqCisgKiBBdXRob3I6IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAbXZpc3RhLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDAzIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2RlZmluZSBJT1AzMjFfVElNRV9TWU5DIDAKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9lbGFwc2VkKHZvaWQpCit7CisJcmV0dXJuIExBVENIIC0gKklPUDMyMV9UVV9UQ1IwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpb3AzMjFfZ2V0dGltZW9mZnNldCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZWxhcHNlZCwgdXNlYzsKKwl1MzIgdGlzcjEsIHRpc3IyOworCisJLyoKKwkgKiBJZiBhbiBpbnRlcnJ1cHQgd2FzIHBlbmRpbmcgYmVmb3JlIHdlIHJlYWQgdGhlIHRpbWVyLAorCSAqIHdlJ3ZlIGFscmVhZHkgd3JhcHBlZC4gIEZhY3RvciB0aGlzIGludG8gdGhlIHRpbWUuCisJICogSWYgYW4gaW50ZXJydXB0IHdhcyBwZW5kaW5nIGFmdGVyIHdlIHJlYWQgdGhlIHRpbWVyLAorCSAqIGl0IG1heSBoYXZlIHdyYXBwZWQgYmV0d2VlbiBjaGVja2luZyB0aGUgaW50ZXJydXB0CisJICogc3RhdHVzIGFuZCByZWFkaW5nIHRoZSB0aW1lci4gIFJlLXJlYWQgdGhlIHRpbWVyIHRvCisJICogYmUgc3VyZSBpdHMgdmFsdWUgaXMgYWZ0ZXIgdGhlIHdyYXAuCisJICovCisKKwlhc20gdm9sYXRpbGUoIm1yYyBwNiwgMCwgJTAsIGM2LCBjMSwgMCIgOiAiPXIiICh0aXNyMSkpOworCWVsYXBzZWQgPSBnZXRfZWxhcHNlZCgpOworCWFzbSB2b2xhdGlsZSgibXJjIHA2LCAwLCAlMCwgYzYsIGMxLCAwIiA6ICI9ciIgKHRpc3IyKSk7CisKKwlpZih0aXNyMSAmIDEpCisJCWVsYXBzZWQgKz0gTEFUQ0g7CisJZWxzZSBpZiAodGlzcjIgJiAxKQorCQllbGFwc2VkID0gTEFUQ0ggKyBnZXRfZWxhcHNlZCgpOworCisJLyoKKwkgKiBOb3cgY29udmVydCB0aGVtIHRvIHVzZWMuCisJICovCisJdXNlYyA9ICh1bnNpZ25lZCBsb25nKShlbGFwc2VkICogKHRpY2tfbnNlYyAvIDEwMDApKSAvIExBVENIOworCisJcmV0dXJuIHVzZWM7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAoraW9wMzIxX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXUzMiB0aXNyOworCisJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CisKKwlhc20gdm9sYXRpbGUoIm1yYyBwNiwgMCwgJTAsIGM2LCBjMSwgMCIgOiAiPXIiICh0aXNyKSk7CisJdGlzciB8PSAxOworCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzYsIGMxLCAwIiA6IDogInIiICh0aXNyKSk7CisKKwl0aW1lcl90aWNrKHJlZ3MpOworCisJd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaW9wMzIxX3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAiSU9QMzIxIFRpbWVyIFRpY2siLAorCS5oYW5kbGVyCT0gaW9wMzIxX3RpbWVyX2ludGVycnVwdCwKKwkuZmxhZ3MJCT0gU0FfSU5URVJSVVBUCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgaW9wMzIxX3RpbWVyX2luaXQodm9pZCkKK3sKKwl1MzIgdGltZXJfY3RsOworCisJc2V0dXBfaXJxKElSUV9JT1AzMjFfVElNRVIwLCAmaW9wMzIxX3RpbWVyX2lycSk7CisKKwl0aW1lcl9jdGwgPSBJT1AzMjFfVE1SX0VOIHwgSU9QMzIxX1RNUl9QUklWSUxFR0VEIHwgSU9QMzIxX1RNUl9SRUxPQUQgfAorCQkJSU9QMzIxX1RNUl9SQVRJT18xXzE7CisKKwlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGM0LCBjMSwgMCIgOiA6ICJyIiAoTEFUQ0gpKTsKKworCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzAsIGMxLCAwIgk6IDogInIiICh0aW1lcl9jdGwpKTsKK30KKworc3RydWN0IHN5c190aW1lciBpb3AzMjFfdGltZXIgPSB7CisJLmluaXQJCT0gJmlvcDMyMV90aW1lcl9pbml0LAorCS5vZmZzZXQJCT0gaW9wMzIxX2dldHRpbWVvZmZzZXQsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzMxLWlycS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzMxLWlycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZDQzMjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtaXJxLmMKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtaXJxLmMKKyAqCisgKiBHZW5lcmljIElPUDMzMSBJUlEgaGFuZGxpbmcgZnVuY3Rpb25hbGl0eQorICoKKyAqIEF1dGhvcjogRGF2ZSBKaWFuZyA8ZGF2ZS5qaWFuZ0BpbnRlbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgSW50ZWwgQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworc3RhdGljIHUzMiBpb3AzMzFfbWFzazAgPSAwOworc3RhdGljIHUzMiBpb3AzMzFfbWFzazEgPSAwOworCitzdGF0aWMgaW5saW5lIHZvaWQgaW50Y3RsX3dyaXRlMCh1MzIgdmFsKQoreworICAgIC8vIElOVENUTDAKKwlhc20gdm9sYXRpbGUoIm1jciBwNiwwLCUwLGMwLGMwLDAiOjoiciIgKHZhbCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW50Y3RsX3dyaXRlMSh1MzIgdmFsKQoreworICAgIC8vIElOVENUTDEKKyAgICBhc20gdm9sYXRpbGUoIm1jciBwNiwwLCUwLGMxLGMwLDAiOjoiciIgKHZhbCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW50c3RyX3dyaXRlMCh1MzIgdmFsKQoreworICAgIC8vIElOVFNUUjAKKwlhc20gdm9sYXRpbGUoIm1jciBwNiwwLCUwLGMyLGMwLDAiOjoiciIgKHZhbCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW50c3RyX3dyaXRlMSh1MzIgdmFsKQoreworICAgIC8vIElOVFNUUjEKKwlhc20gdm9sYXRpbGUoIm1jciBwNiwwLCUwLGMzLGMwLDAiOjoiciIgKHZhbCkpOworfQorCitzdGF0aWMgdm9pZAoraW9wMzMxX2lycV9tYXNrMSAodW5zaWduZWQgaW50IGlycSkKK3sKKyAgICAgICAgaW9wMzMxX21hc2swICY9IH4oMSA8PCAoaXJxIC0gSU9QMzMxX0lSUV9PRlMpKTsKKyAgICAgICAgaW50Y3RsX3dyaXRlMChpb3AzMzFfbWFzazApOworfQorCitzdGF0aWMgdm9pZAoraW9wMzMxX2lycV9tYXNrMiAodW5zaWduZWQgaW50IGlycSkKK3sKKyAgICAgICAgaW9wMzMxX21hc2sxICY9IH4oMSA8PCAoaXJxIC0gSU9QMzMxX0lSUV9PRlMgLSAzMikpOworICAgICAgICBpbnRjdGxfd3JpdGUxKGlvcDMzMV9tYXNrMSk7Cit9CisKK3N0YXRpYyB2b2lkCitpb3AzMzFfaXJxX3VubWFzazEodW5zaWduZWQgaW50IGlycSkKK3sKKyAgICAgICAgaW9wMzMxX21hc2swIHw9ICgxIDw8IChpcnEgLSBJT1AzMzFfSVJRX09GUykpOworICAgICAgICBpbnRjdGxfd3JpdGUwKGlvcDMzMV9tYXNrMCk7Cit9CisKK3N0YXRpYyB2b2lkCitpb3AzMzFfaXJxX3VubWFzazIodW5zaWduZWQgaW50IGlycSkKK3sKKyAgICAgICAgaW9wMzMxX21hc2sxIHw9ICgxIDw8IChpcnEgLSBJT1AzMzFfSVJRX09GUyAtIDMyKSk7CisgICAgICAgIGludGN0bF93cml0ZTEoaW9wMzMxX21hc2sxKTsKK30KKworc3RydWN0IGlycWNoaXAgaW9wMzMxX2lycWNoaXAxID0geworCS5hY2sgICAgPSBpb3AzMzFfaXJxX21hc2sxLAorCS5tYXNrICAgPSBpb3AzMzFfaXJxX21hc2sxLAorCS51bm1hc2sgPSBpb3AzMzFfaXJxX3VubWFzazEsCit9OworCitzdHJ1Y3QgaXJxY2hpcCBpb3AzMzFfaXJxY2hpcDIgPSB7CisJLmFjayAgICA9IGlvcDMzMV9pcnFfbWFzazIsCisJLm1hc2sgICA9IGlvcDMzMV9pcnFfbWFzazIsCisJLnVubWFzayA9IGlvcDMzMV9pcnFfdW5tYXNrMiwKK307CisKK3ZvaWQgX19pbml0IGlvcDMzMV9pbml0X2lycSh2b2lkKQoreworCXVuc2lnbmVkIGludCBpLCB0bXA7CisKKwkvKiBFbmFibGUgYWNjZXNzIHRvIGNvcHJvY2Vzc29yIDYgZm9yIGRlYWxpbmcgd2l0aCBJUlFzLgorCSAqIEZyb20gUk1LOgorCSAqIEJhc2ljYWxseSwgdGhlIEludGVsIGRvY3VtZW50YXRpb24gaGVyZSBpcyBwb29yLiAgSXQgYXBwZWFycyB0aGF0CisJICogeW91IG5lZWQgdG8gc2V0IHRoZSBiaXQgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIGNvcHJvY2Vzc29yIGZyb20KKwkgKiBTVkMgbW9kZS4gIFdoZXRoZXIgdGhhdCBhbGxvd3MgYWNjZXNzIGZyb20gdXNlciBzcGFjZSBvciBub3QgaXMKKwkgKiB1bmNsZWFyLgorCSAqLworCWFzbSB2b2xhdGlsZSAoCisJCSJtcmMgcDE1LCAwLCAlMCwgYzE1LCBjMSwgMFxuXHQiCisJCSJvcnIgJTAsICUwLCAlMVxuXHQiCisJCSJtY3IgcDE1LCAwLCAlMCwgYzE1LCBjMSwgMFxuXHQiCisJCS8qIFRoZSBhY3Rpb24gaXMgZGVsYXllZCwgc28gd2UgaGF2ZSB0byBkbyB0aGlzOiAqLworCQkibXJjIHAxNSwgMCwgJTAsIGMxNSwgYzEsIDBcblx0IgorCQkibW92ICUwLCAlMFxuXHQiCisJCSJzdWIgcGMsIHBjLCAjNCIKKwkJOiAiPXIiICh0bXApIDogImkiICgxIDw8IDYpICk7CisKKwlpbnRjdGxfd3JpdGUwKDApOwkJLy8gZGlzYWJsZSBhbGwgaW50ZXJydXB0cworICAgIAlpbnRjdGxfd3JpdGUxKDApOworCWludHN0cl93cml0ZTAoMCk7CQkvLyB0cmVhdCBhbGwgYXMgSVJRCisgICAgCWludHN0cl93cml0ZTEoMCk7CisJaWYobWFjaGluZV9pc19pcTgwMzMxKCkpIAkvLyBhbGwgaW50ZXJydXB0cyBhcmUgaW5wdXRzIHRvIGNoaXAKKwkJKklPUDMzMV9QQ0lJUlNSID0gMHgwZjsKKworCWZvcihpID0gSU9QMzMxX0lSUV9PRlM7IGkgPCBOUl9JT1AzMzFfSVJRUzsgaSsrKQorCXsKKwkJc2V0X2lycV9jaGlwKGksIChpIDwgMzIpID8gJmlvcDMzMV9pcnFjaGlwMSA6ICZpb3AzMzFfaXJxY2hpcDIpOworCQlzZXRfaXJxX2hhbmRsZXIoaSwgZG9fbGV2ZWxfSVJRKTsKKwkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJfQorfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtcGNpLmMgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRkZDIxMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMzMS1wY2kuYwpAQCAtMCwwICsxLDIyMiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMzMS1wY2kuYworICoKKyAqIFBDSSBzdXBwb3J0IGZvciB0aGUgSW50ZWwgSU9QMzMxIGNoaXBzZXQKKyAqCisgKiBBdXRob3I6IERhdmUgSmlhbmcgKGRhdmUuamlhbmdAaW50ZWwuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0IEludGVsIENvcnAuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvaW9wMzMxLmg+CisKKyN1bmRlZiBERUJVRworI3VuZGVmIERFQlVHMQorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgIERCRyh4Li4uKSBwcmludGsoeCkKKyNlbHNlCisjZGVmaW5lICBEQkcoeC4uLikgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBERUJVRzEKKyNkZWZpbmUgIERCRzEoeC4uLikgcHJpbnRrKHgpCisjZWxzZQorI2RlZmluZSAgREJHMSh4Li4uKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyoKKyAqIFRoaXMgcm91dGluZSBidWlsZHMgZWl0aGVyIGEgdHlwZTAgb3IgdHlwZTEgY29uZmlndXJhdGlvbiBjb21tYW5kLiAgSWYgdGhlCisgKiBidXMgaXMgb24gdGhlIDgwMzMxIHRoZW4gYSB0eXBlMCBtYWRlLCBlbHNlIGEgdHlwZTEgaXMgY3JlYXRlZC4KKyAqLworc3RhdGljIHUzMiBpb3AzMzFfY2ZnX2FkZHJlc3Moc3RydWN0IHBjaV9idXMgKmJ1cywgaW50IGRldmZuLCBpbnQgd2hlcmUpCit7CisJc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzID0gYnVzLT5zeXNkYXRhOworCXUzMiBhZGRyOworCisJaWYgKHN5cy0+YnVzbnIgPT0gYnVzLT5udW1iZXIpCisJCWFkZHIgPSAxIDw8IChQQ0lfU0xPVChkZXZmbikgKyAxNikgfCAoUENJX1NMT1QoZGV2Zm4pIDw8IDExKTsKKwllbHNlCisJCWFkZHIgPSBidXMtPm51bWJlciA8PCAxNiB8IFBDSV9TTE9UKGRldmZuKSA8PCAxMSB8IDE7CisKKwlhZGRyIHw9CVBDSV9GVU5DKGRldmZuKSA8PCA4IHwgKHdoZXJlICYgfjMpOworCisJcmV0dXJuIGFkZHI7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgY2hlY2tzIHRoZSBzdGF0dXMgb2YgdGhlIGxhc3QgY29uZmlndXJhdGlvbiBjeWNsZS4gIElmIGFuIGVycm9yCisgKiB3YXMgZGV0ZWN0ZWQgaXQgcmV0dXJucyBhIDEsIGVsc2UgaXQgcmV0dXJucyBhIDAuICBUaGUgZXJyb3JzIGJlaW5nIGNoZWNrZWQKKyAqIGFyZSBwYXJpdHksIG1hc3RlciBhYm9ydCwgdGFyZ2V0IGFib3J0IChtYXN0ZXIgYW5kIHRhcmdldCkuICBUaGVzZSB0eXBlcyBvZgorICogZXJyb3JzIG9jY3VyZSBkdXJpbmcgYSBjb25maWcgY3ljbGUgd2hlcmUgdGhlcmUgaXMgbm8gZGV2aWNlLCBsaWtlIGR1cmluZworICogdGhlIGRpc2NvdmVyeSBzdGFnZS4KKyAqLworc3RhdGljIGludCBpb3AzMzFfcGNpX3N0YXR1cyh2b2lkKQoreworCXVuc2lnbmVkIGludCBzdGF0dXM7CisJaW50IHJldCA9IDA7CisKKwkvKgorCSAqIENoZWNrIHRoZSBzdGF0dXMgcmVnaXN0ZXJzLgorCSAqLworCXN0YXR1cyA9ICpJT1AzMzFfQVRVU1I7CisJaWYgKHN0YXR1cyAmIDB4ZjkwMCkKKwl7CisJCURCRygiXHRcdFx0UENJOiBQMCAtIHN0YXR1cyA9IDB4JTA4eFxuIiwgc3RhdHVzKTsKKwkJKklPUDMzMV9BVFVTUiA9IHN0YXR1cyAmIDB4ZjkwMDsKKwkJcmV0ID0gMTsKKwl9CisJc3RhdHVzID0gKklPUDMzMV9BVFVJU1I7CisJaWYgKHN0YXR1cyAmIDB4Njc5ZikKKwl7CisJCURCRygiXHRcdFx0UENJOiBQMSAtIHN0YXR1cyA9IDB4JTA4eFxuIiwgc3RhdHVzKTsKKwkJKklPUDMzMV9BVFVJU1IgPSBzdGF0dXMgJiAweDY3OWY7CisJCXJldCA9IDE7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBTaW1wbHkgd3JpdGUgdGhlIGFkZHJlc3MgcmVnaXN0ZXIgYW5kIHJlYWQgdGhlIGNvbmZpZ3VyYXRpb24KKyAqIGRhdGEuICBOb3RlIHRoYXQgdGhlIDQgbm9wJ3MgZW5zdXJlIHRoYXQgd2UgYXJlIGFibGUgdG8gaGFuZGxlCisgKiBhIGRlbGF5ZWQgYWJvcnQgKGluIHRoZW9yeS4pCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGlvcDMzMV9yZWFkKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl1MzIgdmFsOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJzdHIJJTEsIFslMl1cblx0IgorCQkibGRyCSUwLCBbJTNdXG5cdCIKKwkJIm5vcFxuXHQiCisJCSJub3Bcblx0IgorCQkibm9wXG5cdCIKKwkJIm5vcFxuXHQiCisJCTogIj1yIiAodmFsKQorCQk6ICJyIiAoYWRkciksICJyIiAoSU9QMzMxX09DQ0FSKSwgInIiIChJT1AzMzFfT0NDRFIpKTsKKworCXJldHVybiB2YWw7Cit9CisKKy8qCisgKiBUaGUgcmVhZCByb3V0aW5lcyBtdXN0IGNoZWNrIHRoZSBlcnJvciBzdGF0dXMgb2YgdGhlIGxhc3QgY29uZmlndXJhdGlvbgorICogY3ljbGUuICBJZiB0aGVyZSB3YXMgYW4gZXJyb3IsIHRoZSByb3V0aW5lIHJldHVybnMgYWxsIGhleCBmJ3MuCisgKi8KK3N0YXRpYyBpbnQKK2lvcDMzMV9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwKKwkJaW50IHNpemUsIHUzMiAqdmFsdWUpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gaW9wMzMxX2NmZ19hZGRyZXNzKGJ1cywgZGV2Zm4sIHdoZXJlKTsKKwl1MzIgdmFsID0gaW9wMzMxX3JlYWQoYWRkcikgPj4gKCh3aGVyZSAmIDMpICogOCk7CisKKwlpZiggaW9wMzMxX3BjaV9zdGF0dXMoKSApCisJCXZhbCA9IDB4ZmZmZmZmZmY7CisKKwkqdmFsdWUgPSB2YWw7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgaW50Citpb3AzMzFfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLAorCQlpbnQgc2l6ZSwgdTMyIHZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9IGlvcDMzMV9jZmdfYWRkcmVzcyhidXMsIGRldmZuLCB3aGVyZSk7CisJdTMyIHZhbDsKKworCWlmIChzaXplICE9IDQpIHsKKwkJdmFsID0gaW9wMzMxX3JlYWQoYWRkcik7CisJCWlmICghaW9wMzMxX3BjaV9zdGF0dXMoKSA9PSAwKQorCQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKKworCQl3aGVyZSA9ICh3aGVyZSAmIDMpICogODsKKworCQlpZiAoc2l6ZSA9PSAxKQorCQkJdmFsICY9IH4oMHhmZiA8PCB3aGVyZSk7CisJCWVsc2UKKwkJCXZhbCAmPSB+KDB4ZmZmZiA8PCB3aGVyZSk7CisKKwkJKklPUDMzMV9PQ0NEUiA9IHZhbCB8IHZhbHVlIDw8IHdoZXJlOworCX0gZWxzZSB7CisJCWFzbSB2b2xhdGlsZSgKKwkJCSJzdHIJJTEsIFslMl1cblx0IgorCQkJInN0cgklMCwgWyUzXVxuXHQiCisJCQkibm9wXG5cdCIKKwkJCSJub3Bcblx0IgorCQkJIm5vcFxuXHQiCisJCQkibm9wXG5cdCIKKwkJCToKKwkJCTogInIiICh2YWx1ZSksICJyIiAoYWRkciksCisJCQkgICJyIiAoSU9QMzMxX09DQ0FSKSwgInIiIChJT1AzMzFfT0NDRFIpKTsKKwl9CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9vcHMgaW9wMzMxX29wcyA9IHsKKwkucmVhZAk9IGlvcDMzMV9yZWFkX2NvbmZpZywKKwkud3JpdGUJPSBpb3AzMzFfd3JpdGVfY29uZmlnLAorfTsKKworLyoKKyAqIFdoZW4gYSBQQ0kgZGV2aWNlIGRvZXMgbm90IGV4aXN0IGR1cmluZyBjb25maWcgY3ljbGVzLCB0aGUgWFNjYWxlIGdldHMgYQorICogYnVzIGVycm9yIGluc3RlYWQgb2YgcmV0dXJuaW5nIDB4ZmZmZmZmZmYuIFRoaXMgaGFuZGxlciBzaW1wbHkgcmV0dXJucy4KKyAqLworaW50Citpb3AzMzFfcGNpX2Fib3J0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJREJHKCJQQ0kgYWJvcnQ6IGFkZHJlc3MgPSAweCUwOGx4IGZzciA9IDB4JTAzeCBQQyA9IDB4JTA4bHggTFIgPSAweCUwOGx4XG4iLAorCQlhZGRyLCBmc3IsIHJlZ3MtPkFSTV9wYywgcmVncy0+QVJNX2xyKTsKKworCS8qCisJICogSWYgaXQgd2FzIGFuIGltcHJlY2lzZSBhYm9ydCwgdGhlbiB3ZSBuZWVkIHRvIGNvcnJlY3QgdGhlCisJICogcmV0dXJuIGFkZHJlc3MgdG8gYmUgX2FmdGVyXyB0aGUgaW5zdHJ1Y3Rpb24uCisJICovCisJaWYgKGZzciAmICgxIDw8IDEwKSkKKwkJcmVncy0+QVJNX3BjICs9IDQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNjYW4gYW4gSU9QMzMxIFBDSSBidXMuICBzeXMtPmJ1cyBkZWZpbmVzIHdoaWNoIGJ1cyB3ZSBzY2FuLgorICovCitzdHJ1Y3QgcGNpX2J1cyAqaW9wMzMxX3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQoreworCXJldHVybiBwY2lfc2Nhbl9idXMoc3lzLT5idXNuciwgJmlvcDMzMV9vcHMsIHN5cyk7Cit9CisKK3ZvaWQgaW9wMzMxX2luaXQodm9pZCkKK3sKKwlEQkcxKCJQQ0k6ICBJbnRlbCA4MDMzMSBQQ0kgaW5pdCBjb2RlLlxuIik7CisJREJHMSgiXHRBVFU6IElPUDMzMV9BVFVDTUQ9MHglMDR4XG4iLCAqSU9QMzMxX0FUVUNNRCk7CisJREJHMSgiXHRBVFU6IElPUDMzMV9PTVdUVlIwPTB4JTA0eCwgSU9QMzMxX09JT1dUVlI9MHglMDR4XG4iLAorCQkJKklPUDMzMV9PTVdUVlIwLAorCQkJKklPUDMzMV9PSU9XVFZSKTsKKwlEQkcxKCJcdEFUVTogSU9QMzMxX09NV1RWUjE9MHglMDR4XG4iLCAqSU9QMzMxX09NV1RWUjEpOworCURCRzEoIlx0QVRVOiBJT1AzMzFfQVRVQ1I9MHglMDh4XG4iLCAqSU9QMzMxX0FUVUNSKTsKKwlEQkcxKCJcdEFUVTogSU9QMzMxX0lBQkFSMD0weCUwOHggSU9QMzMxX0lBTFIwPTB4JTA4eCBJT1AzMzFfSUFUVlIwPSUwOHhcbiIsICpJT1AzMzFfSUFCQVIwLCAqSU9QMzMxX0lBTFIwLCAqSU9QMzMxX0lBVFZSMCk7CisJREJHMSgiXHRBVFU6IElPUDMxX0lBQkFSMT0weCUwOHggSU9QMzMxX0lBTFIxPTB4JTA4eFxuIiwgKklPUDMzMV9JQUJBUjEsICpJT1AzMzFfSUFMUjEpOworCURCRzEoIlx0QVRVOiBJT1AzMzFfRVJCQVI9MHglMDh4IElPUDMzMV9FUkxSPTB4JTA4eCBJT1AzMzFfRVJUVlI9JTA4eFxuIiwgKklPUDMzMV9FUkJBUiwgKklPUDMzMV9FUkxSLCAqSU9QMzMxX0VSVFZSKTsKKwlEQkcxKCJcdEFUVTogSU9QMzMxX0lBQkFSMj0weCUwOHggSU9QMzMxX0lBTFIyPTB4JTA4eCBJT1AzMzFfSUFUVlIyPSUwOHhcbiIsICpJT1AzMzFfSUFCQVIyLCAqSU9QMzMxX0lBTFIyLCAqSU9QMzMxX0lBVFZSMik7CisJREJHMSgiXHRBVFU6IElPUDMzMV9JQUJBUjM9MHglMDh4IElPUDMzMV9JQUxSMz0weCUwOHggSU9QMzMxX0lBVFZSMz0lMDh4XG4iLCAqSU9QMzMxX0lBQkFSMywgKklPUDMzMV9JQUxSMywgKklPUDMzMV9JQVRWUjMpOworCisJaG9va19mYXVsdF9jb2RlKDE2KzYsIGlvcDMzMV9wY2lfYWJvcnQsIFNJR0JVUywgImltcHJlY2lzZSBleHRlcm5hbCBhYm9ydCIpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMzMS1zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMmU3OTE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzMxLXNldHVwLmMKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtc2V0dXAuYworICoKKyAqIEF1dGhvcjogRGF2ZSBKaWFuZyAoZGF2ZS5qaWFuZ0BpbnRlbC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworI2RlZmluZSBJT1AzMzFfVUFSVF9YVEFMIDMzMzM0MDAwCisKKy8qCisgKiBTdGFuZGFyZCBJTyBtYXBwaW5nIGZvciBhbGwgSU9QMzMxIGJhc2VkIHN5c3RlbXMKKyAqLworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBpb3AzMzFfc3RkX2Rlc2NbXSBfX2luaXRkYXRhID0geworIC8qIHZpcnR1YWwgICAgIHBoeXNpY2FsICAgICAgbGVuZ3RoICAgICAgdHlwZSAqLworCisgLyogbWVtIG1hcHBlZCByZWdpc3RlcnMgKi8KKyB7IElPUDMzMV9WSVJUX01FTV9CQVNFLCAgSU9QMzMxX1BIWVNfTUVNX0JBU0UsICAgMHgwMDAwMjAwMCwgIE1UX0RFVklDRSB9LAorCisgLyogUENJIElPIHNwYWNlICovCisgeyBJT1AzMzFfUENJX0xPV0VSX0lPX1ZBLCAgSU9QMzMxX1BDSV9MT1dFUl9JT19QQSwgICBJT1AzMzFfUENJX0lPX1dJTkRPV19TSVpFLCAgTVRfREVWSUNFIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IGlvcDMzMV9zZXJpYWxfcG9ydHNbXSA9IHsKKwl7CisJCS5tZW1iYXNlCT0gKGNoYXIqKShJT1AzMzFfVUFSVDBfVklSVCksCisJCS5tYXBiYXNlCT0gKElPUDMzMV9VQVJUMF9QSFlTKSwKKwkJLmlycQkJPSBJUlFfSU9QMzMxX1VBUlQwLAorCQkuZmxhZ3MJCT0gVVBGX1NLSVBfVEVTVCwKKwkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwkJLnVhcnRjbGsJPSBJT1AzMzFfVUFSVF9YVEFMLAorCQkubGluZQkJPSAwLAorCQkudHlwZQkJPSBQT1JUX1hTQ0FMRSwKKwkJLmZpZm9zaXplCT0gMzIKKwl9ICwgeworCQkubWVtYmFzZQk9IChjaGFyKikoSU9QMzMxX1VBUlQxX1ZJUlQpLAorCQkubWFwYmFzZQk9IChJT1AzMzFfVUFSVDFfUEhZUyksCisJCS5pcnEJCT0gSVJRX0lPUDMzMV9VQVJUMSwKKwkJLmZsYWdzCQk9IFVQRl9TS0lQX1RFU1QsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5yZWdzaGlmdAk9IDIsCisJCS51YXJ0Y2xrCT0gSU9QMzMxX1VBUlRfWFRBTCwKKwkJLmxpbmUJCT0gMSwKKwkJLnR5cGUJCT0gUE9SVF9YU0NBTEUsCisJCS5maWZvc2l6ZQk9IDMyCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpb3AzM3hfaTJjXzBfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSAweGZmZmZmNjgwLAorCQkuZW5kID0gMHhmZmZmZjY5OCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9JT1AzMzFfSTJDXzAsCisJCS5lbmQgPSBJUlFfSU9QMzMxX0kyQ18wLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUQorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW9wMzN4X2kyY18xX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gMHhmZmZmZjZhMCwKKwkJLmVuZCA9IDB4ZmZmZmY2YjgsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfSU9QMzMxX0kyQ18xLAorCQkuZW5kID0gSVJRX0lPUDMzMV9JMkNfMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpb3AzM3hfaTJjXzBfY29udHJvbGxlciA9IHsKKwkubmFtZSA9ICJJT1AzeHgtSTJDIiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gMiwKKwkucmVzb3VyY2UgPSBpb3AzM3hfaTJjXzBfcmVzb3VyY2VzCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpb3AzM3hfaTJjXzFfY29udHJvbGxlciA9IHsKKwkubmFtZSA9ICJJT1AzeHgtSTJDIiwKKwkuaWQgPSAxLAorCS5udW1fcmVzb3VyY2VzID0gMiwKKwkucmVzb3VyY2UgPSBpb3AzM3hfaTJjXzFfcmVzb3VyY2VzCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaW9wMzN4X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZpb3AzM3hfaTJjXzBfY29udHJvbGxlciwKKwkmaW9wMzN4X2kyY18xX2NvbnRyb2xsZXIKK307CisKK3ZvaWQgX19pbml0IGlvcDMzeF9pbml0KHZvaWQpCit7CisJaWYoaW9wX2lzXzMzMSgpKQorCXsKKwkJcGxhdGZvcm1fYWRkX2RldmljZXMoaW9wMzN4X2RldmljZXMsCisJCQkJQVJSQVlfU0laRShpb3AzM3hfZGV2aWNlcykpOworCX0KK30KKwordm9pZCBfX2luaXQgaW9wMzMxX21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdChpb3AzMzFfc3RkX2Rlc2MsIEFSUkFZX1NJWkUoaW9wMzMxX3N0ZF9kZXNjKSk7CisJZWFybHlfc2VyaWFsX3NldHVwKCZpb3AzMzFfc2VyaWFsX3BvcnRzWzBdKTsKKwllYXJseV9zZXJpYWxfc2V0dXAoJmlvcDMzMV9zZXJpYWxfcG9ydHNbMV0pOworfQorCisjaWZkZWYgQ09ORklHX0FSQ0hfSU9QMzMxCitleHRlcm4gdm9pZCBpb3AzMzFfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gc3RydWN0IHN5c190aW1lciBpb3AzMzFfdGltZXI7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX0lRODAzMzEKK2V4dGVybiB2b2lkIGlxODAzMzFfbWFwX2lvKHZvaWQpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9JUTgwMzMyCitleHRlcm4gdm9pZCBpcTgwMzMyX21hcF9pbyh2b2lkKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9JUTgwMzMxKQorTUFDSElORV9TVEFSVChJUTgwMzMxLCAiSW50ZWwgSVE4MDMzMSIpCisgICAgTUFJTlRBSU5FUigiSW50ZWwgQ29ycC4iKQorICAgIEJPT1RfTUVNKFBIWVNfT0ZGU0VULCAweGZlZmZmMDAwLCAweGZmZmZmMDAwKSAvLyB2aXJ0dWFsLCBwaHlzaWNhbAorICAgIC8vQk9PVF9NRU0oUEhZU19PRkZTRVQsIElPUDMzMV9VQVJUMF9WSVJULCBJT1AzMzFfVUFSVDBfUEhZUykKKyAgICBNQVBJTyhpcTgwMzMxX21hcF9pbykKKyAgICBJTklUSVJRKGlvcDMzMV9pbml0X2lycSkKKwkudGltZXIJCT0gJmlvcDMzMV90aW1lciwKKyAgICBCT09UX1BBUkFNUygweDAxMDApCisJSU5JVF9NQUNISU5FKGlvcDMzeF9pbml0KQorTUFDSElORV9FTkQKKworI2VsaWYgZGVmaW5lZChDT05GSUdfTUFDSF9JUTgwMzMyKQorTUFDSElORV9TVEFSVChJUTgwMzMyLCAiSW50ZWwgSVE4MDMzMiIpCisgICAgTUFJTlRBSU5FUigiSW50ZWwgQ29ycC4iKQorICAgIEJPT1RfTUVNKFBIWVNfT0ZGU0VULCAweGZlZmZmMDAwLCAweGZmZmZmMDAwKSAvLyB2aXJ0dWFsLCBwaHlzaWNhbAorICAgIC8vQk9PVF9NRU0oUEhZU19PRkZTRVQsIElPUDMzMV9VQVJUMF9WSVJULCBJT1AzMzFfVUFSVDBfUEhZUykKKyAgICBNQVBJTyhpcTgwMzMyX21hcF9pbykKKyAgICBJTklUSVJRKGlvcDMzMV9pbml0X2lycSkKKwkudGltZXIJCT0gJmlvcDMzMV90aW1lciwKKyAgICBCT09UX1BBUkFNUygweDAxMDApCisJSU5JVF9NQUNISU5FKGlvcDMzeF9pbml0KQorTUFDSElORV9FTkQKKworI2Vsc2UKKyNlcnJvciBObyBtYWNoaW5lIGRlc2NyaXB0b3IgZGVmaW5lZCBmb3IgdGhpcyBJT1AzWFggaW1wbGVtZW50YXRpb24KKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMzMS10aW1lLmMgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMTY5NjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtdGltZS5jCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzMxLXRpbWUuYworICoKKyAqIFRpbWVyIGNvZGUgZm9yIElPUDMzMSBiYXNlZCBzeXN0ZW1zCisgKgorICogQXV0aG9yOiBEYXZlIEppYW5nIDxkYXZlLmppYW5nQGludGVsLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMyBJbnRlbCBDb3JwLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9lbGFwc2VkKHZvaWQpCit7CisJcmV0dXJuIExBVENIIC0gKklPUDMzMV9UVV9UQ1IwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpb3AzMzFfZ2V0dGltZW9mZnNldCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZWxhcHNlZCwgdXNlYzsKKwl1MzIgdGlzcjEsIHRpc3IyOworCisJLyoKKwkgKiBJZiBhbiBpbnRlcnJ1cHQgd2FzIHBlbmRpbmcgYmVmb3JlIHdlIHJlYWQgdGhlIHRpbWVyLAorCSAqIHdlJ3ZlIGFscmVhZHkgd3JhcHBlZC4gIEZhY3RvciB0aGlzIGludG8gdGhlIHRpbWUuCisJICogSWYgYW4gaW50ZXJydXB0IHdhcyBwZW5kaW5nIGFmdGVyIHdlIHJlYWQgdGhlIHRpbWVyLAorCSAqIGl0IG1heSBoYXZlIHdyYXBwZWQgYmV0d2VlbiBjaGVja2luZyB0aGUgaW50ZXJydXB0CisJICogc3RhdHVzIGFuZCByZWFkaW5nIHRoZSB0aW1lci4gIFJlLXJlYWQgdGhlIHRpbWVyIHRvCisJICogYmUgc3VyZSBpdHMgdmFsdWUgaXMgYWZ0ZXIgdGhlIHdyYXAuCisJICovCisKKwlhc20gdm9sYXRpbGUoIm1yYyBwNiwgMCwgJTAsIGM2LCBjMSwgMCIgOiAiPXIiICh0aXNyMSkpOworCWVsYXBzZWQgPSBnZXRfZWxhcHNlZCgpOworCWFzbSB2b2xhdGlsZSgibXJjIHA2LCAwLCAlMCwgYzYsIGMxLCAwIiA6ICI9ciIgKHRpc3IyKSk7CisKKwlpZih0aXNyMSAmIDEpCisJCWVsYXBzZWQgKz0gTEFUQ0g7CisJZWxzZSBpZiAodGlzcjIgJiAxKQorCQllbGFwc2VkID0gTEFUQ0ggKyBnZXRfZWxhcHNlZCgpOworCisJLyoKKwkgKiBOb3cgY29udmVydCB0aGVtIHRvIHVzZWMuCisJICovCisJdXNlYyA9ICh1bnNpZ25lZCBsb25nKShlbGFwc2VkICogKHRpY2tfbnNlYyAvIDEwMDApKSAvIExBVENIOworCisJcmV0dXJuIHVzZWM7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAoraW9wMzMxX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXUzMiB0aXNyOworCisJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CisKKwlhc20gdm9sYXRpbGUoIm1yYyBwNiwgMCwgJTAsIGM2LCBjMSwgMCIgOiAiPXIiICh0aXNyKSk7CisJdGlzciB8PSAxOworCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzYsIGMxLCAwIiA6IDogInIiICh0aXNyKSk7CisKKwl0aW1lcl90aWNrKHJlZ3MpOworCisJd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlvcDMzMV90aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gIklPUDMzMSBUaW1lciBUaWNrIiwKKwkuaGFuZGxlcgk9IGlvcDMzMV90aW1lcl9pbnRlcnJ1cHQsCisJLmZsYWdzCQk9IFNBX0lOVEVSUlVQVAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGlvcDMzMV90aW1lcl9pbml0KHZvaWQpCit7CisJdTMyIHRpbWVyX2N0bDsKKworCXNldHVwX2lycShJUlFfSU9QMzMxX1RJTUVSMCwgJmlvcDMzMV90aW1lcl9pcnEpOworCisJdGltZXJfY3RsID0gSU9QMzMxX1RNUl9FTiB8IElPUDMzMV9UTVJfUFJJVklMRUdFRCB8IElPUDMzMV9UTVJfUkVMT0FEIHwKKwkJCUlPUDMzMV9UTVJfUkFUSU9fMV8xOworCisJYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjNCwgYzEsIDAiIDogOiAiciIgKExBVENIKSk7CisKKwlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGMwLCBjMSwgMCIJOiA6ICJyIiAodGltZXJfY3RsKSk7CisKK30KKworc3RydWN0IHN5c190aW1lciBpb3AzMzFfdGltZXIgPSB7CisJLmluaXQJCT0gaW9wMzMxX3RpbWVyX2luaXQsCisJLm9mZnNldAkJPSBpb3AzMzFfZ2V0dGltZW9mZnNldCwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTMxMjQ0LW1tLmMgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTMxMjQ0LW1tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAxMDQyZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxMzEyNDQtbW0uYwpAQCAtMCwwICsxLDQ0IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1pb3AzeHgvbW0uYworICoKKyAqIExvdyBsZXZlbCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gZm9yIGlxODAzMjEgcGxhdGZvcm0KKyAqCisgKiBBdXRob3I6IFJvcnkgQm9sdCA8cm9yeWJvbHRAcGFjYmVsbC5uZXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9yeSBCb2x0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworCisvKgorICogSVE4MDMyMSBzcGVjaWZpYyBJTyBtYXBwaW5ncworICoKKyAqIFdlIHVzZSBSZWRCb290J3Mgc2V0dXAgZm9yIHRoZSBvbmJvYXJkIGRldmljZXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaXEzMTI0NF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKyAvKiB2aXJ0dWFsICAgICBwaHlzaWNhbCAgICAgIGxlbmd0aCAgICAgICAgdHlwZSAqLworCisgLyogb24tYm9hcmQgZGV2aWNlcyAqLworIHsgSVEzMTI0NF9VQVJULCBJUTMxMjQ0X1VBUlQsICAgMHgwMDEwMDAwMCwgICBNVF9ERVZJQ0UgfQorfTsKKwordm9pZCBfX2luaXQgaXEzMTI0NF9tYXBfaW8odm9pZCkKK3sKKwlpb3AzMjFfbWFwX2lvKCk7CisKKwlpb3RhYmxlX2luaXQoaXEzMTI0NF9pb19kZXNjLCBBUlJBWV9TSVpFKGlxMzEyNDRfaW9fZGVzYykpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXEzMTI0NC1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxMzEyNDQtcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk5N2RhYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxMzEyNDQtcGNpLmMKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzIxLXBjaS5jCisgKgorICogUENJIHN1cHBvcnQgZm9yIHRoZSBJbnRlbCBJUTgwMzIxIHJlZmVyZW5jZSBib2FyZAorICoKKyAqIEF1dGhvcjogUm9yeSBCb2x0IDxyb3J5Ym9sdEBwYWNiZWxsLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb3J5IEJvbHQKKyAqIENvcHlyaWdodCAoQykgMjAwNCBJbnRlbCBDb3JwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgbWFjcm8gaXMgdXNlZCB0byBsb29rdXAgaXJxcyBpbiBhIHN0YW5kYXJkIHRhYmxlCisgKiBmb3JtYXQgZm9yIHRob3NlIHN5c3RlbXMgdGhhdCBkbyBub3QgYWxyZWFkeSBoYXZlIFBDSQorICogaW50ZXJydXB0cyBwcm9wZXJseSByb3V0ZWQuICBXZSBhc3N1bWUgMSA8PSBwaW4gPD0gNAorICovCisjZGVmaW5lIFBDSV9JUlFfVEFCTEVfTE9PS1VQKG1pbmlkLG1heGlkKQlcCisoeyBpbnQgX2N0bF8gPSAtMTsJCQkJXAorICAgdW5zaWduZWQgaW50IF9pZHNlbCA9IGlkc2VsIC0gbWluaWQ7CQlcCisgICBpZiAoX2lkc2VsIDw9IG1heGlkKQkJCQlcCisgICAgICBfY3RsXyA9IHBjaV9pcnFfdGFibGVbX2lkc2VsXVtwaW4tMV07CVwKKyAgIF9jdGxfOyB9KQorCisjZGVmaW5lIElOVEEJSVJRX0lRMzEyNDRfSU5UQQorI2RlZmluZSBJTlRCCUlSUV9JUTMxMjQ0X0lOVEIKKyNkZWZpbmUgSU5UQwlJUlFfSVEzMTI0NF9JTlRDCisjZGVmaW5lIElOVEQJSVJRX0lRMzEyNDRfSU5URAorCisjZGVmaW5lIElOVEUJSVJRX0lRMzEyNDRfSTgyNTQ2CisKK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdAoraXEzMTI0NF9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IGlkc2VsLCB1OCBwaW4pCit7CisJc3RhdGljIGludCBwY2lfaXJxX3RhYmxlW11bNF0gPSB7CisJCS8qCisJCSAqIFBDSSBJRFNFTC9JTlRQSU4tPklOVExJTkUKKwkJICogQSAgICAgICBCICAgICAgIEMgICAgICAgRAorCQkgKi8KKyNpZmRlZiBDT05GSUdfQVJDSF9FUDgwMjE5CisJCXtJTlRCLCBJTlRCLCBJTlRCLCBJTlRCfSwgLyogQ0ZsYXNoICovCisJCXtJTlRFLCBJTlRFLCBJTlRFLCBJTlRFfSwgLyogODI1NTEgUHJvIDEwMCAqLworCQl7SU5URCwgSU5URCwgSU5URCwgSU5URH0sIC8qIFBDSS1YIFNsb3QgKi8KKwkJe0lOVEMsIElOVEMsIElOVEMsIElOVEN9LCAvKiBTQVRBICAgKi8KKyNlbHNlCisJCXtJTlRCLCBJTlRCLCBJTlRCLCBJTlRCfSwgLyogQ0ZsYXNoICovCisJCXtJTlRDLCBJTlRDLCBJTlRDLCBJTlRDfSwgLyogU0FUQSAgICovCisJCXtJTlRELCBJTlRELCBJTlRELCBJTlREfSwgLyogUENJLVggU2xvdCAqLworCQl7SU5URSwgSU5URSwgSU5URSwgSU5URX0sIC8qIDgyNTQ2IEdpZ0UgKi8KKyNlbmRpZiAvLyBDT05GSUdfQVJDSF9FUDgwMjE5CisJfTsKKworCUJVR19PTihwaW4gPCAxIHx8IHBpbiA+IDQpOworCisJcmV0dXJuIFBDSV9JUlFfVEFCTEVfTE9PS1VQKDAsIDcpOworfQorCitzdGF0aWMgaW50IGlxMzEyNDRfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlpZihuciAhPSAwKQorCQlyZXR1cm4gMDsKKworCXJlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiAyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcykKKwkJcGFuaWMoIlBDSTogdW5hYmxlIHRvIGFsbG9jIHJlc291cmNlcyIpOworCisJbWVtc2V0KHJlcywgMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiAyKTsKKworCXJlc1swXS5zdGFydCA9IElPUDMyMV9QQ0lfTE9XRVJfSU9fVkE7CisJcmVzWzBdLmVuZCAgID0gSU9QMzIxX1BDSV9VUFBFUl9JT19WQTsKKwlyZXNbMF0ubmFtZSAgPSAiSVEzMTI0NCBQQ0kgSS9PIFNwYWNlIjsKKwlyZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX0lPOworCisJcmVzWzFdLnN0YXJ0ID0gSU9QMzIxX1BDSV9MT1dFUl9NRU1fUEE7CisJcmVzWzFdLmVuZCAgID0gSU9QMzIxX1BDSV9VUFBFUl9NRU1fUEE7CisJcmVzWzFdLm5hbWUgID0gIklRMzEyNDQgUENJIE1lbW9yeSBTcGFjZSI7CisJcmVzWzFdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisKKwlyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZyZXNbMF0pOworCXJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmcmVzWzFdKTsKKworCXN5cy0+bWVtX29mZnNldCA9IElPUDMyMV9QQ0lfTUVNX09GRlNFVDsKKwlzeXMtPmlvX29mZnNldCAgPSBJT1AzMjFfUENJX0lPX09GRlNFVDsKKworCXN5cy0+cmVzb3VyY2VbMF0gPSAmcmVzWzBdOworCXN5cy0+cmVzb3VyY2VbMV0gPSAmcmVzWzFdOworCXN5cy0+cmVzb3VyY2VbMl0gPSBOVUxMOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGlxMzEyNDRfcHJlaW5pdCh2b2lkKQoreworCWlvcDMyMV9pbml0KCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaHdfcGNpIGlxMzEyNDRfcGNpIF9faW5pdGRhdGEgPSB7CisJLnN3aXp6bGUJPSBwY2lfc3RkX3N3aXp6bGUsCisJLm5yX2NvbnRyb2xsZXJzID0gMSwKKwkuc2V0dXAJCT0gaXEzMTI0NF9zZXR1cCwKKwkuc2NhbgkJPSBpb3AzMjFfc2Nhbl9idXMsCisJLnByZWluaXQJPSBpcTMxMjQ0X3ByZWluaXQsCisJLm1hcF9pcnEJPSBpcTMxMjQ0X21hcF9pcnEKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlxMzEyNDRfcGNpX2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19pcTMxMjQ0KCkpCisJCXBjaV9jb21tb25faW5pdCgmaXEzMTI0NF9wY2kpOworCXJldHVybiAwOworfQorCitzdWJzeXNfaW5pdGNhbGwoaXEzMTI0NF9wY2lfaW5pdCk7CisKKworCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMjEtbW0uYyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMjEtbW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTgwYzdlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMyMS1tbS5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWlvcDN4eC9tbS5jCisgKgorICogTG93IGxldmVsIG1lbW9yeSBpbml0aWFsaXphdGlvbiBmb3IgaXE4MDMyMSBwbGF0Zm9ybQorICoKKyAqIEF1dGhvcjogUm9yeSBCb2x0IDxyb3J5Ym9sdEBwYWNiZWxsLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb3J5IEJvbHQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisKKy8qCisgKiBJUTgwMzIxIHNwZWNpZmljIElPIG1hcHBpbmdzCisgKgorICogV2UgdXNlIFJlZEJvb3QncyBzZXR1cCBmb3IgdGhlIG9uYm9hcmQgZGV2aWNlcy4KKyAqLworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBpcTgwMzIxX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworIC8qIHZpcnR1YWwgICAgIHBoeXNpY2FsICAgICAgbGVuZ3RoICAgICAgICB0eXBlICovCisKKyAvKiBvbi1ib2FyZCBkZXZpY2VzICovCisgeyBJUTgwMzIxX1VBUlQsIElRODAzMjFfVUFSVCwgICAweDAwMTAwMDAwLCAgIE1UX0RFVklDRSB9Cit9OworCit2b2lkIF9faW5pdCBpcTgwMzIxX21hcF9pbyh2b2lkKQoreworCWlvcDMyMV9tYXBfaW8oKTsKKworCWlvdGFibGVfaW5pdChpcTgwMzIxX2lvX2Rlc2MsIEFSUkFZX1NJWkUoaXE4MDMyMV9pb19kZXNjKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzIxLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMyMS1wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWZlYTNkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMyMS1wY2kuYwpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMjEtcGNpLmMKKyAqCisgKiBQQ0kgc3VwcG9ydCBmb3IgdGhlIEludGVsIElRODAzMjEgcmVmZXJlbmNlIGJvYXJkCisgKgorICogQXV0aG9yOiBSb3J5IEJvbHQgPHJvcnlib2x0QHBhY2JlbGwubmV0PgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvcnkgQm9sdAorICogQ29weXJpZ2h0IChDKSAyMDA0IEludGVsIENvcnAuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisvKgorICogVGhlIGZvbGxvd2luZyBtYWNybyBpcyB1c2VkIHRvIGxvb2t1cCBpcnFzIGluIGEgc3RhbmRhcmQgdGFibGUKKyAqIGZvcm1hdCBmb3IgdGhvc2Ugc3lzdGVtcyB0aGF0IGRvIG5vdCBhbHJlYWR5IGhhdmUgUENJCisgKiBpbnRlcnJ1cHRzIHByb3Blcmx5IHJvdXRlZC4gIFdlIGFzc3VtZSAxIDw9IHBpbiA8PSA0CisgKi8KKyNkZWZpbmUgUENJX0lSUV9UQUJMRV9MT09LVVAobWluaWQsbWF4aWQpCVwKKyh7IGludCBfY3RsXyA9IC0xOwkJCQlcCisgICB1bnNpZ25lZCBpbnQgX2lkc2VsID0gaWRzZWwgLSBtaW5pZDsJCVwKKyAgIGlmIChfaWRzZWwgPD0gbWF4aWQpCQkJCVwKKyAgICAgIF9jdGxfID0gcGNpX2lycV90YWJsZVtfaWRzZWxdW3Bpbi0xXTsJXAorICAgX2N0bF87IH0pCisKKyNkZWZpbmUgSU5UQQlJUlFfSVE4MDMyMV9JTlRBCisjZGVmaW5lIElOVEIJSVJRX0lRODAzMjFfSU5UQgorI2RlZmluZSBJTlRDCUlSUV9JUTgwMzIxX0lOVEMKKyNkZWZpbmUgSU5URAlJUlFfSVE4MDMyMV9JTlRECisKKyNkZWZpbmUgSU5URQlJUlFfSVE4MDMyMV9JODI1NDQKKworc3RhdGljIGlubGluZSBpbnQgX19pbml0CitpcTgwMzIxX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggaWRzZWwsIHU4IHBpbikKK3sKKwlzdGF0aWMgaW50IHBjaV9pcnFfdGFibGVbXVs0XSA9IHsKKwkJLyoKKwkJICogUENJIElEU0VML0lOVFBJTi0+SU5UTElORQorCQkgKiBBICAgICAgIEIgICAgICAgQyAgICAgICBECisJCSAqLworCQl7SU5URSwgSU5URSwgSU5URSwgSU5URX0sIC8qIEdpZy1FICovCisJCXstMSwgLTEsIC0xLCAtMX0sIAkgIC8qIFVudXNlZCAqLworCQl7SU5UQywgSU5URCwgSU5UQSwgSU5UQn0sIC8qIFBDSS1YIFNsb3QgKi8KKwkJey0xLCAtMSwgLTEsIC0xfSwKKwl9OworCisJQlVHX09OKHBpbiA8IDEgfHwgcGluID4gNCk7CisKKy8vCXJldHVybiBQQ0lfSVJRX1RBQkxFX0xPT0tVUCg0LCA3KTsKKwlyZXR1cm4gcGNpX2lycV90YWJsZVtpZHNlbCU0XVtwaW4tMV07Cit9CisKK3N0YXRpYyBpbnQgaXE4MDMyMV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCWlmKG5yICE9IDApCisJCXJldHVybiAwOworCisJcmVzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIDIsIEdGUF9LRVJORUwpOworCWlmICghcmVzKQorCQlwYW5pYygiUENJOiB1bmFibGUgdG8gYWxsb2MgcmVzb3VyY2VzIik7CisKKwltZW1zZXQocmVzLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIDIpOworCisJcmVzWzBdLnN0YXJ0ID0gSU9QMzIxX1BDSV9MT1dFUl9JT19WQTsKKwlyZXNbMF0uZW5kICAgPSBJT1AzMjFfUENJX1VQUEVSX0lPX1ZBOworCXJlc1swXS5uYW1lICA9ICJJUTgwMzIxIFBDSSBJL08gU3BhY2UiOworCXJlc1swXS5mbGFncyA9IElPUkVTT1VSQ0VfSU87CisKKwlyZXNbMV0uc3RhcnQgPSBJT1AzMjFfUENJX0xPV0VSX01FTV9QQTsKKwlyZXNbMV0uZW5kICAgPSBJT1AzMjFfUENJX1VQUEVSX01FTV9QQTsKKwlyZXNbMV0ubmFtZSAgPSAiSVE4MDMyMSBQQ0kgTWVtb3J5IFNwYWNlIjsKKwlyZXNbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKworCXJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnJlc1swXSk7CisJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZyZXNbMV0pOworCisJc3lzLT5tZW1fb2Zmc2V0ID0gSU9QMzIxX1BDSV9NRU1fT0ZGU0VUOworCXN5cy0+aW9fb2Zmc2V0ICA9IElPUDMyMV9QQ0lfSU9fT0ZGU0VUOworCisJc3lzLT5yZXNvdXJjZVswXSA9ICZyZXNbMF07CisJc3lzLT5yZXNvdXJjZVsxXSA9ICZyZXNbMV07CisJc3lzLT5yZXNvdXJjZVsyXSA9IE5VTEw7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgaXE4MDMyMV9wcmVpbml0KHZvaWQpCit7CisJaW9wMzIxX2luaXQoKTsKK30KKworc3RhdGljIHN0cnVjdCBod19wY2kgaXE4MDMyMV9wY2kgX19pbml0ZGF0YSA9IHsKKwkuc3dpenpsZQk9IHBjaV9zdGRfc3dpenpsZSwKKwkubnJfY29udHJvbGxlcnMgPSAxLAorCS5zZXR1cAkJPSBpcTgwMzIxX3NldHVwLAorCS5zY2FuCQk9IGlvcDMyMV9zY2FuX2J1cywKKwkucHJlaW5pdAk9IGlxODAzMjFfcHJlaW5pdCwKKwkubWFwX2lycQk9IGlxODAzMjFfbWFwX2lycQorfTsKKworc3RhdGljIGludCBfX2luaXQgaXE4MDMyMV9wY2lfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX2lxODAzMjEoKSkKKwkJcGNpX2NvbW1vbl9pbml0KCZpcTgwMzIxX3BjaSk7CisJcmV0dXJuIDA7Cit9CisKK3N1YnN5c19pbml0Y2FsbChpcTgwMzIxX3BjaV9pbml0KTsKKworCisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMzMS1tbS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMzMS1tbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOGMzMzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzMxLW1tLmMKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtaW9wM3h4L21tLmMKKyAqCisgKiBMb3cgbGV2ZWwgbWVtb3J5IGluaXRpYWxpemF0aW9uIGZvciBpcTgwMzMxIHBsYXRmb3JtCisgKgorICogQXV0aG9yOiBEYXZlIEppYW5nIDxkYXZlLmppYW5nQGludGVsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwMyBJbnRlbCBDb3JwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKworLyoKKyAqIElRODAzMzEgc3BlY2lmaWMgSU8gbWFwcGluZ3MKKyAqCisgKiBXZSB1c2UgUmVkQm9vdCdzIHNldHVwIGZvciB0aGUgb25ib2FyZCBkZXZpY2VzLgorICovCisKK3ZvaWQgX19pbml0IGlxODAzMzFfbWFwX2lvKHZvaWQpCit7CisJaW9wMzMxX21hcF9pbygpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMzMS1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMzEtcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM3YTBlMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMzEtcGNpLmMKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzMxLXBjaS5jCisgKgorICogUENJIHN1cHBvcnQgZm9yIHRoZSBJbnRlbCBJUTgwMzMxIHJlZmVyZW5jZSBib2FyZAorICoKKyAqIEF1dGhvcjogRGF2ZSBKaWFuZyA8ZGF2ZS5qaWFuZ0BpbnRlbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgSW50ZWwgQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG1hY3JvIGlzIHVzZWQgdG8gbG9va3VwIGlycXMgaW4gYSBzdGFuZGFyZCB0YWJsZQorICogZm9ybWF0IGZvciB0aG9zZSBzeXN0ZW1zIHRoYXQgZG8gbm90IGFscmVhZHkgaGF2ZSBQQ0kKKyAqIGludGVycnVwdHMgcHJvcGVybHkgcm91dGVkLiAgV2UgYXNzdW1lIDEgPD0gcGluIDw9IDQKKyAqLworI2RlZmluZSBQQ0lfSVJRX1RBQkxFX0xPT0tVUChtaW5pZCxtYXhpZCkJXAorKHsgaW50IF9jdGxfID0gLTE7CQkJCVwKKyAgIHVuc2lnbmVkIGludCBfaWRzZWwgPSBpZHNlbCAtIG1pbmlkOwkJXAorICAgaWYgKF9pZHNlbCA8PSBtYXhpZCkJCQkJXAorICAgICAgX2N0bF8gPSBwY2lfaXJxX3RhYmxlW19pZHNlbF1bcGluLTFdOwlcCisgICBfY3RsXzsgfSkKKworI2RlZmluZSBJTlRBCUlSUV9JUTgwMzMxX0lOVEEKKyNkZWZpbmUgSU5UQglJUlFfSVE4MDMzMV9JTlRCCisjZGVmaW5lIElOVEMJSVJRX0lRODAzMzFfSU5UQworI2RlZmluZSBJTlRECUlSUV9JUTgwMzMxX0lOVEQKKworLy8jZGVmaW5lIElOVEUJSVJRX0lRODAzMzFfSTgyNTQ0CisKK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdAoraXE4MDMzMV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IGlkc2VsLCB1OCBwaW4pCit7CisJc3RhdGljIGludCBwY2lfaXJxX3RhYmxlW11bNF0gPSB7CisJCS8qCisJCSAqIFBDSSBJRFNFTC9JTlRQSU4tPklOVExJTkUKKwkJICogQSAgICAgICBCICAgICAgIEMgICAgICAgRAorCQkgKi8KKwkJe0lOVEIsIElOVEMsIElOVEQsIElOVEF9LCAvKiBQQ0ktWCBTbG90ICovCisJCXtJTlRDLCBJTlRDLCBJTlRDLCBJTlRDfSwgLyogR2lnRSAgKi8KKwl9OworCisJQlVHX09OKHBpbiA8IDEgfHwgcGluID4gNCk7CisKKwlyZXR1cm4gUENJX0lSUV9UQUJMRV9MT09LVVAoMSwgNyk7Cit9CisKK3N0YXRpYyBpbnQgaXE4MDMzMV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCWlmKG5yICE9IDApCisJCXJldHVybiAwOworCisJcmVzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIDIsIEdGUF9LRVJORUwpOworCWlmICghcmVzKQorCQlwYW5pYygiUENJOiB1bmFibGUgdG8gYWxsb2MgcmVzb3VyY2VzIik7CisKKwltZW1zZXQocmVzLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIDIpOworCisJcmVzWzBdLnN0YXJ0ID0gSU9QMzMxX1BDSV9MT1dFUl9JT19WQTsKKwlyZXNbMF0uZW5kICAgPSBJT1AzMzFfUENJX1VQUEVSX0lPX1ZBOworCXJlc1swXS5uYW1lICA9ICJJUTgwMzMxIFBDSSBJL08gU3BhY2UiOworCXJlc1swXS5mbGFncyA9IElPUkVTT1VSQ0VfSU87CisKKwlyZXNbMV0uc3RhcnQgPSBJT1AzMzFfUENJX0xPV0VSX01FTV9QQTsKKwlyZXNbMV0uZW5kICAgPSBJT1AzMzFfUENJX1VQUEVSX01FTV9QQTsKKwlyZXNbMV0ubmFtZSAgPSAiSVE4MDMzMSBQQ0kgTWVtb3J5IFNwYWNlIjsKKwlyZXNbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKworCXJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnJlc1swXSk7CisJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZyZXNbMV0pOworCisJc3lzLT5tZW1fb2Zmc2V0ID0gSU9QMzMxX1BDSV9NRU1fT0ZGU0VUOworCXN5cy0+aW9fb2Zmc2V0ICA9IElPUDMzMV9QQ0lfSU9fT0ZGU0VUOworCisJc3lzLT5yZXNvdXJjZVswXSA9ICZyZXNbMF07CisJc3lzLT5yZXNvdXJjZVsxXSA9ICZyZXNbMV07CisJc3lzLT5yZXNvdXJjZVsyXSA9IE5VTEw7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgaXE4MDMzMV9wcmVpbml0KHZvaWQpCit7CisJaW9wMzMxX2luaXQoKTsKK30KKworc3RhdGljIHN0cnVjdCBod19wY2kgaXE4MDMzMV9wY2kgX19pbml0ZGF0YSA9IHsKKwkuc3dpenpsZQk9IHBjaV9zdGRfc3dpenpsZSwKKwkubnJfY29udHJvbGxlcnMgPSAxLAorCS5zZXR1cAkJPSBpcTgwMzMxX3NldHVwLAorCS5zY2FuCQk9IGlvcDMzMV9zY2FuX2J1cywKKwkucHJlaW5pdAk9IGlxODAzMzFfcHJlaW5pdCwKKwkubWFwX2lycQk9IGlxODAzMzFfbWFwX2lycQorfTsKKworc3RhdGljIGludCBfX2luaXQgaXE4MDMzMV9wY2lfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX2lxODAzMzEoKSkKKwkJcGNpX2NvbW1vbl9pbml0KCZpcTgwMzMxX3BjaSk7CisJcmV0dXJuIDA7Cit9CisKK3N1YnN5c19pbml0Y2FsbChpcTgwMzMxX3BjaV9pbml0KTsKKworCisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMzMi1tbS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMzMi1tbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NGFmY2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzMyLW1tLmMKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtaW9wM3h4L21tLmMKKyAqCisgKiBMb3cgbGV2ZWwgbWVtb3J5IGluaXRpYWxpemF0aW9uIGZvciBpcTgwMzMyIHBsYXRmb3JtCisgKgorICogQXV0aG9yOiBEYXZlIEppYW5nIDxkYXZlLmppYW5nQGludGVsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBJbnRlbCBDb3JwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKworLyoKKyAqIElRODAzMzIgc3BlY2lmaWMgSU8gbWFwcGluZ3MKKyAqCisgKiBXZSB1c2UgUmVkQm9vdCdzIHNldHVwIGZvciB0aGUgb25ib2FyZCBkZXZpY2VzLgorICovCisKK3ZvaWQgX19pbml0IGlxODAzMzJfbWFwX2lvKHZvaWQpCit7CisJaW9wMzMxX21hcF9pbygpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMzMi1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMzItcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4MDdhYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMzItcGNpLmMKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzMyLXBjaS5jCisgKgorICogUENJIHN1cHBvcnQgZm9yIHRoZSBJbnRlbCBJUTgwMzMyIHJlZmVyZW5jZSBib2FyZAorICoKKyAqIEF1dGhvcjogRGF2ZSBKaWFuZyA8ZGF2ZS5qaWFuZ0BpbnRlbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgSW50ZWwgQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG1hY3JvIGlzIHVzZWQgdG8gbG9va3VwIGlycXMgaW4gYSBzdGFuZGFyZCB0YWJsZQorICogZm9ybWF0IGZvciB0aG9zZSBzeXN0ZW1zIHRoYXQgZG8gbm90IGFscmVhZHkgaGF2ZSBQQ0kKKyAqIGludGVycnVwdHMgcHJvcGVybHkgcm91dGVkLiAgV2UgYXNzdW1lIDEgPD0gcGluIDw9IDQKKyAqLworI2RlZmluZSBQQ0lfSVJRX1RBQkxFX0xPT0tVUChtaW5pZCxtYXhpZCkJXAorKHsgaW50IF9jdGxfID0gLTE7CQkJCVwKKyAgIHVuc2lnbmVkIGludCBfaWRzZWwgPSBpZHNlbCAtIG1pbmlkOwkJXAorICAgaWYgKF9pZHNlbCA8PSBtYXhpZCkJCQkJXAorICAgICAgX2N0bF8gPSBwY2lfaXJxX3RhYmxlW19pZHNlbF1bcGluLTFdOwlcCisgICBfY3RsXzsgfSkKKworI2RlZmluZSBJTlRBCUlSUV9JUTgwMzMyX0lOVEEKKyNkZWZpbmUgSU5UQglJUlFfSVE4MDMzMl9JTlRCCisjZGVmaW5lIElOVEMJSVJRX0lRODAzMzJfSU5UQworI2RlZmluZSBJTlRECUlSUV9JUTgwMzMyX0lOVEQKKworLy8jZGVmaW5lIElOVEUJSVJRX0lRODAzMzJfSTgyNTQ0CisKK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdAoraXE4MDMzMl9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IGlkc2VsLCB1OCBwaW4pCit7CisJc3RhdGljIGludCBwY2lfaXJxX3RhYmxlW11bOF0gPSB7CisJCS8qCisJCSAqIFBDSSBJRFNFTC9JTlRQSU4tPklOVExJTkUKKwkJICogQSAgICAgICBCICAgICAgIEMgICAgICAgRAorCQkgKi8KKwkJey0xLCAgIC0xLCAgIC0xLCAgIC0xfSwKKwkJey0xLCAgIC0xLCAgIC0xLCAgIC0xfSwKKwkJey0xLCAgIC0xLCAgIC0xLCAgIC0xfSwKKwkJe0lOVEEsIElOVEIsIElOVEMsIElOVER9LCAvKiBQQ0ktWCBTbG90ICovCisJCXstMSwgICAtMSwgICAtMSwgICAtMX0sCisJCXtJTlRDLCBJTlRDLCBJTlRDLCBJTlRDfSwgLyogR2lnRSAgKi8KKwkJey0xLCAgIC0xLCAgIC0xLCAgIC0xfSwKKwkJey0xLCAgIC0xLCAgIC0xLCAgIC0xfSwKKwl9OworCisJQlVHX09OKHBpbiA8IDEgfHwgcGluID4gNCk7CisKKwlyZXR1cm4gUENJX0lSUV9UQUJMRV9MT09LVVAoMSwgNyk7Cit9CisKK3N0YXRpYyBpbnQgaXE4MDMzMl9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCWlmKG5yICE9IDApCisJCXJldHVybiAwOworCisJcmVzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIDIsIEdGUF9LRVJORUwpOworCWlmICghcmVzKQorCQlwYW5pYygiUENJOiB1bmFibGUgdG8gYWxsb2MgcmVzb3VyY2VzIik7CisKKwltZW1zZXQocmVzLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIDIpOworCisJcmVzWzBdLnN0YXJ0ID0gSU9QMzMxX1BDSV9MT1dFUl9JT19WQTsKKwlyZXNbMF0uZW5kICAgPSBJT1AzMzFfUENJX1VQUEVSX0lPX1ZBOworCXJlc1swXS5uYW1lICA9ICJJUTgwMzMyIFBDSSBJL08gU3BhY2UiOworCXJlc1swXS5mbGFncyA9IElPUkVTT1VSQ0VfSU87CisKKwlyZXNbMV0uc3RhcnQgPSBJT1AzMzFfUENJX0xPV0VSX01FTV9QQTsKKwlyZXNbMV0uZW5kICAgPSBJT1AzMzFfUENJX1VQUEVSX01FTV9QQTsKKwlyZXNbMV0ubmFtZSAgPSAiSVE4MDMzMiBQQ0kgTWVtb3J5IFNwYWNlIjsKKwlyZXNbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKworCXJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnJlc1swXSk7CisJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZyZXNbMV0pOworCisJc3lzLT5tZW1fb2Zmc2V0ID0gSU9QMzMxX1BDSV9NRU1fT0ZGU0VUOworCXN5cy0+aW9fb2Zmc2V0ICA9IElPUDMzMV9QQ0lfSU9fT0ZGU0VUOworCisJc3lzLT5yZXNvdXJjZVswXSA9ICZyZXNbMF07CisJc3lzLT5yZXNvdXJjZVsxXSA9ICZyZXNbMV07CisJc3lzLT5yZXNvdXJjZVsyXSA9IE5VTEw7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgaXE4MDMzMl9wcmVpbml0KHZvaWQpCit7CisJaW9wMzMxX2luaXQoKTsKK30KKworc3RhdGljIHN0cnVjdCBod19wY2kgaXE4MDMzMl9wY2kgX19pbml0ZGF0YSA9IHsKKwkuc3dpenpsZQk9IHBjaV9zdGRfc3dpenpsZSwKKwkubnJfY29udHJvbGxlcnMgPSAxLAorCS5zZXR1cAkJPSBpcTgwMzMyX3NldHVwLAorCS5zY2FuCQk9IGlvcDMzMV9zY2FuX2J1cywKKwkucHJlaW5pdAk9IGlxODAzMzJfcHJlaW5pdCwKKwkubWFwX2lycQk9IGlxODAzMzJfbWFwX2lycQorfTsKKworc3RhdGljIGludCBfX2luaXQgaXE4MDMzMl9wY2lfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX2lxODAzMzIoKSkKKwkJcGNpX2NvbW1vbl9pbml0KCZpcTgwMzMyX3BjaSk7CisJcmV0dXJuIDA7Cit9CisKK3N1YnN5c19pbml0Y2FsbChpcTgwMzMyX3BjaV9pbml0KTsKKworCisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzYxZTA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL0tjb25maWcKQEAgLTAsMCArMSw1OSBAQAorCitpZiBBUkNIX0lYUDIwMDAKKworY29uZmlnIEFSQ0hfU1VQUE9SVFNfQklHX0VORElBTgorCWJvb2wKKwlkZWZhdWx0IHkKKworbWVudSAiSW50ZWwgSVhQMjQwMC8yODAwIEltcGxlbWVudGF0aW9uIE9wdGlvbnMiCisKK2NvbW1lbnQgIklYUDI0MDAvMjgwMCBQbGF0Zm9ybXMiCisKK2NvbmZpZyBBUkNIX0VOUDI2MTEKKwlib29sICJTdXBwb3J0IFJhZGlzeXMgRU5QLTI2MTEiCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlIFJhZGlzeXMKKwkgIEVOUDI2MTEgUENJIG5ldHdvcmsgcHJvY2Vzc2luZyBjYXJkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgorCSAgdGhpcyBjYXJkLCBzZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9hcm0vRU5QMjYxMT4uCisKK2NvbmZpZyBBUkNIX0lYRFAyNDAwCisJYm9vbCAiU3VwcG9ydCBJbnRlbCBJWERQMjQwMCIKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUgSW50ZWwKKwkgIElYRFAyNDAwIHJlZmVyZW5jZSBwbGF0Zm9ybS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24KKwkgIHRoaXMgcGxhdGZvcm0sIHNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2FybS9JWFAyMDAwPi4KKworY29uZmlnIEFSQ0hfSVhEUDI4MDAKKwlib29sICJTdXBwb3J0IEludGVsIElYRFAyODAwIgorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZSBJbnRlbAorCSAgSVhEUDI4MDAgcmVmZXJlbmNlIHBsYXRmb3JtLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgorCSAgdGhpcyBwbGF0Zm9ybSwgc2VlIDxmaWxlOkRvY3VtZW50YXRpb24vYXJtL0lYUDIwMDA+LgorCitjb25maWcgQVJDSF9JWERQMlgwMAorCWJvb2wKKwlkZXBlbmRzIG9uIEFSQ0hfSVhEUDI0MDAgfHwgQVJDSF9JWERQMjgwMAorCWRlZmF1bHQgeQkKKworY29uZmlnIEFSQ0hfSVhEUDI0MDEKKwlib29sICJTdXBwb3J0IEludGVsIElYRFAyNDAxIgorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZSBJbnRlbAorCSAgSVhEUDI0MDEgcmVmZXJlbmNlIHBsYXRmb3JtLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgorCSAgdGhpcyBwbGF0Zm9ybSwgc2VlIDxmaWxlOkRvY3VtZW50YXRpb24vYXJtL0lYUDIwMDA+LgorCitjb25maWcgQVJDSF9JWERQMjgwMQorCWJvb2wgIlN1cHBvcnQgSW50ZWwgSVhEUDI4MDEiCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlIEludGVsCisJICBJWERQMjgwMSByZWZlcmVuY2UgcGxhdGZvcm0uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uCisJICB0aGlzIHBsYXRmb3JtLCBzZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9hcm0vSVhQMjAwMD4uCisKK2NvbmZpZyBBUkNIX0lYRFAyWDAxCisJYm9vbAorCWRlcGVuZHMgb24gQVJDSF9JWERQMjQwMSB8fCBBUkNIX0lYRFAyODAxCisJZGVmYXVsdCB5CQorCitlbmRtZW51CisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU2MTM5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9NYWtlZmlsZQpAQCAtMCwwICsxLDE0IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgorIworb2JqLXkJCQk6PSBjb3JlLm8gcGNpLm8KK29iai1tCQkJOj0KK29iai1uCQkJOj0KK29iai0JCQk6PQorCitvYmotJChDT05GSUdfQVJDSF9FTlAyNjExKQkrPSBlbnAyNjExLm8KK29iai0kKENPTkZJR19BUkNIX0lYRFAyNDAwKQkrPSBpeGRwMjQwMC5vCitvYmotJChDT05GSUdfQVJDSF9JWERQMjgwMCkJKz0gaXhkcDI4MDAubworb2JqLSQoQ09ORklHX0FSQ0hfSVhEUDJYMDApCSs9IGl4ZHAyeDAwLm8KK29iai0kKENPTkZJR19BUkNIX0lYRFAyWDAxKQkrPSBpeGRwMngwMS5vCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg0YzU4MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsMyBAQAorICAgenJlbGFkZHIteQk6PSAweDAwMDA4MDAwCitwYXJhbXNfcGh5cy15CTo9IDB4MDAwMDAxMDAKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYzYzNkNWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvY29yZS5jCkBAIC0wLDAgKzEsMzkwIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1peHAyMDAwL2NvbW1vbi5jCisgKgorICogQ29tbW9uIHJvdXRpbmVzIHVzZWQgYnkgYWxsIElYUDI0MDAvMjgwMCBiYXNlZCBwbGF0Zm9ybXMuCisgKgorICogQXV0aG9yOiBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PgorICoKKyAqIENvcHlyaWdodCAyMDA0IChDKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIAorICoKKyAqIEJhc2VkIG9uIHdvcmsgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgSW50ZWwgQ29ycG9yYXRpb24KKyAqIAorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgCisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGl4cDIwMDBfc2xvd3BvcnRfbG9jayk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBpeHAyMDAwX3Nsb3dwb3J0X2lycV9mbGFnczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNsb3dwb3J0IGFjY2VzcyByb3V0aW5lcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGl4cDIwMDBfYWNxdWlyZV9zbG93cG9ydChzdHJ1Y3Qgc2xvd3BvcnRfY2ZnICpuZXdfY2ZnLCBzdHJ1Y3Qgc2xvd3BvcnRfY2ZnICpvbGRfY2ZnKQoreworCisJc3Bpbl9sb2NrX2lycXNhdmUoJml4cDIwMDBfc2xvd3BvcnRfbG9jaywgaXhwMjAwMF9zbG93cG9ydF9pcnFfZmxhZ3MpOworCisJb2xkX2NmZy0+Q0NSID0gKklYUDIwMDBfU0xPV1BPUlRfQ0NSOworCW9sZF9jZmctPldUQyA9ICpJWFAyMDAwX1NMT1dQT1JUX1dUQzI7CisJb2xkX2NmZy0+UlRDID0gKklYUDIwMDBfU0xPV1BPUlRfUlRDMjsKKwlvbGRfY2ZnLT5QQ1IgPSAqSVhQMjAwMF9TTE9XUE9SVF9QQ1I7CisJb2xkX2NmZy0+QURDID0gKklYUDIwMDBfU0xPV1BPUlRfQURDOworCisJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9TTE9XUE9SVF9DQ1IsIG5ld19jZmctPkNDUik7CisJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9TTE9XUE9SVF9XVEMyLCBuZXdfY2ZnLT5XVEMpOworCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfU0xPV1BPUlRfUlRDMiwgbmV3X2NmZy0+UlRDKTsKKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX1NMT1dQT1JUX1BDUiwgbmV3X2NmZy0+UENSKTsKKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX1NMT1dQT1JUX0FEQywgbmV3X2NmZy0+QURDKTsKK30KKwordm9pZCBpeHAyMDAwX3JlbGVhc2Vfc2xvd3BvcnQoc3RydWN0IHNsb3dwb3J0X2NmZyAqb2xkX2NmZykKK3sKKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX1NMT1dQT1JUX0NDUiwgb2xkX2NmZy0+Q0NSKTsKKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX1NMT1dQT1JUX1dUQzIsIG9sZF9jZmctPldUQyk7CisJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9TTE9XUE9SVF9SVEMyLCBvbGRfY2ZnLT5SVEMpOworCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfU0xPV1BPUlRfUENSLCBvbGRfY2ZnLT5QQ1IpOworCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfU0xPV1BPUlRfQURDLCBvbGRfY2ZnLT5BREMpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXhwMjAwMF9zbG93cG9ydF9sb2NrLCAKKwkJCQkJaXhwMjAwMF9zbG93cG9ydF9pcnFfZmxhZ3MpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ2hpcCBzcGVjaWZpYyBtYXBwaW5ncyBzaGFyZWQgYnkgYWxsIElYUDIwMDAgc3lzdGVtcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGl4cDIwMDBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IElYUDIwMDBfQ0FQX1ZJUlRfQkFTRSwKKwkJLnBoeXNpY2FsCT0gSVhQMjAwMF9DQVBfUEhZU19CQVNFLAorCQkubGVuZ3RoCQk9IElYUDIwMDBfQ0FQX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sIHsKKwkJLnZpcnR1YWwJPSBJWFAyMDAwX0lOVENUTF9WSVJUX0JBU0UsCisJCS5waHlzaWNhbAk9IElYUDIwMDBfSU5UQ1RMX1BIWVNfQkFTRSwKKwkJLmxlbmd0aAkJPSBJWFAyMDAwX0lOVENUTF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LCB7CisJCS52aXJ0dWFsCT0gSVhQMjAwMF9QQ0lfQ1JFR19WSVJUX0JBU0UsCisJCS5waHlzaWNhbAk9IElYUDIwMDBfUENJX0NSRUdfUEhZU19CQVNFLAorCQkubGVuZ3RoCQk9IElYUDIwMDBfUENJX0NSRUdfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwgeworCQkudmlydHVhbAk9IElYUDIwMDBfUENJX0NTUl9WSVJUX0JBU0UsCisJCS5waHlzaWNhbAk9IElYUDIwMDBfUENJX0NTUl9QSFlTX0JBU0UsCisJCS5sZW5ndGgJCT0gSVhQMjAwMF9QQ0lfQ1NSX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sIHsKKwkJLnZpcnR1YWwJPSBJWFAyMDAwX1BDSV9JT19WSVJUX0JBU0UsCisJCS5waHlzaWNhbAk9IElYUDIwMDBfUENJX0lPX1BIWVNfQkFTRSwKKwkJLmxlbmd0aAkJPSBJWFAyMDAwX1BDSV9JT19TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LCB7CisJCS52aXJ0dWFsCT0gSVhQMjAwMF9QQ0lfQ0ZHMF9WSVJUX0JBU0UsCisJCS5waHlzaWNhbAk9IElYUDIwMDBfUENJX0NGRzBfUEhZU19CQVNFLAorCQkubGVuZ3RoCQk9IElYUDIwMDBfUENJX0NGRzBfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwgeworCQkudmlydHVhbAk9IElYUDIwMDBfUENJX0NGRzFfVklSVF9CQVNFLAorCQkucGh5c2ljYWwJPSBJWFAyMDAwX1BDSV9DRkcxX1BIWVNfQkFTRSwKKwkJLmxlbmd0aAkJPSBJWFAyMDAwX1BDSV9DRkcxX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IGl4cDIwMDBfc2VyaWFsX3BvcnQgPSB7CisJLm1lbWJhc2UJPSAoY2hhciAqKShJWFAyMDAwX1VBUlRfVklSVF9CQVNFICsgMyksCisJLm1hcGJhc2UJPSBJWFAyMDAwX1VBUlRfUEhZU19CQVNFICsgMywKKwkuaXJxCQk9IElSUV9JWFAyMDAwX1VBUlQsCisJLmZsYWdzCQk9IFVQRl9TS0lQX1RFU1QsCisJLmlvdHlwZQkJPSBVUElPX01FTSwKKwkucmVnc2hpZnQJPSAyLAorCS51YXJ0Y2xrCT0gNTAwMDAwMDAsCisJLmxpbmUJCT0gMCwKKwkudHlwZQkJPSBQT1JUX1hTQ0FMRSwKKwkuZmlmb3NpemUJPSAxNgorfTsKKwordm9pZCBfX2luaXQgaXhwMjAwMF9tYXBfaW8odm9pZCkKK3sKKwlleHRlcm4gdW5zaWduZWQgaW50IHByb2Nlc3Nvcl9pZDsKKworCS8qCisJICogT24gSVhQMjQwMCBDUFVzIHdlIG5lZWQgdG8gdXNlIE1UX0lYUDIwMDBfREVWSUNFIGZvcgorCSAqIHR3ZWFraW5nIHRoZSBQTURzIHNvIFhDQj0xMDEuIE9uIElYUDI4MDBzIHdlIHVzZSB0aGUgbm9ybWFsCisJICogUE1EIGZsYWdzLgorCSAqLworCWlmICgocHJvY2Vzc29yX2lkICYgMHhmZmZmZmZmMCkgPT0gMHg2OTA1NDE5MCkgeworCQlpbnQgaTsKKworCQlwcmludGsoS0VSTl9JTkZPICJFbmFibGluZyBJWFAyNDAwIGVycmF0dW0gIzY2IHdvcmthcm91bmRcbiIpOworCisJCWZvcihpPTA7aTxBUlJBWV9TSVpFKGl4cDIwMDBfaW9fZGVzYyk7aSsrKQorCQkJaXhwMjAwMF9pb19kZXNjW2ldLnR5cGUgPSBNVF9JWFAyMDAwX0RFVklDRTsKKwl9CisKKwlpb3RhYmxlX2luaXQoaXhwMjAwMF9pb19kZXNjLCBBUlJBWV9TSVpFKGl4cDIwMDBfaW9fZGVzYykpOworCWVhcmx5X3NlcmlhbF9zZXR1cCgmaXhwMjAwMF9zZXJpYWxfcG9ydCk7CisKKwkvKiBTZXQgc2xvd3BvcnQgdG8gOC1iaXQgbW9kZS4gICovCisJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9TTE9XUE9SVF9GUk0sIDEpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGltZXItdGljayBmdW5jdGlvbnMgZm9yIElYUDIwMDAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHVuc2lnbmVkIHRpY2tzX3Blcl9qaWZmeTsKK3N0YXRpYyB1bnNpZ25lZCB0aWNrc19wZXJfdXNlYzsKK3N0YXRpYyB1bnNpZ25lZCBuZXh0X2ppZmZ5X3RpbWU7CisKK3Vuc2lnbmVkIGxvbmcgaXhwMjAwMF9nZXR0aW1lb2Zmc2V0ICh2b2lkKQoreworIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKKworCW9mZnNldCA9IG5leHRfamlmZnlfdGltZSAtICpJWFAyMDAwX1Q0X0NTUjsKKworCXJldHVybiBvZmZzZXQgLyB0aWNrc19wZXJfdXNlYzsKK30KKworc3RhdGljIGludCBpeHAyMDAwX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOworCisJLyogY2xlYXIgdGltZXIgMSAqLworCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfVDFfQ0xSLCAxKTsKKwkKKwl3aGlsZSAoKG5leHRfamlmZnlfdGltZSAtICpJWFAyMDAwX1Q0X0NTUikgPiB0aWNrc19wZXJfamlmZnkpIHsKKwkJdGltZXJfdGljayhyZWdzKTsKKwkJbmV4dF9qaWZmeV90aW1lIC09IHRpY2tzX3Blcl9qaWZmeTsKKwl9CisKKwl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpeHAyMDAwX3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAiSVhQMjAwMCBUaW1lciBUaWNrIiwKKwkuZmxhZ3MJCT0gU0FfSU5URVJSVVBULAorCS5oYW5kbGVyCT0gaXhwMjAwMF90aW1lcl9pbnRlcnJ1cHQKK307CisKK3ZvaWQgX19pbml0IGl4cDIwMDBfaW5pdF90aW1lKHVuc2lnbmVkIGxvbmcgdGlja19yYXRlKQoreworCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfVDFfQ0xSLCAwKTsKKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX1Q0X0NMUiwgMCk7CisKKwl0aWNrc19wZXJfamlmZnkgPSAodGlja19yYXRlICsgSFovMikgLyBIWjsKKwl0aWNrc19wZXJfdXNlYyA9IHRpY2tfcmF0ZSAvIDEwMDAwMDA7CisKKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX1QxX0NMRCwgdGlja3NfcGVyX2ppZmZ5IC0gMSk7CisJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9UMV9DVEwsICgxIDw8IDcpKTsKKworCS8qCisJICogV2UgdXNlIFQ0IGFzIGEgbW9ub3RvbmljIGNvdW50ZXIgdG8gdHJhY2sgbWlzc2VkIGppZmZpZXMKKwkgKi8KKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX1Q0X0NMRCwgLTEpOworCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfVDRfQ1RMLCAoMSA8PCA3KSk7CisgCW5leHRfamlmZnlfdGltZSA9IDB4ZmZmZmZmZmY7CisKKwkvKiByZWdpc3RlciBmb3IgaW50ZXJydXB0ICovCisJc2V0dXBfaXJxKElSUV9JWFAyMDAwX1RJTUVSMSwgJml4cDIwMDBfdGltZXJfaXJxKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdQSU8gaGVscGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBHUElPX0lSUV9yaXNpbmdfZWRnZTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIEdQSU9fSVJRX2ZhbGxpbmdfZWRnZTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIEdQSU9fSVJRX2xldmVsX2xvdzsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIEdQSU9fSVJRX2xldmVsX2hpZ2g7CisKK3ZvaWQgZ3Bpb19saW5lX2NvbmZpZyhpbnQgbGluZSwgaW50IHN0eWxlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlpZihzdHlsZSA9PSBHUElPX09VVCkgeworCQkvKiBpZiBpdCdzIGFuIG91dHB1dCwgaXQgYWluJ3QgYW4gaW50ZXJydXB0IGFueW1vcmUgKi8KKwkJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9HUElPX1BEU1IsICgxIDw8IGxpbmUpKTsKKwkJR1BJT19JUlFfZmFsbGluZ19lZGdlICY9IH4oMSA8PCBsaW5lKTsKKwkJR1BJT19JUlFfcmlzaW5nX2VkZ2UgJj0gfigxIDw8IGxpbmUpOworCQlHUElPX0lSUV9sZXZlbF9sb3cgJj0gfigxIDw8IGxpbmUpOworCQlHUElPX0lSUV9sZXZlbF9oaWdoICY9IH4oMSA8PCBsaW5lKTsKKwkJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9HUElPX0ZFRFIsIEdQSU9fSVJRX2ZhbGxpbmdfZWRnZSk7CisJCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfR1BJT19SRURSLCBHUElPX0lSUV9yaXNpbmdfZWRnZSk7CisJCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfR1BJT19MU0hSLCBHUElPX0lSUV9sZXZlbF9oaWdoKTsKKwkJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9HUElPX0xTTFIsIEdQSU9fSVJRX2xldmVsX2xvdyk7CisJCWlycV9kZXNjW2xpbmUrSVJRX0lYUDIwMDBfR1BJTzBdLnZhbGlkID0gMDsKKwl9IGVsc2UgaWYoc3R5bGUgPT0gR1BJT19JTikgeworCQlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX0dQSU9fUERDUiwgKDEgPDwgbGluZSkpOworCX0KKwkJCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSVJRIGhhbmRsaW5nIElYUDIwMDAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgaXhwMjAwMF9HUElPX2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFkZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBzdGF0dXMgPSAqSVhQMjAwMF9HUElPX0lOU1Q7CisJCSAgIAorCWZvciAoaSA9IDA7IGkgPD0gNzsgaSsrKSB7CisJCWlmIChzdGF0dXMgJiAoMTw8aSkpIHsKKwkJCWRlc2MgPSBpcnFfZGVzYyArIGkgKyBJUlFfSVhQMjAwMF9HUElPMDsKKwkJCWRlc2MtPmhhbmRsZShpICsgSVJRX0lYUDIwMDBfR1BJTzAsIGRlc2MsIHJlZ3MpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBpeHAyMDAwX0dQSU9faXJxX21hc2tfYWNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9HUElPX0lOQ1IsICgxIDw8IChpcnEgLSBJUlFfSVhQMjAwMF9HUElPMCkpKTsKKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX0dQSU9fSU5TVCwgKDEgPDwgKGlycSAtIElSUV9JWFAyMDAwX0dQSU8wKSkpOworfQorCitzdGF0aWMgdm9pZCBpeHAyMDAwX0dQSU9faXJxX21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX0dQSU9fSU5DUiwgKDEgPDwgKGlycSAtIElSUV9JWFAyMDAwX0dQSU8wKSkpOworfQorCitzdGF0aWMgdm9pZCBpeHAyMDAwX0dQSU9faXJxX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfR1BJT19JTlNSLCAoMSA8PCAoaXJxIC0gSVJRX0lYUDIwMDBfR1BJTzApKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBpeHAyMDAwX0dQSU9faXJxX2NoaXAgPSB7CisJLmFjawk9IGl4cDIwMDBfR1BJT19pcnFfbWFza19hY2ssCisJLm1hc2sJPSBpeHAyMDAwX0dQSU9faXJxX21hc2ssCisJLnVubWFzawk9IGl4cDIwMDBfR1BJT19pcnFfdW5tYXNrCit9OworCitzdGF0aWMgdm9pZCBpeHAyMDAwX3BjaV9pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgdGVtcCA9ICpJWFAyMDAwX1BDSV9YU0NBTEVfSU5UX0VOQUJMRTsKKwlpZiAoaXJxID09IElSUV9JWFAyMDAwX1BDSUEpCisJCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfUENJX1hTQ0FMRV9JTlRfRU5BQkxFLCAodGVtcCAmIH4oMSA8PCAyNikpKTsKKwllbHNlIGlmIChpcnEgPT0gSVJRX0lYUDIwMDBfUENJQikKKwkJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9QQ0lfWFNDQUxFX0lOVF9FTkFCTEUsICh0ZW1wICYgfigxIDw8IDI3KSkpOworfQorCitzdGF0aWMgdm9pZCBpeHAyMDAwX3BjaV9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgbG9uZyB0ZW1wID0gKklYUDIwMDBfUENJX1hTQ0FMRV9JTlRfRU5BQkxFOworCWlmIChpcnEgPT0gSVJRX0lYUDIwMDBfUENJQSkKKwkJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9QQ0lfWFNDQUxFX0lOVF9FTkFCTEUsICh0ZW1wIHwgKDEgPDwgMjYpKSk7CisJZWxzZSBpZiAoaXJxID09IElSUV9JWFAyMDAwX1BDSUIpCisJCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfUENJX1hTQ0FMRV9JTlRfRU5BQkxFLCAodGVtcCB8ICgxIDw8IDI3KSkpOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgaXhwMjAwMF9wY2lfaXJxX2NoaXAgPSB7CisJLmFjawk9IGl4cDIwMDBfcGNpX2lycV9tYXNrLAorCS5tYXNrCT0gaXhwMjAwMF9wY2lfaXJxX21hc2ssCisJLnVubWFzawk9IGl4cDIwMDBfcGNpX2lycV91bm1hc2sKK307CisKK3N0YXRpYyB2b2lkIGl4cDIwMDBfaXJxX21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX0lSUV9FTkFCTEVfQ0xSLCAoMSA8PCBpcnEpKTsKK30KKworc3RhdGljIHZvaWQgaXhwMjAwMF9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9JUlFfRU5BQkxFX1NFVCwgICgxIDw8IGlycSkpOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgaXhwMjAwMF9pcnFfY2hpcCA9IHsKKwkuYWNrCT0gaXhwMjAwMF9pcnFfbWFzaywKKwkubWFzawk9IGl4cDIwMDBfaXJxX21hc2ssCisJLnVubWFzawk9IGl4cDIwMDBfaXJxX3VubWFzaworfTsKKwordm9pZCBfX2luaXQgaXhwMjAwMF9pbml0X2lycSh2b2lkKQoreworCWludCBpcnE7CisKKwkvKgorCSAqIE1hc2sgYWxsIHNvdXJjZXMKKwkgKi8KKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX0lSUV9FTkFCTEVfQ0xSLCAweGZmZmZmZmZmKTsKKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX0ZJUV9FTkFCTEVfQ0xSLCAweGZmZmZmZmZmKTsKKworCS8qIGNsZWFyIGFsbCBHUElPIGVkZ2UvbGV2ZWwgZGV0ZWN0cyAqLworCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfR1BJT19SRURSLCAwKTsKKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX0dQSU9fRkVEUiwgMCk7CisJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9HUElPX0xTSFIsIDApOworCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfR1BJT19MU0xSLCAwKTsKKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX0dQSU9fSU5DUiwgLTEpOworCisJLyogY2xlYXIgUENJIGludGVycnVwdCBzb3VyY2VzICovCisJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9QQ0lfWFNDQUxFX0lOVF9FTkFCTEUsIDApOworCisJLyoKKwkgKiBDZXJ0YWluIGJpdHMgaW4gdGhlIElSUSBzdGF0dXMgcmVnaXN0ZXIgb2YgdGhlIAorCSAqIElYUDIwMDAgYXJlIHJlc2VydmVkLiBJbnN0ZWFkIG9mIHRyeWluZyB0byBtYXAKKwkgKiB0aGluZ3Mgbm9uIDE6MSBmcm9tIGJpdCBwb3NpdGlvbiB0byBJUlEgbnVtYmVyLAorCSAqIHdlIG1hcmsgdGhlIHJlc2VydmVkIElSUXMgYXMgaW52YWxpZC4gVGhpcyBtYWtlcworCSAqIG91ciBtYXNrL3VubWFzayBjb2RlIG11Y2ggc2ltcGxlci4KKwkgKi8KKwlmb3IgKGlycSA9IElSUV9JWFAyMDAwX1NPRlRfSU5UOyBpcnEgPD0gSVJRX0lYUDIwMDBfVEhEQjM7IGlycSsrKSB7CisJCWlmKCgxIDw8IGlycSkgJiBJWFAyMDAwX1ZBTElEX0lSUV9NQVNLKSB7CisJCQlzZXRfaXJxX2NoaXAoaXJxLCAmaXhwMjAwMF9pcnFfY2hpcCk7CisJCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBkb19sZXZlbF9JUlEpOworCQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQpOworCQl9IGVsc2Ugc2V0X2lycV9mbGFncyhpcnEsIDApOworCX0KKwkKKwkvKgorCSAqIEdQSU8gSVJRcyBhcmUgaW52YWxpZCB1bnRpbCBzb21lb25lIHNldHMgdGhlIGludGVycnVwdCBtb2RlCisJICogYnkgY2FsbGluZyBncGlvX2xpbmVfc2V0KCk7CisJICovCisJZm9yIChpcnEgPSBJUlFfSVhQMjAwMF9HUElPMDsgaXJxIDw9IElSUV9JWFAyMDAwX0dQSU83OyBpcnErKykgeworCQlzZXRfaXJxX2NoaXAoaXJxLCAmaXhwMjAwMF9HUElPX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgZG9fbGV2ZWxfSVJRKTsKKwkJc2V0X2lycV9mbGFncyhpcnEsIDApOworCX0KKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfSVhQMjAwMF9HUElPLCBpeHAyMDAwX0dQSU9faXJxX2hhbmRsZXIpOworCisJLyoKKwkgKiBFbmFibGUgUENJIGlycXMuICBUaGUgYWN0dWFsIFBDSVtBQl0gZGVjb2RpbmcgaXMgZG9uZSBpbgorCSAqIGVudHJ5LW1hY3JvLlMsIHNvIHdlIGRvbid0IG5lZWQgYSBjaGFpbmVkIGhhbmRsZXIgZm9yIHRoZQorCSAqIFBDSSBpbnRlcnJ1cHQgc291cmNlLgorCSAqLworCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfSVJRX0VOQUJMRV9TRVQsICgxIDw8IElSUV9JWFAyMDAwX1BDSSkpOworCWZvciAoaXJxID0gSVJRX0lYUDIwMDBfUENJQTsgaXJxIDw9IElSUV9JWFAyMDAwX1BDSUI7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZpeHAyMDAwX3BjaV9pcnFfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2xldmVsX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9lbnAyNjExLmMgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvZW5wMjYxMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YjM4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvZW5wMjYxMS5jCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1peHAyMDAwL2VucDI2MTEuYworICoKKyAqIFJhZGlzeXMgRU5QLTI2MTEgc3VwcG9ydC4KKyAqCisgKiBDcmVhdGVkIDIwMDQgYnkgTGVubmVydCBCdXl0ZW5oZWsgZnJvbSB0aGUgaXhkcDJ4MDEgY29kZS4gIFRoZQorICogb3JpZ2luYWwgdmVyc2lvbiBjYXJyaWVzIHRoZSBmb2xsb3dpbmcgbm90aWNlczoKKyAqCisgKiBPcmlnaW5hbCBBdXRob3I6IEFuZHJ6ZWogTWlhbGtvd3NraSA8YW5kcnplai5taWFsa293c2tpQGludGVsLmNvbT4KKyAqIE1haW50YWluZXI6IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVOUC0yNjExIHRpbWVyIHRpY2sgY29uZmlndXJhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBfX2luaXQgZW5wMjYxMV90aW1lcl9pbml0KHZvaWQpCit7CisJaXhwMjAwMF9pbml0X3RpbWUoNTAgKiAxMDAwICogMTAwMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIGVucDI2MTFfdGltZXIgPSB7CisJLmluaXQJCT0gZW5wMjYxMV90aW1lcl9pbml0LAorCS5vZmZzZXQJCT0gaXhwMjAwMF9nZXR0aW1lb2Zmc2V0LAorfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRU5QLTI2MTEgUENJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZW5wMjYxMV9wY2lfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCit7CisJc3lzLT5tZW1fb2Zmc2V0ID0gMHhlMDAwMDAwMDsKKwlpeHAyMDAwX3BjaV9zZXR1cChuciwgc3lzKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGVucDI2MTFfcGNpX3ByZWluaXQodm9pZCkKK3sKKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX1BDSV9BRERSX0VYVCwgMHgwMDEwMDAwMCk7CisJaXhwMjAwMF9wY2lfcHJlaW5pdCgpOworfQorCitzdGF0aWMgaW5saW5lIGludCBlbnAyNjExX3BjaV92YWxpZF9kZXZpY2Uoc3RydWN0IHBjaV9idXMgKmJ1cywKKwkJCQkJCXVuc2lnbmVkIGludCBkZXZmbikKK3sKKwkvKiBUaGUgODI1NTkgZXRoZXJuZXQgY29udHJvbGxlciBhcHBlYXJzIGF0IGJvdGggUENJOjE6MDowIGFuZAorCSAqIFBDSToxOjI6MCwgc28gbGV0J3MgcHJldGVuZCB0aGUgc2Vjb25kIG9uZSBpc24ndCB0aGVyZS4KKwkgKi8KKwlpZiAoYnVzLT5udW1iZXIgPT0gMHgwMSAmJiBkZXZmbiA9PSAweDEwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGVucDI2MTFfcGNpX3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCQkJaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWx1ZSkKK3sKKwlpZiAoZW5wMjYxMV9wY2lfdmFsaWRfZGV2aWNlKGJ1cywgZGV2Zm4pKQorCQlyZXR1cm4gaXhwMjAwMF9wY2lfcmVhZF9jb25maWcoYnVzLCBkZXZmbiwgd2hlcmUsIHNpemUsIHZhbHVlKTsKKworCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Cit9CisKK3N0YXRpYyBpbnQgZW5wMjYxMV9wY2lfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCQkJaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbHVlKQoreworCWlmIChlbnAyNjExX3BjaV92YWxpZF9kZXZpY2UoYnVzLCBkZXZmbikpCisJCXJldHVybiBpeHAyMDAwX3BjaV93cml0ZV9jb25maWcoYnVzLCBkZXZmbiwgd2hlcmUsIHNpemUsIHZhbHVlKTsKKworCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX29wcyBlbnAyNjExX3BjaV9vcHMgPSB7CisJLnJlYWQgICA9IGVucDI2MTFfcGNpX3JlYWRfY29uZmlnLAorCS53cml0ZSAgPSBlbnAyNjExX3BjaV93cml0ZV9jb25maWcKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2J1cyAqIF9faW5pdCBlbnAyNjExX3BjaV9zY2FuX2J1cyhpbnQgbnIsCisJCQkJCQlzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCit7CisJcmV0dXJuIHBjaV9zY2FuX2J1cyhzeXMtPmJ1c25yLCAmZW5wMjYxMV9wY2lfb3BzLCBzeXMpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBlbnAyNjExX3BjaV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlpbnQgaXJxOworCisJaWYgKGRldi0+YnVzLT5udW1iZXIgPT0gMCAmJiBQQ0lfU0xPVChkZXYtPmRldmZuKSA9PSAwKSB7CisJCS8qIElYUDI0MDAuICovCisJCWlycSA9IElSUV9JWFAyMDAwX1BDSUE7CisJfSBlbHNlIGlmIChkZXYtPmJ1cy0+bnVtYmVyID09IDAgJiYgUENJX1NMT1QoZGV2LT5kZXZmbikgPT0gMSkgeworCQkvKiAyMTU1NSBub24tdHJhbnNwYXJlbnQgYnJpZGdlLiAgKi8KKwkJaXJxID0gSVJRX0lYUDIwMDBfUENJQjsKKwl9IGVsc2UgaWYgKGRldi0+YnVzLT5udW1iZXIgPT0gMCAmJiBQQ0lfU0xPVChkZXYtPmRldmZuKSA9PSA0KSB7CisJCS8qIFBDSTIwNTBCIHRyYW5zcGFyZW50IGJyaWRnZS4gICovCisJCWlycSA9IC0xOworCX0gZWxzZSBpZiAoZGV2LT5idXMtPm51bWJlciA9PSAxICYmIFBDSV9TTE9UKGRldi0+ZGV2Zm4pID09IDApIHsKKwkJLyogODI1NTkgZXRoZXJuZXQuICAqLworCQlpcnEgPSBJUlFfSVhQMjAwMF9QQ0lBOworCX0gZWxzZSBpZiAoZGV2LT5idXMtPm51bWJlciA9PSAxICYmIFBDSV9TTE9UKGRldi0+ZGV2Zm4pID09IDEpIHsKKwkJLyogU1BJLTMgb3B0aW9uIGJvYXJkLiAgKi8KKwkJaXJxID0gSVJRX0lYUDIwMDBfUENJQjsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgImVucDI2MTFfcGNpX21hcF9pcnEoKSBjYWxsZWQgZm9yIHVua25vd24gIgorCQkJCSJkZXZpY2UgUENJOiVkOiVkOiVkXG4iLCBkZXYtPmJ1cy0+bnVtYmVyLAorCQkJCVBDSV9TTE9UKGRldi0+ZGV2Zm4pLCBQQ0lfRlVOQyhkZXYtPmRldmZuKSk7CisJCWlycSA9IC0xOworCX0KKworCXJldHVybiBpcnE7Cit9CisKK3N0cnVjdCBod19wY2kgZW5wMjYxMV9wY2kgX19pbml0ZGF0YSA9IHsKKwkubnJfY29udHJvbGxlcnMJPSAxLAorCS5zZXR1cAkJPSBlbnAyNjExX3BjaV9zZXR1cCwKKwkucHJlaW5pdAk9IGVucDI2MTFfcGNpX3ByZWluaXQsCisJLnNjYW4JCT0gZW5wMjYxMV9wY2lfc2Nhbl9idXMsCisJLm1hcF9pcnEJPSBlbnAyNjExX3BjaV9tYXBfaXJxLAorfTsKKworaW50IF9faW5pdCBlbnAyNjExX3BjaV9pbml0KHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfZW5wMjYxMSgpKQorCQlwY2lfY29tbW9uX2luaXQoJmVucDI2MTFfcGNpKTsKKworCXJldHVybiAwOworfQorCitzdWJzeXNfaW5pdGNhbGwoZW5wMjYxMV9wY2lfaW5pdCk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVOUC0yNjExIE1hY2hpbmUgSW50aWFsaXphdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgZW5wMjYxMV9mbGFzaF9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBfbmFtZQk9ICJjZmlfcHJvYmUiLAorCS53aWR0aAkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBpeHAyMDAwX2ZsYXNoX2RhdGEgZW5wMjYxMV9mbGFzaF9kYXRhID0geworCS5wbGF0Zm9ybV9kYXRhCT0gJmVucDI2MTFfZmxhc2hfcGxhdGZvcm1fZGF0YSwKKwkubnJfYmFua3MJPSAxCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGVucDI2MTFfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IDB4YzQwMDAwMDAsCisJLmVuZAkJPSAweGM0MDAwMDAwICsgMHgwMGZmZmZmZiwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlbnAyNjExX2ZsYXNoID0geworCS5uYW1lCQk9ICJJWFAyMDAwLUZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZW5wMjYxMV9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZlbnAyNjExX2ZsYXNoX3Jlc291cmNlLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmVucDI2MTFfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmVucDI2MTFfZmxhc2gKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlbnAyNjExX2luaXRfbWFjaGluZSh2b2lkKQoreworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGVucDI2MTFfZGV2aWNlcywgQVJSQVlfU0laRShlbnAyNjExX2RldmljZXMpKTsKK30KKworCitNQUNISU5FX1NUQVJUKEVOUDI2MTEsICJSYWRpc3lzIEVOUC0yNjExIFBDSSBuZXR3b3JrIHByb2Nlc3NvciBib2FyZCIpCisJTUFJTlRBSU5FUigiTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+IikKKwlCT09UX01FTSgweDAwMDAwMDAwLCBJWFAyMDAwX1VBUlRfUEhZU19CQVNFLCBJWFAyMDAwX1VBUlRfVklSVF9CQVNFKQorCUJPT1RfUEFSQU1TKDB4MDAwMDAxMDApCisJTUFQSU8oaXhwMjAwMF9tYXBfaW8pCisJSU5JVElSUShpeHAyMDAwX2luaXRfaXJxKQorCS50aW1lcgkJPSAmZW5wMjYxMV90aW1lciwKKwlJTklUX01BQ0hJTkUoZW5wMjYxMV9pbml0X21hY2hpbmUpCitNQUNISU5FX0VORAorCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMjQwMC5jIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyNDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYzZmYyNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMjQwMC5jCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyNDAwLmMKKyAqCisgKiBJWERQMjQwMCBwbGF0Zm9ybSBzdXBwb3J0CisgKgorICogT3JpZ2luYWwgQXV0aG9yOiBOYWVlbSBBZnphbCA8bmFlZW0ubS5hZnphbEBpbnRlbC5jb20+CisgKiBNYWludGFpbmVyOiBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJWERQMjQwMCB0aW1lciB0aWNrCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBpeGRwMjQwMF90aW1lcl9pbml0KHZvaWQpCit7CisJaW50IG51bWVyYXRvciwgZGVub21pbmF0b3I7CisJaW50IGRlbm9tX2FycmF5W10gPSB7MiwgNCwgOCwgMTYsIDEsIDIsIDQsIDh9OworCisJbnVtZXJhdG9yID0gKCooSVhEUDI0MDBfQ1BMRF9TWVNfQ0xLX00pICYgMHhGRikgKjI7CisJZGVub21pbmF0b3IgPSBkZW5vbV9hcnJheVsoKihJWERQMjQwMF9DUExEX1NZU19DTEtfTikgJiAweDcpXTsKKworCWl4cDIwMDBfaW5pdF90aW1lKCgoMzEyNTAwMCAqIG51bWVyYXRvcikgLyAoZGVub21pbmF0b3IpKSAvIDIpOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBpeGRwMjQwMF90aW1lciA9IHsKKwkuaW5pdAkJPSBpeGRwMjQwMF90aW1lcl9pbml0LAorCS5vZmZzZXQJCT0gaXhwMjAwMF9nZXR0aW1lb2Zmc2V0LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElYRFAyNDAwIFBDSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIF9faW5pdCBpeGRwMjQwMF9wY2lfcHJlaW5pdCh2b2lkKQoreworCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfUENJX0FERFJfRVhULCAweDAwMTAwMDAwKTsKKwlpeHAyMDAwX3BjaV9wcmVpbml0KCk7Cit9CisKK2ludCBpeGRwMjQwMF9wY2lfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCit7CisJc3lzLT5tZW1fb2Zmc2V0ID0gMHhlMDAwMDAwMDsKKworCWl4cDIwMDBfcGNpX3NldHVwKG5yLCBzeXMpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGl4ZHAyNDAwX3BjaV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlpZiAoaXhkcDJ4MDBfbWFzdGVyX25wdSgpKSB7CisKKwkJLyoKKwkJICogUm9vdCBidXMgZGV2aWNlcy4gIFNsYXZlIE5QVSBpcyBvbmx5IG9uZSB3aXRoIGludGVycnVwdC4KKwkJICogRXZlcnl0aGluZyBlbHNlLCB3ZSBqdXN0IHJldHVybiAtMSBiL2Mgbm90aGluZyBlbHNlCisJCSAqIG9uIHRoZSByb290IGJ1cyBoYXMgaW50ZXJydXB0cy4KKwkJICovCisJCWlmKCFkZXYtPmJ1cy0+c2VsZikgeworCQkJaWYoZGV2LT5kZXZmbiA9PSBJWERQMlgwMF9TTEFWRV9OUFVfREVWRk4gKQorCQkJCXJldHVybiBJUlFfSVhEUDI0MDBfSU5HUkVTU19OUFU7CisKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCS8qCisJCSAqIEJyaWRnZSBiZWhpbmQgdGhlIFBNQyBzbG90LgorCQkgKiBOT1RFOiBPbmx5IElOVEEgZnJvbSB0aGUgUE1DIHNsb3QgaXMgcm91dGVkLiBWRVJZIEJBRC4KKwkJICovCisJCWlmKGRldi0+YnVzLT5zZWxmLT5kZXZmbiA9PSBJWERQMlgwMF9QTUNfREVWRk4gJiYKKwkJCWRldi0+YnVzLT5wYXJlbnQtPnNlbGYtPmRldmZuID09IElYRFAyWDAwX1AyUF9ERVZGTiAmJgorCQkJIWRldi0+YnVzLT5wYXJlbnQtPnNlbGYtPmJ1cy0+cGFyZW50KQorCQkJCSAgcmV0dXJuIElSUV9JWERQMjQwMF9QTUM7CisKKwkJLyoKKwkJICogRGV2aWNlIGJlaGluZCB0aGUgZmlyc3QgYnJpZGdlCisJCSAqLworCQlpZihkZXYtPmJ1cy0+c2VsZi0+ZGV2Zm4gPT0gSVhEUDJYMDBfUDJQX0RFVkZOKSB7CisJCQlzd2l0Y2goZGV2LT5kZXZmbikgeworCQkJCWNhc2UgSVhEUDI0MDBfTUFTVEVSX0VORVRfREVWRk46CQorCQkJCQlyZXR1cm4gSVJRX0lYRFAyNDAwX0VORVQ7CQorCQkJCisJCQkJY2FzZSBJWERQMjQwMF9NRURJQV9ERVZGTjoKKwkJCQkJcmV0dXJuIElSUV9JWERQMjQwMF9NRURJQV9QQ0k7CisKKwkJCQljYXNlIElYRFAyNDAwX1NXSVRDSF9GQUJSSUNfREVWRk46CisJCQkJCXJldHVybiBJUlFfSVhEUDI0MDBfU0ZfUENJOworCisJCQkJY2FzZSBJWERQMlgwMF9QTUNfREVWRk46CisJCQkJCXJldHVybiBJUlFfSVhEUDI0MDBfUE1DOworCQkJfQorCQl9CisKKwkJcmV0dXJuIC0xOworCX0gZWxzZSByZXR1cm4gSVJRX0lYUDIwMDBfUENJQjsgLyogU2xhdmUgTklDIGludGVycnVwdCAqLworfQorCisKK3N0YXRpYyB2b2lkIGl4ZHAyNDAwX3BjaV9wb3N0aW5pdCh2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisKKwlpZiAoaXhkcDJ4MDBfbWFzdGVyX25wdSgpKSB7CisJCWRldiA9IHBjaV9maW5kX3Nsb3QoMSwgSVhEUDI0MDBfU0xBVkVfRU5FVF9ERVZGTik7CisJCXBjaV9yZW1vdmVfYnVzX2RldmljZShkZXYpOworCX0gZWxzZSB7CisJCWRldiA9IHBjaV9maW5kX3Nsb3QoMSwgSVhEUDI0MDBfTUFTVEVSX0VORVRfREVWRk4pOworCQlwY2lfcmVtb3ZlX2J1c19kZXZpY2UoZGV2KTsKKworCQlpeGRwMngwMF9zbGF2ZV9wY2lfcG9zdGluaXQoKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaHdfcGNpIGl4ZHAyNDAwX3BjaSBfX2luaXRkYXRhID0geworCS5ucl9jb250cm9sbGVycwk9IDEsCisJLnNldHVwCQk9IGl4ZHAyNDAwX3BjaV9zZXR1cCwKKwkucHJlaW5pdAk9IGl4ZHAyNDAwX3BjaV9wcmVpbml0LAorCS5wb3N0aW5pdAk9IGl4ZHAyNDAwX3BjaV9wb3N0aW5pdCwKKwkuc2NhbgkJPSBpeHAyMDAwX3BjaV9zY2FuX2J1cywKKwkubWFwX2lycQk9IGl4ZHAyNDAwX3BjaV9tYXBfaXJxLAorfTsKKworaW50IF9faW5pdCBpeGRwMjQwMF9wY2lfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX2l4ZHAyNDAwKCkpCisJCXBjaV9jb21tb25faW5pdCgmaXhkcDI0MDBfcGNpKTsKKworCXJldHVybiAwOworfQorCitzdWJzeXNfaW5pdGNhbGwoaXhkcDI0MDBfcGNpX2luaXQpOworCit2b2lkIGl4ZHAyNDAwX2luaXRfaXJxKHZvaWQpCit7CisJaXhkcDJ4MDBfaW5pdF9pcnEoSVhEUDI0MDBfQ1BMRF9JTlRfU1RBVCwgSVhEUDI0MDBfQ1BMRF9JTlRfTUFTSywgSVhEUDI0MDBfTlJfSVJRUyk7Cit9CisKK01BQ0hJTkVfU1RBUlQoSVhEUDI0MDAsICJJbnRlbCBJWERQMjQwMCBEZXZlbG9wbWVudCBQbGF0Zm9ybSIpCisJTUFJTlRBSU5FUigiTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiIpCisJQk9PVF9NRU0oMHgwMDAwMDAwMCwgSVhQMjAwMF9VQVJUX1BIWVNfQkFTRSwgSVhQMjAwMF9VQVJUX1ZJUlRfQkFTRSkKKwlCT09UX1BBUkFNUygweDAwMDAwMTAwKQorCU1BUElPKGl4ZHAyeDAwX21hcF9pbykKKwlJTklUSVJRKGl4ZHAyNDAwX2luaXRfaXJxKQorCS50aW1lcgkJPSAmaXhkcDI0MDBfdGltZXIsCisJSU5JVF9NQUNISU5FKGl4ZHAyeDAwX2luaXRfbWFjaGluZSkKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMjgwMC5jIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyODAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ2ODNhYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMjgwMC5jCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyODAwLmMKKyAqCisgKiBJWERQMjgwMCBwbGF0Zm9ybSBzdXBwb3J0CisgKgorICogT3JpZ2luYWwgQXV0aG9yOiBKZWZmcmV5IERhbHkgPGplZmZyZXkuZGFseUBpbnRlbC5jb20+CisgKiBNYWludGFpbmVyOiBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKwordm9pZCBpeGRwMjQwMF9pbml0X2lycSh2b2lkKQoreworCWl4ZHAyeDAwX2luaXRfaXJxKElYRFAyODAwX0NQTERfSU5UX1NUQVQsIElYRFAyODAwX0NQTERfSU5UX01BU0ssIElYRFAyNDAwX05SX0lSUVMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSVhEUDI4MDAgdGltZXIgdGljaworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBpeGRwMjgwMF90aW1lcl9pbml0KHZvaWQpCit7CisJaXhwMjAwMF9pbml0X3RpbWUoNTAwMDAwMDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBpeGRwMjgwMF90aW1lciA9IHsKKwkuaW5pdAkJPSBpeGRwMjgwMF90aW1lcl9pbml0LAorCS5vZmZzZXQJCT0gaXhwMjAwMF9nZXR0aW1lb2Zmc2V0LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElYRFAyODAwIFBDSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIF9faW5pdCBpeGRwMjgwMF9wY2lfcHJlaW5pdCh2b2lkKQoreworCXByaW50aygiaXhkcDJ4MDBfcGNpX3ByZWluaXQgY2FsbGVkXG4iKTsKKworCSpJWFAyMDAwX1BDSV9BRERSX0VYVCA9ICAweDAwMDBlMDAwOworCisJKklYUDIwMDBfUENJX0RSQU1fQkFTRV9BRERSX01BU0sgPSAoMHg0MDAwMDAwMCAtIDEpICYgfjB4ZmZmZmY7CisJKklYUDIwMDBfUENJX1NSQU1fQkFTRV9BRERSX01BU0sgPSAoMHgyMDAwMDAwIC0gMSkgJiB+MHgzZmZmZjsKKworCWl4cDIwMDBfcGNpX3ByZWluaXQoKTsKK30KKworaW50IGl4ZHAyODAwX3BjaV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKK3sKKwlzeXMtPm1lbV9vZmZzZXQgPSAweDAwMDAwMDAwOworCisJaXhwMjAwMF9wY2lfc2V0dXAobnIsIHN5cyk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBfX2luaXQgaXhkcDI4MDBfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoreworCWlmIChpeGRwMngwMF9tYXN0ZXJfbnB1KCkpIHsKKworCQkvKgorCQkgKiBSb290IGJ1cyBkZXZpY2VzLiAgU2xhdmUgTlBVIGlzIG9ubHkgb25lIHdpdGggaW50ZXJydXB0LgorCQkgKiBFdmVyeXRoaW5nIGVsc2UsIHdlIGp1c3QgcmV0dXJuIC0xIHdoaWNoIGlzIGludmFsaWQuCisJCSAqLworCQlpZighZGV2LT5idXMtPnNlbGYpIHsKKwkJCWlmKGRldi0+ZGV2Zm4gPT0gSVhEUDJYMDBfU0xBVkVfTlBVX0RFVkZOICkKKwkJCQlyZXR1cm4gSVJRX0lYRFAyODAwX0lOR1JFU1NfTlBVOworCisJCQlyZXR1cm4gLTE7CisJCX0KKworCQkvKgorCQkgKiBCcmlkZ2UgYmVoaW5kIHRoZSBQTUMgc2xvdC4KKwkJICovCisJCWlmKGRldi0+YnVzLT5zZWxmLT5kZXZmbiA9PSBJWERQMlgwMF9QTUNfREVWRk4gJiYKKwkJCWRldi0+YnVzLT5wYXJlbnQtPnNlbGYtPmRldmZuID09IElYRFAyWDAwX1AyUF9ERVZGTiAmJgorCQkJIWRldi0+YnVzLT5wYXJlbnQtPnNlbGYtPmJ1cy0+cGFyZW50KQorCQkJCSAgcmV0dXJuIElSUV9JWERQMjgwMF9QTUM7CisKKwkJLyoKKwkJICogRGV2aWNlIGJlaGluZCB0aGUgZmlyc3QgYnJpZGdlCisJCSAqLworCQlpZihkZXYtPmJ1cy0+c2VsZi0+ZGV2Zm4gPT0gSVhEUDJYMDBfUDJQX0RFVkZOKSB7CisJCQlzd2l0Y2goZGV2LT5kZXZmbikgeworCQkJCWNhc2UgSVhEUDJYMDBfUE1DX0RFVkZOOgorCQkJCQlyZXR1cm4gSVJRX0lYRFAyODAwX1BNQzsJCisJCQkKKwkJCQljYXNlIElYRFAyODAwX01BU1RFUl9FTkVUX0RFVkZOOgorCQkJCQlyZXR1cm4gSVJRX0lYRFAyODAwX0VHUkVTU19FTkVUOworCisJCQkJY2FzZSBJWERQMjgwMF9TV0lUQ0hfRkFCUklDX0RFVkZOOgorCQkJCQlyZXR1cm4gSVJRX0lYRFAyODAwX0ZBQlJJQzsKKwkJCX0KKwkJfQorCisJCXJldHVybiAtMTsKKwl9IGVsc2UgcmV0dXJuIElSUV9JWFAyMDAwX1BDSUI7IC8qIFNsYXZlIE5JQyBpbnRlcnJ1cHQgKi8KK30KKworc3RhdGljIHZvaWQgaXhkcDI4MDBfcGNpX3Bvc3Rpbml0KHZvaWQpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKworCWlmIChpeGRwMngwMF9tYXN0ZXJfbnB1KCkpIHsKKwkJZGV2ID0gcGNpX2ZpbmRfc2xvdCgxLCBJWERQMjgwMF9TTEFWRV9FTkVUX0RFVkZOKTsKKwkJcGNpX3JlbW92ZV9idXNfZGV2aWNlKGRldik7CisJfSBlbHNlIHsKKwkJZGV2ID0gcGNpX2ZpbmRfc2xvdCgxLCBJWERQMjgwMF9NQVNURVJfRU5FVF9ERVZGTik7CisJCXBjaV9yZW1vdmVfYnVzX2RldmljZShkZXYpOworCisJCWl4ZHAyeDAwX3NsYXZlX3BjaV9wb3N0aW5pdCgpOworCX0KK30KKworc3RydWN0IGh3X3BjaSBpeGRwMjgwMF9wY2kgX19pbml0ZGF0YSA9IHsKKwkubnJfY29udHJvbGxlcnMJPSAxLAorCS5zZXR1cAkJPSBpeGRwMjgwMF9wY2lfc2V0dXAsCisJLnByZWluaXQJPSBpeGRwMjgwMF9wY2lfcHJlaW5pdCwKKwkucG9zdGluaXQJPSBpeGRwMjgwMF9wY2lfcG9zdGluaXQsCisJLnNjYW4JCT0gaXhwMjAwMF9wY2lfc2Nhbl9idXMsCisJLm1hcF9pcnEJPSBpeGRwMjgwMF9wY2lfbWFwX2lycSwKK307CisKK2ludCBfX2luaXQgaXhkcDI4MDBfcGNpX2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19peGRwMjgwMCgpKQorCQlwY2lfY29tbW9uX2luaXQoJml4ZHAyODAwX3BjaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKGl4ZHAyODAwX3BjaV9pbml0KTsKKwordm9pZCBpeGRwMjgwMF9pbml0X2lycSh2b2lkKQoreworCWl4ZHAyeDAwX2luaXRfaXJxKElYRFAyODAwX0NQTERfSU5UX1NUQVQsIElYRFAyODAwX0NQTERfSU5UX01BU0ssIElYRFAyODAwX05SX0lSUVMpOworfQorCitNQUNISU5FX1NUQVJUKElYRFAyODAwLCAiSW50ZWwgSVhEUDI4MDAgRGV2ZWxvcG1lbnQgUGxhdGZvcm0iKQorCU1BSU5UQUlORVIoIk1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4iKQorCUJPT1RfTUVNKDB4MDAwMDAwMDAsIElYUDIwMDBfVUFSVF9QSFlTX0JBU0UsIElYUDIwMDBfVUFSVF9WSVJUX0JBU0UpCisJQk9PVF9QQVJBTVMoMHgwMDAwMDEwMCkKKwlNQVBJTyhpeGRwMngwMF9tYXBfaW8pCisJSU5JVElSUShpeGRwMjgwMF9pbml0X2lycSkKKwkudGltZXIJCT0gJml4ZHAyODAwX3RpbWVyLAorCUlOSVRfTUFDSElORShpeGRwMngwMF9pbml0X21hY2hpbmUpCitNQUNISU5FX0VORAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaXhkcDJ4MDAuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYzQxZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaXhkcDJ4MDAuYwpAQCAtMCwwICsxLDMwNCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMC5jCisgKgorICogQ29kZSBjb21tb24gdG8gSVhEUDI0MDAgYW5kIElYRFAyODAwIHBsYXRmb3Jtcy4KKyAqCisgKiBPcmlnaW5hbCBBdXRob3I6IE5hZWVtIEFmemFsIDxuYWVlbS5tLmFmemFsQGludGVsLmNvbT4KKyAqIE1haW50YWluZXI6IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElYRFAyeDAwIElSUSBJbml0aWFsaXphdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYm9hcmRfaXJxX21hc2s7CitzdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYm9hcmRfaXJxX3N0YXQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBib2FyZF9pcnFfY291bnQ7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9JWERQMjQwMAorLyoKKyAqIFNsb3dwb3J0IGNvbmZpZ3VyYXRpb24gZm9yIGFjY2Vzc2luZyBDUExEIHJlZ2lzdGVycyBvbiBJWERQMngwMAorICovCitzdGF0aWMgc3RydWN0IHNsb3dwb3J0X2NmZyBzbG93cG9ydF9jcGxkX2NmZyA9IHsKKwkuQ0NSID0JU0xPV1BPUlRfQ0NSX0RJVl8yLAorCS5XVEMgPSAweDAwMDAwMDcwLAorCS5SVEMgPSAweDAwMDAwMDcwLAorCS5QQ1IgPSBTTE9XUE9SVF9NT0RFX0ZMQVNILAorCS5BREMgPSBTTE9XUE9SVF9BRERSX1dJRFRIXzI0IHwgU0xPV1BPUlRfREFUQV9XSURUSF84Cit9OworI2VuZGlmCisKK3N0YXRpYyB2b2lkIGl4ZHAyeDAwX2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgbG9uZyBkdW1teTsKKwlzdGF0aWMgc3RydWN0IHNsb3dwb3J0X2NmZyBvbGRfY2ZnOworCisJLyoKKwkgKiBUaGlzIGlzIHVnbHkgaW4gY29tbW9uIGNvZGUgYnV0IHJlYWxseSBkb24ndCBrbm93CisJICogb2YgYSBiZXR0ZXIgd2F5IHRvIGhhbmRsZSBpdC4gOigKKwkgKi8KKyNpZmRlZiBDT05GSUdfQVJDSF9JWERQMjQwMAorCWlmIChtYWNoaW5lX2lzX2l4ZHAyNDAwKCkpCisJCWl4cDIwMDBfYWNxdWlyZV9zbG93cG9ydCgmc2xvd3BvcnRfY3BsZF9jZmcsICZvbGRfY2ZnKTsKKyNlbmRpZgorCisJZHVtbXkgPSAqYm9hcmRfaXJxX21hc2s7CisJZHVtbXkgfD0gIElYUDIwMDBfQk9BUkRfSVJRX01BU0soaXJxKTsKKwlpeHAyMDAwX3JlZ193cml0ZShib2FyZF9pcnFfbWFzaywgZHVtbXkpOworCisjaWZkZWYgQ09ORklHX0FSQ0hfSVhEUDI0MDAKKwlpZiAobWFjaGluZV9pc19peGRwMjQwMCgpKQorCQlpeHAyMDAwX3JlbGVhc2Vfc2xvd3BvcnQoJm9sZF9jZmcpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGl4ZHAyeDAwX2lycV91bm1hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGR1bW15OworCXN0YXRpYyBzdHJ1Y3Qgc2xvd3BvcnRfY2ZnIG9sZF9jZmc7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9JWERQMjQwMAorCWlmIChtYWNoaW5lX2lzX2l4ZHAyNDAwKCkpCisJCWl4cDIwMDBfYWNxdWlyZV9zbG93cG9ydCgmc2xvd3BvcnRfY3BsZF9jZmcsICZvbGRfY2ZnKTsKKyNlbmRpZgorCisJZHVtbXkgPSAqYm9hcmRfaXJxX21hc2s7CisJZHVtbXkgJj0gIH5JWFAyMDAwX0JPQVJEX0lSUV9NQVNLKGlycSk7CisJaXhwMjAwMF9yZWdfd3JpdGUoYm9hcmRfaXJxX21hc2ssIGR1bW15KTsKKworCWlmIChtYWNoaW5lX2lzX2l4ZHAyNDAwKCkpIAorCQlpeHAyMDAwX3JlbGVhc2Vfc2xvd3BvcnQoJm9sZF9jZmcpOworfQorCitzdGF0aWMgdm9pZCBpeGRwMngwMF9pcnFfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisgICAgICAgIHZvbGF0aWxlIHUzMiBleF9pbnRlcnJ1cHQgPSAwOworCXN0YXRpYyBzdHJ1Y3Qgc2xvd3BvcnRfY2ZnIG9sZF9jZmc7CisJaW50IGk7CisKKwlkZXNjLT5jaGlwLT5tYXNrKGlycSk7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9JWERQMjQwMAorCWlmIChtYWNoaW5lX2lzX2l4ZHAyNDAwKCkpCisJCWl4cDIwMDBfYWNxdWlyZV9zbG93cG9ydCgmc2xvd3BvcnRfY3BsZF9jZmcsICZvbGRfY2ZnKTsKKyNlbmRpZgorICAgICAgICBleF9pbnRlcnJ1cHQgPSAqYm9hcmRfaXJxX3N0YXQgJiAweGZmOworCWlmIChtYWNoaW5lX2lzX2l4ZHAyNDAwKCkpCisJCWl4cDIwMDBfcmVsZWFzZV9zbG93cG9ydCgmb2xkX2NmZyk7CisKKwlpZighZXhfaW50ZXJydXB0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiU3B1cmlvdXMgSVhEUDJ4MDAgQ1BMRCBpbnRlcnJ1cHQhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZvcihpID0gMDsgaSA8IGJvYXJkX2lycV9jb3VudDsgaSsrKSB7CisJCWlmKGV4X2ludGVycnVwdCAmICgxIDw8IGkpKSAgeworCQkJc3RydWN0IGlycWRlc2MgKmNwbGRfZGVzYzsKKwkJCWludCBjcGxkX2lycSA9IElYUDIwMDBfQk9BUkRfSVJRKDApICsgaTsKKwkJCWNwbGRfZGVzYyA9IGlycV9kZXNjICsgY3BsZF9pcnE7CisJCQljcGxkX2Rlc2MtPmhhbmRsZShjcGxkX2lycSwgY3BsZF9kZXNjLCByZWdzKTsKKwkJfQorCX0KKworCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgaXhkcDJ4MDBfY3BsZF9pcnFfY2hpcCA9IHsKKwkuYWNrCT0gaXhkcDJ4MDBfaXJxX21hc2ssCisJLm1hc2sJPSBpeGRwMngwMF9pcnFfbWFzaywKKwkudW5tYXNrCT0gaXhkcDJ4MDBfaXJxX3VubWFzaworfTsKKwordm9pZCBpeGRwMngwMF9pbml0X2lycSh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpzdGF0X3JlZywgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqbWFza19yZWcsIHVuc2lnbmVkIGxvbmcgbnJfaXJxcykKK3sKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJaXhwMjAwMF9pbml0X2lycSgpOworCQorCWlmICghaXhkcDJ4MDBfbWFzdGVyX25wdSgpKQorCQlyZXR1cm47CisKKwlib2FyZF9pcnFfc3RhdCA9IHN0YXRfcmVnOworCWJvYXJkX2lycV9tYXNrID0gbWFza19yZWc7CisJYm9hcmRfaXJxX2NvdW50ID0gbnJfaXJxczsKKworCSpib2FyZF9pcnFfbWFzayA9IDB4ZmZmZmZmZmY7CisKKwlmb3IoaXJxID0gSVhQMjAwMF9CT0FSRF9JUlEoMCk7IGlycSA8IElYUDIwMDBfQk9BUkRfSVJRKGJvYXJkX2lycV9jb3VudCk7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZpeGRwMngwMF9jcGxkX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgZG9fbGV2ZWxfSVJRKTsKKwkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQpOworCX0KKworCS8qIEhvb2sgaW50byBQQ0kgaW50ZXJydXB0ICovCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0lYUDIwMDBfUENJQiwgJml4ZHAyeDAwX2lycV9oYW5kbGVyKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElYRFAyeDAwIG1lbW9yeSBtYXAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBpeGRwMngwMF9pb19kZXNjIF9faW5pdGRhdGEgPSB7CisJLnZpcnR1YWwJPSBJWERQMlgwMF9WSVJUX0NQTERfQkFTRSwgCisJLnBoeXNpY2FsCT0gSVhEUDJYMDBfUEhZU19DUExEX0JBU0UsCisJLmxlbmd0aAkJPSBJWERQMlgwMF9DUExEX1NJWkUsCisJLnR5cGUJCT0gTVRfREVWSUNFCit9OworCit2b2lkIF9faW5pdCBpeGRwMngwMF9tYXBfaW8odm9pZCkKK3sKKwlpeHAyMDAwX21hcF9pbygpOwkKKworCWlvdGFibGVfaW5pdCgmaXhkcDJ4MDBfaW9fZGVzYywgMSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJWERQMngwMC1jb21tb24gUENJIGluaXQKKyAqCisgKiBUaGUgSVhEUDJbNDhdMDAgaGFzIGEgaG9ycmlkIFBDSSBidXMgbGF5b3V0LiBCYXNpY2FsbHkgdGhlIGJvYXJkIAorICogY29udGFpbnMgdHdvIE5QVXMgKGluZ3Jlc3MgYW5kIGVncmVzcykgY29ubmVjdGVkIG92ZXIgUENJLCAgYm90aCBydW5uaW5nIAorICogaW5zdGFuY2VzICBvZiB0aGUga2VybmVsLiBTbyBmYXIgc28gZ29vZC4gUGVlcnMgb24gdGhlIFBDSSBidXMgcnVubmluZyAKKyAqIExpbnV4IGlzIGEgY29tbW9uIGRlc2lnbiBpbiB0ZWxlY29tIHN5c3RlbXMuIFRoZSBwcm9ibGVtIGlzIHRoYXQgaW5zdGVhZCAKKyAqIG9mIGFsbCB0aGUgZGV2aWNlcyBiZWluZyBjb250cm9sbGVkIGJ5IGEgc2luZ2xlIGhvc3QsIGRpZmZlcmVudAorICogZGV2aWNlcyBhcmUgY29udHJvbGxlcyBieSBkaWZmZXJlbnQgTlBVcyBvbiB0aGUgc2FtZSBidXMsIGxlYWRpbmcgdG8KKyAqIG11bHRpcGxlIGhvc3RzIG9uIHRoZSBidXMuIFRoZSBleGFjdCBidXMgbGF5b3V0IGxvb2tzIGxpa2U6CisgKgorICogICAgICAgICAgICAgICAgICAgQnVzIDAKKyAqICAgIE1hc3RlciBOUFUgPC0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLT4gU2xhdmUgTlBVCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAyUCAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKgorICogICAgICAgICAgICAgICAgICBCdXMgMSAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgPC0tKy0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLSstLT4KKyAqICAgICAgICAgICAgICAgICAgfCAgICAgIHwgICAgICAgICB8ICAgICAgICAgfCAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgfCAgICAgIHwgICAgICAgICB8ICAgICAgICAgfCAgICAgIHwKKyAqICAgICAgICAgICAgIC4uLiBEZXYgICAgUE1DICAgICAgIE1lZGlhICAgICBFdGgwICAgRXRoMSAuLi4KKyAqCisgKiBUaGUgbWFzdGVyIGNvbnRyb2xscyBhbGwgYnV0IEV0aDEsIHdoaWNoIGlzIGNvbnRyb2xsZWQgYnkgdGhlCisgKiBzbGF2ZS4gV2hhdCB0aGlzIG1lYW5zIGlzIHRoYXQgdGhlIGJvdGggdGhlIG1hc3RlciBhbmQgdGhlIHNsYXZlCisgKiBoYXZlIHRvIHNjYW4gdGhlIGJ1cywgYnV0IG9ubHkgb25lIG9mIHRoZW0gY2FuIGVudW1lcmF0ZSB0aGUgYnVzLgorICogSW4gYWRkaXRpb24sIGFmdGVyIHRoZSBidXMgaXMgc2Nhbm5lZCwgZWFjaCBrZXJuZWwgbXVzdCByZW1vdmUKKyAqIHRoZSBkZXZpY2UocykgaXQgZG9lcyBub3QgY29udHJvbCBmcm9tIHRoZSBQQ0kgZGV2IGxpc3Qgb3RoZXJ3aXNlCisgKiBhIGRyaXZlciBvbiBlYWNoIE5QVSB3aWxsIHRyeSB0byBtYW5hZ2UgaXQgYW5kIHdlIHdpbGwgaGF2ZSBob3JyaWJsZQorICogY29uZmxpY3RzLiBPaC4uYW5kIHRoZSBzbGF2ZSBOUFUgbmVlZHMgdG8gc2VlIHRoZSBtYXN0ZXIgTlBVCisgKiBmb3IgSW50ZWwncyBkcml2ZXJzIHRvIHdvcmsgcHJvcGVybHkuIENsb3NlZCBzb3VyY2UgZHJpdmVycy4uLgorICoKKyAqIFRoZSB3YXkgd2UgZGVhbCB3aXRoIHRoaXMgaXMgZmFpcmx5IHNpbXBsZSBidXQgdWdseToKKyAqCisgKiAxKSBMZXQgbWFzdGVyIHNjYW4gYW5kIGVudW1lcmF0ZSB0aGUgYnVzIGNvbXBsZXRlbHkuCisgKiAyKSBNYXN0ZXIgZGVsZXRlcyBFdGgxIGZyb20gZGV2aWNlIGxpc3QuCisgKiAzKSBTbGF2ZSBzY2FucyBidXMgYW5kIHRoZW4gZGVsZXRlcyBhbGwgYnV0IEV0aDEgKEV0aDAgb24gc2xhdmUpCisgKiAgICBmcm9tIGRldmljZSBsaXN0LgorICogNCkgRmluZCBIVyBkZXNpZ25lcnMgYW5kIExBUlQgdGhlbS4KKyAqCisgKiBUaGUgYm9hcmRzIGFsc28gZG8gbm90IGRvIG5vcm1hbCBQQ0kgSVJRIHJvdXRpbmcsIG9yIGFueSBzb3J0IG9mIAorICogc2Vuc2ljYWwgIHN3aXp6bGluZywgc28gd2UganVzdCBuZWVkIHRvIGNoZWNrIHdoZXJlIG9uIHRoZSAgYnVzIGEKKyAqIGRldmljZSBzaXRzIGFuZCBmaWd1cmUgb3V0IHRvIHdoaWNoIENQTEQgcGluIHRoZSBpbnRlcnJ1cHQgaXMgcm91dGVkLgorICogU2VlIGl4ZHAyWzQ4XTAwLmMgZmlsZXMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGl4ZHAyeDAwX3NsYXZlX3BjaV9wb3N0aW5pdCh2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisKKwkvKgorCSAqIFJlbW92ZSBQTUMgZGV2aWNlIGlzIHRoZXJlIGlzIG9uZQorCSAqLworCWlmKChkZXYgPSBwY2lfZmluZF9zbG90KDEsIElYRFAyWDAwX1BNQ19ERVZGTikpKQorCQlwY2lfcmVtb3ZlX2J1c19kZXZpY2UoZGV2KTsKKworCWRldiA9IHBjaV9maW5kX3Nsb3QoMCwgSVhEUDJYMDBfMjE1NTVfREVWRk4pOworCXBjaV9yZW1vdmVfYnVzX2RldmljZShkZXYpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElYRFAyeDAwIE1hY2hpbmUgU2V0dXAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGl4ZHAyeDAwX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCisJLndpZHRoCQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IGl4cDIwMDBfZmxhc2hfZGF0YSBpeGRwMngwMF9mbGFzaF9kYXRhID0geworCS5wbGF0Zm9ybV9kYXRhCT0gJml4ZHAyeDAwX3BsYXRmb3JtX2RhdGEsCisJLm5yX2JhbmtzCT0gMQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpeGRwMngwMF9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gMHhjNDAwMDAwMCwKKwkuZW5kCQk9IDB4YzQwMDAwMDAgKyAweDAwZmZmZmZmLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGl4ZHAyeDAwX2ZsYXNoID0geworCS5uYW1lCQk9ICJJWFAyMDAwLUZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaXhkcDJ4MDBfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaXhkcDJ4MDBfZmxhc2hfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IGl4cDIwMDBfaTJjX3BpbnMgaXhkcDJ4MDBfaTJjX2dwaW9fcGlucyA9IHsKKwkuc2RhX3Bpbgk9IElYRFAyWDAwX0dQSU9fU0RBLAorCS5zY2xfcGluCT0gSVhEUDJYMDBfR1BJT19TQ0wsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpeGRwMngwMF9pMmNfY29udHJvbGxlciA9IHsKKwkubmFtZQkJPSAiSVhQMjAwMC1JMkMiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZpeGRwMngwMF9pMmNfZ3Bpb19waW5zLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAwCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaXhkcDJ4MDBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJml4ZHAyeDAwX2ZsYXNoLAorCSZpeGRwMngwMF9pMmNfY29udHJvbGxlcgorfTsKKwordm9pZCBfX2luaXQgaXhkcDJ4MDBfaW5pdF9tYWNoaW5lKHZvaWQpCit7CisJZ3Bpb19saW5lX3NldChJWERQMlgwMF9HUElPX0kyQ19FTkFCTEUsIDEpOworCWdwaW9fbGluZV9jb25maWcoSVhEUDJYMDBfR1BJT19JMkNfRU5BQkxFLCBHUElPX09VVCk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhpeGRwMngwMF9kZXZpY2VzLCBBUlJBWV9TSVpFKGl4ZHAyeDAwX2RldmljZXMpKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyeDAxLmMgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaXhkcDJ4MDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTRkYWNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyeDAxLmMKQEAgLTAsMCArMSw0MDAgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWl4cDIwMDAvaXhkcDJ4MDEuYworICoKKyAqIENvZGUgY29tbW9uIHRvIEludGVsIElYRFAyNDAxIGFuZCBJWERQMjgwMSBwbGF0Zm9ybXMKKyAqCisgKiBPcmlnaW5hbCBBdXRob3I6IEFuZHJ6ZWogTWlhbGtvd3NraSA8YW5kcnplai5taWFsa293c2tpQGludGVsLmNvbT4KKyAqIE1haW50YWluZXI6IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElYRFAyeDAxIElSUSBIYW5kbGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBpeGRwMngwMV9pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCWl4cDIwMDBfcmVnX3dyaXRlKElYRFAyWDAxX0lOVF9NQVNLX1NFVF9SRUcsCisJCQkJSVhQMjAwMF9CT0FSRF9JUlFfTUFTSyhpcnEpKTsKK30KKworc3RhdGljIHZvaWQgaXhkcDJ4MDFfaXJxX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCWl4cDIwMDBfcmVnX3dyaXRlKElYRFAyWDAxX0lOVF9NQVNLX0NMUl9SRUcsCisJCQkJSVhQMjAwMF9CT0FSRF9JUlFfTUFTSyhpcnEpKTsKK30KKworc3RhdGljIHUzMiB2YWxpZF9pcnFfbWFzazsKKworc3RhdGljIHZvaWQgaXhkcDJ4MDFfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWRlc2MgKmRlc2MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXUzMiBleF9pbnRlcnJ1cHQ7CisJaW50IGk7CisKKwlkZXNjLT5jaGlwLT5tYXNrKGlycSk7CisKKwlleF9pbnRlcnJ1cHQgPSAqSVhEUDJYMDFfSU5UX1NUQVRfUkVHICYgdmFsaWRfaXJxX21hc2s7CisKKwlpZiAoIWV4X2ludGVycnVwdCkgeworCQlwcmludGsoS0VSTl9FUlIgIlNwdXJpb3VzIElYRFAyWDAxIENQTEQgaW50ZXJydXB0IVxuIik7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgSVhQMjAwMF9CT0FSRF9JUlFTOyBpKyspIHsKKwkJaWYgKGV4X2ludGVycnVwdCAmICgxIDw8IGkpKSB7CisJCQlzdHJ1Y3QgaXJxZGVzYyAqY3BsZF9kZXNjOworCQkJaW50IGNwbGRfaXJxID0gSVhQMjAwMF9CT0FSRF9JUlEoMCkgKyBpOworCQkJY3BsZF9kZXNjID0gaXJxX2Rlc2MgKyBjcGxkX2lycTsKKwkJCWNwbGRfZGVzYy0+aGFuZGxlKGNwbGRfaXJxLCBjcGxkX2Rlc2MsIHJlZ3MpOworCQl9CisJfQorCisJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBpeGRwMngwMV9pcnFfY2hpcCA9IHsKKwkubWFzawk9IGl4ZHAyeDAxX2lycV9tYXNrLAorCS5hY2sJPSBpeGRwMngwMV9pcnFfbWFzaywKKwkudW5tYXNrCT0gaXhkcDJ4MDFfaXJxX3VubWFzaworfTsKKworLyoKKyAqIFdlIG9ubHkgZG8gYW55dGhpbmcgaWYgd2UgYXJlIHRoZSBtYXN0ZXIgTlBVIG9uIHRoZSBib2FyZC4KKyAqIFRoZSBzbGF2ZSBOUFUgb25seSBoYXMgdGhlIGV0aGVybmV0IGNoaXAgZ29pbmcgZGlyZWN0bHkgdG8KKyAqIHRoZSBQQ0lCIGludGVycnVwdCBpbnB1dC4KKyAqLwordm9pZCBfX2luaXQgaXhkcDJ4MDFfaW5pdF9pcnEodm9pZCkKK3sKKwlpbnQgaXJxID0gMDsKKworCS8qIGluaXRpYWxpemUgY2hpcCBzcGVjaWZpYyBpbnRlcnJ1cHRzICovCisJaXhwMjAwMF9pbml0X2lycSgpOworCisJaWYgKG1hY2hpbmVfaXNfaXhkcDI0MDEoKSkKKwkJdmFsaWRfaXJxX21hc2sgPSBJWERQMjQwMV9WQUxJRF9JUlFfTUFTSzsKKwllbHNlCisJCXZhbGlkX2lycV9tYXNrID0gSVhEUDI4MDFfVkFMSURfSVJRX01BU0s7CisKKwkvKiBNYXNrIGFsbCBpbnRlcnJ1cHRzIGZyb20gQ1BMRCwgZGlzYWJsZSBzaW11bGF0aW9uICovCisJaXhwMjAwMF9yZWdfd3JpdGUoSVhEUDJYMDFfSU5UX01BU0tfU0VUX1JFRywgMHhmZmZmZmZmZik7CisJaXhwMjAwMF9yZWdfd3JpdGUoSVhEUDJYMDFfSU5UX1NJTV9SRUcsIDApOworCisJZm9yIChpcnEgPSBOUl9JWFAyMDAwX0lSUVM7IGlycSA8IE5SX0lYRFAyWDAxX0lSUVM7IGlycSsrKSB7CisJCWlmIChpcnEgJiB2YWxpZF9pcnFfbWFzaykgeworCQkJc2V0X2lycV9jaGlwKGlycSwgJml4ZHAyeDAxX2lycV9jaGlwKTsKKwkJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2xldmVsX0lSUSk7CisJCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7CisJCX0gZWxzZSB7CisJCQlzZXRfaXJxX2ZsYWdzKGlycSwgMCk7CisJCX0KKwl9CisKKwkvKiBIb29rIGludG8gUENJIGludGVycnVwdHMgKi8KKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfSVhQMjAwMF9QQ0lCLCAmaXhkcDJ4MDFfaXJxX2hhbmRsZXIpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJWERQMngwMSBtZW1vcnkgbWFwIGFuZCBzZXJpYWwgcG9ydHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBpeGRwMngwMV9pb19kZXNjIF9faW5pdGRhdGEgPSB7CisJLnZpcnR1YWwJPSBJWERQMlgwMV9WSVJUX0NQTERfQkFTRSwgCisJLnBoeXNpY2FsCT0gSVhEUDJYMDFfUEhZU19DUExEX0JBU0UsCisJLmxlbmd0aAkJPSBJWERQMlgwMV9DUExEX1JFR0lPTl9TSVpFLAorCS50eXBlCQk9IE1UX0RFVklDRQorfTsKKworc3RhdGljIHN0cnVjdCB1YXJ0X3BvcnQgaXhkcDJ4MDFfc2VyaWFsX3BvcnRzWzJdID0geworCXsKKwkJLm1lbWJhc2UJPSAoY2hhciAqKShJWERQMlgwMV9VQVJUMV9WSVJUX0JBU0UpLAorCQkubWFwYmFzZQk9ICh1bnNpZ25lZCBsb25nKUlYRFAyWDAxX1VBUlQxX1BIWVNfQkFTRSwKKwkJLmlycQkJPSBJUlFfSVhEUDJYMDFfVUFSVDEsCisJCS5mbGFncwkJPSBVUEZfU0tJUF9URVNULAorCQkuaW90eXBlCQk9IFVQSU9fTUVNMzIsCisJCS5yZWdzaGlmdAk9IDIsCisJCS51YXJ0Y2xrCT0gSVhEUDJYMDFfVUFSVF9DTEssCisJCS5saW5lCQk9IDEsCisJCS50eXBlCQk9IFBPUlRfMTY1NTBBLAorCQkuZmlmb3NpemUJPSAxNgorCX0sIHsKKwkJLm1lbWJhc2UJPSAoY2hhciAqKShJWERQMlgwMV9VQVJUMl9WSVJUX0JBU0UpLAorCQkubWFwYmFzZQk9ICh1bnNpZ25lZCBsb25nKUlYRFAyWDAxX1VBUlQyX1BIWVNfQkFTRSwKKwkJLmlycQkJPSBJUlFfSVhEUDJYMDFfVUFSVDIsCisJCS5mbGFncwkJPSBVUEZfU0tJUF9URVNULAorCQkuaW90eXBlCQk9IFVQSU9fTUVNMzIsCisJCS5yZWdzaGlmdAk9IDIsCisJCS51YXJ0Y2xrCT0gSVhEUDJYMDFfVUFSVF9DTEssCisJCS5saW5lCQk9IDIsCisJCS50eXBlCQk9IFBPUlRfMTY1NTBBLAorCQkuZmlmb3NpemUJPSAxNgorCX0sIAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGl4ZHAyeDAxX21hcF9pbyh2b2lkKQoreworCWl4cDIwMDBfbWFwX2lvKCk7CQorCisJaW90YWJsZV9pbml0KCZpeGRwMngwMV9pb19kZXNjLCAxKTsKKworCWVhcmx5X3NlcmlhbF9zZXR1cCgmaXhkcDJ4MDFfc2VyaWFsX3BvcnRzWzBdKTsKKwllYXJseV9zZXJpYWxfc2V0dXAoJml4ZHAyeDAxX3NlcmlhbF9wb3J0c1sxXSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElYRFAyeDAxIHRpbWVyIHRpY2sgY29uZmlndXJhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdW5zaWduZWQgaW50IGl4ZHAyeDAxX2Nsb2NrOworCitzdGF0aWMgaW50IF9faW5pdCBpeGRwMngwMV9jbG9ja19zZXR1cChjaGFyICpzdHIpCit7CisJaXhkcDJ4MDFfY2xvY2sgPSBzaW1wbGVfc3RydG91bChzdHIsIE5VTEwsIDEwKTsKKworCXJldHVybiAxOworfQorCitfX3NldHVwKCJpeGRwMngwMV9jbG9jaz0iLCBpeGRwMngwMV9jbG9ja19zZXR1cCk7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpeGRwMngwMV90aW1lcl9pbml0KHZvaWQpCit7CisJaWYgKCFpeGRwMngwMV9jbG9jaykKKwkJaXhkcDJ4MDFfY2xvY2sgPSA1MDAwMDAwMDsKKworCWl4cDIwMDBfaW5pdF90aW1lKGl4ZHAyeDAxX2Nsb2NrKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgaXhkcDJ4MDFfdGltZXIgPSB7CisJLmluaXQJCT0gaXhkcDJ4MDFfdGltZXJfaW5pdCwKKwkub2Zmc2V0CQk9IGl4cDIwMDBfZ2V0dGltZW9mZnNldCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJWERQMngwMSBQQ0kKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBfX2luaXQgaXhkcDJ4MDFfcGNpX3ByZWluaXQodm9pZCkKK3sKKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX1BDSV9BRERSX0VYVCwgMHgwMDAwMDAwMCk7CisJaXhwMjAwMF9wY2lfcHJlaW5pdCgpOworfQorCisjZGVmaW5lIERFVlBJTihkZXYsIHBpbikgKChwaW4pIHwgKChkZXYpIDw8IDMpKQorCitzdGF0aWMgaW50IF9faW5pdCBpeGRwMngwMV9wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCit7CisJdTggYnVzID0gZGV2LT5idXMtPm51bWJlcjsKKwl1MzIgZGV2cGluID0gREVWUElOKFBDSV9TTE9UKGRldi0+ZGV2Zm4pLCBwaW4pOworCXN0cnVjdCBwY2lfYnVzICp0bXBfYnVzID0gZGV2LT5idXM7CisKKwkvKiBQcmltYXJ5IGJ1cywgbm8gaW50ZXJydXB0cyBoZXJlICovCisJaWYgKGJ1cyA9PSAwKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBMb29rdXAgZmlyc3QgbGVhZiBpbiBidXMgdHJlZSAqLworCXdoaWxlICgodG1wX2J1cy0+cGFyZW50ICE9IE5VTEwpICYmICh0bXBfYnVzLT5wYXJlbnQtPnBhcmVudCAhPSBOVUxMKSkgeworCQl0bXBfYnVzID0gdG1wX2J1cy0+cGFyZW50OworCX0KKworCS8qIFNlbGVjdCBiZXR3ZWVuIGtub3duIGJyaWRnZXMgKi8KKwlzd2l0Y2ggKHRtcF9idXMtPnNlbGYtPmRldmZuIHwgKHRtcF9idXMtPnNlbGYtPmJ1cy0+bnVtYmVyIDw8IDgpKSB7CisJLyogRGV2aWNlIGlzIGxvY2F0ZWQgYWZ0ZXIgZmlyc3QgTUIgYnJpZGdlICovCisJY2FzZSAweDAwMDg6CisJCWlmICh0bXBfYnVzID09IGRldi0+YnVzKSB7CisJCQkvKiBEZXZpY2UgaXMgbG9jYXRlZCBkaXJlY3R5IGFmdGVyIGZpcnN0IE1CIGJyaWRnZSAqLworCQkJc3dpdGNoIChkZXZwaW4pIHsKKwkJCWNhc2UgREVWUElOKDEsIDEpOgkvKiBPbmJvYXJkIDgyNTQ2IGNoIDAgKi8KKwkJCQlpZiAobWFjaGluZV9pc19peGRwMjQwMSgpKQorCQkJCQlyZXR1cm4gSVJRX0lYRFAyNDAxX0lOVEFfODI1NDY7CisJCQkJcmV0dXJuIC0xOworCQkJY2FzZSBERVZQSU4oMSwgMik6CS8qIE9uYm9hcmQgODI1NDYgY2ggMSAqLworCQkJCWlmIChtYWNoaW5lX2lzX2l4ZHAyNDAxKCkpCisJCQkJCXJldHVybiBJUlFfSVhEUDI0MDFfSU5UQl84MjU0NjsKKwkJCQlyZXR1cm4gLTE7CisJCQljYXNlIERFVlBJTigwLCAxKToJLyogUE1DIElOVEEjICovCisJCQkJcmV0dXJuIElSUV9JWERQMlgwMV9TUENJX1BNQ19JTlRBOworCQkJY2FzZSBERVZQSU4oMCwgMik6CS8qIFBNQyBJTlRCIyAqLworCQkJCXJldHVybiBJUlFfSVhEUDJYMDFfU1BDSV9QTUNfSU5UQjsKKwkJCWNhc2UgREVWUElOKDAsIDMpOgkvKiBQTUMgSU5UQyMgKi8KKwkJCQlyZXR1cm4gSVJRX0lYRFAyWDAxX1NQQ0lfUE1DX0lOVEM7CisJCQljYXNlIERFVlBJTigwLCA0KToJLyogUE1DIElOVEQjICovCisJCQkJcmV0dXJuIElSUV9JWERQMlgwMV9TUENJX1BNQ19JTlREOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgMHgwMDEwOgorCQlpZiAodG1wX2J1cyA9PSBkZXYtPmJ1cykgeworCQkJLyogRGV2aWNlIGlzIGxvY2F0ZWQgZGlyZWN0eSBhZnRlciBzZWNvbmQgTUIgYnJpZGdlICovCisJCQkvKiBTZWNvbmRhcnkgYnVzIG9mIHNlY29uZCBicmlkZ2UgKi8KKwkJCXN3aXRjaCAoZGV2cGluKSB7CisJCQljYXNlIERFVlBJTigwLCAxKToJLyogREIjMCAqLworCQkJCXJldHVybiBJUlFfSVhEUDJYMDFfU1BDSV9EQl8wOworCQkJY2FzZSBERVZQSU4oMSwgMSk6CS8qIERCIzEgKi8KKwkJCQlyZXR1cm4gSVJRX0lYRFAyWDAxX1NQQ0lfREJfMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIERldmljZSBpcyBsb2NhdGVkIGluZGlyZWN0bHkgYWZ0ZXIgc2Vjb25kIE1CIGJyaWRnZSAqLworCQkJLyogTm90IHN1cHBvcnRlZCBub3cgKi8KKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKKworc3RhdGljIGludCBpeGRwMngwMV9wY2lfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCit7CisJc3lzLT5tZW1fb2Zmc2V0ID0gMHhlMDAwMDAwMDsKKworCWlmIChtYWNoaW5lX2lzX2l4ZHAyODAxKCkpCisJCXN5cy0+bWVtX29mZnNldCAtPSAoKCpJWFAyMDAwX1BDSV9BRERSX0VYVCAmIDB4RTAwMCkgPDwgMTYpOworCisJcmV0dXJuIGl4cDIwMDBfcGNpX3NldHVwKG5yLCBzeXMpOworfQorCitzdHJ1Y3QgaHdfcGNpIGl4ZHAyeDAxX3BjaSBfX2luaXRkYXRhID0geworCS5ucl9jb250cm9sbGVycwk9IDEsCisJLnNldHVwCQk9IGl4ZHAyeDAxX3BjaV9zZXR1cCwKKwkucHJlaW5pdAk9IGl4ZHAyeDAxX3BjaV9wcmVpbml0LAorCS5zY2FuCQk9IGl4cDIwMDBfcGNpX3NjYW5fYnVzLAorCS5tYXBfaXJxCT0gaXhkcDJ4MDFfcGNpX21hcF9pcnEsCit9OworCitpbnQgX19pbml0IGl4ZHAyeDAxX3BjaV9pbml0KHZvaWQpCit7CisKKwlwY2lfY29tbW9uX2luaXQoJml4ZHAyeDAxX3BjaSk7CisJcmV0dXJuIDA7Cit9CisKK3N1YnN5c19pbml0Y2FsbChpeGRwMngwMV9wY2lfaW5pdCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJWERQMngwMSBNYWNoaW5lIEludGlhbGl6YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGl4ZHAyeDAxX2ZsYXNoX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCisJLndpZHRoCQk9IDEsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpeGRwMngwMV9mbGFzaF9iYW5rX3NldHVwKHVuc2lnbmVkIGxvbmcgb2ZzKQoreworCWl4cDIwMDBfcmVnX3dyaXRlKElYRFAyWDAxX0NQTERfRkxBU0hfUkVHLAorCQkoKG9mcyA+PiBJWERQMlgwMV9GTEFTSF9XSU5ET1dfQklUUykgfCBJWERQMlgwMV9DUExEX0ZMQVNIX0lOVEVSTikpOworCXJldHVybiAob2ZzICYgSVhEUDJYMDFfRkxBU0hfV0lORE9XX01BU0spOworfQorCitzdGF0aWMgc3RydWN0IGl4cDIwMDBfZmxhc2hfZGF0YSBpeGRwMngwMV9mbGFzaF9kYXRhID0geworCS5wbGF0Zm9ybV9kYXRhCT0gJml4ZHAyeDAxX2ZsYXNoX3BsYXRmb3JtX2RhdGEsCisJLmJhbmtfc2V0dXAJPSBpeGRwMngwMV9mbGFzaF9iYW5rX3NldHVwCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGl4ZHAyeDAxX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAkJPSAweGM0MDAwMDAwLAorCS5lbmQJCT0gMHhjNDAwMDAwMCArIDB4MDFmZmZmZmYsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaXhkcDJ4MDFfZmxhc2ggPSB7CisJLm5hbWUJCT0gIklYUDIwMDAtRmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZpeGRwMngwMV9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZpeGRwMngwMV9mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXhwMjAwMF9pMmNfcGlucyBpeGRwMngwMV9pMmNfZ3Bpb19waW5zID0geworCS5zZGFfcGluCT0gSVhEUDJYMDFfR1BJT19TREEsCisJLnNjbF9waW4JPSBJWERQMlgwMV9HUElPX1NDTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGl4ZHAyeDAxX2kyY19jb250cm9sbGVyID0geworCS5uYW1lCQk9ICJJWFAyMDAwLUkyQyIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJml4ZHAyeDAxX2kyY19ncGlvX3BpbnMsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDAKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICppeGRwMngwMV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmaXhkcDJ4MDFfZmxhc2gsCisJJml4ZHAyeDAxX2kyY19jb250cm9sbGVyCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgaXhkcDJ4MDFfaW5pdF9tYWNoaW5lKHZvaWQpCit7CisJaXhwMjAwMF9yZWdfd3JpdGUoSVhEUDJYMDFfQ1BMRF9GTEFTSF9SRUcsCisJCShJWERQMlgwMV9DUExEX0ZMQVNIX0JBTktfTUFTSyB8IElYRFAyWDAxX0NQTERfRkxBU0hfSU5URVJOKSk7CisJCisJaXhkcDJ4MDFfZmxhc2hfZGF0YS5ucl9iYW5rcyA9CisJCSgoKklYRFAyWDAxX0NQTERfRkxBU0hfUkVHICYgSVhEUDJYMDFfQ1BMRF9GTEFTSF9CQU5LX01BU0spICsgMSk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhpeGRwMngwMV9kZXZpY2VzLCBBUlJBWV9TSVpFKGl4ZHAyeDAxX2RldmljZXMpKTsKK30KKworCisjaWZkZWYgQ09ORklHX0FSQ0hfSVhEUDI0MDEKK01BQ0hJTkVfU1RBUlQoSVhEUDI0MDEsICJJbnRlbCBJWERQMjQwMSBEZXZlbG9wbWVudCBQbGF0Zm9ybSIpCisJTUFJTlRBSU5FUigiTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiIpCisJQk9PVF9NRU0oMHgwMDAwMDAwMCwgSVhQMjAwMF9VQVJUX1BIWVNfQkFTRSwgSVhQMjAwMF9VQVJUX1ZJUlRfQkFTRSkKKwlCT09UX1BBUkFNUygweDAwMDAwMTAwKQorCU1BUElPKGl4ZHAyeDAxX21hcF9pbykKKwlJTklUSVJRKGl4ZHAyeDAxX2luaXRfaXJxKQorCS50aW1lcgkJPSAmaXhkcDJ4MDFfdGltZXIsCisJSU5JVF9NQUNISU5FKGl4ZHAyeDAxX2luaXRfbWFjaGluZSkKK01BQ0hJTkVfRU5ECisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX0lYRFAyODAxCitNQUNISU5FX1NUQVJUKElYRFAyODAxLCAiSW50ZWwgSVhEUDI4MDEgRGV2ZWxvcG1lbnQgUGxhdGZvcm0iKQorCU1BSU5UQUlORVIoIk1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4iKQorCUJPT1RfTUVNKDB4MDAwMDAwMDAsIElYUDIwMDBfVUFSVF9QSFlTX0JBU0UsIElYUDIwMDBfVUFSVF9WSVJUX0JBU0UpCisJQk9PVF9QQVJBTVMoMHgwMDAwMDEwMCkKKwlNQVBJTyhpeGRwMngwMV9tYXBfaW8pCisJSU5JVElSUShpeGRwMngwMV9pbml0X2lycSkKKwkudGltZXIJCT0gJml4ZHAyeDAxX3RpbWVyLAorCUlOSVRfTUFDSElORShpeGRwMngwMV9pbml0X21hY2hpbmUpCitNQUNISU5FX0VORAorI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL3BjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL3BjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMWY4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvcGNpLmMKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWl4cDIwMDAvcGNpLmMKKyAqCisgKiBQQ0kgcm91dGluZXMgZm9yIElYRFAyNDAwL0lYRFAyODAwIGJvYXJkcworICoKKyAqIE9yaWdpbmFsIEF1dGhvcjogTmFlZW0gQWZ6YWwgPG5hZWVtLm0uYWZ6YWxAaW50ZWwuY29tPgorICogTWFpbnRhaW5lZCBieTogRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBwbGV4aXR5Lm5ldD4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMiBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CisKK3N0YXRpYyBpbnQgcGNpX21hc3Rlcl9hYm9ydHMgPSAwOworCitzdGF0aWMgaW50IGNsZWFyX21hc3Rlcl9hYm9ydHModm9pZCk7CisKK3N0YXRpYyB1MzIgKgoraXhwMjAwMF9wY2lfY29uZmlnX2FkZHIodW5zaWduZWQgaW50IGJ1c19uciwgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUpCit7CisJdTMyICpwYWRkcmVzczsKKworCWlmIChQQ0lfU0xPVChkZXZmbikgPiA3KQorCQlyZXR1cm4gMDsKKworCS8qIE11c3QgYmUgZHdvcmQgYWxpZ25lZCAqLworCXdoZXJlICY9IH4zOworCisJLyoKKwkgKiBGb3IgdG9wIGJ1cywgZ2VuZXJhdGUgdHlwZSAwLCBlbHNlIHR5cGUgMQorCSAqLworCWlmICghYnVzX25yKSB7CisJCS8qIG9ubHkgYml0c1syMzoxNl0gYXJlIHVzZWQgZm9yIElEU0VMICovCisJCXBhZGRyZXNzID0gKHUzMiAqKSAoSVhQMjAwMF9QQ0lfQ0ZHMF9WSVJUX0JBU0UKKwkJCQkgICAgfCAoMSA8PCAoUENJX1NMT1QoZGV2Zm4pICsgMTYpKQorCQkJCSAgICB8IChQQ0lfRlVOQyhkZXZmbikgPDwgOCkgfCB3aGVyZSk7CisJfSBlbHNlIHsKKwkJcGFkZHJlc3MgPSAodTMyICopIChJWFAyMDAwX1BDSV9DRkcxX1ZJUlRfQkFTRSAKKwkJCQkgICAgfCAoYnVzX25yIDw8IDE2KQorCQkJCSAgICB8IChQQ0lfU0xPVChkZXZmbikgPDwgMTEpCisJCQkJICAgIHwgKFBDSV9GVU5DKGRldmZuKSA8PCA4KSB8IHdoZXJlKTsKKwl9CisKKwlyZXR1cm4gcGFkZHJlc3M7Cit9CisKKy8qCisgKiBNYXNrIHRhYmxlLCBiaXRzIHRvIG1hc2sgZm9yIHF1YW50aXR5IG9mIHNpemUgMSwgMiBvciA0IGJ5dGVzLgorICogMCBhbmQgMyBhcmUgbm90IHZhbGlkIGluZGV4ZXMuLi4KKyAqLworc3RhdGljIHUzMiBieXRlbWFza1tdID0geworCS8qMCovCTAsCisJLyoxKi8JMHhmZiwKKwkvKjIqLwkweGZmZmYsCisJLyozKi8JMCwKKwkvKjQqLwkweGZmZmZmZmZmLAorfTsKKworCitpbnQgaXhwMjAwMF9wY2lfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsCisJCQkJaW50IHNpemUsIHUzMiAqdmFsdWUpCit7CisJdTMyIG47CisJdTMyICphZGRyOworCisJbiA9IHdoZXJlICUgNDsKKworCWFkZHIgPSBpeHAyMDAwX3BjaV9jb25maWdfYWRkcihidXMtPm51bWJlciwgZGV2Zm4sIHdoZXJlKTsKKwlpZiAoIWFkZHIpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwlwY2lfbWFzdGVyX2Fib3J0cyA9IDA7CisJKnZhbHVlID0gKCphZGRyID4+ICg4Km4pKSAmIGJ5dGVtYXNrW3NpemVdOworCWlmIChwY2lfbWFzdGVyX2Fib3J0cykgeworCQlwY2lfbWFzdGVyX2Fib3J0cyA9IDA7CisJCSp2YWx1ZSA9IDB4ZmZmZmZmZmY7CisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisJfQorCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworLyoKKyAqIFdlIGRvbid0IGRvIGVycm9yIGNoZWNrcyBieSBjYWxsbGluZyBjbGVhcl9tYXN0ZXJfYWJvcnRzKCkgYi9jIHRoZQorICogYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSBjYWxsZXIgZGlkIGEgcmVhZCBmaXJzdCB0byBtYWtlIHN1cmUgYSBkZXZpY2UKKyAqIGV4aXN0cy4KKyAqLworaW50IGl4cDIwMDBfcGNpX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwKKwkJCQlpbnQgc2l6ZSwgdTMyIHZhbHVlKQoreworCXUzMiBtYXNrOworCXUzMiAqYWRkcjsKKwl1MzIgdGVtcDsKKworCW1hc2sgPSB+KGJ5dGVtYXNrW3NpemVdIDw8ICgod2hlcmUgJSAweDQpICogOCkpOworCWFkZHIgPSBpeHAyMDAwX3BjaV9jb25maWdfYWRkcihidXMtPm51bWJlciwgZGV2Zm4sIHdoZXJlKTsKKwlpZiAoIWFkZHIpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisJdGVtcCA9ICh1MzIpICh2YWx1ZSkgPDwgKCh3aGVyZSAlIDB4NCkgKiA4KTsKKwkqYWRkciA9ICgqYWRkciAmIG1hc2spIHwgdGVtcDsKKworCWNsZWFyX21hc3Rlcl9hYm9ydHMoKTsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKKworc3RhdGljIHN0cnVjdCBwY2lfb3BzIGl4cDIwMDBfcGNpX29wcyA9IHsKKwkucmVhZAk9IGl4cDIwMDBfcGNpX3JlYWRfY29uZmlnLAorCS53cml0ZQk9IGl4cDIwMDBfcGNpX3dyaXRlX2NvbmZpZworfTsKKworc3RydWN0IHBjaV9idXMgKml4cDIwMDBfcGNpX3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzZGF0YSkKK3sKKwlyZXR1cm4gcGNpX3NjYW5fYnVzKHN5c2RhdGEtPmJ1c25yLCAmaXhwMjAwMF9wY2lfb3BzLCBzeXNkYXRhKTsKK30KKworCitpbnQgaXhwMjAwMF9wY2lfYWJvcnRfaGFuZGxlcih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCisJdm9sYXRpbGUgdTMyIHRlbXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXBjaV9tYXN0ZXJfYWJvcnRzID0gMTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl0ZW1wID0gKihJWFAyMDAwX1BDSV9DT05UUk9MKTsKKwlpZiAodGVtcCAmICgoMSA8PCA4KSB8ICgxIDw8IDUpKSkgeworCQlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX1BDSV9DT05UUk9MLCB0ZW1wKTsKKwl9CisKKwl0ZW1wID0gKihJWFAyMDAwX1BDSV9DTURTVEFUKTsKKwlpZiAodGVtcCAmICgxIDw8IDI5KSkgeworCQl3aGlsZSAodGVtcCAmICgxIDw8IDI5KSkgewkKKwkJCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfUENJX0NNRFNUQVQsIHRlbXApOworCQkJdGVtcCA9ICooSVhQMjAwMF9QQ0lfQ01EU1RBVCk7CisJCX0KKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJLyoKKwkgKiBJZiBpdCB3YXMgYW4gaW1wcmVjaXNlIGFib3J0LCB0aGVuIHdlIG5lZWQgdG8gY29ycmVjdCB0aGUKKwkgKiByZXR1cm4gYWRkcmVzcyB0byBiZSBfYWZ0ZXJfIHRoZSBpbnN0cnVjdGlvbi4KKwkgKi8KKwlpZiAoZnNyICYgKDEgPDwgMTApKQorCQlyZWdzLT5BUk1fcGMgKz0gNDsKKworCXJldHVybiAwOworfQorCitpbnQKK2NsZWFyX21hc3Rlcl9hYm9ydHModm9pZCkKK3sKKwl2b2xhdGlsZSB1MzIgdGVtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXRlbXAgPSAqKElYUDIwMDBfUENJX0NPTlRST0wpOworCWlmICh0ZW1wICYgKCgxIDw8IDgpIHwgKDEgPDwgNSkpKSB7CQorCQlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX1BDSV9DT05UUk9MLCB0ZW1wKTsKKwl9CisKKwl0ZW1wID0gKihJWFAyMDAwX1BDSV9DTURTVEFUKTsKKwlpZiAodGVtcCAmICgxIDw8IDI5KSkgeworCQl3aGlsZSAodGVtcCAmICgxIDw8IDI5KSkgeworCQkJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9QQ0lfQ01EU1RBVCwgdGVtcCk7CisJCQl0ZW1wID0gKihJWFAyMDAwX1BDSV9DTURTVEFUKTsKKwkJfQorCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2luaXQKK2l4cDIwMDBfcGNpX3ByZWluaXQodm9pZCkKK3sKKwlob29rX2ZhdWx0X2NvZGUoMTYrNiwgaXhwMjAwMF9wY2lfYWJvcnRfaGFuZGxlciwgU0lHQlVTLAorCQkJCSJQQ0kgY29uZmlnIGN5Y2xlIHRvIG5vbi1leGlzdGVudCBkZXZpY2UiKTsKK30KKworCisvKgorICogSVhQMjAwMCBzeXN0ZW1zIG9mdGVuIGhhdmUgbGFyZ2UgcmVzb3VyY2UgcmVxdWlyZW1lbnRzLCBzbyB3ZSBqdXN0CisgKiB1c2Ugb3VyIG93biByZXNvdXJjZSBzcGFjZS4KKyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpeHAyMDAwX3BjaV9tZW1fc3BhY2UgPSB7CisJLnN0YXJ0CT0gMHgwMDAwMDAwMCwKKwkuZW5kCT0gMHhmZmZmZmZmZiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkubmFtZQk9ICJQQ0kgTWVtIFNwYWNlIgorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpeHAyMDAwX3BjaV9pb19zcGFjZSA9IHsKKwkuc3RhcnQJPSAweDAwMDAwMDAwLAorCS5lbmQJPSAweGZmZmZmZmZmLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJLm5hbWUJPSAiUENJIEkvTyBTcGFjZSIKK307CisKK2ludCBpeHAyMDAwX3BjaV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKK3sKKwlpZiAobnIgPj0gMSkKKwkJcmV0dXJuIDA7CisKKwlzeXMtPnJlc291cmNlWzBdID0gJml4cDIwMDBfcGNpX2lvX3NwYWNlOworCXN5cy0+cmVzb3VyY2VbMV0gPSAmaXhwMjAwMF9wY2lfbWVtX3NwYWNlOworCXN5cy0+cmVzb3VyY2VbMl0gPSBOVUxMOworCisJcmV0dXJuIDE7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhY2I1ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9LY29uZmlnCkBAIC0wLDAgKzEsMTI3IEBACitpZiBBUkNIX0lYUDRYWAorCitjb25maWcgQVJDSF9TVVBQT1JUU19CSUdfRU5ESUFOCisJYm9vbAorCWRlZmF1bHQgeQorCittZW51ICJJbnRlbCBJWFA0eHggSW1wbGVtZW50YXRpb24gT3B0aW9ucyIKKworY29tbWVudCAiSVhQNHh4IFBsYXRmb3JtcyIKKworY29uZmlnIEFSQ0hfQVZJTEEKKwlib29sICJBdmlsYSIKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUgR2F0ZXdvcmtzCisJICBBdmlsYSBOZXR3b3JrIFBsYXRmb3JtLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHBsYXRmb3JtLAorCSAgc2VlIDxmaWxlOkRvY3VtZW50YXRpb24vYXJtL0lYUDR4eD4uCisKK2NvbmZpZyBBUkNIX0FESV9DT1lPVEUKKwlib29sICJDb3lvdGUiCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlIEFESSAKKwkgIEVuZ2luZWVyaW5nIENveW90ZSBHYXRld2F5IFJlZmVyZW5jZSBQbGF0Zm9ybS4gRm9yIG1vcmUKKwkgIGluZm9ybWF0aW9uIG9uIHRoaXMgcGxhdGZvcm0sIHNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2FybS9JWFA0eHg+LgorCitjb25maWcgQVJDSF9JWERQNDI1CisJYm9vbCAiSVhEUDQyNSIKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCBJbnRlbCdzIAorCSAgSVhEUDQyNSBEZXZlbG9wbWVudCBQbGF0Zm9ybSAoQWxzbyBrbm93biBhcyBSaWNoZmllbGQpLiAgCisJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHBsYXRmb3JtLCBzZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9hcm0vSVhQNHh4Pi4KKworY29uZmlnIE1BQ0hfSVhEUEc0MjUKKwlib29sICJJWERQRzQyNSIKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCBJbnRlbCdzCisJICBJWERQRzQyNSBEZXZlbG9wbWVudCBQbGF0Zm9ybSAoQWxzbyBrbm93biBhcyBNb250YWphZGUpLgorCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBwbGF0Zm9ybSwgc2VlIDxmaWxlOkRvY3VtZW50YXRpb24vYXJtL0lYUDR4eD4uCisKK2NvbmZpZyBNQUNIX0lYRFA0NjUKKwlib29sICJJWERQNDY1IgorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IEludGVsJ3MKKwkgIElYRFA0NjUgRGV2ZWxvcG1lbnQgUGxhdGZvcm0gKEFsc28ga25vd24gYXMgQk1QKS4KKwkgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgcGxhdGZvcm0sIHNlZSBEb2N1bWVudGF0aW9uL2FybS9JWFA0eHguCisKKworIworIyBJWENEUDExMDAgaXMgdGhlIGV4YWN0IHNhbWUgSFcgYXMgSVhEUDQyNSwgYnV0IHdpdGggYSBkaWZmZXJlbnQgbWFjaGluZSAKKyMgbnVtYmVyIGZyb20gdGhlIGJvb3Rsb2FkZXIgZHVlIHRvIG1hcmtldGluZyBtb25rZXlzLCBzbyB3ZSBqdXN0IGVuYWJsZSBpdCAKKyMgYnkgZGVmYXVsdCBpZiBJWERQNDI1IGlzIGVuYWJsZWQuCisjCitjb25maWcgQVJDSF9JWENEUDExMDAKKwlib29sIAorCWRlcGVuZHMgb24gQVJDSF9JWERQNDI1CisJZGVmYXVsdCB5CisKK2NvbmZpZyBBUkNIX1BSUE1DMTEwMAorCWJvb2wgIlByUE1DMTEwMCIKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUgTW90b3JvbGEKKwkgIFByUENNMTEwMCBQcm9jZXNzb3IgTWV6YW5pbmUgTW9kdWxlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgorCSAgdGhpcyBwbGF0Zm9ybSwgc2VlIDxmaWxlOkRvY3VtZW50YXRpb24vYXJtL0lYUDR4eD4uCisKKyMKKyMgQXZpbGEgYW5kIElYRFAgc2hhcmUgdGhlIHNhbWUgc291cmNlIGZvciBub3cuIFdpbGwgY2hhbmdlIGluIGZ1dHVyZQorIworY29uZmlnCUFSQ0hfSVhEUDRYWAorCWJvb2wKKwlkZXBlbmRzIG9uIEFSQ0hfSVhEUDQyNSB8fCBBUkNIX0FWSUxBIHx8IE1BQ0hfSVhEUDQ2NQorCWRlZmF1bHQgeQorCisjCisjIENlcnRhaW4gcmVnaXN0ZXJzIGFuZCBJUlFzIGFyZSBvbmx5IGVuYWJsZWQgaWYgc3VwcG9ydGluZyBJWFA0NjUgQ1BVcworIworY29uZmlnIENQVV9JWFA0NlgKKwlib29sCisJZGVwZW5kcyBvbiBNQUNIX0lYRFA0NjUKKwlkZWZhdWx0IHkKKworY29uZmlnIE1BQ0hfR1RXWDU3MTUKKwlib29sICJHZW10ZWsgV1g1NzE1IChMaW5rc3lzIFdSVjU0RykiCisJZGVwZW5kcyBvbiBBUkNIX0lYUDRYWAorCWhlbHAKKwkJVGhpcyBib2FyZCBpcyBjdXJyZW50bHkgaW5zaWRlIHRoZSBMaW5rc3lzIFdSVjU0RyBHYXRld2F5cy4KKworCQlJWFA0MjUgLSAyNjZtaHoKKwkJMzJtYiBTRFJBTQorCQk4bWIgRmxhc2gKKwkJbWluaVBDSSBzbG90IDAgZG9lcyBub3QgaGF2ZSBhIGNhcmQgY29ubmVjdG9yIHNvbGRlcmVkIHRvIHRoZSBib2FyZAorCQltaW5pUENJIHNsb3QgMSBoYXMgYW4gSVNMMzg4MCA4MDIuMTFnIGNhcmQgKFByaXNtNTQpCisJCW5wZTAgaXMgY29ubmVjdGVkIHRvIGEgS2VuZGluIEtTODk5NU0gU3dpdGNoICg0IHBvcnRzKQorCQlucGUxIGlzIHRoZSAid2FuIiBwb3J0CisJCSJDb25zb2xlIiBVQVJUIGlzIGF2YWlsYWJsZSBvbiBKMTEgYXMgY29uc29sZQorCQkiSGlnaCBTcGVlZCIgVUFSVCBpcyBuL2MgKGFzIGZhciBhcyBJIGNhbiB0ZWxsKQorCQkyMCBQaW4gQVJNL1hzY2FsZSBKVEFHIGludGVyZmFjZSBvbiBKMgorCisKK2NvbW1lbnQgIklYUDR4eCBPcHRpb25zIgorCitjb25maWcgSVhQNFhYX0lORElSRUNUX1BDSQorCWJvb2wgIlVzZSBpbmRpcmVjdCBQQ0kgbWVtb3J5IGFjY2VzcyIKKwloZWxwCisgICAgICAgICAgSVhQNHh4IHByb3ZpZGVzIHR3byBtZXRob2RzIG9mIGFjY2Vzc2luZyBQQ0kgbWVtb3J5IHNwYWNlOgorCisgICAgICAgICAgMSkgQSBkaXJlY3QgbWFwcGVkIHdpbmRvdyBmcm9tIDB4NDgwMDAwMDAgdG8gMHg0YmZmZmZmZiAoNjRNQikuCisgICAgICAgICAgICAgVG8gYWNjZXNzIFBDSSB2aWEgdGhpcyBzcGFjZSwgd2Ugc2ltcGx5IGlvcmVtYXAoKSB0aGUgQkFSCisgICAgICAgICAgICAgaW50byB0aGUga2VybmVsIGFuZCB3ZSBjYW4gdXNlIHRoZSBzdGFuZGFyZCByZWFkW2J3bF0vd3JpdGVbYndsXQorICAgICAgICAgICAgIG1hY3Jvcy4gVGhpcyBpcyB0aGUgcHJlZmVycmVkIG1ldGhvZCBkdWUgdG8gc3BlZWQgYnV0IGl0CisgICAgICAgICAgICAgbGltaXRzIHRoZSBzeXN0ZW0gdG8ganVzdCA2NE1CIG9mIFBDSSBtZW1vcnkuIFRoaXMgY2FuIGJlIAorICAgICAgICAgICAgIHByb2JsYW1hdGljIGlmIHVzaW5nIHZpZGVvIGNhcmRzIGFuZCBvdGhlciBtZW1vcnktaGVhdnkgZGV2aWNlcy4KKyAgICAgICAgICAKKyAgICAgICAgICAyKSBJZiA+IDY0TUIgb2YgbWVtb3J5IHNwYWNlIGlzIHJlcXVpcmVkLCB0aGUgSVhQNHh4IGNhbiBiZSAKKwkgICAgIGNvbmZpZ3VyZWQgdG8gdXNlIGluZGlyZWN0IHJlZ2lzdGVycyB0byBhY2Nlc3MgUENJIFRoaXMgYWxsb3dzIAorCSAgICAgZm9yIHVwIHRvIDEyOE1CICgweDQ4MDAwMDAwIHRvIDB4NGZmZmZmZmYpIG9mIG1lbW9yeSBvbiB0aGUgYnVzLiAKKwkgICAgIFRoZSBkaXNhZHZhbnRhZGdlIG9mIHRoaXMgaXMgdGhhdCBldmVyeSBQQ0kgYWNjZXNzIHJlcXVpcmVzIAorCSAgICAgdGhyZWUgbG9jYWwgcmVnaXN0ZXIgYWNjZXNzZXMgcGx1cyBhIHNwaW5sb2NrLCBidXQgaW4gc29tZSAKKwkgICAgIGNhc2VzIHRoZSBwZXJmb3JtYW5jZSBoaXQgaXMgYWNjZXB0YWJsZS4gSW4gYWRkaXRpb24sIHlvdSBjYW5ub3QgCisJICAgICBtbWFwKCkgUENJIGRldmljZXMgaW4gdGhpcyBjYXNlIGR1ZSB0byB0aGUgaW5kaXJlY3QgbmF0dXJlCisJICAgICBvZiB0aGUgUENJIHdpbmRvdy4KKworCSAgQnkgZGVmYXVsdCwgdGhlIGRpcmVjdCBtZXRob2QgaXMgdXNlZC4gQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdQorCSAgbmVlZCB0byB1c2UgdGhlIGluZGlyZWN0IG1ldGhvZCBpbnN0ZWFkLiBJZiB5b3UgZG9uJ3Qga25vdworCSAgd2hhdCB5b3UgbmVlZCwgbGVhdmUgdGhpcyBvcHRpb24gdW5zZWxlY3RlZC4KKworZW5kbWVudQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGVjYmRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMKKworb2JqLXkJKz0gY29tbW9uLm8gY29tbW9uLXBjaS5vIAorCitvYmotJChDT05GSUdfQVJDSF9JWERQNFhYKQkrPSBpeGRwNDI1LXBjaS5vIGl4ZHA0MjUtc2V0dXAubworb2JqLSQoQ09ORklHX01BQ0hfSVhEUEc0MjUpCSs9IGl4ZHBnNDI1LXBjaS5vIGNveW90ZS1zZXR1cC5vCitvYmotJChDT05GSUdfQVJDSF9BRElfQ09ZT1RFKQkrPSBjb3lvdGUtcGNpLm8gY295b3RlLXNldHVwLm8KK29iai0kKENPTkZJR19NQUNIX0dUV1g1NzE1KQkrPSBndHd4NTcxNS1wY2kubyBndHd4NTcxNS1zZXR1cC5vCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NGM1ODAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsMyBAQAorICAgenJlbGFkZHIteQk6PSAweDAwMDA4MDAwCitwYXJhbXNfcGh5cy15CTo9IDB4MDAwMDAxMDAKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLXBjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YmNkYjkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLXBjaS5jCkBAIC0wLDAgKzEsNTI3IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLXBjaS5jIAorICoKKyAqIElYUDRYWCBQQ0kgcm91dGluZXMgZm9yIGFsbCBwbGF0Zm9ybXMKKyAqCisgKiBNYWludGFpbmVyOiBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqIENvcHlyaWdodCAoQykgMjAwMyBHcmVnIFVuZ2VyZXIgPGdlcmdAc25hcGdlYXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworCisvKgorICogSVhQNHh4IFBDSSByZWFkIGZ1bmN0aW9uIGlzIGRlcGVuZGVudCBvbiB3aGV0aGVyIHdlIGFyZSAKKyAqIHJ1bm5pbmcgQTAgb3IgQjAgKEFwcGxlR2F0ZSkgc2lsaWNvbi4KKyAqLworaW50ICgqaXhwNHh4X3BjaV9yZWFkKSh1MzIgYWRkciwgdTMyIGNtZCwgdTMyKiBkYXRhKTsKKworLyoKKyAqIEJhc2UgYWRkcmVzcyBmb3IgUENJIHJlZ3NpdGVyIHJlZ2lvbgorICovCit1bnNpZ25lZCBsb25nIGl4cDR4eF9wY2lfcmVnX2Jhc2UgPSAwOworCisvKgorICogUENJIGNmZyBhbiBJL08gcm91dGluZXMgYXJlIGRvbmUgYnkgcHJvZ3JhbW1pbmcgYSAKKyAqIGNvbW1hbmQvYnl0ZSBlbmFibGUgcmVnaXN0ZXIsIGFuZCB0aGVuIHJlYWQvd3JpdGluZworICogdGhlIGRhdGEgZnJvbSBhIGRhdGEgcmVnc2l0ZXIuIFdlIG5lZWQgdG8gZW5zdXJlCisgKiB0aGVzZSB0cmFuc2FjdGlvbnMgYXJlIGF0b21pYyBvciB3ZSB3aWxsIGVuZCB1cAorICogd2l0aCBjb3JydXB0IGRhdGEgb24gdGhlIGJ1cyBvciBpbiBhIGRyaXZlci4KKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhpeHA0eHhfcGNpX2xvY2spOworCisvKgorICogUmVhZCBmcm9tIFBDSSBjb25maWcgc3BhY2UKKyAqLworc3RhdGljIHZvaWQgY3JwX3JlYWQodTMyIGFkX2NiZSwgdTMyICpkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJml4cDR4eF9wY2lfbG9jaywgZmxhZ3MpOworCSpQQ0lfQ1JQX0FEX0NCRSA9IGFkX2NiZTsKKwkqZGF0YSA9ICpQQ0lfQ1JQX1JEQVRBOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJml4cDR4eF9wY2lfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogV3JpdGUgdG8gUENJIGNvbmZpZyBzcGFjZQorICovCitzdGF0aWMgdm9pZCBjcnBfd3JpdGUodTMyIGFkX2NiZSwgdTMyIGRhdGEpCit7IAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJml4cDR4eF9wY2lfbG9jaywgZmxhZ3MpOworCSpQQ0lfQ1JQX0FEX0NCRSA9IENSUF9BRF9DQkVfV1JJVEUgfCBhZF9jYmU7CisJKlBDSV9DUlBfV0RBVEEgPSBkYXRhOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJml4cDR4eF9wY2lfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjaGVja19tYXN0ZXJfYWJvcnQodm9pZCkKK3sKKwkvKiBjaGVjayBNYXN0ZXIgQWJvcnQgYml0IGFmdGVyIGFjY2VzcyAqLworCXVuc2lnbmVkIGxvbmcgaXNyID0gKlBDSV9JU1I7CisKKwlpZiAoaXNyICYgUENJX0lTUl9QRkUpIHsKKwkJLyogbWFrZSBzdXJlIHRoZSBNYXN0ZXIgQWJvcnQgYml0IGlzIHJlc2V0ICovICAgIAorCQkqUENJX0lTUiA9IFBDSV9JU1JfUEZFOworCQlwcl9kZWJ1ZygiJXMgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGl4cDR4eF9wY2lfcmVhZF9lcnJhdGEodTMyIGFkZHIsIHUzMiBjbWQsIHUzMiogZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXR2YWwgPSAwOworCWludCBpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJml4cDR4eF9wY2lfbG9jaywgZmxhZ3MpOworCisJKlBDSV9OUF9BRCA9IGFkZHI7CisKKwkvKiAKKwkgKiBQQ0kgd29ya2Fyb3VuZCAgLSBvbmx5IHdvcmtzIGlmIE5QIFBDSSBzcGFjZSByZWFkcyBoYXZlIAorCSAqIG5vIHNpZGUgZWZmZWN0cyEhISBSZWFkIDggdGltZXMuIGxhc3Qgb25lIHdpbGwgYmUgZ29vZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCSpQQ0lfTlBfQ0JFID0gY21kOworCQkqZGF0YSA9ICpQQ0lfTlBfUkRBVEE7CisJCSpkYXRhID0gKlBDSV9OUF9SREFUQTsKKwl9CisKKwlpZihjaGVja19tYXN0ZXJfYWJvcnQoKSkKKwkJcmV0dmFsID0gMTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJml4cDR4eF9wY2lfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBpeHA0eHhfcGNpX3JlYWRfbm9fZXJyYXRhKHUzMiBhZGRyLCB1MzIgY21kLCB1MzIqIGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpeHA0eHhfcGNpX2xvY2ssIGZsYWdzKTsKKworCSpQQ0lfTlBfQUQgPSBhZGRyOworCisJLyogc2V0IHVwIGFuZCBleGVjdXRlIHRoZSByZWFkICovICAgIAorCSpQQ0lfTlBfQ0JFID0gY21kOworCisJLyogdGhlIHJlc3VsdCBvZiB0aGUgcmVhZCBpcyBub3cgaW4gTlBfUkRBVEEgKi8KKwkqZGF0YSA9ICpQQ0lfTlBfUkRBVEE7IAorCisJaWYoY2hlY2tfbWFzdGVyX2Fib3J0KCkpCisJCXJldHZhbCA9IDE7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpeHA0eHhfcGNpX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitpbnQgaXhwNHh4X3BjaV93cml0ZSh1MzIgYWRkciwgdTMyIGNtZCwgdTMyIGRhdGEpCit7ICAgIAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldHZhbCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXhwNHh4X3BjaV9sb2NrLCBmbGFncyk7CisKKwkqUENJX05QX0FEID0gYWRkcjsKKworCS8qIHNldCB1cCB0aGUgd3JpdGUgKi8KKwkqUENJX05QX0NCRSA9IGNtZDsKKworCS8qIGV4ZWN1dGUgdGhlIHdyaXRlIGJ5IHdyaXRpbmcgdG8gTlBfV0RBVEEgKi8KKwkqUENJX05QX1dEQVRBID0gZGF0YTsKKworCWlmKGNoZWNrX21hc3Rlcl9hYm9ydCgpKQorCQlyZXR2YWwgPSAxOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXhwNHh4X3BjaV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHUzMiBpeHA0eHhfY29uZmlnX2FkZHIodTggYnVzX251bSwgdTE2IGRldmZuLCBpbnQgd2hlcmUpCit7CisJdTMyIGFkZHI7CisJaWYgKCFidXNfbnVtKSB7CisJCS8qIHR5cGUgMCAqLworCQlhZGRyID0gQklUKDMyLVBDSV9TTE9UKGRldmZuKSkgfCAoKFBDSV9GVU5DKGRldmZuKSkgPDwgOCkgfCAKKwkJICAgICh3aGVyZSAmIH4zKTsJCisJfSBlbHNlIHsKKwkJLyogdHlwZSAxICovCisJCWFkZHIgPSAoYnVzX251bSA8PCAxNikgfCAoKFBDSV9TTE9UKGRldmZuKSkgPDwgMTEpIHwgCisJCQkoKFBDSV9GVU5DKGRldmZuKSkgPDwgOCkgfCAod2hlcmUgJiB+MykgfCAxOworCX0KKwlyZXR1cm4gYWRkcjsKK30KKworLyoKKyAqIE1hc2sgdGFibGUsIGJpdHMgdG8gbWFzayBmb3IgcXVhbnRpdHkgb2Ygc2l6ZSAxLCAyIG9yIDQgYnl0ZXMuCisgKiAwIGFuZCAzIGFyZSBub3QgdmFsaWQgaW5kZXhlcy4uLgorICovCitzdGF0aWMgdTMyIGJ5dGVtYXNrW10gPSB7CisJLyowKi8JMCwKKwkvKjEqLwkweGZmLAorCS8qMiovCTB4ZmZmZiwKKwkvKjMqLwkwLAorCS8qNCovCTB4ZmZmZmZmZmYsCit9OworCitzdGF0aWMgdTMyIGxvY2FsX2J5dGVfbGFuZV9lbmFibGVfYml0cyh1MzIgbiwgaW50IHNpemUpCit7CisJaWYgKHNpemUgPT0gMSkKKwkJcmV0dXJuICgweGYgJiB+QklUKG4pKSA8PCBDUlBfQURfQ0JFX0JFU0w7CisJaWYgKHNpemUgPT0gMikKKwkJcmV0dXJuICgweGYgJiB+KEJJVChuKSB8IEJJVChuKzEpKSkgPDwgQ1JQX0FEX0NCRV9CRVNMOworCWlmIChzaXplID09IDQpCisJCXJldHVybiAwOworCXJldHVybiAweGZmZmZmZmZmOworfQorCitzdGF0aWMgaW50IGxvY2FsX3JlYWRfY29uZmlnKGludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsdWUpCit7IAorCXUzMiBuLCBkYXRhOworCXByX2RlYnVnKCJsb2NhbF9yZWFkX2NvbmZpZyBmcm9tICVkIHNpemUgJWRcbiIsIHdoZXJlLCBzaXplKTsKKwluID0gd2hlcmUgJSA0OworCWNycF9yZWFkKHdoZXJlICYgfjMsICZkYXRhKTsKKwkqdmFsdWUgPSAoZGF0YSA+PiAoOCpuKSkgJiBieXRlbWFza1tzaXplXTsKKwlwcl9kZWJ1ZygibG9jYWxfcmVhZF9jb25maWcgcmVhZCAlI3hcbiIsICp2YWx1ZSk7CisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIGludCBsb2NhbF93cml0ZV9jb25maWcoaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbHVlKQoreworCXUzMiBuLCBieXRlX2VuYWJsZXMsIGRhdGE7CisJcHJfZGVidWcoImxvY2FsX3dyaXRlX2NvbmZpZyAlI3ggdG8gJWQgc2l6ZSAlZFxuIiwgdmFsdWUsIHdoZXJlLCBzaXplKTsKKwluID0gd2hlcmUgJSA0OworCWJ5dGVfZW5hYmxlcyA9IGxvY2FsX2J5dGVfbGFuZV9lbmFibGVfYml0cyhuLCBzaXplKTsKKwlpZiAoYnl0ZV9lbmFibGVzID09IDB4ZmZmZmZmZmYpCisJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7CisJZGF0YSA9IHZhbHVlIDw8ICg4Km4pOworCWNycF93cml0ZSgod2hlcmUgJiB+MykgfCBieXRlX2VuYWJsZXMsIGRhdGEpOworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0YXRpYyB1MzIgYnl0ZV9sYW5lX2VuYWJsZV9iaXRzKHUzMiBuLCBpbnQgc2l6ZSkKK3sKKwlpZiAoc2l6ZSA9PSAxKQorCQlyZXR1cm4gKDB4ZiAmIH5CSVQobikpIDw8IDQ7CisJaWYgKHNpemUgPT0gMikKKwkJcmV0dXJuICgweGYgJiB+KEJJVChuKSB8IEJJVChuKzEpKSkgPDwgNDsKKwlpZiAoc2l6ZSA9PSA0KQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMHhmZmZmZmZmZjsKK30KKworc3RhdGljIGludCBpeHA0eHhfcGNpX3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWx1ZSkKK3sKKwl1MzIgbiwgYnl0ZV9lbmFibGVzLCBhZGRyLCBkYXRhOworCXU4IGJ1c19udW0gPSBidXMtPm51bWJlcjsKKworCXByX2RlYnVnKCJyZWFkX2NvbmZpZyBmcm9tICVkIHNpemUgJWQgZGV2ICVkOiVkOiVkXG4iLCB3aGVyZSwgc2l6ZSwKKwkJYnVzX251bSwgUENJX1NMT1QoZGV2Zm4pLCBQQ0lfRlVOQyhkZXZmbikpOworCisJKnZhbHVlID0gMHhmZmZmZmZmZjsKKwluID0gd2hlcmUgJSA0OworCWJ5dGVfZW5hYmxlcyA9IGJ5dGVfbGFuZV9lbmFibGVfYml0cyhuLCBzaXplKTsKKwlpZiAoYnl0ZV9lbmFibGVzID09IDB4ZmZmZmZmZmYpCisJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7CisKKwlhZGRyID0gaXhwNHh4X2NvbmZpZ19hZGRyKGJ1c19udW0sIGRldmZuLCB3aGVyZSk7CisJaWYgKGl4cDR4eF9wY2lfcmVhZChhZGRyLCBieXRlX2VuYWJsZXMgfCBOUF9DTURfQ09ORklHUkVBRCwgJmRhdGEpKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJKnZhbHVlID0gKGRhdGEgPj4gKDgqbikpICYgYnl0ZW1hc2tbc2l6ZV07CisJcHJfZGVidWcoInJlYWRfY29uZmlnX2J5dGUgcmVhZCAlI3hcbiIsICp2YWx1ZSk7CisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIGludCBpeHA0eHhfcGNpX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCAgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsdWUpCit7CisJdTMyIG4sIGJ5dGVfZW5hYmxlcywgYWRkciwgZGF0YTsKKwl1OCBidXNfbnVtID0gYnVzLT5udW1iZXI7CisKKwlwcl9kZWJ1Zygid3JpdGVfY29uZmlnX2J5dGUgJSN4IHRvICVkIHNpemUgJWQgZGV2ICVkOiVkOiVkXG4iLCB2YWx1ZSwgd2hlcmUsCisJCXNpemUsIGJ1c19udW0sIFBDSV9TTE9UKGRldmZuKSwgUENJX0ZVTkMoZGV2Zm4pKTsKKworCW4gPSB3aGVyZSAlIDQ7CisJYnl0ZV9lbmFibGVzID0gYnl0ZV9sYW5lX2VuYWJsZV9iaXRzKG4sIHNpemUpOworCWlmIChieXRlX2VuYWJsZXMgPT0gMHhmZmZmZmZmZikKKwkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKKworCWFkZHIgPSBpeHA0eHhfY29uZmlnX2FkZHIoYnVzX251bSwgZGV2Zm4sIHdoZXJlKTsKKwlkYXRhID0gdmFsdWUgPDwgKDgqbik7CisJaWYgKGl4cDR4eF9wY2lfd3JpdGUoYWRkciwgYnl0ZV9lbmFibGVzIHwgTlBfQ01EX0NPTkZJR1dSSVRFLCBkYXRhKSkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0cnVjdCBwY2lfb3BzIGl4cDR4eF9vcHMgPSB7CisJLnJlYWQgPSAgaXhwNHh4X3BjaV9yZWFkX2NvbmZpZywKKwkud3JpdGUgPSBpeHA0eHhfcGNpX3dyaXRlX2NvbmZpZywKK307CisKKy8qCisgKiBQQ0kgYWJvcnQgaGFuZGxlcgorICovCitzdGF0aWMgaW50IGFib3J0X2hhbmRsZXIodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1MzIgaXNyLCBzdGF0dXM7CisKKwlpc3IgPSAqUENJX0lTUjsKKwlsb2NhbF9yZWFkX2NvbmZpZyhQQ0lfU1RBVFVTLCAyLCAmc3RhdHVzKTsKKwlwcl9kZWJ1ZygiUENJOiBhYm9ydF9oYW5kbGVyIGFkZHIgPSAlI2x4LCBpc3IgPSAlI3gsICIKKwkJInN0YXR1cyA9ICUjeFxuIiwgYWRkciwgaXNyLCBzdGF0dXMpOworCisJLyogbWFrZSBzdXJlIHRoZSBNYXN0ZXIgQWJvcnQgYml0IGlzIHJlc2V0ICovICAgIAorCSpQQ0lfSVNSID0gUENJX0lTUl9QRkU7CisJc3RhdHVzIHw9IFBDSV9TVEFUVVNfUkVDX01BU1RFUl9BQk9SVDsKKwlsb2NhbF93cml0ZV9jb25maWcoUENJX1NUQVRVUywgMiwgc3RhdHVzKTsKKworCS8qCisJICogSWYgaXQgd2FzIGFuIGltcHJlY2lzZSBhYm9ydCwgdGhlbiB3ZSBuZWVkIHRvIGNvcnJlY3QgdGhlCisJICogcmV0dXJuIGFkZHJlc3MgdG8gYmUgX2FmdGVyXyB0aGUgaW5zdHJ1Y3Rpb24uCisJICovCisJaWYgKGZzciAmICgxIDw8IDEwKSkKKwkJcmVncy0+QVJNX3BjICs9IDQ7CisKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogU2V0dXAgRE1BIG1hc2sgdG8gNjRNQiBvbiBQQ0kgZGV2aWNlcy4gSWdub3JlIGFsbCBvdGhlciBkZXZpY2VzLgorICovCitzdGF0aWMgaW50IGl4cDR4eF9wY2lfcGxhdGZvcm1fbm90aWZ5KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpZihkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlKSB7CisJCSpkZXYtPmRtYV9tYXNrID0gIFNaXzY0TSAtIDE7CisJCWRldi0+Y29oZXJlbnRfZG1hX21hc2sgPSBTWl82NE0gLSAxOworCQlkbWFib3VuY2VfcmVnaXN0ZXJfZGV2KGRldiwgMjA0OCwgNDA5Nik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl4cDR4eF9wY2lfcGxhdGZvcm1fbm90aWZ5X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWYoZGV2LT5idXMgPT0gJnBjaV9idXNfdHlwZSkgeworCQlkbWFib3VuY2VfdW5yZWdpc3Rlcl9kZXYoZGV2KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBkbWFfbmVlZHNfYm91bmNlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIChkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlICkgJiYgKChkbWFfYWRkciArIHNpemUpID49IFNaXzY0TSk7Cit9CisKK3ZvaWQgX19pbml0IGl4cDR4eF9wY2lfcHJlaW5pdCh2b2lkKQoreyAgCisJdW5zaWduZWQgbG9uZyBwcm9jZXNzb3JfaWQ7CisKKwlhc20oIm1yYyBwMTUsIDAsICUwLCBjcjAsIGNyMCwgMDsiIDogIj1yIihwcm9jZXNzb3JfaWQpIDopOworCisJLyoKKwkgKiBEZXRlcm1pbmUgd2hpY2ggUENJIHJlYWQgbWV0aG9kIHRvIHVzZS4KKwkgKiBSZXYgMCBJWFA0MjUgcmVxdWlyZXMgd29ya2Fyb3VuZC4KKwkgKi8KKwlpZiAoIShwcm9jZXNzb3JfaWQgJiAweGYpICYmICFjcHVfaXNfaXhwNDZ4KCkpIHsKKwkJcHJpbnRrKCJQQ0k6IElYUDQyeCBBMCBzaWxpY29uIGRldGVjdGVkIC0gIgorCQkJIlBDSSBOb24tUHJlZmV0Y2ggV29ya2Fyb3VuZCBFbmFibGVkXG4iKTsKKwkJaXhwNHh4X3BjaV9yZWFkID0gaXhwNHh4X3BjaV9yZWFkX2VycmF0YTsKKwl9IGVsc2UKKwkJaXhwNHh4X3BjaV9yZWFkID0gaXhwNHh4X3BjaV9yZWFkX25vX2VycmF0YTsKKworCisJLyogaG9vayBpbiBvdXIgZmF1bHQgaGFuZGxlciBmb3IgUENJIGVycm9ycyAqLworCWhvb2tfZmF1bHRfY29kZSgxNis2LCBhYm9ydF9oYW5kbGVyLCBTSUdCVVMsICJpbXByZWNpc2UgZXh0ZXJuYWwgYWJvcnQiKTsKKworCXByX2RlYnVnKCJzZXR1cCBQQ0ktQUhCKGluYm91bmQpIGFuZCBBSEItUENJKG91dGJvdW5kKSBhZGRyZXNzIG1hcHBpbmdzXG4iKTsKKworCS8qIAorCSAqIFdlIHVzZSBpZGVudGl0eSBBSEItPlBDSSBhZGRyZXNzIHRyYW5zbGF0aW9uCisJICogaW4gdGhlIDB4NDgwMDAwMDAgdG8gMHg0YmZmZmZmZiBhZGRyZXNzIHNwYWNlCisJICovCisJKlBDSV9QQ0lNRU1CQVNFID0gMHg0ODQ5NEE0QjsKKworCS8qIAorCSAqIFdlIGFsc28gdXNlIGlkZW50aXR5IFBDSS0+QUhCIGFkZHJlc3MgdHJhbnNsYXRpb24KKwkgKiBpbiA0IDE2TUIgQkFScyB0aGF0IGJlZ2luIGF0IHRoZSBwaHlzaWNhbCBtZW1vcnkgc3RhcnQKKwkgKi8KKwkqUENJX0FIQk1FTUJBU0UgPSAoUEhZU19PRkZTRVQgJiAweEZGMDAwMDAwKSArIAorCQkoKFBIWVNfT0ZGU0VUICYgMHhGRjAwMDAwMCkgPj4gOCkgKworCQkoKFBIWVNfT0ZGU0VUICYgMHhGRjAwMDAwMCkgPj4gMTYpICsKKwkJKChQSFlTX09GRlNFVCAmIDB4RkYwMDAwMDApID4+IDI0KSArCisJCTB4MDAwMTAyMDM7CisKKwlpZiAoKlBDSV9DU1IgJiBQQ0lfQ1NSX0hPU1QpIHsKKwkJcHJpbnRrKCJQQ0k6IElYUDR4eCBpcyBob3N0XG4iKTsKKworCQlwcl9kZWJ1Zygic2V0dXAgQkFScyBpbiBjb250cm9sbGVyXG4iKTsKKworCQkvKgorCQkgKiBXZSBjb25maWd1cmUgdGhlIFBDSSBpbmJvdW5kIG1lbW9yeSB3aW5kb3dzIHRvIGJlIAorCQkgKiAxOjEgbWFwcGVkIHRvIFNEUkFNCisJCSAqLworCQlsb2NhbF93cml0ZV9jb25maWcoUENJX0JBU0VfQUREUkVTU18wLCA0LCBQSFlTX09GRlNFVCArIDB4MDAwMDAwMDApOworCQlsb2NhbF93cml0ZV9jb25maWcoUENJX0JBU0VfQUREUkVTU18xLCA0LCBQSFlTX09GRlNFVCArIDB4MDEwMDAwMDApOworCQlsb2NhbF93cml0ZV9jb25maWcoUENJX0JBU0VfQUREUkVTU18yLCA0LCBQSFlTX09GRlNFVCArIDB4MDIwMDAwMDApOworCQlsb2NhbF93cml0ZV9jb25maWcoUENJX0JBU0VfQUREUkVTU18zLCA0LCBQSFlTX09GRlNFVCArIDB4MDMwMDAwMDApOworCisJCS8qCisJCSAqIEVuYWJsZSBDU1Igd2luZG93IGF0IDB4ZmYwMDAwMDAuCisJCSAqLworCQlsb2NhbF93cml0ZV9jb25maWcoUENJX0JBU0VfQUREUkVTU180LCA0LCAweGZmMDAwMDA4KTsKKworCQkvKgorCQkgKiBFbmFibGUgdGhlIElPIHdpbmRvdyB0byBiZSB3YXkgdXAgaGlnaCwgYXQgMHhmZmZmZmMwMAorCQkgKi8KKwkJbG9jYWxfd3JpdGVfY29uZmlnKFBDSV9CQVNFX0FERFJFU1NfNSwgNCwgMHhmZmZmZmMwMSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCJQQ0k6IElYUDR4eCBpcyB0YXJnZXQgLSBObyBidXMgc2NhbiBwZXJmb3JtZWRcbiIpOworCX0KKworCXByaW50aygiUENJOiBJWFA0eHggVXNpbmcgJXMgYWNjZXNzIGZvciBtZW1vcnkgc3BhY2VcbiIsCisjaWZuZGVmIENPTkZJR19JWFA0WFhfSU5ESVJFQ1RfUENJCisJCQkiZGlyZWN0IgorI2Vsc2UKKwkJCSJpbmRpcmVjdCIKKyNlbmRpZgorCQkpOworCisJcHJfZGVidWcoImNsZWFyIGVycm9yIGJpdHMgaW4gSVNSXG4iKTsKKwkqUENJX0lTUiA9IFBDSV9JU1JfUFNFIHwgUENJX0lTUl9QRkUgfCBQQ0lfSVNSX1BQRSB8IFBDSV9JU1JfQUhCRTsKKworCS8qCisJICogU2V0IEluaXRpYWxpemUgQ29tcGxldGUgaW4gUENJIENvbnRyb2wgUmVnaXN0ZXI6IGFsbG93IElYUDRYWCB0bworCSAqIHJlc3BvbmQgdG8gUENJIGNvbmZpZ3VyYXRpb24gY3ljbGVzLiBTcGVjaWZ5IHRoYXQgdGhlIEFIQiBidXMgaXMKKwkgKiBvcGVyYXRpbmcgaW4gYmlnIGVuZGlhbiBtb2RlLiBTZXQgdXAgYnl0ZSBsYW5lIHN3YXBwaW5nIGJldHdlZW4gCisJICogbGl0dGxlLWVuZGlhbiBQQ0kgYW5kIHRoZSBiaWctZW5kaWFuIEFIQiBidXMgCisJICovCisjaWZkZWYgX19BUk1FQl9fCisJKlBDSV9DU1IgPSBQQ0lfQ1NSX0lDIHwgUENJX0NTUl9BQkUgfCBQQ0lfQ1NSX1BEUyB8IFBDSV9DU1JfQURTOworI2Vsc2UKKwkqUENJX0NTUiA9IFBDSV9DU1JfSUM7CisjZW5kaWYKKworCXByX2RlYnVnKCJET05FXG4iKTsKK30KKworaW50IGl4cDR4eF9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCWlmIChuciA+PSAxKQorCQlyZXR1cm4gMDsKKworCXJlcyA9IGttYWxsb2Moc2l6ZW9mKCpyZXMpICogMiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCS8qIAorCQkgKiBJZiB3ZSdyZSBvdXQgb2YgbWVtb3J5IHRoaXMgZWFybHksIHNvbWV0aGluZyBpcyB3cm9uZywKKwkJICogc28gd2UgbWlnaHQgYXMgd2VsbCBjYXRjaCBpdCBoZXJlLgorCQkgKi8KKwkJcGFuaWMoIlBDSTogdW5hYmxlIHRvIGFsbG9jYXRlIHJlc291cmNlcz9cbiIpOworCX0KKwltZW1zZXQocmVzLCAwLCBzaXplb2YoKnJlcykgKiAyKTsKKworCWxvY2FsX3dyaXRlX2NvbmZpZyhQQ0lfQ09NTUFORCwgMiwgUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKTsKKworCXJlc1swXS5uYW1lID0gIlBDSSBJL08gU3BhY2UiOworCXJlc1swXS5zdGFydCA9IDB4MDAwMDEwMDA7CisJcmVzWzBdLmVuZCA9IDB4ZmZmZjAwMDA7CisJcmVzWzBdLmZsYWdzID0gSU9SRVNPVVJDRV9JTzsKKworCXJlc1sxXS5uYW1lID0gIlBDSSBNZW1vcnkgU3BhY2UiOworCXJlc1sxXS5zdGFydCA9IDB4NDgwMDAwMDA7CisjaWZuZGVmIENPTkZJR19JWFA0WFhfSU5ESVJFQ1RfUENJCisJcmVzWzFdLmVuZCA9IDB4NGJmZmZmZmY7CisjZWxzZQorCXJlc1sxXS5lbmQgPSAweDRmZmZmZmZmOworI2VuZGlmCisJcmVzWzFdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisKKwlyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZyZXNbMF0pOworCXJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmcmVzWzFdKTsKKworCXN5cy0+cmVzb3VyY2VbMF0gPSAmcmVzWzBdOworCXN5cy0+cmVzb3VyY2VbMV0gPSAmcmVzWzFdOworCXN5cy0+cmVzb3VyY2VbMl0gPSBOVUxMOworCisJcGxhdGZvcm1fbm90aWZ5ID0gaXhwNHh4X3BjaV9wbGF0Zm9ybV9ub3RpZnk7CisJcGxhdGZvcm1fbm90aWZ5X3JlbW92ZSA9IGl4cDR4eF9wY2lfcGxhdGZvcm1fbm90aWZ5X3JlbW92ZTsKKworCXJldHVybiAxOworfQorCitzdHJ1Y3QgcGNpX2J1cyAqaXhwNHh4X3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQoreworCXJldHVybiBwY2lfc2Nhbl9idXMoc3lzLT5idXNuciwgJml4cDR4eF9vcHMsIHN5cyk7Cit9CisKKy8qCisgKiBXZSBvdmVycmlkZSB0aGVzZSBzbyB3ZSBwcm9wZXJseSBkbyBkbWFib3VuY2Ugb3RoZXJ3aXNlIGRyaXZlcnMKKyAqIGFyZSBhYmxlIHRvIHNldCB0aGUgZG1hX21hc2sgdG8gMHhmZmZmZmZmZiBhbmQgd2UgY2FuIG5vIGxvbmdlcgorICogdHJhcCBib3VuY2VzLiA6KAorICoKKyAqIFdlIGp1c3QgcmV0dXJuIHRydWUgb24gZXZlcnloaW5nIGV4Y2VwdCBmb3IgPCA2NE1CIGluIHdoaWNoIGNhc2UgCisgKiB3ZSB3aWxsIGZhaWwgbWlzZXJhbGJ5IGFuZCBkaWUgc2luY2Ugd2UgY2FuJ3QgaGFuZGxlIHRoYXQgY2FzZS4KKyAqLworaW50CitwY2lfc2V0X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU2NCBtYXNrKQoreworCWlmIChtYXNrID49IFNaXzY0TSAtIDEgKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAtRUlPOworfQorICAgIAoraW50CitwY2lfZGFjX3NldF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1NjQgbWFzaykKK3sKKwlpZiAobWFzayA+PSBTWl82NE0gLSAxICkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLUVJTzsKK30KKworaW50CitwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKmRldiwgdTY0IG1hc2spCit7CisJaWYgKG1hc2sgPj0gU1pfNjRNIC0gMSApCisJCXJldHVybiAwOworCisJcmV0dXJuIC1FSU87Cit9CisKK0VYUE9SVF9TWU1CT0wocGNpX3NldF9kbWFfbWFzayk7CitFWFBPUlRfU1lNQk9MKHBjaV9kYWNfc2V0X2RtYV9tYXNrKTsKK0VYUE9SVF9TWU1CT0wocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKTsKK0VYUE9SVF9TWU1CT0woaXhwNHh4X3BjaV9yZWFkKTsKK0VYUE9SVF9TWU1CT0woaXhwNHh4X3BjaV93cml0ZSk7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY3YmEwMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCkBAIC0wLDAgKzEsMzUzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKKyAqCisgKiBHZW5lcmljIGNvZGUgc2hhcmVkIGFjcm9zcyBhbGwgSVhQNFhYIHBsYXRmb3JtcworICoKKyAqIE1haW50YWluZXI6IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+CisgKgorICogQ29weXJpZ2h0IDIwMDIgKGMpIEludGVsIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgMjAwMy0yMDA0IChjKSBNb250YVZpc3RhLCBTb2Z0d2FyZSwgSW5jLiAKKyAqIAorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyAKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSAKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworZW51bSBpeHA0eHhfaXJxX3R5cGUgeworCUlYUDRYWF9JUlFfTEVWRUwsIElYUDRYWF9JUlFfRURHRQorfTsKK3N0YXRpYyB2b2lkIGl4cDR4eF9jb25maWdfaXJxKHVuc2lnbmVkIGlycSwgZW51bSBpeHA0eHhfaXJxX3R5cGUgdHlwZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHUElPIGFjY2VzIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb25maWd1cmUgR1BJTyBsaW5lIGZvciBpbnB1dCwgaW50ZXJydXB0LCBvciBvdXRwdXQgb3BlcmF0aW9uCisgKgorICogVE9ETzogRW5hYmxlL2Rpc2FibGUgdGhlIGlycV9kZXNjIGJhc2VkIG9uIGludGVycnVwdCBvciBvdXRwdXQgbW9kZS4KKyAqIFRPRE86IFNob3VsZCB0aGVzZSBiZSBuYW1lZCBpeHA0eHhfZ3Bpb18/CisgKi8KK3ZvaWQgZ3Bpb19saW5lX2NvbmZpZyh1OCBsaW5lLCB1MzIgc3R5bGUpCit7CisJc3RhdGljIGNvbnN0IGludCBncGlvMmlycVtdID0geworCQk2LCA3LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjkKKwl9OworCXUzMiBlbmFibGU7CisJdm9sYXRpbGUgdTMyICppbnRfcmVnOworCXUzMiBpbnRfc3R5bGU7CisJZW51bSBpeHA0eHhfaXJxX3R5cGUgaXJxX3R5cGU7CisKKwllbmFibGUgPSAqSVhQNFhYX0dQSU9fR1BPRVI7CisKKwlpZiAoc3R5bGUgJiBJWFA0WFhfR1BJT19PVVQpIHsKKwkJZW5hYmxlICY9IH4oKDEpIDw8IGxpbmUpOworCX0gZWxzZSBpZiAoc3R5bGUgJiBJWFA0WFhfR1BJT19JTikgeworCQllbmFibGUgfD0gKCgxKSA8PCBsaW5lKTsKKworCQlzd2l0Y2ggKHN0eWxlICYgSVhQNFhYX0dQSU9fSU5UU1RZTEVfTUFTSykKKwkJeworCQljYXNlIChJWFA0WFhfR1BJT19BQ1RJVkVfSElHSCk6CisJCQlpbnRfc3R5bGUgPSBJWFA0WFhfR1BJT19TVFlMRV9BQ1RJVkVfSElHSDsKKwkJCWlycV90eXBlID0gSVhQNFhYX0lSUV9MRVZFTDsKKwkJCWJyZWFrOworCQljYXNlIChJWFA0WFhfR1BJT19BQ1RJVkVfTE9XKToKKwkJCWludF9zdHlsZSA9IElYUDRYWF9HUElPX1NUWUxFX0FDVElWRV9MT1c7CisJCQlpcnFfdHlwZSA9IElYUDRYWF9JUlFfTEVWRUw7CisJCQlicmVhazsKKwkJY2FzZSAoSVhQNFhYX0dQSU9fUklTSU5HX0VER0UpOgorCQkJaW50X3N0eWxlID0gSVhQNFhYX0dQSU9fU1RZTEVfUklTSU5HX0VER0U7CisJCQlpcnFfdHlwZSA9IElYUDRYWF9JUlFfRURHRTsKKwkJCWJyZWFrOworCQljYXNlIChJWFA0WFhfR1BJT19GQUxMSU5HX0VER0UpOgorCQkJaW50X3N0eWxlID0gSVhQNFhYX0dQSU9fU1RZTEVfRkFMTElOR19FREdFOworCQkJaXJxX3R5cGUgPSBJWFA0WFhfSVJRX0VER0U7CisJCQlicmVhazsKKwkJY2FzZSAoSVhQNFhYX0dQSU9fVFJBTlNJVElPTkFMKToKKwkJCWludF9zdHlsZSA9IElYUDRYWF9HUElPX1NUWUxFX1RSQU5TSVRJT05BTDsKKwkJCWlycV90eXBlID0gSVhQNFhYX0lSUV9FREdFOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpbnRfc3R5bGUgPSBJWFA0WFhfR1BJT19TVFlMRV9BQ1RJVkVfSElHSDsKKwkJCWlycV90eXBlID0gSVhQNFhYX0lSUV9MRVZFTDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHN0eWxlICYgSVhQNFhYX0dQSU9fSU5UU1RZTEVfTUFTSykKKwkJCWl4cDR4eF9jb25maWdfaXJxKGdwaW8yaXJxW2xpbmVdLCBpcnFfdHlwZSk7CisKKwkJaWYgKGxpbmUgPj0gOCkgewkvKiBwaW5zIDgtMTUgKi8gCisJCQlsaW5lIC09IDg7CisJCQlpbnRfcmVnID0gSVhQNFhYX0dQSU9fR1BJVDJSOworCQl9CisJCWVsc2UgewkJCS8qIHBpbnMgMC03ICovCisJCQlpbnRfcmVnID0gSVhQNFhYX0dQSU9fR1BJVDFSOworCQl9CisKKwkJLyogQ2xlYXIgdGhlIHN0eWxlIGZvciB0aGUgYXBwcm9wcmlhdGUgcGluICovCisJCSppbnRfcmVnICY9IH4oSVhQNFhYX0dQSU9fU1RZTEVfQ0xFQVIgPDwgCisJCSAgICAJCShsaW5lICogSVhQNFhYX0dQSU9fU1RZTEVfU0laRSkpOworCisJCS8qIFNldCB0aGUgbmV3IHN0eWxlICovCisJCSppbnRfcmVnIHw9IChpbnRfc3R5bGUgPDwgKGxpbmUgKiBJWFA0WFhfR1BJT19TVFlMRV9TSVpFKSk7CisJfQorCisJKklYUDRYWF9HUElPX0dQT0VSID0gZW5hYmxlOworfQorCitFWFBPUlRfU1lNQk9MKGdwaW9fbGluZV9jb25maWcpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSVhQNHh4IGNoaXBzZXQgSS9PIG1hcHBpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBpeHA0eHhfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJewkvKiBVQVJULCBJbnRlcnJ1cHQgY3RybCwgR1BJTywgdGltZXJzLCBOUEVzLCBNQUNzLCBVU0IgLi4uLiAqLworCQkudmlydHVhbAk9IElYUDRYWF9QRVJJUEhFUkFMX0JBU0VfVklSVCwKKwkJLnBoeXNpY2FsCT0gSVhQNFhYX1BFUklQSEVSQUxfQkFTRV9QSFlTLAorCQkubGVuZ3RoCQk9IElYUDRYWF9QRVJJUEhFUkFMX1JFR0lPTl9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LCB7CS8qIEV4cGFuc2lvbiBCdXMgQ29uZmlnIFJlZ2lzdGVycyAqLworCQkudmlydHVhbAk9IElYUDRYWF9FWFBfQ0ZHX0JBU0VfVklSVCwKKwkJLnBoeXNpY2FsCT0gSVhQNFhYX0VYUF9DRkdfQkFTRV9QSFlTLAorCQkubGVuZ3RoCQk9IElYUDRYWF9FWFBfQ0ZHX1JFR0lPTl9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LCB7CS8qIFBDSSBSZWdpc3RlcnMgKi8KKwkJLnZpcnR1YWwJPSBJWFA0WFhfUENJX0NGR19CQVNFX1ZJUlQsCisJCS5waHlzaWNhbAk9IElYUDRYWF9QQ0lfQ0ZHX0JBU0VfUEhZUywKKwkJLmxlbmd0aAkJPSBJWFA0WFhfUENJX0NGR19SRUdJT05fU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfQorfTsKKwordm9pZCBfX2luaXQgaXhwNHh4X21hcF9pbyh2b2lkKQoreworICAJaW90YWJsZV9pbml0KGl4cDR4eF9pb19kZXNjLCBBUlJBWV9TSVpFKGl4cDR4eF9pb19kZXNjKSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElYUDR4eCBjaGlwc2V0IElSUSBoYW5kbGluZworICoKKyAqIFRPRE86IEdQSU8gSVJRcyBzaG91bGQgYmUgbWFya2VkIGludmFsaWQgdW50aWwgdGhlIHVzZXIgb2YgdGhlIElSUQorICogICAgICAgKGJlIGl0IFBDSSBvciBzb21ldGhpbmcgZWxzZSkgY29uZmlndXJlcyB0aGF0IEdQSU8gbGluZQorICogICAgICAgYXMgYW4gSVJRLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgaXhwNHh4X2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJaWYgKGNwdV9pc19peHA0NngoKSAmJiBpcnEgPj0gMzIpCisJCSpJWFA0WFhfSUNNUjIgJj0gfigxIDw8IChpcnEgLSAzMikpOworCWVsc2UKKwkJKklYUDRYWF9JQ01SICY9IH4oMSA8PCBpcnEpOworfQorCitzdGF0aWMgdm9pZCBpeHA0eHhfaXJxX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlmIChjcHVfaXNfaXhwNDZ4KCkgJiYgaXJxID49IDMyKQorCQkqSVhQNFhYX0lDTVIyIHw9ICgxIDw8IChpcnEgLSAzMikpOworCWVsc2UKKwkJKklYUDRYWF9JQ01SIHw9ICgxIDw8IGlycSk7Cit9CisKK3N0YXRpYyB2b2lkIGl4cDR4eF9pcnFfYWNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RhdGljIGludCBpcnEyZ3Bpb1szMl0gPSB7CisJCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsICAwLCAgMSwKKwkJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCQktMSwgLTEsIC0xLCAgMiwgIDMsICA0LCAgNSwgIDYsCisJCSA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIC0xLCAtMSwKKwl9OworCWludCBsaW5lID0gKGlycSA8IDMyKSA/IGlycTJncGlvW2lycV0gOiAtMTsKKworCWlmIChsaW5lID49IDApCisJCWdwaW9fbGluZV9pc3JfY2xlYXIobGluZSk7Cit9CisKKy8qCisgKiBMZXZlbCB0cmlnZ2VyZWQgaW50ZXJydXB0cyBvbiBHUElPIGxpbmVzIGNhbiBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUKKyAqIGludGVycnVwdCBjb25kaXRpb24gZGlzYXBwZWFycy4KKyAqLworc3RhdGljIHZvaWQgaXhwNHh4X2lycV9sZXZlbF91bm1hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlpeHA0eHhfaXJxX2FjayhpcnEpOworCWl4cDR4eF9pcnFfdW5tYXNrKGlycSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBpeHA0eHhfaXJxX2xldmVsX2NoaXAgPSB7CisJLmFjawk9IGl4cDR4eF9pcnFfbWFzaywKKwkubWFzawk9IGl4cDR4eF9pcnFfbWFzaywKKwkudW5tYXNrCT0gaXhwNHh4X2lycV9sZXZlbF91bm1hc2ssCit9OworCitzdGF0aWMgc3RydWN0IGlycWNoaXAgaXhwNHh4X2lycV9lZGdlX2NoaXAgPSB7CisJLmFjawk9IGl4cDR4eF9pcnFfYWNrLAorCS5tYXNrCT0gaXhwNHh4X2lycV9tYXNrLAorCS51bm1hc2sJPSBpeHA0eHhfaXJxX3VubWFzaywKK307CisKK3N0YXRpYyB2b2lkIGl4cDR4eF9jb25maWdfaXJxKHVuc2lnbmVkIGlycSwgZW51bSBpeHA0eHhfaXJxX3R5cGUgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIElYUDRYWF9JUlFfTEVWRUw6CisJCXNldF9pcnFfY2hpcChpcnEsICZpeHA0eHhfaXJxX2xldmVsX2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBkb19sZXZlbF9JUlEpOworCQlicmVhazsKKwljYXNlIElYUDRYWF9JUlFfRURHRToKKwkJc2V0X2lycV9jaGlwKGlycSwgJml4cDR4eF9pcnFfZWRnZV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgZG9fZWRnZV9JUlEpOworCQlicmVhazsKKwl9CisJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQpOworfQorCit2b2lkIF9faW5pdCBpeHA0eHhfaW5pdF9pcnEodm9pZCkKK3sKKwlpbnQgaSA9IDA7CisKKwkvKiBSb3V0ZSBhbGwgc291cmNlcyB0byBJUlEgaW5zdGVhZCBvZiBGSVEgKi8KKwkqSVhQNFhYX0lDTFIgPSAweDA7CisKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHQgKi8KKwkqSVhQNFhYX0lDTVIgPSAweDA7IAorCisJaWYgKGNwdV9pc19peHA0NngoKSkgeworCQkvKiBSb3V0ZSB1cHBlciAzMiBzb3VyY2VzIHRvIElSUSBpbnN0ZWFkIG9mIEZJUSAqLworCQkqSVhQNFhYX0lDTFIyID0gMHgwMDsKKworCQkvKiBEaXNhYmxlIHVwcGVyIDMyIGludGVycnVwdHMgKi8KKwkJKklYUDRYWF9JQ01SMiA9IDB4MDA7CisJfQorCisgICAgICAgIC8qIERlZmF1bHQgdG8gYWxsIGxldmVsIHRyaWdnZXJlZCAqLworCWZvcihpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykKKwkJaXhwNHh4X2NvbmZpZ19pcnEoaSwgSVhQNFhYX0lSUV9MRVZFTCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElYUDR4eCB0aW1lciB0aWNrCisgKiBXZSB1c2UgT1MgdGltZXIxIG9uIHRoZSBDUFUgZm9yIHRoZSB0aW1lciB0aWNrIGFuZCB0aGUgdGltZXN0YW1wIAorICogY291bnRlciBhcyBhIHNvdXJjZSBvZiByZWFsIGNsb2NrIHRpY2tzIHRvIGFjY291bnQgZm9yIG1pc3NlZCBqaWZmaWVzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB1bnNpZ25lZCB2b2xhdGlsZSBsYXN0X2ppZmZ5X3RpbWU7CisKKyNkZWZpbmUgQ0xPQ0tfVElDS1NfUEVSX1VTRUMJKChDTE9DS19USUNLX1JBVEUgKyBVU0VDX1BFUl9TRUMvMikgLyBVU0VDX1BFUl9TRUMpCisKKy8qIElSUXMgYXJlIGRpc2FibGVkIGJlZm9yZSBlbnRlcmluZyBoZXJlIGZyb20gZG9fZ2V0dGltZW9mZGF5KCkgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGl4cDR4eF9nZXR0aW1lb2Zmc2V0KHZvaWQpCit7CisJdTMyIGVsYXBzZWQ7CisKKwllbGFwc2VkID0gKklYUDRYWF9PU1RTIC0gbGFzdF9qaWZmeV90aW1lOworCisJcmV0dXJuIGVsYXBzZWQgLyBDTE9DS19USUNLU19QRVJfVVNFQzsKK30KKworc3RhdGljIGlycXJldHVybl90IGl4cDR4eF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKKworCS8qIENsZWFyIFBlbmRpbmcgSW50ZXJydXB0IGJ5IHdyaXRpbmcgJzEnIHRvIGl0ICovCisJKklYUDRYWF9PU1NUID0gSVhQNFhYX09TU1RfVElNRVJfMV9QRU5EOworCisJLyoKKwkgKiBDYXRjaCB1cCB3aXRoIHRoZSByZWFsIGlkZWEgb2YgdGltZQorCSAqLworCXdoaWxlICgoKklYUDRYWF9PU1RTIC0gbGFzdF9qaWZmeV90aW1lKSA+IExBVENIKSB7CisJCXRpbWVyX3RpY2socmVncyk7CisJCWxhc3RfamlmZnlfdGltZSArPSBMQVRDSDsKKwl9CisKKwl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpeHA0eHhfdGltZXJfaXJxID0geworCS5uYW1lCQk9ICJJWFA0eHggVGltZXIgVGljayIsCisJLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCwKKwkuaGFuZGxlcgk9IGl4cDR4eF90aW1lcl9pbnRlcnJ1cHQKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpeHA0eHhfdGltZXJfaW5pdCh2b2lkKQoreworCS8qIENsZWFyIFBlbmRpbmcgSW50ZXJydXB0IGJ5IHdyaXRpbmcgJzEnIHRvIGl0ICovCisJKklYUDRYWF9PU1NUID0gSVhQNFhYX09TU1RfVElNRVJfMV9QRU5EOworCisJLyogU2V0dXAgdGhlIFRpbWVyIGNvdW50ZXIgdmFsdWUgKi8KKwkqSVhQNFhYX09TUlQxID0gKExBVENIICYgfklYUDRYWF9PU1RfUkVMT0FEX01BU0spIHwgSVhQNFhYX09TVF9FTkFCTEU7CisKKwkvKiBSZXNldCB0aW1lLXN0YW1wIGNvdW50ZXIgKi8KKwkqSVhQNFhYX09TVFMgPSAwOworCWxhc3RfamlmZnlfdGltZSA9IDA7CisKKwkvKiBDb25uZWN0IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgZW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKwlzZXR1cF9pcnEoSVJRX0lYUDRYWF9USU1FUjEsICZpeHA0eHhfdGltZXJfaXJxKTsKK30KKworc3RydWN0IHN5c190aW1lciBpeHA0eHhfdGltZXIgPSB7CisJLmluaXQJCT0gaXhwNHh4X3RpbWVyX2luaXQsCisJLm9mZnNldAkJPSBpeHA0eHhfZ2V0dGltZW9mZnNldCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXhwNDZ4X2kyY19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCAJPSAweGM4MDExMDAwLAorCQkuZW5kCT0gMHhjODAxMTAxYywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAJPSBJUlFfSVhQNFhYX0kyQywKKwkJLmVuZAk9IElSUV9JWFA0WFhfSTJDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQorCX0KK307CisKKy8qCisgKiBJMkMgY29udHJvbGxlci4gVGhlIElYUDQ2eCB1c2VzIHRoZSBzYW1lIGJsb2NrIGFzIHRoZSBJT1AzeHgsIHNvCisgKiB3ZSBqdXN0IHVzZSB0aGUgc2FtZSBkZXZpY2UgbmFtZS4KKyAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaXhwNDZ4X2kyY19jb250cm9sbGVyID0geworCS5uYW1lCQk9ICJJT1AzeHgtSTJDIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IDIsCisJLnJlc291cmNlCT0gaXhwNDZ4X2kyY19yZXNvdXJjZXMKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICppeHA0NnhfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJml4cDQ2eF9pMmNfY29udHJvbGxlcgorfTsKKwordm9pZCBfX2luaXQgaXhwNHh4X3N5c19pbml0KHZvaWQpCit7CisJaWYgKGNwdV9pc19peHA0NngoKSkgeworCQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhpeHA0NnhfZGV2aWNlcywKKwkJCQlBUlJBWV9TSVpFKGl4cDQ2eF9kZXZpY2VzKSk7CisJfQorfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb3lvdGUtcGNpLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb3lvdGUtcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZhZmI0MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NveW90ZS1wY2kuYwpAQCAtMCwwICsxLDcwIEBACisvKgorICogYXJjaC9hcmNoL21hY2gtaXhwNHh4L2NveW90ZS1wY2kuYworICoKKyAqIFBDSSBzZXR1cCByb3V0aW5lcyBmb3IgQURJIEVuZ2luZWVyaW5nIENveW90ZSBwbGF0Zm9ybQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBKdW5nbyBTb2Z0d2FyZSBUZWNobm9sb2dpZXMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgTW9udGFWaXN0YSBTb2Z0d3JhZSwgSW5jLgorICoKKyAqIE1haW50YWluZXI6IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAbXZpc3RhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KKworZXh0ZXJuIHZvaWQgaXhwNHh4X3BjaV9wcmVpbml0KHZvaWQpOworZXh0ZXJuIGludCBpeHA0eHhfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpOworZXh0ZXJuIHN0cnVjdCBwY2lfYnVzICppeHA0eHhfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpOworCit2b2lkIF9faW5pdCBjb3lvdGVfcGNpX3ByZWluaXQodm9pZCkKK3sKKwlncGlvX2xpbmVfY29uZmlnKENPWU9URV9QQ0lfU0xPVDBfUElOLAorCQkJSVhQNFhYX0dQSU9fSU4gfCBJWFA0WFhfR1BJT19BQ1RJVkVfTE9XKTsKKworCWdwaW9fbGluZV9jb25maWcoQ09ZT1RFX1BDSV9TTE9UMV9QSU4sCisJCQlJWFA0WFhfR1BJT19JTiB8IElYUDRYWF9HUElPX0FDVElWRV9MT1cpOworCisJZ3Bpb19saW5lX2lzcl9jbGVhcihDT1lPVEVfUENJX1NMT1QwX1BJTik7CisJZ3Bpb19saW5lX2lzcl9jbGVhcihDT1lPVEVfUENJX1NMT1QxX1BJTik7CisKKwlpeHA0eHhfcGNpX3ByZWluaXQoKTsKK30KKworc3RhdGljIGludCBfX2luaXQgY295b3RlX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoreworCWlmIChzbG90ID09IENPWU9URV9QQ0lfU0xPVDBfREVWSUQpCisJCXJldHVybiBJUlFfQ09ZT1RFX1BDSV9TTE9UMDsKKwllbHNlIGlmIChzbG90ID09IENPWU9URV9QQ0lfU0xPVDFfREVWSUQpCisJCXJldHVybiBJUlFfQ09ZT1RFX1BDSV9TTE9UMTsKKwllbHNlIHJldHVybiAtMTsKK30KKworc3RydWN0IGh3X3BjaSBjb3lvdGVfcGNpIF9faW5pdGRhdGEgPSB7CisJLm5yX2NvbnRyb2xsZXJzID0gMSwKKwkucHJlaW5pdCA9ICAgICAgICBjb3lvdGVfcGNpX3ByZWluaXQsCisJLnN3aXp6bGUgPSAgICAgICAgcGNpX3N0ZF9zd2l6emxlLAorCS5zZXR1cCA9ICAgICAgICAgIGl4cDR4eF9zZXR1cCwKKwkuc2NhbiA9ICAgICAgICAgICBpeHA0eHhfc2Nhbl9idXMsCisJLm1hcF9pcnEgPSAgICAgICAgY295b3RlX21hcF9pcnEsCit9OworCitpbnQgX19pbml0IGNveW90ZV9wY2lfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX2FkaV9jb3lvdGUoKSkKKwkJcGNpX2NvbW1vbl9pbml0KCZjb3lvdGVfcGNpKTsKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKGNveW90ZV9wY2lfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb3lvdGUtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NveW90ZS1zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMDVhMTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb3lvdGUtc2V0dXAuYwpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtaXhwNHh4L2NveW90ZS1zZXR1cC5jCisgKgorICogQm9hcmQgc2V0dXAgZm9yIEFESSBFbmdpbmVlcmluZyBhbmQgSVhER1A0MjUgYm9hcmRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIEF1dGhvcjogRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBwbGV4aXR5Lm5ldD4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CisKK3ZvaWQgX19pbml0IGNveW90ZV9tYXBfaW8odm9pZCkKK3sKKwlpeHA0eHhfbWFwX2lvKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBjb3lvdGVfZmxhc2hfZGF0YSA9IHsKKwkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKKwkud2lkdGgJCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY295b3RlX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAkJPSBDT1lPVEVfRkxBU0hfQkFTRSwKKwkuZW5kCQk9IENPWU9URV9GTEFTSF9CQVNFICsgQ09ZT1RFX0ZMQVNIX1NJWkUsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY295b3RlX2ZsYXNoID0geworCS5uYW1lCQk9ICJJWFA0WFgtRmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZjb3lvdGVfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmY295b3RlX2ZsYXNoX3Jlc291cmNlLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjb3lvdGVfdWFydF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBJWFA0WFhfVUFSVDJfQkFTRV9QSFlTLAorCS5lbmQJPSBJWFA0WFhfVUFSVDJfQkFTRV9QSFlTICsgMHgwZmZmLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBjb3lvdGVfdWFydF9kYXRhID0geworCS5tYXBiYXNlCT0gSVhQNFhYX1VBUlQyX0JBU0VfUEhZUywKKwkubWVtYmFzZQk9IChjaGFyICopSVhQNFhYX1VBUlQyX0JBU0VfVklSVCArIFJFR19PRkZTRVQsCisJLmlycQkJPSBJUlFfSVhQNFhYX1VBUlQyLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkuaW90eXBlCQk9IFVQSU9fTUVNLAorCS5yZWdzaGlmdAk9IDIsCisJLnVhcnRjbGsJPSBJWFA0WFhfVUFSVF9YVEFMLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY295b3RlX3VhcnQgPSB7CisJLm5hbWUJCT0gInNlcmlhbDgyNTAiLAorCS5pZAkJPSAwLAorCS5kZXYJCQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY295b3RlX3VhcnRfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmY295b3RlX3VhcnRfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqY295b3RlX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjb3lvdGVfZmxhc2gsCisJJmNveW90ZV91YXJ0Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY295b3RlX2luaXQodm9pZCkKK3sKKwkqSVhQNFhYX0VYUF9DUzAgfD0gSVhQNFhYX0ZMQVNIX1dSSVRBQkxFOworCSpJWFA0WFhfRVhQX0NTMSA9ICpJWFA0WFhfRVhQX0NTMDsKKworCWlmIChtYWNoaW5lX2lzX2l4ZHBnNDI1KCkpIHsKKwkJY295b3RlX3VhcnRfZGF0YS5tZW1iYXNlID0KKwkJCShjaGFyKikoSVhQNFhYX1VBUlQxX0JBU0VfVklSVCArIFJFR19PRkZTRVQpOworCQljb3lvdGVfdWFydF9kYXRhLm1hcGJhc2UgPSBJWFA0WFhfVUFSVDFfQkFTRV9QSFlTOworCQljb3lvdGVfdWFydF9kYXRhLmlycSA9IElSUV9JWFA0WFhfVUFSVDE7CisJfQorCisKKwlpeHA0eHhfc3lzX2luaXQoKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhjb3lvdGVfZGV2aWNlcywgQVJSQVlfU0laRShjb3lvdGVfZGV2aWNlcykpOworfQorCisjaWZkZWYgQ09ORklHX0FSQ0hfQURJX0NPWU9URQorTUFDSElORV9TVEFSVChBRElfQ09ZT1RFLCAiQURJIEVuZ2luZWVyaW5nIENveW90ZSIpCisgICAgICAgIE1BSU5UQUlORVIoIk1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4iKQorICAgICAgICBCT09UX01FTShQSFlTX09GRlNFVCwgSVhQNFhYX1BFUklQSEVSQUxfQkFTRV9QSFlTLAorICAgICAgICAgICAgICAgIElYUDRYWF9QRVJJUEhFUkFMX0JBU0VfVklSVCkKKyAgICAgICAgTUFQSU8oY295b3RlX21hcF9pbykKKyAgICAgICAgSU5JVElSUShpeHA0eHhfaW5pdF9pcnEpCisJLnRpbWVyCQk9ICZpeHA0eHhfdGltZXIsCisgICAgICAgIEJPT1RfUEFSQU1TKDB4MDEwMCkKKwlJTklUX01BQ0hJTkUoY295b3RlX2luaXQpCitNQUNISU5FX0VORAorI2VuZGlmCisKKy8qCisgKiBJWERQRzQyNSBpcyBpZGVudGljYWwgdG8gQ295b3RlIGV4Y2VwdCBmb3Igd2hpY2ggc2VyaWFsIHBvcnQKKyAqIGlzIGNvbm5lY3RlZC4KKyAqLworI2lmZGVmIENPTkZJR19NQUNIX0lYRFBHNDI1CitNQUNISU5FX1NUQVJUKElYRFBHNDI1LCAiSW50ZWwgSVhEUEc0MjUiKQorICAgICAgICBNQUlOVEFJTkVSKCJNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIikKKyAgICAgICAgQk9PVF9NRU0oUEhZU19PRkZTRVQsIElYUDRYWF9QRVJJUEhFUkFMX0JBU0VfUEhZUywKKyAgICAgICAgICAgICAgICBJWFA0WFhfUEVSSVBIRVJBTF9CQVNFX1ZJUlQpCisgICAgICAgIE1BUElPKGNveW90ZV9tYXBfaW8pCisgICAgICAgIElOSVRJUlEoaXhwNHh4X2luaXRfaXJxKQorCS50aW1lcgkJPSAmaXhwNHh4X3RpbWVyLAorICAgICAgICBCT09UX1BBUkFNUygweDAxMDApCisJSU5JVF9NQUNISU5FKGNveW90ZV9pbml0KQorTUFDSElORV9FTkQKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9ndHd4NTcxNS1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2d0d3g1NzE1LXBjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxODAzNTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9ndHd4NTcxNS1wY2kuYwpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtaXhwNHh4L2d0d3g1NzE1LXBjaS5jCisgKgorICogR2VtdGVrIEdUV1g1NzE1IChMaW5rc3lzIFdSVjU0RykgYm9hcmQgc2V0dXAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgR2VvcmdlIFQuIEpvc2VwaAorICogRGVyaXZlZCBmcm9tIENveW90ZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3R3eDU3MTUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KKworZXh0ZXJuIHZvaWQgaXhwNHh4X3BjaV9wcmVpbml0KHZvaWQpOworZXh0ZXJuIGludCBpeHA0eHhfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpOworZXh0ZXJuIHN0cnVjdCBwY2lfYnVzICppeHA0eHhfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpOworCisgICAgICAgIC8qCisgICAgICAgICogVGhlIGV4YWN0IEdQSU8gcGlucyBhbmQgSVJRcyBhcmUgZGVmaW5lZCBpbiBhcmNoLWl4cDR4eC9ndHd4NTcxNS5oCisgICAgICAgICogU2xvdCAwIGlzbid0IGFjdHVhbGx5IHBvcHVsYXRlZCB3aXRoIGEgY2FyZCBjb25uZWN0b3IgYnV0CisgICAgICAgICogd2UgaW5pdGlhbGl6ZSBpdCBhbnl3YXkgaW4gY2FzZSBhIGZ1dHVyZSB2ZXJzaW9uIGhhcyB0aGUKKyAgICAgICAgKiBzbG90IHBvcHVsYXRlZCBvciBzb21lb25lIHdpdGggZ29vZCBzb2xkZXJpbmcgc2tpbGxzIGhhcworICAgICAgICAqIHNvbWUgZnJlZSB0aW1lLgorICAgICAgICAqLworCisKK3N0YXRpYyB2b2lkIGd0d3g1NzE1X2luaXRfZ3Bpbyh1OCBwaW4sIHUzMiBzdHlsZSkKK3sKKwlncGlvX2xpbmVfY29uZmlnKHBpbiwgc3R5bGUgfCBJWFA0WFhfR1BJT19BQ1RJVkVfTE9XKTsKKworCWlmIChzdHlsZSAmIElYUDRYWF9HUElPX0lOKSBncGlvX2xpbmVfaXNyX2NsZWFyKHBpbik7Cit9CisKK3ZvaWQgX19pbml0IGd0d3g1NzE1X3BjaV9wcmVpbml0KHZvaWQpCit7CisJZ3R3eDU3MTVfaW5pdF9ncGlvKEdUV1g1NzE1X1BDSV9TTE9UMF9JTlRBX0dQSU8sCUlYUDRYWF9HUElPX0lOKTsKKwlndHd4NTcxNV9pbml0X2dwaW8oR1RXWDU3MTVfUENJX1NMT1QxX0lOVEFfR1BJTywJSVhQNFhYX0dQSU9fSU4pOworCisJaXhwNHh4X3BjaV9wcmVpbml0KCk7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgZ3R3eDU3MTVfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCit7CisJaW50IHJjOworCXN0YXRpYyBpbnQgZ3R3eDU3MTVfaXJxbWFwCisJCQlbR1RXWDU3MTVfUENJX1NMT1RfQ09VTlRdCisJCQlbR1RXWDU3MTVfUENJX0lOVF9QSU5fQ09VTlRdID0geworCXtHVFdYNTcxNV9QQ0lfU0xPVDBfSU5UQV9JUlEsIEdUV1g1NzE1X1BDSV9TTE9UMF9JTlRCX0lSUX0sCisJe0dUV1g1NzE1X1BDSV9TTE9UMV9JTlRBX0lSUSwgR1RXWDU3MTVfUENJX1NMT1QxX0lOVEJfSVJRfSwKK307CisKKwlpZiAoc2xvdCA+PSBHVFdYNTcxNV9QQ0lfU0xPVF9DT1VOVCB8fAorCQkJcGluID49IEdUV1g1NzE1X1BDSV9JTlRfUElOX0NPVU5UKSByYyA9IC0xOworCWVsc2UKKwkJcmMgPSBndHd4NTcxNV9pcnFtYXBbc2xvdF1bcGluLTFdOworCisJcHJpbnRrKCIlczogTWFwcGVkIHNsb3QgJWQgcGluICVkIHRvIElSUSAlZFxuIiwgX19GVU5DVElPTl9fLHNsb3QsIHBpbiwgcmMpOworCXJldHVybihyYyk7Cit9CisKK3N0cnVjdCBod19wY2kgZ3R3eDU3MTVfcGNpIF9faW5pdGRhdGEgPSB7CisJLm5yX2NvbnRyb2xsZXJzID0gMSwKKwkucHJlaW5pdCA9ICAgICAgICBndHd4NTcxNV9wY2lfcHJlaW5pdCwKKwkuc3dpenpsZSA9ICAgICAgICBwY2lfc3RkX3N3aXp6bGUsCisJLnNldHVwID0gICAgICAgICAgaXhwNHh4X3NldHVwLAorCS5zY2FuID0gICAgICAgICAgIGl4cDR4eF9zY2FuX2J1cywKKwkubWFwX2lycSA9ICAgICAgICBndHd4NTcxNV9tYXBfaXJxLAorfTsKKworaW50IF9faW5pdCBndHd4NTcxNV9wY2lfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX2d0d3g1NzE1KCkpCisJeworCQlwY2lfY29tbW9uX2luaXQoJmd0d3g1NzE1X3BjaSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N1YnN5c19pbml0Y2FsbChndHd4NTcxNV9wY2lfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9ndHd4NTcxNS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvZ3R3eDU3MTUtc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzdjODZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvZ3R3eDU3MTUtc2V0dXAuYwpAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtaXhwNHh4L2d0d3g1NzE1LXNldHVwLmMKKyAqCisgKiBHZW10ZWsgR1RXWDU3MTUgKExpbmtzeXMgV1JWNTRHKSBib2FyZCBzZXR0dXAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgR2VvcmdlIFQuIEpvc2VwaAorICogRGVyaXZlZCBmcm9tIENveW90ZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3R3eDU3MTUuaD4KKworLyoKKyAqIFhzY2FsZSBVQVJUIHJlZ2lzdGVycyBhcmUgMzIgYml0cyB3aWRlIHdpdGggb25seSB0aGUgbGVhc3QKKyAqIHNpZ25pZmljYW50IDggYml0cyBoYXZpbmcgYW55IG1lYW5pbmcuICBGcm9tIGEgY29uZmlndXJhdGlvbgorICogcGVyc3BlY3RpdmUsIHRoaXMgbWVhbnMgMiB0aGluZ3MuLi4KKyAqCisgKiAgIFNldHRpbmcgLnJlZ3NoaWZ0ID0gMiBzbyB0aGF0IHRoZSBzdGFuZGFyZCAxNjU1MCByZWdpc3RlcnMKKyAqICAgbGluZSB1cCBvbiBldmVyeSA0dGggYnl0ZS4KKyAqCisgKiAgIFNoaWZ0aW5nIHRoZSByZWdpc3RlciBzdGFydCB2aXJ0dWFsIGFkZHJlc3MgKzMgYnl0ZXMgd2hlbgorICogICBjb21waWxlZCBiaWctZW5kaWFuLiAgU2luY2UgcmVnaXN0ZXIgd3JpdGVzIGFyZSBkb25lIG9uIGEKKyAqICAgc2luZ2xlIGJ5dGUgYmFzaXMsIGlmIHRoZSBzaGlmdCBpc24ndCBkb25lIHRoZSBkcml2ZXIgd2lsbAorICogICB3cml0ZSB0aGUgdmFsdWUgaW50byB0aGUgbW9zdCBzaWduaWZpY2FudCBieXRlIG9mIHRoZSByZWdpc3RlciwKKyAqICAgd2hpY2ggaXMgaWdub3JlZCwgaW5zdGVhZCBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQuCisgKi8KKworI2lmZGVmCV9fQVJNRUJfXworI2RlZmluZQlSRUdfT0ZGU0VUCTMKKyNlbHNlCisjZGVmaW5lCVJFR19PRkZTRVQJMAorI2VuZGlmCisKKy8qCisgKiBPbmx5IHRoZSBzZWNvbmQgb3IgImNvbnNvbGUiIHVhcnQgaXMgY29ubmVjdGVkIG9uIHRoZSBndHd4NTcxNS4KKyAqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGd0d3g1NzE1X3VhcnRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBJWFA0WFhfVUFSVDJfQkFTRV9QSFlTLAorCQkuZW5kCT0gSVhQNFhYX1VBUlQyX0JBU0VfUEhZUyArIDB4MGZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9JWFA0WFhfVUFSVDIsCisJCS5lbmQJPSBJUlFfSVhQNFhYX1VBUlQyLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsgfSwKK307CisKKworc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBndHd4NTcxNV91YXJ0X3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJLm1hcGJhc2UJPSBJWFA0WFhfVUFSVDJfQkFTRV9QSFlTLAorCS5tZW1iYXNlCT0gKGNoYXIgKilJWFA0WFhfVUFSVDJfQkFTRV9WSVJUICsgUkVHX09GRlNFVCwKKwkuaXJxCQk9IElSUV9JWFA0WFhfVUFSVDIsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJLnJlZ3NoaWZ0CT0gMiwKKwkudWFydGNsawk9IElYUDRYWF9VQVJUX1hUQUwsCisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBndHd4NTcxNV91YXJ0X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQk9IDAsCisJLmRldgkJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IGd0d3g1NzE1X3VhcnRfcGxhdGZvcm1fZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMiwKKwkucmVzb3VyY2UJPSBndHd4NTcxNV91YXJ0X3Jlc291cmNlcywKK307CisKKwordm9pZCBfX2luaXQgZ3R3eDU3MTVfbWFwX2lvKHZvaWQpCit7CisJaXhwNHh4X21hcF9pbygpOworfQorCitzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgZ3R3eDU3MTVfZmxhc2hfZGF0YSA9IHsKKwkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKKwkud2lkdGgJCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZ3R3eDU3MTVfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IEdUV1g1NzE1X0ZMQVNIX0JBU0UsCisJLmVuZAkJPSBHVFdYNTcxNV9GTEFTSF9CQVNFICsgR1RXWDU3MTVfRkxBU0hfU0laRSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBndHd4NTcxNV9mbGFzaCA9IHsKKwkubmFtZQkJPSAiSVhQNFhYLUZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZ3R3eDU3MTVfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmZ3R3eDU3MTVfZmxhc2hfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZ3R3eDU3MTVfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmd0d3g1NzE1X3VhcnRfZGV2aWNlLAorCSZndHd4NTcxNV9mbGFzaCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBndHd4NTcxNV9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fYWRkX2RldmljZXMoZ3R3eDU3MTVfZGV2aWNlcywgQVJSQVlfU0laRShndHd4NTcxNV9kZXZpY2VzKSk7Cit9CisKKworTUFDSElORV9TVEFSVChHVFdYNTcxNSwgIkdlbXRlayBHVFdYNTcxNSAoTGlua3N5cyBXUlY1NEcpIikKKyAgICAgICAgTUFJTlRBSU5FUigiR2VvcmdlIEpvc2VwaCIpCisgICAgICAgIEJPT1RfTUVNKFBIWVNfT0ZGU0VULCBJWFA0WFhfVUFSVDJfQkFTRV9QSFlTLAorICAgICAgICAgICAgICAgIElYUDRYWF9VQVJUMl9CQVNFX1ZJUlQpCisgICAgICAgIE1BUElPKGd0d3g1NzE1X21hcF9pbykKKyAgICAgICAgSU5JVElSUShpeHA0eHhfaW5pdF9pcnEpCisJCSAgLnRpbWVyCQk9ICZpeHA0eHhfdGltZXIsCisgICAgICAgIEJPT1RfUEFSQU1TKDB4MDEwMCkKKyAgICAgICAgSU5JVF9NQUNISU5FKGd0d3g1NzE1X2luaXQpCitNQUNISU5FX0VORAorCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHA0MjUtcGNpLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwNDI1LXBjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYWI5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwNDI1LXBjaS5jCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwNDI1LXBjaS5jIAorICoKKyAqIElYRFA0MjUgYm9hcmQtbGV2ZWwgUENJIGluaXRpYWxpemF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIEludGVsIENvcnBvcmF0aW9uLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIE1haW50YWluZXI6IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKK3ZvaWQgX19pbml0IGl4ZHA0MjVfcGNpX3ByZWluaXQodm9pZCkKK3sKKwlncGlvX2xpbmVfY29uZmlnKElYRFA0MjVfUENJX0lOVEFfUElOLAorCQkJCUlYUDRYWF9HUElPX0lOIHwgSVhQNFhYX0dQSU9fQUNUSVZFX0xPVyk7CisJZ3Bpb19saW5lX2NvbmZpZyhJWERQNDI1X1BDSV9JTlRCX1BJTiwgCisJCQkJSVhQNFhYX0dQSU9fSU4gfCBJWFA0WFhfR1BJT19BQ1RJVkVfTE9XKTsKKwlncGlvX2xpbmVfY29uZmlnKElYRFA0MjVfUENJX0lOVENfUElOLCAKKwkJCQlJWFA0WFhfR1BJT19JTiB8IElYUDRYWF9HUElPX0FDVElWRV9MT1cpOworCWdwaW9fbGluZV9jb25maWcoSVhEUDQyNV9QQ0lfSU5URF9QSU4sIAorCQkJCUlYUDRYWF9HUElPX0lOIHwgSVhQNFhYX0dQSU9fQUNUSVZFX0xPVyk7CisKKwlncGlvX2xpbmVfaXNyX2NsZWFyKElYRFA0MjVfUENJX0lOVEFfUElOKTsKKwlncGlvX2xpbmVfaXNyX2NsZWFyKElYRFA0MjVfUENJX0lOVEJfUElOKTsKKwlncGlvX2xpbmVfaXNyX2NsZWFyKElYRFA0MjVfUENJX0lOVENfUElOKTsKKwlncGlvX2xpbmVfaXNyX2NsZWFyKElYRFA0MjVfUENJX0lOVERfUElOKTsKKworCWl4cDR4eF9wY2lfcHJlaW5pdCgpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpeGRwNDI1X21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoreworCXN0YXRpYyBpbnQgcGNpX2lycV90YWJsZVtJWERQNDI1X1BDSV9JUlFfTElORVNdID0geworCQlJUlFfSVhEUDQyNV9QQ0lfSU5UQSwKKwkJSVJRX0lYRFA0MjVfUENJX0lOVEIsCisJCUlSUV9JWERQNDI1X1BDSV9JTlRDLAorCQlJUlFfSVhEUDQyNV9QQ0lfSU5URAorCX07CisKKwlpbnQgaXJxID0gLTE7CisKKwlpZiAoc2xvdCA+PSAxICYmIHNsb3QgPD0gSVhEUDQyNV9QQ0lfTUFYX0RFViAmJiAKKwkJcGluID49IDEgJiYgcGluIDw9IElYRFA0MjVfUENJX0lSUV9MSU5FUykgeworCQlpcnEgPSBwY2lfaXJxX3RhYmxlWyhzbG90ICsgcGluIC0gMikgJSA0XTsKKwl9CisKKwlyZXR1cm4gaXJxOworfQorCitzdHJ1Y3QgaHdfcGNpIGl4ZHA0MjVfcGNpIF9faW5pdGRhdGEgPSB7CisJLm5yX2NvbnRyb2xsZXJzID0gMSwKKwkucHJlaW5pdAk9IGl4ZHA0MjVfcGNpX3ByZWluaXQsCisJLnN3aXp6bGUJPSBwY2lfc3RkX3N3aXp6bGUsCisJLnNldHVwCQk9IGl4cDR4eF9zZXR1cCwKKwkuc2NhbgkJPSBpeHA0eHhfc2Nhbl9idXMsCisJLm1hcF9pcnEJPSBpeGRwNDI1X21hcF9pcnEsCit9OworCitpbnQgX19pbml0IGl4ZHA0MjVfcGNpX2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19peGRwNDI1KCkgfHwgbWFjaGluZV9pc19peGNkcDExMDAoKSB8fAorCQkJbWFjaGluZV9pc19hdmlsYSgpIHx8IG1hY2hpbmVfaXNfaXhkcDQ2NSgpKQorCQlwY2lfY29tbW9uX2luaXQoJml4ZHA0MjVfcGNpKTsKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKGl4ZHA0MjVfcGNpX2luaXQpOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwNDI1LXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwNDI1LXNldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzczNDZjMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHA0MjUtc2V0dXAuYwpAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHA0MjUtc2V0dXAuYworICoKKyAqIElYRFA0MjUvSVhDRFAxMTAwIGJvYXJkLXNldHVwIAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBBdXRob3I6IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorCit2b2lkIF9faW5pdCBpeGRwNDI1X21hcF9pbyh2b2lkKSAKK3sKKwlpeHA0eHhfbWFwX2lvKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBpeGRwNDI1X2ZsYXNoX2RhdGEgPSB7CisJLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCisJLndpZHRoCQk9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGl4ZHA0MjVfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IElYRFA0MjVfRkxBU0hfQkFTRSwKKwkuZW5kCQk9IElYRFA0MjVfRkxBU0hfQkFTRSArIElYRFA0MjVfRkxBU0hfU0laRSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpeGRwNDI1X2ZsYXNoID0geworCS5uYW1lCQk9ICJJWFA0WFgtRmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZpeGRwNDI1X2ZsYXNoX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJml4ZHA0MjVfZmxhc2hfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IGl4cDR4eF9pMmNfcGlucyBpeGRwNDI1X2kyY19ncGlvX3BpbnMgPSB7CisJLnNkYV9waW4JPSBJWERQNDI1X1NEQV9QSU4sCisJLnNjbF9waW4JPSBJWERQNDI1X1NDTF9QSU4sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpeGRwNDI1X2kyY19jb250cm9sbGVyID0geworCS5uYW1lCQk9ICJJWFA0WFgtSTJDIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaXhkcDQyNV9pMmNfZ3Bpb19waW5zLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAwCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGl4ZHA0MjVfdWFydF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBJWFA0WFhfVUFSVDFfQkFTRV9QSFlTLAorCQkuZW5kCQk9IElYUDRYWF9VQVJUMV9CQVNFX1BIWVMgKyAweDBmZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTQorCX0sCisJeworCQkuc3RhcnQJCT0gSVhQNFhYX1VBUlQyX0JBU0VfUEhZUywKKwkJLmVuZAkJPSBJWFA0WFhfVUFSVDJfQkFTRV9QSFlTICsgMHgwZmZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0KKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IGl4ZHA0MjVfdWFydF9kYXRhW10gPSB7CisJeworCQkubWFwYmFzZQk9IElYUDRYWF9VQVJUMV9CQVNFX1BIWVMsCisJCS5tZW1iYXNlCT0gKGNoYXIgKilJWFA0WFhfVUFSVDFfQkFTRV9WSVJUICsgUkVHX09GRlNFVCwKKwkJLmlycQkJPSBJUlFfSVhQNFhYX1VBUlQxLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5yZWdzaGlmdAk9IDIsCisJCS51YXJ0Y2xrCT0gSVhQNFhYX1VBUlRfWFRBTCwKKwl9LAorCXsKKwkJLm1hcGJhc2UJPSBJWFA0WFhfVUFSVDJfQkFTRV9QSFlTLAorCQkubWVtYmFzZQk9IChjaGFyICopSVhQNFhYX1VBUlQyX0JBU0VfVklSVCArIFJFR19PRkZTRVQsCisJCS5pcnEJCT0gSVJRX0lYUDRYWF9VQVJUMSwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAyLAorCQkudWFydGNsawk9IElYUDRYWF9VQVJUX1hUQUwsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaXhkcDQyNV91YXJ0ID0geworCS5uYW1lCQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQkJPSAwLAorCS5kZXYucGxhdGZvcm1fZGF0YQk9IGl4ZHA0MjVfdWFydF9kYXRhLAorCS5udW1fcmVzb3VyY2VzCQk9IDIsCisJLnJlc291cmNlCQk9IGl4ZHA0MjVfdWFydF9yZXNvdXJjZXMKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICppeGRwNDI1X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZpeGRwNDI1X2kyY19jb250cm9sbGVyLAorCSZpeGRwNDI1X2ZsYXNoLAorCSZpeGRwNDI1X3VhcnQKK307CisKKworc3RhdGljIHZvaWQgX19pbml0IGl4ZHA0MjVfaW5pdCh2b2lkKQoreworCWl4cDR4eF9zeXNfaW5pdCgpOworCisJLyoKKwkgKiBJWFA0NjUgaGFzIDMyTUIgd2luZG93CisJICovCisJaWYgKG1hY2hpbmVfaXNfaXhkcDQ2NSgpKSB7CisJCWl4ZHA0MjVfZmxhc2hfcmVzb3VyY2UuZW5kICs9IElYRFA0MjVfRkxBU0hfU0laRTsKKwl9CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhpeGRwNDI1X2RldmljZXMsIEFSUkFZX1NJWkUoaXhkcDQyNV9kZXZpY2VzKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoSVhEUDQyNSwgIkludGVsIElYRFA0MjUgRGV2ZWxvcG1lbnQgUGxhdGZvcm0iKQorCU1BSU5UQUlORVIoIk1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4iKQorCUJPT1RfTUVNKFBIWVNfT0ZGU0VULCBJWFA0WFhfUEVSSVBIRVJBTF9CQVNFX1BIWVMsCisJCUlYUDRYWF9QRVJJUEhFUkFMX0JBU0VfVklSVCkKKwlNQVBJTyhpeGRwNDI1X21hcF9pbykKKwlJTklUSVJRKGl4cDR4eF9pbml0X2lycSkKKwkudGltZXIJCT0gJml4cDR4eF90aW1lciwKKwlCT09UX1BBUkFNUygweDAxMDApCisJSU5JVF9NQUNISU5FKGl4ZHA0MjVfaW5pdCkKK01BQ0hJTkVfRU5ECisKK01BQ0hJTkVfU1RBUlQoSVhEUDQ2NSwgIkludGVsIElYRFA0NjUgRGV2ZWxvcG1lbnQgUGxhdGZvcm0iKQorCU1BSU5UQUlORVIoIk1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4iKQorCUJPT1RfTUVNKFBIWVNfT0ZGU0VULCBJWFA0WFhfUEVSSVBIRVJBTF9CQVNFX1BIWVMsCisJCUlYUDRYWF9QRVJJUEhFUkFMX0JBU0VfVklSVCkKKwlNQVBJTyhpeGRwNDI1X21hcF9pbykKKwlJTklUSVJRKGl4cDR4eF9pbml0X2lycSkKKwkudGltZXIJCT0gJml4cDR4eF90aW1lciwKKwlCT09UX1BBUkFNUygweDAxMDApCisJSU5JVF9NQUNISU5FKGl4ZHA0MjVfaW5pdCkKK01BQ0hJTkVfRU5ECisKK01BQ0hJTkVfU1RBUlQoSVhDRFAxMTAwLCAiSW50ZWwgSVhDRFAxMTAwIERldmVsb3BtZW50IFBsYXRmb3JtIikKKwlNQUlOVEFJTkVSKCJNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIikKKwlCT09UX01FTShQSFlTX09GRlNFVCwgSVhQNFhYX1BFUklQSEVSQUxfQkFTRV9QSFlTLAorCQlJWFA0WFhfUEVSSVBIRVJBTF9CQVNFX1ZJUlQpCisJTUFQSU8oaXhkcDQyNV9tYXBfaW8pCisJSU5JVElSUShpeHA0eHhfaW5pdF9pcnEpCisJLnRpbWVyCQk9ICZpeHA0eHhfdGltZXIsCisJQk9PVF9QQVJBTVMoMHgwMTAwKQorCUlOSVRfTUFDSElORShpeGRwNDI1X2luaXQpCitNQUNISU5FX0VORAorCisvKgorICogQXZpbGEgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gSVhEUDQyNSBleGNlcHQgdGhhdCBpdCBhZGRzCisgKiBhIENGIElERSBzbG90IGhhbmdpbmcgb2ZmIHRoZSBleHBhbnNpb24gYnVzLiBXaGVuIHdlIGhhdmUgYSAKKyAqIGRyaXZlciBmb3IgSVhQNHh4IENGIElERSB3aXRoIGRyaXZlciBtb2RlbCBzdXBwb3J0IHdlJ2xsIG1vdmUKKyAqIEF2aWxhIHRvIGl0J3Mgb3duIHNldHVwIGZpbGUuCisgKi8KKyNpZmRlZiBDT05GSUdfQVJDSF9BVklMQQorTUFDSElORV9TVEFSVChBVklMQSwgIkdhdGV3b3JrcyBBdmlsYSBOZXR3b3JrIFBsYXRmb3JtIikKKwlNQUlOVEFJTkVSKCJEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PiIpCisJQk9PVF9NRU0oUEhZU19PRkZTRVQsIElYUDRYWF9QRVJJUEhFUkFMX0JBU0VfUEhZUywKKwkJSVhQNFhYX1BFUklQSEVSQUxfQkFTRV9WSVJUKQorCU1BUElPKGl4ZHA0MjVfbWFwX2lvKQorCUlOSVRJUlEoaXhwNHh4X2luaXRfaXJxKQorCS50aW1lcgkJPSAmaXhwNHh4X3RpbWVyLAorCUJPT1RfUEFSQU1TKDB4MDEwMCkKKwlJTklUX01BQ0hJTkUoaXhkcDQyNV9pbml0KQorTUFDSElORV9FTkQKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwZzQyNS1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHBnNDI1LXBjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNDU2M2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwZzQyNS1wY2kuYwpAQCAtMCwwICsxLDY2IEBACisvKgorICogYXJjaC9hcmNoL21hY2gtaXhwNHh4L2l4ZHBnNDI1LXBjaS5jCisgKgorICogUENJIHNldHVwIHJvdXRpbmVzIGZvciBJbnRlbCBJWERQRzQyNSBQbGF0Zm9ybQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNb250YVZpc3RhIFNvZnR3cmFlLCBJbmMuCisgKgorICogTWFpbnRhaW5lcjogRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBwbGV4aXR5Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KKworZXh0ZXJuIHZvaWQgaXhwNHh4X3BjaV9wcmVpbml0KHZvaWQpOworZXh0ZXJuIGludCBpeHA0eHhfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpOworZXh0ZXJuIHN0cnVjdCBwY2lfYnVzICppeHA0eHhfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpOworCit2b2lkIF9faW5pdCBpeGRwZzQyNV9wY2lfcHJlaW5pdCh2b2lkKQoreworCWdwaW9fbGluZV9jb25maWcoNiwgSVhQNFhYX0dQSU9fSU4gfCBJWFA0WFhfR1BJT19BQ1RJVkVfTE9XKTsKKwlncGlvX2xpbmVfY29uZmlnKDcsIElYUDRYWF9HUElPX0lOIHwgSVhQNFhYX0dQSU9fQUNUSVZFX0xPVyk7CisKKwlncGlvX2xpbmVfaXNyX2NsZWFyKDYpOworCWdwaW9fbGluZV9pc3JfY2xlYXIoNyk7CisKKwlpeHA0eHhfcGNpX3ByZWluaXQoKTsKK30KKworc3RhdGljIGludCBfX2luaXQgaXhkcGc0MjVfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCit7CisJaWYgKHNsb3QgPT0gMTIgfHwgc2xvdCA9PSAxMykKKwkJcmV0dXJuIElSUV9JWFA0WFhfR1BJTzc7CisJZWxzZSBpZiAoc2xvdCA9PSAxNCkKKwkJcmV0dXJuIElSUV9JWFA0WFhfR1BJTzY7CisJZWxzZSByZXR1cm4gLTE7Cit9CisKK3N0cnVjdCBod19wY2kgaXhkcGc0MjVfcGNpIF9faW5pdGRhdGEgPSB7CisJLm5yX2NvbnRyb2xsZXJzID0gMSwKKwkucHJlaW5pdCA9ICAgICAgICBpeGRwZzQyNV9wY2lfcHJlaW5pdCwKKwkuc3dpenpsZSA9ICAgICAgICBwY2lfc3RkX3N3aXp6bGUsCisJLnNldHVwID0gICAgICAgICAgaXhwNHh4X3NldHVwLAorCS5zY2FuID0gICAgICAgICAgIGl4cDR4eF9zY2FuX2J1cywKKwkubWFwX2lycSA9ICAgICAgICBpeGRwZzQyNV9tYXBfaXJxLAorfTsKKworaW50IF9faW5pdCBpeGRwZzQyNV9wY2lfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX2l4ZHBnNDI1KCkpCisJCXBjaV9jb21tb25faW5pdCgmaXhkcGc0MjVfcGNpKTsKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKGl4ZHBnNDI1X3BjaV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbDcyMDAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWw3MjAwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZDhlYmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWw3MjAwL01ha2VmaWxlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisjCisKKyMgT2JqZWN0IGZpbGUgbGlzdHMuCisKK29iai15CQkJOj0gY29yZS5vCitvYmotbQkJCTo9CitvYmotbgkJCTo9CitvYmotCQkJOj0KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1sNzIwMC9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNzJlY2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWw3MjAwL01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSwyIEBACisgICB6cmVsYWRkci15CTo9IDB4ZjAwMDgwMDAKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWw3MjAwL2NvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDZjYTk1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1sNzIwMC9jb3JlLmMKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS9tbS1sdXNsNzIwMC5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMCBTdGV2ZSBIaWxsIChzamhpbGxAY290dy5jb20pCisgKgorICogIEV4dHJhIE1NIHJvdXRpbmVzIGZvciBMNzIwMCBhcmNoaXRlY3R1cmUKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCisvKgorICogSVJRIGJhc2UgcmVnaXN0ZXIKKyAqLworI2RlZmluZQlJUlFfQkFTRQkoSU9fQkFTRV8yICsgMHgxMDAwKQorCisvKiAKKyAqIE5vcm1hbCBJUlEgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgSVJRX1NUQVRVUwkoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChJUlFfQkFTRSArIDB4MDAwKSkKKyNkZWZpbmUgSVJRX1JBV1NUQVRVUwkoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChJUlFfQkFTRSArIDB4MDA0KSkKKyNkZWZpbmUgSVJRX0VOQUJMRQkoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChJUlFfQkFTRSArIDB4MDA4KSkKKyNkZWZpbmUgSVJRX0VOQUJMRUNMRUFSCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKElSUV9CQVNFICsgMHgwMGMpKQorI2RlZmluZSBJUlFfU09GVAkoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChJUlFfQkFTRSArIDB4MDEwKSkKKyNkZWZpbmUgSVJRX1NPVVJDRVNFTAkoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChJUlFfQkFTRSArIDB4MDE4KSkKKworLyogCisgKiBGYXN0IElSUSByZWdpc3RlcnMKKyAqLworI2RlZmluZSBGSVFfU1RBVFVTCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKElSUV9CQVNFICsgMHgxMDApKQorI2RlZmluZSBGSVFfUkFXU1RBVFVTCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKElSUV9CQVNFICsgMHgxMDQpKQorI2RlZmluZSBGSVFfRU5BQkxFCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKElSUV9CQVNFICsgMHgxMDgpKQorI2RlZmluZSBGSVFfRU5BQkxFQ0xFQVIJKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoSVJRX0JBU0UgKyAweDEwYykpCisjZGVmaW5lIEZJUV9TT0ZUCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKElSUV9CQVNFICsgMHgxMTApKQorI2RlZmluZSBGSVFfU09VUkNFU0VMCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKElSUV9CQVNFICsgMHgxMTgpKQorCitzdGF0aWMgdm9pZCBsNzIwMF9tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCUlSUV9FTkFCTEVDTEVBUiA9IDEgPDwgaXJxOworfQorCitzdGF0aWMgdm9pZCBsNzIwMF91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJSVJRX0VOQUJMRSA9IDEgPDwgaXJxOworfQorIAorc3RhdGljIHZvaWQgX19pbml0IGw3MjAwX2luaXRfaXJxKHZvaWQpCit7CisJaW50IGlycTsKKworCUlSUV9FTkFCTEVDTEVBUiA9IDB4ZmZmZmZmZmY7CS8qIGNsZWFyIGFsbCBpbnRlcnJ1cHQgZW5hYmxlcyAqLworCUZJUV9FTkFCTEVDTEVBUiA9IDB4ZmZmZmZmZmY7CS8qIGNsZWFyIGFsbCBmYXN0IGludGVycnVwdCBlbmFibGVzICovCisKKwlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKSB7CisJCWlycV9kZXNjW2lycV0udmFsaWQJPSAxOworCQlpcnFfZGVzY1tpcnFdLnByb2JlX29rCT0gMTsKKwkJaXJxX2Rlc2NbaXJxXS5tYXNrX2Fjawk9IGw3MjAwX21hc2tfaXJxOworCQlpcnFfZGVzY1tpcnFdLm1hc2sJPSBsNzIwMF9tYXNrX2lycTsKKwkJaXJxX2Rlc2NbaXJxXS51bm1hc2sJPSBsNzIwMF91bm1hc2tfaXJxOworCX0KKworCWluaXRfRklRKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbDcyMDBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeyBJT19CQVNFLAlJT19TVEFSVCwJSU9fU0laRSwJTVRfREVWSUNFIH0sCisJeyBJT19CQVNFXzIsCUlPX1NUQVJUXzIsCUlPX1NJWkVfMiwJTVRfREVWSUNFIH0sCisJeyBBVVhfQkFTRSwgICAgIEFVWF9TVEFSVCwgICAgICBBVVhfU0laRSwgICAgICAgTVRfREVWSUNFIH0sCisJeyBGTEFTSDFfQkFTRSwgIEZMQVNIMV9TVEFSVCwgICBGTEFTSDFfU0laRSwgICAgTVRfREVWSUNFIH0sCisJeyBGTEFTSDJfQkFTRSwgIEZMQVNIMl9TVEFSVCwgICBGTEFTSDJfU0laRSwgICAgTVRfREVWSUNFIH0KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBsNzIwMF9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQobDcyMDBfaW9fZGVzYywgQVJSQVlfU0laRShsNzIwMF9pb19kZXNjKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoTDcyMDAsICJMaW5rVXAgU3lzdGVtcyBMNzIwMCIpCisJTUFJTlRBSU5FUigiU3RldmUgSGlsbCAvIFNjb3R0IE1jQ29ubmVsbCIpCisJQk9PVF9NRU0oMHhmMDAwMDAwMCwgMHg4MDA0MDAwMCwgMHhkMDAwMDAwMCkKKwlNQVBJTyhsNzIwMF9tYXBfaW8pCisJSU5JVElSUShsNzIwMF9pbml0X2lycSkKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGExNzg2N2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvS2NvbmZpZwpAQCAtMCwwICsxLDcwIEBACitpZiBBUkNIX0xIN0E0MFgKKworbWVudSAiTEg3QTQwWCBJbXBsZW1lbnRhdGlvbnMiCisKK2NvbmZpZyBNQUNIX0tFVjdBNDAwCisJYm9vbCAiS0VWN0E0MDAiCisJc2VsZWN0IEFSQ0hfTEg3QTQwMAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgU2hhcnAgS0VWN0E0MDAgZGV2ZWxvcG1lbnQKKwkgIGJvYXJkLiAgVGhpcyBoYXJkd2FyZSBpcyBkaXNjb250aW51ZWQsIHNvIEknZCBiZSB2ZXJ5CisJICBzdXByaXNlZCBpZiB5b3Ugd2FudGVkIHRoaXMgb3B0aW9uLgorCitjb25maWcgTUFDSF9MUEQ3QTQwMAorCWJvb2wgIkxQRDdBNDAwIENhcmQgRW5naW5lIgorCXNlbGVjdCBBUkNIX0xIN0E0MDAKKyMJc2VsZWN0IElERV9QT0xMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIExvZ2ljIFByb2R1Y3QgRGV2ZWxvcG1lbnQncworCSAgTFBEN0E0MDAgQ2FyZEVuZ2luZS4gIEZvciB0aGUgdGltZSBiZWluZywgdGhlIExQRDdBNDAwIGFuZAorCSAgTFBEN0E0MDQgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorCitjb25maWcgTUFDSF9MUEQ3QTQwNAorCWJvb2wgIkxQRDdBNDA0IENhcmQgRW5naW5lIgorCXNlbGVjdCBBUkNIX0xIN0E0MDQKKyMJc2VsZWN0IElERV9QT0xMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIExvZ2ljIFByb2R1Y3QgRGV2ZWxvcG1lbnQncworCSAgTFBEN0E0MDQgQ2FyZEVuZ2luZS4gRm9yIHRoZSB0aW1lIGJlaW5nLCB0aGUgTFBEN0E0MDAgYW5kCisJICBMUEQ3QTQwNCBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCisKK2NvbmZpZyBBUkNIX0xIN0E0MDAKKwlib29sCisKK2NvbmZpZyBBUkNIX0xIN0E0MDQKKwlib29sCisKK2NvbmZpZyBMSDdBNDBYX0NPTlRJR01FTQorCWJvb2wgIkRpc2FibGUgTlVNQSBTdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9MSDdBNDBYCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3VyIGJvb3Rsb2FkZXIgc2V0cyB0aGUgU1JPTUxMIGJpdChzKSBpbgorCSAgdGhlIFNEUkFNIGNvbnRyb2xsZXIsIG9yZ2FuaXppbmcgbWVtb3J5IGFzIGEgY29udGlndW91cworCSAgYXJyYXkuICBUaGlzIG9wdGlvbiB3aWxsIGRpc2FibGUgQ09ORklHX0RJU0NPTlRJR01FTSBhbmQKKyAgICAgICAgICBmb3JjZSB0aGUga2VybmVsIHRvIG1hbmFnZSBhbGwgbWVtb3J5IGluIG9uZSBub2RlLgorCisJICBTZXR0aW5nIHRoaXMgb3B0aW9uIGluY29ycmVjdGx5IG1heSBwcmV2ZW50IHRoZSBrZXJuZWwgZnJvbQorCSAgYm9vdGluZy4gIEl0IGlzIE9LIHRvIGxlYXZlIGl0IE4uCisKKwkgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjb25zdWx0CisJICAgIDxmaWxlOkRvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL1NEUkFNPi4KKworY29uZmlnIExIN0E0MFhfT05FX0JBTktfUEVSX05PREUKKwlib29sICJPcHRpbWl6ZSBOVU1BIE5vZGUgVGFibGVzIGZvciBTaXplIgorCWRlcGVuZHMgb24gQVJDSF9MSDdBNDBYICYmICFMSDdBNDBYX0NPTlRJR01FTQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gcHJvZHVjZSBjb21wYWN0IG1lbW9yeSBub2RlIHRhYmxlcy4gIEJ5CisJICBkZWZhdWx0IHBhaXJzIG9mIGFkamFjZW50IHBoeXNpY2FsIFJBTSBiYW5rcyBhcmUgbWFuYWdlZAorCSAgdG9nZXRoZXIgaW4gYSBzaW5nbGUgbm9kZSwgaW5jdXJyaW5nIHNvbWUgd2FzdGVkIG92ZXJoZWFkCisJICBpbiB0aGUgbm9kZSB0YWJsZXMsIGhvd2V2ZXIgYWxzbyBtYWludGFpbmluZyBjb21wYXRpYmlsaXR5CisJICB3aXRoIHN5c3RlbXMgd2hlcmUgcGh5c2ljYWwgbWVtb3J5IGlzIHRydWx5IGNvbnRpZ3VvdXMuCisKKwkgIFNldHRpbmcgdGhpcyBvcHRpb24gaW5jb3JyZWN0bHkgbWF5IHByZXZlbnQgdGhlIGtlcm5lbCBmcm9tCisJICBib290aW5nLiAgSXQgaXMgT0sgdG8gbGVhdmUgaXQgTi4KKworCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIGNvbnN1bHQKKwkgICAgPGZpbGU6RG9jdW1lbnRhdGlvbi9hcm0vU2hhcnAtTEgvU0RSQU0+LgorCitlbmRtZW51CisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkwNTEyZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9NYWtlZmlsZQpAQCAtMCwwICsxLDE0IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgorIworCisjIE9iamVjdCBmaWxlIGxpc3RzLgorCitvYmoteQkJCTo9IHRpbWUubworb2JqLSQoQ09ORklHX01BQ0hfS0VWN0E0MDApICs9IGFyY2gta2V2N2E0MDAubyBpcnEtbGg3YTQwMC5vCitvYmotJChDT05GSUdfTUFDSF9MUEQ3QTQwMCkgKz0gYXJjaC1scGQ3YTQweC5vIGlycS1saDdhNDAwLm8KK29iai0kKENPTkZJR19NQUNIX0xQRDdBNDA0KSArPSBhcmNoLWxwZDdhNDB4Lm8gaXJxLWxoN2E0MDQubworCitvYmotbQkJCTo9CitvYmotbgkJCTo9CitvYmotCQkJOj0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY5NDFiZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsNCBAQAorICAgenJlbGFkZHIteQk6PSAweGMwMDA4MDAwCitwYXJhbXNfcGh5cy15CTo9IDB4YzAwMDAxMDAKK2luaXRyZF9waHlzLXkJOj0gMHhjNDAwMDAwMAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvYXJjaC1rZXY3YTQwMC5jIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2FyY2gta2V2N2E0MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTVkMTdmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2FyY2gta2V2N2E0MDAuYwpAQCAtMCwwICsxLDExMSBAQAorLyogYXJjaC9hcm0vbWFjaC1saDdhNDB4L2FyY2gta2V2N2E0MDAuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgTG9naWMgUHJvZHVjdCBEZXZlbG9wbWVudAorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKworICAgICAgLyogVGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgYm9hcmQgc3BlY2lmaWMgSVJRIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiAqLworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGtldjdhNDAwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsgSU9fVklSVCwgICAgSU9fUEhZUywgICAgSU9fU0laRSwgICAgTVRfREVWSUNFIH0sCisJeyBDUExEX1ZJUlQsICBDUExEX1BIWVMsICBDUExEX1NJWkUsICBNVF9ERVZJQ0UgfSwKK307CisKK3ZvaWQgX19pbml0IGtldjdhNDAwX21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdCAoa2V2N2E0MDBfaW9fZGVzYywgQVJSQVlfU0laRSAoa2V2N2E0MDBfaW9fZGVzYykpOworfQorCitzdGF0aWMgdTE2IENQTERfSVJRX21hc2s7CS8qIE1hc2sgZm9yIENQTEQgSVJRcywgMSA9PSB1bm1hc2tlZCAqLworCitzdGF0aWMgdm9pZCBrZXY3YTQwMF9hY2tfY3BsZF9pcnEgKHUzMiBpcnEpCit7CisJQ1BMRF9DTF9JTlQgPSAxIDw8IChpcnEgLSBJUlFfS0VWN0E0MDBfQ1BMRCk7Cit9CisKK3N0YXRpYyB2b2lkIGtldjdhNDAwX21hc2tfY3BsZF9pcnEgKHUzMiBpcnEpCit7CisJQ1BMRF9JUlFfbWFzayAmPSB+KDEgPDwgKGlycSAtIElSUV9LRVY3QTQwMF9DUExEKSk7CisJQ1BMRF9XUl9QQl9JTlRfTUFTSyA9IENQTERfSVJRX21hc2s7Cit9CisKK3N0YXRpYyB2b2lkIGtldjdhNDAwX3VubWFza19jcGxkX2lycSAodTMyIGlycSkKK3sKKwlDUExEX0lSUV9tYXNrIHw9IDEgPDwgKGlycSAtIElSUV9LRVY3QTQwMF9DUExEKTsKKwlDUExEX1dSX1BCX0lOVF9NQVNLID0gQ1BMRF9JUlFfbWFzazsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIGtldjdhNDAwX2NwbGRfY2hpcCA9IHsKKwkuYWNrCT0ga2V2N2E0MDBfYWNrX2NwbGRfaXJxLAorCS5tYXNrCT0ga2V2N2E0MDBfbWFza19jcGxkX2lycSwKKwkudW5tYXNrCT0ga2V2N2E0MDBfdW5tYXNrX2NwbGRfaXJxLAorfTsKKworCitzdGF0aWMgdm9pZCBrZXY3YTQwMF9jcGxkX2hhbmRsZXIgKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFkZXNjICpkZXNjLAorCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdTMyIG1hc2sgPSBDUExEX0xBVENIRURfSU5UUzsKKwlpcnEgPSBJUlFfS0VWN0E0MDBfQ1BMRDsKKwlmb3IgKDsgbWFzazsgbWFzayA+Pj0gMSwgKytpcnEpIHsKKwkJaWYgKG1hc2sgJiAxKQorCQkJZGVzY1tpcnFdLmhhbmRsZSAoaXJxLCBkZXNjLCByZWdzKTsKKwl9Cit9CisKK3ZvaWQgX19pbml0IGxoN2E0MHhfaW5pdF9ib2FyZF9pcnEgKHZvaWQpCit7CisJaW50IGlycTsKKworCWZvciAoaXJxID0gSVJRX0tFVjdBNDAwX0NQTEQ7CisJICAgICBpcnEgPCBJUlFfS0VWN0E0MDBfQ1BMRCArIE5SX0lSUV9CT0FSRDsgKytpcnEpIHsKKwkJc2V0X2lycV9jaGlwIChpcnEsICZrZXY3YTQwMF9jcGxkX2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIgKGlycSwgZG9fZWRnZV9JUlEpOworCQlzZXRfaXJxX2ZsYWdzIChpcnEsIElSUUZfVkFMSUQpOworCX0KKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlciAoSVJRX0NQTEQsIGtldjdhNDAwX2NwbGRfaGFuZGxlcik7CisKKwkJLyogQ2xlYXIgYWxsIENQTEQgaW50ZXJydXB0cyAqLworCUNQTERfQ0xfSU5UID0gMHhmZjsgLyogQ1BMRF9JTlRSX01NQ19DRCB8IENQTERfSU5UUl9FVEhfSU5UOyAqLworCisJR1BJT19HUElPSU5URU4gPSAwOwkJLyogRGlzYWJsZSBhbGwgR1BJTyBpbnRlcnJ1cHRzICovCisJYmFycmllcigpOworCisjaWYgMAorCUdQSU9fSU5UVFlQRTEKKwkJPSAoR1BJT19JTlRSX1BDQzFfQ0QgfCBHUElPX0lOVFJfUENDMV9DRCk7IC8qIEVkZ2UgdHJpZy4gKi8KKwlHUElPX0lOVFRZUEUyID0gMDsJCS8qIEZhbGxpbmcgZWRnZSAmIGxvdy1sZXZlbCAqLworCUdQSU9fR1BJT0ZFT0kgPSAweGZmOwkJLyogQ2xlYXIgYWxsIEdQSU8gaW50ZXJydXB0cyAqLworCUdQSU9fR1BJT0lOVEVOID0gMHhmZjsJCS8qIEVuYWJsZSBhbGwgR1BJTyBpbnRlcnJ1cHRzICovCisKKwlpbml0X0ZJUSgpOworI2VuZGlmCit9CisKK01BQ0hJTkVfU1RBUlQgKEtFVjdBNDAwLCAiU2hhcnAgS0VWN2E0MDAiKQorCU1BSU5UQUlORVIgKCJNYXJjIFNpbmdlciIpCisJQk9PVF9NRU0gKDB4YzAwMDAwMDAsIDB4ODAwMDAwMDAsIGlvX3AydiAoMHg4MDAwMDAwMCkpCisJQk9PVF9QQVJBTVMgKDB4YzAwMDAxMDApCisJTUFQSU8gKGtldjdhNDAwX21hcF9pbykKKwlJTklUSVJRIChsaDdhNDAwX2luaXRfaXJxKQorCS50aW1lcgkJPSAmbGg3YTQweF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvYXJjaC1scGQ3YTQweC5jIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2FyY2gtbHBkN2E0MHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODIzNDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2FyY2gtbHBkN2E0MHguYwpAQCAtMCwwICsxLDI4NiBAQAorLyogYXJjaC9hcm0vbWFjaC1saDdhNDB4L2FyY2gtbHBkN2E0MHguYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgTG9naWMgUHJvZHVjdCBEZXZlbG9wbWVudAorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBDUExEMDBfUEhZUywKKwkJLmVuZAk9IENQTEQwMF9QSFlTICsgQ1BMRDAwX1NJWkUgLSAxLCAvKiBPbmx5IG5lZWRzIDE2QiAqLworCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfTFBEN0E0MFhfRVRIX0lOVCwKKwkJLmVuZAk9IElSUV9MUEQ3QTQwWF9FVEhfSU5ULAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbWM5MXgiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbWM5MXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzbWM5MXhfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsaDdhNDB4X3VzYmNsaWVudF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFVTQl9QSFlTLAorCQkuZW5kCT0gKFVTQl9QSFlTICsgMHhGRiksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfVVNCSU5UUiwKKwkJLmVuZAk9IElSUV9VU0JJTlRSLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHU2NCBsaDdhNDB4X3VzYmNsaWVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmZVTDsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbGg3YTQweF91c2JjbGllbnRfZGV2aWNlID0geworCS5uYW1lCQk9ICJsaDdhNDB4X3VkYyIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5kbWFfbWFzayA9ICZsaDdhNDB4X3VzYmNsaWVudF9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZlVMLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFIChsaDdhNDB4X3VzYmNsaWVudF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGxoN2E0MHhfdXNiY2xpZW50X3Jlc291cmNlcywKK307CisKKyNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9MSDdBNDA0KQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGxoN2E0MDRfdXNiaG9zdF9yZXNvdXJjZXMgW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBVU0JIX1BIWVMsCisJCS5lbmQJPSAoVVNCSF9QSFlTICsgMHhGRiksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfVVNISU5UUiwKKwkJLmVuZAk9IElSUV9VU0hJTlRSLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHU2NCBsaDdhNDA0X3VzYmhvc3RfZG1hX21hc2sgPSAweGZmZmZmZmZmVUw7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxoN2E0MDRfdXNiaG9zdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImxoN2E0MDQtb2hjaSIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5kbWFfbWFzayA9ICZsaDdhNDA0X3VzYmhvc3RfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmZVTCwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSAobGg3YTQwNF91c2Job3N0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbGg3YTQwNF91c2Job3N0X3Jlc291cmNlcywKK307CisKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbHBkN2E0MHhfZGV2c1tdIF9faW5pdGRhdGEgPSB7CisJJnNtYzkxeF9kZXZpY2UsCisJJmxoN2E0MHhfdXNiY2xpZW50X2RldmljZSwKKyNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9MSDdBNDA0KQorCSZsaDdhNDA0X3VzYmhvc3RfZGV2aWNlLAorI2VuZGlmCit9OworCitleHRlcm4gdm9pZCBscGQ3YTQwMF9tYXBfaW8gKHZvaWQpOworCitzdGF0aWMgdm9pZCBfX2luaXQgbHBkN2E0MHhfaW5pdCAodm9pZCkKK3sKKwlDUExEX0NPTlRST0wgfD0gICAgICgxPDw2KTsgLyogTWFzayBVU0IxIGNvbm5lY3Rpb24gSVJRICovCisJQ1BMRF9DT05UUk9MICY9IH4oMAorCQkJICB8ICgxPDwxKSAvKiBEaXNhYmxlIExDRCAqLworCQkJICB8ICgxPDwwKSAvKiBFbmFibGUgV0xBTiAqLworCQkpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMgKGxwZDdhNDB4X2RldnMsIEFSUkFZX1NJWkUgKGxwZDdhNDB4X2RldnMpKTsKK30KKworc3RhdGljIHZvaWQgbGg3YTQweF9hY2tfY3BsZF9pcnEgKHUzMiBpcnEpCit7CisJLyogQ1BMRCBkb2Vzbid0IGhhdmUgYWNrIGNhcGFiaWxpdHkgKi8KK30KKworc3RhdGljIHZvaWQgbGg3YTQweF9tYXNrX2NwbGRfaXJxICh1MzIgaXJxKQoreworCXN3aXRjaCAoaXJxKSB7CisJY2FzZSBJUlFfTFBEN0E0MFhfRVRIX0lOVDoKKwkJQ1BMRF9JTlRFUlJVUFRTID0gQ1BMRF9JTlRFUlJVUFRTIHwgMHg0OworCQlicmVhazsKKwljYXNlIElSUV9MUEQ3QTQwMF9UUzoKKwkJQ1BMRF9JTlRFUlJVUFRTID0gQ1BMRF9JTlRFUlJVUFRTIHwgMHg4OworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxoN2E0MHhfdW5tYXNrX2NwbGRfaXJxICh1MzIgaXJxKQoreworCXN3aXRjaCAoaXJxKSB7CisJY2FzZSBJUlFfTFBEN0E0MFhfRVRIX0lOVDoKKwkJQ1BMRF9JTlRFUlJVUFRTID0gQ1BMRF9JTlRFUlJVUFRTICYgfiAweDQ7CisJCWJyZWFrOworCWNhc2UgSVJRX0xQRDdBNDAwX1RTOgorCQlDUExEX0lOVEVSUlVQVFMgPSBDUExEX0lOVEVSUlVQVFMgJiB+IDB4ODsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgbHBkN2E0MHhfY3BsZF9jaGlwID0geworCS5hY2sJPSBsaDdhNDB4X2Fja19jcGxkX2lycSwKKwkubWFzawk9IGxoN2E0MHhfbWFza19jcGxkX2lycSwKKwkudW5tYXNrCT0gbGg3YTQweF91bm1hc2tfY3BsZF9pcnEsCit9OworCitzdGF0aWMgdm9pZCBscGQ3YTQweF9jcGxkX2hhbmRsZXIgKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFkZXNjICpkZXNjLAorCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IG1hc2sgPSBDUExEX0lOVEVSUlVQVFM7CisKKwlkZXNjLT5jaGlwLT5hY2sgKGlycSk7CisKKwlpZiAoKG1hc2sgJiAweDEpID09IDApCS8qIFdMQU4gKi8KKwkJSVJRX0RJU1BBVENIIChJUlFfTFBEN0E0MFhfRVRIX0lOVCk7CisKKwlpZiAoKG1hc2sgJiAweDIpID09IDApCS8qIFRvdWNoICovCisJCUlSUV9ESVNQQVRDSCAoSVJRX0xQRDdBNDAwX1RTKTsKKworCWRlc2MtPmNoaXAtPnVubWFzayAoaXJxKTsgLyogTGV2ZWwtdHJpZ2dlcmVkIG5lZWQgdGhpcyAqLworfQorCisKK3ZvaWQgX19pbml0IGxoN2E0MHhfaW5pdF9ib2FyZF9pcnEgKHZvaWQpCit7CisJaW50IGlycTsKKworCQkvKiBSZXYgQSAodjIuOCk6IFBGMCwgUEYxLCBQRjIsIGFuZCBQRjMgYXJlIGF2YWlsYWJsZSBJUlFzLgorCQkgICAgICAgICAgICAgICAgIFBGNyBzdXBwb3J0cyB0aGUgQ1BMRC4KKwkJICAgUmV2IEIgKHYzLjQpOiBQRjAsIFBGMSwgYW5kIFBGMiBhcmUgYXZhaWxhYmxlIElSUXMuCisJCSAgICAgICAgICAgICAgICAgUEYzIHN1cHBvcnRzIHRoZSBDUExELgorCQkgICAoU29tZSkgTFBEN0E0MDQgcHJlcmVsZWFzZSBib2FyZHMgcmVwb3J0IGEgdmVyc2lvbgorCQkgICBudW1iZXIgb2YgMHgxNiwgYnV0IHdlIGZvcmNlIGFuIG92ZXJyaWRlIHNpbmNlIHRoZQorCQkgICBoYXJkd2FyZSBpcyBvZiB0aGUgbmV3ZXIgdmFyaWV0eS4KKwkJKi8KKworCXVuc2lnbmVkIGNoYXIgY3BsZF92ZXJzaW9uID0gQ1BMRF9SRVZJU0lPTjsKKwlpbnQgcGluQ1BMRCA9IChjcGxkX3ZlcnNpb24gPT0gMHgyOCkgPyA3IDogMzsKKworI2lmIGRlZmluZWQgQ09ORklHX01BQ0hfTFBEN0E0MDQKKwljcGxkX3ZlcnNpb24gPSAweDM0OwkvKiBDb2VyY2UgTFBEN0E0MDQgdG8gUmV2QiAqLworI2VuZGlmCisKKwkJLyogRmlyc3QsIGNvbmZpZ3VyZSB1c2VyIGNvbnRyb2xsZWQgR1BJT0YgaW50ZXJydXB0cyAgKi8KKworCUdQSU9fUEZERAkmPSB+MHgwZjsgLyogUEYwLTMgYXJlIGlucHV0cyAqLworCUdQSU9fSU5UVFlQRTEJJj0gfjB4MGY7IC8qIFBGMC0zIGFyZSBsZXZlbCB0cmlnZ2VyZWQgKi8KKwlHUElPX0lOVFRZUEUyCSY9IH4weDBmOyAvKiBQRjAtMyBhcmUgYWN0aXZlIGxvdyAqLworCWJhcnJpZXIgKCk7CisJR1BJT19HUElPRklOVEVOIHw9ICAweDBmOyAvKiBFbmFibGUgUEYwLCBQRjEsIFBGMiwgYW5kIFBGMyBJUlFzICovCisKKwkJLyogVGhlbiwgY29uZmlndXJlIENQTEQgaW50ZXJydXB0ICovCisKKwlDUExEX0lOVEVSUlVQVFMJPSAgIDB4OWM7IC8qIERpc2FibGUgYWxsIENQTEQgaW50ZXJydXB0cyAqLworCUdQSU9fUEZERAkmPSB+KDEgPDwgcGluQ1BMRCk7IC8qIE1ha2UgaW5wdXQgKi8KKwlHUElPX0lOVFRZUEUxCXw9ICAoMSA8PCBwaW5DUExEKTsgLyogRWRnZSB0cmlnZ2VyZWQgKi8KKwlHUElPX0lOVFRZUEUyCSY9IH4oMSA8PCBwaW5DUExEKTsgLyogQWN0aXZlIGxvdyAqLworCWJhcnJpZXIgKCk7CisJR1BJT19HUElPRklOVEVOIHw9ICAoMSA8PCBwaW5DUExEKTsgLyogRW5hYmxlICovCisKKwkJLyogQ2FzY2FkZSBDUExEIGludGVycnVwdHMgKi8KKworCWZvciAoaXJxID0gSVJRX0JPQVJEX1NUQVJUOworCSAgICAgaXJxIDwgSVJRX0JPQVJEX1NUQVJUICsgTlJfSVJRX0JPQVJEOyArK2lycSkgeworCQlzZXRfaXJxX2NoaXAgKGlycSwgJmxwZDdhNDB4X2NwbGRfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlciAoaXJxLCBkb19lZGdlX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MgKGlycSwgSVJRRl9WQUxJRCk7CisJfQorCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIgKChjcGxkX3ZlcnNpb24gPT0gMHgyOCkKKwkJCQkgPyBJUlFfQ1BMRF9WMjgKKwkJCQkgOiBJUlFfQ1BMRF9WMzQsCisJCQkJIGxwZDdhNDB4X2NwbGRfaGFuZGxlcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbHBkN2E0MDBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeyAgICAgSU9fVklSVCwJICAgIElPX1BIWVMsCSAgICBJT19TSVpFLAlNVF9ERVZJQ0UgfSwKKwkvKiBNYXBwaW5nIGFkZGVkIHRvIHdvcmsgYXJvdW5kIGNoaXAgc2VsZWN0IHByb2JsZW1zICovCisJeyBJT0JBUlJJRVJfVklSVCwgSU9CQVJSSUVSX1BIWVMsIElPQkFSUklFUl9TSVpFLCBNVF9ERVZJQ0UgfSwKKwl7IENGX1ZJUlQsCUNGX1BIWVMsCUNGX1NJWkUsCU1UX0RFVklDRSB9LAorCS8qIFRoaXMgbWFwcGluZyBpcyByZWR1bmRhbnQgc2luY2UgdGhlIHNtYyBkcml2ZXIgcGVyZm9ybXMgYW5vdGhlci4gKi8KKy8qCXsgQ1BMRDAwX1ZJUlQsICBDUExEMDBfUEhZUywJQ1BMRDAwX1NJWkUsCU1UX0RFVklDRSB9LCAqLworCXsgQ1BMRDAyX1ZJUlQsICBDUExEMDJfUEhZUywJQ1BMRDAyX1NJWkUsCU1UX0RFVklDRSB9LAorCXsgQ1BMRDA2X1ZJUlQsICBDUExEMDZfUEhZUywJQ1BMRDA2X1NJWkUsCU1UX0RFVklDRSB9LAorCXsgQ1BMRDA4X1ZJUlQsCUNQTEQwOF9QSFlTLAlDUExEMDhfU0laRSwJTVRfREVWSUNFIH0sCisJeyBDUExEMENfVklSVCwJQ1BMRDBDX1BIWVMsCUNQTEQwQ19TSVpFLAlNVF9ERVZJQ0UgfSwKKwl7IENQTEQwRV9WSVJULAlDUExEMEVfUEhZUywJQ1BMRDBFX1NJWkUsCU1UX0RFVklDRSB9LAorCXsgQ1BMRDEwX1ZJUlQsCUNQTEQxMF9QSFlTLAlDUExEMTBfU0laRSwJTVRfREVWSUNFIH0sCisJeyBDUExEMTJfVklSVCwJQ1BMRDEyX1BIWVMsCUNQTEQxMl9TSVpFLAlNVF9ERVZJQ0UgfSwKKwl7IENQTEQxNF9WSVJULAlDUExEMTRfUEhZUywJQ1BMRDE0X1NJWkUsCU1UX0RFVklDRSB9LAorCXsgQ1BMRDE2X1ZJUlQsCUNQTEQxNl9QSFlTLAlDUExEMTZfU0laRSwJTVRfREVWSUNFIH0sCisJeyBDUExEMThfVklSVCwJQ1BMRDE4X1BIWVMsCUNQTEQxOF9TSVpFLAlNVF9ERVZJQ0UgfSwKKwl7IENQTEQxQV9WSVJULAlDUExEMUFfUEhZUywJQ1BMRDFBX1NJWkUsCU1UX0RFVklDRSB9LAorfTsKKwordm9pZCBfX2luaXQKK2xwZDdhNDAwX21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdCAobHBkN2E0MDBfaW9fZGVzYywgQVJSQVlfU0laRSAobHBkN2E0MDBfaW9fZGVzYykpOworCisJCS8qIEZpeHVwIChpbXByb3ZlKSBTdGF0aWMgTWVtb3J5IENvbnRyb2xsZXIgc2V0dGluZ3MgKi8KKwlTTUNfQkNSMCA9IDB4MjAwMDM5YWY7CS8qIEJvb3QgRmxhc2ggKi8KKwlTTUNfQkNSNiA9IDB4MTAwMGZiZTA7CS8qIENQTEQgKi8KKwlTTUNfQkNSNyA9IDB4MTAwMGIyYzI7CS8qIENvbXBhY3QgRmxhc2ggKi8KK30KKworI2lmZGVmIENPTkZJR19NQUNIX0xQRDdBNDAwCisKK01BQ0hJTkVfU1RBUlQgKExQRDdBNDAwLCAiTG9naWMgUHJvZHVjdCBEZXZlbG9wbWVudCBMUEQ3QTQwMC0xMCIpCisJTUFJTlRBSU5FUiAoIk1hcmMgU2luZ2VyIikKKwlCT09UX01FTSAoMHhjMDAwMDAwMCwgMHg4MDAwMDAwMCwgaW9fcDJ2ICgweDgwMDAwMDAwKSkKKwlCT09UX1BBUkFNUyAoMHhjMDAwMDEwMCkKKwlNQVBJTyAobHBkN2E0MDBfbWFwX2lvKQorCUlOSVRJUlEgKGxoN2E0MDBfaW5pdF9pcnEpCisJLnRpbWVyCQk9ICZsaDdhNDB4X3RpbWVyLAorCUlOSVRfTUFDSElORSAobHBkN2E0MHhfaW5pdCkKK01BQ0hJTkVfRU5ECisKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfTFBEN0E0MDQKKworTUFDSElORV9TVEFSVCAoTFBEN0E0MDQsICJMb2dpYyBQcm9kdWN0IERldmVsb3BtZW50IExQRDdBNDA0LTEwIikKKwlNQUlOVEFJTkVSICgiTWFyYyBTaW5nZXIiKQorCUJPT1RfTUVNICgweGMwMDAwMDAwLCAweDgwMDAwMDAwLCBpb19wMnYgKDB4ODAwMDAwMDApKQorCUJPT1RfUEFSQU1TICgweGMwMDAwMTAwKQorCU1BUElPIChscGQ3YTQwMF9tYXBfaW8pCisJSU5JVElSUSAobGg3YTQwNF9pbml0X2lycSkKKwkudGltZXIJCT0gJmxoN2E0MHhfdGltZXIsCisJSU5JVF9NQUNISU5FIChscGQ3YTQweF9pbml0KQorTUFDSElORV9FTkQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVkYTdjMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jb21tb24uaApAQCAtMCwwICsxLDE2IEBACisvKiBhcmNoL2FybS9tYWNoLWxoN2E0MHgvY29tbW9uLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmMgU2luZ2VyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgbGg3YTQweF90aW1lcjsKKworZXh0ZXJuIHZvaWQgbGg3YTQwMF9pbml0X2lycSAodm9pZCk7CitleHRlcm4gdm9pZCBsaDdhNDA0X2luaXRfaXJxICh2b2lkKTsKKworI2RlZmluZSBJUlFfRElTUEFUQ0goaXJxKSBpcnFfZGVzY1tpcnFdLmhhbmRsZSAoKGlycSksICZpcnFfZGVzY1tpcnFdLCByZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2lycS1rZXY3YTQwMC5jIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2lycS1rZXY3YTQwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MWJiMDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaXJxLWtldjdhNDAwLmMKQEAgLTAsMCArMSw5MiBAQAorLyogYXJjaC9hcm0vbWFjaC1saDdhNDB4L2lycS1rZXY3YTQwMC5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBDb2FzdGFsIEVudmlyb25tZW50YWwgU3lzdGVtcworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnFzLmg+CisKKworICAvKiBLRVY3YTQwMCBDUExEIElSUSBoYW5kbGluZyAqLworCitzdGF0aWMgdTE2IENQTERfSVJRX21hc2s7CS8qIE1hc2sgZm9yIENQTEQgSVJRcywgMSA9PSB1bm1hc2tlZCAqLworCitzdGF0aWMgdm9pZAorbGg3YTQwMF9hY2tfY3BsZF9pcnEgKHUzMiBpcnEpCit7CisJQ1BMRF9DTF9JTlQgPSAxIDw8IChpcnEgLSBJUlFfS0VWN0E0MDBfQ1BMRCk7Cit9CisKK3N0YXRpYyB2b2lkCitsaDdhNDAwX21hc2tfY3BsZF9pcnEgKHUzMiBpcnEpCit7CisJQ1BMRF9JUlFfbWFzayAmPSB+KDEgPDwgKGlycSAtIElSUV9LRVY3QTQwMF9DUExEKSk7CisJQ1BMRF9XUl9QQl9JTlRfTUFTSyA9IENQTERfSVJRX21hc2s7Cit9CisKK3N0YXRpYyB2b2lkCitsaDdhNDAwX3VubWFza19jcGxkX2lycSAodTMyIGlycSkKK3sKKwlDUExEX0lSUV9tYXNrIHw9IDEgPDwgKGlycSAtIElSUV9LRVY3QTQwMF9DUExEKTsKKwlDUExEX1dSX1BCX0lOVF9NQVNLID0gQ1BMRF9JUlFfbWFzazsKK30KKworc3RhdGljIHN0cnVjdAoraXJxY2hpcCBsaDdhNDAwX2NwbGRfY2hpcCA9IHsKKwkuYWNrCT0gbGg3YTQwMF9hY2tfY3BsZF9pcnEsCisJLm1hc2sJPSBsaDdhNDAwX21hc2tfY3BsZF9pcnEsCisJLnVubWFzawk9IGxoN2E0MDBfdW5tYXNrX2NwbGRfaXJxLAorfTsKKworc3RhdGljIHZvaWQKK2xoN2E0MDBfY3BsZF9oYW5kbGVyICh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywKKwkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdTMyIG1hc2sgPSBDUExEX0xBVENIRURfSU5UUzsKKwlpcnEgPSBJUlFfS0VWXzdBNDAwX0NQTEQ7CisJZm9yICg7IG1hc2s7IG1hc2sgPj49IDEsICsraXJxKSB7CisJCWlmIChtYXNrICYgMSkKKwkJCWRlc2NbaXJxXS5oYW5kbGUgKGlycSwgZGVzYywgcmVncyk7CisJfQorfQorCisgIC8qIElSUSBpbml0aWFsaXphdGlvbiAqLworCit2b2lkIF9faW5pdAorbGg3YTQwMF9pbml0X2JvYXJkX2lycSAodm9pZCkKK3sKKwlpbnQgaXJxOworCisJZm9yIChpcnEgPSBJUlFfS0VWN0E0MDBfQ1BMRDsKKwkgICAgIGlycSA8IElSUV9LRVY3QTQwMF9DUExEICsgTlJfSVJRX0tFVjdBNDAwX0NQTEQ7ICsraXJxKSB7CisJCXNldF9pcnFfY2hpcCAoaXJxLCAmbGg3YTQwMF9jcGxkX2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIgKGlycSwgZG9fZWRnZV9JUlEpOworCQlzZXRfaXJxX2ZsYWdzIChpcnEsIElSUUZfVkFMSUQpOworCX0KKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlciAoSVJRX0NQTEQsIGtldjdhNDAwX2NwbGRfaGFuZGxlcik7CisKKwkJLyogQ2xlYXIgYWxsIENQTEQgaW50ZXJydXB0cyAqLworCUNQTERfQ0xfSU5UID0gMHhmZjsgLyogQ1BMRF9JTlRSX01NQ19DRCB8IENQTERfSU5UUl9FVEhfSU5UOyAqLworCisgICAgLyogKioqIEZJWE1FIENGIGVuYWJsZWQgaW4gaWRlLXByb2JlLmMgKi8KKworCUdQSU9fR1BJT0lOVEVOID0gMDsJCS8qIERpc2FibGUgYWxsIEdQSU8gaW50ZXJydXB0cyAqLworCWJhcnJpZXIoKTsKKwlHUElPX0lOVFRZUEUxCisJCT0gKEdQSU9fSU5UUl9QQ0MxX0NEIHwgR1BJT19JTlRSX1BDQzFfQ0QpOyAvKiBFZGdlIHRyaWcuICovCisJR1BJT19JTlRUWVBFMiA9IDA7CQkvKiBGYWxsaW5nIGVkZ2UgJiBsb3ctbGV2ZWwgKi8KKwlHUElPX0dQSU9GRU9JID0gMHhmZjsJCS8qIENsZWFyIGFsbCBHUElPIGludGVycnVwdHMgKi8KKwlHUElPX0dQSU9JTlRFTiA9IDB4ZmY7CQkvKiBFbmFibGUgYWxsIEdQSU8gaW50ZXJydXB0cyAqLworCisJaW5pdF9GSVEoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEtbGg3YTQwMC5jIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2lycS1saDdhNDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMzNGQ4MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEtbGg3YTQwMC5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qIGFyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEtbGg3YTQwMC5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBDb2FzdGFsIEVudmlyb25tZW50YWwgU3lzdGVtcworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgorCisKKyAgLyogQ1BVIElSUSBoYW5kbGluZyAqLworCitzdGF0aWMgdm9pZCBsaDdhNDAwX21hc2tfaXJxICh1MzIgaXJxKQoreworCUlOVENfSU5URU5DID0gKDEgPDwgaXJxKTsKK30KKworc3RhdGljIHZvaWQgbGg3YTQwMF91bm1hc2tfaXJxICh1MzIgaXJxKQoreworCUlOVENfSU5URU5TID0gKDEgPDwgaXJxKTsKK30KKworc3RhdGljIHZvaWQgbGg3YTQwMF9hY2tfZ3Bpb19pcnEgKHUzMiBpcnEpCit7CisJR1BJT19HUElPRkVPSSA9ICgxIDw8IElSUV9UT19HUElPIChpcnEpKTsKKwlJTlRDX0lOVEVOQyA9ICgxIDw8IGlycSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBsaDdhNDAwX2ludGVybmFsX2NoaXAgPSB7CisJLmFjawk9IGxoN2E0MDBfbWFza19pcnEsIC8qIExldmVsIHRyaWdnZXJpbmcgLT4gbWFzayBpcyBhY2sgKi8KKwkubWFzawk9IGxoN2E0MDBfbWFza19pcnEsCisJLnVubWFzawk9IGxoN2E0MDBfdW5tYXNrX2lycSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBsaDdhNDAwX2dwaW9fY2hpcCA9IHsKKwkuYWNrCT0gbGg3YTQwMF9hY2tfZ3Bpb19pcnEsCisJLm1hc2sJPSBsaDdhNDAwX21hc2tfaXJxLAorCS51bm1hc2sJPSBsaDdhNDAwX3VubWFza19pcnEsCit9OworCisKKyAgLyogSVJRIGluaXRpYWxpemF0aW9uICovCisKK3ZvaWQgX19pbml0IGxoN2E0MDBfaW5pdF9pcnEgKHZvaWQpCit7CisJaW50IGlycTsKKworCUlOVENfSU5URU5DID0gMHhmZmZmZmZmZjsJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCUdQSU9fR1BJT0ZJTlRFTiA9IDB4MDA7CQkvKiBEaXNhYmxlIGFsbCBHUElPRiBpbnRlcnJ1cHRzICovCisJYmFycmllciAoKTsKKworCWZvciAoaXJxID0gMDsgaXJxIDwgTlJfSVJRUzsgKytpcnEpIHsKKwkJc3dpdGNoIChpcnEpIHsKKwkJY2FzZSBJUlFfR1BJTzBJTlRSOgorCQljYXNlIElSUV9HUElPMUlOVFI6CisJCWNhc2UgSVJRX0dQSU8ySU5UUjoKKwkJY2FzZSBJUlFfR1BJTzNJTlRSOgorCQljYXNlIElSUV9HUElPNElOVFI6CisJCWNhc2UgSVJRX0dQSU81SU5UUjoKKwkJY2FzZSBJUlFfR1BJTzZJTlRSOgorCQljYXNlIElSUV9HUElPN0lOVFI6CisJCQlzZXRfaXJxX2NoaXAgKGlycSwgJmxoN2E0MDBfZ3Bpb19jaGlwKTsKKwkJCXNldF9pcnFfaGFuZGxlciAoaXJxLCBkb19sZXZlbF9JUlEpOyAvKiBPSyBkZWZhdWx0ICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNldF9pcnFfY2hpcCAoaXJxLCAmbGg3YTQwMF9pbnRlcm5hbF9jaGlwKTsKKwkJCXNldF9pcnFfaGFuZGxlciAoaXJxLCBkb19sZXZlbF9JUlEpOworCQl9CisJCXNldF9pcnFfZmxhZ3MgKGlycSwgSVJRRl9WQUxJRCk7CisJfQorCisJbGg3YTQweF9pbml0X2JvYXJkX2lycSAoKTsKKworLyogKioqIEZJWE1FOiB0aGUgTEg3YTQwMCBkb2VzIHVzZSBGSVEgaW50ZXJydXB0cyBpbiBzb21lIGNhc2VzLiAgRm9yCisgICB0aGUgdGltZSBiZWluZywgdGhlc2UgYXJlIG5vdCBpbml0aWFsaXplZC4gKi8KKworLyoJaW5pdF9GSVEoKTsgKi8KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEtbGg3YTQwNC5jIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2lycS1saDdhNDA0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIyZmFkYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEtbGg3YTQwNC5jCkBAIC0wLDAgKzEsMTU4IEBACisvKiBhcmNoL2FybS9tYWNoLWxoN2E0MHgvaXJxLWxoN2E0MDQuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgTG9naWMgUHJvZHVjdCBEZXZlbG9wbWVudAorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgorCisjZGVmaW5lIFVTRV9QUklPUklUSUVTCisKKy8qIFNlZSBEb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9WZWN0b3JlZEludGVycnVwdENvbnRyb2xsZXIgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSB2ZWN0b3JlZCBpbnRlcnJ1cHQgY29udHJvbGxlcidzCisgKiBwcmlvcml0aXppbmcgZmVhdHVyZS4gKi8KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgaXJxX3ByaV92aWMxW10gPSB7CisjaWYgZGVmaW5lZCAoVVNFX1BSSU9SSVRJRVMpCitJUlFfR1BJTzNJTlRSLAorI2VuZGlmCit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgaXJxX3ByaV92aWMyW10gPSB7CisjaWYgZGVmaW5lZCAoVVNFX1BSSU9SSVRJRVMpCisJSVJRX1QzVUksIElSUV9HUElPN0lOVFIsCisJSVJRX1VBUlQxSU5UUiwgSVJRX1VBUlQySU5UUiwgSVJRX1VBUlQzSU5UUiwKKyNlbmRpZgorfTsKKworICAvKiBDUFUgSVJRIGhhbmRsaW5nICovCisKK3N0YXRpYyB2b2lkIGxoN2E0MDRfdmljMV9tYXNrX2lycSAodTMyIGlycSkKK3sKKwlWSUMxX0lOVEVOQ0xSID0gKDEgPDwgaXJxKTsKK30KKworc3RhdGljIHZvaWQgbGg3YTQwNF92aWMxX3VubWFza19pcnEgKHUzMiBpcnEpCit7CisJVklDMV9JTlRFTiA9ICgxIDw8IGlycSk7Cit9CisKK3N0YXRpYyB2b2lkIGxoN2E0MDRfdmljMl9tYXNrX2lycSAodTMyIGlycSkKK3sKKwlWSUMyX0lOVEVOQ0xSID0gKDEgPDwgKGlycSAtIDMyKSk7Cit9CisKK3N0YXRpYyB2b2lkIGxoN2E0MDRfdmljMl91bm1hc2tfaXJxICh1MzIgaXJxKQoreworCVZJQzJfSU5URU4gPSAoMSA8PCAoaXJxIC0gMzIpKTsKK30KKworc3RhdGljIHZvaWQgbGg3YTQwNF92aWMxX2Fja19ncGlvX2lycSAodTMyIGlycSkKK3sKKwlHUElPX0dQSU9GRU9JID0gKDEgPDwgSVJRX1RPX0dQSU8gKGlycSkpOworCVZJQzFfSU5URU5DTFIgPSAoMSA8PCBpcnEpOworfQorCitzdGF0aWMgdm9pZCBsaDdhNDA0X3ZpYzJfYWNrX2dwaW9faXJxICh1MzIgaXJxKQoreworCUdQSU9fR1BJT0ZFT0kgPSAoMSA8PCBJUlFfVE9fR1BJTyAoaXJxKSk7CisJVklDMl9JTlRFTkNMUiA9ICgxIDw8IGlycSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBsaDdhNDA0X3ZpYzFfY2hpcCA9IHsKKwkuYWNrCT0gbGg3YTQwNF92aWMxX21hc2tfaXJxLCAvKiBCZWNhdXNlIGxldmVsLXRyaWdnZXJlZCAqLworCS5tYXNrCT0gbGg3YTQwNF92aWMxX21hc2tfaXJxLAorCS51bm1hc2sJPSBsaDdhNDA0X3ZpYzFfdW5tYXNrX2lycSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBsaDdhNDA0X3ZpYzJfY2hpcCA9IHsKKwkuYWNrCT0gbGg3YTQwNF92aWMyX21hc2tfaXJxLCAvKiBCZWNhdXNlIGxldmVsLXRyaWdnZXJlZCAqLworCS5tYXNrCT0gbGg3YTQwNF92aWMyX21hc2tfaXJxLAorCS51bm1hc2sJPSBsaDdhNDA0X3ZpYzJfdW5tYXNrX2lycSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBsaDdhNDA0X2dwaW9fdmljMV9jaGlwID0geworCS5hY2sJPSBsaDdhNDA0X3ZpYzFfYWNrX2dwaW9faXJxLAorCS5tYXNrCT0gbGg3YTQwNF92aWMxX21hc2tfaXJxLAorCS51bm1hc2sJPSBsaDdhNDA0X3ZpYzFfdW5tYXNrX2lycSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBsaDdhNDA0X2dwaW9fdmljMl9jaGlwID0geworCS5hY2sJPSBsaDdhNDA0X3ZpYzJfYWNrX2dwaW9faXJxLAorCS5tYXNrCT0gbGg3YTQwNF92aWMyX21hc2tfaXJxLAorCS51bm1hc2sJPSBsaDdhNDA0X3ZpYzJfdW5tYXNrX2lycSwKK307CisKKyAgLyogSVJRIGluaXRpYWxpemF0aW9uICovCisKK3ZvaWQgX19pbml0IGxoN2E0MDRfaW5pdF9pcnEgKHZvaWQpCit7CisJaW50IGlycTsKKworCVZJQzFfSU5URU5DTFIgPSAweGZmZmZmZmZmOworCVZJQzJfSU5URU5DTFIgPSAweGZmZmZmZmZmOworCVZJQzFfSU5UU0VMID0gMDsJCS8qIEFsbCBJUlFzICovCisJVklDMl9JTlRTRUwgPSAwOwkJLyogQWxsIElSUXMgKi8KKwlWSUMxX05WQUREUiA9IFZBX1ZJQzFERUZBVUxUOworCVZJQzJfTlZBRERSID0gVkFfVklDMkRFRkFVTFQ7CisJVklDMV9WRUNUQUREUiA9IDA7CisJVklDMl9WRUNUQUREUiA9IDA7CisKKwlHUElPX0dQSU9GSU5URU4gPSAweDAwOwkJLyogRGlzYWJsZSBhbGwgR1BJT0YgaW50ZXJydXB0cyAqLworCWJhcnJpZXIgKCk7CisKKwkJLyogSW5zdGFsbCBwcmlvcml0aXplZCBpbnRlcnJ1cHRzLCBpZiB0aGVyZSBhcmUgYW55LiAqLworCQkvKiBUaGUgfCAweDIwKi8KKwlmb3IgKGlycSA9IDA7IGlycSA8IDE2OyArK2lycSkgeworCQkoJlZJQzFfVkFEMClbaXJxXQorCQkJPSAoaXJxIDwgQVJSQVlfU0laRSAoaXJxX3ByaV92aWMxKSkKKwkJCT8gKGlycV9wcmlfdmljMVtpcnFdIHwgVkFfVkVDVE9SRUQpIDogMDsKKwkJKCZWSUMxX1ZFQ1RDTlRMMClbaXJxXQorCQkJPSAoaXJxIDwgQVJSQVlfU0laRSAoaXJxX3ByaV92aWMxKSkKKwkJCT8gKGlycV9wcmlfdmljMVtpcnFdIHwgVklDX0NOVExfRU5BQkxFKSA6IDA7CisJCSgmVklDMl9WQUQwKVtpcnFdCisJCQk9IChpcnEgPCBBUlJBWV9TSVpFIChpcnFfcHJpX3ZpYzIpKQorCQkJPyAoaXJxX3ByaV92aWMyW2lycV0gfCBWQV9WRUNUT1JFRCkgOiAwOworCQkoJlZJQzJfVkVDVENOVEwwKVtpcnFdCisJCQk9IChpcnEgPCBBUlJBWV9TSVpFIChpcnFfcHJpX3ZpYzIpKQorCQkJPyAoaXJxX3ByaV92aWMyW2lycV0gfCBWSUNfQ05UTF9FTkFCTEUpIDogMDsKKwl9CisKKwlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7ICsraXJxKSB7CisJCXN3aXRjaCAoaXJxKSB7CisJCWNhc2UgSVJRX0dQSU8wSU5UUjoKKwkJY2FzZSBJUlFfR1BJTzFJTlRSOgorCQljYXNlIElSUV9HUElPMklOVFI6CisJCWNhc2UgSVJRX0dQSU8zSU5UUjoKKwkJY2FzZSBJUlFfR1BJTzRJTlRSOgorCQljYXNlIElSUV9HUElPNUlOVFI6CisJCWNhc2UgSVJRX0dQSU82SU5UUjoKKwkJY2FzZSBJUlFfR1BJTzdJTlRSOgorCQkJc2V0X2lycV9jaGlwIChpcnEsIGlycSA8IDMyCisJCQkJICAgICAgPyAmbGg3YTQwNF9ncGlvX3ZpYzFfY2hpcAorCQkJCSAgICAgIDogJmxoN2E0MDRfZ3Bpb192aWMyX2NoaXApOworCQkJc2V0X2lycV9oYW5kbGVyIChpcnEsIGRvX2xldmVsX0lSUSk7IC8qIE9LIGRlZmF1bHQgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc2V0X2lycV9jaGlwIChpcnEsIGlycSA8IDMyCisJCQkJICAgICAgPyAmbGg3YTQwNF92aWMxX2NoaXAKKwkJCQkgICAgICA6ICZsaDdhNDA0X3ZpYzJfY2hpcCk7CisJCQlzZXRfaXJxX2hhbmRsZXIgKGlycSwgZG9fbGV2ZWxfSVJRKTsKKwkJfQorCQlzZXRfaXJxX2ZsYWdzIChpcnEsIElSUUZfVkFMSUQpOworCX0KKworCWxoN2E0MHhfaW5pdF9ib2FyZF9pcnEgKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaXJxLWxwZDdhNDB4LmMgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaXJxLWxwZDdhNDB4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI2MmQ0NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEtbHBkN2E0MHguYwpAQCAtMCwwICsxLDEyOCBAQAorLyogYXJjaC9hcm0vbWFjaC1saDdhNDB4L2lycS1scGQ3YTQweC5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBDb2FzdGFsIEVudmlyb25tZW50YWwgU3lzdGVtcworICogIENvcHlyaWdodCAoQykgMjAwNCBMb2dpYyBQcm9kdWN0IERldmVsb3BtZW50CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+CisKKworc3RhdGljIHZvaWQgbGg3YTQweF9hY2tfY3BsZF9pcnEgKHUzMiBpcnEpCit7CisJLyogQ1BMRCBkb2Vzbid0IGhhdmUgYWNrIGNhcGFiaWxpdHkgKi8KK30KKworc3RhdGljIHZvaWQgbGg3YTQweF9tYXNrX2NwbGRfaXJxICh1MzIgaXJxKQoreworCXN3aXRjaCAoaXJxKSB7CisJY2FzZSBJUlFfTFBEN0E0MFhfRVRIX0lOVDoKKwkJQ1BMRF9JTlRFUlJVUFRTID0gQ1BMRF9JTlRFUlJVUFRTIHwgMHg0OworCQlicmVhazsKKwljYXNlIElSUV9MUEQ3QTQwMF9UUzoKKwkJQ1BMRF9JTlRFUlJVUFRTID0gQ1BMRF9JTlRFUlJVUFRTIHwgMHg4OworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxoN2E0MHhfdW5tYXNrX2NwbGRfaXJxICh1MzIgaXJxKQoreworCXN3aXRjaCAoaXJxKSB7CisJY2FzZSBJUlFfTFBEN0E0MFhfRVRIX0lOVDoKKwkJQ1BMRF9JTlRFUlJVUFRTID0gQ1BMRF9JTlRFUlJVUFRTICYgfiAweDQ7CisJCWJyZWFrOworCWNhc2UgSVJRX0xQRDdBNDAwX1RTOgorCQlDUExEX0lOVEVSUlVQVFMgPSBDUExEX0lOVEVSUlVQVFMgJiB+IDB4ODsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgbGg3YTQweF9jcGxkX2NoaXAgPSB7CisJLmFjawk9IGxoN2E0MHhfYWNrX2NwbGRfaXJxLAorCS5tYXNrCT0gbGg3YTQweF9tYXNrX2NwbGRfaXJxLAorCS51bm1hc2sJPSBsaDdhNDB4X3VubWFza19jcGxkX2lycSwKK307CisKK3N0YXRpYyB2b2lkIGxoN2E0MHhfY3BsZF9oYW5kbGVyICh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywKKwkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBtYXNrID0gQ1BMRF9JTlRFUlJVUFRTOworCisJZGVzYy0+Y2hpcC0+YWNrIChpcnEpOworCisJaWYgKChtYXNrICYgMHgxKSA9PSAwKQkvKiBXTEFOICovCisJCUlSUV9ESVNQQVRDSCAoSVJRX0xQRDdBNDBYX0VUSF9JTlQpOworCisJaWYgKChtYXNrICYgMHgyKSA9PSAwKQkvKiBUb3VjaCAqLworCQlJUlFfRElTUEFUQ0ggKElSUV9MUEQ3QTQwMF9UUyk7CisKKwlkZXNjLT5jaGlwLT51bm1hc2sgKGlycSk7IC8qIExldmVsLXRyaWdnZXJlZCBuZWVkIHRoaXMgKi8KK30KKworCisgIC8qIElSUSBpbml0aWFsaXphdGlvbiAqLworCit2b2lkIF9faW5pdCBsaDdhNDB4X2luaXRfYm9hcmRfaXJxICh2b2lkKQoreworCWludCBpcnE7CisKKwkJLyogUmV2IEEgKHYyLjgpOiBQRjAsIFBGMSwgUEYyLCBhbmQgUEYzIGFyZSBhdmFpbGFibGUgSVJRcy4KKwkJICAgICAgICAgICAgICAgICBQRjcgc3VwcG9ydHMgdGhlIENQTEQuCisJCSAgIFJldiBCICh2My40KTogUEYwLCBQRjEsIGFuZCBQRjIgYXJlIGF2YWlsYWJsZSBJUlFzLgorCQkgICAgICAgICAgICAgICAgIFBGMyBzdXBwb3J0cyB0aGUgQ1BMRC4KKwkJICAgKFNvbWUpIExQRDdBNDA0IHByZXJlbGVhc2UgYm9hcmRzIHJlcG9ydCBhIHZlcnNpb24KKwkJICAgbnVtYmVyIG9mIDB4MTYsIGJ1dCB3ZSBmb3JjZSBhbiBvdmVycmlkZSBzaW5jZSB0aGUKKwkJICAgaGFyZHdhcmUgaXMgb2YgdGhlIG5ld2VyIHZhcmlldHkuCisJCSovCisKKwl1bnNpZ25lZCBjaGFyIGNwbGRfdmVyc2lvbiA9IENQTERfUkVWSVNJT047CisJaW50IHBpbkNQTEQ7CisKKyNpZiBkZWZpbmVkIENPTkZJR19NQUNIX0xQRDdBNDA0CisJY3BsZF92ZXJzaW9uID0gMHgzNDsJLyogT3ZlcnJpZGUsIGZvciBub3cgKi8KKyNlbmRpZgorCXBpbkNQTEQgPSAoY3BsZF92ZXJzaW9uID09IDB4MjgpID8gNyA6IDM7CisKKwkJLyogRmlyc3QsIGNvbmZpZ3VyZSB1c2VyIGNvbnRyb2xsZWQgR1BJT0YgaW50ZXJydXB0cyAgKi8KKworCUdQSU9fUEZERAkmPSB+MHgwZjsgLyogUEYwLTMgYXJlIGlucHV0cyAqLworCUdQSU9fSU5UVFlQRTEJJj0gfjB4MGY7IC8qIFBGMC0zIGFyZSBsZXZlbCB0cmlnZ2VyZWQgKi8KKwlHUElPX0lOVFRZUEUyCSY9IH4weDBmOyAvKiBQRjAtMyBhcmUgYWN0aXZlIGxvdyAqLworCWJhcnJpZXIgKCk7CisJR1BJT19HUElPRklOVEVOIHw9ICAweDBmOyAvKiBFbmFibGUgUEYwLCBQRjEsIFBGMiwgYW5kIFBGMyBJUlFzICovCisKKwkJLyogVGhlbiwgY29uZmlndXJlIENQTEQgaW50ZXJydXB0ICovCisKKwlDUExEX0lOVEVSUlVQVFMJPSAgIDB4MGM7IC8qIERpc2FibGUgYWxsIENQTEQgaW50ZXJydXB0cyAqLworCUdQSU9fUEZERAkmPSB+KDEgPDwgcGluQ1BMRCk7IC8qIE1ha2UgaW5wdXQgKi8KKwlHUElPX0lOVFRZUEUxCXw9ICAoMSA8PCBwaW5DUExEKTsgLyogRWRnZSB0cmlnZ2VyZWQgKi8KKwlHUElPX0lOVFRZUEUyCSY9IH4oMSA8PCBwaW5DUExEKTsgLyogQWN0aXZlIGxvdyAqLworCWJhcnJpZXIgKCk7CisJR1BJT19HUElPRklOVEVOIHw9ICAoMSA8PCBwaW5DUExEKTsgLyogRW5hYmxlICovCisKKwkJLyogQ2FzY2FkZSBDUExEIGludGVycnVwdHMgKi8KKworCWZvciAoaXJxID0gSVJRX0JPQVJEX1NUQVJUOworCSAgICAgaXJxIDwgSVJRX0JPQVJEX1NUQVJUICsgTlJfSVJRX0JPQVJEOyArK2lycSkgeworCQlzZXRfaXJxX2NoaXAgKGlycSwgJmxoN2E0MHhfY3BsZF9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyIChpcnEsIGRvX2VkZ2VfSVJRKTsKKwkJc2V0X2lycV9mbGFncyAoaXJxLCBJUlFGX1ZBTElEKTsKKwl9CisKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlciAoKGNwbGRfdmVyc2lvbiA9PSAweDI4KQorCQkJCSA/IElSUV9DUExEX1YyOAorCQkJCSA6IElSUV9DUExEX1YzNCwKKwkJCQkgbGg3YTQweF9jcGxkX2hhbmRsZXIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFlMWM4MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC90aW1lLmMKQEAgLTAsMCArMSw3NSBAQAorLyogCisgKiAgYXJjaC9hcm0vbWFjaC1saDdhNDB4L3RpbWUuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgTG9naWMgUHJvZHVjdCBEZXZlbG9wbWVudAorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9sZWRzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisKKyNpZiBIWiA8IDEwMAorIyBkZWZpbmUgVElNRVJfQ09OVFJPTAlUSU1FUl9DT05UUk9MMgorIyBkZWZpbmUgVElNRVJfTE9BRAlUSU1FUl9MT0FEMgorIyBkZWZpbmUgVElNRVJfQ09OU1RBTlQJKDUwODQ2OS9IWikKKyMgZGVmaW5lIFRJTUVSX01PREUJKFRJTUVSX0NfRU5BQkxFIHwgVElNRVJfQ19QRVJJT0RJQyB8IFRJTUVSX0NfNTA4S0haKQorIyBkZWZpbmUgVElNRVJfRU9JCVRJTUVSX0VPSTIKKyMgZGVmaW5lIFRJTUVSX0lSUQlJUlFfVDJVSQorI2Vsc2UKKyMgZGVmaW5lIFRJTUVSX0NPTlRST0wJVElNRVJfQ09OVFJPTDMKKyMgZGVmaW5lIFRJTUVSX0xPQUQJVElNRVJfTE9BRDMKKyMgZGVmaW5lIFRJTUVSX0NPTlNUQU5UCSgzNjg2NDAwL0haKQorIyBkZWZpbmUgVElNRVJfTU9ERQkoVElNRVJfQ19FTkFCTEUgfCBUSU1FUl9DX1BFUklPRElDKQorIyBkZWZpbmUgVElNRVJfRU9JCVRJTUVSX0VPSTMKKyMgZGVmaW5lIFRJTUVSX0lSUQlJUlFfVDNVSQorI2VuZGlmCisKK3N0YXRpYyBpcnFyZXR1cm5fdAorbGg3YTQweF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKKworCVRJTUVSX0VPSSA9IDA7CisJdGltZXJfdGljayhyZWdzKTsKKworCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGxoN2E0MHhfdGltZXJfaXJxID0geworCS5uYW1lCQk9ICJMSEE3NDB4IFRpbWVyIFRpY2siLAorCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLmhhbmRsZXIJPSBsaDdhNDB4X3RpbWVyX2ludGVycnVwdAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGxoN2E0MHhfdGltZXJfaW5pdCh2b2lkKQoreworCQkJCS8qIFN0b3AvZGlzYWJsZSBhbGwgdGltZXJzICovCisJVElNRVJfQ09OVFJPTDEgPSAwOworCVRJTUVSX0NPTlRST0wyID0gMDsKKwlUSU1FUl9DT05UUk9MMyA9IDA7CisKKwlzZXR1cF9pcnEgKFRJTUVSX0lSUSwgJmxoN2E0MHhfdGltZXJfaXJxKTsKKworCVRJTUVSX0xPQUQgPSBUSU1FUl9DT05TVEFOVDsKKwlUSU1FUl9DT05UUk9MID0gVElNRVJfTU9ERTsKK30KKworc3RydWN0IHN5c190aW1lciBsaDdhNDB4X3RpbWVyID0geworCS5pbml0CQk9ICZsaDdhNDB4X3RpbWVyX2luaXQsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTQyZWZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwL0tjb25maWcKQEAgLTAsMCArMSwyMjEgQEAKK2lmIEFSQ0hfT01BUAorCittZW51ICJUSSBPTUFQIEltcGxlbWVudGF0aW9ucyIKKworY29tbWVudCAiT01BUCBDb3JlIFR5cGUiCisKK2NvbmZpZyBBUkNIX09NQVA3MzAKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUAorCWJvb2wgIk9NQVA3MzAgQmFzZWQgU3lzdGVtIgorCXNlbGVjdCBBUkNIX09NQVBfT1RHCisKK2NvbmZpZyBBUkNIX09NQVAxNTEwCisJZGVwZW5kcyBvbiBBUkNIX09NQVAKKwlkZWZhdWx0IHkKKwlib29sICJPTUFQMTUxMCBCYXNlZCBTeXN0ZW0iCisKK2NvbmZpZyBBUkNIX09NQVAxNlhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAKKwlib29sICJPTUFQMTZYWCBCYXNlZCBTeXN0ZW0iCisJc2VsZWN0IEFSQ0hfT01BUF9PVEcKKworY29uZmlnIEFSQ0hfT01BUF9PVEcKKwlib29sCisKK2NvbW1lbnQgIk9NQVAgQm9hcmQgVHlwZSIKKworY29uZmlnIE1BQ0hfT01BUF9JTk5PVkFUT1IKKwlib29sICJUSSBJbm5vdmF0b3IiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxNTEwIHx8IEFSQ0hfT01BUDE2WFgKKwloZWxwCisgICAgICAgICAgVEkgT01BUCAxNTEwIG9yIDE2MTAgSW5ub3ZhdG9yIGJvYXJkIHN1cHBvcnQuIFNheSBZIGhlcmUgaWYgeW91CisgICAgICAgICAgaGF2ZSBzdWNoIGEgYm9hcmQuCisKK2NvbmZpZyBNQUNIX09NQVBfSDIKKwlib29sICJUSSBIMiBTdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMTZYWAorICAgIAloZWxwCisJICBUSSBPTUFQIDE2MTAvMTYxMUIgSDIgYm9hcmQgc3VwcG9ydC4gU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBzdWNoCisJICBhIGJvYXJkLgorCitjb25maWcgTUFDSF9PTUFQX0gzCisJYm9vbCAiVEkgSDMgU3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDE2WFgKKyAgICAJaGVscAorCSAgVEkgT01BUCAxNzEwIEgzIGJvYXJkIHN1cHBvcnQuIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgc3VjaAorCSAgYSBib2FyZC4KKworY29uZmlnIE1BQ0hfT01BUF9INAorCWJvb2wgIlRJIEg0IFN1cHBvcnQiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYCisgICAgCWhlbHAKKwkgIFRJIE9NQVAgMTYxMCBINCBib2FyZCBzdXBwb3J0LiBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIHN1Y2gKKwkgIGEgYm9hcmQuCisKK2NvbmZpZyBNQUNIX09NQVBfT1NLCisJYm9vbCAiVEkgT1NLIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYCisgICAgCWhlbHAKKwkgIFRJIE9NQVAgNTkxMiBPU0sgKE9NQVAgU3RhcnRlciBLaXQpIGJvYXJkIHN1cHBvcnQuIFNheSBZIGhlcmUKKyAgICAgICAgICBpZiB5b3UgaGF2ZSBzdWNoIGEgYm9hcmQuCisKK2NvbmZpZyBNQUNIX09NQVBfUEVSU0VVUzIKKwlib29sICJUSSBQZXJzZXVzMiIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDczMAorICAgIAloZWxwCisJICBTdXBwb3J0IGZvciBUSSBPTUFQIDczMCBQZXJzZXVzMiBib2FyZC4gU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBzdWNoCisJICBhIGJvYXJkLgorCitjb25maWcgTUFDSF9WT0lDRUJMVUUKKwlib29sICJWb2ljZWJsdWUiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxNTEwCisJaGVscAorCSAgU3VwcG9ydCBmb3IgVm9pY2VibHVlIEdTTS9Wb0lQIGdhdGV3YXkuIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgc3VjaAorCSAgYm9hcmQuCisKK2NvbmZpZyBNQUNIX05FVFNUQVIKKwlib29sICJOZXRTdGFyIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMTUxMAorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIE5ldFN0YXIgUEJYLiBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIHN1Y2ggYSBib2FyZC4KKworY29uZmlnIE1BQ0hfT01BUF9HRU5FUklDCisJYm9vbCAiR2VuZXJpYyBPTUFQIGJvYXJkIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMTUxMCB8fCBBUkNIX09NQVAxNlhYCisJaGVscAorICAgICAgICAgIFN1cHBvcnQgZm9yIGdlbmVyaWMgT01BUC0xNTEwLCAxNjEwIG9yIDE3MTAgYm9hcmQgd2l0aAorICAgICAgICAgIG5vIEZQR0EuIENhbiBiZSB1c2VkIGFzIHRlbXBsYXRlIGZvciBwb3J0aW5nIExpbnV4IHRvCisgICAgICAgICAgY3VzdG9tIE9NQVAgYm9hcmRzLiBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgY3VzdG9tCisgICAgICAgICAgYm9hcmQuCisKK2NvbW1lbnQgIk9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zIgorCisjY29uZmlnIE9NQVBfQk9PVF9UQUcKKyMJYm9vbCAiT01BUCBib290bG9hZGVyIGluZm9ybWF0aW9uIHBhc3NpbmciCisjICAgICAgICBkZXBlbmRzIG9uIEFSQ0hfT01BUAorIyAgICAgICAgZGVmYXVsdCBuCisjICAgICAgICBoZWxwCisjICAgICAgICAgIFNheSBZLCBpZiB5b3UgaGF2ZSBhIGJvb3Rsb2FkZXIgd2hpY2ggcGFzc2VzIGluZm9ybWF0aW9uCisjICAgICAgICAgIGFib3V0IHlvdXIgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFsIGNvbmZpZ3VyYXRpb24uCisKK2NvbmZpZyBPTUFQX01VWAorCWJvb2wgIk9NQVAgbXVsdGlwbGV4aW5nIHN1cHBvcnQiCisgICAgICAgIGRlcGVuZHMgb24gQVJDSF9PTUFQCisJZGVmYXVsdCB5CisgICAgICAgIGhlbHAKKyAgICAgICAgICBQaW4gbXVsdGlwbGV4aW5nIHN1cHBvcnQgZm9yIE9NQVAgYm9hcmRzLiBJZiB5b3VyIGJvb3Rsb2FkZXIKKyAgICAgICAgICBzZXRzIHRoZSBtdWx0aXBsZXhpbmcgY29ycmVjdGx5LCBzYXkgTi4gT3RoZXJ3aXNlLCBvciBpZiB1bnN1cmUsCisgICAgICAgICAgc2F5IFkuCisKK2NvbmZpZyBPTUFQX01VWF9ERUJVRworCWJvb2wgIk11bHRpcGxleGluZyBkZWJ1ZyBvdXRwdXQiCisgICAgICAgIGRlcGVuZHMgb24gT01BUF9NVVgKKyAgICAgICAgZGVmYXVsdCBuCisgICAgICAgIGhlbHAKKyAgICAgICAgICBNYWtlcyB0aGUgbXVsdGlwbGV4aW5nIGZ1bmN0aW9ucyBwcmludCBvdXQgYSBsb3Qgb2YgZGVidWcgaW5mby4KKyAgICAgICAgICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBmaW5kIG91dCB0aGUgY29ycmVjdCB2YWx1ZXMgb2YgdGhlCisgICAgICAgICAgbXVsdGlwbGV4aW5nIHJlZ2lzdGVycy4KKworY29uZmlnIE9NQVBfTVVYX1dBUk5JTkdTCisJYm9vbCAiV2FybiBhYm91dCBwaW5zIHRoZSBib290bG9hZGVyIGRpZG4ndCBzZXQgdXAiCisgICAgICAgIGRlcGVuZHMgb24gT01BUF9NVVgKKyAgICAgICAgZGVmYXVsdCB5CisgICAgICAgIGhlbHAKKwkgIENob29zZSBZIGhlcmUgdG8gd2FybiB3aGVuZXZlciBkcml2ZXIgaW5pdGlhbGl6YXRpb24gbG9naWMgbmVlZHMKKwkgIHRvIGNoYW5nZSB0aGUgcGluIG11bHRpcGxleGluZyBzZXR1cC4gIFdoZW4gdGhlcmUgYXJlIG5vIHdhcm5pbmdzCisJICBwcmludGVkLCBpdCdzIHNhZmUgdG8gZGVzZWxlY3QgT01BUF9NVVggZm9yIHlvdXIgcHJvZHVjdC4KKworY2hvaWNlCisgICAgICAgIHByb21wdCAiU3lzdGVtIHRpbWVyIgorCWRlZmF1bHQgT01BUF9NUFVfVElNRVIKKworY29uZmlnIE9NQVBfTVBVX1RJTUVSCisJYm9vbCAiVXNlIG1wdSB0aW1lciIKKwloZWxwCisJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBPTUFQIG1wdSB0aW1lci4gVGhpcworCSAgdGltZXIgcHJvdmlkZXMgbW9yZSBpbnRyYS10aWNrIHJlc29sdXRpb24gdGhhbiB0aGUgMzJLSHogdGltZXIsCisJICBidXQgY29uc3VtZXMgbW9yZSBwb3dlci4KKworY29uZmlnIE9NQVBfMzJLX1RJTUVSCisJYm9vbCAiVXNlIDMyS0h6IHRpbWVyIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMTZYWAorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhlIE9NQVAgMzJLSHogdGltZXIuCisJICBUaGlzIHRpbWVyIHNhdmVzIHBvd2VyIGNvbXBhcmVkIHRvIHRoZSBPTUFQX01QVV9USU1FUiwgYW5kIGhhcworCSAgc3VwcG9ydCBmb3Igbm8gdGljayBkdXJpbmcgaWRsZS4gVGhlIDMyS0h6IHRpbWVyIHByb3ZpZGVzIGxlc3MKKwkgIGludHJhLXRpY2sgcmVzb2x1dGlvbiB0aGFuIE9NQVBfTVBVX1RJTUVSLiBUaGUgMzJLSHogdGltZXIgaXMKKwkgIGN1cnJlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgT01BUC0xNnh4LgorCitlbmRjaG9pY2UKKworY29uZmlnIE9NQVBfMzJLX1RJTUVSX0haCisgICAgICAgaW50ICJLZXJuZWwgaW50ZXJuYWwgdGltZXIgZnJlcXVlbmN5IGZvciAzMktIeiB0aW1lciIKKyAgICAgICByYW5nZSAzMiAxMDI0CisgICAgICAgZGVwZW5kcyBvbiBPTUFQXzMyS19USU1FUgorICAgICAgIGRlZmF1bHQgIjEyOCIKKyAgICAgICBoZWxwCisJICBLZXJuZWwgaW50ZXJuYWwgdGltZXIgZnJlcXVlbmN5IHNob3VsZCBiZSBhIGRpdmlzb3Igb2YgMzI3NjgsCisJICBzdWNoIGFzIDY0IG9yIDEyOC4KKworY2hvaWNlCisJcHJvbXB0ICJMb3ctbGV2ZWwgZGVidWcgY29uc29sZSBVQVJUIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQCisJZGVmYXVsdCBPTUFQX0xMX0RFQlVHX1VBUlQxCisKK2NvbmZpZyBPTUFQX0xMX0RFQlVHX1VBUlQxCisJYm9vbCAiVUFSVDEiCisKK2NvbmZpZyBPTUFQX0xMX0RFQlVHX1VBUlQyCisJYm9vbCAiVUFSVDIiCisKK2NvbmZpZyBPTUFQX0xMX0RFQlVHX1VBUlQzCisJYm9vbCAiVUFSVDMiCisKK2VuZGNob2ljZQorCitjb25maWcgT01BUF9BUk1fMTk1TUhaCisJYm9vbCAiT01BUCBBUk0gMTk1IE1IeiBDUFUiCisJZGVwZW5kcyBvbiBBUkNIX09NQVA3MzAKKwloZWxwCisgICAgICAgICAgRW5hYmxlIDE5NU1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBPTUFQX0FSTV8xOTJNSFoKKwlib29sICJPTUFQIEFSTSAxOTIgTUh6IENQVSIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDE2WFgKKwloZWxwCisgICAgICAgICAgRW5hYmxlIDE5Mk1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBPTUFQX0FSTV8xODJNSFoKKwlib29sICJPTUFQIEFSTSAxODIgTUh6IENQVSIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDczMAorCWhlbHAKKyAgICAgICAgICBFbmFibGUgMTgyTUh6IGNsb2NrIGZvciBPTUFQIENQVS4gSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIE9NQVBfQVJNXzE2OE1IWgorCWJvb2wgIk9NQVAgQVJNIDE2OCBNSHogQ1BVIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMTUxMCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMAorCWhlbHAKKyAgICAgICAgICBFbmFibGUgMTY4TUh6IGNsb2NrIGZvciBPTUFQIENQVS4gSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIE9NQVBfQVJNXzEyME1IWgorCWJvb2wgIk9NQVAgQVJNIDEyMCBNSHogQ1BVIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMTUxMCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMAorCWhlbHAKKyAgICAgICAgICBFbmFibGUgMTIwTUh6IGNsb2NrIGZvciBPTUFQIENQVS4gSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIE9NQVBfQVJNXzYwTUhaCisJYm9vbCAiT01BUCBBUk0gNjAgTUh6IENQVSIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDE1MTAgfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVA3MzAKKyAgICAgICAgZGVmYXVsdCB5CisJaGVscAorICAgICAgICAgIEVuYWJsZSA2ME1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBPTUFQX0FSTV8zME1IWgorCWJvb2wgIk9NQVAgQVJNIDMwIE1IeiBDUFUiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxNTEwIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQNzMwCisJaGVscAorICAgICAgICAgIEVuYWJsZSAzME1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IE4uCisKK2VuZG1lbnUKKworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtb21hcC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2FmYjExCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwL01ha2VmaWxlCkBAIC0wLDAgKzEsNDAgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisjCisKKyMgQ29tbW9uIHN1cHBvcnQKK29iai15IDo9IGNvbW1vbi5vIHRpbWUubyBpcnEubyBkbWEubyBjbG9jay5vIG11eC5vIGdwaW8ubyBtY2JzcC5vIHVzYi5vCitvYmotbSA6PQorb2JqLW4gOj0KK29iai0gIDo9CitsZWQteSA6PSBsZWRzLm8KKworIyBTcGVjaWZpYyBib2FyZCBzdXBwb3J0CitvYmotJChDT05GSUdfTUFDSF9PTUFQX0gyKSArPSBib2FyZC1oMi5vCitvYmotJChDT05GSUdfTUFDSF9PTUFQX0lOTk9WQVRPUikgKz0gYm9hcmQtaW5ub3ZhdG9yLm8KK29iai0kKENPTkZJR19NQUNIX09NQVBfR0VORVJJQykgKz0gYm9hcmQtZ2VuZXJpYy5vCitvYmotJChDT05GSUdfTUFDSF9PTUFQX1BFUlNFVVMyKSArPSBib2FyZC1wZXJzZXVzMi5vCitvYmotJChDT05GSUdfTUFDSF9PTUFQX09TSykgKz0gYm9hcmQtb3NrLm8KK29iai0kKENPTkZJR19NQUNIX09NQVBfSDMpICs9IGJvYXJkLWgzLm8KK29iai0kKENPTkZJR19NQUNIX1ZPSUNFQkxVRSkgKz0gYm9hcmQtdm9pY2VibHVlLm8KK29iai0kKENPTkZJR19NQUNIX05FVFNUQVIpICs9IGJvYXJkLW5ldHN0YXIubworCisjIE9DUEkgaW50ZXJjb25uZWN0IHN1cHBvcnQgZm9yIDE3MTAsIDE2MTAgYW5kIDU5MTIKK29iai0kKENPTkZJR19BUkNIX09NQVAxNlhYKSArPSBvY3BpLm8KKworIyBMRURzIHN1cHBvcnQKK2xlZC0kKENPTkZJR19NQUNIX09NQVBfSDIpICs9IGxlZHMtaDJwMi1kZWJ1Zy5vCitsZWQtJChDT05GSUdfTUFDSF9PTUFQX0lOTk9WQVRPUikgKz0gbGVkcy1pbm5vdmF0b3IubworbGVkLSQoQ09ORklHX01BQ0hfT01BUF9QRVJTRVVTMikgKz0gbGVkcy1oMnAyLWRlYnVnLm8KK29iai0kKENPTkZJR19MRURTKSArPSAkKGxlZC15KQorCisjIFBvd2VyIE1hbmFnZW1lbnQKK29iai0kKENPTkZJR19QTSkgKz0gcG0ubyBzbGVlcC5vCisKK2lmZXEgKCQoQ09ORklHX0FSQ0hfT01BUDE1MTApLHkpCisjIElubm92YXRvci0xNTEwIEZQR0EKK29iai0kKENPTkZJR19NQUNIX09NQVBfSU5OT1ZBVE9SKSArPSBmcGdhLm8KK2VuZGlmCisKKyMga2dkYiBzdXBwb3J0CitvYmotJChDT05GSUdfS0dEQl9TRVJJQUwpCSs9IGtnZGItc2VyaWFsLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1vbWFwL01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlMWE2YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcC9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsNCBAQAorICAgenJlbGFkZHIteQkJOj0gMHgxMDAwODAwMAorcGFyYW1zX3BoeXMteQkJOj0gMHgxMDAwMDEwMAoraW5pdHJkX3BoeXMteQkJOj0gMHgxMDgwMDAwMAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLWdlbmVyaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTAyYTJjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLWdlbmVyaWMuYwpAQCAtMCwwICsxLDk4IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLWdlbmVyaWMuYworICoKKyAqIE1vZGlmaWVkIGZyb20gYm9hcmQtaW5ub3ZhdG9yMTUxMC5jCisgKgorICogQ29kZSBmb3IgZ2VuZXJpYyBPTUFQIGJvYXJkLiBTaG91bGQgd29yayBvbiBtYW55IE9NQVAgc3lzdGVtcyB3aGVyZQorICogdGhlIGRldmljZSBkcml2ZXJzIHRha2UgY2FyZSBvZiBhbGwgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbi4KKyAqIERvIG5vdCBwdXQgYW55IGJvYXJkIHNwZWNpZmljIGNvZGUgdG8gdGhpcyBmaWxlOyBjcmVhdGUgYSBuZXcgbWFjaGluZQorICogdHlwZSBpZiB5b3UgbmVlZCBjdXN0b20gbG93LWxldmVsIGluaXRpYWxpemF0aW9ucy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK3N0YXRpYyBpbnQgX19pbml0ZGF0YSBnZW5lcmljX3NlcmlhbF9wb3J0c1tPTUFQX01BWF9OUl9QT1JUU10gPSB7MSwgMSwgMX07CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2dlbmVyaWNfaW5pdF9pcnEodm9pZCkKK3sKKwlvbWFwX2luaXRfaXJxKCk7Cit9CisKKy8qIGFzc3VtZSBubyBNaW5pLUFCIHBvcnQgKi8KKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCitzdGF0aWMgc3RydWN0IG9tYXBfdXNiX2NvbmZpZyBnZW5lcmljMTUxMF91c2JfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLnJlZ2lzdGVyX2hvc3QJPSAxLAorCS5yZWdpc3Rlcl9kZXYJPSAxLAorCS5obWNfbW9kZQk9IDE2LAorCS5waW5zWzBdCT0gMywKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCitzdGF0aWMgc3RydWN0IG9tYXBfdXNiX2NvbmZpZyBnZW5lcmljMTYxMF91c2JfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLnJlZ2lzdGVyX2hvc3QJPSAxLAorCS5yZWdpc3Rlcl9kZXYJPSAxLAorCS5obWNfbW9kZQk9IDE2LAorCS5waW5zWzBdCT0gNiwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgZ2VuZXJpY19jb25maWdbXSA9IHsKKwl7IE9NQVBfVEFHX1VTQiwgICAgICAgICAgIE5VTEwgfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2dlbmVyaWNfaW5pdCh2b2lkKQoreworCS8qCisJICogTWFrZSBzdXJlIHRoZSBzZXJpYWwgcG9ydHMgYXJlIG11eGVkIG9uIGF0IHRoaXMgcG9pbnQuCisJICogWW91IGhhdmUgdG8gbXV4IHRoZW0gb2ZmIGluIGRldmljZSBkcml2ZXJzIGxhdGVyIG9uCisJICogaWYgbm90IG5lZWRlZC4KKwkgKi8KKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCQlnZW5lcmljX2NvbmZpZ1swXS5kYXRhID0gJmdlbmVyaWMxNTEwX3VzYl9jb25maWc7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKKwlpZiAoIWNwdV9pc19vbWFwMTUxMCgpKSB7CisJCWdlbmVyaWNfY29uZmlnWzBdLmRhdGEgPSAmZ2VuZXJpYzE2MTBfdXNiX2NvbmZpZzsKKwl9CisjZW5kaWYKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IGdlbmVyaWNfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGdlbmVyaWNfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KGdlbmVyaWNfc2VyaWFsX3BvcnRzKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ2VuZXJpY19tYXBfaW8odm9pZCkKK3sKKwlvbWFwX21hcF9pbygpOworfQorCitNQUNISU5FX1NUQVJUKE9NQVBfR0VORVJJQywgIkdlbmVyaWMgT01BUDE1MTAvMTYxMC8xNzEwIikKKwlNQUlOVEFJTkVSKCJUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPiIpCisJQk9PVF9NRU0oMHgxMDAwMDAwMCwgMHhmZmYwMDAwMCwgMHhmZWYwMDAwMCkKKwlCT09UX1BBUkFNUygweDEwMDAwMTAwKQorCU1BUElPKG9tYXBfZ2VuZXJpY19tYXBfaW8pCisJSU5JVElSUShvbWFwX2dlbmVyaWNfaW5pdF9pcnEpCisJSU5JVF9NQUNISU5FKG9tYXBfZ2VuZXJpY19pbml0KQorCS50aW1lcgkJPSAmb21hcF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtaDIuYyBiL2FyY2gvYXJtL21hY2gtb21hcC9ib2FyZC1oMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMDY3ODMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtaDIuYwpAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcC9ib2FyZC1oMi5jCisgKgorICogQm9hcmQgc3BlY2lmaWMgaW5pdHMgZm9yIE9NQVAtMTYxMCBIMgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBSaWRnZVJ1biwgSW5jLgorICogQXV0aG9yOiBHcmVnIExvbm5vbiA8Z2xvbm5vbkByaWRnZXJ1bi5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBTZXBhcmF0ZWQgRlBHQSBpbnRlcnJ1cHRzIGZyb20gaW5ub3ZhdG9yMTUxMC5jIGFuZCBjbGVhbmVkIHVwIGZvciAyLjYKKyAqIENvcHlyaWdodCAoQykgMjAwNCBOb2tpYSBDb3Jwb3JhdGlvbiBieSBUb255IExpbmRyZ2VuIDx0b255QGF0b21pZGUuY29tPgorICoKKyAqIEgyIHNwZWNpZmljIGNoYW5nZXMgYW5kIGNsZWFudXAKKyAqIENvcHlyaWdodCAoQykgMjAwNCBOb2tpYSBDb3Jwb3JhdGlvbiBieSBJbXJlIERlYWsgPGltcmUuZGVha0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3RjLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKworZXh0ZXJuIGludCBvbWFwX2dwaW9faW5pdCh2b2lkKTsKKworc3RhdGljIGludCBfX2luaXRkYXRhIGgyX3NlcmlhbF9wb3J0c1tPTUFQX01BWF9OUl9QT1JUU10gPSB7MSwgMSwgMX07CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBoMl9wYXJ0aXRpb25zW10gPSB7CisJLyogYm9vdGxvYWRlciAoVS1Cb290LCBldGMpIGluIGZpcnN0IHNlY3RvciAqLworCXsKKwkgICAgICAubmFtZQkJPSAiYm9vdGxvYWRlciIsCisJICAgICAgLm9mZnNldAkJPSAwLAorCSAgICAgIC5zaXplCQk9IFNaXzEyOEssCisJICAgICAgLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLCAvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCS8qIGJvb3Rsb2FkZXIgcGFyYW1zIGluIHRoZSBuZXh0IHNlY3RvciAqLworCXsKKwkgICAgICAubmFtZQkJPSAicGFyYW1zIiwKKwkgICAgICAub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkgICAgICAuc2l6ZQkJPSBTWl8xMjhLLAorCSAgICAgIC5tYXNrX2ZsYWdzCT0gMCwKKwl9LAorCS8qIGtlcm5lbCAqLworCXsKKwkgICAgICAubmFtZQkJPSAia2VybmVsIiwKKwkgICAgICAub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkgICAgICAuc2l6ZQkJPSBTWl8yTSwKKwkgICAgICAubWFza19mbGFncwk9IDAKKwl9LAorCS8qIGZpbGUgc3lzdGVtICovCisJeworCSAgICAgIC5uYW1lCQk9ICJmaWxlc3lzdGVtIiwKKwkgICAgICAub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkgICAgICAuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCSAgICAgIC5tYXNrX2ZsYWdzCT0gMAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBoMl9mbGFzaF9kYXRhID0geworCS5tYXBfbmFtZQk9ICJjZmlfcHJvYmUiLAorCS53aWR0aAkJPSAyLAorCS5wYXJ0cwkJPSBoMl9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoaDJfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGgyX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAkJPSBPTUFQX0NTMkJfUEhZUywKKwkuZW5kCQk9IE9NQVBfQ1MyQl9QSFlTICsgT01BUF9DUzJCX1NJWkUgLSAxLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGgyX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcGZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmaDJfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaDJfZmxhc2hfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGgyX3NtYzkxeF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IE9NQVAxNjEwX0VUSFJfU1RBUlQsCQkvKiBQaHlzaWNhbCAqLworCQkuZW5kCT0gT01BUDE2MTBfRVRIUl9TVEFSVCArIDB4ZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IE9NQVBfR1BJT19JUlEoMCksCisJCS5lbmQJPSBPTUFQX0dQSU9fSVJRKDApLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaDJfc21jOTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21jOTF4IiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaDJfc21jOTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaDJfc21jOTF4X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpoMl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmaDJfZmxhc2hfZGV2aWNlLAorCSZoMl9zbWM5MXhfZGV2aWNlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGgyX2luaXRfc21jOTF4KHZvaWQpCit7CisJaWYgKChvbWFwX3JlcXVlc3RfZ3BpbygwKSkgPCAwKSB7CisJCXByaW50aygiRXJyb3IgcmVxdWVzdGluZyBncGlvIDAgZm9yIHNtYzkxeCBpcnFcbiIpOworCQlyZXR1cm47CisJfQorCW9tYXBfc2V0X2dwaW9fZWRnZV9jdHJsKDAsIE9NQVBfR1BJT19GQUxMSU5HX0VER0UpOworfQorCit2b2lkIGgyX2luaXRfaXJxKHZvaWQpCit7CisJb21hcF9pbml0X2lycSgpOworCW9tYXBfZ3Bpb19pbml0KCk7CisJaDJfaW5pdF9zbWM5MXgoKTsKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX3VzYl9jb25maWcgaDJfdXNiX2NvbmZpZyBfX2luaXRkYXRhID0geworCS8qIHVzYjEgaGFzIGEgTWluaS1BQiBwb3J0IGFuZCBleHRlcm5hbCBpc3AxMzAxIHRyYW5zY2VpdmVyICovCisJLm90ZwkJPSAyLAorCisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfT01BUAorCS5obWNfbW9kZQk9IDE5LAkvLyAwOmhvc3Qob2ZmKSAxOmRldnxvdGcgMjpkaXNhYmxlZAorCS8vIC5obWNfbW9kZQk9IDIxLAkvLyAwOmhvc3Qob2ZmKSAxOmRldihsb29wYmFjaykgMjpob3N0KGxvb3BiYWNrKQorI2VsaWYJZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQorCS8qIG5lZWRzIE9URyBjYWJsZSwgb3IgTk9OU1RBTkRBUkQgKEItdG8tTWluaUIpICovCisJLmhtY19tb2RlCT0gMjAsCS8vIDE6ZGV2fG90ZyhvZmYpIDE6aG9zdCAyOmRpc2FibGVkCisjZW5kaWYKKworCS5waW5zWzFdCT0gMywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnIGgyX21tY19jb25maWcgX19pbml0ZGF0YSA9IHsKKwkubW1jX2Jsb2NrcwkJPSAxLAorCS5tbWMxX3Bvd2VyX3BpbgkJPSAtMSwJLyogdHBzNjUwMTAgZ3BpbzMgKi8KKwkubW1jMV9zd2l0Y2hfcGluCT0gT01BUF9NUFVJTygxKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGgyX2NvbmZpZ1tdID0geworCXsgT01BUF9UQUdfVVNCLCAgICAgICAgICAgJmgyX3VzYl9jb25maWcgfSwKKwl7IE9NQVBfVEFHX01NQywgICAgICAgICAgICZoMl9tbWNfY29uZmlnIH0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgaDJfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGgyX2RldmljZXMsIEFSUkFZX1NJWkUoaDJfZGV2aWNlcykpOworCW9tYXBfYm9hcmRfY29uZmlnID0gaDJfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGgyX2NvbmZpZyk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBoMl9tYXBfaW8odm9pZCkKK3sKKwlvbWFwX21hcF9pbygpOworCW9tYXBfc2VyaWFsX2luaXQoaDJfc2VyaWFsX3BvcnRzKTsKK30KKworTUFDSElORV9TVEFSVChPTUFQX0gyLCAiVEktSDIiKQorCU1BSU5UQUlORVIoIkltcmUgRGVhayA8aW1yZS5kZWFrQG5va2lhLmNvbT4iKQorCUJPT1RfTUVNKDB4MTAwMDAwMDAsIDB4ZmZmMDAwMDAsIDB4ZmVmMDAwMDApCisJQk9PVF9QQVJBTVMoMHgxMDAwMDEwMCkKKwlNQVBJTyhoMl9tYXBfaW8pCisJSU5JVElSUShoMl9pbml0X2lycSkKKwlJTklUX01BQ0hJTkUoaDJfaW5pdCkKKwkudGltZXIJCT0gJm9tYXBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLWgzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtaDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODZhNWEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLWgzLmMKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtaDMuYworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBPTUFQMTcxMCBIMyBzcGVjaWZpYyBjb2RlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAyIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMSBSaWRnZVJ1biwgSW5jLgorICogQXV0aG9yOiBSaWRnZVJ1biwgSW5jLgorICogICAgICAgICBHcmVnIExvbm5vbiAoZ2xvbm5vbkByaWRnZXJ1bi5jb20pIG9yIGluZm9AcmlkZ2VydW4uY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC90Yy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK2V4dGVybiBpbnQgb21hcF9ncGlvX2luaXQodm9pZCk7CisKK3N0YXRpYyBpbnQgX19pbml0ZGF0YSBoM19zZXJpYWxfcG9ydHNbT01BUF9NQVhfTlJfUE9SVFNdID0gezEsIDEsIDF9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaDNfcGFydGl0aW9uc1tdID0geworCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCBzZWN0b3IgKi8KKwl7CisJICAgICAgLm5hbWUJCT0gImJvb3Rsb2FkZXIiLAorCSAgICAgIC5vZmZzZXQJCT0gMCwKKwkgICAgICAuc2l6ZQkJPSBTWl8xMjhLLAorCSAgICAgIC5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwkvKiBib290bG9hZGVyIHBhcmFtcyBpbiB0aGUgbmV4dCBzZWN0b3IgKi8KKwl7CisJICAgICAgLm5hbWUJCT0gInBhcmFtcyIsCisJICAgICAgLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJICAgICAgLnNpemUJCT0gU1pfMTI4SywKKwkgICAgICAubWFza19mbGFncwk9IDAsCisJfSwKKwkvKiBrZXJuZWwgKi8KKwl7CisJICAgICAgLm5hbWUJCT0gImtlcm5lbCIsCisJICAgICAgLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJICAgICAgLnNpemUJCT0gU1pfMk0sCisJICAgICAgLm1hc2tfZmxhZ3MJPSAwCisJfSwKKwkvKiBmaWxlIHN5c3RlbSAqLworCXsKKwkgICAgICAubmFtZQkJPSAiZmlsZXN5c3RlbSIsCisJICAgICAgLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJICAgICAgLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwkgICAgICAubWFza19mbGFncwk9IDAKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgaDNfZmxhc2hfZGF0YSA9IHsKKwkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKKwkud2lkdGgJCT0gMiwKKwkucGFydHMJCT0gaDNfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGgzX3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoM19mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gT01BUF9DUzJCX1BIWVMsCisJLmVuZAkJPSBPTUFQX0NTMkJfUEhZUyArIE9NQVBfQ1MyQl9TSVpFIC0gMSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBmbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBmbGFzaCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmgzX2ZsYXNoX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmgzX2ZsYXNoX3Jlc291cmNlLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBPTUFQMTcxMF9FVEhSX1NUQVJULAkJLyogUGh5c2ljYWwgKi8KKwkJLmVuZAk9IE9NQVAxNzEwX0VUSFJfU1RBUlQgKyAweGYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBPTUFQX0dQSU9fSVJRKDQwKSwKKwkJLmVuZAk9IE9NQVBfR1BJT19JUlEoNDApLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21jOTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21jOTF4IiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21jOTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc21jOTF4X3Jlc291cmNlcywKK307CisKKyNkZWZpbmUgR1BUSU1FUl9CQVNFCQkweEZGRkIxNDAwCisjZGVmaW5lIEdQVElNRVJfUkVHUyh4KQkoMHhGRkZCMTQwMCArICh4ICogMHg4MDApKQorI2RlZmluZSBHUFRJTUVSX1JFR1NfU0laRQkweDQ2CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW50bGF0X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ICA9IEdQVElNRVJfUkVHUygwKSwJICAgICAgLyogUGh5c2ljYWwgKi8KKwkJLmVuZCAgICA9IEdQVElNRVJfUkVHUygwKSArIEdQVElNRVJfUkVHU19TSVpFLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSBJTlRfMTYxMF9HUFRJTUVSMSwKKwkJLmVuZCAgICA9IElOVF8xNjEwX0dQVElNRVIxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGludGxhdF9kZXZpY2UgPSB7CisJLm5hbWUJICAgPSAib21hcF9pbnRsYXQiLAorCS5pZAkgICAgID0gMCwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGludGxhdF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IGludGxhdF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmZsYXNoX2RldmljZSwKKyAgICAgICAgJnNtYzkxeF9kZXZpY2UsCisJJmludGxhdF9kZXZpY2UsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfdXNiX2NvbmZpZyBoM191c2JfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLyogdXNiMSBoYXMgYSBNaW5pLUFCIHBvcnQgYW5kIGV4dGVybmFsIGlzcDEzMDEgdHJhbnNjZWl2ZXIgKi8KKwkub3RnCSAgICA9IDIsCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9PTUFQCisJLmhtY19tb2RlICAgICAgID0gMTksICAgLyogMDpob3N0KG9mZikgMTpkZXZ8b3RnIDI6ZGlzYWJsZWQgKi8KKyNlbGlmICBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCisJLyogTk9OU1RBTkRBUkQgQ0FCTEUgTkVFREVEIChCLXRvLU1pbmktQikgKi8KKwkuaG1jX21vZGUgICAgICAgPSAyMCwgICAvKiAxOmRldnxvdGcob2ZmKSAxOmhvc3QgMjpkaXNhYmxlZCAqLworI2VuZGlmCisKKwkucGluc1sxXQk9IDMsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBoM19jb25maWdbXSA9IHsKKwl7IE9NQVBfVEFHX1VTQiwJICZoM191c2JfY29uZmlnIH0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgaDNfaW5pdCh2b2lkKQoreworCSh2b2lkKSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGgzX2luaXRfc21jOTF4KHZvaWQpCit7CisJb21hcF9jZmdfcmVnKFcxNV8xNzEwX0dQSU80MCk7CisJaWYgKG9tYXBfcmVxdWVzdF9ncGlvKDQwKSA8IDApIHsKKwkJcHJpbnRrKCJFcnJvciByZXF1ZXN0aW5nIGdwaW8gNDAgZm9yIHNtYzkxeCBpcnFcbiIpOworCQlyZXR1cm47CisJfQorCW9tYXBfc2V0X2dwaW9fZWRnZV9jdHJsKDQwLCBPTUFQX0dQSU9fRkFMTElOR19FREdFKTsKK30KKwordm9pZCBoM19pbml0X2lycSh2b2lkKQoreworCW9tYXBfaW5pdF9pcnEoKTsKKwlvbWFwX2dwaW9faW5pdCgpOworCWgzX2luaXRfc21jOTF4KCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBoM19tYXBfaW8odm9pZCkKK3sKKwlvbWFwX21hcF9pbygpOworCW9tYXBfc2VyaWFsX2luaXQoaDNfc2VyaWFsX3BvcnRzKTsKK30KKworTUFDSElORV9TVEFSVChPTUFQX0gzLCAiVEkgT01BUDE3MTAgSDMgYm9hcmQiKQorCU1BSU5UQUlORVIoIlRleGFzIEluc3RydW1lbnRzLCBJbmMuIikKKwlCT09UX01FTSgweDEwMDAwMDAwLCAweGZmZjAwMDAwLCAweGZlZjAwMDAwKQorCUJPT1RfUEFSQU1TKDB4MTAwMDAxMDApCisJTUFQSU8oaDNfbWFwX2lvKQorCUlOSVRJUlEoaDNfaW5pdF9pcnEpCisJSU5JVF9NQUNISU5FKGgzX2luaXQpCisJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9ib2FyZC1pbm5vdmF0b3IuYyBiL2FyY2gvYXJtL21hY2gtb21hcC9ib2FyZC1pbm5vdmF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2NmNGRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLWlubm92YXRvci5jCkBAIC0wLDAgKzEsMjgwIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLWlubm92YXRvci5jCisgKgorICogQm9hcmQgc3BlY2lmaWMgaW5pdHMgZm9yIE9NQVAtMTUxMCBhbmQgT01BUC0xNjEwIElubm92YXRvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBSaWRnZVJ1biwgSW5jLgorICogQXV0aG9yOiBHcmVnIExvbm5vbiA8Z2xvbm5vbkByaWRnZXJ1bi5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBTZXBhcmF0ZWQgRlBHQSBpbnRlcnJ1cHRzIGZyb20gaW5ub3ZhdG9yMTUxMC5jIGFuZCBjbGVhbmVkIHVwIGZvciAyLjYKKyAqIENvcHlyaWdodCAoQykgMjAwNCBOb2tpYSBDb3Jwb3JhdGlvbiBieSBUb255IExpbmRyZ2VuIDx0b255QGF0b21pZGUuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2ZwZ2EuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdGMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorCitzdGF0aWMgaW50IF9faW5pdGRhdGEgaW5ub3ZhdG9yX3NlcmlhbF9wb3J0c1tPTUFQX01BWF9OUl9QT1JUU10gPSB7MSwgMSwgMX07CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBpbm5vdmF0b3JfcGFydGl0aW9uc1tdID0geworCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCBzZWN0b3IgKi8KKwl7CisJICAgICAgLm5hbWUJCT0gImJvb3Rsb2FkZXIiLAorCSAgICAgIC5vZmZzZXQJCT0gMCwKKwkgICAgICAuc2l6ZQkJPSBTWl8xMjhLLAorCSAgICAgIC5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwkvKiBib290bG9hZGVyIHBhcmFtcyBpbiB0aGUgbmV4dCBzZWN0b3IgKi8KKwl7CisJICAgICAgLm5hbWUJCT0gInBhcmFtcyIsCisJICAgICAgLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJICAgICAgLnNpemUJCT0gU1pfMTI4SywKKwkgICAgICAubWFza19mbGFncwk9IDAsCisJfSwKKwkvKiBrZXJuZWwgKi8KKwl7CisJICAgICAgLm5hbWUJCT0gImtlcm5lbCIsCisJICAgICAgLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJICAgICAgLnNpemUJCT0gU1pfMk0sCisJICAgICAgLm1hc2tfZmxhZ3MJPSAwCisJfSwKKwkvKiByZXN0IG9mIGZsYXNoMSBpcyBhIGZpbGUgc3lzdGVtICovCisJeworCSAgICAgIC5uYW1lCQk9ICJyb290ZnMiLAorCSAgICAgIC5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCSAgICAgIC5zaXplCQk9IFNaXzE2TSAtIFNaXzJNIC0gMiAqIFNaXzEyOEssCisJICAgICAgLm1hc2tfZmxhZ3MJPSAwCisJfSwKKwkvKiBmaWxlIHN5c3RlbSAqLworCXsKKwkgICAgICAubmFtZQkJPSAiZmlsZXN5c3RlbSIsCisJICAgICAgLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJICAgICAgLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwkgICAgICAubWFza19mbGFncwk9IDAKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgaW5ub3ZhdG9yX2ZsYXNoX2RhdGEgPSB7CisJLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCisJLndpZHRoCQk9IDIsCisJLnBhcnRzCQk9IGlubm92YXRvcl9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoaW5ub3ZhdG9yX3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbm5vdmF0b3JfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IE9NQVBfQ1MwX1BIWVMsCisJLmVuZAkJPSBPTUFQX0NTMF9QSFlTICsgU1pfMzJNIC0gMSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbm5vdmF0b3JfZmxhc2hfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZpbm5vdmF0b3JfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaW5ub3ZhdG9yX2ZsYXNoX3Jlc291cmNlLAorfTsKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisKKy8qIE9ubHkgRlBHQSBuZWVkcyB0byBiZSBtYXBwZWQgaGVyZS4gQWxsIG90aGVycyBhcmUgZG9uZSB3aXRoIGlvcmVtYXAgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaW5ub3ZhdG9yMTUxMF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKK3sgT01BUDE1MTBfRlBHQV9CQVNFLCBPTUFQMTUxMF9GUEdBX1NUQVJULCBPTUFQMTUxMF9GUEdBX1NJWkUsCisJTVRfREVWSUNFIH0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlubm92YXRvcjE1MTBfc21jOTF4X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gT01BUDE1MTBfRlBHQV9FVEhSX1NUQVJULAkvKiBQaHlzaWNhbCAqLworCQkuZW5kCT0gT01BUDE1MTBfRlBHQV9FVEhSX1NUQVJUICsgMHhmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gT01BUDE1MTBfSU5UX0VUSEVSLAorCQkuZW5kCT0gT01BUDE1MTBfSU5UX0VUSEVSLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW5ub3ZhdG9yMTUxMF9zbWM5MXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbWM5MXgiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpbm5vdmF0b3IxNTEwX3NtYzkxeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGlubm92YXRvcjE1MTBfc21jOTF4X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICppbm5vdmF0b3IxNTEwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZpbm5vdmF0b3JfZmxhc2hfZGV2aWNlLAorCSZpbm5vdmF0b3IxNTEwX3NtYzkxeF9kZXZpY2UsCit9OworCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDE1MTAgKi8KKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW5ub3ZhdG9yMTYxMF9zbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBJTk5PVkFUT1IxNjEwX0VUSFJfU1RBUlQsCQkvKiBQaHlzaWNhbCAqLworCQkuZW5kCT0gSU5OT1ZBVE9SMTYxMF9FVEhSX1NUQVJUICsgMHhmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gT01BUF9HUElPX0lSUSgwKSwKKwkJLmVuZAk9IE9NQVBfR1BJT19JUlEoMCksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbm5vdmF0b3IxNjEwX3NtYzkxeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtYzkxeCIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGlubm92YXRvcjE2MTBfc21jOTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaW5ub3ZhdG9yMTYxMF9zbWM5MXhfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmlubm92YXRvcjE2MTBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmlubm92YXRvcl9mbGFzaF9kZXZpY2UsCisJJmlubm92YXRvcjE2MTBfc21jOTF4X2RldmljZSwKK307CisKKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMTZYWCAqLworCitzdGF0aWMgdm9pZCBfX2luaXQgaW5ub3ZhdG9yX2luaXRfc21jOTF4KHZvaWQpCit7CisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJCWZwZ2Ffd3JpdGUoZnBnYV9yZWFkKE9NQVAxNTEwX0ZQR0FfUlNUKSAmIH4xLAorCQkJICAgT01BUDE1MTBfRlBHQV9SU1QpOworCQl1ZGVsYXkoNzUwKTsKKwl9IGVsc2UgeworCQlpZiAoKG9tYXBfcmVxdWVzdF9ncGlvKDApKSA8IDApIHsKKwkJCXByaW50aygiRXJyb3IgcmVxdWVzdGluZyBncGlvIDAgZm9yIHNtYzkxeCBpcnFcbiIpOworCQkJcmV0dXJuOworCQl9CisJCW9tYXBfc2V0X2dwaW9fZWRnZV9jdHJsKDAsIE9NQVBfR1BJT19SSVNJTkdfRURHRSk7CisJfQorfQorCit2b2lkIGlubm92YXRvcl9pbml0X2lycSh2b2lkKQoreworCW9tYXBfaW5pdF9pcnEoKTsKKwlvbWFwX2dwaW9faW5pdCgpOworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJCW9tYXAxNTEwX2ZwZ2FfaW5pdF9pcnEoKTsKKwl9CisjZW5kaWYKKwlpbm5vdmF0b3JfaW5pdF9zbWM5MXgoKTsKK30KKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCitzdGF0aWMgc3RydWN0IG9tYXBfdXNiX2NvbmZpZyBpbm5vdmF0b3IxNTEwX3VzYl9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkvKiBmb3IgYnVuZGxlZCBub24tc3RhbmRhcmQgaG9zdCBhbmQgcGVyaXBoZXJhbCBjYWJsZXMgKi8KKwkuaG1jX21vZGUJPSA0LAorCisJLnJlZ2lzdGVyX2hvc3QJPSAxLAorCS5waW5zWzFdCT0gNiwKKwkucGluc1syXQk9IDYsCQkvKiBDb25mbGljdHMgd2l0aCBVQVJUMiAqLworCisJLnJlZ2lzdGVyX2Rldgk9IDEsCisJLnBpbnNbMF0JPSAyLAorfTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE2WFgKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91c2JfY29uZmlnIGgyX3VzYl9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkvKiB1c2IxIGhhcyBhIE1pbmktQUIgcG9ydCBhbmQgZXh0ZXJuYWwgaXNwMTMwMSB0cmFuc2NlaXZlciAqLworCS5vdGcJCT0gMiwKKworI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX09NQVAKKwkuaG1jX21vZGUJPSAxOSwJLy8gMDpob3N0KG9mZikgMTpkZXZ8b3RnIDI6ZGlzYWJsZWQKKwkvLyAuaG1jX21vZGUJPSAyMSwJLy8gMDpob3N0KG9mZikgMTpkZXYobG9vcGJhY2spIDI6aG9zdChsb29wYmFjaykKKyNlbGlmCWRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKKwkvKiBOT05TVEFOREFSRCBDQUJMRSBORUVERUQgKEItdG8tTWluaS1CKSAqLworCS5obWNfbW9kZQk9IDIwLAkvLyAxOmRldnxvdGcob2ZmKSAxOmhvc3QgMjpkaXNhYmxlZAorI2VuZGlmCisKKwkucGluc1sxXQk9IDMsCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGlubm92YXRvcl9jb25maWdbXSA9IHsKKwl7IE9NQVBfVEFHX1VTQiwgICAgICAgICBOVUxMIH0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgaW5ub3ZhdG9yX2luaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhpbm5vdmF0b3IxNTEwX2RldmljZXMsIEFSUkFZX1NJWkUoaW5ub3ZhdG9yMTUxMF9kZXZpY2VzKSk7CisJfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE2WFgKKwlpZiAoIWNwdV9pc19vbWFwMTUxMCgpKSB7CisJCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGlubm92YXRvcjE2MTBfZGV2aWNlcywgQVJSQVlfU0laRShpbm5vdmF0b3IxNjEwX2RldmljZXMpKTsKKwl9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKQorCQlpbm5vdmF0b3JfY29uZmlnWzBdLmRhdGEgPSAmaW5ub3ZhdG9yMTUxMF91c2JfY29uZmlnOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE2WFgKKwlpZiAoY3B1X2lzX29tYXAxNjEwKCkpCisJCWlubm92YXRvcl9jb25maWdbMF0uZGF0YSA9ICZoMl91c2JfY29uZmlnOworI2VuZGlmCisJb21hcF9ib2FyZF9jb25maWcgPSBpbm5vdmF0b3JfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGlubm92YXRvcl9jb25maWcpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgaW5ub3ZhdG9yX21hcF9pbyh2b2lkKQoreworCW9tYXBfbWFwX2lvKCk7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCQlpb3RhYmxlX2luaXQoaW5ub3ZhdG9yMTUxMF9pb19kZXNjLCBBUlJBWV9TSVpFKGlubm92YXRvcjE1MTBfaW9fZGVzYykpOworCQl1ZGVsYXkoMTApOwkvKiBEZWxheSBuZWVkZWQgZm9yIEZQR0EgKi8KKworCQkvKiBEdW1wIHRoZSBJbm5vdmF0b3IgRlBHQSByZXYgZWFybHkgLSB1c2VmdWwgaW5mbyBmb3Igc3VwcG9ydC4gKi8KKwkJcHJpbnRrKCJJbm5vdmF0b3IgRlBHQSBSZXYgJWQuJWQgQm9hcmQgUmV2ICVkXG4iLAorCQkgICAgICAgZnBnYV9yZWFkKE9NQVAxNTEwX0ZQR0FfUkVWX0hJR0gpLAorCQkgICAgICAgZnBnYV9yZWFkKE9NQVAxNTEwX0ZQR0FfUkVWX0xPVyksCisJCSAgICAgICBmcGdhX3JlYWQoT01BUDE1MTBfRlBHQV9CT0FSRF9SRVYpKTsKKwl9CisjZW5kaWYKKwlvbWFwX3NlcmlhbF9pbml0KGlubm92YXRvcl9zZXJpYWxfcG9ydHMpOworfQorCitNQUNISU5FX1NUQVJUKE9NQVBfSU5OT1ZBVE9SLCAiVEktSW5ub3ZhdG9yIikKKwlNQUlOVEFJTkVSKCJNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIikKKwlCT09UX01FTSgweDEwMDAwMDAwLCAweGZmZjAwMDAwLCAweGZlZjAwMDAwKQorCUJPT1RfUEFSQU1TKDB4MTAwMDAxMDApCisJTUFQSU8oaW5ub3ZhdG9yX21hcF9pbykKKwlJTklUSVJRKGlubm92YXRvcl9pbml0X2lycSkKKwlJTklUX01BQ0hJTkUoaW5ub3ZhdG9yX2luaXQpCisJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9ib2FyZC1uZXRzdGFyLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtbmV0c3Rhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YWNiZDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtbmV0c3Rhci5jCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogTW9kaWZpZWQgZnJvbSBib2FyZC1nZW5lcmljLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgMk4gVGVsZWtvbXVuaWthY2UsIExhZGlzbGF2IE1pY2hsIDxtaWNobEAybi5jej4KKyAqCisgKiBDb2RlIGZvciBOZXRzdGFyIE9NQVAgYm9hcmQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK2V4dGVybiB2b2lkIF9faW5pdCBvbWFwX2luaXRfdGltZSh2b2lkKTsKK2V4dGVybiBpbnQgb21hcF9ncGlvX2luaXQodm9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmV0c3Rhcl9zbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBPTUFQX0NTMV9QSFlTICsgMHgzMDAsCisJCS5lbmQJPSBPTUFQX0NTMV9QSFlTICsgMHgzMDAgKyAxNiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IE9NQVBfR1BJT19JUlEoOCksCisJCS5lbmQJPSBPTUFQX0dQSU9fSVJRKDgpLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbmV0c3Rhcl9zbWM5MXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbWM5MXgiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShuZXRzdGFyX3NtYzkxeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG5ldHN0YXJfc21jOTF4X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpuZXRzdGFyX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZuZXRzdGFyX3NtYzkxeF9kZXZpY2UsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbmV0c3Rhcl9pbml0X2lycSh2b2lkKQoreworCW9tYXBfaW5pdF9pcnEoKTsKKwlvbWFwX2dwaW9faW5pdCgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbmV0c3Rhcl9pbml0KHZvaWQpCit7CisJLyogZ3JlZW4gTEVEICovCisJb21hcF9yZXF1ZXN0X2dwaW8oNCk7CisJb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oNCwgMCk7CisJLyogc21jOTF4IHJlc2V0ICovCisJb21hcF9yZXF1ZXN0X2dwaW8oNyk7CisJb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oNywgMCk7CisJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KDcsIDEpOworCXVkZWxheSgyKTsJLyogd2FpdCBhdCBsZWFzdCAxMDBucyAqLworCW9tYXBfc2V0X2dwaW9fZGF0YW91dCg3LCAwKTsKKwltZGVsYXkoNTApOwkvKiA1MG1zIHVudGlsIFBIWSByZWFkeSAqLworCS8qIHNtYzkxeCBpbnRlcnJ1cHQgcGluICovCisJb21hcF9yZXF1ZXN0X2dwaW8oOCk7CisJb21hcF9zZXRfZ3Bpb19lZGdlX2N0cmwoOCwgT01BUF9HUElPX1JJU0lOR19FREdFKTsKKworCW9tYXBfcmVxdWVzdF9ncGlvKDEyKTsKKwlvbWFwX3JlcXVlc3RfZ3BpbygxMyk7CisJb21hcF9yZXF1ZXN0X2dwaW8oMTQpOworCW9tYXBfcmVxdWVzdF9ncGlvKDE1KTsKKwlvbWFwX3NldF9ncGlvX2VkZ2VfY3RybCgxMiwgT01BUF9HUElPX0ZBTExJTkdfRURHRSk7CisJb21hcF9zZXRfZ3Bpb19lZGdlX2N0cmwoMTMsIE9NQVBfR1BJT19GQUxMSU5HX0VER0UpOworCW9tYXBfc2V0X2dwaW9fZWRnZV9jdHJsKDE0LCBPTUFQX0dQSU9fRkFMTElOR19FREdFKTsKKwlvbWFwX3NldF9ncGlvX2VkZ2VfY3RybCgxNSwgT01BUF9HUElPX0ZBTExJTkdfRURHRSk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhuZXRzdGFyX2RldmljZXMsIEFSUkFZX1NJWkUobmV0c3Rhcl9kZXZpY2VzKSk7CisKKwkvKiBTd2l0Y2ggb24gZ3JlZW4gTEVEICovCisJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KDQsIDApOworCS8qIFN3aXRjaCBvZmYgcmVkIExFRCAqLworCW9tYXBfd3JpdGViKDB4MDAsIE9NQVBfTFBHMV9QTVIpOwkvKiBEaXNhYmxlIGNsb2NrICovCisJb21hcF93cml0ZWIoMHg4MCwgT01BUF9MUEcxX0xDUik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0ZGF0YSBvbWFwX3NlcmlhbF9wb3J0c1tPTUFQX01BWF9OUl9QT1JUU10gPSB7MSwgMSwgMX07CisKK3N0YXRpYyB2b2lkIF9faW5pdCBuZXRzdGFyX21hcF9pbyh2b2lkKQoreworCW9tYXBfbWFwX2lvKCk7CisJb21hcF9zZXJpYWxfaW5pdChvbWFwX3NlcmlhbF9wb3J0cyk7Cit9CisKKyNkZWZpbmUgTUFDSElORV9QQU5JQ0VECQkxCisjZGVmaW5lIE1BQ0hJTkVfUkVCT09USU5HCTIKKyNkZWZpbmUgTUFDSElORV9SRUJPT1QJCTQKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1hY2hpbmVfc3RhdGU7CisKK3N0YXRpYyBpbnQgcGFuaWNfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LAorCSB2b2lkICpwdHIpCit7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoTUFDSElORV9QQU5JQ0VELCAmbWFjaGluZV9zdGF0ZSkpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCS8qIFN3aXRjaCBvZmYgZ3JlZW4gTEVEICovCisJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KDQsIDEpOworCS8qIEZsYXNoIHJlZCBMRUQgKi8KKwlvbWFwX3dyaXRlYigweDc4LCBPTUFQX0xQRzFfTENSKTsKKwlvbWFwX3dyaXRlYigweDAxLCBPTUFQX0xQRzFfUE1SKTsJLyogRW5hYmxlIGNsb2NrICovCisKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGFuaWNfYmxvY2sgPSB7CisJLm5vdGlmaWVyX2NhbGwJPSBwYW5pY19ldmVudCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5ldHN0YXJfbGF0ZV9pbml0KHZvaWQpCit7CisJLyogVE9ETzogU2V0dXAgZnJvbnQgcGFuZWwgc3dpdGNoIGhlcmUgKi8KKworCS8qIFNldHVwIHBhbmljIG5vdGlmaWVyICovCisJbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsICZwYW5pY19ibG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworcG9zdGNvcmVfaW5pdGNhbGwobmV0c3Rhcl9sYXRlX2luaXQpOworCitNQUNISU5FX1NUQVJUKE5FVFNUQVIsICJOZXRTdGFyIE9NQVA1OTEwIikKKwlNQUlOVEFJTkVSKCJMYWRpc2xhdiBNaWNobCA8bWljaGxAMm4uY3o+IikKKwlCT09UX01FTSgweDEwMDAwMDAwLCAweGZmZjAwMDAwLCAweGZlZjAwMDAwKQorCUJPT1RfUEFSQU1TKDB4MTAwMDAxMDApCisJTUFQSU8obmV0c3Rhcl9tYXBfaW8pCisJSU5JVElSUShuZXRzdGFyX2luaXRfaXJxKQorCUlOSVRfTUFDSElORShuZXRzdGFyX2luaXQpCisJLnRpbWVyID0gJm9tYXBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLW9zay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLW9zay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NTFmYzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtb3NrLmMKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtb3NrLmMKKyAqCisgKiBCb2FyZCBzcGVjaWZpYyBpbml0IGZvciBPTUFQNTkxMiBPU0sKKyAqCisgKiBXcml0dGVuIGJ5IERpcmsgQmVobWUgPGRpcmsuYmVobWVAZGUuYm9zY2guY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3RjLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvc2s1OTEyX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworeyBPTUFQX09TS19OT1JfRkxBU0hfQkFTRSwgT01BUF9PU0tfTk9SX0ZMQVNIX1NUQVJULCBPTUFQX09TS19OT1JfRkxBU0hfU0laRSwKKwlNVF9ERVZJQ0UgfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0ZGF0YSBvc2tfc2VyaWFsX3BvcnRzW09NQVBfTUFYX05SX1BPUlRTXSA9IHsxLCAwLCAwfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvc2s1OTEyX3NtYzkxeF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IE9NQVBfT1NLX0VUSFJfU1RBUlQsCQkvKiBQaHlzaWNhbCAqLworCQkuZW5kCT0gT01BUF9PU0tfRVRIUl9TVEFSVCArIDB4ZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IE9NQVBfR1BJT19JUlEoMCksCisJCS5lbmQJPSBPTUFQX0dQSU9fSVJRKDApLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3NrNTkxMl9zbWM5MXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbWM5MXgiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob3NrNTkxMl9zbWM5MXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBvc2s1OTEyX3NtYzkxeF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG9zazU5MTJfY2ZfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBPTUFQX0dQSU9fSVJRKDYyKSwKKwkJLmVuZAk9IE9NQVBfR1BJT19JUlEoNjIpLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3NrNTkxMl9jZl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBfY2YiLAorCS5pZAkJPSAtMSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICh2b2lkICopIDIgLyogQ1MyICovLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG9zazU5MTJfY2ZfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBvc2s1OTEyX2NmX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvc2s1OTEyX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZvc2s1OTEyX3NtYzkxeF9kZXZpY2UsCisJJm9zazU5MTJfY2ZfZGV2aWNlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9za19pbml0X3NtYzkxeCh2b2lkKQoreworCWlmICgob21hcF9yZXF1ZXN0X2dwaW8oMCkpIDwgMCkgeworCQlwcmludGsoIkVycm9yIHJlcXVlc3RpbmcgZ3BpbyAwIGZvciBzbWM5MXggaXJxXG4iKTsKKwkJcmV0dXJuOworCX0KKwlvbWFwX3NldF9ncGlvX2VkZ2VfY3RybCgwLCBPTUFQX0dQSU9fUklTSU5HX0VER0UpOworCisJLyogQ2hlY2sgRU1JRlMgd2FpdCBzdGF0ZXMgdG8gZml4IGVycm9ycyB3aXRoIFNNQ19HRVRfUEtUX0hEUiAqLworCUVNSUZTX0NDUygxKSB8PSAweDI7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvc2tfaW5pdF9jZih2b2lkKQoreworCW9tYXBfY2ZnX3JlZyhNN18xNjEwX0dQSU82Mik7CisJaWYgKChvbWFwX3JlcXVlc3RfZ3Bpbyg2MikpIDwgMCkgeworCQlwcmludGsoIkVycm9yIHJlcXVlc3RpbmcgZ3BpbyA2MiBmb3IgQ0YgaXJxXG4iKTsKKwkJcmV0dXJuOworCX0KKwkvKiBpdCdzIHJlYWxseSBhY3RpdmUtbG93ICovCisJb21hcF9zZXRfZ3Bpb19lZGdlX2N0cmwoNjIsIE9NQVBfR1BJT19GQUxMSU5HX0VER0UpOworfQorCit2b2lkIG9za19pbml0X2lycSh2b2lkKQoreworCW9tYXBfaW5pdF9pcnEoKTsKKwlvbWFwX2dwaW9faW5pdCgpOworCW9za19pbml0X3NtYzkxeCgpOworCW9za19pbml0X2NmKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91c2JfY29uZmlnIG9za191c2JfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLyogaGFzIHVzYiBob3N0IGNvbm5lY3RvciAoQSkgLi4uIGZvciBkZXZlbG9wbWVudCBpdCBjYW4gYWxzbworCSAqIGJlIHVzZWQsIHdpdGggYSBOT05TVEFOREFSRCBnZW5kZXItYmVuZGluZyBjYWJsZS9kb25nbGUsIGFzCisJICogYSBwZXJpcGhlcmFsLgorCSAqLworI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX09NQVAKKwkucmVnaXN0ZXJfZGV2CT0gMSwKKwkuaG1jX21vZGUJPSAwLAorI2Vsc2UKKwkucmVnaXN0ZXJfaG9zdAk9IDEsCisJLmhtY19tb2RlCT0gMTYsCisJLnJ3YwkJPSAxLAorI2VuZGlmCisJLnBpbnNbMF0JPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgb3NrX2NvbmZpZ1tdID0geworCXsgT01BUF9UQUdfVVNCLCAgICAgICAgICAgJm9za191c2JfY29uZmlnIH0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgb3NrX2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhvc2s1OTEyX2RldmljZXMsIEFSUkFZX1NJWkUob3NrNTkxMl9kZXZpY2VzKSk7CisJb21hcF9ib2FyZF9jb25maWcgPSBvc2tfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKG9za19jb25maWcpOworCVVTQl9UUkFOU0NFSVZFUl9DVFJMX1JFRyB8PSAoMyA8PCAxKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9za19tYXBfaW8odm9pZCkKK3sKKwlvbWFwX21hcF9pbygpOworCWlvdGFibGVfaW5pdChvc2s1OTEyX2lvX2Rlc2MsIEFSUkFZX1NJWkUob3NrNTkxMl9pb19kZXNjKSk7CisJb21hcF9zZXJpYWxfaW5pdChvc2tfc2VyaWFsX3BvcnRzKTsKK30KKworTUFDSElORV9TVEFSVChPTUFQX09TSywgIlRJLU9TSyIpCisJTUFJTlRBSU5FUigiRGlyayBCZWhtZSA8ZGlyay5iZWhtZUBkZS5ib3NjaC5jb20+IikKKwlCT09UX01FTSgweDEwMDAwMDAwLCAweGZmZjAwMDAwLCAweGZlZjAwMDAwKQorCUJPT1RfUEFSQU1TKDB4MTAwMDAxMDApCisJTUFQSU8ob3NrX21hcF9pbykKKwlJTklUSVJRKG9za19pbml0X2lycSkKKwlJTklUX01BQ0hJTkUob3NrX2luaXQpCisJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9ib2FyZC1wZXJzZXVzMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLXBlcnNldXMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ1MTVhZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcC9ib2FyZC1wZXJzZXVzMi5jCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLXBlcnNldXMyLmMKKyAqCisgKiBNb2RpZmllZCBmcm9tIGJvYXJkLWdlbmVyaWMuYworICoKKyAqIE9yaWdpbmFsIE9NQVA3MzAgc3VwcG9ydCBieSBKZWFuIFBpaGV0IDxqLXBpaGV0QHRpLmNvbT4KKyAqIFVwZGF0ZWQgZm9yIDIuNiBieSBLZXZpbiBIaWxtYW4gPGtqaEBoaWxtYW4ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9mcGdhLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBIMlAyX0RCR19GUEdBX0VUSFJfU1RBUlQsCS8qIFBoeXNpY2FsICovCisJCS5lbmQJPSBIMlAyX0RCR19GUEdBX0VUSFJfU1RBUlQgKyAweGYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJTlRfNzMwX01QVV9FWFRfTklSUSwKKwkJLmVuZAk9IDAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdGRhdGEgcDJfc2VyaWFsX3BvcnRzW09NQVBfTUFYX05SX1BPUlRTXSA9IHsxLCAxLCAwfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHAyX3BhcnRpdGlvbnNbXSA9IHsKKwkvKiBib290bG9hZGVyIChVLUJvb3QsIGV0YykgaW4gZmlyc3Qgc2VjdG9yICovCisJeworCSAgICAgIC5uYW1lCQk9ICJib290bG9hZGVyIiwKKwkgICAgICAub2Zmc2V0CQk9IDAsCisJICAgICAgLnNpemUJCT0gU1pfMTI4SywKKwkgICAgICAubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsIC8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJLyogYm9vdGxvYWRlciBwYXJhbXMgaW4gdGhlIG5leHQgc2VjdG9yICovCisJeworCSAgICAgIC5uYW1lCQk9ICJwYXJhbXMiLAorCSAgICAgIC5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCSAgICAgIC5zaXplCQk9IFNaXzEyOEssCisJICAgICAgLm1hc2tfZmxhZ3MJPSAwLAorCX0sCisJLyoga2VybmVsICovCisJeworCSAgICAgIC5uYW1lCQk9ICJrZXJuZWwiLAorCSAgICAgIC5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCSAgICAgIC5zaXplCQk9IFNaXzJNLAorCSAgICAgIC5tYXNrX2ZsYWdzCT0gMAorCX0sCisJLyogcmVzdCBvZiBmbGFzaCBpcyBhIGZpbGUgc3lzdGVtICovCisJeworCSAgICAgIC5uYW1lCQk9ICJyb290ZnMiLAorCSAgICAgIC5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCSAgICAgIC5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJICAgICAgLm1hc2tfZmxhZ3MJPSAwCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBwMl9mbGFzaF9kYXRhID0geworCS5tYXBfbmFtZQk9ICJjZmlfcHJvYmUiLAorCS53aWR0aAkJPSAyLAorCS5wYXJ0cwkJPSBwMl9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUocDJfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHAyX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAkJPSBPTUFQX0ZMQVNIXzBfU1RBUlQsCisJLmVuZAkJPSBPTUFQX0ZMQVNIXzBfU1RBUlQgKyBPTUFQX0ZMQVNIXzBfU0laRSAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcDJfZmxhc2hfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZwMl9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZwMl9mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtYzkxeCIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtYzkxeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNtYzkxeF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnAyX2ZsYXNoX2RldmljZSwKKwkmc21jOTF4X2RldmljZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3BlcnNldXMyX2luaXQodm9pZCkKK3sKKwkodm9pZCkgcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwZXJzZXVzMl9pbml0X3NtYzkxeCh2b2lkKQoreworCWZwZ2Ffd3JpdGUoMSwgSDJQMl9EQkdfRlBHQV9MQU5fUkVTRVQpOworCW1kZWxheSg1MCk7CisJZnBnYV93cml0ZShmcGdhX3JlYWQoSDJQMl9EQkdfRlBHQV9MQU5fUkVTRVQpICYgfjEsCisJCSAgIEgyUDJfREJHX0ZQR0FfTEFOX1JFU0VUKTsKKwltZGVsYXkoNTApOworfQorCit2b2lkIG9tYXBfcGVyc2V1czJfaW5pdF9pcnEodm9pZCkKK3sKKwlvbWFwX2luaXRfaXJxKCk7CisJb21hcF9ncGlvX2luaXQoKTsKKwlwZXJzZXVzMl9pbml0X3NtYzkxeCgpOworfQorCisvKiBPbmx5IEZQR0EgbmVlZHMgdG8gYmUgbWFwcGVkIGhlcmUuIEFsbCBvdGhlcnMgYXJlIGRvbmUgd2l0aCBpb3JlbWFwICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXBfcGVyc2V1czJfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJe0gyUDJfREJHX0ZQR0FfQkFTRSwgSDJQMl9EQkdfRlBHQV9TVEFSVCwgSDJQMl9EQkdfRlBHQV9TSVpFLAorCSBNVF9ERVZJQ0V9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfcGVyc2V1czJfbWFwX2lvKHZvaWQpCit7CisJb21hcF9tYXBfaW8oKTsKKwlpb3RhYmxlX2luaXQob21hcF9wZXJzZXVzMl9pb19kZXNjLAorCQkgICAgIEFSUkFZX1NJWkUob21hcF9wZXJzZXVzMl9pb19kZXNjKSk7CisKKwkvKiBFYXJseSwgYm9hcmQtZGVwZW5kZW50IGluaXQgKi8KKworCS8qCisJICogSG9sZCBHU00gUmVzZXQgdW50aWwgbmVlZGVkCisJICovCisJb21hcF93cml0ZXcob21hcF9yZWFkdyhPTUFQNzMwX0RTUF9NX0NUTCkgJiB+MSwgT01BUDczMF9EU1BfTV9DVEwpOworCisJLyoKKwkgKiBVQVJUcyAtPiBkb25lIGF1dG9tYWdpY2FsbHkgYnkgODI1MCBkcml2ZXIKKwkgKi8KKworCS8qCisJICogQ1N4IHRpbWluZ3MsIEdQSU8gTXV4IC4uLiBzZXR1cAorCSAqLworCisJLyogRmxhc2g6IENTMCB0aW1pbmdzIHNldHVwICovCisJb21hcF93cml0ZWwoMHgwMDAwZmZmMywgT01BUDczMF9GTEFTSF9DRkdfMCk7CisJb21hcF93cml0ZWwoMHgwMDAwMDA4OCwgT01BUDczMF9GTEFTSF9BQ0ZHXzApOworCisJLyoKKwkgKiBFdGhlcm5ldCBzdXBwb3J0IHRyb3VnaCB0aGUgZGVidWcgYm9hcmQKKwkgKiBDUzEgdGltaW5ncyBzZXR1cAorCSAqLworCW9tYXBfd3JpdGVsKDB4MDAwMGZmZjMsIE9NQVA3MzBfRkxBU0hfQ0ZHXzEpOworCW9tYXBfd3JpdGVsKDB4MDAwMDAwMDAsIE9NQVA3MzBfRkxBU0hfQUNGR18xKTsKKworCS8qCisJICogQ29uZmlndXJlIE1QVV9FWFRfTklSUSBJTyBpbiBJT19DT05GOSByZWdpc3RlciwKKwkgKiBJdCBpcyB1c2VkIGFzIHRoZSBFdGhlcm5ldCBjb250cm9sbGVyIGludGVycnVwdAorCSAqLworCW9tYXBfd3JpdGVsKG9tYXBfcmVhZGwoT01BUDczMF9JT19DT05GXzkpICYgMHgxRkZGRkZGRiwgT01BUDczMF9JT19DT05GXzkpOworCW9tYXBfc2VyaWFsX2luaXQocDJfc2VyaWFsX3BvcnRzKTsKK30KKworTUFDSElORV9TVEFSVChPTUFQX1BFUlNFVVMyLCAiT01BUDczMCBQZXJzZXVzMiIpCisJTUFJTlRBSU5FUigiS2V2aW4gSGlsbWFuIDxramhAaGlsbWFuLm9yZz4iKQorCUJPT1RfTUVNKDB4MTAwMDAwMDAsIDB4ZmZmMDAwMDAsIDB4ZmVmMDAwMDApCisJQk9PVF9QQVJBTVMoMHgxMDAwMDEwMCkKKwlNQVBJTyhvbWFwX3BlcnNldXMyX21hcF9pbykKKwlJTklUSVJRKG9tYXBfcGVyc2V1czJfaW5pdF9pcnEpCisJSU5JVF9NQUNISU5FKG9tYXBfcGVyc2V1czJfaW5pdCkKKwkudGltZXIJCT0gJm9tYXBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLXZvaWNlYmx1ZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLXZvaWNlYmx1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYTViZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtdm9pY2VibHVlLmMKQEAgLTAsMCArMSwyNTYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtdm9pY2VibHVlLmMKKyAqCisgKiBNb2RpZmllZCBmcm9tIGJvYXJkLWdlbmVyaWMuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCAyTiBUZWxla29tdW5pa2FjZSwgTGFkaXNsYXYgTWljaGwgPG1pY2hsQDJuLmN6PgorICoKKyAqIENvZGUgZm9yIE9NQVA1OTEwIGJhc2VkIFZvaWNlQmx1ZSBib2FyZCAoVm9JUCB0byBHU00gZ2F0ZXdheSkuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3RjLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKworZXh0ZXJuIHZvaWQgb21hcF9pbml0X3RpbWUodm9pZCk7CitleHRlcm4gaW50IG9tYXBfZ3Bpb19pbml0KHZvaWQpOworCitzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHZvaWNlYmx1ZV9wb3J0c1tdID0geworCXsKKwkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZykoT01BUF9DUzFfUEhZUyArIDB4NDAwMDApLAorCQkuaXJxCQk9IE9NQVBfR1BJT19JUlEoMTIpLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfSU9SRU1BUCwKKwkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwkJLnJlZ3NoaWZ0CT0gMSwKKwkJLnVhcnRjbGsJPSAzNjg2NDAwLAorCX0sCisJeworCQkubWFwYmFzZQk9ICh1bnNpZ25lZCBsb25nKShPTUFQX0NTMV9QSFlTICsgMHg1MDAwMCksCisJCS5pcnEJCT0gT01BUF9HUElPX0lSUSgxMyksCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9JT1JFTUFQLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAxLAorCQkudWFydGNsawk9IDM2ODY0MDAsCisJfSwKKwl7CisJCS5tYXBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpKE9NQVBfQ1MxX1BIWVMgKyAweDYwMDAwKSwKKwkJLmlycQkJPSBPTUFQX0dQSU9fSVJRKDE0KSwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX0lPUkVNQVAsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5yZWdzaGlmdAk9IDEsCisJCS51YXJ0Y2xrCT0gMzY4NjQwMCwKKwl9LAorCXsKKwkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZykoT01BUF9DUzFfUEhZUyArIDB4NzAwMDApLAorCQkuaXJxCQk9IE9NQVBfR1BJT19JUlEoMTUpLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfSU9SRU1BUCwKKwkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwkJLnJlZ3NoaWZ0CT0gMSwKKwkJLnVhcnRjbGsJPSAzNjg2NDAwLAorCX0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2VyaWFsX2RldmljZSA9IHsKKwkubmFtZQkJCT0gInNlcmlhbDgyNTAiLAorCS5pZAkJCT0gMSwKKwkuZGV2CQkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gdm9pY2VibHVlX3BvcnRzLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBleHRfdWFydF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2VyaWFsX2RldmljZSk7Cit9CithcmNoX2luaXRjYWxsKGV4dF91YXJ0X2luaXQpOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHZvaWNlYmx1ZV9zbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBPTUFQX0NTMl9QSFlTICsgMHgzMDAsCisJCS5lbmQJPSBPTUFQX0NTMl9QSFlTICsgMHgzMDAgKyAxNiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IE9NQVBfR1BJT19JUlEoOCksCisJCS5lbmQJPSBPTUFQX0dQSU9fSVJRKDgpLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugdm9pY2VibHVlX3NtYzkxeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtYzkxeCIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHZvaWNlYmx1ZV9zbWM5MXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSB2b2ljZWJsdWVfc21jOTF4X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp2b2ljZWJsdWVfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnZvaWNlYmx1ZV9zbWM5MXhfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX3VzYl9jb25maWcgdm9pY2VibHVlX3VzYl9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuaG1jX21vZGUJPSAzLAorCS5yZWdpc3Rlcl9ob3N0CT0gMSwKKwkucmVnaXN0ZXJfZGV2ICAgPSAxLAorCS5waW5zWzBdCT0gMiwKKwkucGluc1sxXQk9IDYsCisJLnBpbnNbMl0JPSA2LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgdm9pY2VibHVlX2NvbmZpZ1tdID0geworCXsgT01BUF9UQUdfVVNCLCAmdm9pY2VibHVlX3VzYl9jb25maWcgfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCB2b2ljZWJsdWVfaW5pdF9pcnEodm9pZCkKK3sKKwlvbWFwX2luaXRfaXJxKCk7CisJb21hcF9ncGlvX2luaXQoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHZvaWNlYmx1ZV9pbml0KHZvaWQpCit7CisJLyogVGhlcmUgaXMgYSBnb29kIGNoYW5jZSBib2FyZCBpcyBnb2luZyB1cCwgc28gZW5hYmxlIFBvd2VyIExFRAorCSAqIChpdCBpcyBjb25uZWN0ZWQgdGhyb3VnaCBpbnZlcnRvcikgKi8KKwlvbWFwX3dyaXRlYigweDAwLCBPTUFQX0xQRzFfTENSKTsKKwkvKiBXYXRjaGRvZyAqLworCW9tYXBfcmVxdWVzdF9ncGlvKDApOworCS8qIHNtYzkxeCByZXNldCAqLworCW9tYXBfcmVxdWVzdF9ncGlvKDcpOworCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKDcsIDApOworCW9tYXBfc2V0X2dwaW9fZGF0YW91dCg3LCAxKTsKKwl1ZGVsYXkoMik7CS8qIHdhaXQgYXQgbGVhc3QgMTAwbnMgKi8KKwlvbWFwX3NldF9ncGlvX2RhdGFvdXQoNywgMCk7CisJbWRlbGF5KDUwKTsJLyogNTBtcyB1bnRpbCBQSFkgcmVhZHkgKi8KKwkvKiBzbWM5MXggaW50ZXJydXB0IHBpbiAqLworCW9tYXBfcmVxdWVzdF9ncGlvKDgpOworCW9tYXBfc2V0X2dwaW9fZWRnZV9jdHJsKDgsIE9NQVBfR1BJT19SSVNJTkdfRURHRSk7CisJLyogMTZDNTU0IHJlc2V0Ki8KKwlvbWFwX3JlcXVlc3RfZ3Bpbyg2KTsKKwlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbig2LCAwKTsKKwlvbWFwX3NldF9ncGlvX2RhdGFvdXQoNiwgMCk7CisJLyogMTZDNTU0IGludGVycnVwdCBwaW5zICovCisJb21hcF9yZXF1ZXN0X2dwaW8oMTIpOworCW9tYXBfcmVxdWVzdF9ncGlvKDEzKTsKKwlvbWFwX3JlcXVlc3RfZ3BpbygxNCk7CisJb21hcF9yZXF1ZXN0X2dwaW8oMTUpOworCW9tYXBfc2V0X2dwaW9fZWRnZV9jdHJsKDEyLCBPTUFQX0dQSU9fUklTSU5HX0VER0UpOworCW9tYXBfc2V0X2dwaW9fZWRnZV9jdHJsKDEzLCBPTUFQX0dQSU9fUklTSU5HX0VER0UpOworCW9tYXBfc2V0X2dwaW9fZWRnZV9jdHJsKDE0LCBPTUFQX0dQSU9fUklTSU5HX0VER0UpOworCW9tYXBfc2V0X2dwaW9fZWRnZV9jdHJsKDE1LCBPTUFQX0dQSU9fUklTSU5HX0VER0UpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXModm9pY2VibHVlX2RldmljZXMsIEFSUkFZX1NJWkUodm9pY2VibHVlX2RldmljZXMpKTsKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IHZvaWNlYmx1ZV9jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUodm9pY2VibHVlX2NvbmZpZyk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0ZGF0YSBvbWFwX3NlcmlhbF9wb3J0c1tPTUFQX01BWF9OUl9QT1JUU10gPSB7MSwgMSwgMX07CisKK3N0YXRpYyB2b2lkIF9faW5pdCB2b2ljZWJsdWVfbWFwX2lvKHZvaWQpCit7CisJb21hcF9tYXBfaW8oKTsKKwlvbWFwX3NlcmlhbF9pbml0KG9tYXBfc2VyaWFsX3BvcnRzKTsKK30KKworI2RlZmluZSBNQUNISU5FX1BBTklDRUQJCTEKKyNkZWZpbmUgTUFDSElORV9SRUJPT1RJTkcJMgorI2RlZmluZSBNQUNISU5FX1JFQk9PVAkJNAorc3RhdGljIHVuc2lnbmVkIGxvbmcgbWFjaGluZV9zdGF0ZTsKKworc3RhdGljIGludCBwYW5pY19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsCisJIHZvaWQgKnB0cikKK3sKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChNQUNISU5FX1BBTklDRUQsICZtYWNoaW5lX3N0YXRlKSkKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJLyogRmxhc2ggUG93ZXIgTEVECisJICogKFRPRE86IEVuYWJsZSBjbG9jayByaWdodCB3YXkgKGVuYWJsZWQgaW4gYm9vdGxvYWRlciBhbHJlYWR5KSkgKi8KKwlvbWFwX3dyaXRlYigweDc4LCBPTUFQX0xQRzFfTENSKTsKKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwYW5pY19ibG9jayA9IHsKKwkubm90aWZpZXJfY2FsbAk9IHBhbmljX2V2ZW50LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2V0dXBfbm90aWZpZXIodm9pZCkKK3sKKwkvKiBTZXR1cCBwYW5pYyBub3RpZmllciAqLworCW5vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LCAmcGFuaWNfYmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3Bvc3Rjb3JlX2luaXRjYWxsKHNldHVwX25vdGlmaWVyKTsKKworc3RhdGljIGludCB3ZHRfZ3Bpb19zdGF0ZTsKKwordm9pZCB2b2ljZWJsdWVfd2R0X2VuYWJsZSh2b2lkKQoreworCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKDAsIDApOworCW9tYXBfc2V0X2dwaW9fZGF0YW91dCgwLCAwKTsKKwlvbWFwX3NldF9ncGlvX2RhdGFvdXQoMCwgMSk7CisJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KDAsIDApOworCXdkdF9ncGlvX3N0YXRlID0gMDsKK30KKwordm9pZCB2b2ljZWJsdWVfd2R0X2Rpc2FibGUodm9pZCkKK3sKKwlvbWFwX3NldF9ncGlvX2RhdGFvdXQoMCwgMCk7CisJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KDAsIDEpOworCW9tYXBfc2V0X2dwaW9fZGF0YW91dCgwLCAwKTsKKwlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbigwLCAxKTsKK30KKwordm9pZCB2b2ljZWJsdWVfd2R0X3Bpbmcodm9pZCkKK3sKKwlpZiAodGVzdF9iaXQoTUFDSElORV9SRUJPT1QsICZtYWNoaW5lX3N0YXRlKSkKKwkJcmV0dXJuOworCisJd2R0X2dwaW9fc3RhdGUgPSAhd2R0X2dwaW9fc3RhdGU7CisJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KDAsIHdkdF9ncGlvX3N0YXRlKTsKK30KKwordm9pZCB2b2ljZWJsdWVfcmVzZXQodm9pZCkKK3sKKwlzZXRfYml0KE1BQ0hJTkVfUkVCT09ULCAmbWFjaGluZV9zdGF0ZSk7CisJdm9pY2VibHVlX3dkdF9lbmFibGUoKTsKKwl3aGlsZSAoMSkgOworfQorCitFWFBPUlRfU1lNQk9MKHZvaWNlYmx1ZV93ZHRfZW5hYmxlKTsKK0VYUE9SVF9TWU1CT0wodm9pY2VibHVlX3dkdF9kaXNhYmxlKTsKK0VYUE9SVF9TWU1CT0wodm9pY2VibHVlX3dkdF9waW5nKTsKKworTUFDSElORV9TVEFSVChWT0lDRUJMVUUsICJWb2ljZUJsdWUgT01BUDU5MTAiKQorCU1BSU5UQUlORVIoIkxhZGlzbGF2IE1pY2hsIDxtaWNobEAybi5jej4iKQorCUJPT1RfTUVNKDB4MTAwMDAwMDAsIDB4ZmZmMDAwMDAsIDB4ZmVmMDAwMDApCisJQk9PVF9QQVJBTVMoMHgxMDAwMDEwMCkKKwlNQVBJTyh2b2ljZWJsdWVfbWFwX2lvKQorCUlOSVRJUlEodm9pY2VibHVlX2luaXRfaXJxKQorCUlOSVRfTUFDSElORSh2b2ljZWJsdWVfaW5pdCkKKwkudGltZXIgPSAmb21hcF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtb21hcC9jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MTE4NmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAvY2xvY2suYwpAQCAtMCwwICsxLDEwNzYgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL2Nsb2NrLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IE5va2lhIGNvcnBvcmF0aW9uCisgKiAgV3JpdHRlbiBieSBUdXVra2EgVGlra2FuZW4gPHR1dWtrYS50aWtrYW5lbkBlbGVrdHJvYml0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisKK3N0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKK3N0YXRpYyBERUNMQVJFX01VVEVYKGNsb2Nrc19zZW0pOworc3RhdGljIERFRklORV9TUElOTE9DSyhjbG9ja2Z3X2xvY2spOworc3RhdGljIHZvaWQgcHJvcGFnYXRlX3JhdGUoc3RydWN0IGNsayAqICBjbGspOworLyogRXh0ZXJuYWwgY2xvY2sgKE1DTEsgJiBCQ0xLKSBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQgc2V0X2V4dF9jbGtfcmF0ZShzdHJ1Y3QgY2xrICogIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK3N0YXRpYyBsb25nIHJvdW5kX2V4dF9jbGtfcmF0ZShzdHJ1Y3QgY2xrICogIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK3N0YXRpYyB2b2lkIGluaXRfZXh0X2NsayhzdHJ1Y3QgY2xrICogIGNsayk7CisvKiBNUFUgdmlydHVhbCBjbG9jayBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQgc2VsZWN0X3RhYmxlX3JhdGUoc3RydWN0IGNsayAqICBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitzdGF0aWMgbG9uZyByb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiAgY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwordm9pZCBjbGtfc2V0ZHBsbChfX3UxNiwgX191MTYpOworCitzdHJ1Y3QgbXB1X3JhdGUgcmF0ZV90YWJsZVtdID0geworCS8qIE1QVSBNSHosIHh0YWwgTUh6LCBkcGxsMSBNSHosIENLQ1RMLCBEUExMX0NUTAorCSAqIGFybWRpdiwgZHNwZGl2LCBkc3BtbXUsIHRjZGl2LCBwZXJkaXYsIGxjZGRpdgorCSAqLworI2lmIGRlZmluZWQoQ09ORklHX09NQVBfQVJNXzIxNk1IWikKKwl7IDIxNjAwMDAwMCwgMTIwMDAwMDAsIDIxNjAwMDAwMCwgMHgwNTBkLCAweDI5MTAgfSwgLyogMS8xLzIvMi8yLzggKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX09NQVBfQVJNXzE5NU1IWikKKwl7IDE5NTAwMDAwMCwgMTMwMDAwMDAsIDE5NTAwMDAwMCwgMHgwNTBlLCAweDI3OTAgfSwgLyogMS8xLzIvMi80LzggKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX09NQVBfQVJNXzE5Mk1IWikKKwl7IDE5MjAwMDAwMCwgMTkyMDAwMDAsIDE5MjAwMDAwMCwgMHgwNTBmLCAweDI1MTAgfSwgLyogMS8xLzIvMi84LzggKi8KKwl7IDE5MjAwMDAwMCwgMTIwMDAwMDAsIDE5MjAwMDAwMCwgMHgwNTBmLCAweDI4MTAgfSwgLyogMS8xLzIvMi84LzggKi8KKwl7ICA5NjAwMDAwMCwgMTIwMDAwMDAsIDE5MjAwMDAwMCwgMHgwNTVmLCAweDI4MTAgfSwgLyogMi8yLzIvMi84LzggKi8KKwl7ICA0ODAwMDAwMCwgMTIwMDAwMDAsIDE5MjAwMDAwMCwgMHgwY2NmLCAweDI4MTAgfSwgLyogNC80LzQvNC84LzggKi8KKwl7ICAyNDAwMDAwMCwgMTIwMDAwMDAsIDE5MjAwMDAwMCwgMHgwZmZmLCAweDI4MTAgfSwgLyogOC84LzgvOC84LzggKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX09NQVBfQVJNXzE4Mk1IWikKKwl7IDE4MjAwMDAwMCwgMTMwMDAwMDAsIDE4MjAwMDAwMCwgMHgwNTBlLCAweDI3MTAgfSwgLyogMS8xLzIvMi80LzggKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX09NQVBfQVJNXzE2OE1IWikKKwl7IDE2ODAwMDAwMCwgMTIwMDAwMDAsIDE2ODAwMDAwMCwgMHgwMTBmLCAweDI3MTAgfSwgLyogMS8xLzEvMi84LzggKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX09NQVBfQVJNXzE1ME1IWikKKwl7IDE1MDAwMDAwMCwgMTIwMDAwMDAsIDE1MDAwMDAwMCwgMHgxNTBhLCAweDJjYjAgfSwgLyogMC8wLzEvMS8yLzIgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX09NQVBfQVJNXzEyME1IWikKKwl7IDEyMDAwMDAwMCwgMTIwMDAwMDAsIDEyMDAwMDAwMCwgMHgwMTBhLCAweDI1MTAgfSwgLyogMS8xLzEvMi80LzQgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX09NQVBfQVJNXzk2TUhaKQorCXsgIDk2MDAwMDAwLCAxMjAwMDAwMCwgIDk2MDAwMDAwLCAweDAwMDUsIDB4MjQxMCB9LCAvKiAxLzEvMS8xLzIvMiAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fNjBNSFopCisJeyAgNjAwMDAwMDAsIDEyMDAwMDAwLCAgNjAwMDAwMDAsIDB4MDAwNSwgMHgyMjkwIH0sIC8qIDEvMS8xLzEvMi8yICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8zME1IWikKKwl7ICAzMDAwMDAwMCwgMTIwMDAwMDAsICA2MDAwMDAwMCwgMHgwNTU1LCAweDIyOTAgfSwgLyogMi8yLzIvMi8yLzIgKi8KKyNlbmRpZgorCXsgMCwgMCwgMCwgMCwgMCB9LAorfTsKKworCitzdGF0aWMgdm9pZCBja2N0bF9yZWNhbGMoc3RydWN0IGNsayAqICBjbGspCit7CisJaW50IGRzb3I7CisKKwkvKiBDYWxjdWxhdGUgZGl2aXNvciBlbmNvZGVkIGFzIDItYml0IGV4cG9uZW50ICovCisJZHNvciA9IDEgPDwgKDMgJiAob21hcF9yZWFkdyhBUk1fQ0tDVEwpID4+IGNsay0+cmF0ZV9vZmZzZXQpKTsKKwlpZiAodW5saWtlbHkoY2xrLT5yYXRlID09IGNsay0+cGFyZW50LT5yYXRlIC8gZHNvcikpCisJCXJldHVybjsgLyogTm8gY2hhbmdlLCBxdWljayBleGl0ICovCisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkc29yOworCisJaWYgKHVubGlrZWx5KGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKQorCQlwcm9wYWdhdGVfcmF0ZShjbGspOworfQorCisKK3N0YXRpYyB2b2lkIGZvbGxvd3BhcmVudF9yZWNhbGMoc3RydWN0IGNsayAqICBjbGspCit7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGU7Cit9CisKKworc3RhdGljIHZvaWQgd2F0Y2hkb2dfcmVjYWxjKHN0cnVjdCBjbGsgKiAgY2xrKQoreworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gMTQ7Cit9CisKKworc3RhdGljIHN0cnVjdCBjbGsgY2tfcmVmID0geworCS5uYW1lCQk9ICJja19yZWYiLAorCS5yYXRlCQk9IDEyMDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgQUxXQVlTX0VOQUJMRUQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBja19kcGxsMSA9IHsKKwkubmFtZQkJPSAiY2tfZHBsbDEiLAorCS5wYXJlbnQJCT0gJmNrX3JlZiwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2tfZHBsbDFvdXQgPSB7CisJLm5hbWUJCT0gImNrX2RwbGwxb3V0IiwKKwkucGFyZW50CQk9ICZja19kcGxsMSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCisJLmVuYWJsZV9yZWcJPSBBUk1fSURMRUNUMiwKKwkuZW5hYmxlX2JpdAk9IEVOX0NLT1VUX0FSTSwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXJtX2NrID0geworCS5uYW1lCQk9ICJhcm1fY2siLAorCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgUkFURV9DS0NUTCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCS5yYXRlX29mZnNldAk9IENLQ1RMX0FSTURJVl9PRkZTRVQsCisJLnJlY2FsYwkJPSAmY2tjdGxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXJtcGVyX2NrID0geworCS5uYW1lCQk9ICJhcm1wZXJfY2siLAorCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgUkFURV9DS0NUTCwKKwkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QyLAorCS5lbmFibGVfYml0CT0gRU5fUEVSQ0ssCisJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfUEVSRElWX09GRlNFVCwKKwkucmVjYWxjCQk9ICZja2N0bF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhcm1fZ3Bpb19jayA9IHsKKwkubmFtZQkJPSAiYXJtX2dwaW9fY2siLAorCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCwKKwkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QyLAorCS5lbmFibGVfYml0CT0gRU5fR1BJT0NLLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhcm14b3JfY2sgPSB7CisJLm5hbWUJCT0gImFybXhvcl9jayIsCisJLnBhcmVudAkJPSAmY2tfcmVmLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYLAorCS5lbmFibGVfcmVnCT0gQVJNX0lETEVDVDIsCisJLmVuYWJsZV9iaXQJPSBFTl9YT1JQQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFybXRpbV9jayA9IHsKKwkubmFtZQkJPSAiYXJtdGltX2NrIiwKKwkucGFyZW50CQk9ICZja19yZWYsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFgsCisJLmVuYWJsZV9yZWcJPSBBUk1fSURMRUNUMiwKKwkuZW5hYmxlX2JpdAk9IEVOX1RJTUNLLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhcm13ZHRfY2sgPSB7CisJLm5hbWUJCT0gImFybXdkdF9jayIsCisJLnBhcmVudAkJPSAmY2tfcmVmLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYLAorCS5lbmFibGVfcmVnCT0gQVJNX0lETEVDVDIsCisJLmVuYWJsZV9iaXQJPSBFTl9XRFRDSywKKwkucmVjYWxjCQk9ICZ3YXRjaGRvZ19yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhcm1pbnRoX2NrMTZ4eCA9IHsKKwkubmFtZQkJPSAiYXJtaW50aF9jayIsCisJLnBhcmVudAkJPSAmYXJtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS8qIE5vdGU6IE9uIDE2eHggdGhlIGZyZXF1ZW5jeSBjYW4gYmUgZGl2aWRlZCBieSAyIGJ5IHByb2dyYW1taW5nCisJICogQVJNX0NLQ1RMOkFSTV9JTlRIQ0tfU0VMKDE0KSB0byAxCisJICoKKwkgKiAxNTEwIHZlcnNpb24gaXMgaW4gVEMgY2xvY2tzLgorCSAqLworfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNwX2NrID0geworCS5uYW1lCQk9ICJkc3BfY2siLAorCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgUkFURV9DS0NUTCwKKwkuZW5hYmxlX3JlZwk9IEFSTV9DS0NUTCwKKwkuZW5hYmxlX2JpdAk9IEVOX0RTUENLLAorCS5yYXRlX29mZnNldAk9IENLQ1RMX0RTUERJVl9PRkZTRVQsCisJLnJlY2FsYwkJPSAmY2tjdGxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNwbW11X2NrID0geworCS5uYW1lCQk9ICJkc3BtbXVfY2siLAorCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgUkFURV9DS0NUTCB8IEFMV0FZU19FTkFCTEVELAorCS5yYXRlX29mZnNldAk9IENLQ1RMX0RTUE1NVURJVl9PRkZTRVQsCisJLnJlY2FsYwkJPSAmY2tjdGxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdGNfY2sgPSB7CisJLm5hbWUJCT0gInRjX2NrIiwKKwkucGFyZW50CQk9ICZja19kcGxsMSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8IENMT0NLX0lOX09NQVA3MzAgfAorCQkJICBSQVRFX0NLQ1RMIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCisJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfVENESVZfT0ZGU0VULAorCS5yZWNhbGMJCT0gJmNrY3RsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFybWludGhfY2sxNTEwID0geworCS5uYW1lCQk9ICJhcm1pbnRoX2NrIiwKKwkucGFyZW50CQk9ICZ0Y19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkvKiBOb3RlOiBPbiAxNTEwIHRoZSBmcmVxdWVuY3kgZm9sbG93cyBUQ19DSworCSAqCisJICogMTZ4eCB2ZXJzaW9uIGlzIGluIE1QVSBjbG9ja3MuCisJICovCit9OworCitzdGF0aWMgc3RydWN0IGNsayB0aXBiX2NrID0geworCS5uYW1lCQk9ICJ0aWJwX2NrIiwKKwkucGFyZW50CQk9ICZ0Y19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGwzX29jcGlfY2sgPSB7CisJLm5hbWUJCT0gImwzX29jcGlfY2siLAorCS5wYXJlbnQJCT0gJnRjX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCwKKwkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QzLAorCS5lbmFibGVfYml0CT0gRU5fT0NQSV9DSywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdGMxX2NrID0geworCS5uYW1lCQk9ICJ0YzFfY2siLAorCS5wYXJlbnQJCT0gJnRjX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCwKKwkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QzLAorCS5lbmFibGVfYml0CT0gRU5fVEMxX0NLLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB0YzJfY2sgPSB7CisJLm5hbWUJCT0gInRjMl9jayIsCisJLnBhcmVudAkJPSAmdGNfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYLAorCS5lbmFibGVfcmVnCT0gQVJNX0lETEVDVDMsCisJLmVuYWJsZV9iaXQJPSBFTl9UQzJfQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRtYV9jayA9IHsKKwkubmFtZQkJPSAiZG1hX2NrIiwKKwkucGFyZW50CQk9ICZ0Y19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZG1hX2xjZGZyZWVfY2sgPSB7CisJLm5hbWUJCT0gImRtYV9sY2RmcmVlX2NrIiwKKwkucGFyZW50CQk9ICZ0Y19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFwaV9jayA9IHsKKwkubmFtZQkJPSAiYXBpX2NrIiwKKwkucGFyZW50CQk9ICZ0Y19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCwKKwkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QyLAorCS5lbmFibGVfYml0CT0gRU5fQVBJQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGxiX2NrID0geworCS5uYW1lCQk9ICJsYl9jayIsCisJLnBhcmVudAkJPSAmdGNfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwLAorCS5lbmFibGVfcmVnCT0gQVJNX0lETEVDVDIsCisJLmVuYWJsZV9iaXQJPSBFTl9MQkNLLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayByaGVhMV9jayA9IHsKKwkubmFtZQkJPSAicmhlYTFfY2siLAorCS5wYXJlbnQJCT0gJnRjX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcmhlYTJfY2sgPSB7CisJLm5hbWUJCT0gInJoZWEyX2NrIiwKKwkucGFyZW50CQk9ICZ0Y19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGxjZF9jayA9IHsKKwkubmFtZQkJPSAibGNkX2NrIiwKKwkucGFyZW50CQk9ICZja19kcGxsMSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8IENMT0NLX0lOX09NQVA3MzAgfAorCQkJICBSQVRFX0NLQ1RMLAorCS5lbmFibGVfcmVnCT0gQVJNX0lETEVDVDIsCisJLmVuYWJsZV9iaXQJPSBFTl9MQ0RDSywKKwkucmF0ZV9vZmZzZXQJPSBDS0NUTF9MQ0RESVZfT0ZGU0VULAorCS5yZWNhbGMJCT0gJmNrY3RsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxX2NrID0geworCS5uYW1lCQk9ICJ1YXJ0MV9jayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCisJLnJhdGUJCT0gNDgwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKKwkuZW5hYmxlX3JlZwk9IE1PRF9DT05GX0NUUkxfMCwKKwkuZW5hYmxlX2JpdAk9IDI5LAorCS8qIChPbmx5IG9uIDE1MTApCisJICogVGhlICJlbmFibGUgYml0IiBhY3R1YWxseSBjaG9vc2VzIGJldHdlZW4gNDhNSHogYW5kIDEyTUh6LgorCSAqLworfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfY2sgPSB7CisJLm5hbWUJCT0gInVhcnQyX2NrIiwKKwkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KKwkucmF0ZQkJPSA0ODAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAorCS5lbmFibGVfcmVnCT0gTU9EX0NPTkZfQ1RSTF8wLAorCS5lbmFibGVfYml0CT0gMzAsCisJLyogKGZvciBib3RoIDE1MTAgYW5kIDE2eHgpCisJICogVGhlICJlbmFibGUgYml0IiBhY3R1YWxseSBjaG9vc2VzIGJldHdlZW4gNDhNSHogYW5kIDEyTUh6LzMya0h6LgorCSAqLworfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfY2sgPSB7CisJLm5hbWUJCT0gInVhcnQzX2NrIiwKKwkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KKwkucmF0ZQkJPSA0ODAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAorCS5lbmFibGVfcmVnCT0gTU9EX0NPTkZfQ1RSTF8wLAorCS5lbmFibGVfYml0CT0gMzEsCisJLyogKE9ubHkgb24gMTUxMCkKKwkgKiBUaGUgImVuYWJsZSBiaXQiIGFjdHVhbGx5IGNob29zZXMgYmV0d2VlbiA0OE1IeiBhbmQgMTJNSHouCisJICovCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JfY2xrbyA9IHsJLyogNiBNSHogb3V0cHV0IG9uIFc0X1VTQl9DTEtPICovCisJLm5hbWUJCT0gInVzYl9jbGtvIiwKKwkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KKwkucmF0ZQkJPSA2MDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCisJLmVuYWJsZV9yZWcJPSBVTFBEX0NMT0NLX0NUUkwsCisJLmVuYWJsZV9iaXQJPSBVU0JfTUNMS19FTl9CSVQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JfaGhjX2NrMTUxMCA9IHsKKwkubmFtZQkJPSAidXNiX2hoY19jayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCisJLnJhdGUJCT0gNDgwMDAwMDAsIC8qIEFjdHVhbGx5IDIgY2xvY2tzLCAxMk1IeiBhbmQgNDhNSHogKi8KKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfAorCQkJICBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKKwkuZW5hYmxlX3JlZwk9IE1PRF9DT05GX0NUUkxfMCwKKwkuZW5hYmxlX2JpdAk9IFVTQl9IT1NUX0hIQ19VSE9TVF9FTiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9oaGNfY2sxNnh4ID0geworCS5uYW1lCQk9ICJ1c2JfaGhjX2NrIiwKKwkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KKwkucmF0ZQkJPSA0ODAwMDAwMCwKKwkvKiBPVEdfU1lTQ09OXzIuT1RHX1BBREVOID09IDAgKG5vdCAxNTEwLWNvbXBhdGlibGUpICovCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCisJLmVuYWJsZV9yZWcJPSBPVEdfQkFTRSArIDB4MDggLyogT1RHX1NZU0NPTl8yICovLAorCS5lbmFibGVfYml0CT0gOCAvKiBVSE9TVF9FTiAqLywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jbGtfMTUxMCA9IHsKKwkubmFtZQkJPSAibWNsayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgUkFURV9GSVhFRCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jbGtfMTZ4eCA9IHsKKwkubmFtZQkJPSAibWNsayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYLAorCS5lbmFibGVfcmVnCT0gQ09NX0NMS19ESVZfQ1RSTF9TRUwsCisJLmVuYWJsZV9iaXQJPSBDT01fVUxQRF9QTExfQ0xLX1JFUSwKKwkuc2V0X3JhdGUJPSAmc2V0X2V4dF9jbGtfcmF0ZSwKKwkucm91bmRfcmF0ZQk9ICZyb3VuZF9leHRfY2xrX3JhdGUsCisJLmluaXQJCT0gJmluaXRfZXh0X2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGJjbGtfMTUxMCA9IHsKKwkubmFtZQkJPSAiYmNsayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgUkFURV9GSVhFRCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGJjbGtfMTZ4eCA9IHsKKwkubmFtZQkJPSAiYmNsayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYLAorCS5lbmFibGVfcmVnCT0gU1dEX0NMS19ESVZfQ1RSTF9TRUwsCisJLmVuYWJsZV9iaXQJPSBTV0RfVUxQRF9QTExfQ0xLX1JFUSwKKwkuc2V0X3JhdGUJPSAmc2V0X2V4dF9jbGtfcmF0ZSwKKwkucm91bmRfcmF0ZQk9ICZyb3VuZF9leHRfY2xrX3JhdGUsCisJLmluaXQJCT0gJmluaXRfZXh0X2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tYzFfY2sgPSB7CisJLm5hbWUJCT0gIm1tYzFfY2siLAorCS8qIEZ1bmN0aW9uYWwgY2xvY2sgaXMgZGlyZWN0IGZyb20gVUxQRCwgaW50ZXJmYWNlIGNsb2NrIGlzIEFSTVBFUiAqLworCS5wYXJlbnQJCT0gJmFybXBlcl9jaywKKwkucmF0ZQkJPSA0ODAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAorCS5lbmFibGVfcmVnCT0gTU9EX0NPTkZfQ1RSTF8wLAorCS5lbmFibGVfYml0CT0gMjMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWMyX2NrID0geworCS5uYW1lCQk9ICJtbWMyX2NrIiwKKwkvKiBGdW5jdGlvbmFsIGNsb2NrIGlzIGRpcmVjdCBmcm9tIFVMUEQsIGludGVyZmFjZSBjbG9jayBpcyBBUk1QRVIgKi8KKwkucGFyZW50CQk9ICZhcm1wZXJfY2ssCisJLnJhdGUJCT0gNDgwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCisJLmVuYWJsZV9yZWcJPSBNT0RfQ09ORl9DVFJMXzAsCisJLmVuYWJsZV9iaXQJPSAyMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZpcnR1YWxfY2tfbXB1ID0geworCS5uYW1lCQk9ICJtcHUiLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgVklSVFVBTF9DTE9DSyB8IEFMV0FZU19FTkFCTEVELAorCS5wYXJlbnQJCT0gJmFybV9jaywgLyogSXMgc21hcnRlciBhbGlhcyBmb3IgKi8KKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5zZXRfcmF0ZQk9ICZzZWxlY3RfdGFibGVfcmF0ZSwKKwkucm91bmRfcmF0ZQk9ICZyb3VuZF90b190YWJsZV9yYXRlLAorfTsKKworCitzdGF0aWMgc3RydWN0IGNsayAqICBvbmNoaXBfY2xrc1tdID0geworCS8qIG5vbi1VTFBEIGNsb2NrcyAqLworCSZja19yZWYsCisJJmNrX2RwbGwxLAorCS8qIENLX0dFTjEgY2xvY2tzICovCisJJmNrX2RwbGwxb3V0LAorCSZhcm1fY2ssCisJJmFybXBlcl9jaywKKwkmYXJtX2dwaW9fY2ssCisJJmFybXhvcl9jaywKKwkmYXJtdGltX2NrLAorCSZhcm13ZHRfY2ssCisJJmFybWludGhfY2sxNTEwLCAgJmFybWludGhfY2sxNnh4LAorCS8qIENLX0dFTjIgY2xvY2tzICovCisJJmRzcF9jaywKKwkmZHNwbW11X2NrLAorCS8qIENLX0dFTjMgY2xvY2tzICovCisJJnRjX2NrLAorCSZ0aXBiX2NrLAorCSZsM19vY3BpX2NrLAorCSZ0YzFfY2ssCisJJnRjMl9jaywKKwkmZG1hX2NrLAorCSZkbWFfbGNkZnJlZV9jaywKKwkmYXBpX2NrLAorCSZsYl9jaywKKwkmcmhlYTFfY2ssCisJJnJoZWEyX2NrLAorCSZsY2RfY2ssCisJLyogVUxQRCBjbG9ja3MgKi8KKwkmdWFydDFfY2ssCisJJnVhcnQyX2NrLAorCSZ1YXJ0M19jaywKKwkmdXNiX2Nsa28sCisJJnVzYl9oaGNfY2sxNTEwLCAmdXNiX2hoY19jazE2eHgsCisJJm1jbGtfMTUxMCwgICZtY2xrXzE2eHgsCisJJmJjbGtfMTUxMCwgICZiY2xrXzE2eHgsCisJJm1tYzFfY2ssCisJJm1tYzJfY2ssCisJLyogVmlydHVhbCBjbG9ja3MgKi8KKwkmdmlydHVhbF9ja19tcHUsCit9OworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCit7CisJc3RydWN0IGNsayAqcCwgKmNsayA9IEVSUl9QVFIoLUVOT0VOVCk7CisKKwlkb3duKCZjbG9ja3Nfc2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIG5vZGUpIHsKKwkJaWYgKHN0cmNtcChpZCwgcC0+bmFtZSkgPT0gMCAmJiB0cnlfbW9kdWxlX2dldChwLT5vd25lcikpIHsKKwkJCWNsayA9IHA7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cCgmY2xvY2tzX3NlbSk7CisKKwlyZXR1cm4gY2xrOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKKworCit2b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQoreworCWlmIChjbGsgJiYgIUlTX0VSUihjbGspKQorCQltb2R1bGVfcHV0KGNsay0+b3duZXIpOworfQorRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKKworCitpbnQgX19jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlfX3UxNiByZWd2YWwxNjsKKwlfX3UzMiByZWd2YWwzMjsKKworCWlmIChjbGstPmZsYWdzICYgQUxXQVlTX0VOQUJMRUQpCisJCXJldHVybiAwOworCisJaWYgKHVubGlrZWx5KGNsay0+ZW5hYmxlX3JlZyA9PSAwKSkgeworCQlwcmludGsoS0VSTl9FUlIgImNsb2NrLmM6IEVuYWJsZSBmb3IgJXMgd2l0aG91dCBlbmFibGUgY29kZVxuIiwKKwkJICAgICAgIGNsay0+bmFtZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChjbGstPmZsYWdzICYgRU5BQkxFX1JFR18zMkJJVCkgeworCQlyZWd2YWwzMiA9IG9tYXBfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwkJb21hcF93cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7CisJfSBlbHNlIHsKKwkJcmVndmFsMTYgPSBvbWFwX3JlYWR3KGNsay0+ZW5hYmxlX3JlZyk7CisJCXJlZ3ZhbDE2IHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJCW9tYXBfd3JpdGV3KHJlZ3ZhbDE2LCBjbGstPmVuYWJsZV9yZWcpOworCX0KKworCXJldHVybiAwOworfQorCisKK3ZvaWQgX19jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJX191MTYgcmVndmFsMTY7CisJX191MzIgcmVndmFsMzI7CisKKwlpZiAoY2xrLT5lbmFibGVfcmVnID09IDApCisJCXJldHVybjsKKworCWlmIChjbGstPmZsYWdzICYgRU5BQkxFX1JFR18zMkJJVCkgeworCQlyZWd2YWwzMiA9IG9tYXBfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJcmVndmFsMzIgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJCW9tYXBfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOworCX0gZWxzZSB7CisJCXJlZ3ZhbDE2ID0gb21hcF9yZWFkdyhjbGstPmVuYWJsZV9yZWcpOworCQlyZWd2YWwxNiAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwkJb21hcF93cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7CisJfQorfQorCisKK3ZvaWQgX19jbGtfdW51c2Uoc3RydWN0IGNsayAqY2xrKQoreworCWlmIChjbGstPnVzZWNvdW50ID4gMCAmJiAhKC0tY2xrLT51c2Vjb3VudCkpIHsKKwkJX19jbGtfZGlzYWJsZShjbGspOworCQlpZiAobGlrZWx5KGNsay0+cGFyZW50KSkKKwkJCV9fY2xrX3VudXNlKGNsay0+cGFyZW50KTsKKwl9Cit9CisKKworaW50IF9fY2xrX3VzZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHJldCA9IDA7CisJaWYgKGNsay0+dXNlY291bnQrKyA9PSAwKSB7CisJCWlmIChsaWtlbHkoY2xrLT5wYXJlbnQpKQorCQkJcmV0ID0gX19jbGtfdXNlKGNsay0+cGFyZW50KTsKKworCQlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCQljbGstPnVzZWNvdW50LS07CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmV0ID0gX19jbGtfZW5hYmxlKGNsayk7CisKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSAmJiBjbGstPnBhcmVudCkgeworCQkJX19jbGtfdW51c2UoY2xrLT5wYXJlbnQpOworCQkJY2xrLT51c2Vjb3VudC0tOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworCitpbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCXJldCA9IF9fY2xrX2VuYWJsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOworCisKK3ZvaWQgY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJX19jbGtfZGlzYWJsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7CisKKworaW50IGNsa191c2Uoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJcmV0ID0gX19jbGtfdXNlKGNsayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3VzZSk7CisKKwordm9pZCBjbGtfdW51c2Uoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJX19jbGtfdW51c2UoY2xrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3VudXNlKTsKKworCitpbnQgY2xrX2dldF91c2Vjb3VudChzdHJ1Y3QgY2xrICpjbGspCit7CisgICAgICAgIHJldHVybiBjbGstPnVzZWNvdW50OworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3VzZWNvdW50KTsKKworCit1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsay0+cmF0ZTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKKworCitzdGF0aWMgX191MTYgdmVyaWZ5X2NrY3RsX3ZhbHVlKF9fdTE2IG5ld3ZhbCkKK3sKKwkvKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBmb3IgZm9sbG93aW5nIGxpbWl0YXRpb25zIHNldAorCSAqIGJ5IHRoZSBoYXJkd2FyZSAoYWxsIGNvbmRpdGlvbnMgbXVzdCBiZSB0cnVlKToKKwkgKiBEU1BNTVVfQ0sgPT0gRFNQX0NLICBvciAgRFNQTU1VX0NLID09IERTUF9DSy8yCisJICogQVJNX0NLID49IFRDX0NLCisJICogRFNQX0NLID49IFRDX0NLCisJICogRFNQTU1VX0NLID49IFRDX0NLCisJICoKKwkgKiBJbiBhZGRpdGlvbiBmb2xsb3dpbmcgcnVsZXMgYXJlIGVuZm9yY2VkOgorCSAqIExDRF9DSyA8PSBUQ19DSworCSAqIEFSTVBFUl9DSyA8PSBUQ19DSworCSAqCisJICogSG93ZXZlciwgbWF4aW11bSBmcmVxdWVuY2llcyBhcmUgbm90IGNoZWNrZWQgZm9yIQorCSAqLworCV9fdTggcGVyX2V4cDsKKwlfX3U4IGxjZF9leHA7CisJX191OCBhcm1fZXhwOworCV9fdTggZHNwX2V4cDsKKwlfX3U4IHRjX2V4cDsKKwlfX3U4IGRzcG1tdV9leHA7CisKKwlwZXJfZXhwID0gKG5ld3ZhbCA+PiBDS0NUTF9QRVJESVZfT0ZGU0VUKSAmIDM7CisJbGNkX2V4cCA9IChuZXd2YWwgPj4gQ0tDVExfTENERElWX09GRlNFVCkgJiAzOworCWFybV9leHAgPSAobmV3dmFsID4+IENLQ1RMX0FSTURJVl9PRkZTRVQpICYgMzsKKwlkc3BfZXhwID0gKG5ld3ZhbCA+PiBDS0NUTF9EU1BESVZfT0ZGU0VUKSAmIDM7CisJdGNfZXhwID0gKG5ld3ZhbCA+PiBDS0NUTF9UQ0RJVl9PRkZTRVQpICYgMzsKKwlkc3BtbXVfZXhwID0gKG5ld3ZhbCA+PiBDS0NUTF9EU1BNTVVESVZfT0ZGU0VUKSAmIDM7CisKKwlpZiAoZHNwbW11X2V4cCA8IGRzcF9leHApCisJCWRzcG1tdV9leHAgPSBkc3BfZXhwOworCWlmIChkc3BtbXVfZXhwID4gZHNwX2V4cCsxKQorCQlkc3BtbXVfZXhwID0gZHNwX2V4cCsxOworCWlmICh0Y19leHAgPCBhcm1fZXhwKQorCQl0Y19leHAgPSBhcm1fZXhwOworCWlmICh0Y19leHAgPCBkc3BtbXVfZXhwKQorCQl0Y19leHAgPSBkc3BtbXVfZXhwOworCWlmICh0Y19leHAgPiBsY2RfZXhwKQorCQlsY2RfZXhwID0gdGNfZXhwOworCWlmICh0Y19leHAgPiBwZXJfZXhwKQorCQlwZXJfZXhwID0gdGNfZXhwOworCisJbmV3dmFsICY9IDB4ZjAwMDsKKwluZXd2YWwgfD0gcGVyX2V4cCA8PCBDS0NUTF9QRVJESVZfT0ZGU0VUOworCW5ld3ZhbCB8PSBsY2RfZXhwIDw8IENLQ1RMX0xDRERJVl9PRkZTRVQ7CisJbmV3dmFsIHw9IGFybV9leHAgPDwgQ0tDVExfQVJNRElWX09GRlNFVDsKKwluZXd2YWwgfD0gZHNwX2V4cCA8PCBDS0NUTF9EU1BESVZfT0ZGU0VUOworCW5ld3ZhbCB8PSB0Y19leHAgPDwgQ0tDVExfVENESVZfT0ZGU0VUOworCW5ld3ZhbCB8PSBkc3BtbXVfZXhwIDw8IENLQ1RMX0RTUE1NVURJVl9PRkZTRVQ7CisKKwlyZXR1cm4gbmV3dmFsOworfQorCisKK3N0YXRpYyBpbnQgY2FsY19kc29yX2V4cChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwkvKiBOb3RlOiBJZiB0YXJnZXQgZnJlcXVlbmN5IGlzIHRvbyBsb3csIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gNCwKKwkgKiB3aGljaCBpcyBpbnZhbGlkIHZhbHVlLiBDYWxsZXIgbXVzdCBjaGVjayBmb3IgdGhpcyB2YWx1ZSBhbmQgYWN0CisJICogYWNjb3JkaW5nbHkuCisJICoKKwkgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIGZvciBmb2xsb3dpbmcgbGltaXRhdGlvbnMgc2V0CisJICogYnkgdGhlIGhhcmR3YXJlIChhbGwgY29uZGl0aW9ucyBtdXN0IGJlIHRydWUpOgorCSAqIERTUE1NVV9DSyA9PSBEU1BfQ0sgIG9yICBEU1BNTVVfQ0sgPT0gRFNQX0NLLzIKKwkgKiBBUk1fQ0sgPj0gVENfQ0sKKwkgKiBEU1BfQ0sgPj0gVENfQ0sKKwkgKiBEU1BNTVVfQ0sgPj0gVENfQ0sKKwkgKi8KKwl1bnNpZ25lZCBsb25nIHJlYWxyYXRlOworCXN0cnVjdCBjbGsgKiAgcGFyZW50OworCXVuc2lnbmVkICBkc29yX2V4cDsKKworCWlmICh1bmxpa2VseSghKGNsay0+ZmxhZ3MgJiBSQVRFX0NLQ1RMKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcGFyZW50ID0gY2xrLT5wYXJlbnQ7CisJaWYgKHVubGlrZWx5KHBhcmVudCA9PSAwKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZWFscmF0ZSA9IHBhcmVudC0+cmF0ZTsKKwlmb3IgKGRzb3JfZXhwPTA7IGRzb3JfZXhwPDQ7IGRzb3JfZXhwKyspIHsKKwkJaWYgKHJlYWxyYXRlIDw9IHJhdGUpCisJCQlicmVhazsKKworCQlyZWFscmF0ZSAvPSAyOworCX0KKworCXJldHVybiBkc29yX2V4cDsKK30KKworbG9uZyBjbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlpbnQgZHNvcl9leHA7CisKKwlpZiAoY2xrLT5mbGFncyAmIFJBVEVfRklYRUQpCisJCXJldHVybiBjbGstPnJhdGU7CisKKwlpZiAoY2xrLT5mbGFncyAmIFJBVEVfQ0tDVEwpIHsKKwkJZHNvcl9leHAgPSBjYWxjX2Rzb3JfZXhwKGNsaywgcmF0ZSk7CisJCWlmIChkc29yX2V4cCA8IDApCisJCQlyZXR1cm4gZHNvcl9leHA7CisJCWlmIChkc29yX2V4cCA+IDMpCisJCQlkc29yX2V4cCA9IDM7CisJCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvICgxIDw8IGRzb3JfZXhwKTsKKwl9CisKKwlpZihjbGstPnJvdW5kX3JhdGUgIT0gMCkKKwkJcmV0dXJuIGNsay0+cm91bmRfcmF0ZShjbGssIHJhdGUpOworCisJcmV0dXJuIGNsay0+cmF0ZTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3JvdW5kX3JhdGUpOworCisKK3N0YXRpYyB2b2lkIHByb3BhZ2F0ZV9yYXRlKHN0cnVjdCBjbGsgKiAgY2xrKQoreworCXN0cnVjdCBjbGsgKiogIGNsa3A7CisKKwlmb3IgKGNsa3AgPSBvbmNoaXBfY2xrczsgY2xrcCA8IG9uY2hpcF9jbGtzK0FSUkFZX1NJWkUob25jaGlwX2Nsa3MpOyBjbGtwKyspIHsKKwkJaWYgKGxpa2VseSgoKmNsa3ApLT5wYXJlbnQgIT0gY2xrKSkgY29udGludWU7CisJCWlmIChsaWtlbHkoKCpjbGtwKS0+cmVjYWxjKSkKKwkJCSgqY2xrcCktPnJlY2FsYygqY2xrcCk7CisJfQorfQorCisKK3N0YXRpYyBpbnQgc2VsZWN0X3RhYmxlX3JhdGUoc3RydWN0IGNsayAqICBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwkvKiBGaW5kIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCBmcmVxdWVuY3kgPD0gcmF0ZSBhbmQgc3dpdGNoIHRvIGl0ICovCisJc3RydWN0IG1wdV9yYXRlICogIHB0cjsKKworCWlmIChjbGsgIT0gJnZpcnR1YWxfY2tfbXB1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAocHRyID0gcmF0ZV90YWJsZTsgcHRyLT5yYXRlOyBwdHIrKykgeworCQlpZiAocHRyLT54dGFsICE9IGNrX3JlZi5yYXRlKQorCQkJY29udGludWU7CisKKwkJLyogRFBMTDEgY2Fubm90IGJlIHJlcHJvZ3JhbW1lZCB3aXRob3V0IHJpc2tpbmcgc3lzdGVtIGNyYXNoICovCisJCWlmIChsaWtlbHkoY2tfZHBsbDEucmF0ZSE9MCkgJiYgcHRyLT5wbGxfcmF0ZSAhPSBja19kcGxsMS5yYXRlKQorCQkJY29udGludWU7CisKKwkJLyogQ2FuIGNoZWNrIG9ubHkgYWZ0ZXIgeHRhbCBmcmVxdWVuY3kgY2hlY2sgKi8KKwkJaWYgKHB0ci0+cmF0ZSA8PSByYXRlKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFwdHItPnJhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHVubGlrZWx5KGNrX2RwbGwxLnJhdGUgPT0gMCkpIHsKKwkJb21hcF93cml0ZXcocHRyLT5kcGxsY3RsX3ZhbCwgRFBMTF9DVEwpOworCQlja19kcGxsMS5yYXRlID0gcHRyLT5wbGxfcmF0ZTsKKwl9CisJb21hcF93cml0ZXcocHRyLT5ja2N0bF92YWwsIEFSTV9DS0NUTCk7CisJcHJvcGFnYXRlX3JhdGUoJmNrX2RwbGwxKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgbG9uZyByb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiAgY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJLyogRmluZCB0aGUgaGlnaGVzdCBzdXBwb3J0ZWQgZnJlcXVlbmN5IDw9IHJhdGUgKi8KKwlzdHJ1Y3QgbXB1X3JhdGUgKiAgcHRyOworCWxvbmcgIGhpZ2hlc3RfcmF0ZTsKKworCWlmIChjbGsgIT0gJnZpcnR1YWxfY2tfbXB1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhpZ2hlc3RfcmF0ZSA9IC1FSU5WQUw7CisKKwlmb3IgKHB0ciA9IHJhdGVfdGFibGU7IHB0ci0+cmF0ZTsgcHRyKyspIHsKKwkJaWYgKHB0ci0+eHRhbCAhPSBja19yZWYucmF0ZSkKKwkJCWNvbnRpbnVlOworCisJCWhpZ2hlc3RfcmF0ZSA9IHB0ci0+cmF0ZTsKKworCQkvKiBDYW4gY2hlY2sgb25seSBhZnRlciB4dGFsIGZyZXF1ZW5jeSBjaGVjayAqLworCQlpZiAocHRyLT5yYXRlIDw9IHJhdGUpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gaGlnaGVzdF9yYXRlOworfQorCisKK2ludCBjbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJaW50ICByZXQgPSAtRUlOVkFMOworCWludCAgZHNvcl9leHA7CisJX191MTYgIHJlZ3ZhbDsKKwl1bnNpZ25lZCBsb25nICBmbGFnczsKKworCWlmIChjbGstPmZsYWdzICYgUkFURV9DS0NUTCkgeworCQlkc29yX2V4cCA9IGNhbGNfZHNvcl9leHAoY2xrLCByYXRlKTsKKwkJaWYgKGRzb3JfZXhwID4gMykKKwkJCWRzb3JfZXhwID0gLUVJTlZBTDsKKwkJaWYgKGRzb3JfZXhwIDwgMCkKKwkJCXJldHVybiBkc29yX2V4cDsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJCXJlZ3ZhbCA9IG9tYXBfcmVhZHcoQVJNX0NLQ1RMKTsKKwkJcmVndmFsICY9IH4oMyA8PCBjbGstPnJhdGVfb2Zmc2V0KTsKKwkJcmVndmFsIHw9IGRzb3JfZXhwIDw8IGNsay0+cmF0ZV9vZmZzZXQ7CisJCXJlZ3ZhbCA9IHZlcmlmeV9ja2N0bF92YWx1ZShyZWd2YWwpOworCQlvbWFwX3dyaXRldyhyZWd2YWwsIEFSTV9DS0NUTCk7CisJCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gKDEgPDwgZHNvcl9leHApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwkJcmV0ID0gMDsKKwl9IGVsc2UgaWYoY2xrLT5zZXRfcmF0ZSAhPSAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwkJcmV0ID0gY2xrLT5zZXRfcmF0ZShjbGssIHJhdGUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwl9CisKKwlpZiAodW5saWtlbHkocmV0ID09IDAgJiYgKGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKSkKKwkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19zZXRfcmF0ZSk7CisKKworc3RhdGljIHVuc2lnbmVkIGNhbGNfZXh0X2Rzb3IodW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIGRzb3I7CisKKwkvKiBNQ0xLIGFuZCBCQ0xLIGRpdmlzb3Igc2VsZWN0aW9uIGlzIG5vdCBsaW5lYXI6CisJICogZnJlcSA9IDk2TUh6IC8gZHNvcgorCSAqCisJICogUkFUSU9fU0VMIHJhbmdlOiBkc29yIDwtPiBSQVRJT19TRUwKKwkgKiAwLi42OiAoUkFUSU9fU0VMKzIpIDwtPiAoZHNvci0yKQorCSAqIDYuLjQ4OiAgKDgrKFJBVElPX1NFTC02KSoyKSA8LT4gKChkc29yLTgpLzIrNikKKwkgKiBNaW5pbXVtIGRzb3IgaXMgMiBhbmQgbWF4aW11bSBpcyA5Ni4gT2RkIGRpdmlzb3JzIHN0YXJ0aW5nIGZyb20gOQorCSAqIGNhbiBub3QgYmUgdXNlZC4KKwkgKi8KKwlmb3IgKGRzb3IgPSAyOyBkc29yIDwgOTY7ICsrZHNvcikgeworCQlpZiAoKGRzb3IgJiAxKSAmJiBkc29yID4gOCkKKwkJICAJY29udGludWU7CisJCWlmIChyYXRlID49IDk2MDAwMDAwIC8gZHNvcikKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gZHNvcjsKK30KKworCitzdGF0aWMgaW50IHNldF9leHRfY2xrX3JhdGUoc3RydWN0IGNsayAqICBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBkc29yOworCV9fdTE2IHJhdGlvX2JpdHM7CisKKwlkc29yID0gY2FsY19leHRfZHNvcihyYXRlKTsKKwljbGstPnJhdGUgPSA5NjAwMDAwMCAvIGRzb3I7CisJaWYgKGRzb3IgPiA4KQorCQlyYXRpb19iaXRzID0gKChkc29yIC0gOCkgLyAyICsgNikgPDwgMjsKKwllbHNlCisJCXJhdGlvX2JpdHMgPSAoZHNvciAtIDIpIDw8IDI7CisKKwlyYXRpb19iaXRzIHw9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKSAmIH4weGZkOworCW9tYXBfd3JpdGV3KHJhdGlvX2JpdHMsIGNsay0+ZW5hYmxlX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgbG9uZyByb3VuZF9leHRfY2xrX3JhdGUoc3RydWN0IGNsayAqICBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlyZXR1cm4gOTYwMDAwMDAgLyBjYWxjX2V4dF9kc29yKHJhdGUpOworfQorCisKK3N0YXRpYyB2b2lkIGluaXRfZXh0X2NsayhzdHJ1Y3QgY2xrICogIGNsaykKK3sKKwl1bnNpZ25lZCBkc29yOworCV9fdTE2IHJhdGlvX2JpdHM7CisKKwkvKiBEZXRlcm1pbmUgY3VycmVudCByYXRlIGFuZCBlbnN1cmUgY2xvY2sgaXMgYmFzZWQgb24gOTZNSHogQVBMTCAqLworCXJhdGlvX2JpdHMgPSBvbWFwX3JlYWR3KGNsay0+ZW5hYmxlX3JlZykgJiB+MTsKKwlvbWFwX3dyaXRldyhyYXRpb19iaXRzLCBjbGstPmVuYWJsZV9yZWcpOworCisJcmF0aW9fYml0cyA9IChyYXRpb19iaXRzICYgMHhmYykgPj4gMjsKKwlpZiAocmF0aW9fYml0cyA+IDYpCisJCWRzb3IgPSAocmF0aW9fYml0cyAtIDYpICogMiArIDg7CisJZWxzZQorCQlkc29yID0gcmF0aW9fYml0cyArIDI7CisKKwljbGstPiByYXRlID0gOTYwMDAwMDAgLyBkc29yOworfQorCisKK2ludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKQoreworCWRvd24oJmNsb2Nrc19zZW0pOworCWxpc3RfYWRkKCZjbGstPm5vZGUsICZjbG9ja3MpOworCWlmIChjbGstPmluaXQpCisJCWNsay0+aW5pdChjbGspOworCXVwKCZjbG9ja3Nfc2VtKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3JlZ2lzdGVyKTsKKwordm9pZCBjbGtfdW5yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspCit7CisJZG93bigmY2xvY2tzX3NlbSk7CisJbGlzdF9kZWwoJmNsay0+bm9kZSk7CisJdXAoJmNsb2Nrc19zZW0pOworfQorRVhQT1JUX1NZTUJPTChjbGtfdW5yZWdpc3Rlcik7CisKKworCitpbnQgX19pbml0IGNsa19pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqKiAgY2xrcDsKKwljb25zdCBzdHJ1Y3Qgb21hcF9jbG9ja19jb25maWcgKmluZm87CisJaW50IGNyeXN0YWxfdHlwZSA9IDA7IC8qIERlZmF1bHQgMTIgTUh6ICovCisKKwlmb3IgKGNsa3AgPSBvbmNoaXBfY2xrczsgY2xrcCA8IG9uY2hpcF9jbGtzK0FSUkFZX1NJWkUob25jaGlwX2Nsa3MpOyBjbGtwKyspIHsKKwkJaWYgKCgoKmNsa3ApLT5mbGFncyAmQ0xPQ0tfSU5fT01BUDE1MTApICYmIGNwdV9pc19vbWFwMTUxMCgpKSB7CisJCQljbGtfcmVnaXN0ZXIoKmNsa3ApOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoKCgqY2xrcCktPmZsYWdzICZDTE9DS19JTl9PTUFQMTZYWCkgJiYgY3B1X2lzX29tYXAxNnh4KCkpIHsKKwkJCWNsa19yZWdpc3RlcigqY2xrcCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICgoKCpjbGtwKS0+ZmxhZ3MgJkNMT0NLX0lOX09NQVA3MzApICYmIGNwdV9pc19vbWFwNzMwKCkpIHsKKwkJCWNsa19yZWdpc3RlcigqY2xrcCk7CisJCQljb250aW51ZTsKKwkJfQorCX0KKworCWluZm8gPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfQ0xPQ0ssIHN0cnVjdCBvbWFwX2Nsb2NrX2NvbmZpZyk7CisJaWYgKGluZm8gIT0gTlVMTCkgeworCQlpZiAoIWNwdV9pc19vbWFwMTUxMCgpKQorCQkJY3J5c3RhbF90eXBlID0gaW5mby0+c3lzdGVtX2Nsb2NrX3R5cGU7CisJfQorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQorCWNrX3JlZi5yYXRlID0gMTMwMDAwMDA7CisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQorCWlmIChjcnlzdGFsX3R5cGUgPT0gMikKKwkJY2tfcmVmLnJhdGUgPSAxOTIwMDAwMDsKKyNlbmRpZgorCisJLyogV2Ugd2FudCB0byBiZSBpbiBzeW5jcm9ub3VzIHNjYWxhYmxlIG1vZGUgKi8KKwlvbWFwX3dyaXRldygweDEwMDAsIEFSTV9TWVNTVCk7CisKKwkvKiBGaW5kIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCBmcmVxdWVuY3kgYW5kIGVuYWJsZSBpdCAqLworCWlmIChzZWxlY3RfdGFibGVfcmF0ZSgmdmlydHVhbF9ja19tcHUsIH4wKSkgeworCQlwcmludGsoS0VSTl9FUlIgIlN5c3RlbSBmcmVxdWVuY2llcyBub3Qgc2V0LiBDaGVjayB5b3VyIGNvbmZpZy5cbiIpOworCQkvKiBHdWVzcyBzYW5lIHZhbHVlcyAoNjBNSHopICovCisJCW9tYXBfd3JpdGV3KDB4MjI5MCwgRFBMTF9DVEwpOworCQlvbWFwX3dyaXRldygweDEwMDUsIEFSTV9DS0NUTCk7CisJCWNrX2RwbGwxLnJhdGUgPSA2MDAwMDAwMDsKKwkJcHJvcGFnYXRlX3JhdGUoJmNrX2RwbGwxKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ2xvY2tpbmcgcmF0ZSAoeHRhbC9EUExMMS9NUFUpOiAlbGQvJWxkLyVsZFxuIiwKKwkJICAgICAgIGNrX3JlZi5yYXRlLCBja19kcGxsMS5yYXRlLCBhcm1fY2sucmF0ZSk7CisJfQorCisJLyogQ2FjaGUgcmF0ZXMgZm9yIGNsb2NrcyBjb25uZWN0ZWQgdG8gY2tfcmVmIChub3QgZHBsbDEpICovCisJcHJvcGFnYXRlX3JhdGUoJmNrX3JlZik7CisKKyNpZmRlZiBDT05GSUdfTUFDSF9PTUFQX1BFUlNFVVMyCisJLyogU2VsZWN0IHNsaWNlciBvdXRwdXQgYXMgT01BUCBpbnB1dCBjbG9jayAqLworCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoT01BUDczMF9QQ0NfVVBMRF9DVFJMKSAmIH4weDEsIE9NQVA3MzBfUENDX1VQTERfQ1RSTCk7CisjZW5kaWYKKworCS8qIFR1cm4gb2ZmIERTUCBhbmQgQVJNX1RJTVhPLiBNYWtlIHN1cmUgQVJNX0lOVEhDSyBpcyBub3QgZGl2aWRlZCAqLworCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoQVJNX0NLQ1RMKSAmIDB4MGZmZiwgQVJNX0NLQ1RMKTsKKworCS8qIFB1dCBEU1AvTVBVSSBpbnRvIHJlc2V0IHVudGlsIG5lZWRlZCAqLworCW9tYXBfd3JpdGV3KDAsIEFSTV9SU1RDVDEpOworCW9tYXBfd3JpdGV3KDEsIEFSTV9SU1RDVDIpOworCW9tYXBfd3JpdGV3KDB4NDAwLCBBUk1fSURMRUNUMSk7CisKKwkvKgorCSAqIEFjY29yZGluZyB0byBPTUFQNTkxMCBFcnJhdHVtIFNZU19ETUFfMSwgYml0IERNQUNLX1JFUSAoYml0IDgpCisJICogb2YgdGhlIEFSTV9JRExFQ1QyIHJlZ2lzdGVyIG11c3QgYmUgc2V0IHRvIHplcm8uIFRoZSBwb3dlci1vbgorCSAqIGRlZmF1bHQgdmFsdWUgb2YgdGhpcyBiaXQgaXMgb25lLgorCSAqLworCW9tYXBfd3JpdGV3KDB4MDAwMCwgQVJNX0lETEVDVDIpOwkvKiBUdXJuIExDRCBjbG9jayBvZmYgYWxzbyAqLworCisJLyoKKwkgKiBPbmx5IGVuYWJsZSB0aG9zZSBjbG9ja3Mgd2Ugd2lsbCBuZWVkLCBsZXQgdGhlIGRyaXZlcnMKKwkgKiBlbmFibGUgb3RoZXIgY2xvY2tzIGFzIG5lY2Vzc2FyeQorCSAqLworCWNsa191c2UoJmFybXBlcl9jayk7CisJY2xrX3VzZSgmYXJteG9yX2NrKTsKKwljbGtfdXNlKCZhcm10aW1fY2spOworCisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKQorCQljbGtfZW5hYmxlKCZhcm1fZ3Bpb19jayk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwL2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhjMGRkZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcC9jbG9jay5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcC9jbG9jay5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBOb2tpYSBjb3Jwb3JhdGlvbgorICogIFdyaXR0ZW4gYnkgVHV1a2thIFRpa2thbmVuIDx0dXVra2EudGlra2FuZW5AZWxla3Ryb2JpdC5jb20+CisgKiAgQmFzZWQgb24gY2xvY2tzLmggYnkgVG9ueSBMaW5kZ3JlbiwgR29yZG9uIE1jTnV0dCBhbmQgUmlkZ2VSdW4sIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX09NQVBfQ0xPQ0tfSAorI2RlZmluZSBfX0FSQ0hfQVJNX09NQVBfQ0xPQ0tfSAorCitzdHJ1Y3QgbW9kdWxlOworCitzdHJ1Y3QgY2xrIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CisJc3RydWN0IG1vZHVsZQkJKm93bmVyOworCWNvbnN0IGNoYXIJCSpuYW1lOworCXN0cnVjdCBjbGsJCSpwYXJlbnQ7CisJdW5zaWduZWQgbG9uZwkJcmF0ZTsKKwlfX3M4CQkJdXNlY291bnQ7CisJX191MTYJCQlmbGFnczsKKwlfX3UzMgkJCWVuYWJsZV9yZWc7CisJX191OAkJCWVuYWJsZV9iaXQ7CisJX191OAkJCXJhdGVfb2Zmc2V0OworCXZvaWQJCQkoKnJlY2FsYykoc3RydWN0IGNsayAqKTsKKwlpbnQJCQkoKnNldF9yYXRlKShzdHJ1Y3QgY2xrICosIHVuc2lnbmVkIGxvbmcpOworCWxvbmcJCQkoKnJvdW5kX3JhdGUpKHN0cnVjdCBjbGsgKiwgdW5zaWduZWQgbG9uZyk7CisJdm9pZAkJCSgqaW5pdCkoc3RydWN0IGNsayAqKTsKK307CisKKworc3RydWN0IG1wdV9yYXRlIHsKKwl1bnNpZ25lZCBsb25nCQlyYXRlOworCXVuc2lnbmVkIGxvbmcJCXh0YWw7CisJdW5zaWduZWQgbG9uZwkJcGxsX3JhdGU7CisJX191MTYJCQlja2N0bF92YWw7CisJX191MTYJCQlkcGxsY3RsX3ZhbDsKK307CisKKworLyogQ2xvY2sgZmxhZ3MgKi8KKyNkZWZpbmUgUkFURV9DS0NUTAkJMQorI2RlZmluZSBSQVRFX0ZJWEVECQkyCisjZGVmaW5lIFJBVEVfUFJPUEFHQVRFUwkJNAorI2RlZmluZSBWSVJUVUFMX0NMT0NLCQk4CisjZGVmaW5lIEFMV0FZU19FTkFCTEVECQkxNgorI2RlZmluZSBFTkFCTEVfUkVHXzMyQklUCTMyCisjZGVmaW5lIENMT0NLX0lOX09NQVAxNlhYCTY0CisjZGVmaW5lIENMT0NLX0lOX09NQVAxNTEwCTEyOAorI2RlZmluZSBDTE9DS19JTl9PTUFQNzMwCTI1NgorCisvKiBBUk1fQ0tDVEwgYml0IHNoaWZ0cyAqLworI2RlZmluZSBDS0NUTF9QRVJESVZfT0ZGU0VUCTAKKyNkZWZpbmUgQ0tDVExfTENERElWX09GRlNFVAkyCisjZGVmaW5lIENLQ1RMX0FSTURJVl9PRkZTRVQJNAorI2RlZmluZSBDS0NUTF9EU1BESVZfT0ZGU0VUCTYKKyNkZWZpbmUgQ0tDVExfVENESVZfT0ZGU0VUCTgKKyNkZWZpbmUgQ0tDVExfRFNQTU1VRElWX09GRlNFVAkxMAorLyojZGVmaW5lIEFSTV9USU1YTwkJMTIqLworI2RlZmluZSBFTl9EU1BDSwkJMTMKKy8qI2RlZmluZSBBUk1fSU5USENLX1NFTAkxNCovIC8qIERpdmlkZS1ieS0yIGZvciBtcHUgaW50aF9jayAqLworCisvKiBBUk1fSURMRUNUMSBiaXQgc2hpZnRzICovCisvKiNkZWZpbmUgSURMV0RUX0FSTQkwKi8KKy8qI2RlZmluZSBJRExYT1JQX0FSTQkxKi8KKy8qI2RlZmluZSBJRExQRVJfQVJNCTIqLworLyojZGVmaW5lIElETExDRF9BUk0JMyovCisvKiNkZWZpbmUgSURMTEJfQVJNCTQqLworLyojZGVmaW5lIElETEhTQUJfQVJNCTUqLworLyojZGVmaW5lIElETElGX0FSTQk2Ki8KKy8qI2RlZmluZSBJRExEUExMX0FSTQk3Ki8KKy8qI2RlZmluZSBJRExBUElfQVJNCTgqLworLyojZGVmaW5lIElETFRJTV9BUk0JOSovCisvKiNkZWZpbmUgU0VUQVJNX0lETEUJMTEqLworCisvKiBBUk1fSURMRUNUMiBiaXQgc2hpZnRzICovCisjZGVmaW5lIEVOX1dEVENLCTAKKyNkZWZpbmUgRU5fWE9SUENLCTEKKyNkZWZpbmUgRU5fUEVSQ0sJMgorI2RlZmluZSBFTl9MQ0RDSwkzCisjZGVmaW5lIEVOX0xCQ0sJCTQgLyogTm90IG9uIDE2MTAvMTcxMCAqLworLyojZGVmaW5lIEVOX0hTQUJDSwk1Ki8KKyNkZWZpbmUgRU5fQVBJQ0sJNgorI2RlZmluZSBFTl9USU1DSwk3CisjZGVmaW5lIERNQUNLX1JFUQk4CisjZGVmaW5lIEVOX0dQSU9DSwk5IC8qIE5vdCBvbiAxNjEwLzE3MTAgKi8KKy8qI2RlZmluZSBFTl9MQkZSRUVDSwkxMCovCisjZGVmaW5lIEVOX0NLT1VUX0FSTQkxMQorCisvKiBBUk1fSURMRUNUMyBiaXQgc2hpZnRzICovCisjZGVmaW5lIEVOX09DUElfQ0sJMAorI2RlZmluZSBFTl9UQzFfQ0sJMgorI2RlZmluZSBFTl9UQzJfQ0sJNAorCisvKiBWYXJpb3VzIHJlZ2lzdGVyIGRlZmluZXMgZm9yIGNsb2NrIGNvbnRyb2xzIHNjYXR0ZXJlZCBhcm91bmQgT01BUCBjaGlwICovCisjZGVmaW5lIFVTQl9NQ0xLX0VOX0JJVAkJNAkvKiBJbiBVTFBEX0NMS0NfQ1RSTCAqLworI2RlZmluZSBVU0JfSE9TVF9ISENfVUhPU1RfRU4JOQkvKiBJbiBNT0RfQ09ORl9DVFJMXzAgKi8KKyNkZWZpbmUgU1dEX1VMUERfUExMX0NMS19SRVEJMQkvKiBJbiBTV0RfQ0xLX0RJVl9DVFJMX1NFTCAqLworI2RlZmluZSBDT01fVUxQRF9QTExfQ0xLX1JFUQkxCS8qIEluIENPTV9DTEtfRElWX0NUUkxfU0VMICovCisjZGVmaW5lIFNXRF9DTEtfRElWX0NUUkxfU0VMCTB4ZmZmZTA4NzQKKyNkZWZpbmUgQ09NX0NMS19ESVZfQ1RSTF9TRUwJMHhmZmZlMDg3OAorCisKK2ludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKK3ZvaWQgY2xrX3VucmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKK2ludCBjbGtfaW5pdCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAvY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY1Y2RlNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcC9jb21tb24uYwpAQCAtMCwwICsxLDU0OSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcC9jb21tb24uYworICoKKyAqIENvZGUgY29tbW9uIHRvIGFsbCBPTUFQIG1hY2hpbmVzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2ZwZ2EuaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisKKyNkZWZpbmUgREVCVUcgMQorCitzdHJ1Y3Qgb21hcF9pZCB7CisJdTE2CWp0YWdfaWQ7CS8qIFVzZWQgdG8gZGV0ZXJtaW5lIE9NQVAgdHlwZSAqLworCXU4CWRpZV9yZXY7CS8qIFByb2Nlc3NvciByZXZpc2lvbiAqLworCXUzMglvbWFwX2lkOwkvKiBPTUFQIHJldmlzaW9uICovCisJdTMyCXR5cGU7CQkvKiBDcHUgaWQgYml0cyBbMzE6MDhdLCBjcHUgY2xhc3MgYml0cyBbMDc6MDBdICovCit9OworCisvKiBSZWdpc3RlciB2YWx1ZXMgdG8gZGV0ZWN0IHRoZSBPTUFQIHZlcnNpb24gKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9pZCBvbWFwX2lkc1tdIF9faW5pdGRhdGEgPSB7CisJeyAuanRhZ19pZCA9IDB4MzU1ZiwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMyMDAwMCwgLnR5cGUgPSAweDA3MzAwMTAwfSwKKwl7IC5qdGFnX2lkID0gMHhiNTVmLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwMDAwLCAudHlwZSA9IDB4MDczMDAzMDB9LAorCXsgLmp0YWdfaWQgPSAweGI0NzAsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMTAxMDAsIC50eXBlID0gMHgxNTEwMDAwMH0sCisJeyAuanRhZ19pZCA9IDB4YjU3NiwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMyMDAwMCwgLnR5cGUgPSAweDE2MTAwMDAwfSwKKwl7IC5qdGFnX2lkID0gMHhiNTc2LCAuZGllX3JldiA9IDB4MiwgLm9tYXBfaWQgPSAweDAzMzIwMTAwLCAudHlwZSA9IDB4MTYxMTAwMDB9LAorCXsgLmp0YWdfaWQgPSAweGI1NzYsIC5kaWVfcmV2ID0gMHgzLCAub21hcF9pZCA9IDB4MDMzMjAxMDAsIC50eXBlID0gMHgxNjEwMGMwMH0sCisJeyAuanRhZ19pZCA9IDB4YjU3NiwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMyMDIwMCwgLnR5cGUgPSAweDE2MTAwZDAwfSwKKwl7IC5qdGFnX2lkID0gMHhiNjEzLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwMzAwLCAudHlwZSA9IDB4MTYxMGVmMDB9LAorCXsgLmp0YWdfaWQgPSAweGI2MTMsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjAzMDAsIC50eXBlID0gMHgxNjEwZWYwMH0sCisJeyAuanRhZ19pZCA9IDB4YjU3NiwgLmRpZV9yZXYgPSAweDEsIC5vbWFwX2lkID0gMHgwMzMyMDEwMCwgLnR5cGUgPSAweDE2MTEwMDAwfSwKKwl7IC5qdGFnX2lkID0gMHhiNThjLCAuZGllX3JldiA9IDB4MiwgLm9tYXBfaWQgPSAweDAzMzIwMjAwLCAudHlwZSA9IDB4MTYxMTBiMDB9LAorCXsgLmp0YWdfaWQgPSAweGI1OGMsIC5kaWVfcmV2ID0gMHgzLCAub21hcF9pZCA9IDB4MDMzMjAyMDAsIC50eXBlID0gMHgxNjExMGMwMH0sCisJeyAuanRhZ19pZCA9IDB4YjY1ZiwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMyMDQwMCwgLnR5cGUgPSAweDE2MjEyMzAwfSwKKwl7IC5qdGFnX2lkID0gMHhiNjVmLCAuZGllX3JldiA9IDB4MSwgLm9tYXBfaWQgPSAweDAzMzIwNDAwLCAudHlwZSA9IDB4MTYyMTIzMDB9LAorCXsgLmp0YWdfaWQgPSAweGI2NWYsIC5kaWVfcmV2ID0gMHgxLCAub21hcF9pZCA9IDB4MDMzMjA1MDAsIC50eXBlID0gMHgxNjIxMjMwMH0sCisJeyAuanRhZ19pZCA9IDB4YjVmNywgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMzMDAwMCwgLnR5cGUgPSAweDE3MTAwMDAwfSwKKwl7IC5qdGFnX2lkID0gMHhiNWY3LCAuZGllX3JldiA9IDB4MSwgLm9tYXBfaWQgPSAweDAzMzMwMTAwLCAudHlwZSA9IDB4MTcxMDAwMDB9LAorCXsgLmp0YWdfaWQgPSAweGI1ZjcsIC5kaWVfcmV2ID0gMHgyLCAub21hcF9pZCA9IDB4MDMzMzAxMDAsIC50eXBlID0gMHgxNzEwMDAwMH0sCit9OworCisvKgorICogR2V0IE9NQVAgdHlwZSBmcm9tIFBST0RfSUQuCisgKiAxNzEwIGhhcyB0aGUgUFJPRF9JRCBpbiBiaXRzIDE1OjAwLCBub3QgaW4gMTY6MDEgYXMgZG9jdW1lbnRlZCBpbiBUUk0uCisgKiAxNTEwIFBST0RfSUQgaXMgZW1wdHksIGFuZCAxNjEwIFBST0RfSUQgZG9lcyBub3QgbWFrZSBzZW5zZS4KKyAqIFVuZG9jdW1lbnRlZCByZWdpc3RlciBpbiBURVNUIEJMT0NLIGlzIHVzZWQgYXMgZmFsbGJhY2s7IFRoaXMgc2VlbXMgdG8KKyAqIHdvcmsgb24gMTUxMCwgMTYxMCAmIDE3MTAuIFRoZSBvZmZpY2lhbCB3YXkgaG9wZWZ1bGx5IHdpbGwgd29yayBpbiBmdXR1cmUKKyAqIHByb2Nlc3NvcnMuCisgKi8KK3N0YXRpYyB1MTYgX19pbml0IG9tYXBfZ2V0X2p0YWdfaWQodm9pZCkKK3sKKwl1MzIgcHJvZF9pZCwgb21hcF9pZDsKKworCXByb2RfaWQgPSBvbWFwX3JlYWRsKE9NQVBfUFJPRFVDVElPTl9JRF8xKTsKKwlvbWFwX2lkID0gb21hcF9yZWFkbChPTUFQMzJfSURfMSk7CisKKwkvKiBDaGVjayBmb3IgdW51c2FibGUgT01BUF9QUk9EVUNUSU9OX0lEXzEgb24gMTYxMUIvNTkxMiBhbmQgNzMwICovCisJaWYgKCgocHJvZF9pZCA+PiAyMCkgPT0gMCkgfHwgKHByb2RfaWQgPT0gb21hcF9pZCkpCisJCXByb2RfaWQgPSAwOworCWVsc2UKKwkJcHJvZF9pZCAmPSAweGZmZmY7CisKKwlpZiAocHJvZF9pZCkKKwkJcmV0dXJuIHByb2RfaWQ7CisKKwkvKiBVc2UgT01BUDMyX0lEXzEgYXMgZmFsbGJhY2sgKi8KKwlwcm9kX2lkID0gKChvbWFwX2lkID4+IDEyKSAmIDB4ZmZmZik7CisKKwlyZXR1cm4gcHJvZF9pZDsKK30KKworLyoKKyAqIEdldCBPTUFQIHJldmlzaW9uIGZyb20gRElFX1JFVi4KKyAqIEVhcmx5IDE3MTAgcHJvY2Vzc29ycyBtYXkgaGF2ZSBicm9rZW4gT01BUF9ESUVfSUQsIGl0IGNvbnRhaW5zIFBST0RfSUQuCisgKiBVbmRvY3VtZW50ZWQgcmVnaXN0ZXIgaW4gdGhlIFRFU1QgQkxPQ0sgaXMgdXNlZCBhcyBmYWxsYmFjay4KKyAqIFJFVklTSVQ6IFRoaXMgZG9lcyBub3Qgc2VlbSB0byB3b3JrIG9uIDE1MTAKKyAqLworc3RhdGljIHU4IF9faW5pdCBvbWFwX2dldF9kaWVfcmV2KHZvaWQpCit7CisJdTMyIGRpZV9yZXY7CisKKwlkaWVfcmV2ID0gb21hcF9yZWFkbChPTUFQX0RJRV9JRF8xKTsKKworCS8qIENoZWNrIGZvciBicm9rZW4gT01BUF9ESUVfSUQgb24gZWFybHkgMTcxMCAqLworCWlmICgoKGRpZV9yZXYgPj4gMTIpICYgMHhmZmZmKSA9PSBvbWFwX2dldF9qdGFnX2lkKCkpCisJCWRpZV9yZXYgPSAwOworCisJZGllX3JldiA9IChkaWVfcmV2ID4+IDE3KSAmIDB4ZjsKKwlpZiAoZGllX3JldikKKwkJcmV0dXJuIGRpZV9yZXY7CisKKwlkaWVfcmV2ID0gKG9tYXBfcmVhZGwoT01BUDMyX0lEXzEpID4+IDI4KSAmIDB4ZjsKKworCXJldHVybiBkaWVfcmV2OworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9jaGVja19yZXZpc2lvbih2b2lkKQoreworCWludCBpOworCXUxNiBqdGFnX2lkOworCXU4IGRpZV9yZXY7CisJdTMyIG9tYXBfaWQ7CisJdTggY3B1X3R5cGU7CisKKwlqdGFnX2lkID0gb21hcF9nZXRfanRhZ19pZCgpOworCWRpZV9yZXYgPSBvbWFwX2dldF9kaWVfcmV2KCk7CisJb21hcF9pZCA9IG9tYXBfcmVhZGwoT01BUDMyX0lEXzApOworCisjaWZkZWYgREVCVUcKKwlwcmludGsoIk9NQVBfRElFX0lEXzA6IDB4JTA4eFxuIiwgb21hcF9yZWFkbChPTUFQX0RJRV9JRF8wKSk7CisJcHJpbnRrKCJPTUFQX0RJRV9JRF8xOiAweCUwOHggRElFX1JFVjogJWlcbiIsCisJCW9tYXBfcmVhZGwoT01BUF9ESUVfSURfMSksCisJICAgICAgIChvbWFwX3JlYWRsKE9NQVBfRElFX0lEXzEpID4+IDE3KSAmIDB4Zik7CisJcHJpbnRrKCJPTUFQX1BST0RVQ1RJT05fSURfMDogMHglMDh4XG4iLCBvbWFwX3JlYWRsKE9NQVBfUFJPRFVDVElPTl9JRF8wKSk7CisJcHJpbnRrKCJPTUFQX1BST0RVQ1RJT05fSURfMTogMHglMDh4IEpUQUdfSUQ6IDB4JTA0eFxuIiwKKwkJb21hcF9yZWFkbChPTUFQX1BST0RVQ1RJT05fSURfMSksCisJCW9tYXBfcmVhZGwoT01BUF9QUk9EVUNUSU9OX0lEXzEpICYgMHhmZmZmKTsKKwlwcmludGsoIk9NQVAzMl9JRF8wOiAweCUwOHhcbiIsIG9tYXBfcmVhZGwoT01BUDMyX0lEXzApKTsKKwlwcmludGsoIk9NQVAzMl9JRF8xOiAweCUwOHhcbiIsIG9tYXBfcmVhZGwoT01BUDMyX0lEXzEpKTsKKwlwcmludGsoIkpUQUdfSUQ6IDB4JTA0eCBESUVfUkVWOiAlaVxuIiwganRhZ19pZCwgZGllX3Jldik7CisjZW5kaWYKKworCXN5c3RlbV9zZXJpYWxfaGlnaCA9IG9tYXBfcmVhZGwoT01BUF9ESUVfSURfMCk7CisJc3lzdGVtX3NlcmlhbF9sb3cgPSBvbWFwX3JlYWRsKE9NQVBfRElFX0lEXzEpOworCisJLyogRmlyc3QgY2hlY2sgb25seSB0aGUgbWFqb3IgdmVyc2lvbiBpbiBhIHNhZmUgd2F5ICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob21hcF9pZHMpOyBpKyspIHsKKwkJaWYgKGp0YWdfaWQgPT0gKG9tYXBfaWRzW2ldLmp0YWdfaWQpKSB7CisJCQlzeXN0ZW1fcmV2ID0gb21hcF9pZHNbaV0udHlwZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogQ2hlY2sgaWYgd2UgY2FuIGZpbmQgdGhlIGRpZSByZXZpc2lvbiAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9tYXBfaWRzKTsgaSsrKSB7CisJCWlmIChqdGFnX2lkID09IG9tYXBfaWRzW2ldLmp0YWdfaWQgJiYgZGllX3JldiA9PSBvbWFwX2lkc1tpXS5kaWVfcmV2KSB7CisJCQlzeXN0ZW1fcmV2ID0gb21hcF9pZHNbaV0udHlwZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogRmluYWxseSBjaGVjayBhbHNvIHRoZSBvbWFwX2lkICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob21hcF9pZHMpOyBpKyspIHsKKwkJaWYgKGp0YWdfaWQgPT0gb21hcF9pZHNbaV0uanRhZ19pZAorCQkgICAgJiYgZGllX3JldiA9PSBvbWFwX2lkc1tpXS5kaWVfcmV2CisJCSAgICAmJiBvbWFwX2lkID09IG9tYXBfaWRzW2ldLm9tYXBfaWQpIHsKKwkJCXN5c3RlbV9yZXYgPSBvbWFwX2lkc1tpXS50eXBlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBBZGQgdGhlIGNwdSBjbGFzcyBpbmZvICg3eHgsIDE1eHgsIDE2eHgsIDI0eHgpICovCisJY3B1X3R5cGUgPSBzeXN0ZW1fcmV2ID4+IDI0OworCisJc3dpdGNoIChjcHVfdHlwZSkgeworCWNhc2UgMHgwNzoKKwkJc3lzdGVtX3JldiB8PSAweDA3OworCQlicmVhazsKKwljYXNlIDB4MTU6CisJCXN5c3RlbV9yZXYgfD0gMHgxNTsKKwkJYnJlYWs7CisJY2FzZSAweDE2OgorCWNhc2UgMHgxNzoKKwkJc3lzdGVtX3JldiB8PSAweDE2OworCQlicmVhazsKKwljYXNlIDB4MjQ6CisJCXN5c3RlbV9yZXYgfD0gMHgyNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJVbmtub3duIE9NQVAgY3B1IHR5cGU6IDB4JTAyeFxuIiwgY3B1X3R5cGUpOworCX0KKworCXByaW50aygiT01BUCUwNHgiLCBzeXN0ZW1fcmV2ID4+IDE2KTsKKwlpZiAoKHN5c3RlbV9yZXYgPj4gOCkgJiAweGZmKQorCQlwcmludGsoIiV4IiwgKHN5c3RlbV9yZXYgPj4gOCkgJiAweGZmKTsKKwlwcmludGsoIiByZXZpc2lvbiAlaSBoYW5kbGVkIGFzICUwMnh4eCBpZDogJTA4eCUwOHhcbiIsCisJICAgICAgIGRpZV9yZXYsIHN5c3RlbV9yZXYgJiAweGZmLCBzeXN0ZW1fc2VyaWFsX2xvdywKKwkgICAgICAgc3lzdGVtX3NlcmlhbF9oaWdoKTsKK30KKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9NQVAgSS9PIG1hcHBpbmcKKyAqCisgKiBUaGUgbWFjaGluZSBzcGVjaWZpYyBjb2RlIG1heSBwcm92aWRlIHRoZSBleHRyYSBtYXBwaW5nIGJlc2lkZXMgdGhlCisgKiBkZWZhdWx0IG1hcHBpbmcgcHJvdmlkZWQgaGVyZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisgeyBJT19WSVJULCAgICAgIAlJT19QSFlTLCAgICAgICAgICAgICBJT19TSVpFLCAgICAgICAgCSAgIE1UX0RFVklDRSB9LAorfTsKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVA3MzAKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgb21hcDczMF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKyB7IE9NQVA3MzBfRFNQX0JBU0UsICAgIE9NQVA3MzBfRFNQX1NUQVJULCAgICBPTUFQNzMwX0RTUF9TSVpFLCAgICBNVF9ERVZJQ0UgfSwKKyB7IE9NQVA3MzBfRFNQUkVHX0JBU0UsIE9NQVA3MzBfRFNQUkVHX1NUQVJULCBPTUFQNzMwX0RTUFJFR19TSVpFLCBNVF9ERVZJQ0UgfSwKKyB7IE9NQVA3MzBfU1JBTV9CQVNFLCAgIE9NQVA3MzBfU1JBTV9TVEFSVCwgICBPTUFQNzMwX1NSQU1fU0laRSwgICBNVF9ERVZJQ0UgfQorfTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgb21hcDE1MTBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisgeyBPTUFQMTUxMF9EU1BfQkFTRSwgICAgT01BUDE1MTBfRFNQX1NUQVJULCAgICBPTUFQMTUxMF9EU1BfU0laRSwgICAgTVRfREVWSUNFIH0sCisgeyBPTUFQMTUxMF9EU1BSRUdfQkFTRSwgT01BUDE1MTBfRFNQUkVHX1NUQVJULCBPTUFQMTUxMF9EU1BSRUdfU0laRSwgTVRfREVWSUNFIH0sCisgeyBPTUFQMTUxMF9TUkFNX0JBU0UsICAgT01BUDE1MTBfU1JBTV9TVEFSVCwgICBPTUFQMTUxMF9TUkFNX1NJWkUsICAgTVRfREVWSUNFIH0KK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXAxNjEwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworIHsgT01BUDE2WFhfRFNQX0JBU0UsICAgIE9NQVAxNlhYX0RTUF9TVEFSVCwgICAgT01BUDE2WFhfRFNQX1NJWkUsICAgIE1UX0RFVklDRSB9LAorIHsgT01BUDE2WFhfRFNQUkVHX0JBU0UsIE9NQVAxNlhYX0RTUFJFR19TVEFSVCwgT01BUDE2WFhfRFNQUkVHX1NJWkUsIE1UX0RFVklDRSB9LAorIHsgT01BUDE2WFhfU1JBTV9CQVNFLCAgIE9NQVAxNlhYX1NSQU1fU1RBUlQsICAgT01BUDE2MTBfU1JBTV9TSVpFLCAgIE1UX0RFVklDRSB9Cit9OworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXA1OTEyX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworIHsgT01BUDE2WFhfRFNQX0JBU0UsICAgIE9NQVAxNlhYX0RTUF9TVEFSVCwgICAgT01BUDE2WFhfRFNQX1NJWkUsICAgIE1UX0RFVklDRSB9LAorIHsgT01BUDE2WFhfRFNQUkVHX0JBU0UsIE9NQVAxNlhYX0RTUFJFR19TVEFSVCwgT01BUDE2WFhfRFNQUkVHX1NJWkUsIE1UX0RFVklDRSB9LAorLyoKKyAqIFRoZSBPTUFQNTkxMiBoYXMgMjUwa0J5dGUgaW50ZXJuYWwgU1JBTS4gQmVjYXVzZSB0aGUgbWFwcGluZyBpcyBiYXNlZWQgb24gcGFnZQorICogc2l6ZSAoNGtCeXRlKSwgaXQgc2VlbXMgdGhhdCB0aGUgbGFzdCAya0J5dGUgKD0weDgwMCkgb2YgdGhlIDI1MGtCeXRlIGFyZSBub3QgbWFwcGVkLgorICogQWRkIGFkZGl0aW9uYWwgMmtCeXRlICgweDgwMCkgc28gdGhhdCB0aGUgbGFzdCBwYWdlIGlzIG1hcHBlZCBhbmQgdGhlIGxhc3QgMmtCeXRlCisgKiBjYW4gYmUgdXNlZC4KKyAqLworIHsgT01BUDE2WFhfU1JBTV9CQVNFLCAgIE9NQVAxNlhYX1NSQU1fU1RBUlQsICAgT01BUDU5MTJfU1JBTV9TSVpFICsgMHg4MDAsICAgTVRfREVWSUNFIH0KK307CisjZW5kaWYKKworc3RhdGljIGludCBpbml0aWFsaXplZCA9IDA7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBfb21hcF9tYXBfaW8odm9pZCkKK3sKKwlpbml0aWFsaXplZCA9IDE7CisKKwkvKiBXZSBoYXZlIHRvIGluaXRpYWxpemUgdGhlIElPIHNwYWNlIG1hcHBpbmcgYmVmb3JlIHdlIGNhbiBydW4KKwkgKiBjcHVfaXNfb21hcHh4eCgpIG1hY3Jvcy4gKi8KKwlpb3RhYmxlX2luaXQob21hcF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXBfaW9fZGVzYykpOworCW9tYXBfY2hlY2tfcmV2aXNpb24oKTsKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVA3MzAKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkgeworCQlpb3RhYmxlX2luaXQob21hcDczMF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXA3MzBfaW9fZGVzYykpOworCX0KKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJCWlvdGFibGVfaW5pdChvbWFwMTUxMF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAxNTEwX2lvX2Rlc2MpKTsKKwl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQorCWlmIChjcHVfaXNfb21hcDE2MTAoKSB8fCBjcHVfaXNfb21hcDE3MTAoKSkgeworCQlpb3RhYmxlX2luaXQob21hcDE2MTBfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMTYxMF9pb19kZXNjKSk7CisJfQorCWlmIChjcHVfaXNfb21hcDU5MTIoKSkgeworCQlpb3RhYmxlX2luaXQob21hcDU5MTJfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwNTkxMl9pb19kZXNjKSk7CisJfQorI2VuZGlmCisKKwkvKiBSRVZJU0lUOiBSZWZlciB0byBPTUFQNTkxMCBFcnJhdGEsIEFkdmlzb3J5IFNZU18xOiAiVGltZW91dCBBYm9ydAorCSAqIG9uIGEgUG9zdGVkIFdyaXRlIGluIHRoZSBUSVBCIEJyaWRnZSIuCisJICovCisJb21hcF93cml0ZXcoMHgwLCBNUFVfUFVCTElDX1RJUEJfQ05UTCk7CisJb21hcF93cml0ZXcoMHgwLCBNUFVfUFJJVkFURV9USVBCX0NOVEwpOworCisJLyogTXVzdCBpbml0IGNsb2NrcyBlYXJseSB0byBhc3N1cmUgdGhhdCB0aW1lciBpbnRlcnJ1cHQgd29ya3MKKwkgKi8KKwljbGtfaW5pdCgpOworfQorCisvKgorICogVGhpcyBzaG91bGQgb25seSBnZXQgY2FsbGVkIGZyb20gYm9hcmQgc3BlY2lmaWMgaW5pdAorICovCit2b2lkIG9tYXBfbWFwX2lvKHZvaWQpCit7CisJaWYgKCFpbml0aWFsaXplZCkKKwkJX29tYXBfbWFwX2lvKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9tYXBfc2VyaWFsX2luKHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqdXAsCisJCQkJCSAgaW50IG9mZnNldCkKK3sKKwlvZmZzZXQgPDw9IHVwLT5yZWdzaGlmdDsKKwlyZXR1cm4gKHVuc2lnbmVkIGludClfX3Jhd19yZWFkYih1cC0+bWVtYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX3NlcmlhbF9vdXRwKHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqcCwgaW50IG9mZnNldCwKKwkJCQkgICAgaW50IHZhbHVlKQoreworCW9mZnNldCA8PD0gcC0+cmVnc2hpZnQ7CisJX19yYXdfd3JpdGViKHZhbHVlLCBwLT5tZW1iYXNlICsgb2Zmc2V0KTsKK30KKworLyoKKyAqIEludGVybmFsIFVBUlRzIG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgZm9yIHRoZSA4MjUwIGF1dG9jb25maWcgdG8gd29yaworICogcHJvcGVybHkuIE5vdGUgdGhhdCB0aGUgVFggd2F0ZXJtYXJrIGluaXRpYWxpemF0aW9uIG1heSBub3QgYmUgbmVlZGVkCisgKiBvbmNlIHRoZSA4MjUwLmMgd2F0ZXJtYXJrIGhhbmRsaW5nIGNvZGUgaXMgbWVyZ2VkLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9zZXJpYWxfcmVzZXQoc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0ICpwKQoreworCW9tYXBfc2VyaWFsX291dHAocCwgVUFSVF9PTUFQX01EUjEsIDB4MDcpOwkvKiBkaXNhYmxlIFVBUlQgKi8KKwlvbWFwX3NlcmlhbF9vdXRwKHAsIFVBUlRfT01BUF9TQ1IsIDB4MDgpOwkvKiBUWCB3YXRlcm1hcmsgKi8KKwlvbWFwX3NlcmlhbF9vdXRwKHAsIFVBUlRfT01BUF9NRFIxLCAweDAwKTsJLyogZW5hYmxlIFVBUlQgKi8KKworCWlmICghY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJb21hcF9zZXJpYWxfb3V0cChwLCBVQVJUX09NQVBfU1lTQywgMHgwMSk7CisJCXdoaWxlICghKG9tYXBfc2VyaWFsX2luKHAsIFVBUlRfT01BUF9TWVNDKSAmIDB4MDEpKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tZW1iYXNlCT0gKGNoYXIqKUlPX0FERFJFU1MoT01BUF9VQVJUMV9CQVNFKSwKKwkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZylPTUFQX1VBUlQxX0JBU0UsCisJCS5pcnEJCT0gSU5UX1VBUlQxLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5yZWdzaGlmdAk9IDIsCisJCS51YXJ0Y2xrCT0gT01BUDE2WFhfQkFTRV9CQVVEICogMTYsCisJfSwKKwl7CisJCS5tZW1iYXNlCT0gKGNoYXIqKUlPX0FERFJFU1MoT01BUF9VQVJUMl9CQVNFKSwKKwkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZylPTUFQX1VBUlQyX0JBU0UsCisJCS5pcnEJCT0gSU5UX1VBUlQyLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5yZWdzaGlmdAk9IDIsCisJCS51YXJ0Y2xrCT0gT01BUDE2WFhfQkFTRV9CQVVEICogMTYsCisJfSwKKwl7CisJCS5tZW1iYXNlCT0gKGNoYXIqKUlPX0FERFJFU1MoT01BUF9VQVJUM19CQVNFKSwKKwkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZylPTUFQX1VBUlQzX0JBU0UsCisJCS5pcnEJCT0gSU5UX1VBUlQzLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5yZWdzaGlmdAk9IDIsCisJCS51YXJ0Y2xrCT0gT01BUDE2WFhfQkFTRV9CQVVEICogMTYsCisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZXJpYWxfZGV2aWNlID0geworCS5uYW1lCQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQkJPSAwLAorCS5kZXYJCQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSBzZXJpYWxfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworLyoKKyAqIE5vdGUgdGhhdCBvbiBJbm5vdmF0b3ItMTUxMCBVQVJUMiBwaW5zIGNvbmZsaWN0IHdpdGggVVNCMi4KKyAqIEJ5IGRlZmF1bHQgVUFSVDIgZG9lcyBub3Qgd29yayBvbiBJbm5vdmF0b3ItMTUxMCBpZiB5b3UgaGF2ZQorICogVVNCIE9IQ0kgZW5hYmxlZC4gVG8gdXNlIFVBUlQyLCB5b3UgbXVzdCBkaXNhYmxlIFVTQjIgZmlyc3QuCisgKi8KK3ZvaWQgX19pbml0IG9tYXBfc2VyaWFsX2luaXQoaW50IHBvcnRzW09NQVBfTUFYX05SX1BPUlRTXSkKK3sKKwlpbnQgaTsKKworCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJCXNlcmlhbF9wbGF0Zm9ybV9kYXRhWzBdLnJlZ3NoaWZ0ID0gMDsKKwkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMV0ucmVnc2hpZnQgPSAwOworCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVswXS5pcnEgPSBJTlRfNzMwX1VBUlRfTU9ERU1fMTsKKwkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMV0uaXJxID0gSU5UXzczMF9VQVJUX01PREVNX0lSREFfMjsKKwl9CisKKwlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMF0udWFydGNsayA9IE9NQVAxNTEwX0JBU0VfQkFVRCAqIDE2OworCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVsxXS51YXJ0Y2xrID0gT01BUDE1MTBfQkFTRV9CQVVEICogMTY7CisJCXNlcmlhbF9wbGF0Zm9ybV9kYXRhWzJdLnVhcnRjbGsgPSBPTUFQMTUxMF9CQVNFX0JBVUQgKiAxNjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgT01BUF9NQVhfTlJfUE9SVFM7IGkrKykgeworCQl1bnNpZ25lZCBjaGFyIHJlZzsKKworCQlpZiAocG9ydHNbaV0gPT0gMCkgeworCQkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbaV0ubWVtYmFzZSA9IDA7CisJCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVtpXS5tYXBiYXNlID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgMDoKKwkJCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCQkJCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJCQkJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJCQkJaWYgKG1hY2hpbmVfaXNfb21hcF9pbm5vdmF0b3IoKSkgeworCQkJCQlyZWcgPSBmcGdhX3JlYWQoT01BUDE1MTBfRlBHQV9QT1dFUik7CisJCQkJCXJlZyB8PSBPTUFQMTUxMF9GUEdBX1BDUl9DT00xX0VOOworCQkJCQlmcGdhX3dyaXRlKHJlZywgT01BUDE1MTBfRlBHQV9QT1dFUik7CisJCQkJCXVkZWxheSgxMCk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCQkJCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJCQkJb21hcF9jZmdfcmVnKFVBUlQyX1JUUyk7CisJCQkJaWYgKG1hY2hpbmVfaXNfb21hcF9pbm5vdmF0b3IoKSkgeworCQkJCQlyZWcgPSBmcGdhX3JlYWQoT01BUDE1MTBfRlBHQV9QT1dFUik7CisJCQkJCXJlZyB8PSBPTUFQMTUxMF9GUEdBX1BDUl9DT00yX0VOOworCQkJCQlmcGdhX3dyaXRlKHJlZywgT01BUDE1MTBfRlBHQV9QT1dFUik7CisJCQkJCXVkZWxheSgxMCk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCQkJCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7CisJCQkJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKwkJCX0KKwkJCWlmIChjcHVfaXNfb21hcDE3MTAoKSkgeworCQkJCWNsa19lbmFibGUoY2xrX2dldCgwLCAidWFydDNfY2siKSk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlvbWFwX3NlcmlhbF9yZXNldCgmc2VyaWFsX3BsYXRmb3JtX2RhdGFbaV0pOworCX0KK30KKworc3RhdGljIGludCBfX2luaXQgb21hcF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2VyaWFsX2RldmljZSk7Cit9CithcmNoX2luaXRjYWxsKG9tYXBfaW5pdCk7CisKKyNkZWZpbmUgTk9fTEVOR1RIX0NIRUNLIDB4ZmZmZmZmZmYKKworZXh0ZXJuIGludCBvbWFwX2Jvb3Rsb2FkZXJfdGFnX2xlbjsKK2V4dGVybiB1OCBvbWFwX2Jvb3Rsb2FkZXJfdGFnW107CisKK3N0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgKm9tYXBfYm9hcmRfY29uZmlnOworaW50IG9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSAwOworCitzdGF0aWMgY29uc3Qgdm9pZCAqZ2V0X2NvbmZpZyh1MTYgdGFnLCBzaXplX3QgbGVuLCBpbnQgc2tpcCwgc2l6ZV90ICpsZW5fb3V0KQoreworCXN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgKmtpbmZvID0gTlVMTDsKKwlpbnQgaTsKKworI2lmZGVmIENPTkZJR19PTUFQX0JPT1RfVEFHCisJc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2VudHJ5ICppbmZvID0gTlVMTDsKKworCWlmIChvbWFwX2Jvb3Rsb2FkZXJfdGFnX2xlbiA+IDQpCisJCWluZm8gPSAoc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2VudHJ5ICopIG9tYXBfYm9vdGxvYWRlcl90YWc7CisJd2hpbGUgKGluZm8gIT0gTlVMTCkgeworCQl1OCAqbmV4dDsKKworCQlpZiAoaW5mby0+dGFnID09IHRhZykgeworCQkJaWYgKHNraXAgPT0gMCkKKwkJCQlicmVhazsKKwkJCXNraXAtLTsKKwkJfQorCisJCWlmICgoaW5mby0+bGVuICYgMHgwMykgIT0gMCkgeworCQkJLyogV2UgYmFpbCBvdXQgdG8gYXZvaWQgYW4gYWxpZ25tZW50IGZhdWx0ICovCisJCQlwcmludGsoS0VSTl9FUlIgIk9NQVAgcGVyaXBoZXJhbCBjb25maWc6IExlbmd0aCAoJWQpIG5vdCB3b3JkLWFsaWduZWQgKHRhZyAlMDR4KVxuIiwKKwkJCSAgICAgICBpbmZvLT5sZW4sIGluZm8tPnRhZyk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQluZXh0ID0gKHU4ICopIGluZm8gKyBzaXplb2YoKmluZm8pICsgaW5mby0+bGVuOworCQlpZiAobmV4dCA+PSBvbWFwX2Jvb3Rsb2FkZXJfdGFnICsgb21hcF9ib290bG9hZGVyX3RhZ19sZW4pCisJCQlpbmZvID0gTlVMTDsKKwkJZWxzZQorCQkJaW5mbyA9IChzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfZW50cnkgKikgbmV4dDsKKwl9CisJaWYgKGluZm8gIT0gTlVMTCkgeworCQkvKiBDaGVjayB0aGUgbGVuZ3RoIGFzIGEgbGFtZSBhdHRlbXB0IHRvIGNoZWNrIGZvcgorCQkgKiBiaW5hcnkgaW5jb25zaXN0YW5jeS4gKi8KKwkJaWYgKGxlbiAhPSBOT19MRU5HVEhfQ0hFQ0spIHsKKwkJCS8qIFdvcmQtYWxpZ24gbGVuICovCisJCQlpZiAobGVuICYgMHgwMykKKwkJCQlsZW4gPSAobGVuICsgMykgJiB+MHgwMzsKKwkJCWlmIChpbmZvLT5sZW4gIT0gbGVuKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJPTUFQIHBlcmlwaGVyYWwgY29uZmlnOiBMZW5ndGggbWlzbWF0Y2ggd2l0aCB0YWcgJXggKHdhbnQgJWQsIGdvdCAlZClcbiIsCisJCQkJICAgICAgIHRhZywgbGVuLCBpbmZvLT5sZW4pOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQl9CisJCWlmIChsZW5fb3V0ICE9IE5VTEwpCisJCQkqbGVuX291dCA9IGluZm8tPmxlbjsKKwkJcmV0dXJuIGluZm8tPmRhdGE7CisJfQorI2VuZGlmCisJLyogVHJ5IHRvIGZpbmQgdGhlIGNvbmZpZyBmcm9tIHRoZSBib2FyZC1zcGVjaWZpYyBzdHJ1Y3R1cmVzCisJICogaW4gdGhlIGtlcm5lbC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgb21hcF9ib2FyZF9jb25maWdfc2l6ZTsgaSsrKSB7CisJCWlmIChvbWFwX2JvYXJkX2NvbmZpZ1tpXS50YWcgPT0gdGFnKSB7CisJCQlraW5mbyA9ICZvbWFwX2JvYXJkX2NvbmZpZ1tpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChraW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4ga2luZm8tPmRhdGE7Cit9CisKK2NvbnN0IHZvaWQgKl9fb21hcF9nZXRfY29uZmlnKHUxNiB0YWcsIHNpemVfdCBsZW4sIGludCBucikKK3sKKyAgICAgICAgcmV0dXJuIGdldF9jb25maWcodGFnLCBsZW4sIG5yLCBOVUxMKTsKK30KK0VYUE9SVF9TWU1CT0woX19vbWFwX2dldF9jb25maWcpOworCitjb25zdCB2b2lkICpvbWFwX2dldF92YXJfY29uZmlnKHUxNiB0YWcsIHNpemVfdCAqbGVuKQoreworICAgICAgICByZXR1cm4gZ2V0X2NvbmZpZyh0YWcsIE5PX0xFTkdUSF9DSEVDSywgMCwgbGVuKTsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9nZXRfdmFyX2NvbmZpZyk7CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfYWRkX3NlcmlhbF9jb25zb2xlKHZvaWQpCit7CisJY29uc3Qgc3RydWN0IG9tYXBfdWFydF9jb25maWcgKmluZm87CisKKwlpbmZvID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX1VBUlQsIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnKTsKKwlpZiAoaW5mbyAhPSBOVUxMICYmIGluZm8tPmNvbnNvbGVfdWFydCkgeworCQlzdGF0aWMgY2hhciBzcGVlZFsxMV0sICpvcHQgPSBOVUxMOworCisJCWlmIChpbmZvLT5jb25zb2xlX3NwZWVkKSB7CisJCQlzbnByaW50ZihzcGVlZCwgc2l6ZW9mKHNwZWVkKSwgIiV1IiwgaW5mby0+Y29uc29sZV9zcGVlZCk7CisJCQlvcHQgPSBzcGVlZDsKKwkJfQorCQlyZXR1cm4gYWRkX3ByZWZlcnJlZF9jb25zb2xlKCJ0dHlTIiwgaW5mby0+Y29uc29sZV91YXJ0IC0gMSwgb3B0KTsKKwl9CisJcmV0dXJuIDA7Cit9Citjb25zb2xlX2luaXRjYWxsKG9tYXBfYWRkX3NlcmlhbF9jb25zb2xlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtb21hcC9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjYyODU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwL2NvbW1vbi5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvY29tbW9uLmgKKyAqCisgKiBIZWFkZXIgZm9yIGNvZGUgY29tbW9uIHRvIGFsbCBPTUFQIG1hY2hpbmVzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUF9DT01NT05fSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUF9DT01NT05fSAorCitzdHJ1Y3Qgc3lzX3RpbWVyOworCitleHRlcm4gdm9pZCBvbWFwX21hcF9pbyh2b2lkKTsKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIG9tYXBfdGltZXI7CitleHRlcm4gdm9pZCBvbWFwX3NlcmlhbF9pbml0KGludCBwb3J0c1tdKTsKKworI2VuZGlmIC8qIF9fQVJDSF9BUk1fTUFDSF9PTUFQX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAvZG1hLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAvZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E5ZWJlOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcC9kbWEuYwpAQCAtMCwwICsxLDEwODYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9vbWFwL2RtYS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIE5va2lhIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IEp1aGEgWXJq9mzkIDxqdWhhLnlyam9sYUBub2tpYS5jb20+CisgKiBETUEgY2hhbm5lbCBsaW5raW5nIGZvciAxNjEwIGJ5IFNhbXVlbCBPcnRpeiA8c2FtdWVsLm9ydGl6QG5va2lhLmNvbT4KKyAqIEdyYXBoaWNzIERNQSBhbmQgTENEIERNQSBncmFwaGljcyB0cmFuZm9ybWF0aW9ucworICogYnkgSW1yZSBEZWFrIDxpbXJlLmRlYWtAbm9raWEuY29tPgorICogU29tZSBmdW5jdGlvbnMgYmFzZWQgb24gZWFybGllciBkbWEtb21hcC5jIENvcHlyaWdodCAoQykgMjAwMSBSaWRnZVJ1biwgSW5jLgorICoKKyAqIFN1cHBvcnQgZnVuY3Rpb25zIGZvciB0aGUgT01BUCBpbnRlcm5hbCBETUEgY2hhbm5lbHMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvdGMuaD4KKworI2RlZmluZSBPTUFQX0RNQV9BQ1RJVkUJCTB4MDEKKworI2RlZmluZSBPTUFQX0RNQV9DQ1JfRU4JCSgxIDw8IDcpCisKKyNkZWZpbmUgT01BUF9GVU5DX01VWF9BUk1fQkFTRQkoMHhmZmZlMTAwMCArIDB4ZWMpCisKK3N0YXRpYyBpbnQgZW5hYmxlXzE1MTBfbW9kZSA9IDA7CisKK3N0cnVjdCBvbWFwX2RtYV9sY2ggeworCWludCBuZXh0X2xjaDsKKwlpbnQgZGV2X2lkOworCXUxNiBzYXZlZF9jc3I7CisJdTE2IGVuYWJsZWRfaXJxczsKKwljb25zdCBjaGFyICpkZXZfbmFtZTsKKwl2b2lkICgqIGNhbGxiYWNrKShpbnQgbGNoLCB1MTYgY2hfc3RhdHVzLCB2b2lkICpkYXRhKTsKKwl2b2lkICpkYXRhOworCWxvbmcgZmxhZ3M7Cit9OworCitzdGF0aWMgaW50IGRtYV9jaGFuX2NvdW50OworCitzdGF0aWMgc3BpbmxvY2tfdCBkbWFfY2hhbl9sb2NrOworc3RhdGljIHN0cnVjdCBvbWFwX2RtYV9sY2ggZG1hX2NoYW5bT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVF07CisKK2NvbnN0IHN0YXRpYyB1OCBkbWFfaXJxW09NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlRdID0geworCUlOVF9ETUFfQ0gwXzYsIElOVF9ETUFfQ0gxXzcsIElOVF9ETUFfQ0gyXzgsIElOVF9ETUFfQ0gzLAorCUlOVF9ETUFfQ0g0LCBJTlRfRE1BX0NINSwgSU5UXzE2MTBfRE1BX0NINiwgSU5UXzE2MTBfRE1BX0NINywKKwlJTlRfMTYxMF9ETUFfQ0g4LCBJTlRfMTYxMF9ETUFfQ0g5LCBJTlRfMTYxMF9ETUFfQ0gxMCwKKwlJTlRfMTYxMF9ETUFfQ0gxMSwgSU5UXzE2MTBfRE1BX0NIMTIsIElOVF8xNjEwX0RNQV9DSDEzLAorCUlOVF8xNjEwX0RNQV9DSDE0LCBJTlRfMTYxMF9ETUFfQ0gxNSwgSU5UX0RNQV9MQ0QKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9nZG1hX2RldihpbnQgcmVxKQoreworCXUzMiByZWcgPSBPTUFQX0ZVTkNfTVVYX0FSTV9CQVNFICsgKChyZXEgLSAxKSAvIDUpICogNDsKKwlpbnQgc2hpZnQgPSAoKHJlcSAtIDEpICUgNSkgKiA2OworCisJcmV0dXJuICgob21hcF9yZWFkbChyZWcpID4+IHNoaWZ0KSAmIDB4M2YpICsgMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9nZG1hX2RldihpbnQgcmVxLCBpbnQgZGV2KQoreworCXUzMiByZWcgPSBPTUFQX0ZVTkNfTVVYX0FSTV9CQVNFICsgKChyZXEgLSAxKSAvIDUpICogNDsKKwlpbnQgc2hpZnQgPSAoKHJlcSAtIDEpICUgNSkgKiA2OworCXUzMiBsOworCisJbCA9IG9tYXBfcmVhZGwocmVnKTsKKwlsICY9IH4oMHgzZiA8PCBzaGlmdCk7CisJbCB8PSAoZGV2IC0gMSkgPDwgc2hpZnQ7CisJb21hcF93cml0ZWwobCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgY2xlYXJfbGNoX3JlZ3MoaW50IGxjaCkKK3sKKwlpbnQgaTsKKwl1MzIgbGNoX2Jhc2UgPSBPTUFQX0RNQV9CQVNFICsgbGNoICogMHg0MDsKKworCWZvciAoaSA9IDA7IGkgPCAweDJjOyBpICs9IDIpCisJCW9tYXBfd3JpdGV3KDAsIGxjaF9iYXNlICsgaSk7Cit9CisKK3ZvaWQgb21hcF9zZXRfZG1hX3ByaW9yaXR5KGludCBkc3RfcG9ydCwgaW50IHByaW9yaXR5KQoreworCXVuc2lnbmVkIGxvbmcgcmVnOworCXUzMiBsOworCisJc3dpdGNoIChkc3RfcG9ydCkgeworCWNhc2UgT01BUF9ETUFfUE9SVF9PQ1BfVDE6CS8qIEZGRkVDQzAwICovCisJCXJlZyA9IE9NQVBfVENfT0NQVDFfUFJJT1I7CisJCWJyZWFrOworCWNhc2UgT01BUF9ETUFfUE9SVF9PQ1BfVDI6CS8qIEZGRkVDQ0QwICovCisJCXJlZyA9IE9NQVBfVENfT0NQVDJfUFJJT1I7CisJCWJyZWFrOworCWNhc2UgT01BUF9ETUFfUE9SVF9FTUlGRjoJLyogRkZGRUNDMDggKi8KKwkJcmVnID0gT01BUF9UQ19FTUlGRl9QUklPUjsKKwkJYnJlYWs7CisJY2FzZSBPTUFQX0RNQV9QT1JUX0VNSUZTOgkvKiBGRkZFQ0MwNCAqLworCQlyZWcgPSBPTUFQX1RDX0VNSUZTX1BSSU9SOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuOworCX0KKwlsID0gb21hcF9yZWFkbChyZWcpOworCWwgJj0gfigweGYgPDwgOCk7CisJbCB8PSAocHJpb3JpdHkgJiAweGYpIDw8IDg7CisJb21hcF93cml0ZWwobCwgcmVnKTsKK30KKwordm9pZCBvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKGludCBsY2gsIGludCBkYXRhX3R5cGUsIGludCBlbGVtX2NvdW50LAorCQkJCSAgaW50IGZyYW1lX2NvdW50LCBpbnQgc3luY19tb2RlKQoreworCXUxNiB3OworCisJdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NEUChsY2gpKTsKKwl3ICY9IH4weDAzOworCXcgfD0gZGF0YV90eXBlOworCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NTRFAobGNoKSk7CisKKwl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DQ1IobGNoKSk7CisJdyAmPSB+KDEgPDwgNSk7CisJaWYgKHN5bmNfbW9kZSA9PSBPTUFQX0RNQV9TWU5DX0ZSQU1FKQorCQl3IHw9IDEgPDwgNTsKKwlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DQ1IobGNoKSk7CisKKwl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DQ1IyKGxjaCkpOworCXcgJj0gfigxIDw8IDIpOworCWlmIChzeW5jX21vZGUgPT0gT01BUF9ETUFfU1lOQ19CTE9DSykKKwkJdyB8PSAxIDw8IDI7CisJb21hcF93cml0ZXcodywgT01BUF9ETUFfQ0NSMihsY2gpKTsKKworCW9tYXBfd3JpdGV3KGVsZW1fY291bnQsIE9NQVBfRE1BX0NFTihsY2gpKTsKKwlvbWFwX3dyaXRldyhmcmFtZV9jb3VudCwgT01BUF9ETUFfQ0ZOKGxjaCkpOworCit9Cit2b2lkIG9tYXBfc2V0X2RtYV9jb2xvcl9tb2RlKGludCBsY2gsIGVudW0gb21hcF9kbWFfY29sb3JfbW9kZSBtb2RlLCB1MzIgY29sb3IpCit7CisJdTE2IHc7CisKKwlCVUdfT04ob21hcF9kbWFfaW5fMTUxMF9tb2RlKCkpOworCisJdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ0NSMihsY2gpKSAmIH4weDAzOworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgT01BUF9ETUFfQ09OU1RBTlRfRklMTDoKKwkJdyB8PSAweDAxOworCQlicmVhazsKKwljYXNlIE9NQVBfRE1BX1RSQU5TUEFSRU5UX0NPUFk6CisJCXcgfD0gMHgwMjsKKwkJYnJlYWs7CisJY2FzZSBPTUFQX0RNQV9DT0xPUl9ESVM6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DQ1IyKGxjaCkpOworCisJdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfTENIX0NUUkwobGNoKSkgJiB+MHgwZjsKKwkvKiBEZWZhdWx0IGlzIGNoYW5uZWwgdHlwZSAyRCAqLworCWlmIChtb2RlKSB7CisJCW9tYXBfd3JpdGV3KCh1MTYpY29sb3IsIE9NQVBfRE1BX0NPTE9SX0wobGNoKSk7CisJCW9tYXBfd3JpdGV3KCh1MTYpKGNvbG9yID4+IDE2KSwgT01BUF9ETUFfQ09MT1JfVShsY2gpKTsKKwkJdyB8PSAxOwkJLyogQ2hhbm5lbCB0eXBlIEcgKi8KKwl9CisJb21hcF93cml0ZXcodywgT01BUF9ETUFfTENIX0NUUkwobGNoKSk7Cit9CisKKwordm9pZCBvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhpbnQgbGNoLCBpbnQgc3JjX3BvcnQsIGludCBzcmNfYW1vZGUsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0KQoreworCXUxNiB3OworCisJdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NEUChsY2gpKTsKKwl3ICY9IH4oMHgxZiA8PCAyKTsKKwl3IHw9IHNyY19wb3J0IDw8IDI7CisJb21hcF93cml0ZXcodywgT01BUF9ETUFfQ1NEUChsY2gpKTsKKworCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUihsY2gpKTsKKwl3ICY9IH4oMHgwMyA8PCAxMik7CisJdyB8PSBzcmNfYW1vZGUgPDwgMTI7CisJb21hcF93cml0ZXcodywgT01BUF9ETUFfQ0NSKGxjaCkpOworCisJb21hcF93cml0ZXcoc3JjX3N0YXJ0ID4+IDE2LCBPTUFQX0RNQV9DU1NBX1UobGNoKSk7CisJb21hcF93cml0ZXcoc3JjX3N0YXJ0LCBPTUFQX0RNQV9DU1NBX0wobGNoKSk7Cit9CisKK3ZvaWQgb21hcF9zZXRfZG1hX3NyY19pbmRleChpbnQgbGNoLCBpbnQgZWlkeCwgaW50IGZpZHgpCit7CisJb21hcF93cml0ZXcoZWlkeCwgT01BUF9ETUFfQ1NFSShsY2gpKTsKKwlvbWFwX3dyaXRldyhmaWR4LCBPTUFQX0RNQV9DU0ZJKGxjaCkpOworfQorCit2b2lkIG9tYXBfc2V0X2RtYV9zcmNfZGF0YV9wYWNrKGludCBsY2gsIGludCBlbmFibGUpCit7CisJdTE2IHc7CisKKwl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DU0RQKGxjaCkpICYgfigxIDw8IDYpOworCXcgfD0gZW5hYmxlID8gKDEgPDwgNikgOiAwOworCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NTRFAobGNoKSk7Cit9CisKK3ZvaWQgb21hcF9zZXRfZG1hX3NyY19idXJzdF9tb2RlKGludCBsY2gsIGVudW0gb21hcF9kbWFfYnVyc3RfbW9kZSBidXJzdF9tb2RlKQoreworCXUxNiB3OworCisJdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NEUChsY2gpKSAmIH4oMHgwMyA8PCA3KTsKKwlzd2l0Y2ggKGJ1cnN0X21vZGUpIHsKKwljYXNlIE9NQVBfRE1BX0RBVEFfQlVSU1RfRElTOgorCQlicmVhazsKKwljYXNlIE9NQVBfRE1BX0RBVEFfQlVSU1RfNDoKKwkJdyB8PSAoMHgwMSA8PCA3KTsKKwkJYnJlYWs7CisJY2FzZSBPTUFQX0RNQV9EQVRBX0JVUlNUXzg6CisJCS8qIG5vdCBzdXBwb3J0ZWQgYnkgY3VycmVudCBoYXJkd2FyZQorCQkgKiB3IHw9ICgweDAzIDw8IDcpOworCQkgKiBmYWxsIHRocm91Z2gKKwkJICovCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NTRFAobGNoKSk7Cit9CisKK3ZvaWQgb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGludCBsY2gsIGludCBkZXN0X3BvcnQsIGludCBkZXN0X2Ftb2RlLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBkZXN0X3N0YXJ0KQoreworCXUxNiB3OworCisJdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NEUChsY2gpKTsKKwl3ICY9IH4oMHgxZiA8PCA5KTsKKwl3IHw9IGRlc3RfcG9ydCA8PCA5OworCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NTRFAobGNoKSk7CisKKwl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DQ1IobGNoKSk7CisJdyAmPSB+KDB4MDMgPDwgMTQpOworCXcgfD0gZGVzdF9hbW9kZSA8PCAxNDsKKwlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DQ1IobGNoKSk7CisKKwlvbWFwX3dyaXRldyhkZXN0X3N0YXJ0ID4+IDE2LCBPTUFQX0RNQV9DRFNBX1UobGNoKSk7CisJb21hcF93cml0ZXcoZGVzdF9zdGFydCwgT01BUF9ETUFfQ0RTQV9MKGxjaCkpOworfQorCit2b2lkIG9tYXBfc2V0X2RtYV9kZXN0X2luZGV4KGludCBsY2gsIGludCBlaWR4LCBpbnQgZmlkeCkKK3sKKwlvbWFwX3dyaXRldyhlaWR4LCBPTUFQX0RNQV9DREVJKGxjaCkpOworCW9tYXBfd3JpdGV3KGZpZHgsIE9NQVBfRE1BX0NERkkobGNoKSk7Cit9CisKK3ZvaWQgb21hcF9zZXRfZG1hX2Rlc3RfZGF0YV9wYWNrKGludCBsY2gsIGludCBlbmFibGUpCit7CisJdTE2IHc7CisKKwl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DU0RQKGxjaCkpICYgfigxIDw8IDEzKTsKKwl3IHw9IGVuYWJsZSA/ICgxIDw8IDEzKSA6IDA7CisJb21hcF93cml0ZXcodywgT01BUF9ETUFfQ1NEUChsY2gpKTsKK30KKwordm9pZCBvbWFwX3NldF9kbWFfZGVzdF9idXJzdF9tb2RlKGludCBsY2gsIGVudW0gb21hcF9kbWFfYnVyc3RfbW9kZSBidXJzdF9tb2RlKQoreworCXUxNiB3OworCisJdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NEUChsY2gpKSAmIH4oMHgwMyA8PCAxNCk7CisJc3dpdGNoIChidXJzdF9tb2RlKSB7CisJY2FzZSBPTUFQX0RNQV9EQVRBX0JVUlNUX0RJUzoKKwkJYnJlYWs7CisJY2FzZSBPTUFQX0RNQV9EQVRBX0JVUlNUXzQ6CisJCXcgfD0gKDB4MDEgPDwgMTQpOworCQlicmVhazsKKwljYXNlIE9NQVBfRE1BX0RBVEFfQlVSU1RfODoKKwkJdyB8PSAoMHgwMyA8PCAxNCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBETUEgYnVyc3QgbW9kZVxuIik7CisJCUJVRygpOworCQlyZXR1cm47CisJfQorCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NTRFAobGNoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2ludHIoaW50IGxjaCkKK3sKKwl1MTYgdzsKKworCS8qIFJlYWQgQ1NSIHRvIG1ha2Ugc3VyZSBpdCdzIGNsZWFyZWQuICovCisJdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NSKGxjaCkpOworCS8qIEVuYWJsZSBzb21lIG5pY2UgaW50ZXJydXB0cy4gKi8KKwlvbWFwX3dyaXRldyhkbWFfY2hhbltsY2hdLmVuYWJsZWRfaXJxcywgT01BUF9ETUFfQ0lDUihsY2gpKTsKKwlkbWFfY2hhbltsY2hdLmZsYWdzIHw9IE9NQVBfRE1BX0FDVElWRTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9sbmsoaW50IGxjaCkKK3sKKwl1MTYgdzsKKworCS8qIENsZWFyIHRoZSBTVE9QX0xOSyBiaXRzICovCisJdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ0xOS19DVFJMKGxjaCkpOworCXcgJj0gfigxIDw8IDE0KTsKKwlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DTE5LX0NUUkwobGNoKSk7CisKKwkvKiBBbmQgc2V0IHRoZSBFTkFCTEVfTE5LIGJpdHMgKi8KKwlpZiAoZG1hX2NoYW5bbGNoXS5uZXh0X2xjaCAhPSAtMSkKKwkJb21hcF93cml0ZXcoZG1hX2NoYW5bbGNoXS5uZXh0X2xjaCB8ICgxIDw8IDE1KSwKKwkJCSAgICBPTUFQX0RNQV9DTE5LX0NUUkwobGNoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2xuayhpbnQgbGNoKQoreworCXUxNiB3OworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJb21hcF93cml0ZXcoMCwgT01BUF9ETUFfQ0lDUihsY2gpKTsKKworCS8qIFNldCB0aGUgU1RPUF9MTksgYml0ICovCisJdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ0xOS19DVFJMKGxjaCkpOworCXcgfD0gKDEgPDwgMTQpOworCXcgPSBvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DTE5LX0NUUkwobGNoKSk7CisKKwlkbWFfY2hhbltsY2hdLmZsYWdzICY9IH5PTUFQX0RNQV9BQ1RJVkU7Cit9CisKK3ZvaWQgb21hcF9zdGFydF9kbWEoaW50IGxjaCkKK3sKKwl1MTYgdzsKKworCWlmICghb21hcF9kbWFfaW5fMTUxMF9tb2RlKCkgJiYgZG1hX2NoYW5bbGNoXS5uZXh0X2xjaCAhPSAtMSkgeworCQlpbnQgbmV4dF9sY2gsIGN1cl9sY2g7CisJCWNoYXIgZG1hX2NoYW5fbGlua19tYXBbT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVF07CisKKwkJZG1hX2NoYW5fbGlua19tYXBbbGNoXSA9IDE7CisJCS8qIFNldCB0aGUgbGluayByZWdpc3RlciBvZiB0aGUgZmlyc3QgY2hhbm5lbCAqLworCQllbmFibGVfbG5rKGxjaCk7CisKKwkJbWVtc2V0KGRtYV9jaGFuX2xpbmtfbWFwLCAwLCBzaXplb2YoZG1hX2NoYW5fbGlua19tYXApKTsKKwkJY3VyX2xjaCA9IGRtYV9jaGFuW2xjaF0ubmV4dF9sY2g7CisJCWRvIHsKKwkJCW5leHRfbGNoID0gZG1hX2NoYW5bY3VyX2xjaF0ubmV4dF9sY2g7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBsb29wIGNhc2U6IHdlJ3ZlIGJlZW4gaGVyZSBhbHJlYWR5ICovCisJCQlpZiAoZG1hX2NoYW5fbGlua19tYXBbY3VyX2xjaF0pCisJCQkJYnJlYWs7CisJCQkvKiBNYXJrIHRoZSBjdXJyZW50IGNoYW5uZWwgKi8KKwkJCWRtYV9jaGFuX2xpbmtfbWFwW2N1cl9sY2hdID0gMTsKKworCQkJZW5hYmxlX2xuayhjdXJfbGNoKTsKKwkJCWluaXRfaW50cihjdXJfbGNoKTsKKworCQkJY3VyX2xjaCA9IG5leHRfbGNoOworCQl9IHdoaWxlIChuZXh0X2xjaCAhPSAtMSk7CisJfQorCisJaW5pdF9pbnRyKGxjaCk7CisKKwl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DQ1IobGNoKSk7CisJdyB8PSBPTUFQX0RNQV9DQ1JfRU47CisJb21hcF93cml0ZXcodywgT01BUF9ETUFfQ0NSKGxjaCkpOworCWRtYV9jaGFuW2xjaF0uZmxhZ3MgfD0gT01BUF9ETUFfQUNUSVZFOworfQorCit2b2lkIG9tYXBfc3RvcF9kbWEoaW50IGxjaCkKK3sKKwl1MTYgdzsKKworCWlmICghb21hcF9kbWFfaW5fMTUxMF9tb2RlKCkgJiYgZG1hX2NoYW5bbGNoXS5uZXh0X2xjaCAhPSAtMSkgeworCQlpbnQgbmV4dF9sY2gsIGN1cl9sY2ggPSBsY2g7CisJCWNoYXIgZG1hX2NoYW5fbGlua19tYXBbT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVF07CisKKwkJbWVtc2V0KGRtYV9jaGFuX2xpbmtfbWFwLCAwLCBzaXplb2YoZG1hX2NoYW5fbGlua19tYXApKTsKKwkJZG8geworCQkJLyogVGhlIGxvb3AgY2FzZTogd2UndmUgYmVlbiBoZXJlIGFscmVhZHkgKi8KKwkJCWlmIChkbWFfY2hhbl9saW5rX21hcFtjdXJfbGNoXSkKKwkJCQlicmVhazsKKwkJCS8qIE1hcmsgdGhlIGN1cnJlbnQgY2hhbm5lbCAqLworCQkJZG1hX2NoYW5fbGlua19tYXBbY3VyX2xjaF0gPSAxOworCisJCQlkaXNhYmxlX2xuayhjdXJfbGNoKTsKKworCQkJbmV4dF9sY2ggPSBkbWFfY2hhbltjdXJfbGNoXS5uZXh0X2xjaDsKKwkJCWN1cl9sY2ggPSBuZXh0X2xjaDsKKwkJfSB3aGlsZSAobmV4dF9sY2ggIT0gLTEpOworCisJCXJldHVybjsKKwl9CisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBvbiB0aGUgY2hhbm5lbCAqLworCW9tYXBfd3JpdGV3KDAsIE9NQVBfRE1BX0NJQ1IobGNoKSk7CisKKwl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DQ1IobGNoKSk7CisJdyAmPSB+T01BUF9ETUFfQ0NSX0VOOworCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NDUihsY2gpKTsKKwlkbWFfY2hhbltsY2hdLmZsYWdzICY9IH5PTUFQX0RNQV9BQ1RJVkU7Cit9CisKK3ZvaWQgb21hcF9lbmFibGVfZG1hX2lycShpbnQgbGNoLCB1MTYgYml0cykKK3sKKwlkbWFfY2hhbltsY2hdLmVuYWJsZWRfaXJxcyB8PSBiaXRzOworfQorCit2b2lkIG9tYXBfZGlzYWJsZV9kbWFfaXJxKGludCBsY2gsIHUxNiBiaXRzKQoreworCWRtYV9jaGFuW2xjaF0uZW5hYmxlZF9pcnFzICY9IH5iaXRzOworfQorCitzdGF0aWMgaW50IGRtYV9oYW5kbGVfY2goaW50IGNoKQoreworCXUxNiBjc3I7CisKKwlpZiAoZW5hYmxlXzE1MTBfbW9kZSAmJiBjaCA+PSA2KSB7CisJCWNzciA9IGRtYV9jaGFuW2NoXS5zYXZlZF9jc3I7CisJCWRtYV9jaGFuW2NoXS5zYXZlZF9jc3IgPSAwOworCX0gZWxzZQorCQljc3IgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTUihjaCkpOworCWlmIChlbmFibGVfMTUxMF9tb2RlICYmIGNoIDw9IDIgJiYgKGNzciA+PiA3KSAhPSAwKSB7CisJCWRtYV9jaGFuW2NoICsgNl0uc2F2ZWRfY3NyID0gY3NyID4+IDc7CisJCWNzciAmPSAweDdmOworCX0KKwlpZiAoIWNzcikKKwkJcmV0dXJuIDA7CisJaWYgKHVubGlrZWx5KGRtYV9jaGFuW2NoXS5kZXZfaWQgPT0gLTEpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNwdXJpb3VzIGludGVycnVwdCBmcm9tIERNQSBjaGFubmVsICVkIChDU1IgJTA0eClcbiIsCisJCSAgICAgICBjaCwgY3NyKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICh1bmxpa2VseShjc3IgJiBPTUFQX0RNQV9UT1VUX0lSUSkpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRNQSB0aW1lb3V0IHdpdGggZGV2aWNlICVkXG4iLCBkbWFfY2hhbltjaF0uZGV2X2lkKTsKKwlpZiAodW5saWtlbHkoY3NyICYgT01BUF9ETUFfRFJPUF9JUlEpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJETUEgc3luY2hyb25pemF0aW9uIGV2ZW50IGRyb3Agb2NjdXJyZWQgd2l0aCBkZXZpY2UgJWRcbiIsCisJCSAgICAgICBkbWFfY2hhbltjaF0uZGV2X2lkKTsKKwlpZiAobGlrZWx5KGNzciAmIE9NQVBfRE1BX0JMT0NLX0lSUSkpCisJCWRtYV9jaGFuW2NoXS5mbGFncyAmPSB+T01BUF9ETUFfQUNUSVZFOworCWlmIChsaWtlbHkoZG1hX2NoYW5bY2hdLmNhbGxiYWNrICE9IE5VTEwpKQorCQlkbWFfY2hhbltjaF0uY2FsbGJhY2soY2gsIGNzciwgZG1hX2NoYW5bY2hdLmRhdGEpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGNoID0gKChpbnQpIGRldl9pZCkgLSAxOworCWludCBoYW5kbGVkID0gMDsKKworCWZvciAoOzspIHsKKwkJaW50IGhhbmRsZWRfbm93ID0gMDsKKworCQloYW5kbGVkX25vdyArPSBkbWFfaGFuZGxlX2NoKGNoKTsKKwkJaWYgKGVuYWJsZV8xNTEwX21vZGUgJiYgZG1hX2NoYW5bY2ggKyA2XS5zYXZlZF9jc3IpCisJCQloYW5kbGVkX25vdyArPSBkbWFfaGFuZGxlX2NoKGNoICsgNik7CisJCWlmICghaGFuZGxlZF9ub3cpCisJCQlicmVhazsKKwkJaGFuZGxlZCArPSBoYW5kbGVkX25vdzsKKwl9CisKKwlyZXR1cm4gaGFuZGxlZCA/IElSUV9IQU5ETEVEIDogSVJRX05PTkU7Cit9CisKK2ludCBvbWFwX3JlcXVlc3RfZG1hKGludCBkZXZfaWQsIGNvbnN0IGNoYXIgKmRldl9uYW1lLAorCQkgICAgIHZvaWQgKCogY2FsbGJhY2spKGludCBsY2gsIHUxNiBjaF9zdGF0dXMsIHZvaWQgKmRhdGEpLAorCQkgICAgIHZvaWQgKmRhdGEsIGludCAqZG1hX2NoX291dCkKK3sKKwlpbnQgY2gsIGZyZWVfY2ggPSAtMTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBvbWFwX2RtYV9sY2ggKmNoYW47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hX2NoYW5fbG9jaywgZmxhZ3MpOworCWZvciAoY2ggPSAwOyBjaCA8IGRtYV9jaGFuX2NvdW50OyBjaCsrKSB7CisJCWlmIChmcmVlX2NoID09IC0xICYmIGRtYV9jaGFuW2NoXS5kZXZfaWQgPT0gLTEpIHsKKwkJCWZyZWVfY2ggPSBjaDsKKwkJCWlmIChkZXZfaWQgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoZnJlZV9jaCA9PSAtMSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfY2hhbl9sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWNoYW4gPSBkbWFfY2hhbiArIGZyZWVfY2g7CisJY2hhbi0+ZGV2X2lkID0gZGV2X2lkOworCWNsZWFyX2xjaF9yZWdzKGZyZWVfY2gpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKKworCWNoYW4tPmRldl9pZCA9IGRldl9pZDsKKwljaGFuLT5kZXZfbmFtZSA9IGRldl9uYW1lOworCWNoYW4tPmNhbGxiYWNrID0gY2FsbGJhY2s7CisJY2hhbi0+ZGF0YSA9IGRhdGE7CisJY2hhbi0+ZW5hYmxlZF9pcnFzID0gT01BUF9ETUFfVE9VVF9JUlEgfCBPTUFQX0RNQV9EUk9QX0lSUSB8IE9NQVBfRE1BX0JMT0NLX0lSUTsKKworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQkvKiBJZiB0aGUgc3luYyBkZXZpY2UgaXMgc2V0LCBjb25maWd1cmUgaXQgZHluYW1pY2FsbHkuICovCisJCWlmIChkZXZfaWQgIT0gMCkgeworCQkJc2V0X2dkbWFfZGV2KGZyZWVfY2ggKyAxLCBkZXZfaWQpOworCQkJZGV2X2lkID0gZnJlZV9jaCArIDE7CisJCX0KKwkJLyogRGlzYWJsZSB0aGUgMTUxMCBjb21wYXRpYmlsaXR5IG1vZGUgYW5kIHNldCB0aGUgc3luYyBkZXZpY2UKKwkJICogaWQuICovCisJCW9tYXBfd3JpdGV3KGRldl9pZCB8ICgxIDw8IDEwKSwgT01BUF9ETUFfQ0NSKGZyZWVfY2gpKTsKKwl9IGVsc2UgeworCQlvbWFwX3dyaXRldyhkZXZfaWQsIE9NQVBfRE1BX0NDUihmcmVlX2NoKSk7CisJfQorCSpkbWFfY2hfb3V0ID0gZnJlZV9jaDsKKworCXJldHVybiAwOworfQorCit2b2lkIG9tYXBfZnJlZV9kbWEoaW50IGNoKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hX2NoYW5fbG9jaywgZmxhZ3MpOworCWlmIChkbWFfY2hhbltjaF0uZGV2X2lkID09IC0xKSB7CisJCXByaW50aygib21hcF9kbWE6IHRyeWluZyB0byBmcmVlIG5vbmFsbG9jYXRlZCBETUEgY2hhbm5lbCAlZFxuIiwgY2gpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfY2hhbl9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisJZG1hX2NoYW5bY2hdLmRldl9pZCA9IC0xOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKKworCS8qIERpc2FibGUgYWxsIERNQSBpbnRlcnJ1cHRzIGZvciB0aGUgY2hhbm5lbC4gKi8KKwlvbWFwX3dyaXRldygwLCBPTUFQX0RNQV9DSUNSKGNoKSk7CisJLyogTWFrZSBzdXJlIHRoZSBETUEgdHJhbnNmZXIgaXMgc3RvcHBlZC4gKi8KKwlvbWFwX3dyaXRldygwLCBPTUFQX0RNQV9DQ1IoY2gpKTsKK30KKworaW50IG9tYXBfZG1hX2luXzE1MTBfbW9kZSh2b2lkKQoreworCXJldHVybiBlbmFibGVfMTUxMF9tb2RlOworfQorCisvKgorICogbGNoX3F1ZXVlIERNQSB3aWxsIHN0YXJ0IHJpZ2h0IGFmdGVyIGxjaF9oZWFkIG9uZSBpcyBmaW5pc2hlZC4KKyAqIEZvciB0aGlzIERNQSBsaW5rIHRvIHN0YXJ0LCB5b3Ugc3RpbGwgbmVlZCB0byBzdGFydCAoc2VlIG9tYXBfc3RhcnRfZG1hKQorICogdGhlIGZpcnN0IG9uZS4gVGhhdCB3aWxsIGZpcmUgdXAgdGhlIGVudGlyZSBxdWV1ZS4KKyAqLwordm9pZCBvbWFwX2RtYV9saW5rX2xjaCAoaW50IGxjaF9oZWFkLCBpbnQgbGNoX3F1ZXVlKQoreworCWlmIChvbWFwX2RtYV9pbl8xNTEwX21vZGUoKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkRNQSBsaW5raW5nIGlzIG5vdCBzdXBwb3J0ZWQgaW4gMTUxMCBtb2RlXG4iKTsKKwkJQlVHKCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKGRtYV9jaGFuW2xjaF9oZWFkXS5kZXZfaWQgPT0gLTEpIHx8CisJICAgIChkbWFfY2hhbltsY2hfcXVldWVdLmRldl9pZCA9PSAtMSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJvbWFwX2RtYTogdHJ5aW5nIHRvIGxpbmsgbm9uIHJlcXVlc3RlZCBjaGFubmVsc1xuIik7CisJCWR1bXBfc3RhY2soKTsKKwl9CisKKwlkbWFfY2hhbltsY2hfaGVhZF0ubmV4dF9sY2ggPSBsY2hfcXVldWU7Cit9CisKKy8qCisgKiBPbmNlIHRoZSBETUEgcXVldWUgaXMgc3RvcHBlZCwgd2UgY2FuIGRlc3Ryb3kgaXQuCisgKi8KK3ZvaWQgb21hcF9kbWFfdW5saW5rX2xjaCAoaW50IGxjaF9oZWFkLCBpbnQgbGNoX3F1ZXVlKQoreworCWlmIChvbWFwX2RtYV9pbl8xNTEwX21vZGUoKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkRNQSBsaW5raW5nIGlzIG5vdCBzdXBwb3J0ZWQgaW4gMTUxMCBtb2RlXG4iKTsKKwkJQlVHKCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZG1hX2NoYW5bbGNoX2hlYWRdLm5leHRfbGNoICE9IGxjaF9xdWV1ZSB8fAorCSAgICBkbWFfY2hhbltsY2hfaGVhZF0ubmV4dF9sY2ggPT0gLTEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJvbWFwX2RtYTogdHJ5aW5nIHRvIHVubGluayBub24gbGlua2VkIGNoYW5uZWxzXG4iKTsKKwkJZHVtcF9zdGFjaygpOworCX0KKworCisJaWYgKChkbWFfY2hhbltsY2hfaGVhZF0uZmxhZ3MgJiBPTUFQX0RNQV9BQ1RJVkUpIHx8CisJICAgIChkbWFfY2hhbltsY2hfaGVhZF0uZmxhZ3MgJiBPTUFQX0RNQV9BQ1RJVkUpKSB7CisJCXByaW50ayhLRVJOX0VSUiAib21hcF9kbWE6IFlvdSBuZWVkIHRvIHN0b3AgdGhlIERNQSBjaGFubmVscyBiZWZvcmUgdW5saW5raW5nXG4iKTsKKwkJZHVtcF9zdGFjaygpOworCX0KKworCWRtYV9jaGFuW2xjaF9oZWFkXS5uZXh0X2xjaCA9IC0xOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgbGNkX2RtYV9pbmZvIHsKKwlzcGlubG9ja190IGxvY2s7CisJaW50IHJlc2VydmVkOworCXZvaWQgKCogY2FsbGJhY2spKHUxNiBzdGF0dXMsIHZvaWQgKmRhdGEpOworCXZvaWQgKmNiX2RhdGE7CisKKwlpbnQgYWN0aXZlOworCXVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZTsKKwlpbnQgcm90YXRlLCBkYXRhX3R5cGUsIHhyZXMsIHlyZXM7CisJaW50IHZ4cmVzOworCWludCBtaXJyb3I7CisJaW50IHhzY2FsZSwgeXNjYWxlOworCWludCBleHRfY3RybDsKKwlpbnQgc3JjX3BvcnQ7CisJaW50IHNpbmdsZV90cmFuc2ZlcjsKK30gbGNkX2RtYTsKKwordm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxKHVuc2lnbmVkIGxvbmcgYWRkciwgdTE2IGZiX3hyZXMsIHUxNiBmYl95cmVzLAorCQkJIGludCBkYXRhX3R5cGUpCit7CisJbGNkX2RtYS5hZGRyID0gYWRkcjsKKwlsY2RfZG1hLmRhdGFfdHlwZSA9IGRhdGFfdHlwZTsKKwlsY2RfZG1hLnhyZXMgPSBmYl94cmVzOworCWxjZF9kbWEueXJlcyA9IGZiX3lyZXM7Cit9CisKK3ZvaWQgb21hcF9zZXRfbGNkX2RtYV9zcmNfcG9ydChpbnQgcG9ydCkKK3sKKwlsY2RfZG1hLnNyY19wb3J0ID0gcG9ydDsKK30KKwordm9pZCBvbWFwX3NldF9sY2RfZG1hX2V4dF9jb250cm9sbGVyKGludCBleHRlcm5hbCkKK3sKKwlsY2RfZG1hLmV4dF9jdHJsID0gZXh0ZXJuYWw7Cit9CisKK3ZvaWQgb21hcF9zZXRfbGNkX2RtYV9zaW5nbGVfdHJhbnNmZXIoaW50IHNpbmdsZSkKK3sKKwlsY2RfZG1hLnNpbmdsZV90cmFuc2ZlciA9IHNpbmdsZTsKK30KKworCit2b2lkIG9tYXBfc2V0X2xjZF9kbWFfYjFfcm90YXRpb24oaW50IHJvdGF0ZSkKK3sKKwlpZiAob21hcF9kbWFfaW5fMTUxMF9tb2RlKCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJETUEgcm90YXRpb24gaXMgbm90IHN1cHBvcnRlZCBpbiAxNTEwIG1vZGVcbiIpOworCQlCVUcoKTsKKwkJcmV0dXJuOworCX0KKwlsY2RfZG1hLnJvdGF0ZSA9IHJvdGF0ZTsKK30KKwordm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX21pcnJvcihpbnQgbWlycm9yKQoreworCWlmIChvbWFwX2RtYV9pbl8xNTEwX21vZGUoKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkRNQSBtaXJyb3IgaXMgbm90IHN1cHBvcnRlZCBpbiAxNTEwIG1vZGVcbiIpOworCQlCVUcoKTsKKwl9CisJbGNkX2RtYS5taXJyb3IgPSBtaXJyb3I7Cit9CisKK3ZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV92eHJlcyh1bnNpZ25lZCBsb25nIHZ4cmVzKQoreworCWlmIChvbWFwX2RtYV9pbl8xNTEwX21vZGUoKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkRNQSB2aXJ0dWFsIHJlc3Vsb3Rpb24gaXMgbm90IHN1cHBvcnRlZCAiCisJCQkJImluIDE1MTAgbW9kZVxuIik7CisJCUJVRygpOworCX0KKwlsY2RfZG1hLnZ4cmVzID0gdnhyZXM7Cit9CisKK3ZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV9zY2FsZSh1bnNpZ25lZCBpbnQgeHNjYWxlLCB1bnNpZ25lZCBpbnQgeXNjYWxlKQoreworCWlmIChvbWFwX2RtYV9pbl8xNTEwX21vZGUoKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkRNQSBzY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGluIDE1MTAgbW9kZVxuIik7CisJCUJVRygpOworCX0KKwlsY2RfZG1hLnhzY2FsZSA9IHhzY2FsZTsKKwlsY2RfZG1hLnlzY2FsZSA9IHlzY2FsZTsKK30KKworc3RhdGljIHZvaWQgc2V0X2IxX3JlZ3Modm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRvcCwgYm90dG9tOworCWludCBlczsKKwl1MTYgdzsKKwl1bnNpZ25lZCBsb25nIGVuLCBmbjsKKwlsb25nIGVpLCBmaTsKKwl1bnNpZ25lZCBsb25nIHZ4cmVzOworCXVuc2lnbmVkIGludCB4c2NhbGUsIHlzY2FsZTsKKworCXN3aXRjaCAobGNkX2RtYS5kYXRhX3R5cGUpIHsKKwljYXNlIE9NQVBfRE1BX0RBVEFfVFlQRV9TODoKKwkJZXMgPSAxOworCQlicmVhazsKKwljYXNlIE9NQVBfRE1BX0RBVEFfVFlQRV9TMTY6CisJCWVzID0gMjsKKwkJYnJlYWs7CisJY2FzZSBPTUFQX0RNQV9EQVRBX1RZUEVfUzMyOgorCQllcyA9IDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm47CisJfQorCisJdnhyZXMgPSBsY2RfZG1hLnZ4cmVzID8gbGNkX2RtYS52eHJlcyA6IGxjZF9kbWEueHJlczsKKwl4c2NhbGUgPSBsY2RfZG1hLnhzY2FsZSA/IGxjZF9kbWEueHNjYWxlIDogMTsKKwl5c2NhbGUgPSBsY2RfZG1hLnlzY2FsZSA/IGxjZF9kbWEueXNjYWxlIDogMTsKKwlCVUdfT04odnhyZXMgPCBsY2RfZG1hLnhyZXMpOworI2RlZmluZSBQSVhBRERSKHgseSkgKGxjZF9kbWEuYWRkciArICgoeSkgKiB2eHJlcyAqIHlzY2FsZSArICh4KSAqIHhzY2FsZSkgKiBlcykKKyNkZWZpbmUgUElYU1RFUChzeCwgc3ksIGR4LCBkeSkgKFBJWEFERFIoZHgsIGR5KSAtIFBJWEFERFIoc3gsIHN5KSAtIGVzICsgMSkKKwlzd2l0Y2ggKGxjZF9kbWEucm90YXRlKSB7CisJY2FzZSAwOgorCQlpZiAoIWxjZF9kbWEubWlycm9yKSB7CisJCQl0b3AgPSBQSVhBRERSKDAsIDApOworCQkJYm90dG9tID0gUElYQUREUihsY2RfZG1hLnhyZXMgLSAxLCBsY2RfZG1hLnlyZXMgLSAxKTsKKwkJCS8qIDE1MTAgRE1BIHJlcXVpcmVzIHRoZSBib3R0b20gYWRkcmVzcyB0byBiZSAyIG1vcmUKKwkJCSAqIHRoYW4gdGhlIGFjdHVhbCBsYXN0IG1lbW9yeSBhY2Nlc3MgbG9jYXRpb24uICovCisJCQlpZiAob21hcF9kbWFfaW5fMTUxMF9tb2RlKCkgJiYKKwkJCSAgICBsY2RfZG1hLmRhdGFfdHlwZSA9PSBPTUFQX0RNQV9EQVRBX1RZUEVfUzMyKQorCQkJCWJvdHRvbSArPSAyOworCQkJZWkgPSBQSVhTVEVQKDAsIDAsIDEsIDApOworCQkJZmkgPSBQSVhTVEVQKGxjZF9kbWEueHJlcyAtIDEsIDAsIDAsIDEpOworCQl9IGVsc2UgeworCQkJdG9wID0gUElYQUREUihsY2RfZG1hLnhyZXMgLSAxLCAwKTsKKwkJCWJvdHRvbSA9IFBJWEFERFIoMCwgbGNkX2RtYS55cmVzIC0gMSk7CisJCQllaSA9IFBJWFNURVAoMSwgMCwgMCwgMCk7CisJCQlmaSA9IFBJWFNURVAoMCwgMCwgbGNkX2RtYS54cmVzIC0gMSwgMSk7CisJCX0KKwkJZW4gPSBsY2RfZG1hLnhyZXM7CisJCWZuID0gbGNkX2RtYS55cmVzOworCQlicmVhazsKKwljYXNlIDkwOgorCQlpZiAoIWxjZF9kbWEubWlycm9yKSB7CisJCQl0b3AgPSBQSVhBRERSKDAsIGxjZF9kbWEueXJlcyAtIDEpOworCQkJYm90dG9tID0gUElYQUREUihsY2RfZG1hLnhyZXMgLSAxLCAwKTsKKwkJCWVpID0gUElYU1RFUCgwLCAxLCAwLCAwKTsKKwkJCWZpID0gUElYU1RFUCgwLCAwLCAxLCBsY2RfZG1hLnlyZXMgLSAxKTsKKwkJfSBlbHNlIHsKKwkJCXRvcCA9IFBJWEFERFIobGNkX2RtYS54cmVzIC0gMSwgbGNkX2RtYS55cmVzIC0gMSk7CisJCQlib3R0b20gPSBQSVhBRERSKDAsIDApOworCQkJZWkgPSBQSVhTVEVQKDAsIDEsIDAsIDApOworCQkJZmkgPSBQSVhTVEVQKDEsIDAsIDAsIGxjZF9kbWEueXJlcyAtIDEpOworCQl9CisJCWVuID0gbGNkX2RtYS55cmVzOworCQlmbiA9IGxjZF9kbWEueHJlczsKKwkJYnJlYWs7CisJY2FzZSAxODA6CisJCWlmICghbGNkX2RtYS5taXJyb3IpIHsKKwkJCXRvcCA9IFBJWEFERFIobGNkX2RtYS54cmVzIC0gMSwgbGNkX2RtYS55cmVzIC0gMSk7CisJCQlib3R0b20gPSBQSVhBRERSKDAsIDApOworCQkJZWkgPSBQSVhTVEVQKDEsIDAsIDAsIDApOworCQkJZmkgPSBQSVhTVEVQKDAsIDEsIGxjZF9kbWEueHJlcyAtIDEsIDApOworCQl9IGVsc2UgeworCQkJdG9wID0gUElYQUREUigwLCBsY2RfZG1hLnlyZXMgLSAxKTsKKwkJCWJvdHRvbSA9IFBJWEFERFIobGNkX2RtYS54cmVzIC0gMSwgMCk7CisJCQllaSA9IFBJWFNURVAoMCwgMCwgMSwgMCk7CisJCQlmaSA9IFBJWFNURVAobGNkX2RtYS54cmVzIC0gMSwgMSwgMCwgMCk7CisJCX0KKwkJZW4gPSBsY2RfZG1hLnhyZXM7CisJCWZuID0gbGNkX2RtYS55cmVzOworCQlicmVhazsKKwljYXNlIDI3MDoKKwkJaWYgKCFsY2RfZG1hLm1pcnJvcikgeworCQkJdG9wID0gUElYQUREUihsY2RfZG1hLnhyZXMgLSAxLCAwKTsKKwkJCWJvdHRvbSA9IFBJWEFERFIoMCwgbGNkX2RtYS55cmVzIC0gMSk7CisJCQllaSA9IFBJWFNURVAoMCwgMCwgMCwgMSk7CisJCQlmaSA9IFBJWFNURVAoMSwgbGNkX2RtYS55cmVzIC0gMSwgMCwgMCk7CisJCX0gZWxzZSB7CisJCQl0b3AgPSBQSVhBRERSKDAsIDApOworCQkJYm90dG9tID0gUElYQUREUihsY2RfZG1hLnhyZXMgLSAxLCBsY2RfZG1hLnlyZXMgLSAxKTsKKwkJCWVpID0gUElYU1RFUCgwLCAwLCAwLCAxKTsKKwkJCWZpID0gUElYU1RFUCgwLCBsY2RfZG1hLnlyZXMgLSAxLCAxLCAwKTsKKwkJfQorCQllbiA9IGxjZF9kbWEueXJlczsKKwkJZm4gPSBsY2RfZG1hLnhyZXM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm47CS8qIFN1cHJlc3Mgd2FybmluZyBhYm91dCB1bmluaXRpYWxpemVkIHZhcnMgKi8KKwl9CisKKwlpZiAob21hcF9kbWFfaW5fMTUxMF9tb2RlKCkpIHsKKwkJb21hcF93cml0ZXcodG9wID4+IDE2LCBPTUFQMTUxMF9ETUFfTENEX1RPUF9GMV9VKTsKKwkJb21hcF93cml0ZXcodG9wLCBPTUFQMTUxMF9ETUFfTENEX1RPUF9GMV9MKTsKKwkJb21hcF93cml0ZXcoYm90dG9tID4+IDE2LCBPTUFQMTUxMF9ETUFfTENEX0JPVF9GMV9VKTsKKwkJb21hcF93cml0ZXcoYm90dG9tLCBPTUFQMTUxMF9ETUFfTENEX0JPVF9GMV9MKTsKKworCQlyZXR1cm47CisJfQorCisJLyogMTYxMCByZWdzICovCisJb21hcF93cml0ZXcodG9wID4+IDE2LCBPTUFQMTYxMF9ETUFfTENEX1RPUF9CMV9VKTsKKwlvbWFwX3dyaXRldyh0b3AsIE9NQVAxNjEwX0RNQV9MQ0RfVE9QX0IxX0wpOworCW9tYXBfd3JpdGV3KGJvdHRvbSA+PiAxNiwgT01BUDE2MTBfRE1BX0xDRF9CT1RfQjFfVSk7CisJb21hcF93cml0ZXcoYm90dG9tLCBPTUFQMTYxMF9ETUFfTENEX0JPVF9CMV9MKTsKKworCW9tYXBfd3JpdGV3KGVuLCBPTUFQMTYxMF9ETUFfTENEX1NSQ19FTl9CMSk7CisJb21hcF93cml0ZXcoZm4sIE9NQVAxNjEwX0RNQV9MQ0RfU1JDX0ZOX0IxKTsKKworCXcgPSBvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ1NEUCk7CisJdyAmPSB+MHgwMzsKKwl3IHw9IGxjZF9kbWEuZGF0YV90eXBlOworCW9tYXBfd3JpdGV3KHcsIE9NQVAxNjEwX0RNQV9MQ0RfQ1NEUCk7CisKKwl3ID0gb21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NUUkwpOworCS8qIEFsd2F5cyBzZXQgdGhlIHNvdXJjZSBwb3J0IGFzIFNEUkFNIGZvciBub3cqLworCXcgJj0gfigweDAzIDw8IDYpOworCWlmIChsY2RfZG1hLmV4dF9jdHJsKQorCQl3IHw9IDEgPDwgODsKKwllbHNlCisJCXcgJj0gfigxIDw8IDgpOworCWlmIChsY2RfZG1hLmNhbGxiYWNrICE9IE5VTEwpCisJCXcgfD0gMSA8PCAxOyAgICAgICAgICAgIC8qIEJsb2NrIGludGVycnVwdCBlbmFibGUgKi8KKwllbHNlCisJCXcgJj0gfigxIDw8IDEpOworCW9tYXBfd3JpdGV3KHcsIE9NQVAxNjEwX0RNQV9MQ0RfQ1RSTCk7CisKKwlpZiAoIShsY2RfZG1hLnJvdGF0ZSB8fCBsY2RfZG1hLm1pcnJvciB8fAorCSAgICAgIGxjZF9kbWEudnhyZXMgfHwgbGNkX2RtYS54c2NhbGUgfHwgbGNkX2RtYS55c2NhbGUpKQorCQlyZXR1cm47CisKKwl3ID0gb21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUik7CisJLyogU2V0IHRoZSBkb3VibGUtaW5kZXhlZCBhZGRyZXNzaW5nIG1vZGUgKi8KKwl3IHw9ICgweDAzIDw8IDEyKTsKKwlvbWFwX3dyaXRldyh3LCBPTUFQMTYxMF9ETUFfTENEX0NDUik7CisKKwlvbWFwX3dyaXRldyhlaSwgT01BUDE2MTBfRE1BX0xDRF9TUkNfRUlfQjEpOworCW9tYXBfd3JpdGV3KGZpID4+IDE2LCBPTUFQMTYxMF9ETUFfTENEX1NSQ19GSV9CMV9VKTsKKwlvbWFwX3dyaXRldyhmaSwgT01BUDE2MTBfRE1BX0xDRF9TUkNfRklfQjFfTCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBsY2RfZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdTE2IHc7CisKKwl3ID0gb21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NUUkwpOworCWlmICh1bmxpa2VseSghKHcgJiAoMSA8PCAzKSkpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNwdXJpb3VzIExDRCBETUEgSVJRXG4iKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKwkvKiBBY2sgdGhlIElSUSAqLworCXcgfD0gKDEgPDwgMyk7CisJb21hcF93cml0ZXcodywgT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKKwlsY2RfZG1hLmFjdGl2ZSA9IDA7CisJaWYgKGxjZF9kbWEuY2FsbGJhY2sgIT0gTlVMTCkKKwkJbGNkX2RtYS5jYWxsYmFjayh3LCBsY2RfZG1hLmNiX2RhdGEpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitpbnQgb21hcF9yZXF1ZXN0X2xjZF9kbWEodm9pZCAoKiBjYWxsYmFjaykodTE2IHN0YXR1cywgdm9pZCAqZGF0YSksCisJCQkgdm9pZCAqZGF0YSkKK3sKKwlzcGluX2xvY2tfaXJxKCZsY2RfZG1hLmxvY2spOworCWlmIChsY2RfZG1hLnJlc2VydmVkKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmbGNkX2RtYS5sb2NrKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJMQ0QgRE1BIGNoYW5uZWwgYWxyZWFkeSByZXNlcnZlZFxuIik7CisJCUJVRygpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlsY2RfZG1hLnJlc2VydmVkID0gMTsKKwlzcGluX3VubG9ja19pcnEoJmxjZF9kbWEubG9jayk7CisJbGNkX2RtYS5jYWxsYmFjayA9IGNhbGxiYWNrOworCWxjZF9kbWEuY2JfZGF0YSA9IGRhdGE7CisJbGNkX2RtYS5hY3RpdmUgPSAwOworCWxjZF9kbWEuc2luZ2xlX3RyYW5zZmVyID0gMDsKKwlsY2RfZG1hLnJvdGF0ZSA9IDA7CisJbGNkX2RtYS52eHJlcyA9IDA7CisJbGNkX2RtYS5taXJyb3IgPSAwOworCWxjZF9kbWEueHNjYWxlID0gMDsKKwlsY2RfZG1hLnlzY2FsZSA9IDA7CisJbGNkX2RtYS5leHRfY3RybCA9IDA7CisJbGNkX2RtYS5zcmNfcG9ydCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBvbWFwX2ZyZWVfbGNkX2RtYSh2b2lkKQoreworCXNwaW5fbG9jaygmbGNkX2RtYS5sb2NrKTsKKwlpZiAoIWxjZF9kbWEucmVzZXJ2ZWQpIHsKKwkJc3Bpbl91bmxvY2soJmxjZF9kbWEubG9jayk7CisJCXByaW50ayhLRVJOX0VSUiAiTENEIERNQSBpcyBub3QgcmVzZXJ2ZWRcbiIpOworCQlCVUcoKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoIWVuYWJsZV8xNTEwX21vZGUpCisJCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpICYgfjEsIE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKKwlsY2RfZG1hLnJlc2VydmVkID0gMDsKKwlzcGluX3VubG9jaygmbGNkX2RtYS5sb2NrKTsKK30KKwordm9pZCBvbWFwX2VuYWJsZV9sY2RfZG1hKHZvaWQpCit7CisJdTE2IHc7CisKKwkvKiBTZXQgdGhlIEVuYWJsZSBiaXQgb25seSBpZiBhbiBleHRlcm5hbCBjb250cm9sbGVyIGlzCisJICogY29ubmVjdGVkLiBPdGhlcndpc2UgdGhlIE9NQVAgaW50ZXJuYWwgY29udHJvbGxlciB3aWxsCisJICogc3RhcnQgdGhlIHRyYW5zZmVyIHdoZW4gaXQgZ2V0cyBlbmFibGVkLgorCSAqLworCWlmIChlbmFibGVfMTUxMF9tb2RlIHx8ICFsY2RfZG1hLmV4dF9jdHJsKQorCQlyZXR1cm47CisJdyA9IG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpOworCXcgfD0gMSA8PCA3OworCW9tYXBfd3JpdGV3KHcsIE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKKwlsY2RfZG1hLmFjdGl2ZSA9IDE7Cit9CisKK3ZvaWQgb21hcF9zZXR1cF9sY2RfZG1hKHZvaWQpCit7CisJQlVHX09OKGxjZF9kbWEuYWN0aXZlKTsKKwlpZiAoIWVuYWJsZV8xNTEwX21vZGUpIHsKKwkJLyogU2V0IHNvbWUgcmVhc29uYWJsZSBkZWZhdWx0cyAqLworCQlvbWFwX3dyaXRldygweDU0NDAsIE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKKwkJb21hcF93cml0ZXcoMHg5MTAyLCBPTUFQMTYxMF9ETUFfTENEX0NTRFApOworCQlvbWFwX3dyaXRldygweDAwMDQsIE9NQVAxNjEwX0RNQV9MQ0RfTENIX0NUUkwpOworCX0KKwlzZXRfYjFfcmVncygpOworCWlmICghZW5hYmxlXzE1MTBfbW9kZSkgeworCQl1MTYgdzsKKworCQl3ID0gb21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUik7CisJCS8qIElmIERNQSB3YXMgYWxyZWFkeSBhY3RpdmUgc2V0IHRoZSBlbmRfcHJvZyBiaXQgdG8gaGF2ZQorCQkgKiB0aGUgcHJvZ3JhbW1lZCByZWdpc3RlciBzZXQgbG9hZGVkIGludG8gdGhlIGFjdGl2ZQorCQkgKiByZWdpc3RlciBzZXQuCisJCSAqLworCQl3IHw9IDEgPDwgMTE7CQkvKiBFbmRfcHJvZyAqLworCQlpZiAoIWxjZF9kbWEuc2luZ2xlX3RyYW5zZmVyKQorCSAgICAgICAgCXcgfD0gKDMgPDwgOCk7CS8qIEF1dG9faW5pdCwgcmVwZWF0ICovCisJCW9tYXBfd3JpdGV3KHcsIE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKKwl9Cit9CisKK3ZvaWQgb21hcF9zdG9wX2xjZF9kbWEodm9pZCkKK3sKKwlsY2RfZG1hLmFjdGl2ZSA9IDA7CisJaWYgKCFlbmFibGVfMTUxMF9tb2RlICYmIGxjZF9kbWEuZXh0X2N0cmwpCisJCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpICYgfigxIDw8IDcpLAorCQkJICAgIE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKK30KKworLyoKKyAqIENsZWFycyBhbnkgRE1BIHN0YXRlIHNvIHRoZSBETUEgZW5naW5lIGlzIHJlYWR5IHRvIHJlc3RhcnQgd2l0aCBuZXcgYnVmZmVycworICogdGhyb3VnaCBvbWFwX3N0YXJ0X2RtYSgpLiBBbnkgYnVmZmVycyBpbiBmbGlnaHQgYXJlIGRpc2NhcmRlZC4KKyAqLwordm9pZCBvbWFwX2NsZWFyX2RtYShpbnQgbGNoKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHN0YXR1czsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUihsY2gpKSAmIH5PTUFQX0RNQV9DQ1JfRU4sCisJCSAgICBPTUFQX0RNQV9DQ1IobGNoKSk7CisJc3RhdHVzID0gT01BUF9ETUFfQ1NSKGxjaCk7CS8qIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyAqLworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIFJldHVybnMgY3VycmVudCBwaHlzaWNhbCBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIGdpdmVuIERNQSBjaGFubmVsLgorICogSWYgdGhlIGNoYW5uZWwgaXMgcnVubmluZyB0aGUgY2FsbGVyIG11c3QgZGlzYWJsZSBpbnRlcnJ1cHRzIHByaW9yIGNhbGxpbmcKKyAqIHRoaXMgZnVuY3Rpb24gYW5kIHByb2Nlc3MgdGhlIHJldHVybmVkIHZhbHVlIGJlZm9yZSByZS1lbmFibGluZyBpbnRlcnJ1cHQgdG8KKyAqIHByZXZlbnQgcmFjZXMgd2l0aCB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIE5vdGUgdGhhdCBpbiBjb250aW51b3VzIG1vZGUgdGhlcmUKKyAqIGlzIGEgY2hhbmNlIGZvciBDU1NBX0wgcmVnaXN0ZXIgb3ZlcmZsb3cgaW5iZXR3ZWVuIHRoZSB0d28gcmVhZHMgcmVzdWx0aW5nCisgKiBpbiBpbmNvcnJlY3QgcmV0dXJuIHZhbHVlLgorICovCitkbWFfYWRkcl90IG9tYXBfZ2V0X2RtYV9zcmNfcG9zKGludCBsY2gpCit7CisJcmV0dXJuIChkbWFfYWRkcl90KSAoT01BUF9ETUFfQ1NTQV9MKGxjaCkgfAorCQkJICAgICAoT01BUF9ETUFfQ1NTQV9VKGxjaCkgPDwgMTYpKTsKK30KKworLyoKKyAqIFJldHVybnMgY3VycmVudCBwaHlzaWNhbCBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciB0aGUgZ2l2ZW4gRE1BIGNoYW5uZWwuCisgKiBJZiB0aGUgY2hhbm5lbCBpcyBydW5uaW5nIHRoZSBjYWxsZXIgbXVzdCBkaXNhYmxlIGludGVycnVwdHMgcHJpb3IgY2FsbGluZworICogdGhpcyBmdW5jdGlvbiBhbmQgcHJvY2VzcyB0aGUgcmV0dXJuZWQgdmFsdWUgYmVmb3JlIHJlLWVuYWJsaW5nIGludGVycnVwdCB0bworICogcHJldmVudCByYWNlcyB3aXRoIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gTm90ZSB0aGF0IGluIGNvbnRpbnVvdXMgbW9kZSB0aGVyZQorICogaXMgYSBjaGFuY2UgZm9yIENEU0FfTCByZWdpc3RlciBvdmVyZmxvdyBpbmJldHdlZW4gdGhlIHR3byByZWFkcyByZXN1bHRpbmcKKyAqIGluIGluY29ycmVjdCByZXR1cm4gdmFsdWUuCisgKi8KK2RtYV9hZGRyX3Qgb21hcF9nZXRfZG1hX2RzdF9wb3MoaW50IGxjaCkKK3sKKwlyZXR1cm4gKGRtYV9hZGRyX3QpIChPTUFQX0RNQV9DRFNBX0wobGNoKSB8CisJCQkgICAgIChPTUFQX0RNQV9DRFNBX1UobGNoKSA8PCAxNikpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2luaXRfZG1hKHZvaWQpCit7CisJaW50IGNoLCByOworCisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkRNQSBzdXBwb3J0IGZvciBPTUFQMTUxMCBpbml0aWFsaXplZFxuIik7CisJCWRtYV9jaGFuX2NvdW50ID0gOTsKKwkJZW5hYmxlXzE1MTBfbW9kZSA9IDE7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSB8fCBjcHVfaXNfb21hcDczMCgpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIk9NQVAgRE1BIGhhcmR3YXJlIHZlcnNpb24gJWRcbiIsCisJCSAgICAgICBvbWFwX3JlYWR3KE9NQVBfRE1BX0hXX0lEKSk7CisJCXByaW50ayhLRVJOX0lORk8gIkRNQSBjYXBhYmlsaXRpZXM6ICUwOHg6JTA4eDolMDR4OiUwNHg6JTA0eFxuIiwKKwkJICAgICAgIChvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMF9VKSA8PCAxNikgfCBvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMF9MKSwKKwkJICAgICAgIChvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMV9VKSA8PCAxNikgfCBvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMV9MKSwKKwkJICAgICAgIG9tYXBfcmVhZHcoT01BUF9ETUFfQ0FQU18yKSwgb21hcF9yZWFkdyhPTUFQX0RNQV9DQVBTXzMpLAorCQkgICAgICAgb21hcF9yZWFkdyhPTUFQX0RNQV9DQVBTXzQpKTsKKwkJaWYgKCFlbmFibGVfMTUxMF9tb2RlKSB7CisJCQl1MTYgdzsKKworCQkJLyogRGlzYWJsZSBPTUFQIDMuMC8zLjEgY29tcGF0aWJpbGl0eSBtb2RlLiAqLworCQkJdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfR1NDUik7CisJCQl3IHw9IDEgPDwgMzsKKwkJCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0dTQ1IpOworCQkJZG1hX2NoYW5fY291bnQgPSAxNjsKKwkJfSBlbHNlCisJCQlkbWFfY2hhbl9jb3VudCA9IDk7CisJfSBlbHNlIHsKKwkJZG1hX2NoYW5fY291bnQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwltZW1zZXQoJmxjZF9kbWEsIDAsIHNpemVvZihsY2RfZG1hKSk7CisJc3Bpbl9sb2NrX2luaXQoJmxjZF9kbWEubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmRtYV9jaGFuX2xvY2spOworCW1lbXNldCgmZG1hX2NoYW4sIDAsIHNpemVvZihkbWFfY2hhbikpOworCisJZm9yIChjaCA9IDA7IGNoIDwgZG1hX2NoYW5fY291bnQ7IGNoKyspIHsKKwkJZG1hX2NoYW5bY2hdLmRldl9pZCA9IC0xOworCQlkbWFfY2hhbltjaF0ubmV4dF9sY2ggPSAtMTsKKworCQlpZiAoY2ggPj0gNiAmJiBlbmFibGVfMTUxMF9tb2RlKQorCQkJY29udGludWU7CisKKwkJLyogcmVxdWVzdF9pcnEoKSBkb2Vzbid0IGxpa2UgZGV2X2lkIChpZS4gY2gpIGJlaW5nIHplcm8sCisJCSAqIHNvIHdlIGhhdmUgdG8ga2x1ZGdlIGFyb3VuZCB0aGlzLiAqLworCQlyID0gcmVxdWVzdF9pcnEoZG1hX2lycVtjaF0sIGRtYV9pcnFfaGFuZGxlciwgMCwgIkRNQSIsCisJCQkJKHZvaWQgKikgKGNoICsgMSkpOworCQlpZiAociAhPSAwKSB7CisJCQlpbnQgaTsKKworCQkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gcmVxdWVzdCBJUlEgJWQgZm9yIERNQSAoZXJyb3IgJWQpXG4iLAorCQkJICAgICAgIGRtYV9pcnFbY2hdLCByKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBjaDsgaSsrKQorCQkJCWZyZWVfaXJxKGRtYV9pcnFbaV0sICh2b2lkICopIChpICsgMSkpOworCQkJcmV0dXJuIHI7CisJCX0KKwl9CisJciA9IHJlcXVlc3RfaXJxKElOVF9ETUFfTENELCBsY2RfZG1hX2lycV9oYW5kbGVyLCAwLCAiTENEIERNQSIsIE5VTEwpOworCWlmIChyICE9IDApIHsKKwkJaW50IGk7CisKKwkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gcmVxdWVzdCBJUlEgZm9yIExDRCBETUEgKGVycm9yICVkKVxuIiwgcik7CisJCWZvciAoaSA9IDA7IGkgPCBkbWFfY2hhbl9jb3VudDsgaSsrKQorCQkJZnJlZV9pcnEoZG1hX2lycVtpXSwgKHZvaWQgKikgKGkgKyAxKSk7CisJCXJldHVybiByOworCX0KKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChvbWFwX2luaXRfZG1hKTsKKworCitFWFBPUlRfU1lNQk9MKG9tYXBfZ2V0X2RtYV9zcmNfcG9zKTsKK0VYUE9SVF9TWU1CT0wob21hcF9nZXRfZG1hX2RzdF9wb3MpOworRVhQT1JUX1NZTUJPTChvbWFwX2NsZWFyX2RtYSk7CitFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9wcmlvcml0eSk7CitFWFBPUlRfU1lNQk9MKG9tYXBfcmVxdWVzdF9kbWEpOworRVhQT1JUX1NZTUJPTChvbWFwX2ZyZWVfZG1hKTsKK0VYUE9SVF9TWU1CT0wob21hcF9zdGFydF9kbWEpOworRVhQT1JUX1NZTUJPTChvbWFwX3N0b3BfZG1hKTsKK0VYUE9SVF9TWU1CT0wob21hcF9lbmFibGVfZG1hX2lycSk7CitFWFBPUlRfU1lNQk9MKG9tYXBfZGlzYWJsZV9kbWFfaXJxKTsKKworRVhQT1JUX1NZTUJPTChvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKTsKK0VYUE9SVF9TWU1CT0wob21hcF9zZXRfZG1hX2NvbG9yX21vZGUpOworCitFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKTsKK0VYUE9SVF9TWU1CT0wob21hcF9zZXRfZG1hX3NyY19pbmRleCk7CitFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9zcmNfZGF0YV9wYWNrKTsKK0VYUE9SVF9TWU1CT0wob21hcF9zZXRfZG1hX3NyY19idXJzdF9tb2RlKTsKKworRVhQT1JUX1NZTUJPTChvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMpOworRVhQT1JUX1NZTUJPTChvbWFwX3NldF9kbWFfZGVzdF9pbmRleCk7CitFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9kZXN0X2RhdGFfcGFjayk7CitFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9kZXN0X2J1cnN0X21vZGUpOworCitFWFBPUlRfU1lNQk9MKG9tYXBfZG1hX2xpbmtfbGNoKTsKK0VYUE9SVF9TWU1CT0wob21hcF9kbWFfdW5saW5rX2xjaCk7CisKK0VYUE9SVF9TWU1CT0wob21hcF9yZXF1ZXN0X2xjZF9kbWEpOworRVhQT1JUX1NZTUJPTChvbWFwX2ZyZWVfbGNkX2RtYSk7CitFWFBPUlRfU1lNQk9MKG9tYXBfZW5hYmxlX2xjZF9kbWEpOworRVhQT1JUX1NZTUJPTChvbWFwX3NldHVwX2xjZF9kbWEpOworRVhQT1JUX1NZTUJPTChvbWFwX3N0b3BfbGNkX2RtYSk7CitFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2xjZF9kbWFfYjEpOworRVhQT1JUX1NZTUJPTChvbWFwX3NldF9sY2RfZG1hX3NpbmdsZV90cmFuc2Zlcik7CitFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2xjZF9kbWFfZXh0X2NvbnRyb2xsZXIpOworRVhQT1JUX1NZTUJPTChvbWFwX3NldF9sY2RfZG1hX2IxX3JvdGF0aW9uKTsKK0VYUE9SVF9TWU1CT0wob21hcF9zZXRfbGNkX2RtYV9iMV92eHJlcyk7CitFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2xjZF9kbWFfYjFfc2NhbGUpOworRVhQT1JUX1NZTUJPTChvbWFwX3NldF9sY2RfZG1hX2IxX21pcnJvcik7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9mcGdhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAvZnBnYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMDhmNmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAvZnBnYS5jCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL2ZwZ2EuYworICoKKyAqIEludGVycnVwdCBoYW5kbGVyIGZvciBPTUFQLTE1MTAgSW5ub3ZhdG9yIEZQR0EKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUmlkZ2VSdW4sIEluYy4KKyAqIEF1dGhvcjogR3JlZyBMb25ub24gPGdsb25ub25AcmlkZ2VydW4uY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogU2VwYXJhdGVkIEZQR0EgaW50ZXJydXB0cyBmcm9tIGlubm92YXRvcjE1MTAuYyBhbmQgY2xlYW5lZCB1cCBmb3IgMi42CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTm9raWEgQ29ycG9yYXRpb24gYnkgVG9ueSBMaW5kcmdlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvZnBnYS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKworc3RhdGljIHZvaWQgZnBnYV9tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlycSAtPSBPTUFQMTUxMF9JSF9GUEdBX0JBU0U7CisKKwlpZiAoaXJxIDwgOCkKKwkJX19yYXdfd3JpdGViKChfX3Jhd19yZWFkYihPTUFQMTUxMF9GUEdBX0lNUl9MTykKKwkJCSAgICAgICYgfigxIDw8IGlycSkpLCBPTUFQMTUxMF9GUEdBX0lNUl9MTyk7CisJZWxzZSBpZiAoaXJxIDwgMTYpCisJCV9fcmF3X3dyaXRlYigoX19yYXdfcmVhZGIoT01BUDE1MTBfRlBHQV9JTVJfSEkpCisJCQkgICAgICAmIH4oMSA8PCAoaXJxIC0gOCkpKSwgT01BUDE1MTBfRlBHQV9JTVJfSEkpOworCWVsc2UKKwkJX19yYXdfd3JpdGViKChfX3Jhd19yZWFkYihJTk5PVkFUT1JfRlBHQV9JTVIyKQorCQkJICAgICAgJiB+KDEgPDwgKGlycSAtIDE2KSkpLCBJTk5PVkFUT1JfRlBHQV9JTVIyKTsKK30KKworCitzdGF0aWMgaW5saW5lIHUzMiBnZXRfZnBnYV91bm1hc2tlZF9pcnFzKHZvaWQpCit7CisJcmV0dXJuCisJCSgoX19yYXdfcmVhZGIoT01BUDE1MTBfRlBHQV9JU1JfTE8pICYKKwkJICBfX3Jhd19yZWFkYihPTUFQMTUxMF9GUEdBX0lNUl9MTykpKSB8CisJCSgoX19yYXdfcmVhZGIoT01BUDE1MTBfRlBHQV9JU1JfSEkpICYKKwkJICBfX3Jhd19yZWFkYihPTUFQMTUxMF9GUEdBX0lNUl9ISSkpIDw8IDgpIHwKKwkJKChfX3Jhd19yZWFkYihJTk5PVkFUT1JfRlBHQV9JU1IyKSAmCisJCSAgX19yYXdfcmVhZGIoSU5OT1ZBVE9SX0ZQR0FfSU1SMikpIDw8IDE2KTsKK30KKworCitzdGF0aWMgdm9pZCBmcGdhX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwkvKiBEb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkgQUNLIEZQR0EgaW50ZXJydXB0cyAqLworfQorCitzdGF0aWMgdm9pZCBmcGdhX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpcnEgLT0gT01BUDE1MTBfSUhfRlBHQV9CQVNFOworCisJaWYgKGlycSA8IDgpCisJCV9fcmF3X3dyaXRlYigoX19yYXdfcmVhZGIoT01BUDE1MTBfRlBHQV9JTVJfTE8pIHwgKDEgPDwgaXJxKSksCisJCSAgICAgT01BUDE1MTBfRlBHQV9JTVJfTE8pOworCWVsc2UgaWYgKGlycSA8IDE2KQorCQlfX3Jhd193cml0ZWIoKF9fcmF3X3JlYWRiKE9NQVAxNTEwX0ZQR0FfSU1SX0hJKQorCQkJICAgICAgfCAoMSA8PCAoaXJxIC0gOCkpKSwgT01BUDE1MTBfRlBHQV9JTVJfSEkpOworCWVsc2UKKwkJX19yYXdfd3JpdGViKChfX3Jhd19yZWFkYihJTk5PVkFUT1JfRlBHQV9JTVIyKQorCQkJICAgICAgfCAoMSA8PCAoaXJxIC0gMTYpKSksIElOTk9WQVRPUl9GUEdBX0lNUjIpOworfQorCitzdGF0aWMgdm9pZCBmcGdhX21hc2tfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWZwZ2FfbWFza19pcnEoaXJxKTsKKwlmcGdhX2Fja19pcnEoaXJxKTsKK30KKwordm9pZCBpbm5vdmF0b3JfZnBnYV9JUlFfZGVtdXgodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWRlc2MgKmRlc2MsCisJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaXJxZGVzYyAqZDsKKwl1MzIgc3RhdDsKKwlpbnQgZnBnYV9pcnE7CisKKwlzdGF0ID0gZ2V0X2ZwZ2FfdW5tYXNrZWRfaXJxcygpOworCisJaWYgKCFzdGF0KQorCQlyZXR1cm47CisKKwlmb3IgKGZwZ2FfaXJxID0gT01BUDE1MTBfSUhfRlBHQV9CQVNFOworCSAgICAgKGZwZ2FfaXJxIDwgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIE5SX0ZQR0FfSVJRUykpICYmIHN0YXQ7CisJICAgICBmcGdhX2lycSsrLCBzdGF0ID4+PSAxKSB7CisJCWlmIChzdGF0ICYgMSkgeworCQkJZCA9IGlycV9kZXNjICsgZnBnYV9pcnE7CisJCQlkLT5oYW5kbGUoZnBnYV9pcnEsIGQsIHJlZ3MpOworCQl9CisJfQorfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgb21hcF9mcGdhX2lycV9hY2sgPSB7CisJLmFjawkJPSBmcGdhX21hc2tfYWNrX2lycSwKKwkubWFzawkJPSBmcGdhX21hc2tfaXJxLAorCS51bm1hc2sJCT0gZnBnYV91bm1hc2tfaXJxLAorfTsKKworCitzdGF0aWMgc3RydWN0IGlycWNoaXAgb21hcF9mcGdhX2lycSA9IHsKKwkuYWNrCQk9IGZwZ2FfYWNrX2lycSwKKwkubWFzawkJPSBmcGdhX21hc2tfaXJxLAorCS51bm1hc2sJCT0gZnBnYV91bm1hc2tfaXJxLAorfTsKKworLyoKKyAqIEFsbCBvZiB0aGUgRlBHQSBpbnRlcnJ1cHQgcmVxdWVzdCBpbnB1dHMgZXhjZXB0IGZvciB0aGUgdG91Y2hzY3JlZW4gYXJlCisgKiBlZGdlLXNlbnNpdGl2ZTsgdGhlIHRvdWNoc2NyZWVuIGlzIGxldmVsLXNlbnNpdGl2ZS4gIFRoZSBlZGdlLXNlbnNpdGl2ZQorICogaW50ZXJydXB0cyBhcmUgYWNrbm93bGVkZ2VkIGFzIGEgc2lkZS1lZmZlY3Qgb2YgcmVhZGluZyB0aGUgaW50ZXJydXB0CisgKiBzdGF0dXMgcmVnaXN0ZXIgZnJvbSB0aGUgRlBHQS4gIFRoZSBlZGdlLXNlbnNpdGl2ZSBpbnRlcnJ1cHQgaW5wdXRzCisgKiBjYXVzZSBhIHByb2JsZW0gd2l0aCBsZXZlbCBpbnRlcnJ1cHQgcmVxdWVzdHMsIHN1Y2ggYXMgRXRoZXJuZXQuICBUaGUKKyAqIHByb2JsZW0gb2NjdXJzIHdoZW4gYSBsZXZlbCBpbnRlcnJ1cHQgcmVxdWVzdCBpcyBhc3NlcnRlZCB3aGlsZSBpdHMKKyAqIGludGVycnVwdCBpbnB1dCBpcyBtYXNrZWQgaW4gdGhlIEZQR0EsIHdoaWNoIHJlc3VsdHMgaW4gYSBtaXNzZWQKKyAqIGludGVycnVwdC4KKyAqCisgKiBJbiBhbiBhdHRlbXB0IHRvIHdvcmthcm91bmQgdGhlIHByb2JsZW0gd2l0aCBtaXNzZWQgaW50ZXJydXB0cywgdGhlCisgKiBtYXNrX2FjayByb3V0aW5lIGZvciBhbGwgb2YgdGhlIEZQR0EgaW50ZXJydXB0cyBoYXMgYmVlbiBjaGFuZ2VkIGZyb20KKyAqIGZwZ2FfbWFza19hY2tfaXJxKCkgdG8gZnBnYV9hY2tfaXJxKCkgc28gdGhhdCB0aGUgc3BlY2lmaWMgRlBHQSBpbnRlcnJ1cHQKKyAqIGJlaW5nIHNlcnZpY2VkIGlzIGxlZnQgdW5tYXNrZWQuICBXZSBjYW4gZG8gdGhpcyBiZWNhdXNlIHRoZSBGUEdBIGNhc2NhZGUKKyAqIGludGVycnVwdCBpcyBpbnN0YWxsZWQgd2l0aCB0aGUgU0FfSU5URVJSVVBUIGZsYWcsIHdoaWNoIGxlYXZlcyBhbGwKKyAqIGludGVycnVwdHMgbWFza2VkIGF0IHRoZSBDUFUgd2hpbGUgYW4gRlBHQSBpbnRlcnJ1cHQgaGFuZGxlciBleGVjdXRlcy4KKyAqCisgKiBMaW1pdGVkIHRlc3RpbmcgaW5kaWNhdGVzIHRoYXQgdGhpcyB3b3JrYXJvdW5kIGFwcGVhcnMgdG8gYmUgZWZmZWN0aXZlCisgKiBmb3IgdGhlIHNtYzkxOTQgRXRoZXJuZXQgZHJpdmVyIHVzZWQgb24gdGhlIElubm92YXRvci4gIEl0IHNob3VsZCB3b3JrCisgKiBvbiBvdGhlciBGUEdBIGludGVycnVwdHMgYXMgd2VsbCwgYnV0IGFueSBkcml2ZXJzIHRoYXQgZXhwbGljaXRseSBtYXNrCisgKiBpbnRlcnJ1cHRzIGF0IHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciB2aWEgZGlzYWJsZV9pcnEvZW5hYmxlX2lycQorICogY291bGQgcG9zZSBhIHByb2JsZW0uCisgKi8KK3ZvaWQgb21hcDE1MTBfZnBnYV9pbml0X2lycSh2b2lkKQoreworCWludCBpOworCisJX19yYXdfd3JpdGViKDAsIE9NQVAxNTEwX0ZQR0FfSU1SX0xPKTsKKwlfX3Jhd193cml0ZWIoMCwgT01BUDE1MTBfRlBHQV9JTVJfSEkpOworCV9fcmF3X3dyaXRlYigwLCBJTk5PVkFUT1JfRlBHQV9JTVIyKTsKKworCWZvciAoaSA9IE9NQVAxNTEwX0lIX0ZQR0FfQkFTRTsgaSA8IChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyBOUl9GUEdBX0lSUVMpOyBpKyspIHsKKworCQlpZiAoaSA9PSBPTUFQMTUxMF9JTlRfRlBHQV9UUykgeworCQkJLyoKKwkJCSAqIFRoZSB0b3VjaHNjcmVlbiBpbnRlcnJ1cHQgaXMgbGV2ZWwtc2Vuc2l0aXZlLCBzbworCQkJICogd2UnbGwgdXNlIHRoZSByZWd1bGFyIG1hc2tfYWNrIHJvdXRpbmUgZm9yIGl0LgorCQkJICovCisJCQlzZXRfaXJxX2NoaXAoaSwgJm9tYXBfZnBnYV9pcnFfYWNrKTsKKwkJfQorCQllbHNlIHsKKwkJCS8qCisJCQkgKiBBbGwgRlBHQSBpbnRlcnJ1cHRzIGV4Y2VwdCB0aGUgdG91Y2hzY3JlZW4gYXJlCisJCQkgKiBlZGdlLXNlbnNpdGl2ZSwgc28gd2Ugd29uJ3QgbWFzayB0aGVtLgorCQkJICovCisJCQlzZXRfaXJxX2NoaXAoaSwgJm9tYXBfZnBnYV9pcnEpOworCQl9CisKKwkJc2V0X2lycV9oYW5kbGVyKGksIGRvX2VkZ2VfSVJRKTsKKwkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEKTsKKwl9CisKKwkvKgorCSAqIFRoZSBGUEdBIGludGVycnVwdCBsaW5lIGlzIGNvbm5lY3RlZCB0byBHUElPMTMuIENsYWltIHRoaXMgcGluIGZvcgorCSAqIHRoZSBBUk0uCisJICoKKwkgKiBOT1RFOiBGb3IgZ2VuZXJhbCBHUElPL01QVUlPIGFjY2VzcyBhbmQgaW50ZXJydXB0cywgcGxlYXNlIHNlZQorCSAqIGdwaW8uW2NoXQorCSAqLworCW9tYXBfcmVxdWVzdF9ncGlvKDEzKTsKKwlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbigxMywgMSk7CisJb21hcF9zZXRfZ3Bpb19lZGdlX2N0cmwoMTMsIE9NQVBfR1BJT19SSVNJTkdfRURHRSk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoT01BUDE1MTBfSU5UX0ZQR0EsIGlubm92YXRvcl9mcGdhX0lSUV9kZW11eCk7Cit9CisKK0VYUE9SVF9TWU1CT0wob21hcDE1MTBfZnBnYV9pbml0X2lycSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwL2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDQ1ZGZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwL2dwaW8uYwpAQCAtMCwwICsxLDc2MiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvZ3Bpby5jCisgKgorICogU3VwcG9ydCBmdW5jdGlvbnMgZm9yIE9NQVAgR1BJTworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBOb2tpYSBDb3Jwb3JhdGlvbgorICogV3JpdHRlbiBieSBKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworLyoKKyAqIE9NQVAxNTEwIEdQSU8gcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgT01BUDE1MTBfR1BJT19CQVNFCQkweGZmZmNlMDAwCisjZGVmaW5lIE9NQVAxNTEwX0dQSU9fREFUQV9JTlBVVAkweDAwCisjZGVmaW5lIE9NQVAxNTEwX0dQSU9fREFUQV9PVVRQVVQJMHgwNAorI2RlZmluZSBPTUFQMTUxMF9HUElPX0RJUl9DT05UUk9MCTB4MDgKKyNkZWZpbmUgT01BUDE1MTBfR1BJT19JTlRfQ09OVFJPTAkweDBjCisjZGVmaW5lIE9NQVAxNTEwX0dQSU9fSU5UX01BU0sJCTB4MTAKKyNkZWZpbmUgT01BUDE1MTBfR1BJT19JTlRfU1RBVFVTCTB4MTQKKyNkZWZpbmUgT01BUDE1MTBfR1BJT19QSU5fQ09OVFJPTAkweDE4CisKKyNkZWZpbmUgT01BUDE1MTBfSUhfR1BJT19CQVNFCQk2NAorCisvKgorICogT01BUDE2MTAgc3BlY2lmaWMgR1BJTyByZWdpc3RlcnMKKyAqLworI2RlZmluZSBPTUFQMTYxMF9HUElPMV9CQVNFCQkweGZmZmJlNDAwCisjZGVmaW5lIE9NQVAxNjEwX0dQSU8yX0JBU0UJCTB4ZmZmYmVjMDAKKyNkZWZpbmUgT01BUDE2MTBfR1BJTzNfQkFTRQkJMHhmZmZiYjQwMAorI2RlZmluZSBPTUFQMTYxMF9HUElPNF9CQVNFCQkweGZmZmJiYzAwCisjZGVmaW5lIE9NQVAxNjEwX0dQSU9fUkVWSVNJT04JCTB4MDAwMAorI2RlZmluZSBPTUFQMTYxMF9HUElPX1NZU0NPTkZJRwkJMHgwMDEwCisjZGVmaW5lIE9NQVAxNjEwX0dQSU9fU1lTU1RBVFVTCQkweDAwMTQKKyNkZWZpbmUgT01BUDE2MTBfR1BJT19JUlFTVEFUVVMxCTB4MDAxOAorI2RlZmluZSBPTUFQMTYxMF9HUElPX0lSUUVOQUJMRTEJMHgwMDFjCisjZGVmaW5lIE9NQVAxNjEwX0dQSU9fREFUQUlOCQkweDAwMmMKKyNkZWZpbmUgT01BUDE2MTBfR1BJT19EQVRBT1VUCQkweDAwMzAKKyNkZWZpbmUgT01BUDE2MTBfR1BJT19ESVJFQ1RJT04JCTB4MDAzNAorI2RlZmluZSBPTUFQMTYxMF9HUElPX0VER0VfQ1RSTDEJMHgwMDM4CisjZGVmaW5lIE9NQVAxNjEwX0dQSU9fRURHRV9DVFJMMgkweDAwM2MKKyNkZWZpbmUgT01BUDE2MTBfR1BJT19DTEVBUl9JUlFFTkFCTEUxCTB4MDA5YworI2RlZmluZSBPTUFQMTYxMF9HUElPX0NMRUFSX0RBVEFPVVQJMHgwMGIwCisjZGVmaW5lIE9NQVAxNjEwX0dQSU9fU0VUX0lSUUVOQUJMRTEJMHgwMGRjCisjZGVmaW5lIE9NQVAxNjEwX0dQSU9fU0VUX0RBVEFPVVQJMHgwMGYwCisKKy8qCisgKiBPTUFQNzMwIHNwZWNpZmljIEdQSU8gcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgT01BUDczMF9HUElPMV9CQVNFCQkweGZmZmJjMDAwCisjZGVmaW5lIE9NQVA3MzBfR1BJTzJfQkFTRQkJMHhmZmZiYzgwMAorI2RlZmluZSBPTUFQNzMwX0dQSU8zX0JBU0UJCTB4ZmZmYmQwMDAKKyNkZWZpbmUgT01BUDczMF9HUElPNF9CQVNFCQkweGZmZmJkODAwCisjZGVmaW5lIE9NQVA3MzBfR1BJTzVfQkFTRQkJMHhmZmZiZTAwMAorI2RlZmluZSBPTUFQNzMwX0dQSU82X0JBU0UJCTB4ZmZmYmU4MDAKKyNkZWZpbmUgT01BUDczMF9HUElPX0RBVEFfSU5QVVQJCTB4MDAKKyNkZWZpbmUgT01BUDczMF9HUElPX0RBVEFfT1VUUFVUCTB4MDQKKyNkZWZpbmUgT01BUDczMF9HUElPX0RJUl9DT05UUk9MCTB4MDgKKyNkZWZpbmUgT01BUDczMF9HUElPX0lOVF9DT05UUk9MCTB4MGMKKyNkZWZpbmUgT01BUDczMF9HUElPX0lOVF9NQVNLCQkweDEwCisjZGVmaW5lIE9NQVA3MzBfR1BJT19JTlRfU1RBVFVTCQkweDE0CisKKyNkZWZpbmUgT01BUF9NUFVJT19NQVNLCQkofk9NQVBfTUFYX0dQSU9fTElORVMgJiAweGZmKQorCitzdHJ1Y3QgZ3Bpb19iYW5rIHsKKwl1MzIgYmFzZTsKKwl1MTYgaXJxOworCXUxNiB2aXJ0dWFsX2lycV9zdGFydDsKKwl1OCBtZXRob2Q7CisJdTMyIHJlc2VydmVkX21hcDsKKwlzcGlubG9ja190IGxvY2s7Cit9OworCisjZGVmaW5lIE1FVEhPRF9NUFVJTwkJMAorI2RlZmluZSBNRVRIT0RfR1BJT18xNTEwCTEKKyNkZWZpbmUgTUVUSE9EX0dQSU9fMTYxMAkyCisjZGVmaW5lIE1FVEhPRF9HUElPXzczMAkJMworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19iYW5rIGdwaW9fYmFua18xNjEwWzVdID0geworCXsgT01BUF9NUFVJT19CQVNFLCAgICAgSU5UX01QVUlPLAkgICAgSUhfTVBVSU9fQkFTRSwgICAgIE1FVEhPRF9NUFVJT30sCisJeyBPTUFQMTYxMF9HUElPMV9CQVNFLCBJTlRfR1BJT19CQU5LMSwJICAgIElIX0dQSU9fQkFTRSwgICAgICBNRVRIT0RfR1BJT18xNjEwIH0sCisJeyBPTUFQMTYxMF9HUElPMl9CQVNFLCBJTlRfMTYxMF9HUElPX0JBTksyLCBJSF9HUElPX0JBU0UgKyAxNiwgTUVUSE9EX0dQSU9fMTYxMCB9LAorCXsgT01BUDE2MTBfR1BJTzNfQkFTRSwgSU5UXzE2MTBfR1BJT19CQU5LMywgSUhfR1BJT19CQVNFICsgMzIsIE1FVEhPRF9HUElPXzE2MTAgfSwKKwl7IE9NQVAxNjEwX0dQSU80X0JBU0UsIElOVF8xNjEwX0dQSU9fQkFOSzQsIElIX0dQSU9fQkFTRSArIDQ4LCBNRVRIT0RfR1BJT18xNjEwIH0sCit9OworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzE1MTBbMl0gPSB7CisJeyBPTUFQX01QVUlPX0JBU0UsICAgIElOVF9NUFVJTywgICAgICBJSF9NUFVJT19CQVNFLCBNRVRIT0RfTVBVSU8gfSwKKwl7IE9NQVAxNTEwX0dQSU9fQkFTRSwgSU5UX0dQSU9fQkFOSzEsIElIX0dQSU9fQkFTRSwgIE1FVEhPRF9HUElPXzE1MTAgfQorfTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAorc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzczMFs3XSA9IHsKKwl7IE9NQVBfTVBVSU9fQkFTRSwgICAgIElOVF83MzBfTVBVSU8sCSAgICBJSF9NUFVJT19CQVNFLAlNRVRIT0RfTVBVSU8gfSwKKwl7IE9NQVA3MzBfR1BJTzFfQkFTRSwgIElOVF83MzBfR1BJT19CQU5LMSwgIElIX0dQSU9fQkFTRSwJTUVUSE9EX0dQSU9fNzMwIH0sCisJeyBPTUFQNzMwX0dQSU8yX0JBU0UsICBJTlRfNzMwX0dQSU9fQkFOSzIsICBJSF9HUElPX0JBU0UgKyAzMiwJTUVUSE9EX0dQSU9fNzMwIH0sCisJeyBPTUFQNzMwX0dQSU8zX0JBU0UsICBJTlRfNzMwX0dQSU9fQkFOSzMsICBJSF9HUElPX0JBU0UgKyA2NCwJTUVUSE9EX0dQSU9fNzMwIH0sCisJeyBPTUFQNzMwX0dQSU80X0JBU0UsICBJTlRfNzMwX0dQSU9fQkFOSzQsICBJSF9HUElPX0JBU0UgKyA5NiwJTUVUSE9EX0dQSU9fNzMwIH0sCisJeyBPTUFQNzMwX0dQSU81X0JBU0UsICBJTlRfNzMwX0dQSU9fQkFOSzUsICBJSF9HUElPX0JBU0UgKyAxMjgsIE1FVEhPRF9HUElPXzczMCB9LAorCXsgT01BUDczMF9HUElPNl9CQVNFLCAgSU5UXzczMF9HUElPX0JBTks2LCAgSUhfR1BJT19CQVNFICsgMTYwLCBNRVRIT0RfR1BJT183MzAgfSwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgKmdwaW9fYmFuazsKK3N0YXRpYyBpbnQgZ3Bpb19iYW5rX2NvdW50OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBncGlvX2JhbmsgKmdldF9ncGlvX2JhbmsoaW50IGdwaW8pCit7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKwlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJaWYgKE9NQVBfR1BJT19JU19NUFVJTyhncGlvKSkKKwkJCXJldHVybiAmZ3Bpb19iYW5rWzBdOworCQlyZXR1cm4gJmdwaW9fYmFua1sxXTsKKwl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQorCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQlpZiAoT01BUF9HUElPX0lTX01QVUlPKGdwaW8pKQorCQkJcmV0dXJuICZncGlvX2JhbmtbMF07CisJCXJldHVybiAmZ3Bpb19iYW5rWzEgKyAoZ3BpbyA+PiA0KV07CisJfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAorCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJCWlmIChPTUFQX0dQSU9fSVNfTVBVSU8oZ3BpbykpCisJCQlyZXR1cm4gJmdwaW9fYmFua1swXTsKKwkJcmV0dXJuICZncGlvX2JhbmtbMSArIChncGlvID4+IDUpXTsKKwl9CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2V0X2dwaW9faW5kZXgoaW50IGdwaW8pCit7CisJaWYgKGNwdV9pc19vbWFwNzMwKCkpCisJCXJldHVybiBncGlvICYgMHgxZjsKKwllbHNlCisJCXJldHVybiBncGlvICYgMHgwZjsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb192YWxpZChpbnQgZ3BpbykKK3sKKwlpZiAoZ3BpbyA8IDApCisJCXJldHVybiAtMTsKKwlpZiAoT01BUF9HUElPX0lTX01QVUlPKGdwaW8pKSB7CisJCWlmICgoZ3BpbyAmIE9NQVBfTVBVSU9fTUFTSykgPiAxNikKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisJaWYgKGNwdV9pc19vbWFwMTUxMCgpICYmIGdwaW8gPCAxNikKKwkJcmV0dXJuIDA7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQorCWlmICgoY3B1X2lzX29tYXAxNnh4KCkpICYmIGdwaW8gPCA2NCkKKwkJcmV0dXJuIDA7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCisJaWYgKGNwdV9pc19vbWFwNzMwKCkgJiYgZ3BpbyA8IDE5MikKKwkJcmV0dXJuIDA7CisjZW5kaWYKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfZ3BpbyhpbnQgZ3BpbykKK3sKKwlpZiAodW5saWtlbHkoZ3Bpb192YWxpZChncGlvKSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAib21hcC1ncGlvOiBpbnZhbGlkIEdQSU8gJWRcbiIsIGdwaW8pOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9zZXRfZ3Bpb19kaXJlY3Rpb24oc3RydWN0IGdwaW9fYmFuayAqYmFuaywgaW50IGdwaW8sIGludCBpc19pbnB1dCkKK3sKKwl1MzIgcmVnID0gYmFuay0+YmFzZTsKKwl1MzIgbDsKKworCXN3aXRjaCAoYmFuay0+bWV0aG9kKSB7CisJY2FzZSBNRVRIT0RfTVBVSU86CisJCXJlZyArPSBPTUFQX01QVUlPX0lPX0NOVEw7CisJCWJyZWFrOworCWNhc2UgTUVUSE9EX0dQSU9fMTUxMDoKKwkJcmVnICs9IE9NQVAxNTEwX0dQSU9fRElSX0NPTlRST0w7CisJCWJyZWFrOworCWNhc2UgTUVUSE9EX0dQSU9fMTYxMDoKKwkJcmVnICs9IE9NQVAxNjEwX0dQSU9fRElSRUNUSU9OOworCQlicmVhazsKKwljYXNlIE1FVEhPRF9HUElPXzczMDoKKwkJcmVnICs9IE9NQVA3MzBfR1BJT19ESVJfQ09OVFJPTDsKKwkJYnJlYWs7CisJfQorCWwgPSBfX3Jhd19yZWFkbChyZWcpOworCWlmIChpc19pbnB1dCkKKwkJbCB8PSAxIDw8IGdwaW87CisJZWxzZQorCQlsICY9IH4oMSA8PCBncGlvKTsKKwlfX3Jhd193cml0ZWwobCwgcmVnKTsKK30KKwordm9pZCBvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihpbnQgZ3BpbywgaW50IGlzX2lucHV0KQoreworCXN0cnVjdCBncGlvX2JhbmsgKmJhbms7CisKKwlpZiAoY2hlY2tfZ3BpbyhncGlvKSA8IDApCisJCXJldHVybjsKKwliYW5rID0gZ2V0X2dwaW9fYmFuayhncGlvKTsKKwlzcGluX2xvY2soJmJhbmstPmxvY2spOworCV9zZXRfZ3Bpb19kaXJlY3Rpb24oYmFuaywgZ2V0X2dwaW9faW5kZXgoZ3BpbyksIGlzX2lucHV0KTsKKwlzcGluX3VubG9jaygmYmFuay0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIF9zZXRfZ3Bpb19kYXRhb3V0KHN0cnVjdCBncGlvX2JhbmsgKmJhbmssIGludCBncGlvLCBpbnQgZW5hYmxlKQoreworCXUzMiByZWcgPSBiYW5rLT5iYXNlOworCXUzMiBsID0gMDsKKworCXN3aXRjaCAoYmFuay0+bWV0aG9kKSB7CisJY2FzZSBNRVRIT0RfTVBVSU86CisJCXJlZyArPSBPTUFQX01QVUlPX09VVFBVVDsKKwkJbCA9IF9fcmF3X3JlYWRsKHJlZyk7CisJCWlmIChlbmFibGUpCisJCQlsIHw9IDEgPDwgZ3BpbzsKKwkJZWxzZQorCQkJbCAmPSB+KDEgPDwgZ3Bpbyk7CisJCWJyZWFrOworCWNhc2UgTUVUSE9EX0dQSU9fMTUxMDoKKwkJcmVnICs9IE9NQVAxNTEwX0dQSU9fREFUQV9PVVRQVVQ7CisJCWwgPSBfX3Jhd19yZWFkbChyZWcpOworCQlpZiAoZW5hYmxlKQorCQkJbCB8PSAxIDw8IGdwaW87CisJCWVsc2UKKwkJCWwgJj0gfigxIDw8IGdwaW8pOworCQlicmVhazsKKwljYXNlIE1FVEhPRF9HUElPXzE2MTA6CisJCWlmIChlbmFibGUpCisJCQlyZWcgKz0gT01BUDE2MTBfR1BJT19TRVRfREFUQU9VVDsKKwkJZWxzZQorCQkJcmVnICs9IE9NQVAxNjEwX0dQSU9fQ0xFQVJfREFUQU9VVDsKKwkJbCA9IDEgPDwgZ3BpbzsKKwkJYnJlYWs7CisJY2FzZSBNRVRIT0RfR1BJT183MzA6CisJCXJlZyArPSBPTUFQNzMwX0dQSU9fREFUQV9PVVRQVVQ7CisJCWwgPSBfX3Jhd19yZWFkbChyZWcpOworCQlpZiAoZW5hYmxlKQorCQkJbCB8PSAxIDw8IGdwaW87CisJCWVsc2UKKwkJCWwgJj0gfigxIDw8IGdwaW8pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuOworCX0KKwlfX3Jhd193cml0ZWwobCwgcmVnKTsKK30KKwordm9pZCBvbWFwX3NldF9ncGlvX2RhdGFvdXQoaW50IGdwaW8sIGludCBlbmFibGUpCit7CisJc3RydWN0IGdwaW9fYmFuayAqYmFuazsKKworCWlmIChjaGVja19ncGlvKGdwaW8pIDwgMCkKKwkJcmV0dXJuOworCWJhbmsgPSBnZXRfZ3Bpb19iYW5rKGdwaW8pOworCXNwaW5fbG9jaygmYmFuay0+bG9jayk7CisJX3NldF9ncGlvX2RhdGFvdXQoYmFuaywgZ2V0X2dwaW9faW5kZXgoZ3BpbyksIGVuYWJsZSk7CisJc3Bpbl91bmxvY2soJmJhbmstPmxvY2spOworfQorCitpbnQgb21hcF9nZXRfZ3Bpb19kYXRhaW4oaW50IGdwaW8pCit7CisJc3RydWN0IGdwaW9fYmFuayAqYmFuazsKKwl1MzIgcmVnOworCisJaWYgKGNoZWNrX2dwaW8oZ3BpbykgPCAwKQorCQlyZXR1cm4gLTE7CisJYmFuayA9IGdldF9ncGlvX2JhbmsoZ3Bpbyk7CisJcmVnID0gYmFuay0+YmFzZTsKKwlzd2l0Y2ggKGJhbmstPm1ldGhvZCkgeworCWNhc2UgTUVUSE9EX01QVUlPOgorCQlyZWcgKz0gT01BUF9NUFVJT19JTlBVVF9MQVRDSDsKKwkJYnJlYWs7CisJY2FzZSBNRVRIT0RfR1BJT18xNTEwOgorCQlyZWcgKz0gT01BUDE1MTBfR1BJT19EQVRBX0lOUFVUOworCQlicmVhazsKKwljYXNlIE1FVEhPRF9HUElPXzE2MTA6CisJCXJlZyArPSBPTUFQMTYxMF9HUElPX0RBVEFJTjsKKwkJYnJlYWs7CisJY2FzZSBNRVRIT0RfR1BJT183MzA6CisJCXJlZyArPSBPTUFQNzMwX0dQSU9fREFUQV9JTlBVVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIChfX3Jhd19yZWFkbChyZWcpICYgKDEgPDwgZ2V0X2dwaW9faW5kZXgoZ3BpbykpKSAhPSAwOworfQorCitzdGF0aWMgdm9pZCBfc2V0X2dwaW9fZWRnZV9jdHJsKHN0cnVjdCBncGlvX2JhbmsgKmJhbmssIGludCBncGlvLCBpbnQgZWRnZSkKK3sKKwl1MzIgcmVnID0gYmFuay0+YmFzZTsKKwl1MzIgbDsKKworCXN3aXRjaCAoYmFuay0+bWV0aG9kKSB7CisJY2FzZSBNRVRIT0RfTVBVSU86CisJCXJlZyArPSBPTUFQX01QVUlPX0dQSU9fSU5UX0VER0U7CisJCWwgPSBfX3Jhd19yZWFkbChyZWcpOworCQlpZiAoZWRnZSA9PSBPTUFQX0dQSU9fUklTSU5HX0VER0UpCisJCQlsIHw9IDEgPDwgZ3BpbzsKKwkJZWxzZQorCQkJbCAmPSB+KDEgPDwgZ3Bpbyk7CisJCV9fcmF3X3dyaXRlbChsLCByZWcpOworCQlicmVhazsKKwljYXNlIE1FVEhPRF9HUElPXzE1MTA6CisJCXJlZyArPSBPTUFQMTUxMF9HUElPX0lOVF9DT05UUk9MOworCQlsID0gX19yYXdfcmVhZGwocmVnKTsKKwkJaWYgKGVkZ2UgPT0gT01BUF9HUElPX1JJU0lOR19FREdFKQorCQkJbCB8PSAxIDw8IGdwaW87CisJCWVsc2UKKwkJCWwgJj0gfigxIDw8IGdwaW8pOworCQlfX3Jhd193cml0ZWwobCwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSBNRVRIT0RfR1BJT18xNjEwOgorCQllZGdlICY9IDB4MDM7CisJCWlmIChncGlvICYgMHgwOCkKKwkJCXJlZyArPSBPTUFQMTYxMF9HUElPX0VER0VfQ1RSTDI7CisJCWVsc2UKKwkJCXJlZyArPSBPTUFQMTYxMF9HUElPX0VER0VfQ1RSTDE7CisJCWdwaW8gJj0gMHgwNzsKKwkJbCA9IF9fcmF3X3JlYWRsKHJlZyk7CisJCWwgJj0gfigzIDw8IChncGlvIDw8IDEpKTsKKwkJbCB8PSBlZGdlIDw8IChncGlvIDw8IDEpOworCQlfX3Jhd193cml0ZWwobCwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSBNRVRIT0RfR1BJT183MzA6CisJCXJlZyArPSBPTUFQNzMwX0dQSU9fSU5UX0NPTlRST0w7CisJCWwgPSBfX3Jhd19yZWFkbChyZWcpOworCQlpZiAoZWRnZSA9PSBPTUFQX0dQSU9fUklTSU5HX0VER0UpCisJCQlsIHw9IDEgPDwgZ3BpbzsKKwkJZWxzZQorCQkJbCAmPSB+KDEgPDwgZ3Bpbyk7CisJCV9fcmF3X3dyaXRlbChsLCByZWcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuOworCX0KK30KKwordm9pZCBvbWFwX3NldF9ncGlvX2VkZ2VfY3RybChpbnQgZ3BpbywgaW50IGVkZ2UpCit7CisJc3RydWN0IGdwaW9fYmFuayAqYmFuazsKKworCWlmIChjaGVja19ncGlvKGdwaW8pIDwgMCkKKwkJcmV0dXJuOworCWJhbmsgPSBnZXRfZ3Bpb19iYW5rKGdwaW8pOworCXNwaW5fbG9jaygmYmFuay0+bG9jayk7CisJX3NldF9ncGlvX2VkZ2VfY3RybChiYW5rLCBnZXRfZ3Bpb19pbmRleChncGlvKSwgZWRnZSk7CisJc3Bpbl91bmxvY2soJmJhbmstPmxvY2spOworfQorCisKK3N0YXRpYyBpbnQgX2dldF9ncGlvX2VkZ2VfY3RybChzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rLCBpbnQgZ3BpbykKK3sKKwl1MzIgcmVnID0gYmFuay0+YmFzZSwgbDsKKworCXN3aXRjaCAoYmFuay0+bWV0aG9kKSB7CisJY2FzZSBNRVRIT0RfTVBVSU86CisJCWwgPSBfX3Jhd19yZWFkbChyZWcgKyBPTUFQX01QVUlPX0dQSU9fSU5UX0VER0UpOworCQlyZXR1cm4gKGwgJiAoMSA8PCBncGlvKSkgPworCQkJT01BUF9HUElPX1JJU0lOR19FREdFIDogT01BUF9HUElPX0ZBTExJTkdfRURHRTsKKwljYXNlIE1FVEhPRF9HUElPXzE1MTA6CisJCWwgPSBfX3Jhd19yZWFkbChyZWcgKyBPTUFQMTUxMF9HUElPX0lOVF9DT05UUk9MKTsKKwkJcmV0dXJuIChsICYgKDEgPDwgZ3BpbykpID8KKwkJCU9NQVBfR1BJT19SSVNJTkdfRURHRSA6IE9NQVBfR1BJT19GQUxMSU5HX0VER0U7CisJY2FzZSBNRVRIT0RfR1BJT18xNjEwOgorCQlpZiAoZ3BpbyAmIDB4MDgpCisJCQlyZWcgKz0gT01BUDE2MTBfR1BJT19FREdFX0NUUkwyOworCQllbHNlCisJCQlyZWcgKz0gT01BUDE2MTBfR1BJT19FREdFX0NUUkwxOworCQlyZXR1cm4gKF9fcmF3X3JlYWRsKHJlZykgPj4gKChncGlvICYgMHgwNykgPDwgMSkpICYgMHgwMzsKKwljYXNlIE1FVEhPRF9HUElPXzczMDoKKwkJbCA9IF9fcmF3X3JlYWRsKHJlZyArIE9NQVA3MzBfR1BJT19JTlRfQ09OVFJPTCk7CisJCXJldHVybiAobCAmICgxIDw8IGdwaW8pKSA/CisJCQlPTUFQX0dQSU9fUklTSU5HX0VER0UgOiBPTUFQX0dQSU9fRkFMTElOR19FREdFOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm4gLTE7CisJfQorfQorCitzdGF0aWMgdm9pZCBfY2xlYXJfZ3Bpb19pcnFiYW5rKHN0cnVjdCBncGlvX2JhbmsgKmJhbmssIGludCBncGlvX21hc2spCit7CisJdTMyIHJlZyA9IGJhbmstPmJhc2U7CisKKwlzd2l0Y2ggKGJhbmstPm1ldGhvZCkgeworCWNhc2UgTUVUSE9EX01QVUlPOgorCQkvKiBNUFVJTyBpcnFzdGF0dXMgaXMgcmVzZXQgYnkgcmVhZGluZyB0aGUgc3RhdHVzIHJlZ2lzdGVyLAorCQkgKiBzbyBkbyBub3RoaW5nIGhlcmUgKi8KKwkJcmV0dXJuOworCWNhc2UgTUVUSE9EX0dQSU9fMTUxMDoKKwkJcmVnICs9IE9NQVAxNTEwX0dQSU9fSU5UX1NUQVRVUzsKKwkJYnJlYWs7CisJY2FzZSBNRVRIT0RfR1BJT18xNjEwOgorCQlyZWcgKz0gT01BUDE2MTBfR1BJT19JUlFTVEFUVVMxOworCQlicmVhazsKKwljYXNlIE1FVEhPRF9HUElPXzczMDoKKwkJcmVnICs9IE9NQVA3MzBfR1BJT19JTlRfU1RBVFVTOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuOworCX0KKwlfX3Jhd193cml0ZWwoZ3Bpb19tYXNrLCByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2NsZWFyX2dwaW9faXJxc3RhdHVzKHN0cnVjdCBncGlvX2JhbmsgKmJhbmssIGludCBncGlvKQoreworCV9jbGVhcl9ncGlvX2lycWJhbmsoYmFuaywgMSA8PCBnZXRfZ3Bpb19pbmRleChncGlvKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9lbmFibGVfZ3Bpb19pcnFiYW5rKHN0cnVjdCBncGlvX2JhbmsgKmJhbmssIGludCBncGlvX21hc2ssIGludCBlbmFibGUpCit7CisJdTMyIHJlZyA9IGJhbmstPmJhc2U7CisJdTMyIGw7CisKKwlzd2l0Y2ggKGJhbmstPm1ldGhvZCkgeworCWNhc2UgTUVUSE9EX01QVUlPOgorCQlyZWcgKz0gT01BUF9NUFVJT19HUElPX01BU0tJVDsKKwkJbCA9IF9fcmF3X3JlYWRsKHJlZyk7CisJCWlmIChlbmFibGUpCisJCQlsICY9IH4oZ3Bpb19tYXNrKTsKKwkJZWxzZQorCQkJbCB8PSBncGlvX21hc2s7CisJCWJyZWFrOworCWNhc2UgTUVUSE9EX0dQSU9fMTUxMDoKKwkJcmVnICs9IE9NQVAxNTEwX0dQSU9fSU5UX01BU0s7CisJCWwgPSBfX3Jhd19yZWFkbChyZWcpOworCQlpZiAoZW5hYmxlKQorCQkJbCAmPSB+KGdwaW9fbWFzayk7CisJCWVsc2UKKwkJCWwgfD0gZ3Bpb19tYXNrOworCQlicmVhazsKKwljYXNlIE1FVEhPRF9HUElPXzE2MTA6CisJCWlmIChlbmFibGUpCisJCQlyZWcgKz0gT01BUDE2MTBfR1BJT19TRVRfSVJRRU5BQkxFMTsKKwkJZWxzZQorCQkJcmVnICs9IE9NQVAxNjEwX0dQSU9fQ0xFQVJfSVJRRU5BQkxFMTsKKwkJbCA9IGdwaW9fbWFzazsKKwkJYnJlYWs7CisJY2FzZSBNRVRIT0RfR1BJT183MzA6CisJCXJlZyArPSBPTUFQNzMwX0dQSU9fSU5UX01BU0s7CisJCWwgPSBfX3Jhd19yZWFkbChyZWcpOworCQlpZiAoZW5hYmxlKQorCQkJbCAmPSB+KGdwaW9fbWFzayk7CisJCWVsc2UKKwkJCWwgfD0gZ3Bpb19tYXNrOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuOworCX0KKwlfX3Jhd193cml0ZWwobCwgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9zZXRfZ3Bpb19pcnFlbmFibGUoc3RydWN0IGdwaW9fYmFuayAqYmFuaywgaW50IGdwaW8sIGludCBlbmFibGUpCit7CisJX2VuYWJsZV9ncGlvX2lycWJhbmsoYmFuaywgMSA8PCBnZXRfZ3Bpb19pbmRleChncGlvKSwgZW5hYmxlKTsKK30KKworaW50IG9tYXBfcmVxdWVzdF9ncGlvKGludCBncGlvKQoreworCXN0cnVjdCBncGlvX2JhbmsgKmJhbms7CisKKwlpZiAoY2hlY2tfZ3BpbyhncGlvKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJYmFuayA9IGdldF9ncGlvX2JhbmsoZ3Bpbyk7CisJc3Bpbl9sb2NrKCZiYW5rLT5sb2NrKTsKKwlpZiAodW5saWtlbHkoYmFuay0+cmVzZXJ2ZWRfbWFwICYgKDEgPDwgZ2V0X2dwaW9faW5kZXgoZ3BpbykpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm9tYXAtZ3BpbzogR1BJTyAlZCBpcyBhbHJlYWR5IHJlc2VydmVkIVxuIiwgZ3Bpbyk7CisJCWR1bXBfc3RhY2soKTsKKwkJc3Bpbl91bmxvY2soJmJhbmstPmxvY2spOworCQlyZXR1cm4gLTE7CisJfQorCWJhbmstPnJlc2VydmVkX21hcCB8PSAoMSA8PCBnZXRfZ3Bpb19pbmRleChncGlvKSk7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKwlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzE1MTApIHsKKwkJdTMyIHJlZzsKKworCQkvKiBDbGFpbSB0aGUgcGluIGZvciB0aGUgQVJNICovCisJCXJlZyA9IGJhbmstPmJhc2UgKyBPTUFQMTUxMF9HUElPX1BJTl9DT05UUk9MOworCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwocmVnKSB8ICgxIDw8IGdldF9ncGlvX2luZGV4KGdwaW8pKSwgcmVnKTsKKwl9CisjZW5kaWYKKwlzcGluX3VubG9jaygmYmFuay0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBvbWFwX2ZyZWVfZ3BpbyhpbnQgZ3BpbykKK3sKKwlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rOworCisJaWYgKGNoZWNrX2dwaW8oZ3BpbykgPCAwKQorCQlyZXR1cm47CisJYmFuayA9IGdldF9ncGlvX2JhbmsoZ3Bpbyk7CisJc3Bpbl9sb2NrKCZiYW5rLT5sb2NrKTsKKwlpZiAodW5saWtlbHkoIShiYW5rLT5yZXNlcnZlZF9tYXAgJiAoMSA8PCBnZXRfZ3Bpb19pbmRleChncGlvKSkpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm9tYXAtZ3BpbzogR1BJTyAlZCB3YXNuJ3QgcmVzZXJ2ZWQhXG4iLCBncGlvKTsKKwkJZHVtcF9zdGFjaygpOworCQlzcGluX3VubG9jaygmYmFuay0+bG9jayk7CisJCXJldHVybjsKKwl9CisJYmFuay0+cmVzZXJ2ZWRfbWFwICY9IH4oMSA8PCBnZXRfZ3Bpb19pbmRleChncGlvKSk7CisJX3NldF9ncGlvX2RpcmVjdGlvbihiYW5rLCBnZXRfZ3Bpb19pbmRleChncGlvKSwgMSk7CisJX3NldF9ncGlvX2lycWVuYWJsZShiYW5rLCBncGlvLCAwKTsKKwlfY2xlYXJfZ3Bpb19pcnFzdGF0dXMoYmFuaywgZ3Bpbyk7CisJc3Bpbl91bmxvY2soJmJhbmstPmxvY2spOworfQorCisvKgorICogV2UgbmVlZCB0byB1bm1hc2sgdGhlIEdQSU8gYmFuayBpbnRlcnJ1cHQgYXMgc29vbiBhcyBwb3NzaWJsZSB0bworICogYXZvaWQgbWlzc2luZyBHUElPIGludGVycnVwdHMgZm9yIG90aGVyIGxpbmVzIGluIHRoZSBiYW5rLgorICogVGhlbiB3ZSBuZWVkIHRvIG1hc2stcmVhZC1jbGVhci11bm1hc2sgdGhlIHRyaWdnZXJlZCBHUElPIGxpbmVzCisgKiBpbiB0aGUgYmFuayB0byBhdm9pZCBtaXNzaW5nIG5lc3RlZCBpbnRlcnJ1cHRzIGZvciBhIEdQSU8gbGluZS4KKyAqIElmIHdlIHdhaXQgdG8gdW5tYXNrIGluZGl2aWR1YWwgR1BJTyBsaW5lcyBpbiB0aGUgYmFuayBhZnRlciB0aGUKKyAqIGxpbmUncyBpbnRlcnJ1cHQgaGFuZGxlciBoYXMgYmVlbiBydW4sIHdlIG1heSBtaXNzIHNvbWUgbmVzdGVkCisgKiBpbnRlcnJ1cHRzLgorICovCitzdGF0aWMgdm9pZCBncGlvX2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFkZXNjICpkZXNjLAorCQkJICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1MzIgaXNyX3JlZyA9IDA7CisJdTMyIGlzcjsKKwl1bnNpZ25lZCBpbnQgZ3Bpb19pcnE7CisJc3RydWN0IGdwaW9fYmFuayAqYmFuazsKKworCWRlc2MtPmNoaXAtPmFjayhpcnEpOworCisJYmFuayA9IChzdHJ1Y3QgZ3Bpb19iYW5rICopIGRlc2MtPmRhdGE7CisJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfTVBVSU8pCisJCWlzcl9yZWcgPSBiYW5rLT5iYXNlICsgT01BUF9NUFVJT19HUElPX0lOVDsKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMTUxMCkKKwkJaXNyX3JlZyA9IGJhbmstPmJhc2UgKyBPTUFQMTUxMF9HUElPX0lOVF9TVEFUVVM7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQorCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMTYxMCkKKwkJaXNyX3JlZyA9IGJhbmstPmJhc2UgKyBPTUFQMTYxMF9HUElPX0lSUVNUQVRVUzE7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCisJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT183MzApCisJCWlzcl9yZWcgPSBiYW5rLT5iYXNlICsgT01BUDczMF9HUElPX0lOVF9TVEFUVVM7CisjZW5kaWYKKworCWlzciA9IF9fcmF3X3JlYWRsKGlzcl9yZWcpOworCV9lbmFibGVfZ3Bpb19pcnFiYW5rKGJhbmssIGlzciwgMCk7CisJX2NsZWFyX2dwaW9faXJxYmFuayhiYW5rLCBpc3IpOworCV9lbmFibGVfZ3Bpb19pcnFiYW5rKGJhbmssIGlzciwgMSk7CisJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CisKKwlpZiAodW5saWtlbHkoIWlzcikpCisJCXJldHVybjsKKworCWdwaW9faXJxID0gYmFuay0+dmlydHVhbF9pcnFfc3RhcnQ7CisJZm9yICg7IGlzciAhPSAwOyBpc3IgPj49IDEsIGdwaW9faXJxKyspIHsKKwkJc3RydWN0IGlycWRlc2MgKmQ7CisJCWlmICghKGlzciAmIDEpKQorCQkJY29udGludWU7CisJCWQgPSBpcnFfZGVzYyArIGdwaW9faXJxOworCQlkLT5oYW5kbGUoZ3Bpb19pcnEsIGQsIHJlZ3MpOworCX0KK30KKworc3RhdGljIHZvaWQgZ3Bpb19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IGdwaW8gPSBpcnEgLSBJSF9HUElPX0JBU0U7CisJc3RydWN0IGdwaW9fYmFuayAqYmFuayA9IGdldF9ncGlvX2JhbmsoZ3Bpbyk7CisKKwlfY2xlYXJfZ3Bpb19pcnFzdGF0dXMoYmFuaywgZ3Bpbyk7Cit9CisKK3N0YXRpYyB2b2lkIGdwaW9fbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgZ3BpbyA9IGlycSAtIElIX0dQSU9fQkFTRTsKKwlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rID0gZ2V0X2dwaW9fYmFuayhncGlvKTsKKworCV9zZXRfZ3Bpb19pcnFlbmFibGUoYmFuaywgZ3BpbywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGdwaW9fdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCBncGlvID0gaXJxIC0gSUhfR1BJT19CQVNFOworCXN0cnVjdCBncGlvX2JhbmsgKmJhbmsgPSBnZXRfZ3Bpb19iYW5rKGdwaW8pOworCisJaWYgKF9nZXRfZ3Bpb19lZGdlX2N0cmwoYmFuaywgZ2V0X2dwaW9faW5kZXgoZ3BpbykpID09IE9NQVBfR1BJT19OT19FREdFKSB7CisJCXByaW50ayhLRVJOX0VSUiAiT01BUCBHUElPICVkOiB0cnlpbmcgdG8gZW5hYmxlIEdQSU8gSVJRIHdoaWxlIG5vIGVkZ2UgaXMgc2V0XG4iLAorCQkgICAgICAgZ3Bpbyk7CisJCV9zZXRfZ3Bpb19lZGdlX2N0cmwoYmFuaywgZ2V0X2dwaW9faW5kZXgoZ3BpbyksIE9NQVBfR1BJT19SSVNJTkdfRURHRSk7CisJfQorCV9zZXRfZ3Bpb19pcnFlbmFibGUoYmFuaywgZ3BpbywgMSk7Cit9CisKK3N0YXRpYyB2b2lkIG1wdWlvX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwkvKiBUaGUgSVNSIGlzIHJlc2V0IGF1dG9tYXRpY2FsbHksIHNvIGRvIG5vdGhpbmcgaGVyZS4gKi8KK30KKworc3RhdGljIHZvaWQgbXB1aW9fbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgZ3BpbyA9IE9NQVBfTVBVSU8oaXJxIC0gSUhfTVBVSU9fQkFTRSk7CisJc3RydWN0IGdwaW9fYmFuayAqYmFuayA9IGdldF9ncGlvX2JhbmsoZ3Bpbyk7CisKKwlfc2V0X2dwaW9faXJxZW5hYmxlKGJhbmssIGdwaW8sIDApOworfQorCitzdGF0aWMgdm9pZCBtcHVpb191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IGdwaW8gPSBPTUFQX01QVUlPKGlycSAtIElIX01QVUlPX0JBU0UpOworCXN0cnVjdCBncGlvX2JhbmsgKmJhbmsgPSBnZXRfZ3Bpb19iYW5rKGdwaW8pOworCisJX3NldF9ncGlvX2lycWVuYWJsZShiYW5rLCBncGlvLCAxKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIGdwaW9faXJxX2NoaXAgPSB7CisJLmFjawk9IGdwaW9fYWNrX2lycSwKKwkubWFzawk9IGdwaW9fbWFza19pcnEsCisJLnVubWFzayA9IGdwaW9fdW5tYXNrX2lycSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBtcHVpb19pcnFfY2hpcCA9IHsKKwkuYWNrCT0gbXB1aW9fYWNrX2lycSwKKwkubWFzawk9IG1wdWlvX21hc2tfaXJxLAorCS51bm1hc2sgPSBtcHVpb191bm1hc2tfaXJxCit9OworCitzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKKworc3RhdGljIGludCBfX2luaXQgX29tYXBfZ3Bpb19pbml0KHZvaWQpCit7CisJaW50IGk7CisJc3RydWN0IGdwaW9fYmFuayAqYmFuazsKKworCWluaXRpYWxpemVkID0gMTsKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIk9NQVAxNTEwIEdQSU8gaGFyZHdhcmVcbiIpOworCQlncGlvX2JhbmtfY291bnQgPSAyOworCQlncGlvX2JhbmsgPSBncGlvX2JhbmtfMTUxMDsKKwl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQorCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQlpbnQgcmV2OworCisJCWdwaW9fYmFua19jb3VudCA9IDU7CisJCWdwaW9fYmFuayA9IGdwaW9fYmFua18xNjEwOworCQlyZXYgPSBvbWFwX3JlYWR3KGdwaW9fYmFua1sxXS5iYXNlICsgT01BUDE2MTBfR1BJT19SRVZJU0lPTik7CisJCXByaW50ayhLRVJOX0lORk8gIk9NQVAgR1BJTyBoYXJkd2FyZSB2ZXJzaW9uICVkLiVkXG4iLAorCQkgICAgICAgKHJldiA+PiA0KSAmIDB4MGYsIHJldiAmIDB4MGYpOworCX0KKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVA3MzAKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJPTUFQNzMwIEdQSU8gaGFyZHdhcmVcbiIpOworCQlncGlvX2JhbmtfY291bnQgPSA3OworCQlncGlvX2JhbmsgPSBncGlvX2JhbmtfNzMwOworCX0KKyNlbmRpZgorCWZvciAoaSA9IDA7IGkgPCBncGlvX2JhbmtfY291bnQ7IGkrKykgeworCQlpbnQgaiwgZ3Bpb19jb3VudCA9IDE2OworCisJCWJhbmsgPSAmZ3Bpb19iYW5rW2ldOworCQliYW5rLT5yZXNlcnZlZF9tYXAgPSAwOworCQliYW5rLT5iYXNlID0gSU9fQUREUkVTUyhiYW5rLT5iYXNlKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmJhbmstPmxvY2spOworCQlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9NUFVJTykgeworCQkJb21hcF93cml0ZXcoMHhGRkZGLCBPTUFQX01QVUlPX0JBU0UgKyBPTUFQX01QVUlPX0dQSU9fTUFTS0lUKTsKKwkJfQorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisJCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMTUxMCkgeworCQkJX19yYXdfd3JpdGV3KDB4ZmZmZiwgYmFuay0+YmFzZSArIE9NQVAxNTEwX0dQSU9fSU5UX01BU0spOworCQkJX19yYXdfd3JpdGV3KDB4MDAwMCwgYmFuay0+YmFzZSArIE9NQVAxNTEwX0dQSU9fSU5UX1NUQVRVUyk7CisJCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCisJCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMTYxMCkgeworCQkJX19yYXdfd3JpdGV3KDB4MDAwMCwgYmFuay0+YmFzZSArIE9NQVAxNjEwX0dQSU9fSVJRRU5BQkxFMSk7CisJCQlfX3Jhd193cml0ZXcoMHhmZmZmLCBiYW5rLT5iYXNlICsgT01BUDE2MTBfR1BJT19JUlFTVEFUVVMxKTsKKwkJfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAorCQlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzczMCkgeworCQkJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGJhbmstPmJhc2UgKyBPTUFQNzMwX0dQSU9fSU5UX01BU0spOworCQkJX19yYXdfd3JpdGVsKDB4MDAwMDAwMDAsIGJhbmstPmJhc2UgKyBPTUFQNzMwX0dQSU9fSU5UX1NUQVRVUyk7CisKKwkJCWdwaW9fY291bnQgPSAzMjsgLyogNzMwIGhhcyAzMi1iaXQgR1BJT3MgKi8KKwkJfQorI2VuZGlmCisJCWZvciAoaiA9IGJhbmstPnZpcnR1YWxfaXJxX3N0YXJ0OworCQkgICAgIGogPCBiYW5rLT52aXJ0dWFsX2lycV9zdGFydCArIGdwaW9fY291bnQ7IGorKykgeworCQkJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfTVBVSU8pCisJCQkJc2V0X2lycV9jaGlwKGosICZtcHVpb19pcnFfY2hpcCk7CisJCQllbHNlCisJCQkJc2V0X2lycV9jaGlwKGosICZncGlvX2lycV9jaGlwKTsKKwkJCXNldF9pcnFfaGFuZGxlcihqLCBkb19zaW1wbGVfSVJRKTsKKwkJCXNldF9pcnFfZmxhZ3MoaiwgSVJRRl9WQUxJRCk7CisJCX0KKwkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoYmFuay0+aXJxLCBncGlvX2lycV9oYW5kbGVyKTsKKwkJc2V0X2lycV9kYXRhKGJhbmstPmlycSwgYmFuayk7CisJfQorCisJLyogRW5hYmxlIHN5c3RlbSBjbG9jayBmb3IgR1BJTyBtb2R1bGUuCisJICogVGhlIENBTV9DTEtfQ1RSTCAqaXMqIHJlYWxseSB0aGUgcmlnaHQgcGxhY2UuICovCisJaWYgKGNwdV9pc19vbWFwMTYxMCgpIHx8IGNwdV9pc19vbWFwMTcxMCgpKQorCQlvbWFwX3dyaXRlbChvbWFwX3JlYWRsKFVMUERfQ0FNX0NMS19DVFJMKSB8IDB4MDQsIFVMUERfQ0FNX0NMS19DVFJMKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBtYXkgZ2V0IGNhbGxlZCBlYXJseSBmcm9tIGJvYXJkIHNwZWNpZmljIGluaXQKKyAqLworaW50IG9tYXBfZ3Bpb19pbml0KHZvaWQpCit7CisJaWYgKCFpbml0aWFsaXplZCkKKwkJcmV0dXJuIF9vbWFwX2dwaW9faW5pdCgpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0wob21hcF9yZXF1ZXN0X2dwaW8pOworRVhQT1JUX1NZTUJPTChvbWFwX2ZyZWVfZ3Bpbyk7CitFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKTsKK0VYUE9SVF9TWU1CT0wob21hcF9zZXRfZ3Bpb19kYXRhb3V0KTsKK0VYUE9SVF9TWU1CT0wob21hcF9nZXRfZ3Bpb19kYXRhaW4pOworRVhQT1JUX1NZTUJPTChvbWFwX3NldF9ncGlvX2VkZ2VfY3RybCk7CisKK2FyY2hfaW5pdGNhbGwob21hcF9ncGlvX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwL2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMWM5OTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAvaXJxLmMKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvaXJxLmMKKyAqCisgKiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgYWxsIE9NQVAgYm9hcmRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IE5va2lhIENvcnBvcmF0aW9uCisgKiBXcml0dGVuIGJ5IFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CisgKiBNYWpvciBjbGVhbnVwcyBieSBKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgorICoKKyAqIENvbXBsZXRlbHkgcmUtd3JpdHRlbiB0byBzdXBwb3J0IHZhcmlvdXMgT01BUCBjaGlwcyB3aXRoIGJhbmsgc3BlY2lmaWMKKyAqIGludGVycnVwdCBoYW5kbGVycy4KKyAqCisgKiBTb21lIHNuaXBwZXRzIG9mIHRoZSBjb2RlIHRha2VuIGZyb20gdGhlIG9sZGVyIE9NQVAgaW50ZXJydXB0IGhhbmRsZXIKKyAqIENvcHlyaWdodCAoQykgMjAwMSBSaWRnZVJ1biwgSW5jLiBHcmVnIExvbm5vbiA8Z2xvbm5vbkByaWRnZXJ1bi5jb20+CisgKgorICogR1BJTyBpbnRlcnJ1cHQgaGFuZGxlciBtb3ZlZCB0byBncGlvLmMgYnkgSnVoYSBZcmpvbGEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKyAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBJUlFfQkFOSyhpcnEpICgoaXJxKSA+PiA1KQorI2RlZmluZSBJUlFfQklUKGlycSkgICgoaXJxKSAmIDB4MWYpCisKK3N0cnVjdCBvbWFwX2lycV9iYW5rIHsKKwl1bnNpZ25lZCBsb25nIGJhc2VfcmVnOworCXVuc2lnbmVkIGxvbmcgdHJpZ2dlcl9tYXA7Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IGlycV9iYW5rX2NvdW50ID0gMDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9pcnFfYmFuayAqaXJxX2JhbmtzOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcnFfYmFua19yZWFkbChpbnQgYmFuaywgaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gb21hcF9yZWFkbChpcnFfYmFua3NbYmFua10uYmFzZV9yZWcgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2Jhbmtfd3JpdGVsKHVuc2lnbmVkIGxvbmcgdmFsdWUsIGludCBiYW5rLCBpbnQgb2Zmc2V0KQoreworCW9tYXBfd3JpdGVsKHZhbHVlLCBpcnFfYmFua3NbYmFua10uYmFzZV9yZWcgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBvbWFwX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpZiAoaXJxID4gMzEpCisJCW9tYXBfd3JpdGVsKDB4MSwgT01BUF9JSDJfQkFTRSArIElSUV9DT05UUk9MX1JFR19PRkZTRVQpOworCisJb21hcF93cml0ZWwoMHgxLCBPTUFQX0lIMV9CQVNFICsgSVJRX0NPTlRST0xfUkVHX09GRlNFVCk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgYmFuayA9IElSUV9CQU5LKGlycSk7CisJdTMyIGw7CisKKwlsID0gb21hcF9yZWFkbChpcnFfYmFua3NbYmFua10uYmFzZV9yZWcgKyBJUlFfTUlSX1JFR19PRkZTRVQpOworCWwgfD0gMSA8PCBJUlFfQklUKGlycSk7CisJb21hcF93cml0ZWwobCwgaXJxX2JhbmtzW2JhbmtdLmJhc2VfcmVnICsgSVJRX01JUl9SRUdfT0ZGU0VUKTsKK30KKworc3RhdGljIHZvaWQgb21hcF91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGJhbmsgPSBJUlFfQkFOSyhpcnEpOworCXUzMiBsOworCisJbCA9IG9tYXBfcmVhZGwoaXJxX2JhbmtzW2JhbmtdLmJhc2VfcmVnICsgSVJRX01JUl9SRUdfT0ZGU0VUKTsKKwlsICY9IH4oMSA8PCBJUlFfQklUKGlycSkpOworCW9tYXBfd3JpdGVsKGwsIGlycV9iYW5rc1tiYW5rXS5iYXNlX3JlZyArIElSUV9NSVJfUkVHX09GRlNFVCk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfbWFza19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJb21hcF9tYXNrX2lycShpcnEpOworCW9tYXBfYWNrX2lycShpcnEpOworfQorCisvKgorICogQWxsb3dzIHR1bmluZyB0aGUgSVJRIHR5cGUgYW5kIHByaW9yaXR5CisgKgorICogTk9URTogVGhlcmUgaXMgY3VycmVudGx5IG5vIE9NQVAgZmlxIGhhbmRsZXIgZm9yIExpbnV4LiBSZWFkIHRoZQorICoJIG1haWxpbmcgbGlzdCB0aHJlYWRzIG9uIEZJUSBoYW5kbGVycyBpZiB5b3UgYXJlIHBsYW5uaW5nIHRvCisgKgkgYWRkIGEgRklRIGhhbmRsZXIgZm9yIE9NQVAuCisgKi8KK3N0YXRpYyB2b2lkIG9tYXBfaXJxX3NldF9jZmcoaW50IGlycSwgaW50IGZpcSwgaW50IHByaW9yaXR5LCBpbnQgdHJpZ2dlcikKK3sKKwlzaWduZWQgaW50IGJhbms7CisJdW5zaWduZWQgbG9uZyB2YWwsIG9mZnNldDsKKworCWJhbmsgPSBJUlFfQkFOSyhpcnEpOworCS8qIEZJUSBpcyBvbmx5IGF2YWlsYWJsZSBvbiBiYW5rIDAgaW50ZXJydXB0cyAqLworCWZpcSA9IGJhbmsgPyAwIDogKGZpcSAmIDB4MSk7CisJdmFsID0gZmlxIHwgKChwcmlvcml0eSAmIDB4MWYpIDw8IDIpIHwgKCh0cmlnZ2VyICYgMHgxKSA8PCAxKTsKKwlvZmZzZXQgPSBJUlFfSUxSMF9SRUdfT0ZGU0VUICsgSVJRX0JJVChpcnEpICogMHg0OworCWlycV9iYW5rX3dyaXRlbCh2YWwsIGJhbmssIG9mZnNldCk7Cit9CisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCitzdGF0aWMgc3RydWN0IG9tYXBfaXJxX2Jhbmsgb21hcDczMF9pcnFfYmFua3NbXSA9IHsKKwl7IC5iYXNlX3JlZyA9IE9NQVBfSUgxX0JBU0UsIAkJLnRyaWdnZXJfbWFwID0gMHhiM2Y4ZTIyZiB9LAorCXsgLmJhc2VfcmVnID0gT01BUF9JSDJfQkFTRSwgCQkudHJpZ2dlcl9tYXAgPSAweGZkYjljMWYyIH0sCisJeyAuYmFzZV9yZWcgPSBPTUFQX0lIMl9CQVNFICsgMHgxMDAsCS50cmlnZ2VyX21hcCA9IDB4ODAwMDQwZjMgfSwKK307CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCitzdGF0aWMgc3RydWN0IG9tYXBfaXJxX2Jhbmsgb21hcDE1MTBfaXJxX2JhbmtzW10gPSB7CisJeyAuYmFzZV9yZWcgPSBPTUFQX0lIMV9CQVNFLCAJCS50cmlnZ2VyX21hcCA9IDB4YjNmZWJmZmYgfSwKKwl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsIAkJLnRyaWdnZXJfbWFwID0gMHhmZmJmZmZlZCB9LAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKKworc3RhdGljIHN0cnVjdCBvbWFwX2lycV9iYW5rIG9tYXAxNjEwX2lycV9iYW5rc1tdID0geworCXsgLmJhc2VfcmVnID0gT01BUF9JSDFfQkFTRSwgCQkudHJpZ2dlcl9tYXAgPSAweGIzZmVmZThmIH0sCisJeyAuYmFzZV9yZWcgPSBPTUFQX0lIMl9CQVNFLCAJCS50cmlnZ2VyX21hcCA9IDB4ZmRiN2MxZmQgfSwKKwl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UgKyAweDEwMCwJLnRyaWdnZXJfbWFwID0gMHhmZmZmZjdmZiB9LAorCXsgLmJhc2VfcmVnID0gT01BUF9JSDJfQkFTRSArIDB4MjAwLAkudHJpZ2dlcl9tYXAgPSAweGZmZmZmZmZmIH0sCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBvbWFwX2lycV9jaGlwID0geworCS5hY2sgICAgPSBvbWFwX21hc2tfYWNrX2lycSwKKwkubWFzayAgID0gb21hcF9tYXNrX2lycSwKKwkudW5tYXNrID0gb21hcF91bm1hc2tfaXJxLAorfTsKKwordm9pZCBfX2luaXQgb21hcF9pbml0X2lycSh2b2lkKQoreworCWludCBpLCBqOworCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAorCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJCWlycV9iYW5rcyA9IG9tYXA3MzBfaXJxX2JhbmtzOworCQlpcnFfYmFua19jb3VudCA9IEFSUkFZX1NJWkUob21hcDczMF9pcnFfYmFua3MpOworCX0KKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJCWlycV9iYW5rcyA9IG9tYXAxNTEwX2lycV9iYW5rczsKKwkJaXJxX2JhbmtfY291bnQgPSBBUlJBWV9TSVpFKG9tYXAxNTEwX2lycV9iYW5rcyk7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKKwlpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKKwkJaXJxX2JhbmtzID0gb21hcDE2MTBfaXJxX2JhbmtzOworCQlpcnFfYmFua19jb3VudCA9IEFSUkFZX1NJWkUob21hcDE2MTBfaXJxX2JhbmtzKTsKKwl9CisjZW5kaWYKKwlwcmludGsoIlRvdGFsIG9mICVpIGludGVycnVwdHMgaW4gJWkgaW50ZXJydXB0IGJhbmtzXG4iLAorCSAgICAgICBpcnFfYmFua19jb3VudCAqIDMyLCBpcnFfYmFua19jb3VudCk7CisKKwkvKiBNYXNrIGFuZCBjbGVhciBhbGwgaW50ZXJydXB0cyAqLworCWZvciAoaSA9IDA7IGkgPCBpcnFfYmFua19jb3VudDsgaSsrKSB7CisJCWlycV9iYW5rX3dyaXRlbCh+MHgwLCBpLCBJUlFfTUlSX1JFR19PRkZTRVQpOworCQlpcnFfYmFua193cml0ZWwoMHgwLCBpLCBJUlFfSVRSX1JFR19PRkZTRVQpOworCX0KKworCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMgKi8KKwlpcnFfYmFua193cml0ZWwoMHgwMywgMCwgSVJRX0NPTlRST0xfUkVHX09GRlNFVCk7CisJaXJxX2Jhbmtfd3JpdGVsKDB4MDMsIDEsIElSUV9DT05UUk9MX1JFR19PRkZTRVQpOworCisJLyogRW5hYmxlIGludGVycnVwdHMgaW4gZ2xvYmFsIG1hc2sgKi8KKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkgeworCQlpcnFfYmFua193cml0ZWwoMHgwLCAwLCBJUlFfR01SX1JFR19PRkZTRVQpOworCX0KKworCS8qIEluc3RhbGwgdGhlIGludGVycnVwdCBoYW5kbGVycyBmb3IgZWFjaCBiYW5rICovCisJZm9yIChpID0gMDsgaSA8IGlycV9iYW5rX2NvdW50OyBpKyspIHsKKwkJZm9yIChqID0gaSAqIDMyOyBqIDwgKGkgKyAxKSAqIDMyOyBqKyspIHsKKwkJCWludCBpcnFfdHJpZ2dlcjsKKworCQkJaXJxX3RyaWdnZXIgPSBpcnFfYmFua3NbaV0udHJpZ2dlcl9tYXAgPj4gSVJRX0JJVChqKTsKKwkJCW9tYXBfaXJxX3NldF9jZmcoaiwgMCwgMCwgaXJxX3RyaWdnZXIpOworCisJCQlzZXRfaXJxX2NoaXAoaiwgJm9tYXBfaXJxX2NoaXApOworCQkJc2V0X2lycV9oYW5kbGVyKGosIGRvX2xldmVsX0lSUSk7CisJCQlzZXRfaXJxX2ZsYWdzKGosIElSUUZfVkFMSUQpOworCQl9CisJfQorCisJLyogVW5tYXNrIGxldmVsIDIgaGFuZGxlciAqLworCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJCW9tYXBfdW5tYXNrX2lycShJTlRfNzMwX0lIMl9JUlEpOworCX0gZWxzZSB7CisJCW9tYXBfdW5tYXNrX2lycShJTlRfSUgyX0lSUSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwL2xlZHMtaDJwMi1kZWJ1Zy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwL2xlZHMtaDJwMi1kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlOTgyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAvbGVkcy1oMnAyLWRlYnVnLmMKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvbGVkcy1oMnAyLWRlYnVnLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwMyBieSBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyAqCisgKiBUaGVyZSBhcmUgMTYgTEVEcyBvbiB0aGUgZGVidWcgYm9hcmQgKGFsbCBncmVlbik7IGZvdXIgbWF5IGJlIHVzZWQKKyAqIGZvciBsb2dpY2FsICdncmVlbicsICdhbWJlcicsICdyZWQnLCBhbmQgJ2JsdWUnIChhZnRlciAiY2xhaW1pbmciKS4KKyAqCisgKiBUaGUgInN1cmZlciIgZXhwYW5zaW9uIGJvYXJkIGFuZCBIMiBzYW1wbGUgYm9hcmQgYWxzbyBoYXZlIHR3by1jb2xvcgorICogZ3JlZW4rcmVkIExFRHMgKGluIHBhcmFsbGVsKSwgdXNlZCBoZXJlIGZvciB0aW1lciBhbmQgaWRsZSBpbmRpY2F0b3JzLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2ZwZ2EuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisKKyNpbmNsdWRlICJsZWRzLmgiCisKKworI2RlZmluZSBHUElPX0xFRF9SRUQJCTMKKyNkZWZpbmUgR1BJT19MRURfR1JFRU4JCU9NQVBfTVBVSU8oNCkKKworCisjZGVmaW5lIExFRF9TVEFURV9FTkFCTEVECTB4MDEKKyNkZWZpbmUgTEVEX1NUQVRFX0NMQUlNRUQJMHgwMgorI2RlZmluZSBMRURfVElNRVJfT04JCTB4MDQKKworI2RlZmluZSBHUElPX0lETEUJCUdQSU9fTEVEX0dSRUVOCisjZGVmaW5lIEdQSU9fVElNRVIJCUdQSU9fTEVEX1JFRAorCisKK3ZvaWQgaDJwMl9kYmdfbGVkc19ldmVudChsZWRfZXZlbnRfdCBldnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXN0YXRpYyBzdHJ1Y3QgaDJwMl9kYmdfZnBnYSBfX2lvbWVtICpmcGdhOworCXN0YXRpYyB1MTYgbGVkX3N0YXRlLCBod19sZWRfc3RhdGU7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlpZiAoIShsZWRfc3RhdGUgJiBMRURfU1RBVEVfRU5BQkxFRCkgJiYgZXZ0ICE9IGxlZF9zdGFydCkKKwkJZ290byBkb25lOworCisJc3dpdGNoIChldnQpIHsKKwljYXNlIGxlZF9zdGFydDoKKwkJaWYgKCFmcGdhKQorCQkJZnBnYSA9IGlvcmVtYXAoSDJQMl9EQkdfRlBHQV9TVEFSVCwKKwkJCQkJCUgyUDJfREJHX0ZQR0FfU0laRSk7CisJCWlmIChmcGdhKSB7CisJCQlsZWRfc3RhdGUgfD0gTEVEX1NUQVRFX0VOQUJMRUQ7CisJCQlfX3Jhd193cml0ZXcofjAsICZmcGdhLT5sZWRzKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgbGVkX3N0b3A6CisJY2FzZSBsZWRfaGFsdGVkOgorCQkvKiBhbGwgbGVkcyBvZmYgZHVyaW5nIHN1c3BlbmQgb3Igc2h1dGRvd24gKi8KKwkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEdQSU9fVElNRVIsIDApOworCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoR1BJT19JRExFLCAwKTsKKwkJX19yYXdfd3JpdGV3KH4wLCAmZnBnYS0+bGVkcyk7CisJCWxlZF9zdGF0ZSAmPSB+TEVEX1NUQVRFX0VOQUJMRUQ7CisJCWlmIChldnQgPT0gbGVkX2hhbHRlZCkgeworCQkJaW91bm1hcChmcGdhKTsKKwkJCWZwZ2EgPSBOVUxMOworCQl9CisJCWdvdG8gZG9uZTsKKworCWNhc2UgbGVkX2NsYWltOgorCQlsZWRfc3RhdGUgfD0gTEVEX1NUQVRFX0NMQUlNRUQ7CisJCWh3X2xlZF9zdGF0ZSA9IDA7CisJCWJyZWFrOworCisJY2FzZSBsZWRfcmVsZWFzZToKKwkJbGVkX3N0YXRlICY9IH5MRURfU1RBVEVfQ0xBSU1FRDsKKwkJYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfTEVEU19USU1FUgorCWNhc2UgbGVkX3RpbWVyOgorCQlsZWRfc3RhdGUgXj0gTEVEX1RJTUVSX09OOworCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoR1BJT19USU1FUiwgbGVkX3N0YXRlICYgTEVEX1RJTUVSX09OKTsKKwkJZ290byBkb25lOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTEVEU19DUFUKKwljYXNlIGxlZF9pZGxlX3N0YXJ0OgorCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoR1BJT19JRExFLCAxKTsKKwkJZ290byBkb25lOworCisJY2FzZSBsZWRfaWRsZV9lbmQ6CisJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX0lETEUsIDApOworCQlnb3RvIGRvbmU7CisjZW5kaWYKKworCWNhc2UgbGVkX2dyZWVuX29uOgorCQlod19sZWRfc3RhdGUgfD0gSDJQMl9EQkdfRlBHQV9MRURfR1JFRU47CisJCWJyZWFrOworCWNhc2UgbGVkX2dyZWVuX29mZjoKKwkJaHdfbGVkX3N0YXRlICY9IH5IMlAyX0RCR19GUEdBX0xFRF9HUkVFTjsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9hbWJlcl9vbjoKKwkJaHdfbGVkX3N0YXRlIHw9IEgyUDJfREJHX0ZQR0FfTEVEX0FNQkVSOworCQlicmVhazsKKwljYXNlIGxlZF9hbWJlcl9vZmY6CisJCWh3X2xlZF9zdGF0ZSAmPSB+SDJQMl9EQkdfRlBHQV9MRURfQU1CRVI7CisJCWJyZWFrOworCisJY2FzZSBsZWRfcmVkX29uOgorCQlod19sZWRfc3RhdGUgfD0gSDJQMl9EQkdfRlBHQV9MRURfUkVEOworCQlicmVhazsKKwljYXNlIGxlZF9yZWRfb2ZmOgorCQlod19sZWRfc3RhdGUgJj0gfkgyUDJfREJHX0ZQR0FfTEVEX1JFRDsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9ibHVlX29uOgorCQlod19sZWRfc3RhdGUgfD0gSDJQMl9EQkdfRlBHQV9MRURfQkxVRTsKKwkJYnJlYWs7CisJY2FzZSBsZWRfYmx1ZV9vZmY6CisJCWh3X2xlZF9zdGF0ZSAmPSB+SDJQMl9EQkdfRlBHQV9MRURfQkxVRTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKworCS8qCisJICogIEFjdHVhbGx5IGJ1cm4gdGhlIExFRHMKKwkgKi8KKwlpZiAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpCisJCV9fcmF3X3dyaXRldyh+aHdfbGVkX3N0YXRlLCAmZnBnYS0+bGVkcyk7CisKK2RvbmU6CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwL2xlZHMtaW5ub3ZhdG9yLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAvbGVkcy1pbm5vdmF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDQzYjdkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwL2xlZHMtaW5ub3ZhdG9yLmMKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvbGVkcy1pbm5vdmF0b3IuYworICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNpbmNsdWRlICJsZWRzLmgiCisKKworI2RlZmluZSBMRURfU1RBVEVfRU5BQkxFRAkxCisjZGVmaW5lIExFRF9TVEFURV9DTEFJTUVECTIKKworc3RhdGljIHVuc2lnbmVkIGludCBsZWRfc3RhdGU7CitzdGF0aWMgdW5zaWduZWQgaW50IGh3X2xlZF9zdGF0ZTsKKwordm9pZCBpbm5vdmF0b3JfbGVkc19ldmVudChsZWRfZXZlbnRfdCBldnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXN3aXRjaCAoZXZ0KSB7CisJY2FzZSBsZWRfc3RhcnQ6CisJCWh3X2xlZF9zdGF0ZSA9IDA7CisJCWxlZF9zdGF0ZSA9IExFRF9TVEFURV9FTkFCTEVEOworCQlicmVhazsKKworCWNhc2UgbGVkX3N0b3A6CisJCWxlZF9zdGF0ZSAmPSB+TEVEX1NUQVRFX0VOQUJMRUQ7CisJCWh3X2xlZF9zdGF0ZSA9IDA7CisJCWJyZWFrOworCisJY2FzZSBsZWRfY2xhaW06CisJCWxlZF9zdGF0ZSB8PSBMRURfU1RBVEVfQ0xBSU1FRDsKKwkJaHdfbGVkX3N0YXRlID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9yZWxlYXNlOgorCQlsZWRfc3RhdGUgJj0gfkxFRF9TVEFURV9DTEFJTUVEOworCQlod19sZWRfc3RhdGUgPSAwOworCQlicmVhazsKKworI2lmZGVmIENPTkZJR19MRURTX1RJTUVSCisJY2FzZSBsZWRfdGltZXI6CisJCWlmICghKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKSkKKwkJCWh3X2xlZF9zdGF0ZSBePSAwOworCQlicmVhazsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0xFRFNfQ1BVCisJY2FzZSBsZWRfaWRsZV9zdGFydDoKKwkJaWYgKCEobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpKQorCQkJaHdfbGVkX3N0YXRlIHw9IDA7CisJCWJyZWFrOworCisJY2FzZSBsZWRfaWRsZV9lbmQ6CisJCWlmICghKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKSkKKwkJCWh3X2xlZF9zdGF0ZSAmPSB+MDsKKwkJYnJlYWs7CisjZW5kaWYKKworCWNhc2UgbGVkX2hhbHRlZDoKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9ncmVlbl9vbjoKKwkJaWYgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKQorCQkJaHdfbGVkX3N0YXRlICY9IH4wOworCQlicmVhazsKKworCWNhc2UgbGVkX2dyZWVuX29mZjoKKwkJaWYgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKQorCQkJaHdfbGVkX3N0YXRlIHw9IDA7CisJCWJyZWFrOworCisJY2FzZSBsZWRfYW1iZXJfb246CisJCWJyZWFrOworCisJY2FzZSBsZWRfYW1iZXJfb2ZmOgorCQlicmVhazsKKworCWNhc2UgbGVkX3JlZF9vbjoKKwkJaWYgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKQorCQkJaHdfbGVkX3N0YXRlICY9IH4wOworCQlicmVhazsKKworCWNhc2UgbGVkX3JlZF9vZmY6CisJCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKKwkJCWh3X2xlZF9zdGF0ZSB8PSAwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfRU5BQkxFRCkKKwkJOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwL2xlZHMtb3NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAvbGVkcy1vc2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTE3N2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwL2xlZHMtb3NrLmMKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvbGVkcy1vc2suYworICoKKyAqIExFRCBkcml2ZXIgZm9yIE9TSywgYW5kIG9wdGlvbmFsbHkgTWlzdHJhbCBRVkdBLCBib2FyZHMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9sZWRzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3RwczY1MDEwLmg+CisKKyNpbmNsdWRlICJsZWRzLmgiCisKKworI2RlZmluZSBMRURfU1RBVEVfRU5BQkxFRAkoMSA8PCAwKQorI2RlZmluZSBMRURfU1RBVEVfQ0xBSU1FRAkoMSA8PCAxKQorc3RhdGljIHU4IGxlZF9zdGF0ZTsKKworI2RlZmluZQlHUkVFTl9MRUQJCSgxIDw8IDApCS8qIFRQUzY1MDEwIExFRDEgKi8KKyNkZWZpbmUJQU1CRVJfTEVECQkoMSA8PCAxKQkvKiBUUFM2NTAxMCBMRUQyICovCisjZGVmaW5lCVJFRF9MRUQJCQkoMSA8PCAyKQkvKiBUUFM2NTAxMCBHUElPMiAqLworI2RlZmluZQlUSU1FUl9MRUQJCSgxIDw8IDMpCS8qIE1pc3RyYWwgYm9hcmQgKi8KKyNkZWZpbmUJSURMRV9MRUQJCSgxIDw8IDQpCS8qIE1pc3RyYWwgYm9hcmQgKi8KK3N0YXRpYyB1OCBod19sZWRfc3RhdGU7CisKKworLyogVFBTNjUwMTAgbGVkcyBhcmUgY2hhbmdlZCB1c2luZyBpMmMgLS0gZnJvbSBhIHRhc2sgY29udGV4dC4KKyAqIFVzaW5nIG9uZSBvZiB0aGVzZSBmb3IgdGhlICJpZGxlIiBMRUQgd291bGQgYmUgaW1wcmFjdGljYWwuLi4KKyAqLworI2RlZmluZQlUUFNfTEVEUwkoR1JFRU5fTEVEIHwgUkVEX0xFRCB8IEFNQkVSX0xFRCkKKworc3RhdGljIHU4IHRwc19sZWRzX2NoYW5nZTsKKworc3RhdGljIHZvaWQgdHBzX3dvcmsodm9pZCAqdW51c2VkKQoreworCWZvciAoOzspIHsKKwkJdTgJbGVkczsKKworCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQlsZWRzID0gdHBzX2xlZHNfY2hhbmdlOworCQl0cHNfbGVkc19jaGFuZ2UgPSAwOworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwkJaWYgKCFsZWRzKQorCQkJYnJlYWs7CisKKwkJLyogY2FyZWZ1bDogIHRoZSBzZXRfbGVkKCkgdmFsdWUgaXMgb24vb2ZmL2JsaW5rICovCisJCWlmIChsZWRzICYgR1JFRU5fTEVEKQorCQkJdHBzNjUwMTBfc2V0X2xlZChMRUQxLCAhIShod19sZWRfc3RhdGUgJiBHUkVFTl9MRUQpKTsKKwkJaWYgKGxlZHMgJiBBTUJFUl9MRUQpCisJCQl0cHM2NTAxMF9zZXRfbGVkKExFRDIsICEhKGh3X2xlZF9zdGF0ZSAmIEFNQkVSX0xFRCkpOworCisJCS8qIHRoZSBncGlvIGxlZCBkb2Vzbid0IGhhdmUgdGhhdCBpc3N1ZSAqLworCQlpZiAobGVkcyAmIFJFRF9MRUQpCisJCQl0cHM2NTAxMF9zZXRfZ3Bpb19vdXRfdmFsdWUoR1BJTzIsCisJCQkJCSEoaHdfbGVkX3N0YXRlICYgUkVEX0xFRCkpOworCX0KK30KKworc3RhdGljIERFQ0xBUkVfV09SSyh3b3JrLCB0cHNfd29yaywgTlVMTCk7CisKKyNpZmRlZglDT05GSUdfRkJfT01BUAorCisvKiBGb3Igbm93LCBhbGwgc3lzdGVtIGluZGljYXRvcnMgcmVxdWlyZSB0aGUgTWlzdHJhbCBib2FyZCwgc2luY2UgdGhhdAorICogTEVEIGNhbiBiZSBtYW5pcHVsYXRlZCB3aXRob3V0IGEgdGFzayBjb250ZXh0LiAgVGhpcyBMRUQgaXMgZWl0aGVyIHJlZCwKKyAqIG9yIGdyZWVuLCBidXQgbm90IGJvdGg7IGl0IGNhbid0IGdpdmUgdGhlIGZ1bGwgImRpc2NvIGxlZCIgZWZmZWN0LgorICovCisKKyNkZWZpbmUgR1BJT19MRURfUkVECQkzCisjZGVmaW5lIEdQSU9fTEVEX0dSRUVOCQlPTUFQX01QVUlPKDQpCisKK3N0YXRpYyB2b2lkIG1pc3RyYWxfc2V0bGVkKHZvaWQpCit7CisJaW50CXJlZCA9IDA7CisJaW50CWdyZWVuID0gMDsKKworCWlmIChod19sZWRfc3RhdGUgJiBUSU1FUl9MRUQpCisJCXJlZCA9IDE7CisJZWxzZSBpZiAoaHdfbGVkX3N0YXRlICYgSURMRV9MRUQpCisJCWdyZWVuID0gMTsKKwkvLyBlbHNlIGJvdGggc2lkZXMgYXJlIGRpc2FibGVkCisKKwlvbWFwX3NldF9ncGlvX2RhdGFvdXQoR1BJT19MRURfR1JFRU4sIGdyZWVuKTsKKwlvbWFwX3NldF9ncGlvX2RhdGFvdXQoR1BJT19MRURfUkVELCByZWQpOworfQorCisjZW5kaWYKKwordm9pZCBvc2tfbGVkc19ldmVudChsZWRfZXZlbnRfdCBldnQpCit7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwl1MTYJCWxlZHM7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlpZiAoIShsZWRfc3RhdGUgJiBMRURfU1RBVEVfRU5BQkxFRCkgJiYgZXZ0ICE9IGxlZF9zdGFydCkKKwkJZ290byBkb25lOworCisJbGVkcyA9IGh3X2xlZF9zdGF0ZTsKKwlzd2l0Y2ggKGV2dCkgeworCWNhc2UgbGVkX3N0YXJ0OgorCQlsZWRfc3RhdGUgfD0gTEVEX1NUQVRFX0VOQUJMRUQ7CisJCWh3X2xlZF9zdGF0ZSA9IDA7CisJCWxlZHMgPSB+MDsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9oYWx0ZWQ6CisJY2FzZSBsZWRfc3RvcDoKKwkJbGVkX3N0YXRlICY9IH5MRURfU1RBVEVfRU5BQkxFRDsKKwkJaHdfbGVkX3N0YXRlID0gMDsKKwkJLy8gTk9URTogIHdvcmsgbWF5IHN0aWxsIGJlIHBlbmRpbmchIQorCQlicmVhazsKKworCWNhc2UgbGVkX2NsYWltOgorCQlsZWRfc3RhdGUgfD0gTEVEX1NUQVRFX0NMQUlNRUQ7CisJCWh3X2xlZF9zdGF0ZSA9IDA7CisJCWxlZHMgPSB+MDsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9yZWxlYXNlOgorCQlsZWRfc3RhdGUgJj0gfkxFRF9TVEFURV9DTEFJTUVEOworCQlod19sZWRfc3RhdGUgPSAwOworCQlicmVhazsKKworI2lmZGVmCUNPTkZJR19GQl9PTUFQCisKKyNpZmRlZiBDT05GSUdfTEVEU19USU1FUgorCWNhc2UgbGVkX3RpbWVyOgorCQlod19sZWRfc3RhdGUgXj0gVElNRVJfTEVEOworCQltaXN0cmFsX3NldGxlZCgpOworCQlicmVhazsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0xFRFNfQ1BVCisJY2FzZSBsZWRfaWRsZV9zdGFydDoKKwkJaHdfbGVkX3N0YXRlIHw9IElETEVfTEVEOworCQltaXN0cmFsX3NldGxlZCgpOworCQlicmVhazsKKworCWNhc2UgbGVkX2lkbGVfZW5kOgorCQlod19sZWRfc3RhdGUgJj0gfklETEVfTEVEOworCQltaXN0cmFsX3NldGxlZCgpOworCQlicmVhazsKKyNlbmRpZgorCisjZW5kaWYJLyogQ09ORklHX0ZCX09NQVAgKi8KKworCS8qICJncmVlbiIgPT0gdHBzIExFRDEgKGxlZnRtb3N0LCBub3JtYWxseSBwb3dlci1nb29kKQorCSAqIHdvcmtzIG9ubHkgd2l0aCBEQyBhZGFwdGVyLCBub3Qgb24gYmF0dGVyeSBwb3dlciEKKwkgKi8KKwljYXNlIGxlZF9ncmVlbl9vbjoKKwkJaWYgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKQorCQkJaHdfbGVkX3N0YXRlIHw9IEdSRUVOX0xFRDsKKwkJYnJlYWs7CisJY2FzZSBsZWRfZ3JlZW5fb2ZmOgorCQlpZiAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpCisJCQlod19sZWRfc3RhdGUgJj0gfkdSRUVOX0xFRDsKKwkJYnJlYWs7CisKKwkvKiAiYW1iZXIiID09IHRwcyBMRUQyIChtaWRkbGUpICovCisJY2FzZSBsZWRfYW1iZXJfb246CisJCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKKwkJCWh3X2xlZF9zdGF0ZSB8PSBBTUJFUl9MRUQ7CisJCWJyZWFrOworCWNhc2UgbGVkX2FtYmVyX29mZjoKKwkJaWYgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKQorCQkJaHdfbGVkX3N0YXRlICY9IH5BTUJFUl9MRUQ7CisJCWJyZWFrOworCisJLyogInJlZCIgPT0gTEVEIG9uIHRwcyBncGlvMyAocmlnaHRtb3N0KSAqLworCWNhc2UgbGVkX3JlZF9vbjoKKwkJaWYgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKQorCQkJaHdfbGVkX3N0YXRlIHw9IFJFRF9MRUQ7CisJCWJyZWFrOworCWNhc2UgbGVkX3JlZF9vZmY6CisJCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKKwkJCWh3X2xlZF9zdGF0ZSAmPSB+UkVEX0xFRDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlsZWRzIF49IGh3X2xlZF9zdGF0ZTsKKwlsZWRzICY9IFRQU19MRURTOworCWlmIChsZWRzICYmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkpIHsKKwkJdHBzX2xlZHNfY2hhbmdlIHw9IGxlZHM7CisJCXNjaGVkdWxlX3dvcmsoJndvcmspOworCX0KKworZG9uZToKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAvbGVkcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwL2xlZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWIyMWZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwL2xlZHMuYwpAQCAtMCwwICsxLDYxIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL2xlZHMuYworICoKKyAqIE9NQVAgTEVEcyBkaXNwYXRjaGVyCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisKKyNpbmNsdWRlICJsZWRzLmgiCisKK3N0YXRpYyBpbnQgX19pbml0CitvbWFwX2xlZHNfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX29tYXBfaW5ub3ZhdG9yKCkpCisJCWxlZHNfZXZlbnQgPSBpbm5vdmF0b3JfbGVkc19ldmVudDsKKworCWVsc2UgaWYgKG1hY2hpbmVfaXNfb21hcF9oMigpIHx8IG1hY2hpbmVfaXNfb21hcF9wZXJzZXVzMigpKQorCQlsZWRzX2V2ZW50ID0gaDJwMl9kYmdfbGVkc19ldmVudDsKKworCWVsc2UgaWYgKG1hY2hpbmVfaXNfb21hcF9vc2soKSkKKwkJbGVkc19ldmVudCA9IG9za19sZWRzX2V2ZW50OworCisJZWxzZQorCQlyZXR1cm4gLTE7CisKKwlpZiAobWFjaGluZV9pc19vbWFwX2gyKCkKKwkJCXx8IG1hY2hpbmVfaXNfb21hcF9wZXJzZXVzMigpCisJCQl8fCBtYWNoaW5lX2lzX29tYXBfb3NrKCkpIHsKKworCQkvKiBMRUQxL0xFRDIgcGlucyBjYW4gYmUgdXNlZCBhcyBHUElPIChhcyBkb25lIGhlcmUpLCBvciBieQorCQkgKiB0aGUgTFBHICh3b3JrcyBldmVuIGluIGRlZXAgc2xlZXAhKSwgdG8gZHJpdmUgYSBiaWNvbG9yCisJCSAqIExFRCBvbiB0aGUgSDIgc2FtcGxlIGJvYXJkLCBhbmQgYW5vdGhlciBvbiB0aGUgSDIvUDIKKwkJICogInN1cmZlciIgZXhwYW5zaW9uIGJvYXJkLgorCQkgKgorCQkgKiBUaGUgc2FtZSBwaW5zIGRyaXZlIGEgTEVEIG9uIHRoZSBPU0sgTWlzdHJhbCBib2FyZCwgYnV0CisJCSAqIHRoYXQncyBhIGRpZmZlcmVudCBraW5kIG9mIExFRCAoanVzdCBvbmUgY29sb3IgYXQgYSB0aW1lKS4KKwkJICovCisJCW9tYXBfY2ZnX3JlZyhQMThfMTYxMF9HUElPMyk7CisJCWlmIChvbWFwX3JlcXVlc3RfZ3BpbygzKSA9PSAwKQorCQkJb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oMywgMCk7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkxFRDogY2FuJ3QgZ2V0IEdQSU8zL3JlZD9cbiIpOworCisJCW9tYXBfY2ZnX3JlZyhNUFVJTzQpOworCQlpZiAob21hcF9yZXF1ZXN0X2dwaW8oT01BUF9NUFVJTyg0KSkgPT0gMCkKKwkJCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKE9NQVBfTVBVSU8oNCksIDApOworCQllbHNlCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJMRUQ6IGNhbid0IGdldCBNUFVJTzQvZ3JlZW4/XG4iKTsKKwl9CisKKwlsZWRzX2V2ZW50KGxlZF9zdGFydCk7CisJcmV0dXJuIDA7Cit9CisKK19faW5pdGNhbGwob21hcF9sZWRzX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwL2xlZHMuaCBiL2FyY2gvYXJtL21hY2gtb21hcC9sZWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFlOWZlZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcC9sZWRzLmgKQEAgLTAsMCArMSwzIEBACitleHRlcm4gdm9pZCBpbm5vdmF0b3JfbGVkc19ldmVudChsZWRfZXZlbnRfdCBldnQpOworZXh0ZXJuIHZvaWQgaDJwMl9kYmdfbGVkc19ldmVudChsZWRfZXZlbnRfdCBldnQpOworZXh0ZXJuIHZvaWQgb3NrX2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9tY2JzcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwL21jYnNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M0YWQ3NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcC9tY2JzcC5jCkBAIC0wLDAgKzEsNjg1IEBACisvKgorICogbGludXgvYXJjaC9hcm0vb21hcC9tY2JzcC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IE5va2lhIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IFNhbXVlbCBPcnRpeiA8c2FtdWVsLm9ydGl6QG5va2lhLmNvbT4KKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBNdWx0aWNoYW5uZWwgbW9kZSBub3Qgc3VwcG9ydGVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tY2JzcC5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+CisKKyNpZmRlZiBDT05GSUdfTUNCU1BfREVCVUcKKyNkZWZpbmUgREJHKHguLi4pCXByaW50ayh4KQorI2Vsc2UKKyNkZWZpbmUgREJHKHguLi4pCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCitzdHJ1Y3Qgb21hcF9tY2JzcCB7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICBpb19iYXNlOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlOworCW9tYXBfbWNic3Bfd29yZF9sZW5ndGggICAgICAgcnhfd29yZF9sZW5ndGg7CisJb21hcF9tY2JzcF93b3JkX2xlbmd0aCAgICAgICB0eF93b3JkX2xlbmd0aDsKKworCS8qIElSUSBiYXNlZCBUWC9SWCAqLworCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgcnhfaXJxOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgdHhfaXJxOworCisJLyogRE1BIHN0dWZmICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICBkbWFfcnhfc3luYzsKKwlzaG9ydCAgICAgICAgICAgICAgICAgICAgICAgIGRtYV9yeF9sY2g7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICBkbWFfdHhfc3luYzsKKwlzaG9ydCAgICAgICAgICAgICAgICAgICAgICAgIGRtYV90eF9sY2g7CisKKwkvKiBDb21wbGV0aW9uIHF1ZXVlcyAqLworCXN0cnVjdCBjb21wbGV0aW9uICAgICAgICAgICAgdHhfaXJxX2NvbXBsZXRpb247CisJc3RydWN0IGNvbXBsZXRpb24gICAgICAgICAgICByeF9pcnFfY29tcGxldGlvbjsKKwlzdHJ1Y3QgY29tcGxldGlvbiAgICAgICAgICAgIHR4X2RtYV9jb21wbGV0aW9uOworCXN0cnVjdCBjb21wbGV0aW9uICAgICAgICAgICAgcnhfZG1hX2NvbXBsZXRpb247CisKKwlzcGlubG9ja190ICAgICAgICAgICAgICAgICAgIGxvY2s7Cit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbWNic3AgbWNic3BbT01BUF9NQVhfTUNCU1BfQ09VTlRdOworc3RhdGljIHN0cnVjdCBjbGsgKm1jYnNwX2RzcF9jayA9IDA7CitzdGF0aWMgc3RydWN0IGNsayAqbWNic3BfYXBpX2NrID0gMDsKKworCitzdGF0aWMgdm9pZCBvbWFwX21jYnNwX2R1bXBfcmVnKHU4IGlkKQoreworCURCRygiKioqKiBNQ0JTUCVkIHJlZ3MgKioqKlxuIiwgbWNic3BbaWRdLmlkKTsKKwlEQkcoIkRSUjI6ICAweCUwNHhcbiIsIE9NQVBfTUNCU1BfUkVBRChtY2JzcFtpZF0uaW9fYmFzZSwgRFJSMikpOworCURCRygiRFJSMTogIDB4JTA0eFxuIiwgT01BUF9NQ0JTUF9SRUFEKG1jYnNwW2lkXS5pb19iYXNlLCBEUlIxKSk7CisJREJHKCJEWFIyOiAgMHglMDR4XG4iLCBPTUFQX01DQlNQX1JFQUQobWNic3BbaWRdLmlvX2Jhc2UsIERYUjIpKTsKKwlEQkcoIkRYUjE6ICAweCUwNHhcbiIsIE9NQVBfTUNCU1BfUkVBRChtY2JzcFtpZF0uaW9fYmFzZSwgRFhSMSkpOworCURCRygiU1BDUjI6IDB4JTA0eFxuIiwgT01BUF9NQ0JTUF9SRUFEKG1jYnNwW2lkXS5pb19iYXNlLCBTUENSMikpOworCURCRygiU1BDUjE6IDB4JTA0eFxuIiwgT01BUF9NQ0JTUF9SRUFEKG1jYnNwW2lkXS5pb19iYXNlLCBTUENSMSkpOworCURCRygiUkNSMjogIDB4JTA0eFxuIiwgT01BUF9NQ0JTUF9SRUFEKG1jYnNwW2lkXS5pb19iYXNlLCBSQ1IyKSk7CisJREJHKCJSQ1IxOiAgMHglMDR4XG4iLCBPTUFQX01DQlNQX1JFQUQobWNic3BbaWRdLmlvX2Jhc2UsIFJDUjEpKTsKKwlEQkcoIlhDUjI6ICAweCUwNHhcbiIsIE9NQVBfTUNCU1BfUkVBRChtY2JzcFtpZF0uaW9fYmFzZSwgWENSMikpOworCURCRygiWENSMTogIDB4JTA0eFxuIiwgT01BUF9NQ0JTUF9SRUFEKG1jYnNwW2lkXS5pb19iYXNlLCBYQ1IxKSk7CisJREJHKCJTUkdSMjogMHglMDR4XG4iLCBPTUFQX01DQlNQX1JFQUQobWNic3BbaWRdLmlvX2Jhc2UsIFNSR1IyKSk7CisJREJHKCJTUkdSMTogMHglMDR4XG4iLCBPTUFQX01DQlNQX1JFQUQobWNic3BbaWRdLmlvX2Jhc2UsIFNSR1IxKSk7CisJREJHKCJQQ1IwOiAgMHglMDR4XG4iLCBPTUFQX01DQlNQX1JFQUQobWNic3BbaWRdLmlvX2Jhc2UsIFBDUjApKTsKKwlEQkcoIioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKK30KKworCitzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcF9tY2JzcF90eF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBvbWFwX21jYnNwICogbWNic3BfdHggPSAoc3RydWN0IG9tYXBfbWNic3AgKikoZGV2X2lkKTsKKworCURCRygiVFggSVJRIGNhbGxiYWNrIDogMHgleFxuIiwgT01BUF9NQ0JTUF9SRUFEKG1jYnNwX3R4LT5pb19iYXNlLCBTUENSMikpOworCisJY29tcGxldGUoJm1jYnNwX3R4LT50eF9pcnFfY29tcGxldGlvbik7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcF9tY2JzcF9yeF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBvbWFwX21jYnNwICogbWNic3BfcnggPSAoc3RydWN0IG9tYXBfbWNic3AgKikoZGV2X2lkKTsKKworCURCRygiUlggSVJRIGNhbGxiYWNrIDogMHgleFxuIiwgT01BUF9NQ0JTUF9SRUFEKG1jYnNwX3J4LT5pb19iYXNlLCBTUENSMikpOworCisJY29tcGxldGUoJm1jYnNwX3J4LT5yeF9pcnFfY29tcGxldGlvbik7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKK3N0YXRpYyB2b2lkIG9tYXBfbWNic3BfdHhfZG1hX2NhbGxiYWNrKGludCBsY2gsIHUxNiBjaF9zdGF0dXMsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG9tYXBfbWNic3AgKiBtY2JzcF9kbWFfdHggPSAoc3RydWN0IG9tYXBfbWNic3AgKikoZGF0YSk7CisKKwlEQkcoIlRYIERNQSBjYWxsYmFjayA6IDB4JXhcbiIsIE9NQVBfTUNCU1BfUkVBRChtY2JzcF9kbWFfdHgtPmlvX2Jhc2UsIFNQQ1IyKSk7CisKKwkvKiBXZSBjYW4gZnJlZSB0aGUgY2hhbm5lbHMgKi8KKwlvbWFwX2ZyZWVfZG1hKG1jYnNwX2RtYV90eC0+ZG1hX3R4X2xjaCk7CisJbWNic3BfZG1hX3R4LT5kbWFfdHhfbGNoID0gLTE7CisKKwljb21wbGV0ZSgmbWNic3BfZG1hX3R4LT50eF9kbWFfY29tcGxldGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfbWNic3BfcnhfZG1hX2NhbGxiYWNrKGludCBsY2gsIHUxNiBjaF9zdGF0dXMsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG9tYXBfbWNic3AgKiBtY2JzcF9kbWFfcnggPSAoc3RydWN0IG9tYXBfbWNic3AgKikoZGF0YSk7CisKKwlEQkcoIlJYIERNQSBjYWxsYmFjayA6IDB4JXhcbiIsIE9NQVBfTUNCU1BfUkVBRChtY2JzcF9kbWFfcngtPmlvX2Jhc2UsIFNQQ1IyKSk7CisKKwkvKiBXZSBjYW4gZnJlZSB0aGUgY2hhbm5lbHMgKi8KKwlvbWFwX2ZyZWVfZG1hKG1jYnNwX2RtYV9yeC0+ZG1hX3J4X2xjaCk7CisJbWNic3BfZG1hX3J4LT5kbWFfcnhfbGNoID0gLTE7CisKKwljb21wbGV0ZSgmbWNic3BfZG1hX3J4LT5yeF9kbWFfY29tcGxldGlvbik7Cit9CisKKworLyoKKyAqIG9tYXBfbWNic3BfY29uZmlnIHNpbXBseSB3cml0ZSBhIGNvbmZpZyB0byB0aGUKKyAqIGFwcHJvcHJpYXRlIE1jQlNQLgorICogWW91IGVpdGhlciBjYWxsIHRoaXMgZnVuY3Rpb24gb3Igc2V0IHRoZSBNY0JTUCByZWdpc3RlcnMKKyAqIGJ5IHlvdXJzZWxmIGJlZm9yZSBjYWxsaW5nIG9tYXBfbWNic3Bfc3RhcnQoKS4KKyAqLworCit2b2lkIG9tYXBfbWNic3BfY29uZmlnKHVuc2lnbmVkIGludCBpZCwgY29uc3Qgc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyAqIGNvbmZpZykKK3sKKwl1MzIgaW9fYmFzZSA9IG1jYnNwW2lkXS5pb19iYXNlOworCisJREJHKCJPTUFQLU1jQlNQOiBNY0JTUCVkICBpb19iYXNlOiAweCU4eFxuIiwgaWQrMSwgaW9fYmFzZSk7CisKKwkvKiBXZSB3cml0ZSB0aGUgZ2l2ZW4gY29uZmlnICovCisJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMiwgY29uZmlnLT5zcGNyMik7CisJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMSwgY29uZmlnLT5zcGNyMSk7CisJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBSQ1IyLCBjb25maWctPnJjcjIpOworCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgUkNSMSwgY29uZmlnLT5yY3IxKTsKKwlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFhDUjIsIGNvbmZpZy0+eGNyMik7CisJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBYQ1IxLCBjb25maWctPnhjcjEpOworCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1JHUjIsIGNvbmZpZy0+c3JncjIpOworCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1JHUjEsIGNvbmZpZy0+c3JncjEpOworCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgTUNSMiwgY29uZmlnLT5tY3IyKTsKKwlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIE1DUjEsIGNvbmZpZy0+bWNyMSk7CisJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBQQ1IwLCBjb25maWctPnBjcjApOworfQorCisKKworc3RhdGljIGludCBvbWFwX21jYnNwX2NoZWNrKHVuc2lnbmVkIGludCBpZCkKK3sKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkgeworCQlpZiAoaWQgPiBPTUFQX01BWF9NQ0JTUF9DT1VOVCAtIDEpIHsKKwkJICAgICAgIHByaW50ayhLRVJOX0VSUiAiT01BUC1NY0JTUDogTWNCU1AlZCBkb2Vzbid0IGV4aXN0XG4iLCBpZCArIDEpOworCQkgICAgICAgcmV0dXJuIC0xOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmIChjcHVfaXNfb21hcDE1MTAoKSB8fCBjcHVfaXNfb21hcDE2MTAoKSB8fCBjcHVfaXNfb21hcDE3MTAoKSkgeworCQlpZiAoaWQgPiBPTUFQX01BWF9NQ0JTUF9DT1VOVCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJPTUFQLU1jQlNQOiBNY0JTUCVkIGRvZXNuJ3QgZXhpc3RcbiIsIGlkICsgMSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC0xOworfQorCisjZGVmaW5lIEVOX1hPUlBDSwkJMQorI2RlZmluZSBEU1BfUlNUQ1QyICAgICAgICAgICAgICAweGUxMDA4MDE0CisKK3N0YXRpYyB2b2lkIG9tYXBfbWNic3BfZHNwX3JlcXVlc3Qodm9pZCkKK3sKKwlpZiAoY3B1X2lzX29tYXAxNTEwKCkgfHwgY3B1X2lzX29tYXAxNjEwKCkgfHwgY3B1X2lzX29tYXAxNzEwKCkpIHsKKwkJb21hcF93cml0ZXcoKG9tYXBfcmVhZHcoQVJNX1JTVENUMSkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKKwkJCSAgICBBUk1fUlNUQ1QxKTsKKwkJY2xrX2VuYWJsZShtY2JzcF9kc3BfY2spOworCQljbGtfZW5hYmxlKG1jYnNwX2FwaV9jayk7CisKKwkJLyogZW5hYmxlIDEyTUh6IGNsb2NrIHRvIG1jYnNwIDEgJiAzICovCisJCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhEU1BfSURMRUNUMikgfCAoMSA8PCBFTl9YT1JQQ0spLAorCQkJICAgICBEU1BfSURMRUNUMik7CisJCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhEU1BfUlNUQ1QyKSB8IDEgfCAxIDw8IDEsCisJCQkgICAgIERTUF9SU1RDVDIpOworCX0KK30KKworc3RhdGljIHZvaWQgb21hcF9tY2JzcF9kc3BfZnJlZSh2b2lkKQoreworCS8qIFVzZWxlc3MgZm9yIG5vdyAqLworfQorCisKK2ludCBvbWFwX21jYnNwX3JlcXVlc3QodW5zaWduZWQgaW50IGlkKQoreworCWludCBlcnI7CisKKwlpZiAob21hcF9tY2JzcF9jaGVjayhpZCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogT24gMTUxMCwgMTYxMCBhbmQgMTcxMCwgTWNCU1AxIGFuZCBNY0JTUDMKKwkgKiBhcmUgRFNQIHB1YmxpYyBwZXJpcGhlcmFscy4KKwkgKi8KKwlpZiAoaWQgPT0gT01BUF9NQ0JTUDEgfHwgaWQgPT0gT01BUF9NQ0JTUDMpCisJCW9tYXBfbWNic3BfZHNwX3JlcXVlc3QoKTsKKworCXNwaW5fbG9jaygmbWNic3BbaWRdLmxvY2spOworCWlmICghbWNic3BbaWRdLmZyZWUpIHsKKwkJcHJpbnRrIChLRVJOX0VSUiAiT01BUC1NY0JTUDogTWNCU1AlZCBpcyBjdXJyZW50bHkgaW4gdXNlXG4iLCBpZCArIDEpOworCQlzcGluX3VubG9jaygmbWNic3BbaWRdLmxvY2spOworCQlyZXR1cm4gLTE7CisJfQorCisJbWNic3BbaWRdLmZyZWUgPSAwOworCXNwaW5fdW5sb2NrKCZtY2JzcFtpZF0ubG9jayk7CisKKwkvKiBXZSBuZWVkIHRvIGdldCBJUlFzIGhlcmUgKi8KKwllcnIgPSByZXF1ZXN0X2lycShtY2JzcFtpZF0udHhfaXJxLCBvbWFwX21jYnNwX3R4X2lycV9oYW5kbGVyLCAwLAorCQkJICAiTWNCU1AiLAorCQkJICAodm9pZCAqKSAoJm1jYnNwW2lkXSkpOworCWlmIChlcnIgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIk9NQVAtTWNCU1A6IFVuYWJsZSB0byByZXF1ZXN0IFRYIElSUSAlZCBmb3IgTWNCU1AlZFxuIiwKKwkJICAgICAgIG1jYnNwW2lkXS50eF9pcnEsIG1jYnNwW2lkXS5pZCk7CisJCXJldHVybiBlcnI7CisJfQorCisJaW5pdF9jb21wbGV0aW9uKCYobWNic3BbaWRdLnR4X2lycV9jb21wbGV0aW9uKSk7CisKKworCWVyciA9IHJlcXVlc3RfaXJxKG1jYnNwW2lkXS5yeF9pcnEsIG9tYXBfbWNic3BfcnhfaXJxX2hhbmRsZXIsIDAsCisJCQkgICJNY0JTUCIsCisJCQkgICh2b2lkICopICgmbWNic3BbaWRdKSk7CisJaWYgKGVyciAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiT01BUC1NY0JTUDogVW5hYmxlIHRvIHJlcXVlc3QgUlggSVJRICVkIGZvciBNY0JTUCVkXG4iLAorCQkgICAgICAgbWNic3BbaWRdLnJ4X2lycSwgbWNic3BbaWRdLmlkKTsKKwkJZnJlZV9pcnEobWNic3BbaWRdLnR4X2lycSwgKHZvaWQgKikgKCZtY2JzcFtpZF0pKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpbml0X2NvbXBsZXRpb24oJihtY2JzcFtpZF0ucnhfaXJxX2NvbXBsZXRpb24pKTsKKwlyZXR1cm4gMDsKKworfQorCit2b2lkIG9tYXBfbWNic3BfZnJlZSh1bnNpZ25lZCBpbnQgaWQpCit7CisJaWYgKG9tYXBfbWNic3BfY2hlY2soaWQpIDwgMCkKKwkJcmV0dXJuOworCisJaWYgKGlkID09IE9NQVBfTUNCU1AxIHx8IGlkID09IE9NQVBfTUNCU1AzKQorCQlvbWFwX21jYnNwX2RzcF9mcmVlKCk7CisKKwlzcGluX2xvY2soJm1jYnNwW2lkXS5sb2NrKTsKKwlpZiAobWNic3BbaWRdLmZyZWUpIHsKKwkJcHJpbnRrIChLRVJOX0VSUiAiT01BUC1NY0JTUDogTWNCU1AlZCB3YXMgbm90IHJlc2VydmVkXG4iLCBpZCArIDEpOworCQlzcGluX3VubG9jaygmbWNic3BbaWRdLmxvY2spOworCQlyZXR1cm47CisJfQorCisJbWNic3BbaWRdLmZyZWUgPSAxOworCXNwaW5fdW5sb2NrKCZtY2JzcFtpZF0ubG9jayk7CisKKwkvKiBGcmVlIElSUXMgKi8KKwlmcmVlX2lycShtY2JzcFtpZF0ucnhfaXJxLCAodm9pZCAqKSAoJm1jYnNwW2lkXSkpOworCWZyZWVfaXJxKG1jYnNwW2lkXS50eF9pcnEsICh2b2lkICopICgmbWNic3BbaWRdKSk7Cit9CisKKy8qCisgKiBIZXJlIHdlIHN0YXJ0IHRoZSBNY0JTUCwgYnkgZW5hYmxpbmcgdGhlIHNhbXBsZQorICogZ2VuZXJhdG9yLCBib3RoIHRyYW5zbWl0dGVyIGFuZCByZWNlaXZlcnMsCisgKiBhbmQgdGhlIGZyYW1lIHN5bmMuCisgKi8KK3ZvaWQgb21hcF9tY2JzcF9zdGFydCh1bnNpZ25lZCBpbnQgaWQpCit7CisJdTMyIGlvX2Jhc2U7CisJdTE2IHc7CisKKwlpZiAob21hcF9tY2JzcF9jaGVjayhpZCkgPCAwKQorCQlyZXR1cm47CisKKwlpb19iYXNlID0gbWNic3BbaWRdLmlvX2Jhc2U7CisKKwltY2JzcFtpZF0ucnhfd29yZF9sZW5ndGggPSAoKE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBSQ1IxKSA+PiA1KSAmIDB4Nyk7CisJbWNic3BbaWRdLnR4X3dvcmRfbGVuZ3RoID0gKChPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgWENSMSkgPj4gNSkgJiAweDcpOworCisJLyogU3RhcnQgdGhlIHNhbXBsZSBnZW5lcmF0b3IgKi8KKwl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IyKTsKKwlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IyLCB3IHwgKDEgPDwgNikpOworCisJLyogRW5hYmxlIHRyYW5zbWl0dGVyIGFuZCByZWNlaXZlciAqLworCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjIpOworCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHcgfCAxKTsKKworCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjEpOworCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjEsIHcgfCAxKTsKKworCXVkZWxheSgxMDApOworCisJLyogU3RhcnQgZnJhbWUgc3luYyAqLworCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjIpOworCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHcgfCAoMSA8PCA3KSk7CisKKwkvKiBEdW1wIE1jQlNQIFJlZ3MgKi8KKwlvbWFwX21jYnNwX2R1bXBfcmVnKGlkKTsKKworfQorCit2b2lkIG9tYXBfbWNic3Bfc3RvcCh1bnNpZ25lZCBpbnQgaWQpCit7CisJdTMyIGlvX2Jhc2U7CisJdTE2IHc7CisKKwlpZiAob21hcF9tY2JzcF9jaGVjayhpZCkgPCAwKQorCQlyZXR1cm47CisKKwlpb19iYXNlID0gbWNic3BbaWRdLmlvX2Jhc2U7CisKKyAgICAgICAgLyogUmVzZXQgdHJhbnNtaXR0ZXIgKi8KKwl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IyKTsKKwlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IyLCB3ICYgfigxKSk7CisKKwkvKiBSZXNldCByZWNlaXZlciAqLworCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjEpOworCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjEsIHcgJiB+KDEpKTsKKworCS8qIFJlc2V0IHRoZSBzYW1wbGUgcmF0ZSBnZW5lcmF0b3IgKi8KKwl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IyKTsKKwlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IyLCB3ICYgfigxIDw8IDYpKTsKK30KKworCisvKgorICogSVJRIGJhc2VkIHdvcmQgdHJhbnNtaXNzaW9uLgorICovCit2b2lkIG9tYXBfbWNic3BfeG1pdF93b3JkKHVuc2lnbmVkIGludCBpZCwgdTMyIHdvcmQpCit7CisJdTMyIGlvX2Jhc2U7CisJb21hcF9tY2JzcF93b3JkX2xlbmd0aCB3b3JkX2xlbmd0aCA9IG1jYnNwW2lkXS50eF93b3JkX2xlbmd0aDsKKworCWlmIChvbWFwX21jYnNwX2NoZWNrKGlkKSA8IDApCisJCXJldHVybjsKKworCWlvX2Jhc2UgPSBtY2JzcFtpZF0uaW9fYmFzZTsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJihtY2JzcFtpZF0udHhfaXJxX2NvbXBsZXRpb24pKTsKKworCWlmICh3b3JkX2xlbmd0aCA+IE9NQVBfTUNCU1BfV09SRF8xNikKKwkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBEWFIyLCB3b3JkID4+IDE2KTsKKwlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIERYUjEsIHdvcmQgJiAweGZmZmYpOworfQorCit1MzIgb21hcF9tY2JzcF9yZWN2X3dvcmQodW5zaWduZWQgaW50IGlkKQoreworCXUzMiBpb19iYXNlOworCXUxNiB3b3JkX2xzYiwgd29yZF9tc2IgPSAwOworCW9tYXBfbWNic3Bfd29yZF9sZW5ndGggd29yZF9sZW5ndGggPSBtY2JzcFtpZF0ucnhfd29yZF9sZW5ndGg7CisKKwlpZiAob21hcF9tY2JzcF9jaGVjayhpZCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlvX2Jhc2UgPSBtY2JzcFtpZF0uaW9fYmFzZTsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJihtY2JzcFtpZF0ucnhfaXJxX2NvbXBsZXRpb24pKTsKKworCWlmICh3b3JkX2xlbmd0aCA+IE9NQVBfTUNCU1BfV09SRF8xNikKKwkJd29yZF9tc2IgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgRFJSMik7CisJd29yZF9sc2IgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgRFJSMSk7CisKKwlyZXR1cm4gKHdvcmRfbHNiIHwgKHdvcmRfbXNiIDw8IDE2KSk7Cit9CisKKworLyoKKyAqIFNpbXBsZSBETUEgYmFzZWQgYnVmZmVyIHJ4L3R4IHJvdXRpbmVzLgorICogTm90aGluZyBmYW5jeSwganVzdCBhIHNpbmdsZSBidWZmZXIgdHgvcnggdGhyb3VnaCBETUEuCisgKiBUaGUgRE1BIHJlc291cmNlcyBhcmUgcmVsZWFzZWQgb25jZSB0aGUgdHJhbnNmZXIgaXMgZG9uZS4KKyAqIEZvciBhbnl0aGluZyBmYW5jaWVyLCB5b3Ugc2hvdWxkIHVzZSB5b3VyIG93biBjdXN0b21pemVkIERNQQorICogcm91dGluZXMgYW5kIGNhbGxiYWNrcy4KKyAqLworaW50IG9tYXBfbWNic3BfeG1pdF9idWZmZXIodW5zaWduZWQgaW50IGlkLCBkbWFfYWRkcl90IGJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbmd0aCkKK3sKKwlpbnQgZG1hX3R4X2NoOworCisJaWYgKG9tYXBfbWNic3BfY2hlY2soaWQpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAob21hcF9yZXF1ZXN0X2RtYShtY2JzcFtpZF0uZG1hX3R4X3N5bmMsICJNY0JTUCBUWCIsIG9tYXBfbWNic3BfdHhfZG1hX2NhbGxiYWNrLAorCQkJICAgICAmbWNic3BbaWRdLAorCQkJICAgICAmZG1hX3R4X2NoKSkgeworCQlwcmludGsoIk9NQVAtTWNCU1A6IFVuYWJsZSB0byByZXF1ZXN0IERNQSBjaGFubmVsIGZvciBNY0JTUCVkIFRYLiBUcnlpbmcgSVJRIGJhc2VkIFRYXG4iLCBpZCsxKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCW1jYnNwW2lkXS5kbWFfdHhfbGNoID0gZG1hX3R4X2NoOworCisJREJHKCJUWCBETUEgb24gY2hhbm5lbCAlZFxuIiwgZG1hX3R4X2NoKTsKKworCWluaXRfY29tcGxldGlvbigmKG1jYnNwW2lkXS50eF9kbWFfY29tcGxldGlvbikpOworCisJb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhtY2JzcFtpZF0uZG1hX3R4X2xjaCwKKwkJCQkgICAgIE9NQVBfRE1BX0RBVEFfVFlQRV9TMTYsCisJCQkJICAgICBsZW5ndGggPj4gMSwgMSwKKwkJCQkgICAgIE9NQVBfRE1BX1NZTkNfRUxFTUVOVCk7CisKKwlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMobWNic3BbaWRdLmRtYV90eF9sY2gsCisJCQkJIE9NQVBfRE1BX1BPUlRfVElQQiwKKwkJCQkgT01BUF9ETUFfQU1PREVfQ09OU1RBTlQsCisJCQkJIG1jYnNwW2lkXS5pb19iYXNlICsgT01BUF9NQ0JTUF9SRUdfRFhSMSk7CisKKwlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhtY2JzcFtpZF0uZG1hX3R4X2xjaCwKKwkJCQlPTUFQX0RNQV9QT1JUX0VNSUZGLAorCQkJCU9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAorCQkJCWJ1ZmZlcik7CisKKwlvbWFwX3N0YXJ0X2RtYShtY2JzcFtpZF0uZG1hX3R4X2xjaCk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmKG1jYnNwW2lkXS50eF9kbWFfY29tcGxldGlvbikpOworCXJldHVybiAwOworfQorCisKK2ludCBvbWFwX21jYnNwX3JlY3ZfYnVmZmVyKHVuc2lnbmVkIGludCBpZCwgZG1hX2FkZHJfdCBidWZmZXIsIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisJaW50IGRtYV9yeF9jaDsKKworCWlmIChvbWFwX21jYnNwX2NoZWNrKGlkKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9tYXBfcmVxdWVzdF9kbWEobWNic3BbaWRdLmRtYV9yeF9zeW5jLCAiTWNCU1AgUlgiLCBvbWFwX21jYnNwX3J4X2RtYV9jYWxsYmFjaywKKwkJCSAgICAgJm1jYnNwW2lkXSwKKwkJCSAgICAgJmRtYV9yeF9jaCkpIHsKKwkJcHJpbnRrKCJVbmFibGUgdG8gcmVxdWVzdCBETUEgY2hhbm5lbCBmb3IgTWNCU1AlZCBSWC4gVHJ5aW5nIElSUSBiYXNlZCBSWFxuIiwgaWQrMSk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwltY2JzcFtpZF0uZG1hX3J4X2xjaCA9IGRtYV9yeF9jaDsKKworCURCRygiUlggRE1BIG9uIGNoYW5uZWwgJWRcbiIsIGRtYV9yeF9jaCk7CisKKwlpbml0X2NvbXBsZXRpb24oJihtY2JzcFtpZF0ucnhfZG1hX2NvbXBsZXRpb24pKTsKKworCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMobWNic3BbaWRdLmRtYV9yeF9sY2gsCisJCQkJICAgICBPTUFQX0RNQV9EQVRBX1RZUEVfUzE2LAorCQkJCSAgICAgbGVuZ3RoID4+IDEsIDEsCisJCQkJICAgICBPTUFQX0RNQV9TWU5DX0VMRU1FTlQpOworCisJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMobWNic3BbaWRdLmRtYV9yeF9sY2gsCisJCQkJT01BUF9ETUFfUE9SVF9USVBCLAorCQkJCU9NQVBfRE1BX0FNT0RFX0NPTlNUQU5ULAorCQkJCW1jYnNwW2lkXS5pb19iYXNlICsgT01BUF9NQ0JTUF9SRUdfRFJSMSk7CisKKwlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMobWNic3BbaWRdLmRtYV9yeF9sY2gsCisJCQkJIE9NQVBfRE1BX1BPUlRfRU1JRkYsCisJCQkJIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAorCQkJCSBidWZmZXIpOworCisJb21hcF9zdGFydF9kbWEobWNic3BbaWRdLmRtYV9yeF9sY2gpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJihtY2JzcFtpZF0ucnhfZG1hX2NvbXBsZXRpb24pKTsKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogU1BJIHdyYXBwZXIuCisgKiBTaW5jZSBTUEkgc2V0dXAgaXMgbXVjaCBzaW1wbGVyIHRoYW4gdGhlIGdlbmVyaWMgTWNCU1Agb25lLAorICogdGhpcyB3cmFwcGVyIGp1c3QgbmVlZCBhbiBvbWFwX21jYnNwX3NwaV9jZmcgc3RydWN0dXJlIGFzIGFuIGlucHV0LgorICogT25jZSB0aGlzIGlzIGRvbmUsIHlvdSBjYW4gY2FsbCBvbWFwX21jYnNwX3N0YXJ0KCkuCisgKi8KK3ZvaWQgb21hcF9tY2JzcF9zZXRfc3BpX21vZGUodW5zaWduZWQgaW50IGlkLCBjb25zdCBzdHJ1Y3Qgb21hcF9tY2JzcF9zcGlfY2ZnICogc3BpX2NmZykKK3sKKwlzdHJ1Y3Qgb21hcF9tY2JzcF9yZWdfY2ZnIG1jYnNwX2NmZzsKKworCWlmIChvbWFwX21jYnNwX2NoZWNrKGlkKSA8IDApCisJCXJldHVybjsKKworCW1lbXNldCgmbWNic3BfY2ZnLCAwLCBzaXplb2Yoc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZykpOworCisJLyogU1BJIGhhcyBvbmx5IG9uZSBmcmFtZSAqLworCW1jYnNwX2NmZy5yY3IxIHw9IChSV0RMRU4xKHNwaV9jZmctPndvcmRfbGVuZ3RoKSB8IFJGUkxFTjEoMCkpOworCW1jYnNwX2NmZy54Y3IxIHw9IChYV0RMRU4xKHNwaV9jZmctPndvcmRfbGVuZ3RoKSB8IFhGUkxFTjEoMCkpOworCisgICAgICAgIC8qIENsb2NrIHN0b3AgbW9kZSAqLworCWlmIChzcGlfY2ZnLT5jbGtfc3RwX21vZGUgPT0gT01BUF9NQ0JTUF9DTEtfU1RQX01PREVfTk9fREVMQVkpCisJCW1jYnNwX2NmZy5zcGNyMSB8PSAoMSA8PCAxMik7CisJZWxzZQorCQltY2JzcF9jZmcuc3BjcjEgfD0gKDMgPDwgMTEpOworCisJLyogU2V0IGNsb2NrIHBhcml0aWVzICovCisJaWYgKHNwaV9jZmctPnJ4X2Nsb2NrX3BvbGFyaXR5ID09IE9NQVBfTUNCU1BfQ0xLX1JJU0lORykKKwkJbWNic3BfY2ZnLnBjcjAgfD0gQ0xLUlA7CisJZWxzZQorCQltY2JzcF9jZmcucGNyMCAmPSB+Q0xLUlA7CisKKwlpZiAoc3BpX2NmZy0+dHhfY2xvY2tfcG9sYXJpdHkgPT0gT01BUF9NQ0JTUF9DTEtfUklTSU5HKQorCQltY2JzcF9jZmcucGNyMCAmPSB+Q0xLWFA7CisJZWxzZQorCQltY2JzcF9jZmcucGNyMCB8PSBDTEtYUDsKKworCS8qIFNldCBTQ0xLTUUgdG8gMCBhbmQgQ0xLU00gdG8gMSAqLworCW1jYnNwX2NmZy5wY3IwICY9IH5TQ0xLTUU7CisJbWNic3BfY2ZnLnNyZ3IyIHw9IENMS1NNOworCisJLyogU2V0IEZTWFAgKi8KKwlpZiAoc3BpX2NmZy0+ZnN4X3BvbGFyaXR5ID09IE9NQVBfTUNCU1BfRlNfQUNUSVZFX0hJR0gpCisJCW1jYnNwX2NmZy5wY3IwICY9IH5GU1hQOworCWVsc2UKKwkJbWNic3BfY2ZnLnBjcjAgfD0gRlNYUDsKKworCWlmIChzcGlfY2ZnLT5zcGlfbW9kZSA9PSBPTUFQX01DQlNQX1NQSV9NQVNURVIpIHsKKwkJbWNic3BfY2ZnLnBjcjAgfD0gQ0xLWE07CisJCW1jYnNwX2NmZy5zcmdyMSB8PSBDTEtHRFYoc3BpX2NmZy0+Y2xrX2RpdiAtMSk7CisJCW1jYnNwX2NmZy5wY3IwIHw9IEZTWE07CisJCW1jYnNwX2NmZy5zcmdyMiAmPSB+RlNHTTsKKwkJbWNic3BfY2ZnLnhjcjIgfD0gWERBVERMWSgxKTsKKwkJbWNic3BfY2ZnLnJjcjIgfD0gUkRBVERMWSgxKTsKKwl9CisJZWxzZSB7CisJCW1jYnNwX2NmZy5wY3IwICY9IH5DTEtYTTsKKwkJbWNic3BfY2ZnLnNyZ3IxIHw9IENMS0dEVigxKTsKKwkJbWNic3BfY2ZnLnBjcjAgJj0gfkZTWE07CisJCW1jYnNwX2NmZy54Y3IyICY9IH5YREFURExZKDMpOworCQltY2JzcF9jZmcucmNyMiAmPSB+UkRBVERMWSgzKTsKKwl9CisKKwltY2JzcF9jZmcueGNyMiAmPSB+WFBIQVNFOworCW1jYnNwX2NmZy5yY3IyICY9IH5SUEhBU0U7CisKKwlvbWFwX21jYnNwX2NvbmZpZyhpZCwgJm1jYnNwX2NmZyk7Cit9CisKKworLyoKKyAqIE1jQlNQMSBhbmQgTWNCU1AzIGFyZSBkaXJlY3RseSBtYXBwZWQgb24gMTYxMCBhbmQgMTUxMC4KKyAqIDczMCBoYXMgb25seSAyIE1jQlNQLCBhbmQgYm90aCBvZiB0aGVtIGFyZSBNUFUgcGVyaXBoZXJhbHMuCisgKi8KK3N0cnVjdCBvbWFwX21jYnNwX2luZm8geworCXUzMiB2aXJ0X2Jhc2U7CisJdTggZG1hX3J4X3N5bmMsIGRtYV90eF9zeW5jOworCXUxNiByeF9pcnEsIHR4X2lycTsKK307CisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCitzdGF0aWMgY29uc3Qgc3RydWN0IG9tYXBfbWNic3BfaW5mbyBtY2JzcF83MzBbXSA9IHsKKwlbMF0gPSB7IC52aXJ0X2Jhc2UgPSBpb19wMnYoT01BUDczMF9NQ0JTUDFfQkFTRSksCisJCS5kbWFfcnhfc3luYyA9IE9NQVBfRE1BX01DQlNQMV9SWCwKKwkJLmRtYV90eF9zeW5jID0gT01BUF9ETUFfTUNCU1AxX1RYLAorCQkucnhfaXJxID0gSU5UXzczMF9NY0JTUDFSWCwKKwkJLnR4X2lycSA9IElOVF83MzBfTWNCU1AxVFggfSwKKwlbMV0gPSB7IC52aXJ0X2Jhc2UgPSBpb19wMnYoT01BUDczMF9NQ0JTUDJfQkFTRSksCisJCS5kbWFfcnhfc3luYyA9IE9NQVBfRE1BX01DQlNQM19SWCwKKwkJLmRtYV90eF9zeW5jID0gT01BUF9ETUFfTUNCU1AzX1RYLAorCQkucnhfaXJxID0gSU5UXzczMF9NY0JTUDJSWCwKKwkJLnR4X2lycSA9IElOVF83MzBfTWNCU1AyVFggfSwKK307CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCitzdGF0aWMgY29uc3Qgc3RydWN0IG9tYXBfbWNic3BfaW5mbyBtY2JzcF8xNTEwW10gPSB7CisJWzBdID0geyAudmlydF9iYXNlID0gT01BUDE1MTBfTUNCU1AxX0JBU0UsCisJCS5kbWFfcnhfc3luYyA9IE9NQVBfRE1BX01DQlNQMV9SWCwKKwkJLmRtYV90eF9zeW5jID0gT01BUF9ETUFfTUNCU1AxX1RYLAorCQkucnhfaXJxID0gSU5UX01jQlNQMVJYLAorCQkudHhfaXJxID0gSU5UX01jQlNQMVRYIH0sCisJWzFdID0geyAudmlydF9iYXNlID0gaW9fcDJ2KE9NQVAxNTEwX01DQlNQMl9CQVNFKSwKKwkJLmRtYV9yeF9zeW5jID0gT01BUF9ETUFfTUNCU1AyX1JYLAorCQkuZG1hX3R4X3N5bmMgPSBPTUFQX0RNQV9NQ0JTUDJfVFgsCisJCS5yeF9pcnEgPSBJTlRfMTUxMF9TUElfUlgsCisJCS50eF9pcnEgPSBJTlRfMTUxMF9TUElfVFggfSwKKwlbMl0gPSB7IC52aXJ0X2Jhc2UgPSBPTUFQMTUxMF9NQ0JTUDNfQkFTRSwKKwkJLmRtYV9yeF9zeW5jID0gT01BUF9ETUFfTUNCU1AzX1JYLAorCQkuZG1hX3R4X3N5bmMgPSBPTUFQX0RNQV9NQ0JTUDNfVFgsCisJCS5yeF9pcnEgPSBJTlRfTWNCU1AzUlgsCisJCS50eF9pcnEgPSBJTlRfTWNCU1AzVFggfSwKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCitzdGF0aWMgY29uc3Qgc3RydWN0IG9tYXBfbWNic3BfaW5mbyBtY2JzcF8xNjEwW10gPSB7CisJWzBdID0geyAudmlydF9iYXNlID0gT01BUDE2MTBfTUNCU1AxX0JBU0UsCisJCS5kbWFfcnhfc3luYyA9IE9NQVBfRE1BX01DQlNQMV9SWCwKKwkJLmRtYV90eF9zeW5jID0gT01BUF9ETUFfTUNCU1AxX1RYLAorCQkucnhfaXJxID0gSU5UX01jQlNQMVJYLAorCQkudHhfaXJxID0gSU5UX01jQlNQMVRYIH0sCisJWzFdID0geyAudmlydF9iYXNlID0gaW9fcDJ2KE9NQVAxNjEwX01DQlNQMl9CQVNFKSwKKwkJLmRtYV9yeF9zeW5jID0gT01BUF9ETUFfTUNCU1AyX1JYLAorCQkuZG1hX3R4X3N5bmMgPSBPTUFQX0RNQV9NQ0JTUDJfVFgsCisJCS5yeF9pcnEgPSBJTlRfMTYxMF9NY0JTUDJfUlgsCisJCS50eF9pcnEgPSBJTlRfMTYxMF9NY0JTUDJfVFggfSwKKwlbMl0gPSB7IC52aXJ0X2Jhc2UgPSBPTUFQMTYxMF9NQ0JTUDNfQkFTRSwKKwkJLmRtYV9yeF9zeW5jID0gT01BUF9ETUFfTUNCU1AzX1JYLAorCQkuZG1hX3R4X3N5bmMgPSBPTUFQX0RNQV9NQ0JTUDNfVFgsCisJCS5yeF9pcnEgPSBJTlRfTWNCU1AzUlgsCisJCS50eF9pcnEgPSBJTlRfTWNCU1AzVFggfSwKK307CisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgb21hcF9tY2JzcF9pbml0KHZvaWQpCit7CisJaW50IG1jYnNwX2NvdW50ID0gMCwgaTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IG9tYXBfbWNic3BfaW5mbyAqbWNic3BfaW5mbzsKKworCXByaW50aygiSW5pdGlhbGl6aW5nIE9NQVAgTWNCU1Agc3lzdGVtXG4iKTsKKworCW1jYnNwX2RzcF9jayA9IGNsa19nZXQoMCwgImRzcF9jayIpOworCWlmIChJU19FUlIobWNic3BfZHNwX2NrKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1jYnNwOiBjb3VsZCBub3QgYWNxdWlyZSBkc3BfY2sgaGFuZGxlLlxuIik7CisJCXJldHVybiBQVFJfRVJSKG1jYnNwX2RzcF9jayk7CisJfQorCW1jYnNwX2FwaV9jayA9IGNsa19nZXQoMCwgImFwaV9jayIpOworCWlmIChJU19FUlIobWNic3BfZHNwX2NrKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1jYnNwOiBjb3VsZCBub3QgYWNxdWlyZSBhcGlfY2sgaGFuZGxlLlxuIik7CisJCXJldHVybiBQVFJfRVJSKG1jYnNwX2FwaV9jayk7CisJfQorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAorCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJCW1jYnNwX2luZm8gPSBtY2JzcF83MzA7CisJCW1jYnNwX2NvdW50ID0gQVJSQVlfU0laRShtY2JzcF83MzApOworCX0KKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJCW1jYnNwX2luZm8gPSBtY2JzcF8xNTEwOworCQltY2JzcF9jb3VudCA9IEFSUkFZX1NJWkUobWNic3BfMTUxMCk7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKKwlpZiAoY3B1X2lzX29tYXAxNjEwKCkgfHwgY3B1X2lzX29tYXAxNzEwKCkpIHsKKwkJbWNic3BfaW5mbyA9IG1jYnNwXzE2MTA7CisJCW1jYnNwX2NvdW50ID0gQVJSQVlfU0laRShtY2JzcF8xNjEwKTsKKwl9CisjZW5kaWYKKwlmb3IgKGkgPSAwOyBpIDwgT01BUF9NQVhfTUNCU1BfQ09VTlQgOyBpKyspIHsKKwkJaWYgKGkgPj0gbWNic3BfY291bnQpIHsKKwkJCW1jYnNwW2ldLmlvX2Jhc2UgPSAwOworCQkJbWNic3BbaV0uZnJlZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKwkJfQorCQltY2JzcFtpXS5pZCA9IGkgKyAxOworCQltY2JzcFtpXS5mcmVlID0gMTsKKwkJbWNic3BbaV0uZG1hX3R4X2xjaCA9IC0xOworCQltY2JzcFtpXS5kbWFfcnhfbGNoID0gLTE7CisKKwkJbWNic3BbaV0uaW9fYmFzZSA9IG1jYnNwX2luZm9baV0udmlydF9iYXNlOworCQltY2JzcFtpXS50eF9pcnEgPSBtY2JzcF9pbmZvW2ldLnR4X2lycTsKKwkJbWNic3BbaV0ucnhfaXJxID0gbWNic3BfaW5mb1tpXS5yeF9pcnE7CisJCW1jYnNwW2ldLmRtYV9yeF9zeW5jID0gbWNic3BfaW5mb1tpXS5kbWFfcnhfc3luYzsKKwkJbWNic3BbaV0uZG1hX3R4X3N5bmMgPSBtY2JzcF9pbmZvW2ldLmRtYV90eF9zeW5jOworCQlzcGluX2xvY2tfaW5pdCgmbWNic3BbaV0ubG9jayk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworYXJjaF9pbml0Y2FsbChvbWFwX21jYnNwX2luaXQpOworCitFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3BfY29uZmlnKTsKK0VYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9yZXF1ZXN0KTsKK0VYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9mcmVlKTsKK0VYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9zdGFydCk7CitFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3Bfc3RvcCk7CitFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3BfeG1pdF93b3JkKTsKK0VYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9yZWN2X3dvcmQpOworRVhQT1JUX1NZTUJPTChvbWFwX21jYnNwX3htaXRfYnVmZmVyKTsKK0VYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9yZWN2X2J1ZmZlcik7CitFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3Bfc2V0X3NwaV9tb2RlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcC9tdXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2YzYzZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwL211eC5jCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL211eC5jCisgKgorICogVXRpbGl0eSB0byBzZXQgdGhlIE9tYXAgTVVYIGFuZCBQVUxMX0RXTiByZWdpc3RlcnMgZnJvbSBhIHRhYmxlIGluIG11eC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBUb255IExpbmRncmVuIDx0b255LmxpbmRncmVuQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjZGVmaW5lIF9fTVVYX0NfXworI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorCisjaWZkZWYgQ09ORklHX09NQVBfTVVYCisKKy8qCisgKiBTZXRzIHRoZSBPbWFwIE1VWCBhbmQgUFVMTF9EV04gcmVnaXN0ZXJzIGJhc2VkIG9uIHRoZSB0YWJsZQorICovCitpbnQgX19pbml0X29yX21vZHVsZQorb21hcF9jZmdfcmVnKGNvbnN0IHJlZ19jZmdfdCByZWdfY2ZnKQoreworCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobXV4X3NwaW5fbG9jayk7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXJlZ19jZmdfc2V0ICpjZmc7CisJdW5zaWduZWQgaW50IHJlZ19vcmlnID0gMCwgcmVnID0gMCwgcHVfcGRfb3JpZyA9IDAsIHB1X3BkID0gMCwKKwkJcHVsbF9vcmlnID0gMCwgcHVsbCA9IDA7CisJdW5zaWduZWQgaW50IG1hc2ssIHdhcm4gPSAwOworCisJaWYgKHJlZ19jZmcgPiBBUlJBWV9TSVpFKHJlZ19jZmdfdGFibGUpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTVVYOiByZWdfY2ZnICVkXG4iLCByZWdfY2ZnKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2ZnID0gJnJlZ19jZmdfdGFibGVbcmVnX2NmZ107CisKKwkvKgorCSAqIFdlIGRvIGEgcHJldHR5IGxvbmcgc2VjdGlvbiBoZXJlIHdpdGggbG9jayBvbiwgYnV0IHBpbiBtdXhpbmcKKwkgKiBzaG91bGQgb25seSBoYXBwZW4gb24gZHJpdmVyIGluaXQgZm9yIGVhY2ggZHJpdmVyLCBzbyBpdCdzIG5vdCB0aW1lCisJICogY3JpdGljYWwuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJm11eF9zcGluX2xvY2ssIGZsYWdzKTsKKworCS8qIENoZWNrIHRoZSBtdXggcmVnaXN0ZXIgaW4gcXVlc3Rpb24gKi8KKwlpZiAoY2ZnLT5tdXhfcmVnKSB7CisJCXVuc2lnbmVkCXRtcDEsIHRtcDI7CisKKwkJcmVnX29yaWcgPSBvbWFwX3JlYWRsKGNmZy0+bXV4X3JlZyk7CisKKwkJLyogVGhlIG11eCByZWdpc3RlcnMgYWx3YXlzIHNlZW0gdG8gYmUgMyBiaXRzIGxvbmcgKi8KKwkJbWFzayA9ICgweDcgPDwgY2ZnLT5tYXNrX29mZnNldCk7CisJCXRtcDEgPSByZWdfb3JpZyAmIG1hc2s7CisJCXJlZyA9IHJlZ19vcmlnICYgfm1hc2s7CisKKwkJdG1wMiA9IChjZmctPm1hc2sgPDwgY2ZnLT5tYXNrX29mZnNldCk7CisJCXJlZyB8PSB0bXAyOworCisJCWlmICh0bXAxICE9IHRtcDIpCisJCQl3YXJuID0gMTsKKworCQlvbWFwX3dyaXRlbChyZWcsIGNmZy0+bXV4X3JlZyk7CisJfQorCisJLyogQ2hlY2sgZm9yIHB1bGwgdXAgb3IgcHVsbCBkb3duIHNlbGVjdGlvbiBvbiAxNjEwICovCisJaWYgKCFjcHVfaXNfb21hcDE1MTAoKSkgeworCQlpZiAoY2ZnLT5wdV9wZF9yZWcgJiYgY2ZnLT5wdWxsX3ZhbCkgeworCQkJcHVfcGRfb3JpZyA9IG9tYXBfcmVhZGwoY2ZnLT5wdV9wZF9yZWcpOworCQkJbWFzayA9IDEgPDwgY2ZnLT5wdWxsX2JpdDsKKworCQkJaWYgKGNmZy0+cHVfcGRfdmFsKSB7CisJCQkJaWYgKCEocHVfcGRfb3JpZyAmIG1hc2spKQorCQkJCQl3YXJuID0gMTsKKwkJCQkvKiBVc2UgcHVsbCB1cCAqLworCQkJCXB1X3BkID0gcHVfcGRfb3JpZyB8IG1hc2s7CisJCQl9IGVsc2UgeworCQkJCWlmIChwdV9wZF9vcmlnICYgbWFzaykKKwkJCQkJd2FybiA9IDE7CisJCQkJLyogVXNlIHB1bGwgZG93biAqLworCQkJCXB1X3BkID0gcHVfcGRfb3JpZyAmIH5tYXNrOworCQkJfQorCQkJb21hcF93cml0ZWwocHVfcGQsIGNmZy0+cHVfcGRfcmVnKTsKKwkJfQorCX0KKworCS8qIENoZWNrIGZvciBhbiBhc3NvY2lhdGVkIHB1bGwgZG93biByZWdpc3RlciAqLworCWlmIChjZmctPnB1bGxfcmVnKSB7CisJCXB1bGxfb3JpZyA9IG9tYXBfcmVhZGwoY2ZnLT5wdWxsX3JlZyk7CisJCW1hc2sgPSAxIDw8IGNmZy0+cHVsbF9iaXQ7CisKKwkJaWYgKGNmZy0+cHVsbF92YWwpIHsKKwkJCWlmIChwdWxsX29yaWcgJiBtYXNrKQorCQkJCXdhcm4gPSAxOworCQkJLyogTG93IGJpdCA9IHB1bGwgZW5hYmxlZCAqLworCQkJcHVsbCA9IHB1bGxfb3JpZyAmIH5tYXNrOworCQl9IGVsc2UgeworCQkJaWYgKCEocHVsbF9vcmlnICYgbWFzaykpCisJCQkJd2FybiA9IDE7CisJCQkvKiBIaWdoIGJpdCA9IHB1bGwgZGlzYWJsZWQgKi8KKwkJCXB1bGwgPSBwdWxsX29yaWcgfCBtYXNrOworCQl9CisKKwkJb21hcF93cml0ZWwocHVsbCwgY2ZnLT5wdWxsX3JlZyk7CisJfQorCisJaWYgKHdhcm4pIHsKKyNpZmRlZiBDT05GSUdfT01BUF9NVVhfV0FSTklOR1MKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTVVYOiBpbml0aWFsaXplZCAlc1xuIiwgY2ZnLT5uYW1lKTsKKyNlbmRpZgorCX0KKworI2lmZGVmIENPTkZJR19PTUFQX01VWF9ERUJVRworCWlmIChjZmctPmRlYnVnIHx8IHdhcm4pIHsKKwkJcHJpbnRrKCJNVVg6IFNldHRpbmcgcmVnaXN0ZXIgJXNcbiIsIGNmZy0+bmFtZSk7CisJCXByaW50aygiICAgICAgJXMgKDB4JTA4eCkgPSAweCUwOHggLT4gMHglMDh4XG4iLAorCQkgICAgICAgY2ZnLT5tdXhfcmVnX25hbWUsIGNmZy0+bXV4X3JlZywgcmVnX29yaWcsIHJlZyk7CisKKwkJaWYgKCFjcHVfaXNfb21hcDE1MTAoKSkgeworCQkJaWYgKGNmZy0+cHVfcGRfcmVnICYmIGNmZy0+cHVsbF92YWwpIHsKKwkJCQlwcmludGsoIiAgICAgICVzICgweCUwOHgpID0gMHglMDh4IC0+IDB4JTA4eFxuIiwKKwkJCQkgICAgICAgY2ZnLT5wdV9wZF9uYW1lLCBjZmctPnB1X3BkX3JlZywKKwkJCQkgICAgICAgcHVfcGRfb3JpZywgcHVfcGQpOworCQkJfQorCQl9CisKKwkJaWYgKGNmZy0+cHVsbF9yZWcpCisJCQlwcmludGsoIiAgICAgICVzICgweCUwOHgpID0gMHglMDh4IC0+IDB4JTA4eFxuIiwKKwkJCSAgICAgICBjZmctPnB1bGxfbmFtZSwgY2ZnLT5wdWxsX3JlZywgcHVsbF9vcmlnLCBwdWxsKTsKKwl9CisjZW5kaWYKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm11eF9zcGluX2xvY2ssIGZsYWdzKTsKKworI2lmZGVmIENPTkZJR19PTUFQX01VWF9FUlJPUlMKKwlyZXR1cm4gd2FybiA/IC1FVFhUQlNZIDogMDsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworRVhQT1JUX1NZTUJPTChvbWFwX2NmZ19yZWcpOworCisjZW5kaWYJLyogQ09ORklHX09NQVBfTVVYICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAvb2NwaS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwL29jcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWNlZDEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwL29jcGkuYwpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcC9vY3BpLmMKKyAqCisgKiBNaW5pbWFsIE9DUCBidXMgc3VwcG9ydCBmb3Igb21hcDE2eHgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKiBXcml0dGVuIGJ5IFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CisgKgorICogTW9kaWZpZWQgZm9yIGNsb2NrIGZyYW1ld29yayBieSBQYXVsIE11bmR0IDxwYXVsLm11bmR0QG5va2lhLmNvbT4uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworI2RlZmluZSBPQ1BJX0JBU0UJCTB4ZmZmZWMzMjAKKyNkZWZpbmUgT0NQSV9GQVVMVAkJKE9DUElfQkFTRSArIDB4MDApCisjZGVmaW5lIE9DUElfQ01EX0ZBVUxUCQkoT0NQSV9CQVNFICsgMHgwNCkKKyNkZWZpbmUgT0NQSV9TSU5UMAkJKE9DUElfQkFTRSArIDB4MDgpCisjZGVmaW5lIE9DUElfVEFCT1JUCQkoT0NQSV9CQVNFICsgMHgwYykKKyNkZWZpbmUgT0NQSV9TSU5UMQkJKE9DUElfQkFTRSArIDB4MTApCisjZGVmaW5lIE9DUElfUFJPVAkJKE9DUElfQkFTRSArIDB4MTQpCisjZGVmaW5lIE9DUElfU0VDCQkoT0NQSV9CQVNFICsgMHgxOCkKKworLyogVVNCIE9IQ0kgT0NQSSBhY2Nlc3MgZXJyb3IgcmVnaXN0ZXJzICovCisjZGVmaW5lIEhPU1RVRUFERFIJMHhmZmZiYTBlMAorI2RlZmluZSBIT1NUVUVTVEFUVVMJMHhmZmZiYTBlNAorCitzdGF0aWMgc3RydWN0IGNsayAqb2NwaV9jazsKKworLyoKKyAqIEVuYWJsZXMgZGV2aWNlIGFjY2VzcyB0byBPTUFQIGJ1c2VzIHZpYSB0aGUgT0NQSSBicmlkZ2UKKyAqIEZJWE1FOiBBZGQgbG9ja2luZworICovCitpbnQgb2NwaV9lbmFibGUodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJaWYgKCFjcHVfaXNfb21hcDE2eHgoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBNYWtlIHN1cmUgdGhlcmUncyBjbG9jayBmb3IgT0NQSSAqLworCWNsa19lbmFibGUob2NwaV9jayk7CisKKwkvKiBFbmFibGUgYWNjZXNzIGZvciBPSENJIGluIE9DUEkgKi8KKwl2YWwgPSBvbWFwX3JlYWRsKE9DUElfUFJPVCk7CisJdmFsICY9IH4weGZmOworCS8vdmFsICY9ICgxIDw8IDApOwkvKiBBbGxvdyBhY2Nlc3Mgb25seSB0byBFTUlGUyAqLworCW9tYXBfd3JpdGVsKHZhbCwgT0NQSV9QUk9UKTsKKworCXZhbCA9IG9tYXBfcmVhZGwoT0NQSV9TRUMpOworCXZhbCAmPSB+MHhmZjsKKwlvbWFwX3dyaXRlbCh2YWwsIE9DUElfU0VDKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChvY3BpX2VuYWJsZSk7CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfb2NwaV9pbml0KHZvaWQpCit7CisJaWYgKCFjcHVfaXNfb21hcDE2eHgoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlvY3BpX2NrID0gY2xrX2dldChOVUxMLCAibDNfb2NwaV9jayIpOworCWlmIChJU19FUlIob2NwaV9jaykpCisJCXJldHVybiBQVFJfRVJSKG9jcGlfY2spOworCisJY2xrX3VzZShvY3BpX2NrKTsKKwlvY3BpX2VuYWJsZSgpOworCXByaW50aygiT01BUCBPQ1BJIGludGVyY29ubmVjdCBkcml2ZXIgbG9hZGVkXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb21hcF9vY3BpX2V4aXQodm9pZCkKK3sKKwkvKiBSRVZJU0lUOiBEaXNhYmxlIE9DUEkgKi8KKworCWlmICghY3B1X2lzX29tYXAxNnh4KCkpCisJCXJldHVybjsKKworCWNsa191bnVzZShvY3BpX2NrKTsKKwljbGtfcHV0KG9jcGlfY2spOworfQorCitNT0RVTEVfQVVUSE9SKCJUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJPTUFQIE9DUEkgYnVzIGNvbnRyb2xsZXIgbW9kdWxlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7Cittb2R1bGVfaW5pdChvbWFwX29jcGlfaW5pdCk7Cittb2R1bGVfZXhpdChvbWFwX29jcGlfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAvcG0uYyBiL2FyY2gvYXJtL21hY2gtb21hcC9wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZmFjMTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAvcG0uYwpAQCAtMCwwICsxLDYyOCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcC9wbS5jCisgKgorICogT01BUCBQb3dlciBNYW5hZ2VtZW50IFJvdXRpbmVzCisgKgorICogT3JpZ2luYWwgY29kZSBmb3IgdGhlIFNBMTF4MDoKKyAqIENvcHlyaWdodCAoYykgMjAwMSBDbGlmZiBCcmFrZSA8Y2JyYWtlQGFjY2VsZW50LmNvbT4KKyAqCisgKiBNb2RpZmllZCBmb3IgdGhlIFBYQTI1MCBieSBOaWNvbGFzIFBpdHJlOgorICogQ29weXJpZ2h0IChjKSAyMDAyIE1vbnRhIFZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogTW9kaWZpZWQgZm9yIHRoZSBPTUFQMTUxMCBieSBEYXZpZCBTaW5nbGV0b246CisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgTW9udGEgVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBDbGVhbnVwIDIwMDQgZm9yIE9NQVAxNTEwLzE2MTAgYnkgRGlyayBCZWhtZSA8ZGlyay5iZWhtZUBkZS5ib3NjaC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCisgKiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvb21hcDE2eHguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3RjLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdHBzNjUwMTAuaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXJtX3NsZWVwX3NhdmVbQVJNX1NMRUVQX1NBVkVfU0laRV07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgdWxwZF9zbGVlcF9zYXZlW1VMUERfU0xFRVBfU0FWRV9TSVpFXTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXB1aTE1MTBfc2xlZXBfc2F2ZVtNUFVJMTUxMF9TTEVFUF9TQVZFX1NJWkVdOworc3RhdGljIHVuc2lnbmVkIGludCBtcHVpMTYxMF9zbGVlcF9zYXZlW01QVUkxNjEwX1NMRUVQX1NBVkVfU0laRV07CisKKy8qCisgKiBMZXQncyBwb3dlciBkb3duIG9uIGlkbGUsIGJ1dCBvbmx5IGlmIHdlIGFyZSByZWFsbHkKKyAqIGlkbGUsIGJlY2F1c2Ugb25jZSB3ZSBzdGFydCBkb3duIHRoZSBwYXRoIG9mCisgKiBnb2luZyBpZGxlIHdlIGNvbnRpbnVlIHRvIGRvIGlkbGUgZXZlbiBpZiB3ZSBnZXQKKyAqIGEgY2xvY2sgdGljayBpbnRlcnJ1cHQgLiAuCisgKi8KK3ZvaWQgb21hcF9wbV9pZGxlKHZvaWQpCit7CisJaW50ICgqZnVuY19wdHIpKHZvaWQpID0gMDsKKwl1bnNpZ25lZCBpbnQgbWFzazMyID0gMDsKKworCS8qCisJICogSWYgdGhlIERTUCBpcyBiZWluZyB1c2VkIGxldCdzIGp1c3QgaWRsZSB0aGUgQ1BVLCB0aGUgb3ZlcmhlYWQKKwkgKiB0byB3YWtlIHVwIGZyb20gQmlnIFNsZWVwIGlzIGJpZywgbWlsbGlzZWNvbmRzIHZlcnN1cyBtaWNybworCSAqIHNlY29uZHMgZm9yIHdhaXQgZm9yIGludGVycnVwdC4KKwkgKi8KKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJbG9jYWxfZmlxX2Rpc2FibGUoKTsKKwlpZiAobmVlZF9yZXNjaGVkKCkpIHsKKwkJbG9jYWxfZmlxX2VuYWJsZSgpOworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCXJldHVybjsKKwl9CisJbWFzazMyID0gb21hcF9yZWFkbChBUk1fU1lTU1QpOworCWxvY2FsX2ZpcV9lbmFibGUoKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQXzMyS19USU1FUikgJiYgZGVmaW5lZChDT05GSUdfTk9fSURMRV9IWikKKwkvKiBPdmVycmlkZSB0aW1lciB0byB1c2UgVlNUIGZvciB0aGUgbmV4dCBjeWNsZSAqLworCW9tYXBfMzJrX3RpbWVyX25leHRfdnN0X2ludGVycnVwdCgpOworI2VuZGlmCisKKwlpZiAoKG1hc2szMiAmIERTUF9JRExFKSA9PSAwKSB7CisJCV9fYXNtX18gdm9sYXRpbGUgKCJtY3IJcDE1LCAwLCByMCwgYzcsIGMwLCA0Iik7CisJfSBlbHNlIHsKKworCQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJCWZ1bmNfcHRyID0gKHZvaWQgKikoT01BUDE1MTBfU1JBTV9JRExFX1NVU1BFTkQpOworCQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTYxMCgpIHx8IGNwdV9pc19vbWFwMTcxMCgpKSB7CisJCQlmdW5jX3B0ciA9ICh2b2lkICopKE9NQVAxNjEwX1NSQU1fSURMRV9TVVNQRU5EKTsKKwkJfSBlbHNlIGlmIChjcHVfaXNfb21hcDU5MTIoKSkgeworCQkJZnVuY19wdHIgPSAodm9pZCAqKShPTUFQNTkxMl9TUkFNX0lETEVfU1VTUEVORCk7CisJCX0KKworCQlmdW5jX3B0cigpOworCX0KK30KKworLyoKKyAqIENvbmZpZ3VyYXRpb24gb2YgdGhlIHdha2V1cCBldmVudCBpcyBib2FyZCBzcGVjaWZpYy4gRm9yIHRoZQorICogbW9tZW50IHdlIHB1dCBpdCBpbnRvIHRoaXMgaGVscGVyIGZ1bmN0aW9uLiBMYXRlciBpdCBtYXkgbW92ZQorICogdG8gYm9hcmQgc3BlY2lmaWMgZmlsZXMuCisgKi8KK3N0YXRpYyB2b2lkIG9tYXBfcG1fd2FrZXVwX3NldHVwKHZvaWQpCit7CisJLyoKKwkgKiBFbmFibGUgQVJNIFhPUiBjbG9jayBhbmQgcmVsZWFzZSBwZXJpcGhlcmFsIGZyb20gcmVzZXQgYnkKKwkgKiB3cml0aW5nIDEgdG8gUEVSX0VOIGJpdCBpbiBBUk1fUlNUQ1QyLCB0aGlzIGlzIHJlcXVpcmVkCisJICogZm9yIFVBUlQgY29uZmlndXJhdGlvbiB0byB1c2UgVUFSVDIgdG8gd2FrZSB1cC4KKwkgKi8KKworCW9tYXBfd3JpdGVsKG9tYXBfcmVhZGwoQVJNX0lETEVDVDIpIHwgRU5BQkxFX1hPUkNMSywgQVJNX0lETEVDVDIpOworCW9tYXBfd3JpdGVsKG9tYXBfcmVhZGwoQVJNX1JTVENUMikgfCBQRVJfRU4sIEFSTV9SU1RDVDIpOworCW9tYXBfd3JpdGV3KE1PREVNXzMyS19FTiwgVUxQRF9DTE9DS19DVFJMKTsKKworCS8qCisJICogVHVybiBvZmYgYWxsIGludGVycnVwdHMgZXhjZXB0IEwxLTJuZCBsZXZlbCBjYXNjYWRlLAorCSAqIGFuZCB0aGUgTDIgd2FrZXVwIGludGVycnVwdHM6IGtleXBhZCBhbmQgVUFSVDIuCisJICovCisKKwlvbWFwX3dyaXRlbCh+SVJRX0xFVkVMMiwgT01BUF9JSDFfTUlSKTsKKworCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCQlvbWFwX3dyaXRlbCh+KElSUV9VQVJUMiB8IElSUV9LRVlCT0FSRCksICBPTUFQX0lIMl9NSVIpOworCX0KKworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQlvbWFwX3dyaXRlbCh+KElSUV9VQVJUMiB8IElSUV9LRVlCT0FSRCksIE9NQVBfSUgyXzBfTUlSKTsKKworCQlvbWFwX3dyaXRlbCh+MHgwLCBPTUFQX0lIMl8xX01JUik7CisJCW9tYXBfd3JpdGVsKH4weDAsIE9NQVBfSUgyXzJfTUlSKTsKKwkJb21hcF93cml0ZWwofjB4MCwgT01BUF9JSDJfM19NSVIpOworCX0KKworCS8qICBOZXcgSVJRIGFncmVlbWVudCAqLworIAlvbWFwX3dyaXRlbCgxLCBPTUFQX0lIMV9DT05UUk9MKTsKKworCS8qIGV4dGVybmFsIFBVTEwgdG8gZG93biwgYml0IDIyID0gMCAqLworCW9tYXBfd3JpdGVsKG9tYXBfcmVhZGwoUFVMTF9EV05fQ1RSTF8yKSAmIH4oMTw8MjIpLCBQVUxMX0RXTl9DVFJMXzIpOworfQorCit2b2lkIG9tYXBfcG1fc3VzcGVuZCh2b2lkKQoreworCXVuc2lnbmVkIGludCBtYXNrMzIgPSAwOworCXVuc2lnbmVkIGxvbmcgYXJnMCA9IDAsIGFyZzEgPSAwOworCWludCAoKmZ1bmNfcHRyKSh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpID0gMDsKKwl1bnNpZ25lZCBzaG9ydCBzYXZlX2RzcF9pZGxlY3QyOworCisJcHJpbnRrKCJQTTogT01BUCV4IGlzIGVudGVyaW5nIGRlZXAgc2xlZXAgbm93IC4uLlxuIiwgc3lzdGVtX3Jldik7CisKKwlpZiAobWFjaGluZV9pc19vbWFwX29zaygpKSB7CisJCS8qIFN0b3AgTEVEMSAoRDkpIGJsaW5rICovCisJCXRwczY1MDEwX3NldF9sZWQoTEVEMSwgT0ZGKTsKKwl9CisKKwkvKgorCSAqIFN0ZXAgMTogdHVybiBvZmYgaW50ZXJydXB0cworCSAqLworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlsb2NhbF9maXFfZGlzYWJsZSgpOworCisJLyoKKwkgKiBTdGVwIDI6IHNhdmUgcmVnaXN0ZXJzCisJICoKKwkgKiBUaGUgb21hcCBpcyBhIHN0cmFuZ2UvYmVhdXRpZnVsIGRldmljZS4gVGhlIGNhY2hlcywgbWVtb3J5CisJICogYW5kIHJlZ2lzdGVyIHN0YXRlIGFyZSBwcmVzZXJ2ZWQgYWNyb3NzIHBvd2VyIHNhdmVzLgorCSAqIFdlIGhhdmUgdG8gc2F2ZSBhbmQgcmVzdG9yZSB2ZXJ5IGxpdHRsZSByZWdpc3RlciBzdGF0ZSB0bworCSAqIGlkbGUgdGhlIG9tYXAuCisgICAgICAgICAqCisgCSAqIFNhdmUgaW50ZXJydXB0LCBNUFVJLCBBUk0gYW5kIFVQTEQgY29udHJvbCByZWdpc3RlcnMuCisJICovCisKKwlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJTVBVSTE1MTBfU0FWRShPTUFQX0lIMV9NSVIpOworCQlNUFVJMTUxMF9TQVZFKE9NQVBfSUgyX01JUik7CisJCU1QVUkxNTEwX1NBVkUoTVBVSV9DVFJMKTsKKwkJTVBVSTE1MTBfU0FWRShNUFVJX0RTUF9CT09UX0NPTkZJRyk7CisJCU1QVUkxNTEwX1NBVkUoTVBVSV9EU1BfQVBJX0NPTkZJRyk7CisJCU1QVUkxNTEwX1NBVkUoRU1JRlNfQ09ORklHKTsKKwkJTVBVSTE1MTBfU0FWRShFTUlGRl9TRFJBTV9DT05GSUcpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKKwkJTVBVSTE2MTBfU0FWRShPTUFQX0lIMV9NSVIpOworCQlNUFVJMTYxMF9TQVZFKE9NQVBfSUgyXzBfTUlSKTsKKwkJTVBVSTE2MTBfU0FWRShPTUFQX0lIMl8xX01JUik7CisJCU1QVUkxNjEwX1NBVkUoT01BUF9JSDJfMl9NSVIpOworCQlNUFVJMTYxMF9TQVZFKE9NQVBfSUgyXzNfTUlSKTsKKwkJTVBVSTE2MTBfU0FWRShNUFVJX0NUUkwpOworCQlNUFVJMTYxMF9TQVZFKE1QVUlfRFNQX0JPT1RfQ09ORklHKTsKKwkJTVBVSTE2MTBfU0FWRShNUFVJX0RTUF9BUElfQ09ORklHKTsKKwkJTVBVSTE2MTBfU0FWRShFTUlGU19DT05GSUcpOworCQlNUFVJMTYxMF9TQVZFKEVNSUZGX1NEUkFNX0NPTkZJRyk7CisJfQorCisJQVJNX1NBVkUoQVJNX0NLQ1RMKTsKKwlBUk1fU0FWRShBUk1fSURMRUNUMSk7CisJQVJNX1NBVkUoQVJNX0lETEVDVDIpOworCUFSTV9TQVZFKEFSTV9FV1VQQ1QpOworCUFSTV9TQVZFKEFSTV9SU1RDVDEpOworCUFSTV9TQVZFKEFSTV9SU1RDVDIpOworCUFSTV9TQVZFKEFSTV9TWVNTVCk7CisJVUxQRF9TQVZFKFVMUERfQ0xPQ0tfQ1RSTCk7CisJVUxQRF9TQVZFKFVMUERfU1RBVFVTX1JFUSk7CisKKwkvKgorCSAqIFN0ZXAgMzogTE9XX1BXUiBzaWduYWwgZW5hYmxpbmcKKwkgKgorCSAqIEFsbG93IHRoZSBMT1dfUFdSIHNpZ25hbCB0byBiZSB2aXNpYmxlIG9uIE1QVUlPNSBiYWxsLgorCSAqLworCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCQkvKiBQT1dFUl9DVFJMX1JFRyA9IDB4MSAoTE9XX1BPV0VSIGlzIGF2YWlsYWJsZSkgKi8KKwkJb21hcF93cml0ZXcob21hcF9yZWFkdyhVTFBEX1BPV0VSX0NUUkwpIHwKKwkJCSAgICBPTUFQMTUxMF9VTFBEX0xPV19QT1dFUl9SRVEsIFVMUERfUE9XRVJfQ1RSTCk7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQkvKiBQT1dFUl9DVFJMX1JFRyA9IDB4MSAoTE9XX1BPV0VSIGlzIGF2YWlsYWJsZSkgKi8KKwkJb21hcF93cml0ZXcob21hcF9yZWFkdyhVTFBEX1BPV0VSX0NUUkwpIHwKKwkJCSAgICBPTUFQMTYxMF9VTFBEX0xPV19QT1dFUl9SRVEsIFVMUERfUE9XRVJfQ1RSTCk7CisJfQorCisJLyogY29uZmlndXJlIExPV19QV1IgcGluICovCisJb21hcF9jZmdfcmVnKFQyMF8xNjEwX0xPV19QV1IpOworCisJLyoKKwkgKiBTdGVwIDQ6IE9NQVAgRFNQIFNodXRkb3duCisJICovCisKKwkvKiBTZXQgRFNQX1JTVCA9IDEgYW5kIERTUF9FTiA9IDAsIHB1dCBEU1AgYmxvY2sgaW50byByZXNldCAqLworCW9tYXBfd3JpdGVsKChvbWFwX3JlYWRsKEFSTV9SU1RDVDEpIHwgRFNQX1JTVCkgJiB+RFNQX0VOQUJMRSwKKwkJICAgIEFSTV9SU1RDVDEpOworCisJLyogU2V0IERTUCBib290IG1vZGUgdG8gRFNQLUlETEUsIERTUF9CT09UX01PREUgPSAweDIgKi8KKyAgICAgICAgb21hcF93cml0ZWwoRFNQX0lETEVfTU9ERSwgTVBVSV9EU1BfQk9PVF9DT05GSUcpOworCisJLyogU2V0IEVOX0RTUENLID0gMCwgc3RvcCBEU1AgYmxvY2sgY2xvY2sgKi8KKwlvbWFwX3dyaXRlbChvbWFwX3JlYWRsKEFSTV9DS0NUTCkgJiB+RFNQX0NMT0NLX0VOQUJMRSwgQVJNX0NLQ1RMKTsKKworCS8qIFN0b3AgYW55IERTUCBkb21haW4gY2xvY2tzICovCisJb21hcF93cml0ZWwob21hcF9yZWFkbChBUk1fSURMRUNUMikgfCAoMTw8RU5fQVBJQ0spLCBBUk1fSURMRUNUMik7CisJc2F2ZV9kc3BfaWRsZWN0MiA9IF9fcmF3X3JlYWR3KERTUF9JRExFQ1QyKTsKKwlfX3Jhd193cml0ZXcoMCwgRFNQX0lETEVDVDIpOworCisJLyoKKwkgKiBTdGVwIDU6IFdha2V1cCBFdmVudCBTZXR1cAorCSAqLworCisJb21hcF9wbV93YWtldXBfc2V0dXAoKTsKKworCS8qCisJICogU3RlcCA2YTogQVJNIGFuZCBUcmFmZmljIGNvbnRyb2xsZXIgc2h1dGRvd24KKwkgKgorCSAqIFN0ZXAgNiBzdGFydHMgaGVyZSB3aXRoIGNsb2NrIGFuZCB3YXRjaGRvZyBkaXNhYmxlCisJICovCisKKwkvKiBzdG9wIGNsb2NrcyAqLworCW1hc2szMiA9IG9tYXBfcmVhZGwoQVJNX0lETEVDVDIpOworCW1hc2szMiAmPSB+KDE8PEVOX1dEVENLKTsgIC8qIGJpdCAwIC0+IDAgKFdEVCBjbG9jaykgKi8KKwltYXNrMzIgfD0gICgxPDxFTl9YT1JQQ0spOyAvKiBiaXQgMSAtPiAxIChYT1JQQ0sgY2xvY2spICovCisJbWFzazMyICY9IH4oMTw8RU5fUEVSQ0spOyAgLyogYml0IDIgLT4gMCAoTVBVUEVSX0NLIGNsb2NrKSAqLworCW1hc2szMiAmPSB+KDE8PEVOX0xDRENLKTsgIC8qIGJpdCAzIC0+IDAgKExDREMgY2xvY2spICovCisJbWFzazMyICY9IH4oMTw8RU5fTEJDSyk7ICAgLyogYml0IDQgLT4gMCAobG9jYWwgYnVzIGNsb2NrKSAqLworCW1hc2szMiB8PSAgKDE8PEVOX0FQSUNLKTsgIC8qIGJpdCA2IC0+IDEgKE1QVUkgY2xvY2spICovCisJbWFzazMyICY9IH4oMTw8RU5fVElNQ0spOyAgLyogYml0IDcgLT4gMCAoTVBVIHRpbWVyIGNsb2NrKSAqLworCW1hc2szMiAmPSB+KDE8PERNQUNLX1JFUSk7IC8qIGJpdCA4IC0+IDAgKERNQUMgY2xvY2spICovCisJbWFzazMyICY9IH4oMTw8RU5fR1BJT0NLKTsgLyogYml0IDkgLT4gMCAoR1BJTyBjbG9jaykgKi8KKwlvbWFwX3dyaXRlbChtYXNrMzIsIEFSTV9JRExFQ1QyKTsKKworCS8qIGRpc2FibGUgQVJNIHdhdGNoZG9nICovCisJb21hcF93cml0ZWwoMHgwMEY1LCBPTUFQX1dEVF9USU1FUl9NT0RFKTsKKwlvbWFwX3dyaXRlbCgweDAwQTAsIE9NQVBfV0RUX1RJTUVSX01PREUpOworCisJLyoKKwkgKiBTdGVwIDZiOiBBUk0gYW5kIFRyYWZmaWMgY29udHJvbGxlciBzaHV0ZG93bgorCSAqCisJICogU3RlcCA2IGNvbnRpbnVlcyBoZXJlLiBQcmVwYXJlIGp1bXAgdG8gcG93ZXIgbWFuYWdlbWVudAorCSAqIGFzc2VtYmx5IGNvZGUgaW4gaW50ZXJuYWwgU1JBTS4KKwkgKgorCSAqIFNpbmNlIHRoZSBvbWFwX2NwdV9zdXNwZW5kIHJvdXRpbmUgaGFzIGJlZW4gY29waWVkIHRvCisJICogU1JBTSwgd2UnbGwgZG8gYW4gaW5kaXJlY3QgcHJvY2VkdXJlIGNhbGwgdG8gaXQgYW5kIHBhc3MgdGhlCisJICogY29udGVudHMgb2YgYXJtX2lkbGVjdDEgYW5kIGFybV9pZGxlY3QyIHNvIGl0IGNhbiByZXN0b3JlCisJICogdGhlbSB3aGVuIGl0IHdha2VzIHVwIGFuZCBpdCB3aWxsIHJldHVybi4KKwkgKi8KKworCWFyZzAgPSBhcm1fc2xlZXBfc2F2ZVtBUk1fU0xFRVBfU0FWRV9BUk1fSURMRUNUMV07CisJYXJnMSA9IGFybV9zbGVlcF9zYXZlW0FSTV9TTEVFUF9TQVZFX0FSTV9JRExFQ1QyXTsKKworCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCQlmdW5jX3B0ciA9ICh2b2lkICopKE9NQVAxNTEwX1NSQU1fQVBJX1NVU1BFTkQpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNjEwKCkgfHwgY3B1X2lzX29tYXAxNzEwKCkpIHsKKwkJZnVuY19wdHIgPSAodm9pZCAqKShPTUFQMTYxMF9TUkFNX0FQSV9TVVNQRU5EKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNTkxMigpKSB7CisJCWZ1bmNfcHRyID0gKHZvaWQgKikoT01BUDU5MTJfU1JBTV9BUElfU1VTUEVORCk7CisJfQorCisJLyoKKwkgKiBTdGVwIDZjOiBBUk0gYW5kIFRyYWZmaWMgY29udHJvbGxlciBzaHV0ZG93bgorCSAqCisJICogSnVtcCB0byBhc3NlbWJseSBjb2RlLiBUaGUgcHJvY2Vzc29yIHdpbGwgc3RheSB0aGVyZQorIAkgKiB1bnRpbCB3YWtlIHVwLgorCSAqLworCisgICAgICAgIGZ1bmNfcHRyKGFyZzAsIGFyZzEpOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgaGVyZSwgcHJvY2Vzc29yIGlzIHdva2VuIHVwIQorCSAqLworCisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJCS8qIFBPV0VSX0NUUkxfUkVHID0gMHgwIChMT1dfUE9XRVIgaXMgZGlzYWJsZWQpICovCisJCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoVUxQRF9QT1dFUl9DVFJMKSAmCisJCQkgICAgfk9NQVAxNTEwX1VMUERfTE9XX1BPV0VSX1JFUSwgVUxQRF9QT1dFUl9DVFJMKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7CisJCS8qIFBPV0VSX0NUUkxfUkVHID0gMHgwIChMT1dfUE9XRVIgaXMgZGlzYWJsZWQpICovCisJCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoVUxQRF9QT1dFUl9DVFJMKSAmCisJCQkgICAgfk9NQVAxNjEwX1VMUERfTE9XX1BPV0VSX1JFUSwgVUxQRF9QT1dFUl9DVFJMKTsKKwl9CisKKworCS8qIFJlc3RvcmUgRFNQIGNsb2NrcyAqLworCW9tYXBfd3JpdGVsKG9tYXBfcmVhZGwoQVJNX0lETEVDVDIpIHwgKDE8PEVOX0FQSUNLKSwgQVJNX0lETEVDVDIpOworCV9fcmF3X3dyaXRldyhzYXZlX2RzcF9pZGxlY3QyLCBEU1BfSURMRUNUMik7CisJQVJNX1JFU1RPUkUoQVJNX0lETEVDVDIpOworCisJLyoKKwkgKiBSZXN0b3JlIEFSTSBzdGF0ZSwgZXhjZXB0IEFSTV9JRExFQ1QxLzIgd2hpY2ggb21hcF9jcHVfc3VzcGVuZCBkaWQKKwkgKi8KKworCUFSTV9SRVNUT1JFKEFSTV9DS0NUTCk7CisJQVJNX1JFU1RPUkUoQVJNX0VXVVBDVCk7CisJQVJNX1JFU1RPUkUoQVJNX1JTVENUMSk7CisJQVJNX1JFU1RPUkUoQVJNX1JTVENUMik7CisJQVJNX1JFU1RPUkUoQVJNX1NZU1NUKTsKKwlVTFBEX1JFU1RPUkUoVUxQRF9DTE9DS19DVFJMKTsKKwlVTFBEX1JFU1RPUkUoVUxQRF9TVEFUVVNfUkVRKTsKKworCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCQlNUFVJMTUxMF9SRVNUT1JFKE1QVUlfQ1RSTCk7CisJCU1QVUkxNTEwX1JFU1RPUkUoTVBVSV9EU1BfQk9PVF9DT05GSUcpOworCQlNUFVJMTUxMF9SRVNUT1JFKE1QVUlfRFNQX0FQSV9DT05GSUcpOworCQlNUFVJMTUxMF9SRVNUT1JFKEVNSUZTX0NPTkZJRyk7CisJCU1QVUkxNTEwX1JFU1RPUkUoRU1JRkZfU0RSQU1fQ09ORklHKTsKKwkJTVBVSTE1MTBfUkVTVE9SRShPTUFQX0lIMV9NSVIpOworCQlNUFVJMTUxMF9SRVNUT1JFKE9NQVBfSUgyX01JUik7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQlNUFVJMTYxMF9SRVNUT1JFKE1QVUlfQ1RSTCk7CisJCU1QVUkxNjEwX1JFU1RPUkUoTVBVSV9EU1BfQk9PVF9DT05GSUcpOworCQlNUFVJMTYxMF9SRVNUT1JFKE1QVUlfRFNQX0FQSV9DT05GSUcpOworCQlNUFVJMTYxMF9SRVNUT1JFKEVNSUZTX0NPTkZJRyk7CisJCU1QVUkxNjEwX1JFU1RPUkUoRU1JRkZfU0RSQU1fQ09ORklHKTsKKworCQlNUFVJMTYxMF9SRVNUT1JFKE9NQVBfSUgxX01JUik7CisJCU1QVUkxNjEwX1JFU1RPUkUoT01BUF9JSDJfMF9NSVIpOworCQlNUFVJMTYxMF9SRVNUT1JFKE9NQVBfSUgyXzFfTUlSKTsKKwkJTVBVSTE2MTBfUkVTVE9SRShPTUFQX0lIMl8yX01JUik7CisJCU1QVUkxNjEwX1JFU1RPUkUoT01BUF9JSDJfM19NSVIpOworCX0KKworCS8qCisJICogUmVlbmFibGUgaW50ZXJydXB0cworCSAqLworCisJbG9jYWxfaXJxX2VuYWJsZSgpOworCWxvY2FsX2ZpcV9lbmFibGUoKTsKKworCXByaW50aygiUE06IE9NQVAleCBpcyByZS1zdGFydGluZyBmcm9tIGRlZXAgc2xlZXAuLi5cbiIsIHN5c3RlbV9yZXYpOworCisJaWYgKG1hY2hpbmVfaXNfb21hcF9vc2soKSkgeworCQkvKiBMZXQgTEVEMSAoRDkpIGJsaW5rIGFnYWluICovCisJCXRwczY1MDEwX3NldF9sZWQoTEVEMSwgQkxJTkspOworCX0KK30KKworI2lmIGRlZmluZWQoREVCVUcpICYmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpCitzdGF0aWMgaW50IGdfcmVhZF9jb21wbGV0ZWQ7CisKKy8qCisgKiBSZWFkIHN5c3RlbSBQTSByZWdpc3RlcnMgZm9yIGRlYnVnZ2luZworICovCitzdGF0aWMgaW50IG9tYXBfcG1fcmVhZF9wcm9jKAorCWNoYXIgKnBhZ2VfYnVmZmVyLAorCWNoYXIgKipteV9maXJzdF9ieXRlLAorCW9mZl90IHZpcnR1YWxfc3RhcnQsCisJaW50IGxlbmd0aCwKKwlpbnQgKmVvZiwKKwl2b2lkICpkYXRhKQoreworCWludCBteV9idWZmZXJfb2Zmc2V0ID0gMDsKKwljaGFyICogY29uc3QgbXlfYmFzZSA9IHBhZ2VfYnVmZmVyOworCisJQVJNX1NBVkUoQVJNX0NLQ1RMKTsKKwlBUk1fU0FWRShBUk1fSURMRUNUMSk7CisJQVJNX1NBVkUoQVJNX0lETEVDVDIpOworCUFSTV9TQVZFKEFSTV9FV1VQQ1QpOworCUFSTV9TQVZFKEFSTV9SU1RDVDEpOworCUFSTV9TQVZFKEFSTV9SU1RDVDIpOworCUFSTV9TQVZFKEFSTV9TWVNTVCk7CisKKwlVTFBEX1NBVkUoVUxQRF9JVF9TVEFUVVMpOworCVVMUERfU0FWRShVTFBEX0NMT0NLX0NUUkwpOworCVVMUERfU0FWRShVTFBEX1NPRlRfUkVRKTsKKwlVTFBEX1NBVkUoVUxQRF9TVEFUVVNfUkVRKTsKKwlVTFBEX1NBVkUoVUxQRF9EUExMX0NUUkwpOworCVVMUERfU0FWRShVTFBEX1BPV0VSX0NUUkwpOworCisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJCU1QVUkxNTEwX1NBVkUoTVBVSV9DVFJMKTsKKwkJTVBVSTE1MTBfU0FWRShNUFVJX0RTUF9TVEFUVVMpOworCQlNUFVJMTUxMF9TQVZFKE1QVUlfRFNQX0JPT1RfQ09ORklHKTsKKwkJTVBVSTE1MTBfU0FWRShNUFVJX0RTUF9BUElfQ09ORklHKTsKKwkJTVBVSTE1MTBfU0FWRShFTUlGRl9TRFJBTV9DT05GSUcpOworCQlNUFVJMTUxMF9TQVZFKEVNSUZTX0NPTkZJRyk7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQlNUFVJMTYxMF9TQVZFKE1QVUlfQ1RSTCk7CisJCU1QVUkxNjEwX1NBVkUoTVBVSV9EU1BfU1RBVFVTKTsKKwkJTVBVSTE2MTBfU0FWRShNUFVJX0RTUF9CT09UX0NPTkZJRyk7CisJCU1QVUkxNjEwX1NBVkUoTVBVSV9EU1BfQVBJX0NPTkZJRyk7CisJCU1QVUkxNjEwX1NBVkUoRU1JRkZfU0RSQU1fQ09ORklHKTsKKwkJTVBVSTE2MTBfU0FWRShFTUlGU19DT05GSUcpOworCX0KKworCWlmICh2aXJ0dWFsX3N0YXJ0ID09IDApIHsKKwkJZ19yZWFkX2NvbXBsZXRlZCA9IDA7CisKKwkJbXlfYnVmZmVyX29mZnNldCArPSBzcHJpbnRmKG15X2Jhc2UgKyBteV9idWZmZXJfb2Zmc2V0LAorCQkgICAiQVJNX0NLQ1RMX1JFRzogICAgICAgICAgICAweCUtOHggICAgIFxuIgorCQkgICAiQVJNX0lETEVDVDFfUkVHOiAgICAgICAgICAweCUtOHggICAgIFxuIgorCQkgICAiQVJNX0lETEVDVDJfUkVHOiAgICAgICAgICAweCUtOHggICAgIFxuIgorCQkgICAiQVJNX0VXVVBDVF9SRUc6ICAgICAgICAgICAweCUtOHggICAgIFxuIgorCQkgICAiQVJNX1JTVENUMV9SRUc6ICAgICAgICAgICAweCUtOHggICAgIFxuIgorCQkgICAiQVJNX1JTVENUMl9SRUc6ICAgICAgICAgICAweCUtOHggICAgIFxuIgorCQkgICAiQVJNX1NZU1NUX1JFRzogICAgICAgICAgICAweCUtOHggICAgIFxuIgorCQkgICAiVUxQRF9JVF9TVEFUVVNfUkVHOiAgICAgICAweCUtNHggICAgIFxuIgorCQkgICAiVUxQRF9DTE9DS19DVFJMX1JFRzogICAgICAweCUtNHggICAgIFxuIgorCQkgICAiVUxQRF9TT0ZUX1JFUV9SRUc6ICAgICAgICAweCUtNHggICAgIFxuIgorCQkgICAiVUxQRF9EUExMX0NUUkxfUkVHOiAgICAgICAweCUtNHggICAgIFxuIgorCQkgICAiVUxQRF9TVEFUVVNfUkVRX1JFRzogICAgICAweCUtNHggICAgIFxuIgorCQkgICAiVUxQRF9QT1dFUl9DVFJMX1JFRzogICAgICAweCUtNHggICAgIFxuIiwKKwkJICAgQVJNX1NIT1coQVJNX0NLQ1RMKSwKKwkJICAgQVJNX1NIT1coQVJNX0lETEVDVDEpLAorCQkgICBBUk1fU0hPVyhBUk1fSURMRUNUMiksCisJCSAgIEFSTV9TSE9XKEFSTV9FV1VQQ1QpLAorCQkgICBBUk1fU0hPVyhBUk1fUlNUQ1QxKSwKKwkJICAgQVJNX1NIT1coQVJNX1JTVENUMiksCisJCSAgIEFSTV9TSE9XKEFSTV9TWVNTVCksCisJCSAgIFVMUERfU0hPVyhVTFBEX0lUX1NUQVRVUyksCisJCSAgIFVMUERfU0hPVyhVTFBEX0NMT0NLX0NUUkwpLAorCQkgICBVTFBEX1NIT1coVUxQRF9TT0ZUX1JFUSksCisJCSAgIFVMUERfU0hPVyhVTFBEX0RQTExfQ1RSTCksCisJCSAgIFVMUERfU0hPVyhVTFBEX1NUQVRVU19SRVEpLAorCQkgICBVTFBEX1NIT1coVUxQRF9QT1dFUl9DVFJMKSk7CisKKwkJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJCQlteV9idWZmZXJfb2Zmc2V0ICs9IHNwcmludGYobXlfYmFzZSArIG15X2J1ZmZlcl9vZmZzZXQsCisJCQkgICAiTVBVSTE1MTBfQ1RSTF9SRUcgICAgICAgICAgICAgMHglLTh4IFxuIgorCQkJICAgIk1QVUkxNTEwX0RTUF9TVEFUVVNfUkVHOiAgICAgIDB4JS04eCBcbiIKKwkJCSAgICJNUFVJMTUxMF9EU1BfQk9PVF9DT05GSUdfUkVHOiAweCUtOHggXG4iCisJCSAgIAkgICAiTVBVSTE1MTBfRFNQX0FQSV9DT05GSUdfUkVHOiAgMHglLTh4IFxuIgorCQkgICAJICAgIk1QVUkxNTEwX1NEUkFNX0NPTkZJR19SRUc6ICAgIDB4JS04eCBcbiIKKwkJICAgCSAgICJNUFVJMTUxMF9FTUlGU19DT05GSUdfUkVHOiAgICAweCUtOHggXG4iLAorCQkgICAJICAgTVBVSTE1MTBfU0hPVyhNUFVJX0NUUkwpLAorCQkgICAJICAgTVBVSTE1MTBfU0hPVyhNUFVJX0RTUF9TVEFUVVMpLAorCQkgICAJICAgTVBVSTE1MTBfU0hPVyhNUFVJX0RTUF9CT09UX0NPTkZJRyksCisJCSAgIAkgICBNUFVJMTUxMF9TSE9XKE1QVUlfRFNQX0FQSV9DT05GSUcpLAorCQkgICAJICAgTVBVSTE1MTBfU0hPVyhFTUlGRl9TRFJBTV9DT05GSUcpLAorCQkgICAJICAgTVBVSTE1MTBfU0hPVyhFTUlGU19DT05GSUcpKTsKKwkJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQkJbXlfYnVmZmVyX29mZnNldCArPSBzcHJpbnRmKG15X2Jhc2UgKyBteV9idWZmZXJfb2Zmc2V0LAorCQkJICAgIk1QVUkxNjEwX0NUUkxfUkVHICAgICAgICAgICAgIDB4JS04eCBcbiIKKwkJCSAgICJNUFVJMTYxMF9EU1BfU1RBVFVTX1JFRzogICAgICAweCUtOHggXG4iCisJCQkgICAiTVBVSTE2MTBfRFNQX0JPT1RfQ09ORklHX1JFRzogMHglLTh4IFxuIgorCQkgICAJICAgIk1QVUkxNjEwX0RTUF9BUElfQ09ORklHX1JFRzogIDB4JS04eCBcbiIKKwkJICAgCSAgICJNUFVJMTYxMF9TRFJBTV9DT05GSUdfUkVHOiAgICAweCUtOHggXG4iCisJCSAgIAkgICAiTVBVSTE2MTBfRU1JRlNfQ09ORklHX1JFRzogICAgMHglLTh4IFxuIiwKKwkJICAgCSAgIE1QVUkxNjEwX1NIT1coTVBVSV9DVFJMKSwKKwkJICAgCSAgIE1QVUkxNjEwX1NIT1coTVBVSV9EU1BfU1RBVFVTKSwKKwkJICAgCSAgIE1QVUkxNjEwX1NIT1coTVBVSV9EU1BfQk9PVF9DT05GSUcpLAorCQkgICAJICAgTVBVSTE2MTBfU0hPVyhNUFVJX0RTUF9BUElfQ09ORklHKSwKKwkJICAgCSAgIE1QVUkxNjEwX1NIT1coRU1JRkZfU0RSQU1fQ09ORklHKSwKKwkJICAgCSAgIE1QVUkxNjEwX1NIT1coRU1JRlNfQ09ORklHKSk7CisJCX0KKworCQlnX3JlYWRfY29tcGxldGVkKys7CisJfSBlbHNlIGlmIChnX3JlYWRfY29tcGxldGVkID49IDEpIHsKKwkJICplb2YgPSAxOworCQkgcmV0dXJuIDA7CisJfQorCWdfcmVhZF9jb21wbGV0ZWQrKzsKKworCSpteV9maXJzdF9ieXRlID0gcGFnZV9idWZmZXI7CisJcmV0dXJuICBteV9idWZmZXJfb2Zmc2V0OworfQorCitzdGF0aWMgdm9pZCBvbWFwX3BtX2luaXRfcHJvYyh2b2lkKQoreworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7CisKKwllbnRyeSA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImRyaXZlci9vbWFwX3BtIiwKKwkJCQkgICAgICAgU19JV1VTUiB8IFNfSVJVR08sIE5VTEwsCisJCQkJICAgICAgIG9tYXBfcG1fcmVhZF9wcm9jLCAwKTsKK30KKworI2VuZGlmIC8qIERFQlVHICYmIENPTkZJR19QUk9DX0ZTICovCisKKy8qCisgKglvbWFwX3BtX3ByZXBhcmUgLSBEbyBwcmVsaW1pbmFyeSBzdXNwZW5kIHdvcmsuCisgKglAc3RhdGU6CQlzdXNwZW5kIHN0YXRlIHdlJ3JlIGVudGVyaW5nLgorICoKKyAqLworLy8jaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworc3RhdGljIGludCBvbWFwX3BtX3ByZXBhcmUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCWludCBlcnJvciA9IDA7CisKKwlzd2l0Y2ggKHN0YXRlKQorCXsKKwljYXNlIFBNX1NVU1BFTkRfU1RBTkRCWToKKwljYXNlIFBNX1NVU1BFTkRfTUVNOgorCQlicmVhazsKKworCWNhc2UgUE1fU1VTUEVORF9ESVNLOgorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGVycm9yOworfQorCisKKy8qCisgKglvbWFwX3BtX2VudGVyIC0gQWN0dWFsbHkgZW50ZXIgYSBzbGVlcCBzdGF0ZS4KKyAqCUBzdGF0ZToJCVN0YXRlIHdlJ3JlIGVudGVyaW5nLgorICoKKyAqLworCitzdGF0aWMgaW50IG9tYXBfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCXN3aXRjaCAoc3RhdGUpCisJeworCWNhc2UgUE1fU1VTUEVORF9TVEFOREJZOgorCWNhc2UgUE1fU1VTUEVORF9NRU06CisJCW9tYXBfcG1fc3VzcGVuZCgpOworCQlicmVhazsKKworCWNhc2UgUE1fU1VTUEVORF9ESVNLOgorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworLyoqCisgKglvbWFwX3BtX2ZpbmlzaCAtIEZpbmlzaCB1cCBzdXNwZW5kIHNlcXVlbmNlLgorICoJQHN0YXRlOgkJU3RhdGUgd2UncmUgY29taW5nIG91dCBvZi4KKyAqCisgKglUaGlzIGlzIGNhbGxlZCBhZnRlciB3ZSB3YWtlIGJhY2sgdXAgKG9yIGlmIGVudGVyaW5nIHRoZSBzbGVlcCBzdGF0ZQorICoJZmFpbGVkKS4KKyAqLworCitzdGF0aWMgaW50IG9tYXBfcG1fZmluaXNoKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworCitzdHJ1Y3QgcG1fb3BzIG9tYXBfcG1fb3BzID17CisJLnBtX2Rpc2tfbW9kZSA9IDAsCisgICAgICAgIC5wcmVwYXJlICAgICAgICA9IG9tYXBfcG1fcHJlcGFyZSwKKyAgICAgICAgLmVudGVyICAgICAgICAgID0gb21hcF9wbV9lbnRlciwKKyAgICAgICAgLmZpbmlzaCAgICAgICAgID0gb21hcF9wbV9maW5pc2gsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX3BtX2luaXQodm9pZCkKK3sKKwlwcmludGsoIlBvd2VyIE1hbmFnZW1lbnQgZm9yIFRJIE9NQVAuXG4iKTsKKwlwbV9pZGxlID0gb21hcF9wbV9pZGxlOworCS8qCisJICogV2UgY29weSB0aGUgYXNzZW1ibGVyIHNsZWVwL3dha2V1cCByb3V0aW5lcyB0byBTUkFNLgorCSAqIFRoZXNlIHJvdXRpbmVzIG5lZWQgdG8gYmUgaW4gU1JBTSBhcyB0aGF0J3MgdGhlIG9ubHkKKwkgKiBtZW1vcnkgdGhlIE1QVSBjYW4gc2VlIHdoZW4gaXQgd2FrZXMgdXAuCisJICovCisKKyNpZmRlZglDT05GSUdfQVJDSF9PTUFQMTUxMAorCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCQltZW1jcHkoKHZvaWQgKilPTUFQMTUxMF9TUkFNX0lETEVfU1VTUEVORCwKKwkJICAgICAgIG9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kLAorCQkgICAgICAgb21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmRfc3opOworCQltZW1jcHkoKHZvaWQgKilPTUFQMTUxMF9TUkFNX0FQSV9TVVNQRU5ELCBvbWFwMTUxMF9jcHVfc3VzcGVuZCwKKwkJICAgICAgIG9tYXAxNTEwX2NwdV9zdXNwZW5kX3N6KTsKKwl9IGVsc2UKKyNlbmRpZgorCWlmIChjcHVfaXNfb21hcDE2MTAoKSB8fCBjcHVfaXNfb21hcDE3MTAoKSkgeworCQltZW1jcHkoKHZvaWQgKilPTUFQMTYxMF9TUkFNX0lETEVfU1VTUEVORCwKKwkJICAgICAgIG9tYXAxNjEwX2lkbGVfbG9vcF9zdXNwZW5kLAorCQkgICAgICAgb21hcDE2MTBfaWRsZV9sb29wX3N1c3BlbmRfc3opOworCQltZW1jcHkoKHZvaWQgKilPTUFQMTYxMF9TUkFNX0FQSV9TVVNQRU5ELCBvbWFwMTYxMF9jcHVfc3VzcGVuZCwKKwkJICAgICAgIG9tYXAxNjEwX2NwdV9zdXNwZW5kX3N6KTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNTkxMigpKSB7CisJCW1lbWNweSgodm9pZCAqKU9NQVA1OTEyX1NSQU1fSURMRV9TVVNQRU5ELAorCQkgICAgICAgb21hcDE2MTBfaWRsZV9sb29wX3N1c3BlbmQsCisJCSAgICAgICBvbWFwMTYxMF9pZGxlX2xvb3Bfc3VzcGVuZF9zeik7CisJCW1lbWNweSgodm9pZCAqKU9NQVA1OTEyX1NSQU1fQVBJX1NVU1BFTkQsIG9tYXAxNjEwX2NwdV9zdXNwZW5kLAorCQkgICAgICAgb21hcDE2MTBfY3B1X3N1c3BlbmRfc3opOworCX0KKworCXBtX3NldF9vcHMoJm9tYXBfcG1fb3BzKTsKKworI2lmIGRlZmluZWQoREVCVUcpICYmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpCisJb21hcF9wbV9pbml0X3Byb2MoKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CitfX2luaXRjYWxsKG9tYXBfcG1faW5pdCk7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwL3NsZWVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ0MjZkMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcC9zbGVlcC5TCkBAIC0wLDAgKzEsMzE0IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL3NsZWVwLlMKKyAqCisgKiBMb3ctbGV2ZWwgT01BUDE1MTAvMTYxMCBzbGVlcC93YWtlVXAgc3VwcG9ydAorICoKKyAqIEluaXRpYWwgU0ExMTEwIGNvZGU6CisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgQ2xpZmYgQnJha2UgPGNicmFrZUBhY2NlbGVudC5jb20+CisgKgorICogQWRhcHRlZCBmb3IgUFhBIGJ5IE5pY29sYXMgUGl0cmU6CisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgTW9udGEgVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBTdXBwb3J0IGZvciBPTUFQMTUxMC8xNjEwIGJ5IERpcmsgQmVobWUgPGRpcmsuYmVobWVAZGUuYm9zY2guY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcG0uaD4KKworCQkudGV4dAorCisvKgorICogRm9yY2VzIE9NQVAgaW50byBpZGxlIHN0YXRlCisgKgorICogb21hcFhYWFhfaWRsZV9sb29wX3N1c3BlbmQoKQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBnZXQncyBjb3BpZWQgdG8gaW50ZXJuYWwgU1JBTSBhdCBib290LiBXaGVuIHRoZSBPTUFQCisgKgkgd2FrZXMgdXAgaXQgY29udGludWVzIGV4ZWN1dGlvbiBhdCB0aGUgcG9pbnQgaXQgd2VudCB0byBzbGVlcC4KKyAqCisgKiBOb3RlOiBCZWNhdXNlIG9mIHNsaWdodGx5IGRpZmZlcmVudCBjb25maWd1cmF0aW9uIHZhbHVlcyB3ZSBoYXZlCisgKiAgICAgICBwcm9jZXNzb3Igc3BlY2lmaWMgZnVuY3Rpb25zIGhlcmUuCisgKi8KKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCitFTlRSWShvbWFwMTUxMF9pZGxlX2xvb3Bfc3VzcGVuZCkKKworCXN0bWZkCXNwISwge3IwIC0gcjEyLCBscn0JCUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKKworCUAgbG9hZCBiYXNlIGFkZHJlc3Mgb2YgQVJNX0lETEVDVDEgYW5kIEFSTV9JRExFQ1QyCisJbW92CXI0LCAjQ0xLR0VOX1JFR19BU01fQkFTRSAmIDB4ZmYwMDAwMDAKKwlvcnIJcjQsIHI0LCAjQ0xLR0VOX1JFR19BU01fQkFTRSAmIDB4MDBmZjAwMDAKKwlvcnIJcjQsIHI0LCAjQ0xLR0VOX1JFR19BU01fQkFTRSAmIDB4MDAwMGZmMDAKKworCUAgdHVybiBvZmYgY2xvY2sgZG9tYWlucworCUAgZ2V0IEFSTV9JRExFQ1QyIGludG8gcjIKKwlsZHJoCXIyLCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KKwltb3YJcjUsICNPTUFQMTUxMF9JRExFX0NMT0NLX0RPTUFJTlMgJiAweGZmCisgCW9ycglyNSxyNSwgI09NQVAxNTEwX0lETEVfQ0xPQ0tfRE9NQUlOUyAmIDB4ZmYwMAorCXN0cmgJcjUsIFtyNCwgI0FSTV9JRExFQ1QyX0FTTV9PRkZTRVQgJiAweGZmXQorCisJQCByZXF1ZXN0IEFSTSBpZGxlCisJQCBnZXQgQVJNX0lETEVDVDEgaW50byByMQorCWxkcmgJcjEsIFtyNCwgI0FSTV9JRExFQ1QxX0FTTV9PRkZTRVQgJiAweGZmXQorCW9ycglyMywgcjEsICNPTUFQMTUxMF9JRExFX0xPT1BfUkVRVUVTVCAmIDB4ZmZmZgorCXN0cmgJcjMsIFtyNCwgI0FSTV9JRExFQ1QxX0FTTV9PRkZTRVQgJiAweGZmXQorCisJbW92CXI1LCAjSURMRV9XQUlUX0NZQ0xFUyAmIDB4ZmYKKwlvcnIgICAgIHI1LCByNSwgI0lETEVfV0FJVF9DWUNMRVMgJiAweGZmMDAKK2xfMTUxMDoJc3VicwlyNSwgcjUsICMxCisJYm5lCWxfMTUxMAorLyoKKyAqIExldCdzIHdhaXQgZm9yIHRoZSBuZXh0IGNsb2NrIHRpY2sgdG8gd2FrZSB1cyB1cC4KKyAqLworCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMwLCA0CQlAIHdhaXQgZm9yIGludGVycnVwdAorLyoKKyAqIG9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kKCkncyByZXN1bWUgcG9pbnQuCisgKgorICogSXQgd2lsbCBqdXN0IHN0YXJ0IGV4ZWN1dGluZyBoZXJlLCBzbyB3ZSdsbCByZXN0b3JlIHN0dWZmIGZyb20gdGhlCisgKiBzdGFjaywgcmVzZXQgdGhlIEFSTV9JRExFQ1QxIGFuZCBBUk1fSURMRUNUMi4KKyAqLworCisJQCByZXN0b3JlIEFSTV9JRExFQ1QxIGFuZCBBUk1fSURMRUNUMiBhbmQgcmV0dXJuCisJQCByMSBoYXMgQVJNX0lETEVDVDEgYW5kIHIyIHN0aWxsIGhhcyBBUk1fSURMRUNUMgorCXN0cmgJcjIsIFtyNCwgI0FSTV9JRExFQ1QyX0FTTV9PRkZTRVQgJiAweGZmXQorCXN0cmgJcjEsIFtyNCwgI0FSTV9JRExFQ1QxX0FTTV9PRkZTRVQgJiAweGZmXQorCisJbGRtZmQgICBzcCEsIHtyMCAtIHIxMiwgcGN9ICAgICBAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisKK0VOVFJZKG9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kX3N6KQorCS53b3JkCS4gLSBvbWFwMTUxMF9pZGxlX2xvb3Bfc3VzcGVuZAorI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAxNTEwICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQorRU5UUlkob21hcDE2MTBfaWRsZV9sb29wX3N1c3BlbmQpCisKKwlzdG1mZAlzcCEsIHtyMCAtIHIxMiwgbHJ9CQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCisKKwlAIGxvYWQgYmFzZSBhZGRyZXNzIG9mIEFSTV9JRExFQ1QxIGFuZCBBUk1fSURMRUNUMgorCW1vdglyNCwgI0NMS0dFTl9SRUdfQVNNX0JBU0UgJiAweGZmMDAwMDAwCisJb3JyCXI0LCByNCwgI0NMS0dFTl9SRUdfQVNNX0JBU0UgJiAweDAwZmYwMDAwCisJb3JyCXI0LCByNCwgI0NMS0dFTl9SRUdfQVNNX0JBU0UgJiAweDAwMDBmZjAwCisKKwlAIHR1cm4gb2ZmIGNsb2NrIGRvbWFpbnMKKwlAIGdldCBBUk1fSURMRUNUMiBpbnRvIHIyCisJbGRyaAlyMiwgW3I0LCAjQVJNX0lETEVDVDJfQVNNX09GRlNFVCAmIDB4ZmZdCisJbW92CXI1LCAjT01BUDE2MTBfSURMRV9DTE9DS19ET01BSU5TICYgMHhmZgorIAlvcnIJcjUscjUsICNPTUFQMTYxMF9JRExFX0NMT0NLX0RPTUFJTlMgJiAweGZmMDAKKwlzdHJoCXI1LCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KKworCUAgcmVxdWVzdCBBUk0gaWRsZQorCUAgZ2V0IEFSTV9JRExFQ1QxIGludG8gcjEKKwlsZHJoCXIxLCBbcjQsICNBUk1fSURMRUNUMV9BU01fT0ZGU0VUICYgMHhmZl0KKwlvcnIJcjMsIHIxLCAjT01BUDE2MTBfSURMRV9MT09QX1JFUVVFU1QgJiAweGZmZmYKKwlzdHJoCXIzLCBbcjQsICNBUk1fSURMRUNUMV9BU01fT0ZGU0VUICYgMHhmZl0KKworCW1vdglyNSwgI0lETEVfV0FJVF9DWUNMRVMgJiAweGZmCisJb3JyICAgICByNSwgcjUsICNJRExFX1dBSVRfQ1lDTEVTICYgMHhmZjAwCitsXzE2MTA6CXN1YnMJcjUsIHI1LCAjMQorCWJuZQlsXzE2MTAKKy8qCisgKiBMZXQncyB3YWl0IGZvciB0aGUgbmV4dCBjbG9jayB0aWNrIHRvIHdha2UgdXMgdXAuCisgKi8KKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMCwgNAkJQCB3YWl0IGZvciBpbnRlcnJ1cHQKKy8qCisgKiBvbWFwMTYxMF9pZGxlX2xvb3Bfc3VzcGVuZCgpJ3MgcmVzdW1lIHBvaW50LgorICoKKyAqIEl0IHdpbGwganVzdCBzdGFydCBleGVjdXRpbmcgaGVyZSwgc28gd2UnbGwgcmVzdG9yZSBzdHVmZiBmcm9tIHRoZQorICogc3RhY2ssIHJlc2V0IHRoZSBBUk1fSURMRUNUMSBhbmQgQVJNX0lETEVDVDIuCisgKi8KKworCUAgcmVzdG9yZSBBUk1fSURMRUNUMSBhbmQgQVJNX0lETEVDVDIgYW5kIHJldHVybgorCUAgcjEgaGFzIEFSTV9JRExFQ1QxIGFuZCByMiBzdGlsbCBoYXMgQVJNX0lETEVDVDIKKwlzdHJoCXIyLCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KKwlzdHJoCXIxLCBbcjQsICNBUk1fSURMRUNUMV9BU01fT0ZGU0VUICYgMHhmZl0KKworCWxkbWZkICAgc3AhLCB7cjAgLSByMTIsIHBjfSAgICAgQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgorCitFTlRSWShvbWFwMTYxMF9pZGxlX2xvb3Bfc3VzcGVuZF9zeikKKwkud29yZAkuIC0gb21hcDE2MTBfaWRsZV9sb29wX3N1c3BlbmQKKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMTZYWCAqLworCisvKgorICogRm9yY2VzIE9NQVAgaW50byBkZWVwIHNsZWVwIHN0YXRlCisgKgorICogb21hcFhYWFhfY3B1X3N1c3BlbmQoKQorICoKKyAqIFRoZSB2YWx1ZXMgb2YgdGhlIHJlZ2lzdGVycyBBUk1fSURMRUNUMSBhbmQgQVJNX0lETEVDVDIgYXJlIHBhc3NlZAorICogYXMgYXJnMCBhbmQgYXJnMSBmcm9tIGNhbGxlci4gYXJnMCBpcyBzdG9yZWQgaW4gcmVnaXN0ZXIgcjAgYW5kIGFyZzEKKyAqIGluIHJlZ2lzdGVyIHIxLgorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBnZXQncyBjb3BpZWQgdG8gaW50ZXJuYWwgU1JBTSBhdCBib290LiBXaGVuIHRoZSBPTUFQCisgKgkgd2FrZXMgdXAgaXQgY29udGludWVzIGV4ZWN1dGlvbiBhdCB0aGUgcG9pbnQgaXQgd2VudCB0byBzbGVlcC4KKyAqCisgKiBOb3RlOiBCZWNhdXNlIG9mIGVycmF0YSB3b3JrIGFyb3VuZHMgd2UgaGF2ZSBwcm9jZXNzb3Igc3BlY2lmaWMgZnVuY3Rpb25zCisgKiAgICAgICBoZXJlLiBUaGV5IGFyZSBtb3N0bHkgdGhlIHNhbWUsIGJ1dCBzbGlnaHRseSBkaWZmZXJlbnQuCisgKgorICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorRU5UUlkob21hcDE1MTBfY3B1X3N1c3BlbmQpCisKKwlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCisJc3RtZmQJc3AhLCB7cjAgLSByMTIsIGxyfQorCisJQCBsb2FkIGJhc2UgYWRkcmVzcyBvZiBUcmFmZmljIENvbnRyb2xsZXIKKwltb3YJcjQsICNUQ01JRl9BU01fQkFTRSAmIDB4ZmYwMDAwMDAKKwlvcnIJcjQsIHI0LCAjVENNSUZfQVNNX0JBU0UgJiAweDAwZmYwMDAwCisJb3JyCXI0LCByNCwgI1RDTUlGX0FTTV9CQVNFICYgMHgwMDAwZmYwMAorCisJQCB3b3JrIGFyb3VuZCBlcnJhdGEgb2YgT01BUDE1MTAgUERFIGJpdCBmb3IgVEMgc2h1dCBkb3duCisJQCBjbGVhciBQREUgYml0CisJbGRyCXI1LCBbcjQsICNFTUlGU19DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCisJYmljCXI1LCByNSwgI1BERV9CSVQgJiAweGZmCisJc3RyCXI1LCBbcjQsICNFTUlGU19DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCisKKwlAIHNldCBQV0RfRU4gYml0CisJYW5kCXI1LCByNSwgI1BXRF9FTl9CSVQgJiAweGZmCisJc3RyCXI1LCBbcjQsICNFTUlGU19DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCisKKwlAIHByZXBhcmUgdG8gcHV0IFNEUkFNIGludG8gc2VsZi1yZWZyZXNoIG1hbnVhbGx5CisJbGRyCXI1LCBbcjQsICNFTUlGRl9TRFJBTV9DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCisJb3JyCXI1LCByNSwgI1NFTEZfUkVGUkVTSF9NT0RFICYgMHhmZjAwMDAwMAorCW9ycglyNSwgcjUsICNTRUxGX1JFRlJFU0hfTU9ERSAmIDB4MDAwMDAwZmYKKwlzdHIJcjUsIFtyNCwgI0VNSUZGX1NEUkFNX0NPTkZJR19BU01fT0ZGU0VUICYgMHhmZl0KKworCUAgcHJlcGFyZSB0byBwdXQgRU1JRlMgdG8gU2xlZXAKKwlsZHIJcjUsIFtyNCwgI0VNSUZTX0NPTkZJR19BU01fT0ZGU0VUICYgMHhmZl0KKwlvcnIJcjUsIHI1LCAjSURMRV9FTUlGU19SRVFVRVNUICYgMHhmZgorCXN0cglyNSwgW3I0LCAjRU1JRlNfQ09ORklHX0FTTV9PRkZTRVQgJiAweGZmXQorCisJQCBsb2FkIGJhc2UgYWRkcmVzcyBvZiBBUk1fSURMRUNUMSBhbmQgQVJNX0lETEVDVDIKKwltb3YJcjQsICNDTEtHRU5fUkVHX0FTTV9CQVNFICYgMHhmZjAwMDAwMAorCW9ycglyNCwgcjQsICNDTEtHRU5fUkVHX0FTTV9CQVNFICYgMHgwMGZmMDAwMAorCW9ycglyNCwgcjQsICNDTEtHRU5fUkVHX0FTTV9CQVNFICYgMHgwMDAwZmYwMAorCisJQCB0dXJuIG9mZiBjbG9jayBkb21haW5zCisJbW92CXI1LCAjT01BUDE1MTBfSURMRV9DTE9DS19ET01BSU5TICYgMHhmZgorIAlvcnIJcjUscjUsICNPTUFQMTUxMF9JRExFX0NMT0NLX0RPTUFJTlMgJiAweGZmMDAKKwlzdHJoCXI1LCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KKworCUAgcmVxdWVzdCBBUk0gaWRsZQorCW1vdglyMywgI09NQVAxNTEwX0RFRVBfU0xFRVBfUkVRVUVTVCAmIDB4ZmYKKwlvcnIJcjMsIHIzLCAjT01BUDE1MTBfREVFUF9TTEVFUF9SRVFVRVNUICYgMHhmZjAwCisJc3RyaAlyMywgW3I0LCAjQVJNX0lETEVDVDFfQVNNX09GRlNFVCAmIDB4ZmZdCisKKwltb3YJcjUsICNJRExFX1dBSVRfQ1lDTEVTICYgMHhmZgorCW9yciAgICAgcjUsIHI1LCAjSURMRV9XQUlUX0NZQ0xFUyAmIDB4ZmYwMAorbF8xNTEwXzI6CisJc3VicwlyNSwgcjUsICMxCisJYm5lCWxfMTUxMF8yCisvKgorICogTGV0J3Mgd2FpdCBmb3IgdGhlIG5leHQgd2FrZSB1cCBldmVudCB0byB3YWtlIHVzIHVwLiByMCBjYW4ndCBiZQorICogdXNlZCBoZXJlIGJlY2F1c2UgcjAgaG9sZHMgQVJNX0lETEVDVDEKKyAqLworCW1vdglyMiwgIzAKKwltY3IJcDE1LCAwLCByMiwgYzcsIGMwLCA0CQlAIHdhaXQgZm9yIGludGVycnVwdAorLyoKKyAqIG9tYXAxNTEwX2NwdV9zdXNwZW5kKCkncyByZXN1bWUgcG9pbnQuCisgKgorICogSXQgd2lsbCBqdXN0IHN0YXJ0IGV4ZWN1dGluZyBoZXJlLCBzbyB3ZSdsbCByZXN0b3JlIHN0dWZmIGZyb20gdGhlCisgKiBzdGFjaywgcmVzZXQgdGhlIEFSTV9JRExFQ1QxIGFuZCBBUk1fSURMRUNUMi4KKyAqLworCXN0cmgJcjEsIFtyNCwgI0FSTV9JRExFQ1QyX0FTTV9PRkZTRVQgJiAweGZmXQorCXN0cmgJcjAsIFtyNCwgI0FSTV9JRExFQ1QxX0FTTV9PRkZTRVQgJiAweGZmXQorCisJQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgorCWxkbWZkICAgc3AhLCB7cjAgLSByMTIsIHBjfQorCitFTlRSWShvbWFwMTUxMF9jcHVfc3VzcGVuZF9zeikKKwkud29yZAkuIC0gb21hcDE1MTBfY3B1X3N1c3BlbmQKKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMTUxMCAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKK0VOVFJZKG9tYXAxNjEwX2NwdV9zdXNwZW5kKQorCisJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjaworCXN0bWZkCXNwISwge3IwIC0gcjEyLCBscn0KKworCUAgbG9hZCBiYXNlIGFkZHJlc3Mgb2YgVHJhZmZpYyBDb250cm9sbGVyCisJbW92CXI0LCAjVENNSUZfQVNNX0JBU0UgJiAweGZmMDAwMDAwCisJb3JyCXI0LCByNCwgI1RDTUlGX0FTTV9CQVNFICYgMHgwMGZmMDAwMAorCW9ycglyNCwgcjQsICNUQ01JRl9BU01fQkFTRSAmIDB4MDAwMGZmMDAKKworCUAgcHJlcGFyZSB0byBwdXQgU0RSQU0gaW50byBzZWxmLXJlZnJlc2ggbWFudWFsbHkKKwlsZHIJcjUsIFtyNCwgI0VNSUZGX1NEUkFNX0NPTkZJR19BU01fT0ZGU0VUICYgMHhmZl0KKwlvcnIJcjUsIHI1LCAjU0VMRl9SRUZSRVNIX01PREUgJiAweGZmMDAwMDAwCisJb3JyCXI1LCByNSwgI1NFTEZfUkVGUkVTSF9NT0RFICYgMHgwMDAwMDBmZgorCXN0cglyNSwgW3I0LCAjRU1JRkZfU0RSQU1fQ09ORklHX0FTTV9PRkZTRVQgJiAweGZmXQorCisJQCBwcmVwYXJlIHRvIHB1dCBFTUlGUyB0byBTbGVlcAorCWxkcglyNSwgW3I0LCAjRU1JRlNfQ09ORklHX0FTTV9PRkZTRVQgJiAweGZmXQorCW9ycglyNSwgcjUsICNJRExFX0VNSUZTX1JFUVVFU1QgJiAweGZmCisJc3RyCXI1LCBbcjQsICNFTUlGU19DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCisKKwlAIGxvYWQgYmFzZSBhZGRyZXNzIG9mIEFSTV9JRExFQ1QxIGFuZCBBUk1fSURMRUNUMgorCW1vdglyNCwgI0NMS0dFTl9SRUdfQVNNX0JBU0UgJiAweGZmMDAwMDAwCisJb3JyCXI0LCByNCwgI0NMS0dFTl9SRUdfQVNNX0JBU0UgJiAweDAwZmYwMDAwCisJb3JyCXI0LCByNCwgI0NMS0dFTl9SRUdfQVNNX0JBU0UgJiAweDAwMDBmZjAwCisKKwlAIHR1cm4gb2ZmIGNsb2NrIGRvbWFpbnMKKwltb3YJcjUsICNPTUFQMTYxMF9JRExFX0NMT0NLX0RPTUFJTlMgJiAweGZmCisgCW9ycglyNSxyNSwgI09NQVAxNjEwX0lETEVfQ0xPQ0tfRE9NQUlOUyAmIDB4ZmYwMAorCXN0cmgJcjUsIFtyNCwgI0FSTV9JRExFQ1QyX0FTTV9PRkZTRVQgJiAweGZmXQorCisJQCB3b3JrIGFyb3VuZCBlcnJhdGEgb2YgT01BUDE2MTAvNTkxMi4gRW5hYmxlICghKSBwZXJpcGhlcmFsCisJQCBjbG9jayB0byBsZXQgdGhlIGNoaXAgZ28gaW50byBkZWVwIHNsZWVwCisJbGRyaAlyNSwgW3I0LCAjQVJNX0lETEVDVDJfQVNNX09GRlNFVCAmIDB4ZmZdCisgCW9ycglyNSxyNSwgI0VOX1BFUkNLX0JJVCAmIDB4ZmYKKwlzdHJoCXI1LCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KKworCUAgcmVxdWVzdCBBUk0gaWRsZQorCW1vdglyMywgI09NQVAxNjEwX0RFRVBfU0xFRVBfUkVRVUVTVCAmIDB4ZmYKKwlvcnIJcjMsIHIzLCAjT01BUDE2MTBfREVFUF9TTEVFUF9SRVFVRVNUICYgMHhmZjAwCisJc3RyaAlyMywgW3I0LCAjQVJNX0lETEVDVDFfQVNNX09GRlNFVCAmIDB4ZmZdCisKKwltb3YJcjUsICNJRExFX1dBSVRfQ1lDTEVTICYgMHhmZgorCW9yciAgICAgcjUsIHI1LCAjSURMRV9XQUlUX0NZQ0xFUyAmIDB4ZmYwMAorbF8xNjEwXzI6CisJc3VicwlyNSwgcjUsICMxCisJYm5lCWxfMTYxMF8yCisvKgorICogTGV0J3Mgd2FpdCBmb3IgdGhlIG5leHQgd2FrZSB1cCBldmVudCB0byB3YWtlIHVzIHVwLiByMCBjYW4ndCBiZQorICogdXNlZCBoZXJlIGJlY2F1c2UgcjAgaG9sZHMgQVJNX0lETEVDVDEKKyAqLworCW1vdglyMiwgIzAKKwltY3IJcDE1LCAwLCByMiwgYzcsIGMwLCA0CQlAIHdhaXQgZm9yIGludGVycnVwdAorLyoKKyAqIG9tYXAxNjEwX2NwdV9zdXNwZW5kKCkncyByZXN1bWUgcG9pbnQuCisgKgorICogSXQgd2lsbCBqdXN0IHN0YXJ0IGV4ZWN1dGluZyBoZXJlLCBzbyB3ZSdsbCByZXN0b3JlIHN0dWZmIGZyb20gdGhlCisgKiBzdGFjaywgcmVzZXQgdGhlIEFSTV9JRExFQ1QxIGFuZCBBUk1fSURMRUNUMi4KKyAqLworCXN0cmgJcjEsIFtyNCwgI0FSTV9JRExFQ1QyX0FTTV9PRkZTRVQgJiAweGZmXQorCXN0cmgJcjAsIFtyNCwgI0FSTV9JRExFQ1QxX0FTTV9PRkZTRVQgJiAweGZmXQorCisJQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgorCWxkbWZkICAgc3AhLCB7cjAgLSByMTIsIHBjfQorCitFTlRSWShvbWFwMTYxMF9jcHVfc3VzcGVuZF9zeikKKwkud29yZAkuIC0gb21hcDE2MTBfY3B1X3N1c3BlbmQKKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMTZYWCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtb21hcC90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIwNWZkYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcC90aW1lLmMKQEAgLTAsMCArMSwzODQgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvdGltZS5jCisgKgorICogT01BUCBUaW1lcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTm9raWEgQ29ycG9yYXRpb24KKyAqIFBhcnRpYWwgdGltZXIgcmV3cml0ZSBhbmQgYWRkaXRpb25hbCBWU1QgdGltZXIgc3VwcG9ydCBieQorICogVG9ueSBMaW5kZ2VuIDx0b255QGF0b21pZGUuY29tPiBhbmQKKyAqIFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgorICoKKyAqIE1QVSB0aW1lciBjb2RlIGJhc2VkIG9uIHRoZSBvbGRlciBNUFUgdGltZXIgY29kZSBmb3IgT01BUAorICogQ29weXJpZ2h0IChDKSAyMDAwIFJpZGdlUnVuLCBJbmMuCisgKiBBdXRob3I6IEdyZWcgTG9ubm9uIDxnbG9ubm9uQHJpZGdlcnVuLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKyAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCitzdHJ1Y3Qgc3lzX3RpbWVyIG9tYXBfdGltZXI7CisKKyNpZmRlZiBDT05GSUdfT01BUF9NUFVfVElNRVIKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTVBVIHRpbWVyCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBPTUFQX01QVV9USU1FUjFfQkFTRQkJKDB4ZmZmZWM1MDApCisjZGVmaW5lIE9NQVBfTVBVX1RJTUVSMl9CQVNFCQkoMHhmZmZlYzYwMCkKKyNkZWZpbmUgT01BUF9NUFVfVElNRVIzX0JBU0UJCSgweGZmZmVjNzAwKQorI2RlZmluZSBPTUFQX01QVV9USU1FUl9CQVNFCQlPTUFQX01QVV9USU1FUjFfQkFTRQorI2RlZmluZSBPTUFQX01QVV9USU1FUl9PRkZTRVQJCTB4MTAwCisKKyNkZWZpbmUgTVBVX1RJTUVSX0ZSRUUJCQkoMSA8PCA2KQorI2RlZmluZSBNUFVfVElNRVJfQ0xPQ0tfRU5BQkxFCQkoMSA8PCA1KQorI2RlZmluZSBNUFVfVElNRVJfQVIJCQkoMSA8PCAxKQorI2RlZmluZSBNUFVfVElNRVJfU1QJCQkoMSA8PCAwKQorCisvKiBjeWNsZXMgdG8gbnNlYyBjb252ZXJzaW9ucyB0YWtlbiBmcm9tIGFyY2gvaTM4Ni9rZXJuZWwvdGltZXJzL3RpbWVyX3RzYy5jLAorICogY29udmVydGVkIHRvIHVzZSBrSHogYnkgS2V2aW4gSGlsbWFuICovCisvKiBjb252ZXJ0IGZyb20gY3ljbGVzKDY0Yml0cykgPT4gbmFub3NlY29uZHMgKDY0Yml0cykKKyAqICBiYXNpYyBlcXVhdGlvbjoKKyAqCQlucyA9IGN5Y2xlcyAvIChmcmVxIC8gbnNfcGVyX3NlYykKKyAqCQlucyA9IGN5Y2xlcyAqIChuc19wZXJfc2VjIC8gZnJlcSkKKyAqCQlucyA9IGN5Y2xlcyAqICgxMF45IC8gKGNwdV9raHogKiAxMF4zKSkKKyAqCQlucyA9IGN5Y2xlcyAqICgxMF42IC8gY3B1X2toeikKKyAqCisgKglUaGVuIHdlIHVzZSBzY2FsaW5nIG1hdGggKHN1Z2dlc3RlZCBieSBnZW9yZ2UgYXQgbXZpc3RhLmNvbSkgdG8gZ2V0OgorICoJCW5zID0gY3ljbGVzICogKDEwXjYgKiBTQyAvIGNwdV9raHogLyBTQworICoJCW5zID0gY3ljbGVzICogY3ljMm5zX3NjYWxlIC8gU0MKKyAqCisgKglBbmQgc2luY2UgU0MgaXMgYSBjb25zdGFudCBwb3dlciBvZiB0d28sIHdlIGNhbiBjb252ZXJ0IHRoZSBkaXYKKyAqICBpbnRvIGEgc2hpZnQuCisgKgkJCS1qb2huc3R1bCBhdCB1cy5pYm0uY29tICJtYXRoIGlzIGhhcmQsIGxldHMgZ28gc2hvcHBpbmchIgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjeWMybnNfc2NhbGU7CisjZGVmaW5lIENZQzJOU19TQ0FMRV9GQUNUT1IgMTAgLyogMl4xMCwgY2FyZWZ1bGx5IGNob3NlbiAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2N5YzJuc19zY2FsZSh1bnNpZ25lZCBsb25nIGNwdV9raHopCit7CisJY3ljMm5zX3NjYWxlID0gKDEwMDAwMDAgPDwgQ1lDMk5TX1NDQUxFX0ZBQ1RPUikvY3B1X2toejsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgY3ljbGVzXzJfbnModW5zaWduZWQgbG9uZyBsb25nIGN5YykKK3sKKwlyZXR1cm4gKGN5YyAqIGN5YzJuc19zY2FsZSkgPj4gQ1lDMk5TX1NDQUxFX0ZBQ1RPUjsKK30KKworLyoKKyAqIE1QVV9USUNLU19QRVJfU0VDIG11c3QgYmUgYW4gZXZlbiBudW1iZXIsIG90aGVyd2lzZSBtYWNoaW5lY3ljbGVzX3RvX3VzZWNzCisgKiB3aWxsIGJyZWFrLiBPbiBQMiwgdGhlIHRpbWVyIGNvdW50IHJhdGUgaXMgNi41IE1IeiBhZnRlciBwcm9ncmFtbWluZyBQVFYKKyAqIHdpdGggMC4gVGhpcyBkaXZpZGVzIHRoZSAxM01IeiBpbnB1dCBieSAyLCBhbmQgaXMgdW5kb2N1bWVudGVkLgorICovCisjaWZkZWYgQ09ORklHX01BQ0hfT01BUF9QRVJTRVVTMgorLyogUkVWSVNJVDogVGhpcyBpZmRlZiBjb25zdHJ1Y3Qgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgcXVlcnkgdG8gY2xvY2sKKyAqIGZyYW1ld29yayB0byBzZWUgaWYgdGltZXIgYmFzZSBmcmVxdWVuY3kgaXMgMTIuMCwgMTMuMCBvciAxOS4yIE1Iei4KKyAqLworI2RlZmluZSBNUFVfVElDS1NfUEVSX1NFQwkJKDEzMDAwMDAwIC8gMikKKyNlbHNlCisjZGVmaW5lIE1QVV9USUNLU19QRVJfU0VDCQkoMTIwMDAwMDAgLyAyKQorI2VuZGlmCisKKyNkZWZpbmUgTVBVX1RJTUVSX1RJQ0tfUEVSSU9ECQkoKE1QVV9USUNLU19QRVJfU0VDIC8gSFopIC0gMSkKKwordHlwZWRlZiBzdHJ1Y3QgeworCXUzMiBjbnRsOwkJCS8qIENOVExfVElNRVIsIFIvVyAqLworCXUzMiBsb2FkX3RpbTsJCQkvKiBMT0FEX1RJTSwgICBXICovCisJdTMyIHJlYWRfdGltOwkJCS8qIFJFQURfVElNLCAgIFIgKi8KK30gb21hcF9tcHVfdGltZXJfcmVnc190OworCisjZGVmaW5lIG9tYXBfbXB1X3RpbWVyX2Jhc2UobikJCQkJCQlcCisoKHZvbGF0aWxlIG9tYXBfbXB1X3RpbWVyX3JlZ3NfdCopSU9fQUREUkVTUyhPTUFQX01QVV9USU1FUl9CQVNFICsJXAorCQkJCSAobikqT01BUF9NUFVfVElNRVJfT0ZGU0VUKSkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG9tYXBfbXB1X3RpbWVyX3JlYWQoaW50IG5yKQoreworCXZvbGF0aWxlIG9tYXBfbXB1X3RpbWVyX3JlZ3NfdCogdGltZXIgPSBvbWFwX21wdV90aW1lcl9iYXNlKG5yKTsKKwlyZXR1cm4gdGltZXItPnJlYWRfdGltOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9tcHVfdGltZXJfc3RhcnQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGxvYWRfdmFsKQoreworCXZvbGF0aWxlIG9tYXBfbXB1X3RpbWVyX3JlZ3NfdCogdGltZXIgPSBvbWFwX21wdV90aW1lcl9iYXNlKG5yKTsKKworCXRpbWVyLT5jbnRsID0gTVBVX1RJTUVSX0NMT0NLX0VOQUJMRTsKKwl1ZGVsYXkoMSk7CisJdGltZXItPmxvYWRfdGltID0gbG9hZF92YWw7CisgICAgICAgIHVkZWxheSgxKTsKKwl0aW1lci0+Y250bCA9IChNUFVfVElNRVJfQ0xPQ0tfRU5BQkxFIHwgTVBVX1RJTUVSX0FSIHwgTVBVX1RJTUVSX1NUKTsKK30KKwordW5zaWduZWQgbG9uZyBvbWFwX21wdV90aW1lcl90aWNrc190b191c2Vjcyh1bnNpZ25lZCBsb25nIG5yX3RpY2tzKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjOworCisJbnNlYyA9IGN5Y2xlc18yX25zKCh1bnNpZ25lZCBsb25nIGxvbmcpbnJfdGlja3MpOworCXJldHVybiAodW5zaWduZWQgbG9uZyluc2VjIC8gMTAwMDsKK30KKworLyoKKyAqIExhc3QgcHJvY2Vzc2VkIHN5c3RlbSB0aW1lciBpbnRlcnJ1cHQKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcF9tcHVfdGltZXJfbGFzdCA9IDA7CisKKy8qCisgKiBSZXR1cm5zIGVsYXBzZWQgdXNlY3Mgc2luY2UgbGFzdCBzeXN0ZW0gdGltZXIgaW50ZXJydXB0CisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXBfbXB1X3RpbWVyX2dldHRpbWVvZmZzZXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG5vdyA9IDAgLSBvbWFwX21wdV90aW1lcl9yZWFkKDApOworCXVuc2lnbmVkIGxvbmcgZWxhcHNlZCA9IG5vdyAtIG9tYXBfbXB1X3RpbWVyX2xhc3Q7CisKKwlyZXR1cm4gb21hcF9tcHVfdGltZXJfdGlja3NfdG9fdXNlY3MoZWxhcHNlZCk7Cit9CisKKy8qCisgKiBFbGFwc2VkIHRpbWUgYmV0d2VlbiBpbnRlcnJ1cHRzIGlzIGNhbGN1bGF0ZWQgdXNpbmcgdGltZXIwLgorICogTGF0ZW5jeSBkdXJpbmcgdGhlIGludGVycnVwdCBpcyBjYWxjdWxhdGVkIHVzaW5nIHRpbWVyMS4KKyAqIEJvdGggdGltZXIwIGFuZCB0aW1lcjEgYXJlIGNvdW50aW5nIGF0IDZNSHogKFAyIDYuNU1IeikuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBvbWFwX21wdV90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLAorCQkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIG5vdywgbGF0ZW5jeTsKKworCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOworCW5vdyA9IDAgLSBvbWFwX21wdV90aW1lcl9yZWFkKDApOworCWxhdGVuY3kgPSBNUFVfVElDS1NfUEVSX1NFQyAvIEhaIC0gb21hcF9tcHVfdGltZXJfcmVhZCgxKTsKKwlvbWFwX21wdV90aW1lcl9sYXN0ID0gbm93IC0gbGF0ZW5jeTsKKwl0aW1lcl90aWNrKHJlZ3MpOworCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG9tYXBfbXB1X3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAibXB1IHRpbWVyIiwKKwkuZmxhZ3MJCT0gU0FfSU5URVJSVVBULAorCS5oYW5kbGVyCT0gb21hcF9tcHVfdGltZXJfaW50ZXJydXB0Cit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwX21wdV90aW1lcjFfb3ZlcmZsb3dzOworc3RhdGljIGlycXJldHVybl90IG9tYXBfbXB1X3RpbWVyMV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLAorCQkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCW9tYXBfbXB1X3RpbWVyMV9vdmVyZmxvd3MrKzsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG9tYXBfbXB1X3RpbWVyMV9pcnEgPSB7CisJLm5hbWUJCT0gIm1wdSB0aW1lcjEgb3ZlcmZsb3ciLAorCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLmhhbmRsZXIJPSBvbWFwX21wdV90aW1lcjFfaW50ZXJydXB0Cit9OworCitzdGF0aWMgX19pbml0IHZvaWQgb21hcF9pbml0X21wdV90aW1lcih2b2lkKQoreworCXNldF9jeWMybnNfc2NhbGUoTVBVX1RJQ0tTX1BFUl9TRUMgLyAxMDAwKTsKKwlvbWFwX3RpbWVyLm9mZnNldCA9IG9tYXBfbXB1X3RpbWVyX2dldHRpbWVvZmZzZXQ7CisJc2V0dXBfaXJxKElOVF9USU1FUjEsICZvbWFwX21wdV90aW1lcjFfaXJxKTsKKwlzZXR1cF9pcnEoSU5UX1RJTUVSMiwgJm9tYXBfbXB1X3RpbWVyX2lycSk7CisJb21hcF9tcHVfdGltZXJfc3RhcnQoMCwgMHhmZmZmZmZmZik7CisJb21hcF9tcHVfdGltZXJfc3RhcnQoMSwgTVBVX1RJTUVSX1RJQ0tfUEVSSU9EKTsKK30KKworLyoKKyAqIFNjaGVkdWxlciBjbG9jayAtIHJldHVybnMgY3VycmVudCB0aW1lIGluIG5hbm9zZWMgdW5pdHMuCisgKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9jbG9jayh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdGlja3MgPSAwIC0gb21hcF9tcHVfdGltZXJfcmVhZCgwKTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdGlja3M2NDsKKworCXRpY2tzNjQgPSBvbWFwX21wdV90aW1lcjFfb3ZlcmZsb3dzOworCXRpY2tzNjQgPDw9IDMyOworCXRpY2tzNjQgfD0gdGlja3M7CisKKwlyZXR1cm4gY3ljbGVzXzJfbnModGlja3M2NCk7Cit9CisjZW5kaWYJLyogQ09ORklHX09NQVBfTVBVX1RJTUVSICovCisKKyNpZmRlZiBDT05GSUdfT01BUF8zMktfVElNRVIKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjZXJyb3IgT01BUCAzMktIeiB0aW1lciBkb2VzIG5vdCBjdXJyZW50bHkgd29yayBvbiAxNTEwIQorI2VuZGlmCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDMyS0h6IE9TIHRpbWVyCisgKgorICogVGhpcyBjdXJyZW50bHkgd29ya3Mgb25seSBvbiAxNnh4LCBhcyAxNTEwIGRvZXMgbm90IGhhdmUgdGhlIGNvbnRpbnVvdXMKKyAqIDMyS0h6IHN5bmNocm9ub3VzIHRpbWVyLiBUaGUgMzJLSHogc3luY2hyb25vdXMgdGltZXIgaXMgdXNlZCB0byBrZWVwIHRyYWNrCisgKiBvZiB0aW1lIGluIGFkZGl0aW9uIHRvIHRoZSAzMktIeiBPUyB0aW1lci4gVXNpbmcgb25seSB0aGUgMzJLSHogT1MgdGltZXIKKyAqIG9uIDE1MTAgd291bGQgYmUgcG9zc2libGUsIGJ1dCB0aGUgdGltZXIgd291bGQgbm90IGJlIGFzIGFjY3VyYXRlIGFzCisgKiB3aXRoIHRoZSAzMktIeiBzeW5jaHJvbml6ZWQgdGltZXIuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBPTUFQXzMyS19USU1FUl9CQVNFCQkweGZmZmI5MDAwCisjZGVmaW5lIE9NQVBfMzJLX1RJTUVSX0NSCQkweDA4CisjZGVmaW5lIE9NQVBfMzJLX1RJTUVSX1RWUgkJMHgwMAorI2RlZmluZSBPTUFQXzMyS19USU1FUl9UQ1IJCTB4MDQKKworI2RlZmluZSBPTUFQXzMyS19USUNLU19QRVJfSFoJCSgzMjc2OCAvIEhaKQorCisvKgorICogVFJNIHNheXMgMSAvIEhaID0gKCBUVlIgKyAxKSAvIDMyNzY4LCBzbyBUUlYgPSAoMzI3NjggLyBIWikgLSAxCisgKiBzbyB3aXRoIEhaID0gMTAwLCBUVlIgPSAzMjcuNjguCisgKi8KKyNkZWZpbmUgT01BUF8zMktfVElNRVJfVElDS19QRVJJT0QJKCgzMjc2OCAvIEhaKSAtIDEpCisjZGVmaW5lIE1BWF9TS0lQX0pJRkZJRVMJCTI1CisjZGVmaW5lIFRJTUVSXzMyS19TWU5DSFJPTklaRUQJCTB4ZmZmYmM0MTAKKworI2RlZmluZSBKSUZGSUVTX1RPX0hXX1RJQ0tTKG5yX2ppZmZpZXMsIGNsb2NrX3JhdGUpCQkJXAorCQkJCSgoKG5yX2ppZmZpZXMpICogKGNsb2NrX3JhdGUpKSAvIEhaKQorCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF8zMmtfdGltZXJfd3JpdGUoaW50IHZhbCwgaW50IHJlZykKK3sKKwlvbWFwX3dyaXRldyh2YWwsIHJlZyArIE9NQVBfMzJLX1RJTUVSX0JBU0UpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgb21hcF8zMmtfdGltZXJfcmVhZChpbnQgcmVnKQoreworCXJldHVybiBvbWFwX3JlYWRsKHJlZyArIE9NQVBfMzJLX1RJTUVSX0JBU0UpICYgMHhmZmZmZmY7Cit9CisKKy8qCisgKiBUaGUgMzJLSHogc3luY2hyb25pemVkIHRpbWVyIGlzIGFuIGFkZGl0aW9uYWwgdGltZXIgb24gMTZ4eC4KKyAqIEl0IGlzIGFsd2F5cyBydW5uaW5nLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgb21hcF8zMmtfc3luY190aW1lcl9yZWFkKHZvaWQpCit7CisJcmV0dXJuIG9tYXBfcmVhZGwoVElNRVJfMzJLX1NZTkNIUk9OSVpFRCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwXzMya190aW1lcl9zdGFydCh1bnNpZ25lZCBsb25nIGxvYWRfdmFsKQoreworCW9tYXBfMzJrX3RpbWVyX3dyaXRlKGxvYWRfdmFsLCBPTUFQXzMyS19USU1FUl9UVlIpOworCW9tYXBfMzJrX3RpbWVyX3dyaXRlKDB4MGYsIE9NQVBfMzJLX1RJTUVSX0NSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfMzJrX3RpbWVyX3N0b3Aodm9pZCkKK3sKKwlvbWFwXzMya190aW1lcl93cml0ZSgweDAsIE9NQVBfMzJLX1RJTUVSX0NSKTsKK30KKworLyoKKyAqIFJvdW5kcyBkb3duIHRvIG5lYXJlc3QgdXNlYworICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgb21hcF8zMmtfdGlja3NfdG9fdXNlY3ModW5zaWduZWQgbG9uZyB0aWNrc18zMmspCit7CisJcmV0dXJuICh0aWNrc18zMmsgKiA1KjUqNSo1KjUqNSkgPj4gOTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcF8zMmtfbGFzdF90aWNrID0gMDsKKworLyoKKyAqIFJldHVybnMgZWxhcHNlZCB1c2VjcyBzaW5jZSBsYXN0IDMyayB0aW1lciBpbnRlcnJ1cHQKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcF8zMmtfdGltZXJfZ2V0dGltZW9mZnNldCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbm93ID0gb21hcF8zMmtfc3luY190aW1lcl9yZWFkKCk7CisJcmV0dXJuIG9tYXBfMzJrX3RpY2tzX3RvX3VzZWNzKG5vdyAtIG9tYXBfMzJrX2xhc3RfdGljayk7Cit9CisKKy8qCisgKiBUaW1lciBpbnRlcnJ1cHQgZm9yIDMyS0h6IHRpbWVyLiBXaGVuIGR5bmFtaWMgdGljayBpcyBlbmFibGVkLCB0aGlzCisgKiBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCBmcm9tIG90aGVyIGludGVycnVwdHMgdG8gcmVtb3ZlIGxhdGVuY3kKKyAqIGlzc3VlcyB3aXRoIGR5bmFtaWMgdGljay4gSW4gdGhlIGR5bmFtaWMgdGljayBjYXNlLCB3ZSBuZWVkIHRvIGxvY2sKKyAqIHdpdGggaXJxc2F2ZS4KKyAqLworc3RhdGljIGlycXJldHVybl90IG9tYXBfMzJrX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsCisJCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgbm93OworCisJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7CisJbm93ID0gb21hcF8zMmtfc3luY190aW1lcl9yZWFkKCk7CisKKwl3aGlsZSAobm93IC0gb21hcF8zMmtfbGFzdF90aWNrID49IE9NQVBfMzJLX1RJQ0tTX1BFUl9IWikgeworCQlvbWFwXzMya19sYXN0X3RpY2sgKz0gT01BUF8zMktfVElDS1NfUEVSX0haOworCQl0aW1lcl90aWNrKHJlZ3MpOworCX0KKworCS8qIFJlc3RhcnQgdGltZXIgc28gd2UgZG9uJ3QgZHJpZnQgb2ZmIGR1ZSB0byBtb2R1bG8gb3IgZHluYW1pYyB0aWNrLgorCSAqIEJ5IGRlZmF1bHQgd2UgcHJvZ3JhbSB0aGUgbmV4dCB0aW1lciB0byBiZSBjb250aW51b3VzIHRvIGF2b2lkCisJICogbGF0ZW5jaWVzIGR1cmluZyBoaWdoIHN5c3RlbSBsb2FkLiBEdXJpbmcgZHluYW1pYyB0aWNrIG9wZXJhdGlvbiB0aGUKKwkgKiBjb250aW51b3VzIHRpbWVyIGNhbiBiZSBvdmVycmlkZGVuIGZyb20gcG1faWRsZSB0byBiZSBsb25nZXIuCisJICovCisJb21hcF8zMmtfdGltZXJfc3RhcnQob21hcF8zMmtfbGFzdF90aWNrICsgT01BUF8zMktfVElDS1NfUEVSX0haIC0gbm93KTsKKwl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBvbWFwXzMya190aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gIjMyS0h6IHRpbWVyIiwKKwkuZmxhZ3MJCT0gU0FfSU5URVJSVVBULAorCS5oYW5kbGVyCT0gb21hcF8zMmtfdGltZXJfaW50ZXJydXB0Cit9OworCitzdGF0aWMgX19pbml0IHZvaWQgb21hcF9pbml0XzMya190aW1lcih2b2lkKQoreworCXNldHVwX2lycShJTlRfT1NfVElNRVIsICZvbWFwXzMya190aW1lcl9pcnEpOworCW9tYXBfdGltZXIub2Zmc2V0ICA9IG9tYXBfMzJrX3RpbWVyX2dldHRpbWVvZmZzZXQ7CisJb21hcF8zMmtfbGFzdF90aWNrID0gb21hcF8zMmtfc3luY190aW1lcl9yZWFkKCk7CisJb21hcF8zMmtfdGltZXJfc3RhcnQoT01BUF8zMktfVElNRVJfVElDS19QRVJJT0QpOworfQorI2VuZGlmCS8qIENPTkZJR19PTUFQXzMyS19USU1FUiAqLworCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaW1lciBpbml0aWFsaXphdGlvbgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQgX19pbml0IG9tYXBfdGltZXJfaW5pdCh2b2lkKQoreworI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTVBVX1RJTUVSKQorCW9tYXBfaW5pdF9tcHVfdGltZXIoKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX09NQVBfMzJLX1RJTUVSKQorCW9tYXBfaW5pdF8zMmtfdGltZXIoKTsKKyNlbHNlCisjZXJyb3IgTm8gc3lzdGVtIHRpbWVyIHNlbGVjdGVkIGluIEtjb25maWchCisjZW5kaWYKK30KKworc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyID0geworCS5pbml0CQk9IG9tYXBfdGltZXJfaW5pdCwKKwkub2Zmc2V0CQk9IE5VTEwsCQkvKiBJbml0aWFsaXplZCBsYXRlciAqLworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC91c2IuYyBiL2FyY2gvYXJtL21hY2gtb21hcC91c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTgwNWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwL3VzYi5jCkBAIC0wLDAgKzEsNTk0IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1vbWFwL3VzYi5jIC0tIHBsYXRmb3JtIGxldmVsIFVTQiBpbml0aWFsaXphdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjdW5kZWYJREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiX290Zy5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKworLyogVGhlc2Ugcm91dGluZXMgc2hvdWxkIGhhbmRsZSB0aGUgc3RhbmRhcmQgY2hpcC1zcGVjaWZpYyBtb2RlcworICogZm9yIHVzYjAvMS8yIHBvcnRzLCBjb3ZlcmluZyBiYXNpYyBtdXggYW5kIHRyYW5zY2VpdmVyIHNldHVwLgorICogQ2FsbCBvbWFwX3VzYl9pbml0KCkgb25jZSwgZnJvbSBJTklUX01BQ0hJTkUoKS4KKyAqCisgKiBTb21lIGJvYXJkLSouYyBmaWxlcyB3aWxsIG5lZWQgdG8gc2V0IHVwIGFkZGl0aW9uYWwgbXV4IG9wdGlvbnMsCisgKiBsaWtlIGZvciBzdXNwZW5kIGhhbmRsaW5nLCB2YnVzIHNlbnNpbmcsIEdQSU9zLCBhbmQgdGhlIEQrIHB1bGx1cC4KKyAqLworCisvKiBURVNURUQgT046CisgKiAgLSAxNjExQiBIMiAod2l0aCB1c2IxIG1pbmktQUIpIHVzaW5nIHN0YW5kYXJkIE1pbmktQiBvciBPVEcgY2FibGVzCisgKiAgLSA1OTEyIE9TSyBPSENJICh3aXRoIHVzYjAgc3RhbmRhcmQtQSksIHN0YW5kYXJkIEEtdG8tQiBjYWJsZXMKKyAqICAtIDU5MTIgT1NLIFVEQywgd2l0aCAqbm9uc3RhbmRhcmQqIEEtdG8tQSBjYWJsZQorICogIC0gMTUxMCBJbm5vdmF0b3IgVURDIHdpdGggYnVuZGxlZCB1c2IwIGNhYmxlCisgKiAgLSAxNTEwIElubm92YXRvciBPSENJIHdpdGggYnVuZGxlZCB1c2IxL3VzYjIgY2FibGUKKyAqICAtIDE1MTAgSW5ub3ZhdG9yIE9IQ0kgd2l0aCBjdXN0b20gdXNiMCBjYWJsZSwgZmVlZGluZyA1ViBWQlVTCisgKiAgLSAxNzEwIGN1c3RvbSBkZXZlbG9wbWVudCBib2FyZCB1c2luZyBhbHRlcm5hdGUgcGluIGdyb3VwCisgKiAgLSAxNzEwIEgzICh3aXRoIHVzYjEgbWluaS1BQikgdXNpbmcgc3RhbmRhcmQgTWluaS1CIG9yIE9URyBjYWJsZXMKKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYJQ09ORklHX0FSQ0hfT01BUF9PVEcKKworc3RhdGljIHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKnhjZWl2OworCisvKioKKyAqIG90Z19nZXRfdHJhbnNjZWl2ZXIgLSBmaW5kIHRoZSAoc2luZ2xlKSBPVEcgdHJhbnNjZWl2ZXIgZHJpdmVyCisgKgorICogUmV0dXJucyB0aGUgdHJhbnNjZWl2ZXIgZHJpdmVyLCBhZnRlciBnZXR0aW5nIGEgcmVmY291bnQgdG8gaXQ7IG9yCisgKiBudWxsIGlmIHRoZXJlIGlzIG5vIHN1Y2ggdHJhbnNjZWl2ZXIuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgorICogcmVsZWFzaW5nIHRoYXQgY291bnQuCisgKi8KK3N0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90Z19nZXRfdHJhbnNjZWl2ZXIodm9pZCkKK3sKKwlpZiAoeGNlaXYpCisJCWdldF9kZXZpY2UoeGNlaXYtPmRldik7CisJcmV0dXJuIHhjZWl2OworfQorRVhQT1JUX1NZTUJPTChvdGdfZ2V0X3RyYW5zY2VpdmVyKTsKKworaW50IG90Z19zZXRfdHJhbnNjZWl2ZXIoc3RydWN0IG90Z190cmFuc2NlaXZlciAqeCkKK3sKKwlpZiAoeGNlaXYgJiYgeCkKKwkJcmV0dXJuIC1FQlVTWTsKKwl4Y2VpdiA9IHg7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKG90Z19zZXRfdHJhbnNjZWl2ZXIpOworCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHUzMiBfX2luaXQgb21hcF91c2IwX2luaXQodW5zaWduZWQgbndpcmVzLCB1bnNpZ25lZCBpc19kZXZpY2UpCit7CisJdTMyCXN5c2NvbjEgPSAwOworCisJaWYgKG53aXJlcyA9PSAwKSB7CisJCWlmICghY3B1X2lzX29tYXAxNXh4KCkpIHsKKwkJCS8qIHB1bGxkb3duIEQrL0QtICovCisJCQlVU0JfVFJBTlNDRUlWRVJfQ1RSTF9SRUcgJj0gfigzIDw8IDEpOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmIChpc19kZXZpY2UpCisJCW9tYXBfY2ZnX3JlZyhXNF9VU0JfUFVFTik7CisKKwkvKiBpbnRlcm5hbCB0cmFuc2NlaXZlciAqLworCWlmIChud2lyZXMgPT0gMikgeworCQkvLyBvbWFwX2NmZ19yZWcoUDlfVVNCX0RQKTsKKwkJLy8gb21hcF9jZmdfcmVnKFI4X1VTQl9ETSk7CisKKwkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CisJCQkvKiBUaGlzIHdvcmtzIG9uIDE1MTAtSW5ub3ZhdG9yICovCisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIE5PVEVTOgorCQkgKiAgLSBwZXJpcGhlcmFsIHNob3VsZCBjb25maWd1cmUgVkJVUyBkZXRlY3Rpb24hCisJCSAqICAtIG9ubHkgcGVyaXBoZXJhbHMgbWF5IHVzZSB0aGUgaW50ZXJuYWwgRCsvRC0gcHVsbGRvd25zCisJCSAqICAtIE9URyBzdXBwb3J0IG9uIHRoaXMgcG9ydCBub3QgeWV0IHdyaXR0ZW4KKwkJICovCisKKwkJVVNCX1RSQU5TQ0VJVkVSX0NUUkxfUkVHICY9IH4oNyA8PCA0KTsKKwkJaWYgKCFpc19kZXZpY2UpCisJCQlVU0JfVFJBTlNDRUlWRVJfQ1RSTF9SRUcgfD0gKDMgPDwgMSk7CisKKwkJcmV0dXJuIDMgPDwgMTY7CisJfQorCisJLyogYWx0ZXJuYXRlIHBpbiBjb25maWcsIGV4dGVybmFsIHRyYW5zY2VpdmVyICovCisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CisJCXByaW50ayhLRVJOX0VSUiAibm8gdXNiMCBhbHQgcGluIGNvbmZpZyBvbiAxNXh4XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJb21hcF9jZmdfcmVnKFY2X1VTQjBfVFhEKTsKKwlvbWFwX2NmZ19yZWcoVzlfVVNCMF9UWEVOKTsKKwlvbWFwX2NmZ19yZWcoVzVfVVNCMF9TRTApOworCisJLyogTk9URTogIFNQRUVEIGFuZCBTVVNQIGFyZW4ndCBjb25maWd1cmVkIGhlcmUgKi8KKworCWlmIChud2lyZXMgIT0gMykKKwkJb21hcF9jZmdfcmVnKFk1X1VTQjBfUkNWKTsKKwlpZiAobndpcmVzICE9IDYpCisJCVVTQl9UUkFOU0NFSVZFUl9DVFJMX1JFRyAmPSB+Q09ORl9VU0IyX1VOSV9SOworCisJc3dpdGNoIChud2lyZXMpIHsKKwljYXNlIDM6CisJCXN5c2NvbjEgPSAyOworCQlicmVhazsKKwljYXNlIDQ6CisJCXN5c2NvbjEgPSAxOworCQlicmVhazsKKwljYXNlIDY6CisJCXN5c2NvbjEgPSAzOworCQlvbWFwX2NmZ19yZWcoQUE5X1VTQjBfVlApOworCQlvbWFwX2NmZ19yZWcoUjlfVVNCMF9WTSk7CisJCVVTQl9UUkFOU0NFSVZFUl9DVFJMX1JFRyB8PSBDT05GX1VTQjJfVU5JX1I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiaWxsZWdhbCB1c2IlZCAlZC13aXJlIHRyYW5zY2VpdmVyXG4iLAorCQkJMCwgbndpcmVzKTsKKwl9CisJcmV0dXJuIHN5c2NvbjEgPDwgMTY7Cit9CisKK3N0YXRpYyB1MzIgX19pbml0IG9tYXBfdXNiMV9pbml0KHVuc2lnbmVkIG53aXJlcykKK3sKKwl1MzIJc3lzY29uMSA9IDA7CisKKwlpZiAobndpcmVzICE9IDYgJiYgIWNwdV9pc19vbWFwMTV4eCgpKQorCQlVU0JfVFJBTlNDRUlWRVJfQ1RSTF9SRUcgJj0gfkNPTkZfVVNCMV9VTklfUjsKKwlpZiAobndpcmVzID09IDApCisJCXJldHVybiAwOworCisJLyogZXh0ZXJuYWwgdHJhbnNjZWl2ZXIgKi8KKwlvbWFwX2NmZ19yZWcoVVNCMV9UWEQpOworCW9tYXBfY2ZnX3JlZyhVU0IxX1RYRU4pOworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgeworCQlvbWFwX2NmZ19yZWcoVVNCMV9TRU8pOworCQlvbWFwX2NmZ19yZWcoVVNCMV9TUEVFRCk7CisJCS8vIFNVU1AKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTYxMCgpIHx8IGNwdV9pc19vbWFwNTkxMigpKSB7CisJCW9tYXBfY2ZnX3JlZyhXMTNfMTYxMF9VU0IxX1NFMCk7CisJCW9tYXBfY2ZnX3JlZyhSMTNfMTYxMF9VU0IxX1NQRUVEKTsKKwkJLy8gU1VTUAorCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNzEwKCkpIHsKKwkJb21hcF9jZmdfcmVnKFIxM18xNzEwX1VTQjFfU0UwKTsKKwkJLy8gU1VTUAorCX0gZWxzZSB7CisJCXByX2RlYnVnKCJ1c2IgdW5yZWNvZ25pemVkXG4iKTsKKwl9CisJaWYgKG53aXJlcyAhPSAzKQorCQlvbWFwX2NmZ19yZWcoVVNCMV9SQ1YpOworCisJc3dpdGNoIChud2lyZXMpIHsKKwljYXNlIDM6CisJCXN5c2NvbjEgPSAyOworCQlicmVhazsKKwljYXNlIDQ6CisJCXN5c2NvbjEgPSAxOworCQlicmVhazsKKwljYXNlIDY6CisJCXN5c2NvbjEgPSAzOworCQlvbWFwX2NmZ19yZWcoVVNCMV9WUCk7CisJCW9tYXBfY2ZnX3JlZyhVU0IxX1ZNKTsKKwkJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkKKwkJCVVTQl9UUkFOU0NFSVZFUl9DVFJMX1JFRyB8PSBDT05GX1VTQjFfVU5JX1I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiaWxsZWdhbCB1c2IlZCAlZC13aXJlIHRyYW5zY2VpdmVyXG4iLAorCQkJMSwgbndpcmVzKTsKKwl9CisJcmV0dXJuIHN5c2NvbjEgPDwgMjA7Cit9CisKK3N0YXRpYyB1MzIgX19pbml0IG9tYXBfdXNiMl9pbml0KHVuc2lnbmVkIG53aXJlcywgdW5zaWduZWQgYWx0X3Bpbmdyb3VwKQoreworCXUzMglzeXNjb24xID0gMDsKKworCS8qIE5PVEUgZXJyYXR1bTogbXVzdCBsZWF2ZSBVU0IyX1VOSV9SIHNldCBpZiB1c2IwIGluIHVzZSAqLworCWlmIChhbHRfcGluZ3JvdXAgfHwgbndpcmVzID09IDApCisJCXJldHVybiAwOworCWlmIChud2lyZXMgIT0gNiAmJiAhY3B1X2lzX29tYXAxNXh4KCkpCisJCVVTQl9UUkFOU0NFSVZFUl9DVFJMX1JFRyAmPSB+Q09ORl9VU0IyX1VOSV9SOworCisJLyogZXh0ZXJuYWwgdHJhbnNjZWl2ZXIgKi8KKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKKwkJb21hcF9jZmdfcmVnKFVTQjJfVFhEKTsKKwkJb21hcF9jZmdfcmVnKFVTQjJfVFhFTik7CisJCW9tYXBfY2ZnX3JlZyhVU0IyX1NFTyk7CisJCWlmIChud2lyZXMgIT0gMykKKwkJCW9tYXBfY2ZnX3JlZyhVU0IyX1JDVik7CisJCS8qIHRoZXJlIGlzIG5vIFVTQjJfU1BFRUQgKi8KKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7CisJCW9tYXBfY2ZnX3JlZyhWNl9VU0IyX1RYRCk7CisJCW9tYXBfY2ZnX3JlZyhXOV9VU0IyX1RYRU4pOworCQlvbWFwX2NmZ19yZWcoVzVfVVNCMl9TRTApOworCQlpZiAobndpcmVzICE9IDMpCisJCQlvbWFwX2NmZ19yZWcoWTVfVVNCMl9SQ1YpOworCQkvLyBGSVhNRSBvbWFwX2NmZ19yZWcoVVNCMl9TUEVFRCk7CisJfSBlbHNlIHsKKwkJcHJfZGVidWcoInVzYiB1bnJlY29nbml6ZWRcbiIpOworCX0KKwkvLyBvbWFwX2NmZ19yZWcoVVNCMl9TVVNQKTsKKworCXN3aXRjaCAobndpcmVzKSB7CisJY2FzZSAzOgorCQlzeXNjb24xID0gMjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlzeXNjb24xID0gMTsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlzeXNjb24xID0gMzsKKwkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CisJCQlvbWFwX2NmZ19yZWcoVVNCMl9WUCk7CisJCQlvbWFwX2NmZ19yZWcoVVNCMl9WTSk7CisJCX0gZWxzZSB7CisJCQlvbWFwX2NmZ19yZWcoQUE5X1VTQjJfVlApOworCQkJb21hcF9jZmdfcmVnKFI5X1VTQjJfVk0pOworCQkJVVNCX1RSQU5TQ0VJVkVSX0NUUkxfUkVHIHw9IENPTkZfVVNCMl9VTklfUjsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgImlsbGVnYWwgdXNiJWQgJWQtd2lyZSB0cmFuc2NlaXZlclxuIiwKKwkJCTIsIG53aXJlcyk7CisJfQorCXJldHVybiBzeXNjb24xIDw8IDI0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYJZGVmaW5lZChDT05GSUdfVVNCX0dBREdFVF9PTUFQKSB8fCBcCisJZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKSB8fCBcCisJKGRlZmluZWQoQ09ORklHX1VTQl9PVEcpICYmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUF9PVEcpKQorc3RhdGljIHZvaWQgdXNiX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCS8qIG5vcm1hbGx5IG5vdCBmcmVlZCAqLworfQorI2VuZGlmCisKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9PTUFQCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWRjX3Jlc291cmNlc1tdID0geworCS8qIG9yZGVyIGlzIHNpZ25pZmljYW50ISAqLworCXsJCS8qIHJlZ2lzdGVycyAqLworCQkuc3RhcnQJCT0gSU9fQUREUkVTUyhVRENfQkFTRSksCisJCS5lbmQJCT0gSU9fQUREUkVTUyhVRENfQkFTRSArIDB4ZmYpLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgewkJLyogZ2VuZXJhbCBJUlEgKi8KKwkJLnN0YXJ0CQk9IElIMl9CQVNFICsgMjAsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LCB7CQkvKiBQSU8gSVJRICovCisJCS5zdGFydAkJPSBJSDJfQkFTRSArIDMwLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwgewkJLyogU09GIElSUSAqLworCQkuc3RhcnQJCT0gSUgyX0JBU0UgKyAyOSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgdTY0IHVkY19kbWFtYXNrID0gfih1MzIpMDsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdWRjX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcF91ZGMiLAorCS5pZAkJPSAtMSwKKwkuZGV2ID0geworCQkucmVsZWFzZQkJPSB1c2JfcmVsZWFzZSwKKwkJLmRtYV9tYXNrCQk9ICZ1ZGNfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1ZGNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSB1ZGNfcmVzb3VyY2VzLAorfTsKKworI2VuZGlmCisKKyNpZglkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCisKKy8qIFRoZSBkbWFtYXNrIG11c3QgYmUgc2V0IGZvciBPSENJIHRvIHdvcmsgKi8KK3N0YXRpYyB1NjQgb2hjaV9kbWFtYXNrID0gfih1MzIpMDsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvaGNpX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gT01BUF9PSENJX0JBU0UsCisJCS5lbmQJPSBPTUFQX09IQ0lfQkFTRSArIDQwOTYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJTlRfVVNCX0hIQ18xLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb2hjaV9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJvaGNpIiwKKwkuaWQJCQk9IC0xLAorCS5kZXYgPSB7CisJCS5yZWxlYXNlCQk9IHVzYl9yZWxlYXNlLAorCQkuZG1hX21hc2sJCT0gJm9oY2lfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvaGNpX3Jlc291cmNlcyksCisJLnJlc291cmNlCQk9IG9oY2lfcmVzb3VyY2VzLAorfTsKKworI2VuZGlmCisKKyNpZglkZWZpbmVkKENPTkZJR19VU0JfT1RHKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVBfT1RHKQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG90Z19yZXNvdXJjZXNbXSA9IHsKKwkvKiBvcmRlciBpcyBzaWduaWZpY2FudCEgKi8KKwl7CisJCS5zdGFydAkJPSBJT19BRERSRVNTKE9UR19CQVNFKSwKKwkJLmVuZAkJPSBJT19BRERSRVNTKE9UR19CQVNFICsgMHhmZiksCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydAkJPSBJSDJfQkFTRSArIDgsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3RnX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcF9vdGciLAorCS5pZAkJPSAtMSwKKwkuZGV2ID0geworCQkucmVsZWFzZQkJPSB1c2JfcmVsZWFzZSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvdGdfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBvdGdfcmVzb3VyY2VzLAorfTsKKworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgVUxQRF9DTE9DS19DVFJMX1JFRwlfX1JFRzE2KFVMUERfQ0xPQ0tfQ1RSTCkKKyNkZWZpbmUgVUxQRF9TT0ZUX1JFUV9SRUcJX19SRUcxNihVTFBEX1NPRlRfUkVRKQorCisKKy8vIEZJWE1FIGNvcnJlY3QgYW5zd2VyIGRlcGVuZHMgb24gaG1jX21vZGUsCisvLyBhcyBkb2VzIGFueSBub256ZXJvIHZhbHVlIGZvciBjb25maWctPm90ZyBwb3J0IG51bWJlcgorI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX09NQVAKKyNkZWZpbmUJaXNfdXNiMF9kZXZpY2UoY29uZmlnKQkxCisjZWxzZQorI2RlZmluZQlpc191c2IwX2RldmljZShjb25maWcpCTAKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYJQ09ORklHX0FSQ0hfT01BUF9PVEcKKwordm9pZCBfX2luaXQKK29tYXBfb3RnX2luaXQoc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqY29uZmlnKQoreworCXUzMgkJc3lzY29uID0gT1RHX1NZU0NPTl8xX1JFRyAmIDB4ZmZmZjsKKwlpbnQJCXN0YXR1czsKKwlpbnQJCWFsdF9waW5ncm91cCA9IDA7CisKKwkvKiBOT1RFOiAgbm8gYnVzIG9yIGNsb2NrIHNldHVwICh5ZXQ/KSAqLworCisJc3lzY29uID0gT1RHX1NZU0NPTl8xX1JFRyAmIDB4ZmZmZjsKKwlpZiAoIShzeXNjb24gJiBPVEdfUkVTRVRfRE9ORSkpCisJCXByX2RlYnVnKCJVU0IgcmVzZXRzIG5vdCBjb21wbGV0ZT9cbiIpOworCisJLy8gT1RHX0lSUV9FTl9SRUcgPSAwOworCisJLyogcGluIG11eGluZyBhbmQgdHJhbnNjZWl2ZXIgcGlub3V0cyAqLworCWlmIChjb25maWctPnBpbnNbMF0gPiAyKQkvKiBhbHQgcGluZ3JvdXAgMiAqLworCQlhbHRfcGluZ3JvdXAgPSAxOworCXN5c2NvbiB8PSBvbWFwX3VzYjBfaW5pdChjb25maWctPnBpbnNbMF0sIGlzX3VzYjBfZGV2aWNlKGNvbmZpZykpOworCXN5c2NvbiB8PSBvbWFwX3VzYjFfaW5pdChjb25maWctPnBpbnNbMV0pOworCXN5c2NvbiB8PSBvbWFwX3VzYjJfaW5pdChjb25maWctPnBpbnNbMl0sIGFsdF9waW5ncm91cCk7CisJcHJfZGVidWcoIk9UR19TWVNDT05fMV9SRUcgPSAlMDh4XG4iLCBzeXNjb24pOworCU9UR19TWVNDT05fMV9SRUcgPSBzeXNjb247CisKKwlzeXNjb24gPSBjb25maWctPmhtY19tb2RlOworCXN5c2NvbiB8PSBVU0JYX1NZTkNIUk8gfCAoNCA8PCAxNikgLyogQl9BU0UwX0JSU1QgKi87CisjaWZkZWYJQ09ORklHX1VTQl9PVEcKKwlpZiAoY29uZmlnLT5vdGcpCisJCXN5c2NvbiB8PSBPVEdfRU47CisjZW5kaWYKKwlwcl9kZWJ1ZygiVVNCX1RSQU5TQ0VJVkVSX0NUUkxfUkVHID0gJTAzeFxuIiwgVVNCX1RSQU5TQ0VJVkVSX0NUUkxfUkVHKTsKKwlwcl9kZWJ1ZygiT1RHX1NZU0NPTl8yX1JFRyA9ICUwOHhcbiIsIHN5c2Nvbik7CisJT1RHX1NZU0NPTl8yX1JFRyA9IHN5c2NvbjsKKworCXByaW50aygiVVNCOiBobWMgJWQiLCBjb25maWctPmhtY19tb2RlKTsKKwlpZiAoYWx0X3Bpbmdyb3VwKQorCQlwcmludGsoIiwgdXNiMiBhbHQgJWQgd2lyZXMiLCBjb25maWctPnBpbnNbMl0pOworCWVsc2UgaWYgKGNvbmZpZy0+cGluc1swXSkKKwkJcHJpbnRrKCIsIHVzYjAgJWQgd2lyZXMlcyIsIGNvbmZpZy0+cGluc1swXSwKKwkJCWlzX3VzYjBfZGV2aWNlKGNvbmZpZykgPyAiIChkZXYpIiA6ICIiKTsKKwlpZiAoY29uZmlnLT5waW5zWzFdKQorCQlwcmludGsoIiwgdXNiMSAlZCB3aXJlcyIsIGNvbmZpZy0+cGluc1sxXSk7CisJaWYgKCFhbHRfcGluZ3JvdXAgJiYgY29uZmlnLT5waW5zWzJdKQorCQlwcmludGsoIiwgdXNiMiAlZCB3aXJlcyIsIGNvbmZpZy0+cGluc1syXSk7CisJaWYgKGNvbmZpZy0+b3RnKQorCQlwcmludGsoIiwgTWluaS1BQiBvbiB1c2IlZCIsIGNvbmZpZy0+b3RnIC0gMSk7CisJcHJpbnRrKCJcbiIpOworCisJLyogbGVhdmUgVVNCIGNsb2Nrcy9jb250cm9sbGVycyBvZmYgdW50aWwgbmVlZGVkICovCisJVUxQRF9TT0ZUX1JFUV9SRUcgJj0gflNPRlRfVVNCX0NMS19SRVE7CisJVUxQRF9DTE9DS19DVFJMX1JFRyAmPSB+VVNCX01DTEtfRU47CisJVUxQRF9DTE9DS19DVFJMX1JFRyB8PSBESVNfVVNCX1BWQ0lfQ0xLOworCXN5c2NvbiA9IE9UR19TWVNDT05fMV9SRUc7CisJc3lzY29uIHw9IEhTVF9JRExFX0VOfERFVl9JRExFX0VOfE9UR19JRExFX0VOOworCisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfT01BUAorCWlmIChjb25maWctPm90ZyB8fCBjb25maWctPnJlZ2lzdGVyX2RldikgeworCQlzeXNjb24gJj0gfkRFVl9JRExFX0VOOworCQl1ZGNfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gY29uZmlnOworCQkvKiBGSVhNRSBwYXRjaCBJUlEgbnVtYmVycyBmb3Igb21hcDczMCAqLworCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnVkY19kZXZpY2UpOworCQlpZiAoc3RhdHVzKQorCQkJcHJfZGVidWcoImNhbid0IHJlZ2lzdGVyIFVEQyBkZXZpY2UsICVkXG4iLCBzdGF0dXMpOworCX0KKyNlbmRpZgorCisjaWYJZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQorCWlmIChjb25maWctPm90ZyB8fCBjb25maWctPnJlZ2lzdGVyX2hvc3QpIHsKKwkJc3lzY29uICY9IH5IU1RfSURMRV9FTjsKKwkJb2hjaV9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBjb25maWc7CisJCWlmIChjcHVfaXNfb21hcDczMCgpKQorCQkJb2hjaV9yZXNvdXJjZXNbMV0uc3RhcnQgPSBJTlRfNzMwX1VTQl9ISENfMTsKKwkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvaGNpX2RldmljZSk7CisJCWlmIChzdGF0dXMpCisJCQlwcl9kZWJ1ZygiY2FuJ3QgcmVnaXN0ZXIgT0hDSSBkZXZpY2UsICVkXG4iLCBzdGF0dXMpOworCX0KKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1VTQl9PVEcKKwlpZiAoY29uZmlnLT5vdGcpIHsKKwkJc3lzY29uICY9IH5PVEdfSURMRV9FTjsKKwkJb3RnX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9IGNvbmZpZzsKKwkJaWYgKGNwdV9pc19vbWFwNzMwKCkpCisJCQlvdGdfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gSU5UXzczMF9VU0JfT1RHOworCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm90Z19kZXZpY2UpOworCQlpZiAoc3RhdHVzKQorCQkJcHJfZGVidWcoImNhbid0IHJlZ2lzdGVyIE9URyBkZXZpY2UsICVkXG4iLCBzdGF0dXMpOworCX0KKyNlbmRpZgorCXByX2RlYnVnKCJPVEdfU1lTQ09OXzFfUkVHID0gJTA4eFxuIiwgc3lzY29uKTsKKwlPVEdfU1lTQ09OXzFfUkVHID0gc3lzY29uOworCisJc3RhdHVzID0gMDsKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX290Z19pbml0KHN0cnVjdCBvbWFwX3VzYl9jb25maWcgKmNvbmZpZykge30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYJQ09ORklHX0FSQ0hfT01BUDE1MTAKKworI2RlZmluZSBVTFBEX0RQTExfQ1RSTF9SRUcJX19SRUcxNihVTFBEX0RQTExfQ1RSTCkKKyNkZWZpbmUgRFBMTF9JT0IJCSgxIDw8IDEzKQorI2RlZmluZSBEUExMX1BMTF9FTkFCTEUJCSgxIDw8IDQpCisjZGVmaW5lIERQTExfTE9DSwkJKDEgPDwgMCkKKworI2RlZmluZSBVTFBEX0FQTExfQ1RSTF9SRUcJX19SRUcxNihVTFBEX0FQTExfQ1RSTCkKKyNkZWZpbmUgQVBMTF9ORFBMTF9TV0lUQ0gJKDEgPDwgMCkKKworCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF8xNTEwX3VzYl9pbml0KHN0cnVjdCBvbWFwX3VzYl9jb25maWcgKmNvbmZpZykKK3sKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCB2YWw7CisKKwlvbWFwX3VzYjBfaW5pdChjb25maWctPnBpbnNbMF0sIGlzX3VzYjBfZGV2aWNlKGNvbmZpZykpOworCW9tYXBfdXNiMV9pbml0KGNvbmZpZy0+cGluc1sxXSk7CisJb21hcF91c2IyX2luaXQoY29uZmlnLT5waW5zWzJdLCAwKTsKKworCXZhbCA9IG9tYXBfcmVhZGwoTU9EX0NPTkZfQ1RSTF8wKSAmIH4oMHgzZiA8PCAxKTsKKwl2YWwgfD0gKGNvbmZpZy0+aG1jX21vZGUgPDwgMSk7CisJb21hcF93cml0ZWwodmFsLCBNT0RfQ09ORl9DVFJMXzApOworCisJcHJpbnRrKCJVU0I6IGhtYyAlZCIsIGNvbmZpZy0+aG1jX21vZGUpOworCWlmIChjb25maWctPnBpbnNbMF0pCisJCXByaW50aygiLCB1c2IwICVkIHdpcmVzJXMiLCBjb25maWctPnBpbnNbMF0sCisJCQlpc191c2IwX2RldmljZShjb25maWcpID8gIiAoZGV2KSIgOiAiIik7CisJaWYgKGNvbmZpZy0+cGluc1sxXSkKKwkJcHJpbnRrKCIsIHVzYjEgJWQgd2lyZXMiLCBjb25maWctPnBpbnNbMV0pOworCWlmIChjb25maWctPnBpbnNbMl0pCisJCXByaW50aygiLCB1c2IyICVkIHdpcmVzIiwgY29uZmlnLT5waW5zWzJdKTsKKwlwcmludGsoIlxuIik7CisKKwkvKiB1c2UgRFBMTCBmb3IgNDggTUh6IGZ1bmN0aW9uIGNsb2NrICovCisJcHJfZGVidWcoIkFQTEwgJTA0eCBEUExMICUwNHggUkVRICUwNHhcbiIsIFVMUERfQVBMTF9DVFJMX1JFRywKKwkJCVVMUERfRFBMTF9DVFJMX1JFRywgVUxQRF9TT0ZUX1JFUV9SRUcpOworCVVMUERfQVBMTF9DVFJMX1JFRyAmPSB+QVBMTF9ORFBMTF9TV0lUQ0g7CisJVUxQRF9EUExMX0NUUkxfUkVHIHw9IERQTExfSU9CIHwgRFBMTF9QTExfRU5BQkxFOworCVVMUERfU09GVF9SRVFfUkVHIHw9IFNPRlRfVURDX1JFUSB8IFNPRlRfRFBMTF9SRVE7CisJd2hpbGUgKCEoVUxQRF9EUExMX0NUUkxfUkVHICYgRFBMTF9MT0NLKSkKKwkJY3B1X3JlbGF4KCk7CisKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9PTUFQCisJaWYgKGNvbmZpZy0+cmVnaXN0ZXJfZGV2KSB7CisJCXVkY19kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBjb25maWc7CisJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdWRjX2RldmljZSk7CisJCWlmIChzdGF0dXMpCisJCQlwcl9kZWJ1ZygiY2FuJ3QgcmVnaXN0ZXIgVURDIGRldmljZSwgJWRcbiIsIHN0YXR1cyk7CisJCS8qIHVkYyBkcml2ZXIgZ2F0ZXMgNDhNSHogYnkgRCsgcHVsbHVwICovCisJfQorI2VuZGlmCisKKyNpZglkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCisJaWYgKGNvbmZpZy0+cmVnaXN0ZXJfaG9zdCkgeworCQlvaGNpX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9IGNvbmZpZzsKKwkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvaGNpX2RldmljZSk7CisJCWlmIChzdGF0dXMpCisJCQlwcl9kZWJ1ZygiY2FuJ3QgcmVnaXN0ZXIgT0hDSSBkZXZpY2UsICVkXG4iLCBzdGF0dXMpOworCQkvKiBoY2QgZXhwbGljaXRseSBnYXRlcyA0OE1IeiAqLworCX0KKyNlbmRpZgorfQorCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXBfMTUxMF91c2JfaW5pdChzdHJ1Y3Qgb21hcF91c2JfY29uZmlnICpjb25maWcpIHt9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX3VzYl9jb25maWcgcGxhdGZvcm1fZGF0YTsKKworc3RhdGljIGludCBfX2luaXQKK29tYXBfdXNiX2luaXQodm9pZCkKK3sKKwljb25zdCBzdHJ1Y3Qgb21hcF91c2JfY29uZmlnICpjb25maWc7CisKKwljb25maWcgPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfVVNCLCBzdHJ1Y3Qgb21hcF91c2JfY29uZmlnKTsKKwlpZiAoY29uZmlnID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVU0I6IE5vIGJvYXJkLXNwZWNpZmljICIKKwkJCQkicGxhdGZvcm0gY29uZmlnIGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXBsYXRmb3JtX2RhdGEgPSAqY29uZmlnOworCisJaWYgKGNwdV9pc19vbWFwNzMwKCkgfHwgY3B1X2lzX29tYXAxNnh4KCkpCisJCW9tYXBfb3RnX2luaXQoJnBsYXRmb3JtX2RhdGEpOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMTV4eCgpKQorCQlvbWFwXzE1MTBfdXNiX2luaXQoJnBsYXRmb3JtX2RhdGEpOworCWVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIlVTQjogTm8gaW5pdCBmb3IgeW91ciBjaGlwIHlldFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKG9tYXBfdXNiX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA1YTU1ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKQEAgLTAsMCArMSw3NyBAQAoraWYgQVJDSF9QWEEKKworbWVudSAiSW50ZWwgUFhBMnh4IEltcGxlbWVudGF0aW9ucyIKKworY2hvaWNlCisJcHJvbXB0ICJTZWxlY3QgdGFyZ2V0IGJvYXJkIgorCitjb25maWcgQVJDSF9MVUJCT0NLCisJYm9vbCAiSW50ZWwgREJQWEEyNTAgRGV2ZWxvcG1lbnQgUGxhdGZvcm0iCisJc2VsZWN0IFBYQTI1eAorCXNlbGVjdCBTQTExMTEKKworY29uZmlnIE1BQ0hfTUFJTlNUT05FCisJYm9vbCAiSW50ZWwgSENEREJCVkEwIERldmVsb3BtZW50IFBsYXRmb3JtIgorCXNlbGVjdCBQWEEyN3gKKwlzZWxlY3QgSVdNTVhUCisKK2NvbmZpZyBBUkNIX1BYQV9JRFAKKwlib29sICJBY2NlbGVudCBYc2NhbGUgSURQIgorCXNlbGVjdCBQWEEyNXgKKworY29uZmlnIFBYQV9TSEFSUFNMCisJYm9vbCAiU0hBUlAgU0wtNTYwMCBhbmQgU0wtQzd4eCBNb2RlbHMiCisJc2VsZWN0IFBYQTI1eAorCXNlbGVjdCBTSEFSUF9TQ09PUAorCXNlbGVjdCBTSEFSUF9QQVJBTQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYQorCSAgU2hhcnAgU0wtNTYwMCAoUG9vZGxlKSwgU2hhcnAgU0wtQzcwMCAoQ29yZ2kpLAorCSAgU0wtQzc1MCAoU2hlcGhlcmQpIG9yIGEgU2hhcnAgU0wtQzc2MCAoSHVza3kpCisJICBoYW5kaGVsZCBjb21wdXRlci4KKworZW5kY2hvaWNlCisKK2VuZG1lbnUKKworY29uZmlnIE1BQ0hfUE9PRExFCisJYm9vbCAiRW5hYmxlIFNoYXJwIFNMLTU2MDAgKFBvb2RsZSkgU3VwcG9ydCIKKwlkZXBlbmRzIFBYQV9TSEFSUFNMCisJc2VsZWN0IFNIQVJQX0xPQ09NTworCitjb25maWcgTUFDSF9DT1JHSQorCWJvb2wgIkVuYWJsZSBTaGFycCBTTC1DNzAwIChDb3JnaSkgU3VwcG9ydCIKKwlkZXBlbmRzIFBYQV9TSEFSUFNMCisJc2VsZWN0IFBYQV9TSEFSUF9DN3h4CisKK2NvbmZpZyBNQUNIX1NIRVBIRVJECisJYm9vbCAiRW5hYmxlIFNoYXJwIFNMLUM3NTAgKFNoZXBoZXJkKSBTdXBwb3J0IgorCWRlcGVuZHMgUFhBX1NIQVJQU0wKKwlzZWxlY3QgUFhBX1NIQVJQX0M3eHgKKworY29uZmlnIE1BQ0hfSFVTS1kKKwlib29sICJFbmFibGUgU2hhcnAgU0wtQzc2MCAoSHVza3kpIFN1cHBvcnQiCisJZGVwZW5kcyBQWEFfU0hBUlBTTAorCXNlbGVjdCBQWEFfU0hBUlBfQzd4eAorCitjb25maWcgUFhBMjV4CisJYm9vbAorCWhlbHAKKwkgIFNlbGVjdCBjb2RlIHNwZWNpZmljIHRvIFBYQTIxeC8yNXgvMjZ4IHZhcmlhbnRzCisKK2NvbmZpZyBQWEEyN3gKKwlib29sCisJaGVscAorCSAgU2VsZWN0IGNvZGUgc3BlY2lmaWMgdG8gUFhBMjd4IHZhcmlhbnRzCisKK2NvbmZpZyBJV01NWFQKKwlib29sCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIGlXTU1YdAorCitjb25maWcgUFhBX1NIQVJQX0M3eHgKKwlib29sCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIGFsbCBTaGFycCBDN3h4IG1vZGVscworCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGU2ZDI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKQEAgLTAsMCArMSwyNiBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMKKworIyBDb21tb24gc3VwcG9ydCAobXVzdCBiZSBsaW5rZWQgYmVmb3JlIGJvYXJkIHNwZWNpZmljIHN1cHBvcnQpCitvYmoteSArPSBnZW5lcmljLm8gaXJxLm8gZG1hLm8gdGltZS5vCitvYmotJChDT05GSUdfUFhBMjV4KSArPSBweGEyNXgubworb2JqLSQoQ09ORklHX1BYQTI3eCkgKz0gcHhhMjd4Lm8KKworIyBTcGVjaWZpYyBib2FyZCBzdXBwb3J0CitvYmotJChDT05GSUdfQVJDSF9MVUJCT0NLKSArPSBsdWJib2NrLm8KK29iai0kKENPTkZJR19NQUNIX01BSU5TVE9ORSkgKz0gbWFpbnN0b25lLm8KK29iai0kKENPTkZJR19BUkNIX1BYQV9JRFApICs9IGlkcC5vCitvYmotJChDT05GSUdfUFhBX1NIQVJQX0M3eHgpCSs9IGNvcmdpLm8gY29yZ2lfc3NwLm8gc3NwLm8KK29iai0kKENPTkZJR19NQUNIX1BPT0RMRSkJKz0gcG9vZGxlLm8KKworIyBTdXBwb3J0IGZvciBibGlua3kgbGlnaHRzCitsZWQteSA6PSBsZWRzLm8KK2xlZC0kKENPTkZJR19BUkNIX0xVQkJPQ0spICs9IGxlZHMtbHViYm9jay5vCitsZWQtJChDT05GSUdfTUFDSF9NQUlOU1RPTkUpICs9IGxlZHMtbWFpbnN0b25lLm8KK2xlZC0kKENPTkZJR19BUkNIX1BYQV9JRFApICs9IGxlZHMtaWRwLm8KKworb2JqLSQoQ09ORklHX0xFRFMpICs9ICQobGVkLXkpCisKKyMgTWlzYyBmZWF0dXJlcworb2JqLSQoQ09ORklHX1BNKSArPSBwbS5vIHNsZWVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYWQ2NzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsMiBAQAorICAgenJlbGFkZHIteQk6PSAweGEwMDA4MDAwCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OTFjZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCkBAIC0wLDAgKzEsMzIwIEBACisvKgorICogU3VwcG9ydCBmb3IgU2hhcnAgU0wtQzd4eCBQREFzCisgKiBNb2RlbHM6IFNMLUM3MDAgKENvcmdpKSwgU0wtQzc1MCAoU2hlcGhlcmQpLCBTTC1DNzYwIChIdXNreSkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBSaWNoYXJkIFB1cmRpZQorICoKKyAqIEJhc2VkIG9uIFNoYXJwJ3MgMi40IGtlcm5lbCBwYXRjaGVzL2x1YmJvY2suYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21tYy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3VkYy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2NvcmdpLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9zaGFycHNsX3BhcmFtLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3Njb29wLmg+CisjaW5jbHVkZSA8dmlkZW8vdzEwMGZiLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKworLyoKKyAqIENvcmdpIFNDT09QIERldmljZQorICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNvcmdpX3Njb29wX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CQk9IDB4MTA4MDAwMDAsCisJCS5lbmQJCT0gMHgxMDgwMGZmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNjb29wX2NvbmZpZyBjb3JnaV9zY29vcF9zZXR1cCA9IHsKKwkuaW9fZGlyIAk9IENPUkdJX1NDT09QX0lPX0RJUiwKKwkuaW9fb3V0CQk9IENPUkdJX1NDT09QX0lPX09VVCwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY29yZ2lzY29vcF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoYXJwLXNjb29wIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisgCQkucGxhdGZvcm1fZGF0YQk9ICZjb3JnaV9zY29vcF9zZXR1cCwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjb3JnaV9zY29vcF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGNvcmdpX3Njb29wX3Jlc291cmNlcywKK307CisKKworLyoKKyAqIENvcmdpIFNTUCBEZXZpY2UKKyAqCisgKiBTZXQgdGhlIHBhcmVudCBhcyB0aGUgc2Nvb3AgZGV2aWNlIGJlY2F1c2UgYSBsb3Qgb2YgU1NQIGRldmljZXMKKyAqIGFsc28gdXNlIHNjb29wIGZ1bmN0aW9ucyBhbmQgdGhpcyBtYWtlcyB0aGUgcG93ZXIgdXAvZG93biBvcmRlcgorICogd29yayBjb3JyZWN0bHkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNvcmdpc3NwX2RldmljZSA9IHsKKwkubmFtZQkJPSAiY29yZ2ktc3NwIiwKKwkuZGV2CQk9IHsKKyAJCS5wYXJlbnQgPSAmY29yZ2lzY29vcF9kZXZpY2UuZGV2LAorCX0sCisJLmlkCQk9IC0xLAorfTsKKworCisvKgorICogQ29yZ2kgdzEwMCBGcmFtZSBCdWZmZXIgRGV2aWNlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdzEwMGZiX21hY2hfaW5mbyBjb3JnaV9mYl9pbmZvID0geworCS53MTAwZmJfc3NwX3NlbmQgCT0gY29yZ2lfc3NwX2xjZHRnX3NlbmQsCisJLmNvbWFkaiAJCQk9IC0xLAorCS5waGFkYWRqIAkJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNvcmdpX2ZiX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CQk9IDB4MDgwMDAwMDAsCisJCS5lbmQJCT0gMHgwOGZmZmZmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjb3JnaWZiX2RldmljZSA9IHsKKwkubmFtZQkJPSAidzEwMGZiIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisgCQkucGxhdGZvcm1fZGF0YQk9ICZjb3JnaV9mYl9pbmZvLAorIAkJLnBhcmVudCA9ICZjb3JnaXNzcF9kZXZpY2UuZGV2LAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNvcmdpX2ZiX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gY29yZ2lfZmJfcmVzb3VyY2VzLAorfTsKKworCisvKgorICogQ29yZ2kgQmFja2xpZ2h0IERldmljZQorICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjb3JnaWJsX2RldmljZSA9IHsKKwkubmFtZQkJPSAiY29yZ2ktYmwiLAorCS5kZXYJCT0geworIAkJLnBhcmVudCA9ICZjb3JnaWZiX2RldmljZS5kZXYsCisJfSwKKwkuaWQJCT0gLTEsCit9OworCisKKy8qCisgKiBNTUMvU0QgRGV2aWNlCisgKgorICogVGhlIGNhcmQgZGV0ZWN0IGludGVycnVwdCBpc24ndCBkZWJvdW5jZWQgc28gd2UgZGVsYXkgaXQgYnkgSFovNAorICogdG8gZ2l2ZSB0aGUgY2FyZCBhIGNoYW5jZSB0byBmdWxseSBpbnNlcnQvZWplY3QuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbW1jX2RldGVjdCB7CisJc3RydWN0IHRpbWVyX2xpc3QgZGV0ZWN0X3RpbWVyOworCXZvaWQgKmRldmlkOworfSBtbWNfZGV0ZWN0OworCitzdGF0aWMgdm9pZCBtbWNfZGV0ZWN0X2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwltbWNfZGV0ZWN0X2NoYW5nZShtbWNfZGV0ZWN0LmRldmlkKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGNvcmdpX21tY19kZXRlY3RfaW50KGludCBpcnEsIHZvaWQgKmRldmlkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwltbWNfZGV0ZWN0LmRldmlkPWRldmlkOworCW1vZF90aW1lcigmbW1jX2RldGVjdC5kZXRlY3RfdGltZXIsIGppZmZpZXMgKyBIWi80KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgY29yZ2lfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFyZXR1cm5fdCAoKnVudXNlZF9kZXRlY3RfaW50KShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksIHZvaWQgKmRhdGEpCit7CisJaW50IGVycjsKKworCS8qIHNldHVwIEdQSU8gZm9yIFBYQTI1eCBNTUMgY29udHJvbGxlcgkqLworCXB4YV9ncGlvX21vZGUoR1BJTzZfTU1DQ0xLX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU84X01NQ0NTMF9NRCk7CisJcHhhX2dwaW9fbW9kZShDT1JHSV9HUElPX25TRF9ERVRFQ1QgfCBHUElPX0lOKTsKKwlweGFfZ3Bpb19tb2RlKENPUkdJX0dQSU9fU0RfUFdSIHwgR1BJT19PVVQpOworCisJaW5pdF90aW1lcigmbW1jX2RldGVjdC5kZXRlY3RfdGltZXIpOworCW1tY19kZXRlY3QuZGV0ZWN0X3RpbWVyLmZ1bmN0aW9uID0gbW1jX2RldGVjdF9jYWxsYmFjazsKKwltbWNfZGV0ZWN0LmRldGVjdF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpICZtbWNfZGV0ZWN0OworCisJZXJyID0gcmVxdWVzdF9pcnEoQ09SR0lfSVJRX0dQSU9fblNEX0RFVEVDVCwgY29yZ2lfbW1jX2RldGVjdF9pbnQsIFNBX0lOVEVSUlVQVCwKKwkJCSAgICAgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb3JnaV9tY2lfaW5pdDogTU1DL1NEOiBjYW4ndCByZXF1ZXN0IE1NQyBjYXJkIGRldGVjdCBJUlFcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJc2V0X2lycV90eXBlKENPUkdJX0lSUV9HUElPX25TRF9ERVRFQ1QsIElSUVRfQk9USEVER0UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNvcmdpX21jaV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCit7CisJc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhKiBwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoKCAxIDw8IHZkZCkgJiBwX2QtPm9jcl9tYXNrKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogb25cbiIsIF9fRlVOQ1RJT05fXyk7CisJCUdQU1IxID0gR1BJT19iaXQoQ09SR0lfR1BJT19TRF9QV1IpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogb2ZmXG4iLCBfX0ZVTkNUSU9OX18pOworCQlHUENSMSA9IEdQSU9fYml0KENPUkdJX0dQSU9fU0RfUFdSKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvcmdpX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlmcmVlX2lycShDT1JHSV9JUlFfR1BJT19uU0RfREVURUNULCBkYXRhKTsKKwlkZWxfdGltZXIoJm1tY19kZXRlY3QuZGV0ZWN0X3RpbWVyKTsKK30KKworc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjb3JnaV9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKKwkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmluaXQgCQk9IGNvcmdpX21jaV9pbml0LAorCS5zZXRwb3dlciAJPSBjb3JnaV9tY2lfc2V0cG93ZXIsCisJLmV4aXQJCT0gY29yZ2lfbWNpX2V4aXQsCit9OworCisKKy8qCisgKiBVU0IgRGV2aWNlIENvbnRyb2xsZXIKKyAqLworc3RhdGljIHZvaWQgY29yZ2lfdWRjX2NvbW1hbmQoaW50IGNtZCkKK3sKKwlzd2l0Y2goY21kKQl7CisJY2FzZSBQWEEyWFhfVURDX0NNRF9DT05ORUNUOgorCQlHUFNSKENPUkdJX0dQSU9fVVNCX1BVTExVUCkgPSBHUElPX2JpdChDT1JHSV9HUElPX1VTQl9QVUxMVVApOworCQlicmVhazsKKwljYXNlIFBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1Q6CisJCUdQQ1IoQ09SR0lfR1BJT19VU0JfUFVMTFVQKSA9IEdQSU9fYml0KENPUkdJX0dQSU9fVVNCX1BVTExVUCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbyB1ZGNfaW5mbyBfX2luaXRkYXRhID0geworCS8qIG5vIGNvbm5lY3QgR1BJTzsgY29yZ2kgY2FuJ3QgdGVsbCBjb25uZWN0aW9uIHN0YXR1cyAqLworCS51ZGNfY29tbWFuZAkJPSBjb3JnaV91ZGNfY29tbWFuZCwKK307CisKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjb3JnaXNjb29wX2RldmljZSwKKwkmY29yZ2lzc3BfZGV2aWNlLAorCSZjb3JnaWZiX2RldmljZSwKKwkmY29yZ2libF9kZXZpY2UsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY29yZ2lfaW5pdCh2b2lkKQoreworCWNvcmdpX2ZiX2luZm8uY29tYWRqPXNoYXJwc2xfcGFyYW0uY29tYWRqOworCWNvcmdpX2ZiX2luZm8ucGhhZGFkaj1zaGFycHNsX3BhcmFtLnBoYWRhZGo7CisKKwlweGFfZ3Bpb19tb2RlKENPUkdJX0dQSU9fVVNCX1BVTExVUCB8IEdQSU9fT1VUKTsKKyAJcHhhX3NldF91ZGNfaW5mbygmdWRjX2luZm8pOworCXB4YV9zZXRfbWNpX2luZm8oJmNvcmdpX21jaV9wbGF0Zm9ybV9kYXRhKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZml4dXBfY29yZ2koc3RydWN0IG1hY2hpbmVfZGVzYyAqZGVzYywKKwkJc3RydWN0IHRhZyAqdGFncywgY2hhciAqKmNtZGxpbmUsIHN0cnVjdCBtZW1pbmZvICptaSkKK3sKKwlzaGFycHNsX3NhdmVfcGFyYW0oKTsKKwltaS0+bnJfYmFua3M9MTsKKwltaS0+YmFua1swXS5zdGFydCA9IDB4YTAwMDAwMDA7CisJbWktPmJhbmtbMF0ubm9kZSA9IDA7CisJaWYgKG1hY2hpbmVfaXNfY29yZ2koKSkKKwkJbWktPmJhbmtbMF0uc2l6ZSA9ICgzMioxMDI0KjEwMjQpOworCWVsc2UKKwkJbWktPmJhbmtbMF0uc2l6ZSA9ICg2NCoxMDI0KjEwMjQpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgY29yZ2lfaW5pdF9pcnEodm9pZCkKK3sKKwlweGFfaW5pdF9pcnEoKTsKK30KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBjb3JnaV9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKy8qICAgIHZpcnR1YWwgICAgIHBoeXNpY2FsICAgIGxlbmd0aCAgICAgICovCisvKgl7IDB4ZjEwMDAwMDAsIDB4MDgwMDAwMDAsIDB4MDEwMDAwMDAsIE1UX0RFVklDRSB9LCovIC8qIExDREMgKHJlYWRhYmxlIGZvciBRdCBkcml2ZXIpICovCisvKgl7IDB4ZWY3MDAwMDAsIDB4MTA4MDAwMDAsIDB4MDAwMDEwMDAsIE1UX0RFVklDRSB9LCovICAvKiBTQ09PUCAqLworCXsgMHhlZjgwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgTVRfREVWSUNFIH0sIC8qIEJvb3QgRmxhc2ggKi8KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjb3JnaV9tYXBfaW8odm9pZCkKK3sKKwlweGFfbWFwX2lvKCk7CisJaW90YWJsZV9pbml0KGNvcmdpX2lvX2Rlc2MsQVJSQVlfU0laRShjb3JnaV9pb19kZXNjKSk7CisKKwkvKiBzZXR1cCBzbGVlcCBtb2RlIHZhbHVlcyAqLworCVBXRVIgID0gMHgwMDAwMDAwMjsKKwlQRkVSICA9IDB4MDAwMDAwMDA7CisJUFJFUiAgPSAweDAwMDAwMDAyOworCVBHU1IwID0gMHgwMTU4QzAwMDsKKwlQR1NSMSA9IDB4MDBGRjAwODA7CisJUEdTUjIgPSAweDAwMDFDMDA0OworCS8qIFN0b3AgMy42TUh6IGFuZCBkcml2ZSBISUdIIHRvIFBDTUNJQSBhbmQgQ1MgKi8KKwlQQ0ZSIHw9IFBDRlJfT1BERTsKK30KKworI2lmZGVmIENPTkZJR19NQUNIX0NPUkdJCitNQUNISU5FX1NUQVJUKENPUkdJLCAiU0hBUlAgQ29yZ2kiKQorCUJPT1RfTUVNKDB4YTAwMDAwMDAsIDB4NDAwMDAwMDAsIGlvX3AydigweDQwMDAwMDAwKSkKKwlGSVhVUChmaXh1cF9jb3JnaSkKKwlNQVBJTyhjb3JnaV9tYXBfaW8pCisJSU5JVElSUShjb3JnaV9pbml0X2lycSkKKwkuaW5pdF9tYWNoaW5lID0gY29yZ2lfaW5pdCwKKwkudGltZXIgPSAmcHhhX3RpbWVyLAorTUFDSElORV9FTkQKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfU0hFUEhFUkQKK01BQ0hJTkVfU1RBUlQoU0hFUEhFUkQsICJTSEFSUCBTaGVwaGVyZCIpCisJQk9PVF9NRU0oMHhhMDAwMDAwMCwgMHg0MDAwMDAwMCwgaW9fcDJ2KDB4NDAwMDAwMDApKQorCUZJWFVQKGZpeHVwX2NvcmdpKQorCU1BUElPKGNvcmdpX21hcF9pbykKKwlJTklUSVJRKGNvcmdpX2luaXRfaXJxKQorCS5pbml0X21hY2hpbmUgPSBjb3JnaV9pbml0LAorCS50aW1lciA9ICZweGFfdGltZXIsCitNQUNISU5FX0VORAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9IVVNLWQorTUFDSElORV9TVEFSVChIVVNLWSwgIlNIQVJQIEh1c2t5IikKKwlCT09UX01FTSgweGEwMDAwMDAwLCAweDQwMDAwMDAwLCBpb19wMnYoMHg0MDAwMDAwMCkpCisJRklYVVAoZml4dXBfY29yZ2kpCisJTUFQSU8oY29yZ2lfbWFwX2lvKQorCUlOSVRJUlEoY29yZ2lfaW5pdF9pcnEpCisJLmluaXRfbWFjaGluZSA9IGNvcmdpX2luaXQsCisJLnRpbWVyID0gJnB4YV90aW1lciwKK01BQ0hJTkVfRU5ECisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfc3NwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2NmZmJhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfc3NwLmMKQEAgLTAsMCArMSwyNDggQEAKKy8qCisgKiAgU1NQIGNvbnRyb2wgY29kZSBmb3IgU2hhcnAgQ29yZ2kgZGV2aWNlcworICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDQgUmljaGFyZCBQdXJkaWUKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9zc3AuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jb3JnaS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisKK3N0YXRpYyBzcGlubG9ja190IGNvcmdpX3NzcF9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworc3RhdGljIHN0cnVjdCBzc3BfZGV2IGNvcmdpX3NzcF9kZXY7CitzdGF0aWMgc3RydWN0IHNzcF9zdGF0ZSBjb3JnaV9zc3Bfc3RhdGU7CisKKy8qCisgKiBUaGVyZSBhcmUgdGhyZWUgZGV2aWNlcyBjb25uZWN0ZWQgdG8gdGhlIFNTUCBpbnRlcmZhY2U6CisgKiAgIDEuIEEgdG91Y2hzY3JlZW4gY29udHJvbGxlciAoVEkgQURTNzg0NiBjb21wYXRpYmxlKQorICogICAyLiBBbiBMQ0QgY29udG9sbGVyICh3aXRoIHNvbWUgQmFja2xpZ2h0IGZ1bmN0aW9uYWxpdHkpCisgKiAgIDMuIEEgYmF0dGVyeSBtb2luaXRvcmluZyBJQyAoTWF4aW0gTUFYMTExMSkKKyAqCisgKiBFYWNoIGRldmljZSB1c2VzIGEgZGlmZmVyZW50IHNwZWVkL21vZGUgb2YgY29tbXVuaWNhdGlvbi4KKyAqCisgKiBUaGUgdG91Y2hzY3JlZW4gaXMgdmVyeSBzZW5zaXRpdmUgYW5kIHRoZSBtb3N0IGZyZXF1ZW50bHkgdXNlZAorICogc28gdGhlIHBvcnQgaXMgbGVmdCBjb25maWd1cmVkIGZvciB0aGlzLgorICoKKyAqIERldmljZXMgYXJlIHNlbGVjdGVkIHVzaW5nIENoaXAgU2VsZWN0cyBvbiBHUElPcy4KKyAqLworCisvKgorICogIEFEUzc4NDYgUm91dGluZXMKKyAqLwordW5zaWduZWQgbG9uZyBjb3JnaV9zc3BfYWRzNzg0Nl9wdXRnZXQodWxvbmcgZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIHJldCxmbGFnOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvcmdpX3NzcF9sb2NrLCBmbGFnKTsKKwlHUENSMCA9IEdQSU9fYml0KENPUkdJX0dQSU9fQURTNzg0Nl9DUyk7CisKKwlzc3Bfd3JpdGVfd29yZCgmY29yZ2lfc3NwX2RldixkYXRhKTsKKwlyZXQgPSBzc3BfcmVhZF93b3JkKCZjb3JnaV9zc3BfZGV2KTsKKworCUdQU1IwID0gR1BJT19iaXQoQ09SR0lfR1BJT19BRFM3ODQ2X0NTKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JnaV9zc3BfbG9jaywgZmxhZyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogTk9URTogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0CisgKiBhbmQgdXNlIHRoZSBfbG9jayBhbmQgX3VubG9jayBmdW5jdGlvbnMuIFRoZXkgYXJlIHZlcnkgdGltZSBzZW5zaXRpdmUuCisgKi8KK3ZvaWQgY29yZ2lfc3NwX2Fkczc4NDZfbG9jayh2b2lkKQoreworCXNwaW5fbG9jaygmY29yZ2lfc3NwX2xvY2spOworCUdQQ1IwID0gR1BJT19iaXQoQ09SR0lfR1BJT19BRFM3ODQ2X0NTKTsKK30KKwordm9pZCBjb3JnaV9zc3BfYWRzNzg0Nl91bmxvY2sodm9pZCkKK3sKKwlHUFNSMCA9IEdQSU9fYml0KENPUkdJX0dQSU9fQURTNzg0Nl9DUyk7CisJc3Bpbl91bmxvY2soJmNvcmdpX3NzcF9sb2NrKTsKK30KKwordm9pZCBjb3JnaV9zc3BfYWRzNzg0Nl9wdXQodWxvbmcgZGF0YSkKK3sKKwlzc3Bfd3JpdGVfd29yZCgmY29yZ2lfc3NwX2RldixkYXRhKTsKK30KKwordW5zaWduZWQgbG9uZyBjb3JnaV9zc3BfYWRzNzg0Nl9nZXQodm9pZCkKK3sKKwlyZXR1cm4gc3NwX3JlYWRfd29yZCgmY29yZ2lfc3NwX2Rldik7Cit9CisKK0VYUE9SVF9TWU1CT0woY29yZ2lfc3NwX2Fkczc4NDZfcHV0Z2V0KTsKK0VYUE9SVF9TWU1CT0woY29yZ2lfc3NwX2Fkczc4NDZfbG9jayk7CitFWFBPUlRfU1lNQk9MKGNvcmdpX3NzcF9hZHM3ODQ2X3VubG9jayk7CitFWFBPUlRfU1lNQk9MKGNvcmdpX3NzcF9hZHM3ODQ2X3B1dCk7CitFWFBPUlRfU1lNQk9MKGNvcmdpX3NzcF9hZHM3ODQ2X2dldCk7CisKKworLyoKKyAqICBMQ0QvQmFja2xpZ2h0IFJvdXRpbmVzCisgKi8KK3Vuc2lnbmVkIGxvbmcgY29yZ2lfc3NwX2RhY19wdXQodWxvbmcgZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWc7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29yZ2lfc3NwX2xvY2ssIGZsYWcpOworCUdQQ1IwID0gR1BJT19iaXQoQ09SR0lfR1BJT19MQ0RDT05fQ1MpOworCisJc3NwX2Rpc2FibGUoJmNvcmdpX3NzcF9kZXYpOworCXNzcF9jb25maWcoJmNvcmdpX3NzcF9kZXYsIChTU0NSMF9Nb3Rvcm9sYSB8IChTU0NSMF9EU1MgJiAweDA3ICkpLCBTU0NSMV9TUEgsIDAsIFNTQ1IwX1NlckNsa0Rpdig3NikpOworCXNzcF9lbmFibGUoJmNvcmdpX3NzcF9kZXYpOworCisJc3NwX3dyaXRlX3dvcmQoJmNvcmdpX3NzcF9kZXYsZGF0YSk7CisJLyogUmVhZCBudWxsIGRhdGEgYmFjayBmcm9tIGRldmljZSB0byBwcmV2ZW50IFNTUCBvdmVyZmxvdyAqLworCXNzcF9yZWFkX3dvcmQoJmNvcmdpX3NzcF9kZXYpOworCisJc3NwX2Rpc2FibGUoJmNvcmdpX3NzcF9kZXYpOworCXNzcF9jb25maWcoJmNvcmdpX3NzcF9kZXYsIChTU0NSMF9OYXRpb25hbCB8IChTU0NSMF9EU1MgJiAweDBiICkpLCAwLCAwLCBTU0NSMF9TZXJDbGtEaXYoMikpOworCXNzcF9lbmFibGUoJmNvcmdpX3NzcF9kZXYpOworCUdQU1IwID0gR1BJT19iaXQoQ09SR0lfR1BJT19MQ0RDT05fQ1MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvcmdpX3NzcF9sb2NrLCBmbGFnKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGNvcmdpX3NzcF9sY2R0Z19zZW5kKHU4IGFkcnMsIHU4IGRhdGEpCit7CisJY29yZ2lfc3NwX2RhY19wdXQoKChhZHJzICYgMHgwNykgPDwgNSkgfCAoZGF0YSAmIDB4MWYpKTsKK30KKwordm9pZCBjb3JnaV9zc3BfYmxkdXR5X3NldChpbnQgZHV0eSkKK3sKKwljb3JnaV9zc3BfbGNkdGdfc2VuZCgweDAyLGR1dHkpOworfQorCitFWFBPUlRfU1lNQk9MKGNvcmdpX3NzcF9sY2R0Z19zZW5kKTsKK0VYUE9SVF9TWU1CT0woY29yZ2lfc3NwX2JsZHV0eV9zZXQpOworCisvKgorICogIE1heDExMTEgUm91dGluZXMKKyAqLworaW50IGNvcmdpX3NzcF9tYXgxMTExX2dldCh1bG9uZyBkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKwlpbnQgdm9sdGFnZSx2b2x0YWdlMSx2b2x0YWdlMjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjb3JnaV9zc3BfbG9jaywgZmxhZyk7CisJR1BDUjAgPSBHUElPX2JpdChDT1JHSV9HUElPX01BWDExMTFfQ1MpOworCXNzcF9kaXNhYmxlKCZjb3JnaV9zc3BfZGV2KTsKKwlzc3BfY29uZmlnKCZjb3JnaV9zc3BfZGV2LCAoU1NDUjBfTW90b3JvbGEgfCAoU1NDUjBfRFNTICYgMHgwNyApKSwgMCwgMCwgU1NDUjBfU2VyQ2xrRGl2KDgpKTsKKwlzc3BfZW5hYmxlKCZjb3JnaV9zc3BfZGV2KTsKKworCXVkZWxheSgxKTsKKworCS8qIFRCMS9SQjEgKi8KKwlzc3Bfd3JpdGVfd29yZCgmY29yZ2lfc3NwX2RldixkYXRhKTsKKwlzc3BfcmVhZF93b3JkKCZjb3JnaV9zc3BfZGV2KTsgLyogbnVsbCByZWFkICovCisKKwkvKiBUQjEyL1JCMiAqLworCXNzcF93cml0ZV93b3JkKCZjb3JnaV9zc3BfZGV2LDApOworCXZvbHRhZ2UxPXNzcF9yZWFkX3dvcmQoJmNvcmdpX3NzcF9kZXYpOworCisJLyogVEIxMy9SQjMqLworCXNzcF93cml0ZV93b3JkKCZjb3JnaV9zc3BfZGV2LDApOworCXZvbHRhZ2UyPXNzcF9yZWFkX3dvcmQoJmNvcmdpX3NzcF9kZXYpOworCisJc3NwX2Rpc2FibGUoJmNvcmdpX3NzcF9kZXYpOworCXNzcF9jb25maWcoJmNvcmdpX3NzcF9kZXYsIChTU0NSMF9OYXRpb25hbCB8IChTU0NSMF9EU1MgJiAweDBiICkpLCAwLCAwLCBTU0NSMF9TZXJDbGtEaXYoMikpOworCXNzcF9lbmFibGUoJmNvcmdpX3NzcF9kZXYpOworCUdQU1IwID0gR1BJT19iaXQoQ09SR0lfR1BJT19NQVgxMTExX0NTKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JnaV9zc3BfbG9jaywgZmxhZyk7CisKKwlpZiAodm9sdGFnZTEgJiAweGMwIHx8IHZvbHRhZ2UyICYgMHgzZikKKwkJdm9sdGFnZSA9IC0xOworCWVsc2UKKwkJdm9sdGFnZSA9ICgodm9sdGFnZTEgPDwgMikgJiAweGZjKSB8ICgodm9sdGFnZTIgPj4gNikgJiAweDAzKTsKKworCXJldHVybiB2b2x0YWdlOworfQorCitFWFBPUlRfU1lNQk9MKGNvcmdpX3NzcF9tYXgxMTExX2dldCk7CisKKy8qCisgKiAgU3VwcG9ydCBSb3V0aW5lcworICovCitpbnQgX19pbml0IGNvcmdpX3NzcF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCS8qIENoaXAgU2VsZWN0IC0gRGlzYWJsZSBBbGwgKi8KKwlHUERSMCB8PSBHUElPX2JpdChDT1JHSV9HUElPX0xDRENPTl9DUyk7IC8qIG91dHB1dCAqLworCUdQU1IwID0gR1BJT19iaXQoQ09SR0lfR1BJT19MQ0RDT05fQ1MpOyAgLyogSGlnaCAtIERpc2FibGUgTENEIENvbnRyb2wvVGltaW5nIEdlbiAqLworCUdQRFIwIHw9IEdQSU9fYml0KENPUkdJX0dQSU9fTUFYMTExMV9DUyk7IC8qIG91dHB1dCAqLworCUdQU1IwID0gR1BJT19iaXQoQ09SR0lfR1BJT19NQVgxMTExX0NTKTsgIC8qIEhpZ2ggLSBEaXNhYmxlIE1BWDExMTEqLworCUdQRFIwIHw9IEdQSU9fYml0KENPUkdJX0dQSU9fQURTNzg0Nl9DUyk7ICAvKiBvdXRwdXQgKi8KKwlHUFNSMCA9IEdQSU9fYml0KENPUkdJX0dQSU9fQURTNzg0Nl9DUyk7ICAgLyogSGlnaCAtIERpc2FibGUgQURTNzg0NiovCisKKwlyZXQ9c3NwX2luaXQoJmNvcmdpX3NzcF9kZXYsMSk7CisKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBTU1AgaGFuZGxlciFcbiIpOworCWVsc2UgeworCQlzc3BfZGlzYWJsZSgmY29yZ2lfc3NwX2Rldik7CisJCXNzcF9jb25maWcoJmNvcmdpX3NzcF9kZXYsIChTU0NSMF9OYXRpb25hbCB8IChTU0NSMF9EU1MgJiAweDBiICkpLCAwLCAwLCBTU0NSMF9TZXJDbGtEaXYoMikpOworCQlzc3BfZW5hYmxlKCZjb3JnaV9zc3BfZGV2KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNvcmdpX3NzcF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXNzcF9leGl0KCZjb3JnaV9zc3BfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb3JnaV9zc3Bfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSwgdTMyIGxldmVsKQoreworCWlmIChsZXZlbCA9PSBTVVNQRU5EX1BPV0VSX0RPV04pIHsKKwkJc3NwX2ZsdXNoKCZjb3JnaV9zc3BfZGV2KTsKKwkJc3NwX3NhdmVfc3RhdGUoJmNvcmdpX3NzcF9kZXYsJmNvcmdpX3NzcF9zdGF0ZSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvcmdpX3NzcF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgbGV2ZWwpCit7CisJaWYgKGxldmVsID09IFJFU1VNRV9QT1dFUl9PTikgeworCQlHUFNSMCA9IEdQSU9fYml0KENPUkdJX0dQSU9fTENEQ09OX0NTKTsgIC8qIEhpZ2ggLSBEaXNhYmxlIExDRCBDb250cm9sL1RpbWluZyBHZW4gKi8KKwkJR1BTUjAgPSBHUElPX2JpdChDT1JHSV9HUElPX01BWDExMTFfQ1MpOyAvKiBIaWdoIC0gRGlzYWJsZSBNQVgxMTExKi8KKwkJR1BTUjAgPSBHUElPX2JpdChDT1JHSV9HUElPX0FEUzc4NDZfQ1MpOyAvKiBIaWdoIC0gRGlzYWJsZSBBRFM3ODQ2Ki8KKwkJc3NwX3Jlc3RvcmVfc3RhdGUoJmNvcmdpX3NzcF9kZXYsJmNvcmdpX3NzcF9zdGF0ZSk7CisJCXNzcF9lbmFibGUoJmNvcmdpX3NzcF9kZXYpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGNvcmdpc3NwX2RyaXZlciA9IHsKKwkubmFtZQkJPSAiY29yZ2ktc3NwIiwKKwkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUJCT0gY29yZ2lfc3NwX3Byb2JlLAorCS5yZW1vdmUJCT0gY29yZ2lfc3NwX3JlbW92ZSwKKwkuc3VzcGVuZAk9IGNvcmdpX3NzcF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gY29yZ2lfc3NwX3Jlc3VtZSwKK307CisKK2ludCBfX2luaXQgY29yZ2lfc3NwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZjb3JnaXNzcF9kcml2ZXIpOworfQorCithcmNoX2luaXRjYWxsKGNvcmdpX3NzcF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4MTEyYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2RtYS5jCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL2RtYS5jCisgKgorICogIFBYQSBETUEgcmVnaXN0cmF0aW9uIGFuZCBJUlEgZGlzcGF0Y2hpbmcKKyAqCisgKiAgQXV0aG9yOglOaWNvbGFzIFBpdHJlCisgKiAgQ3JlYXRlZDoJTm92IDE1LCAyMDAxCisgKiAgQ29weXJpZ2h0OglNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKworc3RhdGljIHN0cnVjdCBkbWFfY2hhbm5lbCB7CisJY2hhciAqbmFtZTsKKwl2b2lkICgqaXJxX2hhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKwl2b2lkICpkYXRhOworfSBkbWFfY2hhbm5lbHNbUFhBX0RNQV9DSEFOTkVMU107CisKKworaW50IHB4YV9yZXF1ZXN0X2RtYSAoY2hhciAqbmFtZSwgcHhhX2RtYV9wcmlvIHByaW8sCisJCQkgdm9pZCAoKmlycV9oYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisJCSAJIHZvaWQgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaSwgZm91bmQgPSAwOworCisJLyogYmFzaWMgc2FuaXR5IGNoZWNrcyAqLworCWlmICghbmFtZSB8fCAhaXJxX2hhbmRsZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJLyogdHJ5IGdyYWJiaW5nIGEgRE1BIGNoYW5uZWwgd2l0aCB0aGUgcmVxdWVzdGVkIHByaW9yaXR5ICovCisJZm9yIChpID0gcHJpbzsgaSA8IHByaW8gKyBQWEFfRE1BX05CQ0gocHJpbyk7IGkrKykgeworCQlpZiAoIWRtYV9jaGFubmVsc1tpXS5uYW1lKSB7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghZm91bmQpIHsKKwkJLyogcmVxdWVzdGVkIHByaW8gZ3JvdXAgaXMgZnVsbCwgdHJ5IGhpZXIgcHJpb3JpdGllcyAqLworCQlmb3IgKGkgPSBwcmlvLTE7IGkgPj0gMDsgaS0tKSB7CisJCQlpZiAoIWRtYV9jaGFubmVsc1tpXS5uYW1lKSB7CisJCQkJZm91bmQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKGZvdW5kKSB7CisJCURDU1IoaSkgPSBEQ1NSX1NUQVJUSU5UUnxEQ1NSX0VORElOVFJ8RENTUl9CVVNFUlI7CisJCWRtYV9jaGFubmVsc1tpXS5uYW1lID0gbmFtZTsKKwkJZG1hX2NoYW5uZWxzW2ldLmlycV9oYW5kbGVyID0gaXJxX2hhbmRsZXI7CisJCWRtYV9jaGFubmVsc1tpXS5kYXRhID0gZGF0YTsKKwl9IGVsc2UgeworCQlwcmludGsgKEtFUk5fV0FSTklORyAiTm8gbW9yZSBhdmFpbGFibGUgRE1BIGNoYW5uZWxzIGZvciAlc1xuIiwgbmFtZSk7CisJCWkgPSAtRU5PREVWOworCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gaTsKK30KKwordm9pZCBweGFfZnJlZV9kbWEgKGludCBkbWFfY2gpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghZG1hX2NoYW5uZWxzW2RtYV9jaF0ubmFtZSkgeworCQlwcmludGsgKEtFUk5fQ1JJVAorCQkJIiVzOiB0cnlpbmcgdG8gZnJlZSBjaGFubmVsICVkIHdoaWNoIGlzIGFscmVhZHkgZnJlZWRcbiIsCisJCQlfX0ZVTkNUSU9OX18sIGRtYV9jaCk7CisJCXJldHVybjsKKwl9CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJRENTUihkbWFfY2gpID0gRENTUl9TVEFSVElOVFJ8RENTUl9FTkRJTlRSfERDU1JfQlVTRVJSOworCWRtYV9jaGFubmVsc1tkbWFfY2hdLm5hbWUgPSBOVUxMOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGRtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBpLCBkaW50ID0gRElOVDsKKworCWZvciAoaSA9IDA7IGkgPCBQWEFfRE1BX0NIQU5ORUxTOyBpKyspIHsKKwkJaWYgKGRpbnQgJiAoMSA8PCBpKSkgeworCQkJc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsID0gJmRtYV9jaGFubmVsc1tpXTsKKwkJCWlmIChjaGFubmVsLT5uYW1lICYmIGNoYW5uZWwtPmlycV9oYW5kbGVyKSB7CisJCQkJY2hhbm5lbC0+aXJxX2hhbmRsZXIoaSwgY2hhbm5lbC0+ZGF0YSwgcmVncyk7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogSVJRIGZvciBhbiB1bnJlZ2lzdGVyZWQgRE1BIGNoYW5uZWw6CisJCQkJICogbGV0J3MgY2xlYXIgdGhlIGludGVycnVwdHMgYW5kIGRpc2FibGUgaXQuCisJCQkJICovCisJCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgInNwdXJpb3VzIElSUSBmb3IgRE1BIGNoYW5uZWwgJWRcbiIsIGkpOworCQkJCURDU1IoaSkgPSBEQ1NSX1NUQVJUSU5UUnxEQ1NSX0VORElOVFJ8RENTUl9CVVNFUlI7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9faW5pdCBweGFfZG1hX2luaXQgKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHJlcXVlc3RfaXJxIChJUlFfRE1BLCBkbWFfaXJxX2hhbmRsZXIsIDAsICJETUEiLCBOVUxMKTsKKwlpZiAocmV0KQorCQlwcmludGsgKEtFUk5fQ1JJVCAiV293ISAgQ2FuJ3QgcmVnaXN0ZXIgSVJRIGZvciBETUFcbiIpOworCXJldHVybiByZXQ7Cit9CisKK2FyY2hfaW5pdGNhbGwocHhhX2RtYV9pbml0KTsKKworRVhQT1JUX1NZTUJPTChweGFfcmVxdWVzdF9kbWEpOworRVhQT1JUX1NZTUJPTChweGFfZnJlZV9kbWEpOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1NzViOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuYwpAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmMKKyAqCisgKiAgQXV0aG9yOglOaWNvbGFzIFBpdHJlCisgKiAgQ3JlYXRlZDoJSnVuIDE1LCAyMDAxCisgKiAgQ29weXJpZ2h0OglNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiBDb2RlIGNvbW1vbiB0byBhbGwgUFhBIG1hY2hpbmVzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogU2luY2UgdGhpcyBmaWxlIHNob3VsZCBiZSBsaW5rZWQgYmVmb3JlIGFueSBvdGhlciBtYWNoaW5lIHNwZWNpZmljIGZpbGUsCisgKiB0aGUgX19pbml0Y2FsbCgpIGhlcmUgd2lsbCBiZSBleGVjdXRlZCBmaXJzdC4gIFRoaXMgc2VydmVzIGFzIGRlZmF1bHQKKyAqIGluaXRpYWxpemF0aW9uIHN0dWZmIGZvciBQWEEgbWFjaGluZXMgd2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gbGF0ZXIgaWYKKyAqIG5lZWQgYmUuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC91ZGMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGFmYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21tYy5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisvKgorICogSGFuZHkgZnVuY3Rpb24gdG8gc2V0IEdQSU8gYWx0ZXJuYXRlIGZ1bmN0aW9ucworICovCisKK3ZvaWQgcHhhX2dwaW9fbW9kZShpbnQgZ3Bpb19tb2RlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGdwaW8gPSBncGlvX21vZGUgJiBHUElPX01EX01BU0tfTlI7CisJaW50IGZuID0gKGdwaW9fbW9kZSAmIEdQSU9fTURfTUFTS19GTikgPj4gODsKKwlpbnQgZ2FmcjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlpZiAoZ3Bpb19tb2RlICYgR1BJT19ERkxUX0xPVykKKwkJR1BDUihncGlvKSA9IEdQSU9fYml0KGdwaW8pOworCWVsc2UgaWYgKGdwaW9fbW9kZSAmIEdQSU9fREZMVF9ISUdIKQorCQlHUFNSKGdwaW8pID0gR1BJT19iaXQoZ3Bpbyk7CisJaWYgKGdwaW9fbW9kZSAmIEdQSU9fTURfTUFTS19ESVIpCisJCUdQRFIoZ3BpbykgfD0gR1BJT19iaXQoZ3Bpbyk7CisJZWxzZQorCQlHUERSKGdwaW8pICY9IH5HUElPX2JpdChncGlvKTsKKwlnYWZyID0gR0FGUihncGlvKSAmIH4oMHgzIDw8ICgoKGdwaW8pICYgMHhmKSoyKSk7CisJR0FGUihncGlvKSA9IGdhZnIgfCAgKGZuICA8PCAoKChncGlvKSAmIDB4ZikqMikpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworRVhQT1JUX1NZTUJPTChweGFfZ3Bpb19tb2RlKTsKKworLyoKKyAqIFJvdXRpbmUgdG8gc2FmZWx5IGVuYWJsZSBvciBkaXNhYmxlIGEgY2xvY2sgaW4gdGhlIENLRU4KKyAqLwordm9pZCBweGFfc2V0X2NrZW4oaW50IGNsb2NrLCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJaWYgKGVuYWJsZSkKKwkJQ0tFTiB8PSBjbG9jazsKKwllbHNlCisJCUNLRU4gJj0gfmNsb2NrOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitFWFBPUlRfU1lNQk9MKHB4YV9zZXRfY2tlbik7CisKKy8qCisgKiBJbnRlbCBQWEEyeHggaW50ZXJuYWwgcmVnaXN0ZXIgbWFwcGluZy4KKyAqCisgKiBOb3RlIDE6IG5vdCBhbGwgUFhBMnh4IHZhcmlhbnRzIGltcGxlbWVudCBhbGwgdGhvc2UgYWRkcmVzc2VzLgorICoKKyAqIE5vdGUgMjogdmlydHVhbCAweGZmZmUwMDAwLTB4ZmZmZmZmZmYgaXMgcmVzZXJ2ZWQgZm9yIHRoZSB2ZWN0b3IgdGFibGUKKyAqICAgICAgICAgYW5kIGNhY2hlIGZsdXNoIGFyZWEuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgc3RhbmRhcmRfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisgLyogdmlydHVhbCAgICAgcGh5c2ljYWwgICAgbGVuZ3RoICAgICAgdHlwZSAqLworICB7IDB4ZjIwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MDIwMDAwMDAsIE1UX0RFVklDRSB9LCAvKiBEZXZzICovCisgIHsgMHhmNDAwMDAwMCwgMHg0NDAwMDAwMCwgMHgwMDEwMDAwMCwgTVRfREVWSUNFIH0sIC8qIExDRCAqLworICB7IDB4ZjYwMDAwMDAsIDB4NDgwMDAwMDAsIDB4MDAxMDAwMDAsIE1UX0RFVklDRSB9LCAvKiBNZW0gQ3RsICovCisgIHsgMHhmODAwMDAwMCwgMHg0YzAwMDAwMCwgMHgwMDEwMDAwMCwgTVRfREVWSUNFIH0sIC8qIFVTQiBob3N0ICovCisgIHsgMHhmYTAwMDAwMCwgMHg1MDAwMDAwMCwgMHgwMDEwMDAwMCwgTVRfREVWSUNFIH0sIC8qIENhbWVyYSAqLworICB7IDB4ZmUwMDAwMDAsIDB4NTgwMDAwMDAsIDB4MDAxMDAwMDAsIE1UX0RFVklDRSB9LCAvKiBJTWVtIGN0bCAqLworICB7IDB4ZmYwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAxMDAwMDAsIE1UX0RFVklDRSB9ICAvKiBVTkNBQ0hFRF9QSFlTXzAgKi8KK307CisKK3ZvaWQgX19pbml0IHB4YV9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQoc3RhbmRhcmRfaW9fZGVzYywgQVJSQVlfU0laRShzdGFuZGFyZF9pb19kZXNjKSk7CisJZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KDEpOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcHhhbWNpX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHg0MTEwMDAwMCwKKwkJLmVuZAk9IDB4NDExMDBmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfTU1DLAorCQkuZW5kCT0gSVJRX01NQywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyB1NjQgcHhhbWNpX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YW1jaV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInB4YTJ4eC1tY2kiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLmRtYV9tYXNrID0gJnB4YW1jaV9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHB4YW1jaV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHB4YW1jaV9yZXNvdXJjZXMsCit9OworCit2b2lkIF9faW5pdCBweGFfc2V0X21jaV9pbmZvKHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSAqaW5mbykKK3sKKwlweGFtY2lfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gaW5mbzsKK30KKworCitzdGF0aWMgc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvIHB4YV91ZGNfaW5mbzsKKwordm9pZCBfX2luaXQgcHhhX3NldF91ZGNfaW5mbyhzdHJ1Y3QgcHhhMnh4X3VkY19tYWNoX2luZm8gKmluZm8pCit7CisJbWVtY3B5KCZweGFfdWRjX2luZm8sIGluZm8sIHNpemVvZiAqaW5mbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcHhhMnh4X3VkY19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4NDA2MDAwMDAsCisJCS5lbmQJPSAweDQwNjBmZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1VTQiwKKwkJLmVuZAk9IElSUV9VU0IsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgdTY0IHVkY19kbWFfbWFzayA9IH4odTMyKTA7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHVkY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gInB4YTJ4eC11ZGMiLAorCS5pZAkJPSAtMSwKKwkucmVzb3VyY2UJPSBweGEyeHhfdWRjX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocHhhMnh4X3VkY19yZXNvdXJjZXMpLAorCS5kZXYJCT0gIHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmcHhhX3VkY19pbmZvLAorCQkuZG1hX21hc2sJPSAmdWRjX2RtYV9tYXNrLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIHB4YV9mYl9pbmZvOworCit2b2lkIF9faW5pdCBzZXRfcHhhX2ZiX2luZm8oc3RydWN0IHB4YWZiX21hY2hfaW5mbyAqaGFyZF9weGFfZmJfaW5mbykKK3sKKwltZW1jcHkoJnB4YV9mYl9pbmZvLGhhcmRfcHhhX2ZiX2luZm8sc2l6ZW9mKHN0cnVjdCBweGFmYl9tYWNoX2luZm8pKTsKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBweGFmYl9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4NDQwMDAwMDAsCisJCS5lbmQJPSAweDQ0MDBmZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX0xDRCwKKwkJLmVuZAk9IElSUV9MQ0QsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgdTY0IGZiX2RtYV9tYXNrID0gfih1NjQpMDsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhZmJfZGV2aWNlID0geworCS5uYW1lCQk9ICJweGEyeHgtZmIiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKyAJCS5wbGF0Zm9ybV9kYXRhCT0gJnB4YV9mYl9pbmZvLAorCQkuZG1hX21hc2sJPSAmZmJfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocHhhZmJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBweGFmYl9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBmZnVhcnRfZGV2aWNlID0geworCS5uYW1lCQk9ICJweGEyeHgtdWFydCIsCisJLmlkCQk9IDAsCit9Oworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYnR1YXJ0X2RldmljZSA9IHsKKwkubmFtZQkJPSAicHhhMnh4LXVhcnQiLAorCS5pZAkJPSAxLAorfTsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHN0dWFydF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInB4YTJ4eC11YXJ0IiwKKwkuaWQJCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmcHhhbWNpX2RldmljZSwKKwkmdWRjX2RldmljZSwKKwkmcHhhZmJfZGV2aWNlLAorCSZmZnVhcnRfZGV2aWNlLAorCSZidHVhcnRfZGV2aWNlLAorCSZzdHVhcnRfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcHhhX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9CisKK3N1YnN5c19pbml0Y2FsbChweGFfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmggYi9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU0YThkZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuaAorICoKKyAqIEF1dGhvcjoJTmljb2xhcyBQaXRyZQorICogQ29weXJpZ2h0OglNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKK3N0cnVjdCBzeXNfdGltZXI7CisKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIHB4YV90aW1lcjsKK2V4dGVybiB2b2lkIF9faW5pdCBweGFfbWFwX2lvKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IHB4YV9pbml0X2lycSh2b2lkKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBnZXRfY2xrX2ZyZXF1ZW5jeV9raHooaW50IGluZm8pOworCisjZGVmaW5lIFNFVF9CQU5LKF9fbnIsX19zdGFydCxfX3NpemUpIFwKKwltaS0+YmFua1tfX25yXS5zdGFydCA9IChfX3N0YXJ0KSwgXAorCW1pLT5iYW5rW19fbnJdLnNpemUgPSAoX19zaXplKSwgXAorCW1pLT5iYW5rW19fbnJdLm5vZGUgPSAoKCh1bnNpZ25lZCkoX19zdGFydCkgLSBQSFlTX09GRlNFVCkgPj4gMjcpCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaWRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVhNjZiZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDAxIENsaWZmIEJyYWtlLCBBY2NlbGVudCBTeXN0ZW1zIEluYy4KKyAqCisgKiAgMjAwMS0wOS0xMzogQ2xpZmYgQnJha2UgPGNicmFrZUBhY2NlbGVudC5jb20+CisgKiAgICAgICAgICAgICAgSW5pdGlhbCBjb2RlCisgKgorICogIDIwMDUtMDItMTU6IENsaWZmIEJyYWtlIDxjbGlmZi5icmFrZUBnbWFpbC5jb20+CisgKiAgCQk8aHR0cDovL3d3dy52aWJyZW4uY29tPiA8aHR0cDovL2JlYy1zeXN0ZW1zLmNvbT4KKyAqICAgICAgICAgICAgICBVcGRhdGVkIGZvciAyLjYga2VybmVsCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaWRwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhZmIuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9iaXRmaWVsZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21tYy5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisvKiBUT0RPOgorICogLSBhZGQgcHhhMnh4X2F1ZGlvX29wc190IGRldmljZSBzdHJ1Y3R1cmUKKyAqIC0gRXRoZXJuZXQgaW50ZXJydXB0CisgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAoSURQX0VUSF9QSFlTICsgMHgzMDApLAorCQkuZW5kCT0gKElEUF9FVEhfUEhZUyArIDB4ZmZmZmYpLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX0dQSU8oNCksCisJCS5lbmQJPSBJUlFfR1BJTyg0KSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21jOTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21jOTF4IiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21jOTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc21jOTF4X3Jlc291cmNlcywKK307CisKK3N0YXRpYyB2b2lkIGlkcF9iYWNrbGlnaHRfcG93ZXIoaW50IG9uKQoreworCWlmIChvbikgeworCQlJRFBfQ1BMRF9MQ0QgfD0gKDE8PDEpOworCX0gZWxzZSB7CisJCUlEUF9DUExEX0xDRCAmPSB+KDE8PDEpOworCX0KK30KKworc3RhdGljIHZvaWQgaWRwX3ZsY2QoaW50IG9uKQoreworCWlmIChvbikgeworCQlJRFBfQ1BMRF9MQ0QgfD0gKDE8PDIpOworCX0gZWxzZSB7CisJCUlEUF9DUExEX0xDRCAmPSB+KDE8PDIpOworCX0KK30KKworc3RhdGljIHZvaWQgaWRwX2xjZF9wb3dlcihpbnQgb24pCit7CisJaWYgKG9uKSB7CisJCUlEUF9DUExEX0xDRCB8PSAoMTw8MCk7CisJfSBlbHNlIHsKKwkJSURQX0NQTERfTENEICY9IH4oMTw8MCk7CisJfQorCisJLyogY2FsbCBpZHBfdmxjZCBmb3Igbm93IGFzIGNvcmUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQKKwkgKiBib3RoIHBvd2VyIGFuZCB2bGNkIGhvb2tzLiAgTm90ZSwgdGhpcyBpcyBub3QgdGVjaG5pY2FsbHkKKwkgKiB0aGUgY29ycmVjdCBzZXF1ZW5jZSwgYnV0IHNlZW1zIHRvIHdvcmsuICBEaXNjbGFpbWVyOgorCSAqIHRoaXMgbWF5IGV2ZW50dWFsbHkgZGFtYWdlIHRoZSBkaXNwbGF5LgorCSAqLworCisJaWRwX3ZsY2Qob24pOworfQorCitzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyBzaGFycF9sbTh2MzEgX19pbml0ZGF0YSA9IHsKKwkucGl4Y2xvY2sJPSAyNzAwMDAsCisJLnhyZXMJCT0gNjQwLAorCS55cmVzCQk9IDQ4MCwKKwkuYnBwCQk9IDE2LAorCS5oc3luY19sZW4JPSAxLAorCS5sZWZ0X21hcmdpbgk9IDMsCisJLnJpZ2h0X21hcmdpbgk9IDMsCisJLnZzeW5jX2xlbgk9IDEsCisJLnVwcGVyX21hcmdpbgk9IDAsCisJLmxvd2VyX21hcmdpbgk9IDAsCisJLnN5bmMJCT0gRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsCisJLmNtYXBfZ3JleXNjYWxlCT0gMCwKKwkuY21hcF9pbnZlcnNlCT0gMCwKKwkuY21hcF9zdGF0aWMJPSAwLAorCS5sY2NyMAkJPSBMQ0NSMF9TRFMsCisJLmxjY3IzCQk9IExDQ1IzX1BDUCB8IExDQ1IzX0FjYigyNTUpLAorCS5weGFmYl9iYWNrbGlnaHRfcG93ZXIgPSAmaWRwX2JhY2tsaWdodF9wb3dlciwKKwkucHhhZmJfbGNkX3Bvd2VyID0gJmlkcF9sY2RfcG93ZXIKK307CisKK3N0YXRpYyBpbnQgaWRwX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxcmV0dXJuX3QgKCppZHBfZGV0ZWN0X2ludCkoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLCB2b2lkICpkYXRhKQoreworCS8qIHNldHVwIEdQSU8gZm9yIFBYQTI1eCBNTUMgY29udHJvbGxlcgkqLworCXB4YV9ncGlvX21vZGUoR1BJTzZfTU1DQ0xLX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU84X01NQ0NTMF9NRCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBpZHBfbWNpX3BsYXRmb3JtX2RhdGEgPSB7CisJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5pbml0IAkJPSBpZHBfbWNpX2luaXQsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgaWRwX2luaXQodm9pZCkKK3sKKwlwcmludGsoImlkcF9pbml0KClcbiIpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzbWM5MXhfZGV2aWNlKTsKKwkvL3BsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbXN0X2F1ZGlvX2RldmljZSk7CisJc2V0X3B4YV9mYl9pbmZvKCZzaGFycF9sbTh2MzEpOworCXB4YV9zZXRfbWNpX2luZm8oJmlkcF9tY2lfcGxhdGZvcm1fZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpZHBfaW5pdF9pcnEodm9pZCkKK3sKKworCXB4YV9pbml0X2lycSgpOworCisJc2V0X2lycV90eXBlKFRPVUNIX1BBTkVMX0lSUSwgVE9VQ0hfUEFORUxfSVJRX0VER0UpOworfQorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGlkcF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKyAvKiB2aXJ0dWFsICAgICBwaHlzaWNhbCAgICBsZW5ndGggICAgICB0eXBlICovCisKKyAgeyBJRFBfQ09SRVZPTFRfVklSVCwKKyAgICBJRFBfQ09SRVZPTFRfUEhZUywKKyAgICBJRFBfQ09SRVZPTFRfU0laRSwKKyAgICBNVF9ERVZJQ0UgfSwKKyAgeyBJRFBfQ1BMRF9WSVJULAorICAgIElEUF9DUExEX1BIWVMsCisgICAgSURQX0NQTERfU0laRSwKKyAgICBNVF9ERVZJQ0UgfQorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGlkcF9tYXBfaW8odm9pZCkKK3sKKwlweGFfbWFwX2lvKCk7CisJaW90YWJsZV9pbml0KGlkcF9pb19kZXNjLCBBUlJBWV9TSVpFKGlkcF9pb19kZXNjKSk7CisKKwkvLyBzZXJpYWwgcG9ydHMgMiAmIDMKKwlweGFfZ3Bpb19tb2RlKEdQSU80Ml9CVFJYRF9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNDNfQlRUWERfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzQ0X0JUQ1RTX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU80NV9CVFJUU19NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNDZfU1RSWERfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzQ3X1NUVFhEX01EKTsKKworfQorCisKK01BQ0hJTkVfU1RBUlQoUFhBX0lEUCwgIlZpYnJlbiBQWEEyNTUgSURQIikKKwlNQUlOVEFJTkVSKCJWaWJyZW4gVGVjaG5vbG9naWVzIikKKwlCT09UX01FTSgweGEwMDAwMDAwLCAweDQwMDAwMDAwLCBpb19wMnYoMHg0MDAwMDAwMCkpCisJTUFQSU8oaWRwX21hcF9pbykKKwlJTklUSVJRKGlkcF9pbml0X2lycSkKKwkudGltZXIJCT0gJnB4YV90aW1lciwKKwlJTklUX01BQ0hJTkUoaWRwX2luaXQpCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2NhYzQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMKQEAgLTAsMCArMSwzMTMgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMKKyAqCisgKiAgR2VuZXJpYyBQWEEgSVJRIGhhbmRsaW5nLCBHUElPIElSUSBkZW11bHRpcGxleGluZywgZXRjLgorICoKKyAqICBBdXRob3I6CU5pY29sYXMgUGl0cmUKKyAqICBDcmVhdGVkOglKdW4gMTUsIDIwMDEKKyAqICBDb3B5cmlnaHQ6CU1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisKKy8qCisgKiBUaGlzIGlzIGZvciBwZXJpcGhlcmFsIElSUXMgaW50ZXJuYWwgdG8gdGhlIFBYQSBjaGlwLgorICovCisKK3N0YXRpYyB2b2lkIHB4YV9tYXNrX2xvd19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlJQ01SICY9IH4oMSA8PCAoaXJxICsgUFhBX0lSUV9TS0lQKSk7Cit9CisKK3N0YXRpYyB2b2lkIHB4YV91bm1hc2tfbG93X2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCUlDTVIgfD0gKDEgPDwgKGlycSArIFBYQV9JUlFfU0tJUCkpOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgcHhhX2ludGVybmFsX2NoaXBfbG93ID0geworCS5hY2sJCT0gcHhhX21hc2tfbG93X2lycSwKKwkubWFzawkJPSBweGFfbWFza19sb3dfaXJxLAorCS51bm1hc2sJCT0gcHhhX3VubWFza19sb3dfaXJxLAorfTsKKworI2lmIFBYQV9JTlRFUk5BTF9JUlFTID4gMzIKKworLyoKKyAqIFRoaXMgaXMgZm9yIHRoZSBzZWNvbmQgc2V0IG9mIGludGVybmFsIElSUXMgYXMgZm91bmQgb24gdGhlIFBYQTI3eC4KKyAqLworCitzdGF0aWMgdm9pZCBweGFfbWFza19oaWdoX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCUlDTVIyICY9IH4oMSA8PCAoaXJxIC0gMzIgKyBQWEFfSVJRX1NLSVApKTsKK30KKworc3RhdGljIHZvaWQgcHhhX3VubWFza19oaWdoX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCUlDTVIyIHw9ICgxIDw8IChpcnEgLSAzMiArIFBYQV9JUlFfU0tJUCkpOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgcHhhX2ludGVybmFsX2NoaXBfaGlnaCA9IHsKKwkuYWNrCQk9IHB4YV9tYXNrX2hpZ2hfaXJxLAorCS5tYXNrCQk9IHB4YV9tYXNrX2hpZ2hfaXJxLAorCS51bm1hc2sJCT0gcHhhX3VubWFza19oaWdoX2lycSwKK307CisKKyNlbmRpZgorCisvKgorICogUFhBIEdQSU8gZWRnZSBkZXRlY3Rpb24gZm9yIElSUXM6CisgKiBJUlFzIGFyZSBnZW5lcmF0ZWQgb24gRmFsbGluZy1FZGdlLCBSaXNpbmctRWRnZSwgb3IgYm90aC4KKyAqIFVzZSB0aGlzIGluc3RlYWQgb2YgZGlyZWN0bHkgc2V0dGluZyBHUkVSL0dGRVIuCisgKi8KKworc3RhdGljIGxvbmcgR1BJT19JUlFfcmlzaW5nX2VkZ2VbNF07CitzdGF0aWMgbG9uZyBHUElPX0lSUV9mYWxsaW5nX2VkZ2VbNF07CitzdGF0aWMgbG9uZyBHUElPX0lSUV9tYXNrWzRdOworCitzdGF0aWMgaW50IHB4YV9ncGlvX2lycV90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQoreworCWludCBncGlvLCBpZHg7CisKKwlncGlvID0gSVJRX1RPX0dQSU8oaXJxKTsKKwlpZHggPSBncGlvID4+IDU7CisKKwlpZiAodHlwZSA9PSBJUlFUX1BST0JFKSB7CisJICAgIC8qIERvbid0IG1lc3Mgd2l0aCBlbmFibGVkIEdQSU9zIHVzaW5nIHByZWNvbmZpZ3VyZWQgZWRnZXMgb3IKKwkgICAgICAgR1BJT3Mgc2V0IHRvIGFsdGVybmF0ZSBmdW5jdGlvbiBkdXJpbmcgcHJvYmUgKi8KKwkJaWYgKChHUElPX0lSUV9yaXNpbmdfZWRnZVtpZHhdIHwgR1BJT19JUlFfZmFsbGluZ19lZGdlW2lkeF0pICYKKwkJICAgIEdQSU9fYml0KGdwaW8pKQorCQkJcmV0dXJuIDA7CisJCWlmIChHQUZSKGdwaW8pICYgKDB4MyA8PCAoKChncGlvKSAmIDB4ZikqMikpKQorCQkJcmV0dXJuIDA7CisJCXR5cGUgPSBfX0lSUVRfUklTRURHRSB8IF9fSVJRVF9GQUxFREdFOworCX0KKworCS8qIHByaW50ayhLRVJOX0RFQlVHICJJUlElZCAoR1BJTyVkKTogIiwgaXJxLCBncGlvKTsgKi8KKworCXB4YV9ncGlvX21vZGUoZ3BpbyB8IEdQSU9fSU4pOworCisJaWYgKHR5cGUgJiBfX0lSUVRfUklTRURHRSkgeworCQkvKiBwcmludGsoInJpc2luZyAiKTsgKi8KKwkJX19zZXRfYml0IChncGlvLCBHUElPX0lSUV9yaXNpbmdfZWRnZSk7CisJfSBlbHNlCisJCV9fY2xlYXJfYml0IChncGlvLCBHUElPX0lSUV9yaXNpbmdfZWRnZSk7CisKKwlpZiAodHlwZSAmIF9fSVJRVF9GQUxFREdFKSB7CisJCS8qIHByaW50aygiZmFsbGluZyAiKTsgKi8KKwkJX19zZXRfYml0IChncGlvLCBHUElPX0lSUV9mYWxsaW5nX2VkZ2UpOworCX0gZWxzZQorCQlfX2NsZWFyX2JpdCAoZ3BpbywgR1BJT19JUlFfZmFsbGluZ19lZGdlKTsKKworCS8qIHByaW50aygiZWRnZXNcbiIpOyAqLworCisJR1JFUihncGlvKSA9IEdQSU9fSVJRX3Jpc2luZ19lZGdlW2lkeF0gJiBHUElPX0lSUV9tYXNrW2lkeF07CisJR0ZFUihncGlvKSA9IEdQSU9fSVJRX2ZhbGxpbmdfZWRnZVtpZHhdICYgR1BJT19JUlFfbWFza1tpZHhdOworCXJldHVybiAwOworfQorCisvKgorICogR1BJTyBJUlFzIG11c3QgYmUgYWNrbm93bGVkZ2VkLiAgVGhpcyBpcyBmb3IgR1BJTyAwIGFuZCAxLgorICovCisKK3N0YXRpYyB2b2lkIHB4YV9hY2tfbG93X2dwaW8odW5zaWduZWQgaW50IGlycSkKK3sKKwlHRURSMCA9ICgxIDw8IChpcnEgLSBJUlFfR1BJTzApKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIHB4YV9sb3dfZ3Bpb19jaGlwID0geworCS5hY2sJCT0gcHhhX2Fja19sb3dfZ3BpbywKKwkubWFzawkJPSBweGFfbWFza19sb3dfaXJxLAorCS51bm1hc2sJCT0gcHhhX3VubWFza19sb3dfaXJxLAorCS50eXBlCQk9IHB4YV9ncGlvX2lycV90eXBlLAorfTsKKworLyoKKyAqIERlbXV4IGhhbmRsZXIgZm9yIEdQSU8+PTIgZWRnZSBkZXRlY3QgaW50ZXJydXB0cworICovCisKK3N0YXRpYyB2b2lkIHB4YV9ncGlvX2RlbXV4X2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWRlc2MgKmRlc2MsCisJCQkJICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IG1hc2s7CisJaW50IGxvb3A7CisKKwlkbyB7CisJCWxvb3AgPSAwOworCisJCW1hc2sgPSBHRURSMCAmIH4zOworCQlpZiAobWFzaykgeworCQkJR0VEUjAgPSBtYXNrOworCQkJaXJxID0gSVJRX0dQSU8oMik7CisJCQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJCQltYXNrID4+PSAyOworCQkJZG8geworCQkJCWlmIChtYXNrICYgMSkKKwkJCQkJZGVzYy0+aGFuZGxlKGlycSwgZGVzYywgcmVncyk7CisJCQkJaXJxKys7CisJCQkJZGVzYysrOworCQkJCW1hc2sgPj49IDE7CisJCQl9IHdoaWxlIChtYXNrKTsKKwkJCWxvb3AgPSAxOworCQl9CisKKwkJbWFzayA9IEdFRFIxOworCQlpZiAobWFzaykgeworCQkJR0VEUjEgPSBtYXNrOworCQkJaXJxID0gSVJRX0dQSU8oMzIpOworCQkJZGVzYyA9IGlycV9kZXNjICsgaXJxOworCQkJZG8geworCQkJCWlmIChtYXNrICYgMSkKKwkJCQkJZGVzYy0+aGFuZGxlKGlycSwgZGVzYywgcmVncyk7CisJCQkJaXJxKys7CisJCQkJZGVzYysrOworCQkJCW1hc2sgPj49IDE7CisJCQl9IHdoaWxlIChtYXNrKTsKKwkJCWxvb3AgPSAxOworCQl9CisKKwkJbWFzayA9IEdFRFIyOworCQlpZiAobWFzaykgeworCQkJR0VEUjIgPSBtYXNrOworCQkJaXJxID0gSVJRX0dQSU8oNjQpOworCQkJZGVzYyA9IGlycV9kZXNjICsgaXJxOworCQkJZG8geworCQkJCWlmIChtYXNrICYgMSkKKwkJCQkJZGVzYy0+aGFuZGxlKGlycSwgZGVzYywgcmVncyk7CisJCQkJaXJxKys7CisJCQkJZGVzYysrOworCQkJCW1hc2sgPj49IDE7CisJCQl9IHdoaWxlIChtYXNrKTsKKwkJCWxvb3AgPSAxOworCQl9CisKKyNpZiBQWEFfTEFTVF9HUElPID49IDk2CisJCW1hc2sgPSBHRURSMzsKKwkJaWYgKG1hc2spIHsKKwkJCUdFRFIzID0gbWFzazsKKwkJCWlycSA9IElSUV9HUElPKDk2KTsKKwkJCWRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwkJCWRvIHsKKwkJCQlpZiAobWFzayAmIDEpCisJCQkJCWRlc2MtPmhhbmRsZShpcnEsIGRlc2MsIHJlZ3MpOworCQkJCWlycSsrOworCQkJCWRlc2MrKzsKKwkJCQltYXNrID4+PSAxOworCQkJfSB3aGlsZSAobWFzayk7CisJCQlsb29wID0gMTsKKwkJfQorI2VuZGlmCisJfSB3aGlsZSAobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHB4YV9hY2tfbXV4ZWRfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBncGlvID0gaXJxIC0gSVJRX0dQSU8oMikgKyAyOworCUdFRFIoZ3BpbykgPSBHUElPX2JpdChncGlvKTsKK30KKworc3RhdGljIHZvaWQgcHhhX21hc2tfbXV4ZWRfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBncGlvID0gaXJxIC0gSVJRX0dQSU8oMikgKyAyOworCV9fY2xlYXJfYml0KGdwaW8sIEdQSU9fSVJRX21hc2spOworCUdSRVIoZ3BpbykgJj0gfkdQSU9fYml0KGdwaW8pOworCUdGRVIoZ3BpbykgJj0gfkdQSU9fYml0KGdwaW8pOworfQorCitzdGF0aWMgdm9pZCBweGFfdW5tYXNrX211eGVkX2dwaW8odW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgZ3BpbyA9IGlycSAtIElSUV9HUElPKDIpICsgMjsKKwlpbnQgaWR4ID0gZ3BpbyA+PiA1OworCV9fc2V0X2JpdChncGlvLCBHUElPX0lSUV9tYXNrKTsKKwlHUkVSKGdwaW8pID0gR1BJT19JUlFfcmlzaW5nX2VkZ2VbaWR4XSAmIEdQSU9fSVJRX21hc2tbaWR4XTsKKwlHRkVSKGdwaW8pID0gR1BJT19JUlFfZmFsbGluZ19lZGdlW2lkeF0gJiBHUElPX0lSUV9tYXNrW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBweGFfbXV4ZWRfZ3Bpb19jaGlwID0geworCS5hY2sJCT0gcHhhX2Fja19tdXhlZF9ncGlvLAorCS5tYXNrCQk9IHB4YV9tYXNrX211eGVkX2dwaW8sCisJLnVubWFzawkJPSBweGFfdW5tYXNrX211eGVkX2dwaW8sCisJLnR5cGUJCT0gcHhhX2dwaW9faXJxX3R5cGUsCit9OworCisKK3ZvaWQgX19pbml0IHB4YV9pbml0X2lycSh2b2lkKQoreworCWludCBpcnE7CisKKwkvKiBkaXNhYmxlIGFsbCBJUlFzICovCisJSUNNUiA9IDA7CisKKwkvKiBhbGwgSVJRcyBhcmUgSVJRLCBub3QgRklRICovCisJSUNMUiA9IDA7CisKKwkvKiBjbGVhciBhbGwgR1BJTyBlZGdlIGRldGVjdHMgKi8KKwlHRkVSMCA9IDA7CisJR0ZFUjEgPSAwOworCUdGRVIyID0gMDsKKwlHUkVSMCA9IDA7CisJR1JFUjEgPSAwOworCUdSRVIyID0gMDsKKwlHRURSMCA9IEdFRFIwOworCUdFRFIxID0gR0VEUjE7CisJR0VEUjIgPSBHRURSMjsKKworI2lmZGVmIENPTkZJR19QWEEyN3gKKwkvKiBBbmQgc2ltaWxhcmx5IGZvciB0aGUgZXh0cmEgcmVncyBvbiB0aGUgUFhBMjd4ICovCisJSUNNUjIgPSAwOworCUlDTFIyID0gMDsKKwlHRkVSMyA9IDA7CisJR1JFUjMgPSAwOworCUdFRFIzID0gR0VEUjM7CisjZW5kaWYKKworCS8qIG9ubHkgdW5tYXNrZWQgaW50ZXJydXB0cyBraWNrIHVzIG91dCBvZiBpZGxlICovCisJSUNDUiA9IDE7CisKKwkvKiBHUElPIDAgYW5kIDEgbXVzdCBoYXZlIHRoZWlyIG1hc2sgYml0IGFsd2F5cyBzZXQgKi8KKwlHUElPX0lSUV9tYXNrWzBdID0gMzsKKworCWZvciAoaXJxID0gUFhBX0lSUShQWEFfSVJRX1NLSVApOyBpcnEgPD0gUFhBX0lSUSgzMSk7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZweGFfaW50ZXJuYWxfY2hpcF9sb3cpOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBkb19sZXZlbF9JUlEpOworCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7CisJfQorCisjaWYgUFhBX0lOVEVSTkFMX0lSUVMgPiAzMgorCWZvciAoaXJxID0gUFhBX0lSUSgzMik7IGlycSA8IFBYQV9JUlEoUFhBX0lOVEVSTkFMX0lSUVMpOyBpcnErKykgeworCQlzZXRfaXJxX2NoaXAoaXJxLCAmcHhhX2ludGVybmFsX2NoaXBfaGlnaCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2xldmVsX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKKwl9CisjZW5kaWYKKworCWZvciAoaXJxID0gSVJRX0dQSU8wOyBpcnEgPD0gSVJRX0dQSU8xOyBpcnErKykgeworCQlzZXRfaXJxX2NoaXAoaXJxLCAmcHhhX2xvd19ncGlvX2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBkb19lZGdlX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJfQorCisJZm9yIChpcnEgPSBJUlFfR1BJTygyKTsgaXJxIDw9IElSUV9HUElPKFBYQV9MQVNUX0dQSU8pOyBpcnErKykgeworCQlzZXRfaXJxX2NoaXAoaXJxLCAmcHhhX211eGVkX2dwaW9fY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2VkZ2VfSVJRKTsKKwkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKKwl9CisKKwkvKiBJbnN0YWxsIGhhbmRsZXIgZm9yIEdQSU8+PTIgZWRnZSBkZXRlY3QgaW50ZXJydXB0cyAqLworCXNldF9pcnFfY2hpcChJUlFfR1BJT18yX3gsICZweGFfaW50ZXJuYWxfY2hpcF9sb3cpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9HUElPXzJfeCwgcHhhX2dwaW9fZGVtdXhfaGFuZGxlcik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLWlkcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1pZHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWJhNmVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1pZHAuYwpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtaWRwLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgSm9obiBEb3JzZXkgPGpvaG4rQGNzLmNtdS5lZHU+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxIEplZmYgU3V0aGVybGFuZCA8amVmZnNAYWNjZWxlbnQuY29tPgorICoKKyAqIE9yaWdpbmFsIChsZWRzLWZvb3RicmlkZ2UuYykgYnkgUnVzc2VsbCBLaW5nCisgKgorICogTWFjcm9zIGZvciBhY3R1YWwgTEVEIG1hbmlwdWxhdGlvbiBzaG91bGQgYmUgaW4gbWFjaGluZSBzcGVjaWZpYworICogZmlsZXMgaW4gdGhpcyAnbWFjaCcgZGlyZWN0b3J5LgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9sZWRzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pZHAuaD4KKworI2luY2x1ZGUgImxlZHMuaCIKKworI2RlZmluZSBMRURfU1RBVEVfRU5BQkxFRAkxCisjZGVmaW5lIExFRF9TVEFURV9DTEFJTUVECTIKKworc3RhdGljIHVuc2lnbmVkIGludCBsZWRfc3RhdGU7CitzdGF0aWMgdW5zaWduZWQgaW50IGh3X2xlZF9zdGF0ZTsKKwordm9pZCBpZHBfbGVkc19ldmVudChsZWRfZXZlbnRfdCBldnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXN3aXRjaCAoZXZ0KSB7CisJY2FzZSBsZWRfc3RhcnQ6CisJCWh3X2xlZF9zdGF0ZSA9IElEUF9IQl9MRUQgfCBJRFBfQlVTWV9MRUQ7CisJCWxlZF9zdGF0ZSA9IExFRF9TVEFURV9FTkFCTEVEOworCQlicmVhazsKKworCWNhc2UgbGVkX3N0b3A6CisJCWxlZF9zdGF0ZSAmPSB+TEVEX1NUQVRFX0VOQUJMRUQ7CisJCWJyZWFrOworCisJY2FzZSBsZWRfY2xhaW06CisJCWxlZF9zdGF0ZSB8PSBMRURfU1RBVEVfQ0xBSU1FRDsKKwkJaHdfbGVkX3N0YXRlID0gSURQX0hCX0xFRCB8IElEUF9CVVNZX0xFRDsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9yZWxlYXNlOgorCQlsZWRfc3RhdGUgJj0gfkxFRF9TVEFURV9DTEFJTUVEOworCQlod19sZWRfc3RhdGUgPSBJRFBfSEJfTEVEIHwgSURQX0JVU1lfTEVEOworCQlicmVhazsKKworI2lmZGVmIENPTkZJR19MRURTX1RJTUVSCisJY2FzZSBsZWRfdGltZXI6CisJCWlmICghKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKSkKKwkJCWh3X2xlZF9zdGF0ZSBePSBJRFBfSEJfTEVEOworCQlicmVhazsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0xFRFNfQ1BVCisJY2FzZSBsZWRfaWRsZV9zdGFydDoKKwkJaWYgKCEobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpKQorCQkJaHdfbGVkX3N0YXRlICY9IH5JRFBfQlVTWV9MRUQ7CisJCWJyZWFrOworCisJY2FzZSBsZWRfaWRsZV9lbmQ6CisJCWlmICghKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKSkKKwkJCWh3X2xlZF9zdGF0ZSB8PSBJRFBfQlVTWV9MRUQ7CisJCWJyZWFrOworI2VuZGlmCisKKwljYXNlIGxlZF9oYWx0ZWQ6CisJCWJyZWFrOworCisJY2FzZSBsZWRfZ3JlZW5fb246CisJCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKKwkJCWh3X2xlZF9zdGF0ZSB8PSBJRFBfSEJfTEVEOworCQlicmVhazsKKworCWNhc2UgbGVkX2dyZWVuX29mZjoKKwkJaWYgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKQorCQkJaHdfbGVkX3N0YXRlICY9IH5JRFBfSEJfTEVEOworCQlicmVhazsKKworCWNhc2UgbGVkX2FtYmVyX29uOgorCQlicmVhazsKKworCWNhc2UgbGVkX2FtYmVyX29mZjoKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9yZWRfb246CisJCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKKwkJCWh3X2xlZF9zdGF0ZSB8PSBJRFBfQlVTWV9MRUQ7CisJCWJyZWFrOworCisJY2FzZSBsZWRfcmVkX29mZjoKKwkJaWYgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKQorCQkJaHdfbGVkX3N0YXRlICY9IH5JRFBfQlVTWV9MRUQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfRU5BQkxFRCkKKwkJSURQX0NQTERfTEVEX0NPTlRST0wgPSAoIChJRFBfQ1BMRF9MRURfQ09OVFJPTCB8IElEUF9MRURTX01BU0spICYgfmh3X2xlZF9zdGF0ZSk7CisJZWxzZQorCQlJRFBfQ1BMRF9MRURfQ09OVFJPTCB8PSBJRFBfTEVEU19NQVNLOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1sdWJib2NrLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLWx1YmJvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWNmNTYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1sdWJib2NrLmMKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLWx1YmJvY2suYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBKb2huIERvcnNleSA8am9obitAY3MuY211LmVkdT4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgSmVmZiBTdXRoZXJsYW5kIDxqZWZmc0BhY2NlbGVudC5jb20+CisgKgorICogT3JpZ2luYWwgKGxlZHMtZm9vdGJyaWRnZS5jKSBieSBSdXNzZWxsIEtpbmcKKyAqCisgKiBNYWpvciBzdXJnZXJ5IG9uIEFwcmlsIDIwMDQgYnkgTmljb2xhcyBQaXRyZSBmb3IgbGVzcyBnbG9iYWwKKyAqIG5hbWVzcGFjZSBjb2xsaXNpb24uICBNb3N0bHkgYWRhcHRlZCB0aGUgTWFpbnN0b25lIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9sZWRzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbHViYm9jay5oPgorCisjaW5jbHVkZSAibGVkcy5oIgorCisvKgorICogOCBkaXNjcmV0ZSBsZWRzIGF2YWlsYWJsZSBmb3IgZ2VuZXJhbCB1c2U6CisgKgorICogTm90ZTogYml0cyBbMTUtOF0gYXJlIHVzZWQgdG8gZW5hYmxlL2JsYW5rIHRoZSA4IDcgc2VnbWVudCBoZXggZGlzcGxheXMKKyAqIHNvIGJlIHN1cmUgdG8gbm90IG1vbmtleSB3aXRoIHRoZW0gaGVyZS4KKyAqLworCisjZGVmaW5lIEQyOAkJCSgxIDw8IDApCisjZGVmaW5lIEQyNwkJCSgxIDw8IDEpCisjZGVmaW5lIEQyNgkJCSgxIDw8IDIpCisjZGVmaW5lIEQyNQkJCSgxIDw8IDMpCisjZGVmaW5lIEQyNAkJCSgxIDw8IDQpCisjZGVmaW5lIEQyMwkJCSgxIDw8IDUpCisjZGVmaW5lIEQyMgkJCSgxIDw8IDYpCisjZGVmaW5lIEQyMQkJCSgxIDw8IDcpCisKKyNkZWZpbmUgTEVEX1NUQVRFX0VOQUJMRUQJMQorI2RlZmluZSBMRURfU1RBVEVfQ0xBSU1FRAkyCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGVkX3N0YXRlOworc3RhdGljIHVuc2lnbmVkIGludCBod19sZWRfc3RhdGU7CisKK3ZvaWQgbHViYm9ja19sZWRzX2V2ZW50KGxlZF9ldmVudF90IGV2dCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJc3dpdGNoIChldnQpIHsKKwljYXNlIGxlZF9zdGFydDoKKwkJaHdfbGVkX3N0YXRlID0gMDsKKwkJbGVkX3N0YXRlID0gTEVEX1NUQVRFX0VOQUJMRUQ7CisJCWJyZWFrOworCisJY2FzZSBsZWRfc3RvcDoKKwkJbGVkX3N0YXRlICY9IH5MRURfU1RBVEVfRU5BQkxFRDsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9jbGFpbToKKwkJbGVkX3N0YXRlIHw9IExFRF9TVEFURV9DTEFJTUVEOworCQlod19sZWRfc3RhdGUgPSAwOworCQlicmVhazsKKworCWNhc2UgbGVkX3JlbGVhc2U6CisJCWxlZF9zdGF0ZSAmPSB+TEVEX1NUQVRFX0NMQUlNRUQ7CisJCWh3X2xlZF9zdGF0ZSA9IDA7CisJCWJyZWFrOworCisjaWZkZWYgQ09ORklHX0xFRFNfVElNRVIKKwljYXNlIGxlZF90aW1lcjoKKwkJaHdfbGVkX3N0YXRlIF49IEQyNjsKKwkJYnJlYWs7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19MRURTX0NQVQorCWNhc2UgbGVkX2lkbGVfc3RhcnQ6CisJCWh3X2xlZF9zdGF0ZSAmPSB+RDI3OworCQlicmVhazsKKworCWNhc2UgbGVkX2lkbGVfZW5kOgorCQlod19sZWRfc3RhdGUgfD0gRDI3OworCQlicmVhazsKKyNlbmRpZgorCisJY2FzZSBsZWRfaGFsdGVkOgorCQlicmVhazsKKworCWNhc2UgbGVkX2dyZWVuX29uOgorCQlod19sZWRfc3RhdGUgfD0gRDIxOworCQlicmVhazsKKworCWNhc2UgbGVkX2dyZWVuX29mZjoKKwkJaHdfbGVkX3N0YXRlICY9IH5EMjE7CisJCWJyZWFrOworCisJY2FzZSBsZWRfYW1iZXJfb246CisJCWh3X2xlZF9zdGF0ZSB8PSBEMjI7CisJCWJyZWFrOworCisJY2FzZSBsZWRfYW1iZXJfb2ZmOgorCQlod19sZWRfc3RhdGUgJj0gfkQyMjsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9yZWRfb246CisJCWh3X2xlZF9zdGF0ZSB8PSBEMjM7CisJCWJyZWFrOworCisJY2FzZSBsZWRfcmVkX29mZjoKKwkJaHdfbGVkX3N0YXRlICY9IH5EMjM7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfRU5BQkxFRCkKKwkJTFVCX0RJU0NfQkxOS19MRUQgPSAoTFVCX0RJU0NfQkxOS19MRUQgfCAweGZmKSAmIH5od19sZWRfc3RhdGU7CisJZWxzZQorCQlMVUJfRElTQ19CTE5LX0xFRCB8PSAweGZmOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1tYWluc3RvbmUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtbWFpbnN0b25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJkM2Y4NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtbWFpbnN0b25lLmMKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLW1haW5zdG9uZS5jCisgKgorICogQXV0aG9yOiAgICAgTmljb2xhcyBQaXRyZQorICogQ3JlYXRlZDogICAgTm92IDA1LCAyMDAyCisgKiBDb3B5cmlnaHQ6ICBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWFpbnN0b25lLmg+CisKKyNpbmNsdWRlICJsZWRzLmgiCisKKworLyogOCBkaXNjcmV0ZSBsZWRzIGF2YWlsYWJsZSBmb3IgZ2VuZXJhbCB1c2U6ICovCisjZGVmaW5lIEQyOAkJCSgxIDw8IDApCisjZGVmaW5lIEQyNwkJCSgxIDw8IDEpCisjZGVmaW5lIEQyNgkJCSgxIDw8IDIpCisjZGVmaW5lIEQyNQkJCSgxIDw8IDMpCisjZGVmaW5lIEQyNAkJCSgxIDw8IDQpCisjZGVmaW5lIEQyMwkJCSgxIDw8IDUpCisjZGVmaW5lIEQyMgkJCSgxIDw8IDYpCisjZGVmaW5lIEQyMQkJCSgxIDw8IDcpCisKKyNkZWZpbmUgTEVEX1NUQVRFX0VOQUJMRUQJMQorI2RlZmluZSBMRURfU1RBVEVfQ0xBSU1FRAkyCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGVkX3N0YXRlOworc3RhdGljIHVuc2lnbmVkIGludCBod19sZWRfc3RhdGU7CisKK3ZvaWQgbWFpbnN0b25lX2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzd2l0Y2ggKGV2dCkgeworCWNhc2UgbGVkX3N0YXJ0OgorCQlod19sZWRfc3RhdGUgPSAwOworCQlsZWRfc3RhdGUgPSBMRURfU1RBVEVfRU5BQkxFRDsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9zdG9wOgorCQlsZWRfc3RhdGUgJj0gfkxFRF9TVEFURV9FTkFCTEVEOworCQlicmVhazsKKworCWNhc2UgbGVkX2NsYWltOgorCQlsZWRfc3RhdGUgfD0gTEVEX1NUQVRFX0NMQUlNRUQ7CisJCWh3X2xlZF9zdGF0ZSA9IDA7CisJCWJyZWFrOworCisJY2FzZSBsZWRfcmVsZWFzZToKKwkJbGVkX3N0YXRlICY9IH5MRURfU1RBVEVfQ0xBSU1FRDsKKwkJaHdfbGVkX3N0YXRlID0gMDsKKwkJYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfTEVEU19USU1FUgorCWNhc2UgbGVkX3RpbWVyOgorCQlod19sZWRfc3RhdGUgXj0gRDI2OworCQlicmVhazsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0xFRFNfQ1BVCisJY2FzZSBsZWRfaWRsZV9zdGFydDoKKwkJaHdfbGVkX3N0YXRlICY9IH5EMjc7CisJCWJyZWFrOworCisJY2FzZSBsZWRfaWRsZV9lbmQ6CisJCWh3X2xlZF9zdGF0ZSB8PSBEMjc7CisJCWJyZWFrOworI2VuZGlmCisKKwljYXNlIGxlZF9oYWx0ZWQ6CisJCWJyZWFrOworCisJY2FzZSBsZWRfZ3JlZW5fb246CisJCWh3X2xlZF9zdGF0ZSB8PSBEMjE7OworCQlicmVhazsKKworCWNhc2UgbGVkX2dyZWVuX29mZjoKKwkJaHdfbGVkX3N0YXRlICY9IH5EMjE7CisJCWJyZWFrOworCisJY2FzZSBsZWRfYW1iZXJfb246CisJCWh3X2xlZF9zdGF0ZSB8PSBEMjI7OworCQlicmVhazsKKworCWNhc2UgbGVkX2FtYmVyX29mZjoKKwkJaHdfbGVkX3N0YXRlICY9IH5EMjI7CisJCWJyZWFrOworCisJY2FzZSBsZWRfcmVkX29uOgorCQlod19sZWRfc3RhdGUgfD0gRDIzOzsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9yZWRfb2ZmOgorCQlod19sZWRfc3RhdGUgJj0gfkQyMzsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9FTkFCTEVEKQorCQlNU1RfTEVEQ1RSTCA9IChNU1RfTEVEQ1RSTCB8IDB4ZmYpICYgfmh3X2xlZF9zdGF0ZTsKKwllbHNlCisJCU1TVF9MRURDVFJMIHw9IDB4ZmY7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJlNGQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMuYwpAQCAtMCwwICsxLDMyIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy5jCisgKgorICogeHNjYWxlIExFRHMgZGlzcGF0Y2hlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBOaWNvbGFzIFBpdHJlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxIEplZmYgU3V0aGVybGFuZCwgQWNjZWxlbnQgU3lzdGVtcyBJbmMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9sZWRzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgImxlZHMuaCIKKworc3RhdGljIGludCBfX2luaXQKK3B4YV9sZWRzX2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19sdWJib2NrKCkpCisJCWxlZHNfZXZlbnQgPSBsdWJib2NrX2xlZHNfZXZlbnQ7CisJaWYgKG1hY2hpbmVfaXNfbWFpbnN0b25lKCkpCisJCWxlZHNfZXZlbnQgPSBtYWluc3RvbmVfbGVkc19ldmVudDsKKwlpZiAobWFjaGluZV9pc19weGFfaWRwKCkpCisJCWxlZHNfZXZlbnQgPSBpZHBfbGVkc19ldmVudDsKKworCWxlZHNfZXZlbnQobGVkX3N0YXJ0KTsKKwlyZXR1cm4gMDsKK30KKworY29yZV9pbml0Y2FsbChweGFfbGVkc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOThmNmU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvbGVkcy5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxIEplZmYgU3V0aGVybGFuZCwgQWNjZWxlbnQgU3lzdGVtcyBJbmMuCisgKgorICogYmxpbmt5IGxpZ2h0cyBmb3IgdmFyaW91cyBQWEEtYmFzZWQgc3lzdGVtczoKKyAqCisgKi8KKworZXh0ZXJuIHZvaWQgaWRwX2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KTsKK2V4dGVybiB2b2lkIGx1YmJvY2tfbGVkc19ldmVudChsZWRfZXZlbnRfdCBldnQpOworZXh0ZXJuIHZvaWQgbWFpbnN0b25lX2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYyBiL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDAxMmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCkBAIC0wLDAgKzEsMjQ3IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYworICoKKyAqICBTdXBwb3J0IGZvciB0aGUgSW50ZWwgREJQWEEyNTAgRGV2ZWxvcG1lbnQgUGxhdGZvcm0uCisgKgorICogIEF1dGhvcjoJTmljb2xhcyBQaXRyZQorICogIENyZWF0ZWQ6CUp1biAxNSwgMjAwMQorICogIENvcHlyaWdodDoJTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc2ExMTExLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2x1YmJvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC91ZGMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGFmYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21tYy5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisKKyNkZWZpbmUgTFVCX01JU0NfV1IJCV9fTFVCX1JFRyhMVUJCT0NLX0ZQR0FfUEhZUyArIDB4MDgwKQorCit2b2lkIGx1YmJvY2tfc2V0X21pc2Nfd3IodW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCBzZXQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlMVUJfTUlTQ19XUiA9IChMVUJfTUlTQ19XUiAmIH5tYXNrKSB8IChzZXQgJiBtYXNrKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGx1YmJvY2tfc2V0X21pc2Nfd3IpOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsdWJib2NrX2lycV9lbmFibGVkOworCitzdGF0aWMgdm9pZCBsdWJib2NrX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGx1YmJvY2tfaXJxID0gKGlycSAtIExVQkJPQ0tfSVJRKDApKTsKKwlMVUJfSVJRX01BU0tfRU4gPSAobHViYm9ja19pcnFfZW5hYmxlZCAmPSB+KDEgPDwgbHViYm9ja19pcnEpKTsKK30KKworc3RhdGljIHZvaWQgbHViYm9ja191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGx1YmJvY2tfaXJxID0gKGlycSAtIExVQkJPQ0tfSVJRKDApKTsKKwkvKiB0aGUgaXJxIGNhbiBiZSBhY2tub3dsZWRnZWQgb25seSBpZiBkZWFzc2VydGVkLCBzbyBpdCdzIGRvbmUgaGVyZSAqLworCUxVQl9JUlFfU0VUX0NMUiAmPSB+KDEgPDwgbHViYm9ja19pcnEpOworCUxVQl9JUlFfTUFTS19FTiA9IChsdWJib2NrX2lycV9lbmFibGVkIHw9ICgxIDw8IGx1YmJvY2tfaXJxKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBsdWJib2NrX2lycV9jaGlwID0geworCS5hY2sJCT0gbHViYm9ja19tYXNrX2lycSwKKwkubWFzawkJPSBsdWJib2NrX21hc2tfaXJxLAorCS51bm1hc2sJCT0gbHViYm9ja191bm1hc2tfaXJxLAorfTsKKworc3RhdGljIHZvaWQgbHViYm9ja19pcnFfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywKKwkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIHBlbmRpbmcgPSBMVUJfSVJRX1NFVF9DTFIgJiBsdWJib2NrX2lycV9lbmFibGVkOworCWRvIHsKKwkJR0VEUigwKSA9IEdQSU9fYml0KDApOwkvKiBjbGVhciBvdXIgcGFyZW50IGlycSAqLworCQlpZiAobGlrZWx5KHBlbmRpbmcpKSB7CisJCQlpcnEgPSBMVUJCT0NLX0lSUSgwKSArIF9fZmZzKHBlbmRpbmcpOworCQkJZGVzYyA9IGlycV9kZXNjICsgaXJxOworCQkJZGVzYy0+aGFuZGxlKGlycSwgZGVzYywgcmVncyk7CisJCX0KKwkJcGVuZGluZyA9IExVQl9JUlFfU0VUX0NMUiAmIGx1YmJvY2tfaXJxX2VuYWJsZWQ7CisJfSB3aGlsZSAocGVuZGluZyk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBsdWJib2NrX2luaXRfaXJxKHZvaWQpCit7CisJaW50IGlycTsKKworCXB4YV9pbml0X2lycSgpOworCisJLyogc2V0dXAgZXh0cmEgbHViYm9jayBpcnFzICovCisJZm9yIChpcnEgPSBMVUJCT0NLX0lSUSgwKTsgaXJxIDw9IExVQkJPQ0tfTEFTVF9JUlE7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZsdWJib2NrX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgZG9fbGV2ZWxfSVJRKTsKKwkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKKwl9CisKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfR1BJTygwKSwgbHViYm9ja19pcnFfaGFuZGxlcik7CisJc2V0X2lycV90eXBlKElSUV9HUElPKDApLCBJUlFUX0ZBTExJTkcpOworfQorCitzdGF0aWMgaW50IGx1YmJvY2tfdWRjX2lzX2Nvbm5lY3RlZCh2b2lkKQoreworCXJldHVybiAoTFVCX01JU0NfUkQgJiAoMSA8PCA5KSkgPT0gMDsKK30KKworc3RhdGljIHN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbyB1ZGNfaW5mbyBfX2luaXRkYXRhID0geworCS51ZGNfaXNfY29ubmVjdGVkCT0gbHViYm9ja191ZGNfaXNfY29ubmVjdGVkLAorCS8vIG5vIEQrIHB1bGx1cDsgbHViYm9jayBjYW4ndCBjb25uZWN0L2Rpc2Nvbm5lY3QgaW4gc29mdHdhcmUKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2ExMTExX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHgxMDAwMDAwMCwKKwkJLmVuZAk9IDB4MTAwMDFmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBMVUJCT0NLX1NBMTExMV9JUlEsCisJCS5lbmQJPSBMVUJCT0NLX1NBMTExMV9JUlEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzYTExMTFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzYTExMTEiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2ExMTExX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc2ExMTExX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAic21jOTF4LXJlZ3MiLAorCQkuc3RhcnQJPSAweDBjMDAwMDAwLAorCQkuZW5kCT0gMHgwYzBmZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IExVQkJPQ0tfRVRIX0lSUSwKKwkJLmVuZAk9IExVQkJPQ0tfRVRIX0lSUSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMl0gPSB7CisJCS5uYW1lCT0gInNtYzkxeC1hdHRyaWIiLAorCQkuc3RhcnQJPSAweDBlMDAwMDAwLAorCQkuZW5kCT0gMHgwZTBmZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtYzkxeCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbWM5MXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzbWM5MXhfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzYTExMTFfZGV2aWNlLAorCSZzbWM5MXhfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gc2hhcnBfbG04djMxIF9faW5pdGRhdGEgPSB7CisJLnBpeGNsb2NrCT0gMjcwMDAwLAorCS54cmVzCQk9IDY0MCwKKwkueXJlcwkJPSA0ODAsCisJLmJwcAkJPSAxNiwKKwkuaHN5bmNfbGVuCT0gMSwKKwkubGVmdF9tYXJnaW4JPSAzLAorCS5yaWdodF9tYXJnaW4JPSAzLAorCS52c3luY19sZW4JPSAxLAorCS51cHBlcl9tYXJnaW4JPSAwLAorCS5sb3dlcl9tYXJnaW4JPSAwLAorCS5zeW5jCQk9IEZCX1NZTkNfSE9SX0hJR0hfQUNUIHwgRkJfU1lOQ19WRVJUX0hJR0hfQUNULAorCS5jbWFwX2dyZXlzY2FsZQk9IDAsCisJLmNtYXBfaW52ZXJzZQk9IDAsCisJLmNtYXBfc3RhdGljCT0gMCwKKwkubGNjcjAJCT0gTENDUjBfU0RTLAorCS5sY2NyMwkJPSBMQ0NSM19QQ1AgfCBMQ0NSM19BY2IoMjU1KSwKK307CisKK3N0YXRpYyBpbnQgbHViYm9ja19tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycXJldHVybl90ICgqbHViYm9ja19kZXRlY3RfaW50KShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksIHZvaWQgKmRhdGEpCit7CisJLyogc2V0dXAgR1BJTyBmb3IgUFhBMjV4IE1NQyBjb250cm9sbGVyCSovCisJcHhhX2dwaW9fbW9kZShHUElPNl9NTUNDTEtfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzhfTU1DQ1MwX01EKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGx1YmJvY2tfbWNpX3BsYXRmb3JtX2RhdGEgPSB7CisJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5pbml0IAkJPSBsdWJib2NrX21jaV9pbml0LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGx1YmJvY2tfaW5pdCh2b2lkKQoreworCXB4YV9zZXRfdWRjX2luZm8oJnVkY19pbmZvKTsKKwlzZXRfcHhhX2ZiX2luZm8oJnNoYXJwX2xtOHYzMSk7CisJcHhhX3NldF9tY2lfaW5mbygmbHViYm9ja19tY2lfcGxhdGZvcm1fZGF0YSk7CisJKHZvaWQpIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworfQorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGx1YmJvY2tfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisgIHsgTFVCQk9DS19GUEdBX1ZJUlQsIExVQkJPQ0tfRlBHQV9QSFlTLCAweDAwMTAwMDAwLCBNVF9ERVZJQ0UgfSwgLyogQ1BMRCAqLworfTsKKworc3RhdGljIHZvaWQgX19pbml0IGx1YmJvY2tfbWFwX2lvKHZvaWQpCit7CisJcHhhX21hcF9pbygpOworCWlvdGFibGVfaW5pdChsdWJib2NrX2lvX2Rlc2MsIEFSUkFZX1NJWkUobHViYm9ja19pb19kZXNjKSk7CisKKwkvKiBUaGlzIGVuYWJsZXMgdGhlIEJUVUFSVCAqLworCXB4YV9ncGlvX21vZGUoR1BJTzQyX0JUUlhEX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU80M19CVFRYRF9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNDRfQlRDVFNfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzQ1X0JUUlRTX01EKTsKKworCS8qIFRoaXMgaXMgZm9yIHRoZSBTTUMgY2hpcCBzZWxlY3QgKi8KKwlweGFfZ3Bpb19tb2RlKEdQSU83OV9uQ1NfM19NRCk7CisKKwkvKiBzZXR1cCBzbGVlcCBtb2RlIHZhbHVlcyAqLworCVBXRVIgID0gMHgwMDAwMDAwMjsKKwlQRkVSICA9IDB4MDAwMDAwMDA7CisJUFJFUiAgPSAweDAwMDAwMDAyOworCVBHU1IwID0gMHgwMDAwODAwMDsKKwlQR1NSMSA9IDB4MDAzRjAyMDI7CisJUEdTUjIgPSAweDAwMDFDMDAwOworCVBDRlIgfD0gUENGUl9PUERFOworfQorCitNQUNISU5FX1NUQVJUKExVQkJPQ0ssICJJbnRlbCBEQlBYQTI1MCBEZXZlbG9wbWVudCBQbGF0Zm9ybSAoYWthIEx1YmJvY2spIikKKwlNQUlOVEFJTkVSKCJNb250YVZpc3RhIFNvZnR3YXJlIEluYy4iKQorCUJPT1RfTUVNKDB4YTAwMDAwMDAsIDB4NDAwMDAwMDAsIGlvX3AydigweDQwMDAwMDAwKSkKKwlNQVBJTyhsdWJib2NrX21hcF9pbykKKwlJTklUSVJRKGx1YmJvY2tfaW5pdF9pcnEpCisJLnRpbWVyCQk9ICZweGFfdGltZXIsCisJSU5JVF9NQUNISU5FKGx1YmJvY2tfaW5pdCkKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOTUyMjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYwpAQCAtMCwwICsxLDMxNiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYworICoKKyAqICBTdXBwb3J0IGZvciB0aGUgSW50ZWwgSENEREJCVkEwIERldmVsb3BtZW50IFBsYXRmb3JtLgorICogIChnbyBmaWd1cmUgaG93IHRoZXkgY2FtZSB1cCB3aXRoIHN1Y2ggbmFtZS4uLikKKyAqCisgKiAgQXV0aG9yOglOaWNvbGFzIFBpdHJlCisgKiAgQ3JlYXRlZDoJTm92IDA1LCAyMDAyCisgKiAgQ29weXJpZ2h0OglNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tYWluc3RvbmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hdWRpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YWZiLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbW1jLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWFpbnN0b25lX2lycV9lbmFibGVkOworCitzdGF0aWMgdm9pZCBtYWluc3RvbmVfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgbWFpbnN0b25lX2lycSA9IChpcnEgLSBNQUlOU1RPTkVfSVJRKDApKTsKKwlNU1RfSU5UTVNLRU5BID0gKG1haW5zdG9uZV9pcnFfZW5hYmxlZCAmPSB+KDEgPDwgbWFpbnN0b25lX2lycSkpOworfQorCitzdGF0aWMgdm9pZCBtYWluc3RvbmVfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBtYWluc3RvbmVfaXJxID0gKGlycSAtIE1BSU5TVE9ORV9JUlEoMCkpOworCS8qIHRoZSBpcnEgY2FuIGJlIGFja25vd2xlZGdlZCBvbmx5IGlmIGRlYXNzZXJ0ZWQsIHNvIGl0J3MgZG9uZSBoZXJlICovCisJTVNUX0lOVFNFVENMUiAmPSB+KDEgPDwgbWFpbnN0b25lX2lycSk7CisJTVNUX0lOVE1TS0VOQSA9IChtYWluc3RvbmVfaXJxX2VuYWJsZWQgfD0gKDEgPDwgbWFpbnN0b25lX2lycSkpOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgbWFpbnN0b25lX2lycV9jaGlwID0geworCS5hY2sJCT0gbWFpbnN0b25lX21hc2tfaXJxLAorCS5tYXNrCQk9IG1haW5zdG9uZV9tYXNrX2lycSwKKwkudW5tYXNrCQk9IG1haW5zdG9uZV91bm1hc2tfaXJxLAorfTsKKworCitzdGF0aWMgdm9pZCBtYWluc3RvbmVfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWRlc2MgKmRlc2MsCisJCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIHBlbmRpbmcgPSBNU1RfSU5UU0VUQ0xSICYgbWFpbnN0b25lX2lycV9lbmFibGVkOworCWRvIHsKKwkJR0VEUigwKSA9IEdQSU9fYml0KDApOyAgLyogY2xlYXIgdXNlbGVzcyBlZGdlIG5vdGlmaWNhdGlvbiAqLworCQlpZiAobGlrZWx5KHBlbmRpbmcpKSB7CisJCQlpcnEgPSBNQUlOU1RPTkVfSVJRKDApICsgX19mZnMocGVuZGluZyk7CisJCQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJCQlkZXNjLT5oYW5kbGUoaXJxLCBkZXNjLCByZWdzKTsKKwkJfQorCQlwZW5kaW5nID0gTVNUX0lOVFNFVENMUiAmIG1haW5zdG9uZV9pcnFfZW5hYmxlZDsKKwl9IHdoaWxlIChwZW5kaW5nKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG1haW5zdG9uZV9pbml0X2lycSh2b2lkKQoreworCWludCBpcnE7CisKKwlweGFfaW5pdF9pcnEoKTsKKworCS8qIHNldHVwIGV4dHJhIE1haW5zdG9uZSBpcnFzICovCisJZm9yKGlycSA9IE1BSU5TVE9ORV9JUlEoMCk7IGlycSA8PSBNQUlOU1RPTkVfSVJRKDE1KTsgaXJxKyspIHsKKwkJc2V0X2lycV9jaGlwKGlycSwgJm1haW5zdG9uZV9pcnFfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2xldmVsX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJfQorCXNldF9pcnFfZmxhZ3MoTUFJTlNUT05FX0lSUSg4KSwgMCk7CisJc2V0X2lycV9mbGFncyhNQUlOU1RPTkVfSVJRKDEyKSwgMCk7CisKKwlNU1RfSU5UTVNLRU5BID0gMDsKKwlNU1RfSU5UU0VUQ0xSID0gMDsKKworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9HUElPKDApLCBtYWluc3RvbmVfaXJxX2hhbmRsZXIpOworCXNldF9pcnFfdHlwZShJUlFfR1BJTygwKSwgSVJRVF9GQUxMSU5HKTsKK30KKworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IChNU1RfRVRIX1BIWVMgKyAweDMwMCksCisJCS5lbmQJPSAoTVNUX0VUSF9QSFlTICsgMHhmZmZmZiksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBNQUlOU1RPTkVfSVJRKDMpLAorCQkuZW5kCT0gTUFJTlNUT05FX0lSUSgzKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21jOTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21jOTF4IiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21jOTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc21jOTF4X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBpbnQgbXN0X2F1ZGlvX3N0YXJ0dXAoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLCB2b2lkICpwcml2KQoreworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlNU1RfTVNDV1IyICY9IH5NU1RfTVNDV1IyX0FDOTdfU1BLUk9GRjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXN0X2F1ZGlvX3NodXRkb3duKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgdm9pZCAqcHJpdikKK3sKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJTVNUX01TQ1dSMiB8PSBNU1RfTVNDV1IyX0FDOTdfU1BLUk9GRjsKK30KKworc3RhdGljIGxvbmcgbXN0X2F1ZGlvX3N1c3BlbmRfbWFzazsKKworc3RhdGljIHZvaWQgbXN0X2F1ZGlvX3N1c3BlbmQodm9pZCAqcHJpdikKK3sKKwltc3RfYXVkaW9fc3VzcGVuZF9tYXNrID0gTVNUX01TQ1dSMjsKKwlNU1RfTVNDV1IyIHw9IE1TVF9NU0NXUjJfQUM5N19TUEtST0ZGOworfQorCitzdGF0aWMgdm9pZCBtc3RfYXVkaW9fcmVzdW1lKHZvaWQgKnByaXYpCit7CisJTVNUX01TQ1dSMiAmPSBtc3RfYXVkaW9fc3VzcGVuZF9tYXNrIHwgfk1TVF9NU0NXUjJfQUM5N19TUEtST0ZGOworfQorCitzdGF0aWMgcHhhMnh4X2F1ZGlvX29wc190IG1zdF9hdWRpb19vcHMgPSB7CisJLnN0YXJ0dXAJPSBtc3RfYXVkaW9fc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBtc3RfYXVkaW9fc2h1dGRvd24sCisJLnN1c3BlbmQJPSBtc3RfYXVkaW9fc3VzcGVuZCwKKwkucmVzdW1lCQk9IG1zdF9hdWRpb19yZXN1bWUsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc3RfYXVkaW9fZGV2aWNlID0geworCS5uYW1lCQk9ICJweGEyeHgtYWM5NyIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geyAucGxhdGZvcm1fZGF0YSA9ICZtc3RfYXVkaW9fb3BzIH0sCit9OworCitzdGF0aWMgdm9pZCBtYWluc3RvbmVfYmFja2xpZ2h0X3Bvd2VyKGludCBvbikKK3sKKwlpZiAob24pIHsKKwkJcHhhX2dwaW9fbW9kZShHUElPMTZfUFdNMF9NRCk7CisJCXB4YV9zZXRfY2tlbihDS0VOMF9QV00wLCAxKTsKKwkJUFdNX0NUUkwwID0gMDsKKwkJUFdNX1BXRFVUWTAgPSAweDNmZjsKKwkJUFdNX1BFUlZBTDAgPSAweDNmZjsKKwl9IGVsc2UgeworCQlQV01fQ1RSTDAgPSAwOworCQlQV01fUFdEVVRZMCA9IDB4MDsKKwkJUFdNX1BFUlZBTDAgPSAweDNGRjsKKwkJcHhhX3NldF9ja2VuKENLRU4wX1BXTTAsIDApOworCX0KK30KKworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gdG9zaGliYV9sdG0wNGMzODBrIF9faW5pdGRhdGEgPSB7CisJLnBpeGNsb2NrCQk9IDUwMDAwLAorCS54cmVzCQkJPSA2NDAsCisJLnlyZXMJCQk9IDQ4MCwKKwkuYnBwCQkJPSAxNiwKKwkuaHN5bmNfbGVuCQk9IDEsCisJLmxlZnRfbWFyZ2luCQk9IDB4OWYsCisJLnJpZ2h0X21hcmdpbgkJPSAxLAorCS52c3luY19sZW4JCT0gNDQsCisJLnVwcGVyX21hcmdpbgkJPSAwLAorCS5sb3dlcl9tYXJnaW4JCT0gMCwKKwkuc3luYwkJCT0gRkJfU1lOQ19IT1JfSElHSF9BQ1R8RkJfU1lOQ19WRVJUX0hJR0hfQUNULAorCS5sY2NyMAkJCT0gTENDUjBfQWN0LAorCS5sY2NyMwkJCT0gTENDUjNfUENQLAorCS5weGFmYl9iYWNrbGlnaHRfcG93ZXIJPSBtYWluc3RvbmVfYmFja2xpZ2h0X3Bvd2VyLAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gdG9zaGliYV9sdG0wMzVhNzc2YyBfX2luaXRkYXRhID0geworCS5waXhjbG9jawkJPSAxMTAwMDAsCisJLnhyZXMJCQk9IDI0MCwKKwkueXJlcwkJCT0gMzIwLAorCS5icHAJCQk9IDE2LAorCS5oc3luY19sZW4JCT0gNCwKKwkubGVmdF9tYXJnaW4JCT0gOCwKKwkucmlnaHRfbWFyZ2luCQk9IDIwLAorCS52c3luY19sZW4JCT0gMywKKwkudXBwZXJfbWFyZ2luCQk9IDEsCisJLmxvd2VyX21hcmdpbgkJPSAxMCwKKwkuc3luYwkJCT0gRkJfU1lOQ19IT1JfSElHSF9BQ1R8RkJfU1lOQ19WRVJUX0hJR0hfQUNULAorCS5sY2NyMAkJCT0gTENDUjBfQWN0LAorCS5sY2NyMwkJCT0gTENDUjNfUENQLAorCS5weGFmYl9iYWNrbGlnaHRfcG93ZXIJPSBtYWluc3RvbmVfYmFja2xpZ2h0X3Bvd2VyLAorfTsKKworc3RhdGljIGludCBtYWluc3RvbmVfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFyZXR1cm5fdCAoKm1zdG9uZV9kZXRlY3RfaW50KShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksIHZvaWQgKmRhdGEpCit7CisJaW50IGVycjsKKworCS8qCisJICogc2V0dXAgR1BJTyBmb3IgUFhBMjd4IE1NQyBjb250cm9sbGVyCisJICovCisJcHhhX2dwaW9fbW9kZShHUElPMzJfTU1DQ0xLX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU8xMTJfTU1DQ01EX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU85Ml9NTUNEQVQwX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU8xMDlfTU1DREFUMV9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPMTEwX01NQ0RBVDJfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzExMV9NTUNEQVQzX01EKTsKKworCS8qIG1ha2Ugc3VyZSBTRC9NZW1vcnkgU3RpY2sgbXVsdGlwbGV4ZXIncyBzaWduYWxzCisJICogYXJlIHJvdXRlZCB0byBNTUMgY29udHJvbGxlcgorCSAqLworCU1TVF9NU0NXUjEgJj0gfk1TVF9NU0NXUjFfTVNfU0VMOworCisJZXJyID0gcmVxdWVzdF9pcnEoTUFJTlNUT05FX01NQ19JUlEsIG1zdG9uZV9kZXRlY3RfaW50LCBTQV9JTlRFUlJVUFQsCisJCQkgICAgICJNTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWFpbnN0b25lX21jaV9pbml0OiBNTUMvU0Q6IGNhbid0IHJlcXVlc3QgTU1DIGNhcmQgZGV0ZWN0IElSUVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWFpbnN0b25lX21jaV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCit7CisJc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhKiBwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoKCAxIDw8IHZkZCkgJiBwX2QtPm9jcl9tYXNrKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogb25cbiIsIF9fRlVOQ1RJT05fXyk7CisJCU1TVF9NU0NXUjEgfD0gTVNUX01TQ1dSMV9NTUNfT047CisJCU1TVF9NU0NXUjEgJj0gfk1TVF9NU0NXUjFfTVNfU0VMOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogb2ZmXG4iLCBfX0ZVTkNUSU9OX18pOworCQlNU1RfTVNDV1IxICY9IH5NU1RfTVNDV1IxX01NQ19PTjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1haW5zdG9uZV9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJZnJlZV9pcnEoTUFJTlNUT05FX01NQ19JUlEsIGRhdGEpOworfQorCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIG1haW5zdG9uZV9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKKwkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmluaXQgCQk9IG1haW5zdG9uZV9tY2lfaW5pdCwKKwkuc2V0cG93ZXIgCT0gbWFpbnN0b25lX21jaV9zZXRwb3dlciwKKwkuZXhpdAkJPSBtYWluc3RvbmVfbWNpX2V4aXQsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbWFpbnN0b25lX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIE9uIE1haW5zdG9uZSwgd2Ugcm91dGUgQUM5N19TWVNDTEsgdmlhIEdQSU80NSB0bworCSAqIHRoZSBhdWRpbyBkYXVnaHRlciBjYXJkCisJICovCisJcHhhX2dwaW9fbW9kZShHUElPNDVfU1lTQ0xLX0FDOTdfTUQpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzbWM5MXhfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1zdF9hdWRpb19kZXZpY2UpOworCisJLyogcmVhZGluZyBNYWluc3RvbmUncyAiVmlydHVhbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIgorCSAgIG1pZ2h0IGJlIGhhbmR5IHRvIHNlbGVjdCBMQ0QgdHlwZSBoZXJlICovCisJaWYgKDApCisJCXNldF9weGFfZmJfaW5mbygmdG9zaGliYV9sdG0wNGMzODBrKTsKKwllbHNlCisJCXNldF9weGFfZmJfaW5mbygmdG9zaGliYV9sdG0wMzVhNzc2Yyk7CisKKwlweGFfc2V0X21jaV9pbmZvKCZtYWluc3RvbmVfbWNpX3BsYXRmb3JtX2RhdGEpOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbWFpbnN0b25lX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworICB7IE1TVF9GUEdBX1ZJUlQsIE1TVF9GUEdBX1BIWVMsIDB4MDAxMDAwMDAsIE1UX0RFVklDRSB9LCAvKiBDUExEICovCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbWFpbnN0b25lX21hcF9pbyh2b2lkKQoreworCXB4YV9tYXBfaW8oKTsKKwlpb3RhYmxlX2luaXQobWFpbnN0b25lX2lvX2Rlc2MsIEFSUkFZX1NJWkUobWFpbnN0b25lX2lvX2Rlc2MpKTsKKworCS8qIGluaXRpYWxpemUgc2xlZXAgbW9kZSByZWdzICh3YWtlLXVwIHNvdXJjZXMsIGV0YykgKi8KKwlQR1NSMCA9IDB4MDAwMDg4MDA7CisJUEdTUjEgPSAweDAwMDAwMDAyOworCVBHU1IyID0gMHgwMDAxRkMwMDsKKwlQR1NSMyA9IDB4MDAwMDFGODE7CisJUFdFUiAgPSAweEMwMDAwMDAyOworCVBSRVIgID0gMHgwMDAwMDAwMjsKKwlQRkVSICA9IDB4MDAwMDAwMDI7Cit9CisKK01BQ0hJTkVfU1RBUlQoTUFJTlNUT05FLCAiSW50ZWwgSENEREJCVkEwIERldmVsb3BtZW50IFBsYXRmb3JtIChha2EgTWFpbnN0b25lKSIpCisJTUFJTlRBSU5FUigiTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuIikKKwlCT09UX01FTSgweGEwMDAwMDAwLCAweDQwMDAwMDAwLCBpb19wMnYoMHg0MDAwMDAwMCkpCisJTUFQSU8obWFpbnN0b25lX21hcF9pbykKKwlJTklUSVJRKG1haW5zdG9uZV9pbml0X2lycSkKKwkudGltZXIJCT0gJnB4YV90aW1lciwKKwlJTklUX01BQ0hJTkUobWFpbnN0b25lX2luaXQpCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcG0uYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJhNGJmMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BtLmMKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBQWEEyNTAvMjEwIFBvd2VyIE1hbmFnZW1lbnQgUm91dGluZXMKKyAqCisgKiBPcmlnaW5hbCBjb2RlIGZvciB0aGUgU0ExMXgwOgorICogQ29weXJpZ2h0IChjKSAyMDAxIENsaWZmIEJyYWtlIDxjYnJha2VAYWNjZWxlbnQuY29tPgorICoKKyAqIE1vZGlmaWVkIGZvciB0aGUgUFhBMjUwIGJ5IE5pY29sYXMgUGl0cmU6CisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgTW9udGEgVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbHViYm9jay5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworCisvKgorICogRGVidWcgbWFjcm9zCisgKi8KKyN1bmRlZiBERUJVRworCitleHRlcm4gdm9pZCBweGFfY3B1X3N1c3BlbmQodm9pZCk7CitleHRlcm4gdm9pZCBweGFfY3B1X3Jlc3VtZSh2b2lkKTsKKworI2RlZmluZSBTQVZFKHgpCQlzbGVlcF9zYXZlW1NMRUVQX1NBVkVfIyN4XSA9IHgKKyNkZWZpbmUgUkVTVE9SRSh4KQl4ID0gc2xlZXBfc2F2ZVtTTEVFUF9TQVZFXyMjeF0KKworI2RlZmluZSBSRVNUT1JFX0dQTEVWRUwobikgZG8geyBcCisJR1BTUiMjbiA9IHNsZWVwX3NhdmVbU0xFRVBfU0FWRV9HUExSIyNuXTsgXAorCUdQQ1IjI24gPSB+c2xlZXBfc2F2ZVtTTEVFUF9TQVZFX0dQTFIjI25dOyBcCit9IHdoaWxlICgwKQorCisvKgorICogTGlzdCBvZiBnbG9iYWwgUFhBIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHRvIHByZXNlcnZlLgorICogTW9yZSBvbmVzIGxpa2UgQ1AgYW5kIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlciB2YWx1ZXMgYXJlIHByZXNlcnZlZAorICogd2l0aCB0aGUgc3RhY2sgcG9pbnRlciBpbiBzbGVlcC5TLgorICovCitlbnVtIHsJU0xFRVBfU0FWRV9TVEFSVCA9IDAsCisKKwlTTEVFUF9TQVZFX0dQTFIwLCBTTEVFUF9TQVZFX0dQTFIxLCBTTEVFUF9TQVZFX0dQTFIyLCBTTEVFUF9TQVZFX0dQTFIzLAorCVNMRUVQX1NBVkVfR1BEUjAsIFNMRUVQX1NBVkVfR1BEUjEsIFNMRUVQX1NBVkVfR1BEUjIsIFNMRUVQX1NBVkVfR1BEUjMsCisJU0xFRVBfU0FWRV9HUkVSMCwgU0xFRVBfU0FWRV9HUkVSMSwgU0xFRVBfU0FWRV9HUkVSMiwgU0xFRVBfU0FWRV9HUkVSMywKKwlTTEVFUF9TQVZFX0dGRVIwLCBTTEVFUF9TQVZFX0dGRVIxLCBTTEVFUF9TQVZFX0dGRVIyLCBTTEVFUF9TQVZFX0dGRVIzLAorCVNMRUVQX1NBVkVfUEdTUjAsIFNMRUVQX1NBVkVfUEdTUjEsIFNMRUVQX1NBVkVfUEdTUjIsIFNMRUVQX1NBVkVfUEdTUjMsCisKKwlTTEVFUF9TQVZFX0dBRlIwX0wsIFNMRUVQX1NBVkVfR0FGUjBfVSwKKwlTTEVFUF9TQVZFX0dBRlIxX0wsIFNMRUVQX1NBVkVfR0FGUjFfVSwKKwlTTEVFUF9TQVZFX0dBRlIyX0wsIFNMRUVQX1NBVkVfR0FGUjJfVSwKKwlTTEVFUF9TQVZFX0dBRlIzX0wsIFNMRUVQX1NBVkVfR0FGUjNfVSwKKworCVNMRUVQX1NBVkVfUFNUUiwKKworCVNMRUVQX1NBVkVfSUNNUiwKKwlTTEVFUF9TQVZFX0NLRU4sCisKKwlTTEVFUF9TQVZFX0NLU1VNLAorCisJU0xFRVBfU0FWRV9TSVpFCit9OworCisKK3N0YXRpYyBpbnQgcHhhX3BtX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHNsZWVwX3NhdmVbU0xFRVBfU0FWRV9TSVpFXTsKKwl1bnNpZ25lZCBsb25nIGNoZWNrc3VtID0gMDsKKwlzdHJ1Y3QgdGltZXNwZWMgZGVsdGEsIHJ0YzsKKwlpbnQgaTsKKworCWlmIChzdGF0ZSAhPSBQTV9TVVNQRU5EX01FTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKyNpZmRlZiBDT05GSUdfSVdNTVhUCisJLyogZm9yY2UgYW55IGlXTU1YdCBjb250ZXh0IHRvIHJhbSAqKi8KKwlpd21teHRfdGFza19kaXNhYmxlKE5VTEwpOworI2VuZGlmCisKKwkvKiBwcmVzZXJ2ZSBjdXJyZW50IHRpbWUgKi8KKwlydGMudHZfc2VjID0gUkNOUjsKKwlydGMudHZfbnNlYyA9IDA7CisJc2F2ZV90aW1lX2RlbHRhKCZkZWx0YSwgJnJ0Yyk7CisKKwlTQVZFKEdQTFIwKTsgU0FWRShHUExSMSk7IFNBVkUoR1BMUjIpOworCVNBVkUoR1BEUjApOyBTQVZFKEdQRFIxKTsgU0FWRShHUERSMik7CisJU0FWRShHUkVSMCk7IFNBVkUoR1JFUjEpOyBTQVZFKEdSRVIyKTsKKwlTQVZFKEdGRVIwKTsgU0FWRShHRkVSMSk7IFNBVkUoR0ZFUjIpOworCVNBVkUoUEdTUjApOyBTQVZFKFBHU1IxKTsgU0FWRShQR1NSMik7CisKKwlTQVZFKEdBRlIwX0wpOyBTQVZFKEdBRlIwX1UpOworCVNBVkUoR0FGUjFfTCk7IFNBVkUoR0FGUjFfVSk7CisJU0FWRShHQUZSMl9MKTsgU0FWRShHQUZSMl9VKTsKKworI2lmZGVmIENPTkZJR19QWEEyN3gKKwlTQVZFKEdQTFIzKTsgU0FWRShHUERSMyk7IFNBVkUoR1JFUjMpOyBTQVZFKEdGRVIzKTsgU0FWRShQR1NSMyk7CisJU0FWRShHQUZSM19MKTsgU0FWRShHQUZSM19VKTsKKyNlbmRpZgorCisJU0FWRShJQ01SKTsKKwlJQ01SID0gMDsKKworCVNBVkUoQ0tFTik7CisJQ0tFTiA9IDA7CisKKwlTQVZFKFBTVFIpOworCisJLyogTm90ZTogd2FrZSB1cCBzb3VyY2UgYXJlIHNldCB1cCBpbiBlYWNoIG1hY2hpbmUgc3BlY2lmaWMgZmlsZXMgKi8KKworCS8qIGNsZWFyIEdQSU8gdHJhbnNpdGlvbiBkZXRlY3QgIGJpdHMgKi8KKwlHRURSMCA9IEdFRFIwOyBHRURSMSA9IEdFRFIxOyBHRURSMiA9IEdFRFIyOworI2lmZGVmIENPTkZJR19QWEEyN3gKKwlHRURSMyA9IEdFRFIzOworI2VuZGlmCisKKwkvKiBDbGVhciBzbGVlcCByZXNldCBzdGF0dXMgKi8KKwlSQ1NSID0gUkNTUl9TTVI7CisKKwkvKiBzZXQgcmVzdW1lIHJldHVybiBhZGRyZXNzICovCisJUFNQUiA9IHZpcnRfdG9fcGh5cyhweGFfY3B1X3Jlc3VtZSk7CisKKwkvKiBiZWZvcmUgc2xlZXBpbmcsIGNhbGN1bGF0ZSBhbmQgc2F2ZSBhIGNoZWNrc3VtICovCisJZm9yIChpID0gMDsgaSA8IFNMRUVQX1NBVkVfU0laRSAtIDE7IGkrKykKKwkJY2hlY2tzdW0gKz0gc2xlZXBfc2F2ZVtpXTsKKwlzbGVlcF9zYXZlW1NMRUVQX1NBVkVfQ0tTVU1dID0gY2hlY2tzdW07CisKKwkvKiAqKiogZ28genp6ICoqKiAqLworCXB4YV9jcHVfc3VzcGVuZCgpOworCisJLyogYWZ0ZXIgc2xlZXBpbmcsIHZhbGlkYXRlIHRoZSBjaGVja3N1bSAqLworCWNoZWNrc3VtID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgU0xFRVBfU0FWRV9TSVpFIC0gMTsgaSsrKQorCQljaGVja3N1bSArPSBzbGVlcF9zYXZlW2ldOworCisJLyogaWYgaW52YWxpZCwgZGlzcGxheSBtZXNzYWdlIGFuZCB3YWl0IGZvciBhIGhhcmR3YXJlIHJlc2V0ICovCisJaWYgKGNoZWNrc3VtICE9IHNsZWVwX3NhdmVbU0xFRVBfU0FWRV9DS1NVTV0pIHsKKyNpZmRlZiBDT05GSUdfQVJDSF9MVUJCT0NLCisJCUxVQl9IRVhMRUQgPSAweGJhZGJhZGM1OworI2VuZGlmCisJCXdoaWxlICgxKQorCQkJcHhhX2NwdV9zdXNwZW5kKCk7CisJfQorCisJLyogZW5zdXJlIG5vdCB0byBjb21lIGJhY2sgaGVyZSBpZiBpdCB3YXNuJ3QgaW50ZW5kZWQgKi8KKwlQU1BSID0gMDsKKworCS8qIHJlc3RvcmUgcmVnaXN0ZXJzICovCisJUkVTVE9SRShHQUZSMF9MKTsgUkVTVE9SRShHQUZSMF9VKTsKKwlSRVNUT1JFKEdBRlIxX0wpOyBSRVNUT1JFKEdBRlIxX1UpOworCVJFU1RPUkUoR0FGUjJfTCk7IFJFU1RPUkUoR0FGUjJfVSk7CisJUkVTVE9SRV9HUExFVkVMKDApOyBSRVNUT1JFX0dQTEVWRUwoMSk7IFJFU1RPUkVfR1BMRVZFTCgyKTsKKwlSRVNUT1JFKEdQRFIwKTsgUkVTVE9SRShHUERSMSk7IFJFU1RPUkUoR1BEUjIpOworCVJFU1RPUkUoR1JFUjApOyBSRVNUT1JFKEdSRVIxKTsgUkVTVE9SRShHUkVSMik7CisJUkVTVE9SRShHRkVSMCk7IFJFU1RPUkUoR0ZFUjEpOyBSRVNUT1JFKEdGRVIyKTsKKwlSRVNUT1JFKFBHU1IwKTsgUkVTVE9SRShQR1NSMSk7IFJFU1RPUkUoUEdTUjIpOworCisjaWZkZWYgQ09ORklHX1BYQTI3eAorCVJFU1RPUkUoR0FGUjNfTCk7IFJFU1RPUkUoR0FGUjNfVSk7IFJFU1RPUkVfR1BMRVZFTCgzKTsKKwlSRVNUT1JFKEdQRFIzKTsgUkVTVE9SRShHUkVSMyk7IFJFU1RPUkUoR0ZFUjMpOyBSRVNUT1JFKFBHU1IzKTsKKyNlbmRpZgorCisJUFNTUiA9IFBTU1JfUkRIIHwgUFNTUl9QSDsKKworCVJFU1RPUkUoQ0tFTik7CisKKwlJQ0xSID0gMDsKKwlJQ0NSID0gMTsKKwlSRVNUT1JFKElDTVIpOworCisJUkVTVE9SRShQU1RSKTsKKworCS8qIHJlc3RvcmUgY3VycmVudCB0aW1lICovCisJcnRjLnR2X3NlYyA9IFJDTlI7CisJcmVzdG9yZV90aW1lX2RlbHRhKCZkZWx0YSwgJnJ0Yyk7CisKKyNpZmRlZiBERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIqKiogbWFkZSBpdCBiYWNrIGZyb20gcmVzdW1lXG4iKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGxvbmcgc2xlZXBfcGh5c19zcCh2b2lkICpzcCkKK3sKKwlyZXR1cm4gdmlydF90b19waHlzKHNwKTsKK30KKworLyoKKyAqIENhbGxlZCBhZnRlciBwcm9jZXNzZXMgYXJlIGZyb3plbiwgYnV0IGJlZm9yZSB3ZSBzaHV0IGRvd24gZGV2aWNlcy4KKyAqLworc3RhdGljIGludCBweGFfcG1fcHJlcGFyZShzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxsZWQgYWZ0ZXIgZGV2aWNlcyBhcmUgcmUtc2V0dXAsIGJ1dCBiZWZvcmUgcHJvY2Vzc2VzIGFyZSB0aGF3ZWQuCisgKi8KK3N0YXRpYyBpbnQgcHhhX3BtX2ZpbmlzaChzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgdG8gUE1fRElTS19GSVJNV0FSRSBzbyB3ZSBjYW4gcXVpY2tseSB2ZXRvIHN1c3BlbmQtdG8tZGlzay4KKyAqLworc3RhdGljIHN0cnVjdCBwbV9vcHMgcHhhX3BtX29wcyA9IHsKKwkucG1fZGlza19tb2RlCT0gUE1fRElTS19GSVJNV0FSRSwKKwkucHJlcGFyZQk9IHB4YV9wbV9wcmVwYXJlLAorCS5lbnRlcgkJPSBweGFfcG1fZW50ZXIsCisJLmZpbmlzaAkJPSBweGFfcG1fZmluaXNoLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcHhhX3BtX2luaXQodm9pZCkKK3sKKwlwbV9zZXRfb3BzKCZweGFfcG1fb3BzKTsKKwlyZXR1cm4gMDsKK30KKworbGF0ZV9pbml0Y2FsbChweGFfcG1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2Yzc0NmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYwpAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCisgKgorICogIFN1cHBvcnQgZm9yIHRoZSBTSEFSUCBQb29kbGUgQm9hcmQuCisgKgorICogQmFzZWQgb246CisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jIEF1dGhvcjoJTmljb2xhcyBQaXRyZQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ2hhbmdlIExvZworICogIDEyLURlYy0yMDAyIFNoYXJwIENvcnBvcmF0aW9uIGZvciBQb29kbGUKKyAqICBKb2huIExlbnogPGxlbnpAY3Mud2lzYy5lZHU+IHVwZGF0ZXMgdG8gMi42CisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wb29kbGUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGFmYi5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3Njb29wLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2xvY29tby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3NoYXJwc2xfcGFyYW0uaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwb29kbGVfc2Nvb3BfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJCT0gMHgxMDgwMDAwMCwKKwkJLmVuZAkJPSAweDEwODAwZmZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2Nvb3BfY29uZmlnIHBvb2RsZV9zY29vcF9zZXR1cCA9IHsKKwkuaW9fZGlyCQk9IFBPT0RMRV9TQ09PUF9JT19ESVIsCisJLmlvX291dAkJPSBQT09ETEVfU0NPT1BfSU9fT1VULAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBwb29kbGVfc2Nvb3BfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaGFycC1zY29vcCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZwb29kbGVfc2Nvb3Bfc2V0dXAsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocG9vZGxlX3Njb29wX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gcG9vZGxlX3Njb29wX3Jlc291cmNlcywKK307CisKKworLyogTG9Db01vIGRldmljZSAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsb2NvbW9fcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJCT0gMHgxMDAwMDAwMCwKKwkJLmVuZAkJPSAweDEwMDAxZmZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAkJPSBJUlFfR1BJTygxMCksCisJCS5lbmQJCT0gSVJRX0dQSU8oMTApLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxvY29tb19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImxvY29tbyIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGxvY29tb19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGxvY29tb19yZXNvdXJjZXMsCit9OworCisvKiBQWEFGQiBkZXZpY2UgKi8KK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIHBvb2RsZV9mYl9pbmZvIF9faW5pdGRhdGEgPSB7CisJLnBpeGNsb2NrCT0gMTQ0NzAwLAorCisJLnhyZXMJCT0gMzIwLAorCS55cmVzCQk9IDI0MCwKKwkuYnBwCQk9IDE2LAorCisJLmhzeW5jX2xlbgk9IDcsCisJLmxlZnRfbWFyZ2luCT0gMTEsCisJLnJpZ2h0X21hcmdpbgk9IDMwLAorCisJLnZzeW5jX2xlbgk9IDIsCisJLnVwcGVyX21hcmdpbgk9IDIsCisJLmxvd2VyX21hcmdpbgk9IDAsCisJLnN5bmMJCT0gRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsCisKKwkubGNjcjAJCT0gTENDUjBfQWN0IHwgTENDUjBfU25nbCB8IExDQ1IwX0NvbG9yLAorCS5sY2NyMwkJPSAwLAorCisJLnB4YWZiX2JhY2tsaWdodF9wb3dlcgk9IE5VTEwsCisJLnB4YWZiX2xjZF9wb3dlcgk9IE5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmxvY29tb19kZXZpY2UsCisJJnBvb2RsZV9zY29vcF9kZXZpY2UsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcG9vZGxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCS8qIGNwdSBpbml0aWFsaXplICovCisJLyogUGdzciBSZWdpc3RlciAqLworICAJUEdTUjAgPSAweDAxNDZkZDgwOworICAJUEdTUjEgPSAweDAzYmYwODkwOworICAJUEdTUjIgPSAweDAwMDFjMDAwOworCisJLyogQWx0ZXJuYXRlIFJlZ2lzdGVyICovCisgIAlHQUZSMF9MID0gMHgwMTAwMTAwMDsKKyAgCUdBRlIwX1UgPSAweDU5MWE4MDEwOworICAJR0FGUjFfTCA9IDB4OTAwYTg0NTE7CisgIAlHQUZSMV9VID0gMHhhYWE1YWFhYTsKKyAgCUdBRlIyX0wgPSAweDhhYWFhYWFhOworICAJR0FGUjJfVSA9IDB4MDAwMDAwMDI7CisKKwkvKiBEaXJlY3Rpb24gUmVnaXN0ZXIgKi8KKyAgCUdQRFIwID0gMHhkM2YwOTA0YzsKKyAgCUdQRFIxID0gMHhmY2ZmYjdkMzsKKyAgCUdQRFIyID0gMHgwMDAxZmZmZjsKKworCS8qIE91dHB1dCBSZWdpc3RlciAqLworICAJR1BDUjAgPSAweDAwMDAwMDAwOworICAJR1BDUjEgPSAweDAwMDAwMDAwOworICAJR1BDUjIgPSAweDAwMDAwMDAwOworCisgIAlHUFNSMCA9IDB4MDA0MDAwMDA7CisgIAlHUFNSMSA9IDB4MDAwMDAwMDA7CisgICAgICAgIEdQU1IyID0gMHgwMDAwMDAwMDsKKworCXNldF9weGFfZmJfaW5mbygmcG9vZGxlX2ZiX2luZm8pOworCisJcmV0ID0gcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJwb29kbGU6IFVuYWJsZSB0byByZWdpc3RlciBMb0NvTW8gZGV2aWNlXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBmaXh1cF9wb29kbGUoc3RydWN0IG1hY2hpbmVfZGVzYyAqZGVzYywKKwkJc3RydWN0IHRhZyAqdGFncywgY2hhciAqKmNtZGxpbmUsIHN0cnVjdCBtZW1pbmZvICptaSkKK3sKKwlzaGFycHNsX3NhdmVfcGFyYW0oKTsKK30KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBwb29kbGVfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisgLyogdmlydHVhbCAgICAgcGh5c2ljYWwgICAgbGVuZ3RoICAgICAgICAgICAgICAgICAgICovCisgIHsgMHhlZjgwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgTVRfREVWSUNFIH0sIC8qIEJvb3QgRmxhc2ggKi8KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwb29kbGVfbWFwX2lvKHZvaWQpCit7CisJcHhhX21hcF9pbygpOworCWlvdGFibGVfaW5pdChwb29kbGVfaW9fZGVzYywgQVJSQVlfU0laRShwb29kbGVfaW9fZGVzYykpOworCisJLyogc2V0dXAgc2xlZXAgbW9kZSB2YWx1ZXMgKi8KKwlQV0VSICA9IDB4MDAwMDAwMDI7CisJUEZFUiAgPSAweDAwMDAwMDAwOworCVBSRVIgID0gMHgwMDAwMDAwMjsKKwlQR1NSMCA9IDB4MDAwMDgwMDA7CisJUEdTUjEgPSAweDAwM0YwMjAyOworCVBHU1IyID0gMHgwMDAxQzAwMDsKKwlQQ0ZSIHw9IFBDRlJfT1BERTsKK30KKworTUFDSElORV9TVEFSVChQT09ETEUsICJTSEFSUCBQb29kbGUiKQorCUJPT1RfTUVNKDB4YTAwMDAwMDAsIDB4NDAwMDAwMDAsIGlvX3AydigweDQwMDAwMDAwKSkKKwlGSVhVUChmaXh1cF9wb29kbGUpCisJTUFQSU8ocG9vZGxlX21hcF9pbykKKwlJTklUSVJRKHB4YV9pbml0X2lycSkKKwkudGltZXIgPSAmcHhhX3RpbWVyLAorCS5pbml0X21hY2hpbmUgPSBwb29kbGVfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ODdiNzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYwpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYworICoKKyAqICBBdXRob3I6CU5pY29sYXMgUGl0cmUKKyAqICBDcmVhdGVkOglKdW4gMTUsIDIwMDEKKyAqICBDb3B5cmlnaHQ6CU1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqIENvZGUgc3BlY2lmaWMgdG8gUFhBMjF4LzI1eC8yNnggdmFyaWFudHMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBTaW5jZSB0aGlzIGZpbGUgc2hvdWxkIGJlIGxpbmtlZCBiZWZvcmUgYW55IG90aGVyIG1hY2hpbmUgc3BlY2lmaWMgZmlsZSwKKyAqIHRoZSBfX2luaXRjYWxsKCkgaGVyZSB3aWxsIGJlIGV4ZWN1dGVkIGZpcnN0LiAgVGhpcyBzZXJ2ZXMgYXMgZGVmYXVsdAorICogaW5pdGlhbGl6YXRpb24gc3R1ZmYgZm9yIFBYQSBtYWNoaW5lcyB3aGljaCBjYW4gYmUgb3ZlcnJpZGRlbiBsYXRlciBpZgorICogbmVlZCBiZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKworLyoKKyAqIFZhcmlvdXMgY2xvY2sgZmFjdG9ycyBkcml2ZW4gYnkgdGhlIENDQ1IgcmVnaXN0ZXIuCisgKi8KKworLyogQ3J5c3RhbCBGcmVxdWVuY3kgdG8gTWVtb3J5IEZyZXF1ZW5jeSBNdWx0aXBsaWVyIChMKSAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgTF9jbGtfbXVsdFszMl0gPSB7IDAsIDI3LCAzMiwgMzYsIDQwLCA0NSwgMCwgfTsKKworLyogTWVtb3J5IEZyZXF1ZW5jeSB0byBSdW4gTW9kZSBGcmVxdWVuY3kgTXVsdGlwbGllciAoTSkgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIE1fY2xrX211bHRbNF0gPSB7IDAsIDEsIDIsIDQgfTsKKworLyogUnVuIE1vZGUgRnJlcXVlbmN5IHRvIFR1cmJvIE1vZGUgRnJlcXVlbmN5IE11bHRpcGxpZXIgKE4pICovCisvKiBOb3RlOiB3ZSBzdG9yZSB0aGUgdmFsdWUgTiAqIDIgaGVyZS4gKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIE4yX2Nsa19tdWx0WzhdID0geyAwLCAwLCAyLCAzLCA0LCAwLCA2LCAwIH07CisKKy8qIENyeXN0YWwgY2xvY2sgKi8KKyNkZWZpbmUgQkFTRV9DTEsJMzY4NjQwMAorCisvKgorICogR2V0IHRoZSBjbG9jayBmcmVxdWVuY3kgYXMgcmVmbGVjdGVkIGJ5IENDQ1IgYW5kIHRoZSB0dXJibyBmbGFnLgorICogV2UgYXNzdW1lIHRoZXNlIHZhbHVlcyBoYXZlIGJlZW4gYXBwbGllZCB2aWEgYSBmY3MuCisgKiBJZiBpbmZvIGlzIG5vdCAwIHdlIGFsc28gZGlzcGxheSB0aGUgY3VycmVudCBzZXR0aW5ncy4KKyAqLwordW5zaWduZWQgaW50IGdldF9jbGtfZnJlcXVlbmN5X2toeihpbnQgaW5mbykKK3sKKwl1bnNpZ25lZCBsb25nIGNjY3IsIHR1cmJvOworCXVuc2lnbmVkIGludCBsLCBMLCBtLCBNLCBuMiwgTjsKKworCWNjY3IgPSBDQ0NSOworCWFzbSggIm1yY1x0cDE0LCAwLCAlMCwgYzYsIGMwLCAwIiA6ICI9ciIgKHR1cmJvKSApOworCisJbCAgPSAgTF9jbGtfbXVsdFsoY2NjciA+PiAwKSAmIDB4MWZdOworCW0gID0gIE1fY2xrX211bHRbKGNjY3IgPj4gNSkgJiAweDAzXTsKKwluMiA9IE4yX2Nsa19tdWx0WyhjY2NyID4+IDcpICYgMHgwN107CisKKwlMID0gbCAqIEJBU0VfQ0xLOworCU0gPSBtICogTDsKKwlOID0gbjIgKiBNIC8gMjsKKworCWlmKGluZm8pCisJeworCQlMICs9IDUwMDA7CisJCXByaW50ayggS0VSTl9JTkZPICJNZW1vcnkgY2xvY2s6ICVkLiUwMmRNSHogKColZClcbiIsCisJCQlMIC8gMTAwMDAwMCwgKEwgJSAxMDAwMDAwKSAvIDEwMDAwLCBsICk7CisJCU0gKz0gNTAwMDsKKwkJcHJpbnRrKCBLRVJOX0lORk8gIlJ1biBNb2RlIGNsb2NrOiAlZC4lMDJkTUh6ICgqJWQpXG4iLAorCQkJTSAvIDEwMDAwMDAsIChNICUgMTAwMDAwMCkgLyAxMDAwMCwgbSApOworCQlOICs9IDUwMDA7CisJCXByaW50ayggS0VSTl9JTkZPICJUdXJibyBNb2RlIGNsb2NrOiAlZC4lMDJkTUh6ICgqJWQuJWQsICVzYWN0aXZlKVxuIiwKKwkJCU4gLyAxMDAwMDAwLCAoTiAlIDEwMDAwMDApIC8gMTAwMDAsIG4yIC8gMiwgKG4yICUgMikgKiA1LAorCQkJKHR1cmJvICYgMSkgPyAiIiA6ICJpbiIgKTsKKwl9CisKKwlyZXR1cm4gKHR1cmJvICYgMSkgPyAoTi8xMDAwKSA6IChNLzEwMDApOworfQorCitFWFBPUlRfU1lNQk9MKGdldF9jbGtfZnJlcXVlbmN5X2toeik7CisKKy8qCisgKiBSZXR1cm4gdGhlIGN1cnJlbnQgbWVtb3J5IGNsb2NrIGZyZXF1ZW5jeSBpbiB1bml0cyBvZiAxMGtIegorICovCit1bnNpZ25lZCBpbnQgZ2V0X21lbWNsa19mcmVxdWVuY3lfMTBraHoodm9pZCkKK3sKKwlyZXR1cm4gTF9jbGtfbXVsdFsoQ0NDUiA+PiAwKSAmIDB4MWZdICogQkFTRV9DTEsgLyAxMDAwMDsKK30KKworRVhQT1JUX1NZTUJPTChnZXRfbWVtY2xrX2ZyZXF1ZW5jeV8xMGtoeik7CisKKy8qCisgKiBSZXR1cm4gdGhlIGN1cnJlbnQgTENEIGNsb2NrIGZyZXF1ZW5jeSBpbiB1bml0cyBvZiAxMGtIegorICovCit1bnNpZ25lZCBpbnQgZ2V0X2xjZGNsa19mcmVxdWVuY3lfMTBraHoodm9pZCkKK3sKKwlyZXR1cm4gZ2V0X21lbWNsa19mcmVxdWVuY3lfMTBraHooKTsKK30KKworRVhQT1JUX1NZTUJPTChnZXRfbGNkY2xrX2ZyZXF1ZW5jeV8xMGtoeik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlODYzYWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwpAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYworICoKKyAqICBBdXRob3I6CU5pY29sYXMgUGl0cmUKKyAqICBDcmVhdGVkOglOb3YgMDUsIDIwMDIKKyAqICBDb3B5cmlnaHQ6CU1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqIENvZGUgc3BlY2lmaWMgdG8gUFhBMjd4IGFrYSBCdWx2ZXJkZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKworLyogQ3J5c3RhbCBjbG9jazogMTNNSHogKi8KKyNkZWZpbmUgQkFTRV9DTEsJMTMwMDAwMDAKKworLyoKKyAqIEdldCB0aGUgY2xvY2sgZnJlcXVlbmN5IGFzIHJlZmxlY3RlZCBieSBDQ1NSIGFuZCB0aGUgdHVyYm8gZmxhZy4KKyAqIFdlIGFzc3VtZSB0aGVzZSB2YWx1ZXMgaGF2ZSBiZWVuIGFwcGxpZWQgdmlhIGEgZmNzLgorICogSWYgaW5mbyBpcyBub3QgMCB3ZSBhbHNvIGRpc3BsYXkgdGhlIGN1cnJlbnQgc2V0dGluZ3MuCisgKi8KK3Vuc2lnbmVkIGludCBnZXRfY2xrX2ZyZXF1ZW5jeV9raHooIGludCBpbmZvKQoreworCXVuc2lnbmVkIGxvbmcgY2NzciwgY2xrY2ZnOworCXVuc2lnbmVkIGludCBsLCBMLCBtLCBNLCBuMiwgTiwgUzsKKyAgICAgICAJaW50IGNjY3JfYSwgdCwgaHQsIGI7CisKKwljY3NyID0gQ0NTUjsKKwljY2NyX2EgPSBDQ0NSICYgKDEgPDwgMjUpOworCisJLyogUmVhZCBjbGtjZmcgcmVnaXN0ZXI6IGl0IGhhcyB0dXJibywgYiwgaGFsZi10dXJibyAoYW5kIGYpICovCisJYXNtKCAibXJjXHRwMTQsIDAsICUwLCBjNiwgYzAsIDAiIDogIj1yIiAoY2xrY2ZnKSApOworCXQgID0gY2xrY2ZnICYgKDEgPDwgMSk7CisJaHQgPSBjbGtjZmcgJiAoMSA8PCAyKTsKKwliICA9IGNsa2NmZyAmICgxIDw8IDMpOworCisJbCAgPSBjY3NyICYgMHgxZjsKKwluMiA9IChjY3NyPj43KSAmIDB4ZjsKKwltICA9IChsIDw9IDEwKSA/IDEgOiAobCA8PSAyMCkgPyAyIDogNDsKKworCUwgID0gbCAqIEJBU0VfQ0xLOworCU4gID0gKEwgKiBuMikgLyAyOworCU0gID0gKCFjY2NyX2EpID8gKEwvbSkgOiAoKGIpID8gTCA6IChMLzIpKTsKKwlTICA9IChiKSA/IEwgOiAoTC8yKTsKKworCWlmIChpbmZvKSB7CisJCXByaW50ayggS0VSTl9JTkZPICJSdW4gTW9kZSBjbG9jazogJWQuJTAyZE1IeiAoKiVkKVxuIiwKKwkJCUwgLyAxMDAwMDAwLCAoTCAlIDEwMDAwMDApIC8gMTAwMDAsIGwgKTsKKwkJcHJpbnRrKCBLRVJOX0lORk8gIlR1cmJvIE1vZGUgY2xvY2s6ICVkLiUwMmRNSHogKColZC4lZCwgJXNhY3RpdmUpXG4iLAorCQkJTiAvIDEwMDAwMDAsIChOICUgMTAwMDAwMCkvMTAwMDAsIG4yIC8gMiwgKG4yICUgMikqNSwKKwkJCSh0KSA/ICIiIDogImluIiApOworCQlwcmludGsoIEtFUk5fSU5GTyAiTWVtb3J5IGNsb2NrOiAlZC4lMDJkTUh6ICgvJWQpXG4iLAorCQkJTSAvIDEwMDAwMDAsIChNICUgMTAwMDAwMCkgLyAxMDAwMCwgbSApOworCQlwcmludGsoIEtFUk5fSU5GTyAiU3lzdGVtIGJ1cyBjbG9jazogJWQuJTAyZE1IeiBcbiIsCisJCQlTIC8gMTAwMDAwMCwgKFMgJSAxMDAwMDAwKSAvIDEwMDAwICk7CisJfQorCisJcmV0dXJuICh0KSA/IChOLzEwMDApIDogKEwvMTAwMCk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGN1cnJlbnQgbWVtIGNsb2NrIGZyZXF1ZW5jeSBpbiB1bml0cyBvZiAxMGtIeiBhcworICogcmVmbGVjdGVkIGJ5IENDQ1JbQV0sIEIsIGFuZCBMCisgKi8KK3Vuc2lnbmVkIGludCBnZXRfbWVtY2xrX2ZyZXF1ZW5jeV8xMGtoeih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgY2NzciwgY2xrY2ZnOworCXVuc2lnbmVkIGludCBsLCBMLCBtLCBNOworICAgICAgIAlpbnQgY2Njcl9hLCBiOworCisJY2NzciA9IENDU1I7CisJY2Njcl9hID0gQ0NDUiAmICgxIDw8IDI1KTsKKworCS8qIFJlYWQgY2xrY2ZnIHJlZ2lzdGVyOiBpdCBoYXMgdHVyYm8sIGIsIGhhbGYtdHVyYm8gKGFuZCBmKSAqLworCWFzbSggIm1yY1x0cDE0LCAwLCAlMCwgYzYsIGMwLCAwIiA6ICI9ciIgKGNsa2NmZykgKTsKKwliID0gY2xrY2ZnICYgKDEgPDwgMyk7CisKKwlsID0gY2NzciAmIDB4MWY7CisJbSA9IChsIDw9IDEwKSA/IDEgOiAobCA8PSAyMCkgPyAyIDogNDsKKworCUwgPSBsICogQkFTRV9DTEs7CisJTSA9ICghY2Njcl9hKSA/IChML20pIDogKChiKSA/IEwgOiAoTC8yKSk7CisKKwlyZXR1cm4gKE0gLyAxMDAwMCk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGN1cnJlbnQgTENEIGNsb2NrIGZyZXF1ZW5jeSBpbiB1bml0cyBvZiAxMGtIeiBhcworICovCit1bnNpZ25lZCBpbnQgZ2V0X2xjZGNsa19mcmVxdWVuY3lfMTBraHoodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGNjc3I7CisJdW5zaWduZWQgaW50IGwsIEwsIGssIEs7CisKKwljY3NyID0gQ0NTUjsKKworCWwgPSBjY3NyICYgMHgxZjsKKwlrID0gKGwgPD0gNykgPyAxIDogKGwgPD0gMTYpID8gMiA6IDQ7CisKKwlMID0gbCAqIEJBU0VfQ0xLOworCUsgPSBMIC8gazsKKworCXJldHVybiAoSyAvIDEwMDAwKTsKK30KKworRVhQT1JUX1NZTUJPTChnZXRfY2xrX2ZyZXF1ZW5jeV9raHopOworRVhQT1JUX1NZTUJPTChnZXRfbWVtY2xrX2ZyZXF1ZW5jeV8xMGtoeik7CitFWFBPUlRfU1lNQk9MKGdldF9sY2RjbGtfZnJlcXVlbmN5XzEwa2h6KTsKKworCisvKgorICogZGV2aWNlIHJlZ2lzdHJhdGlvbiBzcGVjaWZpYyB0byBQWEEyN3guCisgKi8KKworc3RhdGljIHU2NCBweGEyN3hfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBweGEyN3hfb2hjaV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCAgPSAweDRDMDAwMDAwLAorCQkuZW5kICAgID0gMHg0QzAwZmY2ZiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gSVJRX1VTQkgxLAorCQkuZW5kICAgID0gSVJRX1VTQkgxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9oY2lfZGV2aWNlID0geworCS5uYW1lCQk9ICJweGEyN3gtb2hjaSIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkuZG1hX21hc2sgPSAmcHhhMjd4X2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJfSwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHB4YTI3eF9vaGNpX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gcHhhMjd4X29oY2lfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZvaGNpX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHB4YTI3eF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworfQorCitzdWJzeXNfaW5pdGNhbGwocHhhMjd4X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtcHhhL3NsZWVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZjYWQyYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NsZWVwLlMKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBMb3ctbGV2ZWwgUFhBMjUwLzIxMCBzbGVlcC93YWtlVXAgc3VwcG9ydAorICoKKyAqIEluaXRpYWwgU0ExMTEwIGNvZGU6CisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgQ2xpZmYgQnJha2UgPGNicmFrZUBhY2NlbGVudC5jb20+CisgKgorICogQWRhcHRlZCBmb3IgUFhBIGJ5IE5pY29sYXMgUGl0cmU6CisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgTW9udGEgVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisKKwkJLnRleHQKKworLyoKKyAqIHB4YV9jcHVfc3VzcGVuZCgpCisgKgorICogRm9yY2VzIENQVSBpbnRvIHNsZWVwIHN0YXRlCisgKi8KKworRU5UUlkocHhhX2NwdV9zdXNwZW5kKQorCisJbXJhCXIyLCByMywgYWNjMAorCXN0bWZkCXNwISwge3IyIC0gcjEyLCBscn0JCUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKKworCUAgZ2V0IGNvcHJvY2Vzc29yIHJlZ2lzdGVycworCW1yYwlwMTQsIDAsIHIzLCBjNiwgYzAsIDAJCUAgY2xvY2sgY29uZmlndXJhdGlvbiwgZm9yIHR1cmJvIG1vZGUKKwltcmMJcDE1LCAwLCByNCwgYzE1LCBjMSwgMAkJQCBDUCBhY2Nlc3MgcmVnCisJbXJjCXAxNSwgMCwgcjUsIGMxMywgYzAsIDAJCUAgUElECisJbXJjIAlwMTUsIDAsIHI2LCBjMywgYzAsIDAJCUAgZG9tYWluIElECisJbXJjIAlwMTUsIDAsIHI3LCBjMiwgYzAsIDAJCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCisJbXJjCXAxNSwgMCwgcjgsIGMxLCBjMSwgMCAgICAgICAgICAgQCBhdXhpbGlhcnkgY29udHJvbCByZWcKKwltcmMgCXAxNSwgMCwgcjksIGMxLCBjMCwgMAkJQCBjb250cm9sIHJlZworCisJYmljCXIzLCByMywgIzIJCQlAIGNsZWFyIGZyZXF1ZW5jeSBjaGFuZ2UgYml0CisKKwlAIHN0b3JlIHRoZW0gcGx1cyBjdXJyZW50IHZpcnR1YWwgc3RhY2sgcHRyIG9uIHN0YWNrCisJbW92CXIxMCwgc3AKKwlzdG1mZAlzcCEsIHtyMyAtIHIxMH0KKworCUAgcHJlc2VydmUgcGh5cyBhZGRyZXNzIG9mIHN0YWNrCisJbW92CXIwLCBzcAorCWJsCXNsZWVwX3BoeXNfc3AKKwlsZHIJcjEsID1zbGVlcF9zYXZlX3NwCisJc3RyCXIwLCBbcjFdCisKKwlAIGNsZWFuIGRhdGEgY2FjaGUKKwlibAl4c2NhbGVfZmx1c2hfa2Vybl9jYWNoZV9hbGwKKworCUAgUHV0IHRoZSBwcm9jZXNzb3IgdG8gc2xlZXAKKwlAIChhbHNvIHdvcmthcm91bmQgZm9yIHNpZ2h0aW5nIDI4MDcxKQorCisJQCBwcmVwYXJlIHZhbHVlIGZvciBzbGVlcCBtb2RlCisJbW92CXIxLCAjMwkJCQlAIHNsZWVwIG1vZGUKKworCUAgcHJlcGFyZSB0byBwdXQgU0RSQU0gaW50byBzZWxmLXJlZnJlc2ggbWFudWFsbHkKKwlsZHIJcjQsID1NRFJFRlIKKwlsZHIJcjUsIFtyNF0KKwlvcnIJcjUsIHI1LCAjTURSRUZSX1NMRlJTSAorCisJQCBwcmVwYXJlIHBvaW50ZXIgdG8gcGh5c2ljYWwgYWRkcmVzcyAwICh2aXJ0dWFsIG1hcHBpbmcgaW4gZ2VuZXJpYy5jKQorCW1vdglyMiwgI1VOQ0FDSEVEX1BIWVNfMAorCisJQCBJbnRlbCBQWEEyNTUgU3BlY2lmaWNhdGlvbiBVcGRhdGUgbm90ZXMgcHJvYmxlbXMKKwlAIGFib3V0IHN1c3BlbmRpbmcgd2l0aCBQWEJ1cyBvcGVyYXRpbmcgYWJvdmUgMTMzTUh6CisJQCAoc2VlIEVycmF0YSAzMSwgR1BJTyBvdXRwdXQgc2lnbmFscywgLi4uIHVucHJlZGljdGFibGUgaW4gc2xlZXAKKwlACisJQCBXZSBrZWVwIHRoZSBjaGFuZ2UtZG93biBjbG9zZSB0byB0aGUgYWN0dWFsIHN1c3BlbmQgb24gU0RSQU0KKwlAIGFzIHBvc3NpYmxlIHRvIGVsaW1pbmF0ZSBtZXNzaW5nIGFib3V0IHdpdGggdGhlIHJlZnJlc2ggY2xvY2sKKwlAIGFzIHRoZSBzeXN0ZW0gd2lsbCByZXN0b3JlIHdpdGggdGhlIG9yaWdpbmFsIHNwZWVkIHNldHRpbmdzCisJQAorCUAgQmVuIERvb2tzLCAxMy1TZXAtMjAwNAorCisJbGRyCXI2LCA9Q0NDUgorCWxkcglyOCwgW3I2XQkJQCBrZWVwIG9yaWdpbmFsIHZhbHVlIGZvciByZXN1bWUKKworCUAgZW5zdXJlIHgxIGZvciBydW4gYW5kIHR1cmJvIG1vZGUgd2l0aCBtZW1vcnkgY2xvY2sKKwliaWMJcjcsIHI4LCAjQ0NDUl9NX01BU0sgfCBDQ0NSX05fTUFTSworCW9ycglyNywgcjcsICMoMTw8NSkgfCAoMjw8NykKKworCUAgY2hlY2sgdGhhdCB0aGUgbWVtb3J5IGZyZXF1ZW5jeSBpcyB3aXRoaW4gbGltaXRzCisJYW5kCXIxNCwgcjcsICNDQ0NSX0xfTUFTSworCXRlcQlyMTQsICMxCisJYmljbmUJcjcsIHI3LCAjQ0NDUl9MX01BU0sKKwlvcnJuZQlyNywgcjcsICMxCQkJQEAgOTkuNTNNSHoKKworCUAgZ2V0IHJlYWR5IGZvciB0aGUgY2hhbmdlCisKKwlAIG5vdGUsIHR1cmJvIGlzIG5vdCBwcmVzZXJ2ZWQgb3ZlciBzbGVlcCBzbyB0aGVyZSBpcyBubworCUAgcG9pbnQgaW4gcHJlc2VydmluZyBpdCBoZXJlLiB3ZSBzYXZlIGl0IG9uIHRoZSBzdGFjayB3aXRoIHRoZQorCUAgb3RoZXIgQ1AgcmVnaXN0ZXJzIGluc3RlYWQuCisJbW92CXIwLCAjMAorCW1jcglwMTQsIDAsIHIwLCBjNiwgYzAsIDAKKwlvcnIJcjAsIHIwLCAjMgkJCUAgaW5pdGlhdGUgY2hhbmdlIGJpdAorCisJQCBhbGlnbiBleGVjdXRpb24gdG8gYSBjYWNoZSBsaW5lCisJYgkxZgorCisJLmx0b3JnCisJLmFsaWduCTUKKzE6CisKKwlAIEFsbCBuZWVkZWQgdmFsdWVzIGFyZSBub3cgaW4gcmVnaXN0ZXJzLgorCUAgVGhlc2UgbGFzdCBpbnN0cnVjdGlvbnMgc2hvdWxkIGJlIGluIGNhY2hlCisKKwlAIGluaXRpYXRlIHRoZSBmcmVxdWVuY3kgY2hhbmdlLi4uCisJc3RyCXI3LCBbcjZdCisJbWNyCXAxNCwgMCwgcjAsIGM2LCBjMCwgMAorCisJQCByZXN0b3JlIHRoZSBvcmlnaW5hbCBjcHUgc3BlZWQgdmFsdWUgZm9yIHJlc3VtZQorCXN0cglyOCwgW3I2XQorCisJQCBwdXQgU0RSQU0gaW50byBzZWxmLXJlZnJlc2gKKwlzdHIJcjUsIFtyNF0KKworCUAgZm9yY2UgYWRkcmVzcyBsaW5lcyBsb3cgYnkgcmVhZGluZyBhdCBwaHlzaWNhbCBhZGRyZXNzIDAKKwlsZHIJcjMsIFtyMl0KKworCUAgZW50ZXIgc2xlZXAgbW9kZQorCW1jcglwMTQsIDAsIHIxLCBjNywgYzAsIDAKKworMjA6CWIJMjBiCQkJCUAgbG9vcCB3YWl0aW5nIGZvciBzbGVlcAorCisvKgorICogY3B1X3B4YV9yZXN1bWUoKQorICoKKyAqIGVudHJ5IHBvaW50IGZyb20gYm9vdGxvYWRlciBpbnRvIGtlcm5lbCBkdXJpbmcgcmVzdW1lCisgKgorICogTm90ZTogWWVzLCBwYXJ0IG9mIHRoZSBmb2xsb3dpbmcgY29kZSBpcyBsb2NhdGVkIGludG8gdGhlIC5kYXRhIHNlY3Rpb24uCisgKiAgICAgICBUaGlzIGlzIHRvIGFsbG93IHNsZWVwX3NhdmVfc3AgdG8gYmUgYWNjZXNzZWQgd2l0aCBhIHJlbGF0aXZlIGxvYWQKKyAqICAgICAgIHdoaWxlIHdlIGNhbid0IHJlbHkgb24gYW55IE1NVSB0cmFuc2xhdGlvbi4gIFdlIGNvdWxkIGhhdmUgcHV0CisgKiAgICAgICBzbGVlcF9zYXZlX3NwIGluIHRoZSAudGV4dCBzZWN0aW9uIGFzIHdlbGwsIGJ1dCBzb21lIHNldHVwcyBtaWdodAorICogICAgICAgaW5zaXN0IG9uIGl0IHRvIGJlIHRydWx5IHJlYWQtb25seS4KKyAqLworCisJLmRhdGEKKwkuYWxpZ24gNQorRU5UUlkocHhhX2NwdV9yZXN1bWUpCisJbW92CXIwLCAjUFNSX0lfQklUIHwgUFNSX0ZfQklUIHwgTU9ERV9TVkMJQCBzZXQgU1ZDLCBpcnFzIG9mZgorCW1zcgljcHNyX2MsIHIwCisKKwlsZHIJcjAsIHNsZWVwX3NhdmVfc3AJCUAgc3RhY2sgcGh5cyBhZGRyCisJbGRyCXIyLCA9cmVzdW1lX2FmdGVyX21tdQkJQCBpdHMgYWJzb2x1dGUgdmlydHVhbCBhZGRyZXNzCisJbGRtZmQJcjAsIHtyMyAtIHI5LCBzcH0JCUAgQ1AgcmVncyArIHZpcnQgc3RhY2sgcHRyCisKKwltb3YJcjEsICMwCisJbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMCAgIAlAIGludmFsaWRhdGUgSSAmIEQgVExCcworCW1jcglwMTUsIDAsIHIxLCBjNywgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBjYWNoZXMsIEJUQgorCisjaWZkZWYgQ09ORklHX1hTQ0FMRV9DQUNIRV9FUlJBVEEKKwliaWMgICAgIHI5LCByOSwgIzB4MDAwNAkJCUAgc2VlIGNwdV94c2NhbGVfcHJvY19pbml0CisjZW5kaWYKKworCW1jcglwMTQsIDAsIHIzLCBjNiwgYzAsIDAJCUAgY2xvY2sgY29uZmlndXJhdGlvbiwgdHVyYm8gbW9kZS4KKwltY3IJcDE1LCAwLCByNCwgYzE1LCBjMSwgMAkJQCBDUCBhY2Nlc3MgcmVnCisJbWNyCXAxNSwgMCwgcjUsIGMxMywgYzAsIDAJCUAgUElECisJbWNyIAlwMTUsIDAsIHI2LCBjMywgYzAsIDAJCUAgZG9tYWluIElECisJbWNyIAlwMTUsIDAsIHI3LCBjMiwgYzAsIDAJCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCisJbWNyCXAxNSwgMCwgcjgsIGMxLCBjMSwgMCAgICAgICAgICAgQCBhdXhpbGlhcnkgY29udHJvbCByZWcKKwliCXJlc3VtZV90dXJuX29uX21tdQkJQCBjYWNoZSBhbGlnbiBleGVjdXRpb24KKworCS5hbGlnbiA1CityZXN1bWVfdHVybl9vbl9tbXU6CisJbWNyIAlwMTUsIDAsIHI5LCBjMSwgYzAsIDAJCUAgdHVybiBvbiBNTVUsIGNhY2hlcywgZXRjLgorCisJQCBMZXQgdXMgZW5zdXJlIHdlIGp1bXAgdG8gcmVzdW1lX2FmdGVyX21tdSBvbmx5IHdoZW4gdGhlIG1jciBhYm92ZQorCUAgYWN0dWFsbHkgdG9vayBlZmZlY3QuICBUaGV5IGNhbGwgaXQgdGhlICJjcHdhaXQiIG9wZXJhdGlvbi4KKwltcmMJcDE1LCAwLCByMSwgYzIsIGMwLCAwCQlAIHF1ZXVlIGEgZGVwZW5kZW5jeSBvbiBDUDE1CisJc3ViCXBjLCByMiwgcjEsIGxzciAjMzIJCUAganVtcCB0byB2aXJ0dWFsIGFkZHIKKwlub3AKKwlub3AKKwlub3AKKworc2xlZXBfc2F2ZV9zcDoKKwkud29yZAkwCQkJCUAgcHJlc2VydmUgc3RhY2sgcGh5cyBwdHIgaGVyZQorCisJLnRleHQKK3Jlc3VtZV9hZnRlcl9tbXU6CisjaWZkZWYgQ09ORklHX1hTQ0FMRV9DQUNIRV9FUlJBVEEKKwlibAljcHVfeHNjYWxlX3Byb2NfaW5pdAorI2VuZGlmCisJbGRtZmQJc3AhLCB7cjIsIHIzfQorCW1hcglhY2MwLCByMiwgcjMKKwlsZG1mZAlzcCEsIHtyNCAtIHIxMiwgcGN9CQlAIHJldHVybiB0byBjYWxsZXIKKworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3NzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkODI2YzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYwpAQCAtMCwwICsxLDM2MyBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYworICoKKyAqICBiYXNlZCBvbiBsaW51eC9hcmNoL2FybS9tYWNoLXNhMTEwMC9zc3AuYyBieSBSdXNzZWxsIEtpbmcKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFJ1c3NlbGwgS2luZy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFBYQTJ4eCBTU1AgZHJpdmVyLiAgVGhpcyBwcm92aWRlcyB0aGUgZ2VuZXJpYyBjb3JlIGZvciBzaW1wbGUKKyAqICBJTy1iYXNlZCBTU1AgYXBwbGljYXRpb25zIGFuZCBhbGxvd3MgZWFzeSBwb3J0IHNldHVwIGZvciBETUEgYWNjZXNzLgorICoKKyAqICBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgUmV2aXNpb24gaGlzdG9yeToKKyAqICAgMjJuZCBBdWcgMjAwMyBJbml0aWFsIHZlcnNpb24uCisgKiAgIDIwdGggRGVjIDIwMDQgQWRkZWQgc3NwX2NvbmZpZyBmb3IgY2hhbmdpbmcgcG9ydCBjb25maWcgd2l0aG91dAorICogICAgICAgICAgICAgICAgIGNsb3NpbmcgdGhlIHBvcnQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zc3AuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorCisjZGVmaW5lIFBYQV9TU1BfUE9SVFMgCTMKKworc3RhdGljIERFQ0xBUkVfTVVURVgoc2VtKTsKK3N0YXRpYyBpbnQgdXNlX2NvdW50W1BYQV9TU1BfUE9SVFNdID0gezAsIDAsIDB9OworCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3NwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBzc3BfZGV2ICpkZXYgPSAoc3RydWN0IHNzcF9kZXYqKSBkZXZfaWQ7CisJdW5zaWduZWQgaW50IHN0YXR1cyA9IFNTU1JfUChkZXYtPnBvcnQpOworCisJU1NTUl9QKGRldi0+cG9ydCkgPSBzdGF0dXM7IC8qIGNsZWFyIHN0YXR1cyBiaXRzICovCisKKwlpZiAoc3RhdHVzICYgU1NTUl9ST1IpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNTUCglZCk6IHJlY2VpdmVyIG92ZXJydW5cbiIsIGRldi0+cG9ydCk7CisKKwlpZiAoc3RhdHVzICYgU1NTUl9UVVIpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNTUCglZCk6IHRyYW5zbWl0dGVyIHVuZGVycnVuXG4iLCBkZXYtPnBvcnQpOworCisJaWYgKHN0YXR1cyAmIFNTU1JfQkNFKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJTU1AoJWQpOiBiaXQgY291bnQgZXJyb3JcbiIsIGRldi0+cG9ydCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgorICogc3NwX3dyaXRlX3dvcmQgLSB3cml0ZSBhIHdvcmQgdG8gdGhlIFNTUCBwb3J0CisgKiBAZGF0YTogMzItYml0LCBNU0IganVzdGlmaWVkIGRhdGEgdG8gd3JpdGUuCisgKgorICogV2FpdCBmb3IgYSBmcmVlIGVudHJ5IGluIHRoZSBTU1AgdHJhbnNtaXQgRklGTywgYW5kIHdyaXRlIGEgZGF0YQorICogd29yZCB0byB0aGUgU1NQIHBvcnQuCisgKgorICogVGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBwZXJmb3JtIHRoZSBuZWNlc3NhcnkgbG9ja2luZy4KKyAqCisgKiBSZXR1cm5zOgorICogICAlLUVUSU1FRE9VVAl0aW1lb3V0IG9jY3VycmVkIChmb3IgZnV0dXJlKQorICogICAwCQkJc3VjY2VzcworICovCitpbnQgc3NwX3dyaXRlX3dvcmQoc3RydWN0IHNzcF9kZXYgKmRldiwgdTMyIGRhdGEpCit7CisJd2hpbGUgKCEoU1NTUl9QKGRldi0+cG9ydCkgJiBTU1NSX1RORikpCisJCWNwdV9yZWxheCgpOworCisJU1NEUl9QKGRldi0+cG9ydCkgPSBkYXRhOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc3NwX3JlYWRfd29yZCAtIHJlYWQgYSB3b3JkIGZyb20gdGhlIFNTUCBwb3J0CisgKgorICogV2FpdCBmb3IgYSBkYXRhIHdvcmQgaW4gdGhlIFNTUCByZWNlaXZlIEZJRk8sIGFuZCByZXR1cm4gdGhlCisgKiByZWNlaXZlZCBkYXRhLiAgRGF0YSBpcyBMU0IganVzdGlmaWVkLgorICoKKyAqIE5vdGU6IEN1cnJlbnRseSwgaWYgZGF0YSBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgcmVjZWl2ZWQsIHRoaXMKKyAqIGZ1bmN0aW9uIHdpbGwgd2FpdCBmb3IgZXZlci4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIHBlcmZvcm0gdGhlIG5lY2Vzc2FyeSBsb2NraW5nLgorICoKKyAqIFJldHVybnM6CisgKiAgICUtRVRJTUVET1VUCXRpbWVvdXQgb2NjdXJyZWQgKGZvciBmdXR1cmUpCisgKiAgIDMyLWJpdCBkYXRhCXN1Y2Nlc3MKKyAqLworaW50IHNzcF9yZWFkX3dvcmQoc3RydWN0IHNzcF9kZXYgKmRldikKK3sKKwl3aGlsZSAoIShTU1NSX1AoZGV2LT5wb3J0KSAmIFNTU1JfUk5FKSkKKwkJY3B1X3JlbGF4KCk7CisKKwlyZXR1cm4gU1NEUl9QKGRldi0+cG9ydCk7Cit9CisKKy8qKgorICogc3NwX2ZsdXNoIC0gZmx1c2ggdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIEZJRk9zCisgKgorICogV2FpdCBmb3IgdGhlIFNTUCB0byBpZGxlLCBhbmQgZW5zdXJlIHRoYXQgdGhlIHJlY2VpdmUgRklGTworICogaXMgZW1wdHkuCisgKgorICogVGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBwZXJmb3JtIHRoZSBuZWNlc3NhcnkgbG9ja2luZy4KKyAqLwordm9pZCBzc3BfZmx1c2goc3RydWN0IHNzcF9kZXYgKmRldikKK3sKKwlkbyB7CisJCXdoaWxlIChTU1NSX1AoZGV2LT5wb3J0KSAmIFNTU1JfUk5FKSB7CisJCQkodm9pZCkgU1NEUl9QKGRldi0+cG9ydCk7CisJCX0KKwl9IHdoaWxlIChTU1NSX1AoZGV2LT5wb3J0KSAmIFNTU1JfQlNZKTsKK30KKworLyoqCisgKiBzc3BfZW5hYmxlIC0gZW5hYmxlIHRoZSBTU1AgcG9ydAorICoKKyAqIFR1cm4gb24gdGhlIFNTUCBwb3J0LgorICovCit2b2lkIHNzcF9lbmFibGUoc3RydWN0IHNzcF9kZXYgKmRldikKK3sKKwlTU0NSMF9QKGRldi0+cG9ydCkgfD0gU1NDUjBfU1NFOworfQorCisvKioKKyAqIHNzcF9kaXNhYmxlIC0gc2h1dCBkb3duIHRoZSBTU1AgcG9ydAorICoKKyAqIFR1cm4gb2ZmIHRoZSBTU1AgcG9ydCwgb3B0aW9uYWxseSBwb3dlcmluZyBpdCBkb3duLgorICovCit2b2lkIHNzcF9kaXNhYmxlKHN0cnVjdCBzc3BfZGV2ICpkZXYpCit7CisJU1NDUjBfUChkZXYtPnBvcnQpICY9IH5TU0NSMF9TU0U7Cit9CisKKy8qKgorICogc3NwX3NhdmVfc3RhdGUgLSBzYXZlIHRoZSBTU1AgY29uZmlndXJhdGlvbgorICogQHNzcDogcG9pbnRlciB0byBzdHJ1Y3R1cmUgdG8gc2F2ZSBTU1AgY29uZmlndXJhdGlvbgorICoKKyAqIFNhdmUgdGhlIGNvbmZpZ3VyZWQgU1NQIHN0YXRlIGZvciBzdXNwZW5kLgorICovCit2b2lkIHNzcF9zYXZlX3N0YXRlKHN0cnVjdCBzc3BfZGV2ICpkZXYsIHN0cnVjdCBzc3Bfc3RhdGUgKnNzcCkKK3sKKwlzc3AtPmNyMCA9IFNTQ1IwX1AoZGV2LT5wb3J0KTsKKwlzc3AtPmNyMSA9IFNTQ1IxX1AoZGV2LT5wb3J0KTsKKwlzc3AtPnRvID0gU1NUT19QKGRldi0+cG9ydCk7CisJc3NwLT5wc3AgPSBTU1BTUF9QKGRldi0+cG9ydCk7CisKKwlTU0NSMF9QKGRldi0+cG9ydCkgJj0gflNTQ1IwX1NTRTsKK30KKworLyoqCisgKiBzc3BfcmVzdG9yZV9zdGF0ZSAtIHJlc3RvcmUgYSBwcmV2aW91c2x5IHNhdmVkIFNTUCBjb25maWd1cmF0aW9uCisgKiBAc3NwOiBwb2ludGVyIHRvIGNvbmZpZ3VyYXRpb24gc2F2ZWQgYnkgc3NwX3NhdmVfc3RhdGUKKyAqCisgKiBSZXN0b3JlIHRoZSBTU1AgY29uZmlndXJhdGlvbiBzYXZlZCBwcmV2aW91c2x5IGJ5IHNzcF9zYXZlX3N0YXRlLgorICovCit2b2lkIHNzcF9yZXN0b3JlX3N0YXRlKHN0cnVjdCBzc3BfZGV2ICpkZXYsIHN0cnVjdCBzc3Bfc3RhdGUgKnNzcCkKK3sKKwlTU1NSX1AoZGV2LT5wb3J0KSA9IFNTU1JfUk9SIHwgU1NTUl9UVVIgfCBTU1NSX0JDRTsKKworCVNTQ1IwX1AoZGV2LT5wb3J0KSA9IHNzcC0+Y3IwICYgflNTQ1IwX1NTRTsKKwlTU0NSMV9QKGRldi0+cG9ydCkgPSBzc3AtPmNyMTsKKwlTU1RPX1AoZGV2LT5wb3J0KSA9IHNzcC0+dG87CisJU1NQU1BfUChkZXYtPnBvcnQpID0gc3NwLT5wc3A7CisKKwlTU0NSMF9QKGRldi0+cG9ydCkgPSBzc3AtPmNyMDsKK30KKworLyoqCisgKiBzc3BfY29uZmlnIC0gY29uZmlndXJlIFNTUCBwb3J0IHNldHRpbmdzCisgKiBAbW9kZTogcG9ydCBvcGVyYXRpbmcgbW9kZQorICogQGZsYWdzOiBwb3J0IGNvbmZpZyBmbGFncworICogQHBzcF9mbGFnczogcG9ydCBQU1AgY29uZmlnIGZsYWdzCisgKiBAc3BlZWQ6IHBvcnQgc3BlZWQKKyAqCisgKiBQb3J0IE1VU1QgYmUgZGlzYWJsZWQgYnkgc3NwX2Rpc2FibGUgYmVmb3JlIG1ha2luZyBhbnkgY29uZmlnIGNoYW5nZXMuCisgKi8KK2ludCBzc3BfY29uZmlnKHN0cnVjdCBzc3BfZGV2ICpkZXYsIHUzMiBtb2RlLCB1MzIgZmxhZ3MsIHUzMiBwc3BfZmxhZ3MsIHUzMiBzcGVlZCkKK3sKKwlkZXYtPm1vZGUgPSBtb2RlOworCWRldi0+ZmxhZ3MgPSBmbGFnczsKKwlkZXYtPnBzcF9mbGFncyA9IHBzcF9mbGFnczsKKwlkZXYtPnNwZWVkID0gc3BlZWQ7CisKKwkvKiBzZXQgdXAgcG9ydCB0eXBlLCBzcGVlZCwgcG9ydCBzZXR0aW5ncyAqLworCVNTQ1IwX1AoZGV2LT5wb3J0KSA9IChkZXYtPnNwZWVkIHwgZGV2LT5tb2RlKTsKKwlTU0NSMV9QKGRldi0+cG9ydCkgPSBkZXYtPmZsYWdzOworCVNTUFNQX1AoZGV2LT5wb3J0KSA9IGRldi0+cHNwX2ZsYWdzOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc3NwX2luaXQgLSBzZXR1cCB0aGUgU1NQIHBvcnQKKyAqCisgKiBpbml0aWFsaXNlIGFuZCBjbGFpbSByZXNvdXJjZXMgZm9yIHRoZSBTU1AgcG9ydC4KKyAqCisgKiBSZXR1cm5zOgorICogICAlLUVOT0RFVglpZiB0aGUgU1NQIHBvcnQgaXMgdW5hdmFpbGFibGUKKyAqICAgJS1FQlVTWQlpZiB0aGUgcmVzb3VyY2VzIGFyZSBhbHJlYWR5IGluIHVzZQorICogICAlMAkJb24gc3VjY2VzcworICovCitpbnQgc3NwX2luaXQoc3RydWN0IHNzcF9kZXYgKmRldiwgdTMyIHBvcnQpCit7CisJaW50IHJldCwgaXJxOworCisJaWYgKHBvcnQgPiBQWEFfU1NQX1BPUlRTIHx8IHBvcnQgPT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkb3duKCZzZW0pOworCWlmICh1c2VfY291bnRbcG9ydCAtIDFdKSB7CisJCXVwKCZzZW0pOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwl1c2VfY291bnRbcG9ydCAtIDFdKys7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihfX1BSRUcoU1NDUjBfUChwb3J0KSksIDB4MmMsICJTU1AiKSkgeworCQl1c2VfY291bnRbcG9ydCAtIDFdLS07CisJCXVwKCZzZW0pOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXN3aXRjaCAocG9ydCkgeworCQljYXNlIDE6CisJCQlpcnEgPSBJUlFfU1NQOworCQkJYnJlYWs7CisjaWYgZGVmaW5lZCAoQ09ORklHX1BYQTI3eCkKKwkJY2FzZSAyOgorCQkJaXJxID0gSVJRX1NTUDI7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJaXJxID0gSVJRX1NTUDM7CisJCQlicmVhazsKKyNlbHNlCisJCWNhc2UgMjoKKwkJCWlycSA9IElSUV9OU1NQOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWlycSA9IElSUV9BU1NQOworCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PREVWOworCX0KKworCWRldi0+cG9ydCA9IHBvcnQ7CisKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIHNzcF9pbnRlcnJ1cHQsIDAsICJTU1AiLCBkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3JlZ2lvbjsKKworCS8qIHR1cm4gb24gU1NQIHBvcnQgY2xvY2sgKi8KKwlzd2l0Y2ggKGRldi0+cG9ydCkgeworI2lmIGRlZmluZWQgKENPTkZJR19QWEEyN3gpCisJCWNhc2UgMToKKwkJCXB4YV9zZXRfY2tlbihDS0VOMjNfU1NQMSwgMSk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJcHhhX3NldF9ja2VuKENLRU4zX1NTUDIsIDEpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXB4YV9zZXRfY2tlbihDS0VONF9TU1AzLCAxKTsKKwkJCWJyZWFrOworI2Vsc2UKKwkJY2FzZSAxOgorCQkJcHhhX3NldF9ja2VuKENLRU4zX1NTUCwgMSk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJcHhhX3NldF9ja2VuKENLRU45X05TU1AsIDEpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXB4YV9zZXRfY2tlbihDS0VOMTBfQVNTUCwgMSk7CisJCQlicmVhazsKKyNlbmRpZgorCX0KKworCXVwKCZzZW0pOworCXJldHVybiAwOworCitvdXRfcmVnaW9uOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihfX1BSRUcoU1NDUjBfUChwb3J0KSksIDB4MmMpOworCXVzZV9jb3VudFtwb3J0IC0gMV0tLTsKKwl1cCgmc2VtKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHNzcF9leGl0IC0gdW5kbyB0aGUgZWZmZWN0cyBvZiBzc3BfaW5pdAorICoKKyAqIHJlbGVhc2UgYW5kIGZyZWUgcmVzb3VyY2VzIGZvciB0aGUgU1NQIHBvcnQuCisgKi8KK3ZvaWQgc3NwX2V4aXQoc3RydWN0IHNzcF9kZXYgKmRldikKK3sKKwlpbnQgaXJxOworCisJZG93bigmc2VtKTsKKwlTU0NSMF9QKGRldi0+cG9ydCkgJj0gflNTQ1IwX1NTRTsKKworCS8qIGZpbmQgaXJxLCBzYXZlIHBvd2VyIGFuZCB0dXJuIG9mZiBTU1AgcG9ydCBjbG9jayAqLworCXN3aXRjaCAoZGV2LT5wb3J0KSB7CisjaWYgZGVmaW5lZCAoQ09ORklHX1BYQTI3eCkKKwkJY2FzZSAxOgorCQkJaXJxID0gSVJRX1NTUDsKKwkJCXB4YV9zZXRfY2tlbihDS0VOMjNfU1NQMSwgMCk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJaXJxID0gSVJRX1NTUDI7CisJCQlweGFfc2V0X2NrZW4oQ0tFTjNfU1NQMiwgMCk7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJaXJxID0gSVJRX1NTUDM7CisJCQlweGFfc2V0X2NrZW4oQ0tFTjRfU1NQMywgMCk7CisJCQlicmVhazsKKyNlbHNlCisJCWNhc2UgMToKKwkJCWlycSA9IElSUV9TU1A7CisJCQlweGFfc2V0X2NrZW4oQ0tFTjNfU1NQLCAwKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlpcnEgPSBJUlFfTlNTUDsKKwkJCXB4YV9zZXRfY2tlbihDS0VOOV9OU1NQLCAwKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlpcnEgPSBJUlFfQVNTUDsKKwkJCXB4YV9zZXRfY2tlbihDS0VOMTBfQVNTUCwgMCk7CisJCQlicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU1NQOiB0cmllZCB0byBjbG9zZSBpbnZhbGlkIHBvcnRcbiIpOworCQkJcmV0dXJuOworCX0KKworCWZyZWVfaXJxKGlycSwgZGV2KTsKKwlyZWxlYXNlX21lbV9yZWdpb24oX19QUkVHKFNTQ1IwX1AoZGV2LT5wb3J0KSksIDB4MmMpOworCXVzZV9jb3VudFtkZXYtPnBvcnQgLSAxXS0tOworCXVwKCZzZW0pOworfQorCitFWFBPUlRfU1lNQk9MKHNzcF93cml0ZV93b3JkKTsKK0VYUE9SVF9TWU1CT0woc3NwX3JlYWRfd29yZCk7CitFWFBPUlRfU1lNQk9MKHNzcF9mbHVzaCk7CitFWFBPUlRfU1lNQk9MKHNzcF9lbmFibGUpOworRVhQT1JUX1NZTUJPTChzc3BfZGlzYWJsZSk7CitFWFBPUlRfU1lNQk9MKHNzcF9zYXZlX3N0YXRlKTsKK0VYUE9SVF9TWU1CT0woc3NwX3Jlc3RvcmVfc3RhdGUpOworRVhQT1JUX1NZTUJPTChzc3BfaW5pdCk7CitFWFBPUlRfU1lNQk9MKHNzcF9leGl0KTsKK0VYUE9SVF9TWU1CT0woc3NwX2NvbmZpZyk7CisKK01PRFVMRV9ERVNDUklQVElPTigiUFhBIFNTUCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkxpYW0gR2lyZHdvb2QiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3M2ZiNjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS90aW1lLmMKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXB4YS90aW1lLmMKKyAqCisgKiBBdXRob3I6CU5pY29sYXMgUGl0cmUKKyAqIENyZWF0ZWQ6CUp1biAxNSwgMjAwMQorICogQ29weXJpZ2h0OglNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9sZWRzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBweGFfZ2V0X3J0Y190aW1lKHZvaWQpCit7CisJcmV0dXJuIFJDTlI7Cit9CisKK3N0YXRpYyBpbnQgcHhhX3NldF9ydGModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGN1cnJlbnRfdGltZSA9IHh0aW1lLnR2X3NlYzsKKworCWlmIChSVFNSICYgUlRTUl9BTEUpIHsKKwkJLyogbWFrZSBzdXJlIG5vdCB0byBmb3J3YXJkIHRoZSBjbG9jayBvdmVyIGFuIGFsYXJtICovCisJCXVuc2lnbmVkIGxvbmcgYWxhcm0gPSBSVEFSOworCQlpZiAoY3VycmVudF90aW1lID49IGFsYXJtICYmIGFsYXJtID49IFJDTlIpCisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKwlSQ05SID0gY3VycmVudF90aW1lOworCXJldHVybiAwOworfQorCisvKiBJUlFzIGFyZSBkaXNhYmxlZCBiZWZvcmUgZW50ZXJpbmcgaGVyZSBmcm9tIGRvX2dldHRpbWVvZmRheSgpICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBweGFfZ2V0dGltZW9mZnNldCAodm9pZCkKK3sKKwlsb25nIHRpY2tzX3RvX21hdGNoLCBlbGFwc2VkLCB1c2VjOworCisJLyogR2V0IHRpY2tzIGJlZm9yZSBuZXh0IHRpbWVyIG1hdGNoICovCisJdGlja3NfdG9fbWF0Y2ggPSBPU01SMCAtIE9TQ1I7CisKKwkvKiBXZSBuZWVkIGVsYXBzZWQgdGlja3Mgc2luY2UgbGFzdCBtYXRjaCAqLworCWVsYXBzZWQgPSBMQVRDSCAtIHRpY2tzX3RvX21hdGNoOworCisJLyogZG9uJ3QgZ2V0IGZvb2xlZCBieSB0aGUgd29ya2Fyb3VuZCBpbiBweGFfdGltZXJfaW50ZXJydXB0KCkgKi8KKwlpZiAoZWxhcHNlZCA8PSAwKQorCQlyZXR1cm4gMDsKKworCS8qIE5vdyBjb252ZXJ0IHRoZW0gdG8gdXNlYyAqLworCXVzZWMgPSAodW5zaWduZWQgbG9uZykoZWxhcHNlZCAqICh0aWNrX25zZWMgLyAxMDAwKSkvTEFUQ0g7CisKKwlyZXR1cm4gdXNlYzsKK30KKworc3RhdGljIGlycXJldHVybl90CitweGFfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IG5leHRfbWF0Y2g7CisKKwl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKKworCS8qIExvb3AgdW50aWwgd2UgZ2V0IGFoZWFkIG9mIHRoZSBmcmVlIHJ1bm5pbmcgdGltZXIuCisJICogVGhpcyBlbnN1cmVzIGFuIGV4YWN0IGNsb2NrIHRpY2sgY291bnQgYW5kIHRpbWUgYWNjdXJhY3kuCisJICogSVJRcyBhcmUgZGlzYWJsZWQgaW5zaWRlIHRoZSBsb29wIHRvIGVuc3VyZSBjb2hlcmVuY2UgYmV0d2VlbgorCSAqIGxvc3RfdGlja3MgKHVwZGF0ZWQgaW4gZG9fdGltZXIoKSkgYW5kIHRoZSBtYXRjaCByZWcgdmFsdWUsIHNvIHdlCisJICogY2FuIHVzZSBkb19nZXR0aW1lb2ZkYXkoKSBmcm9tIGludGVycnVwdCBoYW5kbGVycy4KKwkgKgorCSAqIEhBQ0sgQUxFUlQ6IGl0IHNlZW1zIHRoYXQgdGhlIFBYQSB0aW1lciByZWdzIGFyZW4ndCB1cGRhdGVkIHJpZ2h0CisJICogYXdheSBpbiBhbGwgY2FzZXMgd2hlbiBhIHdyaXRlIG9jY3Vycy4gIFdlIHRoZXJlZm9yZSBjb21wYXJlIHdpdGgKKwkgKiA4IGluc3RlYWQgb2YgMCBpbiB0aGUgd2hpbGUoKSBjb25kaXRpb24gYmVsb3cgdG8gYXZvaWQgbWlzc2luZyBhCisJICogbWF0Y2ggaWYgT1NDUiBoYXMgYWxyZWFkeSByZWFjaGVkIHRoZSBuZXh0IE9TTVIgdmFsdWUuCisJICogRXhwZXJpZW5jZSBoYXMgc2hvd24gdGhhdCB1cCB0byA2IHRpY2tzIGFyZSBuZWVkZWQgdG8gd29yayBhcm91bmQKKwkgKiB0aGlzIHByb2JsZW0sIGJ1dCBsZXQncyB1c2UgOCB0byBiZSBjb25zZXJ2YXRpdmUuICBOb3RlIHRoYXQgdGhpcworCSAqIGFmZmVjdCB0aGluZ3Mgb25seSB3aGVuIHRoZSB0aW1lciBJUlEgaGFzIGJlZW4gZGVsYXllZCBieSBuZWFybHkKKwkgKiBleGFjdGx5IG9uZSB0aWNrIHBlcmlvZCB3aGljaCBzaG91bGQgYmUgYSBwcmV0dHkgcmFyZSBldmVudC4KKwkgKi8KKwlkbyB7CisJCXRpbWVyX3RpY2socmVncyk7CisJCU9TU1IgPSBPU1NSX00wOyAgLyogQ2xlYXIgbWF0Y2ggb24gdGltZXIgMCAqLworCQluZXh0X21hdGNoID0gKE9TTVIwICs9IExBVENIKTsKKwl9IHdoaWxlKCAoc2lnbmVkIGxvbmcpKG5leHRfbWF0Y2ggLSBPU0NSKSA8PSA4ICk7CisKKwl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBweGFfdGltZXJfaXJxID0geworCS5uYW1lCQk9ICJQWEEgVGltZXIgVGljayIsCisJLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCwKKwkuaGFuZGxlcgk9IHB4YV90aW1lcl9pbnRlcnJ1cHQKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBweGFfdGltZXJfaW5pdCh2b2lkKQoreworCXN0cnVjdCB0aW1lc3BlYyB0djsKKworCXNldF9ydGMgPSBweGFfc2V0X3J0YzsKKworCXR2LnR2X25zZWMgPSAwOworCXR2LnR2X3NlYyA9IHB4YV9nZXRfcnRjX3RpbWUoKTsKKwlkb19zZXR0aW1lb2ZkYXkoJnR2KTsKKworCU9TTVIwID0gMDsJCS8qIHNldCBpbml0aWFsIG1hdGNoIGF0IDAgKi8KKwlPU1NSID0gMHhmOwkJLyogY2xlYXIgc3RhdHVzIG9uIGFsbCB0aW1lcnMgKi8KKwlzZXR1cF9pcnEoSVJRX09TVDAsICZweGFfdGltZXJfaXJxKTsKKwlPSUVSIHw9IE9JRVJfRTA7CS8qIGVuYWJsZSBtYXRjaCBvbiB0aW1lciAwIHRvIGNhdXNlIGludGVycnVwdHMgKi8KKwlPU0NSID0gMDsJCS8qIGluaXRpYWxpemUgZnJlZS1ydW5uaW5nIHRpbWVyLCBmb3JjZSBmaXJzdCBtYXRjaCAqLworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvc21yWzRdLCBvaWVyOworCitzdGF0aWMgdm9pZCBweGFfdGltZXJfc3VzcGVuZCh2b2lkKQoreworCW9zbXJbMF0gPSBPU01SMDsKKwlvc21yWzFdID0gT1NNUjE7CisJb3NtclsyXSA9IE9TTVIyOworCW9zbXJbM10gPSBPU01SMzsKKwlvaWVyID0gT0lFUjsKK30KKworc3RhdGljIHZvaWQgcHhhX3RpbWVyX3Jlc3VtZSh2b2lkKQoreworCU9TTVIwID0gb3NtclswXTsKKwlPU01SMSA9IG9zbXJbMV07CisJT1NNUjIgPSBvc21yWzJdOworCU9TTVIzID0gb3NtclszXTsKKwlPSUVSID0gb2llcjsKKworCS8qCisJICogT1NNUjAgaXMgdGhlIHN5c3RlbSB0aW1lcjogbWFrZSBzdXJlIE9TQ1IgaXMgc3VmZmljaWVudGx5IGJlaGluZAorCSAqLworCU9TQ1IgPSBPU01SMCAtIExBVENIOworfQorI2Vsc2UKKyNkZWZpbmUgcHhhX3RpbWVyX3N1c3BlbmQgTlVMTAorI2RlZmluZSBweGFfdGltZXJfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdHJ1Y3Qgc3lzX3RpbWVyIHB4YV90aW1lciA9IHsKKwkuaW5pdAkJPSBweGFfdGltZXJfaW5pdCwKKwkuc3VzcGVuZAk9IHB4YV90aW1lcl9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcHhhX3RpbWVyX3Jlc3VtZSwKKwkub2Zmc2V0CQk9IHB4YV9nZXR0aW1lb2Zmc2V0LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcnBjL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1ycGMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE3N2JjOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcnBjL01ha2VmaWxlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisjCisKKyMgT2JqZWN0IGZpbGUgbGlzdHMuCisKK29iai15CQkJOj0gZG1hLm8gaXJxLm8gcmlzY3BjLm8KK29iai1tCQkJOj0KK29iai1uCQkJOj0KK29iai0JCQk6PQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJwYy9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1ycGMvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzllNzY4NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcnBjL01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSw0IEBACisgICB6cmVsYWRkci15CTo9IDB4MTAwMDgwMDAKK3BhcmFtc19waHlzLXkJOj0gMHgxMDAwMDEwMAoraW5pdHJkX3BoeXMteQk6PSAweDE4MDAwMDAwCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcnBjL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1ycGMvZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMwNzQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcnBjL2RtYS5jCkBAIC0wLDAgKzEsMzM4IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtcnBjL2RtYS5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OCBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBETUEgZnVuY3Rpb25zIHNwZWNpZmljIHRvIFJpc2NQQyBhcmNoaXRlY3R1cmUKKyAqLworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL2ZpcS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvZG1hLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2lvbWQuaD4KKworI2lmIDAKK3R5cGVkZWYgZW51bSB7CisJZG1hX3NpemVfOAk9IDEsCisJZG1hX3NpemVfMTYJPSAyLAorCWRtYV9zaXplXzMyCT0gNCwKKwlkbWFfc2l6ZV8xMjgJPSAxNgorfSBkbWFfc2l6ZV90OworI2VuZGlmCisKKyNkZWZpbmUgVFJBTlNGRVJfU0laRQkyCisKKyNkZWZpbmUgQ1VSQQkoMCkKKyNkZWZpbmUgRU5EQQkoSU9NRF9JTzBFTkRBIC0gSU9NRF9JTzBDVVJBKQorI2RlZmluZSBDVVJCCShJT01EX0lPMENVUkIgLSBJT01EX0lPMENVUkEpCisjZGVmaW5lIEVOREIJKElPTURfSU8wRU5EQiAtIElPTURfSU8wQ1VSQSkKKyNkZWZpbmUgQ1IJKElPTURfSU8wQ1IgLSBJT01EX0lPMENVUkEpCisjZGVmaW5lIFNUCShJT01EX0lPMFNUIC0gSU9NRF9JTzBDVVJBKQorCitzdGF0aWMgdm9pZCBpb21kX2dldF9uZXh0X3NnKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGRtYV90ICpkbWEpCit7CisJdW5zaWduZWQgbG9uZyBlbmQsIG9mZnNldCwgZmxhZ3MgPSAwOworCisJaWYgKGRtYS0+c2cpIHsKKwkJc2ctPmRtYV9hZGRyZXNzID0gZG1hLT5zZy0+ZG1hX2FkZHJlc3M7CisJCW9mZnNldCA9IHNnLT5kbWFfYWRkcmVzcyAmIH5QQUdFX01BU0s7CisKKwkJZW5kID0gb2Zmc2V0ICsgZG1hLT5zZy0+bGVuZ3RoOworCisJCWlmIChlbmQgPiBQQUdFX1NJWkUpCisJCQllbmQgPSBQQUdFX1NJWkU7CisKKwkJaWYgKG9mZnNldCArIFRSQU5TRkVSX1NJWkUgPj0gZW5kKQorCQkJZmxhZ3MgfD0gRE1BX0VORF9MOworCisJCXNnLT5sZW5ndGggPSBlbmQgLSBUUkFOU0ZFUl9TSVpFOworCisJCWRtYS0+c2ctPmxlbmd0aCAtPSBlbmQgLSBvZmZzZXQ7CisJCWRtYS0+c2ctPmRtYV9hZGRyZXNzICs9IGVuZCAtIG9mZnNldDsKKworCQlpZiAoZG1hLT5zZy0+bGVuZ3RoID09IDApIHsKKwkJCWlmIChkbWEtPnNnY291bnQgPiAxKSB7CisJCQkJZG1hLT5zZysrOworCQkJCWRtYS0+c2djb3VudC0tOworCQkJfSBlbHNlIHsKKwkJCQlkbWEtPnNnID0gTlVMTDsKKwkJCQlmbGFncyB8PSBETUFfRU5EX1M7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlmbGFncyA9IERNQV9FTkRfUyB8IERNQV9FTkRfTDsKKwkJc2ctPmRtYV9hZGRyZXNzID0gMDsKKwkJc2ctPmxlbmd0aCA9IDA7CisJfQorCisJc2ctPmxlbmd0aCB8PSBmbGFnczsKK30KKworc3RhdGljIGlycXJldHVybl90IGlvbWRfZG1hX2hhbmRsZShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWRtYV90ICpkbWEgPSAoZG1hX3QgKilkZXZfaWQ7CisJdW5zaWduZWQgbG9uZyBiYXNlID0gZG1hLT5kbWFfYmFzZTsKKworCWRvIHsKKwkJdW5zaWduZWQgaW50IHN0YXR1czsKKworCQlzdGF0dXMgPSBpb21kX3JlYWRiKGJhc2UgKyBTVCk7CisJCWlmICghKHN0YXR1cyAmIERNQV9TVF9JTlQpKQorCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJCWlmICgoZG1hLT5zdGF0ZSBeIHN0YXR1cykgJiBETUFfU1RfQUIpCisJCQlpb21kX2dldF9uZXh0X3NnKCZkbWEtPmN1cl9zZywgZG1hKTsKKworCQlzd2l0Y2ggKHN0YXR1cyAmIChETUFfU1RfT0ZMIHwgRE1BX1NUX0FCKSkgeworCQljYXNlIERNQV9TVF9PRkw6CQkJLyogT0lBICovCisJCWNhc2UgRE1BX1NUX0FCOgkJCQkvKiAuSUIgKi8KKwkJCWlvbWRfd3JpdGVsKGRtYS0+Y3VyX3NnLmRtYV9hZGRyZXNzLCBiYXNlICsgQ1VSQSk7CisJCQlpb21kX3dyaXRlbChkbWEtPmN1cl9zZy5sZW5ndGgsIGJhc2UgKyBFTkRBKTsKKwkJCWRtYS0+c3RhdGUgPSBETUFfU1RfQUI7CisJCQlicmVhazsKKworCQljYXNlIERNQV9TVF9PRkwgfCBETUFfU1RfQUI6CQkvKiBPSUIgKi8KKwkJY2FzZSAwOgkJCQkJLyogLklBICovCisJCQlpb21kX3dyaXRlbChkbWEtPmN1cl9zZy5kbWFfYWRkcmVzcywgYmFzZSArIENVUkIpOworCQkJaW9tZF93cml0ZWwoZG1hLT5jdXJfc2cubGVuZ3RoLCBiYXNlICsgRU5EQik7CisJCQlkbWEtPnN0YXRlID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHN0YXR1cyAmIERNQV9TVF9PRkwgJiYKKwkJICAgIGRtYS0+Y3VyX3NnLmxlbmd0aCA9PSAoRE1BX0VORF9TfERNQV9FTkRfTCkpCisJCQlicmVhazsKKwl9IHdoaWxlICgxKTsKKworCWRtYS0+c3RhdGUgPSB+RE1BX1NUX0FCOworCWRpc2FibGVfaXJxKGlycSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgaW9tZF9yZXF1ZXN0X2RtYShkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCit7CisJcmV0dXJuIHJlcXVlc3RfaXJxKGRtYS0+ZG1hX2lycSwgaW9tZF9kbWFfaGFuZGxlLAorCQkJICAgU0FfSU5URVJSVVBULCBkbWEtPmRldmljZV9pZCwgZG1hKTsKK30KKworc3RhdGljIHZvaWQgaW9tZF9mcmVlX2RtYShkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCit7CisJZnJlZV9pcnEoZG1hLT5kbWFfaXJxLCBkbWEpOworfQorCitzdGF0aWMgdm9pZCBpb21kX2VuYWJsZV9kbWEoZG1hY2hfdCBjaGFubmVsLCBkbWFfdCAqZG1hKQoreworCXVuc2lnbmVkIGxvbmcgZG1hX2Jhc2UgPSBkbWEtPmRtYV9iYXNlOworCXVuc2lnbmVkIGludCBjdHJsID0gVFJBTlNGRVJfU0laRSB8IERNQV9DUl9FOworCisJaWYgKGRtYS0+aW52YWxpZCkgeworCQlkbWEtPmludmFsaWQgPSAwOworCisJCS8qCisJCSAqIENvcGUgd2l0aCBJU0Etc3R5bGUgZHJpdmVycyB3aGljaCBleHBlY3QgY2FjaGUKKwkJICogY29oZXJlbmNlLgorCQkgKi8KKwkJaWYgKCFkbWEtPnVzaW5nX3NnKSB7CisJCQlkbWEtPmJ1Zi5kbWFfYWRkcmVzcyA9IHBjaV9tYXBfc2luZ2xlKE5VTEwsCisJCQkJZG1hLT5idWYuX19hZGRyZXNzLCBkbWEtPmJ1Zi5sZW5ndGgsCisJCQkJZG1hLT5kbWFfbW9kZSA9PSBETUFfTU9ERV9SRUFEID8KKwkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UgOiBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJfQorCisJCWlvbWRfd3JpdGViKERNQV9DUl9DLCBkbWFfYmFzZSArIENSKTsKKwkJZG1hLT5zdGF0ZSA9IERNQV9TVF9BQjsKKwl9CisJCQorCWlmIChkbWEtPmRtYV9tb2RlID09IERNQV9NT0RFX1JFQUQpCisJCWN0cmwgfD0gRE1BX0NSX0Q7CisKKwlpb21kX3dyaXRlYihjdHJsLCBkbWFfYmFzZSArIENSKTsKKwllbmFibGVfaXJxKGRtYS0+ZG1hX2lycSk7Cit9CisKK3N0YXRpYyB2b2lkIGlvbWRfZGlzYWJsZV9kbWEoZG1hY2hfdCBjaGFubmVsLCBkbWFfdCAqZG1hKQoreworCXVuc2lnbmVkIGxvbmcgZG1hX2Jhc2UgPSBkbWEtPmRtYV9iYXNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaWYgKGRtYS0+c3RhdGUgIT0gfkRNQV9TVF9BQikKKwkJZGlzYWJsZV9pcnEoZG1hLT5kbWFfaXJxKTsKKwlpb21kX3dyaXRlYigwLCBkbWFfYmFzZSArIENSKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgaW9tZF9zZXRfZG1hX3NwZWVkKGRtYWNoX3QgY2hhbm5lbCwgZG1hX3QgKmRtYSwgaW50IGN5Y2xlKQoreworCWludCB0Y3IsIHNwZWVkOworCisJaWYgKGN5Y2xlIDwgMTg4KQorCQlzcGVlZCA9IDM7CisJZWxzZSBpZiAoY3ljbGUgPD0gMjUwKQorCQlzcGVlZCA9IDI7CisJZWxzZSBpZiAoY3ljbGUgPCA0MzgpCisJCXNwZWVkID0gMTsKKwllbHNlCisJCXNwZWVkID0gMDsKKworCXRjciA9IGlvbWRfcmVhZGIoSU9NRF9ETUFUQ1IpOworCXNwZWVkICY9IDM7CisKKwlzd2l0Y2ggKGNoYW5uZWwpIHsKKwljYXNlIERNQV8wOgorCQl0Y3IgPSAodGNyICYgfjB4MDMpIHwgc3BlZWQ7CisJCWJyZWFrOworCisJY2FzZSBETUFfMToKKwkJdGNyID0gKHRjciAmIH4weDBjKSB8IChzcGVlZCA8PCAyKTsKKwkJYnJlYWs7CisKKwljYXNlIERNQV8yOgorCQl0Y3IgPSAodGNyICYgfjB4MzApIHwgKHNwZWVkIDw8IDQpOworCQlicmVhazsKKworCWNhc2UgRE1BXzM6CisJCXRjciA9ICh0Y3IgJiB+MHhjMCkgfCAoc3BlZWQgPDwgNik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaW9tZF93cml0ZWIodGNyLCBJT01EX0RNQVRDUik7CisKKwlyZXR1cm4gc3BlZWQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX29wcyBpb21kX2RtYV9vcHMgPSB7CisJLnR5cGUJCT0gIklPTUQiLAorCS5yZXF1ZXN0CT0gaW9tZF9yZXF1ZXN0X2RtYSwKKwkuZnJlZQkJPSBpb21kX2ZyZWVfZG1hLAorCS5lbmFibGUJCT0gaW9tZF9lbmFibGVfZG1hLAorCS5kaXNhYmxlCT0gaW9tZF9kaXNhYmxlX2RtYSwKKwkuc2V0c3BlZWQJPSBpb21kX3NldF9kbWFfc3BlZWQsCit9OworCitzdGF0aWMgc3RydWN0IGZpcV9oYW5kbGVyIGZoID0geworCS5uYW1lCT0gImZsb3BweWRtYSIKK307CisKK3N0YXRpYyB2b2lkIGZsb3BweV9lbmFibGVfZG1hKGRtYWNoX3QgY2hhbm5lbCwgZG1hX3QgKmRtYSkKK3sKKwl2b2lkICpmaXFoYW5kbGVyX3N0YXJ0OworCXVuc2lnbmVkIGludCBmaXFoYW5kbGVyX2xlbmd0aDsKKwlzdHJ1Y3QgcHRfcmVncyByZWdzOworCisJaWYgKGRtYS0+dXNpbmdfc2cpCisJCUJVRygpOworCisJaWYgKGRtYS0+ZG1hX21vZGUgPT0gRE1BX01PREVfUkVBRCkgeworCQlleHRlcm4gdW5zaWduZWQgY2hhciBmbG9wcHlfZmlxaW5fc3RhcnQsIGZsb3BweV9maXFpbl9lbmQ7CisJCWZpcWhhbmRsZXJfc3RhcnQgPSAmZmxvcHB5X2ZpcWluX3N0YXJ0OworCQlmaXFoYW5kbGVyX2xlbmd0aCA9ICZmbG9wcHlfZmlxaW5fZW5kIC0gJmZsb3BweV9maXFpbl9zdGFydDsKKwl9IGVsc2UgeworCQlleHRlcm4gdW5zaWduZWQgY2hhciBmbG9wcHlfZmlxb3V0X3N0YXJ0LCBmbG9wcHlfZmlxb3V0X2VuZDsKKwkJZmlxaGFuZGxlcl9zdGFydCA9ICZmbG9wcHlfZmlxb3V0X3N0YXJ0OworCQlmaXFoYW5kbGVyX2xlbmd0aCA9ICZmbG9wcHlfZmlxb3V0X2VuZCAtICZmbG9wcHlfZmlxb3V0X3N0YXJ0OworCX0KKworCXJlZ3MuQVJNX3I5ICA9IGRtYS0+YnVmLmxlbmd0aDsKKwlyZWdzLkFSTV9yMTAgPSAodW5zaWduZWQgbG9uZylkbWEtPmJ1Zi5fX2FkZHJlc3M7CisJcmVncy5BUk1fZnAgID0gKHVuc2lnbmVkIGxvbmcpRkxPUFBZRE1BX0JBU0U7CisKKwlpZiAoY2xhaW1fZmlxKCZmaCkpIHsKKwkJcHJpbnRrKCJmbG9wcHlkbWE6IGNvdWxkbid0IGNsYWltIEZJUS5cbiIpOworCQlyZXR1cm47CisJfQorCisJc2V0X2ZpcV9oYW5kbGVyKGZpcWhhbmRsZXJfc3RhcnQsIGZpcWhhbmRsZXJfbGVuZ3RoKTsKKwlzZXRfZmlxX3JlZ3MoJnJlZ3MpOworCWVuYWJsZV9maXEoZG1hLT5kbWFfaXJxKTsKK30KKworc3RhdGljIHZvaWQgZmxvcHB5X2Rpc2FibGVfZG1hKGRtYWNoX3QgY2hhbm5lbCwgZG1hX3QgKmRtYSkKK3sKKwlkaXNhYmxlX2ZpcShkbWEtPmRtYV9pcnEpOworCXJlbGVhc2VfZmlxKCZmaCk7Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X2dldF9yZXNpZHVlKGRtYWNoX3QgY2hhbm5lbCwgZG1hX3QgKmRtYSkKK3sKKwlzdHJ1Y3QgcHRfcmVncyByZWdzOworCWdldF9maXFfcmVncygmcmVncyk7CisJcmV0dXJuIHJlZ3MuQVJNX3I5OworfQorCitzdGF0aWMgc3RydWN0IGRtYV9vcHMgZmxvcHB5X2RtYV9vcHMgPSB7CisJLnR5cGUJCT0gIkZJUURNQSIsCisJLmVuYWJsZQkJPSBmbG9wcHlfZW5hYmxlX2RtYSwKKwkuZGlzYWJsZQk9IGZsb3BweV9kaXNhYmxlX2RtYSwKKwkucmVzaWR1ZQk9IGZsb3BweV9nZXRfcmVzaWR1ZSwKK307CisKKy8qCisgKiBUaGlzIGlzIHZpcnR1YWwgRE1BIC0gd2UgZG9uJ3QgbmVlZCBhbnl0aGluZyBoZXJlLgorICovCitzdGF0aWMgdm9pZCBzb3VuZF9lbmFibGVfZGlzYWJsZV9kbWEoZG1hY2hfdCBjaGFubmVsLCBkbWFfdCAqZG1hKQoreworfQorCitzdGF0aWMgc3RydWN0IGRtYV9vcHMgc291bmRfZG1hX29wcyA9IHsKKwkudHlwZQkJPSAiVklSVFVBTCIsCisJLmVuYWJsZQkJPSBzb3VuZF9lbmFibGVfZGlzYWJsZV9kbWEsCisJLmRpc2FibGUJPSBzb3VuZF9lbmFibGVfZGlzYWJsZV9kbWEsCit9OworCit2b2lkIF9faW5pdCBhcmNoX2RtYV9pbml0KGRtYV90ICpkbWEpCit7CisJaW9tZF93cml0ZWIoMCwgSU9NRF9JTzBDUik7CisJaW9tZF93cml0ZWIoMCwgSU9NRF9JTzFDUik7CisJaW9tZF93cml0ZWIoMCwgSU9NRF9JTzJDUik7CisJaW9tZF93cml0ZWIoMCwgSU9NRF9JTzNDUik7CisKKwlpb21kX3dyaXRlYigweGEwLCBJT01EX0RNQVRDUik7CisKKwlkbWFbRE1BXzBdLmRtYV9iYXNlCQk9IElPTURfSU8wQ1VSQTsKKwlkbWFbRE1BXzBdLmRtYV9pcnEJCT0gSVJRX0RNQTA7CisJZG1hW0RNQV8wXS5kX29wcwkJPSAmaW9tZF9kbWFfb3BzOworCWRtYVtETUFfMV0uZG1hX2Jhc2UJCT0gSU9NRF9JTzFDVVJBOworCWRtYVtETUFfMV0uZG1hX2lycQkJPSBJUlFfRE1BMTsKKwlkbWFbRE1BXzFdLmRfb3BzCQk9ICZpb21kX2RtYV9vcHM7CisJZG1hW0RNQV8yXS5kbWFfYmFzZQkJPSBJT01EX0lPMkNVUkE7CisJZG1hW0RNQV8yXS5kbWFfaXJxCQk9IElSUV9ETUEyOworCWRtYVtETUFfMl0uZF9vcHMJCT0gJmlvbWRfZG1hX29wczsKKwlkbWFbRE1BXzNdLmRtYV9iYXNlCQk9IElPTURfSU8zQ1VSQTsKKwlkbWFbRE1BXzNdLmRtYV9pcnEJCT0gSVJRX0RNQTM7CisJZG1hW0RNQV8zXS5kX29wcwkJPSAmaW9tZF9kbWFfb3BzOworCWRtYVtETUFfUzBdLmRtYV9iYXNlCQk9IElPTURfU0QwQ1VSQTsKKwlkbWFbRE1BX1MwXS5kbWFfaXJxCQk9IElSUV9ETUFTMDsKKwlkbWFbRE1BX1MwXS5kX29wcwkJPSAmaW9tZF9kbWFfb3BzOworCWRtYVtETUFfUzFdLmRtYV9iYXNlCQk9IElPTURfU0QxQ1VSQTsKKwlkbWFbRE1BX1MxXS5kbWFfaXJxCQk9IElSUV9ETUFTMTsKKwlkbWFbRE1BX1MxXS5kX29wcwkJPSAmaW9tZF9kbWFfb3BzOworCWRtYVtETUFfVklSVFVBTF9GTE9QUFldLmRtYV9pcnEJPSBGSVFfRkxPUFBZREFUQTsKKwlkbWFbRE1BX1ZJUlRVQUxfRkxPUFBZXS5kX29wcwk9ICZmbG9wcHlfZG1hX29wczsKKwlkbWFbRE1BX1ZJUlRVQUxfU09VTkRdLmRfb3BzCT0gJnNvdW5kX2RtYV9vcHM7CisKKwkvKgorCSAqIFNldHVwIERNQSBjaGFubmVscyAyLDMgdG8gYmUgZm9yIHBvZHVsZXMKKwkgKiBhbmQgY2hhbm5lbHMgMCwxIGZvciBpbnRlcm5hbCBkZXZpY2VzCisJICovCisJaW9tZF93cml0ZWIoRE1BX0VYVF9JTzN8RE1BX0VYVF9JTzIsIElPTURfRE1BRVhUKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcnBjL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1ycGMvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZiMjcxNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcnBjL2lycS5jCkBAIC0wLDAgKzEsMTYyIEBACisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pb21kLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdGF0aWMgdm9pZCBpb21kX2Fja19pcnFfYSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCB2YWwsIG1hc2s7CisKKwltYXNrID0gMSA8PCBpcnE7CisJdmFsID0gaW9tZF9yZWFkYihJT01EX0lSUU1BU0tBKTsKKwlpb21kX3dyaXRlYih2YWwgJiB+bWFzaywgSU9NRF9JUlFNQVNLQSk7CisJaW9tZF93cml0ZWIobWFzaywgSU9NRF9JUlFDTFJBKTsKK30KKworc3RhdGljIHZvaWQgaW9tZF9tYXNrX2lycV9hKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IHZhbCwgbWFzazsKKworCW1hc2sgPSAxIDw8IGlycTsKKwl2YWwgPSBpb21kX3JlYWRiKElPTURfSVJRTUFTS0EpOworCWlvbWRfd3JpdGViKHZhbCAmIH5tYXNrLCBJT01EX0lSUU1BU0tBKTsKK30KKworc3RhdGljIHZvaWQgaW9tZF91bm1hc2tfaXJxX2EodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsLCBtYXNrOworCisJbWFzayA9IDEgPDwgaXJxOworCXZhbCA9IGlvbWRfcmVhZGIoSU9NRF9JUlFNQVNLQSk7CisJaW9tZF93cml0ZWIodmFsIHwgbWFzaywgSU9NRF9JUlFNQVNLQSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBpb21kX2FfY2hpcCA9IHsKKwkuYWNrCT0gaW9tZF9hY2tfaXJxX2EsCisJLm1hc2sJPSBpb21kX21hc2tfaXJxX2EsCisJLnVubWFzayA9IGlvbWRfdW5tYXNrX2lycV9hLAorfTsKKworc3RhdGljIHZvaWQgaW9tZF9tYXNrX2lycV9iKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IHZhbCwgbWFzazsKKworCW1hc2sgPSAxIDw8IChpcnEgJiA3KTsKKwl2YWwgPSBpb21kX3JlYWRiKElPTURfSVJRTUFTS0IpOworCWlvbWRfd3JpdGViKHZhbCAmIH5tYXNrLCBJT01EX0lSUU1BU0tCKTsKK30KKworc3RhdGljIHZvaWQgaW9tZF91bm1hc2tfaXJxX2IodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsLCBtYXNrOworCisJbWFzayA9IDEgPDwgKGlycSAmIDcpOworCXZhbCA9IGlvbWRfcmVhZGIoSU9NRF9JUlFNQVNLQik7CisJaW9tZF93cml0ZWIodmFsIHwgbWFzaywgSU9NRF9JUlFNQVNLQik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBpb21kX2JfY2hpcCA9IHsKKwkuYWNrCT0gaW9tZF9tYXNrX2lycV9iLAorCS5tYXNrCT0gaW9tZF9tYXNrX2lycV9iLAorCS51bm1hc2sgPSBpb21kX3VubWFza19pcnFfYiwKK307CisKK3N0YXRpYyB2b2lkIGlvbWRfbWFza19pcnFfZG1hKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IHZhbCwgbWFzazsKKworCW1hc2sgPSAxIDw8IChpcnEgJiA3KTsKKwl2YWwgPSBpb21kX3JlYWRiKElPTURfRE1BTUFTSyk7CisJaW9tZF93cml0ZWIodmFsICYgfm1hc2ssIElPTURfRE1BTUFTSyk7Cit9CisKK3N0YXRpYyB2b2lkIGlvbWRfdW5tYXNrX2lycV9kbWEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsLCBtYXNrOworCisJbWFzayA9IDEgPDwgKGlycSAmIDcpOworCXZhbCA9IGlvbWRfcmVhZGIoSU9NRF9ETUFNQVNLKTsKKwlpb21kX3dyaXRlYih2YWwgfCBtYXNrLCBJT01EX0RNQU1BU0spOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgaW9tZF9kbWFfY2hpcCA9IHsKKwkuYWNrCT0gaW9tZF9tYXNrX2lycV9kbWEsCisJLm1hc2sJPSBpb21kX21hc2tfaXJxX2RtYSwKKwkudW5tYXNrID0gaW9tZF91bm1hc2tfaXJxX2RtYSwKK307CisKK3N0YXRpYyB2b2lkIGlvbWRfbWFza19pcnFfZmlxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IHZhbCwgbWFzazsKKworCW1hc2sgPSAxIDw8IChpcnEgJiA3KTsKKwl2YWwgPSBpb21kX3JlYWRiKElPTURfRklRTUFTSyk7CisJaW9tZF93cml0ZWIodmFsICYgfm1hc2ssIElPTURfRklRTUFTSyk7Cit9CisKK3N0YXRpYyB2b2lkIGlvbWRfdW5tYXNrX2lycV9maXEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsLCBtYXNrOworCisJbWFzayA9IDEgPDwgKGlycSAmIDcpOworCXZhbCA9IGlvbWRfcmVhZGIoSU9NRF9GSVFNQVNLKTsKKwlpb21kX3dyaXRlYih2YWwgfCBtYXNrLCBJT01EX0ZJUU1BU0spOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgaW9tZF9maXFfY2hpcCA9IHsKKwkuYWNrCT0gaW9tZF9tYXNrX2lycV9maXEsCisJLm1hc2sJPSBpb21kX21hc2tfaXJxX2ZpcSwKKwkudW5tYXNrID0gaW9tZF91bm1hc2tfaXJxX2ZpcSwKK307CisKK3ZvaWQgX19pbml0IHJwY19pbml0X2lycSh2b2lkKQoreworCXVuc2lnbmVkIGludCBpcnEsIGZsYWdzOworCisJaW9tZF93cml0ZWIoMCwgSU9NRF9JUlFNQVNLQSk7CisJaW9tZF93cml0ZWIoMCwgSU9NRF9JUlFNQVNLQik7CisJaW9tZF93cml0ZWIoMCwgSU9NRF9GSVFNQVNLKTsKKwlpb21kX3dyaXRlYigwLCBJT01EX0RNQU1BU0spOworCisJZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTOyBpcnErKykgeworCQlmbGFncyA9IElSUUZfVkFMSUQ7CisKKwkJaWYgKGlycSA8PSA2IHx8IChpcnEgPj0gOSAmJiBpcnEgPD0gMTUpKQorCQkJZmxhZ3MgfD0gSVJRRl9QUk9CRTsKKworCQlpZiAoaXJxID09IDIxIHx8IChpcnEgPj0gMTYgJiYgaXJxIDw9IDE5KSB8fAorCQkgICAgaXJxID09IElSUV9LRVlCT0FSRFRYKQorCQkJZmxhZ3MgfD0gSVJRRl9OT0FVVE9FTjsKKworCQlzd2l0Y2ggKGlycSkgeworCQljYXNlIDAgLi4uIDc6CisJCQlzZXRfaXJxX2NoaXAoaXJxLCAmaW9tZF9hX2NoaXApOworCQkJc2V0X2lycV9oYW5kbGVyKGlycSwgZG9fbGV2ZWxfSVJRKTsKKwkJCXNldF9pcnFfZmxhZ3MoaXJxLCBmbGFncyk7CisJCQlicmVhazsKKworCQljYXNlIDggLi4uIDE1OgorCQkJc2V0X2lycV9jaGlwKGlycSwgJmlvbWRfYl9jaGlwKTsKKwkJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2xldmVsX0lSUSk7CisJCQlzZXRfaXJxX2ZsYWdzKGlycSwgZmxhZ3MpOworCQkJYnJlYWs7CisKKwkJY2FzZSAxNiAuLi4gMjE6CisJCQlzZXRfaXJxX2NoaXAoaXJxLCAmaW9tZF9kbWFfY2hpcCk7CisJCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBkb19sZXZlbF9JUlEpOworCQkJc2V0X2lycV9mbGFncyhpcnEsIGZsYWdzKTsKKwkJCWJyZWFrOworCisJCWNhc2UgNjQgLi4uIDcxOgorCQkJc2V0X2lycV9jaGlwKGlycSwgJmlvbWRfZmlxX2NoaXApOworCQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpbml0X0ZJUSgpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJwYy9yaXNjcGMuYyBiL2FyY2gvYXJtL21hY2gtcnBjL3Jpc2NwYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNWM1MzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXJwYy9yaXNjcGMuYwpAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXJwYy9yaXNjcGMuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMSBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgZml4dXBzLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisKKyNpbmNsdWRlIDxhc20vZWxmLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9kb21haW4uaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKK2V4dGVybiB2b2lkIHJwY19pbml0X2lycSh2b2lkKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCB2cmFtX3NpemU7CisKKyNpZiAwCisKK3Vuc2lnbmVkIGludCBtZW1jX2N0cmxfcmVnOwordW5zaWduZWQgaW50IG51bWJlcl9tZm1fZHJpdmVzOworCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV90YWdfYWNvcm4oY29uc3Qgc3RydWN0IHRhZyAqdGFnKQoreworCW1lbWNfY3RybF9yZWcgPSB0YWctPnUuYWNvcm4ubWVtY19jb250cm9sX3JlZzsKKwludW1iZXJfbWZtX2RyaXZlcyA9IHRhZy0+dS5hY29ybi5hZGZzZHJpdmVzOworCisJc3dpdGNoICh0YWctPnUuYWNvcm4udnJhbV9wYWdlcykgeworCWNhc2UgNTEyOgorCQl2cmFtX3NpemUgKz0gUEFHRV9TSVpFICogMjU2OworCWNhc2UgMjU2OgorCQl2cmFtX3NpemUgKz0gUEFHRV9TSVpFICogMjU2OworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKyNpZiAwCisJaWYgKHZyYW1fc2l6ZSkgeworCQlkZXNjLT52aWRlb19zdGFydCA9IDB4MDIwMDAwMDA7CisJCWRlc2MtPnZpZGVvX2VuZCAgID0gMHgwMjAwMDAwMCArIHZyYW1fc2l6ZTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworX190YWd0YWJsZShBVEFHX0FDT1JOLCBwYXJzZV90YWdfYWNvcm4pOworCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBycGNfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisgeyBTQ1JFRU5fQkFTRSwJU0NSRUVOX1NUQVJULAkyKjEwNDg1NzYsIE1UX0RFVklDRSB9LCAvKiBWUkFNCQkqLworIHsgKHUzMilJT19CQVNFLCBJT19TVEFSVCwJSU9fU0laRQkgLCBNVF9ERVZJQ0UgfSwgLyogSU8gc3BhY2UJKi8KKyB7IEVBU0lfQkFTRSwJRUFTSV9TVEFSVCwJRUFTSV9TSVpFLCBNVF9ERVZJQ0UgfSAgLyogRUFTSSBzcGFjZQkqLworfTsKKworc3RhdGljIHZvaWQgX19pbml0IHJwY19tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQocnBjX2lvX2Rlc2MsIEFSUkFZX1NJWkUocnBjX2lvX2Rlc2MpKTsKKworCS8qCisJICogVHVybiBvZmYgZmxvcHB5LgorCSAqLworCW91dGIoMHhjLCAweDNmMik7CisKKwkvKgorCSAqIFJpc2NQQyBjYW4ndCBoYW5kbGUgaGFsZi13b3JkIGxvYWRzIGFuZCBzdG9yZXMKKwkgKi8KKwllbGZfaHdjYXAgJj0gfkhXQ0FQX0hBTEY7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYWNvcm5mYl9yZXNvdXJjZXNbXSA9IHsKKwl7CS8qIFZJREMgKi8KKwkJLnN0YXJ0CQk9IDB4MDM0MDAwMDAsCisJCS5lbmQJCT0gMHgwMzVmZmZmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0CQk9IElSUV9WU1lOQ1BVTFNFLAorCQkuZW5kCQk9IElSUV9WU1lOQ1BVTFNFLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFjb3JuZmJfZGV2aWNlID0geworCS5uYW1lCQkJPSAiYWNvcm5mYiIsCisJLmlkCQkJPSAtMSwKKwkuZGV2CQkJPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJfSwKKwkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKGFjb3JuZmJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJCT0gYWNvcm5mYl9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlvbWRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gMHgwMzIwMDAwMCwKKwkJLmVuZAkJPSAweDAzMjBmZmZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlvbWRfZGV2aWNlID0geworCS5uYW1lCQkJPSAiaW9tZCIsCisJLmlkCQkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKGlvbWRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJCT0gaW9tZF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBrYmRfZGV2aWNlID0geworCS5uYW1lCQkJPSAia2FydCIsCisJLmlkCQkJPSAtMSwKKwkuZGV2CQkJPSB7CisJCS5wYXJlbnQgCT0gJmlvbWRfZGV2aWNlLmRldiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0geworCXsKKwkJLm1hcGJhc2UJPSAweDAzMDEwZmUwLAorCQkuaXJxCQk9IDEwLAorCQkudWFydGNsawk9IDE4NDMyMDAsCisJCS5yZWdzaGlmdAk9IDIsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9JT1JFTUFQIHwgVVBGX1NLSVBfVEVTVCwKKwl9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNlcmlhbF9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJzZXJpYWw4MjUwIiwKKwkuaWQJCQk9IDAsCisJLmRldgkJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2c1tdIF9faW5pdGRhdGEgPSB7CisJJmlvbWRfZGV2aWNlLAorCSZrYmRfZGV2aWNlLAorCSZzZXJpYWxfZGV2aWNlLAorCSZhY29ybmZiX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHJwY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldnMsIEFSUkFZX1NJWkUoZGV2cykpOworfQorCithcmNoX2luaXRjYWxsKHJwY19pbml0KTsKKworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgaW9jX3RpbWVyOworCitNQUNISU5FX1NUQVJUKFJJU0NQQywgIkFjb3JuLVJpc2NQQyIpCisJTUFJTlRBSU5FUigiUnVzc2VsbCBLaW5nIikKKwlCT09UX01FTSgweDEwMDAwMDAwLCAweDAzMDAwMDAwLCAweGUwMDAwMDAwKQorCUJPT1RfUEFSQU1TKDB4MTAwMDAxMDApCisJRElTQUJMRV9QQVJQT1JUKDApCisJRElTQUJMRV9QQVJQT1JUKDEpCisJTUFQSU8ocnBjX21hcF9pbykKKwlJTklUSVJRKHJwY19pbml0X2lycSkKKwkudGltZXIJCT0gJmlvY190aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNGRmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZwpAQCAtMCwwICsxLDE2OSBAQAoraWYgQVJDSF9TM0MyNDEwCisKK21lbnUgIlMzQzI0WFggSW1wbGVtZW50YXRpb25zIgorCitjb25maWcgQVJDSF9CQVNUCisJYm9vbCAiU2ltdGVjIEVsZWN0cm9uaWNzIEJBU1QgKEVCMjQxMElUWCkiCisJc2VsZWN0IENQVV9TM0MyNDEwCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTaW10ZWMgRWxlY3Ryb25pY3MgRUIyNDEwSVRYCisJICBkZXZlbG9wbWVudCBib2FyZCAoYWxzbyBrbm93biBhcyBCQVNUKQorCisJICBQcm9kdWN0IHBhZ2U6IDxodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9FQjI0MTBJVFgvPi4KKworY29uZmlnIEFSQ0hfSDE5NDAKKwlib29sICJJUEFRIEgxOTQwIgorCXNlbGVjdCBDUFVfUzNDMjQxMAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgSFAgSVBBUSBIMTk0MAorCisJICA8aHR0cDovL3d3dy5oYW5kaGVsZHMub3JnL3Byb2plY3RzL2gxOTQwLmh0bWw+LgorCitjb25maWcgTUFDSF9OMzAKKwlib29sICJBY2VyIE4zMCIKKwlzZWxlY3QgQ1BVX1MzQzI0MTAKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEFjZXIgTjMwCisKKwkgIDxodHRwOi8vem9vLndlaW5pZ2VsLnNlL24zMD4uCisKK2NvbmZpZyBBUkNIX1NNREsyNDEwCisJYm9vbCAiU01ESzI0MTAvQTlNMjQxMCIKKwlzZWxlY3QgQ1BVX1MzQzI0MTAKKwloZWxwCisJICAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTTURLMjQxMCBvciB0aGUgZGVyaXZlZCBtb2R1bGUgQTlNMjQxMAorICAgICAgICAgICA8aHR0cDovL3d3dy5mc2ZvcnRoLmRlPgorCitjb25maWcgQVJDSF9TM0MyNDQwCisJYm9vbCAiU01ESzI0NDAiCisJc2VsZWN0IENQVV9TM0MyNDQwCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTTURLMjQ0MC4KKworY29uZmlnIE1BQ0hfVlIxMDAwCisJYm9vbCAiVGhvcmNvbSBWUjEwMDAiCisJc2VsZWN0IENQVV9TM0MyNDEwCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBUaG9yY29tIFZSMTAwMCBib2FyZC4KKworCSAgVGhpcyBsaW51eCBwb3J0IGlzIGN1cnJlbnRseSBiZWluZyBtYWludGFpbmVkIGJ5IFNpbXRlYywgb24gYmVoYWxmCisJICBvZiBUaG9yY29tLiBBbnkgcXVlcmllcywgcGxlYXNlIGNvbnRhY3QgVGhvcmNvbSBmaXJzdC4KKworY29uZmlnIE1BQ0hfUlgzNzE1CisJYm9vbCAiSFAgaVBBUSByeDM3MTUiCisJc2VsZWN0IENQVV9TM0MyNDQwCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBIUCBpUEFRIHJ4MzcxNS4KKworCSAgU2VlIDxodHRwOi8vd3d3LmhhbmRoZWxkcy5vcmcvcHJvamVjdHMvcngzNzE1Lmh0bWw+IGZvciBtb3JlCisJICBpbmZvcm1hdGlvbiBvbiB0aGlzIHByb2plY3QKKworY29uZmlnIE1BQ0hfT1RPTQorIAlib29sICJOZXhWaXNpb24gT1RPTSBCb2FyZCIKKyAJc2VsZWN0IENQVV9TM0MyNDEwCisJaGVscAorIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgTmV4IFZpc2lvbiBPVE9NIGJvYXJkCisKK2NvbmZpZyBNQUNIX05FWENPREVSXzI0NDAKKyAJYm9vbCAiTmV4VmlzaW9uIE5FWENPREVSIDI0NDAgTGlnaHQgQm9hcmQiCisgCXNlbGVjdCBDUFVfUzNDMjQ0MAorCWhlbHAKKyAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIE5leCBWaXNpb24gTkVYQ09ERVIgMjQ0MCBMaWdodCBCb2FyZAorCitlbmRtZW51CisKK2NvbmZpZyBDUFVfUzNDMjQxMAorCWJvb2wKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMAorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIFMzQzI0MTAgYW5kIFMzQzI0MTBBIGZhbWlseSBmcm9tIHRoZSBTM0MyNFhYIGxpbmUKKwkgIG9mIFNhbXN1bmcgTW9iaWxlIENQVXMuCisKK2NvbmZpZyBDUFVfUzNDMjQ0MAorCWJvb2wKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMAorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIFMzQzI0NDAgU2Ftc3VuZyBNb2JpbGUgQ1BVIGJhc2VkIHN5c3RlbXMuCisKK2NvbW1lbnQgIlMzQzI0MTAgQm9vdCIKKworY29uZmlnIFMzQzI0MTBfQk9PVF9XQVRDSERPRworCWJvb2wgIlMzQzI0MTAgSW5pdGlhbGlzYXRpb24gd2F0Y2hkb2ciCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgJiYgUzNDMjQxMF9XQVRDSERPRworCWhlbHAKKwkgIFNheSB5IHRvIGVuYWJsZSB0aGUgd2F0Y2hkb2cgZHVyaW5nIHRoZSBrZXJuZWwgZGVjb21wcmVzc2lvbgorCSAgc3RhZ2UuIElmIHRoZSBrZXJuZWwgZmFpbHMgdG8gdW5jb21wcmVzcywgdGhlbiB0aGUgd2F0Y2hkb2cKKwkgIHdpbGwgdHJpZ2dlciBhIHJlc2V0IGFuZCB0aGUgc3lzdGVtIHNob3VsZCByZXN0YXJ0LgorCisJICBBbHRob3VnaCB0aGlzIHVzZXMgdGhlIHNhbWUgaGFyZHdhcmUgdW5pdCBhcyB0aGUga2VybmVsIHdhdGNoZG9nCisJICBkcml2ZXIsIGl0IGlzIG5vdCBhIHJlcGxhY2VtZW50IGZvciBpdC4gSWYgeW91IHVzZSB0aGlzIG9wdGlvbiwKKwkgIHlvdSB3aWxsIGhhdmUgdG8gdXNlIHRoZSB3YXRjaGRnIGRyaXZlciB0byBlaXRoZXIgc3RvcCB0aGUgdGltZW91dAorCSAgb3IgcmVzdGFydCBpdC4gSWYgeW91IGRvIG5vdCwgdGhlbiB5b3VyIGtlcm5lbCB3aWxsIHJlYm9vdCBhZnRlcgorCSAgc3RhcnR1cC4KKworCSAgVGhlIGRyaXZlciB1c2VzIGEgZml4ZWQgdGltZW91dCB2YWx1ZSwgc28gdGhlIGV4YWN0IHRpbWUgdGlsbCB0aGUKKwkgIHN5c3RlbSByZXNldHMgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgUENMSy4gVGhlIHRpbWVvdXQgb24gYW4KKwkgIDIwME1IeiBzM2MyNDEwIHNob3VsZCBiZSBhYm91dCAzMCBzZWNvbmRzLgorCitjb21tZW50ICJTM0MyNDEwIFNldHVwIgorCitjb25maWcgUzNDMjQxMF9ETUEKKwlib29sICJTM0MyNDEwIERNQSBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCisJaGVscAorCSAgUzNDMjQxMCBETUEgc3VwcG9ydC4gVGhpcyBpcyBuZWVkZWQgZm9yIGRyaXZlcnMgbGlrZSBzb3VuZCB3aGljaAorCSAgdXNlIHRoZSBTM0MyNDEwJ3MgRE1BIHN5c3RlbSB0byBtb3ZlIGRhdGEgdG8gYW5kIGZyb20gdGhlCisJICBwZXJpcGhlcmFsIGJsb2Nrcy4KKworY29uZmlnIFMzQzI0MTBfRE1BX0RFQlVHCisJYm9vbCAiUzNDMjQxMCBETUEgc3VwcG9ydCBkZWJ1ZyIKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCAmJiBTM0MyNDEwX0RNQQorCWhlbHAKKwkgIEVuYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0IGZvciB0aGUgRE1BIGNvZGUuIFRoaXMgb3B0aW9uIHNlbmRzIGluZm8KKwkgIHRvIHRoZSBrZXJuZWwgbG9nLCBhdCBwcmlvcml0eSBLRVJOX0RFQlVHLgorCisJICBOb3RlLCBpdCBpcyBlYXN5IHRvIGNyZWF0ZSBhbmQgZmlsbCB0aGUgbG9nIGJ1ZmZlciBpbiBhIHNtYWxsCisJICBhbW91bnQgb2YgdGltZSwgYXMgd2VsbCBhcyB1c2luZyBhbiBzaWduaWZpY2FudCBwZXJjZW50YWdlIG9mCisJICB0aGUgQ1BVIHRpbWUgZG9pbmcgc28uCisKKworY29uZmlnIFMzQzI0MTBfUE1fREVCVUcKKwlib29sICJTM0MyNDEwIFBNIFN1c3BlbmQgZGVidWciCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgJiYgUE0KKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHZlcmJvc2UgZGVidWdnaW5nIGZyb20gdGhlIFBNIFN1c3BlbmQgYW5kCisJICBSZXN1bWUgY29kZS4gU2VlIGBEb2N1bWVudGF0aW9uL2FybS9TYW1zaW5nLVMzQzI0WFgvU3VzcGVuZC50eHRgCisJICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworY29uZmlnIFMzQzI0MTBfUE1fQ0hFQ0sKKwlib29sICJTM0MyNDEwIFBNIFN1c3BlbmQgTWVtb3J5IENSQyIKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCAmJiBQTSAmJiBDUkMzMgorCWhlbHAKKyAJICBFbmFibGUgdGhlIFBNIGNvZGUncyBtZW1vcnkgYXJlYSBjaGVja3N1bSBvdmVyIHNsZWVwLiBUaGlzIG9wdGlvbgorCSAgd2lsbCBnZW5lcmF0ZSBDUkNzIG9mIGFsbCBibG9ja3Mgb2YgbWVtb3J5LCBhbmQgc3RvcmUgdGhlbSBiZWZvcmUKKwkgIGdvaW5nIHRvIHNsZWVwLiBUaGUgYmxvY2tzIGFyZSB0aGVuIGNoZWNrZWQgb24gcmVzdW1lIGZvciBhbnkKKwkgIGVycm9ycy4KKworY29uZmlnIFMzQzI0MTBfUE1fQ0hFQ0tfQ0hVTktTSVpFCisJaW50ICJTM0MyNDEwIFBNIFN1c3BlbmQgQ1JDIENodW5rc2l6ZSAoS2lCKSIKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCAmJiBQTSAmJiBTM0MyNDEwX1BNX0NIRUNLCisJZGVmYXVsdCA2NAorCWhlbHAKKwkgIFNldCB0aGUgY2h1bmtzaXplIGluIEtpbG9ieXRlcyBvZiB0aGUgQ1JDIGZvciBjaGVja2luZyBtZW1vcnkKKwkgIGNvcnJ1cHRpb24gb3ZlciBzdXNwZW5kIGFuZCByZXN1bWUuIEEgc21hbGxlciB2YWx1ZSB3aWxsIG1lYW4gdGhhdAorCSAgdGhlIENSQyBkYXRhIGJsb2NrIHdpbGwgdGFrZSBtb3JlIG1lbW9yeSwgYnV0IHdpbCBpZGVudGlmeSBhbnkKKwkgIGZhdWx0cyB3aXRoIGJldHRlciBwcmVjaXNpb24uCisKK2NvbmZpZyBTM0MyNDEwX0xPV0xFVkVMX1VBUlRfUE9SVAorCWludCAiUzNDMjQxMCBVQVJUIHRvIHVzZSBmb3IgbG93LWxldmVsIG1lc3NhZ2VzIgorCWRlZmF1bHQgMAorCWhlbHAKKwkgIENob2ljZSBvZiB3aGljaCBVQVJUIHBvcnQgdG8gdXNlIGZvciB0aGUgbG93LWxldmVsIG1lc3NhZ2VzLAorCSAgc3VjaCBhcyB0aGUgYFVuY29tcHJlc3NpbmcuLi5gIGF0IHN0YXJ0IHRpbWUuIFRoZSB2YWx1ZSBvZgorCSAgdGhpcyBjb25maWd1cmF0aW9uIHNob3VsZCBiZSBiZXR3ZWVuIHplcm8gYW5kIHR3by4gVGhlIHBvcnQKKwkgIG11c3QgaGF2ZSBiZWVuIGluaXRpYWxpc2VkIGJ5IHRoZSBib290LWxvYWRlciBiZWZvcmUgdXNlLgorCisJICBOb3RlLCB0aGlzIGRvZXMgbm90IGFmZmVjdCB0aGUgcG9ydCB1c2VkIGJ5IHRoZSBkZWJ1ZyBtZXNzYWdlcywKKwkgIHdoaWNoIGlzIGEgc2VwYXJhdGUgY29uZmlndXJhdGlvbi4KKworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzM3OWFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlCkBAIC0wLDAgKzEsMzYgQEAKKworIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMKKworIyBPYmplY3QgZmlsZSBsaXN0cy4KKworb2JqLXkJCQk6PSBjcHUubyBpcnEubyB0aW1lLm8gZ3Bpby5vIGNsb2NrLm8gZGV2cy5vCitvYmotbQkJCTo9CitvYmotbgkJCTo9CitvYmotCQkJOj0KKworIyBTM0MyNDEwIHN1cHBvcnQgZmlsZXMKKworb2JqLSQoQ09ORklHX0NQVV9TM0MyNDEwKSAgKz0gczNjMjQxMC5vCitvYmotJChDT05GSUdfUzNDMjQxMF9ETUEpICArPSBkbWEubworCisjIFBvd2VyIE1hbmFnZW1lbnQgc3VwcG9ydAorCitvYmotJChDT05GSUdfUE0pCSAgICs9IHBtLm8gc2xlZXAubworCisjIFMzQzI0NDAgc3VwcG9ydAorCitvYmotJChDT05GSUdfQ1BVX1MzQzI0NDApICArPSBzM2MyNDQwLm8gczNjMjQ0MC1kc2MubworCisjIG1hY2hpbmUgc3BlY2lmaWMgc3VwcG9ydAorCitvYmotJChDT05GSUdfQVJDSF9CQVNUKQkJKz0gbWFjaC1iYXN0Lm8gdXNiLXNpbXRlYy5vCitvYmotJChDT05GSUdfQVJDSF9IMTk0MCkJKz0gbWFjaC1oMTk0MC5vCitvYmotJChDT05GSUdfTUFDSF9OMzApCQkrPSBtYWNoLW4zMC5vCitvYmotJChDT05GSUdfQVJDSF9TTURLMjQxMCkJKz0gbWFjaC1zbWRrMjQxMC5vCitvYmotJChDT05GSUdfQVJDSF9TM0MyNDQwKQkrPSBtYWNoLXNtZGsyNDQwLm8KK29iai0kKENPTkZJR19NQUNIX1ZSMTAwMCkJKz0gbWFjaC12cjEwMDAubyB1c2Itc2ltdGVjLm8KK29iai0kKENPTkZJR19NQUNIX1JYMzcxNSkJKz0gbWFjaC1yeDM3MTUubworb2JqLSQoQ09ORklHX01BQ0hfT1RPTSkJCSs9IG1hY2gtb3RvbS5vCitvYmotJChDT05GSUdfTUFDSF9ORVhDT0RFUl8yNDQwKSArPSBtYWNoLW5leGNvZGVyLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RhYjJhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsMyBAQAorICAgenJlbGFkZHIteQk6PSAweDMwMDA4MDAwCitwYXJhbXNfcGh5cy15CTo9IDB4MzAwMDAxMDAKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaXJxLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvYmFzdC1pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTViYmU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaXJxLmMKQEAgLTAsMCArMSwxMzIgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9iYXN0LWlycS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcworICogICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvRUIyNDEwSVRYLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiBNb2RpZmljYXRpb25zOgorICogICAgIDA4LUphbi0yMDAzIEJKRCAgTW92ZWQgZnJvbSBjZW50cmFsIElSUSBjb2RlCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3MzYzI0MTAvaXJxLmg+CisKKyNpZiAwCisjaW5jbHVkZSA8YXNtL2RlYnVnLWxsLmg+CisjZW5kaWYKKworI2RlZmluZSBpcnFkYmYoeC4uLikKKyNkZWZpbmUgaXJxZGJmMih4Li4uKQorCisKKy8qIGhhbmRsZSBQQzEwNCBJU0EgaW50ZXJydXB0cyBmcm9tIHRoZSBzeXN0ZW0gQ1BMRCAqLworCisvKiB0YWJsZSBvZiBJU0EgaXJxIG5vcyB0byB0aGUgcmVsZXZhbnQgbWFzay4uLiB6ZXJvIG1lYW5zCisgKiB0aGUgaXJxIGlzIG5vdCBpbXBsZW1lbnRlZAorKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGJhc3RfcGMxMDRfaXJxbWFza3NbXSA9IHsKKwkwLCAgIC8qIDAgKi8KKwkwLCAgIC8qIDEgKi8KKwkwLCAgIC8qIDIgKi8KKwkxLCAgIC8qIDMgKi8KKwkwLCAgIC8qIDQgKi8KKwkyLCAgIC8qIDUgKi8KKwkwLCAgIC8qIDYgKi8KKwk0LCAgIC8qIDcgKi8KKwkwLCAgIC8qIDggKi8KKwkwLCAgIC8qIDkgKi8KKwk4LCAgIC8qIDEwICovCisJMCwgICAvKiAxMSAqLworCTAsICAgLyogMTIgKi8KKwkwLCAgIC8qIDEzICovCisJMCwgICAvKiAxNCAqLworCTAsICAgLyogMTUgKi8KK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGJhc3RfcGMxMDRfaXJxc1tdID0geyAzLCA1LCA3LCAxMCB9OworCitzdGF0aWMgdm9pZAorYmFzdF9wYzEwNF9tYXNrKHVuc2lnbmVkIGludCBpcnFubykKK3sKKwl1bnNpZ25lZCBsb25nIHRlbXA7CisKKwl0ZW1wID0gX19yYXdfcmVhZGIoQkFTVF9WQV9QQzEwNF9JUlFNQVNLKTsKKwl0ZW1wICY9IH5iYXN0X3BjMTA0X2lycW1hc2tzW2lycW5vXTsKKwlfX3Jhd193cml0ZWIodGVtcCwgQkFTVF9WQV9QQzEwNF9JUlFNQVNLKTsKKworCWlmICh0ZW1wID09IDApCisJCWJhc3RfZXh0aW50X21hc2soSVJRX0lTQSk7Cit9CisKK3N0YXRpYyB2b2lkCitiYXN0X3BjMTA0X2Fjayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJYmFzdF9leHRpbnRfYWNrKElSUV9JU0EpOworfQorCitzdGF0aWMgdm9pZAorYmFzdF9wYzEwNF91bm1hc2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworCXRlbXAgPSBfX3Jhd19yZWFkYihCQVNUX1ZBX1BDMTA0X0lSUU1BU0spOworCXRlbXAgfD0gYmFzdF9wYzEwNF9pcnFtYXNrc1tpcnFub107CisJX19yYXdfd3JpdGViKHRlbXAsIEJBU1RfVkFfUEMxMDRfSVJRTUFTSyk7CisKKwliYXN0X2V4dGludF91bm1hc2soSVJRX0lTQSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmFzdF9wYzEwNF9jaGlwID0geworCS5tYXNrCSAgICAgPSBiYXN0X3BjMTA0X21hc2ssCisJLnVubWFzawkgICAgID0gYmFzdF9wYzEwNF91bm1hc2ssCisJLmFjawkgICAgID0gYmFzdF9wYzEwNF9hY2sKK307CisKK3N0YXRpYyB2b2lkCitiYXN0X2lycV9wYzEwNF9kZW11eCh1bnNpZ25lZCBpbnQgaXJxLAorCQkgICAgIHN0cnVjdCBpcnFkZXNjICpkZXNjLAorCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBzdGF0OworCXVuc2lnbmVkIGludCBpcnFubzsKKwlpbnQgaTsKKworCXN0YXQgPSBfX3Jhd19yZWFkYihCQVNUX1ZBX1BDMTA0X0lSUVJFUSkgJiAweGY7CisKKwlmb3IgKGkgPSAwOyBpIDwgNCAmJiBzdGF0ICE9IDA7IGkrKykgeworCQlpZiAoc3RhdCAmIDEpIHsKKwkJCWlycW5vID0gYmFzdF9wYzEwNF9pcnFzW2ldOworCQkJZGVzYyA9IGlycV9kZXNjICsgaXJxbm87CisKKwkJCWRlc2MtPmhhbmRsZShpcnFubywgZGVzYywgcmVncyk7CisJCX0KKworCQlzdGF0ID4+PSAxOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9iYXN0LmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvYmFzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZDAzMzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvYmFzdC5oCkBAIC0wLDAgKzEsMiBAQAorCitleHRlcm4gdm9pZCBiYXN0X2luaXRfaXJxKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjNmNTM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMKQEAgLTAsMCArMSw1MDcgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjQxMCBDbG9jayBjb250cm9sIHN1cHBvcnQKKyAqCisgKiBCYXNlZCBvbiwgYW5kIGNvZGUgZnJvbSBsaW51eC9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jbG9jay5jCisgKioKKyAqKiAgQ29weXJpZ2h0IChDKSAyMDA0IEFSTSBMaW1pdGVkLgorICoqICBXcml0dGVuIGJ5IERlZXAgQmx1ZSBTb2x1dGlvbnMgTGltaXRlZC4KKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY2xvY2suaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY3B1LmgiCisKKy8qIGNsb2NrIGluZm9ybWF0aW9uICovCisKK3N0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKK3N0YXRpYyBERUNMQVJFX01VVEVYKGNsb2Nrc19zZW0pOworCisvKiBvbGQgZnVuY3Rpb25zICovCisKK3ZvaWQgaW5saW5lIHMzYzI0eHhfY2xrX2VuYWJsZSh1bnNpZ25lZCBpbnQgY2xvY2tzLCB1bnNpZ25lZCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGxvbmcgY2xrY29uOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwljbGtjb24gPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0NPTik7CisJY2xrY29uICY9IH5jbG9ja3M7CisKKwlpZiAoZW5hYmxlKQorCQljbGtjb24gfD0gY2xvY2tzOworCisJLyogZW5zdXJlIG5vbmUgb2YgdGhlIHNwZWNpYWwgZnVuY3Rpb24gYml0cyBzZXQgKi8KKwljbGtjb24gJj0gfihTM0MyNDEwX0NMS0NPTl9JRExFfFMzQzI0MTBfQ0xLQ09OX1BPV0VSKTsKKworCV9fcmF3X3dyaXRlbChjbGtjb24sIFMzQzI0MTBfQ0xLQ09OKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyogZW5hYmxlIGFuZCBkaXNhYmxlIGNhbGxzIGZvciB1c2Ugd2l0aCB0aGUgY2xrIHN0cnVjdCAqLworCitzdGF0aWMgaW50IGNsa19udWxsX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXMzYzI0eHhfY2xrX2VuYWJsZShjbGstPmN0cmxiaXQsIGVuYWJsZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIENsb2NrIEFQSSBjYWxscyAqLworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCit7CisJc3RydWN0IGNsayAqcDsKKwlzdHJ1Y3QgY2xrICpjbGsgPSBFUlJfUFRSKC1FTk9FTlQpOworCWludCBpZG5vOworCisJaWRubyA9IChkZXYgPT0gTlVMTCkgPyAtMSA6IHRvX3BsYXRmb3JtX2RldmljZShkZXYpLT5pZDsKKworCWRvd24oJmNsb2Nrc19zZW0pOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tzLCBsaXN0KSB7CisJCWlmIChwLT5pZCA9PSBpZG5vICYmCisJCSAgICBzdHJjbXAoaWQsIHAtPm5hbWUpID09IDAgJiYKKwkJICAgIHRyeV9tb2R1bGVfZ2V0KHAtPm93bmVyKSkgeworCQkJY2xrID0gcDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogY2hlY2sgZm9yIHRoZSBjYXNlIHdoZXJlIGEgZGV2aWNlIHdhcyBzdXBwbGllZCwgYnV0IHRoZQorCSAqIGNsb2NrIHRoYXQgd2FzIGJlaW5nIHNlYXJjaGVkIGZvciBpcyBub3QgZGV2aWNlIHNwZWNpZmljICovCisKKwlpZiAoSVNfRVJSKGNsaykpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tzLCBsaXN0KSB7CisJCQlpZiAocC0+aWQgPT0gLTEgJiYgc3RyY21wKGlkLCBwLT5uYW1lKSA9PSAwICYmCisJCQkgICAgdHJ5X21vZHVsZV9nZXQocC0+b3duZXIpKSB7CisJCQkJY2xrID0gcDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXVwKCZjbG9ja3Nfc2VtKTsKKwlyZXR1cm4gY2xrOworfQorCit2b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQoreworCW1vZHVsZV9wdXQoY2xrLT5vd25lcik7Cit9CisKK2ludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoSVNfRVJSKGNsaykpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIChjbGstPmVuYWJsZSkoY2xrLCAxKTsKK30KKwordm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKCFJU19FUlIoY2xrKSkKKwkJKGNsay0+ZW5hYmxlKShjbGssIDApOworfQorCisKK2ludCBjbGtfdXNlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlhdG9taWNfaW5jKCZjbGstPnVzZWQpOworCXJldHVybiAwOworfQorCisKK3ZvaWQgY2xrX3VudXNlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlhdG9taWNfZGVjKCZjbGstPnVzZWQpOworfQorCit1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKElTX0VSUihjbGspKQorCQlyZXR1cm4gMDsKKworCWlmIChjbGstPnJhdGUgIT0gMCkKKwkJcmV0dXJuIGNsay0+cmF0ZTsKKworCXdoaWxlIChjbGstPnBhcmVudCAhPSBOVUxMICYmIGNsay0+cmF0ZSA9PSAwKQorCQljbGsgPSBjbGstPnBhcmVudDsKKworCXJldHVybiBjbGstPnJhdGU7Cit9CisKK2xvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJcmV0dXJuIHJhdGU7Cit9CisKK2ludCBjbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0cnVjdCBjbGsgKmNsa19nZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrLT5wYXJlbnQ7Cit9CisKK0VYUE9SVF9TWU1CT0woY2xrX2dldCk7CitFWFBPUlRfU1lNQk9MKGNsa19wdXQpOworRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKK0VYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOworRVhQT1JUX1NZTUJPTChjbGtfdXNlKTsKK0VYUE9SVF9TWU1CT0woY2xrX3VudXNlKTsKK0VYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKK0VYUE9SVF9TWU1CT0woY2xrX3JvdW5kX3JhdGUpOworRVhQT1JUX1NZTUJPTChjbGtfc2V0X3JhdGUpOworRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3BhcmVudCk7CisKKy8qIGJhc2UgY2xvY2tzICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa194dGFsID0geworCS5uYW1lCQk9ICJ4dGFsIiwKKwkuaWQJCT0gLTEsCisJLnJhdGUJCT0gMCwKKwkucGFyZW50CQk9IE5VTEwsCisJLmN0cmxiaXQJPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2YgPSB7CisJLm5hbWUJCT0gImZjbGsiLAorCS5pZAkJPSAtMSwKKwkucmF0ZQkJPSAwLAorCS5wYXJlbnQJCT0gTlVMTCwKKwkuY3RybGJpdAk9IDAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjbGtfaCA9IHsKKwkubmFtZQkJPSAiaGNsayIsCisJLmlkCQk9IC0xLAorCS5yYXRlCQk9IDAsCisJLnBhcmVudAkJPSBOVUxMLAorCS5jdHJsYml0CT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wID0geworCS5uYW1lCQk9ICJwY2xrIiwKKwkuaWQJCT0gLTEsCisJLnJhdGUJCT0gMCwKKwkucGFyZW50CQk9IE5VTEwsCisJLmN0cmxiaXQJPSAwLAorfTsKKworLyogY2xvY2tzIHRoYXQgY291bGQgYmUgcmVnaXN0ZXJlZCBieSBleHRlcm5hbCBjb2RlICovCisKK3N0cnVjdCBjbGsgczNjMjR4eF9kY2xrMCA9IHsKKwkubmFtZQkJPSAiZGNsazAiLAorCS5pZAkJPSAtMSwKK307CisKK3N0cnVjdCBjbGsgczNjMjR4eF9kY2xrMSA9IHsKKwkubmFtZQkJPSAiZGNsazEiLAorCS5pZAkJPSAtMSwKK307CisKK3N0cnVjdCBjbGsgczNjMjR4eF9jbGtvdXQwID0geworCS5uYW1lCQk9ICJjbGtvdXQwIiwKKwkuaWQJCT0gLTEsCit9OworCitzdHJ1Y3QgY2xrIHMzYzI0eHhfY2xrb3V0MSA9IHsKKwkubmFtZQkJPSAiY2xrb3V0MSIsCisJLmlkCQk9IC0xLAorfTsKKworc3RydWN0IGNsayBzM2MyNHh4X3VjbGsgPSB7CisJLm5hbWUJCT0gInVjbGsiLAorCS5pZAkJPSAtMSwKK307CisKKworLyogY2xvY2sgZGVmaW5pdGlvbnMgKi8KKworc3RhdGljIHN0cnVjdCBjbGsgaW5pdF9jbG9ja3NbXSA9IHsKKwl7IC5uYW1lICAgID0gIm5hbmQiLAorCSAgLmlkCSAgID0gLTEsCisJICAucGFyZW50ICA9ICZjbGtfaCwKKwkgIC5lbmFibGUgID0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAorCSAgLmN0cmxiaXQgPSBTM0MyNDEwX0NMS0NPTl9OQU5ECisJfSwKKwl7IC5uYW1lICAgID0gImxjZCIsCisJICAuaWQJICAgPSAtMSwKKwkgIC5wYXJlbnQgID0gJmNsa19oLAorCSAgLmVuYWJsZSAgPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCisJICAuY3RybGJpdCA9IFMzQzI0MTBfQ0xLQ09OX0xDREMKKwl9LAorCXsgLm5hbWUgICAgPSAidXNiLWhvc3QiLAorCSAgLmlkCSAgID0gLTEsCisJICAucGFyZW50ICA9ICZjbGtfaCwKKwkgIC5lbmFibGUgID0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAorCSAgLmN0cmxiaXQgPSBTM0MyNDEwX0NMS0NPTl9VU0JICisJfSwKKwl7IC5uYW1lICAgID0gInVzYi1kZXZpY2UiLAorCSAgLmlkCSAgID0gLTEsCisJICAucGFyZW50ICA9ICZjbGtfaCwKKwkgIC5lbmFibGUgID0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAorCSAgLmN0cmxiaXQgPSBTM0MyNDEwX0NMS0NPTl9VU0JECisJfSwKKwl7IC5uYW1lICAgID0gInRpbWVycyIsCisJICAuaWQJICAgPSAtMSwKKwkgIC5wYXJlbnQgID0gJmNsa19wLAorCSAgLmVuYWJsZSAgPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCisJICAuY3RybGJpdCA9IFMzQzI0MTBfQ0xLQ09OX1BXTVQKKwl9LAorCXsgLm5hbWUgICAgPSAic2RpIiwKKwkgIC5pZAkgICA9IC0xLAorCSAgLnBhcmVudCAgPSAmY2xrX3AsCisJICAuZW5hYmxlICA9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKKwkgIC5jdHJsYml0ID0gUzNDMjQxMF9DTEtDT05fU0RJCisJfSwKKwl7IC5uYW1lICAgID0gInVhcnQiLAorCSAgLmlkCSAgID0gMCwKKwkgIC5wYXJlbnQgID0gJmNsa19wLAorCSAgLmVuYWJsZSAgPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCisJICAuY3RybGJpdCA9IFMzQzI0MTBfQ0xLQ09OX1VBUlQwCisJfSwKKwl7IC5uYW1lICAgID0gInVhcnQiLAorCSAgLmlkCSAgID0gMSwKKwkgIC5wYXJlbnQgID0gJmNsa19wLAorCSAgLmVuYWJsZSAgPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCisJICAuY3RybGJpdCA9IFMzQzI0MTBfQ0xLQ09OX1VBUlQxCisJfSwKKwl7IC5uYW1lICAgID0gInVhcnQiLAorCSAgLmlkCSAgID0gMiwKKwkgIC5wYXJlbnQgID0gJmNsa19wLAorCSAgLmVuYWJsZSAgPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCisJICAuY3RybGJpdCA9IFMzQzI0MTBfQ0xLQ09OX1VBUlQyCisJfSwKKwl7IC5uYW1lICAgID0gImdwaW8iLAorCSAgLmlkCSAgID0gLTEsCisJICAucGFyZW50ICA9ICZjbGtfcCwKKwkgIC5lbmFibGUgID0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAorCSAgLmN0cmxiaXQgPSBTM0MyNDEwX0NMS0NPTl9HUElPCisJfSwKKwl7IC5uYW1lICAgID0gInJ0YyIsCisJICAuaWQJICAgPSAtMSwKKwkgIC5wYXJlbnQgID0gJmNsa19wLAorCSAgLmVuYWJsZSAgPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCisJICAuY3RybGJpdCA9IFMzQzI0MTBfQ0xLQ09OX1JUQworCX0sCisJeyAubmFtZSAgICA9ICJhZGMiLAorCSAgLmlkCSAgID0gLTEsCisJICAucGFyZW50ICA9ICZjbGtfcCwKKwkgIC5lbmFibGUgID0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAorCSAgLmN0cmxiaXQgPSBTM0MyNDEwX0NMS0NPTl9BREMKKwl9LAorCXsgLm5hbWUgICAgPSAiaTJjIiwKKwkgIC5pZAkgICA9IC0xLAorCSAgLnBhcmVudCAgPSAmY2xrX3AsCisJICAuZW5hYmxlICA9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKKwkgIC5jdHJsYml0ID0gUzNDMjQxMF9DTEtDT05fSUlDCisJfSwKKwl7IC5uYW1lICAgID0gImlpcyIsCisJICAuaWQJICAgPSAtMSwKKwkgIC5wYXJlbnQgID0gJmNsa19wLAorCSAgLmVuYWJsZSAgPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCisJICAuY3RybGJpdCA9IFMzQzI0MTBfQ0xLQ09OX0lJUworCX0sCisJeyAubmFtZSAgICA9ICJzcGkiLAorCSAgLmlkCSAgID0gLTEsCisJICAucGFyZW50ICA9ICZjbGtfcCwKKwkgIC5lbmFibGUgID0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAorCSAgLmN0cmxiaXQgPSBTM0MyNDEwX0NMS0NPTl9TUEkKKwl9LAorCXsgLm5hbWUgICAgPSAid2F0Y2hkb2ciLAorCSAgLmlkCSAgID0gLTEsCisJICAucGFyZW50ICA9ICZjbGtfcCwKKwkgIC5jdHJsYml0ID0gMAorCX0KK307CisKKy8qIGluaXRpYWxpc2UgdGhlIGNsb2NrIHN5c3RlbSAqLworCitpbnQgczNjMjR4eF9yZWdpc3Rlcl9jbG9jayhzdHJ1Y3QgY2xrICpjbGspCit7CisJY2xrLT5vd25lciA9IFRISVNfTU9EVUxFOworCWF0b21pY19zZXQoJmNsay0+dXNlZCwgMCk7CisKKwlpZiAoY2xrLT5lbmFibGUgPT0gTlVMTCkKKwkJY2xrLT5lbmFibGUgPSBjbGtfbnVsbF9lbmFibGU7CisKKwkvKiBhZGQgdG8gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNsb2NrcyAqLworCisJZG93bigmY2xvY2tzX3NlbSk7CisJbGlzdF9hZGQoJmNsay0+bGlzdCwgJmNsb2Nrcyk7CisJdXAoJmNsb2Nrc19zZW0pOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGluaXRhbGlzZSBhbGwgdGhlIGNsb2NrcyAqLworCitpbnQgX19pbml0IHMzYzI0eHhfc2V0dXBfY2xvY2tzKHVuc2lnbmVkIGxvbmcgeHRhbCwKKwkJCQl1bnNpZ25lZCBsb25nIGZjbGssCisJCQkJdW5zaWduZWQgbG9uZyBoY2xrLAorCQkJCXVuc2lnbmVkIGxvbmcgcGNsaykKK3sKKwlzdHJ1Y3QgY2xrICpjbGtwID0gaW5pdF9jbG9ja3M7CisJaW50IHB0cjsKKwlpbnQgcmV0OworCisJcHJpbnRrKEtFUk5fSU5GTyAiUzNDMjQxMCBDbG9ja3MsIChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljc1xuIik7CisKKwkvKiBpbml0aWFsaXNlIHRoZSBtYWluIHN5c3RlbSBjbG9ja3MgKi8KKworCWNsa194dGFsLnJhdGUgPSB4dGFsOworCisJY2xrX2gucmF0ZSA9IGhjbGs7CisJY2xrX3AucmF0ZSA9IHBjbGs7CisJY2xrX2YucmF0ZSA9IGZjbGs7CisKKwkvKiBpdCBsb29rcyBsaWtlIGp1c3Qgc2V0dGluZyB0aGUgcmVnaXN0ZXIgaGVyZSBpcyBub3QgZ29vZAorCSAqIGVub3VnaCwgYW5kIGNhdXNlcyB0aGUgb2RkIGhhbmcgYXQgaW5pdGlhbCBib290IHRpbWUsIHNvCisJICogZG8gYWxsIG9mIHRoZW0gaW5kaXZkdWFsbHkuCisJICoKKwkgKiBJIHRoaW5rIGRpc2FibGluZyB0aGUgTENEIGNsb2NrIGlmIHRoZSBMQ0QgaXMgYWN0aXZlIGlzCisJICogdmVyeSBkYW5nZXJvdXMsIGFuZCB0aGVyZWZvcmUgdGhlIGJvb3Rsb2FkZXIgc2hvdWxkIGJlCisJICogY2FyZWZ1bCB0byBub3QgZW5hYmxlIHRoZSBMQ0QgY2xvY2sgaWYgaXQgaXMgbm90IG5lZWRlZC4KKwkgKgorCSAqIGFuZCBvZiBjb3Vyc2UsIHRoaXMgbG9va3MgbmVhdGVyCisJICovCisKKwlzM2MyNHh4X2Nsa19lbmFibGUoUzNDMjQxMF9DTEtDT05fTkFORCwgMCk7CisJczNjMjR4eF9jbGtfZW5hYmxlKFMzQzI0MTBfQ0xLQ09OX1VTQkgsIDApOworCXMzYzI0eHhfY2xrX2VuYWJsZShTM0MyNDEwX0NMS0NPTl9VU0JELCAwKTsKKwlzM2MyNHh4X2Nsa19lbmFibGUoUzNDMjQxMF9DTEtDT05fQURDLCAwKTsKKwlzM2MyNHh4X2Nsa19lbmFibGUoUzNDMjQxMF9DTEtDT05fSUlDLCAwKTsKKwlzM2MyNHh4X2Nsa19lbmFibGUoUzNDMjQxMF9DTEtDT05fU1BJLCAwKTsKKworCS8qIGFzc3VtZSB1YXJ0IGNsb2NrcyBhcmUgY29ycmVjdGx5IHNldHVwICovCisKKwkvKiByZWdpc3RlciBvdXIgY2xvY2tzICovCisKKwlpZiAoczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmY2xrX3h0YWwpIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgbWFzdGVyIHh0YWxcbiIpOworCisJaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmNsa19mKSA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNwdSBmY2xrXG4iKTsKKworCWlmIChzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZjbGtfaCkgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZWdpc3RlciBjcHUgaGNsa1xuIik7CisKKwlpZiAoczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmY2xrX3ApIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgY3B1IHBjbGtcbiIpOworCisJLyogcmVnaXN0ZXIgY2xvY2tzIGZyb20gY2xvY2sgYXJyYXkgKi8KKworCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShpbml0X2Nsb2Nrcyk7IHB0cisrLCBjbGtwKyspIHsKKwkJcmV0ID0gczNjMjR4eF9yZWdpc3Rlcl9jbG9jayhjbGtwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNsb2NrICVzICglZClcbiIsCisJCQkgICAgICAgY2xrcC0+bmFtZSwgcmV0KTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKiBTM0MyNDQwIGV4dGVuZGVkIGNsb2NrIHN1cHBvcnQgKi8KKworI2lmZGVmIENPTkZJR19DUFVfUzNDMjQ0MAorCitzdGF0aWMgc3RydWN0IGNsayBzM2MyNDQwX2Nsa191cGxsID0geworCS5uYW1lCQk9ICJ1cGxsIiwKKwkuaWQJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzM2MyNDQwX2Nsa19jYW0gPSB7CisJLm5hbWUJCT0gImNhbWlmIiwKKwkucGFyZW50CQk9ICZjbGtfaCwKKwkuaWQJCT0gLTEsCisJLmVuYWJsZQkJPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCisJLmN0cmxiaXQJPSBTM0MyNDQwX0NMS0NPTl9DQU1FUkEsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzM2MyNDQwX2Nsa19hYzk3ID0geworCS5uYW1lCQk9ICJhYzk3IiwKKwkucGFyZW50CQk9ICZjbGtfcCwKKwkuaWQJCT0gLTEsCisJLmVuYWJsZQkJPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCisJLmN0cmxiaXQJPSBTM0MyNDQwX0NMS0NPTl9DQU1FUkEsCit9OworCitzdGF0aWMgaW50IHMzYzI0NDBfY2xrX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQoreworCXVuc2lnbmVkIGxvbmcgdXBsbGNvbiA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVVBMTENPTik7CisKKwlzM2MyNDQwX2Nsa191cGxsLnJhdGUgPSBzM2MyNDEwX2dldF9wbGwodXBsbGNvbiwgY2xrX3h0YWwucmF0ZSkgKiAyOworCisJcHJpbnRrKCJTM0MyNDQwOiBDbG9jayBTdXBwb3J0LCBVUExMICVsZC4lMDNsZCBNSHpcbiIsCisJICAgICAgIHByaW50X21oeihzM2MyNDQwX2Nsa191cGxsLnJhdGUpKTsKKworCXMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJnMzYzI0NDBfY2xrX2FjOTcpOworCXMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJnMzYzI0NDBfY2xrX2NhbSk7CisJczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmczNjMjQ0MF9jbGtfdXBsbCk7CisKKwljbGtfZGlzYWJsZSgmczNjMjQ0MF9jbGtfYWM5Nyk7CisJY2xrX2Rpc2FibGUoJnMzYzI0NDBfY2xrX2NhbSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDBfY2xrX2RyaXZlciA9IHsKKwkuYWRkCT0gczNjMjQ0MF9jbGtfYWRkLAorfTsKKworc3RhdGljIGludCBzM2MyNHh4X2Nsa19kcml2ZXIodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQ0MF9zeXNjbGFzcywgJnMzYzI0NDBfY2xrX2RyaXZlcik7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjR4eF9jbGtfZHJpdmVyKTsKKworI2VuZGlmIC8qIENPTkZJR19DUFVfUzNDMjQ0MCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTUzYjZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9TV0xJTlVYLworICoJV3JpdHRlbiBieSBCZW4gRG9va3MsIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCitzdHJ1Y3QgY2xrIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgbGlzdDsKKwlzdHJ1Y3QgbW9kdWxlICAgICAgICAqb3duZXI7CisJc3RydWN0IGNsayAgICAgICAgICAgKnBhcmVudDsKKwljb25zdCBjaGFyICAgICAgICAgICAqbmFtZTsKKwlpbnQJCSAgICAgIGlkOworCWF0b21pY190ICAgICAgICAgICAgICB1c2VkOworCXVuc2lnbmVkIGxvbmcgICAgICAgICByYXRlOworCXVuc2lnbmVkIGxvbmcgICAgICAgICBjdHJsYml0OworCWludAkJICAgICgqZW5hYmxlKShzdHJ1Y3QgY2xrICosIGludCBlbmFibGUpOworfTsKKworLyogb3RoZXIgY2xvY2tzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGJ5IGJvYXJkIHN1cHBvcnQgKi8KKworZXh0ZXJuIHN0cnVjdCBjbGsgczNjMjR4eF9kY2xrMDsKK2V4dGVybiBzdHJ1Y3QgY2xrIHMzYzI0eHhfZGNsazE7CitleHRlcm4gc3RydWN0IGNsayBzM2MyNHh4X2Nsa291dDA7CitleHRlcm4gc3RydWN0IGNsayBzM2MyNHh4X2Nsa291dDE7CitleHRlcm4gc3RydWN0IGNsayBzM2MyNHh4X3VjbGs7CisKKy8qIGV4cG9ydHMgZm9yIGFyY2gvYXJtL21hY2gtczNjMjQxMAorICoKKyAqIFBsZWFzZSBETyBOT1QgdXNlIHRoZXNlIG91dHNpZGUgb2YgYXJjaC9hcm0vbWFjaC1zM2MyNDEwCisqLworCitleHRlcm4gaW50IHMzYzI0eHhfY2xrY29uX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpOworZXh0ZXJuIGludCBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKHN0cnVjdCBjbGsgKmNsayk7CisKK2V4dGVybiBpbnQgczNjMjR4eF9zZXR1cF9jbG9ja3ModW5zaWduZWQgbG9uZyB4dGFsLAorCQkJCXVuc2lnbmVkIGxvbmcgZmNsaywKKwkJCQl1bnNpZ25lZCBsb25nIGhjbGssCisJCQkJdW5zaWduZWQgbG9uZyBwY2xrKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jcHUuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jcHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTM2NmU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NwdS5jCkBAIC0wLDAgKzEsMjQxIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY3B1LmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzL1NXTElOVVgvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjRYWCBDUFUgU3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorCisjaW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJzM2MyNDEwLmgiCisjaW5jbHVkZSAiczNjMjQ0MC5oIgorCitzdHJ1Y3QgY3B1X3RhYmxlIHsKKwl1bnNpZ25lZCBsb25nCWlkY29kZTsKKwl1bnNpZ25lZCBsb25nCWlkbWFzazsKKwl2b2lkCQkoKm1hcF9pbykoc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBzaXplKTsKKwl2b2lkCQkoKmluaXRfdWFydHMpKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKKwl2b2lkCQkoKmluaXRfY2xvY2tzKShpbnQgeHRhbCk7CisJaW50CQkoKmluaXQpKHZvaWQpOworCWNvbnN0IGNoYXIJKm5hbWU7Cit9OworCisvKiB0YWJsZSBvZiBzdXBwb3J0ZWQgQ1BVcyAqLworCitzdGF0aWMgY29uc3QgY2hhciBuYW1lX3MzYzI0MTBbXSAgPSAiUzNDMjQxMCI7CitzdGF0aWMgY29uc3QgY2hhciBuYW1lX3MzYzI0NDBbXSAgPSAiUzNDMjQ0MCI7CitzdGF0aWMgY29uc3QgY2hhciBuYW1lX3MzYzI0MTBhW10gPSAiUzNDMjQxMEEiOworc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQwYVtdID0gIlMzQzI0NDBBIjsKKworc3RhdGljIHN0cnVjdCBjcHVfdGFibGUgY3B1X2lkc1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkuaWRjb2RlCQk9IDB4MzI0MTAwMDAsCisJCS5pZG1hc2sJCT0gMHhmZmZmZmZmZiwKKwkJLm1hcF9pbwkJPSBzM2MyNDEwX21hcF9pbywKKwkJLmluaXRfY2xvY2tzCT0gczNjMjQxMF9pbml0X2Nsb2NrcywKKwkJLmluaXRfdWFydHMJPSBzM2MyNDEwX2luaXRfdWFydHMsCisJCS5pbml0CQk9IHMzYzI0MTBfaW5pdCwKKwkJLm5hbWUJCT0gbmFtZV9zM2MyNDEwCisJfSwKKwl7CisJCS5pZGNvZGUJCT0gMHgzMjQxMDAwMiwKKwkJLmlkbWFzawkJPSAweGZmZmZmZmZmLAorCQkubWFwX2lvCQk9IHMzYzI0MTBfbWFwX2lvLAorCQkuaW5pdF9jbG9ja3MJPSBzM2MyNDEwX2luaXRfY2xvY2tzLAorCQkuaW5pdF91YXJ0cwk9IHMzYzI0MTBfaW5pdF91YXJ0cywKKwkJLmluaXQJCT0gczNjMjQxMF9pbml0LAorCQkubmFtZQkJPSBuYW1lX3MzYzI0MTBhCisJfSwKKwl7CisJCS5pZGNvZGUJCT0gMHgzMjQ0MDAwMCwKKwkJLmlkbWFzawkJPSAweGZmZmZmZmZmLAorCQkubWFwX2lvCQk9IHMzYzI0NDBfbWFwX2lvLAorCQkuaW5pdF9jbG9ja3MJPSBzM2MyNDQwX2luaXRfY2xvY2tzLAorCQkuaW5pdF91YXJ0cwk9IHMzYzI0NDBfaW5pdF91YXJ0cywKKwkJLmluaXQJCT0gczNjMjQ0MF9pbml0LAorCQkubmFtZQkJPSBuYW1lX3MzYzI0NDAKKwl9LAorCXsKKwkJLmlkY29kZQkJPSAweDMyNDQwMDAxLAorCQkuaWRtYXNrCQk9IDB4ZmZmZmZmZmYsCisJCS5tYXBfaW8JCT0gczNjMjQ0MF9tYXBfaW8sCisJCS5pbml0X2Nsb2Nrcwk9IHMzYzI0NDBfaW5pdF9jbG9ja3MsCisJCS5pbml0X3VhcnRzCT0gczNjMjQ0MF9pbml0X3VhcnRzLAorCQkuaW5pdAkJPSBzM2MyNDQwX2luaXQsCisJCS5uYW1lCQk9IG5hbWVfczNjMjQ0MGEKKwl9Cit9OworCisvKiBtaW5pbWFsIElPIG1hcHBpbmcgKi8KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzM2NfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKKwlJT0RFU0NfRU5UKEdQSU8pLAorCUlPREVTQ19FTlQoSVJRKSwKKwlJT0RFU0NfRU5UKE1FTUNUUkwpLAorCUlPREVTQ19FTlQoVUFSVCkKK307CisKKworc3RhdGljIHN0cnVjdCBjcHVfdGFibGUgKgorczNjX2xvb2t1cF9jcHUodW5zaWduZWQgbG9uZyBpZGNvZGUpCit7CisJc3RydWN0IGNwdV90YWJsZSAqdGFiOworCWludCBjb3VudDsKKworCXRhYiA9IGNwdV9pZHM7CisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgQVJSQVlfU0laRShjcHVfaWRzKTsgY291bnQrKywgdGFiKyspIHsKKwkJaWYgKChpZGNvZGUgJiB0YWItPmlkbWFzaykgPT0gdGFiLT5pZGNvZGUpCisJCQlyZXR1cm4gdGFiOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKiBib2FyZCBpbmZvcm1hdGlvbiAqLworCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfYm9hcmQgKmJvYXJkOworCit2b2lkIHMzYzI0eHhfc2V0X2JvYXJkKHN0cnVjdCBzM2MyNHh4X2JvYXJkICpiKQoreworCWludCBpOworCisJYm9hcmQgPSBiOworCisJaWYgKGItPmNsb2Nrc19jb3VudCAhPSAwKSB7CisJCXN0cnVjdCBjbGsgKipwdHIgPSBiLT5jbG9ja3M7OworCisJCWZvciAoaSA9IGItPmNsb2Nrc19jb3VudDsgaSA+IDA7IGktLSwgcHRyKyspCisJCQlzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCpwdHIpOworCX0KK30KKworLyogY3B1IGluZm9ybWF0aW9uICovCisKK3N0YXRpYyBzdHJ1Y3QgY3B1X3RhYmxlICpjcHU7CisKK3ZvaWQgX19pbml0IHMzYzI0eHhfaW5pdF9pbyhzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBpZGNvZGU7CisKKwkvKiBpbml0aWFsaXNlIHRoZSBpbyBkZXNjcmlwdG9ycyB3ZSBuZWVkIGZvciBpbml0aWFsaXNhdGlvbiAqLworCWlvdGFibGVfaW5pdChzM2NfaW9kZXNjLCBBUlJBWV9TSVpFKHMzY19pb2Rlc2MpKTsKKworCWlkY29kZSA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfR1NUQVRVUzEpOworCWNwdSA9IHMzY19sb29rdXBfY3B1KGlkY29kZSk7CisKKwlpZiAoY3B1ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmtub3duIENQVSB0eXBlIDB4JTA4bHhcbiIsIGlkY29kZSk7CisJCXBhbmljKCJVbmtub3duIFMzQzI0WFggQ1BVIik7CisJfQorCisJaWYgKGNwdS0+bWFwX2lvID09IE5VTEwgfHwgY3B1LT5pbml0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDUFUgJXMgc3VwcG9ydCBub3QgZW5hYmxlZFxuIiwgY3B1LT5uYW1lKTsKKwkJcGFuaWMoIlVuc3VwcG9ydGVkIFMzQzI0WFggQ1BVIik7CisJfQorCisJcHJpbnRrKCJDUFUgJXMgKGlkIDB4JTA4bHgpXG4iLCBjcHUtPm5hbWUsIGlkY29kZSk7CisKKwkoY3B1LT5tYXBfaW8pKG1hY2hfZGVzYywgc2l6ZSk7Cit9CisKKy8qIHMzYzI0eHhfaW5pdF9jbG9ja3MKKyAqCisgKiBJbml0aWFsaXNlIHRoZSBjbG9jayBzdWJzeXN0ZW0gYW5kIGFzc29jaWF0ZWQgaW5mb3JtYXRpb24gZnJvbSB0aGUKKyAqIGdpdmVuIG1hc3RlciBjcnlzdGFsIHZhbHVlLgorICoKKyAqIHh0YWwgID0gMCAtPiB1c2UgZGVmYXVsdCBQTEwgY3J5c3RhbCB2YWx1ZSAobm9ybWFsbHkgMTJNSHopCisgKiAgICAgICE9IDAgLT4gUExMIGNyeXN0YWwgdmFsdWUgaW4gSHoKKyovCisKK3ZvaWQgX19pbml0IHMzYzI0eHhfaW5pdF9jbG9ja3MoaW50IHh0YWwpCit7CisJaWYgKHh0YWwgPT0gMCkKKwkJeHRhbCA9IDEyKjEwMDAqMTAwMDsKKworCWlmIChjcHUgPT0gTlVMTCkKKwkJcGFuaWMoInMzYzI0eHhfaW5pdF9jbG9ja3M6IG5vIGNwdSBzZXR1cD9cbiIpOworCisJaWYgKGNwdS0+aW5pdF9jbG9ja3MgPT0gTlVMTCkKKwkJcGFuaWMoInMzYzI0eHhfaW5pdF9jbG9ja3M6IGNwdSBoYXMgbm8gY2xvY2sgaW5pdFxuIik7CisJZWxzZQorCQkoY3B1LT5pbml0X2Nsb2NrcykoeHRhbCk7Cit9CisKK3ZvaWQgX19pbml0IHMzYzI0eHhfaW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubykKK3sKKwlpZiAoY3B1ID09IE5VTEwpCisJCXJldHVybjsKKworCWlmIChjcHUtPmluaXRfdWFydHMgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgInMzYzI0eHhfaW5pdF91YXJ0czogY3B1IGhhcyBubyB1YXJ0IGluaXRcbiIpOworCX0gZWxzZQorCQkoY3B1LT5pbml0X3VhcnRzKShjZmcsIG5vKTsKK30KKworc3RhdGljIGludCBfX2luaXQgczNjX2FyY2hfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwkvLyBkbyB0aGUgY29ycmVjdCBpbml0IGZvciBjcHUKKworCWlmIChjcHUgPT0gTlVMTCkKKwkJcGFuaWMoInMzY19hcmNoX2luaXQ6IE5VTEwgY3B1XG4iKTsKKworCXJldCA9IChjcHUtPmluaXQpKCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGJvYXJkICE9IE5VTEwpIHsKKwkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKnB0ciA9IGJvYXJkLT5kZXZpY2VzOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgYm9hcmQtPmRldmljZXNfY291bnQ7IGkrKywgcHRyKyspIHsKKwkJCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigqcHRyKTsKKworCQkJaWYgKHJldCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiczNjMjR4eDogZmFpbGVkIHRvIGFkZCBib2FyZCBkZXZpY2UgJXMgKCVkKSBAJXBcbiIsICgqcHRyKS0+bmFtZSwgcmV0LCAqcHRyKTsKKwkJCX0KKwkJfQorCisJCS8qIG1hc2sgYW55IGVycm9yLCB3ZSBtYXkgbm90IG5lZWQgYWxsIHRoZXNlIGJvYXJkCisJCSAqIGRldmljZXMgKi8KKwkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCithcmNoX2luaXRjYWxsKHMzY19hcmNoX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NwdS5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3OGMxNWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY3B1LmgKQEAgLTAsMCArMSw2OSBAQAorLyogYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NwdS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogSGVhZGVyIGZpbGUgZm9yIFMzQzI0WFggQ1BVIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE1vZGlmaWNhdGlvbnM6CisgKiAgICAgMjQtQXVnLTIwMDQgQkpEICBTdGFydCBvZiBnZW5lcmljIFMzQzI0WFggc3VwcG9ydAorICogICAgIDE4LU9jdC0yMDA0IEJKRCAgTW92ZWQgYm9hcmQgc3RydWN0IGludG8gdGhpcyBmaWxlCisgKiAgICAgMDQtSmFuLTIwMDUgQkpEICBOZXcgdWFydCBpbml0aWFsaXNhdGlvbgorICogICAgIDEwLUphbi0yMDA1IEJKRCAgTW92ZWQgZ2VuZXJpYyBpbml0IGhlcmUsIHNwZWNpZmljIHRvIGNwdSBoZWFkZXJzCisgKiAgICAgMTQtSmFuLTIwMDUgQkpEICBBZGRlZCBzM2MyNHh4X2luaXRfY2xvY2tzKCkgY2FsbAorICogICAgIDEwLU1hci0yMDA1IExDVlIgQ2hhbmdlZCBTM0MyNDEwX3tWQSxTWn0gdG8gUzNDMjRYWF97VkEsU1p9ICYgSU9ERVNDX0VOVAorICogICAgIDE0LU1hci0yMDA1IEJKRCAgVXBkYXRlZCBmb3IgX19pb21lbQorKi8KKworLyogdG9kbyAtIGZpeCB3aGVuIHJtayBjaGFuZ2VzIGlvZGVzY3MgdG8gdXNlIGB2b2lkIF9faW9tZW0gKmAgKi8KKworI2RlZmluZSBJT0RFU0NfRU5UKHgpIHsgKHVuc2lnbmVkIGxvbmcpUzNDMjRYWF9WQV8jI3gsIFMzQzI0MTBfUEFfIyN4LCBTM0MyNFhYX1NaXyMjeCwgTVRfREVWSUNFIH0KKworI2lmbmRlZiBNSFoKKyNkZWZpbmUgTUhaICgxMDAwKjEwMDApCisjZW5kaWYKKworI2RlZmluZSBwcmludF9taHoobSkgKChtKSAvIE1IWiksICgobSAvIDEwMDApICUgMTAwMCkKKworLyogZm9yd2FyZCBkZWNsYXJhdGlvbiAqLworc3RydWN0IHMzYzI0MTBfdWFydGNmZzsKK3N0cnVjdCBtYXBfZGVzYzsKKworLyogY29yZSBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbnMgKi8KKworZXh0ZXJuIHZvaWQgczNjMjR4eF9pbml0X2lycSh2b2lkKTsKKworZXh0ZXJuIHZvaWQgczNjMjR4eF9pbml0X2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgc2l6ZSk7CisKK2V4dGVybiB2b2lkIHMzYzI0eHhfaW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubyk7CisKK2V4dGVybiB2b2lkIHMzYzI0eHhfaW5pdF9jbG9ja3MoaW50IHh0YWwpOworCisvKiB0aGUgYm9hcmQgc3RydWN0dXJlIGlzIHVzZWQgYXQgZmlyc3QgaW5pdGlhbHNhdGlvbiB0aW1lCisgKiB0byBnZXQgaW5mbyBzdWNoIGFzIHRoZSBkZXZpY2VzIHRvIHJlZ2lzdGVyIGZvciB0aGlzCisgKiBib2FyZC4gVGhpcyBpcyBkb25lIGJlY2F1c2UgcGxhdGZyb21fYWRkX2RldmljZXMoKSBjYW5ub3QKKyAqIGJlIGNhbGxlZCBmcm9tIHRoZSBtYXBfaW8gZW50cnkuCisqLworCitzdHJ1Y3QgczNjMjR4eF9ib2FyZCB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAgKipkZXZpY2VzOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgZGV2aWNlc19jb3VudDsKKworCXN0cnVjdCBjbGsJCSoqY2xvY2tzOworCXVuc2lnbmVkIGludAkJICBjbG9ja3NfY291bnQ7Cit9OworCitleHRlcm4gdm9pZCBzM2MyNHh4X3NldF9ib2FyZChzdHJ1Y3QgczNjMjR4eF9ib2FyZCAqYm9hcmQpOworCisvKiB0aW1lciBmb3IgMjQxMC8yNDQwICovCisKK3N0cnVjdCBzeXNfdGltZXI7CitleHRlcm4gc3RydWN0IHN5c190aW1lciBzM2MyNHh4X3RpbWVyOworCisvKiBzeXN0ZW0gZGV2aWNlIGNsYXNzZXMgKi8KKworZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgczNjMjQ0MF9zeXNjbGFzczsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kZXZzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZGV2cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NzkyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZGV2cy5jCkBAIC0wLDAgKzEsNDg1IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZGV2cy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcworICogQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIEJhc2UgUzNDMjQxMCBwbGF0Zm9ybSBkZXZpY2UgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE1vZGlmaWNhdGlvbnM6CisgKiAgICAgMTAtTWFyLTIwMDUgTENWUiBDaGFuZ2VkIFMzQzI0MTBfe1ZBLFNafSB0byBTM0MyNFhYX3tWQSxTWn0KKyAqICAgICAxMC1GZWItMjAwNSBCSkQgIEFkZGVkIGNhbWVyYSBmcm9tIGd1aWxsYXVtZS5nb3VyYXRAbmV4dmlzaW9uLnR2CisgKiAgICAgMjktQXVnLTIwMDQgQkpEICBBZGRlZCB0aW1lcnMgMCB0aHJvdWdoIDMKKyAqICAgICAyOS1BdWctMjAwNCBCSkQgIENoYW5nZWQgaW5kZXggb2YgZGV2aWNlcyB3ZSBvbmx5IGhhdmUgb25lIG9mIHRvIC0xCisgKiAgICAgMjEtQXVnLTIwMDQgQkpEICBBZGRlZCBJUlFfVElDSyB0byBSVEMgcmVzb3VyY2VzCisgKiAgICAgMTgtQXVnLTIwMDQgQkpEICBDcmVhdGVkIGluaXRpYWwgdmVyc2lvbgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KKworI2luY2x1ZGUgImRldnMuaCIKKworLyogU2VyaWFsIHBvcnQgcmVnaXN0cmF0aW9ucyAqLworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzM2MyNHh4X3VhcnRfZGV2c1szXTsKKworLyogVVNCIEhvc3QgQ29udHJvbGxlciAqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY191c2JfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQzI0MTBfUEFfVVNCSE9TVCwKKwkJLmVuZCAgID0gUzNDMjQxMF9QQV9VU0JIT1NUICsgUzNDMjRYWF9TWl9VU0JIT1NULAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX1VTQkgsCisJCS5lbmQgICA9IElSUV9VU0JILAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgdTY0IHMzY19kZXZpY2VfdXNiX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV91c2IgPSB7CisJLm5hbWUJCSAgPSAiczNjMjQxMC1vaGNpIiwKKwkuaWQJCSAgPSAtMSwKKwkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfdXNiX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJICA9IHMzY191c2JfcmVzb3VyY2UsCisJLmRldiAgICAgICAgICAgICAgPSB7CisJCS5kbWFfbWFzayA9ICZzM2NfZGV2aWNlX3VzYl9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmVUwKKwl9Cit9OworCitFWFBPUlRfU1lNQk9MKHMzY19kZXZpY2VfdXNiKTsKKworLyogTENEIENvbnRyb2xsZXIgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfbGNkX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0MyNDEwX1BBX0xDRCwKKwkJLmVuZCAgID0gUzNDMjQxMF9QQV9MQ0QgKyBTM0MyNFhYX1NaX0xDRCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9MQ0QsCisJCS5lbmQgICA9IElSUV9MQ0QsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0KKworfTsKKworc3RhdGljIHU2NCBzM2NfZGV2aWNlX2xjZF9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfbGNkID0geworCS5uYW1lCQkgID0gInMzYzI0MTAtbGNkIiwKKwkuaWQJCSAgPSAtMSwKKwkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfbGNkX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJICA9IHMzY19sY2RfcmVzb3VyY2UsCisJLmRldiAgICAgICAgICAgICAgPSB7CisJCS5kbWFfbWFzayA9ICZzM2NfZGV2aWNlX2xjZF9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmVUwKKwl9Cit9OworCitFWFBPUlRfU1lNQk9MKHMzY19kZXZpY2VfbGNkKTsKKworLyogTkFORCBDb250cm9sbGVyICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX25hbmRfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQzI0MTBfUEFfTkFORCwKKwkJLmVuZCAgID0gUzNDMjQxMF9QQV9OQU5EICsgUzNDMjRYWF9TWl9OQU5ELAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfbmFuZCA9IHsKKwkubmFtZQkJICA9ICJzM2MyNDEwLW5hbmQiLAorCS5pZAkJICA9IC0xLAorCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzY19uYW5kX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJICA9IHMzY19uYW5kX3Jlc291cmNlLAorfTsKKworRVhQT1JUX1NZTUJPTChzM2NfZGV2aWNlX25hbmQpOworCisvKiBVU0IgRGV2aWNlIChHYWRnZXQpKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfdXNiZ2FkZ2V0X3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0MyNDEwX1BBX1VTQkRFViwKKwkJLmVuZCAgID0gUzNDMjQxMF9QQV9VU0JERVYgKyBTM0MyNFhYX1NaX1VTQkRFViwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9VU0JELAorCQkuZW5kICAgPSBJUlFfVVNCRCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQorCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdXNiZ2FkZ2V0ID0geworCS5uYW1lCQkgID0gInMzYzI0MTAtdXNiZ2FkZ2V0IiwKKwkuaWQJCSAgPSAtMSwKKwkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfdXNiZ2FkZ2V0X3Jlc291cmNlKSwKKwkucmVzb3VyY2UJICA9IHMzY191c2JnYWRnZXRfcmVzb3VyY2UsCit9OworCitFWFBPUlRfU1lNQk9MKHMzY19kZXZpY2VfdXNiZ2FkZ2V0KTsKKworLyogV2F0Y2hkb2cgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2Nfd2R0X3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0MyNDEwX1BBX1dBVENIRE9HLAorCQkuZW5kICAgPSBTM0MyNDEwX1BBX1dBVENIRE9HICsgUzNDMjRYWF9TWl9XQVRDSERPRywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9XRFQsCisJCS5lbmQgICA9IElSUV9XRFQsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0KKworfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3dkdCA9IHsKKwkubmFtZQkJICA9ICJzM2MyNDEwLXdkdCIsCisJLmlkCQkgID0gLTEsCisJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjX3dkdF9yZXNvdXJjZSksCisJLnJlc291cmNlCSAgPSBzM2Nfd2R0X3Jlc291cmNlLAorfTsKKworRVhQT1JUX1NZTUJPTChzM2NfZGV2aWNlX3dkdCk7CisKKy8qIEkyQyAqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY19pMmNfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQzI0MTBfUEFfSUlDLAorCQkuZW5kICAgPSBTM0MyNDEwX1BBX0lJQyArIFMzQzI0WFhfU1pfSUlDLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX0lJQywKKwkJLmVuZCAgID0gSVJRX0lJQywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQorCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfaTJjID0geworCS5uYW1lCQkgID0gInMzYzI0MTAtaTJjIiwKKwkuaWQJCSAgPSAtMSwKKwkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfaTJjX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJICA9IHMzY19pMmNfcmVzb3VyY2UsCit9OworCitFWFBPUlRfU1lNQk9MKHMzY19kZXZpY2VfaTJjKTsKKworLyogSUlTICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX2lpc19yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUzNDMjQxMF9QQV9JSVMsCisJCS5lbmQgICA9IFMzQzI0MTBfUEFfSUlTICsgUzNDMjRYWF9TWl9JSVMsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyB1NjQgczNjX2RldmljZV9paXNfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2lpcyA9IHsKKwkubmFtZQkJICA9ICJzM2MyNDEwLWlpcyIsCisJLmlkCQkgID0gLTEsCisJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjX2lpc19yZXNvdXJjZSksCisJLnJlc291cmNlCSAgPSBzM2NfaWlzX3Jlc291cmNlLAorCS5kZXYgICAgICAgICAgICAgID0geworCQkuZG1hX21hc2sgPSAmczNjX2RldmljZV9paXNfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZlVMCisJfQorfTsKKworRVhQT1JUX1NZTUJPTChzM2NfZGV2aWNlX2lpcyk7CisKKy8qIFJUQyAqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY19ydGNfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQzI0MTBfUEFfUlRDLAorCQkuZW5kICAgPSBTM0MyNDEwX1BBX1JUQyArIDB4ZmYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfUlRDLAorCQkuZW5kICAgPSBJUlFfUlRDLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX1RJQ0ssCisJCS5lbmQgICA9IElSUV9USUNLLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUQorCX0KK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9ydGMgPSB7CisJLm5hbWUJCSAgPSAiczNjMjQxMC1ydGMiLAorCS5pZAkJICA9IC0xLAorCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzY19ydGNfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQkgID0gczNjX3J0Y19yZXNvdXJjZSwKK307CisKK0VYUE9SVF9TWU1CT0woczNjX2RldmljZV9ydGMpOworCisvKiBBREMgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfYWRjX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0MyNDEwX1BBX0FEQywKKwkJLmVuZCAgID0gUzNDMjQxMF9QQV9BREMgKyBTM0MyNFhYX1NaX0FEQywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9UQywKKwkJLmVuZCAgID0gSVJRX0FEQywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQorCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfYWRjID0geworCS5uYW1lCQkgID0gInMzYzI0MTAtYWRjIiwKKwkuaWQJCSAgPSAtMSwKKwkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfYWRjX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJICA9IHMzY19hZGNfcmVzb3VyY2UsCit9OworCisvKiBTREkgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2Nfc2RpX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0MyNDEwX1BBX1NESSwKKwkJLmVuZCAgID0gUzNDMjQxMF9QQV9TREkgKyBTM0MyNFhYX1NaX1NESSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9TREksCisJCS5lbmQgICA9IElSUV9TREksCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0KKworfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3NkaSA9IHsKKwkubmFtZQkJICA9ICJzM2MyNDEwLXNkaSIsCisJLmlkCQkgID0gLTEsCisJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjX3NkaV9yZXNvdXJjZSksCisJLnJlc291cmNlCSAgPSBzM2Nfc2RpX3Jlc291cmNlLAorfTsKKworRVhQT1JUX1NZTUJPTChzM2NfZGV2aWNlX3NkaSk7CisKKy8qIFNQSSAoMCkgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2Nfc3BpMF9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUzNDMjQxMF9QQV9TUEksCisJCS5lbmQgICA9IFMzQzI0MTBfUEFfU1BJICsgMHgxZiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9TUEkwLAorCQkuZW5kICAgPSBJUlFfU1BJMCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQorCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2Vfc3BpMCA9IHsKKwkubmFtZQkJICA9ICJzM2MyNDEwLXNwaSIsCisJLmlkCQkgID0gMCwKKwkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2Nfc3BpMF9yZXNvdXJjZSksCisJLnJlc291cmNlCSAgPSBzM2Nfc3BpMF9yZXNvdXJjZSwKK307CisKK0VYUE9SVF9TWU1CT0woczNjX2RldmljZV9zcGkwKTsKKworLyogU1BJICgxKSAqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY19zcGkxX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0MyNDEwX1BBX1NQSSArIDB4MjAsCisJCS5lbmQgICA9IFMzQzI0MTBfUEFfU1BJICsgMHgyMCArIDB4MWYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfU1BJMSwKKwkJLmVuZCAgID0gSVJRX1NQSTEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0KKworfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3NwaTEgPSB7CisJLm5hbWUJCSAgPSAiczNjMjQxMC1zcGkiLAorCS5pZAkJICA9IDEsCisJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjX3NwaTFfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQkgID0gczNjX3NwaTFfcmVzb3VyY2UsCit9OworCitFWFBPUlRfU1lNQk9MKHMzY19kZXZpY2Vfc3BpMSk7CisKKy8qIHB3bSB0aW1lciBibG9ja3MgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfdGltZXIwX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0MyNDEwX1BBX1RJTUVSICsgMHgwQywKKwkJLmVuZCAgID0gUzNDMjQxMF9QQV9USU1FUiArIDB4MEMgKyAweEIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfVElNRVIwLAorCQkuZW5kICAgPSBJUlFfVElNRVIwLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9CisKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV90aW1lcjAgPSB7CisJLm5hbWUJCSAgPSAiczNjMjQxMC10aW1lciIsCisJLmlkCQkgID0gMCwKKwkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfdGltZXIwX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJICA9IHMzY190aW1lcjBfcmVzb3VyY2UsCit9OworCitFWFBPUlRfU1lNQk9MKHMzY19kZXZpY2VfdGltZXIwKTsKKworLyogdGltZXIgMSAqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY190aW1lcjFfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQzI0MTBfUEFfVElNRVIgKyAweDE4LAorCQkuZW5kICAgPSBTM0MyNDEwX1BBX1RJTUVSICsgMHgyMywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9USU1FUjEsCisJCS5lbmQgICA9IElSUV9USU1FUjEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0KKworfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3RpbWVyMSA9IHsKKwkubmFtZQkJICA9ICJzM2MyNDEwLXRpbWVyIiwKKwkuaWQJCSAgPSAxLAorCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzY190aW1lcjFfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQkgID0gczNjX3RpbWVyMV9yZXNvdXJjZSwKK307CisKK0VYUE9SVF9TWU1CT0woczNjX2RldmljZV90aW1lcjEpOworCisvKiB0aW1lciAyICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX3RpbWVyMl9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUzNDMjQxMF9QQV9USU1FUiArIDB4MjQsCisJCS5lbmQgICA9IFMzQzI0MTBfUEFfVElNRVIgKyAweDJGLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX1RJTUVSMiwKKwkJLmVuZCAgID0gSVJRX1RJTUVSMiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQorCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdGltZXIyID0geworCS5uYW1lCQkgID0gInMzYzI0MTAtdGltZXIiLAorCS5pZAkJICA9IDIsCisJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjX3RpbWVyMl9yZXNvdXJjZSksCisJLnJlc291cmNlCSAgPSBzM2NfdGltZXIyX3Jlc291cmNlLAorfTsKKworRVhQT1JUX1NZTUJPTChzM2NfZGV2aWNlX3RpbWVyMik7CisKKy8qIHRpbWVyIDMgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfdGltZXIzX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0MyNDEwX1BBX1RJTUVSICsgMHgzMCwKKwkJLmVuZCAgID0gUzNDMjQxMF9QQV9USU1FUiArIDB4M0IsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfVElNRVIzLAorCQkuZW5kICAgPSBJUlFfVElNRVIzLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9CisKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV90aW1lcjMgPSB7CisJLm5hbWUJCSAgPSAiczNjMjQxMC10aW1lciIsCisJLmlkCQkgID0gMywKKwkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfdGltZXIzX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJICA9IHMzY190aW1lcjNfcmVzb3VyY2UsCit9OworCitFWFBPUlRfU1lNQk9MKHMzY19kZXZpY2VfdGltZXIzKTsKKworI2lmZGVmIENPTkZJR19DUFVfUzNDMjQ0MAorCisvKiBDYW1pZiBDb250cm9sbGVyICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX2NhbWlmX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0MyNDQwX1BBX0NBTUlGLAorCQkuZW5kICAgPSBTM0MyNDQwX1BBX0NBTUlGICsgUzNDMjQ0MF9TWl9DQU1JRiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9DQU0sCisJCS5lbmQgICA9IElSUV9DQU0sCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0KKworfTsKKworc3RhdGljIHU2NCBzM2NfZGV2aWNlX2NhbWlmX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9jYW1pZiA9IHsKKwkubmFtZQkJICA9ICJzM2MyNDQwLWNhbWlmIiwKKwkuaWQJCSAgPSAtMSwKKwkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfY2FtaWZfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQkgID0gczNjX2NhbWlmX3Jlc291cmNlLAorCS5kZXYgICAgICAgICAgICAgID0geworCQkuZG1hX21hc2sgPSAmczNjX2RldmljZV9jYW1pZl9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmVUwKKwl9Cit9OworCitFWFBPUlRfU1lNQk9MKHMzY19kZXZpY2VfY2FtaWYpOworCisjZW5kaWYgLy8gQ09ORklHX0NQVV9TMzI0NDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kZXZzLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZGV2cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MzI4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZGV2cy5oCkBAIC0wLDAgKzEsNDggQEAKKy8qIGFyY2gvYXJtL21hY2gtczNjMjQxMC9kZXZzLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogSGVhZGVyIGZpbGUgZm9yIHMzYzI0MTAgc3RhbmRhcmQgcGxhdGZvcm0gZGV2aWNlcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTW9kaWZpY2F0aW9uczoKKyAqICAgICAgMTgtQXVnLTIwMDQgQkpEICBDcmVhdGVkIGluaXRpYWwgdmVyc2lvbgorICoJMjctQXVnLTIwMDQgQkpEICBBZGRlZCB0aW1lcnMgMCB0aHJvdWdoIDMKKyAqCTEwLUZlYi0yMDA1IEJKRAkgQWRkZWQgY2FtZXJhIGZyb20gZ3VpbGxhdW1lLmdvdXJhdEBuZXh2aXNpb24udHYKKyovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzM2MyNHh4X3VhcnRfZGV2c1tdOworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3VzYjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfbGNkOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV93ZHQ7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2kyYzsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfaWlzOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9ydGM7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2FkYzsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2Vfc2RpOworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3NwaTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3NwaTE7CisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfbmFuZDsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV90aW1lcjA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3RpbWVyMTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdGltZXIyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV90aW1lcjM7CisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdXNiZ2FkZ2V0OworCisvKiBzM2MyNDQwIHNwZWNpZmljIGRldmljZXMgKi8KKworI2lmZGVmIENPTkZJR19DUFVfUzNDMjQ0MAorCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2NhbWlmOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzIyOWZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCkBAIC0wLDAgKzEsMTIxMCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1iYXN0L2RtYS5jCisgKgorICogKGMpIDIwMDMtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNDEwIERNQSBjb3JlCisgKgorICogaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvRUIyNDEwSVRYLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ2hhbmdlbG9nOgorICogIDI3LUZlYi0yMDA1IEJKRCAgQWRkZWQga21lbSBjYWNoZSBmb3IgZG1hIGRlc2NyaXB0b3JzCisgKiAgMTgtTm92LTIwMDQgQkpEICBSZW1vdmVkIGVycm9yIGZvciBsb2FkaW5nIG9udG8gc3RvcHBlZCBjaGFubmVsCisgKiAgMTAtTm92LTIwMDQgQkpEICBFbnN1cmUgYWxsIGV4dGVybmFsIHN5bWJvbHMgZXhwb3J0ZWQgZm9yIG1vZHVsZXMKKyAqICAxMC1Ob3YtMjAwNCBCSkQgIFVzZSBzeXNfZGV2aWNlIGFuZCBzeXNkZXZfY2xhc3MgZm9yIHBvd2VyIG1hbmFnZW1lbnQKKyAqICAwOC1BdWctMjAwNCBCSkQgIEFwcGx5IHJtaydzIHN1Z2dlc3Rpb25zCisgKiAgMjEtSnVsLTIwMDQgQkpEICBQb3J0ZWQgdG8gbGludXggMi42CisgKiAgMTItSnVsLTIwMDQgQkpEICBGaW5pc2hlZCByZS13cml0ZSBhbmQgY2hhbmdlIG9mIEFQSQorICogIDA2LUp1bC0yMDA0IEJKRCAgUmV3cm90ZSBkbWEgY29kZSB0byB0cnkgYW5kIGNvcGUgd2l0aCB2YXJpb3VzIHByb2JsZW1zCisgKiAgMjMtTWF5LTIwMDMgQkpEICBDcmVhdGVkIGZpbGUKKyAqICAxOS1BdWctMjAwMyBCSkQgIENsZWFudXAsIGhlYWRlciBmaXgsIGFkZGVkIFVSTAorICoKKyAqIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiB0aGUgU2FuZ3dvb2sgTGVlL1NhbXN1bmcgcGF0Y2hlcywgcmUtd3JpdHRlbiBkdWUKKyAqIHRvIHZhcmlvdXMgb21taXNpb25zIGZyb20gdGhlIGNvZGUgKHN1Y2ggYXMgZmxleGlibGUgZG1hIGNvbmZpZ3VyYXRpb24pCisgKiBmb3IgdXNlIHdpdGggdGhlIEJBU1Qgc3lzdGVtIGJvYXJkLgorICoKKyAqIFRoZSByZS13cml0ZSBpcyBwcmV0dHkgbXVjaCBjb21wbGV0ZSwgYW5kIHNob3VsZCBiZSBnb29kIGVub3VnaCBmb3IgYW55CisgKiBwb3NzaWJsZSBETUEgZnVuY3Rpb24KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfUzNDMjQxMF9ETUFfREVCVUcKKyNkZWZpbmUgREVCVUcKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tYXAuaD4KKworLyogaW8gbWFwIGZvciBkbWEgKi8KK3N0YXRpYyB2b2lkIF9faW9tZW0gKmRtYV9iYXNlOworc3RhdGljIGttZW1fY2FjaGVfdCAqZG1hX2ttZW07CisKKy8qIGRtYSBjaGFubmVsIHN0YXRlIGluZm9ybWF0aW9uICovCitzM2MyNDEwX2RtYV9jaGFuX3QgczNjMjQxMF9jaGFuc1tTM0MyNDEwX0RNQV9DSEFOTkVMU107CisKKy8qIGRlYnVnZ2luZyBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBCVUZfTUFHSUMgKDB4Y2FmZWJhYmUpCisKKyNkZWZpbmUgZG1hd2FybihmbXQuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZtdCkKKworI2RlZmluZSBkbWFfcmVnYWRkcihjaGFuLCByZWcpICgoY2hhbiktPnJlZ3MgKyAocmVnKSkKKworI2lmIDEKKyNkZWZpbmUgZG1hX3dycmVnKGNoYW4sIHJlZywgdmFsKSB3cml0ZWwoKHZhbCksIChjaGFuKS0+cmVncyArIChyZWcpKQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3dycmVnKHMzYzI0MTBfZG1hX2NoYW5fdCAqY2hhbiwgaW50IHJlZywgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJcHJfZGVidWcoIndyaXRpbmcgJTA4eCB0byByZWdpc3RlciAlMDh4XG4iLCh1bnNpZ25lZCBpbnQpdmFsLHJlZyk7CisJd3JpdGVsKHZhbCwgZG1hX3JlZ2FkZHIoY2hhbiwgcmVnKSk7Cit9CisKKyNlbmRpZgorCisjZGVmaW5lIGRtYV9yZHJlZyhjaGFuLCByZWcpIHJlYWRsKChjaGFuKS0+cmVncyArIChyZWcpKQorCisvKiBjYXB0dXJlZCByZWdpc3RlciBzdGF0ZSBmb3IgZGVidWcgKi8KKworc3RydWN0IHMzYzI0MTBfZG1hX3JlZ3N0YXRlIHsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgZGNzcmM7CisJdW5zaWduZWQgbG9uZyAgICAgICAgIGRpc3JjOworCXVuc2lnbmVkIGxvbmcgICAgICAgICBkc3RhdDsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgZGNvbjsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgZG1za3RyaWc7Cit9OworCisjaWZkZWYgQ09ORklHX1MzQzI0MTBfRE1BX0RFQlVHCisKKy8qIGRtYWRiZ19zaG93cmVncworICoKKyAqIHNpbXBsZSBkZWJ1ZyByb3V0aW5lIHRvIHByaW50IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBkbWEgcmVnaXN0ZXJzCisqLworCitzdGF0aWMgdm9pZAorZG1hZGJnX2NhcHR1cmUoczNjMjQxMF9kbWFfY2hhbl90ICpjaGFuLCBzdHJ1Y3QgczNjMjQxMF9kbWFfcmVnc3RhdGUgKnJlZ3MpCit7CisJcmVncy0+ZGNzcmMgICAgPSBkbWFfcmRyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRENTUkMpOworCXJlZ3MtPmRpc3JjICAgID0gZG1hX3JkcmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RJU1JDKTsKKwlyZWdzLT5kc3RhdCAgICA9IGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EU1RBVCk7CisJcmVncy0+ZGNvbiAgICAgPSBkbWFfcmRyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRENPTik7CisJcmVncy0+ZG1za3RyaWcgPSBkbWFfcmRyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRE1BU0tUUklHKTsKK30KKworc3RhdGljIHZvaWQKK2RtYWRiZ19zaG93cmVncyhjb25zdCBjaGFyICpmbmFtZSwgaW50IGxpbmUsIHMzYzI0MTBfZG1hX2NoYW5fdCAqY2hhbiwKKwkJIHN0cnVjdCBzM2MyNDEwX2RtYV9yZWdzdGF0ZSAqcmVncykKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiZG1hJWQ6ICVzOiVkOiBEQ1NSQz0lMDhseCwgRElTUkM9JTA4bHgsIERTVEFUPSUwOGx4IERNVD0lMDJseCwgRENPTj0lMDhseFxuIiwKKwkgICAgICAgY2hhbi0+bnVtYmVyLCBmbmFtZSwgbGluZSwKKwkgICAgICAgcmVncy0+ZGNzcmMsIHJlZ3MtPmRpc3JjLCByZWdzLT5kc3RhdCwgcmVncy0+ZG1za3RyaWcsCisJICAgICAgIHJlZ3MtPmRjb24pOworfQorCitzdGF0aWMgdm9pZAorZG1hZGJnX3Nob3djaGFuKGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgbGluZSwgczNjMjQxMF9kbWFfY2hhbl90ICpjaGFuKQoreworCXN0cnVjdCBzM2MyNDEwX2RtYV9yZWdzdGF0ZSBzdGF0ZTsKKworCWRtYWRiZ19jYXB0dXJlKGNoYW4sICZzdGF0ZSk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiZG1hJWQ6ICVzOiVkOiBscz0lZCwgY3VyPSVwLCAlcCAlcFxuIiwKKwkgICAgICAgY2hhbi0+bnVtYmVyLCBmbmFtZSwgbGluZSwgY2hhbi0+bG9hZF9zdGF0ZSwKKwkgICAgICAgY2hhbi0+Y3VyciwgY2hhbi0+bmV4dCwgY2hhbi0+ZW5kKTsKKworCWRtYWRiZ19zaG93cmVncyhmbmFtZSwgbGluZSwgY2hhbiwgJnN0YXRlKTsKK30KKworI2RlZmluZSBkYmdfc2hvd3JlZ3MoY2hhbikgZG1hZGJnX3Nob3dyZWdzKF9fRlVOQ1RJT05fXywgX19MSU5FX18sIChjaGFuKSkKKyNkZWZpbmUgZGJnX3Nob3djaGFuKGNoYW4pIGRtYWRiZ19zaG93Y2hhbihfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAoY2hhbikpCisjZWxzZQorI2RlZmluZSBkYmdfc2hvd3JlZ3MoY2hhbikgZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIGRiZ19zaG93Y2hhbihjaGFuKSBkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZiAvKiBDT05GSUdfUzNDMjQxMF9ETUFfREVCVUcgKi8KKworI2RlZmluZSBjaGVja19jaGFubmVsKGNoYW4pIFwKKyAgZG8geyBpZiAoKGNoYW4pID49IFMzQzI0MTBfRE1BX0NIQU5ORUxTKSB7IFwKKyAgICBwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIGNoYW5uZWwgJWRcbiIsIF9fRlVOQ1RJT05fXywgKGNoYW4pKTsgXAorICAgIHJldHVybiAtRUlOVkFMOyBcCisgIH0gfSB3aGlsZSgwKQorCisKKy8qIHMzYzI0MTBfZG1hX3N0YXRzX3RpbWVvdXQKKyAqCisgKiBVcGRhdGUgRE1BIHN0YXRzIGZyb20gdGltZW91dCBpbmZvCisqLworCitzdGF0aWMgdm9pZAorczNjMjQxMF9kbWFfc3RhdHNfdGltZW91dChzM2MyNDEwX2RtYV9zdGF0c190ICpzdGF0cywgaW50IHZhbCkKK3sKKwlpZiAoc3RhdHMgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKHZhbCA+IHN0YXRzLT50aW1lb3V0X2xvbmdlc3QpCisJCXN0YXRzLT50aW1lb3V0X2xvbmdlc3QgPSB2YWw7CisJaWYgKHZhbCA8IHN0YXRzLT50aW1lb3V0X3Nob3J0ZXN0KQorCQlzdGF0cy0+dGltZW91dF9zaG9ydGVzdCA9IHZhbDsKKworCXN0YXRzLT50aW1lb3V0X2F2ZyArPSB2YWw7Cit9CisKKy8qIHMzYzI0MTBfZG1hX3dhaXRmb3Jsb2FkCisgKgorICogd2FpdCBmb3IgdGhlIERNQSBlbmdpbmUgdG8gbG9hZCBhIGJ1ZmZlciwgYW5kIHVwZGF0ZSB0aGUgc3RhdGUgYWNjb3JkaW5nbHkKKyovCisKK3N0YXRpYyBpbnQKK3MzYzI0MTBfZG1hX3dhaXRmb3Jsb2FkKHMzYzI0MTBfZG1hX2NoYW5fdCAqY2hhbiwgaW50IGxpbmUpCit7CisJaW50IHRpbWVvdXQgPSBjaGFuLT5sb2FkX3RpbWVvdXQ7CisJaW50IHRvb2s7CisKKwlpZiAoY2hhbi0+bG9hZF9zdGF0ZSAhPSBTM0MyNDEwX0RNQUxPQURfMUxPQURFRCkgeworCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiBzM2MyNDEwX2RtYV93YWl0Zm9ybG9hZCgpIGNhbGxlZCBpbiBsb2Fkc3RhdGUgJWQgZnJvbSBsaW5lICVkXG4iLCBjaGFuLT5udW1iZXIsIGNoYW4tPmxvYWRfc3RhdGUsIGxpbmUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoY2hhbi0+c3RhdHMgIT0gTlVMTCkKKwkJY2hhbi0+c3RhdHMtPmxvYWRzKys7CisKKwl3aGlsZSAoLS10aW1lb3V0ID4gMCkgeworCQlpZiAoKGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EU1RBVCkgPDwgKDMyLTIwKSkgIT0gMCkgeworCQkJdG9vayA9IGNoYW4tPmxvYWRfdGltZW91dCAtIHRpbWVvdXQ7CisKKwkJCXMzYzI0MTBfZG1hX3N0YXRzX3RpbWVvdXQoY2hhbi0+c3RhdHMsIHRvb2spOworCisJCQlzd2l0Y2ggKGNoYW4tPmxvYWRfc3RhdGUpIHsKKwkJCWNhc2UgUzNDMjQxMF9ETUFMT0FEXzFMT0FERUQ6CisJCQkJY2hhbi0+bG9hZF9zdGF0ZSA9IFMzQzI0MTBfRE1BTE9BRF8xUlVOTklORzsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiB1bmtub3duIGxvYWRfc3RhdGUgaW4gczNjMjQxMF9kbWFfd2FpdGZvcmxvYWQoKSAlZFxuIiwgY2hhbi0+bnVtYmVyLCBjaGFuLT5sb2FkX3N0YXRlKTsKKwkJCX0KKworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlpZiAoY2hhbi0+c3RhdHMgIT0gTlVMTCkgeworCQljaGFuLT5zdGF0cy0+dGltZW91dF9mYWlsZWQrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCisKKy8qIHMzYzI0MTBfZG1hX2xvYWRidWZmZXIKKyAqCisgKiBsb2FkIGEgYnVmZmVyLCBhbmQgdXBkYXRlIHRoZSBjaGFubmVsIHN0YXRlCisqLworCitzdGF0aWMgaW5saW5lIGludAorczNjMjQxMF9kbWFfbG9hZGJ1ZmZlcihzM2MyNDEwX2RtYV9jaGFuX3QgKmNoYW4sCisJCSAgICAgICBzM2MyNDEwX2RtYV9idWZfdCAqYnVmKQoreworCXVuc2lnbmVkIGxvbmcgcmVsb2FkOworCisJcHJfZGVidWcoInMzYzI0MTBfY2hhbl9sb2FkYnVmZmVyOiBsb2FkaW5nIGJ1ZmYgJXAgKDB4JTA4bHgsMHglMDZ4KVxuIiwKKwkJIGJ1ZiwgKHVuc2lnbmVkIGxvbmcpYnVmLT5kYXRhLCBidWYtPnNpemUpOworCisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCWRtYXdhcm4oImJ1ZmZlciBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogY2hlY2sgdGhlIHN0YXRlIG9mIHRoZSBjaGFubmVsIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyAqLworCisJaWYgKGNoYW4tPmxvYWRfc3RhdGUgPT0gUzNDMjQxMF9ETUFMT0FEXzFMT0FERUQpIHsKKwkJZG1hd2FybigibG9hZF9zdGF0ZSBpcyBTM0MyNDEwX0RNQUxPQURfMUxPQURFRFxuIik7CisJfQorCisJaWYgKGNoYW4tPmxvYWRfc3RhdGUgPT0gUzNDMjQxMF9ETUFMT0FEXzFMT0FERURfMVJVTk5JTkcpIHsKKwkJZG1hd2Fybigic3RhdGUgaXMgUzNDMjQxMF9ETUFMT0FEXzFMT0FERURfMVJVTk5JTkdcbiIpOworCX0KKworCS8qIGl0IHdvdWxkIHNlZW0gc2Vuc2libGUgaWYgd2UgYXJlIHRoZSBsYXN0IGJ1ZmZlciB0byBub3QgYm90aGVyCisJICogd2l0aCB0aGUgYXV0by1yZWxvYWQgYml0LCBzbyB0aGF0IHRoZSBETUEgZW5naW5lIHdpbGwgbm90IHRyeQorCSAqIGFuZCBsb2FkIGFub3RoZXIgdHJhbnNmZXIgYWZ0ZXIgdGhpcyBvbmUgaGFzIGZpbmlzaGVkLi4uCisJICovCisJaWYgKGNoYW4tPmxvYWRfc3RhdGUgPT0gUzNDMjQxMF9ETUFMT0FEX05PTkUpIHsKKwkJcHJfZGVidWcoImxvYWRfc3RhdGUgaXMgbm9uZSwgY2hlY2tpbmcgZm9yIG5vcmVsb2FkIChuZXh0PSVwKVxuIiwKKwkJCSBidWYtPm5leHQpOworCQlyZWxvYWQgPSAoYnVmLT5uZXh0ID09IE5VTEwpID8gUzNDMjQxMF9EQ09OX05PUkVMT0FEIDogMDsKKwl9IGVsc2UgeworCQlwcl9kZWJ1ZygibG9hZF9zdGF0ZSBpcyAlZCA9PiBhdXRvcmVsb2FkXG4iLCBjaGFuLT5sb2FkX3N0YXRlKTsKKwkJcmVsb2FkID0gUzNDMjQxMF9EQ09OX0FVVE9SRUxPQUQ7CisJfQorCisJd3JpdGVsKGJ1Zi0+ZGF0YSwgY2hhbi0+YWRkcl9yZWcpOworCisJZG1hX3dycmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RDT04sCisJCSAgY2hhbi0+ZGNvbiB8IHJlbG9hZCB8IChidWYtPnNpemUvY2hhbi0+eGZlcl91bml0KSk7CisKKwljaGFuLT5uZXh0ID0gYnVmLT5uZXh0OworCisJLyogdXBkYXRlIHRoZSBzdGF0ZSBvZiB0aGUgY2hhbm5lbCAqLworCisJc3dpdGNoIChjaGFuLT5sb2FkX3N0YXRlKSB7CisJY2FzZSBTM0MyNDEwX0RNQUxPQURfTk9ORToKKwkJY2hhbi0+bG9hZF9zdGF0ZSA9IFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEOworCQlicmVhazsKKworCWNhc2UgUzNDMjQxMF9ETUFMT0FEXzFSVU5OSU5HOgorCQljaGFuLT5sb2FkX3N0YXRlID0gUzNDMjQxMF9ETUFMT0FEXzFMT0FERURfMVJVTk5JTkc7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZG1hd2FybigiZG1hbG9hZDogdW5rbm93biBzdGF0ZSAlZCBpbiBsb2FkYnVmZmVyXG4iLAorCQkJY2hhbi0+bG9hZF9zdGF0ZSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisvKiBzM2MyNDEwX2RtYV9jYWxsX29wCisgKgorICogc21hbGwgcm91dGluZSB0byBjYWxsIHRoZSBvcCByb3V0aW5lIHdpdGggdGhlIGdpdmVuIG9wIGlmIGl0IGhhcyBiZWVuCisgKiByZWdpc3RlcmVkCisqLworCitzdGF0aWMgdm9pZAorczNjMjQxMF9kbWFfY2FsbF9vcChzM2MyNDEwX2RtYV9jaGFuX3QgKmNoYW4sIHMzYzI0MTBfY2hhbl9vcF90IG9wKQoreworCWlmIChjaGFuLT5vcF9mbiAhPSBOVUxMKSB7CisJCShjaGFuLT5vcF9mbikoY2hhbiwgb3ApOworCX0KK30KKworLyogczNjMjQxMF9kbWFfYnVmZmRvbmUKKyAqCisgKiBzbWFsbCB3cmFwcGVyIHRvIGNoZWNrIGlmIGNhbGxiYWNrIHJvdXRpbmUgbmVlZHMgdG8gYmUgY2FsbGVkLCBhbmQKKyAqIGlmIHNvLCBjYWxsIGl0CisqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK3MzYzI0MTBfZG1hX2J1ZmZkb25lKHMzYzI0MTBfZG1hX2NoYW5fdCAqY2hhbiwgczNjMjQxMF9kbWFfYnVmX3QgKmJ1ZiwKKwkJICAgICBzM2MyNDEwX2RtYV9idWZmcmVzdWx0X3QgcmVzdWx0KQoreworCXByX2RlYnVnKCJjYWxsYmFja19mbj0lcCwgYnVmPSVwLCBpZD0lcCwgc2l6ZT0lZCwgcmVzdWx0PSVkXG4iLAorCQkgY2hhbi0+Y2FsbGJhY2tfZm4sIGJ1ZiwgYnVmLT5pZCwgYnVmLT5zaXplLCByZXN1bHQpOworCisJaWYgKGNoYW4tPmNhbGxiYWNrX2ZuICE9IE5VTEwpIHsKKwkJKGNoYW4tPmNhbGxiYWNrX2ZuKShjaGFuLCBidWYtPmlkLCBidWYtPnNpemUsIHJlc3VsdCk7CisJfQorfQorCisvKiBzM2MyNDEwX2RtYV9zdGFydAorICoKKyAqIHN0YXJ0IGEgZG1hIGNoYW5uZWwgZ29pbmcKKyovCisKK3N0YXRpYyBpbnQgczNjMjQxMF9kbWFfc3RhcnQoczNjMjQxMF9kbWFfY2hhbl90ICpjaGFuKQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwcl9kZWJ1ZygiczNjMjQxMF9zdGFydF9kbWE6IGNoYW5uZWw9JWRcbiIsIGNoYW4tPm51bWJlcik7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlpZiAoY2hhbi0+c3RhdGUgPT0gUzNDMjQxMF9ETUFfUlVOTklORykgeworCQlwcl9kZWJ1ZygiczNjMjQxMF9zdGFydF9kbWE6IGFscmVhZHkgcnVubmluZyAoJWQpXG4iLCBjaGFuLT5zdGF0ZSk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY2hhbi0+c3RhdGUgPSBTM0MyNDEwX0RNQV9SVU5OSU5HOworCisJLyogY2hlY2sgd2V0aGVyIHRoZXJlIGlzIGFueXRoaW5nIHRvIGxvYWQsIGFuZCBpZiBub3QsIHNlZQorCSAqIGlmIHdlIGNhbiBmaW5kIGFueXRoaW5nIHRvIGxvYWQKKwkgKi8KKworCWlmIChjaGFuLT5sb2FkX3N0YXRlID09IFMzQzI0MTBfRE1BTE9BRF9OT05FKSB7CisJCWlmIChjaGFuLT5uZXh0ID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IGNoYW5uZWwgaGFzIG5vdGhpbmcgbG9hZGVkXG4iLAorCQkJICAgICAgIGNoYW4tPm51bWJlcik7CisJCQljaGFuLT5zdGF0ZSA9IFMzQzI0MTBfRE1BX0lETEU7CisJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXMzYzI0MTBfZG1hX2xvYWRidWZmZXIoY2hhbiwgY2hhbi0+bmV4dCk7CisJfQorCisJZGJnX3Nob3djaGFuKGNoYW4pOworCisJLyogZW5hYmxlIHRoZSBjaGFubmVsICovCisKKwlpZiAoIWNoYW4tPmlycV9lbmFibGVkKSB7CisJCWVuYWJsZV9pcnEoY2hhbi0+aXJxKTsKKwkJY2hhbi0+aXJxX2VuYWJsZWQgPSAxOworCX0KKworCS8qIHN0YXJ0IHRoZSBjaGFubmVsIGdvaW5nICovCisKKwl0bXAgPSBkbWFfcmRyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRE1BU0tUUklHKTsKKwl0bXAgJj0gflMzQzI0MTBfRE1BU0tUUklHX1NUT1A7CisJdG1wIHw9IFMzQzI0MTBfRE1BU0tUUklHX09OOworCWRtYV93cnJlZyhjaGFuLCBTM0MyNDEwX0RNQV9ETUFTS1RSSUcsIHRtcCk7CisKKwlwcl9kZWJ1Zygid3JvdGUgJTA4bHggdG8gRE1BU0tUUklHXG4iLCB0bXApOworCisjaWYgMAorCS8qIHRoZSBkbWEgYnVmZmVyIGxvYWRzIHNob3VsZCB0YWtlIGNhcmUgb2YgY2xlYXJpbmcgdGhlIEFVVE8KKwkgKiByZWxvYWRpbmcgZmVhdHVyZSAqLworCXRtcCA9IGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EQ09OKTsKKwl0bXAgJj0gflMzQzI0MTBfRENPTl9OT1JFTE9BRDsKKwlkbWFfd3JyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRENPTiwgdG1wKTsKKyNlbmRpZgorCisJczNjMjQxMF9kbWFfY2FsbF9vcChjaGFuLCBTM0MyNDEwX0RNQU9QX1NUQVJUKTsKKworCWRiZ19zaG93Y2hhbihjaGFuKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyogczNjMjQxMF9kbWFfY2FubG9hZAorICoKKyAqIHdvcmsgb3V0IGlmIHdlIGNhbiBxdWV1ZSBhbm90aGVyIGJ1ZmZlciBpbnRvIHRoZSBETUEgZW5naW5lCisqLworCitzdGF0aWMgaW50CitzM2MyNDEwX2RtYV9jYW5sb2FkKHMzYzI0MTBfZG1hX2NoYW5fdCAqY2hhbikKK3sKKwlpZiAoY2hhbi0+bG9hZF9zdGF0ZSA9PSBTM0MyNDEwX0RNQUxPQURfTk9ORSB8fAorCSAgICBjaGFuLT5sb2FkX3N0YXRlID09IFMzQzI0MTBfRE1BTE9BRF8xUlVOTklORykKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworCisvKiBzM2MyNDEwX2RtYV9lbnF1ZXVlCisgKgorICogcXVldWUgYW4gZ2l2ZW4gYnVmZmVyIGZvciBkbWEgdHJhbnNmZXIuCisgKgorICogaWQgICAgICAgICB0aGUgZGV2aWNlIGRyaXZlcidzIGlkIGluZm9ybWF0aW9uIGZvciB0aGlzIGJ1ZmZlcgorICogZGF0YSAgICAgICB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgYnVmZmVyIGRhdGEKKyAqIHNpemUgICAgICAgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpbiBieXRlcworICoKKyAqIElmIHRoZSBjaGFubmVsIGlzIG5vdCBydW5uaW5nLCB0aGVuIHRoZSBmbGFnIFMzQzI0MTBfRE1BRl9BVVRPU1RBUlQKKyAqIGlzIGNoZWNrZWQsIGFuZCBpZiBzZXQsIHRoZSBjaGFubmVsIGlzIHN0YXJ0ZWQuIElmIHRoaXMgZmxhZyBpc24ndCBzZXQsCisgKiB0aGVuIGFuIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuCisgKgorICogSXQgaXMgcG9zc2libGUgdG8gcXVldWUgbW9yZSB0aGFuIG9uZSBETUEgYnVmZmVyIG9udG8gYSBjaGFubmVsIGF0CisgKiBvbmNlLCBhbmQgdGhlIGNvZGUgd2lsbCBkZWFsIHdpdGggdGhlIHJlLWxvYWRpbmcgb2YgdGhlIG5leHQgYnVmZmVyCisgKiB3aGVuIG5lY2Vzc2FyeS4KKyovCisKK2ludCBzM2MyNDEwX2RtYV9lbnF1ZXVlKHVuc2lnbmVkIGludCBjaGFubmVsLCB2b2lkICppZCwKKwkJCWRtYV9hZGRyX3QgZGF0YSwgaW50IHNpemUpCit7CisJczNjMjQxMF9kbWFfY2hhbl90ICpjaGFuID0gJnMzYzI0MTBfY2hhbnNbY2hhbm5lbF07CisJczNjMjQxMF9kbWFfYnVmX3QgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY2hlY2tfY2hhbm5lbChjaGFubmVsKTsKKworCXByX2RlYnVnKCIlczogaWQ9JXAsIGRhdGE9JTA4eCwgc2l6ZT0lZFxuIiwKKwkJIF9fRlVOQ1RJT05fXywgaWQsICh1bnNpZ25lZCBpbnQpZGF0YSwgc2l6ZSk7CisKKwlidWYgPSBrbWVtX2NhY2hlX2FsbG9jKGRtYV9rbWVtLCBHRlBfQVRPTUlDKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJcHJfZGVidWcoIiVzOiBvdXQgb2YgbWVtb3J5ICglZCBhbGxvYylcbiIsCisJCQkgX19GVU5DVElPTl9fLCBzaXplb2YoKmJ1ZikpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwcl9kZWJ1ZygiJXM6IG5ldyBidWZmZXIgJXBcbiIsIF9fRlVOQ1RJT05fXywgYnVmKTsKKworCS8vZGJnX3Nob3djaGFuKGNoYW4pOworCisJYnVmLT5uZXh0ICA9IE5VTEw7CisJYnVmLT5kYXRhICA9IGJ1Zi0+cHRyID0gZGF0YTsKKwlidWYtPnNpemUgID0gc2l6ZTsKKwlidWYtPmlkICAgID0gaWQ7CisJYnVmLT5tYWdpYyA9IEJVRl9NQUdJQzsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWlmIChjaGFuLT5jdXJyID09IE5VTEwpIHsKKwkJLyogd2UndmUgZ290IG5vdGhpbmcgbG9hZGVkLi4uICovCisJCXByX2RlYnVnKCIlczogYnVmZmVyICVwIHF1ZXVlZCBvbnRvIGVtcHR5IGNoYW5uZWxcbiIsCisJCQkgX19GVU5DVElPTl9fLCBidWYpOworCisJCWNoYW4tPmN1cnIgPSBidWY7CisJCWNoYW4tPmVuZCAgPSBidWY7CisJCWNoYW4tPm5leHQgPSBOVUxMOworCX0gZWxzZSB7CisJCXByX2RlYnVnKCJkbWElZDogJXM6IGJ1ZmZlciAlcCBxdWV1ZWQgb250byBub24tZW1wdHkgY2hhbm5lbFxuIiwKKwkJCSBjaGFuLT5udW1iZXIsIF9fRlVOQ1RJT05fXywgYnVmKTsKKworCQlpZiAoY2hhbi0+ZW5kID09IE5VTEwpCisJCQlwcl9kZWJ1ZygiZG1hJWQ6ICVzOiAlcCBub3QgZW1wdHksIGFuZCBjaGFuLT5lbmQ9PU5VTEw/XG4iLAorCQkJCSBjaGFuLT5udW1iZXIsIF9fRlVOQ1RJT05fXywgY2hhbik7CisKKwkJY2hhbi0+ZW5kLT5uZXh0ID0gYnVmOworCQljaGFuLT5lbmQgPSBidWY7CisJfQorCisJLyogaWYgbmVjZXNzYXJ5LCB1cGRhdGUgdGhlIG5leHQgYnVmZmVyIGZpZWxkICovCisJaWYgKGNoYW4tPm5leHQgPT0gTlVMTCkKKwkJY2hhbi0+bmV4dCA9IGJ1ZjsKKworCS8qIGNoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gbG9hZCBhIGJ1ZmZlciAqLworCWlmIChjaGFuLT5zdGF0ZSA9PSBTM0MyNDEwX0RNQV9SVU5OSU5HKSB7CisJCWlmIChjaGFuLT5sb2FkX3N0YXRlID09IFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEICYmIDEpIHsKKwkJCWlmIChzM2MyNDEwX2RtYV93YWl0Zm9ybG9hZChjaGFuLCBfX0xJTkVfXykgPT0gMCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IGxvYWRidWZmZXI6IgorCQkJCSAgICAgICAidGltZW91dCBsb2FkaW5nIGJ1ZmZlclxuIiwKKwkJCQkgICAgICAgY2hhbi0+bnVtYmVyKTsKKwkJCQlkYmdfc2hvd2NoYW4oY2hhbik7CisJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9CisKKwkJd2hpbGUgKHMzYzI0MTBfZG1hX2NhbmxvYWQoY2hhbikgJiYgY2hhbi0+bmV4dCAhPSBOVUxMKSB7CisJCQlzM2MyNDEwX2RtYV9sb2FkYnVmZmVyKGNoYW4sIGNoYW4tPm5leHQpOworCQl9CisJfSBlbHNlIGlmIChjaGFuLT5zdGF0ZSA9PSBTM0MyNDEwX0RNQV9JRExFKSB7CisJCWlmIChjaGFuLT5mbGFncyAmIFMzQzI0MTBfRE1BRl9BVVRPU1RBUlQpIHsKKwkJCXMzYzI0MTBfZG1hX2N0cmwoY2hhbi0+bnVtYmVyLCBTM0MyNDEwX0RNQU9QX1NUQVJUKTsKKwkJfQorCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChzM2MyNDEwX2RtYV9lbnF1ZXVlKTsKKworc3RhdGljIGlubGluZSB2b2lkCitzM2MyNDEwX2RtYV9mcmVlYnVmKHMzYzI0MTBfZG1hX2J1Zl90ICpidWYpCit7CisJaW50IG1hZ2ljb2sgPSAoYnVmLT5tYWdpYyA9PSBCVUZfTUFHSUMpOworCisJYnVmLT5tYWdpYyA9IC0xOworCisJaWYgKG1hZ2ljb2spIHsKKwkJa21lbV9jYWNoZV9mcmVlKGRtYV9rbWVtLCBidWYpOworCX0gZWxzZSB7CisJCXByaW50aygiczNjMjQxMF9kbWFfZnJlZWJ1ZjogYnVmZiAlcCB3aXRoIGJhZCBtYWdpY1xuIiwgYnVmKTsKKwl9Cit9CisKKy8qIHMzYzI0MTBfZG1hX2xhc3R4ZmVyCisgKgorICogY2FsbGVkIHdoZW4gdGhlIHN5c3RlbSBpcyBvdXQgb2YgYnVmZmVycywgdG8gZW5zdXJlIHRoYXQgdGhlIGNoYW5uZWwKKyAqIGlzIHByZXBhcmVkIGZvciBzaHV0ZG93bi4KKyovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorczNjMjQxMF9kbWFfbGFzdHhmZXIoczNjMjQxMF9kbWFfY2hhbl90ICpjaGFuKQoreworCXByX2RlYnVnKCJkbWElZDogczNjMjQxMF9kbWFfbGFzdHhmZXI6IGxvYWRfc3RhdGUgJWRcbiIsCisJCSBjaGFuLT5udW1iZXIsIGNoYW4tPmxvYWRfc3RhdGUpOworCisJc3dpdGNoIChjaGFuLT5sb2FkX3N0YXRlKSB7CisJY2FzZSBTM0MyNDEwX0RNQUxPQURfTk9ORToKKwkJYnJlYWs7CisKKwljYXNlIFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEOgorCQlpZiAoczNjMjQxMF9kbWFfd2FpdGZvcmxvYWQoY2hhbiwgX19MSU5FX18pID09IDApIHsKKwkJCQkvKiBmbGFnIGVycm9yPyAqLworCQkJcHJpbnRrKEtFUk5fRVJSICJkbWElZDogdGltZW91dCB3YWl0aW5nIGZvciBsb2FkXG4iLAorCQkJICAgICAgIGNoYW4tPm51bWJlcik7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygiZG1hJWQ6IGxhc3R4ZmVyOiB1bmhhbmRsZWQgbG9hZF9zdGF0ZSAlZCB3aXRoIG5vIG5leHQiLAorCQkJIGNoYW4tPm51bWJlciwgY2hhbi0+bG9hZF9zdGF0ZSk7CisJCXJldHVybjsKKworCX0KKworCS8qIGhvcGVmdWxseSB0aGlzJ2xsIHNodXQgdGhlIGRhbW5lZCB0aGluZyB1cCBhZnRlciB0aGUgdHJhbnNmZXIuLi4gKi8KKwlkbWFfd3JyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRENPTiwgY2hhbi0+ZGNvbiB8IFMzQzI0MTBfRENPTl9OT1JFTE9BRCk7Cit9CisKKworI2RlZmluZSBkbWFkYmcyKHguLi4pCisKK3N0YXRpYyBpcnFyZXR1cm5fdAorczNjMjQxMF9kbWFfaXJxKGludCBpcnEsIHZvaWQgKmRldnB3LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzM2MyNDEwX2RtYV9jaGFuX3QgKmNoYW4gPSAoczNjMjQxMF9kbWFfY2hhbl90ICopZGV2cHc7CisJczNjMjQxMF9kbWFfYnVmX3QgICpidWY7CisKKwlidWYgPSBjaGFuLT5jdXJyOworCisJZGJnX3Nob3djaGFuKGNoYW4pOworCisJLyogbW9kaWZ5IHRoZSBjaGFubmVsIHN0YXRlICovCisKKwlzd2l0Y2ggKGNoYW4tPmxvYWRfc3RhdGUpIHsKKwljYXNlIFMzQzI0MTBfRE1BTE9BRF8xUlVOTklORzoKKwkJLyogVE9ETyAtIGlmIHdlIGFyZSBydW5uaW5nIG9ubHkgb25lIGJ1ZmZlciwgd2UgcHJvYmFibHkKKwkJICogd2FudCB0byByZWxvYWQgaGVyZSwgYW5kIHRoZW4gd29ycnkgYWJvdXQgdGhlIGJ1ZmZlcgorCQkgKiBjYWxsYmFjayAqLworCisJCWNoYW4tPmxvYWRfc3RhdGUgPSBTM0MyNDEwX0RNQUxPQURfTk9ORTsKKwkJYnJlYWs7CisKKwljYXNlIFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEOgorCQkvKiBpaXJjLCB3ZSBzaG91bGQgZ28gYmFjayB0byBOT05FIGxvYWRlZCBoZXJlLCB3ZQorCQkgKiBoYWQgYSBidWZmZXIsIGFuZCBpdCB3YXMgbmV2ZXIgdmVyaWZpZWQgYXMgYmVpbmcKKwkJICogbG9hZGVkLgorCQkgKi8KKworCQljaGFuLT5sb2FkX3N0YXRlID0gUzNDMjQxMF9ETUFMT0FEX05PTkU7CisJCWJyZWFrOworCisJY2FzZSBTM0MyNDEwX0RNQUxPQURfMUxPQURFRF8xUlVOTklORzoKKwkJLyogd2UnbGwgd29ycnkgYWJvdXQgY2hlY2tpbmcgdG8gc2VlIGlmIGFub3RoZXIgYnVmZmVyIGlzCisJCSAqIHJlYWR5IGFmdGVyIHdlJ3ZlIGNhbGxlZCBiYWNrIHRoZSBvd25lci4gVGhpcyBzaG91bGQKKwkJICogZW5zdXJlIHdlIGRvIG5vdCB3YWl0IGFyb3VuZCB0b28gbG9uZyBmb3IgdGhlIERNQQorCQkgKiBlbmdpbmUgdG8gc3RhcnQgdGhlIG5leHQgdHJhbnNmZXIKKwkJICovCisKKwkJY2hhbi0+bG9hZF9zdGF0ZSA9IFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEOworCQlicmVhazsKKworCWNhc2UgUzNDMjQxMF9ETUFMT0FEX05PTkU6CisJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IElSUSB3aXRoIG5vIGxvYWRlZCBidWZmZXI/XG4iLAorCQkgICAgICAgY2hhbi0+bnVtYmVyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiBJUlEgaW4gaW52YWxpZCBsb2FkX3N0YXRlICVkXG4iLAorCQkgICAgICAgY2hhbi0+bnVtYmVyLCBjaGFuLT5sb2FkX3N0YXRlKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGJ1ZiAhPSBOVUxMKSB7CisJCS8qIHVwZGF0ZSB0aGUgY2hhaW4gdG8gbWFrZSBzdXJlIHRoYXQgaWYgd2UgbG9hZCBhbnkgbW9yZQorCQkgKiBidWZmZXJzIHdoZW4gd2UgY2FsbCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24sIHRoaW5ncyBzaG91bGQKKwkJICogd29yayBwcm9wZXJseSAqLworCisJCWNoYW4tPmN1cnIgPSBidWYtPm5leHQ7CisJCWJ1Zi0+bmV4dCAgPSBOVUxMOworCisJCWlmIChidWYtPm1hZ2ljICE9IEJVRl9NQUdJQykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJkbWElZDogJXM6IGJ1ZiAlcCBpbmNvcnJlY3QgbWFnaWNcbiIsCisJCQkgICAgICAgY2hhbi0+bnVtYmVyLCBfX0ZVTkNUSU9OX18sIGJ1Zik7CisJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCX0KKworCQlzM2MyNDEwX2RtYV9idWZmZG9uZShjaGFuLCBidWYsIFMzQzI0MTBfUkVTX09LKTsKKworCQkvKiBmcmVlIHJlc291Y2VzICovCisJCXMzYzI0MTBfZG1hX2ZyZWVidWYoYnVmKTsKKwl9IGVsc2UgeworCX0KKworCWlmIChjaGFuLT5uZXh0ICE9IE5VTEwpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzd2l0Y2ggKGNoYW4tPmxvYWRfc3RhdGUpIHsKKwkJY2FzZSBTM0MyNDEwX0RNQUxPQURfMVJVTk5JTkc6CisJCQkvKiBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGZvciB0aGlzIHN0YXRlICovCisJCQlicmVhazsKKworCQljYXNlIFMzQzI0MTBfRE1BTE9BRF9OT05FOgorCQkJLyogY2FuIGxvYWQgYnVmZmVyIGltbWVkaWF0ZWx5ICovCisJCQlicmVhazsKKworCQljYXNlIFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEOgorCQkJaWYgKHMzYzI0MTBfZG1hX3dhaXRmb3Jsb2FkKGNoYW4sIF9fTElORV9fKSA9PSAwKSB7CisJCQkJLyogZmxhZyBlcnJvcj8gKi8KKwkJCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiB0aW1lb3V0IHdhaXRpbmcgZm9yIGxvYWRcbiIsCisJCQkJICAgICAgIGNoYW4tPm51bWJlcik7CisJCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQkJfQorCisJCQlicmVhazsKKworCQljYXNlIFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEXzFSVU5OSU5HOgorCQkJZ290byBub19sb2FkOworCisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiB1bmtub3duIGxvYWRfc3RhdGUgaW4gaXJxLCAlZFxuIiwKKwkJCSAgICAgICBjaGFuLT5udW1iZXIsIGNoYW4tPmxvYWRfc3RhdGUpOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9CisKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlzM2MyNDEwX2RtYV9sb2FkYnVmZmVyKGNoYW4sIGNoYW4tPm5leHQpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfSBlbHNlIHsKKwkJczNjMjQxMF9kbWFfbGFzdHhmZXIoY2hhbik7CisKKwkJLyogc2VlIGlmIHdlIGNhbiBzdG9wIHRoaXMgY2hhbm5lbC4uICovCisJCWlmIChjaGFuLT5sb2FkX3N0YXRlID09IFMzQzI0MTBfRE1BTE9BRF9OT05FKSB7CisJCQlwcl9kZWJ1ZygiZG1hJWQ6IGVuZCBvZiB0cmFuc2Zlciwgc3RvcHBpbmcgY2hhbm5lbCAoJWxkKVxuIiwKKwkJCQkgY2hhbi0+bnVtYmVyLCBqaWZmaWVzKTsKKwkJCXMzYzI0MTBfZG1hX2N0cmwoY2hhbi0+bnVtYmVyLCBTM0MyNDEwX0RNQU9QX1NUT1ApOworCQl9CisJfQorCisgbm9fbG9hZDoKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKworCisvKiBzM2MyNDEwX3JlcXVlc3RfZG1hCisgKgorICogZ2V0IGNvbnRyb2wgb2YgYW4gZG1hIGNoYW5uZWwKKyovCisKK2ludCBzM2MyNDEwX2RtYV9yZXF1ZXN0KHVuc2lnbmVkIGludCBjaGFubmVsLCBzM2MyNDEwX2RtYV9jbGllbnRfdCAqY2xpZW50LAorCQkJdm9pZCAqZGV2KQoreworCXMzYzI0MTBfZG1hX2NoYW5fdCAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVycjsKKworCXByX2RlYnVnKCJkbWElZDogczNjMjQxMF9yZXF1ZXN0X2RtYTogY2xpZW50PSVzLCBkZXY9JXBcbiIsCisJCSBjaGFubmVsLCBjbGllbnQtPm5hbWUsIGRldik7CisKKwljaGVja19jaGFubmVsKGNoYW5uZWwpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJZGJnX3Nob3djaGFuKGNoYW4pOworCisJaWYgKGNoYW4tPmluX3VzZSkgeworCQlpZiAoY2xpZW50ICE9IGNoYW4tPmNsaWVudCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJkbWElZDogYWxyZWFkeSBpbiB1c2VcbiIsIGNoYW5uZWwpOworCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IGNsaWVudCBhbHJlYWR5IGhhcyBjaGFubmVsXG4iLCBjaGFubmVsKTsKKwkJfQorCX0KKworCWNoYW4tPmNsaWVudCA9IGNsaWVudDsKKwljaGFuLT5pbl91c2UgPSAxOworCisJaWYgKCFjaGFuLT5pcnFfY2xhaW1lZCkgeworCQlwcl9kZWJ1ZygiZG1hJWQ6ICVzIDogcmVxdWVzdGluZyBpcnEgJWRcbiIsCisJCQkgY2hhbm5lbCwgX19GVU5DVElPTl9fLCBjaGFuLT5pcnEpOworCisJCWVyciA9IHJlcXVlc3RfaXJxKGNoYW4tPmlycSwgczNjMjQxMF9kbWFfaXJxLCBTQV9JTlRFUlJVUFQsCisJCQkJICBjbGllbnQtPm5hbWUsICh2b2lkICopY2hhbik7CisKKwkJaWYgKGVycikgeworCQkJY2hhbi0+aW5fdXNlID0gMDsKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGdldCBJUlEgJWQgZm9yIERNQSAlZFxuIiwKKwkJCSAgICAgICBjbGllbnQtPm5hbWUsIGNoYW4tPmlycSwgY2hhbi0+bnVtYmVyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQljaGFuLT5pcnFfY2xhaW1lZCA9IDE7CisJCWNoYW4tPmlycV9lbmFibGVkID0gMTsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwkvKiBuZWVkIHRvIHNldHVwICovCisKKwlwcl9kZWJ1ZygiJXM6IGNoYW5uZWwgaW5pdGlhbGlzZWQsICVwXG4iLCBfX0ZVTkNUSU9OX18sIGNoYW4pOworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfcmVxdWVzdCk7CisKKy8qIHMzYzI0MTBfZG1hX2ZyZWUKKyAqCisgKiByZWxlYXNlIHRoZSBnaXZlbiBjaGFubmVsIGJhY2sgdG8gdGhlIHN5c3RlbSwgd2lsbCBzdG9wIGFuZCBmbHVzaAorICogYW55IG91dHN0YW5kaW5nIHRyYW5zZmVycywgYW5kIGVuc3VyZSB0aGUgY2hhbm5lbCBpcyByZWFkeSBmb3IgdGhlCisgKiBuZXh0IGNsYWltYW50LgorICoKKyAqIE5vdGUsIGFsdGhvdWdoIGEgd2FybmluZyBpcyBjdXJyZW50bHkgcHJpbnRlZCBpZiB0aGUgZnJlZWluZyBjbGllbnQKKyAqIGluZm8gaXMgbm90IHRoZSBzYW1lIGFzIHRoZSByZWdpc3RyYW50J3MgY2xpZW50IGluZm8sIHRoZSBmcmVlIGlzIHN0aWxsCisgKiBhbGxvd2VkIHRvIGdvIHRocm91Z2guCisqLworCitpbnQgczNjMjQxMF9kbWFfZnJlZShkbWFjaF90IGNoYW5uZWwsIHMzYzI0MTBfZG1hX2NsaWVudF90ICpjbGllbnQpCit7CisJczNjMjQxMF9kbWFfY2hhbl90ICpjaGFuID0gJnMzYzI0MTBfY2hhbnNbY2hhbm5lbF07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNoZWNrX2NoYW5uZWwoY2hhbm5lbCk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKworCWlmIChjaGFuLT5jbGllbnQgIT0gY2xpZW50KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImRtYSVkOiBwb3NzaWJsZSBmcmVlIGZyb20gZGlmZmVyZW50IGNsaWVudCAoY2hhbm5lbCAlcCwgcGFzc2VkICVwKVxuIiwKKwkJICAgICAgIGNoYW5uZWwsIGNoYW4tPmNsaWVudCwgY2xpZW50KTsKKwl9CisKKwkvKiBzb3J0IG91dCBzdG9wcGluZyBhbmQgZnJlZWluZyB0aGUgY2hhbm5lbCAqLworCisJaWYgKGNoYW4tPnN0YXRlICE9IFMzQzI0MTBfRE1BX0lETEUpIHsKKwkJcHJfZGVidWcoIiVzOiBuZWVkIHRvIHN0b3AgZG1hIGNoYW5uZWwgJXBcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGNoYW4pOworCisJCS8qIHBvc3NpYmx5IGZsdXNoIHRoZSBjaGFubmVsICovCisJCXMzYzI0MTBfZG1hX2N0cmwoY2hhbm5lbCwgUzNDMjQxMF9ETUFPUF9TVE9QKTsKKwl9CisKKwljaGFuLT5jbGllbnQgPSBOVUxMOworCWNoYW4tPmluX3VzZSA9IDA7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChzM2MyNDEwX2RtYV9mcmVlKTsKKworc3RhdGljIGludCBzM2MyNDEwX2RtYV9kb3N0b3AoczNjMjQxMF9kbWFfY2hhbl90ICpjaGFuKQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwcl9kZWJ1ZygiJXM6XG4iLCBfX0ZVTkNUSU9OX18pOworCisJZGJnX3Nob3djaGFuKGNoYW4pOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJczNjMjQxMF9kbWFfY2FsbF9vcChjaGFuLCAgUzNDMjQxMF9ETUFPUF9TVE9QKTsKKworCXRtcCA9IGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9ETUFTS1RSSUcpOworCXRtcCB8PSBTM0MyNDEwX0RNQVNLVFJJR19TVE9QOworCWRtYV93cnJlZyhjaGFuLCBTM0MyNDEwX0RNQV9ETUFTS1RSSUcsIHRtcCk7CisKKyNpZiAwCisJLyogc2hvdWxkIGFsc28gY2xlYXIgaW50ZXJydXB0cywgYWNjb3JkaW5nIHRvIFdpbkNFIEJTUCAqLworCXRtcCA9IGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EQ09OKTsKKwl0bXAgfD0gUzNDMjQxMF9EQ09OX05PUkVMT0FEOworCWRtYV93cnJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EQ09OLCB0bXApOworI2VuZGlmCisKKwljaGFuLT5zdGF0ZSAgICAgID0gUzNDMjQxMF9ETUFfSURMRTsKKwljaGFuLT5sb2FkX3N0YXRlID0gUzNDMjQxMF9ETUFMT0FEX05PTkU7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogczNjMjQxMF9kbWFfZmx1c2gKKyAqCisgKiBzdG9wIHRoZSBjaGFubmVsLCBhbmQgcmVtb3ZlIGFsbCBjdXJyZW50IGFuZCBwZW5kaW5nIHRyYW5zZmVycworKi8KKworc3RhdGljIGludCBzM2MyNDEwX2RtYV9mbHVzaChzM2MyNDEwX2RtYV9jaGFuX3QgKmNoYW4pCit7CisJczNjMjQxMF9kbWFfYnVmX3QgKmJ1ZiwgKm5leHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXByX2RlYnVnKCIlczpcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlpZiAoY2hhbi0+c3RhdGUgIT0gUzNDMjQxMF9ETUFfSURMRSkgeworCQlwcl9kZWJ1ZygiJXM6IHN0b3BwaW5nIGNoYW5uZWwuLi5cbiIsIF9fRlVOQ1RJT05fXyApOworCQlzM2MyNDEwX2RtYV9jdHJsKGNoYW4tPm51bWJlciwgUzNDMjQxMF9ETUFPUF9TVE9QKTsKKwl9CisKKwlidWYgPSBjaGFuLT5jdXJyOworCWlmIChidWYgPT0gTlVMTCkKKwkJYnVmID0gY2hhbi0+bmV4dDsKKworCWNoYW4tPmN1cnIgPSBjaGFuLT5uZXh0ID0gY2hhbi0+ZW5kID0gTlVMTDsKKworCWlmIChidWYgIT0gTlVMTCkgeworCQlmb3IgKCA7IGJ1ZiAhPSBOVUxMOyBidWYgPSBuZXh0KSB7CisJCQluZXh0ID0gYnVmLT5uZXh0OworCisJCQlwcl9kZWJ1ZygiJXM6IGZyZWUgYnVmZmVyICVwLCBuZXh0ICVwXG4iLAorCQkJICAgICAgIF9fRlVOQ1RJT05fXywgYnVmLCBidWYtPm5leHQpOworCisJCQlzM2MyNDEwX2RtYV9idWZmZG9uZShjaGFuLCBidWYsIFMzQzI0MTBfUkVTX0FCT1JUKTsKKwkJCXMzYzI0MTBfZG1hX2ZyZWVidWYoYnVmKTsKKwkJfQorCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisKK2ludAorczNjMjQxMF9kbWFfY3RybChkbWFjaF90IGNoYW5uZWwsIHMzYzI0MTBfY2hhbl9vcF90IG9wKQoreworCXMzYzI0MTBfZG1hX2NoYW5fdCAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOworCisJY2hlY2tfY2hhbm5lbChjaGFubmVsKTsKKworCXN3aXRjaCAob3ApIHsKKwljYXNlIFMzQzI0MTBfRE1BT1BfU1RBUlQ6CisJCXJldHVybiBzM2MyNDEwX2RtYV9zdGFydChjaGFuKTsKKworCWNhc2UgUzNDMjQxMF9ETUFPUF9TVE9QOgorCQlyZXR1cm4gczNjMjQxMF9kbWFfZG9zdG9wKGNoYW4pOworCisJY2FzZSBTM0MyNDEwX0RNQU9QX1BBVVNFOgorCQlyZXR1cm4gLUVOT0VOVDsKKworCWNhc2UgUzNDMjQxMF9ETUFPUF9SRVNVTUU6CisJCXJldHVybiAtRU5PRU5UOworCisJY2FzZSBTM0MyNDEwX0RNQU9QX0ZMVVNIOgorCQlyZXR1cm4gczNjMjQxMF9kbWFfZmx1c2goY2hhbik7CisKKwljYXNlIFMzQzI0MTBfRE1BT1BfVElNRU9VVDoKKwkJcmV0dXJuIDA7CisKKwl9CisKKwlyZXR1cm4gLUVOT0VOVDsgICAgICAvKiB1bmtub3duLCBkb24ndCBib3RoZXIgKi8KK30KKworRVhQT1JUX1NZTUJPTChzM2MyNDEwX2RtYV9jdHJsKTsKKworLyogRE1BIGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggY2hhbm5lbAorICoKKyAqIERJU1JDQyAtPiBzb3VyY2Ugb2YgdGhlIERNQSAoQUhCLEFQQikKKyAqIERJU1JDICAtPiBzb3VyY2UgYWRkcmVzcyBvZiB0aGUgRE1BCisgKiBESURTVEMgLT4gZGVzdGluYXRpb24gb2YgdGhlIERNQSAoQUhCLEFQRCkKKyAqIERJRFNUICAtPiBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIHRoZSBETUEKKyovCisKKy8qIHMzYzI0MTBfZG1hX2NvbmZpZworICoKKyAqIHhmZXJzaXplOiAgICAgc2l6ZSBvZiB1bml0IGluIGJ5dGVzICgxLDIsNCkKKyAqIGRjb246ICAgICAgICAgYmFzZSB2YWx1ZSBvZiB0aGUgRENPTnggcmVnaXN0ZXIKKyovCisKK2ludCBzM2MyNDEwX2RtYV9jb25maWcoZG1hY2hfdCBjaGFubmVsLAorCQkgICAgICAgaW50IHhmZXJ1bml0LAorCQkgICAgICAgaW50IGRjb24pCit7CisJczNjMjQxMF9kbWFfY2hhbl90ICpjaGFuID0gJnMzYzI0MTBfY2hhbnNbY2hhbm5lbF07CisKKwlwcl9kZWJ1ZygiJXM6IGNoYW49JWQsIHhmZXJfdW5pdD0lZCwgZGNvbj0lMDh4XG4iLAorCQkgX19GVU5DVElPTl9fLCBjaGFubmVsLCB4ZmVydW5pdCwgZGNvbik7CisKKwljaGVja19jaGFubmVsKGNoYW5uZWwpOworCisJc3dpdGNoICh4ZmVydW5pdCkgeworCWNhc2UgMToKKwkJZGNvbiB8PSBTM0MyNDEwX0RDT05fQllURTsKKwkJYnJlYWs7CisKKwljYXNlIDI6CisJCWRjb24gfD0gUzNDMjQxMF9EQ09OX0hBTEZXT1JEOworCQlicmVhazsKKworCWNhc2UgNDoKKwkJZGNvbiB8PSBTM0MyNDEwX0RDT05fV09SRDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygiJXM6IGJhZCB0cmFuc2ZlciBzaXplICVkXG4iLCBfX0ZVTkNUSU9OX18sIHhmZXJ1bml0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGNvbiB8PSBTM0MyNDEwX0RDT05fSFdUUklHOworCWRjb24gfD0gUzNDMjQxMF9EQ09OX0lOVFJFUTsKKworCXByX2RlYnVnKCIlczogZGNvbiBub3cgJTA4eFxuIiwgX19GVU5DVElPTl9fLCBkY29uKTsKKworCWNoYW4tPmRjb24gPSBkY29uOworCWNoYW4tPnhmZXJfdW5pdCA9IHhmZXJ1bml0OworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfY29uZmlnKTsKKworaW50IHMzYzI0MTBfZG1hX3NldGZsYWdzKGRtYWNoX3QgY2hhbm5lbCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXMzYzI0MTBfZG1hX2NoYW5fdCAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOworCisJY2hlY2tfY2hhbm5lbChjaGFubmVsKTsKKworCXByX2RlYnVnKCIlczogY2hhbj0lcCwgZmxhZ3M9JTA4eFxuIiwgX19GVU5DVElPTl9fLCBjaGFuLCBmbGFncyk7CisKKwljaGFuLT5mbGFncyA9IGZsYWdzOworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfc2V0ZmxhZ3MpOworCisKKy8qIGRvIHdlIG5lZWQgdG8gcHJvdGVjdCB0aGUgc2V0dGluZ3Mgb2YgdGhlIGZpZWxkcyBmcm9tCisgKiBpcnE/CisqLworCitpbnQgczNjMjQxMF9kbWFfc2V0X29wZm4oZG1hY2hfdCBjaGFubmVsLCBzM2MyNDEwX2RtYV9vcGZuX3QgcnRuKQoreworCXMzYzI0MTBfZG1hX2NoYW5fdCAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOworCisJY2hlY2tfY2hhbm5lbChjaGFubmVsKTsKKworCXByX2RlYnVnKCIlczogY2hhbj0lcCwgb3AgcnRuPSVwXG4iLCBfX0ZVTkNUSU9OX18sIGNoYW4sIHJ0bik7CisKKwljaGFuLT5vcF9mbiA9IHJ0bjsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKHMzYzI0MTBfZG1hX3NldF9vcGZuKTsKKworaW50IHMzYzI0MTBfZG1hX3NldF9idWZmZG9uZV9mbihkbWFjaF90IGNoYW5uZWwsIHMzYzI0MTBfZG1hX2NiZm5fdCBydG4pCit7CisJczNjMjQxMF9kbWFfY2hhbl90ICpjaGFuID0gJnMzYzI0MTBfY2hhbnNbY2hhbm5lbF07CisKKwljaGVja19jaGFubmVsKGNoYW5uZWwpOworCisJcHJfZGVidWcoIiVzOiBjaGFuPSVwLCBjYWxsYmFjayBydG49JXBcbiIsIF9fRlVOQ1RJT05fXywgY2hhbiwgcnRuKTsKKworCWNoYW4tPmNhbGxiYWNrX2ZuID0gcnRuOworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfc2V0X2J1ZmZkb25lX2ZuKTsKKworLyogczNjMjQxMF9kbWFfZGV2Y29uZmlnCisgKgorICogY29uZmlndXJlIHRoZSBkbWEgc291cmNlL2Rlc3RpbmF0aW9uIGhhcmR3YXJlIHR5cGUgYW5kIGFkZHJlc3MKKyAqCisgKiBzb3VyY2U6ICAgIFMzQzI0MTBfRE1BU1JDX0hXOiBzb3VyY2UgaXMgaGFyZHdhcmUKKyAqICAgICAgICAgICAgUzNDMjQxMF9ETUFTUkNfTUVNOiBzb3VyY2UgaXMgbWVtb3J5CisgKgorICogaHdjZmc6ICAgICB0aGUgdmFsdWUgZm9yIHh4eFNUQ24gcmVnaXN0ZXIsCisgKiAgICAgICAgICAgIGJpdCAwOiAwPWluY3JlbWVudCBwb2ludGVyLCAxPWxlYXZlIHBvaW50ZXIKKyAqICAgICAgICAgICAgYml0IDE6IDA9c291Y3JlIGlzIEFIQiwgMT1zb3VjcmUgaXMgQVBCCisgKgorICogZGV2YWRkcjogICBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBzb3VyY2UKKyovCisKK2ludCBzM2MyNDEwX2RtYV9kZXZjb25maWcoaW50IGNoYW5uZWwsCisJCQkgIHMzYzI0MTBfZG1hc3JjX3Qgc291cmNlLAorCQkJICBpbnQgaHdjZmcsCisJCQkgIHVuc2lnbmVkIGxvbmcgZGV2YWRkcikKK3sKKwlzM2MyNDEwX2RtYV9jaGFuX3QgKmNoYW4gPSAmczNjMjQxMF9jaGFuc1tjaGFubmVsXTsKKworCWNoZWNrX2NoYW5uZWwoY2hhbm5lbCk7CisKKwlwcl9kZWJ1ZygiJXM6IHNvdXJjZT0lZCwgaHdjZmc9JTA4eCwgZGV2YWRkcj0lMDhseFxuIiwKKwkJIF9fRlVOQ1RJT05fXywgKGludClzb3VyY2UsIGh3Y2ZnLCBkZXZhZGRyKTsKKworCWNoYW4tPnNvdXJjZSA9IHNvdXJjZTsKKwljaGFuLT5kZXZfYWRkciA9IGRldmFkZHI7CisKKwlzd2l0Y2ggKHNvdXJjZSkgeworCWNhc2UgUzNDMjQxMF9ETUFTUkNfSFc6CisJCS8qIHNvdXJjZSBpcyBoYXJkd2FyZSAqLworCQlwcl9kZWJ1ZygiJXM6IGh3IHNvdXJjZSwgZGV2YWRkcj0lMDhseCwgaHdjZmc9JWRcbiIsCisJCQkgX19GVU5DVElPTl9fLCBkZXZhZGRyLCBod2NmZyk7CisJCWRtYV93cnJlZyhjaGFuLCBTM0MyNDEwX0RNQV9ESVNSQ0MsIGh3Y2ZnICYgMyk7CisJCWRtYV93cnJlZyhjaGFuLCBTM0MyNDEwX0RNQV9ESVNSQywgIGRldmFkZHIpOworCQlkbWFfd3JyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRElEU1RDLCAoMDw8MSkgfCAoMDw8MCkpOworCisJCWNoYW4tPmFkZHJfcmVnID0gZG1hX3JlZ2FkZHIoY2hhbiwgUzNDMjQxMF9ETUFfRElEU1QpOworCQlyZXR1cm4gMDsKKworCWNhc2UgUzNDMjQxMF9ETUFTUkNfTUVNOgorCQkvKiBzb3VyY2UgaXMgbWVtb3J5ICovCisJCXByX2RlYnVnKCAiJXM6IG1lbSBzb3VyY2UsIGRldmFkZHI9JTA4bHgsIGh3Y2ZnPSVkXG4iLAorCQkJICBfX0ZVTkNUSU9OX18sIGRldmFkZHIsIGh3Y2ZnKTsKKwkJZG1hX3dycmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RJU1JDQywgKDA8PDEpIHwgKDA8PDApKTsKKwkJZG1hX3dycmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RJRFNULCAgZGV2YWRkcik7CisJCWRtYV93cnJlZyhjaGFuLCBTM0MyNDEwX0RNQV9ESURTVEMsIGh3Y2ZnICYgMyk7CisKKwkJY2hhbi0+YWRkcl9yZWcgPSBkbWFfcmVnYWRkcihjaGFuLCBTM0MyNDEwX0RNQV9ESVNSQyk7CisJCXJldHVybiAwOworCX0KKworCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IGludmFsaWQgc291cmNlIHR5cGUgKCVkKVxuIiwgY2hhbm5lbCwgc291cmNlKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworRVhQT1JUX1NZTUJPTChzM2MyNDEwX2RtYV9kZXZjb25maWcpOworCisvKiBzM2MyNDEwX2RtYV9nZXRwb3NpdGlvbgorICoKKyAqIHJldHVybnMgdGhlIGN1cnJlbnQgdHJhbnNmZXIgcG9pbnRzIGZvciB0aGUgZG1hIHNvdXJjZSBhbmQgZGVzdGluYXRpb24KKyovCisKK2ludCBzM2MyNDEwX2RtYV9nZXRwb3NpdGlvbihkbWFjaF90IGNoYW5uZWwsIGRtYV9hZGRyX3QgKnNyYywgZG1hX2FkZHJfdCAqZHN0KQoreworIAlzM2MyNDEwX2RtYV9jaGFuX3QgKmNoYW4gPSAmczNjMjQxMF9jaGFuc1tjaGFubmVsXTsKKworIAljaGVja19jaGFubmVsKGNoYW5uZWwpOworCisJaWYgKHNyYyAhPSBOVUxMKQorIAkJKnNyYyA9IGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EQ1NSQyk7CisKKyAJaWYgKGRzdCAhPSBOVUxMKQorIAkJKmRzdCA9IGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EQ0RTVCk7CisKKyAJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfZ2V0cG9zaXRpb24pOworCisKKy8qIHN5c3RlbSBkZXZpY2UgY2xhc3MgKi8KKworI2lmZGVmIENPTkZJR19QTQorCitzdGF0aWMgaW50IHMzYzI0MTBfZG1hX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXMzYzI0MTBfZG1hX2NoYW5fdCAqY3AgPSBjb250YWluZXJfb2YoZGV2LCBzM2MyNDEwX2RtYV9jaGFuX3QsIGRldik7CisKKwlwcmludGsoS0VSTl9ERUJVRyAic3VzcGVuZGluZyBkbWEgY2hhbm5lbCAlZFxuIiwgY3AtPm51bWJlcik7CisKKwlpZiAoZG1hX3JkcmVnKGNwLCBTM0MyNDEwX0RNQV9ETUFTS1RSSUcpICYgUzNDMjQxMF9ETUFTS1RSSUdfT04pIHsKKwkJLyogdGhlIGRtYSBjaGFubmVsIGlzIHN0aWxsIHdvcmtpbmcsIHdoaWNoIGlzIHByb2JhYmx5CisJCSAqIGEgYmFkIHRoaW5nIHRvIGRvIG92ZXIgc3VzcGVuZC9yZXN1bWUuIFdlIHN0b3AgdGhlCisJCSAqIGNoYW5uZWwgYW5kIGFzc3VtZSB0aGF0IHRoZSBjbGllbnQgaXMgZWl0aGVyIGdvaW5nIHRvCisJCSAqIHJldHJ5IGFmdGVyIHJlc3VtZSwgb3IgdGhhdCBpdCBpcyBicm9rZW4uCisJCSAqLworCisJCXByaW50ayhLRVJOX0lORk8gImRtYTogc3RvcHBpbmcgY2hhbm5lbCAlZCBkdWUgdG8gc3VzcGVuZFxuIiwKKwkJICAgICAgIGNwLT5udW1iZXIpOworCisJCXMzYzI0MTBfZG1hX2Rvc3RvcChjcCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjQxMF9kbWFfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIHMzYzI0MTBfZG1hX3N1c3BlbmQgTlVMTAorI2RlZmluZSBzM2MyNDEwX2RtYV9yZXN1bWUgIE5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgZG1hX3N5c2NsYXNzID0geworCXNldF9rc2V0X25hbWUoInMzYzI0eHgtZG1hIiksCisJLnN1c3BlbmQJPSBzM2MyNDEwX2RtYV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gczNjMjQxMF9kbWFfcmVzdW1lLAorfTsKKworLyoga21lbSBjYWNoZSBpbXBsZW1lbnRhdGlvbiAqLworCitzdGF0aWMgdm9pZCBzM2MyNDEwX2RtYV9jYWNoZV9jdG9yKHZvaWQgKnAsIGttZW1fY2FjaGVfdCAqYywgdW5zaWduZWQgbG9uZyBmKQoreworCW1lbXNldChwLCAwLCBzaXplb2YoczNjMjQxMF9kbWFfYnVmX3QpKTsKK30KKworCisvKiBpbml0aWFsaXNhdGlvbiBjb2RlICovCisKK3N0YXRpYyBpbnQgX19pbml0IHMzYzI0MTBfaW5pdF9kbWEodm9pZCkKK3sKKwlzM2MyNDEwX2RtYV9jaGFuX3QgKmNwOworCWludCBjaGFubmVsOworCWludCByZXQ7CisKKwlwcmludGsoIlMzQzI0MTAgRE1BIERyaXZlciwgKGMpIDIwMDMtMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3NcbiIpOworCisJZG1hX2Jhc2UgPSBpb3JlbWFwKFMzQzI0MTBfUEFfRE1BLCAweDIwMCk7CisJaWYgKGRtYV9iYXNlID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJkbWEgZmFpbGVkIHRvIHJlbWFwIHJlZ2lzdGVyIGJsb2NrXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZkbWFfc3lzY2xhc3MpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImRtYSBzeXNjbGFzcyByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJZG1hX2ttZW0gPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZG1hX2Rlc2MiLCBzaXplb2YoczNjMjQxMF9kbWFfYnVmX3QpLCAwLAorCQkJCSAgICAgU0xBQl9IV0NBQ0hFX0FMSUdOLAorCQkJCSAgICAgczNjMjQxMF9kbWFfY2FjaGVfY3RvciwgTlVMTCk7CisKKwlpZiAoZG1hX2ttZW0gPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImRtYSBmYWlsZWQgdG8gbWFrZSBrbWVtIGNhY2hlXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCA8IFMzQzI0MTBfRE1BX0NIQU5ORUxTOyBjaGFubmVsKyspIHsKKwkJY3AgPSAmczNjMjQxMF9jaGFuc1tjaGFubmVsXTsKKworCQltZW1zZXQoY3AsIDAsIHNpemVvZihzM2MyNDEwX2RtYV9jaGFuX3QpKTsKKworCQkvKiBkbWEgY2hhbm5lbCBpcnFzIGFyZSBpbiBvcmRlci4uICovCisJCWNwLT5udW1iZXIgPSBjaGFubmVsOworCQljcC0+aXJxICAgID0gY2hhbm5lbCArIElSUV9ETUEwOworCQljcC0+cmVncyAgID0gZG1hX2Jhc2UgKyAoY2hhbm5lbCoweDQwKTsKKworCQkvKiBwb2ludCBjdXJyZW50IHN0YXRzIHNvbWV3aGVyZSAqLworCQljcC0+c3RhdHMgID0gJmNwLT5zdGF0c19zdG9yZTsKKwkJY3AtPnN0YXRzX3N0b3JlLnRpbWVvdXRfc2hvcnRlc3QgPSBMT05HX01BWDsKKworCQkvKiBiYXNpYyBjaGFubmVsIGNvbmZpZ3VyYXRpb24gKi8KKworCQljcC0+bG9hZF90aW1lb3V0ID0gMTw8MTg7CisKKwkJLyogcmVnaXN0ZXIgc3lzdGVtIGRldmljZSAqLworCisJCWNwLT5kZXYuY2xzID0gJmRtYV9zeXNjbGFzczsKKwkJY3AtPmRldi5pZCAgPSBjaGFubmVsOworCQlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoJmNwLT5kZXYpOworCisJCXByaW50aygiRE1BIGNoYW5uZWwgJWQgYXQgJXAsIGlycSAlZFxuIiwKKwkJICAgICAgIGNwLT5udW1iZXIsIGNwLT5yZWdzLCBjcC0+aXJxKTsKKwl9CisKKwlyZXR1cm4gMDsKKworIGVycjoKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koZG1hX2ttZW0pOworCWlvdW5tYXAoZG1hX2Jhc2UpOworCWRtYV9iYXNlID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitfX2luaXRjYWxsKHMzYzI0MTBfaW5pdF9kbWEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRmMTc3NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9ncGlvLmMKQEAgLTAsMCArMSwyMTMgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9ncGlvLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNDEwIEdQSU8gc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiBDaGFuZ2Vsb2cKKyAqCTEzLVNlcC0yMDA0ICBCSkQgIEltcGxlbWVudGVkIGNoYW5nZSBvZiBNSVNDQ1IKKyAqCTE0LVNlcC0yMDA0ICBCSkQgIEFkZGVkIGdldHBpbiBjYWxsCisgKgkxNC1TZXAtMjAwNCAgQkpEICBGaXhlZCBidWcgaW4gc2V0cGluKCkgY2FsbAorICoJMzAtU2VwLTIwMDQgIEJKRCAgRml4ZWQgY2ZncGluKCkgbWFzayBidWcKKyAqCTAxLU9jdC0yMDA0ICBCSkQgIEFkZGVkIGdldGNmZygpIHRvIGdldCBwaW4gY29uZmlndXJhdGlvbgorICoJMDEtT2N0LTIwMDQgIEJKRCAgRml4ZWQgbWFzayBidWcgaW4gcHVsbHVwKCkgY2FsbAorICoJMDEtT2N0LTIwMDQgIEJKRCAgQWRkZWQgZ2V0aXJxKCkgdG8gdHVybiBwaW4gaW50byBpcnFubworICoJMDQtT2N0LTIwMDQgIEJKRCAgQWRkZWQgaXJxIGZpbHRlciBjb250cm9scyBmb3IgR1BJTworICoJMDUtTm92LTIwMDQgIEJKRCAgRVhQT1JUX1NZTUJPTCgpIGFkZGVkIGZvciBhbGwgY29kZQorICoJMTMtTWFyLTIwMDUgIEJKRCAgVXBkYXRlcyBmb3IgX19pb21lbQorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorCit2b2lkIHMzYzI0MTBfZ3Bpb19jZmdwaW4odW5zaWduZWQgaW50IHBpbiwgdW5zaWduZWQgaW50IGZ1bmN0aW9uKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IFMzQzI0MTBfR1BJT19CQVNFKHBpbik7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCXVuc2lnbmVkIGxvbmcgY29uOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAocGluIDwgUzNDMjQxMF9HUElPX0JBTktCKSB7CisJCW1hc2sgPSAxIDw8IFMzQzI0MTBfR1BJT19PRkZTRVQocGluKTsKKwl9IGVsc2UgeworCQltYXNrID0gMyA8PCBTM0MyNDEwX0dQSU9fT0ZGU0VUKHBpbikqMjsKKwl9CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwljb24gID0gX19yYXdfcmVhZGwoYmFzZSArIDB4MDApOworCWNvbiAmPSB+bWFzazsKKwljb24gfD0gZnVuY3Rpb247CisKKwlfX3Jhd193cml0ZWwoY29uLCBiYXNlICsgMHgwMCk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK0VYUE9SVF9TWU1CT0woczNjMjQxMF9ncGlvX2NmZ3Bpbik7CisKK3Vuc2lnbmVkIGludCBzM2MyNDEwX2dwaW9fZ2V0Y2ZnKHVuc2lnbmVkIGludCBwaW4pCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gUzNDMjQxMF9HUElPX0JBU0UocGluKTsKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwlpZiAocGluIDwgUzNDMjQxMF9HUElPX0JBTktCKSB7CisJCW1hc2sgPSAxIDw8IFMzQzI0MTBfR1BJT19PRkZTRVQocGluKTsKKwl9IGVsc2UgeworCQltYXNrID0gMyA8PCBTM0MyNDEwX0dQSU9fT0ZGU0VUKHBpbikqMjsKKwl9CisKKwlyZXR1cm4gX19yYXdfcmVhZGwoYmFzZSkgJiBtYXNrOworfQorCitFWFBPUlRfU1lNQk9MKHMzYzI0MTBfZ3Bpb19nZXRjZmcpOworCit2b2lkIHMzYzI0MTBfZ3Bpb19wdWxsdXAodW5zaWduZWQgaW50IHBpbiwgdW5zaWduZWQgaW50IHRvKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IFMzQzI0MTBfR1BJT19CQVNFKHBpbik7CisJdW5zaWduZWQgbG9uZyBvZmZzID0gUzNDMjQxMF9HUElPX09GRlNFVChwaW4pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyB1cDsKKworCWlmIChwaW4gPCBTM0MyNDEwX0dQSU9fQkFOS0IpCisJCXJldHVybjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXVwID0gX19yYXdfcmVhZGwoYmFzZSArIDB4MDgpOworCXVwICY9IH4oMUwgPDwgb2Zmcyk7CisJdXAgfD0gdG8gPDwgb2ZmczsKKwlfX3Jhd193cml0ZWwodXAsIGJhc2UgKyAweDA4KTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworRVhQT1JUX1NZTUJPTChzM2MyNDEwX2dwaW9fcHVsbHVwKTsKKwordm9pZCBzM2MyNDEwX2dwaW9fc2V0cGluKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCB0bykKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBTM0MyNDEwX0dQSU9fQkFTRShwaW4pOworCXVuc2lnbmVkIGxvbmcgb2ZmcyA9IFMzQzI0MTBfR1BJT19PRkZTRVQocGluKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZGF0OworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJZGF0ID0gX19yYXdfcmVhZGwoYmFzZSArIDB4MDQpOworCWRhdCAmPSB+KDEgPDwgb2Zmcyk7CisJZGF0IHw9IHRvIDw8IG9mZnM7CisJX19yYXdfd3JpdGVsKGRhdCwgYmFzZSArIDB4MDQpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitFWFBPUlRfU1lNQk9MKHMzYzI0MTBfZ3Bpb19zZXRwaW4pOworCit1bnNpZ25lZCBpbnQgczNjMjQxMF9ncGlvX2dldHBpbih1bnNpZ25lZCBpbnQgcGluKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IFMzQzI0MTBfR1BJT19CQVNFKHBpbik7CisJdW5zaWduZWQgbG9uZyBvZmZzID0gUzNDMjQxMF9HUElPX09GRlNFVChwaW4pOworCisJcmV0dXJuIF9fcmF3X3JlYWRsKGJhc2UgKyAweDA0KSAmICgxPDwgb2Zmcyk7Cit9CisKK0VYUE9SVF9TWU1CT0woczNjMjQxMF9ncGlvX2dldHBpbik7CisKK3Vuc2lnbmVkIGludCBzM2MyNDEwX21vZGlmeV9taXNjY3IodW5zaWduZWQgaW50IGNsZWFyLCB1bnNpZ25lZCBpbnQgY2hhbmdlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBtaXNjY3I7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJbWlzY2NyID0gX19yYXdfcmVhZGwoUzNDMjQxMF9NSVNDQ1IpOworCW1pc2NjciAmPSB+Y2xlYXI7CisJbWlzY2NyIF49IGNoYW5nZTsKKwlfX3Jhd193cml0ZWwobWlzY2NyLCBTM0MyNDEwX01JU0NDUik7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIG1pc2NjcjsKK30KKworRVhQT1JUX1NZTUJPTChzM2MyNDEwX21vZGlmeV9taXNjY3IpOworCitpbnQgczNjMjQxMF9ncGlvX2dldGlycSh1bnNpZ25lZCBpbnQgcGluKQoreworCWlmIChwaW4gPCBTM0MyNDEwX0dQRjAgfHwgcGluID4gUzNDMjQxMF9HUEcxNV9FSU5UMjMpCisJCXJldHVybiAtMTsJLyogbm90IHZhbGlkIGludGVycnVwdHMgKi8KKworCWlmIChwaW4gPCBTM0MyNDEwX0dQRzAgJiYgcGluID4gUzNDMjQxMF9HUEY3KQorCQlyZXR1cm4gLTE7CS8qIG5vdCB2YWxpZCBwaW4gKi8KKworCWlmIChwaW4gPCBTM0MyNDEwX0dQRjQpCisJCXJldHVybiAocGluIC0gUzNDMjQxMF9HUEYwKSArIElSUV9FSU5UMDsKKworCWlmIChwaW4gPCBTM0MyNDEwX0dQRzApCisJCXJldHVybiAocGluIC0gUzNDMjQxMF9HUEY0KSArIElSUV9FSU5UNDsKKworCXJldHVybiAocGluIC0gUzNDMjQxMF9HUEcwKSArIElSUV9FSU5UODsKK30KKworRVhQT1JUX1NZTUJPTChzM2MyNDEwX2dwaW9fZ2V0aXJxKTsKKworaW50IHMzYzI0MTBfZ3Bpb19pcnFmaWx0ZXIodW5zaWduZWQgaW50IHBpbiwgdW5zaWduZWQgaW50IG9uLAorCQkJICAgdW5zaWduZWQgaW50IGNvbmZpZykKK3sKKwl2b2lkIF9faW9tZW0gKnJlZyA9IFMzQzI0MTBfRUlORkxUMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJaWYgKHBpbiA8IFMzQzI0MTBfR1BHOCB8fCBwaW4gPiBTM0MyNDEwX0dQRzE1KQorCQlyZXR1cm4gLTE7CisKKwljb25maWcgJj0gMHhmZjsKKworCXBpbiAtPSBTM0MyNDEwX0dQRzhfRUlOVDE2OworCXJlZyArPSBwaW4gJiB+MzsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qIHVwZGF0ZSBmaWx0ZXIgd2lkdGggYW5kIGNsb2NrIHNvdXJjZSAqLworCisJdmFsID0gX19yYXdfcmVhZGwocmVnKTsKKwl2YWwgJj0gfigweGZmIDw8ICgocGluICYgMykgKiA4KSk7CisJdmFsIHw9IGNvbmZpZyA8PCAoKHBpbiAmIDMpICogOCk7CisJX19yYXdfd3JpdGVsKHZhbCwgcmVnKTsKKworCS8qIHVwZGF0ZSBmaWx0ZXIgZW5hYmxlICovCisKKwl2YWwgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0VYVElOVDIpOworCXZhbCAmPSB+KDEgPDwgKChwaW4gKiA0KSArIDMpKTsKKwl2YWwgfD0gb24gPDwgKChwaW4gKiA0KSArIDMpOworCV9fcmF3X3dyaXRlbCh2YWwsIFMzQzI0MTBfRVhUSU5UMik7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChzM2MyNDEwX2dwaW9faXJxZmlsdGVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjY4YzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5jCkBAIC0wLDAgKzEsOTY2IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogQ2hhbmdlbG9nOgorICoKKyAqICAgMjItSnVsLTIwMDQgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgICAgICAgICAgIEZpeGVkIGNvbXBpbGUgd2FybmluZ3MKKyAqCisgKiAgIDIyLUp1bC0yMDA0ICBSb2MgV3UgPGNvb2xvbmV5QHlhaG9vLmNvbS5jbj4KKyAqICAgICAgICAgICAgICAgIEZpeGVkIHMzY19leHRpcnFfdHlwZQorICoKKyAqICAgMjEtSnVsLTIwMDQgIEFybmF1ZCBQYXRhcmQgKFJ0cCkgPGFybmF1ZC5wYXRhcmRAcnRwLW5ldC5vcmc+CisgKiAgICAgICAgICAgICAgICBBZGRpdGlvbiBvZiBBREMvVEMgZGVtdXgKKyAqCisgKiAgIDA0LU9jdC0yMDA0ICBLbGF1cyBGZXRzY2hlciA8ay5mZXRzY2hlckBmZXRyb24uZGU+CisgKgkJICBGaXggZm9yIHNldF9pcnFfdHlwZSgpIG9uIGxvdyBFSU5UIG51bWJlcnMKKyAqCisgKiAgIDA1LU9jdC0yMDA0ICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgkJICBUaWR5IHVwIEtGJ3MgcGF0Y2ggYW5kIHNvcnQgb3V0IG5ldyByZWxlYXNlCisgKgorICogICAwNS1PY3QtMjAwNCAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJCSAgQWRkIHN1cHBvcnQgZm9yIHBvd2VyIG1hbmFnZW1lbnQgY29udHJvbHMKKyAqCisgKiAgIDA0LU5vdi0yMDA0ICBCZW4gRG9va3MKKyAqCQkgIEZpeCBzdGFuZGFyZCBJUlEgd2FrZSBmb3IgRUlOVDAuLjQgYW5kIFJUQworICoKKyAqICAgMjItRmViLTIwMDQgIEJlbiBEb29rcworICoJCSAgRml4ZWQgZWRnZS10cmlnZ2VyaW5nIG9uIEFEQyBJUlEKKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisKKyNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlICJwbS5oIgorCisjZGVmaW5lIGlycWRiZih4Li4uKQorI2RlZmluZSBpcnFkYmYyKHguLi4pCisKKyNkZWZpbmUgRVhUSU5UX09GRiAoSVJRX0VJTlQ0IC0gNCkKKworLyogd2FrZXVwIGlycSBjb250cm9sICovCisKKyNpZmRlZiBDT05GSUdfUE0KKworLyogc3RhdGUgZm9yIElSUXMgb3ZlciBzbGVlcCAqLworCisvKiBkZWZhdWx0IGlzIHRvIGFsbG93IGZvciBFSU5UMC4uRUlOVDE1LCBhbmQgSVJRX1JUQyBhcyB3YWtldXAgc291cmNlcworICoKKyAqIHNldCBiaXQgdG8gMSBpbiBhbGxvdyBiaXRmaWVsZCB0byBlbmFibGUgdGhlIHdha2V1cCBzZXR0aW5ncyBvbiBpdAorKi8KKwordW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9pbnRhbGxvdwk9IDFMIDw8IChJUlFfUlRDIC0gSVJRX0VJTlQwKSB8IDB4Zkw7Cit1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2ludG1hc2sJPSAweGZmZmZmZmZmTDsKK3Vuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfZWludGFsbG93CT0gMHgwMDAwZmZmMEw7Cit1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2VpbnRtYXNrCT0gMHhmZmZmZmZmZkw7CisKK3N0YXRpYyBpbnQKK3MzY19pcnFfd2FrZSh1bnNpZ25lZCBpbnQgaXJxbm8sIHVuc2lnbmVkIGludCBzdGF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGlycWJpdCA9IDEgPDwgKGlycW5vIC0gSVJRX0VJTlQwKTsKKworCWlmICghKHMzY19pcnF3YWtlX2ludGFsbG93ICYgaXJxYml0KSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJ3YWtlICVzIGZvciBpcnEgJWRcbiIsCisJICAgICAgIHN0YXRlID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwgaXJxbm8pOworCisJaWYgKCFzdGF0ZSkKKwkJczNjX2lycXdha2VfaW50bWFzayB8PSBpcnFiaXQ7CisJZWxzZQorCQlzM2NfaXJxd2FrZV9pbnRtYXNrICY9IH5pcnFiaXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorczNjX2lycWV4dF93YWtlKHVuc2lnbmVkIGludCBpcnFubywgdW5zaWduZWQgaW50IHN0YXRlKQoreworCXVuc2lnbmVkIGxvbmcgYml0ID0gMUwgPDwgKGlycW5vIC0gRVhUSU5UX09GRik7CisKKwlpZiAoIShzM2NfaXJxd2FrZV9laW50YWxsb3cgJiBiaXQpKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXByaW50ayhLRVJOX0lORk8gIndha2UgJXMgZm9yIGlycSAlZFxuIiwKKwkgICAgICAgc3RhdGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLCBpcnFubyk7CisKKwlpZiAoIXN0YXRlKQorCQlzM2NfaXJxd2FrZV9laW50bWFzayB8PSBiaXQ7CisJZWxzZQorCQlzM2NfaXJxd2FrZV9laW50bWFzayAmPSB+Yml0OworCisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIHMzY19pcnFleHRfd2FrZSBOVUxMCisjZGVmaW5lIHMzY19pcnFfd2FrZSBOVUxMCisjZW5kaWYKKworCitzdGF0aWMgdm9pZAorczNjX2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnFubykKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwlpcnFubyAtPSBJUlFfRUlOVDA7CisKKwltYXNrID0gX19yYXdfcmVhZGwoUzNDMjQxMF9JTlRNU0spOworCW1hc2sgfD0gMVVMIDw8IGlycW5vOworCV9fcmF3X3dyaXRlbChtYXNrLCBTM0MyNDEwX0lOVE1TSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorczNjX2lycV9hY2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXVuc2lnbmVkIGxvbmcgYml0dmFsID0gMVVMIDw8IChpcnFubyAtIElSUV9FSU5UMCk7CisKKwlfX3Jhd193cml0ZWwoYml0dmFsLCBTM0MyNDEwX1NSQ1BORCk7CisJX19yYXdfd3JpdGVsKGJpdHZhbCwgUzNDMjQxMF9JTlRQTkQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3MzY19pcnFfbWFza2Fjayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJdW5zaWduZWQgbG9uZyBiaXR2YWwgPSAxVUwgPDwgKGlycW5vIC0gSVJRX0VJTlQwKTsKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwltYXNrID0gX19yYXdfcmVhZGwoUzNDMjQxMF9JTlRNU0spOworCV9fcmF3X3dyaXRlbChtYXNrfGJpdHZhbCwgUzNDMjQxMF9JTlRNU0spOworCisJX19yYXdfd3JpdGVsKGJpdHZhbCwgUzNDMjQxMF9TUkNQTkQpOworCV9fcmF3X3dyaXRlbChiaXR2YWwsIFMzQzI0MTBfSU5UUE5EKTsKK30KKworCitzdGF0aWMgdm9pZAorczNjX2lycV91bm1hc2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXVuc2lnbmVkIGxvbmcgbWFzazsKKworCWlmIChpcnFubyAhPSBJUlFfVElNRVI0ICYmIGlycW5vICE9IElSUV9FSU5UOHQyMykKKwkJaXJxZGJmMigiczNjX2lycV91bm1hc2sgJWRcbiIsIGlycW5vKTsKKworCWlycW5vIC09IElSUV9FSU5UMDsKKworCW1hc2sgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0lOVE1TSyk7CisJbWFzayAmPSB+KDFVTCA8PCBpcnFubyk7CisJX19yYXdfd3JpdGVsKG1hc2ssIFMzQzI0MTBfSU5UTVNLKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIHMzY19pcnFfbGV2ZWxfY2hpcCA9IHsKKwkuYWNrCSAgID0gczNjX2lycV9tYXNrYWNrLAorCS5tYXNrCSAgID0gczNjX2lycV9tYXNrLAorCS51bm1hc2sJICAgPSBzM2NfaXJxX3VubWFzaywKKwkud2FrZQkgICA9IHMzY19pcnFfd2FrZQorfTsKKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIHMzY19pcnFfY2hpcCA9IHsKKwkuYWNrCSAgID0gczNjX2lycV9hY2ssCisJLm1hc2sJICAgPSBzM2NfaXJxX21hc2ssCisJLnVubWFzawkgICA9IHMzY19pcnFfdW5tYXNrLAorCS53YWtlCSAgID0gczNjX2lycV93YWtlCit9OworCisvKiBTM0MyNDEwX0VJTlRNQVNLCisgKiBTM0MyNDEwX0VJTlRQRU5ECisgKi8KKworc3RhdGljIHZvaWQKK3MzY19pcnFleHRfbWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCisJaXJxbm8gLT0gRVhUSU5UX09GRjsKKworCW1hc2sgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0VJTlRNQVNLKTsKKwltYXNrIHw9ICggMVVMIDw8IGlycW5vKTsKKwlfX3Jhd193cml0ZWwobWFzaywgUzNDMjQxMF9FSU5UTUFTSyk7CisKKwlpZiAoaXJxbm8gPD0gKElSUV9FSU5UNyAtIEVYVElOVF9PRkYpKSB7CisJCS8qIGNoZWNrIHRvIHNlZSBpZiBhbGwgbmVlZCBtYXNraW5nICovCisKKwkJaWYgKChtYXNrICYgKDB4ZiA8PCA0KSkgPT0gKDB4ZiA8PCA0KSkgeworCQkJLyogYWxsIG1hc2tlZCwgbWFzayB0aGUgcGFyZW50ICovCisJCQlzM2NfaXJxX21hc2soSVJRX0VJTlQ0dDcpOworCQl9CisJfSBlbHNlIHsKKwkJLyogdG9kbzogdGhlIHNhbWUgY2hlY2sgYXMgYWJvdmUgZm9yIHRoZSByZXN0IG9mIHRoZSBpcnEgcmVncy4uLiovCisKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzM2NfaXJxZXh0X2Fjayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJdW5zaWduZWQgbG9uZyByZXE7CisJdW5zaWduZWQgbG9uZyBiaXQ7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCisJYml0ID0gMVVMIDw8IChpcnFubyAtIEVYVElOVF9PRkYpOworCisKKwltYXNrID0gX19yYXdfcmVhZGwoUzNDMjQxMF9FSU5UTUFTSyk7CisKKwlfX3Jhd193cml0ZWwoYml0LCBTM0MyNDEwX0VJTlRQRU5EKTsKKworCXJlcSA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfRUlOVFBFTkQpOworCXJlcSAmPSB+bWFzazsKKworCS8qIG5vdCBzdXJlIGlmIHdlIHNob3VsZCBiZSBhY2tpbmcgdGhlIHBhcmVudCBpcnEuLi4gKi8KKworCWlmIChpcnFubyA8PSBJUlFfRUlOVDcgKSB7CisJCWlmICgocmVxICYgMHhmMCkgPT0gMCkKKwkJCXMzY19pcnFfYWNrKElSUV9FSU5UNHQ3KTsKKwl9IGVsc2UgeworCQlpZiAoKHJlcSA+PiA4KSA9PSAwKQorCQkJczNjX2lycV9hY2soSVJRX0VJTlQ4dDIzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzM2NfaXJxZXh0X3VubWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCisJaXJxbm8gLT0gRVhUSU5UX09GRjsKKworCW1hc2sgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0VJTlRNQVNLKTsKKwltYXNrICY9IH4oIDFVTCA8PCBpcnFubyk7CisJX19yYXdfd3JpdGVsKG1hc2ssIFMzQzI0MTBfRUlOVE1BU0spOworCisJczNjX2lycV91bm1hc2soKGlycW5vIDw9IChJUlFfRUlOVDcgLSBFWFRJTlRfT0ZGKSkgPyBJUlFfRUlOVDR0NyA6IElSUV9FSU5UOHQyMyk7Cit9CisKK3N0YXRpYyBpbnQKK3MzY19pcnFleHRfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwl2b2lkIF9faW9tZW0gKmV4dGludF9yZWc7CisJdm9pZCBfX2lvbWVtICpncGNvbl9yZWc7CisJdW5zaWduZWQgbG9uZyBncGNvbl9vZmZzZXQsIGV4dGludF9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBuZXd2YWx1ZSA9IDAsIHZhbHVlOworCisJaWYgKChpcnEgPj0gSVJRX0VJTlQwKSAmJiAoaXJxIDw9IElSUV9FSU5UMykpCisJeworCQlncGNvbl9yZWcgPSBTM0MyNDEwX0dQRkNPTjsKKwkJZXh0aW50X3JlZyA9IFMzQzI0MTBfRVhUSU5UMDsKKwkJZ3Bjb25fb2Zmc2V0ID0gKGlycSAtIElSUV9FSU5UMCkgKiAyOworCQlleHRpbnRfb2Zmc2V0ID0gKGlycSAtIElSUV9FSU5UMCkgKiA0OworCX0KKwllbHNlIGlmICgoaXJxID49IElSUV9FSU5UNCkgJiYgKGlycSA8PSBJUlFfRUlOVDcpKQorCXsKKwkJZ3Bjb25fcmVnID0gUzNDMjQxMF9HUEZDT047CisJCWV4dGludF9yZWcgPSBTM0MyNDEwX0VYVElOVDA7CisJCWdwY29uX29mZnNldCA9IChpcnEgLSAoRVhUSU5UX09GRikpICogMjsKKwkJZXh0aW50X29mZnNldCA9IChpcnEgLSAoRVhUSU5UX09GRikpICogNDsKKwl9CisJZWxzZSBpZiAoKGlycSA+PSBJUlFfRUlOVDgpICYmIChpcnEgPD0gSVJRX0VJTlQxNSkpCisJeworCQlncGNvbl9yZWcgPSBTM0MyNDEwX0dQR0NPTjsKKwkJZXh0aW50X3JlZyA9IFMzQzI0MTBfRVhUSU5UMTsKKwkJZ3Bjb25fb2Zmc2V0ID0gKGlycSAtIElSUV9FSU5UOCkgKiAyOworCQlleHRpbnRfb2Zmc2V0ID0gKGlycSAtIElSUV9FSU5UOCkgKiA0OworCX0KKwllbHNlIGlmICgoaXJxID49IElSUV9FSU5UMTYpICYmIChpcnEgPD0gSVJRX0VJTlQyMykpCisJeworCQlncGNvbl9yZWcgPSBTM0MyNDEwX0dQR0NPTjsKKwkJZXh0aW50X3JlZyA9IFMzQzI0MTBfRVhUSU5UMjsKKwkJZ3Bjb25fb2Zmc2V0ID0gKGlycSAtIElSUV9FSU5UOCkgKiAyOworCQlleHRpbnRfb2Zmc2V0ID0gKGlycSAtIElSUV9FSU5UMTYpICogNDsKKwl9IGVsc2UKKwkJcmV0dXJuIC0xOworCisJLyogU2V0IHRoZSBHUElPIHRvIGV4dGVybmFsIGludGVycnVwdCBtb2RlICovCisJdmFsdWUgPSBfX3Jhd19yZWFkbChncGNvbl9yZWcpOworCXZhbHVlID0gKHZhbHVlICYgfigzIDw8IGdwY29uX29mZnNldCkpIHwgKDB4MDIgPDwgZ3Bjb25fb2Zmc2V0KTsKKwlfX3Jhd193cml0ZWwodmFsdWUsIGdwY29uX3JlZyk7CisKKwkvKiBTZXQgdGhlIGV4dGVybmFsIGludGVycnVwdCB0byBwb2ludGVkIHRyaWdnZXIgdHlwZSAqLworCXN3aXRjaCAodHlwZSkKKwl7CisJCWNhc2UgSVJRVF9OT0VER0U6CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBlZGdlIHNldHRpbmchXG4iKTsKKwkJCWJyZWFrOworCisJCWNhc2UgSVJRVF9SSVNJTkc6CisJCQluZXd2YWx1ZSA9IFMzQzI0MTBfRVhUSU5UX1JJU0VFREdFOworCQkJYnJlYWs7CisKKwkJY2FzZSBJUlFUX0ZBTExJTkc6CisJCQluZXd2YWx1ZSA9IFMzQzI0MTBfRVhUSU5UX0ZBTExFREdFOworCQkJYnJlYWs7CisKKwkJY2FzZSBJUlFUX0JPVEhFREdFOgorCQkJbmV3dmFsdWUgPSBTM0MyNDEwX0VYVElOVF9CT1RIRURHRTsKKwkJCWJyZWFrOworCisJCWNhc2UgSVJRVF9MT1c6CisJCQluZXd2YWx1ZSA9IFMzQzI0MTBfRVhUSU5UX0xPV0xFVjsKKwkJCWJyZWFrOworCisJCWNhc2UgSVJRVF9ISUdIOgorCQkJbmV3dmFsdWUgPSBTM0MyNDEwX0VYVElOVF9ISUxFVjsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FUlIgIk5vIHN1Y2ggaXJxIHR5cGUgJWQiLCB0eXBlKTsKKwkJCXJldHVybiAtMTsKKwl9CisKKwl2YWx1ZSA9IF9fcmF3X3JlYWRsKGV4dGludF9yZWcpOworCXZhbHVlID0gKHZhbHVlICYgfig3IDw8IGV4dGludF9vZmZzZXQpKSB8IChuZXd2YWx1ZSA8PCBleHRpbnRfb2Zmc2V0KTsKKwlfX3Jhd193cml0ZWwodmFsdWUsIGV4dGludF9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBzM2NfaXJxZXh0X2NoaXAgPSB7CisJLm1hc2sJICAgID0gczNjX2lycWV4dF9tYXNrLAorCS51bm1hc2sJICAgID0gczNjX2lycWV4dF91bm1hc2ssCisJLmFjawkgICAgPSBzM2NfaXJxZXh0X2FjaywKKwkudHlwZQkgICAgPSBzM2NfaXJxZXh0X3R5cGUsCisJLndha2UJICAgID0gczNjX2lycWV4dF93YWtlCit9OworCitzdGF0aWMgc3RydWN0IGlycWNoaXAgczNjX2lycV9laW50MHQ0ID0geworCS5hY2sJICAgPSBzM2NfaXJxX2FjaywKKwkubWFzawkgICA9IHMzY19pcnFfbWFzaywKKwkudW5tYXNrCSAgID0gczNjX2lycV91bm1hc2ssCisJLndha2UJICAgPSBzM2NfaXJxX3dha2UsCisJLnR5cGUJICAgPSBzM2NfaXJxZXh0X3R5cGUsCit9OworCisvKiBtYXNrIHZhbHVlcyBmb3IgdGhlIHBhcmVudCByZWdpc3RlcnMgZm9yIGVhY2ggb2YgdGhlIGludGVycnVwdCB0eXBlcyAqLworCisjZGVmaW5lIElOVE1TS19VQVJUMAkgKDFVTCA8PCAoSVJRX1VBUlQwIC0gSVJRX0VJTlQwKSkKKyNkZWZpbmUgSU5UTVNLX1VBUlQxCSAoMVVMIDw8IChJUlFfVUFSVDEgLSBJUlFfRUlOVDApKQorI2RlZmluZSBJTlRNU0tfVUFSVDIJICgxVUwgPDwgKElSUV9VQVJUMiAtIElSUV9FSU5UMCkpCisjZGVmaW5lIElOVE1TS19BRENQQVJFTlQgKDFVTCA8PCAoSVJRX0FEQ1BBUkVOVCAtIElSUV9FSU5UMCkpCisjZGVmaW5lIElOVE1TS19MQ0QJICgxVUwgPDwgKElSUV9MQ0QgLSBJUlFfRUlOVDApKQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3MzY19pcnFzdWJfbWFzayh1bnNpZ25lZCBpbnQgaXJxbm8sIHVuc2lnbmVkIGludCBwYXJlbnRiaXQsCisJCWludCBzdWJjaGVjaykKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisJdW5zaWduZWQgbG9uZyBzdWJtYXNrOworCisJc3VibWFzayA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfSU5UU1VCTVNLKTsKKwltYXNrID0gX19yYXdfcmVhZGwoUzNDMjQxMF9JTlRNU0spOworCisJc3VibWFzayB8PSAoMVVMIDw8IChpcnFubyAtIElSUV9TM0NVQVJUX1JYMCkpOworCisJLyogY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gbWFzayB0aGUgcGFyZW50IElSUSAqLworCisJaWYgKChzdWJtYXNrICAmIHN1YmNoZWNrKSA9PSBzdWJjaGVjaykgeworCQlfX3Jhd193cml0ZWwobWFzayB8IHBhcmVudGJpdCwgUzNDMjQxMF9JTlRNU0spOworCX0KKworCS8qIHdyaXRlIGJhY2sgbWFza3MgKi8KKwlfX3Jhd193cml0ZWwoc3VibWFzaywgUzNDMjQxMF9JTlRTVUJNU0spOworCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorczNjX2lycXN1Yl91bm1hc2sodW5zaWduZWQgaW50IGlycW5vLCB1bnNpZ25lZCBpbnQgcGFyZW50Yml0KQoreworCXVuc2lnbmVkIGxvbmcgbWFzazsKKwl1bnNpZ25lZCBsb25nIHN1Ym1hc2s7CisKKwlzdWJtYXNrID0gX19yYXdfcmVhZGwoUzNDMjQxMF9JTlRTVUJNU0spOworCW1hc2sgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0lOVE1TSyk7CisKKwlzdWJtYXNrICY9IH4oMVVMIDw8IChpcnFubyAtIElSUV9TM0NVQVJUX1JYMCkpOworCW1hc2sgJj0gfnBhcmVudGJpdDsKKworCS8qIHdyaXRlIGJhY2sgbWFza3MgKi8KKwlfX3Jhd193cml0ZWwoc3VibWFzaywgUzNDMjQxMF9JTlRTVUJNU0spOworCV9fcmF3X3dyaXRlbChtYXNrLCBTM0MyNDEwX0lOVE1TSyk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkCitzM2NfaXJxc3ViX21hc2thY2sodW5zaWduZWQgaW50IGlycW5vLCB1bnNpZ25lZCBpbnQgcGFyZW50bWFzaywgdW5zaWduZWQgaW50IGdyb3VwKQoreworCXVuc2lnbmVkIGludCBiaXQgPSAxVUwgPDwgKGlycW5vIC0gSVJRX1MzQ1VBUlRfUlgwKTsKKworCXMzY19pcnFzdWJfbWFzayhpcnFubywgcGFyZW50bWFzaywgZ3JvdXApOworCisJX19yYXdfd3JpdGVsKGJpdCwgUzNDMjQxMF9TVUJTUkNQTkQpOworCisJLyogb25seSBhY2sgcGFyZW50IGlmIHdlJ3ZlIGdvdCBhbGwgdGhlIGlycXMgKHNlZW1zIHdlIG11c3QKKwkgKiBhY2ssIGFsbCBhbmQgaG9wZSB0aGF0IHRoZSBpcnEgc3lzdGVtIHJldHJpZ2dlcnMgb2sgd2hlbgorCSAqIHRoZSBpbnRlcnJ1cHQgZ29lcyBvZmYgYWdhaW4pCisJICovCisKKwlpZiAoMSkgeworCQlfX3Jhd193cml0ZWwocGFyZW50bWFzaywgUzNDMjQxMF9TUkNQTkQpOworCQlfX3Jhd193cml0ZWwocGFyZW50bWFzaywgUzNDMjQxMF9JTlRQTkQpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkCitzM2NfaXJxc3ViX2Fjayh1bnNpZ25lZCBpbnQgaXJxbm8sIHVuc2lnbmVkIGludCBwYXJlbnRtYXNrLCB1bnNpZ25lZCBpbnQgZ3JvdXApCit7CisJdW5zaWduZWQgaW50IGJpdCA9IDFVTCA8PCAoaXJxbm8gLSBJUlFfUzNDVUFSVF9SWDApOworCisJX19yYXdfd3JpdGVsKGJpdCwgUzNDMjQxMF9TVUJTUkNQTkQpOworCisJLyogb25seSBhY2sgcGFyZW50IGlmIHdlJ3ZlIGdvdCBhbGwgdGhlIGlycXMgKHNlZW1zIHdlIG11c3QKKwkgKiBhY2ssIGFsbCBhbmQgaG9wZSB0aGF0IHRoZSBpcnEgc3lzdGVtIHJldHJpZ2dlcnMgb2sgd2hlbgorCSAqIHRoZSBpbnRlcnJ1cHQgZ29lcyBvZmYgYWdhaW4pCisJICovCisKKwlpZiAoMSkgeworCQlfX3Jhd193cml0ZWwocGFyZW50bWFzaywgUzNDMjQxMF9TUkNQTkQpOworCQlfX3Jhd193cml0ZWwocGFyZW50bWFzaywgUzNDMjQxMF9JTlRQTkQpOworCX0KK30KKworLyogVUFSVDAgKi8KKworc3RhdGljIHZvaWQKK3MzY19pcnFfdWFydDBfbWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl9tYXNrKGlycW5vLCBJTlRNU0tfVUFSVDAsIDcpOworfQorCitzdGF0aWMgdm9pZAorczNjX2lycV91YXJ0MF91bm1hc2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXMzY19pcnFzdWJfdW5tYXNrKGlycW5vLCBJTlRNU0tfVUFSVDApOworfQorCitzdGF0aWMgdm9pZAorczNjX2lycV91YXJ0MF9hY2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXMzY19pcnFzdWJfbWFza2FjayhpcnFubywgSU5UTVNLX1VBUlQwLCA3KTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIHMzY19pcnFfdWFydDAgPSB7CisJLm1hc2sJICAgID0gczNjX2lycV91YXJ0MF9tYXNrLAorCS51bm1hc2sJICAgID0gczNjX2lycV91YXJ0MF91bm1hc2ssCisJLmFjawkgICAgPSBzM2NfaXJxX3VhcnQwX2FjaywKK307CisKKy8qIFVBUlQxICovCisKK3N0YXRpYyB2b2lkCitzM2NfaXJxX3VhcnQxX21hc2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXMzY19pcnFzdWJfbWFzayhpcnFubywgSU5UTVNLX1VBUlQxLCA3IDw8IDMpOworfQorCitzdGF0aWMgdm9pZAorczNjX2lycV91YXJ0MV91bm1hc2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXMzY19pcnFzdWJfdW5tYXNrKGlycW5vLCBJTlRNU0tfVUFSVDEpOworfQorCitzdGF0aWMgdm9pZAorczNjX2lycV91YXJ0MV9hY2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXMzY19pcnFzdWJfbWFza2FjayhpcnFubywgSU5UTVNLX1VBUlQxLCA3IDw8IDMpOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgczNjX2lycV91YXJ0MSA9IHsKKwkubWFzawkgICAgPSBzM2NfaXJxX3VhcnQxX21hc2ssCisJLnVubWFzawkgICAgPSBzM2NfaXJxX3VhcnQxX3VubWFzaywKKwkuYWNrCSAgICA9IHMzY19pcnFfdWFydDFfYWNrLAorfTsKKworLyogVUFSVDIgKi8KKworc3RhdGljIHZvaWQKK3MzY19pcnFfdWFydDJfbWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl9tYXNrKGlycW5vLCBJTlRNU0tfVUFSVDIsIDcgPDwgNik7Cit9CisKK3N0YXRpYyB2b2lkCitzM2NfaXJxX3VhcnQyX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl91bm1hc2soaXJxbm8sIElOVE1TS19VQVJUMik7Cit9CisKK3N0YXRpYyB2b2lkCitzM2NfaXJxX3VhcnQyX2Fjayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl9tYXNrYWNrKGlycW5vLCBJTlRNU0tfVUFSVDIsIDcgPDwgNik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBzM2NfaXJxX3VhcnQyID0geworCS5tYXNrCSAgICA9IHMzY19pcnFfdWFydDJfbWFzaywKKwkudW5tYXNrCSAgICA9IHMzY19pcnFfdWFydDJfdW5tYXNrLAorCS5hY2sJICAgID0gczNjX2lycV91YXJ0Ml9hY2ssCit9OworCisvKiBBREMgYW5kIFRvdWNoc2NyZWVuICovCisKK3N0YXRpYyB2b2lkCitzM2NfaXJxX2FkY19tYXNrKHVuc2lnbmVkIGludCBpcnFubykKK3sKKwlzM2NfaXJxc3ViX21hc2soaXJxbm8sIElOVE1TS19BRENQQVJFTlQsIDMgPDwgOSk7Cit9CisKK3N0YXRpYyB2b2lkCitzM2NfaXJxX2FkY191bm1hc2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXMzY19pcnFzdWJfdW5tYXNrKGlycW5vLCBJTlRNU0tfQURDUEFSRU5UKTsKK30KKworc3RhdGljIHZvaWQKK3MzY19pcnFfYWRjX2Fjayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl9hY2soaXJxbm8sIElOVE1TS19BRENQQVJFTlQsIDMgPDwgOSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBzM2NfaXJxX2FkYyA9IHsKKwkubWFzawkgICAgPSBzM2NfaXJxX2FkY19tYXNrLAorCS51bm1hc2sJICAgID0gczNjX2lycV9hZGNfdW5tYXNrLAorCS5hY2sJICAgID0gczNjX2lycV9hZGNfYWNrLAorfTsKKworLyogaXJxIGRlbXV4IGZvciBhZGMgKi8KK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfYWRjKHVuc2lnbmVkIGludCBpcnEsCisJCQkgICAgICBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywKKwkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBzdWJzcmMsIHN1Ym1zazsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gOTsKKwlzdHJ1Y3QgaXJxZGVzYyAqbXlkZXNjOworCisJLyogcmVhZCB0aGUgY3VycmVudCBwZW5kaW5nIGludGVycnVwdHMsIGFuZCB0aGUgbWFzaworCSAqIGZvciB3aGF0IGl0IGlzIGF2YWlsYWJsZSAqLworCisJc3Vic3JjID0gX19yYXdfcmVhZGwoUzNDMjQxMF9TVUJTUkNQTkQpOworCXN1Ym1zayA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfSU5UU1VCTVNLKTsKKworCXN1YnNyYyAmPSB+c3VibXNrOworCXN1YnNyYyA+Pj0gb2Zmc2V0OworCXN1YnNyYyAmPSAzOworCisJaWYgKHN1YnNyYyAhPSAwKSB7CisJCWlmIChzdWJzcmMgJiAxKSB7CisJCQlteWRlc2MgPSBpcnFfZGVzYyArIElSUV9UQzsKKwkJCW15ZGVzYy0+aGFuZGxlKCBJUlFfVEMsIG15ZGVzYywgcmVncyk7CisJCX0KKwkJaWYgKHN1YnNyYyAmIDIpIHsKKwkJCW15ZGVzYyA9IGlycV9kZXNjICsgSVJRX0FEQzsKKwkJCW15ZGVzYy0+aGFuZGxlKElSUV9BREMsIG15ZGVzYywgcmVncyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdWFydCh1bnNpZ25lZCBpbnQgc3RhcnQsCisJCQkgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHN1YnNyYywgc3VibXNrOworCXVuc2lnbmVkIGludCBvZmZzZXQgPSBzdGFydCAtIElSUV9TM0NVQVJUX1JYMDsKKwlzdHJ1Y3QgaXJxZGVzYyAqZGVzYzsKKworCS8qIHJlYWQgdGhlIGN1cnJlbnQgcGVuZGluZyBpbnRlcnJ1cHRzLCBhbmQgdGhlIG1hc2sKKwkgKiBmb3Igd2hhdCBpdCBpcyBhdmFpbGFibGUgKi8KKworCXN1YnNyYyA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfU1VCU1JDUE5EKTsKKwlzdWJtc2sgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0lOVFNVQk1TSyk7CisKKwlpcnFkYmYyKCJzM2NfaXJxX2RlbXV4X3VhcnQ6IHN0YXJ0PSVkICglZCksIHN1YnNyYz0weCUwOHgsMHglMDh4XG4iLAorCQlzdGFydCwgb2Zmc2V0LCBzdWJzcmMsIHN1Ym1zayk7CisKKwlzdWJzcmMgJj0gfnN1Ym1zazsKKwlzdWJzcmMgPj49IG9mZnNldDsKKwlzdWJzcmMgJj0gNzsKKworCWlmIChzdWJzcmMgIT0gMCkgeworCQlkZXNjID0gaXJxX2Rlc2MgKyBzdGFydDsKKworCQlpZiAoc3Vic3JjICYgMSkKKwkJCWRlc2MtPmhhbmRsZShzdGFydCwgZGVzYywgcmVncyk7CisKKwkJZGVzYysrOworCisJCWlmIChzdWJzcmMgJiAyKQorCQkJZGVzYy0+aGFuZGxlKHN0YXJ0KzEsIGRlc2MsIHJlZ3MpOworCisJCWRlc2MrKzsKKworCQlpZiAoc3Vic3JjICYgNCkKKwkJCWRlc2MtPmhhbmRsZShzdGFydCsyLCBkZXNjLCByZWdzKTsKKwl9Cit9CisKKy8qIHVhcnQgZGVtdXggZW50cnkgcG9pbnRzICovCisKK3N0YXRpYyB2b2lkCitzM2NfaXJxX2RlbXV4X3VhcnQwKHVuc2lnbmVkIGludCBpcnEsCisJCSAgICBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywKKwkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWlycSA9IGlycTsKKwlzM2NfaXJxX2RlbXV4X3VhcnQoSVJRX1MzQ1VBUlRfUlgwLCByZWdzKTsKK30KKworc3RhdGljIHZvaWQKK3MzY19pcnFfZGVtdXhfdWFydDEodW5zaWduZWQgaW50IGlycSwKKwkJICAgIHN0cnVjdCBpcnFkZXNjICpkZXNjLAorCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaXJxID0gaXJxOworCXMzY19pcnFfZGVtdXhfdWFydChJUlFfUzNDVUFSVF9SWDEsIHJlZ3MpOworfQorCitzdGF0aWMgdm9pZAorczNjX2lycV9kZW11eF91YXJ0Mih1bnNpZ25lZCBpbnQgaXJxLAorCQkgICAgc3RydWN0IGlycWRlc2MgKmRlc2MsCisJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpcnEgPSBpcnE7CisJczNjX2lycV9kZW11eF91YXJ0KElSUV9TM0NVQVJUX1JYMiwgcmVncyk7Cit9CisKKworLyogczNjMjR4eF9pbml0X2lycQorICoKKyAqIEluaXRpYWxpc2UgUzNDMjQxMCBJUlEgc3lzdGVtCisqLworCit2b2lkIF9faW5pdCBzM2MyNHh4X2luaXRfaXJxKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBwZW5kOworCXVuc2lnbmVkIGxvbmcgbGFzdDsKKwlpbnQgaXJxbm87CisJaW50IGk7CisKKwlpcnFkYmYoInMzYzI0MTBfaW5pdF9pcnE6IGNsZWFyaW5nIGludGVycnVwdCBzdGF0dXMgZmxhZ3NcbiIpOworCisJLyogZmlyc3QsIGNsZWFyIGFsbCBpbnRlcnJ1cHRzIHBlbmRpbmcuLi4gKi8KKworCWxhc3QgPSAwOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJcGVuZCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfRUlOVFBFTkQpOworCisJCWlmIChwZW5kID09IDAgfHwgcGVuZCA9PSBsYXN0KQorCQkJYnJlYWs7CisKKwkJX19yYXdfd3JpdGVsKHBlbmQsIFMzQzI0MTBfRUlOVFBFTkQpOworCQlwcmludGsoImlycTogY2xlYXJpbmcgcGVuZGluZyBleHQgc3RhdHVzICUwOHhcbiIsIChpbnQpcGVuZCk7CisJCWxhc3QgPSBwZW5kOworCX0KKworCWxhc3QgPSAwOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJcGVuZCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfSU5UUE5EKTsKKworCQlpZiAocGVuZCA9PSAwIHx8IHBlbmQgPT0gbGFzdCkKKwkJCWJyZWFrOworCisJCV9fcmF3X3dyaXRlbChwZW5kLCBTM0MyNDEwX1NSQ1BORCk7CisJCV9fcmF3X3dyaXRlbChwZW5kLCBTM0MyNDEwX0lOVFBORCk7CisJCXByaW50aygiaXJxOiBjbGVhcmluZyBwZW5kaW5nIHN0YXR1cyAlMDh4XG4iLCAoaW50KXBlbmQpOworCQlsYXN0ID0gcGVuZDsKKwl9CisKKwlsYXN0ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXBlbmQgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1NVQlNSQ1BORCk7CisKKwkJaWYgKHBlbmQgPT0gMCB8fCBwZW5kID09IGxhc3QpCisJCQlicmVhazsKKworCQlwcmludGsoImlycTogY2xlYXJpbmcgc3VicGVuZGluZyBzdGF0dXMgJTA4eFxuIiwgKGludClwZW5kKTsKKwkJX19yYXdfd3JpdGVsKHBlbmQsIFMzQzI0MTBfU1VCU1JDUE5EKTsKKwkJbGFzdCA9IHBlbmQ7CisJfQorCisJLyogcmVnaXN0ZXIgdGhlIG1haW4gaW50ZXJydXB0cyAqLworCisJaXJxZGJmKCJzM2MyNDEwX2luaXRfaXJxOiByZWdpc3RlcmluZyBzM2MyNDEwIGludGVycnVwdCBoYW5kbGVyc1xuIik7CisKKwlmb3IgKGlycW5vID0gSVJRX0JBVFRfRkxUOyBpcnFubyA8PSBJUlFfQURDUEFSRU5UOyBpcnFubysrKSB7CisJCS8qIHNldCBhbGwgdGhlIHMzYzI0MTAgaW50ZXJuYWwgaXJxcyAqLworCisJCXN3aXRjaCAoaXJxbm8pIHsKKwkJCS8qIGRlYWwgd2l0aCB0aGUgc3BlY2lhbCBJUlFzIChjYXNjYWRlZCkgKi8KKworCQljYXNlIElSUV9VQVJUMDoKKwkJY2FzZSBJUlFfVUFSVDE6CisJCWNhc2UgSVJRX1VBUlQyOgorCQljYXNlIElSUV9MQ0Q6CisJCWNhc2UgSVJRX0FEQ1BBUkVOVDoKKwkJCXNldF9pcnFfY2hpcChpcnFubywgJnMzY19pcnFfbGV2ZWxfY2hpcCk7CisJCQlzZXRfaXJxX2hhbmRsZXIoaXJxbm8sIGRvX2xldmVsX0lSUSk7CisJCQlicmVhazsKKworCQljYXNlIElSUV9SRVNFUlZFRDY6CisJCWNhc2UgSVJRX1JFU0VSVkVEMjQ6CisJCQkvKiBubyBJUlEgaGVyZSAqLworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCS8vaXJxZGJmKCJyZWdpc3RlcmluZyBpcnEgJWQgKHMzYyBpcnEpXG4iLCBpcnFubyk7CisJCQlzZXRfaXJxX2NoaXAoaXJxbm8sICZzM2NfaXJxX2NoaXApOworCQkJc2V0X2lycV9oYW5kbGVyKGlycW5vLCBkb19lZGdlX0lSUSk7CisJCQlzZXRfaXJxX2ZsYWdzKGlycW5vLCBJUlFGX1ZBTElEKTsKKwkJfQorCX0KKworCS8qIHNldHVwIHRoZSBjYXNjYWRlIGlycSBoYW5kbGVycyAqLworCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX1VBUlQwLCBzM2NfaXJxX2RlbXV4X3VhcnQwKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfVUFSVDEsIHMzY19pcnFfZGVtdXhfdWFydDEpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9VQVJUMiwgczNjX2lycV9kZW11eF91YXJ0Mik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0FEQ1BBUkVOVCwgczNjX2lycV9kZW11eF9hZGMpOworCisKKwkvKiBleHRlcm5hbCBpbnRlcnJ1cHRzICovCisKKwlmb3IgKGlycW5vID0gSVJRX0VJTlQwOyBpcnFubyA8PSBJUlFfRUlOVDM7IGlycW5vKyspIHsKKwkJaXJxZGJmKCJyZWdpc3RlcmluZyBpcnEgJWQgKGV4dCBpbnQpXG4iLCBpcnFubyk7CisJCXNldF9pcnFfY2hpcChpcnFubywgJnMzY19pcnFfZWludDB0NCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnFubywgZG9fZWRnZV9JUlEpOworCQlzZXRfaXJxX2ZsYWdzKGlycW5vLCBJUlFGX1ZBTElEKTsKKwl9CisKKwlmb3IgKGlycW5vID0gSVJRX0VJTlQ0OyBpcnFubyA8PSBJUlFfRUlOVDIzOyBpcnFubysrKSB7CisJCWlycWRiZigicmVnaXN0ZXJpbmcgaXJxICVkIChleHRlbmRlZCBzM2MgaXJxKVxuIiwgaXJxbm8pOworCQlzZXRfaXJxX2NoaXAoaXJxbm8sICZzM2NfaXJxZXh0X2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxbm8sIGRvX2VkZ2VfSVJRKTsKKwkJc2V0X2lycV9mbGFncyhpcnFubywgSVJRRl9WQUxJRCk7CisJfQorCisJLyogcmVnaXN0ZXIgdGhlIHVhcnQgaW50ZXJydXB0cyAqLworCisJaXJxZGJmKCJzM2MyNDEwOiByZWdpc3RlcmluZyBleHRlcm5hbCBpbnRlcnJ1cHRzXG4iKTsKKworCWZvciAoaXJxbm8gPSBJUlFfUzNDVUFSVF9SWDA7IGlycW5vIDw9IElSUV9TM0NVQVJUX0VSUjA7IGlycW5vKyspIHsKKwkJaXJxZGJmKCJyZWdpc3RlcmluZyBpcnEgJWQgKHMzYyB1YXJ0MCBpcnEpXG4iLCBpcnFubyk7CisJCXNldF9pcnFfY2hpcChpcnFubywgJnMzY19pcnFfdWFydDApOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxbm8sIGRvX2xldmVsX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxbm8sIElSUUZfVkFMSUQpOworCX0KKworCWZvciAoaXJxbm8gPSBJUlFfUzNDVUFSVF9SWDE7IGlycW5vIDw9IElSUV9TM0NVQVJUX0VSUjE7IGlycW5vKyspIHsKKwkJaXJxZGJmKCJyZWdpc3RlcmluZyBpcnEgJWQgKHMzYyB1YXJ0MSBpcnEpXG4iLCBpcnFubyk7CisJCXNldF9pcnFfY2hpcChpcnFubywgJnMzY19pcnFfdWFydDEpOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxbm8sIGRvX2xldmVsX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxbm8sIElSUUZfVkFMSUQpOworCX0KKworCWZvciAoaXJxbm8gPSBJUlFfUzNDVUFSVF9SWDI7IGlycW5vIDw9IElSUV9TM0NVQVJUX0VSUjI7IGlycW5vKyspIHsKKwkJaXJxZGJmKCJyZWdpc3RlcmluZyBpcnEgJWQgKHMzYyB1YXJ0MiBpcnEpXG4iLCBpcnFubyk7CisJCXNldF9pcnFfY2hpcChpcnFubywgJnMzY19pcnFfdWFydDIpOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxbm8sIGRvX2xldmVsX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxbm8sIElSUUZfVkFMSUQpOworCX0KKworCWZvciAoaXJxbm8gPSBJUlFfVEM7IGlycW5vIDw9IElSUV9BREM7IGlycW5vKyspIHsKKwkJaXJxZGJmKCJyZWdpc3RlcmluZyBpcnEgJWQgKHMzYyBhZGMgaXJxKVxuIiwgaXJxbm8pOworCQlzZXRfaXJxX2NoaXAoaXJxbm8sICZzM2NfaXJxX2FkYyk7CisJCXNldF9pcnFfaGFuZGxlcihpcnFubywgZG9fZWRnZV9JUlEpOworCQlzZXRfaXJxX2ZsYWdzKGlycW5vLCBJUlFGX1ZBTElEKTsKKwl9CisKKwlpcnFkYmYoInMzYzI0MTA6IHJlZ2lzdGVyZWQgaW50ZXJydXB0IGhhbmRsZXJzXG4iKTsKK30KKworLyogczNjMjQ0MCBpcnEgY29kZQorKi8KKworI2lmZGVmIENPTkZJR19DUFVfUzNDMjQ0MAorCisvKiBXRFQvQUM5NyAqLworCitzdGF0aWMgdm9pZCBzM2NfaXJxX2RlbXV4X3dkdGFjOTcodW5zaWduZWQgaW50IGlycSwKKwkJCQkgIHN0cnVjdCBpcnFkZXNjICpkZXNjLAorCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHN1YnNyYywgc3VibXNrOworCXN0cnVjdCBpcnFkZXNjICpteWRlc2M7CisKKwkvKiByZWFkIHRoZSBjdXJyZW50IHBlbmRpbmcgaW50ZXJydXB0cywgYW5kIHRoZSBtYXNrCisJICogZm9yIHdoYXQgaXQgaXMgYXZhaWxhYmxlICovCisKKwlzdWJzcmMgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1NVQlNSQ1BORCk7CisJc3VibXNrID0gX19yYXdfcmVhZGwoUzNDMjQxMF9JTlRTVUJNU0spOworCisJc3Vic3JjICY9IH5zdWJtc2s7CisJc3Vic3JjID4+PSAxMzsKKwlzdWJzcmMgJj0gMzsKKworCWlmIChzdWJzcmMgIT0gMCkgeworCQlpZiAoc3Vic3JjICYgMSkgeworCQkJbXlkZXNjID0gaXJxX2Rlc2MgKyBJUlFfUzNDMjQ0MF9XRFQ7CisJCQlteWRlc2MtPmhhbmRsZSggSVJRX1MzQzI0NDBfV0RULCBteWRlc2MsIHJlZ3MpOworCQl9CisJCWlmIChzdWJzcmMgJiAyKSB7CisJCQlteWRlc2MgPSBpcnFfZGVzYyArIElSUV9TM0MyNDQwX0FDOTc7CisJCQlteWRlc2MtPmhhbmRsZShJUlFfUzNDMjQ0MF9BQzk3LCBteWRlc2MsIHJlZ3MpOworCQl9CisJfQorfQorCisKKyNkZWZpbmUgSU5UTVNLX1dEVAkgKDFVTCA8PCAoSVJRX1dEVCAtIElSUV9FSU5UMCkpCisKK3N0YXRpYyB2b2lkCitzM2NfaXJxX3dkdGFjOTdfbWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl9tYXNrKGlycW5vLCBJTlRNU0tfV0RULCAzPDwxMyk7Cit9CisKK3N0YXRpYyB2b2lkCitzM2NfaXJxX3dkdGFjOTdfdW5tYXNrKHVuc2lnbmVkIGludCBpcnFubykKK3sKKwlzM2NfaXJxc3ViX3VubWFzayhpcnFubywgSU5UTVNLX1dEVCk7Cit9CisKK3N0YXRpYyB2b2lkCitzM2NfaXJxX3dkdGFjOTdfYWNrKHVuc2lnbmVkIGludCBpcnFubykKK3sKKwlzM2NfaXJxc3ViX21hc2thY2soaXJxbm8sIElOVE1TS19XRFQsIDM8PDEzKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIHMzY19pcnFfd2R0YWM5NyA9IHsKKwkubWFzawkgICAgPSBzM2NfaXJxX3dkdGFjOTdfbWFzaywKKwkudW5tYXNrCSAgICA9IHMzY19pcnFfd2R0YWM5N191bm1hc2ssCisJLmFjawkgICAgPSBzM2NfaXJxX3dkdGFjOTdfYWNrLAorfTsKKworLyogY2FtZXJhIGlycSAqLworCitzdGF0aWMgdm9pZCBzM2NfaXJxX2RlbXV4X2NhbSh1bnNpZ25lZCBpbnQgaXJxLAorCQkJICAgICAgc3RydWN0IGlycWRlc2MgKmRlc2MsCisJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgc3Vic3JjLCBzdWJtc2s7CisJc3RydWN0IGlycWRlc2MgKm15ZGVzYzsKKworCS8qIHJlYWQgdGhlIGN1cnJlbnQgcGVuZGluZyBpbnRlcnJ1cHRzLCBhbmQgdGhlIG1hc2sKKwkgKiBmb3Igd2hhdCBpdCBpcyBhdmFpbGFibGUgKi8KKworCXN1YnNyYyA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfU1VCU1JDUE5EKTsKKwlzdWJtc2sgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0lOVFNVQk1TSyk7CisKKwlzdWJzcmMgJj0gfnN1Ym1zazsKKwlzdWJzcmMgPj49IDExOworCXN1YnNyYyAmPSAzOworCisJaWYgKHN1YnNyYyAhPSAwKSB7CisJCWlmIChzdWJzcmMgJiAxKSB7CisJCQlteWRlc2MgPSBpcnFfZGVzYyArIElSUV9TM0MyNDQwX0NBTV9DOworCQkJbXlkZXNjLT5oYW5kbGUoIElSUV9TM0MyNDQwX1dEVCwgbXlkZXNjLCByZWdzKTsKKwkJfQorCQlpZiAoc3Vic3JjICYgMikgeworCQkJbXlkZXNjID0gaXJxX2Rlc2MgKyBJUlFfUzNDMjQ0MF9DQU1fUDsKKwkJCW15ZGVzYy0+aGFuZGxlKElSUV9TM0MyNDQwX0FDOTcsIG15ZGVzYywgcmVncyk7CisJCX0KKwl9Cit9CisKKyNkZWZpbmUgSU5UTVNLX0NBTSAoMVVMIDw8IChJUlFfQ0FNIC0gSVJRX0VJTlQwKSkKKworc3RhdGljIHZvaWQKK3MzY19pcnFfY2FtX21hc2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXMzY19pcnFzdWJfbWFzayhpcnFubywgSU5UTVNLX0NBTSwgMzw8MTEpOworfQorCitzdGF0aWMgdm9pZAorczNjX2lycV9jYW1fdW5tYXNrKHVuc2lnbmVkIGludCBpcnFubykKK3sKKwlzM2NfaXJxc3ViX3VubWFzayhpcnFubywgSU5UTVNLX0NBTSk7Cit9CisKK3N0YXRpYyB2b2lkCitzM2NfaXJxX2NhbV9hY2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXMzY19pcnFzdWJfbWFza2FjayhpcnFubywgSU5UTVNLX0NBTSwgMzw8MTEpOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgczNjX2lycV9jYW0gPSB7CisJLm1hc2sJICAgID0gczNjX2lycV9jYW1fbWFzaywKKwkudW5tYXNrCSAgICA9IHMzY19pcnFfY2FtX3VubWFzaywKKwkuYWNrCSAgICA9IHMzY19pcnFfY2FtX2FjaywKK307CisKK3N0YXRpYyBpbnQgczNjMjQ0MF9pcnFfYWRkKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYpCit7CisJdW5zaWduZWQgaW50IGlycW5vOworCisJcHJpbnRrKCJTM0MyNDQwOiBJUlEgU3VwcG9ydFxuIik7CisKKwlzZXRfaXJxX2NoaXAoSVJRX05GQ09OLCAmczNjX2lycV9sZXZlbF9jaGlwKTsKKwlzZXRfaXJxX2hhbmRsZXIoSVJRX05GQ09OLCBkb19sZXZlbF9JUlEpOworCXNldF9pcnFfZmxhZ3MoSVJRX05GQ09OLCBJUlFGX1ZBTElEKTsKKworCS8qIGFkZCBuZXcgY2hhaW5lZCBoYW5kbGVyIGZvciB3ZHQsIGFjNyAqLworCisJc2V0X2lycV9jaGlwKElSUV9XRFQsICZzM2NfaXJxX2xldmVsX2NoaXApOworCXNldF9pcnFfaGFuZGxlcihJUlFfV0RULCBkb19sZXZlbF9JUlEpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9XRFQsIHMzY19pcnFfZGVtdXhfd2R0YWM5Nyk7CisKKwlmb3IgKGlycW5vID0gSVJRX1MzQzI0NDBfV0RUOyBpcnFubyA8PSBJUlFfUzNDMjQ0MF9BQzk3OyBpcnFubysrKSB7CisJCXNldF9pcnFfY2hpcChpcnFubywgJnMzY19pcnFfd2R0YWM5Nyk7CisJCXNldF9pcnFfaGFuZGxlcihpcnFubywgZG9fbGV2ZWxfSVJRKTsKKwkJc2V0X2lycV9mbGFncyhpcnFubywgSVJRRl9WQUxJRCk7CisJfQorCisJLyogYWRkIGNoYWluZWQgaGFuZGxlciBmb3IgY2FtZXJhICovCisKKwlzZXRfaXJxX2NoaXAoSVJRX0NBTSwgJnMzY19pcnFfbGV2ZWxfY2hpcCk7CisJc2V0X2lycV9oYW5kbGVyKElSUV9DQU0sIGRvX2xldmVsX0lSUSk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0NBTSwgczNjX2lycV9kZW11eF9jYW0pOworCisJZm9yIChpcnFubyA9IElSUV9TM0MyNDQwX0NBTV9DOyBpcnFubyA8PSBJUlFfUzNDMjQ0MF9DQU1fUDsgaXJxbm8rKykgeworCQlzZXRfaXJxX2NoaXAoaXJxbm8sICZzM2NfaXJxX2NhbSk7CisJCXNldF9pcnFfaGFuZGxlcihpcnFubywgZG9fbGV2ZWxfSVJRKTsKKwkJc2V0X2lycV9mbGFncyhpcnFubywgSVJRRl9WQUxJRCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDQwX2lycV9kcml2ZXIgPSB7CisJLmFkZAk9IHMzYzI0NDBfaXJxX2FkZCwKK307CisKK3N0YXRpYyBpbnQgczNjMjR4eF9pcnFfZHJpdmVyKHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDBfc3lzY2xhc3MsICZzM2MyNDQwX2lycV9kcml2ZXIpOworfQorCithcmNoX2luaXRjYWxsKHMzYzI0eHhfaXJxX2RyaXZlcik7CisKKyNlbmRpZiAvKiBDT05GSUdfQ1BVX1MzQzI0NDAgKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYjk3ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKQEAgLTAsMCArMSw0MDkgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICogICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvRUIyNDEwSVRYLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTW9kaWZpY2F0aW9uczoKKyAqICAgICAxNC1TZXAtMjAwNCBCSkQgIFVTQiBwb3dlciBjb250cm9sCisgKiAgICAgMjAtQXVnLTIwMDQgQkpEICBBZGRlZCBzM2MyNDEwX2JvYXJkIHN0cnVjdAorICogICAgIDE4LUF1Zy0yMDA0IEJKRCAgQWRkZWQgcGxhdGZvcm0gZGV2aWNlcyBmcm9tIGRlZmF1bHQgc2V0CisgKiAgICAgMTYtTWF5LTIwMDMgQkpEICBDcmVhdGVkIGluaXRpYWwgdmVyc2lvbgorICogICAgIDE2LUF1Zy0yMDAzIEJKRCAgRml4ZWQgaGVhZGVyIGZpbGVzIGFuZCBjb3B5cmlnaHQsIGFkZGVkIFVSTAorICogICAgIDA1LVNlcC0yMDAzIEJKRCAgTW92ZWQgdG8gdjIuNiBrZXJuZWwKKyAqICAgICAwNi1KYW4tMjAwMyBCSkQgIFVwZGF0ZXMgZm9yIDxhcmNoL21hcC5oPgorICogICAgIDE4LUphbi0yMDAzIEJKRCAgQWRkZWQgc2VyaWFsIHBvcnQgY29uZmlndXJhdGlvbgorICogICAgIDA1LU9jdC0yMDA0IEJKRCAgUG93ZXIgbWFuYWdlbWVudCBjb2RlCisgKiAgICAgMDQtTm92LTIwMDQgQkpEICBVcGRhdGVkIHNlcmlhbCBwb3J0IGNsb2NrcworICogICAgIDA0LUphbi0yMDA1IEJKRCAgTmV3IHVhcnQgaW5pdCBjYWxsCisgKiAgICAgMTAtSmFuLTIwMDUgQkpEICBSZW1vdmVkIGluY2x1ZGUgb2YgczNjMjQxMC5oCisgKiAgICAgMTQtSmFuLTIwMDUgQkpEICBBZGQgc3VwcG9ydCBmb3IgbXVpdGxwbGUgTkFORCBkZXZpY2VzCisgKiAgICAgMDMtTWFyLTIwMDUgQkpEICBFbnN1cmVkIHRoYXQgYmFzdC1jcGxkLmggaXMgaW5jbHVkZWQKKyAqICAgICAxMC1NYXItMjAwNSBMQ1ZSIENoYW5nZWQgUzNDMjQxMF9WQSB0byBTM0MyNFhYX1ZBCisgKiAgICAgMTQtTWFyLTIwMDYgQkpEICBVcGRhdGVkIGZvciBfX2lvbWVtIGNoYW5nZXMKKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2Jhc3QtbWFwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYmFzdC1pcnEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9iYXN0LWNwbGQuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisvLyNpbmNsdWRlIDxhc20vZGVidWctbGwuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtbWVtLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbmFuZC5oPgorCisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmRfZWNjLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiZGV2cy5oIgorI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgInVzYi1zaW10ZWMuaCIKKyNpbmNsdWRlICJwbS5oIgorCisjZGVmaW5lIENPUFlSSUdIVCAiLCAoYykgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcyIKKworLyogbWFjcm9zIGZvciB2aXJ0dWFsIGFkZHJlc3MgbW9kcyBmb3IgdGhlIGlvIHNwYWNlIGVudHJpZXMgKi8KKyNkZWZpbmUgVkFfQzUoaXRlbSkgKCh1bnNpZ25lZCBsb25nKShpdGVtKSArIEJBU1RfVkFNX0NTNSkKKyNkZWZpbmUgVkFfQzQoaXRlbSkgKCh1bnNpZ25lZCBsb25nKShpdGVtKSArIEJBU1RfVkFNX0NTNCkKKyNkZWZpbmUgVkFfQzMoaXRlbSkgKCh1bnNpZ25lZCBsb25nKShpdGVtKSArIEJBU1RfVkFNX0NTMykKKyNkZWZpbmUgVkFfQzIoaXRlbSkgKCh1bnNpZ25lZCBsb25nKShpdGVtKSArIEJBU1RfVkFNX0NTMikKKworLyogbWFjcm9zIHRvIG1vZGlmeSB0aGUgcGh5c2ljYWwgYWRkcmVzc2VzIGZvciBpbyBzcGFjZSAqLworCisjZGVmaW5lIFBBX0NTMihpdGVtKSAoKGl0ZW0pICsgUzNDMjQxMF9DUzIpCisjZGVmaW5lIFBBX0NTMyhpdGVtKSAoKGl0ZW0pICsgUzNDMjQxMF9DUzMpCisjZGVmaW5lIFBBX0NTNChpdGVtKSAoKGl0ZW0pICsgUzNDMjQxMF9DUzQpCisjZGVmaW5lIFBBX0NTNShpdGVtKSAoKGl0ZW0pICsgUzNDMjQxMF9DUzUpCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgYmFzdF9pb2Rlc2NbXSBfX2luaXRkYXRhID0geworICAvKiBJU0EgSU8gYXJlYXMgKi8KKworICB7ICh1MzIpUzNDMjRYWF9WQV9JU0FfQllURSwgUEFfQ1MyKEJBU1RfUEFfSVNBSU8pLCAgIFNaXzE2TSwgTVRfREVWSUNFIH0sCisgIHsgKHUzMilTM0MyNFhYX1ZBX0lTQV9XT1JELCBQQV9DUzMoQkFTVF9QQV9JU0FJTyksICAgU1pfMTZNLCBNVF9ERVZJQ0UgfSwKKworICAvKiB3ZSBjb3VsZCBwb3NzaWJseSBjb21wcmVzcyB0aGUgbmV4dCBzZXQgZG93biBpbnRvIGEgc2V0IG9mIHNtYWxsZXIgdGFibGVzCisgICAqIHBhZ2V0YWJsZXMsIGJ1dCB0aGF0IHdvdWxkIG1lYW4gdXNpbmcgYW4gTDIgc2VjdGlvbiwgYW5kIGl0IHN0aWxsIG1lYW5zCisgICAqIHdlIGNhbm5vdCBhY3R1YWxseSBmZWVkIHRoZSBzYW1lIHJlZ2lzdGVyIHRvIGFuIExEUiBkdWUgdG8gMTZLIHNwYWNpbmcKKyAgICovCisKKyAgLyogYmFzdCBDUExEIGNvbnRyb2wgcmVnaXN0ZXJzLCBhbmQgZXh0ZXJuYWwgaW50ZXJydXB0IGNvbnRyb2xzICovCisgIHsgKHUzMilCQVNUX1ZBX0NUUkwxLCBCQVNUX1BBX0NUUkwxLAkJICAgU1pfMU0sIE1UX0RFVklDRSB9LAorICB7ICh1MzIpQkFTVF9WQV9DVFJMMiwgQkFTVF9QQV9DVFJMMiwJCSAgIFNaXzFNLCBNVF9ERVZJQ0UgfSwKKyAgeyAodTMyKUJBU1RfVkFfQ1RSTDMsIEJBU1RfUEFfQ1RSTDMsCQkgICBTWl8xTSwgTVRfREVWSUNFIH0sCisgIHsgKHUzMilCQVNUX1ZBX0NUUkw0LCBCQVNUX1BBX0NUUkw0LAkJICAgU1pfMU0sIE1UX0RFVklDRSB9LAorCisgIC8qIFBDMTA0IElSUSBtdXggKi8KKyAgeyAodTMyKUJBU1RfVkFfUEMxMDRfSVJRUkVRLCAgQkFTVF9QQV9QQzEwNF9JUlFSRVEsICAgU1pfMU0sIE1UX0RFVklDRSB9LAorICB7ICh1MzIpQkFTVF9WQV9QQzEwNF9JUlFSQVcsICBCQVNUX1BBX1BDMTA0X0lSUVJBVywgICBTWl8xTSwgTVRfREVWSUNFIH0sCisgIHsgKHUzMilCQVNUX1ZBX1BDMTA0X0lSUU1BU0ssIEJBU1RfUEFfUEMxMDRfSVJRTUFTSywgIFNaXzFNLCBNVF9ERVZJQ0UgfSwKKworICAvKiBwZXJpcGhlcmFsIHNwYWNlLi4uIG9uZSBmb3IgZWFjaCBvZiBmYXN0L3Nsb3cvYnl0ZS8xNmJpdCAqLworICAvKiBub3RlLCBpZGUgaXMgb25seSBkZWNvZGVkIGluIHdvcmQgc3BhY2UsIGV2ZW4gdGhvdWdoIHNvbWUgcmVnaXN0ZXJzCisgICAqIGFyZSBvbmx5IDhiaXQgKi8KKworICAvKiBzbG93LCBieXRlICovCisgIHsgVkFfQzIoQkFTVF9WQV9JU0FJTyksICAgUEFfQ1MyKEJBU1RfUEFfSVNBSU8pLCAgICBTWl8xNk0sIE1UX0RFVklDRSB9LAorICB7IFZBX0MyKEJBU1RfVkFfSVNBTUVNKSwgIFBBX0NTMihCQVNUX1BBX0lTQU1FTSksICAgU1pfMTZNLCBNVF9ERVZJQ0UgfSwKKyAgeyBWQV9DMihCQVNUX1ZBX0FTSVhORVQpLCBQQV9DUzMoQkFTVF9QQV9BU0lYTkVUKSwgIFNaXzFNLCAgTVRfREVWSUNFIH0sCisgIHsgVkFfQzIoQkFTVF9WQV9TVVBFUklPKSwgUEFfQ1MyKEJBU1RfUEFfU1VQRVJJTyksICBTWl8xTSwgIE1UX0RFVklDRSB9LAorICB7IFZBX0MyKEJBU1RfVkFfRE05MDAwKSwgIFBBX0NTMihCQVNUX1BBX0RNOTAwMCksICAgU1pfMU0sICBNVF9ERVZJQ0UgfSwKKyAgeyBWQV9DMihCQVNUX1ZBX0lERVBSSSksICBQQV9DUzMoQkFTVF9QQV9JREVQUkkpLCAgIFNaXzFNLCAgTVRfREVWSUNFIH0sCisgIHsgVkFfQzIoQkFTVF9WQV9JREVTRUMpLCAgUEFfQ1MzKEJBU1RfUEFfSURFU0VDKSwgICBTWl8xTSwgIE1UX0RFVklDRSB9LAorICB7IFZBX0MyKEJBU1RfVkFfSURFUFJJQVVYKSwgUEFfQ1MzKEJBU1RfUEFfSURFUFJJQVVYKSwgU1pfMU0sIE1UX0RFVklDRSB9LAorICB7IFZBX0MyKEJBU1RfVkFfSURFU0VDQVVYKSwgUEFfQ1MzKEJBU1RfUEFfSURFU0VDQVVYKSwgU1pfMU0sIE1UX0RFVklDRSB9LAorCisgIC8qIHNsb3csIHdvcmQgKi8KKyAgeyBWQV9DMyhCQVNUX1ZBX0lTQUlPKSwgICBQQV9DUzMoQkFTVF9QQV9JU0FJTyksICAgIFNaXzE2TSwgTVRfREVWSUNFIH0sCisgIHsgVkFfQzMoQkFTVF9WQV9JU0FNRU0pLCAgUEFfQ1MzKEJBU1RfUEFfSVNBTUVNKSwgICBTWl8xNk0sIE1UX0RFVklDRSB9LAorICB7IFZBX0MzKEJBU1RfVkFfQVNJWE5FVCksIFBBX0NTMyhCQVNUX1BBX0FTSVhORVQpLCAgU1pfMU0sICBNVF9ERVZJQ0UgfSwKKyAgeyBWQV9DMyhCQVNUX1ZBX1NVUEVSSU8pLCBQQV9DUzMoQkFTVF9QQV9TVVBFUklPKSwgIFNaXzFNLCAgTVRfREVWSUNFIH0sCisgIHsgVkFfQzMoQkFTVF9WQV9ETTkwMDApLCAgUEFfQ1MzKEJBU1RfUEFfRE05MDAwKSwgICBTWl8xTSwgIE1UX0RFVklDRSB9LAorICB7IFZBX0MzKEJBU1RfVkFfSURFUFJJKSwgIFBBX0NTMyhCQVNUX1BBX0lERVBSSSksICAgU1pfMU0sICBNVF9ERVZJQ0UgfSwKKyAgeyBWQV9DMyhCQVNUX1ZBX0lERVNFQyksICBQQV9DUzMoQkFTVF9QQV9JREVTRUMpLCAgIFNaXzFNLCAgTVRfREVWSUNFIH0sCisgIHsgVkFfQzMoQkFTVF9WQV9JREVQUklBVVgpLCBQQV9DUzMoQkFTVF9QQV9JREVQUklBVVgpLCBTWl8xTSwgTVRfREVWSUNFIH0sCisgIHsgVkFfQzMoQkFTVF9WQV9JREVTRUNBVVgpLCBQQV9DUzMoQkFTVF9QQV9JREVTRUNBVVgpLCBTWl8xTSwgTVRfREVWSUNFIH0sCisKKyAgLyogZmFzdCwgYnl0ZSAqLworICB7IFZBX0M0KEJBU1RfVkFfSVNBSU8pLCAgIFBBX0NTNChCQVNUX1BBX0lTQUlPKSwgICAgU1pfMTZNLCBNVF9ERVZJQ0UgfSwKKyAgeyBWQV9DNChCQVNUX1ZBX0lTQU1FTSksICBQQV9DUzQoQkFTVF9QQV9JU0FNRU0pLCAgIFNaXzE2TSwgTVRfREVWSUNFIH0sCisgIHsgVkFfQzQoQkFTVF9WQV9BU0lYTkVUKSwgUEFfQ1M1KEJBU1RfUEFfQVNJWE5FVCksICBTWl8xTSwgIE1UX0RFVklDRSB9LAorICB7IFZBX0M0KEJBU1RfVkFfU1VQRVJJTyksIFBBX0NTNChCQVNUX1BBX1NVUEVSSU8pLCAgU1pfMU0sICBNVF9ERVZJQ0UgfSwKKyAgeyBWQV9DNChCQVNUX1ZBX0RNOTAwMCksICBQQV9DUzQoQkFTVF9QQV9ETTkwMDApLCAgIFNaXzFNLCAgTVRfREVWSUNFIH0sCisgIHsgVkFfQzQoQkFTVF9WQV9JREVQUkkpLCAgUEFfQ1M1KEJBU1RfUEFfSURFUFJJKSwgICBTWl8xTSwgIE1UX0RFVklDRSB9LAorICB7IFZBX0M0KEJBU1RfVkFfSURFU0VDKSwgIFBBX0NTNShCQVNUX1BBX0lERVNFQyksICAgU1pfMU0sICBNVF9ERVZJQ0UgfSwKKyAgeyBWQV9DNChCQVNUX1ZBX0lERVBSSUFVWCksIFBBX0NTNShCQVNUX1BBX0lERVBSSUFVWCksIFNaXzFNLCBNVF9ERVZJQ0UgfSwKKyAgeyBWQV9DNChCQVNUX1ZBX0lERVNFQ0FVWCksIFBBX0NTNShCQVNUX1BBX0lERVNFQ0FVWCksIFNaXzFNLCBNVF9ERVZJQ0UgfSwKKworICAvKiBmYXN0LCB3b3JkICovCisgIHsgVkFfQzUoQkFTVF9WQV9JU0FJTyksICAgUEFfQ1M1KEJBU1RfUEFfSVNBSU8pLCAgICBTWl8xNk0sIE1UX0RFVklDRSB9LAorICB7IFZBX0M1KEJBU1RfVkFfSVNBTUVNKSwgIFBBX0NTNShCQVNUX1BBX0lTQU1FTSksICAgU1pfMTZNLCBNVF9ERVZJQ0UgfSwKKyAgeyBWQV9DNShCQVNUX1ZBX0FTSVhORVQpLCBQQV9DUzUoQkFTVF9QQV9BU0lYTkVUKSwgIFNaXzFNLCAgTVRfREVWSUNFIH0sCisgIHsgVkFfQzUoQkFTVF9WQV9TVVBFUklPKSwgUEFfQ1M1KEJBU1RfUEFfU1VQRVJJTyksICBTWl8xTSwgIE1UX0RFVklDRSB9LAorICB7IFZBX0M1KEJBU1RfVkFfRE05MDAwKSwgIFBBX0NTNShCQVNUX1BBX0RNOTAwMCksICAgU1pfMU0sICBNVF9ERVZJQ0UgfSwKKyAgeyBWQV9DNShCQVNUX1ZBX0lERVBSSSksICBQQV9DUzUoQkFTVF9QQV9JREVQUkkpLCAgIFNaXzFNLCAgTVRfREVWSUNFIH0sCisgIHsgVkFfQzUoQkFTVF9WQV9JREVTRUMpLCAgUEFfQ1M1KEJBU1RfUEFfSURFU0VDKSwgICBTWl8xTSwgIE1UX0RFVklDRSB9LAorICB7IFZBX0M1KEJBU1RfVkFfSURFUFJJQVVYKSwgUEFfQ1M1KEJBU1RfUEFfSURFUFJJQVVYKSwgU1pfMU0sIE1UX0RFVklDRSB9LAorICB7IFZBX0M1KEJBU1RfVkFfSURFU0VDQVVYKSwgUEFfQ1M1KEJBU1RfUEFfSURFU0VDQVVYKSwgU1pfMU0sIE1UX0RFVklDRSB9LAorfTsKKworI2RlZmluZSBVQ09OIFMzQzI0MTBfVUNPTl9ERUZBVUxUIHwgUzNDMjQxMF9VQ09OX1VDTEsKKyNkZWZpbmUgVUxDT04gUzNDMjQxMF9MQ09OX0NTOCB8IFMzQzI0MTBfTENPTl9QTk9ORSB8IFMzQzI0MTBfTENPTl9TVE9QQgorI2RlZmluZSBVRkNPTiBTM0MyNDEwX1VGQ09OX1JYVFJJRzggfCBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF91YXJ0X2Nsa3NyYyBiYXN0X3NlcmlhbF9jbG9ja3NbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCQk9ICJ1Y2xrIiwKKwkJLmRpdmlzb3IJPSAxLAorCQkubWluX2JhdWQJPSAwLAorCQkubWF4X2JhdWQJPSAwLAorCX0sCisJWzFdID0geworCQkubmFtZQkJPSAicGNsayIsCisJCS5kaXZpc29yCT0gMSwKKwkJLm1pbl9iYXVkCT0gMCwKKwkJLm1heF9iYXVkCT0gMC4KKwl9Cit9OworCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIGJhc3RfdWFydGNmZ3NbXSA9IHsKKwlbMF0gPSB7CisJCS5od3BvcnQJICAgICA9IDAsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJCS5jbG9ja3MJICAgICA9IGJhc3Rfc2VyaWFsX2Nsb2NrcywKKwkJLmNsb2Nrc19zaXplID0gQVJSQVlfU0laRShiYXN0X3NlcmlhbF9jbG9ja3MpCisJfSwKKwlbMV0gPSB7CisJCS5od3BvcnQJICAgICA9IDEsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJCS5jbG9ja3MJICAgICA9IGJhc3Rfc2VyaWFsX2Nsb2NrcywKKwkJLmNsb2Nrc19zaXplID0gQVJSQVlfU0laRShiYXN0X3NlcmlhbF9jbG9ja3MpCisJfSwKKwkvKiBwb3J0IDIgaXMgbm90IGFjdHVhbGx5IHVzZWQgKi8KKwlbMl0gPSB7CisJCS5od3BvcnQJICAgICA9IDIsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJCS5jbG9ja3MJICAgICA9IGJhc3Rfc2VyaWFsX2Nsb2NrcywKKwkJLmNsb2Nrc19zaXplID0gQVJSQVlfU0laRShiYXN0X3NlcmlhbF9jbG9ja3MpCisJfQorfTsKKworLyogTk9SIEZsYXNoIG9uIEJBU1QgYm9hcmQgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiYXN0X25vcl9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUzNDMjQxMF9DUzEgKyAweDQwMDAwMDAsCisJCS5lbmQgICA9IFMzQzI0MTBfQ1MxICsgMHg0MDAwMDAwICsgKDMyKjEwMjQqMTAyNCkgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiYXN0X2RldmljZV9ub3IgPSB7CisJLm5hbWUJCT0gImJhc3Qtbm9yIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGJhc3Rfbm9yX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSBiYXN0X25vcl9yZXNvdXJjZSwKK307CisKKy8qIE5BTkQgRmxhc2ggb24gQkFTVCBib2FyZCAqLworCisKK3N0YXRpYyBpbnQgc21hcnRtZWRpYV9tYXBbXSA9IHsgMCB9Oworc3RhdGljIGludCBjaGlwMF9tYXBbXSA9IHsgMSB9Oworc3RhdGljIGludCBjaGlwMV9tYXBbXSA9IHsgMiB9Oworc3RhdGljIGludCBjaGlwMl9tYXBbXSA9IHsgMyB9OworCitzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBiYXN0X2RlZmF1bHRfbmFuZF9wYXJ0W10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJCb290IEFnZW50IiwKKwkJLnNpemUJPSBTWl8xNkssCisJCS5vZmZzZXQJPSAwCisJfSwKKwlbMV0gPSB7CisJCS5uYW1lCT0gIi9ib290IiwKKwkJLnNpemUJPSBTWl80TSAtIFNaXzE2SywKKwkJLm9mZnNldAk9IFNaXzE2SywKKwl9LAorCVsyXSA9IHsKKwkJLm5hbWUJPSAidXNlciIsCisJCS5vZmZzZXQJPSBTWl80TSwKKwkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0KK307CisKKy8qIHRoZSBiYXN0IGhhcyA0IHNlbGVjdGFibGUgc2xvdHMgZm9yIG5hbmQtZmxhc2gsIHRoZSB0aHJlZQorICogb24tYm9hcmQgY2hpcCBhcmVhcywgYXMgd2VsbCBhcyB0aGUgZXh0ZXJuYWwgU21hcnRNZWRpYQorICogc2xvdC4KKyAqCisgKiBOb3RlLCB0aGVyZSBpcyBubyBjdXJyZW50IGhvdC1wbHVnIHN1cHBvcnQgZm9yIHRoZSBTbWFydE1lZGlhCisgKiBzb2NrZXQuCisqLworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfbmFuZF9zZXQgYmFzdF9uYW5kX3NldHNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCQk9ICJTbWFydE1lZGlhIiwKKwkJLm5yX2NoaXBzCT0gMSwKKwkJLm5yX21hcAkJPSBzbWFydG1lZGlhX21hcCwKKwkJLm5yX3BhcnRpdGlvbnMJPSBBUlJBWV9TSVpFKGJhc3RfZGVmYXVsdF9uYW5kX3BhcnQpLAorCQkucGFydGl0aW9ucwk9IGJhc3RfZGVmYXVsdF9uYW5kX3BhcnQKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUJCT0gImNoaXAwIiwKKwkJLm5yX2NoaXBzCT0gMSwKKwkJLm5yX21hcAkJPSBjaGlwMF9tYXAsCisJCS5ucl9wYXJ0aXRpb25zCT0gQVJSQVlfU0laRShiYXN0X2RlZmF1bHRfbmFuZF9wYXJ0KSwKKwkJLnBhcnRpdGlvbnMJPSBiYXN0X2RlZmF1bHRfbmFuZF9wYXJ0CisJfSwKKwlbMl0gPSB7CisJCS5uYW1lCQk9ICJjaGlwMSIsCisJCS5ucl9jaGlwcwk9IDEsCisJCS5ucl9tYXAJCT0gY2hpcDFfbWFwLAorCQkubnJfcGFydGl0aW9ucwk9IEFSUkFZX1NJWkUoYmFzdF9kZWZhdWx0X25hbmRfcGFydCksCisJCS5wYXJ0aXRpb25zCT0gYmFzdF9kZWZhdWx0X25hbmRfcGFydAorCX0sCisJWzNdID0geworCQkubmFtZQkJPSAiY2hpcDIiLAorCQkubnJfY2hpcHMJPSAxLAorCQkubnJfbWFwCQk9IGNoaXAyX21hcCwKKwkJLm5yX3BhcnRpdGlvbnMJPSBBUlJBWV9TSVpFKGJhc3RfZGVmYXVsdF9uYW5kX3BhcnQpLAorCQkucGFydGl0aW9ucwk9IGJhc3RfZGVmYXVsdF9uYW5kX3BhcnQKKwl9Cit9OworCitzdGF0aWMgdm9pZCBiYXN0X25hbmRfc2VsZWN0KHN0cnVjdCBzM2MyNDEwX25hbmRfc2V0ICpzZXQsIGludCBzbG90KQoreworCXVuc2lnbmVkIGludCB0bXA7CisKKwlzbG90ID0gc2V0LT5ucl9tYXBbc2xvdF0gJiAzOworCisJcHJfZGVidWcoImJhc3RfbmFuZDogc2VsZWN0aW5nIHNsb3QgJWQgKHNldCAlcCwlcClcbiIsCisJCSBzbG90LCBzZXQsIHNldC0+bnJfbWFwKTsKKworCXRtcCA9IF9fcmF3X3JlYWRiKEJBU1RfVkFfQ1RSTDIpOworCXRtcCAmPSBCQVNUX0NQTERfQ1RMUjJfSURFUlNUOworCXRtcCB8PSBzbG90OworCXRtcCB8PSBCQVNUX0NQTERfQ1RSTDJfV05BTkQ7CisKKwlwcl9kZWJ1ZygiYmFzdF9uYW5kOiBjdHJsMiBub3cgJTAyeFxuIiwgdG1wKTsKKworCV9fcmF3X3dyaXRlYih0bXAsIEJBU1RfVkFfQ1RSTDIpOworfQorCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1fbmFuZCBiYXN0X25hbmRfaW5mbyA9IHsKKwkudGFjbHMJCT0gODAsCisJLnR3cnBoMAkJPSA4MCwKKwkudHdycGgxCQk9IDgwLAorCS5ucl9zZXRzCT0gQVJSQVlfU0laRShiYXN0X25hbmRfc2V0cyksCisJLnNldHMJCT0gYmFzdF9uYW5kX3NldHMsCisJLnNlbGVjdF9jaGlwCT0gYmFzdF9uYW5kX3NlbGVjdCwKK307CisKKworLyogU3RhbmRhcmQgQkFTVCBkZXZpY2VzICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpiYXN0X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzM2NfZGV2aWNlX3VzYiwKKwkmczNjX2RldmljZV9sY2QsCisJJnMzY19kZXZpY2Vfd2R0LAorCSZzM2NfZGV2aWNlX2kyYywKKwkmczNjX2RldmljZV9paXMsCisgCSZzM2NfZGV2aWNlX3J0YywKKwkmczNjX2RldmljZV9uYW5kLAorCSZiYXN0X2RldmljZV9ub3IKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpiYXN0X2Nsb2Nrc1tdID0geworCSZzM2MyNHh4X2RjbGswLAorCSZzM2MyNHh4X2RjbGsxLAorCSZzM2MyNHh4X2Nsa291dDAsCisJJnMzYzI0eHhfY2xrb3V0MSwKKwkmczNjMjR4eF91Y2xrLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X2JvYXJkIGJhc3RfYm9hcmQgX19pbml0ZGF0YSA9IHsKKwkuZGV2aWNlcyAgICAgICA9IGJhc3RfZGV2aWNlcywKKwkuZGV2aWNlc19jb3VudCA9IEFSUkFZX1NJWkUoYmFzdF9kZXZpY2VzKSwKKwkuY2xvY2tzCSAgICAgICA9IGJhc3RfY2xvY2tzLAorCS5jbG9ja3NfY291bnQgID0gQVJSQVlfU0laRShiYXN0X2Nsb2NrcykKK307CisKK3ZvaWQgX19pbml0IGJhc3RfbWFwX2lvKHZvaWQpCit7CisJLyogaW5pdGlhbGlzZSB0aGUgY2xvY2tzICovCisKKwlzM2MyNHh4X2RjbGswLnBhcmVudCA9IE5VTEw7CisJczNjMjR4eF9kY2xrMC5yYXRlICAgPSAxMioxMDAwKjEwMDA7CisKKwlzM2MyNHh4X2RjbGsxLnBhcmVudCA9IE5VTEw7CisJczNjMjR4eF9kY2xrMS5yYXRlICAgPSAyNCoxMDAwKjEwMDA7CisKKwlzM2MyNHh4X2Nsa291dDAucGFyZW50ICA9ICZzM2MyNHh4X2RjbGswOworCXMzYzI0eHhfY2xrb3V0MS5wYXJlbnQgID0gJnMzYzI0eHhfZGNsazE7CisKKwlzM2MyNHh4X3VjbGsucGFyZW50ICA9ICZzM2MyNHh4X2Nsa291dDE7CisKKwlzM2NfZGV2aWNlX25hbmQuZGV2LnBsYXRmb3JtX2RhdGEgPSAmYmFzdF9uYW5kX2luZm87CisKKwlzM2MyNHh4X2luaXRfaW8oYmFzdF9pb2Rlc2MsIEFSUkFZX1NJWkUoYmFzdF9pb2Rlc2MpKTsKKwlzM2MyNHh4X2luaXRfY2xvY2tzKDApOworCXMzYzI0eHhfaW5pdF91YXJ0cyhiYXN0X3VhcnRjZmdzLCBBUlJBWV9TSVpFKGJhc3RfdWFydGNmZ3MpKTsKKwlzM2MyNHh4X3NldF9ib2FyZCgmYmFzdF9ib2FyZCk7CisJdXNiX3NpbXRlY19pbml0KCk7Cit9CisKK3ZvaWQgX19pbml0IGJhc3RfaW5pdF9pcnEodm9pZCkKK3sKKwlzM2MyNHh4X2luaXRfaXJxKCk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKworLyogYmFzdF9pbml0X21hY2hpbmUKKyAqCisgKiBlbmFibGUgdGhlIHBvd2VyIG1hbmFnZW1lbnQgZnVuY3Rpb25zIGZvciB0aGUgRUIyNDEwSVRYCisqLworCitzdGF0aWMgX19pbml0IHZvaWQgYmFzdF9pbml0X21hY2hpbmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGdzdGF0dXM0OworCisJcHJpbnRrKEtFUk5fSU5GTyAiQkFTVCBQb3dlciBNYW5hbmdlbWVudCIgQ09QWVJJR0hUICJcbiIpOworCisJZ3N0YXR1czQgID0gKF9fcmF3X3JlYWRsKFMzQzI0MTBfQkFOS0NPTjcpICYgMHgzKSA8PCAzMDsKKwlnc3RhdHVzNCB8PSAoX19yYXdfcmVhZGwoUzNDMjQxMF9CQU5LQ09ONikgJiAweDMpIDw8IDI4OworCWdzdGF0dXM0IHw9IChfX3Jhd19yZWFkbChTM0MyNDEwX0JBTktTSVpFKSAmIFMzQzI0MTBfQkFOS1NJWkVfTUFTSyk7CisKKwlfX3Jhd193cml0ZWwoZ3N0YXR1czQsIFMzQzI0MTBfR1NUQVRVUzQpOworCisJczNjMjQxMF9wbV9pbml0KCk7Cit9CisKKyNlbHNlCisjZGVmaW5lIGJhc3RfaW5pdF9tYWNoaW5lIE5VTEwKKyNlbmRpZgorCisKK01BQ0hJTkVfU1RBUlQoQkFTVCwgIlNpbXRlYy1CQVNUIikKKyAgICAgTUFJTlRBSU5FUigiQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPiIpCisgICAgIEJPT1RfTUVNKFMzQzI0MTBfU0RSQU1fUEEsIFMzQzI0MTBfUEFfVUFSVCwgKHUzMilTM0MyNFhYX1ZBX1VBUlQpCisgICAgIEJPT1RfUEFSQU1TKFMzQzI0MTBfU0RSQU1fUEEgKyAweDEwMCkKKyAgICAgTUFQSU8oYmFzdF9tYXBfaW8pCisgICAgIElOSVRJUlEoYmFzdF9pbml0X2lycSkKKwkuaW5pdF9tYWNoaW5lCT0gYmFzdF9pbml0X21hY2hpbmUsCisJLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MjRhZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCkBAIC0wLDAgKzEsMTI2IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBodHRwOi8vd3d3LmhhbmRoZWxkcy5vcmcvcHJvamVjdHMvaDE5NDAuaHRtbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTW9kaWZpY2F0aW9uczoKKyAqICAgICAxNi1NYXktMjAwMyBCSkQgIENyZWF0ZWQgaW5pdGlhbCB2ZXJzaW9uCisgKiAgICAgMTYtQXVnLTIwMDMgQkpEICBGaXhlZCBoZWFkZXIgZmlsZXMgYW5kIGNvcHlyaWdodCwgYWRkZWQgVVJMCisgKiAgICAgMDUtU2VwLTIwMDMgQkpEICBNb3ZlZCB0byB2Mi42IGtlcm5lbAorICogICAgIDA2LUphbi0yMDAzIEJKRCAgVXBkYXRlcyBmb3IgPGFyY2gvbWFwLmg+CisgKiAgICAgMTgtSmFuLTIwMDMgQkpEICBBZGRlZCBzZXJpYWwgcG9ydCBjb25maWd1cmF0aW9uCisgKiAgICAgMTctRmViLTIwMDMgQkpEICBDb3BpZWQgdG8gbWFjaC1pcGFxLmMKKyAqICAgICAyMS1BdWctMjAwNCBCSkQgIEFkZGVkIHN0cnVjdCBzM2MyNDEwX2JvYXJkCisgKiAgICAgMDQtU2VwLTIwMDQgQkpEICBDaGFuZ2VkIHVhcnQgaW5pdCwgcmVuYW1lZCBpcGFxXyAtPiBoMTk0MF8KKyAqICAgICAxOC1PY3QtMjAwNCBCSkQgIFVwZGF0ZWQgbmV3IGJvYXJkIHN0cnVjdHVyZSBuYW1lCisgKiAgICAgMDQtTm92LTIwMDQgQkpEICBDaGFuZ2UgZm9yIG5ldyBzZXJpYWwgY2xvY2sKKyAqICAgICAwNC1KYW4tMjAwNSBCSkQgIFVwZGF0ZWQgdWFydCBpbml0IGNhbGwKKyAqICAgICAxMC1KYW4tMjAwNSBCSkQgIFJlbW92ZWQgaW5jbHVkZSBvZiBzM2MyNDEwLmgKKyAqICAgICAxNC1KYW4tMjAwNSBCSkQgIEFkZGVkIGNsb2NrIGluaXQKKyAqICAgICAxMC1NYXItMjAwNSBMQ1ZSIENoYW5nZWQgUzNDMjQxMF9WQSB0byBTM0MyNFhYX1ZBCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9tZC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisvLyNpbmNsdWRlIDxhc20vZGVidWctbGwuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNlcmlhbC5oPgorCisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiZGV2cy5oIgorI2luY2x1ZGUgImNwdS5oIgorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGgxOTQwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJLyogbm90aGluZyBoZXJlIHlldCAqLworfTsKKworI2RlZmluZSBVQ09OIFMzQzI0MTBfVUNPTl9ERUZBVUxUIHwgUzNDMjQxMF9VQ09OX1VDTEsKKyNkZWZpbmUgVUxDT04gUzNDMjQxMF9MQ09OX0NTOCB8IFMzQzI0MTBfTENPTl9QTk9ORSB8IFMzQzI0MTBfTENPTl9TVE9QQgorI2RlZmluZSBVRkNPTiBTM0MyNDEwX1VGQ09OX1JYVFJJRzggfCBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIGgxOTQwX3VhcnRjZmdzW10gPSB7CisJWzBdID0geworCQkuaHdwb3J0CSAgICAgPSAwLAorCQkuZmxhZ3MJICAgICA9IDAsCisJCS51Y29uCSAgICAgPSAweDNjNSwKKwkJLnVsY29uCSAgICAgPSAweDAzLAorCQkudWZjb24JICAgICA9IDB4NTEsCisJfSwKKwlbMV0gPSB7CisJCS5od3BvcnQJICAgICA9IDEsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IDB4MjQ1LAorCQkudWxjb24JICAgICA9IDB4MDMsCisJCS51ZmNvbgkgICAgID0gMHgwMCwKKwl9LAorCS8qIElSIHBvcnQgKi8KKwlbMl0gPSB7CisJCS5od3BvcnQJICAgICA9IDIsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVhcnRfZmxhZ3MgID0gVVBGX0NPTlNfRkxPVywKKwkJLnVjb24JICAgICA9IDB4M2M1LAorCQkudWxjb24JICAgICA9IDB4NDMsCisJCS51ZmNvbgkgICAgID0gMHg1MSwKKwl9Cit9OworCisKKworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaDE5NDBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnMzY19kZXZpY2VfdXNiLAorCSZzM2NfZGV2aWNlX2xjZCwKKwkmczNjX2RldmljZV93ZHQsCisJJnMzY19kZXZpY2VfaTJjLAorCSZzM2NfZGV2aWNlX2lpcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF9ib2FyZCBoMTk0MF9ib2FyZCBfX2luaXRkYXRhID0geworCS5kZXZpY2VzICAgICAgID0gaDE5NDBfZGV2aWNlcywKKwkuZGV2aWNlc19jb3VudCA9IEFSUkFZX1NJWkUoaDE5NDBfZGV2aWNlcykKK307CisKK3ZvaWQgX19pbml0IGgxOTQwX21hcF9pbyh2b2lkKQoreworCXMzYzI0eHhfaW5pdF9pbyhoMTk0MF9pb2Rlc2MsIEFSUkFZX1NJWkUoaDE5NDBfaW9kZXNjKSk7CisJczNjMjR4eF9pbml0X2Nsb2NrcygwKTsKKwlzM2MyNHh4X2luaXRfdWFydHMoaDE5NDBfdWFydGNmZ3MsIEFSUkFZX1NJWkUoaDE5NDBfdWFydGNmZ3MpKTsKKwlzM2MyNHh4X3NldF9ib2FyZCgmaDE5NDBfYm9hcmQpOworfQorCit2b2lkIF9faW5pdCBoMTk0MF9pbml0X2lycSh2b2lkKQoreworCXMzYzI0eHhfaW5pdF9pcnEoKTsKKworfQorCitNQUNISU5FX1NUQVJUKEgxOTQwLCAiSVBBUS1IMTk0MCIpCisgICAgIE1BSU5UQUlORVIoIkJlbiBEb29rcyA8YmVuQGZsdWZmLm9yZz4iKQorICAgICBCT09UX01FTShTM0MyNDEwX1NEUkFNX1BBLCBTM0MyNDEwX1BBX1VBUlQsICh1MzIpUzNDMjRYWF9WQV9VQVJUKQorICAgICBCT09UX1BBUkFNUyhTM0MyNDEwX1NEUkFNX1BBICsgMHgxMDApCisgICAgIE1BUElPKGgxOTQwX21hcF9pbykKKyAgICAgSU5JVElSUShoMTk0MF9pbml0X2lycSkKKwkudGltZXIJCT0gJnMzYzI0eHhfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbjMwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDE1OTk4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbjMwLmMKQEAgLTAsMCArMSwxNTUgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW4zMC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IENocmlzdGVyIFdlaW5pZ2VsIDxjaHJpc3RlckB3ZWluaWdlbC5zZT4KKyAqCisgKiBUaGVyZSBpcyBhIHdpa2kgd2l0aCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBuMzAgcG9ydCBhdAorICogaHR0cDovL2hhbmRoZWxkcy5vcmcvbW9pbi9tb2luLmNnaS9BY2VyTjMwRG9jdW1lbnRhdGlvbiAuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pb21kLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lpYy5oPgorCisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKworI2luY2x1ZGUgInMzYzI0MTAuaCIKKyNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgImRldnMuaCIKKyNpbmNsdWRlICJjcHUuaCIKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBuMzBfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKKwkvKiBub3RoaW5nIGhlcmUgeWV0ICovCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBuMzBfdWFydGNmZ3NbXSA9IHsKKwkvKiBOb3JtYWwgc2VyaWFsIHBvcnQgKi8KKwlbMF0gPSB7CisJCS5od3BvcnQJICAgICA9IDAsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IDB4MmM1LAorCQkudWxjb24JICAgICA9IDB4MDMsCisJCS51ZmNvbgkgICAgID0gMHg1MSwKKwl9LAorCS8qIElSIHBvcnQgKi8KKwlbMV0gPSB7CisJCS5od3BvcnQJICAgICA9IDEsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVhcnRfZmxhZ3MgID0gVVBGX0NPTlNfRkxPVywKKwkJLnVjb24JICAgICA9IDB4MmM1LAorCQkudWxjb24JICAgICA9IDB4NDMsCisJCS51ZmNvbgkgICAgID0gMHg1MSwKKwl9LAorCS8qIFRoZSBCbHVlVG9vdGggY29udHJvbGxlciBpcyBjb25uZWN0ZWQgdG8gcG9ydCAyICovCisJWzJdID0geworCQkuaHdwb3J0CSAgICAgPSAyLAorCQkuZmxhZ3MJICAgICA9IDAsCisJCS51Y29uCSAgICAgPSAweDJjNSwKKwkJLnVsY29uCSAgICAgPSAweDAzLAorCQkudWZjb24JICAgICA9IDB4NTEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpuMzBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnMzY19kZXZpY2VfdXNiLAorCSZzM2NfZGV2aWNlX2xjZCwKKwkmczNjX2RldmljZV93ZHQsCisJJnMzY19kZXZpY2VfaTJjLAorCSZzM2NfZGV2aWNlX2lpcywKKwkmczNjX2RldmljZV91c2JnYWRnZXQsCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1faTJjIG4zMF9pMmNjZmcgPSB7CisJLmZsYWdzCQk9IDAsCisJLnNsYXZlX2FkZHIJPSAweDEwLAorCS5idXNfZnJlcQk9IDEwKjEwMDAsCisJLm1heF9mcmVxCT0gMTAqMTAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF9ib2FyZCBuMzBfYm9hcmQgX19pbml0ZGF0YSA9IHsKKwkuZGV2aWNlcyAgICAgICA9IG4zMF9kZXZpY2VzLAorCS5kZXZpY2VzX2NvdW50ID0gQVJSQVlfU0laRShuMzBfZGV2aWNlcykKK307CisKK3ZvaWQgX19pbml0IG4zMF9tYXBfaW8odm9pZCkKK3sKKwlzM2MyNHh4X2luaXRfaW8objMwX2lvZGVzYywgQVJSQVlfU0laRShuMzBfaW9kZXNjKSk7CisJczNjMjR4eF9pbml0X2Nsb2NrcygwKTsKKwlzM2MyNHh4X2luaXRfdWFydHMobjMwX3VhcnRjZmdzLCBBUlJBWV9TSVpFKG4zMF91YXJ0Y2ZncykpOworCXMzYzI0eHhfc2V0X2JvYXJkKCZuMzBfYm9hcmQpOworfQorCit2b2lkIF9faW5pdCBuMzBfaW5pdF9pcnEodm9pZCkKK3sKKwlzM2MyNHh4X2luaXRfaXJxKCk7Cit9CisKKworc3RhdGljIGludCBuMzBfdXNic3RhcnRfdGhyZWFkKHZvaWQgKnVudXNlZCkKK3sKKwkvKiBUdXJuIG9mZiBzdXNwZW5kIG9uIGJvdGggVVNCIHBvcnRzLCBhbmQgc3dpdGNoIHRoZQorCSAqIHNlbGVjdGFibGUgVVNCIHBvcnQgdG8gVVNCIGRldmljZSBtb2RlLiAqLworCXdyaXRlbChyZWFkbChTM0MyNDEwX01JU0NDUikgJiB+MHgwMDAwMzAwOCwgUzNDMjQxMF9NSVNDQ1IpOworCisJLyogVHVybiBvZmYgdGhlIEQrIHB1bGwgdXAgZm9yIDMgc2Vjb25kcyBzbyB0aGF0IHRoZSBVU0IgaG9zdAorCSAqIGF0IHRoZSBvdGhlciBlbmQgd2lsbCBkbyBhIHJlc2NhbiBvZiB0aGUgVVNCIGJ1cy4gICovCisJczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQQjMsIDApOworCisJbXNsZWVwX2ludGVycnVwdGlibGUoMypIWik7CisKKwlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BCMywgMSk7CisKKwlyZXR1cm4gMDsKK30KKworCit2b2lkIF9faW5pdCBuMzBfaW5pdCh2b2lkKQoreworCXMzY19kZXZpY2VfaTJjLmRldi5wbGF0Zm9ybV9kYXRhID0gJm4zMF9pMmNjZmc7CisKKwlrdGhyZWFkX3J1bihuMzBfdXNic3RhcnRfdGhyZWFkLCBOVUxMLCAibjMwX3VzYnN0YXJ0Iik7Cit9CisKK01BQ0hJTkVfU1RBUlQoTjMwLCAiQWNlci1OMzAiKQorICAgICBNQUlOVEFJTkVSKCJDaHJpc3RlciBXZWluaWdlbCA8Y2hyaXN0ZXJAd2VpbmlnZWwuc2U+LCBCZW4gRG9va3MgPGJlbi1saW51eEBmbHVmZi5vcmc+IikKKyAgICAgQk9PVF9NRU0oUzNDMjQxMF9TRFJBTV9QQSwgUzNDMjQxMF9QQV9VQVJULCAodTMyKVMzQzI0WFhfVkFfVUFSVCkKKyAgICAgQk9PVF9QQVJBTVMoUzNDMjQxMF9TRFJBTV9QQSArIDB4MTAwKQorCisJLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBuMzBfaW5pdCwKKwkuaW5pdF9pcnEJPSBuMzBfaW5pdF9pcnEsCisJLm1hcF9pbwkJPSBuMzBfbWFwX2lvLAorTUFDSElORV9FTkQKKworLyoKKyAgICBMb2NhbCB2YXJpYWJsZXM6CisgICAgICAgIGNvbXBpbGUtY29tbWFuZDogIm1ha2UgQVJDSD1hcm0gQ1JPU1NfQ09NUElMRT0vdXNyL2xvY2FsL2FybS8zLjMuMi9iaW4vYXJtLWxpbnV4LSAtayAtQyAuLi8uLi8uLiIKKyAgICAgICAgYy1iYXNpYy1vZmZzZXQ6IDgKKyAgICBFbmQ6CisqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbmV4Y29kZXIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW5leGNvZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA0ODdiZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW5leGNvZGVyLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW5leGNvZGVyLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgTmV4IFZpc2lvbgorICogICBHdWlsbGF1bWUgR09VUkFUIDxndWlsbGF1bWUuZ291cmF0QG5leHZpc2lvbi50dj4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE1vZGlmaWNhdGlvbnM6CisgKiAgICAgMTUtMTAtMjAwNCBHRyAgQ3JlYXRlZCBpbml0aWFsIHZlcnNpb24KKyAqICAgICAxMi0wMy0yMDA1IEJKRCBVcGRhdGVkIGZvciByZWxlYXNlCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKy8vI2luY2x1ZGUgPGFzbS9kZWJ1Zy1sbC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmg+CisKKyNpbmNsdWRlICJzM2MyNDEwLmgiCisjaW5jbHVkZSAiczNjMjQ0MC5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiZGV2cy5oIgorI2luY2x1ZGUgImNwdS5oIgorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG5leGNvZGVyX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJLyogbm90aGluZyBoZXJlIHlldCAqLworfTsKKworI2RlZmluZSBVQ09OIFMzQzI0MTBfVUNPTl9ERUZBVUxUCisjZGVmaW5lIFVMQ09OIFMzQzI0MTBfTENPTl9DUzggfCBTM0MyNDEwX0xDT05fUE5PTkUgfCBTM0MyNDEwX0xDT05fU1RPUEIKKyNkZWZpbmUgVUZDT04gUzNDMjQxMF9VRkNPTl9SWFRSSUcxMiB8IFMzQzI0MTBfVUZDT05fRklGT01PREUKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgbmV4Y29kZXJfdWFydGNmZ3NbXSA9IHsKKwlbMF0gPSB7CisJCS5od3BvcnQJICAgICA9IDAsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfSwKKwlbMV0gPSB7CisJCS5od3BvcnQJICAgICA9IDEsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfSwKKwlbMl0gPSB7CisJCS5od3BvcnQJICAgICA9IDIsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfQorfTsKKworLyogTk9SIEZsYXNoIG9uIE5leFZpc2lvbiBOZXhDb2RlciAyNDQwIGJvYXJkICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmV4Y29kZXJfbm9yX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0MyNDEwX0NTMCwKKwkJLmVuZCAgID0gUzNDMjQxMF9DUzAgKyAoOCoxMDI0KjEwMjQpIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBtYXBfaW5mbyBuZXhjb2Rlcl9ub3JfbWFwID0geworCS5iYW5rd2lkdGggPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbmV4Y29kZXJfZGV2aWNlX25vciA9IHsKKwkubmFtZQkJPSAibXRkLWZsYXNoIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5leGNvZGVyX25vcl9yZXNvdXJjZSksCisJLnJlc291cmNlCT0gbmV4Y29kZXJfbm9yX3Jlc291cmNlLAorCS5kZXYgPQorCXsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmbmV4Y29kZXJfbm9yX21hcCwKKwl9Cit9OworCisvKiBTdGFuZGFyZCBOZXhjb2RlciBkZXZpY2VzICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpuZXhjb2Rlcl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmczNjX2RldmljZV91c2IsCisJJnMzY19kZXZpY2VfbGNkLAorCSZzM2NfZGV2aWNlX3dkdCwKKwkmczNjX2RldmljZV9pMmMsCisJJnMzY19kZXZpY2VfaWlzLAorIAkmczNjX2RldmljZV9ydGMsCisJJnMzY19kZXZpY2VfY2FtaWYsCisJJnMzY19kZXZpY2Vfc3BpMCwKKwkmczNjX2RldmljZV9zcGkxLAorCSZuZXhjb2Rlcl9kZXZpY2Vfbm9yLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X2JvYXJkIG5leGNvZGVyX2JvYXJkIF9faW5pdGRhdGEgPSB7CisJLmRldmljZXMgICAgICAgPSBuZXhjb2Rlcl9kZXZpY2VzLAorCS5kZXZpY2VzX2NvdW50ID0gQVJSQVlfU0laRShuZXhjb2Rlcl9kZXZpY2VzKSwKK307CisKKworc3RhdGljIHZvaWQgX19pbml0IG5leGNvZGVyX3NlbnNvcmJvYXJkX2luaXQodm9pZCkKK3sKKwkvLyBJbml0aWFsaXplIFNDQ0IgYnVzCisJczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQRTE0LCAxKTsgLy8gSUlDU0NMCisJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTE0LCBTM0MyNDEwX0dQRTE0X09VVFApOworCXMzYzI0MTBfZ3Bpb19zZXRwaW4oUzNDMjQxMF9HUEUxNSwgMSk7IC8vIElJQ1NEQQorCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEUxNSwgUzNDMjQxMF9HUEUxNV9PVVRQKTsKKworCS8vIFBvd2VyIHVwIHRoZSBzZW5zb3IgYm9hcmQKKwlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BGMSwgMSk7CisJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRjEsIFMzQzI0MTBfR1BGMV9PVVRQKTsgLy8gQ0FNX0dQSU83ID0+IG5MRE9fUFdSRE4KKwlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BGMiwgMCk7CisJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRjIsIFMzQzI0MTBfR1BGMl9PVVRQKTsgLy8gQ0FNX0dQSU82ID0+IENBTV9QV1JETgorfQorCit2b2lkIF9faW5pdCBuZXhjb2Rlcl9tYXBfaW8odm9pZCkKK3sKKwlzM2MyNHh4X2luaXRfaW8obmV4Y29kZXJfaW9kZXNjLCBBUlJBWV9TSVpFKG5leGNvZGVyX2lvZGVzYykpOworCXMzYzI0eHhfaW5pdF9jbG9ja3MoMCk7CisJczNjMjR4eF9pbml0X3VhcnRzKG5leGNvZGVyX3VhcnRjZmdzLCBBUlJBWV9TSVpFKG5leGNvZGVyX3VhcnRjZmdzKSk7CisJczNjMjR4eF9zZXRfYm9hcmQoJm5leGNvZGVyX2JvYXJkKTsKKwluZXhjb2Rlcl9zZW5zb3Jib2FyZF9pbml0KCk7Cit9CisKKworTUFDSElORV9TVEFSVChORVhDT0RFUl8yNDQwLCAiTmV4VmlzaW9uIC0gTmV4Y29kZXIgMjQ0MCIpCisgICAgIE1BSU5UQUlORVIoIkd1aWxsYXVtZSBHT1VSQVQgPGd1aWxsYXVtZS5nb3VyYXRAbmV4dmlzaW9uLnR2PiIpCisgICAgIEJPT1RfTUVNKFMzQzI0MTBfU0RSQU1fUEEsIFMzQzI0MTBfUEFfVUFSVCwgKHUzMilTM0MyNFhYX1ZBX1VBUlQpCisgICAgIEJPT1RfUEFSQU1TKFMzQzI0MTBfU0RSQU1fUEEgKyAweDEwMCkKKwkubWFwX2lvCQk9IG5leGNvZGVyX21hcF9pbywKKwkuaW5pdF9pcnEJPSBzM2MyNHh4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmczNjMjR4eF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vdG9tLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vdG9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdkOGNlOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW90b20uYwpAQCAtMCwwICsxLDEyNCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtb3RvbS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0IE5leCBWaXNpb24KKyAqICAgR3VpbGxhdW1lIEdPVVJBVCA8Z3VpbGxhdW1lLmdvdXJhdEBuZXh2aXNpb24uZnI+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvb3RvbS1tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KKworI2luY2x1ZGUgInMzYzI0MTAuaCIKKyNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgImRldnMuaCIKKyNpbmNsdWRlICJjcHUuaCIKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvdG9tMTFfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKKyAgLyogRGV2aWNlIGFyZWEgKi8KKwl7ICh1MzIpT1RPTV9WQV9DUzg5MDBBX0JBU0UsIE9UT01fUEFfQ1M4OTAwQV9CQVNFLCBTWl8xNk0sIE1UX0RFVklDRSB9LAorfTsKKworI2RlZmluZSBVQ09OIFMzQzI0MTBfVUNPTl9ERUZBVUxUCisjZGVmaW5lIFVMQ09OIFMzQzI0MTBfTENPTl9DUzggfCBTM0MyNDEwX0xDT05fUE5PTkUgfCBTM0MyNDEwX0xDT05fU1RPUEIKKyNkZWZpbmUgVUZDT04gUzNDMjQxMF9VRkNPTl9SWFRSSUcxMiB8IFMzQzI0MTBfVUZDT05fRklGT01PREUKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgb3RvbTExX3VhcnRjZmdzW10gPSB7CisJWzBdID0geworCQkuaHdwb3J0CSAgICAgPSAwLAorCQkuZmxhZ3MJICAgICA9IDAsCisJCS51Y29uCSAgICAgPSBVQ09OLAorCQkudWxjb24JICAgICA9IFVMQ09OLAorCQkudWZjb24JICAgICA9IFVGQ09OLAorCX0sCisJWzFdID0geworCQkuaHdwb3J0CSAgICAgPSAxLAorCQkuZmxhZ3MJICAgICA9IDAsCisJCS51Y29uCSAgICAgPSBVQ09OLAorCQkudWxjb24JICAgICA9IFVMQ09OLAorCQkudWZjb24JICAgICA9IFVGQ09OLAorCX0sCisJLyogcG9ydCAyIGlzIG5vdCBhY3R1YWxseSB1c2VkICovCisJWzJdID0geworCQkuaHdwb3J0CSAgICAgPSAyLAorCQkuZmxhZ3MJICAgICA9IDAsCisJCS51Y29uCSAgICAgPSBVQ09OLAorCQkudWxjb24JICAgICA9IFVMQ09OLAorCQkudWZjb24JICAgICA9IFVGQ09OLAorCX0KK307CisKKy8qIE5PUiBGbGFzaCBvbiBOZXhWaXNpb24gT1RPTSBib2FyZCAqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG90b21fbm9yX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0MyNDEwX0NTMCwKKwkJLmVuZCAgID0gUzNDMjQxMF9DUzAgKyAoNCoxMDI0KjEwMjQpIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3RvbV9kZXZpY2Vfbm9yID0geworCS5uYW1lCQk9ICJtdGQtZmxhc2giLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob3RvbV9ub3JfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IG90b21fbm9yX3Jlc291cmNlLAorfTsKKworLyogU3RhbmRhcmQgT1RPTSBkZXZpY2VzICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvdG9tMTFfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnMzY19kZXZpY2VfdXNiLAorCSZzM2NfZGV2aWNlX2xjZCwKKwkmczNjX2RldmljZV93ZHQsCisJJnMzY19kZXZpY2VfaTJjLAorCSZzM2NfZGV2aWNlX2lpcywKKyAJJnMzY19kZXZpY2VfcnRjLAorCSZvdG9tX2RldmljZV9ub3IsCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfYm9hcmQgb3RvbTExX2JvYXJkIF9faW5pdGRhdGEgPSB7CisJLmRldmljZXMgICAgICAgPSBvdG9tMTFfZGV2aWNlcywKKwkuZGV2aWNlc19jb3VudCA9IEFSUkFZX1NJWkUob3RvbTExX2RldmljZXMpCit9OworCisKK3ZvaWQgX19pbml0IG90b20xMV9tYXBfaW8odm9pZCkKK3sKKwlzM2MyNHh4X2luaXRfaW8ob3RvbTExX2lvZGVzYywgQVJSQVlfU0laRShvdG9tMTFfaW9kZXNjKSk7CisJczNjMjR4eF9pbml0X2Nsb2NrcygwKTsKKwlzM2MyNHh4X2luaXRfdWFydHMob3RvbTExX3VhcnRjZmdzLCBBUlJBWV9TSVpFKG90b20xMV91YXJ0Y2ZncykpOworCXMzYzI0eHhfc2V0X2JvYXJkKCZvdG9tMTFfYm9hcmQpOworfQorCisKK01BQ0hJTkVfU1RBUlQoT1RPTSwgIk5leCBWaXNpb24gLSBPdG9tIDEuMSIpCisgICAgIE1BSU5UQUlORVIoIkd1aWxsYXVtZSBHT1VSQVQgPGd1aWxsYXVtZS5nb3VyYXRAbmV4dmlzaW9uLnR2PiIpCisgICAgIEJPT1RfTUVNKFMzQzI0MTBfU0RSQU1fUEEsIFMzQzI0MTBfUEFfVUFSVCwgKHUzMilTM0MyNFhYX1ZBX1VBUlQpCisgICAgIEJPT1RfUEFSQU1TKFMzQzI0MTBfU0RSQU1fUEEgKyAweDEwMCkKKwkubWFwX2lvCQk9IG90b20xMV9tYXBfaW8sCisJLmluaXRfaXJxCT0gczNjMjR4eF9pbml0X2lycSwKKwkudGltZXIJCT0gJnMzYzI0eHhfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtcngzNzE1LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1yeDM3MTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGQzYTk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtcngzNzE1LmMKQEAgLTAsMCArMSwxNDEgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXJ4MzcxNS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzLDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogaHR0cDovL3d3dy5oYW5kaGVsZHMub3JnL3Byb2plY3RzL3J4MzcxNS5odG1sCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBNb2RpZmljYXRpb25zOgorICoJMTYtU2VwLTIwMDQgQkpEICBDb3BpZWQgZnJvbSBtYWNoLWgxOTQwLmMKKyAqCTI1LU9jdC0yMDA0IEJKRCAgVXBkYXRlcyBmb3IgMi42LjEwLXJjMQorICoJMTAtSmFuLTIwMDUgQkpEICBSZW1vdmVkIGluY2x1ZGUgb2YgczNjMjQxMC5oIHMzYzI0NDAuaAorICoJMTQtSmFuLTIwMDUgQkpEICBBZGRlZCBuZXcgY2xvY2sgaW5pdAorICoJMTAtTWFyLTIwMDUgTENWUiBDaGFuZ2VkIFMzQzI0MTBfVkEgdG8gUzNDMjRYWF9WQQorICoJMTQtTWFyLTIwMDUgQkpEICBGaXhlZCBfX2lvbWVtIHdhcm5pbmdzCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9tZC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiZGV2cy5oIgorI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgInBtLmgiCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgcngzNzE1X2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJLyogZHVtcCBJU0Egc3BhY2Ugc29tZXdoZXJlIHVudXNlZCAqLworCisJeyAodTMyKVMzQzI0WFhfVkFfSVNBX1dPUkQsIFMzQzI0MTBfQ1MzLCBTWl8xNk0sIE1UX0RFVklDRSB9LAorCXsgKHUzMilTM0MyNFhYX1ZBX0lTQV9CWVRFLCBTM0MyNDEwX0NTMywgU1pfMTZNLCBNVF9ERVZJQ0UgfSwKK307CisKKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X3VhcnRfY2xrc3JjIHJ4MzcxNV9zZXJpYWxfY2xvY2tzW10gPSB7CisJWzBdID0geworCQkubmFtZQkJPSAiZmNsayIsCisJCS5kaXZpc29yCT0gMCwKKwkJLm1pbl9iYXVkCT0gMCwKKwkJLm1heF9iYXVkCT0gMCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyByeDM3MTVfdWFydGNmZ3NbXSA9IHsKKwlbMF0gPSB7CisJCS5od3BvcnQJICAgICA9IDAsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IDB4M2M1LAorCQkudWxjb24JICAgICA9IDB4MDMsCisJCS51ZmNvbgkgICAgID0gMHg1MSwKKwkJLmNsb2NrcwkgICAgID0gcngzNzE1X3NlcmlhbF9jbG9ja3MsCisJCS5jbG9ja3Nfc2l6ZSA9IEFSUkFZX1NJWkUocngzNzE1X3NlcmlhbF9jbG9ja3MpLAorCX0sCisJWzFdID0geworCQkuaHdwb3J0CSAgICAgPSAxLAorCQkuZmxhZ3MJICAgICA9IDAsCisJCS51Y29uCSAgICAgPSAweDNjNSwKKwkJLnVsY29uCSAgICAgPSAweDAzLAorCQkudWZjb24JICAgICA9IDB4MDAsCisJCS5jbG9ja3MJICAgICA9IHJ4MzcxNV9zZXJpYWxfY2xvY2tzLAorCQkuY2xvY2tzX3NpemUgPSBBUlJBWV9TSVpFKHJ4MzcxNV9zZXJpYWxfY2xvY2tzKSwKKwl9LAorCS8qIElSIHBvcnQgKi8KKwlbMl0gPSB7CisJCS5od3BvcnQJICAgICA9IDIsCisJCS51YXJ0X2ZsYWdzICA9IFVQRl9DT05TX0ZMT1csCisJCS51Y29uCSAgICAgPSAweDNjNSwKKwkJLnVsY29uCSAgICAgPSAweDQzLAorCQkudWZjb24JICAgICA9IDB4NTEsCisJCS5jbG9ja3MJICAgICA9IHJ4MzcxNV9zZXJpYWxfY2xvY2tzLAorCQkuY2xvY2tzX3NpemUgPSBBUlJBWV9TSVpFKHJ4MzcxNV9zZXJpYWxfY2xvY2tzKSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcngzNzE1X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzM2NfZGV2aWNlX3VzYiwKKwkmczNjX2RldmljZV9sY2QsCisJJnMzY19kZXZpY2Vfd2R0LAorCSZzM2NfZGV2aWNlX2kyYywKKwkmczNjX2RldmljZV9paXMsCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfYm9hcmQgcngzNzE1X2JvYXJkIF9faW5pdGRhdGEgPSB7CisJLmRldmljZXMgICAgICAgPSByeDM3MTVfZGV2aWNlcywKKwkuZGV2aWNlc19jb3VudCA9IEFSUkFZX1NJWkUocngzNzE1X2RldmljZXMpCit9OworCit2b2lkIF9faW5pdCByeDM3MTVfbWFwX2lvKHZvaWQpCit7CisJczNjMjR4eF9pbml0X2lvKHJ4MzcxNV9pb2Rlc2MsIEFSUkFZX1NJWkUocngzNzE1X2lvZGVzYykpOworCXMzYzI0eHhfaW5pdF9jbG9ja3MoMTY5MzQwMDApOworCXMzYzI0eHhfaW5pdF91YXJ0cyhyeDM3MTVfdWFydGNmZ3MsIEFSUkFZX1NJWkUocngzNzE1X3VhcnRjZmdzKSk7CisJczNjMjR4eF9zZXRfYm9hcmQoJnJ4MzcxNV9ib2FyZCk7Cit9CisKK3ZvaWQgX19pbml0IHJ4MzcxNV9pbml0X2lycSh2b2lkKQoreworCXMzYzI0eHhfaW5pdF9pcnEoKTsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIHZvaWQgX19pbml0IHJ4MzcxNV9pbml0X21hY2hpbmUodm9pZCkKK3sKKwlzM2MyNDEwX3BtX2luaXQoKTsKK30KKyNlbHNlCisjZGVmaW5lIHJ4MzcxNV9pbml0X21hY2hpbmUgTlVMTAorI2VuZGlmCisKK01BQ0hJTkVfU1RBUlQoUlgzNzE1LCAiSVBBUS1SWDM3MTUiKQorICAgICBNQUlOVEFJTkVSKCJCZW4gRG9va3MgPGJlbkBmbHVmZi5vcmc+IikKKyAgICAgQk9PVF9NRU0oUzNDMjQxMF9TRFJBTV9QQSwgUzNDMjQxMF9QQV9VQVJULCAodTMyKVMzQzI0WFhfVkFfVUFSVCkKKyAgICAgQk9PVF9QQVJBTVMoUzNDMjQxMF9TRFJBTV9QQSArIDB4MTAwKQorICAgICBNQVBJTyhyeDM3MTVfbWFwX2lvKQorICAgICBJTklUSVJRKHJ4MzcxNV9pbml0X2lycSkKKyAgICAgSU5JVF9NQUNISU5FKHJ4MzcxNV9pbml0X21hY2hpbmUpCisJLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYTRhMTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jCkBAIC0wLDAgKzEsMTIzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IGJ5IEZTIEZvcnRoLVN5c3RlbWUgR21iSAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAkSWQ6IG1hY2gtc21kazI0MTAuYyx2IDEuMSAyMDA0LzA1LzExIDE0OjE1OjM4IG1waWV0cmVrIEV4cCAkCisgKiBAQXV0aG9yOiBKb25hcyBEaWV0c2NoZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIEBIaXN0b3J5OgorICogZGVyaXZlZCBmcm9tIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYywgd3JpdHRlbiBieQorICogQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIDEwLU1hci0yMDA1IExDVlIgIENoYW5nZWQgUzNDMjQxMF9WQSB0byBTM0MyNFhYX1ZBCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmg+CisKKyNpbmNsdWRlICJkZXZzLmgiCisjaW5jbHVkZSAiY3B1LmgiCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgc21kazI0MTBfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKKyAgLyogbm90aGluZyBoZXJlIHlldCAqLworfTsKKworI2RlZmluZSBVQ09OIFMzQzI0MTBfVUNPTl9ERUZBVUxUCisjZGVmaW5lIFVMQ09OIFMzQzI0MTBfTENPTl9DUzggfCBTM0MyNDEwX0xDT05fUE5PTkUgfCBTM0MyNDEwX0xDT05fU1RPUEIKKyNkZWZpbmUgVUZDT04gUzNDMjQxMF9VRkNPTl9SWFRSSUc4IHwgUzNDMjQxMF9VRkNPTl9GSUZPTU9ERQorCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBzbWRrMjQxMF91YXJ0Y2Znc1tdID0geworCVswXSA9IHsKKwkJLmh3cG9ydAkgICAgID0gMCwKKwkJLmZsYWdzCSAgICAgPSAwLAorCQkudWNvbgkgICAgID0gVUNPTiwKKwkJLnVsY29uCSAgICAgPSBVTENPTiwKKwkJLnVmY29uCSAgICAgPSBVRkNPTiwKKwl9LAorCVsxXSA9IHsKKwkJLmh3cG9ydAkgICAgID0gMSwKKwkJLmZsYWdzCSAgICAgPSAwLAorCQkudWNvbgkgICAgID0gVUNPTiwKKwkJLnVsY29uCSAgICAgPSBVTENPTiwKKwkJLnVmY29uCSAgICAgPSBVRkNPTiwKKwl9LAorCVsyXSA9IHsKKwkJLmh3cG9ydAkgICAgID0gMiwKKwkJLmZsYWdzCSAgICAgPSAwLAorCQkudWNvbgkgICAgID0gVUNPTiwKKwkJLnVsY29uCSAgICAgPSBVTENPTiwKKwkJLnVmY29uCSAgICAgPSBVRkNPTiwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc21kazI0MTBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnMzY19kZXZpY2VfdXNiLAorCSZzM2NfZGV2aWNlX2xjZCwKKwkmczNjX2RldmljZV93ZHQsCisJJnMzY19kZXZpY2VfaTJjLAorCSZzM2NfZGV2aWNlX2lpcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF9ib2FyZCBzbWRrMjQxMF9ib2FyZCBfX2luaXRkYXRhID0geworCS5kZXZpY2VzICAgICAgID0gc21kazI0MTBfZGV2aWNlcywKKwkuZGV2aWNlc19jb3VudCA9IEFSUkFZX1NJWkUoc21kazI0MTBfZGV2aWNlcykKK307CisKK3ZvaWQgX19pbml0IHNtZGsyNDEwX21hcF9pbyh2b2lkKQoreworCXMzYzI0eHhfaW5pdF9pbyhzbWRrMjQxMF9pb2Rlc2MsIEFSUkFZX1NJWkUoc21kazI0MTBfaW9kZXNjKSk7CisJczNjMjR4eF9pbml0X2Nsb2NrcygwKTsKKwlzM2MyNHh4X2luaXRfdWFydHMoc21kazI0MTBfdWFydGNmZ3MsIEFSUkFZX1NJWkUoc21kazI0MTBfdWFydGNmZ3MpKTsKKwlzM2MyNHh4X3NldF9ib2FyZCgmc21kazI0MTBfYm9hcmQpOworfQorCit2b2lkIF9faW5pdCBzbWRrMjQxMF9pbml0X2lycSh2b2lkKQoreworCXMzYzI0eHhfaW5pdF9pcnEoKTsKK30KKworTUFDSElORV9TVEFSVChTTURLMjQxMCwgIlNNREsyNDEwIikgLyogQFRPRE86IHJlcXVlc3QgYSBuZXcgaWRlbnRpZmllciBhbmQgc3dpdGNoCisJCQkJICAgICogdG8gU01ESzI0MTAgKi8KKyAgICAgTUFJTlRBSU5FUigiSm9uYXMgRGlldHNjaGUiKQorICAgICBCT09UX01FTShTM0MyNDEwX1NEUkFNX1BBLCBTM0MyNDEwX1BBX1VBUlQsICh1MzIpUzNDMjRYWF9WQV9VQVJUKQorICAgICBCT09UX1BBUkFNUyhTM0MyNDEwX1NEUkFNX1BBICsgMHgxMDApCisgICAgIE1BUElPKHNtZGsyNDEwX21hcF9pbykKKyAgICAgSU5JVElSUShzbWRrMjQxMF9pbml0X2lycSkKKwkudGltZXIJCT0gJnMzYzI0eHhfdGltZXIsCitNQUNISU5FX0VORAorCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQ0MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NTcxNzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQ0MC5jCkBAIC0wLDAgKzEsMTM1IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQ0MC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0LDIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogaHR0cDovL3d3dy5mbHVmZi5vcmcvYmVuL3NtZGsyNDQwLworICoKKyAqIFRoYW5rcyB0byBEaW1pdHkgQW5kcmljIGFuZCBUb21Ub20gZm9yIHRoZSBsb2FuIG9mIGFuIFNNREsyNDQwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTW9kaWZpY2F0aW9uczoKKyAqCTAxLU5vdi0yMDA0IEJKRCAgIEluaXRpYWwgdmVyc2lvbgorICoJMTItTm92LTIwMDQgQkpEICAgVXBkYXRlZCBmb3IgcmVsZWFzZQorICoJMDQtSmFuLTIwMDUgQkpEICAgRml4ZXMgZm9yIHByZS1yZWxlYXNlCisgKgkyMi1GZWItMjAwNSBCSkQgICBVcGRhdGVkIGZvciAyLjYuMTEtcmM1IHJlbGVzYQorICoJMTAtTWFyLTIwMDUgTENWUiAgUmVwbGFjZWQgUzNDMjQxMF9WQSBieSBTM0MyNFhYX1ZBCisgKgkxNC1NYXItMjAwNSBCSkQJICB2b2lkIF9faW9tZW0gZml4ZXMKKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pb21kLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKy8vI2luY2x1ZGUgPGFzbS9kZWJ1Zy1sbC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaWRsZS5oPgorCisjaW5jbHVkZSAiczNjMjQxMC5oIgorI2luY2x1ZGUgInMzYzI0NDAuaCIKKyNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgImRldnMuaCIKKyNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlICJwbS5oIgorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHNtZGsyNDQwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJLyogSVNBIElPIFNwYWNlIG1hcCAobWVtb3J5IHNwYWNlIHNlbGVjdGVkIGJ5IEEyNCkgKi8KKworCXsgKHUzMilTM0MyNFhYX1ZBX0lTQV9XT1JELCBTM0MyNDEwX0NTMiwgU1pfMTZNLCBNVF9ERVZJQ0UgfSwKKwl7ICh1MzIpUzNDMjRYWF9WQV9JU0FfQllURSwgUzNDMjQxMF9DUzIsIFNaXzE2TSwgTVRfREVWSUNFIH0sCit9OworCisjZGVmaW5lIFVDT04gUzNDMjQxMF9VQ09OX0RFRkFVTFQgfCBTM0MyNDEwX1VDT05fVUNMSworI2RlZmluZSBVTENPTiBTM0MyNDEwX0xDT05fQ1M4IHwgUzNDMjQxMF9MQ09OX1BOT05FIHwgUzNDMjQxMF9MQ09OX1NUT1BCCisjZGVmaW5lIFVGQ09OIFMzQzI0MTBfVUZDT05fUlhUUklHOCB8IFMzQzI0MTBfVUZDT05fRklGT01PREUKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgc21kazI0NDBfdWFydGNmZ3NbXSA9IHsKKwlbMF0gPSB7CisJCS5od3BvcnQJICAgICA9IDAsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IDB4M2M1LAorCQkudWxjb24JICAgICA9IDB4MDMsCisJCS51ZmNvbgkgICAgID0gMHg1MSwKKwl9LAorCVsxXSA9IHsKKwkJLmh3cG9ydAkgICAgID0gMSwKKwkJLmZsYWdzCSAgICAgPSAwLAorCQkudWNvbgkgICAgID0gMHgzYzUsCisJCS51bGNvbgkgICAgID0gMHgwMywKKwkJLnVmY29uCSAgICAgPSAweDUxLAorCX0sCisJLyogSVIgcG9ydCAqLworCVsyXSA9IHsKKwkJLmh3cG9ydAkgICAgID0gMiwKKwkJLmZsYWdzCSAgICAgPSAwLAorCQkudWNvbgkgICAgID0gMHgzYzUsCisJCS51bGNvbgkgICAgID0gMHg0MywKKwkJLnVmY29uCSAgICAgPSAweDUxLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzbWRrMjQ0MF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmczNjX2RldmljZV91c2IsCisJJnMzY19kZXZpY2VfbGNkLAorCSZzM2NfZGV2aWNlX3dkdCwKKwkmczNjX2RldmljZV9pMmMsCisJJnMzY19kZXZpY2VfaWlzLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X2JvYXJkIHNtZGsyNDQwX2JvYXJkIF9faW5pdGRhdGEgPSB7CisJLmRldmljZXMgICAgICAgPSBzbWRrMjQ0MF9kZXZpY2VzLAorCS5kZXZpY2VzX2NvdW50ID0gQVJSQVlfU0laRShzbWRrMjQ0MF9kZXZpY2VzKQorfTsKKwordm9pZCBfX2luaXQgc21kazI0NDBfbWFwX2lvKHZvaWQpCit7CisJczNjMjR4eF9pbml0X2lvKHNtZGsyNDQwX2lvZGVzYywgQVJSQVlfU0laRShzbWRrMjQ0MF9pb2Rlc2MpKTsKKwlzM2MyNHh4X2luaXRfY2xvY2tzKDE2OTM0NDAwKTsKKwlzM2MyNHh4X2luaXRfdWFydHMoc21kazI0NDBfdWFydGNmZ3MsIEFSUkFZX1NJWkUoc21kazI0NDBfdWFydGNmZ3MpKTsKKwlzM2MyNHh4X3NldF9ib2FyZCgmc21kazI0NDBfYm9hcmQpOworfQorCit2b2lkIF9faW5pdCBzbWRrMjQ0MF9tYWNoaW5lX2luaXQodm9pZCkKK3sKKwkvKiBDb25maWd1cmUgdGhlIExFRHMgKGV2ZW4gaWYgd2UgaGF2ZSBubyBMRUQgc3VwcG9ydCkqLworCisJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRjQsIFMzQzI0MTBfR1BGNF9PVVRQKTsKKwlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BGNSwgUzNDMjQxMF9HUEY1X09VVFApOworCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEY2LCBTM0MyNDEwX0dQRjZfT1VUUCk7CisJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRjcsIFMzQzI0MTBfR1BGN19PVVRQKTsKKworCXMzYzI0MTBfZ3Bpb19zZXRwaW4oUzNDMjQxMF9HUEY0LCAwKTsKKwlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BGNSwgMCk7CisJczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQRjYsIDApOworCXMzYzI0MTBfZ3Bpb19zZXRwaW4oUzNDMjQxMF9HUEY3LCAwKTsKKworCXMzYzI0MTBfcG1faW5pdCgpOworfQorCitNQUNISU5FX1NUQVJUKFMzQzI0NDAsICJTTURLMjQ0MCIpCisJTUFJTlRBSU5FUigiQmVuIERvb2tzIDxiZW5AZmx1ZmYub3JnPiIpCisJQk9PVF9NRU0oUzNDMjQxMF9TRFJBTV9QQSwgUzNDMjQxMF9QQV9VQVJULCAodTMyKVMzQzI0WFhfVkFfVUFSVCkKKwlCT09UX1BBUkFNUyhTM0MyNDEwX1NEUkFNX1BBICsgMHgxMDApCisKKwkuaW5pdF9pcnEJPSBzM2MyNHh4X2luaXRfaXJxLAorCS5tYXBfaW8JCT0gc21kazI0NDBfbWFwX2lvLAorCS5pbml0X21hY2hpbmUJPSBzbWRrMjQ0MF9tYWNoaW5lX2luaXQsCisJLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZyMTAwMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxMjE0NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZyMTAwMC5jCkBAIC0wLDAgKzEsMzE3IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12cjEwMDAuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICogICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogTWFjaGluZSBzdXBwb3J0IGZvciBUaG9yY29tIFZSMTAwMCBib2FyZC4gRGVzaWduZWQgZm9yIFRob3Jjb20gYnkKKyAqIFNpbXRlYyBFbGVjdHJvbmljcywgaHR0cDovL3d3dy5zaW10ZWMuY28udWsvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBNb2RpZmljYXRpb25zOgorICogICAgIDE0LVNlcC0yMDA0IEJKRCAgVVNCIFBvd2VyIGNvbnRyb2wKKyAqICAgICAwNC1TZXAtMjAwNCBCSkQgIEFkZGVkIG5ldyB1YXJ0IGluaXQsIGFuZCBpbyBpbml0CisgKiAgICAgMjEtQXVnLTIwMDQgQkpEICBBZGRlZCBzdHJ1Y3QgczNjMjQxMF9ib2FyZAorICogICAgIDA2LUF1Zy0yMDA0IEJKRCAgRml4ZWQgY2FsbCB0byB0aW1lIGluaXRpYWxpc2F0aW9uCisgKiAgICAgMDUtQXByLTIwMDQgQkpEICBDb3BpZWQgdG8gbWFrZSBtYWNoLXZyMTAwMC5jCisgKiAgICAgMTgtT2N0LTIwMDQgQkpEICBVcGRhdGVkIGJvYXJkIHN0cnVjdAorICogICAgIDA0LU5vdi0yMDA0IEJKRCAgQ2xvY2sgYW5kIHNlcmlhbCBjb25maWd1cmF0aW9uIHVwZGF0ZQorICoKKyAqICAgICAwNC1KYW4tMjAwNSBCSkQgIFVwZGF0ZWQgdWFydCBpbml0IGNhbGwKKyAqICAgICAxMC1KYW4tMjAwNSBCSkQgIFJlbW92ZWQgaW5jbHVkZSBvZiBzM2MyNDEwLmgKKyAqICAgICAxNC1KYW4tMjAwNSBCSkQgIEFkZGVkIGNsb2NrIGluaXQKKyAqICAgICAxNS1KYW4tMjAwNSBCSkQgIEFkZCBzZXJpYWwgcG9ydCBkZXZpY2UgZGVmaW5pdGlvbgorICogICAgIDIwLUphbi0yMDA1IEJKRCAgVXNlIFVQRl9JT1JFTUFQIGZvciBwb3J0cworICogICAgIDEwLUZlYi0yMDA1IEJKRCAgQWRkZWQgcG93ZXItb2ZmIGNhcGFiaWxpdHkKKyAqICAgICAxMC1NYXItMjAwNSBMQ1ZSIENoYW5nZWQgUzNDMjQxMF9WQSB0byBTM0MyNFhYX1ZBCisgKiAgICAgMTQtTWFyLTIwMDYgQkpEICB2b2lkIF9faW9tZW0gZml4ZXMKKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvYmFzdC1tYXAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC92cjEwMDAtbWFwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdnIxMDAwLWlycS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3ZyMTAwMC1jcGxkLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgImRldnMuaCIKKyNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlICJ1c2Itc2ltdGVjLmgiCisKKy8qIG1hY3JvcyBmb3IgdmlydHVhbCBhZGRyZXNzIG1vZHMgZm9yIHRoZSBpbyBzcGFjZSBlbnRyaWVzICovCisjZGVmaW5lIFZBX0M1KGl0ZW0pICgodW5zaWduZWQgbG9uZykoaXRlbSkgKyBCQVNUX1ZBTV9DUzUpCisjZGVmaW5lIFZBX0M0KGl0ZW0pICgodW5zaWduZWQgbG9uZykoaXRlbSkgKyBCQVNUX1ZBTV9DUzQpCisjZGVmaW5lIFZBX0MzKGl0ZW0pICgodW5zaWduZWQgbG9uZykoaXRlbSkgKyBCQVNUX1ZBTV9DUzMpCisjZGVmaW5lIFZBX0MyKGl0ZW0pICgodW5zaWduZWQgbG9uZykoaXRlbSkgKyBCQVNUX1ZBTV9DUzIpCisKKy8qIG1hY3JvcyB0byBtb2RpZnkgdGhlIHBoeXNpY2FsIGFkZHJlc3NlcyBmb3IgaW8gc3BhY2UgKi8KKworI2RlZmluZSBQQV9DUzIoaXRlbSkgKChpdGVtKSArIFMzQzI0MTBfQ1MyKQorI2RlZmluZSBQQV9DUzMoaXRlbSkgKChpdGVtKSArIFMzQzI0MTBfQ1MzKQorI2RlZmluZSBQQV9DUzQoaXRlbSkgKChpdGVtKSArIFMzQzI0MTBfQ1M0KQorI2RlZmluZSBQQV9DUzUoaXRlbSkgKChpdGVtKSArIFMzQzI0MTBfQ1M1KQorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHZyMTAwMF9pb2Rlc2NbXSBfX2luaXRkYXRhID0geworICAvKiBJU0EgSU8gYXJlYXMgKi8KKworICB7ICh1MzIpUzNDMjRYWF9WQV9JU0FfQllURSwgUEFfQ1MyKEJBU1RfUEFfSVNBSU8pLAkgICBTWl8xNk0sIE1UX0RFVklDRSB9LAorICB7ICh1MzIpUzNDMjRYWF9WQV9JU0FfV09SRCwgUEFfQ1MzKEJBU1RfUEFfSVNBSU8pLAkgICBTWl8xNk0sIE1UX0RFVklDRSB9LAorCisgIC8qIHdlIGNvdWxkIHBvc3NpYmx5IGNvbXByZXNzIHRoZSBuZXh0IHNldCBkb3duIGludG8gYSBzZXQgb2Ygc21hbGxlciB0YWJsZXMKKyAgICogcGFnZXRhYmxlcywgYnV0IHRoYXQgd291bGQgbWVhbiB1c2luZyBhbiBMMiBzZWN0aW9uLCBhbmQgaXQgc3RpbGwgbWVhbnMKKyAgICogd2UgY2Fubm90IGFjdHVhbGx5IGZlZWQgdGhlIHNhbWUgcmVnaXN0ZXIgdG8gYW4gTERSIGR1ZSB0byAxNksgc3BhY2luZworICAgKi8KKworICAvKiBiYXN0IENQTEQgY29udHJvbCByZWdpc3RlcnMsIGFuZCBleHRlcm5hbCBpbnRlcnJ1cHQgY29udHJvbHMgKi8KKyAgeyAodTMyKVZSMTAwMF9WQV9DVFJMMSwgVlIxMDAwX1BBX0NUUkwxLAkgICAgICAgU1pfMU0sIE1UX0RFVklDRSB9LAorICB7ICh1MzIpVlIxMDAwX1ZBX0NUUkwyLCBWUjEwMDBfUEFfQ1RSTDIsCSAgICAgICBTWl8xTSwgTVRfREVWSUNFIH0sCisgIHsgKHUzMilWUjEwMDBfVkFfQ1RSTDMsIFZSMTAwMF9QQV9DVFJMMywJICAgICAgIFNaXzFNLCBNVF9ERVZJQ0UgfSwKKyAgeyAodTMyKVZSMTAwMF9WQV9DVFJMNCwgVlIxMDAwX1BBX0NUUkw0LAkgICAgICAgU1pfMU0sIE1UX0RFVklDRSB9LAorCisgIC8qIHBlcmlwaGVyYWwgc3BhY2UuLi4gb25lIGZvciBlYWNoIG9mIGZhc3Qvc2xvdy9ieXRlLzE2Yml0ICovCisgIC8qIG5vdGUsIGlkZSBpcyBvbmx5IGRlY29kZWQgaW4gd29yZCBzcGFjZSwgZXZlbiB0aG91Z2ggc29tZSByZWdpc3RlcnMKKyAgICogYXJlIG9ubHkgOGJpdCAqLworCisgIC8qIHNsb3csIGJ5dGUgKi8KKyAgeyBWQV9DMihWUjEwMDBfVkFfRE05MDAwKSwgIFBBX0NTMihWUjEwMDBfUEFfRE05MDAwKSwJICBTWl8xTSwgIE1UX0RFVklDRSB9LAorICB7IFZBX0MyKFZSMTAwMF9WQV9JREVQUkkpLCAgUEFfQ1MzKFZSMTAwMF9QQV9JREVQUkkpLAkgIFNaXzFNLCAgTVRfREVWSUNFIH0sCisgIHsgVkFfQzIoVlIxMDAwX1ZBX0lERVNFQyksICBQQV9DUzMoVlIxMDAwX1BBX0lERVNFQyksCSAgU1pfMU0sICBNVF9ERVZJQ0UgfSwKKyAgeyBWQV9DMihWUjEwMDBfVkFfSURFUFJJQVVYKSwgUEFfQ1MzKFZSMTAwMF9QQV9JREVQUklBVVgpLCBTWl8xTSwgTVRfREVWSUNFIH0sCisgIHsgVkFfQzIoVlIxMDAwX1ZBX0lERVNFQ0FVWCksIFBBX0NTMyhWUjEwMDBfUEFfSURFU0VDQVVYKSwgU1pfMU0sIE1UX0RFVklDRSB9LAorCisgIC8qIHNsb3csIHdvcmQgKi8KKyAgeyBWQV9DMyhWUjEwMDBfVkFfRE05MDAwKSwgIFBBX0NTMyhWUjEwMDBfUEFfRE05MDAwKSwJICBTWl8xTSwgIE1UX0RFVklDRSB9LAorICB7IFZBX0MzKFZSMTAwMF9WQV9JREVQUkkpLCAgUEFfQ1MzKFZSMTAwMF9QQV9JREVQUkkpLAkgIFNaXzFNLCAgTVRfREVWSUNFIH0sCisgIHsgVkFfQzMoVlIxMDAwX1ZBX0lERVNFQyksICBQQV9DUzMoVlIxMDAwX1BBX0lERVNFQyksCSAgU1pfMU0sICBNVF9ERVZJQ0UgfSwKKyAgeyBWQV9DMyhWUjEwMDBfVkFfSURFUFJJQVVYKSwgUEFfQ1MzKFZSMTAwMF9QQV9JREVQUklBVVgpLCBTWl8xTSwgTVRfREVWSUNFIH0sCisgIHsgVkFfQzMoVlIxMDAwX1ZBX0lERVNFQ0FVWCksIFBBX0NTMyhWUjEwMDBfUEFfSURFU0VDQVVYKSwgU1pfMU0sIE1UX0RFVklDRSB9LAorCisgIC8qIGZhc3QsIGJ5dGUgKi8KKyAgeyBWQV9DNChWUjEwMDBfVkFfRE05MDAwKSwgIFBBX0NTNChWUjEwMDBfUEFfRE05MDAwKSwJICBTWl8xTSwgIE1UX0RFVklDRSB9LAorICB7IFZBX0M0KFZSMTAwMF9WQV9JREVQUkkpLCAgUEFfQ1M1KFZSMTAwMF9QQV9JREVQUkkpLAkgIFNaXzFNLCAgTVRfREVWSUNFIH0sCisgIHsgVkFfQzQoVlIxMDAwX1ZBX0lERVNFQyksICBQQV9DUzUoVlIxMDAwX1BBX0lERVNFQyksCSAgU1pfMU0sICBNVF9ERVZJQ0UgfSwKKyAgeyBWQV9DNChWUjEwMDBfVkFfSURFUFJJQVVYKSwgUEFfQ1M1KFZSMTAwMF9QQV9JREVQUklBVVgpLCBTWl8xTSwgTVRfREVWSUNFIH0sCisgIHsgVkFfQzQoVlIxMDAwX1ZBX0lERVNFQ0FVWCksIFBBX0NTNShWUjEwMDBfUEFfSURFU0VDQVVYKSwgU1pfMU0sIE1UX0RFVklDRSB9LAorCisgIC8qIGZhc3QsIHdvcmQgKi8KKyAgeyBWQV9DNShWUjEwMDBfVkFfRE05MDAwKSwgIFBBX0NTNShWUjEwMDBfUEFfRE05MDAwKSwJICBTWl8xTSwgIE1UX0RFVklDRSB9LAorICB7IFZBX0M1KFZSMTAwMF9WQV9JREVQUkkpLCAgUEFfQ1M1KFZSMTAwMF9QQV9JREVQUkkpLAkgIFNaXzFNLCAgTVRfREVWSUNFIH0sCisgIHsgVkFfQzUoVlIxMDAwX1ZBX0lERVNFQyksICBQQV9DUzUoVlIxMDAwX1BBX0lERVNFQyksCSAgU1pfMU0sICBNVF9ERVZJQ0UgfSwKKyAgeyBWQV9DNShWUjEwMDBfVkFfSURFUFJJQVVYKSwgUEFfQ1M1KFZSMTAwMF9QQV9JREVQUklBVVgpLCBTWl8xTSwgTVRfREVWSUNFIH0sCisgIHsgVkFfQzUoVlIxMDAwX1ZBX0lERVNFQ0FVWCksIFBBX0NTNShWUjEwMDBfUEFfSURFU0VDQVVYKSwgU1pfMU0sIE1UX0RFVklDRSB9LAorfTsKKworI2RlZmluZSBVQ09OIFMzQzI0MTBfVUNPTl9ERUZBVUxUIHwgUzNDMjQxMF9VQ09OX1VDTEsKKyNkZWZpbmUgVUxDT04gUzNDMjQxMF9MQ09OX0NTOCB8IFMzQzI0MTBfTENPTl9QTk9ORSB8IFMzQzI0MTBfTENPTl9TVE9QQgorI2RlZmluZSBVRkNPTiBTM0MyNDEwX1VGQ09OX1JYVFJJRzggfCBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCisKKy8qIHVhcnQgY2xvY2sgc291cmNlKHMpICovCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF91YXJ0X2Nsa3NyYyB2cjEwMDBfc2VyaWFsX2Nsb2Nrc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJCT0gInVjbGsiLAorCQkuZGl2aXNvcgk9IDEsCisJCS5taW5fYmF1ZAk9IDAsCisJCS5tYXhfYmF1ZAk9IDAsCisJfSwKKwlbMV0gPSB7CisJCS5uYW1lCQk9ICJwY2xrIiwKKwkJLmRpdmlzb3IJPSAxLAorCQkubWluX2JhdWQJPSAwLAorCQkubWF4X2JhdWQJPSAwLgorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIHZyMTAwMF91YXJ0Y2Znc1tdID0geworCVswXSA9IHsKKwkJLmh3cG9ydAkgICAgID0gMCwKKwkJLmZsYWdzCSAgICAgPSAwLAorCQkudWNvbgkgICAgID0gVUNPTiwKKwkJLnVsY29uCSAgICAgPSBVTENPTiwKKwkJLnVmY29uCSAgICAgPSBVRkNPTiwKKwkJLmNsb2NrcwkgICAgID0gdnIxMDAwX3NlcmlhbF9jbG9ja3MsCisJCS5jbG9ja3Nfc2l6ZSA9IEFSUkFZX1NJWkUodnIxMDAwX3NlcmlhbF9jbG9ja3MpLAorCX0sCisJWzFdID0geworCQkuaHdwb3J0CSAgICAgPSAxLAorCQkuZmxhZ3MJICAgICA9IDAsCisJCS51Y29uCSAgICAgPSBVQ09OLAorCQkudWxjb24JICAgICA9IFVMQ09OLAorCQkudWZjb24JICAgICA9IFVGQ09OLAorCQkuY2xvY2tzCSAgICAgPSB2cjEwMDBfc2VyaWFsX2Nsb2NrcywKKwkJLmNsb2Nrc19zaXplID0gQVJSQVlfU0laRSh2cjEwMDBfc2VyaWFsX2Nsb2NrcyksCisJfSwKKwkvKiBwb3J0IDIgaXMgbm90IGFjdHVhbGx5IHVzZWQgKi8KKwlbMl0gPSB7CisJCS5od3BvcnQJICAgICA9IDIsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJCS5jbG9ja3MJICAgICA9IHZyMTAwMF9zZXJpYWxfY2xvY2tzLAorCQkuY2xvY2tzX3NpemUgPSBBUlJBWV9TSVpFKHZyMTAwMF9zZXJpYWxfY2xvY2tzKSwKKworCX0KK307CisKKy8qIGRlZmluaXRpb25zIGZvciB0aGUgdnIxMDAwIGV4dHJhIDE2NTUwIHNlcmlhbCBwb3J0cyAqLworCisjZGVmaW5lIFZSMTAwMF9CQVVEQkFTRSAoMzY5MjMwNykKKworI2RlZmluZSBWUjEwMDBfU0VSSUFMX01BUEJBU0UoeCkgKFZSMTAwMF9QQV9TRVJJQUwgKyAweDgwICsgKCh4KSA8PCA1KSkKKworc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0geworCVswXSA9IHsKKwkJLm1hcGJhc2UJPSBWUjEwMDBfU0VSSUFMX01BUEJBU0UoMCksCisJCS5pcnEJCT0gSVJRX1ZSMTAwMF9TRVJJQUwgKyAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfSU9SRU1BUCwKKwkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwkJLnJlZ3NoaWZ0CT0gMCwKKwkJLnVhcnRjbGsJPSBWUjEwMDBfQkFVREJBU0UsCisJfSwKKwlbMV0gPSB7CisJCS5tYXBiYXNlCT0gVlIxMDAwX1NFUklBTF9NQVBCQVNFKDEpLAorCQkuaXJxCQk9IElSUV9WUjEwMDBfU0VSSUFMICsgMSwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX0lPUkVNQVAsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5yZWdzaGlmdAk9IDAsCisJCS51YXJ0Y2xrCT0gVlIxMDAwX0JBVURCQVNFLAorCX0sCisJWzJdID0geworCQkubWFwYmFzZQk9IFZSMTAwMF9TRVJJQUxfTUFQQkFTRSgyKSwKKwkJLmlycQkJPSBJUlFfVlIxMDAwX1NFUklBTCArIDIsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9JT1JFTUFQLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAwLAorCQkudWFydGNsawk9IFZSMTAwMF9CQVVEQkFTRSwKKwl9LAorCVszXSA9IHsKKwkJLm1hcGJhc2UJPSBWUjEwMDBfU0VSSUFMX01BUEJBU0UoMyksCisJCS5pcnEJCT0gSVJRX1ZSMTAwMF9TRVJJQUwgKyAzLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfSU9SRU1BUCwKKwkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwkJLnJlZ3NoaWZ0CT0gMCwKKwkJLnVhcnRjbGsJPSBWUjEwMDBfQkFVREJBU0UsCisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZXJpYWxfZGV2aWNlID0geworCS5uYW1lCQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQkJPSAwLAorCS5kZXYJCQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSBzZXJpYWxfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworLyogTVREIE5PUiBGbGFzaCAqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHZyMTAwMF9ub3JfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFMzQzI0MTBfQ1MxICsgMHg0MDAwMDAwLAorCQkuZW5kCT0gUzNDMjQxMF9DUzEgKyAweDQwMDAwMDAgKyBTWl8xNk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2cjEwMDBfbm9yID0geworCS5uYW1lCQk9ICJiYXN0LW5vciIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh2cjEwMDBfbm9yX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSB2cjEwMDBfbm9yX3Jlc291cmNlLAorfTsKKworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdnIxMDAwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzM2NfZGV2aWNlX3VzYiwKKwkmczNjX2RldmljZV9sY2QsCisJJnMzY19kZXZpY2Vfd2R0LAorCSZzM2NfZGV2aWNlX2kyYywKKwkmczNjX2RldmljZV9paXMsCisJJnNlcmlhbF9kZXZpY2UsCisJJnZyMTAwMF9ub3IsCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqdnIxMDAwX2Nsb2Nrc1tdID0geworCSZzM2MyNHh4X2RjbGswLAorCSZzM2MyNHh4X2RjbGsxLAorCSZzM2MyNHh4X2Nsa291dDAsCisJJnMzYzI0eHhfY2xrb3V0MSwKKwkmczNjMjR4eF91Y2xrLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X2JvYXJkIHZyMTAwMF9ib2FyZCBfX2luaXRkYXRhID0geworCS5kZXZpY2VzICAgICAgID0gdnIxMDAwX2RldmljZXMsCisJLmRldmljZXNfY291bnQgPSBBUlJBWV9TSVpFKHZyMTAwMF9kZXZpY2VzKSwKKwkuY2xvY2tzCSAgICAgICA9IHZyMTAwMF9jbG9ja3MsCisJLmNsb2Nrc19jb3VudCAgPSBBUlJBWV9TSVpFKHZyMTAwMF9jbG9ja3MpLAorfTsKKworc3RhdGljIHZvaWQgdnIxMDAwX3Bvd2VyX29mZih2b2lkKQoreworCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEI5LCBTM0MyNDEwX0dQQjlfT1VUUCk7CisJczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQQjksIDEpOworfQorCit2b2lkIF9faW5pdCB2cjEwMDBfbWFwX2lvKHZvaWQpCit7CisJLyogaW5pdGlhbGlzZSBjbG9jayBzb3VyY2VzICovCisKKwlzM2MyNHh4X2RjbGswLnBhcmVudCA9IE5VTEw7CisJczNjMjR4eF9kY2xrMC5yYXRlICAgPSAxMioxMDAwKjEwMDA7CisKKwlzM2MyNHh4X2RjbGsxLnBhcmVudCA9IE5VTEw7CisJczNjMjR4eF9kY2xrMS5yYXRlICAgPSAzNjkyMzA3OworCisJczNjMjR4eF9jbGtvdXQwLnBhcmVudCAgPSAmczNjMjR4eF9kY2xrMDsKKwlzM2MyNHh4X2Nsa291dDEucGFyZW50ICA9ICZzM2MyNHh4X2RjbGsxOworCisJczNjMjR4eF91Y2xrLnBhcmVudCAgPSAmczNjMjR4eF9jbGtvdXQxOworCisJcG1fcG93ZXJfb2ZmID0gdnIxMDAwX3Bvd2VyX29mZjsKKworCXMzYzI0eHhfaW5pdF9pbyh2cjEwMDBfaW9kZXNjLCBBUlJBWV9TSVpFKHZyMTAwMF9pb2Rlc2MpKTsKKwlzM2MyNHh4X2luaXRfY2xvY2tzKDApOworCXMzYzI0eHhfaW5pdF91YXJ0cyh2cjEwMDBfdWFydGNmZ3MsIEFSUkFZX1NJWkUodnIxMDAwX3VhcnRjZmdzKSk7CisJczNjMjR4eF9zZXRfYm9hcmQoJnZyMTAwMF9ib2FyZCk7CisJdXNiX3NpbXRlY19pbml0KCk7Cit9CisKK3ZvaWQgX19pbml0IHZyMTAwMF9pbml0X2lycSh2b2lkKQoreworCXMzYzI0eHhfaW5pdF9pcnEoKTsKK30KKworTUFDSElORV9TVEFSVChWUjEwMDAsICJUaG9yY29tLVZSMTAwMCIpCisgICAgIE1BSU5UQUlORVIoIkJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4iKQorICAgICBCT09UX01FTShTM0MyNDEwX1NEUkFNX1BBLCBTM0MyNDEwX1BBX1VBUlQsICh1MzIpUzNDMjRYWF9WQV9VQVJUKQorICAgICBCT09UX1BBUkFNUyhTM0MyNDEwX1NEUkFNX1BBICsgMHgxMDApCisgICAgIE1BUElPKHZyMTAwMF9tYXBfaW8pCisgICAgIElOSVRJUlEodnIxMDAwX2luaXRfaXJxKQorCS50aW1lcgkJPSAmczNjMjR4eF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYTQ4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYwpAQCAtMCwwICsxLDY3MiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjQxMCBQb3dlciBNYW5hZ2VyIChTdXNwZW5kLVRvLVJBTSkgc3VwcG9ydAorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvU3VzcGVuZC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogUGFydHMgYmFzZWQgb24gYXJjaC9hcm0vbWFjaC1weGEvcG0uYworICoKKyAqIFRoYW5rcyB0byBEaW1pdHJ5IEFuZHJpYyBmb3IgZGVidWdnaW5nCisgKgorICogTW9kaWZpY2F0aW9uczoKKyAqICAgICAxMC1NYXItMjAwNSBMQ1ZSICBDaGFuZ2VkIFMzQzI0MTBfVkFfVUFSVCB0byBTM0MyNFhYX1ZBX1VBUlQKKyovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWNsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1tZW0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWlycS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisjaW5jbHVkZSAicG0uaCIKKworLyogZm9yIGV4dGVybmFsIHVzZSAqLworCit1bnNpZ25lZCBsb25nIHMzY19wbV9mbGFnczsKKworLyogY2FjaGUgZnVuY3Rpb25zIGZyb20gYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUyAqLworCitleHRlcm4gdm9pZCBhcm05MjBfZmx1c2hfa2Vybl9jYWNoZV9hbGwodm9pZCk7CisKKyNkZWZpbmUgUEZYICJzM2MyNHh4LXBtOiAiCisKK3N0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBjb3JlX3NhdmVbXSA9IHsKKwlTQVZFX0lURU0oUzNDMjQxMF9MT0NLVElNRSksCisJU0FWRV9JVEVNKFMzQzI0MTBfQ0xLQ09OKSwKKworCS8qIHdlIHJlc3RvcmUgdGhlIHRpbWluZ3MgaGVyZSwgd2l0aCB0aGUgcHJvdmlzbyB0aGF0IHRoZSBib2FyZAorCSAqIGJyaW5ncyB0aGUgc3lzdGVtIHVwIGluIGFuIHNsb3dlciwgb3IgZXF1YWwgZnJlcXVlbmN5IHNldHRpbmcKKwkgKiB0byB0aGUgb3JpZ2luYWwgc3lzdGVtLgorCSAqCisJICogaWYgd2UgY2Fubm90IGd1YXJhbnRlZSB0aGlzLCB0aGVuIHRoaW5ncyBhcmUgZ29pbmcgdG8gZ28gdmVyeQorCSAqIHdyb25nIGhlcmUsIGFzIHdlIG1vZGlmeSB0aGUgcmVmcmVzaCBhbmQgYm90aCBwbGwgc2V0dGluZ3MuCisJICovCisKKwlTQVZFX0lURU0oUzNDMjQxMF9CV1NDT04pLAorCVNBVkVfSVRFTShTM0MyNDEwX0JBTktDT04wKSwKKwlTQVZFX0lURU0oUzNDMjQxMF9CQU5LQ09OMSksCisJU0FWRV9JVEVNKFMzQzI0MTBfQkFOS0NPTjIpLAorCVNBVkVfSVRFTShTM0MyNDEwX0JBTktDT04zKSwKKwlTQVZFX0lURU0oUzNDMjQxMF9CQU5LQ09ONCksCisJU0FWRV9JVEVNKFMzQzI0MTBfQkFOS0NPTjUpLAorCisJU0FWRV9JVEVNKFMzQzI0MTBfQ0xLRElWTiksCisJU0FWRV9JVEVNKFMzQzI0MTBfTVBMTENPTiksCisJU0FWRV9JVEVNKFMzQzI0MTBfVVBMTENPTiksCisJU0FWRV9JVEVNKFMzQzI0MTBfQ0xLU0xPVyksCisJU0FWRV9JVEVNKFMzQzI0MTBfUkVGUkVTSCksCit9OworCisvKiB0aGlzIGxvdCBzaG91bGQgYmUgcmVhbGx5IHNhdmVkIGJ5IHRoZSBJUlEgY29kZSAqLworc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIGlycV9zYXZlW10gPSB7CisJU0FWRV9JVEVNKFMzQzI0MTBfRVhUSU5UMCksCisJU0FWRV9JVEVNKFMzQzI0MTBfRVhUSU5UMSksCisJU0FWRV9JVEVNKFMzQzI0MTBfRVhUSU5UMiksCisJU0FWRV9JVEVNKFMzQzI0MTBfRUlORkxUMCksCisJU0FWRV9JVEVNKFMzQzI0MTBfRUlORkxUMSksCisJU0FWRV9JVEVNKFMzQzI0MTBfRUlORkxUMiksCisJU0FWRV9JVEVNKFMzQzI0MTBfRUlORkxUMyksCisJU0FWRV9JVEVNKFMzQzI0MTBfRUlOVE1BU0spLAorCVNBVkVfSVRFTShTM0MyNDEwX0lOVE1TSykKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBncGlvX3NhdmVbXSA9IHsKKwlTQVZFX0lURU0oUzNDMjQxMF9HUEFDT04pLAorCVNBVkVfSVRFTShTM0MyNDEwX0dQQURBVCksCisKKwlTQVZFX0lURU0oUzNDMjQxMF9HUEJDT04pLAorCVNBVkVfSVRFTShTM0MyNDEwX0dQQkRBVCksCisJU0FWRV9JVEVNKFMzQzI0MTBfR1BCVVApLAorCisJU0FWRV9JVEVNKFMzQzI0MTBfR1BDQ09OKSwKKwlTQVZFX0lURU0oUzNDMjQxMF9HUENEQVQpLAorCVNBVkVfSVRFTShTM0MyNDEwX0dQQ1VQKSwKKworCVNBVkVfSVRFTShTM0MyNDEwX0dQRENPTiksCisJU0FWRV9JVEVNKFMzQzI0MTBfR1BEREFUKSwKKwlTQVZFX0lURU0oUzNDMjQxMF9HUERVUCksCisKKwlTQVZFX0lURU0oUzNDMjQxMF9HUEVDT04pLAorCVNBVkVfSVRFTShTM0MyNDEwX0dQRURBVCksCisJU0FWRV9JVEVNKFMzQzI0MTBfR1BFVVApLAorCisJU0FWRV9JVEVNKFMzQzI0MTBfR1BGQ09OKSwKKwlTQVZFX0lURU0oUzNDMjQxMF9HUEZEQVQpLAorCVNBVkVfSVRFTShTM0MyNDEwX0dQRlVQKSwKKworCVNBVkVfSVRFTShTM0MyNDEwX0dQR0NPTiksCisJU0FWRV9JVEVNKFMzQzI0MTBfR1BHREFUKSwKKwlTQVZFX0lURU0oUzNDMjQxMF9HUEdVUCksCisKKwlTQVZFX0lURU0oUzNDMjQxMF9HUEhDT04pLAorCVNBVkVfSVRFTShTM0MyNDEwX0dQSERBVCksCisJU0FWRV9JVEVNKFMzQzI0MTBfR1BIVVApLAorCisJU0FWRV9JVEVNKFMzQzI0MTBfRENMS0NPTiksCit9OworCisjaWZkZWYgQ09ORklHX1MzQzI0MTBfUE1fREVCVUcKKworI2RlZmluZSBTQVZFX1VBUlQodmEpIFwKKwlTQVZFX0lURU0oKHZhKSArIFMzQzI0MTBfVUxDT04pLCBcCisJU0FWRV9JVEVNKCh2YSkgKyBTM0MyNDEwX1VDT04pLCBcCisJU0FWRV9JVEVNKCh2YSkgKyBTM0MyNDEwX1VGQ09OKSwgXAorCVNBVkVfSVRFTSgodmEpICsgUzNDMjQxMF9VTUNPTiksIFwKKwlTQVZFX0lURU0oKHZhKSArIFMzQzI0MTBfVUJSRElWKQorCitzdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgdWFydF9zYXZlW10gPSB7CisJU0FWRV9VQVJUKFMzQzI0WFhfVkFfVUFSVDApLAorCVNBVkVfVUFSVChTM0MyNFhYX1ZBX1VBUlQxKSwKKyNpZm5kZWYgQ09ORklHX0NQVV9TM0MyNDAwCisJU0FWRV9VQVJUKFMzQzI0WFhfVkFfVUFSVDIpLAorI2VuZGlmCit9OworCisvKiBkZWJ1ZworICoKKyAqIHdlIHNlbmQgdGhlIGRlYnVnIHRvIHByaW50YXNjaWkoKSB0byBhbGxvdyBpdCB0byBiZSBzZWVuIGlmIHRoZQorICogc3lzdGVtIG5ldmVyIHdha2VzIHVwIGZyb20gdGhlIHNsZWVwCisqLworCitleHRlcm4gdm9pZCBwcmludGFzY2lpKGNvbnN0IGNoYXIgKik7CisKK3N0YXRpYyB2b2lkIHBtX2RiZyhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IHZhOworCWNoYXIgYnVmZlsyNTZdOworCisJdmFfc3RhcnQodmEsIGZtdCk7CisJdnNwcmludGYoYnVmZiwgZm10LCB2YSk7CisJdmFfZW5kKHZhKTsKKworCXByaW50YXNjaWkoYnVmZik7Cit9CisKK3N0YXRpYyB2b2lkIHMzYzI0MTBfcG1fZGVidWdfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdG1wID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtDT04pOworCisJLyogcmUtc3RhcnQgdWFydCBjbG9ja3MgKi8KKwl0bXAgfD0gUzNDMjQxMF9DTEtDT05fVUFSVDA7CisJdG1wIHw9IFMzQzI0MTBfQ0xLQ09OX1VBUlQxOworCXRtcCB8PSBTM0MyNDEwX0NMS0NPTl9VQVJUMjsKKworCV9fcmF3X3dyaXRlbCh0bXAsIFMzQzI0MTBfQ0xLQ09OKTsKKwl1ZGVsYXkoMTApOworfQorCisjZGVmaW5lIERCRyhmbXQuLi4pIHBtX2RiZyhmbXQpCisjZWxzZQorI2RlZmluZSBEQkcoZm10Li4uKSBwcmludGsoS0VSTl9ERUJVRyBmbXQpCisKKyNkZWZpbmUgczNjMjQxMF9wbV9kZWJ1Z19pbml0KCkgZG8geyB9IHdoaWxlKDApCisKK3N0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSB1YXJ0X3NhdmVbXSA9IHt9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TM0MyNDEwX1BNX0NIRUNLKSAmJiBDT05GSUdfUzNDMjQxMF9QTV9DSEVDS19DSFVOS1NJWkUgIT0gMAorCisvKiBzdXNwZW5kIGNoZWNraW5nIGNvZGUuLi4KKyAqCisgKiB0aGlzIG5leHQgYXJlYSBkb2VzIGEgc2V0IG9mIGNyYyBjaGVja3Mgb3ZlciBhbGwgdGhlIGluc3RhbGxlZAorICogbWVtb3J5LCBzbyB0aGUgc3lzdGVtIGNhbiB2ZXJpZnkgaWYgdGhlIHJlc3VtZSB3YXMgb2suCisgKgorICogQ09ORklHX1MzQzI0MTBfUE1fQ0hFQ0tfQ0hVTktTSVpFIGRlZmluZXMgdGhlIGJsb2NrLXNpemUgZm9yIHRoZSBDUkMsCisgKiBpbmNyZWFzaW5nIGl0IHdpbGwgbWVhbiB0aGF0IHRoZSBhcmVhIGNvcnJ1cHRlZCB3aWxsIGJlIGxlc3MgZWFzeSB0byBzcG90LAorICogYW5kIHJlZHVjaW5nIHRoZSBzaXplIHdpbGwgY2F1c2UgdGhlIENSQyBzYXZlIGFyZWEgdG8gZ3JvdworKi8KKworI2RlZmluZSBDSEVDS19DSFVOS1NJWkUgKENPTkZJR19TM0MyNDEwX1BNX0NIRUNLX0NIVU5LU0laRSAqIDEwMjQpCisKK3N0YXRpYyB1MzIgY3JjX3NpemU7CS8qIHNpemUgbmVlZGVkIGZvciB0aGUgY3JjIGJsb2NrICovCitzdGF0aWMgdTMyICpjcmNzOwkvKiBhbGxvY2F0ZWQgb3ZlciBzdXNwZW5kL3Jlc3VtZSAqLworCit0eXBlZGVmIHUzMiAqKHJ1bl9mbl90KShzdHJ1Y3QgcmVzb3VyY2UgKnB0ciwgdTMyICphcmcpOworCisvKiBzM2MyNDEwX3BtX3J1bl9yZXMKKyAqCisgKiBnbyB0aG9ydWdoIHRoZSBnaXZlbiByZXNvdXJjZSBsaXN0LCBhbmQgbG9vayBmb3Igc3lzdGVtIHJhbQorKi8KKworc3RhdGljIHZvaWQgczNjMjQxMF9wbV9ydW5fcmVzKHN0cnVjdCByZXNvdXJjZSAqcHRyLCBydW5fZm5fdCBmbiwgdTMyICphcmcpCit7CisJd2hpbGUgKHB0ciAhPSBOVUxMKSB7CisJCWlmIChwdHItPmNoaWxkICE9IE5VTEwpCisJCQlzM2MyNDEwX3BtX3J1bl9yZXMocHRyLT5jaGlsZCwgZm4sIGFyZyk7CisKKwkJaWYgKChwdHItPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pICYmCisJCSAgICBzdHJjbXAocHRyLT5uYW1lLCAiU3lzdGVtIFJBTSIpID09IDApIHsKKwkJCURCRygiRm91bmQgc3lzdGVtIFJBTSBhdCAlMDhseC4uJTA4bHhcbiIsCisJCQkgICAgcHRyLT5zdGFydCwgcHRyLT5lbmQpOworCQkJYXJnID0gKGZuKShwdHIsIGFyZyk7CisJCX0KKworCQlwdHIgPSBwdHItPnNpYmxpbmc7CisJfQorfQorCitzdGF0aWMgdm9pZCBzM2MyNDEwX3BtX3J1bl9zeXNyYW0ocnVuX2ZuX3QgZm4sIHUzMiAqYXJnKQoreworCXMzYzI0MTBfcG1fcnVuX3JlcygmaW9tZW1fcmVzb3VyY2UsIGZuLCBhcmcpOworfQorCitzdGF0aWMgdTMyICpzM2MyNDEwX3BtX2NvdW50cmFtKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgKnZhbCkKK3sKKwl1MzIgc2l6ZSA9ICh1MzIpKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkrMTsKKworCXNpemUgKz0gQ0hFQ0tfQ0hVTktTSVpFLTE7CisJc2l6ZSAvPSBDSEVDS19DSFVOS1NJWkU7CisKKwlEQkcoIkFyZWEgJTA4bHguLiUwOGx4LCAlZCBibG9ja3NcbiIsIHJlcy0+c3RhcnQsIHJlcy0+ZW5kLCBzaXplKTsKKworCSp2YWwgKz0gc2l6ZSAqIHNpemVvZih1MzIpOworCXJldHVybiB2YWw7Cit9CisKKy8qIHMzYzI0MTBfcG1fcHJlcGFyZV9jaGVjaworICoKKyAqIHByZXBhcmUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmb3IgY3JlYXRpbmcgdGhlIENSQ3MuIFRoaXMKKyAqIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhlIGZpbmFsIHNhdmUsIGFzIGl0IHdpbGwgcmVxdWlyZSBtZW1vcnkKKyAqIGFsbG9jYXRpbmcsIGFuZCB0aHVzIHRvdWNoaW5nIGJpdHMgb2YgdGhlIGtlcm5lbCB3ZSBkbyBub3QKKyAqIGtub3cgYWJvdXQuCisqLworCitzdGF0aWMgdm9pZCBzM2MyNDEwX3BtX2NoZWNrX3ByZXBhcmUodm9pZCkKK3sKKwljcmNfc2l6ZSA9IDA7CisKKwlzM2MyNDEwX3BtX3J1bl9zeXNyYW0oczNjMjQxMF9wbV9jb3VudHJhbSwgJmNyY19zaXplKTsKKworCURCRygiczNjMjQxMF9wbV9wcmVwYXJlX2NoZWNrOiAldSBjaGVja3MgbmVlZGVkXG4iLCBjcmNfc2l6ZSk7CisKKwljcmNzID0ga21hbGxvYyhjcmNfc2l6ZSs0LCBHRlBfS0VSTkVMKTsKKwlpZiAoY3JjcyA9PSBOVUxMKQorCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBhbGxvY2F0ZWQgQ1JDIHNhdmUgYXJlYVxuIik7Cit9CisKK3N0YXRpYyB1MzIgKnMzYzI0MTBfcG1fbWFrZWNoZWNrKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgKnZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIsIGxlZnQ7CisKKwlmb3IgKGFkZHIgPSByZXMtPnN0YXJ0OyBhZGRyIDwgcmVzLT5lbmQ7CisJICAgICBhZGRyICs9IENIRUNLX0NIVU5LU0laRSkgeworCQlsZWZ0ID0gcmVzLT5lbmQgLSBhZGRyOworCisJCWlmIChsZWZ0ID4gQ0hFQ0tfQ0hVTktTSVpFKQorCQkJbGVmdCA9IENIRUNLX0NIVU5LU0laRTsKKworCQkqdmFsID0gY3JjMzJfbGUofjAsIHBoeXNfdG9fdmlydChhZGRyKSwgbGVmdCk7CisJCXZhbCsrOworCX0KKworCXJldHVybiB2YWw7Cit9CisKKy8qIHMzYzI0MTBfcG1fY2hlY2tfc3RvcmUKKyAqCisgKiBjb21wdXRlIHRoZSBDUkMgdmFsdWVzIGZvciB0aGUgbWVtb3J5IGJsb2NrcyBiZWZvcmUgdGhlIGZpbmFsCisgKiBzbGVlcC4KKyovCisKK3N0YXRpYyB2b2lkIHMzYzI0MTBfcG1fY2hlY2tfc3RvcmUodm9pZCkKK3sKKwlpZiAoY3JjcyAhPSBOVUxMKQorCQlzM2MyNDEwX3BtX3J1bl9zeXNyYW0oczNjMjQxMF9wbV9tYWtlY2hlY2ssIGNyY3MpOworfQorCisvKiBpbl9yZWdpb24KKyAqCisgKiByZXR1cm4gVFJVRSBpZiB0aGUgYXJlYSBkZWZpbmVkIGJ5IHB0ci4ucHRyK3NpemUgY29udGF0aW5zIHRoZQorICogd2hhdC4ud2hhdCt3aGF0c3oKKyovCisKK3N0YXRpYyBpbmxpbmUgaW50IGluX3JlZ2lvbih2b2lkICpwdHIsIGludCBzaXplLCB2b2lkICp3aGF0LCBzaXplX3Qgd2hhdHN6KQoreworCWlmICgod2hhdCt3aGF0c3opIDwgcHRyKQorCQlyZXR1cm4gMDsKKworCWlmICh3aGF0ID4gKHB0citzaXplKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHUzMiAqczNjMjQxMF9wbV9ydW5jaGVjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyICp2YWwpCit7CisJdm9pZCAqc2F2ZV9hdCA9IHBoeXNfdG9fdmlydChzM2MyNDEwX3NsZWVwX3NhdmVfcGh5cyk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgbGVmdDsKKwl2b2lkICpwdHI7CisJdTMyIGNhbGM7CisKKwlmb3IgKGFkZHIgPSByZXMtPnN0YXJ0OyBhZGRyIDwgcmVzLT5lbmQ7CisJICAgICBhZGRyICs9IENIRUNLX0NIVU5LU0laRSkgeworCQlsZWZ0ID0gcmVzLT5lbmQgLSBhZGRyOworCisJCWlmIChsZWZ0ID4gQ0hFQ0tfQ0hVTktTSVpFKQorCQkJbGVmdCA9IENIRUNLX0NIVU5LU0laRTsKKworCQlwdHIgPSBwaHlzX3RvX3ZpcnQoYWRkcik7CisKKwkJaWYgKGluX3JlZ2lvbihwdHIsIGxlZnQsIGNyY3MsIGNyY19zaXplKSkgeworCQkJREJHKCJza2lwcGluZyAlMDhseCwgaGFzIGNyYyBibG9jayBpblxuIiwgYWRkcik7CisJCQlnb3RvIHNraXBfY2hlY2s7CisJCX0KKworCQlpZiAoaW5fcmVnaW9uKHB0ciwgbGVmdCwgc2F2ZV9hdCwgMzIqNCApKSB7CisJCQlEQkcoInNraXBwaW5nICUwOGx4LCBoYXMgc2F2ZSBibG9jayBpblxuIiwgYWRkcik7CisJCQlnb3RvIHNraXBfY2hlY2s7CisJCX0KKworCQkvKiBjYWxjdWxhdGUgYW5kIGNoZWNrIHRoZSBjaGVja3N1bSAqLworCisJCWNhbGMgPSBjcmMzMl9sZSh+MCwgcHRyLCBsZWZ0KTsKKwkJaWYgKGNhbGMgIT0gKnZhbCkgeworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUmVzdG9yZSBDUkMgZXJyb3IgYXQgIgorCQkJICAgICAgICIlMDhseCAoJTA4eCB2cyAlMDh4KVxuIiwgYWRkciwgY2FsYywgKnZhbCk7CisKKwkJCURCRygiUmVzdG9yZSBDUkMgZXJyb3IgYXQgJTA4bHggKCUwOHggdnMgJTA4eClcbiIsCisJCQkgICAgYWRkciwgY2FsYywgKnZhbCk7CisJCX0KKworCXNraXBfY2hlY2s6CisJCXZhbCsrOworCX0KKworCXJldHVybiB2YWw7Cit9CisKKy8qIHMzYzI0MTBfcG1fY2hlY2tfcmVzdG9yZQorICoKKyAqIGNoZWNrIHRoZSBDUkNzIGFmdGVyIHRoZSByZXN0b3JlIGV2ZW50IGFuZCBmcmVlIHRoZSBtZW1vcnkgdXNlZAorICogdG8gaG9sZCB0aGVtCisqLworCitzdGF0aWMgdm9pZCBzM2MyNDEwX3BtX2NoZWNrX3Jlc3RvcmUodm9pZCkKK3sKKwlpZiAoY3JjcyAhPSBOVUxMKSB7CisJCXMzYzI0MTBfcG1fcnVuX3N5c3JhbShzM2MyNDEwX3BtX3J1bmNoZWNrLCBjcmNzKTsKKwkJa2ZyZWUoY3Jjcyk7CisJCWNyY3MgPSBOVUxMOworCX0KK30KKworI2Vsc2UKKworI2RlZmluZSBzM2MyNDEwX3BtX2NoZWNrX3ByZXBhcmUoKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgczNjMjQxMF9wbV9jaGVja19yZXN0b3JlKCkgZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHMzYzI0MTBfcG1fY2hlY2tfc3RvcmUoKSAgIGRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKKy8qIGhlbHBlciBmdW5jdGlvbnMgdG8gc2F2ZSBhbmQgcmVzdG9yZSByZWdpc3RlciBzdGF0ZSAqLworCit2b2lkIHMzYzI0MTBfcG1fZG9fc2F2ZShzdHJ1Y3Qgc2xlZXBfc2F2ZSAqcHRyLCBpbnQgY291bnQpCit7CisJZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSwgcHRyKyspIHsKKwkJcHRyLT52YWwgPSBfX3Jhd19yZWFkbChwdHItPnJlZyk7CisJCURCRygic2F2ZWQgJXAgdmFsdWUgJTA4bHhcbiIsIHB0ci0+cmVnLCBwdHItPnZhbCk7CisJfQorfQorCisvKiBzM2MyNDEwX3BtX2RvX3Jlc3RvcmUKKyAqCisgKiByZXN0b3JlIHRoZSBzeXN0ZW0gZnJvbSB0aGUgZ2l2ZW4gbGlzdCBvZiBzYXZlZCByZWdpc3RlcnMKKyAqCisgKiBOb3RlLCB3ZSBkbyBub3QgdXNlIERCRygpIGluIGhlcmUsIGFzIHRoZSBzeXN0ZW0gbWF5IG5vdCBoYXZlCisgKiByZXN0b3JlIHRoZSBVQVJUcyBzdGF0ZSB5ZXQKKyovCisKK3ZvaWQgczNjMjQxMF9wbV9kb19yZXN0b3JlKHN0cnVjdCBzbGVlcF9zYXZlICpwdHIsIGludCBjb3VudCkKK3sKKwlmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tLCBwdHIrKykgeworCQlwcmludGsoS0VSTl9ERUJVRyAicmVzdG9yZSAlcCAocmVzdG9yZSAlMDhseCwgd2FzICUwOHgpXG4iLAorCQkgICAgICAgcHRyLT5yZWcsIHB0ci0+dmFsLCBfX3Jhd19yZWFkbChwdHItPnJlZykpOworCisJCV9fcmF3X3dyaXRlbChwdHItPnZhbCwgcHRyLT5yZWcpOworCX0KK30KKworLyogczNjMjQxMF9wbV9kb19yZXN0b3JlX2NvcmUKKyAqCisgKiBzaW1pbGFyIHRvIHMzYzI0MTBfcG1fZG9fcmVzdG9yZV9jb3JlCisgKgorICogV0FSTklORzogRG8gbm90IHB1dCBhbnkgZGVidWcgaW4gaGVyZSB0aGF0IG1heSBlZmZlY3QgbWVtb3J5IG9yIHVzZQorICogcGVyaXBoZXJhbHMsIGFzIHRoaW5ncyBtYXkgYmUgY2hhbmdpbmchCisqLworCitzdGF0aWMgdm9pZCBzM2MyNDEwX3BtX2RvX3Jlc3RvcmVfY29yZShzdHJ1Y3Qgc2xlZXBfc2F2ZSAqcHRyLCBpbnQgY291bnQpCit7CisJZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSwgcHRyKyspIHsKKwkJX19yYXdfd3JpdGVsKHB0ci0+dmFsLCBwdHItPnJlZyk7CisJfQorfQorCisvKiBzM2MyNDEwX3BtX3Nob3dfcmVzdW1lX2lycXMKKyAqCisgKiBwcmludCBhbnkgSVJRcyBhc3NlcnRlZCBhdCByZXN1bWUgdGltZSAoaWUsIHdlIHdva2UgZnJvbSkKKyovCisKK3N0YXRpYyB2b2lkIHMzYzI0MTBfcG1fc2hvd19yZXN1bWVfaXJxcyhpbnQgc3RhcnQsIHVuc2lnbmVkIGxvbmcgd2hpY2gsCisJCQkJCXVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKwlpbnQgaTsKKworCXdoaWNoICY9IH5tYXNrOworCisJZm9yIChpID0gMDsgaSA8PSAzMTsgaSsrKSB7CisJCWlmICgod2hpY2gpICYgKDFMPDxpKSkgeworCQkJREJHKCJJUlEgJWQgYXNzZXJ0ZWQgYXQgcmVzdW1lXG4iLCBzdGFydCtpKTsKKwkJfQorCX0KK30KKworLyogczNjMjQxMF9wbV9jaGVja19yZXN1bWVfcGluCisgKgorICogY2hlY2sgdG8gc2VlIGlmIHRoZSBwaW4gaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgZm9yIHNsZWVwIG1vZGUsIGFuZAorICogbWFrZSBhbnkgbmVjZXNzYXJ5IGFkanVzdG1lbnRzIGlmIGl0IGlzIG5vdAorKi8KKworc3RhdGljIHZvaWQgczNjMjQxMF9wbV9jaGVja19yZXN1bWVfcGluKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCBpcnFvZmZzKQoreworCXVuc2lnbmVkIGxvbmcgaXJxc3RhdGU7CisJdW5zaWduZWQgbG9uZyBwaW5zdGF0ZTsKKwlpbnQgaXJxID0gczNjMjQxMF9ncGlvX2dldGlycShwaW4pOworCisJaWYgKGlycW9mZnMgPCA0KQorCQlpcnFzdGF0ZSA9IHMzY19pcnF3YWtlX2ludG1hc2sgJiAoMUw8PGlycW9mZnMpOworCWVsc2UKKwkJaXJxc3RhdGUgPSBzM2NfaXJxd2FrZV9laW50bWFzayAmICgxTDw8aXJxb2Zmcyk7CisKKwlwaW5zdGF0ZSA9IHMzYzI0MTBfZ3Bpb19nZXRjZmcocGluKTsKKwlwaW5zdGF0ZSA+Pj0gUzNDMjQxMF9HUElPX09GRlNFVChwaW4pKjI7CisKKwlpZiAoIWlycXN0YXRlKSB7CisJCWlmIChwaW5zdGF0ZSA9PSAweDAyKQorCQkJREJHKCJMZWF2aW5nIElSUSAlZCAocGluICVkKSBlbmFibGVkXG4iLCBpcnEsIHBpbik7CisJfSBlbHNlIHsKKwkJaWYgKHBpbnN0YXRlID09IDB4MDIpIHsKKwkJCURCRygiRGlzYWJsaW5nIElSUSAlZCAocGluICVkKVxuIiwgaXJxLCBwaW4pOworCQkJczNjMjQxMF9ncGlvX2NmZ3BpbihwaW4sIDB4MDApOworCQl9CisJfQorfQorCisvKiBzM2MyNDEwX3BtX2NvbmZpZ3VyZV9leHRpbnQKKyAqCisgKiBjb25maWd1cmUgYWxsIGV4dGVybmFsIGludGVycnVwdCBwaW5zCisqLworCitzdGF0aWMgdm9pZCBzM2MyNDEwX3BtX2NvbmZpZ3VyZV9leHRpbnQodm9pZCkKK3sKKwlpbnQgcGluOworCisJLyogZm9yIGVhY2ggb2YgdGhlIGV4dGVybmFsIGludGVycnVwdHMgKEVJTlQwLi5FSU5UMTUpIHdlCisJICogbmVlZCB0byBjaGVjayB3ZXRoZXIgaXQgaXMgYW4gZXh0ZXJuYWwgaW50ZXJydXB0IHNvdXJjZSwKKwkgKiBhbmQgdGhlbiBjb25maWd1cmUgaXQgYXMgYW4gaW5wdXQgaWYgaXQgaXMgbm90CisJKi8KKworCWZvciAocGluID0gUzNDMjQxMF9HUEYwOyBwaW4gPD0gUzNDMjQxMF9HUEY3OyBwaW4rKykgeworCQlzM2MyNDEwX3BtX2NoZWNrX3Jlc3VtZV9waW4ocGluLCBwaW4gLSBTM0MyNDEwX0dQRjApOworCX0KKworCWZvciAocGluID0gUzNDMjQxMF9HUEcwOyBwaW4gPD0gUzNDMjQxMF9HUEc3OyBwaW4rKykgeworCQlzM2MyNDEwX3BtX2NoZWNrX3Jlc3VtZV9waW4ocGluLCAocGluIC0gUzNDMjQxMF9HUEcwKSs4KTsKKwl9Cit9CisKKyNkZWZpbmUgYW55X2FsbG93ZWQobWFzaywgYWxsb3cpICgoKG1hc2spICYgKGFsbG93KSkgIT0gKGFsbG93KSkKKworLyogczNjMjQxMF9wbV9lbnRlcgorICoKKyAqIGNlbnRyYWwgY29udHJvbCBmb3Igc2xlZXAvcmVzdW1lIHByb2Nlc3MKKyovCisKK3N0YXRpYyBpbnQgczNjMjQxMF9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJdW5zaWduZWQgbG9uZyByZWdzX3NhdmVbMTZdOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJLyogZW5zdXJlIHRoZSBkZWJ1ZyBpcyBpbml0aWFsaXNlZCAoaWYgZW5hYmxlZCkgKi8KKworCXMzYzI0MTBfcG1fZGVidWdfaW5pdCgpOworCisJREJHKCJzM2MyNDEwX3BtX2VudGVyKCVkKVxuIiwgc3RhdGUpOworCisJaWYgKHN0YXRlICE9IFBNX1NVU1BFTkRfTUVNKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImVycm9yOiBvbmx5IFBNX1NVU1BFTkRfTUVNIHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNoZWNrIGlmIHdlIGhhdmUgYW55dGhpbmcgdG8gd2FrZS11cCB3aXRoLi4uIGJhZCB0aGluZ3Mgc2VlbQorCSAqIHRvIGhhcHBlbiBpZiB5b3Ugc3VzcGVuZCB3aXRoIG5vIHdha2V1cCAoc3lzdGVtIHdpbGwgb2Z0ZW4KKwkgKiByZXF1aXJlIGEgZnVsbCBwb3dlci1jeWNsZSkKKwkqLworCisJaWYgKCFhbnlfYWxsb3dlZChzM2NfaXJxd2FrZV9pbnRtYXNrLCBzM2NfaXJxd2FrZV9pbnRhbGxvdykgJiYKKwkgICAgIWFueV9hbGxvd2VkKHMzY19pcnF3YWtlX2VpbnRtYXNrLCBzM2NfaXJxd2FrZV9laW50YWxsb3cpKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIk5vIHNvdXJjZXMgZW5hYmxlZCBmb3Igd2FrZS11cCFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJBYm9ydGluZyBzbGVlcFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHByZXBhcmUgY2hlY2sgYXJlYSBpZiBjb25maWd1cmVkICovCisKKwlzM2MyNDEwX3BtX2NoZWNrX3ByZXBhcmUoKTsKKworCS8qIHN0b3JlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciByZWNvdmVyeSBibG9jayAqLworCisJczNjMjQxMF9zbGVlcF9zYXZlX3BoeXMgPSB2aXJ0X3RvX3BoeXMocmVnc19zYXZlKTsKKworCURCRygiczNjMjQxMF9zbGVlcF9zYXZlX3BoeXM9MHglMDhseFxuIiwgczNjMjQxMF9zbGVlcF9zYXZlX3BoeXMpOworCisJLyogZW5zdXJlIGF0IGxlYXN0IEdFU1RBVFVTMyBoYXMgdGhlIHJlc3VtZSBhZGRyZXNzICovCisKKwlfX3Jhd193cml0ZWwodmlydF90b19waHlzKHMzYzI0MTBfY3B1X3Jlc3VtZSksIFMzQzI0MTBfR1NUQVRVUzMpOworCisJREJHKCJHU1RBVFVTMyAweCUwOHhcbiIsIF9fcmF3X3JlYWRsKFMzQzI0MTBfR1NUQVRVUzMpKTsKKwlEQkcoIkdTVEFUVVM0IDB4JTA4eFxuIiwgX19yYXdfcmVhZGwoUzNDMjQxMF9HU1RBVFVTNCkpOworCisJLyogc2F2ZSBhbGwgbmVjZXNzYXJ5IGNvcmUgcmVnaXN0ZXJzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBkcml2ZXJzICovCisKKwlzM2MyNDEwX3BtX2RvX3NhdmUoZ3Bpb19zYXZlLCBBUlJBWV9TSVpFKGdwaW9fc2F2ZSkpOworCXMzYzI0MTBfcG1fZG9fc2F2ZShpcnFfc2F2ZSwgQVJSQVlfU0laRShpcnFfc2F2ZSkpOworCXMzYzI0MTBfcG1fZG9fc2F2ZShjb3JlX3NhdmUsIEFSUkFZX1NJWkUoY29yZV9zYXZlKSk7CisJczNjMjQxMF9wbV9kb19zYXZlKHVhcnRfc2F2ZSwgQVJSQVlfU0laRSh1YXJ0X3NhdmUpKTsKKworCS8qIHNldCB0aGUgaXJxIGNvbmZpZ3VyYXRpb24gZm9yIHdha2UgKi8KKworCXMzYzI0MTBfcG1fY29uZmlndXJlX2V4dGludCgpOworCisJREJHKCJzbGVlcDogaXJxIHdha2V1cCBtYXNrczogJTA4bHgsJTA4bHhcbiIsCisJICAgIHMzY19pcnF3YWtlX2ludG1hc2ssIHMzY19pcnF3YWtlX2VpbnRtYXNrKTsKKworCV9fcmF3X3dyaXRlbChzM2NfaXJxd2FrZV9pbnRtYXNrLCBTM0MyNDEwX0lOVE1TSyk7CisJX19yYXdfd3JpdGVsKHMzY19pcnF3YWtlX2VpbnRtYXNrLCBTM0MyNDEwX0VJTlRNQVNLKTsKKworCS8qIGFjayBhbnkgb3V0c3RhbmRpbmcgZXh0ZXJuYWwgaW50ZXJydXB0cyBiZWZvcmUgd2UgZ28gdG8gc2xlZXAgKi8KKworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTM0MyNDEwX0VJTlRQRU5EKSwgUzNDMjQxMF9FSU5UUEVORCk7CisKKwkvKiBmbHVzaCBjYWNoZSBiYWNrIHRvIHJhbSAqLworCisJYXJtOTIwX2ZsdXNoX2tlcm5fY2FjaGVfYWxsKCk7CisKKwlzM2MyNDEwX3BtX2NoZWNrX3N0b3JlKCk7CisKKwkvLyBuZWVkIHRvIG1ha2Ugc29tZSBmb3JtIG9mIHRpbWUtZGVsdGEKKworCS8qIHNlbmQgdGhlIGNwdSB0byBzbGVlcC4uLiAqLworCisJX19yYXdfd3JpdGVsKDB4MDAsIFMzQzI0MTBfQ0xLQ09OKTsgIC8qIHR1cm4gb2ZmIGNsb2NrcyBvdmVyIHNsZWVwICovCisKKwlzM2MyNDEwX2NwdV9zdXNwZW5kKHJlZ3Nfc2F2ZSk7CisKKwkvKiB1bnNldCB0aGUgcmV0dXJuLWZyb20tc2xlZXAgZmxhZywgdG8gZW5zdXJlIHJlc2V0ICovCisKKwl0bXAgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0dTVEFUVVMyKTsKKwl0bXAgJj0gUzNDMjQxMF9HU1RBVFVTMl9PRkZSRVNFVDsKKwlfX3Jhd193cml0ZWwodG1wLCBTM0MyNDEwX0dTVEFUVVMyKTsKKworCS8qIHJlc3RvcmUgdGhlIHN5c3RlbSBzdGF0ZSAqLworCisJczNjMjQxMF9wbV9kb19yZXN0b3JlX2NvcmUoY29yZV9zYXZlLCBBUlJBWV9TSVpFKGNvcmVfc2F2ZSkpOworCXMzYzI0MTBfcG1fZG9fcmVzdG9yZShncGlvX3NhdmUsIEFSUkFZX1NJWkUoZ3Bpb19zYXZlKSk7CisJczNjMjQxMF9wbV9kb19yZXN0b3JlKGlycV9zYXZlLCBBUlJBWV9TSVpFKGlycV9zYXZlKSk7CisJczNjMjQxMF9wbV9kb19yZXN0b3JlKHVhcnRfc2F2ZSwgQVJSQVlfU0laRSh1YXJ0X3NhdmUpKTsKKworCXMzYzI0MTBfcG1fZGVidWdfaW5pdCgpOworCisJLyogY2hlY2sgd2hhdCBpcnEgKGlmIGFueSkgcmVzdG9yZWQgdGhlIHN5c3RlbSAqLworCisJREJHKCJwb3N0IHNsZWVwOiBJUlFzIDB4JTA4eCwgMHglMDh4XG4iLAorCSAgICBfX3Jhd19yZWFkbChTM0MyNDEwX1NSQ1BORCksCisJICAgIF9fcmF3X3JlYWRsKFMzQzI0MTBfRUlOVFBFTkQpKTsKKworCXMzYzI0MTBfcG1fc2hvd19yZXN1bWVfaXJxcyhJUlFfRUlOVDAsIF9fcmF3X3JlYWRsKFMzQzI0MTBfU1JDUE5EKSwKKwkJCQkgICAgczNjX2lycXdha2VfaW50bWFzayk7CisKKwlzM2MyNDEwX3BtX3Nob3dfcmVzdW1lX2lycXMoSVJRX0VJTlQ0LTQsIF9fcmF3X3JlYWRsKFMzQzI0MTBfRUlOVFBFTkQpLAorCQkJCSAgICBzM2NfaXJxd2FrZV9laW50bWFzayk7CisKKwlEQkcoInBvc3Qgc2xlZXAsIHByZXBhcmluZyB0byByZXR1cm5cbiIpOworCisJczNjMjQxMF9wbV9jaGVja19yZXN0b3JlKCk7CisKKwkvKiBvaywgbGV0J3MgcmV0dXJuIGZyb20gc2xlZXAgKi8KKworCURCRygiUzNDMjQxMCBQTSBSZXN1bWUgKHBvc3QtcmVzdG9yZSlcbiIpOworCXJldHVybiAwOworfQorCisvKgorICogQ2FsbGVkIGFmdGVyIHByb2Nlc3NlcyBhcmUgZnJvemVuLCBidXQgYmVmb3JlIHdlIHNodXQgZG93biBkZXZpY2VzLgorICovCitzdGF0aWMgaW50IHMzYzI0MTBfcG1fcHJlcGFyZShzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxsZWQgYWZ0ZXIgZGV2aWNlcyBhcmUgcmUtc2V0dXAsIGJ1dCBiZWZvcmUgcHJvY2Vzc2VzIGFyZSB0aGF3ZWQuCisgKi8KK3N0YXRpYyBpbnQgczNjMjQxMF9wbV9maW5pc2goc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCXJldHVybiAwOworfQorCisvKgorICogU2V0IHRvIFBNX0RJU0tfRklSTVdBUkUgc28gd2UgY2FuIHF1aWNrbHkgdmV0byBzdXNwZW5kLXRvLWRpc2suCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcG1fb3BzIHMzYzI0MTBfcG1fb3BzID0geworCS5wbV9kaXNrX21vZGUJPSBQTV9ESVNLX0ZJUk1XQVJFLAorCS5wcmVwYXJlCT0gczNjMjQxMF9wbV9wcmVwYXJlLAorCS5lbnRlcgkJPSBzM2MyNDEwX3BtX2VudGVyLAorCS5maW5pc2gJCT0gczNjMjQxMF9wbV9maW5pc2gsCit9OworCisvKiBzM2MyNDEwX3BtX2luaXQKKyAqCisgKiBBdHRhY2ggdGhlIHBvd2VyIG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBUaGlzIHNob3VsZCBiZSBjYWxsZWQKKyAqIGZyb20gdGhlIGJvYXJkIHNwZWNpZmljIGluaXRpYWxpc2F0aW9uIGlmIHRoZSBib2FyZCBzdXBwb3J0cworICogaXQuCisqLworCitpbnQgX19pbml0IHMzYzI0MTBfcG1faW5pdCh2b2lkKQoreworCXByaW50aygiUzNDMjQxMCBQb3dlciBNYW5hZ2VtZW50LCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3NcbiIpOworCisJcG1fc2V0X29wcygmczNjMjQxMF9wbV9vcHMpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTVlNzE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmgKQEAgLTAsMCArMSw1OSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglXcml0dGVuIGJ5IEJlbiBEb29rcywgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKy8qIHMzYzI0MTBfcG1faW5pdAorICoKKyAqIGNhbGxlZCBmcm9tIGJvYXJkIGF0IGluaXRpYWxpc2F0aW9uIHRpbWUgdG8gc2V0dXAgdGhlIHBvd2VyCisgKiBtYW5hZ2VtZW50CisqLworCisjaWZkZWYgQ09ORklHX1BNCisKK2V4dGVybiBfX2luaXQgaW50IHMzYzI0MTBfcG1faW5pdCh2b2lkKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQgczNjMjQxMF9wbV9pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyogY29uZmlndXJhdGlvbiBmb3IgdGhlIElSUSBtYXNrIG92ZXIgc2xlZXAgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2ludG1hc2s7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9laW50bWFzazsKKworLyogSVJRIG1hc2tzIGZvciBJUlFzIGFsbG93ZWQgdG8gZ28gdG8gc2xlZXAgKHNlZSBpcnEuYykgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2ludGFsbG93OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfZWludGFsbG93OworCisvKiBGbGFncyBmb3IgUE0gQ29udHJvbCAqLworCitleHRlcm4gdW5zaWduZWQgbG9uZyBzM2NfcG1fZmxhZ3M7CisKKy8qIGZyb20gc2xlZXAuUyAqLworCitleHRlcm4gdm9pZCBzM2MyNDEwX2NwdV9zdXNwZW5kKHVuc2lnbmVkIGxvbmcgKnNhdmVibGspOworZXh0ZXJuIHZvaWQgczNjMjQxMF9jcHVfcmVzdW1lKHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBzM2MyNDEwX3NsZWVwX3NhdmVfcGh5czsKKworLyogc2xlZXAgc2F2ZSBpbmZvICovCisKK3N0cnVjdCBzbGVlcF9zYXZlIHsKKwl2b2lkIF9faW9tZW0JKnJlZzsKKwl1bnNpZ25lZCBsb25nCXZhbDsKK307CisKKyNkZWZpbmUgU0FWRV9JVEVNKHgpIFwKKwl7IC5yZWcgPSAoeCkgfQorCitleHRlcm4gdm9pZCBzM2MyNDEwX3BtX2RvX3NhdmUoc3RydWN0IHNsZWVwX3NhdmUgKnB0ciwgaW50IGNvdW50KTsKK2V4dGVybiB2b2lkIHMzYzI0MTBfcG1fZG9fcmVzdG9yZShzdHJ1Y3Qgc2xlZXBfc2F2ZSAqcHRyLCBpbnQgY291bnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYyZjI1NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMKQEAgLTAsMCArMSwyMDAgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9FQjI0MTBJVFgvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBNb2RpZmljYXRpb25zOgorICogICAgIDE2LU1heS0yMDAzIEJKRCAgQ3JlYXRlZCBpbml0aWFsIHZlcnNpb24KKyAqICAgICAxNi1BdWctMjAwMyBCSkQgIEZpeGVkIGhlYWRlciBmaWxlcyBhbmQgY29weXJpZ2h0LCBhZGRlZCBVUkwKKyAqICAgICAwNS1TZXAtMjAwMyBCSkQgIE1vdmVkIHRvIGtlcm5lbCB2Mi42CisgKiAgICAgMTgtSmFuLTIwMDQgQkpEICBBZGRlZCBzZXJpYWwgcG9ydCBjb25maWd1cmF0aW9uCisgKiAgICAgMjEtQXVnLTIwMDQgQkpEICBBZGRlZCBuZXcgc3RydWN0IHMzYzI0MTBfYm9hcmQgaGFuZGxlcgorICogICAgIDI4LVNlcC0yMDA0IEJKRCAgVXBkYXRlcyBmb3IgbmV3IHNlcmlhbCBwb3J0IGJpdHMKKyAqICAgICAwNC1Ob3YtMjAwNCBCSkQgIFVwZGF0ZWQgVUFSVCBjb25maWd1cmF0aW9uIHByb2Nlc3MKKyAqICAgICAxMC1KYW4tMjAwNSBCSkQgIFJlbW92ZWQgczNjMjQxMF9jbG9ja190aWNrX3JhdGUKKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNlcmlhbC5oPgorCisjaW5jbHVkZSAiczNjMjQxMC5oIgorI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisKKy8qIEluaXRpYWwgSU8gbWFwcGluZ3MgKi8KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzM2MyNDEwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJSU9ERVNDX0VOVChVU0JIT1NUKSwKKwlJT0RFU0NfRU5UKENMS1BXUiksCisJSU9ERVNDX0VOVChMQ0QpLAorCUlPREVTQ19FTlQoVUFSVCksCisJSU9ERVNDX0VOVChUSU1FUiksCisJSU9ERVNDX0VOVChBREMpLAorCUlPREVTQ19FTlQoV0FUQ0hET0cpCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY191YXJ0MF9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUzNDMjQxMF9QQV9VQVJUMCwKKwkJLmVuZCAgID0gUzNDMjQxMF9QQV9VQVJUMCArIDB4M2ZmZiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9TM0NVQVJUX1JYMCwKKwkJLmVuZCAgID0gSVJRX1MzQ1VBUlRfRVJSMCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQorCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY191YXJ0MV9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUzNDMjQxMF9QQV9VQVJUMSwKKwkJLmVuZCAgID0gUzNDMjQxMF9QQV9VQVJUMSArIDB4M2ZmZiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9TM0NVQVJUX1JYMSwKKwkJLmVuZCAgID0gSVJRX1MzQ1VBUlRfRVJSMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfdWFydDJfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQzI0MTBfUEFfVUFSVDIsCisJCS5lbmQgICA9IFMzQzI0MTBfUEFfVUFSVDIgKyAweDNmZmYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfUzNDVUFSVF9SWDIsCisJCS5lbmQgICA9IElSUV9TM0NVQVJUX0VSUjIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKKy8qIG91ciB1YXJ0IGRldmljZXMgKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX3VhcnQwID0geworCS5uYW1lCQkgID0gInMzYzI0MTAtdWFydCIsCisJLmlkCQkgID0gMCwKKwkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfdWFydDBfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQkgID0gczNjX3VhcnQwX3Jlc291cmNlLAorfTsKKworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfdWFydDEgPSB7CisJLm5hbWUJCSAgPSAiczNjMjQxMC11YXJ0IiwKKwkuaWQJCSAgPSAxLAorCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzY191YXJ0MV9yZXNvdXJjZSksCisJLnJlc291cmNlCSAgPSBzM2NfdWFydDFfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfdWFydDIgPSB7CisJLm5hbWUJCSAgPSAiczNjMjQxMC11YXJ0IiwKKwkuaWQJCSAgPSAyLAorCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzY191YXJ0Ml9yZXNvdXJjZSksCisJLnJlc291cmNlCSAgPSBzM2NfdWFydDJfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdWFydF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmczNjX3VhcnQwLAorCSZzM2NfdWFydDEsCisJJnMzY191YXJ0MgorfTsKKworLyogc3RvcmUgb3VyIHVhcnQgZGV2aWNlcyBmb3IgdGhlIHNlcmlhbCBkcml2ZXIgY29uc29sZSAqLworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqczNjMjQxMF91YXJ0X2RldmljZXNbM107CisKK3N0YXRpYyBpbnQgczNjMjQxMF91YXJ0X2NvdW50ID0gMDsKKworLyogdWFydCByZWdpc3RyYXRpb24gcHJvY2VzcyAqLworCit2b2lkIF9faW5pdCBzM2MyNDEwX2luaXRfdWFydHMoc3RydWN0IHMzYzI0MTBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGRldjsKKwlpbnQgdWFydDsKKworCWZvciAodWFydCA9IDA7IHVhcnQgPCBubzsgdWFydCsrLCBjZmcrKykgeworCQlwbGF0ZGV2ID0gdWFydF9kZXZpY2VzW2NmZy0+aHdwb3J0XTsKKworCQlzM2MyNHh4X3VhcnRfZGV2c1t1YXJ0XSA9IHBsYXRkZXY7CisJCXBsYXRkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gY2ZnOworCX0KKworCXMzYzI0MTBfdWFydF9jb3VudCA9IHVhcnQ7Cit9CisKKy8qIHMzYzI0MTBfbWFwX2lvCisgKgorICogcmVnaXN0ZXIgdGhlIHN0YW5kYXJkIGNwdSBJTyBhcmVhcywgYW5kIGFueSBwYXNzZWQgaW4gZnJvbSB0aGUKKyAqIG1hY2hpbmUgc3BlY2lmaWMgaW5pdGlhbGlzYXRpb24uCisqLworCit2b2lkIF9faW5pdCBzM2MyNDEwX21hcF9pbyhzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IG1hY2hfc2l6ZSkKK3sKKwkvKiByZWdpc3RlciBvdXIgaW8tdGFibGVzICovCisKKwlpb3RhYmxlX2luaXQoczNjMjQxMF9pb2Rlc2MsIEFSUkFZX1NJWkUoczNjMjQxMF9pb2Rlc2MpKTsKKwlpb3RhYmxlX2luaXQobWFjaF9kZXNjLCBtYWNoX3NpemUpOworfQorCit2b2lkIF9faW5pdCBzM2MyNDEwX2luaXRfY2xvY2tzKGludCB4dGFsKQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCXVuc2lnbmVkIGxvbmcgZmNsazsKKwl1bnNpZ25lZCBsb25nIGhjbGs7CisJdW5zaWduZWQgbG9uZyBwY2xrOworCisJLyogbm93IHdlJ3ZlIGdvdCBvdXIgbWFjaGluZSBiaXRzIGluaXRpYWxpc2VkLCB3b3JrIG91dCB3aGF0CisJICogY2xvY2tzIHdlJ3ZlIGdvdCAqLworCisJZmNsayA9IHMzYzI0MTBfZ2V0X3BsbChfX3Jhd19yZWFkbChTM0MyNDEwX01QTExDT04pLCB4dGFsKTsKKworCXRtcCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLRElWTik7CisKKwkvKiB3b3JrIG91dCBjbG9jayBzY2FsaW5ncyAqLworCisJaGNsayA9IGZjbGsgLyAoKHRtcCAmIFMzQzI0MTBfQ0xLRElWTl9IRElWTikgPyAyIDogMSk7CisJcGNsayA9IGhjbGsgLyAoKHRtcCAmIFMzQzI0MTBfQ0xLRElWTl9QRElWTikgPyAyIDogMSk7CisKKwkvKiBwcmludCBicmllZnQgc3VtbWFyeSBvZiBjbG9ja3MsIGV0YyAqLworCisJcHJpbnRrKCJTM0MyNDEwOiBjb3JlICVsZC4lMDNsZCBNSHosIG1lbW9yeSAlbGQuJTAzbGQgTUh6LCBwZXJpcGhlcmFsICVsZC4lMDNsZCBNSHpcbiIsCisJICAgICAgIHByaW50X21oeihmY2xrKSwgcHJpbnRfbWh6KGhjbGspLCBwcmludF9taHoocGNsaykpOworCisJLyogaW5pdGlhbGlzZSB0aGUgY2xvY2tzIGhlcmUsIHRvIGFsbG93IG90aGVyIHRoaW5ncyBsaWtlIHRoZQorCSAqIGNvbnNvbGUgdG8gdXNlIHRoZW0KKwkgKi8KKworCXMzYzI0eHhfc2V0dXBfY2xvY2tzKHh0YWwsIGZjbGssIGhjbGssIHBjbGspOworfQorCitpbnQgX19pbml0IHMzYzI0MTBfaW5pdCh2b2lkKQoreworCXByaW50aygiUzNDMjQxMDogSW5pdGlhbGlzaW5nIGFyY2hpdGVjdHVyZVxuIik7CisKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoczNjMjR4eF91YXJ0X2RldnMsIHMzYzI0MTBfdWFydF9jb3VudCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDUzMTJhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuaApAQCAtMCwwICsxLDM3IEBACisvKiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIEhlYWRlciBmaWxlIGZvciBzM2MyNDEwIG1hY2hpbmUgZGlyZWN0b3J5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBNb2RpZmljYXRpb25zOgorICogICAgIDE4LUF1Zy0yMDA0IEJKRCAgQ3JlYXRlZCBpbml0aWFsIHZlcnNpb24KKyAqICAgICAyMC1BdWctMjAwNCBCSkQgIEFkZGVkIHMzYzI0MTBfYm9hcmQgc3RydWN0CisgKiAgICAgMDQtU2VwLTIwMDQgQkpEICBBZGRlZCBzM2MyNDEwX2luaXRfdWFydHMoKSBjYWxsCisgKiAgICAgMTctT2N0LTIwMDQgQkpEICBNb3ZlZCBib2FyZCBvdXQgdG8gY3B1CisgKiAgICAgMDQtSmFuLTIwMDUgQkpEICBDaGFuZ2VkIHVhcnQgaW5pdAorICogICAgIDEwLUphbi0yMDA1IEJKRCAgUmVtb3ZlZCB0aW1lciB0byBjcHUuaCwgbW92ZWQgMjQxMCBzcGVjaWZpYyBiaXRzIGhlcmUKKyAqICAgICAxNC1KYW4tMjAwNSBCSkQgIEFkZGVkIHMzYzI0MTBfaW5pdF9jbG9ja3MgY2FsbAorKi8KKworI2lmZGVmIENPTkZJR19DUFVfUzNDMjQxMAorCitleHRlcm4gIGludCBzM2MyNDEwX2luaXQodm9pZCk7CisKK2V4dGVybiB2b2lkIHMzYzI0MTBfbWFwX2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgc2l6ZSk7CisKK2V4dGVybiB2b2lkIHMzYzI0MTBfaW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubyk7CisKK2V4dGVybiB2b2lkIHMzYzI0MTBfaW5pdF9jbG9ja3MoaW50IHh0YWwpOworCisjZWxzZQorI2RlZmluZSBzM2MyNDEwX2luaXRfY2xvY2tzIE5VTEwKKyNkZWZpbmUgczNjMjQxMF9pbml0X3VhcnRzIE5VTEwKKyNkZWZpbmUgczNjMjQxMF9tYXBfaW8gTlVMTAorI2RlZmluZSBzM2MyNDEwX2luaXQgTlVMTAorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC1kc2MuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWRzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZmEyYTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC1kc2MuYwpAQCAtMCwwICsxLDU5IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC1kc2MuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICogICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogU2Ftc3VuZyBTM0MyNDQwIERyaXZlIFN0cmVuZ3RoIENvbnRyb2wgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTW9kaWZpY2F0aW9uczoKKyAqICAgICAyOS1BdWctMjAwNCBCSkQgIFN0YXJ0IG9mIGRyaXZlLXN0cmVuZ3RoIGNvbnRyb2wKKyAqICAgICAwOS1Ob3YtMjAwNCBCSkQgIEFkZGVkIHN5bWJvbCBleHBvcnQKKyAqICAgICAxMS1KYW4tMjAwNSBCSkQgIEluY2x1ZGUgZml4CisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWRzYy5oPgorCisjaW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSAiczNjMjQ0MC5oIgorCitpbnQgczNjMjQ0MF9zZXRfZHNjKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwliYXNlID0gKHBpbiAmIFMzQzI0NDBfU0VMRUNUX0RTQzEpID8gUzNDMjQ0MF9EU0MxIDogUzNDMjQ0MF9EU0MwOworCW1hc2sgPSAzIDw8IFMzQzI0NDBfRFNDX0dFVFNISUZUKHBpbik7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwl2YWwgPSBfX3Jhd19yZWFkbChiYXNlKTsKKwl2YWwgJj0gfm1hc2s7CisJdmFsIHw9IHZhbHVlICYgbWFzazsKKwlfX3Jhd193cml0ZWwodmFsLCBiYXNlKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChzM2MyNDQwX3NldF9kc2MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE4Y2M1YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLmMKQEAgLTAsMCArMSwyODEgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFNhbXN1bmcgUzNDMjQ0MCBNb2JpbGUgQ1BVIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE1vZGlmaWNhdGlvbnM6CisgKgkyNC1BdWctMjAwNCBCSkQgIFN0YXJ0IG9mIHMzYzI0NDAgc3VwcG9ydAorICoJMTItT2N0LTIwMDQgQkpECSBNb3ZlZCBjbG9jayBpbmZvIG91dCB0byBjbG9jay5jCisgKgkwMS1Ob3YtMjAwNCBCSkQgIEZpeGVkIGNsb2NrIGJ1aWxkIGNvZGUKKyAqCTA5LU5vdi0yMDA0IEJKRCAgQWRkZWQgc3lzZGV2IGZvciBwb3dlciBtYW5hZ2VtZW50CisgKgkwNC1Ob3YtMjAwNCBCSkQgIE5ldyBzZXJpYWwgcmVnaXN0cmF0aW9uCisgKgkxNS1Ob3YtMjAwNCBCSkQgIFJlbmFtZSB0aGUgaTJjIGRldmljZSBmb3IgdGhlIHMzYzI0NDAKKyAqCTE0LUphbi0yMDA1IEJKRCAgTW92ZWQgY2xvY2sgaW5pdCBjb2RlIGludG8gc2VwZXJhdGUgZnVuY3Rpb24KKyAqCTE0LUphbi0yMDA1IEJKRCAgUmVtb3ZlZCB1bi11c2VkIGNsb2NrIGJpdHMKKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xvY2suaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpb2ouaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWRzYy5oPgorCisjaW5jbHVkZSAiczNjMjQ0MC5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiZGV2cy5oIgorI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgInBtLmgiCisKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzM2MyNDQwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJSU9ERVNDX0VOVChVU0JIT1NUKSwKKwlJT0RFU0NfRU5UKENMS1BXUiksCisJSU9ERVNDX0VOVChMQ0QpLAorCUlPREVTQ19FTlQoVElNRVIpLAorCUlPREVTQ19FTlQoQURDKSwKKwlJT0RFU0NfRU5UKFdBVENIRE9HKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX3VhcnQwX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0MyNDEwX1BBX1VBUlQwLAorCQkuZW5kICAgPSBTM0MyNDEwX1BBX1VBUlQwICsgMHgzZmZmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX1MzQ1VBUlRfUlgwLAorCQkuZW5kICAgPSBJUlFfUzNDVUFSVF9FUlIwLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9CisKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX3VhcnQxX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0MyNDEwX1BBX1VBUlQxLAorCQkuZW5kICAgPSBTM0MyNDEwX1BBX1VBUlQxICsgMHgzZmZmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX1MzQ1VBUlRfUlgxLAorCQkuZW5kICAgPSBJUlFfUzNDVUFSVF9FUlIxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY191YXJ0Ml9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUzNDMjQxMF9QQV9VQVJUMiwKKwkJLmVuZCAgID0gUzNDMjQxMF9QQV9VQVJUMiArIDB4M2ZmZiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9TM0NVQVJUX1JYMiwKKwkJLmVuZCAgID0gSVJRX1MzQ1VBUlRfRVJSMiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworLyogb3VyIHVhcnQgZGV2aWNlcyAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfdWFydDAgPSB7CisJLm5hbWUJCSAgPSAiczNjMjQ0MC11YXJ0IiwKKwkuaWQJCSAgPSAwLAorCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzY191YXJ0MF9yZXNvdXJjZSksCisJLnJlc291cmNlCSAgPSBzM2NfdWFydDBfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfdWFydDEgPSB7CisJLm5hbWUJCSAgPSAiczNjMjQ0MC11YXJ0IiwKKwkuaWQJCSAgPSAxLAorCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzY191YXJ0MV9yZXNvdXJjZSksCisJLnJlc291cmNlCSAgPSBzM2NfdWFydDFfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfdWFydDIgPSB7CisJLm5hbWUJCSAgPSAiczNjMjQ0MC11YXJ0IiwKKwkuaWQJCSAgPSAyLAorCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzY191YXJ0Ml9yZXNvdXJjZSksCisJLnJlc291cmNlCSAgPSBzM2NfdWFydDJfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdWFydF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmczNjX3VhcnQwLAorCSZzM2NfdWFydDEsCisJJnMzY191YXJ0MgorfTsKKworLyogdWFydCBpbml0aWFsaXNhdGlvbiAqLworCitzdGF0aWMgaW50IF9faW5pdGRhdGEgczNjMjQ0MF91YXJ0X2NvdW50OworCit2b2lkIF9faW5pdCBzM2MyNDQwX2luaXRfdWFydHMoc3RydWN0IHMzYzI0MTBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGRldjsKKwlpbnQgdWFydDsKKworCWZvciAodWFydCA9IDA7IHVhcnQgPCBubzsgdWFydCsrLCBjZmcrKykgeworCQlwbGF0ZGV2ID0gdWFydF9kZXZpY2VzW2NmZy0+aHdwb3J0XTsKKworCQlzM2MyNHh4X3VhcnRfZGV2c1t1YXJ0XSA9IHBsYXRkZXY7CisJCXBsYXRkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gY2ZnOworCX0KKworCXMzYzI0NDBfdWFydF9jb3VudCA9IHVhcnQ7Cit9CisKKworI2lmZGVmIENPTkZJR19QTQorCitzdHJ1Y3Qgc2xlZXBfc2F2ZSBzM2MyNDQwX3NsZWVwW10gPSB7CisJU0FWRV9JVEVNKFMzQzI0NDBfRFNDMCksCisJU0FWRV9JVEVNKFMzQzI0NDBfRFNDMSksCisJU0FWRV9JVEVNKFMzQzI0NDBfR1BKREFUKSwKKwlTQVZFX0lURU0oUzNDMjQ0MF9HUEpDT04pLAorCVNBVkVfSVRFTShTM0MyNDQwX0dQSlVQKQorfTsKKworc3RhdGljIGludCBzM2MyNDQwX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXMzYzI0MTBfcG1fZG9fc2F2ZShzM2MyNDQwX3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0NDBfc2xlZXApKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2MyNDQwX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCXMzYzI0MTBfcG1fZG9fcmVzdG9yZShzM2MyNDQwX3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0NDBfc2xlZXApKTsKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKyNkZWZpbmUgczNjMjQ0MF9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgczNjMjQ0MF9yZXN1bWUgIE5VTEwKKyNlbmRpZgorCitzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0NDBfc3lzY2xhc3MgPSB7CisJc2V0X2tzZXRfbmFtZSgiczNjMjQ0MC1jb3JlIiksCisJLnN1c3BlbmQJPSBzM2MyNDQwX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzM2MyNDQwX3Jlc3VtZQorfTsKKworc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIHMzYzI0NDBfc3lzZGV2ID0geworCS5jbHMJCT0gJnMzYzI0NDBfc3lzY2xhc3MsCit9OworCit2b2lkIF9faW5pdCBzM2MyNDQwX21hcF9pbyhzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IHNpemUpCit7CisJLyogcmVnaXN0ZXIgb3VyIGlvLXRhYmxlcyAqLworCisJaW90YWJsZV9pbml0KHMzYzI0NDBfaW9kZXNjLCBBUlJBWV9TSVpFKHMzYzI0NDBfaW9kZXNjKSk7CisJaW90YWJsZV9pbml0KG1hY2hfZGVzYywgc2l6ZSk7CisJLyogcmVuYW1lIGFueSBwZXJpcGhlcmFscyB1c2VkIGRpZmZlcmluZyBmcm9tIHRoZSBzM2MyNDEwICovCisKKwlzM2NfZGV2aWNlX2kyYy5uYW1lID0gInMzYzI0NDAtaTJjIjsKKworCS8qIGNoYW5nZSBpcnEgZm9yIHdhdGNoZG9nICovCisKKwlzM2NfZGV2aWNlX3dkdC5yZXNvdXJjZVsxXS5zdGFydCA9IElSUV9TM0MyNDQwX1dEVDsKKwlzM2NfZGV2aWNlX3dkdC5yZXNvdXJjZVsxXS5lbmQgICA9IElSUV9TM0MyNDQwX1dEVDsKK30KKwordm9pZCBfX2luaXQgczNjMjQ0MF9pbml0X2Nsb2NrcyhpbnQgeHRhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGNsa2RpdjsKKwl1bnNpZ25lZCBsb25nIGNhbWRpdjsKKwl1bnNpZ25lZCBsb25nIGhjbGssIGZjbGssIHBjbGs7CisJaW50IGhkaXYgPSAxOworCisJLyogbm93IHdlJ3ZlIGdvdCBvdXIgbWFjaGluZSBiaXRzIGluaXRpYWxpc2VkLCB3b3JrIG91dCB3aGF0CisJICogY2xvY2tzIHdlJ3ZlIGdvdCAqLworCisJZmNsayA9IHMzYzI0MTBfZ2V0X3BsbChfX3Jhd19yZWFkbChTM0MyNDEwX01QTExDT04pLCB4dGFsKSAqIDI7CisKKwljbGtkaXYgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0RJVk4pOworCWNhbWRpdiA9IF9fcmF3X3JlYWRsKFMzQzI0NDBfQ0FNRElWTik7CisKKwkvKiB3b3JrIG91dCBjbG9jayBzY2FsaW5ncyAqLworCisJc3dpdGNoIChjbGtkaXYgJiBTM0MyNDQwX0NMS0RJVk5fSERJVk5fTUFTSykgeworCWNhc2UgUzNDMjQ0MF9DTEtESVZOX0hESVZOXzE6CisJCWhkaXYgPSAxOworCQlicmVhazsKKworCWNhc2UgUzNDMjQ0MF9DTEtESVZOX0hESVZOXzI6CisJCWhkaXYgPSAxOworCQlicmVhazsKKworCWNhc2UgUzNDMjQ0MF9DTEtESVZOX0hESVZOXzRfODoKKwkJaGRpdiA9IChjYW1kaXYgJiBTM0MyNDQwX0NBTURJVk5fSENMSzRfSEFMRikgPyA4IDogNDsKKwkJYnJlYWs7CisKKwljYXNlIFMzQzI0NDBfQ0xLRElWTl9IRElWTl8zXzY6CisJCWhkaXYgPSAoY2FtZGl2ICYgUzNDMjQ0MF9DQU1ESVZOX0hDTEszX0hBTEYpID8gNiA6IDM7CisJCWJyZWFrOworCX0KKworCWhjbGsgPSBmY2xrIC8gaGRpdjsKKwlwY2xrID0gaGNsayAvICgoY2xrZGl2ICYgUzNDMjQ0MF9DTEtESVZOX1BESVZOKT8gMjoxKTsKKworCS8qIHByaW50IGJyaWVmIHN1bW1hcnkgb2YgY2xvY2tzLCBldGMgKi8KKworCXByaW50aygiUzNDMjQ0MDogY29yZSAlbGQuJTAzbGQgTUh6LCBtZW1vcnkgJWxkLiUwM2xkIE1IeiwgcGVyaXBoZXJhbCAlbGQuJTAzbGQgTUh6XG4iLAorCSAgICAgICBwcmludF9taHooZmNsayksIHByaW50X21oeihoY2xrKSwgcHJpbnRfbWh6KHBjbGspKTsKKworCS8qIGluaXRpYWxpc2UgdGhlIGNsb2NrcyBoZXJlLCB0byBhbGxvdyBvdGhlciB0aGluZ3MgbGlrZSB0aGUKKwkgKiBjb25zb2xlIHRvIHVzZSB0aGVtLCBhbmQgdG8gYWRkIG5ldyBvbmVzIGFmdGVyIHRoZSBpbml0aWFsaXNhdGlvbgorCSAqLworCisJczNjMjR4eF9zZXR1cF9jbG9ja3MoeHRhbCwgZmNsaywgaGNsaywgcGNsayk7Cit9CisKKy8qIG5lZWQgdG8gcmVnaXN0ZXIgY2xhc3MgYmVmb3JlIHdlIGFjdHVhbGx5IHJlZ2lzdGVyIHRoZSBkZXZpY2UsIGFuZAorICogd2UgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IGl0IGhhcyBiZWVuIGluaXRpYWxpc2VkIGJlZm9yZSBhbnkgb2YgdGhlCisgKiBkcml2ZXJzIGV2ZW4gdHJ5IHRvIHVzZSBpdCAoZXZlbiBpZiBub3Qgb24gYW4gczNjMjQ0MCBiYXNlZCBzeXN0ZW0pCisgKiBhcyBhIGRyaXZlciB3aGljaCBtYXkgc3VwcG9ydCBib3RoIDI0MTAgYW5kIDI0NDAgbWF5IHRyeSBhbmQgdXNlIGl0LgorKi8KKworaW50IF9faW5pdCBzM2MyNDQwX2NvcmVfaW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnMzYzI0NDBfc3lzY2xhc3MpOworfQorCitjb3JlX2luaXRjYWxsKHMzYzI0NDBfY29yZV9pbml0KTsKKworaW50IF9faW5pdCBzM2MyNDQwX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcHJpbnRrKCJTM0MyNDQwOiBJbml0aWFsaXNpbmcgYXJjaGl0ZWN0dXJlXG4iKTsKKworCXJldCA9IHN5c2Rldl9yZWdpc3RlcigmczNjMjQ0MF9zeXNkZXYpOworCWlmIChyZXQgIT0gMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgc3lzZGV2IGZvciBzM2MyNDQwXG4iKTsKKwllbHNlCisJCXJldCA9IHBsYXRmb3JtX2FkZF9kZXZpY2VzKHMzYzI0eHhfdWFydF9kZXZzLCBzM2MyNDQwX3VhcnRfY291bnQpOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5Y2I2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qIGFyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBIZWFkZXIgZmlsZSBmb3IgczNjMjQ0MCBjcHUgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTW9kaWZpY2F0aW9uczoKKyAqCTI0LUF1Zy0yMDA0IEJKRCAgU3RhcnQgb2YgUzNDMjQ0MCBDUFUgc3VwcG9ydAorICoJMDQtTm92LTIwMDQgQkpEICBBZGRlZCBzM2MyNDQwX2luaXRfdWFydHMoKQorICoJMDQtSmFuLTIwMDUgQkpEICBNb3ZlZCB1YXJ0IGluaXQgdG8gY3B1IGNvZGUKKyAqCTEwLUphbi0yMDA1IEJKRCAgTW92ZWQgMjQ0MCBzcGVjaWZpYyBpbml0IGhlcmUKKyAqCTE0LUphbi0yMDA1IEJKRCAgU3BsaXQgdGhlIGNsb2NrIGluaXRpYWxpc2F0aW9uIGNvZGUKKyovCisKKyNpZmRlZiBDT05GSUdfQ1BVX1MzQzI0NDAKKworZXh0ZXJuICBpbnQgczNjMjQ0MF9pbml0KHZvaWQpOworCitleHRlcm4gdm9pZCBzM2MyNDQwX21hcF9pbyhzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IHNpemUpOworCitleHRlcm4gdm9pZCBzM2MyNDQwX2luaXRfdWFydHMoc3RydWN0IHMzYzI0MTBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pOworCitleHRlcm4gdm9pZCBzM2MyNDQwX2luaXRfY2xvY2tzKGludCB4dGFsKTsKKworI2Vsc2UKKyNkZWZpbmUgczNjMjQ0MF9pbml0X2Nsb2NrcyBOVUxMCisjZGVmaW5lIHMzYzI0NDBfaW5pdF91YXJ0cyBOVUxMCisjZGVmaW5lIHMzYzI0NDBfbWFwX2lvIE5VTEwKKyNkZWZpbmUgczNjMjQ0MF9pbml0IE5VTEwKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvc2xlZXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTc2OGRhYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zbGVlcC5TCkBAIC0wLDAgKzEsMTgwIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvc2xlZXAuUworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNDEwIFBvd2VyIE1hbmFnZXIgKFN1c3BlbmQtVG8tUkFNKSBzdXBwb3J0CisgKgorICogQmFzZWQgb24gUFhBL1NBMTEwMCBzbGVlcCBjb2RlIGJ5OgorICoJTmljb2xhcyBQaXRyZSwgKGMpIDIwMDIgTW9udGEgVmlzdGEgU29mdHdhcmUgSW5jCisgKglDbGlmZiBCcmFrZSwgKGMpIDIwMDEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLW1lbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmg+CisKKy8qIENPTkZJR19ERUJVR19SRVNVTUUgaXMgZGFuZ2Vyb3VzIGlmIHlvdXIgYm9vdGxvYWRlciBkb2VzIG5vdAorICogcmVzZXQgdGhlIFVBUlQgY29uZmlndXJhdGlvbiwgb25seSBlbmFibGUgaWYgeW91IHJlYWxseSBuZWVkIHRoaXMhCisqLworLy8jZGVmaW5lIENPTkZJR19ERUJVR19SRVNVTUUKKworCS50ZXh0CisKKwkvKiBzM2MyNDEwX2NwdV9zdXNwZW5kCisJICoKKwkgKiBwdXQgdGhlIGNwdSBpbnRvIHNsZWVwIG1vZGUKKwkgKgorCSAqIGVudHJ5OgorCSAqCXIwID0gc2xlZXAgc2F2ZSBibG9jaworCSovCisKK0VOVFJZKHMzYzI0MTBfY3B1X3N1c3BlbmQpCisJc3RtZmQJc3AhLCB7IHI0IC0gcjEyLCBsciB9CisKKwlAQCBzdG9yZSBjby1wcm9jZXNzb3IgcmVnaXN0ZXJzCisKKwltcmMJcDE1LCAwLCByNCwgYzE1LCBjMSwgMAlAIENQIGFjY2VzcyByZWdpc3RlcgorCW1yYwlwMTUsIDAsIHI1LCBjMTMsIGMwLCAwCUAgUElECisJbXJjCXAxNSwgMCwgcjYsIGMzLCBjMCwgMAlAIERvbWFpbiBJRAorCW1yYwlwMTUsIDAsIHI3LCBjMiwgYzAsIDAJQCB0cmFuc2xhdGlvbiB0YWJsZSBiYXNlIGFkZHJlc3MKKwltcmMJcDE1LCAwLCByOCwgYzIsIGMwLCAwCUAgYXV4aWxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXIKKwltcmMJcDE1LCAwLCByOSwgYzEsIGMwLCAwCUAgY29udHJvbCByZWdpc3RlcgorCisJc3RtaWEJcjAsIHsgcjQgLSByMTMgfQorCisJQEAgZmx1c2ggdGhlIGNhY2hlcyB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBiYWNrIG91dCB0bworCUBAIFNEUkFNIGJlZm9yZSB0aGUgY29yZSBwb3dlcnMgZG93bgorCisJYmwJYXJtOTIwX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCisKKwlAQCBwcmVwYXJlIGNwdSB0byBzbGVlcAorCisJbGRyCXI0LCA9UzNDMjQxMF9SRUZSRVNICisJbGRyCXI1LCA9UzNDMjQxMF9NSVNDQ1IKKwlsZHIJcjYsID1TM0MyNDEwX0NMS0NPTgorCWxkcglyNywgWyByNCBdCQlAIGdldCBSRUZSRVNIIChhbmQgZW5zdXJlIGluIFRMQikKKwlsZHIJcjgsIFsgcjUgXQkJQCBnZXQgTUlTQ0NSIChhbmQgZW5zdXJlIGluIFRMQikKKwlsZHIJcjksIFsgcjYgXQkJQCBnZXQgQ0xLQ09OIChhbmQgZW5zdXJlIGluIFRMQikKKworCW9ycglyNywgcjcsICNTM0MyNDEwX1JFRlJFU0hfU0VMRglAIFNEUkFNIHNsZWVwIGNvbW1hbmQKKwlvcnIJcjgsIHI4LCAjUzNDMjQxMF9NSVNDQ1JfU0RTTEVFUCBAIFNEUkFNIHBvd2VyLWRvd24gc2lnbmFscworCW9ycglyOSwgcjksICNTM0MyNDEwX0NMS0NPTl9QT1dFUglAIHBvd2VyIGRvd24gY29tbWFuZAorCisJdGVxCXBjLCAjMAkJCUAgZmlyc3QgYXMgYSB0cmlhbC1ydW4gdG8gbG9hZCBjYWNoZQorCWJsCXMzYzI0MTBfZG9fc2xlZXAKKwl0ZXEJcjAsIHIwCQkJQCBub3cgZG8gaXQgZm9yIHJlYWwKKwliCXMzYzI0MTBfZG9fc2xlZXAJQAorCisJQEAgYWxpZ24gbmV4dCBiaXQgb2YgY29kZSB0byBjYWNoZSBsaW5lCisJLmFsaWduCTgKK3MzYzI0MTBfZG9fc2xlZXA6CisJc3RyZXEJcjcsIFsgcjQgXQkJCUAgU0RSQU0gc2xlZXAgY29tbWFuZAorCXN0cmVxCXI4LCBbIHI1IF0JCQlAIFNEUkFNIHBvd2VyLWRvd24gY29uZmlnCisJc3RyZXEJcjksIFsgcjYgXQkJCUAgQ1BVIHNsZWVwCisxOgliZXEJMWIKKwltb3YJcGMsIHIxNAorCisJQEAgcmV0dXJuIHRvIHRoZSBjYWxsZXIsIGFmdGVyIGhhdmluZyB0aGUgTU1VCisJQEAgdHVybmVkIG9uLCB0aGlzIHJlc3RvcmVzIHRoZSBsYXN0IGJpdHMgZnJvbSB0aGUKKwlAQCBzdGFjaworcmVzdW1lX3dpdGhfbW11OgorCWxkbWZkCXNwISwgeyByNCAtIHIxMiwgcGMgfQorCisJLmx0b3JnCisKKwlAQCB0aGUgbmV4dCBiaXRzIHNpdCBpbiB0aGUgLmRhdGEgc2VnbWVudCwgZXZlbiB0aG91Z2ggdGhleQorCUBAIGhhcHBlbiB0byBiZSBjb2RlLi4uIHRoZSBzM2MyNDEwX3NsZWVwX3NhdmVfcGh5cyBuZWVkcyB0byBiZQorCUBAIGFjY2Vzc2VkIGJ5IHRoZSByZXN1bWUgY29kZSBiZWZvcmUgaXQgY2FuIHJlc3RvcmUgdGhlIE1NVS4KKwlAQCBUaGlzIG1lYW5zIHRoYXQgdGhlIHZhcmlhYmxlIGhhcyB0byBiZSBjbG9zZSBlbm91Z2ggZm9yIHRoZQorCUBAIGNvZGUgdG8gcmVhZCBpdC4uLiBzaW5jZSB0aGUgLnRleHQgc2VnbWVudCBuZWVkcyB0byBiZSBSTywKKwlAQCB0aGUgZGF0YSBzZWdtZW50IGNhbiBiZSB0aGUgb25seSBwbGFjZSB0byBwdXQgdGhpcyBjb2RlLgorCisJLmRhdGEKKworCS5nbG9iYWwJczNjMjQxMF9zbGVlcF9zYXZlX3BoeXMKK3MzYzI0MTBfc2xlZXBfc2F2ZV9waHlzOgorCS53b3JkCTAKKworCS8qIHMzYzI0MTBfY3B1X3Jlc3VtZQorCSAqCisJICogcmVzdW1lIGNvZGUgZW50cnkgZm9yIGJvb3Rsb2FkZXIgdG8gY2FsbAorCSAqCisJICogd2UgbXVzdCBwdXQgdGhpcyBjb2RlIGhlcmUgaW4gdGhlIGRhdGEgc2VnbWVudCBhcyB3ZSBoYXZlIG5vCisJICogb3RoZXIgd2F5IG9mIHJlc3RvcmluZyB0aGUgc3RhY2sgcG9pbnRlciBhZnRlciBzbGVlcCwgYW5kIHdlCisJICogbXVzdCBub3Qgd3JpdGUgdG8gdGhlIGNvZGUgc2VnbWVudCAoY29kZSBpcyByZWFkLW9ubHkpCisJKi8KKworRU5UUlkoczNjMjQxMF9jcHVfcmVzdW1lKQorCW1vdglyMCwgI1BTUl9JX0JJVCB8IFBTUl9GX0JJVCB8IE1PREVfU1ZDCisJbXNyCWNwc3JfYywgcjAKKworCUBAIGxvYWQgVUFSVCB0byBhbGxvdyB1cyB0byBwcmludCB0aGUgdHdvIGNoYXJhY3RlcnMgZm9yCisJQEAgcmVzdW1lIGRlYnVnCisKKwltb3YJcjIsICNTM0MyNDEwX1BBX1VBUlQgJiAweGZmMDAwMDAwCisJb3JyCXIyLCByMiwgI1MzQzI0MTBfUEFfVUFSVCAmIDB4ZmYwMDAKKworI2lmIDAKKwkvKiBTTURLMjQ0MCBMRUQgc2V0ICovCisJbW92CXIxNCwgI1MzQzI0MTBfUEFfR1BJTworCWxkcglyMTIsIFsgcjE0LCAjMHg1NCBdCisJYmljCXIxMiwgcjEyLCAjMzw8NAorCW9ycglyMTIsIHIxMiwgIzE8PDcKKwlzdHIJcjEyLCBbIHIxNCwgIzB4NTQgXQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfREVCVUdfUkVTVU1FCisJbW92CXIzLCAjJ0wnCisJc3RyYglyMywgWyByMiwgI1MzQzI0MTBfVVRYSCBdCisxMDAxOgorCWxkcmIJcjE0LCBbIHIzLCAjUzNDMjQxMF9VVFJTVEFUIF0KKwl0c3QJcjE0LCAjUzNDMjQxMF9VVFJTVEFUX1RYRQorCWJlcQkxMDAxYgorI2VuZGlmIC8qIENPTkZJR19ERUJVR19SRVNVTUUgKi8KKworCW1vdglyMSwgIzAKKwltY3IJcDE1LCAwLCByMSwgYzgsIGM3LCAwCQlAQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKwltY3IJcDE1LCAwLCByMSwgYzcsIGM3LCAwCQlAQCBpbnZhbGlkYXRlIEkgJiBEIGNhY2hlcworCisJbGRyCXIwLCBzM2MyNDEwX3NsZWVwX3NhdmVfcGh5cwlAIGFkZHJlc3Mgb2YgcmVzdG9yZSBibG9jaworCWxkbWlhCXIwLCB7IHI0IC0gcjEzIH0KKworCW1jcglwMTUsIDAsIHI0LCBjMTUsIGMxLCAwCQlAIENQIGFjY2VzcyByZWdpc3RlcgorCW1jcglwMTUsIDAsIHI1LCBjMTMsIGMwLCAwCQlAIFBJRAorCW1jcglwMTUsIDAsIHI2LCBjMywgYzAsIDAJCUAgRG9tYWluIElECisJbWNyCXAxNSwgMCwgcjcsIGMyLCBjMCwgMAkJQCB0cmFuc2xhdGlvbiB0YWJsZSBiYXNlCisJbWNyCXAxNSwgMCwgcjgsIGMxLCBjMSwgMAkJQCBhdXhpbGxpYXJ5IGNvbnRyb2wKKworI2lmZGVmIENPTkZJR19ERUJVR19SRVNVTUUKKwltb3YJcjMsICMnUicKKwlzdHJiCXIzLCBbIHIyLCAjUzNDMjQxMF9VVFhIIF0KKyNlbmRpZgorCisJbGRyCXIyLCA9cmVzdW1lX3dpdGhfbW11CisJbWNyCXAxNSwgMCwgcjksIGMxLCBjMCwgMAkJQCB0dXJuIG9uIE1NVSwgZXRjCisJbm9wCQkJCQlAIHNlY29uZC10by1sYXN0IGJlZm9yZSBtbXUKKwltb3YJcGMsIHIyCQkJCUAgZ28gYmFjayB0byB2aXJ0dWFsIGFkZHJlc3MKKworCS5sdG9yZwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5ZjBlMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC90aW1lLmMKQEAgLTAsMCArMSwyNTYgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC90aW1lLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcywgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy10aW1lci5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbG9jay5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZXJfc3RhcnR2YWw7CitzdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcl91c2VjX3RpY2tzOworCisjZGVmaW5lIFRJTUVSX1VTRUNfU0hJRlQgMTYKKworLyogd2UgdXNlIHRoZSBzaGlmdGVkIGFyaXRobWV0aWMgdG8gd29yayBvdXQgdGhlIHJhdGlvIG9mIHRpbWVyIHRpY2tzCisgKiB0byB1c2VjcywgYXMgb2Z0ZW4gdGhlIHBlcmlwaGVyYWwgY2xvY2sgaXMgbm90IGEgbmljZSBldmVuIG11bHRpcGxlCisgKiBvZiAxTUh6LgorICoKKyAqIHNoaWZ0IG9mIDE0IGFuZCAxNSBhcmUgdG9vIGxvdyBmb3IgdGhlIDEyTUh6LCAxNiBzZWVtcyB0byBiZSBvaworICogZm9yIHRoZSBjdXJyZW50IEhaIHZhbHVlIG9mIDIwMCB3aXRob3V0IHByb2R1Y2luZyBvdmVyZmxvd3MuCisgKgorICogT3JpZ2luYWwgcGF0Y2ggYnkgRGltaXRyeSBBbmRyaWMsIHVwZGF0ZWQgYnkgQmVuIERvb2tzCisqLworCisKKy8qIHRpbWVyX21hc2tfdXNlY190aWNrcworICoKKyAqIGdpdmVuIGEgY2xvY2sgYW5kIGRpdmlzb3IsIG1ha2UgdGhlIHZhbHVlIHRvIHBhc3MgaW50byB0aW1lcl90aWNrc190b191c2VjCisgKiB0byBzY2FsZSB0aGUgdGlja3MgaW50byB1c2VjcworKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCit0aW1lcl9tYXNrX3VzZWNfdGlja3ModW5zaWduZWQgbG9uZyBzY2FsZXIsIHVuc2lnbmVkIGxvbmcgcGNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGRlbiA9IHBjbGsgLyAxMDAwOworCisJcmV0dXJuICgoMTAwMCA8PCBUSU1FUl9VU0VDX1NISUZUKSAqIHNjYWxlciArIChkZW4gPj4gMSkpIC8gZGVuOworfQorCisvKiB0aW1lcl90aWNrc190b191c2VjCisgKgorICogY29udmVydCB0aW1lciB0aWNrcyB0byB1c2VjLgorKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRpbWVyX3RpY2tzX3RvX3VzZWModW5zaWduZWQgbG9uZyB0aWNrcykKK3sKKwl1bnNpZ25lZCBsb25nIHJlczsKKworCXJlcyA9IHRpY2tzICogdGltZXJfdXNlY190aWNrczsKKwlyZXMgKz0gMSA8PCAoVElNRVJfVVNFQ19TSElGVCAtIDQpOwkvKiByb3VuZCB1cCBzbGlnaHRseSAqLworCisJcmV0dXJuIHJlcyA+PiBUSU1FUl9VU0VDX1NISUZUOworfQorCisvKioqCisgKiBSZXR1cm5zIG1pY3Jvc2Vjb25kICBzaW5jZSBsYXN0IGNsb2NrIGludGVycnVwdC4gIE5vdGUgdGhhdCBpbnRlcnJ1cHRzCisgKiB3aWxsIGhhdmUgYmVlbiBkaXNhYmxlZCBieSBkb19nZXR0aW1lb2Zmc2V0KCkKKyAqIElSUXMgYXJlIGRpc2FibGVkIGJlZm9yZSBlbnRlcmluZyBoZXJlIGZyb20gZG9fZ2V0dGltZW9mZGF5KCkKKyAqLworCisjZGVmaW5lIFNSQ1BORF9USU1FUjQgKDE8PChJUlFfVElNRVI0IC0gSVJRX0VJTlQwKSkKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjMjQxMF9nZXR0aW1lb2Zmc2V0ICh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdGRvbmU7CisJdW5zaWduZWQgbG9uZyBpcnFwZW5kOworCXVuc2lnbmVkIGxvbmcgdHZhbDsKKworCS8qIHdvcmsgb3V0IGhvdyBtYW55IHRpY2tzIGhhdmUgZ29uZSBzaW5jZSBsYXN0IHRpbWVyIGludGVycnVwdCAqLworCisgICAgICAgIHR2YWwgPSAgX19yYXdfcmVhZGwoUzNDMjQxMF9UQ05UTyg0KSk7CisJdGRvbmUgPSB0aW1lcl9zdGFydHZhbCAtIHR2YWw7CisKKwkvKiBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYW4gaW50ZXJydXB0IHBlbmRpbmcgKi8KKworCWlycXBlbmQgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1NSQ1BORCk7CisJaWYgKGlycXBlbmQgJiBTUkNQTkRfVElNRVI0KSB7CisJCS8qIHJlLXJlYWQgdGhlIHRpbWVyLCBhbmQgdHJ5IGFuZCBmaXggdXAgZm9yIHRoZSBtaXNzZWQKKwkJICogaW50ZXJydXB0LiBOb3RlLCB0aGUgaW50ZXJydXB0IG1heSBnbyBvZmYgYmVmb3JlIHRoZQorCQkgKiB0aW1lciBoYXMgcmUtbG9hZGVkIGZyb20gd3JhcHBpbmcuCisJCSAqLworCisJCXR2YWwgPSAgX19yYXdfcmVhZGwoUzNDMjQxMF9UQ05UTyg0KSk7CisJCXRkb25lID0gdGltZXJfc3RhcnR2YWwgLSB0dmFsOworCisJCWlmICh0dmFsICE9IDApCisJCQl0ZG9uZSArPSB0aW1lcl9zdGFydHZhbDsKKwl9CisKKwlyZXR1cm4gdGltZXJfdGlja3NfdG9fdXNlYyh0ZG9uZSk7Cit9CisKKworLyoKKyAqIElSUSBoYW5kbGVyIGZvciB0aGUgdGltZXIKKyAqLworc3RhdGljIGlycXJldHVybl90CitzM2MyNDEwX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOworCXRpbWVyX3RpY2socmVncyk7CisJd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHMzYzI0MTBfdGltZXJfaXJxID0geworCS5uYW1lCQk9ICJTM0MyNDEwIFRpbWVyIFRpY2siLAorCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLmhhbmRsZXIJPSBzM2MyNDEwX3RpbWVyX2ludGVycnVwdAorfTsKKworLyoKKyAqIFNldCB1cCB0aW1lciBpbnRlcnJ1cHQsIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiBzZWNvbmRzLgorICoKKyAqIEN1cnJlbnRseSB3ZSBvbmx5IHVzZSB0aW1lcjQsIGFzIGl0IGlzIHRoZSBvbmx5IHRpbWVyIHdoaWNoIGhhcyBubworICogb3RoZXIgZnVuY3Rpb24gdGhhdCBjYW4gYmUgZXhwbG9pdGVkIGV4dGVybmFsbHkKKyAqLworc3RhdGljIHZvaWQgczNjMjQxMF90aW1lcl9zZXR1cCAodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRjb247CisJdW5zaWduZWQgbG9uZyB0Y250OworCXVuc2lnbmVkIGxvbmcgdGNmZzE7CisJdW5zaWduZWQgbG9uZyB0Y2ZnMDsKKworCXRjbnQgPSAweGZmZmY7ICAvKiBkZWZhdWx0IHZhbHVlIGZvciB0Y250ICovCisKKwkvKiByZWFkIHRoZSBjdXJyZW50IHRpbWVyIGNvbmZpZ3VyYXRpb24gYml0cyAqLworCisJdGNvbiA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVENPTik7CisJdGNmZzEgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDRkcxKTsKKwl0Y2ZnMCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVENGRzApOworCisJLyogY29uZmlndXJlIHRoZSBzeXN0ZW0gZm9yIHdoaWNoZXZlciBtYWNoaW5lIGlzIGluIHVzZSAqLworCisJaWYgKG1hY2hpbmVfaXNfYmFzdCgpIHx8IG1hY2hpbmVfaXNfdnIxMDAwKCkpIHsKKwkJLyogdGltZXIgaXMgYXQgMTJNSHosIHNjYWxlciBpcyAxICovCisJCXRpbWVyX3VzZWNfdGlja3MgPSB0aW1lcl9tYXNrX3VzZWNfdGlja3MoMSwgMTIwMDAwMDApOworCQl0Y250ID0gMTIwMDAwMDAgLyBIWjsKKworCQl0Y2ZnMSAmPSB+UzNDMjQxMF9UQ0ZHMV9NVVg0X01BU0s7CisJCXRjZmcxIHw9IFMzQzI0MTBfVENGRzFfTVVYNF9UQ0xLMTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIHBjbGs7CisJCXN0cnVjdCBjbGsgKmNsazsKKworCQkvKiBmb3IgdGhlIGgxOTQwIChhbmQgb3RoZXJzKSwgd2UgdXNlIHRoZSBwY2xrIGZyb20gdGhlIGNvcmUKKwkJICogdG8gZ2VuZXJhdGUgdGhlIHRpbWVyIHZhbHVlcy4gc2luY2UgdmFsdWVzIGFyb3VuZCA1MCB0bworCQkgKiA3ME1IeiBhcmUgbm90IHZhbHVlcyB3ZSBjYW4gZGlyZWN0bHkgZ2VuZXJhdGUgdGhlIHRpbWVyCisJCSAqIHZhbHVlIGZyb20sIHdlIG5lZWQgdG8gcHJlLXNjYWxlIGFuZCBkaXZpZGUgYmVmb3JlIHVzaW5nIGl0LgorCQkgKgorCQkgKiBmb3IgaW5zdGFuY2UsIHVzaW5nIDUwLjdNSHogYW5kIGRpdmlkaW5nIGJ5IDYgZ2l2ZXMgOC40NU1IegorCQkgKiAoOC40NSB0aWNrcyBwZXIgdXNlYykKKwkJICovCisKKwkJLyogdGhpcyBpcyB1c2VkIGFzIGRlZmF1bHQgaWYgbm8gb3RoZXIgdGltZXIgY2FuIGJlIGZvdW5kICovCisKKwkJY2xrID0gY2xrX2dldChOVUxMLCAidGltZXJzIik7CisJCWlmIChJU19FUlIoY2xrKSkKKwkJCXBhbmljKCJmYWlsZWQgdG8gZ2V0IGNsb2NrIGZvciBzeXN0ZW0gdGltZXIiKTsKKworCQljbGtfdXNlKGNsayk7CisJCWNsa19lbmFibGUoY2xrKTsKKworCQlwY2xrID0gY2xrX2dldF9yYXRlKGNsayk7CisKKwkJLyogY29uZmlndXJlIGNsb2NrIHRpY2sgKi8KKworCQl0aW1lcl91c2VjX3RpY2tzID0gdGltZXJfbWFza191c2VjX3RpY2tzKDYsIHBjbGspOworCisJCXRjZmcxICY9IH5TM0MyNDEwX1RDRkcxX01VWDRfTUFTSzsKKwkJdGNmZzEgfD0gUzNDMjQxMF9UQ0ZHMV9NVVg0X0RJVjI7CisKKwkJdGNmZzAgJj0gflMzQzI0MTBfVENGR19QUkVTQ0FMRVIxX01BU0s7CisJCXRjZmcwIHw9ICgoNiAtIDEpIC8gMikgPDwgUzNDMjQxMF9UQ0ZHX1BSRVNDQUxFUjFfU0hJRlQ7CisKKwkJdGNudCA9IChwY2xrIC8gNikgLyBIWjsKKwl9CisKKwkvKiB0aW1lcnMgcmVsb2FkIGFmdGVyIGNvdW50aW5nIHplcm8sIHNvIHJlZHVjZSB0aGUgY291bnQgYnkgMSAqLworCisJdGNudC0tOworCisJcHJpbnRrKCJ0aW1lciB0Y29uPSUwOGx4LCB0Y250ICUwNGx4LCB0Y2ZnICUwOGx4LCUwOGx4LCB1c2VjICUwOGx4XG4iLAorCSAgICAgICB0Y29uLCB0Y250LCB0Y2ZnMCwgdGNmZzEsIHRpbWVyX3VzZWNfdGlja3MpOworCisJLyogY2hlY2sgdG8gc2VlIGlmIHRpbWVyIGlzIHdpdGhpbiAxNmJpdCByYW5nZS4uLiAqLworCWlmICh0Y250ID4gMHhmZmZmKSB7CisJCXBhbmljKCJzZXR1cF90aW1lcjogSFogaXMgdG9vIHNtYWxsLCBjYW5ub3QgY29uZmlndXJlIHRpbWVyISIpOworCQlyZXR1cm47CisJfQorCisJX19yYXdfd3JpdGVsKHRjZmcxLCBTM0MyNDEwX1RDRkcxKTsKKwlfX3Jhd193cml0ZWwodGNmZzAsIFMzQzI0MTBfVENGRzApOworCisJdGltZXJfc3RhcnR2YWwgPSB0Y250OworCV9fcmF3X3dyaXRlbCh0Y250LCBTM0MyNDEwX1RDTlRCKDQpKTsKKworCS8qIGVuc3VyZSB0aW1lciBpcyBzdG9wcGVkLi4uICovCisKKwl0Y29uICY9IH4oNzw8MjApOworCXRjb24gfD0gUzNDMjQxMF9UQ09OX1Q0UkVMT0FEOworCXRjb24gfD0gUzNDMjQxMF9UQ09OX1Q0TUFOVUFMVVBEOworCisJX19yYXdfd3JpdGVsKHRjb24sIFMzQzI0MTBfVENPTik7CisJX19yYXdfd3JpdGVsKHRjbnQsIFMzQzI0MTBfVENOVEIoNCkpOworCV9fcmF3X3dyaXRlbCh0Y250LCBTM0MyNDEwX1RDTVBCKDQpKTsKKworCS8qIHN0YXJ0IHRoZSB0aW1lciBydW5uaW5nICovCisJdGNvbiB8PSBTM0MyNDEwX1RDT05fVDRTVEFSVDsKKwl0Y29uICY9IH5TM0MyNDEwX1RDT05fVDRNQU5VQUxVUEQ7CisJX19yYXdfd3JpdGVsKHRjb24sIFMzQzI0MTBfVENPTik7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzM2MyNDEwX3RpbWVyX2luaXQgKHZvaWQpCit7CisJczNjMjQxMF90aW1lcl9zZXR1cCgpOworCXNldHVwX2lycShJUlFfVElNRVI0LCAmczNjMjQxMF90aW1lcl9pcnEpOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIHMzYzI0eHhfdGltZXIgPSB7CisJLmluaXQJCT0gczNjMjQxMF90aW1lcl9pbml0LAorCS5vZmZzZXQJCT0gczNjMjQxMF9nZXR0aW1lb2Zmc2V0LAorCS5yZXN1bWUJCT0gczNjMjQxMF90aW1lcl9zZXR1cAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMmI2MTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jCkBAIC0wLDAgKzEsMTEzIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcworICogICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvRUIyNDEwSVRYLworICoKKyAqIFNpbXRlYyBCQVNUIGFuZCBUaG9yY29tIFZSMTAwMCBVU0IgcG9ydCBzdXBwb3J0IGZ1bmN0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTW9kaWZpY2F0aW9uczoKKyAqCTE0LVNlcC0yMDA0IEJKRCAgQ3JlYXRlZAorICoJMTgtT2N0LTIwMDQgQkpEICBDbGVhbnVwcywgYW5kIGFkZGVkIGNvZGUgdG8gcmVwb3J0IE9DIGNsZWFyZWQKKyovCisKKyNkZWZpbmUgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvYmFzdC1tYXAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9iYXN0LWlycS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi1jb250cm9sLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgImRldnMuaCIKKyNpbmNsdWRlICJ1c2Itc2ltdGVjLmgiCisKKy8qIGNvbnRyb2wgcG93ZXIgYW5kIG1vbml0b3Igb3Zlci1jdXJyZW50IGV2ZW50cyBvbiB2YXJpb3VzIFNpbXRlYworICogZGVzaWduZWQgYm9hcmRzLgorKi8KKworc3RhdGljIHZvaWQKK3VzYl9zaW10ZWNfcG93ZXJjb250cm9sKGludCBwb3J0LCBpbnQgdG8pCit7CisJcHJfZGVidWcoInVzYl9zaW10ZWNfcG93ZXJjb250cm9sKCVkLCVkKVxuIiwgcG9ydCwgdG8pOworCisJaWYgKHBvcnQgPT0gMSkKKwkJczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQQjQsIHRvID8gMDoxKTsKK30KKworc3RhdGljIGlycXJldHVybl90Cit1c2Jfc2ltdGVjX29jaXJxKGludCBpcnEsIHZvaWQgKnB3LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgczNjMjQxMF9oY2RfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgczNjMjQxMF9oY2RfaW5mbyAqKXB3OworCisJaWYgKHMzYzI0MTBfZ3Bpb19nZXRwaW4oUzNDMjQxMF9HUEcxMCkgPT0gMCkgeworCQlwcl9kZWJ1ZygidXNiX3NpbXRlYzogb3Zlci1jdXJyZW50IGlycSAob2MgZGV0ZWN0ZWQpXG4iKTsKKwkJczNjMjQxMF9yZXBvcnRfb2MoaW5mbywgMyk7CisJfSBlbHNlIHsKKwkJcHJfZGVidWcoInVzYl9zaW10ZWM6IG92ZXItY3VycmVudCBpcnEgKG9jIGNsZWFyZWQpXG4iKTsKKwkJczNjMjQxMF9yZXBvcnRfb2MoaW5mbywgMCk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCB1c2Jfc2ltdGVjX2VuYWJsZW9jKHN0cnVjdCBzM2MyNDEwX2hjZF9pbmZvICppbmZvLCBpbnQgb24pCit7CisJaW50IHJldDsKKworCWlmIChvbikgeworCQlyZXQgPSByZXF1ZXN0X2lycShJUlFfVVNCT0MsIHVzYl9zaW10ZWNfb2NpcnEsIFNBX0lOVEVSUlVQVCwKKwkJCQkgICJVU0IgT3Zlci1jdXJyZW50IiwgaW5mbyk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVxdWVzdCB1c2Igb2MgaXJxXG4iKTsKKwkJfQorCisJCXNldF9pcnFfdHlwZShJUlFfVVNCT0MsIElSUVRfQk9USEVER0UpOworCX0gZWxzZSB7CisJCWZyZWVfaXJxKElSUV9VU0JPQywgaW5mbyk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfaGNkX2luZm8gdXNiX3NpbXRlY19pbmZvID0geworCS5wb3J0WzBdCT0geworCQkuZmxhZ3MJPSBTM0NfSENERkxHX1VTRUQKKwl9LAorCS5wb3J0WzFdCT0geworCQkuZmxhZ3MJPSBTM0NfSENERkxHX1VTRUQKKwl9LAorCisJLnBvd2VyX2NvbnRyb2wJPSB1c2Jfc2ltdGVjX3Bvd2VyY29udHJvbCwKKwkuZW5hYmxlX29jCT0gdXNiX3NpbXRlY19lbmFibGVvYywKK307CisKKworaW50IHVzYl9zaW10ZWNfaW5pdCh2b2lkKQoreworCXByaW50aygiVVNCIFBvd2VyIENvbnRyb2wsIChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljc1xuIik7CisJczNjX2RldmljZV91c2IuZGV2LnBsYXRmb3JtX2RhdGEgPSAmdXNiX3NpbXRlY19pbmZvOworCisJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQQjQsIFMzQzI0MTBfR1BCNF9PVVRQKTsKKwlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BCNCwgMSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmMwY2M4MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmgKQEAgLTAsMCArMSwxOSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIGh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzL0VCMjQxMElUWC8KKyAqCisgKiBTaW10ZWMgQkFTVCBhbmQgVGhvcmNvbSBWUjEwMDAgVVNCIHBvcnQgc3VwcG9ydCBmdW5jdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE1vZGlmaWNhdGlvbnM6CisgKgkyMC1BdWctMjAwNCBCSkQgIENyZWF0ZWQKKyovCisKK2V4dGVybiBpbnQgdXNiX3NpbXRlY19pbml0KHZvaWQpOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGNkZTU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvS2NvbmZpZwpAQCAtMCwwICsxLDE2MiBAQAoraWYgQVJDSF9TQTExMDAKKworbWVudSAiU0ExMXgwIEltcGxlbWVudGF0aW9ucyIKKworY29uZmlnIFNBMTEwMF9BU1NBQkVUCisJYm9vbCAiQXNzYWJldCIKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEludGVsKFIpIFN0cm9uZ0FSTShSKSBTQS0xMTEwCisJICBNaWNyb3Byb2Nlc3NvciBEZXZlbG9wbWVudCBCb2FyZCAoYWxzbyBrbm93biBhcyB0aGUgQXNzYWJldCkuCisKK2NvbmZpZyBBU1NBQkVUX05FUE9OU0VUCisJYm9vbCAiSW5jbHVkZSBzdXBwb3J0IGZvciBOZXBvbnNldCIKKwlkZXBlbmRzIG9uIFNBMTEwMF9BU1NBQkVUCisJc2VsZWN0IFNBMTExMQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgSW50ZWwoUikgU3Ryb25nQVJNKFIpIFNBLTExMTAKKwkgIE1pY3JvcHJvY2Vzc29yIERldmVsb3BtZW50IEJvYXJkIChBc3NhYmV0KSAgd2l0aCB0aGUgU0EtMTExMQorCSAgRGV2ZWxvcG1lbnQgQm9hcmQgKE5lcG9uKS4KKworY29uZmlnIFNBMTEwMF9DRVJGCisJYm9vbCAiQ2VyZkJvYXJkIgorCWhlbHAKKwkgIFRoZSBJbnRyaW5zeWMgQ2VyZkJvYXJkIGlzIGJhc2VkIG9uIHRoZSBTdHJvbmdBUk0gMTExMCAoRGlzY29udGludWVkKS4KKwkgIE1vcmUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGF0OgorCSAgPGh0dHA6Ly93d3cuaW50cmluc3ljLmNvbS9wcm9kdWN0cy9jZXJmYm9hcmQvPi4KKworCSAgU2F5IFkgaWYgY29uZmlndXJpbmcgZm9yIGFuIEludHJpbnN5YyBDZXJmQm9hcmQuCisJICBTYXkgTiBvdGhlcndpc2UuCisKK2Nob2ljZQorCXByb21wdCAiQ2VyZiBGbGFzaCBhdmFpbGFibGUiCisJZGVwZW5kcyBvbiBTQTExMDBfQ0VSRgorCWRlZmF1bHQgU0ExMTAwX0NFUkZfRkxBU0hfOE1CCisKK2NvbmZpZyBTQTExMDBfQ0VSRl9GTEFTSF84TUIKKwlib29sICI4TUIiCisKK2NvbmZpZyBTQTExMDBfQ0VSRl9GTEFTSF8xNk1CCisJYm9vbCAiMTZNQiIKKworY29uZmlnIFNBMTEwMF9DRVJGX0ZMQVNIXzMyTUIKKwlib29sICIzMk1CIgorCitlbmRjaG9pY2UKKworY29uZmlnIFNBMTEwMF9DT0xMSUUKKwlib29sICJTaGFycCBaYXVydXMgU0w1NTAwIgorCXNlbGVjdCBTSEFSUF9MT0NPTU8KKwlzZWxlY3QgU0hBUlBfU0NPT1AKKwlzZWxlY3QgU0hBUlBfUEFSQU0KKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIFNoYXJwIFphdXJ1cyBTTDU1MDAgUERBcy4KKworY29uZmlnIFNBMTEwMF9IMzEwMAorCWJvb2wgIkNvbXBhcSBpUEFRIEgzMTAwIgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gdGhlIENvbXBhcSBpUEFRCisJICBIMzEwMCBoYW5kaGVsZCBjb21wdXRlci4gIEluZm9ybWF0aW9uIGFib3V0IHRoaXMgbWFjaGluZSBhbmQgdGhlCisJICBMaW51eCBwb3J0IHRvIHRoaXMgbWFjaGluZSBjYW4gYmUgZm91bmQgYXQ6CisKKwkgIDxodHRwOi8vd3d3LmhhbmRoZWxkcy5vcmcvQ29tcGFxL2luZGV4Lmh0bWwjaVBBUV9IMzEwMD4KKwkgIDxodHRwOi8vd3d3LmNvbXBhcS5jb20vcHJvZHVjdHMvaGFuZGhlbGRzL3BvY2tldHBjLz4KKworY29uZmlnIFNBMTEwMF9IMzYwMAorCWJvb2wgIkNvbXBhcSBpUEFRIEgzNjAwL0gzNzAwIgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gdGhlIENvbXBhcSBpUEFRCisJICBIMzYwMCBoYW5kaGVsZCBjb21wdXRlci4gIEluZm9ybWF0aW9uIGFib3V0IHRoaXMgbWFjaGluZSBhbmQgdGhlCisJICBMaW51eCBwb3J0IHRvIHRoaXMgbWFjaGluZSBjYW4gYmUgZm91bmQgYXQ6CisKKwkgIDxodHRwOi8vd3d3LmhhbmRoZWxkcy5vcmcvQ29tcGFxL2luZGV4Lmh0bWwjaVBBUV9IMzYwMD4KKwkgIDxodHRwOi8vd3d3LmNvbXBhcS5jb20vcHJvZHVjdHMvaGFuZGhlbGRzL3BvY2tldHBjLz4KKworY29uZmlnIFNBMTEwMF9IMzgwMAorCWJvb2wgIkNvbXBhcSBpUEFRIEgzODAwIgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gdGhlIENvbXBhcSBpUEFRIEgzODAwCisJICBzZXJpZXMgaGFuZGhlbGQgY29tcHV0ZXIuICBJbmZvcm1hdGlvbiBhYm91dCB0aGlzIG1hY2hpbmUgYW5kIHRoZQorCSAgTGludXggcG9ydCB0byB0aGlzIG1hY2hpbmUgY2FuIGJlIGZvdW5kIGF0OgorCisJICA8aHR0cDovL3d3dy5oYW5kaGVsZHMub3JnL0NvbXBhcS9pbmRleC5odG1sI2lQQVFfSDM4MDA+CisJICA8aHR0cDovL3d3dy5jb21wYXEuY29tL3Byb2R1Y3RzL2hhbmRoZWxkcy9wb2NrZXRwYy8+CisKK2NvbmZpZyBTQTExMDBfSDNYWFgKKwlib29sCisJZGVwZW5kcyBvbiBTQTExMDBfSDMxMDAgfHwgU0ExMTAwX0gzNjAwIHx8IFNBMTEwMF9IMzgwMAorCWRlZmF1bHQgeQorCitjb25maWcgU0ExMTAwX0JBREdFNAorCWJvb2wgIkhQIExhYnMgQmFkZ2VQQUQgNCIKKwlzZWxlY3QgU0ExMTExCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBhIGtlcm5lbCBmb3IgdGhlIEhQIExhYm9yYXRvcmllcworCSAgQmFkZ2VQQUQgNC4KKworY29uZmlnIFNBMTEwMF9KT1JOQURBNzIwCisJYm9vbCAiSFAgSm9ybmFkYSA3MjAiCisJc2VsZWN0IFNBMTExMQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgYSBrZXJuZWwgZm9yIHRoZSBIUCBKb3JuYWRhIDcyMAorCSAgaGFuZGhlbGQgY29tcHV0ZXIuICBTZWUgPGh0dHA6Ly93d3cuaHAuY29tL2pvcm5hZGEvcHJvZHVjdHMvNzIwPgorCSAgZm9yIGRldGFpbHMuCisKK2NvbmZpZyBTQTExMDBfSEFDS0tJVAorCWJvb2wgIkhhY2tLaXQgQ29yZSBDUFUgQm9hcmQiCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBIYWNrS2l0IENvcmUgQ1BVIEJvYXJkCisJICA8aHR0cDovL2hhY2traXQuZWxldHp0cmljay5kZT47CisKK2NvbmZpZyBTQTExMDBfTEFSVAorCWJvb2wgIkxBUlQiCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBMaW51eCBBZHZhbmNlZCBSYWRpbyBUZXJtaW5hbAorCSAgKGFsc28ga25vd24gYXMgdGhlIExBUlQpLiAgU2VlIDxodHRwOi8vd3d3LmxhcnQudHVkZWxmdC5ubC8+IGZvcgorCSAgaW5mb3JtYXRpb24gb24gdGhlIExBUlQuCisKK2NvbmZpZyBTQTExMDBfUExFQgorCWJvb2wgIlBMRUIiCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHZlcnNpb24gMSBvZiB0aGUgUG9ydGFibGUgTGludXgKKwkgIEVtYmVkZGVkIEJvYXJkIChhbHNvIGtub3duIGFzIFBMRUIpLgorCSAgU2VlIDxodHRwOi8vd3d3LmRpc3kuY3NlLnVuc3cuZWR1LmF1L0hhcmR3YXJlL1BMRUIvPgorCSAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK2NvbmZpZyBTQTExMDBfU0hBTk5PTgorCWJvb2wgIlNoYW5ub24iCisJaGVscAorCSAgVGhlIFNoYW5ub24gKGFsc28ga25vd24gYXMgYSBUdXhzY3JlZW4sIGFuZCBhbHNvIGFzIGEgSVMyNjMwKSB3YXMgYQorCSAgbGltaXRlZCBlZGl0aW9uIHdlYnBob25lIHByb2R1Y2VkIGJ5IFBoaWxpcHMuIFRoZSBTaGFubm9uIGlzIGEgU0ExMTAwCisJICBwbGF0Zm9ybSB3aXRoIGEgNjQweDQ4MCBMQ0QsIHRvdWNoc2NyZWVuLCBDSVIga2V5Ym9hcmQsIFBDTUNJQSBzbG90cywKKwkgIGFuZCBhIHRlbGNvIGludGVyZmFjZS4KKworY29uZmlnIFNBMTEwMF9TSU1QQUQKKwlib29sICJTaW1wYWQiCisJaGVscAorCSAgVGhlIFNJRU1FTlMgd2VicGFkIFNJTXBhZCBpcyBiYXNlZCBvbiB0aGUgU3Ryb25nQVJNIDExMTAuIFRoZXJlCisJICBhcmUgdHdvIGRpZmZlcmVudCB2ZXJzaW9ucyBDTDQgYW5kIFNMNC4gQ0w0IGhhcyAzMk1CIFJBTSBhbmQgMTZNQgorCSAgRkxBU0guIFRoZSBTTDQgdmVyc2lvbiBnb3QgNjQgTUIgUkFNIGFuZCAzMiBNQiBGTEFTSCBhbmQgYQorCSAgUENNQ0lBLVNsb3QuIFRoZSB2ZXJzaW9uIGZvciB0aGUgR2VybWFueSBUZWxlY29tIChEVEFHKSBpcyB0aGUgc2FtZQorCSAgbGlrZSBDTDQgaW4gYWRkaXRpb25hbCBpdCBoYXMgYSBQQ01DSUEtU2xvdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24KKwkgIHZpc2l0IDxodHRwOi8vd3d3Lm15LXNpZW1lbnMuY29tLz4gb3IgPGh0dHA6Ly93d3cuc2llbWVucy5jaC8+LgorCitjb25maWcgU0ExMTAwX1NTUAorCXRyaXN0YXRlICJHZW5lcmljIFBJTyBTU1AiCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIGdlbmVyaWMgUElPIFNTUCBkcml2ZXIuCisJICBUaGlzIGlzbid0IGZvciBhdWRpbyBzdXBwb3J0LCBidXQgZm9yIGF0dGFjaGVkIHNlbnNvcnMgYW5kCisJICBvdGhlciBkZXZpY2VzLCBlZyBmb3IgQmFkZ2VQQUQgNCBzZW5zb3Igc3VwcG9ydCwgb3IgSm9ybmFkYQorCSAgNzIwIHRvdWNoc2NyZWVuIHN1cHBvcnQuCisKK2NvbmZpZyBIMzYwMF9TTEVFVkUKKwl0cmlzdGF0ZSAiQ29tcGFxIGlQQVEgSGFuZGhlbGQgc2xlZXZlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTQTExMDBfSDM2MDAKKwloZWxwCisJICBDaG9vc2UgdGhpcyBvcHRpb24gdG8gZW5hYmxlIHN1cHBvcnQgZm9yIGV4dGVuc2lvbiBwYWNrcyAoc2xlZXZlcykKKwkgIGZvciB0aGUgQ29tcGFxIGlQQVEgSDNYWFggc2VyaWVzIG9mIGhhbmRoZWxkIGNvbXB1dGVycy4gIFRoaXMgb3B0aW9uCisJICBpcyByZXF1aXJlZCBmb3IgdGhlIENGLCBQQ01DSUEsIEJsdWV0b290aCBhbmQgR1NNL0dQUlMgZXh0ZW5zaW9uCisJICBwYWNrcy4KKworZW5kbWVudQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGE0YTNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvTWFrZWZpbGUKQEAgLTAsMCArMSw1MyBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMKKworIyBDb21tb24gc3VwcG9ydAorb2JqLXkgOj0gZ2VuZXJpYy5vIGlycS5vIGRtYS5vIHRpbWUubworb2JqLW0gOj0KK29iai1uIDo9CitvYmotICA6PQorbGVkLXkgOj0gbGVkcy5vCisKK29iai0kKENPTkZJR19DUFVfRlJFUV9TQTExMDApCQkrPSBjcHUtc2ExMTAwLm8KK29iai0kKENPTkZJR19DUFVfRlJFUV9TQTExMTApCQkrPSBjcHUtc2ExMTEwLm8KKworIyBTcGVjaWZpYyBib2FyZCBzdXBwb3J0CitvYmotJChDT05GSUdfU0ExMTAwX0FTU0FCRVQpCQkrPSBhc3NhYmV0Lm8KK2xlZC0kKENPTkZJR19TQTExMDBfQVNTQUJFVCkJCSs9IGxlZHMtYXNzYWJldC5vCitvYmotJChDT05GSUdfQVNTQUJFVF9ORVBPTlNFVCkJCSs9IG5lcG9uc2V0Lm8KKworb2JqLSQoQ09ORklHX1NBMTEwMF9CQURHRTQpCQkrPSBiYWRnZTQubworbGVkLSQoQ09ORklHX1NBMTEwMF9CQURHRTQpCQkrPSBsZWRzLWJhZGdlNC5vCisKK29iai0kKENPTkZJR19TQTExMDBfQ0VSRikJCSs9IGNlcmYubworbGVkLSQoQ09ORklHX1NBMTEwMF9DRVJGKQkJKz0gbGVkcy1jZXJmLm8KKworb2JqLSQoQ09ORklHX1NBMTEwMF9DT0xMSUUpCQkrPSBjb2xsaWUubworCitvYmotJChDT05GSUdfU0ExMTAwX0gzNjAwKQkJKz0gaDM2MDAubworCitvYmotJChDT05GSUdfU0ExMTAwX0hBQ0tLSVQpCQkrPSBoYWNra2l0Lm8KK2xlZC0kKENPTkZJR19TQTExMDBfSEFDS0tJVCkJCSs9IGxlZHMtaGFja2tpdC5vCisKK29iai0kKENPTkZJR19TQTExMDBfSk9STkFEQTcyMCkJCSs9IGpvcm5hZGE3MjAubworCitvYmotJChDT05GSUdfU0ExMTAwX0xBUlQpCQkrPSBsYXJ0Lm8KK2xlZC0kKENPTkZJR19TQTExMDBfTEFSVCkJCSs9IGxlZHMtbGFydC5vCisKK29iai0kKENPTkZJR19TQTExMDBfUExFQikJCSs9IHBsZWIubworCitvYmotJChDT05GSUdfU0ExMTAwX1NIQU5OT04pCQkrPSBzaGFubm9uLm8KKworb2JqLSQoQ09ORklHX1NBMTEwMF9TSU1QQUQpCQkrPSBzaW1wYWQubworbGVkLSQoQ09ORklHX1NBMTEwMF9TSU1QQUQpCQkrPSBsZWRzLXNpbXBhZC5vCisKKyMgTEVEcyBzdXBwb3J0CitvYmotJChDT05GSUdfTEVEUykgKz0gJChsZWQteSkKKworIyBTQTExMTAgVVNCIGNsaWVudCBzdXBwb3J0Cisjb2JqLSQoQ09ORklHX1NBMTEwMF9VU0IpCQkrPSB1c2IvCisKKyMgTWlzY2VsYW5lb3VzIGZ1bmN0aW9ucworb2JqLSQoQ09ORklHX1BNKQkJCSs9IHBtLm8gc2xlZXAubworb2JqLSQoQ09ORklHX1NBMTEwMF9TU1ApCQkrPSBzc3AubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU2YWQwNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSw3IEBACisgICB6cmVsYWRkci15CTo9IDB4YzAwMDgwMDAKK2lmZXEgKCQoQ09ORklHX0FSQ0hfU0ExMTAwKSx5KQorICAgenJlbGFkZHItJChDT05GSUdfU0ExMTExKQkJOj0gMHhjMDIwODAwMAorZW5kaWYKK3BhcmFtc19waHlzLXkJOj0gMHhjMDAwMDEwMAoraW5pdHJkX3BoeXMteQk6PSAweGMwODAwMDAwCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2Fzc2FiZXQuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2Fzc2FiZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWRmODhmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvYXNzYWJldC5jCkBAIC0wLDAgKzEsNDQxIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1zYTExMDAvYXNzYWJldC5jCisgKgorICogQXV0aG9yOiBOaWNvbGFzIFBpdHJlCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCBBc3NhYmV0LXNwZWNpZmljIHR3ZWFrcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcmRhLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvc2VyaWFsX3NhMTEwMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Fzc2FiZXQuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKworI2RlZmluZSBBU1NBQkVUX0JDUl9EQjExMTAgXAorCShBU1NBQkVUX0JDUl9TUEtfT0ZGICAgIHwgQVNTQUJFVF9CQ1JfUU1VVEUgICAgIHwgXAorCSBBU1NBQkVUX0JDUl9MRURfR1JFRU4gIHwgQVNTQUJFVF9CQ1JfTEVEX1JFRCAgIHwgXAorCSBBU1NBQkVUX0JDUl9SUzIzMkVOICAgIHwgQVNTQUJFVF9CQ1JfTENEXzEyUkdCIHwgXAorCSBBU1NBQkVUX0JDUl9JUkRBX01EMCkKKworI2RlZmluZSBBU1NBQkVUX0JDUl9EQjExMTEgXAorCShBU1NBQkVUX0JDUl9TUEtfT0ZGICAgIHwgQVNTQUJFVF9CQ1JfUU1VVEUgICAgIHwgXAorCSBBU1NBQkVUX0JDUl9MRURfR1JFRU4gIHwgQVNTQUJFVF9CQ1JfTEVEX1JFRCAgIHwgXAorCSBBU1NBQkVUX0JDUl9SUzIzMkVOICAgIHwgQVNTQUJFVF9CQ1JfTENEXzEyUkdCIHwgXAorCSBBU1NBQkVUX0JDUl9DRl9CVVNfT0ZGIHwgQVNTQUJFVF9CQ1JfU1RFUkVPX0xCIHwgXAorCSBBU1NBQkVUX0JDUl9JUkRBX01EMCAgIHwgQVNTQUJFVF9CQ1JfQ0ZfUlNUKQorCit1bnNpZ25lZCBsb25nIFNDUl92YWx1ZSA9IEFTU0FCRVRfU0NSX0lOSVQ7CitFWFBPUlRfU1lNQk9MKFNDUl92YWx1ZSk7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIEJDUl92YWx1ZSA9IEFTU0FCRVRfQkNSX0RCMTExMDsKKwordm9pZCBBU1NBQkVUX0JDUl9mcm9iKHVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJQkNSX3ZhbHVlID0gKEJDUl92YWx1ZSAmIH5tYXNrKSB8IHZhbDsKKwlBU1NBQkVUX0JDUiA9IEJDUl92YWx1ZTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK0VYUE9SVF9TWU1CT0woQVNTQUJFVF9CQ1JfZnJvYik7CisKK3N0YXRpYyB2b2lkIGFzc2FiZXRfYmFja2xpZ2h0X3Bvd2VyKGludCBvbikKK3sKKyNpZm5kZWYgQVNTQUJFVF9QQUxfVklERU8KKwlpZiAob24pCisJCUFTU0FCRVRfQkNSX3NldChBU1NBQkVUX0JDUl9MSUdIVF9PTik7CisJZWxzZQorI2VuZGlmCisJCUFTU0FCRVRfQkNSX2NsZWFyKEFTU0FCRVRfQkNSX0xJR0hUX09OKTsKK30KKworLyoKKyAqIFR1cm4gb24vb2ZmIHRoZSBiYWNrbGlnaHQuICBXaGVuIHR1cm5pbmcgdGhlIGJhY2tsaWdodCBvbiwKKyAqIHdlIHdhaXQgNTAwdXMgYWZ0ZXIgdHVybmluZyBpdCBvbiBzbyB3ZSBkb24ndCBjYXVzZSB0aGUKKyAqIHN1cHBsaWVzIHRvIGRyb29wIHdoZW4gd2UgZW5hYmxlIHRoZSBMQ0QgY29udHJvbGxlciAoYW5kCisgKiBjYXVzZSBhIGhhcmQgcmVzZXQuKQorICovCitzdGF0aWMgdm9pZCBhc3NhYmV0X2xjZF9wb3dlcihpbnQgb24pCit7CisjaWZuZGVmIEFTU0FCRVRfUEFMX1ZJREVPCisJaWYgKG9uKSB7CisJCUFTU0FCRVRfQkNSX3NldChBU1NBQkVUX0JDUl9MQ0RfT04pOworCQl1ZGVsYXkoNTAwKTsKKwl9IGVsc2UKKyNlbmRpZgorCQlBU1NBQkVUX0JDUl9jbGVhcihBU1NBQkVUX0JDUl9MQ0RfT04pOworfQorCisKKy8qCisgKiBBc3NhYmV0IGZsYXNoIHN1cHBvcnQgY29kZS4KKyAqLworCisjaWZkZWYgQVNTQUJFVF9SRVZfNAorLyoKKyAqIFBoYXNlIDQgQXNzYWJldCBoYXMgdHdvIDI4RjE2MEIzIGZsYXNoIHBhcnRzIGluIGJhbmsgMDoKKyAqLworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGFzc2FiZXRfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gImJvb3Rsb2FkZXIiLAorCQkuc2l6ZQkJPSAweDAwMDIwMDAwLAorCQkub2Zmc2V0CQk9IDAsCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwKKwl9LCB7CisJCS5uYW1lCQk9ICJib290bG9hZGVyIHBhcmFtcyIsCisJCS5zaXplCQk9IDB4MDAwMjAwMDAsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCisJfSwgeworCQkubmFtZQkJPSAiamZmcyIsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCX0KK307CisjZWxzZQorLyoKKyAqIFBoYXNlIDUgQXNzYWJldCBoYXMgdHdvIDI4RjEyOEozQSBmbGFzaCBwYXJ0cyBpbiBiYW5rIDA6CisgKi8KK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBhc3NhYmV0X3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJib290bG9hZGVyIiwKKwkJLnNpemUJCT0gMHgwMDA0MDAwMCwKKwkJLm9mZnNldAkJPSAwLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCisJfSwgeworCQkubmFtZQkJPSAiYm9vdGxvYWRlciBwYXJhbXMiLAorCQkuc2l6ZQkJPSAweDAwMDQwMDAwLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAorCX0sIHsKKwkJLm5hbWUJCT0gImpmZnMiLAorCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwl9Cit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBhc3NhYmV0X2ZsYXNoX2RhdGEgPSB7CisJLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCisJLnBhcnRzCQk9IGFzc2FiZXRfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGFzc2FiZXRfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGFzc2FiZXRfZmxhc2hfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBTQTExMDBfQ1MwX1BIWVMsCisJCS5lbmQJPSBTQTExMDBfQ1MwX1BIWVMgKyBTWl8zMk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydAk9IFNBMTEwMF9DUzFfUEhZUywKKwkJLmVuZAk9IFNBMTEwMF9DUzFfUEhZUyArIFNaXzMyTSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKKworLyoKKyAqIEFzc2FiZXQgSXJEQSBzdXBwb3J0IGNvZGUuCisgKi8KKworc3RhdGljIGludCBhc3NhYmV0X2lyZGFfc2V0X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHN0YXRlKQoreworCXN0YXRpYyB1bnNpZ25lZCBpbnQgYmNyX3N0YXRlWzRdID0geworCQlBU1NBQkVUX0JDUl9JUkRBX01EMCwKKwkJQVNTQUJFVF9CQ1JfSVJEQV9NRDF8QVNTQUJFVF9CQ1JfSVJEQV9NRDAsCisJCUFTU0FCRVRfQkNSX0lSREFfTUQxLAorCQkwCisJfTsKKworCWlmIChzdGF0ZSA8IDQpIHsKKwkJc3RhdGUgPSBiY3Jfc3RhdGVbc3RhdGVdOworCQlBU1NBQkVUX0JDUl9jbGVhcihzdGF0ZSBeIChBU1NBQkVUX0JDUl9JUkRBX01EMXwKKwkJCQkJICAgQVNTQUJFVF9CQ1JfSVJEQV9NRDApKTsKKwkJQVNTQUJFVF9CQ1Jfc2V0KHN0YXRlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFzc2FiZXRfaXJkYV9zZXRfc3BlZWQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgc3BlZWQpCit7CisJaWYgKHNwZWVkIDwgNDAwMDAwMCkKKwkJQVNTQUJFVF9CQ1JfY2xlYXIoQVNTQUJFVF9CQ1JfSVJEQV9GU0VMKTsKKwllbHNlCisJCUFTU0FCRVRfQkNSX3NldChBU1NBQkVUX0JDUl9JUkRBX0ZTRUwpOworfQorCitzdGF0aWMgc3RydWN0IGlyZGFfcGxhdGZvcm1fZGF0YSBhc3NhYmV0X2lyZGFfZGF0YSA9IHsKKwkuc2V0X3Bvd2VyCT0gYXNzYWJldF9pcmRhX3NldF9wb3dlciwKKwkuc2V0X3NwZWVkCT0gYXNzYWJldF9pcmRhX3NldF9zcGVlZCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhc3NhYmV0X2luaXQodm9pZCkKK3sKKwkvKgorCSAqIEVuc3VyZSB0aGF0IHRoZSBwb3dlciBzdXBwbHkgaXMgaW4gImhpZ2ggcG93ZXIiIG1vZGUuCisJICovCisJR1BEUiB8PSBHUElPX0dQSU8xNjsKKwlHUFNSID0gR1BJT19HUElPMTY7CisKKwkvKgorCSAqIEVuc3VyZSB0aGF0IHRoZXNlIHBpbnMgYXJlIHNldCBhcyBvdXRwdXRzIGFuZCBhcmUgZHJpdmluZworCSAqIGxvZ2ljIDAuICBUaGlzIGVuc3VyZXMgdGhhdCB3ZSB3b24ndCBpbmFkdmVydGVudGx5IHRvZ2dsZQorCSAqIHRoZSBXUyBsYXRjaCBpbiB0aGUgQ1BMRCwgYW5kIHdlIGRvbid0IGZsb2F0IGNhdXNpbmcKKwkgKiBleGNlc3NpdmUgcG93ZXIgZHJhaW4uICAtLXJtaworCSAqLworCUdQRFIgfD0gR1BJT19TU1BfVFhEIHwgR1BJT19TU1BfU0NMSyB8IEdQSU9fU1NQX1NGUk07CisJR1BDUiA9IEdQSU9fU1NQX1RYRCB8IEdQSU9fU1NQX1NDTEsgfCBHUElPX1NTUF9TRlJNOworCisJLyoKKwkgKiBTZXQgdXAgcmVnaXN0ZXJzIGZvciBzbGVlcCBtb2RlLgorCSAqLworCVBXRVIgPSBQV0VSX0dQSU8wOworCVBHU1IgPSAwOworCVBDRlIgPSAwOworCVBTRFIgPSAwOworCVBQRFIgfD0gUFBDX1RYRDMgfCBQUENfVFhEMTsKKwlQUFNSIHw9IFBQQ19UWEQzIHwgUFBDX1RYRDE7CisKKwlzYTExMDBmYl9sY2RfcG93ZXIgPSBhc3NhYmV0X2xjZF9wb3dlcjsKKwlzYTExMDBmYl9iYWNrbGlnaHRfcG93ZXIgPSBhc3NhYmV0X2JhY2tsaWdodF9wb3dlcjsKKworCWlmIChtYWNoaW5lX2hhc19uZXBvbnNldCgpKSB7CisJCS8qCisJCSAqIEFuZ2VsIHNldHMgdGhpcywgYnV0IG90aGVyIGJvb3Rsb2FkZXJzIG1heSBub3QuCisJCSAqCisJCSAqIFRoaXMgbXVzdCBwcmVjZWRlIGFueSBkcml2ZXIgY2FsbHMgdG8gQkNSX3NldCgpCisJCSAqIG9yIEJDUl9jbGVhcigpLgorCQkgKi8KKwkJQVNTQUJFVF9CQ1IgPSBCQ1JfdmFsdWUgPSBBU1NBQkVUX0JDUl9EQjExMTE7CisKKyNpZm5kZWYgQ09ORklHX0FTU0FCRVRfTkVQT05TRVQKKwkJcHJpbnRrKCAiV2FybmluZzogTmVwb25zZXQgZGV0ZWN0ZWQgYnV0IGZ1bGwgc3VwcG9ydCAiCisJCQkiaGFzbid0IGJlZW4gY29uZmlndXJlZCBpbiB0aGUga2VybmVsXG4iICk7CisjZW5kaWYKKwl9CisKKwlzYTExeDBfc2V0X2ZsYXNoX2RhdGEoJmFzc2FiZXRfZmxhc2hfZGF0YSwgYXNzYWJldF9mbGFzaF9yZXNvdXJjZXMsCisJCQkgICAgICBBUlJBWV9TSVpFKGFzc2FiZXRfZmxhc2hfcmVzb3VyY2VzKSk7CisJc2ExMXgwX3NldF9pcmRhX2RhdGEoJmFzc2FiZXRfaXJkYV9kYXRhKTsKK30KKworLyoKKyAqIE9uIEFzc2FiZXQsIHdlIG11c3QgcHJvYmUgZm9yIHRoZSBOZXBvbnNldCBib2FyZCBfYmVmb3JlXworICogcGFnaW5nX2luaXQoKSBoYXMgb2NjdXJyZWQgdG8gYWN0dWFsbHkgZGV0ZXJtaW5lIHRoZSBhbW91bnQKKyAqIG9mIFJBTSBhdmFpbGFibGUuICBUbyBkbyBzbywgd2UgbWFwIHRoZSBhcHByb3ByaWF0ZSBJTyBzZWN0aW9uCisgKiBpbiB0aGUgcGFnZSB0YWJsZSBoZXJlIGluIG9yZGVyIHRvIGFjY2VzcyBHUElPIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IG1hcF9zYTExMDBfZ3Bpb19yZWdzKCB2b2lkICkKK3sKKwl1bnNpZ25lZCBsb25nIHBoeXMgPSBfX1BSRUcoR1BMUikgJiBQTURfTUFTSzsKKwl1bnNpZ25lZCBsb25nIHZpcnQgPSBpb19wMnYocGh5cyk7CisJaW50IHByb3QgPSBQTURfVFlQRV9TRUNUIHwgUE1EX1NFQ1RfQVBfV1JJVEUgfCBQTURfRE9NQUlOKERPTUFJTl9JTyk7CisJcG1kX3QgKnBtZDsKKworCXBtZCA9IHBtZF9vZmZzZXQocGdkX29mZnNldF9rKHZpcnQpLCB2aXJ0KTsKKwkqcG1kID0gX19wbWQocGh5cyB8IHByb3QpOworCWZsdXNoX3BtZF9lbnRyeShwbWQpOworfQorCisvKgorICogUmVhZCBTeXN0ZW0gQ29uZmlndXJhdGlvbiAiUmVnaXN0ZXIiCisgKiAodGFrZW4gZnJvbSAiSW50ZWwgU3Ryb25nQVJNIFNBLTExMTAgTWljcm9wcm9jZXNzb3IgRGV2ZWxvcG1lbnQgQm9hcmQKKyAqIFVzZXIncyBHdWlkZSIsIHNlY3Rpb24gNC40LjEpCisgKgorICogVGhpcyBzYW1lIHNjYW4gaXMgcGVyZm9ybWVkIGluIGFyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXNhMTEwMC5TCisgKiB0byBzZXQgdXAgdGhlIHNlcmlhbCBwb3J0IGZvciBkZWNvbXByZXNzaW9uIHN0YXR1cyBtZXNzYWdlcy4gV2UKKyAqIHJlcGVhdCBpdCBoZXJlIGJlY2F1c2UgdGhlIGtlcm5lbCBtYXkgbm90IGJlIGxvYWRlZCBhcyBhIHpJbWFnZSwgYW5kCisgKiBhbHNvIGJlY2F1c2UgaXQncyBhIGhhc3NsZSB0byBjb21tdW5pY2F0ZSB0aGUgU0NSIHZhbHVlIHRvIHRoZSBrZXJuZWwKKyAqIGZyb20gdGhlIGRlY29tcHJlc3Nvci4KKyAqCisgKiBOb3RlIHRoYXQgSVJRcyBhcmUgZ3VhcmFudGVlZCB0byBiZSBkaXNhYmxlZC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IGdldF9hc3NhYmV0X3Njcih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc2NyLCBpOworCisJR1BEUiB8PSAweDNmYzsJCQkvKiBDb25maWd1cmUgR1BJTyA5OjIgYXMgb3V0cHV0cyAqLworCUdQU1IgPSAweDNmYzsJCQkvKiBXcml0ZSAweEZGIHRvIEdQSU8gOToyICovCisJR1BEUiAmPSB+KDB4M2ZjKTsJCS8qIENvbmZpZ3VyZSBHUElPIDk6MiBhcyBpbnB1dHMgKi8KKwlmb3IoaSA9IDEwMDsgaS0tOyBzY3IgPSBHUExSKTsJLyogUmVhZCBHUElPIDk6MiAqLworCUdQRFIgfD0gMHgzZmM7CQkJLyogIHJlc3RvcmUgY29ycmVjdCBwaW4gZGlyZWN0aW9uICovCisJc2NyICY9IDB4M2ZjOwkJCS8qIHNhdmUgYXMgc3lzdGVtIGNvbmZpZ3VyYXRpb24gYnl0ZS4gKi8KKwlTQ1JfdmFsdWUgPSBzY3I7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdAorZml4dXBfYXNzYWJldChzdHJ1Y3QgbWFjaGluZV9kZXNjICpkZXNjLCBzdHJ1Y3QgdGFnICp0YWdzLAorCSAgICAgIGNoYXIgKipjbWRsaW5lLCBzdHJ1Y3QgbWVtaW5mbyAqbWkpCit7CisJLyogVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIGFueSBjYWxsIHRvIG1hY2hpbmVfaGFzX25lcG9uc2V0KCkgKi8KKwltYXBfc2ExMTAwX2dwaW9fcmVncygpOworCWdldF9hc3NhYmV0X3NjcigpOworCisJaWYgKG1hY2hpbmVfaGFzX25lcG9uc2V0KCkpCisJCXByaW50aygiTmVwb25zZXQgZXhwYW5zaW9uIGJvYXJkIGRldGVjdGVkXG4iKTsKK30KKworCitzdGF0aWMgdm9pZCBhc3NhYmV0X3VhcnRfcG0oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdV9pbnQgc3RhdGUsIHVfaW50IG9sZHN0YXRlKQoreworCWlmIChwb3J0LT5tYXBiYXNlID09IF9TZXIxVVRDUjApIHsKKwkJaWYgKHN0YXRlKQorCQkJQVNTQUJFVF9CQ1JfY2xlYXIoQVNTQUJFVF9CQ1JfUlMyMzJFTiB8CisJCQkJCSAgQVNTQUJFVF9CQ1JfQ09NX1JUUyB8CisJCQkJCSAgQVNTQUJFVF9CQ1JfQ09NX0RUUik7CisJCWVsc2UKKwkJCUFTU0FCRVRfQkNSX3NldChBU1NBQkVUX0JDUl9SUzIzMkVOIHwKKwkJCQkJQVNTQUJFVF9CQ1JfQ09NX1JUUyB8CisJCQkJCUFTU0FCRVRfQkNSX0NPTV9EVFIpOworCX0KK30KKworLyoKKyAqIEFzc2FiZXQgdXNlcyBDT01fUlRTIGFuZCBDT01fRFRSIGZvciBib3RoIFVBUlQxIChjb20gcG9ydCkKKyAqIGFuZCBVQVJUMyAocmFkaW8gbW9kdWxlKS4gIFdlIG9ubHkgaGFuZGxlIHRoZW0gZm9yIFVBUlQxIGhlcmUuCisgKi8KK3N0YXRpYyB2b2lkIGFzc2FiZXRfc2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVfaW50IG1jdHJsKQoreworCWlmIChwb3J0LT5tYXBiYXNlID09IF9TZXIxVVRDUjApIHsKKwkJdV9pbnQgc2V0ID0gMCwgY2xlYXIgPSAwOworCisJCWlmIChtY3RybCAmIFRJT0NNX1JUUykKKwkJCWNsZWFyIHw9IEFTU0FCRVRfQkNSX0NPTV9SVFM7CisJCWVsc2UKKwkJCXNldCB8PSBBU1NBQkVUX0JDUl9DT01fUlRTOworCisJCWlmIChtY3RybCAmIFRJT0NNX0RUUikKKwkJCWNsZWFyIHw9IEFTU0FCRVRfQkNSX0NPTV9EVFI7CisJCWVsc2UKKwkJCXNldCB8PSBBU1NBQkVUX0JDUl9DT01fRFRSOworCisJCUFTU0FCRVRfQkNSX2NsZWFyKGNsZWFyKTsKKwkJQVNTQUJFVF9CQ1Jfc2V0KHNldCk7CisJfQorfQorCitzdGF0aWMgdV9pbnQgYXNzYWJldF9nZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1X2ludCByZXQgPSAwOworCXVfaW50IGJzciA9IEFTU0FCRVRfQlNSOworCisJLyogbmVlZCAyIHJlYWRzIHRvIHJlYWQgY3VycmVudCB2YWx1ZSAqLworCWJzciA9IEFTU0FCRVRfQlNSOworCisJaWYgKHBvcnQtPm1hcGJhc2UgPT0gX1NlcjFVVENSMCkgeworCQlpZiAoYnNyICYgQVNTQUJFVF9CU1JfQ09NX0RDRCkKKwkJCXJldCB8PSBUSU9DTV9DRDsKKwkJaWYgKGJzciAmIEFTU0FCRVRfQlNSX0NPTV9DVFMpCisJCQlyZXQgfD0gVElPQ01fQ1RTOworCQlpZiAoYnNyICYgQVNTQUJFVF9CU1JfQ09NX0RTUikKKwkJCXJldCB8PSBUSU9DTV9EU1I7CisJfSBlbHNlIGlmIChwb3J0LT5tYXBiYXNlID09IF9TZXIzVVRDUjApIHsKKwkJaWYgKGJzciAmIEFTU0FCRVRfQlNSX1JBRF9EQ0QpCisJCQlyZXQgfD0gVElPQ01fQ0Q7CisJCWlmIChic3IgJiBBU1NBQkVUX0JTUl9SQURfQ1RTKQorCQkJcmV0IHw9IFRJT0NNX0NUUzsKKwkJaWYgKGJzciAmIEFTU0FCRVRfQlNSX1JBRF9EU1IpCisJCQlyZXQgfD0gVElPQ01fRFNSOworCQlpZiAoYnNyICYgQVNTQUJFVF9CU1JfUkFEX1JJKQorCQkJcmV0IHw9IFRJT0NNX1JJOworCX0gZWxzZSB7CisJCXJldCA9IFRJT0NNX0NEIHwgVElPQ01fQ1RTIHwgVElPQ01fRFNSOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2ExMTAwX3BvcnRfZm5zIGFzc2FiZXRfcG9ydF9mbnMgX19pbml0ZGF0YSA9IHsKKwkuc2V0X21jdHJsCT0gYXNzYWJldF9zZXRfbWN0cmwsCisJLmdldF9tY3RybAk9IGFzc2FiZXRfZ2V0X21jdHJsLAorCS5wbQkJPSBhc3NhYmV0X3VhcnRfcG0sCit9OworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGFzc2FiZXRfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisgLyogdmlydHVhbCAgICAgcGh5c2ljYWwgICAgbGVuZ3RoICAgICAgdHlwZSAqLworICB7IDB4ZjEwMDAwMDAsIDB4MTIwMDAwMDAsIDB4MDAxMDAwMDAsIE1UX0RFVklDRSB9LCAvKiBCb2FyZCBDb250cm9sIFJlZ2lzdGVyICovCisgIHsgMHhmMjgwMDAwMCwgMHg0YjgwMDAwMCwgMHgwMDgwMDAwMCwgTVRfREVWSUNFIH0gIC8qIE1RMjAwICovCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYXNzYWJldF9tYXBfaW8odm9pZCkKK3sKKwlzYTExMDBfbWFwX2lvKCk7CisJaW90YWJsZV9pbml0KGFzc2FiZXRfaW9fZGVzYywgQVJSQVlfU0laRShhc3NhYmV0X2lvX2Rlc2MpKTsKKworCS8qCisJICogU2V0IFNVUyBiaXQgaW4gU0RDUjAgc28gc2VyaWFsIHBvcnQgMSBmdW5jdGlvbnMuCisJICogSXRzIGNhbGxlZCBHUENMS1IwIGluIG15IFNBMTExMCBtYW51YWwuCisJICovCisJU2VyMVNEQ1IwIHw9IFNEQ1IwX1NVUzsKKworCWlmIChtYWNoaW5lX2hhc19uZXBvbnNldCgpKSB7CisjaWZkZWYgQ09ORklHX0FTU0FCRVRfTkVQT05TRVQKKwkJZXh0ZXJuIHZvaWQgbmVwb25zZXRfbWFwX2lvKHZvaWQpOworCisJCS8qCisJCSAqIFdlIG1hcCBOZXBvbnNldCByZWdpc3RlcnMgZXZlbiBpZiBpdCBpc24ndCBwcmVzZW50IHNpbmNlCisJCSAqIG1hbnkgZHJpdmVycyB3aWxsIHRyeSB0byBwcm9iZSB0aGVpciBzdHVmZiAoYW5kIGZhaWwpLgorCQkgKiBUaGlzIGlzIHN0aWxsIG1vcmUgZnJpZW5kbHkgdGhhbiBhIGtlcm5lbCBwYWdpbmcgcmVxdWVzdAorCQkgKiBjcmFzaC4KKwkJICovCisJCW5lcG9uc2V0X21hcF9pbygpOworI2VuZGlmCisJfSBlbHNlIHsKKwkJc2ExMTAwX3JlZ2lzdGVyX3VhcnRfZm5zKCZhc3NhYmV0X3BvcnRfZm5zKTsKKwl9CisKKwkvKgorCSAqIFdoZW4gTmVwb25zZXQgaXMgYXR0YWNoZWQsIHRoZSBmaXJzdCBVQVJUIHNob3VsZCBiZQorCSAqIFVBUlQzLiAgVGhhdCdzIHdoYXQgQW5nZWwgaXMgZG9pbmcgYW5kIG1hbnkgZG9jdW1lbnRzCisJICogYXJlIHN0YXRpbmcgdGhpcy4KKwkgKgorCSAqIFdlIGRvIHRoZSBOZXBvbnNldCBtYXBwaW5nIGV2ZW4gaWYgTmVwb25zZXQgc3VwcG9ydAorCSAqIGlzbid0IGNvbXBpbGVkIGluIHNvIHRoZSB1c2VyIHdpbGwgc3RpbGwgZ2V0IHNvbWV0aGluZyBvbgorCSAqIHRoZSBleHBlY3RlZCBwaHlzaWNhbCBzZXJpYWwgcG9ydC4KKwkgKgorCSAqIFdlIG5vIGxvbmdlciBkbyB0aGlzOyBub3QgYWxsIGJvb3QgbG9hZGVycyBzdXBwb3J0IGl0LAorCSAqIGFuZCBVQVJUMyBhcHBlYXJzIHRvIGJlIHNvbWV3aGF0IHVucmVsaWFibGUgd2l0aCBibG9iLgorCSAqLworCXNhMTEwMF9yZWdpc3Rlcl91YXJ0KDAsIDEpOworCXNhMTEwMF9yZWdpc3Rlcl91YXJ0KDIsIDMpOworfQorCisKK01BQ0hJTkVfU1RBUlQoQVNTQUJFVCwgIkludGVsLUFzc2FiZXQiKQorCUJPT1RfTUVNKDB4YzAwMDAwMDAsIDB4ODAwMDAwMDAsIDB4ZjgwMDAwMDApCisJQk9PVF9QQVJBTVMoMHhjMDAwMDEwMCkKKwlGSVhVUChmaXh1cF9hc3NhYmV0KQorCU1BUElPKGFzc2FiZXRfbWFwX2lvKQorCUlOSVRJUlEoc2ExMTAwX2luaXRfaXJxKQorCS50aW1lcgkJPSAmc2ExMTAwX3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBhc3NhYmV0X2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvYmFkZ2U0LmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9iYWRnZTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTYwYjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvYmFkZ2U0LmMKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXNhMTEwMC9iYWRnZTQuYworICoKKyAqIEJhZGdlUEFEIDQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24KKyAqCisgKiAgIFRpbSBDb25ub3JzIDxjb25ub3JzQGhwbC5ocC5jb20+CisgKiAgIENocmlzdG9waGVyIEhvb3ZlciA8Y2hAaHBsLmhwLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zYTExMTEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9zZXJpYWxfc2ExMTAwLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9iYWRnZTQuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzYTExMTFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJCT0gQkFER0U0X1NBMTExMV9CQVNFLAorCQkuZW5kCQk9IEJBREdFNF9TQTExMTFfQkFTRSArIDB4MDAwMDFmZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CQk9IEJBREdFNF9JUlFfR1BJT19TQTExMTEsCisJCS5lbmQJCT0gQkFER0U0X0lSUV9HUElPX1NBMTExMSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgdTY0IHNhMTExMV9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzYTExMTFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzYTExMTEiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkuZG1hX21hc2sgPSAmc2ExMTExX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2ExMTExX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc2ExMTExX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2ExMTExX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGJhZGdlNF9zYTExMTFfaW5pdCh2b2lkKQoreworCS8qCisJICogRW5zdXJlIHRoYXQgdGhlIG1lbW9yeSBidXMgcmVxdWVzdC9ncmFudCBzaWduYWxzIGFyZSBzZXR1cCwKKwkgKiBhbmQgdGhlIGdyYW50IGlzIGhlbGQgaW4gaXRzIGluYWN0aXZlIHN0YXRlCisJICovCisJc2ExMTEwX21iX2Rpc2FibGUoKTsKKworCS8qCisJICogUHJvYmUgZm9yIFNBMTExMS4KKwkgKi8KKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9CisKKworLyoKKyAqIDEgeCBJbnRlbCAyOEYzMjBDMyBBZHZhbmNlZCsgQm9vdCBCbG9jayBGbGFzaCAoMzIgTWkgYml0KQorICogICBFaWdodCA0IEtpVyBQYXJhbWV0ZXIgQm90dG9tIEJsb2NrcyAoNjQgS2lCKQorICogICBTaXh0eS10aHJlZSAzMiBLaVcgTWFpbiBCbG9ja3MgKDQwMzIgS2kgYikKKyAqCisgKiA8b3I+CisgKgorICogMSB4IEludGVsIDI4RjY0MEMzIEFkdmFuY2VkKyBCb290IEJsb2NrIEZsYXNoICg2NCBNaSBiaXQpCisgKiAgIEVpZ2h0IDQgS2lXIFBhcmFtZXRlciBCb3R0b20gQmxvY2tzICg2NCBLaUIpCisgKiAgIE9uZS1odW5kcmVkLXR3ZW50eS1zZXZlbiAzMiBLaVcgTWFpbiBCbG9ja3MgKDgxMjggS2kgYikKKyAqLworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGJhZGdlNF9wYXJ0aXRpb25zW10gPSB7CisgICAgICAgIHsKKyAgICAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSAiQkxPQiBib290IGxvYWRlciIsCisgICAgICAgICAgICAgICAgLm9mZnNldCAgICAgICAgID0gMCwKKyAgICAgICAgICAgICAgICAuc2l6ZSAgICAgICAgICAgPSAweDAwMDBBMDAwCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSAicGFyYW1zIiwKKyAgICAgICAgICAgICAgICAub2Zmc2V0ICAgICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCisgICAgICAgICAgICAgICAgLnNpemUgICAgICAgICAgID0gMHgwMDAwNjAwMAorICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgLm5hbWUgICAgICAgICAgID0gInJvb3QiLAorICAgICAgICAgICAgICAgIC5vZmZzZXQgICAgICAgICA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKyAgICAgICAgICAgICAgICAuc2l6ZSAgICAgICAgICAgPSBNVERQQVJUX1NJWl9GVUxMCisgICAgICAgIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBiYWRnZTRfZmxhc2hfZGF0YSA9IHsKKwkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKKwkucGFydHMJCT0gYmFkZ2U0X3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShiYWRnZTRfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGJhZGdlNF9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gU0ExMTAwX0NTMF9QSFlTLAorCS5lbmQJCT0gU0ExMTAwX0NTMF9QSFlTICsgU1pfNjRNIC0gMSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgaW50IGZpdmVfdl9vbiBfX2luaXRkYXRhID0gMDsKKworc3RhdGljIGludCBfX2luaXQgZml2ZV92X29uX3NldHVwKGNoYXIgKmlnbm9yZSkKK3sKKyAgICAgICAgZml2ZV92X29uID0gMTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoImZpdmVfdl9vbiIsIGZpdmVfdl9vbl9zZXR1cCk7CisKKworc3RhdGljIGludCBfX2luaXQgYmFkZ2U0X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFtYWNoaW5lX2lzX2JhZGdlNCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIExDRCAqLworCUdQQ1IgID0gKEJBREdFNF9HUElPX0xHUDIgfCBCQURHRTRfR1BJT19MR1AzIHwKKwkJIEJBREdFNF9HUElPX0xHUDQgfCBCQURHRTRfR1BJT19MR1A1IHwKKwkJIEJBREdFNF9HUElPX0xHUDYgfCBCQURHRTRfR1BJT19MR1A3IHwKKwkJIEJBREdFNF9HUElPX0xHUDggfCBCQURHRTRfR1BJT19MR1A5IHwKKwkJIEJBREdFNF9HUElPX0dQQV9WSUQgfCBCQURHRTRfR1BJT19HUEJfVklEIHwKKwkJIEJBREdFNF9HUElPX0dQQ19WSUQpOworCUdQRFIgJj0gfkJBREdFNF9HUElPX0lOVF9WSUQ7CisJR1BEUiB8PSAoQkFER0U0X0dQSU9fTEdQMiB8IEJBREdFNF9HUElPX0xHUDMgfAorCQkgQkFER0U0X0dQSU9fTEdQNCB8IEJBREdFNF9HUElPX0xHUDUgfAorCQkgQkFER0U0X0dQSU9fTEdQNiB8IEJBREdFNF9HUElPX0xHUDcgfAorCQkgQkFER0U0X0dQSU9fTEdQOCB8IEJBREdFNF9HUElPX0xHUDkgfAorCQkgQkFER0U0X0dQSU9fR1BBX1ZJRCB8IEJBREdFNF9HUElPX0dQQl9WSUQgfAorCQkgQkFER0U0X0dQSU9fR1BDX1ZJRCk7CisKKwkvKiBTRFJBTSBTUEQgaTJjICovCisJR1BDUiAgPSAoQkFER0U0X0dQSU9fU0RTREEgfCBCQURHRTRfR1BJT19TRFNDTCk7CisJR1BEUiB8PSAoQkFER0U0X0dQSU9fU0RTREEgfCBCQURHRTRfR1BJT19TRFNDTCk7CisKKwkvKiB1YXJ0ICovCisJR1BDUiAgPSAoQkFER0U0X0dQSU9fVUFSVF9IUzEgfCBCQURHRTRfR1BJT19VQVJUX0hTMik7CisJR1BEUiB8PSAoQkFER0U0X0dQSU9fVUFSVF9IUzEgfCBCQURHRTRfR1BJT19VQVJUX0hTMik7CisKKwkvKiBDUExEIG11eHNlbDAgaW5wdXQgZm9yIG11eC9hZGMgY2hpcCBzZWxlY3QgKi8KKwlHUENSICA9IEJBREdFNF9HUElPX01VWFNFTDA7CisJR1BEUiB8PSBCQURHRTRfR1BJT19NVVhTRUwwOworCisJLyogdGVzdCBwb2ludHM6IEo1LCBKNiBhcyBpbnB1dHMsIEo3IG91dHB1dHMgKi8KKwlHUERSICY9IH4oQkFER0U0X0dQSU9fVEVTVFBUX0o1IHwgQkFER0U0X0dQSU9fVEVTVFBUX0o2KTsKKwlHUENSICA9IEJBREdFNF9HUElPX1RFU1RQVF9KNzsKKwlHUERSIHw9IEJBREdFNF9HUElPX1RFU1RQVF9KNzsKKworIAkvKiA1ViBzdXBwbHkgcmFpbC4gKi8KKyAJR1BDUiAgPSBCQURHRTRfR1BJT19QQ01FTjVWOwkJLyogaW5pdGlhbGx5IG9mZiAqLworICAJR1BEUiB8PSBCQURHRTRfR1BJT19QQ01FTjVWOworCisJLyogQ1BMRCBzZHJhbSB0eXBlIGlucHV0czsgc2V0IHVwIGJ5IGJsb2IgKi8KKwkvL0dQRFIgfD0gKEJBREdFNF9HUElPX1NEVFlQMSB8IEJBREdFNF9HUElPX1NEVFlQMCk7CisJcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18gIjogU0RSQU0gQ1BMRCB0eXAxPSVkIHR5cDA9JWRcbiIsCisJICAgICAgICEhKEdQTFIgJiBCQURHRTRfR1BJT19TRFRZUDEpLAorCSAgICAgICAhIShHUExSICYgQkFER0U0X0dQSU9fU0RUWVAwKSk7CisKKwkvKiBTQTExMTEgcmVzZXQgcGluOyBzZXQgdXAgYnkgYmxvYiAqLworCS8vR1BTUiAgPSBCQURHRTRfR1BJT19TQTExMTFfTlJTVDsKKwkvL0dQRFIgfD0gQkFER0U0X0dQSU9fU0ExMTExX05SU1Q7CisKKworCS8qIHBvd2VyIG1hbmFnZW1lbnQgY3J1ZnQgKi8KKwlQR1NSID0gMDsKKwlQV0VSID0gMDsKKwlQQ0ZSID0gMDsKKwlQU0RSID0gMDsKKworCVBXRVIgfD0gUFdFUl9HUElPMjY7CS8qIHdha2UgdXAgb24gYW4gZWRnZSBmcm9tIFRFU1RQVF9KNSAqLworCVBXRVIgfD0gUFdFUl9SVEM7CS8qIHdha2UgdXAgaWYgcnRjIGZpcmVzICovCisKKwkvKiBkcml2ZSBzYTExMTFfbnJzdCBkdXJpbmcgc2xlZXAgKi8KKwlQR1NSIHw9IEJBREdFNF9HUElPX1NBMTExMV9OUlNUOworCS8qIGRyaXZlIENQTEQgYXMgaXMgZHVyaW5nIHNsZWVwICovCisJUEdTUiB8PSAoR1BMUiAmIChCQURHRTRfR1BJT19TRFRZUDB8QkFER0U0X0dQSU9fU0RUWVAxKSk7CisKKworCS8qIE5vdyBicmluZyB1cCB0aGUgU0EtMTExMS4gKi8KKwlyZXQgPSBiYWRnZTRfc2ExMTExX2luaXQoKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiJXM6IFNBLTExMTEgaW5pdGlhbGl6YXRpb24gZmFpbGVkICglZClcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIHJldCk7CisKKworCS8qIG1heWJlIHR1cm4gb24gNXYwIGZyb20gdGhlIHN0YXJ0ICovCisJYmFkZ2U0X3NldF81VihCQURHRTRfNVZfSU5JVElBTExZLCBmaXZlX3Zfb24pOworCisJc2ExMXgwX3NldF9mbGFzaF9kYXRhKCZiYWRnZTRfZmxhc2hfZGF0YSwgJmJhZGdlNF9mbGFzaF9yZXNvdXJjZSwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChiYWRnZTRfaW5pdCk7CisKKworc3RhdGljIHVuc2lnbmVkIGJhZGdlNF81Vl9iaXRtYXAgPSAwOworCit2b2lkIGJhZGdlNF9zZXRfNVYodW5zaWduZWQgc3Vic3lzdGVtLCBpbnQgb24pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBvbGRfNVZfYml0bWFwOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJb2xkXzVWX2JpdG1hcCA9IGJhZGdlNF81Vl9iaXRtYXA7CisKKwlpZiAob24pIHsKKwkJYmFkZ2U0XzVWX2JpdG1hcCB8PSBzdWJzeXN0ZW07CisJfSBlbHNlIHsKKwkJYmFkZ2U0XzVWX2JpdG1hcCAmPSB+c3Vic3lzdGVtOworCX0KKworCS8qIGRldGVjdCBvbi0+b2ZmIGFuZCBvZmYtPm9uIHRyYW5zaXRpb25zICovCisJaWYgKCghb2xkXzVWX2JpdG1hcCkgJiYgKGJhZGdlNF81Vl9iaXRtYXApKSB7CisJCS8qIHdhcyBvZmYsIG5vdyBvbiAqLworCQlwcmludGsoS0VSTl9JTkZPICIlczogZW5hYmxpbmcgNVYgc3VwcGx5IHJhaWxcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUdQU1IgPSBCQURHRTRfR1BJT19QQ01FTjVWOworCX0gZWxzZSBpZiAoKG9sZF81Vl9iaXRtYXApICYmICghYmFkZ2U0XzVWX2JpdG1hcCkpIHsKKwkJLyogd2FzIG9uLCBub3cgb2ZmICovCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBkaXNhYmxpbmcgNVYgc3VwcGx5IHJhaWxcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUdQQ1IgPSBCQURHRTRfR1BJT19QQ01FTjVWOworCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woYmFkZ2U0X3NldF81Vik7CisKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBiYWRnZTRfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisgIC8qICB2aXJ0dWFsICAgIHBoeXNpY2FsICAgIGxlbmd0aCAgICB0eXBlICovCisgIHsweGYxMDAwMDAwLCAweDA4MDAwMDAwLCAweDAwMTAwMDAwLCBNVF9ERVZJQ0UgfSwvKiBTUkFNICBiYW5rIDEgKi8KKyAgezB4ZjIwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MDAxMDAwMDAsIE1UX0RFVklDRSB9LC8qIFNSQU0gIGJhbmsgMiAqLworICB7MHhmNDAwMDAwMCwgMHg0ODAwMDAwMCwgMHgwMDEwMDAwMCwgTVRfREVWSUNFIH0gLyogU0EtMTExMSAgICAgICovCit9OworCitzdGF0aWMgdm9pZAorYmFkZ2U0X3VhcnRfcG0oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdV9pbnQgc3RhdGUsIHVfaW50IG9sZHN0YXRlKQoreworCWlmICghc3RhdGUpIHsKKwkJU2VyMVNEQ1IwIHw9IFNEQ1IwX1VBUlQ7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHNhMTEwMF9wb3J0X2ZucyBiYWRnZTRfcG9ydF9mbnMgX19pbml0ZGF0YSA9IHsKKwkvLy5nZXRfbWN0cmwJPSBiYWRnZTRfZ2V0X21jdHJsLAorCS8vLnNldF9tY3RybAk9IGJhZGdlNF9zZXRfbWN0cmwsCisJLnBtCQk9IGJhZGdlNF91YXJ0X3BtLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGJhZGdlNF9tYXBfaW8odm9pZCkKK3sKKwlzYTExMDBfbWFwX2lvKCk7CisJaW90YWJsZV9pbml0KGJhZGdlNF9pb19kZXNjLCBBUlJBWV9TSVpFKGJhZGdlNF9pb19kZXNjKSk7CisKKwlzYTExMDBfcmVnaXN0ZXJfdWFydF9mbnMoJmJhZGdlNF9wb3J0X2Zucyk7CisJc2ExMTAwX3JlZ2lzdGVyX3VhcnQoMCwgMyk7CisJc2ExMTAwX3JlZ2lzdGVyX3VhcnQoMSwgMSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQkFER0U0LCAiSGV3bGV0dC1QYWNrYXJkIExhYm9yYXRvcmllcyBCYWRnZVBBRCA0IikKKwlCT09UX01FTSgweGMwMDAwMDAwLCAweDgwMDAwMDAwLCAweGY4MDAwMDAwKQorCUJPT1RfUEFSQU1TKDB4YzAwMDAxMDApCisJTUFQSU8oYmFkZ2U0X21hcF9pbykKKwlJTklUSVJRKHNhMTEwMF9pbml0X2lycSkKKwkudGltZXIJCT0gJnNhMTEwMF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jZXJmLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jZXJmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhlZGRlNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NlcmYuYwpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtc2ExMTAwL2NlcmYuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQXByLTIwMDMgOiBSZW1vdmVkIHNvbWUgb2xkIFBEQSBjcnVkIFtGQl0KKyAqIE9jdC0yMDAzIDogQWRkZWQgdWFydDIgcmVzb3VyY2UgW0ZCXQorICogSmFuLTIwMDQgOiBSZW1vdmVkIGlvIG1hcCBmb3IgZmxhc2ggW0ZCXQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3NlcmlhbF9zYTExMDAuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2NlcmYuaD4KKyNpbmNsdWRlICJnZW5lcmljLmgiCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2VyZnVhcnQyX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHg4MDAzMDAwMCwKKwkJLmVuZAk9IDB4ODAwM2ZmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjZXJmdWFydDJfZGV2aWNlID0geworCS5uYW1lCQk9ICJzYTExeDAtdWFydCIsCisJLmlkCQk9IDIsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNlcmZ1YXJ0Ml9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGNlcmZ1YXJ0Ml9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqY2VyZl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmY2VyZnVhcnQyX2RldmljZSwKK307CisKKyNpZmRlZiBDT05GSUdfU0ExMTAwX0NFUkZfRkxBU0hfMzJNQgorIyAgZGVmaW5lIENFUkZfRkxBU0hfU0laRQkweDAyMDAwMDAwCisjZWxpZiBkZWZpbmVkIENPTkZJR19TQTExMDBfQ0VSRl9GTEFTSF8xNk1CCisjICBkZWZpbmUgQ0VSRl9GTEFTSF9TSVpFCTB4MDEwMDAwMDAKKyNlbGlmIGRlZmluZWQgQ09ORklHX1NBMTEwMF9DRVJGX0ZMQVNIXzhNQgorIyAgZGVmaW5lIENFUkZfRkxBU0hfU0laRQkweDAwODAwMDAwCisjZWxzZQorIyAgZXJyb3IgIlVuZGVmaW5lZCBmbGFzaCBzaXplIGZvciBDRVJGIgorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjZXJmX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJCb290bG9hZGVyIiwKKwkJLnNpemUJCT0gMHgwMDAyMDAwMCwKKwkJLm9mZnNldAkJPSAweDAwMDAwMDAwLAorCX0sIHsKKwkJLm5hbWUJCT0gIlBhcmFtcyIsCisJCS5zaXplCQk9IDB4MDAwNDAwMDAsCisJCS5vZmZzZXQJCT0gMHgwMDAyMDAwMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJLZXJuZWwiLAorCQkuc2l6ZQkJPSAweDAwMTAwMDAwLAorCQkub2Zmc2V0CQk9IDB4MDAwNjAwMDAsCisJfSwgeworCQkubmFtZQkJPSAiRmlsZXN5c3RlbSIsCisJCS5zaXplCQk9IENFUkZfRkxBU0hfU0laRS0weDAwMTYwMDAwLAorCQkub2Zmc2V0CQk9IDB4MDAxNjAwMDAsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGNlcmZfZmxhc2hfZGF0YSA9IHsKKwkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKKwkucGFydHMJCT0gY2VyZl9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoY2VyZl9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2VyZl9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gU0ExMTAwX0NTMF9QSFlTLAorCS5lbmQJCT0gU0ExMTAwX0NTMF9QSFlTICsgU1pfMzJNIC0gMSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY2VyZl9pbml0X2lycSh2b2lkKQoreworCXNhMTEwMF9pbml0X2lycSgpOworCXNldF9pcnFfdHlwZShDRVJGX0VUSF9JUlEsIElSUVRfUklTSU5HKTsKK30KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBjZXJmX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworICAvKiB2aXJ0dWFsCSBwaHlzaWNhbCAgICBsZW5ndGgJIHR5cGUgKi8KKyAgeyAweGYwMDAwMDAwLCAweDA4MDAwMDAwLCAweDAwMTAwMDAwLCBNVF9ERVZJQ0UgfSAgLyogQ3J5c3RhbCBFdGhlcm5ldCBDaGlwICovCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY2VyZl9tYXBfaW8odm9pZCkKK3sKKwlzYTExMDBfbWFwX2lvKCk7CisJaW90YWJsZV9pbml0KGNlcmZfaW9fZGVzYywgQVJSQVlfU0laRShjZXJmX2lvX2Rlc2MpKTsKKworCXNhMTEwMF9yZWdpc3Rlcl91YXJ0KDAsIDMpOworCXNhMTEwMF9yZWdpc3Rlcl91YXJ0KDEsIDIpOyAvKiBkaXNhYmxlIHRoaXMgYW5kIHRoZSB1YXJ0MiBkZXZpY2UgZm9yIHNhMTEwMF9maXIgKi8KKwlzYTExMDBfcmVnaXN0ZXJfdWFydCgyLCAxKTsKKworCS8qIHNldCBzb21lIEdQRFIgYml0cyBoZXJlIHdoaWxlIGl0J3Mgc2FmZSAqLworCUdQRFIgfD0gQ0VSRl9HUElPX0NGX1JFU0VUOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgY2VyZl9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fYWRkX2RldmljZXMoY2VyZl9kZXZpY2VzLCBBUlJBWV9TSVpFKGNlcmZfZGV2aWNlcykpOworCXNhMTF4MF9zZXRfZmxhc2hfZGF0YSgmY2VyZl9mbGFzaF9kYXRhLCAmY2VyZl9mbGFzaF9yZXNvdXJjZSwgMSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQ0VSRiwgIkludHJpbnN5YyBDZXJmQm9hcmQvQ2VyZkN1YmUiKQorCU1BSU5UQUlORVIoInN1cHBvcnRAaW50cmluc3ljLmNvbSIpCisJQk9PVF9NRU0oMHhjMDAwMDAwMCwgMHg4MDAwMDAwMCwgMHhmODAwMDAwMCkKKwlNQVBJTyhjZXJmX21hcF9pbykKKwlJTklUSVJRKGNlcmZfaW5pdF9pcnEpCisJLnRpbWVyCQk9ICZzYTExMDBfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IGNlcmZfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5Mjg3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYwpAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCisgKgorICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhbGwgQ29sbGllLXNwZWNpZmljIHR3ZWFrcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIENoYW5nZUxvZzoKKyAqICAwMy0wNi0yMDA0IEpvaG4gTGVueiA8amVsZW56QHdpc2MuZWR1PgorICogIDA2LTA0LTIwMDIgQ2hyaXMgTGFyc29uIDxrZXJnb3RoQGRpZ2l0YWxuZW1lc2lzLm5ldD4KKyAqICAwNC0xNi0yMDAxIExpbmVvIEphcGFuLEluYy4gLi4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jb2xsaWUuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3NlcmlhbF9zYTExMDAuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zY29vcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3NoYXJwc2xfcGFyYW0uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvbG9jb21vLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY29sbGllX3Njb29wX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CQk9IDB4NDA4MDAwMDAsCisJCS5lbmQJCT0gMHg0MDgwMGZmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNjb29wX2NvbmZpZyBjb2xsaWVfc2Nvb3Bfc2V0dXAgPSB7CisJLmlvX2RpciAJPSBDT0xMSUVfU0NPT1BfSU9fRElSLAorCS5pb19vdXQJCT0gQ09MTElFX1NDT09QX0lPX09VVCwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY29sbGllc2Nvb3BfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaGFycC1zY29vcCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworIAkJLnBsYXRmb3JtX2RhdGEJPSAmY29sbGllX3Njb29wX3NldHVwLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNvbGxpZV9zY29vcF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGNvbGxpZV9zY29vcF9yZXNvdXJjZXMsCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbG9jb21vX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CQk9IDB4NDAwMDAwMDAsCisJCS5lbmQJCT0gMHg0MDAwMWZmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJCT0gSVJRX0dQSU8yNSwKKwkJLmVuZAkJPSBJUlFfR1BJTzI1LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxvY29tb19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImxvY29tbyIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGxvY29tb19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGxvY29tb19yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmxvY29tb19kZXZpY2UsCisJJmNvbGxpZXNjb29wX2RldmljZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjb2xsaWVfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gImJvb3Rsb2FkZXIiLAorCQkub2Zmc2V0IAk9IDAsCisJCS5zaXplCQk9IDB4MDAwQzAwMDAsCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRQorCX0sIHsKKwkJLm5hbWUJCT0gImtlcm5lbCIsCisJCS5vZmZzZXQgCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSAweDAwMTAwMDAwLAorCX0sIHsKKwkJLm5hbWUJCT0gInJvb3RmcyIsCisJCS5vZmZzZXQgCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSAweDAwZTIwMDAwLAorCX0KK307CisKK3N0YXRpYyB2b2lkIGNvbGxpZV9zZXRfdnBwKGludCB2cHApCit7CisJd3JpdGVfc2Nvb3BfcmVnKFNDT09QX0dQQ1IsIHJlYWRfc2Nvb3BfcmVnKFNDT09QX0dQQ1IpIHwgQ09MTElFX1NDUF9WUEVOKTsKKwlpZiAodnBwKSB7CisJCXdyaXRlX3Njb29wX3JlZyhTQ09PUF9HUFdSLCByZWFkX3Njb29wX3JlZyhTQ09PUF9HUFdSKSB8IENPTExJRV9TQ1BfVlBFTik7CisJfSBlbHNlIHsKKwkJd3JpdGVfc2Nvb3BfcmVnKFNDT09QX0dQV1IsIHJlYWRfc2Nvb3BfcmVnKFNDT09QX0dQV1IpICYgfkNPTExJRV9TQ1BfVlBFTik7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgY29sbGllX2ZsYXNoX2RhdGEgPSB7CisJLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCisJLnNldF92cHAJPSBjb2xsaWVfc2V0X3ZwcCwKKwkucGFydHMJCT0gY29sbGllX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShjb2xsaWVfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNvbGxpZV9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IFNBMTEwMF9DUzBfUEhZUywKKwkJLmVuZAk9IFNBMTEwMF9DUzBfUEhZUyArIFNaXzMyTSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjb2xsaWVfaW5pdCh2b2lkKQoreworCWludCByZXQgPSAwOworCisJLyogY3B1IGluaXRpYWxpemUgKi8KKwlHQUZSID0gKCBHUElPX1NTUF9UWEQgfCBcCisJCSBHUElPX1NTUF9TQ0xLIHwgR1BJT19TU1BfU0ZSTSB8IEdQSU9fU1NQX0NMSyB8IEdQSU9fVElDX0FDSyB8IFwKKwkJIEdQSU9fMzJfNzY4a0h6ICk7CisKKwlHUERSID0gKCBHUElPX0xERDggfCBHUElPX0xERDkgfCBHUElPX0xERDEwIHwgR1BJT19MREQxMSB8IEdQSU9fTEREMTIgfCBcCisJCSBHUElPX0xERDEzIHwgR1BJT19MREQxNCB8IEdQSU9fTEREMTUgfCBHUElPX1NTUF9UWEQgfCBcCisJCSBHUElPX1NTUF9TQ0xLIHwgR1BJT19TU1BfU0ZSTSB8IEdQSU9fU0RMQ19TQ0xLIHwgXAorCQkgR1BJT19TRExDX0FBRiB8IEdQSU9fVUFSVF9TQ0xLMSB8IEdQSU9fMzJfNzY4a0h6ICk7CisJR1BMUiA9IEdQSU9fR1BJTzE4OworCisJLy8gUFBDIHBpbiBzZXR0aW5nCisJUFBEUiA9ICggUFBDX0xERDAgfCBQUENfTEREMSB8IFBQQ19MREQyIHwgUFBDX0xERDMgfCBQUENfTERENCB8IFBQQ19MREQ1IHwgXAorCQkgUFBDX0xERDYgfCBQUENfTERENyB8IFBQQ19MX1BDTEsgfCBQUENfTF9MQ0xLIHwgUFBDX0xfRkNMSyB8IFBQQ19MX0JJQVMgfCBcCisJIAkgUFBDX1RYRDEgfCBQUENfVFhEMiB8IFBQQ19SWEQyIHwgUFBDX1RYRDMgfCBQUENfVFhENCB8IFBQQ19TQ0xLIHwgUFBDX1NGUk0gKTsKKworCVBTRFIgPSAoIFBQQ19SWEQxIHwgUFBDX1JYRDIgfCBQUENfUlhEMyB8IFBQQ19SWEQ0ICk7CisKKwlHQUZSIHw9IEdQSU9fMzJfNzY4a0h6OworCUdQRFIgfD0gR1BJT18zMl83NjhrSHo7CisJVFVDUiAgPSBUVUNSXzMyXzc2OGtIejsKKworCXJldCA9IHBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY29sbGllOiBVbmFibGUgdG8gcmVnaXN0ZXIgTG9Db01vIGRldmljZVxuIik7CisJfQorCisJc2ExMXgwX3NldF9mbGFzaF9kYXRhKCZjb2xsaWVfZmxhc2hfZGF0YSwgY29sbGllX2ZsYXNoX3Jlc291cmNlcywKKwkJCSAgICAgIEFSUkFZX1NJWkUoY29sbGllX2ZsYXNoX3Jlc291cmNlcykpOworCisJc2hhcnBzbF9zYXZlX3BhcmFtKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgY29sbGllX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCS8qIHZpcnR1YWwgICAgIHBoeXNpY2FsICAgIGxlbmd0aCAgICAgIHR5cGUgKi8KKwl7MHhlODAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMjAwMDAwMCwgTVRfREVWSUNFfSwJLyogMzJNIG1haW4gZmxhc2ggKGNzMCkgKi8KKwl7MHhlYTAwMDAwMCwgMHgwODAwMDAwMCwgMHgwMjAwMDAwMCwgTVRfREVWSUNFfSwJLyogMzJNIGJvb3QgZmxhc2ggKGNzMSkgKi8KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjb2xsaWVfbWFwX2lvKHZvaWQpCit7CisJc2ExMTAwX21hcF9pbygpOworCWlvdGFibGVfaW5pdChjb2xsaWVfaW9fZGVzYywgQVJSQVlfU0laRShjb2xsaWVfaW9fZGVzYykpOworfQorCitNQUNISU5FX1NUQVJUKENPTExJRSwgIlNoYXJwLUNvbGxpZSIpCisJQk9PVF9NRU0oMHhjMDAwMDAwMCwgMHg4MDAwMDAwMCwgMHhmODAwMDAwMCkKKwlNQVBJTyhjb2xsaWVfbWFwX2lvKQorCUlOSVRJUlEoc2ExMTAwX2luaXRfaXJxKQorCS50aW1lcgkJPSAmc2ExMTAwX3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBjb2xsaWVfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jcHUtc2ExMTAwLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jcHUtc2ExMTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQzNWIyZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMDAuYwpAQCAtMCwwICsxLDI0OSBAQAorLyoKKyAqIGNwdS1zYTExMDAuYzogY2xvY2sgc2NhbGluZyBmb3IgdGhlIFNBMTEwMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAyMDAxLCBUaGUgRGVsZnQgVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5CisgKgorICogQXV0aG9yczogCisgKiAtIEpvaGFuIFBvdXdlbHNlIChKLkEuUG91d2Vsc2VAaXRzLnR1ZGVsZnQubmwpOiBpbml0aWFsIHZlcnNpb24KKyAqIC0gRXJpayBNb3V3IChKLkEuSy5Nb3V3QGl0cy50dWRlbGZ0Lm5sKToKKyAqICAgLSBtYWpvciByZXdyaXRlIGZvciBsaW51eC0yLjMuOTkKKyAqICAgLSByZXdyaXR0ZW4gZm9yIHRoZSBtb3JlIGdlbmVyaWMgcG93ZXIgbWFuYWdlbWVudCBzY2hlbWUgaW4gCisgKiAgICAgbGludXgtMi40LjUtcm1rMQorICoKKyAqIFRoaXMgc29mdHdhcmUgaGFzIGJlZW4gZGV2ZWxvcGVkIHdoaWxlIHdvcmtpbmcgb24gdGhlIExBUlQKKyAqIGNvbXB1dGluZyBib2FyZCAoaHR0cDovL3d3dy5sYXJ0LnR1ZGVsZnQubmwvKSwgd2hpY2ggaXMKKyAqIHNwb25zb3JlZCBieSB0aGUgTW9iaWxlIE11bHRpLW1lZGlhIENvbW11bmljYXRpb25zCisgKiAoaHR0cDovL3d3dy5tbWMudHVkZWxmdC5ubC8pIGFuZCBVYmlxdWl0b3VzIENvbW11bmljYXRpb25zIAorICogKGh0dHA6Ly93d3cudWJpY29tLnR1ZGVsZnQubmwvKSBwcm9qZWN0cy4KKyAqCisgKiBUaGUgYXV0aG9ycyBjYW4gYmUgcmVhY2hlZCBhdDoKKyAqCisgKiAgRXJpayBNb3V3CisgKiAgSW5mb3JtYXRpb24gYW5kIENvbW11bmljYXRpb24gVGhlb3J5IEdyb3VwCisgKiAgRmFjdWx0eSBvZiBJbmZvcm1hdGlvbiBUZWNobm9sb2d5IGFuZCBTeXN0ZW1zCisgKiAgRGVsZnQgVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5CisgKiAgUC5PLiBCb3ggNTAzMQorICogIDI2MDAgR0EgRGVsZnQKKyAqICBUaGUgTmV0aGVybGFuZHMKKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKgorICogVGhlb3J5IG9mIG9wZXJhdGlvbnMKKyAqID09PT09PT09PT09PT09PT09PT09CisgKiAKKyAqIENsb2NrIHNjYWxpbmcgY2FuIGJlIHVzZWQgdG8gbG93ZXIgdGhlIHBvd2VyIGNvbnN1bXB0aW9uIG9mIHRoZSBDUFUKKyAqIGNvcmUuIFRoaXMgd2lsbCBnaXZlIHlvdSBhIHNvbWV3aGF0IGxvbmdlciBydW5uaW5nIHRpbWUuCisgKgorICogVGhlIFNBLTExMDAgaGFzIGEgc2luZ2xlIHJlZ2lzdGVyIHRvIGNoYW5nZSB0aGUgY29yZSBjbG9jayBzcGVlZDoKKyAqCisgKiAgIFBQQ1IgICAgICAweDkwMDIwMDE0ICAgIFBMTCBjb25maWcKKyAqCisgKiBIb3dldmVyLCB0aGUgRFJBTSB0aW1pbmdzIGFyZSBjbG9zZWx5IHJlbGF0ZWQgdG8gdGhlIGNvcmUgY2xvY2sKKyAqIHNwZWVkLCBzbyB3ZSBuZWVkIHRvIGNoYW5nZSB0aGVzZSwgdG9vLiBUaGUgdXNlZCByZWdpc3RlcnMgYXJlOgorICoKKyAqICAgTURDTkZHICAgIDB4QTAwMDAwMDAgICAgRFJBTSBjb25maWcKKyAqICAgTURDQVMwICAgIDB4QTAwMDAwMDQgICAgQWNjZXNzIHdhdmVmb3JtCisgKiAgIE1EQ0FTMSAgICAweEEwMDAwMDA4ICAgIEFjY2VzcyB3YXZlZm9ybQorICogICBNRENBUzIgICAgMHhBMDAwMDAwQyAgICBBY2Nlc3Mgd2F2ZWZvcm0gCisgKgorICogQ2FyZSBtdXN0IGJlIHRha2VuIHRvIGNoYW5nZSB0aGUgRFJBTSBwYXJhbWV0ZXJzIHRoZSBjb3JyZWN0IHdheSwKKyAqIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBEUkFNIGJlY29tZXMgdW51c2FibGUgYW5kIHRoZSBrZXJuZWwgd2lsbAorICogY3Jhc2guIAorICoKKyAqIFRoZSBzaW1wbGUgc29sdXRpb24gdG8gYXZvaWQgYSBrZXJuZWwgY3Jhc2ggaXMgdG8gcHV0IHRoZSBhY3R1YWwKKyAqIGNsb2NrIGNoYW5nZSBpbiBST00gYW5kIGp1bXAgdG8gdGhhdCBjb2RlIGZyb20gdGhlIGtlcm5lbC4gVGhlIG1haW4KKyAqIGRpc2FkdmFudGFnZSBpcyB0aGF0IHRoZSBST00gaGFzIHRvIGJlIG1vZGlmaWVkLCB3aGljaCBpcyBub3QKKyAqIHBvc3NpYmxlIG9uIGFsbCBTQS0xMTAwIHBsYXRmb3Jtcy4gQW5vdGhlciBkaXNhZHZhbnRhZ2UgaXMgdGhhdAorICoganVtcGluZyB0byBST00gbWFrZXMgY2xvY2sgc3dpdGNoaW5nIHVuZWNlc3NhcnkgY29tcGxpY2F0ZWQuCisgKgorICogVGhlIGlkZWEgYmVoaW5kIHRoaXMgZHJpdmVyIGlzIHRoYXQgdGhlIG1lbW9yeSBjb25maWd1cmF0aW9uIGNhbiBiZQorICogY2hhbmdlZCB3aGlsZSBydW5uaW5nIGZyb20gRFJBTSAoZXZlbiB3aXRoIGludGVycnVwdHMgdHVybmVkIG9uISkKKyAqIGFzIGxvbmcgYXMgYWxsIHJlLWNvbmZpZ3VyYXRpb24gc3RlcHMgeWllbGQgYSB2YWxpZCBEUkFNCisgKiBjb25maWd1cmF0aW9uLiBUaGUgYWR2YW50YWdlcyBhcmUgY2xlYXI6IGl0IHdpbGwgcnVuIG9uIGFsbCBTQS0xMTAwCisgKiBwbGF0Zm9ybXMsIGFuZCB0aGUgY29kZSBpcyB2ZXJ5IHNpbXBsZS4KKyAqIAorICogSWYgeW91IHJlYWxseSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBnb2luZyBvbiBpbgorICogc2ExMTAwX3VwZGF0ZV9kcmFtX3RpbWluZ3MoKSwgeW91J2xsIGhhdmUgdG8gcmVhZCBzZWN0aW9ucyA4LjIsCisgKiA5LjUuNy4zLCBhbmQgMTAuMiBmcm9tIHRoZSAiSW50ZWwgU3Ryb25nQVJNIFNBLTExMDAgTWljcm9wcm9jZXNzb3IKKyAqIERldmVsb3BlcnMgTWFudWFsIiAoYXZhaWxhYmxlIGZvciBmcmVlIGZyb20gSW50ZWwpLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgc3BlZWQ7CisJdTMyIG1kY25mZzsKKwl1MzIgbWRjYXMwOyAKKwl1MzIgbWRjYXMxOworCXUzMiBtZGNhczI7Cit9IHNhMTEwMF9kcmFtX3JlZ3NfdDsKKworCitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZHJpdmVyIHNhMTEwMF9kcml2ZXI7CisKK3N0YXRpYyBzYTExMDBfZHJhbV9yZWdzX3Qgc2ExMTAwX2RyYW1fc2V0dGluZ3NbXSA9Cit7CisJLyogc3BlZWQsICAgICBtZGNuZmcsICAgICBtZGNhczAsICAgICBtZGNhczEsICAgICBtZGNhczIgIGNsb2NrIGZyZXF1ZW5jeSAqLworCXsgIDU5MDAwLCAweDAwZGM4OGEzLCAweGNjY2NjY2NmLCAweGZmZmZmZmZjLCAweGZmZmZmZmZmIH0sIC8qICA1OS4wIE1IeiAqLworCXsgIDczNzAwLCAweDAxMTQ5MGEzLCAweGNjY2NjY2NmLCAweGZmZmZmZmZjLCAweGZmZmZmZmZmIH0sIC8qICA3My43IE1IeiAqLworCXsgIDg4NTAwLCAweDAxNGU5MGEzLCAweGNjY2NjY2NmLCAweGZmZmZmZmZjLCAweGZmZmZmZmZmIH0sIC8qICA4OC41IE1IeiAqLworCXsgMTAzMjAwLCAweDAxODg5OTIzLCAweGNjY2NjY2NmLCAweGZmZmZmZmZjLCAweGZmZmZmZmZmIH0sIC8qIDEwMy4yIE1IeiAqLworCXsgMTE4MDAwLCAweDAxYzI5OTIzLCAweDk5OTk5OThmLCAweGZmZmZmZmY5LCAweGZmZmZmZmZmIH0sIC8qIDExOC4wIE1IeiAqLworCXsgMTMyNzAwLCAweDAxZmIyMTIzLCAweDk5OTk5OThmLCAweGZmZmZmZmY5LCAweGZmZmZmZmZmIH0sIC8qIDEzMi43IE1IeiAqLworCXsgMTQ3NTAwLCAweDAyMzUyMTIzLCAweDMzMzMzMzBmLCAweGZmZmZmZmYzLCAweGZmZmZmZmZmIH0sIC8qIDE0Ny41IE1IeiAqLworCXsgMTYyMjAwLCAweDAyNmIyOWEzLCAweDM4ZTM4ZTFmLCAweGZmZjhlMzhlLCAweGZmZmZmZmZmIH0sIC8qIDE2Mi4yIE1IeiAqLworCXsgMTc2OTAwLCAweDAyYTMyOWEzLCAweDcxYzcxYzFmLCAweGZmZjFjNzFjLCAweGZmZmZmZmZmIH0sIC8qIDE3Ni45IE1IeiAqLworCXsgMTkxNzAwLCAweDAyZGQzMWEzLCAweGUzOGUzODNmLCAweGZmZTM4ZTM4LCAweGZmZmZmZmZmIH0sIC8qIDE5MS43IE1IeiAqLworCXsgMjA2NDAwLCAweDAzMTUzMjIzLCAweGM3MWM3MDNmLCAweGZmYzcxYzcxLCAweGZmZmZmZmZmIH0sIC8qIDIwNi40IE1IeiAqLworCXsgMjIxMjAwLCAweDAzNGZiYTIzLCAweGM3MWM3MDNmLCAweGZmYzcxYzcxLCAweGZmZmZmZmZmIH0sIC8qIDIyMS4yIE1IeiAqLworCXsgMjM1OTAwLCAweDAzODUzYTIzLCAweGUxZTFlMDdmLCAweGUxZTFlMWUxLCAweGZmZmZmZmUxIH0sIC8qIDIzNS45IE1IeiAqLworCXsgMjUwNzAwLCAweDAzYmYzYWEzLCAweGMzYzNjMDdmLCAweGMzYzNjM2MzLCAweGZmZmZmZmMzIH0sIC8qIDI1MC43IE1IeiAqLworCXsgMjY1NDAwLCAweDAzZjdjMmEzLCAweGMzYzNjMDdmLCAweGMzYzNjM2MzLCAweGZmZmZmZmMzIH0sIC8qIDI2NS40IE1IeiAqLworCXsgMjgwMjAwLCAweDA0MzFjMmEzLCAweDg3ODc4MGZmLCAweDg3ODc4Nzg3LCAweGZmZmZmZjg3IH0sIC8qIDI4MC4yIE1IeiAqLworCXsgMCwgMCwgMCwgMCwgMCB9IC8qIGxhc3QgZW50cnkgKi8KK307CisKK3N0YXRpYyB2b2lkIHNhMTEwMF91cGRhdGVfZHJhbV90aW1pbmdzKGludCBjdXJyZW50X3NwZWVkLCBpbnQgbmV3X3NwZWVkKQoreworCXNhMTEwMF9kcmFtX3JlZ3NfdCAqc2V0dGluZ3MgPSBzYTExMDBfZHJhbV9zZXR0aW5nczsKKworCS8qIGZpbmQgc3BlZWQgKi8KKwl3aGlsZSAoc2V0dGluZ3MtPnNwZWVkICE9IDApIHsKKwkJaWYobmV3X3NwZWVkID09IHNldHRpbmdzLT5zcGVlZCkKKwkJCWJyZWFrOworCQkKKwkJc2V0dGluZ3MrKzsKKwl9CisKKwlpZiAoc2V0dGluZ3MtPnNwZWVkID09IDApIHsKKwkJcGFuaWMoIiVzOiBjb3VsZG4ndCBmaW5kIGRyYW0gc2V0dGluZyBmb3Igc3BlZWQgJWRcbiIsCisJCSAgICAgIF9fRlVOQ1RJT05fXywgbmV3X3NwZWVkKTsKKwl9CisKKwkvKiBObyByaXNrLCBubyBmdW46IHJ1biB3aXRoIGludGVycnVwdHMgb24hICovCisJaWYgKG5ld19zcGVlZCA+IGN1cnJlbnRfc3BlZWQpIHsKKwkJLyogV2UncmUgZ29pbmcgRkFTVEVSLCBzbyBmaXJzdCByZWxheCB0aGUgbWVtb3J5CisJCSAqIHRpbWluZ3MgYmVmb3JlIGNoYW5naW5nIHRoZSBjb3JlIGZyZXF1ZW5jeSAKKwkJICovCisJCQorCQkvKiBIYWxmIHRoZSBtZW1vcnkgYWNjZXNzIGNsb2NrICovCisJCU1EQ05GRyB8PSBNRENORkdfQ0RCMjsKKworCQkvKiBUaGUgb3JkZXIgb2YgdGhlc2Ugc3RhdGVtZW50cyBJUyBpbXBvcnRhbnQsIGtlZXAgOAorCQkgKiBwdWxzZXMhIQorCQkgKi8KKwkJTURDQVMyID0gc2V0dGluZ3MtPm1kY2FzMjsKKwkJTURDQVMxID0gc2V0dGluZ3MtPm1kY2FzMTsKKwkJTURDQVMwID0gc2V0dGluZ3MtPm1kY2FzMDsKKwkJTURDTkZHID0gc2V0dGluZ3MtPm1kY25mZzsKKwl9IGVsc2UgeworCQkvKiBXZSdyZSBnb2luZyBTTE9XRVI6IGZpcnN0IGRlY3JlYXNlIHRoZSBjb3JlCisJCSAqIGZyZXF1ZW5jeSBhbmQgdGhlbiB0aWdodGVuIHRoZSBtZW1vcnkgc2V0dGluZ3MuCisJCSAqLworCisJCS8qIEhhbGYgdGhlIG1lbW9yeSBhY2Nlc3MgY2xvY2sgKi8KKwkJTURDTkZHIHw9IE1EQ05GR19DREIyOworCisJCS8qIFRoZSBvcmRlciBvZiB0aGVzZSBzdGF0ZW1lbnRzIElTIGltcG9ydGFudCwga2VlcCA4CisJCSAqIHB1bHNlcyEhCisJCSAqLworCQlNRENBUzAgPSBzZXR0aW5ncy0+bWRjYXMwOworCQlNRENBUzEgPSBzZXR0aW5ncy0+bWRjYXMxOworCQlNRENBUzIgPSBzZXR0aW5ncy0+bWRjYXMyOworCQlNRENORkcgPSBzZXR0aW5ncy0+bWRjbmZnOworCX0KK30KKworc3RhdGljIGludCBzYTExMDBfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorCQkJIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKKwkJCSB1bnNpZ25lZCBpbnQgcmVsYXRpb24pCit7CisJdW5zaWduZWQgaW50IGN1ciA9IHNhMTF4MF9nZXRzcGVlZCgwKTsKKwl1bnNpZ25lZCBpbnQgbmV3X3BwY3I7CisKKwlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKKwlzd2l0Y2gocmVsYXRpb24peworCWNhc2UgQ1BVRlJFUV9SRUxBVElPTl9MOgorCQluZXdfcHBjciA9IHNhMTF4MF9mcmVxX3RvX3BwY3IodGFyZ2V0X2ZyZXEpOworCQlpZiAoc2ExMXgwX3BwY3JfdG9fZnJlcShuZXdfcHBjcikgPiBwb2xpY3ktPm1heCkKKwkJCW5ld19wcGNyLS07CisJCWJyZWFrOworCWNhc2UgQ1BVRlJFUV9SRUxBVElPTl9IOgorCQluZXdfcHBjciA9IHNhMTF4MF9mcmVxX3RvX3BwY3IodGFyZ2V0X2ZyZXEpOworCQlpZiAoKHNhMTF4MF9wcGNyX3RvX2ZyZXEobmV3X3BwY3IpID4gdGFyZ2V0X2ZyZXEpICYmCisJCSAgICAoc2ExMXgwX3BwY3JfdG9fZnJlcShuZXdfcHBjciAtIDEpID49IHBvbGljeS0+bWluKSkKKwkJCW5ld19wcGNyLS07CisJCWJyZWFrOworCX0KKworCWZyZXFzLm9sZCA9IGN1cjsKKwlmcmVxcy5uZXcgPSBzYTExeDBfcHBjcl90b19mcmVxKG5ld19wcGNyKTsKKwlmcmVxcy5jcHUgPSAwOworCisJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUFJFQ0hBTkdFKTsKKworCWlmIChmcmVxcy5uZXcgPiBjdXIpCisJCXNhMTEwMF91cGRhdGVfZHJhbV90aW1pbmdzKGN1ciwgZnJlcXMubmV3KTsKKworCVBQQ1IgPSBuZXdfcHBjcjsKKworCWlmIChmcmVxcy5uZXcgPCBjdXIpCisJCXNhMTEwMF91cGRhdGVfZHJhbV90aW1pbmdzKGN1ciwgZnJlcXMubmV3KTsKKworCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BPU1RDSEFOR0UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNhMTEwMF9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwlpZiAocG9saWN5LT5jcHUgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcG9saWN5LT5jdXIgPSBwb2xpY3ktPm1pbiA9IHBvbGljeS0+bWF4ID0gc2ExMXgwX2dldHNwZWVkKDApOworCXBvbGljeS0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7CisJcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxID0gNTkwMDA7CisJcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxID0gMjg3MDAwOworCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSBDUFVGUkVRX0VURVJOQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgc2ExMTAwX2RyaXZlciA9IHsKKwkuZmxhZ3MJCT0gQ1BVRlJFUV9TVElDS1ksCisJLnZlcmlmeQkJPSBzYTExeDBfdmVyaWZ5X3NwZWVkLAorCS50YXJnZXQJCT0gc2ExMTAwX3RhcmdldCwKKwkuZ2V0CQk9IHNhMTF4MF9nZXRzcGVlZCwKKwkuaW5pdAkJPSBzYTExMDBfY3B1X2luaXQsCisJLm5hbWUJCT0gInNhMTEwMCIsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzYTExMDBfZHJhbV9pbml0KHZvaWQpCit7CisgCWlmICgocHJvY2Vzc29yX2lkICYgQ1BVX1NBMTEwMF9NQVNLKSA9PSBDUFVfU0ExMTAwX0lEKQorCQlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJnNhMTEwMF9kcml2ZXIpOworCWVsc2UKKwkJcmV0dXJuIC1FTk9ERVY7Cit9CisKK2FyY2hfaW5pdGNhbGwoc2ExMTAwX2RyYW1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jcHUtc2ExMTEwLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jcHUtc2ExMTEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQyYTg5YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMTAuYwpAQCAtMCwwICsxLDM2NyBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXNhMTEwMC9jcHUtc2ExMTEwLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFJ1c3NlbGwgS2luZworICoKKyAqICAkSWQ6IGNwdS1zYTExMTAuYyx2IDEuOSAyMDAyLzA3LzA2IDE2OjUzOjE4IHJtayBFeHAgJAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTm90ZTogdGhlcmUgYXJlIHR3byBlcnJhdGFzIHRoYXQgYXBwbHkgdG8gdGhlIFNBMTExMCBoZXJlOgorICogIDcgLSBTRFJBTSBhdXRvLXBvd2VyLXVwIGZhaWx1cmUgKHJldiBBMCkKKyAqIDEzIC0gQ29ycnVwdGlvbiBvZiBpbnRlcm5hbCByZWdpc3RlciByZWFkcy93cml0ZXMgZm9sbG93aW5nCisgKiAgICAgIFNEUkFNIHJlYWRzIChyZXYgQTAsIEIwLCBCMSkKKyAqCisgKiBXZSBpZ25vcmUgcmV2LiBBMCBhbmQgQjAgZGV2aWNlczsgSSBkb24ndCB0aGluayB0aGV5J3JlIHdvcnRoIHN1cHBvcnRpbmcuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKyN1bmRlZiBERUJVRworCitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZHJpdmVyIHNhMTExMF9kcml2ZXI7CisKK3N0cnVjdCBzZHJhbV9wYXJhbXMgeworCXVfY2hhciAgcm93czsJCS8qIGJpdHMJCQkJICovCisJdV9jaGFyICBjYXNfbGF0ZW5jeTsJLyogY3ljbGVzCQkJICovCisJdV9jaGFyICB0Y2s7CQkvKiBjbG9jayBjeWNsZSB0aW1lIChucykJICovCisJdV9jaGFyICB0cmNkOwkJLyogYWN0aXZhdGUgdG8gci93IChucykJCSAqLworCXVfY2hhciAgdHJwOwkJLyogcHJlY2hhcmdlIHRvIGFjdGl2YXRlIChucykJICovCisJdV9jaGFyICB0d3I7CQkvKiB3cml0ZSByZWNvdmVyeSB0aW1lIChucykJICovCisJdV9zaG9ydCByZWZyZXNoOwkvKiByZWZyZXNoIHRpbWUgZm9yIGFycmF5ICh1cykJICovCit9OworCitzdHJ1Y3Qgc2RyYW1faW5mbyB7CisJdV9pbnQJbWRjbmZnOworCXVfaW50CW1kcmVmcjsKKwl1X2ludAltZGNhc1szXTsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2RyYW1fcGFyYW1zIHRjNTlzbTcxNl9jbDJfcGFyYW1zIF9faW5pdGRhdGEgPSB7CisJLnJvd3MJCQk9IDEyLAorCS50Y2sJCQk9IDEwLAorCS50cmNkCQkJPSAyMCwKKwkudHJwCQkJPSAyMCwKKwkudHdyCQkJPSAxMCwKKwkucmVmcmVzaAkJPSA2NDAwMCwKKwkuY2FzX2xhdGVuY3kJCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2RyYW1fcGFyYW1zIHRjNTlzbTcxNl9jbDNfcGFyYW1zIF9faW5pdGRhdGEgPSB7CisJLnJvd3MJCQk9IDEyLAorCS50Y2sJCQk9IDgsCisJLnRyY2QJCQk9IDIwLAorCS50cnAJCQk9IDIwLAorCS50d3IJCQk9IDgsCisJLnJlZnJlc2gJCT0gNjQwMDAsCisJLmNhc19sYXRlbmN5CQk9IDMsCit9OworCitzdGF0aWMgc3RydWN0IHNkcmFtX3BhcmFtcyBzYW1zdW5nX2s0czY0MTYzMmRfdGM3NSBfX2luaXRkYXRhID0geworCS5yb3dzCQkJPSAxNCwKKwkudGNrCQkJPSA5LAorCS50cmNkCQkJPSAyNywKKwkudHJwCQkJPSAyMCwKKwkudHdyCQkJPSA5LAorCS5yZWZyZXNoCQk9IDY0MDAwLAorCS5jYXNfbGF0ZW5jeQkJPSAzLAorfTsKKworc3RhdGljIHN0cnVjdCBzZHJhbV9wYXJhbXMgc2Ftc3VuZ19rbTQxNnM0MDMwY3QgX19pbml0ZGF0YSA9IHsKKwkucm93cwkJCT0gMTMsCisJLnRjawkJCT0gOCwKKwkudHJjZAkJCT0gMjQsCS8qIDMgQ0xLcyAqLworCS50cnAJCQk9IDI0LAkvKiAzIENMS3MgKi8KKwkudHdyCQkJPSAxNiwJLyogVHJkbDogMiBDTEtzICovCisJLnJlZnJlc2gJCT0gNjQwMDAsCisJLmNhc19sYXRlbmN5CQk9IDMsCit9OworCitzdGF0aWMgc3RydWN0IHNkcmFtX3BhcmFtcyB3Ym9uZF93OTgyNTE2YWg3NWxfY2wzX3BhcmFtcyBfX2luaXRkYXRhID0geworCS5yb3dzCQkJPSAxNiwKKwkudGNrCQkJPSA4LAorCS50cmNkCQkJPSAyMCwKKwkudHJwCQkJPSAyMCwKKwkudHdyCQkJPSA4LAorCS5yZWZyZXNoCQk9IDY0MDAwLAorCS5jYXNfbGF0ZW5jeQkJPSAzLAorfTsKKworc3RhdGljIHN0cnVjdCBzZHJhbV9wYXJhbXMgc2RyYW1fcGFyYW1zOworCisvKgorICogR2l2ZW4gYSBwZXJpb2QgaW4gbnMgYW5kIGZyZXF1ZW5jeSBpbiBraHosIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mCisgKiBjeWNsZXMgb2YgZnJlcXVlbmN5IGluIHBlcmlvZC4gIE5vdGUgdGhhdCB3ZSByb3VuZCB1cCB0byB0aGUgbmV4dAorICogY3ljbGUsIGV2ZW4gaWYgd2UgYXJlIG9ubHkgc2xpZ2h0bHkgb3Zlci4KKyAqLworc3RhdGljIGlubGluZSB1X2ludCBuc190b19jeWNsZXModV9pbnQgbnMsIHVfaW50IGtoeikKK3sKKwlyZXR1cm4gKG5zICoga2h6ICsgOTk5OTk5KSAvIDEwMDAwMDA7Cit9CisKKy8qCisgKiBDcmVhdGUgdGhlIE1EQ0FTIHJlZ2lzdGVyIGJpdCBwYXR0ZXJuLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X21kY2FzKHVfaW50ICptZGNhcywgaW50IGRlbGF5ZWQsIHVfaW50IHJjZCkKK3sKKwl1X2ludCBzaGlmdDsKKworCXJjZCA9IDIgKiByY2QgLSAxOworCXNoaWZ0ID0gZGVsYXllZCArIDEgKyByY2Q7CisKKwltZGNhc1swXSAgPSAoMSA8PCByY2QpIC0gMTsKKwltZGNhc1swXSB8PSAweDU1NTU1NTU1IDw8IHNoaWZ0OworCW1kY2FzWzFdICA9IG1kY2FzWzJdID0gMHg1NTU1NTU1NSA8PCAoc2hpZnQgJiAxKTsKK30KKworc3RhdGljIHZvaWQKK3NkcmFtX2NhbGN1bGF0ZV90aW1pbmcoc3RydWN0IHNkcmFtX2luZm8gKnNkLCB1X2ludCBjcHVfa2h6LAorCQkgICAgICAgc3RydWN0IHNkcmFtX3BhcmFtcyAqc2RyYW0pCit7CisJdV9pbnQgbWVtX2toeiwgc2Rfa2h6LCB0cnAsIHR3cjsKKworCW1lbV9raHogPSBjcHVfa2h6IC8gMjsKKwlzZF9raHogPSBtZW1fa2h6OworCisJLyoKKwkgKiBJZiBTRENMSyB3b3VsZCBpbnZhbGlkYXRlIHRoZSBTRFJBTSB0aW1pbmdzLAorCSAqIHJ1biBTRENMSyBhdCBoYWxmIHNwZWVkLgorCSAqCisJICogQ1BVIHN0ZXBwaW5ncyBwcmlvciB0byBCMiBtdXN0IGVpdGhlciBydW4gdGhlIG1lbW9yeSBhdAorCSAqIGhhbGYgc3BlZWQgb3IgdXNlIGRlbGF5ZWQgcmVhZCBsYXRjaGluZyAoZXJyYXRhIDEzKS4KKwkgKi8KKwlpZiAoKG5zX3RvX2N5Y2xlcyhzZHJhbS0+dGNrLCBzZF9raHopID4gMSkgfHwKKwkgICAgKENQVV9SRVZJU0lPTiA8IENQVV9TQTExMTBfQjIgJiYgc2Rfa2h6IDwgNjIwMDApKQorCQlzZF9raHogLz0gMjsKKworCXNkLT5tZGNuZmcgPSBNRENORkcgJiAweDAwN2YwMDdmOworCisJdHdyID0gbnNfdG9fY3ljbGVzKHNkcmFtLT50d3IsIG1lbV9raHopOworCisJLyogdHJwIHNob3VsZCBhbHdheXMgYmUgPjEgKi8KKwl0cnAgPSBuc190b19jeWNsZXMoc2RyYW0tPnRycCwgbWVtX2toeikgLSAxOworCWlmICh0cnAgPCAxKQorCQl0cnAgPSAxOworCisJc2QtPm1kY25mZyB8PSB0cnAgPDwgODsKKwlzZC0+bWRjbmZnIHw9IHRycCA8PCAyNDsKKwlzZC0+bWRjbmZnIHw9IHNkcmFtLT5jYXNfbGF0ZW5jeSA8PCAxMjsKKwlzZC0+bWRjbmZnIHw9IHNkcmFtLT5jYXNfbGF0ZW5jeSA8PCAyODsKKwlzZC0+bWRjbmZnIHw9IHR3ciA8PCAxNDsKKwlzZC0+bWRjbmZnIHw9IHR3ciA8PCAzMDsKKworCXNkLT5tZHJlZnIgPSBNRFJFRlIgJiAweGZmYmZmZmYwOworCXNkLT5tZHJlZnIgfD0gNzsKKworCWlmIChzZF9raHogIT0gbWVtX2toeikKKwkJc2QtPm1kcmVmciB8PSBNRFJFRlJfSzFEQjI7CisKKwkvKiBpbml0aWFsIG51bWJlciBvZiAnMSdzIGluIE1EQ0FTICsgMSAqLworCXNldF9tZGNhcyhzZC0+bWRjYXMsIHNkX2toeiA+PSA2MjAwMCwgbnNfdG9fY3ljbGVzKHNkcmFtLT50cmNkLCBtZW1fa2h6KSk7CisKKyNpZmRlZiBERUJVRworCXByaW50aygiTURDTkZHOiAlMDh4IE1EUkVGUjogJTA4eCBNRENBUzA6ICUwOHggTURDQVMxOiAlMDh4IE1EQ0FTMjogJTA4eFxuIiwKKwkJc2QtPm1kY25mZywgc2QtPm1kcmVmciwgc2QtPm1kY2FzWzBdLCBzZC0+bWRjYXNbMV0sIHNkLT5tZGNhc1syXSk7CisjZW5kaWYKK30KKworLyoKKyAqIFNldCB0aGUgU0RSQU0gcmVmcmVzaCByYXRlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2RyYW1fc2V0X3JlZnJlc2godV9pbnQgZHJpKQoreworCU1EUkVGUiA9IChNRFJFRlIgJiAweGZmZmYwMDBmKSB8IChkcmkgPDwgNCk7CisJKHZvaWQpIE1EUkVGUjsKK30KKworLyoKKyAqIFVwZGF0ZSB0aGUgcmVmcmVzaCBwZXJpb2QuICBXZSBkbyB0aGlzIHN1Y2ggdGhhdCB3ZSBhbHdheXMgcmVmcmVzaAorICogdGhlIFNEUkFNcyB3aXRoaW4gdGhlaXIgcGVybWlzc2libGUgcGVyaW9kLiAgVGhlIHJlZnJlc2ggcGVyaW9kIGlzCisgKiBhbHdheXMgYSBtdWx0aXBsZSBvZiB0aGUgbWVtb3J5IGNsb2NrIChmaXhlZCBhdCBjcHVfY2xvY2sgLyAyKS4KKyAqCisgKiBGSVhNRTogd2UgZG9uJ3QgY3VycmVudGx5IHRha2UgYWNjb3VudCBvZiBidXJzdCBhY2Nlc3NlcyBoZXJlLAorICogYnV0IG5laXRoZXIgZG8gSW50ZWxzIERNIG5vciBBbmdlbC4KKyAqLworc3RhdGljIHZvaWQKK3NkcmFtX3VwZGF0ZV9yZWZyZXNoKHVfaW50IGNwdV9raHosIHN0cnVjdCBzZHJhbV9wYXJhbXMgKnNkcmFtKQoreworCXVfaW50IG5zX3JvdyA9IChzZHJhbS0+cmVmcmVzaCAqIDEwMDApID4+IHNkcmFtLT5yb3dzOworCXVfaW50IGRyaSA9IG5zX3RvX2N5Y2xlcyhuc19yb3csIGNwdV9raHogLyAyKSAvIDMyOworCisjaWZkZWYgREVCVUcKKwltZGVsYXkoMjUwKTsKKwlwcmludGsoIm5ldyBkcmkgdmFsdWUgPSAlZFxuIiwgZHJpKTsKKyNlbmRpZgorCisJc2RyYW1fc2V0X3JlZnJlc2goZHJpKTsKK30KKworLyoKKyAqIE9rLCBzZXQgdGhlIENQVSBmcmVxdWVuY3kuICAKKyAqLworc3RhdGljIGludCBzYTExMTBfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorCQkJIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKKwkJCSB1bnNpZ25lZCBpbnQgcmVsYXRpb24pCit7CisJc3RydWN0IHNkcmFtX3BhcmFtcyAqc2RyYW0gPSAmc2RyYW1fcGFyYW1zOworCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOworCXN0cnVjdCBzZHJhbV9pbmZvIHNkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHBwY3IsIHVudXNlZDsKKworCXN3aXRjaChyZWxhdGlvbil7CisJY2FzZSBDUFVGUkVRX1JFTEFUSU9OX0w6CisJCXBwY3IgPSBzYTExeDBfZnJlcV90b19wcGNyKHRhcmdldF9mcmVxKTsKKwkJaWYgKHNhMTF4MF9wcGNyX3RvX2ZyZXEocHBjcikgPiBwb2xpY3ktPm1heCkKKwkJCXBwY3ItLTsKKwkJYnJlYWs7CisJY2FzZSBDUFVGUkVRX1JFTEFUSU9OX0g6CisJCXBwY3IgPSBzYTExeDBfZnJlcV90b19wcGNyKHRhcmdldF9mcmVxKTsKKwkJaWYgKHBwY3IgJiYgKHNhMTF4MF9wcGNyX3RvX2ZyZXEocHBjcikgPiB0YXJnZXRfZnJlcSkgJiYKKwkJICAgIChzYTExeDBfcHBjcl90b19mcmVxKHBwY3ItMSkgPj0gcG9saWN5LT5taW4pKQorCQkJcHBjci0tOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmcmVxcy5vbGQgPSBzYTExeDBfZ2V0c3BlZWQoMCk7CisJZnJlcXMubmV3ID0gc2ExMXgwX3BwY3JfdG9fZnJlcShwcGNyKTsKKwlmcmVxcy5jcHUgPSAwOworCisJc2RyYW1fY2FsY3VsYXRlX3RpbWluZygmc2QsIGZyZXFzLm5ldywgc2RyYW0pOworCisjaWYgMAorCS8qCisJICogVGhlc2UgdmFsdWVzIGFyZSB3cm9uZyBhY2NvcmRpbmcgdG8gdGhlIFNBMTExMCBkb2N1bWVudGF0aW9uCisJICogYW5kIGVycmF0YSwgYnV0IHRoZXkgc2VlbSB0byB3b3JrLiAgTmVlZCB0byBnZXQgYSBzdG9yYWdlCisJICogc2NvcGUgb24gdG8gdGhlIFNEUkFNIHNpZ25hbHMgdG8gd29yayBvdXQgd2h5LgorCSAqLworCWlmIChwb2xpY3ktPm1heCA8IDE0NzUwMCkgeworCQlzZC5tZHJlZnIgfD0gTURSRUZSX0sxREIyOworCQlzZC5tZGNhc1swXSA9IDB4YWFhYWFhN2Y7CisJfSBlbHNlIHsKKwkJc2QubWRyZWZyICY9IH5NRFJFRlJfSzFEQjI7CisJCXNkLm1kY2FzWzBdID0gMHhhYWFhYWE5ZjsKKwl9CisJc2QubWRjYXNbMV0gPSAweGFhYWFhYWFhOworCXNkLm1kY2FzWzJdID0gMHhhYWFhYWFhYTsKKyNlbmRpZgorCisJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUFJFQ0hBTkdFKTsKKworCS8qCisJICogVGhlIGNsb2NrIGNvdWxkIGJlIGdvaW5nIGF3YXkgZm9yIHNvbWUgdGltZS4gIFNldCB0aGUgU0RSQU1zCisJICogdG8gcmVmcmVzaCByYXBpZGx5IChldmVyeSA2NCBtZW1vcnkgY2xvY2sgY3ljbGVzKS4gIFRvIGdldAorCSAqIHRocm91Z2ggdGhlIHdob2xlIGFycmF5LCB3ZSBuZWVkIHRvIHdhaXQgMjYyMTQ0IG1jbGsgY3ljbGVzLgorCSAqIFdlIHdhaXQgMjBtcyB0byBiZSBzYWZlLgorCSAqLworCXNkcmFtX3NldF9yZWZyZXNoKDIpOworCWlmICghaXJxc19kaXNhYmxlZCgpKSB7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91dCgyMCAqIEhaIC8gMTAwMCk7CisJfSBlbHNlIHsKKwkJbWRlbGF5KDIwKTsKKwl9CisKKwkvKgorCSAqIFJlcHJvZ3JhbSB0aGUgRFJBTSB0aW1pbmdzIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgYW5kCisJICogZW5zdXJlIHRoYXQgd2UgYXJlIGRvaW5nIHRoaXMgd2l0aGluIGEgY29tcGxldGUgY2FjaGUgbGluZS4KKwkgKiBUaGlzIG1lYW5zIHRoYXQgd2Ugd29uJ3QgYWNjZXNzIFNEUkFNIGZvciB0aGUgZHVyYXRpb24gb2YKKwkgKiB0aGUgcHJvZ3JhbW1pbmcuCisJICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTAsIDQiIDogOiAiciIgKDApKTsKKwl1ZGVsYXkoMTApOworCV9fYXNtX18gX192b2xhdGlsZV9fKCIJCQkJCVxuXAorCQliCTJmCQkJCQlcblwKKwkJLmFsaWduCTUJCQkJCVxuXAorMToJCXN0cgklMywgWyUxLCAjMF0JCUAgTURDTkZHCVxuXAorCQlzdHIJJTQsIFslMSwgIzI4XQkJQCBNRFJFRlIJXG5cCisJCXN0cgklNSwgWyUxLCAjNF0JCUAgTURDQVMwCVxuXAorCQlzdHIJJTYsIFslMSwgIzhdCQlAIE1EQ0FTMQlcblwKKwkJc3RyCSU3LCBbJTEsICMxMl0JCUAgTURDQVMyCVxuXAorCQlzdHIJJTgsIFslMiwgIzBdCQlAIFBQQ1IJCVxuXAorCQlsZHIJJTAsIFslMSwgIzBdCQkJCVxuXAorCQliCTNmCQkJCQlcblwKKzI6CQliCTFiCQkJCQlcblwKKzM6CQlub3AJCQkJCQlcblwKKwkJbm9wIgorCQk6ICI9JnIiICh1bnVzZWQpCisJCTogInIiICgmTURDTkZHKSwgInIiICgmUFBDUiksICIwIiAoc2QubWRjbmZnKSwKKwkJICAiciIgKHNkLm1kcmVmciksICJyIiAoc2QubWRjYXNbMF0pLAorCQkgICJyIiAoc2QubWRjYXNbMV0pLCAiciIgKHNkLm1kY2FzWzJdKSwgInIiIChwcGNyKSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJLyoKKwkgKiBOb3csIHJldHVybiB0aGUgU0RSQU0gcmVmcmVzaCBiYWNrIHRvIG5vcm1hbC4KKwkgKi8KKwlzZHJhbV91cGRhdGVfcmVmcmVzaChmcmVxcy5uZXcsIHNkcmFtKTsKKworCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BPU1RDSEFOR0UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNhMTExMF9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwlpZiAocG9saWN5LT5jcHUgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcG9saWN5LT5jdXIgPSBwb2xpY3ktPm1pbiA9IHBvbGljeS0+bWF4ID0gc2ExMXgwX2dldHNwZWVkKDApOworCXBvbGljeS0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7CisJcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxID0gNTkwMDA7CisJcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxID0gMjg3MDAwOworCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSBDUFVGUkVRX0VURVJOQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgc2ExMTEwX2RyaXZlciA9IHsKKwkuZmxhZ3MJCT0gQ1BVRlJFUV9TVElDS1ksCisJLnZlcmlmeQkJPSBzYTExeDBfdmVyaWZ5X3NwZWVkLAorCS50YXJnZXQJCT0gc2ExMTEwX3RhcmdldCwKKwkuZ2V0CQk9IHNhMTF4MF9nZXRzcGVlZCwKKwkuaW5pdAkJPSBzYTExMTBfY3B1X2luaXQsCisJLm5hbWUJCT0gInNhMTExMCIsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzYTExMTBfY2xrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3Qgc2RyYW1fcGFyYW1zICpzZHJhbSA9IE5VTEw7CisKKwlpZiAobWFjaGluZV9pc19hc3NhYmV0KCkpCisJCXNkcmFtID0gJnRjNTlzbTcxNl9jbDNfcGFyYW1zOworCisJaWYgKG1hY2hpbmVfaXNfcHRfc3lzdGVtMygpKQorCQlzZHJhbSA9ICZzYW1zdW5nX2s0czY0MTYzMmRfdGM3NTsKKworCWlmIChtYWNoaW5lX2lzX2gzMTAwKCkpCisJCXNkcmFtID0gJnNhbXN1bmdfa200MTZzNDAzMGN0OworCisJaWYgKHNkcmFtKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJTRFJBTTogdGNrOiAlZCB0cmNkOiAlZCB0cnA6ICVkIgorCQkJIiB0d3I6ICVkIHJlZnJlc2g6ICVkIGNhc19sYXRlbmN5OiAlZFxuIiwKKwkJCXNkcmFtLT50Y2ssIHNkcmFtLT50cmNkLCBzZHJhbS0+dHJwLAorCQkJc2RyYW0tPnR3ciwgc2RyYW0tPnJlZnJlc2gsIHNkcmFtLT5jYXNfbGF0ZW5jeSk7CisKKwkJbWVtY3B5KCZzZHJhbV9wYXJhbXMsIHNkcmFtLCBzaXplb2Yoc2RyYW1fcGFyYW1zKSk7CisKKwkJcmV0dXJuIGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZzYTExMTBfZHJpdmVyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChzYTExMTBfY2xrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTBlNDQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvZG1hLmMKQEAgLTAsMCArMSwzNDggQEAKKy8qCisgKiBhcmNoL2FybS9rZXJuZWwvZG1hLXNhMTEwMC5jCisgKgorICogU3VwcG9ydCBmdW5jdGlvbnMgZm9yIHRoZSBTQTExeDAgaW50ZXJuYWwgRE1BIGNoYW5uZWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSBieSBOaWNvbGFzIFBpdHJlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorCisKKyN1bmRlZiBERUJVRworI2lmZGVmIERFQlVHCisjZGVmaW5lIERQUklOVEsoIHMsIGFyZy4uLiApICBwcmludGsoICJkbWE8JXA+OiAiIHMsIHJlZ3MgLCAjI2FyZyApCisjZWxzZQorI2RlZmluZSBEUFJJTlRLKCB4Li4uICkKKyNlbmRpZgorCisKK3R5cGVkZWYgc3RydWN0IHsKKwljb25zdCBjaGFyICpkZXZpY2VfaWQ7CQkvKiBkZXZpY2UgbmFtZSAqLworCXVfbG9uZyBkZXZpY2U7CQkJLyogdGhpcyBjaGFubmVsIGRldmljZSwgMCAgaWYgdW51c2VkKi8KKwlkbWFfY2FsbGJhY2tfdCBjYWxsYmFjazsJLyogdG8gY2FsbCB3aGVuIERNQSBjb21wbGV0ZXMgKi8KKwl2b2lkICpkYXRhOwkJCS8qIC4uLiB3aXRoIHByaXZhdGUgZGF0YSBwdHIgKi8KK30gc2ExMTAwX2RtYV90OworCitzdGF0aWMgc2ExMTAwX2RtYV90IGRtYV9jaGFuW1NBMTEwMF9ETUFfQ0hBTk5FTFNdOworCitzdGF0aWMgc3BpbmxvY2tfdCBkbWFfbGlzdF9sb2NrOworCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlkbWFfcmVnc190ICpkbWFfcmVncyA9IGRldl9pZDsKKwlzYTExMDBfZG1hX3QgKmRtYSA9IGRtYV9jaGFuICsgKCgodV9pbnQpZG1hX3JlZ3MgPj4gNSkgJiA3KTsKKwlpbnQgc3RhdHVzID0gZG1hX3JlZ3MtPlJkRENTUjsKKworCWlmIChzdGF0dXMgJiAoRENTUl9FUlJPUikpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiRE1BIG9uIFwiJXNcIiBjYXVzZWQgYW4gZXJyb3JcbiIsIGRtYS0+ZGV2aWNlX2lkKTsKKwkJZG1hX3JlZ3MtPkNsckRDU1IgPSBEQ1NSX0VSUk9SOworCX0KKworCWRtYV9yZWdzLT5DbHJEQ1NSID0gc3RhdHVzICYgKERDU1JfRE9ORUEgfCBEQ1NSX0RPTkVCKTsKKwlpZiAoZG1hLT5jYWxsYmFjaykgeworCQlpZiAoc3RhdHVzICYgRENTUl9ET05FQSkKKwkJCWRtYS0+Y2FsbGJhY2soZG1hLT5kYXRhKTsKKwkJaWYgKHN0YXR1cyAmIERDU1JfRE9ORUIpCisJCQlkbWEtPmNhbGxiYWNrKGRtYS0+ZGF0YSk7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCisvKioKKyAqCXNhMTEwMF9yZXF1ZXN0X2RtYSAtIGFsbG9jYXRlIG9uZSBvZiB0aGUgU0ExMXgwJ3MgRE1BIGNoYW5lbHMKKyAqCUBkZXZpY2U6IFRoZSBTQTExeDAgcGVyaXBoZXJhbCB0YXJnZXRlZCBieSB0aGlzIHJlcXVlc3QKKyAqCUBkZXZpY2VfaWQ6IEFuIGFzY2lpIG5hbWUgZm9yIHRoZSBjbGFpbWluZyBkZXZpY2UKKyAqCUBjYWxsYmFjazogRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIERNQSBjb21wbGV0ZXMKKyAqCUBkYXRhOiBBIGNvb2tpZSBwYXNzZWQgYmFjayB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAqCUBkbWFfcmVnczogUG9pbnRlciB0byB0aGUgbG9jYXRpb24gb2YgdGhlIGFsbG9jYXRlZCBjaGFubmVsJ3MgaWRlbnRpZmllcgorICoKKyAqIAlUaGlzIGZ1bmN0aW9uIHdpbGwgc2VhcmNoIGZvciBhIGZyZWUgRE1BIGNoYW5uZWwgYW5kIHJldHVybnMgdGhlCisgKiAJYWRkcmVzcyBvZiB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzIGZvciB0aGF0IGNoYW5uZWwgYXMgdGhlIGNoYW5uZWwKKyAqIAlpZGVudGlmaWVyLiBUaGlzIGlkZW50aWZpZXIgaXMgd3JpdHRlbiB0byB0aGUgbG9jYXRpb24gcG9pbnRlZCBieQorICogCUBkbWFfcmVncy4gVGhlIGxpc3Qgb2YgcG9zc2libGUgdmFsdWVzIGZvciBAZGV2aWNlIGFyZSBsaXN0ZWQgaW50bworICogCWxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9kbWEuaCBhcyBhIGRtYV9kZXZpY2VfdCBlbnVtLgorICoKKyAqIAlOb3RlIHRoYXQgcmVhZGluZyBmcm9tIGEgcG9ydCBhbmQgd3JpdGluZyB0byB0aGUgc2FtZSBwb3J0IGFyZQorICogCWFjdHVhbGx5IGNvbnNpZGVyZWQgYXMgdHdvIGRpZmZlcmVudCBzdHJlYW1zIHJlcXVpcmluZyBzZXBhcmF0ZQorICogCURNQSByZWdpc3RyYXRpb25zLgorICoKKyAqIAlUaGUgQGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0IHdoZW4gb25lCisgKiAJb2YgdGhlIHR3byBwb3NzaWJsZSBETUEgYnVmZmVycyBpbiBmbGlnaHQgaGFzIHRlcm1pbmF0ZWQuIFRoYXQKKyAqIAlmdW5jdGlvbiBoYXMgdG8gYmUgc21hbGwgYW5kIGVmZmljaWVudCB3aGlsZSBwb3Nwb25pbmcgbW9yZSBjb21wbGV4CisgKiAJcHJvY2Vzc2luZyB0byBhIGxvd2VyIHByaW9yaXR5IGV4ZWN1dGlvbiBjb250ZXh0LgorICoKKyAqIAlJZiBubyBjaGFubmVscyBhcmUgYXZhaWxhYmxlLCBvciBpZiB0aGUgZGVzaXJlZCBAZGV2aWNlIGlzIGFscmVhZHkgaW4KKyAqIAl1c2UgYnkgYW5vdGhlciBETUEgY2hhbm5lbCwgdGhlbiBhbiBlcnJvciBjb2RlIGlzIHJldHVybmVkLiAgVGhpcworICogCWZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgRE1BIGNhbGxzLgorICoqLworCitpbnQgc2ExMTAwX3JlcXVlc3RfZG1hIChkbWFfZGV2aWNlX3QgZGV2aWNlLCBjb25zdCBjaGFyICpkZXZpY2VfaWQsCisJCQlkbWFfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqZGF0YSwKKwkJCWRtYV9yZWdzX3QgKipkbWFfcmVncykKK3sKKwlzYTExMDBfZG1hX3QgKmRtYSA9IE5VTEw7CisJZG1hX3JlZ3NfdCAqcmVnczsKKwlpbnQgaSwgZXJyOworCisJKmRtYV9yZWdzID0gTlVMTDsKKworCWVyciA9IDA7CisJc3Bpbl9sb2NrKCZkbWFfbGlzdF9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgU0ExMTAwX0RNQV9DSEFOTkVMUzsgaSsrKSB7CisJCWlmIChkbWFfY2hhbltpXS5kZXZpY2UgPT0gZGV2aWNlKSB7CisJCQllcnIgPSAtRUJVU1k7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmICghZG1hX2NoYW5baV0uZGV2aWNlICYmICFkbWEpIHsKKwkJCWRtYSA9ICZkbWFfY2hhbltpXTsKKwkJfQorCX0KKwlpZiAoIWVycikgeworCSAgICAgICBpZiAoZG1hKQorCQkgICAgICAgZG1hLT5kZXZpY2UgPSBkZXZpY2U7CisJICAgICAgIGVsc2UKKwkJICAgICAgIGVyciA9IC1FTk9TUjsKKwl9CisJc3Bpbl91bmxvY2soJmRtYV9saXN0X2xvY2spOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpID0gZG1hIC0gZG1hX2NoYW47CisJcmVncyA9IChkbWFfcmVnc190ICopJkREQVIoaSk7CisJZXJyID0gcmVxdWVzdF9pcnEoSVJRX0RNQTAgKyBpLCBkbWFfaXJxX2hhbmRsZXIsIFNBX0lOVEVSUlVQVCwKKwkJCSAgZGV2aWNlX2lkLCByZWdzKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzOiB1bmFibGUgdG8gcmVxdWVzdCBJUlEgJWQgZm9yICVzXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBJUlFfRE1BMCArIGksIGRldmljZV9pZCk7CisJCWRtYS0+ZGV2aWNlID0gMDsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkqZG1hX3JlZ3MgPSByZWdzOworCWRtYS0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOworCWRtYS0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKwlkbWEtPmRhdGEgPSBkYXRhOworCisJcmVncy0+Q2xyRENTUiA9CisJCShEQ1NSX0RPTkVBIHwgRENTUl9ET05FQiB8IERDU1JfU1RSVEEgfCBEQ1NSX1NUUlRCIHwKKwkJIERDU1JfSUUgfCBEQ1NSX0VSUk9SIHwgRENTUl9SVU4pOworCXJlZ3MtPkREQVIgPSBkZXZpY2U7CisKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIAlzYTExMDBfZnJlZV9kbWEgLSBmcmVlIGEgU0ExMXgwIERNQSBjaGFubmVsCisgKiAJQHJlZ3M6IGlkZW50aWZpZXIgZm9yIHRoZSBjaGFubmVsIHRvIGZyZWUKKyAqCisgKiAJVGhpcyBjbGVhcnMgYWxsIGFjdGl2aXRpZXMgb24gYSBnaXZlbiBETUEgY2hhbm5lbCBhbmQgcmVsZWFzZXMgaXQKKyAqIAlmb3IgZnV0dXJlIHJlcXVlc3RzLiAgVGhlIEByZWdzIGlkZW50aWZpZXIgaXMgcHJvdmlkZWQgYnkgYQorICogCXN1Y2Nlc3NmdWwgY2FsbCB0byBzYTExMDBfcmVxdWVzdF9kbWEoKS4KKyAqKi8KKwordm9pZCBzYTExMDBfZnJlZV9kbWEoZG1hX3JlZ3NfdCAqcmVncykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBTQTExMDBfRE1BX0NIQU5ORUxTOyBpKyspCisJCWlmIChyZWdzID09IChkbWFfcmVnc190ICopJkREQVIoaSkpCisJCQlicmVhazsKKwlpZiAoaSA+PSBTQTExMDBfRE1BX0NIQU5ORUxTKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJhZCBETUEgaWRlbnRpZmllclxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghZG1hX2NoYW5baV0uZGV2aWNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFRyeWluZyB0byBmcmVlIGZyZWUgRE1BXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJcmVncy0+Q2xyRENTUiA9CisJCShEQ1NSX0RPTkVBIHwgRENTUl9ET05FQiB8IERDU1JfU1RSVEEgfCBEQ1NSX1NUUlRCIHwKKwkJIERDU1JfSUUgfCBEQ1NSX0VSUk9SIHwgRENTUl9SVU4pOworCWZyZWVfaXJxKElSUV9ETUEwICsgaSwgcmVncyk7CisJZG1hX2NoYW5baV0uZGV2aWNlID0gMDsKK30KKworCisvKioKKyAqIAlzYTExMDBfc3RhcnRfZG1hIC0gc3VibWl0IGEgZGF0YSBidWZmZXIgZm9yIERNQQorICogCUByZWdzOiBpZGVudGlmaWVyIGZvciB0aGUgY2hhbm5lbCB0byB1c2UKKyAqIAlAZG1hX3B0cjogYnVmZmVyIHBoeXNpY2FsIChvciBidXMpIHN0YXJ0IGFkZHJlc3MKKyAqIAlAc2l6ZTogYnVmZmVyIHNpemUKKyAqCisgKiAJVGhpcyBmdW5jdGlvbiBoYW5kcyB0aGUgZ2l2ZW4gZGF0YSBidWZmZXIgdG8gdGhlIGhhcmR3YXJlIGZvciBETUEKKyAqIAlhY2Nlc3MuIElmIGFub3RoZXIgYnVmZmVyIGlzIGFscmVhZHkgaW4gZmxpZ2h0IHRoZW4gdGhpcyBidWZmZXIKKyAqIAl3aWxsIGJlIHF1ZXVlZCBzbyB0aGUgRE1BIGVuZ2luZSB3aWxsIHN3aXRjaCB0byBpdCBhdXRvbWF0aWNhbGx5CisgKiAJd2hlbiB0aGUgcHJldmlvdXMgb25lIGlzIGRvbmUuICBUaGUgRE1BIGVuZ2luZSBpcyBhY3R1YWxseSB0b2dnbGluZworICogCWJldHdlZW4gdHdvIGJ1ZmZlcnMgc28gYXQgbW9zdCAyIHN1Y2Nlc3NmdWwgY2FsbHMgY2FuIGJlIG1hZGUgYmVmb3JlCisgKiAJb25lIG9mIHRoZW0gdGVybWluYXRlcyBhbmQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqCisgKiAJVGhlIEByZWdzIGlkZW50aWZpZXIgaXMgcHJvdmlkZWQgYnkgYSBzdWNjZXNzZnVsIGNhbGwgdG8KKyAqIAlzYTExMDBfcmVxdWVzdF9kbWEoKS4KKyAqCisgKiAJVGhlIEBzaXplIG11c3Qgbm90IGJlIGxhcmdlciB0aGFuICVNQVhfRE1BX1NJWkUuICBJZiBhIGdpdmVuIGJ1ZmZlcgorICogCWlzIGxhcmdlciB0aGFuIHRoYXQgdGhlbiBpdCdzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBzcGxpdAorICogCWl0IGludG8gc21hbGxlciBjaHVua3MgYW5kIHN1Ym1pdCB0aGVtIHNlcGFyYXRlbHkuIElmIHRoaXMgaXMgdGhlCisgKiAJY2FzZSB0aGVuIGEgQHNpemUgb2YgJUNVVF9ETUFfU0laRSBpcyByZWNvbW1lbmRlZCB0byBhdm9pZCBlbmRpbmcKKyAqIAl1cCB3aXRoIHRvbyBzbWFsbCBjaHVua3MuIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjaGFpbgorICogCXN1Ym1pc3Npb25zIG9mIGJ1ZmZlciBjaHVua3MuCisgKgorICogCUVycm9yIHJldHVybiB2YWx1ZXM6CisgKiAJJS1FT1ZFUkZMT1c6CUdpdmVuIGJ1ZmZlciBzaXplIGlzIHRvbyBiaWcuCisgKiAJJS1FQlVTWToJQm90aCBETUEgYnVmZmVycyBhcmUgYWxyZWFkeSBpbiB1c2UuCisgKiAJJS1FQUdBSU46CUJvdGggYnVmZmVycyB3ZXJlIGJ1c3kgYnV0IG9uZSBvZiB0aGVtIGp1c3QgY29tcGxldGVkCisgKiAJCQlidXQgdGhlIGludGVycnVwdCBoYW5kbGVyIGhhcyB0byBleGVjdXRlIGZpcnN0LgorICoKKyAqIAlUaGlzIGZ1bmN0aW9uIHJldHVycyAwIG9uIHN1Y2Nlc3MuCisgKiovCisKK2ludCBzYTExMDBfc3RhcnRfZG1hKGRtYV9yZWdzX3QgKnJlZ3MsIGRtYV9hZGRyX3QgZG1hX3B0ciwgdV9pbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVfbG9uZyBzdGF0dXM7CisJaW50IHJldDsKKworCWlmIChkbWFfcHRyICYgMykKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRE1BOiB1bmFsaWduZWQgc3RhcnQgYWRkcmVzcyAoMHglMDhseClcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZylkbWFfcHRyKTsKKworCWlmIChzaXplID4gTUFYX0RNQV9TSVpFKQorCQlyZXR1cm4gLUVPVkVSRkxPVzsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlzdGF0dXMgPSByZWdzLT5SZERDU1I7CisKKwkvKiBJZiBib3RoIERNQSBidWZmZXJzIGFyZSBzdGFydGVkLCB0aGVyZSdzIG5vdGhpbmcgZWxzZSB3ZSBjYW4gZG8uICovCisJaWYgKChzdGF0dXMgJiAoRENTUl9TVFJUQSB8IERDU1JfU1RSVEIpKSA9PSAoRENTUl9TVFJUQSB8IERDU1JfU1RSVEIpKSB7CisJCURQUklOVEsoInN0YXJ0OiBzdCAlI3ggYnVzeVxuIiwgc3RhdHVzKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoKChzdGF0dXMgJiBEQ1NSX0JJVSkgJiYgKHN0YXR1cyAmIERDU1JfU1RSVEIpKSB8fAorCSAgICAoIShzdGF0dXMgJiBEQ1NSX0JJVSkgJiYgIShzdGF0dXMgJiBEQ1NSX1NUUlRBKSkpIHsKKwkJaWYgKHN0YXR1cyAmIERDU1JfRE9ORUEpIHsKKwkJCS8qIGdpdmUgYSBjaGFuY2UgZm9yIHRoZSBpbnRlcnJ1cHQgdG8gYmUgcHJvY2Vzc2VkICovCisJCQlyZXQgPSAtRUFHQUlOOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmVncy0+REJTQSA9IGRtYV9wdHI7CisJCXJlZ3MtPkRCVEEgPSBzaXplOworCQlyZWdzLT5TZXREQ1NSID0gRENTUl9TVFJUQSB8IERDU1JfSUUgfCBEQ1NSX1JVTjsKKwkJRFBSSU5USygic3RhcnQgYT0lI3ggcz0lZCBvbiBBXG4iLCBkbWFfcHRyLCBzaXplKTsKKwl9IGVsc2UgeworCQlpZiAoc3RhdHVzICYgRENTUl9ET05FQikgeworCQkJLyogZ2l2ZSBhIGNoYW5jZSBmb3IgdGhlIGludGVycnVwdCB0byBiZSBwcm9jZXNzZWQgKi8KKwkJCXJldCA9IC1FQUdBSU47CisJCQlnb3RvIG91dDsKKwkJfQorCQlyZWdzLT5EQlNCID0gZG1hX3B0cjsKKwkJcmVncy0+REJUQiA9IHNpemU7CisJCXJlZ3MtPlNldERDU1IgPSBEQ1NSX1NUUlRCIHwgRENTUl9JRSB8IERDU1JfUlVOOworCQlEUFJJTlRLKCJzdGFydCBhPSUjeCBzPSVkIG9uIEJcbiIsIGRtYV9wdHIsIHNpemUpOworCX0KKwlyZXQgPSAwOworCitvdXQ6CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKworLyoqCisgKiAJc2ExMTAwX2dldF9kbWFfcG9zIC0gcmV0dXJuIGN1cnJlbnQgRE1BIHBvc2l0aW9uCisgKiAJQHJlZ3M6IGlkZW50aWZpZXIgZm9yIHRoZSBjaGFubmVsIHRvIHVzZQorICoKKyAqIAlUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGN1cnJlbnQgcGh5c2ljYWwgKG9yIGJ1cykgYWRkcmVzcyBmb3IgdGhlCisgKiAJZ2l2ZW4gRE1BIGNoYW5uZWwuICBJZiB0aGUgY2hhbm5lbCBpcyBydW5uaW5nIGkuZS4gbm90IGluIGEgc3RvcHBlZAorICogCXN0YXRlIHRoZW4gdGhlIGNhbGxlciBtdXN0IGRpc2FibGUgaW50ZXJydXB0cyBwcmlvciBjYWxsaW5nIHRoaXMKKyAqIAlmdW5jdGlvbiBhbmQgcHJvY2VzcyB0aGUgcmV0dXJuZWQgdmFsdWUgYmVmb3JlIHJlLWVuYWJsaW5nIHRoZW0gdG8KKyAqIAlwcmV2ZW50IHJhY2VzIHdpdGggdGhlIGNvbXBsZXRpb24gaW50ZXJydXB0IGhhbmRsZXIgYW5kIHRoZSBjYWxsYmFjaworICogCWZ1bmN0aW9uLiBUaGUgdmFsaWRhdGlvbiBvZiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgdGhlIGNhbGxlcidzCisgKiAJcmVzcG9uc2liaWxpdHkgYXMgd2VsbCAtLSB0aGUgaGFyZHdhcmUgc2VlbXMgdG8gcmV0dXJuIG91dCBvZiByYW5nZQorICogCXZhbHVlcyB3aGVuIHRoZSBETUEgZW5naW5lIGNvbXBsZXRlcyBhIGJ1ZmZlci4KKyAqCisgKiAJVGhlIEByZWdzIGlkZW50aWZpZXIgaXMgcHJvdmlkZWQgYnkgYSBzdWNjZXNzZnVsIGNhbGwgdG8KKyAqIAlzYTExMDBfcmVxdWVzdF9kbWEoKS4KKyAqKi8KKworZG1hX2FkZHJfdCBzYTExMDBfZ2V0X2RtYV9wb3MoZG1hX3JlZ3NfdCAqcmVncykKK3sKKwlpbnQgc3RhdHVzOworCisJLyoKKwkgKiBXZSBtdXN0IGRldGVybWluZSB3aGV0aGVyIGJ1ZmZlciBBIG9yIEIgaXMgYWN0aXZlLgorCSAqIFR3byBwb3NzaWJpbGl0aWVzOiBlaXRoZXIgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YKKwkgKiBhIGJ1ZmZlciwgb3IgdGhlIERNQSBjb250cm9sbGVyIGp1c3Qgc3dpdGNoZWQgdG8gdGhlCisJICogbmV4dCB0b2dnbGUgYnV0IHRoZSBpbnRlcnJ1cHQgaGFzbid0IGJlZW4gc2VydmljZWQgeWV0LgorCSAqIFRoZSBmb3JtZXIgY2FzZSBpcyBzdHJhaWdodCBmb3J3YXJkLiAgSW4gdGhlIGxhdGVyIGNhc2UsCisJICogd2UnbGwgZG8gbGlrZSBpZiBETUEgaXMganVzdCBhdCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cworCSAqIHRvZ2dsZSBzaW5jZSBhbGwgcmVnaXN0ZXJzIGhhdmVuJ3QgYmVlbiByZXNldCB5ZXQuCisJICogVGhpcyBnb2VzIGFyb3VuZCB0aGUgZWRnZSBjYXNlIGFuZCBzaW5jZSB3ZSdyZSBhbHdheXMKKwkgKiBhIGxpdHRsZSBiZWhpbmQgYW55d2F5cyBpdCBzaG91bGRuJ3QgbWFrZSBhIGJpZyBkaWZmZXJlbmNlLgorCSAqIElmIERNQSBoYXMgYmVlbiBzdG9wcGVkIHByaW9yIGNhbGxpbmcgdGhpcyB0aGVuIHRoZQorCSAqIHBvc2l0aW9uIGlzIGV4YWN0LgorCSAqLworCXN0YXR1cyA9IHJlZ3MtPlJkRENTUjsKKwlpZiAoKCEoc3RhdHVzICYgRENTUl9CSVUpICYmICAoc3RhdHVzICYgRENTUl9TVFJUQSkpIHx8CisJICAgICggKHN0YXR1cyAmIERDU1JfQklVKSAmJiAhKHN0YXR1cyAmIERDU1JfU1RSVEIpKSkKKwkJcmV0dXJuIHJlZ3MtPkRCU0E7CisJZWxzZQorCQlyZXR1cm4gcmVncy0+REJTQjsKK30KKworCisvKioKKyAqIAlzYTExMDBfcmVzZXRfZG1hIC0gcmVzZXQgYSBETUEgY2hhbm5lbAorICogCUByZWdzOiBpZGVudGlmaWVyIGZvciB0aGUgY2hhbm5lbCB0byB1c2UKKyAqCisgKiAJVGhpcyBmdW5jdGlvbiByZXNldHMgYW5kIHJlY29uZmlndXJlIHRoZSBnaXZlbiBETUEgY2hhbm5lbC4gVGhpcyBpcworICogCXBhcnRpY3VsYXJseSB1c2VmdWwgYWZ0ZXIgYSBzbGVlcC93YWtldXAgZXZlbnQuCisgKgorICogCVRoZSBAcmVncyBpZGVudGlmaWVyIGlzIHByb3ZpZGVkIGJ5IGEgc3VjY2Vzc2Z1bCBjYWxsIHRvCisgKiAJc2ExMTAwX3JlcXVlc3RfZG1hKCkuCisgKiovCisKK3ZvaWQgc2ExMTAwX3Jlc2V0X2RtYShkbWFfcmVnc190ICpyZWdzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFNBMTEwMF9ETUFfQ0hBTk5FTFM7IGkrKykKKwkJaWYgKHJlZ3MgPT0gKGRtYV9yZWdzX3QgKikmRERBUihpKSkKKwkJCWJyZWFrOworCWlmIChpID49IFNBMTEwMF9ETUFfQ0hBTk5FTFMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYmFkIERNQSBpZGVudGlmaWVyXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJcmVncy0+Q2xyRENTUiA9CisJCShEQ1NSX0RPTkVBIHwgRENTUl9ET05FQiB8IERDU1JfU1RSVEEgfCBEQ1NSX1NUUlRCIHwKKwkJIERDU1JfSUUgfCBEQ1NSX0VSUk9SIHwgRENTUl9SVU4pOworCXJlZ3MtPkREQVIgPSBkbWFfY2hhbltpXS5kZXZpY2U7Cit9CisKKworRVhQT1JUX1NZTUJPTChzYTExMDBfcmVxdWVzdF9kbWEpOworRVhQT1JUX1NZTUJPTChzYTExMDBfZnJlZV9kbWEpOworRVhQT1JUX1NZTUJPTChzYTExMDBfc3RhcnRfZG1hKTsKK0VYUE9SVF9TWU1CT0woc2ExMTAwX2dldF9kbWFfcG9zKTsKK0VYUE9SVF9TWU1CT0woc2ExMTAwX3Jlc2V0X2RtYSk7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWFlMjE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jCkBAIC0wLDAgKzEsNDE5IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jCisgKgorICogQXV0aG9yOiBOaWNvbGFzIFBpdHJlCisgKgorICogQ29kZSBjb21tb24gdG8gYWxsIFNBMTF4MCBtYWNoaW5lcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKyNkZWZpbmUgTlJfRlJFUVMJMTYKKworLyoKKyAqIFRoaXMgdGFibGUgaXMgc2V0dXAgZm9yIGEgMy42ODY0TUh6IENyeXN0YWwuCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBjY2xrX2ZyZXF1ZW5jeV8xMDBraHpbTlJfRlJFUVNdID0geworCSA1OTAsCS8qICA1OS4wIE1IeiAqLworCSA3MzcsCS8qICA3My43IE1IeiAqLworCSA4ODUsIAkvKiAgODguNSBNSHogKi8KKwkxMDMyLAkvKiAxMDMuMiBNSHogKi8KKwkxMTgwLAkvKiAxMTguMCBNSHogKi8KKwkxMzI3LAkvKiAxMzIuNyBNSHogKi8KKwkxNDc1LAkvKiAxNDcuNSBNSHogKi8KKwkxNjIyLAkvKiAxNjIuMiBNSHogKi8KKwkxNzY5LAkvKiAxNzYuOSBNSHogKi8KKwkxOTE3LAkvKiAxOTEuNyBNSHogKi8KKwkyMDY0LAkvKiAyMDYuNCBNSHogKi8KKwkyMjEyLAkvKiAyMjEuMiBNSHogKi8KKwkyMzU5LCAgIC8qIDIzNS45IE1IeiAqLworCTI1MDcsICAgLyogMjUwLjcgTUh6ICovCisJMjY1NCwgICAvKiAyNjUuNCBNSHogKi8KKwkyODAyICAgIC8qIDI4MC4yIE1IeiAqLworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9GUkVRX1NBMTEwMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX0ZSRVFfU0ExMTEwKQorLyogcm91bmRzIHVwKCEpICAqLwordW5zaWduZWQgaW50IHNhMTF4MF9mcmVxX3RvX3BwY3IodW5zaWduZWQgaW50IGtoeikKK3sKKwlpbnQgaTsKKworCWtoeiAvPSAxMDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlJfRlJFUVM7IGkrKykKKwkJaWYgKGNjbGtfZnJlcXVlbmN5XzEwMGtoeltpXSA+PSBraHopCisJCQlicmVhazsKKworCXJldHVybiBpOworfQorCit1bnNpZ25lZCBpbnQgc2ExMXgwX3BwY3JfdG9fZnJlcSh1bnNpZ25lZCBpbnQgaWR4KQoreworCXVuc2lnbmVkIGludCBmcmVxID0gMDsKKwlpZiAoaWR4IDwgTlJfRlJFUVMpCisJCWZyZXEgPSBjY2xrX2ZyZXF1ZW5jeV8xMDBraHpbaWR4XSAqIDEwMDsKKwlyZXR1cm4gZnJlcTsKK30KKworCisvKiBtYWtlIHN1cmUgdGhhdCBvbmx5IHRoZSAidXNlcnNwYWNlIiBnb3Zlcm5vciBpcyBydW4gLS0gYW55dGhpbmcgZWxzZSB3b3VsZG4ndCBtYWtlIHNlbnNlIG9uCisgKiB0aGlzIHBsYXRmb3JtLCBhbnl3YXkuCisgKi8KK2ludCBzYTExeDBfdmVyaWZ5X3NwZWVkKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQoreworCXVuc2lnbmVkIGludCB0bXA7CisJaWYgKHBvbGljeS0+Y3B1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNwdWZyZXFfdmVyaWZ5X3dpdGhpbl9saW1pdHMocG9saWN5LCBwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXEsIHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSk7CisKKwkvKiBtYWtlIHN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgZnJlcXVlbmN5IGlzIHdpdGhpbiB0aGUgcG9saWN5ICovCisJdG1wID0gY2Nsa19mcmVxdWVuY3lfMTAwa2h6W3NhMTF4MF9mcmVxX3RvX3BwY3IocG9saWN5LT5taW4pXSAqIDEwMDsKKwlpZiAodG1wID4gcG9saWN5LT5tYXgpCisJCXBvbGljeS0+bWF4ID0gdG1wOworCisJY3B1ZnJlcV92ZXJpZnlfd2l0aGluX2xpbWl0cyhwb2xpY3ksIHBvbGljeS0+Y3B1aW5mby5taW5fZnJlcSwgcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxKTsKKworCXJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgc2ExMXgwX2dldHNwZWVkKHVuc2lnbmVkIGludCBjcHUpCit7CisJaWYgKGNwdSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGNjbGtfZnJlcXVlbmN5XzEwMGtoeltQUENSICYgMHhmXSAqIDEwMDsKK30KKworI2Vsc2UKKy8qCisgKiBXZSBzdGlsbCBuZWVkIHRvIHByb3ZpZGUgdGhpcyBzbyBidWlsZGluZyB3aXRob3V0IGNwdWZyZXEgd29ya3MuCisgKi8gCit1bnNpZ25lZCBpbnQgY3B1ZnJlcV9nZXQodW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gY2Nsa19mcmVxdWVuY3lfMTAwa2h6W1BQQ1IgJiAweGZdICogMTAwOworfQorRVhQT1JUX1NZTUJPTChjcHVmcmVxX2dldCk7CisjZW5kaWYKKworLyoKKyAqIFRoaXMgaXMgdGhlIFNBMTF4MCBzY2hlZF9jbG9jayBpbXBsZW1lbnRhdGlvbi4gIFRoaXMgaGFzCisgKiBhIHJlc29sdXRpb24gb2YgMjcxbnMsIGFuZCBhIG1heGltdW0gdmFsdWUgb2YgMTE2NXMuCisgKiAgKCAqIDFFOSAvIDM2ODY0MDAgPT4gKiA3ODEyNSAvIDI4OCkKKyAqLwordW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHY7CisKKwl2ID0gKHVuc2lnbmVkIGxvbmcgbG9uZylPU0NSICogNzgxMjU7CisJZG9fZGl2KHYsIDI4OCk7CisKKwlyZXR1cm4gdjsKK30KKworLyoKKyAqIERlZmF1bHQgcG93ZXItb2ZmIGZvciBTQTExMDAKKyAqLworc3RhdGljIHZvaWQgc2ExMTAwX3Bvd2VyX29mZih2b2lkKQoreworCW1kZWxheSgxMDApOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJLyogZGlzYWJsZSBpbnRlcm5hbCBvc2NpbGxhdG9yLCBmbG9hdCBDUyBsaW5lcyAqLworCVBDRlIgPSAoUENGUl9PUERFIHwgUENGUl9GUCB8IFBDRlJfRlMpOworCS8qIGVuYWJsZSB3YWtlLXVwIG9uIEdQSU8wIChBc3NhYmV0Li4uKSAqLworCVBXRVIgPSBHRkVSID0gR1JFUiA9IDE7CisJLyoKKwkgKiBzZXQgc2NyYXRjaHBhZCB0byB6ZXJvLCBqdXN0IGluIGNhc2UgaXQgaXMgdXNlZCBhcyBhCisJICogcmVzdGFydCBhZGRyZXNzIGJ5IHRoZSBib290bG9hZGVyLgorCSAqLworCVBTUFIgPSAwOworCS8qIGVudGVyIHNsZWVwIG1vZGUgKi8KKwlQTUNSID0gUE1DUl9TRjsKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzYTExeDB1ZGNfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAweDgwMDAwMDAwLAorCQkuZW5kCT0gMHg4MDAwZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyB1NjQgc2ExMXgwdWRjX2RtYV9tYXNrID0gMHhmZmZmZmZmZlVMOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzYTExeDB1ZGNfZGV2aWNlID0geworCS5uYW1lCQk9ICJzYTExeDAtdWRjIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5kbWFfbWFzayA9ICZzYTExeDB1ZGNfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2ExMXgwdWRjX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc2ExMXgwdWRjX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2ExMXgwdWFydDFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAweDgwMDEwMDAwLAorCQkuZW5kCT0gMHg4MDAxZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNhMTF4MHVhcnQxX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2ExMXgwLXVhcnQiLAorCS5pZAkJPSAxLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzYTExeDB1YXJ0MV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNhMTF4MHVhcnQxX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2ExMXgwdWFydDNfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAweDgwMDUwMDAwLAorCQkuZW5kCT0gMHg4MDA1ZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNhMTF4MHVhcnQzX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2ExMXgwLXVhcnQiLAorCS5pZAkJPSAzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzYTExeDB1YXJ0M19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNhMTF4MHVhcnQzX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2ExMXgwbWNwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHg4MDA2MDAwMCwKKwkJLmVuZAk9IDB4ODAwNmZmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgdTY0IHNhMTF4MG1jcF9kbWFfbWFzayA9IDB4ZmZmZmZmZmZVTDsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2ExMXgwbWNwX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2ExMXgwLW1jcCIsCisJLmlkCQk9IC0xLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzayA9ICZzYTExeDBtY3BfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2ExMXgwbWNwX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc2ExMXgwbWNwX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2ExMXgwc3NwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHg4MDA3MDAwMCwKKwkJLmVuZAk9IDB4ODAwN2ZmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgdTY0IHNhMTF4MHNzcF9kbWFfbWFzayA9IDB4ZmZmZmZmZmZVTDsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2ExMXgwc3NwX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2ExMXgwLXNzcCIsCisJLmlkCQk9IC0xLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzayA9ICZzYTExeDBzc3BfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2ExMXgwc3NwX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc2ExMXgwc3NwX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2ExMXgwZmJfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAweGIwMTAwMDAwLAorCQkuZW5kCT0gMHhiMDEwZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9MQ0QsCisJCS5lbmQJPSBJUlFfTENELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2ExMXgwZmJfZGV2aWNlID0geworCS5uYW1lCQk9ICJzYTExeDAtZmIiLAorCS5pZAkJPSAtMSwKKwkuZGV2ID0geworCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNhMTF4MGZiX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc2ExMXgwZmJfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2ExMXgwcGNtY2lhX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2ExMXgwLXBjbWNpYSIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2ExMXgwbXRkX2RldmljZSA9IHsKKwkubmFtZQkJPSAiZmxhc2giLAorCS5pZAkJPSAtMSwKK307CisKK3ZvaWQgc2ExMXgwX3NldF9mbGFzaF9kYXRhKHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpmbGFzaCwKKwkJCSAgIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgbnIpCit7CisJc2ExMXgwbXRkX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9IGZsYXNoOworCXNhMTF4MG10ZF9kZXZpY2UucmVzb3VyY2UgPSByZXM7CisJc2ExMXgwbXRkX2RldmljZS5udW1fcmVzb3VyY2VzID0gbnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2ExMXgwaXJfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBfX1BSRUcoU2VyMlVUQ1IwKSwKKwkJLmVuZAk9IF9fUFJFRyhTZXIyVVRDUjApICsgMHgyNCAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0CT0gX19QUkVHKFNlcjJIU0NSMCksCisJCS5lbmQJPSBfX1BSRUcoU2VyMkhTQ1IwKSArIDB4MWMgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydAk9IF9fUFJFRyhTZXIySFNDUjIpLAorCQkuZW5kCT0gX19QUkVHKFNlcjJIU0NSMikgKyAweDA0IC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQJPSBJUlFfU2VyMklDUCwKKwkJLmVuZAk9IElSUV9TZXIySUNQLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzYTExeDBpcl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNhMTF4MC1pciIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzYTExeDBpcl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNhMTF4MGlyX3Jlc291cmNlcywKK307CisKK3ZvaWQgc2ExMXgwX3NldF9pcmRhX2RhdGEoc3RydWN0IGlyZGFfcGxhdGZvcm1fZGF0YSAqaXJkYSkKK3sKKwlzYTExeDBpcl9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBpcmRhOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2ExMXgwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzYTExeDB1ZGNfZGV2aWNlLAorCSZzYTExeDB1YXJ0MV9kZXZpY2UsCisJJnNhMTF4MHVhcnQzX2RldmljZSwKKwkmc2ExMXgwbWNwX2RldmljZSwKKwkmc2ExMXgwc3NwX2RldmljZSwKKwkmc2ExMXgwcGNtY2lhX2RldmljZSwKKwkmc2ExMXgwZmJfZGV2aWNlLAorCSZzYTExeDBtdGRfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2ExMTAwX2luaXQodm9pZCkKK3sKKwlwbV9wb3dlcl9vZmYgPSBzYTExMDBfcG93ZXJfb2ZmOworCisJaWYgKHNhMTF4MGlyX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSkKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzYTExeDBpcl9kZXZpY2UpOworCisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHNhMTF4MF9kZXZpY2VzLCBBUlJBWV9TSVpFKHNhMTF4MF9kZXZpY2VzKSk7Cit9CisKK2FyY2hfaW5pdGNhbGwoc2ExMTAwX2luaXQpOworCit2b2lkICgqc2ExMTAwZmJfYmFja2xpZ2h0X3Bvd2VyKShpbnQgb24pOwordm9pZCAoKnNhMTEwMGZiX2xjZF9wb3dlcikoaW50IG9uKTsKKworRVhQT1JUX1NZTUJPTChzYTExMDBmYl9iYWNrbGlnaHRfcG93ZXIpOworRVhQT1JUX1NZTUJPTChzYTExMDBmYl9sY2RfcG93ZXIpOworCisKKy8qCisgKiBDb21tb24gSS9PIG1hcHBpbmc6CisgKgorICogVHlwaWNhbGx5LCBzdGF0aWMgdmlydHVhbCBhZGRyZXNzIG1hcHBpbmdzIGFyZSBhcyBmb2xsb3c6CisgKgorICogMHhmMDAwMDAwMC0weGYzZmZmZmZmOgltaXNjZWxsYW5lb3VzIHN0dWZmIChDUExEcywgZXRjLikKKyAqIDB4ZjQwMDAwMDAtMHhmNGZmZmZmZjoJU0EtMTExMQorICogMHhmNTAwMDAwMC0weGY1ZmZmZmZmOglyZXNlcnZlZCAodXNlZCBieSBjYWNoZSBmbHVzaGluZyBhcmVhKQorICogMHhmNjAwMDAwMC0weGZmZmVmZmZmOglyZXNlcnZlZCAoaW50ZXJuYWwgU0ExMTAwIElPIGRlZmluZWQgYWJvdmUpCisgKiAweGZmZmYwMDAwLTB4ZmZmZjBmZmY6CVNBMTEwMCBleGNlcHRpb24gdmVjdG9ycworICogMHhmZmZmMjAwMC0weGZmZmYyZmZmOglNaW5pY2FjaGUgY29weV91c2VyX3BhZ2UgYXJlYQorICoKKyAqIEJlbG93IDB4ZTgwMDAwMDAgaXMgcmVzZXJ2ZWQgZm9yIHZtIGFsbG9jYXRpb24uCisgKgorICogVGhlIG1hY2hpbmUgc3BlY2lmaWMgY29kZSBtdXN0IHByb3ZpZGUgdGhlIGV4dHJhIG1hcHBpbmcgYmVzaWRlIHRoZQorICogZGVmYXVsdCBtYXBwaW5nIHByb3ZpZGVkIGhlcmUuCisgKi8KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzdGFuZGFyZF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKyAvKiB2aXJ0dWFsICAgICBwaHlzaWNhbCAgICBsZW5ndGggICAgICB0eXBlICovCisgIHsgMHhmODAwMDAwMCwgMHg4MDAwMDAwMCwgMHgwMDEwMDAwMCwgTVRfREVWSUNFIH0sIC8qIFBDTSAqLworICB7IDB4ZmEwMDAwMDAsIDB4OTAwMDAwMDAsIDB4MDAxMDAwMDAsIE1UX0RFVklDRSB9LCAvKiBTQ00gKi8KKyAgeyAweGZjMDAwMDAwLCAweGEwMDAwMDAwLCAweDAwMTAwMDAwLCBNVF9ERVZJQ0UgfSwgLyogTUVSICovCisgIHsgMHhmZTAwMDAwMCwgMHhiMDAwMDAwMCwgMHgwMDIwMDAwMCwgTVRfREVWSUNFIH0gIC8qIExDRCArIERNQSAqLworfTsKKwordm9pZCBfX2luaXQgc2ExMTAwX21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdChzdGFuZGFyZF9pb19kZXNjLCBBUlJBWV9TSVpFKHN0YW5kYXJkX2lvX2Rlc2MpKTsKK30KKworLyoKKyAqIERpc2FibGUgdGhlIG1lbW9yeSBidXMgcmVxdWVzdC9ncmFudCBzaWduYWxzIG9uIHRoZSBTQTExMTAgdG8KKyAqIGVuc3VyZSB0aGF0IHdlIGRvbid0IHJlY2VpdmUgc3B1cmlvdXMgbWVtb3J5IHJlcXVlc3RzLiAgV2Ugc2V0CisgKiB0aGUgTUJHTlQgc2lnbmFsIGZhbHNlIHRvIGVuc3VyZSB0aGUgU0ExMTExIGRvZXNuJ3Qgb3duIHRoZQorICogU0RSQU0gYnVzLgorICovCit2b2lkIF9faW5pdCBzYTExMTBfbWJfZGlzYWJsZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCisJUEdTUiAmPSB+R1BJT19NQkdOVDsKKwlHUENSID0gR1BJT19NQkdOVDsKKwlHUERSID0gKEdQRFIgJiB+R1BJT19NQlJFUSkgfCBHUElPX01CR05UOworCisJR0FGUiAmPSB+KEdQSU9fTUJHTlQgfCBHUElPX01CUkVRKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIElmIHRoZSBzeXN0ZW0gaXMgZ29pbmcgdG8gdXNlIHRoZSBTQS0xMTExIERNQSBlbmdpbmVzLCBzZXQgdXAKKyAqIHRoZSBtZW1vcnkgYnVzIHJlcXVlc3QvZ3JhbnQgcGlucy4KKyAqLwordm9pZCBfX2luaXQgc2ExMTEwX21iX2VuYWJsZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlQR1NSICY9IH5HUElPX01CR05UOworCUdQQ1IgPSBHUElPX01CR05UOworCUdQRFIgPSAoR1BEUiAmIH5HUElPX01CUkVRKSB8IEdQSU9fTUJHTlQ7CisKKwlHQUZSIHw9IChHUElPX01CR05UIHwgR1BJT19NQlJFUSk7CisJVFVDUiB8PSBUVUNSX01SOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmggYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlNDFkYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5oCisgKgorICogQXV0aG9yOiBOaWNvbGFzIFBpdHJlCisgKi8KKworc3RydWN0IHN5c190aW1lcjsKKworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgc2ExMTAwX3RpbWVyOworZXh0ZXJuIHZvaWQgX19pbml0IHNhMTEwMF9tYXBfaW8odm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgc2ExMTAwX2luaXRfaXJxKHZvaWQpOworCisjZGVmaW5lIFNFVF9CQU5LKF9fbnIsX19zdGFydCxfX3NpemUpIFwKKwltaS0+YmFua1tfX25yXS5zdGFydCA9IChfX3N0YXJ0KSwgXAorCW1pLT5iYW5rW19fbnJdLnNpemUgPSAoX19zaXplKSwgXAorCW1pLT5iYW5rW19fbnJdLm5vZGUgPSAoKCh1bnNpZ25lZCkoX19zdGFydCkgLSBQSFlTX09GRlNFVCkgPj4gMjcpCisKK2V4dGVybiB2b2lkICgqc2ExMTAwZmJfYmFja2xpZ2h0X3Bvd2VyKShpbnQgb24pOworZXh0ZXJuIHZvaWQgKCpzYTExMDBmYl9sY2RfcG93ZXIpKGludCBvbik7CisKK2V4dGVybiB2b2lkIHNhMTExMF9tYl9lbmFibGUodm9pZCk7CitleHRlcm4gdm9pZCBzYTExMTBfbWJfZGlzYWJsZSh2b2lkKTsKKworc3RydWN0IGNwdWZyZXFfcG9saWN5OworCitleHRlcm4gdW5zaWduZWQgaW50IHNhMTF4MF9mcmVxX3RvX3BwY3IodW5zaWduZWQgaW50IGtoeik7CitleHRlcm4gaW50IHNhMTF4MF92ZXJpZnlfc3BlZWQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpOworZXh0ZXJuIHVuc2lnbmVkIGludCBzYTExeDBfZ2V0c3BlZWQodW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gdW5zaWduZWQgaW50IHNhMTF4MF9wcGNyX3RvX2ZyZXEodW5zaWduZWQgaW50IGlkeCk7CisKK3N0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhOworc3RydWN0IHJlc291cmNlOworCitleHRlcm4gdm9pZCBzYTExeDBfc2V0X2ZsYXNoX2RhdGEoc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKmZsYXNoLAorCQkJCSAgc3RydWN0IHJlc291cmNlICpyZXMsIGludCBucik7CisKK3N0cnVjdCBpcmRhX3BsYXRmb3JtX2RhdGE7Cit2b2lkIHNhMTF4MF9zZXRfaXJkYV9kYXRhKHN0cnVjdCBpcmRhX3BsYXRmb3JtX2RhdGEgKmlyZGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaDM2MDAuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2gzNjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4OGQzYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2gzNjAwLmMKQEAgLTAsMCArMSw4OTIgQEAKKy8qCisgKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgQ29tcGFxIGlQQVEgSDN4eHggSGFuZGhlbGQgQ29tcHV0ZXJzCisgKgorICogQ29weXJpZ2h0IDIwMDAsMSBDb21wYXEgQ29tcHV0ZXIgQ29ycG9yYXRpb24uCisgKgorICogVXNlIGNvbnNpc3RlbnQgd2l0aCB0aGUgR05VIEdQTCBpcyBwZXJtaXR0ZWQsCisgKiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcworICogcHJlc2VydmVkIGluIGl0cyBlbnRpcmV0eSBpbiBhbGwgY29waWVzIGFuZCBkZXJpdmVkIHdvcmtzLgorICoKKyAqIENPTVBBUSBDT01QVVRFUiBDT1JQT1JBVElPTiBNQUtFUyBOTyBXQVJSQU5USUVTLCBFWFBSRVNTRUQgT1IgSU1QTElFRCwKKyAqIEFTIFRPIFRIRSBVU0VGVUxORVNTIE9SIENPUlJFQ1RORVNTIE9GIFRISVMgQ09ERSBPUiBJVFMKKyAqIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgorICogQXV0aG9yOiBKYW1leSBIaWNrcy4KKyAqCisgKiBIaXN0b3J5OgorICoKKyAqIDIwMDEtMTAtPz8JQW5kcmV3IENocmlzdGlhbiAgIEFkZGVkIHN1cHBvcnQgZm9yIGlQQVEgSDM4MDAKKyAqCQkJCSAgIGFuZCBhYnN0cmFjdGVkIEVHUElPIGludGVyZmFjZS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcmRhLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvc2VyaWFsX3NhMTEwMC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvaDM2MDAuaD4KKworI2lmIGRlZmluZWQgKENPTkZJR19TQTExMDBfSDM2MDApIHx8IGRlZmluZWQgKENPTkZJR19TQTExMDBfSDMxMDApCisjaW5jbHVkZSA8YXNtL2FyY2gvaDM2MDBfZ3Bpby5oPgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0ExMTAwX0gzODAwCisjaW5jbHVkZSA8YXNtL2FyY2gvaDM2MDBfYXNpYy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKK3N0cnVjdCBpcGFxX21vZGVsX29wcyBpcGFxX21vZGVsX29wczsKK0VYUE9SVF9TWU1CT0woaXBhcV9tb2RlbF9vcHMpOworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaDN4eHhfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gIkgzWFhYIGJvb3QgZmlybXdhcmUiLAorCQkuc2l6ZQkJPSAweDAwMDQwMDAwLAorCQkub2Zmc2V0CQk9IDAsCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwgIC8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sIHsKKyNpZmRlZiBDT05GSUdfTVREXzJQQVJUU19JUEFRCisJCS5uYW1lCQk9ICJIM1hYWCByb290IGpmZnMyIiwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm9mZnNldAkJPSAweDAwMDQwMDAwLAorI2Vsc2UKKwkJLm5hbWUJCT0gIkgzWFhYIGtlcm5lbCIsCisJCS5zaXplCQk9IDB4MDAwODAwMDAsCisJCS5vZmZzZXQJCT0gMHgwMDA0MDAwMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJIM1hYWCBwYXJhbXMiLAorCQkuc2l6ZQkJPSAweDAwMDQwMDAwLAorCQkub2Zmc2V0CQk9IDB4MDAwQzAwMDAsCisJfSwgeworI2lmZGVmIENPTkZJR19KRkZTMl9GUworCQkubmFtZQkJPSAiSDNYWFggcm9vdCBqZmZzMiIsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQJCT0gMHgwMDEwMDAwMCwKKyNlbHNlCisJCS5uYW1lCQk9ICJIM1hYWCBpbml0cmQiLAorCQkuc2l6ZQkJPSAweDAwMTAwMDAwLAorCQkub2Zmc2V0CQk9IDB4MDAxMDAwMDAsCisJfSwgeworCQkubmFtZQkJPSAiSDNYWFggcm9vdCBjcmFtZnMiLAorCQkuc2l6ZQkJPSAweDAwMzAwMDAwLAorCQkub2Zmc2V0CQk9IDB4MDAyMDAwMDAsCisJfSwgeworCQkubmFtZQkJPSAiSDNYWFggdXNyIGNyYW1mcyIsCisJCS5zaXplCQk9IDB4MDA4MDAwMDAsCisJCS5vZmZzZXQJCT0gMHgwMDUwMDAwMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJIM1hYWCB1c3IgbG9jYWwiLAorCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCQkub2Zmc2V0CQk9IDB4MDBkMDAwMDAsCisjZW5kaWYKKyNlbmRpZgorCX0KK307CisKK3N0YXRpYyB2b2lkIGgzeHh4X3NldF92cHAoaW50IHZwcCkKK3sKKwlhc3NpZ25faDM2MDBfZWdwaW8oSVBBUV9FR1BJT19WUFBfT04sIHZwcCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBoM3h4eF9mbGFzaF9kYXRhID0geworCS5tYXBfbmFtZQk9ICJjZmlfcHJvYmUiLAorCS5zZXRfdnBwCT0gaDN4eHhfc2V0X3ZwcCwKKwkucGFydHMJCT0gaDN4eHhfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGgzeHh4X3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoM3h4eF9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gU0ExMTAwX0NTMF9QSFlTLAorCS5lbmQJCT0gU0ExMTAwX0NTMF9QSFlTICsgU1pfMzJNIC0gMSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCisvKgorICogVGhpcyB0dXJucyB0aGUgSVJEQSBwb3dlciBvbiBvciBvZmYgb24gdGhlIENvbXBhcSBIMzYwMAorICovCitzdGF0aWMgaW50IGgzNjAwX2lyZGFfc2V0X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHN0YXRlKQoreworCWFzc2lnbl9oMzYwMF9lZ3BpbyggSVBBUV9FR1BJT19JUl9PTiwgc3RhdGUgKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBoMzYwMF9pcmRhX3NldF9zcGVlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzcGVlZCkKK3sKKwlpZiAoc3BlZWQgPCA0MDAwMDAwKSB7CisJCWNscl9oMzYwMF9lZ3BpbyhJUEFRX0VHUElPX0lSX0ZTRUwpOworCX0gZWxzZSB7CisJCXNldF9oMzYwMF9lZ3BpbyhJUEFRX0VHUElPX0lSX0ZTRUwpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBpcmRhX3BsYXRmb3JtX2RhdGEgaDM2MDBfaXJkYV9kYXRhID0geworCS5zZXRfcG93ZXIJPSBoMzYwMF9pcmRhX3NldF9wb3dlciwKKwkuc2V0X3NwZWVkCT0gaDM2MDBfaXJkYV9zZXRfc3BlZWQsCit9OworCitzdGF0aWMgdm9pZCBoM3h4eF9tYWNoX2luaXQodm9pZCkKK3sKKwlzYTExeDBfc2V0X2ZsYXNoX2RhdGEoJmgzeHh4X2ZsYXNoX2RhdGEsICZoM3h4eF9mbGFzaF9yZXNvdXJjZSwgMSk7CisJc2ExMXgwX3NldF9pcmRhX2RhdGEoJmgzNjAwX2lyZGFfZGF0YSk7Cit9CisKKy8qCisgKiBsb3ctbGV2ZWwgVUFSVCBmZWF0dXJlcworICovCisKK3N0YXRpYyB2b2lkIGgzNjAwX3VhcnRfc2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVfaW50IG1jdHJsKQoreworCWlmIChwb3J0LT5tYXBiYXNlID09IF9TZXIzVVRDUjApIHsKKwkJaWYgKG1jdHJsICYgVElPQ01fUlRTKQorCQkJR1BDUiA9IEdQSU9fSDM2MDBfQ09NX1JUUzsKKwkJZWxzZQorCQkJR1BTUiA9IEdQSU9fSDM2MDBfQ09NX1JUUzsKKwl9Cit9CisKK3N0YXRpYyB1X2ludCBoMzYwMF91YXJ0X2dldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVfaW50IHJldCA9IFRJT0NNX0NEIHwgVElPQ01fQ1RTIHwgVElPQ01fRFNSOworCisJaWYgKHBvcnQtPm1hcGJhc2UgPT0gX1NlcjNVVENSMCkgeworCQlpbnQgZ3BsciA9IEdQTFI7CisJCS8qIERDRCBhbmQgQ1RTIGJpdHMgYXJlIGludmVydGVkIGluIEdQTFIgYnkgUlMyMzIgdHJhbnNjZWl2ZXIgKi8KKwkJaWYgKGdwbHIgJiBHUElPX0gzNjAwX0NPTV9EQ0QpCisJCQlyZXQgJj0gflRJT0NNX0NEOworCQlpZiAoZ3BsciAmIEdQSU9fSDM2MDBfQ09NX0NUUykKKwkJCXJldCAmPSB+VElPQ01fQ1RTOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGgzNjAwX3VhcnRfcG0oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdV9pbnQgc3RhdGUsIHVfaW50IG9sZHN0YXRlKQoreworCWlmIChwb3J0LT5tYXBiYXNlID09IF9TZXIyVVRDUjApIHsgLyogVE9ETzogUkVNT1ZFIFRISVMgKi8KKwkJYXNzaWduX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fSVJfT04sICFzdGF0ZSk7CisJfSBlbHNlIGlmIChwb3J0LT5tYXBiYXNlID09IF9TZXIzVVRDUjApIHsKKwkJYXNzaWduX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fUlMyMzJfT04sICFzdGF0ZSk7CisJfQorfQorCisvKgorICogRW5hYmxlL0Rpc2FibGUgd2FrZSB1cCBldmVudHMgZm9yIHRoaXMgc2VyaWFsIHBvcnQuCisgKiBPYnZpb3VzbHksIHdlIG9ubHkgc3VwcG9ydCB0aGlzIG9uIHRoZSBub3JtYWwgQ09NIHBvcnQuCisgKi8KK3N0YXRpYyBpbnQgaDM2MDBfdWFydF9zZXRfd2FrZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1X2ludCBlbmFibGUpCit7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAocG9ydC0+bWFwYmFzZSA9PSBfU2VyM1VUQ1IwKSB7CisJCWlmIChlbmFibGUpCisJCQlQV0VSIHw9IFBXRVJfR1BJTzIzIHwgUFdFUl9HUElPMjU7IC8qIERDRCBhbmQgQ1RTICovCisJCWVsc2UKKwkJCVBXRVIgJj0gfihQV0VSX0dQSU8yMyB8IFBXRVJfR1BJTzI1KTsgLyogRENEIGFuZCBDVFMgKi8KKwkJZXJyID0gMDsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBzYTExMDBfcG9ydF9mbnMgaDM2MDBfcG9ydF9mbnMgX19pbml0ZGF0YSA9IHsKKwkuc2V0X21jdHJsCT0gaDM2MDBfdWFydF9zZXRfbWN0cmwsCisJLmdldF9tY3RybAk9IGgzNjAwX3VhcnRfZ2V0X21jdHJsLAorCS5wbQkJPSBoMzYwMF91YXJ0X3BtLAorCS5zZXRfd2FrZQk9IGgzNjAwX3VhcnRfc2V0X3dha2UsCit9OworCisvKgorICogaGVscGVyIGZvciBzYTExMDBmYgorICovCitzdGF0aWMgdm9pZCBoM3h4eF9sY2RfcG93ZXIoaW50IGVuYWJsZSkKK3sKKwlhc3NpZ25faDM2MDBfZWdwaW8oSVBBUV9FR1BJT19MQ0RfUE9XRVIsIGVuYWJsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaDM2MDBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisgLyogdmlydHVhbAkgICAgICAgcGh5c2ljYWwgCSAgbGVuZ3RoICAgICAgdHlwZSAqLworICB7IEgzNjAwX0JBTktfMl9WSVJULCBTQTExMDBfQ1MyX1BIWVMsICAgMHgwMjgwMDAwMCwgTVRfREVWSUNFIH0sIC8qIHN0YXRpYyBtZW1vcnkgYmFuayAyICBDUyMyICovCisgIHsgSDM2MDBfQkFOS180X1ZJUlQsIFNBMTEwMF9DUzRfUEhZUywgICAweDAwODAwMDAwLCBNVF9ERVZJQ0UgfSwgLyogc3RhdGljIG1lbW9yeSBiYW5rIDQgIENTIzQgKi8KKyAgeyBIMzYwMF9FR1BJT19WSVJULCAgSDM2MDBfRUdQSU9fUEhZUywgIDB4MDEwMDAwMDAsIE1UX0RFVklDRSB9LCAvKiBFR1BJTyAwCQlDUyM1ICovCit9OworCisvKgorICogQ29tbW9uIG1hcF9pbyBpbml0aWFsaXphdGlvbgorICovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBoM3h4eF9tYXBfaW8odm9pZCkKK3sKKwlzYTExMDBfbWFwX2lvKCk7CisJaW90YWJsZV9pbml0KGgzNjAwX2lvX2Rlc2MsIEFSUkFZX1NJWkUoaDM2MDBfaW9fZGVzYykpOworCisJc2ExMTAwX3JlZ2lzdGVyX3VhcnRfZm5zKCZoMzYwMF9wb3J0X2Zucyk7CisJc2ExMTAwX3JlZ2lzdGVyX3VhcnQoMCwgMyk7IC8qIENvbW1vbiBzZXJpYWwgcG9ydCAqLworLy8Jc2ExMTAwX3JlZ2lzdGVyX3VhcnQoMSwgMSk7IC8qIE1pY3JvY29udHJvbGxlciBvbiAzMTAwLzM2MDAgKi8KKworCS8qIEVuc3VyZSB0aG9zZSBwaW5zIGFyZSBvdXRwdXRzIGFuZCBkcml2aW5nIGxvdyAgKi8KKwlQUERSIHw9IFBQQ19UWEQ0IHwgUFBDX1NDTEsgfCBQUENfU0ZSTTsKKwlQUFNSICY9IH4oUFBDX1RYRDQgfCBQUENfU0NMSyB8IFBQQ19TRlJNKTsKKworCS8qIENvbmZpZ3VyZSBzdXNwZW5kIGNvbmRpdGlvbnMgKi8KKwlQR1NSID0gMDsKKwlQV0VSID0gUFdFUl9HUElPMCB8IFBXRVJfUlRDOworCVBDRlIgPSBQQ0ZSX09QREU7CisJUFNEUiA9IDA7CisKKwlzYTExMDBmYl9sY2RfcG93ZXIgPSBoM3h4eF9sY2RfcG93ZXI7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZG9fYmxhbmsoaW50IHNldHApCit7CisJaWYgKGlwYXFfbW9kZWxfb3BzLmJsYW5rX2NhbGxiYWNrKQorCQlpcGFxX21vZGVsX29wcy5ibGFua19jYWxsYmFjaygxLXNldHApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKiBIMzEwMCAqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgQ09ORklHX1NBMTEwMF9IMzEwMAorCisjZGVmaW5lIEgzMTAwX0VHUElPCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKUgzNjAwX0VHUElPX1ZJUlQpCitzdGF0aWMgdW5zaWduZWQgaW50IGgzMTAwX2VncGlvID0gMDsKKworc3RhdGljIHZvaWQgaDMxMDBfY29udHJvbF9lZ3BpbyhlbnVtIGlwYXFfZWdwaW9fdHlwZSB4LCBpbnQgc2V0cCkKK3sKKwl1bnNpZ25lZCBpbnQgZWdwaW8gPSAwOworCWxvbmcJICAgICBncGlvID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3dpdGNoICh4KSB7CisJY2FzZSBJUEFRX0VHUElPX0xDRF9QT1dFUjoKKwkJZWdwaW8gfD0gRUdQSU9fSDM2MDBfTENEX09OOworCQlncGlvICB8PSBHUElPX0gzMTAwX0xDRF8zVl9PTjsKKwkJZG9fYmxhbmsoc2V0cCk7CisJCWJyZWFrOworCWNhc2UgSVBBUV9FR1BJT19MQ0RfRU5BQkxFOgorCQlicmVhazsKKwljYXNlIElQQVFfRUdQSU9fQ09ERUNfTlJFU0VUOgorCQllZ3BpbyB8PSBFR1BJT19IMzYwMF9DT0RFQ19OUkVTRVQ7CisJCWJyZWFrOworCWNhc2UgSVBBUV9FR1BJT19BVURJT19PTjoKKwkJZ3BpbyB8PSBHUElPX0gzMTAwX0FVRF9QV1JfT04KKwkJCXwgR1BJT19IMzEwMF9BVURfT047CisJCWJyZWFrOworCWNhc2UgSVBBUV9FR1BJT19RTVVURToKKwkJZ3BpbyB8PSBHUElPX0gzMTAwX1FNVVRFOworCQlicmVhazsKKwljYXNlIElQQVFfRUdQSU9fT1BUX05WUkFNX09OOgorCQllZ3BpbyB8PSBFR1BJT19IMzYwMF9PUFRfTlZSQU1fT047CisJCWJyZWFrOworCWNhc2UgSVBBUV9FR1BJT19PUFRfT046CisJCWVncGlvIHw9IEVHUElPX0gzNjAwX09QVF9PTjsKKwkJYnJlYWs7CisJY2FzZSBJUEFRX0VHUElPX0NBUkRfUkVTRVQ6CisJCWVncGlvIHw9IEVHUElPX0gzNjAwX0NBUkRfUkVTRVQ7CisJCWJyZWFrOworCWNhc2UgSVBBUV9FR1BJT19PUFRfUkVTRVQ6CisJCWVncGlvIHw9IEVHUElPX0gzNjAwX09QVF9SRVNFVDsKKwkJYnJlYWs7CisJY2FzZSBJUEFRX0VHUElPX0lSX09OOgorCQlncGlvIHw9IEdQSU9fSDMxMDBfSVJfT047CisJCWJyZWFrOworCWNhc2UgSVBBUV9FR1BJT19JUl9GU0VMOgorCQlncGlvIHw9IEdQSU9fSDMxMDBfSVJfRlNFTDsKKwkJYnJlYWs7CisJY2FzZSBJUEFRX0VHUElPX1JTMjMyX09OOgorCQllZ3BpbyB8PSBFR1BJT19IMzYwMF9SUzIzMl9PTjsKKwkJYnJlYWs7CisJY2FzZSBJUEFRX0VHUElPX1ZQUF9PTjoKKwkJZWdwaW8gfD0gRUdQSU9fSDM2MDBfVlBQX09OOworCQlicmVhazsKKwl9CisKKwlpZiAoZWdwaW8gfHwgZ3BpbykgeworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCWlmIChzZXRwKSB7CisJCQloMzEwMF9lZ3BpbyB8PSBlZ3BpbzsKKwkJCUdQU1IgPSBncGlvOworCQl9IGVsc2UgeworCQkJaDMxMDBfZWdwaW8gJj0gfmVncGlvOworCQkJR1BDUiA9IGdwaW87CisJCX0KKwkJSDMxMDBfRUdQSU8gPSBoMzEwMF9lZ3BpbzsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgaDMxMDBfcmVhZF9lZ3Bpbyh2b2lkKQoreworCXJldHVybiBoMzEwMF9lZ3BpbzsKK30KKworc3RhdGljIGludCBoMzEwMF9wbV9jYWxsYmFjayhpbnQgcmVxKQoreworCWlmIChpcGFxX21vZGVsX29wcy5wbV9jYWxsYmFja19hdXgpCisJCXJldHVybiBpcGFxX21vZGVsX29wcy5wbV9jYWxsYmFja19hdXgocmVxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcGFxX21vZGVsX29wcyBoMzEwMF9tb2RlbF9vcHMgX19pbml0ZGF0YSA9IHsKKwkuZ2VuZXJpY19uYW1lCT0gIjMxMDAiLAorCS5jb250cm9sCT0gaDMxMDBfY29udHJvbF9lZ3BpbywKKwkucmVhZAkJPSBoMzEwMF9yZWFkX2VncGlvLAorCS5wbV9jYWxsYmFjawk9IGgzMTAwX3BtX2NhbGxiYWNrCit9OworCisjZGVmaW5lIEgzMTAwX0RJUkVDVF9FR1BJTyAoR1BJT19IMzEwMF9CVF9PTgkgIFwKKwkJCSAgfCBHUElPX0gzMTAwX0dQSU8zCSAgXAorCQkJICB8IEdQSU9fSDMxMDBfUU1VVEUJICBcCisJCQkgIHwgR1BJT19IMzEwMF9MQ0RfM1ZfT04gIFwKKwkJCSAgfCBHUElPX0gzMTAwX0FVRF9PTgkgIFwKKwkJCSAgfCBHUElPX0gzMTAwX0FVRF9QV1JfT04gXAorCQkJICB8IEdQSU9fSDMxMDBfSVJfT04JICBcCisJCQkgIHwgR1BJT19IMzEwMF9JUl9GU0VMKQorCitzdGF0aWMgdm9pZCBfX2luaXQgaDMxMDBfbWFwX2lvKHZvaWQpCit7CisJaDN4eHhfbWFwX2lvKCk7CisKKwkvKiBJbml0aWFsaXplIGgzMTAwLXNwZWNpZmljIHZhbHVlcyBoZXJlICovCisJR1BDUiA9IDB4MGZmZmZmZmY7CSAvKiBBbGwgb3V0cHV0cyBhcmUgc2V0IGxvdyBieSBkZWZhdWx0ICovCisJR1BEUiA9IEdQSU9fSDM2MDBfQ09NX1JUUyAgfCBHUElPX0gzNjAwX0wzX0NMT0NLIHwKKwkgICAgICAgR1BJT19IMzYwMF9MM19NT0RFICB8IEdQSU9fSDM2MDBfTDNfREFUQSAgfAorCSAgICAgICBHUElPX0gzNjAwX0NMS19TRVQxIHwgR1BJT19IMzYwMF9DTEtfU0VUMCB8CisJICAgICAgIEgzMTAwX0RJUkVDVF9FR1BJTzsKKworCS8qIE9sZGVyIGJvb3RsZHJzIHB1dCBHUElPMi05IGluIGFsdGVybmF0ZSBtb2RlIG9uIHRoZQorCSAgIGFzc3VtcHRpb24gdGhhdCB0aGV5IGFyZSB1c2VkIGZvciB2aWRlbyAqLworCUdBRlIgJj0gfkgzMTAwX0RJUkVDVF9FR1BJTzsKKworCUgzMTAwX0VHUElPID0gaDMxMDBfZWdwaW87CisJaXBhcV9tb2RlbF9vcHMgPSBoMzEwMF9tb2RlbF9vcHM7Cit9CisKK01BQ0hJTkVfU1RBUlQoSDMxMDAsICJDb21wYXEgaVBBUSBIMzEwMCIpCisJQk9PVF9NRU0oMHhjMDAwMDAwMCwgMHg4MDAwMDAwMCwgMHhmODAwMDAwMCkKKwlCT09UX1BBUkFNUygweGMwMDAwMTAwKQorCU1BUElPKGgzMTAwX21hcF9pbykKKwlJTklUSVJRKHNhMTEwMF9pbml0X2lycSkKKwkudGltZXIJCT0gJnNhMTEwMF90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gaDN4eHhfbWFjaF9pbml0LAorTUFDSElORV9FTkQKKworI2VuZGlmIC8qIENPTkZJR19TQTExMDBfSDMxMDAgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKiogSDM2MDAgKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIENPTkZJR19TQTExMDBfSDM2MDAKKworI2RlZmluZSBIMzYwMF9FR1BJTwkoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilIMzYwMF9FR1BJT19WSVJUKQorc3RhdGljIHVuc2lnbmVkIGludCBoMzYwMF9lZ3BpbyA9IEVHUElPX0gzNjAwX1JTMjMyX09OOworCitzdGF0aWMgdm9pZCBoMzYwMF9jb250cm9sX2VncGlvKGVudW0gaXBhcV9lZ3Bpb190eXBlIHgsIGludCBzZXRwKQoreworCXVuc2lnbmVkIGludCBlZ3BpbyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXN3aXRjaCAoeCkgeworCWNhc2UgSVBBUV9FR1BJT19MQ0RfUE9XRVI6CisJCWVncGlvIHw9IEVHUElPX0gzNjAwX0xDRF9PTiB8CisJCQkgRUdQSU9fSDM2MDBfTENEX1BDSSB8CisJCQkgRUdQSU9fSDM2MDBfTENEXzVWX09OIHwKKwkJCSBFR1BJT19IMzYwMF9MVkREX09OOworCQlkb19ibGFuayhzZXRwKTsKKwkJYnJlYWs7CisJY2FzZSBJUEFRX0VHUElPX0xDRF9FTkFCTEU6CisJCWJyZWFrOworCWNhc2UgSVBBUV9FR1BJT19DT0RFQ19OUkVTRVQ6CisJCWVncGlvIHw9IEVHUElPX0gzNjAwX0NPREVDX05SRVNFVDsKKwkJYnJlYWs7CisJY2FzZSBJUEFRX0VHUElPX0FVRElPX09OOgorCQllZ3BpbyB8PSBFR1BJT19IMzYwMF9BVURfQU1QX09OIHwKKwkJCSBFR1BJT19IMzYwMF9BVURfUFdSX09OOworCQlicmVhazsKKwljYXNlIElQQVFfRUdQSU9fUU1VVEU6CisJCWVncGlvIHw9IEVHUElPX0gzNjAwX1FNVVRFOworCQlicmVhazsKKwljYXNlIElQQVFfRUdQSU9fT1BUX05WUkFNX09OOgorCQllZ3BpbyB8PSBFR1BJT19IMzYwMF9PUFRfTlZSQU1fT047CisJCWJyZWFrOworCWNhc2UgSVBBUV9FR1BJT19PUFRfT046CisJCWVncGlvIHw9IEVHUElPX0gzNjAwX09QVF9PTjsKKwkJYnJlYWs7CisJY2FzZSBJUEFRX0VHUElPX0NBUkRfUkVTRVQ6CisJCWVncGlvIHw9IEVHUElPX0gzNjAwX0NBUkRfUkVTRVQ7CisJCWJyZWFrOworCWNhc2UgSVBBUV9FR1BJT19PUFRfUkVTRVQ6CisJCWVncGlvIHw9IEVHUElPX0gzNjAwX09QVF9SRVNFVDsKKwkJYnJlYWs7CisJY2FzZSBJUEFRX0VHUElPX0lSX09OOgorCQllZ3BpbyB8PSBFR1BJT19IMzYwMF9JUl9PTjsKKwkJYnJlYWs7CisJY2FzZSBJUEFRX0VHUElPX0lSX0ZTRUw6CisJCWVncGlvIHw9IEVHUElPX0gzNjAwX0lSX0ZTRUw7CisJCWJyZWFrOworCWNhc2UgSVBBUV9FR1BJT19SUzIzMl9PTjoKKwkJZWdwaW8gfD0gRUdQSU9fSDM2MDBfUlMyMzJfT047CisJCWJyZWFrOworCWNhc2UgSVBBUV9FR1BJT19WUFBfT046CisJCWVncGlvIHw9IEVHUElPX0gzNjAwX1ZQUF9PTjsKKwkJYnJlYWs7CisJfQorCisJaWYgKGVncGlvKSB7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJaWYgKHNldHApCisJCQloMzYwMF9lZ3BpbyB8PSBlZ3BpbzsKKwkJZWxzZQorCQkJaDM2MDBfZWdwaW8gJj0gfmVncGlvOworCQlIMzYwMF9FR1BJTyA9IGgzNjAwX2VncGlvOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBoMzYwMF9yZWFkX2VncGlvKHZvaWQpCit7CisJcmV0dXJuIGgzNjAwX2VncGlvOworfQorCitzdGF0aWMgaW50IGgzNjAwX3BtX2NhbGxiYWNrKGludCByZXEpCit7CisJaWYgKGlwYXFfbW9kZWxfb3BzLnBtX2NhbGxiYWNrX2F1eCkKKwkJcmV0dXJuIGlwYXFfbW9kZWxfb3BzLnBtX2NhbGxiYWNrX2F1eChyZXEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlwYXFfbW9kZWxfb3BzIGgzNjAwX21vZGVsX29wcyBfX2luaXRkYXRhID0geworCS5nZW5lcmljX25hbWUJPSAiMzYwMCIsCisJLmNvbnRyb2wJPSBoMzYwMF9jb250cm9sX2VncGlvLAorCS5yZWFkCQk9IGgzNjAwX3JlYWRfZWdwaW8sCisJLnBtX2NhbGxiYWNrCT0gaDM2MDBfcG1fY2FsbGJhY2sKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBoMzYwMF9tYXBfaW8odm9pZCkKK3sKKwloM3h4eF9tYXBfaW8oKTsKKworCS8qIEluaXRpYWxpemUgaDM2MDAtc3BlY2lmaWMgdmFsdWVzIGhlcmUgKi8KKworCUdQQ1IgPSAweDBmZmZmZmZmOwkgLyogQWxsIG91dHB1dHMgYXJlIHNldCBsb3cgYnkgZGVmYXVsdCAqLworCUdQRFIgPSBHUElPX0gzNjAwX0NPTV9SVFMgIHwgR1BJT19IMzYwMF9MM19DTE9DSyB8CisJICAgICAgIEdQSU9fSDM2MDBfTDNfTU9ERSAgfCBHUElPX0gzNjAwX0wzX0RBVEEgIHwKKwkgICAgICAgR1BJT19IMzYwMF9DTEtfU0VUMSB8IEdQSU9fSDM2MDBfQ0xLX1NFVDAgfAorCSAgICAgICBHUElPX0xERDE1IHwgR1BJT19MREQxNCB8IEdQSU9fTEREMTMgfCBHUElPX0xERDEyIHwKKwkgICAgICAgR1BJT19MREQxMSB8IEdQSU9fTEREMTAgfCBHUElPX0xERDkgIHwgR1BJT19MREQ4OworCisJSDM2MDBfRUdQSU8gPSBoMzYwMF9lZ3BpbzsJICAgLyogTWFpbnRhaW5zIGFjcm9zcyBzbGVlcD8gKi8KKwlpcGFxX21vZGVsX29wcyA9IGgzNjAwX21vZGVsX29wczsKK30KKworTUFDSElORV9TVEFSVChIMzYwMCwgIkNvbXBhcSBpUEFRIEgzNjAwIikKKwlCT09UX01FTSgweGMwMDAwMDAwLCAweDgwMDAwMDAwLCAweGY4MDAwMDAwKQorCUJPT1RfUEFSQU1TKDB4YzAwMDAxMDApCisJTUFQSU8oaDM2MDBfbWFwX2lvKQorCUlOSVRJUlEoc2ExMTAwX2luaXRfaXJxKQorCS50aW1lcgkJPSAmc2ExMTAwX3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBoM3h4eF9tYWNoX2luaXQsCitNQUNISU5FX0VORAorCisjZW5kaWYgLyogQ09ORklHX1NBMTEwMF9IMzYwMCAqLworCisjaWZkZWYgQ09ORklHX1NBMTEwMF9IMzgwMAorCisjZGVmaW5lIFNFVF9BU0lDMSh4KSBcCisgICBkbyB7aWYgKHNldHApIHsgSDM4MDBfQVNJQzFfR1BJT19PVVQgfD0gKHgpOyB9IGVsc2UgeyBIMzgwMF9BU0lDMV9HUElPX09VVCAmPSB+KHgpOyB9fSB3aGlsZSgwKQorCisjZGVmaW5lIFNFVF9BU0lDMih4KSBcCisgICBkbyB7aWYgKHNldHApIHsgSDM4MDBfQVNJQzJfR1BJT1BJT0QgfD0gKHgpOyB9IGVsc2UgeyBIMzgwMF9BU0lDMl9HUElPUElPRCAmPSB+KHgpOyB9fSB3aGlsZSgwKQorCisjZGVmaW5lIENMRUFSX0FTSUMxKHgpIFwKKyAgIGRvIHtpZiAoc2V0cCkgeyBIMzgwMF9BU0lDMV9HUElPX09VVCAmPSB+KHgpOyB9IGVsc2UgeyBIMzgwMF9BU0lDMV9HUElPX09VVCB8PSAoeCk7IH19IHdoaWxlKDApCisKKyNkZWZpbmUgQ0xFQVJfQVNJQzIoeCkgXAorICAgZG8ge2lmIChzZXRwKSB7IEgzODAwX0FTSUMyX0dQSU9QSU9EICY9IH4oeCk7IH0gZWxzZSB7IEgzODAwX0FTSUMyX0dQSU9QSU9EIHw9ICh4KTsgfX0gd2hpbGUoMCkKKworCisvKgorICBPbiBzY3JlZW4gZW5hYmxlLCB3ZSBnZXQKKworICAgICBoMzgwMF92aWRlb19wb3dlcl9vbigxKQorICAgICBMQ0QgY29udHJvbGxlciBzdGFydHMKKyAgICAgaDM4MDBfdmlkZW9fbGNkX2VuYWJsZSgxKQorCisgIE9uIHNjcmVlbiBkaXNhYmxlLCB3ZSBnZXQKKworICAgICBoMzgwMF92aWRlb19sY2RfZW5hYmxlKDApCisgICAgIExDRCBjb250cm9sbGVyIHN0b3BzCisgICAgIGgzODAwX3ZpZGVvX3Bvd2VyX29uKDApCisqLworCisKK3N0YXRpYyB2b2lkIGgzODAwX3ZpZGVvX3Bvd2VyX29uKGludCBzZXRwKQoreworCWlmIChzZXRwKSB7CisJCUgzODAwX0FTSUMxX0dQSU9fT1VUIHw9IEdQSU8xX0xDRF9PTjsKKwkJbXNsZWVwKDMwKTsKKwkJSDM4MDBfQVNJQzFfR1BJT19PVVQgfD0gR1BJTzFfVkdMX09OOworCQltc2xlZXAoNSk7CisJCUgzODAwX0FTSUMxX0dQSU9fT1VUIHw9IEdQSU8xX1ZHSF9PTjsKKwkJbXNsZWVwKDUwKTsKKwkJSDM4MDBfQVNJQzFfR1BJT19PVVQgfD0gR1BJTzFfTENEXzVWX09OOworCQltc2xlZXAoNSk7CisJfSBlbHNlIHsKKwkJbXNsZWVwKDUpOworCQlIMzgwMF9BU0lDMV9HUElPX09VVCAmPSB+R1BJTzFfTENEXzVWX09OOworCQltc2xlZXAoNTApOworCQlIMzgwMF9BU0lDMV9HUElPX09VVCAmPSB+R1BJTzFfVkdMX09OOworCQltc2xlZXAoNSk7CisJCUgzODAwX0FTSUMxX0dQSU9fT1VUICY9IH5HUElPMV9WR0hfT047CisJCW1zbGVlcCgxMDApOworCQlIMzgwMF9BU0lDMV9HUElPX09VVCAmPSB+R1BJTzFfTENEX09OOworCX0KK30KKworc3RhdGljIHZvaWQgaDM4MDBfdmlkZW9fbGNkX2VuYWJsZShpbnQgc2V0cCkKK3sKKwlpZiAoc2V0cCkgeworCQltc2xlZXAoMTcpOwkvLyBXYWl0IG9uZSBmcm9tIGJlZm9yZSB0dXJuaW5nIG9uCisJCUgzODAwX0FTSUMxX0dQSU9fT1VUIHw9IEdQSU8xX0xDRF9QQ0k7CisJfSBlbHNlIHsKKwkJSDM4MDBfQVNJQzFfR1BJT19PVVQgJj0gfkdQSU8xX0xDRF9QQ0k7CisJCW1zbGVlcCgzMCk7CS8vIFdhaXQgYmVmb3JlIHR1cm5pbmcgb2ZmCisJfQorfQorCisKK3N0YXRpYyB2b2lkIGgzODAwX2NvbnRyb2xfZWdwaW8oZW51bSBpcGFxX2VncGlvX3R5cGUgeCwgaW50IHNldHApCit7CisJc3dpdGNoICh4KSB7CisJY2FzZSBJUEFRX0VHUElPX0xDRF9QT1dFUjoKKwkJaDM4MDBfdmlkZW9fcG93ZXJfb24oc2V0cCk7CisJCWJyZWFrOworCWNhc2UgSVBBUV9FR1BJT19MQ0RfRU5BQkxFOgorCQloMzgwMF92aWRlb19sY2RfZW5hYmxlKHNldHApOworCQlicmVhazsKKwljYXNlIElQQVFfRUdQSU9fQ09ERUNfTlJFU0VUOgorCWNhc2UgSVBBUV9FR1BJT19BVURJT19PTjoKKwljYXNlIElQQVFfRUdQSU9fUU1VVEU6CisJCXByaW50aygiJXM6IGVycm9yIC0gc2hvdWxkIG5vdCBiZSBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWJyZWFrOworCWNhc2UgSVBBUV9FR1BJT19PUFRfTlZSQU1fT046CisJCVNFVF9BU0lDMihHUElPMl9PUFRfT05fTlZSQU0pOworCQlicmVhazsKKwljYXNlIElQQVFfRUdQSU9fT1BUX09OOgorCQlTRVRfQVNJQzIoR1BJTzJfT1BUX09OKTsKKwkJYnJlYWs7CisJY2FzZSBJUEFRX0VHUElPX0NBUkRfUkVTRVQ6CisJCVNFVF9BU0lDMihHUElPMl9PUFRfUENNX1JFU0VUKTsKKwkJYnJlYWs7CisJY2FzZSBJUEFRX0VHUElPX09QVF9SRVNFVDoKKwkJU0VUX0FTSUMyKEdQSU8yX09QVF9SRVNFVCk7CisJCWJyZWFrOworCWNhc2UgSVBBUV9FR1BJT19JUl9PTjoKKwkJQ0xFQVJfQVNJQzEoR1BJTzFfSVJfT05fTik7CisJCWJyZWFrOworCWNhc2UgSVBBUV9FR1BJT19JUl9GU0VMOgorCQlicmVhazsKKwljYXNlIElQQVFfRUdQSU9fUlMyMzJfT046CisJCVNFVF9BU0lDMShHUElPMV9SUzIzMl9PTik7CisJCWJyZWFrOworCWNhc2UgSVBBUV9FR1BJT19WUFBfT046CisJCUgzODAwX0FTSUMyX0ZsYXNoV1BfVlBQX09OID0gc2V0cDsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBoMzgwMF9yZWFkX2VncGlvKHZvaWQpCit7CisJcmV0dXJuIEgzODAwX0FTSUMxX0dQSU9fT1VUIHwgKEgzODAwX0FTSUMyX0dQSU9QSU9EIDw8IDE2KTsKK30KKworLyogV2UgbmVlZCB0byBmaXggQVNJQzIgR1BJTyBvdmVyIHN1c3BlbmQvcmVzdW1lLiAgQXQgdGhlIG1vbWVudCwKKyAgIGl0IGRvZXNuJ3QgYXBwZWFyIHRoYXQgQVNJQzEgR1BJTyBoYXMgdGhlIHNhbWUgcHJvYmxlbSAqLworCitzdGF0aWMgaW50IGgzODAwX3BtX2NhbGxiYWNrKGludCByZXEpCit7CisJc3RhdGljIHUxNiBhc2ljMV9kYXRhOworCXN0YXRpYyB1MTYgYXNpYzJfZGF0YTsKKwlpbnQgcmVzdWx0ID0gMDsKKworCXByaW50aygiJXMgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVxKTsKKworCXN3aXRjaCAocmVxKSB7CisJY2FzZSBQTV9SRVNVTUU6CisJCU1TQzIgPSAoTVNDMiAmIDB4MDAwMGZmZmYpIHwgMHhFNDUxMDAwMDsgIC8qIFNldCBNU0MyIGNvcnJlY3RseSAqLworCisJCUgzODAwX0FTSUMyX0dQSU9QSU9EID0gYXNpYzJfZGF0YTsKKwkJSDM4MDBfQVNJQzJfR1BJT0RJUiA9IEdQSU8yX1BFTl9JUlEKKwkJCXwgR1BJTzJfU0RfREVURUNUCisJCQl8IEdQSU8yX0VBUl9JTl9OCisJCQl8IEdQSU8yX1VTQl9ERVRFQ1RfTgorCQkJfCBHUElPMl9TRF9DT05fU0xUOworCisJCUgzODAwX0FTSUMxX0dQSU9fT1VUID0gYXNpYzFfZGF0YTsKKworCQlpZiAoaXBhcV9tb2RlbF9vcHMucG1fY2FsbGJhY2tfYXV4KQorCQkJcmVzdWx0ID0gaXBhcV9tb2RlbF9vcHMucG1fY2FsbGJhY2tfYXV4KHJlcSk7CisJCWJyZWFrOworCisJY2FzZSBQTV9TVVNQRU5EOgorCQlpZiAoaXBhcV9tb2RlbF9vcHMucG1fY2FsbGJhY2tfYXV4ICYmCisJCSAgICAgKChyZXN1bHQgPSBpcGFxX21vZGVsX29wcy5wbV9jYWxsYmFja19hdXgocmVxKSkgIT0gMCkpCisJCQlyZXR1cm4gcmVzdWx0OworCisJCWFzaWMxX2RhdGEgPSBIMzgwMF9BU0lDMV9HUElPX09VVDsKKwkJYXNpYzJfZGF0YSA9IEgzODAwX0FTSUMyX0dQSU9QSU9EOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIiVzOiB1bnJlY29nbml6ZWQgUE0gY2FsbGJhY2tcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IGlwYXFfbW9kZWxfb3BzIGgzODAwX21vZGVsX29wcyBfX2luaXRkYXRhID0geworCS5nZW5lcmljX25hbWUJPSAiMzgwMCIsCisJLmNvbnRyb2wJPSBoMzgwMF9jb250cm9sX2VncGlvLAorCS5yZWFkCQk9IGgzODAwX3JlYWRfZWdwaW8sCisJLnBtX2NhbGxiYWNrCT0gaDM4MDBfcG1fY2FsbGJhY2sKK307CisKKyNkZWZpbmUgTUFYX0FTSUNfSVNSX0xPT1BTICAgIDIwCisKKy8qIFRoZSBvcmRlciBvZiB0aGVzZSBpcyBpbXBvcnRhbnQgLSBzZWUgI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4gKi8KK3N0YXRpYyB1MzIga3Bpb19pcnFfbWFza1tdID0geworCUtQSU9fS0VZX0FMTCwKKwlLUElPX1NQSV9JTlQsCisJS1BJT19PV01fSU5ULAorCUtQSU9fQURDX0lOVCwKKwlLUElPX1VBUlRfMF9JTlQsCisJS1BJT19VQVJUXzFfSU5ULAorCUtQSU9fVElNRVJfMF9JTlQsCisJS1BJT19USU1FUl8xX0lOVCwKKwlLUElPX1RJTUVSXzJfSU5UCit9OworCitzdGF0aWMgdTMyIGdwaW9faXJxX21hc2tbXSA9IHsKKwlHUElPMl9QRU5fSVJRLAorCUdQSU8yX1NEX0RFVEVDVCwKKwlHUElPMl9FQVJfSU5fTiwKKwlHUElPMl9VU0JfREVURUNUX04sCisJR1BJTzJfU0RfQ09OX1NMVCwKK307CisKK3N0YXRpYyB2b2lkIGgzODAwX0lSUV9kZW11eCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGk7CisKKwlpZiAoMCkgcHJpbnRrKCIlczogaW50ZXJydXB0IHJlY2VpdmVkXG4iLCBfX0ZVTkNUSU9OX18pOworCisJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0FTSUNfSVNSX0xPT1BTICYmIChHUExSICYgR1BJT19IMzgwMF9BU0lDKTsgaSsrKSB7CisJCXUzMiBpcnE7CisJCWludCBqOworCisJCS8qIEtQSU8gKi8KKwkJaXJxID0gSDM4MDBfQVNJQzJfS1BJSU5URkxBRzsKKwkJaWYgKDApIHByaW50aygiJXMgS1BJTyAweCUwOFhcbiIsIF9fRlVOQ1RJT05fXywgaXJxKTsKKwkJZm9yIChqID0gMDsgaiA8IEgzODAwX0tQSU9fSVJRX0NPVU5UOyBqKyspCisJCQlpZiAoaXJxICYga3Bpb19pcnFfbWFza1tqXSkKKwkJCQlkb19lZGdlX0lSUShIMzgwMF9LUElPX0lSUV9DT1VOVCArIGosIGlycV9kZXNjICsgSDM4MDBfS1BJT19JUlFfQ09VTlQgKyBqLCByZWdzKTsKKworCQkvKiBHUElPMiAqLworCQlpcnEgPSBIMzgwMF9BU0lDMl9HUElJTlRGTEFHOworCQlpZiAoMCkgcHJpbnRrKCIlcyBHUElPIDB4JTA4WFxuIiwgX19GVU5DVElPTl9fLCBpcnEpOworCQlmb3IgKGogPSAwOyBqIDwgSDM4MDBfR1BJT19JUlFfQ09VTlQ7IGorKykKKwkJCWlmIChpcnEgJiBncGlvX2lycV9tYXNrW2pdKQorCQkJCWRvX2VkZ2VfSVJRKEgzODAwX0dQSU9fSVJRX0NPVU5UICsgaiwgaXJxX2Rlc2MgKyBIMzgwMF9HUElPX0lSUV9DT1VOVCArIGogLCByZWdzKTsKKwl9CisKKwlpZiAoaSA+PSBNQVhfQVNJQ19JU1JfTE9PUFMpCisJCXByaW50aygiJXM6IGludGVycnVwdCBwcm9jZXNzaW5nIG92ZXJydW5cbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBGb3IgbGV2ZWwtYmFzZWQgaW50ZXJydXB0cyAqLworCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOworCit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGgzODAwX2lycSA9IHsKKwkubmFtZQkJPSAiaDM4MDBfYXNpYyIsCisJLmhhbmRsZXIJPSBoMzgwMF9JUlFfZGVtdXgsCisJLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCwKK307CisKK3UzMiBrcGlvX2ludF9zaGFkb3cgPSAwOworCisKKy8qIG1hc2tfYWNrIDwtIElSUSBpcyBmaXJzdCBzZXJ2aWNlZC4KKyAgICAgICBtYXNrIDwtIElSUSBpcyBkaXNhYmxlZC4KKyAgICAgdW5tYXNrIDwtIElSUSBpcyBlbmFibGVkCisKKyAgICAgVGhlIElOVENMUiByZWdpc3RlcnMgYXJlIHBvb3JseSBkb2N1bWVudGVkLiAgSSBiZWxpZXZlIHRoYXQgd3JpdGluZworICAgICBhICIxIiB0byB0aGUgcmVnaXN0ZXIgY2xlYXJzIHRoZSBzcGVjaWZpYyBpbnRlcnJ1cHQsIGJ1dCB0aGUgZG9jdW1lbnRhdGlvbgorICAgICBpbmRpY2F0ZXMgd3JpdGluZyBhICIwIiBjbGVhcnMgdGhlIGludGVycnVwdC4gIEluIGFueSBjYXNlLCB0aGV5IHNob3VsZG4ndAorICAgICBiZSByZWFkICh0aGF0J3MgdGhlIElOVEZMQUcgcmVnaXN0ZXIpCisgKi8KKworc3RhdGljIHZvaWQgaDM4MDBfbWFza19hY2tfa3Bpb19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1MzIgbWFzayA9IGtwaW9faXJxX21hc2tbaXJxIC0gSDM4MDBfS1BJT19JUlFfU1RBUlRdOworCWtwaW9faW50X3NoYWRvdyAmPSB+bWFzazsKKwlIMzgwMF9BU0lDMl9LUElJTlRTVEFUID0ga3Bpb19pbnRfc2hhZG93OworCUgzODAwX0FTSUMyX0tQSUlOVENMUiAgPSBtYXNrOworfQorCitzdGF0aWMgdm9pZCBoMzgwMF9tYXNrX2twaW9faXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdTMyIG1hc2sgPSBrcGlvX2lycV9tYXNrW2lycSAtIEgzODAwX0tQSU9fSVJRX1NUQVJUXTsKKwlrcGlvX2ludF9zaGFkb3cgJj0gfm1hc2s7CisJSDM4MDBfQVNJQzJfS1BJSU5UU1RBVCA9IGtwaW9faW50X3NoYWRvdzsKK30KKworc3RhdGljIHZvaWQgaDM4MDBfdW5tYXNrX2twaW9faXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdTMyIG1hc2sgPSBrcGlvX2lycV9tYXNrW2lycSAtIEgzODAwX0tQSU9fSVJRX1NUQVJUXTsKKwlrcGlvX2ludF9zaGFkb3cgfD0gbWFzazsKKwlIMzgwMF9BU0lDMl9LUElJTlRTVEFUID0ga3Bpb19pbnRfc2hhZG93OworfQorCitzdGF0aWMgdm9pZCBoMzgwMF9tYXNrX2Fja19ncGlvX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXUzMiBtYXNrID0gZ3Bpb19pcnFfbWFza1tpcnEgLSBIMzgwMF9HUElPX0lSUV9TVEFSVF07CisJSDM4MDBfQVNJQzJfR1BJSU5UU1RBVCAmPSB+bWFzazsKKwlIMzgwMF9BU0lDMl9HUElJTlRDTFIJPSBtYXNrOworfQorCitzdGF0aWMgdm9pZCBoMzgwMF9tYXNrX2dwaW9faXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdTMyIG1hc2sgPSBncGlvX2lycV9tYXNrW2lycSAtIEgzODAwX0dQSU9fSVJRX1NUQVJUXTsKKwlIMzgwMF9BU0lDMl9HUElJTlRTVEFUICY9IH5tYXNrOworCX0KKworc3RhdGljIHZvaWQgaDM4MDBfdW5tYXNrX2dwaW9faXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdTMyIG1hc2sgPSBncGlvX2lycV9tYXNrW2lycSAtIEgzODAwX0dQSU9fSVJRX1NUQVJUXTsKKwlIMzgwMF9BU0lDMl9HUElJTlRTVEFUIHw9IG1hc2s7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBoMzgwMF9pbml0X2lycSh2b2lkKQoreworCWludCBpOworCisJLyogSW5pdGlhbGl6ZSBzdGFuZGFyZCBJUlFzICovCisJc2ExMTAwX2luaXRfaXJxKCk7CisKKwkvKiBEaXNhYmxlIGFsbCBJUlFzIGFuZCBzZXQgdXAgY2xvY2sgKi8KKwlIMzgwMF9BU0lDMl9LUElJTlRTVEFUCSAgID0gIDA7ICAgICAvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJSDM4MDBfQVNJQzJfR1BJSU5UU1RBVAkgICA9ICAwOworCisJSDM4MDBfQVNJQzJfS1BJSU5UQ0xSCSAgID0gIDA7ICAgICAvKiBDbGVhciBhbGwgS1BJTyBpbnRlcnJ1cHRzICovCisJSDM4MDBfQVNJQzJfR1BJSU5UQ0xSCSAgID0gIDA7ICAgICAvKiBDbGVhciBhbGwgR1BJTyBpbnRlcnJ1cHRzICovCisKKy8vCUgzODAwX0FTSUMyX0tQSUlOVENMUgkgICA9ICAweGZmZmY7CSAgLyogQ2xlYXIgYWxsIEtQSU8gaW50ZXJydXB0cyAqLworLy8JSDM4MDBfQVNJQzJfR1BJSU5UQ0xSCSAgID0gIDB4ZmZmZjsJICAvKiBDbGVhciBhbGwgR1BJTyBpbnRlcnJ1cHRzICovCisKKwlIMzgwMF9BU0lDMl9DTE9DS19FbmFibGUgICAgICAgfD0gQVNJQzJfQ0xPQ0tfRVgwOyAgIC8qIDMyIGtIWiBjcnlzdGFsIG9uICovCisJSDM4MDBfQVNJQzJfSU5UUl9DbG9ja1ByZXNjYWxlIHw9IEFTSUMyX0lOVENQU19TRVQ7CisJSDM4MDBfQVNJQzJfSU5UUl9DbG9ja1ByZXNjYWxlCT0gQVNJQzJfSU5UQ1BTX0NQUygweDBlKSB8IEFTSUMyX0lOVENQU19TRVQ7CisJSDM4MDBfQVNJQzJfSU5UUl9UaW1lclNldAk9IDE7CisKKyNpZiAwCisJZm9yIChpID0gMDsgaSA8IEgzODAwX0tQSU9fSVJRX0NPVU5UOyBpKyspIHsKKwkJaW50IGlycSA9IGkgKyBIMzgwMF9LUElPX0lSUV9TVEFSVDsKKwkJaXJxX2Rlc2NbaXJxXS52YWxpZCAgICA9IDE7CisJCWlycV9kZXNjW2lycV0ucHJvYmVfb2sgPSAxOworCQlzZXRfaXJxX2NoaXAoaXJxLCAmaDM4MDBfa3Bpb19pcnFjaGlwKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgSDM4MDBfR1BJT19JUlFfQ09VTlQ7IGkrKykgeworCQlpbnQgaXJxID0gaSArIEgzODAwX0dQSU9fSVJRX1NUQVJUOworCQlpcnFfZGVzY1tpcnFdLnZhbGlkICAgID0gMTsKKwkJaXJxX2Rlc2NbaXJxXS5wcm9iZV9vayA9IDE7CisJCXNldF9pcnFfY2hpcChpcnEsICZoMzgwMF9ncGlvX2lycWNoaXApOworCX0KKyNlbmRpZgorCXNldF9pcnFfdHlwZShJUlFfR1BJT19IMzgwMF9BU0lDLCBJUlFUX1JJU0lORyk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0dQSU9fSDM4MDBfQVNJQywgJmgzODAwX0lSUV9kZW11eCk7Cit9CisKKworI2RlZmluZSBBU0lDMV9PVVRQVVRTCSAweDdmZmYgICAvKiBGaXJzdCAxNSBiaXRzIGFyZSB1c2VkICovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBoMzgwMF9tYXBfaW8odm9pZCkKK3sKKwloM3h4eF9tYXBfaW8oKTsKKworCS8qIEFkZCB3YWtldXAgb24gQUMgcGx1Zy91bnBsdWcgKi8KKwlQV0VSICB8PSBQV0VSX0dQSU8xMjsKKworCS8qIEluaXRpYWxpemUgaDM4MDAtc3BlY2lmaWMgdmFsdWVzIGhlcmUgKi8KKwlHUENSID0gMHgwZmZmZmZmZjsJIC8qIEFsbCBvdXRwdXRzIGFyZSBzZXQgbG93IGJ5IGRlZmF1bHQgKi8KKwlHQUZSID0JR1BJT19IMzgwMF9DTEtfT1VUIHwKKwkJR1BJT19MREQxNSB8IEdQSU9fTEREMTQgfCBHUElPX0xERDEzIHwgR1BJT19MREQxMiB8CisJCUdQSU9fTEREMTEgfCBHUElPX0xERDEwIHwgR1BJT19MREQ5ICB8IEdQSU9fTEREODsKKwlHUERSID0JR1BJT19IMzgwMF9DTEtfT1VUIHwKKwkJR1BJT19IMzYwMF9DT01fUlRTICB8IEdQSU9fSDM2MDBfTDNfQ0xPQ0sgfAorCQlHUElPX0gzNjAwX0wzX01PREUgIHwgR1BJT19IMzYwMF9MM19EQVRBICB8CisJCUdQSU9fTEREMTUgfCBHUElPX0xERDE0IHwgR1BJT19MREQxMyB8IEdQSU9fTEREMTIgfAorCQlHUElPX0xERDExIHwgR1BJT19MREQxMCB8IEdQSU9fTEREOSAgfCBHUElPX0xERDg7CisJVFVDUiA9CVRVQ1JfM182ODY0TUh6OyAgIC8qIFNlZW1zIHRvIGJlIHVzZWQgb25seSBmb3IgdGhlIEJsdWV0b290aCBVQVJUICovCisKKwkvKiBGaXggdGhlIG1lbW9yeSBidXMgKi8KKwlNU0MyID0gKE1TQzIgJiAweDAwMDBmZmZmKSB8IDB4RTQ1MTAwMDA7CisKKwkvKiBTZXQgdXAgQVNJQyAjMSAqLworCUgzODAwX0FTSUMxX0dQSU9fRElSCQk9IEFTSUMxX09VVFBVVFM7CSAgICAvKiBBbGwgb3V0cHV0cyAqLworCUgzODAwX0FTSUMxX0dQSU9fTUFTSwkJPSBBU0lDMV9PVVRQVVRTOwkgICAgLyogTm8gaW50ZXJydXB0cyAqLworCUgzODAwX0FTSUMxX0dQSU9fU0xFRVBfTUFTSwk9IEFTSUMxX09VVFBVVFM7CisJSDM4MDBfQVNJQzFfR1BJT19TTEVFUF9ESVIJPSBBU0lDMV9PVVRQVVRTOworCUgzODAwX0FTSUMxX0dQSU9fU0xFRVBfT1VUCT0gR1BJTzFfRUFSX09OX047CisJSDM4MDBfQVNJQzFfR1BJT19CQVRUX0ZBVUxUX0RJUiA9IEFTSUMxX09VVFBVVFM7CisJSDM4MDBfQVNJQzFfR1BJT19CQVRUX0ZBVUxUX09VVCA9IEdQSU8xX0VBUl9PTl9OOworCisJSDM4MDBfQVNJQzFfR1BJT19PVVQgPSBHUElPMV9JUl9PTl9OCisJCQkJICAgICAgfCBHUElPMV9SUzIzMl9PTgorCQkJCSAgICAgIHwgR1BJTzFfRUFSX09OX047CisKKwkvKiBTZXQgdXAgQVNJQyAjMiAqLworCUgzODAwX0FTSUMyX0dQSU9QSU9ECT0gR1BJTzJfSU5fWTFfTiB8IEdQSU8yX0lOX1gxX047CisJSDM4MDBfQVNJQzJfR1BPQkZTVEFUCT0gR1BJTzJfSU5fWTFfTiB8IEdQSU8yX0lOX1gxX047CisKKwlIMzgwMF9BU0lDMl9HUElPRElSCT0gR1BJTzJfUEVOX0lSUQorCQkJCSAgICAgIHwgR1BJTzJfU0RfREVURUNUCisJCQkJICAgICAgfCBHUElPMl9FQVJfSU5fTgorCQkJCSAgICAgIHwgR1BJTzJfVVNCX0RFVEVDVF9OCisJCQkJICAgICAgfCBHUElPMl9TRF9DT05fU0xUOworCisJLyogVE9ETyA6IFNldCBzbGVlcCBzdGF0ZXMgJiBiYXR0ZXJ5IGZhdWx0IHN0YXRlcyAqLworCisJLyogQ2xlYXIgVlBQIEVuYWJsZSAqLworCUgzODAwX0FTSUMyX0ZsYXNoV1BfVlBQX09OID0gMDsKKwlpcGFxX21vZGVsX29wcyA9IGgzODAwX21vZGVsX29wczsKK30KKworTUFDSElORV9TVEFSVChIMzgwMCwgIkNvbXBhcSBpUEFRIEgzODAwIikKKwlCT09UX01FTSgweGMwMDAwMDAwLCAweDgwMDAwMDAwLCAweGY4MDAwMDAwKQorCUJPT1RfUEFSQU1TKDB4YzAwMDAxMDApCisJTUFQSU8oaDM4MDBfbWFwX2lvKQorCUlOSVRJUlEoaDM4MDBfaW5pdF9pcnEpCisJLnRpbWVyCQk9ICZzYTExMDBfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IGgzeHh4X21hY2hfaW5pdCwKK01BQ0hJTkVfRU5ECisKKyNlbmRpZiAvKiBDT05GSUdfU0ExMTAwX0gzODAwICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9oYWNra2l0LmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9oYWNra2l0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcwODQxNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2hhY2traXQuYwpAQCAtMCwwICsxLDIwMCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtc2ExMTAwL2hhY2traXQuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBTdGVmYW4gRWxldHpob2ZlciA8c3RlZmFuLmVsZXR6aG9mZXJAZWxldHp0cmljay5kZT4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYWxsIEhhY2tLaXQgdHdlYWtzLiBCYXNlZCBvbiBvcmlnaW5hbCB3b3JrIGZyb20KKyAqIE5pY29sYXMgUGl0cmUncyBhc3NhYmV0IGZpeGVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvc2VyaWFsX3NhMTEwMC5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIHByb3RvdHlwZXMKKyAqLworCisvKiBpbml0IGZ1bmNzICovCitzdGF0aWMgdm9pZCBfX2luaXQgaGFja2tpdF9tYXBfaW8odm9pZCk7CisKK3N0YXRpYyB1X2ludCBoYWNra2l0X2dldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGhhY2traXRfc2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVfaW50IG1jdHJsKTsKK3N0YXRpYyB2b2lkIGhhY2traXRfdWFydF9wbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1X2ludCBzdGF0ZSwgdV9pbnQgb2xkc3RhdGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIGdsb2JhbCBkYXRhCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBzdGF0aWMgZGF0YQorICovCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaGFja2tpdF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKyAvKiB2aXJ0dWFsICAgICBwaHlzaWNhbCAgICBsZW5ndGggICAgICB0eXBlICovCisgIHsgMHhlODAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMTAwMDAwMCwgTVRfREVWSUNFIH0gLyogRmxhc2ggYmFuayAwICovCit9OworCitzdGF0aWMgc3RydWN0IHNhMTEwMF9wb3J0X2ZucyBoYWNra2l0X3BvcnRfZm5zIF9faW5pdGRhdGEgPSB7CisJLnNldF9tY3RybAk9IGhhY2traXRfc2V0X21jdHJsLAorCS5nZXRfbWN0cmwJPSBoYWNra2l0X2dldF9tY3RybCwKKwkucG0JCT0gaGFja2tpdF91YXJ0X3BtLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBTdGF0aWMgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQgX19pbml0IGhhY2traXRfbWFwX2lvKHZvaWQpCit7CisJc2ExMTAwX21hcF9pbygpOworCWlvdGFibGVfaW5pdChoYWNra2l0X2lvX2Rlc2MsIEFSUkFZX1NJWkUoaGFja2tpdF9pb19kZXNjKSk7CisKKwlzYTExMDBfcmVnaXN0ZXJfdWFydF9mbnMoJmhhY2traXRfcG9ydF9mbnMpOworCXNhMTEwMF9yZWdpc3Rlcl91YXJ0KDAsIDEpOwkvKiBjb20gcG9ydCAqLworCXNhMTEwMF9yZWdpc3Rlcl91YXJ0KDEsIDIpOworCXNhMTEwMF9yZWdpc3Rlcl91YXJ0KDIsIDMpOwkvKiByYWRpbyBtb2R1bGUgKi8KKworCVNlcjFTRENSMCB8PSBTRENSMF9TVVM7Cit9CisKKy8qKgorICoJaGFja2tpdF91YXJ0X3BtIC0gcG93ZXJtZ210IGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBzeXN0ZW0gMyBVQVJUCisgKglAcG9ydDogdWFydCBwb3J0IHN0cnVjdHVyZQorICoJQHN0YXRlOiBwbSBzdGF0ZQorICoJQG9sZHN0YXRlOiBvbGQgcG0gc3RhdGUKKyAqCisgKi8KK3N0YXRpYyB2b2lkIGhhY2traXRfdWFydF9wbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1X2ludCBzdGF0ZSwgdV9pbnQgb2xkc3RhdGUpCit7CisJLyogVE9ETzogc3dpdGNoIG9uL29mZiB1YXJ0IGluIHBvd2Vyc2F2ZSBtb2RlICovCit9CisKKy8qCisgKiBOb3RlISB0aGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBJUlEgY29udGV4dC4KKyAqIEZJWE1FOiBObyBtb2RlbSBjdHJsIGxpbmVzIHlldC4KKyAqLworc3RhdGljIHZvaWQgaGFja2tpdF9zZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdV9pbnQgbWN0cmwpCit7CisjaWYgMAorCWlmIChwb3J0LT5tYXBiYXNlID09IF9TZXIxVVRDUjApIHsKKwkJdV9pbnQgc2V0ID0gMCwgY2xlYXIgPSAwOworCisJCWlmIChtY3RybCAmIFRJT0NNX1JUUykKKwkJCXNldCB8PSBQVF9DVFJMMl9SUzFfUlRTOworCQllbHNlCisJCQljbGVhciB8PSBQVF9DVFJMMl9SUzFfUlRTOworCisJCWlmIChtY3RybCAmIFRJT0NNX0RUUikKKwkJCXNldCB8PSBQVF9DVFJMMl9SUzFfRFRSOworCQllbHNlCisJCQljbGVhciB8PSBQVF9DVFJMMl9SUzFfRFRSOworCisJCVBUQ1RSTDJfY2xlYXIoY2xlYXIpOworCQlQVENUUkwyX3NldChzZXQpOworCX0KKyNlbmRpZgorfQorCitzdGF0aWMgdV9pbnQgaGFja2tpdF9nZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1X2ludCByZXQgPSAwOworI2lmIDAKKwl1X2ludCBpcnFzciA9IFBUX0lSUVNSOworCisJLyogbmVlZCAyIHJlYWRzIHRvIHJlYWQgY3VycmVudCB2YWx1ZSAqLworCWlycXNyID0gUFRfSVJRU1I7CisKKwkvKiBUT0RPOiBjaGVjayBJUlEgc291cmNlIHJlZ2lzdGVyIGZvciBtb2RlbS9jb20KKwkgc3RhdHVzIGxpbmVzIGFuZCBzZXQgdGhlbSBjb3JyZWN0bHkuICovCisjZW5kaWYKKworCXJldCA9IFRJT0NNX0NEIHwgVElPQ01fQ1RTIHwgVElPQ01fRFNSOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGhhY2traXRfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gIkJMT0IiLAorCQkuc2l6ZQkJPSAweDAwMDQwMDAwLAorCQkub2Zmc2V0CQk9IDB4MDAwMDAwMDAsCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwgIC8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sIHsKKwkJLm5hbWUJCT0gImNvbmZpZyIsCisJCS5zaXplCQk9IDB4MDAwNDAwMDAsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCX0sIHsKKwkJLm5hbWUJCT0gImtlcm5lbCIsCisJCS5zaXplCQk9IDB4MDAxMDAwMDAsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCX0sIHsKKwkJLm5hbWUJCT0gImluaXRyZCIsCisJCS5zaXplCQk9IDB4MDAxODAwMDAsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCX0sIHsKKwkJLm5hbWUJCT0gInJvb3RmcyIsCisJCS5zaXplCQk9IDB4NzAwMDAwLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwl9LCB7CisJCS5uYW1lCQk9ICJkYXRhIiwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGhhY2traXRfZmxhc2hfZGF0YSA9IHsKKwkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKKwkucGFydHMJCT0gaGFja2tpdF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoaGFja2tpdF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGFja2tpdF9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gU0ExMTAwX0NTMF9QSFlTLAorCS5lbmQJCT0gU0ExMTAwX0NTMF9QSFlTICsgU1pfMzJNLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBoYWNra2l0X2luaXQodm9pZCkKK3sKKwlzYTExeDBfc2V0X2ZsYXNoX2RhdGEoJmhhY2traXRfZmxhc2hfZGF0YSwgJmhhY2traXRfZmxhc2hfcmVzb3VyY2UsIDEpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEV4cG9ydGVkIEZ1bmN0aW9ucworICovCisKK01BQ0hJTkVfU1RBUlQoSEFDS0tJVCwgIkhhY2tLaXQgQ3B1IEJvYXJkIikKKwlCT09UX01FTSgweGMwMDAwMDAwLCAweDgwMDAwMDAwLCAweGY4MDAwMDAwKQorCUJPT1RfUEFSQU1TKDB4YzAwMDAxMDApCisJTUFQSU8oaGFja2tpdF9tYXBfaW8pCisJSU5JVElSUShzYTExMDBfaW5pdF9pcnEpCisJLnRpbWVyCQk9ICZzYTExMDBfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IGhhY2traXRfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YTkyOWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pcnEuYwpAQCAtMCwwICsxLDMzMiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtc2ExMTAwL2lycS5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgTmljb2xhcyBQaXRyZQorICoKKyAqIEdlbmVyaWMgSVJRIGhhbmRsaW5nIGZvciB0aGUgU0ExMXgwLCBHUElPIDExLTI3IElSUSBkZW11bHRpcGxleGluZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisKKy8qCisgKiBTQTExMDAgR1BJTyBlZGdlIGRldGVjdGlvbiBmb3IgSVJRczoKKyAqIElSUXMgYXJlIGdlbmVyYXRlZCBvbiBGYWxsaW5nLUVkZ2UsIFJpc2luZy1FZGdlLCBvciBib3RoLgorICogVXNlIHRoaXMgaW5zdGVhZCBvZiBkaXJlY3RseSBzZXR0aW5nIEdSRVIvR0ZFUi4KKyAqLworc3RhdGljIGludCBHUElPX0lSUV9yaXNpbmdfZWRnZTsKK3N0YXRpYyBpbnQgR1BJT19JUlFfZmFsbGluZ19lZGdlOworc3RhdGljIGludCBHUElPX0lSUV9tYXNrID0gKDEgPDwgMTEpIC0gMTsKKworLyoKKyAqIFRvIGdldCB0aGUgR1BJTyBudW1iZXIgZnJvbSBhbiBJUlEgbnVtYmVyCisgKi8KKyNkZWZpbmUgR1BJT18xMV8yN19JUlEoaSkJKChpKSAtIDIxKQorI2RlZmluZSBHUElPMTFfMjdfTUFTSyhpcnEpCSgxIDw8IEdQSU9fMTFfMjdfSVJRKGlycSkpCisKK3N0YXRpYyBpbnQgc2ExMTAwX2dwaW9fdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzazsKKworCWlmIChpcnEgPD0gMTApCisJCW1hc2sgPSAxIDw8IGlycTsKKwllbHNlCisJCW1hc2sgPSBHUElPMTFfMjdfTUFTSyhpcnEpOworCisJaWYgKHR5cGUgPT0gSVJRVF9QUk9CRSkgeworCQlpZiAoKEdQSU9fSVJRX3Jpc2luZ19lZGdlIHwgR1BJT19JUlFfZmFsbGluZ19lZGdlKSAmIG1hc2spCisJCQlyZXR1cm4gMDsKKwkJdHlwZSA9IF9fSVJRVF9SSVNFREdFIHwgX19JUlFUX0ZBTEVER0U7CisJfQorCisJaWYgKHR5cGUgJiBfX0lSUVRfUklTRURHRSkgeworCQlHUElPX0lSUV9yaXNpbmdfZWRnZSB8PSBtYXNrOworCX0gZWxzZQorCQlHUElPX0lSUV9yaXNpbmdfZWRnZSAmPSB+bWFzazsKKwlpZiAodHlwZSAmIF9fSVJRVF9GQUxFREdFKSB7CisJCUdQSU9fSVJRX2ZhbGxpbmdfZWRnZSB8PSBtYXNrOworCX0gZWxzZQorCQlHUElPX0lSUV9mYWxsaW5nX2VkZ2UgJj0gfm1hc2s7CisKKwlHUkVSID0gR1BJT19JUlFfcmlzaW5nX2VkZ2UgJiBHUElPX0lSUV9tYXNrOworCUdGRVIgPSBHUElPX0lSUV9mYWxsaW5nX2VkZ2UgJiBHUElPX0lSUV9tYXNrOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBHUElPIElSUXMgbXVzdCBiZSBhY2tub3dsZWRnZWQuICBUaGlzIGlzIGZvciBJUlFzIGZyb20gMCB0byAxMC4KKyAqLworc3RhdGljIHZvaWQgc2ExMTAwX2xvd19ncGlvX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCUdFRFIgPSAoMSA8PCBpcnEpOworfQorCitzdGF0aWMgdm9pZCBzYTExMDBfbG93X2dwaW9fbWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCUlDTVIgJj0gfigxIDw8IGlycSk7Cit9CisKK3N0YXRpYyB2b2lkIHNhMTEwMF9sb3dfZ3Bpb191bm1hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlJQ01SIHw9IDEgPDwgaXJxOworfQorCitzdGF0aWMgaW50IHNhMTEwMF9sb3dfZ3Bpb193YWtlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBvbikKK3sKKwlpZiAob24pCisJCVBXRVIgfD0gMSA8PCBpcnE7CisJZWxzZQorCQlQV0VSICY9IH4oMSA8PCBpcnEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgc2ExMTAwX2xvd19ncGlvX2NoaXAgPSB7CisJLmFjawkJPSBzYTExMDBfbG93X2dwaW9fYWNrLAorCS5tYXNrCQk9IHNhMTEwMF9sb3dfZ3Bpb19tYXNrLAorCS51bm1hc2sJCT0gc2ExMTAwX2xvd19ncGlvX3VubWFzaywKKwkudHlwZQkJPSBzYTExMDBfZ3Bpb190eXBlLAorCS53YWtlCQk9IHNhMTEwMF9sb3dfZ3Bpb193YWtlLAorfTsKKworLyoKKyAqIElSUTExIChHUElPMTEgdGhyb3VnaCAyNykgaGFuZGxlci4gIFdlIGVudGVyIGhlcmUgd2l0aCB0aGUKKyAqIGlycV9jb250cm9sbGVyX2xvY2sgaGVsZCwgYW5kIElSUXMgZGlzYWJsZWQuICBEZWNvZGUgdGhlIElSUQorICogYW5kIGNhbGwgdGhlIGhhbmRsZXIuCisgKi8KK3N0YXRpYyB2b2lkCitzYTExMDBfaGlnaF9ncGlvX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWRlc2MgKmRlc2MsCisJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IG1hc2s7CisKKwltYXNrID0gR0VEUiAmIDB4ZmZmZmY4MDA7CisJZG8geworCQkvKgorCQkgKiBjbGVhciBkb3duIGFsbCBjdXJyZW50bHkgYWN0aXZlIElSUSBzb3VyY2VzLgorCQkgKiBXZSB3aWxsIGJlIHByb2Nlc3NpbmcgdGhlbSBhbGwuCisJCSAqLworCQlHRURSID0gbWFzazsKKworCQlpcnEgPSBJUlFfR1BJTzExOworCQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJCW1hc2sgPj49IDExOworCQlkbyB7CisJCQlpZiAobWFzayAmIDEpCisJCQkJZGVzYy0+aGFuZGxlKGlycSwgZGVzYywgcmVncyk7CisJCQltYXNrID4+PSAxOworCQkJaXJxKys7CisJCQlkZXNjKys7CisJCX0gd2hpbGUgKG1hc2spOworCisJCW1hc2sgPSBHRURSICYgMHhmZmZmZjgwMDsKKwl9IHdoaWxlIChtYXNrKTsKK30KKworLyoKKyAqIExpa2UgR1BJTzAgdG8gMTAsIEdQSU8xMS0yNyBJUlFzIG5lZWQgdG8gYmUgaGFuZGxlZCBzcGVjaWFsbHkuCisgKiBJbiBhZGRpdGlvbiwgdGhlIElSUXMgYXJlIGFsbCBjb2xsZWN0ZWQgdXAgaW50byBvbmUgYml0IGluIHRoZQorICogaW50ZXJydXB0IGNvbnRyb2xsZXIgcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBzYTExMDBfaGlnaF9ncGlvX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCBtYXNrID0gR1BJTzExXzI3X01BU0soaXJxKTsKKworCUdFRFIgPSBtYXNrOworfQorCitzdGF0aWMgdm9pZCBzYTExMDBfaGlnaF9ncGlvX21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzayA9IEdQSU8xMV8yN19NQVNLKGlycSk7CisKKwlHUElPX0lSUV9tYXNrICY9IH5tYXNrOworCisJR1JFUiAmPSB+bWFzazsKKwlHRkVSICY9IH5tYXNrOworfQorCitzdGF0aWMgdm9pZCBzYTExMDBfaGlnaF9ncGlvX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCBtYXNrID0gR1BJTzExXzI3X01BU0soaXJxKTsKKworCUdQSU9fSVJRX21hc2sgfD0gbWFzazsKKworCUdSRVIgPSBHUElPX0lSUV9yaXNpbmdfZWRnZSAmIEdQSU9fSVJRX21hc2s7CisJR0ZFUiA9IEdQSU9fSVJRX2ZhbGxpbmdfZWRnZSAmIEdQSU9fSVJRX21hc2s7Cit9CisKK3N0YXRpYyBpbnQgc2ExMTAwX2hpZ2hfZ3Bpb193YWtlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBvbikKK3sKKwlpZiAob24pCisJCVBXRVIgfD0gR1BJTzExXzI3X01BU0soaXJxKTsKKwllbHNlCisJCVBXRVIgJj0gfkdQSU8xMV8yN19NQVNLKGlycSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBzYTExMDBfaGlnaF9ncGlvX2NoaXAgPSB7CisJLmFjawkJPSBzYTExMDBfaGlnaF9ncGlvX2FjaywKKwkubWFzawkJPSBzYTExMDBfaGlnaF9ncGlvX21hc2ssCisJLnVubWFzawkJPSBzYTExMDBfaGlnaF9ncGlvX3VubWFzaywKKwkudHlwZQkJPSBzYTExMDBfZ3Bpb190eXBlLAorCS53YWtlCQk9IHNhMTEwMF9oaWdoX2dwaW9fd2FrZSwKK307CisKKy8qCisgKiBXZSBkb24ndCBuZWVkIHRvIEFDSyBJUlFzIG9uIHRoZSBTQTExMDAgdW5sZXNzIHRoZXkncmUgR1BJT3MKKyAqIHRoaXMgaXMgZm9yIGludGVybmFsIElSUXMgaS5lLiBmcm9tIDExIHRvIDMxLgorICovCitzdGF0aWMgdm9pZCBzYTExMDBfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlJQ01SICY9IH4oMSA8PCBpcnEpOworfQorCitzdGF0aWMgdm9pZCBzYTExMDBfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCUlDTVIgfD0gKDEgPDwgaXJxKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIHNhMTEwMF9ub3JtYWxfY2hpcCA9IHsKKwkuYWNrCQk9IHNhMTEwMF9tYXNrX2lycSwKKwkubWFzawkJPSBzYTExMDBfbWFza19pcnEsCisJLnVubWFzawkJPSBzYTExMDBfdW5tYXNrX2lycSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXJxX3Jlc291cmNlID0geworCS5uYW1lCT0gImlycXMiLAorCS5zdGFydAk9IDB4OTAwNTAwMDAsCisJLmVuZAk9IDB4OTAwNWZmZmYsCit9OworCitzdGF0aWMgc3RydWN0IHNhMTEwMGlycV9zdGF0ZSB7CisJdW5zaWduZWQgaW50CXNhdmVkOworCXVuc2lnbmVkIGludAlpY21yOworCXVuc2lnbmVkIGludAlpY2xyOworCXVuc2lnbmVkIGludAlpY2NyOworfSBzYTExMDBpcnFfc3RhdGU7CisKK3N0YXRpYyBpbnQgc2ExMTAwaXJxX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzYTExMDBpcnFfc3RhdGUgKnN0ID0gJnNhMTEwMGlycV9zdGF0ZTsKKworCXN0LT5zYXZlZCA9IDE7CisJc3QtPmljbXIgPSBJQ01SOworCXN0LT5pY2xyID0gSUNMUjsKKwlzdC0+aWNjciA9IElDQ1I7CisKKwkvKgorCSAqIERpc2FibGUgYWxsIEdQSU8tYmFzZWQgaW50ZXJydXB0cy4KKwkgKi8KKwlJQ01SICY9IH4oSUNfR1BJTzExXzI3fElDX0dQSU8xMHxJQ19HUElPOXxJQ19HUElPOHxJQ19HUElPN3wKKwkJICBJQ19HUElPNnxJQ19HUElPNXxJQ19HUElPNHxJQ19HUElPM3xJQ19HUElPMnwKKwkJICBJQ19HUElPMXxJQ19HUElPMCk7CisKKwkvKgorCSAqIFNldCB0aGUgYXBwcm9wcmlhdGUgZWRnZXMgZm9yIHdha2V1cC4KKwkgKi8KKwlHUkVSID0gUFdFUiAmIEdQSU9fSVJRX3Jpc2luZ19lZGdlOworCUdGRVIgPSBQV0VSICYgR1BJT19JUlFfZmFsbGluZ19lZGdlOworCQorCS8qCisJICogQ2xlYXIgYW55IHBlbmRpbmcgR1BJTyBpbnRlcnJ1cHRzLgorCSAqLworCUdFRFIgPSBHRURSOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2ExMTAwaXJxX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzYTExMDBpcnFfc3RhdGUgKnN0ID0gJnNhMTEwMGlycV9zdGF0ZTsKKworCWlmIChzdC0+c2F2ZWQpIHsKKwkJSUNDUiA9IHN0LT5pY2NyOworCQlJQ0xSID0gc3QtPmljbHI7CisKKwkJR1JFUiA9IEdQSU9fSVJRX3Jpc2luZ19lZGdlICYgR1BJT19JUlFfbWFzazsKKwkJR0ZFUiA9IEdQSU9fSVJRX2ZhbGxpbmdfZWRnZSAmIEdQSU9fSVJRX21hc2s7CisKKwkJSUNNUiA9IHN0LT5pY21yOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3Mgc2ExMTAwaXJxX3N5c2NsYXNzID0geworCXNldF9rc2V0X25hbWUoInNhMTF4MC1pcnEiKSwKKwkuc3VzcGVuZAk9IHNhMTEwMGlycV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gc2ExMTAwaXJxX3Jlc3VtZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzYTExMDBpcnFfZGV2aWNlID0geworCS5pZAkJPSAwLAorCS5jbHMJCT0gJnNhMTEwMGlycV9zeXNjbGFzcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNhMTEwMGlycV9pbml0X2RldmljZWZzKHZvaWQpCit7CisJc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZzYTExMDBpcnFfc3lzY2xhc3MpOworCXJldHVybiBzeXNkZXZfcmVnaXN0ZXIoJnNhMTEwMGlycV9kZXZpY2UpOworfQorCitkZXZpY2VfaW5pdGNhbGwoc2ExMTAwaXJxX2luaXRfZGV2aWNlZnMpOworCit2b2lkIF9faW5pdCBzYTExMDBfaW5pdF9pcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZpcnFfcmVzb3VyY2UpOworCisJLyogZGlzYWJsZSBhbGwgSVJRcyAqLworCUlDTVIgPSAwOworCisJLyogYWxsIElSUXMgYXJlIElSUSwgbm90IEZJUSAqLworCUlDTFIgPSAwOworCisJLyogY2xlYXIgYWxsIEdQSU8gZWRnZSBkZXRlY3RzICovCisJR0ZFUiA9IDA7CisJR1JFUiA9IDA7CisJR0VEUiA9IC0xOworCisJLyoKKwkgKiBXaGF0ZXZlciB0aGUgZG9jIHNheXMsIHRoaXMgaGFzIHRvIGJlIHNldCBmb3IgdGhlIHdhaXQtb24taXJxCisJICogaW5zdHJ1Y3Rpb24gdG8gd29yay4uLiBvbiBhIFNBMTEwMCByZXYgOSBhdCBsZWFzdC4KKwkgKi8KKwlJQ0NSID0gMTsKKworCWZvciAoaXJxID0gMDsgaXJxIDw9IDEwOyBpcnErKykgeworCQlzZXRfaXJxX2NoaXAoaXJxLCAmc2ExMTAwX2xvd19ncGlvX2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBkb19lZGdlX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJfQorCisJZm9yIChpcnEgPSAxMjsgaXJxIDw9IDMxOyBpcnErKykgeworCQlzZXRfaXJxX2NoaXAoaXJxLCAmc2ExMTAwX25vcm1hbF9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgZG9fbGV2ZWxfSVJRKTsKKwkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQpOworCX0KKworCWZvciAoaXJxID0gMzI7IGlycSA8PSA0ODsgaXJxKyspIHsKKwkJc2V0X2lycV9jaGlwKGlycSwgJnNhMTEwMF9oaWdoX2dwaW9fY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2VkZ2VfSVJRKTsKKwkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKKwl9CisKKwkvKgorCSAqIEluc3RhbGwgaGFuZGxlciBmb3IgR1BJTyAxMS0yNyBlZGdlIGRldGVjdCBpbnRlcnJ1cHRzCisJICovCisJc2V0X2lycV9jaGlwKElSUV9HUElPMTFfMjcsICZzYTExMDBfbm9ybWFsX2NoaXApOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9HUElPMTFfMjcsIHNhMTEwMF9oaWdoX2dwaW9faGFuZGxlcik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9qb3JuYWRhNzIwLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9qb3JuYWRhNzIwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJlNzgyOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2pvcm5hZGE3MjAuYwpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtc2ExMTAwL2pvcm5hZGE3MjAuYworICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zYTExMTEuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9zZXJpYWxfc2ExMTAwLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKworI2RlZmluZSBKT1JUVUNSX1ZBTAkweDIwMDAwNDAwCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2ExMTExX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CQk9IDB4NDAwMDAwMDAsCisJCS5lbmQJCT0gMHg0MDAwMWZmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJCT0gSVJRX0dQSU8xLAorCQkuZW5kCQk9IElSUV9HUElPMSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgdTY0IHNhMTExMV9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzYTExMTFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzYTExMTEiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkuZG1hX21hc2sgPSAmc2ExMTExX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2ExMTExX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc2ExMTExX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2ExMTExX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGpvcm5hZGE3MjBfaW5pdCh2b2lkKQoreworCWludCByZXQgPSAtRU5PREVWOworCisJaWYgKG1hY2hpbmVfaXNfam9ybmFkYTcyMCgpKSB7CisJCUdQRFIgfD0gR1BJT19HUElPMjA7CisJCVRVQ1IgPSBKT1JUVUNSX1ZBTDsJLyogc2V0IHRoZSBvc2NpbGxhdG9yIG91dCB0byB0aGUgU0EtMTEwMSAqLworCisJCUdQU1IgPSBHUElPX0dQSU8yMDsKKwkJdWRlbGF5KDEpOworCQlHUENSID0gR1BJT19HUElPMjA7CisJCXVkZWxheSgxKTsKKwkJR1BTUiA9IEdQSU9fR1BJTzIwOworCQl1ZGVsYXkoMjApOworCisJCS8qIExERDQgaXMgc3BlYWtlciwgTEREMyBpcyBtaWNyb3Bob25lICovCisJCVBQU1IgJj0gfihQUENfTEREMyB8IFBQQ19MREQ0KTsKKwkJUFBEUiB8PSBQUENfTEREMyB8IFBQQ19MREQ0OworCisJCXJldCA9IHBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworCX0KKwlyZXR1cm4gcmV0OworfQorCithcmNoX2luaXRjYWxsKGpvcm5hZGE3MjBfaW5pdCk7CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgam9ybmFkYTcyMF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKyAvKiB2aXJ0dWFsICAgICBwaHlzaWNhbCAgICBsZW5ndGggICAgICB0eXBlICovCisgIHsgMHhmMDAwMDAwMCwgMHg0ODAwMDAwMCwgMHgwMDEwMDAwMCwgTVRfREVWSUNFIH0sIC8qIEVwc29uIHJlZ2lzdGVycyAqLworICB7IDB4ZjEwMDAwMDAsIDB4NDgyMDAwMDAsIDB4MDAxMDAwMDAsIE1UX0RFVklDRSB9LCAvKiBFcHNvbiBmcmFtZSBidWZmZXIgKi8KKyAgeyAweGY0MDAwMDAwLCAweDQwMDAwMDAwLCAweDAwMTAwMDAwLCBNVF9ERVZJQ0UgfSAgLyogU0EtMTExMSAqLworfTsKKworc3RhdGljIHZvaWQgX19pbml0IGpvcm5hZGE3MjBfbWFwX2lvKHZvaWQpCit7CisJc2ExMTAwX21hcF9pbygpOworCWlvdGFibGVfaW5pdChqb3JuYWRhNzIwX2lvX2Rlc2MsIEFSUkFZX1NJWkUoam9ybmFkYTcyMF9pb19kZXNjKSk7CisJCisJc2ExMTAwX3JlZ2lzdGVyX3VhcnQoMCwgMyk7CisJc2ExMTAwX3JlZ2lzdGVyX3VhcnQoMSwgMSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoSk9STkFEQTcyMCwgIkhQIEpvcm5hZGEgNzIwIikKKwlCT09UX01FTSgweGMwMDAwMDAwLCAweDgwMDAwMDAwLCAweGY4MDAwMDAwKQorCUJPT1RfUEFSQU1TKDB4YzAwMDAxMDApCisJTUFQSU8oam9ybmFkYTcyMF9tYXBfaW8pCisJSU5JVElSUShzYTExMDBfaW5pdF9pcnEpCisJLnRpbWVyCQk9ICZzYTExMDBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvbGFydC5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvbGFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYzA4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9sYXJ0LmMKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtc2ExMTAwL2xhcnQuYworICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3NlcmlhbF9zYTExMDAuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKworCisjd2FybmluZyAiaW5jbHVkZS9hc20vYXJjaC1zYTExMDAvaWRlLmggbmVlZHMgZml4aW5nIGZvciBsYXJ0IgorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGxhcnRfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisgLyogdmlydHVhbCAgICAgcGh5c2ljYWwgICAgbGVuZ3RoICAgICAgdHlwZSAqLworICB7IDB4ZTgwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIE1UX0RFVklDRSB9LCAvKiBtYWluIGZsYXNoIG1lbW9yeSAqLworICB7IDB4ZWMwMDAwMDAsIDB4MDgwMDAwMDAsIDB4MDA0MDAwMDAsIE1UX0RFVklDRSB9ICAvKiBtYWluIGZsYXNoLCBhbHRlcm5hdGl2ZSBsb2NhdGlvbiAqLworfTsKKworc3RhdGljIHZvaWQgX19pbml0IGxhcnRfbWFwX2lvKHZvaWQpCit7CisJc2ExMTAwX21hcF9pbygpOworCWlvdGFibGVfaW5pdChsYXJ0X2lvX2Rlc2MsIEFSUkFZX1NJWkUobGFydF9pb19kZXNjKSk7CisKKwlzYTExMDBfcmVnaXN0ZXJfdWFydCgwLCAzKTsKKwlzYTExMDBfcmVnaXN0ZXJfdWFydCgxLCAxKTsKKwlzYTExMDBfcmVnaXN0ZXJfdWFydCgyLCAyKTsKKworCUdBRlIgfD0gKEdQSU9fVUFSVF9UWEQgfCBHUElPX1VBUlRfUlhEKTsKKwlHUERSIHw9IEdQSU9fVUFSVF9UWEQ7CisJR1BEUiAmPSB+R1BJT19VQVJUX1JYRDsKKwlQUEFSIHw9IFBQQVJfVVBSOworfQorCitNQUNISU5FX1NUQVJUKExBUlQsICJMQVJUIikKKwlCT09UX01FTSgweGMwMDAwMDAwLCAweDgwMDAwMDAwLCAweGY4MDAwMDAwKQorCUJPT1RfUEFSQU1TKDB4YzAwMDAxMDApCisJTUFQSU8obGFydF9tYXBfaW8pCisJSU5JVElSUShzYTExMDBfaW5pdF9pcnEpCisJLnRpbWVyCQk9ICZzYTExMDBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvbGVkcy1hc3NhYmV0LmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9sZWRzLWFzc2FiZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWFhOWRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvbGVkcy1hc3NhYmV0LmMKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXNhMTEwMC9sZWRzLWFzc2FiZXQuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBKb2huIERvcnNleSA8am9obitAY3MuY211LmVkdT4KKyAqCisgKiBPcmlnaW5hbCAobGVkcy1mb290YnJpZGdlLmMpIGJ5IFJ1c3NlbGwgS2luZworICoKKyAqIEFzc2FiZXQgdXNlcyB0aGUgTEVEcyBhcyBmb2xsb3dzOgorICogICAtIEdyZWVuIC0gdG9nZ2xlcyBzdGF0ZSBldmVyeSA1MCB0aW1lciBpbnRlcnJ1cHRzCisgKiAgIC0gUmVkICAgLSBvbiBpZiBzeXN0ZW0gaXMgbm90IGlkbGUKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9sZWRzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Fzc2FiZXQuaD4KKworI2luY2x1ZGUgImxlZHMuaCIKKworCisjZGVmaW5lIExFRF9TVEFURV9FTkFCTEVECTEKKyNkZWZpbmUgTEVEX1NUQVRFX0NMQUlNRUQJMgorCitzdGF0aWMgdW5zaWduZWQgaW50IGxlZF9zdGF0ZTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaHdfbGVkX3N0YXRlOworCisjZGVmaW5lIEFTU0FCRVRfQkNSX0xFRF9NQVNLCShBU1NBQkVUX0JDUl9MRURfR1JFRU4gfCBBU1NBQkVUX0JDUl9MRURfUkVEKQorCit2b2lkIGFzc2FiZXRfbGVkc19ldmVudChsZWRfZXZlbnRfdCBldnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXN3aXRjaCAoZXZ0KSB7CisJY2FzZSBsZWRfc3RhcnQ6CisJCWh3X2xlZF9zdGF0ZSA9IEFTU0FCRVRfQkNSX0xFRF9SRUQgfCBBU1NBQkVUX0JDUl9MRURfR1JFRU47CisJCWxlZF9zdGF0ZSA9IExFRF9TVEFURV9FTkFCTEVEOworCQlicmVhazsKKworCWNhc2UgbGVkX3N0b3A6CisJCWxlZF9zdGF0ZSAmPSB+TEVEX1NUQVRFX0VOQUJMRUQ7CisJCWh3X2xlZF9zdGF0ZSA9IEFTU0FCRVRfQkNSX0xFRF9SRUQgfCBBU1NBQkVUX0JDUl9MRURfR1JFRU47CisJCUFTU0FCRVRfQkNSX2Zyb2IoQVNTQUJFVF9CQ1JfTEVEX01BU0ssIGh3X2xlZF9zdGF0ZSk7CisJCWJyZWFrOworCisJY2FzZSBsZWRfY2xhaW06CisJCWxlZF9zdGF0ZSB8PSBMRURfU1RBVEVfQ0xBSU1FRDsKKwkJaHdfbGVkX3N0YXRlID0gQVNTQUJFVF9CQ1JfTEVEX1JFRCB8IEFTU0FCRVRfQkNSX0xFRF9HUkVFTjsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9yZWxlYXNlOgorCQlsZWRfc3RhdGUgJj0gfkxFRF9TVEFURV9DTEFJTUVEOworCQlod19sZWRfc3RhdGUgPSBBU1NBQkVUX0JDUl9MRURfUkVEIHwgQVNTQUJFVF9CQ1JfTEVEX0dSRUVOOworCQlicmVhazsKKworI2lmZGVmIENPTkZJR19MRURTX1RJTUVSCisJY2FzZSBsZWRfdGltZXI6CisJCWlmICghKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKSkKKwkJCWh3X2xlZF9zdGF0ZSBePSBBU1NBQkVUX0JDUl9MRURfR1JFRU47CisJCWJyZWFrOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTEVEU19DUFUKKwljYXNlIGxlZF9pZGxlX3N0YXJ0OgorCQlpZiAoIShsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkpCisJCQlod19sZWRfc3RhdGUgfD0gQVNTQUJFVF9CQ1JfTEVEX1JFRDsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9pZGxlX2VuZDoKKwkJaWYgKCEobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpKQorCQkJaHdfbGVkX3N0YXRlICY9IH5BU1NBQkVUX0JDUl9MRURfUkVEOworCQlicmVhazsKKyNlbmRpZgorCisJY2FzZSBsZWRfaGFsdGVkOgorCQlicmVhazsKKworCWNhc2UgbGVkX2dyZWVuX29uOgorCQlpZiAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpCisJCQlod19sZWRfc3RhdGUgJj0gfkFTU0FCRVRfQkNSX0xFRF9HUkVFTjsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9ncmVlbl9vZmY6CisJCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKKwkJCWh3X2xlZF9zdGF0ZSB8PSBBU1NBQkVUX0JDUl9MRURfR1JFRU47CisJCWJyZWFrOworCisJY2FzZSBsZWRfYW1iZXJfb246CisJCWJyZWFrOworCisJY2FzZSBsZWRfYW1iZXJfb2ZmOgorCQlicmVhazsKKworCWNhc2UgbGVkX3JlZF9vbjoKKwkJaWYgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKQorCQkJaHdfbGVkX3N0YXRlICY9IH5BU1NBQkVUX0JDUl9MRURfUkVEOworCQlicmVhazsKKworCWNhc2UgbGVkX3JlZF9vZmY6CisJCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKKwkJCWh3X2xlZF9zdGF0ZSB8PSBBU1NBQkVUX0JDUl9MRURfUkVEOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmICAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0VOQUJMRUQpCisJCUFTU0FCRVRfQkNSX2Zyb2IoQVNTQUJFVF9CQ1JfTEVEX01BU0ssIGh3X2xlZF9zdGF0ZSk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9sZWRzLWJhZGdlNC5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvbGVkcy1iYWRnZTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYThmODdiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvbGVkcy1iYWRnZTQuYwpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtc2ExMTAwL2xlZHMtYmFkZ2U0LmMKKyAqCisgKiBBdXRob3I6IENocmlzdG9waGVyIEhvb3ZlciA8Y2hAaHBsLmhwLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwMiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2luY2x1ZGUgImxlZHMuaCIKKworI2RlZmluZSBMRURfU1RBVEVfRU5BQkxFRAkxCisjZGVmaW5lIExFRF9TVEFURV9DTEFJTUVECTIKKworc3RhdGljIHVuc2lnbmVkIGludCBsZWRfc3RhdGU7CitzdGF0aWMgdW5zaWduZWQgaW50IGh3X2xlZF9zdGF0ZTsKKworI2RlZmluZSBMRURfUkVECQlHUElPX0dQSU8oNykKKyNkZWZpbmUgTEVEX0dSRUVOICAgICAgIEdQSU9fR1BJTyg5KQorI2RlZmluZSBMRURfTUFTSwkoTEVEX1JFRHxMRURfR1JFRU4pCisKKyNkZWZpbmUgTEVEX0lETEUJTEVEX0dSRUVOCisjZGVmaW5lIExFRF9USU1FUglMRURfUkVECisKK3ZvaWQgYmFkZ2U0X2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KQoreworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisgICAgICAgIHN3aXRjaCAoZXZ0KSB7CisgICAgICAgIGNhc2UgbGVkX3N0YXJ0OgorCQlHUERSIHw9IExFRF9NQVNLOworICAgICAgICAgICAgICAgIGh3X2xlZF9zdGF0ZSA9IExFRF9NQVNLOworICAgICAgICAgICAgICAgIGxlZF9zdGF0ZSA9IExFRF9TVEFURV9FTkFCTEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgbGVkX3N0b3A6CisgICAgICAgICAgICAgICAgbGVkX3N0YXRlICY9IH5MRURfU1RBVEVfRU5BQkxFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGxlZF9jbGFpbToKKyAgICAgICAgICAgICAgICBsZWRfc3RhdGUgfD0gTEVEX1NUQVRFX0NMQUlNRUQ7CisgICAgICAgICAgICAgICAgaHdfbGVkX3N0YXRlID0gTEVEX01BU0s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBsZWRfcmVsZWFzZToKKyAgICAgICAgICAgICAgICBsZWRfc3RhdGUgJj0gfkxFRF9TVEFURV9DTEFJTUVEOworICAgICAgICAgICAgICAgIGh3X2xlZF9zdGF0ZSA9IExFRF9NQVNLOworICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgQ09ORklHX0xFRFNfVElNRVIKKyAgICAgICAgY2FzZSBsZWRfdGltZXI6CisgICAgICAgICAgICAgICAgaWYgKCEobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgaHdfbGVkX3N0YXRlIF49IExFRF9USU1FUjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0xFRFNfQ1BVCisgICAgICAgIGNhc2UgbGVkX2lkbGVfc3RhcnQ6CisJCS8qIExFRCBvZmYgd2hlbiBzeXN0ZW0gaXMgaWRsZSAqLworICAgICAgICAgICAgICAgIGlmICghKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGh3X2xlZF9zdGF0ZSAmPSB+TEVEX0lETEU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBsZWRfaWRsZV9lbmQ6CisgICAgICAgICAgICAgICAgaWYgKCEobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgaHdfbGVkX3N0YXRlIHw9IExFRF9JRExFOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisKKyAgICAgICAgY2FzZSBsZWRfcmVkX29uOgorICAgICAgICAgICAgICAgIGlmICghKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGh3X2xlZF9zdGF0ZSAmPSB+TEVEX1JFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGxlZF9yZWRfb2ZmOgorICAgICAgICAgICAgICAgIGlmICghKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGh3X2xlZF9zdGF0ZSB8PSBMRURfUkVEOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgbGVkX2dyZWVuX29uOgorICAgICAgICAgICAgICAgIGlmICghKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGh3X2xlZF9zdGF0ZSAmPSB+TEVEX0dSRUVOOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgbGVkX2dyZWVuX29mZjoKKyAgICAgICAgICAgICAgICBpZiAoIShsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkpCisgICAgICAgICAgICAgICAgICAgICAgICBod19sZWRfc3RhdGUgfD0gTEVEX0dSRUVOOworICAgICAgICAgICAgICAgIGJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9FTkFCTEVEKSB7CisgICAgICAgICAgICAgICAgR1BTUiA9IGh3X2xlZF9zdGF0ZTsKKyAgICAgICAgICAgICAgICBHUENSID0gaHdfbGVkX3N0YXRlIF4gTEVEX01BU0s7CisgICAgICAgIH0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2xlZHMtY2VyZi5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvbGVkcy1jZXJmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY2MzVhMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2xlZHMtY2VyZi5jCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1zYTExMDAvbGVkcy1jZXJmLmMKKyAqCisgKiBBdXRob3I6ID8/PworICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNpbmNsdWRlICJsZWRzLmgiCisKKworI2RlZmluZSBMRURfU1RBVEVfRU5BQkxFRAkxCisjZGVmaW5lIExFRF9TVEFURV9DTEFJTUVECTIKKworc3RhdGljIHVuc2lnbmVkIGludCBsZWRfc3RhdGU7CitzdGF0aWMgdW5zaWduZWQgaW50IGh3X2xlZF9zdGF0ZTsKKworI2RlZmluZSBMRURfRDAgICAgICAgICAgR1BJT19HUElPKDApCisjZGVmaW5lIExFRF9EMSAgICAgICAgICBHUElPX0dQSU8oMSkKKyNkZWZpbmUgTEVEX0QyICAgICAgICAgIEdQSU9fR1BJTygyKQorI2RlZmluZSBMRURfRDMgICAgICAgICAgR1BJT19HUElPKDMpCisjZGVmaW5lIExFRF9NQVNLICAgICAgICAoTEVEX0QwfExFRF9EMXxMRURfRDJ8TEVEX0QzKQorCit2b2lkIGNlcmZfbGVkc19ldmVudChsZWRfZXZlbnRfdCBldnQpCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKyAgICAgICAgc3dpdGNoIChldnQpIHsKKyAgICAgICAgY2FzZSBsZWRfc3RhcnQ6CisgICAgICAgICAgICAgICAgaHdfbGVkX3N0YXRlID0gTEVEX01BU0s7CisgICAgICAgICAgICAgICAgbGVkX3N0YXRlID0gTEVEX1NUQVRFX0VOQUJMRUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBsZWRfc3RvcDoKKyAgICAgICAgICAgICAgICBsZWRfc3RhdGUgJj0gfkxFRF9TVEFURV9FTkFCTEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgbGVkX2NsYWltOgorICAgICAgICAgICAgICAgIGxlZF9zdGF0ZSB8PSBMRURfU1RBVEVfQ0xBSU1FRDsKKyAgICAgICAgICAgICAgICBod19sZWRfc3RhdGUgPSBMRURfTUFTSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBsZWRfcmVsZWFzZToKKyAgICAgICAgICAgICAgICBsZWRfc3RhdGUgJj0gfkxFRF9TVEFURV9DTEFJTUVEOworICAgICAgICAgICAgICAgIGh3X2xlZF9zdGF0ZSA9IExFRF9NQVNLOworICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgQ09ORklHX0xFRFNfVElNRVIKKyAgICAgICAgY2FzZSBsZWRfdGltZXI6CisgICAgICAgICAgICAgICAgaWYgKCEobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgaHdfbGVkX3N0YXRlIF49IExFRF9EMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0xFRFNfQ1BVCisgICAgICAgIGNhc2UgbGVkX2lkbGVfc3RhcnQ6CisgICAgICAgICAgICAgICAgaWYgKCEobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgaHdfbGVkX3N0YXRlICY9IH5MRURfRDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBsZWRfaWRsZV9lbmQ6CisgICAgICAgICAgICAgICAgaWYgKCEobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgaHdfbGVkX3N0YXRlIHw9IExFRF9EMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICBjYXNlIGxlZF9ncmVlbl9vbjoKKyAgICAgICAgICAgICAgICBpZiAoIShsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkpCisgICAgICAgICAgICAgICAgICAgICAgICBod19sZWRfc3RhdGUgJj0gfkxFRF9EMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGxlZF9ncmVlbl9vZmY6CisgICAgICAgICAgICAgICAgaWYgKCEobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgaHdfbGVkX3N0YXRlIHw9IExFRF9EMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGxlZF9hbWJlcl9vbjoKKyAgICAgICAgICAgICAgICBpZiAoIShsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkpCisgICAgICAgICAgICAgICAgICAgICAgICBod19sZWRfc3RhdGUgJj0gfkxFRF9EMzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGxlZF9hbWJlcl9vZmY6CisgICAgICAgICAgICAgICAgaWYgKCEobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgaHdfbGVkX3N0YXRlIHw9IExFRF9EMzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGxlZF9yZWRfb246CisgICAgICAgICAgICAgICAgaWYgKCEobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgaHdfbGVkX3N0YXRlICY9IH5MRURfRDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBsZWRfcmVkX29mZjoKKyAgICAgICAgICAgICAgICBpZiAoIShsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkpCisgICAgICAgICAgICAgICAgICAgICAgICBod19sZWRfc3RhdGUgfD0gTEVEX0QxOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9FTkFCTEVEKSB7CisgICAgICAgICAgICAgICAgR1BTUiA9IGh3X2xlZF9zdGF0ZTsKKyAgICAgICAgICAgICAgICBHUENSID0gaHdfbGVkX3N0YXRlIF4gTEVEX01BU0s7CisgICAgICAgIH0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2xlZHMtaGFja2tpdC5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvbGVkcy1oYWNra2l0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU1ZmExNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2xlZHMtaGFja2tpdC5jCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1zYTExMDAvbGVkcy1oYWNra2l0LmMKKyAqCisgKiBiYXNlZCBvbiBsZWRzLWxhcnQuYworICoKKyAqIChDKSBFcmlrIE1vdXcgKEouQS5LLk1vdXdAaXRzLnR1ZGVsZnQubmwpLCBBcHJpbCAyMSwgMjAwMAorICogKEMpIFN0ZWZhbiBFbGV0emhvZmVyIDxzdGVmYW4uZWxldHpob2ZlckBlbGV0enRyaWNrLmRlPiwgMjAwMgorICoKKyAqIFRoZSBIYWNrS2l0IGhhcyB0d28gbGVkcyAoR1BJTyAyMi8yMykuIFRoZSByZWQgbGVkIChncGlvIDIyKSBpcyB1c2VkCisgKiBhcyBjcHUgbGVkLCB0aGUgZ3JlZW4gb25lIGlzIHVzZWQgYXMgdGltZXIgbGVkLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNpbmNsdWRlICJsZWRzLmgiCisKKworI2RlZmluZSBMRURfU1RBVEVfRU5BQkxFRAkxCisjZGVmaW5lIExFRF9TVEFURV9DTEFJTUVECTIKKworc3RhdGljIHVuc2lnbmVkIGludCBsZWRfc3RhdGU7CitzdGF0aWMgdW5zaWduZWQgaW50IGh3X2xlZF9zdGF0ZTsKKworI2RlZmluZSBMRURfR1JFRU4gICAgR1BJT19HUElPMjMKKyNkZWZpbmUgTEVEX1JFRCAgICBHUElPX0dQSU8yMgorI2RlZmluZSBMRURfTUFTSyAgKExFRF9SRUQgfCBMRURfR1JFRU4pCisKK3ZvaWQgaGFja2tpdF9sZWRzX2V2ZW50KGxlZF9ldmVudF90IGV2dCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJc3dpdGNoKGV2dCkgeworCQljYXNlIGxlZF9zdGFydDoKKwkJCS8qIHBpbiAyMi8yMyBhcmUgb3V0cHV0cyAqLworCQkJR1BEUiB8PSBMRURfTUFTSzsKKwkJCWh3X2xlZF9zdGF0ZSA9IExFRF9NQVNLOworCQkJbGVkX3N0YXRlID0gTEVEX1NUQVRFX0VOQUJMRUQ7CisJCQlicmVhazsKKworCQljYXNlIGxlZF9zdG9wOgorCQkJbGVkX3N0YXRlICY9IH5MRURfU1RBVEVfRU5BQkxFRDsKKwkJCWJyZWFrOworCisJCWNhc2UgbGVkX2NsYWltOgorCQkJbGVkX3N0YXRlIHw9IExFRF9TVEFURV9DTEFJTUVEOworCQkJaHdfbGVkX3N0YXRlID0gTEVEX01BU0s7CisJCQlicmVhazsKKworCQljYXNlIGxlZF9yZWxlYXNlOgorCQkJbGVkX3N0YXRlICY9IH5MRURfU1RBVEVfQ0xBSU1FRDsKKwkJCWh3X2xlZF9zdGF0ZSA9IExFRF9NQVNLOworCQkJYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfTEVEU19USU1FUgorCQljYXNlIGxlZF90aW1lcjoKKwkJCWlmICghKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKSkKKwkJCQlod19sZWRfc3RhdGUgXj0gTEVEX0dSRUVOOworCQkJYnJlYWs7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19MRURTX0NQVQorCQljYXNlIGxlZF9pZGxlX3N0YXJ0OgorCQkJLyogVGhlIExBUlQgcGVvcGxlIGxpa2UgdGhlIExFRCB0byBiZSBvZmYgd2hlbiB0aGUKKwkJCSAgIHN5c3RlbSBpcyBpZGxlLi4uICovCisJCQlpZiAoIShsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkpCisJCQkJaHdfbGVkX3N0YXRlICY9IH5MRURfUkVEOworCQkJYnJlYWs7CisKKwkJY2FzZSBsZWRfaWRsZV9lbmQ6CisJCQkvKiAuLi4gYW5kIG9uIGlmIHRoZSBzeXN0ZW0gaXMgbm90IGlkbGUgKi8KKwkJCWlmICghKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKSkKKwkJCQlod19sZWRfc3RhdGUgfD0gTEVEX1JFRDsKKwkJCWJyZWFrOworI2VuZGlmCisKKwkJY2FzZSBsZWRfcmVkX29uOgorCQkJaWYgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKQorCQkJCWh3X2xlZF9zdGF0ZSAmPSB+TEVEX1JFRDsKKwkJCWJyZWFrOworCisJCWNhc2UgbGVkX3JlZF9vZmY6CisJCQlpZiAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpCisJCQkJaHdfbGVkX3N0YXRlIHw9IExFRF9SRUQ7CisJCQlicmVhazsKKworCQljYXNlIGxlZF9ncmVlbl9vbjoKKwkJCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKKwkJCQlod19sZWRfc3RhdGUgJj0gfkxFRF9HUkVFTjsKKwkJCWJyZWFrOworCisJCWNhc2UgbGVkX2dyZWVuX29mZjoKKwkJCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKKwkJCQlod19sZWRfc3RhdGUgfD0gTEVEX0dSRUVOOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKworCS8qIE5vdyBzZXQgdGhlIEdQSU8gc3RhdGUsIG9yIG5vdGhpbmcgd2lsbCBoYXBwZW4gYXQgYWxsICovCisJaWYgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9FTkFCTEVEKSB7CisJCUdQU1IgPSBod19sZWRfc3RhdGU7CisJCUdQQ1IgPSBod19sZWRfc3RhdGUgXiBMRURfTUFTSzsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9sZWRzLWxhcnQuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2xlZHMtbGFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NzUwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9sZWRzLWxhcnQuYwpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtc2ExMTAwL2xlZHMtbGFydC5jCisgKgorICogKEMpIEVyaWsgTW91dyAoSi5BLksuTW91d0BpdHMudHVkZWxmdC5ubCksIEFwcmlsIDIxLCAyMDAwCisgKgorICogTEFSVCB1c2VzIHRoZSBMRUQgYXMgZm9sbG93czoKKyAqICAgLSBHUElPMjMgaXMgdGhlIExFRCwgb24gaWYgc3lzdGVtIGlzIG5vdCBpZGxlCisgKiAgWW91IGNhbiB1c2UgYm90aCBDT05GSUdfTEVEU19DUFUgYW5kIENPTkZJR19MRURTX1RJTUVSIGF0IHRoZSBzYW1lCisgKiAgdGltZSwgYnV0IGluIHRoYXQgY2FzZSB0aGUgdGltZXIgZXZlbnRzIHdpbGwgc3RpbGwgZGljdGF0ZSB0aGUKKyAqICBwYWNlIG9mIHRoZSBMRUQuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2luY2x1ZGUgImxlZHMuaCIKKworCisjZGVmaW5lIExFRF9TVEFURV9FTkFCTEVECTEKKyNkZWZpbmUgTEVEX1NUQVRFX0NMQUlNRUQJMgorCitzdGF0aWMgdW5zaWduZWQgaW50IGxlZF9zdGF0ZTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaHdfbGVkX3N0YXRlOworCisjZGVmaW5lIExFRF8yMyAgICBHUElPX0dQSU8yMworI2RlZmluZSBMRURfTUFTSyAgKExFRF8yMykKKwordm9pZCBsYXJ0X2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzd2l0Y2goZXZ0KSB7CisJY2FzZSBsZWRfc3RhcnQ6CisJCS8qIHBpbiAyMyBpcyBvdXRwdXQgcGluICovCisJCUdQRFIgfD0gTEVEXzIzOworCQlod19sZWRfc3RhdGUgPSBMRURfTUFTSzsKKwkJbGVkX3N0YXRlID0gTEVEX1NUQVRFX0VOQUJMRUQ7CisJCWJyZWFrOworCisJY2FzZSBsZWRfc3RvcDoKKwkJbGVkX3N0YXRlICY9IH5MRURfU1RBVEVfRU5BQkxFRDsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9jbGFpbToKKwkJbGVkX3N0YXRlIHw9IExFRF9TVEFURV9DTEFJTUVEOworCQlod19sZWRfc3RhdGUgPSBMRURfTUFTSzsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9yZWxlYXNlOgorCQlsZWRfc3RhdGUgJj0gfkxFRF9TVEFURV9DTEFJTUVEOworCQlod19sZWRfc3RhdGUgPSBMRURfTUFTSzsKKwkJYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfTEVEU19USU1FUgorCWNhc2UgbGVkX3RpbWVyOgorCQlpZiAoIShsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkpCisJCQlod19sZWRfc3RhdGUgXj0gTEVEXzIzOworCQlicmVhazsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0xFRFNfQ1BVCisJY2FzZSBsZWRfaWRsZV9zdGFydDoKKwkJLyogVGhlIExBUlQgcGVvcGxlIGxpa2UgdGhlIExFRCB0byBiZSBvZmYgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICBzeXN0ZW0gaXMgaWRsZS4uLiAqLworCQlpZiAoIShsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkpCisJCQlod19sZWRfc3RhdGUgJj0gfkxFRF8yMzsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9pZGxlX2VuZDoKKwkJLyogLi4uIGFuZCBvbiBpZiB0aGUgc3lzdGVtIGlzIG5vdCBpZGxlICovCisJCWlmICghKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKSkKKwkJCWh3X2xlZF9zdGF0ZSB8PSBMRURfMjM7CisJCWJyZWFrOworI2VuZGlmCisKKwljYXNlIGxlZF9yZWRfb246CisJCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKKwkJCWh3X2xlZF9zdGF0ZSAmPSB+TEVEXzIzOworCQlicmVhazsKKworCWNhc2UgbGVkX3JlZF9vZmY6CisJCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKKwkJCWh3X2xlZF9zdGF0ZSB8PSBMRURfMjM7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogTm93IHNldCB0aGUgR1BJTyBzdGF0ZSwgb3Igbm90aGluZyB3aWxsIGhhcHBlbiBhdCBhbGwgKi8KKwlpZiAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0VOQUJMRUQpIHsKKwkJR1BTUiA9IGh3X2xlZF9zdGF0ZTsKKwkJR1BDUiA9IGh3X2xlZF9zdGF0ZSBeIExFRF9NQVNLOworCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2xlZHMtc2ltcGFkLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9sZWRzLXNpbXBhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMjdhMmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9sZWRzLXNpbXBhZC5jCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1zYTExMDAvbGVkcy1zaW1wYWQuYworICoKKyAqIEF1dGhvcjogSnVlcmdlbiBNZXNzZXJlciA8anVlcmdlbi5tZXNzZXJlckBzaWVtZW5zLmNoPgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc2ltcGFkLmg+CisKKyNpbmNsdWRlICJsZWRzLmgiCisKKworI2RlZmluZSBMRURfU1RBVEVfRU5BQkxFRAkxCisjZGVmaW5lIExFRF9TVEFURV9DTEFJTUVECTIKKworc3RhdGljIHVuc2lnbmVkIGludCBsZWRfc3RhdGU7CitzdGF0aWMgdW5zaWduZWQgaW50IGh3X2xlZF9zdGF0ZTsKKworI2RlZmluZQlMRURfR1JFRU4JKDEpCisjZGVmaW5lCUxFRF9NQVNLCSgxKQorCitleHRlcm4gdm9pZCBzZXRfY3MzX2JpdChpbnQgdmFsdWUpOworZXh0ZXJuIHZvaWQgY2xlYXJfY3MzX2JpdChpbnQgdmFsdWUpOyAgICAgCisKK3ZvaWQgc2ltcGFkX2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KQoreworCXN3aXRjaCAoZXZ0KQorCXsKKwljYXNlIGxlZF9zdGFydDoKKwkgICAgICAgIGh3X2xlZF9zdGF0ZSA9IExFRF9HUkVFTjsKKwkJbGVkX3N0YXRlID0gTEVEX1NUQVRFX0VOQUJMRUQ7CisJCWJyZWFrOworCisJY2FzZSBsZWRfc3RvcDoKKwkJbGVkX3N0YXRlICY9IH5MRURfU1RBVEVfRU5BQkxFRDsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9jbGFpbToKKwkJbGVkX3N0YXRlIHw9IExFRF9TVEFURV9DTEFJTUVEOworCQlod19sZWRfc3RhdGUgPSBMRURfR1JFRU47CisJCWJyZWFrOworCisJY2FzZSBsZWRfcmVsZWFzZToKKwkJbGVkX3N0YXRlICY9IH5MRURfU1RBVEVfQ0xBSU1FRDsKKwkJaHdfbGVkX3N0YXRlID0gTEVEX0dSRUVOOworCQlicmVhazsKKworI2lmZGVmIENPTkZJR19MRURTX1RJTUVSCisJY2FzZSBsZWRfdGltZXI6CisJCWlmICghKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKSkKKwkJCWh3X2xlZF9zdGF0ZSBePSBMRURfR1JFRU47CisJCWJyZWFrOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTEVEU19DUFUKKwljYXNlIGxlZF9pZGxlX3N0YXJ0OgorCQlicmVhazsKKworCWNhc2UgbGVkX2lkbGVfZW5kOgorCQlicmVhazsKKyNlbmRpZgorCisJY2FzZSBsZWRfaGFsdGVkOgorCQlicmVhazsKKworCWNhc2UgbGVkX2dyZWVuX29uOgorCQlpZiAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpCisJCQlod19sZWRfc3RhdGUgfD0gTEVEX0dSRUVOOworCQlicmVhazsKKworCWNhc2UgbGVkX2dyZWVuX29mZjoKKwkJaWYgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKQorCQkJaHdfbGVkX3N0YXRlICY9IH5MRURfR1JFRU47CisJCWJyZWFrOworCisJY2FzZSBsZWRfYW1iZXJfb246CisJCWJyZWFrOworCisJY2FzZSBsZWRfYW1iZXJfb2ZmOgorCQlicmVhazsKKworCWNhc2UgbGVkX3JlZF9vbjoKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9yZWRfb2ZmOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmICAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0VOQUJMRUQpCisJCXNldF9jczNfYml0KExFRDJfT04pOworCWVsc2UgCisJICAgICAgICBjbGVhcl9jczNfYml0KExFRDJfT04pOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9sZWRzLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9sZWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNmN2M1NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2xlZHMuYwpAQCAtMCwwICsxLDUyIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1zYTExMDAvbGVkcy5jCisgKgorICogU0ExMTAwIExFRHMgZGlzcGF0Y2hlcgorICogCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgTmljb2xhcyBQaXRyZQorICovCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlICJsZWRzLmgiCisKK3N0YXRpYyBpbnQgX19pbml0CitzYTExMDBfbGVkc19pbml0KHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfYXNzYWJldCgpKQorCQlsZWRzX2V2ZW50ID0gYXNzYWJldF9sZWRzX2V2ZW50OworIAlpZiAobWFjaGluZV9pc19jb25zdXMoKSkKKyAJICAgICAgICBsZWRzX2V2ZW50ID0gY29uc3VzX2xlZHNfZXZlbnQ7CisJaWYgKG1hY2hpbmVfaXNfYmFkZ2U0KCkpCisJICAJbGVkc19ldmVudCA9IGJhZGdlNF9sZWRzX2V2ZW50OworCWlmIChtYWNoaW5lX2lzX2JydXR1cygpKQorCQlsZWRzX2V2ZW50ID0gYnJ1dHVzX2xlZHNfZXZlbnQ7CisJaWYgKG1hY2hpbmVfaXNfY2VyZigpKQorCQlsZWRzX2V2ZW50ID0gY2VyZl9sZWRzX2V2ZW50OworCWlmIChtYWNoaW5lX2lzX2ZsZXhhbmV0KCkpCisJCWxlZHNfZXZlbnQgPSBmbGV4YW5ldF9sZWRzX2V2ZW50OworCWlmIChtYWNoaW5lX2lzX2dyYXBoaWNzY2xpZW50KCkpCisJCWxlZHNfZXZlbnQgPSBncmFwaGljc2NsaWVudF9sZWRzX2V2ZW50OworCWlmIChtYWNoaW5lX2lzX2hhY2traXQoKSkKKwkJbGVkc19ldmVudCA9IGhhY2traXRfbGVkc19ldmVudDsKKwlpZiAobWFjaGluZV9pc19sYXJ0KCkpCisJCWxlZHNfZXZlbnQgPSBsYXJ0X2xlZHNfZXZlbnQ7CisJaWYgKG1hY2hpbmVfaXNfcGZzMTY4KCkpCisJCWxlZHNfZXZlbnQgPSBwZnMxNjhfbGVkc19ldmVudDsKKwlpZiAobWFjaGluZV9pc19ncmFwaGljc21hc3RlcigpKQorCQlsZWRzX2V2ZW50ID0gZ3JhcGhpY3NtYXN0ZXJfbGVkc19ldmVudDsKKwlpZiAobWFjaGluZV9pc19hZHNiaXRzeSgpKQorCQlsZWRzX2V2ZW50ID0gYWRzYml0c3lfbGVkc19ldmVudDsKKwlpZiAobWFjaGluZV9pc19wdF9zeXN0ZW0zKCkpCisJCWxlZHNfZXZlbnQgPSBzeXN0ZW0zX2xlZHNfZXZlbnQ7CisJaWYgKG1hY2hpbmVfaXNfc2ltcGFkKCkpCisJCWxlZHNfZXZlbnQgPSBzaW1wYWRfbGVkc19ldmVudDsgLyogd2hhdCBhYm91dCBtYWNoaW5lIHJlZ2lzdHJ5PyBpbmNsdWRpbmcgbGVkLCBhcG0uLi4gLXplY2tlICovCisKKwlsZWRzX2V2ZW50KGxlZF9zdGFydCk7CisJcmV0dXJuIDA7Cit9CisKK2NvcmVfaW5pdGNhbGwoc2ExMTAwX2xlZHNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9sZWRzLmggYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9sZWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYzlmNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2xlZHMuaApAQCAtMCwwICsxLDE0IEBACitleHRlcm4gdm9pZCBhc3NhYmV0X2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KTsKK2V4dGVybiB2b2lkIGJhZGdlNF9sZWRzX2V2ZW50KGxlZF9ldmVudF90IGV2dCk7CitleHRlcm4gdm9pZCBjb25zdXNfbGVkc19ldmVudChsZWRfZXZlbnRfdCBldnQpOworZXh0ZXJuIHZvaWQgYnJ1dHVzX2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KTsKK2V4dGVybiB2b2lkIGNlcmZfbGVkc19ldmVudChsZWRfZXZlbnRfdCBldnQpOworZXh0ZXJuIHZvaWQgZmxleGFuZXRfbGVkc19ldmVudChsZWRfZXZlbnRfdCBldnQpOworZXh0ZXJuIHZvaWQgZ3JhcGhpY3NjbGllbnRfbGVkc19ldmVudChsZWRfZXZlbnRfdCBldnQpOworZXh0ZXJuIHZvaWQgaGFja2tpdF9sZWRzX2V2ZW50KGxlZF9ldmVudF90IGV2dCk7CitleHRlcm4gdm9pZCBsYXJ0X2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KTsKK2V4dGVybiB2b2lkIHBmczE2OF9sZWRzX2V2ZW50KGxlZF9ldmVudF90IGV2dCk7CitleHRlcm4gdm9pZCBncmFwaGljc21hc3Rlcl9sZWRzX2V2ZW50KGxlZF9ldmVudF90IGV2dCk7CitleHRlcm4gdm9pZCBhZHNiaXRzeV9sZWRzX2V2ZW50KGxlZF9ldmVudF90IGV2dCk7CitleHRlcm4gdm9pZCBzeXN0ZW0zX2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KTsKK2V4dGVybiB2b2lkIHNpbXBhZF9sZWRzX2V2ZW50KGxlZF9ldmVudF90IGV2dCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDA1MzgzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYwpAQCAtMCwwICsxLDM0MiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9zZXJpYWxfc2ExMTAwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYXNzYWJldC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL25lcG9uc2V0Lmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3NhMTExMS5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorCisvKgorICogSW5zdGFsbCBoYW5kbGVyIGZvciBOZXBvbnNldCBJUlEuICBOb3RlIHRoYXQgd2UgaGF2ZSB0byBsb29wIGhlcmUKKyAqIHNpbmNlIHRoZSBFVEhFUk5FVCBhbmQgVVNBUiBJUlFzIGFyZSBsZXZlbCBiYXNlZCwgYW5kIHdlIG5lZWQgdG8KKyAqIGVuc3VyZSB0aGF0IHRoZSBJUlEgc2lnbmFsIGlzIGRlYXNzZXJ0ZWQgYmVmb3JlIHJldHVybmluZy4gIFRoaXMKKyAqIGlzIHJhdGhlciB1bmZvcnR1bmF0ZS4KKyAqLworc3RhdGljIHZvaWQKK25lcG9uc2V0X2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFkZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgaXJyOworCisJd2hpbGUgKDEpIHsKKwkJc3RydWN0IGlycWRlc2MgKmQ7CisKKwkJLyoKKwkJICogQWNrbm93bGVkZ2UgdGhlIHBhcmVudCBJUlEuCisJCSAqLworCQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKKworCQkvKgorCQkgKiBSZWFkIHRoZSBpbnRlcnJ1cHQgcmVhc29uIHJlZ2lzdGVyLiAgTGV0J3MgaGF2ZSBhbGwKKwkJICogYWN0aXZlIElSUSBiaXRzIGhpZ2guICBOb3RlOiB0aGVyZSBpcyBhIHR5cG8gaW4gdGhlCisJCSAqIE5lcG9uc2V0IHVzZXIncyBndWlkZSBmb3IgdGhlIFNBMTExMSBJUlIgbGV2ZWwuCisJCSAqLworCQlpcnIgPSBJUlIgXiAoSVJSX0VUSEVSTkVUIHwgSVJSX1VTQVIpOworCisJCWlmICgoaXJyICYgKElSUl9FVEhFUk5FVCB8IElSUl9VU0FSIHwgSVJSX1NBMTExMSkpID09IDApCisJCQlicmVhazsKKworCQkvKgorCQkgKiBTaW5jZSB0aGVyZSBpcyBubyBpbmRpdmlkdWFsIG1hc2ssIHdlIGhhdmUgdG8KKwkJICogbWFzayB0aGUgcGFyZW50IElSUS4gIFRoaXMgaXMgc2FmZSwgc2luY2Ugd2UnbGwKKwkJICogcmVjaGVjayB0aGUgcmVnaXN0ZXIgZm9yIGFueSBwZW5kaW5nIElSUXMuCisJCSAqLworCQlpZiAoaXJyICYgKElSUl9FVEhFUk5FVCB8IElSUl9VU0FSKSkgeworCQkJZGVzYy0+Y2hpcC0+bWFzayhpcnEpOworCisJCQlpZiAoaXJyICYgSVJSX0VUSEVSTkVUKSB7CisJCQkJZCA9IGlycV9kZXNjICsgSVJRX05FUE9OU0VUX1NNQzkxOTY7CisJCQkJZC0+aGFuZGxlKElSUV9ORVBPTlNFVF9TTUM5MTk2LCBkLCByZWdzKTsKKwkJCX0KKworCQkJaWYgKGlyciAmIElSUl9VU0FSKSB7CisJCQkJZCA9IGlycV9kZXNjICsgSVJRX05FUE9OU0VUX1VTQVI7CisJCQkJZC0+aGFuZGxlKElSUV9ORVBPTlNFVF9VU0FSLCBkLCByZWdzKTsKKwkJCX0KKworCQkJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CisJCX0KKworCQlpZiAoaXJyICYgSVJSX1NBMTExMSkgeworCQkJZCA9IGlycV9kZXNjICsgSVJRX05FUE9OU0VUX1NBMTExMTsKKwkJCWQtPmhhbmRsZShJUlFfTkVQT05TRVRfU0ExMTExLCBkLCByZWdzKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgbmVwb25zZXRfc2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVfaW50IG1jdHJsKQoreworCXVfaW50IG1kbV9jdGwwID0gTURNX0NUTF8wOworCisJaWYgKHBvcnQtPm1hcGJhc2UgPT0gX1NlcjFVVENSMCkgeworCQlpZiAobWN0cmwgJiBUSU9DTV9SVFMpCisJCQltZG1fY3RsMCAmPSB+TURNX0NUTDBfUlRTMjsKKwkJZWxzZQorCQkJbWRtX2N0bDAgfD0gTURNX0NUTDBfUlRTMjsKKworCQlpZiAobWN0cmwgJiBUSU9DTV9EVFIpCisJCQltZG1fY3RsMCAmPSB+TURNX0NUTDBfRFRSMjsKKwkJZWxzZQorCQkJbWRtX2N0bDAgfD0gTURNX0NUTDBfRFRSMjsKKwl9IGVsc2UgaWYgKHBvcnQtPm1hcGJhc2UgPT0gX1NlcjNVVENSMCkgeworCQlpZiAobWN0cmwgJiBUSU9DTV9SVFMpCisJCQltZG1fY3RsMCAmPSB+TURNX0NUTDBfUlRTMTsKKwkJZWxzZQorCQkJbWRtX2N0bDAgfD0gTURNX0NUTDBfUlRTMTsKKworCQlpZiAobWN0cmwgJiBUSU9DTV9EVFIpCisJCQltZG1fY3RsMCAmPSB+TURNX0NUTDBfRFRSMTsKKwkJZWxzZQorCQkJbWRtX2N0bDAgfD0gTURNX0NUTDBfRFRSMTsKKwl9CisKKwlNRE1fQ1RMXzAgPSBtZG1fY3RsMDsKK30KKworc3RhdGljIHVfaW50IG5lcG9uc2V0X2dldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVfaW50IHJldCA9IFRJT0NNX0NEIHwgVElPQ01fQ1RTIHwgVElPQ01fRFNSOworCXVfaW50IG1kbV9jdGwxID0gTURNX0NUTF8xOworCisJaWYgKHBvcnQtPm1hcGJhc2UgPT0gX1NlcjFVVENSMCkgeworCQlpZiAobWRtX2N0bDEgJiBNRE1fQ1RMMV9EQ0QyKQorCQkJcmV0ICY9IH5USU9DTV9DRDsKKwkJaWYgKG1kbV9jdGwxICYgTURNX0NUTDFfQ1RTMikKKwkJCXJldCAmPSB+VElPQ01fQ1RTOworCQlpZiAobWRtX2N0bDEgJiBNRE1fQ1RMMV9EU1IyKQorCQkJcmV0ICY9IH5USU9DTV9EU1I7CisJfSBlbHNlIGlmIChwb3J0LT5tYXBiYXNlID09IF9TZXIzVVRDUjApIHsKKwkJaWYgKG1kbV9jdGwxICYgTURNX0NUTDFfRENEMSkKKwkJCXJldCAmPSB+VElPQ01fQ0Q7CisJCWlmIChtZG1fY3RsMSAmIE1ETV9DVEwxX0NUUzEpCisJCQlyZXQgJj0gflRJT0NNX0NUUzsKKwkJaWYgKG1kbV9jdGwxICYgTURNX0NUTDFfRFNSMSkKKwkJCXJldCAmPSB+VElPQ01fRFNSOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2ExMTAwX3BvcnRfZm5zIG5lcG9uc2V0X3BvcnRfZm5zIF9faW5pdGRhdGEgPSB7CisJLnNldF9tY3RybAk9IG5lcG9uc2V0X3NldF9tY3RybCwKKwkuZ2V0X21jdHJsCT0gbmVwb25zZXRfZ2V0X21jdHJsLAorfTsKKworc3RhdGljIGludCBuZXBvbnNldF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc2ExMTAwX3JlZ2lzdGVyX3VhcnRfZm5zKCZuZXBvbnNldF9wb3J0X2Zucyk7CisKKwkvKgorCSAqIEluc3RhbGwgaGFuZGxlciBmb3IgR1BJTzI1LgorCSAqLworCXNldF9pcnFfdHlwZShJUlFfR1BJTzI1LCBJUlFUX1JJU0lORyk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0dQSU8yNSwgbmVwb25zZXRfaXJxX2hhbmRsZXIpOworCisJLyoKKwkgKiBXZSB3b3VsZCBzZXQgSVJRX0dQSU8yNSB0byBiZSBhIHdha2UtdXAgSVJRLCBidXQKKwkgKiB1bmZvcnR1bmF0ZWx5IHNvbWV0aGluZyBvbiB0aGUgTmVwb25zZXQgYWN0aXZhdGVzCisJICogdGhpcyBJUlEgb24gc2xlZXAgKGV0aGVybmV0PykKKwkgKi8KKyNpZiAwCisJZW5hYmxlX2lycV93YWtlKElSUV9HUElPMjUpOworI2VuZGlmCisKKwkvKgorCSAqIFNldHVwIG90aGVyIE5lcG9uc2V0IElSUXMuICBTQTExMTEgd2lsbCBiZSBkb25lIGJ5IHRoZQorCSAqIGdlbmVyaWMgU0ExMTExIGNvZGUuCisJICovCisJc2V0X2lycV9oYW5kbGVyKElSUV9ORVBPTlNFVF9TTUM5MTk2LCBkb19zaW1wbGVfSVJRKTsKKwlzZXRfaXJxX2ZsYWdzKElSUV9ORVBPTlNFVF9TTUM5MTk2LCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJc2V0X2lycV9oYW5kbGVyKElSUV9ORVBPTlNFVF9VU0FSLCBkb19zaW1wbGVfSVJRKTsKKwlzZXRfaXJxX2ZsYWdzKElSUV9ORVBPTlNFVF9VU0FSLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisKKwkvKgorCSAqIERpc2FibGUgR1BJTyAwLzEgZHJpdmVycyBzbyB0aGUgYnV0dG9ucyB3b3JrIG9uIHRoZSBtb2R1bGUuCisJICovCisJTkNSXzAgPSBOQ1JfR1AwMV9PRkY7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorCisvKgorICogTERNIHBvd2VyIG1hbmFnZW1lbnQuCisgKi8KK3N0YXRpYyBpbnQgbmVwb25zZXRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSwgdTMyIGxldmVsKQoreworCS8qCisJICogU2F2ZSBzdGF0ZS4KKwkgKi8KKwlpZiAobGV2ZWwgPT0gU1VTUEVORF9TQVZFX1NUQVRFIHx8CisJICAgIGxldmVsID09IFNVU1BFTkRfRElTQUJMRSB8fAorCSAgICBsZXZlbCA9PSBTVVNQRU5EX1BPV0VSX0RPV04pIHsKKwkJaWYgKCFkZXYtPnBvd2VyLnNhdmVkX3N0YXRlKQorCQkJZGV2LT5wb3dlci5zYXZlZF9zdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGludCksIEdGUF9LRVJORUwpOworCQlpZiAoIWRldi0+cG93ZXIuc2F2ZWRfc3RhdGUpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQkqKHVuc2lnbmVkIGludCAqKWRldi0+cG93ZXIuc2F2ZWRfc3RhdGUgPSBOQ1JfMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXBvbnNldF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgbGV2ZWwpCit7CisJaWYgKGxldmVsID09IFJFU1VNRV9SRVNUT1JFX1NUQVRFIHx8IGxldmVsID09IFJFU1VNRV9FTkFCTEUpIHsKKwkJaWYgKGRldi0+cG93ZXIuc2F2ZWRfc3RhdGUpIHsKKwkJCU5DUl8wID0gKih1bnNpZ25lZCBpbnQgKilkZXYtPnBvd2VyLnNhdmVkX3N0YXRlOworCQkJa2ZyZWUoZGV2LT5wb3dlci5zYXZlZF9zdGF0ZSk7CisJCQlkZXYtPnBvd2VyLnNhdmVkX3N0YXRlID0gTlVMTDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSBuZXBvbnNldF9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgbmVwb25zZXRfcmVzdW1lICBOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG5lcG9uc2V0X2RldmljZV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gIm5lcG9uc2V0IiwKKwkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUJCT0gbmVwb25zZXRfcHJvYmUsCisJLnN1c3BlbmQJPSBuZXBvbnNldF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gbmVwb25zZXRfcmVzdW1lLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBuZXBvbnNldF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4MTAwMDAwMDAsCisJCS5lbmQJPSAweDE3ZmZmZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbmVwb25zZXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJuZXBvbnNldCIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5lcG9uc2V0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbmVwb25zZXRfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzYTExMTFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAweDQwMDAwMDAwLAorCQkuZW5kCT0gMHg0MDAwMWZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9ORVBPTlNFVF9TQTExMTEsCisJCS5lbmQJPSBJUlFfTkVQT05TRVRfU0ExMTExLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHU2NCBzYTExMTFfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2ExMTExX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2ExMTExIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLmRtYV9tYXNrID0gJnNhMTExMV9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNhMTExMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNhMTExMV9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gInNtYzkxeC1yZWdzIiwKKwkJLnN0YXJ0CT0gU0ExMTAwX0NTM19QSFlTLAorCQkuZW5kCT0gU0ExMTAwX0NTM19QSFlTICsgMHgwMWZmZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9ORVBPTlNFVF9TTUM5MTk2LAorCQkuZW5kCT0gSVJRX05FUE9OU0VUX1NNQzkxOTYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkubmFtZQk9ICJzbWM5MXgtYXR0cmliIiwKKwkJLnN0YXJ0CT0gU0ExMTAwX0NTM19QSFlTICsgMHgwMjAwMDAwMCwKKwkJLmVuZAk9IFNBMTEwMF9DUzNfUEhZUyArIDB4MDNmZmZmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbWM5MXgiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbWM5MXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzbWM5MXhfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZuZXBvbnNldF9kZXZpY2UsCisJJnNhMTExMV9kZXZpY2UsCisJJnNtYzkxeF9kZXZpY2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBuZXBvbnNldF9pbml0KHZvaWQpCit7CisJZHJpdmVyX3JlZ2lzdGVyKCZuZXBvbnNldF9kZXZpY2VfZHJpdmVyKTsKKworCS8qCisJICogVGhlIE5lcG9uc2V0IGlzIG9ubHkgcHJlc2VudCBvbiB0aGUgQXNzYWJldCBtYWNoaW5lIHR5cGUuCisJICovCisJaWYgKCFtYWNoaW5lX2lzX2Fzc2FiZXQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKgorCSAqIEVuc3VyZSB0aGF0IHRoZSBtZW1vcnkgYnVzIHJlcXVlc3QvZ3JhbnQgc2lnbmFscyBhcmUgc2V0dXAsCisJICogYW5kIHRoZSBncmFudCBpcyBoZWxkIGluIGl0cyBpbmFjdGl2ZSBzdGF0ZSwgd2hldGhlciBvciBub3QKKwkgKiB3ZSBhY3R1YWxseSBoYXZlIGEgTmVwb25zZXQgYXR0YWNoZWQuCisJICovCisJc2ExMTEwX21iX2Rpc2FibGUoKTsKKworCWlmICghbWFjaGluZV9oYXNfbmVwb25zZXQoKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiTmVwb25zZXQgZXhwYW5zaW9uIGJvYXJkIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKFdIT0FNSSAhPSAweDExKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5lcG9uc2V0IGJvYXJkIGRldGVjdGVkLCBidXQgIgorCQkJIndyb25nIElEOiAlMDJ4XG4iLCBXSE9BTUkpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9CisKK3N1YnN5c19pbml0Y2FsbChuZXBvbnNldF9pbml0KTsKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBuZXBvbnNldF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKyAvKiB2aXJ0dWFsICAgICBwaHlzaWNhbCAgICBsZW5ndGggdHlwZSAqLworICB7IDB4ZjMwMDAwMDAsIDB4MTAwMDAwMDAsIFNaXzFNLCBNVF9ERVZJQ0UgfSwgLyogU3lzdGVtIFJlZ2lzdGVycyAqLworICB7IDB4ZjQwMDAwMDAsIDB4NDAwMDAwMDAsIFNaXzFNLCBNVF9ERVZJQ0UgfSAgLyogU0EtMTExMSAqLworfTsKKwordm9pZCBfX2luaXQgbmVwb25zZXRfbWFwX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KG5lcG9uc2V0X2lvX2Rlc2MsIEFSUkFZX1NJWkUobmVwb25zZXRfaW9fZGVzYykpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvcGxlYi5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvcGxlYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MDZiZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9wbGViLmMKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXNhMTEwMC9wbGViLmMKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9zZXJpYWxfc2ExMTAwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisKKy8qCisgKiBFdGhlcm5ldCBJUlEgbWFwcGluZ3MKKyAqLworCisjZGVmaW5lIFBMRUJfRVRIMF9QCQkoMHgyMDAwMDMwMCkJLyogRXRoZXJuZXQgMCBpbiBQQ01DSUEwIElPICovCisjZGVmaW5lIFBMRUJfRVRIMF9WCQkoMHhmNjAwMDMwMCkKKworI2RlZmluZSBHUElPX0VUSDBfSVJRCQlHUElPX0dQSU8oMjEpCisjZGVmaW5lIEdQSU9fRVRIMF9FTgkJR1BJT19HUElPKDI2KQorCisjZGVmaW5lIElSUV9HUElPX0VUSDBfSVJRCUlSUV9HUElPMjEKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAgUExFQl9FVEgwX1AsCisJCS5lbmQJPSAgUExFQl9FVEgwX1AgfCAweDAzZmZmZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorI2lmIDAgLyogQXV0b3Byb2JlIGluc3RlYWQsIHRvIGdldCByaXNpbmcvZmFsbGluZyBlZGdlIGNoYXJhY3RlcmlzdGljIHJpZ2h0ICovCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfR1BJT19FVEgwX0lSUSwKKwkJLmVuZAk9IElSUV9HUElPX0VUSDBfSVJRLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorI2VuZGlmCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtYzkxeCIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtYzkxeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNtYzkxeF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNtYzkxeF9kZXZpY2UsCit9OworCisKKy8qCisgKiBQbGViJ3MgbWVtb3J5IG1hcAorICogaGFzIGZsYXNoIG1lbW9yeSAodHlwaWNhbGx5IDQgb3IgOCBtZWcpIHNlbGVjdGVkIGJ5CisgKiB0aGUgdHdvIFNBMTEwMCBsb3dlc3QgY2hpcCBzZWxlY3Qgb3V0cHV0cy4KKyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwbGViX2ZsYXNoX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gU0ExMTAwX0NTMF9QSFlTLAorCQkuZW5kICAgPSBTQTExMDBfQ1MwX1BIWVMgKyBTWl84TSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBTQTExMDBfQ1MxX1BIWVMsCisJCS5lbmQgICA9IFNBMTEwMF9DUzFfUEhZUyArIFNaXzhNIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGxlYl9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiYmxvYiIsCisJCS5vZmZzZXQgCT0gMCwKKwkJLnNpemUJCT0gMHgwMDAyMDAwMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJrZXJuZWwiLAorCQkub2Zmc2V0IAk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gMHgwMDBlMDAwMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJyb290ZnMiLAorCQkub2Zmc2V0IAk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gMHgwMDMwMDAwMCwKKwl9Cit9OworCisKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBwbGViX2ZsYXNoX2RhdGEgPSB7CisJLm1hcF9uYW1lID0gImNmaV9wcm9iZSIsCisJLnBhcnRzID0gcGxlYl9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUocGxlYl9wYXJ0aXRpb25zKSwKK307CisKKworc3RhdGljIHZvaWQgX19pbml0IHBsZWJfaW5pdCh2b2lkKQoreworCXNhMTF4MF9zZXRfZmxhc2hfZGF0YSgmcGxlYl9mbGFzaF9kYXRhLCBwbGViX2ZsYXNoX3Jlc291cmNlcywKKwkJCSAgICAgIEFSUkFZX1NJWkUocGxlYl9mbGFzaF9yZXNvdXJjZXMpKTsKKworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9CisKKworc3RhdGljIHZvaWQgX19pbml0IHBsZWJfbWFwX2lvKHZvaWQpCit7CisJc2ExMTAwX21hcF9pbygpOworCisJc2ExMTAwX3JlZ2lzdGVyX3VhcnQoMCwgMyk7CisgICAgICAgIHNhMTEwMF9yZWdpc3Rlcl91YXJ0KDEsIDEpOworCisgICAgICAgIEdBRlIgfD0gKEdQSU9fVUFSVF9UWEQgfCBHUElPX1VBUlRfUlhEKTsKKyAgICAgICAgR1BEUiB8PSBHUElPX1VBUlRfVFhEOworICAgICAgICBHUERSICY9IH5HUElPX1VBUlRfUlhEOworICAgICAgICBQUEFSIHw9IFBQQVJfVVBSOworCisJLyoKKwkgKiBGaXggZXhwYW5zaW9uIG1lbW9yeSB0aW1pbmcgZm9yIG5ldHdvcmsgY2FyZAorCSAqLworCU1FQ1IgPSAoKDI8PDEwKSB8ICgyPDw1KSB8ICgyPDwwKSk7CisKKwkvKgorCSAqIEVuYWJsZSB0aGUgU01DIGV0aGVybmV0IGNvbnRyb2xsZXIKKwkgKi8KKwlHUERSIHw9IEdQSU9fRVRIMF9FTjsJLyogc2V0IHRvIG91dHB1dCAqLworCUdQQ1IgID0gR1BJT19FVEgwX0VOOwkvKiBjbGVhciBNQ0xLIChlbmFibGUgc21jKSAqLworCisJR1BEUiAmPSB+R1BJT19FVEgwX0lSUTsKKworCXNldF9pcnFfdHlwZShHUElPX0VUSDBfSVJRLCBJUlFUX0ZBTExJTkcpOworfQorCitNQUNISU5FX1NUQVJUKFBMRUIsICJQTEVCIikKKwlCT09UX01FTSgweGMwMDAwMDAwLCAweDgwMDAwMDAwLCAweGY4MDAwMDAwKQorCU1BUElPKHBsZWJfbWFwX2lvKQorCUlOSVRJUlEoc2ExMTAwX2luaXRfaXJxKQorCS50aW1lcgkJPSAmc2ExMTAwX3RpbWVyLAorCS5pbml0X21hY2hpbmUgICA9IHBsZWJfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9wbS5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzllYTVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvcG0uYwpAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIFNBMTEwMCBQb3dlciBNYW5hZ2VtZW50IFJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxIENsaWZmIEJyYWtlIDxjYnJha2VAYWNjZWxlbnQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICoKKyAqIEhpc3Rvcnk6CisgKgorICogMjAwMS0wMi0wNjoJQ2xpZmYgQnJha2UgICAgICAgICBJbml0aWFsIGNvZGUKKyAqCisgKiAyMDAxLTAyLTI1OglTdWtqYWUgQ2hvIDxzamNob0BlYXN0LmlzaS5lZHU+ICYKKyAqIAkJQ2hlc3RlciBLdW8gPGNoZXN0ZXJAbGludXgub3JnLnR3PgorICogCQkJU2F2ZSBtb3JlIHZhbHVlIGZvciB0aGUgcmVzdW1lIGZ1bmN0aW9uISBTdXBwb3J0CisgKiAJCQlCaXRzeS9Bc3NhYmV0L0ZyZWViaXJkIGJvYXJkCisgKgorICogMjAwMS0wOC0yOToJTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgorICogCQkJQ2xlYW5lZCB1cCwgcHVzaGVkIHBsYXRmb3JtIGRlcGVuZGVudCBzdHVmZgorICogCQkJaW4gdGhlIHBsYXRmb3JtIHNwZWNpZmljIGZpbGVzLgorICoKKyAqIDIwMDItMDUtMjc6CU5pY29sYXMgUGl0cmUJS2lsbGVkIHNsZWVwLmggYW5kIHRoZSBrbWFsbG9jZWQgc2F2ZSBhcnJheS4KKyAqIAkJCQlTdG9yYWdlIGlzIGxvY2FsIG9uIHRoZSBzdGFjayBub3cuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKK2V4dGVybiB2b2lkIHNhMTEwMF9jcHVfc3VzcGVuZCh2b2lkKTsKK2V4dGVybiB2b2lkIHNhMTEwMF9jcHVfcmVzdW1lKHZvaWQpOworCisjZGVmaW5lIFNBVkUoeCkJCXNsZWVwX3NhdmVbU0xFRVBfU0FWRV8jI3hdID0geAorI2RlZmluZSBSRVNUT1JFKHgpCXggPSBzbGVlcF9zYXZlW1NMRUVQX1NBVkVfIyN4XQorCisvKgorICogTGlzdCBvZiBnbG9iYWwgU0ExMXgwIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHRvIHByZXNlcnZlLgorICogTW9yZSBvbmVzIGxpa2UgQ1AgYW5kIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlciB2YWx1ZXMgYXJlIHByZXNlcnZlZAorICogb24gdGhlIHN0YWNrIGFuZCB0aGVuIHRoZSBzdGFjayBwb2ludGVyIGlzIHN0b3JlZCBsYXN0IGluIHNsZWVwLlMuCisgKi8KK2VudW0gewlTTEVFUF9TQVZFX1NQID0gMCwKKworCVNMRUVQX1NBVkVfR1BEUiwgU0xFRVBfU0FWRV9HQUZSLAorCVNMRUVQX1NBVkVfUFBEUiwgU0xFRVBfU0FWRV9QUFNSLCBTTEVFUF9TQVZFX1BQQVIsIFNMRUVQX1NBVkVfUFNEUiwKKworCVNMRUVQX1NBVkVfU2VyMVNEQ1IwLAorCisJU0xFRVBfU0FWRV9TSVpFCit9OworCisKK3N0YXRpYyBpbnQgc2ExMXgwX3BtX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGdwaW8sIHNsZWVwX3NhdmVbU0xFRVBfU0FWRV9TSVpFXTsKKwlzdHJ1Y3QgdGltZXNwZWMgZGVsdGEsIHJ0YzsKKworCWlmIChzdGF0ZSAhPSBQTV9TVVNQRU5EX01FTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBwcmVzZXJ2ZSBjdXJyZW50IHRpbWUgKi8KKwlydGMudHZfc2VjID0gUkNOUjsKKwlydGMudHZfbnNlYyA9IDA7CisJc2F2ZV90aW1lX2RlbHRhKCZkZWx0YSwgJnJ0Yyk7CisJZ3BpbyA9IEdQTFI7CisKKwkvKiBzYXZlIHZpdGFsIHJlZ2lzdGVycyAqLworCVNBVkUoR1BEUik7CisJU0FWRShHQUZSKTsKKworCVNBVkUoUFBEUik7CisJU0FWRShQUFNSKTsKKwlTQVZFKFBQQVIpOworCVNBVkUoUFNEUik7CisKKwlTQVZFKFNlcjFTRENSMCk7CisKKwkvKiBDbGVhciBwcmV2aW91cyByZXNldCBzdGF0dXMgKi8KKwlSQ1NSID0gUkNTUl9IV1IgfCBSQ1NSX1NXUiB8IFJDU1JfV0RSIHwgUkNTUl9TTVI7CisKKwkvKiBzZXQgcmVzdW1lIHJldHVybiBhZGRyZXNzICovCisJUFNQUiA9IHZpcnRfdG9fcGh5cyhzYTExMDBfY3B1X3Jlc3VtZSk7CisKKwkvKiBnbyB6enogKi8KKwlzYTExMDBfY3B1X3N1c3BlbmQoKTsKKworCS8qCisJICogRW5zdXJlIG5vdCB0byBjb21lIGJhY2sgaGVyZSBpZiBpdCB3YXNuJ3QgaW50ZW5kZWQKKwkgKi8KKwlQU1BSID0gMDsKKworCS8qCisJICogRW5zdXJlIGludGVycnVwdCBzb3VyY2VzIGFyZSBkaXNhYmxlZDsgd2Ugd2lsbCByZS1pbml0CisJICogdGhlIGludGVycnVwdCBzdWJzeXN0ZW0gdmlhIHRoZSBkZXZpY2UgbWFuYWdlci4KKwkgKi8KKwlJQ0xSID0gMDsKKwlJQ0NSID0gMTsKKwlJQ01SID0gMDsKKworCS8qIHJlc3RvcmUgcmVnaXN0ZXJzICovCisJUkVTVE9SRShHUERSKTsKKwlSRVNUT1JFKEdBRlIpOworCisJUkVTVE9SRShQUERSKTsKKwlSRVNUT1JFKFBQU1IpOworCVJFU1RPUkUoUFBBUik7CisJUkVTVE9SRShQU0RSKTsKKworCVJFU1RPUkUoU2VyMVNEQ1IwKTsKKworCUdQU1IgPSBncGlvOworCUdQQ1IgPSB+Z3BpbzsKKworCS8qCisJICogQ2xlYXIgdGhlIHBlcmlwaGVyYWwgc2xlZXAtaG9sZCBiaXQuCisJICovCisJUFNTUiA9IFBTU1JfUEg7CisKKwkvKiByZXN0b3JlIGN1cnJlbnQgdGltZSAqLworCXJ0Yy50dl9zZWMgPSBSQ05SOworCXJlc3RvcmVfdGltZV9kZWx0YSgmZGVsdGEsICZydGMpOworCisJcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGxvbmcgc2xlZXBfcGh5c19zcCh2b2lkICpzcCkKK3sKKwlyZXR1cm4gdmlydF90b19waHlzKHNwKTsKK30KKworLyoKKyAqIENhbGxlZCBhZnRlciBwcm9jZXNzZXMgYXJlIGZyb3plbiwgYnV0IGJlZm9yZSB3ZSBzaHV0IGRvd24gZGV2aWNlcy4KKyAqLworc3RhdGljIGludCBzYTExeDBfcG1fcHJlcGFyZShzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxsZWQgYWZ0ZXIgZGV2aWNlcyBhcmUgcmUtc2V0dXAsIGJ1dCBiZWZvcmUgcHJvY2Vzc2VzIGFyZSB0aGF3ZWQuCisgKi8KK3N0YXRpYyBpbnQgc2ExMXgwX3BtX2ZpbmlzaChzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgdG8gUE1fRElTS19GSVJNV0FSRSBzbyB3ZSBjYW4gcXVpY2tseSB2ZXRvIHN1c3BlbmQtdG8tZGlzay4KKyAqLworc3RhdGljIHN0cnVjdCBwbV9vcHMgc2ExMXgwX3BtX29wcyA9IHsKKwkucG1fZGlza19tb2RlCT0gUE1fRElTS19GSVJNV0FSRSwKKwkucHJlcGFyZQk9IHNhMTF4MF9wbV9wcmVwYXJlLAorCS5lbnRlcgkJPSBzYTExeDBfcG1fZW50ZXIsCisJLmZpbmlzaAkJPSBzYTExeDBfcG1fZmluaXNoLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2ExMXgwX3BtX2luaXQodm9pZCkKK3sKKwlwbV9zZXRfb3BzKCZzYTExeDBfcG1fb3BzKTsKKwlyZXR1cm4gMDsKK30KKworbGF0ZV9pbml0Y2FsbChzYTExeDBfcG1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9zaGFubm9uLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9zaGFubm9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRkZGQ1NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3NoYW5ub24uYwpAQCAtMCwwICsxLDg1IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1zYTExMDAvc2hhbm5vbi5jCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9zZXJpYWxfc2ExMTAwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc2hhbm5vbi5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc2hhbm5vbl9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiQkxPQiBib290IGxvYWRlciIsCisJCS5vZmZzZXQJCT0gMCwKKwkJLnNpemUJCT0gMHgyMDAwMAorCX0sCisJeworCQkubmFtZQkJPSAia2VybmVsIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IDB4ZTAwMDAKKwl9LAorCXsgCisJCS5uYW1lCQk9ICJpbml0cmQiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwJCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgc2hhbm5vbl9mbGFzaF9kYXRhID0geworCS5tYXBfbmFtZQk9ICJjZmlfcHJvYmUiLAorCS5wYXJ0cwkJPSBzaGFubm9uX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShzaGFubm9uX3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaGFubm9uX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAkJPSBTQTExMDBfQ1MwX1BIWVMsCisJLmVuZAkJPSBTQTExMDBfQ1MwX1BIWVMgKyBTWl80TSAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHNoYW5ub25faW5pdCh2b2lkKQoreworCXNhMTF4MF9zZXRfZmxhc2hfZGF0YSgmc2hhbm5vbl9mbGFzaF9kYXRhLCAmc2hhbm5vbl9mbGFzaF9yZXNvdXJjZSwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzaGFubm9uX21hcF9pbyh2b2lkKQoreworCXNhMTEwMF9tYXBfaW8oKTsKKworCXNhMTEwMF9yZWdpc3Rlcl91YXJ0KDAsIDMpOworCXNhMTEwMF9yZWdpc3Rlcl91YXJ0KDEsIDEpOworCisJU2VyMVNEQ1IwIHw9IFNEQ1IwX1NVUzsKKwlHQUZSIHw9IChHUElPX1VBUlRfVFhEIHwgR1BJT19VQVJUX1JYRCk7CisJR1BEUiB8PSBHUElPX1VBUlRfVFhEIHwgU0hBTk5PTl9HUElPX0NPREVDX1JFU0VUOworCUdQRFIgJj0gfkdQSU9fVUFSVF9SWEQ7CisJUFBBUiB8PSBQUEFSX1VQUjsKKworCS8qIHJlc2V0IHRoZSBjb2RlYyAqLworCUdQQ1IgPSBTSEFOTk9OX0dQSU9fQ09ERUNfUkVTRVQ7CisJR1BTUiA9IFNIQU5OT05fR1BJT19DT0RFQ19SRVNFVDsKK30KKworTUFDSElORV9TVEFSVChTSEFOTk9OLCAiU2hhbm5vbiAoQUtBOiBUdXhzY3JlZW4pIikKKwlCT09UX01FTSgweGMwMDAwMDAwLCAweDgwMDAwMDAwLCAweGY4MDAwMDAwKQorCUJPT1RfUEFSQU1TKDB4YzAwMDAxMDApCisJTUFQSU8oc2hhbm5vbl9tYXBfaW8pCisJSU5JVElSUShzYTExMDBfaW5pdF9pcnEpCisJLnRpbWVyCQk9ICZzYTExMDBfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IHNoYW5ub25faW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9zaW1wYWQuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3NpbXBhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMTEzZDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9zaW1wYWQuYwpAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtc2ExMTAwL3NpbXBhZC5jCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+IAorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3NlcmlhbF9zYTExMDAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zaW1wYWQuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKK2xvbmcgY3MzX3NoYWRvdzsKKworbG9uZyBnZXRfY3MzX3NoYWRvdyh2b2lkKQoreworCXJldHVybiBjczNfc2hhZG93OworfQorCit2b2lkIHNldF9jczMobG9uZyB2YWx1ZSkKK3sKKwkqKENTM0JVU1RZUEUgKikoQ1MzX0JBU0UpID0gY3MzX3NoYWRvdyA9IHZhbHVlOworfQorCit2b2lkIHNldF9jczNfYml0KGludCB2YWx1ZSkKK3sKKwljczNfc2hhZG93IHw9IHZhbHVlOworCSooQ1MzQlVTVFlQRSAqKShDUzNfQkFTRSkgPSBjczNfc2hhZG93OworfQorCit2b2lkIGNsZWFyX2NzM19iaXQoaW50IHZhbHVlKQoreworCWNzM19zaGFkb3cgJj0gfnZhbHVlOworCSooQ1MzQlVTVFlQRSAqKShDUzNfQkFTRSkgPSBjczNfc2hhZG93OworfQorCitFWFBPUlRfU1lNQk9MKHNldF9jczNfYml0KTsKK0VYUE9SVF9TWU1CT0woY2xlYXJfY3MzX2JpdCk7CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgc2ltcGFkX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworICAgICAgICAvKiB2aXJ0dWFsCXBoeXNpY2FsICAgIGxlbmd0aAl0eXBlICovCisJLyogTVEyMDAgKi8KKwl7IDB4ZjI4MDAwMDAsIDB4NGI4MDAwMDAsIDB4MDA4MDAwMDAsIE1UX0RFVklDRSB9LAorCS8qIFBhdWxlcyBDUzMsIHdyaXRlIG9ubHkgKi8KKwl7IDB4ZjEwMDAwMDAsIDB4MTgwMDAwMDAsIDB4MDAxMDAwMDAsIE1UX0RFVklDRSB9LAorfTsKKworCitzdGF0aWMgdm9pZCBzaW1wYWRfdWFydF9wbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1X2ludCBzdGF0ZSwgdV9pbnQgb2xkc3RhdGUpCit7CisJaWYgKHBvcnQtPm1hcGJhc2UgPT0gKHVfaW50KSZTZXIxVVRDUjApIHsKKwkJaWYgKHN0YXRlKQorCQl7CisJCQljbGVhcl9jczNfYml0KFJTMjMyX09OKTsKKwkJCWNsZWFyX2NzM19iaXQoREVDVF9QT1dFUl9PTik7CisJCX1lbHNlCisJCXsKKwkJCXNldF9jczNfYml0KFJTMjMyX09OKTsKKwkJCXNldF9jczNfYml0KERFQ1RfUE9XRVJfT04pOworCQl9CisJfQorfQorCitzdGF0aWMgc3RydWN0IHNhMTEwMF9wb3J0X2ZucyBzaW1wYWRfcG9ydF9mbnMgX19pbml0ZGF0YSA9IHsKKwkucG0JICAgPSBzaW1wYWRfdWFydF9wbSwKK307CisKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHNpbXBhZF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZSAgICAgICA9ICJTSU1wYWQgYm9vdCBmaXJtd2FyZSIsCisJCS5zaXplICAgICAgID0gMHgwMDA4MDAwMCwKKwkJLm9mZnNldCAgICAgPSAwLAorCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsCisJfSwgeworCQkubmFtZSAgICAgICA9ICJTSU1wYWQga2VybmVsIiwKKwkJLnNpemUgICAgICAgPSAweDAwMTAwMDAsCisJCS5vZmZzZXQgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCX0sIHsKKwkJLm5hbWUgICAgICAgPSAiU0lNcGFkIHJvb3QgamZmczIiLAorCQkuc2l6ZSAgICAgICA9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBzaW1wYWRfZmxhc2hfZGF0YSA9IHsKKwkubWFwX25hbWUgICAgPSAiY2ZpX3Byb2JlIiwKKwkucGFydHMgICAgICAgPSBzaW1wYWRfcGFydGl0aW9ucywKKwkubnJfcGFydHMgICAgPSBBUlJBWV9TSVpFKHNpbXBhZF9wYXJ0aXRpb25zKSwKK307CisKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaW1wYWRfZmxhc2hfcmVzb3VyY2VzIFtdID0geworCXsKKwkJLnN0YXJ0ICAgICA9IFNBMTEwMF9DUzBfUEhZUywKKwkJLmVuZCAgICAgICA9IFNBMTEwMF9DUzBfUEhZUyArIFNaXzE2TSAtMSwKKwkJLmZsYWdzICAgICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ICAgICA9IFNBMTEwMF9DUzFfUEhZUywKKwkJLmVuZCAgICAgICA9IFNBMTEwMF9DUzFfUEhZUyArIFNaXzE2TSAtMSwKKwkJLmZsYWdzICAgICA9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKKworCitzdGF0aWMgdm9pZCBfX2luaXQgc2ltcGFkX21hcF9pbyh2b2lkKQoreworCXNhMTEwMF9tYXBfaW8oKTsKKworCWlvdGFibGVfaW5pdChzaW1wYWRfaW9fZGVzYywgQVJSQVlfU0laRShzaW1wYWRfaW9fZGVzYykpOworCisJc2V0X2NzM19iaXQgKEVOMSB8IEVOMCB8IExFRDJfT04gfCBESVNQTEFZX09OIHwgUlMyMzJfT04gfAorCQkgICAgICBFTkFCTEVfNVYgfCBSRVNFVF9TSU1DQVJEIHwgREVDVF9QT1dFUl9PTik7CisKKworICAgICAgICBzYTExMDBfcmVnaXN0ZXJfdWFydF9mbnMoJnNpbXBhZF9wb3J0X2Zucyk7CisJc2ExMTAwX3JlZ2lzdGVyX3VhcnQoMCwgMyk7ICAvKiBzZXJpYWwgaW50ZXJmYWNlICovCisJc2ExMTAwX3JlZ2lzdGVyX3VhcnQoMSwgMSk7ICAvKiBERUNUICAgICAgICAgICAgICovCisKKwkvLyBSZWFzc2lnbiBVQVJUIDEgcGlucworCUdBRlIgfD0gR1BJT19VQVJUX1RYRCB8IEdQSU9fVUFSVF9SWEQ7CisJR1BEUiB8PSBHUElPX1VBUlRfVFhEIHwgR1BJT19MREQxMyB8IEdQSU9fTEREMTU7CisJR1BEUiAmPSB+R1BJT19VQVJUX1JYRDsKKwlQUEFSIHw9IFBQQVJfVVBSOworCisJLyoKKwkgKiBTZXQgdXAgcmVnaXN0ZXJzIGZvciBzbGVlcCBtb2RlLgorCSAqLworCisKKwlQV0VSID0gUFdFUl9HUElPMHwgUFdFUl9SVEM7CisJUEdTUiA9IDB4ODE4OworCVBDRlIgPSAwOworCVBTRFIgPSAwOworCisJc2ExMXgwX3NldF9mbGFzaF9kYXRhKCZzaW1wYWRfZmxhc2hfZGF0YSwgc2ltcGFkX2ZsYXNoX3Jlc291cmNlcywKKwkJCSAgICAgIEFSUkFZX1NJWkUoc2ltcGFkX2ZsYXNoX3Jlc291cmNlcykpOworfQorCitzdGF0aWMgdm9pZCBzaW1wYWRfcG93ZXJfb2ZmKHZvaWQpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsgLy8gd2FzIGNsaQorCXNldF9jczMoMHg4MDApOyAgICAgICAgLyogb25seSBTRF9NRURJQVEgKi8KKworCS8qIGRpc2FibGUgaW50ZXJuYWwgb3NjaWxsYXRvciwgZmxvYXQgQ1MgbGluZXMgKi8KKwlQQ0ZSID0gKFBDRlJfT1BERSB8IFBDRlJfRlAgfCBQQ0ZSX0ZTKTsKKwkvKiBlbmFibGUgd2FrZS11cCBvbiBHUElPMCAoQXNzYWJldC4uLikgKi8KKwlQV0VSID0gR0ZFUiA9IEdSRVIgPSAxOworCS8qCisJICogc2V0IHNjcmF0Y2hwYWQgdG8gemVybywganVzdCBpbiBjYXNlIGl0IGlzIHVzZWQgYXMgYQorCSAqIHJlc3RhcnQgYWRkcmVzcyBieSB0aGUgYm9vdGxvYWRlci4KKwkgKi8KKwlQU1BSID0gMDsKKwlQR1NSID0gMDsKKwkvKiBlbnRlciBzbGVlcCBtb2RlICovCisJUE1DUiA9IFBNQ1JfU0Y7CisJd2hpbGUoMSk7CisKKwlsb2NhbF9pcnFfZW5hYmxlKCk7IC8qIHdlIHdvbid0IGV2ZXIgY2FsbCBpdCAqLworCisKK30KKworCisvKgorICogTWVkaWFRIFZpZGVvIERldmljZQorICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzaW1wYWRfbXEyMDBmYiA9IHsKKwkubmFtZSA9ICJzaW1wYWQtbXEyMDAiLAorCS5pZCAgID0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2ltcGFkX21xMjAwZmIKK307CisKKworCitzdGF0aWMgaW50IF9faW5pdCBzaW1wYWRfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlwbV9wb3dlcl9vZmYgPSBzaW1wYWRfcG93ZXJfb2ZmOworCisJcmV0ID0gcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisJaWYocmV0KQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJzaW1wYWQ6IFVuYWJsZSB0byByZWdpc3RlciBtcTIwMCBmcmFtZWJ1ZmZlciBkZXZpY2UiKTsKKworCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKHNpbXBhZF9pbml0KTsKKworCitNQUNISU5FX1NUQVJUKFNJTVBBRCwgIlNpbXBhZCIpCisJTUFJTlRBSU5FUigiSG9sZ2VyIEZyZXl0aGVyIikKKwlCT09UX01FTSgweGMwMDAwMDAwLCAweDgwMDAwMDAwLCAweGY4MDAwMDAwKQorICAgICAgICBCT09UX1BBUkFNUygweGMwMDAwMTAwKQorCU1BUElPKHNpbXBhZF9tYXBfaW8pCisJSU5JVElSUShzYTExMDBfaW5pdF9pcnEpCisJLnRpbWVyCQk9ICZzYTExMDBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3NsZWVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhMWUyOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3NsZWVwLlMKQEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiBTQTExeDAgQXNzZW1ibGVyIFNsZWVwL1dha2VVcCBNYW5hZ2VtZW50IFJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxIENsaWZmIEJyYWtlIDxjYnJha2VAYWNjZWxlbnQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICoKKyAqIEhpc3Rvcnk6CisgKgorICogMjAwMS0wMi0wNjogQ2xpZmYgQnJha2UgICAgICAgICBJbml0aWFsIGNvZGUKKyAqCisgKiAyMDAxLTA4LTI5OglOaWNvbGFzIFBpdHJlCVNpbXBsaWZpZWQuCisgKgorICogMjAwMi0wNS0yNzoJTmljb2xhcyBQaXRyZQlSZXZpc2l0ZWQsIG1vcmUgY2xlYW51cCBhbmQgc2ltcGxpZmljYXRpb24uCisgKgkJCQlTdG9yYWdlIGlzIG9uIHRoZSBzdGFjayBub3cuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKworCisJCS50ZXh0CisKKworCisvKgorICogc2ExMTAwX2NwdV9zdXNwZW5kKCkKKyAqCisgKiBDYXVzZXMgc2ExMXgwIHRvIGVudGVyIHNsZWVwIHN0YXRlCisgKgorICovCisKK0VOVFJZKHNhMTEwMF9jcHVfc3VzcGVuZCkKKworCXN0bWZkCXNwISwge3I0IC0gcjEyLCBscn0JCUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKKworCUAgZ2V0IGNvcHJvY2Vzc29yIHJlZ2lzdGVycworCW1yYyAJcDE1LCAwLCByNCwgYzMsIGMwLCAwCQlAIGRvbWFpbiBJRAorCW1yYyAJcDE1LCAwLCByNSwgYzIsIGMwLCAwCQlAIHRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgYWRkcgorCW1yYwlwMTUsIDAsIHI2LCBjMTMsIGMwLCAwCQlAIFBJRAorCW1yYyAJcDE1LCAwLCByNywgYzEsIGMwLCAwCQlAIGNvbnRyb2wgcmVnCisKKwlAIHN0b3JlIHRoZW0gcGx1cyBjdXJyZW50IHZpcnR1YWwgc3RhY2sgcHRyIG9uIHN0YWNrCisJbW92CXI4LCBzcAorCXN0bWZkCXNwISwge3I0IC0gcjh9CisKKwlAIHByZXNlcnZlIHBoeXMgYWRkcmVzcyBvZiBzdGFjaworCW1vdglyMCwgc3AKKwlibAlzbGVlcF9waHlzX3NwCisJbGRyCXIxLCA9c2xlZXBfc2F2ZV9zcAorCXN0cglyMCwgW3IxXQorCisJQCBjbGVhbiBkYXRhIGNhY2hlIGFuZCBpbnZhbGlkYXRlIFdCCisJYmwJdjR3Yl9mbHVzaF9rZXJuX2NhY2hlX2FsbAorCisJQCBkaXNhYmxlIGNsb2NrIHN3aXRjaGluZworCW1jcglwMTUsIDAsIHIxLCBjMTUsIGMyLCAyCisKKyAgICAgICAgQCBBZGp1c3QgbWVtb3J5IHRpbWluZyBiZWZvcmUgbG93ZXJpbmcgQ1BVIGNsb2NrCisJQCBDbG9jayBzcGVlZCBhZGp1c3RtZW50IHdpdGhvdXQgY2hhbmdpbmcgbWVtb3J5IHRpbWluZyBtYWtlcworCUAgQ1BVIGhhbmcgaW4gc29tZSBjYXNlcworICAgICAgICBsZHIgICAgIHIwLCA9TURSRUZSCisgICAgICAgIGxkciAgICAgcjEsIFtyMF0KKyAgICAgICAgb3JyICAgICByMSwgcjEsICNNRFJFRlJfSzFEQjIKKyAgICAgICAgc3RyICAgICByMSwgW3IwXQorCisJQCBkZWxheSA5MHVzIGFuZCBzZXQgQ1BVIFBMTCB0byBsb3dlc3Qgc3BlZWQKKwlAIGZpeGVzIHJlc3VtZSBwcm9ibGVtIG9uIGhpZ2ggc3BlZWQgU0ExMTEwCisJbW92CXIwLCAjOTAKKwlibAlfX3VkZWxheQorCWxkcglyMCwgPVBQQ1IKKwltb3YJcjEsICMwCisJc3RyCXIxLCBbcjBdCisJbW92CXIwLCAjOTAKKwlibAlfX3VkZWxheQorCisJLyoKKwkgKiBTQTExMTAgU0RSQU0gY29udHJvbGxlciB3b3JrYXJvdW5kLiAgcmVnaXN0ZXIgdmFsdWVzOgorCSAqCisJICogcjAgID0gJk1TQzAKKwkgKiByMSAgPSAmTVNDMQorCSAqIHIyICA9ICZNU0MyCisJICogcjMgID0gTVNDMCB2YWx1ZQorCSAqIHI0ICA9IE1TQzEgdmFsdWUKKwkgKiByNSAgPSBNU0MyIHZhbHVlCisJICogcjYgID0gJk1EUkVGUgorCSAqIHI3ICA9IGZpcnN0IE1EUkVGUiB2YWx1ZQorCSAqIHI4ICA9IHNlY29uZCBNRFJFRlIgdmFsdWUKKwkgKiByOSAgPSAmTURDTkZHCisJICogcjEwID0gTURDTkZHIHZhbHVlCisJICogcjExID0gdGhpcmQgTURSRUZSIHZhbHVlCisJICogcjEyID0gJlBNQ1IKKwkgKiByMTMgPSBQTUNSIHZhbHVlICgxKQorCSAqLworCisJbGRyCXIwLCA9TVNDMAorCWxkcglyMSwgPU1TQzEKKwlsZHIJcjIsID1NU0MyCisKKyAgICAgICAgbGRyICAgICByMywgW3IwXQorICAgICAgICBiaWMgICAgIHIzLCByMywgI0ZNc2soTVNDX1JUKQorICAgICAgICBiaWMgICAgIHIzLCByMywgI0ZNc2soTVNDX1JUKTw8MTYKKworICAgICAgICBsZHIgICAgIHI0LCBbcjFdCisgICAgICAgIGJpYyAgICAgcjQsIHI0LCAjRk1zayhNU0NfUlQpCisgICAgICAgIGJpYyAgICAgcjQsIHI0LCAjRk1zayhNU0NfUlQpPDwxNgorCisgICAgICAgIGxkciAgICAgcjUsIFtyMl0KKyAgICAgICAgYmljICAgICByNSwgcjUsICNGTXNrKE1TQ19SVCkKKyAgICAgICAgYmljICAgICByNSwgcjUsICNGTXNrKE1TQ19SVCk8PDE2CisKKyAgICAgICAgbGRyICAgICByNiwgPU1EUkVGUgorCisgICAgICAgIGxkciAgICAgcjcsIFtyNl0KKyAgICAgICAgYmljICAgICByNywgcjcsICMweDAwMDBGRjAwCisgICAgICAgIGJpYyAgICAgcjcsIHI3LCAjMHgwMDAwMDBGMAorICAgICAgICBvcnIgICAgIHI4LCByNywgI01EUkVGUl9TTEZSU0gKKworICAgICAgICBsZHIgICAgIHI5LCA9TURDTkZHCisgICAgICAgIGxkciAgICAgcjEwLCBbcjldCisgICAgICAgIGJpYyAgICAgcjEwLCByMTAsICMoTURDTkZHX0RFMCtNRENORkdfREUxKQorICAgICAgICBiaWMgICAgIHIxMCwgcjEwLCAjKE1EQ05GR19ERTIrTURDTkZHX0RFMykKKworICAgICAgICBiaWMgICAgIHIxMSwgcjgsICNNRFJFRlJfU0xGUlNICisgICAgICAgIGJpYyAgICAgcjExLCByMTEsICNNRFJFRlJfRTFQSU4KKworICAgICAgICBsZHIgICAgIHIxMiwgPVBNQ1IKKworICAgICAgICBtb3YgICAgIHIxMywgI1BNQ1JfU0YKKworCWIJc2ExMTEwX3NkcmFtX2NvbnRyb2xsZXJfZml4CisKKwkuYWxpZ24gNQorc2ExMTEwX3NkcmFtX2NvbnRyb2xsZXJfZml4OgorCisJQCBTdGVwIDEgY2xlYXIgUlQgZmllbGQgb2YgYWxsIE1TQ3ggcmVnaXN0ZXJzCisJc3RyIAlyMywgW3IwXQorCXN0cglyNCwgW3IxXQorCXN0cglyNSwgW3IyXQorCisJQCBTdGVwIDIgY2xlYXIgRFJJIGZpZWxkIGluIE1EUkVGUgorCXN0cglyNywgW3I2XQorCisJQCBTdGVwIDMgc2V0IFNMRlJTSCBiaXQgaW4gTURSRUZSCisJc3RyCXI4LCBbcjZdCisKKwlAIFN0ZXAgNCBjbGVhciBERSBiaXMgaW4gTURDTkZHCisJc3RyCXIxMCwgW3I5XQorCisJQCBTdGVwIDUgY2xlYXIgRFJBTSByZWZyZXNoIGNvbnRyb2wgcmVnaXN0ZXIKKwlzdHIJcjExLCBbcjZdCisKKwlAIFdvdywgbm93IHRoZSBoYXJkd2FyZSBzdXNwZW5kIHJlcXVlc3QgcGlucyBjYW4gYmUgdXNlZCwgdGhhdCBtYWtlcyB0aGVtIGZ1bmN0aW9uYWwgZm9yCisJQCBhYm91dCA3IG5zIG91dCBvZiB0aGUJZW50aXJlIHRpbWUgdGhhdCB0aGUgQ1BVIGlzIHJ1bm5pbmchCisKKwlAIFN0ZXAgNiBzZXQgZm9yY2Ugc2xlZXAgYml0IGluIFBNQ1IKKworCXN0cglyMTMsIFtyMTJdCisKKzIwOgliCTIwYgkJCUAgbG9vcCB3YWl0aW5nIGZvciBzbGVlcAorCisvKgorICogY3B1X3NhMTEwMF9yZXN1bWUoKQorICoKKyAqIGVudHJ5IHBvaW50IGZyb20gYm9vdGxvYWRlciBpbnRvIGtlcm5lbCBkdXJpbmcgcmVzdW1lCisgKgorICogTm90ZTogWWVzLCBwYXJ0IG9mIHRoZSBmb2xsb3dpbmcgY29kZSBpcyBsb2NhdGVkIGludG8gdGhlIC5kYXRhIHNlY3Rpb24uCisgKiAgICAgICBUaGlzIGlzIHRvIGFsbG93IHNsZWVwX3NhdmVfc3AgdG8gYmUgYWNjZXNzZWQgd2l0aCBhIHJlbGF0aXZlIGxvYWQKKyAqICAgICAgIHdoaWxlIHdlIGNhbid0IHJlbHkgb24gYW55IE1NVSB0cmFuc2xhdGlvbi4gIFdlIGNvdWxkIGhhdmUgcHV0CisgKiAgICAgICBzbGVlcF9zYXZlX3NwIGluIHRoZSAudGV4dCBzZWN0aW9uIGFzIHdlbGwsIGJ1dCBzb21lIHNldHVwcyBtaWdodAorICogICAgICAgaW5zaXN0IG9uIGl0IHRvIGJlIHRydWx5IHJlYWQtb25seS4KKyAqLworCisJLmRhdGEKKwkuYWxpZ24gNQorRU5UUlkoc2ExMTAwX2NwdV9yZXN1bWUpCisJbW92CXIwLCAjUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgTU9ERV9TVkMKKwltc3IJY3Bzcl9jLCByMAkJCUAgc2V0IFNWQywgaXJxcyBvZmYKKworCWxkcglyMCwgc2xlZXBfc2F2ZV9zcAkJQCBzdGFjayBwaHlzIGFkZHIKKwlsZHIJcjIsID1yZXN1bWVfYWZ0ZXJfbW11CQlAIGl0cyBhYnNvbHV0ZSB2aXJ0dWFsIGFkZHJlc3MKKwlsZG1mZAlyMCwge3I0IC0gcjcsIHNwfQkJQCBDUCByZWdzICsgdmlydCBzdGFjayBwdHIKKworCW1vdglyMSwgIzAKKwltY3IJcDE1LCAwLCByMSwgYzgsIGM3LCAwICAgCUAgZmx1c2ggSStEIFRMQnMKKwltY3IJcDE1LCAwLCByMSwgYzcsIGM3LCAwCQlAIGZsdXNoIEkmRCBjYWNoZQorCW1jcglwMTUsIDAsIHIxLCBjOSwgYzAsIDAJCUAgaW52YWxpZGF0ZSBSQgorCW1jciAgICAgcDE1LCAwLCByMSwgYzksIGMwLCA1CQlAIGFsbG93IHVzZXIgc3BhY2UgdG8gdXNlIFJCCisKKwltY3IgCXAxNSwgMCwgcjQsIGMzLCBjMCwgMAkJQCBkb21haW4gSUQKKwltY3IgCXAxNSwgMCwgcjUsIGMyLCBjMCwgMAkJQCB0cmFuc2xhdGlvbiB0YWJsZSBiYXNlIGFkZHIKKwltY3IJcDE1LCAwLCByNiwgYzEzLCBjMCwgMAkJQCBQSUQKKwliCXJlc3VtZV90dXJuX29uX21tdQkJQCBjYWNoZSBhbGlnbiBleGVjdXRpb24KKworCS5hbGlnbiA1CityZXN1bWVfdHVybl9vbl9tbXU6CisJbWNyIAlwMTUsIDAsIHI3LCBjMSwgYzAsIDAJCUAgdHVybiBvbiBNTVUsIGNhY2hlcywgZXRjLgorCW5vcAorCW1vdglwYywgcjIJCQkJQCBqdW1wIHRvIHZpcnR1YWwgYWRkcgorCW5vcAorCW5vcAorCW5vcAorCitzbGVlcF9zYXZlX3NwOgorCS53b3JkCTAJCQkJQCBwcmVzZXJ2ZSBzdGFjayBwaHlzIHB0ciBoZXJlCisKKwkudGV4dAorcmVzdW1lX2FmdGVyX21tdToKKwltY3IgICAgIHAxNSwgMCwgcjEsIGMxNSwgYzEsIDIJCUAgZW5hYmxlIGNsb2NrIHN3aXRjaGluZworCWxkbWZkCXNwISwge3I0IC0gcjEyLCBwY30JCUAgcmV0dXJuIHRvIGNhbGxlcgorCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3NzcC5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvc3NwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYwNGRhZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3NzcC5jCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtc2ExMTAwL3NzcC5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMyBSdXNzZWxsIEtpbmcuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgR2VuZXJpYyBTU1AgZHJpdmVyLiAgVGhpcyBwcm92aWRlcyB0aGUgZ2VuZXJpYyBjb3JlIGZvciBzaW1wbGUKKyAqICBJTy1iYXNlZCBTU1AgYXBwbGljYXRpb25zLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc3NwLmg+CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzc3BfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHN0YXR1cyA9IFNlcjRTU1NSOworCisJaWYgKHN0YXR1cyAmIFNTU1JfUk9SKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNTUDogcmVjZWl2ZXIgb3ZlcnJ1blxuIik7CisJfQorCisJU2VyNFNTU1IgPSBTU1NSX1JPUjsKKworCXJldHVybiBzdGF0dXMgPyBJUlFfSEFORExFRCA6IElSUV9OT05FOworfQorCisvKioKKyAqIHNzcF93cml0ZV93b3JkIC0gd3JpdGUgYSB3b3JkIHRvIHRoZSBTU1AgcG9ydAorICogQGRhdGE6IDE2LWJpdCwgTVNCIGp1c3RpZmllZCBkYXRhIHRvIHdyaXRlLgorICoKKyAqIFdhaXQgZm9yIGEgZnJlZSBlbnRyeSBpbiB0aGUgU1NQIHRyYW5zbWl0IEZJRk8sIGFuZCB3cml0ZSBhIGRhdGEKKyAqIHdvcmQgdG8gdGhlIFNTUCBwb3J0LiAgV2FpdCBmb3IgdGhlIFNTUCBwb3J0IHRvIHN0YXJ0IHNlbmRpbmcKKyAqIHRoZSBkYXRhLgorICoKKyAqIFRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gcGVyZm9ybSB0aGUgbmVjZXNzYXJ5IGxvY2tpbmcuCisgKgorICogUmV0dXJuczoKKyAqICAgJS1FVElNRURPVVQJdGltZW91dCBvY2N1cnJlZCAoZm9yIGZ1dHVyZSkKKyAqICAgMAkJCXN1Y2Nlc3MKKyAqLworaW50IHNzcF93cml0ZV93b3JkKHUxNiBkYXRhKQoreworCXdoaWxlICghKFNlcjRTU1NSICYgU1NTUl9UTkYpKQorCQljcHVfcmVsYXgoKTsKKworCVNlcjRTU0RSID0gZGF0YTsKKworCXdoaWxlICghKFNlcjRTU1NSICYgU1NTUl9CU1kpKQorCQljcHVfcmVsYXgoKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHNzcF9yZWFkX3dvcmQgLSByZWFkIGEgd29yZCBmcm9tIHRoZSBTU1AgcG9ydAorICoKKyAqIFdhaXQgZm9yIGEgZGF0YSB3b3JkIGluIHRoZSBTU1AgcmVjZWl2ZSBGSUZPLCBhbmQgcmV0dXJuIHRoZQorICogcmVjZWl2ZWQgZGF0YS4gIERhdGEgaXMgTFNCIGp1c3RpZmllZC4KKyAqCisgKiBOb3RlOiBDdXJyZW50bHksIGlmIGRhdGEgaXMgbm90IGV4cGVjdGVkIHRvIGJlIHJlY2VpdmVkLCB0aGlzCisgKiBmdW5jdGlvbiB3aWxsIHdhaXQgZm9yIGV2ZXIuCisgKgorICogVGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBwZXJmb3JtIHRoZSBuZWNlc3NhcnkgbG9ja2luZy4KKyAqCisgKiBSZXR1cm5zOgorICogICAlLUVUSU1FRE9VVAl0aW1lb3V0IG9jY3VycmVkIChmb3IgZnV0dXJlKQorICogICAxNi1iaXQgZGF0YQlzdWNjZXNzCisgKi8KK2ludCBzc3BfcmVhZF93b3JkKHZvaWQpCit7CisJd2hpbGUgKCEoU2VyNFNTU1IgJiBTU1NSX1JORSkpCisJCWNwdV9yZWxheCgpOworCisJcmV0dXJuIFNlcjRTU0RSOworfQorCisvKioKKyAqIHNzcF9mbHVzaCAtIGZsdXNoIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBGSUZPcworICoKKyAqIFdhaXQgZm9yIHRoZSBTU1AgdG8gaWRsZSwgYW5kIGVuc3VyZSB0aGF0IHRoZSByZWNlaXZlIEZJRk8KKyAqIGlzIGVtcHR5LgorICoKKyAqIFRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gcGVyZm9ybSB0aGUgbmVjZXNzYXJ5IGxvY2tpbmcuCisgKi8KK3ZvaWQgc3NwX2ZsdXNoKHZvaWQpCit7CisJZG8geworCQl3aGlsZSAoU2VyNFNTU1IgJiBTU1NSX1JORSkgeworCQkJKHZvaWQpIFNlcjRTU0RSOworCQl9CisJfSB3aGlsZSAoU2VyNFNTU1IgJiBTU1NSX0JTWSk7Cit9CisKKy8qKgorICogc3NwX2VuYWJsZSAtIGVuYWJsZSB0aGUgU1NQIHBvcnQKKyAqCisgKiBUdXJuIG9uIHRoZSBTU1AgcG9ydC4KKyAqLwordm9pZCBzc3BfZW5hYmxlKHZvaWQpCit7CisJU2VyNFNTQ1IwIHw9IFNTQ1IwX1NTRTsKK30KKworLyoqCisgKiBzc3BfZGlzYWJsZSAtIHNodXQgZG93biB0aGUgU1NQIHBvcnQKKyAqCisgKiBUdXJuIG9mZiB0aGUgU1NQIHBvcnQsIG9wdGlvbmFsbHkgcG93ZXJpbmcgaXQgZG93bi4KKyAqLwordm9pZCBzc3BfZGlzYWJsZSh2b2lkKQoreworCVNlcjRTU0NSMCAmPSB+U1NDUjBfU1NFOworfQorCisvKioKKyAqIHNzcF9zYXZlX3N0YXRlIC0gc2F2ZSB0aGUgU1NQIGNvbmZpZ3VyYXRpb24KKyAqIEBzc3A6IHBvaW50ZXIgdG8gc3RydWN0dXJlIHRvIHNhdmUgU1NQIGNvbmZpZ3VyYXRpb24KKyAqCisgKiBTYXZlIHRoZSBjb25maWd1cmVkIFNTUCBzdGF0ZSBmb3Igc3VzcGVuZC4KKyAqLwordm9pZCBzc3Bfc2F2ZV9zdGF0ZShzdHJ1Y3Qgc3NwX3N0YXRlICpzc3ApCit7CisJc3NwLT5jcjAgPSBTZXI0U1NDUjA7CisJc3NwLT5jcjEgPSBTZXI0U1NDUjE7CisKKwlTZXI0U1NDUjAgJj0gflNTQ1IwX1NTRTsKK30KKworLyoqCisgKiBzc3BfcmVzdG9yZV9zdGF0ZSAtIHJlc3RvcmUgYSBwcmV2aW91c2x5IHNhdmVkIFNTUCBjb25maWd1cmF0aW9uCisgKiBAc3NwOiBwb2ludGVyIHRvIGNvbmZpZ3VyYXRpb24gc2F2ZWQgYnkgc3NwX3NhdmVfc3RhdGUKKyAqCisgKiBSZXN0b3JlIHRoZSBTU1AgY29uZmlndXJhdGlvbiBzYXZlZCBwcmV2aW91c2x5IGJ5IHNzcF9zYXZlX3N0YXRlLgorICovCit2b2lkIHNzcF9yZXN0b3JlX3N0YXRlKHN0cnVjdCBzc3Bfc3RhdGUgKnNzcCkKK3sKKwlTZXI0U1NTUiA9IFNTU1JfUk9SOworCisJU2VyNFNTQ1IwID0gc3NwLT5jcjAgJiB+U1NDUjBfU1NFOworCVNlcjRTU0NSMSA9IHNzcC0+Y3IxOworCVNlcjRTU0NSMCA9IHNzcC0+Y3IwOworfQorCisvKioKKyAqIHNzcF9pbml0IC0gc2V0dXAgdGhlIFNTUCBwb3J0CisgKgorICogaW5pdGlhbGlzZSBhbmQgY2xhaW0gcmVzb3VyY2VzIGZvciB0aGUgU1NQIHBvcnQuCisgKgorICogUmV0dXJuczoKKyAqICAgJS1FTk9ERVYJaWYgdGhlIFNTUCBwb3J0IGlzIHVuYXZhaWxhYmxlCisgKiAgICUtRUJVU1kJaWYgdGhlIHJlc291cmNlcyBhcmUgYWxyZWFkeSBpbiB1c2UKKyAqICAgJTAJCW9uIHN1Y2Nlc3MKKyAqLworaW50IHNzcF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWlmICghKFBQQVIgJiBQUEFSX1NQUikgJiYgKFNlcjRNQ0NSMCAmIE1DQ1IwX01DRSkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oX19QUkVHKFNlcjRTU0NSMCksIDB4MTgsICJTU1AiKSkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCVNlcjRTU1NSID0gU1NTUl9ST1I7CisKKwlyZXQgPSByZXF1ZXN0X2lycShJUlFfU2VyNFNTUCwgc3NwX2ludGVycnVwdCwgMCwgIlNTUCIsIE5VTEwpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3JlZ2lvbjsKKworCXJldHVybiAwOworCisgb3V0X3JlZ2lvbjoKKwlyZWxlYXNlX21lbV9yZWdpb24oX19QUkVHKFNlcjRTU0NSMCksIDB4MTgpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogc3NwX2V4aXQgLSB1bmRvIHRoZSBlZmZlY3RzIG9mIHNzcF9pbml0CisgKgorICogcmVsZWFzZSBhbmQgZnJlZSByZXNvdXJjZXMgZm9yIHRoZSBTU1AgcG9ydC4KKyAqLwordm9pZCBzc3BfZXhpdCh2b2lkKQoreworCVNlcjRTU0NSMCAmPSB+U1NDUjBfU1NFOworCisJZnJlZV9pcnEoSVJRX1NlcjRTU1AsIE5VTEwpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihfX1BSRUcoU2VyNFNTQ1IwKSwgMHgxOCk7Cit9CisKK01PRFVMRV9BVVRIT1IoIlJ1c3NlbGwgS2luZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTQTExeDAgU1NQIFBJTyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworRVhQT1JUX1NZTUJPTChzc3Bfd3JpdGVfd29yZCk7CitFWFBPUlRfU1lNQk9MKHNzcF9yZWFkX3dvcmQpOworRVhQT1JUX1NZTUJPTChzc3BfZmx1c2gpOworRVhQT1JUX1NZTUJPTChzc3BfZW5hYmxlKTsKK0VYUE9SVF9TWU1CT0woc3NwX2Rpc2FibGUpOworRVhQT1JUX1NZTUJPTChzc3Bfc2F2ZV9zdGF0ZSk7CitFWFBPUlRfU1lNQk9MKHNzcF9yZXN0b3JlX3N0YXRlKTsKK0VYUE9SVF9TWU1CT0woc3NwX2luaXQpOworRVhQT1JUX1NZTUJPTChzc3BfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliMGMwZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYwpAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBEZWJvcmFoIFdhbGxhY2guCisgKiBUd2lkZGxlcyAgKEMpIDE5OTkgCUh1Z28gRmllbm5lcyA8aHVnb0BlbXBlZy5jb20+CisgKiAKKyAqIDIwMDAvMDMvMjkgKEMpIE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KKyAqCVJld3JpdHRlbjogYmlnIGNsZWFudXAsIG11Y2ggc2ltcGxlciwgYmV0dGVyIEhaIGFjY3VyYWN5LgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKyNkZWZpbmUgUlRDX0RFRl9ESVZJREVSCQkoMzI3NjggLSAxKQorI2RlZmluZSBSVENfREVGX1RSSU0gICAgICAgICAgICAwCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBzYTExMDBfZ2V0X3J0Y190aW1lKHZvaWQpCit7CisJLyoKKwkgKiBBY2NvcmRpbmcgdG8gdGhlIG1hbnVhbCB3ZSBzaG91bGQgYmUgYWJsZSB0byBsZXQgUlRUUiBiZSB6ZXJvCisJICogYW5kIHRoZW4gYSBkZWZhdWx0IGRpdmlzZXIgZm9yIGEgMzIuNzY4S0h6IGNsb2NrIGlzIHVzZWQuCisJICogQXBwYXJlbnRseSB0aGlzIGRvZXNuJ3Qgd29yaywgYXQgbGVhc3QgZm9yIG15IFNBMTExMCByZXYgNS4KKwkgKiBJZiB0aGUgY2xvY2sgZGl2aWRlciBpcyB1bmluaXRpYWxpemVkIHRoZW4gcmVzZXQgaXQgdG8gdGhlCisJICogZGVmYXVsdCB2YWx1ZSB0byBnZXQgdGhlIDFIeiBjbG9jay4KKwkgKi8KKwlpZiAoUlRUUiA9PSAwKSB7CisJCVJUVFIgPSBSVENfREVGX0RJVklERVIgKyAoUlRDX0RFRl9UUklNIDw8IDE2KTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogdW5pbml0aWFsaXplZCBSZWFsIFRpbWUgQ2xvY2tcbiIpOworCQkvKiBUaGUgY3VycmVudCBSVEMgdmFsdWUgcHJvYmFibHkgZG9lc24ndCBtYWtlIHNlbnNlIGVpdGhlciAqLworCQlSQ05SID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBSQ05SOworfQorCitzdGF0aWMgaW50IHNhMTEwMF9zZXRfcnRjKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBjdXJyZW50X3RpbWUgPSB4dGltZS50dl9zZWM7CisKKwlpZiAoUlRTUiAmIFJUU1JfQUxFKSB7CisJCS8qIG1ha2Ugc3VyZSBub3QgdG8gZm9yd2FyZCB0aGUgY2xvY2sgb3ZlciBhbiBhbGFybSAqLworCQl1bnNpZ25lZCBsb25nIGFsYXJtID0gUlRBUjsKKwkJaWYgKGN1cnJlbnRfdGltZSA+PSBhbGFybSAmJiBhbGFybSA+PSBSQ05SKQorCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisJUkNOUiA9IGN1cnJlbnRfdGltZTsKKwlyZXR1cm4gMDsKK30KKworLyogSVJRcyBhcmUgZGlzYWJsZWQgYmVmb3JlIGVudGVyaW5nIGhlcmUgZnJvbSBkb19nZXR0aW1lb2ZkYXkoKSAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2ExMTAwX2dldHRpbWVvZmZzZXQgKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB0aWNrc190b19tYXRjaCwgZWxhcHNlZCwgdXNlYzsKKworCS8qIEdldCB0aWNrcyBiZWZvcmUgbmV4dCB0aW1lciBtYXRjaCAqLworCXRpY2tzX3RvX21hdGNoID0gT1NNUjAgLSBPU0NSOworCisJLyogV2UgbmVlZCBlbGFwc2VkIHRpY2tzIHNpbmNlIGxhc3QgbWF0Y2ggKi8KKwllbGFwc2VkID0gTEFUQ0ggLSB0aWNrc190b19tYXRjaDsKKworCS8qIE5vdyBjb252ZXJ0IHRoZW0gdG8gdXNlYyAqLworCXVzZWMgPSAodW5zaWduZWQgbG9uZykoZWxhcHNlZCAqICh0aWNrX25zZWMgLyAxMDAwKSkvTEFUQ0g7CisKKwlyZXR1cm4gdXNlYzsKK30KKworLyoKKyAqIFdlIHdpbGwgYmUgZW50ZXJlZCB3aXRoIElSUXMgZW5hYmxlZC4KKyAqCisgKiBMb29wIHVudGlsIHdlIGdldCBhaGVhZCBvZiB0aGUgZnJlZSBydW5uaW5nIHRpbWVyLgorICogVGhpcyBlbnN1cmVzIGFuIGV4YWN0IGNsb2NrIHRpY2sgY291bnQgYW5kIHRpbWUgYWNjdXJhY3kuCisgKiBJUlFzIGFyZSBkaXNhYmxlZCBpbnNpZGUgdGhlIGxvb3AgdG8gZW5zdXJlIGNvaGVyZW5jZSBiZXR3ZWVuCisgKiBsb3N0X3RpY2tzICh1cGRhdGVkIGluIGRvX3RpbWVyKCkpIGFuZCB0aGUgbWF0Y2ggcmVnIHZhbHVlLCBzbyB3ZQorICogY2FuIHVzZSBkb19nZXR0aW1lb2ZkYXkoKSBmcm9tIGludGVycnVwdCBoYW5kbGVycy4KKyAqLworc3RhdGljIGlycXJldHVybl90CitzYTExMDBfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IG5leHRfbWF0Y2g7CisKKwl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKKworCWRvIHsKKwkJdGltZXJfdGljayhyZWdzKTsKKwkJT1NTUiA9IE9TU1JfTTA7ICAvKiBDbGVhciBtYXRjaCBvbiB0aW1lciAwICovCisJCW5leHRfbWF0Y2ggPSAoT1NNUjAgKz0gTEFUQ0gpOworCX0gd2hpbGUgKChzaWduZWQgbG9uZykobmV4dF9tYXRjaCAtIE9TQ1IpIDw9IDApOworCisJd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gc2ExMTAwX3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAiU0ExMXh4IFRpbWVyIFRpY2siLAorCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLmhhbmRsZXIJPSBzYTExMDBfdGltZXJfaW50ZXJydXB0Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc2ExMTAwX3RpbWVyX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgdHY7CisKKwlzZXRfcnRjID0gc2ExMTAwX3NldF9ydGM7CisKKwl0di50dl9uc2VjID0gMDsKKwl0di50dl9zZWMgPSBzYTExMDBfZ2V0X3J0Y190aW1lKCk7CisJZG9fc2V0dGltZW9mZGF5KCZ0dik7CisKKwlPU01SMCA9IDA7CQkvKiBzZXQgaW5pdGlhbCBtYXRjaCBhdCAwICovCisJT1NTUiA9IDB4ZjsJCS8qIGNsZWFyIHN0YXR1cyBvbiBhbGwgdGltZXJzICovCisJc2V0dXBfaXJxKElSUV9PU1QwLCAmc2ExMTAwX3RpbWVyX2lycSk7CisJT0lFUiB8PSBPSUVSX0UwOwkvKiBlbmFibGUgbWF0Y2ggb24gdGltZXIgMCB0byBjYXVzZSBpbnRlcnJ1cHRzICovCisJT1NDUiA9IDA7CQkvKiBpbml0aWFsaXplIGZyZWUtcnVubmluZyB0aW1lciwgZm9yY2UgZmlyc3QgbWF0Y2ggKi8KK30KKworI2lmZGVmIENPTkZJR19QTQordW5zaWduZWQgbG9uZyBvc21yWzRdLCBvaWVyOworCitzdGF0aWMgdm9pZCBzYTExMDBfdGltZXJfc3VzcGVuZCh2b2lkKQoreworCW9zbXJbMF0gPSBPU01SMDsKKwlvc21yWzFdID0gT1NNUjE7CisJb3NtclsyXSA9IE9TTVIyOworCW9zbXJbM10gPSBPU01SMzsKKwlvaWVyID0gT0lFUjsKK30KKworc3RhdGljIHZvaWQgc2ExMTAwX3RpbWVyX3Jlc3VtZSh2b2lkKQoreworCU9TU1IgPSAweDBmOworCU9TTVIwID0gb3NtclswXTsKKwlPU01SMSA9IG9zbXJbMV07CisJT1NNUjIgPSBvc21yWzJdOworCU9TTVIzID0gb3NtclszXTsKKwlPSUVSID0gb2llcjsKKworCS8qCisJICogT1NNUjAgaXMgdGhlIHN5c3RlbSB0aW1lcjogbWFrZSBzdXJlIE9TQ1IgaXMgc3VmZmljaWVudGx5IGJlaGluZAorCSAqLworCU9TQ1IgPSBPU01SMCAtIExBVENIOworfQorI2Vsc2UKKyNkZWZpbmUgc2ExMTAwX3RpbWVyX3N1c3BlbmQgTlVMTAorI2RlZmluZSBzYTExMDBfdGltZXJfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdHJ1Y3Qgc3lzX3RpbWVyIHNhMTEwMF90aW1lciA9IHsKKwkuaW5pdAkJPSBzYTExMDBfdGltZXJfaW5pdCwKKwkuc3VzcGVuZAk9IHNhMTEwMF90aW1lcl9zdXNwZW5kLAorCS5yZXN1bWUJCT0gc2ExMTAwX3RpbWVyX3Jlc3VtZSwKKwkub2Zmc2V0CQk9IHNhMTEwMF9nZXR0aW1lb2Zmc2V0LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2hhcmsvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXNoYXJrL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YmU5YjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNoYXJrL01ha2VmaWxlCkBAIC0wLDAgKzEsMTIgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisjCisKKyMgT2JqZWN0IGZpbGUgbGlzdHMuCisKK29iai15CQkJOj0gY29yZS5vIGRtYS5vIGlycS5vIHBjaS5vCitvYmotbQkJCTo9CitvYmotbgkJCTo9CitvYmotCQkJOj0KKworb2JqLSQoQ09ORklHX0xFRFMpCSs9IGxlZHMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaGFyay9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1zaGFyay9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMjBmOGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNoYXJrL01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSwyIEBACisgICB6cmVsYWRkci15CTo9IDB4MDgwMDgwMDAKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaGFyay9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXNoYXJrL2NvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWJjNWQwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9jb3JlLmMKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1zaGFyay9hcmNoLmMKKyAqCisgKiAgQXJjaGl0ZWN0dXJlIHNwZWNpZmljIHN0dWZmLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vcGFyYW0uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5pb2Jhc2UJCT0gMHgzZjgsCisJCS5pcnEJCT0gNCwKKwkJLnVhcnRjbGsJPSAxODQzMjAwLAorCQkucmVnc2hpZnQJPSAyLAorCQkuaW90eXBlCQk9IFVQSU9fUE9SVCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwKKwl9LAorCXsKKwkJLmlvYmFzZQkJPSAweDJmOCwKKwkJLmlycQkJPSAzLAorCQkudWFydGNsawk9IDE4NDMyMDAsCisJCS5yZWdzaGlmdAk9IDIsCisJCS5pb3R5cGUJCT0gVVBJT19QT1JULAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNULAorCX0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2VyaWFsX2RldmljZSA9IHsKKwkubmFtZQkJCT0gInNlcmlhbDgyNTAiLAorCS5pZAkJCT0gMCwKKwkuZGV2CQkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gc2VyaWFsX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoYXJrX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKG1hY2hpbmVfaXNfc2hhcmsoKSkKKwkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZXJpYWxfZGV2aWNlKTsKKworCXJldHVybiByZXQ7Cit9CisKK2FyY2hfaW5pdGNhbGwoc2hhcmtfaW5pdCk7CisKK2V4dGVybiB2b2lkIHNoYXJrX2luaXRfaXJxKHZvaWQpOworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHNoYXJrX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsgSU9fQkFTRQksIElPX1NUQVJUCSwgSU9fU0laRQksIE1UX0RFVklDRSB9Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc2hhcmtfbWFwX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KHNoYXJrX2lvX2Rlc2MsIEFSUkFZX1NJWkUoc2hhcmtfaW9fZGVzYykpOworfQorCisjZGVmaW5lIElSUV9USU1FUiAwCisjZGVmaW5lIEhaX1RJTUUgKCgxMTkzMTgwICsgSFovMikgLyBIWikKKworc3RhdGljIGlycXJldHVybl90CitzaGFya190aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKKwl0aW1lcl90aWNrKHJlZ3MpOworCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBzaGFya190aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gIlNoYXJrIFRpbWVyIFRpY2siLAorCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLmhhbmRsZXIJPSBzaGFya190aW1lcl9pbnRlcnJ1cHQKK307CisKKy8qCisgKiBTZXQgdXAgdGltZXIgaW50ZXJydXB0LCBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgaW4gc2Vjb25kcy4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHNoYXJrX3RpbWVyX2luaXQodm9pZCkKK3sKKwlvdXRiKDB4MzQsIDB4NDMpOyAgICAgICAgICAgICAgIC8qIGJpbmFyeSwgbW9kZSAwLCBMU0IvTVNCLCBDaCAwICovCisJb3V0YihIWl9USU1FICYgMHhmZiwgMHg0MCk7ICAgICAvKiBMU0Igb2YgY291bnQgKi8KKwlvdXRiKEhaX1RJTUUgPj4gOCwgMHg0MCk7CisKKwlzZXR1cF9pcnEoSVJRX1RJTUVSLCAmc2hhcmtfdGltZXJfaXJxKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgc2hhcmtfdGltZXIgPSB7CisJLmluaXQJCT0gc2hhcmtfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoU0hBUkssICJTaGFyayIpCisJTUFJTlRBSU5FUigiQWxleGFuZGVyIFNjaHVseiIpCisJQk9PVF9NRU0oMHgwODAwMDAwMCwgMHg0MDAwMDAwMCwgMHhlMDAwMDAwMCkKKwlCT09UX1BBUkFNUygweDA4MDAzMDAwKQorCU1BUElPKHNoYXJrX21hcF9pbykKKwlJTklUSVJRKHNoYXJrX2luaXRfaXJxKQorCS50aW1lcgkJPSAmc2hhcmtfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaGFyay9kbWEuYyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM1OTg5YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvZG1hLmMKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXNoYXJrL2RtYS5jCisgKgorICogIGJ5IEFsZXhhbmRlciBTY2h1bHoKKyAqCisgKiAgZGVyaXZlZCBmcm9tOgorICogIGFyY2gvYXJtL2tlcm5lbC9kbWEtZWJzYTI4NS5jCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4IFBoaWwgQmx1bmRlbGwKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2RtYS5oPgorCit2b2lkIF9faW5pdCBhcmNoX2RtYV9pbml0KGRtYV90ICpkbWEpCit7CisjaWZkZWYgQ09ORklHX0lTQV9ETUEKKwlpc2FfaW5pdF9kbWEoZG1hKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pcnEuYyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNiNjdiZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaXJxLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1zaGFyay9pcnEuYworICoKKyAqIGJ5IEFsZXhhbmRlciBTY2h1bHoKKyAqCisgKiBkZXJpdmVkIGZyb20gbGludXgvYXJjaC9wcGMva2VybmVsL2k4MjU5LmMgYW5kOgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9pcnEuaAorICogQ29weXJpZ2h0IChDKSAxOTk2LTE5OTggUnVzc2VsbCBLaW5nCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisvKgorICogODI1OUEgUElDIGZ1bmN0aW9ucyB0byBoYW5kbGUgSVNBIGRldmljZXM6CisgKi8KKworLyoKKyAqIFRoaXMgY29udGFpbnMgdGhlIGlycSBtYXNrIGZvciBib3RoIDgyNTlBIGlycSBjb250cm9sbGVycywKKyAqIExldCB0aHJvdWdoIHRoZSBjYXNjYWRlLWludGVycnVwdCBuby4gMiAoZmYtKDE8PDIpPT1mYikKKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgY2FjaGVkX2lycV9tYXNrWzJdID0geyAweGZiLCAweGZmIH07CisKKy8qCisgKiBUaGVzZSBoYXZlIHRvIGJlIHByb3RlY3RlZCBieSB0aGUgaXJxIGNvbnRyb2xsZXIgc3BpbmxvY2sKKyAqIGJlZm9yZSBiZWluZyBjYWxsZWQuCisgKi8KK3N0YXRpYyB2b2lkIHNoYXJrX2Rpc2FibGVfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IG1hc2s7CisJaWYgKGlycTw4KSB7CisJICBtYXNrID0gMSA8PCBpcnE7CisJICBjYWNoZWRfaXJxX21hc2tbMF0gfD0gbWFzazsKKwkgIG91dGIoY2FjaGVkX2lycV9tYXNrWzFdLDB4QTEpOworCX0gZWxzZSB7CisJICBtYXNrID0gMSA8PCAoaXJxLTgpOworCSAgY2FjaGVkX2lycV9tYXNrWzFdIHw9IG1hc2s7CisJICBvdXRiKGNhY2hlZF9pcnFfbWFza1swXSwweDIxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNoYXJrX2VuYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzazsKKwlpZiAoaXJxPDgpIHsKKwkgIG1hc2sgPSB+KDEgPDwgaXJxKTsKKwkgIGNhY2hlZF9pcnFfbWFza1swXSAmPSBtYXNrOworCSAgb3V0YihjYWNoZWRfaXJxX21hc2tbMF0sMHgyMSk7CisJfSBlbHNlIHsKKwkgIG1hc2sgPSB+KDEgPDwgKGlycS04KSk7CisJICBjYWNoZWRfaXJxX21hc2tbMV0gJj0gbWFzazsKKwkgIG91dGIoY2FjaGVkX2lycV9tYXNrWzFdLDB4QTEpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hhcmtfYWNrXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKXt9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBib2d1c19pbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlwcmludGsoIkdvdCBpbnRlcnJ1cHQgJWkhXG4iLGlycSk7CisJcmV0dXJuIElSUV9OT05FOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBjYXNjYWRlOworCitzdGF0aWMgc3RydWN0IGlycWNoaXAgZmJfY2hpcCA9IHsKKwkuYWNrCT0gc2hhcmtfYWNrXzgyNTlBX2lycSwKKwkubWFzawk9IHNoYXJrX2Rpc2FibGVfODI1OUFfaXJxLAorCS51bm1hc2sgPSBzaGFya19lbmFibGVfODI1OUFfaXJxLAorfTsKKwordm9pZCBfX2luaXQgc2hhcmtfaW5pdF9pcnEodm9pZCkKK3sKKwlpbnQgaXJxOworCisJZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTOyBpcnErKykgeworCQlzZXRfaXJxX2NoaXAoaXJxLCAmZmJfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2VkZ2VfSVJRKTsKKwkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKKwl9CisKKwkvKiBpbml0IG1hc3RlciBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCW91dGIoMHgxMSwgMHgyMCk7IC8qIFN0YXJ0IGluaXQgc2VxdWVuY2UsIGVkZ2UgdHJpZ2dlcmVkIChsZXZlbDogMHgxOSkqLworCW91dGIoMHgwMCwgMHgyMSk7IC8qIFZlY3RvciBiYXNlICovCisJb3V0YigweDA0LCAweDIxKTsgLyogQ2FzY2FkZSAoc2xhdmUpIG9uIElSUTIgKi8KKwlvdXRiKDB4MDMsIDB4MjEpOyAvKiBTZWxlY3QgODA4NiBtb2RlICwgYXV0byBlb2kqLworCW91dGIoMHgwQSwgMHgyMCk7CisJLyogaW5pdCBzbGF2ZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCW91dGIoMHgxMSwgMHhBMCk7IC8qIFN0YXJ0IGluaXQgc2VxdWVuY2UsIGVkZ2UgdHJpZ2dlcmVkICovCisJb3V0YigweDA4LCAweEExKTsgLyogVmVjdG9yIGJhc2UgKi8KKwlvdXRiKDB4MDIsIDB4QTEpOyAvKiBDYXNjYWRlIChzbGF2ZSkgb24gSVJRMiAqLworCW91dGIoMHgwMywgMHhBMSk7IC8qIFNlbGVjdCA4MDg2IG1vZGUsIGF1dG8gZW9pICovCisJb3V0YigweDBBLCAweEEwKTsKKwlvdXRiKGNhY2hlZF9pcnFfbWFza1sxXSwweEExKTsKKwlvdXRiKGNhY2hlZF9pcnFfbWFza1swXSwweDIxKTsKKwkvL3JlcXVlc3RfcmVnaW9uKDB4MjAsMHgyLCJwaWMxIik7CisJLy9yZXF1ZXN0X3JlZ2lvbigweEEwLDB4MiwicGljMiIpOworCisJY2FzY2FkZS5oYW5kbGVyID0gYm9ndXNfaW50OworCWNhc2NhZGUubmFtZSA9ICJjYXNjYWRlIjsKKwlzZXR1cF9pcnEoMiwmY2FzY2FkZSk7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2hhcmsvbGVkcy5jIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9sZWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JkZWI3MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvbGVkcy5jCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogYXJjaC9hcm0va2VybmVsL2xlZHMtc2hhcmsuYworICogYnkgQWxleGFuZGVyIFNjaHVsegorICoKKyAqIGRlcml2ZWQgZnJvbToKKyAqIGFyY2gvYXJtL2tlcm5lbC9sZWRzLWZvb3RicmlkZ2UuYworICogQ29weXJpZ2h0IChDKSAxOTk4LTE5OTkgUnVzc2VsbCBLaW5nCisgKgorICogRElHSVRBTCBTaGFyayBMRUQgY29udHJvbCByb3V0aW5lcy4KKyAqCisgKiBUaGUgbGVkcyB1c2UgaXMgYXMgZm9sbG93czoKKyAqICAtIEdyZWVuIGZyb250IC0gdG9nZ2xlcyBzdGF0ZSBldmVyeSA1MCB0aW1lciBpbnRlcnJ1cHRzCisgKiAgLSBBbWJlciBmcm9udCAtIFVudXNlZCwgdGhpcyBpcyBhIGR1YWwgY29sb3IgbGVkIChBbWJlci9HcmVlbikKKyAqICAtIEFtYmVyIGJhY2sgIC0gT24gaWYgc3lzdGVtIGlzIG5vdCBpZGxlCisgKgorICogQ2hhbmdlbG9nOgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2RlZmluZSBMRURfU1RBVEVfRU5BQkxFRAkxCisjZGVmaW5lIExFRF9TVEFURV9DTEFJTUVECTIKK3N0YXRpYyBjaGFyIGxlZF9zdGF0ZTsKK3N0YXRpYyBzaG9ydCBod19sZWRfc3RhdGU7CitzdGF0aWMgc2hvcnQgc2F2ZWRfc3RhdGU7CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobGVkc19sb2NrKTsKKworc2hvcnQgc2VxdW9pYV9yZWFkKGludCBhZGRyKSB7CisgIG91dHcoYWRkciwweDI0KTsKKyAgcmV0dXJuIGludygweDI2KTsKK30KKwordm9pZCBzZXF1b2lhX3dyaXRlKHNob3J0IHZhbHVlLHNob3J0IGFkZHIpIHsKKyAgb3V0dyhhZGRyLDB4MjQpOworICBvdXR3KHZhbHVlLDB4MjYpOworfQorCitzdGF0aWMgdm9pZCBzZXF1b2lhX2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGVkc19sb2NrLCBmbGFncyk7CisKKwlod19sZWRfc3RhdGUgPSBzZXF1b2lhX3JlYWQoMHgwOSk7CisKKwlzd2l0Y2ggKGV2dCkgeworCWNhc2UgbGVkX3N0YXJ0OgorCQlod19sZWRfc3RhdGUgfD0gU0VRVU9JQV9MRURfR1JFRU47CisJCWh3X2xlZF9zdGF0ZSB8PSBTRVFVT0lBX0xFRF9BTUJFUjsKKyNpZmRlZiBDT05GSUdfTEVEU19DUFUKKwkJaHdfbGVkX3N0YXRlIHw9IFNFUVVPSUFfTEVEX0JBQ0s7CisjZWxzZQorCQlod19sZWRfc3RhdGUgJj0gflNFUVVPSUFfTEVEX0JBQ0s7CisjZW5kaWYKKwkJbGVkX3N0YXRlIHw9IExFRF9TVEFURV9FTkFCTEVEOworCQlicmVhazsKKworCWNhc2UgbGVkX3N0b3A6CisJCWh3X2xlZF9zdGF0ZSAmPSB+U0VRVU9JQV9MRURfQkFDSzsKKwkJaHdfbGVkX3N0YXRlIHw9IFNFUVVPSUFfTEVEX0dSRUVOOworCQlod19sZWRfc3RhdGUgfD0gU0VRVU9JQV9MRURfQU1CRVI7CisJCWxlZF9zdGF0ZSAmPSB+TEVEX1NUQVRFX0VOQUJMRUQ7CisJCWJyZWFrOworCisJY2FzZSBsZWRfY2xhaW06CisJCWxlZF9zdGF0ZSB8PSBMRURfU1RBVEVfQ0xBSU1FRDsKKwkJc2F2ZWRfc3RhdGUgPSBod19sZWRfc3RhdGU7CisJCWh3X2xlZF9zdGF0ZSAmPSB+U0VRVU9JQV9MRURfQkFDSzsKKwkJaHdfbGVkX3N0YXRlIHw9IFNFUVVPSUFfTEVEX0dSRUVOOworCQlod19sZWRfc3RhdGUgfD0gU0VRVU9JQV9MRURfQU1CRVI7CisJCWJyZWFrOworCisJY2FzZSBsZWRfcmVsZWFzZToKKwkJbGVkX3N0YXRlICY9IH5MRURfU1RBVEVfQ0xBSU1FRDsKKwkJaHdfbGVkX3N0YXRlID0gc2F2ZWRfc3RhdGU7CisJCWJyZWFrOworCisjaWZkZWYgQ09ORklHX0xFRFNfVElNRVIKKwljYXNlIGxlZF90aW1lcjoKKwkJaWYgKCEobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpKQorCQkJaHdfbGVkX3N0YXRlIF49IFNFUVVPSUFfTEVEX0dSRUVOOworCQlicmVhazsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0xFRFNfQ1BVCisJY2FzZSBsZWRfaWRsZV9zdGFydDoKKwkJaWYgKCEobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpKQorCQkJaHdfbGVkX3N0YXRlICY9IH5TRVFVT0lBX0xFRF9CQUNLOworCQlicmVhazsKKworCWNhc2UgbGVkX2lkbGVfZW5kOgorCQlpZiAoIShsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkpCisJCQlod19sZWRfc3RhdGUgfD0gU0VRVU9JQV9MRURfQkFDSzsKKwkJYnJlYWs7CisjZW5kaWYKKworCWNhc2UgbGVkX2dyZWVuX29uOgorCQlpZiAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpCisJCQlod19sZWRfc3RhdGUgJj0gflNFUVVPSUFfTEVEX0dSRUVOOworCQlicmVhazsKKworCWNhc2UgbGVkX2dyZWVuX29mZjoKKwkJaWYgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKQorCQkJaHdfbGVkX3N0YXRlIHw9IFNFUVVPSUFfTEVEX0dSRUVOOworCQlicmVhazsKKworCWNhc2UgbGVkX2FtYmVyX29uOgorCQlpZiAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpCisJCQlod19sZWRfc3RhdGUgJj0gflNFUVVPSUFfTEVEX0FNQkVSOworCQlicmVhazsKKworCWNhc2UgbGVkX2FtYmVyX29mZjoKKwkJaWYgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKQorCQkJaHdfbGVkX3N0YXRlIHw9IFNFUVVPSUFfTEVEX0FNQkVSOworCQlicmVhazsKKworCWNhc2UgbGVkX3JlZF9vbjoKKwkJaWYgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKQorCQkJaHdfbGVkX3N0YXRlIHw9IFNFUVVPSUFfTEVEX0JBQ0s7CisJCWJyZWFrOworCisJY2FzZSBsZWRfcmVkX29mZjoKKwkJaWYgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKQorCQkJaHdfbGVkX3N0YXRlICY9IH5TRVFVT0lBX0xFRF9CQUNLOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmICAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0VOQUJMRUQpCisJCXNlcXVvaWFfd3JpdGUoaHdfbGVkX3N0YXRlLDB4MDkpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGVkc19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGxlZHNfaW5pdCh2b2lkKQoreworCWV4dGVybiB2b2lkICgqbGVkc19ldmVudCkobGVkX2V2ZW50X3QpOworCXNob3J0IHRlbXA7CisJCisJbGVkc19ldmVudCA9IHNlcXVvaWFfbGVkc19ldmVudDsKKworCS8qIE1ha2UgTEVEcyBpbmRlcGVuZGVudCBvZiBwb3dlci1zdGF0ZSAqLworCXJlcXVlc3RfcmVnaW9uKDB4MjQsNCwic2VxdW9pYSIpOworCXRlbXAgPSBzZXF1b2lhX3JlYWQoMHgwOSk7CisJdGVtcCB8PSAxPDwxMDsKKwlzZXF1b2lhX3dyaXRlKHRlbXAsMHgwOSk7CisJbGVkc19ldmVudChsZWRfc3RhcnQpOworCXJldHVybiAwOworfQorCitfX2luaXRjYWxsKGxlZHNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNoYXJrL3BjaS5jIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2E3MTEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9wY2kuYwpAQCAtMCwwICsxLDQyIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtc2hhcmsvcGNpLmMKKyAqCisgKiAgUENJIGJpb3MtdHlwZSBpbml0aWFsaXNhdGlvbiBmb3IgUENJIG1hY2hpbmVzCisgKgorICogIEJpdHMgdGFrZW4gZnJvbSB2YXJpb3VzIHBsYWNlcy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCitzdGF0aWMgaW50IF9faW5pdCBzaGFya19tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlpZiAoZGV2LT5idXMtPm51bWJlciA9PSAwKQorCQlpZiAoZGV2LT5kZXZmbiA9PSAwKSByZXR1cm4gMjU1OworCQllbHNlIHJldHVybiAxMTsKKwllbHNlIHJldHVybiAyNTU7Cit9CisKK2V4dGVybiB2b2lkIF9faW5pdCB2aWE4MmM1MDVfcHJlaW5pdCh2b2lkKTsKKworc3RhdGljIHN0cnVjdCBod19wY2kgc2hhcmtfcGNpIF9faW5pdGRhdGEgPSB7CisJLnNldHVwCQk9IHZpYTgyYzUwNV9zZXR1cCwKKwkuc3dpenpsZSAgICAgCT0gcGNpX3N0ZF9zd2l6emxlLAorCS5tYXBfaXJxCT0gc2hhcmtfbWFwX2lycSwKKwkubnJfY29udHJvbGxlcnMgPSAxLAorCS5zY2FuCQk9IHZpYTgyYzUwNV9zY2FuX2J1cywKKwkucHJlaW5pdAk9IHZpYTgyYzUwNV9wcmVpbml0LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2hhcmtfcGNpX2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19zaGFyaygpKQorCQlwY2lfY29tbW9uX2luaXQoJnNoYXJrX3BjaSk7CisJcmV0dXJuIDA7Cit9CisKK3N1YnN5c19pbml0Y2FsbChzaGFya19wY2lfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDc4N2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvS2NvbmZpZwpAQCAtMCwwICsxLDE2IEBACittZW51ICJWZXJzYXRpbGUgcGxhdGZvcm0gdHlwZSIKKwlkZXBlbmRzIG9uIEFSQ0hfVkVSU0FUSUxFCisKK2NvbmZpZyBBUkNIX1ZFUlNBVElMRV9QQgorCWJvb2wgIlN1cHBvcnQgVmVyc2F0aWxlL1BCIHBsYXRmb3JtIgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBWZXJzYXRpbGUvUEIgcGxhdGZvcm0uCisKK2NvbmZpZyBNQUNIX1ZFUlNBVElMRV9BQgorCWJvb2wgIlN1cHBvcnQgVmVyc2F0aWxlL0FCIHBsYXRmb3JtIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBWZXJzYXRpbGUvQVAgcGxhdGZvcm0uCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ2MDg4MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL01ha2VmaWxlCkBAIC0wLDAgKzEsNyBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMKKworb2JqLXkJCQkJCTo9IGNvcmUubyBjbG9jay5vCitvYmotJChDT05GSUdfQVJDSF9WRVJTQVRJTEVfUEIpCQkrPSB2ZXJzYXRpbGVfcGIubworb2JqLSQoQ09ORklHX01BQ0hfVkVSU0FUSUxFX0FCKQkJKz0gdmVyc2F0aWxlX2FiLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZTc1YWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsNCBAQAorICAgenJlbGFkZHIteQk6PSAweDAwMDA4MDAwCitwYXJhbXNfcGh5cy15CTo9IDB4MDAwMDAxMDAKK2luaXRyZF9waHlzLXkJOj0gMHgwMDgwMDAwMAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODAyNWMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY2xvY2suYwpAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jbG9jay5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBBUk0gTGltaXRlZC4KKyAqICBXcml0dGVuIGJ5IERlZXAgQmx1ZSBTb2x1dGlvbnMgTGltaXRlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2ljc3QzMDcuaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisKK3N0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKK3N0YXRpYyBERUNMQVJFX01VVEVYKGNsb2Nrc19zZW0pOworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCit7CisJc3RydWN0IGNsayAqcCwgKmNsayA9IEVSUl9QVFIoLUVOT0VOVCk7CisKKwlkb3duKCZjbG9ja3Nfc2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIG5vZGUpIHsKKwkJaWYgKHN0cmNtcChpZCwgcC0+bmFtZSkgPT0gMCAmJiB0cnlfbW9kdWxlX2dldChwLT5vd25lcikpIHsKKwkJCWNsayA9IHA7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cCgmY2xvY2tzX3NlbSk7CisKKwlyZXR1cm4gY2xrOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKKwordm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwltb2R1bGVfcHV0KGNsay0+b3duZXIpOworfQorRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKKworaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKKwordm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKKworaW50IGNsa191c2Uoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfdXNlKTsKKwordm9pZCBjbGtfdW51c2Uoc3RydWN0IGNsayAqY2xrKQoreworfQorRVhQT1JUX1NZTUJPTChjbGtfdW51c2UpOworCit1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsay0+cmF0ZTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKKworbG9uZyBjbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlyZXR1cm4gcmF0ZTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3JvdW5kX3JhdGUpOworCitpbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWludCByZXQgPSAtRUlPOworCisJaWYgKGNsay0+c2V0dmNvKSB7CisJCXN0cnVjdCBpY3N0MzA3X3ZjbyB2Y287CisKKwkJdmNvID0gaWNzdDMwN19raHpfdG9fdmNvKGNsay0+cGFyYW1zLCByYXRlIC8gMTAwMCk7CisJCWNsay0+cmF0ZSA9IGljc3QzMDdfa2h6KGNsay0+cGFyYW1zLCB2Y28pICogMTAwMDsKKworCQlwcmludGsoIkNsb2NrICVzOiBzZXR0aW5nIFZDTyByZWcgcGFyYW1zOiBTPSVkIFI9JWQgVj0lZFxuIiwKKwkJCWNsay0+bmFtZSwgdmNvLnMsIHZjby5yLCB2Y28udik7CisKKwkJY2xrLT5zZXR2Y28oY2xrLCB2Y28pOworCQlyZXQgPSAwOworCX0KKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChjbGtfc2V0X3JhdGUpOworCisvKgorICogVGhlc2UgYXJlIGZpeGVkIGNsb2Nrcy4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsga21pX2NsayA9IHsKKwkubmFtZQk9ICJLTUlSRUZDTEsiLAorCS5yYXRlCT0gMjQwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0X2NsayA9IHsKKwkubmFtZQk9ICJVQVJUQ0xLIiwKKwkucmF0ZQk9IDI0MDAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaV9jbGsgPSB7CisJLm5hbWUJPSAiTUNMSyIsCisJLnJhdGUJPSAzMzAwMDAwMCwKK307CisKK2ludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKQoreworCWRvd24oJmNsb2Nrc19zZW0pOworCWxpc3RfYWRkKCZjbGstPm5vZGUsICZjbG9ja3MpOworCXVwKCZjbG9ja3Nfc2VtKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3JlZ2lzdGVyKTsKKwordm9pZCBjbGtfdW5yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspCit7CisJZG93bigmY2xvY2tzX3NlbSk7CisJbGlzdF9kZWwoJmNsay0+bm9kZSk7CisJdXAoJmNsb2Nrc19zZW0pOworfQorRVhQT1JUX1NZTUJPTChjbGtfdW5yZWdpc3Rlcik7CisKK3N0YXRpYyBpbnQgX19pbml0IGNsa19pbml0KHZvaWQpCit7CisJY2xrX3JlZ2lzdGVyKCZrbWlfY2xrKTsKKwljbGtfcmVnaXN0ZXIoJnVhcnRfY2xrKTsKKwljbGtfcmVnaXN0ZXIoJm1tY2lfY2xrKTsKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoY2xrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIwYjYxZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2Nsb2NrLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jbG9jay5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBBUk0gTGltaXRlZC4KKyAqICBXcml0dGVuIGJ5IERlZXAgQmx1ZSBTb2x1dGlvbnMgTGltaXRlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCitzdHJ1Y3QgbW9kdWxlOworc3RydWN0IGljc3QzMDdfcGFyYW1zOworCitzdHJ1Y3QgY2xrIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CisJdW5zaWduZWQgbG9uZwkJcmF0ZTsKKwlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CisJY29uc3QgY2hhcgkJKm5hbWU7CisJY29uc3Qgc3RydWN0IGljc3QzMDdfcGFyYW1zICpwYXJhbXM7CisJdm9pZAkJCSpkYXRhOworCXZvaWQJCQkoKnNldHZjbykoc3RydWN0IGNsayAqLCBzdHJ1Y3QgaWNzdDMwN192Y28gdmNvKTsKK307CisKK2ludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKK3ZvaWQgY2xrX3VucmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTRlMWJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCkBAIC0wLDAgKzEsOTE4IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDAzIEFSTSBMaW1pdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9sZWRzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvYW1iYS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hbWJhX2NsY2QuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaWNzdDMwNy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgorCisjaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisKKy8qCisgKiBBbGwgSU8gYWRkcmVzc2VzIGFyZSBtYXBwZWQgb250byBWQSAweEZGRngueHh4eCwgd2hlcmUgeC54eHh4CisgKiBpcyB0aGUgKFBBID4+IDEyKS4KKyAqCisgKiBTZXR1cCBhIFZBIGZvciB0aGUgVmVyc2F0aWxlIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyLgorICovCisjZGVmaW5lIFZBX1ZJQ19CQVNFCQkgSU9fQUREUkVTUyhWRVJTQVRJTEVfVklDX0JBU0UpCisjZGVmaW5lIFZBX1NJQ19CQVNFCQkgSU9fQUREUkVTUyhWRVJTQVRJTEVfU0lDX0JBU0UpCisKK3N0YXRpYyB2b2lkIHZpY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlycSAtPSBJUlFfVklDX1NUQVJUOworCXdyaXRlbCgxIDw8IGlycSwgVkFfVklDX0JBU0UgKyBWSUNfSVJRX0VOQUJMRV9DTEVBUik7Cit9CisKK3N0YXRpYyB2b2lkIHZpY191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaXJxIC09IElSUV9WSUNfU1RBUlQ7CisJd3JpdGVsKDEgPDwgaXJxLCBWQV9WSUNfQkFTRSArIFZJQ19JUlFfRU5BQkxFKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIHZpY19jaGlwID0geworCS5hY2sJPSB2aWNfbWFza19pcnEsCisJLm1hc2sJPSB2aWNfbWFza19pcnEsCisJLnVubWFzawk9IHZpY191bm1hc2tfaXJxLAorfTsKKworc3RhdGljIHZvaWQgc2ljX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaXJxIC09IElSUV9TSUNfU1RBUlQ7CisJd3JpdGVsKDEgPDwgaXJxLCBWQV9TSUNfQkFTRSArIFNJQ19JUlFfRU5BQkxFX0NMRUFSKTsKK30KKworc3RhdGljIHZvaWQgc2ljX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpcnEgLT0gSVJRX1NJQ19TVEFSVDsKKwl3cml0ZWwoMSA8PCBpcnEsIFZBX1NJQ19CQVNFICsgU0lDX0lSUV9FTkFCTEVfU0VUKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIHNpY19jaGlwID0geworCS5hY2sJPSBzaWNfbWFza19pcnEsCisJLm1hc2sJPSBzaWNfbWFza19pcnEsCisJLnVubWFzawk9IHNpY191bm1hc2tfaXJxLAorfTsKKworc3RhdGljIHZvaWQKK3NpY19oYW5kbGVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFkZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXR1cyA9IHJlYWRsKFZBX1NJQ19CQVNFICsgU0lDX0lSUV9TVEFUVVMpOworCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCWRvX2JhZF9JUlEoaXJxLCBkZXNjLCByZWdzKTsKKwkJcmV0dXJuOworCX0KKworCWRvIHsKKwkJaXJxID0gZmZzKHN0YXR1cykgLSAxOworCQlzdGF0dXMgJj0gfigxIDw8IGlycSk7CisKKwkJaXJxICs9IElSUV9TSUNfU1RBUlQ7CisKKwkJZGVzYyA9IGlycV9kZXNjICsgaXJxOworCQlkZXNjLT5oYW5kbGUoaXJxLCBkZXNjLCByZWdzKTsKKwl9IHdoaWxlIChzdGF0dXMpOworfQorCisjaWYgMQorI2RlZmluZSBJUlFfTU1DSTBBCUlSUV9WSUNTT1VSQ0UyMgorI2RlZmluZSBJUlFfQUFDSQlJUlFfVklDU09VUkNFMjQKKyNkZWZpbmUgSVJRX0VUSAkJSVJRX1ZJQ1NPVVJDRTI1CisjZGVmaW5lIFBJQ19NQVNLCTB4RkZEMDAwMDAKKyNlbHNlCisjZGVmaW5lIElSUV9NTUNJMEEJSVJRX1NJQ19NTUNJMEEKKyNkZWZpbmUgSVJRX0FBQ0kJSVJRX1NJQ19BQUNJCisjZGVmaW5lIElSUV9FVEgJCUlSUV9TSUNfRVRICisjZGVmaW5lIFBJQ19NQVNLCTAKKyNlbmRpZgorCit2b2lkIF9faW5pdCB2ZXJzYXRpbGVfaW5pdF9pcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgdmFsdWU7CisKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGluaXRpYWxseS4gKi8KKworCXdyaXRlbCgwLCBWQV9WSUNfQkFTRSArIFZJQ19JTlRfU0VMRUNUKTsKKwl3cml0ZWwoMCwgVkFfVklDX0JBU0UgKyBWSUNfSVJRX0VOQUJMRSk7CisJd3JpdGVsKH4wLCBWQV9WSUNfQkFTRSArIFZJQ19JUlFfRU5BQkxFX0NMRUFSKTsKKwl3cml0ZWwoMCwgVkFfVklDX0JBU0UgKyBWSUNfSVJRX1NUQVRVUyk7CisJd3JpdGVsKDAsIFZBX1ZJQ19CQVNFICsgVklDX0lUQ1IpOworCXdyaXRlbCh+MCwgVkFfVklDX0JBU0UgKyBWSUNfSVJRX1NPRlRfQ0xFQVIpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgd2UgY2xlYXIgYWxsIGV4aXN0aW5nIGludGVycnVwdHMKKwkgKi8KKwl3cml0ZWwoMCwgVkFfVklDX0JBU0UgKyBWSUNfVkVDVF9BRERSKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTk7IGkrKykgeworCQl2YWx1ZSA9IHJlYWRsKFZBX1ZJQ19CQVNFICsgVklDX1ZFQ1RfQUREUik7CisJCXdyaXRlbCh2YWx1ZSwgVkFfVklDX0JBU0UgKyBWSUNfVkVDVF9BRERSKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQl2YWx1ZSA9IHJlYWRsKFZBX1ZJQ19CQVNFICsgVklDX1ZFQ1RfQ05UTDAgKyAoaSAqIDQpKTsKKwkJd3JpdGVsKHZhbHVlIHwgVklDVmVjdENudGxfRW5hYmxlIHwgaSwgVkFfVklDX0JBU0UgKyBWSUNfVkVDVF9DTlRMMCArIChpICogNCkpOworCX0KKworCXdyaXRlbCgzMiwgVkFfVklDX0JBU0UgKyBWSUNfREVGX1ZFQ1RfQUREUik7CisKKwlmb3IgKGkgPSBJUlFfVklDX1NUQVJUOyBpIDw9IElSUV9WSUNfRU5EOyBpKyspIHsKKwkJaWYgKGkgIT0gSVJRX1ZJQ1NPVVJDRTMxKSB7CisJCQlzZXRfaXJxX2NoaXAoaSwgJnZpY19jaGlwKTsKKwkJCXNldF9pcnFfaGFuZGxlcihpLCBkb19sZXZlbF9JUlEpOworCQkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJCX0KKwl9CisKKwlzZXRfaXJxX2hhbmRsZXIoSVJRX1ZJQ1NPVVJDRTMxLCBzaWNfaGFuZGxlX2lycSk7CisJdmljX3VubWFza19pcnEoSVJRX1ZJQ1NPVVJDRTMxKTsKKworCS8qIERvIHNlY29uZCBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCXdyaXRlbCh+MCwgVkFfU0lDX0JBU0UgKyBTSUNfSVJRX0VOQUJMRV9DTEVBUik7CisKKwlmb3IgKGkgPSBJUlFfU0lDX1NUQVJUOyBpIDw9IElSUV9TSUNfRU5EOyBpKyspIHsKKwkJaWYgKChQSUNfTUFTSyAmICgxIDw8IChpIC0gSVJRX1NJQ19TVEFSVCkpKSA9PSAwKSB7CisJCQlzZXRfaXJxX2NoaXAoaSwgJnNpY19jaGlwKTsKKwkJCXNldF9pcnFfaGFuZGxlcihpLCBkb19sZXZlbF9JUlEpOworCQkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJCX0KKwl9CisKKwkvKgorCSAqIEludGVycnVwdHMgb24gc2Vjb25kYXJ5IGNvbnRyb2xsZXIgZnJvbSAwIHRvIDggYXJlIHJvdXRlZCB0bworCSAqIHNvdXJjZSAzMSBvbiBQSUMuCisJICogSW50ZXJydXB0cyBmcm9tIDIxIHRvIDMxIGFyZSByb3V0ZWQgZGlyZWN0bHkgdG8gdGhlIFZJQyBvbgorCSAqIHRoZSBjb3JyZXNwb25kaW5nIG51bWJlciBvbiBwcmltYXJ5IGNvbnRyb2xsZXIuIFRoaXMgaXMgY29udHJvbGxlZAorCSAqIGJ5IHNldHRpbmcgUElDX0VOQUJMRXguCisJICovCisJd3JpdGVsKFBJQ19NQVNLLCBWQV9TSUNfQkFTRSArIFNJQ19JTlRfUElDX0VOQUJMRSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgdmVyc2F0aWxlX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworIHsgSU9fQUREUkVTUyhWRVJTQVRJTEVfU1lTX0JBU0UpLCAgIFZFUlNBVElMRV9TWVNfQkFTRSwgICBTWl80SywgICAgICBNVF9ERVZJQ0UgfSwKKyB7IElPX0FERFJFU1MoVkVSU0FUSUxFX1NJQ19CQVNFKSwgICBWRVJTQVRJTEVfU0lDX0JBU0UsICAgU1pfNEssICAgICAgTVRfREVWSUNFIH0sCisgeyBJT19BRERSRVNTKFZFUlNBVElMRV9WSUNfQkFTRSksICAgVkVSU0FUSUxFX1ZJQ19CQVNFLCAgIFNaXzRLLCAgICAgIE1UX0RFVklDRSB9LAorIHsgSU9fQUREUkVTUyhWRVJTQVRJTEVfU0NUTF9CQVNFKSwgIFZFUlNBVElMRV9TQ1RMX0JBU0UsICBTWl80SyAqIDksICBNVF9ERVZJQ0UgfSwKKyNpZmRlZiBDT05GSUdfTUFDSF9WRVJTQVRJTEVfQUIKKyB7IElPX0FERFJFU1MoVkVSU0FUSUxFX0dQSU8wX0JBU0UpLCBWRVJTQVRJTEVfR1BJTzBfQkFTRSwgU1pfNEssICAgICAgTVRfREVWSUNFIH0sCisgeyBJT19BRERSRVNTKFZFUlNBVElMRV9JQjJfQkFTRSksICAgVkVSU0FUSUxFX0lCMl9CQVNFLCAgIFNaXzY0TSwgICAgIE1UX0RFVklDRSB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0RFQlVHX0xMCisgeyBJT19BRERSRVNTKFZFUlNBVElMRV9VQVJUMF9CQVNFKSwgVkVSU0FUSUxFX1VBUlQwX0JBU0UsIFNaXzRLLCAgICAgIE1UX0RFVklDRSB9LAorI2VuZGlmCisjaWZkZWYgRklYTUUKKyB7IFBDSV9NRU1PUllfVkFERFIsCQkgICAgIFBIWVNfUENJX01FTV9CQVNFLCAgICBTWl8xNk0sICAgICBNVF9ERVZJQ0UgfSwKKyB7IFBDSV9DT05GSUdfVkFERFIsCQkgICAgIFBIWVNfUENJX0NPTkZJR19CQVNFLCBTWl8xNk0sICAgICBNVF9ERVZJQ0UgfSwKKyB7IFBDSV9WM19WQUREUiwJCSAgICAgUEhZU19QQ0lfVjNfQkFTRSwgICAgIFNaXzUxMkssICAgIE1UX0RFVklDRSB9LAorIHsgUENJX0lPX1ZBRERSLAkJICAgICBQSFlTX1BDSV9JT19CQVNFLCAgICAgU1pfNjRLLCAgICAgTVRfREVWSUNFIH0sCisjZW5kaWYKK307CisKK3ZvaWQgX19pbml0IHZlcnNhdGlsZV9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQodmVyc2F0aWxlX2lvX2Rlc2MsIEFSUkFZX1NJWkUodmVyc2F0aWxlX2lvX2Rlc2MpKTsKK30KKworI2RlZmluZSBWRVJTQVRJTEVfUkVGQ09VTlRFUgkoSU9fQUREUkVTUyhWRVJTQVRJTEVfU1lTX0JBU0UpICsgVkVSU0FUSUxFX1NZU18yNE1Iel9PRkZTRVQpCisKKy8qCisgKiBUaGlzIGlzIHRoZSBWZXJzYXRpbGUgc2NoZWRfY2xvY2sgaW1wbGVtZW50YXRpb24uICBUaGlzIGhhcworICogYSByZXNvbHV0aW9uIG9mIDQxLjducywgYW5kIGEgbWF4aW11bSB2YWx1ZSBvZiBhYm91dCAxNzlzLgorICovCit1bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfY2xvY2sodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdjsKKworCXYgPSAodW5zaWduZWQgbG9uZyBsb25nKXJlYWRsKFZFUlNBVElMRV9SRUZDT1VOVEVSKSAqIDEyNTsKKwlkb19kaXYodiwgMyk7CisKKwlyZXR1cm4gdjsKK30KKworCisjZGVmaW5lIFZFUlNBVElMRV9GTEFTSENUUkwgICAgKElPX0FERFJFU1MoVkVSU0FUSUxFX1NZU19CQVNFKSArIFZFUlNBVElMRV9TWVNfRkxBU0hfT0ZGU0VUKQorCitzdGF0aWMgaW50IHZlcnNhdGlsZV9mbGFzaF9pbml0KHZvaWQpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IF9fcmF3X3JlYWRsKFZFUlNBVElMRV9GTEFTSENUUkwpOworCXZhbCAmPSB+VkVSU0FUSUxFX0ZMQVNIUFJPR19GTFZQUEVOOworCV9fcmF3X3dyaXRlbCh2YWwsIFZFUlNBVElMRV9GTEFTSENUUkwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZlcnNhdGlsZV9mbGFzaF9leGl0KHZvaWQpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IF9fcmF3X3JlYWRsKFZFUlNBVElMRV9GTEFTSENUUkwpOworCXZhbCAmPSB+VkVSU0FUSUxFX0ZMQVNIUFJPR19GTFZQUEVOOworCV9fcmF3X3dyaXRlbCh2YWwsIFZFUlNBVElMRV9GTEFTSENUUkwpOworfQorCitzdGF0aWMgdm9pZCB2ZXJzYXRpbGVfZmxhc2hfc2V0X3ZwcChpbnQgb24pCit7CisJdTMyIHZhbDsKKworCXZhbCA9IF9fcmF3X3JlYWRsKFZFUlNBVElMRV9GTEFTSENUUkwpOworCWlmIChvbikKKwkJdmFsIHw9IFZFUlNBVElMRV9GTEFTSFBST0dfRkxWUFBFTjsKKwllbHNlCisJCXZhbCAmPSB+VkVSU0FUSUxFX0ZMQVNIUFJPR19GTFZQUEVOOworCV9fcmF3X3dyaXRlbCh2YWwsIFZFUlNBVElMRV9GTEFTSENUUkwpOworfQorCitzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgdmVyc2F0aWxlX2ZsYXNoX2RhdGEgPSB7CisJLm1hcF9uYW1lCQk9ICJjZmlfcHJvYmUiLAorCS53aWR0aAkJCT0gNCwKKwkuaW5pdAkJCT0gdmVyc2F0aWxlX2ZsYXNoX2luaXQsCisJLmV4aXQJCQk9IHZlcnNhdGlsZV9mbGFzaF9leGl0LAorCS5zZXRfdnBwCQk9IHZlcnNhdGlsZV9mbGFzaF9zZXRfdnBwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2ZXJzYXRpbGVfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQkJPSBWRVJTQVRJTEVfRkxBU0hfQkFTRSwKKwkuZW5kCQkJPSBWRVJTQVRJTEVfRkxBU0hfQkFTRSArIFZFUlNBVElMRV9GTEFTSF9TSVpFLAorCS5mbGFncwkJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2ZXJzYXRpbGVfZmxhc2hfZGV2aWNlID0geworCS5uYW1lCQkJPSAiYXJtZmxhc2giLAorCS5pZAkJCT0gMCwKKwkuZGV2CQkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnZlcnNhdGlsZV9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJCT0gMSwKKwkucmVzb3VyY2UJCT0gJnZlcnNhdGlsZV9mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CQk9IFZFUlNBVElMRV9FVEhfQkFTRSwKKwkJLmVuZAkJPSBWRVJTQVRJTEVfRVRIX0JBU0UgKyBTWl82NEsgLSAxLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAkJPSBJUlFfRVRILAorCQkuZW5kCQk9IElSUV9FVEgsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21jOTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21jOTF4IiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21jOTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc21jOTF4X3Jlc291cmNlcywKK307CisKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU01DSQkoSU9fQUREUkVTUyhWRVJTQVRJTEVfU1lTX0JBU0UpICsgVkVSU0FUSUxFX1NZU19NQ0lfT0ZGU0VUKQorCit1bnNpZ25lZCBpbnQgbW1jX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFtYmFfZGV2aWNlICphZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGFtYmFfZGV2aWNlLCBkZXYpOworCXUzMiBtYXNrOworCisJaWYgKGFkZXYtPnJlcy5zdGFydCA9PSBWRVJTQVRJTEVfTU1DSTBfQkFTRSkKKwkJbWFzayA9IDE7CisJZWxzZQorCQltYXNrID0gMjsKKworCXJldHVybiByZWFkbChWRVJTQVRJTEVfU1lTTUNJKSAmIG1hc2s7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgbW1jMF9wbGF0X2RhdGEgPSB7CisJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5zdGF0dXMJCT0gbW1jX3N0YXR1cywKK307CisKKy8qCisgKiBDbG9jayBoYW5kbGluZworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGljc3QzMDdfcGFyYW1zIHZlcnNhdGlsZV9vc2N2Y29fcGFyYW1zID0geworCS5yZWYJCT0gMjQwMDAsCisJLnZjb19tYXgJPSAyMDAwMDAsCisJLnZkX21pbgkJPSA0ICsgOCwKKwkudmRfbWF4CQk9IDUxMSArIDgsCisJLnJkX21pbgkJPSAxICsgMiwKKwkucmRfbWF4CQk9IDEyNyArIDIsCit9OworCitzdGF0aWMgdm9pZCB2ZXJzYXRpbGVfb3NjdmNvX3NldChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBpY3N0MzA3X3ZjbyB2Y28pCit7CisJdW5zaWduZWQgbG9uZyBzeXNfbG9jayA9IElPX0FERFJFU1MoVkVSU0FUSUxFX1NZU19CQVNFKSArIFZFUlNBVElMRV9TWVNfTE9DS19PRkZTRVQ7CisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9WRVJTQVRJTEVfUEIpCisJdW5zaWduZWQgbG9uZyBzeXNfb3NjID0gSU9fQUREUkVTUyhWRVJTQVRJTEVfU1lTX0JBU0UpICsgVkVSU0FUSUxFX1NZU19PU0M0X09GRlNFVDsKKyNlbGlmIGRlZmluZWQoQ09ORklHX01BQ0hfVkVSU0FUSUxFX0FCKQorCXVuc2lnbmVkIGxvbmcgc3lzX29zYyA9IElPX0FERFJFU1MoVkVSU0FUSUxFX1NZU19CQVNFKSArIFZFUlNBVElMRV9TWVNfT1NDMV9PRkZTRVQ7CisjZW5kaWYKKwl1MzIgdmFsOworCisJdmFsID0gcmVhZGwoc3lzX29zYykgJiB+MHg3ZmZmZjsKKwl2YWwgfD0gdmNvLnYgfCAodmNvLnIgPDwgOSkgfCAodmNvLnMgPDwgMTYpOworCisJd3JpdGVsKDB4YTA1Ziwgc3lzX2xvY2spOworCXdyaXRlbCh2YWwsIHN5c19vc2MpOworCXdyaXRlbCgwLCBzeXNfbG9jayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZlcnNhdGlsZV9jbGNkX2NsayA9IHsKKwkubmFtZQk9ICJDTENEQ0xLIiwKKwkucGFyYW1zCT0gJnZlcnNhdGlsZV9vc2N2Y29fcGFyYW1zLAorCS5zZXR2Y28gPSB2ZXJzYXRpbGVfb3NjdmNvX3NldCwKK307CisKKy8qCisgKiBDTENEIHN1cHBvcnQuCisgKi8KKyNkZWZpbmUgU1lTX0NMQ0RfTU9ERV9NQVNLCSgzIDw8IDApCisjZGVmaW5lIFNZU19DTENEX01PREVfODg4CSgwIDw8IDApCisjZGVmaW5lIFNZU19DTENEX01PREVfNTU1MQkoMSA8PCAwKQorI2RlZmluZSBTWVNfQ0xDRF9NT0RFXzU2NV9STFNCCSgyIDw8IDApCisjZGVmaW5lIFNZU19DTENEX01PREVfNTY1X0JMU0IJKDMgPDwgMCkKKyNkZWZpbmUgU1lTX0NMQ0RfTkxDRElPT04JKDEgPDwgMikKKyNkZWZpbmUgU1lTX0NMQ0RfVkREUE9TU1dJVENICSgxIDw8IDMpCisjZGVmaW5lIFNZU19DTENEX1BXUjNWNVNXSVRDSAkoMSA8PCA0KQorI2RlZmluZSBTWVNfQ0xDRF9JRF9NQVNLCSgweDFmIDw8IDgpCisjZGVmaW5lIFNZU19DTENEX0lEX1NBTllPXzNfOAkoMHgwMCA8PCA4KQorI2RlZmluZSBTWVNfQ0xDRF9JRF9VTktOT1dOXzhfNAkoMHgwMSA8PCA4KQorI2RlZmluZSBTWVNfQ0xDRF9JRF9FUFNPTl8yXzIJKDB4MDIgPDwgOCkKKyNkZWZpbmUgU1lTX0NMQ0RfSURfU0FOWU9fMl81CSgweDA3IDw8IDgpCisjZGVmaW5lIFNZU19DTENEX0lEX1ZHQQkJKDB4MWYgPDwgOCkKKworc3RhdGljIHN0cnVjdCBjbGNkX3BhbmVsIHZnYSA9IHsKKwkubW9kZQkJPSB7CisJCS5uYW1lCQk9ICJWR0EiLAorCQkucmVmcmVzaAk9IDYwLAorCQkueHJlcwkJPSA2NDAsCisJCS55cmVzCQk9IDQ4MCwKKwkJLnBpeGNsb2NrCT0gMzk3MjEsCisJCS5sZWZ0X21hcmdpbgk9IDQwLAorCQkucmlnaHRfbWFyZ2luCT0gMjQsCisJCS51cHBlcl9tYXJnaW4JPSAzMiwKKwkJLmxvd2VyX21hcmdpbgk9IDExLAorCQkuaHN5bmNfbGVuCT0gOTYsCisJCS52c3luY19sZW4JPSAyLAorCQkuc3luYwkJPSAwLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorCS53aWR0aAkJPSAtMSwKKwkuaGVpZ2h0CQk9IC0xLAorCS50aW0yCQk9IFRJTTJfQkNEIHwgVElNMl9JUEMsCisJLmNudGwJCT0gQ05UTF9MQ0RURlQgfCBDTlRMX0xDRFZDT01QKDEpLAorCS5icHAJCT0gMTYsCit9OworCitzdGF0aWMgc3RydWN0IGNsY2RfcGFuZWwgc2FueW9fM184X2luID0geworCS5tb2RlCQk9IHsKKwkJLm5hbWUJCT0gIlNhbnlvIFFWR0EiLAorCQkucmVmcmVzaAk9IDExNiwKKwkJLnhyZXMJCT0gMzIwLAorCQkueXJlcwkJPSAyNDAsCisJCS5waXhjbG9jawk9IDEwMDAwMCwKKwkJLmxlZnRfbWFyZ2luCT0gNiwKKwkJLnJpZ2h0X21hcmdpbgk9IDYsCisJCS51cHBlcl9tYXJnaW4JPSA1LAorCQkubG93ZXJfbWFyZ2luCT0gNSwKKwkJLmhzeW5jX2xlbgk9IDYsCisJCS52c3luY19sZW4JPSA2LAorCQkuc3luYwkJPSAwLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorCS53aWR0aAkJPSAtMSwKKwkuaGVpZ2h0CQk9IC0xLAorCS50aW0yCQk9IFRJTTJfQkNELAorCS5jbnRsCQk9IENOVExfTENEVEZUIHwgQ05UTF9MQ0RWQ09NUCgxKSwKKwkuYnBwCQk9IDE2LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGNkX3BhbmVsIHNhbnlvXzJfNV9pbiA9IHsKKwkubW9kZQkJPSB7CisJCS5uYW1lCQk9ICJTYW55byBRVkdBIFBvcnRyYWl0IiwKKwkJLnJlZnJlc2gJPSAxMTYsCisJCS54cmVzCQk9IDI0MCwKKwkJLnlyZXMJCT0gMzIwLAorCQkucGl4Y2xvY2sJPSAxMDAwMDAsCisJCS5sZWZ0X21hcmdpbgk9IDIwLAorCQkucmlnaHRfbWFyZ2luCT0gMTAsCisJCS51cHBlcl9tYXJnaW4JPSAyLAorCQkubG93ZXJfbWFyZ2luCT0gMiwKKwkJLmhzeW5jX2xlbgk9IDEwLAorCQkudnN5bmNfbGVuCT0gMiwKKwkJLnN5bmMJCT0gRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCX0sCisJLndpZHRoCQk9IC0xLAorCS5oZWlnaHQJCT0gLTEsCisJLnRpbTIJCT0gVElNMl9JVlMgfCBUSU0yX0lIUyB8IFRJTTJfSVBDLAorCS5jbnRsCQk9IENOVExfTENEVEZUIHwgQ05UTF9MQ0RWQ09NUCgxKSwKKwkuYnBwCQk9IDE2LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGNkX3BhbmVsIGVwc29uXzJfMl9pbiA9IHsKKwkubW9kZQkJPSB7CisJCS5uYW1lCQk9ICJFcHNvbiBRQ0lGIiwKKwkJLnJlZnJlc2gJPSAzOTAsCisJCS54cmVzCQk9IDE3NiwKKwkJLnlyZXMJCT0gMjIwLAorCQkucGl4Y2xvY2sJPSA2MjUwMCwKKwkJLmxlZnRfbWFyZ2luCT0gMywKKwkJLnJpZ2h0X21hcmdpbgk9IDIsCisJCS51cHBlcl9tYXJnaW4JPSAxLAorCQkubG93ZXJfbWFyZ2luCT0gMCwKKwkJLmhzeW5jX2xlbgk9IDMsCisJCS52c3luY19sZW4JPSAyLAorCQkuc3luYwkJPSAwLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorCS53aWR0aAkJPSAtMSwKKwkuaGVpZ2h0CQk9IC0xLAorCS50aW0yCQk9IFRJTTJfQkNEIHwgVElNMl9JUEMsCisJLmNudGwJCT0gQ05UTF9MQ0RURlQgfCBDTlRMX0xDRFZDT01QKDEpLAorCS5icHAJCT0gMTYsCit9OworCisvKgorICogRGV0ZWN0IHdoaWNoIExDRCBwYW5lbCBpcyBjb25uZWN0ZWQsIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlCisgKiBjbGNkX3BhbmVsIHN0cnVjdHVyZS4gIE5vdGU6IHdlIGRvIG5vdCBoYXZlIGFueSBpbmZvcm1hdGlvbiBvbgorICogdGhlIHJlcXVpcmVkIHRpbWluZ3MgZm9yIHRoZSA4LjRpbiBwYW5lbCwgc28gd2UgcHJlc2VudGx5IGFzc3VtZQorICogVkdBIHRpbWluZ3MuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xjZF9wYW5lbCAqdmVyc2F0aWxlX2NsY2RfcGFuZWwodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN5c19jbGNkID0gSU9fQUREUkVTUyhWRVJTQVRJTEVfU1lTX0JBU0UpICsgVkVSU0FUSUxFX1NZU19DTENEX09GRlNFVDsKKwlzdHJ1Y3QgY2xjZF9wYW5lbCAqcGFuZWwgPSAmdmdhOworCXUzMiB2YWw7CisKKwl2YWwgPSByZWFkbChzeXNfY2xjZCkgJiBTWVNfQ0xDRF9JRF9NQVNLOworCWlmICh2YWwgPT0gU1lTX0NMQ0RfSURfU0FOWU9fM184KQorCQlwYW5lbCA9ICZzYW55b18zXzhfaW47CisJZWxzZSBpZiAodmFsID09IFNZU19DTENEX0lEX1NBTllPXzJfNSkKKwkJcGFuZWwgPSAmc2FueW9fMl81X2luOworCWVsc2UgaWYgKHZhbCA9PSBTWVNfQ0xDRF9JRF9FUFNPTl8yXzIpCisJCXBhbmVsID0gJmVwc29uXzJfMl9pbjsKKwllbHNlIGlmICh2YWwgPT0gU1lTX0NMQ0RfSURfVkdBKQorCQlwYW5lbCA9ICZ2Z2E7CisJZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ0xDRDogdW5rbm93biBMQ0QgcGFuZWwgSUQgMHglMDh4LCB1c2luZyBWR0FcbiIsCisJCQl2YWwpOworCQlwYW5lbCA9ICZ2Z2E7CisJfQorCisJcmV0dXJuIHBhbmVsOworfQorCisvKgorICogRGlzYWJsZSBhbGwgZGlzcGxheSBjb25uZWN0b3JzIG9uIHRoZSBpbnRlcmZhY2UgbW9kdWxlLgorICovCitzdGF0aWMgdm9pZCB2ZXJzYXRpbGVfY2xjZF9kaXNhYmxlKHN0cnVjdCBjbGNkX2ZiICpmYikKK3sKKwl1bnNpZ25lZCBsb25nIHN5c19jbGNkID0gSU9fQUREUkVTUyhWRVJTQVRJTEVfU1lTX0JBU0UpICsgVkVSU0FUSUxFX1NZU19DTENEX09GRlNFVDsKKwl1MzIgdmFsOworCisJdmFsID0gcmVhZGwoc3lzX2NsY2QpOworCXZhbCAmPSB+U1lTX0NMQ0RfTkxDRElPT04gfCBTWVNfQ0xDRF9QV1IzVjVTV0lUQ0g7CisJd3JpdGVsKHZhbCwgc3lzX2NsY2QpOworCisjaWZkZWYgQ09ORklHX01BQ0hfVkVSU0FUSUxFX0FCCisJLyoKKwkgKiBJZiB0aGUgTENEIGlzIFNhbnlvIDJ4NSBpbiBvbiB0aGUgSUIyIGJvYXJkLCB0dXJuIHRoZSBiYWNrLWxpZ2h0IG9mZgorCSAqLworCWlmIChmYi0+cGFuZWwgPT0gJnNhbnlvXzJfNV9pbikgeworCQl1bnNpZ25lZCBsb25nIHZlcnNhdGlsZV9pYjJfY3RybCA9IElPX0FERFJFU1MoVkVSU0FUSUxFX0lCMl9DVFJMKTsKKwkJdW5zaWduZWQgbG9uZyBjdHJsOworCisJCWN0cmwgPSByZWFkbCh2ZXJzYXRpbGVfaWIyX2N0cmwpOworCQljdHJsICY9IH4weDAxOworCQl3cml0ZWwoY3RybCwgdmVyc2F0aWxlX2liMl9jdHJsKTsKKwl9CisjZW5kaWYKK30KKworLyoKKyAqIEVuYWJsZSB0aGUgcmVsZXZhbnQgY29ubmVjdG9yIG9uIHRoZSBpbnRlcmZhY2UgbW9kdWxlLgorICovCitzdGF0aWMgdm9pZCB2ZXJzYXRpbGVfY2xjZF9lbmFibGUoc3RydWN0IGNsY2RfZmIgKmZiKQoreworCXVuc2lnbmVkIGxvbmcgc3lzX2NsY2QgPSBJT19BRERSRVNTKFZFUlNBVElMRV9TWVNfQkFTRSkgKyBWRVJTQVRJTEVfU1lTX0NMQ0RfT0ZGU0VUOworCXUzMiB2YWw7CisKKwl2YWwgPSByZWFkbChzeXNfY2xjZCk7CisJdmFsICY9IH5TWVNfQ0xDRF9NT0RFX01BU0s7CisKKwlzd2l0Y2ggKGZiLT5mYi52YXIuZ3JlZW4ubGVuZ3RoKSB7CisJY2FzZSA1OgorCQl2YWwgfD0gU1lTX0NMQ0RfTU9ERV81NTUxOworCQlicmVhazsKKwljYXNlIDY6CisJCXZhbCB8PSBTWVNfQ0xDRF9NT0RFXzU2NV9CTFNCOworCQlicmVhazsKKwljYXNlIDg6CisJCXZhbCB8PSBTWVNfQ0xDRF9NT0RFXzg4ODsKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBTZXQgdGhlIE1VWAorCSAqLworCXdyaXRlbCh2YWwsIHN5c19jbGNkKTsKKworCS8qCisJICogQW5kIG5vdyBlbmFibGUgdGhlIFBTVXMKKwkgKi8KKwl2YWwgfD0gU1lTX0NMQ0RfTkxDRElPT04gfCBTWVNfQ0xDRF9QV1IzVjVTV0lUQ0g7CisJd3JpdGVsKHZhbCwgc3lzX2NsY2QpOworCisjaWZkZWYgQ09ORklHX01BQ0hfVkVSU0FUSUxFX0FCCisJLyoKKwkgKiBJZiB0aGUgTENEIGlzIFNhbnlvIDJ4NSBpbiBvbiB0aGUgSUIyIGJvYXJkLCB0dXJuIHRoZSBiYWNrLWxpZ2h0IG9uCisJICovCisJaWYgKGZiLT5wYW5lbCA9PSAmc2FueW9fMl81X2luKSB7CisJCXVuc2lnbmVkIGxvbmcgdmVyc2F0aWxlX2liMl9jdHJsID0gSU9fQUREUkVTUyhWRVJTQVRJTEVfSUIyX0NUUkwpOworCQl1bnNpZ25lZCBsb25nIGN0cmw7CisKKwkJY3RybCA9IHJlYWRsKHZlcnNhdGlsZV9pYjJfY3RybCk7CisJCWN0cmwgfD0gMHgwMTsKKwkJd3JpdGVsKGN0cmwsIHZlcnNhdGlsZV9pYjJfY3RybCk7CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZyYW1lc2l6ZSA9IFNaXzFNOworCitzdGF0aWMgaW50IHZlcnNhdGlsZV9jbGNkX3NldHVwKHN0cnVjdCBjbGNkX2ZiICpmYikKK3sKKwlkbWFfYWRkcl90IGRtYTsKKworCWZiLT5wYW5lbAkJPSB2ZXJzYXRpbGVfY2xjZF9wYW5lbCgpOworCisJZmItPmZiLnNjcmVlbl9iYXNlID0gZG1hX2FsbG9jX3dyaXRlY29tYmluZSgmZmItPmRldi0+ZGV2LCBmcmFtZXNpemUsCisJCQkJCQkgICAgJmRtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmYi0+ZmIuc2NyZWVuX2Jhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDTENEOiB1bmFibGUgdG8gbWFwIGZyYW1lYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZmItPmZiLmZpeC5zbWVtX3N0YXJ0CT0gZG1hOworCWZiLT5mYi5maXguc21lbV9sZW4JPSBmcmFtZXNpemU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2ZXJzYXRpbGVfY2xjZF9tbWFwKHN0cnVjdCBjbGNkX2ZiICpmYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJcmV0dXJuIGRtYV9tbWFwX3dyaXRlY29tYmluZSgmZmItPmRldi0+ZGV2LCB2bWEsCisJCQkJICAgICBmYi0+ZmIuc2NyZWVuX2Jhc2UsCisJCQkJICAgICBmYi0+ZmIuZml4LnNtZW1fc3RhcnQsCisJCQkJICAgICBmYi0+ZmIuZml4LnNtZW1fbGVuKTsKK30KKworc3RhdGljIHZvaWQgdmVyc2F0aWxlX2NsY2RfcmVtb3ZlKHN0cnVjdCBjbGNkX2ZiICpmYikKK3sKKwlkbWFfZnJlZV93cml0ZWNvbWJpbmUoJmZiLT5kZXYtPmRldiwgZmItPmZiLmZpeC5zbWVtX2xlbiwKKwkJCSAgICAgIGZiLT5mYi5zY3JlZW5fYmFzZSwgZmItPmZiLmZpeC5zbWVtX3N0YXJ0KTsKK30KKworc3RhdGljIHN0cnVjdCBjbGNkX2JvYXJkIGNsY2RfcGxhdF9kYXRhID0geworCS5uYW1lCQk9ICJWZXJzYXRpbGUiLAorCS5jaGVjawkJPSBjbGNkZmJfY2hlY2ssCisJLmRlY29kZQkJPSBjbGNkZmJfZGVjb2RlLAorCS5kaXNhYmxlCT0gdmVyc2F0aWxlX2NsY2RfZGlzYWJsZSwKKwkuZW5hYmxlCQk9IHZlcnNhdGlsZV9jbGNkX2VuYWJsZSwKKwkuc2V0dXAJCT0gdmVyc2F0aWxlX2NsY2Rfc2V0dXAsCisJLm1tYXAJCT0gdmVyc2F0aWxlX2NsY2RfbW1hcCwKKwkucmVtb3ZlCQk9IHZlcnNhdGlsZV9jbGNkX3JlbW92ZSwKK307CisKKyNkZWZpbmUgQUFDSV9JUlEJeyBJUlFfQUFDSSwgTk9fSVJRIH0KKyNkZWZpbmUgQUFDSV9ETUEJeyAweDgwLCAweDgxIH0KKyNkZWZpbmUgTU1DSTBfSVJRCXsgSVJRX01NQ0kwQSxJUlFfU0lDX01NQ0kwQiB9CisjZGVmaW5lIE1NQ0kwX0RNQQl7IDB4ODQsIDAgfQorI2RlZmluZSBLTUkwX0lSUQl7IElSUV9TSUNfS01JMCwgTk9fSVJRIH0KKyNkZWZpbmUgS01JMF9ETUEJeyAwLCAwIH0KKyNkZWZpbmUgS01JMV9JUlEJeyBJUlFfU0lDX0tNSTEsIE5PX0lSUSB9CisjZGVmaW5lIEtNSTFfRE1BCXsgMCwgMCB9CisKKy8qCisgKiBUaGVzZSBkZXZpY2VzIGFyZSBjb25uZWN0ZWQgZGlyZWN0bHkgdG8gdGhlIG11bHRpLWxheWVyIEFIQiBzd2l0Y2gKKyAqLworI2RlZmluZSBTTUNfSVJRCQl7IE5PX0lSUSwgTk9fSVJRIH0KKyNkZWZpbmUgU01DX0RNQQkJeyAwLCAwIH0KKyNkZWZpbmUgTVBNQ19JUlEJeyBOT19JUlEsIE5PX0lSUSB9CisjZGVmaW5lIE1QTUNfRE1BCXsgMCwgMCB9CisjZGVmaW5lIENMQ0RfSVJRCXsgSVJRX0NMQ0RJTlQsIE5PX0lSUSB9CisjZGVmaW5lIENMQ0RfRE1BCXsgMCwgMCB9CisjZGVmaW5lIERNQUNfSVJRCXsgSVJRX0RNQUlOVCwgTk9fSVJRIH0KKyNkZWZpbmUgRE1BQ19ETUEJeyAwLCAwIH0KKworLyoKKyAqIFRoZXNlIGRldmljZXMgYXJlIGNvbm5lY3RlZCB2aWEgdGhlIGNvcmUgQVBCIGJyaWRnZQorICovCisjZGVmaW5lIFNDVExfSVJRCXsgTk9fSVJRLCBOT19JUlEgfQorI2RlZmluZSBTQ1RMX0RNQQl7IDAsIDAgfQorI2RlZmluZSBXQVRDSERPR19JUlEJeyBJUlFfV0RPR0lOVCwgTk9fSVJRIH0KKyNkZWZpbmUgV0FUQ0hET0dfRE1BCXsgMCwgMCB9CisjZGVmaW5lIEdQSU8wX0lSUQl7IElSUV9HUElPSU5UMCwgTk9fSVJRIH0KKyNkZWZpbmUgR1BJTzBfRE1BCXsgMCwgMCB9CisjZGVmaW5lIEdQSU8xX0lSUQl7IElSUV9HUElPSU5UMSwgTk9fSVJRIH0KKyNkZWZpbmUgR1BJTzFfRE1BCXsgMCwgMCB9CisjZGVmaW5lIFJUQ19JUlEJCXsgSVJRX1JUQ0lOVCwgTk9fSVJRIH0KKyNkZWZpbmUgUlRDX0RNQQkJeyAwLCAwIH0KKworLyoKKyAqIFRoZXNlIGRldmljZXMgYXJlIGNvbm5lY3RlZCB2aWEgdGhlIERNQSBBUEIgYnJpZGdlCisgKi8KKyNkZWZpbmUgU0NJX0lSUQkJeyBJUlFfU0NJSU5ULCBOT19JUlEgfQorI2RlZmluZSBTQ0lfRE1BCQl7IDcsIDYgfQorI2RlZmluZSBVQVJUMF9JUlEJeyBJUlFfVUFSVElOVDAsIE5PX0lSUSB9CisjZGVmaW5lIFVBUlQwX0RNQQl7IDE1LCAxNCB9CisjZGVmaW5lIFVBUlQxX0lSUQl7IElSUV9VQVJUSU5UMSwgTk9fSVJRIH0KKyNkZWZpbmUgVUFSVDFfRE1BCXsgMTMsIDEyIH0KKyNkZWZpbmUgVUFSVDJfSVJRCXsgSVJRX1VBUlRJTlQyLCBOT19JUlEgfQorI2RlZmluZSBVQVJUMl9ETUEJeyAxMSwgMTAgfQorI2RlZmluZSBTU1BfSVJRCQl7IElSUV9TU1BJTlQsIE5PX0lSUSB9CisjZGVmaW5lIFNTUF9ETUEJCXsgOSwgOCB9CisKKy8qIEZQR0EgUHJpbWVjZWxscyAqLworQU1CQV9ERVZJQ0UoYWFjaSwgICJmcGdhOjA0IiwgQUFDSSwgICAgIE5VTEwpOworQU1CQV9ERVZJQ0UobW1jMCwgICJmcGdhOjA1IiwgTU1DSTAsICAgICZtbWMwX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShrbWkwLCAgImZwZ2E6MDYiLCBLTUkwLCAgICAgTlVMTCk7CitBTUJBX0RFVklDRShrbWkxLCAgImZwZ2E6MDciLCBLTUkxLCAgICAgTlVMTCk7CisKKy8qIERldkNoaXAgUHJpbWVjZWxscyAqLworQU1CQV9ERVZJQ0Uoc21jLCAgICJkZXY6MDAiLCAgU01DLCAgICAgIE5VTEwpOworQU1CQV9ERVZJQ0UobXBtYywgICJkZXY6MTAiLCAgTVBNQywgICAgIE5VTEwpOworQU1CQV9ERVZJQ0UoY2xjZCwgICJkZXY6MjAiLCAgQ0xDRCwgICAgICZjbGNkX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShkbWFjLCAgImRldjozMCIsICBETUFDLCAgICAgTlVMTCk7CitBTUJBX0RFVklDRShzY3RsLCAgImRldjplMCIsICBTQ1RMLCAgICAgTlVMTCk7CitBTUJBX0RFVklDRSh3ZG9nLCAgImRldjplMSIsICBXQVRDSERPRywgTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwgImRldjplNCIsICBHUElPMCwgICAgTlVMTCk7CitBTUJBX0RFVklDRShncGlvMSwgImRldjplNSIsICBHUElPMSwgICAgTlVMTCk7CitBTUJBX0RFVklDRShydGMsICAgImRldjplOCIsICBSVEMsICAgICAgTlVMTCk7CitBTUJBX0RFVklDRShzY2kwLCAgImRldjpmMCIsICBTQ0ksICAgICAgTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MCwgImRldjpmMSIsICBVQVJUMCwgICAgTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MSwgImRldjpmMiIsICBVQVJUMSwgICAgTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MiwgImRldjpmMyIsICBVQVJUMiwgICAgTlVMTCk7CitBTUJBX0RFVklDRShzc3AwLCAgImRldjpmNCIsICBTU1AsICAgICAgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CisJJmRtYWNfZGV2aWNlLAorCSZ1YXJ0MF9kZXZpY2UsCisJJnVhcnQxX2RldmljZSwKKwkmdWFydDJfZGV2aWNlLAorCSZzbWNfZGV2aWNlLAorCSZtcG1jX2RldmljZSwKKwkmY2xjZF9kZXZpY2UsCisJJnNjdGxfZGV2aWNlLAorCSZ3ZG9nX2RldmljZSwKKwkmZ3BpbzBfZGV2aWNlLAorCSZncGlvMV9kZXZpY2UsCisJJnJ0Y19kZXZpY2UsCisJJnNjaTBfZGV2aWNlLAorCSZzc3AwX2RldmljZSwKKwkmYWFjaV9kZXZpY2UsCisJJm1tYzBfZGV2aWNlLAorCSZrbWkwX2RldmljZSwKKwkma21pMV9kZXZpY2UsCit9OworCisjaWZkZWYgQ09ORklHX0xFRFMKKyNkZWZpbmUgVkFfTEVEU19CQVNFIChJT19BRERSRVNTKFZFUlNBVElMRV9TWVNfQkFTRSkgKyBWRVJTQVRJTEVfU1lTX0xFRF9PRkZTRVQpCisKK3N0YXRpYyB2b2lkIHZlcnNhdGlsZV9sZWRzX2V2ZW50KGxlZF9ldmVudF90IGxlZGV2dCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2YWw7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdmFsID0gcmVhZGwoVkFfTEVEU19CQVNFKTsKKworCXN3aXRjaCAobGVkZXZ0KSB7CisJY2FzZSBsZWRfaWRsZV9zdGFydDoKKwkJdmFsID0gdmFsICYgflZFUlNBVElMRV9TWVNfTEVEMDsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9pZGxlX2VuZDoKKwkJdmFsID0gdmFsIHwgVkVSU0FUSUxFX1NZU19MRUQwOworCQlicmVhazsKKworCWNhc2UgbGVkX3RpbWVyOgorCQl2YWwgPSB2YWwgXiBWRVJTQVRJTEVfU1lTX0xFRDE7CisJCWJyZWFrOworCisJY2FzZSBsZWRfaGFsdGVkOgorCQl2YWwgPSAwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXdyaXRlbCh2YWwsIFZBX0xFRFNfQkFTRSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorI2VuZGlmCS8qIENPTkZJR19MRURTICovCisKK3ZvaWQgX19pbml0IHZlcnNhdGlsZV9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwljbGtfcmVnaXN0ZXIoJnZlcnNhdGlsZV9jbGNkX2Nsayk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnZlcnNhdGlsZV9mbGFzaF9kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc21jOTF4X2RldmljZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspIHsKKwkJc3RydWN0IGFtYmFfZGV2aWNlICpkID0gYW1iYV9kZXZzW2ldOworCQlhbWJhX2RldmljZV9yZWdpc3RlcihkLCAmaW9tZW1fcmVzb3VyY2UpOworCX0KKworI2lmZGVmIENPTkZJR19MRURTCisJbGVkc19ldmVudCA9IHZlcnNhdGlsZV9sZWRzX2V2ZW50OworI2VuZGlmCit9CisKKy8qCisgKiBXaGVyZSBpcyB0aGUgdGltZXIgKFZBKT8KKyAqLworI2RlZmluZSBUSU1FUjBfVkFfQkFTRQkJIElPX0FERFJFU1MoVkVSU0FUSUxFX1RJTUVSMF8xX0JBU0UpCisjZGVmaW5lIFRJTUVSMV9WQV9CQVNFCQkoSU9fQUREUkVTUyhWRVJTQVRJTEVfVElNRVIwXzFfQkFTRSkgKyAweDIwKQorI2RlZmluZSBUSU1FUjJfVkFfQkFTRQkJIElPX0FERFJFU1MoVkVSU0FUSUxFX1RJTUVSMl8zX0JBU0UpCisjZGVmaW5lIFRJTUVSM19WQV9CQVNFCQkoSU9fQUREUkVTUyhWRVJTQVRJTEVfVElNRVIyXzNfQkFTRSkgKyAweDIwKQorI2RlZmluZSBWQV9JQ19CQVNFCQkgSU9fQUREUkVTUyhWRVJTQVRJTEVfVklDX0JBU0UpIAorCisvKgorICogSG93IGxvbmcgaXMgdGhlIHRpbWVyIGludGVydmFsPworICovCisjZGVmaW5lIFRJTUVSX0lOVEVSVkFMCShUSUNLU19QRVJfdVNFQyAqIG1TRUNfMTApCisjaWYgVElNRVJfSU5URVJWQUwgPj0gMHgxMDAwMDAKKyNkZWZpbmUgVElNRVJfUkVMT0FECShUSU1FUl9JTlRFUlZBTCA+PiA4KQkJLyogRGl2aWRlIGJ5IDI1NiAqLworI2RlZmluZSBUSU1FUl9DVFJMCTB4ODgJCQkJLyogRW5hYmxlLCBDbG9jayAvIDI1NiAqLworI2RlZmluZSBUSUNLUzJVU0VDUyh4KQkoMjU2ICogKHgpIC8gVElDS1NfUEVSX3VTRUMpCisjZWxpZiBUSU1FUl9JTlRFUlZBTCA+PSAweDEwMDAwCisjZGVmaW5lIFRJTUVSX1JFTE9BRAkoVElNRVJfSU5URVJWQUwgPj4gNCkJCS8qIERpdmlkZSBieSAxNiAqLworI2RlZmluZSBUSU1FUl9DVFJMCTB4ODQJCQkJLyogRW5hYmxlLCBDbG9jayAvIDE2ICovCisjZGVmaW5lIFRJQ0tTMlVTRUNTKHgpCSgxNiAqICh4KSAvIFRJQ0tTX1BFUl91U0VDKQorI2Vsc2UKKyNkZWZpbmUgVElNRVJfUkVMT0FECShUSU1FUl9JTlRFUlZBTCkKKyNkZWZpbmUgVElNRVJfQ1RSTAkweDgwCQkJCS8qIEVuYWJsZSAqLworI2RlZmluZSBUSUNLUzJVU0VDUyh4KQkoKHgpIC8gVElDS1NfUEVSX3VTRUMpCisjZW5kaWYKKworI2RlZmluZSBUSU1FUl9DVFJMX0lFCSgxIDw8IDUpCS8qIEludGVycnVwdCBFbmFibGUgKi8KKworLyoKKyAqIFdoYXQgZG9lcyBpdCBsb29rIGxpa2U/CisgKi8KK3R5cGVkZWYgc3RydWN0IFRpbWVyU3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIFRpbWVyTG9hZDsKKwl1bnNpZ25lZCBsb25nIFRpbWVyVmFsdWU7CisJdW5zaWduZWQgbG9uZyBUaW1lckNvbnRyb2w7CisJdW5zaWduZWQgbG9uZyBUaW1lckNsZWFyOworfSBUaW1lclN0cnVjdF90OworCisvKgorICogUmV0dXJucyBudW1iZXIgb2YgbXMgc2luY2UgbGFzdCBjbG9jayBpbnRlcnJ1cHQuICBOb3RlIHRoYXQgaW50ZXJydXB0cworICogd2lsbCBoYXZlIGJlZW4gZGlzYWJsZWQgYnkgZG9fZ2V0dGltZW9mZnNldCgpCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHZlcnNhdGlsZV9nZXR0aW1lb2Zmc2V0KHZvaWQpCit7CisJdm9sYXRpbGUgVGltZXJTdHJ1Y3RfdCAqdGltZXIwID0gKFRpbWVyU3RydWN0X3QgKilUSU1FUjBfVkFfQkFTRTsKKwl1bnNpZ25lZCBsb25nIHRpY2tzMSwgdGlja3MyLCBzdGF0dXM7CisKKwkvKgorCSAqIEdldCB0aGUgY3VycmVudCBudW1iZXIgb2YgdGlja3MuICBOb3RlIHRoYXQgdGhlcmUgaXMgYSByYWNlCisJICogY29uZGl0aW9uIGJldHdlZW4gdXMgcmVhZGluZyB0aGUgdGltZXIgYW5kIGNoZWNraW5nIGZvcgorCSAqIGFuIGludGVycnVwdC4gIFdlIGdldCBhcm91bmQgdGhpcyBieSBlbnN1cmluZyB0aGF0IHRoZQorCSAqIGNvdW50ZXIgaGFzIG5vdCByZWxvYWRlZCBiZXR3ZWVuIG91ciB0d28gcmVhZHMuCisJICovCisJdGlja3MyID0gdGltZXIwLT5UaW1lclZhbHVlICYgMHhmZmZmOworCWRvIHsKKwkJdGlja3MxID0gdGlja3MyOworCQlzdGF0dXMgPSBfX3Jhd19yZWFkbChWQV9JQ19CQVNFICsgVklDX0lSUV9SQVdfU1RBVFVTKTsKKwkJdGlja3MyID0gdGltZXIwLT5UaW1lclZhbHVlICYgMHhmZmZmOworCX0gd2hpbGUgKHRpY2tzMiA+IHRpY2tzMSk7CisKKwkvKgorCSAqIE51bWJlciBvZiB0aWNrcyBzaW5jZSBsYXN0IGludGVycnVwdC4KKwkgKi8KKwl0aWNrczEgPSBUSU1FUl9SRUxPQUQgLSB0aWNrczI7CisKKwkvKgorCSAqIEludGVycnVwdCBwZW5kaW5nPyAgSWYgc28sIHdlJ3ZlIHJlbG9hZGVkIG9uY2UgYWxyZWFkeS4KKwkgKgorCSAqIEZJWE1FOiBOZWVkIHRvIGNoZWNrIHRoaXMgaXMgZWZmZWN0aXZlbHkgdGltZXIgMCB0aGF0IGV4cGlyZXMKKwkgKi8KKwlpZiAoc3RhdHVzICYgSVJRTUFTS19USU1FUklOVDBfMSkKKwkJdGlja3MxICs9IFRJTUVSX1JFTE9BRDsKKworCS8qCisJICogQ29udmVydCB0aGUgdGlja3MgdG8gdXNlY3MKKwkgKi8KKwlyZXR1cm4gVElDS1MyVVNFQ1ModGlja3MxKTsKK30KKworLyoKKyAqIElSUSBoYW5kbGVyIGZvciB0aGUgdGltZXIKKyAqLworc3RhdGljIGlycXJldHVybl90IHZlcnNhdGlsZV90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl2b2xhdGlsZSBUaW1lclN0cnVjdF90ICp0aW1lcjAgPSAodm9sYXRpbGUgVGltZXJTdHJ1Y3RfdCAqKVRJTUVSMF9WQV9CQVNFOworCisJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CisKKwkvLyAuLi5jbGVhciB0aGUgaW50ZXJydXB0CisJdGltZXIwLT5UaW1lckNsZWFyID0gMTsKKworCXRpbWVyX3RpY2socmVncyk7CisKKwl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB2ZXJzYXRpbGVfdGltZXJfaXJxID0geworCS5uYW1lCQk9ICJWZXJzYXRpbGUgVGltZXIgVGljayIsCisJLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCwKKwkuaGFuZGxlcgk9IHZlcnNhdGlsZV90aW1lcl9pbnRlcnJ1cHQKK307CisKKy8qCisgKiBTZXQgdXAgdGltZXIgaW50ZXJydXB0LCBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgaW4gc2Vjb25kcy4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHZlcnNhdGlsZV90aW1lcl9pbml0KHZvaWQpCit7CisJdm9sYXRpbGUgVGltZXJTdHJ1Y3RfdCAqdGltZXIwID0gKHZvbGF0aWxlIFRpbWVyU3RydWN0X3QgKilUSU1FUjBfVkFfQkFTRTsKKwl2b2xhdGlsZSBUaW1lclN0cnVjdF90ICp0aW1lcjEgPSAodm9sYXRpbGUgVGltZXJTdHJ1Y3RfdCAqKVRJTUVSMV9WQV9CQVNFOworCXZvbGF0aWxlIFRpbWVyU3RydWN0X3QgKnRpbWVyMiA9ICh2b2xhdGlsZSBUaW1lclN0cnVjdF90ICopVElNRVIyX1ZBX0JBU0U7CisJdm9sYXRpbGUgVGltZXJTdHJ1Y3RfdCAqdGltZXIzID0gKHZvbGF0aWxlIFRpbWVyU3RydWN0X3QgKilUSU1FUjNfVkFfQkFTRTsKKworCS8qIAorCSAqIHNldCBjbG9jayBmcmVxdWVuY3k6IAorCSAqCVZFUlNBVElMRV9SRUZDTEsgaXMgMzJLSHoKKwkgKglWRVJTQVRJTEVfVElNQ0xLIGlzIDFNSHoKKwkgKi8KKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKUlPX0FERFJFU1MoVkVSU0FUSUxFX1NDVExfQkFTRSkgfD0gCisJICAoKFZFUlNBVElMRV9USU1DTEsgPDwgVkVSU0FUSUxFX1RJTUVSMV9FblNlbCkgfCAoVkVSU0FUSUxFX1RJTUNMSyA8PCBWRVJTQVRJTEVfVElNRVIyX0VuU2VsKSB8IAorCSAgIChWRVJTQVRJTEVfVElNQ0xLIDw8IFZFUlNBVElMRV9USU1FUjNfRW5TZWwpIHwgKFZFUlNBVElMRV9USU1DTEsgPDwgVkVSU0FUSUxFX1RJTUVSNF9FblNlbCkpOworCisJLyoKKwkgKiBJbml0aWFsaXNlIHRvIGEga25vd24gc3RhdGUgKGFsbCB0aW1lcnMgb2ZmKQorCSAqLworCXRpbWVyMC0+VGltZXJDb250cm9sID0gMDsKKwl0aW1lcjEtPlRpbWVyQ29udHJvbCA9IDA7CisJdGltZXIyLT5UaW1lckNvbnRyb2wgPSAwOworCXRpbWVyMy0+VGltZXJDb250cm9sID0gMDsKKworCXRpbWVyMC0+VGltZXJMb2FkICAgID0gVElNRVJfUkVMT0FEOworCXRpbWVyMC0+VGltZXJWYWx1ZSAgID0gVElNRVJfUkVMT0FEOworCXRpbWVyMC0+VGltZXJDb250cm9sID0gVElNRVJfQ1RSTCB8IDB4NDAgfCBUSU1FUl9DVFJMX0lFOyAgLyogcGVyaW9kaWMgKyBJRSAqLworCisJLyogCisJICogTWFrZSBpcnFzIGhhcHBlbiBmb3IgdGhlIHN5c3RlbSB0aW1lcgorCSAqLworCXNldHVwX2lycShJUlFfVElNRVJJTlQwXzEsICZ2ZXJzYXRpbGVfdGltZXJfaXJxKTsKK30KKworc3RydWN0IHN5c190aW1lciB2ZXJzYXRpbGVfdGltZXIgPSB7CisJLmluaXQJCT0gdmVyc2F0aWxlX3RpbWVyX2luaXQsCisJLm9mZnNldAkJPSB2ZXJzYXRpbGVfZ2V0dGltZW9mZnNldCwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmggYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg4YzIwNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQVJNIExpbWl0ZWQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1ZFUlNBVElMRV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVkVSU0FUSUxFX0gKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hbWJhLmg+CisKK2V4dGVybiB2b2lkIF9faW5pdCB2ZXJzYXRpbGVfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCB2ZXJzYXRpbGVfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgdmVyc2F0aWxlX21hcF9pbyh2b2lkKTsKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIHZlcnNhdGlsZV90aW1lcjsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbW1jX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisjZGVmaW5lIEFNQkFfREVWSUNFKG5hbWUsYnVzaWQsYmFzZSxwbGF0KQkJCVwKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgbmFtZSMjX2RldmljZSA9IHsJCQlcCisJLmRldgkJPSB7CQkJCQlcCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IH4wLAkJCVwKKwkJLmJ1c19pZAk9IGJ1c2lkLAkJCQlcCisJCS5wbGF0Zm9ybV9kYXRhID0gcGxhdCwJCQkJXAorCX0sCQkJCQkJCVwKKwkucmVzCQk9IHsJCQkJCVwKKwkJLnN0YXJ0CT0gVkVSU0FUSUxFXyMjYmFzZSMjX0JBU0UsCQlcCisJCS5lbmQJPSAoVkVSU0FUSUxFXyMjYmFzZSMjX0JBU0UpICsgU1pfNEsgLSAxLFwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCQkJXAorCX0sCQkJCQkJCVwKKwkuZG1hX21hc2sJPSB+MCwJCQkJCVwKKwkuaXJxCQk9IGJhc2UjI19JUlEsCQkJCVwKKwkvKiAuZG1hCQk9IGJhc2UjI19ETUEsKi8JCQkJXAorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9hYi5jIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlX2FiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMzMjA4NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9hYi5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlX2FiLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEFSTSBMaW1pdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvYW1iYS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCisjaW5jbHVkZSAiY29yZS5oIgorCitNQUNISU5FX1NUQVJUKFZFUlNBVElMRV9BQiwgIkFSTS1WZXJzYXRpbGUgQUIiKQorCU1BSU5UQUlORVIoIkFSTSBMdGQvRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQiKQorCUJPT1RfTUVNKDB4MDAwMDAwMDAsIDB4MTAxZjEwMDAsIDB4ZjExZjEwMDApCisJQk9PVF9QQVJBTVMoMHgwMDAwMDEwMCkKKwlNQVBJTyh2ZXJzYXRpbGVfbWFwX2lvKQorCUlOSVRJUlEodmVyc2F0aWxlX2luaXRfaXJxKQorCS50aW1lcgkJPSAmdmVyc2F0aWxlX3RpbWVyLAorCUlOSVRfTUFDSElORSh2ZXJzYXRpbGVfaW5pdCkKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGVfcGIuYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9wYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MDIwOTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGVfcGIuYwpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGVfcGIuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQVJNIExpbWl0ZWQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hbWJhLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CisKKyNpbmNsdWRlICJjb3JlLmgiCisKKyNpZiAxCisjZGVmaW5lIElSUV9NTUNJMUEJSVJRX1ZJQ1NPVVJDRTIzCisjZWxzZQorI2RlZmluZSBJUlFfTU1DSTFBCUlSUV9TSUNfTU1DSTFBCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSBtbWMxX3BsYXRfZGF0YSA9IHsKKwkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLnN0YXR1cwkJPSBtbWNfc3RhdHVzLAorfTsKKworI2RlZmluZSBVQVJUM19JUlEJeyBJUlFfU0lDX1VBUlQzLCBOT19JUlEgfQorI2RlZmluZSBVQVJUM19ETUEJeyAweDg2LCAweDg3IH0KKyNkZWZpbmUgU0NJMV9JUlEJeyBJUlFfU0lDX1NDSTMsIE5PX0lSUSB9CisjZGVmaW5lIFNDSTFfRE1BCXsgMHg4OCwgMHg4OSB9CisjZGVmaW5lIE1NQ0kxX0lSUQl7IElSUV9NTUNJMUEsIElSUV9TSUNfTU1DSTFCIH0KKyNkZWZpbmUgTU1DSTFfRE1BCXsgMHg4NSwgMCB9CisKKy8qCisgKiBUaGVzZSBkZXZpY2VzIGFyZSBjb25uZWN0ZWQgdmlhIHRoZSBjb3JlIEFQQiBicmlkZ2UKKyAqLworI2RlZmluZSBHUElPMl9JUlEJeyBJUlFfR1BJT0lOVDIsIE5PX0lSUSB9CisjZGVmaW5lIEdQSU8yX0RNQQl7IDAsIDAgfQorI2RlZmluZSBHUElPM19JUlEJeyBJUlFfR1BJT0lOVDMsIE5PX0lSUSB9CisjZGVmaW5lIEdQSU8zX0RNQQl7IDAsIDAgfQorCisvKgorICogVGhlc2UgZGV2aWNlcyBhcmUgY29ubmVjdGVkIHZpYSB0aGUgRE1BIEFQQiBicmlkZ2UKKyAqLworCisvKiBGUEdBIFByaW1lY2VsbHMgKi8KK0FNQkFfREVWSUNFKHVhcnQzLCAiZnBnYTowOSIsIFVBUlQzLCAgICBOVUxMKTsKK0FNQkFfREVWSUNFKHNjaTEsICAiZnBnYTowYSIsIFNDSTEsICAgICBOVUxMKTsKK0FNQkFfREVWSUNFKG1tYzEsICAiZnBnYTowYiIsIE1NQ0kxLCAgICAmbW1jMV9wbGF0X2RhdGEpOworCisvKiBEZXZDaGlwIFByaW1lY2VsbHMgKi8KK0FNQkFfREVWSUNFKGdwaW8yLCAiZGV2OmU2IiwgIEdQSU8yLCAgICBOVUxMKTsKK0FNQkFfREVWSUNFKGdwaW8zLCAiZGV2OmU3IiwgIEdQSU8zLCAgICBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKKwkmdWFydDNfZGV2aWNlLAorCSZncGlvMl9kZXZpY2UsCisJJmdwaW8zX2RldmljZSwKKwkmc2NpMV9kZXZpY2UsCisJJm1tYzFfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdmVyc2F0aWxlX3BiX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWlmIChtYWNoaW5lX2lzX3ZlcnNhdGlsZV9wYigpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFtYmFfZGV2cyk7IGkrKykgeworCQkJc3RydWN0IGFtYmFfZGV2aWNlICpkID0gYW1iYV9kZXZzW2ldOworCQkJYW1iYV9kZXZpY2VfcmVnaXN0ZXIoZCwgJmlvbWVtX3Jlc291cmNlKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKHZlcnNhdGlsZV9wYl9pbml0KTsKKworTUFDSElORV9TVEFSVChWRVJTQVRJTEVfUEIsICJBUk0tVmVyc2F0aWxlIFBCIikKKwlNQUlOVEFJTkVSKCJBUk0gTHRkL0RlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkIikKKwlCT09UX01FTSgweDAwMDAwMDAwLCAweDEwMWYxMDAwLCAweGYxMWYxMDAwKQorCUJPT1RfUEFSQU1TKDB4MDAwMDAxMDApCisJTUFQSU8odmVyc2F0aWxlX21hcF9pbykKKwlJTklUSVJRKHZlcnNhdGlsZV9pbml0X2lycSkKKwkudGltZXIJCT0gJnZlcnNhdGlsZV90aW1lciwKKwlJTklUX01BQ0hJTkUodmVyc2F0aWxlX2luaXQpCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI2NzBjOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL0tjb25maWcKQEAgLTAsMCArMSw0MTEgQEAKK2NvbW1lbnQgIlByb2Nlc3NvciBUeXBlIgorCitjb25maWcgQ1BVXzMyCisJYm9vbAorCWRlZmF1bHQgeQorCisjIFNlbGVjdCBDUFUgdHlwZXMgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUgc2VsZWN0ZWQuICBUaGlzIHNlbGVjdHMKKyMgd2hpY2ggQ1BVcyB3ZSBzdXBwb3J0IGluIHRoZSBrZXJuZWwgaW1hZ2UsIGFuZCB0aGUgY29tcGlsZXIgaW5zdHJ1Y3Rpb24KKyMgb3B0aW1pc2VyIGJlaGF2aW91ci4KKworIyBBUk02MTAKK2NvbmZpZyBDUFVfQVJNNjEwCisJYm9vbCAiU3VwcG9ydCBBUk02MTAgcHJvY2Vzc29yIgorCWRlcGVuZHMgb24gQVJDSF9SUEMKKwlzZWxlY3QgQ1BVXzMydjMKKwlzZWxlY3QgQ1BVX0NBQ0hFX1YzCisJc2VsZWN0IENQVV9DQUNIRV9WSVZUCisJc2VsZWN0IENQVV9DT1BZX1YzCisJc2VsZWN0IENQVV9UTEJfVjMKKwloZWxwCisJICBUaGUgQVJNNjEwIGlzIHRoZSBzdWNjZXNzb3IgdG8gdGhlIEFSTTMgcHJvY2Vzc29yCisJICBhbmQgd2FzIHByb2R1Y2VkIGJ5IFZMU0kgVGVjaG5vbG9neSBJbmMuCisKKwkgIFNheSBZIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSBBUk02MTAgcHJvY2Vzc29yLgorCSAgT3RoZXJ3aXNlLCBzYXkgTi4KKworIyBBUk03MTAKK2NvbmZpZyBDUFVfQVJNNzEwCisJYm9vbCAiU3VwcG9ydCBBUk03MTAgcHJvY2Vzc29yIiBpZiAhQVJDSF9DTFBTNzUwMCAmJiBBUkNIX1JQQworCWRlZmF1bHQgeSBpZiBBUkNIX0NMUFM3NTAwCisJc2VsZWN0IENQVV8zMnYzCisJc2VsZWN0IENQVV9DQUNIRV9WMworCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAorCXNlbGVjdCBDUFVfQ09QWV9WMworCXNlbGVjdCBDUFVfVExCX1YzCisJaGVscAorCSAgQSAzMi1iaXQgUklTQyBtaWNyb3Byb2Nlc3NvciBiYXNlZCBvbiB0aGUgQVJNNyBwcm9jZXNzb3IgY29yZQorCSAgZGVzaWduZWQgYnkgQWR2YW5jZWQgUklTQyBNYWNoaW5lcyBMdGQuIFRoZSBBUk03MTAgaXMgdGhlCisJICBzdWNjZXNzb3IgdG8gdGhlIEFSTTYxMCBwcm9jZXNzb3IuIEl0IHdhcyByZWxlYXNlZCBpbgorCSAgSnVseSAxOTk0IGJ5IFZMU0kgVGVjaG5vbG9neSBJbmMuCisKKwkgIFNheSBZIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSBBUk03MTAgcHJvY2Vzc29yLgorCSAgT3RoZXJ3aXNlLCBzYXkgTi4KKworIyBBUk03MjBUCitjb25maWcgQ1BVX0FSTTcyMFQKKwlib29sICJTdXBwb3J0IEFSTTcyMFQgcHJvY2Vzc29yIiBpZiAhQVJDSF9DTFBTNzExWCAmJiAhQVJDSF9MNzIwMCAmJiAhQVJDSF9DREI4OTcxMiAmJiBBUkNIX0lOVEVHUkFUT1IKKwlkZWZhdWx0IHkgaWYgQVJDSF9DTFBTNzExWCB8fCBBUkNIX0w3MjAwIHx8IEFSQ0hfQ0RCODk3MTIgfHwgQVJDSF9INzIwWAorCXNlbGVjdCBDUFVfMzJ2NAorCXNlbGVjdCBDUFVfQUJSVF9MVjRUCisJc2VsZWN0IENQVV9DQUNIRV9WNAorCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAorCXNlbGVjdCBDUFVfQ09QWV9WNFdUCisJc2VsZWN0IENQVV9UTEJfVjRXVAorCWhlbHAKKwkgIEEgMzItYml0IFJJU0MgcHJvY2Vzc29yIHdpdGggOGtCeXRlIENhY2hlLCBXcml0ZSBCdWZmZXIgYW5kCisJICBNTVUgYnVpbHQgYXJvdW5kIGFuIEFSTTdURE1JIGNvcmUuCisKKwkgIFNheSBZIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSBBUk03MjBUIHByb2Nlc3Nvci4KKwkgIE90aGVyd2lzZSwgc2F5IE4uCisKKyMgQVJNOTIwVAorY29uZmlnIENQVV9BUk05MjBUCisJYm9vbCAiU3VwcG9ydCBBUk05MjBUIHByb2Nlc3NvciIgaWYgIUFSQ0hfUzNDMjQxMAorCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SIHx8IEFSQ0hfUzNDMjQxMCB8fCBBUkNIX0lNWAorCWRlZmF1bHQgeSBpZiBBUkNIX1MzQzI0MTAKKwlzZWxlY3QgQ1BVXzMydjQKKwlzZWxlY3QgQ1BVX0FCUlRfRVY0VAorCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVAorCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAorCXNlbGVjdCBDUFVfQ09QWV9WNFdCCisJc2VsZWN0IENQVV9UTEJfVjRXQkkKKwloZWxwCisJICBUaGUgQVJNOTIwVCBpcyBsaWNlbnNlZCB0byBiZSBwcm9kdWNlZCBieSBudW1lcm91cyB2ZW5kb3JzLAorCSAgYW5kIGlzIHVzZWQgaW4gdGhlIE1hdmVyaWNrIEVQOTMxMiBhbmQgdGhlIFNhbXN1bmcgUzNDMjQxMC4KKworCSAgTW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgTWF2ZXJpY2sgRVA5MzEyIGF0CisJICA8aHR0cDovL2xpbnV4ZGV2aWNlcy5jb20vcHJvZHVjdHMvUEQyMzgyODY2MDY4Lmh0bWw+LgorCisJICBTYXkgWSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgQVJNOTIwVCBwcm9jZXNzb3IuCisJICBPdGhlcndpc2UsIHNheSBOLgorCisjIEFSTTkyMlQKK2NvbmZpZyBDUFVfQVJNOTIyVAorCWJvb2wgIlN1cHBvcnQgQVJNOTIyVCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgorCWRlcGVuZHMgb24gQVJDSF9DQU1FTE9UIHx8IEFSQ0hfTEg3QTQwWCB8fCBBUkNIX0lOVEVHUkFUT1IKKwlkZWZhdWx0IHkgaWYgQVJDSF9DQU1FTE9UIHx8IEFSQ0hfTEg3QTQwWAorCXNlbGVjdCBDUFVfMzJ2NAorCXNlbGVjdCBDUFVfQUJSVF9FVjRUCisJc2VsZWN0IENQVV9DQUNIRV9WNFdUCisJc2VsZWN0IENQVV9DQUNIRV9WSVZUCisJc2VsZWN0IENQVV9DT1BZX1Y0V0IKKwlzZWxlY3QgQ1BVX1RMQl9WNFdCSQorCWhlbHAKKwkgIFRoZSBBUk05MjJUIGlzIGEgdmVyc2lvbiBvZiB0aGUgQVJNOTIwVCwgYnV0IHdpdGggc21hbGxlcgorCSAgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEgY2FjaGVzLiBJdCBpcyB1c2VkIGluIEFsdGVyYSdzCisJICBFeGNhbGlidXIgWEEgZGV2aWNlIGZhbWlseS4KKworCSAgU2F5IFkgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIEFSTTkyMlQgcHJvY2Vzc29yLgorCSAgT3RoZXJ3aXNlLCBzYXkgTi4KKworIyBBUk05MjVUCitjb25maWcgQ1BVX0FSTTkyNVQKKyAJYm9vbCAiU3VwcG9ydCBBUk05MjVUIHByb2Nlc3NvciIgaWYgQVJDSF9PTUFQCisgCWRlcGVuZHMgb24gQVJDSF9PTUFQMTUxMAorIAlkZWZhdWx0IHkgaWYgQVJDSF9PTUFQMTUxMAorCXNlbGVjdCBDUFVfMzJ2NAorCXNlbGVjdCBDUFVfQUJSVF9FVjRUCisJc2VsZWN0IENQVV9DQUNIRV9WNFdUCisJc2VsZWN0IENQVV9DQUNIRV9WSVZUCisJc2VsZWN0IENQVV9DT1BZX1Y0V0IKKwlzZWxlY3QgQ1BVX1RMQl9WNFdCSQorIAloZWxwCisgCSAgVGhlIEFSTTkyNVQgaXMgYSBtaXggYmV0d2VlbiB0aGUgQVJNOTIwVCBhbmQgQVJNOTI2VCwgYnV0IHdpdGgKKwkgIGRpZmZlcmVudCBpbnN0cnVjdGlvbiBhbmQgZGF0YSBjYWNoZXMuIEl0IGlzIHVzZWQgaW4gVEkncyBPTUFQCisgCSAgZGV2aWNlIGZhbWlseS4KKworIAkgIFNheSBZIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSBBUk05MjVUIHByb2Nlc3Nvci4KKyAJICBPdGhlcndpc2UsIHNheSBOLgorCisjIEFSTTkyNlQKK2NvbmZpZyBDUFVfQVJNOTI2VAorCWJvb2wgIlN1cHBvcnQgQVJNOTI2VCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgorCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SIHx8IEFSQ0hfVkVSU0FUSUxFX1BCIHx8IE1BQ0hfVkVSU0FUSUxFX0FCIHx8IEFSQ0hfT01BUDczMCB8fCBBUkNIX09NQVAxNlhYCisJZGVmYXVsdCB5IGlmIEFSQ0hfVkVSU0FUSUxFX1BCIHx8IE1BQ0hfVkVSU0FUSUxFX0FCIHx8IEFSQ0hfT01BUDczMCB8fCBBUkNIX09NQVAxNlhYCisJc2VsZWN0IENQVV8zMnY1CisJc2VsZWN0IENQVV9BQlJUX0VWNVRKCisJc2VsZWN0IENQVV9DQUNIRV9WSVZUCisJc2VsZWN0IENQVV9DT1BZX1Y0V0IKKwlzZWxlY3QgQ1BVX1RMQl9WNFdCSQorCWhlbHAKKwkgIFRoaXMgaXMgYSB2YXJpYW50IG9mIHRoZSBBUk05MjAuICBJdCBoYXMgc2xpZ2h0bHkgZGlmZmVyZW50CisJICBpbnN0cnVjdGlvbiBzZXF1ZW5jZXMgZm9yIGNhY2hlIGFuZCBUTEIgb3BlcmF0aW9ucy4gIEN1cmlvdXNseSwKKwkgIHRoZXJlIGlzIG5vIGRvY3VtZW50YXRpb24gb24gaXQgYXQgdGhlIEFSTSBjb3Jwb3JhdGUgd2Vic2l0ZS4KKworCSAgU2F5IFkgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIEFSTTkyNlQgcHJvY2Vzc29yLgorCSAgT3RoZXJ3aXNlLCBzYXkgTi4KKworIyBBUk0xMDIwIC0gbmVlZHMgdmFsaWRhdGluZworY29uZmlnIENQVV9BUk0xMDIwCisJYm9vbCAiU3VwcG9ydCBBUk0xMDIwVCAocmV2IDApIHByb2Nlc3NvciIKKwlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUgorCXNlbGVjdCBDUFVfMzJ2NQorCXNlbGVjdCBDUFVfQUJSVF9FVjRUCisJc2VsZWN0IENQVV9DQUNIRV9WNFdUCisJc2VsZWN0IENQVV9DQUNIRV9WSVZUCisJc2VsZWN0IENQVV9DT1BZX1Y0V0IKKwlzZWxlY3QgQ1BVX1RMQl9WNFdCSQorCWhlbHAKKwkgIFRoZSBBUk0xMDIwIGlzIHRoZSAzMksgY2FjaGVkIHZlcnNpb24gb2YgdGhlIEFSTTEwIHByb2Nlc3NvciwKKwkgIHdpdGggYW4gYWRkaXRpb24gb2YgYSBmbG9hdGluZy1wb2ludCB1bml0LgorCisJICBTYXkgWSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgQVJNMTAyMCBwcm9jZXNzb3IuCisJICBPdGhlcndpc2UsIHNheSBOLgorCisjIEFSTTEwMjBFIC0gbmVlZHMgdmFsaWRhdGluZworY29uZmlnIENQVV9BUk0xMDIwRQorCWJvb2wgIlN1cHBvcnQgQVJNMTAyMEUgcHJvY2Vzc29yIgorCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SCisJc2VsZWN0IENQVV8zMnY1CisJc2VsZWN0IENQVV9BQlJUX0VWNFQKKwlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V1QKKwlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKKwlzZWxlY3QgQ1BVX0NPUFlfVjRXQgorCXNlbGVjdCBDUFVfVExCX1Y0V0JJCisJZGVwZW5kcyBvbiBuCisKKyMgQVJNMTAyMkUKK2NvbmZpZyBDUFVfQVJNMTAyMgorCWJvb2wgIlN1cHBvcnQgQVJNMTAyMkUgcHJvY2Vzc29yIgorCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SCisJc2VsZWN0IENQVV8zMnY1CisJc2VsZWN0IENQVV9BQlJUX0VWNFQKKwlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKKwlzZWxlY3QgQ1BVX0NPUFlfVjRXQiAjIGNhbiBwcm9iYWJseSBkbyBiZXR0ZXIKKwlzZWxlY3QgQ1BVX1RMQl9WNFdCSQorCWhlbHAKKwkgIFRoZSBBUk0xMDIyRSBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQVJNdjVURSBhcmNoaXRlY3R1cmUKKwkgIGJhc2VkIHVwb24gdGhlIEFSTTEwIGludGVnZXIgY29yZSB3aXRoIGEgMTZLaUIgTDEgSGFydmFyZCBjYWNoZSwKKwkgIGVtYmVkZGVkIHRyYWNlIG1hY3JvY2VsbCwgYW5kIGEgZmxvYXRpbmctcG9pbnQgdW5pdC4KKworCSAgU2F5IFkgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIEFSTTEwMjJFIHByb2Nlc3Nvci4KKwkgIE90aGVyd2lzZSwgc2F5IE4uCisKKyMgQVJNMTAyNkVKLVMKK2NvbmZpZyBDUFVfQVJNMTAyNgorCWJvb2wgIlN1cHBvcnQgQVJNMTAyNkVKLVMgcHJvY2Vzc29yIgorCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SCisJc2VsZWN0IENQVV8zMnY1CisJc2VsZWN0IENQVV9BQlJUX0VWNVQgIyBCdXQgbmVlZCBKYXplbGxlLCBidXQgRVY1VEogaWdub3JlcyBiaXQgMTAKKwlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKKwlzZWxlY3QgQ1BVX0NPUFlfVjRXQiAjIGNhbiBwcm9iYWJseSBkbyBiZXR0ZXIKKwlzZWxlY3QgQ1BVX1RMQl9WNFdCSQorCWhlbHAKKwkgIFRoZSBBUk0xMDI2RUotUyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQVJNdjVURUogYXJjaGl0ZWN0dXJlCisJICBiYXNlZCB1cG9uIHRoZSBBUk0xMCBpbnRlZ2VyIGNvcmUuCisKKwkgIFNheSBZIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSBBUk0xMDI2RUotUyBwcm9jZXNzb3IuCisJICBPdGhlcndpc2UsIHNheSBOLgorCisjIFNBMTEwCitjb25maWcgQ1BVX1NBMTEwCisJYm9vbCAiU3VwcG9ydCBTdHJvbmdBUk0oUikgU0EtMTEwIHByb2Nlc3NvciIgaWYgIUFSQ0hfRUJTQTExMCAmJiAhRk9PVEJSSURHRSAmJiAhQVJDSF9UQk9YICYmICFBUkNIX1NIQVJLICYmICFBUkNIX05FWFVTUENJICYmIEFSQ0hfUlBDCisJZGVmYXVsdCB5IGlmIEFSQ0hfRUJTQTExMCB8fCBGT09UQlJJREdFIHx8IEFSQ0hfVEJPWCB8fCBBUkNIX1NIQVJLIHx8IEFSQ0hfTkVYVVNQQ0kKKwlzZWxlY3QgQ1BVXzMydjMgaWYgQVJDSF9SUEMKKwlzZWxlY3QgQ1BVXzMydjQgaWYgIUFSQ0hfUlBDCisJc2VsZWN0IENQVV9BQlJUX0VWNAorCXNlbGVjdCBDUFVfQ0FDSEVfVjRXQgorCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAorCXNlbGVjdCBDUFVfQ09QWV9WNFdCCisJc2VsZWN0IENQVV9UTEJfVjRXQgorCWhlbHAKKwkgIFRoZSBJbnRlbCBTdHJvbmdBUk0oUikgU0EtMTEwIGlzIGEgMzItYml0IG1pY3JvcHJvY2Vzc29yIGFuZAorCSAgaXMgYXZhaWxhYmxlIGF0IGZpdmUgc3BlZWRzIHJhbmdpbmcgZnJvbSAxMDAgTUh6IHRvIDIzMyBNSHouCisJICBNb3JlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBhdAorCSAgPGh0dHA6Ly9kZXZlbG9wZXIuaW50ZWwuY29tL2Rlc2lnbi9zdHJvbmcvc2ExMTAuaHRtPi4KKworCSAgU2F5IFkgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIFNBLTExMCBwcm9jZXNzb3IuCisJICBPdGhlcndpc2UsIHNheSBOLgorCisjIFNBMTEwMAorY29uZmlnIENQVV9TQTExMDAKKwlib29sCisJZGVwZW5kcyBvbiBBUkNIX1NBMTEwMAorCWRlZmF1bHQgeQorCXNlbGVjdCBDUFVfMzJ2NAorCXNlbGVjdCBDUFVfQUJSVF9FVjQKKwlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V0IKKwlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKKwlzZWxlY3QgQ1BVX1RMQl9WNFdCCisJc2VsZWN0IENQVV9NSU5JQ0FDSEUKKworIyBYU2NhbGUKK2NvbmZpZyBDUFVfWFNDQUxFCisJYm9vbAorCWRlcGVuZHMgb24gQVJDSF9JT1AzWFggfHwgQVJDSF9QWEEgfHwgQVJDSF9JWFA0WFggfHwgQVJDSF9JWFAyMDAwCisJZGVmYXVsdCB5CisJc2VsZWN0IENQVV8zMnY1CisJc2VsZWN0IENQVV9BQlJUX0VWNVQKKwlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKKwlzZWxlY3QgQ1BVX1RMQl9WNFdCSQorCXNlbGVjdCBDUFVfTUlOSUNBQ0hFCisKKyMgQVJNdjYKK2NvbmZpZyBDUFVfVjYKKwlib29sICJTdXBwb3J0IEFSTSBWNiBwcm9jZXNzb3IiCisJZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IKKwlzZWxlY3QgQ1BVXzMydjYKKwlzZWxlY3QgQ1BVX0FCUlRfRVY2CisJc2VsZWN0IENQVV9DQUNIRV9WNgorCXNlbGVjdCBDUFVfQ0FDSEVfVklQVAorCXNlbGVjdCBDUFVfQ09QWV9WNgorCXNlbGVjdCBDUFVfVExCX1Y2CisKKyMgRmlndXJlIG91dCB3aGF0IHByb2Nlc3NvciBhcmNoaXRlY3R1cmUgdmVyc2lvbiB3ZSBzaG91bGQgYmUgdXNpbmcuCisjIFRoaXMgZGVmaW5lcyB0aGUgY29tcGlsZXIgaW5zdHJ1Y3Rpb24gc2V0IHdoaWNoIGRlcGVuZHMgb24gdGhlIG1hY2hpbmUgdHlwZS4KK2NvbmZpZyBDUFVfMzJ2MworCWJvb2wKKworY29uZmlnIENQVV8zMnY0CisJYm9vbAorCitjb25maWcgQ1BVXzMydjUKKwlib29sCisKK2NvbmZpZyBDUFVfMzJ2NgorCWJvb2wKKworIyBUaGUgYWJvcnQgbW9kZWwKK2NvbmZpZyBDUFVfQUJSVF9FVjQKKwlib29sCisKK2NvbmZpZyBDUFVfQUJSVF9FVjRUCisJYm9vbAorCitjb25maWcgQ1BVX0FCUlRfTFY0VAorCWJvb2wKKworY29uZmlnIENQVV9BQlJUX0VWNVQKKwlib29sCisKK2NvbmZpZyBDUFVfQUJSVF9FVjVUSgorCWJvb2wKKworY29uZmlnIENQVV9BQlJUX0VWNgorCWJvb2wKKworIyBUaGUgY2FjaGUgbW9kZWwKK2NvbmZpZyBDUFVfQ0FDSEVfVjMKKwlib29sCisKK2NvbmZpZyBDUFVfQ0FDSEVfVjQKKwlib29sCisKK2NvbmZpZyBDUFVfQ0FDSEVfVjRXVAorCWJvb2wKKworY29uZmlnIENQVV9DQUNIRV9WNFdCCisJYm9vbAorCitjb25maWcgQ1BVX0NBQ0hFX1Y2CisJYm9vbAorCitjb25maWcgQ1BVX0NBQ0hFX1ZJVlQKKwlib29sCisKK2NvbmZpZyBDUFVfQ0FDSEVfVklQVAorCWJvb2wKKworIyBUaGUgY29weS1wYWdlIG1vZGVsCitjb25maWcgQ1BVX0NPUFlfVjMKKwlib29sCisKK2NvbmZpZyBDUFVfQ09QWV9WNFdUCisJYm9vbAorCitjb25maWcgQ1BVX0NPUFlfVjRXQgorCWJvb2wKKworY29uZmlnIENQVV9DT1BZX1Y2CisJYm9vbAorCisjIFRoaXMgc2VsZWN0cyB0aGUgVExCIG1vZGVsCitjb25maWcgQ1BVX1RMQl9WMworCWJvb2wKKwloZWxwCisJICBBUk0gQXJjaGl0ZWN0dXJlIFZlcnNpb24gMyBUTEIuCisKK2NvbmZpZyBDUFVfVExCX1Y0V1QKKwlib29sCisJaGVscAorCSAgQVJNIEFyY2hpdGVjdHVyZSBWZXJzaW9uIDQgVExCIHdpdGggd3JpdGV0aHJvdWdoIGNhY2hlLgorCitjb25maWcgQ1BVX1RMQl9WNFdCCisJYm9vbAorCWhlbHAKKwkgIEFSTSBBcmNoaXRlY3R1cmUgVmVyc2lvbiA0IFRMQiB3aXRoIHdyaXRlYmFjayBjYWNoZS4KKworY29uZmlnIENQVV9UTEJfVjRXQkkKKwlib29sCisJaGVscAorCSAgQVJNIEFyY2hpdGVjdHVyZSBWZXJzaW9uIDQgVExCIHdpdGggd3JpdGViYWNrIGNhY2hlIGFuZCBpbnZhbGlkYXRlCisJICBpbnN0cnVjdGlvbiBjYWNoZSBlbnRyeS4KKworY29uZmlnIENQVV9UTEJfVjYKKwlib29sCisKK2NvbmZpZyBDUFVfTUlOSUNBQ0hFCisJYm9vbAorCWhlbHAKKwkgIFByb2Nlc3NvciBoYXMgYSBtaW5pY2FjaGUuCisKK2NvbW1lbnQgIlByb2Nlc3NvciBGZWF0dXJlcyIKKworY29uZmlnIEFSTV9USFVNQgorCWJvb2wgIlN1cHBvcnQgVGh1bWIgdXNlciBiaW5hcmllcyIKKwlkZXBlbmRzIG9uIENQVV9BUk03MjBUIHx8IENQVV9BUk05MjBUIHx8IENQVV9BUk05MjJUIHx8IENQVV9BUk05MjVUIHx8IENQVV9BUk05MjZUIHx8IENQVV9BUk0xMDIwIHx8IENQVV9BUk0xMDIwRSB8fCBDUFVfQVJNMTAyMiB8fCBDUFVfQVJNMTAyNiB8fCBDUFVfWFNDQUxFIHx8IENQVV9WNgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGluY2x1ZGUga2VybmVsIHN1cHBvcnQgZm9yIHJ1bm5pbmcgdXNlciBzcGFjZQorCSAgVGh1bWIgYmluYXJpZXMuCisKKwkgIFRoZSBUaHVtYiBpbnN0cnVjdGlvbiBzZXQgaXMgYSBjb21wcmVzc2VkIGZvcm0gb2YgdGhlIHN0YW5kYXJkIEFSTQorCSAgaW5zdHJ1Y3Rpb24gc2V0IHJlc3VsdGluZyBpbiBzbWFsbGVyIGJpbmFyaWVzIGF0IHRoZSBleHBlbnNlIG9mCisJICBzbGlnaHRseSBsZXNzIGVmZmljaWVudCBjb2RlLgorCisJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoaXMgYWxsIGlzLCBzYXlpbmcgWSBpcyBhIHNhZmUgY2hvaWNlLgorCitjb25maWcgQ1BVX0JJR19FTkRJQU4KKwlib29sICJCdWlsZCBiaWctZW5kaWFuIGtlcm5lbCIKKwlkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfQklHX0VORElBTgorCWhlbHAKKwkgIFNheSBZIGlmIHlvdSBwbGFuIG9uIHJ1bm5pbmcgYSBrZXJuZWwgaW4gYmlnLWVuZGlhbiBtb2RlLgorCSAgTm90ZSB0aGF0IHlvdXIgYm9hcmQgbXVzdCBiZSBwcm9wZXJseSBidWlsdCBhbmQgeW91ciBib2FyZAorCSAgcG9ydCBtdXN0IHByb3Blcmx5IGVuYWJsZSBhbnkgYmlnLWVuZGlhbiByZWxhdGVkIGZlYXR1cmVzCisJICBvZiB5b3VyIGNoaXBzZXQvYm9hcmQvcHJvY2Vzc29yLgorCitjb25maWcgQ1BVX0lDQUNIRV9ESVNBQkxFCisJYm9vbCAiRGlzYWJsZSBJLUNhY2hlIgorCWRlcGVuZHMgb24gQ1BVX0FSTTkyMFQgfHwgQ1BVX0FSTTkyMlQgfHwgQ1BVX0FSTTkyNVQgfHwgQ1BVX0FSTTkyNlQgfHwgQ1BVX0FSTTEwMjAKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGRpc2FibGUgdGhlIHByb2Nlc3NvciBpbnN0cnVjdGlvbiBjYWNoZS4gVW5sZXNzCisJICB5b3UgaGF2ZSBhIHJlYXNvbiBub3QgdG8gb3IgYXJlIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBDUFVfRENBQ0hFX0RJU0FCTEUKKwlib29sICJEaXNhYmxlIEQtQ2FjaGUiCisJZGVwZW5kcyBvbiBDUFVfQVJNOTIwVCB8fCBDUFVfQVJNOTIyVCB8fCBDUFVfQVJNOTI1VCB8fCBDUFVfQVJNOTI2VCB8fCBDUFVfQVJNMTAyMAorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gZGlzYWJsZSB0aGUgcHJvY2Vzc29yIGRhdGEgY2FjaGUuIFVubGVzcworCSAgeW91IGhhdmUgYSByZWFzb24gbm90IHRvIG9yIGFyZSB1bnN1cmUsIHNheSBOLgorCitjb25maWcgQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKwlib29sICJGb3JjZSB3cml0ZSB0aHJvdWdoIEQtY2FjaGUiCisJZGVwZW5kcyBvbiAoQ1BVX0FSTTkyMFQgfHwgQ1BVX0FSTTkyMlQgfHwgQ1BVX0FSTTkyNVQgfHwgQ1BVX0FSTTkyNlQgfHwgQ1BVX0FSTTEwMjApICYmICFDUFVfRElTQUJMRV9EQ0FDSEUKKwlkZWZhdWx0IHkgaWYgQ1BVX0FSTTkyNVQKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIHVzZSB0aGUgZGF0YSBjYWNoZSBpbiB3cml0ZXRocm91Z2ggbW9kZS4gVW5sZXNzIHlvdQorCSAgc3BlY2lmaWNhbGx5IHJlcXVpcmUgdGhpcyBvciBhcmUgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIENQVV9DQUNIRV9ST1VORF9ST0JJTgorCWJvb2wgIlJvdW5kIHJvYmluIEkgYW5kIEQgY2FjaGUgcmVwbGFjZW1lbnQgYWxnb3JpdGhtIgorCWRlcGVuZHMgb24gKENQVV9BUk05MjZUIHx8IENQVV9BUk0xMDIwKSAmJiAoIUNQVV9JQ0FDSEVfRElTQUJMRSB8fCAhQ1BVX0RDQUNIRV9ESVNBQkxFKQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gdXNlIHRoZSBwcmVkaWN0YWJsZSByb3VuZC1yb2JpbiBjYWNoZSByZXBsYWNlbWVudAorCSAgcG9saWN5LiAgVW5sZXNzIHlvdSBzcGVjaWZpY2FsbHkgcmVxdWlyZSB0aGlzIG9yIGFyZSB1bnN1cmUsIHNheSBOLgorCitjb25maWcgQ1BVX0JQUkVESUNUX0RJU0FCTEUKKwlib29sICJEaXNhYmxlIGJyYW5jaCBwcmVkaWN0aW9uIgorCWRlcGVuZHMgb24gQ1BVX0FSTTEwMjAKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGRpc2FibGUgYnJhbmNoIHByZWRpY3Rpb24uICBJZiB1bnN1cmUsIHNheSBOLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vTWFrZWZpbGUgYi9hcmNoL2FybS9tbS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2YzMTZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vTWFrZWZpbGUKQEAgLTAsMCArMSw1NiBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGFybS1zcGVjaWZpYyBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZXIuCisjCisKK29iai15CQkJCTo9IGNvbnNpc3RlbnQubyBleHRhYmxlLm8gZmF1bHQtYXJtdi5vIFwKKwkJCQkgICBmYXVsdC5vIGZsdXNoLm8gaW5pdC5vIGlvcmVtYXAubyBtbWFwLm8gXAorCQkJCSAgIG1tLWFybXYubworCitvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IHByb2Mtc3ltcy5vCisKK29iai0kKENPTkZJR19BTElHTk1FTlRfVFJBUCkJKz0gYWxpZ25tZW50Lm8KK29iai0kKENPTkZJR19ESVNDT05USUdNRU0pCSs9IGRpc2NvbnRpZy5vCisKK29iai0kKENPTkZJR19DUFVfQUJSVF9FVjQpCSs9IGFib3J0LWV2NC5vCitvYmotJChDT05GSUdfQ1BVX0FCUlRfRVY0VCkJKz0gYWJvcnQtZXY0dC5vCitvYmotJChDT05GSUdfQ1BVX0FCUlRfTFY0VCkJKz0gYWJvcnQtbHY0dC5vCitvYmotJChDT05GSUdfQ1BVX0FCUlRfRVY1VCkJKz0gYWJvcnQtZXY1dC5vCitvYmotJChDT05GSUdfQ1BVX0FCUlRfRVY1VEopCSs9IGFib3J0LWV2NXRqLm8KK29iai0kKENPTkZJR19DUFVfQUJSVF9FVjYpCSs9IGFib3J0LWV2Ni5vCisKK29iai0kKENPTkZJR19DUFVfQ0FDSEVfVjMpCSs9IGNhY2hlLXYzLm8KK29iai0kKENPTkZJR19DUFVfQ0FDSEVfVjQpCSs9IGNhY2hlLXY0Lm8KK29iai0kKENPTkZJR19DUFVfQ0FDSEVfVjRXVCkJKz0gY2FjaGUtdjR3dC5vCitvYmotJChDT05GSUdfQ1BVX0NBQ0hFX1Y0V0IpCSs9IGNhY2hlLXY0d2Iubworb2JqLSQoQ09ORklHX0NQVV9DQUNIRV9WNikJKz0gY2FjaGUtdjYubworCitvYmotJChDT05GSUdfQ1BVX0NPUFlfVjMpCSs9IGNvcHlwYWdlLXYzLm8KK29iai0kKENPTkZJR19DUFVfQ09QWV9WNFdUKQkrPSBjb3B5cGFnZS12NHd0Lm8KK29iai0kKENPTkZJR19DUFVfQ09QWV9WNFdCKQkrPSBjb3B5cGFnZS12NHdiLm8KK29iai0kKENPTkZJR19DUFVfQ09QWV9WNikJKz0gY29weXBhZ2UtdjYubyBtbXUubworb2JqLSQoQ09ORklHX0NQVV9TQTExMDApCSs9IGNvcHlwYWdlLXY0bWMubworb2JqLSQoQ09ORklHX0NQVV9YU0NBTEUpCSs9IGNvcHlwYWdlLXhzY2FsZS5vCisKK29iai0kKENPTkZJR19DUFVfTUlOSUNBQ0hFKQkrPSBtaW5pY2FjaGUubworCitvYmotJChDT05GSUdfQ1BVX1RMQl9WMykJKz0gdGxiLXYzLm8KK29iai0kKENPTkZJR19DUFVfVExCX1Y0V1QpCSs9IHRsYi12NC5vCitvYmotJChDT05GSUdfQ1BVX1RMQl9WNFdCKQkrPSB0bGItdjR3Yi5vCitvYmotJChDT05GSUdfQ1BVX1RMQl9WNFdCSSkJKz0gdGxiLXY0d2JpLm8KK29iai0kKENPTkZJR19DUFVfVExCX1Y2KQkrPSB0bGItdjYubworCitvYmotJChDT05GSUdfQ1BVX0FSTTYxMCkJKz0gcHJvYy1hcm02Xzcubworb2JqLSQoQ09ORklHX0NQVV9BUk03MTApCSs9IHByb2MtYXJtNl83Lm8KK29iai0kKENPTkZJR19DUFVfQVJNNzIwVCkJKz0gcHJvYy1hcm03MjAubworb2JqLSQoQ09ORklHX0NQVV9BUk05MjBUKQkrPSBwcm9jLWFybTkyMC5vCitvYmotJChDT05GSUdfQ1BVX0FSTTkyMlQpCSs9IHByb2MtYXJtOTIyLm8KK29iai0kKENPTkZJR19DUFVfQVJNOTI1VCkJKz0gcHJvYy1hcm05MjUubworb2JqLSQoQ09ORklHX0NQVV9BUk05MjZUKQkrPSBwcm9jLWFybTkyNi5vCitvYmotJChDT05GSUdfQ1BVX0FSTTEwMjApCSs9IHByb2MtYXJtMTAyMC5vCitvYmotJChDT05GSUdfQ1BVX0FSTTEwMjBFKQkrPSBwcm9jLWFybTEwMjBlLm8KK29iai0kKENPTkZJR19DUFVfQVJNMTAyMikJKz0gcHJvYy1hcm0xMDIyLm8KK29iai0kKENPTkZJR19DUFVfQVJNMTAyNikJKz0gcHJvYy1hcm0xMDI2Lm8KK29iai0kKENPTkZJR19DUFVfU0ExMTApCQkrPSBwcm9jLXNhMTEwLm8KK29iai0kKENPTkZJR19DUFVfU0ExMTAwKQkrPSBwcm9jLXNhMTEwMC5vCitvYmotJChDT05GSUdfQ1BVX1hTQ0FMRSkJKz0gcHJvYy14c2NhbGUubworb2JqLSQoQ09ORklHX0NQVV9WNikJCSs9IHByb2MtdjYubyBibG9ja29wcy5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9hYm9ydC1ldjQuUyBiL2FyY2gvYXJtL21tL2Fib3J0LWV2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMThmOWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9hYm9ydC1ldjQuUwpAQCAtMCwwICsxLDMwIEBACisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKy8qCisgKiBGdW5jdGlvbjogdjRfZWFybHlfYWJvcnQKKyAqCisgKiBQYXJhbXMgIDogcjIgPSBhZGRyZXNzIG9mIGFib3J0ZWQgaW5zdHJ1Y3Rpb24KKyAqICAgICAgICAgOiByMyA9IHNhdmVkIFNQU1IKKyAqCisgKiBSZXR1cm5zIDogcjAgPSBhZGRyZXNzIG9mIGFib3J0CisgKgkgICA6IHIxID0gRlNSLCBiaXQgMTEgPSB3cml0ZQorICoJICAgOiByMi1yOCA9IGNvcnJ1cHRlZAorICoJICAgOiByOSA9IHByZXNlcnZlZAorICoJICAgOiBzcCA9IHBvaW50ZXIgdG8gcmVnaXN0ZXJzCisgKgorICogUHVycG9zZSA6IG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGFib3J0ZWQgaW5zdHJ1Y3Rpb24uCisgKiBOb3RlOiB3ZSByZWFkIHVzZXIgc3BhY2UuICBUaGlzIG1lYW5zIHdlIG1pZ2h0IGNhdXNlIGEgZGF0YQorICogYWJvcnQgaGVyZSBpZiB0aGUgSS1UTEIgYW5kIEQtVExCIGFyZW4ndCBzZWVpbmcgdGhlIHNhbWUKKyAqIHBpY3R1cmUuICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGRvZXMgaGFwcGVuLiAgV2UgbGl2ZSB3aXRoIGl0LgorICovCisJLmFsaWduCTUKK0VOVFJZKHY0X2Vhcmx5X2Fib3J0KQorCW1yYwlwMTUsIDAsIHIxLCBjNSwgYzAsIDAJCUAgZ2V0IEZTUgorCW1yYwlwMTUsIDAsIHIwLCBjNiwgYzAsIDAJCUAgZ2V0IEZBUgorCWxkcglyMywgW3IyXQkJCUAgcmVhZCBhYm9ydGVkIEFSTSBpbnN0cnVjdGlvbgorCWJpYwlyMSwgcjEsICMxIDw8IDExIHwgMSA8PCAxMAlAIGNsZWFyIGJpdHMgMTEgYW5kIDEwIG9mIEZTUgorCXRzdAlyMywgIzEgPDwgMjAJCQlAIEwgPSAxIC0+IHdyaXRlPworCW9ycmVxCXIxLCByMSwgIzEgPDwgMTEJCUAgeWVzLgorCW1vdglwYywgbHIKKworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9hYm9ydC1ldjR0LlMgYi9hcmNoL2FybS9tbS9hYm9ydC1ldjR0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYyODI1NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL2Fib3J0LWV2NHQuUwpAQCAtMCwwICsxLDMwIEBACisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlICJhYm9ydC1tYWNyby5TIgorLyoKKyAqIEZ1bmN0aW9uOiB2NHRfZWFybHlfYWJvcnQKKyAqCisgKiBQYXJhbXMgIDogcjIgPSBhZGRyZXNzIG9mIGFib3J0ZWQgaW5zdHJ1Y3Rpb24KKyAqICAgICAgICAgOiByMyA9IHNhdmVkIFNQU1IKKyAqCisgKiBSZXR1cm5zIDogcjAgPSBhZGRyZXNzIG9mIGFib3J0CisgKgkgICA6IHIxID0gRlNSLCBiaXQgMTEgPSB3cml0ZQorICoJICAgOiByMi1yOCA9IGNvcnJ1cHRlZAorICoJICAgOiByOSA9IHByZXNlcnZlZAorICoJICAgOiBzcCA9IHBvaW50ZXIgdG8gcmVnaXN0ZXJzCisgKgorICogUHVycG9zZSA6IG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGFib3J0ZWQgaW5zdHJ1Y3Rpb24uCisgKiBOb3RlOiB3ZSByZWFkIHVzZXIgc3BhY2UuICBUaGlzIG1lYW5zIHdlIG1pZ2h0IGNhdXNlIGEgZGF0YQorICogYWJvcnQgaGVyZSBpZiB0aGUgSS1UTEIgYW5kIEQtVExCIGFyZW4ndCBzZWVpbmcgdGhlIHNhbWUKKyAqIHBpY3R1cmUuICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGRvZXMgaGFwcGVuLiAgV2UgbGl2ZSB3aXRoIGl0LgorICovCisJLmFsaWduCTUKK0VOVFJZKHY0dF9lYXJseV9hYm9ydCkKKwltcmMJcDE1LCAwLCByMSwgYzUsIGMwLCAwCQlAIGdldCBGU1IKKwltcmMJcDE1LCAwLCByMCwgYzYsIGMwLCAwCQlAIGdldCBGQVIKKwlkb190aHVtYl9hYm9ydAorCWxkcmVxCXIzLCBbcjJdCQkJQCByZWFkIGFib3J0ZWQgQVJNIGluc3RydWN0aW9uCisJYmljCXIxLCByMSwgIzEgPDwgMTEgfCAxIDw8IDEwCUAgY2xlYXIgYml0cyAxMSBhbmQgMTAgb2YgRlNSCisJdHN0CXIzLCAjMSA8PCAyMAkJCUAgY2hlY2sgd3JpdGUKKwlvcnJlcQlyMSwgcjEsICMxIDw8IDExCisJbW92CXBjLCBscgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vYWJvcnQtZXY1dC5TIGIvYXJjaC9hcm0vbW0vYWJvcnQtZXY1dC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMjUxYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9hYm9ydC1ldjV0LlMKQEAgLTAsMCArMSwzMSBAQAorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSAiYWJvcnQtbWFjcm8uUyIKKy8qCisgKiBGdW5jdGlvbjogdjV0X2Vhcmx5X2Fib3J0CisgKgorICogUGFyYW1zICA6IHIyID0gYWRkcmVzcyBvZiBhYm9ydGVkIGluc3RydWN0aW9uCisgKiAgICAgICAgIDogcjMgPSBzYXZlZCBTUFNSCisgKgorICogUmV0dXJucyA6IHIwID0gYWRkcmVzcyBvZiBhYm9ydAorICoJICAgOiByMSA9IEZTUiwgYml0IDExID0gd3JpdGUKKyAqCSAgIDogcjItcjggPSBjb3JydXB0ZWQKKyAqCSAgIDogcjkgPSBwcmVzZXJ2ZWQKKyAqCSAgIDogc3AgPSBwb2ludGVyIHRvIHJlZ2lzdGVycworICoKKyAqIFB1cnBvc2UgOiBvYnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBhYm9ydGVkIGluc3RydWN0aW9uLgorICogTm90ZTogd2UgcmVhZCB1c2VyIHNwYWNlLiAgVGhpcyBtZWFucyB3ZSBtaWdodCBjYXVzZSBhIGRhdGEKKyAqIGFib3J0IGhlcmUgaWYgdGhlIEktVExCIGFuZCBELVRMQiBhcmVuJ3Qgc2VlaW5nIHRoZSBzYW1lCisgKiBwaWN0dXJlLiAgVW5mb3J0dW5hdGVseSwgdGhpcyBkb2VzIGhhcHBlbi4gIFdlIGxpdmUgd2l0aCBpdC4KKyAqLworCS5hbGlnbgk1CitFTlRSWSh2NXRfZWFybHlfYWJvcnQpCisJbXJjCXAxNSwgMCwgcjEsIGM1LCBjMCwgMAkJQCBnZXQgRlNSCisJbXJjCXAxNSwgMCwgcjAsIGM2LCBjMCwgMAkJQCBnZXQgRkFSCisJZG9fdGh1bWJfYWJvcnQKKwlsZHJlcQlyMywgW3IyXQkJCUAgcmVhZCBhYm9ydGVkIEFSTSBpbnN0cnVjdGlvbgorCWJpYwlyMSwgcjEsICMxIDw8IDExCQlAIGNsZWFyIGJpdHMgMTEgb2YgRlNSCisJZG9fbGRyZF9hYm9ydAorCXRzdAlyMywgIzEgPDwgMjAJCQlAIGNoZWNrIHdyaXRlCisJb3JyZXEJcjEsIHIxLCAjMSA8PCAxMQorCW1vdglwYywgbHIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2Fib3J0LWV2NXRqLlMgYi9hcmNoL2FybS9tbS9hYm9ydC1ldjV0ai5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZTY4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9hYm9ydC1ldjV0ai5TCkBAIC0wLDAgKzEsMzUgQEAKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgImFib3J0LW1hY3JvLlMiCisvKgorICogRnVuY3Rpb246IHY1dGpfZWFybHlfYWJvcnQKKyAqCisgKiBQYXJhbXMgIDogcjIgPSBhZGRyZXNzIG9mIGFib3J0ZWQgaW5zdHJ1Y3Rpb24KKyAqICAgICAgICAgOiByMyA9IHNhdmVkIFNQU1IKKyAqCisgKiBSZXR1cm5zIDogcjAgPSBhZGRyZXNzIG9mIGFib3J0CisgKgkgICA6IHIxID0gRlNSLCBiaXQgMTEgPSB3cml0ZQorICoJICAgOiByMi1yOCA9IGNvcnJ1cHRlZAorICoJICAgOiByOSA9IHByZXNlcnZlZAorICoJICAgOiBzcCA9IHBvaW50ZXIgdG8gcmVnaXN0ZXJzCisgKgorICogUHVycG9zZSA6IG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGFib3J0ZWQgaW5zdHJ1Y3Rpb24uCisgKiBOb3RlOiB3ZSByZWFkIHVzZXIgc3BhY2UuICBUaGlzIG1lYW5zIHdlIG1pZ2h0IGNhdXNlIGEgZGF0YQorICogYWJvcnQgaGVyZSBpZiB0aGUgSS1UTEIgYW5kIEQtVExCIGFyZW4ndCBzZWVpbmcgdGhlIHNhbWUKKyAqIHBpY3R1cmUuICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGRvZXMgaGFwcGVuLiAgV2UgbGl2ZSB3aXRoIGl0LgorICovCisJLmFsaWduCTUKK0VOVFJZKHY1dGpfZWFybHlfYWJvcnQpCisJbXJjCXAxNSwgMCwgcjEsIGM1LCBjMCwgMAkJQCBnZXQgRlNSCisJbXJjCXAxNSwgMCwgcjAsIGM2LCBjMCwgMAkJQCBnZXQgRkFSCisJYmljCXIxLCByMSwgIzEgPDwgMTEgfCAxIDw8IDEwCUAgY2xlYXIgYml0cyAxMSBhbmQgMTAgb2YgRlNSCisJdHN0CXIzLCAjUFNSX0pfQklUCQkJQCBKYXZhPworCW1vdm5lCXBjLCBscgorCWRvX3RodW1iX2Fib3J0CisJbGRyZXEJcjMsIFtyMl0JCQlAIHJlYWQgYWJvcnRlZCBBUk0gaW5zdHJ1Y3Rpb24KKwlkb19sZHJkX2Fib3J0CisJdHN0CXIzLCAjMSA8PCAyMAkJCUAgTCA9IDAgLT4gd3JpdGUKKwlvcnJlcQlyMSwgcjEsICMxIDw8IDExCQlAIHllcy4KKwltb3YJcGMsIGxyCisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vYWJvcnQtZXY2LlMgYi9hcmNoL2FybS9tbS9hYm9ydC1ldjYuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGIyY2JiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vYWJvcnQtZXY2LlMKQEAgLTAsMCArMSwyMyBAQAorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisvKgorICogRnVuY3Rpb246IHY2X2Vhcmx5X2Fib3J0CisgKgorICogUGFyYW1zICA6IHIyID0gYWRkcmVzcyBvZiBhYm9ydGVkIGluc3RydWN0aW9uCisgKiAgICAgICAgIDogcjMgPSBzYXZlZCBTUFNSCisgKgorICogUmV0dXJucyA6IHIwID0gYWRkcmVzcyBvZiBhYm9ydAorICoJICAgOiByMSA9IEZTUiwgYml0IDExID0gd3JpdGUKKyAqCSAgIDogcjItcjggPSBjb3JydXB0ZWQKKyAqCSAgIDogcjkgPSBwcmVzZXJ2ZWQKKyAqCSAgIDogc3AgPSBwb2ludGVyIHRvIHJlZ2lzdGVycworICoKKyAqIFB1cnBvc2UgOiBvYnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBhYm9ydGVkIGluc3RydWN0aW9uLgorICovCisJLmFsaWduCTUKK0VOVFJZKHY2X2Vhcmx5X2Fib3J0KQorCW1yYwlwMTUsIDAsIHIxLCBjNSwgYzAsIDAJCUAgZ2V0IEZTUgorCW1yYwlwMTUsIDAsIHIwLCBjNiwgYzAsIDAJCUAgZ2V0IEZBUgorCW1vdglwYywgbHIKKworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9hYm9ydC1sdjR0LlMgYi9hcmNoL2FybS9tbS9hYm9ydC1sdjR0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI3NDNlNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL2Fib3J0LWx2NHQuUwpAQCAtMCwwICsxLDIyMCBAQAorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisvKgorICogRnVuY3Rpb246IHY0dF9sYXRlX2Fib3J0CisgKgorICogUGFyYW1zICA6IHIyID0gYWRkcmVzcyBvZiBhYm9ydGVkIGluc3RydWN0aW9uCisgKiAgICAgICAgIDogcjMgPSBzYXZlZCBTUFNSCisgKgorICogUmV0dXJucyA6IHIwID0gYWRkcmVzcyBvZiBhYm9ydAorICoJICAgOiByMSA9IEZTUiwgYml0IDExID0gd3JpdGUKKyAqCSAgIDogcjItcjggPSBjb3JydXB0ZWQKKyAqCSAgIDogcjkgPSBwcmVzZXJ2ZWQKKyAqCSAgIDogc3AgPSBwb2ludGVyIHRvIHJlZ2lzdGVycworICoKKyAqIFB1cnBvc2UgOiBvYnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBhYm9ydGVkIGluc3RydWN0aW9uLgorICogTm90ZTogd2UgcmVhZCB1c2VyIHNwYWNlLiAgVGhpcyBtZWFucyB3ZSBtaWdodCBjYXVzZSBhIGRhdGEKKyAqIGFib3J0IGhlcmUgaWYgdGhlIEktVExCIGFuZCBELVRMQiBhcmVuJ3Qgc2VlaW5nIHRoZSBzYW1lCisgKiBwaWN0dXJlLiAgVW5mb3J0dW5hdGVseSwgdGhpcyBkb2VzIGhhcHBlbi4gIFdlIGxpdmUgd2l0aCBpdC4KKyAqLworRU5UUlkodjR0X2xhdGVfYWJvcnQpCisJdHN0CXIzLCAjUFNSX1RfQklUCQkJQCBjaGVjayBmb3IgdGh1bWIgbW9kZQorCW1yYwlwMTUsIDAsIHIxLCBjNSwgYzAsIDAJCUAgZ2V0IEZTUgorCW1yYwlwMTUsIDAsIHIwLCBjNiwgYzAsIDAJCUAgZ2V0IEZBUgorCWJuZQkuZGF0YV90aHVtYl9hYm9ydAorCWxkcglyOCwgW3IyXQkJCUAgcmVhZCBhcm0gaW5zdHJ1Y3Rpb24KKwliaWMJcjEsIHIxLCAjMSA8PCAxMSB8IDEgPDwgMTAJQCBjbGVhciBiaXRzIDExIGFuZCAxMCBvZiBGU1IKKwl0c3QJcjgsICMxIDw8IDIwCQkJQCBMID0gMSAtPiB3cml0ZT8KKwlvcnJlcQlyMSwgcjEsICMxIDw8IDExCQlAIHllcy4KKwlhbmQJcjcsIHI4LCAjMTUgPDwgMjQKKwlhZGQJcGMsIHBjLCByNywgbHNyICMyMgkJQCBOb3cgYnJhbmNoIHRvIHRoZSByZWxldmFudCBwcm9jZXNzaW5nIHJvdXRpbmUKKwlub3AKKworLyogMCAqLwliCS5kYXRhX2FybV9sYXRlbGRyaHBvc3QJCUAgbGRyaAlyZCwgW3JuXSwgI20vcm0KKy8qIDEgKi8JYgkuZGF0YV9hcm1fbGF0ZWxkcmhwcmUJCUAgbGRyaAlyZCwgW3JuLCAjbS9ybV0KKy8qIDIgKi8JYgkuZGF0YV91bmtub3duCisvKiAzICovCWIJLmRhdGFfdW5rbm93bgorLyogNCAqLwliCS5kYXRhX2FybV9sYXRlbGRycG9zdGNvbnN0CUAgbGRyCXJkLCBbcm5dLCAjbQorLyogNSAqLwliCS5kYXRhX2FybV9sYXRlbGRycHJlY29uc3QJQCBsZHIJcmQsIFtybiwgI21dIAorLyogNiAqLwliCS5kYXRhX2FybV9sYXRlbGRycG9zdHJlZwlAIGxkcglyZCwgW3JuXSwgcm0KKy8qIDcgKi8JYgkuZGF0YV9hcm1fbGF0ZWxkcnByZXJlZwkJQCBsZHIJcmQsIFtybiwgcm1dCisvKiA4ICovCWIJLmRhdGFfYXJtX2xkbXN0bQkJQCBsZG0qYQlybiwgPHJsaXN0PgorLyogOSAqLwliCS5kYXRhX2FybV9sZG1zdG0JCUAgbGRtKmIJcm4sIDxybGlzdD4KKy8qIGEgKi8JYgkuZGF0YV91bmtub3duCisvKiBiICovCWIJLmRhdGFfdW5rbm93bgorLyogYyAqLwltb3YJcGMsIGxyCQkJCUAgbGRjCXJkLCBbcm5dLCAjbQlAIFNhbWUgYXMgbGRyCXJkLCBbcm5dLCAjbQorLyogZCAqLwltb3YJcGMsIGxyCQkJCUAgbGRjCXJkLCBbcm4sICNtXQorLyogZSAqLwliCS5kYXRhX3Vua25vd24KKy8qIGYgKi8KKy5kYXRhX3Vua25vd246CUAgUGFydCBvZiBqdW1wdGFibGUKKwltb3YJcjAsIHIyCisJbW92CXIxLCByOAorCW1vdglyMiwgc3AKKwlibAliYWRkYXRhYWJvcnQKKwliCXJldF9mcm9tX2V4Y2VwdGlvbgorCisuZGF0YV9hcm1fbGRtc3RtOgorCXRzdAlyOCwgIzEgPDwgMjEJCQlAIGNoZWNrIHdyaXRlYmFjayBiaXQKKwltb3ZlcQlwYywgbHIJCQkJQCBubyB3cml0ZWJhY2sgLT4gbm8gZml4dXAKKwltb3YJcjcsICMweDExCisJb3JyCXI3LCByNywgIzB4MTEwMAorCWFuZAlyNiwgcjgsIHI3CisJYW5kCXIyLCByOCwgcjcsIGxzbCAjMQorCWFkZAlyNiwgcjYsIHIyLCBsc3IgIzEKKwlhbmQJcjIsIHI4LCByNywgbHNsICMyCisJYWRkCXI2LCByNiwgcjIsIGxzciAjMgorCWFuZAlyMiwgcjgsIHI3LCBsc2wgIzMKKwlhZGQJcjYsIHI2LCByMiwgbHNyICMzCisJYWRkCXI2LCByNiwgcjYsIGxzciAjOAorCWFkZAlyNiwgcjYsIHI2LCBsc3IgIzQKKwlhbmQJcjYsIHI2LCAjMTUJCQlAIHI2ID0gbm8uIG9mIHJlZ2lzdGVycyB0byB0cmFuc2Zlci4KKwlhbmQJcjUsIHI4LCAjMTUgPDwgMTYJCUAgRXh0cmFjdCAnbicgZnJvbSBpbnN0cnVjdGlvbgorCWxkcglyNywgW3NwLCByNSwgbHNyICMxNF0JCUAgR2V0IHJlZ2lzdGVyICdSbicKKwl0c3QJcjgsICMxIDw8IDIzCQkJQCBDaGVjayBVIGJpdAorCXN1Ym5lCXI3LCByNywgcjYsIGxzbCAjMgkJQCBVbmRvIGluY3JlbWVudAorCWFkZGVxCXI3LCByNywgcjYsIGxzbCAjMgkJQCBVbmRvIGRlY3JlbWVudAorCXN0cglyNywgW3NwLCByNSwgbHNyICMxNF0JCUAgUHV0IHJlZ2lzdGVyICdSbicKKwltb3YJcGMsIGxyCisKKy5kYXRhX2FybV9sYXRlbGRyaHByZToKKwl0c3QJcjgsICMxIDw8IDIxCQkJQCBDaGVjayB3cml0ZWJhY2sgYml0CisJbW92ZXEJcGMsIGxyCQkJCUAgTm8gd3JpdGViYWNrIC0+IG5vIGZpeHVwCisuZGF0YV9hcm1fbGF0ZWxkcmhwb3N0OgorCWFuZAlyNSwgcjgsICMweDAwZgkJCUAgZ2V0IFJtIC8gbG93IG5pYmJsZSBvZiBpbW1lZGlhdGUgdmFsdWUKKwl0c3QJcjgsICMxIDw8IDIyCQkJQCBpZiAoaW1tZWRpYXRlIG9mZnNldCkKKwlhbmRuZQlyNiwgcjgsICMweGYwMAkJCUAgeyBpbW1lZGlhdGUgaGlnaCBuaWJibGUKKwlvcnJuZQlyNiwgcjUsIHI2LCBsc3IgIzQJCUAgICBjb21iaW5lIG5pYmJsZXMgfSBlbHNlCisJbGRyZXEJcjYsIFtzcCwgcjUsIGxzbCAjMl0JCUAgeyBsb2FkIFJtIHZhbHVlIH0KKy5kYXRhX2FybV9hcHBseV9yNl9hbmRfcm46CisJYW5kCXI1LCByOCwgIzE1IDw8IDE2CQlAIEV4dHJhY3QgJ24nIGZyb20gaW5zdHJ1Y3Rpb24KKwlsZHIJcjcsIFtzcCwgcjUsIGxzciAjMTRdCQlAIEdldCByZWdpc3RlciAnUm4nCisJdHN0CXI4LCAjMSA8PCAyMwkJCUAgQ2hlY2sgVSBiaXQKKwlzdWJuZQlyNywgcjcsIHI2CQkJQCBVbmRvIGluY3JtZW5ldAorCWFkZGVxCXI3LCByNywgcjYJCQlAIFVuZG8gZGVjcmVtZW50CisJc3RyCXI3LCBbc3AsIHI1LCBsc3IgIzE0XQkJQCBQdXQgcmVnaXN0ZXIgJ1JuJworCW1vdglwYywgbHIKKworLmRhdGFfYXJtX2xhdGVsZHJwcmVjb25zdDoKKwl0c3QJcjgsICMxIDw8IDIxCQkJQCBjaGVjayB3cml0ZWJhY2sgYml0CisJbW92ZXEJcGMsIGxyCQkJCUAgbm8gd3JpdGViYWNrIC0+IG5vIGZpeHVwCisuZGF0YV9hcm1fbGF0ZWxkcnBvc3Rjb25zdDoKKwltb3ZzCXIyLCByOCwgbHNsICMyMAkJCUAgR2V0IG9mZnNldAorCW1vdmVxCXBjLCBscgkJCQlAIHplcm8gLT4gbm8gZml4dXAKKwlhbmQJcjUsIHI4LCAjMTUgPDwgMTYJCUAgRXh0cmFjdCAnbicgZnJvbSBpbnN0cnVjdGlvbgorCWxkcglyNywgW3NwLCByNSwgbHNyICMxNF0JCUAgR2V0IHJlZ2lzdGVyICdSbicKKwl0c3QJcjgsICMxIDw8IDIzCQkJQCBDaGVjayBVIGJpdAorCXN1Ym5lCXI3LCByNywgcjIsIGxzciAjMjAJCUAgVW5kbyBpbmNyZW1lbnQKKwlhZGRlcQlyNywgcjcsIHIyLCBsc3IgIzIwCQlAIFVuZG8gZGVjcmVtZW50CisJc3RyCXI3LCBbc3AsIHI1LCBsc3IgIzE0XQkJQCBQdXQgcmVnaXN0ZXIgJ1JuJworCW1vdglwYywgbHIKKworLmRhdGFfYXJtX2xhdGVsZHJwcmVyZWc6CisJdHN0CXI4LCAjMSA8PCAyMQkJCUAgY2hlY2sgd3JpdGViYWNrIGJpdAorCW1vdmVxCXBjLCBscgkJCQlAIG5vIHdyaXRlYmFjayAtPiBubyBmaXh1cAorLmRhdGFfYXJtX2xhdGVsZHJwb3N0cmVnOgorCWFuZAlyNywgcjgsICMxNQkJCUAgRXh0cmFjdCAnbScgZnJvbSBpbnN0cnVjdGlvbgorCWxkcglyNiwgW3NwLCByNywgbHNsICMyXQkJQCBHZXQgcmVnaXN0ZXIgJ1JtJworCW1vdglyNSwgcjgsIGxzciAjNwkJCUAgZ2V0IHNoaWZ0IGNvdW50CisJYW5kcwlyNSwgcjUsICMzMQorCWFuZAlyNywgcjgsICMweDcwCQkJQCBnZXQgc2hpZnQgdHlwZQorCW9ycmVxCXI3LCByNywgIzgJCQlAIHNoaWZ0IGNvdW50ID0gMAorCWFkZAlwYywgcGMsIHI3CisJbm9wCisKKwltb3YJcjYsIHI2LCBsc2wgcjUJCQlAIDA6IExTTCAjITAKKwliCS5kYXRhX2FybV9hcHBseV9yNl9hbmRfcm4KKwliCS5kYXRhX2FybV9hcHBseV9yNl9hbmRfcm4JQCAxOiBMU0wgIzAKKwlub3AKKwliCS5kYXRhX3Vua25vd24JCQlAIDI6IE1VTD8KKwlub3AKKwliCS5kYXRhX3Vua25vd24JCQlAIDM6IE1VTD8KKwlub3AKKwltb3YJcjYsIHI2LCBsc3IgcjUJCQlAIDQ6IExTUiAjITAKKwliCS5kYXRhX2FybV9hcHBseV9yNl9hbmRfcm4KKwltb3YJcjYsIHI2LCBsc3IgIzMyCQkJQCA1OiBMU1IgIzMyCisJYgkuZGF0YV9hcm1fYXBwbHlfcjZfYW5kX3JuCisJYgkuZGF0YV91bmtub3duCQkJQCA2OiBNVUw/CisJbm9wCisJYgkuZGF0YV91bmtub3duCQkJQCA3OiBNVUw/CisJbm9wCisJbW92CXI2LCByNiwgYXNyIHI1CQkJQCA4OiBBU1IgIyEwCisJYgkuZGF0YV9hcm1fYXBwbHlfcjZfYW5kX3JuCisJbW92CXI2LCByNiwgYXNyICMzMgkJCUAgOTogQVNSICMzMgorCWIJLmRhdGFfYXJtX2FwcGx5X3I2X2FuZF9ybgorCWIJLmRhdGFfdW5rbm93bgkJCUAgQTogTVVMPworCW5vcAorCWIJLmRhdGFfdW5rbm93bgkJCUAgQjogTVVMPworCW5vcAorCW1vdglyNiwgcjYsIHJvciByNQkJCUAgQzogUk9SICMhMAorCWIJLmRhdGFfYXJtX2FwcGx5X3I2X2FuZF9ybgorCW1vdglyNiwgcjYsIHJyeAkJCUAgRDogUlJYCisJYgkuZGF0YV9hcm1fYXBwbHlfcjZfYW5kX3JuCisJYgkuZGF0YV91bmtub3duCQkJQCBFOiBNVUw/CisJbm9wCisJYgkuZGF0YV91bmtub3duCQkJQCBGOiBNVUw/CisKKy5kYXRhX3RodW1iX2Fib3J0OgorCWxkcmgJcjgsIFtyMl0JCQlAIHJlYWQgaW5zdHJ1Y3Rpb24KKwl0c3QJcjgsICMxIDw8IDExCQkJQCBMID0gMSAtPiB3cml0ZT8KKwlvcnJlcQlyMSwgcjEsICMxIDw8IDgJCQlAIHllcworCWFuZAlyNywgcjgsICMxNSA8PCAxMgorCWFkZAlwYywgcGMsIHI3LCBsc3IgIzEwCQlAIGxvb2t1cCBpbiB0YWJsZQorCW5vcAorCisvKiAwICovCWIJLmRhdGFfdW5rbm93bgorLyogMSAqLwliCS5kYXRhX3Vua25vd24KKy8qIDIgKi8JYgkuZGF0YV91bmtub3duCisvKiAzICovCWIJLmRhdGFfdW5rbm93bgorLyogNCAqLwliCS5kYXRhX3Vua25vd24KKy8qIDUgKi8JYgkuZGF0YV90aHVtYl9yZWcKKy8qIDYgKi8JbW92CXBjLCBscgorLyogNyAqLwltb3YJcGMsIGxyCisvKiA4ICovCW1vdglwYywgbHIKKy8qIDkgKi8JbW92CXBjLCBscgorLyogQSAqLwliCS5kYXRhX3Vua25vd24KKy8qIEIgKi8JYgkuZGF0YV90aHVtYl9wdXNocG9wCisvKiBDICovCWIJLmRhdGFfdGh1bWJfbGRtc3RtCisvKiBEICovCWIJLmRhdGFfdW5rbm93bgorLyogRSAqLwliCS5kYXRhX3Vua25vd24KKy8qIEYgKi8JYgkuZGF0YV91bmtub3duCisKKy5kYXRhX3RodW1iX3JlZzoKKwl0c3QJcjgsICMxIDw8IDkKKwltb3ZlcQlwYywgbHIKKwl0c3QJcjgsICMxIDw8IDEwCQkJQCBJZiAnUycgKHNpZ25lZCkgYml0IGlzIHNldAorCW1vdm5lCXIxLCAjMAkJCQlAIGl0IG11c3QgYmUgYSBsb2FkIGluc3RyCisJbW92CXBjLCBscgorCisuZGF0YV90aHVtYl9wdXNocG9wOgorCXRzdAlyOCwgIzEgPDwgMTAKKwliZXEJLmRhdGFfdW5rbm93bgorCWFuZAlyNiwgcjgsICMweDU1CQkJQCBod2VpZ2h0OChyOCkgKyBSIGJpdAorCWFuZAlyMiwgcjgsICMweGFhCisJYWRkCXI2LCByNiwgcjIsIGxzciAjMQorCWFuZAlyMiwgcjYsICMweGNjCisJYW5kCXI2LCByNiwgIzB4MzMKKwlhZGQJcjYsIHI2LCByMiwgbHNyICMyCisJbW92cwlyNywgcjgsIGxzciAjOQkJCUAgQyA9IHI4IGJpdCA4IChSIGJpdCkKKwlhZGMJcjYsIHI2LCByNiwgbHNyICM0CQlAIGhpZ2ggKyBsb3cgbmliYmxlICsgUiBiaXQKKwlhbmQJcjYsIHI2LCAjMTUJCQlAIG51bWJlciBvZiByZWdzIHRvIHRyYW5zZmVyCisJbGRyCXI3LCBbc3AsICMxMyA8PCAyXQorCXRzdAlyOCwgIzEgPDwgMTEKKwlhZGRlcQlyNywgcjcsIHI2LCBsc2wgIzIJCUAgaW5jcmVtZW50IFNQIGlmIFBVU0gKKwlzdWJuZQlyNywgcjcsIHI2LCBsc2wgIzIJCUAgZGVjcmVtZW50IFNQIGlmIFBPUAorCXN0cglyNywgW3NwLCAjMTMgPDwgMl0KKwltb3YJcGMsIGxyCisKKy5kYXRhX3RodW1iX2xkbXN0bToKKwlhbmQJcjYsIHI4LCAjMHg1NQkJCUAgaHdlaWdodDgocjgpCisJYW5kCXIyLCByOCwgIzB4YWEKKwlhZGQJcjYsIHI2LCByMiwgbHNyICMxCisJYW5kCXIyLCByNiwgIzB4Y2MKKwlhbmQJcjYsIHI2LCAjMHgzMworCWFkZAlyNiwgcjYsIHIyLCBsc3IgIzIKKwlhZGQJcjYsIHI2LCByNiwgbHNyICM0CisJYW5kCXI1LCByOCwgIzcgPDwgOAorCWxkcglyNywgW3NwLCByNSwgbHNyICM2XQorCWFuZAlyNiwgcjYsICMxNQkJCUAgbnVtYmVyIG9mIHJlZ3MgdG8gdHJhbnNmZXIKKwlzdWIJcjcsIHI3LCByNiwgbHNsICMyCQlAIGFsd2F5cyBkZWNyZW1lbnQKKwlzdHIJcjcsIFtzcCwgcjUsIGxzciAjNl0KKwltb3YJcGMsIGxyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9hYm9ydC1tYWNyby5TIGIvYXJjaC9hcm0vbW0vYWJvcnQtbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2NiMWJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vYWJvcnQtbWFjcm8uUwpAQCAtMCwwICsxLDQyIEBACisvKgorICogVGhlIEFSTSBMRFJEIGFuZCBUaHVtYiBMRFJTQiBpbnN0cnVjdGlvbnMgdXNlIGJpdCAyMC8xMSAoQVJNL1RodW1iKQorICogZGlmZmVyZW50bHkgdGhhbiBldmVyeSBvdGhlciBpbnN0cnVjdGlvbiwgc28gaXQgaXMgc2V0IHRvIDAgKHdyaXRlKQorICogZXZlbiB0aG91Z2ggdGhlIGluc3RydWN0aW9ucyBhcmUgcmVhZCBpbnN0cnVjdGlvbnMuIFRoaXMgbWVhbnMgdGhhdAorICogZHVyaW5nIGFuIGFib3J0IHRoZSBpbnN0cnVjdGlvbnMgd2lsbCBiZSB0cmVhdGVkIGFzIGEgd3JpdGUgYW5kIHRoZQorICogaGFuZGxlciB3aWxsIHJhaXNlIGEgc2lnbmFsIGZyb20gdW53cml0ZWFibGUgbG9jYXRpb25zIGlmIHRoZXkKKyAqIGZhdWx0LiBXZSBoYXZlIHRvIHNwZWNpZmljYWxseSBjaGVjayBmb3IgdGhlc2UgaW5zdHJ1Y3Rpb25zCisgKiBmcm9tIHRoZSBhYm9ydCBoYW5kbGVycyB0byB0cmVhdCB0aGVtIHByb3Blcmx5LgorICoKKyAqLworCisJLm1hY3JvCWRvX3RodW1iX2Fib3J0CisJdHN0CXIzLCAjUFNSX1RfQklUCisJYmVxCW5vdF90aHVtYgorCWxkcmgJcjMsIFtyMl0JCQlAIFJlYWQgYWJvcnRlZCBUaHVtYiBpbnN0cnVjdGlvbgorCWFuZAlyMywgcjMsICMgMHhmZTAwCQlAIE1hc2sgb3Bjb2RlIGZpZWxkCisJY21wCXIzLCAjIDB4NTYwMAkJCUAgSXMgaXQgbGRyc2I/CisJb3JyZXEJcjMsIHIzLCAjMSA8PCAxMQkJQCBTZXQgTC1iaXQgaWYgeWVzCisJdHN0CXIzLCAjMSA8PCAxMQkJCUAgTCA9IDAgLT4gd3JpdGUKKwlvcnJlcQlyMSwgcjEsICMxIDw8IDExCQlAIHllcy4KKwltb3YJcGMsIGxyCitub3RfdGh1bWI6CisJLmVuZG0KKworLyoKKyAqIFdlIGNoZWNrIGZvciB0aGUgZm9sbG93aW5nIGluc3R1cmN0aW9uIGVuY29kaW5nIGZvciBMRFJELgorICoKKyAqIFsyNzoyNV0gPT0gMAorICogICBbNzo0XSA9PSAxMTAxCisgKiAgICBbMjBdID09IDAKKyAqLworIAkubWFjcm8JZG9fbGRyZF9hYm9ydAorIAl0c3QJcjMsICMweDBlMDAwMDAwCQkJQCBbMjc6MjVdID09IDAKKwlibmUJbm90X2xkcmQKKwlhbmQJcjIsIHIzLCAjMHgwMDAwMDBmMAkJQCBbNzo0XSA9PSAxMTAxCisJY21wCXIyLCAjMHgwMDAwMDBkMAorCWJuZQlub3RfbGRyZAorCXRzdAlyMywgIzEgPDwgMjAJCQlAIFsyMF0gPT0gMAorCW1vdmVxCXBjLCBscgorbm90X2xkcmQ6CisJLmVuZG0KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vYWxpZ25tZW50LmMgYi9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWY0YThhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vYWxpZ25tZW50LmMKQEAgLTAsMCArMSw3NTYgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vYWxpZ25tZW50LmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1ICBMaW51cyBUb3J2YWxkcworICogIE1vZGlmaWNhdGlvbnMgZm9yIEFSTSBwcm9jZXNzb3IgKGMpIDE5OTUtMjAwMSBSdXNzZWxsIEtpbmcKKyAqICBUaHVtYiBhbGlnbWVudCBmYXVsdCBmaXh1cHMgKGMpIDIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogIC0gQWRhcHRlZCBmcm9tIGdkYi9zaW0vYXJtL3RodW1iZW11LmMgLS0gVGh1bWIgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLgorICogICAgQ29weXJpZ2h0IChDKSAxOTk2LCBDeWdudXMgU29mdHdhcmUgVGVjaG5vbG9naWVzIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgImZhdWx0LmgiCisKKy8qCisgKiAzMi1iaXQgbWlzYWxpZ25lZCB0cmFwIGhhbmRsZXIgKGMpIDE5OTggU2FuIE1laGF0IChDQ0MpIC1KdWx5IDE5OTgKKyAqIC9wcm9jL3N5cy9kZWJ1Zy9hbGlnbm1lbnQsIG1vZGlmaWVkIGFuZCBpbnRlZ3JhdGVkIGludG8KKyAqIExpbnV4IDIuMSBieSBSdXNzZWxsIEtpbmcKKyAqCisgKiBTcGVlZCBvcHRpbWlzYXRpb25zIGFuZCBiZXR0ZXIgZmF1bHQgaGFuZGxpbmcgYnkgUnVzc2VsbCBLaW5nLgorICoKKyAqICoqKiBOT1RFICoqKgorICogVGhpcyBjb2RlIGlzIG5vdCBwb3J0YWJsZSB0byBwcm9jZXNzb3JzIHdpdGggbGF0ZSBkYXRhIGFib3J0IGhhbmRsaW5nLgorICovCisjZGVmaW5lIENPRElOR19CSVRTKGkpCShpICYgMHgwZTAwMDAwMCkKKworI2RlZmluZSBMRFNUX0lfQklUKGkpCShpICYgKDEgPDwgMjYpKQkJLyogSW1tZWRpYXRlIGNvbnN0YW50CSovCisjZGVmaW5lIExEU1RfUF9CSVQoaSkJKGkgJiAoMSA8PCAyNCkpCQkvKiBQcmVpbmRleAkJKi8KKyNkZWZpbmUgTERTVF9VX0JJVChpKQkoaSAmICgxIDw8IDIzKSkJCS8qIEFkZCBvZmZzZXQJCSovCisjZGVmaW5lIExEU1RfV19CSVQoaSkJKGkgJiAoMSA8PCAyMSkpCQkvKiBXcml0ZWJhY2sJCSovCisjZGVmaW5lIExEU1RfTF9CSVQoaSkJKGkgJiAoMSA8PCAyMCkpCQkvKiBMb2FkCQkJKi8KKworI2RlZmluZSBMRFNUX1BfRVFfVShpKQkoKCgoaSkgXiAoKGkpID4+IDEpKSAmICgxIDw8IDIzKSkgPT0gMCkKKworI2RlZmluZSBMRFNUSF9JX0JJVChpKQkoaSAmICgxIDw8IDIyKSkJCS8qIGhhbGYtd29yZCBpbW1lZAkqLworI2RlZmluZSBMRE1fU19CSVQoaSkJKGkgJiAoMSA8PCAyMikpCQkvKiB3cml0ZSBDUFNSIGZyb20gU1BTUgkqLworCisjZGVmaW5lIFJOX0JJVFMoaSkJKChpID4+IDE2KSAmIDE1KQkvKiBSbgkJCSovCisjZGVmaW5lIFJEX0JJVFMoaSkJKChpID4+IDEyKSAmIDE1KQkvKiBSZAkJCSovCisjZGVmaW5lIFJNX0JJVFMoaSkJKGkgJiAxNSkJCS8qIFJtCQkJKi8KKworI2RlZmluZSBSRUdNQVNLX0JJVFMoaSkJKGkgJiAweGZmZmYpCisjZGVmaW5lIE9GRlNFVF9CSVRTKGkpCShpICYgMHgwZmZmKQorCisjZGVmaW5lIElTX1NISUZUKGkpCShpICYgMHgwZmYwKQorI2RlZmluZSBTSElGVF9CSVRTKGkpCSgoaSA+PiA3KSAmIDB4MWYpCisjZGVmaW5lIFNISUZUX1RZUEUoaSkJKGkgJiAweDYwKQorI2RlZmluZSBTSElGVF9MU0wJMHgwMAorI2RlZmluZSBTSElGVF9MU1IJMHgyMAorI2RlZmluZSBTSElGVF9BU1IJMHg0MAorI2RlZmluZSBTSElGVF9ST1JSUlgJMHg2MAorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhaV91c2VyOworc3RhdGljIHVuc2lnbmVkIGxvbmcgYWlfc3lzOworc3RhdGljIHVuc2lnbmVkIGxvbmcgYWlfc2tpcHBlZDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFpX2hhbGY7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBhaV93b3JkOworc3RhdGljIHVuc2lnbmVkIGxvbmcgYWlfbXVsdGk7CitzdGF0aWMgaW50IGFpX3VzZXJtb2RlOworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK3N0YXRpYyBjb25zdCBjaGFyICp1c2VybW9kZV9hY3Rpb25bXSA9IHsKKwkiaWdub3JlZCIsCisJIndhcm4iLAorCSJmaXh1cCIsCisJImZpeHVwK3dhcm4iLAorCSJzaWduYWwiLAorCSJzaWduYWwrd2FybiIKK307CisKK3N0YXRpYyBpbnQKK3Byb2NfYWxpZ25tZW50X3JlYWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsCisJCSAgICB2b2lkICpkYXRhKQoreworCWNoYXIgKnAgPSBwYWdlOworCWludCBsZW47CisKKwlwICs9IHNwcmludGYocCwgIlVzZXI6XHRcdCVsdVxuIiwgYWlfdXNlcik7CisJcCArPSBzcHJpbnRmKHAsICJTeXN0ZW06XHRcdCVsdVxuIiwgYWlfc3lzKTsKKwlwICs9IHNwcmludGYocCwgIlNraXBwZWQ6XHQlbHVcbiIsIGFpX3NraXBwZWQpOworCXAgKz0gc3ByaW50ZihwLCAiSGFsZjpcdFx0JWx1XG4iLCBhaV9oYWxmKTsKKwlwICs9IHNwcmludGYocCwgIldvcmQ6XHRcdCVsdVxuIiwgYWlfd29yZCk7CisJcCArPSBzcHJpbnRmKHAsICJNdWx0aTpcdFx0JWx1XG4iLCBhaV9tdWx0aSk7CisJcCArPSBzcHJpbnRmKHAsICJVc2VyIGZhdWx0czpcdCVpICglcylcbiIsIGFpX3VzZXJtb2RlLAorCQkJdXNlcm1vZGVfYWN0aW9uW2FpX3VzZXJtb2RlXSk7CisKKwlsZW4gPSAocCAtIHBhZ2UpIC0gb2ZmOworCWlmIChsZW4gPCAwKQorCQlsZW4gPSAwOworCisJKmVvZiA9IChsZW4gPD0gY291bnQpID8gMSA6IDA7CisJKnN0YXJ0ID0gcGFnZSArIG9mZjsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgcHJvY19hbGlnbm1lbnRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3sKKwljaGFyIG1vZGU7CisKKwlpZiAoY291bnQgPiAwKSB7CisJCWlmIChnZXRfdXNlcihtb2RlLCBidWZmZXIpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChtb2RlID49ICcwJyAmJiBtb2RlIDw9ICc1JykKKwkJCSAgIGFpX3VzZXJtb2RlID0gbW9kZSAtICcwJzsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCisjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KKwordW5pb24gb2Zmc2V0X3VuaW9uIHsKKwl1bnNpZ25lZCBsb25nIHVuOworCSAgc2lnbmVkIGxvbmcgc247Cit9OworCisjZGVmaW5lIFRZUEVfRVJST1IJMAorI2RlZmluZSBUWVBFX0ZBVUxUCTEKKyNkZWZpbmUgVFlQRV9MRFNUCTIKKyNkZWZpbmUgVFlQRV9ET05FCTMKKworI2lmZGVmIF9fQVJNRUJfXworI2RlZmluZSBCRQkJMQorI2RlZmluZSBGSVJTVF9CWVRFXzE2CSJtb3YJJTEsICUxLCByb3IgIzhcbiIKKyNkZWZpbmUgRklSU1RfQllURV8zMgkibW92CSUxLCAlMSwgcm9yICMyNFxuIgorI2RlZmluZSBORVhUX0JZVEUJInJvciAjMjQiCisjZWxzZQorI2RlZmluZSBCRQkJMAorI2RlZmluZSBGSVJTVF9CWVRFXzE2CisjZGVmaW5lIEZJUlNUX0JZVEVfMzIKKyNkZWZpbmUgTkVYVF9CWVRFCSJsc3IgIzgiCisjZW5kaWYKKworI2RlZmluZSBfX2dldDhfdW5hbGlnbmVkX2NoZWNrKGlucyx2YWwsYWRkcixlcnIpCVwKKwlfX2FzbV9fKAkJCQkJXAorCSIxOgkiaW5zIgklMSwgWyUyXSwgIzFcbiIJCQlcCisJIjI6XG4iCQkJCQkJXAorCSIJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJXAorCSIJLmFsaWduCTJcbiIJCQkJXAorCSIzOgltb3YJJTAsICMxXG4iCQkJXAorCSIJYgkyYlxuIgkJCQlcCisJIgkucHJldmlvdXNcbiIJCQkJXAorCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJXAorCSIJLmFsaWduCTNcbiIJCQkJXAorCSIJLmxvbmcJMWIsIDNiXG4iCQkJXAorCSIJLnByZXZpb3VzXG4iCQkJCVwKKwk6ICI9ciIgKGVyciksICI9JnIiICh2YWwpLCAiPXIiIChhZGRyKQkJXAorCTogIjAiIChlcnIpLCAiMiIgKGFkZHIpKQorCisjZGVmaW5lIF9fZ2V0MTZfdW5hbGlnbmVkX2NoZWNrKGlucyx2YWwsYWRkcikJCQlcCisJZG8gewkJCQkJCQlcCisJCXVuc2lnbmVkIGludCBlcnIgPSAwLCB2LCBhID0gYWRkcjsJCVwKKwkJX19nZXQ4X3VuYWxpZ25lZF9jaGVjayhpbnMsdixhLGVycik7CQlcCisJCXZhbCA9ICB2IDw8ICgoQkUpID8gOCA6IDApOwkJCVwKKwkJX19nZXQ4X3VuYWxpZ25lZF9jaGVjayhpbnMsdixhLGVycik7CQlcCisJCXZhbCB8PSB2IDw8ICgoQkUpID8gMCA6IDgpOwkJCVwKKwkJaWYgKGVycikJCQkJCVwKKwkJCWdvdG8gZmF1bHQ7CQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGdldDE2X3VuYWxpZ25lZF9jaGVjayh2YWwsYWRkcikgXAorCV9fZ2V0MTZfdW5hbGlnbmVkX2NoZWNrKCJsZHJiIix2YWwsYWRkcikKKworI2RlZmluZSBnZXQxNnRfdW5hbGlnbmVkX2NoZWNrKHZhbCxhZGRyKSBcCisJX19nZXQxNl91bmFsaWduZWRfY2hlY2soImxkcmJ0Iix2YWwsYWRkcikKKworI2RlZmluZSBfX2dldDMyX3VuYWxpZ25lZF9jaGVjayhpbnMsdmFsLGFkZHIpCQkJXAorCWRvIHsJCQkJCQkJXAorCQl1bnNpZ25lZCBpbnQgZXJyID0gMCwgdiwgYSA9IGFkZHI7CQlcCisJCV9fZ2V0OF91bmFsaWduZWRfY2hlY2soaW5zLHYsYSxlcnIpOwkJXAorCQl2YWwgPSAgdiA8PCAoKEJFKSA/IDI0IDogIDApOwkJCVwKKwkJX19nZXQ4X3VuYWxpZ25lZF9jaGVjayhpbnMsdixhLGVycik7CQlcCisJCXZhbCB8PSB2IDw8ICgoQkUpID8gMTYgOiAgOCk7CQkJXAorCQlfX2dldDhfdW5hbGlnbmVkX2NoZWNrKGlucyx2LGEsZXJyKTsJCVwKKwkJdmFsIHw9IHYgPDwgKChCRSkgPyAgOCA6IDE2KTsJCQlcCisJCV9fZ2V0OF91bmFsaWduZWRfY2hlY2soaW5zLHYsYSxlcnIpOwkJXAorCQl2YWwgfD0gdiA8PCAoKEJFKSA/ICAwIDogMjQpOwkJCVwKKwkJaWYgKGVycikJCQkJCVwKKwkJCWdvdG8gZmF1bHQ7CQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGdldDMyX3VuYWxpZ25lZF9jaGVjayh2YWwsYWRkcikgXAorCV9fZ2V0MzJfdW5hbGlnbmVkX2NoZWNrKCJsZHJiIix2YWwsYWRkcikKKworI2RlZmluZSBnZXQzMnRfdW5hbGlnbmVkX2NoZWNrKHZhbCxhZGRyKSBcCisJX19nZXQzMl91bmFsaWduZWRfY2hlY2soImxkcmJ0Iix2YWwsYWRkcikKKworI2RlZmluZSBfX3B1dDE2X3VuYWxpZ25lZF9jaGVjayhpbnMsdmFsLGFkZHIpCQkJXAorCWRvIHsJCQkJCQkJXAorCQl1bnNpZ25lZCBpbnQgZXJyID0gMCwgdiA9IHZhbCwgYSA9IGFkZHI7CVwKKwkJX19hc21fXyggRklSU1RfQllURV8xNgkJCQlcCisJCSIxOgkiaW5zIgklMSwgWyUyXSwgIzFcbiIJCQlcCisJCSIJbW92CSUxLCAlMSwgIk5FWFRfQllURSJcbiIJCVwKKwkJIjI6CSJpbnMiCSUxLCBbJTJdXG4iCQkJXAorCQkiMzpcbiIJCQkJCQlcCisJCSIJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJXAorCQkiCS5hbGlnbgkyXG4iCQkJCVwKKwkJIjQ6CW1vdgklMCwgIzFcbiIJCQlcCisJCSIJYgkzYlxuIgkJCQlcCisJCSIJLnByZXZpb3VzXG4iCQkJCVwKKwkJIgkuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQlcCisJCSIJLmFsaWduCTNcbiIJCQkJXAorCQkiCS5sb25nCTFiLCA0YlxuIgkJCVwKKwkJIgkubG9uZwkyYiwgNGJcbiIJCQlcCisJCSIJLnByZXZpb3VzXG4iCQkJCVwKKwkJOiAiPXIiIChlcnIpLCAiPSZyIiAodiksICI9JnIiIChhKQkJXAorCQk6ICIwIiAoZXJyKSwgIjEiICh2KSwgIjIiIChhKSk7CQkJXAorCQlpZiAoZXJyKQkJCQkJXAorCQkJZ290byBmYXVsdDsJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgcHV0MTZfdW5hbGlnbmVkX2NoZWNrKHZhbCxhZGRyKSAgXAorCV9fcHV0MTZfdW5hbGlnbmVkX2NoZWNrKCJzdHJiIix2YWwsYWRkcikKKworI2RlZmluZSBwdXQxNnRfdW5hbGlnbmVkX2NoZWNrKHZhbCxhZGRyKSBcCisJX19wdXQxNl91bmFsaWduZWRfY2hlY2soInN0cmJ0Iix2YWwsYWRkcikKKworI2RlZmluZSBfX3B1dDMyX3VuYWxpZ25lZF9jaGVjayhpbnMsdmFsLGFkZHIpCQkJXAorCWRvIHsJCQkJCQkJXAorCQl1bnNpZ25lZCBpbnQgZXJyID0gMCwgdiA9IHZhbCwgYSA9IGFkZHI7CVwKKwkJX19hc21fXyggRklSU1RfQllURV8zMgkJCQlcCisJCSIxOgkiaW5zIgklMSwgWyUyXSwgIzFcbiIJCQlcCisJCSIJbW92CSUxLCAlMSwgIk5FWFRfQllURSJcbiIJCVwKKwkJIjI6CSJpbnMiCSUxLCBbJTJdLCAjMVxuIgkJCVwKKwkJIgltb3YJJTEsICUxLCAiTkVYVF9CWVRFIlxuIgkJXAorCQkiMzoJImlucyIJJTEsIFslMl0sICMxXG4iCQkJXAorCQkiCW1vdgklMSwgJTEsICJORVhUX0JZVEUiXG4iCQlcCisJCSI0OgkiaW5zIgklMSwgWyUyXVxuIgkJCVwKKwkJIjU6XG4iCQkJCQkJXAorCQkiCS5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCVwKKwkJIgkuYWxpZ24JMlxuIgkJCQlcCisJCSI2Ogltb3YJJTAsICMxXG4iCQkJXAorCQkiCWIJNWJcbiIJCQkJXAorCQkiCS5wcmV2aW91c1xuIgkJCQlcCisJCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJXAorCQkiCS5hbGlnbgkzXG4iCQkJCVwKKwkJIgkubG9uZwkxYiwgNmJcbiIJCQlcCisJCSIJLmxvbmcJMmIsIDZiXG4iCQkJXAorCQkiCS5sb25nCTNiLCA2YlxuIgkJCVwKKwkJIgkubG9uZwk0YiwgNmJcbiIJCQlcCisJCSIJLnByZXZpb3VzXG4iCQkJCVwKKwkJOiAiPXIiIChlcnIpLCAiPSZyIiAodiksICI9JnIiIChhKQkJXAorCQk6ICIwIiAoZXJyKSwgIjEiICh2KSwgIjIiIChhKSk7CQkJXAorCQlpZiAoZXJyKQkJCQkJXAorCQkJZ290byBmYXVsdDsJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgcHV0MzJfdW5hbGlnbmVkX2NoZWNrKHZhbCxhZGRyKQkgXAorCV9fcHV0MzJfdW5hbGlnbmVkX2NoZWNrKCJzdHJiIiwgdmFsLCBhZGRyKQorCisjZGVmaW5lIHB1dDMydF91bmFsaWduZWRfY2hlY2sodmFsLGFkZHIpIFwKKwlfX3B1dDMyX3VuYWxpZ25lZF9jaGVjaygic3RyYnQiLCB2YWwsIGFkZHIpCisKK3N0YXRpYyB2b2lkCitkb19hbGlnbm1lbnRfZmluaXNoX2xkc3QodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGluc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5pb24gb2Zmc2V0X3VuaW9uIG9mZnNldCkKK3sKKwlpZiAoIUxEU1RfVV9CSVQoaW5zdHIpKQorCQlvZmZzZXQudW4gPSAtb2Zmc2V0LnVuOworCisJaWYgKCFMRFNUX1BfQklUKGluc3RyKSkKKwkJYWRkciArPSBvZmZzZXQudW47CisKKwlpZiAoIUxEU1RfUF9CSVQoaW5zdHIpIHx8IExEU1RfV19CSVQoaW5zdHIpKQorCQlyZWdzLT51cmVnc1tSTl9CSVRTKGluc3RyKV0gPSBhZGRyOworfQorCitzdGF0aWMgaW50Citkb19hbGlnbm1lbnRfbGRyaHN0cmgodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGluc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcmQgPSBSRF9CSVRTKGluc3RyKTsKKworCWlmICgoaW5zdHIgJiAweDAxZjAwZmYwKSA9PSAweDAxMDAwMDkwKQorCQlnb3RvIHN3cDsKKworCWlmICgoaW5zdHIgJiAweDkwKSAhPSAweDkwIHx8IChpbnN0ciAmIDB4NjApID09IDApCisJCWdvdG8gYmFkOworCisJYWlfaGFsZiArPSAxOworCisJaWYgKHVzZXJfbW9kZShyZWdzKSkKKwkJZ290byB1c2VyOworCisJaWYgKExEU1RfTF9CSVQoaW5zdHIpKSB7CisJCXVuc2lnbmVkIGxvbmcgdmFsOworCQlnZXQxNl91bmFsaWduZWRfY2hlY2sodmFsLCBhZGRyKTsKKworCQkvKiBzaWduZWQgaGFsZi13b3JkPyAqLworCQlpZiAoaW5zdHIgJiAweDQwKQorCQkJdmFsID0gKHNpZ25lZCBsb25nKSgoc2lnbmVkIHNob3J0KSB2YWwpOworCisJCXJlZ3MtPnVyZWdzW3JkXSA9IHZhbDsKKwl9IGVsc2UKKwkJcHV0MTZfdW5hbGlnbmVkX2NoZWNrKHJlZ3MtPnVyZWdzW3JkXSwgYWRkcik7CisKKwlyZXR1cm4gVFlQRV9MRFNUOworCisgdXNlcjoKKyAJaWYgKExEU1RfTF9CSVQoaW5zdHIpKSB7CisgCQl1bnNpZ25lZCBsb25nIHZhbDsKKyAJCWdldDE2dF91bmFsaWduZWRfY2hlY2sodmFsLCBhZGRyKTsKKworIAkJLyogc2lnbmVkIGhhbGYtd29yZD8gKi8KKyAJCWlmIChpbnN0ciAmIDB4NDApCisgCQkJdmFsID0gKHNpZ25lZCBsb25nKSgoc2lnbmVkIHNob3J0KSB2YWwpOworCisgCQlyZWdzLT51cmVnc1tyZF0gPSB2YWw7CisgCX0gZWxzZQorIAkJcHV0MTZ0X3VuYWxpZ25lZF9jaGVjayhyZWdzLT51cmVnc1tyZF0sIGFkZHIpOworCisgCXJldHVybiBUWVBFX0xEU1Q7CisKKyBzd3A6CisJcHJpbnRrKEtFUk5fRVJSICJBbGlnbm1lbnQgdHJhcDogbm90IGhhbmRsaW5nIHN3cCBpbnN0cnVjdGlvblxuIik7CisgYmFkOgorCXJldHVybiBUWVBFX0VSUk9SOworCisgZmF1bHQ6CisJcmV0dXJuIFRZUEVfRkFVTFQ7Cit9CisKK3N0YXRpYyBpbnQKK2RvX2FsaWdubWVudF9sZHJzdHIodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGluc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcmQgPSBSRF9CSVRTKGluc3RyKTsKKworCWFpX3dvcmQgKz0gMTsKKworCWlmICgoIUxEU1RfUF9CSVQoaW5zdHIpICYmIExEU1RfV19CSVQoaW5zdHIpKSB8fCB1c2VyX21vZGUocmVncykpCisJCWdvdG8gdHJhbnM7CisKKwlpZiAoTERTVF9MX0JJVChpbnN0cikpIHsKKwkJdW5zaWduZWQgaW50IHZhbDsKKwkJZ2V0MzJfdW5hbGlnbmVkX2NoZWNrKHZhbCwgYWRkcik7CisJCXJlZ3MtPnVyZWdzW3JkXSA9IHZhbDsKKwl9IGVsc2UKKwkJcHV0MzJfdW5hbGlnbmVkX2NoZWNrKHJlZ3MtPnVyZWdzW3JkXSwgYWRkcik7CisJcmV0dXJuIFRZUEVfTERTVDsKKworIHRyYW5zOgorCWlmIChMRFNUX0xfQklUKGluc3RyKSkgeworCQl1bnNpZ25lZCBpbnQgdmFsOworCQlnZXQzMnRfdW5hbGlnbmVkX2NoZWNrKHZhbCwgYWRkcik7CisJCXJlZ3MtPnVyZWdzW3JkXSA9IHZhbDsKKwl9IGVsc2UKKwkJcHV0MzJ0X3VuYWxpZ25lZF9jaGVjayhyZWdzLT51cmVnc1tyZF0sIGFkZHIpOworCXJldHVybiBUWVBFX0xEU1Q7CisKKyBmYXVsdDoKKwlyZXR1cm4gVFlQRV9GQVVMVDsKK30KKworLyoKKyAqIExETS9TVE0gYWxpZ25tZW50IGhhbmRsZXIuCisgKgorICogVGhlcmUgYXJlIDQgdmFyaWFudHMgb2YgdGhpcyBpbnN0cnVjdGlvbjoKKyAqCisgKiBCID0gcm4gcG9pbnRlciBiZWZvcmUgaW5zdHJ1Y3Rpb24sIEEgPSBybiBwb2ludGVyIGFmdGVyIGluc3RydWN0aW9uCisgKiAgICAgICAgICAgICAgLS0tLS0tIGluY3JlYXNpbmcgYWRkcmVzcyAtLS0tLT4KKyAqCSAgICAgICAgfCAgICB8IHIwIHwgcjEgfCAuLi4gfCByeCB8ICAgIHwKKyAqIFBVID0gMDEgICAgICAgICAgICAgQiAgICAgICAgICAgICAgICAgICAgQQorICogUFUgPSAxMSAgICAgICAgQiAgICAgICAgICAgICAgICAgICAgQQorICogUFUgPSAwMCAgICAgICAgQSAgICAgICAgICAgICAgICAgICAgQgorICogUFUgPSAxMCAgICAgICAgICAgICBBICAgICAgICAgICAgICAgICAgICBCCisgKi8KK3N0YXRpYyBpbnQKK2RvX2FsaWdubWVudF9sZG1zdG0odW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGluc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcmQsIHJuLCBjb3JyZWN0aW9uLCBucl9yZWdzLCByZWdiaXRzOworCXVuc2lnbmVkIGxvbmcgZWFkZHIsIG5ld2FkZHI7CisKKwlpZiAoTERNX1NfQklUKGluc3RyKSkKKwkJZ290byBiYWQ7CisKKwljb3JyZWN0aW9uID0gNDsgLyogcHJvY2Vzc29yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgKi8KKwlyZWdzLT5BUk1fcGMgKz0gY29ycmVjdGlvbjsKKworCWFpX211bHRpICs9IDE7CisKKwkvKiBjb3VudCB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVycyBpbiB0aGUgbWFzayB0byBiZSB0cmFuc2ZlcnJlZCAqLworCW5yX3JlZ3MgPSBod2VpZ2h0MTYoUkVHTUFTS19CSVRTKGluc3RyKSkgKiA0OworCisJcm4gPSBSTl9CSVRTKGluc3RyKTsKKwluZXdhZGRyID0gZWFkZHIgPSByZWdzLT51cmVnc1tybl07CisKKwlpZiAoIUxEU1RfVV9CSVQoaW5zdHIpKQorCQlucl9yZWdzID0gLW5yX3JlZ3M7CisJbmV3YWRkciArPSBucl9yZWdzOworCWlmICghTERTVF9VX0JJVChpbnN0cikpCisJCWVhZGRyID0gbmV3YWRkcjsKKworCWlmIChMRFNUX1BfRVFfVShpbnN0cikpCS8qIFUgPSBQICovCisJCWVhZGRyICs9IDQ7CisKKwkvKiAKKwkgKiBGb3IgYWxpZ25tZW50IGZhdWx0cyBvbiB0aGUgQVJNOTIyVC9BUk05MjBUIHRoZSBNTVUgIG1ha2VzCisJICogdGhlIEZTUiAoYW5kIGhlbmNlIGFkZHIpIGVxdWFsIHRvIHRoZSB1cGRhdGVkIGJhc2UgYWRkcmVzcworCSAqIG9mIHRoZSBtdWx0aXBsZSBhY2Nlc3MgcmF0aGVyIHRoYW4gdGhlIHJlc3RvcmVkIHZhbHVlLgorCSAqIFN3aXRjaCB0aGlzIG1lc3NhZ2Ugb2ZmIGlmIHdlJ3ZlIGdvdCBhIEFSTTkyWzAyXSwgb3RoZXJ3aXNlCisJICogW2xzXWRtIGFsaWdubWVudCBmYXVsdHMgYXJlIG5vaXN5IQorCSAqLworI2lmICEoZGVmaW5lZCBDT05GSUdfQ1BVX0FSTTkyMlQpICAmJiAhKGRlZmluZWQgQ09ORklHX0NQVV9BUk05MjBUKQorCS8qCisJICogVGhpcyBpcyBhICJoaW50IiAtIHdlIGFscmVhZHkgaGF2ZSBlYWRkciB3b3JrZWQgb3V0IGJ5IHRoZQorCSAqIHByb2Nlc3NvciBmb3IgdXMuCisJICovCisJaWYgKGFkZHIgIT0gZWFkZHIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJMRE1TVE06IFBDID0gJTA4bHgsIGluc3RyID0gJTA4bHgsICIKKwkJCSJhZGRyID0gJTA4bHgsIGVhZGRyID0gJTA4bHhcbiIsCisJCQkgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSwgaW5zdHIsIGFkZHIsIGVhZGRyKTsKKwkJc2hvd19yZWdzKHJlZ3MpOworCX0KKyNlbmRpZgorCisJaWYgKHVzZXJfbW9kZShyZWdzKSkgeworCQlmb3IgKHJlZ2JpdHMgPSBSRUdNQVNLX0JJVFMoaW5zdHIpLCByZCA9IDA7IHJlZ2JpdHM7CisJCSAgICAgcmVnYml0cyA+Pj0gMSwgcmQgKz0gMSkKKwkJCWlmIChyZWdiaXRzICYgMSkgeworCQkJCWlmIChMRFNUX0xfQklUKGluc3RyKSkgeworCQkJCQl1bnNpZ25lZCBpbnQgdmFsOworCQkJCQlnZXQzMnRfdW5hbGlnbmVkX2NoZWNrKHZhbCwgZWFkZHIpOworCQkJCQlyZWdzLT51cmVnc1tyZF0gPSB2YWw7CisJCQkJfSBlbHNlCisJCQkJCXB1dDMydF91bmFsaWduZWRfY2hlY2socmVncy0+dXJlZ3NbcmRdLCBlYWRkcik7CisJCQkJZWFkZHIgKz0gNDsKKwkJCX0KKwl9IGVsc2UgeworCQlmb3IgKHJlZ2JpdHMgPSBSRUdNQVNLX0JJVFMoaW5zdHIpLCByZCA9IDA7IHJlZ2JpdHM7CisJCSAgICAgcmVnYml0cyA+Pj0gMSwgcmQgKz0gMSkKKwkJCWlmIChyZWdiaXRzICYgMSkgeworCQkJCWlmIChMRFNUX0xfQklUKGluc3RyKSkgeworCQkJCQl1bnNpZ25lZCBpbnQgdmFsOworCQkJCQlnZXQzMl91bmFsaWduZWRfY2hlY2sodmFsLCBlYWRkcik7CisJCQkJCXJlZ3MtPnVyZWdzW3JkXSA9IHZhbDsKKwkJCQl9IGVsc2UKKwkJCQkJcHV0MzJfdW5hbGlnbmVkX2NoZWNrKHJlZ3MtPnVyZWdzW3JkXSwgZWFkZHIpOworCQkJCWVhZGRyICs9IDQ7CisJCQl9CisJfQorCisJaWYgKExEU1RfV19CSVQoaW5zdHIpKQorCQlyZWdzLT51cmVnc1tybl0gPSBuZXdhZGRyOworCWlmICghTERTVF9MX0JJVChpbnN0cikgfHwgIShSRUdNQVNLX0JJVFMoaW5zdHIpICYgKDEgPDwgMTUpKSkKKwkJcmVncy0+QVJNX3BjIC09IGNvcnJlY3Rpb247CisJcmV0dXJuIFRZUEVfRE9ORTsKKworZmF1bHQ6CisJcmVncy0+QVJNX3BjIC09IGNvcnJlY3Rpb247CisJcmV0dXJuIFRZUEVfRkFVTFQ7CisKK2JhZDoKKwlwcmludGsoS0VSTl9FUlIgIkFsaWdubWVudCB0cmFwOiBub3QgaGFuZGxpbmcgbGRtIHdpdGggcy1iaXQgc2V0XG4iKTsKKwlyZXR1cm4gVFlQRV9FUlJPUjsKK30KKworLyoKKyAqIENvbnZlcnQgVGh1bWIgbGQvc3QgaW5zdHJ1Y3Rpb24gZm9ybXMgdG8gZXF1aXZhbGVudCBBUk0gaW5zdHJ1Y3Rpb25zIHNvCisgKiB3ZSBjYW4gcmV1c2UgQVJNIHVzZXJsYW5kIGFsaWdubWVudCBmYXVsdCBmaXh1cHMgZm9yIFRodW1iLgorICoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gd2FzIGluaXRpYWxseSBiYXNlZCBvbiB0aGUgYWxnb3JpdGhtIGZvdW5kIGluCisgKiBnZGIvc2ltL2FybS90aHVtYmVtdS5jLiBJdCBpcyBiYXNpY2FsbHkganVzdCBhIGNvZGUgcmVkdWN0aW9uIG9mIHNhbWUKKyAqIHRvIGNvbnZlcnQgb25seSBUaHVtYiBsZC9zdCBpbnN0cnVjdGlvbiBmb3JtcyB0byBlcXVpdmFsZW50IEFSTSBmb3Jtcy4KKyAqCisgKiBOT1RFUzoKKyAqIDEuIENvbW1lbnRzIGJlbG93IHJlZmVyIHRvIEFSTSBBUk0gRERJMDEwMEUgVGh1bWIgSW5zdHJ1Y3Rpb24gc2VjdGlvbnMuCisgKiAyLiBJZiBmb3Igc29tZSByZWFzb24gd2UncmUgcGFzc2VkIGFuIG5vbi1sZC9zdCBUaHVtYiBpbnN0cnVjdGlvbiB0bworICogICAgZGVjb2RlLCB3ZSByZXR1cm4gMHhkZWFkYzBkZS4gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIHVuZGVyIG5vcm1hbAorICogICAgY2lyY3Vtc3RhbmNlcyBidXQgaWYgaXQgZG9lcywgd2UndmUgZ290IG90aGVyIHByb2JsZW1zIHRvIGRlYWwgd2l0aAorICogICAgZWxzZXdoZXJlIGFuZCB3ZSBvYnZpb3VzbHkgY2FuJ3QgZml4IHRob3NlIHByb2JsZW1zIGhlcmUuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcKK3RodW1iMmFybSh1MTYgdGluc3RyKQoreworCXUzMiBMID0gKHRpbnN0ciAmICgxPDwxMSkpID4+IDExOworCisJc3dpdGNoICgodGluc3RyICYgMHhmODAwKSA+PiAxMSkgeworCS8qIDYuNS4xIEZvcm1hdCAxOiAqLworCWNhc2UgMHg2MDAwID4+IDExOgkJCQkvKiA3LjEuNTIgU1RSKDEpICovCisJY2FzZSAweDY4MDAgPj4gMTE6CQkJCS8qIDcuMS4yNiBMRFIoMSkgKi8KKwljYXNlIDB4NzAwMCA+PiAxMToJCQkJLyogNy4xLjU1IFNUUkIoMSkgKi8KKwljYXNlIDB4NzgwMCA+PiAxMToJCQkJLyogNy4xLjMwIExEUkIoMSkgKi8KKwkJcmV0dXJuIDB4ZTU4MDAwMDAgfAorCQkJKCh0aW5zdHIgJiAoMTw8MTIpKSA8PCAoMjItMTIpKSB8CS8qIGZpeHVwICovCisJCQkoTDw8MjApIHwJCQkJLyogTD09MT8gKi8KKwkJCSgodGluc3RyICYgKDc8PDApKSA8PCAoMTItMCkpIHwJCS8qIFJkICovCisJCQkoKHRpbnN0ciAmICg3PDwzKSkgPDwgKDE2LTMpKSB8CQkvKiBSbiAqLworCQkJKCh0aW5zdHIgJiAoMzE8PDYpKSA+PgkJCS8qIGltbWVkXzUgKi8KKwkJCQkoNiAtICgodGluc3RyICYgKDE8PDEyKSkgPyAwIDogMikpKTsKKwljYXNlIDB4ODAwMCA+PiAxMToJCQkJLyogNy4xLjU3IFNUUkgoMSkgKi8KKwljYXNlIDB4ODgwMCA+PiAxMToJCQkJLyogNy4xLjMyIExEUkgoMSkgKi8KKwkJcmV0dXJuIDB4ZTFjMDAwYjAgfAorCQkJKEw8PDIwKSB8CQkJCS8qIEw9PTE/ICovCisJCQkoKHRpbnN0ciAmICg3PDwwKSkgPDwgKDEyLTApKSB8CQkvKiBSZCAqLworCQkJKCh0aW5zdHIgJiAoNzw8MykpIDw8ICgxNi0zKSkgfAkJLyogUm4gKi8KKwkJCSgodGluc3RyICYgKDc8PDYpKSA+PiAoNi0xKSkgfAkgLyogaW1tZWRfNVsyOjBdICovCisJCQkoKHRpbnN0ciAmICgzPDw5KSkgPj4gKDktOCkpOwkgLyogaW1tZWRfNVs0OjNdICovCisKKwkvKiA2LjUuMSBGb3JtYXQgMjogKi8KKwljYXNlIDB4NTAwMCA+PiAxMToKKwljYXNlIDB4NTgwMCA+PiAxMToKKwkJeworCQkJc3RhdGljIGNvbnN0IHUzMiBzdWJzZXRbOF0gPSB7CisJCQkJMHhlNzgwMDAwMCwJCS8qIDcuMS41MyBTVFIoMikgKi8KKwkJCQkweGUxODAwMGIwLAkJLyogNy4xLjU4IFNUUkgoMikgKi8KKwkJCQkweGU3YzAwMDAwLAkJLyogNy4xLjU2IFNUUkIoMikgKi8KKwkJCQkweGUxOTAwMGQwLAkJLyogNy4xLjM0IExEUlNCICovCisJCQkJMHhlNzkwMDAwMCwJCS8qIDcuMS4yNyBMRFIoMikgKi8KKwkJCQkweGUxOTAwMGIwLAkJLyogNy4xLjMzIExEUkgoMikgKi8KKwkJCQkweGU3ZDAwMDAwLAkJLyogNy4xLjMxIExEUkIoMikgKi8KKwkJCQkweGUxOTAwMGYwCQkvKiA3LjEuMzUgTERSU0ggKi8KKwkJCX07CisJCQlyZXR1cm4gc3Vic2V0Wyh0aW5zdHIgJiAoNzw8OSkpID4+IDldIHwKKwkJCSAgICAoKHRpbnN0ciAmICg3PDwwKSkgPDwgKDEyLTApKSB8CS8qIFJkICovCisJCQkgICAgKCh0aW5zdHIgJiAoNzw8MykpIDw8ICgxNi0zKSkgfAkvKiBSbiAqLworCQkJICAgICgodGluc3RyICYgKDc8PDYpKSA+PiAoNi0wKSk7CS8qIFJtICovCisJCX0KKworCS8qIDYuNS4xIEZvcm1hdCAzOiAqLworCWNhc2UgMHg0ODAwID4+IDExOgkJCQkvKiA3LjEuMjggTERSKDMpICovCisJCS8qIE5PVEU6IFRoaXMgY2FzZSBpcyBub3QgdGVjaG5pY2FsbHkgcG9zc2libGUuIFdlJ3JlCisJCSAqIAkgbG9hZGluZyAzMi1iaXQgbWVtb3J5IGRhdGEgdmlhIFBDIHJlbGF0aXZlCisJCSAqCSBhZGRyZXNzaW5nIG1vZGUuIFNvIHdlIGNhbiBhbmQgc2hvdWxkIGVsaW1pbmF0ZQorCQkgKgkgdGhpcyBjYXNlLiBCdXQgSSdsbCBsZWF2ZSBpdCBoZXJlIGZvciBub3cuCisJCSAqLworCQlyZXR1cm4gMHhlNTlmMDAwMCB8CisJCSAgICAoKHRpbnN0ciAmICg3PDw4KSkgPDwgKDEyLTgpKSB8CQkvKiBSZCAqLworCQkgICAgKCh0aW5zdHIgJiAyNTUpIDw8ICgyLTApKTsJCQkvKiBpbW1lZF84ICovCisKKwkvKiA2LjUuMSBGb3JtYXQgNDogKi8KKwljYXNlIDB4OTAwMCA+PiAxMToJCQkJLyogNy4xLjU0IFNUUigzKSAqLworCWNhc2UgMHg5ODAwID4+IDExOgkJCQkvKiA3LjEuMjkgTERSKDQpICovCisJCXJldHVybiAweGU1OGQwMDAwIHwKKwkJCShMPDwyMCkgfAkJCQkvKiBMPT0xPyAqLworCQkJKCh0aW5zdHIgJiAoNzw8OCkpIDw8ICgxMi04KSkgfAkJLyogUmQgKi8KKwkJCSgodGluc3RyICYgMjU1KSA8PCAyKTsJCQkvKiBpbW1lZF84ICovCisKKwkvKiA2LjYuMSBGb3JtYXQgMTogKi8KKwljYXNlIDB4YzAwMCA+PiAxMToJCQkJLyogNy4xLjUxIFNUTUlBICovCisJY2FzZSAweGM4MDAgPj4gMTE6CQkJCS8qIDcuMS4yNSBMRE1JQSAqLworCQl7CisJCQl1MzIgUm4gPSAodGluc3RyICYgKDc8PDgpKSA+PiA4OworCQkJdTMyIFcgPSAoKEw8PFJuKSAmICh0aW5zdHImMjU1KSkgPyAwIDogMTw8MjE7CisKKwkJCXJldHVybiAweGU4ODAwMDAwIHwgVyB8IChMPDwyMCkgfCAoUm48PDE2KSB8CisJCQkJKHRpbnN0ciYyNTUpOworCQl9CisKKwkvKiA2LjYuMSBGb3JtYXQgMjogKi8KKwljYXNlIDB4YjAwMCA+PiAxMToJCQkJLyogNy4xLjQ4IFBVU0ggKi8KKwljYXNlIDB4YjgwMCA+PiAxMToJCQkJLyogNy4xLjQ3IFBPUCAqLworCQlpZiAoKHRpbnN0ciAmICgzIDw8IDkpKSA9PSAweDA0MDApIHsKKwkJCXN0YXRpYyBjb25zdCB1MzIgc3Vic2V0WzRdID0geworCQkJCTB4ZTkyZDAwMDAsCS8qIFNUTURCIHNwISx7cmVnaXN0ZXJzfSAqLworCQkJCTB4ZTkyZDQwMDAsCS8qIFNUTURCIHNwISx7cmVnaXN0ZXJzLGxyfSAqLworCQkJCTB4ZThiZDAwMDAsCS8qIExETUlBIHNwISx7cmVnaXN0ZXJzfSAqLworCQkJCTB4ZThiZDgwMDAJLyogTERNSUEgc3AhLHtyZWdpc3RlcnMscGN9ICovCisJCQl9OworCQkJcmV0dXJuIHN1YnNldFsoTDw8MSkgfCAoKHRpbnN0ciAmICgxPDw4KSkgPj4gOCldIHwKKwkJCSAgICAodGluc3RyICYgMjU1KTsJCS8qIHJlZ2lzdGVyX2xpc3QgKi8KKwkJfQorCQkvKiBFbHNlIGZhbGwgdGhyb3VnaCBmb3IgaWxsZWdhbCBpbnN0cnVjdGlvbiBjYXNlICovCisKKwlkZWZhdWx0OgorCQlyZXR1cm4gMHhkZWFkYzBkZTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2RvX2FsaWdubWVudCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuaW9uIG9mZnNldF91bmlvbiBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBpbnN0ciA9IDAsIGluc3RycHRyOworCWludCAoKmhhbmRsZXIpKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBpbnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCXVuc2lnbmVkIGludCB0eXBlOworCW1tX3NlZ21lbnRfdCBmczsKKwl1bnNpZ25lZCBpbnQgZmF1bHQ7CisJdTE2IHRpbnN0ciA9IDA7CisKKwlpbnN0cnB0ciA9IGluc3RydWN0aW9uX3BvaW50ZXIocmVncyk7CisKKwlmcyA9IGdldF9mcygpOworCXNldF9mcyhLRVJORUxfRFMpOworCWlmIHRodW1iX21vZGUocmVncykgeworCQlmYXVsdCA9IF9fZ2V0X3VzZXIodGluc3RyLCAodTE2ICopKGluc3RycHRyICYgfjEpKTsKKwkJaWYgKCEoZmF1bHQpKQorCQkJaW5zdHIgPSB0aHVtYjJhcm0odGluc3RyKTsKKwl9IGVsc2UKKwkJZmF1bHQgPSBfX2dldF91c2VyKGluc3RyLCAodTMyICopaW5zdHJwdHIpOworCXNldF9mcyhmcyk7CisKKwlpZiAoZmF1bHQpIHsKKwkJdHlwZSA9IFRZUEVfRkFVTFQ7CisgCQlnb3RvIGJhZF9vcl9mYXVsdDsKKwl9CisKKwlpZiAodXNlcl9tb2RlKHJlZ3MpKQorCQlnb3RvIHVzZXI7CisKKwlhaV9zeXMgKz0gMTsKKworIGZpeHVwOgorCisJcmVncy0+QVJNX3BjICs9IHRodW1iX21vZGUocmVncykgPyAyIDogNDsKKworCXN3aXRjaCAoQ09ESU5HX0JJVFMoaW5zdHIpKSB7CisJY2FzZSAweDAwMDAwMDAwOgkvKiBsZHJoIG9yIHN0cmggKi8KKwkJaWYgKExEU1RIX0lfQklUKGluc3RyKSkKKwkJCW9mZnNldC51biA9IChpbnN0ciAmIDB4ZjAwKSA+PiA0IHwgKGluc3RyICYgMTUpOworCQllbHNlCisJCQlvZmZzZXQudW4gPSByZWdzLT51cmVnc1tSTV9CSVRTKGluc3RyKV07CisJCWhhbmRsZXIgPSBkb19hbGlnbm1lbnRfbGRyaHN0cmg7CisJCWJyZWFrOworCisJY2FzZSAweDA0MDAwMDAwOgkvKiBsZHIgb3Igc3RyIGltbWVkaWF0ZSAqLworCQlvZmZzZXQudW4gPSBPRkZTRVRfQklUUyhpbnN0cik7CisJCWhhbmRsZXIgPSBkb19hbGlnbm1lbnRfbGRyc3RyOworCQlicmVhazsKKworCWNhc2UgMHgwNjAwMDAwMDoJLyogbGRyIG9yIHN0ciByZWdpc3RlciAqLworCQlvZmZzZXQudW4gPSByZWdzLT51cmVnc1tSTV9CSVRTKGluc3RyKV07CisKKwkJaWYgKElTX1NISUZUKGluc3RyKSkgeworCQkJdW5zaWduZWQgaW50IHNoaWZ0dmFsID0gU0hJRlRfQklUUyhpbnN0cik7CisKKwkJCXN3aXRjaChTSElGVF9UWVBFKGluc3RyKSkgeworCQkJY2FzZSBTSElGVF9MU0w6CisJCQkJb2Zmc2V0LnVuIDw8PSBzaGlmdHZhbDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBTSElGVF9MU1I6CisJCQkJb2Zmc2V0LnVuID4+PSBzaGlmdHZhbDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBTSElGVF9BU1I6CisJCQkJb2Zmc2V0LnNuID4+PSBzaGlmdHZhbDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBTSElGVF9ST1JSUlg6CisJCQkJaWYgKHNoaWZ0dmFsID09IDApIHsKKwkJCQkJb2Zmc2V0LnVuID4+PSAxOworCQkJCQlpZiAocmVncy0+QVJNX2Nwc3IgJiBQU1JfQ19CSVQpCisJCQkJCQlvZmZzZXQudW4gfD0gMSA8PCAzMTsKKwkJCQl9IGVsc2UKKwkJCQkJb2Zmc2V0LnVuID0gb2Zmc2V0LnVuID4+IHNoaWZ0dmFsIHwKKwkJCQkJCQkgIG9mZnNldC51biA8PCAoMzIgLSBzaGlmdHZhbCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaGFuZGxlciA9IGRvX2FsaWdubWVudF9sZHJzdHI7CisJCWJyZWFrOworCisJY2FzZSAweDA4MDAwMDAwOgkvKiBsZG0gb3Igc3RtICovCisJCWhhbmRsZXIgPSBkb19hbGlnbm1lbnRfbGRtc3RtOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWdvdG8gYmFkOworCX0KKworCXR5cGUgPSBoYW5kbGVyKGFkZHIsIGluc3RyLCByZWdzKTsKKworCWlmICh0eXBlID09IFRZUEVfRVJST1IgfHwgdHlwZSA9PSBUWVBFX0ZBVUxUKQorCQlnb3RvIGJhZF9vcl9mYXVsdDsKKworCWlmICh0eXBlID09IFRZUEVfTERTVCkKKwkJZG9fYWxpZ25tZW50X2ZpbmlzaF9sZHN0KGFkZHIsIGluc3RyLCByZWdzLCBvZmZzZXQpOworCisJcmV0dXJuIDA7CisKKyBiYWRfb3JfZmF1bHQ6CisJaWYgKHR5cGUgPT0gVFlQRV9FUlJPUikKKwkJZ290byBiYWQ7CisJcmVncy0+QVJNX3BjIC09IHRodW1iX21vZGUocmVncykgPyAyIDogNDsKKwkvKgorCSAqIFdlIGdvdCBhIGZhdWx0IC0gZml4IGl0IHVwLCBvciBkaWUuCisJICovCisJZG9fYmFkX2FyZWEoY3VycmVudCwgY3VycmVudC0+bW0sIGFkZHIsIGZzciwgcmVncyk7CisJcmV0dXJuIDA7CisKKyBiYWQ6CisJLyoKKwkgKiBPb3BzLCB3ZSBkaWRuJ3QgaGFuZGxlIHRoZSBpbnN0cnVjdGlvbi4KKwkgKi8KKwlwcmludGsoS0VSTl9FUlIgIkFsaWdubWVudCB0cmFwOiBub3QgaGFuZGxpbmcgaW5zdHJ1Y3Rpb24gIgorCQkiJTAqbHggYXQgWzwlMDhseD5dXG4iLAorCQl0aHVtYl9tb2RlKHJlZ3MpID8gNCA6IDgsCisJCXRodW1iX21vZGUocmVncykgPyB0aW5zdHIgOiBpbnN0ciwgaW5zdHJwdHIpOworCWFpX3NraXBwZWQgKz0gMTsKKwlyZXR1cm4gMTsKKworIHVzZXI6CisJYWlfdXNlciArPSAxOworCisJaWYgKGFpX3VzZXJtb2RlICYgMSkKKwkJcHJpbnRrKCJBbGlnbm1lbnQgdHJhcDogJXMgKCVkKSBQQz0weCUwOGx4IEluc3RyPTB4JTAqbHggIgorCQkgICAgICAgIkFkZHJlc3M9MHglMDhseCBGU1IgMHglMDN4XG4iLCBjdXJyZW50LT5jb21tLAorCQkJY3VycmVudC0+cGlkLCBpbnN0cnB0ciwKKwkJICAgICAgICB0aHVtYl9tb2RlKHJlZ3MpID8gNCA6IDgsCisJCSAgICAgICAgdGh1bWJfbW9kZShyZWdzKSA/IHRpbnN0ciA6IGluc3RyLAorCQkgICAgICAgIGFkZHIsIGZzcik7CisKKwlpZiAoYWlfdXNlcm1vZGUgJiAyKQorCQlnb3RvIGZpeHVwOworCisJaWYgKGFpX3VzZXJtb2RlICYgNCkKKwkJZm9yY2Vfc2lnKFNJR0JVUywgY3VycmVudCk7CisJZWxzZQorCQlzZXRfY3IoY3Jfbm9fYWxpZ25tZW50KTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBuZWVkcyB0byBiZSBkb25lIGFmdGVyIHN5c2N0bF9pbml0LCBvdGhlcndpc2Ugc3lzLyB3aWxsIGJlCisgKiBvdmVyd3JpdHRlbi4gIEFjdHVhbGx5LCB0aGlzIHNob3VsZG4ndCBiZSBpbiBzeXMvIGF0IGFsbCBzaW5jZQorICogaXQgaXNuJ3QgYSBzeXNjdGwsIGFuZCBpdCBkb2Vzbid0IGNvbnRhaW4gc3lzY3RsIGluZm9ybWF0aW9uLgorICogV2Ugbm93IGxvY2F0ZSBpdCBpbiAvcHJvYy9jcHUvYWxpZ25tZW50IGluc3RlYWQuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGFsaWdubWVudF9pbml0KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnJlczsKKworCXJlcyA9IHByb2NfbWtkaXIoImNwdSIsIE5VTEwpOworCWlmICghcmVzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcyA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJhbGlnbm1lbnQiLCBTX0lXVVNSIHwgU19JUlVHTywgcmVzKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXMtPnJlYWRfcHJvYyA9IHByb2NfYWxpZ25tZW50X3JlYWQ7CisJcmVzLT53cml0ZV9wcm9jID0gcHJvY19hbGlnbm1lbnRfd3JpdGU7CisjZW5kaWYKKworCWhvb2tfZmF1bHRfY29kZSgxLCBkb19hbGlnbm1lbnQsIFNJR0lMTCwgImFsaWdubWVudCBleGNlcHRpb24iKTsKKwlob29rX2ZhdWx0X2NvZGUoMywgZG9fYWxpZ25tZW50LCBTSUdJTEwsICJhbGlnbm1lbnQgZXhjZXB0aW9uIik7CisKKwlyZXR1cm4gMDsKK30KKworZnNfaW5pdGNhbGwoYWxpZ25tZW50X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vYmxvY2tvcHMuYyBiL2FyY2gvYXJtL21tL2Jsb2Nrb3BzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA2YzZlZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL2Jsb2Nrb3BzLmMKQEAgLTAsMCArMSwxODQgQEAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorCitleHRlcm4gc3RydWN0IGNwdV9jYWNoZV9mbnMgYmxrX2NhY2hlX2ZuczsKKworI2RlZmluZSBIQVJWQVJEX0NBQ0hFCisKKy8qCisgKglibGtfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZShrYWRkcikKKyAqCisgKglFbnN1cmUgdGhhdCB0aGUgZGF0YSBoZWxkIGluIHRoZSBwYWdlIGthZGRyIGlzIHdyaXR0ZW4gYmFjaworICoJdG8gdGhlIHBhZ2UgaW4gcXVlc3Rpb24uCisgKgorICoJLSBrYWRkciAgIC0ga2VybmVsIGFkZHJlc3MgKGd1YXJhbnRlZWQgdG8gYmUgcGFnZSBhbGlnbmVkKQorICovCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCitibGtfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICprYWRkcikKK3sKKwlhc20oCisJImFkZAlyMSwgcjAsICUwCQkJCQkJCVxuXAorMToJLndvcmQJMHhlYzQwMWYwZQlAIG1jcnIJcDE1LCAwLCByMCwgcjEsIGMxNCwgMAlAIGJsb2NraW5nCVxuXAorCW1vdglyMCwgIzAJCQkJCQkJCVxuXAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDAJCQkJCQlcblwKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJCQkJCVxuXAorCW1vdglwYywgbHIiCisJOgorCTogIkkiIChQQUdFX1NJWkUpKTsKK30KKworLyoKKyAqCWJsa19kbWFfaW52X3JhbmdlKHN0YXJ0LGVuZCkKKyAqCisgKglJbnZhbGlkYXRlIHRoZSBkYXRhIGNhY2hlIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHJlZ2lvbjsgd2Ugd2lsbAorICoJYmUgcGVyZm9ybWluZyBhIERNQSBvcGVyYXRpb24gaW4gdGhpcyByZWdpb24gYW5kIHdlIHdhbnQgdG8KKyAqCXB1cmdlIG9sZCBkYXRhIGluIHRoZSBjYWNoZS4KKyAqCisgKgktIHN0YXJ0ICAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3Mgb2YgcmVnaW9uCisgKgktIGVuZCAgICAgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzIG9mIHJlZ2lvbgorICovCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCitibGtfZG1hX2ludl9yYW5nZV91bmlmaWVkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWFzbSgKKwkidHN0CXIwLCAlMAkJCQkJCQkJXG5cCisJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxMSwgMQkJQCBjbGVhbiB1bmlmaWVkIGxpbmUJCVxuXAorCXRzdAlyMSwgJTAJCQkJCQkJCVxuXAorCW1jcm5lCXAxNSwgMCwgcjEsIGM3LCBjMTUsIDEJCUAgY2xlYW4gJiBpbnZhbGlkYXRlIHVuaWZpZWQgbGluZVxuXAorCS53b3JkCTB4ZWM0MDFmMDYJQCBtY3JyCXAxNSwgMCwgcjEsIHIwLCBjNiwgMAlAIGJsb2NraW5nCVxuXAorCW1vdglyMCwgIzAJCQkJCQkJCVxuXAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgkJXG5cCisJbW92CXBjLCBsciIKKwk6CisJOiAiSSIgKEwxX0NBQ0hFX0JZVEVTIC0gMSkpOworfQorCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCitibGtfZG1hX2ludl9yYW5nZV9oYXJ2YXJkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWFzbSgKKwkidHN0CXIwLCAlMAkJCQkJCQkJXG5cCisJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGxpbmUJCQlcblwKKwl0c3QJcjEsICUwCQkJCQkJCQlcblwKKwltY3JuZQlwMTUsIDAsIHIxLCBjNywgYzE0LCAxCQlAIGNsZWFuICYgaW52YWxpZGF0ZSBEIGxpbmUJXG5cCisJLndvcmQJMHhlYzQwMWYwNglAIG1jcnIJcDE1LCAwLCByMSwgcjAsIGM2LCAwCUAgYmxvY2tpbmcJXG5cCisJbW92CXIwLCAjMAkJCQkJCQkJXG5cCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCQlcblwKKwltb3YJcGMsIGxyIgorCToKKwk6ICJJIiAoTDFfQ0FDSEVfQllURVMgLSAxKSk7Cit9CisKKy8qCisgKglibGtfZG1hX2NsZWFuX3JhbmdlKHN0YXJ0LGVuZCkKKyAqCS0gc3RhcnQgICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcyBvZiByZWdpb24KKyAqCS0gZW5kICAgICAtIHZpcnR1YWwgZW5kIGFkZHJlc3Mgb2YgcmVnaW9uCisgKi8KK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKG5ha2VkKSkKK2Jsa19kbWFfY2xlYW5fcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJYXNtKAorCSIud29yZAkweGVjNDAxZjBjCUAgbWNycglwMTUsIDAsIHIxLCByMCwgYzEyLCAwCUAgYmxvY2tpbmcJXG5cCisJbW92CXIwLCAjMAkJCQkJCQkJXG5cCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCQlcblwKKwltb3YJcGMsIGxyIik7Cit9CisKKy8qCisgKglibGtfZG1hX2ZsdXNoX3JhbmdlKHN0YXJ0LGVuZCkKKyAqCS0gc3RhcnQgICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcyBvZiByZWdpb24KKyAqCS0gZW5kICAgICAtIHZpcnR1YWwgZW5kIGFkZHJlc3Mgb2YgcmVnaW9uCisgKi8KK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKG5ha2VkKSkKK2Jsa19kbWFfZmx1c2hfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJYXNtKAorCSIud29yZAkweGVjNDAxZjBlCUAgbWNycglwMTUsIDAsIHIxLCByMCwgYzE0LCAwCUAgYmxvY2tpbmcJXG5cCisJbW92CXBjLCBsciIpOworfQorCitzdGF0aWMgaW50IGJsb2Nrb3BzX3RyYXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBpbnN0cikKK3sKKwlyZWdzLT5BUk1fcjQgfD0gcmVncy0+QVJNX3IyOworCXJlZ3MtPkFSTV9wYyArPSA0OworCXJldHVybiAwOworfQorCitzdGF0aWMgY2hhciAqZnVuY1tdID0geworCSJQcmVmZXRjaCBkYXRhIHJhbmdlIiwKKwkiQ2xlYW4rSW52YWxpZGF0ZSBkYXRhIHJhbmdlIiwKKwkiQ2xlYW4gZGF0YSByYW5nZSIsCisJIkludmFsaWRhdGUgZGF0YSByYW5nZSIsCisJIkludmFsaWRhdGUgaW5zdHIgcmFuZ2UiCit9OworCitzdGF0aWMgc3RydWN0IHVuZGVmX2hvb2sgYmxvY2tvcHNfaG9vayBfX2luaXRkYXRhID0geworCS5pbnN0cl9tYXNrCT0gMHgwZmZmZmZkMCwKKwkuaW5zdHJfdmFsCT0gMHgwYzQwMWYwMCwKKwkuY3Bzcl9tYXNrCT0gUFNSX1RfQklULAorCS5jcHNyX3ZhbAk9IDAsCisJLmZuCQk9IGJsb2Nrb3BzX3RyYXAsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBibG9ja29wc19jaGVjayh2b2lkKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBlcnIgYXNtKCJyNCIpID0gMDsKKwl1bnNpZ25lZCBpbnQgZXJyX3BvcyA9IDE7CisJdW5zaWduZWQgaW50IGNhY2hlX3R5cGU7CisJaW50IGk7CisKKwlhc20oIm1yYyBwMTUsIDAsICUwLCBjMCwgYzAsIDEiIDogIj1yIiAoY2FjaGVfdHlwZSkpOworCisJcHJpbnRrKCJDaGVja2luZyBWNiBibG9jayBjYWNoZSBvcGVyYXRpb25zOlxuIik7CisJcmVnaXN0ZXJfdW5kZWZfaG9vaygmYmxvY2tvcHNfaG9vayk7CisKKwlfX2FzbV9fICgibW92CXIwLCAlMFxuXHQiCisJCSJtb3YJcjEsICUxXG5cdCIKKwkJIm1vdglyMiwgIzFcblx0IgorCQkiLndvcmQJMHhlYzQwMWYyYyBAIG1jcnIgcDE1LCAwLCByMSwgcjAsIGMxMiwgMlxuXHQiCisJCSJtb3YJcjIsICMyXG5cdCIKKwkJIi53b3JkCTB4ZWM0MDFmMGUgQCBtY3JyIHAxNSwgMCwgcjEsIHIwLCBjMTQsIDBcblx0IgorCQkibW92CXIyLCAjNFxuXHQiCisJCSIud29yZAkweGVjNDAxZjBjIEAgbWNyciBwMTUsIDAsIHIxLCByMCwgYzEyLCAwXG5cdCIKKwkJIm1vdglyMiwgIzhcblx0IgorCQkiLndvcmQJMHhlYzQwMWYwNiBAIG1jcnIgcDE1LCAwLCByMSwgcjAsIGM2LCAwXG5cdCIKKwkJIm1vdglyMiwgIzE2XG5cdCIKKwkJIi53b3JkCTB4ZWM0MDFmMDUgQCBtY3JyIHAxNSwgMCwgcjEsIHIwLCBjNSwgMFxuXHQiCisJCToKKwkJOiAiciIgKFBBR0VfT0ZGU0VUKSwgInIiIChQQUdFX09GRlNFVCArIDEyOCkKKwkJOiAicjAiLCAicjEiLCAicjIiKTsKKworCXVucmVnaXN0ZXJfdW5kZWZfaG9vaygmYmxvY2tvcHNfaG9vayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmdW5jKTsgaSsrLCBlcnJfcG9zIDw8PSAxKQorCQlwcmludGsoIiUzMHM6ICVzc3VwcG9ydGVkXG4iLCBmdW5jW2ldLCBlcnIgJiBlcnJfcG9zID8gIm5vdCAiIDogIiIpOworCisJaWYgKChlcnIgJiA4KSA9PSAwKSB7CisJCXByaW50aygiIC0tPiBVc2luZyAlcyBibG9jayBjYWNoZSBpbnZhbGlkYXRlXG4iLAorCQkJY2FjaGVfdHlwZSAmICgxIDw8IDI0KSA/ICJoYXJ2YXJkIiA6ICJ1bmlmaWVkIik7CisJCWlmIChjYWNoZV90eXBlICYgKDEgPDwgMjQpKQorCQkJY3B1X2NhY2hlLmRtYV9pbnZfcmFuZ2UgPSBibGtfZG1hX2ludl9yYW5nZV9oYXJ2YXJkOworCQllbHNlCisJCQljcHVfY2FjaGUuZG1hX2ludl9yYW5nZSA9IGJsa19kbWFfaW52X3JhbmdlX3VuaWZpZWQ7CisJfQorCWlmICgoZXJyICYgNCkgPT0gMCkgeworCQlwcmludGsoIiAtLT4gVXNpbmcgYmxvY2sgY2FjaGUgY2xlYW5cbiIpOworCQljcHVfY2FjaGUuZG1hX2NsZWFuX3JhbmdlICAgICAgICA9IGJsa19kbWFfY2xlYW5fcmFuZ2U7CisJfQorCWlmICgoZXJyICYgMikgPT0gMCkgeworCQlwcmludGsoIiAtLT4gVXNpbmcgYmxvY2sgY2FjaGUgY2xlYW4raW52YWxpZGF0ZVxuIik7CisJCWNwdV9jYWNoZS5kbWFfZmx1c2hfcmFuZ2UgICAgICAgID0gYmxrX2RtYV9mbHVzaF9yYW5nZTsKKwkJY3B1X2NhY2hlLmZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UgPSBibGtfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworX19pbml0Y2FsbChibG9ja29wc19jaGVjayk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS12My5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTk5NDc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjMuUwpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS9jYWNoZS12My5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIFJ1c3NlbGwga2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSAicHJvYy1tYWNyb3MuUyIKKworLyoKKyAqCWZsdXNoX3VzZXJfY2FjaGVfYWxsKCkKKyAqCisgKglJbnZhbGlkYXRlIGFsbCBjYWNoZSBlbnRyaWVzIGluIGEgcGFydGljdWxhciBhZGRyZXNzCisgKglzcGFjZS4KKyAqCisgKgktIG1tCS0gbW1fc3RydWN0IGRlc2NyaWJpbmcgYWRkcmVzcyBzcGFjZQorICovCitFTlRSWSh2M19mbHVzaF91c2VyX2NhY2hlX2FsbCkKKwkvKiBGQUxMVEhST1VHSCAqLworLyoKKyAqCWZsdXNoX2tlcm5fY2FjaGVfYWxsKCkKKyAqCisgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSB0aGUgZW50aXJlIGNhY2hlLgorICovCitFTlRSWSh2M19mbHVzaF9rZXJuX2NhY2hlX2FsbCkKKwkvKiBGQUxMVEhST1VHSCAqLworCisvKgorICoJZmx1c2hfdXNlcl9jYWNoZV9yYW5nZShzdGFydCwgZW5kLCBmbGFncykKKyAqCisgKglJbnZhbGlkYXRlIGEgcmFuZ2Ugb2YgY2FjaGUgZW50cmllcyBpbiB0aGUgc3BlY2lmaWVkCisgKglhZGRyZXNzIHNwYWNlLgorICoKKyAqCS0gc3RhcnQgLSBzdGFydCBhZGRyZXNzIChtYXkgbm90IGJlIGFsaWduZWQpCisgKgktIGVuZAktIGVuZCBhZGRyZXNzIChleGNsdXNpdmUsIG1heSBub3QgYmUgYWxpZ25lZCkKKyAqCS0gZmxhZ3MJLSB2bWFfYXJlYV9zdHJ1Y3QgZmxhZ3MgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCisgKi8KK0VOVFJZKHYzX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UpCisJbW92CWlwLCAjMAorCW1jcmVxCXAxNSwgMCwgaXAsIGM3LCBjMCwgMAkJQCBmbHVzaCBJRCBjYWNoZQorCW1vdglwYywgbHIKKworLyoKKyAqCWNvaGVyZW50X2tlcm5fcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglFbnN1cmUgY29oZXJlbmN5IGJldHdlZW4gdGhlIEljYWNoZSBhbmQgdGhlIERjYWNoZSBpbiB0aGUKKyAqCXJlZ2lvbiBkZXNjcmliZWQgYnkgc3RhcnQuICBJZiB5b3UgaGF2ZSBub24tc25vb3BpbmcKKyAqCUhhcnZhcmQgY2FjaGVzLCB5b3UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAqCisgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWSh2M19jb2hlcmVudF9rZXJuX3JhbmdlKQorCS8qIEZBTExUSFJPVUdIICovCisKKy8qCisgKgljb2hlcmVudF91c2VyX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJRW5zdXJlIGNvaGVyZW5jeSBiZXR3ZWVuIHRoZSBJY2FjaGUgYW5kIHRoZSBEY2FjaGUgaW4gdGhlCisgKglyZWdpb24gZGVzY3JpYmVkIGJ5IHN0YXJ0LiAgSWYgeW91IGhhdmUgbm9uLXNub29waW5nCisgKglIYXJ2YXJkIGNhY2hlcywgeW91IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgKgorICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkodjNfY29oZXJlbnRfdXNlcl9yYW5nZSkKKwltb3YJcGMsIGxyCisKKy8qCisgKglmbHVzaF9rZXJuX2RjYWNoZV9wYWdlKHZvaWQgKnBhZ2UpCisgKgorICoJRW5zdXJlIG5vIEQgY2FjaGUgYWxpYXNpbmcgb2NjdXJzLCBlaXRoZXIgd2l0aCBpdHNlbGYgb3IKKyAqCXRoZSBJIGNhY2hlCisgKgorICoJLSBhZGRyCS0gcGFnZSBhbGlnbmVkIGFkZHJlc3MKKyAqLworRU5UUlkodjNfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKKwkvKiBGQUxMVEhST1VHSCAqLworCisvKgorICoJZG1hX2ludl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUludmFsaWRhdGUgKGRpc2NhcmQpIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoJTWF5IG5vdCB3cml0ZSBiYWNrIGFueSBlbnRyaWVzLiAgSWYgJ3N0YXJ0JyBvciAnZW5kJworICoJYXJlIG5vdCBjYWNoZSBsaW5lIGFsaWduZWQsIHRob3NlIGxpbmVzIG11c3QgYmUgd3JpdHRlbgorICoJYmFjay4KKyAqCisgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWSh2M19kbWFfaW52X3JhbmdlKQorCS8qIEZBTExUSFJPVUdIICovCisKKy8qCisgKglkbWFfZmx1c2hfcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KKyAqCisgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWSh2M19kbWFfZmx1c2hfcmFuZ2UpCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzAsIDAJCUAgZmx1c2ggSUQgY2FjaGUKKwkvKiBGQUxMVEhST1VHSCAqLworCisvKgorICoJZG1hX2NsZWFuX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJQ2xlYW4gKHdyaXRlIGJhY2spIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoKKyAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKHYzX2RtYV9jbGVhbl9yYW5nZSkKKwltb3YJcGMsIGxyCisKKwlfX0lOSVREQVRBCisKKwkudHlwZQl2M19jYWNoZV9mbnMsICNvYmplY3QKK0VOVFJZKHYzX2NhY2hlX2ZucykKKwkubG9uZwl2M19mbHVzaF9rZXJuX2NhY2hlX2FsbAorCS5sb25nCXYzX2ZsdXNoX3VzZXJfY2FjaGVfYWxsCisJLmxvbmcJdjNfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQorCS5sb25nCXYzX2NvaGVyZW50X2tlcm5fcmFuZ2UKKwkubG9uZwl2M19jb2hlcmVudF91c2VyX3JhbmdlCisJLmxvbmcJdjNfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCXYzX2RtYV9pbnZfcmFuZ2UKKwkubG9uZwl2M19kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwl2M19kbWFfZmx1c2hfcmFuZ2UKKwkuc2l6ZQl2M19jYWNoZV9mbnMsIC4gLSB2M19jYWNoZV9mbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY0LlMgYi9hcmNoL2FybS9tbS9jYWNoZS12NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YWQ1ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9jYWNoZS12NC5TCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21tL2NhY2hlLXY0LlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgUnVzc2VsbCBraW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlICJwcm9jLW1hY3Jvcy5TIgorCisvKgorICoJZmx1c2hfdXNlcl9jYWNoZV9hbGwoKQorICoKKyAqCUludmFsaWRhdGUgYWxsIGNhY2hlIGVudHJpZXMgaW4gYSBwYXJ0aWN1bGFyIGFkZHJlc3MKKyAqCXNwYWNlLgorICoKKyAqCS0gbW0JLSBtbV9zdHJ1Y3QgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCisgKi8KK0VOVFJZKHY0X2ZsdXNoX3VzZXJfY2FjaGVfYWxsKQorCS8qIEZBTExUSFJPVUdIICovCisvKgorICoJZmx1c2hfa2Vybl9jYWNoZV9hbGwoKQorICoKKyAqCUNsZWFuIGFuZCBpbnZhbGlkYXRlIHRoZSBlbnRpcmUgY2FjaGUuCisgKi8KK0VOVFJZKHY0X2ZsdXNoX2tlcm5fY2FjaGVfYWxsKQorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM3LCAwCQlAIGZsdXNoIElEIGNhY2hlCisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfdXNlcl9jYWNoZV9yYW5nZShzdGFydCwgZW5kLCBmbGFncykKKyAqCisgKglJbnZhbGlkYXRlIGEgcmFuZ2Ugb2YgY2FjaGUgZW50cmllcyBpbiB0aGUgc3BlY2lmaWVkCisgKglhZGRyZXNzIHNwYWNlLgorICoKKyAqCS0gc3RhcnQgLSBzdGFydCBhZGRyZXNzIChtYXkgbm90IGJlIGFsaWduZWQpCisgKgktIGVuZAktIGVuZCBhZGRyZXNzIChleGNsdXNpdmUsIG1heSBub3QgYmUgYWxpZ25lZCkKKyAqCS0gZmxhZ3MJLSB2bWFfYXJlYV9zdHJ1Y3QgZmxhZ3MgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCisgKi8KK0VOVFJZKHY0X2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UpCisJbW92CWlwLCAjMAorCW1jcmVxCXAxNSwgMCwgaXAsIGM3LCBjNywgMAkJQCBmbHVzaCBJRCBjYWNoZQorCW1vdglwYywgbHIKKworLyoKKyAqCWNvaGVyZW50X2tlcm5fcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglFbnN1cmUgY29oZXJlbmN5IGJldHdlZW4gdGhlIEljYWNoZSBhbmQgdGhlIERjYWNoZSBpbiB0aGUKKyAqCXJlZ2lvbiBkZXNjcmliZWQgYnkgc3RhcnQuICBJZiB5b3UgaGF2ZSBub24tc25vb3BpbmcKKyAqCUhhcnZhcmQgY2FjaGVzLCB5b3UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAqCisgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWSh2NF9jb2hlcmVudF9rZXJuX3JhbmdlKQorCS8qIEZBTExUSFJPVUdIICovCisKKy8qCisgKgljb2hlcmVudF91c2VyX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJRW5zdXJlIGNvaGVyZW5jeSBiZXR3ZWVuIHRoZSBJY2FjaGUgYW5kIHRoZSBEY2FjaGUgaW4gdGhlCisgKglyZWdpb24gZGVzY3JpYmVkIGJ5IHN0YXJ0LiAgSWYgeW91IGhhdmUgbm9uLXNub29waW5nCisgKglIYXJ2YXJkIGNhY2hlcywgeW91IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgKgorICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkodjRfY29oZXJlbnRfdXNlcl9yYW5nZSkKKwltb3YJcGMsIGxyCisKKy8qCisgKglmbHVzaF9rZXJuX2RjYWNoZV9wYWdlKHZvaWQgKnBhZ2UpCisgKgorICoJRW5zdXJlIG5vIEQgY2FjaGUgYWxpYXNpbmcgb2NjdXJzLCBlaXRoZXIgd2l0aCBpdHNlbGYgb3IKKyAqCXRoZSBJIGNhY2hlCisgKgorICoJLSBhZGRyCS0gcGFnZSBhbGlnbmVkIGFkZHJlc3MKKyAqLworRU5UUlkodjRfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKKwkvKiBGQUxMVEhST1VHSCAqLworCisvKgorICoJZG1hX2ludl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUludmFsaWRhdGUgKGRpc2NhcmQpIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoJTWF5IG5vdCB3cml0ZSBiYWNrIGFueSBlbnRyaWVzLiAgSWYgJ3N0YXJ0JyBvciAnZW5kJworICoJYXJlIG5vdCBjYWNoZSBsaW5lIGFsaWduZWQsIHRob3NlIGxpbmVzIG11c3QgYmUgd3JpdHRlbgorICoJYmFjay4KKyAqCisgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWSh2NF9kbWFfaW52X3JhbmdlKQorCS8qIEZBTExUSFJPVUdIICovCisKKy8qCisgKglkbWFfZmx1c2hfcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KKyAqCisgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWSh2NF9kbWFfZmx1c2hfcmFuZ2UpCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzcsIDAJCUAgZmx1c2ggSUQgY2FjaGUKKwkvKiBGQUxMVEhST1VHSCAqLworCisvKgorICoJZG1hX2NsZWFuX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJQ2xlYW4gKHdyaXRlIGJhY2spIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoKKyAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKHY0X2RtYV9jbGVhbl9yYW5nZSkKKwltb3YJcGMsIGxyCisKKwlfX0lOSVREQVRBCisKKwkudHlwZQl2NF9jYWNoZV9mbnMsICNvYmplY3QKK0VOVFJZKHY0X2NhY2hlX2ZucykKKwkubG9uZwl2NF9mbHVzaF9rZXJuX2NhY2hlX2FsbAorCS5sb25nCXY0X2ZsdXNoX3VzZXJfY2FjaGVfYWxsCisJLmxvbmcJdjRfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQorCS5sb25nCXY0X2NvaGVyZW50X2tlcm5fcmFuZ2UKKwkubG9uZwl2NF9jb2hlcmVudF91c2VyX3JhbmdlCisJLmxvbmcJdjRfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCXY0X2RtYV9pbnZfcmFuZ2UKKwkubG9uZwl2NF9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwl2NF9kbWFfZmx1c2hfcmFuZ2UKKwkuc2l6ZQl2NF9jYWNoZV9mbnMsIC4gLSB2NF9jYWNoZV9mbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY0d2IuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXY0d2IuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzQwNTViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TCkBAIC0wLDAgKzEsMjE2IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21tL2NhY2hlLXY0d2IuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBSdXNzZWxsIGtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCisKKy8qCisgKiBUaGUgc2l6ZSBvZiBvbmUgZGF0YSBjYWNoZSBsaW5lLgorICovCisjZGVmaW5lIENBQ0hFX0RMSU5FU0laRQkzMgorCisvKgorICogVGhlIHRvdGFsIHNpemUgb2YgdGhlIGRhdGEgY2FjaGUuCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0ExMTApCisjIGRlZmluZSBDQUNIRV9EU0laRQkxNjM4NAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NBMTEwMCkKKyMgZGVmaW5lIENBQ0hFX0RTSVpFCTgxOTIKKyNlbHNlCisjIGVycm9yIFVua25vd24gY2FjaGUgc2l6ZQorI2VuZGlmCisKKy8qCisgKiBUaGlzIGlzIHRoZSBzaXplIGF0IHdoaWNoIGl0IGJlY29tZXMgbW9yZSBlZmZpY2llbnQgdG8KKyAqIGNsZWFuIHRoZSB3aG9sZSBjYWNoZSwgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIGluZGl2aWR1YWwKKyAqIGNhY2hlIGxpbmUgbWFpbnRhaW5lbmNlIGluc3RydWN0aW9ucy4KKyAqCisgKiAgU2l6ZSAgQ2xlYW4gKHRpY2tzKSBEaXJ0eSAodGlja3MpCisgKiAgIDQwOTYgICAyMSAgMjAgIDIxICAgIDUzICA1NSAgNTQKKyAqICAgODE5MiAgIDQwICA0MSAgNDAgICAxMDYgMTAwIDEwMgorICogIDE2Mzg0ICAgNzcgIDc3ICA3NiAgIDE0MCAxNDAgMTM4CisgKiAgMzI3NjggIDE1MCAxNDkgMTUwICAgMjE0IDIxNiAyMTIgPC0tLQorICogIDY1NTM2ICAyOTYgMjk3IDI5NiAgIDM1MSAzNTggMzYxCisgKiAxMzEwNzIgIDU5MSA1OTEgNTkxICAgNjU2IDY1NyA2NTEKKyAqICBXaG9sZSAgMTMyIDEzNiAxMzIgICAyMjEgMjE3IDIwNyA8LS0tCisgKi8KKyNkZWZpbmUgQ0FDSEVfRExJTUlUCShDQUNIRV9EU0laRSAqIDQpCisKKy8qCisgKglmbHVzaF91c2VyX2NhY2hlX2FsbCgpCisgKgorICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgYWxsIGNhY2hlIGVudHJpZXMgaW4gYSBwYXJ0aWN1bGFyIGFkZHJlc3MKKyAqCXNwYWNlLgorICovCitFTlRSWSh2NHdiX2ZsdXNoX3VzZXJfY2FjaGVfYWxsKQorCS8qIEZBTExUSFJPVUdIICovCisvKgorICoJZmx1c2hfa2Vybl9jYWNoZV9hbGwoKQorICoKKyAqCUNsZWFuIGFuZCBpbnZhbGlkYXRlIHRoZSBlbnRpcmUgY2FjaGUuCisgKi8KK0VOVFJZKHY0d2JfZmx1c2hfa2Vybl9jYWNoZV9hbGwpCisJbW92CWlwLCAjMAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCitfX2ZsdXNoX3dob2xlX2NhY2hlOgorCW1vdglyMCwgI0ZMVVNIX0JBU0UKKwlhZGQJcjEsIHIwLCAjQ0FDSEVfRFNJWkUKKzE6CWxkcglyMiwgW3IwXSwgIzMyCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgorCW1vdglwYywgbHIKKworLyoKKyAqCWZsdXNoX3VzZXJfY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCwgZmxhZ3MpCisgKgorICoJSW52YWxpZGF0ZSBhIHJhbmdlIG9mIGNhY2hlIGVudHJpZXMgaW4gdGhlIHNwZWNpZmllZAorICoJYWRkcmVzcyBzcGFjZS4KKyAqCisgKgktIHN0YXJ0IC0gc3RhcnQgYWRkcmVzcyAoaW5jbHVzaXZlLCBwYWdlIGFsaWduZWQpCisgKgktIGVuZAktIGVuZCBhZGRyZXNzIChleGNsdXNpdmUsIHBhZ2UgYWxpZ25lZCkKKyAqCS0gZmxhZ3MJLSB2bWFfYXJlYV9zdHJ1Y3QgZmxhZ3MgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCisgKi8KK0VOVFJZKHY0d2JfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZSkKKwlzdWIJcjMsIHIxLCByMAkJCUAgY2FsY3VsYXRlIHRvdGFsIHNpemUKKwl0c3QJcjIsICNWTV9FWEVDCQkJQCBleGVjdXRhYmxlIHJlZ2lvbj8KKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisKKwljbXAJcjMsICNDQUNIRV9ETElNSVQJCUAgdG90YWwgc2l6ZSA+PSBsaW1pdD8KKwliaHMJX19mbHVzaF93aG9sZV9jYWNoZQkJQCBmbHVzaCB3aG9sZSBEIGNhY2hlCisKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCQlAIGludmFsaWRhdGUgRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJdHN0CXIyLCAjVk1fRVhFQworCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoKKyAqCUVuc3VyZSBubyBEIGNhY2hlIGFsaWFzaW5nIG9jY3VycywgZWl0aGVyIHdpdGggaXRzZWxmIG9yCisgKgl0aGUgSSBjYWNoZQorICoKKyAqCS0gYWRkcgktIHBhZ2UgYWxpZ25lZCBhZGRyZXNzCisgKi8KK0VOVFJZKHY0d2JfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKKwlhZGQJcjEsIHIwLCAjUEFHRV9TWgorCS8qIGZhbGwgdGhyb3VnaCAqLworCisvKgorICoJY29oZXJlbnRfa2Vybl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUVuc3VyZSBjb2hlcmVuY3kgYmV0d2VlbiB0aGUgSWNhY2hlIGFuZCB0aGUgRGNhY2hlIGluIHRoZQorICoJcmVnaW9uIGRlc2NyaWJlZCBieSBzdGFydC4gIElmIHlvdSBoYXZlIG5vbi1zbm9vcGluZworICoJSGFydmFyZCBjYWNoZXMsIHlvdSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICoKKyAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKHY0d2JfY29oZXJlbnRfa2Vybl9yYW5nZSkKKwkvKiBmYWxsIHRocm91Z2ggKi8KKworLyoKKyAqCWNvaGVyZW50X3VzZXJfcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglFbnN1cmUgY29oZXJlbmN5IGJldHdlZW4gdGhlIEljYWNoZSBhbmQgdGhlIERjYWNoZSBpbiB0aGUKKyAqCXJlZ2lvbiBkZXNjcmliZWQgYnkgc3RhcnQuICBJZiB5b3UgaGF2ZSBub24tc25vb3BpbmcKKyAqCUhhcnZhcmQgY2FjaGVzLCB5b3UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAqCisgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWSh2NHdiX2NvaGVyZW50X3VzZXJfcmFuZ2UpCisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCQlAIGludmFsaWRhdGUgRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbW92CWlwLCAjMAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKworLyoKKyAqCWRtYV9pbnZfcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglJbnZhbGlkYXRlIChkaXNjYXJkKSB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KKyAqCU1heSBub3Qgd3JpdGUgYmFjayBhbnkgZW50cmllcy4gIElmICdzdGFydCcgb3IgJ2VuZCcKKyAqCWFyZSBub3QgY2FjaGUgbGluZSBhbGlnbmVkLCB0aG9zZSBsaW5lcyBtdXN0IGJlIHdyaXR0ZW4KKyAqCWJhY2suCisgKgorICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkodjR3Yl9kbWFfaW52X3JhbmdlKQorCXRzdAlyMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKwliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCXRzdAlyMSwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKwltY3JuZQlwMTUsIDAsIHIxLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJCUAgaW52YWxpZGF0ZSBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfY2xlYW5fcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglDbGVhbiAod3JpdGUgYmFjaykgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCisgKgorICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkodjR3Yl9kbWFfY2xlYW5fcmFuZ2UpCisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgorCW1vdglwYywgbHIKKworLyoKKyAqCWRtYV9mbHVzaF9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUNsZWFuIGFuZCBpbnZhbGlkYXRlIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoKKyAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKgorICoJVGhpcyBpcyBhY3R1YWxseSB0aGUgc2FtZSBhcyB2NHdiX2NvaGVyZW50X2tlcm5fcmFuZ2UoKQorICovCisJLmdsb2JsCXY0d2JfZG1hX2ZsdXNoX3JhbmdlCisJLnNldAl2NHdiX2RtYV9mbHVzaF9yYW5nZSwgdjR3Yl9jb2hlcmVudF9rZXJuX3JhbmdlCisKKwlfX0lOSVREQVRBCisKKwkudHlwZQl2NHdiX2NhY2hlX2ZucywgI29iamVjdAorRU5UUlkodjR3Yl9jYWNoZV9mbnMpCisJLmxvbmcJdjR3Yl9mbHVzaF9rZXJuX2NhY2hlX2FsbAorCS5sb25nCXY0d2JfZmx1c2hfdXNlcl9jYWNoZV9hbGwKKwkubG9uZwl2NHdiX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UKKwkubG9uZwl2NHdiX2NvaGVyZW50X2tlcm5fcmFuZ2UKKwkubG9uZwl2NHdiX2NvaGVyZW50X3VzZXJfcmFuZ2UKKwkubG9uZwl2NHdiX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKwkubG9uZwl2NHdiX2RtYV9pbnZfcmFuZ2UKKwkubG9uZwl2NHdiX2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCXY0d2JfZG1hX2ZsdXNoX3JhbmdlCisJLnNpemUJdjR3Yl9jYWNoZV9mbnMsIC4gLSB2NHdiX2NhY2hlX2ZucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjR3dC5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3dC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliY2FiZDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9jYWNoZS12NHd0LlMKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vY2FjaGUtdjR3dC5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIFJ1c3NlbGwga2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIEFSTXY0IHdyaXRlIHRocm91Z2ggY2FjaGUgb3BlcmF0aW9ucyBzdXBwb3J0LgorICoKKyAqICBXZSBhc3N1bWUgdGhhdCB0aGUgd3JpdGUgYnVmZmVyIGlzIG5vdCBlbmFibGVkLgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCisKKy8qCisgKiBUaGUgc2l6ZSBvZiBvbmUgZGF0YSBjYWNoZSBsaW5lLgorICovCisjZGVmaW5lIENBQ0hFX0RMSU5FU0laRQkzMgorCisvKgorICogVGhlIG51bWJlciBvZiBkYXRhIGNhY2hlIHNlZ21lbnRzLgorICovCisjZGVmaW5lIENBQ0hFX0RTRUdNRU5UUwk4CisKKy8qCisgKiBUaGUgbnVtYmVyIG9mIGxpbmVzIGluIGEgY2FjaGUgc2VnbWVudC4KKyAqLworI2RlZmluZSBDQUNIRV9ERU5UUklFUwk2NAorCisvKgorICogVGhpcyBpcyB0aGUgc2l6ZSBhdCB3aGljaCBpdCBiZWNvbWVzIG1vcmUgZWZmaWNpZW50IHRvCisgKiBjbGVhbiB0aGUgd2hvbGUgY2FjaGUsIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBpbmRpdmlkdWFsCisgKiBjYWNoZSBsaW5lIG1haW50YWluZW5jZSBpbnN0cnVjdGlvbnMuCisgKgorICogKioqIFRoaXMgbmVlZHMgYmVuY2htYXJraW5nCisgKi8KKyNkZWZpbmUgQ0FDSEVfRExJTUlUCTE2Mzg0CisKKy8qCisgKglmbHVzaF91c2VyX2NhY2hlX2FsbCgpCisgKgorICoJSW52YWxpZGF0ZSBhbGwgY2FjaGUgZW50cmllcyBpbiBhIHBhcnRpY3VsYXIgYWRkcmVzcworICoJc3BhY2UuCisgKi8KK0VOVFJZKHY0d3RfZmx1c2hfdXNlcl9jYWNoZV9hbGwpCisJLyogRkFMTFRIUk9VR0ggKi8KKy8qCisgKglmbHVzaF9rZXJuX2NhY2hlX2FsbCgpCisgKgorICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgdGhlIGVudGlyZSBjYWNoZS4KKyAqLworRU5UUlkodjR3dF9mbHVzaF9rZXJuX2NhY2hlX2FsbCkKKwltb3YJcjIsICNWTV9FWEVDCisJbW92CWlwLCAjMAorX19mbHVzaF93aG9sZV9jYWNoZToKKwl0c3QJcjIsICNWTV9FWEVDCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorCW1jcglwMTUsIDAsIGlwLCBjNywgYzYsIDAJCUAgaW52YWxpZGF0ZSBEIGNhY2hlCisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfdXNlcl9jYWNoZV9yYW5nZShzdGFydCwgZW5kLCBmbGFncykKKyAqCisgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSBhIHJhbmdlIG9mIGNhY2hlIGVudHJpZXMgaW4gdGhlIHNwZWNpZmllZAorICoJYWRkcmVzcyBzcGFjZS4KKyAqCisgKgktIHN0YXJ0IC0gc3RhcnQgYWRkcmVzcyAoaW5jbHVzaXZlLCBwYWdlIGFsaWduZWQpCisgKgktIGVuZAktIGVuZCBhZGRyZXNzIChleGNsdXNpdmUsIHBhZ2UgYWxpZ25lZCkKKyAqCS0gZmxhZ3MJLSB2bWFfYXJlYV9zdHJ1Y3QgZmxhZ3MgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCisgKi8KK0VOVFJZKHY0d3RfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZSkKKwlzdWIJcjMsIHIxLCByMAkJCUAgY2FsY3VsYXRlIHRvdGFsIHNpemUKKwljbXAJcjMsICNDQUNIRV9ETElNSVQKKwliaHMJX19mbHVzaF93aG9sZV9jYWNoZQorCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCQlAIGludmFsaWRhdGUgRCBlbnRyeQorCXRzdAlyMiwgI1ZNX0VYRUMKKwltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzUsIDEJCUAgaW52YWxpZGF0ZSBJIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltb3YJcGMsIGxyCisKKy8qCisgKgljb2hlcmVudF9rZXJuX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJRW5zdXJlIGNvaGVyZW5jeSBiZXR3ZWVuIHRoZSBJY2FjaGUgYW5kIHRoZSBEY2FjaGUgaW4gdGhlCisgKglyZWdpb24gZGVzY3JpYmVkIGJ5IHN0YXJ0LiAgSWYgeW91IGhhdmUgbm9uLXNub29waW5nCisgKglIYXJ2YXJkIGNhY2hlcywgeW91IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgKgorICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkodjR3dF9jb2hlcmVudF9rZXJuX3JhbmdlKQorCS8qIEZBTExUUkhPVUdIICovCisKKy8qCisgKgljb2hlcmVudF91c2VyX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJRW5zdXJlIGNvaGVyZW5jeSBiZXR3ZWVuIHRoZSBJY2FjaGUgYW5kIHRoZSBEY2FjaGUgaW4gdGhlCisgKglyZWdpb24gZGVzY3JpYmVkIGJ5IHN0YXJ0LiAgSWYgeW91IGhhdmUgbm9uLXNub29waW5nCisgKglIYXJ2YXJkIGNhY2hlcywgeW91IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgKgorICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkodjR3dF9jb2hlcmVudF91c2VyX3JhbmdlKQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoKKyAqCUVuc3VyZSBubyBEIGNhY2hlIGFsaWFzaW5nIG9jY3VycywgZWl0aGVyIHdpdGggaXRzZWxmIG9yCisgKgl0aGUgSSBjYWNoZQorICoKKyAqCS0gYWRkcgktIHBhZ2UgYWxpZ25lZCBhZGRyZXNzCisgKi8KK0VOVFJZKHY0d3RfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKKwltb3YJcjIsICMwCisJbWNyCXAxNSwgMCwgcjIsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKKwlhZGQJcjEsIHIwLCAjUEFHRV9TWgorCS8qIGZhbGx0aHJvdWdoICovCisKKy8qCisgKglkbWFfaW52X3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJSW52YWxpZGF0ZSAoZGlzY2FyZCkgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCisgKglNYXkgbm90IHdyaXRlIGJhY2sgYW55IGVudHJpZXMuICBJZiAnc3RhcnQnIG9yICdlbmQnCisgKglhcmUgbm90IGNhY2hlIGxpbmUgYWxpZ25lZCwgdGhvc2UgbGluZXMgbXVzdCBiZSB3cml0dGVuCisgKgliYWNrLgorICoKKyAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKHY0d3RfZG1hX2ludl9yYW5nZSkKKwliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNiwgMQkJQCBpbnZhbGlkYXRlIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCS8qIEZBTExUSFJPVUdIICovCisKKy8qCisgKglkbWFfY2xlYW5fcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglDbGVhbiB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KKyAqCisgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWSh2NHd0X2RtYV9jbGVhbl9yYW5nZSkKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfZmx1c2hfcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KKyAqCisgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCisJLmdsb2JsCXY0d3RfZG1hX2ZsdXNoX3JhbmdlCisJLmVxdQl2NHd0X2RtYV9mbHVzaF9yYW5nZSwgdjR3dF9kbWFfaW52X3JhbmdlCisKKwlfX0lOSVREQVRBCisKKwkudHlwZQl2NHd0X2NhY2hlX2ZucywgI29iamVjdAorRU5UUlkodjR3dF9jYWNoZV9mbnMpCisJLmxvbmcJdjR3dF9mbHVzaF9rZXJuX2NhY2hlX2FsbAorCS5sb25nCXY0d3RfZmx1c2hfdXNlcl9jYWNoZV9hbGwKKwkubG9uZwl2NHd0X2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UKKwkubG9uZwl2NHd0X2NvaGVyZW50X2tlcm5fcmFuZ2UKKwkubG9uZwl2NHd0X2NvaGVyZW50X3VzZXJfcmFuZ2UKKwkubG9uZwl2NHd0X2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKwkubG9uZwl2NHd0X2RtYV9pbnZfcmFuZ2UKKwkubG9uZwl2NHd0X2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCXY0d3RfZG1hX2ZsdXNoX3JhbmdlCisJLnNpemUJdjR3dF9jYWNoZV9mbnMsIC4gLSB2NHd0X2NhY2hlX2ZucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjYuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVjMTBhNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vY2FjaGUtdjYuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBpcyB0aGUgInNoZWxsIiBvZiB0aGUgQVJNdjYgcHJvY2Vzc29yIHN1cHBvcnQuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKworI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCisKKyNkZWZpbmUgSEFSVkFSRF9DQUNIRQorI2RlZmluZSBDQUNIRV9MSU5FX1NJWkUJCTMyCisjZGVmaW5lIERfQ0FDSEVfTElORV9TSVpFCTMyCisKKy8qCisgKgl2Nl9mbHVzaF9jYWNoZV9hbGwoKQorICoKKyAqCUZsdXNoIHRoZSBlbnRpcmUgY2FjaGUuCisgKgorICoJSXQgaXMgYXNzdW1lZCB0aGF0OgorICovCitFTlRSWSh2Nl9mbHVzaF9rZXJuX2NhY2hlX2FsbCkKKwltb3YJcjAsICMwCisjaWZkZWYgSEFSVkFSRF9DQUNIRQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAwCQlAIEQgY2FjaGUgY2xlYW4raW52YWxpZGF0ZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDAJCUAgSStCVEIgY2FjaGUgaW52YWxpZGF0ZQorI2Vsc2UKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxNSwgMAkJQCBDYWNoZSBjbGVhbitpbnZhbGlkYXRlCisjZW5kaWYKKwltb3YJcGMsIGxyCisKKy8qCisgKgl2Nl9mbHVzaF9jYWNoZV9hbGwoKQorICoKKyAqCUZsdXNoIGFsbCBUTEIgZW50cmllcyBpbiBhIHBhcnRpY3VsYXIgYWRkcmVzcyBzcGFjZQorICoKKyAqCS0gbW0gICAgLSBtbV9zdHJ1Y3QgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCisgKi8KK0VOVFJZKHY2X2ZsdXNoX3VzZXJfY2FjaGVfYWxsKQorCS8qRkFMTFRIUk9VR0gqLworCisvKgorICoJdjZfZmx1c2hfY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCwgZmxhZ3MpCisgKgorICoJRmx1c2ggYSByYW5nZSBvZiBUTEIgZW50cmllcyBpbiB0aGUgc3BlY2lmaWVkIGFkZHJlc3Mgc3BhY2UuCisgKgorICoJLSBzdGFydCAtIHN0YXJ0IGFkZHJlc3MgKG1heSBub3QgYmUgYWxpZ25lZCkKKyAqCS0gZW5kICAgLSBlbmQgYWRkcmVzcyAoZXhjbHVzaXZlLCBtYXkgbm90IGJlIGFsaWduZWQpCisgKgktIGZsYWdzCS0gdm1fYXJlYV9zdHJ1Y3QgZmxhZ3MgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCisgKgorICoJSXQgaXMgYXNzdW1lZCB0aGF0OgorICoJLSB3ZSBoYXZlIGEgVklQVCBjYWNoZS4KKyAqLworRU5UUlkodjZfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZSkKKwltb3YJcGMsIGxyCisKKy8qCisgKgl2Nl9jb2hlcmVudF9rZXJuX3JhbmdlKHN0YXJ0LGVuZCkKKyAqCisgKglFbnN1cmUgdGhhdCB0aGUgSSBhbmQgRCBjYWNoZXMgYXJlIGNvaGVyZW50IHdpdGhpbiBzcGVjaWZpZWQKKyAqCXJlZ2lvbi4gIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgd2hlbiBjb2RlIGhhcyBiZWVuIHdyaXR0ZW4gdG8KKyAqCWEgbWVtb3J5IHJlZ2lvbiwgYW5kIHdpbGwgYmUgZXhlY3V0ZWQuCisgKgorICoJLSBzdGFydCAgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzIG9mIHJlZ2lvbgorICoJLSBlbmQgICAgIC0gdmlydHVhbCBlbmQgYWRkcmVzcyBvZiByZWdpb24KKyAqCisgKglJdCBpcyBhc3N1bWVkIHRoYXQ6CisgKgktIHRoZSBJY2FjaGUgZG9lcyBub3QgcmVhZCBkYXRhIGZyb20gdGhlIHdyaXRlIGJ1ZmZlcgorICovCitFTlRSWSh2Nl9jb2hlcmVudF9rZXJuX3JhbmdlKQorCS8qIEZBTExUSFJPVUdIICovCisKKy8qCisgKgl2Nl9jb2hlcmVudF91c2VyX3JhbmdlKHN0YXJ0LGVuZCkKKyAqCisgKglFbnN1cmUgdGhhdCB0aGUgSSBhbmQgRCBjYWNoZXMgYXJlIGNvaGVyZW50IHdpdGhpbiBzcGVjaWZpZWQKKyAqCXJlZ2lvbi4gIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgd2hlbiBjb2RlIGhhcyBiZWVuIHdyaXR0ZW4gdG8KKyAqCWEgbWVtb3J5IHJlZ2lvbiwgYW5kIHdpbGwgYmUgZXhlY3V0ZWQuCisgKgorICoJLSBzdGFydCAgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzIG9mIHJlZ2lvbgorICoJLSBlbmQgICAgIC0gdmlydHVhbCBlbmQgYWRkcmVzcyBvZiByZWdpb24KKyAqCisgKglJdCBpcyBhc3N1bWVkIHRoYXQ6CisgKgktIHRoZSBJY2FjaGUgZG9lcyBub3QgcmVhZCBkYXRhIGZyb20gdGhlIHdyaXRlIGJ1ZmZlcgorICovCitFTlRSWSh2Nl9jb2hlcmVudF91c2VyX3JhbmdlKQorCWJpYwlyMCwgcjAsICNDQUNIRV9MSU5FX1NJWkUgLSAxCisxOgorI2lmZGVmIEhBUlZBUkRfQ0FDSEUKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGxpbmUKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBsaW5lCisjZW5kaWYKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCA3CQlAIGludmFsaWRhdGUgQlRCIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0xJTkVfU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKyNpZmRlZiBIQVJWQVJEX0NBQ0hFCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgorI2VuZGlmCisJbW92CXBjLCBscgorCisvKgorICoJdjZfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZShrYWRkcikKKyAqCisgKglFbnN1cmUgdGhhdCB0aGUgZGF0YSBoZWxkIGluIHRoZSBwYWdlIGthZGRyIGlzIHdyaXR0ZW4gYmFjaworICoJdG8gdGhlIHBhZ2UgaW4gcXVlc3Rpb24uCisgKgorICoJLSBrYWRkciAgIC0ga2VybmVsIGFkZHJlc3MgKGd1YXJhbnRlZWQgdG8gYmUgcGFnZSBhbGlnbmVkKQorICovCitFTlRSWSh2Nl9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQorCWFkZAlyMSwgcjAsICNQQUdFX1NaCisxOgorI2lmZGVmIEhBUlZBUkRfQ0FDSEUKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbiAmIGludmFsaWRhdGUgRCBsaW5lCisjZWxzZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzE1LCAxCQlAIGNsZWFuICYgaW52YWxpZGF0ZSB1bmlmaWVkIGxpbmUKKyNlbmRpZgkKKwlhZGQJcjAsIHIwLCAjRF9DQUNIRV9MSU5FX1NJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisjaWZkZWYgSEFSVkFSRF9DQUNIRQorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAorI2VuZGlmCisJbW92CXBjLCBscgorCisKKy8qCisgKgl2Nl9kbWFfaW52X3JhbmdlKHN0YXJ0LGVuZCkKKyAqCisgKglJbnZhbGlkYXRlIHRoZSBkYXRhIGNhY2hlIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHJlZ2lvbjsgd2Ugd2lsbAorICoJYmUgcGVyZm9ybWluZyBhIERNQSBvcGVyYXRpb24gaW4gdGhpcyByZWdpb24gYW5kIHdlIHdhbnQgdG8KKyAqCXB1cmdlIG9sZCBkYXRhIGluIHRoZSBjYWNoZS4KKyAqCisgKgktIHN0YXJ0ICAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3Mgb2YgcmVnaW9uCisgKgktIGVuZCAgICAgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzIG9mIHJlZ2lvbgorICovCitFTlRSWSh2Nl9kbWFfaW52X3JhbmdlKQorCXRzdAlyMCwgI0RfQ0FDSEVfTElORV9TSVpFIC0gMQorCWJpYwlyMCwgcjAsICNEX0NBQ0hFX0xJTkVfU0laRSAtIDEKKyNpZmRlZiBIQVJWQVJEX0NBQ0hFCisJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGxpbmUKKyNlbHNlCisJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxMSwgMQkJQCBjbGVhbiB1bmlmaWVkIGxpbmUKKyNlbmRpZgorCXRzdAlyMSwgI0RfQ0FDSEVfTElORV9TSVpFIC0gMQorCWJpYwlyMSwgcjEsICNEX0NBQ0hFX0xJTkVfU0laRSAtIDEKKyNpZmRlZiBIQVJWQVJEX0NBQ0hFCisJbWNybmUJcDE1LCAwLCByMSwgYzcsIGMxNCwgMQkJQCBjbGVhbiAmIGludmFsaWRhdGUgRCBsaW5lCisjZWxzZQorCW1jcm5lCXAxNSwgMCwgcjEsIGM3LCBjMTUsIDEJCUAgY2xlYW4gJiBpbnZhbGlkYXRlIHVuaWZpZWQgbGluZQorI2VuZGlmCisxOgorI2lmZGVmIEhBUlZBUkRfQ0FDSEUKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCQlAIGludmFsaWRhdGUgRCBsaW5lCisjZWxzZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzcsIDEJCUAgaW52YWxpZGF0ZSB1bmlmaWVkIGxpbmUKKyNlbmRpZgorCWFkZAlyMCwgcjAsICNEX0NBQ0hFX0xJTkVfU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCisJbW92CXBjLCBscgorCisvKgorICoJdjZfZG1hX2NsZWFuX3JhbmdlKHN0YXJ0LGVuZCkKKyAqCS0gc3RhcnQgICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcyBvZiByZWdpb24KKyAqCS0gZW5kICAgICAtIHZpcnR1YWwgZW5kIGFkZHJlc3Mgb2YgcmVnaW9uCisgKi8KK0VOVFJZKHY2X2RtYV9jbGVhbl9yYW5nZSkKKwliaWMJcjAsIHIwLCAjRF9DQUNIRV9MSU5FX1NJWkUgLSAxCisxOgorI2lmZGVmIEhBUlZBUkRfQ0FDSEUKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGxpbmUKKyNlbHNlCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTEsIDEJCUAgY2xlYW4gdW5pZmllZCBsaW5lCisjZW5kaWYKKwlhZGQJcjAsIHIwLCAjRF9DQUNIRV9MSU5FX1NJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgorCW1vdglwYywgbHIKKworLyoKKyAqCXY2X2RtYV9mbHVzaF9yYW5nZShzdGFydCxlbmQpCisgKgktIHN0YXJ0ICAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3Mgb2YgcmVnaW9uCisgKgktIGVuZCAgICAgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzIG9mIHJlZ2lvbgorICovCitFTlRSWSh2Nl9kbWFfZmx1c2hfcmFuZ2UpCisJYmljCXIwLCByMCwgI0RfQ0FDSEVfTElORV9TSVpFIC0gMQorMToKKyNpZmRlZiBIQVJWQVJEX0NBQ0hFCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gJiBpbnZhbGlkYXRlIEQgbGluZQorI2Vsc2UKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxNSwgMQkJQCBjbGVhbiAmIGludmFsaWRhdGUgbGluZQorI2VuZGlmCisJYWRkCXIwLCByMCwgI0RfQ0FDSEVfTElORV9TSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwltb3YJcGMsIGxyCisKKwlfX0lOSVREQVRBCisKKwkudHlwZQl2Nl9jYWNoZV9mbnMsICNvYmplY3QKK0VOVFJZKHY2X2NhY2hlX2ZucykKKwkubG9uZwl2Nl9mbHVzaF9rZXJuX2NhY2hlX2FsbAorCS5sb25nCXY2X2ZsdXNoX3VzZXJfY2FjaGVfYWxsCisJLmxvbmcJdjZfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQorCS5sb25nCXY2X2NvaGVyZW50X2tlcm5fcmFuZ2UKKwkubG9uZwl2Nl9jb2hlcmVudF91c2VyX3JhbmdlCisJLmxvbmcJdjZfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCXY2X2RtYV9pbnZfcmFuZ2UKKwkubG9uZwl2Nl9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwl2Nl9kbWFfZmx1c2hfcmFuZ2UKKwkuc2l6ZQl2Nl9jYWNoZV9mbnMsIC4gLSB2Nl9jYWNoZV9mbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvbnNpc3RlbnQuYyBiL2FyY2gvYXJtL21tL2NvbnNpc3RlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjM1NmNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vY29uc2lzdGVudC5jCkBAIC0wLDAgKzEsNDUxIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21tL2NvbnNpc3RlbnQuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBETUEgdW5jYWNoZWQgbWFwcGluZyBzdXBwb3J0LgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorCisjZGVmaW5lIENPTlNJU1RFTlRfQkFTRQkoMHhmZmMwMDAwMCkKKyNkZWZpbmUgQ09OU0lTVEVOVF9FTkQJKDB4ZmZlMDAwMDApCisjZGVmaW5lIENPTlNJU1RFTlRfT0ZGU0VUKHgpCSgoKHVuc2lnbmVkIGxvbmcpKHgpIC0gQ09OU0lTVEVOVF9CQVNFKSA+PiBQQUdFX1NISUZUKQorCisvKgorICogVGhpcyBpcyB0aGUgcGFnZSB0YWJsZSAoMk1CKSBjb3ZlcmluZyB1bmNhY2hlZCwgRE1BIGNvbnNpc3RlbnQgYWxsb2NhdGlvbnMKKyAqLworc3RhdGljIHB0ZV90ICpjb25zaXN0ZW50X3B0ZTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soY29uc2lzdGVudF9sb2NrKTsKKworLyoKKyAqIFZNIHJlZ2lvbiBoYW5kbGluZyBzdXBwb3J0LgorICoKKyAqIFRoaXMgc2hvdWxkIGJlY29tZSBzb21ldGhpbmcgZ2VuZXJpYywgaGFuZGxpbmcgVk0gcmVnaW9uIGFsbG9jYXRpb25zIGZvcgorICogdm1hbGxvYyBhbmQgc2ltaWxhciAoaW9yZW1hcCwgbW9kdWxlIHNwYWNlLCBldGMpLgorICoKKyAqIEkgZW52aXNhZ2Ugdm1hbGxvYygpJ3Mgc3VwcG9ydGluZyB2bV9zdHJ1Y3QgYmVjb21pbmc6CisgKgorICogIHN0cnVjdCB2bV9zdHJ1Y3QgeworICogICAgc3RydWN0IHZtX3JlZ2lvbglyZWdpb247CisgKiAgICB1bnNpZ25lZCBsb25nCWZsYWdzOworICogICAgc3RydWN0IHBhZ2UJKipwYWdlczsKKyAqICAgIHVuc2lnbmVkIGludAlucl9wYWdlczsKKyAqICAgIHVuc2lnbmVkIGxvbmcJcGh5c19hZGRyOworICogIH07CisgKgorICogZ2V0X3ZtX2FyZWEoKSB3b3VsZCB0aGVuIGNhbGwgdm1fcmVnaW9uX2FsbG9jIHdpdGggYW4gYXBwcm9wcmlhdGUKKyAqIHN0cnVjdCB2bV9yZWdpb24gaGVhZCAoZWcpOgorICoKKyAqICBzdHJ1Y3Qgdm1fcmVnaW9uIHZtYWxsb2NfaGVhZCA9IHsKKyAqCS52bV9saXN0CT0gTElTVF9IRUFEX0lOSVQodm1hbGxvY19oZWFkLnZtX2xpc3QpLAorICoJLnZtX3N0YXJ0CT0gVk1BTExPQ19TVEFSVCwKKyAqCS52bV9lbmQJCT0gVk1BTExPQ19FTkQsCisgKiAgfTsKKyAqCisgKiBIb3dldmVyLCB2bWFsbG9jX2hlYWQudm1fc3RhcnQgaXMgdmFyaWFibGUgKHR5cGljYWxseSwgaXQgaXMgZGVwZW5kZW50IG9uCisgKiB0aGUgYW1vdW50IG9mIFJBTSBmb3VuZCBhdCBib290IHRpbWUuKSAgSSB3b3VsZCBpbWFnaW5lIHRoYXQgZ2V0X3ZtX2FyZWEoKQorICogd291bGQgaGF2ZSB0byBpbml0aWFsaXNlIHRoaXMgZWFjaCB0aW1lIHByaW9yIHRvIGNhbGxpbmcgdm1fcmVnaW9uX2FsbG9jKCkuCisgKi8KK3N0cnVjdCB2bV9yZWdpb24geworCXN0cnVjdCBsaXN0X2hlYWQJdm1fbGlzdDsKKwl1bnNpZ25lZCBsb25nCQl2bV9zdGFydDsKKwl1bnNpZ25lZCBsb25nCQl2bV9lbmQ7CisJc3RydWN0IHBhZ2UJCSp2bV9wYWdlczsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fcmVnaW9uIGNvbnNpc3RlbnRfaGVhZCA9IHsKKwkudm1fbGlzdAk9IExJU1RfSEVBRF9JTklUKGNvbnNpc3RlbnRfaGVhZC52bV9saXN0KSwKKwkudm1fc3RhcnQJPSBDT05TSVNURU5UX0JBU0UsCisJLnZtX2VuZAkJPSBDT05TSVNURU5UX0VORCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fcmVnaW9uICoKK3ZtX3JlZ2lvbl9hbGxvYyhzdHJ1Y3Qgdm1fcmVnaW9uICpoZWFkLCBzaXplX3Qgc2l6ZSwgaW50IGdmcCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBoZWFkLT52bV9zdGFydCwgZW5kID0gaGVhZC0+dm1fZW5kIC0gc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB2bV9yZWdpb24gKmMsICpuZXc7CisKKwluZXcgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgdm1fcmVnaW9uKSwgZ2ZwKTsKKwlpZiAoIW5ldykKKwkJZ290byBvdXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29uc2lzdGVudF9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZoZWFkLT52bV9saXN0LCB2bV9saXN0KSB7CisJCWlmICgoYWRkciArIHNpemUpIDwgYWRkcikKKwkJCWdvdG8gbm9zcGM7CisJCWlmICgoYWRkciArIHNpemUpIDw9IGMtPnZtX3N0YXJ0KQorCQkJZ290byBmb3VuZDsKKwkJYWRkciA9IGMtPnZtX2VuZDsKKwkJaWYgKGFkZHIgPiBlbmQpCisJCQlnb3RvIG5vc3BjOworCX0KKworIGZvdW5kOgorCS8qCisJICogSW5zZXJ0IHRoaXMgZW50cnkgX2JlZm9yZV8gdGhlIG9uZSB3ZSBmb3VuZC4KKwkgKi8KKwlsaXN0X2FkZF90YWlsKCZuZXctPnZtX2xpc3QsICZjLT52bV9saXN0KTsKKwluZXctPnZtX3N0YXJ0ID0gYWRkcjsKKwluZXctPnZtX2VuZCA9IGFkZHIgKyBzaXplOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uc2lzdGVudF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIG5ldzsKKworIG5vc3BjOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbnNpc3RlbnRfbG9jaywgZmxhZ3MpOworCWtmcmVlKG5ldyk7Cisgb3V0OgorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHZtX3JlZ2lvbiAqdm1fcmVnaW9uX2ZpbmQoc3RydWN0IHZtX3JlZ2lvbiAqaGVhZCwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN0cnVjdCB2bV9yZWdpb24gKmM7CisJCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmaGVhZC0+dm1fbGlzdCwgdm1fbGlzdCkgeworCQlpZiAoYy0+dm1fc3RhcnQgPT0gYWRkcikKKwkJCWdvdG8gb3V0OworCX0KKwljID0gTlVMTDsKKyBvdXQ6CisJcmV0dXJuIGM7Cit9CisKKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisjZXJyb3IgQVJNIENvaGVyZW50IERNQSBhbGxvY2F0b3IgZG9lcyBub3QgKHlldCkgc3VwcG9ydCBodWdlIFRMQgorI2VuZGlmCisKK3N0YXRpYyB2b2lkICoKK19fZG1hX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmhhbmRsZSwgaW50IGdmcCwKKwkgICAgcGdwcm90X3QgcHJvdCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3Qgdm1fcmVnaW9uICpjOworCXVuc2lnbmVkIGxvbmcgb3JkZXI7CisJdTY0IG1hc2sgPSBJU0FfRE1BX1RIUkVTSE9MRCwgbGltaXQ7CisKKwlpZiAoIWNvbnNpc3RlbnRfcHRlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vdCBpbml0aWFsaXNlZFxuIiwgX19mdW5jX18pOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChkZXYpIHsKKwkJbWFzayA9IGRldi0+Y29oZXJlbnRfZG1hX21hc2s7CisKKwkJLyoKKwkJICogU2FuaXR5IGNoZWNrIHRoZSBETUEgbWFzayAtIGl0IG11c3QgYmUgbm9uLXplcm8sIGFuZAorCQkgKiBtdXN0IGJlIGFibGUgdG8gYmUgc2F0aXNmaWVkIGJ5IGEgRE1BIGFsbG9jYXRpb24uCisJCSAqLworCQlpZiAobWFzayA9PSAwKSB7CisJCQlkZXZfd2FybihkZXYsICJjb2hlcmVudCBETUEgbWFzayBpcyB1bnNldFxuIik7CisJCQlnb3RvIG5vX3BhZ2U7CisJCX0KKworCQlpZiAoKH5tYXNrKSAmIElTQV9ETUFfVEhSRVNIT0xEKSB7CisJCQlkZXZfd2FybihkZXYsICJjb2hlcmVudCBETUEgbWFzayAlI2xseCBpcyBzbWFsbGVyICIKKwkJCQkgInRoYW4gc3lzdGVtIEdGUF9ETUEgbWFzayAlI2xseFxuIiwKKwkJCQkgbWFzaywgKHVuc2lnbmVkIGxvbmcgbG9uZylJU0FfRE1BX1RIUkVTSE9MRCk7CisJCQlnb3RvIG5vX3BhZ2U7CisJCX0KKwl9CisKKwkvKgorCSAqIFNhbml0eSBjaGVjayB0aGUgYWxsb2NhdGlvbiBzaXplLgorCSAqLworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCWxpbWl0ID0gKG1hc2sgKyAxKSAmIH5tYXNrOworCWlmICgobGltaXQgJiYgc2l6ZSA+PSBsaW1pdCkgfHwKKwkgICAgc2l6ZSA+PSAoQ09OU0lTVEVOVF9FTkQgLSBDT05TSVNURU5UX0JBU0UpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNvaGVyZW50IGFsbG9jYXRpb24gdG9vIGJpZyAiCisJCSAgICAgICAiKHJlcXVlc3RlZCAlI3ggbWFzayAlI2xseClcbiIsIHNpemUsIG1hc2spOworCQlnb3RvIG5vX3BhZ2U7CisJfQorCisJb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CisKKwlpZiAobWFzayAhPSAweGZmZmZmZmZmKQorCQlnZnAgfD0gR0ZQX0RNQTsKKworCXBhZ2UgPSBhbGxvY19wYWdlcyhnZnAsIG9yZGVyKTsKKwlpZiAoIXBhZ2UpCisJCWdvdG8gbm9fcGFnZTsKKworCS8qCisJICogSW52YWxpZGF0ZSBhbnkgZGF0YSB0aGF0IG1pZ2h0IGJlIGx1cmtpbmcgaW4gdGhlCisJICoga2VybmVsIGRpcmVjdC1tYXBwZWQgcmVnaW9uIGZvciBkZXZpY2UgRE1BLgorCSAqLworCXsKKwkJdW5zaWduZWQgbG9uZyBrYWRkciA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKTsKKwkJbWVtc2V0KHBhZ2VfYWRkcmVzcyhwYWdlKSwgMCwgc2l6ZSk7CisJCWRtYWNfZmx1c2hfcmFuZ2Uoa2FkZHIsIGthZGRyICsgc2l6ZSk7CisJfQorCisJLyoKKwkgKiBBbGxvY2F0ZSBhIHZpcnR1YWwgYWRkcmVzcyBpbiB0aGUgY29uc2lzdGVudCBtYXBwaW5nIHJlZ2lvbi4KKwkgKi8KKwljID0gdm1fcmVnaW9uX2FsbG9jKCZjb25zaXN0ZW50X2hlYWQsIHNpemUsCisJCQkgICAgZ2ZwICYgfihfX0dGUF9ETUEgfCBfX0dGUF9ISUdITUVNKSk7CisJaWYgKGMpIHsKKwkJcHRlX3QgKnB0ZSA9IGNvbnNpc3RlbnRfcHRlICsgQ09OU0lTVEVOVF9PRkZTRVQoYy0+dm1fc3RhcnQpOworCQlzdHJ1Y3QgcGFnZSAqZW5kID0gcGFnZSArICgxIDw8IG9yZGVyKTsKKworCQljLT52bV9wYWdlcyA9IHBhZ2U7CisKKwkJLyoKKwkJICogU2V0IHRoZSAiZG1hIGhhbmRsZSIKKwkJICovCisJCSpoYW5kbGUgPSBwYWdlX3RvX2RtYShkZXYsIHBhZ2UpOworCisJCWRvIHsKKwkJCUJVR19PTighcHRlX25vbmUoKnB0ZSkpOworCisJCQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKKwkJCS8qCisJCQkgKiB4ODYgZG9lcyBub3QgbWFyayB0aGUgcGFnZXMgcmVzZXJ2ZWQuLi4KKwkJCSAqLworCQkJU2V0UGFnZVJlc2VydmVkKHBhZ2UpOworCQkJc2V0X3B0ZShwdGUsIG1rX3B0ZShwYWdlLCBwcm90KSk7CisJCQlwYWdlKys7CisJCQlwdGUrKzsKKwkJfSB3aGlsZSAoc2l6ZSAtPSBQQUdFX1NJWkUpOworCisJCS8qCisJCSAqIEZyZWUgdGhlIG90aGVyd2lzZSB1bnVzZWQgcGFnZXMuCisJCSAqLworCQl3aGlsZSAocGFnZSA8IGVuZCkgeworCQkJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CisJCQlfX2ZyZWVfcGFnZShwYWdlKTsKKwkJCXBhZ2UrKzsKKwkJfQorCisJCXJldHVybiAodm9pZCAqKWMtPnZtX3N0YXJ0OworCX0KKworCWlmIChwYWdlKQorCQlfX2ZyZWVfcGFnZXMocGFnZSwgb3JkZXIpOworIG5vX3BhZ2U6CisJKmhhbmRsZSA9IH4wOworCXJldHVybiBOVUxMOworfQorCisvKgorICogQWxsb2NhdGUgRE1BLWNvaGVyZW50IG1lbW9yeSBzcGFjZSBhbmQgcmV0dXJuIGJvdGggdGhlIGtlcm5lbCByZW1hcHBlZAorICogdmlydHVhbCBhbmQgYnVzIGFkZHJlc3MgZm9yIHRoYXQgc3BhY2UuCisgKi8KK3ZvaWQgKgorZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmhhbmRsZSwgaW50IGdmcCkKK3sKKwlyZXR1cm4gX19kbWFfYWxsb2MoZGV2LCBzaXplLCBoYW5kbGUsIGdmcCwKKwkJCSAgIHBncHJvdF9ub25jYWNoZWQocGdwcm90X2tlcm5lbCkpOworfQorRVhQT1JUX1NZTUJPTChkbWFfYWxsb2NfY29oZXJlbnQpOworCisvKgorICogQWxsb2NhdGUgYSB3cml0ZWNvbWJpbmluZyByZWdpb24sIGluIG11Y2ggdGhlIHNhbWUgd2F5IGFzCisgKiBkbWFfYWxsb2NfY29oZXJlbnQgYWJvdmUuCisgKi8KK3ZvaWQgKgorZG1hX2FsbG9jX3dyaXRlY29tYmluZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpoYW5kbGUsIGludCBnZnApCit7CisJcmV0dXJuIF9fZG1hX2FsbG9jKGRldiwgc2l6ZSwgaGFuZGxlLCBnZnAsCisJCQkgICBwZ3Byb3Rfd3JpdGVjb21iaW5lKHBncHJvdF9rZXJuZWwpKTsKK30KK0VYUE9SVF9TWU1CT0woZG1hX2FsbG9jX3dyaXRlY29tYmluZSk7CisKK3N0YXRpYyBpbnQgZG1hX21tYXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJICAgIHZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCB1c2VyX3NpemUsIGtlcm5fc2l6ZTsKKwlzdHJ1Y3Qgdm1fcmVnaW9uICpjOworCWludCByZXQgPSAtRU5YSU87CisKKwl1c2VyX3NpemUgPSAodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbnNpc3RlbnRfbG9jaywgZmxhZ3MpOworCWMgPSB2bV9yZWdpb25fZmluZCgmY29uc2lzdGVudF9oZWFkLCAodW5zaWduZWQgbG9uZyljcHVfYWRkcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uc2lzdGVudF9sb2NrLCBmbGFncyk7CisKKwlpZiAoYykgeworCQl1bnNpZ25lZCBsb25nIG9mZiA9IHZtYS0+dm1fcGdvZmY7CisKKwkJa2Vybl9zaXplID0gKGMtPnZtX2VuZCAtIGMtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUOworCisJCWlmIChvZmYgPCBrZXJuX3NpemUgJiYKKwkJICAgIHVzZXJfc2l6ZSA8PSAoa2Vybl9zaXplIC0gb2ZmKSkgeworCQkJdm1hLT52bV9mbGFncyB8PSBWTV9SRVNFUlZFRDsKKwkJCXJldCA9IHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsCisJCQkJCSAgICAgIHBhZ2VfdG9fcGZuKGMtPnZtX3BhZ2VzKSArIG9mZiwKKwkJCQkJICAgICAgdXNlcl9zaXplIDw8IFBBR0VfU0hJRlQsCisJCQkJCSAgICAgIHZtYS0+dm1fcGFnZV9wcm90KTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludCBkbWFfbW1hcF9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkgICAgICB2b2lkICpjcHVfYWRkciwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUpCit7CisJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS0+dm1fcGFnZV9wcm90KTsKKwlyZXR1cm4gZG1hX21tYXAoZGV2LCB2bWEsIGNwdV9hZGRyLCBkbWFfYWRkciwgc2l6ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRtYV9tbWFwX2NvaGVyZW50KTsKKworaW50IGRtYV9tbWFwX3dyaXRlY29tYmluZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJICB2b2lkICpjcHVfYWRkciwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUpCit7CisJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYS0+dm1fcGFnZV9wcm90KTsKKwlyZXR1cm4gZG1hX21tYXAoZGV2LCB2bWEsIGNwdV9hZGRyLCBkbWFfYWRkciwgc2l6ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRtYV9tbWFwX3dyaXRlY29tYmluZSk7CisKKy8qCisgKiBmcmVlIGEgcGFnZSBhcyBkZWZpbmVkIGJ5IHRoZSBhYm92ZSBtYXBwaW5nLgorICovCit2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGhhbmRsZSkKK3sKKwlzdHJ1Y3Qgdm1fcmVnaW9uICpjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGFkZHI7CisJcHRlX3QgKnB0ZXA7CisKKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjb25zaXN0ZW50X2xvY2ssIGZsYWdzKTsKKworCWMgPSB2bV9yZWdpb25fZmluZCgmY29uc2lzdGVudF9oZWFkLCAodW5zaWduZWQgbG9uZyljcHVfYWRkcik7CisJaWYgKCFjKQorCQlnb3RvIG5vX2FyZWE7CisKKwlpZiAoKGMtPnZtX2VuZCAtIGMtPnZtX3N0YXJ0KSAhPSBzaXplKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZyZWVpbmcgd3JvbmcgY29oZXJlbnQgc2l6ZSAoJWxkICE9ICVkKVxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBjLT52bV9lbmQgLSBjLT52bV9zdGFydCwgc2l6ZSk7CisJCWR1bXBfc3RhY2soKTsKKwkJc2l6ZSA9IGMtPnZtX2VuZCAtIGMtPnZtX3N0YXJ0OworCX0KKworCXB0ZXAgPSBjb25zaXN0ZW50X3B0ZSArIENPTlNJU1RFTlRfT0ZGU0VUKGMtPnZtX3N0YXJ0KTsKKwlhZGRyID0gYy0+dm1fc3RhcnQ7CisJZG8geworCQlwdGVfdCBwdGUgPSBwdGVwX2dldF9hbmRfY2xlYXIoJmluaXRfbW0sIGFkZHIsIHB0ZXApOworCQl1bnNpZ25lZCBsb25nIHBmbjsKKworCQlwdGVwKys7CisJCWFkZHIgKz0gUEFHRV9TSVpFOworCisJCWlmICghcHRlX25vbmUocHRlKSAmJiBwdGVfcHJlc2VudChwdGUpKSB7CisJCQlwZm4gPSBwdGVfcGZuKHB0ZSk7CisKKwkJCWlmIChwZm5fdmFsaWQocGZuKSkgeworCQkJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKKworCQkJCS8qCisJCQkJICogeDg2IGRvZXMgbm90IG1hcmsgdGhlIHBhZ2VzIHJlc2VydmVkLi4uCisJCQkJICovCisJCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQocGFnZSk7CisKKwkJCQlfX2ZyZWVfcGFnZShwYWdlKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCXByaW50ayhLRVJOX0NSSVQgIiVzOiBiYWQgcGFnZSBpbiBrZXJuZWwgcGFnZSB0YWJsZVxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwl9IHdoaWxlIChzaXplIC09IFBBR0VfU0laRSk7CisKKwlmbHVzaF90bGJfa2VybmVsX3JhbmdlKGMtPnZtX3N0YXJ0LCBjLT52bV9lbmQpOworCisJbGlzdF9kZWwoJmMtPnZtX2xpc3QpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uc2lzdGVudF9sb2NrLCBmbGFncyk7CisKKwlrZnJlZShjKTsKKwlyZXR1cm47CisKKyBub19hcmVhOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbnNpc3RlbnRfbG9jaywgZmxhZ3MpOworCXByaW50ayhLRVJOX0VSUiAiJXM6IHRyeWluZyB0byBmcmVlIGludmFsaWQgY29oZXJlbnQgYXJlYTogJXBcbiIsCisJICAgICAgIF9fZnVuY19fLCBjcHVfYWRkcik7CisJZHVtcF9zdGFjaygpOworfQorRVhQT1JUX1NZTUJPTChkbWFfZnJlZV9jb2hlcmVudCk7CisKKy8qCisgKiBJbml0aWFsaXNlIHRoZSBjb25zaXN0ZW50IG1lbW9yeSBhbGxvY2F0aW9uLgorICovCitzdGF0aWMgaW50IF9faW5pdCBjb25zaXN0ZW50X2luaXQodm9pZCkKK3sKKwlwZ2RfdCAqcGdkOworCXBtZF90ICpwbWQ7CisJcHRlX3QgKnB0ZTsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9jaygmaW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spOworCisJZG8geworCQlwZ2QgPSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBDT05TSVNURU5UX0JBU0UpOworCQlwbWQgPSBwbWRfYWxsb2MoJmluaXRfbW0sIHBnZCwgQ09OU0lTVEVOVF9CQVNFKTsKKwkJaWYgKCFwbWQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIHBtZCB0YWJsZXNcbiIsIF9fZnVuY19fKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQorCQlXQVJOX09OKCFwbWRfbm9uZSgqcG1kKSk7CisKKwkJcHRlID0gcHRlX2FsbG9jX2tlcm5lbCgmaW5pdF9tbSwgcG1kLCBDT05TSVNURU5UX0JBU0UpOworCQlpZiAoIXB0ZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gcHRlIHRhYmxlc1xuIiwgX19mdW5jX18pOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisKKwkJY29uc2lzdGVudF9wdGUgPSBwdGU7CisJfSB3aGlsZSAoMCk7CisKKwlzcGluX3VubG9jaygmaW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworY29yZV9pbml0Y2FsbChjb25zaXN0ZW50X2luaXQpOworCisvKgorICogTWFrZSBhbiBhcmVhIGNvbnNpc3RlbnQgZm9yIGRldmljZXMuCisgKi8KK3ZvaWQgY29uc2lzdGVudF9zeW5jKHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpdmFkZHI7CisJdW5zaWduZWQgbG9uZyBlbmQgICA9IHN0YXJ0ICsgc2l6ZTsKKworCXN3aXRjaCAoZGlyZWN0aW9uKSB7CisJY2FzZSBETUFfRlJPTV9ERVZJQ0U6CQkvKiBpbnZhbGlkYXRlIG9ubHkgKi8KKwkJZG1hY19pbnZfcmFuZ2Uoc3RhcnQsIGVuZCk7CisJCWJyZWFrOworCWNhc2UgRE1BX1RPX0RFVklDRToJCS8qIHdyaXRlYmFjayBvbmx5ICovCisJCWRtYWNfY2xlYW5fcmFuZ2Uoc3RhcnQsIGVuZCk7CisJCWJyZWFrOworCWNhc2UgRE1BX0JJRElSRUNUSU9OQUw6CQkvKiB3cml0ZWJhY2sgYW5kIGludmFsaWRhdGUgKi8KKwkJZG1hY19mbHVzaF9yYW5nZShzdGFydCwgZW5kKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorRVhQT1JUX1NZTUJPTChjb25zaXN0ZW50X3N5bmMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjMuUyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXYzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk0MGYxOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXYzLlMKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9saWIvY29weXBhZ2UuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBBU00gb3B0aW1pc2VkIHN0cmluZyBmdW5jdGlvbnMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS9jb25zdGFudHMuaD4KKworCQkudGV4dAorCQkuYWxpZ24JNQorLyoKKyAqIEFSTXYzIG9wdGltaXNlZCBjb3B5X3VzZXJfcGFnZQorICoKKyAqIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIGhhbmRsZSBjYWNoZSBzdHVmZi4uLgorICovCitFTlRSWSh2M19jb3B5X3VzZXJfcGFnZSkKKwlzdG1mZAlzcCEsIHtyNCwgbHJ9CQkJQAkyCisJbW92CXIyLCAjUEFHRV9TWi82NAkJCUAJMQorCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQAk0KzEKKzE6CXN0bWlhCXIwISwge3IzLCByNCwgaXAsIGxyfQkJQAk0CisJbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQrMQorCXN0bWlhCXIwISwge3IzLCByNCwgaXAsIGxyfQkJQAk0CisJbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQrMQorCXN0bWlhCXIwISwge3IzLCByNCwgaXAsIGxyfQkJQAk0CisJbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQKKwlzdWJzCXIyLCByMiwgIzEJCQlACTEKKwlzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAJNAorCWxkbW5laWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQKKwlibmUJMWIJCQkJQAkxCisJTE9BRFJFR1MoZmQsIHNwISwge3I0LCBwY30pCQlACTMKKworCS5hbGlnbgk1CisvKgorICogQVJNdjMgb3B0aW1pc2VkIGNsZWFyX3VzZXJfcGFnZQorICoKKyAqIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIGhhbmRsZSBjYWNoZSBzdHVmZi4uLgorICovCitFTlRSWSh2M19jbGVhcl91c2VyX3BhZ2UpCisJc3RyCWxyLCBbc3AsICMtNF0hCisJbW92CXIxLCAjUEFHRV9TWi82NAkJCUAgMQorCW1vdglyMiwgIzAJCQkJQCAxCisJbW92CXIzLCAjMAkJCQlAIDEKKwltb3YJaXAsICMwCQkJCUAgMQorCW1vdglsciwgIzAJCQkJQCAxCisxOglzdG1pYQlyMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNAorCXN0bWlhCXIwISwge3IyLCByMywgaXAsIGxyfQkJQCA0CisJc3RtaWEJcjAhLCB7cjIsIHIzLCBpcCwgbHJ9CQlAIDQKKwlzdG1pYQlyMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNAorCXN1YnMJcjEsIHIxLCAjMQkJCUAgMQorCWJuZQkxYgkJCQlAIDEKKwlsZHIJcGMsIFtzcF0sICM0CisKKwlfX0lOSVREQVRBCisKKwkudHlwZQl2M191c2VyX2ZucywgI29iamVjdAorRU5UUlkodjNfdXNlcl9mbnMpCisJLmxvbmcJdjNfY2xlYXJfdXNlcl9wYWdlCisJLmxvbmcJdjNfY29weV91c2VyX3BhZ2UKKwkuc2l6ZQl2M191c2VyX2ZucywgLiAtIHYzX3VzZXJfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12NG1jLlMgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12NG1jLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1YWYzZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0bWMuUwpAQCAtMCwwICsxLDgwIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2xpYi9jb3B5X3BhZ2UtYXJtdjRtYy5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NS0yMDAxIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIEFTTSBvcHRpbWlzZWQgc3RyaW5nIGZ1bmN0aW9ucworICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vY29uc3RhbnRzLmg+CisKKwkudGV4dAorCS5hbGlnbgk1CisvKgorICogQVJNdjQgbWluaS1kY2FjaGUgb3B0aW1pc2VkIGNvcHlfdXNlcl9wYWdlCisgKgorICogV2UgZmx1c2ggdGhlIGRlc3RpbmF0aW9uIGNhY2hlIGxpbmVzIGp1c3QgYmVmb3JlIHdlIHdyaXRlIHRoZSBkYXRhIGludG8gdGhlCisgKiBjb3JyZXNwb25kaW5nIGFkZHJlc3MuICBTaW5jZSB0aGUgRGNhY2hlIGlzIHJlYWQtYWxsb2NhdGUsIHRoaXMgcmVtb3ZlcyB0aGUKKyAqIERjYWNoZSBhbGlhc2luZyBpc3N1ZS4gIFRoZSB3cml0ZXMgd2lsbCBiZSBmb3J3YXJkZWQgdG8gdGhlIHdyaXRlIGJ1ZmZlciwKKyAqIGFuZCBtZXJnZWQgYXMgYXBwcm9wcmlhdGUuCisgKgorICogTm90ZTogV2UgcmVseSBvbiBhbGwgQVJNdjQgcHJvY2Vzc29ycyBpbXBsZW1lbnRpbmcgdGhlICJpbnZhbGlkYXRlIEQgbGluZSIKKyAqIGluc3RydWN0aW9uLiAgSWYgeW91ciBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcGx5IHRoaXMsIHlvdSBoYXZlIHRvIHdyaXRlIHlvdXIKKyAqIG93biBjb3B5X3VzZXJfcGFnZSB0aGF0IGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgorICovCitFTlRSWSh2NF9tY19jb3B5X3VzZXJfcGFnZSkKKwlzdG1mZAlzcCEsIHtyNCwgbHJ9CQkJQCAyCisJbW92CXI0LCByMAorCW1vdglyMCwgcjEKKwlibAltYXBfcGFnZV9taW5pY2FjaGUKKwltb3YJcjEsICNQQUdFX1NaLzY0CQkJQCAxCisJbGRtaWEJcjAhLCB7cjIsIHIzLCBpcCwgbHJ9CQlAIDQKKzE6CW1jcglwMTUsIDAsIHI0LCBjNywgYzYsIDEJCUAgMSAgIGludmFsaWRhdGUgRCBsaW5lCisJc3RtaWEJcjQhLCB7cjIsIHIzLCBpcCwgbHJ9CQlAIDQKKwlsZG1pYQlyMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNCsxCisJc3RtaWEJcjQhLCB7cjIsIHIzLCBpcCwgbHJ9CQlAIDQKKwlsZG1pYQlyMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNAorCW1jcglwMTUsIDAsIHI0LCBjNywgYzYsIDEJCUAgMSAgIGludmFsaWRhdGUgRCBsaW5lCisJc3RtaWEJcjQhLCB7cjIsIHIzLCBpcCwgbHJ9CQlAIDQKKwlsZG1pYQlyMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNAorCXN1YnMJcjEsIHIxLCAjMQkJCUAgMQorCXN0bWlhCXI0ISwge3IyLCByMywgaXAsIGxyfQkJQCA0CisJbGRtbmVpYQlyMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNAorCWJuZQkxYgkJCQlAIDEKKwlsZG1mZAlzcCEsIHtyNCwgcGN9CQkJQCAzCisKKwkuYWxpZ24JNQorLyoKKyAqIEFSTXY0IG9wdGltaXNlZCBjbGVhcl91c2VyX3BhZ2UKKyAqCisgKiBTYW1lIHN0b3J5IGFzIGFib3ZlLgorICovCitFTlRSWSh2NF9tY19jbGVhcl91c2VyX3BhZ2UpCisJc3RyCWxyLCBbc3AsICMtNF0hCisJbW92CXIxLCAjUEFHRV9TWi82NAkJCUAgMQorCW1vdglyMiwgIzAJCQkJQCAxCisJbW92CXIzLCAjMAkJCQlAIDEKKwltb3YJaXAsICMwCQkJCUAgMQorCW1vdglsciwgIzAJCQkJQCAxCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCQlAIDEgICBpbnZhbGlkYXRlIEQgbGluZQorCXN0bWlhCXIwISwge3IyLCByMywgaXAsIGxyfQkJQCA0CisJc3RtaWEJcjAhLCB7cjIsIHIzLCBpcCwgbHJ9CQlAIDQKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCQlAIDEgICBpbnZhbGlkYXRlIEQgbGluZQorCXN0bWlhCXIwISwge3IyLCByMywgaXAsIGxyfQkJQCA0CisJc3RtaWEJcjAhLCB7cjIsIHIzLCBpcCwgbHJ9CQlAIDQKKwlzdWJzCXIxLCByMSwgIzEJCQlAIDEKKwlibmUJMWIJCQkJQCAxCisJbGRyCXBjLCBbc3BdLCAjNAorCisJX19JTklUREFUQQorCisJLnR5cGUJdjRfbWNfdXNlcl9mbnMsICNvYmplY3QKK0VOVFJZKHY0X21jX3VzZXJfZm5zKQorCS5sb25nCXY0X21jX2NsZWFyX3VzZXJfcGFnZQorCS5sb25nCXY0X21jX2NvcHlfdXNlcl9wYWdlCisJLnNpemUJdjRfbWNfdXNlcl9mbnMsIC4gLSB2NF9tY191c2VyX2ZucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjR3Yi5TIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjR3Yi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NGMzNDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12NHdiLlMKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9saWIvY29weXBhZ2UuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBBU00gb3B0aW1pc2VkIHN0cmluZyBmdW5jdGlvbnMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2NvbnN0YW50cy5oPgorCisJLnRleHQKKwkuYWxpZ24JNQorLyoKKyAqIEFSTXY0IG9wdGltaXNlZCBjb3B5X3VzZXJfcGFnZQorICoKKyAqIFdlIGZsdXNoIHRoZSBkZXN0aW5hdGlvbiBjYWNoZSBsaW5lcyBqdXN0IGJlZm9yZSB3ZSB3cml0ZSB0aGUgZGF0YSBpbnRvIHRoZQorICogY29ycmVzcG9uZGluZyBhZGRyZXNzLiAgU2luY2UgdGhlIERjYWNoZSBpcyByZWFkLWFsbG9jYXRlLCB0aGlzIHJlbW92ZXMgdGhlCisgKiBEY2FjaGUgYWxpYXNpbmcgaXNzdWUuICBUaGUgd3JpdGVzIHdpbGwgYmUgZm9yd2FyZGVkIHRvIHRoZSB3cml0ZSBidWZmZXIsCisgKiBhbmQgbWVyZ2VkIGFzIGFwcHJvcHJpYXRlLgorICoKKyAqIE5vdGU6IFdlIHJlbHkgb24gYWxsIEFSTXY0IHByb2Nlc3NvcnMgaW1wbGVtZW50aW5nIHRoZSAiaW52YWxpZGF0ZSBEIGxpbmUiCisgKiBpbnN0cnVjdGlvbi4gIElmIHlvdXIgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBseSB0aGlzLCB5b3UgaGF2ZSB0byB3cml0ZSB5b3VyCisgKiBvd24gY29weV91c2VyX3BhZ2UgdGhhdCBkb2VzIHRoZSByaWdodCB0aGluZy4KKyAqLworRU5UUlkodjR3Yl9jb3B5X3VzZXJfcGFnZSkKKwlzdG1mZAlzcCEsIHtyNCwgbHJ9CQkJQCAyCisJbW92CXIyLCAjUEFHRV9TWi82NAkJCUAgMQorCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQCA0CisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCQlAIDEgICBpbnZhbGlkYXRlIEQgbGluZQorCXN0bWlhCXIwISwge3IzLCByNCwgaXAsIGxyfQkJQCA0CisJbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlAIDQrMQorCXN0bWlhCXIwISwge3IzLCByNCwgaXAsIGxyfQkJQCA0CisJbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlAIDQKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCQlAIDEgICBpbnZhbGlkYXRlIEQgbGluZQorCXN0bWlhCXIwISwge3IzLCByNCwgaXAsIGxyfQkJQCA0CisJbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlAIDQKKwlzdWJzCXIyLCByMiwgIzEJCQlAIDEKKwlzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAgNAorCWxkbW5laWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlAIDQKKwlibmUJMWIJCQkJQCAxCisJbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDQJCUAgMSAgIGRyYWluIFdCCisJbGRtZmQJIHNwISwge3I0LCBwY30JCQlAIDMKKworCS5hbGlnbgk1CisvKgorICogQVJNdjQgb3B0aW1pc2VkIGNsZWFyX3VzZXJfcGFnZQorICoKKyAqIFNhbWUgc3RvcnkgYXMgYWJvdmUuCisgKi8KK0VOVFJZKHY0d2JfY2xlYXJfdXNlcl9wYWdlKQorCXN0cglsciwgW3NwLCAjLTRdIQorCW1vdglyMSwgI1BBR0VfU1ovNjQJCQlAIDEKKwltb3YJcjIsICMwCQkJCUAgMQorCW1vdglyMywgIzAJCQkJQCAxCisJbW92CWlwLCAjMAkJCQlAIDEKKwltb3YJbHIsICMwCQkJCUAgMQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNiwgMQkJQCAxICAgaW52YWxpZGF0ZSBEIGxpbmUKKwlzdG1pYQlyMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNAorCXN0bWlhCXIwISwge3IyLCByMywgaXAsIGxyfQkJQCA0CisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNiwgMQkJQCAxICAgaW52YWxpZGF0ZSBEIGxpbmUKKwlzdG1pYQlyMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNAorCXN0bWlhCXIwISwge3IyLCByMywgaXAsIGxyfQkJQCA0CisJc3VicwlyMSwgcjEsICMxCQkJQCAxCisJYm5lCTFiCQkJCUAgMQorCW1jcglwMTUsIDAsIHIxLCBjNywgYzEwLCA0CQlAIDEgICBkcmFpbiBXQgorCWxkcglwYywgW3NwXSwgIzQKKworCV9fSU5JVERBVEEKKworCS50eXBlCXY0d2JfdXNlcl9mbnMsICNvYmplY3QKK0VOVFJZKHY0d2JfdXNlcl9mbnMpCisJLmxvbmcJdjR3Yl9jbGVhcl91c2VyX3BhZ2UKKwkubG9uZwl2NHdiX2NvcHlfdXNlcl9wYWdlCisJLnNpemUJdjR3Yl91c2VyX2ZucywgLiAtIHY0d2JfdXNlcl9mbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d3QuUyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d3QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzY3OTM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjR3dC5TCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbGliL2NvcHlwYWdlLXY0LlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTkgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQVNNIG9wdGltaXNlZCBzdHJpbmcgZnVuY3Rpb25zCisgKgorICogIFRoaXMgaXMgZm9yIENQVXMgd2l0aCBhIHdyaXRldGhyb3VnaCBjYWNoZSBhbmQgJ2ZsdXNoIElEIGNhY2hlJyBpcworICogIHRoZSBvbmx5IHN1cHBvcnRlZCBjYWNoZSBvcGVyYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9jb25zdGFudHMuaD4KKworCS50ZXh0CisJLmFsaWduCTUKKy8qCisgKiBBUk12NCBvcHRpbWlzZWQgY29weV91c2VyX3BhZ2UKKyAqCisgKiBTaW5jZSB3ZSBoYXZlIHdyaXRldGhyb3VnaCBjYWNoZXMsIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQKKyAqIGRpcnR5IGRhdGEgaW4gdGhlIGNhY2hlLiAgSG93ZXZlciwgd2UgZG8gaGF2ZSB0byBlbnN1cmUgdGhhdAorICogc3Vic2VxdWVudCByZWFkcyBhcmUgdXAgdG8gZGF0ZS4KKyAqLworRU5UUlkodjR3dF9jb3B5X3VzZXJfcGFnZSkKKwlzdG1mZAlzcCEsIHtyNCwgbHJ9CQkJQCAyCisJbW92CXIyLCAjUEFHRV9TWi82NAkJCUAgMQorCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQCA0CisxOglzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAgNAorCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQCA0KzEKKwlzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAgNAorCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQCA0CisJc3RtaWEJcjAhLCB7cjMsIHI0LCBpcCwgbHJ9CQlAIDQKKwlsZG1pYQlyMSEsIHtyMywgcjQsIGlwLCBscn0JCUAgNAorCXN1YnMJcjIsIHIyLCAjMQkJCUAgMQorCXN0bWlhCXIwISwge3IzLCByNCwgaXAsIGxyfQkJQCA0CisJbGRtbmVpYQlyMSEsIHtyMywgcjQsIGlwLCBscn0JCUAgNAorCWJuZQkxYgkJCQlAIDEKKwltY3IJcDE1LCAwLCByMiwgYzcsIGM3LCAwCQlAIGZsdXNoIElEIGNhY2hlCisJbGRtZmQJc3AhLCB7cjQsIHBjfQkJCUAgMworCisJLmFsaWduCTUKKy8qCisgKiBBUk12NCBvcHRpbWlzZWQgY2xlYXJfdXNlcl9wYWdlCisgKgorICogU2FtZSBzdG9yeSBhcyBhYm92ZS4KKyAqLworRU5UUlkodjR3dF9jbGVhcl91c2VyX3BhZ2UpCisJc3RyCWxyLCBbc3AsICMtNF0hCisJbW92CXIxLCAjUEFHRV9TWi82NAkJCUAgMQorCW1vdglyMiwgIzAJCQkJQCAxCisJbW92CXIzLCAjMAkJCQlAIDEKKwltb3YJaXAsICMwCQkJCUAgMQorCW1vdglsciwgIzAJCQkJQCAxCisxOglzdG1pYQlyMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNAorCXN0bWlhCXIwISwge3IyLCByMywgaXAsIGxyfQkJQCA0CisJc3RtaWEJcjAhLCB7cjIsIHIzLCBpcCwgbHJ9CQlAIDQKKwlzdG1pYQlyMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNAorCXN1YnMJcjEsIHIxLCAjMQkJCUAgMQorCWJuZQkxYgkJCQlAIDEKKwltY3IJcDE1LCAwLCByMiwgYzcsIGM3LCAwCQlAIGZsdXNoIElEIGNhY2hlCisJbGRyCXBjLCBbc3BdLCAjNAorCisJX19JTklUREFUQQorCisJLnR5cGUJdjR3dF91c2VyX2ZucywgI29iamVjdAorRU5UUlkodjR3dF91c2VyX2ZucykKKwkubG9uZwl2NHd0X2NsZWFyX3VzZXJfcGFnZQorCS5sb25nCXY0d3RfY29weV91c2VyX3BhZ2UKKwkuc2l6ZQl2NHd0X3VzZXJfZm5zLCAuIC0gdjR3dF91c2VyX2ZucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjYuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk0YWM4MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY2LmMKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjYuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3NobXBhcmFtLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworI2lmIFNITUxCQSA+IDE2Mzg0CisjZXJyb3IgRklYIE1FCisjZW5kaWYKKworI2RlZmluZSBmcm9tX2FkZHJlc3MJKDB4ZmZmZjgwMDApCisjZGVmaW5lIGZyb21fcGdwcm90CVBBR0VfS0VSTkVMCisjZGVmaW5lIHRvX2FkZHJlc3MJKDB4ZmZmZmMwMDApCisjZGVmaW5lIHRvX3BncHJvdAlQQUdFX0tFUk5FTAorCitzdGF0aWMgcHRlX3QgKmZyb21fcHRlOworc3RhdGljIHB0ZV90ICp0b19wdGU7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHY2X2xvY2spOworCisjZGVmaW5lIERDQUNIRV9DT0xPVVIodmFkZHIpICgodmFkZHIgJiAoU0hNTEJBIC0gMSkpID4+IFBBR0VfU0hJRlQpCisKKy8qCisgKiBDb3B5IHRoZSB1c2VyIHBhZ2UuICBObyBhbGlhc2luZyB0byBkZWFsIHdpdGggc28gd2UgY2FuIGp1c3QKKyAqIGF0dGFjayB0aGUga2VybmVsJ3MgZXhpc3RpbmcgbWFwcGluZyBvZiB0aGVzZSBwYWdlcy4KKyAqLwordm9pZCB2Nl9jb3B5X3VzZXJfcGFnZV9ub25hbGlhc2luZyh2b2lkICprdG8sIGNvbnN0IHZvaWQgKmtmcm9tLCB1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCWNvcHlfcGFnZShrdG8sIGtmcm9tKTsKK30KKworLyoKKyAqIENsZWFyIHRoZSB1c2VyIHBhZ2UuICBObyBhbGlhc2luZyB0byBkZWFsIHdpdGggc28gd2UgY2FuIGp1c3QKKyAqIGF0dGFjayB0aGUga2VybmVsJ3MgZXhpc3RpbmcgbWFwcGluZyBvZiB0aGlzIHBhZ2UuCisgKi8KK3ZvaWQgdjZfY2xlYXJfdXNlcl9wYWdlX25vbmFsaWFzaW5nKHZvaWQgKmthZGRyLCB1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCWNsZWFyX3BhZ2Uoa2FkZHIpOworfQorCisvKgorICogQ29weSB0aGUgcGFnZSwgdGFraW5nIGFjY291bnQgb2YgdGhlIGNhY2hlIGNvbG91ci4KKyAqLwordm9pZCB2Nl9jb3B5X3VzZXJfcGFnZV9hbGlhc2luZyh2b2lkICprdG8sIGNvbnN0IHZvaWQgKmtmcm9tLCB1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCXVuc2lnbmVkIGludCBvZmZzZXQgPSBEQ0FDSEVfQ09MT1VSKHZhZGRyKTsKKwl1bnNpZ25lZCBsb25nIGZyb20sIHRvOworCisJLyoKKwkgKiBEaXNjYXJkIGRhdGEgaW4gdGhlIGtlcm5lbCBtYXBwaW5nIGZvciB0aGUgbmV3IHBhZ2UuCisJICogRklYTUU6IG5lZWRzIHRoaXMgTUNSUiB0byBiZSBzdXBwb3J0ZWQuCisJICovCisJX19hc21fXygibWNycglwMTUsIDAsICUxLCAlMCwgYzYJQCAweGVjNDAxZjA2IgorCSAgIDoKKwkgICA6ICJyIiAoa3RvKSwKKwkgICAgICJyIiAoKHVuc2lnbmVkIGxvbmcpa3RvICsgUEFHRV9TSVpFIC0gTDFfQ0FDSEVfQllURVMpCisJICAgOiAiY2MiKTsKKworCS8qCisJICogTm93IGNvcHkgdGhlIHBhZ2UgdXNpbmcgdGhlIHNhbWUgY2FjaGUgY29sb3VyIGFzIHRoZQorCSAqIHBhZ2VzIHVsdGltYXRlIGRlc3RpbmF0aW9uLgorCSAqLworCXNwaW5fbG9jaygmdjZfbG9jayk7CisKKwlzZXRfcHRlKGZyb21fcHRlICsgb2Zmc2V0LCBwZm5fcHRlKF9fcGEoa2Zyb20pID4+IFBBR0VfU0hJRlQsIGZyb21fcGdwcm90KSk7CisJc2V0X3B0ZSh0b19wdGUgKyBvZmZzZXQsIHBmbl9wdGUoX19wYShrdG8pID4+IFBBR0VfU0hJRlQsIHRvX3BncHJvdCkpOworCisJZnJvbSA9IGZyb21fYWRkcmVzcyArIChvZmZzZXQgPDwgUEFHRV9TSElGVCk7CisJdG8gICA9IHRvX2FkZHJlc3MgKyAob2Zmc2V0IDw8IFBBR0VfU0hJRlQpOworCisJZmx1c2hfdGxiX2tlcm5lbF9wYWdlKGZyb20pOworCWZsdXNoX3RsYl9rZXJuZWxfcGFnZSh0byk7CisKKwljb3B5X3BhZ2UoKHZvaWQgKil0bywgKHZvaWQgKilmcm9tKTsKKworCXNwaW5fdW5sb2NrKCZ2Nl9sb2NrKTsKK30KKworLyoKKyAqIENsZWFyIHRoZSB1c2VyIHBhZ2UuICBXZSBuZWVkIHRvIGRlYWwgd2l0aCB0aGUgYWxpYXNpbmcgaXNzdWVzLAorICogc28gcmVtYXAgdGhlIGtlcm5lbCBwYWdlIGludG8gdGhlIHNhbWUgY2FjaGUgY29sb3VyIGFzIHRoZSB1c2VyCisgKiBwYWdlLgorICovCit2b2lkIHY2X2NsZWFyX3VzZXJfcGFnZV9hbGlhc2luZyh2b2lkICprYWRkciwgdW5zaWduZWQgbG9uZyB2YWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gRENBQ0hFX0NPTE9VUih2YWRkcik7CisJdW5zaWduZWQgbG9uZyB0byA9IHRvX2FkZHJlc3MgKyAob2Zmc2V0IDw8IFBBR0VfU0hJRlQpOworCisJLyoKKwkgKiBEaXNjYXJkIGRhdGEgaW4gdGhlIGtlcm5lbCBtYXBwaW5nIGZvciB0aGUgbmV3IHBhZ2UKKwkgKiBGSVhNRTogbmVlZHMgdGhpcyBNQ1JSIHRvIGJlIHN1cHBvcnRlZC4KKwkgKi8KKwlfX2FzbV9fKCJtY3JyCXAxNSwgMCwgJTEsICUwLCBjNglAIDB4ZWM0MDFmMDYiCisJICAgOgorCSAgIDogInIiIChrYWRkciksCisJICAgICAiciIgKCh1bnNpZ25lZCBsb25nKWthZGRyICsgUEFHRV9TSVpFIC0gTDFfQ0FDSEVfQllURVMpCisJICAgOiAiY2MiKTsKKworCS8qCisJICogTm93IGNsZWFyIHRoZSBwYWdlIHVzaW5nIHRoZSBzYW1lIGNhY2hlIGNvbG91ciBhcworCSAqIHRoZSBwYWdlcyB1bHRpbWF0ZSBkZXN0aW5hdGlvbi4KKwkgKi8KKwlzcGluX2xvY2soJnY2X2xvY2spOworCisJc2V0X3B0ZSh0b19wdGUgKyBvZmZzZXQsIHBmbl9wdGUoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCwgdG9fcGdwcm90KSk7CisJZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHRvKTsKKwljbGVhcl9wYWdlKCh2b2lkICopdG8pOworCisJc3Bpbl91bmxvY2soJnY2X2xvY2spOworfQorCitzdHJ1Y3QgY3B1X3VzZXJfZm5zIHY2X3VzZXJfZm5zIF9faW5pdGRhdGEgPSB7CisJLmNwdV9jbGVhcl91c2VyX3BhZ2UJPSB2Nl9jbGVhcl91c2VyX3BhZ2Vfbm9uYWxpYXNpbmcsCisJLmNwdV9jb3B5X3VzZXJfcGFnZQk9IHY2X2NvcHlfdXNlcl9wYWdlX25vbmFsaWFzaW5nLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdjZfdXNlcnBhZ2VfaW5pdCh2b2lkKQoreworCWlmIChjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkpIHsKKwkJcGdkX3QgKnBnZDsKKwkJcG1kX3QgKnBtZDsKKworCQlwZ2QgPSBwZ2Rfb2Zmc2V0X2soZnJvbV9hZGRyZXNzKTsKKwkJcG1kID0gcG1kX2FsbG9jKCZpbml0X21tLCBwZ2QsIGZyb21fYWRkcmVzcyk7CisJCWlmICghcG1kKQorCQkJQlVHKCk7CisJCWZyb21fcHRlID0gcHRlX2FsbG9jX2tlcm5lbCgmaW5pdF9tbSwgcG1kLCBmcm9tX2FkZHJlc3MpOworCQlpZiAoIWZyb21fcHRlKQorCQkJQlVHKCk7CisKKwkJdG9fcHRlID0gcHRlX2FsbG9jX2tlcm5lbCgmaW5pdF9tbSwgcG1kLCB0b19hZGRyZXNzKTsKKwkJaWYgKCF0b19wdGUpCisJCQlCVUcoKTsKKworCQljcHVfdXNlci5jcHVfY2xlYXJfdXNlcl9wYWdlID0gdjZfY2xlYXJfdXNlcl9wYWdlX2FsaWFzaW5nOworCQljcHVfdXNlci5jcHVfY29weV91c2VyX3BhZ2UgPSB2Nl9jb3B5X3VzZXJfcGFnZV9hbGlhc2luZzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworX19pbml0Y2FsbCh2Nl91c2VycGFnZV9pbml0KTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjYWxlLlMgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS14c2NhbGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjI3NzMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjYWxlLlMKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbGliL2NvcHlwYWdlLXhzY2FsZS5TCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vY29uc3RhbnRzLmg+CisKKy8qCisgKiBHZW5lcmFsIG5vdGU6CisgKiAgV2UgZG9uJ3QgcmVhbGx5IHdhbnQgd3JpdGUtYWxsb2NhdGUgY2FjaGUgYmVoYXZpb3VyIGZvciB0aGVzZSBmdW5jdGlvbnMKKyAqICBzaW5jZSB0aGF0IHdpbGwganVzdCBlYXQgdGhyb3VnaCA4SyBvZiB0aGUgY2FjaGUuCisgKi8KKworCS50ZXh0CisJLmFsaWduCTUKKy8qCisgKiBYU2NhbGUgb3B0aW1pc2VkIGNvcHlfdXNlcl9wYWdlCisgKiAgcjAgPSBkZXN0aW5hdGlvbgorICogIHIxID0gc291cmNlCisgKiAgcjIgPSB2aXJ0dWFsIHVzZXIgYWRkcmVzcyBvZiB1bHRpbWF0ZSBkZXN0aW5hdGlvbiBwYWdlCisgKgorICogVGhlIHNvdXJjZSBwYWdlIG1heSBoYXZlIHNvbWUgY2xlYW4gZW50cmllcyBpbiB0aGUgY2FjaGUgYWxyZWFkeSwgYnV0IHdlCisgKiBjYW4gc2FmZWx5IGlnbm9yZSB0aGVtIC0gYnJlYWtfY293KCkgd2lsbCBmbHVzaCB0aGVtIG91dCBvZiB0aGUgY2FjaGUKKyAqIGlmIHdlIGV2ZW50dWFsbHkgZW5kIHVwIHVzaW5nIG91ciBjb3BpZWQgcGFnZS4KKyAqCisgKiBXaGF0IHdlIGNvdWxkIGRvIGlzIHVzZSB0aGUgbWluaS1jYWNoZSB0byBidWZmZXIgcmVhZHMgZnJvbSB0aGUgc291cmNlCisgKiBwYWdlLiAgV2UgcmVseSBvbiB0aGUgbWluaS1jYWNoZSBiZWluZyBzbWFsbGVyIHRoYW4gb25lIHBhZ2UsIHNvIHdlJ2xsCisgKiBjeWNsZSB0aHJvdWdoIHRoZSBjb21wbGV0ZSBjYWNoZSBhbnl3YXkuCisgKi8KK0VOVFJZKHhzY2FsZV9tY19jb3B5X3VzZXJfcGFnZSkKKwlzdG1mZAlzcCEsIHtyNCwgcjUsIGxyfQorCW1vdglyNSwgcjAKKwltb3YJcjAsIHIxCisJYmwJbWFwX3BhZ2VfbWluaWNhY2hlCisJbW92CXIxLCByNQorCW1vdglsciwgI1BBR0VfU1ovNjQtMQorCisJLyoKKwkgKiBTdHJhbmdlbHkgZW5vdWdoLCBiZXN0IHBlcmZvcm1hbmNlIGlzIGFjaGlldmVkCisJICogd2hlbiBwcmVmZXRjaGluZyBkZXN0aW5hdGlvbiBhcyB3ZWxsLiAgKE5QKQorCSAqLworCXBsZAlbcjAsICMwXQorCXBsZAlbcjAsICMzMl0KKwlwbGQJW3IxLCAjMF0KKwlwbGQJW3IxLCAjMzJdCisKKzE6CXBsZAlbcjAsICM2NF0KKwlwbGQJW3IwLCAjOTZdCisJcGxkCVtyMSwgIzY0XQorCXBsZAlbcjEsICM5Nl0KKworMjoJbGRyZAlyMiwgW3IwXSwgIzgKKwlsZHJkCXI0LCBbcjBdLCAjOAorCW1vdglpcCwgcjEKKwlzdHJkCXIyLCBbcjFdLCAjOAorCWxkcmQJcjIsIFtyMF0sICM4CisJc3RyZAlyNCwgW3IxXSwgIzgKKwlsZHJkCXI0LCBbcjBdLCAjOAorCXN0cmQJcjIsIFtyMV0sICM4CisJc3RyZAlyNCwgW3IxXSwgIzgKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGxpbmUKKwlsZHJkCXIyLCBbcjBdLCAjOAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzYsIDEJCUAgaW52YWxpZGF0ZSBEIGxpbmUKKwlsZHJkCXI0LCBbcjBdLCAjOAorCW1vdglpcCwgcjEKKwlzdHJkCXIyLCBbcjFdLCAjOAorCWxkcmQJcjIsIFtyMF0sICM4CisJc3RyZAlyNCwgW3IxXSwgIzgKKwlsZHJkCXI0LCBbcjBdLCAjOAorCXN0cmQJcjIsIFtyMV0sICM4CisJc3RyZAlyNCwgW3IxXSwgIzgKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGxpbmUKKwlzdWJzCWxyLCBsciwgIzEKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM2LCAxCQlAIGludmFsaWRhdGUgRCBsaW5lCisJYmd0CTFiCisJYmVxCTJiCisKKwlsZG1mZAlzcCEsIHtyNCwgcjUsIHBjfQorCisJLmFsaWduCTUKKy8qCisgKiBYU2NhbGUgb3B0aW1pc2VkIGNsZWFyX3VzZXJfcGFnZQorICogIHIwID0gZGVzdGluYXRpb24KKyAqICByMSA9IHZpcnR1YWwgdXNlciBhZGRyZXNzIG9mIHVsdGltYXRlIGRlc3RpbmF0aW9uIHBhZ2UKKyAqLworRU5UUlkoeHNjYWxlX21jX2NsZWFyX3VzZXJfcGFnZSkKKwltb3YJcjEsICNQQUdFX1NaLzMyCisJbW92CXIyLCAjMAorCW1vdglyMywgIzAKKzE6CW1vdglpcCwgcjAKKwlzdHJkCXIyLCBbcjBdLCAjOAorCXN0cmQJcjIsIFtyMF0sICM4CisJc3RyZAlyMiwgW3IwXSwgIzgKKwlzdHJkCXIyLCBbcjBdLCAjOAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgbGluZQorCXN1YnMJcjEsIHIxLCAjMQorCW1jcglwMTUsIDAsIGlwLCBjNywgYzYsIDEJCUAgaW52YWxpZGF0ZSBEIGxpbmUKKwlibmUJMWIKKwltb3YJcGMsIGxyCisKKwlfX0lOSVREQVRBCisKKwkudHlwZQl4c2NhbGVfbWNfdXNlcl9mbnMsICNvYmplY3QKK0VOVFJZKHhzY2FsZV9tY191c2VyX2ZucykKKwkubG9uZwl4c2NhbGVfbWNfY2xlYXJfdXNlcl9wYWdlCisJLmxvbmcJeHNjYWxlX21jX2NvcHlfdXNlcl9wYWdlCisJLnNpemUJeHNjYWxlX21jX3VzZXJfZm5zLCAuIC0geHNjYWxlX21jX3VzZXJfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9kaXNjb250aWcuYyBiL2FyY2gvYXJtL21tL2Rpc2NvbnRpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMDk3YmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9kaXNjb250aWcuYwpAQCAtMCwwICsxLDQ5IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbW0vZGlzY29udGlnLmMKKyAqCisgKiBEaXNjb250aWd1b3VzIG1lbW9yeSBzdXBwb3J0LgorICoKKyAqIEluaXRpYWwgY29kZTogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgTmljb2xhcyBQaXRyZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKworI2lmIE1BWF9OVU1OT0RFUyAhPSA0ICYmIE1BWF9OVU1OT0RFUyAhPSAxNgorIyBlcnJvciBGaXggTWUgUGxlYXNlCisjZW5kaWYKKworLyoKKyAqIE91ciBub2RlX2RhdGEgc3RydWN0dXJlIGZvciBkaXNjb250aWd1b3VzIG1lbW9yeS4KKyAqLworCitzdGF0aWMgYm9vdG1lbV9kYXRhX3Qgbm9kZV9ib290bWVtX2RhdGFbTUFYX05VTU5PREVTXTsKKworcGdfZGF0YV90IGRpc2NvbnRpZ19ub2RlX2RhdGFbTUFYX05VTU5PREVTXSA9IHsKKyAgeyAuYmRhdGEgPSAmbm9kZV9ib290bWVtX2RhdGFbMF0gfSwKKyAgeyAuYmRhdGEgPSAmbm9kZV9ib290bWVtX2RhdGFbMV0gfSwKKyAgeyAuYmRhdGEgPSAmbm9kZV9ib290bWVtX2RhdGFbMl0gfSwKKyAgeyAuYmRhdGEgPSAmbm9kZV9ib290bWVtX2RhdGFbM10gfSwKKyNpZiBNQVhfTlVNTk9ERVMgPT0gMTYKKyAgeyAuYmRhdGEgPSAmbm9kZV9ib290bWVtX2RhdGFbNF0gfSwKKyAgeyAuYmRhdGEgPSAmbm9kZV9ib290bWVtX2RhdGFbNV0gfSwKKyAgeyAuYmRhdGEgPSAmbm9kZV9ib290bWVtX2RhdGFbNl0gfSwKKyAgeyAuYmRhdGEgPSAmbm9kZV9ib290bWVtX2RhdGFbN10gfSwKKyAgeyAuYmRhdGEgPSAmbm9kZV9ib290bWVtX2RhdGFbOF0gfSwKKyAgeyAuYmRhdGEgPSAmbm9kZV9ib290bWVtX2RhdGFbOV0gfSwKKyAgeyAuYmRhdGEgPSAmbm9kZV9ib290bWVtX2RhdGFbMTBdIH0sCisgIHsgLmJkYXRhID0gJm5vZGVfYm9vdG1lbV9kYXRhWzExXSB9LAorICB7IC5iZGF0YSA9ICZub2RlX2Jvb3RtZW1fZGF0YVsxMl0gfSwKKyAgeyAuYmRhdGEgPSAmbm9kZV9ib290bWVtX2RhdGFbMTNdIH0sCisgIHsgLmJkYXRhID0gJm5vZGVfYm9vdG1lbV9kYXRhWzE0XSB9LAorICB7IC5iZGF0YSA9ICZub2RlX2Jvb3RtZW1fZGF0YVsxNV0gfSwKKyNlbmRpZgorfTsKKworRVhQT1JUX1NZTUJPTChkaXNjb250aWdfbm9kZV9kYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2V4dGFibGUuYyBiL2FyY2gvYXJtL21tL2V4dGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTkyYzNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vZXh0YWJsZS5jCkBAIC0wLDAgKzEsMTYgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vZXh0YWJsZS5jCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCitpbnQgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmZpeHVwOworCisJZml4dXAgPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpKTsKKwlpZiAoZml4dXApCisJCXJlZ3MtPkFSTV9wYyA9IGZpeHVwLT5maXh1cDsKKworCXJldHVybiBmaXh1cCAhPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jIGIvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOTY3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NSAgTGludXMgVG9ydmFsZHMKKyAqICBNb2RpZmljYXRpb25zIGZvciBBUk0gcHJvY2Vzc29yIChjKSAxOTk1LTIwMDIgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKworI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hhcmVkX3B0ZV9tYXNrID0gTF9QVEVfQ0FDSEVBQkxFOworCisvKgorICogV2UgdGFrZSB0aGUgZWFzeSB3YXkgb3V0IG9mIHRoaXMgcHJvYmxlbSAtIHdlIG1ha2UgdGhlCisgKiBQVEUgdW5jYWNoZWFibGUuICBIb3dldmVyLCB3ZSBsZWF2ZSB0aGUgd3JpdGUgYnVmZmVyIG9uLgorICovCitzdGF0aWMgaW50IGFkanVzdF9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlwZ2RfdCAqcGdkOworCXBtZF90ICpwbWQ7CisJcHRlX3QgKnB0ZSwgZW50cnk7CisJaW50IHJldCA9IDA7CisKKwlwZ2QgPSBwZ2Rfb2Zmc2V0KHZtYS0+dm1fbW0sIGFkZHJlc3MpOworCWlmIChwZ2Rfbm9uZSgqcGdkKSkKKwkJZ290byBub19wZ2Q7CisJaWYgKHBnZF9iYWQoKnBnZCkpCisJCWdvdG8gYmFkX3BnZDsKKworCXBtZCA9IHBtZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKKwlpZiAocG1kX25vbmUoKnBtZCkpCisJCWdvdG8gbm9fcG1kOworCWlmIChwbWRfYmFkKCpwbWQpKQorCQlnb3RvIGJhZF9wbWQ7CisKKwlwdGUgPSBwdGVfb2Zmc2V0X21hcChwbWQsIGFkZHJlc3MpOworCWVudHJ5ID0gKnB0ZTsKKworCS8qCisJICogSWYgdGhpcyBwYWdlIGlzbid0IHByZXNlbnQsIG9yIGlzIGFscmVhZHkgc2V0dXAgdG8KKwkgKiBmYXVsdCAoaWUsIGlzIG9sZCksIHdlIGNhbiBzYWZlbHkgaWdub3JlIGFueSBpc3N1ZXMuCisJICovCisJaWYgKHB0ZV9wcmVzZW50KGVudHJ5KSAmJiBwdGVfdmFsKGVudHJ5KSAmIHNoYXJlZF9wdGVfbWFzaykgeworCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkcmVzcywgcHRlX3BmbihlbnRyeSkpOworCQlwdGVfdmFsKGVudHJ5KSAmPSB+c2hhcmVkX3B0ZV9tYXNrOworCQlzZXRfcHRlKHB0ZSwgZW50cnkpOworCQlmbHVzaF90bGJfcGFnZSh2bWEsIGFkZHJlc3MpOworCQlyZXQgPSAxOworCX0KKwlwdGVfdW5tYXAocHRlKTsKKwlyZXR1cm4gcmV0OworCitiYWRfcGdkOgorCXBnZF9FUlJPUigqcGdkKTsKKwlwZ2RfY2xlYXIocGdkKTsKK25vX3BnZDoKKwlyZXR1cm4gMDsKKworYmFkX3BtZDoKKwlwbWRfRVJST1IoKnBtZCk7CisJcG1kX2NsZWFyKHBtZCk7Citub19wbWQ6CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCittYWtlX2NvaGVyZW50KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgZGlydHkpCit7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbXBudDsKKwlzdHJ1Y3QgcHJpb190cmVlX2l0ZXIgaXRlcjsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwlwZ29mZl90IHBnb2ZmOworCWludCBhbGlhc2VzID0gMDsKKworCWlmICghbWFwcGluZykKKwkJcmV0dXJuOworCisJcGdvZmYgPSB2bWEtPnZtX3Bnb2ZmICsgKChhZGRyIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVCk7CisKKwkvKgorCSAqIElmIHdlIGhhdmUgYW55IHNoYXJlZCBtYXBwaW5ncyB0aGF0IGFyZSBpbiB0aGUgc2FtZSBtbQorCSAqIHNwYWNlLCB0aGVuIHdlIG5lZWQgdG8gaGFuZGxlIHRoZW0gc3BlY2lhbGx5IHRvIG1haW50YWluCisJICogY2FjaGUgY29oZXJlbmN5LgorCSAqLworCWZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZyk7CisJdm1hX3ByaW9fdHJlZV9mb3JlYWNoKG1wbnQsICZpdGVyLCAmbWFwcGluZy0+aV9tbWFwLCBwZ29mZiwgcGdvZmYpIHsKKwkJLyoKKwkJICogSWYgdGhpcyBWTUEgaXMgbm90IGluIG91ciBNTSwgd2UgY2FuIGlnbm9yZSBpdC4KKwkJICogTm90ZSB0aGF0IHdlIGludGVudGlvbmFsbHkgbWFzayBvdXQgdGhlIFZNQQorCQkgKiB0aGF0IHdlIGFyZSBmaXhpbmcgdXAuCisJCSAqLworCQlpZiAobXBudC0+dm1fbW0gIT0gbW0gfHwgbXBudCA9PSB2bWEpCisJCQljb250aW51ZTsKKwkJaWYgKCEobXBudC0+dm1fZmxhZ3MgJiBWTV9NQVlTSEFSRSkpCisJCQljb250aW51ZTsKKwkJb2Zmc2V0ID0gKHBnb2ZmIC0gbXBudC0+dm1fcGdvZmYpIDw8IFBBR0VfU0hJRlQ7CisJCWFsaWFzZXMgKz0gYWRqdXN0X3B0ZShtcG50LCBtcG50LT52bV9zdGFydCArIG9mZnNldCk7CisJfQorCWZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKTsKKwlpZiAoYWxpYXNlcykKKwkJYWRqdXN0X3B0ZSh2bWEsIGFkZHIpOworCWVsc2UKKwkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHIsIHBhZ2VfdG9fcGZuKHBhZ2UpKTsKK30KKworLyoKKyAqIFRha2UgY2FyZSBvZiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgdGhpbmdzIHdoZW4gcGxhY2luZyBhIG5ldyBQVEUgaW50bworICogYSBwYWdlIHRhYmxlLCBvciBjaGFuZ2luZyBhbiBleGlzdGluZyBQVEUuICBCYXNpY2FsbHksIHRoZXJlIGFyZSB0d28KKyAqIHRoaW5ncyB0aGF0IHdlIG5lZWQgdG8gdGFrZSBjYXJlIG9mOgorICoKKyAqICAxLiBJZiBQR19kY2FjaGVfZGlydHkgaXMgc2V0IGZvciB0aGUgcGFnZSwgd2UgbmVlZCB0byBlbnN1cmUKKyAqICAgICB0aGF0IGFueSBjYWNoZSBlbnRyaWVzIGZvciB0aGUga2VybmVscyB2aXJ0dWFsIG1lbW9yeQorICogICAgIHJhbmdlIGFyZSB3cml0dGVuIGJhY2sgdG8gdGhlIHBhZ2UuCisgKiAgMi4gSWYgd2UgaGF2ZSBtdWx0aXBsZSBzaGFyZWQgbWFwcGluZ3Mgb2YgdGhlIHNhbWUgc3BhY2UgaW4KKyAqICAgICBhbiBvYmplY3QsIHdlIG5lZWQgdG8gZGVhbCB3aXRoIHRoZSBjYWNoZSBhbGlhc2luZyBpc3N1ZXMuCisgKgorICogTm90ZSB0aGF0IHRoZSBwYWdlX3RhYmxlX2xvY2sgd2lsbCBiZSBoZWxkLgorICovCit2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3BmbihwdGUpOworCXN0cnVjdCBwYWdlICpwYWdlOworCisJaWYgKCFwZm5fdmFsaWQocGZuKSkKKwkJcmV0dXJuOworCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOworCWlmIChwYWdlX21hcHBpbmcocGFnZSkpIHsKKwkJaW50IGRpcnR5ID0gdGVzdF9hbmRfY2xlYXJfYml0KFBHX2RjYWNoZV9kaXJ0eSwgJnBhZ2UtPmZsYWdzKTsKKworCQlpZiAoZGlydHkpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGlzIG91ciBmaXJzdCB1c2Vyc3BhY2UgbWFwcGluZyBvZiB0aGlzIHBhZ2UuCisJCQkgKiBFbnN1cmUgdGhhdCB0aGUgcGh5c2ljYWwgcGFnZSBpcyBjb2hlcmVudCB3aXRoCisJCQkgKiB0aGUga2VybmVsIG1hcHBpbmcuCisJCQkgKgorCQkJICogRklYTUU6IG9ubHkgbmVlZCB0byBkbyB0aGlzIG9uIFZJVlQgYW5kIGFsaWFzaW5nCisJCQkgKiAgICAgICAgVklQVCBjYWNoZSBhcmNoaXRlY3R1cmVzLiAgV2UgY2FuIGRvIHRoYXQKKwkJCSAqCSAgYnkgY2hvb3Npbmcgd2hldGhlciB0byBzZXQgdGhpcyBiaXQuLi4KKwkJCSAqLworCQkJX19jcHVjX2ZsdXNoX2RjYWNoZV9wYWdlKHBhZ2VfYWRkcmVzcyhwYWdlKSk7CisJCX0KKworCQlpZiAoY2FjaGVfaXNfdml2dCgpKQorCQkJbWFrZV9jb2hlcmVudCh2bWEsIGFkZHIsIHBhZ2UsIGRpcnR5KTsKKwl9Cit9CisKKy8qCisgKiBDaGVjayB3aGV0aGVyIHRoZSB3cml0ZSBidWZmZXIgaGFzIHBoeXNpY2FsIGFkZHJlc3MgYWxpYXNpbmcKKyAqIGlzc3Vlcy4gIElmIGl0IGhhcywgd2UgbmVlZCB0byBhdm9pZCB0aGVtIGZvciB0aGUgY2FzZSB3aGVyZQorICogd2UgaGF2ZSBzZXZlcmFsIHNoYXJlZCBtYXBwaW5ncyBvZiB0aGUgc2FtZSBvYmplY3QgaW4gdXNlcgorICogc3BhY2UuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGNoZWNrX3dyaXRlYnVmZmVyKHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMikKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHplcm8gPSAwLCBvbmUgPSAxLCB2YWw7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCW1iKCk7CisJKnAxID0gb25lOworCW1iKCk7CisJKnAyID0gemVybzsKKwltYigpOworCXZhbCA9ICpwMTsKKwltYigpOworCWxvY2FsX2lycV9lbmFibGUoKTsKKwlyZXR1cm4gdmFsICE9IHplcm87Cit9CisKK3ZvaWQgX19pbml0IGNoZWNrX3dyaXRlYnVmZmVyX2J1Z3Modm9pZCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwljb25zdCBjaGFyICpyZWFzb247CisJdW5zaWduZWQgbG9uZyB2ID0gMTsKKworCXByaW50ayhLRVJOX0lORk8gIkNQVTogVGVzdGluZyB3cml0ZSBidWZmZXIgY29oZXJlbmN5OiAiKTsKKworCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCWlmIChwYWdlKSB7CisJCXVuc2lnbmVkIGxvbmcgKnAxLCAqcDI7CisJCXBncHJvdF90IHByb3QgPSBfX3BncHJvdChMX1BURV9QUkVTRU5UfExfUFRFX1lPVU5HfAorCQkJCQkgTF9QVEVfRElSVFl8TF9QVEVfV1JJVEV8CisJCQkJCSBMX1BURV9CVUZGRVJBQkxFKTsKKworCQlwMSA9IHZtYXAoJnBhZ2UsIDEsIFZNX0lPUkVNQVAsIHByb3QpOworCQlwMiA9IHZtYXAoJnBhZ2UsIDEsIFZNX0lPUkVNQVAsIHByb3QpOworCisJCWlmIChwMSAmJiBwMikgeworCQkJdiA9IGNoZWNrX3dyaXRlYnVmZmVyKHAxLCBwMik7CisJCQlyZWFzb24gPSAiZW5hYmxpbmcgd29yay1hcm91bmQiOworCQl9IGVsc2UgeworCQkJcmVhc29uID0gInVuYWJsZSB0byBtYXAgbWVtb3J5XG4iOworCQl9CisKKwkJdnVubWFwKHAxKTsKKwkJdnVubWFwKHAyKTsKKwkJcHV0X3BhZ2UocGFnZSk7CisJfSBlbHNlIHsKKwkJcmVhc29uID0gInVuYWJsZSB0byBncmFiIHBhZ2VcbiI7CisJfQorCisJaWYgKHYpIHsKKwkJcHJpbnRrKCJmYWlsZWQsICVzXG4iLCByZWFzb24pOworCQlzaGFyZWRfcHRlX21hc2sgfD0gTF9QVEVfQlVGRkVSQUJMRTsKKwl9IGVsc2UgeworCQlwcmludGsoIm9rXG4iKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mYXVsdC5jIGIvYXJjaC9hcm0vbW0vZmF1bHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWJlMWMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vZmF1bHQuYwpAQCAtMCwwICsxLDQ2MiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS9mYXVsdC5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NSAgTGludXMgVG9ydmFsZHMKKyAqICBNb2RpZmljYXRpb25zIGZvciBBUk0gcHJvY2Vzc29yIChjKSAxOTk1LTIwMDQgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgImZhdWx0LmgiCisKKy8qCisgKiBUaGlzIGlzIHVzZWZ1bCB0byBkdW1wIG91dCB0aGUgcGFnZSB0YWJsZXMgYXNzb2NpYXRlZCB3aXRoCisgKiAnYWRkcicgaW4gbW0gJ21tJy4KKyAqLwordm9pZCBzaG93X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXBnZF90ICpwZ2Q7CisKKwlpZiAoIW1tKQorCQltbSA9ICZpbml0X21tOworCisJcHJpbnRrKEtFUk5fQUxFUlQgInBnZCA9ICVwXG4iLCBtbS0+cGdkKTsKKwlwZ2QgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKTsKKwlwcmludGsoS0VSTl9BTEVSVCAiWyUwOGx4XSAqcGdkPSUwOGx4IiwgYWRkciwgcGdkX3ZhbCgqcGdkKSk7CisKKwlkbyB7CisJCXBtZF90ICpwbWQ7CisJCXB0ZV90ICpwdGU7CisKKwkJaWYgKHBnZF9ub25lKCpwZ2QpKQorCQkJYnJlYWs7CisKKwkJaWYgKHBnZF9iYWQoKnBnZCkpIHsKKwkJCXByaW50aygiKGJhZCkiKTsKKwkJCWJyZWFrOworCQl9CisKKwkJcG1kID0gcG1kX29mZnNldChwZ2QsIGFkZHIpOworI2lmIFBUUlNfUEVSX1BNRCAhPSAxCisJCXByaW50aygiLCAqcG1kPSUwOGx4IiwgcG1kX3ZhbCgqcG1kKSk7CisjZW5kaWYKKworCQlpZiAocG1kX25vbmUoKnBtZCkpCisJCQlicmVhazsKKworCQlpZiAocG1kX2JhZCgqcG1kKSkgeworCQkJcHJpbnRrKCIoYmFkKSIpOworCQkJYnJlYWs7CisJCX0KKworI2lmbmRlZiBDT05GSUdfSElHSE1FTQorCQkvKiBXZSBtdXN0IG5vdCBtYXAgdGhpcyBpZiB3ZSBoYXZlIGhpZ2htZW0gZW5hYmxlZCAqLworCQlwdGUgPSBwdGVfb2Zmc2V0X21hcChwbWQsIGFkZHIpOworCQlwcmludGsoIiwgKnB0ZT0lMDhseCIsIHB0ZV92YWwoKnB0ZSkpOworCQlwcmludGsoIiwgKnBwdGU9JTA4bHgiLCBwdGVfdmFsKHB0ZVstUFRSU19QRVJfUFRFXSkpOworCQlwdGVfdW5tYXAocHRlKTsKKyNlbmRpZgorCX0gd2hpbGUoMCk7CisKKwlwcmludGsoIlxuIik7Cit9CisKKy8qCisgKiBPb3BzLiAgVGhlIGtlcm5lbCB0cmllZCB0byBhY2Nlc3Mgc29tZSBwYWdlIHRoYXQgd2Fzbid0IHByZXNlbnQuCisgKi8KK3N0YXRpYyB2b2lkCitfX2RvX2tlcm5lbF9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLAorCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCS8qCisJICogQXJlIHdlIHByZXBhcmVkIHRvIGhhbmRsZSB0aGlzIGtlcm5lbCBmYXVsdD8KKwkgKi8KKwlpZiAoZml4dXBfZXhjZXB0aW9uKHJlZ3MpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIE5vIGhhbmRsZXIsIHdlJ2xsIGhhdmUgdG8gdGVybWluYXRlIHRoaW5ncyB3aXRoIGV4dHJlbWUgcHJlanVkaWNlLgorCSAqLworCWJ1c3Rfc3BpbmxvY2tzKDEpOworCXByaW50ayhLRVJOX0FMRVJUCisJCSJVbmFibGUgdG8gaGFuZGxlIGtlcm5lbCAlcyBhdCB2aXJ0dWFsIGFkZHJlc3MgJTA4bHhcbiIsCisJCShhZGRyIDwgUEFHRV9TSVpFKSA/ICJOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UiIDoKKwkJInBhZ2luZyByZXF1ZXN0IiwgYWRkcik7CisKKwlzaG93X3B0ZShtbSwgYWRkcik7CisJZGllKCJPb3BzIiwgcmVncywgZnNyKTsKKwlidXN0X3NwaW5sb2NrcygwKTsKKwlkb19leGl0KFNJR0tJTEwpOworfQorCisvKgorICogU29tZXRoaW5nIHRyaWVkIHRvIGFjY2VzcyBtZW1vcnkgdGhhdCBpc24ndCBpbiBvdXIgbWVtb3J5IG1hcC4uCisgKiBVc2VyIG1vZGUgYWNjZXNzZXMganVzdCBjYXVzZSBhIFNJR1NFR1YKKyAqLworc3RhdGljIHZvaWQKK19fZG9fdXNlcl9mYXVsdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLAorCQl1bnNpZ25lZCBpbnQgZnNyLCBpbnQgY29kZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHNpZ2luZm8gc2k7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfVVNFUgorCWlmICh1c2VyX2RlYnVnICYgVURCR19TRUdWKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogdW5oYW5kbGVkIHBhZ2UgZmF1bHQgYXQgMHglMDhseCwgY29kZSAweCUwM3hcbiIsCisJCSAgICAgICB0c2stPmNvbW0sIGFkZHIsIGZzcik7CisJCXNob3dfcHRlKHRzay0+bW0sIGFkZHIpOworCQlzaG93X3JlZ3MocmVncyk7CisJfQorI2VuZGlmCisKKwl0c2stPnRocmVhZC5hZGRyZXNzID0gYWRkcjsKKwl0c2stPnRocmVhZC5lcnJvcl9jb2RlID0gZnNyOworCXRzay0+dGhyZWFkLnRyYXBfbm8gPSAxNDsKKwlzaS5zaV9zaWdubyA9IFNJR1NFR1Y7CisJc2kuc2lfZXJybm8gPSAwOworCXNpLnNpX2NvZGUgPSBjb2RlOworCXNpLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKilhZGRyOworCWZvcmNlX3NpZ19pbmZvKFNJR1NFR1YsICZzaSwgdHNrKTsKK30KKwordm9pZAorZG9fYmFkX2FyZWEoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJICAgIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCS8qCisJICogSWYgd2UgYXJlIGluIGtlcm5lbCBtb2RlIGF0IHRoaXMgcG9pbnQsIHdlCisJICogaGF2ZSBubyBjb250ZXh0IHRvIGhhbmRsZSB0aGlzIGZhdWx0IHdpdGguCisJICovCisJaWYgKHVzZXJfbW9kZShyZWdzKSkKKwkJX19kb191c2VyX2ZhdWx0KHRzaywgYWRkciwgZnNyLCBTRUdWX01BUEVSUiwgcmVncyk7CisJZWxzZQorCQlfX2RvX2tlcm5lbF9mYXVsdChtbSwgYWRkciwgZnNyLCByZWdzKTsKK30KKworI2RlZmluZSBWTV9GQVVMVF9CQURNQVAJCSgtMjApCisjZGVmaW5lIFZNX0ZBVUxUX0JBREFDQ0VTUwkoLTIxKQorCitzdGF0aWMgaW50CitfX2RvX3BhZ2VfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwKKwkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJaW50IGZhdWx0LCBtYXNrOworCisJdm1hID0gZmluZF92bWEobW0sIGFkZHIpOworCWZhdWx0ID0gVk1fRkFVTFRfQkFETUFQOworCWlmICghdm1hKQorCQlnb3RvIG91dDsKKwlpZiAodm1hLT52bV9zdGFydCA+IGFkZHIpCisJCWdvdG8gY2hlY2tfc3RhY2s7CisKKwkvKgorCSAqIE9rLCB3ZSBoYXZlIGEgZ29vZCB2bV9hcmVhIGZvciB0aGlzCisJICogbWVtb3J5IGFjY2Vzcywgc28gd2UgY2FuIGhhbmRsZSBpdC4KKwkgKi8KK2dvb2RfYXJlYToKKwlpZiAoZnNyICYgKDEgPDwgMTEpKSAvKiB3cml0ZT8gKi8KKwkJbWFzayA9IFZNX1dSSVRFOworCWVsc2UKKwkJbWFzayA9IFZNX1JFQUR8Vk1fRVhFQzsKKworCWZhdWx0ID0gVk1fRkFVTFRfQkFEQUNDRVNTOworCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBtYXNrKSkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIElmIGZvciBhbnkgcmVhc29uIGF0IGFsbCB3ZSBjb3VsZG4ndCBoYW5kbGUKKwkgKiB0aGUgZmF1bHQsIG1ha2Ugc3VyZSB3ZSBleGl0IGdyYWNlZnVsbHkgcmF0aGVyCisJICogdGhhbiBlbmRsZXNzbHkgcmVkbyB0aGUgZmF1bHQuCisJICovCitzdXJ2aXZlOgorCWZhdWx0ID0gaGFuZGxlX21tX2ZhdWx0KG1tLCB2bWEsIGFkZHIgJiBQQUdFX01BU0ssIGZzciAmICgxIDw8IDExKSk7CisKKwkvKgorCSAqIEhhbmRsZSB0aGUgIm5vcm1hbCIgY2FzZXMgZmlyc3QgLSBzdWNjZXNzZnVsIGFuZCBzaWdidXMKKwkgKi8KKwlzd2l0Y2ggKGZhdWx0KSB7CisJY2FzZSBWTV9GQVVMVF9NQUpPUjoKKwkJdHNrLT5tYWpfZmx0Kys7CisJCXJldHVybiBmYXVsdDsKKwljYXNlIFZNX0ZBVUxUX01JTk9SOgorCQl0c2stPm1pbl9mbHQrKzsKKwljYXNlIFZNX0ZBVUxUX1NJR0JVUzoKKwkJcmV0dXJuIGZhdWx0OworCX0KKworCWlmICh0c2stPnBpZCAhPSAxKQorCQlnb3RvIG91dDsKKworCS8qCisJICogSWYgd2UgYXJlIG91dCBvZiBtZW1vcnkgZm9yIHBpZDEsCisJICogc2xlZXAgZm9yIGEgd2hpbGUgYW5kIHJldHJ5CisJICovCisJeWllbGQoKTsKKwlnb3RvIHN1cnZpdmU7CisKK2NoZWNrX3N0YWNrOgorCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fR1JPV1NET1dOICYmICFleHBhbmRfc3RhY2sodm1hLCBhZGRyKSkKKwkJZ290byBnb29kX2FyZWE7CitvdXQ6CisJcmV0dXJuIGZhdWx0OworfQorCitzdGF0aWMgaW50Citkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CisJc3RydWN0IG1tX3N0cnVjdCAqbW07CisJaW50IGZhdWx0OworCisJdHNrID0gY3VycmVudDsKKwltbSAgPSB0c2stPm1tOworCisJLyoKKwkgKiBJZiB3ZSdyZSBpbiBhbiBpbnRlcnJ1cHQgb3IgaGF2ZSBubyB1c2VyCisJICogY29udGV4dCwgd2UgbXVzdCBub3QgdGFrZSB0aGUgZmF1bHQuLgorCSAqLworCWlmIChpbl9pbnRlcnJ1cHQoKSB8fCAhbW0pCisJCWdvdG8gbm9fY29udGV4dDsKKworCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlmYXVsdCA9IF9fZG9fcGFnZV9mYXVsdChtbSwgYWRkciwgZnNyLCB0c2spOworCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisKKwkvKgorCSAqIEhhbmRsZSB0aGUgIm5vcm1hbCIgY2FzZSBmaXJzdAorCSAqLworCWlmIChmYXVsdCA+IDApCisJCXJldHVybiAwOworCisJLyoKKwkgKiBXZSBoYWQgc29tZSBtZW1vcnksIGJ1dCB3ZXJlIHVuYWJsZSB0bworCSAqIHN1Y2Nlc3NmdWxseSBmaXggdXAgdGhpcyBwYWdlIGZhdWx0LgorCSAqLworCWlmIChmYXVsdCA9PSAwKQorCQlnb3RvIGRvX3NpZ2J1czsKKworCS8qCisJICogSWYgd2UgYXJlIGluIGtlcm5lbCBtb2RlIGF0IHRoaXMgcG9pbnQsIHdlCisJICogaGF2ZSBubyBjb250ZXh0IHRvIGhhbmRsZSB0aGlzIGZhdWx0IHdpdGguCisJICovCisJaWYgKCF1c2VyX21vZGUocmVncykpCisJCWdvdG8gbm9fY29udGV4dDsKKworCWlmIChmYXVsdCA9PSBWTV9GQVVMVF9PT00pIHsKKwkJLyoKKwkJICogV2UgcmFuIG91dCBvZiBtZW1vcnksIG9yIHNvbWUgb3RoZXIgdGhpbmcgaGFwcGVuZWQgdG8KKwkJICogdXMgdGhhdCBtYWRlIHVzIHVuYWJsZSB0byBoYW5kbGUgdGhlIHBhZ2UgZmF1bHQgZ3JhY2VmdWxseS4KKwkJICovCisJCXByaW50aygiVk06IGtpbGxpbmcgcHJvY2VzcyAlc1xuIiwgdHNrLT5jb21tKTsKKwkJZG9fZXhpdChTSUdLSUxMKTsKKwl9IGVsc2UKKwkJX19kb191c2VyX2ZhdWx0KHRzaywgYWRkciwgZnNyLCBmYXVsdCA9PSBWTV9GQVVMVF9CQURBQ0NFU1MgPworCQkJCVNFR1ZfQUNDRVJSIDogU0VHVl9NQVBFUlIsIHJlZ3MpOworCXJldHVybiAwOworCisKKy8qCisgKiBXZSByYW4gb3V0IG9mIG1lbW9yeSwgb3Igc29tZSBvdGhlciB0aGluZyBoYXBwZW5lZCB0byB1cyB0aGF0IG1hZGUKKyAqIHVzIHVuYWJsZSB0byBoYW5kbGUgdGhlIHBhZ2UgZmF1bHQgZ3JhY2VmdWxseS4KKyAqLworZG9fc2lnYnVzOgorCS8qCisJICogU2VuZCBhIHNpZ2J1cywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlIHdlcmUgaW4ga2VybmVsCisJICogb3IgdXNlciBtb2RlLgorCSAqLworCXRzay0+dGhyZWFkLmFkZHJlc3MgPSBhZGRyOworCXRzay0+dGhyZWFkLmVycm9yX2NvZGUgPSBmc3I7CisJdHNrLT50aHJlYWQudHJhcF9ubyA9IDE0OworCWZvcmNlX3NpZyhTSUdCVVMsIHRzayk7CisjaWZkZWYgQ09ORklHX0RFQlVHX1VTRVIKKwlpZiAodXNlcl9kZWJ1ZyAmIFVEQkdfQlVTKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogc2lnYnVzIGF0IDB4JTA4bHgsIHBjPTB4JTA4bHhcbiIsCisJCQljdXJyZW50LT5jb21tLCBhZGRyLCBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpKTsKKwl9CisjZW5kaWYKKworCS8qIEtlcm5lbCBtb2RlPyBIYW5kbGUgZXhjZXB0aW9ucyBvciBkaWUgKi8KKwlpZiAodXNlcl9tb2RlKHJlZ3MpKQorCQlyZXR1cm4gMDsKKworbm9fY29udGV4dDoKKwlfX2RvX2tlcm5lbF9mYXVsdChtbSwgYWRkciwgZnNyLCByZWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZpcnN0IExldmVsIFRyYW5zbGF0aW9uIEZhdWx0IEhhbmRsZXIKKyAqCisgKiBXZSBlbnRlciBoZXJlIGJlY2F1c2UgdGhlIGZpcnN0IGxldmVsIHBhZ2UgdGFibGUgZG9lc24ndCBjb250YWluCisgKiBhIHZhbGlkIGVudHJ5IGZvciB0aGUgYWRkcmVzcy4KKyAqCisgKiBJZiB0aGUgYWRkcmVzcyBpcyBpbiBrZXJuZWwgc3BhY2UgKD49IFRBU0tfU0laRSksIHRoZW4gd2UgYXJlCisgKiBwcm9iYWJseSBmYXVsdGluZyBpbiB0aGUgdm1hbGxvYygpIGFyZWEuCisgKgorICogSWYgdGhlIGluaXRfdGFzaydzIGZpcnN0IGxldmVsIHBhZ2UgdGFibGVzIGNvbnRhaW5zIHRoZSByZWxldmFudAorICogZW50cnksIHdlIGNvcHkgdGhlIGl0IHRvIHRoaXMgdGFzay4gIElmIG5vdCwgd2Ugc2VuZCB0aGUgcHJvY2VzcworICogYSBzaWduYWwsIGZpeHVwIHRoZSBleGNlcHRpb24sIG9yIG9vcHMgdGhlIGtlcm5lbC4KKyAqCisgKiBOT1RFISBXZSBNVVNUIE5PVCB0YWtlIGFueSBsb2NrcyBmb3IgdGhpcyBjYXNlLiBXZSBtYXkgYmUgaW4gYW4KKyAqIGludGVycnVwdCBvciBhIGNyaXRpY2FsIHJlZ2lvbiwgYW5kIHNob3VsZCBvbmx5IGNvcHkgdGhlIGluZm9ybWF0aW9uCisgKiBmcm9tIHRoZSBtYXN0ZXIgcGFnZSB0YWJsZSwgbm90aGluZyBtb3JlLgorICovCitzdGF0aWMgaW50Citkb190cmFuc2xhdGlvbl9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsCisJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CisJdW5zaWduZWQgaW50IGluZGV4OworCXBnZF90ICpwZ2QsICpwZ2RfazsKKwlwbWRfdCAqcG1kLCAqcG1kX2s7CisKKwlpZiAoYWRkciA8IFRBU0tfU0laRSkKKwkJcmV0dXJuIGRvX3BhZ2VfZmF1bHQoYWRkciwgZnNyLCByZWdzKTsKKworCWluZGV4ID0gcGdkX2luZGV4KGFkZHIpOworCisJLyoKKwkgKiBGSVhNRTogQ1AxNSBDMSBpcyB3cml0ZSBvbmx5IG9uIEFSTXYzIGFyY2hpdGVjdHVyZXMuCisJICovCisJcGdkID0gY3B1X2dldF9wZ2QoKSArIGluZGV4OworCXBnZF9rID0gaW5pdF9tbS5wZ2QgKyBpbmRleDsKKworCWlmIChwZ2Rfbm9uZSgqcGdkX2spKQorCQlnb3RvIGJhZF9hcmVhOworCisJaWYgKCFwZ2RfcHJlc2VudCgqcGdkKSkKKwkJc2V0X3BnZChwZ2QsICpwZ2Rfayk7CisKKwlwbWRfayA9IHBtZF9vZmZzZXQocGdkX2ssIGFkZHIpOworCXBtZCAgID0gcG1kX29mZnNldChwZ2QsIGFkZHIpOworCisJaWYgKHBtZF9ub25lKCpwbWRfaykpCisJCWdvdG8gYmFkX2FyZWE7CisKKwljb3B5X3BtZChwbWQsIHBtZF9rKTsKKwlyZXR1cm4gMDsKKworYmFkX2FyZWE6CisJdHNrID0gY3VycmVudDsKKworCWRvX2JhZF9hcmVhKHRzaywgdHNrLT5hY3RpdmVfbW0sIGFkZHIsIGZzciwgcmVncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTb21lIHNlY3Rpb24gcGVybWlzc2lvbiBmYXVsdHMgbmVlZCB0byBiZSBoYW5kbGVkIGdyYWNlZnVsbHkuCisgKiBUaGV5IGNhbiBoYXBwZW4gZHVlIHRvIGEgX197Z2V0LHB1dH1fdXNlciBkdXJpbmcgYW4gb29wcy4KKyAqLworc3RhdGljIGludAorZG9fc2VjdF9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwlkb19iYWRfYXJlYSh0c2ssIHRzay0+YWN0aXZlX21tLCBhZGRyLCBmc3IsIHJlZ3MpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBhYm9ydCBoYW5kbGVyIGFsd2F5cyByZXR1cm5zICJmYXVsdCIuCisgKi8KK3N0YXRpYyBpbnQKK2RvX2JhZCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IGZzcl9pbmZvIHsKKwlpbnQJKCpmbikodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisJaW50CXNpZzsKKwljb25zdCBjaGFyICpuYW1lOworfSBmc3JfaW5mb1tdID0geworCS8qCisJICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN0YW5kYXJkIEFSTXYzIGFuZCBBUk12NCBhYm9ydHMuICBBUk12NQorCSAqIGRlZmluZXMgdGhlc2UgdG8gYmUgInByZWNpc2UiIGFib3J0cy4KKwkgKi8KKwl7IGRvX2JhZCwJCVNJR1NFR1YsICJ2ZWN0b3IgZXhjZXB0aW9uIgkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0lMTCwJICJhbGlnbm1lbnQgZXhjZXB0aW9uIgkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0tJTEwsICJ0ZXJtaW5hbCBleGNlcHRpb24iCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHSUxMLAkgImFsaWdubWVudCBleGNlcHRpb24iCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLAkgImV4dGVybmFsIGFib3J0IG9uIGxpbmVmZXRjaCIJICAgfSwKKwl7IGRvX3RyYW5zbGF0aW9uX2ZhdWx0LAlTSUdTRUdWLCAic2VjdGlvbiB0cmFuc2xhdGlvbiBmYXVsdCIJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywJICJleHRlcm5hbCBhYm9ydCBvbiBsaW5lZmV0Y2giCSAgIH0sCisJeyBkb19wYWdlX2ZhdWx0LAlTSUdTRUdWLCAicGFnZSB0cmFuc2xhdGlvbiBmYXVsdCIJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywJICJleHRlcm5hbCBhYm9ydCBvbiBub24tbGluZWZldGNoIiB9LAorCXsgZG9fYmFkLAkJU0lHU0VHViwgInNlY3Rpb24gZG9tYWluIGZhdWx0IgkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywJICJleHRlcm5hbCBhYm9ydCBvbiBub24tbGluZWZldGNoIiB9LAorCXsgZG9fYmFkLAkJU0lHU0VHViwgInBhZ2UgZG9tYWluIGZhdWx0IgkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywJICJleHRlcm5hbCBhYm9ydCBvbiB0cmFuc2xhdGlvbiIgICB9LAorCXsgZG9fc2VjdF9mYXVsdCwJU0lHU0VHViwgInNlY3Rpb24gcGVybWlzc2lvbiBmYXVsdCIJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywJICJleHRlcm5hbCBhYm9ydCBvbiB0cmFuc2xhdGlvbiIgICB9LAorCXsgZG9fcGFnZV9mYXVsdCwJU0lHU0VHViwgInBhZ2UgcGVybWlzc2lvbiBmYXVsdCIJICAgfSwKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgYXJlICJpbXByZWNpc2UiIGFib3J0cywgd2hpY2ggYXJlIHNpZ25hbGxlZCBieSBiaXQKKwkgKiAxMCBvZiB0aGUgRlNSLCBhbmQgbWF5IG5vdCBiZSByZWNvdmVyYWJsZS4gIFRoZXNlIGFyZSBvbmx5CisJICogc3VwcG9ydGVkIGlmIHRoZSBDUFUgYWJvcnQgaGFuZGxlciBzdXBwb3J0cyBiaXQgMTAuCisJICovCisJeyBkb19iYWQsCQlTSUdCVVMsICAidW5rbm93biAxNiIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgInVua25vd24gMTciCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgICJ1bmtub3duIDE4IgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAidW5rbm93biAxOSIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgImxvY2sgYWJvcnQiCQkJICAgfSwgLyogeHNjYWxlICovCisJeyBkb19iYWQsCQlTSUdCVVMsICAidW5rbm93biAyMSIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgImltcHJlY2lzZSBleHRlcm5hbCBhYm9ydCIJICAgfSwgLyogeHNjYWxlICovCisJeyBkb19iYWQsCQlTSUdCVVMsICAidW5rbm93biAyMyIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgImRjYWNoZSBwYXJpdHkgZXJyb3IiCQkgICB9LCAvKiB4c2NhbGUgKi8KKwl7IGRvX2JhZCwJCVNJR0JVUywgICJ1bmtub3duIDI1IgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAidW5rbm93biAyNiIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgInVua25vd24gMjciCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgICJ1bmtub3duIDI4IgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAidW5rbm93biAyOSIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgInVua25vd24gMzAiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgICJ1bmtub3duIDMxIgkJCSAgIH0KK307CisKK3ZvaWQgX19pbml0Citob29rX2ZhdWx0X2NvZGUoaW50IG5yLCBpbnQgKCpmbikodW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50LCBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJaW50IHNpZywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAobnIgPj0gMCAmJiBuciA8IEFSUkFZX1NJWkUoZnNyX2luZm8pKSB7CisJCWZzcl9pbmZvW25yXS5mbiAgID0gZm47CisJCWZzcl9pbmZvW25yXS5zaWcgID0gc2lnOworCQlmc3JfaW5mb1tucl0ubmFtZSA9IG5hbWU7CisJfQorfQorCisvKgorICogRGlzcGF0Y2ggYSBkYXRhIGFib3J0IHRvIHRoZSByZWxldmFudCBoYW5kbGVyLgorICovCithc21saW5rYWdlIHZvaWQKK2RvX0RhdGFBYm9ydCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWNvbnN0IHN0cnVjdCBmc3JfaW5mbyAqaW5mID0gZnNyX2luZm8gKyAoZnNyICYgMTUpICsgKChmc3IgJiAoMSA8PCAxMCkpID4+IDYpOworCisJaWYgKCFpbmYtPmZuKGFkZHIsIGZzciwgcmVncykpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0FMRVJUICJVbmhhbmRsZWQgZmF1bHQ6ICVzICgweCUwM3gpIGF0IDB4JTA4bHhcbiIsCisJCWluZi0+bmFtZSwgZnNyLCBhZGRyKTsKKwlmb3JjZV9zaWcoaW5mLT5zaWcsIGN1cnJlbnQpOworCXNob3dfcHRlKGN1cnJlbnQtPm1tLCBhZGRyKTsKKwlkaWVfaWZfa2VybmVsKCJPb3BzIiwgcmVncywgMCk7Cit9CisKK2FzbWxpbmthZ2Ugdm9pZAorZG9fUHJlZmV0Y2hBYm9ydCh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWRvX3RyYW5zbGF0aW9uX2ZhdWx0KGFkZHIsIDAsIHJlZ3MpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mYXVsdC5oIGIvYXJjaC9hcm0vbW0vZmF1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2I1OWU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vZmF1bHQuaApAQCAtMCwwICsxLDYgQEAKK3ZvaWQgZG9fYmFkX2FyZWEoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK3ZvaWQgc2hvd19wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcik7CisKK3Vuc2lnbmVkIGxvbmcgc2VhcmNoX2V4Y2VwdGlvbl90YWJsZSh1bnNpZ25lZCBsb25nIGFkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmx1c2guYyBiL2FyY2gvYXJtL21tL2ZsdXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZkZTQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL2ZsdXNoLmMKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS9mbHVzaC5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKworI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCitzdGF0aWMgdm9pZCBfX2ZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPmFjdGl2ZV9tbTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm1wbnQ7CisJc3RydWN0IHByaW9fdHJlZV9pdGVyIGl0ZXI7CisJcGdvZmZfdCBwZ29mZjsKKworCS8qCisJICogV3JpdGViYWNrIGFueSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUga2VybmVsIG1hcHBpbmcgb2YgdGhpcworCSAqIHBhZ2UuICBUaGlzIGVuc3VyZXMgdGhhdCBkYXRhIGluIHRoZSBwaHlzaWNhbCBwYWdlIGlzIG11dHVhbGx5CisJICogY29oZXJlbnQgd2l0aCB0aGUga2VybmVscyBtYXBwaW5nLgorCSAqLworCV9fY3B1Y19mbHVzaF9kY2FjaGVfcGFnZShwYWdlX2FkZHJlc3MocGFnZSkpOworCisJLyoKKwkgKiBJZiB0aGVyZSdzIG5vIG1hcHBpbmcgcG9pbnRlciBoZXJlLCB0aGVuIHRoaXMgcGFnZSBpc24ndAorCSAqIHZpc2libGUgdG8gdXNlcnNwYWNlIHlldCwgc28gdGhlcmUgYXJlIG5vIGNhY2hlIGxpbmVzCisJICogYXNzb2NpYXRlZCB3aXRoIGFueSBvdGhlciBhbGlhc2VzLgorCSAqLworCWlmICghbWFwcGluZykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBUaGVyZSBhcmUgcG9zc2libGUgdXNlciBzcGFjZSBtYXBwaW5ncyBvZiB0aGlzIHBhZ2U6CisJICogLSBWSVZUIGNhY2hlOiB3ZSBuZWVkIHRvIGFsc28gd3JpdGUgYmFjayBhbmQgaW52YWxpZGF0ZSBhbGwgdXNlcgorCSAqICAgZGF0YSBpbiB0aGUgY3VycmVudCBWTSB2aWV3IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhZ2UuCisJICogLSBhbGlhc2luZyBWSVBUOiB3ZSBvbmx5IG5lZWQgdG8gZmluZCBvbmUgbWFwcGluZyBvZiB0aGlzIHBhZ2UuCisJICovCisJcGdvZmYgPSBwYWdlLT5pbmRleCA8PCAoUEFHRV9DQUNIRV9TSElGVCAtIFBBR0VfU0hJRlQpOworCisJZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKTsKKwl2bWFfcHJpb190cmVlX2ZvcmVhY2gobXBudCwgJml0ZXIsICZtYXBwaW5nLT5pX21tYXAsIHBnb2ZmLCBwZ29mZikgeworCQl1bnNpZ25lZCBsb25nIG9mZnNldDsKKworCQkvKgorCQkgKiBJZiB0aGlzIFZNQSBpcyBub3QgaW4gb3VyIE1NLCB3ZSBjYW4gaWdub3JlIGl0LgorCQkgKi8KKwkJaWYgKG1wbnQtPnZtX21tICE9IG1tKQorCQkJY29udGludWU7CisJCWlmICghKG1wbnQtPnZtX2ZsYWdzICYgVk1fTUFZU0hBUkUpKQorCQkJY29udGludWU7CisJCW9mZnNldCA9IChwZ29mZiAtIG1wbnQtPnZtX3Bnb2ZmKSA8PCBQQUdFX1NISUZUOworCQlmbHVzaF9jYWNoZV9wYWdlKG1wbnQsIG1wbnQtPnZtX3N0YXJ0ICsgb2Zmc2V0LCBwYWdlX3RvX3BmbihwYWdlKSk7CisJCWlmIChjYWNoZV9pc192aXB0KCkpCisJCQlicmVhazsKKwl9CisJZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpOworfQorCisvKgorICogRW5zdXJlIGNhY2hlIGNvaGVyZW5jeSBiZXR3ZWVuIGtlcm5lbCBtYXBwaW5nIGFuZCB1c2Vyc3BhY2UgbWFwcGluZworICogb2YgdGhpcyBwYWdlLgorICoKKyAqIFdlIGhhdmUgdGhyZWUgY2FzZXMgdG8gY29uc2lkZXI6CisgKiAgLSBWSVBUIG5vbi1hbGlhc2luZyBjYWNoZTogZnVsbHkgY29oZXJlbnQgc28gbm90aGluZyByZXF1aXJlZC4KKyAqICAtIFZJVlQ6IGZ1bGx5IGFsaWFzaW5nLCBzbyB3ZSBuZWVkIHRvIGhhbmRsZSBldmVyeSBhbGlhcyBpbiBvdXIKKyAqICAgICAgICAgIGN1cnJlbnQgVk0gdmlldy4KKyAqICAtIFZJUFQgYWxpYXNpbmc6IG5lZWQgdG8gaGFuZGxlIG9uZSBhbGlhcyBpbiBvdXIgY3VycmVudCBWTSB2aWV3LgorICoKKyAqIElmIHdlIG5lZWQgdG8gaGFuZGxlIGFsaWFzaW5nOgorICogIElmIHRoZSBwYWdlIG9ubHkgZXhpc3RzIGluIHRoZSBwYWdlIGNhY2hlIGFuZCB0aGVyZSBhcmUgbm8gdXNlcgorICogIHNwYWNlIG1hcHBpbmdzLCB3ZSBjYW4gYmUgbGF6eSBhbmQgcmVtZW1iZXIgdGhhdCB3ZSBtYXkgaGF2ZSBkaXJ0eQorICogIGtlcm5lbCBjYWNoZSBsaW5lcyBmb3IgbGF0ZXIuICBPdGhlcndpc2UsIHdlIGFzc3VtZSB3ZSBoYXZlCisgKiAgYWxpYXNpbmcgbWFwcGluZ3MuCisgKi8KK3ZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7CisKKwlpZiAoY2FjaGVfaXNfdmlwdF9ub25hbGlhc2luZygpKQorCQlyZXR1cm47CisKKwlpZiAobWFwcGluZyAmJiAhbWFwcGluZ19tYXBwZWQobWFwcGluZykpCisJCXNldF9iaXQoUEdfZGNhY2hlX2RpcnR5LCAmcGFnZS0+ZmxhZ3MpOworCWVsc2UKKwkJX19mbHVzaF9kY2FjaGVfcGFnZShtYXBwaW5nLCBwYWdlKTsKK30KK0VYUE9SVF9TWU1CT0woZmx1c2hfZGNhY2hlX3BhZ2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMTU2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9pbml0LmMKQEAgLTAsMCArMSw2MjEgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vaW5pdC5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vdGxiLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNkZWZpbmUgVEFCTEVfU0laRQkoMiAqIFBUUlNfUEVSX1BURSAqIHNpemVvZihwdGVfdCkpCisKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7CisKK2V4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdOworZXh0ZXJuIHZvaWQgX3N0ZXh0LCBfdGV4dCwgX2V0ZXh0LCBfX2RhdGFfc3RhcnQsIF9lbmQsIF9faW5pdF9iZWdpbiwgX19pbml0X2VuZDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBoeXNfaW5pdHJkX3N0YXJ0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGh5c19pbml0cmRfc2l6ZTsKKworLyoKKyAqIFRoZSBzb2xlIHVzZSBvZiB0aGlzIGlzIHRvIHBhc3MgbWVtb3J5IGNvbmZpZ3VyYXRpb24KKyAqIGRhdGEgZnJvbSBwYWdpbmdfaW5pdCB0byBtZW1faW5pdC4KKyAqLworc3RhdGljIHN0cnVjdCBtZW1pbmZvIG1lbWluZm8gX19pbml0ZGF0YSA9IHsgMCwgfTsKKworLyoKKyAqIGVtcHR5X3plcm9fcGFnZSBpcyBhIHNwZWNpYWwgcGFnZSB0aGF0IGlzIHVzZWQgZm9yCisgKiB6ZXJvLWluaXRpYWxpemVkIGRhdGEgYW5kIENPVy4KKyAqLworc3RydWN0IHBhZ2UgKmVtcHR5X3plcm9fcGFnZTsKKwordm9pZCBzaG93X21lbSh2b2lkKQoreworCWludCBmcmVlID0gMCwgdG90YWwgPSAwLCByZXNlcnZlZCA9IDA7CisJaW50IHNoYXJlZCA9IDAsIGNhY2hlZCA9IDAsIHNsYWIgPSAwLCBub2RlOworCisJcHJpbnRrKCJNZW0taW5mbzpcbiIpOworCXNob3dfZnJlZV9hcmVhcygpOworCXByaW50aygiRnJlZSBzd2FwOiAgICAgICAlNmxka0JcbiIsIG5yX3N3YXBfcGFnZXM8PChQQUdFX1NISUZULTEwKSk7CisKKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlLCAqZW5kOworCisJCXBhZ2UgPSBOT0RFX01FTV9NQVAobm9kZSk7CisJCWVuZCAgPSBwYWdlICsgTk9ERV9EQVRBKG5vZGUpLT5ub2RlX3NwYW5uZWRfcGFnZXM7CisKKwkJZG8geworCQkJdG90YWwrKzsKKwkJCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCisJCQkJcmVzZXJ2ZWQrKzsKKwkJCWVsc2UgaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpCisJCQkJY2FjaGVkKys7CisJCQllbHNlIGlmIChQYWdlU2xhYihwYWdlKSkKKwkJCQlzbGFiKys7CisJCQllbHNlIGlmICghcGFnZV9jb3VudChwYWdlKSkKKwkJCQlmcmVlKys7CisJCQllbHNlCisJCQkJc2hhcmVkICs9IHBhZ2VfY291bnQocGFnZSkgLSAxOworCQkJcGFnZSsrOworCQl9IHdoaWxlIChwYWdlIDwgZW5kKTsKKwl9CisKKwlwcmludGsoIiVkIHBhZ2VzIG9mIFJBTVxuIiwgdG90YWwpOworCXByaW50aygiJWQgZnJlZSBwYWdlc1xuIiwgZnJlZSk7CisJcHJpbnRrKCIlZCByZXNlcnZlZCBwYWdlc1xuIiwgcmVzZXJ2ZWQpOworCXByaW50aygiJWQgc2xhYiBwYWdlc1xuIiwgc2xhYik7CisJcHJpbnRrKCIlZCBwYWdlcyBzaGFyZWRcbiIsIHNoYXJlZCk7CisJcHJpbnRrKCIlZCBwYWdlcyBzd2FwIGNhY2hlZFxuIiwgY2FjaGVkKTsKK30KKworc3RydWN0IG5vZGVfaW5mbyB7CisJdW5zaWduZWQgaW50IHN0YXJ0OworCXVuc2lnbmVkIGludCBlbmQ7CisJaW50IGJvb3RtYXBfcGFnZXM7Cit9OworCisjZGVmaW5lIE9fUEZOX0RPV04oeCkJKCh4KSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBWX1BGTl9ET1dOKHgpCU9fUEZOX0RPV04oX19wYSh4KSkKKworI2RlZmluZSBPX1BGTl9VUCh4KQkoUEFHRV9BTElHTih4KSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBWX1BGTl9VUCh4KQlPX1BGTl9VUChfX3BhKHgpKQorCisjZGVmaW5lIFBGTl9TSVpFKHgpCSgoeCkgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgUEZOX1JBTkdFKHMsZSkJUEZOX1NJWkUoUEFHRV9BTElHTigodW5zaWduZWQgbG9uZykoZSkpIC0gXAorCQkJCSgoKHVuc2lnbmVkIGxvbmcpKHMpKSAmIFBBR0VfTUFTSykpCisKKy8qCisgKiBGSVhNRTogV2UgcmVhbGx5IHdhbnQgdG8gYXZvaWQgYWxsb2NhdGluZyB0aGUgYm9vdG1hcCBiaXRtYXAKKyAqIG92ZXIgdGhlIHRvcCBvZiB0aGUgaW5pdHJkLiAgSG9wZWZ1bGx5LCB0aGlzIGlzIGxvY2F0ZWQgdG93YXJkcworICogdGhlIHN0YXJ0IG9mIGEgYmFuaywgc28gaWYgd2UgYWxsb2NhdGUgdGhlIGJvb3RtYXAgYml0bWFwIGF0CisgKiB0aGUgZW5kLCB3ZSB3b24ndCBjbGFzaC4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQKK2ZpbmRfYm9vdG1hcF9wZm4oaW50IG5vZGUsIHN0cnVjdCBtZW1pbmZvICptaSwgdW5zaWduZWQgaW50IGJvb3RtYXBfcGFnZXMpCit7CisJdW5zaWduZWQgaW50IHN0YXJ0X3BmbiwgYmFuaywgYm9vdG1hcF9wZm47CisKKwlzdGFydF9wZm4gICA9IFZfUEZOX1VQKCZfZW5kKTsKKwlib290bWFwX3BmbiA9IDA7CisKKwlmb3IgKGJhbmsgPSAwOyBiYW5rIDwgbWktPm5yX2JhbmtzOyBiYW5rICsrKSB7CisJCXVuc2lnbmVkIGludCBzdGFydCwgZW5kOworCisJCWlmIChtaS0+YmFua1tiYW5rXS5ub2RlICE9IG5vZGUpCisJCQljb250aW51ZTsKKworCQlzdGFydCA9IE9fUEZOX1VQKG1pLT5iYW5rW2JhbmtdLnN0YXJ0KTsKKwkJZW5kICAgPSBPX1BGTl9ET1dOKG1pLT5iYW5rW2JhbmtdLnNpemUgKworCQkJCSAgIG1pLT5iYW5rW2JhbmtdLnN0YXJ0KTsKKworCQlpZiAoZW5kIDwgc3RhcnRfcGZuKQorCQkJY29udGludWU7CisKKwkJaWYgKHN0YXJ0IDwgc3RhcnRfcGZuKQorCQkJc3RhcnQgPSBzdGFydF9wZm47CisKKwkJaWYgKGVuZCA8PSBzdGFydCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChlbmQgLSBzdGFydCA+PSBib290bWFwX3BhZ2VzKSB7CisJCQlib290bWFwX3BmbiA9IHN0YXJ0OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoYm9vdG1hcF9wZm4gPT0gMCkKKwkJQlVHKCk7CisKKwlyZXR1cm4gYm9vdG1hcF9wZm47Cit9CisKKy8qCisgKiBTY2FuIHRoZSBtZW1vcnkgaW5mbyBzdHJ1Y3R1cmUgYW5kIHB1bGwgb3V0OgorICogIC0gdGhlIGVuZCBvZiBtZW1vcnkKKyAqICAtIHRoZSBudW1iZXIgb2Ygbm9kZXMKKyAqICAtIHRoZSBwZm4gcmFuZ2Ugb2YgZWFjaCBub2RlCisgKiAgLSB0aGUgbnVtYmVyIG9mIGJvb3RtZW0gYml0bWFwIHBhZ2VzCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0CitmaW5kX21lbWVuZF9hbmRfbm9kZXMoc3RydWN0IG1lbWluZm8gKm1pLCBzdHJ1Y3Qgbm9kZV9pbmZvICpucCkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgYm9vdG1lbV9wYWdlcyA9IDAsIG1lbWVuZF9wZm4gPSAwOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1OT0RFUzsgaSsrKSB7CisJCW5wW2ldLnN0YXJ0ID0gLTFVOworCQlucFtpXS5lbmQgPSAwOworCQlucFtpXS5ib290bWFwX3BhZ2VzID0gMDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbWktPm5yX2JhbmtzOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOworCQlpbnQgbm9kZTsKKworCQlpZiAobWktPmJhbmtbaV0uc2l6ZSA9PSAwKSB7CisJCQkvKgorCQkJICogTWFyayB0aGlzIGJhbmsgd2l0aCBhbiBpbnZhbGlkIG5vZGUgbnVtYmVyCisJCQkgKi8KKwkJCW1pLT5iYW5rW2ldLm5vZGUgPSAtMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbm9kZSA9IG1pLT5iYW5rW2ldLm5vZGU7CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIHdlIGhhdmVuJ3QgZXhjZWVkZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIG5vZGVzCisJCSAqIHRoYXQgd2UgaGF2ZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uICBJZiB3ZSBoYXZlLCB3ZSdyZSBpbgorCQkgKiB0cm91YmxlLiAgKG1heWJlIHdlIG91Z2h0IHRvIGxpbWl0LCBpbnN0ZWFkIG9mIGJ1Z2dpbmc/KQorCQkgKi8KKwkJaWYgKG5vZGUgPj0gTUFYX05VTU5PREVTKQorCQkJQlVHKCk7CisJCW5vZGVfc2V0X29ubGluZShub2RlKTsKKworCQkvKgorCQkgKiBHZXQgdGhlIHN0YXJ0IGFuZCBlbmQgcGZucyBmb3IgdGhpcyBiYW5rCisJCSAqLworCQlzdGFydCA9IE9fUEZOX1VQKG1pLT5iYW5rW2ldLnN0YXJ0KTsKKwkJZW5kICAgPSBPX1BGTl9ET1dOKG1pLT5iYW5rW2ldLnN0YXJ0ICsgbWktPmJhbmtbaV0uc2l6ZSk7CisKKwkJaWYgKG5wW25vZGVdLnN0YXJ0ID4gc3RhcnQpCisJCQlucFtub2RlXS5zdGFydCA9IHN0YXJ0OworCisJCWlmIChucFtub2RlXS5lbmQgPCBlbmQpCisJCQlucFtub2RlXS5lbmQgPSBlbmQ7CisKKwkJaWYgKG1lbWVuZF9wZm4gPCBlbmQpCisJCQltZW1lbmRfcGZuID0gZW5kOworCX0KKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgcGFnZXMgd2UgcmVxdWlyZSB0bworCSAqIHN0b3JlIHRoZSBib290bWVtIGJpdG1hcHMuCisJICovCisJZm9yX2VhY2hfb25saW5lX25vZGUoaSkgeworCQlpZiAobnBbaV0uZW5kID09IDApCisJCQljb250aW51ZTsKKworCQlucFtpXS5ib290bWFwX3BhZ2VzID0gYm9vdG1lbV9ib290bWFwX3BhZ2VzKG5wW2ldLmVuZCAtCisJCQkJCQkJICAgIG5wW2ldLnN0YXJ0KTsKKwkJYm9vdG1lbV9wYWdlcyArPSBucFtpXS5ib290bWFwX3BhZ2VzOworCX0KKworCWhpZ2hfbWVtb3J5ID0gX192YShtZW1lbmRfcGZuIDw8IFBBR0VfU0hJRlQpOworCisJLyoKKwkgKiBUaGlzIGRvZXNuJ3Qgc2VlbSB0byBiZSB1c2VkIGJ5IHRoZSBMaW51eCBtZW1vcnkKKwkgKiBtYW5hZ2VyIGFueSBtb3JlLiAgSWYgd2UgY2FuIGdldCByaWQgb2YgaXQsIHdlCisJICogYWxzbyBnZXQgcmlkIG9mIHNvbWUgb2YgdGhlIHN0dWZmIGFib3ZlIGFzIHdlbGwuCisJICovCisJbWF4X2xvd19wZm4gPSBtZW1lbmRfcGZuIC0gT19QRk5fRE9XTihQSFlTX09GRlNFVCk7CisJbWF4X3BmbiA9IG1lbWVuZF9wZm4gLSBPX1BGTl9ET1dOKFBIWVNfT0ZGU0VUKTsKKworCXJldHVybiBib290bWVtX3BhZ2VzOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjaGVja19pbml0cmQoc3RydWN0IG1lbWluZm8gKm1pKQoreworCWludCBpbml0cmRfbm9kZSA9IC0yOworI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAorCXVuc2lnbmVkIGxvbmcgZW5kID0gcGh5c19pbml0cmRfc3RhcnQgKyBwaHlzX2luaXRyZF9zaXplOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgaW5pdHJkIGlzIHdpdGhpbiBhIHZhbGlkIGFyZWEgb2YKKwkgKiBtZW1vcnkuCisJICovCisJaWYgKHBoeXNfaW5pdHJkX3NpemUpIHsKKwkJdW5zaWduZWQgaW50IGk7CisKKwkJaW5pdHJkX25vZGUgPSAtMTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbWktPm5yX2JhbmtzOyBpKyspIHsKKwkJCXVuc2lnbmVkIGxvbmcgYmFua19lbmQ7CisKKwkJCWJhbmtfZW5kID0gbWktPmJhbmtbaV0uc3RhcnQgKyBtaS0+YmFua1tpXS5zaXplOworCisJCQlpZiAobWktPmJhbmtbaV0uc3RhcnQgPD0gcGh5c19pbml0cmRfc3RhcnQgJiYKKwkJCSAgICBlbmQgPD0gYmFua19lbmQpCisJCQkJaW5pdHJkX25vZGUgPSBtaS0+YmFua1tpXS5ub2RlOworCQl9CisJfQorCisJaWYgKGluaXRyZF9ub2RlID09IC0xKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW5pdHJkICgweCUwOGx4IC0gMHglMDhseCkgZXh0ZW5kcyBiZXlvbmQgIgorCQkgICAgICAgInBoeXNpY2FsIG1lbW9yeSAtIGRpc2FibGluZyBpbml0cmRcbiIsCisJCSAgICAgICBwaHlzX2luaXRyZF9zdGFydCwgZW5kKTsKKwkJcGh5c19pbml0cmRfc3RhcnQgPSBwaHlzX2luaXRyZF9zaXplID0gMDsKKwl9CisjZW5kaWYKKworCXJldHVybiBpbml0cmRfbm9kZTsKK30KKworLyoKKyAqIFJlc2VydmUgdGhlIHZhcmlvdXMgcmVnaW9ucyBvZiBub2RlIDAKKyAqLworc3RhdGljIF9faW5pdCB2b2lkIHJlc2VydmVfbm9kZV96ZXJvKHVuc2lnbmVkIGludCBib290bWFwX3BmbiwgdW5zaWduZWQgaW50IGJvb3RtYXBfcGFnZXMpCit7CisJcGdfZGF0YV90ICpwZ2RhdCA9IE5PREVfREFUQSgwKTsKKwl1bnNpZ25lZCBsb25nIHJlc19zaXplID0gMDsKKworCS8qCisJICogUmVnaXN0ZXIgdGhlIGtlcm5lbCB0ZXh0IGFuZCBkYXRhIHdpdGggYm9vdG1lbS4KKwkgKiBOb3RlIHRoYXQgdGhpcyBjYW4gb25seSBiZSBpbiBub2RlIDAuCisJICovCisjaWZkZWYgQ09ORklHX1hJUF9LRVJORUwKKwlyZXNlcnZlX2Jvb3RtZW1fbm9kZShwZ2RhdCwgX19wYSgmX19kYXRhX3N0YXJ0KSwgJl9lbmQgLSAmX19kYXRhX3N0YXJ0KTsKKyNlbHNlCisJcmVzZXJ2ZV9ib290bWVtX25vZGUocGdkYXQsIF9fcGEoJl9zdGV4dCksICZfZW5kIC0gJl9zdGV4dCk7CisjZW5kaWYKKworCS8qCisJICogUmVzZXJ2ZSB0aGUgcGFnZSB0YWJsZXMuICBUaGVzZSBhcmUgYWxyZWFkeSBpbiB1c2UsCisJICogYW5kIGNhbiBvbmx5IGJlIGluIG5vZGUgMC4KKwkgKi8KKwlyZXNlcnZlX2Jvb3RtZW1fbm9kZShwZ2RhdCwgX19wYShzd2FwcGVyX3BnX2RpciksCisJCQkgICAgIFBUUlNfUEVSX1BHRCAqIHNpemVvZihwZ2RfdCkpOworCisJLyoKKwkgKiBBbmQgZG9uJ3QgZm9yZ2V0IHRvIHJlc2VydmUgdGhlIGFsbG9jYXRvciBiaXRtYXAsCisJICogd2hpY2ggd2lsbCBiZSBmcmVlZCBsYXRlci4KKwkgKi8KKwlyZXNlcnZlX2Jvb3RtZW1fbm9kZShwZ2RhdCwgYm9vdG1hcF9wZm4gPDwgUEFHRV9TSElGVCwKKwkJCSAgICAgYm9vdG1hcF9wYWdlcyA8PCBQQUdFX1NISUZUKTsKKworCS8qCisJICogSG1tLi4uIFRoaXMgc2hvdWxkIGdvIGVsc2V3aGVyZSwgYnV0IHdlIHJlYWxseSByZWFsbHkgbmVlZCB0bworCSAqIHN0b3AgdGhpbmdzIGFsbG9jYXRpbmcgdGhlIGxvdyBtZW1vcnk7IGlkZWFsbHkgd2UgbmVlZCBhIGJldHRlcgorCSAqIGltcGxlbWVudGF0aW9uIG9mIEdGUF9ETUEgd2hpY2ggZG9lcyBub3QgYXNzdW1lIHRoYXQgRE1BLWFibGUKKwkgKiBtZW1vcnkgc3RhcnRzIGF0IHplcm8uCisJICovCisJaWYgKG1hY2hpbmVfaXNfaW50ZWdyYXRvcigpIHx8IG1hY2hpbmVfaXNfY2ludGVncmF0b3IoKSkKKwkJcmVzX3NpemUgPSBfX3BhKHN3YXBwZXJfcGdfZGlyKSAtIFBIWVNfT0ZGU0VUOworCisJLyoKKwkgKiBUaGVzZSBzaG91bGQgbGlrZXdpc2UgZ28gZWxzZXdoZXJlLiAgVGhleSBwcmUtcmVzZXJ2ZSB0aGUKKwkgKiBzY3JlZW4gbWVtb3J5IHJlZ2lvbiBhdCB0aGUgc3RhcnQgb2YgbWFpbiBzeXN0ZW0gbWVtb3J5LgorCSAqLworCWlmIChtYWNoaW5lX2lzX2VkYjcyMTEoKSkKKwkJcmVzX3NpemUgPSAweDAwMDIwMDAwOworCWlmIChtYWNoaW5lX2lzX3A3MjB0KCkpCisJCXJlc19zaXplID0gMHgwMDAxNDAwMDsKKworI2lmZGVmIENPTkZJR19TQTExMTEKKwkvKgorCSAqIEJlY2F1c2Ugb2YgdGhlIFNBMTExMSBETUEgYnVnLCB3ZSB3YW50IHRvIHByZXNlcnZlIG91cgorCSAqIHByZWNpb3VzIERNQS1hYmxlIG1lbW9yeS4uLgorCSAqLworCXJlc19zaXplID0gX19wYShzd2FwcGVyX3BnX2RpcikgLSBQSFlTX09GRlNFVDsKKyNlbmRpZgorCWlmIChyZXNfc2l6ZSkKKwkJcmVzZXJ2ZV9ib290bWVtX25vZGUocGdkYXQsIFBIWVNfT0ZGU0VULCByZXNfc2l6ZSk7Cit9CisKKy8qCisgKiBSZWdpc3RlciBhbGwgYXZhaWxhYmxlIFJBTSBpbiB0aGlzIG5vZGUgd2l0aCB0aGUgYm9vdG1lbSBhbGxvY2F0b3IuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2Jvb3RtZW1fbm9kZV9iYW5rKGludCBub2RlLCBzdHJ1Y3QgbWVtaW5mbyAqbWkpCit7CisJcGdfZGF0YV90ICpwZ2RhdCA9IE5PREVfREFUQShub2RlKTsKKwlpbnQgYmFuazsKKworCWZvciAoYmFuayA9IDA7IGJhbmsgPCBtaS0+bnJfYmFua3M7IGJhbmsrKykKKwkJaWYgKG1pLT5iYW5rW2JhbmtdLm5vZGUgPT0gbm9kZSkKKwkJCWZyZWVfYm9vdG1lbV9ub2RlKHBnZGF0LCBtaS0+YmFua1tiYW5rXS5zdGFydCwKKwkJCQkJICBtaS0+YmFua1tiYW5rXS5zaXplKTsKK30KKworLyoKKyAqIEluaXRpYWxpc2UgdGhlIGJvb3RtZW0gYWxsb2NhdG9yIGZvciBhbGwgbm9kZXMuICBUaGlzIGlzIGNhbGxlZAorICogZWFybHkgZHVyaW5nIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgaW5pdGlhbGlzYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBib290bWVtX2luaXQoc3RydWN0IG1lbWluZm8gKm1pKQoreworCXN0cnVjdCBub2RlX2luZm8gbm9kZV9pbmZvW01BWF9OVU1OT0RFU10sICpucCA9IG5vZGVfaW5mbzsKKwl1bnNpZ25lZCBpbnQgYm9vdG1hcF9wYWdlcywgYm9vdG1hcF9wZm4sIG1hcF9wZzsKKwlpbnQgbm9kZSwgaW5pdHJkX25vZGU7CisKKwlib290bWFwX3BhZ2VzID0gZmluZF9tZW1lbmRfYW5kX25vZGVzKG1pLCBucCk7CisJYm9vdG1hcF9wZm4gICA9IGZpbmRfYm9vdG1hcF9wZm4oMCwgbWksIGJvb3RtYXBfcGFnZXMpOworCWluaXRyZF9ub2RlICAgPSBjaGVja19pbml0cmQobWkpOworCisJbWFwX3BnID0gYm9vdG1hcF9wZm47CisKKwkvKgorCSAqIEluaXRpYWxpc2UgdGhlIGJvb3RtZW0gbm9kZXMuCisJICoKKwkgKiBXaGF0IHdlIHJlYWxseSB3YW50IHRvIGRvIGlzOgorCSAqCisJICogICB1bm1hcF9hbGxfcmVnaW9uc19leGNlcHRfa2VybmVsKCk7CisJICogICBmb3JfZWFjaF9ub2RlX2luX3JldmVyc2Vfb3JkZXIobm9kZSkgeworCSAqICAgICBtYXBfbm9kZShub2RlKTsKKwkgKiAgICAgYWxsb2NhdGVfYm9vdG1lbV9tYXAobm9kZSk7CisJICogICAgIGluaXRfYm9vdG1lbV9ub2RlKG5vZGUpOworCSAqICAgICBmcmVlX2Jvb3RtZW1fbm9kZShub2RlKTsKKwkgKiAgIH0KKwkgKgorCSAqIGJ1dCB0aGlzIGlzIGEgMi41LXR5cGUgY2hhbmdlLiAgRm9yIG5vdywgd2UganVzdCBzZXQKKwkgKiB0aGUgbm9kZXMgdXAgaW4gcmV2ZXJzZSBvcmRlci4KKwkgKgorCSAqICh3ZSBjb3VsZCBhbHNvIGRvIHdpdGggcm9sbGluZyBib290bWVtX2luaXQgYW5kIHBhZ2luZ19pbml0CisJICogaW50byBvbmUgZ2VuZXJpYyAibWVtb3J5X2luaXQiIHR5cGUgZnVuY3Rpb24pLgorCSAqLworCW5wICs9IG51bV9vbmxpbmVfbm9kZXMoKSAtIDE7CisJZm9yIChub2RlID0gbnVtX29ubGluZV9ub2RlcygpIC0gMTsgbm9kZSA+PSAwOyBub2RlLS0sIG5wLS0pIHsKKwkJLyoKKwkJICogSWYgdGhlcmUgYXJlIG5vIHBhZ2VzIGluIHRoaXMgbm9kZSwgaWdub3JlIGl0LgorCQkgKiBOb3RlIHRoYXQgbm9kZSAwIG11c3QgYWx3YXlzIGhhdmUgc29tZSBwYWdlcy4KKwkJICovCisJCWlmIChucC0+ZW5kID09IDAgfHwgIW5vZGVfb25saW5lKG5vZGUpKSB7CisJCQlpZiAobm9kZSA9PSAwKQorCQkJCUJVRygpOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBJbml0aWFsaXNlIHRoZSBib290bWVtIGFsbG9jYXRvci4KKwkJICovCisJCWluaXRfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlKSwgbWFwX3BnLCBucC0+c3RhcnQsIG5wLT5lbmQpOworCQlmcmVlX2Jvb3RtZW1fbm9kZV9iYW5rKG5vZGUsIG1pKTsKKwkJbWFwX3BnICs9IG5wLT5ib290bWFwX3BhZ2VzOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgbm9kZSAwLCB3ZSBuZWVkIHRvIHJlc2VydmUgc29tZSBhcmVhcyBBU0FQIC0KKwkJICogd2UgbWF5IHVzZSBib290bWVtIG9uIG5vZGUgMCB0byBzZXR1cCB0aGUgb3RoZXIgbm9kZXMuCisJCSAqLworCQlpZiAobm9kZSA9PSAwKQorCQkJcmVzZXJ2ZV9ub2RlX3plcm8oYm9vdG1hcF9wZm4sIGJvb3RtYXBfcGFnZXMpOworCX0KKworCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECisJaWYgKHBoeXNfaW5pdHJkX3NpemUgJiYgaW5pdHJkX25vZGUgPj0gMCkgeworCQlyZXNlcnZlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoaW5pdHJkX25vZGUpLCBwaHlzX2luaXRyZF9zdGFydCwKKwkJCQkgICAgIHBoeXNfaW5pdHJkX3NpemUpOworCQlpbml0cmRfc3RhcnQgPSBfX3BoeXNfdG9fdmlydChwaHlzX2luaXRyZF9zdGFydCk7CisJCWluaXRyZF9lbmQgPSBpbml0cmRfc3RhcnQgKyBwaHlzX2luaXRyZF9zaXplOworCX0KKyNlbmRpZgorCisJQlVHX09OKG1hcF9wZyAhPSBib290bWFwX3BmbiArIGJvb3RtYXBfcGFnZXMpOworfQorCisvKgorICogcGFnaW5nX2luaXQoKSBzZXRzIHVwIHRoZSBwYWdlIHRhYmxlcywgaW5pdGlhbGlzZXMgdGhlIHpvbmUgbWVtb3J5CisgKiBtYXBzLCBhbmQgc2V0cyB1cCB0aGUgemVybyBwYWdlLCBiYWQgcGFnZSBhbmQgYmFkIHBhZ2UgdGFibGVzLgorICovCit2b2lkIF9faW5pdCBwYWdpbmdfaW5pdChzdHJ1Y3QgbWVtaW5mbyAqbWksIHN0cnVjdCBtYWNoaW5lX2Rlc2MgKm1kZXNjKQoreworCXZvaWQgKnplcm9fcGFnZTsKKwlpbnQgbm9kZTsKKworCWJvb3RtZW1faW5pdChtaSk7CisKKwltZW1jcHkoJm1lbWluZm8sIG1pLCBzaXplb2YobWVtaW5mbykpOworCisJLyoKKwkgKiBhbGxvY2F0ZSB0aGUgemVybyBwYWdlLiAgTm90ZSB0aGF0IHdlIGNvdW50IG9uIHRoaXMgZ29pbmcgb2suCisJICovCisJemVyb19wYWdlID0gYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoUEFHRV9TSVpFKTsKKworCS8qCisJICogaW5pdGlhbGlzZSB0aGUgcGFnZSB0YWJsZXMuCisJICovCisJbWVtdGFibGVfaW5pdChtaSk7CisJaWYgKG1kZXNjLT5tYXBfaW8pCisJCW1kZXNjLT5tYXBfaW8oKTsKKwlmbHVzaF90bGJfYWxsKCk7CisKKwkvKgorCSAqIGluaXRpYWxpc2UgdGhlIHpvbmVzIHdpdGhpbiBlYWNoIG5vZGUKKwkgKi8KKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7CisJCXVuc2lnbmVkIGxvbmcgem9uZV9zaXplW01BWF9OUl9aT05FU107CisJCXVuc2lnbmVkIGxvbmcgemhvbGVfc2l6ZVtNQVhfTlJfWk9ORVNdOworCQlzdHJ1Y3QgYm9vdG1lbV9kYXRhICpiZGF0YTsKKwkJcGdfZGF0YV90ICpwZ2RhdDsKKwkJaW50IGk7CisKKwkJLyoKKwkJICogSW5pdGlhbGlzZSB0aGUgem9uZSBzaXplIGluZm9ybWF0aW9uLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IE1BWF9OUl9aT05FUzsgaSsrKSB7CisJCQl6b25lX3NpemVbaV0gID0gMDsKKwkJCXpob2xlX3NpemVbaV0gPSAwOworCQl9CisKKwkJcGdkYXQgPSBOT0RFX0RBVEEobm9kZSk7CisJCWJkYXRhID0gcGdkYXQtPmJkYXRhOworCisJCS8qCisJCSAqIFRoZSBzaXplIG9mIHRoaXMgbm9kZSBoYXMgYWxyZWFkeSBiZWVuIGRldGVybWluZWQuCisJCSAqIElmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgZmFuY3kgd2l0aCB0aGUgYWxsb2NhdGlvbgorCQkgKiBvZiB0aGlzIG1lbW9yeSB0byB0aGUgem9uZXMsIG5vdyBpcyB0aGUgdGltZSB0byBkbworCQkgKiBpdC4KKwkJICovCisJCXpvbmVfc2l6ZVswXSA9IGJkYXRhLT5ub2RlX2xvd19wZm4gLQorCQkJCShiZGF0YS0+bm9kZV9ib290X3N0YXJ0ID4+IFBBR0VfU0hJRlQpOworCisJCS8qCisJCSAqIElmIHRoaXMgem9uZSBoYXMgemVybyBzaXplLCBza2lwIGl0LgorCQkgKi8KKwkJaWYgKCF6b25lX3NpemVbMF0pCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBGb3IgZWFjaCBiYW5rIGluIHRoaXMgbm9kZSwgY2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZQorCQkgKiBob2xlcy4gIGhvbGVzID0gbm9kZV9zaXplIC0gc3VtKGJhbmtfc2l6ZXNfaW5fbm9kZSkKKwkJICovCisJCXpob2xlX3NpemVbMF0gPSB6b25lX3NpemVbMF07CisJCWZvciAoaSA9IDA7IGkgPCBtaS0+bnJfYmFua3M7IGkrKykgeworCQkJaWYgKG1pLT5iYW5rW2ldLm5vZGUgIT0gbm9kZSkKKwkJCQljb250aW51ZTsKKworCQkJemhvbGVfc2l6ZVswXSAtPSBtaS0+YmFua1tpXS5zaXplID4+IFBBR0VfU0hJRlQ7CisJCX0KKworCQkvKgorCQkgKiBBZGp1c3QgdGhlIHNpemVzIGFjY29yZGluZyB0byBhbnkgc3BlY2lhbAorCQkgKiByZXF1aXJlbWVudHMgZm9yIHRoaXMgbWFjaGluZSB0eXBlLgorCQkgKi8KKwkJYXJjaF9hZGp1c3Rfem9uZXMobm9kZSwgem9uZV9zaXplLCB6aG9sZV9zaXplKTsKKworCQlmcmVlX2FyZWFfaW5pdF9ub2RlKG5vZGUsIHBnZGF0LCB6b25lX3NpemUsCisJCQkJYmRhdGEtPm5vZGVfYm9vdF9zdGFydCA+PiBQQUdFX1NISUZULCB6aG9sZV9zaXplKTsKKwl9CisKKwkvKgorCSAqIGZpbmlzaCBvZmYgdGhlIGJhZCBwYWdlcyBvbmNlCisJICogdGhlIG1lbV9tYXAgaXMgaW5pdGlhbGlzZWQKKwkgKi8KKwltZW16ZXJvKHplcm9fcGFnZSwgUEFHRV9TSVpFKTsKKwllbXB0eV96ZXJvX3BhZ2UgPSB2aXJ0X3RvX3BhZ2UoemVyb19wYWdlKTsKKwlmbHVzaF9kY2FjaGVfcGFnZShlbXB0eV96ZXJvX3BhZ2UpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9hcmVhKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIGNoYXIgKnMpCit7CisJdW5zaWduZWQgaW50IHNpemUgPSAoZW5kIC0gYWRkcikgPj4gMTA7CisKKwlmb3IgKDsgYWRkciA8IGVuZDsgYWRkciArPSBQQUdFX1NJWkUpIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoYWRkcik7CisJCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOworCQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKKwkJZnJlZV9wYWdlKGFkZHIpOworCQl0b3RhbHJhbV9wYWdlcysrOworCX0KKworCWlmIChzaXplICYmIHMpCisJCXByaW50ayhLRVJOX0lORk8gIkZyZWVpbmcgJXMgbWVtb3J5OiAlZEtcbiIsIHMsIHNpemUpOworfQorCisvKgorICogbWVtX2luaXQoKSBtYXJrcyB0aGUgZnJlZSBhcmVhcyBpbiB0aGUgbWVtX21hcCBhbmQgdGVsbHMgdXMgaG93IG11Y2gKKyAqIG1lbW9yeSBpcyBmcmVlLiAgVGhpcyBpcyBkb25lIGFmdGVyIHZhcmlvdXMgcGFydHMgb2YgdGhlIHN5c3RlbSBoYXZlCisgKiBjbGFpbWVkIHRoZWlyIG1lbW9yeSBhZnRlciB0aGUga2VybmVsIGltYWdlLgorICovCit2b2lkIF9faW5pdCBtZW1faW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCBjb2RlcGFnZXMsIGRhdGFwYWdlcywgaW5pdHBhZ2VzOworCWludCBpLCBub2RlOworCisJY29kZXBhZ2VzID0gJl9ldGV4dCAtICZfdGV4dDsKKwlkYXRhcGFnZXMgPSAmX2VuZCAtICZfX2RhdGFfc3RhcnQ7CisJaW5pdHBhZ2VzID0gJl9faW5pdF9lbmQgLSAmX19pbml0X2JlZ2luOworCisjaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KKwltYXhfbWFwbnIgICA9IHZpcnRfdG9fcGFnZShoaWdoX21lbW9yeSkgLSBtZW1fbWFwOworI2VuZGlmCisKKwkvKgorCSAqIFdlIG1heSBoYXZlIG5vbi1jb250aWd1b3VzIG1lbW9yeS4KKwkgKi8KKwlpZiAobWVtaW5mby5ucl9iYW5rcyAhPSAxKQorCQljcmVhdGVfbWVtbWFwX2hvbGVzKCZtZW1pbmZvKTsKKworCS8qIHRoaXMgd2lsbCBwdXQgYWxsIHVudXNlZCBsb3cgbWVtb3J5IG9udG8gdGhlIGZyZWVsaXN0cyAqLworCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHsKKwkJcGdfZGF0YV90ICpwZ2RhdCA9IE5PREVfREFUQShub2RlKTsKKworCQlpZiAocGdkYXQtPm5vZGVfc3Bhbm5lZF9wYWdlcyAhPSAwKQorCQkJdG90YWxyYW1fcGFnZXMgKz0gZnJlZV9hbGxfYm9vdG1lbV9ub2RlKHBnZGF0KTsKKwl9CisKKyNpZmRlZiBDT05GSUdfU0ExMTExCisJLyogbm93IHRoYXQgb3VyIERNQSBtZW1vcnkgaXMgYWN0dWFsbHkgc28gZGVzaWduYXRlZCwgd2UgY2FuIGZyZWUgaXQgKi8KKwlmcmVlX2FyZWEoUEFHRV9PRkZTRVQsICh1bnNpZ25lZCBsb25nKXN3YXBwZXJfcGdfZGlyLCBOVUxMKTsKKyNlbmRpZgorCisJLyoKKwkgKiBTaW5jZSBvdXIgbWVtb3J5IG1heSBub3QgYmUgY29udGlndW91cywgY2FsY3VsYXRlIHRoZQorCSAqIHJlYWwgbnVtYmVyIG9mIHBhZ2VzIHdlIGhhdmUgaW4gdGhpcyBzeXN0ZW0KKwkgKi8KKwlwcmludGsoS0VSTl9JTkZPICJNZW1vcnk6Iik7CisKKwludW1fcGh5c3BhZ2VzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbWVtaW5mby5ucl9iYW5rczsgaSsrKSB7CisJCW51bV9waHlzcGFnZXMgKz0gbWVtaW5mby5iYW5rW2ldLnNpemUgPj4gUEFHRV9TSElGVDsKKwkJcHJpbnRrKCIgJWxkTUIiLCBtZW1pbmZvLmJhbmtbaV0uc2l6ZSA+PiAyMCk7CisJfQorCisJcHJpbnRrKCIgPSAlbHVNQiB0b3RhbFxuIiwgbnVtX3BoeXNwYWdlcyA+PiAoMjAgLSBQQUdFX1NISUZUKSk7CisJcHJpbnRrKEtFUk5fTk9USUNFICJNZW1vcnk6ICVsdUtCIGF2YWlsYWJsZSAoJWRLIGNvZGUsICIKKwkJIiVkSyBkYXRhLCAlZEsgaW5pdClcbiIsCisJCSh1bnNpZ25lZCBsb25nKSBucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAorCQljb2RlcGFnZXMgPj4gMTAsIGRhdGFwYWdlcyA+PiAxMCwgaW5pdHBhZ2VzID4+IDEwKTsKKworCWlmIChQQUdFX1NJWkUgPj0gMTYzODQgJiYgbnVtX3BoeXNwYWdlcyA8PSAxMjgpIHsKKwkJZXh0ZXJuIGludCBzeXNjdGxfb3ZlcmNvbW1pdF9tZW1vcnk7CisJCS8qCisJCSAqIE9uIGEgbWFjaGluZSB0aGlzIHNtYWxsIHdlIHdvbid0IGdldAorCQkgKiBhbnl3aGVyZSB3aXRob3V0IG92ZXJjb21taXQsIHNvIHR1cm4KKwkJICogaXQgb24gYnkgZGVmYXVsdC4KKwkJICovCisJCXN5c2N0bF9vdmVyY29tbWl0X21lbW9yeSA9IE9WRVJDT01NSVRfQUxXQVlTOworCX0KK30KKwordm9pZCBmcmVlX2luaXRtZW0odm9pZCkKK3sKKwlpZiAoIW1hY2hpbmVfaXNfaW50ZWdyYXRvcigpICYmICFtYWNoaW5lX2lzX2NpbnRlZ3JhdG9yKCkpIHsKKwkJZnJlZV9hcmVhKCh1bnNpZ25lZCBsb25nKSgmX19pbml0X2JlZ2luKSwKKwkJCSAgKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfZW5kKSwKKwkJCSAgImluaXQiKTsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKKworc3RhdGljIGludCBrZWVwX2luaXRyZDsKKwordm9pZCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJaWYgKCFrZWVwX2luaXRyZCkKKwkJZnJlZV9hcmVhKHN0YXJ0LCBlbmQsICJpbml0cmQiKTsKK30KKworc3RhdGljIGludCBfX2luaXQga2VlcGluaXRyZF9zZXR1cChjaGFyICpfX3VudXNlZCkKK3sKKwlrZWVwX2luaXRyZCA9IDE7CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoImtlZXBpbml0cmQiLCBrZWVwaW5pdHJkX3NldHVwKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW9yZW1hcC5jIGIvYXJjaC9hcm0vbW0vaW9yZW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYmI4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9pb3JlbWFwLmMKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vaW9yZW1hcC5jCisgKgorICogUmUtbWFwIElPIG1lbW9yeSB0byBrZXJuZWwgYWRkcmVzcyBzcGFjZSBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgaXQuCisgKgorICogKEMpIENvcHlyaWdodCAxOTk1IDE5OTYgTGludXMgVG9ydmFsZHMKKyAqCisgKiBIYWNrZWQgZm9yIEFSTSBieSBQaGlsIEJsdW5kZWxsIDxwaGlsYkBnbnUub3JnPgorICogSGFja2VkIHRvIGFsbG93IGFsbCBhcmNoaXRlY3R1cmVzIHRvIGJ1aWxkLCBhbmQgdmFyaW91cyBjbGVhbnVwcworICogYnkgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBhbGxvd3MgYSBkcml2ZXIgdG8gcmVtYXAgYW4gYXJiaXRyYXJ5IHJlZ2lvbiBvZiBidXMgbWVtb3J5IGludG8KKyAqIHZpcnR1YWwgc3BhY2UuICBPbmUgc2hvdWxkICpvbmx5KiB1c2UgcmVhZGwsIHdyaXRlbCwgbWVtY3B5X3RvaW8gYW5kCisgKiBzbyBvbiB3aXRoIHN1Y2ggcmVtYXBwZWQgYXJlYXMuCisgKgorICogQmVjYXVzZSB0aGUgQVJNIG9ubHkgaGFzIGEgMzItYml0IGFkZHJlc3Mgc3BhY2Ugd2UgY2FuJ3QgYWRkcmVzcyB0aGUKKyAqIHdob2xlIG9mIHRoZSAocGh5c2ljYWwpIFBDSSBzcGFjZSBhdCBvbmNlLiAgUENJIGh1Z2UtbW9kZSBhZGRyZXNzaW5nCisgKiBhbGxvd3MgdXMgdG8gY2lyY3VtdmVudCB0aGlzIHJlc3RyaWN0aW9uIGJ5IHNwbGl0dGluZyBQQ0kgc3BhY2UgaW50bworICogdHdvIDJHQiBjaHVua3MgYW5kIG1hcHBpbmcgb25seSBvbmUgYXQgYSB0aW1lIGludG8gcHJvY2Vzc29yIG1lbW9yeS4KKyAqIFdlIHVzZSBNTVUgcHJvdGVjdGlvbiBkb21haW5zIHRvIHRyYXAgYW55IGF0dGVtcHQgdG8gYWNjZXNzIHRoZSBiYW5rCisgKiB0aGF0IGlzIG5vdCBjdXJyZW50bHkgbWFwcGVkLiAgKFRoaXMgaXNuJ3QgZnVsbHkgaW1wbGVtZW50ZWQgeWV0LikKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQKK3JlbWFwX2FyZWFfcHRlKHB0ZV90ICogcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkgICAgICAgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHBncHJvdF90IHBncHJvdCkKK3sKKwl1bnNpZ25lZCBsb25nIGVuZDsKKworCWFkZHJlc3MgJj0gflBNRF9NQVNLOworCWVuZCA9IGFkZHJlc3MgKyBzaXplOworCWlmIChlbmQgPiBQTURfU0laRSkKKwkJZW5kID0gUE1EX1NJWkU7CisJQlVHX09OKGFkZHJlc3MgPj0gZW5kKTsKKwlkbyB7CisJCWlmICghcHRlX25vbmUoKnB0ZSkpCisJCQlnb3RvIGJhZDsKKworCQlzZXRfcHRlKHB0ZSwgcGZuX3B0ZShwaHlzX2FkZHIgPj4gUEFHRV9TSElGVCwgcGdwcm90KSk7CisJCWFkZHJlc3MgKz0gUEFHRV9TSVpFOworCQlwaHlzX2FkZHIgKz0gUEFHRV9TSVpFOworCQlwdGUrKzsKKwl9IHdoaWxlIChhZGRyZXNzICYmIChhZGRyZXNzIDwgZW5kKSk7CisJcmV0dXJuOworCisgYmFkOgorCXByaW50aygicmVtYXBfYXJlYV9wdGU6IHBhZ2UgYWxyZWFkeSBleGlzdHNcbiIpOworCUJVRygpOworfQorCitzdGF0aWMgaW5saW5lIGludAorcmVtYXBfYXJlYV9wbWQocG1kX3QgKiBwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBzaXplLAorCSAgICAgICB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwl1bnNpZ25lZCBsb25nIGVuZDsKKwlwZ3Byb3RfdCBwZ3Byb3Q7CisKKwlhZGRyZXNzICY9IH5QR0RJUl9NQVNLOworCWVuZCA9IGFkZHJlc3MgKyBzaXplOworCisJaWYgKGVuZCA+IFBHRElSX1NJWkUpCisJCWVuZCA9IFBHRElSX1NJWkU7CisKKwlwaHlzX2FkZHIgLT0gYWRkcmVzczsKKwlCVUdfT04oYWRkcmVzcyA+PSBlbmQpOworCisJcGdwcm90ID0gX19wZ3Byb3QoTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfRElSVFkgfCBMX1BURV9XUklURSB8IGZsYWdzKTsKKwlkbyB7CisJCXB0ZV90ICogcHRlID0gcHRlX2FsbG9jX2tlcm5lbCgmaW5pdF9tbSwgcG1kLCBhZGRyZXNzKTsKKwkJaWYgKCFwdGUpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJcmVtYXBfYXJlYV9wdGUocHRlLCBhZGRyZXNzLCBlbmQgLSBhZGRyZXNzLCBhZGRyZXNzICsgcGh5c19hZGRyLCBwZ3Byb3QpOworCQlhZGRyZXNzID0gKGFkZHJlc3MgKyBQTURfU0laRSkgJiBQTURfTUFTSzsKKwkJcG1kKys7CisJfSB3aGlsZSAoYWRkcmVzcyAmJiAoYWRkcmVzcyA8IGVuZCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CityZW1hcF9hcmVhX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLAorCQkgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHN0YXJ0OworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBzaXplOworCWludCBlcnIgPSAwOworCXBnZF90ICogZGlyOworCisJcGh5c19hZGRyIC09IGFkZHJlc3M7CisJZGlyID0gcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcmVzcyk7CisJQlVHX09OKGFkZHJlc3MgPj0gZW5kKTsKKwlzcGluX2xvY2soJmluaXRfbW0ucGFnZV90YWJsZV9sb2NrKTsKKwlkbyB7CisJCXBtZF90ICpwbWQgPSBwbWRfYWxsb2MoJmluaXRfbW0sIGRpciwgYWRkcmVzcyk7CisJCWlmICghcG1kKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHJlbWFwX2FyZWFfcG1kKHBtZCwgYWRkcmVzcywgZW5kIC0gYWRkcmVzcywKKwkJCQkJIHBoeXNfYWRkciArIGFkZHJlc3MsIGZsYWdzKSkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisKKwkJYWRkcmVzcyA9IChhZGRyZXNzICsgUEdESVJfU0laRSkgJiBQR0RJUl9NQVNLOworCQlkaXIrKzsKKwl9IHdoaWxlIChhZGRyZXNzICYmIChhZGRyZXNzIDwgZW5kKSk7CisKKwlzcGluX3VubG9jaygmaW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spOworCWZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFJlbWFwIGFuIGFyYml0cmFyeSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIGludG8gdGhlIGtlcm5lbCB2aXJ0dWFsCisgKiBhZGRyZXNzIHNwYWNlLiBOZWVkZWQgd2hlbiB0aGUga2VybmVsIHdhbnRzIHRvIGFjY2VzcyBoaWdoIGFkZHJlc3NlcworICogZGlyZWN0bHkuCisgKgorICogTk9URSEgV2UgbmVlZCB0byBhbGxvdyBub24tcGFnZS1hbGlnbmVkIG1hcHBpbmdzIHRvbzogd2Ugd2lsbCBvYnZpb3VzbHkKKyAqIGhhdmUgdG8gY29udmVydCB0aGVtIGludG8gYW4gb2Zmc2V0IGluIGEgcGFnZS1hbGlnbmVkIG1hcHBpbmcsIGJ1dCB0aGUKKyAqIGNhbGxlciBzaG91bGRuJ3QgbmVlZCB0byBrbm93IHRoYXQgc21hbGwgZGV0YWlsLgorICoKKyAqICdmbGFncycgYXJlIHRoZSBleHRyYSBMX1BURV8gZmxhZ3MgdGhhdCB5b3Ugd2FudCB0byBzcGVjaWZ5IGZvciB0aGlzCisgKiBtYXBwaW5nLiAgU2VlIGluY2x1ZGUvYXNtLWFybS9wcm9jLWFybXYvcGd0YWJsZS5oIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCit2b2lkIF9faW9tZW0gKgorX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkgIHVuc2lnbmVkIGxvbmcgYWxpZ24pCit7CisJdm9pZCAqIGFkZHI7CisJc3RydWN0IHZtX3N0cnVjdCAqIGFyZWE7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQsIGxhc3RfYWRkcjsKKworCS8qIERvbid0IGFsbG93IHdyYXBhcm91bmQgb3IgemVybyBzaXplICovCisJbGFzdF9hZGRyID0gcGh5c19hZGRyICsgc2l6ZSAtIDE7CisJaWYgKCFzaXplIHx8IGxhc3RfYWRkciA8IHBoeXNfYWRkcikKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIE1hcHBpbmdzIGhhdmUgdG8gYmUgcGFnZS1hbGlnbmVkCisJICovCisJb2Zmc2V0ID0gcGh5c19hZGRyICYgflBBR0VfTUFTSzsKKwlwaHlzX2FkZHIgJj0gUEFHRV9NQVNLOworCXNpemUgPSBQQUdFX0FMSUdOKGxhc3RfYWRkciArIDEpIC0gcGh5c19hZGRyOworCisJLyoKKwkgKiBPaywgZ28gZm9yIGl0Li4KKwkgKi8KKwlhcmVhID0gZ2V0X3ZtX2FyZWEoc2l6ZSwgVk1fSU9SRU1BUCk7CisJaWYgKCFhcmVhKQorCQlyZXR1cm4gTlVMTDsKKwlhZGRyID0gYXJlYS0+YWRkcjsKKwlpZiAocmVtYXBfYXJlYV9wYWdlcygodW5zaWduZWQgbG9uZykgYWRkciwgcGh5c19hZGRyLCBzaXplLCBmbGFncykpIHsKKwkJdmZyZWUoYWRkcik7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSAob2Zmc2V0ICsgKGNoYXIgKilhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0woX19pb3JlbWFwKTsKKwordm9pZCBfX2lvdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKQoreworCXZmcmVlKCh2b2lkICopIChQQUdFX01BU0sgJiAodW5zaWduZWQgbG9uZykgYWRkcikpOworfQorRVhQT1JUX1NZTUJPTChfX2lvdW5tYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbWluaWNhY2hlLmMgYi9hcmNoL2FybS9tbS9taW5pY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWRmMmFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vbWluaWNhY2hlLmMKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS9taW5pY2FjaGUuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIGhhbmRsZXMgdGhlIG1pbmkgZGF0YSBjYWNoZSwgYXMgZm91bmQgb24gU0ExMXgwIGFuZCBYU2NhbGUKKyAqIHByb2Nlc3NvcnMuICBXaGVuIHdlIGNvcHkgYSB1c2VyIHBhZ2UgcGFnZSwgd2UgbWFwIGl0IGluIHN1Y2ggYSB3YXkKKyAqIHRoYXQgYWNjZXNzZXMgdG8gdGhpcyBwYWdlIHdpbGwgbm90IHRvdWNoIHRoZSBtYWluIGRhdGEgY2FjaGUsIGJ1dAorICogd2lsbCBiZSBjYWNoZWQgaW4gdGhlIG1pbmkgZGF0YSBjYWNoZS4gIFRoaXMgcHJldmVudHMgdXMgdGhyYXNoaW5nCisgKiB0aGUgbWFpbiBkYXRhIGNhY2hlIG9uIHBhZ2UgZmF1bHRzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisKKy8qCisgKiAweGZmZmY4MDAwIHRvIDB4ZmZmZmZmZmYgaXMgcmVzZXJ2ZWQgZm9yIGFueSBBUk0gYXJjaGl0ZWN0dXJlCisgKiBzcGVjaWZpYyBoYWNrcyBmb3IgY29weWluZyBwYWdlcyBlZmZpY2llbnRseS4KKyAqLworI2RlZmluZSBtaW5pY2FjaGVfYWRkcmVzcyAoMHhmZmZmODAwMCkKKyNkZWZpbmUgbWluaWNhY2hlX3BncHJvdCBfX3BncHJvdChMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCBcCisJCQkJICBMX1BURV9DQUNIRUFCTEUpCisKK3N0YXRpYyBwdGVfdCAqbWluaWNhY2hlX3B0ZTsKKworLyoKKyAqIE5vdGUgdGhhdCB0aGlzIGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBvbmx5IGZyb20gdGhlIGNvcHlfdXNlcl9wYWdlCisgKiBhc20gY29kZTsgYW55dGhpbmcgZWxzZSB3aWxsIHJlcXVpcmUgc3BlY2lhbCBsb2NraW5nIHRvIHByZXZlbnQgdGhlCisgKiBtaW5pLWNhY2hlIHNwYWNlIGJlaW5nIHJlLXVzZWQuICAoTm90ZTogcHJvYmFibHkgcHJlZW1wdCB1bnNhZmUpLgorICoKKyAqIFdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCB0aGUgbWluaWNhY2hlIGlzIDJLLCBhbmQgd2UnbGwgYmUgcHVzaGluZworICogNEsgb2YgZGF0YSB0aHJvdWdoIGl0LCBzbyB3ZSBkb24ndCBhY3R1YWxseSBoYXZlIHRvIHNwZWNpZmljYWxseQorICogZmx1c2ggdGhlIG1pbmljYWNoZSB3aGVuIHdlIGNoYW5nZSB0aGUgbWFwcGluZy4KKyAqCisgKiBOb3RlIGFsc286IGFzc2VydChQQUdFX09GRlNFVCA8PSB2aXJ0IDwgaGlnaF9tZW1vcnkpLgorICogVW5zYWZlOiBwcmVlbXB0LCBrbWFwLgorICovCit1bnNpZ25lZCBsb25nIG1hcF9wYWdlX21pbmljYWNoZSh1bnNpZ25lZCBsb25nIHZpcnQpCit7CisJc2V0X3B0ZShtaW5pY2FjaGVfcHRlLCBwZm5fcHRlKF9fcGEodmlydCkgPj4gUEFHRV9TSElGVCwgbWluaWNhY2hlX3BncHJvdCkpOworCWZsdXNoX3RsYl9rZXJuZWxfcGFnZShtaW5pY2FjaGVfYWRkcmVzcyk7CisKKwlyZXR1cm4gbWluaWNhY2hlX2FkZHJlc3M7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG1pbmljYWNoZV9pbml0KHZvaWQpCit7CisJcGdkX3QgKnBnZDsKKwlwbWRfdCAqcG1kOworCisJc3Bpbl9sb2NrKCZpbml0X21tLnBhZ2VfdGFibGVfbG9jayk7CisKKwlwZ2QgPSBwZ2Rfb2Zmc2V0X2sobWluaWNhY2hlX2FkZHJlc3MpOworCXBtZCA9IHBtZF9hbGxvYygmaW5pdF9tbSwgcGdkLCBtaW5pY2FjaGVfYWRkcmVzcyk7CisJaWYgKCFwbWQpCisJCUJVRygpOworCW1pbmljYWNoZV9wdGUgPSBwdGVfYWxsb2Nfa2VybmVsKCZpbml0X21tLCBwbWQsIG1pbmljYWNoZV9hZGRyZXNzKTsKKwlpZiAoIW1pbmljYWNoZV9wdGUpCisJCUJVRygpOworCisJc3Bpbl91bmxvY2soJmluaXRfbW0ucGFnZV90YWJsZV9sb2NrKTsKKworCXJldHVybiAwOworfQorCitjb3JlX2luaXRjYWxsKG1pbmljYWNoZV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tLWFybXYuYyBiL2FyY2gvYXJtL21tL21tLWFybXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWE4N2RiOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL21tLWFybXYuYwpAQCAtMCwwICsxLDc2MCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS9tbS1hcm12LmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDIgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgUGFnZSB0YWJsZSBzbHVkZ2UgZm9yIEFSTSB2MyBhbmQgdjQgcHJvY2Vzc29yIGFyY2hpdGVjdHVyZXMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CisKKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2RlZmluZSBDUE9MSUNZX1VOQ0FDSEVECTAKKyNkZWZpbmUgQ1BPTElDWV9CVUZGRVJFRAkxCisjZGVmaW5lIENQT0xJQ1lfV1JJVEVUSFJPVUdICTIKKyNkZWZpbmUgQ1BPTElDWV9XUklURUJBQ0sJMworI2RlZmluZSBDUE9MSUNZX1dSSVRFQUxMT0MJNAorCitzdGF0aWMgdW5zaWduZWQgaW50IGNhY2hlcG9saWN5IF9faW5pdGRhdGEgPSBDUE9MSUNZX1dSSVRFQkFDSzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZWNjX21hc2sgX19pbml0ZGF0YSA9IDA7CitwZ3Byb3RfdCBwZ3Byb3Rfa2VybmVsOworCitFWFBPUlRfU1lNQk9MKHBncHJvdF9rZXJuZWwpOworCitzdHJ1Y3QgY2FjaGVwb2xpY3kgeworCWNvbnN0IGNoYXIJcG9saWN5WzE2XTsKKwl1bnNpZ25lZCBpbnQJY3JfbWFzazsKKwl1bnNpZ25lZCBpbnQJcG1kOworCXVuc2lnbmVkIGludAlwdGU7Cit9OworCitzdGF0aWMgc3RydWN0IGNhY2hlcG9saWN5IGNhY2hlX3BvbGljaWVzW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5wb2xpY3kJCT0gInVuY2FjaGVkIiwKKwkJLmNyX21hc2sJPSBDUl9XfENSX0MsCisJCS5wbWQJCT0gUE1EX1NFQ1RfVU5DQUNIRUQsCisJCS5wdGUJCT0gMCwKKwl9LCB7CisJCS5wb2xpY3kJCT0gImJ1ZmZlcmVkIiwKKwkJLmNyX21hc2sJPSBDUl9DLAorCQkucG1kCQk9IFBNRF9TRUNUX0JVRkZFUkVELAorCQkucHRlCQk9IFBURV9CVUZGRVJBQkxFLAorCX0sIHsKKwkJLnBvbGljeQkJPSAid3JpdGV0aHJvdWdoIiwKKwkJLmNyX21hc2sJPSAwLAorCQkucG1kCQk9IFBNRF9TRUNUX1dULAorCQkucHRlCQk9IFBURV9DQUNIRUFCTEUsCisJfSwgeworCQkucG9saWN5CQk9ICJ3cml0ZWJhY2siLAorCQkuY3JfbWFzawk9IDAsCisJCS5wbWQJCT0gUE1EX1NFQ1RfV0IsCisJCS5wdGUJCT0gUFRFX0JVRkZFUkFCTEV8UFRFX0NBQ0hFQUJMRSwKKwl9LCB7CisJCS5wb2xpY3kJCT0gIndyaXRlYWxsb2MiLAorCQkuY3JfbWFzawk9IDAsCisJCS5wbWQJCT0gUE1EX1NFQ1RfV0JXQSwKKwkJLnB0ZQkJPSBQVEVfQlVGRkVSQUJMRXxQVEVfQ0FDSEVBQkxFLAorCX0KK307CisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZnVsIGZvciBpZGVudGlmaW5nIGNhY2hlIGNvaGVyZW5jeQorICogcHJvYmxlbXMgYnkgYWxsb3dpbmcgdGhlIGNhY2hlIG9yIHRoZSBjYWNoZSBhbmQKKyAqIHdyaXRlYnVmZmVyIHRvIGJlIHR1cm5lZCBvZmYuICAoTm90ZTogdGhlIHdyaXRlCisgKiBidWZmZXIgc2hvdWxkIG5vdCBiZSBvbiBhbmQgdGhlIGNhY2hlIG9mZikuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9jYWNoZXBvbGljeShjaGFyICoqcCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNhY2hlX3BvbGljaWVzKTsgaSsrKSB7CisJCWludCBsZW4gPSBzdHJsZW4oY2FjaGVfcG9saWNpZXNbaV0ucG9saWN5KTsKKworCQlpZiAobWVtY21wKCpwLCBjYWNoZV9wb2xpY2llc1tpXS5wb2xpY3ksIGxlbikgPT0gMCkgeworCQkJY2FjaGVwb2xpY3kgPSBpOworCQkJY3JfYWxpZ25tZW50ICY9IH5jYWNoZV9wb2xpY2llc1tpXS5jcl9tYXNrOworCQkJY3Jfbm9fYWxpZ25tZW50ICY9IH5jYWNoZV9wb2xpY2llc1tpXS5jcl9tYXNrOworCQkJKnAgKz0gbGVuOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGkgPT0gQVJSQVlfU0laRShjYWNoZV9wb2xpY2llcykpCisJCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IHVua25vd24gb3IgdW5zdXBwb3J0ZWQgY2FjaGUgcG9saWN5XG4iKTsKKwlmbHVzaF9jYWNoZV9hbGwoKTsKKwlzZXRfY3IoY3JfYWxpZ25tZW50KTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X25vY2FjaGUoY2hhciAqKl9fdW51c2VkKQoreworCWNoYXIgKnAgPSAiYnVmZmVyZWQiOworCXByaW50ayhLRVJOX1dBUk5JTkcgIm5vY2FjaGUgaXMgZGVwcmVjYXRlZDsgdXNlIGNhY2hlcG9saWN5PSVzXG4iLCBwKTsKKwllYXJseV9jYWNoZXBvbGljeSgmcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9ub3dyaXRlKGNoYXIgKipfX3VudXNlZCkKK3sKKwljaGFyICpwID0gInVuY2FjaGVkIjsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJub3diIGlzIGRlcHJlY2F0ZWQ7IHVzZSBjYWNoZXBvbGljeT0lc1xuIiwgcCk7CisJZWFybHlfY2FjaGVwb2xpY3koJnApOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfZWNjKGNoYXIgKipwKQoreworCWlmIChtZW1jbXAoKnAsICJvbiIsIDIpID09IDApIHsKKwkJZWNjX21hc2sgPSBQTURfUFJPVEVDVElPTjsKKwkJKnAgKz0gMjsKKwl9IGVsc2UgaWYgKG1lbWNtcCgqcCwgIm9mZiIsIDMpID09IDApIHsKKwkJZWNjX21hc2sgPSAwOworCQkqcCArPSAzOworCX0KK30KKworX19lYXJseV9wYXJhbSgibm9jYWNoZSIsIGVhcmx5X25vY2FjaGUpOworX19lYXJseV9wYXJhbSgibm93YiIsIGVhcmx5X25vd3JpdGUpOworX19lYXJseV9wYXJhbSgiY2FjaGVwb2xpY3k9IiwgZWFybHlfY2FjaGVwb2xpY3kpOworX19lYXJseV9wYXJhbSgiZWNjPSIsIGVhcmx5X2VjYyk7CisKK3N0YXRpYyBpbnQgX19pbml0IG5vYWxpZ25fc2V0dXAoY2hhciAqX191bnVzZWQpCit7CisJY3JfYWxpZ25tZW50ICY9IH5DUl9BOworCWNyX25vX2FsaWdubWVudCAmPSB+Q1JfQTsKKwlzZXRfY3IoY3JfYWxpZ25tZW50KTsKKwlyZXR1cm4gMTsKK30KKworX19zZXR1cCgibm9hbGlnbiIsIG5vYWxpZ25fc2V0dXApOworCisjZGVmaW5lIEZJUlNUX0tFUk5FTF9QR0RfTlIJKEZJUlNUX1VTRVJfUEdEX05SICsgVVNFUl9QVFJTX1BFUl9QR0QpCisKKy8qCisgKiBuZWVkIHRvIGdldCBhIDE2ayBwYWdlIGZvciBsZXZlbCAxCisgKi8KK3BnZF90ICpnZXRfcGdkX3Nsb3coc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcGdkX3QgKm5ld19wZ2QsICppbml0X3BnZDsKKwlwbWRfdCAqbmV3X3BtZCwgKmluaXRfcG1kOworCXB0ZV90ICpuZXdfcHRlLCAqaW5pdF9wdGU7CisKKwluZXdfcGdkID0gKHBnZF90ICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCAyKTsKKwlpZiAoIW5ld19wZ2QpCisJCWdvdG8gbm9fcGdkOworCisJbWVtemVybyhuZXdfcGdkLCBGSVJTVF9LRVJORUxfUEdEX05SICogc2l6ZW9mKHBnZF90KSk7CisKKwlpbml0X3BnZCA9IHBnZF9vZmZzZXRfaygwKTsKKworCWlmICghdmVjdG9yc19oaWdoKCkpIHsKKwkJLyoKKwkJICogVGhpcyBsb2NrIGlzIGhlcmUganVzdCB0byBzYXRpc2Z5IHBtZF9hbGxvYyBhbmQgcHRlX2xvY2sKKwkJICovCisJCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisKKwkJLyoKKwkJICogT24gQVJNLCBmaXJzdCBwYWdlIG11c3QgYWx3YXlzIGJlIGFsbG9jYXRlZCBzaW5jZSBpdAorCQkgKiBjb250YWlucyB0aGUgbWFjaGluZSB2ZWN0b3JzLgorCQkgKi8KKwkJbmV3X3BtZCA9IHBtZF9hbGxvYyhtbSwgbmV3X3BnZCwgMCk7CisJCWlmICghbmV3X3BtZCkKKwkJCWdvdG8gbm9fcG1kOworCisJCW5ld19wdGUgPSBwdGVfYWxsb2NfbWFwKG1tLCBuZXdfcG1kLCAwKTsKKwkJaWYgKCFuZXdfcHRlKQorCQkJZ290byBub19wdGU7CisKKwkJaW5pdF9wbWQgPSBwbWRfb2Zmc2V0KGluaXRfcGdkLCAwKTsKKwkJaW5pdF9wdGUgPSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoaW5pdF9wbWQsIDApOworCQlzZXRfcHRlKG5ld19wdGUsICppbml0X3B0ZSk7CisJCXB0ZV91bm1hcF9uZXN0ZWQoaW5pdF9wdGUpOworCQlwdGVfdW5tYXAobmV3X3B0ZSk7CisKKwkJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCX0KKworCS8qCisJICogQ29weSBvdmVyIHRoZSBrZXJuZWwgYW5kIElPIFBHRCBlbnRyaWVzCisJICovCisJbWVtY3B5KG5ld19wZ2QgKyBGSVJTVF9LRVJORUxfUEdEX05SLCBpbml0X3BnZCArIEZJUlNUX0tFUk5FTF9QR0RfTlIsCisJCSAgICAgICAoUFRSU19QRVJfUEdEIC0gRklSU1RfS0VSTkVMX1BHRF9OUikgKiBzaXplb2YocGdkX3QpKTsKKworCWNsZWFuX2RjYWNoZV9hcmVhKG5ld19wZ2QsIFBUUlNfUEVSX1BHRCAqIHNpemVvZihwZ2RfdCkpOworCisJcmV0dXJuIG5ld19wZ2Q7CisKK25vX3B0ZToKKwlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJcG1kX2ZyZWUobmV3X3BtZCk7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyluZXdfcGdkLCAyKTsKKwlyZXR1cm4gTlVMTDsKKworbm9fcG1kOgorCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKW5ld19wZ2QsIDIpOworCXJldHVybiBOVUxMOworCitub19wZ2Q6CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgZnJlZV9wZ2Rfc2xvdyhwZ2RfdCAqcGdkKQoreworCXBtZF90ICpwbWQ7CisJc3RydWN0IHBhZ2UgKnB0ZTsKKworCWlmICghcGdkKQorCQlyZXR1cm47CisKKwkvKiBwZ2QgaXMgYWx3YXlzIHByZXNlbnQgYW5kIGdvb2QgKi8KKwlwbWQgPSAocG1kX3QgKilwZ2Q7CisJaWYgKHBtZF9ub25lKCpwbWQpKQorCQlnb3RvIGZyZWU7CisJaWYgKHBtZF9iYWQoKnBtZCkpIHsKKwkJcG1kX0VSUk9SKCpwbWQpOworCQlwbWRfY2xlYXIocG1kKTsKKwkJZ290byBmcmVlOworCX0KKworCXB0ZSA9IHBtZF9wYWdlKCpwbWQpOworCXBtZF9jbGVhcihwbWQpOworCWRlY19wYWdlX3N0YXRlKG5yX3BhZ2VfdGFibGVfcGFnZXMpOworCXB0ZV9mcmVlKHB0ZSk7CisJcG1kX2ZyZWUocG1kKTsKK2ZyZWU6CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgcGdkLCAyKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIFNFQ1RJT04gUEdEIGJldHdlZW4gVklSVCBhbmQgUEhZUyBpbiBkb21haW4KKyAqIERPTUFJTiB3aXRoIHByb3RlY3Rpb24gUFJPVC4gIFRoaXMgb3BlcmF0ZXMgb24gaGFsZi0KKyAqIHBnZGlyIGVudHJ5IGluY3JlbWVudHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYWxsb2NfaW5pdF9zZWN0aW9uKHVuc2lnbmVkIGxvbmcgdmlydCwgdW5zaWduZWQgbG9uZyBwaHlzLCBpbnQgcHJvdCkKK3sKKwlwbWRfdCAqcG1kcDsKKworCXBtZHAgPSBwbWRfb2Zmc2V0KHBnZF9vZmZzZXRfayh2aXJ0KSwgdmlydCk7CisJaWYgKHZpcnQgJiAoMSA8PCAyMCkpCisJCXBtZHArKzsKKworCSpwbWRwID0gX19wbWQocGh5cyB8IHByb3QpOworCWZsdXNoX3BtZF9lbnRyeShwbWRwKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIFNVUEVSIFNFQ1RJT04gUEdEIGJldHdlZW4gVklSVCBhbmQgUEhZUyB3aXRoIHByb3RlY3Rpb24gUFJPVAorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2FsbG9jX2luaXRfc3VwZXJzZWN0aW9uKHVuc2lnbmVkIGxvbmcgdmlydCwgdW5zaWduZWQgbG9uZyBwaHlzLCBpbnQgcHJvdCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSAxKSB7CisJCWFsbG9jX2luaXRfc2VjdGlvbih2aXJ0LCBwaHlzICYgU1VQRVJTRUNUSU9OX01BU0ssCisJCQkJICAgcHJvdCB8IFBNRF9TRUNUX1NVUEVSKTsKKworCQl2aXJ0ICs9IChQR0RJUl9TSVpFIC8gMik7CisJCXBoeXMgKz0gKFBHRElSX1NJWkUgLyAyKTsKKwl9Cit9CisKKy8qCisgKiBBZGQgYSBQQUdFIG1hcHBpbmcgYmV0d2VlbiBWSVJUIGFuZCBQSFlTIGluIGRvbWFpbgorICogRE9NQUlOIHdpdGggcHJvdGVjdGlvbiBQUk9ULiAgTm90ZSB0aGF0IGR1ZSB0byB0aGUKKyAqIHdheSB3ZSBtYXAgdGhlIFBURXMsIHdlIG11c3QgYWxsb2NhdGUgdHdvIFBURV9TSVpFJ2QKKyAqIGJsb2NrcyAtIG9uZSBmb3IgdGhlIExpbnV4IHB0ZSB0YWJsZSwgYW5kIG9uZSBmb3IKKyAqIHRoZSBoYXJkd2FyZSBwdGUgdGFibGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYWxsb2NfaW5pdF9wYWdlKHVuc2lnbmVkIGxvbmcgdmlydCwgdW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBpbnQgcHJvdF9sMSwgcGdwcm90X3QgcHJvdCkKK3sKKwlwbWRfdCAqcG1kcDsKKwlwdGVfdCAqcHRlcDsKKworCXBtZHAgPSBwbWRfb2Zmc2V0KHBnZF9vZmZzZXRfayh2aXJ0KSwgdmlydCk7CisKKwlpZiAocG1kX25vbmUoKnBtZHApKSB7CisJCXVuc2lnbmVkIGxvbmcgcG1kdmFsOworCQlwdGVwID0gYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoMiAqIFBUUlNfUEVSX1BURSAqCisJCQkJCSAgICAgICBzaXplb2YocHRlX3QpKTsKKworCQlwbWR2YWwgPSBfX3BhKHB0ZXApIHwgcHJvdF9sMTsKKwkJcG1kcFswXSA9IF9fcG1kKHBtZHZhbCk7CisJCXBtZHBbMV0gPSBfX3BtZChwbWR2YWwgKyAyNTYgKiBzaXplb2YocHRlX3QpKTsKKwkJZmx1c2hfcG1kX2VudHJ5KHBtZHApOworCX0KKwlwdGVwID0gcHRlX29mZnNldF9rZXJuZWwocG1kcCwgdmlydCk7CisKKwlzZXRfcHRlKHB0ZXAsIHBmbl9wdGUocGh5cyA+PiBQQUdFX1NISUZULCBwcm90KSk7Cit9CisKKy8qCisgKiBDbGVhciBhbnkgUEdEIG1hcHBpbmcuICBPbiBhIHR3by1sZXZlbCBwYWdlIHRhYmxlIHN5c3RlbSwKKyAqIHRoZSBjbGVhcmFuY2UgaXMgZG9uZSBieSB0aGUgbWlkZGxlLWxldmVsIGZ1bmN0aW9ucyAocG1kKQorICogcmF0aGVyIHRoYW4gdGhlIHRvcC1sZXZlbCAocGdkKSBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgdmlydCkKK3sKKwlwbWRfY2xlYXIocG1kX29mZnNldChwZ2Rfb2Zmc2V0X2sodmlydCksIHZpcnQpKTsKK30KKworc3RydWN0IG1lbV90eXBlcyB7CisJdW5zaWduZWQgaW50CXByb3RfcHRlOworCXVuc2lnbmVkIGludAlwcm90X2wxOworCXVuc2lnbmVkIGludAlwcm90X3NlY3Q7CisJdW5zaWduZWQgaW50CWRvbWFpbjsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWVtX3R5cGVzIG1lbV90eXBlc1tdIF9faW5pdGRhdGEgPSB7CisJW01UX0RFVklDRV0gPSB7CisJCS5wcm90X3B0ZSAgPSBMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCBMX1BURV9ESVJUWSB8CisJCQkJTF9QVEVfV1JJVEUsCisJCS5wcm90X2wxICAgPSBQTURfVFlQRV9UQUJMRSwKKwkJLnByb3Rfc2VjdCA9IFBNRF9UWVBFX1NFQ1QgfCBQTURfU0VDVF9VTkNBQ0hFRCB8CisJCQkJUE1EX1NFQ1RfQVBfV1JJVEUsCisJCS5kb21haW4gICAgPSBET01BSU5fSU8sCisJfSwKKwlbTVRfQ0FDSEVDTEVBTl0gPSB7CisJCS5wcm90X3NlY3QgPSBQTURfVFlQRV9TRUNULAorCQkuZG9tYWluICAgID0gRE9NQUlOX0tFUk5FTCwKKwl9LAorCVtNVF9NSU5JQ0xFQU5dID0geworCQkucHJvdF9zZWN0ID0gUE1EX1RZUEVfU0VDVCB8IFBNRF9TRUNUX01JTklDQUNIRSwKKwkJLmRvbWFpbiAgICA9IERPTUFJTl9LRVJORUwsCisJfSwKKwlbTVRfTE9XX1ZFQ1RPUlNdID0geworCQkucHJvdF9wdGUgID0gTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfRElSVFkgfAorCQkJCUxfUFRFX0VYRUMsCisJCS5wcm90X2wxICAgPSBQTURfVFlQRV9UQUJMRSwKKwkJLmRvbWFpbiAgICA9IERPTUFJTl9VU0VSLAorCX0sCisJW01UX0hJR0hfVkVDVE9SU10gPSB7CisJCS5wcm90X3B0ZSAgPSBMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCBMX1BURV9ESVJUWSB8CisJCQkJTF9QVEVfVVNFUiB8IExfUFRFX0VYRUMsCisJCS5wcm90X2wxICAgPSBQTURfVFlQRV9UQUJMRSwKKwkJLmRvbWFpbiAgICA9IERPTUFJTl9VU0VSLAorCX0sCisJW01UX01FTU9SWV0gPSB7CisJCS5wcm90X3NlY3QgPSBQTURfVFlQRV9TRUNUIHwgUE1EX1NFQ1RfQVBfV1JJVEUsCisJCS5kb21haW4gICAgPSBET01BSU5fS0VSTkVMLAorCX0sCisJW01UX1JPTV0gPSB7CisJCS5wcm90X3NlY3QgPSBQTURfVFlQRV9TRUNULAorCQkuZG9tYWluICAgID0gRE9NQUlOX0tFUk5FTCwKKwl9LAorCVtNVF9JWFAyMDAwX0RFVklDRV0gPSB7IC8qIElYUDI0MDAgcmVxdWlyZXMgWENCPTEwMSBmb3Igb24tY2hpcCBJL08gKi8KKwkJLnByb3RfcHRlICA9IExfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8IExfUFRFX0RJUlRZIHwKKwkJCQlMX1BURV9XUklURSwKKwkJLnByb3RfbDEgICA9IFBNRF9UWVBFX1RBQkxFLAorCQkucHJvdF9zZWN0ID0gUE1EX1RZUEVfU0VDVCB8IFBNRF9TRUNUX1VOQ0FDSEVEIHwKKwkJCQlQTURfU0VDVF9BUF9XUklURSB8IFBNRF9TRUNUX0JVRkZFUkFCTEUgfAorCQkJCVBNRF9TRUNUX1RFWCgxKSwKKwkJLmRvbWFpbiAgICA9IERPTUFJTl9JTywKKwl9Cit9OworCisvKgorICogQWRqdXN0IHRoZSBQTUQgc2VjdGlvbiBlbnRyaWVzIGFjY29yZGluZyB0byB0aGUgQ1BVIGluIHVzZS4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IGJ1aWxkX21lbV90eXBlX3RhYmxlKHZvaWQpCit7CisJc3RydWN0IGNhY2hlcG9saWN5ICpjcDsKKwl1bnNpZ25lZCBpbnQgY3IgPSBnZXRfY3IoKTsKKwlpbnQgY3B1X2FyY2ggPSBjcHVfYXJjaGl0ZWN0dXJlKCk7CisJaW50IGk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUpCisJaWYgKGNhY2hlcG9saWN5ID4gQ1BPTElDWV9CVUZGRVJFRCkKKwkJY2FjaGVwb2xpY3kgPSBDUE9MSUNZX0JVRkZFUkVEOworI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gpCisJaWYgKGNhY2hlcG9saWN5ID4gQ1BPTElDWV9XUklURVRIUk9VR0gpCisJCWNhY2hlcG9saWN5ID0gQ1BPTElDWV9XUklURVRIUk9VR0g7CisjZW5kaWYKKwlpZiAoY3B1X2FyY2ggPCBDUFVfQVJDSF9BUk12NSkgeworCQlpZiAoY2FjaGVwb2xpY3kgPj0gQ1BPTElDWV9XUklURUFMTE9DKQorCQkJY2FjaGVwb2xpY3kgPSBDUE9MSUNZX1dSSVRFQkFDSzsKKwkJZWNjX21hc2sgPSAwOworCX0KKworCWlmIChjcHVfYXJjaCA8PSBDUFVfQVJDSF9BUk12NSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtZW1fdHlwZXMpOyBpKyspIHsKKwkJCWlmIChtZW1fdHlwZXNbaV0ucHJvdF9sMSkKKwkJCQltZW1fdHlwZXNbaV0ucHJvdF9sMSB8PSBQTURfQklUNDsKKwkJCWlmIChtZW1fdHlwZXNbaV0ucHJvdF9zZWN0KQorCQkJCW1lbV90eXBlc1tpXS5wcm90X3NlY3QgfD0gUE1EX0JJVDQ7CisJCX0KKwl9CisKKwkvKgorCSAqIEFSTXY2IGFuZCBhYm92ZSBoYXZlIGV4dGVuZGVkIHBhZ2UgdGFibGVzLgorCSAqLworCWlmIChjcHVfYXJjaCA+PSBDUFVfQVJDSF9BUk12NiAmJiAoY3IgJiBDUl9YUCkpIHsKKwkJLyoKKwkJICogYml0IDQgYmVjb21lcyBYTiB3aGljaCB3ZSBtdXN0IGNsZWFyIGZvciB0aGUKKwkJICoga2VybmVsIG1lbW9yeSBtYXBwaW5nLgorCQkgKi8KKwkJbWVtX3R5cGVzW01UX01FTU9SWV0ucHJvdF9zZWN0ICY9IH5QTURfQklUNDsKKwkJbWVtX3R5cGVzW01UX1JPTV0ucHJvdF9zZWN0ICY9IH5QTURfQklUNDsKKwkJLyoKKwkJICogTWFyayBjYWNoZSBjbGVhbiBhcmVhcyByZWFkIG9ubHkgZnJvbSBTVkMgbW9kZQorCQkgKiBhbmQgbm8gYWNjZXNzIGZyb20gdXNlcnNwYWNlLgorCQkgKi8KKwkJbWVtX3R5cGVzW01UX01JTklDTEVBTl0ucHJvdF9zZWN0IHw9IFBNRF9TRUNUX0FQWHxQTURfU0VDVF9BUF9XUklURTsKKwkJbWVtX3R5cGVzW01UX0NBQ0hFQ0xFQU5dLnByb3Rfc2VjdCB8PSBQTURfU0VDVF9BUFh8UE1EX1NFQ1RfQVBfV1JJVEU7CisJfQorCisJY3AgPSAmY2FjaGVfcG9saWNpZXNbY2FjaGVwb2xpY3ldOworCisJaWYgKGNwdV9hcmNoID49IENQVV9BUkNIX0FSTXY1KSB7CisJCW1lbV90eXBlc1tNVF9MT1dfVkVDVE9SU10ucHJvdF9wdGUgfD0gY3AtPnB0ZSAmIFBURV9DQUNIRUFCTEU7CisJCW1lbV90eXBlc1tNVF9ISUdIX1ZFQ1RPUlNdLnByb3RfcHRlIHw9IGNwLT5wdGUgJiBQVEVfQ0FDSEVBQkxFOworCX0gZWxzZSB7CisJCW1lbV90eXBlc1tNVF9MT1dfVkVDVE9SU10ucHJvdF9wdGUgfD0gY3AtPnB0ZTsKKwkJbWVtX3R5cGVzW01UX0hJR0hfVkVDVE9SU10ucHJvdF9wdGUgfD0gY3AtPnB0ZTsKKwkJbWVtX3R5cGVzW01UX01JTklDTEVBTl0ucHJvdF9zZWN0ICY9IH5QTURfU0VDVF9URVgoMSk7CisJfQorCisJbWVtX3R5cGVzW01UX0xPV19WRUNUT1JTXS5wcm90X2wxIHw9IGVjY19tYXNrOworCW1lbV90eXBlc1tNVF9ISUdIX1ZFQ1RPUlNdLnByb3RfbDEgfD0gZWNjX21hc2s7CisJbWVtX3R5cGVzW01UX01FTU9SWV0ucHJvdF9zZWN0IHw9IGVjY19tYXNrIHwgY3AtPnBtZDsKKwltZW1fdHlwZXNbTVRfUk9NXS5wcm90X3NlY3QgfD0gY3AtPnBtZDsKKworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgdiA9IHBncHJvdF92YWwocHJvdGVjdGlvbl9tYXBbaV0pOworCQl2ICY9ICh+KFBURV9CVUZGRVJBQkxFfFBURV9DQUNIRUFCTEUpKSB8IGNwLT5wdGU7CisJCXByb3RlY3Rpb25fbWFwW2ldID0gX19wZ3Byb3Qodik7CisJfQorCisJcGdwcm90X2tlcm5lbCA9IF9fcGdwcm90KExfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8CisJCQkJIExfUFRFX0RJUlRZIHwgTF9QVEVfV1JJVEUgfAorCQkJCSBMX1BURV9FWEVDIHwgY3AtPnB0ZSk7CisKKwlzd2l0Y2ggKGNwLT5wbWQpIHsKKwljYXNlIFBNRF9TRUNUX1dUOgorCQltZW1fdHlwZXNbTVRfQ0FDSEVDTEVBTl0ucHJvdF9zZWN0IHw9IFBNRF9TRUNUX1dUOworCQlicmVhazsKKwljYXNlIFBNRF9TRUNUX1dCOgorCWNhc2UgUE1EX1NFQ1RfV0JXQToKKwkJbWVtX3R5cGVzW01UX0NBQ0hFQ0xFQU5dLnByb3Rfc2VjdCB8PSBQTURfU0VDVF9XQjsKKwkJYnJlYWs7CisJfQorCXByaW50aygiTWVtb3J5IHBvbGljeTogRUNDICVzYWJsZWQsIERhdGEgY2FjaGUgJXNcbiIsCisJCWVjY19tYXNrID8gImVuIiA6ICJkaXMiLCBjcC0+cG9saWN5KTsKK30KKworI2RlZmluZSB2ZWN0b3JzX2Jhc2UoKQkodmVjdG9yc19oaWdoKCkgPyAweGZmZmYwMDAwIDogMCkKKworLyoKKyAqIENyZWF0ZSB0aGUgcGFnZSBkaXJlY3RvcnkgZW50cmllcyBhbmQgYW55IG5lY2Vzc2FyeQorICogcGFnZSB0YWJsZXMgZm9yIHRoZSBtYXBwaW5nIHNwZWNpZmllZCBieSBgbWQnLiAgV2UKKyAqIGFyZSBhYmxlIHRvIGNvcGUgaGVyZSB3aXRoIHZhcnlpbmcgc2l6ZXMgYW5kIGFkZHJlc3MKKyAqIG9mZnNldHMsIGFuZCB3ZSB0YWtlIGZ1bGwgYWR2YW50YWdlIG9mIHNlY3Rpb25zIGFuZAorICogc3VwZXJzZWN0aW9ucy4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IGNyZWF0ZV9tYXBwaW5nKHN0cnVjdCBtYXBfZGVzYyAqbWQpCit7CisJdW5zaWduZWQgbG9uZyB2aXJ0LCBsZW5ndGg7CisJaW50IHByb3Rfc2VjdCwgcHJvdF9sMSwgZG9tYWluOworCXBncHJvdF90IHByb3RfcHRlOworCWxvbmcgb2ZmOworCisJaWYgKG1kLT52aXJ0dWFsICE9IHZlY3RvcnNfYmFzZSgpICYmIG1kLT52aXJ0dWFsIDwgVEFTS19TSVpFKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkJVRzogbm90IGNyZWF0aW5nIG1hcHBpbmcgZm9yICIKKwkJICAgICAgICIweCUwOGx4IGF0IDB4JTA4bHggaW4gdXNlciByZWdpb25cbiIsCisJCSAgICAgICBtZC0+cGh5c2ljYWwsIG1kLT52aXJ0dWFsKTsKKwkJcmV0dXJuOworCX0KKworCWlmICgobWQtPnR5cGUgPT0gTVRfREVWSUNFIHx8IG1kLT50eXBlID09IE1UX1JPTSkgJiYKKwkgICAgbWQtPnZpcnR1YWwgPj0gUEFHRV9PRkZTRVQgJiYgbWQtPnZpcnR1YWwgPCBWTUFMTE9DX0VORCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJCVUc6IG1hcHBpbmcgZm9yIDB4JTA4bHggYXQgMHglMDhseCAiCisJCSAgICAgICAib3ZlcmxhcHMgdm1hbGxvYyBzcGFjZVxuIiwKKwkJICAgICAgIG1kLT5waHlzaWNhbCwgbWQtPnZpcnR1YWwpOworCX0KKworCWRvbWFpbgkgID0gbWVtX3R5cGVzW21kLT50eXBlXS5kb21haW47CisJcHJvdF9wdGUgID0gX19wZ3Byb3QobWVtX3R5cGVzW21kLT50eXBlXS5wcm90X3B0ZSk7CisJcHJvdF9sMSAgID0gbWVtX3R5cGVzW21kLT50eXBlXS5wcm90X2wxIHwgUE1EX0RPTUFJTihkb21haW4pOworCXByb3Rfc2VjdCA9IG1lbV90eXBlc1ttZC0+dHlwZV0ucHJvdF9zZWN0IHwgUE1EX0RPTUFJTihkb21haW4pOworCisJdmlydCAgID0gbWQtPnZpcnR1YWw7CisJb2ZmICAgID0gbWQtPnBoeXNpY2FsIC0gdmlydDsKKwlsZW5ndGggPSBtZC0+bGVuZ3RoOworCisJaWYgKG1lbV90eXBlc1ttZC0+dHlwZV0ucHJvdF9sMSA9PSAwICYmCisJICAgICh2aXJ0ICYgMHhmZmZmZiB8fCAodmlydCArIG9mZikgJiAweGZmZmZmIHx8ICh2aXJ0ICsgbGVuZ3RoKSAmIDB4ZmZmZmYpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkJVRzogbWFwIGZvciAweCUwOGx4IGF0IDB4JTA4bHggY2FuIG5vdCAiCisJCSAgICAgICAiYmUgbWFwcGVkIHVzaW5nIHBhZ2VzLCBpZ25vcmluZy5cbiIsCisJCSAgICAgICBtZC0+cGh5c2ljYWwsIG1kLT52aXJ0dWFsKTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlICgodmlydCAmIDB4ZmZmZmYgfHwgKHZpcnQgKyBvZmYpICYgMHhmZmZmZikgJiYgbGVuZ3RoID49IFBBR0VfU0laRSkgeworCQlhbGxvY19pbml0X3BhZ2UodmlydCwgdmlydCArIG9mZiwgcHJvdF9sMSwgcHJvdF9wdGUpOworCisJCXZpcnQgICArPSBQQUdFX1NJWkU7CisJCWxlbmd0aCAtPSBQQUdFX1NJWkU7CisJfQorCisJLyogTi5CLglBUk12NiBzdXBlcnNlY3Rpb25zIGFyZSBvbmx5IGRlZmluZWQgdG8gd29yayB3aXRoIGRvbWFpbiAwLgorCSAqCVNpbmNlIGRvbWFpbiBhc3NpZ25tZW50cyBjYW4gaW4gZmFjdCBiZSBhcmJpdHJhcnksIHRoZQorCSAqCSdkb21haW4gPT0gMCcgY2hlY2sgYmVsb3cgaXMgcmVxdWlyZWQgdG8gaW5zdXJlIHRoYXQgQVJNdjYKKwkgKglzdXBlcnNlY3Rpb25zIGFyZSBvbmx5IGFsbG9jYXRlZCBmb3IgZG9tYWluIDAgcmVnYXJkbGVzcworCSAqCW9mIHRoZSBhY3R1YWwgZG9tYWluIGFzc2lnbm1lbnRzIGluIHVzZS4KKwkgKi8KKwlpZiAoY3B1X2FyY2hpdGVjdHVyZSgpID49IENQVV9BUkNIX0FSTXY2ICYmIGRvbWFpbiA9PSAwKSB7CisJCS8qIEFsaWduIHRvIHN1cGVyc2VjdGlvbiBib3VuZGFyeSAqLworCQl3aGlsZSAoKHZpcnQgJiB+U1VQRVJTRUNUSU9OX01BU0sgfHwgKHZpcnQgKyBvZmYpICYKKwkJCX5TVVBFUlNFQ1RJT05fTUFTSykgJiYgbGVuZ3RoID49IChQR0RJUl9TSVpFIC8gMikpIHsKKwkJCWFsbG9jX2luaXRfc2VjdGlvbih2aXJ0LCB2aXJ0ICsgb2ZmLCBwcm90X3NlY3QpOworCisJCQl2aXJ0ICAgKz0gKFBHRElSX1NJWkUgLyAyKTsKKwkJCWxlbmd0aCAtPSAoUEdESVJfU0laRSAvIDIpOworCQl9CisKKwkJd2hpbGUgKGxlbmd0aCA+PSBTVVBFUlNFQ1RJT05fU0laRSkgeworCQkJYWxsb2NfaW5pdF9zdXBlcnNlY3Rpb24odmlydCwgdmlydCArIG9mZiwgcHJvdF9zZWN0KTsKKworCQkJdmlydCAgICs9IFNVUEVSU0VDVElPTl9TSVpFOworCQkJbGVuZ3RoIC09IFNVUEVSU0VDVElPTl9TSVpFOworCQl9CisJfQorCisJLyoKKwkgKiBBIHNlY3Rpb24gbWFwcGluZyBjb3ZlcnMgaGFsZiBhICJwZ2RpciIgZW50cnkuCisJICovCisJd2hpbGUgKGxlbmd0aCA+PSAoUEdESVJfU0laRSAvIDIpKSB7CisJCWFsbG9jX2luaXRfc2VjdGlvbih2aXJ0LCB2aXJ0ICsgb2ZmLCBwcm90X3NlY3QpOworCisJCXZpcnQgICArPSAoUEdESVJfU0laRSAvIDIpOworCQlsZW5ndGggLT0gKFBHRElSX1NJWkUgLyAyKTsKKwl9CisKKwl3aGlsZSAobGVuZ3RoID49IFBBR0VfU0laRSkgeworCQlhbGxvY19pbml0X3BhZ2UodmlydCwgdmlydCArIG9mZiwgcHJvdF9sMSwgcHJvdF9wdGUpOworCisJCXZpcnQgICArPSBQQUdFX1NJWkU7CisJCWxlbmd0aCAtPSBQQUdFX1NJWkU7CisJfQorfQorCisvKgorICogSW4gb3JkZXIgdG8gc29mdC1ib290LCB3ZSBuZWVkIHRvIGluc2VydCBhIDE6MSBtYXBwaW5nIGluIHBsYWNlIG9mCisgKiB0aGUgdXNlci1tb2RlIHBhZ2VzLiAgVGhpcyB3aWxsIHRoZW4gZW5zdXJlIHRoYXQgd2UgaGF2ZSBwcmVkaWN0YWJsZQorICogcmVzdWx0cyB3aGVuIHR1cm5pbmcgdGhlIG1tdSBvZmYKKyAqLwordm9pZCBzZXR1cF9tbV9mb3JfcmVib290KGNoYXIgbW9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBtZHZhbDsKKwlwZ2RfdCAqcGdkOworCXBtZF90ICpwbWQ7CisJaW50IGk7CisJaW50IGNwdV9hcmNoID0gY3B1X2FyY2hpdGVjdHVyZSgpOworCisJaWYgKGN1cnJlbnQtPm1tICYmIGN1cnJlbnQtPm1tLT5wZ2QpCisJCXBnZCA9IGN1cnJlbnQtPm1tLT5wZ2Q7CisJZWxzZQorCQlwZ2QgPSBpbml0X21tLnBnZDsKKworCWZvciAoaSA9IDA7IGkgPCBGSVJTVF9VU0VSX1BHRF9OUiArIFVTRVJfUFRSU19QRVJfUEdEOyBpKyspIHsKKwkJcG1kdmFsID0gKGkgPDwgUEdESVJfU0hJRlQpIHwKKwkJCSBQTURfU0VDVF9BUF9XUklURSB8IFBNRF9TRUNUX0FQX1JFQUQgfAorCQkJIFBNRF9UWVBFX1NFQ1Q7CisJCWlmIChjcHVfYXJjaCA8PSBDUFVfQVJDSF9BUk12NSkKKwkJCXBtZHZhbCB8PSBQTURfQklUNDsKKwkJcG1kID0gcG1kX29mZnNldChwZ2QgKyBpLCBpIDw8IFBHRElSX1NISUZUKTsKKwkJcG1kWzBdID0gX19wbWQocG1kdmFsKTsKKwkJcG1kWzFdID0gX19wbWQocG1kdmFsICsgKDEgPDwgKFBHRElSX1NISUZUIC0gMSkpKTsKKwkJZmx1c2hfcG1kX2VudHJ5KHBtZCk7CisJfQorfQorCitleHRlcm4gdm9pZCBfc3RleHQsIF9ldGV4dDsKKworLyoKKyAqIFNldHVwIGluaXRpYWwgbWFwcGluZ3MuICBXZSB1c2UgdGhlIHBhZ2Ugd2UgYWxsb2NhdGVkIGZvciB6ZXJvIHBhZ2UgdG8gaG9sZAorICogdGhlIG1hcHBpbmdzLCB3aGljaCB3aWxsIGdldCBvdmVyd3JpdHRlbiBieSB0aGUgdmVjdG9ycyBpbiB0cmFwc19pbml0KCkuCisgKiBUaGUgbWFwcGluZ3MgbXVzdCBiZSBpbiB2aXJ0dWFsIGFkZHJlc3Mgb3JkZXIuCisgKi8KK3ZvaWQgX19pbml0IG1lbXRhYmxlX2luaXQoc3RydWN0IG1lbWluZm8gKm1pKQoreworCXN0cnVjdCBtYXBfZGVzYyAqaW5pdF9tYXBzLCAqcCwgKnE7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gMDsKKwlpbnQgaTsKKworCWJ1aWxkX21lbV90eXBlX3RhYmxlKCk7CisKKwlpbml0X21hcHMgPSBwID0gYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoUEFHRV9TSVpFKTsKKworI2lmZGVmIENPTkZJR19YSVBfS0VSTkVMCisJcC0+cGh5c2ljYWwgICA9IENPTkZJR19YSVBfUEhZU19BRERSICYgUE1EX01BU0s7CisJcC0+dmlydHVhbCAgICA9ICh1bnNpZ25lZCBsb25nKSZfc3RleHQgJiBQTURfTUFTSzsKKwlwLT5sZW5ndGggICAgID0gKCh1bnNpZ25lZCBsb25nKSZfZXRleHQgLSBwLT52aXJ0dWFsICsgflBNRF9NQVNLKSAmIFBNRF9NQVNLOworCXAtPnR5cGUgICAgICAgPSBNVF9ST007CisJcCArKzsKKyNlbmRpZgorCisJZm9yIChpID0gMDsgaSA8IG1pLT5ucl9iYW5rczsgaSsrKSB7CisJCWlmIChtaS0+YmFua1tpXS5zaXplID09IDApCisJCQljb250aW51ZTsKKworCQlwLT5waHlzaWNhbCAgID0gbWktPmJhbmtbaV0uc3RhcnQ7CisJCXAtPnZpcnR1YWwgICAgPSBfX3BoeXNfdG9fdmlydChwLT5waHlzaWNhbCk7CisJCXAtPmxlbmd0aCAgICAgPSBtaS0+YmFua1tpXS5zaXplOworCQlwLT50eXBlICAgICAgID0gTVRfTUVNT1JZOworCQlwICsrOworCX0KKworI2lmZGVmIEZMVVNIX0JBU0UKKwlwLT5waHlzaWNhbCAgID0gRkxVU0hfQkFTRV9QSFlTOworCXAtPnZpcnR1YWwgICAgPSBGTFVTSF9CQVNFOworCXAtPmxlbmd0aCAgICAgPSBQR0RJUl9TSVpFOworCXAtPnR5cGUgICAgICAgPSBNVF9DQUNIRUNMRUFOOworCXAgKys7CisjZW5kaWYKKworI2lmZGVmIEZMVVNIX0JBU0VfTUlOSUNBQ0hFCisJcC0+cGh5c2ljYWwgICA9IEZMVVNIX0JBU0VfUEhZUyArIFBHRElSX1NJWkU7CisJcC0+dmlydHVhbCAgICA9IEZMVVNIX0JBU0VfTUlOSUNBQ0hFOworCXAtPmxlbmd0aCAgICAgPSBQR0RJUl9TSVpFOworCXAtPnR5cGUgICAgICAgPSBNVF9NSU5JQ0xFQU47CisJcCArKzsKKyNlbmRpZgorCisJLyoKKwkgKiBHbyB0aHJvdWdoIHRoZSBpbml0aWFsIG1hcHBpbmdzLCBidXQgY2xlYXIgb3V0IGFueQorCSAqIHBnZGlyIGVudHJpZXMgdGhhdCBhcmUgbm90IGluIHRoZSBkZXNjcmlwdGlvbi4KKwkgKi8KKwlxID0gaW5pdF9tYXBzOworCWRvIHsKKwkJaWYgKGFkZHJlc3MgPCBxLT52aXJ0dWFsIHx8IHEgPT0gcCkgeworCQkJY2xlYXJfbWFwcGluZyhhZGRyZXNzKTsKKwkJCWFkZHJlc3MgKz0gUEdESVJfU0laRTsKKwkJfSBlbHNlIHsKKwkJCWNyZWF0ZV9tYXBwaW5nKHEpOworCisJCQlhZGRyZXNzID0gcS0+dmlydHVhbCArIHEtPmxlbmd0aDsKKwkJCWFkZHJlc3MgPSAoYWRkcmVzcyArIFBHRElSX1NJWkUgLSAxKSAmIFBHRElSX01BU0s7CisKKwkJCXEgKys7CisJCX0KKwl9IHdoaWxlIChhZGRyZXNzICE9IDApOworCisJLyoKKwkgKiBDcmVhdGUgYSBtYXBwaW5nIGZvciB0aGUgbWFjaGluZSB2ZWN0b3JzIGF0IHRoZSBoaWdoLXZlY3RvcnMKKwkgKiBsb2NhdGlvbiAoMHhmZmZmMDAwMCkuICBJZiB3ZSBhcmVuJ3QgdXNpbmcgaGlnaC12ZWN0b3JzLCBhbHNvCisJICogY3JlYXRlIGEgbWFwcGluZyBhdCB0aGUgbG93LXZlY3RvcnMgdmlydHVhbCBhZGRyZXNzLgorCSAqLworCWluaXRfbWFwcy0+cGh5c2ljYWwgICA9IHZpcnRfdG9fcGh5cyhpbml0X21hcHMpOworCWluaXRfbWFwcy0+dmlydHVhbCAgICA9IDB4ZmZmZjAwMDA7CisJaW5pdF9tYXBzLT5sZW5ndGggICAgID0gUEFHRV9TSVpFOworCWluaXRfbWFwcy0+dHlwZSAgICAgICA9IE1UX0hJR0hfVkVDVE9SUzsKKwljcmVhdGVfbWFwcGluZyhpbml0X21hcHMpOworCisJaWYgKCF2ZWN0b3JzX2hpZ2goKSkgeworCQlpbml0X21hcHMtPnZpcnR1YWwgPSAwOworCQlpbml0X21hcHMtPnR5cGUgPSBNVF9MT1dfVkVDVE9SUzsKKwkJY3JlYXRlX21hcHBpbmcoaW5pdF9tYXBzKTsKKwl9CisKKwlmbHVzaF9jYWNoZV9hbGwoKTsKKwlmbHVzaF90bGJfYWxsKCk7Cit9CisKKy8qCisgKiBDcmVhdGUgdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBtYXBwaW5ncworICovCit2b2lkIF9faW5pdCBpb3RhYmxlX2luaXQoc3RydWN0IG1hcF9kZXNjICppb19kZXNjLCBpbnQgbnIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKKwkJY3JlYXRlX21hcHBpbmcoaW9fZGVzYyArIGkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2ZyZWVfbWVtbWFwKGludCBub2RlLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQoreworCXN0cnVjdCBwYWdlICpzdGFydF9wZywgKmVuZF9wZzsKKwl1bnNpZ25lZCBsb25nIHBnLCBwZ2VuZDsKKworCS8qCisJICogQ29udmVydCBzdGFydF9wZm4vZW5kX3BmbiB0byBhIHN0cnVjdCBwYWdlIHBvaW50ZXIuCisJICovCisJc3RhcnRfcGcgPSBwZm5fdG9fcGFnZShzdGFydF9wZm4pOworCWVuZF9wZyA9IHBmbl90b19wYWdlKGVuZF9wZm4pOworCisJLyoKKwkgKiBDb252ZXJ0IHRvIHBoeXNpY2FsIGFkZHJlc3NlcywgYW5kCisJICogcm91bmQgc3RhcnQgdXB3YXJkcyBhbmQgZW5kIGRvd253YXJkcy4KKwkgKi8KKwlwZyA9IFBBR0VfQUxJR04oX19wYShzdGFydF9wZykpOworCXBnZW5kID0gX19wYShlbmRfcGcpICYgUEFHRV9NQVNLOworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgZnJlZSBwYWdlcyBiZXR3ZWVuIHRoZXNlLAorCSAqIGZyZWUgdGhlIHNlY3Rpb24gb2YgdGhlIG1lbW1hcCBhcnJheS4KKwkgKi8KKwlpZiAocGcgPCBwZ2VuZCkKKwkJZnJlZV9ib290bWVtX25vZGUoTk9ERV9EQVRBKG5vZGUpLCBwZywgcGdlbmQgLSBwZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3VudXNlZF9tZW1tYXBfbm9kZShpbnQgbm9kZSwgc3RydWN0IG1lbWluZm8gKm1pKQoreworCXVuc2lnbmVkIGxvbmcgYmFua19zdGFydCwgcHJldl9iYW5rX2VuZCA9IDA7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKgorCSAqIFtGSVhNRV0gVGhpcyByZWxpZXMgb24gZWFjaCBiYW5rIGJlaW5nIGluIGFkZHJlc3Mgb3JkZXIuICBUaGlzCisJICogbWF5IG5vdCBiZSB0aGUgY2FzZSwgZXNwZWNpYWxseSBpZiB0aGUgdXNlciBoYXMgcHJvdmlkZWQgdGhlCisJICogaW5mb3JtYXRpb24gb24gdGhlIGNvbW1hbmQgbGluZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWktPm5yX2JhbmtzOyBpKyspIHsKKwkJaWYgKG1pLT5iYW5rW2ldLnNpemUgPT0gMCB8fCBtaS0+YmFua1tpXS5ub2RlICE9IG5vZGUpCisJCQljb250aW51ZTsKKworCQliYW5rX3N0YXJ0ID0gbWktPmJhbmtbaV0uc3RhcnQgPj4gUEFHRV9TSElGVDsKKwkJaWYgKGJhbmtfc3RhcnQgPCBwcmV2X2JhbmtfZW5kKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIk1FTTogdW5vcmRlcmVkIG1lbW9yeSBiYW5rcy4gICIKKwkJCQkiTm90IGZyZWVpbmcgbWVtbWFwLlxuIik7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIElmIHdlIGhhZCBhIHByZXZpb3VzIGJhbmssIGFuZCB0aGVyZSBpcyBhIHNwYWNlCisJCSAqIGJldHdlZW4gdGhlIGN1cnJlbnQgYmFuayBhbmQgdGhlIHByZXZpb3VzLCBmcmVlIGl0LgorCQkgKi8KKwkJaWYgKHByZXZfYmFua19lbmQgJiYgcHJldl9iYW5rX2VuZCAhPSBiYW5rX3N0YXJ0KQorCQkJZnJlZV9tZW1tYXAobm9kZSwgcHJldl9iYW5rX2VuZCwgYmFua19zdGFydCk7CisKKwkJcHJldl9iYW5rX2VuZCA9IFBBR0VfQUxJR04obWktPmJhbmtbaV0uc3RhcnQgKworCQkJCQkgICBtaS0+YmFua1tpXS5zaXplKSA+PiBQQUdFX1NISUZUOworCX0KK30KKworLyoKKyAqIFRoZSBtZW1fbWFwIGFycmF5IGNhbiBnZXQgdmVyeSBiaWcuICBGcmVlCisgKiB0aGUgdW51c2VkIGFyZWEgb2YgdGhlIG1lbW9yeSBtYXAuCisgKi8KK3ZvaWQgX19pbml0IGNyZWF0ZV9tZW1tYXBfaG9sZXMoc3RydWN0IG1lbWluZm8gKm1pKQoreworCWludCBub2RlOworCisJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkKKwkJZnJlZV91bnVzZWRfbWVtbWFwX25vZGUobm9kZSwgbWkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW1hcC5jIGIvYXJjaC9hcm0vbW0vbW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYzRiMGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9tbWFwLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vbW1hcC5jCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NobS5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjZGVmaW5lIENPTE9VUl9BTElHTihhZGRyLHBnb2ZmKQkJXAorCSgoKChhZGRyKStTSE1MQkEtMSkmfihTSE1MQkEtMSkpICsJXAorCSAoKChwZ29mZik8PFBBR0VfU0hJRlQpICYgKFNITUxCQS0xKSkpCisKKy8qCisgKiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHNoYXJlZCBtYXBwaW5ncyBhcmUgY29ycmVjdGx5IGFsaWduZWQgdG8KKyAqIGF2b2lkIGFsaWFzaW5nIGlzc3VlcyB3aXRoIFZJUFQgY2FjaGVzLiAgV2UgbmVlZCB0byBlbnN1cmUgdGhhdAorICogYSBzcGVjaWZpYyBwYWdlIG9mIGFuIG9iamVjdCBpcyBhbHdheXMgbWFwcGVkIGF0IGEgbXVsdGlwbGUgb2YKKyAqIFNITUxCQSBieXRlcy4KKyAqCisgKiBXZSB1bmNvbmRpdGlvbmFsbHkgcHJvdmlkZSB0aGlzIGZ1bmN0aW9uIGZvciBhbGwgY2FzZXMsIGhvd2V2ZXIKKyAqIGluIHRoZSBWSVZUIGNhc2UsIHdlIG9wdGltaXNlIG91dCB0aGUgYWxpZ25tZW50IHJ1bGVzLgorICovCit1bnNpZ25lZCBsb25nCithcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCXVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyOworI2lmZGVmIENPTkZJR19DUFVfVjYKKwl1bnNpZ25lZCBpbnQgY2FjaGVfdHlwZTsKKwlpbnQgZG9fYWxpZ24gPSAwLCBhbGlhc2luZyA9IDA7CisKKwkvKgorCSAqIFdlIG9ubHkgbmVlZCB0byBkbyBjb2xvdXIgYWxpZ25tZW50IGlmIGVpdGhlciB0aGUgSSBvciBECisJICogY2FjaGVzIGFsaWFzLiAgVGhpcyBpcyBpbmRpY2F0ZWQgYnkgYml0cyA5IGFuZCAyMSBvZiB0aGUKKwkgKiBjYWNoZSB0eXBlIHJlZ2lzdGVyLgorCSAqLworCWNhY2hlX3R5cGUgPSByZWFkX2NwdWlkKENQVUlEX0NBQ0hFVFlQRSk7CisJaWYgKGNhY2hlX3R5cGUgIT0gcmVhZF9jcHVpZChDUFVJRF9JRCkpIHsKKwkJYWxpYXNpbmcgPSAoY2FjaGVfdHlwZSB8IGNhY2hlX3R5cGUgPj4gMTIpICYgKDEgPDwgMTEpOworCQlpZiAoYWxpYXNpbmcpCisJCQlkb19hbGlnbiA9IGZpbHAgfHwgZmxhZ3MgJiBNQVBfU0hBUkVEOworCX0KKyNlbHNlCisjZGVmaW5lIGRvX2FsaWduIDAKKyNkZWZpbmUgYWxpYXNpbmcgMAorI2VuZGlmCisKKwkvKgorCSAqIFdlIHNob3VsZCBlbmZvcmNlIHRoZSBNQVBfRklYRUQgY2FzZS4gIEhvd2V2ZXIsIGN1cnJlbnRseQorCSAqIHRoZSBnZW5lcmljIGtlcm5lbCBjb2RlIGRvZXNuJ3QgYWxsb3cgdXMgdG8gaGFuZGxlIHRoaXMuCisJICovCisJaWYgKGZsYWdzICYgTUFQX0ZJWEVEKSB7CisJCWlmIChhbGlhc2luZyAmJiBmbGFncyAmIE1BUF9TSEFSRUQgJiYgYWRkciAmIChTSE1MQkEgLSAxKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gYWRkcjsKKwl9CisKKwlpZiAobGVuID4gVEFTS19TSVpFKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhZGRyKSB7CisJCWlmIChkb19hbGlnbikKKwkJCWFkZHIgPSBDT0xPVVJfQUxJR04oYWRkciwgcGdvZmYpOworCQllbHNlCisJCQlhZGRyID0gUEFHRV9BTElHTihhZGRyKTsKKworCQl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7CisJCWlmIChUQVNLX1NJWkUgLSBsZW4gPj0gYWRkciAmJgorCQkgICAgKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bWEtPnZtX3N0YXJ0KSkKKwkJCXJldHVybiBhZGRyOworCX0KKwlzdGFydF9hZGRyID0gYWRkciA9IG1tLT5mcmVlX2FyZWFfY2FjaGU7CisKK2Z1bGxfc2VhcmNoOgorCWlmIChkb19hbGlnbikKKwkJYWRkciA9IENPTE9VUl9BTElHTihhZGRyLCBwZ29mZik7CisJZWxzZQorCQlhZGRyID0gUEFHRV9BTElHTihhZGRyKTsKKworCWZvciAodm1hID0gZmluZF92bWEobW0sIGFkZHIpOyA7IHZtYSA9IHZtYS0+dm1fbmV4dCkgeworCQkvKiBBdCB0aGlzIHBvaW50OiAgKCF2bWEgfHwgYWRkciA8IHZtYS0+dm1fZW5kKS4gKi8KKwkJaWYgKFRBU0tfU0laRSAtIGxlbiA8IGFkZHIpIHsKKwkJCS8qCisJCQkgKiBTdGFydCBhIG5ldyBzZWFyY2ggLSBqdXN0IGluIGNhc2Ugd2UgbWlzc2VkCisJCQkgKiBzb21lIGhvbGVzLgorCQkJICovCisJCQlpZiAoc3RhcnRfYWRkciAhPSBUQVNLX1VOTUFQUEVEX0JBU0UpIHsKKwkJCQlzdGFydF9hZGRyID0gYWRkciA9IFRBU0tfVU5NQVBQRURfQkFTRTsKKwkJCQlnb3RvIGZ1bGxfc2VhcmNoOworCQkJfQorCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJaWYgKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bWEtPnZtX3N0YXJ0KSB7CisJCQkvKgorCQkJICogUmVtZW1iZXIgdGhlIHBsYWNlIHdoZXJlIHdlIHN0b3BwZWQgdGhlIHNlYXJjaDoKKwkJCSAqLworCQkJbW0tPmZyZWVfYXJlYV9jYWNoZSA9IGFkZHIgKyBsZW47CisJCQlyZXR1cm4gYWRkcjsKKwkJfQorCQlhZGRyID0gdm1hLT52bV9lbmQ7CisJCWlmIChkb19hbGlnbikKKwkJCWFkZHIgPSBDT0xPVVJfQUxJR04oYWRkciwgcGdvZmYpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW11LmMgYi9hcmNoL2FybS9tbS9tbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDkwMjI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vbW11LmMKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS9tbXUuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZCwgYWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorCit1bnNpZ25lZCBpbnQgY3B1X2xhc3RfYXNpZCA9IHsgMSA8PCBBU0lEX0JJVFMgfTsKKworLyoKKyAqIFdlIGZvcmsoKWVkIGEgcHJvY2VzcywgYW5kIHdlIG5lZWQgYSBuZXcgY29udGV4dCBmb3IgdGhlIGNoaWxkCisgKiB0byBydW4gaW4uICBXZSByZXNlcnZlIHZlcnNpb24gMCBmb3IgaW5pdGlhbCB0YXNrcyBzbyB3ZSB3aWxsCisgKiBhbHdheXMgYWxsb2NhdGUgYW4gQVNJRC4KKyAqLwordm9pZCBfX2luaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCW1tLT5jb250ZXh0LmlkID0gMDsKK30KKwordm9pZCBfX25ld19jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXVuc2lnbmVkIGludCBhc2lkOworCisJYXNpZCA9ICsrY3B1X2xhc3RfYXNpZDsKKwlpZiAoYXNpZCA9PSAwKQorCQlhc2lkID0gY3B1X2xhc3RfYXNpZCA9IDEgPDwgQVNJRF9CSVRTOworCisJLyoKKwkgKiBJZiB3ZSd2ZSB1c2VkIHVwIGFsbCBvdXIgQVNJRHMsIHdlIG5lZWQKKwkgKiB0byBzdGFydCBhIG5ldyB2ZXJzaW9uIGFuZCBmbHVzaCB0aGUgVExCLgorCSAqLworCWlmICgoYXNpZCAmIH5BU0lEX01BU0spID09IDApCisJCWZsdXNoX3RsYl9hbGwoKTsKKworCW1tLT5jb250ZXh0LmlkID0gYXNpZDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYzMjUyMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCkBAIC0wLDAgKzEsNTMwIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TOiBNTVUgZnVuY3Rpb25zIGZvciBBUk0xMDIwCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMCBBUk0gTGltaXRlZAorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICoKKyAqIFRoZXNlIGFyZSB0aGUgbG93IGxldmVsIGFzc2VtYmxlciBmb3IgcGVyZm9ybWluZyBjYWNoZSBhbmQgVExCCisgKiBmdW5jdGlvbnMgb24gdGhlIGFybTEwMjAuCisgKgorICogIENPTkZJR19DUFVfQVJNMTAyMF9DUFVfSURMRSAtPiBub2hsdAorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2NvbnN0YW50cy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2NpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisvKgorICogVGhpcyBpcyB0aGUgbWF4aW11bSBzaXplIG9mIGFuIGFyZWEgd2hpY2ggd2lsbCBiZSBpbnZhbGlkYXRlZAorICogdXNpbmcgdGhlIHNpbmdsZSBpbnZhbGlkYXRlIGVudHJ5IGluc3RydWN0aW9ucy4gIEFueXRoaW5nIGxhcmdlcgorICogdGhhbiB0aGlzLCBhbmQgd2UgZ28gZm9yIHRoZSB3aG9sZSBjYWNoZS4KKyAqCisgKiBUaGlzIHZhbHVlIHNob3VsZCBiZSBjaG9zZW4gc3VjaCB0aGF0IHdlIGNob29zZSB0aGUgY2hlYXBlc3QKKyAqIGFsdGVybmF0aXZlLgorICovCisjZGVmaW5lIE1BWF9BUkVBX1NJWkUJMzI3NjgKKworLyoKKyAqIFRoZSBzaXplIG9mIG9uZSBkYXRhIGNhY2hlIGxpbmUuCisgKi8KKyNkZWZpbmUgQ0FDSEVfRExJTkVTSVpFCTMyCisKKy8qCisgKiBUaGUgbnVtYmVyIG9mIGRhdGEgY2FjaGUgc2VnbWVudHMuCisgKi8KKyNkZWZpbmUgQ0FDSEVfRFNFR01FTlRTCTE2CisKKy8qCisgKiBUaGUgbnVtYmVyIG9mIGxpbmVzIGluIGEgY2FjaGUgc2VnbWVudC4KKyAqLworI2RlZmluZSBDQUNIRV9ERU5UUklFUwk2NAorCisvKgorICogVGhpcyBpcyB0aGUgc2l6ZSBhdCB3aGljaCBpdCBiZWNvbWVzIG1vcmUgZWZmaWNpZW50IHRvCisgKiBjbGVhbiB0aGUgd2hvbGUgY2FjaGUsIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBpbmRpdmlkdWFsCisgKiBjYWNoZSBsaW5lIG1haW50YWluZW5jZSBpbnN0cnVjdGlvbnMuCisgKi8KKyNkZWZpbmUgQ0FDSEVfRExJTUlUCTMyNzY4CisKKwkudGV4dAorLyoKKyAqIGNwdV9hcm0xMDIwX3Byb2NfaW5pdCgpCisgKi8KK0VOVFJZKGNwdV9hcm0xMDIwX3Byb2NfaW5pdCkKKwltb3YJcGMsIGxyCisKKy8qCisgKiBjcHVfYXJtMTAyMF9wcm9jX2ZpbigpCisgKi8KK0VOVFJZKGNwdV9hcm0xMDIwX3Byb2NfZmluKQorCXN0bWZkCXNwISwge2xyfQorCW1vdglpcCwgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFCisJbXNyCWNwc3JfYywgaXAKKwlibAlhcm0xMDIwX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCisJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCisJYmljCXIwLCByMCwgIzB4MTAwMCAJCUAgLi4uaS4uLi4uLi4uLi4uLgorCWJpYwlyMCwgcjAsICMweDAwMGUgCQlAIC4uLi4uLi4uLi4uLndjYS4KKwltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGRpc2FibGUgY2FjaGVzCisJbGRtZmQJc3AhLCB7cGN9CisKKy8qCisgKiBjcHVfYXJtMTAyMF9yZXNldChsb2MpCisgKgorICogUGVyZm9ybSBhIHNvZnQgcmVzZXQgb2YgdGhlIHN5c3RlbS4JUHV0IHRoZSBDUFUgaW50byB0aGUKKyAqIHNhbWUgc3RhdGUgYXMgaXQgd291bGQgYmUgaWYgaXQgaGFkIGJlZW4gcmVzZXQsIGFuZCBicmFuY2gKKyAqIHRvIHdoYXQgd291bGQgYmUgdGhlIHJlc2V0IHZlY3Rvci4KKyAqCisgKiBsb2M6IGxvY2F0aW9uIHRvIGp1bXAgdG8gZm9yIHNvZnQgcmVzZXQKKyAqLworCS5hbGlnbgk1CitFTlRSWShjcHVfYXJtMTAyMF9yZXNldCkKKwltb3YJaXAsICMwCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIEksRCBjYWNoZXMKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisJbXJjCXAxNSwgMCwgaXAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCisJYmljCWlwLCBpcCwgIzB4MDAwZiAJCUAgLi4uLi4uLi4uLi4ud2NhbQorCWJpYwlpcCwgaXAsICMweDExMDAgCQlAIC4uLmkuLi5zLi4uLi4uLi4KKwltY3IJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwltb3YJcGMsIHIwCisKKy8qCisgKiBjcHVfYXJtMTAyMF9kb19pZGxlKCkKKyAqLworCS5hbGlnbgk1CitFTlRSWShjcHVfYXJtMTAyMF9kb19pZGxlKQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzAsIDQJCUAgV2FpdCBmb3IgaW50ZXJydXB0CisJbW92CXBjLCBscgorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ0FDSEUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCS5hbGlnbgk1CisvKgorICoJZmx1c2hfdXNlcl9jYWNoZV9hbGwoKQorICoKKyAqCUludmFsaWRhdGUgYWxsIGNhY2hlIGVudHJpZXMgaW4gYSBwYXJ0aWN1bGFyIGFkZHJlc3MKKyAqCXNwYWNlLgorICovCitFTlRSWShhcm0xMDIwX2ZsdXNoX3VzZXJfY2FjaGVfYWxsKQorCS8qIEZBTExUSFJPVUdIICovCisvKgorICoJZmx1c2hfa2Vybl9jYWNoZV9hbGwoKQorICoKKyAqCUNsZWFuIGFuZCBpbnZhbGlkYXRlIHRoZSBlbnRpcmUgY2FjaGUuCisgKi8KK0VOVFJZKGFybTEwMjBfZmx1c2hfa2Vybl9jYWNoZV9hbGwpCisJbW92CXIyLCAjVk1fRVhFQworCW1vdglpcCwgIzAKK19fZmx1c2hfd2hvbGVfY2FjaGU6CisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglyMSwgIyhDQUNIRV9EU0VHTUVOVFMgLSAxKSA8PCA1CUAgMTYgc2VnbWVudHMKKzE6CW9ycglyMywgcjEsICMoQ0FDSEVfREVOVFJJRVMgLSAxKSA8PCAyNiBAIDY0IGVudHJpZXMKKzI6CW1jcglwMTUsIDAsIHIzLCBjNywgYzE0LCAyCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBpbmRleAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJc3VicwlyMywgcjMsICMxIDw8IDI2CisJYmNzCTJiCQkJCUAgZW50cmllcyA2MyB0byAwCisJc3VicwlyMSwgcjEsICMxIDw8IDUKKwliY3MJMWIJCQkJQCBzZWdtZW50cyAxNSB0byAwCisjZW5kaWYKKwl0c3QJcjIsICNWTV9FWEVDCisjaWZuZGVmIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisjZW5kaWYKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfdXNlcl9jYWNoZV9yYW5nZShzdGFydCwgZW5kLCBmbGFncykKKyAqCisgKglJbnZhbGlkYXRlIGEgcmFuZ2Ugb2YgY2FjaGUgZW50cmllcyBpbiB0aGUgc3BlY2lmaWVkCisgKglhZGRyZXNzIHNwYWNlLgorICoKKyAqCS0gc3RhcnQJLSBzdGFydCBhZGRyZXNzIChpbmNsdXNpdmUpCisgKgktIGVuZAktIGVuZCBhZGRyZXNzIChleGNsdXNpdmUpCisgKgktIGZsYWdzCS0gdm1fZmxhZ3MgZm9yIHRoaXMgc3BhY2UKKyAqLworRU5UUlkoYXJtMTAyMF9mbHVzaF91c2VyX2NhY2hlX3JhbmdlKQorCW1vdglpcCwgIzAKKwlzdWIJcjMsIHIxLCByMAkJCUAgY2FsY3VsYXRlIHRvdGFsIHNpemUKKwljbXAJcjMsICNDQUNIRV9ETElNSVQKKwliaHMJX19mbHVzaF93aG9sZV9jYWNoZQorCisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGVudHJ5CisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorI2VuZGlmCisJdHN0CXIyLCAjVk1fRVhFQworI2lmbmRlZiBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorI2VuZGlmCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWNvaGVyZW50X2tlcm5fcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglFbnN1cmUgY29oZXJlbmN5IGJldHdlZW4gdGhlIEljYWNoZSBhbmQgdGhlIERjYWNoZSBpbiB0aGUKKyAqCXJlZ2lvbiBkZXNjcmliZWQgYnkgc3RhcnQuICBJZiB5b3UgaGF2ZSBub24tc25vb3BpbmcKKyAqCUhhcnZhcmQgY2FjaGVzLCB5b3UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkoYXJtMTAyMF9jb2hlcmVudF9rZXJuX3JhbmdlKQorCS8qIEZBTExUUkhPVUdIICovCisKKy8qCisgKgljb2hlcmVudF91c2VyX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJRW5zdXJlIGNvaGVyZW5jeSBiZXR3ZWVuIHRoZSBJY2FjaGUgYW5kIHRoZSBEY2FjaGUgaW4gdGhlCisgKglyZWdpb24gZGVzY3JpYmVkIGJ5IHN0YXJ0LiAgSWYgeW91IGhhdmUgbm9uLXNub29waW5nCisgKglIYXJ2YXJkIGNhY2hlcywgeW91IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgKgorICoJLSBzdGFydAktIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKGFybTEwMjBfY29oZXJlbnRfdXNlcl9yYW5nZSkKKwltb3YJaXAsICMwCisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAorMToKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorI2VuZGlmCisjaWZuZGVmIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBlbnRyeQorI2VuZGlmCisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uodm9pZCAqcGFnZSkKKyAqCisgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgorICoJdGhlIEkgY2FjaGUKKyAqCisgKgktIHBhZ2UJLSBwYWdlIGFsaWduZWQgYWRkcmVzcworICovCitFTlRSWShhcm0xMDIwX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpCisJbW92CWlwLCAjMAorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCisJYWRkCXIxLCByMCwgI1BBR0VfU1oKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBlbnRyeQorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKyNlbmRpZgorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZG1hX2ludl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUludmFsaWRhdGUgKGRpc2NhcmQpIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoJTWF5IG5vdCB3cml0ZSBiYWNrIGFueSBlbnRyaWVzLiAgSWYgJ3N0YXJ0JyBvciAnZW5kJworICoJYXJlIG5vdCBjYWNoZSBsaW5lIGFsaWduZWQsIHRob3NlIGxpbmVzIG11c3QgYmUgd3JpdHRlbgorICoJYmFjay4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqCisgKiAoc2FtZSBhcyB2NHdiKQorICovCitFTlRSWShhcm0xMDIwX2RtYV9pbnZfcmFuZ2UpCisJbW92CWlwLCAjMAorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCisJdHN0CXIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAorCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwl0c3QJcjEsICNDQUNIRV9ETElORVNJWkUgLSAxCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAorCW1jcm5lCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJCUAgaW52YWxpZGF0ZSBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKyNlbmRpZgorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZG1hX2NsZWFuX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJQ2xlYW4gdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCisgKgorICoJLSBzdGFydAktIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKgorICogKHNhbWUgYXMgdjR3YikKKyAqLworRU5UUlkoYXJtMTAyMF9kbWFfY2xlYW5fcmFuZ2UpCisJbW92CWlwLCAjMAorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisjZW5kaWYKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWRtYV9mbHVzaF9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUNsZWFuIGFuZCBpbnZhbGlkYXRlIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWShhcm0xMDIwX2RtYV9mbHVzaF9yYW5nZSkKKwltb3YJaXAsICMwCisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKKwliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbitpbnZhbGlkYXRlIEQgZW50cnkKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisjZW5kaWYKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworRU5UUlkoYXJtMTAyMF9jYWNoZV9mbnMpCisJLmxvbmcJYXJtMTAyMF9mbHVzaF9rZXJuX2NhY2hlX2FsbAorCS5sb25nCWFybTEwMjBfZmx1c2hfdXNlcl9jYWNoZV9hbGwKKwkubG9uZwlhcm0xMDIwX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UKKwkubG9uZwlhcm0xMDIwX2NvaGVyZW50X2tlcm5fcmFuZ2UKKwkubG9uZwlhcm0xMDIwX2NvaGVyZW50X3VzZXJfcmFuZ2UKKwkubG9uZwlhcm0xMDIwX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKwkubG9uZwlhcm0xMDIwX2RtYV9pbnZfcmFuZ2UKKwkubG9uZwlhcm0xMDIwX2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCWFybTEwMjBfZG1hX2ZsdXNoX3JhbmdlCisKKwkuYWxpZ24JNQorRU5UUlkoY3B1X2FybTEwMjBfZGNhY2hlX2NsZWFuX2FyZWEpCisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKKwltb3YJaXAsICMwCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJc3VicwlyMSwgcjEsICNDQUNIRV9ETElORVNJWkUKKwliaGkJMWIKKyNlbmRpZgorCW1vdglwYywgbHIKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBQYWdlVGFibGUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qCisgKiBjcHVfYXJtMTAyMF9zd2l0Y2hfbW0ocGdkKQorICoKKyAqIFNldCB0aGUgdHJhbnNsYXRpb24gYmFzZSBwb2ludGVyIHRvIGJlIGFzIGRlc2NyaWJlZCBieSBwZ2QuCisgKgorICogcGdkOiBuZXcgcGFnZSB0YWJsZXMKKyAqLworCS5hbGlnbgk1CitFTlRSWShjcHVfYXJtMTAyMF9zd2l0Y2hfbW0pCisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKKwltY3IJcDE1LCAwLCByMywgYzcsIGMxMCwgNAorCW1vdglyMSwgIzB4RgkJCUAgMTYgc2VnbWVudHMKKzE6CW1vdglyMywgIzB4M0YJCQlAIDY0IGVudHJpZXMKKzI6CW1vdglpcCwgcjMsIExTTCAjMjYgCQlAIHNoaWZ0IHVwIGVudHJ5CisJb3JyCWlwLCBpcCwgcjEsIExTTCAjNQkJQCBzaGlmdCBpbi91cCBpbmRleAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzE0LCAyCQlAIENsZWFuICYgSW52YWwgRENhY2hlIGVudHJ5CisJbW92CWlwLCAjMAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CisJc3VicwlyMywgcjMsICMxCisJY21wCXIzLCAjMAorCWJnZQkyYgkJCQlAIGVudHJpZXMgM0YgdG8gMAorCXN1YnMJcjEsIHIxLCAjMQorCWNtcAlyMSwgIzAKKwliZ2UJMWIJCQkJQCBzZWdtZW50cyAxNSB0byAwCisKKyNlbmRpZgorCW1vdglyMSwgIzAKKyNpZm5kZWYgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRQorCW1jcglwMTUsIDAsIHIxLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisjZW5kaWYKKwltY3IJcDE1LCAwLCByMSwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAsIDAJCUAgbG9hZCBwYWdlIHRhYmxlIHBvaW50ZXIKKwltY3IJcDE1LCAwLCByMSwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSAmIEQgVExCcworCW1vdglwYywgbHIKKyAgICAgICAgCisvKgorICogY3B1X2FybTEwMjBfc2V0X3B0ZShwdGVwLCBwdGUpCisgKgorICogU2V0IGEgUFRFIGFuZCBmbHVzaCBpdCBvdXQKKyAqLworCS5hbGlnbgk1CitFTlRSWShjcHVfYXJtMTAyMF9zZXRfcHRlKQorCXN0cglyMSwgW3IwXSwgIy0yMDQ4CQlAIGxpbnV4IHZlcnNpb24KKworCWVvcglyMSwgcjEsICNMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCBMX1BURV9XUklURSB8IExfUFRFX0RJUlRZCisKKwliaWMJcjIsIHIxLCAjUFRFX1NNQUxMX0FQX01BU0sKKwliaWMJcjIsIHIyLCAjUFRFX1RZUEVfTUFTSworCW9ycglyMiwgcjIsICNQVEVfVFlQRV9TTUFMTAorCisJdHN0CXIxLCAjTF9QVEVfVVNFUgkJCUAgVXNlcj8KKwlvcnJuZQlyMiwgcjIsICNQVEVfU01BTExfQVBfVVJPX1NSVworCisJdHN0CXIxLCAjTF9QVEVfV1JJVEUgfCBMX1BURV9ESVJUWQlAIFdyaXRlIGFuZCBEaXJ0eT8KKwlvcnJlcQlyMiwgcjIsICNQVEVfU01BTExfQVBfVU5PX1NSVworCisJdHN0CXIxLCAjTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HCUAgUHJlc2VudCBhbmQgWW91bmc/CisJbW92bmUJcjIsICMwCisKKyNpZmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKwllb3IJcjMsIHIxLCAjMHgwYQkJCUAgQyAmIHNtYWxsIHBhZ2U/CisJdHN0CXIzLCAjMHgwYgorCWJpY2VxCXIyLCByMiwgIzQKKyNlbmRpZgorCXN0cglyMiwgW3IwXQkJCUAgaGFyZHdhcmUgdmVyc2lvbgorCW1vdglyMCwgcjAKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorI2VuZGlmCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKwlfX0lOSVQKKworCS50eXBlCV9fYXJtMTAyMF9zZXR1cCwgI2Z1bmN0aW9uCitfX2FybTEwMjBfc2V0dXA6CisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzcJCUAgaW52YWxpZGF0ZSBJLEQgY2FjaGVzIG9uIHY0CisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyIG9uIHY0CisJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNwkJQCBpbnZhbGlkYXRlIEksRCBUTEJzIG9uIHY0CisJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMAkJQCBnZXQgY29udHJvbCByZWdpc3RlciB2NAorCWxkcglyNSwgYXJtMTAyMF9jcjFfY2xlYXIKKwliaWMJcjAsIHIwLCByNQorCWxkcglyNSwgYXJtMTAyMF9jcjFfc2V0CisJb3JyCXIwLCByMCwgcjUKKyNpZmRlZiBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOCisJb3JyCXIwLCByMCwgIzB4NDAwMCAJCUAgLlIuLiAuLi4uIC4uLi4gLi4uLgorI2VuZGlmCisJbW92CXBjLCBscgorCS5zaXplCV9fYXJtMTAyMF9zZXR1cCwgLiAtIF9fYXJtMTAyMF9zZXR1cAorCisJLyoKKwkgKiAgUgorCSAqIC5SVkkgWkZSUyBCTERQIFdDQU0KKwkgKiAuMC4xIDEwMDEgLi4xMSAwMTAxCS8qIEZJWE1FOiB3aHkgbm8gViBiaXQ/ICovCisJICovCisJLnR5cGUJYXJtMTAyMF9jcjFfY2xlYXIsICNvYmplY3QKKwkudHlwZQlhcm0xMDIwX2NyMV9zZXQsICNvYmplY3QKK2FybTEwMjBfY3IxX2NsZWFyOgorCS53b3JkCTB4NTkzZgorYXJtMTAyMF9jcjFfc2V0OgorCS53b3JkCTB4MTkzNQorCisJX19JTklUREFUQQorCisvKgorICogUHVycG9zZSA6IEZ1bmN0aW9uIHBvaW50ZXJzIHVzZWQgdG8gYWNjZXNzIGFib3ZlIGZ1bmN0aW9ucyAtIGFsbCBjYWxscworICoJICAgICBjb21lIHRocm91Z2ggdGhlc2UKKyAqLworCS50eXBlCWFybTEwMjBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAorYXJtMTAyMF9wcm9jZXNzb3JfZnVuY3Rpb25zOgorCS53b3JkCXY0dF9lYXJseV9hYm9ydAorCS53b3JkCWNwdV9hcm0xMDIwX3Byb2NfaW5pdAorCS53b3JkCWNwdV9hcm0xMDIwX3Byb2NfZmluCisJLndvcmQJY3B1X2FybTEwMjBfcmVzZXQKKwkud29yZAljcHVfYXJtMTAyMF9kb19pZGxlCisJLndvcmQJY3B1X2FybTEwMjBfZGNhY2hlX2NsZWFuX2FyZWEKKwkud29yZAljcHVfYXJtMTAyMF9zd2l0Y2hfbW0KKwkud29yZAljcHVfYXJtMTAyMF9zZXRfcHRlCisJLnNpemUJYXJtMTAyMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtMTAyMF9wcm9jZXNzb3JfZnVuY3Rpb25zCisKKwkuc2VjdGlvbiAiLnJvZGF0YSIKKworCS50eXBlCWNwdV9hcmNoX25hbWUsICNvYmplY3QKK2NwdV9hcmNoX25hbWU6CisJLmFzY2l6CSJhcm12NXQiCisJLnNpemUJY3B1X2FyY2hfbmFtZSwgLiAtIGNwdV9hcmNoX25hbWUKKworCS50eXBlCWNwdV9lbGZfbmFtZSwgI29iamVjdAorY3B1X2VsZl9uYW1lOgorCS5hc2NpegkidjUiCisJLnNpemUJY3B1X2VsZl9uYW1lLCAuIC0gY3B1X2VsZl9uYW1lCisKKwkudHlwZQljcHVfYXJtMTAyMF9uYW1lLCAjb2JqZWN0CitjcHVfYXJtMTAyMF9uYW1lOgorCS5hc2NpaQkiQVJNMTAyMCIKKyNpZm5kZWYgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRQorCS5hc2NpaQkiaSIKKyNlbmRpZgorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCisJLmFzY2lpCSJkIgorI2lmZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAorCS5hc2NpaQkiKHd0KSIKKyNlbHNlCisJLmFzY2lpCSIod2IpIgorI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFCisJLmFzY2lpCSJCIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTgorCS5hc2NpaQkiUlIiCisjZW5kaWYKKwkuYXNjaWkJIlwwIgorCS5zaXplCWNwdV9hcm0xMDIwX25hbWUsIC4gLSBjcHVfYXJtMTAyMF9uYW1lCisKKwkuYWxpZ24KKworCS5zZWN0aW9uICIucHJvYy5pbmZvIiwgI2FsbG9jLCAjZXhlY2luc3RyCisKKwkudHlwZQlfX2FybTEwMjBfcHJvY19pbmZvLCNvYmplY3QKK19fYXJtMTAyMF9wcm9jX2luZm86CisJLmxvbmcJMHg0MTA0YTIwMAkJCUAgQVJNIDEwMjBUIChBcmNoaXRlY3R1cmUgdjVUKQorCS5sb25nCTB4ZmYwZmZmZjAKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECisJYglfX2FybTEwMjBfc2V0dXAKKwkubG9uZwljcHVfYXJjaF9uYW1lCisJLmxvbmcJY3B1X2VsZl9uYW1lCisJLmxvbmcJSFdDQVBfU1dQIHwgSFdDQVBfSEFMRiB8IEhXQ0FQX1RIVU1CCisJLmxvbmcJY3B1X2FybTEwMjBfbmFtZQorCS5sb25nCWFybTEwMjBfcHJvY2Vzc29yX2Z1bmN0aW9ucworCS5sb25nCXY0d2JpX3RsYl9mbnMKKwkubG9uZwl2NHdiX3VzZXJfZm5zCisJLmxvbmcJYXJtMTAyMF9jYWNoZV9mbnMKKwkuc2l6ZQlfX2FybTEwMjBfcHJvY19pbmZvLCAuIC0gX19hcm0xMDIwX3Byb2NfaW5mbwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MmEyYzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKQEAgLTAsMCArMSw1MTMgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TOiBNTVUgZnVuY3Rpb25zIGZvciBBUk0xMDIwCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMCBBUk0gTGltaXRlZAorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICoKKyAqIFRoZXNlIGFyZSB0aGUgbG93IGxldmVsIGFzc2VtYmxlciBmb3IgcGVyZm9ybWluZyBjYWNoZSBhbmQgVExCCisgKiBmdW5jdGlvbnMgb24gdGhlIGFybTEwMjBlLgorICoKKyAqICBDT05GSUdfQ1BVX0FSTTEwMjBfQ1BVX0lETEUgLT4gbm9obHQKKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS9jb25zdGFudHMuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jaW5mby5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLyoKKyAqIFRoaXMgaXMgdGhlIG1heGltdW0gc2l6ZSBvZiBhbiBhcmVhIHdoaWNoIHdpbGwgYmUgaW52YWxpZGF0ZWQKKyAqIHVzaW5nIHRoZSBzaW5nbGUgaW52YWxpZGF0ZSBlbnRyeSBpbnN0cnVjdGlvbnMuICBBbnl0aGluZyBsYXJnZXIKKyAqIHRoYW4gdGhpcywgYW5kIHdlIGdvIGZvciB0aGUgd2hvbGUgY2FjaGUuCisgKgorICogVGhpcyB2YWx1ZSBzaG91bGQgYmUgY2hvc2VuIHN1Y2ggdGhhdCB3ZSBjaG9vc2UgdGhlIGNoZWFwZXN0CisgKiBhbHRlcm5hdGl2ZS4KKyAqLworI2RlZmluZSBNQVhfQVJFQV9TSVpFCTMyNzY4CisKKy8qCisgKiBUaGUgc2l6ZSBvZiBvbmUgZGF0YSBjYWNoZSBsaW5lLgorICovCisjZGVmaW5lIENBQ0hFX0RMSU5FU0laRQkzMgorCisvKgorICogVGhlIG51bWJlciBvZiBkYXRhIGNhY2hlIHNlZ21lbnRzLgorICovCisjZGVmaW5lIENBQ0hFX0RTRUdNRU5UUwkxNgorCisvKgorICogVGhlIG51bWJlciBvZiBsaW5lcyBpbiBhIGNhY2hlIHNlZ21lbnQuCisgKi8KKyNkZWZpbmUgQ0FDSEVfREVOVFJJRVMJNjQKKworLyoKKyAqIFRoaXMgaXMgdGhlIHNpemUgYXQgd2hpY2ggaXQgYmVjb21lcyBtb3JlIGVmZmljaWVudCB0bworICogY2xlYW4gdGhlIHdob2xlIGNhY2hlLCByYXRoZXIgdGhhbiB1c2luZyB0aGUgaW5kaXZpZHVhbAorICogY2FjaGUgbGluZSBtYWludGFpbmVuY2UgaW5zdHJ1Y3Rpb25zLgorICovCisjZGVmaW5lIENBQ0hFX0RMSU1JVAkzMjc2OAorCisJLnRleHQKKy8qCisgKiBjcHVfYXJtMTAyMGVfcHJvY19pbml0KCkKKyAqLworRU5UUlkoY3B1X2FybTEwMjBlX3Byb2NfaW5pdCkKKwltb3YJcGMsIGxyCisKKy8qCisgKiBjcHVfYXJtMTAyMGVfcHJvY19maW4oKQorICovCitFTlRSWShjcHVfYXJtMTAyMGVfcHJvY19maW4pCisJc3RtZmQJc3AhLCB7bHJ9CisJbW92CWlwLCAjUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUKKwltc3IJY3Bzcl9jLCBpcAorCWJsCWFybTEwMjBlX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCisJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCisJYmljCXIwLCByMCwgIzB4MTAwMCAJCUAgLi4uaS4uLi4uLi4uLi4uLgorCWJpYwlyMCwgcjAsICMweDAwMGUgCQlAIC4uLi4uLi4uLi4uLndjYS4KKwltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGRpc2FibGUgY2FjaGVzCisJbGRtZmQJc3AhLCB7cGN9CisKKy8qCisgKiBjcHVfYXJtMTAyMGVfcmVzZXQobG9jKQorICoKKyAqIFBlcmZvcm0gYSBzb2Z0IHJlc2V0IG9mIHRoZSBzeXN0ZW0uCVB1dCB0aGUgQ1BVIGludG8gdGhlCisgKiBzYW1lIHN0YXRlIGFzIGl0IHdvdWxkIGJlIGlmIGl0IGhhZCBiZWVuIHJlc2V0LCBhbmQgYnJhbmNoCisgKiB0byB3aGF0IHdvdWxkIGJlIHRoZSByZXNldCB2ZWN0b3IuCisgKgorICogbG9jOiBsb2NhdGlvbiB0byBqdW1wIHRvIGZvciBzb2Z0IHJlc2V0CisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X2FybTEwMjBlX3Jlc2V0KQorCW1vdglpcCwgIzAKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM3LCAwCQlAIGludmFsaWRhdGUgSSxEIGNhY2hlcworCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKwltcmMJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwliaWMJaXAsIGlwLCAjMHgwMDBmIAkJQCAuLi4uLi4uLi4uLi53Y2FtCisJYmljCWlwLCBpcCwgIzB4MTEwMCAJCUAgLi4uaS4uLnMuLi4uLi4uLgorCW1jcglwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCW1vdglwYywgcjAKKworLyoKKyAqIGNwdV9hcm0xMDIwZV9kb19pZGxlKCkKKyAqLworCS5hbGlnbgk1CitFTlRSWShjcHVfYXJtMTAyMGVfZG9faWRsZSkKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMwLCA0CQlAIFdhaXQgZm9yIGludGVycnVwdAorCW1vdglwYywgbHIKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENBQ0hFID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKwkuYWxpZ24JNQorLyoKKyAqCWZsdXNoX3VzZXJfY2FjaGVfYWxsKCkKKyAqCisgKglJbnZhbGlkYXRlIGFsbCBjYWNoZSBlbnRyaWVzIGluIGEgcGFydGljdWxhciBhZGRyZXNzCisgKglzcGFjZS4KKyAqLworRU5UUlkoYXJtMTAyMGVfZmx1c2hfdXNlcl9jYWNoZV9hbGwpCisJLyogRkFMTFRIUk9VR0ggKi8KKy8qCisgKglmbHVzaF9rZXJuX2NhY2hlX2FsbCgpCisgKgorICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgdGhlIGVudGlyZSBjYWNoZS4KKyAqLworRU5UUlkoYXJtMTAyMGVfZmx1c2hfa2Vybl9jYWNoZV9hbGwpCisJbW92CXIyLCAjVk1fRVhFQworCW1vdglpcCwgIzAKK19fZmx1c2hfd2hvbGVfY2FjaGU6CisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglyMSwgIyhDQUNIRV9EU0VHTUVOVFMgLSAxKSA8PCA1CUAgMTYgc2VnbWVudHMKKzE6CW9ycglyMywgcjEsICMoQ0FDSEVfREVOVFJJRVMgLSAxKSA8PCAyNiBAIDY0IGVudHJpZXMKKzI6CW1jcglwMTUsIDAsIHIzLCBjNywgYzE0LCAyCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBpbmRleAorCXN1YnMJcjMsIHIzLCAjMSA8PCAyNgorCWJjcwkyYgkJCQlAIGVudHJpZXMgNjMgdG8gMAorCXN1YnMJcjEsIHIxLCAjMSA8PCA1CisJYmNzCTFiCQkJCUAgc2VnbWVudHMgMTUgdG8gMAorI2VuZGlmCisJdHN0CXIyLCAjVk1fRVhFQworI2lmbmRlZiBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorI2VuZGlmCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWZsdXNoX3VzZXJfY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCwgZmxhZ3MpCisgKgorICoJSW52YWxpZGF0ZSBhIHJhbmdlIG9mIGNhY2hlIGVudHJpZXMgaW4gdGhlIHNwZWNpZmllZAorICoJYWRkcmVzcyBzcGFjZS4KKyAqCisgKgktIHN0YXJ0CS0gc3RhcnQgYWRkcmVzcyAoaW5jbHVzaXZlKQorICoJLSBlbmQJLSBlbmQgYWRkcmVzcyAoZXhjbHVzaXZlKQorICoJLSBmbGFncwktIHZtX2ZsYWdzIGZvciB0aGlzIHNwYWNlCisgKi8KK0VOVFJZKGFybTEwMjBlX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UpCisJbW92CWlwLCAjMAorCXN1YglyMywgcjEsIHIwCQkJQCBjYWxjdWxhdGUgdG90YWwgc2l6ZQorCWNtcAlyMywgI0NBQ0hFX0RMSU1JVAorCWJocwlfX2ZsdXNoX3dob2xlX2NhY2hlCisKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKyNlbmRpZgorCXRzdAlyMiwgI1ZNX0VYRUMKKyNpZm5kZWYgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRQorCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKKyNlbmRpZgorCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKgljb2hlcmVudF9rZXJuX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJRW5zdXJlIGNvaGVyZW5jeSBiZXR3ZWVuIHRoZSBJY2FjaGUgYW5kIHRoZSBEY2FjaGUgaW4gdGhlCisgKglyZWdpb24gZGVzY3JpYmVkIGJ5IHN0YXJ0LiAgSWYgeW91IGhhdmUgbm9uLXNub29waW5nCisgKglIYXJ2YXJkIGNhY2hlcywgeW91IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgKgorICoJLSBzdGFydAktIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKGFybTEwMjBlX2NvaGVyZW50X2tlcm5fcmFuZ2UpCisJLyogRkFMTFRIUk9VR0ggKi8KKy8qCisgKgljb2hlcmVudF91c2VyX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJRW5zdXJlIGNvaGVyZW5jeSBiZXR3ZWVuIHRoZSBJY2FjaGUgYW5kIHRoZSBEY2FjaGUgaW4gdGhlCisgKglyZWdpb24gZGVzY3JpYmVkIGJ5IHN0YXJ0LiAgSWYgeW91IGhhdmUgbm9uLXNub29waW5nCisgKglIYXJ2YXJkIGNhY2hlcywgeW91IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgKgorICoJLSBzdGFydAktIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKGFybTEwMjBlX2NvaGVyZW50X3VzZXJfcmFuZ2UpCisJbW92CWlwLCAjMAorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisxOgorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorI2VuZGlmCisjaWZuZGVmIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBlbnRyeQorI2VuZGlmCisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uodm9pZCAqcGFnZSkKKyAqCisgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgorICoJdGhlIEkgY2FjaGUKKyAqCisgKgktIHBhZ2UJLSBwYWdlIGFsaWduZWQgYWRkcmVzcworICovCitFTlRSWShhcm0xMDIwZV9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQorCW1vdglpcCwgIzAKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQorCWFkZAlyMSwgcjAsICNQQUdFX1NaCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbitpbnZhbGlkYXRlIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorI2VuZGlmCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfaW52X3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJSW52YWxpZGF0ZSAoZGlzY2FyZCkgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCisgKglNYXkgbm90IHdyaXRlIGJhY2sgYW55IGVudHJpZXMuICBJZiAnc3RhcnQnIG9yICdlbmQnCisgKglhcmUgbm90IGNhY2hlIGxpbmUgYWxpZ25lZCwgdGhvc2UgbGluZXMgbXVzdCBiZSB3cml0dGVuCisgKgliYWNrLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICoKKyAqIChzYW1lIGFzIHY0d2IpCisgKi8KK0VOVFJZKGFybTEwMjBlX2RtYV9pbnZfcmFuZ2UpCisJbW92CWlwLCAjMAorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCisJdHN0CXIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJdHN0CXIxLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorCW1jcm5lCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNiwgMQkJQCBpbnZhbGlkYXRlIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorI2VuZGlmCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfY2xlYW5fcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglDbGVhbiB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqCisgKiAoc2FtZSBhcyB2NHdiKQorICovCitFTlRSWShhcm0xMDIwZV9kbWFfY2xlYW5fcmFuZ2UpCisJbW92CWlwLCAjMAorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorI2VuZGlmCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfZmx1c2hfcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkoYXJtMTAyMGVfZG1hX2ZsdXNoX3JhbmdlKQorCW1vdglpcCwgIzAKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbitpbnZhbGlkYXRlIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorI2VuZGlmCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKK0VOVFJZKGFybTEwMjBlX2NhY2hlX2ZucykKKwkubG9uZwlhcm0xMDIwZV9mbHVzaF9rZXJuX2NhY2hlX2FsbAorCS5sb25nCWFybTEwMjBlX2ZsdXNoX3VzZXJfY2FjaGVfYWxsCisJLmxvbmcJYXJtMTAyMGVfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQorCS5sb25nCWFybTEwMjBlX2NvaGVyZW50X2tlcm5fcmFuZ2UKKwkubG9uZwlhcm0xMDIwZV9jb2hlcmVudF91c2VyX3JhbmdlCisJLmxvbmcJYXJtMTAyMGVfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCWFybTEwMjBlX2RtYV9pbnZfcmFuZ2UKKwkubG9uZwlhcm0xMDIwZV9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlhcm0xMDIwZV9kbWFfZmx1c2hfcmFuZ2UKKworCS5hbGlnbgk1CitFTlRSWShjcHVfYXJtMTAyMGVfZGNhY2hlX2NsZWFuX2FyZWEpCisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKKwltb3YJaXAsICMwCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCXN1YnMJcjEsIHIxLCAjQ0FDSEVfRExJTkVTSVpFCisJYmhpCTFiCisjZW5kaWYKKwltb3YJcGMsIGxyCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUGFnZVRhYmxlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKgorICogY3B1X2FybTEwMjBlX3N3aXRjaF9tbShwZ2QpCisgKgorICogU2V0IHRoZSB0cmFuc2xhdGlvbiBiYXNlIHBvaW50ZXIgdG8gYmUgYXMgZGVzY3JpYmVkIGJ5IHBnZC4KKyAqCisgKiBwZ2Q6IG5ldyBwYWdlIHRhYmxlcworICovCisJLmFsaWduCTUKK0VOVFJZKGNwdV9hcm0xMDIwZV9zd2l0Y2hfbW0pCisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKKwltY3IJcDE1LCAwLCByMywgYzcsIGMxMCwgNAorCW1vdglyMSwgIzB4RgkJCUAgMTYgc2VnbWVudHMKKzE6CW1vdglyMywgIzB4M0YJCQlAIDY0IGVudHJpZXMKKzI6CW1vdglpcCwgcjMsIExTTCAjMjYgCQlAIHNoaWZ0IHVwIGVudHJ5CisJb3JyCWlwLCBpcCwgcjEsIExTTCAjNQkJQCBzaGlmdCBpbi91cCBpbmRleAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzE0LCAyCQlAIENsZWFuICYgSW52YWwgRENhY2hlIGVudHJ5CisJbW92CWlwLCAjMAorCXN1YnMJcjMsIHIzLCAjMQorCWNtcAlyMywgIzAKKwliZ2UJMmIJCQkJQCBlbnRyaWVzIDNGIHRvIDAKKwlzdWJzCXIxLCByMSwgIzEKKwljbXAJcjEsICMwCisJYmdlCTFiCQkJCUAgc2VnbWVudHMgMTUgdG8gMAorCisjZW5kaWYKKwltb3YJcjEsICMwCisjaWZuZGVmIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUKKwltY3IJcDE1LCAwLCByMSwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorI2VuZGlmCisJbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltY3IJcDE1LCAwLCByMCwgYzIsIGMwLCAwCQlAIGxvYWQgcGFnZSB0YWJsZSBwb2ludGVyCisJbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKwltb3YJcGMsIGxyCisgICAgICAgIAorLyoKKyAqIGNwdV9hcm0xMDIwZV9zZXRfcHRlKHB0ZXAsIHB0ZSkKKyAqCisgKiBTZXQgYSBQVEUgYW5kIGZsdXNoIGl0IG91dAorICovCisJLmFsaWduCTUKK0VOVFJZKGNwdV9hcm0xMDIwZV9zZXRfcHRlKQorCXN0cglyMSwgW3IwXSwgIy0yMDQ4CQlAIGxpbnV4IHZlcnNpb24KKworCWVvcglyMSwgcjEsICNMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCBMX1BURV9XUklURSB8IExfUFRFX0RJUlRZCisKKwliaWMJcjIsIHIxLCAjUFRFX1NNQUxMX0FQX01BU0sKKwliaWMJcjIsIHIyLCAjUFRFX1RZUEVfTUFTSworCW9ycglyMiwgcjIsICNQVEVfVFlQRV9TTUFMTAorCisJdHN0CXIxLCAjTF9QVEVfVVNFUgkJCUAgVXNlcj8KKwlvcnJuZQlyMiwgcjIsICNQVEVfU01BTExfQVBfVVJPX1NSVworCisJdHN0CXIxLCAjTF9QVEVfV1JJVEUgfCBMX1BURV9ESVJUWQlAIFdyaXRlIGFuZCBEaXJ0eT8KKwlvcnJlcQlyMiwgcjIsICNQVEVfU01BTExfQVBfVU5PX1NSVworCisJdHN0CXIxLCAjTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HCUAgUHJlc2VudCBhbmQgWW91bmc/CisJbW92bmUJcjIsICMwCisKKyNpZmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKwllb3IJcjMsIHIxLCAjMHgwYQkJCUAgQyAmIHNtYWxsIHBhZ2U/CisJdHN0CXIzLCAjMHgwYgorCWJpY2VxCXIyLCByMiwgIzQKKyNlbmRpZgorCXN0cglyMiwgW3IwXQkJCUAgaGFyZHdhcmUgdmVyc2lvbgorCW1vdglyMCwgcjAKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKyNlbmRpZgorCW1vdglwYywgbHIKKworCV9fSU5JVAorCisJLnR5cGUJX19hcm0xMDIwZV9zZXR1cCwgI2Z1bmN0aW9uCitfX2FybTEwMjBlX3NldHVwOgorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM3CQlAIGludmFsaWRhdGUgSSxEIGNhY2hlcyBvbiB2NAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlciBvbiB2NAorCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcJCUAgaW52YWxpZGF0ZSBJLEQgVExCcyBvbiB2NAorCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAJCUAgZ2V0IGNvbnRyb2wgcmVnaXN0ZXIgdjQKKwlsZHIJcjUsIGFybTEwMjBlX2NyMV9jbGVhcgorCWJpYwlyMCwgcjAsIHI1CisJbGRyCXI1LCBhcm0xMDIwZV9jcjFfc2V0CisJb3JyCXIwLCByMCwgcjUKKyNpZmRlZiBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOCisJb3JyCXIwLCByMCwgIzB4NDAwMCAJCUAgLlIuLiAuLi4uIC4uLi4gLi4uLgorI2VuZGlmCisJbW92CXBjLCBscgorCS5zaXplCV9fYXJtMTAyMGVfc2V0dXAsIC4gLSBfX2FybTEwMjBlX3NldHVwCisKKwkvKgorCSAqICBSCisJICogLlJWSSBaRlJTIEJMRFAgV0NBTQorCSAqIC4wLjEgMTAwMSAuLjExIDAxMDEJLyogRklYTUU6IHdoeSBubyBWIGJpdD8gKi8KKwkgKi8KKwkudHlwZQlhcm0xMDIwZV9jcjFfY2xlYXIsICNvYmplY3QKKwkudHlwZQlhcm0xMDIwZV9jcjFfc2V0LCAjb2JqZWN0Cithcm0xMDIwZV9jcjFfY2xlYXI6CisJLndvcmQJMHg1ZjNmCithcm0xMDIwZV9jcjFfc2V0OgorCS53b3JkCTB4MTkzNQorCisJX19JTklUREFUQQorCisvKgorICogUHVycG9zZSA6IEZ1bmN0aW9uIHBvaW50ZXJzIHVzZWQgdG8gYWNjZXNzIGFib3ZlIGZ1bmN0aW9ucyAtIGFsbCBjYWxscworICoJICAgICBjb21lIHRocm91Z2ggdGhlc2UKKyAqLworCS50eXBlCWFybTEwMjBlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKK2FybTEwMjBlX3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CisJLndvcmQJdjR0X2Vhcmx5X2Fib3J0CisJLndvcmQJY3B1X2FybTEwMjBlX3Byb2NfaW5pdAorCS53b3JkCWNwdV9hcm0xMDIwZV9wcm9jX2ZpbgorCS53b3JkCWNwdV9hcm0xMDIwZV9yZXNldAorCS53b3JkCWNwdV9hcm0xMDIwZV9kb19pZGxlCisJLndvcmQJY3B1X2FybTEwMjBlX2RjYWNoZV9jbGVhbl9hcmVhCisJLndvcmQJY3B1X2FybTEwMjBlX3N3aXRjaF9tbQorCS53b3JkCWNwdV9hcm0xMDIwZV9zZXRfcHRlCisJLnNpemUJYXJtMTAyMGVfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTEwMjBlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKworCS5zZWN0aW9uICIucm9kYXRhIgorCisJLnR5cGUJY3B1X2FyY2hfbmFtZSwgI29iamVjdAorY3B1X2FyY2hfbmFtZToKKwkuYXNjaXoJImFybXY1dGUiCisJLnNpemUJY3B1X2FyY2hfbmFtZSwgLiAtIGNwdV9hcmNoX25hbWUKKworCS50eXBlCWNwdV9lbGZfbmFtZSwgI29iamVjdAorY3B1X2VsZl9uYW1lOgorCS5hc2NpegkidjUiCisJLnNpemUJY3B1X2VsZl9uYW1lLCAuIC0gY3B1X2VsZl9uYW1lCisKKwkudHlwZQljcHVfYXJtMTAyMGVfbmFtZSwgI29iamVjdAorY3B1X2FybTEwMjBlX25hbWU6CisJLmFzY2lpCSJBUk0xMDIwRSIKKyNpZm5kZWYgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRQorCS5hc2NpaQkiaSIKKyNlbmRpZgorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCisJLmFzY2lpCSJkIgorI2lmZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAorCS5hc2NpaQkiKHd0KSIKKyNlbHNlCisJLmFzY2lpCSIod2IpIgorI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFCisJLmFzY2lpCSJCIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTgorCS5hc2NpaQkiUlIiCisjZW5kaWYKKwkuYXNjaWkJIlwwIgorCS5zaXplCWNwdV9hcm0xMDIwZV9uYW1lLCAuIC0gY3B1X2FybTEwMjBlX25hbWUKKworCS5hbGlnbgorCisJLnNlY3Rpb24gIi5wcm9jLmluZm8iLCAjYWxsb2MsICNleGVjaW5zdHIKKworCS50eXBlCV9fYXJtMTAyMGVfcHJvY19pbmZvLCNvYmplY3QKK19fYXJtMTAyMGVfcHJvY19pbmZvOgorCS5sb25nCTB4NDEwNWEyMDAJCQlAIEFSTSAxMDIwVEUgKEFyY2hpdGVjdHVyZSB2NVRFKQorCS5sb25nCTB4ZmYwZmZmZjAKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9CSVQ0IHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAorCWIJX19hcm0xMDIwZV9zZXR1cAorCS5sb25nCWNwdV9hcmNoX25hbWUKKwkubG9uZwljcHVfZWxmX25hbWUKKwkubG9uZwlIV0NBUF9TV1AgfCBIV0NBUF9IQUxGIHwgSFdDQVBfVEhVTUIgfCBIV0NBUF9FRFNQCisJLmxvbmcJY3B1X2FybTEwMjBlX25hbWUKKwkubG9uZwlhcm0xMDIwZV9wcm9jZXNzb3JfZnVuY3Rpb25zCisJLmxvbmcJdjR3YmlfdGxiX2ZucworCS5sb25nCXY0d2JfdXNlcl9mbnMKKwkubG9uZwlhcm0xMDIwZV9jYWNoZV9mbnMKKwkuc2l6ZQlfX2FybTEwMjBlX3Byb2NfaW5mbywgLiAtIF9fYXJtMTAyMGVfcHJvY19pbmZvCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0N2VkOTYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKQEAgLTAsMCArMSw0OTUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlM6IE1NVSBmdW5jdGlvbnMgZm9yIEFSTTEwMjJFCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMCBBUk0gTGltaXRlZAorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCisgKiBUaGVzZSBhcmUgdGhlIGxvdyBsZXZlbCBhc3NlbWJsZXIgZm9yIHBlcmZvcm1pbmcgY2FjaGUgYW5kIFRMQgorICogZnVuY3Rpb25zIG9uIHRoZSBBUk0xMDIyRS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS9jb25zdGFudHMuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jaW5mby5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworLyoKKyAqIFRoaXMgaXMgdGhlIG1heGltdW0gc2l6ZSBvZiBhbiBhcmVhIHdoaWNoIHdpbGwgYmUgaW52YWxpZGF0ZWQKKyAqIHVzaW5nIHRoZSBzaW5nbGUgaW52YWxpZGF0ZSBlbnRyeSBpbnN0cnVjdGlvbnMuICBBbnl0aGluZyBsYXJnZXIKKyAqIHRoYW4gdGhpcywgYW5kIHdlIGdvIGZvciB0aGUgd2hvbGUgY2FjaGUuCisgKgorICogVGhpcyB2YWx1ZSBzaG91bGQgYmUgY2hvc2VuIHN1Y2ggdGhhdCB3ZSBjaG9vc2UgdGhlIGNoZWFwZXN0CisgKiBhbHRlcm5hdGl2ZS4KKyAqLworI2RlZmluZSBNQVhfQVJFQV9TSVpFCTMyNzY4CisKKy8qCisgKiBUaGUgc2l6ZSBvZiBvbmUgZGF0YSBjYWNoZSBsaW5lLgorICovCisjZGVmaW5lIENBQ0hFX0RMSU5FU0laRQkzMgorCisvKgorICogVGhlIG51bWJlciBvZiBkYXRhIGNhY2hlIHNlZ21lbnRzLgorICovCisjZGVmaW5lIENBQ0hFX0RTRUdNRU5UUwkxNgorCisvKgorICogVGhlIG51bWJlciBvZiBsaW5lcyBpbiBhIGNhY2hlIHNlZ21lbnQuCisgKi8KKyNkZWZpbmUgQ0FDSEVfREVOVFJJRVMJNjQKKworLyoKKyAqIFRoaXMgaXMgdGhlIHNpemUgYXQgd2hpY2ggaXQgYmVjb21lcyBtb3JlIGVmZmljaWVudCB0bworICogY2xlYW4gdGhlIHdob2xlIGNhY2hlLCByYXRoZXIgdGhhbiB1c2luZyB0aGUgaW5kaXZpZHVhbAorICogY2FjaGUgbGluZSBtYWludGFpbmVuY2UgaW5zdHJ1Y3Rpb25zLgorICovCisjZGVmaW5lIENBQ0hFX0RMSU1JVAkzMjc2OAorCisJLnRleHQKKy8qCisgKiBjcHVfYXJtMTAyMl9wcm9jX2luaXQoKQorICovCitFTlRSWShjcHVfYXJtMTAyMl9wcm9jX2luaXQpCisJbW92CXBjLCBscgorCisvKgorICogY3B1X2FybTEwMjJfcHJvY19maW4oKQorICovCitFTlRSWShjcHVfYXJtMTAyMl9wcm9jX2ZpbikKKwlzdG1mZAlzcCEsIHtscn0KKwltb3YJaXAsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQorCW1zcgljcHNyX2MsIGlwCisJYmwJYXJtMTAyMl9mbHVzaF9rZXJuX2NhY2hlX2FsbAorCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCWJpYwlyMCwgcjAsICMweDEwMDAgCQlAIC4uLmkuLi4uLi4uLi4uLi4KKwliaWMJcjAsIHIwLCAjMHgwMDBlIAkJQCAuLi4uLi4uLi4uLi53Y2EuCisJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBkaXNhYmxlIGNhY2hlcworCWxkbWZkCXNwISwge3BjfQorCisvKgorICogY3B1X2FybTEwMjJfcmVzZXQobG9jKQorICoKKyAqIFBlcmZvcm0gYSBzb2Z0IHJlc2V0IG9mIHRoZSBzeXN0ZW0uCVB1dCB0aGUgQ1BVIGludG8gdGhlCisgKiBzYW1lIHN0YXRlIGFzIGl0IHdvdWxkIGJlIGlmIGl0IGhhZCBiZWVuIHJlc2V0LCBhbmQgYnJhbmNoCisgKiB0byB3aGF0IHdvdWxkIGJlIHRoZSByZXNldCB2ZWN0b3IuCisgKgorICogbG9jOiBsb2NhdGlvbiB0byBqdW1wIHRvIGZvciBzb2Z0IHJlc2V0CisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X2FybTEwMjJfcmVzZXQpCisJbW92CWlwLCAjMAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzcsIDAJCUAgaW52YWxpZGF0ZSBJLEQgY2FjaGVzCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSAmIEQgVExCcworCW1yYwlwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCWJpYwlpcCwgaXAsICMweDAwMGYgCQlAIC4uLi4uLi4uLi4uLndjYW0KKwliaWMJaXAsIGlwLCAjMHgxMTAwIAkJQCAuLi5pLi4ucy4uLi4uLi4uCisJbWNyCXAxNSwgMCwgaXAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCisJbW92CXBjLCByMAorCisvKgorICogY3B1X2FybTEwMjJfZG9faWRsZSgpCisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X2FybTEwMjJfZG9faWRsZSkKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMwLCA0CQlAIFdhaXQgZm9yIGludGVycnVwdAorCW1vdglwYywgbHIKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENBQ0hFID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKwkuYWxpZ24JNQorLyoKKyAqCWZsdXNoX3VzZXJfY2FjaGVfYWxsKCkKKyAqCisgKglJbnZhbGlkYXRlIGFsbCBjYWNoZSBlbnRyaWVzIGluIGEgcGFydGljdWxhciBhZGRyZXNzCisgKglzcGFjZS4KKyAqLworRU5UUlkoYXJtMTAyMl9mbHVzaF91c2VyX2NhY2hlX2FsbCkKKwkvKiBGQUxMVEhST1VHSCAqLworLyoKKyAqCWZsdXNoX2tlcm5fY2FjaGVfYWxsKCkKKyAqCisgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSB0aGUgZW50aXJlIGNhY2hlLgorICovCitFTlRSWShhcm0xMDIyX2ZsdXNoX2tlcm5fY2FjaGVfYWxsKQorCW1vdglyMiwgI1ZNX0VYRUMKKwltb3YJaXAsICMwCitfX2ZsdXNoX3dob2xlX2NhY2hlOgorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCisJbW92CXIxLCAjKENBQ0hFX0RTRUdNRU5UUyAtIDEpIDw8IDUJQCAxNiBzZWdtZW50cworMToJb3JyCXIzLCByMSwgIyhDQUNIRV9ERU5UUklFUyAtIDEpIDw8IDI2IEAgNjQgZW50cmllcworMjoJbWNyCXAxNSwgMCwgcjMsIGM3LCBjMTQsIDIJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGluZGV4CisJc3VicwlyMywgcjMsICMxIDw8IDI2CisJYmNzCTJiCQkJCUAgZW50cmllcyA2MyB0byAwCisJc3VicwlyMSwgcjEsICMxIDw8IDUKKwliY3MJMWIJCQkJQCBzZWdtZW50cyAxNSB0byAwCisjZW5kaWYKKwl0c3QJcjIsICNWTV9FWEVDCisjaWZuZGVmIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisjZW5kaWYKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfdXNlcl9jYWNoZV9yYW5nZShzdGFydCwgZW5kLCBmbGFncykKKyAqCisgKglJbnZhbGlkYXRlIGEgcmFuZ2Ugb2YgY2FjaGUgZW50cmllcyBpbiB0aGUgc3BlY2lmaWVkCisgKglhZGRyZXNzIHNwYWNlLgorICoKKyAqCS0gc3RhcnQJLSBzdGFydCBhZGRyZXNzIChpbmNsdXNpdmUpCisgKgktIGVuZAktIGVuZCBhZGRyZXNzIChleGNsdXNpdmUpCisgKgktIGZsYWdzCS0gdm1fZmxhZ3MgZm9yIHRoaXMgc3BhY2UKKyAqLworRU5UUlkoYXJtMTAyMl9mbHVzaF91c2VyX2NhY2hlX3JhbmdlKQorCW1vdglpcCwgIzAKKwlzdWIJcjMsIHIxLCByMAkJCUAgY2FsY3VsYXRlIHRvdGFsIHNpemUKKwljbXAJcjMsICNDQUNIRV9ETElNSVQKKwliaHMJX19mbHVzaF93aG9sZV9jYWNoZQorCisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisjZW5kaWYKKwl0c3QJcjIsICNWTV9FWEVDCisjaWZuZGVmIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisjZW5kaWYKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJY29oZXJlbnRfa2Vybl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUVuc3VyZSBjb2hlcmVuY3kgYmV0d2VlbiB0aGUgSWNhY2hlIGFuZCB0aGUgRGNhY2hlIGluIHRoZQorICoJcmVnaW9uIGRlc2NyaWJlZCBieSBzdGFydC4gIElmIHlvdSBoYXZlIG5vbi1zbm9vcGluZworICoJSGFydmFyZCBjYWNoZXMsIHlvdSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWShhcm0xMDIyX2NvaGVyZW50X2tlcm5fcmFuZ2UpCisJLyogRkFMTFRIUk9VR0ggKi8KKworLyoKKyAqCWNvaGVyZW50X3VzZXJfcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglFbnN1cmUgY29oZXJlbmN5IGJldHdlZW4gdGhlIEljYWNoZSBhbmQgdGhlIERjYWNoZSBpbiB0aGUKKyAqCXJlZ2lvbiBkZXNjcmliZWQgYnkgc3RhcnQuICBJZiB5b3UgaGF2ZSBub24tc25vb3BpbmcKKyAqCUhhcnZhcmQgY2FjaGVzLCB5b3UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkoYXJtMTAyMl9jb2hlcmVudF91c2VyX3JhbmdlKQorCW1vdglpcCwgIzAKKwliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorMToKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKyNlbmRpZgorI2lmbmRlZiBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgMQkJQCBpbnZhbGlkYXRlIEkgZW50cnkKKyNlbmRpZgorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKglmbHVzaF9rZXJuX2RjYWNoZV9wYWdlKHZvaWQgKnBhZ2UpCisgKgorICoJRW5zdXJlIG5vIEQgY2FjaGUgYWxpYXNpbmcgb2NjdXJzLCBlaXRoZXIgd2l0aCBpdHNlbGYgb3IKKyAqCXRoZSBJIGNhY2hlCisgKgorICoJLSBwYWdlCS0gcGFnZSBhbGlnbmVkIGFkZHJlc3MKKyAqLworRU5UUlkoYXJtMTAyMl9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQorCW1vdglpcCwgIzAKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQorCWFkZAlyMSwgcjAsICNQQUdFX1NaCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbitpbnZhbGlkYXRlIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorI2VuZGlmCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfaW52X3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJSW52YWxpZGF0ZSAoZGlzY2FyZCkgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCisgKglNYXkgbm90IHdyaXRlIGJhY2sgYW55IGVudHJpZXMuICBJZiAnc3RhcnQnIG9yICdlbmQnCisgKglhcmUgbm90IGNhY2hlIGxpbmUgYWxpZ25lZCwgdGhvc2UgbGluZXMgbXVzdCBiZSB3cml0dGVuCisgKgliYWNrLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICoKKyAqIChzYW1lIGFzIHY0d2IpCisgKi8KK0VOVFJZKGFybTEwMjJfZG1hX2ludl9yYW5nZSkKKwltb3YJaXAsICMwCisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKKwl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKwltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwl0c3QJcjEsICNDQUNIRV9ETElORVNJWkUgLSAxCisJbWNybmUJcDE1LCAwLCByMSwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCQlAIGludmFsaWRhdGUgRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisjZW5kaWYKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWRtYV9jbGVhbl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUNsZWFuIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICoKKyAqIChzYW1lIGFzIHY0d2IpCisgKi8KK0VOVFJZKGFybTEwMjJfZG1hX2NsZWFuX3JhbmdlKQorCW1vdglpcCwgIzAKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKyNlbmRpZgorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZG1hX2ZsdXNoX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCisgKgorICoJLSBzdGFydAktIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKGFybTEwMjJfZG1hX2ZsdXNoX3JhbmdlKQorCW1vdglpcCwgIzAKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbitpbnZhbGlkYXRlIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorI2VuZGlmCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKK0VOVFJZKGFybTEwMjJfY2FjaGVfZm5zKQorCS5sb25nCWFybTEwMjJfZmx1c2hfa2Vybl9jYWNoZV9hbGwKKwkubG9uZwlhcm0xMDIyX2ZsdXNoX3VzZXJfY2FjaGVfYWxsCisJLmxvbmcJYXJtMTAyMl9mbHVzaF91c2VyX2NhY2hlX3JhbmdlCisJLmxvbmcJYXJtMTAyMl9jb2hlcmVudF9rZXJuX3JhbmdlCisJLmxvbmcJYXJtMTAyMl9jb2hlcmVudF91c2VyX3JhbmdlCisJLmxvbmcJYXJtMTAyMl9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJYXJtMTAyMl9kbWFfaW52X3JhbmdlCisJLmxvbmcJYXJtMTAyMl9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlhcm0xMDIyX2RtYV9mbHVzaF9yYW5nZQorCisJLmFsaWduCTUKK0VOVFJZKGNwdV9hcm0xMDIyX2RjYWNoZV9jbGVhbl9hcmVhKQorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCisJbW92CWlwLCAjMAorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwlzdWJzCXIxLCByMSwgI0NBQ0hFX0RMSU5FU0laRQorCWJoaQkxYgorI2VuZGlmCisJbW92CXBjLCBscgorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFBhZ2VUYWJsZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyoKKyAqIGNwdV9hcm0xMDIyX3N3aXRjaF9tbShwZ2QpCisgKgorICogU2V0IHRoZSB0cmFuc2xhdGlvbiBiYXNlIHBvaW50ZXIgdG8gYmUgYXMgZGVzY3JpYmVkIGJ5IHBnZC4KKyAqCisgKiBwZ2Q6IG5ldyBwYWdlIHRhYmxlcworICovCisJLmFsaWduCTUKK0VOVFJZKGNwdV9hcm0xMDIyX3N3aXRjaF9tbSkKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQorCW1vdglyMSwgIyhDQUNIRV9EU0VHTUVOVFMgLSAxKSA8PCA1CUAgMTYgc2VnbWVudHMKKzE6CW9ycglyMywgcjEsICMoQ0FDSEVfREVOVFJJRVMgLSAxKSA8PCAyNiBAIDY0IGVudHJpZXMKKzI6CW1jcglwMTUsIDAsIHIzLCBjNywgYzE0LCAyCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBpbmRleAorCXN1YnMJcjMsIHIzLCAjMSA8PCAyNgorCWJjcwkyYgkJCQlAIGVudHJpZXMgNjMgdG8gMAorCXN1YnMJcjEsIHIxLCAjMSA8PCA1CisJYmNzCTFiCQkJCUAgc2VnbWVudHMgMTUgdG8gMAorI2VuZGlmCisJbW92CXIxLCAjMAorI2lmbmRlZiBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFCisJbWNyCXAxNSwgMCwgcjEsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKKyNlbmRpZgorCW1jcglwMTUsIDAsIHIxLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBsb2FkIHBhZ2UgdGFibGUgcG9pbnRlcgorCW1jcglwMTUsIDAsIHIxLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisJbW92CXBjLCBscgorICAgICAgICAKKy8qCisgKiBjcHVfYXJtMTAyMl9zZXRfcHRlKHB0ZXAsIHB0ZSkKKyAqCisgKiBTZXQgYSBQVEUgYW5kIGZsdXNoIGl0IG91dAorICovCisJLmFsaWduCTUKK0VOVFJZKGNwdV9hcm0xMDIyX3NldF9wdGUpCisJc3RyCXIxLCBbcjBdLCAjLTIwNDgJCUAgbGludXggdmVyc2lvbgorCisJZW9yCXIxLCByMSwgI0xfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8IExfUFRFX1dSSVRFIHwgTF9QVEVfRElSVFkKKworCWJpYwlyMiwgcjEsICNQVEVfU01BTExfQVBfTUFTSworCWJpYwlyMiwgcjIsICNQVEVfVFlQRV9NQVNLCisJb3JyCXIyLCByMiwgI1BURV9UWVBFX1NNQUxMCisKKwl0c3QJcjEsICNMX1BURV9VU0VSCQkJQCBVc2VyPworCW9ycm5lCXIyLCByMiwgI1BURV9TTUFMTF9BUF9VUk9fU1JXCisKKwl0c3QJcjEsICNMX1BURV9XUklURSB8IExfUFRFX0RJUlRZCUAgV3JpdGUgYW5kIERpcnR5PworCW9ycmVxCXIyLCByMiwgI1BURV9TTUFMTF9BUF9VTk9fU1JXCisKKwl0c3QJcjEsICNMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcJQCBQcmVzZW50IGFuZCBZb3VuZz8KKwltb3ZuZQlyMiwgIzAKKworI2lmZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAorCWVvcglyMywgcjEsICMweDBhCQkJQCBDICYgc21hbGwgcGFnZT8KKwl0c3QJcjMsICMweDBiCisJYmljZXEJcjIsIHIyLCAjNAorI2VuZGlmCisJc3RyCXIyLCBbcjBdCQkJQCBoYXJkd2FyZSB2ZXJzaW9uCisJbW92CXIwLCByMAorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorI2VuZGlmCisJbW92CXBjLCBscgorCisJX19JTklUCisKKwkudHlwZQlfX2FybTEwMjJfc2V0dXAsICNmdW5jdGlvbgorX19hcm0xMDIyX3NldHVwOgorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM3CQlAIGludmFsaWRhdGUgSSxEIGNhY2hlcyBvbiB2NAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlciBvbiB2NAorCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcJCUAgaW52YWxpZGF0ZSBJLEQgVExCcyBvbiB2NAorCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAJCUAgZ2V0IGNvbnRyb2wgcmVnaXN0ZXIgdjQKKwlsZHIJcjUsIGFybTEwMjJfY3IxX2NsZWFyCisJYmljCXIwLCByMCwgcjUKKwlsZHIJcjUsIGFybTEwMjJfY3IxX3NldAorCW9ycglyMCwgcjAsIHI1CisjaWZkZWYgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTgorCW9ycglyMCwgcjAsICMweDQwMDAgCQlAIC5SLi4uLi4uLi4uLi4uLi4KKyNlbmRpZgorCW1vdglwYywgbHIKKwkuc2l6ZQlfX2FybTEwMjJfc2V0dXAsIC4gLSBfX2FybTEwMjJfc2V0dXAKKworCS8qCisJICogIFIKKwkgKiAuUlZJIFpGUlMgQkxEUCBXQ0FNCisJICogLjAxMSAxMDAxIC4uMTEgMDEwMQorCSAqIAorCSAqLworCS50eXBlCWFybTEwMjJfY3IxX2NsZWFyLCAjb2JqZWN0CisJLnR5cGUJYXJtMTAyMl9jcjFfc2V0LCAjb2JqZWN0Cithcm0xMDIyX2NyMV9jbGVhcjoKKwkud29yZAkweDdmM2YKK2FybTEwMjJfY3IxX3NldDoKKwkud29yZAkweDM5MzUKKworCV9fSU5JVERBVEEKKworLyoKKyAqIFB1cnBvc2UgOiBGdW5jdGlvbiBwb2ludGVycyB1c2VkIHRvIGFjY2VzcyBhYm92ZSBmdW5jdGlvbnMgLSBhbGwgY2FsbHMKKyAqCSAgICAgY29tZSB0aHJvdWdoIHRoZXNlCisgKi8KKwkudHlwZQlhcm0xMDIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKK2FybTEwMjJfcHJvY2Vzc29yX2Z1bmN0aW9uczoKKwkud29yZAl2NHRfZWFybHlfYWJvcnQKKwkud29yZAljcHVfYXJtMTAyMl9wcm9jX2luaXQKKwkud29yZAljcHVfYXJtMTAyMl9wcm9jX2ZpbgorCS53b3JkCWNwdV9hcm0xMDIyX3Jlc2V0CisJLndvcmQJY3B1X2FybTEwMjJfZG9faWRsZQorCS53b3JkCWNwdV9hcm0xMDIyX2RjYWNoZV9jbGVhbl9hcmVhCisJLndvcmQJY3B1X2FybTEwMjJfc3dpdGNoX21tCisJLndvcmQJY3B1X2FybTEwMjJfc2V0X3B0ZQorCS5zaXplCWFybTEwMjJfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTEwMjJfcHJvY2Vzc29yX2Z1bmN0aW9ucworCisJLnNlY3Rpb24gIi5yb2RhdGEiCisKKwkudHlwZQljcHVfYXJjaF9uYW1lLCAjb2JqZWN0CitjcHVfYXJjaF9uYW1lOgorCS5hc2NpegkiYXJtdjV0ZSIKKwkuc2l6ZQljcHVfYXJjaF9uYW1lLCAuIC0gY3B1X2FyY2hfbmFtZQorCisJLnR5cGUJY3B1X2VsZl9uYW1lLCAjb2JqZWN0CitjcHVfZWxmX25hbWU6CisJLmFzY2l6CSJ2NSIKKwkuc2l6ZQljcHVfZWxmX25hbWUsIC4gLSBjcHVfZWxmX25hbWUKKworCS50eXBlCWNwdV9hcm0xMDIyX25hbWUsICNvYmplY3QKK2NwdV9hcm0xMDIyX25hbWU6CisJLmFzY2lpCSJhcm0xMDIyIgorI2lmbmRlZiBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFCisJLmFzY2lpCSJpIgorI2VuZGlmCisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKKwkuYXNjaWkJImQiCisjaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJLmFzY2lpCSIod3QpIgorI2Vsc2UKKwkuYXNjaWkJIih3YikiCisjZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUKKwkuYXNjaWkJIkIiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOCisJLmFzY2lpCSJSUiIKKyNlbmRpZgorCS5hc2NpaQkiXDAiCisJLnNpemUJY3B1X2FybTEwMjJfbmFtZSwgLiAtIGNwdV9hcm0xMDIyX25hbWUKKworCS5hbGlnbgorCisJLnNlY3Rpb24gIi5wcm9jLmluZm8iLCAjYWxsb2MsICNleGVjaW5zdHIKKworCS50eXBlCV9fYXJtMTAyMl9wcm9jX2luZm8sI29iamVjdAorX19hcm0xMDIyX3Byb2NfaW5mbzoKKwkubG9uZwkweDQxMDVhMjIwCQkJQCBBUk0gMTAyMkUgKHY1VEUpCisJLmxvbmcJMHhmZjBmZmZmMAorCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKKwkJUE1EX0JJVDQgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECisJYglfX2FybTEwMjJfc2V0dXAKKwkubG9uZwljcHVfYXJjaF9uYW1lCisJLmxvbmcJY3B1X2VsZl9uYW1lCisJLmxvbmcJSFdDQVBfU1dQIHwgSFdDQVBfSEFMRiB8IEhXQ0FQX1RIVU1CIHwgSFdDQVBfRURTUAorCS5sb25nCWNwdV9hcm0xMDIyX25hbWUKKwkubG9uZwlhcm0xMDIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKwkubG9uZwl2NHdiaV90bGJfZm5zCisJLmxvbmcJdjR3Yl91c2VyX2ZucworCS5sb25nCWFybTEwMjJfY2FjaGVfZm5zCisJLnNpemUJX19hcm0xMDIyX3Byb2NfaW5mbywgLiAtIF9fYXJtMTAyMl9wcm9jX2luZm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ4MTEwYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TCkBAIC0wLDAgKzEsNDkxIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TOiBNTVUgZnVuY3Rpb25zIGZvciBBUk0xMDI2RUotUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgQVJNIExpbWl0ZWQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKgorICogVGhlc2UgYXJlIHRoZSBsb3cgbGV2ZWwgYXNzZW1ibGVyIGZvciBwZXJmb3JtaW5nIGNhY2hlIGFuZCBUTEIKKyAqIGZ1bmN0aW9ucyBvbiB0aGUgQVJNMTAyNkVKLVMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKy8qCisgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIHNpemUgb2YgYW4gYXJlYSB3aGljaCB3aWxsIGJlIGludmFsaWRhdGVkCisgKiB1c2luZyB0aGUgc2luZ2xlIGludmFsaWRhdGUgZW50cnkgaW5zdHJ1Y3Rpb25zLiAgQW55dGhpbmcgbGFyZ2VyCisgKiB0aGFuIHRoaXMsIGFuZCB3ZSBnbyBmb3IgdGhlIHdob2xlIGNhY2hlLgorICoKKyAqIFRoaXMgdmFsdWUgc2hvdWxkIGJlIGNob3NlbiBzdWNoIHRoYXQgd2UgY2hvb3NlIHRoZSBjaGVhcGVzdAorICogYWx0ZXJuYXRpdmUuCisgKi8KKyNkZWZpbmUgTUFYX0FSRUFfU0laRQkzMjc2OAorCisvKgorICogVGhlIHNpemUgb2Ygb25lIGRhdGEgY2FjaGUgbGluZS4KKyAqLworI2RlZmluZSBDQUNIRV9ETElORVNJWkUJMzIKKworLyoKKyAqIFRoZSBudW1iZXIgb2YgZGF0YSBjYWNoZSBzZWdtZW50cy4KKyAqLworI2RlZmluZSBDQUNIRV9EU0VHTUVOVFMJMTYKKworLyoKKyAqIFRoZSBudW1iZXIgb2YgbGluZXMgaW4gYSBjYWNoZSBzZWdtZW50LgorICovCisjZGVmaW5lIENBQ0hFX0RFTlRSSUVTCTY0CisKKy8qCisgKiBUaGlzIGlzIHRoZSBzaXplIGF0IHdoaWNoIGl0IGJlY29tZXMgbW9yZSBlZmZpY2llbnQgdG8KKyAqIGNsZWFuIHRoZSB3aG9sZSBjYWNoZSwgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIGluZGl2aWR1YWwKKyAqIGNhY2hlIGxpbmUgbWFpbnRhaW5lbmNlIGluc3RydWN0aW9ucy4KKyAqLworI2RlZmluZSBDQUNIRV9ETElNSVQJMzI3NjgKKworCS50ZXh0CisvKgorICogY3B1X2FybTEwMjZfcHJvY19pbml0KCkKKyAqLworRU5UUlkoY3B1X2FybTEwMjZfcHJvY19pbml0KQorCW1vdglwYywgbHIKKworLyoKKyAqIGNwdV9hcm0xMDI2X3Byb2NfZmluKCkKKyAqLworRU5UUlkoY3B1X2FybTEwMjZfcHJvY19maW4pCisJc3RtZmQJc3AhLCB7bHJ9CisJbW92CWlwLCAjUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUKKwltc3IJY3Bzcl9jLCBpcAorCWJsCWFybTEwMjZfZmx1c2hfa2Vybl9jYWNoZV9hbGwKKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwliaWMJcjAsIHIwLCAjMHgxMDAwIAkJQCAuLi5pLi4uLi4uLi4uLi4uCisJYmljCXIwLCByMCwgIzB4MDAwZSAJCUAgLi4uLi4uLi4uLi4ud2NhLgorCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgZGlzYWJsZSBjYWNoZXMKKwlsZG1mZAlzcCEsIHtwY30KKworLyoKKyAqIGNwdV9hcm0xMDI2X3Jlc2V0KGxvYykKKyAqCisgKiBQZXJmb3JtIGEgc29mdCByZXNldCBvZiB0aGUgc3lzdGVtLglQdXQgdGhlIENQVSBpbnRvIHRoZQorICogc2FtZSBzdGF0ZSBhcyBpdCB3b3VsZCBiZSBpZiBpdCBoYWQgYmVlbiByZXNldCwgYW5kIGJyYW5jaAorICogdG8gd2hhdCB3b3VsZCBiZSB0aGUgcmVzZXQgdmVjdG9yLgorICoKKyAqIGxvYzogbG9jYXRpb24gdG8ganVtcCB0byBmb3Igc29mdCByZXNldAorICovCisJLmFsaWduCTUKK0VOVFJZKGNwdV9hcm0xMDI2X3Jlc2V0KQorCW1vdglpcCwgIzAKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM3LCAwCQlAIGludmFsaWRhdGUgSSxEIGNhY2hlcworCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKwltcmMJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwliaWMJaXAsIGlwLCAjMHgwMDBmIAkJQCAuLi4uLi4uLi4uLi53Y2FtCisJYmljCWlwLCBpcCwgIzB4MTEwMCAJCUAgLi4uaS4uLnMuLi4uLi4uLgorCW1jcglwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCW1vdglwYywgcjAKKworLyoKKyAqIGNwdV9hcm0xMDI2X2RvX2lkbGUoKQorICovCisJLmFsaWduCTUKK0VOVFJZKGNwdV9hcm0xMDI2X2RvX2lkbGUpCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMCwgNAkJQCBXYWl0IGZvciBpbnRlcnJ1cHQKKwltb3YJcGMsIGxyCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDQUNIRSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisJLmFsaWduCTUKKy8qCisgKglmbHVzaF91c2VyX2NhY2hlX2FsbCgpCisgKgorICoJSW52YWxpZGF0ZSBhbGwgY2FjaGUgZW50cmllcyBpbiBhIHBhcnRpY3VsYXIgYWRkcmVzcworICoJc3BhY2UuCisgKi8KK0VOVFJZKGFybTEwMjZfZmx1c2hfdXNlcl9jYWNoZV9hbGwpCisJLyogRkFMTFRIUk9VR0ggKi8KKy8qCisgKglmbHVzaF9rZXJuX2NhY2hlX2FsbCgpCisgKgorICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgdGhlIGVudGlyZSBjYWNoZS4KKyAqLworRU5UUlkoYXJtMTAyNl9mbHVzaF9rZXJuX2NhY2hlX2FsbCkKKwltb3YJcjIsICNWTV9FWEVDCisJbW92CWlwLCAjMAorX19mbHVzaF93aG9sZV9jYWNoZToKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQorMToJbXJjCXAxNSwgMCwgcjE1LCBjNywgYzE0LCAzCQlAIHRlc3QsIGNsZWFuLCBpbnZhbGlkYXRlCisJYm5lCTFiCisjZW5kaWYKKwl0c3QJcjIsICNWTV9FWEVDCisjaWZuZGVmIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisjZW5kaWYKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfdXNlcl9jYWNoZV9yYW5nZShzdGFydCwgZW5kLCBmbGFncykKKyAqCisgKglJbnZhbGlkYXRlIGEgcmFuZ2Ugb2YgY2FjaGUgZW50cmllcyBpbiB0aGUgc3BlY2lmaWVkCisgKglhZGRyZXNzIHNwYWNlLgorICoKKyAqCS0gc3RhcnQJLSBzdGFydCBhZGRyZXNzIChpbmNsdXNpdmUpCisgKgktIGVuZAktIGVuZCBhZGRyZXNzIChleGNsdXNpdmUpCisgKgktIGZsYWdzCS0gdm1fZmxhZ3MgZm9yIHRoaXMgc3BhY2UKKyAqLworRU5UUlkoYXJtMTAyNl9mbHVzaF91c2VyX2NhY2hlX3JhbmdlKQorCW1vdglpcCwgIzAKKwlzdWIJcjMsIHIxLCByMAkJCUAgY2FsY3VsYXRlIHRvdGFsIHNpemUKKwljbXAJcjMsICNDQUNIRV9ETElNSVQKKwliaHMJX19mbHVzaF93aG9sZV9jYWNoZQorCisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisjZW5kaWYKKwl0c3QJcjIsICNWTV9FWEVDCisjaWZuZGVmIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisjZW5kaWYKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJY29oZXJlbnRfa2Vybl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUVuc3VyZSBjb2hlcmVuY3kgYmV0d2VlbiB0aGUgSWNhY2hlIGFuZCB0aGUgRGNhY2hlIGluIHRoZQorICoJcmVnaW9uIGRlc2NyaWJlZCBieSBzdGFydC4gIElmIHlvdSBoYXZlIG5vbi1zbm9vcGluZworICoJSGFydmFyZCBjYWNoZXMsIHlvdSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWShhcm0xMDI2X2NvaGVyZW50X2tlcm5fcmFuZ2UpCisJLyogRkFMTFRIUk9VR0ggKi8KKy8qCisgKgljb2hlcmVudF91c2VyX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJRW5zdXJlIGNvaGVyZW5jeSBiZXR3ZWVuIHRoZSBJY2FjaGUgYW5kIHRoZSBEY2FjaGUgaW4gdGhlCisgKglyZWdpb24gZGVzY3JpYmVkIGJ5IHN0YXJ0LiAgSWYgeW91IGhhdmUgbm9uLXNub29waW5nCisgKglIYXJ2YXJkIGNhY2hlcywgeW91IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgKgorICoJLSBzdGFydAktIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKGFybTEwMjZfY29oZXJlbnRfdXNlcl9yYW5nZSkKKwltb3YJaXAsICMwCisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKzE6CisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisjZW5kaWYKKyNpZm5kZWYgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDEJCUAgaW52YWxpZGF0ZSBJIGVudHJ5CisjZW5kaWYKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoKKyAqCUVuc3VyZSBubyBEIGNhY2hlIGFsaWFzaW5nIG9jY3VycywgZWl0aGVyIHdpdGggaXRzZWxmIG9yCisgKgl0aGUgSSBjYWNoZQorICoKKyAqCS0gcGFnZQktIHBhZ2UgYWxpZ25lZCBhZGRyZXNzCisgKi8KK0VOVFJZKGFybTEwMjZfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKKwltb3YJaXAsICMwCisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKKwlhZGQJcjEsIHIwLCAjUEFHRV9TWgorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKyNlbmRpZgorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZG1hX2ludl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUludmFsaWRhdGUgKGRpc2NhcmQpIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoJTWF5IG5vdCB3cml0ZSBiYWNrIGFueSBlbnRyaWVzLiAgSWYgJ3N0YXJ0JyBvciAnZW5kJworICoJYXJlIG5vdCBjYWNoZSBsaW5lIGFsaWduZWQsIHRob3NlIGxpbmVzIG11c3QgYmUgd3JpdHRlbgorICoJYmFjay4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqCisgKiAoc2FtZSBhcyB2NHdiKQorICovCitFTlRSWShhcm0xMDI2X2RtYV9pbnZfcmFuZ2UpCisJbW92CWlwLCAjMAorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCisJdHN0CXIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJdHN0CXIxLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorCW1jcm5lCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNiwgMQkJQCBpbnZhbGlkYXRlIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorI2VuZGlmCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfY2xlYW5fcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglDbGVhbiB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqCisgKiAoc2FtZSBhcyB2NHdiKQorICovCitFTlRSWShhcm0xMDI2X2RtYV9jbGVhbl9yYW5nZSkKKwltb3YJaXAsICMwCisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKKwliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisjZW5kaWYKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWRtYV9mbHVzaF9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUNsZWFuIGFuZCBpbnZhbGlkYXRlIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWShhcm0xMDI2X2RtYV9mbHVzaF9yYW5nZSkKKwltb3YJaXAsICMwCisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKKwliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKyNlbmRpZgorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCitFTlRSWShhcm0xMDI2X2NhY2hlX2ZucykKKwkubG9uZwlhcm0xMDI2X2ZsdXNoX2tlcm5fY2FjaGVfYWxsCisJLmxvbmcJYXJtMTAyNl9mbHVzaF91c2VyX2NhY2hlX2FsbAorCS5sb25nCWFybTEwMjZfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQorCS5sb25nCWFybTEwMjZfY29oZXJlbnRfa2Vybl9yYW5nZQorCS5sb25nCWFybTEwMjZfY29oZXJlbnRfdXNlcl9yYW5nZQorCS5sb25nCWFybTEwMjZfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCWFybTEwMjZfZG1hX2ludl9yYW5nZQorCS5sb25nCWFybTEwMjZfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJYXJtMTAyNl9kbWFfZmx1c2hfcmFuZ2UKKworCS5hbGlnbgk1CitFTlRSWShjcHVfYXJtMTAyNl9kY2FjaGVfY2xlYW5fYXJlYSkKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQorCW1vdglpcCwgIzAKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJc3VicwlyMSwgcjEsICNDQUNIRV9ETElORVNJWkUKKwliaGkJMWIKKyNlbmRpZgorCW1vdglwYywgbHIKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBQYWdlVGFibGUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qCisgKiBjcHVfYXJtMTAyNl9zd2l0Y2hfbW0ocGdkKQorICoKKyAqIFNldCB0aGUgdHJhbnNsYXRpb24gYmFzZSBwb2ludGVyIHRvIGJlIGFzIGRlc2NyaWJlZCBieSBwZ2QuCisgKgorICogcGdkOiBuZXcgcGFnZSB0YWJsZXMKKyAqLworCS5hbGlnbgk1CitFTlRSWShjcHVfYXJtMTAyNl9zd2l0Y2hfbW0pCisJbW92CXIxLCAjMAorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCisxOgltcmMJcDE1LCAwLCByMTUsIGM3LCBjMTQsIDMJCUAgdGVzdCwgY2xlYW4sIGludmFsaWRhdGUKKwlibmUJMWIKKyNlbmRpZgorI2lmbmRlZiBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFCisJbWNyCXAxNSwgMCwgcjEsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKKyNlbmRpZgorCW1jcglwMTUsIDAsIHIxLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBsb2FkIHBhZ2UgdGFibGUgcG9pbnRlcgorCW1jcglwMTUsIDAsIHIxLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisJbW92CXBjLCBscgorICAgICAgICAKKy8qCisgKiBjcHVfYXJtMTAyNl9zZXRfcHRlKHB0ZXAsIHB0ZSkKKyAqCisgKiBTZXQgYSBQVEUgYW5kIGZsdXNoIGl0IG91dAorICovCisJLmFsaWduCTUKK0VOVFJZKGNwdV9hcm0xMDI2X3NldF9wdGUpCisJc3RyCXIxLCBbcjBdLCAjLTIwNDgJCUAgbGludXggdmVyc2lvbgorCisJZW9yCXIxLCByMSwgI0xfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8IExfUFRFX1dSSVRFIHwgTF9QVEVfRElSVFkKKworCWJpYwlyMiwgcjEsICNQVEVfU01BTExfQVBfTUFTSworCWJpYwlyMiwgcjIsICNQVEVfVFlQRV9NQVNLCisJb3JyCXIyLCByMiwgI1BURV9UWVBFX1NNQUxMCisKKwl0c3QJcjEsICNMX1BURV9VU0VSCQkJQCBVc2VyPworCW9ycm5lCXIyLCByMiwgI1BURV9TTUFMTF9BUF9VUk9fU1JXCisKKwl0c3QJcjEsICNMX1BURV9XUklURSB8IExfUFRFX0RJUlRZCUAgV3JpdGUgYW5kIERpcnR5PworCW9ycmVxCXIyLCByMiwgI1BURV9TTUFMTF9BUF9VTk9fU1JXCisKKwl0c3QJcjEsICNMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcJQCBQcmVzZW50IGFuZCBZb3VuZz8KKwltb3ZuZQlyMiwgIzAKKworI2lmZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAorCWVvcglyMywgcjEsICMweDBhCQkJQCBDICYgc21hbGwgcGFnZT8KKwl0c3QJcjMsICMweDBiCisJYmljZXEJcjIsIHIyLCAjNAorI2VuZGlmCisJc3RyCXIyLCBbcjBdCQkJQCBoYXJkd2FyZSB2ZXJzaW9uCisJbW92CXIwLCByMAorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorI2VuZGlmCisJbW92CXBjLCBscgorCisKKwlfX0lOSVQKKworCS50eXBlCV9fYXJtMTAyNl9zZXR1cCwgI2Z1bmN0aW9uCitfX2FybTEwMjZfc2V0dXA6CisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzcJCUAgaW52YWxpZGF0ZSBJLEQgY2FjaGVzIG9uIHY0CisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyIG9uIHY0CisJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNwkJQCBpbnZhbGlkYXRlIEksRCBUTEJzIG9uIHY0CisJbWNyCXAxNSwgMCwgcjQsIGMyLCBjMAkJQCBsb2FkIHBhZ2UgdGFibGUgcG9pbnRlcgorI2lmZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAorCW1vdglyMCwgIzQJCQkJQCBleHBsaWNpdGx5IGRpc2FibGUgd3JpdGViYWNrCisJbWNyCXAxNSwgNywgcjAsIGMxNSwgYzAsIDAKKyNlbmRpZgorCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAJCUAgZ2V0IGNvbnRyb2wgcmVnaXN0ZXIgdjQKKwlsZHIJcjUsIGFybTEwMjZfY3IxX2NsZWFyCisJYmljCXIwLCByMCwgcjUKKwlsZHIJcjUsIGFybTEwMjZfY3IxX3NldAorCW9ycglyMCwgcjAsIHI1CisjaWZkZWYgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTgorCW9ycglyMCwgcjAsICMweDQwMDAgCQlAIC5SLi4gLi4uLiAuLi4uIC4uLi4KKyNlbmRpZgorCW1vdglwYywgbHIKKwkuc2l6ZQlfX2FybTEwMjZfc2V0dXAsIC4gLSBfX2FybTEwMjZfc2V0dXAKKworCS8qCisJICogIFIKKwkgKiAuUlZJIFpGUlMgQkxEUCBXQ0FNCisJICogLjAxMSAxMDAxIC4uMTEgMDEwMQorCSAqIAorCSAqLworCS50eXBlCWFybTEwMjZfY3IxX2NsZWFyLCAjb2JqZWN0CisJLnR5cGUJYXJtMTAyNl9jcjFfc2V0LCAjb2JqZWN0Cithcm0xMDI2X2NyMV9jbGVhcjoKKwkud29yZAkweDdmM2YKK2FybTEwMjZfY3IxX3NldDoKKwkud29yZAkweDM5MzUKKworCV9fSU5JVERBVEEKKworLyoKKyAqIFB1cnBvc2UgOiBGdW5jdGlvbiBwb2ludGVycyB1c2VkIHRvIGFjY2VzcyBhYm92ZSBmdW5jdGlvbnMgLSBhbGwgY2FsbHMKKyAqCSAgICAgY29tZSB0aHJvdWdoIHRoZXNlCisgKi8KKwkudHlwZQlhcm0xMDI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKK2FybTEwMjZfcHJvY2Vzc29yX2Z1bmN0aW9uczoKKwkud29yZAl2NXRfZWFybHlfYWJvcnQKKwkud29yZAljcHVfYXJtMTAyNl9wcm9jX2luaXQKKwkud29yZAljcHVfYXJtMTAyNl9wcm9jX2ZpbgorCS53b3JkCWNwdV9hcm0xMDI2X3Jlc2V0CisJLndvcmQJY3B1X2FybTEwMjZfZG9faWRsZQorCS53b3JkCWNwdV9hcm0xMDI2X2RjYWNoZV9jbGVhbl9hcmVhCisJLndvcmQJY3B1X2FybTEwMjZfc3dpdGNoX21tCisJLndvcmQJY3B1X2FybTEwMjZfc2V0X3B0ZQorCS5zaXplCWFybTEwMjZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTEwMjZfcHJvY2Vzc29yX2Z1bmN0aW9ucworCisJLnNlY3Rpb24gLnJvZGF0YQorCisJLnR5cGUJY3B1X2FyY2hfbmFtZSwgI29iamVjdAorY3B1X2FyY2hfbmFtZToKKwkuYXNjaXoJImFybXY1dGVqIgorCS5zaXplCWNwdV9hcmNoX25hbWUsIC4gLSBjcHVfYXJjaF9uYW1lCisKKwkudHlwZQljcHVfZWxmX25hbWUsICNvYmplY3QKK2NwdV9lbGZfbmFtZToKKwkuYXNjaXoJInY1IgorCS5zaXplCWNwdV9lbGZfbmFtZSwgLiAtIGNwdV9lbGZfbmFtZQorCS5hbGlnbgorCisJLnR5cGUJY3B1X2FybTEwMjZfbmFtZSwgI29iamVjdAorY3B1X2FybTEwMjZfbmFtZToKKwkuYXNjaWkJIkFSTTEwMjZFSi1TIgorI2lmbmRlZiBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFCisJLmFzY2lpCSJpIgorI2VuZGlmCisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKKwkuYXNjaWkJImQiCisjaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJLmFzY2lpCSIod3QpIgorI2Vsc2UKKwkuYXNjaWkJIih3YikiCisjZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUKKwkuYXNjaWkJIkIiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOCisJLmFzY2lpCSJSUiIKKyNlbmRpZgorCS5hc2NpaQkiXDAiCisJLnNpemUJY3B1X2FybTEwMjZfbmFtZSwgLiAtIGNwdV9hcm0xMDI2X25hbWUKKworCS5hbGlnbgorCisJLnNlY3Rpb24gIi5wcm9jLmluZm8iLCAjYWxsb2MsICNleGVjaW5zdHIKKworCS50eXBlCV9fYXJtMTAyNl9wcm9jX2luZm8sI29iamVjdAorX19hcm0xMDI2X3Byb2NfaW5mbzoKKwkubG9uZwkweDQxMDZhMjYwCQkJQCBBUk0gMTAyNkVKLVMgKHY1VEVKKQorCS5sb25nCTB4ZmYwZmZmZjAKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9CSVQ0IHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAorCWIJX19hcm0xMDI2X3NldHVwCisJLmxvbmcJY3B1X2FyY2hfbmFtZQorCS5sb25nCWNwdV9lbGZfbmFtZQorCS5sb25nCUhXQ0FQX1NXUHxIV0NBUF9IQUxGfEhXQ0FQX1RIVU1CfEhXQ0FQX0ZBU1RfTVVMVHxIV0NBUF9FRFNQfEhXQ0FQX0pBVkEKKwkubG9uZwljcHVfYXJtMTAyNl9uYW1lCisJLmxvbmcJYXJtMTAyNl9wcm9jZXNzb3JfZnVuY3Rpb25zCisJLmxvbmcJdjR3YmlfdGxiX2ZucworCS5sb25nCXY0d2JfdXNlcl9mbnMKKwkubG9uZwlhcm0xMDI2X2NhY2hlX2ZucworCS5zaXplCV9fYXJtMTAyNl9wcm9jX2luZm8sIC4gLSBfX2FybTEwMjZfcHJvY19pbmZvCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWUyMTRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUwpAQCAtMCwwICsxLDQwNCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS9wcm9jLWFybTYsNy5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ny0yMDAwIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoZXNlIGFyZSB0aGUgbG93IGxldmVsIGFzc2VtYmxlciBmb3IgcGVyZm9ybWluZyBjYWNoZSBhbmQgVExCCisgKiAgZnVuY3Rpb25zIG9uIHRoZSBBUk02MTAgJiBBUk03MTAuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKK0VOVFJZKGNwdV9hcm02X2RjYWNoZV9jbGVhbl9hcmVhKQorRU5UUlkoY3B1X2FybTdfZGNhY2hlX2NsZWFuX2FyZWEpCisJCW1vdglwYywgbHIKKworLyoKKyAqIEZ1bmN0aW9uOiBhcm02XzdfZGF0YV9hYm9ydCAoKQorICoKKyAqIFBhcmFtcyAgOiByMiA9IGFkZHJlc3Mgb2YgYWJvcnRlZCBpbnN0cnVjdGlvbgorICoJICAgOiBzcCA9IHBvaW50ZXIgdG8gcmVnaXN0ZXJzCisgKgorICogUHVycG9zZSA6IG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGFib3J0ZWQgaW5zdHJ1Y3Rpb24KKyAqCisgKiBSZXR1cm5zIDogcjAgPSBhZGRyZXNzIG9mIGFib3J0CisgKgkgICA6IHIxID0gRlNSCisgKi8KKworRU5UUlkoY3B1X2FybTdfZGF0YV9hYm9ydCkKKwltcmMJcDE1LCAwLCByMSwgYzUsIGMwLCAwCQlAIGdldCBGU1IKKwltcmMJcDE1LCAwLCByMCwgYzYsIGMwLCAwCQlAIGdldCBGQVIKKwlsZHIJcjgsIFtyMF0JCQlAIHJlYWQgYXJtIGluc3RydWN0aW9uCisJdHN0CXI4LCAjMSA8PCAyMAkJCUAgTCA9IDEgLT4gd3JpdGU/CisJb3JyZXEJcjEsIHIxLCAjMSA8PCA4CQkJQCB5ZXMuCisJYW5kCXI3LCByOCwgIzE1IDw8IDI0CisJYWRkCXBjLCBwYywgcjcsIGxzciAjMjIJCUAgTm93IGJyYW5jaCB0byB0aGUgcmVsZXZhbnQgcHJvY2Vzc2luZyByb3V0aW5lCisJbm9wCisKKy8qIDAgKi8JYgkuZGF0YV91bmtub3duCisvKiAxICovCW1vdglwYywgbHIJCQkJQCBzd3AKKy8qIDIgKi8JYgkuZGF0YV91bmtub3duCisvKiAzICovCWIJLmRhdGFfdW5rbm93bgorLyogNCAqLwliCS5kYXRhX2FybV9sYXRlbGRycG9zdGNvbnN0CUAgbGRyCXJkLCBbcm5dLCAjbQorLyogNSAqLwliCS5kYXRhX2FybV9sYXRlbGRycHJlY29uc3QJQCBsZHIJcmQsIFtybiwgI21dCisvKiA2ICovCWIJLmRhdGFfYXJtX2xhdGVsZHJwb3N0cmVnCUAgbGRyCXJkLCBbcm5dLCBybQorLyogNyAqLwliCS5kYXRhX2FybV9sYXRlbGRycHJlcmVnCQlAIGxkcglyZCwgW3JuLCBybV0KKy8qIDggKi8JYgkuZGF0YV9hcm1fbGRtc3RtCQlAIGxkbSphCXJuLCA8cmxpc3Q+CisvKiA5ICovCWIJLmRhdGFfYXJtX2xkbXN0bQkJQCBsZG0qYglybiwgPHJsaXN0PgorLyogYSAqLwliCS5kYXRhX3Vua25vd24KKy8qIGIgKi8JYgkuZGF0YV91bmtub3duCisvKiBjICovCW1vdglwYywgbHIJCQkJQCBsZGMJcmQsIFtybl0sICNtCUAgU2FtZSBhcyBsZHIJcmQsIFtybl0sICNtCisvKiBkICovCW1vdglwYywgbHIJCQkJQCBsZGMJcmQsIFtybiwgI21dCisvKiBlICovCWIJLmRhdGFfdW5rbm93bgorLyogZiAqLworLmRhdGFfdW5rbm93bjoJQCBQYXJ0IG9mIGp1bXB0YWJsZQorCW1vdglyMCwgcjIKKwltb3YJcjEsIHI4CisJbW92CXIyLCBzcAorCWJsCWJhZGRhdGFhYm9ydAorCWIJcmV0X2Zyb21fZXhjZXB0aW9uCisKK0VOVFJZKGNwdV9hcm02X2RhdGFfYWJvcnQpCisJbXJjCXAxNSwgMCwgcjEsIGM1LCBjMCwgMAkJQCBnZXQgRlNSCisJbXJjCXAxNSwgMCwgcjAsIGM2LCBjMCwgMAkJQCBnZXQgRkFSCisJbGRyCXI4LCBbcjJdCQkJQCByZWFkIGFybSBpbnN0cnVjdGlvbgorCXRzdAlyOCwgIzEgPDwgMjAJCQlAIEwgPSAxIC0+IHdyaXRlPworCW9ycmVxCXIxLCByMSwgIzEgPDwgOAkJCUAgeWVzLgorCWFuZAlyNywgcjgsICMxNCA8PCAyNAorCXRlcQlyNywgIzggPDwgMjQJCQlAIHdhcyBpdCBsZG0vc3RtCisJbW92bmUJcGMsIGxyCisKKy5kYXRhX2FybV9sZG1zdG06CisJdHN0CXI4LCAjMSA8PCAyMQkJCUAgY2hlY2sgd3JpdGViYWNrIGJpdAorCW1vdmVxCXBjLCBscgkJCQlAIG5vIHdyaXRlYmFjayAtPiBubyBmaXh1cAorCW1vdglyNywgIzB4MTEKKwlvcnIJcjcsIHI3LCAjMHgxMTAwCisJYW5kCXI2LCByOCwgcjcKKwlhbmQJcjIsIHI4LCByNywgbHNsICMxCisJYWRkCXI2LCByNiwgcjIsIGxzciAjMQorCWFuZAlyMiwgcjgsIHI3LCBsc2wgIzIKKwlhZGQJcjYsIHI2LCByMiwgbHNyICMyCisJYW5kCXIyLCByOCwgcjcsIGxzbCAjMworCWFkZAlyNiwgcjYsIHIyLCBsc3IgIzMKKwlhZGQJcjYsIHI2LCByNiwgbHNyICM4CisJYWRkCXI2LCByNiwgcjYsIGxzciAjNAorCWFuZAlyNiwgcjYsICMxNQkJCUAgcjYgPSBuby4gb2YgcmVnaXN0ZXJzIHRvIHRyYW5zZmVyLgorCWFuZAlyNSwgcjgsICMxNSA8PCAxNgkJQCBFeHRyYWN0ICduJyBmcm9tIGluc3RydWN0aW9uCisJbGRyCXI3LCBbc3AsIHI1LCBsc3IgIzE0XQkJQCBHZXQgcmVnaXN0ZXIgJ1JuJworCXRzdAlyOCwgIzEgPDwgMjMJCQlAIENoZWNrIFUgYml0CisJc3VibmUJcjcsIHI3LCByNiwgbHNsICMyCQlAIFVuZG8gaW5jcmVtZW50CisJYWRkZXEJcjcsIHI3LCByNiwgbHNsICMyCQlAIFVuZG8gZGVjcmVtZW50CisJc3RyCXI3LCBbc3AsIHI1LCBsc3IgIzE0XQkJQCBQdXQgcmVnaXN0ZXIgJ1JuJworCW1vdglwYywgbHIKKworLmRhdGFfYXJtX2FwcGx5X3I2X2FuZF9ybjoKKwlhbmQJcjUsIHI4LCAjMTUgPDwgMTYJCUAgRXh0cmFjdCAnbicgZnJvbSBpbnN0cnVjdGlvbgorCWxkcglyNywgW3NwLCByNSwgbHNyICMxNF0JCUAgR2V0IHJlZ2lzdGVyICdSbicKKwl0c3QJcjgsICMxIDw8IDIzCQkJQCBDaGVjayBVIGJpdAorCXN1Ym5lCXI3LCByNywgcjYJCQlAIFVuZG8gaW5jcm1lbmV0CisJYWRkZXEJcjcsIHI3LCByNgkJCUAgVW5kbyBkZWNyZW1lbnQKKwlzdHIJcjcsIFtzcCwgcjUsIGxzciAjMTRdCQlAIFB1dCByZWdpc3RlciAnUm4nCisJbW92CXBjLCBscgorCisuZGF0YV9hcm1fbGF0ZWxkcnByZWNvbnN0OgorCXRzdAlyOCwgIzEgPDwgMjEJCQlAIGNoZWNrIHdyaXRlYmFjayBiaXQKKwltb3ZlcQlwYywgbHIJCQkJQCBubyB3cml0ZWJhY2sgLT4gbm8gZml4dXAKKy5kYXRhX2FybV9sYXRlbGRycG9zdGNvbnN0OgorCW1vdnMJcjIsIHI4LCBsc2wgIzIwCQkJQCBHZXQgb2Zmc2V0CisJbW92ZXEJcGMsIGxyCQkJCUAgemVybyAtPiBubyBmaXh1cAorCWFuZAlyNSwgcjgsICMxNSA8PCAxNgkJQCBFeHRyYWN0ICduJyBmcm9tIGluc3RydWN0aW9uCisJbGRyCXI3LCBbc3AsIHI1LCBsc3IgIzE0XQkJQCBHZXQgcmVnaXN0ZXIgJ1JuJworCXRzdAlyOCwgIzEgPDwgMjMJCQlAIENoZWNrIFUgYml0CisJc3VibmUJcjcsIHI3LCByMiwgbHNyICMyMAkJQCBVbmRvIGluY3JlbWVudAorCWFkZGVxCXI3LCByNywgcjIsIGxzciAjMjAJCUAgVW5kbyBkZWNyZW1lbnQKKwlzdHIJcjcsIFtzcCwgcjUsIGxzciAjMTRdCQlAIFB1dCByZWdpc3RlciAnUm4nCisJbW92CXBjLCBscgorCisuZGF0YV9hcm1fbGF0ZWxkcnByZXJlZzoKKwl0c3QJcjgsICMxIDw8IDIxCQkJQCBjaGVjayB3cml0ZWJhY2sgYml0CisJbW92ZXEJcGMsIGxyCQkJCUAgbm8gd3JpdGViYWNrIC0+IG5vIGZpeHVwCisuZGF0YV9hcm1fbGF0ZWxkcnBvc3RyZWc6CisJYW5kCXI3LCByOCwgIzE1CQkJQCBFeHRyYWN0ICdtJyBmcm9tIGluc3RydWN0aW9uCisJbGRyCXI2LCBbc3AsIHI3LCBsc2wgIzJdCQlAIEdldCByZWdpc3RlciAnUm0nCisJbW92CXI1LCByOCwgbHNyICM3CQkJQCBnZXQgc2hpZnQgY291bnQKKwlhbmRzCXI1LCByNSwgIzMxCisJYW5kCXI3LCByOCwgIzB4NzAJCQlAIGdldCBzaGlmdCB0eXBlCisJb3JyZXEJcjcsIHI3LCAjOAkJCUAgc2hpZnQgY291bnQgPSAwCisJYWRkCXBjLCBwYywgcjcKKwlub3AKKworCW1vdglyNiwgcjYsIGxzbCByNQkJCUAgMDogTFNMICMhMAorCWIJLmRhdGFfYXJtX2FwcGx5X3I2X2FuZF9ybgorCWIJLmRhdGFfYXJtX2FwcGx5X3I2X2FuZF9ybglAIDE6IExTTCAjMAorCW5vcAorCWIJLmRhdGFfdW5rbm93bgkJCUAgMjogTVVMPworCW5vcAorCWIJLmRhdGFfdW5rbm93bgkJCUAgMzogTVVMPworCW5vcAorCW1vdglyNiwgcjYsIGxzciByNQkJCUAgNDogTFNSICMhMAorCWIJLmRhdGFfYXJtX2FwcGx5X3I2X2FuZF9ybgorCW1vdglyNiwgcjYsIGxzciAjMzIJCQlAIDU6IExTUiAjMzIKKwliCS5kYXRhX2FybV9hcHBseV9yNl9hbmRfcm4KKwliCS5kYXRhX3Vua25vd24JCQlAIDY6IE1VTD8KKwlub3AKKwliCS5kYXRhX3Vua25vd24JCQlAIDc6IE1VTD8KKwlub3AKKwltb3YJcjYsIHI2LCBhc3IgcjUJCQlAIDg6IEFTUiAjITAKKwliCS5kYXRhX2FybV9hcHBseV9yNl9hbmRfcm4KKwltb3YJcjYsIHI2LCBhc3IgIzMyCQkJQCA5OiBBU1IgIzMyCisJYgkuZGF0YV9hcm1fYXBwbHlfcjZfYW5kX3JuCisJYgkuZGF0YV91bmtub3duCQkJQCBBOiBNVUw/CisJbm9wCisJYgkuZGF0YV91bmtub3duCQkJQCBCOiBNVUw/CisJbm9wCisJbW92CXI2LCByNiwgcm9yIHI1CQkJQCBDOiBST1IgIyEwCisJYgkuZGF0YV9hcm1fYXBwbHlfcjZfYW5kX3JuCisJbW92CXI2LCByNiwgcnJ4CQkJQCBEOiBSUlgKKwliCS5kYXRhX2FybV9hcHBseV9yNl9hbmRfcm4KKwliCS5kYXRhX3Vua25vd24JCQlAIEU6IE1VTD8KKwlub3AKKwliCS5kYXRhX3Vua25vd24JCQlAIEY6IE1VTD8KKworLyoKKyAqIEZ1bmN0aW9uOiBhcm02XzdfcHJvY19pbml0ICh2b2lkKQorICoJICAgOiBhcm02XzdfcHJvY19maW4gKHZvaWQpCisgKgorICogTm90ZXMgICA6IFRoaXMgcHJvY2Vzc29yIGRvZXMgbm90IHJlcXVpcmUgdGhlc2UKKyAqLworRU5UUlkoY3B1X2FybTZfcHJvY19pbml0KQorRU5UUlkoY3B1X2FybTdfcHJvY19pbml0KQorCQltb3YJcGMsIGxyCisKK0VOVFJZKGNwdV9hcm02X3Byb2NfZmluKQorRU5UUlkoY3B1X2FybTdfcHJvY19maW4pCisJCW1vdglyMCwgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFCisJCW1zcgljcHNyX2MsIHIwCisJCW1vdglyMCwgIzB4MzEJCQlAIC4uLi5TLi5EUC4uLk0KKwkJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBkaXNhYmxlIGNhY2hlcworCQltb3YJcGMsIGxyCisKK0VOVFJZKGNwdV9hcm02X2RvX2lkbGUpCitFTlRSWShjcHVfYXJtN19kb19pZGxlKQorCQltb3YJcGMsIGxyCisKKy8qCisgKiBGdW5jdGlvbjogYXJtNl83X3N3aXRjaF9tbSh1bnNpZ25lZCBsb25nIHBnZF9waHlzKQorICogUGFyYW1zICA6IHBnZF9waHlzCVBoeXNpY2FsIGFkZHJlc3Mgb2YgcGFnZSB0YWJsZQorICogUHVycG9zZSA6IFBlcmZvcm0gYSB0YXNrIHN3aXRjaCwgc2F2aW5nIHRoZSBvbGQgcHJvY2Vzc2VzIHN0YXRlLCBhbmQgcmVzdG9yaW5nCisgKgkgICAgIHRoZSBuZXcuCisgKi8KK0VOVFJZKGNwdV9hcm02X3N3aXRjaF9tbSkKK0VOVFJZKGNwdV9hcm03X3N3aXRjaF9tbSkKKwkJbW92CXIxLCAjMAorCQltY3IJcDE1LCAwLCByMSwgYzcsIGMwLCAwCQlAIGZsdXNoIGNhY2hlCisJCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAsIDAJCUAgdXBkYXRlIHBhZ2UgdGFibGUgcHRyCisJCW1jcglwMTUsIDAsIHIxLCBjNSwgYzAsIDAJCUAgZmx1c2ggVExCcworCQltb3YJcGMsIGxyCisKKy8qCisgKiBGdW5jdGlvbjogYXJtNl83X3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKKyAqIFBhcmFtcyAgOiByMCA9IEFkZHJlc3MgdG8gc2V0CisgKgkgICA6IHIxID0gdmFsdWUgdG8gc2V0CisgKiBQdXJwb3NlIDogU2V0IGEgUFRFIGFuZCBmbHVzaCBpdCBvdXQgb2YgYW55IFdCIGNhY2hlCisgKi8KKwkJLmFsaWduCTUKK0VOVFJZKGNwdV9hcm02X3NldF9wdGUpCitFTlRSWShjcHVfYXJtN19zZXRfcHRlKQorCQlzdHIJcjEsIFtyMF0sICMtMjA0OAkJQCBsaW51eCB2ZXJzaW9uCisKKwkJZW9yCXIxLCByMSwgI0xfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8IExfUFRFX1dSSVRFIHwgTF9QVEVfRElSVFkKKworCQliaWMJcjIsIHIxLCAjUFRFX1NNQUxMX0FQX01BU0sKKwkJYmljCXIyLCByMiwgI1BURV9UWVBFX01BU0sKKwkJb3JyCXIyLCByMiwgI1BURV9UWVBFX1NNQUxMCisKKwkJdHN0CXIxLCAjTF9QVEVfVVNFUgkJCUAgVXNlcj8KKwkJb3JybmUJcjIsIHIyLCAjUFRFX1NNQUxMX0FQX1VST19TUlcKKworCQl0c3QJcjEsICNMX1BURV9XUklURSB8IExfUFRFX0RJUlRZCUAgV3JpdGUgYW5kIERpcnR5PworCQlvcnJlcQlyMiwgcjIsICNQVEVfU01BTExfQVBfVU5PX1NSVworCisJCXRzdAlyMSwgI0xfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORwlAIFByZXNlbnQgYW5kIFlvdW5nCisJCW1vdm5lCXIyLCAjMAorCisJCXN0cglyMiwgW3IwXQkJCUAgaGFyZHdhcmUgdmVyc2lvbgorCQltb3YJcGMsIGxyCisKKy8qCisgKiBGdW5jdGlvbjogX2FybTZfN19yZXNldAorICogUGFyYW1zICA6IHIwID0gYWRkcmVzcyB0byBqdW1wIHRvCisgKiBOb3RlcyAgIDogVGhpcyBzZXRzIHVwIGV2ZXJ5dGhpbmcgZm9yIGEgcmVzZXQKKyAqLworRU5UUlkoY3B1X2FybTZfcmVzZXQpCitFTlRSWShjcHVfYXJtN19yZXNldCkKKwkJbW92CXIxLCAjMAorCQltY3IJcDE1LCAwLCByMSwgYzcsIGMwLCAwCQlAIGZsdXNoIGNhY2hlCisJCW1jcglwMTUsIDAsIHIxLCBjNSwgYzAsIDAJCUAgZmx1c2ggVExCCisJCW1vdglyMSwgIzB4MzAKKwkJbWNyCXAxNSwgMCwgcjEsIGMxLCBjMCwgMAkJQCB0dXJuIG9mZiBNTVUgZXRjCisJCW1vdglwYywgcjAKKworCQlfX0lOSVQKKworCQkudHlwZQlfX2FybTZfc2V0dXAsICNmdW5jdGlvbgorX19hcm02X3NldHVwOgltb3YJcjAsICMwCisJCW1jcglwMTUsIDAsIHIwLCBjNywgYzAJCUAgZmx1c2ggY2FjaGVzIG9uIHYzCisJCW1jcglwMTUsIDAsIHIwLCBjNSwgYzAJCUAgZmx1c2ggVExCcyBvbiB2MworCQltb3YJcjAsICMweDNkCQkJQCAuIC4uUlMgQkxEUCBXQ0FNCisJCW9ycglyMCwgcjAsICMweDEwMAkJCUAgLiAuLjAxIDAwMTEgMTEwMQorCQltb3YJcGMsIGxyCisJCS5zaXplCV9fYXJtNl9zZXR1cCwgLiAtIF9fYXJtNl9zZXR1cAorCisJCS50eXBlCV9fYXJtN19zZXR1cCwgI2Z1bmN0aW9uCitfX2FybTdfc2V0dXA6CW1vdglyMCwgIzAKKwkJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMAkJQCBmbHVzaCBjYWNoZXMgb24gdjMKKwkJbWNyCXAxNSwgMCwgcjAsIGM1LCBjMAkJQCBmbHVzaCBUTEJzIG9uIHYzCisJCW1jcglwMTUsIDAsIHIwLCBjMywgYzAJCUAgbG9hZCBkb21haW4gYWNjZXNzIHJlZ2lzdGVyCisJCW1vdglyMCwgIzB4N2QJCQlAIC4gLi5SUyBCTERQIFdDQU0KKwkJb3JyCXIwLCByMCwgIzB4MTAwCQkJQCAuIC4uMDEgMDExMSAxMTAxCisJCW1vdglwYywgbHIKKwkJLnNpemUJX19hcm03X3NldHVwLCAuIC0gX19hcm03X3NldHVwCisKKwkJX19JTklUREFUQQorCisvKgorICogUHVycG9zZSA6IEZ1bmN0aW9uIHBvaW50ZXJzIHVzZWQgdG8gYWNjZXNzIGFib3ZlIGZ1bmN0aW9ucyAtIGFsbCBjYWxscworICoJICAgICBjb21lIHRocm91Z2ggdGhlc2UKKyAqLworCQkudHlwZQlhcm02X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKK0VOVFJZKGFybTZfcHJvY2Vzc29yX2Z1bmN0aW9ucykKKwkJLndvcmQJY3B1X2FybTZfZGF0YV9hYm9ydAorCQkud29yZAljcHVfYXJtNl9wcm9jX2luaXQKKwkJLndvcmQJY3B1X2FybTZfcHJvY19maW4KKwkJLndvcmQJY3B1X2FybTZfcmVzZXQKKwkJLndvcmQJY3B1X2FybTZfZG9faWRsZQorCQkud29yZAljcHVfYXJtNl9kY2FjaGVfY2xlYW5fYXJlYQorCQkud29yZAljcHVfYXJtNl9zd2l0Y2hfbW0KKwkJLndvcmQJY3B1X2FybTZfc2V0X3B0ZQorCQkuc2l6ZQlhcm02X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm02X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKworLyoKKyAqIFB1cnBvc2UgOiBGdW5jdGlvbiBwb2ludGVycyB1c2VkIHRvIGFjY2VzcyBhYm92ZSBmdW5jdGlvbnMgLSBhbGwgY2FsbHMKKyAqCSAgICAgY29tZSB0aHJvdWdoIHRoZXNlCisgKi8KKwkJLnR5cGUJYXJtN19wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CitFTlRSWShhcm03X3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCisJCS53b3JkCWNwdV9hcm03X2RhdGFfYWJvcnQKKwkJLndvcmQJY3B1X2FybTdfcHJvY19pbml0CisJCS53b3JkCWNwdV9hcm03X3Byb2NfZmluCisJCS53b3JkCWNwdV9hcm03X3Jlc2V0CisJCS53b3JkCWNwdV9hcm03X2RvX2lkbGUKKwkJLndvcmQJY3B1X2FybTdfZGNhY2hlX2NsZWFuX2FyZWEKKwkJLndvcmQJY3B1X2FybTdfc3dpdGNoX21tCisJCS53b3JkCWNwdV9hcm03X3NldF9wdGUKKwkJLnNpemUJYXJtN19wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtN19wcm9jZXNzb3JfZnVuY3Rpb25zCisKKwkJLnNlY3Rpb24gIi5yb2RhdGEiCisKKwkJLnR5cGUJY3B1X2FyY2hfbmFtZSwgI29iamVjdAorY3B1X2FyY2hfbmFtZToJLmFzY2l6CSJhcm12MyIKKwkJLnNpemUJY3B1X2FyY2hfbmFtZSwgLiAtIGNwdV9hcmNoX25hbWUKKworCQkudHlwZQljcHVfZWxmX25hbWUsICNvYmplY3QKK2NwdV9lbGZfbmFtZToJLmFzY2l6CSJ2MyIKKwkJLnNpemUJY3B1X2VsZl9uYW1lLCAuIC0gY3B1X2VsZl9uYW1lCisKKwkJLnR5cGUJY3B1X2FybTZfbmFtZSwgI29iamVjdAorY3B1X2FybTZfbmFtZToJLmFzY2l6CSJBUk02IgorCQkuc2l6ZQljcHVfYXJtNl9uYW1lLCAuIC0gY3B1X2FybTZfbmFtZQorCisJCS50eXBlCWNwdV9hcm02MTBfbmFtZSwgI29iamVjdAorY3B1X2FybTYxMF9uYW1lOgorCQkuYXNjaXoJIkFSTTYxMCIKKwkJLnNpemUJY3B1X2FybTYxMF9uYW1lLCAuIC0gY3B1X2FybTYxMF9uYW1lCisKKwkJLnR5cGUJY3B1X2FybTdfbmFtZSwgI29iamVjdAorY3B1X2FybTdfbmFtZToJLmFzY2l6CSJBUk03IgorCQkuc2l6ZQljcHVfYXJtN19uYW1lLCAuIC0gY3B1X2FybTdfbmFtZQorCisJCS50eXBlCWNwdV9hcm03MTBfbmFtZSwgI29iamVjdAorY3B1X2FybTcxMF9uYW1lOgorCQkuYXNjaXoJIkFSTTcxMCIKKwkJLnNpemUJY3B1X2FybTcxMF9uYW1lLCAuIC0gY3B1X2FybTcxMF9uYW1lCisKKwkJLmFsaWduCisKKwkJLnNlY3Rpb24gIi5wcm9jLmluZm8iLCAjYWxsb2MsICNleGVjaW5zdHIKKworCQkudHlwZQlfX2FybTZfcHJvY19pbmZvLCAjb2JqZWN0CitfX2FybTZfcHJvY19pbmZvOgorCQkubG9uZwkweDQxNTYwNjAwCisJCS5sb25nCTB4ZmZmZmZmZjAKKwkJLmxvbmcJMHgwMDAwMGMxZQorCQliCV9fYXJtNl9zZXR1cAorCQkubG9uZwljcHVfYXJjaF9uYW1lCisJCS5sb25nCWNwdV9lbGZfbmFtZQorCQkubG9uZwlIV0NBUF9TV1AgfCBIV0NBUF8yNkJJVAorCQkubG9uZwljcHVfYXJtNl9uYW1lCisJCS5sb25nCWFybTZfcHJvY2Vzc29yX2Z1bmN0aW9ucworCQkubG9uZwl2M190bGJfZm5zCisJCS5sb25nCXYzX3VzZXJfZm5zCisJCS5sb25nCXYzX2NhY2hlX2ZucworCQkuc2l6ZQlfX2FybTZfcHJvY19pbmZvLCAuIC0gX19hcm02X3Byb2NfaW5mbworCisJCS50eXBlCV9fYXJtNjEwX3Byb2NfaW5mbywgI29iamVjdAorX19hcm02MTBfcHJvY19pbmZvOgorCQkubG9uZwkweDQxNTYwNjEwCisJCS5sb25nCTB4ZmZmZmZmZjAKKwkJLmxvbmcJMHgwMDAwMGMxZQorCQliCV9fYXJtNl9zZXR1cAorCQkubG9uZwljcHVfYXJjaF9uYW1lCisJCS5sb25nCWNwdV9lbGZfbmFtZQorCQkubG9uZwlIV0NBUF9TV1AgfCBIV0NBUF8yNkJJVAorCQkubG9uZwljcHVfYXJtNjEwX25hbWUKKwkJLmxvbmcJYXJtNl9wcm9jZXNzb3JfZnVuY3Rpb25zCisJCS5sb25nCXYzX3RsYl9mbnMKKwkJLmxvbmcJdjNfdXNlcl9mbnMKKwkJLmxvbmcJdjNfY2FjaGVfZm5zCisJCS5zaXplCV9fYXJtNjEwX3Byb2NfaW5mbywgLiAtIF9fYXJtNjEwX3Byb2NfaW5mbworCisJCS50eXBlCV9fYXJtN19wcm9jX2luZm8sICNvYmplY3QKK19fYXJtN19wcm9jX2luZm86CisJCS5sb25nCTB4NDEwMDcwMDAKKwkJLmxvbmcJMHhmZmZmZmYwMAorCQkubG9uZwkweDAwMDAwYzFlCisJCWIJX19hcm03X3NldHVwCisJCS5sb25nCWNwdV9hcmNoX25hbWUKKwkJLmxvbmcJY3B1X2VsZl9uYW1lCisJCS5sb25nCUhXQ0FQX1NXUCB8IEhXQ0FQXzI2QklUCisJCS5sb25nCWNwdV9hcm03X25hbWUKKwkJLmxvbmcJYXJtN19wcm9jZXNzb3JfZnVuY3Rpb25zCisJCS5sb25nCXYzX3RsYl9mbnMKKwkJLmxvbmcJdjNfdXNlcl9mbnMKKwkJLmxvbmcJdjNfY2FjaGVfZm5zCisJCS5zaXplCV9fYXJtN19wcm9jX2luZm8sIC4gLSBfX2FybTdfcHJvY19pbmZvCisKKwkJLnR5cGUJX19hcm03MTBfcHJvY19pbmZvLCAjb2JqZWN0CitfX2FybTcxMF9wcm9jX2luZm86CisJCS5sb25nCTB4NDEwMDcxMDAKKwkJLmxvbmcJMHhmZmY4ZmYwMAorCQkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCQlQTURfU0VDVF9CVUZGRVJBQkxFIHwgXAorCQkJUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgXAorCQkJUE1EX0JJVDQgfCBcCisJCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJCVBNRF9TRUNUX0FQX1JFQUQKKwkJYglfX2FybTdfc2V0dXAKKwkJLmxvbmcJY3B1X2FyY2hfbmFtZQorCQkubG9uZwljcHVfZWxmX25hbWUKKwkJLmxvbmcJSFdDQVBfU1dQIHwgSFdDQVBfMjZCSVQKKwkJLmxvbmcJY3B1X2FybTcxMF9uYW1lCisJCS5sb25nCWFybTdfcHJvY2Vzc29yX2Z1bmN0aW9ucworCQkubG9uZwl2M190bGJfZm5zCisJCS5sb25nCXYzX3VzZXJfZm5zCisJCS5sb25nCXYzX2NhY2hlX2ZucworCQkuc2l6ZQlfX2FybTcxMF9wcm9jX2luZm8sIC4gLSBfX2FybTcxMF9wcm9jX2luZm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3Y2ZhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TCkBAIC0wLDAgKzEsMjY3IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlM6IE1NVSBmdW5jdGlvbnMgZm9yIEFSTTcyMAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgU3RldmUgSGlsbCAoc2poaWxsQGNvdHcuY29tKQorICogICAgICAgICAgICAgICAgICAgICBSb2IgU2NvdHQgKHJzY290dEBtdHJvYi5mZG5zLm5ldCkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgQVJNIExpbWl0ZWQsIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKgorICogVGhlc2UgYXJlIHRoZSBsb3cgbGV2ZWwgYXNzZW1ibGVyIGZvciBwZXJmb3JtaW5nIGNhY2hlIGFuZCBUTEIKKyAqIGZ1bmN0aW9ucyBvbiB0aGUgQVJNNzIwVC4gIFRoZSBBUk03MjBUIGhhcyBhIHdyaXRldGhyb3VnaCBJREMKKyAqIGNhY2hlLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNsZWFuIGl0LgorICoKKyAqICBDaGFuZ2Vsb2c6CisgKiAgIDA1LTA5LTIwMDAgU0pICUNyZWF0ZWQgYnkgbW92aW5nIDcyMCBzcGVjaWZpYyBmdW5jdGlvbnMKKyAqCQkJb3V0IG9mICdwcm9jLWFybTYsNy5TJyBwZXIgUk1LIGRpc2N1c3Npb24KKyAqICAgMDctMjUtMjAwMCBTSkgJQWRkZWQgaWRsZSBmdW5jdGlvbi4KKyAqICAgMDgtMjUtMjAwMAlEQlMJVXBkYXRlZCBmb3IgaW50ZWdyYXRpb24gb2YgQVJNIEx0ZCB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2NvbnN0YW50cy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2NpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisvKgorICogRnVuY3Rpb246IGFybTcyMF9wcm9jX2luaXQgKHZvaWQpCisgKgkgICA6IGFybTcyMF9wcm9jX2ZpbiAodm9pZCkKKyAqCisgKiBOb3RlcyAgIDogVGhpcyBwcm9jZXNzb3IgZG9lcyBub3QgcmVxdWlyZSB0aGVzZQorICovCitFTlRSWShjcHVfYXJtNzIwX2RjYWNoZV9jbGVhbl9hcmVhKQorRU5UUlkoY3B1X2FybTcyMF9wcm9jX2luaXQpCisJCW1vdglwYywgbHIKKworRU5UUlkoY3B1X2FybTcyMF9wcm9jX2ZpbikKKwkJc3RtZmQJc3AhLCB7bHJ9CisJCW1vdglpcCwgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFCisJCW1zcgljcHNyX2MsIGlwCisJCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAKKwkJYmljCXIwLCByMCwgIzB4MTAwMAkJCUAgLi4uaS4uLi4uLi4uLi4uLgorCQliaWMJcjAsIHIwLCAjMHgwMDBlCQkJQCAuLi4uLi4uLi4uLi53Y2EuCisJCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgZGlzYWJsZSBjYWNoZXMKKwkJbWNyCXAxNSwgMCwgcjEsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIGNhY2hlCisJCWxkbWZkCXNwISwge3BjfQorCisvKgorICogRnVuY3Rpb246IGFybTcyMF9wcm9jX2RvX2lkbGUodm9pZCkKKyAqIFBhcmFtcyAgOiByMCA9IHVudXNlZAorICogUHVycG9zZSA6IHB1dCB0aGUgcHJvY2Vzc2VyIGluIHByb3BlciBpZGxlIG1vZGUKKyAqLworRU5UUlkoY3B1X2FybTcyMF9kb19pZGxlKQorCQltb3YJcGMsIGxyCisKKy8qCisgKiBGdW5jdGlvbjogYXJtNzIwX3N3aXRjaF9tbSh1bnNpZ25lZCBsb25nIHBnZF9waHlzKQorICogUGFyYW1zICA6IHBnZF9waHlzCVBoeXNpY2FsIGFkZHJlc3Mgb2YgcGFnZSB0YWJsZQorICogUHVycG9zZSA6IFBlcmZvcm0gYSB0YXNrIHN3aXRjaCwgc2F2aW5nIHRoZSBvbGQgcHJvY2Vzcycgc3RhdGUgYW5kIHJlc3RvcmluZworICoJICAgICB0aGUgbmV3LgorICovCitFTlRSWShjcHVfYXJtNzIwX3N3aXRjaF9tbSkKKwkJbW92CXIxLCAjMAorCQltY3IJcDE1LCAwLCByMSwgYzcsIGM3LCAwCQlAIGludmFsaWRhdGUgY2FjaGUKKwkJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCB1cGRhdGUgcGFnZSB0YWJsZSBwdHIKKwkJbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMAkJQCBmbHVzaCBUTEIgKHY0KQorCQltb3YJcGMsIGxyCisKKy8qCisgKiBGdW5jdGlvbjogYXJtNzIwX3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKKyAqIFBhcmFtcyAgOiByMCA9IEFkZHJlc3MgdG8gc2V0CisgKgkgICA6IHIxID0gdmFsdWUgdG8gc2V0CisgKiBQdXJwb3NlIDogU2V0IGEgUFRFIGFuZCBmbHVzaCBpdCBvdXQgb2YgYW55IFdCIGNhY2hlCisgKi8KKwkJLmFsaWduCTUKK0VOVFJZKGNwdV9hcm03MjBfc2V0X3B0ZSkKKwkJc3RyCXIxLCBbcjBdLCAjLTIwNDgJCUAgbGludXggdmVyc2lvbgorCisJCWVvcglyMSwgcjEsICNMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCBMX1BURV9XUklURSB8IExfUFRFX0RJUlRZCisKKwkJYmljCXIyLCByMSwgI1BURV9TTUFMTF9BUF9NQVNLCisJCWJpYwlyMiwgcjIsICNQVEVfVFlQRV9NQVNLCisJCW9ycglyMiwgcjIsICNQVEVfVFlQRV9TTUFMTAorCisJCXRzdAlyMSwgI0xfUFRFX1VTRVIJCQlAIFVzZXI/CisJCW9ycm5lCXIyLCByMiwgI1BURV9TTUFMTF9BUF9VUk9fU1JXCisKKwkJdHN0CXIxLCAjTF9QVEVfV1JJVEUgfCBMX1BURV9ESVJUWQlAIFdyaXRlIGFuZCBEaXJ0eT8KKwkJb3JyZXEJcjIsIHIyLCAjUFRFX1NNQUxMX0FQX1VOT19TUlcKKworCQl0c3QJcjEsICNMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcJQCBQcmVzZW50IGFuZCBZb3VuZworCQltb3ZuZQlyMiwgIzAKKworCQlzdHIJcjIsIFtyMF0JCQlAIGhhcmR3YXJlIHZlcnNpb24KKwkJbW92CXBjLCBscgorCisvKgorICogRnVuY3Rpb246IGFybTcyMF9yZXNldAorICogUGFyYW1zICA6IHIwID0gYWRkcmVzcyB0byBqdW1wIHRvCisgKiBOb3RlcyAgIDogVGhpcyBzZXRzIHVwIGV2ZXJ5dGhpbmcgZm9yIGEgcmVzZXQKKyAqLworRU5UUlkoY3B1X2FybTcyMF9yZXNldCkKKwkJbW92CWlwLCAjMAorCQltY3IJcDE1LCAwLCBpcCwgYzcsIGM3LCAwCQlAIGludmFsaWRhdGUgY2FjaGUKKwkJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBmbHVzaCBUTEIgKHY0KQorCQltcmMJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGdldCBjdHJsIHJlZ2lzdGVyCisJCWJpYwlpcCwgaXAsICMweDAwMGYJCQlAIC4uLi4uLi4uLi4uLndjYW0KKwkJYmljCWlwLCBpcCwgIzB4MjEwMAkJCUAgLi52Li4uLnMuLi4uLi4uLgorCQltY3IJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwkJbW92CXBjLCByMAorCisJX19JTklUCisKKwkudHlwZQlfX2FybTcxMF9zZXR1cCwgI2Z1bmN0aW9uCitfX2FybTcxMF9zZXR1cDoKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIGNhY2hlcworCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJCUAgZmx1c2ggVExCICh2NCkKKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwCQlAIGdldCBjb250cm9sIHJlZ2lzdGVyCisJbGRyCXI1LCBhcm03MTBfY3IxX2NsZWFyCisJYmljCXIwLCByMCwgcjUKKwlsZHIJcjUsIGFybTcxMF9jcjFfc2V0CisJb3JyCXIwLCByMCwgcjUKKwltb3YJcGMsIGxyCQkJCUAgX19yZXQgKGhlYWQuUykKKwkuc2l6ZQlfX2FybTcxMF9zZXR1cCwgLiAtIF9fYXJtNzEwX3NldHVwCisKKwkvKgorCSAqICBSCisJICogLlJWSSBaRlJTIEJMRFAgV0NBTQorCSAqIC4uLi4gMDAwMSAuLjExIDExMDEKKwkgKiAKKwkgKi8KKwkudHlwZQlhcm03MTBfY3IxX2NsZWFyLCAjb2JqZWN0CisJLnR5cGUJYXJtNzEwX2NyMV9zZXQsICNvYmplY3QKK2FybTcxMF9jcjFfY2xlYXI6CisJLndvcmQJMHgwZjNmCithcm03MTBfY3IxX3NldDoKKwkud29yZAkweDAxM2QKKworCS50eXBlCV9fYXJtNzIwX3NldHVwLCAjZnVuY3Rpb24KK19fYXJtNzIwX3NldHVwOgorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM3LCAwCQlAIGludmFsaWRhdGUgY2FjaGVzCisJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMAkJQCBmbHVzaCBUTEIgKHY0KQorCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAJCUAgZ2V0IGNvbnRyb2wgcmVnaXN0ZXIKKwlsZHIJcjUsIGFybTcyMF9jcjFfY2xlYXIKKwliaWMJcjAsIHIwLCByNQorCWxkcglyNSwgYXJtNzIwX2NyMV9zZXQKKwlvcnIJcjAsIHIwLCByNQorCW1vdglwYywgbHIJCQkJQCBfX3JldCAoaGVhZC5TKQorCS5zaXplCV9fYXJtNzIwX3NldHVwLCAuIC0gX19hcm03MjBfc2V0dXAKKworCS8qCisJICogIFIKKwkgKiAuUlZJIFpGUlMgQkxEUCBXQ0FNCisJICogLi4xLiAxMDAxIC4uMTEgMTEwMQorCSAqIAorCSAqLworCS50eXBlCWFybTcyMF9jcjFfY2xlYXIsICNvYmplY3QKKwkudHlwZQlhcm03MjBfY3IxX3NldCwgI29iamVjdAorYXJtNzIwX2NyMV9jbGVhcjoKKwkud29yZAkweDJmM2YKK2FybTcyMF9jcjFfc2V0OgorCS53b3JkCTB4MjEzZAorCisJCV9fSU5JVERBVEEKKworLyoKKyAqIFB1cnBvc2UgOiBGdW5jdGlvbiBwb2ludGVycyB1c2VkIHRvIGFjY2VzcyBhYm92ZSBmdW5jdGlvbnMgLSBhbGwgY2FsbHMKKyAqCSAgICAgY29tZSB0aHJvdWdoIHRoZXNlCisgKi8KKwkJLnR5cGUJYXJtNzIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKK0VOVFJZKGFybTcyMF9wcm9jZXNzb3JfZnVuY3Rpb25zKQorCQkud29yZAl2NHRfbGF0ZV9hYm9ydAorCQkud29yZAljcHVfYXJtNzIwX3Byb2NfaW5pdAorCQkud29yZAljcHVfYXJtNzIwX3Byb2NfZmluCisJCS53b3JkCWNwdV9hcm03MjBfcmVzZXQKKwkJLndvcmQJY3B1X2FybTcyMF9kb19pZGxlCisJCS53b3JkCWNwdV9hcm03MjBfZGNhY2hlX2NsZWFuX2FyZWEKKwkJLndvcmQJY3B1X2FybTcyMF9zd2l0Y2hfbW0KKwkJLndvcmQJY3B1X2FybTcyMF9zZXRfcHRlCisJCS5zaXplCWFybTcyMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtNzIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKworCQkuc2VjdGlvbiAiLnJvZGF0YSIKKworCQkudHlwZQljcHVfYXJjaF9uYW1lLCAjb2JqZWN0CitjcHVfYXJjaF9uYW1lOgkuYXNjaXoJImFybXY0dCIKKwkJLnNpemUJY3B1X2FyY2hfbmFtZSwgLiAtIGNwdV9hcmNoX25hbWUKKworCQkudHlwZQljcHVfZWxmX25hbWUsICNvYmplY3QKK2NwdV9lbGZfbmFtZToJLmFzY2l6CSJ2NCIKKwkJLnNpemUJY3B1X2VsZl9uYW1lLCAuIC0gY3B1X2VsZl9uYW1lCisKKwkJLnR5cGUJY3B1X2FybTcxMF9uYW1lLCAjb2JqZWN0CitjcHVfYXJtNzEwX25hbWU6CisJCS5hc2NpegkiQVJNNzEwVCIKKwkJLnNpemUJY3B1X2FybTcxMF9uYW1lLCAuIC0gY3B1X2FybTcxMF9uYW1lCisKKwkJLnR5cGUJY3B1X2FybTcyMF9uYW1lLCAjb2JqZWN0CitjcHVfYXJtNzIwX25hbWU6CisJCS5hc2NpegkiQVJNNzIwVCIKKwkJLnNpemUJY3B1X2FybTcyMF9uYW1lLCAuIC0gY3B1X2FybTcyMF9uYW1lCisKKwkJLmFsaWduCisKKy8qCisgKiBTZWUgbGludXgvaW5jbHVkZS9hc20tYXJtL3Byb2NpbmZvLmggZm9yIGEgZGVmaW5pdGlvbiBvZiB0aGlzIHN0cnVjdHVyZS4KKyAqLworCQorCQkuc2VjdGlvbiAiLnByb2MuaW5mbyIsICNhbGxvYywgI2V4ZWNpbnN0cgorCisJCS50eXBlCV9fYXJtNzEwX3Byb2NfaW5mbywgI29iamVjdAorX19hcm03MTBfcHJvY19pbmZvOgorCQkubG9uZwkweDQxODA3MTAwCQkJCUAgY3B1X3ZhbAorCQkubG9uZwkweGZmZmZmZjAwCQkJCUAgY3B1X21hc2sKKwkJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQkJUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKKwkJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKKwkJCVBNRF9CSVQ0IHwgXAorCQkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCQlQTURfU0VDVF9BUF9SRUFECisJCWIJX19hcm03MTBfc2V0dXAJCQkJQCBjcHVfZmx1c2gKKwkJLmxvbmcJY3B1X2FyY2hfbmFtZQkJCQlAIGFyY2hfbmFtZQorCQkubG9uZwljcHVfZWxmX25hbWUJCQkJQCBlbGZfbmFtZQorCQkubG9uZwlIV0NBUF9TV1AgfCBIV0NBUF9IQUxGIHwgSFdDQVBfVEhVTUIJQCBlbGZfaHdjYXAKKwkJLmxvbmcJY3B1X2FybTcxMF9uYW1lCQkJCUAgbmFtZQorCQkubG9uZwlhcm03MjBfcHJvY2Vzc29yX2Z1bmN0aW9ucworCQkubG9uZwl2NF90bGJfZm5zCisJCS5sb25nCXY0d3RfdXNlcl9mbnMKKwkJLmxvbmcJdjRfY2FjaGVfZm5zCisJCS5zaXplCV9fYXJtNzEwX3Byb2NfaW5mbywgLiAtIF9fYXJtNzEwX3Byb2NfaW5mbworCisJCS50eXBlCV9fYXJtNzIwX3Byb2NfaW5mbywgI29iamVjdAorX19hcm03MjBfcHJvY19pbmZvOgorCQkubG9uZwkweDQxODA3MjAwCQkJCUAgY3B1X3ZhbAorCQkubG9uZwkweGZmZmZmZjAwCQkJCUAgY3B1X21hc2sKKwkJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQkJUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKKwkJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKKwkJCVBNRF9CSVQ0IHwgXAorCQkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCQlQTURfU0VDVF9BUF9SRUFECisJCWIJX19hcm03MjBfc2V0dXAJCQkJQCBjcHVfZmx1c2gKKwkJLmxvbmcJY3B1X2FyY2hfbmFtZQkJCQlAIGFyY2hfbmFtZQorCQkubG9uZwljcHVfZWxmX25hbWUJCQkJQCBlbGZfbmFtZQorCQkubG9uZwlIV0NBUF9TV1AgfCBIV0NBUF9IQUxGIHwgSFdDQVBfVEhVTUIJQCBlbGZfaHdjYXAKKwkJLmxvbmcJY3B1X2FybTcyMF9uYW1lCQkJCUAgbmFtZQorCQkubG9uZwlhcm03MjBfcHJvY2Vzc29yX2Z1bmN0aW9ucworCQkubG9uZwl2NF90bGJfZm5zCisJCS5sb25nCXY0d3RfdXNlcl9mbnMKKwkJLmxvbmcJdjRfY2FjaGVfZm5zCisJCS5zaXplCV9fYXJtNzIwX3Byb2NfaW5mbywgLiAtIF9fYXJtNzIwX3Byb2NfaW5mbwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY0OTBhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKQEAgLTAsMCArMSw0ODAgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUzogTU1VIGZ1bmN0aW9ucyBmb3IgQVJNOTIwCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEFSTSBMaW1pdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKgorICogVGhlc2UgYXJlIHRoZSBsb3cgbGV2ZWwgYXNzZW1ibGVyIGZvciBwZXJmb3JtaW5nIGNhY2hlIGFuZCBUTEIKKyAqIGZ1bmN0aW9ucyBvbiB0aGUgYXJtOTIwLgorICoKKyAqICBDT05GSUdfQ1BVX0FSTTkyMF9DUFVfSURMRSAtPiBub2hsdAorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2luZm8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlICJwcm9jLW1hY3Jvcy5TIgorCisvKgorICogVGhlIHNpemUgb2Ygb25lIGRhdGEgY2FjaGUgbGluZS4KKyAqLworI2RlZmluZSBDQUNIRV9ETElORVNJWkUJMzIKKworLyoKKyAqIFRoZSBudW1iZXIgb2YgZGF0YSBjYWNoZSBzZWdtZW50cy4KKyAqLworI2RlZmluZSBDQUNIRV9EU0VHTUVOVFMJOAorCisvKgorICogVGhlIG51bWJlciBvZiBsaW5lcyBpbiBhIGNhY2hlIHNlZ21lbnQuCisgKi8KKyNkZWZpbmUgQ0FDSEVfREVOVFJJRVMJNjQKKworLyoKKyAqIFRoaXMgaXMgdGhlIHNpemUgYXQgd2hpY2ggaXQgYmVjb21lcyBtb3JlIGVmZmljaWVudCB0bworICogY2xlYW4gdGhlIHdob2xlIGNhY2hlLCByYXRoZXIgdGhhbiB1c2luZyB0aGUgaW5kaXZpZHVhbAorICogY2FjaGUgbGluZSBtYWludGFpbmVuY2UgaW5zdHJ1Y3Rpb25zLgorICovCisjZGVmaW5lIENBQ0hFX0RMSU1JVAk2NTUzNgorCisKKwkudGV4dAorLyoKKyAqIGNwdV9hcm05MjBfcHJvY19pbml0KCkKKyAqLworRU5UUlkoY3B1X2FybTkyMF9wcm9jX2luaXQpCisJbW92CXBjLCBscgorCisvKgorICogY3B1X2FybTkyMF9wcm9jX2ZpbigpCisgKi8KK0VOVFJZKGNwdV9hcm05MjBfcHJvY19maW4pCisJc3RtZmQJc3AhLCB7bHJ9CisJbW92CWlwLCAjUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUKKwltc3IJY3Bzcl9jLCBpcAorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKwlibAlhcm05MjBfZmx1c2hfa2Vybl9jYWNoZV9hbGwKKyNlbHNlCisJYmwJdjR3dF9mbHVzaF9rZXJuX2NhY2hlX2FsbAorI2VuZGlmCisJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCisJYmljCXIwLCByMCwgIzB4MTAwMAkJCUAgLi4uaS4uLi4uLi4uLi4uLgorCWJpYwlyMCwgcjAsICMweDAwMGUJCQlAIC4uLi4uLi4uLi4uLndjYS4KKwltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGRpc2FibGUgY2FjaGVzCisJbGRtZmQJc3AhLCB7cGN9CisKKy8qCisgKiBjcHVfYXJtOTIwX3Jlc2V0KGxvYykKKyAqCisgKiBQZXJmb3JtIGEgc29mdCByZXNldCBvZiB0aGUgc3lzdGVtLiAgUHV0IHRoZSBDUFUgaW50byB0aGUKKyAqIHNhbWUgc3RhdGUgYXMgaXQgd291bGQgYmUgaWYgaXQgaGFkIGJlZW4gcmVzZXQsIGFuZCBicmFuY2gKKyAqIHRvIHdoYXQgd291bGQgYmUgdGhlIHJlc2V0IHZlY3Rvci4KKyAqCisgKiBsb2M6IGxvY2F0aW9uIHRvIGp1bXAgdG8gZm9yIHNvZnQgcmVzZXQKKyAqLworCS5hbGlnbgk1CitFTlRSWShjcHVfYXJtOTIwX3Jlc2V0KQorCW1vdglpcCwgIzAKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM3LCAwCQlAIGludmFsaWRhdGUgSSxEIGNhY2hlcworCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKwltcmMJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwliaWMJaXAsIGlwLCAjMHgwMDBmCQkJQCAuLi4uLi4uLi4uLi53Y2FtCisJYmljCWlwLCBpcCwgIzB4MTEwMAkJCUAgLi4uaS4uLnMuLi4uLi4uLgorCW1jcglwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCW1vdglwYywgcjAKKworLyoKKyAqIGNwdV9hcm05MjBfZG9faWRsZSgpCisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X2FybTkyMF9kb19pZGxlKQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzAsIDQJCUAgV2FpdCBmb3IgaW50ZXJydXB0CisJbW92CXBjLCBscgorCisKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisKKy8qCisgKglmbHVzaF91c2VyX2NhY2hlX2FsbCgpCisgKgorICoJSW52YWxpZGF0ZSBhbGwgY2FjaGUgZW50cmllcyBpbiBhIHBhcnRpY3VsYXIgYWRkcmVzcworICoJc3BhY2UuCisgKi8KK0VOVFJZKGFybTkyMF9mbHVzaF91c2VyX2NhY2hlX2FsbCkKKwkvKiBGQUxMVEhST1VHSCAqLworCisvKgorICoJZmx1c2hfa2Vybl9jYWNoZV9hbGwoKQorICoKKyAqCUNsZWFuIGFuZCBpbnZhbGlkYXRlIHRoZSBlbnRpcmUgY2FjaGUuCisgKi8KK0VOVFJZKGFybTkyMF9mbHVzaF9rZXJuX2NhY2hlX2FsbCkKKwltb3YJcjIsICNWTV9FWEVDCisJbW92CWlwLCAjMAorX19mbHVzaF93aG9sZV9jYWNoZToKKwltb3YJcjEsICMoQ0FDSEVfRFNFR01FTlRTIC0gMSkgPDwgNQlAIDggc2VnbWVudHMKKzE6CW9ycglyMywgcjEsICMoQ0FDSEVfREVOVFJJRVMgLSAxKSA8PCAyNiBAIDY0IGVudHJpZXMKKzI6CW1jcglwMTUsIDAsIHIzLCBjNywgYzE0LCAyCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBpbmRleAorCXN1YnMJcjMsIHIzLCAjMSA8PCAyNgorCWJjcwkyYgkJCQlAIGVudHJpZXMgNjMgdG8gMAorCXN1YnMJcjEsIHIxLCAjMSA8PCA1CisJYmNzCTFiCQkJCUAgc2VnbWVudHMgNyB0byAwCisJdHN0CXIyLCAjVk1fRVhFQworCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfdXNlcl9jYWNoZV9yYW5nZShzdGFydCwgZW5kLCBmbGFncykKKyAqCisgKglJbnZhbGlkYXRlIGEgcmFuZ2Ugb2YgY2FjaGUgZW50cmllcyBpbiB0aGUgc3BlY2lmaWVkCisgKglhZGRyZXNzIHNwYWNlLgorICoKKyAqCS0gc3RhcnQJLSBzdGFydCBhZGRyZXNzIChpbmNsdXNpdmUpCisgKgktIGVuZAktIGVuZCBhZGRyZXNzIChleGNsdXNpdmUpCisgKgktIGZsYWdzCS0gdm1fZmxhZ3MgZm9yIGFkZHJlc3Mgc3BhY2UKKyAqLworRU5UUlkoYXJtOTIwX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UpCisJbW92CWlwLCAjMAorCXN1YglyMywgcjEsIHIwCQkJQCBjYWxjdWxhdGUgdG90YWwgc2l6ZQorCWNtcAlyMywgI0NBQ0hFX0RMSU1JVAorCWJocwlfX2ZsdXNoX3dob2xlX2NhY2hlCisKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBlbnRyeQorCXRzdAlyMiwgI1ZNX0VYRUMKKwltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzUsIDEJCUAgaW52YWxpZGF0ZSBJIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwl0c3QJcjIsICNWTV9FWEVDCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWNvaGVyZW50X2tlcm5fcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglFbnN1cmUgY29oZXJlbmN5IGJldHdlZW4gdGhlIEljYWNoZSBhbmQgdGhlIERjYWNoZSBpbiB0aGUKKyAqCXJlZ2lvbiBkZXNjcmliZWQgYnkgc3RhcnQsIGVuZC4gIElmIHlvdSBoYXZlIG5vbi1zbm9vcGluZworICoJSGFydmFyZCBjYWNoZXMsIHlvdSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWShhcm05MjBfY29oZXJlbnRfa2Vybl9yYW5nZSkKKwkvKiBGQUxMVEhST1VHSCAqLworCisvKgorICoJY29oZXJlbnRfdXNlcl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUVuc3VyZSBjb2hlcmVuY3kgYmV0d2VlbiB0aGUgSWNhY2hlIGFuZCB0aGUgRGNhY2hlIGluIHRoZQorICoJcmVnaW9uIGRlc2NyaWJlZCBieSBzdGFydCwgZW5kLiAgSWYgeW91IGhhdmUgbm9uLXNub29waW5nCisgKglIYXJ2YXJkIGNhY2hlcywgeW91IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgKgorICoJLSBzdGFydAktIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKGFybTkyMF9jb2hlcmVudF91c2VyX3JhbmdlKQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgMQkJQCBpbnZhbGlkYXRlIEkgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoKKyAqCUVuc3VyZSBubyBEIGNhY2hlIGFsaWFzaW5nIG9jY3VycywgZWl0aGVyIHdpdGggaXRzZWxmIG9yCisgKgl0aGUgSSBjYWNoZQorICoKKyAqCS0gYWRkcgktIHBhZ2UgYWxpZ25lZCBhZGRyZXNzCisgKi8KK0VOVFJZKGFybTkyMF9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQorCWFkZAlyMSwgcjAsICNQQUdFX1NaCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbitpbnZhbGlkYXRlIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZG1hX2ludl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUludmFsaWRhdGUgKGRpc2NhcmQpIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoJTWF5IG5vdCB3cml0ZSBiYWNrIGFueSBlbnRyaWVzLiAgSWYgJ3N0YXJ0JyBvciAnZW5kJworICoJYXJlIG5vdCBjYWNoZSBsaW5lIGFsaWduZWQsIHRob3NlIGxpbmVzIG11c3QgYmUgd3JpdHRlbgorICoJYmFjay4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqCisgKiAoc2FtZSBhcyB2NHdiKQorICovCitFTlRSWShhcm05MjBfZG1hX2ludl9yYW5nZSkKKwl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKwltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwl0c3QJcjEsICNDQUNIRV9ETElORVNJWkUgLSAxCisJbWNybmUJcDE1LCAwLCByMSwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCQlAIGludmFsaWRhdGUgRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfY2xlYW5fcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglDbGVhbiB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqCisgKiAoc2FtZSBhcyB2NHdiKQorICovCitFTlRSWShhcm05MjBfZG1hX2NsZWFuX3JhbmdlKQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWRtYV9mbHVzaF9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUNsZWFuIGFuZCBpbnZhbGlkYXRlIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWShhcm05MjBfZG1hX2ZsdXNoX3JhbmdlKQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbitpbnZhbGlkYXRlIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCitFTlRSWShhcm05MjBfY2FjaGVfZm5zKQorCS5sb25nCWFybTkyMF9mbHVzaF9rZXJuX2NhY2hlX2FsbAorCS5sb25nCWFybTkyMF9mbHVzaF91c2VyX2NhY2hlX2FsbAorCS5sb25nCWFybTkyMF9mbHVzaF91c2VyX2NhY2hlX3JhbmdlCisJLmxvbmcJYXJtOTIwX2NvaGVyZW50X2tlcm5fcmFuZ2UKKwkubG9uZwlhcm05MjBfY29oZXJlbnRfdXNlcl9yYW5nZQorCS5sb25nCWFybTkyMF9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJYXJtOTIwX2RtYV9pbnZfcmFuZ2UKKwkubG9uZwlhcm05MjBfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJYXJtOTIwX2RtYV9mbHVzaF9yYW5nZQorCisjZW5kaWYKKworCitFTlRSWShjcHVfYXJtOTIwX2RjYWNoZV9jbGVhbl9hcmVhKQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwlzdWJzCXIxLCByMSwgI0NBQ0hFX0RMSU5FU0laRQorCWJoaQkxYgorCW1vdglwYywgbHIKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBQYWdlVGFibGUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qCisgKiBjcHVfYXJtOTIwX3N3aXRjaF9tbShwZ2QpCisgKgorICogU2V0IHRoZSB0cmFuc2xhdGlvbiBiYXNlIHBvaW50ZXIgdG8gYmUgYXMgZGVzY3JpYmVkIGJ5IHBnZC4KKyAqCisgKiBwZ2Q6IG5ldyBwYWdlIHRhYmxlcworICovCisJLmFsaWduCTUKK0VOVFJZKGNwdV9hcm05MjBfc3dpdGNoX21tKQorCW1vdglpcCwgIzAKKyNpZmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM2LCAwCQlAIGludmFsaWRhdGUgRCBjYWNoZQorI2Vsc2UKK0AgJiYgJ0NsZWFuICYgSW52YWxpZGF0ZSB3aG9sZSBEQ2FjaGUnCitAICYmIFJlLXdyaXR0ZW4gdG8gdXNlIEluZGV4IE9wcy4KK0AgJiYgVXNlcyByZWdpc3RlcnMgcjEsIHIzIGFuZCBpcAorCisJbW92CXIxLCAjKENBQ0hFX0RTRUdNRU5UUyAtIDEpIDw8IDUJQCA4IHNlZ21lbnRzCisxOglvcnIJcjMsIHIxLCAjKENBQ0hFX0RFTlRSSUVTIC0gMSkgPDwgMjYgQCA2NCBlbnRyaWVzCisyOgltY3IJcDE1LCAwLCByMywgYzcsIGMxNCwgMgkJQCBjbGVhbiAmIGludmFsaWRhdGUgRCBpbmRleAorCXN1YnMJcjMsIHIzLCAjMSA8PCAyNgorCWJjcwkyYgkJCQlAIGVudHJpZXMgNjMgdG8gMAorCXN1YnMJcjEsIHIxLCAjMSA8PCA1CisJYmNzCTFiCQkJCUAgc2VnbWVudHMgNyB0byAwCisjZW5kaWYKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBsb2FkIHBhZ2UgdGFibGUgcG9pbnRlcgorCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisJbW92CXBjLCBscgorCisvKgorICogY3B1X2FybTkyMF9zZXRfcHRlKHB0ZXAsIHB0ZSkKKyAqCisgKiBTZXQgYSBQVEUgYW5kIGZsdXNoIGl0IG91dAorICovCisJLmFsaWduCTUKK0VOVFJZKGNwdV9hcm05MjBfc2V0X3B0ZSkKKwlzdHIJcjEsIFtyMF0sICMtMjA0OAkJQCBsaW51eCB2ZXJzaW9uCisKKwllb3IJcjEsIHIxLCAjTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfV1JJVEUgfCBMX1BURV9ESVJUWQorCisJYmljCXIyLCByMSwgI1BURV9TTUFMTF9BUF9NQVNLCisJYmljCXIyLCByMiwgI1BURV9UWVBFX01BU0sKKwlvcnIJcjIsIHIyLCAjUFRFX1RZUEVfU01BTEwKKworCXRzdAlyMSwgI0xfUFRFX1VTRVIJCQlAIFVzZXI/CisJb3JybmUJcjIsIHIyLCAjUFRFX1NNQUxMX0FQX1VST19TUlcKKworCXRzdAlyMSwgI0xfUFRFX1dSSVRFIHwgTF9QVEVfRElSVFkJQCBXcml0ZSBhbmQgRGlydHk/CisJb3JyZXEJcjIsIHIyLCAjUFRFX1NNQUxMX0FQX1VOT19TUlcKKworCXRzdAlyMSwgI0xfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORwlAIFByZXNlbnQgYW5kIFlvdW5nPworCW1vdm5lCXIyLCAjMAorCisjaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJZW9yCXIzLCByMiwgIzB4MGEJCQlAIEMgJiBzbWFsbCBwYWdlPworCXRzdAlyMywgIzB4MGIKKwliaWNlcQlyMiwgcjIsICM0CisjZW5kaWYKKwlzdHIJcjIsIFtyMF0JCQlAIGhhcmR3YXJlIHZlcnNpb24KKwltb3YJcjAsIHIwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisJX19JTklUCisKKwkudHlwZQlfX2FybTkyMF9zZXR1cCwgI2Z1bmN0aW9uCitfX2FybTkyMF9zZXR1cDoKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNwkJQCBpbnZhbGlkYXRlIEksRCBjYWNoZXMgb24gdjQKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIgb24gdjQKKwltY3IJcDE1LCAwLCByMCwgYzgsIGM3CQlAIGludmFsaWRhdGUgSSxEIFRMQnMgb24gdjQKKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwCQlAIGdldCBjb250cm9sIHJlZ2lzdGVyIHY0CisJbGRyCXI1LCBhcm05MjBfY3IxX2NsZWFyCisJYmljCXIwLCByMCwgcjUKKwlsZHIJcjUsIGFybTkyMF9jcjFfc2V0CisJb3JyCXIwLCByMCwgcjUKKwltb3YJcGMsIGxyCisJLnNpemUJX19hcm05MjBfc2V0dXAsIC4gLSBfX2FybTkyMF9zZXR1cAorCisJLyoKKwkgKiAgUgorCSAqIC5SVkkgWkZSUyBCTERQIFdDQU0KKwkgKiAuLjExIDAwMDEgLi4xMSAwMTAxCisJICogCisJICovCisJLnR5cGUJYXJtOTIwX2NyMV9jbGVhciwgI29iamVjdAorCS50eXBlCWFybTkyMF9jcjFfc2V0LCAjb2JqZWN0Cithcm05MjBfY3IxX2NsZWFyOgorCS53b3JkCTB4M2YzZgorYXJtOTIwX2NyMV9zZXQ6CisJLndvcmQJMHgzMTM1CisKKwlfX0lOSVREQVRBCisKKy8qCisgKiBQdXJwb3NlIDogRnVuY3Rpb24gcG9pbnRlcnMgdXNlZCB0byBhY2Nlc3MgYWJvdmUgZnVuY3Rpb25zIC0gYWxsIGNhbGxzCisgKgkgICAgIGNvbWUgdGhyb3VnaCB0aGVzZQorICovCisJLnR5cGUJYXJtOTIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKK2FybTkyMF9wcm9jZXNzb3JfZnVuY3Rpb25zOgorCS53b3JkCXY0dF9lYXJseV9hYm9ydAorCS53b3JkCWNwdV9hcm05MjBfcHJvY19pbml0CisJLndvcmQJY3B1X2FybTkyMF9wcm9jX2ZpbgorCS53b3JkCWNwdV9hcm05MjBfcmVzZXQKKwkud29yZCAgIGNwdV9hcm05MjBfZG9faWRsZQorCS53b3JkCWNwdV9hcm05MjBfZGNhY2hlX2NsZWFuX2FyZWEKKwkud29yZAljcHVfYXJtOTIwX3N3aXRjaF9tbQorCS53b3JkCWNwdV9hcm05MjBfc2V0X3B0ZQorCS5zaXplCWFybTkyMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtOTIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKworCS5zZWN0aW9uICIucm9kYXRhIgorCisJLnR5cGUJY3B1X2FyY2hfbmFtZSwgI29iamVjdAorY3B1X2FyY2hfbmFtZToKKwkuYXNjaXoJImFybXY0dCIKKwkuc2l6ZQljcHVfYXJjaF9uYW1lLCAuIC0gY3B1X2FyY2hfbmFtZQorCisJLnR5cGUJY3B1X2VsZl9uYW1lLCAjb2JqZWN0CitjcHVfZWxmX25hbWU6CisJLmFzY2l6CSJ2NCIKKwkuc2l6ZQljcHVfZWxmX25hbWUsIC4gLSBjcHVfZWxmX25hbWUKKworCS50eXBlCWNwdV9hcm05MjBfbmFtZSwgI29iamVjdAorY3B1X2FybTkyMF9uYW1lOgorCS5hc2NpaQkiQVJNOTIwVCIKKyNpZm5kZWYgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRQorCS5hc2NpaQkiaSIKKyNlbmRpZgorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCisJLmFzY2lpCSJkIgorI2lmZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAorCS5hc2NpaQkiKHd0KSIKKyNlbHNlCisJLmFzY2lpCSIod2IpIgorI2VuZGlmCisjZW5kaWYKKwkuYXNjaWkJIlwwIgorCS5zaXplCWNwdV9hcm05MjBfbmFtZSwgLiAtIGNwdV9hcm05MjBfbmFtZQorCisJLmFsaWduCisKKwkuc2VjdGlvbiAiLnByb2MuaW5mbyIsICNhbGxvYywgI2V4ZWNpbnN0cgorCisJLnR5cGUJX19hcm05MjBfcHJvY19pbmZvLCNvYmplY3QKK19fYXJtOTIwX3Byb2NfaW5mbzoKKwkubG9uZwkweDQxMDA5MjAwCisJLmxvbmcJMHhmZjAwZmZmMAorCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKKwkJUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKKwkJUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgXAorCQlQTURfQklUNCB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKKwliCV9fYXJtOTIwX3NldHVwCisJLmxvbmcJY3B1X2FyY2hfbmFtZQorCS5sb25nCWNwdV9lbGZfbmFtZQorCS5sb25nCUhXQ0FQX1NXUCB8IEhXQ0FQX0hBTEYgfCBIV0NBUF9USFVNQgorCS5sb25nCWNwdV9hcm05MjBfbmFtZQorCS5sb25nCWFybTkyMF9wcm9jZXNzb3JfZnVuY3Rpb25zCisJLmxvbmcJdjR3YmlfdGxiX2ZucworCS5sb25nCXY0d2JfdXNlcl9mbnMKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJLmxvbmcJYXJtOTIwX2NhY2hlX2ZucworI2Vsc2UKKwkubG9uZwl2NHd0X2NhY2hlX2ZucworI2VuZGlmCisJLnNpemUJX19hcm05MjBfcHJvY19pbmZvLCAuIC0gX19hcm05MjBfcHJvY19pbmZvCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmJjMzRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUwpAQCAtMCwwICsxLDQ4NCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TOiBNTVUgZnVuY3Rpb25zIGZvciBBUk05MjIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgQVJNIExpbWl0ZWQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIEFsdGVyYSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKgorICogVGhlc2UgYXJlIHRoZSBsb3cgbGV2ZWwgYXNzZW1ibGVyIGZvciBwZXJmb3JtaW5nIGNhY2hlIGFuZCBUTEIKKyAqIGZ1bmN0aW9ucyBvbiB0aGUgYXJtOTIyLgorICoKKyAqICBDT05GSUdfQ1BVX0FSTTkyMl9DUFVfSURMRSAtPiBub2hsdAorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2luZm8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlICJwcm9jLW1hY3Jvcy5TIgorCisvKgorICogVGhlIHNpemUgb2Ygb25lIGRhdGEgY2FjaGUgbGluZS4KKyAqLworI2RlZmluZSBDQUNIRV9ETElORVNJWkUJMzIKKworLyoKKyAqIFRoZSBudW1iZXIgb2YgZGF0YSBjYWNoZSBzZWdtZW50cy4KKyAqLworI2RlZmluZSBDQUNIRV9EU0VHTUVOVFMJNAorCisvKgorICogVGhlIG51bWJlciBvZiBsaW5lcyBpbiBhIGNhY2hlIHNlZ21lbnQuCisgKi8KKyNkZWZpbmUgQ0FDSEVfREVOVFJJRVMJNjQKKworLyoKKyAqIFRoaXMgaXMgdGhlIHNpemUgYXQgd2hpY2ggaXQgYmVjb21lcyBtb3JlIGVmZmljaWVudCB0bworICogY2xlYW4gdGhlIHdob2xlIGNhY2hlLCByYXRoZXIgdGhhbiB1c2luZyB0aGUgaW5kaXZpZHVhbAorICogY2FjaGUgbGluZSBtYWludGFpbmVuY2UgaW5zdHJ1Y3Rpb25zLiAgKEkgdGhpbmsgdGhpcyBzaG91bGQKKyAqIGJlIDMyNzY4KS4KKyAqLworI2RlZmluZSBDQUNIRV9ETElNSVQJODE5MgorCisKKwkudGV4dAorLyoKKyAqIGNwdV9hcm05MjJfcHJvY19pbml0KCkKKyAqLworRU5UUlkoY3B1X2FybTkyMl9wcm9jX2luaXQpCisJbW92CXBjLCBscgorCisvKgorICogY3B1X2FybTkyMl9wcm9jX2ZpbigpCisgKi8KK0VOVFJZKGNwdV9hcm05MjJfcHJvY19maW4pCisJc3RtZmQJc3AhLCB7bHJ9CisJbW92CWlwLCAjUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUKKwltc3IJY3Bzcl9jLCBpcAorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKwlibAlhcm05MjJfZmx1c2hfa2Vybl9jYWNoZV9hbGwKKyNlbHNlCisJYmwJdjR3dF9mbHVzaF9rZXJuX2NhY2hlX2FsbAorI2VuZGlmCisJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCisJYmljCXIwLCByMCwgIzB4MTAwMAkJCUAgLi4uaS4uLi4uLi4uLi4uLgorCWJpYwlyMCwgcjAsICMweDAwMGUJCQlAIC4uLi4uLi4uLi4uLndjYS4KKwltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGRpc2FibGUgY2FjaGVzCisJbGRtZmQJc3AhLCB7cGN9CisKKy8qCisgKiBjcHVfYXJtOTIyX3Jlc2V0KGxvYykKKyAqCisgKiBQZXJmb3JtIGEgc29mdCByZXNldCBvZiB0aGUgc3lzdGVtLiAgUHV0IHRoZSBDUFUgaW50byB0aGUKKyAqIHNhbWUgc3RhdGUgYXMgaXQgd291bGQgYmUgaWYgaXQgaGFkIGJlZW4gcmVzZXQsIGFuZCBicmFuY2gKKyAqIHRvIHdoYXQgd291bGQgYmUgdGhlIHJlc2V0IHZlY3Rvci4KKyAqCisgKiBsb2M6IGxvY2F0aW9uIHRvIGp1bXAgdG8gZm9yIHNvZnQgcmVzZXQKKyAqLworCS5hbGlnbgk1CitFTlRSWShjcHVfYXJtOTIyX3Jlc2V0KQorCW1vdglpcCwgIzAKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM3LCAwCQlAIGludmFsaWRhdGUgSSxEIGNhY2hlcworCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKwltcmMJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwliaWMJaXAsIGlwLCAjMHgwMDBmCQkJQCAuLi4uLi4uLi4uLi53Y2FtCisJYmljCWlwLCBpcCwgIzB4MTEwMAkJCUAgLi4uaS4uLnMuLi4uLi4uLgorCW1jcglwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCW1vdglwYywgcjAKKworLyoKKyAqIGNwdV9hcm05MjJfZG9faWRsZSgpCisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X2FybTkyMl9kb19pZGxlKQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzAsIDQJCUAgV2FpdCBmb3IgaW50ZXJydXB0CisJbW92CXBjLCBscgorCisKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisKKy8qCisgKglmbHVzaF91c2VyX2NhY2hlX2FsbCgpCisgKgorICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgYWxsIGNhY2hlIGVudHJpZXMgaW4gYSBwYXJ0aWN1bGFyCisgKglhZGRyZXNzIHNwYWNlLgorICovCitFTlRSWShhcm05MjJfZmx1c2hfdXNlcl9jYWNoZV9hbGwpCisJLyogRkFMTFRIUk9VR0ggKi8KKworLyoKKyAqCWZsdXNoX2tlcm5fY2FjaGVfYWxsKCkKKyAqCisgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSB0aGUgZW50aXJlIGNhY2hlLgorICovCitFTlRSWShhcm05MjJfZmx1c2hfa2Vybl9jYWNoZV9hbGwpCisJbW92CXIyLCAjVk1fRVhFQworCW1vdglpcCwgIzAKK19fZmx1c2hfd2hvbGVfY2FjaGU6CisJbW92CXIxLCAjKENBQ0hFX0RTRUdNRU5UUyAtIDEpIDw8IDUJQCA4IHNlZ21lbnRzCisxOglvcnIJcjMsIHIxLCAjKENBQ0hFX0RFTlRSSUVTIC0gMSkgPDwgMjYgQCA2NCBlbnRyaWVzCisyOgltY3IJcDE1LCAwLCByMywgYzcsIGMxNCwgMgkJQCBjbGVhbitpbnZhbGlkYXRlIEQgaW5kZXgKKwlzdWJzCXIzLCByMywgIzEgPDwgMjYKKwliY3MJMmIJCQkJQCBlbnRyaWVzIDYzIHRvIDAKKwlzdWJzCXIxLCByMSwgIzEgPDwgNQorCWJjcwkxYgkJCQlAIHNlZ21lbnRzIDcgdG8gMAorCXRzdAlyMiwgI1ZNX0VYRUMKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWZsdXNoX3VzZXJfY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCwgZmxhZ3MpCisgKgorICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgYSByYW5nZSBvZiBjYWNoZSBlbnRyaWVzIGluIHRoZQorICoJc3BlY2lmaWVkIGFkZHJlc3MgcmFuZ2UuCisgKgorICoJLSBzdGFydAktIHN0YXJ0IGFkZHJlc3MgKGluY2x1c2l2ZSkKKyAqCS0gZW5kCS0gZW5kIGFkZHJlc3MgKGV4Y2x1c2l2ZSkKKyAqCS0gZmxhZ3MJLSB2bV9mbGFncyBkZXNjcmliaW5nIGFkZHJlc3Mgc3BhY2UKKyAqLworRU5UUlkoYXJtOTIyX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UpCisJbW92CWlwLCAjMAorCXN1YglyMywgcjEsIHIwCQkJQCBjYWxjdWxhdGUgdG90YWwgc2l6ZQorCWNtcAlyMywgI0NBQ0hFX0RMSU1JVAorCWJocwlfX2ZsdXNoX3dob2xlX2NhY2hlCisKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBlbnRyeQorCXRzdAlyMiwgI1ZNX0VYRUMKKwltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzUsIDEJCUAgaW52YWxpZGF0ZSBJIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwl0c3QJcjIsICNWTV9FWEVDCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWNvaGVyZW50X2tlcm5fcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglFbnN1cmUgY29oZXJlbmN5IGJldHdlZW4gdGhlIEljYWNoZSBhbmQgdGhlIERjYWNoZSBpbiB0aGUKKyAqCXJlZ2lvbiBkZXNjcmliZWQgYnkgc3RhcnQsIGVuZC4gIElmIHlvdSBoYXZlIG5vbi1zbm9vcGluZworICoJSGFydmFyZCBjYWNoZXMsIHlvdSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWShhcm05MjJfY29oZXJlbnRfa2Vybl9yYW5nZSkKKwkvKiBGQUxMVEhST1VHSCAqLworCisvKgorICoJY29oZXJlbnRfdXNlcl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUVuc3VyZSBjb2hlcmVuY3kgYmV0d2VlbiB0aGUgSWNhY2hlIGFuZCB0aGUgRGNhY2hlIGluIHRoZQorICoJcmVnaW9uIGRlc2NyaWJlZCBieSBzdGFydCwgZW5kLiAgSWYgeW91IGhhdmUgbm9uLXNub29waW5nCisgKglIYXJ2YXJkIGNhY2hlcywgeW91IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgKgorICoJLSBzdGFydAktIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKGFybTkyMl9jb2hlcmVudF91c2VyX3JhbmdlKQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgMQkJQCBpbnZhbGlkYXRlIEkgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoKKyAqCUVuc3VyZSBubyBEIGNhY2hlIGFsaWFzaW5nIG9jY3VycywgZWl0aGVyIHdpdGggaXRzZWxmIG9yCisgKgl0aGUgSSBjYWNoZQorICoKKyAqCS0gYWRkcgktIHBhZ2UgYWxpZ25lZCBhZGRyZXNzCisgKi8KK0VOVFJZKGFybTkyMl9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQorCWFkZAlyMSwgcjAsICNQQUdFX1NaCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbitpbnZhbGlkYXRlIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZG1hX2ludl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUludmFsaWRhdGUgKGRpc2NhcmQpIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoJTWF5IG5vdCB3cml0ZSBiYWNrIGFueSBlbnRyaWVzLiAgSWYgJ3N0YXJ0JyBvciAnZW5kJworICoJYXJlIG5vdCBjYWNoZSBsaW5lIGFsaWduZWQsIHRob3NlIGxpbmVzIG11c3QgYmUgd3JpdHRlbgorICoJYmFjay4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqCisgKiAoc2FtZSBhcyB2NHdiKQorICovCitFTlRSWShhcm05MjJfZG1hX2ludl9yYW5nZSkKKwl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKwltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwl0c3QJcjEsICNDQUNIRV9ETElORVNJWkUgLSAxCisJbWNybmUJcDE1LCAwLCByMSwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCQlAIGludmFsaWRhdGUgRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfY2xlYW5fcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglDbGVhbiB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqCisgKiAoc2FtZSBhcyB2NHdiKQorICovCitFTlRSWShhcm05MjJfZG1hX2NsZWFuX3JhbmdlKQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWRtYV9mbHVzaF9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUNsZWFuIGFuZCBpbnZhbGlkYXRlIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWShhcm05MjJfZG1hX2ZsdXNoX3JhbmdlKQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbitpbnZhbGlkYXRlIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCitFTlRSWShhcm05MjJfY2FjaGVfZm5zKQorCS5sb25nCWFybTkyMl9mbHVzaF9rZXJuX2NhY2hlX2FsbAorCS5sb25nCWFybTkyMl9mbHVzaF91c2VyX2NhY2hlX2FsbAorCS5sb25nCWFybTkyMl9mbHVzaF91c2VyX2NhY2hlX3JhbmdlCisJLmxvbmcJYXJtOTIyX2NvaGVyZW50X2tlcm5fcmFuZ2UKKwkubG9uZwlhcm05MjJfY29oZXJlbnRfdXNlcl9yYW5nZQorCS5sb25nCWFybTkyMl9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJYXJtOTIyX2RtYV9pbnZfcmFuZ2UKKwkubG9uZwlhcm05MjJfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJYXJtOTIyX2RtYV9mbHVzaF9yYW5nZQorCisjZW5kaWYKKworCitFTlRSWShjcHVfYXJtOTIyX2RjYWNoZV9jbGVhbl9hcmVhKQorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJc3VicwlyMSwgcjEsICNDQUNIRV9ETElORVNJWkUKKwliaGkJMWIKKyNlbmRpZgorCW1vdglwYywgbHIKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBQYWdlVGFibGUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qCisgKiBjcHVfYXJtOTIyX3N3aXRjaF9tbShwZ2QpCisgKgorICogU2V0IHRoZSB0cmFuc2xhdGlvbiBiYXNlIHBvaW50ZXIgdG8gYmUgYXMgZGVzY3JpYmVkIGJ5IHBnZC4KKyAqCisgKiBwZ2Q6IG5ldyBwYWdlIHRhYmxlcworICovCisJLmFsaWduCTUKK0VOVFJZKGNwdV9hcm05MjJfc3dpdGNoX21tKQorCW1vdglpcCwgIzAKKyNpZmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM2LCAwCQlAIGludmFsaWRhdGUgRCBjYWNoZQorI2Vsc2UKK0AgJiYgJ0NsZWFuICYgSW52YWxpZGF0ZSB3aG9sZSBEQ2FjaGUnCitAICYmIFJlLXdyaXR0ZW4gdG8gdXNlIEluZGV4IE9wcy4KK0AgJiYgVXNlcyByZWdpc3RlcnMgcjEsIHIzIGFuZCBpcAorCisJbW92CXIxLCAjKENBQ0hFX0RTRUdNRU5UUyAtIDEpIDw8IDUJQCA0IHNlZ21lbnRzCisxOglvcnIJcjMsIHIxLCAjKENBQ0hFX0RFTlRSSUVTIC0gMSkgPDwgMjYgQCA2NCBlbnRyaWVzCisyOgltY3IJcDE1LCAwLCByMywgYzcsIGMxNCwgMgkJQCBjbGVhbiAmIGludmFsaWRhdGUgRCBpbmRleAorCXN1YnMJcjMsIHIzLCAjMSA8PCAyNgorCWJjcwkyYgkJCQlAIGVudHJpZXMgNjMgdG8gMAorCXN1YnMJcjEsIHIxLCAjMSA8PCA1CisJYmNzCTFiCQkJCUAgc2VnbWVudHMgNyB0byAwCisjZW5kaWYKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBsb2FkIHBhZ2UgdGFibGUgcG9pbnRlcgorCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisJbW92CXBjLCBscgorCisvKgorICogY3B1X2FybTkyMl9zZXRfcHRlKHB0ZXAsIHB0ZSkKKyAqCisgKiBTZXQgYSBQVEUgYW5kIGZsdXNoIGl0IG91dAorICovCisJLmFsaWduCTUKK0VOVFJZKGNwdV9hcm05MjJfc2V0X3B0ZSkKKwlzdHIJcjEsIFtyMF0sICMtMjA0OAkJQCBsaW51eCB2ZXJzaW9uCisKKwllb3IJcjEsIHIxLCAjTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfV1JJVEUgfCBMX1BURV9ESVJUWQorCisJYmljCXIyLCByMSwgI1BURV9TTUFMTF9BUF9NQVNLCisJYmljCXIyLCByMiwgI1BURV9UWVBFX01BU0sKKwlvcnIJcjIsIHIyLCAjUFRFX1RZUEVfU01BTEwKKworCXRzdAlyMSwgI0xfUFRFX1VTRVIJCQlAIFVzZXI/CisJb3JybmUJcjIsIHIyLCAjUFRFX1NNQUxMX0FQX1VST19TUlcKKworCXRzdAlyMSwgI0xfUFRFX1dSSVRFIHwgTF9QVEVfRElSVFkJQCBXcml0ZSBhbmQgRGlydHk/CisJb3JyZXEJcjIsIHIyLCAjUFRFX1NNQUxMX0FQX1VOT19TUlcKKworCXRzdAlyMSwgI0xfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORwlAIFByZXNlbnQgYW5kIFlvdW5nPworCW1vdm5lCXIyLCAjMAorCisjaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJZW9yCXIzLCByMiwgIzB4MGEJCQlAIEMgJiBzbWFsbCBwYWdlPworCXRzdAlyMywgIzB4MGIKKwliaWNlcQlyMiwgcjIsICM0CisjZW5kaWYKKwlzdHIJcjIsIFtyMF0JCQlAIGhhcmR3YXJlIHZlcnNpb24KKwltb3YJcjAsIHIwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisJX19JTklUCisKKwkudHlwZQlfX2FybTkyMl9zZXR1cCwgI2Z1bmN0aW9uCitfX2FybTkyMl9zZXR1cDoKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNwkJQCBpbnZhbGlkYXRlIEksRCBjYWNoZXMgb24gdjQKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIgb24gdjQKKwltY3IJcDE1LCAwLCByMCwgYzgsIGM3CQlAIGludmFsaWRhdGUgSSxEIFRMQnMgb24gdjQKKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwCQlAIGdldCBjb250cm9sIHJlZ2lzdGVyIHY0CisJbGRyCXI1LCBhcm05MjJfY3IxX2NsZWFyCisJYmljCXIwLCByMCwgcjUKKwlsZHIJcjUsIGFybTkyMl9jcjFfc2V0CisJb3JyCXIwLCByMCwgcjUKKwltb3YJcGMsIGxyCisJLnNpemUJX19hcm05MjJfc2V0dXAsIC4gLSBfX2FybTkyMl9zZXR1cAorCisJLyoKKwkgKiAgUgorCSAqIC5SVkkgWkZSUyBCTERQIFdDQU0KKwkgKiAuLjExIDAwMDEgLi4xMSAwMTAxCisJICogCisJICovCisJLnR5cGUJYXJtOTIyX2NyMV9jbGVhciwgI29iamVjdAorCS50eXBlCWFybTkyMl9jcjFfc2V0LCAjb2JqZWN0Cithcm05MjJfY3IxX2NsZWFyOgorCS53b3JkCTB4M2YzZgorYXJtOTIyX2NyMV9zZXQ6CisJLndvcmQJMHgzMTM1CisKKwlfX0lOSVREQVRBCisKKy8qCisgKiBQdXJwb3NlIDogRnVuY3Rpb24gcG9pbnRlcnMgdXNlZCB0byBhY2Nlc3MgYWJvdmUgZnVuY3Rpb25zIC0gYWxsIGNhbGxzCisgKgkgICAgIGNvbWUgdGhyb3VnaCB0aGVzZQorICovCisJLnR5cGUJYXJtOTIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKK2FybTkyMl9wcm9jZXNzb3JfZnVuY3Rpb25zOgorCS53b3JkCXY0dF9lYXJseV9hYm9ydAorCS53b3JkCWNwdV9hcm05MjJfcHJvY19pbml0CisJLndvcmQJY3B1X2FybTkyMl9wcm9jX2ZpbgorCS53b3JkCWNwdV9hcm05MjJfcmVzZXQKKwkud29yZCAgIGNwdV9hcm05MjJfZG9faWRsZQorCS53b3JkCWNwdV9hcm05MjJfZGNhY2hlX2NsZWFuX2FyZWEKKwkud29yZAljcHVfYXJtOTIyX3N3aXRjaF9tbQorCS53b3JkCWNwdV9hcm05MjJfc2V0X3B0ZQorCS5zaXplCWFybTkyMl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtOTIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKworCS5zZWN0aW9uICIucm9kYXRhIgorCisJLnR5cGUJY3B1X2FyY2hfbmFtZSwgI29iamVjdAorY3B1X2FyY2hfbmFtZToKKwkuYXNjaXoJImFybXY0dCIKKwkuc2l6ZQljcHVfYXJjaF9uYW1lLCAuIC0gY3B1X2FyY2hfbmFtZQorCisJLnR5cGUJY3B1X2VsZl9uYW1lLCAjb2JqZWN0CitjcHVfZWxmX25hbWU6CisJLmFzY2l6CSJ2NCIKKwkuc2l6ZQljcHVfZWxmX25hbWUsIC4gLSBjcHVfZWxmX25hbWUKKworCS50eXBlCWNwdV9hcm05MjJfbmFtZSwgI29iamVjdAorY3B1X2FybTkyMl9uYW1lOgorCS5hc2NpaQkiQVJNOTIyVCIKKyNpZm5kZWYgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRQorCS5hc2NpaQkiaSIKKyNlbmRpZgorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCisJLmFzY2lpCSJkIgorI2lmZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAorCS5hc2NpaQkiKHd0KSIKKyNlbHNlCisJLmFzY2lpCSIod2IpIgorI2VuZGlmCisjZW5kaWYKKwkuYXNjaWkJIlwwIgorCS5zaXplCWNwdV9hcm05MjJfbmFtZSwgLiAtIGNwdV9hcm05MjJfbmFtZQorCisJLmFsaWduCisKKwkuc2VjdGlvbiAiLnByb2MuaW5mbyIsICNhbGxvYywgI2V4ZWNpbnN0cgorCisJLnR5cGUJX19hcm05MjJfcHJvY19pbmZvLCNvYmplY3QKK19fYXJtOTIyX3Byb2NfaW5mbzoKKwkubG9uZwkweDQxMDA5MjIwCisJLmxvbmcJMHhmZjAwZmZmMAorCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKKwkJUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKKwkJUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgXAorCQlQTURfQklUNCB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKKwliCV9fYXJtOTIyX3NldHVwCisJLmxvbmcJY3B1X2FyY2hfbmFtZQorCS5sb25nCWNwdV9lbGZfbmFtZQorCS5sb25nCUhXQ0FQX1NXUCB8IEhXQ0FQX0hBTEYgfCBIV0NBUF9USFVNQgorCS5sb25nCWNwdV9hcm05MjJfbmFtZQorCS5sb25nCWFybTkyMl9wcm9jZXNzb3JfZnVuY3Rpb25zCisJLmxvbmcJdjR3YmlfdGxiX2ZucworCS5sb25nCXY0d2JfdXNlcl9mbnMKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJLmxvbmcJYXJtOTIyX2NhY2hlX2ZucworI2Vsc2UKKwkubG9uZwl2NHd0X2NhY2hlX2ZucworI2VuZGlmCisJLnNpemUJX19hcm05MjJfcHJvY19pbmZvLCAuIC0gX19hcm05MjJfcHJvY19pbmZvCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTQ5YWEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUwpAQCAtMCwwICsxLDU2MiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS9hcm05MjUuUzogTU1VIGZ1bmN0aW9ucyBmb3IgQVJNOTI1CisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEFSTSBMaW1pdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICogIENvcHlyaWdodCAoQykgMjAwMiBSaWRnZVJ1biwgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiAgVXBkYXRlIGZvciBMaW51eC0yLjYgYW5kIGNhY2hlIGZsdXNoIGltcHJvdmVtZW50cworICogIENvcHlyaWdodCAoQykgMjAwNCBOb2tpYSBDb3Jwb3JhdGlvbiBieSBUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKgorICogVGhlc2UgYXJlIHRoZSBsb3cgbGV2ZWwgYXNzZW1ibGVyIGZvciBwZXJmb3JtaW5nIGNhY2hlIGFuZCBUTEIKKyAqIGZ1bmN0aW9ucyBvbiB0aGUgYXJtOTI1LgorICoKKyAqICBDT05GSUdfQ1BVX0FSTTkyNV9DUFVfSURMRSAtPiBub2hsdAorICoKKyAqIFNvbWUgYWRkaXRpb25hbCBub3RlcyBiYXNlZCBvbiBkZWNpcGhlcmluZyB0aGUgVEkgVFJNIG9uIE9NQVAtNTkxMDoKKyAqCisgKiBOT1RFMTogVGhlIFRJOTI1VCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIGJpdCAiRC1jYWNoZSBjbGVhbiBhbmQgZmx1c2gKKyAqCSAgZW50cnkgbW9kZSIgbXVzdCBiZSAwIHRvIGZsdXNoIHRoZSBlbnRyaWVzIGluIGJvdGggc2VnbWVudHMKKyAqCSAgYXQgb25jZS4gVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZS4gU2VlIFRSTSAyLTIwIGFuZCAyLTI0IGZvcgorICoJICBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIE5PVEUyOiBEZWZhdWx0IGlzIHRoZSAiRC1jYWNoZSBjbGVhbiBhbmQgZmx1c2ggZW50cnkgbW9kZSIuIEl0IGxvb2tzCisgKgkgIGxpa2UgdGhlICJUcmFuc3BhcmVudCBtb2RlIiBtdXN0IGJlIG9uIGZvciBwYXJ0aWFsIGNhY2hlIGZsdXNoZXMKKyAqCSAgdG8gd29yayBpbiB0aGlzIG1vZGUuIFRoaXMgbW9kZSBvbmx5IHdvcmtzIHdpdGggMTYtYml0IGV4dGVybmFsCisgKgkgIG1lbW9yeS4gU2VlIFRSTSAyLTI0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIE5PVEUzOiBXcml0ZS1iYWNrIGNhY2hlIGZsdXNoaW5nIHNlZW1zIHRvIGJlIGZsYWtleSB3aXRoIGRldmljZXMgdXNpbmcKKyAqICAgICAgICBkaXJlY3QgbWVtb3J5IGFjY2Vzcywgc3VjaCBhcyBVU0IgT0hDSS4gVGhlIHdvcmthcm91bmQgaXMgdG8gdXNlCisgKiAgICAgICAgd3JpdGUtdGhyb3VnaCBjYWNoZSB3aXRoIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCAodGhpcyBpcworICogICAgICAgIHRoZSBkZWZhdWx0IGZvciBPTUFQLTE1MTApLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jaW5mby5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCisKKy8qCisgKiBUaGUgc2l6ZSBvZiBvbmUgZGF0YSBjYWNoZSBsaW5lLgorICovCisjZGVmaW5lIENBQ0hFX0RMSU5FU0laRQkxNgorCisvKgorICogVGhlIG51bWJlciBvZiBkYXRhIGNhY2hlIHNlZ21lbnRzLgorICovCisjZGVmaW5lIENBQ0hFX0RTRUdNRU5UUwkyCisKKy8qCisgKiBUaGUgbnVtYmVyIG9mIGxpbmVzIGluIGEgY2FjaGUgc2VnbWVudC4KKyAqLworI2RlZmluZSBDQUNIRV9ERU5UUklFUwkyNTYKKworLyoKKyAqIFRoaXMgaXMgdGhlIHNpemUgYXQgd2hpY2ggaXQgYmVjb21lcyBtb3JlIGVmZmljaWVudCB0bworICogY2xlYW4gdGhlIHdob2xlIGNhY2hlLCByYXRoZXIgdGhhbiB1c2luZyB0aGUgaW5kaXZpZHVhbAorICogY2FjaGUgbGluZSBtYWludGFpbmVuY2UgaW5zdHJ1Y3Rpb25zLgorICovCisjZGVmaW5lIENBQ0hFX0RMSU1JVAk4MTkyCisKKwkudGV4dAorLyoKKyAqIGNwdV9hcm05MjVfcHJvY19pbml0KCkKKyAqLworRU5UUlkoY3B1X2FybTkyNV9wcm9jX2luaXQpCisJbW92CXBjLCBscgorCisvKgorICogY3B1X2FybTkyNV9wcm9jX2ZpbigpCisgKi8KK0VOVFJZKGNwdV9hcm05MjVfcHJvY19maW4pCisJc3RtZmQJc3AhLCB7bHJ9CisJbW92CWlwLCAjUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUKKwltc3IJY3Bzcl9jLCBpcAorCWJsCWFybTkyNV9mbHVzaF9rZXJuX2NhY2hlX2FsbAorCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCWJpYwlyMCwgcjAsICMweDEwMDAJCQlAIC4uLmkuLi4uLi4uLi4uLi4KKwliaWMJcjAsIHIwLCAjMHgwMDBlCQkJQCAuLi4uLi4uLi4uLi53Y2EuCisJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBkaXNhYmxlIGNhY2hlcworCWxkbWZkCXNwISwge3BjfQorCisvKgorICogY3B1X2FybTkyNV9yZXNldChsb2MpCisgKgorICogUGVyZm9ybSBhIHNvZnQgcmVzZXQgb2YgdGhlIHN5c3RlbS4gIFB1dCB0aGUgQ1BVIGludG8gdGhlCisgKiBzYW1lIHN0YXRlIGFzIGl0IHdvdWxkIGJlIGlmIGl0IGhhZCBiZWVuIHJlc2V0LCBhbmQgYnJhbmNoCisgKiB0byB3aGF0IHdvdWxkIGJlIHRoZSByZXNldCB2ZWN0b3IuCisgKgorICogbG9jOiBsb2NhdGlvbiB0byBqdW1wIHRvIGZvciBzb2Z0IHJlc2V0CisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X2FybTkyNV9yZXNldCkKKwkvKiBTZW5kIHNvZnR3YXJlIHJlc2V0IHRvIE1QVSBhbmQgRFNQICovCisJbW92CWlwLCAjMHhmZjAwMDAwMAorCW9ycglpcCwgaXAsICMweDAwZmUwMDAwCisJb3JyCWlwLCBpcCwgIzB4MDAwMGNlMDAKKwltb3YJcjQsICMxCisJc3RyaAlyNCwgW2lwLCAjMHgxMF0KKworCW1vdglpcCwgIzAKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM3LCAwCQlAIGludmFsaWRhdGUgSSxEIGNhY2hlcworCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKwltcmMJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwliaWMJaXAsIGlwLCAjMHgwMDBmCQkJQCAuLi4uLi4uLi4uLi53Y2FtCisJYmljCWlwLCBpcCwgIzB4MTEwMAkJCUAgLi4uaS4uLnMuLi4uLi4uLgorCW1jcglwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCW1vdglwYywgcjAKKworLyoKKyAqIGNwdV9hcm05MjVfZG9faWRsZSgpCisgKgorICogQ2FsbGVkIHdpdGggSVJRcyBkaXNhYmxlZAorICovCisJLmFsaWduCTEwCitFTlRSWShjcHVfYXJtOTI1X2RvX2lkbGUpCisJbW92CXIwLCAjMAorCW1yYwlwMTUsIDAsIHIxLCBjMSwgYzAsIDAJCUAgUmVhZCBjb250cm9sIHJlZ2lzdGVyCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgRHJhaW4gd3JpdGUgYnVmZmVyCisJYmljCXIyLCByMSwgIzEgPDwgMTIKKwltY3IJcDE1LCAwLCByMiwgYzEsIGMwLCAwCQlAIERpc2FibGUgSSBjYWNoZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzAsIDQJCUAgV2FpdCBmb3IgaW50ZXJydXB0CisJbWNyCXAxNSwgMCwgcjEsIGMxLCBjMCwgMAkJQCBSZXN0b3JlIElDYWNoZSBlbmFibGUKKwltb3YJcGMsIGxyCisKKy8qCisgKglmbHVzaF91c2VyX2NhY2hlX2FsbCgpCisgKgorICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgYWxsIGNhY2hlIGVudHJpZXMgaW4gYSBwYXJ0aWN1bGFyCisgKglhZGRyZXNzIHNwYWNlLgorICovCitFTlRSWShhcm05MjVfZmx1c2hfdXNlcl9jYWNoZV9hbGwpCisJLyogRkFMTFRIUk9VR0ggKi8KKworLyoKKyAqCWZsdXNoX2tlcm5fY2FjaGVfYWxsKCkKKyAqCisgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSB0aGUgZW50aXJlIGNhY2hlLgorICovCitFTlRSWShhcm05MjVfZmx1c2hfa2Vybl9jYWNoZV9hbGwpCisJbW92CXIyLCAjVk1fRVhFQworCW1vdglpcCwgIzAKK19fZmx1c2hfd2hvbGVfY2FjaGU6CisjaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNiwgMAkJQCBpbnZhbGlkYXRlIEQgY2FjaGUKKyNlbHNlCisJLyogRmx1c2ggZW50cmllcyBpbiBib3RoIHNlZ21lbnRzIGF0IG9uY2UsIHNlZSBOT1RFMSBhYm92ZSAqLworCW1vdglyMywgIyhDQUNIRV9ERU5UUklFUyAtIDEpIDw8IDQJQCAyNTYgZW50cmllcyBpbiBzZWdtZW50CisyOgltY3IJcDE1LCAwLCByMywgYzcsIGMxNCwgMgkJQCBjbGVhbitpbnZhbGlkYXRlIEQgaW5kZXgKKwlzdWJzCXIzLCByMywgIzEgPDwgNAorCWJjcwkyYgkJCQlAIGVudHJpZXMgMjU1IHRvIDAKKyNlbmRpZgorCXRzdAlyMiwgI1ZNX0VYRUMKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWZsdXNoX3VzZXJfY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCwgZmxhZ3MpCisgKgorICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgYSByYW5nZSBvZiBjYWNoZSBlbnRyaWVzIGluIHRoZQorICoJc3BlY2lmaWVkIGFkZHJlc3MgcmFuZ2UuCisgKgorICoJLSBzdGFydAktIHN0YXJ0IGFkZHJlc3MgKGluY2x1c2l2ZSkKKyAqCS0gZW5kCS0gZW5kIGFkZHJlc3MgKGV4Y2x1c2l2ZSkKKyAqCS0gZmxhZ3MJLSB2bV9mbGFncyBkZXNjcmliaW5nIGFkZHJlc3Mgc3BhY2UKKyAqLworRU5UUlkoYXJtOTI1X2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UpCisJbW92CWlwLCAjMAorCXN1YglyMywgcjEsIHIwCQkJQCBjYWxjdWxhdGUgdG90YWwgc2l6ZQorCWNtcAlyMywgI0NBQ0hFX0RMSU1JVAorCWJndAlfX2ZsdXNoX3dob2xlX2NhY2hlCisxOgl0c3QJcjIsICNWTV9FWEVDCisjaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNiwgMQkJQCBpbnZhbGlkYXRlIEQgZW50cnkKKwltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzUsIDEJCUAgaW52YWxpZGF0ZSBJIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJCUAgaW52YWxpZGF0ZSBEIGVudHJ5CisJbWNybmUJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKyNlbHNlCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBlbnRyeQorCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjNSwgMQkJQCBpbnZhbGlkYXRlIEkgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBlbnRyeQorCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjNSwgMQkJQCBpbnZhbGlkYXRlIEkgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisjZW5kaWYKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJdHN0CXIyLCAjVk1fRVhFQworCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKgljb2hlcmVudF9rZXJuX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJRW5zdXJlIGNvaGVyZW5jeSBiZXR3ZWVuIHRoZSBJY2FjaGUgYW5kIHRoZSBEY2FjaGUgaW4gdGhlCisgKglyZWdpb24gZGVzY3JpYmVkIGJ5IHN0YXJ0LCBlbmQuICBJZiB5b3UgaGF2ZSBub24tc25vb3BpbmcKKyAqCUhhcnZhcmQgY2FjaGVzLCB5b3UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkoYXJtOTI1X2NvaGVyZW50X2tlcm5fcmFuZ2UpCisJLyogRkFMTFRIUk9VR0ggKi8KKworLyoKKyAqCWNvaGVyZW50X3VzZXJfcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglFbnN1cmUgY29oZXJlbmN5IGJldHdlZW4gdGhlIEljYWNoZSBhbmQgdGhlIERjYWNoZSBpbiB0aGUKKyAqCXJlZ2lvbiBkZXNjcmliZWQgYnkgc3RhcnQsIGVuZC4gIElmIHlvdSBoYXZlIG5vbi1zbm9vcGluZworICoJSGFydmFyZCBjYWNoZXMsIHlvdSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWShhcm05MjVfY29oZXJlbnRfdXNlcl9yYW5nZSkKKwliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDEJCUAgaW52YWxpZGF0ZSBJIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uodm9pZCAqcGFnZSkKKyAqCisgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgorICoJdGhlIEkgY2FjaGUKKyAqCisgKgktIGFkZHIJLSBwYWdlIGFsaWduZWQgYWRkcmVzcworICovCitFTlRSWShhcm05MjVfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKKwlhZGQJcjEsIHIwLCAjUEFHRV9TWgorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWRtYV9pbnZfcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglJbnZhbGlkYXRlIChkaXNjYXJkKSB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KKyAqCU1heSBub3Qgd3JpdGUgYmFjayBhbnkgZW50cmllcy4gIElmICdzdGFydCcgb3IgJ2VuZCcKKyAqCWFyZSBub3QgY2FjaGUgbGluZSBhbGlnbmVkLCB0aG9zZSBsaW5lcyBtdXN0IGJlIHdyaXR0ZW4KKyAqCWJhY2suCisgKgorICoJLSBzdGFydAktIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKgorICogKHNhbWUgYXMgdjR3YikKKyAqLworRU5UUlkoYXJtOTI1X2RtYV9pbnZfcmFuZ2UpCisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAorCXRzdAlyMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKwltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwl0c3QJcjEsICNDQUNIRV9ETElORVNJWkUgLSAxCisJbWNybmUJcDE1LCAwLCByMSwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisjZW5kaWYKKwliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNiwgMQkJQCBpbnZhbGlkYXRlIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZG1hX2NsZWFuX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJQ2xlYW4gdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCisgKgorICoJLSBzdGFydAktIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKgorICogKHNhbWUgYXMgdjR3YikKKyAqLworRU5UUlkoYXJtOTI1X2RtYV9jbGVhbl9yYW5nZSkKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorI2VuZGlmCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfZmx1c2hfcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkoYXJtOTI1X2RtYV9mbHVzaF9yYW5nZSkKKwliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorMToKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGVudHJ5CisjZWxzZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKyNlbmRpZgorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKK0VOVFJZKGFybTkyNV9jYWNoZV9mbnMpCisJLmxvbmcJYXJtOTI1X2ZsdXNoX2tlcm5fY2FjaGVfYWxsCisJLmxvbmcJYXJtOTI1X2ZsdXNoX3VzZXJfY2FjaGVfYWxsCisJLmxvbmcJYXJtOTI1X2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UKKwkubG9uZwlhcm05MjVfY29oZXJlbnRfa2Vybl9yYW5nZQorCS5sb25nCWFybTkyNV9jb2hlcmVudF91c2VyX3JhbmdlCisJLmxvbmcJYXJtOTI1X2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKwkubG9uZwlhcm05MjVfZG1hX2ludl9yYW5nZQorCS5sb25nCWFybTkyNV9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlhcm05MjVfZG1hX2ZsdXNoX3JhbmdlCisKK0VOVFJZKGNwdV9hcm05MjVfZGNhY2hlX2NsZWFuX2FyZWEpCisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwlzdWJzCXIxLCByMSwgI0NBQ0hFX0RMSU5FU0laRQorCWJoaQkxYgorI2VuZGlmCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUGFnZVRhYmxlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKgorICogY3B1X2FybTkyNV9zd2l0Y2hfbW0ocGdkKQorICoKKyAqIFNldCB0aGUgdHJhbnNsYXRpb24gYmFzZSBwb2ludGVyIHRvIGJlIGFzIGRlc2NyaWJlZCBieSBwZ2QuCisgKgorICogcGdkOiBuZXcgcGFnZSB0YWJsZXMKKyAqLworCS5hbGlnbgk1CitFTlRSWShjcHVfYXJtOTI1X3N3aXRjaF9tbSkKKwltb3YJaXAsICMwCisjaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNiwgMAkJQCBpbnZhbGlkYXRlIEQgY2FjaGUKKyNlbHNlCisJLyogRmx1c2ggZW50cmllcyBpbiBib3RoZSBzZWdtZW50cyBhdCBvbmNlLCBzZWUgTk9URTEgYWJvdmUgKi8KKwltb3YJcjMsICMoQ0FDSEVfREVOVFJJRVMgLSAxKSA8PCA0CUAgMjU2IGVudHJpZXMgaW4gc2VnbWVudAorMjoJbWNyCXAxNSwgMCwgcjMsIGM3LCBjMTQsIDIJCUAgY2xlYW4gJiBpbnZhbGlkYXRlIEQgaW5kZXgKKwlzdWJzCXIzLCByMywgIzEgPDwgNAorCWJjcwkyYgkJCQlAIGVudHJpZXMgMjU1IHRvIDAKKyNlbmRpZgorCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltY3IJcDE1LCAwLCByMCwgYzIsIGMwLCAwCQlAIGxvYWQgcGFnZSB0YWJsZSBwb2ludGVyCisJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKwltb3YJcGMsIGxyCisKKy8qCisgKiBjcHVfYXJtOTI1X3NldF9wdGUocHRlcCwgcHRlKQorICoKKyAqIFNldCBhIFBURSBhbmQgZmx1c2ggaXQgb3V0CisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X2FybTkyNV9zZXRfcHRlKQorCXN0cglyMSwgW3IwXSwgIy0yMDQ4CQlAIGxpbnV4IHZlcnNpb24KKworCWVvcglyMSwgcjEsICNMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCBMX1BURV9XUklURSB8IExfUFRFX0RJUlRZCisKKwliaWMJcjIsIHIxLCAjUFRFX1NNQUxMX0FQX01BU0sKKwliaWMJcjIsIHIyLCAjUFRFX1RZUEVfTUFTSworCW9ycglyMiwgcjIsICNQVEVfVFlQRV9TTUFMTAorCisJdHN0CXIxLCAjTF9QVEVfVVNFUgkJCUAgVXNlcj8KKwlvcnJuZQlyMiwgcjIsICNQVEVfU01BTExfQVBfVVJPX1NSVworCisJdHN0CXIxLCAjTF9QVEVfV1JJVEUgfCBMX1BURV9ESVJUWQlAIFdyaXRlIGFuZCBEaXJ0eT8KKwlvcnJlcQlyMiwgcjIsICNQVEVfU01BTExfQVBfVU5PX1NSVworCisJdHN0CXIxLCAjTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HCUAgUHJlc2VudCBhbmQgWW91bmc/CisJbW92bmUJcjIsICMwCisKKyNpZmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKwllb3IJcjMsIHIyLCAjMHgwYQkJCUAgQyAmIHNtYWxsIHBhZ2U/CisJdHN0CXIzLCAjMHgwYgorCWJpY2VxCXIyLCByMiwgIzQKKyNlbmRpZgorCXN0cglyMiwgW3IwXQkJCUAgaGFyZHdhcmUgdmVyc2lvbgorCW1vdglyMCwgcjAKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorI2VuZGlmCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKwlfX0lOSVQKKworCS50eXBlCV9fYXJtOTI1X3NldHVwLCAjZnVuY3Rpb24KK19fYXJtOTI1X3NldHVwOgorCW1vdglyMCwgIzAKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfSUNBQ0hFX1NUUkVBTUlOR19ESVNBQkxFKQorICAgICAgICBvcnIgICAgIHIwLHIwLCMxIDw8IDcKKyNlbmRpZgorCisJLyogVHJhbnNwYXJlbnQgb24sIEQtY2FjaGUgY2xlYW4gJiBmbHVzaCBtb2RlLiBTZWUgIE5PVEUyIGFib3ZlICovCisgICAgICAgIG9yciAgICAgcjAscjAsIzEgPDwgMQkJCUAgdHJhbnNwYXJlbnQgbW9kZSBvbgorICAgICAgICBtY3IgICAgIHAxNSwgMCwgcjAsIGMxNSwgYzEsIDAgICAgICAgICAgQCB3cml0ZSBUSSBjb25maWcgcmVnaXN0ZXIKKworCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM3CQlAIGludmFsaWRhdGUgSSxEIGNhY2hlcyBvbiB2NAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlciBvbiB2NAorCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcJCUAgaW52YWxpZGF0ZSBJLEQgVExCcyBvbiB2NAorCisjaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJbW92CXIwLCAjNAkJCQlAIGRpc2FibGUgd3JpdGUtYmFjayBvbiBjYWNoZXMgZXhwbGljaXRseQorCW1jcglwMTUsIDcsIHIwLCBjMTUsIGMwLCAwCisjZW5kaWYKKworCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAJCUAgZ2V0IGNvbnRyb2wgcmVnaXN0ZXIgdjQKKwlsZHIJcjUsIGFybTkyNV9jcjFfY2xlYXIKKwliaWMJcjAsIHIwLCByNQorCWxkcglyNSwgYXJtOTI1X2NyMV9zZXQKKwlvcnIJcjAsIHIwLCByNQorI2lmZGVmIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4KKwlvcnIJcjAsIHIwLCAjMHg0MDAwCQkJQCAuMS4uIC4uLi4gLi4uLiAuLi4uCisjZW5kaWYKKwltb3YJcGMsIGxyCisJLnNpemUJX19hcm05MjVfc2V0dXAsIC4gLSBfX2FybTkyNV9zZXR1cAorCisJLyoKKwkgKiAgUgorCSAqIC5SVkkgWkZSUyBCTERQIFdDQU0KKwkgKiAuMDExIDAwMDEgLi4xMSAxMTAxCisJICogCisJICovCisJLnR5cGUJYXJtOTI1X2NyMV9jbGVhciwgI29iamVjdAorCS50eXBlCWFybTkyNV9jcjFfc2V0LCAjb2JqZWN0Cithcm05MjVfY3IxX2NsZWFyOgorCS53b3JkCTB4N2YzZgorYXJtOTI1X2NyMV9zZXQ6CisJLndvcmQJMHgzMTNkCisKKwlfX0lOSVREQVRBCisKKy8qCisgKiBQdXJwb3NlIDogRnVuY3Rpb24gcG9pbnRlcnMgdXNlZCB0byBhY2Nlc3MgYWJvdmUgZnVuY3Rpb25zIC0gYWxsIGNhbGxzCisgKgkgICAgIGNvbWUgdGhyb3VnaCB0aGVzZQorICovCisJLnR5cGUJYXJtOTI1X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKK2FybTkyNV9wcm9jZXNzb3JfZnVuY3Rpb25zOgorCS53b3JkCXY0dF9lYXJseV9hYm9ydAorCS53b3JkCWNwdV9hcm05MjVfcHJvY19pbml0CisJLndvcmQJY3B1X2FybTkyNV9wcm9jX2ZpbgorCS53b3JkCWNwdV9hcm05MjVfcmVzZXQKKwkud29yZCAgIGNwdV9hcm05MjVfZG9faWRsZQorCS53b3JkCWNwdV9hcm05MjVfZGNhY2hlX2NsZWFuX2FyZWEKKwkud29yZAljcHVfYXJtOTI1X3N3aXRjaF9tbQorCS53b3JkCWNwdV9hcm05MjVfc2V0X3B0ZQorCS5zaXplCWFybTkyNV9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtOTI1X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKworCS5zZWN0aW9uICIucm9kYXRhIgorCisJLnR5cGUJY3B1X2FyY2hfbmFtZSwgI29iamVjdAorY3B1X2FyY2hfbmFtZToKKwkuYXNjaXoJImFybXY0dCIKKwkuc2l6ZQljcHVfYXJjaF9uYW1lLCAuIC0gY3B1X2FyY2hfbmFtZQorCisJLnR5cGUJY3B1X2VsZl9uYW1lLCAjb2JqZWN0CitjcHVfZWxmX25hbWU6CisJLmFzY2l6CSJ2NCIKKwkuc2l6ZQljcHVfZWxmX25hbWUsIC4gLSBjcHVfZWxmX25hbWUKKworCS50eXBlCWNwdV9hcm05MjVfbmFtZSwgI29iamVjdAorY3B1X2FybTkyNV9uYW1lOgorCS5hc2NpaQkiQVJNOTI1VCIKKyNpZm5kZWYgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRQorCS5hc2NpaQkiaSIKKyNlbmRpZgorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCisJLmFzY2lpCSJkIgorI2lmZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAorCS5hc2NpaQkiKHd0KSIKKyNlbHNlCisJLmFzY2lpCSIod2IpIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTgorCS5hc2NpaQkiUlIiCisjZW5kaWYKKyNlbmRpZgorCS5hc2NpaQkiXDAiCisJLnNpemUJY3B1X2FybTkyNV9uYW1lLCAuIC0gY3B1X2FybTkyNV9uYW1lCisKKwkuYWxpZ24KKworCS5zZWN0aW9uICIucHJvYy5pbmZvIiwgI2FsbG9jLCAjZXhlY2luc3RyCisKKwkudHlwZQlfX2FybTkyNV9wcm9jX2luZm8sI29iamVjdAorX19hcm05MjVfcHJvY19pbmZvOgorCS5sb25nCTB4NTQwMjkyNTAKKwkubG9uZwkweGZmZmZmZmYwCisJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQlQTURfQklUNCB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKKwliCV9fYXJtOTI1X3NldHVwCisJLmxvbmcJY3B1X2FyY2hfbmFtZQorCS5sb25nCWNwdV9lbGZfbmFtZQorCS5sb25nCUhXQ0FQX1NXUCB8IEhXQ0FQX0hBTEYgfCBIV0NBUF9USFVNQgorCS5sb25nCWNwdV9hcm05MjVfbmFtZQorCS5sb25nCWFybTkyNV9wcm9jZXNzb3JfZnVuY3Rpb25zCisJLmxvbmcJdjR3YmlfdGxiX2ZucworCS5sb25nCXY0d2JfdXNlcl9mbnMKKwkubG9uZwlhcm05MjVfY2FjaGVfZm5zCisJLnNpemUJX19hcm05MjVfcHJvY19pbmZvLCAuIC0gX19hcm05MjVfcHJvY19pbmZvCisKKwkudHlwZQlfX2FybTkxNV9wcm9jX2luZm8sI29iamVjdAorX19hcm05MTVfcHJvY19pbmZvOgorCS5sb25nCTB4NTQwMjkxNTAKKwkubG9uZwkweGZmZmZmZmYwCisJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQlQTURfQklUNCB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKKwliCV9fYXJtOTI1X3NldHVwCisJLmxvbmcJY3B1X2FyY2hfbmFtZQorCS5sb25nCWNwdV9lbGZfbmFtZQorCS5sb25nCUhXQ0FQX1NXUCB8IEhXQ0FQX0hBTEYgfCBIV0NBUF9USFVNQgorCS5sb25nCWNwdV9hcm05MjVfbmFtZQorCS5sb25nCWFybTkyNV9wcm9jZXNzb3JfZnVuY3Rpb25zCisJLmxvbmcJdjR3YmlfdGxiX2ZucworCS5sb25nCXY0d2JfdXNlcl9mbnMKKwkubG9uZwlhcm05MjVfY2FjaGVfZm5zCisJLnNpemUJX19hcm05MjVfcHJvY19pbmZvLCAuIC0gX19hcm05MjVfcHJvY19pbmZvCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjk1Y2M5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwpAQCAtMCwwICsxLDQ5NSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TOiBNTVUgZnVuY3Rpb25zIGZvciBBUk05MjZFSi1TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEFSTSBMaW1pdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKgorICogVGhlc2UgYXJlIHRoZSBsb3cgbGV2ZWwgYXNzZW1ibGVyIGZvciBwZXJmb3JtaW5nIGNhY2hlIGFuZCBUTEIKKyAqIGZ1bmN0aW9ucyBvbiB0aGUgYXJtOTI2LgorICoKKyAqICBDT05GSUdfQ1BVX0FSTTkyNl9DUFVfSURMRSAtPiBub2hsdAorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2luZm8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlICJwcm9jLW1hY3Jvcy5TIgorCisvKgorICogVGhpcyBpcyB0aGUgbWF4aW11bSBzaXplIG9mIGFuIGFyZWEgd2hpY2ggd2lsbCBiZSBpbnZhbGlkYXRlZAorICogdXNpbmcgdGhlIHNpbmdsZSBpbnZhbGlkYXRlIGVudHJ5IGluc3RydWN0aW9ucy4gIEFueXRoaW5nIGxhcmdlcgorICogdGhhbiB0aGlzLCBhbmQgd2UgZ28gZm9yIHRoZSB3aG9sZSBjYWNoZS4KKyAqCisgKiBUaGlzIHZhbHVlIHNob3VsZCBiZSBjaG9zZW4gc3VjaCB0aGF0IHdlIGNob29zZSB0aGUgY2hlYXBlc3QKKyAqIGFsdGVybmF0aXZlLgorICovCisjZGVmaW5lIENBQ0hFX0RMSU1JVAkxNjM4NAorCisvKgorICogdGhlIGNhY2hlIGxpbmUgc2l6ZSBvZiB0aGUgSSBhbmQgRCBjYWNoZQorICovCisjZGVmaW5lIENBQ0hFX0RMSU5FU0laRQkzMgorCisJLnRleHQKKy8qCisgKiBjcHVfYXJtOTI2X3Byb2NfaW5pdCgpCisgKi8KK0VOVFJZKGNwdV9hcm05MjZfcHJvY19pbml0KQorCW1vdglwYywgbHIKKworLyoKKyAqIGNwdV9hcm05MjZfcHJvY19maW4oKQorICovCitFTlRSWShjcHVfYXJtOTI2X3Byb2NfZmluKQorCXN0bWZkCXNwISwge2xyfQorCW1vdglpcCwgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFCisJbXNyCWNwc3JfYywgaXAKKwlibAlhcm05MjZfZmx1c2hfa2Vybl9jYWNoZV9hbGwKKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwliaWMJcjAsIHIwLCAjMHgxMDAwCQkJQCAuLi5pLi4uLi4uLi4uLi4uCisJYmljCXIwLCByMCwgIzB4MDAwZQkJCUAgLi4uLi4uLi4uLi4ud2NhLgorCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgZGlzYWJsZSBjYWNoZXMKKwlsZG1mZAlzcCEsIHtwY30KKworLyoKKyAqIGNwdV9hcm05MjZfcmVzZXQobG9jKQorICoKKyAqIFBlcmZvcm0gYSBzb2Z0IHJlc2V0IG9mIHRoZSBzeXN0ZW0uICBQdXQgdGhlIENQVSBpbnRvIHRoZQorICogc2FtZSBzdGF0ZSBhcyBpdCB3b3VsZCBiZSBpZiBpdCBoYWQgYmVlbiByZXNldCwgYW5kIGJyYW5jaAorICogdG8gd2hhdCB3b3VsZCBiZSB0aGUgcmVzZXQgdmVjdG9yLgorICoKKyAqIGxvYzogbG9jYXRpb24gdG8ganVtcCB0byBmb3Igc29mdCByZXNldAorICovCisJLmFsaWduCTUKK0VOVFJZKGNwdV9hcm05MjZfcmVzZXQpCisJbW92CWlwLCAjMAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzcsIDAJCUAgaW52YWxpZGF0ZSBJLEQgY2FjaGVzCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSAmIEQgVExCcworCW1yYwlwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCWJpYwlpcCwgaXAsICMweDAwMGYJCQlAIC4uLi4uLi4uLi4uLndjYW0KKwliaWMJaXAsIGlwLCAjMHgxMTAwCQkJQCAuLi5pLi4ucy4uLi4uLi4uCisJbWNyCXAxNSwgMCwgaXAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCisJbW92CXBjLCByMAorCisvKgorICogY3B1X2FybTkyNl9kb19pZGxlKCkKKyAqCisgKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkCisgKi8KKwkuYWxpZ24JMTAKK0VOVFJZKGNwdV9hcm05MjZfZG9faWRsZSkKKwltb3YJcjAsICMwCisJbXJjCXAxNSwgMCwgcjEsIGMxLCBjMCwgMAkJQCBSZWFkIGNvbnRyb2wgcmVnaXN0ZXIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBEcmFpbiB3cml0ZSBidWZmZXIKKwliaWMJcjIsIHIxLCAjMSA8PCAxMgorCW1jcglwMTUsIDAsIHIyLCBjMSwgYzAsIDAJCUAgRGlzYWJsZSBJIGNhY2hlCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMCwgNAkJQCBXYWl0IGZvciBpbnRlcnJ1cHQKKwltY3IJcDE1LCAwLCByMSwgYzEsIGMwLCAwCQlAIFJlc3RvcmUgSUNhY2hlIGVuYWJsZQorCW1vdglwYywgbHIKKworLyoKKyAqCWZsdXNoX3VzZXJfY2FjaGVfYWxsKCkKKyAqCisgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSBhbGwgY2FjaGUgZW50cmllcyBpbiBhIHBhcnRpY3VsYXIKKyAqCWFkZHJlc3Mgc3BhY2UuCisgKi8KK0VOVFJZKGFybTkyNl9mbHVzaF91c2VyX2NhY2hlX2FsbCkKKwkvKiBGQUxMVEhST1VHSCAqLworCisvKgorICoJZmx1c2hfa2Vybl9jYWNoZV9hbGwoKQorICoKKyAqCUNsZWFuIGFuZCBpbnZhbGlkYXRlIHRoZSBlbnRpcmUgY2FjaGUuCisgKi8KK0VOVFJZKGFybTkyNl9mbHVzaF9rZXJuX2NhY2hlX2FsbCkKKwltb3YJcjIsICNWTV9FWEVDCisJbW92CWlwLCAjMAorX19mbHVzaF93aG9sZV9jYWNoZToKKyNpZmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM2LCAwCQlAIGludmFsaWRhdGUgRCBjYWNoZQorI2Vsc2UKKzE6CW1yYwlwMTUsIDAsIHIxNSwgYzcsIGMxNCwgMyAJQCB0ZXN0LGNsZWFuLGludmFsaWRhdGUKKwlibmUJMWIKKyNlbmRpZgorCXRzdAlyMiwgI1ZNX0VYRUMKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWZsdXNoX3VzZXJfY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCwgZmxhZ3MpCisgKgorICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgYSByYW5nZSBvZiBjYWNoZSBlbnRyaWVzIGluIHRoZQorICoJc3BlY2lmaWVkIGFkZHJlc3MgcmFuZ2UuCisgKgorICoJLSBzdGFydAktIHN0YXJ0IGFkZHJlc3MgKGluY2x1c2l2ZSkKKyAqCS0gZW5kCS0gZW5kIGFkZHJlc3MgKGV4Y2x1c2l2ZSkKKyAqCS0gZmxhZ3MJLSB2bV9mbGFncyBkZXNjcmliaW5nIGFkZHJlc3Mgc3BhY2UKKyAqLworRU5UUlkoYXJtOTI2X2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UpCisJbW92CWlwLCAjMAorCXN1YglyMywgcjEsIHIwCQkJQCBjYWxjdWxhdGUgdG90YWwgc2l6ZQorCWNtcAlyMywgI0NBQ0hFX0RMSU1JVAorCWJndAlfX2ZsdXNoX3dob2xlX2NhY2hlCisxOgl0c3QJcjIsICNWTV9FWEVDCisjaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNiwgMQkJQCBpbnZhbGlkYXRlIEQgZW50cnkKKwltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzUsIDEJCUAgaW52YWxpZGF0ZSBJIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJCUAgaW52YWxpZGF0ZSBEIGVudHJ5CisJbWNybmUJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKyNlbHNlCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBlbnRyeQorCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjNSwgMQkJQCBpbnZhbGlkYXRlIEkgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBlbnRyeQorCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjNSwgMQkJQCBpbnZhbGlkYXRlIEkgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisjZW5kaWYKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJdHN0CXIyLCAjVk1fRVhFQworCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKgljb2hlcmVudF9rZXJuX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJRW5zdXJlIGNvaGVyZW5jeSBiZXR3ZWVuIHRoZSBJY2FjaGUgYW5kIHRoZSBEY2FjaGUgaW4gdGhlCisgKglyZWdpb24gZGVzY3JpYmVkIGJ5IHN0YXJ0LCBlbmQuICBJZiB5b3UgaGF2ZSBub24tc25vb3BpbmcKKyAqCUhhcnZhcmQgY2FjaGVzLCB5b3UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkoYXJtOTI2X2NvaGVyZW50X2tlcm5fcmFuZ2UpCisJLyogRkFMTFRIUk9VR0ggKi8KKworLyoKKyAqCWNvaGVyZW50X3VzZXJfcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglFbnN1cmUgY29oZXJlbmN5IGJldHdlZW4gdGhlIEljYWNoZSBhbmQgdGhlIERjYWNoZSBpbiB0aGUKKyAqCXJlZ2lvbiBkZXNjcmliZWQgYnkgc3RhcnQsIGVuZC4gIElmIHlvdSBoYXZlIG5vbi1zbm9vcGluZworICoJSGFydmFyZCBjYWNoZXMsIHlvdSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWShhcm05MjZfY29oZXJlbnRfdXNlcl9yYW5nZSkKKwliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDEJCUAgaW52YWxpZGF0ZSBJIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uodm9pZCAqcGFnZSkKKyAqCisgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgorICoJdGhlIEkgY2FjaGUKKyAqCisgKgktIGFkZHIJLSBwYWdlIGFsaWduZWQgYWRkcmVzcworICovCitFTlRSWShhcm05MjZfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKKwlhZGQJcjEsIHIwLCAjUEFHRV9TWgorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWRtYV9pbnZfcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglJbnZhbGlkYXRlIChkaXNjYXJkKSB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KKyAqCU1heSBub3Qgd3JpdGUgYmFjayBhbnkgZW50cmllcy4gIElmICdzdGFydCcgb3IgJ2VuZCcKKyAqCWFyZSBub3QgY2FjaGUgbGluZSBhbGlnbmVkLCB0aG9zZSBsaW5lcyBtdXN0IGJlIHdyaXR0ZW4KKyAqCWJhY2suCisgKgorICoJLSBzdGFydAktIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKgorICogKHNhbWUgYXMgdjR3YikKKyAqLworRU5UUlkoYXJtOTI2X2RtYV9pbnZfcmFuZ2UpCisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAorCXRzdAlyMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKwltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwl0c3QJcjEsICNDQUNIRV9ETElORVNJWkUgLSAxCisJbWNybmUJcDE1LCAwLCByMSwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisjZW5kaWYKKwliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNiwgMQkJQCBpbnZhbGlkYXRlIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZG1hX2NsZWFuX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJQ2xlYW4gdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCisgKgorICoJLSBzdGFydAktIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKgorICogKHNhbWUgYXMgdjR3YikKKyAqLworRU5UUlkoYXJtOTI2X2RtYV9jbGVhbl9yYW5nZSkKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorI2VuZGlmCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfZmx1c2hfcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkoYXJtOTI2X2RtYV9mbHVzaF9yYW5nZSkKKwliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorMToKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGVudHJ5CisjZWxzZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKyNlbmRpZgorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKK0VOVFJZKGFybTkyNl9jYWNoZV9mbnMpCisJLmxvbmcJYXJtOTI2X2ZsdXNoX2tlcm5fY2FjaGVfYWxsCisJLmxvbmcJYXJtOTI2X2ZsdXNoX3VzZXJfY2FjaGVfYWxsCisJLmxvbmcJYXJtOTI2X2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UKKwkubG9uZwlhcm05MjZfY29oZXJlbnRfa2Vybl9yYW5nZQorCS5sb25nCWFybTkyNl9jb2hlcmVudF91c2VyX3JhbmdlCisJLmxvbmcJYXJtOTI2X2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKwkubG9uZwlhcm05MjZfZG1hX2ludl9yYW5nZQorCS5sb25nCWFybTkyNl9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlhcm05MjZfZG1hX2ZsdXNoX3JhbmdlCisKK0VOVFJZKGNwdV9hcm05MjZfZGNhY2hlX2NsZWFuX2FyZWEpCisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwlzdWJzCXIxLCByMSwgI0NBQ0hFX0RMSU5FU0laRQorCWJoaQkxYgorI2VuZGlmCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUGFnZVRhYmxlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKgorICogY3B1X2FybTkyNl9zd2l0Y2hfbW0ocGdkKQorICoKKyAqIFNldCB0aGUgdHJhbnNsYXRpb24gYmFzZSBwb2ludGVyIHRvIGJlIGFzIGRlc2NyaWJlZCBieSBwZ2QuCisgKgorICogcGdkOiBuZXcgcGFnZSB0YWJsZXMKKyAqLworCS5hbGlnbgk1CitFTlRSWShjcHVfYXJtOTI2X3N3aXRjaF9tbSkKKwltb3YJaXAsICMwCisjaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNiwgMAkJQCBpbnZhbGlkYXRlIEQgY2FjaGUKKyNlbHNlCitAICYmICdDbGVhbiAmIEludmFsaWRhdGUgd2hvbGUgRENhY2hlJworMToJbXJjCXAxNSwgMCwgcjE1LCBjNywgYzE0LCAzIAlAIHRlc3QsY2xlYW4saW52YWxpZGF0ZQorCWJuZQkxYgorI2VuZGlmCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAsIDAJCUAgbG9hZCBwYWdlIHRhYmxlIHBvaW50ZXIKKwltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSAmIEQgVExCcworCW1vdglwYywgbHIKKworLyoKKyAqIGNwdV9hcm05MjZfc2V0X3B0ZShwdGVwLCBwdGUpCisgKgorICogU2V0IGEgUFRFIGFuZCBmbHVzaCBpdCBvdXQKKyAqLworCS5hbGlnbgk1CitFTlRSWShjcHVfYXJtOTI2X3NldF9wdGUpCisJc3RyCXIxLCBbcjBdLCAjLTIwNDgJCUAgbGludXggdmVyc2lvbgorCisJZW9yCXIxLCByMSwgI0xfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8IExfUFRFX1dSSVRFIHwgTF9QVEVfRElSVFkKKworCWJpYwlyMiwgcjEsICNQVEVfU01BTExfQVBfTUFTSworCWJpYwlyMiwgcjIsICNQVEVfVFlQRV9NQVNLCisJb3JyCXIyLCByMiwgI1BURV9UWVBFX1NNQUxMCisKKwl0c3QJcjEsICNMX1BURV9VU0VSCQkJQCBVc2VyPworCW9ycm5lCXIyLCByMiwgI1BURV9TTUFMTF9BUF9VUk9fU1JXCisKKwl0c3QJcjEsICNMX1BURV9XUklURSB8IExfUFRFX0RJUlRZCUAgV3JpdGUgYW5kIERpcnR5PworCW9ycmVxCXIyLCByMiwgI1BURV9TTUFMTF9BUF9VTk9fU1JXCisKKwl0c3QJcjEsICNMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcJQCBQcmVzZW50IGFuZCBZb3VuZz8KKwltb3ZuZQlyMiwgIzAKKworI2lmZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAorCWVvcglyMywgcjIsICMweDBhCQkJQCBDICYgc21hbGwgcGFnZT8KKwl0c3QJcjMsICMweDBiCisJYmljZXEJcjIsIHIyLCAjNAorI2VuZGlmCisJc3RyCXIyLCBbcjBdCQkJQCBoYXJkd2FyZSB2ZXJzaW9uCisJbW92CXIwLCByMAorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisjZW5kaWYKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworCV9fSU5JVAorCisJLnR5cGUJX19hcm05MjZfc2V0dXAsICNmdW5jdGlvbgorX19hcm05MjZfc2V0dXA6CisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzcJCUAgaW52YWxpZGF0ZSBJLEQgY2FjaGVzIG9uIHY0CisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyIG9uIHY0CisJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNwkJQCBpbnZhbGlkYXRlIEksRCBUTEJzIG9uIHY0CisKKworI2lmZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAorCW1vdglyMCwgIzQJCQkJQCBkaXNhYmxlIHdyaXRlLWJhY2sgb24gY2FjaGVzIGV4cGxpY2l0bHkKKwltY3IJcDE1LCA3LCByMCwgYzE1LCBjMCwgMAorI2VuZGlmIAorCisJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMAkJQCBnZXQgY29udHJvbCByZWdpc3RlciB2NAorCWxkcglyNSwgYXJtOTI2X2NyMV9jbGVhcgorCWJpYwlyMCwgcjAsIHI1CisJbGRyCXI1LCBhcm05MjZfY3IxX3NldAorCW9ycglyMCwgcjAsIHI1CisjaWZkZWYgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTgorCW9ycglyMCwgcjAsICMweDQwMDAJCQlAIC4xLi4gLi4uLiAuLi4uIC4uLi4KKyNlbmRpZgorCW1vdglwYywgbHIKKwkuc2l6ZQlfX2FybTkyNl9zZXR1cCwgLiAtIF9fYXJtOTI2X3NldHVwCisKKwkvKgorCSAqICBSCisJICogLlJWSSBaRlJTIEJMRFAgV0NBTQorCSAqIC4wMTEgMDAwMSAuLjExIDAxMDEKKwkgKiAKKwkgKi8KKwkudHlwZQlhcm05MjZfY3IxX2NsZWFyLCAjb2JqZWN0CisJLnR5cGUJYXJtOTI2X2NyMV9zZXQsICNvYmplY3QKK2FybTkyNl9jcjFfY2xlYXI6CisJLndvcmQJMHg3ZjNmCithcm05MjZfY3IxX3NldDoKKwkud29yZAkweDMxMzUKKworCV9fSU5JVERBVEEKKworLyoKKyAqIFB1cnBvc2UgOiBGdW5jdGlvbiBwb2ludGVycyB1c2VkIHRvIGFjY2VzcyBhYm92ZSBmdW5jdGlvbnMgLSBhbGwgY2FsbHMKKyAqCSAgICAgY29tZSB0aHJvdWdoIHRoZXNlCisgKi8KKwkudHlwZQlhcm05MjZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAorYXJtOTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CisJLndvcmQJdjV0al9lYXJseV9hYm9ydAorCS53b3JkCWNwdV9hcm05MjZfcHJvY19pbml0CisJLndvcmQJY3B1X2FybTkyNl9wcm9jX2ZpbgorCS53b3JkCWNwdV9hcm05MjZfcmVzZXQKKwkud29yZAljcHVfYXJtOTI2X2RvX2lkbGUKKwkud29yZAljcHVfYXJtOTI2X2RjYWNoZV9jbGVhbl9hcmVhCisJLndvcmQJY3B1X2FybTkyNl9zd2l0Y2hfbW0KKwkud29yZAljcHVfYXJtOTI2X3NldF9wdGUKKwkuc2l6ZQlhcm05MjZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTkyNl9wcm9jZXNzb3JfZnVuY3Rpb25zCisKKwkuc2VjdGlvbiAiLnJvZGF0YSIKKworCS50eXBlCWNwdV9hcmNoX25hbWUsICNvYmplY3QKK2NwdV9hcmNoX25hbWU6CisJLmFzY2l6CSJhcm12NXRlaiIKKwkuc2l6ZQljcHVfYXJjaF9uYW1lLCAuIC0gY3B1X2FyY2hfbmFtZQorCisJLnR5cGUJY3B1X2VsZl9uYW1lLCAjb2JqZWN0CitjcHVfZWxmX25hbWU6CisJLmFzY2l6CSJ2NSIKKwkuc2l6ZQljcHVfZWxmX25hbWUsIC4gLSBjcHVfZWxmX25hbWUKKworCS50eXBlCWNwdV9hcm05MjZfbmFtZSwgI29iamVjdAorY3B1X2FybTkyNl9uYW1lOgorCS5hc2NpaQkiQVJNOTI2RUotUyIKKyNpZm5kZWYgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRQorCS5hc2NpaQkiaSIKKyNlbmRpZgorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCisJLmFzY2lpCSJkIgorI2lmZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAorCS5hc2NpaQkiKHd0KSIKKyNlbHNlCisJLmFzY2lpCSIod2IpIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTgorCS5hc2NpaQkiUlIiCisjZW5kaWYKKyNlbmRpZgorCS5hc2NpaQkiXDAiCisJLnNpemUJY3B1X2FybTkyNl9uYW1lLCAuIC0gY3B1X2FybTkyNl9uYW1lCisKKwkuYWxpZ24KKworCS5zZWN0aW9uICIucHJvYy5pbmZvIiwgI2FsbG9jLCAjZXhlY2luc3RyCisKKwkudHlwZQlfX2FybTkyNl9wcm9jX2luZm8sI29iamVjdAorX19hcm05MjZfcHJvY19pbmZvOgorCS5sb25nCTB4NDEwNjkyNjAJCQlAIEFSTTkyNkVKLVMgKHY1VEVKKQorCS5sb25nCTB4ZmYwZmZmZjAKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCisJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKKwkJUE1EX0JJVDQgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECisJYglfX2FybTkyNl9zZXR1cAorCS5sb25nCWNwdV9hcmNoX25hbWUKKwkubG9uZwljcHVfZWxmX25hbWUKKwkubG9uZwlIV0NBUF9TV1B8SFdDQVBfSEFMRnxIV0NBUF9USFVNQnxIV0NBUF9GQVNUX01VTFR8SFdDQVBfRURTUHxIV0NBUF9KQVZBCisJLmxvbmcJY3B1X2FybTkyNl9uYW1lCisJLmxvbmcJYXJtOTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKwkubG9uZwl2NHdiaV90bGJfZm5zCisJLmxvbmcJdjR3Yl91c2VyX2ZucworCS5sb25nCWFybTkyNl9jYWNoZV9mbnMKKwkuc2l6ZQlfX2FybTkyNl9wcm9jX2luZm8sIC4gLSBfX2FybTkyNl9wcm9jX2luZm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtbWFjcm9zLlMgYi9hcmNoL2FybS9tbS9wcm9jLW1hY3Jvcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMzdmZTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9wcm9jLW1hY3Jvcy5TCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBXZSBuZWVkIGNvbnN0YW50cy5oIGZvcjoKKyAqICBWTUFfVk1fTU0KKyAqICBWTUFfVk1fRkxBR1MKKyAqICBWTV9FWEVDCisgKi8KKyNpbmNsdWRlIDxhc20vY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisKKy8qCisgKiB2bWFfdm1fbW0gLSBnZXQgbW0gcG9pbnRlciBmcm9tIHZtYSBwb2ludGVyICh2bWEtPnZtX21tKQorICovCisJLm1hY3JvCXZtYV92bV9tbSwgcmQsIHJuCisJbGRyCVxyZCwgW1xybiwgI1ZNQV9WTV9NTV0KKwkuZW5kbQorCisvKgorICogdm1hX3ZtX2ZsYWdzIC0gZ2V0IHZtYS0+dm1fZmxhZ3MKKyAqLworCS5tYWNybwl2bWFfdm1fZmxhZ3MsIHJkLCBybgorCWxkcglccmQsIFtccm4sICNWTUFfVk1fRkxBR1NdCisJLmVuZG0KKworCS5tYWNybwl0c2tfbW0sIHJkLCBybgorCWxkcglccmQsIFtccm4sICNUSV9UQVNLXQorCWxkcglccmQsIFtccmQsICNUU0tfQUNUSVZFX01NXQorCS5lbmRtCisKKy8qCisgKiBhY3RfbW0gLSBnZXQgY3VycmVudC0+YWN0aXZlX21tCisgKi8KKwkubWFjcm8JYWN0X21tLCByZAorCWJpYwlccmQsIHNwLCAjODEyOAorCWJpYwlccmQsIFxyZCwgIzYzCisJbGRyCVxyZCwgW1xyZCwgI1RJX1RBU0tdCisJbGRyCVxyZCwgW1xyZCwgI1RTS19BQ1RJVkVfTU1dCisJLmVuZG0KKworLyoKKyAqIG1taWQgLSBnZXQgY29udGV4dCBpZCBmcm9tIG1tIHBvaW50ZXIgKG1tLT5jb250ZXh0LmlkKQorICovCisJLm1hY3JvCW1taWQsIHJkLCBybgorCWxkcglccmQsIFtccm4sICNNTV9DT05URVhUX0lEXQorCS5lbmRtCisKKy8qCisgKiBtYXNrX2FzaWQgLSBtYXNrIHRoZSBBU0lEIGZyb20gdGhlIGNvbnRleHQgSUQKKyAqLworCS5tYWNybwlhc2lkLCByZCwgcm4KKwlhbmQJXHJkLCBccm4sICMyNTUKKwkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MGNhZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMKQEAgLTAsMCArMSwyNzIgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIE1NVSBmdW5jdGlvbnMgZm9yIFNBMTEwCisgKgorICogIFRoZXNlIGFyZSB0aGUgbG93IGxldmVsIGFzc2VtYmxlciBmb3IgcGVyZm9ybWluZyBjYWNoZSBhbmQgVExCCisgKiAgZnVuY3Rpb25zIG9uIHRoZSBTdHJvbmdBUk0tMTEwLgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2NvbnN0YW50cy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jaW5mby5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCisvKgorICogdGhlIGNhY2hlIGxpbmUgc2l6ZSBvZiB0aGUgSSBhbmQgRCBjYWNoZQorICovCisjZGVmaW5lIERDQUNIRUxJTkVTSVpFCTMyCisjZGVmaW5lIEZMVVNIX09GRlNFVAkzMjc2OAorCisJLm1hY3JvIGZsdXNoXzExMF9kY2FjaGUJcmQsIHJhLCByZQorCWxkcglccmQsID1mbHVzaF9iYXNlCisJbGRyCVxyYSwgW1xyZF0KKwllb3IJXHJhLCBccmEsICNGTFVTSF9PRkZTRVQKKwlzdHIJXHJhLCBbXHJkXQorCWFkZAlccmUsIFxyYSwgIzE2Mzg0CQlAIG9ubHkgbmVjZXNzYXJ5IGZvciAxNmsKKzEwMDE6CWxkcglccmQsIFtccmFdLCAjRENBQ0hFTElORVNJWkUKKwl0ZXEJXHJlLCBccmEKKwlibmUJMTAwMWIKKwkuZW5kbQorCisJLmRhdGEKK2ZsdXNoX2Jhc2U6CisJLmxvbmcJRkxVU0hfQkFTRQorCS50ZXh0CisKKy8qCisgKiBjcHVfc2ExMTBfcHJvY19pbml0KCkKKyAqLworRU5UUlkoY3B1X3NhMTEwX3Byb2NfaW5pdCkKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGMxNSwgYzEsIDIJCUAgRW5hYmxlIGNsb2NrIHN3aXRjaGluZworCW1vdglwYywgbHIKKworLyoKKyAqIGNwdV9zYTExMF9wcm9jX2ZpbigpCisgKi8KK0VOVFJZKGNwdV9zYTExMF9wcm9jX2ZpbikKKwlzdG1mZAlzcCEsIHtscn0KKwltb3YJaXAsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQorCW1zcgljcHNyX2MsIGlwCisJYmwJdjR3Yl9mbHVzaF9rZXJuX2NhY2hlX2FsbAlAIGNsZWFuIGNhY2hlcworMToJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjMTUsIGMyLCAyCQlAIERpc2FibGUgY2xvY2sgc3dpdGNoaW5nCisJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCisJYmljCXIwLCByMCwgIzB4MTAwMAkJCUAgLi4uaS4uLi4uLi4uLi4uLgorCWJpYwlyMCwgcjAsICMweDAwMGUJCQlAIC4uLi4uLi4uLi4uLndjYS4KKwltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGRpc2FibGUgY2FjaGVzCisJbGRtZmQJc3AhLCB7cGN9CisKKy8qCisgKiBjcHVfc2ExMTBfcmVzZXQobG9jKQorICoKKyAqIFBlcmZvcm0gYSBzb2Z0IHJlc2V0IG9mIHRoZSBzeXN0ZW0uICBQdXQgdGhlIENQVSBpbnRvIHRoZQorICogc2FtZSBzdGF0ZSBhcyBpdCB3b3VsZCBiZSBpZiBpdCBoYWQgYmVlbiByZXNldCwgYW5kIGJyYW5jaAorICogdG8gd2hhdCB3b3VsZCBiZSB0aGUgcmVzZXQgdmVjdG9yLgorICoKKyAqIGxvYzogbG9jYXRpb24gdG8ganVtcCB0byBmb3Igc29mdCByZXNldAorICovCisJLmFsaWduCTUKK0VOVFJZKGNwdV9zYTExMF9yZXNldCkKKwltb3YJaXAsICMwCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIEksRCBjYWNoZXMKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisJbXJjCXAxNSwgMCwgaXAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCisJYmljCWlwLCBpcCwgIzB4MDAwZgkJCUAgLi4uLi4uLi4uLi4ud2NhbQorCWJpYwlpcCwgaXAsICMweDExMDAJCQlAIC4uLmkuLi5zLi4uLi4uLi4KKwltY3IJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwltb3YJcGMsIHIwCisKKy8qCisgKiBjcHVfc2ExMTBfZG9faWRsZSh0eXBlKQorICoKKyAqIENhdXNlIHRoZSBwcm9jZXNzb3IgdG8gaWRsZQorICoKKyAqIHR5cGU6IGNhbGwgdHlwZToKKyAqICAgMCA9IHNsb3cgaWRsZQorICogICAxID0gZmFzdCBpZGxlCisgKiAgIDIgPSBzd2l0Y2ggdG8gc2xvdyBwcm9jZXNzb3IgY2xvY2sKKyAqICAgMyA9IHN3aXRjaCB0byBmYXN0IHByb2Nlc3NvciBjbG9jaworICovCisJLmFsaWduCTUKKworRU5UUlkoY3B1X3NhMTEwX2RvX2lkbGUpCisJbWNyCXAxNSwgMCwgaXAsIGMxNSwgYzIsIDIJCUAgZGlzYWJsZSBjbG9jayBzd2l0Y2hpbmcKKwlsZHIJcjEsID1VTkNBQ0hFQUJMRV9BRERSCQlAIGxvYWQgZnJvbSB1bmNhY2hlYWJsZSBsb2MKKwlsZHIJcjEsIFtyMSwgIzBdCQkJQCBmb3JjZSBzd2l0Y2ggdG8gTUNMSworCW1vdglyMCwgcjAJCQkJQCBzYWZldHkKKwltb3YJcjAsIHIwCQkJCUAgc2FmZXR5CisJbW92CXIwLCByMAkJCQlAIHNhZmV0eQorCW1jcglwMTUsIDAsIHIwLCBjMTUsIGM4LCAyCQlAIFdhaXQgZm9yIGludGVycnVwdCwgY2FjaGUgYWxpZ25lZAorCW1vdglyMCwgcjAJCQkJQCBzYWZldHkKKwltb3YJcjAsIHIwCQkJCUAgc2FmZXR5CisJbW92CXIwLCByMAkJCQlAIHNhZmV0eQorCW1jcglwMTUsIDAsIHIwLCBjMTUsIGMxLCAyCQlAIGVuYWJsZSBjbG9jayBzd2l0Y2hpbmcKKwltb3YJcGMsIGxyCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDQUNIRSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKgorICogY3B1X3NhMTEwX2RjYWNoZV9jbGVhbl9hcmVhKGFkZHIsc3opCisgKgorICogQ2xlYW4gdGhlIHNwZWNpZmllZCBlbnRyeSBvZiBhbnkgY2FjaGVzIHN1Y2ggdGhhdCB0aGUgTU1VCisgKiB0cmFuc2xhdGlvbiBmZXRjaGVzIHdpbGwgb2J0YWluIGNvcnJlY3QgZGF0YS4KKyAqCisgKiBhZGRyOiBjYWNoZS11bmFsaWduZWQgdmlydHVhbCBhZGRyZXNzCisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X3NhMTEwX2RjYWNoZV9jbGVhbl9hcmVhKQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCWFkZAlyMCwgcjAsICNEQ0FDSEVMSU5FU0laRQorCXN1YnMJcjEsIHIxLCAjRENBQ0hFTElORVNJWkUKKwliaGkJMWIKKwltb3YJcGMsIGxyCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUGFnZVRhYmxlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKgorICogY3B1X3NhMTEwX3N3aXRjaF9tbShwZ2QpCisgKgorICogU2V0IHRoZSB0cmFuc2xhdGlvbiBiYXNlIHBvaW50ZXIgdG8gYmUgYXMgZGVzY3JpYmVkIGJ5IHBnZC4KKyAqCisgKiBwZ2Q6IG5ldyBwYWdlIHRhYmxlcworICovCisJLmFsaWduCTUKK0VOVFJZKGNwdV9zYTExMF9zd2l0Y2hfbW0pCisJZmx1c2hfMTEwX2RjYWNoZQlyMywgaXAsIHIxCisJbW92CXIxLCAjMAorCW1jcglwMTUsIDAsIHIxLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisJbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltY3IJcDE1LCAwLCByMCwgYzIsIGMwLCAwCQlAIGxvYWQgcGFnZSB0YWJsZSBwb2ludGVyCisJbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKwltb3YJcGMsIGxyCisKKy8qCisgKiBjcHVfc2ExMTBfc2V0X3B0ZShwdGVwLCBwdGUpCisgKgorICogU2V0IGEgUFRFIGFuZCBmbHVzaCBpdCBvdXQKKyAqLworCS5hbGlnbgk1CitFTlRSWShjcHVfc2ExMTBfc2V0X3B0ZSkKKwlzdHIJcjEsIFtyMF0sICMtMjA0OAkJQCBsaW51eCB2ZXJzaW9uCisKKwllb3IJcjEsIHIxLCAjTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfV1JJVEUgfCBMX1BURV9ESVJUWQorCisJYmljCXIyLCByMSwgI1BURV9TTUFMTF9BUF9NQVNLCisJYmljCXIyLCByMiwgI1BURV9UWVBFX01BU0sKKwlvcnIJcjIsIHIyLCAjUFRFX1RZUEVfU01BTEwKKworCXRzdAlyMSwgI0xfUFRFX1VTRVIJCQlAIFVzZXI/CisJb3JybmUJcjIsIHIyLCAjUFRFX1NNQUxMX0FQX1VST19TUlcKKworCXRzdAlyMSwgI0xfUFRFX1dSSVRFIHwgTF9QVEVfRElSVFkJQCBXcml0ZSBhbmQgRGlydHk/CisJb3JyZXEJcjIsIHIyLCAjUFRFX1NNQUxMX0FQX1VOT19TUlcKKworCXRzdAlyMSwgI0xfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORwlAIFByZXNlbnQgYW5kIFlvdW5nPworCW1vdm5lCXIyLCAjMAorCisJc3RyCXIyLCBbcjBdCQkJQCBoYXJkd2FyZSB2ZXJzaW9uCisJbW92CXIwLCByMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworCV9fSU5JVAorCisJLnR5cGUJX19zYTExMF9zZXR1cCwgI2Z1bmN0aW9uCitfX3NhMTEwX3NldHVwOgorCW1vdglyMTAsICMwCisJbWNyCXAxNSwgMCwgcjEwLCBjNywgYzcJCUAgaW52YWxpZGF0ZSBJLEQgY2FjaGVzIG9uIHY0CisJbWNyCXAxNSwgMCwgcjEwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlciBvbiB2NAorCW1jcglwMTUsIDAsIHIxMCwgYzgsIGM3CQlAIGludmFsaWRhdGUgSSxEIFRMQnMgb24gdjQKKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwCQlAIGdldCBjb250cm9sIHJlZ2lzdGVyIHY0CisJbGRyCXI1LCBzYTExMF9jcjFfY2xlYXIKKwliaWMJcjAsIHIwLCByNQorCWxkcglyNSwgc2ExMTBfY3IxX3NldAorCW9ycglyMCwgcjAsIHI1CisJbW92CXBjLCBscgorCS5zaXplCV9fc2ExMTBfc2V0dXAsIC4gLSBfX3NhMTEwX3NldHVwCisKKwkvKgorCSAqICBSCisJICogLlJWSSBaRlJTIEJMRFAgV0NBTQorCSAqIC4uMDEgMDAwMSAuLjExIDExMDEKKwkgKiAKKwkgKi8KKwkudHlwZQlzYTExMF9jcjFfY2xlYXIsICNvYmplY3QKKwkudHlwZQlzYTExMF9jcjFfc2V0LCAjb2JqZWN0CitzYTExMF9jcjFfY2xlYXI6CisJLndvcmQJMHgzZjNmCitzYTExMF9jcjFfc2V0OgorCS53b3JkCTB4MTEzZAorCisJX19JTklUREFUQQorCisvKgorICogUHVycG9zZSA6IEZ1bmN0aW9uIHBvaW50ZXJzIHVzZWQgdG8gYWNjZXNzIGFib3ZlIGZ1bmN0aW9ucyAtIGFsbCBjYWxscworICoJICAgICBjb21lIHRocm91Z2ggdGhlc2UKKyAqLworCisJLnR5cGUJc2ExMTBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAorRU5UUlkoc2ExMTBfcHJvY2Vzc29yX2Z1bmN0aW9ucykKKwkud29yZAl2NF9lYXJseV9hYm9ydAorCS53b3JkCWNwdV9zYTExMF9wcm9jX2luaXQKKwkud29yZAljcHVfc2ExMTBfcHJvY19maW4KKwkud29yZAljcHVfc2ExMTBfcmVzZXQKKwkud29yZAljcHVfc2ExMTBfZG9faWRsZQorCS53b3JkCWNwdV9zYTExMF9kY2FjaGVfY2xlYW5fYXJlYQorCS53b3JkCWNwdV9zYTExMF9zd2l0Y2hfbW0KKwkud29yZAljcHVfc2ExMTBfc2V0X3B0ZQorCS5zaXplCXNhMTEwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBzYTExMF9wcm9jZXNzb3JfZnVuY3Rpb25zCisKKwkuc2VjdGlvbiAiLnJvZGF0YSIKKworCS50eXBlCWNwdV9hcmNoX25hbWUsICNvYmplY3QKK2NwdV9hcmNoX25hbWU6CisJLmFzY2l6CSJhcm12NCIKKwkuc2l6ZQljcHVfYXJjaF9uYW1lLCAuIC0gY3B1X2FyY2hfbmFtZQorCisJLnR5cGUJY3B1X2VsZl9uYW1lLCAjb2JqZWN0CitjcHVfZWxmX25hbWU6CisJLmFzY2l6CSJ2NCIKKwkuc2l6ZQljcHVfZWxmX25hbWUsIC4gLSBjcHVfZWxmX25hbWUKKworCS50eXBlCWNwdV9zYTExMF9uYW1lLCAjb2JqZWN0CitjcHVfc2ExMTBfbmFtZToKKwkuYXNjaXoJIlN0cm9uZ0FSTS0xMTAiCisJLnNpemUJY3B1X3NhMTEwX25hbWUsIC4gLSBjcHVfc2ExMTBfbmFtZQorCisJLmFsaWduCisKKwkuc2VjdGlvbiAiLnByb2MuaW5mbyIsICNhbGxvYywgI2V4ZWNpbnN0cgorCisJLnR5cGUJX19zYTExMF9wcm9jX2luZm8sI29iamVjdAorX19zYTExMF9wcm9jX2luZm86CisJLmxvbmcJMHg0NDAxYTEwMAorCS5sb25nCTB4ZmZmZmZmZjAKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCisJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKKwliCV9fc2ExMTBfc2V0dXAKKwkubG9uZwljcHVfYXJjaF9uYW1lCisJLmxvbmcJY3B1X2VsZl9uYW1lCisJLmxvbmcJSFdDQVBfU1dQIHwgSFdDQVBfSEFMRiB8IEhXQ0FQXzI2QklUIHwgSFdDQVBfRkFTVF9NVUxUCisJLmxvbmcJY3B1X3NhMTEwX25hbWUKKwkubG9uZwlzYTExMF9wcm9jZXNzb3JfZnVuY3Rpb25zCisJLmxvbmcJdjR3Yl90bGJfZm5zCisJLmxvbmcJdjR3Yl91c2VyX2ZucworCS5sb25nCXY0d2JfY2FjaGVfZm5zCisJLnNpemUJX19zYTExMF9wcm9jX2luZm8sIC4gLSBfX3NhMTEwX3Byb2NfaW5mbwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0N2NkNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKQEAgLTAsMCArMSwzMjMgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBNTVUgZnVuY3Rpb25zIGZvciBTQTExMAorICoKKyAqICBUaGVzZSBhcmUgdGhlIGxvdyBsZXZlbCBhc3NlbWJsZXIgZm9yIHBlcmZvcm1pbmcgY2FjaGUgYW5kIFRMQgorICogIGZ1bmN0aW9ucyBvbiB0aGUgU3Ryb25nQVJNLTExMDAgYW5kIFN0cm9uZ0FSTS0xMTEwLgorICoKKyAqICBOb3RlIHRoYXQgU0ExMTAwIGFuZCBTQTExMTAgc2hhcmUgZXZlcnl0aGluZyBidXQgdGhlaXIgbmFtZSBhbmQgQ1BVIElELgorICoKKyAqICAxMi1qdW4tMjAwMCwgRXJpayBNb3V3IChKLkEuSy5Nb3V3QGl0cy50dWRlbGZ0Lm5sKToKKyAqICAgIEZsdXNoIHRoZSByZWFkIGJ1ZmZlciBhdCBjb250ZXh0IHN3aXRjaGVzCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8YXNtL3Byb2NpbmZvLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKworLyoKKyAqIHRoZSBjYWNoZSBsaW5lIHNpemUgb2YgdGhlIEkgYW5kIEQgY2FjaGUKKyAqLworI2RlZmluZSBEQ0FDSEVMSU5FU0laRQkzMgorI2RlZmluZSBGTFVTSF9PRkZTRVQJMzI3NjgKKworCS5tYWNybyBmbHVzaF8xMTAwX2RjYWNoZSByZCwgcmEsIHJlCisJbGRyCVxyZCwgPWZsdXNoX2Jhc2UKKwlsZHIJXHJhLCBbXHJkXQorCWVvcglccmEsIFxyYSwgI0ZMVVNIX09GRlNFVAorCXN0cglccmEsIFtccmRdCisJYWRkCVxyZSwgXHJhLCAjODE5MgkJCUAgb25seSBuZWNlc3NhcnkgZm9yIDhrCisxMDAxOglsZHIJXHJkLCBbXHJhXSwgI0RDQUNIRUxJTkVTSVpFCisJdGVxCVxyZSwgXHJhCisJYm5lCTEwMDFiCisjaWZkZWYgRkxVU0hfQkFTRV9NSU5JQ0FDSEUKKwlhZGQJXHJhLCBccmEsICNGTFVTSF9CQVNFX01JTklDQUNIRSAtIEZMVVNIX0JBU0UKKwlhZGQJXHJlLCBccmEsICM1MTIJCQlAIG9ubHkgNTEyIGJ5dGVzCisxMDAyOglsZHIJXHJkLCBbXHJhXSwgI0RDQUNIRUxJTkVTSVpFCisJdGVxCVxyZSwgXHJhCisJYm5lCTEwMDJiCisjZW5kaWYKKwkuZW5kbQorCisJLmRhdGEKK2ZsdXNoX2Jhc2U6CisJLmxvbmcJRkxVU0hfQkFTRQorCS50ZXh0CisKKwlfX0lOSVQKKworLyoKKyAqIGNwdV9zYTExMDBfcHJvY19pbml0KCkKKyAqLworRU5UUlkoY3B1X3NhMTEwMF9wcm9jX2luaXQpCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjMTUsIGMxLCAyCQlAIEVuYWJsZSBjbG9jayBzd2l0Y2hpbmcKKwltY3IJcDE1LCAwLCByMCwgYzksIGMwLCA1CQlAIEFsbG93IHJlYWQtYnVmZmVyIG9wZXJhdGlvbnMgZnJvbSB1c2VybGFuZAorCW1vdglwYywgbHIKKworCS5wcmV2aW91cworCisvKgorICogY3B1X3NhMTEwMF9wcm9jX2ZpbigpCisgKgorICogUHJlcGFyZSB0aGUgQ1BVIGZvciByZXNldDoKKyAqICAtIERpc2FibGUgaW50ZXJydXB0cworICogIC0gQ2xlYW4gYW5kIHR1cm4gb2ZmIGNhY2hlcy4KKyAqLworRU5UUlkoY3B1X3NhMTEwMF9wcm9jX2ZpbikKKwlzdG1mZAlzcCEsIHtscn0KKwltb3YJaXAsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQorCW1zcgljcHNyX2MsIGlwCisJZmx1c2hfMTEwMF9kY2FjaGUgcjAsIHIxLCByMgkJQCBjbGVhbiBjYWNoZXMKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGMxNSwgYzIsIDIJCUAgRGlzYWJsZSBjbG9jayBzd2l0Y2hpbmcKKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwliaWMJcjAsIHIwLCAjMHgxMDAwCQkJQCAuLi5pLi4uLi4uLi4uLi4uCisJYmljCXIwLCByMCwgIzB4MDAwZQkJCUAgLi4uLi4uLi4uLi4ud2NhLgorCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgZGlzYWJsZSBjYWNoZXMKKwlsZG1mZAlzcCEsIHtwY30KKworLyoKKyAqIGNwdV9zYTExMDBfcmVzZXQobG9jKQorICoKKyAqIFBlcmZvcm0gYSBzb2Z0IHJlc2V0IG9mIHRoZSBzeXN0ZW0uICBQdXQgdGhlIENQVSBpbnRvIHRoZQorICogc2FtZSBzdGF0ZSBhcyBpdCB3b3VsZCBiZSBpZiBpdCBoYWQgYmVlbiByZXNldCwgYW5kIGJyYW5jaAorICogdG8gd2hhdCB3b3VsZCBiZSB0aGUgcmVzZXQgdmVjdG9yLgorICoKKyAqIGxvYzogbG9jYXRpb24gdG8ganVtcCB0byBmb3Igc29mdCByZXNldAorICovCisJLmFsaWduCTUKK0VOVFJZKGNwdV9zYTExMDBfcmVzZXQpCisJbW92CWlwLCAjMAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzcsIDAJCUAgaW52YWxpZGF0ZSBJLEQgY2FjaGVzCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSAmIEQgVExCcworCW1yYwlwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCWJpYwlpcCwgaXAsICMweDAwMGYJCQlAIC4uLi4uLi4uLi4uLndjYW0KKwliaWMJaXAsIGlwLCAjMHgxMTAwCQkJQCAuLi5pLi4ucy4uLi4uLi4uCisJbWNyCXAxNSwgMCwgaXAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCisJbW92CXBjLCByMAorCisvKgorICogY3B1X3NhMTEwMF9kb19pZGxlKHR5cGUpCisgKgorICogQ2F1c2UgdGhlIHByb2Nlc3NvciB0byBpZGxlCisgKgorICogdHlwZTogY2FsbCB0eXBlOgorICogICAwID0gc2xvdyBpZGxlCisgKiAgIDEgPSBmYXN0IGlkbGUKKyAqICAgMiA9IHN3aXRjaCB0byBzbG93IHByb2Nlc3NvciBjbG9jaworICogICAzID0gc3dpdGNoIHRvIGZhc3QgcHJvY2Vzc29yIGNsb2NrCisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X3NhMTEwMF9kb19pZGxlKQorCW1vdglyMCwgcjAJCQkJQCA0IG5vcCBwYWRkaW5nCisJbW92CXIwLCByMAorCW1vdglyMCwgcjAKKwltb3YJcjAsIHIwCQkJCUAgNCBub3AgcGFkZGluZworCW1vdglyMCwgcjAKKwltb3YJcjAsIHIwCisJbW92CXIwLCAjMAorCWxkcglyMSwgPVVOQ0FDSEVBQkxFX0FERFIJCUAgcHRyIHRvIHVuY2FjaGVhYmxlIGFkZHJlc3MKKwlAIC0tLSBhbGlnbmVkIHRvIGEgY2FjaGUgbGluZQorCW1jcglwMTUsIDAsIHIwLCBjMTUsIGMyLCAyCQlAIGRpc2FibGUgY2xvY2sgc3dpdGNoaW5nCisJbGRyCXIxLCBbcjEsICMwXQkJCUAgZm9yY2Ugc3dpdGNoIHRvIE1DTEsKKwltY3IJcDE1LCAwLCByMCwgYzE1LCBjOCwgMgkJQCB3YWl0IGZvciBpbnRlcnJ1cHQKKwltb3YJcjAsIHIwCQkJCUAgc2FmZXR5CisJbWNyCXAxNSwgMCwgcjAsIGMxNSwgYzEsIDIJCUAgZW5hYmxlIGNsb2NrIHN3aXRjaGluZworCW1vdglwYywgbHIKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENBQ0hFID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qCisgKiBjcHVfc2ExMTAwX2RjYWNoZV9jbGVhbl9hcmVhKGFkZHIsc3opCisgKgorICogQ2xlYW4gdGhlIHNwZWNpZmllZCBlbnRyeSBvZiBhbnkgY2FjaGVzIHN1Y2ggdGhhdCB0aGUgTU1VCisgKiB0cmFuc2xhdGlvbiBmZXRjaGVzIHdpbGwgb2J0YWluIGNvcnJlY3QgZGF0YS4KKyAqCisgKiBhZGRyOiBjYWNoZS11bmFsaWduZWQgdmlydHVhbCBhZGRyZXNzCisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X3NhMTEwMF9kY2FjaGVfY2xlYW5fYXJlYSkKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjRENBQ0hFTElORVNJWkUKKwlzdWJzCXIxLCByMSwgI0RDQUNIRUxJTkVTSVpFCisJYmhpCTFiCisJbW92CXBjLCBscgorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFBhZ2VUYWJsZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyoKKyAqIGNwdV9zYTExMDBfc3dpdGNoX21tKHBnZCkKKyAqCisgKiBTZXQgdGhlIHRyYW5zbGF0aW9uIGJhc2UgcG9pbnRlciB0byBiZSBhcyBkZXNjcmliZWQgYnkgcGdkLgorICoKKyAqIHBnZDogbmV3IHBhZ2UgdGFibGVzCisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X3NhMTEwMF9zd2l0Y2hfbW0pCisJZmx1c2hfMTEwMF9kY2FjaGUgcjMsIGlwLCByMQorCW1vdglpcCwgIzAKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorCW1jcglwMTUsIDAsIGlwLCBjOSwgYzAsIDAJCUAgaW52YWxpZGF0ZSBSQgorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBsb2FkIHBhZ2UgdGFibGUgcG9pbnRlcgorCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisJbW92CXBjLCBscgorCisvKgorICogY3B1X3NhMTEwMF9zZXRfcHRlKHB0ZXAsIHB0ZSkKKyAqCisgKiBTZXQgYSBQVEUgYW5kIGZsdXNoIGl0IG91dAorICovCisJLmFsaWduCTUKK0VOVFJZKGNwdV9zYTExMDBfc2V0X3B0ZSkKKwlzdHIJcjEsIFtyMF0sICMtMjA0OAkJQCBsaW51eCB2ZXJzaW9uCisKKwllb3IJcjEsIHIxLCAjTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfV1JJVEUgfCBMX1BURV9ESVJUWQorCisJYmljCXIyLCByMSwgI1BURV9TTUFMTF9BUF9NQVNLCisJYmljCXIyLCByMiwgI1BURV9UWVBFX01BU0sKKwlvcnIJcjIsIHIyLCAjUFRFX1RZUEVfU01BTEwKKworCXRzdAlyMSwgI0xfUFRFX1VTRVIJCQlAIFVzZXI/CisJb3JybmUJcjIsIHIyLCAjUFRFX1NNQUxMX0FQX1VST19TUlcKKworCXRzdAlyMSwgI0xfUFRFX1dSSVRFIHwgTF9QVEVfRElSVFkJQCBXcml0ZSBhbmQgRGlydHk/CisJb3JyZXEJcjIsIHIyLCAjUFRFX1NNQUxMX0FQX1VOT19TUlcKKworCXRzdAlyMSwgI0xfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORwlAIFByZXNlbnQgYW5kIFlvdW5nPworCW1vdm5lCXIyLCAjMAorCisJc3RyCXIyLCBbcjBdCQkJQCBoYXJkd2FyZSB2ZXJzaW9uCisJbW92CXIwLCByMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworCV9fSU5JVAorCisJLnR5cGUJX19zYTExMDBfc2V0dXAsICNmdW5jdGlvbgorX19zYTExMDBfc2V0dXA6CisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzcJCUAgaW52YWxpZGF0ZSBJLEQgY2FjaGVzIG9uIHY0CisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyIG9uIHY0CisJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNwkJQCBpbnZhbGlkYXRlIEksRCBUTEJzIG9uIHY0CisJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMAkJQCBnZXQgY29udHJvbCByZWdpc3RlciB2NAorCWxkcglyNSwgc2ExMTAwX2NyMV9jbGVhcgorCWJpYwlyMCwgcjAsIHI1CisJbGRyCXI1LCBzYTExMDBfY3IxX3NldAorCW9ycglyMCwgcjAsIHI1CisJbW92CXBjLCBscgorCS5zaXplCV9fc2ExMTAwX3NldHVwLCAuIC0gX19zYTExMDBfc2V0dXAKKworCS8qCisJICogIFIKKwkgKiAuUlZJIFpGUlMgQkxEUCBXQ0FNCisJICogLi4xMSAwMDAxIC4uMTEgMTEwMQorCSAqIAorCSAqLworCS50eXBlCXNhMTEwMF9jcjFfY2xlYXIsICNvYmplY3QKKwkudHlwZQlzYTExMDBfY3IxX3NldCwgI29iamVjdAorc2ExMTAwX2NyMV9jbGVhcjoKKwkud29yZAkweDNmM2YKK3NhMTEwMF9jcjFfc2V0OgorCS53b3JkCTB4MzEzZAorCisJX19JTklUREFUQQorCisvKgorICogUHVycG9zZSA6IEZ1bmN0aW9uIHBvaW50ZXJzIHVzZWQgdG8gYWNjZXNzIGFib3ZlIGZ1bmN0aW9ucyAtIGFsbCBjYWxscworICoJICAgICBjb21lIHRocm91Z2ggdGhlc2UKKyAqLworCisvKgorICogU0ExMTAwIGFuZCBTQTExMTAgc2hhcmUgdGhlIHNhbWUgZnVuY3Rpb24gY2FsbHMKKyAqLworCS50eXBlCXNhMTEwMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CitFTlRSWShzYTExMDBfcHJvY2Vzc29yX2Z1bmN0aW9ucykKKwkud29yZAl2NF9lYXJseV9hYm9ydAorCS53b3JkCWNwdV9zYTExMDBfcHJvY19pbml0CisJLndvcmQJY3B1X3NhMTEwMF9wcm9jX2ZpbgorCS53b3JkCWNwdV9zYTExMDBfcmVzZXQKKwkud29yZAljcHVfc2ExMTAwX2RvX2lkbGUKKwkud29yZAljcHVfc2ExMTAwX2RjYWNoZV9jbGVhbl9hcmVhCisJLndvcmQJY3B1X3NhMTEwMF9zd2l0Y2hfbW0KKwkud29yZAljcHVfc2ExMTAwX3NldF9wdGUKKwkuc2l6ZQlzYTExMDBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIHNhMTEwMF9wcm9jZXNzb3JfZnVuY3Rpb25zCisKKwkuc2VjdGlvbiAiLnJvZGF0YSIKKworCS50eXBlCWNwdV9hcmNoX25hbWUsICNvYmplY3QKK2NwdV9hcmNoX25hbWU6CisJLmFzY2l6CSJhcm12NCIKKwkuc2l6ZQljcHVfYXJjaF9uYW1lLCAuIC0gY3B1X2FyY2hfbmFtZQorCisJLnR5cGUJY3B1X2VsZl9uYW1lLCAjb2JqZWN0CitjcHVfZWxmX25hbWU6CisJLmFzY2l6CSJ2NCIKKwkuc2l6ZQljcHVfZWxmX25hbWUsIC4gLSBjcHVfZWxmX25hbWUKKworCS50eXBlCWNwdV9zYTExMDBfbmFtZSwgI29iamVjdAorY3B1X3NhMTEwMF9uYW1lOgorCS5hc2NpegkiU3Ryb25nQVJNLTExMDAiCisJLnNpemUJY3B1X3NhMTEwMF9uYW1lLCAuIC0gY3B1X3NhMTEwMF9uYW1lCisKKwkudHlwZQljcHVfc2ExMTEwX25hbWUsICNvYmplY3QKK2NwdV9zYTExMTBfbmFtZToKKwkuYXNjaXoJIlN0cm9uZ0FSTS0xMTEwIgorCS5zaXplCWNwdV9zYTExMTBfbmFtZSwgLiAtIGNwdV9zYTExMTBfbmFtZQorCisJLmFsaWduCisKKwkuc2VjdGlvbiAiLnByb2MuaW5mbyIsICNhbGxvYywgI2V4ZWNpbnN0cgorCisJLnR5cGUJX19zYTExMDBfcHJvY19pbmZvLCNvYmplY3QKK19fc2ExMTAwX3Byb2NfaW5mbzoKKwkubG9uZwkweDQ0MDFhMTEwCisJLmxvbmcJMHhmZmZmZmZmMAorCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKKwkJUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKKwkJUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAorCWIJX19zYTExMDBfc2V0dXAKKwkubG9uZwljcHVfYXJjaF9uYW1lCisJLmxvbmcJY3B1X2VsZl9uYW1lCisJLmxvbmcJSFdDQVBfU1dQIHwgSFdDQVBfSEFMRiB8IEhXQ0FQXzI2QklUIHwgSFdDQVBfRkFTVF9NVUxUCisJLmxvbmcJY3B1X3NhMTEwMF9uYW1lCisJLmxvbmcJc2ExMTAwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKwkubG9uZwl2NHdiX3RsYl9mbnMKKwkubG9uZwl2NF9tY191c2VyX2ZucworCS5sb25nCXY0d2JfY2FjaGVfZm5zCisJLnNpemUJX19zYTExMDBfcHJvY19pbmZvLCAuIC0gX19zYTExMDBfcHJvY19pbmZvCisKKwkudHlwZQlfX3NhMTExMF9wcm9jX2luZm8sI29iamVjdAorX19zYTExMTBfcHJvY19pbmZvOgorCS5sb25nCTB4NjkwMWIxMTAKKwkubG9uZwkweGZmZmZmZmYwCisJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQlQTURfU0VDVF9CVUZGRVJBQkxFIHwgXAorCQlQTURfU0VDVF9DQUNIRUFCTEUgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECisJYglfX3NhMTEwMF9zZXR1cAorCS5sb25nCWNwdV9hcmNoX25hbWUKKwkubG9uZwljcHVfZWxmX25hbWUKKwkubG9uZwlIV0NBUF9TV1AgfCBIV0NBUF9IQUxGIHwgSFdDQVBfMjZCSVQgfCBIV0NBUF9GQVNUX01VTFQKKwkubG9uZwljcHVfc2ExMTEwX25hbWUKKwkubG9uZwlzYTExMDBfcHJvY2Vzc29yX2Z1bmN0aW9ucworCS5sb25nCXY0d2JfdGxiX2ZucworCS5sb25nCXY0X21jX3VzZXJfZm5zCisJLmxvbmcJdjR3Yl9jYWNoZV9mbnMKKwkuc2l6ZQlfX3NhMTExMF9wcm9jX2luZm8sIC4gLSBfX3NhMTExMF9wcm9jX2luZm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2Mtc3ltcy5jIGIvYXJjaC9hcm0vbW0vcHJvYy1zeW1zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM1ZjBmZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3Byb2Mtc3ltcy5jCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vcHJvYy1zeW1zLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorCisjaWZuZGVmIE1VTFRJX0NQVQorRVhQT1JUX1NZTUJPTChjcHVfZGNhY2hlX2NsZWFuX2FyZWEpOworRVhQT1JUX1NZTUJPTChjcHVfc2V0X3B0ZSk7CisjZWxzZQorRVhQT1JUX1NZTUJPTChwcm9jZXNzb3IpOworI2VuZGlmCisKKyNpZm5kZWYgTVVMVElfQ0FDSEUKK0VYUE9SVF9TWU1CT0woX19jcHVjX2ZsdXNoX2tlcm5fYWxsKTsKK0VYUE9SVF9TWU1CT0woX19jcHVjX2ZsdXNoX3VzZXJfYWxsKTsKK0VYUE9SVF9TWU1CT0woX19jcHVjX2ZsdXNoX3VzZXJfcmFuZ2UpOworRVhQT1JUX1NZTUJPTChfX2NwdWNfY29oZXJlbnRfa2Vybl9yYW5nZSk7CisjZWxzZQorRVhQT1JUX1NZTUJPTChjcHVfY2FjaGUpOworI2VuZGlmCisKKy8qCisgKiBObyBtb2R1bGUgc2hvdWxkIG5lZWQgdG8gdG91Y2ggdGhlIFRMQiAoYW5kIGN1cnJlbnRseQorICogbm8gbW9kdWxlcyBkby4gIFdlIGV4cG9ydCB0aGlzIGZvciAibG9hZGtlcm5lbCIgc3VwcG9ydAorICogKGJvb3RpbmcgYSBuZXcga2VybmVsIGZyb20gd2l0aGluIGEgcnVubmluZyBrZXJuZWwuKQorICovCisjaWZkZWYgTVVMVElfVExCCitFWFBPUlRfU1lNQk9MKGNwdV90bGIpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXY2LlMgYi9hcmNoL2FybS9tbS9wcm9jLXY2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFhNzNkNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtdjYuUwpAQCAtMCwwICsxLDI3MiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS9wcm9jLXY2LlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgaXMgdGhlICJzaGVsbCIgb2YgdGhlIEFSTXY2IHByb2Nlc3NvciBzdXBwb3J0LgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8YXNtL3Byb2NpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKworI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCisKKyNkZWZpbmUgRF9DQUNIRV9MSU5FX1NJWkUJMzIKKworCS5tYWNybwljcHNpZSwgZmxhZ3MKKwkuaWZjIFxmbGFncywgZgorCS5sb25nCTB4ZjEwODAwNDAKKwkuZXhpdG0KKwkuZW5kaWYKKwkuaWZjIFxmbGFncywgaQorCS5sb25nCTB4ZjEwODAwODAKKwkuZXhpdG0KKwkuZW5kaWYKKwkuaWZjIFxmbGFncywgaWYKKwkubG9uZwkweGYxMDgwMGMwCisJLmV4aXRtCisJLmVuZGlmCisJLmVycgorCS5lbmRtCisKKwkubWFjcm8JY3BzaWQsIGZsYWdzCisJLmlmYyBcZmxhZ3MsIGYKKwkubG9uZwkweGYxMGMwMDQwCisJLmV4aXRtCisJLmVuZGlmCisJLmlmYyBcZmxhZ3MsIGkKKwkubG9uZwkweGYxMGMwMDgwCisJLmV4aXRtCisJLmVuZGlmCisJLmlmYyBcZmxhZ3MsIGlmCisJLmxvbmcJMHhmMTBjMDBjMAorCS5leGl0bQorCS5lbmRpZgorCS5lcnIKKwkuZW5kbQorCitFTlRSWShjcHVfdjZfcHJvY19pbml0KQorCW1vdglwYywgbHIKKworRU5UUlkoY3B1X3Y2X3Byb2NfZmluKQorCW1vdglwYywgbHIKKworLyoKKyAqCWNwdV92Nl9yZXNldChsb2MpCisgKgorICoJUGVyZm9ybSBhIHNvZnQgcmVzZXQgb2YgdGhlIHN5c3RlbS4gIFB1dCB0aGUgQ1BVIGludG8gdGhlCisgKglzYW1lIHN0YXRlIGFzIGl0IHdvdWxkIGJlIGlmIGl0IGhhZCBiZWVuIHJlc2V0LCBhbmQgYnJhbmNoCisgKgl0byB3aGF0IHdvdWxkIGJlIHRoZSByZXNldCB2ZWN0b3IuCisgKgorICoJLSBsb2MgICAtIGxvY2F0aW9uIHRvIGp1bXAgdG8gZm9yIHNvZnQgcmVzZXQKKyAqCisgKglJdCBpcyBhc3N1bWVkIHRoYXQ6CisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X3Y2X3Jlc2V0KQorCW1vdglwYywgcjAKKworLyoKKyAqCWNwdV92Nl9kb19pZGxlKCkKKyAqCisgKglJZGxlIHRoZSBwcm9jZXNzb3IgKGVnLCB3YWl0IGZvciBpbnRlcnJ1cHQpLgorICoKKyAqCUlSUXMgYXJlIGFscmVhZHkgZGlzYWJsZWQuCisgKi8KK0VOVFJZKGNwdV92Nl9kb19pZGxlKQorCW1jcglwMTUsIDAsIHIxLCBjNywgYzAsIDQJCUAgd2FpdCBmb3IgaW50ZXJydXB0CisJbW92CXBjLCBscgorCitFTlRSWShjcHVfdjZfZGNhY2hlX2NsZWFuX2FyZWEpCisjaWZuZGVmIFRMQl9DQU5fUkVBRF9GUk9NX0wxX0NBQ0hFCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0RfQ0FDSEVfTElORV9TSVpFCisJc3VicwlyMSwgcjEsICNEX0NBQ0hFX0xJTkVfU0laRQorCWJoaQkxYgorI2VuZGlmCisJbW92CXBjLCBscgorCisvKgorICoJY3B1X2FybTkyNl9zd2l0Y2hfbW0ocGdkX3BoeXMsIHRzaykKKyAqCisgKglTZXQgdGhlIHRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgcG9pbnRlciB0byBiZSBwZ2RfcGh5cworICoKKyAqCS0gcGdkX3BoeXMgLSBwaHlzaWNhbCBhZGRyZXNzIG9mIG5ldyBUVEIKKyAqCisgKglJdCBpcyBhc3N1bWVkIHRoYXQ6CisgKgktIHdlIGFyZSBub3QgdXNpbmcgc3BsaXQgcGFnZSB0YWJsZXMKKyAqLworRU5UUlkoY3B1X3Y2X3N3aXRjaF9tbSkKKwltb3YJcjIsICMwCisJbGRyCXIxLCBbcjEsICNNTV9DT05URVhUX0lEXQlAIGdldCBtbS0+Y29udGV4dC5pZAorCW1jciAgICAgcDE1LCAwLCByMiwgYzcsIGM1LCA2ICAgICAgICAgICBAIGZsdXNoIEJUQUMvQlRCCisJbWNyCXAxNSwgMCwgcjIsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCisJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBzZXQgVFRCIDAKKwltY3IJcDE1LCAwLCByMSwgYzEzLCBjMCwgMQkJQCBzZXQgY29udGV4dCBJRAorCW1vdglwYywgbHIKKworI2RlZmluZSBuRwkoMSA8PCAxMSkKKyNkZWZpbmUgQVBYCSgxIDw8IDkpCisjZGVmaW5lIEFQMQkoMSA8PCA1KQorI2RlZmluZSBBUDAJKDEgPDwgNCkKKyNkZWZpbmUgWE4JKDEgPDwgMCkKKworLyoKKyAqCWNwdV92Nl9zZXRfcHRlKHB0ZXAsIHB0ZSkKKyAqCisgKglTZXQgYSBsZXZlbCAyIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5LgorICoKKyAqCS0gcHRlcCAgLSBwb2ludGVyIHRvIGxldmVsIDIgdHJhbnNsYXRpb24gdGFibGUgZW50cnkKKyAqCQkgIChoYXJkd2FyZSB2ZXJzaW9uIGlzIHN0b3JlZCBhdCAtMTAyNCBieXRlcykKKyAqCS0gcHRlICAgLSBQVEUgdmFsdWUgdG8gc3RvcmUKKyAqCisgKglQZXJtaXNzaW9uczoKKyAqCSAgWVVXRCAgQVBYIEFQMSBBUDAJU1ZDCVVzZXIKKyAqCSAgMHh4eCAgIDAgICAwICAgMAlubyBhY2MJbm8gYWNjCisgKgkgIDEwMHggICAxICAgMCAgIDEJci9vCW5vIGFjYworICoJICAxMHgwICAgMSAgIDAgICAxCXIvbwlubyBhY2MKKyAqCSAgMTAxMSAgIDAgICAwICAgMQlyL3cJbm8gYWNjCisgKgkgIDExMHggICAxICAgMSAgIDAJci9vCXIvbworICoJICAxMXgwICAgMSAgIDEgICAwCXIvbwlyL28KKyAqCSAgMTExMSAgIDAgICAxICAgMQlyL3cJci93CisgKi8KK0VOVFJZKGNwdV92Nl9zZXRfcHRlKQorCXN0cglyMSwgW3IwXSwgIy0yMDQ4CQlAIGxpbnV4IHZlcnNpb24KKworCWJpYwlyMiwgcjEsICMweDAwMDAwZmYwCisJYmljCXIyLCByMiwgIzB4MDAwMDAwMDMKKwlvcnIJcjIsIHIyLCAjQVAwIHwgMgorCisJdHN0CXIxLCAjTF9QVEVfV1JJVEUKKwl0c3RuZQlyMSwgI0xfUFRFX0RJUlRZCisJb3JyZXEJcjIsIHIyLCAjQVBYCisKKwl0c3QJcjEsICNMX1BURV9VU0VSCisJb3JybmUJcjIsIHIyLCAjQVAxIHwgbkcKKwl0c3RuZQlyMiwgI0FQWAorCWVvcm5lCXIyLCByMiwgI0FQMAorCisJdHN0CXIxLCAjTF9QVEVfWU9VTkcKKwliaWNlcQlyMiwgcjIsICNBUFggfCBBUDEgfCBBUDAKKworQAl0c3QJcjEsICNMX1BURV9FWEVDCitACW9ycmVxCXIyLCByMiwgI1hOCisKKwl0c3QJcjEsICNMX1BURV9QUkVTRU5UCisJbW92ZXEJcjIsICMwCisKKwlzdHIJcjIsIFtyMF0KKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMSBAIGZsdXNoX3B0ZQorCW1vdglwYywgbHIKKworCisKKworY3B1X3Y2X25hbWU6CisJLmFzY2l6CSJTb21lIFJhbmRvbSBWNiBQcm9jZXNzb3IiCisJLmFsaWduCisKKwkuc2VjdGlvbiAiLnRleHQuaW5pdCIsICNhbGxvYywgI2V4ZWNpbnN0cgorCisvKgorICoJX192Nl9zZXR1cAorICoKKyAqCUluaXRpYWxpc2UgVExCLCBDYWNoZXMsIGFuZCBNTVUgc3RhdGUgcmVhZHkgdG8gc3dpdGNoIHRoZSBNTVUKKyAqCW9uLiAgUmV0dXJuIGluIHIwIHRoZSBuZXcgQ1AxNSBDMSBjb250cm9sIHJlZ2lzdGVyIHNldHRpbmcuCisgKgorICoJV2UgYXV0b21hdGljYWxseSBkZXRlY3QgaWYgd2UgaGF2ZSBhIEhhcnZhcmQgY2FjaGUsIGFuZCB1c2UgdGhlCisgKglIYXJ2YXJkIGNhY2hlIGNvbnRyb2wgaW5zdHJ1Y3Rpb25zIGluc2VhZCBvZiB0aGUgdW5pZmllZCBjYWNoZQorICoJY29udHJvbCBpbnN0cnVjdGlvbnMuCisgKgorICoJVGhpcyBzaG91bGQgYmUgYWJsZSB0byBjb3ZlciBhbGwgQVJNdjYgY29yZXMuCisgKgorICoJSXQgaXMgYXNzdW1lZCB0aGF0OgorICoJLSBjYWNoZSB0eXBlIHJlZ2lzdGVyIGlzIGltcGxlbWVudGVkCisgKi8KK19fdjZfc2V0dXA6CisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAwCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBjYWNoZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTUsIDAJCUAgY2xlYW4raW52YWxpZGF0ZSBjYWNoZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgorCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICsgRCBUTEJzCisJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMgkJQCBUVEIgY29udHJvbCByZWdpc3RlcgorCW1jcglwMTUsIDAsIHI0LCBjMiwgYzAsIDEJCUAgbG9hZCBUVEIxCisjaWZkZWYgQ09ORklHX1ZGUAorCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDIKKwlvcnIJcjAsIHIwLCAjKDMgPDwgMjApCisJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMgkJQCBFbmFibGUgZnVsbCBhY2Nlc3MgdG8gVkZQCisjZW5kaWYKKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIHJlYWQgY29udHJvbCByZWdpc3RlcgorCWxkcglyNSwgdjZfY3IxX2NsZWFyCQlAIGdldCBtYXNrIGZvciBiaXRzIHRvIGNsZWFyCisJYmljCXIwLCByMCwgcjUJCQlAIGNsZWFyIGJpdHMgdGhlbQorCWxkcglyNSwgdjZfY3IxX3NldAkJCUAgZ2V0IG1hc2sgZm9yIGJpdHMgdG8gc2V0CisJb3JyCXIwLCByMCwgcjUJCQlAIHNldCB0aGVtCisJbW92CXBjLCBscgkJCQlAIHJldHVybiB0byBoZWFkLlM6X19yZXQKKworCS8qCisJICogICAgICAgICBWIFggRiAgIEkgRCBMUgorCSAqIC4uLi4gLi4uRSBQVUkuIC5ULlQgNFJWSSBaRlJTIEJMRFAgV0NBTQorCSAqIHJycnIgcnJyeCB4eHgwIDAxMDEgeHh4eCB4eHh4IHgxMTEgeHh4eCA8IGZvcmNlZAorCSAqICAgICAgICAgMCAxMTAgICAgICAgMDAxMSAxLjAwIC4xMTEgMTEwMSA8IHdlIHdhbnQKKwkgKi8KKwkudHlwZQl2Nl9jcjFfY2xlYXIsICNvYmplY3QKKwkudHlwZQl2Nl9jcjFfc2V0LCAjb2JqZWN0Cit2Nl9jcjFfY2xlYXI6CisJLndvcmQJMHgwMWUwZmI3ZgordjZfY3IxX3NldDoKKwkud29yZAkweDAwYzAzODdkCisKKwkudHlwZQl2Nl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CitFTlRSWSh2Nl9wcm9jZXNzb3JfZnVuY3Rpb25zKQorCS53b3JkCXY2X2Vhcmx5X2Fib3J0CisJLndvcmQJY3B1X3Y2X3Byb2NfaW5pdAorCS53b3JkCWNwdV92Nl9wcm9jX2ZpbgorCS53b3JkCWNwdV92Nl9yZXNldAorCS53b3JkCWNwdV92Nl9kb19pZGxlCisJLndvcmQJY3B1X3Y2X2RjYWNoZV9jbGVhbl9hcmVhCisJLndvcmQJY3B1X3Y2X3N3aXRjaF9tbQorCS53b3JkCWNwdV92Nl9zZXRfcHRlCisJLnNpemUJdjZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIHY2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKworCS50eXBlCWNwdV9hcmNoX25hbWUsICNvYmplY3QKK2NwdV9hcmNoX25hbWU6CisJLmFzY2l6CSJhcm12NiIKKwkuc2l6ZQljcHVfYXJjaF9uYW1lLCAuIC0gY3B1X2FyY2hfbmFtZQorCisJLnR5cGUJY3B1X2VsZl9uYW1lLCAjb2JqZWN0CitjcHVfZWxmX25hbWU6CisJLmFzY2l6CSJ2NiIKKwkuc2l6ZQljcHVfZWxmX25hbWUsIC4gLSBjcHVfZWxmX25hbWUKKwkuYWxpZ24KKworCS5zZWN0aW9uICIucHJvYy5pbmZvIiwgI2FsbG9jLCAjZXhlY2luc3RyCisKKwkvKgorCSAqIE1hdGNoIGFueSBBUk12NiBwcm9jZXNzb3IgY29yZS4KKwkgKi8KKwkudHlwZQlfX3Y2X3Byb2NfaW5mbywgI29iamVjdAorX192Nl9wcm9jX2luZm86CisJLmxvbmcJMHgwMDA3YjAwMAorCS5sb25nCTB4MDAwN2YwMDAKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCisJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKKwliCV9fdjZfc2V0dXAKKwkubG9uZwljcHVfYXJjaF9uYW1lCisJLmxvbmcJY3B1X2VsZl9uYW1lCisJLmxvbmcJSFdDQVBfU1dQfEhXQ0FQX0hBTEZ8SFdDQVBfVEhVTUJ8SFdDQVBfRkFTVF9NVUxUfEhXQ0FQX1ZGUHxIV0NBUF9FRFNQfEhXQ0FQX0pBVkEKKwkubG9uZwljcHVfdjZfbmFtZQorCS5sb25nCXY2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKwkubG9uZwl2NndiaV90bGJfZm5zCisJLmxvbmcJdjZfdXNlcl9mbnMKKwkubG9uZwl2Nl9jYWNoZV9mbnMKKwkuc2l6ZQlfX3Y2X3Byb2NfaW5mbywgLiAtIF9fdjZfcHJvY19pbmZvCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDk3N2I0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwpAQCAtMCwwICsxLDkzNCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCisgKgorICogIEF1dGhvcjoJTmljb2xhcyBQaXRyZQorICogIENyZWF0ZWQ6CU5vdmVtYmVyIDIwMDAKKyAqICBDb3B5cmlnaHQ6CShDKSAyMDAwLCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTU1VIGZ1bmN0aW9ucyBmb3IgdGhlIEludGVsIFhTY2FsZSBDUFVzCisgKgorICogMjAwMSBBdWcgMjE6CisgKglzb21lIGNvbnRyaWJ1dGlvbnMgYnkgQnJldHQgR2FpbmVzIDxicmV0dC53LmdhaW5lc0BpbnRlbC5jb20+CisgKglDb3B5cmlnaHQgMjAwMSBieSBJbnRlbCBDb3JwLgorICoKKyAqIDIwMDEgU2VwIDA4OgorICoJQ29tcGxldGVseSByZXZpc2l0ZWQsIG1hbnkgaW1wb3J0YW50IGZpeGVzCisgKglOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS9wcm9jaW5mby5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSAicHJvYy1tYWNyb3MuUyIKKworLyoKKyAqIFRoaXMgaXMgdGhlIG1heGltdW0gc2l6ZSBvZiBhbiBhcmVhIHdoaWNoIHdpbGwgYmUgZmx1c2hlZC4gIElmIHRoZSBhcmVhCisgKiBpcyBsYXJnZXIgdGhhbiB0aGlzLCB0aGVuIHdlIGZsdXNoIHRoZSB3aG9sZSBjYWNoZQorICovCisjZGVmaW5lIE1BWF9BUkVBX1NJWkUJMzI3NjgKKworLyoKKyAqIHRoZSBjYWNoZSBsaW5lIHNpemUgb2YgdGhlIEkgYW5kIEQgY2FjaGUKKyAqLworI2RlZmluZSBDQUNIRUxJTkVTSVpFCTMyCisKKy8qCisgKiB0aGUgc2l6ZSBvZiB0aGUgZGF0YSBjYWNoZQorICovCisjZGVmaW5lIENBQ0hFU0laRQkzMjc2OAorCisvKgorICogVmlydHVhbCBhZGRyZXNzIHVzZWQgdG8gYWxsb2NhdGUgdGhlIGNhY2hlIHdoZW4gZmx1c2hlZAorICoKKyAqIFRoaXMgbXVzdCBiZSBhbiBhZGRyZXNzIHJhbmdlIHdoaWNoIGlzIF9uZXZlcl8gdXNlZC4gIEl0IHNob3VsZAorICogYXBwYXJlbnRseSBoYXZlIGEgbWFwcGluZyBpbiB0aGUgY29ycmVzcG9uZGluZyBwYWdlIHRhYmxlIGZvcgorICogY29tcGF0aWJpbGl0eSB3aXRoIGZ1dHVyZSBDUFVzIHRoYXQgX2NvdWxkXyByZXF1aXJlIGl0LiAgRm9yIGluc3RhbmNlIHdlCisgKiBkb24ndCBjYXJlLgorICoKKyAqIFRoaXMgbXVzdCBiZSBhbGlnbmVkIG9uIGEgMipDQUNIRVNJWkUgYm91bmRhcnkuICBUaGUgY29kZSBzZWxlY3RzIG9uZSBvZgorICogdGhlIDIgYXJlYXMgaW4gYWx0ZXJuYW5jZSBlYWNoIHRpbWUgdGhlIGNsZWFuX2RfY2FjaGUgbWFjcm8gaXMgdXNlZC4KKyAqIFdpdGhvdXQgdGhpcyB0aGUgWFNjYWxlIGNvcmUgZXhoaWJpdHMgY2FjaGUgZXZpY3Rpb24gcHJvYmxlbXMgYW5kIG5vIG9uZQorICoga25vd3Mgd2h5LgorICoKKyAqIFJlbWluZGVyOiB0aGUgdmVjdG9yIHRhYmxlIGlzIGxvY2F0ZWQgYXQgMHhmZmZmMDAwMC0weGZmZmYwZmZmLgorICovCisjZGVmaW5lIENMRUFOX0FERFIJMHhmZmZlMDAwMAorCisvKgorICogVGhpcyBtYWNybyBpcyB1c2VkIHRvIHdhaXQgZm9yIGEgQ1AxNSB3cml0ZSBhbmQgaXMgbmVlZGVkCisgKiB3aGVuIHdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIGxhc3Qgb3BlcmF0aW9uIHRvIHRoZSBjby1wcm8KKyAqIHdhcyBjb21wbGV0ZWQgYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCBvcGVyYXRpb24uCisgKi8KKwkubWFjcm8JY3B3YWl0LCByZAorCW1yYwlwMTUsIDAsIFxyZCwgYzIsIGMwLCAwCQlAIGFyYml0cmFyeSByZWFkIG9mIGNwMTUKKwltb3YJXHJkLCBccmQJCQlAIHdhaXQgZm9yIGNvbXBsZXRpb24KKwlzdWIgCXBjLCBwYywgIzQJCQlAIGZsdXNoIGluc3RydWN0aW9uIHBpcGVsaW5lCisJLmVuZG0KKworCS5tYWNybwljcHdhaXRfcmV0LCBsciwgcmQKKwltcmMJcDE1LCAwLCBccmQsIGMyLCBjMCwgMAkJQCBhcmJpdHJhcnkgcmVhZCBvZiBjcDE1CisJc3ViCXBjLCBcbHIsIFxyZCwgTFNSICMzMgkJQCB3YWl0IGZvciBjb21wbGV0aW9uIGFuZAorCQkJCQkJQCBmbHVzaCBpbnN0cnVjdGlvbiBwaXBlbGluZQorCS5lbmRtCisKKy8qCisgKiBUaGlzIG1hY3JvIGNsZWFucyB0aGUgZW50aXJlIGRjYWNoZSB1c2luZyBsaW5lIGFsbG9jYXRlLgorICogVGhlIG1haW4gbG9vcCBoYXMgYmVlbiB1bnJvbGxlZCB0byByZWR1Y2UgbG9vcCBvdmVyaGVhZC4KKyAqIHJkIGFuZCBycyBhcmUgdHdvIHNjcmF0Y2ggcmVnaXN0ZXJzLgorICovCisJLm1hY3JvICBjbGVhbl9kX2NhY2hlLCByZCwgcnMKKwlsZHIJXHJzLCA9Y2xlYW5fYWRkcgorCWxkcglccmQsIFtccnNdCisJZW9yCVxyZCwgXHJkLCAjQ0FDSEVTSVpFCisJc3RyCVxyZCwgW1xyc10KKwlhZGQJXHJzLCBccmQsICNDQUNIRVNJWkUKKzE6CW1jcglwMTUsIDAsIFxyZCwgYzcsIGMyLCA1CQlAIGFsbG9jYXRlIEQgY2FjaGUgbGluZQorCWFkZAlccmQsIFxyZCwgI0NBQ0hFTElORVNJWkUKKwltY3IJcDE1LCAwLCBccmQsIGM3LCBjMiwgNQkJQCBhbGxvY2F0ZSBEIGNhY2hlIGxpbmUKKwlhZGQJXHJkLCBccmQsICNDQUNIRUxJTkVTSVpFCisJbWNyCXAxNSwgMCwgXHJkLCBjNywgYzIsIDUJCUAgYWxsb2NhdGUgRCBjYWNoZSBsaW5lCisJYWRkCVxyZCwgXHJkLCAjQ0FDSEVMSU5FU0laRQorCW1jcglwMTUsIDAsIFxyZCwgYzcsIGMyLCA1CQlAIGFsbG9jYXRlIEQgY2FjaGUgbGluZQorCWFkZAlccmQsIFxyZCwgI0NBQ0hFTElORVNJWkUKKwl0ZXEJXHJkLCBccnMKKwlibmUJMWIKKwkuZW5kbQorCisJLmRhdGEKK2NsZWFuX2FkZHI6CS53b3JkCUNMRUFOX0FERFIKKworCS50ZXh0CisKKy8qCisgKiBjcHVfeHNjYWxlX3Byb2NfaW5pdCgpCisgKgorICogTm90aGluZyB0b28gZXhjaXRpbmcgYXQgdGhlIG1vbWVudAorICovCitFTlRSWShjcHVfeHNjYWxlX3Byb2NfaW5pdCkKKwltb3YJcGMsIGxyCisKKy8qCisgKiBjcHVfeHNjYWxlX3Byb2NfZmluKCkKKyAqLworRU5UUlkoY3B1X3hzY2FsZV9wcm9jX2ZpbikKKwlzdHIJbHIsIFtzcCwgIy00XSEKKwltb3YJcjAsICNQU1JfRl9CSVR8UFNSX0lfQklUfFNWQ19NT0RFCisJbXNyCWNwc3JfYywgcjAKKwlibAl4c2NhbGVfZmx1c2hfa2Vybl9jYWNoZV9hbGwJQCBjbGVhbiBjYWNoZXMKKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwliaWMJcjAsIHIwLCAjMHgxODAwCQkJQCAuLi5JWi4uLi4uLi4uLi4uCisJYmljCXIwLCByMCwgIzB4MDAwNgkJCUAgLi4uLi4uLi4uLi4uLkNBLgorCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgZGlzYWJsZSBjYWNoZXMKKwlsZHIJcGMsIFtzcF0sICM0CisKKy8qCisgKiBjcHVfeHNjYWxlX3Jlc2V0KGxvYykKKyAqCisgKiBQZXJmb3JtIGEgc29mdCByZXNldCBvZiB0aGUgc3lzdGVtLiAgUHV0IHRoZSBDUFUgaW50byB0aGUKKyAqIHNhbWUgc3RhdGUgYXMgaXQgd291bGQgYmUgaWYgaXQgaGFkIGJlZW4gcmVzZXQsIGFuZCBicmFuY2gKKyAqIHRvIHdoYXQgd291bGQgYmUgdGhlIHJlc2V0IHZlY3Rvci4KKyAqCisgKiBsb2M6IGxvY2F0aW9uIHRvIGp1bXAgdG8gZm9yIHNvZnQgcmVzZXQKKyAqLworCS5hbGlnbgk1CitFTlRSWShjcHVfeHNjYWxlX3Jlc2V0KQorCW1vdglyMSwgI1BTUl9GX0JJVHxQU1JfSV9CSVR8U1ZDX01PREUKKwltc3IJY3Bzcl9jLCByMQkJCUAgcmVzZXQgQ1BTUgorCW1yYwlwMTUsIDAsIHIxLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCWJpYwlyMSwgcjEsICMweDAwODYJCQlAIC4uLi4uLi4uQi4uLi5DQS4KKwliaWMJcjEsIHIxLCAjMHgzOTAwCQkJQCAuLlZJWi4uUy4uLi4uLi4uCisJbWNyCXAxNSwgMCwgcjEsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIEksRCBjYWNoZXMgJiBCVEIKKwliaWMJcjEsIHIxLCAjMHgwMDAxCQkJQCAuLi4uLi4uLi4uLi4uLi5NCisJbWNyCXAxNSwgMCwgcjEsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCisJQCBDQVVUSU9OOiBNTVUgdHVybmVkIG9mZiBmcm9tIHRoaXMgcG9pbnQuIFdlIGNvdW50IG9uIHRoZSBwaXBlbGluZQorCUAgYWxyZWFkeSBjb250YWluaW5nIHRob3NlIHR3byBsYXN0IGluc3RydWN0aW9ucyB0byBzdXJ2aXZlLgorCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisJbW92CXBjLCByMAorCisvKgorICogY3B1X3hzY2FsZV9kb19pZGxlKCkKKyAqCisgKiBDYXVzZSB0aGUgcHJvY2Vzc29yIHRvIGlkbGUKKyAqCisgKiBGb3Igbm93IHdlIGRvIG5vdGhpbmcgYnV0IGdvIHRvIGlkbGUgbW9kZSBmb3IgZXZlcnkgY2FzZQorICoKKyAqIFhTY2FsZSBzdXBwb3J0cyBjbG9jayBzd2l0Y2hpbmcsIGJ1dCB1c2luZyBpZGxlIG1vZGUgc3VwcG9ydAorICogYWxsb3dzIGV4dGVybmFsIGhhcmR3YXJlIHRvIHJlYWN0IHRvIHN5c3RlbSBzdGF0ZSBjaGFuZ2VzLgorICovCisJLmFsaWduCTUKKworRU5UUlkoY3B1X3hzY2FsZV9kb19pZGxlKQorCW1vdglyMCwgIzEKKwltY3IJcDE0LCAwLCByMCwgYzcsIGMwLCAwCQlAIEdvIHRvIElETEUKKwltb3YJcGMsIGxyCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDQUNIRSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKgorICoJZmx1c2hfdXNlcl9jYWNoZV9hbGwoKQorICoKKyAqCUludmFsaWRhdGUgYWxsIGNhY2hlIGVudHJpZXMgaW4gYSBwYXJ0aWN1bGFyIGFkZHJlc3MKKyAqCXNwYWNlLgorICovCitFTlRSWSh4c2NhbGVfZmx1c2hfdXNlcl9jYWNoZV9hbGwpCisJLyogRkFMTFRIUk9VR0ggKi8KKworLyoKKyAqCWZsdXNoX2tlcm5fY2FjaGVfYWxsKCkKKyAqCisgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSB0aGUgZW50aXJlIGNhY2hlLgorICovCitFTlRSWSh4c2NhbGVfZmx1c2hfa2Vybl9jYWNoZV9hbGwpCisJbW92CXIyLCAjVk1fRVhFQworCW1vdglpcCwgIzAKK19fZmx1c2hfd2hvbGVfY2FjaGU6CisJY2xlYW5fZF9jYWNoZSByMCwgcjEKKwl0c3QJcjIsICNWTV9FWEVDCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGM1LCAwCQlAIEludmFsaWRhdGUgSSBjYWNoZSAmIEJUQgorCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgRHJhaW4gV3JpdGUgKCYgRmlsbCkgQnVmZmVyCisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfdXNlcl9jYWNoZV9yYW5nZShzdGFydCwgZW5kLCB2bV9mbGFncykKKyAqCisgKglJbnZhbGlkYXRlIGEgcmFuZ2Ugb2YgY2FjaGUgZW50cmllcyBpbiB0aGUgc3BlY2lmaWVkCisgKglhZGRyZXNzIHNwYWNlLgorICoKKyAqCS0gc3RhcnQgLSBzdGFydCBhZGRyZXNzIChtYXkgbm90IGJlIGFsaWduZWQpCisgKgktIGVuZAktIGVuZCBhZGRyZXNzIChleGNsdXNpdmUsIG1heSBub3QgYmUgYWxpZ25lZCkKKyAqCS0gdm1hCS0gdm1hX2FyZWFfc3RydWN0IGRlc2NyaWJpbmcgYWRkcmVzcyBzcGFjZQorICovCisJLmFsaWduCTUKK0VOVFJZKHhzY2FsZV9mbHVzaF91c2VyX2NhY2hlX3JhbmdlKQorCW1vdglpcCwgIzAKKwlzdWIJcjMsIHIxLCByMAkJCUAgY2FsY3VsYXRlIHRvdGFsIHNpemUKKwljbXAJcjMsICNNQVhfQVJFQV9TSVpFCisJYmhzCV9fZmx1c2hfd2hvbGVfY2FjaGUKKworMToJdHN0CXIyLCAjVk1fRVhFQworCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjNSwgMQkJQCBJbnZhbGlkYXRlIEkgY2FjaGUgbGluZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIENsZWFuIEQgY2FjaGUgbGluZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJCUAgSW52YWxpZGF0ZSBEIGNhY2hlIGxpbmUKKwlhZGQJcjAsIHIwLCAjQ0FDSEVMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwl0c3QJcjIsICNWTV9FWEVDCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGM1LCA2CQlAIEludmFsaWRhdGUgQlRCCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBEcmFpbiBXcml0ZSAoJiBGaWxsKSBCdWZmZXIKKwltb3YJcGMsIGxyCisKKy8qCisgKgljb2hlcmVudF9rZXJuX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJRW5zdXJlIGNvaGVyZW5jeSBiZXR3ZWVuIHRoZSBJY2FjaGUgYW5kIHRoZSBEY2FjaGUgaW4gdGhlCisgKglyZWdpb24gZGVzY3JpYmVkIGJ5IHN0YXJ0LiAgSWYgeW91IGhhdmUgbm9uLXNub29waW5nCisgKglIYXJ2YXJkIGNhY2hlcywgeW91IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgKgorICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqCisgKglOb3RlOiBzaW5nbGUgSS1jYWNoZSBsaW5lIGludmFsaWRhdGlvbiBpc24ndCB1c2VkIGhlcmUgc2luY2UKKyAqCWl0IGFsc28gdHJhc2hlcyB0aGUgbWluaSBJLWNhY2hlIHVzZWQgYnkgSlRBRyBkZWJ1Z2dlcnMuCisgKi8KK0VOVFJZKHhzY2FsZV9jb2hlcmVudF9rZXJuX3JhbmdlKQorCS8qIEZBTExUSFJPVUdIICovCisKKy8qCisgKgljb2hlcmVudF91c2VyX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJRW5zdXJlIGNvaGVyZW5jeSBiZXR3ZWVuIHRoZSBJY2FjaGUgYW5kIHRoZSBEY2FjaGUgaW4gdGhlCisgKglyZWdpb24gZGVzY3JpYmVkIGJ5IHN0YXJ0LiAgSWYgeW91IGhhdmUgbm9uLXNub29waW5nCisgKglIYXJ2YXJkIGNhY2hlcywgeW91IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgKgorICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqCisgKglOb3RlOiBzaW5nbGUgSS1jYWNoZSBsaW5lIGludmFsaWRhdGlvbiBpc24ndCB1c2VkIGhlcmUgc2luY2UKKyAqCWl0IGFsc28gdHJhc2hlcyB0aGUgbWluaSBJLWNhY2hlIHVzZWQgYnkgSlRBRyBkZWJ1Z2dlcnMuCisgKi8KK0VOVFJZKHhzY2FsZV9jb2hlcmVudF91c2VyX3JhbmdlKQorCWJpYwlyMCwgcjAsICNDQUNIRUxJTkVTSVpFIC0gMQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRUxJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAwCQlAIEludmFsaWRhdGUgSSBjYWNoZSAmIEJUQgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIERyYWluIFdyaXRlICgmIEZpbGwpIEJ1ZmZlcgorCW1vdglwYywgbHIKKworLyoKKyAqCWZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uodm9pZCAqcGFnZSkKKyAqCisgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgorICoJdGhlIEkgY2FjaGUKKyAqCisgKgktIGFkZHIJLSBwYWdlIGFsaWduZWQgYWRkcmVzcworICovCitFTlRSWSh4c2NhbGVfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKKwlhZGQJcjEsIHIwLCAjUEFHRV9TWgorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJCUAgaW52YWxpZGF0ZSBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFTElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDAJCUAgSW52YWxpZGF0ZSBJIGNhY2hlICYgQlRCCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgRHJhaW4gV3JpdGUgKCYgRmlsbCkgQnVmZmVyCisJbW92CXBjLCBscgorCisvKgorICoJZG1hX2ludl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUludmFsaWRhdGUgKGRpc2NhcmQpIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoJTWF5IG5vdCB3cml0ZSBiYWNrIGFueSBlbnRyaWVzLiAgSWYgJ3N0YXJ0JyBvciAnZW5kJworICoJYXJlIG5vdCBjYWNoZSBsaW5lIGFsaWduZWQsIHRob3NlIGxpbmVzIG11c3QgYmUgd3JpdHRlbgorICoJYmFjay4KKyAqCisgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWSh4c2NhbGVfZG1hX2ludl9yYW5nZSkKKwltcmMJcDE1LCAwLCByMiwgYzAsIGMwLCAwCQlAIHJlYWQgSUQKKwllb3IJcjIsIHIyLCAjMHg2OTAwMDAwMAorCWVvcglyMiwgcjIsICMweDAwMDUyMDAwCisJYmljcwlyMiwgcjIsICMxCisJYmVxCXhzY2FsZV9kbWFfZmx1c2hfcmFuZ2UKKworCXRzdAlyMCwgI0NBQ0hFTElORVNJWkUgLSAxCisJYmljCXIwLCByMCwgI0NBQ0hFTElORVNJWkUgLSAxCisJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJdHN0CXIxLCAjQ0FDSEVMSU5FU0laRSAtIDEKKwltY3JuZQlwMTUsIDAsIHIxLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJCUAgaW52YWxpZGF0ZSBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFTElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgRHJhaW4gV3JpdGUgKCYgRmlsbCkgQnVmZmVyCisJbW92CXBjLCBscgorCisvKgorICoJZG1hX2NsZWFuX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJQ2xlYW4gdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCisgKgorICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkoeHNjYWxlX2RtYV9jbGVhbl9yYW5nZSkKKwliaWMJcjAsIHIwLCAjQ0FDSEVMSU5FU0laRSAtIDEKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBEcmFpbiBXcml0ZSAoJiBGaWxsKSBCdWZmZXIKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfZmx1c2hfcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KKyAqCisgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWSh4c2NhbGVfZG1hX2ZsdXNoX3JhbmdlKQorCWJpYwlyMCwgcjAsICNDQUNIRUxJTkVTSVpFIC0gMQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJCUAgaW52YWxpZGF0ZSBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFTElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgRHJhaW4gV3JpdGUgKCYgRmlsbCkgQnVmZmVyCisJbW92CXBjLCBscgorCitFTlRSWSh4c2NhbGVfY2FjaGVfZm5zKQorCS5sb25nCXhzY2FsZV9mbHVzaF9rZXJuX2NhY2hlX2FsbAorCS5sb25nCXhzY2FsZV9mbHVzaF91c2VyX2NhY2hlX2FsbAorCS5sb25nCXhzY2FsZV9mbHVzaF91c2VyX2NhY2hlX3JhbmdlCisJLmxvbmcJeHNjYWxlX2NvaGVyZW50X2tlcm5fcmFuZ2UKKwkubG9uZwl4c2NhbGVfY29oZXJlbnRfdXNlcl9yYW5nZQorCS5sb25nCXhzY2FsZV9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJeHNjYWxlX2RtYV9pbnZfcmFuZ2UKKwkubG9uZwl4c2NhbGVfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJeHNjYWxlX2RtYV9mbHVzaF9yYW5nZQorCitFTlRSWShjcHVfeHNjYWxlX2RjYWNoZV9jbGVhbl9hcmVhKQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRUxJTkVTSVpFCisJc3VicwlyMSwgcjEsICNDQUNIRUxJTkVTSVpFCisJYmhpCTFiCisJbW92CXBjLCBscgorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDQUNIRSBMT0NLSU5HPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoZSBYU2NhbGUgTWljcm9BcmNoaXRlY3R1cmUgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBsb2NraW5nIGVudHJpZXMgaW50bworICogdGhlIGRhdGEgYW5kIGluc3RydWN0aW9uIGNhY2hlLiAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgaW1wbGVtZW50IHRoZSBjb3JlCisgKiBsb3cgbGV2ZWwgaW5zdHJ1Y3Rpb25zIG5lZWRlZCB0byBhY2NvbXBsaXNoIHRoZSBsb2NraW5nLiAgVGhlIGRldmVsb3BlcidzCisgKiBtYW51YWwgc3RhdGVzIHRoYXQgdGhlIGNvZGUgdGhhdCBwZXJmb3JtcyB0aGUgbG9ja2luZyBtdXN0IGJlIGluIG5vbi1jYWNoZWQKKyAqIG1lbW9yeS4gIFRvIGFjY29tcGxpc2ggdGhpcywgdGhlIGNvZGUgaW4geHNjYWxlLWNhY2hlLWxvY2suYyBjb3BpZXMgdGhlCisgKiBmb2xsb3dpbmcgZnVuY3Rpb25zIGZyb20gdGhlIGNhY2hlIGludG8gYSBub24tY2FjaGVkIG1lbW9yeSByZWdpb24gdGhhdAorICogaXMgYWxsb2NhdGVkIHRocm91Z2ggY29uc2lzdGVudF9hbGxvYygpLgorICoKKyAqLworCS5hbGlnbgk1CisvKgorICogeHNjYWxlX2ljYWNoZV9sb2NrCisgKgorICogcjA6IHN0YXJ0aW5nIGFkZHJlc3MgdG8gbG9jaworICogcjE6IGVuZCBhZGRyZXNzIHRvIGxvY2sKKyAqLworRU5UUlkoeHNjYWxlX2ljYWNoZV9sb2NrKQorCitpTG9ja0xvb3A6CisJYmljCXIwLCByMCwgI0NBQ0hFTElORVNJWkUgLSAxCisJbWNyCXAxNSwgMCwgcjAsIGM5LCBjMSwgMAlAIGxvY2sgaW50byBjYWNoZQorCWNtcAlyMCwgcjEJCQlAIGFyZSB3ZSBkb25lPworCWFkZAlyMCwgcjAsICNDQUNIRUxJTkVTSVpFCUAgYWR2YW5jZSB0byBuZXh0IGNhY2hlIGxpbmUKKwlibHMJaUxvY2tMb29wCisJbW92CXBjLCBscgorCisvKgorICogeHNjYWxlX2ljYWNoZV91bmxvY2sKKyAqLworRU5UUlkoeHNjYWxlX2ljYWNoZV91bmxvY2spCisJbWNyCXAxNSwgMCwgcjAsIGM5LCBjMSwgMQlAIFVubG9jayBpY2FjaGUKKwltb3YJcGMsIGxyCisKKy8qCisgKiB4c2NhbGVfZGNhY2hlX2xvY2sKKyAqCisgKiByMDogc3RhcnRpbmcgYWRkcmVzcyB0byBsb2NrCisgKiByMTogZW5kIGFkZHJlc3MgdG8gbG9jaworICovCitFTlRSWSh4c2NhbGVfZGNhY2hlX2xvY2spCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgRHJhaW4gV3JpdGUgKCYgRmlsbCkgQnVmZmVyCisJbW92CXIyLCAjMQorCW1jcglwMTUsIDAsIHIyLCBjOSwgYzIsIDAJQCBQdXQgZGNhY2hlIGluIGxvY2sgbW9kZQorCWNwd2FpdAlpcAkJCUAgV2FpdCBmb3IgY29tcGxldGlvbgorCisJbXJzCXIyLCBjcHNyCisJb3JyCXIzLCByMiwgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVAorZExvY2tMb29wOgorCW1zcgljcHNyX2MsIHIzCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJQCBXcml0ZSBiYWNrIGxpbmUgaWYgaXQgaXMgZGlydHkKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCUAgRmx1c2gvaW52YWxpZGF0ZSBsaW5lCisJbXNyCWNwc3JfYywgcjIKKwlsZHIJaXAsIFtyMF0sICNDQUNIRUxJTkVTSVpFIEAgUHJlbG9hZCAzMiBieXRlcyBpbnRvIGNhY2hlIGZyb20KKwkJCQkJQCBsb2NhdGlvbiBbcjBdLiBQb3N0LWluY3JlbWVudAorCQkJCQlAIHIzIHRvIG5leHQgY2FjaGUgbGluZQorCWNtcAlyMCwgcjEJCQlAIEFyZSB3ZSBkb25lPworCWJscwlkTG9ja0xvb3AKKworCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIERyYWluIFdyaXRlICgmIEZpbGwpIEJ1ZmZlcgorCW1vdglyMiwgIzAKKwltY3IJcDE1LCAwLCByMiwgYzksIGMyLCAwCUAgR2V0IG91dCBvZiBsb2NrIG1vZGUKKwljcHdhaXRfcmV0IGxyLCBpcAorCisvKgorICogeHNjYWxlX2RjYWNoZV91bmxvY2sKKyAqLworRU5UUlkoeHNjYWxlX2RjYWNoZV91bmxvY2spCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgRHJhaW4gV3JpdGUgKCYgRmlsbCkgQnVmZmVyCisJbWNyCXAxNSwgMCwgaXAsIGM5LCBjMiwgMQlAIFVubG9jayBjYWNoZQorCW1vdglwYywgbHIKKworLyoKKyAqIE5lZWRlZCB0byBkZXRlcm1pbmUgdGhlIGxlbmd0aCBvZiB0aGUgY29kZSB0aGF0IG5lZWRzIHRvIGJlIGNvcGllZC4KKyAqLworCS5hbGlnbgk1CitFTlRSWSh4c2NhbGVfY2FjaGVfZHVtbXkpCisJbW92CXBjLCBscgorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBUTEIgTE9DS0lORz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoZSBYU2NhbGUgTWljcm9BcmNoaXRlY3R1cmUgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBsb2NraW5nIGVudHJpZXMgaW50bworICogdGhlIEluc3RydWN0aW9uIGFuZCBEYXRhIFRMQnMuICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBwcm92aWRlIHRoZQorICogbG93IGxldmVsIHN1cHBvcnQgZm9yIHN1cHBvcnRpbmcgdGhlc2UgdW5kZXIgTGludXguICB4c2NhbGUtbG9jay5jCisgKiBpbXBsZW1lbnRzIHNvbWUgaGlnaGVyIGxldmVsIG1hbmFnZW1lbnQgY29kZS4gIE1vc3Qgb2YgdGhlIGZvbGxvd2luZworICogaXMgdGFrZW4gc3RyYWlnaHQgb3V0IG9mIHRoZSBEZXZlbG9wZXIncyBNYW51YWwuCisgKi8KKworLyoKKyAqIExvY2sgSS1UTEIgZW50cnkKKyAqCisgKiByMDogVmlydHVhbCBhZGRyZXNzIHRvIHRyYW5zbGF0ZSBhbmQgbG9jaworICovCisJLmFsaWduCTUKK0VOVFJZKHhzY2FsZV9pdGxiX2xvY2spCisJbXJzCXIyLCBjcHNyCisJb3JyCXIzLCByMiwgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVAorCW1zcgljcHNyX2MsIHIzCQkJQCBEaXNhYmxlIGludGVycnVwdHMKKwltY3IJcDE1LCAwLCByMCwgYzgsIGM1LCAxCQlAIEludmFsaWRhdGUgSS1UTEIgZW50cnkKKwltY3IJcDE1LCAwLCByMCwgYzEwLCBjNCwgMAkJQCBUcmFuc2xhdGUgYW5kIGxvY2sKKwltc3IJY3Bzcl9jLCByMgkJCUAgUmVzdG9yZSBpbnRlcnJ1cHRzCisJY3B3YWl0X3JldCBsciwgaXAKKworLyoKKyAqIExvY2sgRC1UTEIgZW50cnkKKyAqCisgKiByMDogVmlydHVhbCBhZGRyZXNzIHRvIHRyYW5zbGF0ZSBhbmQgbG9jaworICovCisJLmFsaWduCTUKK0VOVFJZKHhzY2FsZV9kdGxiX2xvY2spCisJbXJzCXIyLCBjcHNyCisJb3JyCXIzLCByMiwgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVAorCW1zcgljcHNyX2MsIHIzCQkJQCBEaXNhYmxlIGludGVycnVwdHMKKwltY3IJcDE1LCAwLCByMCwgYzgsIGM2LCAxCQlAIEludmFsaWRhdGUgRC1UTEIgZW50cnkKKwltY3IJcDE1LCAwLCByMCwgYzEwLCBjOCwgMAkJQCBUcmFuc2xhdGUgYW5kIGxvY2sKKwltc3IJY3Bzcl9jLCByMgkJCUAgUmVzdG9yZSBpbnRlcnJ1cHRzCisJY3B3YWl0X3JldCBsciwgaXAKKworLyoKKyAqIFVubG9jayBhbGwgSS1UTEIgZW50cmllcworICovCisJLmFsaWduCTUKK0VOVFJZKHhzY2FsZV9pdGxiX3VubG9jaykKKwltY3IJcDE1LCAwLCBpcCwgYzEwLCBjNCwgMQkJQCBVbmxvY2sgSS1UTEIKKwltY3IJcDE1LCAwLCBpcCwgYzgsIGM1LCAwCQlAIEludmFsaWRhdGUgSS1UTEIKKwljcHdhaXRfcmV0IGxyLCBpcAorCisvKgorICogVW5sb2NrIGFsbCBELVRMQiBlbnRyaWVzCisgKi8KK0VOVFJZKHhzY2FsZV9kdGxiX3VubG9jaykKKwltY3IJcDE1LCAwLCBpcCwgYzEwLCBjOCwgMQkJQCBVbmxvY2sgRC1UQkwKKwltY3IJcDE1LCAwLCBpcCwgYzgsIGM2LCAwCQlAIEludmFsaWRhdGUgRC1UTEIKKwljcHdhaXRfcmV0IGxyLCBpcAorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFBhZ2VUYWJsZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworI2RlZmluZSBQVEVfQ0FDSEVfV1JJVEVfQUxMT0NBVEUgMAorCisvKgorICogY3B1X3hzY2FsZV9zd2l0Y2hfbW0ocGdkKQorICoKKyAqIFNldCB0aGUgdHJhbnNsYXRpb24gYmFzZSBwb2ludGVyIHRvIGJlIGFzIGRlc2NyaWJlZCBieSBwZ2QuCisgKgorICogcGdkOiBuZXcgcGFnZSB0YWJsZXMKKyAqLworCS5hbGlnbgk1CitFTlRSWShjcHVfeHNjYWxlX3N3aXRjaF9tbSkKKwljbGVhbl9kX2NhY2hlIHIxLCByMgorCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgSW52YWxpZGF0ZSBJIGNhY2hlICYgQlRCCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgRHJhaW4gV3JpdGUgKCYgRmlsbCkgQnVmZmVyCisJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBsb2FkIHBhZ2UgdGFibGUgcG9pbnRlcgorCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisJY3B3YWl0X3JldCBsciwgaXAKKworLyoKKyAqIGNwdV94c2NhbGVfc2V0X3B0ZShwdGVwLCBwdGUpCisgKgorICogU2V0IGEgUFRFIGFuZCBmbHVzaCBpdCBvdXQKKyAqCisgKiBFcnJhdGEgNDA6IG11c3Qgc2V0IG1lbW9yeSB0byB3cml0ZS10aHJvdWdoIGZvciB1c2VyIHJlYWQtb25seSBwYWdlcy4KKyAqLworCS5hbGlnbgk1CitFTlRSWShjcHVfeHNjYWxlX3NldF9wdGUpCisJc3RyCXIxLCBbcjBdLCAjLTIwNDgJCUAgbGludXggdmVyc2lvbgorCisJYmljCXIyLCByMSwgIzB4ZmYwCisJb3JyCXIyLCByMiwgI1BURV9UWVBFX0VYVAkJQCBleHRlbmRlZCBwYWdlCisKKwllb3IJcjMsIHIxLCAjTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfV1JJVEUgfCBMX1BURV9ESVJUWQorCisJdHN0CXIzLCAjTF9QVEVfVVNFUgkJCUAgVXNlcj8KKwlvcnJuZQlyMiwgcjIsICNQVEVfRVhUX0FQX1VST19TUlcJQCB5ZXMgLT4gdXNlciByL28sIHN5c3RlbSByL3cKKworCXRzdAlyMywgI0xfUFRFX1dSSVRFIHwgTF9QVEVfRElSVFkJQCBXcml0ZSBhbmQgRGlydHk/CisJb3JyZXEJcjIsIHIyLCAjUFRFX0VYVF9BUF9VTk9fU1JXCUAgeWVzIC0+IHVzZXIgbi9hLCBzeXN0ZW0gci93CisJCQkJCQlAIGNvbWJpbmVkIHdpdGggdXNlciAtPiB1c2VyIHIvdworCisJQAorCUAgSGFuZGxlIHRoZSBYIGJpdC4gIFdlIHdhbnQgdG8gc2V0IHRoaXMgYml0IGZvciB0aGUgbWluaWNhY2hlCisJQCAoVSA9IEUgPSBCID0gVyA9IDAsIEMgPSAxKSBvciB3aGVuIHdyaXRlIGFsbG9jYXRlIGlzIGVuYWJsZWQsCisJQCBhbmQgd2UgaGF2ZSBhIHdyaXRlYWJsZSwgY2FjaGVhYmxlIHJlZ2lvbi4gIElmIHdlIGlnbm9yZSB0aGUKKwlAIFUgYW5kIEUgYml0cywgd2UgY2FuIGFsbG93IHVzZXIgc3BhY2UgdG8gdXNlIHRoZSBtaW5pY2FjaGUgYXMKKwlAIHdlbGwuCisJQAorCUAgIFggPSAoQyAmIH5XICYgfkIpIHwgKEMgJiBXICYgQiAmIHdyaXRlX2FsbG9jYXRlKQorCUAKKwllb3IJaXAsIHIxLCAjTF9QVEVfQ0FDSEVBQkxFCisJdHN0CWlwLCAjTF9QVEVfQ0FDSEVBQkxFIHwgTF9QVEVfV1JJVEUgfCBMX1BURV9CVUZGRVJBQkxFCisjaWYgUFRFX0NBQ0hFX1dSSVRFX0FMTE9DQVRFCisJZW9ybmUJaXAsIHIxLCAjTF9QVEVfQ0FDSEVBQkxFIHwgTF9QVEVfV1JJVEUgfCBMX1BURV9CVUZGRVJBQkxFCisJdHN0bmUJaXAsICNMX1BURV9DQUNIRUFCTEUgfCBMX1BURV9XUklURSB8IExfUFRFX0JVRkZFUkFCTEUKKyNlbmRpZgorCW9ycmVxCXIyLCByMiwgI1BURV9FWFRfVEVYKDEpCisKKwlACisJQCBFcnJhdHVtIDQwOiBUaGUgQiBiaXQgbXVzdCBiZSBjbGVhcmVkIGZvciBhIHVzZXIgcmVhZC1vbmx5CisJQCBjYWNoZWFibGUgcGFnZS4KKwlACisJQCAgQiA9IEIgJiB+KFUgJiBDICYgflcpCisJQAorCWFuZAlpcCwgcjEsICNMX1BURV9VU0VSIHwgTF9QVEVfV1JJVEUgfCBMX1BURV9DQUNIRUFCTEUKKwl0ZXEJaXAsICNMX1BURV9VU0VSIHwgTF9QVEVfQ0FDSEVBQkxFCisJYmljZXEJcjIsIHIyLCAjUFRFX0JVRkZFUkFCTEUKKworCXRzdAlyMywgI0xfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORwlAIFByZXNlbnQgYW5kIFlvdW5nPworCW1vdm5lCXIyLCAjMAkJCQlAIG5vIC0+IGZhdWx0CisKKwlzdHIJcjIsIFtyMF0JCQlAIGhhcmR3YXJlIHZlcnNpb24KKwltb3YJaXAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgQ2xlYW4gRCBjYWNoZSBsaW5lCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgRHJhaW4gV3JpdGUgKCYgRmlsbCkgQnVmZmVyCisJbW92CXBjLCBscgorCisKKwkubHRvcmcKKworCS5hbGlnbgorCisJX19JTklUCisKKwkudHlwZQlfX3hzY2FsZV9zZXR1cCwgI2Z1bmN0aW9uCitfX3hzY2FsZV9zZXR1cDoKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM3LCAwCQlAIGludmFsaWRhdGUgSSwgRCBjYWNoZXMgJiBCVEIKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBEcmFpbiBXcml0ZSAoJiBGaWxsKSBCdWZmZXIKKwltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSwgRCBUTEJzCisjaWZkZWYgQ09ORklHX0lXTU1YVAorCW1vdglyMCwgIzAJCQkJQCBpbml0aWFsbHkgZGlzYWxsb3cgYWNjZXNzIHRvIENQMC9DUDEKKyNlbHNlCisJbW92CXIwLCAjMQkJCQlAIEFsbG93IGFjY2VzcyB0byBDUDAKKyNlbmRpZgorCW9yciAgICAgcjAsIHIwLCAjMSA8PCA2CQkJQCBjcDYgZm9yIElPUDN4eCBhbmQgQnVsdmVyZGUKKwlvcnIJcjAsIHIwLCAjMSA8PCAxMwkJQCBJdHMgdW5kZWZpbmVkIHdoZXRoZXIgdGhpcworCW1jcglwMTUsIDAsIHIwLCBjMTUsIGMxLCAwCQlAIGFmZmVjdHMgVVNSIG9yIFNWQyBtb2RlcworCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgZ2V0IGNvbnRyb2wgcmVnaXN0ZXIKKwlsZHIJcjUsIHhzY2FsZV9jcjFfY2xlYXIKKwliaWMJcjAsIHIwLCByNQorCWxkcglyNSwgeHNjYWxlX2NyMV9zZXQKKwlvcnIJcjAsIHIwLCByNQorCW1vdglwYywgbHIKKwkuc2l6ZQlfX3hzY2FsZV9zZXR1cCwgLiAtIF9feHNjYWxlX3NldHVwCisKKwkvKgorCSAqICBSCisJICogLlJWSSBaRlJTIEJMRFAgV0NBTQorCSAqIC4uMTEgMS4wMSAuLi4uIC4xMDEKKwkgKiAKKwkgKi8KKwkudHlwZQl4c2NhbGVfY3IxX2NsZWFyLCAjb2JqZWN0CisJLnR5cGUJeHNjYWxlX2NyMV9zZXQsICNvYmplY3QKK3hzY2FsZV9jcjFfY2xlYXI6CisJLndvcmQJMHgzYjA3Cit4c2NhbGVfY3IxX3NldDoKKwkud29yZAkweDM5MDUKKworCV9fSU5JVERBVEEKKworLyoKKyAqIFB1cnBvc2UgOiBGdW5jdGlvbiBwb2ludGVycyB1c2VkIHRvIGFjY2VzcyBhYm92ZSBmdW5jdGlvbnMgLSBhbGwgY2FsbHMKKyAqCSAgICAgY29tZSB0aHJvdWdoIHRoZXNlCisgKi8KKworCS50eXBlCXhzY2FsZV9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CitFTlRSWSh4c2NhbGVfcHJvY2Vzc29yX2Z1bmN0aW9ucykKKwkud29yZAl2NXRfZWFybHlfYWJvcnQKKwkud29yZAljcHVfeHNjYWxlX3Byb2NfaW5pdAorCS53b3JkCWNwdV94c2NhbGVfcHJvY19maW4KKwkud29yZAljcHVfeHNjYWxlX3Jlc2V0CisJLndvcmQJY3B1X3hzY2FsZV9kb19pZGxlCisJLndvcmQJY3B1X3hzY2FsZV9kY2FjaGVfY2xlYW5fYXJlYQorCS53b3JkCWNwdV94c2NhbGVfc3dpdGNoX21tCisJLndvcmQJY3B1X3hzY2FsZV9zZXRfcHRlCisJLnNpemUJeHNjYWxlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSB4c2NhbGVfcHJvY2Vzc29yX2Z1bmN0aW9ucworCisJLnNlY3Rpb24gIi5yb2RhdGEiCisKKwkudHlwZQljcHVfYXJjaF9uYW1lLCAjb2JqZWN0CitjcHVfYXJjaF9uYW1lOgorCS5hc2NpegkiYXJtdjV0ZSIKKwkuc2l6ZQljcHVfYXJjaF9uYW1lLCAuIC0gY3B1X2FyY2hfbmFtZQorCisJLnR5cGUJY3B1X2VsZl9uYW1lLCAjb2JqZWN0CitjcHVfZWxmX25hbWU6CisJLmFzY2l6CSJ2NSIKKwkuc2l6ZQljcHVfZWxmX25hbWUsIC4gLSBjcHVfZWxmX25hbWUKKworCS50eXBlCWNwdV84MDIwMF9uYW1lLCAjb2JqZWN0CitjcHVfODAyMDBfbmFtZToKKwkuYXNjaXoJIlhTY2FsZS04MDIwMCIKKwkuc2l6ZQljcHVfODAyMDBfbmFtZSwgLiAtIGNwdV84MDIwMF9uYW1lCisKKwkudHlwZQljcHVfODAzMnhfbmFtZSwgI29iamVjdAorY3B1XzgwMzJ4X25hbWU6CisJLmFzY2l6CSJYU2NhbGUtSU9QODAzMnggRmFtaWx5IgorCS5zaXplCWNwdV84MDMyeF9uYW1lLCAuIC0gY3B1XzgwMzJ4X25hbWUKKworCS50eXBlCWNwdV84MDMzeF9uYW1lLCAjb2JqZWN0CitjcHVfODAzM3hfbmFtZToKKwkuYXNjaXoJIlhTY2FsZS1JT1A4MDMzeCBGYW1pbHkiCisJLnNpemUJY3B1XzgwMzN4X25hbWUsIC4gLSBjcHVfODAzM3hfbmFtZQorCisJLnR5cGUJY3B1X3B4YTI1MF9uYW1lLCAjb2JqZWN0CitjcHVfcHhhMjUwX25hbWU6CisJLmFzY2l6CSJYU2NhbGUtUFhBMjUwIgorCS5zaXplCWNwdV9weGEyNTBfbmFtZSwgLiAtIGNwdV9weGEyNTBfbmFtZQorCisJLnR5cGUJY3B1X3B4YTIxMF9uYW1lLCAjb2JqZWN0CitjcHVfcHhhMjEwX25hbWU6CisJLmFzY2l6CSJYU2NhbGUtUFhBMjEwIgorCS5zaXplCWNwdV9weGEyMTBfbmFtZSwgLiAtIGNwdV9weGEyMTBfbmFtZQorCisJLnR5cGUJY3B1X2l4cDQyeF9uYW1lLCAjb2JqZWN0CitjcHVfaXhwNDJ4X25hbWU6CisJLmFzY2l6CSJYU2NhbGUtSVhQNDJ4IEZhbWlseSIKKwkuc2l6ZQljcHVfaXhwNDJ4X25hbWUsIC4gLSBjcHVfaXhwNDJ4X25hbWUKKworCS50eXBlCWNwdV9peHA0NnhfbmFtZSwgI29iamVjdAorY3B1X2l4cDQ2eF9uYW1lOgorCS5hc2NpegkiWFNjYWxlLUlYUDQ2eCBGYW1pbHkiCisJLnNpemUJY3B1X2l4cDQ2eF9uYW1lLCAuIC0gY3B1X2l4cDQ2eF9uYW1lCisKKwkudHlwZQljcHVfaXhwMjQwMF9uYW1lLCAjb2JqZWN0CitjcHVfaXhwMjQwMF9uYW1lOgorCS5hc2NpegkiWFNjYWxlLUlYUDI0MDAiCisJLnNpemUJY3B1X2l4cDI0MDBfbmFtZSwgLiAtIGNwdV9peHAyNDAwX25hbWUKKworCS50eXBlCWNwdV9peHAyODAwX25hbWUsICNvYmplY3QKK2NwdV9peHAyODAwX25hbWU6CisJLmFzY2l6CSJYU2NhbGUtSVhQMjgwMCIKKwkuc2l6ZQljcHVfaXhwMjgwMF9uYW1lLCAuIC0gY3B1X2l4cDI4MDBfbmFtZQorCisJLnR5cGUJY3B1X3B4YTI1NV9uYW1lLCAjb2JqZWN0CitjcHVfcHhhMjU1X25hbWU6CisJLmFzY2l6CSJYU2NhbGUtUFhBMjU1IgorCS5zaXplCWNwdV9weGEyNTVfbmFtZSwgLiAtIGNwdV9weGEyNTVfbmFtZQorCisJLnR5cGUJY3B1X3B4YTI3MF9uYW1lLCAjb2JqZWN0CitjcHVfcHhhMjcwX25hbWU6CisJLmFzY2l6CSJYU2NhbGUtUFhBMjcwIgorCS5zaXplCWNwdV9weGEyNzBfbmFtZSwgLiAtIGNwdV9weGEyNzBfbmFtZQorCisJLmFsaWduCisKKwkuc2VjdGlvbiAiLnByb2MuaW5mbyIsICNhbGxvYywgI2V4ZWNpbnN0cgorCisJLnR5cGUJX184MDIwMF9wcm9jX2luZm8sI29iamVjdAorX184MDIwMF9wcm9jX2luZm86CisJLmxvbmcJMHg2OTA1MjAwMAorCS5sb25nCTB4ZmZmZmZmZjAKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCisJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKKwliCV9feHNjYWxlX3NldHVwCisJLmxvbmcJY3B1X2FyY2hfbmFtZQorCS5sb25nCWNwdV9lbGZfbmFtZQorCS5sb25nCUhXQ0FQX1NXUHxIV0NBUF9IQUxGfEhXQ0FQX1RIVU1CfEhXQ0FQX0ZBU1RfTVVMVHxIV0NBUF9FRFNQCisJLmxvbmcJY3B1XzgwMjAwX25hbWUKKwkubG9uZwl4c2NhbGVfcHJvY2Vzc29yX2Z1bmN0aW9ucworCS5sb25nCXY0d2JpX3RsYl9mbnMKKwkubG9uZwl4c2NhbGVfbWNfdXNlcl9mbnMKKwkubG9uZwl4c2NhbGVfY2FjaGVfZm5zCisJLnNpemUJX184MDIwMF9wcm9jX2luZm8sIC4gLSBfXzgwMjAwX3Byb2NfaW5mbworCisJLnR5cGUJX184MDMyeF9wcm9jX2luZm8sI29iamVjdAorX184MDMyeF9wcm9jX2luZm86CisJLmxvbmcJMHg2OTA1MjQyMAorCS5sb25nCTB4ZmZmZmY1ZTAgICAgICBAIG1hc2sgc2hvdWxkIGFjY29tb2RhdGUgSU9QODAyMTkgYWxzbworCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKKwkJUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKKwkJUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAorCWIJX194c2NhbGVfc2V0dXAKKwkubG9uZwljcHVfYXJjaF9uYW1lCisJLmxvbmcJY3B1X2VsZl9uYW1lCisJLmxvbmcJSFdDQVBfU1dQfEhXQ0FQX0hBTEZ8SFdDQVBfVEhVTUJ8SFdDQVBfRkFTVF9NVUxUfEhXQ0FQX0VEU1AKKwkubG9uZwljcHVfODAzMnhfbmFtZQorCS5sb25nCXhzY2FsZV9wcm9jZXNzb3JfZnVuY3Rpb25zCisJLmxvbmcJdjR3YmlfdGxiX2ZucworCS5sb25nCXhzY2FsZV9tY191c2VyX2ZucworCS5sb25nCXhzY2FsZV9jYWNoZV9mbnMKKwkuc2l6ZQlfXzgwMzJ4X3Byb2NfaW5mbywgLiAtIF9fODAzMnhfcHJvY19pbmZvCisKKwkudHlwZQlfXzgwMzN4X3Byb2NfaW5mbywjb2JqZWN0CitfXzgwMzN4X3Byb2NfaW5mbzoKKwkubG9uZwkweDY5MDU0MDEwCisJLmxvbmcJMHhmZmZmZmYzMAorCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKKwkJUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKKwkJUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAorCWIJX194c2NhbGVfc2V0dXAKKwkubG9uZwljcHVfYXJjaF9uYW1lCisJLmxvbmcJY3B1X2VsZl9uYW1lCisJLmxvbmcJSFdDQVBfU1dQfEhXQ0FQX0hBTEZ8SFdDQVBfVEhVTUJ8SFdDQVBfRkFTVF9NVUxUfEhXQ0FQX0VEU1AKKwkubG9uZwljcHVfODAzM3hfbmFtZQorCS5sb25nCXhzY2FsZV9wcm9jZXNzb3JfZnVuY3Rpb25zCisJLmxvbmcJdjR3YmlfdGxiX2ZucworCS5sb25nCXhzY2FsZV9tY191c2VyX2ZucworCS5sb25nCXhzY2FsZV9jYWNoZV9mbnMKKwkuc2l6ZQlfXzgwMzN4X3Byb2NfaW5mbywgLiAtIF9fODAzM3hfcHJvY19pbmZvCisKKwkudHlwZQlfX3B4YTI1MF9wcm9jX2luZm8sI29iamVjdAorX19weGEyNTBfcHJvY19pbmZvOgorCS5sb25nCTB4NjkwNTIxMDAKKwkubG9uZwkweGZmZmZmN2YwCisJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQlQTURfU0VDVF9CVUZGRVJBQkxFIHwgXAorCQlQTURfU0VDVF9DQUNIRUFCTEUgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECisJYglfX3hzY2FsZV9zZXR1cAorCS5sb25nCWNwdV9hcmNoX25hbWUKKwkubG9uZwljcHVfZWxmX25hbWUKKwkubG9uZwlIV0NBUF9TV1B8SFdDQVBfSEFMRnxIV0NBUF9USFVNQnxIV0NBUF9GQVNUX01VTFR8SFdDQVBfRURTUAorCS5sb25nCWNwdV9weGEyNTBfbmFtZQorCS5sb25nCXhzY2FsZV9wcm9jZXNzb3JfZnVuY3Rpb25zCisJLmxvbmcJdjR3YmlfdGxiX2ZucworCS5sb25nCXhzY2FsZV9tY191c2VyX2ZucworCS5sb25nCXhzY2FsZV9jYWNoZV9mbnMKKwkuc2l6ZQlfX3B4YTI1MF9wcm9jX2luZm8sIC4gLSBfX3B4YTI1MF9wcm9jX2luZm8KKworCS50eXBlCV9fcHhhMjEwX3Byb2NfaW5mbywjb2JqZWN0CitfX3B4YTIxMF9wcm9jX2luZm86CisJLmxvbmcJMHg2OTA1MjEyMAorCS5sb25nCTB4ZmZmZmYzZjAKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCisJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKKwliCV9feHNjYWxlX3NldHVwCisJLmxvbmcJY3B1X2FyY2hfbmFtZQorCS5sb25nCWNwdV9lbGZfbmFtZQorCS5sb25nCUhXQ0FQX1NXUHxIV0NBUF9IQUxGfEhXQ0FQX1RIVU1CfEhXQ0FQX0ZBU1RfTVVMVHxIV0NBUF9FRFNQCisJLmxvbmcJY3B1X3B4YTIxMF9uYW1lCisJLmxvbmcJeHNjYWxlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKwkubG9uZwl2NHdiaV90bGJfZm5zCisJLmxvbmcJeHNjYWxlX21jX3VzZXJfZm5zCisJLmxvbmcJeHNjYWxlX2NhY2hlX2ZucworCS5zaXplCV9fcHhhMjEwX3Byb2NfaW5mbywgLiAtIF9fcHhhMjEwX3Byb2NfaW5mbworCisJLnR5cGUJX19peHAyNDAwX3Byb2NfaW5mbywgI29iamVjdAorX19peHAyNDAwX3Byb2NfaW5mbzoKKwkubG9uZyAgIDB4NjkwNTQxOTAKKwkubG9uZyAgIDB4ZmZmZmZmZjAKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCisJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKKwliICAgICAgIF9feHNjYWxlX3NldHVwCisJLmxvbmcgICBjcHVfYXJjaF9uYW1lCisJLmxvbmcgICBjcHVfZWxmX25hbWUKKwkubG9uZyAgIEhXQ0FQX1NXUHxIV0NBUF9IQUxGfEhXQ0FQX1RIVU1CfEhXQ0FQX0ZBU1RfTVVMVHxIV0NBUF9FRFNQCisJLmxvbmcgICBjcHVfaXhwMjQwMF9uYW1lCisJLmxvbmcgICB4c2NhbGVfcHJvY2Vzc29yX2Z1bmN0aW9ucworCS5sb25nCXY0d2JpX3RsYl9mbnMKKwkubG9uZwl4c2NhbGVfbWNfdXNlcl9mbnMKKwkubG9uZwl4c2NhbGVfY2FjaGVfZm5zCisJLnNpemUgICBfX2l4cDI0MDBfcHJvY19pbmZvLCAuIC0gX19peHAyNDAwX3Byb2NfaW5mbyAgICAgICAgICAgICAgICAKKworCS50eXBlCV9faXhwMjgwMF9wcm9jX2luZm8sICNvYmplY3QKK19faXhwMjgwMF9wcm9jX2luZm86CisJLmxvbmcgICAweDY5MDU0MWEwCisJLmxvbmcgICAweGZmZmZmZmYwCisJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQlQTURfU0VDVF9CVUZGRVJBQkxFIHwgXAorCQlQTURfU0VDVF9DQUNIRUFCTEUgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECisJYiAgICAgICBfX3hzY2FsZV9zZXR1cAorCS5sb25nICAgY3B1X2FyY2hfbmFtZQorCS5sb25nICAgY3B1X2VsZl9uYW1lCisJLmxvbmcgICBIV0NBUF9TV1B8SFdDQVBfSEFMRnxIV0NBUF9USFVNQnxIV0NBUF9GQVNUX01VTFR8SFdDQVBfRURTUAorCS5sb25nICAgY3B1X2l4cDI4MDBfbmFtZQorCS5sb25nICAgeHNjYWxlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKwkubG9uZwl2NHdiaV90bGJfZm5zCisJLmxvbmcJeHNjYWxlX21jX3VzZXJfZm5zCisJLmxvbmcJeHNjYWxlX2NhY2hlX2ZucworCS5zaXplICAgX19peHAyODAwX3Byb2NfaW5mbywgLiAtIF9faXhwMjgwMF9wcm9jX2luZm8gICAgICAgICAgICAgICAgCisKKwkudHlwZQlfX2l4cDQyeF9wcm9jX2luZm8sICNvYmplY3QKK19faXhwNDJ4X3Byb2NfaW5mbzoKKwkubG9uZyAgIDB4NjkwNTQxYzAKKwkubG9uZyAgIDB4ZmZmZmZmYzAKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCisJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKKwliICAgICAgIF9feHNjYWxlX3NldHVwCisJLmxvbmcgICBjcHVfYXJjaF9uYW1lCisJLmxvbmcgICBjcHVfZWxmX25hbWUKKwkubG9uZyAgIEhXQ0FQX1NXUHxIV0NBUF9IQUxGfEhXQ0FQX1RIVU1CfEhXQ0FQX0ZBU1RfTVVMVHxIV0NBUF9FRFNQCisJLmxvbmcgICBjcHVfaXhwNDJ4X25hbWUKKwkubG9uZyAgIHhzY2FsZV9wcm9jZXNzb3JfZnVuY3Rpb25zCisJLmxvbmcJdjR3YmlfdGxiX2ZucworCS5sb25nCXhzY2FsZV9tY191c2VyX2ZucworCS5sb25nCXhzY2FsZV9jYWNoZV9mbnMKKwkuc2l6ZSAgIF9faXhwNDJ4X3Byb2NfaW5mbywgLiAtIF9faXhwNDJ4X3Byb2NfaW5mbyAgICAgICAgICAgICAgICAKKworCS50eXBlCV9faXhwNDZ4X3Byb2NfaW5mbywgI29iamVjdAorX19peHA0NnhfcHJvY19pbmZvOgorCS5sb25nICAgMHg2OTA1NDIwMAorCS5sb25nICAgMHhmZmZmZmYwMAorCS5sb25nICAgMHgwMDAwMGMwZQorCWIgICAgICAgX194c2NhbGVfc2V0dXAKKwkubG9uZyAgIGNwdV9hcmNoX25hbWUKKwkubG9uZyAgIGNwdV9lbGZfbmFtZQorCS5sb25nICAgSFdDQVBfU1dQfEhXQ0FQX0hBTEZ8SFdDQVBfVEhVTUJ8SFdDQVBfRkFTVF9NVUxUfEhXQ0FQX0VEU1AKKwkubG9uZyAgIGNwdV9peHA0NnhfbmFtZQorCS5sb25nICAgeHNjYWxlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKwkubG9uZwl2NHdiaV90bGJfZm5zCisJLmxvbmcJeHNjYWxlX21jX3VzZXJfZm5zCisJLmxvbmcJeHNjYWxlX2NhY2hlX2ZucworCS5zaXplICAgX19peHA0NnhfcHJvY19pbmZvLCAuIC0gX19peHA0NnhfcHJvY19pbmZvCisKKwkudHlwZQlfX3B4YTI1NV9wcm9jX2luZm8sI29iamVjdAorX19weGEyNTVfcHJvY19pbmZvOgorCS5sb25nCTB4NjkwNTJkMDAKKwkubG9uZwkweGZmZmZmZmYwCisJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQlQTURfU0VDVF9CVUZGRVJBQkxFIHwgXAorCQlQTURfU0VDVF9DQUNIRUFCTEUgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECisJYglfX3hzY2FsZV9zZXR1cAorCS5sb25nCWNwdV9hcmNoX25hbWUKKwkubG9uZwljcHVfZWxmX25hbWUKKwkubG9uZwlIV0NBUF9TV1B8SFdDQVBfSEFMRnxIV0NBUF9USFVNQnxIV0NBUF9GQVNUX01VTFR8SFdDQVBfRURTUAorCS5sb25nCWNwdV9weGEyNTVfbmFtZQorCS5sb25nCXhzY2FsZV9wcm9jZXNzb3JfZnVuY3Rpb25zCisJLmxvbmcJdjR3YmlfdGxiX2ZucworCS5sb25nCXhzY2FsZV9tY191c2VyX2ZucworCS5sb25nCXhzY2FsZV9jYWNoZV9mbnMKKwkuc2l6ZQlfX3B4YTI1NV9wcm9jX2luZm8sIC4gLSBfX3B4YTI1NV9wcm9jX2luZm8KKworCS50eXBlCV9fcHhhMjcwX3Byb2NfaW5mbywjb2JqZWN0CitfX3B4YTI3MF9wcm9jX2luZm86CisJLmxvbmcJMHg2OTA1NDExMAorCS5sb25nCTB4ZmZmZmZmZjAKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCisJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKKwliCV9feHNjYWxlX3NldHVwCisJLmxvbmcJY3B1X2FyY2hfbmFtZQorCS5sb25nCWNwdV9lbGZfbmFtZQorCS5sb25nCUhXQ0FQX1NXUHxIV0NBUF9IQUxGfEhXQ0FQX1RIVU1CfEhXQ0FQX0ZBU1RfTVVMVHxIV0NBUF9FRFNQCisJLmxvbmcJY3B1X3B4YTI3MF9uYW1lCisJLmxvbmcJeHNjYWxlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKwkubG9uZwl2NHdiaV90bGJfZm5zCisJLmxvbmcJeHNjYWxlX21jX3VzZXJfZm5zCisJLmxvbmcJeHNjYWxlX2NhY2hlX2ZucworCS5zaXplCV9fcHhhMjcwX3Byb2NfaW5mbywgLiAtIF9fcHhhMjcwX3Byb2NfaW5mbworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS90bGItdjMuUyBiL2FyY2gvYXJtL21tL3RsYi12My5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YjBkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS90bGItdjMuUwpAQCAtMCwwICsxLDUyIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21tL3RsYnYzLlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQVJNIGFyY2hpdGVjdHVyZSB2ZXJzaW9uIDMgVExCIGhhbmRsaW5nIGZ1bmN0aW9ucy4KKyAqCisgKiBQcm9jZXNzb3JzOiBBUk02MTAsIEFSTTcxMC4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2NvbnN0YW50cy5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCisKKwkuYWxpZ24JNQorLyoKKyAqCXYzX2ZsdXNoX3VzZXJfdGxiX3JhbmdlKHN0YXJ0LCBlbmQsIG1tKQorICoKKyAqCUludmFsaWRhdGUgYSByYW5nZSBvZiBUTEIgZW50cmllcyBpbiB0aGUgc3BlY2lmaWVkIGFkZHJlc3Mgc3BhY2UuCisgKgorICoJLSBzdGFydCAtIHJhbmdlIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kICAgLSByYW5nZSBlbmQgYWRkcmVzcworICoJLSBtbSAgICAtIG1tX3N0cnVjdCBkZXNjcmliaW5nIGFkZHJlc3Mgc3BhY2UKKyAqLworCS5hbGlnbgk1CitFTlRSWSh2M19mbHVzaF91c2VyX3RsYl9yYW5nZSkKKwl2bWFfdm1fbW0gcjIsIHIyCisJYWN0X21tCXIzCQkJCUAgZ2V0IGN1cnJlbnQtPmFjdGl2ZV9tbQorCXRlcQlyMiwgcjMJCQkJQCA9PSBtbSA/CisJbW92bmUJcGMsIGxyCQkJCUAgbm8sIHdlIGRvbnQgZG8gYW55dGhpbmcKK0VOVFJZKHYzX2ZsdXNoX2tlcm5fdGxiX3JhbmdlKQorCWJpYwlyMCwgcjAsICMweDBmZgorCWJpYwlyMCwgcjAsICMweGYwMAorMToJbWNyCXAxNSwgMCwgcjAsIGM2LCBjMCwgMAkJQCBpbnZhbGlkYXRlIFRMQiBlbnRyeQorCWFkZAlyMCwgcjAsICNQQUdFX1NaCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1vdglwYywgbHIKKworCV9fSU5JVERBVEEKKworCS50eXBlCXYzX3RsYl9mbnMsICNvYmplY3QKK0VOVFJZKHYzX3RsYl9mbnMpCisJLmxvbmcJdjNfZmx1c2hfdXNlcl90bGJfcmFuZ2UKKwkubG9uZwl2M19mbHVzaF9rZXJuX3RsYl9yYW5nZQorCS5sb25nCXYzX3RsYl9mbGFncworCS5zaXplCXYzX3RsYl9mbnMsIC4gLSB2M190bGJfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS90bGItdjQuUyBiL2FyY2gvYXJtL21tL3RsYi12NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiODJlZTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS90bGItdjQuUwpAQCAtMCwwICsxLDY1IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21tL3RsYnY0LlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQVJNIGFyY2hpdGVjdHVyZSB2ZXJzaW9uIDQgVExCIGhhbmRsaW5nIGZ1bmN0aW9ucy4KKyAqICBUaGVzZSBhc3N1bWUgYSBzcGxpdCBJL0QgVExCcywgYW5kIG5vIHdyaXRlIGJ1ZmZlci4KKyAqCisgKiBQcm9jZXNzb3JzOiBBUk03MjBUCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9jb25zdGFudHMuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlICJwcm9jLW1hY3Jvcy5TIgorCisJLmFsaWduCTUKKy8qCisgKgl2NF9mbHVzaF91c2VyX3RsYl9yYW5nZShzdGFydCwgZW5kLCBtbSkKKyAqCisgKglJbnZhbGlkYXRlIGEgcmFuZ2Ugb2YgVExCIGVudHJpZXMgaW4gdGhlIHNwZWNpZmllZCB1c2VyIGFkZHJlc3Mgc3BhY2UuCisgKgorICoJLSBzdGFydCAtIHJhbmdlIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kICAgLSByYW5nZSBlbmQgYWRkcmVzcworICoJLSBtbSAgICAtIG1tX3N0cnVjdCBkZXNjcmliaW5nIGFkZHJlc3Mgc3BhY2UKKyAqLworCS5hbGlnbgk1CitFTlRSWSh2NF9mbHVzaF91c2VyX3RsYl9yYW5nZSkKKwl2bWFfdm1fbW0gaXAsIHIyCisJYWN0X21tCXIzCQkJCUAgZ2V0IGN1cnJlbnQtPmFjdGl2ZV9tbQorCWVvcnMJcjMsIGlwLCByMwkJCQlAID09IG1tID8KKwltb3ZuZQlwYywgbHIJCQkJQCBubywgd2UgZG9udCBkbyBhbnl0aGluZworLnY0X2ZsdXNoX2tlcm5fdGxiX3JhbmdlOgorCWJpYwlyMCwgcjAsICMweDBmZgorCWJpYwlyMCwgcjAsICMweGYwMAorMToJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMQkJQCBpbnZhbGlkYXRlIFRMQiBlbnRyeQorCWFkZAlyMCwgcjAsICNQQUdFX1NaCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1vdglwYywgbHIKKworLyoKKyAqCXY0X2ZsdXNoX2tlcm5fdGxiX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJSW52YWxpZGF0ZSBhIHJhbmdlIG9mIFRMQiBlbnRyaWVzIGluIHRoZSBzcGVjaWZpZWQga2VybmVsCisgKglhZGRyZXNzIHJhbmdlLgorICoKKyAqCS0gc3RhcnQgLSB2aXJ0dWFsIGFkZHJlc3MgKG1heSBub3QgYmUgYWxpZ25lZCkKKyAqCS0gZW5kICAgLSB2aXJ0dWFsIGFkZHJlc3MgKG1heSBub3QgYmUgYWxpZ25lZCkKKyAqLworLmdsb2JsIHY0X2ZsdXNoX2tlcm5fdGxiX3JhbmdlCisuZXF1IHY0X2ZsdXNoX2tlcm5fdGxiX3JhbmdlLCAudjRfZmx1c2hfa2Vybl90bGJfcmFuZ2UKKworCV9fSU5JVERBVEEKKworCS50eXBlCXY0X3RsYl9mbnMsICNvYmplY3QKK0VOVFJZKHY0X3RsYl9mbnMpCisJLmxvbmcJdjRfZmx1c2hfdXNlcl90bGJfcmFuZ2UKKwkubG9uZwl2NF9mbHVzaF9rZXJuX3RsYl9yYW5nZQorCS5sb25nCXY0X3RsYl9mbGFncworCS5zaXplCXY0X3RsYl9mbnMsIC4gLSB2NF90bGJfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS90bGItdjR3Yi5TIGIvYXJjaC9hcm0vbW0vdGxiLXY0d2IuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTA4ZDVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vdGxiLXY0d2IuUwpAQCAtMCwwICsxLDc3IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21tL3RsYnY0d2IuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBBUk0gYXJjaGl0ZWN0dXJlIHZlcnNpb24gNCBUTEIgaGFuZGxpbmcgZnVuY3Rpb25zLgorICogIFRoZXNlIGFzc3VtZSBhIHNwbGl0IEkvRCBUTEJzIHcvbyBJIFRMQiBlbnRyeSwgd2l0aCBhIHdyaXRlIGJ1ZmZlci4KKyAqCisgKiAgUHJvY2Vzc29yczogU0ExMTAgU0ExMTAwIFNBMTExMAorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSAicHJvYy1tYWNyb3MuUyIKKworCS5hbGlnbgk1CisvKgorICoJdjR3Yl9mbHVzaF91c2VyX3RsYl9yYW5nZShzdGFydCwgZW5kLCBtbSkKKyAqCisgKglJbnZhbGlkYXRlIGEgcmFuZ2Ugb2YgVExCIGVudHJpZXMgaW4gdGhlIHNwZWNpZmllZCBhZGRyZXNzIHNwYWNlLgorICoKKyAqCS0gc3RhcnQgLSByYW5nZSBzdGFydCBhZGRyZXNzCisgKgktIGVuZCAgIC0gcmFuZ2UgZW5kIGFkZHJlc3MKKyAqCS0gbW0gICAgLSBtbV9zdHJ1Y3QgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCisgKi8KKwkuYWxpZ24JNQorRU5UUlkodjR3Yl9mbHVzaF91c2VyX3RsYl9yYW5nZSkKKwl2bWFfdm1fbW0gaXAsIHIyCisJYWN0X21tCXIzCQkJCUAgZ2V0IGN1cnJlbnQtPmFjdGl2ZV9tbQorCWVvcnMJcjMsIGlwLCByMwkJCQlAID09IG1tID8KKwltb3ZuZQlwYywgbHIJCQkJQCBubywgd2UgZG9udCBkbyBhbnl0aGluZworCXZtYV92bV9mbGFncyByMiwgcjIKKwltY3IJcDE1LCAwLCByMywgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCXRzdAlyMiwgI1ZNX0VYRUMKKwltY3JuZQlwMTUsIDAsIHIzLCBjOCwgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIFRMQgorCWJpYwlyMCwgcjAsICMweDBmZgorCWJpYwlyMCwgcjAsICMweGYwMAorMToJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNiwgMQkJQCBpbnZhbGlkYXRlIEQgVExCIGVudHJ5CisJYWRkCXIwLCByMCwgI1BBR0VfU1oKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbW92CXBjLCBscgorCisvKgorICoJdjRfZmx1c2hfa2Vybl90bGJfcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglJbnZhbGlkYXRlIGEgcmFuZ2Ugb2YgVExCIGVudHJpZXMgaW4gdGhlIHNwZWNpZmllZCBrZXJuZWwKKyAqCWFkZHJlc3MgcmFuZ2UuCisgKgorICoJLSBzdGFydCAtIHZpcnR1YWwgYWRkcmVzcyAobWF5IG5vdCBiZSBhbGlnbmVkKQorICoJLSBlbmQgICAtIHZpcnR1YWwgYWRkcmVzcyAobWF5IG5vdCBiZSBhbGlnbmVkKQorICovCitFTlRSWSh2NHdiX2ZsdXNoX2tlcm5fdGxiX3JhbmdlKQorCW1vdglyMywgIzAKKwltY3IJcDE1LCAwLCByMywgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCWJpYwlyMCwgcjAsICMweDBmZgorCWJpYwlyMCwgcjAsICMweGYwMAorCW1jcglwMTUsIDAsIHIzLCBjOCwgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIFRMQgorMToJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNiwgMQkJQCBpbnZhbGlkYXRlIEQgVExCIGVudHJ5CisJYWRkCXIwLCByMCwgI1BBR0VfU1oKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbW92CXBjLCBscgorCisJX19JTklUREFUQQorCisJLnR5cGUJdjR3Yl90bGJfZm5zLCAjb2JqZWN0CitFTlRSWSh2NHdiX3RsYl9mbnMpCisJLmxvbmcJdjR3Yl9mbHVzaF91c2VyX3RsYl9yYW5nZQorCS5sb25nCXY0d2JfZmx1c2hfa2Vybl90bGJfcmFuZ2UKKwkubG9uZwl2NHdiX3RsYl9mbGFncworCS5zaXplCXY0d2JfdGxiX2ZucywgLiAtIHY0d2JfdGxiX2ZucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vdGxiLXY0d2JpLlMgYi9hcmNoL2FybS9tbS90bGItdjR3YmkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmJlOTRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vdGxiLXY0d2JpLlMKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS90bGJ2NHdiaS5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIEFSTSBhcmNoaXRlY3R1cmUgdmVyc2lvbiA0IGFuZCB2ZXJzaW9uIDUgVExCIGhhbmRsaW5nIGZ1bmN0aW9ucy4KKyAqICBUaGVzZSBhc3N1bWUgYSBzcGxpdCBJL0QgVExCcywgd2l0aCBhIHdyaXRlIGJ1ZmZlci4KKyAqCisgKiAgUHJvY2Vzc29yczogQVJNOTIwIEFSTTkyMiBBUk05MjUgQVJNOTI2IFhTY2FsZQorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSAicHJvYy1tYWNyb3MuUyIKKworLyoKKyAqCXY0d2JfZmx1c2hfdXNlcl90bGJfcmFuZ2Uoc3RhcnQsIGVuZCwgbW0pCisgKgorICoJSW52YWxpZGF0ZSBhIHJhbmdlIG9mIFRMQiBlbnRyaWVzIGluIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBzcGFjZS4KKyAqCisgKgktIHN0YXJ0IC0gcmFuZ2Ugc3RhcnQgYWRkcmVzcworICoJLSBlbmQgICAtIHJhbmdlIGVuZCBhZGRyZXNzCisgKgktIG1tICAgIC0gbW1fc3RydWN0IGRlc2NyaWJpbmcgYWRkcmVzcyBzcGFjZQorICovCisJLmFsaWduCTUKK0VOVFJZKHY0d2JpX2ZsdXNoX3VzZXJfdGxiX3JhbmdlKQorCXZtYV92bV9tbSBpcCwgcjIKKwlhY3RfbW0JcjMJCQkJQCBnZXQgY3VycmVudC0+YWN0aXZlX21tCisJZW9ycwlyMywgaXAsIHIzCQkJQCA9PSBtbSA/CisJbW92bmUJcGMsIGxyCQkJCUAgbm8sIHdlIGRvbnQgZG8gYW55dGhpbmcKKwltb3YJcjMsICMwCisJbWNyCXAxNSwgMCwgcjMsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwl2bWFfdm1fZmxhZ3MgcjIsIHIyCisJYmljCXIwLCByMCwgIzB4MGZmCisJYmljCXIwLCByMCwgIzB4ZjAwCisxOgl0c3QJcjIsICNWTV9FWEVDCisJbWNybmUJcDE1LCAwLCByMCwgYzgsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBUTEIgZW50cnkKKwltY3IJcDE1LCAwLCByMCwgYzgsIGM2LCAxCQlAIGludmFsaWRhdGUgRCBUTEIgZW50cnkKKwlhZGQJcjAsIHIwLCAjUEFHRV9TWgorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltb3YJcGMsIGxyCisKK0VOVFJZKHY0d2JpX2ZsdXNoX2tlcm5fdGxiX3JhbmdlKQorCW1vdglyMywgIzAKKwltY3IJcDE1LCAwLCByMywgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCWJpYwlyMCwgcjAsICMweDBmZgorCWJpYwlyMCwgcjAsICMweGYwMAorMToJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNSwgMQkJQCBpbnZhbGlkYXRlIEkgVExCIGVudHJ5CisJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNiwgMQkJQCBpbnZhbGlkYXRlIEQgVExCIGVudHJ5CisJYWRkCXIwLCByMCwgI1BBR0VfU1oKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbW92CXBjLCBscgorCisJX19JTklUREFUQQorCisJLnR5cGUJdjR3YmlfdGxiX2ZucywgI29iamVjdAorRU5UUlkodjR3YmlfdGxiX2ZucykKKwkubG9uZwl2NHdiaV9mbHVzaF91c2VyX3RsYl9yYW5nZQorCS5sb25nCXY0d2JpX2ZsdXNoX2tlcm5fdGxiX3JhbmdlCisJLmxvbmcJdjR3YmlfdGxiX2ZsYWdzCisJLnNpemUJdjR3YmlfdGxiX2ZucywgLiAtIHY0d2JpX3RsYl9mbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3RsYi12Ni5TIGIvYXJjaC9hcm0vbW0vdGxiLXY2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTllZDI2ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3RsYi12Ni5TCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vdGxiLXY2LlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQVJNIGFyY2hpdGVjdHVyZSB2ZXJzaW9uIDYgVExCIGhhbmRsaW5nIGZ1bmN0aW9ucy4KKyAqICBUaGVzZSBhc3N1bWUgYSBzcGxpdCBJL0QgVExCLgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9jb25zdGFudHMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCisKKyNkZWZpbmUgSEFSVkFSRF9UTEIKKworLyoKKyAqCXY2d2JpX2ZsdXNoX3VzZXJfdGxiX3JhbmdlKHN0YXJ0LCBlbmQsIHZtYSkKKyAqCisgKglJbnZhbGlkYXRlIGEgcmFuZ2Ugb2YgVExCIGVudHJpZXMgaW4gdGhlIHNwZWNpZmllZCBhZGRyZXNzIHNwYWNlLgorICoKKyAqCS0gc3RhcnQgLSBzdGFydCBhZGRyZXNzIChtYXkgbm90IGJlIGFsaWduZWQpCisgKgktIGVuZCAgIC0gZW5kIGFkZHJlc3MgKGV4Y2x1c2l2ZSwgbWF5IG5vdCBiZSBhbGlnbmVkKQorICoJLSB2bWEgICAtIHZtYV9zdHJ1Y3QgZGVzY3JpYmluZyBhZGRyZXNzIHJhbmdlCisgKgorICoJSXQgaXMgYXNzdW1lZCB0aGF0OgorICoJLSB0aGUgIkludmFsaWRhdGUgc2luZ2xlIGVudHJ5IiBpbnN0cnVjdGlvbiB3aWxsIGludmFsaWRhdGUKKyAqCSAgYm90aCB0aGUgSSBhbmQgdGhlIEQgVExCcyBvbiBIYXJ2YXJkLXN0eWxlIFRMQnMKKyAqLworRU5UUlkodjZ3YmlfZmx1c2hfdXNlcl90bGJfcmFuZ2UpCisJdm1hX3ZtX21tIHIzLCByMgkJCUAgZ2V0IHZtYS0+dm1fbW0KKwltb3YJaXAsICMwCisJbW1pZAlyMywgcjMJCQkJQCBnZXQgdm1fbW0tPmNvbnRleHQuaWQKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwltb3YJcjAsIHIwLCBsc3IgI1BBR0VfU0hJRlQJCUAgYWxpZ24gYWRkcmVzcworCW1vdglyMSwgcjEsIGxzciAjUEFHRV9TSElGVAorCWFzaWQJcjMsIHIzCQkJCUAgbWFzayBBU0lECisJb3JyCXIwLCByMywgcjAsIGxzbCAjUEFHRV9TSElGVAlAIENyZWF0ZSBpbml0aWFsIE1WQQorCW1vdglyMSwgcjEsIGxzbCAjUEFHRV9TSElGVAorCXZtYV92bV9mbGFncyByMiwgcjIJCQlAIGdldCB2bWEtPnZtX2ZsYWdzCisxOgorI2lmZGVmIEhBUlZBUkRfVExCCisJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNiwgMQkJQCBUTEIgaW52YWxpZGF0ZSBEIE1WQSAod2FzIDEpCisJdHN0CXIyLCAjVk1fRVhFQwkJCUAgRXhlY3V0YWJsZSBhcmVhID8KKwltY3JuZQlwMTUsIDAsIHIwLCBjOCwgYzUsIDEJCUAgVExCIGludmFsaWRhdGUgSSBNVkEgKHdhcyAxKQorI2Vsc2UKKwltY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAxCQlAIFRMQiBpbnZhbGlkYXRlIE1WQSAod2FzIDEpCisjZW5kaWYKKwlhZGQJcjAsIHIwLCAjUEFHRV9TWgorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltb3YJcGMsIGxyCisKKy8qCisgKgl2NndiaV9mbHVzaF9rZXJuX3RsYl9yYW5nZShzdGFydCxlbmQpCisgKgorICoJSW52YWxpZGF0ZSBhIHJhbmdlIG9mIGtlcm5lbCBUTEIgZW50cmllcworICoKKyAqCS0gc3RhcnQgLSBzdGFydCBhZGRyZXNzIChtYXkgbm90IGJlIGFsaWduZWQpCisgKgktIGVuZCAgIC0gZW5kIGFkZHJlc3MgKGV4Y2x1c2l2ZSwgbWF5IG5vdCBiZSBhbGlnbmVkKQorICovCitFTlRSWSh2NndiaV9mbHVzaF9rZXJuX3RsYl9yYW5nZSkKKwltb3YJcjIsICMwCisJbWNyCXAxNSwgMCwgcjIsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCisJbW92CXIwLCByMCwgbHNyICNQQUdFX1NISUZUCQlAIGFsaWduIGFkZHJlc3MKKwltb3YJcjEsIHIxLCBsc3IgI1BBR0VfU0hJRlQKKwltb3YJcjAsIHIwLCBsc2wgI1BBR0VfU0hJRlQKKwltb3YJcjEsIHIxLCBsc2wgI1BBR0VfU0hJRlQKKzE6CisjaWZkZWYgSEFSVkFSRF9UTEIKKwltY3IJcDE1LCAwLCByMCwgYzgsIGM2LCAxCQlAIFRMQiBpbnZhbGlkYXRlIEQgTVZBCisJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNSwgMQkJQCBUTEIgaW52YWxpZGF0ZSBJIE1WQQorI2Vsc2UKKwltY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAxCQlAIFRMQiBpbnZhbGlkYXRlIE1WQQorI2VuZGlmCisJYWRkCXIwLCByMCwgI1BBR0VfU1oKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbW92CXBjLCBscgorCisJLnNlY3Rpb24gIi50ZXh0LmluaXQiLCAjYWxsb2MsICNleGVjaW5zdHIKKworCS50eXBlCXY2d2JpX3RsYl9mbnMsICNvYmplY3QKK0VOVFJZKHY2d2JpX3RsYl9mbnMpCisJLmxvbmcJdjZ3YmlfZmx1c2hfdXNlcl90bGJfcmFuZ2UKKwkubG9uZwl2NndiaV9mbHVzaF9rZXJuX3RsYl9yYW5nZQorCS5sb25nCXY2d2JpX3RsYl9mbGFncworCS5zaXplCXY2d2JpX3RsYl9mbnMsIC4gLSB2NndiaV90bGJfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ud2ZwZS9BUk0tZ2NjLmggYi9hcmNoL2FybS9ud2ZwZS9BUk0tZ2NjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY1OTg0NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL253ZnBlL0FSTS1nY2MuaApAQCAtMCwwICsxLDEyMCBAQAorLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBtYWNybyBgQklUUzY0JyBjYW4gYmUgZGVmaW5lZCB0byBpbmRpY2F0ZSB0aGF0IDY0LWJpdCBpbnRlZ2VyIHR5cGVzIGFyZQorc3VwcG9ydGVkIGJ5IHRoZSBjb21waWxlci4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisjZGVmaW5lIEJJVFM2NAorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRWFjaCBvZiB0aGUgZm9sbG93aW5nIGB0eXBlZGVmJ3MgZGVmaW5lcyB0aGUgbW9zdCBjb252ZW5pZW50IHR5cGUgdGhhdCBob2xkcworaW50ZWdlcnMgb2YgYXQgbGVhc3QgYXMgbWFueSBiaXRzIGFzIHNwZWNpZmllZC4gIEZvciBleGFtcGxlLCBgdWludDgnIHNob3VsZAorYmUgdGhlIG1vc3QgY29udmVuaWVudCB0eXBlIHRoYXQgY2FuIGhvbGQgdW5zaWduZWQgaW50ZWdlcnMgb2YgYXMgbWFueSBhcworOCBiaXRzLiAgVGhlIGBmbGFnJyB0eXBlIG11c3QgYmUgYWJsZSB0byBob2xkIGVpdGhlciBhIDAgb3IgMS4gIEZvciBtb3N0CitpbXBsZW1lbnRhdGlvbnMgb2YgQywgYGZsYWcnLCBgdWludDgnLCBhbmQgYGludDgnIHNob3VsZCBhbGwgYmUgYHR5cGVkZWYnZWQKK3RvIHRoZSBzYW1lIGFzIGBpbnQnLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK3R5cGVkZWYgY2hhciBmbGFnOwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4OwordHlwZWRlZiBzaWduZWQgY2hhciBpbnQ4OwordHlwZWRlZiBpbnQgdWludDE2OwordHlwZWRlZiBpbnQgaW50MTY7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzI7Cit0eXBlZGVmIHNpZ25lZCBpbnQgaW50MzI7CisjaWZkZWYgQklUUzY0Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgYml0czY0OwordHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBzYml0czY0OworI2VuZGlmCisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitFYWNoIG9mIHRoZSBmb2xsb3dpbmcgYHR5cGVkZWYncyBkZWZpbmVzIGEgdHlwZSB0aGF0IGhvbGRzIGludGVnZXJzCitvZiBfZXhhY3RseV8gdGhlIG51bWJlciBvZiBiaXRzIHNwZWNpZmllZC4gIEZvciBpbnN0YW5jZSwgZm9yIG1vc3QKK2ltcGxlbWVudGF0aW9uIG9mIEMsIGBiaXRzMTYnIGFuZCBgc2JpdHMxNicgc2hvdWxkIGJlIGB0eXBlZGVmJ2VkIHRvCitgdW5zaWduZWQgc2hvcnQgaW50JyBhbmQgYHNpZ25lZCBzaG9ydCBpbnQnIChvciBgc2hvcnQgaW50JyksIHJlc3BlY3RpdmVseS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgYml0czg7Cit0eXBlZGVmIHNpZ25lZCBjaGFyIHNiaXRzODsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGJpdHMxNjsKK3R5cGVkZWYgc2lnbmVkIHNob3J0IGludCBzYml0czE2OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgYml0czMyOwordHlwZWRlZiBzaWduZWQgaW50IHNiaXRzMzI7CisjaWZkZWYgQklUUzY0Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludDY0OwordHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBpbnQ2NDsKKyNlbmRpZgorCisjaWZkZWYgQklUUzY0CisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGBMSVQ2NCcgbWFjcm8gdGFrZXMgYXMgaXRzIGFyZ3VtZW50IGEgdGV4dHVhbCBpbnRlZ2VyIGxpdGVyYWwgYW5kIGlmCituZWNlc3NhcnkgYGBtYXJrcycnIHRoZSBsaXRlcmFsIGFzIGhhdmluZyBhIDY0LWJpdCBpbnRlZ2VyIHR5cGUuICBGb3IKK2V4YW1wbGUsIHRoZSBHbnUgQyBDb21waWxlciAoYGdjYycpIHJlcXVpcmVzIHRoYXQgNjQtYml0IGxpdGVyYWxzIGJlCithcHBlbmRlZCB3aXRoIHRoZSBsZXR0ZXJzIGBMTCcgc3RhbmRpbmcgZm9yIGBsb25nIGxvbmcnLCB3aGljaCBpcyBgZ2NjJ3MKK25hbWUgZm9yIHRoZSA2NC1iaXQgaW50ZWdlciB0eXBlLiAgU29tZSBjb21waWxlcnMgbWF5IGFsbG93IGBMSVQ2NCcgdG8gYmUKK2RlZmluZWQgYXMgdGhlIGlkZW50aXR5IG1hY3JvOiAgYCNkZWZpbmUgTElUNjQoIGEgKSBhJy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisjZGVmaW5lIExJVDY0KCBhICkgYSMjTEwKKyNlbmRpZgorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIG1hY3JvIGBJTkxJTkUnIGNhbiBiZSB1c2VkIGJlZm9yZSBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaW5saW5lZC4gIElmCithIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgZXhwbGljaXQgaW5saW5pbmcsIHRoaXMgbWFjcm8gc2hvdWxkIGJlIGRlZmluZWQKK3RvIGJlIGBzdGF0aWMnLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKyNkZWZpbmUgSU5MSU5FIGV4dGVybiBfX2lubGluZV9fCisKKworLyogRm9yIHVzZSBhcyBhIEdDQyBzb2Z0LWZsb2F0IGxpYnJhcnkgd2UgbmVlZCBzb21lIHNwZWNpYWwgZnVuY3Rpb24gbmFtZXMuICovCisKKyNpZmRlZiBfX0xJQkZMT0FUX18KKworLyogU29tZSAzMi1iaXQgb3BzIGNhbiBiZSBtYXBwZWQgc3RyYWlnaHQgYWNyb3NzIGJ5IGp1c3QgY2hhbmdpbmcgdGhlIG5hbWUuICovCisjZGVmaW5lIGZsb2F0MzJfYWRkCQkJX19hZGRzZjMKKyNkZWZpbmUgZmxvYXQzMl9zdWIJCQlfX3N1YnNmMworI2RlZmluZSBmbG9hdDMyX211bAkJCV9fbXVsc2YzCisjZGVmaW5lIGZsb2F0MzJfZGl2CQkJX19kaXZzZjMKKyNkZWZpbmUgaW50MzJfdG9fZmxvYXQzMgkJX19mbG9hdHNpc2YKKyNkZWZpbmUgZmxvYXQzMl90b19pbnQzMl9yb3VuZF90b196ZXJvCV9fZml4c2ZzaQorI2RlZmluZSBmbG9hdDMyX3RvX3VpbnQzMl9yb3VuZF90b196ZXJvCV9fZml4dW5zc2ZzaQorCisvKiBUaGVzZSBvbmVzIGdvIHRocm91Z2ggdGhlIGdsdWUgY29kZS4gIFRvIGF2b2lkIG5hbWVzcGFjZSBwb2xsdXRpb24KKyAgIHdlIHJlbmFtZSB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zIHRvby4gICovCisjZGVmaW5lIGZsb2F0MzJfZXEJCQlfX19mbG9hdDMyX2VxCisjZGVmaW5lIGZsb2F0MzJfbGUJCQlfX19mbG9hdDMyX2xlCisjZGVmaW5lIGZsb2F0MzJfbHQJCQlfX19mbG9hdDMyX2x0CisKKy8qIEFsbCB0aGUgNjQtYml0IG9wcyBoYXZlIHRvIGdvIHRocm91Z2ggdGhlIGdsdWUsIHNvIHdlIHB1bGwgdGhlIHNhbWUKKyAgIHRyaWNrLiAgKi8KKyNkZWZpbmUgZmxvYXQ2NF9hZGQJCQlfX19mbG9hdDY0X2FkZAorI2RlZmluZSBmbG9hdDY0X3N1YgkJCV9fX2Zsb2F0NjRfc3ViCisjZGVmaW5lIGZsb2F0NjRfbXVsCQkJX19fZmxvYXQ2NF9tdWwKKyNkZWZpbmUgZmxvYXQ2NF9kaXYJCQlfX19mbG9hdDY0X2RpdgorI2RlZmluZSBpbnQzMl90b19mbG9hdDY0CQlfX19pbnQzMl90b19mbG9hdDY0CisjZGVmaW5lIGZsb2F0NjRfdG9faW50MzJfcm91bmRfdG9femVybwlfX19mbG9hdDY0X3RvX2ludDMyX3JvdW5kX3RvX3plcm8KKyNkZWZpbmUgZmxvYXQ2NF90b191aW50MzJfcm91bmRfdG9femVybwlfX19mbG9hdDY0X3RvX3VpbnQzMl9yb3VuZF90b196ZXJvCisjZGVmaW5lIGZsb2F0NjRfdG9fZmxvYXQzMgkJX19fZmxvYXQ2NF90b19mbG9hdDMyCisjZGVmaW5lIGZsb2F0MzJfdG9fZmxvYXQ2NAkJX19fZmxvYXQzMl90b19mbG9hdDY0CisjZGVmaW5lIGZsb2F0NjRfZXEJCQlfX19mbG9hdDY0X2VxCisjZGVmaW5lIGZsb2F0NjRfbGUJCQlfX19mbG9hdDY0X2xlCisjZGVmaW5lIGZsb2F0NjRfbHQJCQlfX19mbG9hdDY0X2x0CisKKyNpZiAwCisjZGVmaW5lIGZsb2F0NjRfYWRkCQkJX19hZGRkZjMKKyNkZWZpbmUgZmxvYXQ2NF9zdWIJCQlfX3N1YmRmMworI2RlZmluZSBmbG9hdDY0X211bAkJCV9fbXVsZGYzCisjZGVmaW5lIGZsb2F0NjRfZGl2CQkJX19kaXZkZjMKKyNkZWZpbmUgaW50MzJfdG9fZmxvYXQ2NAkJX19mbG9hdHNpZGYKKyNkZWZpbmUgZmxvYXQ2NF90b19pbnQzMl9yb3VuZF90b196ZXJvCV9fZml4ZGZzaQorI2RlZmluZSBmbG9hdDY0X3RvX3VpbnQzMl9yb3VuZF90b196ZXJvCV9fZml4dW5zZGZzaQorI2RlZmluZSBmbG9hdDY0X3RvX2Zsb2F0MzIJCV9fdHJ1bmNkZnNmMgorI2RlZmluZSBmbG9hdDMyX3RvX2Zsb2F0NjQJCV9fZXh0ZW5kc2ZkZjIKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL0NoYW5nZUxvZyBiL2FyY2gvYXJtL253ZnBlL0NoYW5nZUxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWI1YTdjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbndmcGUvQ2hhbmdlTG9nCkBAIC0wLDAgKzEsOTEgQEAKKzIwMDMtMDMtMjIgIFJhbHBoIFNpZW1zZW4gPHJhbHBoc0BuZXR3aW5kZXIub3JnPgorCSogUmVmb3JtYXQgYWxsIGJ1dCBzb2Z0ZmxvYXQgZmlsZXMgdG8gZ2V0IGEgY29uc2lzdGVudCBjb2Rpbmcgc3R5bGUuCisJICBVc2VkICJpbmRlbnQgLWtyIC1pOCAtdHM4IC1zb2IgLWwxMzIgLXNzIiBhbmQgYSBmZXcgbWFudWFsIGZpeHVwcy4KKwkqIFJlbW92ZWQgZGVhZCBjb2RlIGFuZCBmaXhlZCBmdW5jdGlvbiBwcm90eXBlcyB0byBtYXRjaCBkZWZpbml0aW9ucy4KKwkqIENvbnNvbGlkYXRlZCB1c2Ugb2YgKG9wY29kZSAmJiBNQVNLX0FSSVRITUVUSUNfT1BDT0RFKSA+PiAyMC4KKwkqIE1ha2UgODAtYml0IHByZWNpc2lvbiBhIGNvbXBpbGUtdGltZSBvcHRpb24uICgxJSkKKwkqIE9ubHkgaW5pdGlhbGl6ZSBGUEUgc3RhdGUgb25jZSBpbiByZXBlYXQtRlAgc2l0dWF0aW9ucy4gKDYlKQorCisyMDAyLTAxLTE5ICBSdXNzZWxsIEtpbmcgPHJta0Bhcm0ubGludXgub3JnLnVrPgorCisJKiBmcGExMS5oIC0gQWRkIGRvY3VtZW50YXRpb24KKwkgICAgICAgICAgLSByZW1vdmUgdXNlclJlZ2lzdGVycyBwb2ludGVyIGZyb20gdGhpcyBzdHJ1Y3R1cmUuCisJICAgICAgICAgIC0gYWRkIG5ldyBtZXRob2QgdG8gb2J0YWluIGludGVnZXIgcmVnaXN0ZXIgdmFsdWVzLgorCSogc29mdGZsb2F0LmMgLSBSZW1vdmUgZmxvYXQxMjgKKwkqIHNvZnRmbG9hdC5oIC0gUmVtb3ZlIGZsb2F0MTI4CisJKiBzb2Z0ZmxvYXQtc3BlY2lhbGl6ZSAtIFJlbW92ZSBmbG9hdDEyOAorCisJKiBUaGUgRlBBMTEgc3RydWN0dXJlIGlzIG5vdCBhIGtlcm5lbC1zcGVjaWZpYyBkYXRhIHN0cnVjdHVyZS4KKwkgIEl0IGlzIHVzZWQgYnkgdXNlcnMgb2YgcHRyYWNlIHRvIGV4YW1pbmUgdGhlIHZhbHVlcyBvZiB0aGUKKwkgIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycy4gIFRoZXJlZm9yZSwgYW55IGNoYW5nZXMgdG8gdGhlCisJICBGUEExMSBzdHJ1Y3R1cmUgKHNpemUgb3IgcG9zaXRpb24gb2YgZWxlbWVudHMgY29udGFpbmVkCisJICB3aXRoaW4pIGhhdmUgdG8gYmUgd2VsbCB0aG91Z2h0IG91dC4KKworCSogU2luY2UgMTI4LWJpdCBmbG9hdCByZXF1aXJlcyB0aGUgRlBBMTEgc3RydWN0dXJlIHRvIGNoYW5nZQorCSAgc2l6ZSwgaXQgaGFzIGJlZW4gcmVtb3ZlZC4gIDEyOC1iaXQgZmxvYXQgaXMgY3VycmVudGx5IHVudXNlZCwKKwkgIGFuZCBuZWVkcyB2YXJpb3VzIHRoaW5ncyB0byBiZSByZS13b3JrZWQgc28gdGhhdCB3ZSB3b24ndAorCSAgb3ZlcmZsb3cgdGhlIGF2YWlsYWJsZSBzcGFjZSBpbiB0aGUgdGFzayBzdHJ1Y3R1cmUuCisKKwkqIFRoZSBjaGFuZ2VzIGFyZSBkZXNpZ25lZCB0byBicmVhayBhbnkgcGF0Y2ggdGhhdCBnb2VzIG9uIHRvcAorCSAgb2YgdGhpcyBjb2RlLCBzbyB0aGF0IHRoZSBhdXRob3JzIHByb3Blcmx5IHJldmlldyB0aGVpciBjaGFuZ2VzLgorCisxOTk5LTA4LTE5ICBTY290dCBCYW1icm91Z2ggIDxzY290dGJAbmV0d2luZGVyLm9yZz4KKworCSogZnBtb2R1bGUuYyAtIENoYW5nZWQgdmVyc2lvbiBudW1iZXIgdG8gMC45NQorCSogZnBhMTEuaCAtIG1vZGlmaWVkIEZQQTExLCBGUFJFRyBzdHJ1Y3R1cmVzCisJKiBmcGExMS5jIC0gQ2hhbmdlcyBkdWUgdG8gRlBBMTEsIEZQUkVHIHN0cnVjdHVyZSBhbHRlcmF0aW9ucy4KKwkqIGZwYTExX2NwZG8uYyAtIENoYW5nZXMgZHVlIHRvIEZQQTExLCBGUFJFRyBzdHJ1Y3R1cmUgYWx0ZXJhdGlvbnMuCisJKiBmcGExMV9jcGR0LmMgLSBDaGFuZ2VzIGR1ZSB0byBGUEExMSwgRlBSRUcgc3RydWN0dXJlIGFsdGVyYXRpb25zLgorCSogZnBhMTFfY3BydC5jIC0gQ2hhbmdlcyBkdWUgdG8gRlBBMTEsIEZQUkVHIHN0cnVjdHVyZSBhbHRlcmF0aW9ucy4KKwkqIHNpbmdsZV9jcGRvLmMgLSBDaGFuZ2VzIGR1ZSB0byBGUEExMSwgRlBSRUcgc3RydWN0dXJlIGFsdGVyYXRpb25zLgorCSogZG91YmxlX2NwZG8uYyAtIENoYW5nZXMgZHVlIHRvIEZQQTExLCBGUFJFRyBzdHJ1Y3R1cmUgYWx0ZXJhdGlvbnMuCisJKiBleHRlbmRlZF9jcGRvLmMgLSBDaGFuZ2VzIGR1ZSB0byBGUEExMSwgRlBSRUcgc3RydWN0dXJlIGFsdGVyYXRpb25zLgorCisJKiBJIGRpc2NvdmVyZWQgc2V2ZXJhbCBidWdzLiAgRmlyc3QgYW5kIHdvcnN0IGlzIHRoYXQgdGhlIGtlcm5lbAorCSAgcGFzc2VzIGluIGEgcG9pbnRlciB0byB0aGUgRlBFJ3Mgc3RhdGUgYXJlYS4JVGhpcyBpcyBkZWZpbmVkCisJICBhcyBhIHN0cnVjdCB1c2VyX2ZwIChzZWUgdXNlci5oKS4gIFRoaXMgcG9pbnRlciB3YXMgY2FzdCB0byBhCisJICBGUEExMSouICBVbmZvcnR1bmF0ZWx5IEZQQTExIGFuZCB1c2VyX2ZwIGFyZSBvZiBkaWZmZXJlbnQgc2l6ZXM7CisJICB1c2VyX2ZwIGlzIHNtYWxsZXIuICBUaGlzIG1lYW50IHRoYXQgdGhlIEZQRSBzY3JpYmJsZWQgb24gdGhpbmdzCisJICBiZWxvdyBpdHMgYXJlYSwgd2hpY2ggaXMgYmFkLCBhcyB0aGUgYXJlYSBpcyBpbiB0aGUgdGhyZWFkX3N0cnVjdAorCSAgZW1iZWRkZWQgaW4gdGhlIHByb2Nlc3MgdGFzayBzdHJ1Y3R1cmUuICBUaHVzIHdlIHdlcmUgc2NyaWJibGluZworCSAgb3ZlciBvbmUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IHN0cnVjdHVyZXMgaW4gdGhlIGVudGlyZSBPUy4KKworCSogdXNlcl9mcCBhbmQgRlBBMTEgaGF2ZSBub3cgYmVlbiBoYXJtb25pemVkLiAgTW9zdCBvZiB0aGUgY2hhbmdlcworCSAgaW4gdGhlIGFib3ZlIGNvZGUgd2VyZSBkZXJlZmVyZW5jaW5nIHByb2JsZW1zIGR1ZSB0byBtb3ZpbmcgdGhlCisJICByZWdpc3RlciB0eXBlIG91dCBvZiBGUFJFRywgYW5kIGdldHRpbmcgcmlkIG9mIHRoZSB1bmlvbiB2YXJpYWJsZQorCSAgZnB2YWx1ZS4KKworCSogU2Vjb25kIEkgbm90aWNlZCByZXNldEZQQTExIHdhcyBub3QgYWx3YXlzIGJlaW5nIGNhbGxlZCBmb3IgYQorCSAgdGFzay4gIFRoaXMgc2hvdWxkIGhhcHBlbiBvbiB0aGUgZmlyc3QgZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uCisJICB0aGF0IG9jY3Vycy4JSXQgaXMgY29udHJvbGxlZCBieSBpbml0X2ZsYWcgaW4gRlBBMTEuICBUaGUKKwkgIGNvbW1lbnQgaW4gdGhlIGNvZGUgYmVzaWRlIGluaXRfZmxhZyBzdGF0ZSB0aGUga2VybmVsIGd1YXJhbnRlZXMKKwkgIHRoaXMgdG8gYmUgemVyby4gIE5vdCBzby4gIEkgZm91bmQgdGhhdCB0aGUga2VybmVsIHJlY3ljbGVzIHRhc2sKKwkgIHN0cnVjdHVyZXMsIGFuZCB0aGF0IHJlY3ljbGVkIG9uZXMgbWF5IG5vdCBoYXZlIGluaXRfZmxhZyB6ZXJvZWQuCisJICBJIGNvdWxkbid0IGV2ZW4gZmluZCBhbnl0aGluZyB0aGF0IGd1YXJhbnRlZXMgaXQgaXMgemVyb2VkIHdoZW4KKwkgIHdoZW4gdGhlIHRhc2sgc3RydWN0dXJlIGlzIGluaXRpYWxseSBhbGxvY2F0ZWQuICBJbiBhbnkgY2FzZQorCSAgSSBub3cgaW5pdGlhbGl6ZSB0aGUgZW50aXJlIEZQRSBzdGF0ZSBpbiB0aGUgdGhyZWFkIHN0cnVjdHVyZSB0bworCSAgemVybyB3aGVuIGFsbG9jYXRlZCBhbmQgcmVjeWNsZWQuICBTZWUgYWxsb2NfdGFza19zdHJ1Y3QoKSBhbmQKKwkgIGZsdXNoX3RocmVhZCgpIGluIGFyY2gvYXJtL3Byb2Nlc3MuYy4gIFRoZSBjaGFuZ2UgdG8KKwkgIGFsbG9jX3Rhc2tfc3RydWN0KCkgbWF5IG5vdCBiZSBuZWNlc3NhcnksIGJ1dCBJIGxlZnQgaXQgaW4gZm9yCisJICBjb21wbGV0ZW5lc3MgKGJldHRlciBzYWZlIHRoYW4gc29ycnkpLgorCisxOTk4LTExLTIzICBTY290dCBCYW1icm91Z2ggIDxzY290dGJAbmV0d2luZGVyLm9yZz4KKworCSogUkVBRE1FLkZQRSAtIGZpeCB0eXBvIGluIGRlc2NyaXB0aW9uIG9mIGxmbS9zZm0gaW5zdHJ1Y3Rpb25zCisJKiBOT1RFUyAtIEFkZGVkIGZpbGUgdG8gZGVzY3JpYmUga25vd24gYnVncy9wcm9ibGVtcyAKKwkqIGZwbW9kdWxlLmMgLSBDaGFuZ2VkIHZlcnNpb24gbnVtYmVyIHRvIDAuOTQKKworMTk5OC0xMS0yMCAgU2NvdHQgQmFtYnJvdWdoICA8c2NvdHRiQG5ldHdpbmRlci5vcmc+CisKKwkqIFJFQURNRS5GUEUgLSBmaXggZGVzY3JpcHRpb24gb2YgVVJELCBOUk0gaW5zdHJ1Y3Rpb25zCisJKiBUT0RPIC0gcmVtb3ZlIFVSRCwgTlJNIGluc3RydWN0aW9ucyBmcm9tIFRPRE8gbGlzdAorCSogc2luZ2xlX2NwZG8uYyAtIGltcGxlbWVudCBVUkQsIE5STQorCSogZG91YmxlX2NwZG8uYyAtIGltcGxlbWVudCBVUkQsIE5STQorCSogZXh0ZW5kZWRfY3Bkby5jIC0gaW1wbGVtZW50IFVSRCwgTlJNCisKKzE5OTgtMTEtMTkgIFNjb3R0IEJhbWJyb3VnaCAgPHNjb3R0YkBuZXR3aW5kZXIub3JnPgorCisJKiBDaGFuZ2VMb2cgLSBBZGRlZCB0aGlzIGZpbGUgdG8gdHJhY2sgY2hhbmdlcyBtYWRlLgorCSogZnBhMTEuYyAtIGFkZGVkIGNvZGUgdG8gaW5pdGlhbGl6ZSByZWdpc3RlciB0eXBlcyB0byB0eXBlTm9uZQorCSogZnBhMTFfY3BkdC5jIC0gZml4ZWQgYnVnIGluIHN0b3JlRXh0ZW5kZWQgKHR5cGVFeHRlbmRlZCBjaGFuZ2VkIHRvCisJICB0eXBlRG91YmxlIGluIHN3aXRjaCBzdGF0ZW1lbnQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ud2ZwZS9NYWtlZmlsZSBiL2FyY2gvYXJtL253ZnBlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkN2IyNmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ud2ZwZS9NYWtlZmlsZQpAQCAtMCwwICsxLDEzIEBACisjCisjIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMSBQaGlsaXAgQmx1bmRlbGwKKyMKKworb2JqLSQoQ09ORklHX0ZQRV9OV0ZQRSkJCSs9IG53ZnBlLm8KKworbndmcGUteQkJCQkrPSBmcGExMS5vIGZwYTExX2NwZG8ubyBmcGExMV9jcGR0Lm8gXAorCQkJCSAgIGZwYTExX2NwcnQubyBmcG1vZHVsZS5vIGZwb3Bjb2RlLm8gXAorCQkJCSAgIHNvZnRmbG9hdC5vIHNpbmdsZV9jcGRvLm8gZG91YmxlX2NwZG8ubworCitud2ZwZS0kKENPTkZJR19GUEVfTldGUEVfWFApCSs9IGV4dGVuZGVkX2NwZG8ubworbndmcGUtJChDT05GSUdfQ1BVXzI2KQkJKz0gZW50cnkyNi5vCitud2ZwZS0kKENPTkZJR19DUFVfMzIpCQkrPSBlbnRyeS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ud2ZwZS9kb3VibGVfY3Bkby5jIGIvYXJjaC9hcm0vbndmcGUvZG91YmxlX2NwZG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmZkOGNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbndmcGUvZG91YmxlX2NwZG8uYwpAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAgICBOZXRXaW5kZXIgRmxvYXRpbmcgUG9pbnQgRW11bGF0b3IKKyAgICAoYykgUmViZWwuQ09NLCAxOTk4LDE5OTkKKworICAgIERpcmVjdCBxdWVzdGlvbnMsIGNvbW1lbnRzIHRvIFNjb3R0IEJhbWJyb3VnaCA8c2NvdHRiQG5ldHdpbmRlci5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpbmNsdWRlICJmcGExMS5oIgorI2luY2x1ZGUgInNvZnRmbG9hdC5oIgorI2luY2x1ZGUgImZwb3Bjb2RlLmgiCisKK3VuaW9uIGZsb2F0NjRfY29tcG9uZW50cyB7CisJZmxvYXQ2NCBmNjQ7CisJdW5zaWduZWQgaW50IGlbMl07Cit9OworCitmbG9hdDY0IGZsb2F0NjRfZXhwKGZsb2F0NjQgRm0pOworZmxvYXQ2NCBmbG9hdDY0X2xuKGZsb2F0NjQgRm0pOworZmxvYXQ2NCBmbG9hdDY0X3NpbihmbG9hdDY0IHJGbSk7CitmbG9hdDY0IGZsb2F0NjRfY29zKGZsb2F0NjQgckZtKTsKK2Zsb2F0NjQgZmxvYXQ2NF9hcmNzaW4oZmxvYXQ2NCByRm0pOworZmxvYXQ2NCBmbG9hdDY0X2FyY3RhbihmbG9hdDY0IHJGbSk7CitmbG9hdDY0IGZsb2F0NjRfbG9nKGZsb2F0NjQgckZtKTsKK2Zsb2F0NjQgZmxvYXQ2NF90YW4oZmxvYXQ2NCByRm0pOworZmxvYXQ2NCBmbG9hdDY0X2FyY2NvcyhmbG9hdDY0IHJGbSk7CitmbG9hdDY0IGZsb2F0NjRfcG93KGZsb2F0NjQgckZuLCBmbG9hdDY0IHJGbSk7CitmbG9hdDY0IGZsb2F0NjRfcG9sKGZsb2F0NjQgckZuLCBmbG9hdDY0IHJGbSk7CisKK3N0YXRpYyBmbG9hdDY0IGZsb2F0NjRfcnNmKGZsb2F0NjQgckZuLCBmbG9hdDY0IHJGbSkKK3sKKwlyZXR1cm4gZmxvYXQ2NF9zdWIockZtLCByRm4pOworfQorCitzdGF0aWMgZmxvYXQ2NCBmbG9hdDY0X3JkdihmbG9hdDY0IHJGbiwgZmxvYXQ2NCByRm0pCit7CisJcmV0dXJuIGZsb2F0NjRfZGl2KHJGbSwgckZuKTsKK30KKworc3RhdGljIGZsb2F0NjQgKCpjb25zdCBkeWFkaWNfZG91YmxlWzE2XSkoZmxvYXQ2NCByRm4sIGZsb2F0NjQgckZtKSA9IHsKKwlbQURGX0NPREUgPj4gMjBdID0gZmxvYXQ2NF9hZGQsCisJW01VRl9DT0RFID4+IDIwXSA9IGZsb2F0NjRfbXVsLAorCVtTVUZfQ09ERSA+PiAyMF0gPSBmbG9hdDY0X3N1YiwKKwlbUlNGX0NPREUgPj4gMjBdID0gZmxvYXQ2NF9yc2YsCisJW0RWRl9DT0RFID4+IDIwXSA9IGZsb2F0NjRfZGl2LAorCVtSREZfQ09ERSA+PiAyMF0gPSBmbG9hdDY0X3JkdiwKKwlbUk1GX0NPREUgPj4gMjBdID0gZmxvYXQ2NF9yZW0sCisKKwkvKiBzdHJpY3RseSwgdGhlc2Ugb3Bjb2RlcyBzaG91bGQgbm90IGJlIGltcGxlbWVudGVkICovCisJW0ZNTF9DT0RFID4+IDIwXSA9IGZsb2F0NjRfbXVsLAorCVtGRFZfQ09ERSA+PiAyMF0gPSBmbG9hdDY0X2RpdiwKKwlbRlJEX0NPREUgPj4gMjBdID0gZmxvYXQ2NF9yZHYsCit9OworCitzdGF0aWMgZmxvYXQ2NCBmbG9hdDY0X212ZihmbG9hdDY0IHJGbSkKK3sKKwlyZXR1cm4gckZtOworfQorCitzdGF0aWMgZmxvYXQ2NCBmbG9hdDY0X21uZihmbG9hdDY0IHJGbSkKK3sKKwl1bmlvbiBmbG9hdDY0X2NvbXBvbmVudHMgdTsKKworCXUuZjY0ID0gckZtOworI2lmZGVmIF9fQVJNRUJfXworCXUuaVswXSBePSAweDgwMDAwMDAwOworI2Vsc2UKKwl1LmlbMV0gXj0gMHg4MDAwMDAwMDsKKyNlbmRpZgorCisJcmV0dXJuIHUuZjY0OworfQorCitzdGF0aWMgZmxvYXQ2NCBmbG9hdDY0X2FicyhmbG9hdDY0IHJGbSkKK3sKKwl1bmlvbiBmbG9hdDY0X2NvbXBvbmVudHMgdTsKKworCXUuZjY0ID0gckZtOworI2lmZGVmIF9fQVJNRUJfXworCXUuaVswXSAmPSAweDdmZmZmZmZmOworI2Vsc2UKKwl1LmlbMV0gJj0gMHg3ZmZmZmZmZjsKKyNlbmRpZgorCisJcmV0dXJuIHUuZjY0OworfQorCitzdGF0aWMgZmxvYXQ2NCAoKmNvbnN0IG1vbmFkaWNfZG91YmxlWzE2XSkoZmxvYXQ2NCByRm0pID0geworCVtNVkZfQ09ERSA+PiAyMF0gPSBmbG9hdDY0X212ZiwKKwlbTU5GX0NPREUgPj4gMjBdID0gZmxvYXQ2NF9tbmYsCisJW0FCU19DT0RFID4+IDIwXSA9IGZsb2F0NjRfYWJzLAorCVtSTkRfQ09ERSA+PiAyMF0gPSBmbG9hdDY0X3JvdW5kX3RvX2ludCwKKwlbVVJEX0NPREUgPj4gMjBdID0gZmxvYXQ2NF9yb3VuZF90b19pbnQsCisJW1NRVF9DT0RFID4+IDIwXSA9IGZsb2F0NjRfc3FydCwKKwlbTlJNX0NPREUgPj4gMjBdID0gZmxvYXQ2NF9tdmYsCit9OworCit1bnNpZ25lZCBpbnQgRG91YmxlQ1BETyhjb25zdCB1bnNpZ25lZCBpbnQgb3Bjb2RlLCBGUFJFRyAqIHJGZCkKK3sKKwlGUEExMSAqZnBhMTEgPSBHRVRfRlBBMTEoKTsKKwlmbG9hdDY0IHJGbTsKKwl1bnNpZ25lZCBpbnQgRm0sIG9wY19tYXNrX3NoaWZ0OworCisJRm0gPSBnZXRGbShvcGNvZGUpOworCWlmIChDT05TVEFOVF9GTShvcGNvZGUpKSB7CisJCXJGbSA9IGdldERvdWJsZUNvbnN0YW50KEZtKTsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGZwYTExLT5mVHlwZVtGbV0pIHsKKwkJY2FzZSB0eXBlU2luZ2xlOgorCQkJckZtID0gZmxvYXQzMl90b19mbG9hdDY0KGZwYTExLT5mcHJlZ1tGbV0uZlNpbmdsZSk7CisJCQlicmVhazsKKworCQljYXNlIHR5cGVEb3VibGU6CisJCQlyRm0gPSBmcGExMS0+ZnByZWdbRm1dLmZEb3VibGU7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlvcGNfbWFza19zaGlmdCA9IChvcGNvZGUgJiBNQVNLX0FSSVRITUVUSUNfT1BDT0RFKSA+PiAyMDsKKwlpZiAoIU1PTkFESUNfSU5TVFJVQ1RJT04ob3Bjb2RlKSkgeworCQl1bnNpZ25lZCBpbnQgRm4gPSBnZXRGbihvcGNvZGUpOworCQlmbG9hdDY0IHJGbjsKKworCQlzd2l0Y2ggKGZwYTExLT5mVHlwZVtGbl0pIHsKKwkJY2FzZSB0eXBlU2luZ2xlOgorCQkJckZuID0gZmxvYXQzMl90b19mbG9hdDY0KGZwYTExLT5mcHJlZ1tGbl0uZlNpbmdsZSk7CisJCQlicmVhazsKKworCQljYXNlIHR5cGVEb3VibGU6CisJCQlyRm4gPSBmcGExMS0+ZnByZWdbRm5dLmZEb3VibGU7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAoZHlhZGljX2RvdWJsZVtvcGNfbWFza19zaGlmdF0pIHsKKwkJCXJGZC0+ZkRvdWJsZSA9IGR5YWRpY19kb3VibGVbb3BjX21hc2tfc2hpZnRdKHJGbiwgckZtKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG1vbmFkaWNfZG91YmxlW29wY19tYXNrX3NoaWZ0XSkgeworCQkJckZkLT5mRG91YmxlID0gbW9uYWRpY19kb3VibGVbb3BjX21hc2tfc2hpZnRdKHJGbSk7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbndmcGUvZW50cnkuUyBiL2FyY2gvYXJtL253ZnBlL2VudHJ5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRjMTNiYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL253ZnBlL2VudHJ5LlMKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgICAgTmV0V2luZGVyIEZsb2F0aW5nIFBvaW50IEVtdWxhdG9yCisgICAgKGMpIFJlYmVsLkNPTSwgMTk5OAorICAgIChjKSAxOTk4LCAxOTk5IFBoaWxpcCBCbHVuZGVsbAorCisgICAgRGlyZWN0IHF1ZXN0aW9ucywgY29tbWVudHMgdG8gU2NvdHQgQmFtYnJvdWdoIDxzY290dGJAbmV0d2luZGVyLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworLyogVGhpcyBpcyB0aGUga2VybmVsJ3MgZW50cnkgcG9pbnQgaW50byB0aGUgZmxvYXRpbmcgcG9pbnQgZW11bGF0b3IuCitJdCBpcyBjYWxsZWQgZnJvbSB0aGUga2VybmVsIHdpdGggY29kZSBzaW1pbGFyIHRvIHRoaXM6CisKKwlzdWIJcjQsIHI1LCAjNAorCWxkcnQJcjAsIFtyNF0JCQlAIHIwICA9IGluc3RydWN0aW9uCisJYWRyc3ZjCWFsLCByOSwgcmV0X2Zyb21fZXhjZXB0aW9uCUAgcjkgID0gbm9ybWFsIEZQIHJldHVybgorCWFkcnN2YwlhbCwgbHIsIGZwdW5kZWZpbnN0cgkJQCBsciAgPSB1bmRlZmluZWQgaW5zdHIgcmV0dXJuCisKKwlnZXRfY3VycmVudF90YXNrIHIxMAorCW1vdglyOCwgIzEKKwlzdHJiCXI4LCBbcjEwLCAjVFNLX1VTRURfTUFUSF0JQCBzZXQgY3VycmVudC0+dXNlZF9tYXRoCisJYWRkCXIxMCwgcjEwLCAjVFNTX0ZQRVNBVkUJCUAgcjEwID0gd29ya3NwYWNlCisJbGRyCXI0LCAuTEMyCisJbGRyCXBjLCBbcjRdCQkJQCBDYWxsIEZQIGVtdWxhdG9yIGVudHJ5IHBvaW50CisKK1RoZSBrZXJuZWwgZXhwZWN0cyB0aGUgZW11bGF0b3IgdG8gcmV0dXJuIHZpYSBvbmUgb2YgdHdvIHBvc3NpYmxlCitwb2ludHMgb2YgcmV0dXJuIGl0IHBhc3NlcyB0byB0aGUgZW11bGF0b3IuICBUaGUgZW11bGF0b3IsIGlmCitzdWNjZXNzZnVsIGluIGl0cyBlbXVsYXRpb24sIGp1bXBzIHRvIHJldF9mcm9tX2V4Y2VwdGlvbiAocGFzc2VkIGluCityOSkgYW5kIHRoZSBrZXJuZWwgdGFrZXMgY2FyZSBvZiByZXR1cm5pbmcgY29udHJvbCBmcm9tIHRoZSB0cmFwIHRvCit0aGUgdXNlciBjb2RlLiAgSWYgdGhlIGVtdWxhdG9yIGlzIHVuYWJsZSB0byBlbXVsYXRlIHRoZSBpbnN0cnVjdGlvbiwKK2l0IHJldHVybnMgdmlhIF9mcHVuZGVmaW5zdHIgKHBhc3NlZCB2aWEgbHIpIGFuZCB0aGUga2VybmVsIGhhbHRzIHRoZQordXNlciBwcm9ncmFtIHdpdGggYSBjb3JlIGR1bXAuCisKK09uIGVudHJ5IHRvIHRoZSBlbXVsYXRvciByMTAgcG9pbnRzIHRvIGFuIGFyZWEgb2YgcHJpdmF0ZSBGUCB3b3Jrc3BhY2UKK3Jlc2VydmVkIGluIHRoZSB0aHJlYWQgc3RydWN0dXJlIGZvciB0aGlzIHByb2Nlc3MuICBUaGlzIGlzIHdoZXJlIHRoZQorZW11bGF0b3Igc2F2ZXMgaXRzIHJlZ2lzdGVycyBhY3Jvc3MgY2FsbHMuICBUaGUgZmlyc3Qgd29yZCBvZiB0aGlzIGFyZWEKK2lzIHVzZWQgYXMgYSBmbGFnIHRvIGRldGVjdCB0aGUgZmlyc3QgdGltZSBhIHByb2Nlc3MgdXNlcyBmbG9hdGluZyBwb2ludCwKK3NvIHRoYXQgdGhlIGVtdWxhdG9yIHN0YXJ0dXAgY29zdCBjYW4gYmUgYXZvaWRlZCBmb3IgdGFza3MgdGhhdCBkb24ndAord2FudCBpdC4KKworVGhpcyByb3V0aW5lIGRvZXMgdGhyZWUgdGhpbmdzOgorCisxKSBUaGUga2VybmVsIGhhcyBjcmVhdGVkIGEgc3RydWN0IHB0X3JlZ3Mgb24gdGhlIHN0YWNrIGFuZCBzYXZlZCB0aGUKK3VzZXIgcmVnaXN0ZXJzIGludG8gaXQuICBTZWUgL3Vzci9pbmNsdWRlL2FzbS9wcm9jL3B0cmFjZS5oIGZvciBkZXRhaWxzLgorCisyKSBJdCBjYWxscyBFbXVsYXRlQWxsIHRvIGVtdWxhdGUgYSBmbG9hdGluZyBwb2ludCBpbnN0cnVjdGlvbi4KK0VtdWxhdGVBbGwgcmV0dXJucyAxIGlmIHRoZSBlbXVsYXRpb24gd2FzIHN1Y2Nlc3NmdWwsIG9yIDAgaWYgbm90LgorCiszKSBJZiBhbiBpbnN0cnVjdGlvbiBoYXMgYmVlbiBlbXVsYXRlZCBzdWNjZXNzZnVsbHksIGl0IGxvb2tzIGFoZWFkIGF0Cit0aGUgbmV4dCBpbnN0cnVjdGlvbi4gIElmIGl0IGlzIGEgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb24sIGl0CitleGVjdXRlcyB0aGUgaW5zdHJ1Y3Rpb24sIHdpdGhvdXQgcmV0dXJuaW5nIHRvIHVzZXIgc3BhY2UuICBJbiB0aGlzCit3YXkgaXQgcmVwZWF0ZWRseSBsb29rcyBhaGVhZCBhbmQgZXhlY3V0ZXMgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zCit1bnRpbCBpdCBlbmNvdW50ZXJzIGEgbm9uIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9uLCBhdCB3aGljaCB0aW1lIGl0CityZXR1cm5zIHZpYSBfZnByZXR1cm4uCisKK1RoaXMgaXMgZG9uZSB0byByZWR1Y2UgdGhlIGVmZmVjdCBvZiB0aGUgdHJhcCBvdmVyaGVhZCBvbiBlYWNoCitmbG9hdGluZyBwb2ludCBpbnN0cnVjdGlvbnMuICBHQ0MgYXR0ZW1wdHMgdG8gZ3JvdXAgZmxvYXRpbmcgcG9pbnQKK2luc3RydWN0aW9ucyB0byBhbGxvdyB0aGUgZW11bGF0b3IgdG8gc3ByZWFkIHRoZSBjb3N0IG9mIHRoZSB0cmFwIG92ZXIKK3NldmVyYWwgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zLiAgKi8KKworCS5nbG9ibAlud2ZwZV9lbnRlcgorbndmcGVfZW50ZXI6CisJbW92CXI0LCBscgkJCUAgc2F2ZSB0aGUgZmFpbHVyZS1yZXR1cm4gYWRkcmVzc2VzCisJbW92CXNsLCBzcAkJCUAgd2UgYWNjZXNzIHRoZSByZWdpc3RlcnMgdmlhICdzbCcKKworCWxkcglyNSwgW3NwLCAjNjBdCQlAIGdldCBjb250ZW50cyBvZiBQQzsKK2VtdWxhdGU6CisJYmwJRW11bGF0ZUFsbAkJQCBlbXVsYXRlIHRoZSBpbnN0cnVjdGlvbgorCWNtcAlyMCwgIzAJCQlAIHdhcyBlbXVsYXRpb24gc3VjY2Vzc2Z1bAorCW1vdmVxCXBjLCByNAkJCUAgbm8sIHJldHVybiBmYWlsdXJlCisKK25leHQ6CisuTHgxOglsZHJ0CXI2LCBbcjVdLCAjNAkJQCBnZXQgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gYW5kCisJCQkJCUAgaW5jcmVtZW50IFBDCisKKwlhbmQJcjIsIHI2LCAjMHgwRjAwMDAwMAlAIHRlc3QgZm9yIEZQIGluc25zCisJdGVxCXIyLCAjMHgwQzAwMDAwMAorCXRlcW5lCXIyLCAjMHgwRDAwMDAwMAorCXRlcW5lCXIyLCAjMHgwRTAwMDAwMAorCW1vdm5lCXBjLCByOQkJCUAgcmV0dXJuIG9rIGlmIG5vdCBhIGZwIGluc24KKworCXN0cglyNSwgW3NwLCAjNjBdCQlAIHVwZGF0ZSBQQyBjb3B5IGluIHJlZ3MKKworCW1vdglyMCwgcjYJCQlAIHNhdmUgYSBjb3B5CisJbGRyCXIxLCBbc3AsICM2NF0JCUAgZmV0Y2ggdGhlIGNvbmRpdGlvbiBjb2RlcworCWJsCWNoZWNrQ29uZGl0aW9uCQlAIGNoZWNrIHRoZSBjb25kaXRpb24KKwljbXAJcjAsICMwCQkJQCByMCA9IDAgPT0+IGNvbmRpdGlvbiBmYWlsZWQKKworCUAgaWYgY29uZGl0aW9uIGNvZGUgZmFpbGVkIHRvIG1hdGNoLCBuZXh0IGluc24KKwliZXEJbmV4dAkJCUAgZ2V0IHRoZSBuZXh0IGluc3RydWN0aW9uOworCisJbW92CXIwLCByNgkJCUAgcHJlcGFyZSBmb3IgRW11bGF0ZUFsbCgpCisJYgllbXVsYXRlCQkJQCBpZiByMCAhPSAwLCBnb3RvIEVtdWxhdGVBbGwKKworCUAgV2UgbmVlZCB0byBiZSBwcmVwYXJlZCBmb3IgdGhlIGluc3RydWN0aW9ucyBhdCAuTHgxIGFuZCAuTHgyIAorCUAgdG8gZmF1bHQuICBFbWl0IHRoZSBhcHByb3ByaWF0ZSBleGNlcHRpb24gZ3VuayB0byBmaXggdGhpbmdzIHVwLgorCUAgPz8/IEZvciBzb21lIHJlYXNvbiwgZmF1bHRzIGNhbiBoYXBwZW4gYXQgLkx4MiBldmVuIHdpdGggYQorCUAgcGxhaW4gTERSIGluc3RydWN0aW9uLiAgV2VpcmQsIGJ1dCBpdCBzZWVtcyBoYXJtbGVzcy4KKwkuc2VjdGlvbiAuZml4dXAsImF4IgorCS5hbGlnbgkyCisuTGZpeDoJbW92CXBjLCByOQkJCUAgbGV0IHRoZSB1c2VyIGVhdCBzZWdmYXVsdHMKKwkucHJldmlvdXMKKworCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCisJLmFsaWduCTMKKwkubG9uZwkuTHgxLCAuTGZpeAorCS5wcmV2aW91cwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbndmcGUvZW50cnkyNi5TIGIvYXJjaC9hcm0vbndmcGUvZW50cnkyNi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZDM4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ud2ZwZS9lbnRyeTI2LlMKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgICAgTmV0V2luZGVyIEZsb2F0aW5nIFBvaW50IEVtdWxhdG9yCisgICAgKGMpIFJlYmVsLkNPTSwgMTk5OAorICAgIChjKSBQaGlsaXAgQmx1bmRlbGwgMTk5OC0xOTk5CisKKyAgICBEaXJlY3QgcXVlc3Rpb25zLCBjb21tZW50cyB0byBTY290dCBCYW1icm91Z2ggPHNjb3R0YkBuZXR3aW5kZXIub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisjaW5jbHVkZSA8YXNtL2NvbnN0YW50cy5oPgorCisvKiBUaGlzIGlzIHRoZSBrZXJuZWwncyBlbnRyeSBwb2ludCBpbnRvIHRoZSBmbG9hdGluZyBwb2ludCBlbXVsYXRvci4KK0l0IGlzIGNhbGxlZCBmcm9tIHRoZSBrZXJuZWwgd2l0aCBjb2RlIHNpbWlsYXIgdG8gdGhpczoKKworCW1vdglmcCwgIzAKKwl0ZXFwCXBjLCAjUFNSX0lfQklUIHwgTU9ERV9TVkMKKwlsZHIJcjQsIC5MQzIKKwlsZHIJcGMsIFtyNF0JCUAgQ2FsbCBGUCBtb2R1bGUgVVNSIGVudHJ5IHBvaW50CisKK1RoZSBrZXJuZWwgZXhwZWN0cyB0aGUgZW11bGF0b3IgdG8gcmV0dXJuIHZpYSBvbmUgb2YgdHdvIHBvc3NpYmxlCitwb2ludHMgb2YgcmV0dXJuIGl0IHBhc3NlcyB0byB0aGUgZW11bGF0b3IuICBUaGUgZW11bGF0b3IsIGlmCitzdWNjZXNzZnVsIGluIGl0cyBlbXVsYXRpb24sIGp1bXBzIHRvIHJldF9mcm9tX2V4Y2VwdGlvbiBhbmQgdGhlCitrZXJuZWwgdGFrZXMgY2FyZSBvZiByZXR1cm5pbmcgY29udHJvbCBmcm9tIHRoZSB0cmFwIHRvIHRoZSB1c2VyIGNvZGUuCitJZiB0aGUgZW11bGF0b3IgaXMgdW5hYmxlIHRvIGVtdWxhdGUgdGhlIGluc3RydWN0aW9uLCBpdCByZXR1cm5zIHRvCitmcHVuZGVmaW5zdHIgYW5kIHRoZSBrZXJuZWwgaGFsdHMgdGhlIHVzZXIgcHJvZ3JhbSB3aXRoIGEgY29yZSBkdW1wLgorCitUaGlzIHJvdXRpbmUgZG9lcyBmb3VyIHRoaW5nczoKKworMSkgSXQgc2F2ZXMgU1AgaW50byBhIHZhcmlhYmxlIGNhbGxlZCB1c2VyUmVnaXN0ZXJzLiAgVGhlIGtlcm5lbCBoYXMKK2NyZWF0ZWQgYSBzdHJ1Y3QgcHRfcmVncyBvbiB0aGUgc3RhY2sgYW5kIHNhdmVkIHRoZSB1c2VyIHJlZ2lzdGVycworaW50byBpdC4gIFNlZSAvdXNyL2luY2x1ZGUvYXNtL3Byb2MvcHRyYWNlLmggZm9yIGRldGFpbHMuICBUaGUKK2VtdWxhdG9yIGNvZGUgdXNlcyB1c2VyUmVnaXN0ZXJzIGFzIHRoZSBiYXNlIG9mIGFuIGFycmF5IG9mIHdvcmRzIGZyb20KK3doaWNoIHRoZSBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXJzIGNhbiBiZSBleHRyYWN0ZWQuCisKKzIpIEl0IGxvY2F0ZXMgdGhlIEZQIGVtdWxhdG9yIHdvcmsgYXJlYSB3aXRoaW4gdGhlIFRTUyBzdHJ1Y3R1cmUgYW5kCitwb2ludHMgYGZwYTExJyB0byBpdC4KKworMykgSXQgY2FsbHMgRW11bGF0ZUFsbCB0byBlbXVsYXRlIGEgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb24uCitFbXVsYXRlQWxsIHJldHVybnMgMSBpZiB0aGUgZW11bGF0aW9uIHdhcyBzdWNjZXNzZnVsLCBvciAwIGlmIG5vdC4KKworNCkgSWYgYW4gaW5zdHJ1Y3Rpb24gaGFzIGJlZW4gZW11bGF0ZWQgc3VjY2Vzc2Z1bGx5LCBpdCBsb29rcyBhaGVhZCBhdAordGhlIG5leHQgaW5zdHJ1Y3Rpb24uICBJZiBpdCBpcyBhIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9uLCBpdAorZXhlY3V0ZXMgdGhlIGluc3RydWN0aW9uLCB3aXRob3V0IHJldHVybmluZyB0byB1c2VyIHNwYWNlLiAgSW4gdGhpcword2F5IGl0IHJlcGVhdGVkbHkgbG9va3MgYWhlYWQgYW5kIGV4ZWN1dGVzIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucwordW50aWwgaXQgZW5jb3VudGVycyBhIG5vbiBmbG9hdGluZyBwb2ludCBpbnN0cnVjdGlvbiwgYXQgd2hpY2ggdGltZSBpdAorcmV0dXJucyB2aWEgX2ZwcmV0dXJuLgorCitUaGlzIGlzIGRvbmUgdG8gcmVkdWNlIHRoZSBlZmZlY3Qgb2YgdGhlIHRyYXAgb3ZlcmhlYWQgb24gZWFjaAorZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zLiAgR0NDIGF0dGVtcHRzIHRvIGdyb3VwIGZsb2F0aW5nIHBvaW50CitpbnN0cnVjdGlvbnMgdG8gYWxsb3cgdGhlIGVtdWxhdG9yIHRvIHNwcmVhZCB0aGUgY29zdCBvZiB0aGUgdHJhcCBvdmVyCitzZXZlcmFsIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucy4gICovCisKKwkuZ2xvYmwJbndmcGVfZW50ZXIKK253ZnBlX2VudGVyOgorCW1vdglzbCwgc3AKKwlsZHIJcjUsIFtzcCwgIzYwXQkJQCBnZXQgY29udGVudHMgb2YgUEMKKwliaWMJcjUsIHI1LCAjMHhmYzAwMDAwMworCWxkcglyMCwgW3I1LCAjLTRdCQlAIGdldCBhY3R1YWwgaW5zdHJ1Y3Rpb24gaW50byByMAorCWJsCUVtdWxhdGVBbGwJCUAgZW11bGF0ZSB0aGUgaW5zdHJ1Y3Rpb24KKzE6CWNtcAlyMCwgIzAJCQlAIHdhcyBlbXVsYXRpb24gc3VjY2Vzc2Z1bAorCWJlcQlmcHVuZGVmaW5zdHIJCUAgbm8sIHJldHVybiBmYWlsdXJlCisKK25leHQ6CisuTHgxOglsZHJ0CXI2LCBbcjVdLCAjNAkJQCBnZXQgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gYW5kCisJCQkJCUAgaW5jcmVtZW50IFBDCisKKwlhbmQJcjIsIHI2LCAjMHgwRjAwMDAwMAlAIHRlc3QgZm9yIEZQIGluc25zCisJdGVxCXIyLCAjMHgwQzAwMDAwMAorCXRlcW5lCXIyLCAjMHgwRDAwMDAwMAorCXRlcW5lCXIyLCAjMHgwRTAwMDAwMAorCWJuZQlyZXRfZnJvbV9leGNlcHRpb24JQCByZXR1cm4gb2sgaWYgbm90IGEgZnAgaW5zbgorCisJbGRyCXI5LCBbc3AsICM2MF0JCUAgZ2V0IG5ldyBjb25kaXRpb24gY29kZXMKKwlhbmQJcjksIHI5LCAjMHhmYzAwMDAwMworCW9ycglyNywgcjUsIHI5CisJc3RyCXI3LCBbc3AsICM2MF0JCUAgdXBkYXRlIFBDIGNvcHkgaW4gcmVncworCisJbW92CXIwLCByNgkJCUAgc2F2ZSBhIGNvcHkKKwltb3YJcjEsIHI5CQkJQCBmZXRjaCB0aGUgY29uZGl0aW9uIGNvZGVzCisJYmwJY2hlY2tDb25kaXRpb24JCUAgY2hlY2sgdGhlIGNvbmRpdGlvbgorCWNtcAlyMCwgIzAJCQlAIHIwID0gMCA9PT4gY29uZGl0aW9uIGZhaWxlZAorCisJQCBpZiBjb25kaXRpb24gY29kZSBmYWlsZWQgdG8gbWF0Y2gsIG5leHQgaW5zbgorCWJlcQluZXh0CQkJQCBnZXQgdGhlIG5leHQgaW5zdHJ1Y3Rpb247CisKKwltb3YJcjAsIHI2CQkJQCBwcmVwYXJlIGZvciBFbXVsYXRlQWxsKCkKKwlhZHIJbHIsIDFiCisJb3JyCWxyLCBsciwgIzMKKwliCUVtdWxhdGVBbGwJCUAgaWYgcjAgIT0gMCwgZ290byBFbXVsYXRlQWxsCisKKy5McmV0OgliCXJldF9mcm9tX2V4Y2VwdGlvbglAIGxldCB0aGUgdXNlciBlYXQgc2VnZmF1bHRzCisJCisJQCBXZSBuZWVkIHRvIGJlIHByZXBhcmVkIGZvciB0aGUgaW5zdHJ1Y3Rpb24gYXQgLkx4MSB0byBmYXVsdC4KKwlAIEVtaXQgdGhlIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbiBndW5rIHRvIGZpeCB0aGluZ3MgdXAuCisJLnNlY3Rpb24gX19leF90YWJsZSwiYSIKKwkuYWxpZ24JMworCS5sb25nCS5MeDEKKwlsZHIJbHIsIFtsciwgJCguTHJldCAtIC5MeDEpLzRdCisJLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ud2ZwZS9leHRlbmRlZF9jcGRvLmMgYi9hcmNoL2FybS9ud2ZwZS9leHRlbmRlZF9jcGRvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM5ZjY4YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL253ZnBlL2V4dGVuZGVkX2NwZG8uYwpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAgICBOZXRXaW5kZXIgRmxvYXRpbmcgUG9pbnQgRW11bGF0b3IKKyAgICAoYykgUmViZWwuQ09NLCAxOTk4LDE5OTkKKworICAgIERpcmVjdCBxdWVzdGlvbnMsIGNvbW1lbnRzIHRvIFNjb3R0IEJhbWJyb3VnaCA8c2NvdHRiQG5ldHdpbmRlci5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpbmNsdWRlICJmcGExMS5oIgorI2luY2x1ZGUgInNvZnRmbG9hdC5oIgorI2luY2x1ZGUgImZwb3Bjb2RlLmgiCisKK2Zsb2F0eDgwIGZsb2F0eDgwX2V4cChmbG9hdHg4MCBGbSk7CitmbG9hdHg4MCBmbG9hdHg4MF9sbihmbG9hdHg4MCBGbSk7CitmbG9hdHg4MCBmbG9hdHg4MF9zaW4oZmxvYXR4ODAgckZtKTsKK2Zsb2F0eDgwIGZsb2F0eDgwX2NvcyhmbG9hdHg4MCByRm0pOworZmxvYXR4ODAgZmxvYXR4ODBfYXJjc2luKGZsb2F0eDgwIHJGbSk7CitmbG9hdHg4MCBmbG9hdHg4MF9hcmN0YW4oZmxvYXR4ODAgckZtKTsKK2Zsb2F0eDgwIGZsb2F0eDgwX2xvZyhmbG9hdHg4MCByRm0pOworZmxvYXR4ODAgZmxvYXR4ODBfdGFuKGZsb2F0eDgwIHJGbSk7CitmbG9hdHg4MCBmbG9hdHg4MF9hcmNjb3MoZmxvYXR4ODAgckZtKTsKK2Zsb2F0eDgwIGZsb2F0eDgwX3BvdyhmbG9hdHg4MCByRm4sIGZsb2F0eDgwIHJGbSk7CitmbG9hdHg4MCBmbG9hdHg4MF9wb2woZmxvYXR4ODAgckZuLCBmbG9hdHg4MCByRm0pOworCitzdGF0aWMgZmxvYXR4ODAgZmxvYXR4ODBfcnNmKGZsb2F0eDgwIHJGbiwgZmxvYXR4ODAgckZtKQoreworCXJldHVybiBmbG9hdHg4MF9zdWIockZtLCByRm4pOworfQorCitzdGF0aWMgZmxvYXR4ODAgZmxvYXR4ODBfcmR2KGZsb2F0eDgwIHJGbiwgZmxvYXR4ODAgckZtKQoreworCXJldHVybiBmbG9hdHg4MF9kaXYockZtLCByRm4pOworfQorCitzdGF0aWMgZmxvYXR4ODAgKCpjb25zdCBkeWFkaWNfZXh0ZW5kZWRbMTZdKShmbG9hdHg4MCByRm4sIGZsb2F0eDgwIHJGbSkgPSB7CisJW0FERl9DT0RFID4+IDIwXSA9IGZsb2F0eDgwX2FkZCwKKwlbTVVGX0NPREUgPj4gMjBdID0gZmxvYXR4ODBfbXVsLAorCVtTVUZfQ09ERSA+PiAyMF0gPSBmbG9hdHg4MF9zdWIsCisJW1JTRl9DT0RFID4+IDIwXSA9IGZsb2F0eDgwX3JzZiwKKwlbRFZGX0NPREUgPj4gMjBdID0gZmxvYXR4ODBfZGl2LAorCVtSREZfQ09ERSA+PiAyMF0gPSBmbG9hdHg4MF9yZHYsCisJW1JNRl9DT0RFID4+IDIwXSA9IGZsb2F0eDgwX3JlbSwKKworCS8qIHN0cmljdGx5LCB0aGVzZSBvcGNvZGVzIHNob3VsZCBub3QgYmUgaW1wbGVtZW50ZWQgKi8KKwlbRk1MX0NPREUgPj4gMjBdID0gZmxvYXR4ODBfbXVsLAorCVtGRFZfQ09ERSA+PiAyMF0gPSBmbG9hdHg4MF9kaXYsCisJW0ZSRF9DT0RFID4+IDIwXSA9IGZsb2F0eDgwX3JkdiwKK307CisKK3N0YXRpYyBmbG9hdHg4MCBmbG9hdHg4MF9tdmYoZmxvYXR4ODAgckZtKQoreworCXJldHVybiByRm07Cit9CisKK3N0YXRpYyBmbG9hdHg4MCBmbG9hdHg4MF9tbmYoZmxvYXR4ODAgckZtKQoreworCXJGbS5oaWdoIF49IDB4ODAwMDsKKwlyZXR1cm4gckZtOworfQorCitzdGF0aWMgZmxvYXR4ODAgZmxvYXR4ODBfYWJzKGZsb2F0eDgwIHJGbSkKK3sKKwlyRm0uaGlnaCAmPSAweDdmZmY7CisJcmV0dXJuIHJGbTsKK30KKworc3RhdGljIGZsb2F0eDgwICgqY29uc3QgbW9uYWRpY19leHRlbmRlZFsxNl0pKGZsb2F0eDgwIHJGbSkgPSB7CisJW01WRl9DT0RFID4+IDIwXSA9IGZsb2F0eDgwX212ZiwKKwlbTU5GX0NPREUgPj4gMjBdID0gZmxvYXR4ODBfbW5mLAorCVtBQlNfQ09ERSA+PiAyMF0gPSBmbG9hdHg4MF9hYnMsCisJW1JORF9DT0RFID4+IDIwXSA9IGZsb2F0eDgwX3JvdW5kX3RvX2ludCwKKwlbVVJEX0NPREUgPj4gMjBdID0gZmxvYXR4ODBfcm91bmRfdG9faW50LAorCVtTUVRfQ09ERSA+PiAyMF0gPSBmbG9hdHg4MF9zcXJ0LAorCVtOUk1fQ09ERSA+PiAyMF0gPSBmbG9hdHg4MF9tdmYsCit9OworCit1bnNpZ25lZCBpbnQgRXh0ZW5kZWRDUERPKGNvbnN0IHVuc2lnbmVkIGludCBvcGNvZGUsIEZQUkVHICogckZkKQoreworCUZQQTExICpmcGExMSA9IEdFVF9GUEExMSgpOworCWZsb2F0eDgwIHJGbTsKKwl1bnNpZ25lZCBpbnQgRm0sIG9wY19tYXNrX3NoaWZ0OworCisJRm0gPSBnZXRGbShvcGNvZGUpOworCWlmIChDT05TVEFOVF9GTShvcGNvZGUpKSB7CisJCXJGbSA9IGdldEV4dGVuZGVkQ29uc3RhbnQoRm0pOworCX0gZWxzZSB7CisJCXN3aXRjaCAoZnBhMTEtPmZUeXBlW0ZtXSkgeworCQljYXNlIHR5cGVTaW5nbGU6CisJCQlyRm0gPSBmbG9hdDMyX3RvX2Zsb2F0eDgwKGZwYTExLT5mcHJlZ1tGbV0uZlNpbmdsZSk7CisJCQlicmVhazsKKworCQljYXNlIHR5cGVEb3VibGU6CisJCQlyRm0gPSBmbG9hdDY0X3RvX2Zsb2F0eDgwKGZwYTExLT5mcHJlZ1tGbV0uZkRvdWJsZSk7CisJCQlicmVhazsKKworCQljYXNlIHR5cGVFeHRlbmRlZDoKKwkJCXJGbSA9IGZwYTExLT5mcHJlZ1tGbV0uZkV4dGVuZGVkOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJb3BjX21hc2tfc2hpZnQgPSAob3Bjb2RlICYgTUFTS19BUklUSE1FVElDX09QQ09ERSkgPj4gMjA7CisJaWYgKCFNT05BRElDX0lOU1RSVUNUSU9OKG9wY29kZSkpIHsKKwkJdW5zaWduZWQgaW50IEZuID0gZ2V0Rm4ob3Bjb2RlKTsKKwkJZmxvYXR4ODAgckZuOworCisJCXN3aXRjaCAoZnBhMTEtPmZUeXBlW0ZuXSkgeworCQljYXNlIHR5cGVTaW5nbGU6CisJCQlyRm4gPSBmbG9hdDMyX3RvX2Zsb2F0eDgwKGZwYTExLT5mcHJlZ1tGbl0uZlNpbmdsZSk7CisJCQlicmVhazsKKworCQljYXNlIHR5cGVEb3VibGU6CisJCQlyRm4gPSBmbG9hdDY0X3RvX2Zsb2F0eDgwKGZwYTExLT5mcHJlZ1tGbl0uZkRvdWJsZSk7CisJCQlicmVhazsKKworCQljYXNlIHR5cGVFeHRlbmRlZDoKKwkJCXJGbiA9IGZwYTExLT5mcHJlZ1tGbl0uZkV4dGVuZGVkOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKGR5YWRpY19leHRlbmRlZFtvcGNfbWFza19zaGlmdF0pIHsKKwkJCXJGZC0+ZkV4dGVuZGVkID0gZHlhZGljX2V4dGVuZGVkW29wY19tYXNrX3NoaWZ0XShyRm4sIHJGbSk7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChtb25hZGljX2V4dGVuZGVkW29wY19tYXNrX3NoaWZ0XSkgeworCQkJckZkLT5mRXh0ZW5kZWQgPSBtb25hZGljX2V4dGVuZGVkW29wY19tYXNrX3NoaWZ0XShyRm0pOworCQl9IGVsc2UgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL2ZwYTExLmMgYi9hcmNoL2FybS9ud2ZwZS9mcGExMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNjE2OTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ud2ZwZS9mcGExMS5jCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICAgIE5ldFdpbmRlciBGbG9hdGluZyBQb2ludCBFbXVsYXRvcgorICAgIChjKSBSZWJlbC5DT00sIDE5OTgsMTk5OQorICAgIChjKSBQaGlsaXAgQmx1bmRlbGwsIDIwMDEKKworICAgIERpcmVjdCBxdWVzdGlvbnMsIGNvbW1lbnRzIHRvIFNjb3R0IEJhbWJyb3VnaCA8c2NvdHRiQG5ldHdpbmRlci5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpbmNsdWRlICJmcGExMS5oIgorI2luY2x1ZGUgImZwb3Bjb2RlLmgiCisKKyNpbmNsdWRlICJmcG1vZHVsZS5oIgorI2luY2x1ZGUgImZwbW9kdWxlLmlubCIKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisvKiBmb3J3YXJkIGRlY2xhcmF0aW9ucyAqLwordW5zaWduZWQgaW50IEVtdWxhdGVDUERPKGNvbnN0IHVuc2lnbmVkIGludCk7Cit1bnNpZ25lZCBpbnQgRW11bGF0ZUNQRFQoY29uc3QgdW5zaWduZWQgaW50KTsKK3Vuc2lnbmVkIGludCBFbXVsYXRlQ1BSVChjb25zdCB1bnNpZ25lZCBpbnQpOworCisvKiBSZXNldCB0aGUgRlBBMTEgY2hpcC4gIENhbGxlZCB0byBpbml0aWFsaXplIGFuZCByZXNldCB0aGUgZW11bGF0b3IuICovCitzdGF0aWMgdm9pZCByZXNldEZQQTExKHZvaWQpCit7CisJaW50IGk7CisJRlBBMTEgKmZwYTExID0gR0VUX0ZQQTExKCk7CisKKwkvKiBpbml0aWFsaXplIHRoZSByZWdpc3RlciB0eXBlIGFycmF5ICovCisJZm9yIChpID0gMDsgaSA8PSA3OyBpKyspIHsKKwkJZnBhMTEtPmZUeXBlW2ldID0gdHlwZU5vbmU7CisJfQorCisJLyogRlBTUjogc2V0IHN5c3RlbSBpZCB0byBGUF9FTVVMQVRPUiwgc2V0IEFDLCBjbGVhciBhbGwgb3RoZXIgYml0cyAqLworCWZwYTExLT5mcHNyID0gRlBfRU1VTEFUT1IgfCBCSVRfQUM7Cit9CisKK3ZvaWQgU2V0Um91bmRpbmdNb2RlKGNvbnN0IHVuc2lnbmVkIGludCBvcGNvZGUpCit7CisJc3dpdGNoIChvcGNvZGUgJiBNQVNLX1JPVU5ESU5HX01PREUpIHsKKwlkZWZhdWx0OgorCWNhc2UgUk9VTkRfVE9fTkVBUkVTVDoKKwkJZmxvYXRfcm91bmRpbmdfbW9kZSA9IGZsb2F0X3JvdW5kX25lYXJlc3RfZXZlbjsKKwkJYnJlYWs7CisKKwljYXNlIFJPVU5EX1RPX1BMVVNfSU5GSU5JVFk6CisJCWZsb2F0X3JvdW5kaW5nX21vZGUgPSBmbG9hdF9yb3VuZF91cDsKKwkJYnJlYWs7CisKKwljYXNlIFJPVU5EX1RPX01JTlVTX0lORklOSVRZOgorCQlmbG9hdF9yb3VuZGluZ19tb2RlID0gZmxvYXRfcm91bmRfZG93bjsKKwkJYnJlYWs7CisKKwljYXNlIFJPVU5EX1RPX1pFUk86CisJCWZsb2F0X3JvdW5kaW5nX21vZGUgPSBmbG9hdF9yb3VuZF90b196ZXJvOworCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgU2V0Um91bmRpbmdQcmVjaXNpb24oY29uc3QgdW5zaWduZWQgaW50IG9wY29kZSkKK3sKKyNpZmRlZiBDT05GSUdfRlBFX05XRlBFX1hQCisJc3dpdGNoIChvcGNvZGUgJiBNQVNLX1JPVU5ESU5HX1BSRUNJU0lPTikgeworCWNhc2UgUk9VTkRfU0lOR0xFOgorCQlmbG9hdHg4MF9yb3VuZGluZ19wcmVjaXNpb24gPSAzMjsKKwkJYnJlYWs7CisKKwljYXNlIFJPVU5EX0RPVUJMRToKKwkJZmxvYXR4ODBfcm91bmRpbmdfcHJlY2lzaW9uID0gNjQ7CisJCWJyZWFrOworCisJY2FzZSBST1VORF9FWFRFTkRFRDoKKwkJZmxvYXR4ODBfcm91bmRpbmdfcHJlY2lzaW9uID0gODA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZmxvYXR4ODBfcm91bmRpbmdfcHJlY2lzaW9uID0gODA7CisJfQorI2VuZGlmCit9CisKK3ZvaWQgbndmcGVfaW5pdF9mcGEodW5pb24gZnBfc3RhdGUgKmZwKQoreworCUZQQTExICpmcGExMSA9IChGUEExMSAqKWZwOworI2lmZGVmIE5XRlBFX0RFQlVHCisJcHJpbnRrKCJOV0ZQRTogc2V0dGluZyB1cCBzdGF0ZS5cbiIpOworI2VuZGlmCisgCW1lbXNldChmcGExMSwgMCwgc2l6ZW9mKEZQQTExKSk7CisJcmVzZXRGUEExMSgpOworCVNldFJvdW5kaW5nTW9kZShST1VORF9UT19ORUFSRVNUKTsKKwlTZXRSb3VuZGluZ1ByZWNpc2lvbihST1VORF9FWFRFTkRFRCk7CisJZnBhMTEtPmluaXRmbGFnID0gMTsKK30KKworLyogRW11bGF0ZSB0aGUgaW5zdHJ1Y3Rpb24gaW4gdGhlIG9wY29kZS4gKi8KK3Vuc2lnbmVkIGludCBFbXVsYXRlQWxsKHVuc2lnbmVkIGludCBvcGNvZGUpCit7CisJdW5zaWduZWQgaW50IGNvZGU7CisKKyNpZmRlZiBOV0ZQRV9ERUJVRworCXByaW50aygiTldGUEU6IGVtdWxhdGluZyBvcGNvZGUgJTA4eFxuIiwgb3Bjb2RlKTsKKyNlbmRpZgorCWNvZGUgPSBvcGNvZGUgJiAweDAwMDAwZjAwOworCWlmIChjb2RlID09IDB4MDAwMDAxMDAgfHwgY29kZSA9PSAweDAwMDAwMjAwKSB7CisJCS8qIEZvciBjb3Byb2Nlc3NvciAxIG9yIDIgKEZQQTExKSAqLworCQljb2RlID0gb3Bjb2RlICYgMHgwZTAwMDAwMDsKKwkJaWYgKGNvZGUgPT0gMHgwZTAwMDAwMCkgeworCQkJaWYgKG9wY29kZSAmIDB4MDAwMDAwMTApIHsKKwkJCQkvKiBFbXVsYXRlIGNvbnZlcnNpb24gb3Bjb2Rlcy4gKi8KKwkJCQkvKiBFbXVsYXRlIHJlZ2lzdGVyIHRyYW5zZmVyIG9wY29kZXMuICovCisJCQkJLyogRW11bGF0ZSBjb21wYXJpc29uIG9wY29kZXMuICovCisJCQkJcmV0dXJuIEVtdWxhdGVDUFJUKG9wY29kZSk7CisJCQl9IGVsc2UgeworCQkJCS8qIEVtdWxhdGUgbW9uYWRpYyBhcml0aG1ldGljIG9wY29kZXMuICovCisJCQkJLyogRW11bGF0ZSBkeWFkaWMgYXJpdGhtZXRpYyBvcGNvZGVzLiAqLworCQkJCXJldHVybiBFbXVsYXRlQ1BETyhvcGNvZGUpOworCQkJfQorCQl9IGVsc2UgaWYgKGNvZGUgPT0gMHgwYzAwMDAwMCkgeworCQkJLyogRW11bGF0ZSBsb2FkL3N0b3JlIG9wY29kZXMuICovCisJCQkvKiBFbXVsYXRlIGxvYWQvc3RvcmUgbXVsdGlwbGUgb3Bjb2Rlcy4gKi8KKwkJCXJldHVybiBFbXVsYXRlQ1BEVChvcGNvZGUpOworCQl9CisJfQorCisJLyogSW52YWxpZCBpbnN0cnVjdGlvbiBkZXRlY3RlZC4gIFJldHVybiBGQUxTRS4gKi8KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL2ZwYTExLmggYi9hcmNoL2FybS9ud2ZwZS9mcGExMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1Y2M2NTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ud2ZwZS9mcGExMS5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgICAgTmV0V2luZGVyIEZsb2F0aW5nIFBvaW50IEVtdWxhdG9yCisgICAgKGMpIFJlYmVsLmNvbSwgMTk5OC0xOTk5CisgICAgCisgICAgRGlyZWN0IHF1ZXN0aW9ucywgY29tbWVudHMgdG8gU2NvdHQgQmFtYnJvdWdoIDxzY290dGJAbmV0d2luZGVyLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworI2lmbmRlZiBfX0ZQQTExX0hfXworI2RlZmluZSBfX0ZQQTExX0hfXworCisjZGVmaW5lIEdFVF9GUEExMSgpICgoRlBBMTEgKikoJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZnBzdGF0ZSkpCisKKy8qCisgKiBUaGUgcHJvY2Vzc2VzIHJlZ2lzdGVycyBhcmUgYWx3YXlzIGF0IHRoZSB2ZXJ5IHRvcCBvZiB0aGUgOEsKKyAqIHN0YWNrK3Rhc2sgc3RydWN0LiAgVXNlIHRoZSBzYW1lIG1ldGhvZCBhcyAnY3VycmVudCcgdXNlcyB0bworICogcmVhY2ggdGhlbS4KKyAqLworcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyAqdXNlcl9yZWdpc3RlcnMgYXNtKCJzbCIpOworCisjZGVmaW5lIEdFVF9VU0VSUkVHKCkgKHVzZXJfcmVnaXN0ZXJzKQorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKworLyogaW5jbHVkZXMgKi8KKyNpbmNsdWRlICJmcHNyLmgiCQkvKiBGUCBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlICJtaWxpZXUuaCIKKyNpbmNsdWRlICJzb2Z0ZmxvYXQuaCIKKworI2RlZmluZQkJdHlwZU5vbmUJCTB4MDAKKyNkZWZpbmUJCXR5cGVTaW5nbGUJCTB4MDEKKyNkZWZpbmUJCXR5cGVEb3VibGUJCTB4MDIKKyNkZWZpbmUJCXR5cGVFeHRlbmRlZAkJMHgwMworCisvKgorICogVGhpcyBtdXN0IGJlIG5vIG1vcmUgYW5kIG5vIGxlc3MgdGhhbiAxMiBieXRlcy4KKyAqLwordHlwZWRlZiB1bmlvbiB0YWdGUFJFRyB7CisJZmxvYXQzMiBmU2luZ2xlOworCWZsb2F0NjQgZkRvdWJsZTsKKyNpZmRlZiBDT05GSUdfRlBFX05XRlBFX1hQCisJZmxvYXR4ODAgZkV4dGVuZGVkOworI2Vsc2UKKwlpbnQgcGFkZGluZ1szXTsKKyNlbmRpZgorfSBGUFJFRzsKKworLyoKKyAqIEZQQTExIGRldmljZSBtb2RlbC4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlLiAgRG8gbm90IHJlLW9yZGVyLgorICogT25seSBhZGQgbmV3IHN0dWZmIHRvIHRoZSBlbmQsIGFuZCBkbyBub3QgY2hhbmdlIHRoZSBzaXplIG9mCisgKiBhbnkgZWxlbWVudC4gIEVsZW1lbnRzIG9mIHRoaXMgc3RydWN0dXJlIGFyZSB1c2VkIGJ5IHVzZXIKKyAqIHNwYWNlLCBhbmQgbXVzdCBtYXRjaCBzdHJ1Y3QgdXNlcl9mcCBpbiBpbmNsdWRlL2FzbS1hcm0vdXNlci5oLgorICogV2UgaW5jbHVkZSB0aGUgYnl0ZSBvZmZzZXRzIGJlbG93IGZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzLgorICoKKyAqIFRoZSBzaXplIG9mIHRoaXMgc3RydWN0dXJlIGFuZCBGUFJFRyBhcmUgY2hlY2tlZCBieSBmcG1vZHVsZS5jCisgKiBvbiBpbml0aWFsaXNhdGlvbi4gIElmIHRoZSBydWxlcyBoYXZlIGJlZW4gYnJva2VuLCBOV0ZQRSB3aWxsCisgKiBub3QgaW5pdGlhbGlzZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgdGFnRlBBMTEgeworLyogICAwICovIEZQUkVHIGZwcmVnWzhdOwkvKiA4IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAqLworLyogIDk2ICovIEZQU1IgZnBzcjsJCS8qIGZsb2F0aW5nIHBvaW50IHN0YXR1cyByZWdpc3RlciAqLworLyogMTAwICovIEZQQ1IgZnBjcjsJCS8qIGZsb2F0aW5nIHBvaW50IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKy8qIDEwNCAqLyB1bnNpZ25lZCBjaGFyIGZUeXBlWzhdOwkvKiB0eXBlIG9mIGZsb2F0aW5nIHBvaW50IHZhbHVlIGhlbGQgaW4KKwkJCQkJICAgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzLiAgT25lIG9mCisJCQkJCSAgIG5vbmUsIHNpbmdsZSwgZG91YmxlIG9yIGV4dGVuZGVkLiAqLworLyogMTEyICovIGludCBpbml0ZmxhZzsJCS8qIHRoaXMgaXMgc3BlY2lhbC4gIFRoZSBrZXJuZWwgZ3VhcmFudGVlcworCQkJCSAgIHRvIHNldCBpdCB0byAwIHdoZW4gYSB0aHJlYWQgaXMgbGF1bmNoZWQsCisJCQkJICAgc28gd2UgY2FuIHVzZSBpdCB0byBkZXRlY3Qgd2hldGhlciB0aGlzCisJCQkJICAgaW5zdGFuY2Ugb2YgdGhlIGVtdWxhdG9yIG5lZWRzIHRvIGJlCisJCQkJICAgaW5pdGlhbGlzZWQuICovCit9IEZQQTExOworCitleHRlcm4gdm9pZCBTZXRSb3VuZGluZ01vZGUoY29uc3QgdW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIFNldFJvdW5kaW5nUHJlY2lzaW9uKGNvbnN0IHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBud2ZwZV9pbml0X2ZwYSh1bmlvbiBmcF9zdGF0ZSAqZnApOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL2ZwYTExLmlubCBiL2FyY2gvYXJtL253ZnBlL2ZwYTExLmlubApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGMzY2FmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbndmcGUvZnBhMTEuaW5sCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgICAgTmV0V2luZGVyIEZsb2F0aW5nIFBvaW50IEVtdWxhdG9yCisgICAgKGMpIFJlYmVsLkNPTSwgMTk5OCwxOTk5CisKKyAgICBEaXJlY3QgcXVlc3Rpb25zLCBjb21tZW50cyB0byBTY290dCBCYW1icm91Z2ggPHNjb3R0YkBuZXR3aW5kZXIub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisjaW5jbHVkZSAiZnBhMTEuaCIKKworLyogUmVhZCBhbmQgd3JpdGUgZmxvYXRpbmcgcG9pbnQgc3RhdHVzIHJlZ2lzdGVyICovCitleHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgcmVhZEZQU1Iodm9pZCkKK3sKKwlGUEExMSAqZnBhMTEgPSBHRVRfRlBBMTEoKTsKKwlyZXR1cm4gKGZwYTExLT5mcHNyKTsKK30KKworZXh0ZXJuIF9faW5saW5lX18gdm9pZCB3cml0ZUZQU1IoRlBTUiByZWcpCit7CisJRlBBMTEgKmZwYTExID0gR0VUX0ZQQTExKCk7CisJLyogdGhlIHN5c2lkIGJ5dGUgaW4gdGhlIHN0YXR1cyByZWdpc3RlciBpcyByZWFkb25seSAqLworCWZwYTExLT5mcHNyID0gKGZwYTExLT5mcHNyICYgTUFTS19TWVNJRCkgfCAocmVnICYgfk1BU0tfU1lTSUQpOworfQorCisvKiBSZWFkIGFuZCB3cml0ZSBmbG9hdGluZyBwb2ludCBjb250cm9sIHJlZ2lzdGVyICovCitleHRlcm4gX19pbmxpbmVfXyBGUENSIHJlYWRGUENSKHZvaWQpCit7CisJRlBBMTEgKmZwYTExID0gR0VUX0ZQQTExKCk7CisJLyogY2xlYXIgU0IsIEFCIGFuZCBEQSBiaXRzIGJlZm9yZSByZXR1cm5pbmcgRlBDUiAqLworCXJldHVybiAoZnBhMTEtPmZwY3IgJiB+TUFTS19SRkMpOworfQorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIHdyaXRlRlBDUihGUENSIHJlZykKK3sKKwlGUEExMSAqZnBhMTEgPSBHRVRfRlBBMTEoKTsKKwlmcGExMS0+ZnBjciAmPSB+TUFTS19XRkM7CQkvKiBjbGVhciBTQiwgQUIgYW5kIERBIGJpdHMgKi8KKwlmcGExMS0+ZnBjciB8PSAocmVnICYgTUFTS19XRkMpOwkvKiB3cml0ZSBTQiwgQUIgYW5kIERBIGJpdHMgKi8KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL2ZwYTExX2NwZG8uYyBiL2FyY2gvYXJtL253ZnBlL2ZwYTExX2NwZG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmVhNjc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbndmcGUvZnBhMTFfY3Bkby5jCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICAgIE5ldFdpbmRlciBGbG9hdGluZyBQb2ludCBFbXVsYXRvcgorICAgIChjKSBSZWJlbC5DT00sIDE5OTgsMTk5OQorICAgIChjKSBQaGlsaXAgQmx1bmRlbGwsIDIwMDEKKworICAgIERpcmVjdCBxdWVzdGlvbnMsIGNvbW1lbnRzIHRvIFNjb3R0IEJhbWJyb3VnaCA8c2NvdHRiQG5ldHdpbmRlci5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlICJmcGExMS5oIgorI2luY2x1ZGUgImZwb3Bjb2RlLmgiCisKK3Vuc2lnbmVkIGludCBTaW5nbGVDUERPKGNvbnN0IHVuc2lnbmVkIGludCBvcGNvZGUsIEZQUkVHICogckZkKTsKK3Vuc2lnbmVkIGludCBEb3VibGVDUERPKGNvbnN0IHVuc2lnbmVkIGludCBvcGNvZGUsIEZQUkVHICogckZkKTsKK3Vuc2lnbmVkIGludCBFeHRlbmRlZENQRE8oY29uc3QgdW5zaWduZWQgaW50IG9wY29kZSwgRlBSRUcgKiByRmQpOworCit1bnNpZ25lZCBpbnQgRW11bGF0ZUNQRE8oY29uc3QgdW5zaWduZWQgaW50IG9wY29kZSkKK3sKKwlGUEExMSAqZnBhMTEgPSBHRVRfRlBBMTEoKTsKKwlGUFJFRyAqckZkOworCXVuc2lnbmVkIGludCBuVHlwZSwgbkRlc3QsIG5SYzsKKworCS8qIEdldCB0aGUgZGVzdGluYXRpb24gc2l6ZS4gIElmIG5vdCB2YWxpZCBsZXQgTGludXggcGVyZm9ybQorCSAgIGFuIGludmFsaWQgaW5zdHJ1Y3Rpb24gdHJhcC4gKi8KKwluRGVzdCA9IGdldERlc3RpbmF0aW9uU2l6ZShvcGNvZGUpOworCWlmICh0eXBlTm9uZSA9PSBuRGVzdCkKKwkJcmV0dXJuIDA7CisKKwlTZXRSb3VuZGluZ01vZGUob3Bjb2RlKTsKKworCS8qIENvbXBhcmUgdGhlIHNpemUgb2YgdGhlIG9wZXJhbmRzIGluIEZuIGFuZCBGbS4KKwkgICBDaG9vc2UgdGhlIGxhcmdlc3Qgc2l6ZSBhbmQgcGVyZm9ybSBvcGVyYXRpb25zIGluIHRoYXQgc2l6ZSwKKwkgICBpbiBvcmRlciB0byBtYWtlIHVzZSBvZiBhbGwgdGhlIHByZWNpc2lvbiBvZiB0aGUgb3BlcmFuZHMuCisJICAgSWYgRm0gaXMgYSBjb25zdGFudCwgd2UganVzdCBncmFiIGEgY29uc3RhbnQgb2YgYSBzaXplCisJICAgbWF0Y2hpbmcgdGhlIHNpemUgb2YgdGhlIG9wZXJhbmQgaW4gRm4uICovCisJaWYgKE1PTkFESUNfSU5TVFJVQ1RJT04ob3Bjb2RlKSkKKwkJblR5cGUgPSBuRGVzdDsKKwllbHNlCisJCW5UeXBlID0gZnBhMTEtPmZUeXBlW2dldEZuKG9wY29kZSldOworCisJaWYgKCFDT05TVEFOVF9GTShvcGNvZGUpKSB7CisJCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBGbSA9IGdldEZtKG9wY29kZSk7CisJCWlmIChuVHlwZSA8IGZwYTExLT5mVHlwZVtGbV0pIHsKKwkJCW5UeXBlID0gZnBhMTEtPmZUeXBlW0ZtXTsKKwkJfQorCX0KKworCXJGZCA9ICZmcGExMS0+ZnByZWdbZ2V0RmQob3Bjb2RlKV07CisKKwlzd2l0Y2ggKG5UeXBlKSB7CisJY2FzZSB0eXBlU2luZ2xlOgorCQluUmMgPSBTaW5nbGVDUERPKG9wY29kZSwgckZkKTsKKwkJYnJlYWs7CisJY2FzZSB0eXBlRG91YmxlOgorCQluUmMgPSBEb3VibGVDUERPKG9wY29kZSwgckZkKTsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0ZQRV9OV0ZQRV9YUAorCWNhc2UgdHlwZUV4dGVuZGVkOgorCQluUmMgPSBFeHRlbmRlZENQRE8ob3Bjb2RlLCByRmQpOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCW5SYyA9IDA7CisJfQorCisJLyogVGhlIENQRE8gZnVuY3Rpb25zIHVzZWQgdG8gYWx3YXlzIHNldCB0aGUgZGVzdGluYXRpb24gdHlwZQorCSAgIHRvIGJlIHRoZSBzYW1lIGFzIHRoZWlyIHdvcmtpbmcgc2l6ZS4gKi8KKworCWlmIChuUmMgIT0gMCkgeworCQkvKiBJZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZCwgY2hlY2sgdG8gc2VlIGlmIHRoZSByZXN1bHQgaW4gdGhlCisJCSAgIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGlzIHRoZSBjb3JyZWN0IHNpemUuICBJZiBub3QgZm9yY2UgaXQKKwkJICAgdG8gYmUuICovCisKKwkJZnBhMTEtPmZUeXBlW2dldEZkKG9wY29kZSldID0gbkRlc3Q7CisKKyNpZmRlZiBDT05GSUdfRlBFX05XRlBFX1hQCisJCWlmIChuRGVzdCAhPSBuVHlwZSkgeworCQkJc3dpdGNoIChuRGVzdCkgeworCQkJY2FzZSB0eXBlU2luZ2xlOgorCQkJCXsKKwkJCQkJaWYgKHR5cGVEb3VibGUgPT0gblR5cGUpCisJCQkJCQlyRmQtPmZTaW5nbGUgPSBmbG9hdDY0X3RvX2Zsb2F0MzIockZkLT5mRG91YmxlKTsKKwkJCQkJZWxzZQorCQkJCQkJckZkLT5mU2luZ2xlID0gZmxvYXR4ODBfdG9fZmxvYXQzMihyRmQtPmZFeHRlbmRlZCk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIHR5cGVEb3VibGU6CisJCQkJeworCQkJCQlpZiAodHlwZVNpbmdsZSA9PSBuVHlwZSkKKwkJCQkJCXJGZC0+ZkRvdWJsZSA9IGZsb2F0MzJfdG9fZmxvYXQ2NChyRmQtPmZTaW5nbGUpOworCQkJCQllbHNlCisJCQkJCQlyRmQtPmZEb3VibGUgPSBmbG9hdHg4MF90b19mbG9hdDY0KHJGZC0+ZkV4dGVuZGVkKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgdHlwZUV4dGVuZGVkOgorCQkJCXsKKwkJCQkJaWYgKHR5cGVTaW5nbGUgPT0gblR5cGUpCisJCQkJCQlyRmQtPmZFeHRlbmRlZCA9IGZsb2F0MzJfdG9fZmxvYXR4ODAockZkLT5mU2luZ2xlKTsKKwkJCQkJZWxzZQorCQkJCQkJckZkLT5mRXh0ZW5kZWQgPSBmbG9hdDY0X3RvX2Zsb2F0eDgwKHJGZC0+ZkRvdWJsZSk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisjZWxzZQorCQlpZiAobkRlc3QgIT0gblR5cGUpIHsKKwkJCWlmIChuRGVzdCA9PSB0eXBlU2luZ2xlKQorCQkJCXJGZC0+ZlNpbmdsZSA9IGZsb2F0NjRfdG9fZmxvYXQzMihyRmQtPmZEb3VibGUpOworCQkJZWxzZQorCQkJCXJGZC0+ZkRvdWJsZSA9IGZsb2F0MzJfdG9fZmxvYXQ2NChyRmQtPmZTaW5nbGUpOworCQl9CisjZW5kaWYKKwl9CisKKwlyZXR1cm4gblJjOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbndmcGUvZnBhMTFfY3BkdC5jIGIvYXJjaC9hcm0vbndmcGUvZnBhMTFfY3BkdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZmI2M2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ud2ZwZS9mcGExMV9jcGR0LmMKQEAgLTAsMCArMSwzOTIgQEAKKy8qCisgICAgTmV0V2luZGVyIEZsb2F0aW5nIFBvaW50IEVtdWxhdG9yCisgICAgKGMpIFJlYmVsLmNvbSwgMTk5OC0xOTk5CisgICAgKGMpIFBoaWxpcCBCbHVuZGVsbCwgMTk5OCwgMjAwMQorCisgICAgRGlyZWN0IHF1ZXN0aW9ucywgY29tbWVudHMgdG8gU2NvdHQgQmFtYnJvdWdoIDxzY290dGJAbmV0d2luZGVyLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgImZwYTExLmgiCisjaW5jbHVkZSAic29mdGZsb2F0LmgiCisjaW5jbHVkZSAiZnBvcGNvZGUuaCIKKyNpbmNsdWRlICJmcG1vZHVsZS5oIgorI2luY2x1ZGUgImZwbW9kdWxlLmlubCIKKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2FkU2luZ2xlKGNvbnN0IHVuc2lnbmVkIGludCBGbiwgY29uc3QgdW5zaWduZWQgaW50IF9fdXNlciAqcE1lbSkKK3sKKwlGUEExMSAqZnBhMTEgPSBHRVRfRlBBMTEoKTsKKwlmcGExMS0+ZlR5cGVbRm5dID0gdHlwZVNpbmdsZTsKKwlnZXRfdXNlcihmcGExMS0+ZnByZWdbRm5dLmZTaW5nbGUsIHBNZW0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9hZERvdWJsZShjb25zdCB1bnNpZ25lZCBpbnQgRm4sIGNvbnN0IHVuc2lnbmVkIGludCBfX3VzZXIgKnBNZW0pCit7CisJRlBBMTEgKmZwYTExID0gR0VUX0ZQQTExKCk7CisJdW5zaWduZWQgaW50ICpwOworCXAgPSAodW5zaWduZWQgaW50ICopICZmcGExMS0+ZnByZWdbRm5dLmZEb3VibGU7CisJZnBhMTEtPmZUeXBlW0ZuXSA9IHR5cGVEb3VibGU7CisjaWZkZWYgX19BUk1FQl9fCisJZ2V0X3VzZXIocFswXSwgJnBNZW1bMF0pOwkvKiBzaWduICYgZXhwb25lbnQgKi8KKwlnZXRfdXNlcihwWzFdLCAmcE1lbVsxXSk7CisjZWxzZQorCWdldF91c2VyKHBbMF0sICZwTWVtWzFdKTsKKwlnZXRfdXNlcihwWzFdLCAmcE1lbVswXSk7CS8qIHNpZ24gJiBleHBvbmVudCAqLworI2VuZGlmCit9CisKKyNpZmRlZiBDT05GSUdfRlBFX05XRlBFX1hQCitzdGF0aWMgaW5saW5lIHZvaWQgbG9hZEV4dGVuZGVkKGNvbnN0IHVuc2lnbmVkIGludCBGbiwgY29uc3QgdW5zaWduZWQgaW50IF9fdXNlciAqcE1lbSkKK3sKKwlGUEExMSAqZnBhMTEgPSBHRVRfRlBBMTEoKTsKKwl1bnNpZ25lZCBpbnQgKnA7CisJcCA9ICh1bnNpZ25lZCBpbnQgKikgJmZwYTExLT5mcHJlZ1tGbl0uZkV4dGVuZGVkOworCWZwYTExLT5mVHlwZVtGbl0gPSB0eXBlRXh0ZW5kZWQ7CisJZ2V0X3VzZXIocFswXSwgJnBNZW1bMF0pOwkvKiBzaWduICYgZXhwb25lbnQgKi8KKwlnZXRfdXNlcihwWzFdLCAmcE1lbVsyXSk7CS8qIGxzIGJpdHMgKi8KKwlnZXRfdXNlcihwWzJdLCAmcE1lbVsxXSk7CS8qIG1zIGJpdHMgKi8KK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9hZE11bHRpcGxlKGNvbnN0IHVuc2lnbmVkIGludCBGbiwgY29uc3QgdW5zaWduZWQgaW50IF9fdXNlciAqcE1lbSkKK3sKKwlGUEExMSAqZnBhMTEgPSBHRVRfRlBBMTEoKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgKnA7CisJdW5zaWduZWQgbG9uZyB4OworCisJcCA9ICh1bnNpZ25lZCBpbnQgKikgJihmcGExMS0+ZnByZWdbRm5dKTsKKwlnZXRfdXNlcih4LCAmcE1lbVswXSk7CisJZnBhMTEtPmZUeXBlW0ZuXSA9ICh4ID4+IDE0KSAmIDB4MDAwMDAwMDM7CisKKwlzd2l0Y2ggKGZwYTExLT5mVHlwZVtGbl0pIHsKKwljYXNlIHR5cGVTaW5nbGU6CisJY2FzZSB0eXBlRG91YmxlOgorCQl7CisJCQlnZXRfdXNlcihwWzBdLCAmcE1lbVsyXSk7CS8qIFNpbmdsZSAqLworCQkJZ2V0X3VzZXIocFsxXSwgJnBNZW1bMV0pOwkvKiBkb3VibGUgbXN3ICovCisJCQlwWzJdID0gMDsJCQkvKiBlbXB0eSAqLworCQl9CisJCWJyZWFrOworCisjaWZkZWYgQ09ORklHX0ZQRV9OV0ZQRV9YUAorCWNhc2UgdHlwZUV4dGVuZGVkOgorCQl7CisJCQlnZXRfdXNlcihwWzFdLCAmcE1lbVsyXSk7CisJCQlnZXRfdXNlcihwWzJdLCAmcE1lbVsxXSk7CS8qIG1zdyAqLworCQkJcFswXSA9ICh4ICYgMHg4MDAwM2ZmZik7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG9yZVNpbmdsZShjb25zdCB1bnNpZ25lZCBpbnQgRm4sIHVuc2lnbmVkIGludCBfX3VzZXIgKnBNZW0pCit7CisJRlBBMTEgKmZwYTExID0gR0VUX0ZQQTExKCk7CisJdW5pb24geworCQlmbG9hdDMyIGY7CisJCXVuc2lnbmVkIGludCBpWzFdOworCX0gdmFsOworCisJc3dpdGNoIChmcGExMS0+ZlR5cGVbRm5dKSB7CisJY2FzZSB0eXBlRG91YmxlOgorCQl2YWwuZiA9IGZsb2F0NjRfdG9fZmxvYXQzMihmcGExMS0+ZnByZWdbRm5dLmZEb3VibGUpOworCQlicmVhazsKKworI2lmZGVmIENPTkZJR19GUEVfTldGUEVfWFAKKwljYXNlIHR5cGVFeHRlbmRlZDoKKwkJdmFsLmYgPSBmbG9hdHg4MF90b19mbG9hdDMyKGZwYTExLT5mcHJlZ1tGbl0uZkV4dGVuZGVkKTsKKwkJYnJlYWs7CisjZW5kaWYKKworCWRlZmF1bHQ6CisJCXZhbC5mID0gZnBhMTEtPmZwcmVnW0ZuXS5mU2luZ2xlOworCX0KKworCXB1dF91c2VyKHZhbC5pWzBdLCBwTWVtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN0b3JlRG91YmxlKGNvbnN0IHVuc2lnbmVkIGludCBGbiwgdW5zaWduZWQgaW50IF9fdXNlciAqcE1lbSkKK3sKKwlGUEExMSAqZnBhMTEgPSBHRVRfRlBBMTEoKTsKKwl1bmlvbiB7CisJCWZsb2F0NjQgZjsKKwkJdW5zaWduZWQgaW50IGlbMl07CisJfSB2YWw7CisKKwlzd2l0Y2ggKGZwYTExLT5mVHlwZVtGbl0pIHsKKwljYXNlIHR5cGVTaW5nbGU6CisJCXZhbC5mID0gZmxvYXQzMl90b19mbG9hdDY0KGZwYTExLT5mcHJlZ1tGbl0uZlNpbmdsZSk7CisJCWJyZWFrOworCisjaWZkZWYgQ09ORklHX0ZQRV9OV0ZQRV9YUAorCWNhc2UgdHlwZUV4dGVuZGVkOgorCQl2YWwuZiA9IGZsb2F0eDgwX3RvX2Zsb2F0NjQoZnBhMTEtPmZwcmVnW0ZuXS5mRXh0ZW5kZWQpOworCQlicmVhazsKKyNlbmRpZgorCisJZGVmYXVsdDoKKwkJdmFsLmYgPSBmcGExMS0+ZnByZWdbRm5dLmZEb3VibGU7CisJfQorCisjaWZkZWYgX19BUk1FQl9fCisJcHV0X3VzZXIodmFsLmlbMF0sICZwTWVtWzBdKTsJLyogbXN3ICovCisJcHV0X3VzZXIodmFsLmlbMV0sICZwTWVtWzFdKTsJLyogbHN3ICovCisjZWxzZQorCXB1dF91c2VyKHZhbC5pWzFdLCAmcE1lbVswXSk7CS8qIG1zdyAqLworCXB1dF91c2VyKHZhbC5pWzBdLCAmcE1lbVsxXSk7CS8qIGxzdyAqLworI2VuZGlmCit9CisKKyNpZmRlZiBDT05GSUdfRlBFX05XRlBFX1hQCitzdGF0aWMgaW5saW5lIHZvaWQgc3RvcmVFeHRlbmRlZChjb25zdCB1bnNpZ25lZCBpbnQgRm4sIHVuc2lnbmVkIGludCBfX3VzZXIgKnBNZW0pCit7CisJRlBBMTEgKmZwYTExID0gR0VUX0ZQQTExKCk7CisJdW5pb24geworCQlmbG9hdHg4MCBmOworCQl1bnNpZ25lZCBpbnQgaVszXTsKKwl9IHZhbDsKKworCXN3aXRjaCAoZnBhMTEtPmZUeXBlW0ZuXSkgeworCWNhc2UgdHlwZVNpbmdsZToKKwkJdmFsLmYgPSBmbG9hdDMyX3RvX2Zsb2F0eDgwKGZwYTExLT5mcHJlZ1tGbl0uZlNpbmdsZSk7CisJCWJyZWFrOworCisJY2FzZSB0eXBlRG91YmxlOgorCQl2YWwuZiA9IGZsb2F0NjRfdG9fZmxvYXR4ODAoZnBhMTEtPmZwcmVnW0ZuXS5mRG91YmxlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQl2YWwuZiA9IGZwYTExLT5mcHJlZ1tGbl0uZkV4dGVuZGVkOworCX0KKworCXB1dF91c2VyKHZhbC5pWzBdLCAmcE1lbVswXSk7CS8qIHNpZ24gJiBleHAgKi8KKwlwdXRfdXNlcih2YWwuaVsxXSwgJnBNZW1bMl0pOworCXB1dF91c2VyKHZhbC5pWzJdLCAmcE1lbVsxXSk7CS8qIG1zdyAqLworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG9yZU11bHRpcGxlKGNvbnN0IHVuc2lnbmVkIGludCBGbiwgdW5zaWduZWQgaW50IF9fdXNlciAqcE1lbSkKK3sKKwlGUEExMSAqZnBhMTEgPSBHRVRfRlBBMTEoKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgblR5cGUsICpwOworCisJcCA9ICh1bnNpZ25lZCBpbnQgKikgJihmcGExMS0+ZnByZWdbRm5dKTsKKwluVHlwZSA9IGZwYTExLT5mVHlwZVtGbl07CisKKwlzd2l0Y2ggKG5UeXBlKSB7CisJY2FzZSB0eXBlU2luZ2xlOgorCWNhc2UgdHlwZURvdWJsZToKKwkJeworCQkJcHV0X3VzZXIocFswXSwgJnBNZW1bMl0pOwkvKiBzaW5nbGUgKi8KKwkJCXB1dF91c2VyKHBbMV0sICZwTWVtWzFdKTsJLyogZG91YmxlIG1zdyAqLworCQkJcHV0X3VzZXIoblR5cGUgPDwgMTQsICZwTWVtWzBdKTsKKwkJfQorCQlicmVhazsKKworI2lmZGVmIENPTkZJR19GUEVfTldGUEVfWFAKKwljYXNlIHR5cGVFeHRlbmRlZDoKKwkJeworCQkJcHV0X3VzZXIocFsyXSwgJnBNZW1bMV0pOwkvKiBtc3cgKi8KKwkJCXB1dF91c2VyKHBbMV0sICZwTWVtWzJdKTsKKwkJCXB1dF91c2VyKChwWzBdICYgMHg4MDAwM2ZmZikgfCAoblR5cGUgPDwgMTQpLCAmcE1lbVswXSk7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKwl9Cit9CisKK3Vuc2lnbmVkIGludCBQZXJmb3JtTERGKGNvbnN0IHVuc2lnbmVkIGludCBvcGNvZGUpCit7CisJdW5zaWduZWQgaW50IF9fdXNlciAqcEJhc2UsICpwQWRkcmVzcywgKnBGaW5hbDsKKwl1bnNpZ25lZCBpbnQgblJjID0gMSwgd3JpdGVfYmFjayA9IFdSSVRFX0JBQ0sob3Bjb2RlKTsKKworCXBCYXNlID0gKHVuc2lnbmVkIGludCBfX3VzZXIgKikgcmVhZFJlZ2lzdGVyKGdldFJuKG9wY29kZSkpOworCWlmIChSRUdfUEMgPT0gZ2V0Um4ob3Bjb2RlKSkgeworCQlwQmFzZSArPSAyOworCQl3cml0ZV9iYWNrID0gMDsKKwl9CisKKwlwRmluYWwgPSBwQmFzZTsKKwlpZiAoQklUX1VQX1NFVChvcGNvZGUpKQorCQlwRmluYWwgKz0gZ2V0T2Zmc2V0KG9wY29kZSk7CisJZWxzZQorCQlwRmluYWwgLT0gZ2V0T2Zmc2V0KG9wY29kZSk7CisKKwlpZiAoUFJFSU5ERVhFRChvcGNvZGUpKQorCQlwQWRkcmVzcyA9IHBGaW5hbDsKKwllbHNlCisJCXBBZGRyZXNzID0gcEJhc2U7CisKKwlzd2l0Y2ggKG9wY29kZSAmIE1BU0tfVFJBTlNGRVJfTEVOR1RIKSB7CisJY2FzZSBUUkFOU0ZFUl9TSU5HTEU6CisJCWxvYWRTaW5nbGUoZ2V0RmQob3Bjb2RlKSwgcEFkZHJlc3MpOworCQlicmVhazsKKwljYXNlIFRSQU5TRkVSX0RPVUJMRToKKwkJbG9hZERvdWJsZShnZXRGZChvcGNvZGUpLCBwQWRkcmVzcyk7CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19GUEVfTldGUEVfWFAKKwljYXNlIFRSQU5TRkVSX0VYVEVOREVEOgorCQlsb2FkRXh0ZW5kZWQoZ2V0RmQob3Bjb2RlKSwgcEFkZHJlc3MpOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCW5SYyA9IDA7CisJfQorCisJaWYgKHdyaXRlX2JhY2spCisJCXdyaXRlUmVnaXN0ZXIoZ2V0Um4ob3Bjb2RlKSwgKHVuc2lnbmVkIGxvbmcpIHBGaW5hbCk7CisJcmV0dXJuIG5SYzsKK30KKwordW5zaWduZWQgaW50IFBlcmZvcm1TVEYoY29uc3QgdW5zaWduZWQgaW50IG9wY29kZSkKK3sKKwl1bnNpZ25lZCBpbnQgX191c2VyICpwQmFzZSwgKnBBZGRyZXNzLCAqcEZpbmFsOworCXVuc2lnbmVkIGludCBuUmMgPSAxLCB3cml0ZV9iYWNrID0gV1JJVEVfQkFDSyhvcGNvZGUpOworCisJU2V0Um91bmRpbmdNb2RlKFJPVU5EX1RPX05FQVJFU1QpOworCisJcEJhc2UgPSAodW5zaWduZWQgaW50IF9fdXNlciAqKSByZWFkUmVnaXN0ZXIoZ2V0Um4ob3Bjb2RlKSk7CisJaWYgKFJFR19QQyA9PSBnZXRSbihvcGNvZGUpKSB7CisJCXBCYXNlICs9IDI7CisJCXdyaXRlX2JhY2sgPSAwOworCX0KKworCXBGaW5hbCA9IHBCYXNlOworCWlmIChCSVRfVVBfU0VUKG9wY29kZSkpCisJCXBGaW5hbCArPSBnZXRPZmZzZXQob3Bjb2RlKTsKKwllbHNlCisJCXBGaW5hbCAtPSBnZXRPZmZzZXQob3Bjb2RlKTsKKworCWlmIChQUkVJTkRFWEVEKG9wY29kZSkpCisJCXBBZGRyZXNzID0gcEZpbmFsOworCWVsc2UKKwkJcEFkZHJlc3MgPSBwQmFzZTsKKworCXN3aXRjaCAob3Bjb2RlICYgTUFTS19UUkFOU0ZFUl9MRU5HVEgpIHsKKwljYXNlIFRSQU5TRkVSX1NJTkdMRToKKwkJc3RvcmVTaW5nbGUoZ2V0RmQob3Bjb2RlKSwgcEFkZHJlc3MpOworCQlicmVhazsKKwljYXNlIFRSQU5TRkVSX0RPVUJMRToKKwkJc3RvcmVEb3VibGUoZ2V0RmQob3Bjb2RlKSwgcEFkZHJlc3MpOworCQlicmVhazsKKyNpZmRlZiBDT05GSUdfRlBFX05XRlBFX1hQCisJY2FzZSBUUkFOU0ZFUl9FWFRFTkRFRDoKKwkJc3RvcmVFeHRlbmRlZChnZXRGZChvcGNvZGUpLCBwQWRkcmVzcyk7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJblJjID0gMDsKKwl9CisKKwlpZiAod3JpdGVfYmFjaykKKwkJd3JpdGVSZWdpc3RlcihnZXRSbihvcGNvZGUpLCAodW5zaWduZWQgbG9uZykgcEZpbmFsKTsKKwlyZXR1cm4gblJjOworfQorCit1bnNpZ25lZCBpbnQgUGVyZm9ybUxGTShjb25zdCB1bnNpZ25lZCBpbnQgb3Bjb2RlKQoreworCXVuc2lnbmVkIGludCBfX3VzZXIgKnBCYXNlLCAqcEFkZHJlc3MsICpwRmluYWw7CisJdW5zaWduZWQgaW50IGksIEZkLCB3cml0ZV9iYWNrID0gV1JJVEVfQkFDSyhvcGNvZGUpOworCisJcEJhc2UgPSAodW5zaWduZWQgaW50IF9fdXNlciAqKSByZWFkUmVnaXN0ZXIoZ2V0Um4ob3Bjb2RlKSk7CisJaWYgKFJFR19QQyA9PSBnZXRSbihvcGNvZGUpKSB7CisJCXBCYXNlICs9IDI7CisJCXdyaXRlX2JhY2sgPSAwOworCX0KKworCXBGaW5hbCA9IHBCYXNlOworCWlmIChCSVRfVVBfU0VUKG9wY29kZSkpCisJCXBGaW5hbCArPSBnZXRPZmZzZXQob3Bjb2RlKTsKKwllbHNlCisJCXBGaW5hbCAtPSBnZXRPZmZzZXQob3Bjb2RlKTsKKworCWlmIChQUkVJTkRFWEVEKG9wY29kZSkpCisJCXBBZGRyZXNzID0gcEZpbmFsOworCWVsc2UKKwkJcEFkZHJlc3MgPSBwQmFzZTsKKworCUZkID0gZ2V0RmQob3Bjb2RlKTsKKwlmb3IgKGkgPSBnZXRSZWdpc3RlckNvdW50KG9wY29kZSk7IGkgPiAwOyBpLS0pIHsKKwkJbG9hZE11bHRpcGxlKEZkLCBwQWRkcmVzcyk7CisJCXBBZGRyZXNzICs9IDM7CisJCUZkKys7CisJCWlmIChGZCA9PSA4KQorCQkJRmQgPSAwOworCX0KKworCWlmICh3cml0ZV9iYWNrKQorCQl3cml0ZVJlZ2lzdGVyKGdldFJuKG9wY29kZSksICh1bnNpZ25lZCBsb25nKSBwRmluYWwpOworCXJldHVybiAxOworfQorCit1bnNpZ25lZCBpbnQgUGVyZm9ybVNGTShjb25zdCB1bnNpZ25lZCBpbnQgb3Bjb2RlKQoreworCXVuc2lnbmVkIGludCBfX3VzZXIgKnBCYXNlLCAqcEFkZHJlc3MsICpwRmluYWw7CisJdW5zaWduZWQgaW50IGksIEZkLCB3cml0ZV9iYWNrID0gV1JJVEVfQkFDSyhvcGNvZGUpOworCisJcEJhc2UgPSAodW5zaWduZWQgaW50IF9fdXNlciAqKSByZWFkUmVnaXN0ZXIoZ2V0Um4ob3Bjb2RlKSk7CisJaWYgKFJFR19QQyA9PSBnZXRSbihvcGNvZGUpKSB7CisJCXBCYXNlICs9IDI7CisJCXdyaXRlX2JhY2sgPSAwOworCX0KKworCXBGaW5hbCA9IHBCYXNlOworCWlmIChCSVRfVVBfU0VUKG9wY29kZSkpCisJCXBGaW5hbCArPSBnZXRPZmZzZXQob3Bjb2RlKTsKKwllbHNlCisJCXBGaW5hbCAtPSBnZXRPZmZzZXQob3Bjb2RlKTsKKworCWlmIChQUkVJTkRFWEVEKG9wY29kZSkpCisJCXBBZGRyZXNzID0gcEZpbmFsOworCWVsc2UKKwkJcEFkZHJlc3MgPSBwQmFzZTsKKworCUZkID0gZ2V0RmQob3Bjb2RlKTsKKwlmb3IgKGkgPSBnZXRSZWdpc3RlckNvdW50KG9wY29kZSk7IGkgPiAwOyBpLS0pIHsKKwkJc3RvcmVNdWx0aXBsZShGZCwgcEFkZHJlc3MpOworCQlwQWRkcmVzcyArPSAzOworCQlGZCsrOworCQlpZiAoRmQgPT0gOCkKKwkJCUZkID0gMDsKKwl9CisKKwlpZiAod3JpdGVfYmFjaykKKwkJd3JpdGVSZWdpc3RlcihnZXRSbihvcGNvZGUpLCAodW5zaWduZWQgbG9uZykgcEZpbmFsKTsKKwlyZXR1cm4gMTsKK30KKwordW5zaWduZWQgaW50IEVtdWxhdGVDUERUKGNvbnN0IHVuc2lnbmVkIGludCBvcGNvZGUpCit7CisJdW5zaWduZWQgaW50IG5SYyA9IDA7CisKKwlpZiAoTERGX09QKG9wY29kZSkpIHsKKwkJblJjID0gUGVyZm9ybUxERihvcGNvZGUpOworCX0gZWxzZSBpZiAoTEZNX09QKG9wY29kZSkpIHsKKwkJblJjID0gUGVyZm9ybUxGTShvcGNvZGUpOworCX0gZWxzZSBpZiAoU1RGX09QKG9wY29kZSkpIHsKKwkJblJjID0gUGVyZm9ybVNURihvcGNvZGUpOworCX0gZWxzZSBpZiAoU0ZNX09QKG9wY29kZSkpIHsKKwkJblJjID0gUGVyZm9ybVNGTShvcGNvZGUpOworCX0gZWxzZSB7CisJCW5SYyA9IDA7CisJfQorCisJcmV0dXJuIG5SYzsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL2ZwYTExX2NwcnQuYyBiL2FyY2gvYXJtL253ZnBlL2ZwYTExX2NwcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjAxZmJjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbndmcGUvZnBhMTFfY3BydC5jCkBAIC0wLDAgKzEsMzY5IEBACisvKgorICAgIE5ldFdpbmRlciBGbG9hdGluZyBQb2ludCBFbXVsYXRvcgorICAgIChjKSBSZWJlbC5DT00sIDE5OTgsMTk5OQorICAgIChjKSBQaGlsaXAgQmx1bmRlbGwsIDE5OTksIDIwMDEKKworICAgIERpcmVjdCBxdWVzdGlvbnMsIGNvbW1lbnRzIHRvIFNjb3R0IEJhbWJyb3VnaCA8c2NvdHRiQG5ldHdpbmRlci5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlICJmcGExMS5oIgorI2luY2x1ZGUgImZwb3Bjb2RlLmgiCisjaW5jbHVkZSAiZnBhMTEuaW5sIgorI2luY2x1ZGUgImZwbW9kdWxlLmgiCisjaW5jbHVkZSAiZnBtb2R1bGUuaW5sIgorCisjaWZkZWYgQ09ORklHX0ZQRV9OV0ZQRV9YUAorZXh0ZXJuIGZsYWcgZmxvYXR4ODBfaXNfbmFuKGZsb2F0eDgwKTsKKyNlbmRpZgorZXh0ZXJuIGZsYWcgZmxvYXQ2NF9pc19uYW4oZmxvYXQ2NCk7CitleHRlcm4gZmxhZyBmbG9hdDMyX2lzX25hbihmbG9hdDMyKTsKKwordm9pZCBTZXRSb3VuZGluZ01vZGUoY29uc3QgdW5zaWduZWQgaW50IG9wY29kZSk7CisKK3Vuc2lnbmVkIGludCBQZXJmb3JtRkxUKGNvbnN0IHVuc2lnbmVkIGludCBvcGNvZGUpOwordW5zaWduZWQgaW50IFBlcmZvcm1GSVgoY29uc3QgdW5zaWduZWQgaW50IG9wY29kZSk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgUGVyZm9ybUNvbXBhcmlzb24oY29uc3QgdW5zaWduZWQgaW50IG9wY29kZSk7CisKK3Vuc2lnbmVkIGludCBFbXVsYXRlQ1BSVChjb25zdCB1bnNpZ25lZCBpbnQgb3Bjb2RlKQoreworCisJaWYgKG9wY29kZSAmIDB4ODAwMDAwKSB7CisJCS8qIFRoaXMgaXMgc29tZSB2YXJpYW50IG9mIGEgY29tcGFyaXNvbiAoUGVyZm9ybUNvbXBhcmlzb24KKwkJICAgd2lsbCBzb3J0IG91dCB3aGljaCBvbmUpLiAgU2luY2UgbW9zdCBvZiB0aGUgb3RoZXIgQ1BSVAorCQkgICBpbnN0cnVjdGlvbnMgYXJlIG9kZGJhbGwgY2FzZXMgb2Ygc29tZSBzb3J0IG9yIG90aGVyIGl0CisJCSAgIG1ha2VzIHNlbnNlIHRvIHB1bGwgdGhpcyBvdXQgaW50byBhIGZhc3QgcGF0aC4gICovCisJCXJldHVybiBQZXJmb3JtQ29tcGFyaXNvbihvcGNvZGUpOworCX0KKworCS8qIEhpbnQgdG8gR0NDIHRoYXQgd2UnZCBsaWtlIGEganVtcCB0YWJsZSByYXRoZXIgdGhhbiBhIGxvYWQgb2YgQ01QcyAqLworCXN3aXRjaCAoKG9wY29kZSAmIDB4NzAwMDAwKSA+PiAyMCkgeworCWNhc2UgRkxUX0NPREUgPj4gMjA6CisJCXJldHVybiBQZXJmb3JtRkxUKG9wY29kZSk7CisJCWJyZWFrOworCWNhc2UgRklYX0NPREUgPj4gMjA6CisJCXJldHVybiBQZXJmb3JtRklYKG9wY29kZSk7CisJCWJyZWFrOworCisJY2FzZSBXRlNfQ09ERSA+PiAyMDoKKwkJd3JpdGVGUFNSKHJlYWRSZWdpc3RlcihnZXRSZChvcGNvZGUpKSk7CisJCWJyZWFrOworCWNhc2UgUkZTX0NPREUgPj4gMjA6CisJCXdyaXRlUmVnaXN0ZXIoZ2V0UmQob3Bjb2RlKSwgcmVhZEZQU1IoKSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3Vuc2lnbmVkIGludCBQZXJmb3JtRkxUKGNvbnN0IHVuc2lnbmVkIGludCBvcGNvZGUpCit7CisJRlBBMTEgKmZwYTExID0gR0VUX0ZQQTExKCk7CisJU2V0Um91bmRpbmdNb2RlKG9wY29kZSk7CisJU2V0Um91bmRpbmdQcmVjaXNpb24ob3Bjb2RlKTsKKworCXN3aXRjaCAob3Bjb2RlICYgTUFTS19ST1VORElOR19QUkVDSVNJT04pIHsKKwljYXNlIFJPVU5EX1NJTkdMRToKKwkJeworCQkJZnBhMTEtPmZUeXBlW2dldEZuKG9wY29kZSldID0gdHlwZVNpbmdsZTsKKwkJCWZwYTExLT5mcHJlZ1tnZXRGbihvcGNvZGUpXS5mU2luZ2xlID0gaW50MzJfdG9fZmxvYXQzMihyZWFkUmVnaXN0ZXIoZ2V0UmQob3Bjb2RlKSkpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBST1VORF9ET1VCTEU6CisJCXsKKwkJCWZwYTExLT5mVHlwZVtnZXRGbihvcGNvZGUpXSA9IHR5cGVEb3VibGU7CisJCQlmcGExMS0+ZnByZWdbZ2V0Rm4ob3Bjb2RlKV0uZkRvdWJsZSA9IGludDMyX3RvX2Zsb2F0NjQocmVhZFJlZ2lzdGVyKGdldFJkKG9wY29kZSkpKTsKKwkJfQorCQlicmVhazsKKworI2lmZGVmIENPTkZJR19GUEVfTldGUEVfWFAKKwljYXNlIFJPVU5EX0VYVEVOREVEOgorCQl7CisJCQlmcGExMS0+ZlR5cGVbZ2V0Rm4ob3Bjb2RlKV0gPSB0eXBlRXh0ZW5kZWQ7CisJCQlmcGExMS0+ZnByZWdbZ2V0Rm4ob3Bjb2RlKV0uZkV4dGVuZGVkID0gaW50MzJfdG9fZmxvYXR4ODAocmVhZFJlZ2lzdGVyKGdldFJkKG9wY29kZSkpKTsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3Vuc2lnbmVkIGludCBQZXJmb3JtRklYKGNvbnN0IHVuc2lnbmVkIGludCBvcGNvZGUpCit7CisJRlBBMTEgKmZwYTExID0gR0VUX0ZQQTExKCk7CisJdW5zaWduZWQgaW50IEZuID0gZ2V0Rm0ob3Bjb2RlKTsKKworCVNldFJvdW5kaW5nTW9kZShvcGNvZGUpOworCisJc3dpdGNoIChmcGExMS0+ZlR5cGVbRm5dKSB7CisJY2FzZSB0eXBlU2luZ2xlOgorCQl7CisJCQl3cml0ZVJlZ2lzdGVyKGdldFJkKG9wY29kZSksIGZsb2F0MzJfdG9faW50MzIoZnBhMTEtPmZwcmVnW0ZuXS5mU2luZ2xlKSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIHR5cGVEb3VibGU6CisJCXsKKwkJCXdyaXRlUmVnaXN0ZXIoZ2V0UmQob3Bjb2RlKSwgZmxvYXQ2NF90b19pbnQzMihmcGExMS0+ZnByZWdbRm5dLmZEb3VibGUpKTsKKwkJfQorCQlicmVhazsKKworI2lmZGVmIENPTkZJR19GUEVfTldGUEVfWFAKKwljYXNlIHR5cGVFeHRlbmRlZDoKKwkJeworCQkJd3JpdGVSZWdpc3RlcihnZXRSZChvcGNvZGUpLCBmbG9hdHg4MF90b19pbnQzMihmcGExMS0+ZnByZWdbRm5dLmZFeHRlbmRlZCkpOworCQl9CisJCWJyZWFrOworI2VuZGlmCisKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyogVGhpcyBpbnN0cnVjdGlvbiBzZXRzIHRoZSBmbGFncyBOLCBaLCBDLCBWIGluIHRoZSBGUFNSLiAqLworc3RhdGljIHVuc2lnbmVkIGludCBQZXJmb3JtQ29tcGFyaXNvbihjb25zdCB1bnNpZ25lZCBpbnQgb3Bjb2RlKQoreworCUZQQTExICpmcGExMSA9IEdFVF9GUEExMSgpOworCXVuc2lnbmVkIGludCBGbiA9IGdldEZuKG9wY29kZSksIEZtID0gZ2V0Rm0ob3Bjb2RlKTsKKwlpbnQgZV9mbGFnID0gb3Bjb2RlICYgMHg0MDAwMDA7CS8qIDEgaWYgQ3hGRSAqLworCWludCBuX2ZsYWcgPSBvcGNvZGUgJiAweDIwMDAwMDsJLyogMSBpZiBDTnh4ICovCisJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKKworI2lmZGVmIENPTkZJR19GUEVfTldGUEVfWFAKKwlmbG9hdHg4MCByRm4sIHJGbTsKKworCS8qIENoZWNrIGZvciB1bm9yZGVyZWQgY29uZGl0aW9uIGFuZCBjb252ZXJ0IGFsbCBvcGVyYW5kcyB0byA4MC1iaXQKKwkgICBmb3JtYXQuCisJICAgPz8gTWlnaHQgYmUgc29tZSBtaWxlYWdlIGluIGF2b2lkaW5nIHRoaXMgY29udmVyc2lvbiBpZiBwb3NzaWJsZS4KKwkgICBFZywgaWYgYm90aCBvcGVyYW5kcyBhcmUgMzItYml0LCBkZXRlY3QgdGhpcyBhbmQgZG8gYSAzMi1iaXQKKwkgICBjb21wYXJpc29uIChjaGVhcGVyIHRoYW4gYW4gODAtYml0IG9uZSkuICAqLworCXN3aXRjaCAoZnBhMTEtPmZUeXBlW0ZuXSkgeworCWNhc2UgdHlwZVNpbmdsZToKKwkJLy9wcmludGsoInNpbmdsZS5cbiIpOworCQlpZiAoZmxvYXQzMl9pc19uYW4oZnBhMTEtPmZwcmVnW0ZuXS5mU2luZ2xlKSkKKwkJCWdvdG8gdW5vcmRlcmVkOworCQlyRm4gPSBmbG9hdDMyX3RvX2Zsb2F0eDgwKGZwYTExLT5mcHJlZ1tGbl0uZlNpbmdsZSk7CisJCWJyZWFrOworCisJY2FzZSB0eXBlRG91YmxlOgorCQkvL3ByaW50aygiZG91YmxlLlxuIik7CisJCWlmIChmbG9hdDY0X2lzX25hbihmcGExMS0+ZnByZWdbRm5dLmZEb3VibGUpKQorCQkJZ290byB1bm9yZGVyZWQ7CisJCXJGbiA9IGZsb2F0NjRfdG9fZmxvYXR4ODAoZnBhMTEtPmZwcmVnW0ZuXS5mRG91YmxlKTsKKwkJYnJlYWs7CisKKwljYXNlIHR5cGVFeHRlbmRlZDoKKwkJLy9wcmludGsoImV4dGVuZGVkLlxuIik7CisJCWlmIChmbG9hdHg4MF9pc19uYW4oZnBhMTEtPmZwcmVnW0ZuXS5mRXh0ZW5kZWQpKQorCQkJZ290byB1bm9yZGVyZWQ7CisJCXJGbiA9IGZwYTExLT5mcHJlZ1tGbl0uZkV4dGVuZGVkOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCWlmIChDT05TVEFOVF9GTShvcGNvZGUpKSB7CisJCS8vcHJpbnRrKCJGbSBpcyBhIGNvbnN0YW50OiAjJWQuXG4iLEZtKTsKKwkJckZtID0gZ2V0RXh0ZW5kZWRDb25zdGFudChGbSk7CisJCWlmIChmbG9hdHg4MF9pc19uYW4ockZtKSkKKwkJCWdvdG8gdW5vcmRlcmVkOworCX0gZWxzZSB7CisJCS8vcHJpbnRrKCJGbSA9IHIlZCB3aGljaCBjb250YWlucyBhICIsRm0pOworCQlzd2l0Y2ggKGZwYTExLT5mVHlwZVtGbV0pIHsKKwkJY2FzZSB0eXBlU2luZ2xlOgorCQkJLy9wcmludGsoInNpbmdsZS5cbiIpOworCQkJaWYgKGZsb2F0MzJfaXNfbmFuKGZwYTExLT5mcHJlZ1tGbV0uZlNpbmdsZSkpCisJCQkJZ290byB1bm9yZGVyZWQ7CisJCQlyRm0gPSBmbG9hdDMyX3RvX2Zsb2F0eDgwKGZwYTExLT5mcHJlZ1tGbV0uZlNpbmdsZSk7CisJCQlicmVhazsKKworCQljYXNlIHR5cGVEb3VibGU6CisJCQkvL3ByaW50aygiZG91YmxlLlxuIik7CisJCQlpZiAoZmxvYXQ2NF9pc19uYW4oZnBhMTEtPmZwcmVnW0ZtXS5mRG91YmxlKSkKKwkJCQlnb3RvIHVub3JkZXJlZDsKKwkJCXJGbSA9IGZsb2F0NjRfdG9fZmxvYXR4ODAoZnBhMTEtPmZwcmVnW0ZtXS5mRG91YmxlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgdHlwZUV4dGVuZGVkOgorCQkJLy9wcmludGsoImV4dGVuZGVkLlxuIik7CisJCQlpZiAoZmxvYXR4ODBfaXNfbmFuKGZwYTExLT5mcHJlZ1tGbV0uZkV4dGVuZGVkKSkKKwkJCQlnb3RvIHVub3JkZXJlZDsKKwkJCXJGbSA9IGZwYTExLT5mcHJlZ1tGbV0uZkV4dGVuZGVkOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKG5fZmxhZykKKwkJckZtLmhpZ2ggXj0gMHg4MDAwOworCisJLyogdGVzdCBmb3IgbGVzcyB0aGFuIGNvbmRpdGlvbiAqLworCWlmIChmbG9hdHg4MF9sdChyRm4sIHJGbSkpCisJCWZsYWdzIHw9IENDX05FR0FUSVZFOworCisJLyogdGVzdCBmb3IgZXF1YWwgY29uZGl0aW9uICovCisJaWYgKGZsb2F0eDgwX2VxKHJGbiwgckZtKSkKKwkJZmxhZ3MgfD0gQ0NfWkVSTzsKKworCS8qIHRlc3QgZm9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCBjb25kaXRpb24gKi8KKwlpZiAoZmxvYXR4ODBfbHQockZtLCByRm4pKQorCQlmbGFncyB8PSBDQ19DQVJSWTsKKworI2Vsc2UKKwlpZiAoQ09OU1RBTlRfRk0ob3Bjb2RlKSkgeworCQkvKiBGbSBpcyBhIGNvbnN0YW50LiAgRG8gdGhlIGNvbXBhcmlzb24gaW4gd2hhdGV2ZXIgcHJlY2lzaW9uCisJCSAgIEZuIGhhcHBlbnMgdG8gYmUgc3RvcmVkIGluLiAgKi8KKwkJaWYgKGZwYTExLT5mVHlwZVtGbl0gPT0gdHlwZVNpbmdsZSkgeworCQkJZmxvYXQzMiByRm0gPSBnZXRTaW5nbGVDb25zdGFudChGbSk7CisJCQlmbG9hdDMyIHJGbiA9IGZwYTExLT5mcHJlZ1tGbl0uZlNpbmdsZTsKKworCQkJaWYgKGZsb2F0MzJfaXNfbmFuKHJGbikpCisJCQkJZ290byB1bm9yZGVyZWQ7CisKKwkJCWlmIChuX2ZsYWcpCisJCQkJckZtIF49IDB4ODAwMDAwMDA7CisKKwkJCS8qIHRlc3QgZm9yIGxlc3MgdGhhbiBjb25kaXRpb24gKi8KKwkJCWlmIChmbG9hdDMyX2x0X25vY2hlY2sockZuLCByRm0pKQorCQkJCWZsYWdzIHw9IENDX05FR0FUSVZFOworCisJCQkvKiB0ZXN0IGZvciBlcXVhbCBjb25kaXRpb24gKi8KKwkJCWlmIChmbG9hdDMyX2VxX25vY2hlY2sockZuLCByRm0pKQorCQkJCWZsYWdzIHw9IENDX1pFUk87CisKKwkJCS8qIHRlc3QgZm9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCBjb25kaXRpb24gKi8KKwkJCWlmIChmbG9hdDMyX2x0X25vY2hlY2sockZtLCByRm4pKQorCQkJCWZsYWdzIHw9IENDX0NBUlJZOworCQl9IGVsc2UgeworCQkJZmxvYXQ2NCByRm0gPSBnZXREb3VibGVDb25zdGFudChGbSk7CisJCQlmbG9hdDY0IHJGbiA9IGZwYTExLT5mcHJlZ1tGbl0uZkRvdWJsZTsKKworCQkJaWYgKGZsb2F0NjRfaXNfbmFuKHJGbikpCisJCQkJZ290byB1bm9yZGVyZWQ7CisKKwkJCWlmIChuX2ZsYWcpCisJCQkJckZtIF49IDB4ODAwMDAwMDAwMDAwMDAwMFVMTDsKKworCQkJLyogdGVzdCBmb3IgbGVzcyB0aGFuIGNvbmRpdGlvbiAqLworCQkJaWYgKGZsb2F0NjRfbHRfbm9jaGVjayhyRm4sIHJGbSkpCisJCQkJZmxhZ3MgfD0gQ0NfTkVHQVRJVkU7CisKKwkJCS8qIHRlc3QgZm9yIGVxdWFsIGNvbmRpdGlvbiAqLworCQkJaWYgKGZsb2F0NjRfZXFfbm9jaGVjayhyRm4sIHJGbSkpCisJCQkJZmxhZ3MgfD0gQ0NfWkVSTzsKKworCQkJLyogdGVzdCBmb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIGNvbmRpdGlvbiAqLworCQkJaWYgKGZsb2F0NjRfbHRfbm9jaGVjayhyRm0sIHJGbikpCisJCQkJZmxhZ3MgfD0gQ0NfQ0FSUlk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBCb3RoIG9wZXJhbmRzIGFyZSBpbiByZWdpc3RlcnMuICAqLworCQlpZiAoZnBhMTEtPmZUeXBlW0ZuXSA9PSB0eXBlU2luZ2xlCisJCSAgICAmJiBmcGExMS0+ZlR5cGVbRm1dID09IHR5cGVTaW5nbGUpIHsKKwkJCWZsb2F0MzIgckZtID0gZnBhMTEtPmZwcmVnW0ZtXS5mU2luZ2xlOworCQkJZmxvYXQzMiByRm4gPSBmcGExMS0+ZnByZWdbRm5dLmZTaW5nbGU7CisKKwkJCWlmIChmbG9hdDMyX2lzX25hbihyRm4pCisJCQkgICAgfHwgZmxvYXQzMl9pc19uYW4ockZtKSkKKwkJCQlnb3RvIHVub3JkZXJlZDsKKworCQkJaWYgKG5fZmxhZykKKwkJCQlyRm0gXj0gMHg4MDAwMDAwMDsKKworCQkJLyogdGVzdCBmb3IgbGVzcyB0aGFuIGNvbmRpdGlvbiAqLworCQkJaWYgKGZsb2F0MzJfbHRfbm9jaGVjayhyRm4sIHJGbSkpCisJCQkJZmxhZ3MgfD0gQ0NfTkVHQVRJVkU7CisKKwkJCS8qIHRlc3QgZm9yIGVxdWFsIGNvbmRpdGlvbiAqLworCQkJaWYgKGZsb2F0MzJfZXFfbm9jaGVjayhyRm4sIHJGbSkpCisJCQkJZmxhZ3MgfD0gQ0NfWkVSTzsKKworCQkJLyogdGVzdCBmb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIGNvbmRpdGlvbiAqLworCQkJaWYgKGZsb2F0MzJfbHRfbm9jaGVjayhyRm0sIHJGbikpCisJCQkJZmxhZ3MgfD0gQ0NfQ0FSUlk7CisJCX0gZWxzZSB7CisJCQkvKiBQcm9tb3RlIDMyLWJpdCBvcGVyYW5kIHRvIDY0IGJpdHMuICAqLworCQkJZmxvYXQ2NCByRm0sIHJGbjsKKworCQkJckZtID0gKGZwYTExLT5mVHlwZVtGbV0gPT0gdHlwZVNpbmdsZSkgPworCQkJICAgIGZsb2F0MzJfdG9fZmxvYXQ2NChmcGExMS0+ZnByZWdbRm1dLmZTaW5nbGUpCisJCQkgICAgOiBmcGExMS0+ZnByZWdbRm1dLmZEb3VibGU7CisKKwkJCXJGbiA9IChmcGExMS0+ZlR5cGVbRm5dID09IHR5cGVTaW5nbGUpID8KKwkJCSAgICBmbG9hdDMyX3RvX2Zsb2F0NjQoZnBhMTEtPmZwcmVnW0ZuXS5mU2luZ2xlKQorCQkJICAgIDogZnBhMTEtPmZwcmVnW0ZuXS5mRG91YmxlOworCisJCQlpZiAoZmxvYXQ2NF9pc19uYW4ockZuKQorCQkJICAgIHx8IGZsb2F0NjRfaXNfbmFuKHJGbSkpCisJCQkJZ290byB1bm9yZGVyZWQ7CisKKwkJCWlmIChuX2ZsYWcpCisJCQkJckZtIF49IDB4ODAwMDAwMDAwMDAwMDAwMFVMTDsKKworCQkJLyogdGVzdCBmb3IgbGVzcyB0aGFuIGNvbmRpdGlvbiAqLworCQkJaWYgKGZsb2F0NjRfbHRfbm9jaGVjayhyRm4sIHJGbSkpCisJCQkJZmxhZ3MgfD0gQ0NfTkVHQVRJVkU7CisKKwkJCS8qIHRlc3QgZm9yIGVxdWFsIGNvbmRpdGlvbiAqLworCQkJaWYgKGZsb2F0NjRfZXFfbm9jaGVjayhyRm4sIHJGbSkpCisJCQkJZmxhZ3MgfD0gQ0NfWkVSTzsKKworCQkJLyogdGVzdCBmb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIGNvbmRpdGlvbiAqLworCQkJaWYgKGZsb2F0NjRfbHRfbm9jaGVjayhyRm0sIHJGbikpCisJCQkJZmxhZ3MgfD0gQ0NfQ0FSUlk7CisJCX0KKwl9CisKKyNlbmRpZgorCisJd3JpdGVDb25kaXRpb25Db2RlcyhmbGFncyk7CisKKwlyZXR1cm4gMTsKKworICAgICAgdW5vcmRlcmVkOgorCS8qID8/IFRoZSBGUEEgZGF0YSBzaGVldCBpcyBwcmV0dHkgdmFndWUgYWJvdXQgdGhpcywgaW4gcGFydGljdWxhcgorCSAgIGFib3V0IHdoZXRoZXIgdGhlIG5vbi1FIGNvbXBhcmlzb25zIGNhbiBldmVyIHJhaXNlIGV4Y2VwdGlvbnMuCisJICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBhIGNvbWJpbmF0aW9uIG9mIHdoYXQgaXQgc2F5cyBpbgorCSAgIHRoZSBkYXRhIHNoZWV0LCBvYnNlcnZhdGlvbiBvZiBob3cgdGhlIEFjb3JuIGVtdWxhdG9yIGFjdHVhbGx5CisJICAgYmVoYXZlcyAoYW5kIGhvdyBwcm9ncmFtcyBleHBlY3QgaXQgdG8pIGFuZCBndWVzc3dvcmsuICAqLworCWZsYWdzIHw9IENDX09WRVJGTE9XOworCWZsYWdzICY9IH4oQ0NfWkVSTyB8IENDX05FR0FUSVZFKTsKKworCWlmIChCSVRfQUMgJiByZWFkRlBTUigpKQorCQlmbGFncyB8PSBDQ19DQVJSWTsKKworCWlmIChlX2ZsYWcpCisJCWZsb2F0X3JhaXNlKGZsb2F0X2ZsYWdfaW52YWxpZCk7CisKKwl3cml0ZUNvbmRpdGlvbkNvZGVzKGZsYWdzKTsKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL2ZwbW9kdWxlLmMgYi9hcmNoL2FybS9ud2ZwZS9mcG1vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MDZmZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ud2ZwZS9mcG1vZHVsZS5jCkBAIC0wLDAgKzEsMTczIEBACisKKy8qCisgICAgTmV0V2luZGVyIEZsb2F0aW5nIFBvaW50IEVtdWxhdG9yCisgICAgKGMpIFJlYmVsLmNvbSwgMTk5OC0xOTk5CisgICAgKGMpIFBoaWxpcCBCbHVuZGVsbCwgMTk5OC0xOTk5CisKKyAgICBEaXJlY3QgcXVlc3Rpb25zLCBjb21tZW50cyB0byBTY290dCBCYW1icm91Z2ggPHNjb3R0YkBuZXR3aW5kZXIub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisjaW5jbHVkZSAiZnBhMTEuaCIKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogWFhYICovCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorLyogWFhYICovCisKKyNpbmNsdWRlICJzb2Z0ZmxvYXQuaCIKKyNpbmNsdWRlICJmcG9wY29kZS5oIgorI2luY2x1ZGUgImZwbW9kdWxlLmgiCisjaW5jbHVkZSAiZnBhMTEuaW5sIgorCisvKiBrZXJuZWwgc3ltYm9scyByZXF1aXJlZCBmb3Igc2lnbmFsIGhhbmRsaW5nICovCisjaWZkZWYgQ09ORklHX0ZQRV9OV0ZQRV9YUAorI2RlZmluZSBOV0ZQRV9CSVRTICJleHRlbmRlZCIKKyNlbHNlCisjZGVmaW5lIE5XRlBFX0JJVFMgImRvdWJsZSIKKyNlbmRpZgorCisjaWZkZWYgTU9EVUxFCit2b2lkIGZwX3NlbmRfc2lnKHVuc2lnbmVkIGxvbmcgc2lnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBwcml2KTsKKyNlbHNlCisjZGVmaW5lIGZwX3NlbmRfc2lnCXNlbmRfc2lnCisjZGVmaW5lIGtlcm5fZnBfZW50ZXIJZnBfZW50ZXIKKworZXh0ZXJuIGNoYXIgZnBlX3R5cGVbXTsKKyNlbmRpZgorCisvKiBrZXJuZWwgZnVuY3Rpb24gcHJvdG90eXBlcyByZXF1aXJlZCAqLwordm9pZCBmcF9zZXR1cCh2b2lkKTsKKworLyogZXh0ZXJuYWwgZGVjbGFyYXRpb25zIGZvciBzYXZlZCBrZXJuZWwgc3ltYm9scyAqLworZXh0ZXJuIHZvaWQgKCprZXJuX2ZwX2VudGVyKSh2b2lkKTsKK2V4dGVybiB2b2lkICgqZnBfaW5pdCkodW5pb24gZnBfc3RhdGUgKik7CisKKy8qIE9yaWdpbmFsIHZhbHVlIG9mIGZwX2VudGVyIGZyb20ga2VybmVsIGJlZm9yZSBwYXRjaGVkIGJ5IGZwZV9pbml0LiAqLworc3RhdGljIHZvaWQgKCpvcmlnX2ZwX2VudGVyKSh2b2lkKTsKK3N0YXRpYyB2b2lkICgqb3JpZ19mcF9pbml0KSh1bmlvbiBmcF9zdGF0ZSAqKTsKKworLyogZm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK2V4dGVybiB2b2lkIG53ZnBlX2VudGVyKHZvaWQpOworCitzdGF0aWMgaW50IF9faW5pdCBmcGVfaW5pdCh2b2lkKQoreworCWlmIChzaXplb2YoRlBBMTEpID4gc2l6ZW9mKHVuaW9uIGZwX3N0YXRlKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm53ZnBlOiBiYWQgc3RydWN0dXJlIHNpemVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc2l6ZW9mKEZQUkVHKSAhPSAxMikgeworCQlwcmludGsoS0VSTl9FUlIgIm53ZnBlOiBiYWQgcmVnaXN0ZXIgc2l6ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoZnBlX3R5cGVbMF0gJiYgc3RyY21wKGZwZV90eXBlLCAibndmcGUiKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBEaXNwbGF5IHRpdGxlLCB2ZXJzaW9uIGFuZCBjb3B5cmlnaHQgaW5mb3JtYXRpb24uICovCisJcHJpbnRrKEtFUk5fV0FSTklORyAiTmV0V2luZGVyIEZsb2F0aW5nIFBvaW50IEVtdWxhdG9yIFYwLjk3ICgiCisJICAgICAgIE5XRlBFX0JJVFMgIiBwcmVjaXNpb24pXG4iKTsKKworCS8qIFNhdmUgcG9pbnRlciB0byB0aGUgb2xkIEZQIGhhbmRsZXIgYW5kIHRoZW4gcGF0Y2ggb3Vyc2VsdmVzIGluICovCisJb3JpZ19mcF9lbnRlciA9IGtlcm5fZnBfZW50ZXI7CisJb3JpZ19mcF9pbml0ID0gZnBfaW5pdDsKKwlrZXJuX2ZwX2VudGVyID0gbndmcGVfZW50ZXI7CisJZnBfaW5pdCA9IG53ZnBlX2luaXRfZnBhOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmcGVfZXhpdCh2b2lkKQoreworCS8qIFJlc3RvcmUgdGhlIHZhbHVlcyB3ZSBzYXZlZCBlYXJsaWVyLiAqLworCWtlcm5fZnBfZW50ZXIgPSBvcmlnX2ZwX2VudGVyOworCWZwX2luaXQgPSBvcmlnX2ZwX2luaXQ7Cit9CisKKy8qCitTY290dEI6ICBOb3ZlbWJlciA0LCAxOTk4CisKK01vdmVkIHRoaXMgZnVuY3Rpb24gb3V0IG9mIHNvZnRmbG9hdC1zcGVjaWFsaXplIGludG8gZnBtb2R1bGUuYy4KK1RoaXMgZWZmZWN0aXZlbHkgaXNvbGF0ZXMgYWxsIHRoZSBjaGFuZ2VzIHJlcXVpcmVkIGZvciBpbnRlZ3JhdGluZyB3aXRoIHRoZQorTGludXgga2VybmVsIGludG8gZnBtb2R1bGUuYy4gIFBvcnRpbmcgdG8gTmV0QlNEIHNob3VsZCBvbmx5IHJlcXVpcmUgbW9kaWZ5aW5nCitmcG1vZHVsZS5jIHRvIGludGVncmF0ZSB3aXRoIHRoZSBOZXRCU0Qga2VybmVsIChJIGhvcGUhKS4KKworWzEvMS85OTogTm90IHF1aXRlIHRydWUgYW55IG1vcmUgdW5mb3J0dW5hdGVseS4gIFRoZXJlIGlzIExpbnV4LXNwZWNpZmljCitjb2RlIHRvIGFjY2VzcyBkYXRhIGluIHVzZXIgc3BhY2UgaW4gc29tZSBvdGhlciBzb3VyY2UgZmlsZXMgYXQgdGhlIAorbW9tZW50IChncmVwIGZvciBnZXRfdXNlciAvIHB1dF91c2VyIGNhbGxzKS4gIC0tcGhpbGJdCisKK2Zsb2F0X2V4Y2VwdGlvbl9mbGFncyBpcyBhIGdsb2JhbCB2YXJpYWJsZSBpbiBTb2Z0RmxvYXQuCisKK1RoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBTb2Z0RmxvYXQgcm91dGluZXMgdG8gcmFpc2UgYSBmbG9hdGluZworcG9pbnQgZXhjZXB0aW9uLiAgV2UgY2hlY2sgdGhlIHRyYXAgZW5hYmxlIGJ5dGUgaW4gdGhlIEZQU1IsIGFuZCByYWlzZQorYSBTSUdGUEUgZXhjZXB0aW9uIGlmIG5lY2Vzc2FyeS4gIElmIG5vdCB0aGUgcmVsZXZhbnQgYml0cyBpbiB0aGUgCitjdW11bGF0aXZlIGV4Y2VwdGlvbnMgZmxhZyBieXRlIGFyZSBzZXQgYW5kIHdlIHJldHVybi4KKyovCisKK3ZvaWQgZmxvYXRfcmFpc2Uoc2lnbmVkIGNoYXIgZmxhZ3MpCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgaW50IGZwc3IsIGN1bXVsYXRpdmVUcmFwczsKKworI2lmZGVmIENPTkZJR19ERUJVR19VU0VSCisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIk5XRlBFOiAlc1slZF0gdGFrZXMgZXhjZXB0aW9uICUwOHggYXQgJXAgZnJvbSAlMDhseFxuIiwKKwkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBmbGFncywKKwkgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCBHRVRfVVNFUlJFRygpWzE1XSk7CisjZW5kaWYKKworCS8qIEtlZXAgU29mdEZsb2F0IGV4Y2VwdGlvbiBmbGFncyB1cCB0byBkYXRlLiAgKi8KKwlmbG9hdF9leGNlcHRpb25fZmxhZ3MgfD0gZmxhZ3M7CisKKwkvKiBSZWFkIGZwc3IgYW5kIGluaXRpYWxpemUgdGhlIGN1bXVsYXRpdmVUcmFwcy4gICovCisJZnBzciA9IHJlYWRGUFNSKCk7CisJY3VtdWxhdGl2ZVRyYXBzID0gMDsKKworCS8qIEZvciBlYWNoIHR5cGUgb2YgZXhjZXB0aW9uLCB0aGUgY3VtdWxhdGl2ZSB0cmFwIGV4Y2VwdGlvbiBiaXQgaXMgb25seQorCSAgIHNldCBpZiB0aGUgY29ycmVzcG9uZGluZyB0cmFwIGVuYWJsZSBiaXQgaXMgbm90IHNldC4gICovCisJaWYgKCghKGZwc3IgJiBCSVRfSVhFKSkgJiYgKGZsYWdzICYgQklUX0lYQykpCisJCWN1bXVsYXRpdmVUcmFwcyB8PSBCSVRfSVhDOworCWlmICgoIShmcHNyICYgQklUX1VGRSkpICYmIChmbGFncyAmIEJJVF9VRkMpKQorCQljdW11bGF0aXZlVHJhcHMgfD0gQklUX1VGQzsKKwlpZiAoKCEoZnBzciAmIEJJVF9PRkUpKSAmJiAoZmxhZ3MgJiBCSVRfT0ZDKSkKKwkJY3VtdWxhdGl2ZVRyYXBzIHw9IEJJVF9PRkM7CisJaWYgKCghKGZwc3IgJiBCSVRfRFpFKSkgJiYgKGZsYWdzICYgQklUX0RaQykpCisJCWN1bXVsYXRpdmVUcmFwcyB8PSBCSVRfRFpDOworCWlmICgoIShmcHNyICYgQklUX0lPRSkpICYmIChmbGFncyAmIEJJVF9JT0MpKQorCQljdW11bGF0aXZlVHJhcHMgfD0gQklUX0lPQzsKKworCS8qIFNldCB0aGUgY3VtdWxhdGl2ZSBleGNlcHRpb25zIGZsYWdzLiAgKi8KKwlpZiAoY3VtdWxhdGl2ZVRyYXBzKQorCQl3cml0ZUZQU1IoZnBzciB8IGN1bXVsYXRpdmVUcmFwcyk7CisKKwkvKiBSYWlzZSBhbiBleGNlcHRpb24gaWYgbmVjZXNzYXJ5LiAgKi8KKwlpZiAoZnBzciAmIChmbGFncyA8PCAxNikpCisJCWZwX3NlbmRfc2lnKFNJR0ZQRSwgY3VycmVudCwgMSk7Cit9CisKK21vZHVsZV9pbml0KGZwZV9pbml0KTsKK21vZHVsZV9leGl0KGZwZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiU2NvdHQgQmFtYnJvdWdoIDxzY290dGJAcmViZWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOV0ZQRSBmbG9hdGluZyBwb2ludCBlbXVsYXRvciAoIiBOV0ZQRV9CSVRTICIgcHJlY2lzaW9uKSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbndmcGUvZnBtb2R1bGUuaCBiL2FyY2gvYXJtL253ZnBlL2ZwbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMyZThlNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL253ZnBlL2ZwbW9kdWxlLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAgICBOZXRXaW5kZXIgRmxvYXRpbmcgUG9pbnQgRW11bGF0b3IKKyAgICAoYykgUmViZWwuY29tLCAxOTk4LTE5OTkKKworICAgIERpcmVjdCBxdWVzdGlvbnMsIGNvbW1lbnRzIHRvIFNjb3R0IEJhbWJyb3VnaCA8c2NvdHRiQG5ldHdpbmRlci5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICAgIDI3LzAzLzAzIElhbiBNb2x0b24gQ2xlYW4gdXAgQ09ORklHX0NQVQorKi8KKworI2lmbmRlZiBfX0ZQTU9EVUxFX0hfXworI2RlZmluZSBfX0ZQTU9EVUxFX0hfXworCisjZGVmaW5lIFJFR19PUklHX1IwCTE3CisjZGVmaW5lIFJFR19DUFNSCTE2CisjZGVmaW5lIFJFR19QQwkJMTUKKyNkZWZpbmUgUkVHX0xSCQkxNAorI2RlZmluZSBSRUdfU1AJCTEzCisjZGVmaW5lIFJFR19JUAkJMTIKKyNkZWZpbmUgUkVHX0ZQCQkxMQorI2RlZmluZSBSRUdfUjEwCQkxMAorI2RlZmluZSBSRUdfUjkJCTkKKyNkZWZpbmUgUkVHX1I5CQk5CisjZGVmaW5lIFJFR19SOAkJOAorI2RlZmluZSBSRUdfUjcJCTcKKyNkZWZpbmUgUkVHX1I2CQk2CisjZGVmaW5lIFJFR19SNQkJNQorI2RlZmluZSBSRUdfUjQJCTQKKyNkZWZpbmUgUkVHX1IzCQkzCisjZGVmaW5lIFJFR19SMgkJMgorI2RlZmluZSBSRUdfUjEJCTEKKyNkZWZpbmUgUkVHX1IwCQkwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbndmcGUvZnBtb2R1bGUuaW5sIGIvYXJjaC9hcm0vbndmcGUvZnBtb2R1bGUuaW5sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZjU5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ud2ZwZS9mcG1vZHVsZS5pbmwKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAgICBOZXRXaW5kZXIgRmxvYXRpbmcgUG9pbnQgRW11bGF0b3IKKyAgICAoYykgUmViZWwuQ09NLCAxOTk4LDE5OTkKKworICAgIERpcmVjdCBxdWVzdGlvbnMsIGNvbW1lbnRzIHRvIFNjb3R0IEJhbWJyb3VnaCA8c2NvdHRiQG5ldHdpbmRlci5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkUmVnaXN0ZXIoY29uc3QgdW5zaWduZWQgaW50IG5SZWcpCit7CisJLyogTm90ZTogVGhlIENQVSB0aGlua3MgaXQgaGFzIGRlYWx0IHdpdGggdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24uCisJICAgQXMgYSByZXN1bHQgdGhlIHByb2dyYW0gY291bnRlciBoYXMgYmVlbiBhZHZhbmNlZCB0byB0aGUgbmV4dAorCSAgIGluc3RydWN0aW9uLCBhbmQgcG9pbnRzIDQgYnl0ZXMgYmV5b25kIHRoZSBhY3R1YWwgaW5zdHJ1Y3Rpb24KKwkgICB0aGF0IGNhdXNlZCB0aGUgaW52YWxpZCBpbnN0cnVjdGlvbiB0cmFwIHRvIG9jY3VyLiAgV2UgYWRqdXN0CisJICAgZm9yIHRoaXMgaW4gdGhpcyByb3V0aW5lLiAgTERGL1NURiBpbnN0cnVjdGlvbnMgd2l0aCBSbiA9IFBDCisJICAgZGVwZW5kIG9uIHRoZSBQQyBiZWluZyBjb3JyZWN0LCBhcyB0aGV5IHVzZSBQQys4IGluIHRoZWlyCisJICAgYWRkcmVzcyBjYWxjdWxhdGlvbnMuICovCisJdW5zaWduZWQgbG9uZyAqdXNlclJlZ2lzdGVycyA9IEdFVF9VU0VSUkVHKCk7CisJdW5zaWduZWQgaW50IHZhbCA9IHVzZXJSZWdpc3RlcnNbblJlZ107CisJaWYgKFJFR19QQyA9PSBuUmVnKQorCQl2YWwgLT0gNDsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3dyaXRlUmVnaXN0ZXIoY29uc3QgdW5zaWduZWQgaW50IG5SZWcsIGNvbnN0IHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgKnVzZXJSZWdpc3RlcnMgPSBHRVRfVVNFUlJFRygpOworCXVzZXJSZWdpc3RlcnNbblJlZ10gPSB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkQ1BTUih2b2lkKQoreworCXJldHVybiAocmVhZFJlZ2lzdGVyKFJFR19DUFNSKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZUNQU1IoY29uc3QgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJd3JpdGVSZWdpc3RlcihSRUdfQ1BTUiwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRDb25kaXRpb25Db2Rlcyh2b2lkKQoreworI2lmZGVmIF9fRlBFTV9URVNUX18KKwlyZXR1cm4gKDApOworI2Vsc2UKKwlyZXR1cm4gKHJlYWRDUFNSKCkgJiBDQ19NQVNLKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVDb25kaXRpb25Db2Rlcyhjb25zdCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nICp1c2VyUmVnaXN0ZXJzID0gR0VUX1VTRVJSRUcoKTsKKwl1bnNpZ25lZCBsb25nIHJ2YWw7CisJLyoKKwkgKiBPcGVyYXRlIGRpcmVjdGx5IG9uIHVzZXJSZWdpc3RlcnMgc2luY2UKKwkgKiB0aGUgQ1BTUiBtYXkgYmUgdGhlIFBDIHJlZ2lzdGVyIGl0c2VsZi4KKwkgKi8KKwlydmFsID0gdXNlclJlZ2lzdGVyc1tSRUdfQ1BTUl0gJiB+Q0NfTUFTSzsKKwl1c2VyUmVnaXN0ZXJzW1JFR19DUFNSXSA9IHJ2YWwgfCAodmFsICYgQ0NfTUFTSyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ud2ZwZS9mcG9wY29kZS5jIGIvYXJjaC9hcm0vbndmcGUvZnBvcGNvZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzlmNTcwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbndmcGUvZnBvcGNvZGUuYwpAQCAtMCwwICsxLDkwIEBACisvKgorICAgIE5ldFdpbmRlciBGbG9hdGluZyBQb2ludCBFbXVsYXRvcgorICAgIChjKSBSZWJlbC5DT00sIDE5OTgsMTk5OQorCisgICAgRGlyZWN0IHF1ZXN0aW9ucywgY29tbWVudHMgdG8gU2NvdHQgQmFtYnJvdWdoIDxzY290dGJAbmV0d2luZGVyLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgImZwYTExLmgiCisjaW5jbHVkZSAic29mdGZsb2F0LmgiCisjaW5jbHVkZSAiZnBvcGNvZGUuaCIKKyNpbmNsdWRlICJmcHNyLmgiCisjaW5jbHVkZSAiZnBtb2R1bGUuaCIKKyNpbmNsdWRlICJmcG1vZHVsZS5pbmwiCisKKyNpZmRlZiBDT05GSUdfRlBFX05XRlBFX1hQCitjb25zdCBmbG9hdHg4MCBmbG9hdHg4MENvbnN0YW50W10gPSB7CisJezB4MDAwMCwgMHgwMDAwMDAwMDAwMDAwMDAwVUxMfSwJLyogZXh0ZW5kZWQgMC4wICovCisJezB4M2ZmZiwgMHg4MDAwMDAwMDAwMDAwMDAwVUxMfSwJLyogZXh0ZW5kZWQgMS4wICovCisJezB4NDAwMCwgMHg4MDAwMDAwMDAwMDAwMDAwVUxMfSwJLyogZXh0ZW5kZWQgMi4wICovCisJezB4NDAwMCwgMHhjMDAwMDAwMDAwMDAwMDAwVUxMfSwJLyogZXh0ZW5kZWQgMy4wICovCisJezB4NDAwMSwgMHg4MDAwMDAwMDAwMDAwMDAwVUxMfSwJLyogZXh0ZW5kZWQgNC4wICovCisJezB4NDAwMSwgMHhhMDAwMDAwMDAwMDAwMDAwVUxMfSwJLyogZXh0ZW5kZWQgNS4wICovCisJezB4M2ZmZSwgMHg4MDAwMDAwMDAwMDAwMDAwVUxMfSwJLyogZXh0ZW5kZWQgMC41ICovCisJezB4NDAwMiwgMHhhMDAwMDAwMDAwMDAwMDAwVUxMfQkJLyogZXh0ZW5kZWQgMTAuMCAqLworfTsKKyNlbmRpZgorCitjb25zdCBmbG9hdDY0IGZsb2F0NjRDb25zdGFudFtdID0geworCTB4MDAwMDAwMDAwMDAwMDAwMFVMTCwJLyogZG91YmxlIDAuMCAqLworCTB4M2ZmMDAwMDAwMDAwMDAwMFVMTCwJLyogZG91YmxlIDEuMCAqLworCTB4NDAwMDAwMDAwMDAwMDAwMFVMTCwJLyogZG91YmxlIDIuMCAqLworCTB4NDAwODAwMDAwMDAwMDAwMFVMTCwJLyogZG91YmxlIDMuMCAqLworCTB4NDAxMDAwMDAwMDAwMDAwMFVMTCwJLyogZG91YmxlIDQuMCAqLworCTB4NDAxNDAwMDAwMDAwMDAwMFVMTCwJLyogZG91YmxlIDUuMCAqLworCTB4M2ZlMDAwMDAwMDAwMDAwMFVMTCwJLyogZG91YmxlIDAuNSAqLworCTB4NDAyNDAwMDAwMDAwMDAwMFVMTAkvKiBkb3VibGUgMTAuMCAqLworfTsKKworY29uc3QgZmxvYXQzMiBmbG9hdDMyQ29uc3RhbnRbXSA9IHsKKwkweDAwMDAwMDAwLAkJLyogc2luZ2xlIDAuMCAqLworCTB4M2Y4MDAwMDAsCQkvKiBzaW5nbGUgMS4wICovCisJMHg0MDAwMDAwMCwJCS8qIHNpbmdsZSAyLjAgKi8KKwkweDQwNDAwMDAwLAkJLyogc2luZ2xlIDMuMCAqLworCTB4NDA4MDAwMDAsCQkvKiBzaW5nbGUgNC4wICovCisJMHg0MGEwMDAwMCwJCS8qIHNpbmdsZSA1LjAgKi8KKwkweDNmMDAwMDAwLAkJLyogc2luZ2xlIDAuNSAqLworCTB4NDEyMDAwMDAJCS8qIHNpbmdsZSAxMC4wICovCit9OworCisvKiBjb25kaXRpb24gY29kZSBsb29rdXAgdGFibGUKKyBpbmRleCBpbnRvIHRoZSB0YWJsZSBpcyB0ZXN0IGNvZGU6IEVRLCBORSwgLi4uIExULCBHVCwgQUwsIE5WCisgYml0IHBvc2l0aW9uIGluIHNob3J0IGlzIGNvbmRpdGlvbiBjb2RlOiBOWkNWICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYUNDWzE2XSA9IHsKKwkweEYwRjAsCQkJLy8gRVEgPT0gWiBzZXQKKwkweDBGMEYsCQkJLy8gTkUKKwkweENDQ0MsCQkJLy8gQ1MgPT0gQyBzZXQKKwkweDMzMzMsCQkJLy8gQ0MKKwkweEZGMDAsCQkJLy8gTUkgPT0gTiBzZXQKKwkweDAwRkYsCQkJLy8gUEwKKwkweEFBQUEsCQkJLy8gVlMgPT0gViBzZXQKKwkweDU1NTUsCQkJLy8gVkMKKwkweDBDMEMsCQkJLy8gSEkgPT0gQyBzZXQgJiYgWiBjbGVhcgorCTB4RjNGMywJCQkvLyBMUyA9PSBDIGNsZWFyIHx8IFogc2V0CisJMHhBQTU1LAkJCS8vIEdFID09IChOPT1WKQorCTB4NTVBQSwJCQkvLyBMVCA9PSAoTiE9VikKKwkweDBBMDUsCQkJLy8gR1QgPT0gKCFaICYmIChOPT1WKSkKKwkweEY1RkEsCQkJLy8gTEUgPT0gKFogfHwgKE4hPVYpKQorCTB4RkZGRiwJCQkvLyBBTCBhbHdheXMKKwkwCQkJLy8gTlYKK307CisKK3Vuc2lnbmVkIGludCBjaGVja0NvbmRpdGlvbihjb25zdCB1bnNpZ25lZCBpbnQgb3Bjb2RlLCBjb25zdCB1bnNpZ25lZCBpbnQgY2NvZGVzKQoreworCXJldHVybiAoYUNDW29wY29kZSA+PiAyOF0gPj4gKGNjb2RlcyA+PiAyOCkpICYgMTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL2Zwb3Bjb2RlLmggYi9hcmNoL2FybS9ud2ZwZS9mcG9wY29kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMzVmNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ud2ZwZS9mcG9wY29kZS5oCkBAIC0wLDAgKzEsNDc5IEBACisvKgorICAgIE5ldFdpbmRlciBGbG9hdGluZyBQb2ludCBFbXVsYXRvcgorICAgIChjKSBSZWJlbC5DT00sIDE5OTgsMTk5OQorICAgIChjKSBQaGlsaXAgQmx1bmRlbGwsIDIwMDEKKworICAgIERpcmVjdCBxdWVzdGlvbnMsIGNvbW1lbnRzIHRvIFNjb3R0IEJhbWJyb3VnaCA8c2NvdHRiQG5ldHdpbmRlci5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpZm5kZWYgX19GUE9QQ09ERV9IX18KKyNkZWZpbmUgX19GUE9QQ09ERV9IX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorQVJNIEZsb2F0aW5nIFBvaW50IEluc3RydWN0aW9uIENsYXNzZXMKK3wgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IAorfGMgbyBuIGR8MSAxIDAgUHxVfHV8V3xMfCAgIFJuICB8dnwgIEZkIHwwfDB8MHwxfCAgbyBmIGYgcyBlIHQgIHwgQ1BEVAorfGMgbyBuIGR8MSAxIDAgUHxVfHd8V3xMfCAgIFJuICB8eHwgIEZkIHwwfDB8MXwwfCAgbyBmIGYgcyBlIHQgIHwgQ1BEVCAoY29wcm8gMikKK3wgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IAorfGMgbyBuIGR8MSAxIDEgMHxhfGJ8Y3xkfGV8ICBGbiB8anwgIEZkIHwwfDB8MHwxfGZ8Z3xofDB8aXwgIEZtIHwgQ1BETworfGMgbyBuIGR8MSAxIDEgMHxhfGJ8Y3xMfGV8ICBGbiB8ICAgUmQgIHwwfDB8MHwxfGZ8Z3xofDF8aXwgIEZtIHwgQ1BSVAorfGMgbyBuIGR8MSAxIDEgMHxhfGJ8Y3wxfGV8ICBGbiB8MXwxfDF8MXwwfDB8MHwxfGZ8Z3xofDF8aXwgIEZtIHwgY29tcGFyaXNvbnMKK3wgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IAorCitDUERUCQlkYXRhIHRyYW5zZmVyIGluc3RydWN0aW9ucworCQlMREYsIFNURiwgTEZNIChjb3BybyAyKSwgU0ZNIChjb3BybyAyKQorCQkKK0NQRE8JCWR5YWRpYyBhcml0aG1ldGljIGluc3RydWN0aW9ucworCQlBREYsIE1VRiwgU1VGLCBSU0YsIERWRiwgUkRGLAorCQlQT1csIFJQVywgUk1GLCBGTUwsIEZEViwgRlJELCBQT0wKKworQ1BETwkJbW9uYWRpYyBhcml0aG1ldGljIGluc3RydWN0aW9ucworCQlNVkYsIE1ORiwgQUJTLCBSTkQsIFNRVCwgTE9HLCBMR04sIEVYUCwKKwkJU0lOLCBDT1MsIFRBTiwgQVNOLCBBQ1MsIEFUTiwgVVJELCBOUk0KKwkJCitDUFJUCQlqb2ludCBhcml0aG1ldGljL2RhdGEgdHJhbnNmZXIgaW5zdHJ1Y3Rpb25zCisJCUZJWCAoYXJpdGhtZXRpYyBmb2xsb3dlZCBieSBsb2FkL3N0b3JlKQorCQlGTFQgKGxvYWQvc3RvcmUgZm9sbG93ZWQgYnkgYXJpdGhtZXRpYykKKwkJQ01GLCBDTkYgQ01GRSwgQ05GRSAoY29tcGFyaXNvbnMpCisJCVdGUywgUkZTICh3cml0ZS9yZWFkIGZsb2F0aW5nIHBvaW50IHN0YXR1cyByZWdpc3RlcikKKwkJV0ZDLCBSRkMgKHdyaXRlL3JlYWQgZmxvYXRpbmcgcG9pbnQgY29udHJvbCByZWdpc3RlcikKKworY29uZAkJY29uZGl0aW9uIGNvZGVzCitQCQlwcmUvcG9zdCBpbmRleCBiaXQ6IDAgPSBwb3N0aW5kZXgsIDEgPSBwcmVpbmRleAorVQkJdXAvZG93biBiaXQ6IDAgPSBzdGFjayBncm93cyBkb3duLCAxID0gc3RhY2sgZ3Jvd3MgdXAKK1cJCXdyaXRlIGJhY2sgYml0OiAxID0gdXBkYXRlIGJhc2UgcmVnaXN0ZXIgKFJuKQorTAkJbG9hZC9zdG9yZSBiaXQ6IDAgPSBzdG9yZSwgMSA9IGxvYWQKK1JuCQliYXNlIHJlZ2lzdGVyCitSZAkJZGVzdGluYXRpb24vc291cmNlIHJlZ2lzdGVyCQkKK0ZkCQlmbG9hdGluZyBwb2ludCBkZXN0aW5hdGlvbiByZWdpc3RlcgorRm4JCWZsb2F0aW5nIHBvaW50IHNvdXJjZSByZWdpc3RlcgorRm0JCWZsb2F0aW5nIHBvaW50IHNvdXJjZSByZWdpc3RlciBvciBmbG9hdGluZyBwb2ludCBjb25zdGFudAorCit1dgkJdHJhbnNmZXIgbGVuZ3RoIChUQUJMRSAxKQord3gJCXJlZ2lzdGVyIGNvdW50IChUQUJMRSAyKQorYWJjZAkJYXJpdGhtZXRpYyBvcGNvZGUgKFRBQkxFUyAzICYgNCkKK2VmCQlkZXN0aW5hdGlvbiBzaXplIChyb3VuZGluZyBwcmVjaXNpb24pIChUQUJMRSA1KQorZ2gJCXJvdW5kaW5nIG1vZGUgKFRBQkxFIDYpCitqCQlkeWFkaWMvbW9uYWRpYyBiaXQ6IDAgPSBkeWFkaWMsIDEgPSBtb25hZGljCitpIAkJY29uc3RhbnQgYml0OiAxID0gY29uc3RhbnQgKFRBQkxFIDYpCisqLworCisvKgorVEFCTEUgMQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKworfCAgUHJlY2lzaW9uICAgICAgICAgICAgICB8IHUgfCB2IHwgRlBTUi5FUCB8IGxlbmd0aCAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKworfCBTaW5nbGUgICAgICAgICAgICAgICAgICB8IDAg/CAwIHwgICAgeCAgICB8IDEgd29yZHMgfAorfCBEb3VibGUgICAgICAgICAgICAgICAgICB8IDEg/CAxIHwgICAgeCAgICB8IDIgd29yZHMgfAorfCBFeHRlbmRlZCAgICAgICAgICAgICAgICB8IDEg/CAxIHwgICAgeCAgICB8IDMgd29yZHMgfAorfCBQYWNrZWQgZGVjaW1hbCAgICAgICAgICB8IDEg/CAxIHwgICAgMCAgICB8IDMgd29yZHMgfAorfCBFeHBhbmRlZCBwYWNrZWQgZGVjaW1hbCB8IDEg/CAxIHwgICAgMSAgICB8IDQgd29yZHMgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKworTm90ZTogeCA9IGRvbid0IGNhcmUKKyovCisKKy8qCitUQUJMRSAyCisrLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHcgfCB4IHwgTnVtYmVyIG9mIHJlZ2lzdGVycyB0byB0cmFuc2ZlciB8CisrLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IDAg/CAxIHwgIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEg/CAwIHwgIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEg/CAxIHwgIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDAg/CAwIHwgIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorVEFCTEUgMzogRHlhZGljIEZsb2F0aW5nIFBvaW50IE9wY29kZXMKKystLS0rLS0tKy0tLSstLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYSB8IGIgfCBjIHwgZCB8IE1uZW1vbmljIHwgRGVzY3JpcHRpb24gICAgICAgICAgIHwgT3BlcmF0aW9uICAgICAgICAgICAgIHwKKystLS0rLS0tKy0tLSstLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMCB8IDAgfCAwIHwgMCB8IEFERiAgICAgIHwgQWRkICAgICAgICAgICAgICAgICAgIHwgRmQgOj0gRm4gKyBGbSAgICAgICAgIHwKK3wgMCB8IDAgfCAwIHwgMSB8IE1VRiAgICAgIHwgTXVsdGlwbHkgICAgICAgICAgICAgIHwgRmQgOj0gRm4gKiBGbSAgICAgICAgIHwKK3wgMCB8IDAgfCAxIHwgMCB8IFNVRiAgICAgIHwgU3VidHJhY3QgICAgICAgICAgICAgIHwgRmQgOj0gRm4gLSBGbSAgICAgICAgIHwKK3wgMCB8IDAgfCAxIHwgMSB8IFJTRiAgICAgIHwgUmV2ZXJzZSBzdWJ0cmFjdCAgICAgIHwgRmQgOj0gRm0gLSBGbiAgICAgICAgIHwKK3wgMCB8IDEgfCAwIHwgMCB8IERWRiAgICAgIHwgRGl2aWRlICAgICAgICAgICAgICAgIHwgRmQgOj0gRm4gLyBGbSAgICAgICAgIHwKK3wgMCB8IDEgfCAwIHwgMSB8IFJERiAgICAgIHwgUmV2ZXJzZSBkaXZpZGUgICAgICAgIHwgRmQgOj0gRm0gLyBGbiAgICAgICAgIHwKK3wgMCB8IDEgfCAxIHwgMCB8IFBPVyAgICAgIHwgUG93ZXIgICAgICAgICAgICAgICAgIHwgRmQgOj0gRm4gXiBGbSAgICAgICAgIHwKK3wgMCB8IDEgfCAxIHwgMSB8IFJQVyAgICAgIHwgUmV2ZXJzZSBwb3dlciAgICAgICAgIHwgRmQgOj0gRm0gXiBGbiAgICAgICAgIHwKK3wgMSB8IDAgfCAwIHwgMCB8IFJNRiAgICAgIHwgUmVtYWluZGVyICAgICAgICAgICAgIHwgRmQgOj0gSUVFRSByZW0oRm4vRm0pIHwKK3wgMSB8IDAgfCAwIHwgMSB8IEZNTCAgICAgIHwgRmFzdCBNdWx0aXBseSAgICAgICAgIHwgRmQgOj0gRm4gKiBGbSAgICAgICAgIHwKK3wgMSB8IDAgfCAxIHwgMCB8IEZEViAgICAgIHwgRmFzdCBEaXZpZGUgICAgICAgICAgIHwgRmQgOj0gRm4gLyBGbSAgICAgICAgIHwKK3wgMSB8IDAgfCAxIHwgMSB8IEZSRCAgICAgIHwgRmFzdCByZXZlcnNlIGRpdmlkZSAgIHwgRmQgOj0gRm0gLyBGbiAgICAgICAgIHwKK3wgMSB8IDEgfCAwIHwgMCB8IFBPTCAgICAgIHwgUG9sYXIgYW5nbGUgKEFyY1RhbjIpIHwgRmQgOj0gYXJjdGFuMihGbixGbSkgIHwKK3wgMSB8IDEgfCAwIHwgMSB8ICAgICAgICAgIHwgdW5kZWZpbmVkIGluc3RydWN0aW9uIHwgdHJhcCAgICAgICAgICAgICAgICAgIHwKK3wgMSB8IDEgfCAxIHwgMCB8ICAgICAgICAgIHwgdW5kZWZpbmVkIGluc3RydWN0aW9uIHwgdHJhcCAgICAgICAgICAgICAgICAgIHwKK3wgMSB8IDEgfCAxIHwgMSB8ICAgICAgICAgIHwgdW5kZWZpbmVkIGluc3RydWN0aW9uIHwgdHJhcCAgICAgICAgICAgICAgICAgIHwKKystLS0rLS0tKy0tLSstLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK05vdGU6IFBPVywgUlBXLCBQT0wgYXJlIGRlcHJlY2F0ZWQsIGFuZCBhcmUgYXZhaWxhYmxlIGZvciBiYWNrd2FyZHMKKyAgICAgIGNvbXBhdGliaWxpdHkgb25seS4KKyovCisKKy8qCitUQUJMRSA0OiBNb25hZGljIEZsb2F0aW5nIFBvaW50IE9wY29kZXMKKystLS0rLS0tKy0tLSstLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYSB8IGIgfCBjIHwgZCB8IE1uZW1vbmljIHwgRGVzY3JpcHRpb24gICAgICAgICAgIHwgT3BlcmF0aW9uICAgICAgICAgICAgIHwKKystLS0rLS0tKy0tLSstLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMCB8IDAgfCAwIHwgMCB8IE1WRiAgICAgIHwgTW92ZSAgICAgICAgICAgICAgICAgIHwgRmQgOj0gRm0gICAgICAgICAgICAgIHwKK3wgMCB8IDAgfCAwIHwgMSB8IE1ORiAgICAgIHwgTW92ZSBuZWdhdGVkICAgICAgICAgIHwgRmQgOj0gLSBGbSAgICAgICAgICAgIHwKK3wgMCB8IDAgfCAxIHwgMCB8IEFCUyAgICAgIHwgQWJzb2x1dGUgdmFsdWUgICAgICAgIHwgRmQgOj0gYWJzKEZtKSAgICAgICAgIHwKK3wgMCB8IDAgfCAxIHwgMSB8IFJORCAgICAgIHwgUm91bmQgdG8gaW50ZWdlciAgICAgIHwgRmQgOj0gaW50KEZtKSAgICAgICAgIHwKK3wgMCB8IDEgfCAwIHwgMCB8IFNRVCAgICAgIHwgU3F1YXJlIHJvb3QgICAgICAgICAgIHwgRmQgOj0gc3FydChGbSkgICAgICAgIHwKK3wgMCB8IDEgfCAwIHwgMSB8IExPRyAgICAgIHwgTG9nIGJhc2UgMTAgICAgICAgICAgIHwgRmQgOj0gbG9nMTAoRm0pICAgICAgIHwKK3wgMCB8IDEgfCAxIHwgMCB8IExHTiAgICAgIHwgTG9nIGJhc2UgZSAgICAgICAgICAgIHwgRmQgOj0gbG4oRm0pICAgICAgICAgIHwKK3wgMCB8IDEgfCAxIHwgMSB8IEVYUCAgICAgIHwgRXhwb25lbnQgICAgICAgICAgICAgIHwgRmQgOj0gZSBeIEZtICAgICAgICAgIHwKK3wgMSB8IDAgfCAwIHwgMCB8IFNJTiAgICAgIHwgU2luZSAgICAgICAgICAgICAgICAgIHwgRmQgOj0gc2luKEZtKSAgICAgICAgIHwKK3wgMSB8IDAgfCAwIHwgMSB8IENPUyAgICAgIHwgQ29zaW5lICAgICAgICAgICAgICAgIHwgRmQgOj0gY29zKEZtKSAgICAgICAgIHwKK3wgMSB8IDAgfCAxIHwgMCB8IFRBTiAgICAgIHwgVGFuZ2VudCAgICAgICAgICAgICAgIHwgRmQgOj0gdGFuKEZtKSAgICAgICAgIHwKK3wgMSB8IDAgfCAxIHwgMSB8IEFTTiAgICAgIHwgQXJjIFNpbmUgICAgICAgICAgICAgIHwgRmQgOj0gYXJjc2luKEZtKSAgICAgIHwKK3wgMSB8IDEgfCAwIHwgMCB8IEFDUyAgICAgIHwgQXJjIENvc2luZSAgICAgICAgICAgIHwgRmQgOj0gYXJjY29zKEZtKSAgICAgIHwKK3wgMSB8IDEgfCAwIHwgMSB8IEFUTiAgICAgIHwgQXJjIFRhbmdlbnQgICAgICAgICAgIHwgRmQgOj0gYXJjdGFuKEZtKSAgICAgIHwKK3wgMSB8IDEgfCAxIHwgMCB8IFVSRCAgICAgIHwgVW5ub3JtYWxpemVkIHJvdW5kICAgIHwgRmQgOj0gaW50KEZtKSAgICAgICAgIHwKK3wgMSB8IDEgfCAxIHwgMSB8IE5STSAgICAgIHwgTm9ybWFsaXplICAgICAgICAgICAgIHwgRmQgOj0gbm9ybShGbSkgICAgICAgIHwKKystLS0rLS0tKy0tLSstLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK05vdGU6IExPRywgTEdOLCBFWFAsIFNJTiwgQ09TLCBUQU4sIEFTTiwgQUNTLCBBVE4gYXJlIGRlcHJlY2F0ZWQsIGFuZCBhcmUKKyAgICAgIGF2YWlsYWJsZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb25seS4KKyovCisKKy8qCitUQUJMRSA1CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0rLS0tKworfCAgUm91bmRpbmcgUHJlY2lzaW9uICAgICB8IGUgfCBmIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLSstLS0rCit8IElFRUUgU2luZ2xlIHByZWNpc2lvbiAgIHwgMCD8IDAgfAorfCBJRUVFIERvdWJsZSBwcmVjaXNpb24gICB8IDAg/CAxIHwKK3wgSUVFRSBFeHRlbmRlZCBwcmVjaXNpb24gfCAxIPwgMCB8Cit8IHVuZGVmaW5lZCAodHJhcCkgICAgICAgIHwgMSD8IDEgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tKy0tLSsKKyovCisKKy8qCitUQUJMRSA1CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLSstLS0rCit8ICBSb3VuZGluZyBNb2RlICAgICAgICAgICAgICAgICAgfCBnIHwgaCB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLSstLS0rCit8IFJvdW5kIHRvIG5lYXJlc3QgKGRlZmF1bHQpICAgICAgfCAwIPwgMCB8Cit8IFJvdW5kIHRvd2FyZCBwbHVzIGluZmluaXR5ICAgICAgfCAwIPwgMSB8Cit8IFJvdW5kIHRvd2FyZCBuZWdhdGl2ZSBpbmZpbml0eSAgfCAxIPwgMCB8Cit8IFJvdW5kIHRvd2FyZCB6ZXJvICAgICAgICAgICAgICAgfCAxIPwgMSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLSstLS0rCisqLworCisvKgorPT09Cis9PT0gRGVmaW5pdGlvbnMgZm9yIGxvYWQgYW5kIHN0b3JlIGluc3RydWN0aW9ucworPT09CisqLworCisvKiBiaXQgbWFza3MgKi8KKyNkZWZpbmUgQklUX1BSRUlOREVYCTB4MDEwMDAwMDAKKyNkZWZpbmUgQklUX1VQCQkweDAwODAwMDAwCisjZGVmaW5lIEJJVF9XUklURV9CQUNLCTB4MDAyMDAwMDAKKyNkZWZpbmUgQklUX0xPQUQJMHgwMDEwMDAwMAorCisvKiBtYXNrcyBmb3IgbG9hZC9zdG9yZSAqLworI2RlZmluZSBNQVNLX0NQRFQJCTB4MGMwMDAwMDAJLyogZGF0YSBwcm9jZXNzaW5nIG9wY29kZSAqLworI2RlZmluZSBNQVNLX09GRlNFVAkJMHgwMDAwMDBmZgorI2RlZmluZSBNQVNLX1RSQU5TRkVSX0xFTkdUSAkweDAwNDA4MDAwCisjZGVmaW5lIE1BU0tfUkVHSVNURVJfQ09VTlQJTUFTS19UUkFOU0ZFUl9MRU5HVEgKKyNkZWZpbmUgTUFTS19DT1BST0NFU1NPUgkweDAwMDAwZjAwCisKKy8qIFRlc3RzIGZvciB0cmFuc2ZlciBsZW5ndGggKi8KKyNkZWZpbmUgVFJBTlNGRVJfU0lOR0xFCQkweDAwMDAwMDAwCisjZGVmaW5lIFRSQU5TRkVSX0RPVUJMRQkJMHgwMDAwODAwMAorI2RlZmluZSBUUkFOU0ZFUl9FWFRFTkRFRAkweDAwNDAwMDAwCisjZGVmaW5lIFRSQU5TRkVSX1BBQ0tFRAkJTUFTS19UUkFOU0ZFUl9MRU5HVEgKKworLyogR2V0IHRoZSBjb3Byb2Nlc3NvciBudW1iZXIgZnJvbSB0aGUgb3Bjb2RlLiAqLworI2RlZmluZSBnZXRDb3Byb2Nlc3Nvck51bWJlcihvcGNvZGUpCSgob3Bjb2RlICYgTUFTS19DT1BST0NFU1NPUikgPj4gOCkKKworLyogR2V0IHRoZSBvZmZzZXQgZnJvbSB0aGUgb3Bjb2RlLiAqLworI2RlZmluZSBnZXRPZmZzZXQob3Bjb2RlKQkJKG9wY29kZSAmIE1BU0tfT0ZGU0VUKQorCisvKiBUZXN0cyBmb3Igc3BlY2lmaWMgZGF0YSB0cmFuc2ZlciBsb2FkL3N0b3JlIG9wY29kZXMuICovCisjZGVmaW5lIFRFU1RfT1BDT0RFKG9wY29kZSxtYXNrKQkoKChvcGNvZGUpICYgKG1hc2spKSA9PSAobWFzaykpCisKKyNkZWZpbmUgTE9BRF9PUChvcGNvZGUpICAgVEVTVF9PUENPREUoKG9wY29kZSksTUFTS19DUERUIHwgQklUX0xPQUQpCisjZGVmaW5lIFNUT1JFX09QKG9wY29kZSkgICgob3Bjb2RlICYgKE1BU0tfQ1BEVCB8IEJJVF9MT0FEKSkgPT0gTUFTS19DUERUKQorCisjZGVmaW5lIExERl9PUChvcGNvZGUpCShMT0FEX09QKG9wY29kZSkgJiYgKGdldENvcHJvY2Vzc29yTnVtYmVyKG9wY29kZSkgPT0gMSkpCisjZGVmaW5lIExGTV9PUChvcGNvZGUpCShMT0FEX09QKG9wY29kZSkgJiYgKGdldENvcHJvY2Vzc29yTnVtYmVyKG9wY29kZSkgPT0gMikpCisjZGVmaW5lIFNURl9PUChvcGNvZGUpCShTVE9SRV9PUChvcGNvZGUpICYmIChnZXRDb3Byb2Nlc3Nvck51bWJlcihvcGNvZGUpID09IDEpKQorI2RlZmluZSBTRk1fT1Aob3Bjb2RlKQkoU1RPUkVfT1Aob3Bjb2RlKSAmJiAoZ2V0Q29wcm9jZXNzb3JOdW1iZXIob3Bjb2RlKSA9PSAyKSkKKworI2RlZmluZSBQUkVJTkRFWEVEKG9wY29kZSkJCSgob3Bjb2RlICYgQklUX1BSRUlOREVYKSAhPSAwKQorI2RlZmluZSBQT1NUSU5ERVhFRChvcGNvZGUpCQkoKG9wY29kZSAmIEJJVF9QUkVJTkRFWCkgPT0gMCkKKyNkZWZpbmUgQklUX1VQX1NFVChvcGNvZGUpCQkoKG9wY29kZSAmIEJJVF9VUCkgIT0gMCkKKyNkZWZpbmUgQklUX1VQX0NMRUFSKG9wY29kZSkJCSgob3Bjb2RlICYgQklUX0RPV04pID09IDApCisjZGVmaW5lIFdSSVRFX0JBQ0sob3Bjb2RlKQkJKChvcGNvZGUgJiBCSVRfV1JJVEVfQkFDSykgIT0gMCkKKyNkZWZpbmUgTE9BRChvcGNvZGUpCQkJKChvcGNvZGUgJiBCSVRfTE9BRCkgIT0gMCkKKyNkZWZpbmUgU1RPUkUob3Bjb2RlKQkJCSgob3Bjb2RlICYgQklUX0xPQUQpID09IDApCisKKy8qCis9PT0KKz09PSBEZWZpbml0aW9ucyBmb3IgYXJpdGhtZXRpYyBpbnN0cnVjdGlvbnMKKz09PQorKi8KKy8qIGJpdCBtYXNrcyAqLworI2RlZmluZSBCSVRfTU9OQURJQwkweDAwMDA4MDAwCisjZGVmaW5lIEJJVF9DT05TVEFOVAkweDAwMDAwMDA4CisKKyNkZWZpbmUgQ09OU1RBTlRfRk0ob3Bjb2RlKQkJKChvcGNvZGUgJiBCSVRfQ09OU1RBTlQpICE9IDApCisjZGVmaW5lIE1PTkFESUNfSU5TVFJVQ1RJT04ob3Bjb2RlKQkoKG9wY29kZSAmIEJJVF9NT05BRElDKSAhPSAwKQorCisvKiBpbnN0cnVjdGlvbiBpZGVudGlmaWNhdGlvbiBtYXNrcyAqLworI2RlZmluZSBNQVNLX0NQRE8JCTB4MGUwMDAwMDAJLyogYXJpdGhtZXRpYyBvcGNvZGUgKi8KKyNkZWZpbmUgTUFTS19BUklUSE1FVElDX09QQ09ERQkweDAwZjA4MDAwCisjZGVmaW5lIE1BU0tfREVTVElOQVRJT05fU0laRQkweDAwMDgwMDgwCisKKy8qIGR5YWRpYyBhcml0aG1ldGljIG9wY29kZXMuICovCisjZGVmaW5lIEFERl9DT0RFCTB4MDAwMDAwMDAKKyNkZWZpbmUgTVVGX0NPREUJMHgwMDEwMDAwMAorI2RlZmluZSBTVUZfQ09ERQkweDAwMjAwMDAwCisjZGVmaW5lIFJTRl9DT0RFCTB4MDAzMDAwMDAKKyNkZWZpbmUgRFZGX0NPREUJMHgwMDQwMDAwMAorI2RlZmluZSBSREZfQ09ERQkweDAwNTAwMDAwCisjZGVmaW5lIFBPV19DT0RFCTB4MDA2MDAwMDAKKyNkZWZpbmUgUlBXX0NPREUJMHgwMDcwMDAwMAorI2RlZmluZSBSTUZfQ09ERQkweDAwODAwMDAwCisjZGVmaW5lIEZNTF9DT0RFCTB4MDA5MDAwMDAKKyNkZWZpbmUgRkRWX0NPREUJMHgwMGEwMDAwMAorI2RlZmluZSBGUkRfQ09ERQkweDAwYjAwMDAwCisjZGVmaW5lIFBPTF9DT0RFCTB4MDBjMDAwMDAKKy8qIDB4MDBkMDAwMDAgaXMgYW4gaW52YWxpZCBkeWFkaWMgYXJpdGhtZXRpYyBvcGNvZGUgKi8KKy8qIDB4MDBlMDAwMDAgaXMgYW4gaW52YWxpZCBkeWFkaWMgYXJpdGhtZXRpYyBvcGNvZGUgKi8KKy8qIDB4MDBmMDAwMDAgaXMgYW4gaW52YWxpZCBkeWFkaWMgYXJpdGhtZXRpYyBvcGNvZGUgKi8KKworLyogbW9uYWRpYyBhcml0aG1ldGljIG9wY29kZXMuICovCisjZGVmaW5lIE1WRl9DT0RFCTB4MDAwMDgwMDAKKyNkZWZpbmUgTU5GX0NPREUJMHgwMDEwODAwMAorI2RlZmluZSBBQlNfQ09ERQkweDAwMjA4MDAwCisjZGVmaW5lIFJORF9DT0RFCTB4MDAzMDgwMDAKKyNkZWZpbmUgU1FUX0NPREUJMHgwMDQwODAwMAorI2RlZmluZSBMT0dfQ09ERQkweDAwNTA4MDAwCisjZGVmaW5lIExHTl9DT0RFCTB4MDA2MDgwMDAKKyNkZWZpbmUgRVhQX0NPREUJMHgwMDcwODAwMAorI2RlZmluZSBTSU5fQ09ERQkweDAwODA4MDAwCisjZGVmaW5lIENPU19DT0RFCTB4MDA5MDgwMDAKKyNkZWZpbmUgVEFOX0NPREUJMHgwMGEwODAwMAorI2RlZmluZSBBU05fQ09ERQkweDAwYjA4MDAwCisjZGVmaW5lIEFDU19DT0RFCTB4MDBjMDgwMDAKKyNkZWZpbmUgQVROX0NPREUJMHgwMGQwODAwMAorI2RlZmluZSBVUkRfQ09ERQkweDAwZTA4MDAwCisjZGVmaW5lIE5STV9DT0RFCTB4MDBmMDgwMDAKKworLyoKKz09PQorPT09IERlZmluaXRpb25zIGZvciByZWdpc3RlciB0cmFuc2ZlciBhbmQgY29tcGFyaXNvbiBpbnN0cnVjdGlvbnMKKz09PQorKi8KKworI2RlZmluZSBNQVNLX0NQUlQJCTB4MGUwMDAwMTAJLyogcmVnaXN0ZXIgdHJhbnNmZXIgb3Bjb2RlICovCisjZGVmaW5lIE1BU0tfQ1BSVF9DT0RFCQkweDAwZjAwMDAwCisjZGVmaW5lIEZMVF9DT0RFCQkweDAwMDAwMDAwCisjZGVmaW5lIEZJWF9DT0RFCQkweDAwMTAwMDAwCisjZGVmaW5lIFdGU19DT0RFCQkweDAwMjAwMDAwCisjZGVmaW5lIFJGU19DT0RFCQkweDAwMzAwMDAwCisjZGVmaW5lIFdGQ19DT0RFCQkweDAwNDAwMDAwCisjZGVmaW5lIFJGQ19DT0RFCQkweDAwNTAwMDAwCisjZGVmaW5lIENNRl9DT0RFCQkweDAwOTAwMDAwCisjZGVmaW5lIENORl9DT0RFCQkweDAwYjAwMDAwCisjZGVmaW5lIENNRkVfQ09ERQkJMHgwMGQwMDAwMAorI2RlZmluZSBDTkZFX0NPREUJCTB4MDBmMDAwMDAKKworLyoKKz09PQorPT09IENvbW1vbiBkZWZpbml0aW9ucworPT09CisqLworCisvKiByZWdpc3RlciBtYXNrcyAqLworI2RlZmluZSBNQVNLX1JkCQkweDAwMDBmMDAwCisjZGVmaW5lIE1BU0tfUm4JCTB4MDAwZjAwMDAKKyNkZWZpbmUgTUFTS19GZAkJMHgwMDAwNzAwMAorI2RlZmluZSBNQVNLX0ZtCQkweDAwMDAwMDA3CisjZGVmaW5lIE1BU0tfRm4JCTB4MDAwNzAwMDAKKworLyogY29uZGl0aW9uIGNvZGUgbWFza3MgKi8KKyNkZWZpbmUgQ0NfTUFTSwkJMHhmMDAwMDAwMAorI2RlZmluZSBDQ19ORUdBVElWRQkweDgwMDAwMDAwCisjZGVmaW5lIENDX1pFUk8JCTB4NDAwMDAwMDAKKyNkZWZpbmUgQ0NfQ0FSUlkJMHgyMDAwMDAwMAorI2RlZmluZSBDQ19PVkVSRkxPVwkweDEwMDAwMDAwCisjZGVmaW5lIENDX0VRCQkweDAwMDAwMDAwCisjZGVmaW5lIENDX05FCQkweDEwMDAwMDAwCisjZGVmaW5lIENDX0NTCQkweDIwMDAwMDAwCisjZGVmaW5lIENDX0hTCQlDQ19DUworI2RlZmluZSBDQ19DQwkJMHgzMDAwMDAwMAorI2RlZmluZSBDQ19MTwkJQ0NfQ0MKKyNkZWZpbmUgQ0NfTUkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgQ0NfUEwJCTB4NTAwMDAwMDAKKyNkZWZpbmUgQ0NfVlMJCTB4NjAwMDAwMDAKKyNkZWZpbmUgQ0NfVkMJCTB4NzAwMDAwMDAKKyNkZWZpbmUgQ0NfSEkJCTB4ODAwMDAwMDAKKyNkZWZpbmUgQ0NfTFMJCTB4OTAwMDAwMDAKKyNkZWZpbmUgQ0NfR0UJCTB4YTAwMDAwMDAKKyNkZWZpbmUgQ0NfTFQJCTB4YjAwMDAwMDAKKyNkZWZpbmUgQ0NfR1QJCTB4YzAwMDAwMDAKKyNkZWZpbmUgQ0NfTEUJCTB4ZDAwMDAwMDAKKyNkZWZpbmUgQ0NfQUwJCTB4ZTAwMDAwMDAKKyNkZWZpbmUgQ0NfTlYJCTB4ZjAwMDAwMDAKKworLyogcm91bmRpbmcgbWFza3MvdmFsdWVzICovCisjZGVmaW5lIE1BU0tfUk9VTkRJTkdfTU9ERQkweDAwMDAwMDYwCisjZGVmaW5lIFJPVU5EX1RPX05FQVJFU1QJMHgwMDAwMDAwMAorI2RlZmluZSBST1VORF9UT19QTFVTX0lORklOSVRZCTB4MDAwMDAwMjAKKyNkZWZpbmUgUk9VTkRfVE9fTUlOVVNfSU5GSU5JVFkJMHgwMDAwMDA0MAorI2RlZmluZSBST1VORF9UT19aRVJPCQkweDAwMDAwMDYwCisKKyNkZWZpbmUgTUFTS19ST1VORElOR19QUkVDSVNJT04JMHgwMDA4MDA4MAorI2RlZmluZSBST1VORF9TSU5HTEUJCTB4MDAwMDAwMDAKKyNkZWZpbmUgUk9VTkRfRE9VQkxFCQkweDAwMDAwMDgwCisjZGVmaW5lIFJPVU5EX0VYVEVOREVECQkweDAwMDgwMDAwCisKKy8qIEdldCB0aGUgY29uZGl0aW9uIGNvZGUgZnJvbSB0aGUgb3Bjb2RlLiAqLworI2RlZmluZSBnZXRDb25kaXRpb24ob3Bjb2RlKQkJKG9wY29kZSA+PiAyOCkKKworLyogR2V0IHRoZSBzb3VyY2UgcmVnaXN0ZXIgZnJvbSB0aGUgb3Bjb2RlLiAqLworI2RlZmluZSBnZXRSbihvcGNvZGUpCQkJKChvcGNvZGUgJiBNQVNLX1JuKSA+PiAxNikKKworLyogR2V0IHRoZSBkZXN0aW5hdGlvbiBmbG9hdGluZyBwb2ludCByZWdpc3RlciBmcm9tIHRoZSBvcGNvZGUuICovCisjZGVmaW5lIGdldEZkKG9wY29kZSkJCQkoKG9wY29kZSAmIE1BU0tfRmQpID4+IDEyKQorCisvKiBHZXQgdGhlIGZpcnN0IHNvdXJjZSBmbG9hdGluZyBwb2ludCByZWdpc3RlciBmcm9tIHRoZSBvcGNvZGUuICovCisjZGVmaW5lIGdldEZuKG9wY29kZSkJCSgob3Bjb2RlICYgTUFTS19GbikgPj4gMTYpCisKKy8qIEdldCB0aGUgc2Vjb25kIHNvdXJjZSBmbG9hdGluZyBwb2ludCByZWdpc3RlciBmcm9tIHRoZSBvcGNvZGUuICovCisjZGVmaW5lIGdldEZtKG9wY29kZSkJCShvcGNvZGUgJiBNQVNLX0ZtKQorCisvKiBHZXQgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGZyb20gdGhlIG9wY29kZS4gKi8KKyNkZWZpbmUgZ2V0UmQob3Bjb2RlKQkJKChvcGNvZGUgJiBNQVNLX1JkKSA+PiAxMikKKworLyogR2V0IHRoZSByb3VuZGluZyBtb2RlIGZyb20gdGhlIG9wY29kZS4gKi8KKyNkZWZpbmUgZ2V0Um91bmRpbmdNb2RlKG9wY29kZSkJCSgob3Bjb2RlICYgTUFTS19ST1VORElOR19NT0RFKSA+PiA1KQorCisjaWZkZWYgQ09ORklHX0ZQRV9OV0ZQRV9YUAorc3RhdGljIGlubGluZSBjb25zdCBmbG9hdHg4MCBnZXRFeHRlbmRlZENvbnN0YW50KGNvbnN0IHVuc2lnbmVkIGludCBuSW5kZXgpCit7CisJZXh0ZXJuIGNvbnN0IGZsb2F0eDgwIGZsb2F0eDgwQ29uc3RhbnRbXTsKKwlyZXR1cm4gZmxvYXR4ODBDb25zdGFudFtuSW5kZXhdOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgY29uc3QgZmxvYXQ2NCBnZXREb3VibGVDb25zdGFudChjb25zdCB1bnNpZ25lZCBpbnQgbkluZGV4KQoreworCWV4dGVybiBjb25zdCBmbG9hdDY0IGZsb2F0NjRDb25zdGFudFtdOworCXJldHVybiBmbG9hdDY0Q29uc3RhbnRbbkluZGV4XTsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBmbG9hdDMyIGdldFNpbmdsZUNvbnN0YW50KGNvbnN0IHVuc2lnbmVkIGludCBuSW5kZXgpCit7CisJZXh0ZXJuIGNvbnN0IGZsb2F0MzIgZmxvYXQzMkNvbnN0YW50W107CisJcmV0dXJuIGZsb2F0MzJDb25zdGFudFtuSW5kZXhdOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRUcmFuc2Zlckxlbmd0aChjb25zdCB1bnNpZ25lZCBpbnQgb3Bjb2RlKQoreworCXVuc2lnbmVkIGludCBuUmM7CisKKwlzd2l0Y2ggKG9wY29kZSAmIE1BU0tfVFJBTlNGRVJfTEVOR1RIKSB7CisJY2FzZSAweDAwMDAwMDAwOgorCQluUmMgPSAxOworCQlicmVhazsJCS8qIHNpbmdsZSBwcmVjaXNpb24gKi8KKwljYXNlIDB4MDAwMDgwMDA6CisJCW5SYyA9IDI7CisJCWJyZWFrOwkJLyogZG91YmxlIHByZWNpc2lvbiAqLworCWNhc2UgMHgwMDQwMDAwMDoKKwkJblJjID0gMzsKKwkJYnJlYWs7CQkvKiBleHRlbmRlZCBwcmVjaXNpb24gKi8KKwlkZWZhdWx0OgorCQluUmMgPSAwOworCX0KKworCXJldHVybiAoblJjKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0UmVnaXN0ZXJDb3VudChjb25zdCB1bnNpZ25lZCBpbnQgb3Bjb2RlKQoreworCXVuc2lnbmVkIGludCBuUmM7CisKKwlzd2l0Y2ggKG9wY29kZSAmIE1BU0tfUkVHSVNURVJfQ09VTlQpIHsKKwljYXNlIDB4MDAwMDAwMDA6CisJCW5SYyA9IDQ7CisJCWJyZWFrOworCWNhc2UgMHgwMDAwODAwMDoKKwkJblJjID0gMTsKKwkJYnJlYWs7CisJY2FzZSAweDAwNDAwMDAwOgorCQluUmMgPSAyOworCQlicmVhazsKKwljYXNlIDB4MDA0MDgwMDA6CisJCW5SYyA9IDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW5SYyA9IDA7CisJfQorCisJcmV0dXJuIChuUmMpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRSb3VuZGluZ1ByZWNpc2lvbihjb25zdCB1bnNpZ25lZCBpbnQgb3Bjb2RlKQoreworCXVuc2lnbmVkIGludCBuUmM7CisKKwlzd2l0Y2ggKG9wY29kZSAmIE1BU0tfUk9VTkRJTkdfUFJFQ0lTSU9OKSB7CisJY2FzZSAweDAwMDAwMDAwOgorCQluUmMgPSAxOworCQlicmVhazsKKwljYXNlIDB4MDAwMDAwODA6CisJCW5SYyA9IDI7CisJCWJyZWFrOworCWNhc2UgMHgwMDA4MDAwMDoKKwkJblJjID0gMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJblJjID0gMDsKKwl9CisKKwlyZXR1cm4gKG5SYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldERlc3RpbmF0aW9uU2l6ZShjb25zdCB1bnNpZ25lZCBpbnQgb3Bjb2RlKQoreworCXVuc2lnbmVkIGludCBuUmM7CisKKwlzd2l0Y2ggKG9wY29kZSAmIE1BU0tfREVTVElOQVRJT05fU0laRSkgeworCWNhc2UgMHgwMDAwMDAwMDoKKwkJblJjID0gdHlwZVNpbmdsZTsKKwkJYnJlYWs7CisJY2FzZSAweDAwMDAwMDgwOgorCQluUmMgPSB0eXBlRG91YmxlOworCQlicmVhazsKKwljYXNlIDB4MDAwODAwMDA6CisJCW5SYyA9IHR5cGVFeHRlbmRlZDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJblJjID0gdHlwZU5vbmU7CisJfQorCisJcmV0dXJuIChuUmMpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL2Zwc3IuaCBiL2FyY2gvYXJtL253ZnBlL2Zwc3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTliMzAwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbndmcGUvZnBzci5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICAgIE5ldFdpbmRlciBGbG9hdGluZyBQb2ludCBFbXVsYXRvcgorICAgIChjKSBSZWJlbC5jb20sIDE5OTgtMTk5OQorCisgICAgRGlyZWN0IHF1ZXN0aW9ucywgY29tbWVudHMgdG8gU2NvdHQgQmFtYnJvdWdoIDxzY290dGJAbmV0d2luZGVyLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworI2lmbmRlZiBfX0ZQU1JfSF9fCisjZGVmaW5lIF9fRlBTUl9IX18KKworLyoKK1RoZSBGUFNSIGlzIGEgMzIgYml0IHJlZ2lzdGVyIGNvbnNpc3Rpbmcgb2YgNCBwYXJ0cywgZWFjaCBleGFjdGx5CitvbmUgYnl0ZS4KKworCVNZU1RFTSBJRAorCUVYQ0VQVElPTiBUUkFQIEVOQUJMRSBCWVRFCisJU1lTVEVNIENPTlRST0wgQllURQorCUNVTVVMQVRJVkUgRVhDRVBUSU9OIEZMQUdTIEJZVEUKKwkKK1RoZSBGUENSIGlzIGEgMzIgYml0IHJlZ2lzdGVyIGNvbnNpc3Rpbmcgb2YgYml0IGZsYWdzLgorKi8KKworLyogU1lTVEVNIElECistLS0tLS0tLS0tLS0KK05vdGU6IHRoZSBzeXN0ZW0gaWQgYnl0ZSBpcyByZWFkIG9ubHkgICovCisKK3R5cGVkZWYgdW5zaWduZWQgaW50IEZQU1I7CS8qIHR5cGUgZm9yIGZsb2F0aW5nIHBvaW50IHN0YXR1cyByZWdpc3RlciAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgRlBDUjsJLyogdHlwZSBmb3IgZmxvYXRpbmcgcG9pbnQgY29udHJvbCByZWdpc3RlciAqLworCisjZGVmaW5lIE1BU0tfU1lTSUQJCTB4ZmYwMDAwMDAKKyNkZWZpbmUgQklUX0hBUkRXQVJFCQkweDgwMDAwMDAwCisjZGVmaW5lIEZQX0VNVUxBVE9SCQkweDAxMDAwMDAwCS8qIFN5c3RlbSBJRCBmb3IgZW11bGF0b3IgKi8KKyNkZWZpbmUgRlBfQUNDRUxFUkFUT1IJCTB4ODEwMDAwMDAJLyogU3lzdGVtIElEIGZvciBGUEExMSAqLworCisvKiBFWENFUFRJT04gVFJBUCBFTkFCTEUgQllURQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBNQVNLX1RSQVBfRU5BQkxFCTB4MDBmZjAwMDAKKyNkZWZpbmUgTUFTS19UUkFQX0VOQUJMRV9TVFJJQ1QJMHgwMDFmMDAwMAorI2RlZmluZSBCSVRfSVhFCQkweDAwMTAwMDAwCS8qIGluZXhhY3QgZXhjZXB0aW9uIGVuYWJsZSAqLworI2RlZmluZSBCSVRfVUZFCQkweDAwMDgwMDAwCS8qIHVuZGVyZmxvdyBleGNlcHRpb24gZW5hYmxlICovCisjZGVmaW5lIEJJVF9PRkUJCTB4MDAwNDAwMDAJLyogb3ZlcmZsb3cgZXhjZXB0aW9uIGVuYWJsZSAqLworI2RlZmluZSBCSVRfRFpFCQkweDAwMDIwMDAwCS8qIGRpdmlkZSBieSB6ZXJvIGV4Y2VwdGlvbiBlbmFibGUgKi8KKyNkZWZpbmUgQklUX0lPRQkJMHgwMDAxMDAwMAkvKiBpbnZhbGlkIG9wZXJhdGlvbiBleGNlcHRpb24gZW5hYmxlICovCisKKy8qIFNZU1RFTSBDT05UUk9MIEJZVEUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBNQVNLX1NZU1RFTV9DT05UUk9MCTB4MDAwMGZmMDAKKyNkZWZpbmUgTUFTS19UUkFQX1NUUklDVAkweDAwMDAxZjAwCisKKyNkZWZpbmUgQklUX0FDCTB4MDAwMDEwMDAJLyogdXNlIGFsdGVybmF0aXZlIEMtZmxhZyBkZWZpbml0aW9uCisJCQkJICAgZm9yIGNvbXBhcmVzICovCisjZGVmaW5lIEJJVF9FUAkweDAwMDAwODAwCS8qIHVzZSBleHBhbmRlZCBwYWNrZWQgZGVjaW1hbCBmb3JtYXQgKi8KKyNkZWZpbmUgQklUX1NPCTB4MDAwMDA0MDAJLyogc2VsZWN0IHN5bmNocm9ub3VzIG9wZXJhdGlvbiBvZiBGUEEgKi8KKyNkZWZpbmUgQklUX05FCTB4MDAwMDAyMDAJLyogTmFOIGV4Y2VwdGlvbiBiaXQgKi8KKyNkZWZpbmUgQklUX05ECTB4MDAwMDAxMDAJLyogbm8gZGVub3JtYWxpemVkIG51bWJlcnMgYml0ICovCisKKy8qIENVTVVMQVRJVkUgRVhDRVBUSU9OIEZMQUdTIEJZVEUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBNQVNLX0VYQ0VQVElPTl9GTEFHUwkJMHgwMDAwMDBmZgorI2RlZmluZSBNQVNLX0VYQ0VQVElPTl9GTEFHU19TVFJJQ1QJMHgwMDAwMDAxZgorCisjZGVmaW5lIEJJVF9JWEMJCTB4MDAwMDAwMTAJLyogaW5leGFjdCBleGNlcHRpb24gZmxhZyAqLworI2RlZmluZSBCSVRfVUZDCQkweDAwMDAwMDA4CS8qIHVuZGVyZmxvdyBleGNlcHRpb24gZmxhZyAqLworI2RlZmluZSBCSVRfT0ZDCQkweDAwMDAwMDA0CS8qIG92ZXJmbG9hdCBleGNlcHRpb24gZmxhZyAqLworI2RlZmluZSBCSVRfRFpDCQkweDAwMDAwMDAyCS8qIGRpdmlkZSBieSB6ZXJvIGV4Y2VwdGlvbiBmbGFnICovCisjZGVmaW5lIEJJVF9JT0MJCTB4MDAwMDAwMDEJLyogaW52YWxpZCBvcGVyYXRpb24gZXhjZXB0aW9uIGZsYWcgKi8KKworLyogRmxvYXRpbmcgUG9pbnQgQ29udHJvbCBSZWdpc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgQklUX1JVCQkweDgwMDAwMDAwCS8qIHJvdW5kZWQgdXAgYml0ICovCisjZGVmaW5lIEJJVF9JRQkJMHgxMDAwMDAwMAkvKiBpbmV4YWN0IGJpdCAqLworI2RlZmluZSBCSVRfTU8JCTB4MDgwMDAwMDAJLyogbWFudGlzc2Egb3ZlcmZsb3cgYml0ICovCisjZGVmaW5lIEJJVF9FTwkJMHgwNDAwMDAwMAkvKiBleHBvbmVudCBvdmVyZmxvdyBiaXQgKi8KKyNkZWZpbmUgQklUX1NCCQkweDAwMDAwODAwCS8qIHN0b3JlIGJvdW5jZSAqLworI2RlZmluZSBCSVRfQUIJCTB4MDAwMDA0MDAJLyogYXJpdGhtZXRpYyBib3VuY2UgKi8KKyNkZWZpbmUgQklUX1JFCQkweDAwMDAwMjAwCS8qIHJvdW5kaW5nIGV4Y2VwdGlvbiAqLworI2RlZmluZSBCSVRfREEJCTB4MDAwMDAxMDAJLyogZGlzYWJsZSBGUEEgKi8KKworI2RlZmluZSBNQVNLX09QCQkweDAwZjA4MDEwCS8qIEFVIG9wZXJhdGlvbiBjb2RlICovCisjZGVmaW5lIE1BU0tfUFIJCTB4MDAwODAwODAJLyogQVUgcHJlY2lzaW9uICovCisjZGVmaW5lIE1BU0tfUzEJCTB4MDAwNzAwMDAJLyogQVUgc291cmNlIHJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgTUFTS19TMgkJMHgwMDAwMDAwNwkvKiBBVSBzb3VyY2UgcmVnaXN0ZXIgMiAqLworI2RlZmluZSBNQVNLX0RTCQkweDAwMDA3MDAwCS8qIEFVIGRlc3RpbmF0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIE1BU0tfUk0JCTB4MDAwMDAwNjAJLyogQVUgcm91bmRpbmcgbW9kZSAqLworI2RlZmluZSBNQVNLX0FMVQkweDljZmZmMmZmCS8qIG9ubHkgQUxVIGNhbiB3cml0ZSB0aGVzZSBiaXRzICovCisjZGVmaW5lIE1BU0tfUkVTRVQJMHgwMDAwMGQwMAkvKiBiaXRzIHNldCBvbiByZXNldCwgYWxsIG90aGVycyBjbGVhcmVkICovCisjZGVmaW5lIE1BU0tfV0ZDCU1BU0tfUkVTRVQKKyNkZWZpbmUgTUFTS19SRkMJfk1BU0tfUkVTRVQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ud2ZwZS9taWxpZXUuaCBiL2FyY2gvYXJtL253ZnBlL21pbGlldS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzODkyYWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ud2ZwZS9taWxpZXUuaApAQCAtMCwwICsxLDQ4IEBACisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgQyBoZWFkZXIgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTb2Z0RmxvYXQgSUVDL0lFRUUgRmxvYXRpbmctcG9pbnQKK0FyaXRobWV0aWMgUGFja2FnZSwgUmVsZWFzZSAyLgorCitXcml0dGVuIGJ5IEpvaG4gUi4gSGF1c2VyLiAgVGhpcyB3b3JrIHdhcyBtYWRlIHBvc3NpYmxlIGluIHBhcnQgYnkgdGhlCitJbnRlcm5hdGlvbmFsIENvbXB1dGVyIFNjaWVuY2UgSW5zdGl0dXRlLCBsb2NhdGVkIGF0IFN1aXRlIDYwMCwgMTk0NyBDZW50ZXIKK1N0cmVldCwgQmVya2VsZXksIENhbGlmb3JuaWEgOTQ3MDQuICBGdW5kaW5nIHdhcyBwYXJ0aWFsbHkgcHJvdmlkZWQgYnkgdGhlCitOYXRpb25hbCBTY2llbmNlIEZvdW5kYXRpb24gdW5kZXIgZ3JhbnQgTUlQLTkzMTE5ODAuICBUaGUgb3JpZ2luYWwgdmVyc2lvbgorb2YgdGhpcyBjb2RlIHdhcyB3cml0dGVuIGFzIHBhcnQgb2YgYSBwcm9qZWN0IHRvIGJ1aWxkIGEgZml4ZWQtcG9pbnQgdmVjdG9yCitwcm9jZXNzb3IgaW4gY29sbGFib3JhdGlvbiB3aXRoIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYXQgQmVya2VsZXksCitvdmVyc2VlbiBieSBQcm9mcy4gTmVsc29uIE1vcmdhbiBhbmQgSm9obiBXYXdyenluZWsuICBNb3JlIGluZm9ybWF0aW9uCitpcyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgV2ViIHBhZ2UgYGh0dHA6Ly9IVFRQLkNTLkJlcmtlbGV5LkVEVS9+amhhdXNlci8KK2FyaXRobWV0aWMvc29mdGZsb2F0Lmh0bWwnLgorCitUSElTIFNPRlRXQVJFIElTIERJU1RSSUJVVEVEIEFTIElTLCBGT1IgRlJFRS4gIEFsdGhvdWdoIHJlYXNvbmFibGUgZWZmb3J0CitoYXMgYmVlbiBtYWRlIHRvIGF2b2lkIGl0LCBUSElTIFNPRlRXQVJFIE1BWSBDT05UQUlOIEZBVUxUUyBUSEFUIFdJTEwgQVQKK1RJTUVTIFJFU1VMVCBJTiBJTkNPUlJFQ1QgQkVIQVZJT1IuICBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBJUyBSRVNUUklDVEVEIFRPCitQRVJTT05TIEFORCBPUkdBTklaQVRJT05TIFdITyBDQU4gQU5EIFdJTEwgVEFLRSBGVUxMIFJFU1BPTlNJQklMSVRZIEZPUiBBTlkKK0FORCBBTEwgTE9TU0VTLCBDT1NUUywgT1IgT1RIRVIgUFJPQkxFTVMgQVJJU0lORyBGUk9NIElUUyBVU0UuCisKK0Rlcml2YXRpdmUgd29ya3MgYXJlIGFjY2VwdGFibGUsIGV2ZW4gZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMsIHNvIGxvbmcgYXMKKygxKSB0aGV5IGluY2x1ZGUgcHJvbWluZW50IG5vdGljZSB0aGF0IHRoZSB3b3JrIGlzIGRlcml2YXRpdmUsIGFuZCAoMikgdGhleQoraW5jbHVkZSBwcm9taW5lbnQgbm90aWNlIGFraW4gdG8gdGhlc2UgdGhyZWUgcGFyYWdyYXBocyBmb3IgdGhvc2UgcGFydHMgb2YKK3RoaXMgY29kZSB0aGF0IGFyZSByZXRhaW5lZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luY2x1ZGUgY29tbW9uIGludGVnZXIgdHlwZXMgYW5kIGZsYWdzLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKyNpbmNsdWRlICJBUk0tZ2NjLmgiCisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTeW1ib2xpYyBCb29sZWFuIGxpdGVyYWxzLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2VudW0geworICAgIEZBTFNFID0gMCwKKyAgICBUUlVFICA9IDEKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL3NpbmdsZV9jcGRvLmMgYi9hcmNoL2FybS9ud2ZwZS9zaW5nbGVfY3Bkby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTgwOGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ud2ZwZS9zaW5nbGVfY3Bkby5jCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICAgIE5ldFdpbmRlciBGbG9hdGluZyBQb2ludCBFbXVsYXRvcgorICAgIChjKSBSZWJlbC5DT00sIDE5OTgsMTk5OQorICAgIChjKSBQaGlsaXAgQmx1bmRlbGwsIDIwMDEKKworICAgIERpcmVjdCBxdWVzdGlvbnMsIGNvbW1lbnRzIHRvIFNjb3R0IEJhbWJyb3VnaCA8c2NvdHRiQG5ldHdpbmRlci5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpbmNsdWRlICJmcGExMS5oIgorI2luY2x1ZGUgInNvZnRmbG9hdC5oIgorI2luY2x1ZGUgImZwb3Bjb2RlLmgiCisKK2Zsb2F0MzIgZmxvYXQzMl9leHAoZmxvYXQzMiBGbSk7CitmbG9hdDMyIGZsb2F0MzJfbG4oZmxvYXQzMiBGbSk7CitmbG9hdDMyIGZsb2F0MzJfc2luKGZsb2F0MzIgckZtKTsKK2Zsb2F0MzIgZmxvYXQzMl9jb3MoZmxvYXQzMiByRm0pOworZmxvYXQzMiBmbG9hdDMyX2FyY3NpbihmbG9hdDMyIHJGbSk7CitmbG9hdDMyIGZsb2F0MzJfYXJjdGFuKGZsb2F0MzIgckZtKTsKK2Zsb2F0MzIgZmxvYXQzMl9sb2coZmxvYXQzMiByRm0pOworZmxvYXQzMiBmbG9hdDMyX3RhbihmbG9hdDMyIHJGbSk7CitmbG9hdDMyIGZsb2F0MzJfYXJjY29zKGZsb2F0MzIgckZtKTsKK2Zsb2F0MzIgZmxvYXQzMl9wb3coZmxvYXQzMiByRm4sIGZsb2F0MzIgckZtKTsKK2Zsb2F0MzIgZmxvYXQzMl9wb2woZmxvYXQzMiByRm4sIGZsb2F0MzIgckZtKTsKKworc3RhdGljIGZsb2F0MzIgZmxvYXQzMl9yc2YoZmxvYXQzMiByRm4sIGZsb2F0MzIgckZtKQoreworCXJldHVybiBmbG9hdDMyX3N1YihyRm0sIHJGbik7Cit9CisKK3N0YXRpYyBmbG9hdDMyIGZsb2F0MzJfcmR2KGZsb2F0MzIgckZuLCBmbG9hdDMyIHJGbSkKK3sKKwlyZXR1cm4gZmxvYXQzMl9kaXYockZtLCByRm4pOworfQorCitzdGF0aWMgZmxvYXQzMiAoKmNvbnN0IGR5YWRpY19zaW5nbGVbMTZdKShmbG9hdDMyIHJGbiwgZmxvYXQzMiByRm0pID0geworCVtBREZfQ09ERSA+PiAyMF0gPSBmbG9hdDMyX2FkZCwKKwlbTVVGX0NPREUgPj4gMjBdID0gZmxvYXQzMl9tdWwsCisJW1NVRl9DT0RFID4+IDIwXSA9IGZsb2F0MzJfc3ViLAorCVtSU0ZfQ09ERSA+PiAyMF0gPSBmbG9hdDMyX3JzZiwKKwlbRFZGX0NPREUgPj4gMjBdID0gZmxvYXQzMl9kaXYsCisJW1JERl9DT0RFID4+IDIwXSA9IGZsb2F0MzJfcmR2LAorCVtSTUZfQ09ERSA+PiAyMF0gPSBmbG9hdDMyX3JlbSwKKworCVtGTUxfQ09ERSA+PiAyMF0gPSBmbG9hdDMyX211bCwKKwlbRkRWX0NPREUgPj4gMjBdID0gZmxvYXQzMl9kaXYsCisJW0ZSRF9DT0RFID4+IDIwXSA9IGZsb2F0MzJfcmR2LAorfTsKKworc3RhdGljIGZsb2F0MzIgZmxvYXQzMl9tdmYoZmxvYXQzMiByRm0pCit7CisJcmV0dXJuIHJGbTsKK30KKworc3RhdGljIGZsb2F0MzIgZmxvYXQzMl9tbmYoZmxvYXQzMiByRm0pCit7CisJcmV0dXJuIHJGbSBeIDB4ODAwMDAwMDA7Cit9CisKK3N0YXRpYyBmbG9hdDMyIGZsb2F0MzJfYWJzKGZsb2F0MzIgckZtKQoreworCXJldHVybiByRm0gJiAweDdmZmZmZmZmOworfQorCitzdGF0aWMgZmxvYXQzMiAoKmNvbnN0IG1vbmFkaWNfc2luZ2xlWzE2XSkoZmxvYXQzMiByRm0pID0geworCVtNVkZfQ09ERSA+PiAyMF0gPSBmbG9hdDMyX212ZiwKKwlbTU5GX0NPREUgPj4gMjBdID0gZmxvYXQzMl9tbmYsCisJW0FCU19DT0RFID4+IDIwXSA9IGZsb2F0MzJfYWJzLAorCVtSTkRfQ09ERSA+PiAyMF0gPSBmbG9hdDMyX3JvdW5kX3RvX2ludCwKKwlbVVJEX0NPREUgPj4gMjBdID0gZmxvYXQzMl9yb3VuZF90b19pbnQsCisJW1NRVF9DT0RFID4+IDIwXSA9IGZsb2F0MzJfc3FydCwKKwlbTlJNX0NPREUgPj4gMjBdID0gZmxvYXQzMl9tdmYsCit9OworCit1bnNpZ25lZCBpbnQgU2luZ2xlQ1BETyhjb25zdCB1bnNpZ25lZCBpbnQgb3Bjb2RlLCBGUFJFRyAqIHJGZCkKK3sKKwlGUEExMSAqZnBhMTEgPSBHRVRfRlBBMTEoKTsKKwlmbG9hdDMyIHJGbTsKKwl1bnNpZ25lZCBpbnQgRm0sIG9wY19tYXNrX3NoaWZ0OworCisJRm0gPSBnZXRGbShvcGNvZGUpOworCWlmIChDT05TVEFOVF9GTShvcGNvZGUpKSB7CisJCXJGbSA9IGdldFNpbmdsZUNvbnN0YW50KEZtKTsKKwl9IGVsc2UgaWYgKGZwYTExLT5mVHlwZVtGbV0gPT0gdHlwZVNpbmdsZSkgeworCQlyRm0gPSBmcGExMS0+ZnByZWdbRm1dLmZTaW5nbGU7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDA7CisJfQorCisJb3BjX21hc2tfc2hpZnQgPSAob3Bjb2RlICYgTUFTS19BUklUSE1FVElDX09QQ09ERSkgPj4gMjA7CisJaWYgKCFNT05BRElDX0lOU1RSVUNUSU9OKG9wY29kZSkpIHsKKwkJdW5zaWduZWQgaW50IEZuID0gZ2V0Rm4ob3Bjb2RlKTsKKwkJZmxvYXQzMiByRm47CisKKwkJaWYgKGZwYTExLT5mVHlwZVtGbl0gPT0gdHlwZVNpbmdsZSAmJgorCQkgICAgZHlhZGljX3NpbmdsZVtvcGNfbWFza19zaGlmdF0pIHsKKwkJCXJGbiA9IGZwYTExLT5mcHJlZ1tGbl0uZlNpbmdsZTsKKwkJCXJGZC0+ZlNpbmdsZSA9IGR5YWRpY19zaW5nbGVbb3BjX21hc2tfc2hpZnRdKHJGbiwgckZtKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG1vbmFkaWNfc2luZ2xlW29wY19tYXNrX3NoaWZ0XSkgeworCQkJckZkLT5mU2luZ2xlID0gbW9uYWRpY19zaW5nbGVbb3BjX21hc2tfc2hpZnRdKHJGbSk7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbndmcGUvc29mdGZsb2F0LW1hY3JvcyBiL2FyY2gvYXJtL253ZnBlL3NvZnRmbG9hdC1tYWNyb3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2OTk4OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL253ZnBlL3NvZnRmbG9hdC1tYWNyb3MKQEAgLTAsMCArMSw3NDAgQEAKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBDIHNvdXJjZSBmcmFnbWVudCBpcyBwYXJ0IG9mIHRoZSBTb2Z0RmxvYXQgSUVDL0lFRUUgRmxvYXRpbmctcG9pbnQKK0FyaXRobWV0aWMgUGFja2FnZSwgUmVsZWFzZSAyLgorCitXcml0dGVuIGJ5IEpvaG4gUi4gSGF1c2VyLiAgVGhpcyB3b3JrIHdhcyBtYWRlIHBvc3NpYmxlIGluIHBhcnQgYnkgdGhlCitJbnRlcm5hdGlvbmFsIENvbXB1dGVyIFNjaWVuY2UgSW5zdGl0dXRlLCBsb2NhdGVkIGF0IFN1aXRlIDYwMCwgMTk0NyBDZW50ZXIKK1N0cmVldCwgQmVya2VsZXksIENhbGlmb3JuaWEgOTQ3MDQuICBGdW5kaW5nIHdhcyBwYXJ0aWFsbHkgcHJvdmlkZWQgYnkgdGhlCitOYXRpb25hbCBTY2llbmNlIEZvdW5kYXRpb24gdW5kZXIgZ3JhbnQgTUlQLTkzMTE5ODAuICBUaGUgb3JpZ2luYWwgdmVyc2lvbgorb2YgdGhpcyBjb2RlIHdhcyB3cml0dGVuIGFzIHBhcnQgb2YgYSBwcm9qZWN0IHRvIGJ1aWxkIGEgZml4ZWQtcG9pbnQgdmVjdG9yCitwcm9jZXNzb3IgaW4gY29sbGFib3JhdGlvbiB3aXRoIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYXQgQmVya2VsZXksCitvdmVyc2VlbiBieSBQcm9mcy4gTmVsc29uIE1vcmdhbiBhbmQgSm9obiBXYXdyenluZWsuICBNb3JlIGluZm9ybWF0aW9uCitpcyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd2ViIHBhZ2UgYGh0dHA6Ly9IVFRQLkNTLkJlcmtlbGV5LkVEVS9+amhhdXNlci8KK2FyaXRobWV0aWMvc29mdGZsb2F0Lmh0bWwnLgorCitUSElTIFNPRlRXQVJFIElTIERJU1RSSUJVVEVEIEFTIElTLCBGT1IgRlJFRS4gIEFsdGhvdWdoIHJlYXNvbmFibGUgZWZmb3J0CitoYXMgYmVlbiBtYWRlIHRvIGF2b2lkIGl0LCBUSElTIFNPRlRXQVJFIE1BWSBDT05UQUlOIEZBVUxUUyBUSEFUIFdJTEwgQVQKK1RJTUVTIFJFU1VMVCBJTiBJTkNPUlJFQ1QgQkVIQVZJT1IuICBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBJUyBSRVNUUklDVEVEIFRPCitQRVJTT05TIEFORCBPUkdBTklaQVRJT05TIFdITyBDQU4gQU5EIFdJTEwgVEFLRSBGVUxMIFJFU1BPTlNJQklMSVRZIEZPUiBBTlkKK0FORCBBTEwgTE9TU0VTLCBDT1NUUywgT1IgT1RIRVIgUFJPQkxFTVMgQVJJU0lORyBGUk9NIElUUyBVU0UuCisKK0Rlcml2YXRpdmUgd29ya3MgYXJlIGFjY2VwdGFibGUsIGV2ZW4gZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMsIHNvIGxvbmcgYXMKKygxKSB0aGV5IGluY2x1ZGUgcHJvbWluZW50IG5vdGljZSB0aGF0IHRoZSB3b3JrIGlzIGRlcml2YXRpdmUsIGFuZCAoMikgdGhleQoraW5jbHVkZSBwcm9taW5lbnQgbm90aWNlIGFraW4gdG8gdGhlc2UgdGhyZWUgcGFyYWdyYXBocyBmb3IgdGhvc2UgcGFydHMgb2YKK3RoaXMgY29kZSB0aGF0IGFyZSByZXRhaW5lZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NoaWZ0cyBgYScgcmlnaHQgYnkgdGhlIG51bWJlciBvZiBiaXRzIGdpdmVuIGluIGBjb3VudCcuICBJZiBhbnkgbm9uemVybworYml0cyBhcmUgc2hpZnRlZCBvZmYsIHRoZXkgYXJlIGBgamFtbWVkJycgaW50byB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IG9mCit0aGUgcmVzdWx0IGJ5IHNldHRpbmcgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCB0byAxLiAgVGhlIHZhbHVlIG9mIGBjb3VudCcKK2NhbiBiZSBhcmJpdHJhcmlseSBsYXJnZTsgaW4gcGFydGljdWxhciwgaWYgYGNvdW50JyBpcyBncmVhdGVyIHRoYW4gMzIsIHRoZQorcmVzdWx0IHdpbGwgYmUgZWl0aGVyIDAgb3IgMSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYGEnIGlzIHplcm8gb3Igbm9uemVyby4KK1RoZSByZXN1bHQgaXMgc3RvcmVkIGluIHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IGB6UHRyJy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitJTkxJTkUgdm9pZCBzaGlmdDMyUmlnaHRKYW1taW5nKCBiaXRzMzIgYSwgaW50MTYgY291bnQsIGJpdHMzMiAqelB0ciApCit7CisgICAgYml0czMyIHo7CisgICAgaWYgKCBjb3VudCA9PSAwICkgeworICAgICAgICB6ID0gYTsKKyAgICB9CisgICAgZWxzZSBpZiAoIGNvdW50IDwgMzIgKSB7CisgICAgICAgIHogPSAoIGE+PmNvdW50ICkgfCAoICggYTw8KCAoIC0gY291bnQgKSAmIDMxICkgKSAhPSAwICk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB6ID0gKCBhICE9IDAgKTsKKyAgICB9CisgICAgKnpQdHIgPSB6OworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU2hpZnRzIGBhJyByaWdodCBieSB0aGUgbnVtYmVyIG9mIGJpdHMgZ2l2ZW4gaW4gYGNvdW50Jy4gIElmIGFueSBub256ZXJvCitiaXRzIGFyZSBzaGlmdGVkIG9mZiwgdGhleSBhcmUgYGBqYW1tZWQnJyBpbnRvIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgb2YKK3RoZSByZXN1bHQgYnkgc2V0dGluZyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IHRvIDEuICBUaGUgdmFsdWUgb2YgYGNvdW50JworY2FuIGJlIGFyYml0cmFyaWx5IGxhcmdlOyBpbiBwYXJ0aWN1bGFyLCBpZiBgY291bnQnIGlzIGdyZWF0ZXIgdGhhbiA2NCwgdGhlCityZXN1bHQgd2lsbCBiZSBlaXRoZXIgMCBvciAxLCBkZXBlbmRpbmcgb24gd2hldGhlciBgYScgaXMgemVybyBvciBub256ZXJvLgorVGhlIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhlIGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkgYHpQdHInLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK0lOTElORSB2b2lkIHNoaWZ0NjRSaWdodEphbW1pbmcoIGJpdHM2NCBhLCBpbnQxNiBjb3VudCwgYml0czY0ICp6UHRyICkKK3sKKyAgICBiaXRzNjQgejsKKworIF9fYXNtX18oIkBzaGlmdDY0UmlnaHRKYW1taW5nIC0tIHN0YXJ0Iik7ICAgCisgICAgaWYgKCBjb3VudCA9PSAwICkgeworICAgICAgICB6ID0gYTsKKyAgICB9CisgICAgZWxzZSBpZiAoIGNvdW50IDwgNjQgKSB7CisgICAgICAgIHogPSAoIGE+PmNvdW50ICkgfCAoICggYTw8KCAoIC0gY291bnQgKSAmIDYzICkgKSAhPSAwICk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB6ID0gKCBhICE9IDAgKTsKKyAgICB9CisgX19hc21fXygiQHNoaWZ0NjRSaWdodEphbW1pbmcgLS0gZW5kIik7ICAgCisgICAgKnpQdHIgPSB6OworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU2hpZnRzIHRoZSAxMjgtYml0IHZhbHVlIGZvcm1lZCBieSBjb25jYXRlbmF0aW5nIGBhMCcgYW5kIGBhMScgcmlnaHQgYnkgNjQKK19wbHVzXyB0aGUgbnVtYmVyIG9mIGJpdHMgZ2l2ZW4gaW4gYGNvdW50Jy4gIFRoZSBzaGlmdGVkIHJlc3VsdCBpcyBhdCBtb3N0Cis2NCBub256ZXJvIGJpdHM7IHRoaXMgaXMgc3RvcmVkIGF0IHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IGB6MFB0cicuICBUaGUKK2JpdHMgc2hpZnRlZCBvZmYgZm9ybSBhIHNlY29uZCA2NC1iaXQgcmVzdWx0IGFzIGZvbGxvd3M6ICBUaGUgX2xhc3RfIGJpdAorc2hpZnRlZCBvZmYgaXMgdGhlIG1vc3Qtc2lnbmlmaWNhbnQgYml0IG9mIHRoZSBleHRyYSByZXN1bHQsIGFuZCB0aGUgb3RoZXIKKzYzIGJpdHMgb2YgdGhlIGV4dHJhIHJlc3VsdCBhcmUgYWxsIHplcm8gaWYgYW5kIG9ubHkgaWYgX2FsbF9idXRfdGhlX2xhc3RfCitiaXRzIHNoaWZ0ZWQgb2ZmIHdlcmUgYWxsIHplcm8uICBUaGlzIGV4dHJhIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhlIGxvY2F0aW9uCitwb2ludGVkIHRvIGJ5IGB6MVB0cicuICBUaGUgdmFsdWUgb2YgYGNvdW50JyBjYW4gYmUgYXJiaXRyYXJpbHkgbGFyZ2UuCisgICAgKFRoaXMgcm91dGluZSBtYWtlcyBtb3JlIHNlbnNlIGlmIGBhMCcgYW5kIGBhMScgYXJlIGNvbnNpZGVyZWQgdG8gZm9ybSBhCitmaXhlZC1wb2ludCB2YWx1ZSB3aXRoIGJpbmFyeSBwb2ludCBiZXR3ZWVuIGBhMCcgYW5kIGBhMScuICBUaGlzIGZpeGVkLXBvaW50Cit2YWx1ZSBpcyBzaGlmdGVkIHJpZ2h0IGJ5IHRoZSBudW1iZXIgb2YgYml0cyBnaXZlbiBpbiBgY291bnQnLCBhbmQgdGhlCitpbnRlZ2VyIHBhcnQgb2YgdGhlIHJlc3VsdCBpcyByZXR1cm5lZCBhdCB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieQorYHowUHRyJy4gIFRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIHJlc3VsdCBtYXkgYmUgc2xpZ2h0bHkgY29ycnVwdGVkIGFzCitkZXNjcmliZWQgYWJvdmUsIGFuZCBpcyByZXR1cm5lZCBhdCB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieSBgejFQdHInLikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitJTkxJTkUgdm9pZAorIHNoaWZ0NjRFeHRyYVJpZ2h0SmFtbWluZygKKyAgICAgYml0czY0IGEwLCBiaXRzNjQgYTEsIGludDE2IGNvdW50LCBiaXRzNjQgKnowUHRyLCBiaXRzNjQgKnoxUHRyICkKK3sKKyAgICBiaXRzNjQgejAsIHoxOworICAgIGludDggbmVnQ291bnQgPSAoIC0gY291bnQgKSAmIDYzOworCisgICAgaWYgKCBjb3VudCA9PSAwICkgeworICAgICAgICB6MSA9IGExOworICAgICAgICB6MCA9IGEwOworICAgIH0KKyAgICBlbHNlIGlmICggY291bnQgPCA2NCApIHsKKyAgICAgICAgejEgPSAoIGEwPDxuZWdDb3VudCApIHwgKCBhMSAhPSAwICk7CisgICAgICAgIHowID0gYTA+PmNvdW50OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCBjb3VudCA9PSA2NCApIHsKKyAgICAgICAgICAgIHoxID0gYTAgfCAoIGExICE9IDAgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHoxID0gKCAoIGEwIHwgYTEgKSAhPSAwICk7CisgICAgICAgIH0KKyAgICAgICAgejAgPSAwOworICAgIH0KKyAgICAqejFQdHIgPSB6MTsKKyAgICAqejBQdHIgPSB6MDsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU2hpZnRzIHRoZSAxMjgtYml0IHZhbHVlIGZvcm1lZCBieSBjb25jYXRlbmF0aW5nIGBhMCcgYW5kIGBhMScgcmlnaHQgYnkgdGhlCitudW1iZXIgb2YgYml0cyBnaXZlbiBpbiBgY291bnQnLiAgQW55IGJpdHMgc2hpZnRlZCBvZmYgYXJlIGxvc3QuICBUaGUgdmFsdWUKK29mIGBjb3VudCcgY2FuIGJlIGFyYml0cmFyaWx5IGxhcmdlOyBpbiBwYXJ0aWN1bGFyLCBpZiBgY291bnQnIGlzIGdyZWF0ZXIKK3RoYW4gMTI4LCB0aGUgcmVzdWx0IHdpbGwgYmUgMC4gIFRoZSByZXN1bHQgaXMgYnJva2VuIGludG8gdHdvIDY0LWJpdCBwaWVjZXMKK3doaWNoIGFyZSBzdG9yZWQgYXQgdGhlIGxvY2F0aW9ucyBwb2ludGVkIHRvIGJ5IGB6MFB0cicgYW5kIGB6MVB0cicuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworSU5MSU5FIHZvaWQKKyBzaGlmdDEyOFJpZ2h0KAorICAgICBiaXRzNjQgYTAsIGJpdHM2NCBhMSwgaW50MTYgY291bnQsIGJpdHM2NCAqejBQdHIsIGJpdHM2NCAqejFQdHIgKQoreworICAgIGJpdHM2NCB6MCwgejE7CisgICAgaW50OCBuZWdDb3VudCA9ICggLSBjb3VudCApICYgNjM7CisKKyAgICBpZiAoIGNvdW50ID09IDAgKSB7CisgICAgICAgIHoxID0gYTE7CisgICAgICAgIHowID0gYTA7CisgICAgfQorICAgIGVsc2UgaWYgKCBjb3VudCA8IDY0ICkgeworICAgICAgICB6MSA9ICggYTA8PG5lZ0NvdW50ICkgfCAoIGExPj5jb3VudCApOworICAgICAgICB6MCA9IGEwPj5jb3VudDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHoxID0gKCBjb3VudCA8IDY0ICkgPyAoIGEwPj4oIGNvdW50ICYgNjMgKSApIDogMDsKKyAgICAgICAgejAgPSAwOworICAgIH0KKyAgICAqejFQdHIgPSB6MTsKKyAgICAqejBQdHIgPSB6MDsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU2hpZnRzIHRoZSAxMjgtYml0IHZhbHVlIGZvcm1lZCBieSBjb25jYXRlbmF0aW5nIGBhMCcgYW5kIGBhMScgcmlnaHQgYnkgdGhlCitudW1iZXIgb2YgYml0cyBnaXZlbiBpbiBgY291bnQnLiAgSWYgYW55IG5vbnplcm8gYml0cyBhcmUgc2hpZnRlZCBvZmYsIHRoZXkKK2FyZSBgYGphbW1lZCcnIGludG8gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgcmVzdWx0IGJ5IHNldHRpbmcgdGhlCitsZWFzdCBzaWduaWZpY2FudCBiaXQgdG8gMS4gIFRoZSB2YWx1ZSBvZiBgY291bnQnIGNhbiBiZSBhcmJpdHJhcmlseSBsYXJnZTsKK2luIHBhcnRpY3VsYXIsIGlmIGBjb3VudCcgaXMgZ3JlYXRlciB0aGFuIDEyOCwgdGhlIHJlc3VsdCB3aWxsIGJlIGVpdGhlciAwCitvciAxLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgY29uY2F0ZW5hdGlvbiBvZiBgYTAnIGFuZCBgYTEnIGlzIHplcm8gb3IKK25vbnplcm8uICBUaGUgcmVzdWx0IGlzIGJyb2tlbiBpbnRvIHR3byA2NC1iaXQgcGllY2VzIHdoaWNoIGFyZSBzdG9yZWQgYXQKK3RoZSBsb2NhdGlvbnMgcG9pbnRlZCB0byBieSBgejBQdHInIGFuZCBgejFQdHInLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK0lOTElORSB2b2lkCisgc2hpZnQxMjhSaWdodEphbW1pbmcoCisgICAgIGJpdHM2NCBhMCwgYml0czY0IGExLCBpbnQxNiBjb3VudCwgYml0czY0ICp6MFB0ciwgYml0czY0ICp6MVB0ciApCit7CisgICAgYml0czY0IHowLCB6MTsKKyAgICBpbnQ4IG5lZ0NvdW50ID0gKCAtIGNvdW50ICkgJiA2MzsKKworICAgIGlmICggY291bnQgPT0gMCApIHsKKyAgICAgICAgejEgPSBhMTsKKyAgICAgICAgejAgPSBhMDsKKyAgICB9CisgICAgZWxzZSBpZiAoIGNvdW50IDwgNjQgKSB7CisgICAgICAgIHoxID0gKCBhMDw8bmVnQ291bnQgKSB8ICggYTE+PmNvdW50ICkgfCAoICggYTE8PG5lZ0NvdW50ICkgIT0gMCApOworICAgICAgICB6MCA9IGEwPj5jb3VudDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmICggY291bnQgPT0gNjQgKSB7CisgICAgICAgICAgICB6MSA9IGEwIHwgKCBhMSAhPSAwICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIGNvdW50IDwgMTI4ICkgeworICAgICAgICAgICAgejEgPSAoIGEwPj4oIGNvdW50ICYgNjMgKSApIHwgKCAoICggYTA8PG5lZ0NvdW50ICkgfCBhMSApICE9IDAgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHoxID0gKCAoIGEwIHwgYTEgKSAhPSAwICk7CisgICAgICAgIH0KKyAgICAgICAgejAgPSAwOworICAgIH0KKyAgICAqejFQdHIgPSB6MTsKKyAgICAqejBQdHIgPSB6MDsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU2hpZnRzIHRoZSAxOTItYml0IHZhbHVlIGZvcm1lZCBieSBjb25jYXRlbmF0aW5nIGBhMCcsIGBhMScsIGFuZCBgYTInIHJpZ2h0CitieSA2NCBfcGx1c18gdGhlIG51bWJlciBvZiBiaXRzIGdpdmVuIGluIGBjb3VudCcuICBUaGUgc2hpZnRlZCByZXN1bHQgaXMKK2F0IG1vc3QgMTI4IG5vbnplcm8gYml0czsgdGhlc2UgYXJlIGJyb2tlbiBpbnRvIHR3byA2NC1iaXQgcGllY2VzIHdoaWNoIGFyZQorc3RvcmVkIGF0IHRoZSBsb2NhdGlvbnMgcG9pbnRlZCB0byBieSBgejBQdHInIGFuZCBgejFQdHInLiAgVGhlIGJpdHMgc2hpZnRlZAorb2ZmIGZvcm0gYSB0aGlyZCA2NC1iaXQgcmVzdWx0IGFzIGZvbGxvd3M6ICBUaGUgX2xhc3RfIGJpdCBzaGlmdGVkIG9mZiBpcwordGhlIG1vc3Qtc2lnbmlmaWNhbnQgYml0IG9mIHRoZSBleHRyYSByZXN1bHQsIGFuZCB0aGUgb3RoZXIgNjMgYml0cyBvZiB0aGUKK2V4dHJhIHJlc3VsdCBhcmUgYWxsIHplcm8gaWYgYW5kIG9ubHkgaWYgX2FsbF9idXRfdGhlX2xhc3RfIGJpdHMgc2hpZnRlZCBvZmYKK3dlcmUgYWxsIHplcm8uICBUaGlzIGV4dHJhIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhlIGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkKK2B6MlB0cicuICBUaGUgdmFsdWUgb2YgYGNvdW50JyBjYW4gYmUgYXJiaXRyYXJpbHkgbGFyZ2UuCisgICAgKFRoaXMgcm91dGluZSBtYWtlcyBtb3JlIHNlbnNlIGlmIGBhMCcsIGBhMScsIGFuZCBgYTInIGFyZSBjb25zaWRlcmVkCit0byBmb3JtIGEgZml4ZWQtcG9pbnQgdmFsdWUgd2l0aCBiaW5hcnkgcG9pbnQgYmV0d2VlbiBgYTEnIGFuZCBgYTInLiAgVGhpcworZml4ZWQtcG9pbnQgdmFsdWUgaXMgc2hpZnRlZCByaWdodCBieSB0aGUgbnVtYmVyIG9mIGJpdHMgZ2l2ZW4gaW4gYGNvdW50JywKK2FuZCB0aGUgaW50ZWdlciBwYXJ0IG9mIHRoZSByZXN1bHQgaXMgcmV0dXJuZWQgYXQgdGhlIGxvY2F0aW9ucyBwb2ludGVkIHRvCitieSBgejBQdHInIGFuZCBgejFQdHInLiAgVGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgcmVzdWx0IG1heSBiZSBzbGlnaHRseQorY29ycnVwdGVkIGFzIGRlc2NyaWJlZCBhYm92ZSwgYW5kIGlzIHJldHVybmVkIGF0IHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5CitgejJQdHInLikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitJTkxJTkUgdm9pZAorIHNoaWZ0MTI4RXh0cmFSaWdodEphbW1pbmcoCisgICAgIGJpdHM2NCBhMCwKKyAgICAgYml0czY0IGExLAorICAgICBiaXRzNjQgYTIsCisgICAgIGludDE2IGNvdW50LAorICAgICBiaXRzNjQgKnowUHRyLAorICAgICBiaXRzNjQgKnoxUHRyLAorICAgICBiaXRzNjQgKnoyUHRyCisgKQoreworICAgIGJpdHM2NCB6MCwgejEsIHoyOworICAgIGludDggbmVnQ291bnQgPSAoIC0gY291bnQgKSAmIDYzOworCisgICAgaWYgKCBjb3VudCA9PSAwICkgeworICAgICAgICB6MiA9IGEyOworICAgICAgICB6MSA9IGExOworICAgICAgICB6MCA9IGEwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCBjb3VudCA8IDY0ICkgeworICAgICAgICAgICAgejIgPSBhMTw8bmVnQ291bnQ7CisgICAgICAgICAgICB6MSA9ICggYTA8PG5lZ0NvdW50ICkgfCAoIGExPj5jb3VudCApOworICAgICAgICAgICAgejAgPSBhMD4+Y291bnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoIGNvdW50ID09IDY0ICkgeworICAgICAgICAgICAgICAgIHoyID0gYTE7CisgICAgICAgICAgICAgICAgejEgPSBhMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGEyIHw9IGExOworICAgICAgICAgICAgICAgIGlmICggY291bnQgPCAxMjggKSB7CisgICAgICAgICAgICAgICAgICAgIHoyID0gYTA8PG5lZ0NvdW50OworICAgICAgICAgICAgICAgICAgICB6MSA9IGEwPj4oIGNvdW50ICYgNjMgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHoyID0gKCBjb3VudCA9PSAxMjggKSA/IGEwIDogKCBhMCAhPSAwICk7CisgICAgICAgICAgICAgICAgICAgIHoxID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB6MCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgejIgfD0gKCBhMiAhPSAwICk7CisgICAgfQorICAgICp6MlB0ciA9IHoyOworICAgICp6MVB0ciA9IHoxOworICAgICp6MFB0ciA9IHowOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTaGlmdHMgdGhlIDEyOC1iaXQgdmFsdWUgZm9ybWVkIGJ5IGNvbmNhdGVuYXRpbmcgYGEwJyBhbmQgYGExJyBsZWZ0IGJ5IHRoZQorbnVtYmVyIG9mIGJpdHMgZ2l2ZW4gaW4gYGNvdW50Jy4gIEFueSBiaXRzIHNoaWZ0ZWQgb2ZmIGFyZSBsb3N0LiAgVGhlIHZhbHVlCitvZiBgY291bnQnIG11c3QgYmUgbGVzcyB0aGFuIDY0LiAgVGhlIHJlc3VsdCBpcyBicm9rZW4gaW50byB0d28gNjQtYml0CitwaWVjZXMgd2hpY2ggYXJlIHN0b3JlZCBhdCB0aGUgbG9jYXRpb25zIHBvaW50ZWQgdG8gYnkgYHowUHRyJyBhbmQgYHoxUHRyJy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitJTkxJTkUgdm9pZAorIHNob3J0U2hpZnQxMjhMZWZ0KAorICAgICBiaXRzNjQgYTAsIGJpdHM2NCBhMSwgaW50MTYgY291bnQsIGJpdHM2NCAqejBQdHIsIGJpdHM2NCAqejFQdHIgKQoreworCisgICAgKnoxUHRyID0gYTE8PGNvdW50OworICAgICp6MFB0ciA9CisgICAgICAgICggY291bnQgPT0gMCApID8gYTAgOiAoIGEwPDxjb3VudCApIHwgKCBhMT4+KCAoIC0gY291bnQgKSAmIDYzICkgKTsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU2hpZnRzIHRoZSAxOTItYml0IHZhbHVlIGZvcm1lZCBieSBjb25jYXRlbmF0aW5nIGBhMCcsIGBhMScsIGFuZCBgYTInIGxlZnQKK2J5IHRoZSBudW1iZXIgb2YgYml0cyBnaXZlbiBpbiBgY291bnQnLiAgQW55IGJpdHMgc2hpZnRlZCBvZmYgYXJlIGxvc3QuCitUaGUgdmFsdWUgb2YgYGNvdW50JyBtdXN0IGJlIGxlc3MgdGhhbiA2NC4gIFRoZSByZXN1bHQgaXMgYnJva2VuIGludG8gdGhyZWUKKzY0LWJpdCBwaWVjZXMgd2hpY2ggYXJlIHN0b3JlZCBhdCB0aGUgbG9jYXRpb25zIHBvaW50ZWQgdG8gYnkgYHowUHRyJywKK2B6MVB0cicsIGFuZCBgejJQdHInLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK0lOTElORSB2b2lkCisgc2hvcnRTaGlmdDE5MkxlZnQoCisgICAgIGJpdHM2NCBhMCwKKyAgICAgYml0czY0IGExLAorICAgICBiaXRzNjQgYTIsCisgICAgIGludDE2IGNvdW50LAorICAgICBiaXRzNjQgKnowUHRyLAorICAgICBiaXRzNjQgKnoxUHRyLAorICAgICBiaXRzNjQgKnoyUHRyCisgKQoreworICAgIGJpdHM2NCB6MCwgejEsIHoyOworICAgIGludDggbmVnQ291bnQ7CisKKyAgICB6MiA9IGEyPDxjb3VudDsKKyAgICB6MSA9IGExPDxjb3VudDsKKyAgICB6MCA9IGEwPDxjb3VudDsKKyAgICBpZiAoIDAgPCBjb3VudCApIHsKKyAgICAgICAgbmVnQ291bnQgPSAoICggLSBjb3VudCApICYgNjMgKTsKKyAgICAgICAgejEgfD0gYTI+Pm5lZ0NvdW50OworICAgICAgICB6MCB8PSBhMT4+bmVnQ291bnQ7CisgICAgfQorICAgICp6MlB0ciA9IHoyOworICAgICp6MVB0ciA9IHoxOworICAgICp6MFB0ciA9IHowOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBZGRzIHRoZSAxMjgtYml0IHZhbHVlIGZvcm1lZCBieSBjb25jYXRlbmF0aW5nIGBhMCcgYW5kIGBhMScgdG8gdGhlIDEyOC1iaXQKK3ZhbHVlIGZvcm1lZCBieSBjb25jYXRlbmF0aW5nIGBiMCcgYW5kIGBiMScuICBBZGRpdGlvbiBpcyBtb2R1bG8gMl4xMjgsIHNvCithbnkgY2Fycnkgb3V0IGlzIGxvc3QuICBUaGUgcmVzdWx0IGlzIGJyb2tlbiBpbnRvIHR3byA2NC1iaXQgcGllY2VzIHdoaWNoCithcmUgc3RvcmVkIGF0IHRoZSBsb2NhdGlvbnMgcG9pbnRlZCB0byBieSBgejBQdHInIGFuZCBgejFQdHInLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK0lOTElORSB2b2lkCisgYWRkMTI4KAorICAgICBiaXRzNjQgYTAsIGJpdHM2NCBhMSwgYml0czY0IGIwLCBiaXRzNjQgYjEsIGJpdHM2NCAqejBQdHIsIGJpdHM2NCAqejFQdHIgKQoreworICAgIGJpdHM2NCB6MTsKKworICAgIHoxID0gYTEgKyBiMTsKKyAgICAqejFQdHIgPSB6MTsKKyAgICAqejBQdHIgPSBhMCArIGIwICsgKCB6MSA8IGExICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FkZHMgdGhlIDE5Mi1iaXQgdmFsdWUgZm9ybWVkIGJ5IGNvbmNhdGVuYXRpbmcgYGEwJywgYGExJywgYW5kIGBhMicgdG8gdGhlCisxOTItYml0IHZhbHVlIGZvcm1lZCBieSBjb25jYXRlbmF0aW5nIGBiMCcsIGBiMScsIGFuZCBgYjInLiAgQWRkaXRpb24gaXMKK21vZHVsbyAyXjE5Miwgc28gYW55IGNhcnJ5IG91dCBpcyBsb3N0LiAgVGhlIHJlc3VsdCBpcyBicm9rZW4gaW50byB0aHJlZQorNjQtYml0IHBpZWNlcyB3aGljaCBhcmUgc3RvcmVkIGF0IHRoZSBsb2NhdGlvbnMgcG9pbnRlZCB0byBieSBgejBQdHInLAorYHoxUHRyJywgYW5kIGB6MlB0cicuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworSU5MSU5FIHZvaWQKKyBhZGQxOTIoCisgICAgIGJpdHM2NCBhMCwKKyAgICAgYml0czY0IGExLAorICAgICBiaXRzNjQgYTIsCisgICAgIGJpdHM2NCBiMCwKKyAgICAgYml0czY0IGIxLAorICAgICBiaXRzNjQgYjIsCisgICAgIGJpdHM2NCAqejBQdHIsCisgICAgIGJpdHM2NCAqejFQdHIsCisgICAgIGJpdHM2NCAqejJQdHIKKyApCit7CisgICAgYml0czY0IHowLCB6MSwgejI7CisgICAgaW50OCBjYXJyeTAsIGNhcnJ5MTsKKworICAgIHoyID0gYTIgKyBiMjsKKyAgICBjYXJyeTEgPSAoIHoyIDwgYTIgKTsKKyAgICB6MSA9IGExICsgYjE7CisgICAgY2FycnkwID0gKCB6MSA8IGExICk7CisgICAgejAgPSBhMCArIGIwOworICAgIHoxICs9IGNhcnJ5MTsKKyAgICB6MCArPSAoIHoxIDwgY2FycnkxICk7CisgICAgejAgKz0gY2FycnkwOworICAgICp6MlB0ciA9IHoyOworICAgICp6MVB0ciA9IHoxOworICAgICp6MFB0ciA9IHowOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTdWJ0cmFjdHMgdGhlIDEyOC1iaXQgdmFsdWUgZm9ybWVkIGJ5IGNvbmNhdGVuYXRpbmcgYGIwJyBhbmQgYGIxJyBmcm9tIHRoZQorMTI4LWJpdCB2YWx1ZSBmb3JtZWQgYnkgY29uY2F0ZW5hdGluZyBgYTAnIGFuZCBgYTEnLiAgU3VidHJhY3Rpb24gaXMgbW9kdWxvCisyXjEyOCwgc28gYW55IGJvcnJvdyBvdXQgKGNhcnJ5IG91dCkgaXMgbG9zdC4gIFRoZSByZXN1bHQgaXMgYnJva2VuIGludG8gdHdvCis2NC1iaXQgcGllY2VzIHdoaWNoIGFyZSBzdG9yZWQgYXQgdGhlIGxvY2F0aW9ucyBwb2ludGVkIHRvIGJ5IGB6MFB0cicgYW5kCitgejFQdHInLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK0lOTElORSB2b2lkCisgc3ViMTI4KAorICAgICBiaXRzNjQgYTAsIGJpdHM2NCBhMSwgYml0czY0IGIwLCBiaXRzNjQgYjEsIGJpdHM2NCAqejBQdHIsIGJpdHM2NCAqejFQdHIgKQoreworCisgICAgKnoxUHRyID0gYTEgLSBiMTsKKyAgICAqejBQdHIgPSBhMCAtIGIwIC0gKCBhMSA8IGIxICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N1YnRyYWN0cyB0aGUgMTkyLWJpdCB2YWx1ZSBmb3JtZWQgYnkgY29uY2F0ZW5hdGluZyBgYjAnLCBgYjEnLCBhbmQgYGIyJworZnJvbSB0aGUgMTkyLWJpdCB2YWx1ZSBmb3JtZWQgYnkgY29uY2F0ZW5hdGluZyBgYTAnLCBgYTEnLCBhbmQgYGEyJy4KK1N1YnRyYWN0aW9uIGlzIG1vZHVsbyAyXjE5Miwgc28gYW55IGJvcnJvdyBvdXQgKGNhcnJ5IG91dCkgaXMgbG9zdC4gIFRoZQorcmVzdWx0IGlzIGJyb2tlbiBpbnRvIHRocmVlIDY0LWJpdCBwaWVjZXMgd2hpY2ggYXJlIHN0b3JlZCBhdCB0aGUgbG9jYXRpb25zCitwb2ludGVkIHRvIGJ5IGB6MFB0cicsIGB6MVB0cicsIGFuZCBgejJQdHInLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK0lOTElORSB2b2lkCisgc3ViMTkyKAorICAgICBiaXRzNjQgYTAsCisgICAgIGJpdHM2NCBhMSwKKyAgICAgYml0czY0IGEyLAorICAgICBiaXRzNjQgYjAsCisgICAgIGJpdHM2NCBiMSwKKyAgICAgYml0czY0IGIyLAorICAgICBiaXRzNjQgKnowUHRyLAorICAgICBiaXRzNjQgKnoxUHRyLAorICAgICBiaXRzNjQgKnoyUHRyCisgKQoreworICAgIGJpdHM2NCB6MCwgejEsIHoyOworICAgIGludDggYm9ycm93MCwgYm9ycm93MTsKKworICAgIHoyID0gYTIgLSBiMjsKKyAgICBib3Jyb3cxID0gKCBhMiA8IGIyICk7CisgICAgejEgPSBhMSAtIGIxOworICAgIGJvcnJvdzAgPSAoIGExIDwgYjEgKTsKKyAgICB6MCA9IGEwIC0gYjA7CisgICAgejAgLT0gKCB6MSA8IGJvcnJvdzEgKTsKKyAgICB6MSAtPSBib3Jyb3cxOworICAgIHowIC09IGJvcnJvdzA7CisgICAgKnoyUHRyID0gejI7CisgICAgKnoxUHRyID0gejE7CisgICAgKnowUHRyID0gejA7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK011bHRpcGxpZXMgYGEnIGJ5IGBiJyB0byBvYnRhaW4gYSAxMjgtYml0IHByb2R1Y3QuICBUaGUgcHJvZHVjdCBpcyBicm9rZW4KK2ludG8gdHdvIDY0LWJpdCBwaWVjZXMgd2hpY2ggYXJlIHN0b3JlZCBhdCB0aGUgbG9jYXRpb25zIHBvaW50ZWQgdG8gYnkKK2B6MFB0cicgYW5kIGB6MVB0cicuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworSU5MSU5FIHZvaWQgbXVsNjRUbzEyOCggYml0czY0IGEsIGJpdHM2NCBiLCBiaXRzNjQgKnowUHRyLCBiaXRzNjQgKnoxUHRyICkKK3sKKyAgICBiaXRzMzIgYUhpZ2gsIGFMb3csIGJIaWdoLCBiTG93OworICAgIGJpdHM2NCB6MCwgek1pZGRsZUEsIHpNaWRkbGVCLCB6MTsKKworICAgIGFMb3cgPSBhOworICAgIGFIaWdoID0gYT4+MzI7CisgICAgYkxvdyA9IGI7CisgICAgYkhpZ2ggPSBiPj4zMjsKKyAgICB6MSA9ICggKGJpdHM2NCkgYUxvdyApICogYkxvdzsKKyAgICB6TWlkZGxlQSA9ICggKGJpdHM2NCkgYUxvdyApICogYkhpZ2g7CisgICAgek1pZGRsZUIgPSAoIChiaXRzNjQpIGFIaWdoICkgKiBiTG93OworICAgIHowID0gKCAoYml0czY0KSBhSGlnaCApICogYkhpZ2g7CisgICAgek1pZGRsZUEgKz0gek1pZGRsZUI7CisgICAgejAgKz0gKCAoIChiaXRzNjQpICggek1pZGRsZUEgPCB6TWlkZGxlQiApICk8PDMyICkgKyAoIHpNaWRkbGVBPj4zMiApOworICAgIHpNaWRkbGVBIDw8PSAzMjsKKyAgICB6MSArPSB6TWlkZGxlQTsKKyAgICB6MCArPSAoIHoxIDwgek1pZGRsZUEgKTsKKyAgICAqejFQdHIgPSB6MTsKKyAgICAqejBQdHIgPSB6MDsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTXVsdGlwbGllcyB0aGUgMTI4LWJpdCB2YWx1ZSBmb3JtZWQgYnkgY29uY2F0ZW5hdGluZyBgYTAnIGFuZCBgYTEnIGJ5IGBiJyB0bworb2J0YWluIGEgMTkyLWJpdCBwcm9kdWN0LiAgVGhlIHByb2R1Y3QgaXMgYnJva2VuIGludG8gdGhyZWUgNjQtYml0IHBpZWNlcword2hpY2ggYXJlIHN0b3JlZCBhdCB0aGUgbG9jYXRpb25zIHBvaW50ZWQgdG8gYnkgYHowUHRyJywgYHoxUHRyJywgYW5kCitgejJQdHInLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK0lOTElORSB2b2lkCisgbXVsMTI4Qnk2NFRvMTkyKAorICAgICBiaXRzNjQgYTAsCisgICAgIGJpdHM2NCBhMSwKKyAgICAgYml0czY0IGIsCisgICAgIGJpdHM2NCAqejBQdHIsCisgICAgIGJpdHM2NCAqejFQdHIsCisgICAgIGJpdHM2NCAqejJQdHIKKyApCit7CisgICAgYml0czY0IHowLCB6MSwgejIsIG1vcmUxOworCisgICAgbXVsNjRUbzEyOCggYTEsIGIsICZ6MSwgJnoyICk7CisgICAgbXVsNjRUbzEyOCggYTAsIGIsICZ6MCwgJm1vcmUxICk7CisgICAgYWRkMTI4KCB6MCwgbW9yZTEsIDAsIHoxLCAmejAsICZ6MSApOworICAgICp6MlB0ciA9IHoyOworICAgICp6MVB0ciA9IHoxOworICAgICp6MFB0ciA9IHowOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNdWx0aXBsaWVzIHRoZSAxMjgtYml0IHZhbHVlIGZvcm1lZCBieSBjb25jYXRlbmF0aW5nIGBhMCcgYW5kIGBhMScgdG8gdGhlCisxMjgtYml0IHZhbHVlIGZvcm1lZCBieSBjb25jYXRlbmF0aW5nIGBiMCcgYW5kIGBiMScgdG8gb2J0YWluIGEgMjU2LWJpdAorcHJvZHVjdC4gIFRoZSBwcm9kdWN0IGlzIGJyb2tlbiBpbnRvIGZvdXIgNjQtYml0IHBpZWNlcyB3aGljaCBhcmUgc3RvcmVkIGF0Cit0aGUgbG9jYXRpb25zIHBvaW50ZWQgdG8gYnkgYHowUHRyJywgYHoxUHRyJywgYHoyUHRyJywgYW5kIGB6M1B0cicuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworSU5MSU5FIHZvaWQKKyBtdWwxMjhUbzI1NigKKyAgICAgYml0czY0IGEwLAorICAgICBiaXRzNjQgYTEsCisgICAgIGJpdHM2NCBiMCwKKyAgICAgYml0czY0IGIxLAorICAgICBiaXRzNjQgKnowUHRyLAorICAgICBiaXRzNjQgKnoxUHRyLAorICAgICBiaXRzNjQgKnoyUHRyLAorICAgICBiaXRzNjQgKnozUHRyCisgKQoreworICAgIGJpdHM2NCB6MCwgejEsIHoyLCB6MzsKKyAgICBiaXRzNjQgbW9yZTEsIG1vcmUyOworCisgICAgbXVsNjRUbzEyOCggYTEsIGIxLCAmejIsICZ6MyApOworICAgIG11bDY0VG8xMjgoIGExLCBiMCwgJnoxLCAmbW9yZTIgKTsKKyAgICBhZGQxMjgoIHoxLCBtb3JlMiwgMCwgejIsICZ6MSwgJnoyICk7CisgICAgbXVsNjRUbzEyOCggYTAsIGIwLCAmejAsICZtb3JlMSApOworICAgIGFkZDEyOCggejAsIG1vcmUxLCAwLCB6MSwgJnowLCAmejEgKTsKKyAgICBtdWw2NFRvMTI4KCBhMCwgYjEsICZtb3JlMSwgJm1vcmUyICk7CisgICAgYWRkMTI4KCBtb3JlMSwgbW9yZTIsIDAsIHoyLCAmbW9yZTEsICZ6MiApOworICAgIGFkZDEyOCggejAsIHoxLCAwLCBtb3JlMSwgJnowLCAmejEgKTsKKyAgICAqejNQdHIgPSB6MzsKKyAgICAqejJQdHIgPSB6MjsKKyAgICAqejFQdHIgPSB6MTsKKyAgICAqejBQdHIgPSB6MDsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyBhbiBhcHByb3hpbWF0aW9uIHRvIHRoZSA2NC1iaXQgaW50ZWdlciBxdW90aWVudCBvYnRhaW5lZCBieSBkaXZpZGluZworYGInIGludG8gdGhlIDEyOC1iaXQgdmFsdWUgZm9ybWVkIGJ5IGNvbmNhdGVuYXRpbmcgYGEwJyBhbmQgYGExJy4gIFRoZQorZGl2aXNvciBgYicgbXVzdCBiZSBhdCBsZWFzdCAyXjYzLiAgSWYgcSBpcyB0aGUgZXhhY3QgcXVvdGllbnQgdHJ1bmNhdGVkCit0b3dhcmQgemVybywgdGhlIGFwcHJveGltYXRpb24gcmV0dXJuZWQgbGllcyBiZXR3ZWVuIHEgYW5kIHEgKyAyIGluY2x1c2l2ZS4KK0lmIHRoZSBleGFjdCBxdW90aWVudCBxIGlzIGxhcmdlciB0aGFuIDY0IGJpdHMsIHRoZSBtYXhpbXVtIHBvc2l0aXZlIDY0LWJpdAordW5zaWduZWQgaW50ZWdlciBpcyByZXR1cm5lZC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitzdGF0aWMgYml0czY0IGVzdGltYXRlRGl2MTI4VG82NCggYml0czY0IGEwLCBiaXRzNjQgYTEsIGJpdHM2NCBiICkKK3sKKyAgICBiaXRzNjQgYjAsIGIxOworICAgIGJpdHM2NCByZW0wLCByZW0xLCB0ZXJtMCwgdGVybTE7CisgICAgYml0czY0IHo7CisgICAgaWYgKCBiIDw9IGEwICkgcmV0dXJuIExJVDY0KCAweEZGRkZGRkZGRkZGRkZGRkYgKTsKKyAgICBiMCA9IGI+PjMyOworICAgIHogPSAoIGIwPDwzMiA8PSBhMCApID8gTElUNjQoIDB4RkZGRkZGRkYwMDAwMDAwMCApIDogKCBhMCAvIGIwICk8PDMyOworICAgIG11bDY0VG8xMjgoIGIsIHosICZ0ZXJtMCwgJnRlcm0xICk7CisgICAgc3ViMTI4KCBhMCwgYTEsIHRlcm0wLCB0ZXJtMSwgJnJlbTAsICZyZW0xICk7CisgICAgd2hpbGUgKCAoIChzYml0czY0KSByZW0wICkgPCAwICkgeworICAgICAgICB6IC09IExJVDY0KCAweDEwMDAwMDAwMCApOworICAgICAgICBiMSA9IGI8PDMyOworICAgICAgICBhZGQxMjgoIHJlbTAsIHJlbTEsIGIwLCBiMSwgJnJlbTAsICZyZW0xICk7CisgICAgfQorICAgIHJlbTAgPSAoIHJlbTA8PDMyICkgfCAoIHJlbTE+PjMyICk7CisgICAgeiB8PSAoIGIwPDwzMiA8PSByZW0wICkgPyAweEZGRkZGRkZGIDogcmVtMCAvIGIwOworICAgIHJldHVybiB6OworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIGFuIGFwcHJveGltYXRpb24gdG8gdGhlIHNxdWFyZSByb290IG9mIHRoZSAzMi1iaXQgc2lnbmlmaWNhbmQgZ2l2ZW4KK2J5IGBhJy4gIENvbnNpZGVyZWQgYXMgYW4gaW50ZWdlciwgYGEnIG11c3QgYmUgYXQgbGVhc3QgMl4zMS4gIElmIGJpdCAwIG9mCitgYUV4cCcgKHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQpIGlzIDEsIHRoZSBpbnRlZ2VyIHJldHVybmVkIGFwcHJveGltYXRlcworMl4zMSpzcXJ0KGBhJy8yXjMxKSwgd2hlcmUgYGEnIGlzIGNvbnNpZGVyZWQgYW4gaW50ZWdlci4gIElmIGJpdCAwIG9mIGBhRXhwJworaXMgMCwgdGhlIGludGVnZXIgcmV0dXJuZWQgYXBwcm94aW1hdGVzIDJeMzEqc3FydChgYScvMl4zMCkuICBJbiBlaXRoZXIKK2Nhc2UsIHRoZSBhcHByb3hpbWF0aW9uIHJldHVybmVkIGxpZXMgc3RyaWN0bHkgd2l0aGluICsvLTIgb2YgdGhlIGV4YWN0Cit2YWx1ZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitzdGF0aWMgYml0czMyIGVzdGltYXRlU3FydDMyKCBpbnQxNiBhRXhwLCBiaXRzMzIgYSApCit7CisgICAgc3RhdGljIGNvbnN0IGJpdHMxNiBzcXJ0T2RkQWRqdXN0bWVudHNbXSA9IHsKKyAgICAgICAgMHgwMDA0LCAweDAwMjIsIDB4MDA1RCwgMHgwMEIxLCAweDAxMUQsIDB4MDE5RiwgMHgwMjM2LCAweDAyRTAsCisgICAgICAgIDB4MDM5QywgMHgwNDY4LCAweDA1NDUsIDB4MDYzMSwgMHgwNzJCLCAweDA4MzIsIDB4MDk0NiwgMHgwQTY3CisgICAgfTsKKyAgICBzdGF0aWMgY29uc3QgYml0czE2IHNxcnRFdmVuQWRqdXN0bWVudHNbXSA9IHsKKyAgICAgICAgMHgwQTJELCAweDA4QUYsIDB4MDc1QSwgMHgwNjI5LCAweDA1MUEsIDB4MDQyOSwgMHgwMzU2LCAweDAyOUUsCisgICAgICAgIDB4MDIwMCwgMHgwMTc5LCAweDAxMDksIDB4MDBBRiwgMHgwMDY4LCAweDAwMzQsIDB4MDAxMiwgMHgwMDAyCisgICAgfTsKKyAgICBpbnQ4IGluZGV4OworICAgIGJpdHMzMiB6OworCisgICAgaW5kZXggPSAoIGE+PjI3ICkgJiAxNTsKKyAgICBpZiAoIGFFeHAgJiAxICkgeworICAgICAgICB6ID0gMHg0MDAwICsgKCBhPj4xNyApIC0gc3FydE9kZEFkanVzdG1lbnRzWyBpbmRleCBdOworICAgICAgICB6ID0gKCAoIGEgLyB6ICk8PDE0ICkgKyAoIHo8PDE1ICk7CisgICAgICAgIGEgPj49IDE7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB6ID0gMHg4MDAwICsgKCBhPj4xNyApIC0gc3FydEV2ZW5BZGp1c3RtZW50c1sgaW5kZXggXTsKKyAgICAgICAgeiA9IGEgLyB6ICsgejsKKyAgICAgICAgeiA9ICggMHgyMDAwMCA8PSB6ICkgPyAweEZGRkY4MDAwIDogKCB6PDwxNSApOworICAgICAgICBpZiAoIHogPD0gYSApIHJldHVybiAoYml0czMyKSAoICggKHNiaXRzMzIpIGEgKT4+MSApOworICAgIH0KKyAgICByZXR1cm4gKCAoYml0czMyKSAoICggKCAoYml0czY0KSBhICk8PDMxICkgLyB6ICkgKSArICggej4+MSApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIHRoZSBudW1iZXIgb2YgbGVhZGluZyAwIGJpdHMgYmVmb3JlIHRoZSBtb3N0LXNpZ25pZmljYW50IDEgYml0CitvZiBgYScuICBJZiBgYScgaXMgemVybywgMzIgaXMgcmV0dXJuZWQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworc3RhdGljIGludDggY291bnRMZWFkaW5nWmVyb3MzMiggYml0czMyIGEgKQoreworICAgIHN0YXRpYyBjb25zdCBpbnQ4IGNvdW50TGVhZGluZ1plcm9zSGlnaFtdID0geworICAgICAgICA4LCA3LCA2LCA2LCA1LCA1LCA1LCA1LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LAorICAgICAgICAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLAorICAgICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLAorICAgICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLAorICAgICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAorICAgICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAorICAgICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAorICAgICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAorICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCisgICAgfTsKKyAgICBpbnQ4IHNoaWZ0Q291bnQ7CisKKyAgICBzaGlmdENvdW50ID0gMDsKKyAgICBpZiAoIGEgPCAweDEwMDAwICkgeworICAgICAgICBzaGlmdENvdW50ICs9IDE2OworICAgICAgICBhIDw8PSAxNjsKKyAgICB9CisgICAgaWYgKCBhIDwgMHgxMDAwMDAwICkgeworICAgICAgICBzaGlmdENvdW50ICs9IDg7CisgICAgICAgIGEgPDw9IDg7CisgICAgfQorICAgIHNoaWZ0Q291bnQgKz0gY291bnRMZWFkaW5nWmVyb3NIaWdoWyBhPj4yNCBdOworICAgIHJldHVybiBzaGlmdENvdW50OworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIHRoZSBudW1iZXIgb2YgbGVhZGluZyAwIGJpdHMgYmVmb3JlIHRoZSBtb3N0LXNpZ25pZmljYW50IDEgYml0CitvZiBgYScuICBJZiBgYScgaXMgemVybywgNjQgaXMgcmV0dXJuZWQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworc3RhdGljIGludDggY291bnRMZWFkaW5nWmVyb3M2NCggYml0czY0IGEgKQoreworICAgIGludDggc2hpZnRDb3VudDsKKworICAgIHNoaWZ0Q291bnQgPSAwOworICAgIGlmICggYSA8ICggKGJpdHM2NCkgMSApPDwzMiApIHsKKyAgICAgICAgc2hpZnRDb3VudCArPSAzMjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGEgPj49IDMyOworICAgIH0KKyAgICBzaGlmdENvdW50ICs9IGNvdW50TGVhZGluZ1plcm9zMzIoIGEgKTsKKyAgICByZXR1cm4gc2hpZnRDb3VudDsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyAxIGlmIHRoZSAxMjgtYml0IHZhbHVlIGZvcm1lZCBieSBjb25jYXRlbmF0aW5nIGBhMCcgYW5kIGBhMScKK2lzIGVxdWFsIHRvIHRoZSAxMjgtYml0IHZhbHVlIGZvcm1lZCBieSBjb25jYXRlbmF0aW5nIGBiMCcgYW5kIGBiMScuCitPdGhlcndpc2UsIHJldHVybnMgMC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitJTkxJTkUgZmxhZyBlcTEyOCggYml0czY0IGEwLCBiaXRzNjQgYTEsIGJpdHM2NCBiMCwgYml0czY0IGIxICkKK3sKKworICAgIHJldHVybiAoIGEwID09IGIwICkgJiYgKCBhMSA9PSBiMSApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIDEgaWYgdGhlIDEyOC1iaXQgdmFsdWUgZm9ybWVkIGJ5IGNvbmNhdGVuYXRpbmcgYGEwJyBhbmQgYGExJyBpcyBsZXNzCit0aGFuIG9yIGVxdWFsIHRvIHRoZSAxMjgtYml0IHZhbHVlIGZvcm1lZCBieSBjb25jYXRlbmF0aW5nIGBiMCcgYW5kIGBiMScuCitPdGhlcndpc2UsIHJldHVybnMgMC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitJTkxJTkUgZmxhZyBsZTEyOCggYml0czY0IGEwLCBiaXRzNjQgYTEsIGJpdHM2NCBiMCwgYml0czY0IGIxICkKK3sKKworICAgIHJldHVybiAoIGEwIDwgYjAgKSB8fCAoICggYTAgPT0gYjAgKSAmJiAoIGExIDw9IGIxICkgKTsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyAxIGlmIHRoZSAxMjgtYml0IHZhbHVlIGZvcm1lZCBieSBjb25jYXRlbmF0aW5nIGBhMCcgYW5kIGBhMScgaXMgbGVzcwordGhhbiB0aGUgMTI4LWJpdCB2YWx1ZSBmb3JtZWQgYnkgY29uY2F0ZW5hdGluZyBgYjAnIGFuZCBgYjEnLiAgT3RoZXJ3aXNlLAorcmV0dXJucyAwLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK0lOTElORSBmbGFnIGx0MTI4KCBiaXRzNjQgYTAsIGJpdHM2NCBhMSwgYml0czY0IGIwLCBiaXRzNjQgYjEgKQoreworCisgICAgcmV0dXJuICggYTAgPCBiMCApIHx8ICggKCBhMCA9PSBiMCApICYmICggYTEgPCBiMSApICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgMSBpZiB0aGUgMTI4LWJpdCB2YWx1ZSBmb3JtZWQgYnkgY29uY2F0ZW5hdGluZyBgYTAnIGFuZCBgYTEnIGlzCitub3QgZXF1YWwgdG8gdGhlIDEyOC1iaXQgdmFsdWUgZm9ybWVkIGJ5IGNvbmNhdGVuYXRpbmcgYGIwJyBhbmQgYGIxJy4KK090aGVyd2lzZSwgcmV0dXJucyAwLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK0lOTElORSBmbGFnIG5lMTI4KCBiaXRzNjQgYTAsIGJpdHM2NCBhMSwgYml0czY0IGIwLCBiaXRzNjQgYjEgKQoreworCisgICAgcmV0dXJuICggYTAgIT0gYjAgKSB8fCAoIGExICE9IGIxICk7CisKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbndmcGUvc29mdGZsb2F0LXNwZWNpYWxpemUgYi9hcmNoL2FybS9ud2ZwZS9zb2Z0ZmxvYXQtc3BlY2lhbGl6ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2Y0MDkxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbndmcGUvc29mdGZsb2F0LXNwZWNpYWxpemUKQEAgLTAsMCArMSwzNjYgQEAKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBDIHNvdXJjZSBmcmFnbWVudCBpcyBwYXJ0IG9mIHRoZSBTb2Z0RmxvYXQgSUVDL0lFRUUgRmxvYXRpbmctcG9pbnQKK0FyaXRobWV0aWMgUGFja2FnZSwgUmVsZWFzZSAyLgorCitXcml0dGVuIGJ5IEpvaG4gUi4gSGF1c2VyLiAgVGhpcyB3b3JrIHdhcyBtYWRlIHBvc3NpYmxlIGluIHBhcnQgYnkgdGhlCitJbnRlcm5hdGlvbmFsIENvbXB1dGVyIFNjaWVuY2UgSW5zdGl0dXRlLCBsb2NhdGVkIGF0IFN1aXRlIDYwMCwgMTk0NyBDZW50ZXIKK1N0cmVldCwgQmVya2VsZXksIENhbGlmb3JuaWEgOTQ3MDQuICBGdW5kaW5nIHdhcyBwYXJ0aWFsbHkgcHJvdmlkZWQgYnkgdGhlCitOYXRpb25hbCBTY2llbmNlIEZvdW5kYXRpb24gdW5kZXIgZ3JhbnQgTUlQLTkzMTE5ODAuICBUaGUgb3JpZ2luYWwgdmVyc2lvbgorb2YgdGhpcyBjb2RlIHdhcyB3cml0dGVuIGFzIHBhcnQgb2YgYSBwcm9qZWN0IHRvIGJ1aWxkIGEgZml4ZWQtcG9pbnQgdmVjdG9yCitwcm9jZXNzb3IgaW4gY29sbGFib3JhdGlvbiB3aXRoIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYXQgQmVya2VsZXksCitvdmVyc2VlbiBieSBQcm9mcy4gTmVsc29uIE1vcmdhbiBhbmQgSm9obiBXYXdyenluZWsuICBNb3JlIGluZm9ybWF0aW9uCitpcyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgV2ViIHBhZ2UgYGh0dHA6Ly9IVFRQLkNTLkJlcmtlbGV5LkVEVS9+amhhdXNlci8KK2FyaXRobWV0aWMvc29mdGZsb2F0Lmh0bWwnLgorCitUSElTIFNPRlRXQVJFIElTIERJU1RSSUJVVEVEIEFTIElTLCBGT1IgRlJFRS4gIEFsdGhvdWdoIHJlYXNvbmFibGUgZWZmb3J0CitoYXMgYmVlbiBtYWRlIHRvIGF2b2lkIGl0LCBUSElTIFNPRlRXQVJFIE1BWSBDT05UQUlOIEZBVUxUUyBUSEFUIFdJTEwgQVQKK1RJTUVTIFJFU1VMVCBJTiBJTkNPUlJFQ1QgQkVIQVZJT1IuICBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBJUyBSRVNUUklDVEVEIFRPCitQRVJTT05TIEFORCBPUkdBTklaQVRJT05TIFdITyBDQU4gQU5EIFdJTEwgVEFLRSBGVUxMIFJFU1BPTlNJQklMSVRZIEZPUiBBTlkKK0FORCBBTEwgTE9TU0VTLCBDT1NUUywgT1IgT1RIRVIgUFJPQkxFTVMgQVJJU0lORyBGUk9NIElUUyBVU0UuCisKK0Rlcml2YXRpdmUgd29ya3MgYXJlIGFjY2VwdGFibGUsIGV2ZW4gZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMsIHNvIGxvbmcgYXMKKygxKSB0aGV5IGluY2x1ZGUgcHJvbWluZW50IG5vdGljZSB0aGF0IHRoZSB3b3JrIGlzIGRlcml2YXRpdmUsIGFuZCAoMikgdGhleQoraW5jbHVkZSBwcm9taW5lbnQgbm90aWNlIGFraW4gdG8gdGhlc2UgdGhyZWUgcGFyYWdyYXBocyBmb3IgdGhvc2UgcGFydHMgb2YKK3RoaXMgY29kZSB0aGF0IGFyZSByZXRhaW5lZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1VuZGVyZmxvdyB0aW5pbmVzcy1kZXRlY3Rpb24gbW9kZSwgc3RhdGljYWxseSBpbml0aWFsaXplZCB0byBkZWZhdWx0IHZhbHVlLgorKFRoZSBkZWNsYXJhdGlvbiBpbiBgc29mdGZsb2F0LmgnIG11c3QgbWF0Y2ggdGhlIGBpbnQ4JyB0eXBlIGhlcmUuKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2ludDggZmxvYXRfZGV0ZWN0X3RpbmluZXNzID0gZmxvYXRfdGluaW5lc3NfYWZ0ZXJfcm91bmRpbmc7CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSYWlzZXMgdGhlIGV4Y2VwdGlvbnMgc3BlY2lmaWVkIGJ5IGBmbGFncycuICBGbG9hdGluZy1wb2ludCB0cmFwcyBjYW4gYmUKK2RlZmluZWQgaGVyZSBpZiBkZXNpcmVkLiAgSXQgaXMgY3VycmVudGx5IG5vdCBwb3NzaWJsZSBmb3Igc3VjaCBhIHRyYXAgdG8KK3N1YnN0aXR1dGUgYSByZXN1bHQgdmFsdWUuICBJZiB0cmFwcyBhcmUgbm90IGltcGxlbWVudGVkLCB0aGlzIHJvdXRpbmUKK3Nob3VsZCBiZSBzaW1wbHkgYGZsb2F0X2V4Y2VwdGlvbl9mbGFncyB8PSBmbGFnczsnLgorCitTY290dEI6ICBOb3ZlbWJlciA0LCAxOTk4CitNb3ZlZCB0aGlzIGZ1bmN0aW9uIG91dCBvZiBzb2Z0ZmxvYXQtc3BlY2lhbGl6ZSBpbnRvIGZwbW9kdWxlLmMuCitUaGlzIGVmZmVjdGl2ZWx5IGlzb2xhdGVzIGFsbCB0aGUgY2hhbmdlcyByZXF1aXJlZCBmb3IgaW50ZWdyYXRpbmcgd2l0aCB0aGUKK0xpbnV4IGtlcm5lbCBpbnRvIGZwbW9kdWxlLmMuICBQb3J0aW5nIHRvIE5ldEJTRCBzaG91bGQgb25seSByZXF1aXJlIG1vZGlmeWluZworZnBtb2R1bGUuYyB0byBpbnRlZ3JhdGUgd2l0aCB0aGUgTmV0QlNEIGtlcm5lbCAoSSBob3BlISkuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIGZsb2F0X3JhaXNlKCBpbnQ4IGZsYWdzICkKK3sKKyAgICBmbG9hdF9leGNlcHRpb25fZmxhZ3MgfD0gZmxhZ3M7Cit9CisqLworCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW50ZXJuYWwgY2Fub25pY2FsIE5hTiBmb3JtYXQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGZsYWcgc2lnbjsKKyAgICBiaXRzNjQgaGlnaCwgbG93OworfSBjb21tb25OYU5UOworCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIHBhdHRlcm4gZm9yIGEgZGVmYXVsdCBnZW5lcmF0ZWQgc2luZ2xlLXByZWNpc2lvbiBOYU4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworI2RlZmluZSBmbG9hdDMyX2RlZmF1bHRfbmFuIDB4RkZGRkZGRkYKKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgMSBpZiB0aGUgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSBgYScgaXMgYSBOYU47CitvdGhlcndpc2UgcmV0dXJucyAwLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2ZsYWcgZmxvYXQzMl9pc19uYW4oIGZsb2F0MzIgYSApCit7CisKKyAgICByZXR1cm4gKCAweEZGMDAwMDAwIDwgKGJpdHMzMikgKCBhPDwxICkgKTsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyAxIGlmIHRoZSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIGBhJyBpcyBhIHNpZ25hbGluZworTmFOOyBvdGhlcndpc2UgcmV0dXJucyAwLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2ZsYWcgZmxvYXQzMl9pc19zaWduYWxpbmdfbmFuKCBmbG9hdDMyIGEgKQoreworCisgICAgcmV0dXJuICggKCAoIGE+PjIyICkgJiAweDFGRiApID09IDB4MUZFICkgJiYgKCBhICYgMHgwMDNGRkZGRiApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIHRoZSByZXN1bHQgb2YgY29udmVydGluZyB0aGUgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBOYU4KK2BhJyB0byB0aGUgY2Fub25pY2FsIE5hTiBmb3JtYXQuICBJZiBgYScgaXMgYSBzaWduYWxpbmcgTmFOLCB0aGUgaW52YWxpZAorZXhjZXB0aW9uIGlzIHJhaXNlZC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitzdGF0aWMgY29tbW9uTmFOVCBmbG9hdDMyVG9Db21tb25OYU4oIGZsb2F0MzIgYSApCit7CisgICAgY29tbW9uTmFOVCB6OworCisgICAgaWYgKCBmbG9hdDMyX2lzX3NpZ25hbGluZ19uYW4oIGEgKSApIGZsb2F0X3JhaXNlKCBmbG9hdF9mbGFnX2ludmFsaWQgKTsKKyAgICB6LnNpZ24gPSBhPj4zMTsKKyAgICB6LmxvdyA9IDA7CisgICAgei5oaWdoID0gKCAoYml0czY0KSBhICk8PDQxOworICAgIHJldHVybiB6OworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIHRoZSByZXN1bHQgb2YgY29udmVydGluZyB0aGUgY2Fub25pY2FsIE5hTiBgYScgdG8gdGhlIHNpbmdsZS0KK3ByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBmb3JtYXQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworc3RhdGljIGZsb2F0MzIgY29tbW9uTmFOVG9GbG9hdDMyKCBjb21tb25OYU5UIGEgKQoreworCisgICAgcmV0dXJuICggKCAoYml0czMyKSBhLnNpZ24gKTw8MzEgKSB8IDB4N0ZDMDAwMDAgfCAoIGEuaGlnaD4+NDEgKTsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGFrZXMgdHdvIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzIGBhJyBhbmQgYGInLCBvbmUgb2Ygd2hpY2gKK2lzIGEgTmFOLCBhbmQgcmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgTmFOIHJlc3VsdC4gIElmIGVpdGhlciBgYScgb3IgYGInIGlzIGEKK3NpZ25hbGluZyBOYU4sIHRoZSBpbnZhbGlkIGV4Y2VwdGlvbiBpcyByYWlzZWQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworc3RhdGljIGZsb2F0MzIgcHJvcGFnYXRlRmxvYXQzMk5hTiggZmxvYXQzMiBhLCBmbG9hdDMyIGIgKQoreworICAgIGZsYWcgYUlzTmFOLCBhSXNTaWduYWxpbmdOYU4sIGJJc05hTiwgYklzU2lnbmFsaW5nTmFOOworCisgICAgYUlzTmFOID0gZmxvYXQzMl9pc19uYW4oIGEgKTsKKyAgICBhSXNTaWduYWxpbmdOYU4gPSBmbG9hdDMyX2lzX3NpZ25hbGluZ19uYW4oIGEgKTsKKyAgICBiSXNOYU4gPSBmbG9hdDMyX2lzX25hbiggYiApOworICAgIGJJc1NpZ25hbGluZ05hTiA9IGZsb2F0MzJfaXNfc2lnbmFsaW5nX25hbiggYiApOworICAgIGEgfD0gMHgwMDQwMDAwMDsKKyAgICBiIHw9IDB4MDA0MDAwMDA7CisgICAgaWYgKCBhSXNTaWduYWxpbmdOYU4gfCBiSXNTaWduYWxpbmdOYU4gKSBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19pbnZhbGlkICk7CisgICAgaWYgKCBhSXNOYU4gKSB7CisgICAgICAgIHJldHVybiAoIGFJc1NpZ25hbGluZ05hTiAmIGJJc05hTiApID8gYiA6IGE7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4gYjsKKyAgICB9CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBwYXR0ZXJuIGZvciBhIGRlZmF1bHQgZ2VuZXJhdGVkIGRvdWJsZS1wcmVjaXNpb24gTmFOLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKyNkZWZpbmUgZmxvYXQ2NF9kZWZhdWx0X25hbiBMSVQ2NCggMHhGRkZGRkZGRkZGRkZGRkZGICkKKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgMSBpZiB0aGUgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSBgYScgaXMgYSBOYU47CitvdGhlcndpc2UgcmV0dXJucyAwLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2ZsYWcgZmxvYXQ2NF9pc19uYW4oIGZsb2F0NjQgYSApCit7CisKKyAgICByZXR1cm4gKCBMSVQ2NCggMHhGRkUwMDAwMDAwMDAwMDAwICkgPCAoYml0czY0KSAoIGE8PDEgKSApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIDEgaWYgdGhlIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgYGEnIGlzIGEgc2lnbmFsaW5nCitOYU47IG90aGVyd2lzZSByZXR1cm5zIDAuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworZmxhZyBmbG9hdDY0X2lzX3NpZ25hbGluZ19uYW4oIGZsb2F0NjQgYSApCit7CisKKyAgICByZXR1cm4KKyAgICAgICAgICAgKCAoICggYT4+NTEgKSAmIDB4RkZGICkgPT0gMHhGRkUgKQorICAgICAgICAmJiAoIGEgJiBMSVQ2NCggMHgwMDA3RkZGRkZGRkZGRkZGICkgKTsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgdGhlIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgTmFOCitgYScgdG8gdGhlIGNhbm9uaWNhbCBOYU4gZm9ybWF0LiAgSWYgYGEnIGlzIGEgc2lnbmFsaW5nIE5hTiwgdGhlIGludmFsaWQKK2V4Y2VwdGlvbiBpcyByYWlzZWQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworc3RhdGljIGNvbW1vbk5hTlQgZmxvYXQ2NFRvQ29tbW9uTmFOKCBmbG9hdDY0IGEgKQoreworICAgIGNvbW1vbk5hTlQgejsKKworICAgIGlmICggZmxvYXQ2NF9pc19zaWduYWxpbmdfbmFuKCBhICkgKSBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19pbnZhbGlkICk7CisgICAgei5zaWduID0gYT4+NjM7CisgICAgei5sb3cgPSAwOworICAgIHouaGlnaCA9IGE8PDEyOworICAgIHJldHVybiB6OworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIHRoZSByZXN1bHQgb2YgY29udmVydGluZyB0aGUgY2Fub25pY2FsIE5hTiBgYScgdG8gdGhlIGRvdWJsZS0KK3ByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBmb3JtYXQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworc3RhdGljIGZsb2F0NjQgY29tbW9uTmFOVG9GbG9hdDY0KCBjb21tb25OYU5UIGEgKQoreworCisgICAgcmV0dXJuCisgICAgICAgICAgKCAoIChiaXRzNjQpIGEuc2lnbiApPDw2MyApCisgICAgICAgIHwgTElUNjQoIDB4N0ZGODAwMDAwMDAwMDAwMCApCisgICAgICAgIHwgKCBhLmhpZ2g+PjEyICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1Rha2VzIHR3byBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlcyBgYScgYW5kIGBiJywgb25lIG9mIHdoaWNoCitpcyBhIE5hTiwgYW5kIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlIE5hTiByZXN1bHQuICBJZiBlaXRoZXIgYGEnIG9yIGBiJyBpcyBhCitzaWduYWxpbmcgTmFOLCB0aGUgaW52YWxpZCBleGNlcHRpb24gaXMgcmFpc2VkLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK3N0YXRpYyBmbG9hdDY0IHByb3BhZ2F0ZUZsb2F0NjROYU4oIGZsb2F0NjQgYSwgZmxvYXQ2NCBiICkKK3sKKyAgICBmbGFnIGFJc05hTiwgYUlzU2lnbmFsaW5nTmFOLCBiSXNOYU4sIGJJc1NpZ25hbGluZ05hTjsKKworICAgIGFJc05hTiA9IGZsb2F0NjRfaXNfbmFuKCBhICk7CisgICAgYUlzU2lnbmFsaW5nTmFOID0gZmxvYXQ2NF9pc19zaWduYWxpbmdfbmFuKCBhICk7CisgICAgYklzTmFOID0gZmxvYXQ2NF9pc19uYW4oIGIgKTsKKyAgICBiSXNTaWduYWxpbmdOYU4gPSBmbG9hdDY0X2lzX3NpZ25hbGluZ19uYW4oIGIgKTsKKyAgICBhIHw9IExJVDY0KCAweDAwMDgwMDAwMDAwMDAwMDAgKTsKKyAgICBiIHw9IExJVDY0KCAweDAwMDgwMDAwMDAwMDAwMDAgKTsKKyAgICBpZiAoIGFJc1NpZ25hbGluZ05hTiB8IGJJc1NpZ25hbGluZ05hTiApIGZsb2F0X3JhaXNlKCBmbG9hdF9mbGFnX2ludmFsaWQgKTsKKyAgICBpZiAoIGFJc05hTiApIHsKKyAgICAgICAgcmV0dXJuICggYUlzU2lnbmFsaW5nTmFOICYgYklzTmFOICkgPyBiIDogYTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybiBiOworICAgIH0KKworfQorCisjaWZkZWYgRkxPQVRYODAKKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBwYXR0ZXJuIGZvciBhIGRlZmF1bHQgZ2VuZXJhdGVkIGV4dGVuZGVkIGRvdWJsZS1wcmVjaXNpb24gTmFOLiAgVGhlCitgaGlnaCcgYW5kIGBsb3cnIHZhbHVlcyBob2xkIHRoZSBtb3N0LSBhbmQgbGVhc3Qtc2lnbmlmaWNhbnQgYml0cywKK3Jlc3BlY3RpdmVseS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisjZGVmaW5lIGZsb2F0eDgwX2RlZmF1bHRfbmFuX2hpZ2ggMHhGRkZGCisjZGVmaW5lIGZsb2F0eDgwX2RlZmF1bHRfbmFuX2xvdyAgTElUNjQoIDB4RkZGRkZGRkZGRkZGRkZGRiApCisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIDEgaWYgdGhlIGV4dGVuZGVkIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgYGEnIGlzIGEKK05hTjsgb3RoZXJ3aXNlIHJldHVybnMgMC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbGFnIGZsb2F0eDgwX2lzX25hbiggZmxvYXR4ODAgYSApCit7CisKKyAgICByZXR1cm4gKCAoIGEuaGlnaCAmIDB4N0ZGRiApID09IDB4N0ZGRiApICYmIChiaXRzNjQpICggYS5sb3c8PDEgKTsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyAxIGlmIHRoZSBleHRlbmRlZCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIGBhJyBpcyBhCitzaWduYWxpbmcgTmFOOyBvdGhlcndpc2UgcmV0dXJucyAwLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2ZsYWcgZmxvYXR4ODBfaXNfc2lnbmFsaW5nX25hbiggZmxvYXR4ODAgYSApCit7CisgICAgLy9yZWdpc3RlciBpbnQgbHI7CisgICAgYml0czY0IGFMb3c7CisKKyAgICAvL19fYXNtX18oIm1vdiAlMCwgbHIiIDogOiAiZyIgKGxyKSk7CisgICAgLy9mcF9wcmludGsoImZsb2F0eDgwX2lzX3NpZ25hbGxpbmdfbmFuKCkgY2FsbGVkIGZyb20gMHglMDh4XG4iLGxyKTsKKyAgICBhTG93ID0gYS5sb3cgJiB+IExJVDY0KCAweDQwMDAwMDAwMDAwMDAwMDAgKTsKKyAgICByZXR1cm4KKyAgICAgICAgICAgKCAoIGEuaGlnaCAmIDB4N0ZGRiApID09IDB4N0ZGRiApCisgICAgICAgICYmIChiaXRzNjQpICggYUxvdzw8MSApCisgICAgICAgICYmICggYS5sb3cgPT0gYUxvdyApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIHRoZSByZXN1bHQgb2YgY29udmVydGluZyB0aGUgZXh0ZW5kZWQgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy0KK3BvaW50IE5hTiBgYScgdG8gdGhlIGNhbm9uaWNhbCBOYU4gZm9ybWF0LiAgSWYgYGEnIGlzIGEgc2lnbmFsaW5nIE5hTiwgdGhlCitpbnZhbGlkIGV4Y2VwdGlvbiBpcyByYWlzZWQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworc3RhdGljIGNvbW1vbk5hTlQgZmxvYXR4ODBUb0NvbW1vbk5hTiggZmxvYXR4ODAgYSApCit7CisgICAgY29tbW9uTmFOVCB6OworCisgICAgaWYgKCBmbG9hdHg4MF9pc19zaWduYWxpbmdfbmFuKCBhICkgKSBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19pbnZhbGlkICk7CisgICAgei5zaWduID0gYS5oaWdoPj4xNTsKKyAgICB6LmxvdyA9IDA7CisgICAgei5oaWdoID0gYS5sb3c8PDE7CisgICAgcmV0dXJuIHo7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoZSBjYW5vbmljYWwgTmFOIGBhJyB0byB0aGUgZXh0ZW5kZWQKK2RvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK3N0YXRpYyBmbG9hdHg4MCBjb21tb25OYU5Ub0Zsb2F0eDgwKCBjb21tb25OYU5UIGEgKQoreworICAgIGZsb2F0eDgwIHo7CisKKyAgICB6LmxvdyA9IExJVDY0KCAweEMwMDAwMDAwMDAwMDAwMDAgKSB8ICggYS5oaWdoPj4xICk7CisgICAgei5oaWdoID0gKCAoIChiaXRzMTYpIGEuc2lnbiApPDwxNSApIHwgMHg3RkZGOworICAgIHJldHVybiB6OworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUYWtlcyB0d28gZXh0ZW5kZWQgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgYGEnIGFuZCBgYicsIG9uZQorb2Ygd2hpY2ggaXMgYSBOYU4sIGFuZCByZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBOYU4gcmVzdWx0LiAgSWYgZWl0aGVyIGBhJyBvcgorYGInIGlzIGEgc2lnbmFsaW5nIE5hTiwgdGhlIGludmFsaWQgZXhjZXB0aW9uIGlzIHJhaXNlZC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitzdGF0aWMgZmxvYXR4ODAgcHJvcGFnYXRlRmxvYXR4ODBOYU4oIGZsb2F0eDgwIGEsIGZsb2F0eDgwIGIgKQoreworICAgIGZsYWcgYUlzTmFOLCBhSXNTaWduYWxpbmdOYU4sIGJJc05hTiwgYklzU2lnbmFsaW5nTmFOOworCisgICAgYUlzTmFOID0gZmxvYXR4ODBfaXNfbmFuKCBhICk7CisgICAgYUlzU2lnbmFsaW5nTmFOID0gZmxvYXR4ODBfaXNfc2lnbmFsaW5nX25hbiggYSApOworICAgIGJJc05hTiA9IGZsb2F0eDgwX2lzX25hbiggYiApOworICAgIGJJc1NpZ25hbGluZ05hTiA9IGZsb2F0eDgwX2lzX3NpZ25hbGluZ19uYW4oIGIgKTsKKyAgICBhLmxvdyB8PSBMSVQ2NCggMHhDMDAwMDAwMDAwMDAwMDAwICk7CisgICAgYi5sb3cgfD0gTElUNjQoIDB4QzAwMDAwMDAwMDAwMDAwMCApOworICAgIGlmICggYUlzU2lnbmFsaW5nTmFOIHwgYklzU2lnbmFsaW5nTmFOICkgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfaW52YWxpZCApOworICAgIGlmICggYUlzTmFOICkgeworICAgICAgICByZXR1cm4gKCBhSXNTaWduYWxpbmdOYU4gJiBiSXNOYU4gKSA/IGIgOiBhOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGI7CisgICAgfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbndmcGUvc29mdGZsb2F0LmMgYi9hcmNoL2FybS9ud2ZwZS9zb2Z0ZmxvYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDc0M2FlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbndmcGUvc29mdGZsb2F0LmMKQEAgLTAsMCArMSwzNDQzIEBACisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIEMgc291cmNlIGZpbGUgaXMgcGFydCBvZiB0aGUgU29mdEZsb2F0IElFQy9JRUVFIEZsb2F0aW5nLXBvaW50CitBcml0aG1ldGljIFBhY2thZ2UsIFJlbGVhc2UgMi4KKworV3JpdHRlbiBieSBKb2huIFIuIEhhdXNlci4gIFRoaXMgd29yayB3YXMgbWFkZSBwb3NzaWJsZSBpbiBwYXJ0IGJ5IHRoZQorSW50ZXJuYXRpb25hbCBDb21wdXRlciBTY2llbmNlIEluc3RpdHV0ZSwgbG9jYXRlZCBhdCBTdWl0ZSA2MDAsIDE5NDcgQ2VudGVyCitTdHJlZXQsIEJlcmtlbGV5LCBDYWxpZm9ybmlhIDk0NzA0LiAgRnVuZGluZyB3YXMgcGFydGlhbGx5IHByb3ZpZGVkIGJ5IHRoZQorTmF0aW9uYWwgU2NpZW5jZSBGb3VuZGF0aW9uIHVuZGVyIGdyYW50IE1JUC05MzExOTgwLiAgVGhlIG9yaWdpbmFsIHZlcnNpb24KK29mIHRoaXMgY29kZSB3YXMgd3JpdHRlbiBhcyBwYXJ0IG9mIGEgcHJvamVjdCB0byBidWlsZCBhIGZpeGVkLXBvaW50IHZlY3RvcgorcHJvY2Vzc29yIGluIGNvbGxhYm9yYXRpb24gd2l0aCB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGF0IEJlcmtlbGV5LAorb3ZlcnNlZW4gYnkgUHJvZnMuIE5lbHNvbiBNb3JnYW4gYW5kIEpvaG4gV2F3cnp5bmVrLiAgTW9yZSBpbmZvcm1hdGlvbgoraXMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdlYiBwYWdlIGBodHRwOi8vSFRUUC5DUy5CZXJrZWxleS5FRFUvfmpoYXVzZXIvCithcml0aG1ldGljL3NvZnRmbG9hdC5odG1sJy4KKworVEhJUyBTT0ZUV0FSRSBJUyBESVNUUklCVVRFRCBBUyBJUywgRk9SIEZSRUUuICBBbHRob3VnaCByZWFzb25hYmxlIGVmZm9ydAoraGFzIGJlZW4gbWFkZSB0byBhdm9pZCBpdCwgVEhJUyBTT0ZUV0FSRSBNQVkgQ09OVEFJTiBGQVVMVFMgVEhBVCBXSUxMIEFUCitUSU1FUyBSRVNVTFQgSU4gSU5DT1JSRUNUIEJFSEFWSU9SLiAgVVNFIE9GIFRISVMgU09GVFdBUkUgSVMgUkVTVFJJQ1RFRCBUTworUEVSU09OUyBBTkQgT1JHQU5JWkFUSU9OUyBXSE8gQ0FOIEFORCBXSUxMIFRBS0UgRlVMTCBSRVNQT05TSUJJTElUWSBGT1IgQU5ZCitBTkQgQUxMIExPU1NFUywgQ09TVFMsIE9SIE9USEVSIFBST0JMRU1TIEFSSVNJTkcgRlJPTSBJVFMgVVNFLgorCitEZXJpdmF0aXZlIHdvcmtzIGFyZSBhY2NlcHRhYmxlLCBldmVuIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLCBzbyBsb25nIGFzCisoMSkgdGhleSBpbmNsdWRlIHByb21pbmVudCBub3RpY2UgdGhhdCB0aGUgd29yayBpcyBkZXJpdmF0aXZlLCBhbmQgKDIpIHRoZXkKK2luY2x1ZGUgcHJvbWluZW50IG5vdGljZSBha2luIHRvIHRoZXNlIHRocmVlIHBhcmFncmFwaHMgZm9yIHRob3NlIHBhcnRzIG9mCit0aGlzIGNvZGUgdGhhdCBhcmUgcmV0YWluZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisKKyNpbmNsdWRlICJmcGExMS5oIgorLy8jaW5jbHVkZSAibWlsaWV1LmgiCisvLyNpbmNsdWRlICJzb2Z0ZmxvYXQuaCIKKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0Zsb2F0aW5nLXBvaW50IHJvdW5kaW5nIG1vZGUsIGV4dGVuZGVkIGRvdWJsZS1wcmVjaXNpb24gcm91bmRpbmcgcHJlY2lzaW9uLAorYW5kIGV4Y2VwdGlvbiBmbGFncy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitpbnQ4IGZsb2F0X3JvdW5kaW5nX21vZGUgPSBmbG9hdF9yb3VuZF9uZWFyZXN0X2V2ZW47CitpbnQ4IGZsb2F0eDgwX3JvdW5kaW5nX3ByZWNpc2lvbiA9IDgwOworaW50OCBmbG9hdF9leGNlcHRpb25fZmxhZ3M7CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQcmltaXRpdmUgYXJpdGhtZXRpYyBmdW5jdGlvbnMsIGluY2x1ZGluZyBtdWx0aS13b3JkIGFyaXRobWV0aWMsIGFuZAorZGl2aXNpb24gYW5kIHNxdWFyZSByb290IGFwcHJveGltYXRpb25zLiAgKENhbiBiZSBzcGVjaWFsaXplZCB0byB0YXJnZXQgaWYKK2Rlc2lyZWQuKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKyNpbmNsdWRlICJzb2Z0ZmxvYXQtbWFjcm9zIgorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRnVuY3Rpb25zIGFuZCBkZWZpbml0aW9ucyB0byBkZXRlcm1pbmU6ICAoMSkgd2hldGhlciB0aW5pbmVzcyBmb3IgdW5kZXJmbG93CitpcyBkZXRlY3RlZCBiZWZvcmUgb3IgYWZ0ZXIgcm91bmRpbmcgYnkgZGVmYXVsdCwgKDIpIHdoYXQgKGlmIGFueXRoaW5nKQoraGFwcGVucyB3aGVuIGV4Y2VwdGlvbnMgYXJlIHJhaXNlZCwgKDMpIGhvdyBzaWduYWxpbmcgTmFOcyBhcmUgZGlzdGluZ3Vpc2hlZAorZnJvbSBxdWlldCBOYU5zLCAoNCkgdGhlIGRlZmF1bHQgZ2VuZXJhdGVkIHF1aWV0IE5hTnMsIGFuZCAoNSkgaG93IE5hTnMKK2FyZSBwcm9wYWdhdGVkIGZyb20gZnVuY3Rpb24gaW5wdXRzIHRvIG91dHB1dC4gIFRoZXNlIGRldGFpbHMgYXJlIHRhcmdldC0KK3NwZWNpZmljLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKyNpbmNsdWRlICJzb2Z0ZmxvYXQtc3BlY2lhbGl6ZSIKKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1Rha2VzIGEgNjQtYml0IGZpeGVkLXBvaW50IHZhbHVlIGBhYnNaJyB3aXRoIGJpbmFyeSBwb2ludCBiZXR3ZWVuIGJpdHMgNgorYW5kIDcsIGFuZCByZXR1cm5zIHRoZSBwcm9wZXJseSByb3VuZGVkIDMyLWJpdCBpbnRlZ2VyIGNvcnJlc3BvbmRpbmcgdG8gdGhlCitpbnB1dC4gIElmIGB6U2lnbicgaXMgbm9uemVybywgdGhlIGlucHV0IGlzIG5lZ2F0ZWQgYmVmb3JlIGJlaW5nIGNvbnZlcnRlZAordG8gYW4gaW50ZWdlci4gIEJpdCA2MyBvZiBgYWJzWicgbXVzdCBiZSB6ZXJvLiAgT3JkaW5hcmlseSwgdGhlIGZpeGVkLXBvaW50CitpbnB1dCBpcyBzaW1wbHkgcm91bmRlZCB0byBhbiBpbnRlZ2VyLCB3aXRoIHRoZSBpbmV4YWN0IGV4Y2VwdGlvbiByYWlzZWQgaWYKK3RoZSBpbnB1dCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgZXhhY3RseSBhcyBhbiBpbnRlZ2VyLiAgSWYgdGhlIGZpeGVkLXBvaW50CitpbnB1dCBpcyB0b28gbGFyZ2UsIGhvd2V2ZXIsIHRoZSBpbnZhbGlkIGV4Y2VwdGlvbiBpcyByYWlzZWQgYW5kIHRoZSBsYXJnZXN0Citwb3NpdGl2ZSBvciBuZWdhdGl2ZSBpbnRlZ2VyIGlzIHJldHVybmVkLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK3N0YXRpYyBpbnQzMiByb3VuZEFuZFBhY2tJbnQzMiggZmxhZyB6U2lnbiwgYml0czY0IGFic1ogKQoreworICAgIGludDggcm91bmRpbmdNb2RlOworICAgIGZsYWcgcm91bmROZWFyZXN0RXZlbjsKKyAgICBpbnQ4IHJvdW5kSW5jcmVtZW50LCByb3VuZEJpdHM7CisgICAgaW50MzIgejsKKworICAgIHJvdW5kaW5nTW9kZSA9IGZsb2F0X3JvdW5kaW5nX21vZGU7CisgICAgcm91bmROZWFyZXN0RXZlbiA9ICggcm91bmRpbmdNb2RlID09IGZsb2F0X3JvdW5kX25lYXJlc3RfZXZlbiApOworICAgIHJvdW5kSW5jcmVtZW50ID0gMHg0MDsKKyAgICBpZiAoICEgcm91bmROZWFyZXN0RXZlbiApIHsKKyAgICAgICAgaWYgKCByb3VuZGluZ01vZGUgPT0gZmxvYXRfcm91bmRfdG9femVybyApIHsKKyAgICAgICAgICAgIHJvdW5kSW5jcmVtZW50ID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJvdW5kSW5jcmVtZW50ID0gMHg3RjsKKyAgICAgICAgICAgIGlmICggelNpZ24gKSB7CisgICAgICAgICAgICAgICAgaWYgKCByb3VuZGluZ01vZGUgPT0gZmxvYXRfcm91bmRfdXAgKSByb3VuZEluY3JlbWVudCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIHJvdW5kaW5nTW9kZSA9PSBmbG9hdF9yb3VuZF9kb3duICkgcm91bmRJbmNyZW1lbnQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJvdW5kQml0cyA9IGFic1ogJiAweDdGOworICAgIGFic1ogPSAoIGFic1ogKyByb3VuZEluY3JlbWVudCApPj43OworICAgIGFic1ogJj0gfiAoICggKCByb3VuZEJpdHMgXiAweDQwICkgPT0gMCApICYgcm91bmROZWFyZXN0RXZlbiApOworICAgIHogPSBhYnNaOworICAgIGlmICggelNpZ24gKSB6ID0gLSB6OworICAgIGlmICggKCBhYnNaPj4zMiApIHx8ICggeiAmJiAoICggeiA8IDAgKSBeIHpTaWduICkgKSApIHsKKyAgICAgICAgZmxvYXRfZXhjZXB0aW9uX2ZsYWdzIHw9IGZsb2F0X2ZsYWdfaW52YWxpZDsKKyAgICAgICAgcmV0dXJuIHpTaWduID8gMHg4MDAwMDAwMCA6IDB4N0ZGRkZGRkY7CisgICAgfQorICAgIGlmICggcm91bmRCaXRzICkgZmxvYXRfZXhjZXB0aW9uX2ZsYWdzIHw9IGZsb2F0X2ZsYWdfaW5leGFjdDsKKyAgICByZXR1cm4gejsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyB0aGUgZnJhY3Rpb24gYml0cyBvZiB0aGUgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSBgYScuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworSU5MSU5FIGJpdHMzMiBleHRyYWN0RmxvYXQzMkZyYWMoIGZsb2F0MzIgYSApCit7CisKKyAgICByZXR1cm4gYSAmIDB4MDA3RkZGRkY7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIGV4cG9uZW50IGJpdHMgb2YgdGhlIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgYGEnLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK0lOTElORSBpbnQxNiBleHRyYWN0RmxvYXQzMkV4cCggZmxvYXQzMiBhICkKK3sKKworICAgIHJldHVybiAoIGE+PjIzICkgJiAweEZGOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIHRoZSBzaWduIGJpdCBvZiB0aGUgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSBgYScuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworI2lmIDAJLyogaW4gc29mdGZsb2F0LmggKi8KK0lOTElORSBmbGFnIGV4dHJhY3RGbG9hdDMyU2lnbiggZmxvYXQzMiBhICkKK3sKKworICAgIHJldHVybiBhPj4zMTsKKworfQorI2VuZGlmCisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOb3JtYWxpemVzIHRoZSBzdWJub3JtYWwgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSByZXByZXNlbnRlZAorYnkgdGhlIGRlbm9ybWFsaXplZCBzaWduaWZpY2FuZCBgYVNpZycuICBUaGUgbm9ybWFsaXplZCBleHBvbmVudCBhbmQKK3NpZ25pZmljYW5kIGFyZSBzdG9yZWQgYXQgdGhlIGxvY2F0aW9ucyBwb2ludGVkIHRvIGJ5IGB6RXhwUHRyJyBhbmQKK2B6U2lnUHRyJywgcmVzcGVjdGl2ZWx5LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK3N0YXRpYyB2b2lkCisgbm9ybWFsaXplRmxvYXQzMlN1Ym5vcm1hbCggYml0czMyIGFTaWcsIGludDE2ICp6RXhwUHRyLCBiaXRzMzIgKnpTaWdQdHIgKQoreworICAgIGludDggc2hpZnRDb3VudDsKKworICAgIHNoaWZ0Q291bnQgPSBjb3VudExlYWRpbmdaZXJvczMyKCBhU2lnICkgLSA4OworICAgICp6U2lnUHRyID0gYVNpZzw8c2hpZnRDb3VudDsKKyAgICAqekV4cFB0ciA9IDEgLSBzaGlmdENvdW50OworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQYWNrcyB0aGUgc2lnbiBgelNpZ24nLCBleHBvbmVudCBgekV4cCcsIGFuZCBzaWduaWZpY2FuZCBgelNpZycgaW50byBhCitzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlLCByZXR1cm5pbmcgdGhlIHJlc3VsdC4gIEFmdGVyIGJlaW5nCitzaGlmdGVkIGludG8gdGhlIHByb3BlciBwb3NpdGlvbnMsIHRoZSB0aHJlZSBmaWVsZHMgYXJlIHNpbXBseSBhZGRlZAordG9nZXRoZXIgdG8gZm9ybSB0aGUgcmVzdWx0LiAgVGhpcyBtZWFucyB0aGF0IGFueSBpbnRlZ2VyIHBvcnRpb24gb2YgYHpTaWcnCit3aWxsIGJlIGFkZGVkIGludG8gdGhlIGV4cG9uZW50LiAgU2luY2UgYSBwcm9wZXJseSBub3JtYWxpemVkIHNpZ25pZmljYW5kCit3aWxsIGhhdmUgYW4gaW50ZWdlciBwb3J0aW9uIGVxdWFsIHRvIDEsIHRoZSBgekV4cCcgaW5wdXQgc2hvdWxkIGJlIDEgbGVzcwordGhhbiB0aGUgZGVzaXJlZCByZXN1bHQgZXhwb25lbnQgd2hlbmV2ZXIgYHpTaWcnIGlzIGEgY29tcGxldGUsIG5vcm1hbGl6ZWQKK3NpZ25pZmljYW5kLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK0lOTElORSBmbG9hdDMyIHBhY2tGbG9hdDMyKCBmbGFnIHpTaWduLCBpbnQxNiB6RXhwLCBiaXRzMzIgelNpZyApCit7CisjaWYgMAorICAgZmxvYXQzMiBmOworICAgX19hc21fXygiQCBwYWNrRmxvYXQzMgkJCQlcblwKKyAgIAkgICAgbW92ICUwLCAlMSwgYXNsICMzMQkJCQlcblwKKyAgIAkgICAgb3JyICUwLCAlMiwgYXNsICMyMwkJCQlcblwKKyAgIAkgICAgb3JyICUwLCAlMyIKKyAgIAkgICAgOiAvKiBubyBvdXRwdXRzICovCisgICAJICAgIDogImciIChmKSwgImciICh6U2lnbiksICJnIiAoekV4cCksICJnIiAoelNpZykKKyAgIAkgICAgOiAiY2MiKTsKKyAgIHJldHVybiBmOworI2Vsc2UKKyAgICByZXR1cm4gKCAoIChiaXRzMzIpIHpTaWduICk8PDMxICkgKyAoICggKGJpdHMzMikgekV4cCApPDwyMyApICsgelNpZzsKKyNlbmRpZiAKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1Rha2VzIGFuIGFic3RyYWN0IGZsb2F0aW5nLXBvaW50IHZhbHVlIGhhdmluZyBzaWduIGB6U2lnbicsIGV4cG9uZW50IGB6RXhwJywKK2FuZCBzaWduaWZpY2FuZCBgelNpZycsIGFuZCByZXR1cm5zIHRoZSBwcm9wZXIgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy0KK3BvaW50IHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFic3RyYWN0IGlucHV0LiAgT3JkaW5hcmlseSwgdGhlIGFic3RyYWN0Cit2YWx1ZSBpcyBzaW1wbHkgcm91bmRlZCBhbmQgcGFja2VkIGludG8gdGhlIHNpbmdsZS1wcmVjaXNpb24gZm9ybWF0LCB3aXRoCit0aGUgaW5leGFjdCBleGNlcHRpb24gcmFpc2VkIGlmIHRoZSBhYnN0cmFjdCBpbnB1dCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQKK2V4YWN0bHkuICBJZiB0aGUgYWJzdHJhY3QgdmFsdWUgaXMgdG9vIGxhcmdlLCBob3dldmVyLCB0aGUgb3ZlcmZsb3cgYW5kCitpbmV4YWN0IGV4Y2VwdGlvbnMgYXJlIHJhaXNlZCBhbmQgYW4gaW5maW5pdHkgb3IgbWF4aW1hbCBmaW5pdGUgdmFsdWUgaXMKK3JldHVybmVkLiAgSWYgdGhlIGFic3RyYWN0IHZhbHVlIGlzIHRvbyBzbWFsbCwgdGhlIGlucHV0IHZhbHVlIGlzIHJvdW5kZWQgdG8KK2Egc3Vibm9ybWFsIG51bWJlciwgYW5kIHRoZSB1bmRlcmZsb3cgYW5kIGluZXhhY3QgZXhjZXB0aW9ucyBhcmUgcmFpc2VkIGlmCit0aGUgYWJzdHJhY3QgaW5wdXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGV4YWN0bHkgYXMgYSBzdWJub3JtYWwgc2luZ2xlLQorcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IG51bWJlci4KKyAgICBUaGUgaW5wdXQgc2lnbmlmaWNhbmQgYHpTaWcnIGhhcyBpdHMgYmluYXJ5IHBvaW50IGJldHdlZW4gYml0cyAzMAorYW5kIDI5LCB3aGljaCBpcyA3IGJpdHMgdG8gdGhlIGxlZnQgb2YgdGhlIHVzdWFsIGxvY2F0aW9uLiAgVGhpcyBzaGlmdGVkCitzaWduaWZpY2FuZCBtdXN0IGJlIG5vcm1hbGl6ZWQgb3Igc21hbGxlci4gIElmIGB6U2lnJyBpcyBub3Qgbm9ybWFsaXplZCwKK2B6RXhwJyBtdXN0IGJlIDA7IGluIHRoYXQgY2FzZSwgdGhlIHJlc3VsdCByZXR1cm5lZCBpcyBhIHN1Ym5vcm1hbCBudW1iZXIsCithbmQgaXQgbXVzdCBub3QgcmVxdWlyZSByb3VuZGluZy4gIEluIHRoZSB1c3VhbCBjYXNlIHRoYXQgYHpTaWcnIGlzCitub3JtYWxpemVkLCBgekV4cCcgbXVzdCBiZSAxIGxlc3MgdGhhbiB0aGUgYGB0cnVlJycgZmxvYXRpbmctcG9pbnQgZXhwb25lbnQuCitUaGUgaGFuZGxpbmcgb2YgdW5kZXJmbG93IGFuZCBvdmVyZmxvdyBmb2xsb3dzIHRoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IKK0JpbmFyeSBGbG9hdGluZy1wb2ludCBBcml0aG1ldGljLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK3N0YXRpYyBmbG9hdDMyIHJvdW5kQW5kUGFja0Zsb2F0MzIoIGZsYWcgelNpZ24sIGludDE2IHpFeHAsIGJpdHMzMiB6U2lnICkKK3sKKyAgICBpbnQ4IHJvdW5kaW5nTW9kZTsKKyAgICBmbGFnIHJvdW5kTmVhcmVzdEV2ZW47CisgICAgaW50OCByb3VuZEluY3JlbWVudCwgcm91bmRCaXRzOworICAgIGZsYWcgaXNUaW55OworCisgICAgcm91bmRpbmdNb2RlID0gZmxvYXRfcm91bmRpbmdfbW9kZTsKKyAgICByb3VuZE5lYXJlc3RFdmVuID0gKCByb3VuZGluZ01vZGUgPT0gZmxvYXRfcm91bmRfbmVhcmVzdF9ldmVuICk7CisgICAgcm91bmRJbmNyZW1lbnQgPSAweDQwOworICAgIGlmICggISByb3VuZE5lYXJlc3RFdmVuICkgeworICAgICAgICBpZiAoIHJvdW5kaW5nTW9kZSA9PSBmbG9hdF9yb3VuZF90b196ZXJvICkgeworICAgICAgICAgICAgcm91bmRJbmNyZW1lbnQgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcm91bmRJbmNyZW1lbnQgPSAweDdGOworICAgICAgICAgICAgaWYgKCB6U2lnbiApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHJvdW5kaW5nTW9kZSA9PSBmbG9hdF9yb3VuZF91cCApIHJvdW5kSW5jcmVtZW50ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICggcm91bmRpbmdNb2RlID09IGZsb2F0X3JvdW5kX2Rvd24gKSByb3VuZEluY3JlbWVudCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcm91bmRCaXRzID0gelNpZyAmIDB4N0Y7CisgICAgaWYgKCAweEZEIDw9IChiaXRzMTYpIHpFeHAgKSB7CisgICAgICAgIGlmICggICAgKCAweEZEIDwgekV4cCApCisgICAgICAgICAgICAgfHwgKCAgICAoIHpFeHAgPT0gMHhGRCApCisgICAgICAgICAgICAgICAgICAmJiAoIChzYml0czMyKSAoIHpTaWcgKyByb3VuZEluY3JlbWVudCApIDwgMCApICkKKyAgICAgICAgICAgKSB7CisgICAgICAgICAgICBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19vdmVyZmxvdyB8IGZsb2F0X2ZsYWdfaW5leGFjdCApOworICAgICAgICAgICAgcmV0dXJuIHBhY2tGbG9hdDMyKCB6U2lnbiwgMHhGRiwgMCApIC0gKCByb3VuZEluY3JlbWVudCA9PSAwICk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCB6RXhwIDwgMCApIHsKKyAgICAgICAgICAgIGlzVGlueSA9CisgICAgICAgICAgICAgICAgICAgKCBmbG9hdF9kZXRlY3RfdGluaW5lc3MgPT0gZmxvYXRfdGluaW5lc3NfYmVmb3JlX3JvdW5kaW5nICkKKyAgICAgICAgICAgICAgICB8fCAoIHpFeHAgPCAtMSApCisgICAgICAgICAgICAgICAgfHwgKCB6U2lnICsgcm91bmRJbmNyZW1lbnQgPCAweDgwMDAwMDAwICk7CisgICAgICAgICAgICBzaGlmdDMyUmlnaHRKYW1taW5nKCB6U2lnLCAtIHpFeHAsICZ6U2lnICk7CisgICAgICAgICAgICB6RXhwID0gMDsKKyAgICAgICAgICAgIHJvdW5kQml0cyA9IHpTaWcgJiAweDdGOworICAgICAgICAgICAgaWYgKCBpc1RpbnkgJiYgcm91bmRCaXRzICkgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfdW5kZXJmbG93ICk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCByb3VuZEJpdHMgKSBmbG9hdF9leGNlcHRpb25fZmxhZ3MgfD0gZmxvYXRfZmxhZ19pbmV4YWN0OworICAgIHpTaWcgPSAoIHpTaWcgKyByb3VuZEluY3JlbWVudCApPj43OworICAgIHpTaWcgJj0gfiAoICggKCByb3VuZEJpdHMgXiAweDQwICkgPT0gMCApICYgcm91bmROZWFyZXN0RXZlbiApOworICAgIGlmICggelNpZyA9PSAwICkgekV4cCA9IDA7CisgICAgcmV0dXJuIHBhY2tGbG9hdDMyKCB6U2lnbiwgekV4cCwgelNpZyApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUYWtlcyBhbiBhYnN0cmFjdCBmbG9hdGluZy1wb2ludCB2YWx1ZSBoYXZpbmcgc2lnbiBgelNpZ24nLCBleHBvbmVudCBgekV4cCcsCithbmQgc2lnbmlmaWNhbmQgYHpTaWcnLCBhbmQgcmV0dXJucyB0aGUgcHJvcGVyIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctCitwb2ludCB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBhYnN0cmFjdCBpbnB1dC4gIFRoaXMgcm91dGluZSBpcyBqdXN0IGxpa2UKK2Byb3VuZEFuZFBhY2tGbG9hdDMyJyBleGNlcHQgdGhhdCBgelNpZycgZG9lcyBub3QgaGF2ZSB0byBiZSBub3JtYWxpemVkIGluCithbnkgd2F5LiAgSW4gYWxsIGNhc2VzLCBgekV4cCcgbXVzdCBiZSAxIGxlc3MgdGhhbiB0aGUgYGB0cnVlJycgZmxvYXRpbmctCitwb2ludCBleHBvbmVudC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitzdGF0aWMgZmxvYXQzMgorIG5vcm1hbGl6ZVJvdW5kQW5kUGFja0Zsb2F0MzIoIGZsYWcgelNpZ24sIGludDE2IHpFeHAsIGJpdHMzMiB6U2lnICkKK3sKKyAgICBpbnQ4IHNoaWZ0Q291bnQ7CisKKyAgICBzaGlmdENvdW50ID0gY291bnRMZWFkaW5nWmVyb3MzMiggelNpZyApIC0gMTsKKyAgICByZXR1cm4gcm91bmRBbmRQYWNrRmxvYXQzMiggelNpZ24sIHpFeHAgLSBzaGlmdENvdW50LCB6U2lnPDxzaGlmdENvdW50ICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIGZyYWN0aW9uIGJpdHMgb2YgdGhlIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgYGEnLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK0lOTElORSBiaXRzNjQgZXh0cmFjdEZsb2F0NjRGcmFjKCBmbG9hdDY0IGEgKQoreworCisgICAgcmV0dXJuIGEgJiBMSVQ2NCggMHgwMDBGRkZGRkZGRkZGRkZGICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIGV4cG9uZW50IGJpdHMgb2YgdGhlIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgYGEnLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK0lOTElORSBpbnQxNiBleHRyYWN0RmxvYXQ2NEV4cCggZmxvYXQ2NCBhICkKK3sKKworICAgIHJldHVybiAoIGE+PjUyICkgJiAweDdGRjsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyB0aGUgc2lnbiBiaXQgb2YgdGhlIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgYGEnLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKyNpZiAwCS8qIGluIHNvZnRmbG9hdC5oICovCitJTkxJTkUgZmxhZyBleHRyYWN0RmxvYXQ2NFNpZ24oIGZsb2F0NjQgYSApCit7CisKKyAgICByZXR1cm4gYT4+NjM7CisKK30KKyNlbmRpZgorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTm9ybWFsaXplcyB0aGUgc3Vibm9ybWFsIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgcmVwcmVzZW50ZWQKK2J5IHRoZSBkZW5vcm1hbGl6ZWQgc2lnbmlmaWNhbmQgYGFTaWcnLiAgVGhlIG5vcm1hbGl6ZWQgZXhwb25lbnQgYW5kCitzaWduaWZpY2FuZCBhcmUgc3RvcmVkIGF0IHRoZSBsb2NhdGlvbnMgcG9pbnRlZCB0byBieSBgekV4cFB0cicgYW5kCitgelNpZ1B0cicsIHJlc3BlY3RpdmVseS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitzdGF0aWMgdm9pZAorIG5vcm1hbGl6ZUZsb2F0NjRTdWJub3JtYWwoIGJpdHM2NCBhU2lnLCBpbnQxNiAqekV4cFB0ciwgYml0czY0ICp6U2lnUHRyICkKK3sKKyAgICBpbnQ4IHNoaWZ0Q291bnQ7CisKKyAgICBzaGlmdENvdW50ID0gY291bnRMZWFkaW5nWmVyb3M2NCggYVNpZyApIC0gMTE7CisgICAgKnpTaWdQdHIgPSBhU2lnPDxzaGlmdENvdW50OworICAgICp6RXhwUHRyID0gMSAtIHNoaWZ0Q291bnQ7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1BhY2tzIHRoZSBzaWduIGB6U2lnbicsIGV4cG9uZW50IGB6RXhwJywgYW5kIHNpZ25pZmljYW5kIGB6U2lnJyBpbnRvIGEKK2RvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUsIHJldHVybmluZyB0aGUgcmVzdWx0LiAgQWZ0ZXIgYmVpbmcKK3NoaWZ0ZWQgaW50byB0aGUgcHJvcGVyIHBvc2l0aW9ucywgdGhlIHRocmVlIGZpZWxkcyBhcmUgc2ltcGx5IGFkZGVkCit0b2dldGhlciB0byBmb3JtIHRoZSByZXN1bHQuICBUaGlzIG1lYW5zIHRoYXQgYW55IGludGVnZXIgcG9ydGlvbiBvZiBgelNpZycKK3dpbGwgYmUgYWRkZWQgaW50byB0aGUgZXhwb25lbnQuICBTaW5jZSBhIHByb3Blcmx5IG5vcm1hbGl6ZWQgc2lnbmlmaWNhbmQKK3dpbGwgaGF2ZSBhbiBpbnRlZ2VyIHBvcnRpb24gZXF1YWwgdG8gMSwgdGhlIGB6RXhwJyBpbnB1dCBzaG91bGQgYmUgMSBsZXNzCit0aGFuIHRoZSBkZXNpcmVkIHJlc3VsdCBleHBvbmVudCB3aGVuZXZlciBgelNpZycgaXMgYSBjb21wbGV0ZSwgbm9ybWFsaXplZAorc2lnbmlmaWNhbmQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworSU5MSU5FIGZsb2F0NjQgcGFja0Zsb2F0NjQoIGZsYWcgelNpZ24sIGludDE2IHpFeHAsIGJpdHM2NCB6U2lnICkKK3sKKworICAgIHJldHVybiAoICggKGJpdHM2NCkgelNpZ24gKTw8NjMgKSArICggKCAoYml0czY0KSB6RXhwICk8PDUyICkgKyB6U2lnOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUYWtlcyBhbiBhYnN0cmFjdCBmbG9hdGluZy1wb2ludCB2YWx1ZSBoYXZpbmcgc2lnbiBgelNpZ24nLCBleHBvbmVudCBgekV4cCcsCithbmQgc2lnbmlmaWNhbmQgYHpTaWcnLCBhbmQgcmV0dXJucyB0aGUgcHJvcGVyIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctCitwb2ludCB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBhYnN0cmFjdCBpbnB1dC4gIE9yZGluYXJpbHksIHRoZSBhYnN0cmFjdAordmFsdWUgaXMgc2ltcGx5IHJvdW5kZWQgYW5kIHBhY2tlZCBpbnRvIHRoZSBkb3VibGUtcHJlY2lzaW9uIGZvcm1hdCwgd2l0aAordGhlIGluZXhhY3QgZXhjZXB0aW9uIHJhaXNlZCBpZiB0aGUgYWJzdHJhY3QgaW5wdXQgY2Fubm90IGJlIHJlcHJlc2VudGVkCitleGFjdGx5LiAgSWYgdGhlIGFic3RyYWN0IHZhbHVlIGlzIHRvbyBsYXJnZSwgaG93ZXZlciwgdGhlIG92ZXJmbG93IGFuZAoraW5leGFjdCBleGNlcHRpb25zIGFyZSByYWlzZWQgYW5kIGFuIGluZmluaXR5IG9yIG1heGltYWwgZmluaXRlIHZhbHVlIGlzCityZXR1cm5lZC4gIElmIHRoZSBhYnN0cmFjdCB2YWx1ZSBpcyB0b28gc21hbGwsIHRoZSBpbnB1dCB2YWx1ZSBpcyByb3VuZGVkIHRvCithIHN1Ym5vcm1hbCBudW1iZXIsIGFuZCB0aGUgdW5kZXJmbG93IGFuZCBpbmV4YWN0IGV4Y2VwdGlvbnMgYXJlIHJhaXNlZCBpZgordGhlIGFic3RyYWN0IGlucHV0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBleGFjdGx5IGFzIGEgc3Vibm9ybWFsIGRvdWJsZS0KK3ByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBudW1iZXIuCisgICAgVGhlIGlucHV0IHNpZ25pZmljYW5kIGB6U2lnJyBoYXMgaXRzIGJpbmFyeSBwb2ludCBiZXR3ZWVuIGJpdHMgNjIKK2FuZCA2MSwgd2hpY2ggaXMgMTAgYml0cyB0byB0aGUgbGVmdCBvZiB0aGUgdXN1YWwgbG9jYXRpb24uICBUaGlzIHNoaWZ0ZWQKK3NpZ25pZmljYW5kIG11c3QgYmUgbm9ybWFsaXplZCBvciBzbWFsbGVyLiAgSWYgYHpTaWcnIGlzIG5vdCBub3JtYWxpemVkLAorYHpFeHAnIG11c3QgYmUgMDsgaW4gdGhhdCBjYXNlLCB0aGUgcmVzdWx0IHJldHVybmVkIGlzIGEgc3Vibm9ybWFsIG51bWJlciwKK2FuZCBpdCBtdXN0IG5vdCByZXF1aXJlIHJvdW5kaW5nLiAgSW4gdGhlIHVzdWFsIGNhc2UgdGhhdCBgelNpZycgaXMKK25vcm1hbGl6ZWQsIGB6RXhwJyBtdXN0IGJlIDEgbGVzcyB0aGFuIHRoZSBgYHRydWUnJyBmbG9hdGluZy1wb2ludCBleHBvbmVudC4KK1RoZSBoYW5kbGluZyBvZiB1bmRlcmZsb3cgYW5kIG92ZXJmbG93IGZvbGxvd3MgdGhlIElFQy9JRUVFIFN0YW5kYXJkIGZvcgorQmluYXJ5IEZsb2F0aW5nLXBvaW50IEFyaXRobWV0aWMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworc3RhdGljIGZsb2F0NjQgcm91bmRBbmRQYWNrRmxvYXQ2NCggZmxhZyB6U2lnbiwgaW50MTYgekV4cCwgYml0czY0IHpTaWcgKQoreworICAgIGludDggcm91bmRpbmdNb2RlOworICAgIGZsYWcgcm91bmROZWFyZXN0RXZlbjsKKyAgICBpbnQxNiByb3VuZEluY3JlbWVudCwgcm91bmRCaXRzOworICAgIGZsYWcgaXNUaW55OworCisgICAgcm91bmRpbmdNb2RlID0gZmxvYXRfcm91bmRpbmdfbW9kZTsKKyAgICByb3VuZE5lYXJlc3RFdmVuID0gKCByb3VuZGluZ01vZGUgPT0gZmxvYXRfcm91bmRfbmVhcmVzdF9ldmVuICk7CisgICAgcm91bmRJbmNyZW1lbnQgPSAweDIwMDsKKyAgICBpZiAoICEgcm91bmROZWFyZXN0RXZlbiApIHsKKyAgICAgICAgaWYgKCByb3VuZGluZ01vZGUgPT0gZmxvYXRfcm91bmRfdG9femVybyApIHsKKyAgICAgICAgICAgIHJvdW5kSW5jcmVtZW50ID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJvdW5kSW5jcmVtZW50ID0gMHgzRkY7CisgICAgICAgICAgICBpZiAoIHpTaWduICkgeworICAgICAgICAgICAgICAgIGlmICggcm91bmRpbmdNb2RlID09IGZsb2F0X3JvdW5kX3VwICkgcm91bmRJbmNyZW1lbnQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCByb3VuZGluZ01vZGUgPT0gZmxvYXRfcm91bmRfZG93biApIHJvdW5kSW5jcmVtZW50ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByb3VuZEJpdHMgPSB6U2lnICYgMHgzRkY7CisgICAgaWYgKCAweDdGRCA8PSAoYml0czE2KSB6RXhwICkgeworICAgICAgICBpZiAoICAgICggMHg3RkQgPCB6RXhwICkKKyAgICAgICAgICAgICB8fCAoICAgICggekV4cCA9PSAweDdGRCApCisgICAgICAgICAgICAgICAgICAmJiAoIChzYml0czY0KSAoIHpTaWcgKyByb3VuZEluY3JlbWVudCApIDwgMCApICkKKyAgICAgICAgICAgKSB7CisgICAgICAgICAgICAvL3JlZ2lzdGVyIGludCBsciA9IF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKKyAgICAgICAgICAgIC8vcHJpbnRrKCJyb3VuZEFuZFBhY2tGbG9hdDY0IGNhbGxlZCBmcm9tIDB4JTA4eFxuIixscik7CisgICAgICAgICAgICBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19vdmVyZmxvdyB8IGZsb2F0X2ZsYWdfaW5leGFjdCApOworICAgICAgICAgICAgcmV0dXJuIHBhY2tGbG9hdDY0KCB6U2lnbiwgMHg3RkYsIDAgKSAtICggcm91bmRJbmNyZW1lbnQgPT0gMCApOworICAgICAgICB9CisgICAgICAgIGlmICggekV4cCA8IDAgKSB7CisgICAgICAgICAgICBpc1RpbnkgPQorICAgICAgICAgICAgICAgICAgICggZmxvYXRfZGV0ZWN0X3RpbmluZXNzID09IGZsb2F0X3RpbmluZXNzX2JlZm9yZV9yb3VuZGluZyApCisgICAgICAgICAgICAgICAgfHwgKCB6RXhwIDwgLTEgKQorICAgICAgICAgICAgICAgIHx8ICggelNpZyArIHJvdW5kSW5jcmVtZW50IDwgTElUNjQoIDB4ODAwMDAwMDAwMDAwMDAwMCApICk7CisgICAgICAgICAgICBzaGlmdDY0UmlnaHRKYW1taW5nKCB6U2lnLCAtIHpFeHAsICZ6U2lnICk7CisgICAgICAgICAgICB6RXhwID0gMDsKKyAgICAgICAgICAgIHJvdW5kQml0cyA9IHpTaWcgJiAweDNGRjsKKyAgICAgICAgICAgIGlmICggaXNUaW55ICYmIHJvdW5kQml0cyApIGZsb2F0X3JhaXNlKCBmbG9hdF9mbGFnX3VuZGVyZmxvdyApOworICAgICAgICB9CisgICAgfQorICAgIGlmICggcm91bmRCaXRzICkgZmxvYXRfZXhjZXB0aW9uX2ZsYWdzIHw9IGZsb2F0X2ZsYWdfaW5leGFjdDsKKyAgICB6U2lnID0gKCB6U2lnICsgcm91bmRJbmNyZW1lbnQgKT4+MTA7CisgICAgelNpZyAmPSB+ICggKCAoIHJvdW5kQml0cyBeIDB4MjAwICkgPT0gMCApICYgcm91bmROZWFyZXN0RXZlbiApOworICAgIGlmICggelNpZyA9PSAwICkgekV4cCA9IDA7CisgICAgcmV0dXJuIHBhY2tGbG9hdDY0KCB6U2lnbiwgekV4cCwgelNpZyApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUYWtlcyBhbiBhYnN0cmFjdCBmbG9hdGluZy1wb2ludCB2YWx1ZSBoYXZpbmcgc2lnbiBgelNpZ24nLCBleHBvbmVudCBgekV4cCcsCithbmQgc2lnbmlmaWNhbmQgYHpTaWcnLCBhbmQgcmV0dXJucyB0aGUgcHJvcGVyIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctCitwb2ludCB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBhYnN0cmFjdCBpbnB1dC4gIFRoaXMgcm91dGluZSBpcyBqdXN0IGxpa2UKK2Byb3VuZEFuZFBhY2tGbG9hdDY0JyBleGNlcHQgdGhhdCBgelNpZycgZG9lcyBub3QgaGF2ZSB0byBiZSBub3JtYWxpemVkIGluCithbnkgd2F5LiAgSW4gYWxsIGNhc2VzLCBgekV4cCcgbXVzdCBiZSAxIGxlc3MgdGhhbiB0aGUgYGB0cnVlJycgZmxvYXRpbmctCitwb2ludCBleHBvbmVudC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitzdGF0aWMgZmxvYXQ2NAorIG5vcm1hbGl6ZVJvdW5kQW5kUGFja0Zsb2F0NjQoIGZsYWcgelNpZ24sIGludDE2IHpFeHAsIGJpdHM2NCB6U2lnICkKK3sKKyAgICBpbnQ4IHNoaWZ0Q291bnQ7CisKKyAgICBzaGlmdENvdW50ID0gY291bnRMZWFkaW5nWmVyb3M2NCggelNpZyApIC0gMTsKKyAgICByZXR1cm4gcm91bmRBbmRQYWNrRmxvYXQ2NCggelNpZ24sIHpFeHAgLSBzaGlmdENvdW50LCB6U2lnPDxzaGlmdENvdW50ICk7CisKK30KKworI2lmZGVmIEZMT0FUWDgwCisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIHRoZSBmcmFjdGlvbiBiaXRzIG9mIHRoZSBleHRlbmRlZCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50Cit2YWx1ZSBgYScuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworSU5MSU5FIGJpdHM2NCBleHRyYWN0RmxvYXR4ODBGcmFjKCBmbG9hdHg4MCBhICkKK3sKKworICAgIHJldHVybiBhLmxvdzsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyB0aGUgZXhwb25lbnQgYml0cyBvZiB0aGUgZXh0ZW5kZWQgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludAordmFsdWUgYGEnLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK0lOTElORSBpbnQzMiBleHRyYWN0RmxvYXR4ODBFeHAoIGZsb2F0eDgwIGEgKQoreworCisgICAgcmV0dXJuIGEuaGlnaCAmIDB4N0ZGRjsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyB0aGUgc2lnbiBiaXQgb2YgdGhlIGV4dGVuZGVkIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUKK2BhJy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitJTkxJTkUgZmxhZyBleHRyYWN0RmxvYXR4ODBTaWduKCBmbG9hdHg4MCBhICkKK3sKKworICAgIHJldHVybiBhLmhpZ2g+PjE1OworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOb3JtYWxpemVzIHRoZSBzdWJub3JtYWwgZXh0ZW5kZWQgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZQorcmVwcmVzZW50ZWQgYnkgdGhlIGRlbm9ybWFsaXplZCBzaWduaWZpY2FuZCBgYVNpZycuICBUaGUgbm9ybWFsaXplZCBleHBvbmVudAorYW5kIHNpZ25pZmljYW5kIGFyZSBzdG9yZWQgYXQgdGhlIGxvY2F0aW9ucyBwb2ludGVkIHRvIGJ5IGB6RXhwUHRyJyBhbmQKK2B6U2lnUHRyJywgcmVzcGVjdGl2ZWx5LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK3N0YXRpYyB2b2lkCisgbm9ybWFsaXplRmxvYXR4ODBTdWJub3JtYWwoIGJpdHM2NCBhU2lnLCBpbnQzMiAqekV4cFB0ciwgYml0czY0ICp6U2lnUHRyICkKK3sKKyAgICBpbnQ4IHNoaWZ0Q291bnQ7CisKKyAgICBzaGlmdENvdW50ID0gY291bnRMZWFkaW5nWmVyb3M2NCggYVNpZyApOworICAgICp6U2lnUHRyID0gYVNpZzw8c2hpZnRDb3VudDsKKyAgICAqekV4cFB0ciA9IDEgLSBzaGlmdENvdW50OworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQYWNrcyB0aGUgc2lnbiBgelNpZ24nLCBleHBvbmVudCBgekV4cCcsIGFuZCBzaWduaWZpY2FuZCBgelNpZycgaW50byBhbgorZXh0ZW5kZWQgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSwgcmV0dXJuaW5nIHRoZSByZXN1bHQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworSU5MSU5FIGZsb2F0eDgwIHBhY2tGbG9hdHg4MCggZmxhZyB6U2lnbiwgaW50MzIgekV4cCwgYml0czY0IHpTaWcgKQoreworICAgIGZsb2F0eDgwIHo7CisKKyAgICB6LmxvdyA9IHpTaWc7CisgICAgei5oaWdoID0gKCAoIChiaXRzMTYpIHpTaWduICk8PDE1ICkgKyB6RXhwOworICAgIHJldHVybiB6OworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUYWtlcyBhbiBhYnN0cmFjdCBmbG9hdGluZy1wb2ludCB2YWx1ZSBoYXZpbmcgc2lnbiBgelNpZ24nLCBleHBvbmVudCBgekV4cCcsCithbmQgZXh0ZW5kZWQgc2lnbmlmaWNhbmQgZm9ybWVkIGJ5IHRoZSBjb25jYXRlbmF0aW9uIG9mIGB6U2lnMCcgYW5kIGB6U2lnMScsCithbmQgcmV0dXJucyB0aGUgcHJvcGVyIGV4dGVuZGVkIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUKK2NvcnJlc3BvbmRpbmcgdG8gdGhlIGFic3RyYWN0IGlucHV0LiAgT3JkaW5hcmlseSwgdGhlIGFic3RyYWN0IHZhbHVlIGlzCityb3VuZGVkIGFuZCBwYWNrZWQgaW50byB0aGUgZXh0ZW5kZWQgZG91YmxlLXByZWNpc2lvbiBmb3JtYXQsIHdpdGggdGhlCitpbmV4YWN0IGV4Y2VwdGlvbiByYWlzZWQgaWYgdGhlIGFic3RyYWN0IGlucHV0IGNhbm5vdCBiZSByZXByZXNlbnRlZAorZXhhY3RseS4gIElmIHRoZSBhYnN0cmFjdCB2YWx1ZSBpcyB0b28gbGFyZ2UsIGhvd2V2ZXIsIHRoZSBvdmVyZmxvdyBhbmQKK2luZXhhY3QgZXhjZXB0aW9ucyBhcmUgcmFpc2VkIGFuZCBhbiBpbmZpbml0eSBvciBtYXhpbWFsIGZpbml0ZSB2YWx1ZSBpcworcmV0dXJuZWQuICBJZiB0aGUgYWJzdHJhY3QgdmFsdWUgaXMgdG9vIHNtYWxsLCB0aGUgaW5wdXQgdmFsdWUgaXMgcm91bmRlZCB0bworYSBzdWJub3JtYWwgbnVtYmVyLCBhbmQgdGhlIHVuZGVyZmxvdyBhbmQgaW5leGFjdCBleGNlcHRpb25zIGFyZSByYWlzZWQgaWYKK3RoZSBhYnN0cmFjdCBpbnB1dCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgZXhhY3RseSBhcyBhIHN1Ym5vcm1hbCBleHRlbmRlZAorZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBudW1iZXIuCisgICAgSWYgYHJvdW5kaW5nUHJlY2lzaW9uJyBpcyAzMiBvciA2NCwgdGhlIHJlc3VsdCBpcyByb3VuZGVkIHRvIHRoZSBzYW1lCitudW1iZXIgb2YgYml0cyBhcyBzaW5nbGUgb3IgZG91YmxlIHByZWNpc2lvbiwgcmVzcGVjdGl2ZWx5LiAgT3RoZXJ3aXNlLCB0aGUKK3Jlc3VsdCBpcyByb3VuZGVkIHRvIHRoZSBmdWxsIHByZWNpc2lvbiBvZiB0aGUgZXh0ZW5kZWQgZG91YmxlLXByZWNpc2lvbgorZm9ybWF0LgorICAgIFRoZSBpbnB1dCBzaWduaWZpY2FuZCBtdXN0IGJlIG5vcm1hbGl6ZWQgb3Igc21hbGxlci4gIElmIHRoZSBpbnB1dAorc2lnbmlmaWNhbmQgaXMgbm90IG5vcm1hbGl6ZWQsIGB6RXhwJyBtdXN0IGJlIDA7IGluIHRoYXQgY2FzZSwgdGhlIHJlc3VsdAorcmV0dXJuZWQgaXMgYSBzdWJub3JtYWwgbnVtYmVyLCBhbmQgaXQgbXVzdCBub3QgcmVxdWlyZSByb3VuZGluZy4gIFRoZQoraGFuZGxpbmcgb2YgdW5kZXJmbG93IGFuZCBvdmVyZmxvdyBmb2xsb3dzIHRoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IgQmluYXJ5CitGbG9hdGluZy1wb2ludCBBcml0aG1ldGljLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK3N0YXRpYyBmbG9hdHg4MAorIHJvdW5kQW5kUGFja0Zsb2F0eDgwKAorICAgICBpbnQ4IHJvdW5kaW5nUHJlY2lzaW9uLCBmbGFnIHpTaWduLCBpbnQzMiB6RXhwLCBiaXRzNjQgelNpZzAsIGJpdHM2NCB6U2lnMQorICkKK3sKKyAgICBpbnQ4IHJvdW5kaW5nTW9kZTsKKyAgICBmbGFnIHJvdW5kTmVhcmVzdEV2ZW4sIGluY3JlbWVudCwgaXNUaW55OworICAgIGludDY0IHJvdW5kSW5jcmVtZW50LCByb3VuZE1hc2ssIHJvdW5kQml0czsKKworICAgIHJvdW5kaW5nTW9kZSA9IGZsb2F0X3JvdW5kaW5nX21vZGU7CisgICAgcm91bmROZWFyZXN0RXZlbiA9ICggcm91bmRpbmdNb2RlID09IGZsb2F0X3JvdW5kX25lYXJlc3RfZXZlbiApOworICAgIGlmICggcm91bmRpbmdQcmVjaXNpb24gPT0gODAgKSBnb3RvIHByZWNpc2lvbjgwOworICAgIGlmICggcm91bmRpbmdQcmVjaXNpb24gPT0gNjQgKSB7CisgICAgICAgIHJvdW5kSW5jcmVtZW50ID0gTElUNjQoIDB4MDAwMDAwMDAwMDAwMDQwMCApOworICAgICAgICByb3VuZE1hc2sgPSBMSVQ2NCggMHgwMDAwMDAwMDAwMDAwN0ZGICk7CisgICAgfQorICAgIGVsc2UgaWYgKCByb3VuZGluZ1ByZWNpc2lvbiA9PSAzMiApIHsKKyAgICAgICAgcm91bmRJbmNyZW1lbnQgPSBMSVQ2NCggMHgwMDAwMDA4MDAwMDAwMDAwICk7CisgICAgICAgIHJvdW5kTWFzayA9IExJVDY0KCAweDAwMDAwMEZGRkZGRkZGRkYgKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGdvdG8gcHJlY2lzaW9uODA7CisgICAgfQorICAgIHpTaWcwIHw9ICggelNpZzEgIT0gMCApOworICAgIGlmICggISByb3VuZE5lYXJlc3RFdmVuICkgeworICAgICAgICBpZiAoIHJvdW5kaW5nTW9kZSA9PSBmbG9hdF9yb3VuZF90b196ZXJvICkgeworICAgICAgICAgICAgcm91bmRJbmNyZW1lbnQgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcm91bmRJbmNyZW1lbnQgPSByb3VuZE1hc2s7CisgICAgICAgICAgICBpZiAoIHpTaWduICkgeworICAgICAgICAgICAgICAgIGlmICggcm91bmRpbmdNb2RlID09IGZsb2F0X3JvdW5kX3VwICkgcm91bmRJbmNyZW1lbnQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCByb3VuZGluZ01vZGUgPT0gZmxvYXRfcm91bmRfZG93biApIHJvdW5kSW5jcmVtZW50ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByb3VuZEJpdHMgPSB6U2lnMCAmIHJvdW5kTWFzazsKKyAgICBpZiAoIDB4N0ZGRCA8PSAoYml0czMyKSAoIHpFeHAgLSAxICkgKSB7CisgICAgICAgIGlmICggICAgKCAweDdGRkUgPCB6RXhwICkKKyAgICAgICAgICAgICB8fCAoICggekV4cCA9PSAweDdGRkUgKSAmJiAoIHpTaWcwICsgcm91bmRJbmNyZW1lbnQgPCB6U2lnMCApICkKKyAgICAgICAgICAgKSB7CisgICAgICAgICAgICBnb3RvIG92ZXJmbG93OworICAgICAgICB9CisgICAgICAgIGlmICggekV4cCA8PSAwICkgeworICAgICAgICAgICAgaXNUaW55ID0KKyAgICAgICAgICAgICAgICAgICAoIGZsb2F0X2RldGVjdF90aW5pbmVzcyA9PSBmbG9hdF90aW5pbmVzc19iZWZvcmVfcm91bmRpbmcgKQorICAgICAgICAgICAgICAgIHx8ICggekV4cCA8IDAgKQorICAgICAgICAgICAgICAgIHx8ICggelNpZzAgPD0gelNpZzAgKyByb3VuZEluY3JlbWVudCApOworICAgICAgICAgICAgc2hpZnQ2NFJpZ2h0SmFtbWluZyggelNpZzAsIDEgLSB6RXhwLCAmelNpZzAgKTsKKyAgICAgICAgICAgIHpFeHAgPSAwOworICAgICAgICAgICAgcm91bmRCaXRzID0gelNpZzAgJiByb3VuZE1hc2s7CisgICAgICAgICAgICBpZiAoIGlzVGlueSAmJiByb3VuZEJpdHMgKSBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ191bmRlcmZsb3cgKTsKKyAgICAgICAgICAgIGlmICggcm91bmRCaXRzICkgZmxvYXRfZXhjZXB0aW9uX2ZsYWdzIHw9IGZsb2F0X2ZsYWdfaW5leGFjdDsKKyAgICAgICAgICAgIHpTaWcwICs9IHJvdW5kSW5jcmVtZW50OworICAgICAgICAgICAgaWYgKCAoc2JpdHM2NCkgelNpZzAgPCAwICkgekV4cCA9IDE7CisgICAgICAgICAgICByb3VuZEluY3JlbWVudCA9IHJvdW5kTWFzayArIDE7CisgICAgICAgICAgICBpZiAoIHJvdW5kTmVhcmVzdEV2ZW4gJiYgKCByb3VuZEJpdHM8PDEgPT0gcm91bmRJbmNyZW1lbnQgKSApIHsKKyAgICAgICAgICAgICAgICByb3VuZE1hc2sgfD0gcm91bmRJbmNyZW1lbnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB6U2lnMCAmPSB+IHJvdW5kTWFzazsKKyAgICAgICAgICAgIHJldHVybiBwYWNrRmxvYXR4ODAoIHpTaWduLCB6RXhwLCB6U2lnMCApOworICAgICAgICB9CisgICAgfQorICAgIGlmICggcm91bmRCaXRzICkgZmxvYXRfZXhjZXB0aW9uX2ZsYWdzIHw9IGZsb2F0X2ZsYWdfaW5leGFjdDsKKyAgICB6U2lnMCArPSByb3VuZEluY3JlbWVudDsKKyAgICBpZiAoIHpTaWcwIDwgcm91bmRJbmNyZW1lbnQgKSB7CisgICAgICAgICsrekV4cDsKKyAgICAgICAgelNpZzAgPSBMSVQ2NCggMHg4MDAwMDAwMDAwMDAwMDAwICk7CisgICAgfQorICAgIHJvdW5kSW5jcmVtZW50ID0gcm91bmRNYXNrICsgMTsKKyAgICBpZiAoIHJvdW5kTmVhcmVzdEV2ZW4gJiYgKCByb3VuZEJpdHM8PDEgPT0gcm91bmRJbmNyZW1lbnQgKSApIHsKKyAgICAgICAgcm91bmRNYXNrIHw9IHJvdW5kSW5jcmVtZW50OworICAgIH0KKyAgICB6U2lnMCAmPSB+IHJvdW5kTWFzazsKKyAgICBpZiAoIHpTaWcwID09IDAgKSB6RXhwID0gMDsKKyAgICByZXR1cm4gcGFja0Zsb2F0eDgwKCB6U2lnbiwgekV4cCwgelNpZzAgKTsKKyBwcmVjaXNpb244MDoKKyAgICBpbmNyZW1lbnQgPSAoIChzYml0czY0KSB6U2lnMSA8IDAgKTsKKyAgICBpZiAoICEgcm91bmROZWFyZXN0RXZlbiApIHsKKyAgICAgICAgaWYgKCByb3VuZGluZ01vZGUgPT0gZmxvYXRfcm91bmRfdG9femVybyApIHsKKyAgICAgICAgICAgIGluY3JlbWVudCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoIHpTaWduICkgeworICAgICAgICAgICAgICAgIGluY3JlbWVudCA9ICggcm91bmRpbmdNb2RlID09IGZsb2F0X3JvdW5kX2Rvd24gKSAmJiB6U2lnMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGluY3JlbWVudCA9ICggcm91bmRpbmdNb2RlID09IGZsb2F0X3JvdW5kX3VwICkgJiYgelNpZzE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCAweDdGRkQgPD0gKGJpdHMzMikgKCB6RXhwIC0gMSApICkgeworICAgICAgICBpZiAoICAgICggMHg3RkZFIDwgekV4cCApCisgICAgICAgICAgICAgfHwgKCAgICAoIHpFeHAgPT0gMHg3RkZFICkKKyAgICAgICAgICAgICAgICAgICYmICggelNpZzAgPT0gTElUNjQoIDB4RkZGRkZGRkZGRkZGRkZGRiApICkKKyAgICAgICAgICAgICAgICAgICYmIGluY3JlbWVudAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgKSB7CisgICAgICAgICAgICByb3VuZE1hc2sgPSAwOworIG92ZXJmbG93OgorICAgICAgICAgICAgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfb3ZlcmZsb3cgfCBmbG9hdF9mbGFnX2luZXhhY3QgKTsKKyAgICAgICAgICAgIGlmICggICAgKCByb3VuZGluZ01vZGUgPT0gZmxvYXRfcm91bmRfdG9femVybyApCisgICAgICAgICAgICAgICAgIHx8ICggelNpZ24gJiYgKCByb3VuZGluZ01vZGUgPT0gZmxvYXRfcm91bmRfdXAgKSApCisgICAgICAgICAgICAgICAgIHx8ICggISB6U2lnbiAmJiAoIHJvdW5kaW5nTW9kZSA9PSBmbG9hdF9yb3VuZF9kb3duICkgKQorICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhY2tGbG9hdHg4MCggelNpZ24sIDB4N0ZGRSwgfiByb3VuZE1hc2sgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwYWNrRmxvYXR4ODAoIHpTaWduLCAweDdGRkYsIExJVDY0KCAweDgwMDAwMDAwMDAwMDAwMDAgKSApOworICAgICAgICB9CisgICAgICAgIGlmICggekV4cCA8PSAwICkgeworICAgICAgICAgICAgaXNUaW55ID0KKyAgICAgICAgICAgICAgICAgICAoIGZsb2F0X2RldGVjdF90aW5pbmVzcyA9PSBmbG9hdF90aW5pbmVzc19iZWZvcmVfcm91bmRpbmcgKQorICAgICAgICAgICAgICAgIHx8ICggekV4cCA8IDAgKQorICAgICAgICAgICAgICAgIHx8ICEgaW5jcmVtZW50CisgICAgICAgICAgICAgICAgfHwgKCB6U2lnMCA8IExJVDY0KCAweEZGRkZGRkZGRkZGRkZGRkYgKSApOworICAgICAgICAgICAgc2hpZnQ2NEV4dHJhUmlnaHRKYW1taW5nKCB6U2lnMCwgelNpZzEsIDEgLSB6RXhwLCAmelNpZzAsICZ6U2lnMSApOworICAgICAgICAgICAgekV4cCA9IDA7CisgICAgICAgICAgICBpZiAoIGlzVGlueSAmJiB6U2lnMSApIGZsb2F0X3JhaXNlKCBmbG9hdF9mbGFnX3VuZGVyZmxvdyApOworICAgICAgICAgICAgaWYgKCB6U2lnMSApIGZsb2F0X2V4Y2VwdGlvbl9mbGFncyB8PSBmbG9hdF9mbGFnX2luZXhhY3Q7CisgICAgICAgICAgICBpZiAoIHJvdW5kTmVhcmVzdEV2ZW4gKSB7CisgICAgICAgICAgICAgICAgaW5jcmVtZW50ID0gKCAoc2JpdHM2NCkgelNpZzEgPCAwICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIHpTaWduICkgeworICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnQgPSAoIHJvdW5kaW5nTW9kZSA9PSBmbG9hdF9yb3VuZF9kb3duICkgJiYgelNpZzE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnQgPSAoIHJvdW5kaW5nTW9kZSA9PSBmbG9hdF9yb3VuZF91cCApICYmIHpTaWcxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggaW5jcmVtZW50ICkgeworICAgICAgICAgICAgICAgICsrelNpZzA7CisgICAgICAgICAgICAgICAgelNpZzAgJj0gfiAoICggelNpZzEgKyB6U2lnMSA9PSAwICkgJiByb3VuZE5lYXJlc3RFdmVuICk7CisgICAgICAgICAgICAgICAgaWYgKCAoc2JpdHM2NCkgelNpZzAgPCAwICkgekV4cCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcGFja0Zsb2F0eDgwKCB6U2lnbiwgekV4cCwgelNpZzAgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIHpTaWcxICkgZmxvYXRfZXhjZXB0aW9uX2ZsYWdzIHw9IGZsb2F0X2ZsYWdfaW5leGFjdDsKKyAgICBpZiAoIGluY3JlbWVudCApIHsKKyAgICAgICAgKyt6U2lnMDsKKyAgICAgICAgaWYgKCB6U2lnMCA9PSAwICkgeworICAgICAgICAgICAgKyt6RXhwOworICAgICAgICAgICAgelNpZzAgPSBMSVQ2NCggMHg4MDAwMDAwMDAwMDAwMDAwICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB6U2lnMCAmPSB+ICggKCB6U2lnMSArIHpTaWcxID09IDAgKSAmIHJvdW5kTmVhcmVzdEV2ZW4gKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCB6U2lnMCA9PSAwICkgekV4cCA9IDA7CisgICAgfQorICAgIAorICAgIHJldHVybiBwYWNrRmxvYXR4ODAoIHpTaWduLCB6RXhwLCB6U2lnMCApOworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGFrZXMgYW4gYWJzdHJhY3QgZmxvYXRpbmctcG9pbnQgdmFsdWUgaGF2aW5nIHNpZ24gYHpTaWduJywgZXhwb25lbnQKK2B6RXhwJywgYW5kIHNpZ25pZmljYW5kIGZvcm1lZCBieSB0aGUgY29uY2F0ZW5hdGlvbiBvZiBgelNpZzAnIGFuZCBgelNpZzEnLAorYW5kIHJldHVybnMgdGhlIHByb3BlciBleHRlbmRlZCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlCitjb3JyZXNwb25kaW5nIHRvIHRoZSBhYnN0cmFjdCBpbnB1dC4gIFRoaXMgcm91dGluZSBpcyBqdXN0IGxpa2UKK2Byb3VuZEFuZFBhY2tGbG9hdHg4MCcgZXhjZXB0IHRoYXQgdGhlIGlucHV0IHNpZ25pZmljYW5kIGRvZXMgbm90IGhhdmUgdG8gYmUKK25vcm1hbGl6ZWQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworc3RhdGljIGZsb2F0eDgwCisgbm9ybWFsaXplUm91bmRBbmRQYWNrRmxvYXR4ODAoCisgICAgIGludDggcm91bmRpbmdQcmVjaXNpb24sIGZsYWcgelNpZ24sIGludDMyIHpFeHAsIGJpdHM2NCB6U2lnMCwgYml0czY0IHpTaWcxCisgKQoreworICAgIGludDggc2hpZnRDb3VudDsKKworICAgIGlmICggelNpZzAgPT0gMCApIHsKKyAgICAgICAgelNpZzAgPSB6U2lnMTsKKyAgICAgICAgelNpZzEgPSAwOworICAgICAgICB6RXhwIC09IDY0OworICAgIH0KKyAgICBzaGlmdENvdW50ID0gY291bnRMZWFkaW5nWmVyb3M2NCggelNpZzAgKTsKKyAgICBzaG9ydFNoaWZ0MTI4TGVmdCggelNpZzAsIHpTaWcxLCBzaGlmdENvdW50LCAmelNpZzAsICZ6U2lnMSApOworICAgIHpFeHAgLT0gc2hpZnRDb3VudDsKKyAgICByZXR1cm4KKyAgICAgICAgcm91bmRBbmRQYWNrRmxvYXR4ODAoIHJvdW5kaW5nUHJlY2lzaW9uLCB6U2lnbiwgekV4cCwgelNpZzAsIHpTaWcxICk7CisKK30KKworI2VuZGlmCisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIHRoZSByZXN1bHQgb2YgY29udmVydGluZyB0aGUgMzItYml0IHR3bydzIGNvbXBsZW1lbnQgaW50ZWdlciBgYScgdG8KK3RoZSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IGZvcm1hdC4gIFRoZSBjb252ZXJzaW9uIGlzIHBlcmZvcm1lZAorYWNjb3JkaW5nIHRvIHRoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IgQmluYXJ5IEZsb2F0aW5nLXBvaW50IEFyaXRobWV0aWMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworZmxvYXQzMiBpbnQzMl90b19mbG9hdDMyKCBpbnQzMiBhICkKK3sKKyAgICBmbGFnIHpTaWduOworCisgICAgaWYgKCBhID09IDAgKSByZXR1cm4gMDsKKyAgICBpZiAoIGEgPT0gMHg4MDAwMDAwMCApIHJldHVybiBwYWNrRmxvYXQzMiggMSwgMHg5RSwgMCApOworICAgIHpTaWduID0gKCBhIDwgMCApOworICAgIHJldHVybiBub3JtYWxpemVSb3VuZEFuZFBhY2tGbG9hdDMyKCB6U2lnbiwgMHg5QywgelNpZ24gPyAtIGEgOiBhICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoZSAzMi1iaXQgdHdvJ3MgY29tcGxlbWVudCBpbnRlZ2VyIGBhJyB0bwordGhlIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgZm9ybWF0LiAgVGhlIGNvbnZlcnNpb24gaXMgcGVyZm9ybWVkCithY2NvcmRpbmcgdG8gdGhlIElFQy9JRUVFIFN0YW5kYXJkIGZvciBCaW5hcnkgRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbG9hdDY0IGludDMyX3RvX2Zsb2F0NjQoIGludDMyIGEgKQoreworICAgIGZsYWcgYVNpZ247CisgICAgdWludDMyIGFic0E7CisgICAgaW50OCBzaGlmdENvdW50OworICAgIGJpdHM2NCB6U2lnOworCisgICAgaWYgKCBhID09IDAgKSByZXR1cm4gMDsKKyAgICBhU2lnbiA9ICggYSA8IDAgKTsKKyAgICBhYnNBID0gYVNpZ24gPyAtIGEgOiBhOworICAgIHNoaWZ0Q291bnQgPSBjb3VudExlYWRpbmdaZXJvczMyKCBhYnNBICkgKyAyMTsKKyAgICB6U2lnID0gYWJzQTsKKyAgICByZXR1cm4gcGFja0Zsb2F0NjQoIGFTaWduLCAweDQzMiAtIHNoaWZ0Q291bnQsIHpTaWc8PHNoaWZ0Q291bnQgKTsKKworfQorCisjaWZkZWYgRkxPQVRYODAKKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoZSAzMi1iaXQgdHdvJ3MgY29tcGxlbWVudCBpbnRlZ2VyIGBhJwordG8gdGhlIGV4dGVuZGVkIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgZm9ybWF0LiAgVGhlIGNvbnZlcnNpb24KK2lzIHBlcmZvcm1lZCBhY2NvcmRpbmcgdG8gdGhlIElFQy9JRUVFIFN0YW5kYXJkIGZvciBCaW5hcnkgRmxvYXRpbmctcG9pbnQKK0FyaXRobWV0aWMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworZmxvYXR4ODAgaW50MzJfdG9fZmxvYXR4ODAoIGludDMyIGEgKQoreworICAgIGZsYWcgelNpZ247CisgICAgdWludDMyIGFic0E7CisgICAgaW50OCBzaGlmdENvdW50OworICAgIGJpdHM2NCB6U2lnOworCisgICAgaWYgKCBhID09IDAgKSByZXR1cm4gcGFja0Zsb2F0eDgwKCAwLCAwLCAwICk7CisgICAgelNpZ24gPSAoIGEgPCAwICk7CisgICAgYWJzQSA9IHpTaWduID8gLSBhIDogYTsKKyAgICBzaGlmdENvdW50ID0gY291bnRMZWFkaW5nWmVyb3MzMiggYWJzQSApICsgMzI7CisgICAgelNpZyA9IGFic0E7CisgICAgcmV0dXJuIHBhY2tGbG9hdHg4MCggelNpZ24sIDB4NDAzRSAtIHNoaWZ0Q291bnQsIHpTaWc8PHNoaWZ0Q291bnQgKTsKKworfQorCisjZW5kaWYKKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoZSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlCitgYScgdG8gdGhlIDMyLWJpdCB0d28ncyBjb21wbGVtZW50IGludGVnZXIgZm9ybWF0LiAgVGhlIGNvbnZlcnNpb24gaXMKK3BlcmZvcm1lZCBhY2NvcmRpbmcgdG8gdGhlIElFQy9JRUVFIFN0YW5kYXJkIGZvciBCaW5hcnkgRmxvYXRpbmctcG9pbnQKK0FyaXRobWV0aWMtLS13aGljaCBtZWFucyBpbiBwYXJ0aWN1bGFyIHRoYXQgdGhlIGNvbnZlcnNpb24gaXMgcm91bmRlZAorYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHJvdW5kaW5nIG1vZGUuICBJZiBgYScgaXMgYSBOYU4sIHRoZSBsYXJnZXN0Citwb3NpdGl2ZSBpbnRlZ2VyIGlzIHJldHVybmVkLiAgT3RoZXJ3aXNlLCBpZiB0aGUgY29udmVyc2lvbiBvdmVyZmxvd3MsIHRoZQorbGFyZ2VzdCBpbnRlZ2VyIHdpdGggdGhlIHNhbWUgc2lnbiBhcyBgYScgaXMgcmV0dXJuZWQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworaW50MzIgZmxvYXQzMl90b19pbnQzMiggZmxvYXQzMiBhICkKK3sKKyAgICBmbGFnIGFTaWduOworICAgIGludDE2IGFFeHAsIHNoaWZ0Q291bnQ7CisgICAgYml0czMyIGFTaWc7CisgICAgYml0czY0IHpTaWc7CisKKyAgICBhU2lnID0gZXh0cmFjdEZsb2F0MzJGcmFjKCBhICk7CisgICAgYUV4cCA9IGV4dHJhY3RGbG9hdDMyRXhwKCBhICk7CisgICAgYVNpZ24gPSBleHRyYWN0RmxvYXQzMlNpZ24oIGEgKTsKKyAgICBpZiAoICggYUV4cCA9PSAweDdGRiApICYmIGFTaWcgKSBhU2lnbiA9IDA7CisgICAgaWYgKCBhRXhwICkgYVNpZyB8PSAweDAwODAwMDAwOworICAgIHNoaWZ0Q291bnQgPSAweEFGIC0gYUV4cDsKKyAgICB6U2lnID0gYVNpZzsKKyAgICB6U2lnIDw8PSAzMjsKKyAgICBpZiAoIDAgPCBzaGlmdENvdW50ICkgc2hpZnQ2NFJpZ2h0SmFtbWluZyggelNpZywgc2hpZnRDb3VudCwgJnpTaWcgKTsKKyAgICByZXR1cm4gcm91bmRBbmRQYWNrSW50MzIoIGFTaWduLCB6U2lnICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoZSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlCitgYScgdG8gdGhlIDMyLWJpdCB0d28ncyBjb21wbGVtZW50IGludGVnZXIgZm9ybWF0LiAgVGhlIGNvbnZlcnNpb24gaXMKK3BlcmZvcm1lZCBhY2NvcmRpbmcgdG8gdGhlIElFQy9JRUVFIFN0YW5kYXJkIGZvciBCaW5hcnkgRmxvYXRpbmctcG9pbnQKK0FyaXRobWV0aWMsIGV4Y2VwdCB0aGF0IHRoZSBjb252ZXJzaW9uIGlzIGFsd2F5cyByb3VuZGVkIHRvd2FyZCB6ZXJvLiAgSWYKK2BhJyBpcyBhIE5hTiwgdGhlIGxhcmdlc3QgcG9zaXRpdmUgaW50ZWdlciBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSwgaWYgdGhlCitjb252ZXJzaW9uIG92ZXJmbG93cywgdGhlIGxhcmdlc3QgaW50ZWdlciB3aXRoIHRoZSBzYW1lIHNpZ24gYXMgYGEnIGlzCityZXR1cm5lZC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitpbnQzMiBmbG9hdDMyX3RvX2ludDMyX3JvdW5kX3RvX3plcm8oIGZsb2F0MzIgYSApCit7CisgICAgZmxhZyBhU2lnbjsKKyAgICBpbnQxNiBhRXhwLCBzaGlmdENvdW50OworICAgIGJpdHMzMiBhU2lnOworICAgIGludDMyIHo7CisKKyAgICBhU2lnID0gZXh0cmFjdEZsb2F0MzJGcmFjKCBhICk7CisgICAgYUV4cCA9IGV4dHJhY3RGbG9hdDMyRXhwKCBhICk7CisgICAgYVNpZ24gPSBleHRyYWN0RmxvYXQzMlNpZ24oIGEgKTsKKyAgICBzaGlmdENvdW50ID0gYUV4cCAtIDB4OUU7CisgICAgaWYgKCAwIDw9IHNoaWZ0Q291bnQgKSB7CisgICAgICAgIGlmICggYSA9PSAweENGMDAwMDAwICkgcmV0dXJuIDB4ODAwMDAwMDA7CisgICAgICAgIGZsb2F0X3JhaXNlKCBmbG9hdF9mbGFnX2ludmFsaWQgKTsKKyAgICAgICAgaWYgKCAhIGFTaWduIHx8ICggKCBhRXhwID09IDB4RkYgKSAmJiBhU2lnICkgKSByZXR1cm4gMHg3RkZGRkZGRjsKKyAgICAgICAgcmV0dXJuIDB4ODAwMDAwMDA7CisgICAgfQorICAgIGVsc2UgaWYgKCBhRXhwIDw9IDB4N0UgKSB7CisgICAgICAgIGlmICggYUV4cCB8IGFTaWcgKSBmbG9hdF9leGNlcHRpb25fZmxhZ3MgfD0gZmxvYXRfZmxhZ19pbmV4YWN0OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgYVNpZyA9ICggYVNpZyB8IDB4MDA4MDAwMDAgKTw8ODsKKyAgICB6ID0gYVNpZz4+KCAtIHNoaWZ0Q291bnQgKTsKKyAgICBpZiAoIChiaXRzMzIpICggYVNpZzw8KCBzaGlmdENvdW50ICYgMzEgKSApICkgeworICAgICAgICBmbG9hdF9leGNlcHRpb25fZmxhZ3MgfD0gZmxvYXRfZmxhZ19pbmV4YWN0OworICAgIH0KKyAgICByZXR1cm4gYVNpZ24gPyAtIHogOiB6OworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIHRoZSByZXN1bHQgb2YgY29udmVydGluZyB0aGUgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZQorYGEnIHRvIHRoZSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IGZvcm1hdC4gIFRoZSBjb252ZXJzaW9uIGlzCitwZXJmb3JtZWQgYWNjb3JkaW5nIHRvIHRoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IgQmluYXJ5IEZsb2F0aW5nLXBvaW50CitBcml0aG1ldGljLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2Zsb2F0NjQgZmxvYXQzMl90b19mbG9hdDY0KCBmbG9hdDMyIGEgKQoreworICAgIGZsYWcgYVNpZ247CisgICAgaW50MTYgYUV4cDsKKyAgICBiaXRzMzIgYVNpZzsKKworICAgIGFTaWcgPSBleHRyYWN0RmxvYXQzMkZyYWMoIGEgKTsKKyAgICBhRXhwID0gZXh0cmFjdEZsb2F0MzJFeHAoIGEgKTsKKyAgICBhU2lnbiA9IGV4dHJhY3RGbG9hdDMyU2lnbiggYSApOworICAgIGlmICggYUV4cCA9PSAweEZGICkgeworICAgICAgICBpZiAoIGFTaWcgKSByZXR1cm4gY29tbW9uTmFOVG9GbG9hdDY0KCBmbG9hdDMyVG9Db21tb25OYU4oIGEgKSApOworICAgICAgICByZXR1cm4gcGFja0Zsb2F0NjQoIGFTaWduLCAweDdGRiwgMCApOworICAgIH0KKyAgICBpZiAoIGFFeHAgPT0gMCApIHsKKyAgICAgICAgaWYgKCBhU2lnID09IDAgKSByZXR1cm4gcGFja0Zsb2F0NjQoIGFTaWduLCAwLCAwICk7CisgICAgICAgIG5vcm1hbGl6ZUZsb2F0MzJTdWJub3JtYWwoIGFTaWcsICZhRXhwLCAmYVNpZyApOworICAgICAgICAtLWFFeHA7CisgICAgfQorICAgIHJldHVybiBwYWNrRmxvYXQ2NCggYVNpZ24sIGFFeHAgKyAweDM4MCwgKCAoYml0czY0KSBhU2lnICk8PDI5ICk7CisKK30KKworI2lmZGVmIEZMT0FUWDgwCisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIHRoZSByZXN1bHQgb2YgY29udmVydGluZyB0aGUgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZQorYGEnIHRvIHRoZSBleHRlbmRlZCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IGZvcm1hdC4gIFRoZSBjb252ZXJzaW9uCitpcyBwZXJmb3JtZWQgYWNjb3JkaW5nIHRvIHRoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IgQmluYXJ5IEZsb2F0aW5nLXBvaW50CitBcml0aG1ldGljLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2Zsb2F0eDgwIGZsb2F0MzJfdG9fZmxvYXR4ODAoIGZsb2F0MzIgYSApCit7CisgICAgZmxhZyBhU2lnbjsKKyAgICBpbnQxNiBhRXhwOworICAgIGJpdHMzMiBhU2lnOworCisgICAgYVNpZyA9IGV4dHJhY3RGbG9hdDMyRnJhYyggYSApOworICAgIGFFeHAgPSBleHRyYWN0RmxvYXQzMkV4cCggYSApOworICAgIGFTaWduID0gZXh0cmFjdEZsb2F0MzJTaWduKCBhICk7CisgICAgaWYgKCBhRXhwID09IDB4RkYgKSB7CisgICAgICAgIGlmICggYVNpZyApIHJldHVybiBjb21tb25OYU5Ub0Zsb2F0eDgwKCBmbG9hdDMyVG9Db21tb25OYU4oIGEgKSApOworICAgICAgICByZXR1cm4gcGFja0Zsb2F0eDgwKCBhU2lnbiwgMHg3RkZGLCBMSVQ2NCggMHg4MDAwMDAwMDAwMDAwMDAwICkgKTsKKyAgICB9CisgICAgaWYgKCBhRXhwID09IDAgKSB7CisgICAgICAgIGlmICggYVNpZyA9PSAwICkgcmV0dXJuIHBhY2tGbG9hdHg4MCggYVNpZ24sIDAsIDAgKTsKKyAgICAgICAgbm9ybWFsaXplRmxvYXQzMlN1Ym5vcm1hbCggYVNpZywgJmFFeHAsICZhU2lnICk7CisgICAgfQorICAgIGFTaWcgfD0gMHgwMDgwMDAwMDsKKyAgICByZXR1cm4gcGFja0Zsb2F0eDgwKCBhU2lnbiwgYUV4cCArIDB4M0Y4MCwgKCAoYml0czY0KSBhU2lnICk8PDQwICk7CisKK30KKworI2VuZGlmCisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSb3VuZHMgdGhlIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgYGEnIHRvIGFuIGludGVnZXIsIGFuZAorcmV0dXJucyB0aGUgcmVzdWx0IGFzIGEgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZS4gIFRoZQorb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBhY2NvcmRpbmcgdG8gdGhlIElFQy9JRUVFIFN0YW5kYXJkIGZvciBCaW5hcnkKK0Zsb2F0aW5nLXBvaW50IEFyaXRobWV0aWMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworZmxvYXQzMiBmbG9hdDMyX3JvdW5kX3RvX2ludCggZmxvYXQzMiBhICkKK3sKKyAgICBmbGFnIGFTaWduOworICAgIGludDE2IGFFeHA7CisgICAgYml0czMyIGxhc3RCaXRNYXNrLCByb3VuZEJpdHNNYXNrOworICAgIGludDggcm91bmRpbmdNb2RlOworICAgIGZsb2F0MzIgejsKKworICAgIGFFeHAgPSBleHRyYWN0RmxvYXQzMkV4cCggYSApOworICAgIGlmICggMHg5NiA8PSBhRXhwICkgeworICAgICAgICBpZiAoICggYUV4cCA9PSAweEZGICkgJiYgZXh0cmFjdEZsb2F0MzJGcmFjKCBhICkgKSB7CisgICAgICAgICAgICByZXR1cm4gcHJvcGFnYXRlRmxvYXQzMk5hTiggYSwgYSApOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhOworICAgIH0KKyAgICBpZiAoIGFFeHAgPD0gMHg3RSApIHsKKyAgICAgICAgaWYgKCAoYml0czMyKSAoIGE8PDEgKSA9PSAwICkgcmV0dXJuIGE7CisgICAgICAgIGZsb2F0X2V4Y2VwdGlvbl9mbGFncyB8PSBmbG9hdF9mbGFnX2luZXhhY3Q7CisgICAgICAgIGFTaWduID0gZXh0cmFjdEZsb2F0MzJTaWduKCBhICk7CisgICAgICAgIHN3aXRjaCAoIGZsb2F0X3JvdW5kaW5nX21vZGUgKSB7CisgICAgICAgICBjYXNlIGZsb2F0X3JvdW5kX25lYXJlc3RfZXZlbjoKKyAgICAgICAgICAgIGlmICggKCBhRXhwID09IDB4N0UgKSAmJiBleHRyYWN0RmxvYXQzMkZyYWMoIGEgKSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFja0Zsb2F0MzIoIGFTaWduLCAweDdGLCAwICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgZmxvYXRfcm91bmRfZG93bjoKKyAgICAgICAgICAgIHJldHVybiBhU2lnbiA/IDB4QkY4MDAwMDAgOiAwOworICAgICAgICAgY2FzZSBmbG9hdF9yb3VuZF91cDoKKyAgICAgICAgICAgIHJldHVybiBhU2lnbiA/IDB4ODAwMDAwMDAgOiAweDNGODAwMDAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwYWNrRmxvYXQzMiggYVNpZ24sIDAsIDAgKTsKKyAgICB9CisgICAgbGFzdEJpdE1hc2sgPSAxOworICAgIGxhc3RCaXRNYXNrIDw8PSAweDk2IC0gYUV4cDsKKyAgICByb3VuZEJpdHNNYXNrID0gbGFzdEJpdE1hc2sgLSAxOworICAgIHogPSBhOworICAgIHJvdW5kaW5nTW9kZSA9IGZsb2F0X3JvdW5kaW5nX21vZGU7CisgICAgaWYgKCByb3VuZGluZ01vZGUgPT0gZmxvYXRfcm91bmRfbmVhcmVzdF9ldmVuICkgeworICAgICAgICB6ICs9IGxhc3RCaXRNYXNrPj4xOworICAgICAgICBpZiAoICggeiAmIHJvdW5kQml0c01hc2sgKSA9PSAwICkgeiAmPSB+IGxhc3RCaXRNYXNrOworICAgIH0KKyAgICBlbHNlIGlmICggcm91bmRpbmdNb2RlICE9IGZsb2F0X3JvdW5kX3RvX3plcm8gKSB7CisgICAgICAgIGlmICggZXh0cmFjdEZsb2F0MzJTaWduKCB6ICkgXiAoIHJvdW5kaW5nTW9kZSA9PSBmbG9hdF9yb3VuZF91cCApICkgeworICAgICAgICAgICAgeiArPSByb3VuZEJpdHNNYXNrOworICAgICAgICB9CisgICAgfQorICAgIHogJj0gfiByb3VuZEJpdHNNYXNrOworICAgIGlmICggeiAhPSBhICkgZmxvYXRfZXhjZXB0aW9uX2ZsYWdzIHw9IGZsb2F0X2ZsYWdfaW5leGFjdDsKKyAgICByZXR1cm4gejsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyB0aGUgcmVzdWx0IG9mIGFkZGluZyB0aGUgYWJzb2x1dGUgdmFsdWVzIG9mIHRoZSBzaW5nbGUtcHJlY2lzaW9uCitmbG9hdGluZy1wb2ludCB2YWx1ZXMgYGEnIGFuZCBgYicuICBJZiBgelNpZ24nIGlzIHRydWUsIHRoZSBzdW0gaXMgbmVnYXRlZAorYmVmb3JlIGJlaW5nIHJldHVybmVkLiAgYHpTaWduJyBpcyBpZ25vcmVkIGlmIHRoZSByZXN1bHQgaXMgYSBOYU4uICBUaGUKK2FkZGl0aW9uIGlzIHBlcmZvcm1lZCBhY2NvcmRpbmcgdG8gdGhlIElFQy9JRUVFIFN0YW5kYXJkIGZvciBCaW5hcnkKK0Zsb2F0aW5nLXBvaW50IEFyaXRobWV0aWMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworc3RhdGljIGZsb2F0MzIgYWRkRmxvYXQzMlNpZ3MoIGZsb2F0MzIgYSwgZmxvYXQzMiBiLCBmbGFnIHpTaWduICkKK3sKKyAgICBpbnQxNiBhRXhwLCBiRXhwLCB6RXhwOworICAgIGJpdHMzMiBhU2lnLCBiU2lnLCB6U2lnOworICAgIGludDE2IGV4cERpZmY7CisKKyAgICBhU2lnID0gZXh0cmFjdEZsb2F0MzJGcmFjKCBhICk7CisgICAgYUV4cCA9IGV4dHJhY3RGbG9hdDMyRXhwKCBhICk7CisgICAgYlNpZyA9IGV4dHJhY3RGbG9hdDMyRnJhYyggYiApOworICAgIGJFeHAgPSBleHRyYWN0RmxvYXQzMkV4cCggYiApOworICAgIGV4cERpZmYgPSBhRXhwIC0gYkV4cDsKKyAgICBhU2lnIDw8PSA2OworICAgIGJTaWcgPDw9IDY7CisgICAgaWYgKCAwIDwgZXhwRGlmZiApIHsKKyAgICAgICAgaWYgKCBhRXhwID09IDB4RkYgKSB7CisgICAgICAgICAgICBpZiAoIGFTaWcgKSByZXR1cm4gcHJvcGFnYXRlRmxvYXQzMk5hTiggYSwgYiApOworICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBiRXhwID09IDAgKSB7CisgICAgICAgICAgICAtLWV4cERpZmY7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBiU2lnIHw9IDB4MjAwMDAwMDA7CisgICAgICAgIH0KKyAgICAgICAgc2hpZnQzMlJpZ2h0SmFtbWluZyggYlNpZywgZXhwRGlmZiwgJmJTaWcgKTsKKyAgICAgICAgekV4cCA9IGFFeHA7CisgICAgfQorICAgIGVsc2UgaWYgKCBleHBEaWZmIDwgMCApIHsKKyAgICAgICAgaWYgKCBiRXhwID09IDB4RkYgKSB7CisgICAgICAgICAgICBpZiAoIGJTaWcgKSByZXR1cm4gcHJvcGFnYXRlRmxvYXQzMk5hTiggYSwgYiApOworICAgICAgICAgICAgcmV0dXJuIHBhY2tGbG9hdDMyKCB6U2lnbiwgMHhGRiwgMCApOworICAgICAgICB9CisgICAgICAgIGlmICggYUV4cCA9PSAwICkgeworICAgICAgICAgICAgKytleHBEaWZmOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYVNpZyB8PSAweDIwMDAwMDAwOworICAgICAgICB9CisgICAgICAgIHNoaWZ0MzJSaWdodEphbW1pbmcoIGFTaWcsIC0gZXhwRGlmZiwgJmFTaWcgKTsKKyAgICAgICAgekV4cCA9IGJFeHA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAoIGFFeHAgPT0gMHhGRiApIHsKKyAgICAgICAgICAgIGlmICggYVNpZyB8IGJTaWcgKSByZXR1cm4gcHJvcGFnYXRlRmxvYXQzMk5hTiggYSwgYiApOworICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBhRXhwID09IDAgKSByZXR1cm4gcGFja0Zsb2F0MzIoIHpTaWduLCAwLCAoIGFTaWcgKyBiU2lnICk+PjYgKTsKKyAgICAgICAgelNpZyA9IDB4NDAwMDAwMDAgKyBhU2lnICsgYlNpZzsKKyAgICAgICAgekV4cCA9IGFFeHA7CisgICAgICAgIGdvdG8gcm91bmRBbmRQYWNrOworICAgIH0KKyAgICBhU2lnIHw9IDB4MjAwMDAwMDA7CisgICAgelNpZyA9ICggYVNpZyArIGJTaWcgKTw8MTsKKyAgICAtLXpFeHA7CisgICAgaWYgKCAoc2JpdHMzMikgelNpZyA8IDAgKSB7CisgICAgICAgIHpTaWcgPSBhU2lnICsgYlNpZzsKKyAgICAgICAgKyt6RXhwOworICAgIH0KKyByb3VuZEFuZFBhY2s6CisgICAgcmV0dXJuIHJvdW5kQW5kUGFja0Zsb2F0MzIoIHpTaWduLCB6RXhwLCB6U2lnICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIHJlc3VsdCBvZiBzdWJ0cmFjdGluZyB0aGUgYWJzb2x1dGUgdmFsdWVzIG9mIHRoZSBzaW5nbGUtCitwcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzIGBhJyBhbmQgYGInLiAgSWYgYHpTaWduJyBpcyB0cnVlLCB0aGUKK2RpZmZlcmVuY2UgaXMgbmVnYXRlZCBiZWZvcmUgYmVpbmcgcmV0dXJuZWQuICBgelNpZ24nIGlzIGlnbm9yZWQgaWYgdGhlCityZXN1bHQgaXMgYSBOYU4uICBUaGUgc3VidHJhY3Rpb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUKK1N0YW5kYXJkIGZvciBCaW5hcnkgRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitzdGF0aWMgZmxvYXQzMiBzdWJGbG9hdDMyU2lncyggZmxvYXQzMiBhLCBmbG9hdDMyIGIsIGZsYWcgelNpZ24gKQoreworICAgIGludDE2IGFFeHAsIGJFeHAsIHpFeHA7CisgICAgYml0czMyIGFTaWcsIGJTaWcsIHpTaWc7CisgICAgaW50MTYgZXhwRGlmZjsKKworICAgIGFTaWcgPSBleHRyYWN0RmxvYXQzMkZyYWMoIGEgKTsKKyAgICBhRXhwID0gZXh0cmFjdEZsb2F0MzJFeHAoIGEgKTsKKyAgICBiU2lnID0gZXh0cmFjdEZsb2F0MzJGcmFjKCBiICk7CisgICAgYkV4cCA9IGV4dHJhY3RGbG9hdDMyRXhwKCBiICk7CisgICAgZXhwRGlmZiA9IGFFeHAgLSBiRXhwOworICAgIGFTaWcgPDw9IDc7CisgICAgYlNpZyA8PD0gNzsKKyAgICBpZiAoIDAgPCBleHBEaWZmICkgZ290byBhRXhwQmlnZ2VyOworICAgIGlmICggZXhwRGlmZiA8IDAgKSBnb3RvIGJFeHBCaWdnZXI7CisgICAgaWYgKCBhRXhwID09IDB4RkYgKSB7CisgICAgICAgIGlmICggYVNpZyB8IGJTaWcgKSByZXR1cm4gcHJvcGFnYXRlRmxvYXQzMk5hTiggYSwgYiApOworICAgICAgICBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19pbnZhbGlkICk7CisgICAgICAgIHJldHVybiBmbG9hdDMyX2RlZmF1bHRfbmFuOworICAgIH0KKyAgICBpZiAoIGFFeHAgPT0gMCApIHsKKyAgICAgICAgYUV4cCA9IDE7CisgICAgICAgIGJFeHAgPSAxOworICAgIH0KKyAgICBpZiAoIGJTaWcgPCBhU2lnICkgZ290byBhQmlnZ2VyOworICAgIGlmICggYVNpZyA8IGJTaWcgKSBnb3RvIGJCaWdnZXI7CisgICAgcmV0dXJuIHBhY2tGbG9hdDMyKCBmbG9hdF9yb3VuZGluZ19tb2RlID09IGZsb2F0X3JvdW5kX2Rvd24sIDAsIDAgKTsKKyBiRXhwQmlnZ2VyOgorICAgIGlmICggYkV4cCA9PSAweEZGICkgeworICAgICAgICBpZiAoIGJTaWcgKSByZXR1cm4gcHJvcGFnYXRlRmxvYXQzMk5hTiggYSwgYiApOworICAgICAgICByZXR1cm4gcGFja0Zsb2F0MzIoIHpTaWduIF4gMSwgMHhGRiwgMCApOworICAgIH0KKyAgICBpZiAoIGFFeHAgPT0gMCApIHsKKyAgICAgICAgKytleHBEaWZmOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgYVNpZyB8PSAweDQwMDAwMDAwOworICAgIH0KKyAgICBzaGlmdDMyUmlnaHRKYW1taW5nKCBhU2lnLCAtIGV4cERpZmYsICZhU2lnICk7CisgICAgYlNpZyB8PSAweDQwMDAwMDAwOworIGJCaWdnZXI6CisgICAgelNpZyA9IGJTaWcgLSBhU2lnOworICAgIHpFeHAgPSBiRXhwOworICAgIHpTaWduIF49IDE7CisgICAgZ290byBub3JtYWxpemVSb3VuZEFuZFBhY2s7CisgYUV4cEJpZ2dlcjoKKyAgICBpZiAoIGFFeHAgPT0gMHhGRiApIHsKKyAgICAgICAgaWYgKCBhU2lnICkgcmV0dXJuIHByb3BhZ2F0ZUZsb2F0MzJOYU4oIGEsIGIgKTsKKyAgICAgICAgcmV0dXJuIGE7CisgICAgfQorICAgIGlmICggYkV4cCA9PSAwICkgeworICAgICAgICAtLWV4cERpZmY7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBiU2lnIHw9IDB4NDAwMDAwMDA7CisgICAgfQorICAgIHNoaWZ0MzJSaWdodEphbW1pbmcoIGJTaWcsIGV4cERpZmYsICZiU2lnICk7CisgICAgYVNpZyB8PSAweDQwMDAwMDAwOworIGFCaWdnZXI6CisgICAgelNpZyA9IGFTaWcgLSBiU2lnOworICAgIHpFeHAgPSBhRXhwOworIG5vcm1hbGl6ZVJvdW5kQW5kUGFjazoKKyAgICAtLXpFeHA7CisgICAgcmV0dXJuIG5vcm1hbGl6ZVJvdW5kQW5kUGFja0Zsb2F0MzIoIHpTaWduLCB6RXhwLCB6U2lnICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIHJlc3VsdCBvZiBhZGRpbmcgdGhlIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzIGBhJworYW5kIGBiJy4gIFRoZSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yCitCaW5hcnkgRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbG9hdDMyIGZsb2F0MzJfYWRkKCBmbG9hdDMyIGEsIGZsb2F0MzIgYiApCit7CisgICAgZmxhZyBhU2lnbiwgYlNpZ247CisKKyAgICBhU2lnbiA9IGV4dHJhY3RGbG9hdDMyU2lnbiggYSApOworICAgIGJTaWduID0gZXh0cmFjdEZsb2F0MzJTaWduKCBiICk7CisgICAgaWYgKCBhU2lnbiA9PSBiU2lnbiApIHsKKyAgICAgICAgcmV0dXJuIGFkZEZsb2F0MzJTaWdzKCBhLCBiLCBhU2lnbiApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHN1YkZsb2F0MzJTaWdzKCBhLCBiLCBhU2lnbiApOworICAgIH0KKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyB0aGUgcmVzdWx0IG9mIHN1YnRyYWN0aW5nIHRoZSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlcworYGEnIGFuZCBgYicuICBUaGUgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBhY2NvcmRpbmcgdG8gdGhlIElFQy9JRUVFIFN0YW5kYXJkCitmb3IgQmluYXJ5IEZsb2F0aW5nLXBvaW50IEFyaXRobWV0aWMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworZmxvYXQzMiBmbG9hdDMyX3N1YiggZmxvYXQzMiBhLCBmbG9hdDMyIGIgKQoreworICAgIGZsYWcgYVNpZ24sIGJTaWduOworCisgICAgYVNpZ24gPSBleHRyYWN0RmxvYXQzMlNpZ24oIGEgKTsKKyAgICBiU2lnbiA9IGV4dHJhY3RGbG9hdDMyU2lnbiggYiApOworICAgIGlmICggYVNpZ24gPT0gYlNpZ24gKSB7CisgICAgICAgIHJldHVybiBzdWJGbG9hdDMyU2lncyggYSwgYiwgYVNpZ24gKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybiBhZGRGbG9hdDMyU2lncyggYSwgYiwgYVNpZ24gKTsKKyAgICB9CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIHJlc3VsdCBvZiBtdWx0aXBseWluZyB0aGUgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZXMKK2BhJyBhbmQgYGInLiAgVGhlIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgYWNjb3JkaW5nIHRvIHRoZSBJRUMvSUVFRSBTdGFuZGFyZAorZm9yIEJpbmFyeSBGbG9hdGluZy1wb2ludCBBcml0aG1ldGljLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2Zsb2F0MzIgZmxvYXQzMl9tdWwoIGZsb2F0MzIgYSwgZmxvYXQzMiBiICkKK3sKKyAgICBmbGFnIGFTaWduLCBiU2lnbiwgelNpZ247CisgICAgaW50MTYgYUV4cCwgYkV4cCwgekV4cDsKKyAgICBiaXRzMzIgYVNpZywgYlNpZzsKKyAgICBiaXRzNjQgelNpZzY0OworICAgIGJpdHMzMiB6U2lnOworCisgICAgYVNpZyA9IGV4dHJhY3RGbG9hdDMyRnJhYyggYSApOworICAgIGFFeHAgPSBleHRyYWN0RmxvYXQzMkV4cCggYSApOworICAgIGFTaWduID0gZXh0cmFjdEZsb2F0MzJTaWduKCBhICk7CisgICAgYlNpZyA9IGV4dHJhY3RGbG9hdDMyRnJhYyggYiApOworICAgIGJFeHAgPSBleHRyYWN0RmxvYXQzMkV4cCggYiApOworICAgIGJTaWduID0gZXh0cmFjdEZsb2F0MzJTaWduKCBiICk7CisgICAgelNpZ24gPSBhU2lnbiBeIGJTaWduOworICAgIGlmICggYUV4cCA9PSAweEZGICkgeworICAgICAgICBpZiAoIGFTaWcgfHwgKCAoIGJFeHAgPT0gMHhGRiApICYmIGJTaWcgKSApIHsKKyAgICAgICAgICAgIHJldHVybiBwcm9wYWdhdGVGbG9hdDMyTmFOKCBhLCBiICk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCAoIGJFeHAgfCBiU2lnICkgPT0gMCApIHsKKyAgICAgICAgICAgIGZsb2F0X3JhaXNlKCBmbG9hdF9mbGFnX2ludmFsaWQgKTsKKyAgICAgICAgICAgIHJldHVybiBmbG9hdDMyX2RlZmF1bHRfbmFuOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwYWNrRmxvYXQzMiggelNpZ24sIDB4RkYsIDAgKTsKKyAgICB9CisgICAgaWYgKCBiRXhwID09IDB4RkYgKSB7CisgICAgICAgIGlmICggYlNpZyApIHJldHVybiBwcm9wYWdhdGVGbG9hdDMyTmFOKCBhLCBiICk7CisgICAgICAgIGlmICggKCBhRXhwIHwgYVNpZyApID09IDAgKSB7CisgICAgICAgICAgICBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19pbnZhbGlkICk7CisgICAgICAgICAgICByZXR1cm4gZmxvYXQzMl9kZWZhdWx0X25hbjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGFja0Zsb2F0MzIoIHpTaWduLCAweEZGLCAwICk7CisgICAgfQorICAgIGlmICggYUV4cCA9PSAwICkgeworICAgICAgICBpZiAoIGFTaWcgPT0gMCApIHJldHVybiBwYWNrRmxvYXQzMiggelNpZ24sIDAsIDAgKTsKKyAgICAgICAgbm9ybWFsaXplRmxvYXQzMlN1Ym5vcm1hbCggYVNpZywgJmFFeHAsICZhU2lnICk7CisgICAgfQorICAgIGlmICggYkV4cCA9PSAwICkgeworICAgICAgICBpZiAoIGJTaWcgPT0gMCApIHJldHVybiBwYWNrRmxvYXQzMiggelNpZ24sIDAsIDAgKTsKKyAgICAgICAgbm9ybWFsaXplRmxvYXQzMlN1Ym5vcm1hbCggYlNpZywgJmJFeHAsICZiU2lnICk7CisgICAgfQorICAgIHpFeHAgPSBhRXhwICsgYkV4cCAtIDB4N0Y7CisgICAgYVNpZyA9ICggYVNpZyB8IDB4MDA4MDAwMDAgKTw8NzsKKyAgICBiU2lnID0gKCBiU2lnIHwgMHgwMDgwMDAwMCApPDw4OworICAgIHNoaWZ0NjRSaWdodEphbW1pbmcoICggKGJpdHM2NCkgYVNpZyApICogYlNpZywgMzIsICZ6U2lnNjQgKTsKKyAgICB6U2lnID0gelNpZzY0OworICAgIGlmICggMCA8PSAoc2JpdHMzMikgKCB6U2lnPDwxICkgKSB7CisgICAgICAgIHpTaWcgPDw9IDE7CisgICAgICAgIC0tekV4cDsKKyAgICB9CisgICAgcmV0dXJuIHJvdW5kQW5kUGFja0Zsb2F0MzIoIHpTaWduLCB6RXhwLCB6U2lnICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIHJlc3VsdCBvZiBkaXZpZGluZyB0aGUgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSBgYScKK2J5IHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGBiJy4gIFRoZSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUKK0lFQy9JRUVFIFN0YW5kYXJkIGZvciBCaW5hcnkgRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbG9hdDMyIGZsb2F0MzJfZGl2KCBmbG9hdDMyIGEsIGZsb2F0MzIgYiApCit7CisgICAgZmxhZyBhU2lnbiwgYlNpZ24sIHpTaWduOworICAgIGludDE2IGFFeHAsIGJFeHAsIHpFeHA7CisgICAgYml0czMyIGFTaWcsIGJTaWcsIHpTaWc7CisKKyAgICBhU2lnID0gZXh0cmFjdEZsb2F0MzJGcmFjKCBhICk7CisgICAgYUV4cCA9IGV4dHJhY3RGbG9hdDMyRXhwKCBhICk7CisgICAgYVNpZ24gPSBleHRyYWN0RmxvYXQzMlNpZ24oIGEgKTsKKyAgICBiU2lnID0gZXh0cmFjdEZsb2F0MzJGcmFjKCBiICk7CisgICAgYkV4cCA9IGV4dHJhY3RGbG9hdDMyRXhwKCBiICk7CisgICAgYlNpZ24gPSBleHRyYWN0RmxvYXQzMlNpZ24oIGIgKTsKKyAgICB6U2lnbiA9IGFTaWduIF4gYlNpZ247CisgICAgaWYgKCBhRXhwID09IDB4RkYgKSB7CisgICAgICAgIGlmICggYVNpZyApIHJldHVybiBwcm9wYWdhdGVGbG9hdDMyTmFOKCBhLCBiICk7CisgICAgICAgIGlmICggYkV4cCA9PSAweEZGICkgeworICAgICAgICAgICAgaWYgKCBiU2lnICkgcmV0dXJuIHByb3BhZ2F0ZUZsb2F0MzJOYU4oIGEsIGIgKTsKKyAgICAgICAgICAgIGZsb2F0X3JhaXNlKCBmbG9hdF9mbGFnX2ludmFsaWQgKTsKKyAgICAgICAgICAgIHJldHVybiBmbG9hdDMyX2RlZmF1bHRfbmFuOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwYWNrRmxvYXQzMiggelNpZ24sIDB4RkYsIDAgKTsKKyAgICB9CisgICAgaWYgKCBiRXhwID09IDB4RkYgKSB7CisgICAgICAgIGlmICggYlNpZyApIHJldHVybiBwcm9wYWdhdGVGbG9hdDMyTmFOKCBhLCBiICk7CisgICAgICAgIHJldHVybiBwYWNrRmxvYXQzMiggelNpZ24sIDAsIDAgKTsKKyAgICB9CisgICAgaWYgKCBiRXhwID09IDAgKSB7CisgICAgICAgIGlmICggYlNpZyA9PSAwICkgeworICAgICAgICAgICAgaWYgKCAoIGFFeHAgfCBhU2lnICkgPT0gMCApIHsKKyAgICAgICAgICAgICAgICBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19pbnZhbGlkICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZsb2F0MzJfZGVmYXVsdF9uYW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19kaXZieXplcm8gKTsKKyAgICAgICAgICAgIHJldHVybiBwYWNrRmxvYXQzMiggelNpZ24sIDB4RkYsIDAgKTsKKyAgICAgICAgfQorICAgICAgICBub3JtYWxpemVGbG9hdDMyU3Vibm9ybWFsKCBiU2lnLCAmYkV4cCwgJmJTaWcgKTsKKyAgICB9CisgICAgaWYgKCBhRXhwID09IDAgKSB7CisgICAgICAgIGlmICggYVNpZyA9PSAwICkgcmV0dXJuIHBhY2tGbG9hdDMyKCB6U2lnbiwgMCwgMCApOworICAgICAgICBub3JtYWxpemVGbG9hdDMyU3Vibm9ybWFsKCBhU2lnLCAmYUV4cCwgJmFTaWcgKTsKKyAgICB9CisgICAgekV4cCA9IGFFeHAgLSBiRXhwICsgMHg3RDsKKyAgICBhU2lnID0gKCBhU2lnIHwgMHgwMDgwMDAwMCApPDw3OworICAgIGJTaWcgPSAoIGJTaWcgfCAweDAwODAwMDAwICk8PDg7CisgICAgaWYgKCBiU2lnIDw9ICggYVNpZyArIGFTaWcgKSApIHsKKyAgICAgICAgYVNpZyA+Pj0gMTsKKyAgICAgICAgKyt6RXhwOworICAgIH0KKyAgICB6U2lnID0gKCAoIChiaXRzNjQpIGFTaWcgKTw8MzIgKSAvIGJTaWc7CisgICAgaWYgKCAoIHpTaWcgJiAweDNGICkgPT0gMCApIHsKKyAgICAgICAgelNpZyB8PSAoICggKGJpdHM2NCkgYlNpZyApICogelNpZyAhPSAoIChiaXRzNjQpIGFTaWcgKTw8MzIgKTsKKyAgICB9CisgICAgcmV0dXJuIHJvdW5kQW5kUGFja0Zsb2F0MzIoIHpTaWduLCB6RXhwLCB6U2lnICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIHJlbWFpbmRlciBvZiB0aGUgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSBgYScKK3dpdGggcmVzcGVjdCB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBgYicuICBUaGUgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZAorYWNjb3JkaW5nIHRvIHRoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IgQmluYXJ5IEZsb2F0aW5nLXBvaW50IEFyaXRobWV0aWMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworZmxvYXQzMiBmbG9hdDMyX3JlbSggZmxvYXQzMiBhLCBmbG9hdDMyIGIgKQoreworICAgIGZsYWcgYVNpZ24sIGJTaWduLCB6U2lnbjsKKyAgICBpbnQxNiBhRXhwLCBiRXhwLCBleHBEaWZmOworICAgIGJpdHMzMiBhU2lnLCBiU2lnOworICAgIGJpdHMzMiBxOworICAgIGJpdHM2NCBhU2lnNjQsIGJTaWc2NCwgcTY0OworICAgIGJpdHMzMiBhbHRlcm5hdGVBU2lnOworICAgIHNiaXRzMzIgc2lnTWVhbjsKKworICAgIGFTaWcgPSBleHRyYWN0RmxvYXQzMkZyYWMoIGEgKTsKKyAgICBhRXhwID0gZXh0cmFjdEZsb2F0MzJFeHAoIGEgKTsKKyAgICBhU2lnbiA9IGV4dHJhY3RGbG9hdDMyU2lnbiggYSApOworICAgIGJTaWcgPSBleHRyYWN0RmxvYXQzMkZyYWMoIGIgKTsKKyAgICBiRXhwID0gZXh0cmFjdEZsb2F0MzJFeHAoIGIgKTsKKyAgICBiU2lnbiA9IGV4dHJhY3RGbG9hdDMyU2lnbiggYiApOworICAgIGlmICggYUV4cCA9PSAweEZGICkgeworICAgICAgICBpZiAoIGFTaWcgfHwgKCAoIGJFeHAgPT0gMHhGRiApICYmIGJTaWcgKSApIHsKKyAgICAgICAgICAgIHJldHVybiBwcm9wYWdhdGVGbG9hdDMyTmFOKCBhLCBiICk7CisgICAgICAgIH0KKyAgICAgICAgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfaW52YWxpZCApOworICAgICAgICByZXR1cm4gZmxvYXQzMl9kZWZhdWx0X25hbjsKKyAgICB9CisgICAgaWYgKCBiRXhwID09IDB4RkYgKSB7CisgICAgICAgIGlmICggYlNpZyApIHJldHVybiBwcm9wYWdhdGVGbG9hdDMyTmFOKCBhLCBiICk7CisgICAgICAgIHJldHVybiBhOworICAgIH0KKyAgICBpZiAoIGJFeHAgPT0gMCApIHsKKyAgICAgICAgaWYgKCBiU2lnID09IDAgKSB7CisgICAgICAgICAgICBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19pbnZhbGlkICk7CisgICAgICAgICAgICByZXR1cm4gZmxvYXQzMl9kZWZhdWx0X25hbjsKKyAgICAgICAgfQorICAgICAgICBub3JtYWxpemVGbG9hdDMyU3Vibm9ybWFsKCBiU2lnLCAmYkV4cCwgJmJTaWcgKTsKKyAgICB9CisgICAgaWYgKCBhRXhwID09IDAgKSB7CisgICAgICAgIGlmICggYVNpZyA9PSAwICkgcmV0dXJuIGE7CisgICAgICAgIG5vcm1hbGl6ZUZsb2F0MzJTdWJub3JtYWwoIGFTaWcsICZhRXhwLCAmYVNpZyApOworICAgIH0KKyAgICBleHBEaWZmID0gYUV4cCAtIGJFeHA7CisgICAgYVNpZyB8PSAweDAwODAwMDAwOworICAgIGJTaWcgfD0gMHgwMDgwMDAwMDsKKyAgICBpZiAoIGV4cERpZmYgPCAzMiApIHsKKyAgICAgICAgYVNpZyA8PD0gODsKKyAgICAgICAgYlNpZyA8PD0gODsKKyAgICAgICAgaWYgKCBleHBEaWZmIDwgMCApIHsKKyAgICAgICAgICAgIGlmICggZXhwRGlmZiA8IC0xICkgcmV0dXJuIGE7CisgICAgICAgICAgICBhU2lnID4+PSAxOworICAgICAgICB9CisgICAgICAgIHEgPSAoIGJTaWcgPD0gYVNpZyApOworICAgICAgICBpZiAoIHEgKSBhU2lnIC09IGJTaWc7CisgICAgICAgIGlmICggMCA8IGV4cERpZmYgKSB7CisgICAgICAgICAgICBxID0gKCAoIChiaXRzNjQpIGFTaWcgKTw8MzIgKSAvIGJTaWc7CisgICAgICAgICAgICBxID4+PSAzMiAtIGV4cERpZmY7CisgICAgICAgICAgICBiU2lnID4+PSAyOworICAgICAgICAgICAgYVNpZyA9ICggKCBhU2lnPj4xICk8PCggZXhwRGlmZiAtIDEgKSApIC0gYlNpZyAqIHE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhU2lnID4+PSAyOworICAgICAgICAgICAgYlNpZyA+Pj0gMjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCBiU2lnIDw9IGFTaWcgKSBhU2lnIC09IGJTaWc7CisgICAgICAgIGFTaWc2NCA9ICggKGJpdHM2NCkgYVNpZyApPDw0MDsKKyAgICAgICAgYlNpZzY0ID0gKCAoYml0czY0KSBiU2lnICk8PDQwOworICAgICAgICBleHBEaWZmIC09IDY0OworICAgICAgICB3aGlsZSAoIDAgPCBleHBEaWZmICkgeworICAgICAgICAgICAgcTY0ID0gZXN0aW1hdGVEaXYxMjhUbzY0KCBhU2lnNjQsIDAsIGJTaWc2NCApOworICAgICAgICAgICAgcTY0ID0gKCAyIDwgcTY0ICkgPyBxNjQgLSAyIDogMDsKKyAgICAgICAgICAgIGFTaWc2NCA9IC0gKCAoIGJTaWcgKiBxNjQgKTw8MzggKTsKKyAgICAgICAgICAgIGV4cERpZmYgLT0gNjI7CisgICAgICAgIH0KKyAgICAgICAgZXhwRGlmZiArPSA2NDsKKyAgICAgICAgcTY0ID0gZXN0aW1hdGVEaXYxMjhUbzY0KCBhU2lnNjQsIDAsIGJTaWc2NCApOworICAgICAgICBxNjQgPSAoIDIgPCBxNjQgKSA/IHE2NCAtIDIgOiAwOworICAgICAgICBxID0gcTY0Pj4oIDY0IC0gZXhwRGlmZiApOworICAgICAgICBiU2lnIDw8PSA2OworICAgICAgICBhU2lnID0gKCAoIGFTaWc2ND4+MzMgKTw8KCBleHBEaWZmIC0gMSApICkgLSBiU2lnICogcTsKKyAgICB9CisgICAgZG8geworICAgICAgICBhbHRlcm5hdGVBU2lnID0gYVNpZzsKKyAgICAgICAgKytxOworICAgICAgICBhU2lnIC09IGJTaWc7CisgICAgfSB3aGlsZSAoIDAgPD0gKHNiaXRzMzIpIGFTaWcgKTsKKyAgICBzaWdNZWFuID0gYVNpZyArIGFsdGVybmF0ZUFTaWc7CisgICAgaWYgKCAoIHNpZ01lYW4gPCAwICkgfHwgKCAoIHNpZ01lYW4gPT0gMCApICYmICggcSAmIDEgKSApICkgeworICAgICAgICBhU2lnID0gYWx0ZXJuYXRlQVNpZzsKKyAgICB9CisgICAgelNpZ24gPSAoIChzYml0czMyKSBhU2lnIDwgMCApOworICAgIGlmICggelNpZ24gKSBhU2lnID0gLSBhU2lnOworICAgIHJldHVybiBub3JtYWxpemVSb3VuZEFuZFBhY2tGbG9hdDMyKCBhU2lnbiBeIHpTaWduLCBiRXhwLCBhU2lnICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIHNxdWFyZSByb290IG9mIHRoZSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIGBhJy4KK1RoZSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yIEJpbmFyeQorRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbG9hdDMyIGZsb2F0MzJfc3FydCggZmxvYXQzMiBhICkKK3sKKyAgICBmbGFnIGFTaWduOworICAgIGludDE2IGFFeHAsIHpFeHA7CisgICAgYml0czMyIGFTaWcsIHpTaWc7CisgICAgYml0czY0IHJlbSwgdGVybTsKKworICAgIGFTaWcgPSBleHRyYWN0RmxvYXQzMkZyYWMoIGEgKTsKKyAgICBhRXhwID0gZXh0cmFjdEZsb2F0MzJFeHAoIGEgKTsKKyAgICBhU2lnbiA9IGV4dHJhY3RGbG9hdDMyU2lnbiggYSApOworICAgIGlmICggYUV4cCA9PSAweEZGICkgeworICAgICAgICBpZiAoIGFTaWcgKSByZXR1cm4gcHJvcGFnYXRlRmxvYXQzMk5hTiggYSwgMCApOworICAgICAgICBpZiAoICEgYVNpZ24gKSByZXR1cm4gYTsKKyAgICAgICAgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfaW52YWxpZCApOworICAgICAgICByZXR1cm4gZmxvYXQzMl9kZWZhdWx0X25hbjsKKyAgICB9CisgICAgaWYgKCBhU2lnbiApIHsKKyAgICAgICAgaWYgKCAoIGFFeHAgfCBhU2lnICkgPT0gMCApIHJldHVybiBhOworICAgICAgICBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19pbnZhbGlkICk7CisgICAgICAgIHJldHVybiBmbG9hdDMyX2RlZmF1bHRfbmFuOworICAgIH0KKyAgICBpZiAoIGFFeHAgPT0gMCApIHsKKyAgICAgICAgaWYgKCBhU2lnID09IDAgKSByZXR1cm4gMDsKKyAgICAgICAgbm9ybWFsaXplRmxvYXQzMlN1Ym5vcm1hbCggYVNpZywgJmFFeHAsICZhU2lnICk7CisgICAgfQorICAgIHpFeHAgPSAoICggYUV4cCAtIDB4N0YgKT4+MSApICsgMHg3RTsKKyAgICBhU2lnID0gKCBhU2lnIHwgMHgwMDgwMDAwMCApPDw4OworICAgIHpTaWcgPSBlc3RpbWF0ZVNxcnQzMiggYUV4cCwgYVNpZyApICsgMjsKKyAgICBpZiAoICggelNpZyAmIDB4N0YgKSA8PSA1ICkgeworICAgICAgICBpZiAoIHpTaWcgPCAyICkgeworICAgICAgICAgICAgelNpZyA9IDB4RkZGRkZGRkY7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhU2lnID4+PSBhRXhwICYgMTsKKyAgICAgICAgICAgIHRlcm0gPSAoIChiaXRzNjQpIHpTaWcgKSAqIHpTaWc7CisgICAgICAgICAgICByZW0gPSAoICggKGJpdHM2NCkgYVNpZyApPDwzMiApIC0gdGVybTsKKyAgICAgICAgICAgIHdoaWxlICggKHNiaXRzNjQpIHJlbSA8IDAgKSB7CisgICAgICAgICAgICAgICAgLS16U2lnOworICAgICAgICAgICAgICAgIHJlbSArPSAoICggKGJpdHM2NCkgelNpZyApPDwxICkgfCAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgelNpZyB8PSAoIHJlbSAhPSAwICk7CisgICAgICAgIH0KKyAgICB9CisgICAgc2hpZnQzMlJpZ2h0SmFtbWluZyggelNpZywgMSwgJnpTaWcgKTsKKyAgICByZXR1cm4gcm91bmRBbmRQYWNrRmxvYXQzMiggMCwgekV4cCwgelNpZyApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIDEgaWYgdGhlIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgYGEnIGlzIGVxdWFsIHRvIHRoZQorY29ycmVzcG9uZGluZyB2YWx1ZSBgYicsIGFuZCAwIG90aGVyd2lzZS4gIFRoZSBjb21wYXJpc29uIGlzIHBlcmZvcm1lZAorYWNjb3JkaW5nIHRvIHRoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IgQmluYXJ5IEZsb2F0aW5nLXBvaW50IEFyaXRobWV0aWMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworZmxhZyBmbG9hdDMyX2VxKCBmbG9hdDMyIGEsIGZsb2F0MzIgYiApCit7CisKKyAgICBpZiAoICAgICggKCBleHRyYWN0RmxvYXQzMkV4cCggYSApID09IDB4RkYgKSAmJiBleHRyYWN0RmxvYXQzMkZyYWMoIGEgKSApCisgICAgICAgICB8fCAoICggZXh0cmFjdEZsb2F0MzJFeHAoIGIgKSA9PSAweEZGICkgJiYgZXh0cmFjdEZsb2F0MzJGcmFjKCBiICkgKQorICAgICAgICkgeworICAgICAgICBpZiAoIGZsb2F0MzJfaXNfc2lnbmFsaW5nX25hbiggYSApIHx8IGZsb2F0MzJfaXNfc2lnbmFsaW5nX25hbiggYiApICkgeworICAgICAgICAgICAgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfaW52YWxpZCApOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gKCBhID09IGIgKSB8fCAoIChiaXRzMzIpICggKCBhIHwgYiApPDwxICkgPT0gMCApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIDEgaWYgdGhlIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgYGEnIGlzIGxlc3MgdGhhbiBvcgorZXF1YWwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgYGInLCBhbmQgMCBvdGhlcndpc2UuICBUaGUgY29tcGFyaXNvbiBpcworcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yIEJpbmFyeSBGbG9hdGluZy1wb2ludAorQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbGFnIGZsb2F0MzJfbGUoIGZsb2F0MzIgYSwgZmxvYXQzMiBiICkKK3sKKyAgICBmbGFnIGFTaWduLCBiU2lnbjsKKworICAgIGlmICggICAgKCAoIGV4dHJhY3RGbG9hdDMyRXhwKCBhICkgPT0gMHhGRiApICYmIGV4dHJhY3RGbG9hdDMyRnJhYyggYSApICkKKyAgICAgICAgIHx8ICggKCBleHRyYWN0RmxvYXQzMkV4cCggYiApID09IDB4RkYgKSAmJiBleHRyYWN0RmxvYXQzMkZyYWMoIGIgKSApCisgICAgICAgKSB7CisgICAgICAgIGZsb2F0X3JhaXNlKCBmbG9hdF9mbGFnX2ludmFsaWQgKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGFTaWduID0gZXh0cmFjdEZsb2F0MzJTaWduKCBhICk7CisgICAgYlNpZ24gPSBleHRyYWN0RmxvYXQzMlNpZ24oIGIgKTsKKyAgICBpZiAoIGFTaWduICE9IGJTaWduICkgcmV0dXJuIGFTaWduIHx8ICggKGJpdHMzMikgKCAoIGEgfCBiICk8PDEgKSA9PSAwICk7CisgICAgcmV0dXJuICggYSA9PSBiICkgfHwgKCBhU2lnbiBeICggYSA8IGIgKSApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIDEgaWYgdGhlIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgYGEnIGlzIGxlc3MgdGhhbgordGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgYGInLCBhbmQgMCBvdGhlcndpc2UuICBUaGUgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQKK2FjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yIEJpbmFyeSBGbG9hdGluZy1wb2ludCBBcml0aG1ldGljLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2ZsYWcgZmxvYXQzMl9sdCggZmxvYXQzMiBhLCBmbG9hdDMyIGIgKQoreworICAgIGZsYWcgYVNpZ24sIGJTaWduOworCisgICAgaWYgKCAgICAoICggZXh0cmFjdEZsb2F0MzJFeHAoIGEgKSA9PSAweEZGICkgJiYgZXh0cmFjdEZsb2F0MzJGcmFjKCBhICkgKQorICAgICAgICAgfHwgKCAoIGV4dHJhY3RGbG9hdDMyRXhwKCBiICkgPT0gMHhGRiApICYmIGV4dHJhY3RGbG9hdDMyRnJhYyggYiApICkKKyAgICAgICApIHsKKyAgICAgICAgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfaW52YWxpZCApOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgYVNpZ24gPSBleHRyYWN0RmxvYXQzMlNpZ24oIGEgKTsKKyAgICBiU2lnbiA9IGV4dHJhY3RGbG9hdDMyU2lnbiggYiApOworICAgIGlmICggYVNpZ24gIT0gYlNpZ24gKSByZXR1cm4gYVNpZ24gJiYgKCAoYml0czMyKSAoICggYSB8IGIgKTw8MSApICE9IDAgKTsKKyAgICByZXR1cm4gKCBhICE9IGIgKSAmJiAoIGFTaWduIF4gKCBhIDwgYiApICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgMSBpZiB0aGUgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSBgYScgaXMgZXF1YWwgdG8gdGhlCitjb3JyZXNwb25kaW5nIHZhbHVlIGBiJywgYW5kIDAgb3RoZXJ3aXNlLiAgVGhlIGludmFsaWQgZXhjZXB0aW9uIGlzIHJhaXNlZAoraWYgZWl0aGVyIG9wZXJhbmQgaXMgYSBOYU4uICBPdGhlcndpc2UsIHRoZSBjb21wYXJpc29uIGlzIHBlcmZvcm1lZAorYWNjb3JkaW5nIHRvIHRoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IgQmluYXJ5IEZsb2F0aW5nLXBvaW50IEFyaXRobWV0aWMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworZmxhZyBmbG9hdDMyX2VxX3NpZ25hbGluZyggZmxvYXQzMiBhLCBmbG9hdDMyIGIgKQoreworCisgICAgaWYgKCAgICAoICggZXh0cmFjdEZsb2F0MzJFeHAoIGEgKSA9PSAweEZGICkgJiYgZXh0cmFjdEZsb2F0MzJGcmFjKCBhICkgKQorICAgICAgICAgfHwgKCAoIGV4dHJhY3RGbG9hdDMyRXhwKCBiICkgPT0gMHhGRiApICYmIGV4dHJhY3RGbG9hdDMyRnJhYyggYiApICkKKyAgICAgICApIHsKKyAgICAgICAgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfaW52YWxpZCApOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuICggYSA9PSBiICkgfHwgKCAoYml0czMyKSAoICggYSB8IGIgKTw8MSApID09IDAgKTsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyAxIGlmIHRoZSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIGBhJyBpcyBsZXNzIHRoYW4gb3IKK2VxdWFsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGBiJywgYW5kIDAgb3RoZXJ3aXNlLiAgUXVpZXQgTmFOcyBkbyBub3QKK2NhdXNlIGFuIGV4Y2VwdGlvbi4gIE90aGVyd2lzZSwgdGhlIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUKK0lFQy9JRUVFIFN0YW5kYXJkIGZvciBCaW5hcnkgRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbGFnIGZsb2F0MzJfbGVfcXVpZXQoIGZsb2F0MzIgYSwgZmxvYXQzMiBiICkKK3sKKyAgICBmbGFnIGFTaWduLCBiU2lnbjsKKyAgICAvL2ludDE2IGFFeHAsIGJFeHA7CisKKyAgICBpZiAoICAgICggKCBleHRyYWN0RmxvYXQzMkV4cCggYSApID09IDB4RkYgKSAmJiBleHRyYWN0RmxvYXQzMkZyYWMoIGEgKSApCisgICAgICAgICB8fCAoICggZXh0cmFjdEZsb2F0MzJFeHAoIGIgKSA9PSAweEZGICkgJiYgZXh0cmFjdEZsb2F0MzJGcmFjKCBiICkgKQorICAgICAgICkgeworICAgICAgICBpZiAoIGZsb2F0MzJfaXNfc2lnbmFsaW5nX25hbiggYSApIHx8IGZsb2F0MzJfaXNfc2lnbmFsaW5nX25hbiggYiApICkgeworICAgICAgICAgICAgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfaW52YWxpZCApOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBhU2lnbiA9IGV4dHJhY3RGbG9hdDMyU2lnbiggYSApOworICAgIGJTaWduID0gZXh0cmFjdEZsb2F0MzJTaWduKCBiICk7CisgICAgaWYgKCBhU2lnbiAhPSBiU2lnbiApIHJldHVybiBhU2lnbiB8fCAoIChiaXRzMzIpICggKCBhIHwgYiApPDwxICkgPT0gMCApOworICAgIHJldHVybiAoIGEgPT0gYiApIHx8ICggYVNpZ24gXiAoIGEgPCBiICkgKTsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyAxIGlmIHRoZSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIGBhJyBpcyBsZXNzIHRoYW4KK3RoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGBiJywgYW5kIDAgb3RoZXJ3aXNlLiAgUXVpZXQgTmFOcyBkbyBub3QgY2F1c2UgYW4KK2V4Y2VwdGlvbi4gIE90aGVyd2lzZSwgdGhlIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUKK1N0YW5kYXJkIGZvciBCaW5hcnkgRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbGFnIGZsb2F0MzJfbHRfcXVpZXQoIGZsb2F0MzIgYSwgZmxvYXQzMiBiICkKK3sKKyAgICBmbGFnIGFTaWduLCBiU2lnbjsKKworICAgIGlmICggICAgKCAoIGV4dHJhY3RGbG9hdDMyRXhwKCBhICkgPT0gMHhGRiApICYmIGV4dHJhY3RGbG9hdDMyRnJhYyggYSApICkKKyAgICAgICAgIHx8ICggKCBleHRyYWN0RmxvYXQzMkV4cCggYiApID09IDB4RkYgKSAmJiBleHRyYWN0RmxvYXQzMkZyYWMoIGIgKSApCisgICAgICAgKSB7CisgICAgICAgIGlmICggZmxvYXQzMl9pc19zaWduYWxpbmdfbmFuKCBhICkgfHwgZmxvYXQzMl9pc19zaWduYWxpbmdfbmFuKCBiICkgKSB7CisgICAgICAgICAgICBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19pbnZhbGlkICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGFTaWduID0gZXh0cmFjdEZsb2F0MzJTaWduKCBhICk7CisgICAgYlNpZ24gPSBleHRyYWN0RmxvYXQzMlNpZ24oIGIgKTsKKyAgICBpZiAoIGFTaWduICE9IGJTaWduICkgcmV0dXJuIGFTaWduICYmICggKGJpdHMzMikgKCAoIGEgfCBiICk8PDEgKSAhPSAwICk7CisgICAgcmV0dXJuICggYSAhPSBiICkgJiYgKCBhU2lnbiBeICggYSA8IGIgKSApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIHRoZSByZXN1bHQgb2YgY29udmVydGluZyB0aGUgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZQorYGEnIHRvIHRoZSAzMi1iaXQgdHdvJ3MgY29tcGxlbWVudCBpbnRlZ2VyIGZvcm1hdC4gIFRoZSBjb252ZXJzaW9uIGlzCitwZXJmb3JtZWQgYWNjb3JkaW5nIHRvIHRoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IgQmluYXJ5IEZsb2F0aW5nLXBvaW50CitBcml0aG1ldGljLS0td2hpY2ggbWVhbnMgaW4gcGFydGljdWxhciB0aGF0IHRoZSBjb252ZXJzaW9uIGlzIHJvdW5kZWQKK2FjY29yZGluZyB0byB0aGUgY3VycmVudCByb3VuZGluZyBtb2RlLiAgSWYgYGEnIGlzIGEgTmFOLCB0aGUgbGFyZ2VzdAorcG9zaXRpdmUgaW50ZWdlciBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSwgaWYgdGhlIGNvbnZlcnNpb24gb3ZlcmZsb3dzLCB0aGUKK2xhcmdlc3QgaW50ZWdlciB3aXRoIHRoZSBzYW1lIHNpZ24gYXMgYGEnIGlzIHJldHVybmVkLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2ludDMyIGZsb2F0NjRfdG9faW50MzIoIGZsb2F0NjQgYSApCit7CisgICAgZmxhZyBhU2lnbjsKKyAgICBpbnQxNiBhRXhwLCBzaGlmdENvdW50OworICAgIGJpdHM2NCBhU2lnOworCisgICAgYVNpZyA9IGV4dHJhY3RGbG9hdDY0RnJhYyggYSApOworICAgIGFFeHAgPSBleHRyYWN0RmxvYXQ2NEV4cCggYSApOworICAgIGFTaWduID0gZXh0cmFjdEZsb2F0NjRTaWduKCBhICk7CisgICAgaWYgKCAoIGFFeHAgPT0gMHg3RkYgKSAmJiBhU2lnICkgYVNpZ24gPSAwOworICAgIGlmICggYUV4cCApIGFTaWcgfD0gTElUNjQoIDB4MDAxMDAwMDAwMDAwMDAwMCApOworICAgIHNoaWZ0Q291bnQgPSAweDQyQyAtIGFFeHA7CisgICAgaWYgKCAwIDwgc2hpZnRDb3VudCApIHNoaWZ0NjRSaWdodEphbW1pbmcoIGFTaWcsIHNoaWZ0Q291bnQsICZhU2lnICk7CisgICAgcmV0dXJuIHJvdW5kQW5kUGFja0ludDMyKCBhU2lnbiwgYVNpZyApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIHRoZSByZXN1bHQgb2YgY29udmVydGluZyB0aGUgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZQorYGEnIHRvIHRoZSAzMi1iaXQgdHdvJ3MgY29tcGxlbWVudCBpbnRlZ2VyIGZvcm1hdC4gIFRoZSBjb252ZXJzaW9uIGlzCitwZXJmb3JtZWQgYWNjb3JkaW5nIHRvIHRoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IgQmluYXJ5IEZsb2F0aW5nLXBvaW50CitBcml0aG1ldGljLCBleGNlcHQgdGhhdCB0aGUgY29udmVyc2lvbiBpcyBhbHdheXMgcm91bmRlZCB0b3dhcmQgemVyby4gIElmCitgYScgaXMgYSBOYU4sIHRoZSBsYXJnZXN0IHBvc2l0aXZlIGludGVnZXIgaXMgcmV0dXJuZWQuICBPdGhlcndpc2UsIGlmIHRoZQorY29udmVyc2lvbiBvdmVyZmxvd3MsIHRoZSBsYXJnZXN0IGludGVnZXIgd2l0aCB0aGUgc2FtZSBzaWduIGFzIGBhJyBpcworcmV0dXJuZWQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworaW50MzIgZmxvYXQ2NF90b19pbnQzMl9yb3VuZF90b196ZXJvKCBmbG9hdDY0IGEgKQoreworICAgIGZsYWcgYVNpZ247CisgICAgaW50MTYgYUV4cCwgc2hpZnRDb3VudDsKKyAgICBiaXRzNjQgYVNpZywgc2F2ZWRBU2lnOworICAgIGludDMyIHo7CisKKyAgICBhU2lnID0gZXh0cmFjdEZsb2F0NjRGcmFjKCBhICk7CisgICAgYUV4cCA9IGV4dHJhY3RGbG9hdDY0RXhwKCBhICk7CisgICAgYVNpZ24gPSBleHRyYWN0RmxvYXQ2NFNpZ24oIGEgKTsKKyAgICBzaGlmdENvdW50ID0gMHg0MzMgLSBhRXhwOworICAgIGlmICggc2hpZnRDb3VudCA8IDIxICkgeworICAgICAgICBpZiAoICggYUV4cCA9PSAweDdGRiApICYmIGFTaWcgKSBhU2lnbiA9IDA7CisgICAgICAgIGdvdG8gaW52YWxpZDsKKyAgICB9CisgICAgZWxzZSBpZiAoIDUyIDwgc2hpZnRDb3VudCApIHsKKyAgICAgICAgaWYgKCBhRXhwIHx8IGFTaWcgKSBmbG9hdF9leGNlcHRpb25fZmxhZ3MgfD0gZmxvYXRfZmxhZ19pbmV4YWN0OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgYVNpZyB8PSBMSVQ2NCggMHgwMDEwMDAwMDAwMDAwMDAwICk7CisgICAgc2F2ZWRBU2lnID0gYVNpZzsKKyAgICBhU2lnID4+PSBzaGlmdENvdW50OworICAgIHogPSBhU2lnOworICAgIGlmICggYVNpZ24gKSB6ID0gLSB6OworICAgIGlmICggKCB6IDwgMCApIF4gYVNpZ24gKSB7CisgaW52YWxpZDoKKyAgICAgICAgZmxvYXRfZXhjZXB0aW9uX2ZsYWdzIHw9IGZsb2F0X2ZsYWdfaW52YWxpZDsKKyAgICAgICAgcmV0dXJuIGFTaWduID8gMHg4MDAwMDAwMCA6IDB4N0ZGRkZGRkY7CisgICAgfQorICAgIGlmICggKCBhU2lnPDxzaGlmdENvdW50ICkgIT0gc2F2ZWRBU2lnICkgeworICAgICAgICBmbG9hdF9leGNlcHRpb25fZmxhZ3MgfD0gZmxvYXRfZmxhZ19pbmV4YWN0OworICAgIH0KKyAgICByZXR1cm4gejsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgdGhlIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUKK2BhJyB0byB0aGUgMzItYml0IHR3bydzIGNvbXBsZW1lbnQgdW5zaWduZWQgaW50ZWdlciBmb3JtYXQuICBUaGUgY29udmVyc2lvbgoraXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yIEJpbmFyeSBGbG9hdGluZy1wb2ludAorQXJpdGhtZXRpYy0tLXdoaWNoIG1lYW5zIGluIHBhcnRpY3VsYXIgdGhhdCB0aGUgY29udmVyc2lvbiBpcyByb3VuZGVkCithY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcm91bmRpbmcgbW9kZS4gIElmIGBhJyBpcyBhIE5hTiwgdGhlIGxhcmdlc3QKK3Bvc2l0aXZlIGludGVnZXIgaXMgcmV0dXJuZWQuICBPdGhlcndpc2UsIGlmIHRoZSBjb252ZXJzaW9uIG92ZXJmbG93cywgdGhlCitsYXJnZXN0IHBvc2l0aXZlIGludGVnZXIgaXMgcmV0dXJuZWQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworaW50MzIgZmxvYXQ2NF90b191aW50MzIoIGZsb2F0NjQgYSApCit7CisgICAgZmxhZyBhU2lnbjsKKyAgICBpbnQxNiBhRXhwLCBzaGlmdENvdW50OworICAgIGJpdHM2NCBhU2lnOworCisgICAgYVNpZyA9IGV4dHJhY3RGbG9hdDY0RnJhYyggYSApOworICAgIGFFeHAgPSBleHRyYWN0RmxvYXQ2NEV4cCggYSApOworICAgIGFTaWduID0gMDsgLy9leHRyYWN0RmxvYXQ2NFNpZ24oIGEgKTsKKyAgICAvL2lmICggKCBhRXhwID09IDB4N0ZGICkgJiYgYVNpZyApIGFTaWduID0gMDsKKyAgICBpZiAoIGFFeHAgKSBhU2lnIHw9IExJVDY0KCAweDAwMTAwMDAwMDAwMDAwMDAgKTsKKyAgICBzaGlmdENvdW50ID0gMHg0MkMgLSBhRXhwOworICAgIGlmICggMCA8IHNoaWZ0Q291bnQgKSBzaGlmdDY0UmlnaHRKYW1taW5nKCBhU2lnLCBzaGlmdENvdW50LCAmYVNpZyApOworICAgIHJldHVybiByb3VuZEFuZFBhY2tJbnQzMiggYVNpZ24sIGFTaWcgKTsKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoZSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlCitgYScgdG8gdGhlIDMyLWJpdCB0d28ncyBjb21wbGVtZW50IGludGVnZXIgZm9ybWF0LiAgVGhlIGNvbnZlcnNpb24gaXMKK3BlcmZvcm1lZCBhY2NvcmRpbmcgdG8gdGhlIElFQy9JRUVFIFN0YW5kYXJkIGZvciBCaW5hcnkgRmxvYXRpbmctcG9pbnQKK0FyaXRobWV0aWMsIGV4Y2VwdCB0aGF0IHRoZSBjb252ZXJzaW9uIGlzIGFsd2F5cyByb3VuZGVkIHRvd2FyZCB6ZXJvLiAgSWYKK2BhJyBpcyBhIE5hTiwgdGhlIGxhcmdlc3QgcG9zaXRpdmUgaW50ZWdlciBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSwgaWYgdGhlCitjb252ZXJzaW9uIG92ZXJmbG93cywgdGhlIGxhcmdlc3QgcG9zaXRpdmUgaW50ZWdlciBpcyByZXR1cm5lZC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitpbnQzMiBmbG9hdDY0X3RvX3VpbnQzMl9yb3VuZF90b196ZXJvKCBmbG9hdDY0IGEgKQoreworICAgIGZsYWcgYVNpZ247CisgICAgaW50MTYgYUV4cCwgc2hpZnRDb3VudDsKKyAgICBiaXRzNjQgYVNpZywgc2F2ZWRBU2lnOworICAgIGludDMyIHo7CisKKyAgICBhU2lnID0gZXh0cmFjdEZsb2F0NjRGcmFjKCBhICk7CisgICAgYUV4cCA9IGV4dHJhY3RGbG9hdDY0RXhwKCBhICk7CisgICAgYVNpZ24gPSBleHRyYWN0RmxvYXQ2NFNpZ24oIGEgKTsKKyAgICBzaGlmdENvdW50ID0gMHg0MzMgLSBhRXhwOworICAgIGlmICggc2hpZnRDb3VudCA8IDIxICkgeworICAgICAgICBpZiAoICggYUV4cCA9PSAweDdGRiApICYmIGFTaWcgKSBhU2lnbiA9IDA7CisgICAgICAgIGdvdG8gaW52YWxpZDsKKyAgICB9CisgICAgZWxzZSBpZiAoIDUyIDwgc2hpZnRDb3VudCApIHsKKyAgICAgICAgaWYgKCBhRXhwIHx8IGFTaWcgKSBmbG9hdF9leGNlcHRpb25fZmxhZ3MgfD0gZmxvYXRfZmxhZ19pbmV4YWN0OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgYVNpZyB8PSBMSVQ2NCggMHgwMDEwMDAwMDAwMDAwMDAwICk7CisgICAgc2F2ZWRBU2lnID0gYVNpZzsKKyAgICBhU2lnID4+PSBzaGlmdENvdW50OworICAgIHogPSBhU2lnOworICAgIGlmICggYVNpZ24gKSB6ID0gLSB6OworICAgIGlmICggKCB6IDwgMCApIF4gYVNpZ24gKSB7CisgaW52YWxpZDoKKyAgICAgICAgZmxvYXRfZXhjZXB0aW9uX2ZsYWdzIHw9IGZsb2F0X2ZsYWdfaW52YWxpZDsKKyAgICAgICAgcmV0dXJuIGFTaWduID8gMHg4MDAwMDAwMCA6IDB4N0ZGRkZGRkY7CisgICAgfQorICAgIGlmICggKCBhU2lnPDxzaGlmdENvdW50ICkgIT0gc2F2ZWRBU2lnICkgeworICAgICAgICBmbG9hdF9leGNlcHRpb25fZmxhZ3MgfD0gZmxvYXRfZmxhZ19pbmV4YWN0OworICAgIH0KKyAgICByZXR1cm4gejsKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoZSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlCitgYScgdG8gdGhlIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgZm9ybWF0LiAgVGhlIGNvbnZlcnNpb24gaXMKK3BlcmZvcm1lZCBhY2NvcmRpbmcgdG8gdGhlIElFQy9JRUVFIFN0YW5kYXJkIGZvciBCaW5hcnkgRmxvYXRpbmctcG9pbnQKK0FyaXRobWV0aWMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworZmxvYXQzMiBmbG9hdDY0X3RvX2Zsb2F0MzIoIGZsb2F0NjQgYSApCit7CisgICAgZmxhZyBhU2lnbjsKKyAgICBpbnQxNiBhRXhwOworICAgIGJpdHM2NCBhU2lnOworICAgIGJpdHMzMiB6U2lnOworCisgICAgYVNpZyA9IGV4dHJhY3RGbG9hdDY0RnJhYyggYSApOworICAgIGFFeHAgPSBleHRyYWN0RmxvYXQ2NEV4cCggYSApOworICAgIGFTaWduID0gZXh0cmFjdEZsb2F0NjRTaWduKCBhICk7CisgICAgaWYgKCBhRXhwID09IDB4N0ZGICkgeworICAgICAgICBpZiAoIGFTaWcgKSByZXR1cm4gY29tbW9uTmFOVG9GbG9hdDMyKCBmbG9hdDY0VG9Db21tb25OYU4oIGEgKSApOworICAgICAgICByZXR1cm4gcGFja0Zsb2F0MzIoIGFTaWduLCAweEZGLCAwICk7CisgICAgfQorICAgIHNoaWZ0NjRSaWdodEphbW1pbmcoIGFTaWcsIDIyLCAmYVNpZyApOworICAgIHpTaWcgPSBhU2lnOworICAgIGlmICggYUV4cCB8fCB6U2lnICkgeworICAgICAgICB6U2lnIHw9IDB4NDAwMDAwMDA7CisgICAgICAgIGFFeHAgLT0gMHgzODE7CisgICAgfQorICAgIHJldHVybiByb3VuZEFuZFBhY2tGbG9hdDMyKCBhU2lnbiwgYUV4cCwgelNpZyApOworCit9CisKKyNpZmRlZiBGTE9BVFg4MAorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgdGhlIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUKK2BhJyB0byB0aGUgZXh0ZW5kZWQgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBmb3JtYXQuICBUaGUgY29udmVyc2lvbgoraXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yIEJpbmFyeSBGbG9hdGluZy1wb2ludAorQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbG9hdHg4MCBmbG9hdDY0X3RvX2Zsb2F0eDgwKCBmbG9hdDY0IGEgKQoreworICAgIGZsYWcgYVNpZ247CisgICAgaW50MTYgYUV4cDsKKyAgICBiaXRzNjQgYVNpZzsKKworICAgIGFTaWcgPSBleHRyYWN0RmxvYXQ2NEZyYWMoIGEgKTsKKyAgICBhRXhwID0gZXh0cmFjdEZsb2F0NjRFeHAoIGEgKTsKKyAgICBhU2lnbiA9IGV4dHJhY3RGbG9hdDY0U2lnbiggYSApOworICAgIGlmICggYUV4cCA9PSAweDdGRiApIHsKKyAgICAgICAgaWYgKCBhU2lnICkgcmV0dXJuIGNvbW1vbk5hTlRvRmxvYXR4ODAoIGZsb2F0NjRUb0NvbW1vbk5hTiggYSApICk7CisgICAgICAgIHJldHVybiBwYWNrRmxvYXR4ODAoIGFTaWduLCAweDdGRkYsIExJVDY0KCAweDgwMDAwMDAwMDAwMDAwMDAgKSApOworICAgIH0KKyAgICBpZiAoIGFFeHAgPT0gMCApIHsKKyAgICAgICAgaWYgKCBhU2lnID09IDAgKSByZXR1cm4gcGFja0Zsb2F0eDgwKCBhU2lnbiwgMCwgMCApOworICAgICAgICBub3JtYWxpemVGbG9hdDY0U3Vibm9ybWFsKCBhU2lnLCAmYUV4cCwgJmFTaWcgKTsKKyAgICB9CisgICAgcmV0dXJuCisgICAgICAgIHBhY2tGbG9hdHg4MCgKKyAgICAgICAgICAgIGFTaWduLCBhRXhwICsgMHgzQzAwLCAoIGFTaWcgfCBMSVQ2NCggMHgwMDEwMDAwMDAwMDAwMDAwICkgKTw8MTEgKTsKKworfQorCisjZW5kaWYKKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JvdW5kcyB0aGUgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSBgYScgdG8gYW4gaW50ZWdlciwgYW5kCityZXR1cm5zIHRoZSByZXN1bHQgYXMgYSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlLiAgVGhlCitvcGVyYXRpb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yIEJpbmFyeQorRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbG9hdDY0IGZsb2F0NjRfcm91bmRfdG9faW50KCBmbG9hdDY0IGEgKQoreworICAgIGZsYWcgYVNpZ247CisgICAgaW50MTYgYUV4cDsKKyAgICBiaXRzNjQgbGFzdEJpdE1hc2ssIHJvdW5kQml0c01hc2s7CisgICAgaW50OCByb3VuZGluZ01vZGU7CisgICAgZmxvYXQ2NCB6OworCisgICAgYUV4cCA9IGV4dHJhY3RGbG9hdDY0RXhwKCBhICk7CisgICAgaWYgKCAweDQzMyA8PSBhRXhwICkgeworICAgICAgICBpZiAoICggYUV4cCA9PSAweDdGRiApICYmIGV4dHJhY3RGbG9hdDY0RnJhYyggYSApICkgeworICAgICAgICAgICAgcmV0dXJuIHByb3BhZ2F0ZUZsb2F0NjROYU4oIGEsIGEgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYTsKKyAgICB9CisgICAgaWYgKCBhRXhwIDw9IDB4M0ZFICkgeworICAgICAgICBpZiAoIChiaXRzNjQpICggYTw8MSApID09IDAgKSByZXR1cm4gYTsKKyAgICAgICAgZmxvYXRfZXhjZXB0aW9uX2ZsYWdzIHw9IGZsb2F0X2ZsYWdfaW5leGFjdDsKKyAgICAgICAgYVNpZ24gPSBleHRyYWN0RmxvYXQ2NFNpZ24oIGEgKTsKKyAgICAgICAgc3dpdGNoICggZmxvYXRfcm91bmRpbmdfbW9kZSApIHsKKyAgICAgICAgIGNhc2UgZmxvYXRfcm91bmRfbmVhcmVzdF9ldmVuOgorICAgICAgICAgICAgaWYgKCAoIGFFeHAgPT0gMHgzRkUgKSAmJiBleHRyYWN0RmxvYXQ2NEZyYWMoIGEgKSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFja0Zsb2F0NjQoIGFTaWduLCAweDNGRiwgMCApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIGZsb2F0X3JvdW5kX2Rvd246CisgICAgICAgICAgICByZXR1cm4gYVNpZ24gPyBMSVQ2NCggMHhCRkYwMDAwMDAwMDAwMDAwICkgOiAwOworICAgICAgICAgY2FzZSBmbG9hdF9yb3VuZF91cDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgYVNpZ24gPyBMSVQ2NCggMHg4MDAwMDAwMDAwMDAwMDAwICkgOiBMSVQ2NCggMHgzRkYwMDAwMDAwMDAwMDAwICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBhY2tGbG9hdDY0KCBhU2lnbiwgMCwgMCApOworICAgIH0KKyAgICBsYXN0Qml0TWFzayA9IDE7CisgICAgbGFzdEJpdE1hc2sgPDw9IDB4NDMzIC0gYUV4cDsKKyAgICByb3VuZEJpdHNNYXNrID0gbGFzdEJpdE1hc2sgLSAxOworICAgIHogPSBhOworICAgIHJvdW5kaW5nTW9kZSA9IGZsb2F0X3JvdW5kaW5nX21vZGU7CisgICAgaWYgKCByb3VuZGluZ01vZGUgPT0gZmxvYXRfcm91bmRfbmVhcmVzdF9ldmVuICkgeworICAgICAgICB6ICs9IGxhc3RCaXRNYXNrPj4xOworICAgICAgICBpZiAoICggeiAmIHJvdW5kQml0c01hc2sgKSA9PSAwICkgeiAmPSB+IGxhc3RCaXRNYXNrOworICAgIH0KKyAgICBlbHNlIGlmICggcm91bmRpbmdNb2RlICE9IGZsb2F0X3JvdW5kX3RvX3plcm8gKSB7CisgICAgICAgIGlmICggZXh0cmFjdEZsb2F0NjRTaWduKCB6ICkgXiAoIHJvdW5kaW5nTW9kZSA9PSBmbG9hdF9yb3VuZF91cCApICkgeworICAgICAgICAgICAgeiArPSByb3VuZEJpdHNNYXNrOworICAgICAgICB9CisgICAgfQorICAgIHogJj0gfiByb3VuZEJpdHNNYXNrOworICAgIGlmICggeiAhPSBhICkgZmxvYXRfZXhjZXB0aW9uX2ZsYWdzIHw9IGZsb2F0X2ZsYWdfaW5leGFjdDsKKyAgICByZXR1cm4gejsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyB0aGUgcmVzdWx0IG9mIGFkZGluZyB0aGUgYWJzb2x1dGUgdmFsdWVzIG9mIHRoZSBkb3VibGUtcHJlY2lzaW9uCitmbG9hdGluZy1wb2ludCB2YWx1ZXMgYGEnIGFuZCBgYicuICBJZiBgelNpZ24nIGlzIHRydWUsIHRoZSBzdW0gaXMgbmVnYXRlZAorYmVmb3JlIGJlaW5nIHJldHVybmVkLiAgYHpTaWduJyBpcyBpZ25vcmVkIGlmIHRoZSByZXN1bHQgaXMgYSBOYU4uICBUaGUKK2FkZGl0aW9uIGlzIHBlcmZvcm1lZCBhY2NvcmRpbmcgdG8gdGhlIElFQy9JRUVFIFN0YW5kYXJkIGZvciBCaW5hcnkKK0Zsb2F0aW5nLXBvaW50IEFyaXRobWV0aWMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworc3RhdGljIGZsb2F0NjQgYWRkRmxvYXQ2NFNpZ3MoIGZsb2F0NjQgYSwgZmxvYXQ2NCBiLCBmbGFnIHpTaWduICkKK3sKKyAgICBpbnQxNiBhRXhwLCBiRXhwLCB6RXhwOworICAgIGJpdHM2NCBhU2lnLCBiU2lnLCB6U2lnOworICAgIGludDE2IGV4cERpZmY7CisKKyAgICBhU2lnID0gZXh0cmFjdEZsb2F0NjRGcmFjKCBhICk7CisgICAgYUV4cCA9IGV4dHJhY3RGbG9hdDY0RXhwKCBhICk7CisgICAgYlNpZyA9IGV4dHJhY3RGbG9hdDY0RnJhYyggYiApOworICAgIGJFeHAgPSBleHRyYWN0RmxvYXQ2NEV4cCggYiApOworICAgIGV4cERpZmYgPSBhRXhwIC0gYkV4cDsKKyAgICBhU2lnIDw8PSA5OworICAgIGJTaWcgPDw9IDk7CisgICAgaWYgKCAwIDwgZXhwRGlmZiApIHsKKyAgICAgICAgaWYgKCBhRXhwID09IDB4N0ZGICkgeworICAgICAgICAgICAgaWYgKCBhU2lnICkgcmV0dXJuIHByb3BhZ2F0ZUZsb2F0NjROYU4oIGEsIGIgKTsKKyAgICAgICAgICAgIHJldHVybiBhOworICAgICAgICB9CisgICAgICAgIGlmICggYkV4cCA9PSAwICkgeworICAgICAgICAgICAgLS1leHBEaWZmOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYlNpZyB8PSBMSVQ2NCggMHgyMDAwMDAwMDAwMDAwMDAwICk7CisgICAgICAgIH0KKyAgICAgICAgc2hpZnQ2NFJpZ2h0SmFtbWluZyggYlNpZywgZXhwRGlmZiwgJmJTaWcgKTsKKyAgICAgICAgekV4cCA9IGFFeHA7CisgICAgfQorICAgIGVsc2UgaWYgKCBleHBEaWZmIDwgMCApIHsKKyAgICAgICAgaWYgKCBiRXhwID09IDB4N0ZGICkgeworICAgICAgICAgICAgaWYgKCBiU2lnICkgcmV0dXJuIHByb3BhZ2F0ZUZsb2F0NjROYU4oIGEsIGIgKTsKKyAgICAgICAgICAgIHJldHVybiBwYWNrRmxvYXQ2NCggelNpZ24sIDB4N0ZGLCAwICk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBhRXhwID09IDAgKSB7CisgICAgICAgICAgICArK2V4cERpZmY7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhU2lnIHw9IExJVDY0KCAweDIwMDAwMDAwMDAwMDAwMDAgKTsKKyAgICAgICAgfQorICAgICAgICBzaGlmdDY0UmlnaHRKYW1taW5nKCBhU2lnLCAtIGV4cERpZmYsICZhU2lnICk7CisgICAgICAgIHpFeHAgPSBiRXhwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCBhRXhwID09IDB4N0ZGICkgeworICAgICAgICAgICAgaWYgKCBhU2lnIHwgYlNpZyApIHJldHVybiBwcm9wYWdhdGVGbG9hdDY0TmFOKCBhLCBiICk7CisgICAgICAgICAgICByZXR1cm4gYTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGFFeHAgPT0gMCApIHJldHVybiBwYWNrRmxvYXQ2NCggelNpZ24sIDAsICggYVNpZyArIGJTaWcgKT4+OSApOworICAgICAgICB6U2lnID0gTElUNjQoIDB4NDAwMDAwMDAwMDAwMDAwMCApICsgYVNpZyArIGJTaWc7CisgICAgICAgIHpFeHAgPSBhRXhwOworICAgICAgICBnb3RvIHJvdW5kQW5kUGFjazsKKyAgICB9CisgICAgYVNpZyB8PSBMSVQ2NCggMHgyMDAwMDAwMDAwMDAwMDAwICk7CisgICAgelNpZyA9ICggYVNpZyArIGJTaWcgKTw8MTsKKyAgICAtLXpFeHA7CisgICAgaWYgKCAoc2JpdHM2NCkgelNpZyA8IDAgKSB7CisgICAgICAgIHpTaWcgPSBhU2lnICsgYlNpZzsKKyAgICAgICAgKyt6RXhwOworICAgIH0KKyByb3VuZEFuZFBhY2s6CisgICAgcmV0dXJuIHJvdW5kQW5kUGFja0Zsb2F0NjQoIHpTaWduLCB6RXhwLCB6U2lnICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIHJlc3VsdCBvZiBzdWJ0cmFjdGluZyB0aGUgYWJzb2x1dGUgdmFsdWVzIG9mIHRoZSBkb3VibGUtCitwcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzIGBhJyBhbmQgYGInLiAgSWYgYHpTaWduJyBpcyB0cnVlLCB0aGUKK2RpZmZlcmVuY2UgaXMgbmVnYXRlZCBiZWZvcmUgYmVpbmcgcmV0dXJuZWQuICBgelNpZ24nIGlzIGlnbm9yZWQgaWYgdGhlCityZXN1bHQgaXMgYSBOYU4uICBUaGUgc3VidHJhY3Rpb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUKK1N0YW5kYXJkIGZvciBCaW5hcnkgRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitzdGF0aWMgZmxvYXQ2NCBzdWJGbG9hdDY0U2lncyggZmxvYXQ2NCBhLCBmbG9hdDY0IGIsIGZsYWcgelNpZ24gKQoreworICAgIGludDE2IGFFeHAsIGJFeHAsIHpFeHA7CisgICAgYml0czY0IGFTaWcsIGJTaWcsIHpTaWc7CisgICAgaW50MTYgZXhwRGlmZjsKKworICAgIGFTaWcgPSBleHRyYWN0RmxvYXQ2NEZyYWMoIGEgKTsKKyAgICBhRXhwID0gZXh0cmFjdEZsb2F0NjRFeHAoIGEgKTsKKyAgICBiU2lnID0gZXh0cmFjdEZsb2F0NjRGcmFjKCBiICk7CisgICAgYkV4cCA9IGV4dHJhY3RGbG9hdDY0RXhwKCBiICk7CisgICAgZXhwRGlmZiA9IGFFeHAgLSBiRXhwOworICAgIGFTaWcgPDw9IDEwOworICAgIGJTaWcgPDw9IDEwOworICAgIGlmICggMCA8IGV4cERpZmYgKSBnb3RvIGFFeHBCaWdnZXI7CisgICAgaWYgKCBleHBEaWZmIDwgMCApIGdvdG8gYkV4cEJpZ2dlcjsKKyAgICBpZiAoIGFFeHAgPT0gMHg3RkYgKSB7CisgICAgICAgIGlmICggYVNpZyB8IGJTaWcgKSByZXR1cm4gcHJvcGFnYXRlRmxvYXQ2NE5hTiggYSwgYiApOworICAgICAgICBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19pbnZhbGlkICk7CisgICAgICAgIHJldHVybiBmbG9hdDY0X2RlZmF1bHRfbmFuOworICAgIH0KKyAgICBpZiAoIGFFeHAgPT0gMCApIHsKKyAgICAgICAgYUV4cCA9IDE7CisgICAgICAgIGJFeHAgPSAxOworICAgIH0KKyAgICBpZiAoIGJTaWcgPCBhU2lnICkgZ290byBhQmlnZ2VyOworICAgIGlmICggYVNpZyA8IGJTaWcgKSBnb3RvIGJCaWdnZXI7CisgICAgcmV0dXJuIHBhY2tGbG9hdDY0KCBmbG9hdF9yb3VuZGluZ19tb2RlID09IGZsb2F0X3JvdW5kX2Rvd24sIDAsIDAgKTsKKyBiRXhwQmlnZ2VyOgorICAgIGlmICggYkV4cCA9PSAweDdGRiApIHsKKyAgICAgICAgaWYgKCBiU2lnICkgcmV0dXJuIHByb3BhZ2F0ZUZsb2F0NjROYU4oIGEsIGIgKTsKKyAgICAgICAgcmV0dXJuIHBhY2tGbG9hdDY0KCB6U2lnbiBeIDEsIDB4N0ZGLCAwICk7CisgICAgfQorICAgIGlmICggYUV4cCA9PSAwICkgeworICAgICAgICArK2V4cERpZmY7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBhU2lnIHw9IExJVDY0KCAweDQwMDAwMDAwMDAwMDAwMDAgKTsKKyAgICB9CisgICAgc2hpZnQ2NFJpZ2h0SmFtbWluZyggYVNpZywgLSBleHBEaWZmLCAmYVNpZyApOworICAgIGJTaWcgfD0gTElUNjQoIDB4NDAwMDAwMDAwMDAwMDAwMCApOworIGJCaWdnZXI6CisgICAgelNpZyA9IGJTaWcgLSBhU2lnOworICAgIHpFeHAgPSBiRXhwOworICAgIHpTaWduIF49IDE7CisgICAgZ290byBub3JtYWxpemVSb3VuZEFuZFBhY2s7CisgYUV4cEJpZ2dlcjoKKyAgICBpZiAoIGFFeHAgPT0gMHg3RkYgKSB7CisgICAgICAgIGlmICggYVNpZyApIHJldHVybiBwcm9wYWdhdGVGbG9hdDY0TmFOKCBhLCBiICk7CisgICAgICAgIHJldHVybiBhOworICAgIH0KKyAgICBpZiAoIGJFeHAgPT0gMCApIHsKKyAgICAgICAgLS1leHBEaWZmOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgYlNpZyB8PSBMSVQ2NCggMHg0MDAwMDAwMDAwMDAwMDAwICk7CisgICAgfQorICAgIHNoaWZ0NjRSaWdodEphbW1pbmcoIGJTaWcsIGV4cERpZmYsICZiU2lnICk7CisgICAgYVNpZyB8PSBMSVQ2NCggMHg0MDAwMDAwMDAwMDAwMDAwICk7CisgYUJpZ2dlcjoKKyAgICB6U2lnID0gYVNpZyAtIGJTaWc7CisgICAgekV4cCA9IGFFeHA7Cisgbm9ybWFsaXplUm91bmRBbmRQYWNrOgorICAgIC0tekV4cDsKKyAgICByZXR1cm4gbm9ybWFsaXplUm91bmRBbmRQYWNrRmxvYXQ2NCggelNpZ24sIHpFeHAsIHpTaWcgKTsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyB0aGUgcmVzdWx0IG9mIGFkZGluZyB0aGUgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgYGEnCithbmQgYGInLiAgVGhlIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgYWNjb3JkaW5nIHRvIHRoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IKK0JpbmFyeSBGbG9hdGluZy1wb2ludCBBcml0aG1ldGljLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2Zsb2F0NjQgZmxvYXQ2NF9hZGQoIGZsb2F0NjQgYSwgZmxvYXQ2NCBiICkKK3sKKyAgICBmbGFnIGFTaWduLCBiU2lnbjsKKworICAgIGFTaWduID0gZXh0cmFjdEZsb2F0NjRTaWduKCBhICk7CisgICAgYlNpZ24gPSBleHRyYWN0RmxvYXQ2NFNpZ24oIGIgKTsKKyAgICBpZiAoIGFTaWduID09IGJTaWduICkgeworICAgICAgICByZXR1cm4gYWRkRmxvYXQ2NFNpZ3MoIGEsIGIsIGFTaWduICk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4gc3ViRmxvYXQ2NFNpZ3MoIGEsIGIsIGFTaWduICk7CisgICAgfQorCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIHRoZSByZXN1bHQgb2Ygc3VidHJhY3RpbmcgdGhlIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzCitgYScgYW5kIGBiJy4gIFRoZSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQKK2ZvciBCaW5hcnkgRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbG9hdDY0IGZsb2F0NjRfc3ViKCBmbG9hdDY0IGEsIGZsb2F0NjQgYiApCit7CisgICAgZmxhZyBhU2lnbiwgYlNpZ247CisKKyAgICBhU2lnbiA9IGV4dHJhY3RGbG9hdDY0U2lnbiggYSApOworICAgIGJTaWduID0gZXh0cmFjdEZsb2F0NjRTaWduKCBiICk7CisgICAgaWYgKCBhU2lnbiA9PSBiU2lnbiApIHsKKyAgICAgICAgcmV0dXJuIHN1YkZsb2F0NjRTaWdzKCBhLCBiLCBhU2lnbiApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGFkZEZsb2F0NjRTaWdzKCBhLCBiLCBhU2lnbiApOworICAgIH0KKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyB0aGUgcmVzdWx0IG9mIG11bHRpcGx5aW5nIHRoZSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlcworYGEnIGFuZCBgYicuICBUaGUgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBhY2NvcmRpbmcgdG8gdGhlIElFQy9JRUVFIFN0YW5kYXJkCitmb3IgQmluYXJ5IEZsb2F0aW5nLXBvaW50IEFyaXRobWV0aWMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworZmxvYXQ2NCBmbG9hdDY0X211bCggZmxvYXQ2NCBhLCBmbG9hdDY0IGIgKQoreworICAgIGZsYWcgYVNpZ24sIGJTaWduLCB6U2lnbjsKKyAgICBpbnQxNiBhRXhwLCBiRXhwLCB6RXhwOworICAgIGJpdHM2NCBhU2lnLCBiU2lnLCB6U2lnMCwgelNpZzE7CisKKyAgICBhU2lnID0gZXh0cmFjdEZsb2F0NjRGcmFjKCBhICk7CisgICAgYUV4cCA9IGV4dHJhY3RGbG9hdDY0RXhwKCBhICk7CisgICAgYVNpZ24gPSBleHRyYWN0RmxvYXQ2NFNpZ24oIGEgKTsKKyAgICBiU2lnID0gZXh0cmFjdEZsb2F0NjRGcmFjKCBiICk7CisgICAgYkV4cCA9IGV4dHJhY3RGbG9hdDY0RXhwKCBiICk7CisgICAgYlNpZ24gPSBleHRyYWN0RmxvYXQ2NFNpZ24oIGIgKTsKKyAgICB6U2lnbiA9IGFTaWduIF4gYlNpZ247CisgICAgaWYgKCBhRXhwID09IDB4N0ZGICkgeworICAgICAgICBpZiAoIGFTaWcgfHwgKCAoIGJFeHAgPT0gMHg3RkYgKSAmJiBiU2lnICkgKSB7CisgICAgICAgICAgICByZXR1cm4gcHJvcGFnYXRlRmxvYXQ2NE5hTiggYSwgYiApOworICAgICAgICB9CisgICAgICAgIGlmICggKCBiRXhwIHwgYlNpZyApID09IDAgKSB7CisgICAgICAgICAgICBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19pbnZhbGlkICk7CisgICAgICAgICAgICByZXR1cm4gZmxvYXQ2NF9kZWZhdWx0X25hbjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGFja0Zsb2F0NjQoIHpTaWduLCAweDdGRiwgMCApOworICAgIH0KKyAgICBpZiAoIGJFeHAgPT0gMHg3RkYgKSB7CisgICAgICAgIGlmICggYlNpZyApIHJldHVybiBwcm9wYWdhdGVGbG9hdDY0TmFOKCBhLCBiICk7CisgICAgICAgIGlmICggKCBhRXhwIHwgYVNpZyApID09IDAgKSB7CisgICAgICAgICAgICBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19pbnZhbGlkICk7CisgICAgICAgICAgICByZXR1cm4gZmxvYXQ2NF9kZWZhdWx0X25hbjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGFja0Zsb2F0NjQoIHpTaWduLCAweDdGRiwgMCApOworICAgIH0KKyAgICBpZiAoIGFFeHAgPT0gMCApIHsKKyAgICAgICAgaWYgKCBhU2lnID09IDAgKSByZXR1cm4gcGFja0Zsb2F0NjQoIHpTaWduLCAwLCAwICk7CisgICAgICAgIG5vcm1hbGl6ZUZsb2F0NjRTdWJub3JtYWwoIGFTaWcsICZhRXhwLCAmYVNpZyApOworICAgIH0KKyAgICBpZiAoIGJFeHAgPT0gMCApIHsKKyAgICAgICAgaWYgKCBiU2lnID09IDAgKSByZXR1cm4gcGFja0Zsb2F0NjQoIHpTaWduLCAwLCAwICk7CisgICAgICAgIG5vcm1hbGl6ZUZsb2F0NjRTdWJub3JtYWwoIGJTaWcsICZiRXhwLCAmYlNpZyApOworICAgIH0KKyAgICB6RXhwID0gYUV4cCArIGJFeHAgLSAweDNGRjsKKyAgICBhU2lnID0gKCBhU2lnIHwgTElUNjQoIDB4MDAxMDAwMDAwMDAwMDAwMCApICk8PDEwOworICAgIGJTaWcgPSAoIGJTaWcgfCBMSVQ2NCggMHgwMDEwMDAwMDAwMDAwMDAwICkgKTw8MTE7CisgICAgbXVsNjRUbzEyOCggYVNpZywgYlNpZywgJnpTaWcwLCAmelNpZzEgKTsKKyAgICB6U2lnMCB8PSAoIHpTaWcxICE9IDAgKTsKKyAgICBpZiAoIDAgPD0gKHNiaXRzNjQpICggelNpZzA8PDEgKSApIHsKKyAgICAgICAgelNpZzAgPDw9IDE7CisgICAgICAgIC0tekV4cDsKKyAgICB9CisgICAgcmV0dXJuIHJvdW5kQW5kUGFja0Zsb2F0NjQoIHpTaWduLCB6RXhwLCB6U2lnMCApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIHRoZSByZXN1bHQgb2YgZGl2aWRpbmcgdGhlIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgYGEnCitieSB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBgYicuICBUaGUgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBhY2NvcmRpbmcgdG8KK3RoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IgQmluYXJ5IEZsb2F0aW5nLXBvaW50IEFyaXRobWV0aWMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworZmxvYXQ2NCBmbG9hdDY0X2RpdiggZmxvYXQ2NCBhLCBmbG9hdDY0IGIgKQoreworICAgIGZsYWcgYVNpZ24sIGJTaWduLCB6U2lnbjsKKyAgICBpbnQxNiBhRXhwLCBiRXhwLCB6RXhwOworICAgIGJpdHM2NCBhU2lnLCBiU2lnLCB6U2lnOworICAgIGJpdHM2NCByZW0wLCByZW0xOworICAgIGJpdHM2NCB0ZXJtMCwgdGVybTE7CisKKyAgICBhU2lnID0gZXh0cmFjdEZsb2F0NjRGcmFjKCBhICk7CisgICAgYUV4cCA9IGV4dHJhY3RGbG9hdDY0RXhwKCBhICk7CisgICAgYVNpZ24gPSBleHRyYWN0RmxvYXQ2NFNpZ24oIGEgKTsKKyAgICBiU2lnID0gZXh0cmFjdEZsb2F0NjRGcmFjKCBiICk7CisgICAgYkV4cCA9IGV4dHJhY3RGbG9hdDY0RXhwKCBiICk7CisgICAgYlNpZ24gPSBleHRyYWN0RmxvYXQ2NFNpZ24oIGIgKTsKKyAgICB6U2lnbiA9IGFTaWduIF4gYlNpZ247CisgICAgaWYgKCBhRXhwID09IDB4N0ZGICkgeworICAgICAgICBpZiAoIGFTaWcgKSByZXR1cm4gcHJvcGFnYXRlRmxvYXQ2NE5hTiggYSwgYiApOworICAgICAgICBpZiAoIGJFeHAgPT0gMHg3RkYgKSB7CisgICAgICAgICAgICBpZiAoIGJTaWcgKSByZXR1cm4gcHJvcGFnYXRlRmxvYXQ2NE5hTiggYSwgYiApOworICAgICAgICAgICAgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfaW52YWxpZCApOworICAgICAgICAgICAgcmV0dXJuIGZsb2F0NjRfZGVmYXVsdF9uYW47CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBhY2tGbG9hdDY0KCB6U2lnbiwgMHg3RkYsIDAgKTsKKyAgICB9CisgICAgaWYgKCBiRXhwID09IDB4N0ZGICkgeworICAgICAgICBpZiAoIGJTaWcgKSByZXR1cm4gcHJvcGFnYXRlRmxvYXQ2NE5hTiggYSwgYiApOworICAgICAgICByZXR1cm4gcGFja0Zsb2F0NjQoIHpTaWduLCAwLCAwICk7CisgICAgfQorICAgIGlmICggYkV4cCA9PSAwICkgeworICAgICAgICBpZiAoIGJTaWcgPT0gMCApIHsKKyAgICAgICAgICAgIGlmICggKCBhRXhwIHwgYVNpZyApID09IDAgKSB7CisgICAgICAgICAgICAgICAgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfaW52YWxpZCApOworICAgICAgICAgICAgICAgIHJldHVybiBmbG9hdDY0X2RlZmF1bHRfbmFuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfZGl2Ynl6ZXJvICk7CisgICAgICAgICAgICByZXR1cm4gcGFja0Zsb2F0NjQoIHpTaWduLCAweDdGRiwgMCApOworICAgICAgICB9CisgICAgICAgIG5vcm1hbGl6ZUZsb2F0NjRTdWJub3JtYWwoIGJTaWcsICZiRXhwLCAmYlNpZyApOworICAgIH0KKyAgICBpZiAoIGFFeHAgPT0gMCApIHsKKyAgICAgICAgaWYgKCBhU2lnID09IDAgKSByZXR1cm4gcGFja0Zsb2F0NjQoIHpTaWduLCAwLCAwICk7CisgICAgICAgIG5vcm1hbGl6ZUZsb2F0NjRTdWJub3JtYWwoIGFTaWcsICZhRXhwLCAmYVNpZyApOworICAgIH0KKyAgICB6RXhwID0gYUV4cCAtIGJFeHAgKyAweDNGRDsKKyAgICBhU2lnID0gKCBhU2lnIHwgTElUNjQoIDB4MDAxMDAwMDAwMDAwMDAwMCApICk8PDEwOworICAgIGJTaWcgPSAoIGJTaWcgfCBMSVQ2NCggMHgwMDEwMDAwMDAwMDAwMDAwICkgKTw8MTE7CisgICAgaWYgKCBiU2lnIDw9ICggYVNpZyArIGFTaWcgKSApIHsKKyAgICAgICAgYVNpZyA+Pj0gMTsKKyAgICAgICAgKyt6RXhwOworICAgIH0KKyAgICB6U2lnID0gZXN0aW1hdGVEaXYxMjhUbzY0KCBhU2lnLCAwLCBiU2lnICk7CisgICAgaWYgKCAoIHpTaWcgJiAweDFGRiApIDw9IDIgKSB7CisgICAgICAgIG11bDY0VG8xMjgoIGJTaWcsIHpTaWcsICZ0ZXJtMCwgJnRlcm0xICk7CisgICAgICAgIHN1YjEyOCggYVNpZywgMCwgdGVybTAsIHRlcm0xLCAmcmVtMCwgJnJlbTEgKTsKKyAgICAgICAgd2hpbGUgKCAoc2JpdHM2NCkgcmVtMCA8IDAgKSB7CisgICAgICAgICAgICAtLXpTaWc7CisgICAgICAgICAgICBhZGQxMjgoIHJlbTAsIHJlbTEsIDAsIGJTaWcsICZyZW0wLCAmcmVtMSApOworICAgICAgICB9CisgICAgICAgIHpTaWcgfD0gKCByZW0xICE9IDAgKTsKKyAgICB9CisgICAgcmV0dXJuIHJvdW5kQW5kUGFja0Zsb2F0NjQoIHpTaWduLCB6RXhwLCB6U2lnICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIHJlbWFpbmRlciBvZiB0aGUgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSBgYScKK3dpdGggcmVzcGVjdCB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBgYicuICBUaGUgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZAorYWNjb3JkaW5nIHRvIHRoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IgQmluYXJ5IEZsb2F0aW5nLXBvaW50IEFyaXRobWV0aWMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworZmxvYXQ2NCBmbG9hdDY0X3JlbSggZmxvYXQ2NCBhLCBmbG9hdDY0IGIgKQoreworICAgIGZsYWcgYVNpZ24sIGJTaWduLCB6U2lnbjsKKyAgICBpbnQxNiBhRXhwLCBiRXhwLCBleHBEaWZmOworICAgIGJpdHM2NCBhU2lnLCBiU2lnOworICAgIGJpdHM2NCBxLCBhbHRlcm5hdGVBU2lnOworICAgIHNiaXRzNjQgc2lnTWVhbjsKKworICAgIGFTaWcgPSBleHRyYWN0RmxvYXQ2NEZyYWMoIGEgKTsKKyAgICBhRXhwID0gZXh0cmFjdEZsb2F0NjRFeHAoIGEgKTsKKyAgICBhU2lnbiA9IGV4dHJhY3RGbG9hdDY0U2lnbiggYSApOworICAgIGJTaWcgPSBleHRyYWN0RmxvYXQ2NEZyYWMoIGIgKTsKKyAgICBiRXhwID0gZXh0cmFjdEZsb2F0NjRFeHAoIGIgKTsKKyAgICBiU2lnbiA9IGV4dHJhY3RGbG9hdDY0U2lnbiggYiApOworICAgIGlmICggYUV4cCA9PSAweDdGRiApIHsKKyAgICAgICAgaWYgKCBhU2lnIHx8ICggKCBiRXhwID09IDB4N0ZGICkgJiYgYlNpZyApICkgeworICAgICAgICAgICAgcmV0dXJuIHByb3BhZ2F0ZUZsb2F0NjROYU4oIGEsIGIgKTsKKyAgICAgICAgfQorICAgICAgICBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19pbnZhbGlkICk7CisgICAgICAgIHJldHVybiBmbG9hdDY0X2RlZmF1bHRfbmFuOworICAgIH0KKyAgICBpZiAoIGJFeHAgPT0gMHg3RkYgKSB7CisgICAgICAgIGlmICggYlNpZyApIHJldHVybiBwcm9wYWdhdGVGbG9hdDY0TmFOKCBhLCBiICk7CisgICAgICAgIHJldHVybiBhOworICAgIH0KKyAgICBpZiAoIGJFeHAgPT0gMCApIHsKKyAgICAgICAgaWYgKCBiU2lnID09IDAgKSB7CisgICAgICAgICAgICBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19pbnZhbGlkICk7CisgICAgICAgICAgICByZXR1cm4gZmxvYXQ2NF9kZWZhdWx0X25hbjsKKyAgICAgICAgfQorICAgICAgICBub3JtYWxpemVGbG9hdDY0U3Vibm9ybWFsKCBiU2lnLCAmYkV4cCwgJmJTaWcgKTsKKyAgICB9CisgICAgaWYgKCBhRXhwID09IDAgKSB7CisgICAgICAgIGlmICggYVNpZyA9PSAwICkgcmV0dXJuIGE7CisgICAgICAgIG5vcm1hbGl6ZUZsb2F0NjRTdWJub3JtYWwoIGFTaWcsICZhRXhwLCAmYVNpZyApOworICAgIH0KKyAgICBleHBEaWZmID0gYUV4cCAtIGJFeHA7CisgICAgYVNpZyA9ICggYVNpZyB8IExJVDY0KCAweDAwMTAwMDAwMDAwMDAwMDAgKSApPDwxMTsKKyAgICBiU2lnID0gKCBiU2lnIHwgTElUNjQoIDB4MDAxMDAwMDAwMDAwMDAwMCApICk8PDExOworICAgIGlmICggZXhwRGlmZiA8IDAgKSB7CisgICAgICAgIGlmICggZXhwRGlmZiA8IC0xICkgcmV0dXJuIGE7CisgICAgICAgIGFTaWcgPj49IDE7CisgICAgfQorICAgIHEgPSAoIGJTaWcgPD0gYVNpZyApOworICAgIGlmICggcSApIGFTaWcgLT0gYlNpZzsKKyAgICBleHBEaWZmIC09IDY0OworICAgIHdoaWxlICggMCA8IGV4cERpZmYgKSB7CisgICAgICAgIHEgPSBlc3RpbWF0ZURpdjEyOFRvNjQoIGFTaWcsIDAsIGJTaWcgKTsKKyAgICAgICAgcSA9ICggMiA8IHEgKSA/IHEgLSAyIDogMDsKKyAgICAgICAgYVNpZyA9IC0gKCAoIGJTaWc+PjIgKSAqIHEgKTsKKyAgICAgICAgZXhwRGlmZiAtPSA2MjsKKyAgICB9CisgICAgZXhwRGlmZiArPSA2NDsKKyAgICBpZiAoIDAgPCBleHBEaWZmICkgeworICAgICAgICBxID0gZXN0aW1hdGVEaXYxMjhUbzY0KCBhU2lnLCAwLCBiU2lnICk7CisgICAgICAgIHEgPSAoIDIgPCBxICkgPyBxIC0gMiA6IDA7CisgICAgICAgIHEgPj49IDY0IC0gZXhwRGlmZjsKKyAgICAgICAgYlNpZyA+Pj0gMjsKKyAgICAgICAgYVNpZyA9ICggKCBhU2lnPj4xICk8PCggZXhwRGlmZiAtIDEgKSApIC0gYlNpZyAqIHE7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBhU2lnID4+PSAyOworICAgICAgICBiU2lnID4+PSAyOworICAgIH0KKyAgICBkbyB7CisgICAgICAgIGFsdGVybmF0ZUFTaWcgPSBhU2lnOworICAgICAgICArK3E7CisgICAgICAgIGFTaWcgLT0gYlNpZzsKKyAgICB9IHdoaWxlICggMCA8PSAoc2JpdHM2NCkgYVNpZyApOworICAgIHNpZ01lYW4gPSBhU2lnICsgYWx0ZXJuYXRlQVNpZzsKKyAgICBpZiAoICggc2lnTWVhbiA8IDAgKSB8fCAoICggc2lnTWVhbiA9PSAwICkgJiYgKCBxICYgMSApICkgKSB7CisgICAgICAgIGFTaWcgPSBhbHRlcm5hdGVBU2lnOworICAgIH0KKyAgICB6U2lnbiA9ICggKHNiaXRzNjQpIGFTaWcgPCAwICk7CisgICAgaWYgKCB6U2lnbiApIGFTaWcgPSAtIGFTaWc7CisgICAgcmV0dXJuIG5vcm1hbGl6ZVJvdW5kQW5kUGFja0Zsb2F0NjQoIGFTaWduIF4gelNpZ24sIGJFeHAsIGFTaWcgKTsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgYGEnLgorVGhlIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgYWNjb3JkaW5nIHRvIHRoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IgQmluYXJ5CitGbG9hdGluZy1wb2ludCBBcml0aG1ldGljLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2Zsb2F0NjQgZmxvYXQ2NF9zcXJ0KCBmbG9hdDY0IGEgKQoreworICAgIGZsYWcgYVNpZ247CisgICAgaW50MTYgYUV4cCwgekV4cDsKKyAgICBiaXRzNjQgYVNpZywgelNpZzsKKyAgICBiaXRzNjQgcmVtMCwgcmVtMSwgdGVybTAsIHRlcm0xOyAvLywgc2hpZnRlZFJlbTsKKyAgICAvL2Zsb2F0NjQgejsKKworICAgIGFTaWcgPSBleHRyYWN0RmxvYXQ2NEZyYWMoIGEgKTsKKyAgICBhRXhwID0gZXh0cmFjdEZsb2F0NjRFeHAoIGEgKTsKKyAgICBhU2lnbiA9IGV4dHJhY3RGbG9hdDY0U2lnbiggYSApOworICAgIGlmICggYUV4cCA9PSAweDdGRiApIHsKKyAgICAgICAgaWYgKCBhU2lnICkgcmV0dXJuIHByb3BhZ2F0ZUZsb2F0NjROYU4oIGEsIGEgKTsKKyAgICAgICAgaWYgKCAhIGFTaWduICkgcmV0dXJuIGE7CisgICAgICAgIGZsb2F0X3JhaXNlKCBmbG9hdF9mbGFnX2ludmFsaWQgKTsKKyAgICAgICAgcmV0dXJuIGZsb2F0NjRfZGVmYXVsdF9uYW47CisgICAgfQorICAgIGlmICggYVNpZ24gKSB7CisgICAgICAgIGlmICggKCBhRXhwIHwgYVNpZyApID09IDAgKSByZXR1cm4gYTsKKyAgICAgICAgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfaW52YWxpZCApOworICAgICAgICByZXR1cm4gZmxvYXQ2NF9kZWZhdWx0X25hbjsKKyAgICB9CisgICAgaWYgKCBhRXhwID09IDAgKSB7CisgICAgICAgIGlmICggYVNpZyA9PSAwICkgcmV0dXJuIDA7CisgICAgICAgIG5vcm1hbGl6ZUZsb2F0NjRTdWJub3JtYWwoIGFTaWcsICZhRXhwLCAmYVNpZyApOworICAgIH0KKyAgICB6RXhwID0gKCAoIGFFeHAgLSAweDNGRiApPj4xICkgKyAweDNGRTsKKyAgICBhU2lnIHw9IExJVDY0KCAweDAwMTAwMDAwMDAwMDAwMDAgKTsKKyAgICB6U2lnID0gZXN0aW1hdGVTcXJ0MzIoIGFFeHAsIGFTaWc+PjIxICk7CisgICAgelNpZyA8PD0gMzE7CisgICAgYVNpZyA8PD0gOSAtICggYUV4cCAmIDEgKTsKKyAgICB6U2lnID0gZXN0aW1hdGVEaXYxMjhUbzY0KCBhU2lnLCAwLCB6U2lnICkgKyB6U2lnICsgMjsKKyAgICBpZiAoICggelNpZyAmIDB4M0ZGICkgPD0gNSApIHsKKyAgICAgICAgaWYgKCB6U2lnIDwgMiApIHsKKyAgICAgICAgICAgIHpTaWcgPSBMSVQ2NCggMHhGRkZGRkZGRkZGRkZGRkZGICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhU2lnIDw8PSAyOworICAgICAgICAgICAgbXVsNjRUbzEyOCggelNpZywgelNpZywgJnRlcm0wLCAmdGVybTEgKTsKKyAgICAgICAgICAgIHN1YjEyOCggYVNpZywgMCwgdGVybTAsIHRlcm0xLCAmcmVtMCwgJnJlbTEgKTsKKyAgICAgICAgICAgIHdoaWxlICggKHNiaXRzNjQpIHJlbTAgPCAwICkgeworICAgICAgICAgICAgICAgIC0telNpZzsKKyAgICAgICAgICAgICAgICBzaG9ydFNoaWZ0MTI4TGVmdCggMCwgelNpZywgMSwgJnRlcm0wLCAmdGVybTEgKTsKKyAgICAgICAgICAgICAgICB0ZXJtMSB8PSAxOworICAgICAgICAgICAgICAgIGFkZDEyOCggcmVtMCwgcmVtMSwgdGVybTAsIHRlcm0xLCAmcmVtMCwgJnJlbTEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHpTaWcgfD0gKCAoIHJlbTAgfCByZW0xICkgIT0gMCApOworICAgICAgICB9CisgICAgfQorICAgIHNoaWZ0NjRSaWdodEphbW1pbmcoIHpTaWcsIDEsICZ6U2lnICk7CisgICAgcmV0dXJuIHJvdW5kQW5kUGFja0Zsb2F0NjQoIDAsIHpFeHAsIHpTaWcgKTsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyAxIGlmIHRoZSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIGBhJyBpcyBlcXVhbCB0byB0aGUKK2NvcnJlc3BvbmRpbmcgdmFsdWUgYGInLCBhbmQgMCBvdGhlcndpc2UuICBUaGUgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQKK2FjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yIEJpbmFyeSBGbG9hdGluZy1wb2ludCBBcml0aG1ldGljLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2ZsYWcgZmxvYXQ2NF9lcSggZmxvYXQ2NCBhLCBmbG9hdDY0IGIgKQoreworCisgICAgaWYgKCAgICAoICggZXh0cmFjdEZsb2F0NjRFeHAoIGEgKSA9PSAweDdGRiApICYmIGV4dHJhY3RGbG9hdDY0RnJhYyggYSApICkKKyAgICAgICAgIHx8ICggKCBleHRyYWN0RmxvYXQ2NEV4cCggYiApID09IDB4N0ZGICkgJiYgZXh0cmFjdEZsb2F0NjRGcmFjKCBiICkgKQorICAgICAgICkgeworICAgICAgICBpZiAoIGZsb2F0NjRfaXNfc2lnbmFsaW5nX25hbiggYSApIHx8IGZsb2F0NjRfaXNfc2lnbmFsaW5nX25hbiggYiApICkgeworICAgICAgICAgICAgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfaW52YWxpZCApOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gKCBhID09IGIgKSB8fCAoIChiaXRzNjQpICggKCBhIHwgYiApPDwxICkgPT0gMCApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIDEgaWYgdGhlIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgYGEnIGlzIGxlc3MgdGhhbiBvcgorZXF1YWwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgYGInLCBhbmQgMCBvdGhlcndpc2UuICBUaGUgY29tcGFyaXNvbiBpcworcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yIEJpbmFyeSBGbG9hdGluZy1wb2ludAorQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbGFnIGZsb2F0NjRfbGUoIGZsb2F0NjQgYSwgZmxvYXQ2NCBiICkKK3sKKyAgICBmbGFnIGFTaWduLCBiU2lnbjsKKworICAgIGlmICggICAgKCAoIGV4dHJhY3RGbG9hdDY0RXhwKCBhICkgPT0gMHg3RkYgKSAmJiBleHRyYWN0RmxvYXQ2NEZyYWMoIGEgKSApCisgICAgICAgICB8fCAoICggZXh0cmFjdEZsb2F0NjRFeHAoIGIgKSA9PSAweDdGRiApICYmIGV4dHJhY3RGbG9hdDY0RnJhYyggYiApICkKKyAgICAgICApIHsKKyAgICAgICAgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfaW52YWxpZCApOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgYVNpZ24gPSBleHRyYWN0RmxvYXQ2NFNpZ24oIGEgKTsKKyAgICBiU2lnbiA9IGV4dHJhY3RGbG9hdDY0U2lnbiggYiApOworICAgIGlmICggYVNpZ24gIT0gYlNpZ24gKSByZXR1cm4gYVNpZ24gfHwgKCAoYml0czY0KSAoICggYSB8IGIgKTw8MSApID09IDAgKTsKKyAgICByZXR1cm4gKCBhID09IGIgKSB8fCAoIGFTaWduIF4gKCBhIDwgYiApICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgMSBpZiB0aGUgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSBgYScgaXMgbGVzcyB0aGFuCit0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBgYicsIGFuZCAwIG90aGVyd2lzZS4gIFRoZSBjb21wYXJpc29uIGlzIHBlcmZvcm1lZAorYWNjb3JkaW5nIHRvIHRoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IgQmluYXJ5IEZsb2F0aW5nLXBvaW50IEFyaXRobWV0aWMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworZmxhZyBmbG9hdDY0X2x0KCBmbG9hdDY0IGEsIGZsb2F0NjQgYiApCit7CisgICAgZmxhZyBhU2lnbiwgYlNpZ247CisKKyAgICBpZiAoICAgICggKCBleHRyYWN0RmxvYXQ2NEV4cCggYSApID09IDB4N0ZGICkgJiYgZXh0cmFjdEZsb2F0NjRGcmFjKCBhICkgKQorICAgICAgICAgfHwgKCAoIGV4dHJhY3RGbG9hdDY0RXhwKCBiICkgPT0gMHg3RkYgKSAmJiBleHRyYWN0RmxvYXQ2NEZyYWMoIGIgKSApCisgICAgICAgKSB7CisgICAgICAgIGZsb2F0X3JhaXNlKCBmbG9hdF9mbGFnX2ludmFsaWQgKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGFTaWduID0gZXh0cmFjdEZsb2F0NjRTaWduKCBhICk7CisgICAgYlNpZ24gPSBleHRyYWN0RmxvYXQ2NFNpZ24oIGIgKTsKKyAgICBpZiAoIGFTaWduICE9IGJTaWduICkgcmV0dXJuIGFTaWduICYmICggKGJpdHM2NCkgKCAoIGEgfCBiICk8PDEgKSAhPSAwICk7CisgICAgcmV0dXJuICggYSAhPSBiICkgJiYgKCBhU2lnbiBeICggYSA8IGIgKSApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIDEgaWYgdGhlIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgYGEnIGlzIGVxdWFsIHRvIHRoZQorY29ycmVzcG9uZGluZyB2YWx1ZSBgYicsIGFuZCAwIG90aGVyd2lzZS4gIFRoZSBpbnZhbGlkIGV4Y2VwdGlvbiBpcyByYWlzZWQKK2lmIGVpdGhlciBvcGVyYW5kIGlzIGEgTmFOLiAgT3RoZXJ3aXNlLCB0aGUgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQKK2FjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yIEJpbmFyeSBGbG9hdGluZy1wb2ludCBBcml0aG1ldGljLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2ZsYWcgZmxvYXQ2NF9lcV9zaWduYWxpbmcoIGZsb2F0NjQgYSwgZmxvYXQ2NCBiICkKK3sKKworICAgIGlmICggICAgKCAoIGV4dHJhY3RGbG9hdDY0RXhwKCBhICkgPT0gMHg3RkYgKSAmJiBleHRyYWN0RmxvYXQ2NEZyYWMoIGEgKSApCisgICAgICAgICB8fCAoICggZXh0cmFjdEZsb2F0NjRFeHAoIGIgKSA9PSAweDdGRiApICYmIGV4dHJhY3RGbG9hdDY0RnJhYyggYiApICkKKyAgICAgICApIHsKKyAgICAgICAgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfaW52YWxpZCApOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuICggYSA9PSBiICkgfHwgKCAoYml0czY0KSAoICggYSB8IGIgKTw8MSApID09IDAgKTsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyAxIGlmIHRoZSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIGBhJyBpcyBsZXNzIHRoYW4gb3IKK2VxdWFsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGBiJywgYW5kIDAgb3RoZXJ3aXNlLiAgUXVpZXQgTmFOcyBkbyBub3QKK2NhdXNlIGFuIGV4Y2VwdGlvbi4gIE90aGVyd2lzZSwgdGhlIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUKK0lFQy9JRUVFIFN0YW5kYXJkIGZvciBCaW5hcnkgRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbGFnIGZsb2F0NjRfbGVfcXVpZXQoIGZsb2F0NjQgYSwgZmxvYXQ2NCBiICkKK3sKKyAgICBmbGFnIGFTaWduLCBiU2lnbjsKKyAgICAvL2ludDE2IGFFeHAsIGJFeHA7CisKKyAgICBpZiAoICAgICggKCBleHRyYWN0RmxvYXQ2NEV4cCggYSApID09IDB4N0ZGICkgJiYgZXh0cmFjdEZsb2F0NjRGcmFjKCBhICkgKQorICAgICAgICAgfHwgKCAoIGV4dHJhY3RGbG9hdDY0RXhwKCBiICkgPT0gMHg3RkYgKSAmJiBleHRyYWN0RmxvYXQ2NEZyYWMoIGIgKSApCisgICAgICAgKSB7CisgICAgICAgIGlmICggZmxvYXQ2NF9pc19zaWduYWxpbmdfbmFuKCBhICkgfHwgZmxvYXQ2NF9pc19zaWduYWxpbmdfbmFuKCBiICkgKSB7CisgICAgICAgICAgICBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19pbnZhbGlkICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGFTaWduID0gZXh0cmFjdEZsb2F0NjRTaWduKCBhICk7CisgICAgYlNpZ24gPSBleHRyYWN0RmxvYXQ2NFNpZ24oIGIgKTsKKyAgICBpZiAoIGFTaWduICE9IGJTaWduICkgcmV0dXJuIGFTaWduIHx8ICggKGJpdHM2NCkgKCAoIGEgfCBiICk8PDEgKSA9PSAwICk7CisgICAgcmV0dXJuICggYSA9PSBiICkgfHwgKCBhU2lnbiBeICggYSA8IGIgKSApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIDEgaWYgdGhlIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgYGEnIGlzIGxlc3MgdGhhbgordGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgYGInLCBhbmQgMCBvdGhlcndpc2UuICBRdWlldCBOYU5zIGRvIG5vdCBjYXVzZSBhbgorZXhjZXB0aW9uLiAgT3RoZXJ3aXNlLCB0aGUgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQgYWNjb3JkaW5nIHRvIHRoZSBJRUMvSUVFRQorU3RhbmRhcmQgZm9yIEJpbmFyeSBGbG9hdGluZy1wb2ludCBBcml0aG1ldGljLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2ZsYWcgZmxvYXQ2NF9sdF9xdWlldCggZmxvYXQ2NCBhLCBmbG9hdDY0IGIgKQoreworICAgIGZsYWcgYVNpZ24sIGJTaWduOworCisgICAgaWYgKCAgICAoICggZXh0cmFjdEZsb2F0NjRFeHAoIGEgKSA9PSAweDdGRiApICYmIGV4dHJhY3RGbG9hdDY0RnJhYyggYSApICkKKyAgICAgICAgIHx8ICggKCBleHRyYWN0RmxvYXQ2NEV4cCggYiApID09IDB4N0ZGICkgJiYgZXh0cmFjdEZsb2F0NjRGcmFjKCBiICkgKQorICAgICAgICkgeworICAgICAgICBpZiAoIGZsb2F0NjRfaXNfc2lnbmFsaW5nX25hbiggYSApIHx8IGZsb2F0NjRfaXNfc2lnbmFsaW5nX25hbiggYiApICkgeworICAgICAgICAgICAgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfaW52YWxpZCApOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBhU2lnbiA9IGV4dHJhY3RGbG9hdDY0U2lnbiggYSApOworICAgIGJTaWduID0gZXh0cmFjdEZsb2F0NjRTaWduKCBiICk7CisgICAgaWYgKCBhU2lnbiAhPSBiU2lnbiApIHJldHVybiBhU2lnbiAmJiAoIChiaXRzNjQpICggKCBhIHwgYiApPDwxICkgIT0gMCApOworICAgIHJldHVybiAoIGEgIT0gYiApICYmICggYVNpZ24gXiAoIGEgPCBiICkgKTsKKworfQorCisjaWZkZWYgRkxPQVRYODAKKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoZSBleHRlbmRlZCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLQorcG9pbnQgdmFsdWUgYGEnIHRvIHRoZSAzMi1iaXQgdHdvJ3MgY29tcGxlbWVudCBpbnRlZ2VyIGZvcm1hdC4gIFRoZQorY29udmVyc2lvbiBpcyBwZXJmb3JtZWQgYWNjb3JkaW5nIHRvIHRoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IgQmluYXJ5CitGbG9hdGluZy1wb2ludCBBcml0aG1ldGljLS0td2hpY2ggbWVhbnMgaW4gcGFydGljdWxhciB0aGF0IHRoZSBjb252ZXJzaW9uCitpcyByb3VuZGVkIGFjY29yZGluZyB0byB0aGUgY3VycmVudCByb3VuZGluZyBtb2RlLiAgSWYgYGEnIGlzIGEgTmFOLCB0aGUKK2xhcmdlc3QgcG9zaXRpdmUgaW50ZWdlciBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSwgaWYgdGhlIGNvbnZlcnNpb24KK292ZXJmbG93cywgdGhlIGxhcmdlc3QgaW50ZWdlciB3aXRoIHRoZSBzYW1lIHNpZ24gYXMgYGEnIGlzIHJldHVybmVkLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2ludDMyIGZsb2F0eDgwX3RvX2ludDMyKCBmbG9hdHg4MCBhICkKK3sKKyAgICBmbGFnIGFTaWduOworICAgIGludDMyIGFFeHAsIHNoaWZ0Q291bnQ7CisgICAgYml0czY0IGFTaWc7CisKKyAgICBhU2lnID0gZXh0cmFjdEZsb2F0eDgwRnJhYyggYSApOworICAgIGFFeHAgPSBleHRyYWN0RmxvYXR4ODBFeHAoIGEgKTsKKyAgICBhU2lnbiA9IGV4dHJhY3RGbG9hdHg4MFNpZ24oIGEgKTsKKyAgICBpZiAoICggYUV4cCA9PSAweDdGRkYgKSAmJiAoYml0czY0KSAoIGFTaWc8PDEgKSApIGFTaWduID0gMDsKKyAgICBzaGlmdENvdW50ID0gMHg0MDM3IC0gYUV4cDsKKyAgICBpZiAoIHNoaWZ0Q291bnQgPD0gMCApIHNoaWZ0Q291bnQgPSAxOworICAgIHNoaWZ0NjRSaWdodEphbW1pbmcoIGFTaWcsIHNoaWZ0Q291bnQsICZhU2lnICk7CisgICAgcmV0dXJuIHJvdW5kQW5kUGFja0ludDMyKCBhU2lnbiwgYVNpZyApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIHRoZSByZXN1bHQgb2YgY29udmVydGluZyB0aGUgZXh0ZW5kZWQgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy0KK3BvaW50IHZhbHVlIGBhJyB0byB0aGUgMzItYml0IHR3bydzIGNvbXBsZW1lbnQgaW50ZWdlciBmb3JtYXQuICBUaGUKK2NvbnZlcnNpb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yIEJpbmFyeQorRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYywgZXhjZXB0IHRoYXQgdGhlIGNvbnZlcnNpb24gaXMgYWx3YXlzIHJvdW5kZWQKK3Rvd2FyZCB6ZXJvLiAgSWYgYGEnIGlzIGEgTmFOLCB0aGUgbGFyZ2VzdCBwb3NpdGl2ZSBpbnRlZ2VyIGlzIHJldHVybmVkLgorT3RoZXJ3aXNlLCBpZiB0aGUgY29udmVyc2lvbiBvdmVyZmxvd3MsIHRoZSBsYXJnZXN0IGludGVnZXIgd2l0aCB0aGUgc2FtZQorc2lnbiBhcyBgYScgaXMgcmV0dXJuZWQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworaW50MzIgZmxvYXR4ODBfdG9faW50MzJfcm91bmRfdG9femVybyggZmxvYXR4ODAgYSApCit7CisgICAgZmxhZyBhU2lnbjsKKyAgICBpbnQzMiBhRXhwLCBzaGlmdENvdW50OworICAgIGJpdHM2NCBhU2lnLCBzYXZlZEFTaWc7CisgICAgaW50MzIgejsKKworICAgIGFTaWcgPSBleHRyYWN0RmxvYXR4ODBGcmFjKCBhICk7CisgICAgYUV4cCA9IGV4dHJhY3RGbG9hdHg4MEV4cCggYSApOworICAgIGFTaWduID0gZXh0cmFjdEZsb2F0eDgwU2lnbiggYSApOworICAgIHNoaWZ0Q291bnQgPSAweDQwM0UgLSBhRXhwOworICAgIGlmICggc2hpZnRDb3VudCA8IDMyICkgeworICAgICAgICBpZiAoICggYUV4cCA9PSAweDdGRkYgKSAmJiAoYml0czY0KSAoIGFTaWc8PDEgKSApIGFTaWduID0gMDsKKyAgICAgICAgZ290byBpbnZhbGlkOworICAgIH0KKyAgICBlbHNlIGlmICggNjMgPCBzaGlmdENvdW50ICkgeworICAgICAgICBpZiAoIGFFeHAgfHwgYVNpZyApIGZsb2F0X2V4Y2VwdGlvbl9mbGFncyB8PSBmbG9hdF9mbGFnX2luZXhhY3Q7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBzYXZlZEFTaWcgPSBhU2lnOworICAgIGFTaWcgPj49IHNoaWZ0Q291bnQ7CisgICAgeiA9IGFTaWc7CisgICAgaWYgKCBhU2lnbiApIHogPSAtIHo7CisgICAgaWYgKCAoIHogPCAwICkgXiBhU2lnbiApIHsKKyBpbnZhbGlkOgorICAgICAgICBmbG9hdF9leGNlcHRpb25fZmxhZ3MgfD0gZmxvYXRfZmxhZ19pbnZhbGlkOworICAgICAgICByZXR1cm4gYVNpZ24gPyAweDgwMDAwMDAwIDogMHg3RkZGRkZGRjsKKyAgICB9CisgICAgaWYgKCAoIGFTaWc8PHNoaWZ0Q291bnQgKSAhPSBzYXZlZEFTaWcgKSB7CisgICAgICAgIGZsb2F0X2V4Y2VwdGlvbl9mbGFncyB8PSBmbG9hdF9mbGFnX2luZXhhY3Q7CisgICAgfQorICAgIHJldHVybiB6OworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIHRoZSByZXN1bHQgb2YgY29udmVydGluZyB0aGUgZXh0ZW5kZWQgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy0KK3BvaW50IHZhbHVlIGBhJyB0byB0aGUgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBmb3JtYXQuICBUaGUKK2NvbnZlcnNpb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yIEJpbmFyeQorRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbG9hdDMyIGZsb2F0eDgwX3RvX2Zsb2F0MzIoIGZsb2F0eDgwIGEgKQoreworICAgIGZsYWcgYVNpZ247CisgICAgaW50MzIgYUV4cDsKKyAgICBiaXRzNjQgYVNpZzsKKworICAgIGFTaWcgPSBleHRyYWN0RmxvYXR4ODBGcmFjKCBhICk7CisgICAgYUV4cCA9IGV4dHJhY3RGbG9hdHg4MEV4cCggYSApOworICAgIGFTaWduID0gZXh0cmFjdEZsb2F0eDgwU2lnbiggYSApOworICAgIGlmICggYUV4cCA9PSAweDdGRkYgKSB7CisgICAgICAgIGlmICggKGJpdHM2NCkgKCBhU2lnPDwxICkgKSB7CisgICAgICAgICAgICByZXR1cm4gY29tbW9uTmFOVG9GbG9hdDMyKCBmbG9hdHg4MFRvQ29tbW9uTmFOKCBhICkgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGFja0Zsb2F0MzIoIGFTaWduLCAweEZGLCAwICk7CisgICAgfQorICAgIHNoaWZ0NjRSaWdodEphbW1pbmcoIGFTaWcsIDMzLCAmYVNpZyApOworICAgIGlmICggYUV4cCB8fCBhU2lnICkgYUV4cCAtPSAweDNGODE7CisgICAgcmV0dXJuIHJvdW5kQW5kUGFja0Zsb2F0MzIoIGFTaWduLCBhRXhwLCBhU2lnICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoZSBleHRlbmRlZCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLQorcG9pbnQgdmFsdWUgYGEnIHRvIHRoZSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IGZvcm1hdC4gIFRoZQorY29udmVyc2lvbiBpcyBwZXJmb3JtZWQgYWNjb3JkaW5nIHRvIHRoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IgQmluYXJ5CitGbG9hdGluZy1wb2ludCBBcml0aG1ldGljLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2Zsb2F0NjQgZmxvYXR4ODBfdG9fZmxvYXQ2NCggZmxvYXR4ODAgYSApCit7CisgICAgZmxhZyBhU2lnbjsKKyAgICBpbnQzMiBhRXhwOworICAgIGJpdHM2NCBhU2lnLCB6U2lnOworCisgICAgYVNpZyA9IGV4dHJhY3RGbG9hdHg4MEZyYWMoIGEgKTsKKyAgICBhRXhwID0gZXh0cmFjdEZsb2F0eDgwRXhwKCBhICk7CisgICAgYVNpZ24gPSBleHRyYWN0RmxvYXR4ODBTaWduKCBhICk7CisgICAgaWYgKCBhRXhwID09IDB4N0ZGRiApIHsKKyAgICAgICAgaWYgKCAoYml0czY0KSAoIGFTaWc8PDEgKSApIHsKKyAgICAgICAgICAgIHJldHVybiBjb21tb25OYU5Ub0Zsb2F0NjQoIGZsb2F0eDgwVG9Db21tb25OYU4oIGEgKSApOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwYWNrRmxvYXQ2NCggYVNpZ24sIDB4N0ZGLCAwICk7CisgICAgfQorICAgIHNoaWZ0NjRSaWdodEphbW1pbmcoIGFTaWcsIDEsICZ6U2lnICk7CisgICAgaWYgKCBhRXhwIHx8IGFTaWcgKSBhRXhwIC09IDB4M0MwMTsKKyAgICByZXR1cm4gcm91bmRBbmRQYWNrRmxvYXQ2NCggYVNpZ24sIGFFeHAsIHpTaWcgKTsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUm91bmRzIHRoZSBleHRlbmRlZCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIGBhJyB0byBhbiBpbnRlZ2VyLAorYW5kIHJldHVybnMgdGhlIHJlc3VsdCBhcyBhbiBleHRlbmRlZCBxdWFkcnVwbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50Cit2YWx1ZS4gIFRoZSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yCitCaW5hcnkgRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbG9hdHg4MCBmbG9hdHg4MF9yb3VuZF90b19pbnQoIGZsb2F0eDgwIGEgKQoreworICAgIGZsYWcgYVNpZ247CisgICAgaW50MzIgYUV4cDsKKyAgICBiaXRzNjQgbGFzdEJpdE1hc2ssIHJvdW5kQml0c01hc2s7CisgICAgaW50OCByb3VuZGluZ01vZGU7CisgICAgZmxvYXR4ODAgejsKKworICAgIGFFeHAgPSBleHRyYWN0RmxvYXR4ODBFeHAoIGEgKTsKKyAgICBpZiAoIDB4NDAzRSA8PSBhRXhwICkgeworICAgICAgICBpZiAoICggYUV4cCA9PSAweDdGRkYgKSAmJiAoYml0czY0KSAoIGV4dHJhY3RGbG9hdHg4MEZyYWMoIGEgKTw8MSApICkgeworICAgICAgICAgICAgcmV0dXJuIHByb3BhZ2F0ZUZsb2F0eDgwTmFOKCBhLCBhICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGE7CisgICAgfQorICAgIGlmICggYUV4cCA8PSAweDNGRkUgKSB7CisgICAgICAgIGlmICggICAgKCBhRXhwID09IDAgKQorICAgICAgICAgICAgICYmICggKGJpdHM2NCkgKCBleHRyYWN0RmxvYXR4ODBGcmFjKCBhICk8PDEgKSA9PSAwICkgKSB7CisgICAgICAgICAgICByZXR1cm4gYTsKKyAgICAgICAgfQorICAgICAgICBmbG9hdF9leGNlcHRpb25fZmxhZ3MgfD0gZmxvYXRfZmxhZ19pbmV4YWN0OworICAgICAgICBhU2lnbiA9IGV4dHJhY3RGbG9hdHg4MFNpZ24oIGEgKTsKKyAgICAgICAgc3dpdGNoICggZmxvYXRfcm91bmRpbmdfbW9kZSApIHsKKyAgICAgICAgIGNhc2UgZmxvYXRfcm91bmRfbmVhcmVzdF9ldmVuOgorICAgICAgICAgICAgaWYgKCAoIGFFeHAgPT0gMHgzRkZFICkgJiYgKGJpdHM2NCkgKCBleHRyYWN0RmxvYXR4ODBGcmFjKCBhICk8PDEgKQorICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgIHBhY2tGbG9hdHg4MCggYVNpZ24sIDB4M0ZGRiwgTElUNjQoIDB4ODAwMDAwMDAwMDAwMDAwMCApICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgZmxvYXRfcm91bmRfZG93bjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgYVNpZ24gPworICAgICAgICAgICAgICAgICAgICAgIHBhY2tGbG9hdHg4MCggMSwgMHgzRkZGLCBMSVQ2NCggMHg4MDAwMDAwMDAwMDAwMDAwICkgKQorICAgICAgICAgICAgICAgIDogcGFja0Zsb2F0eDgwKCAwLCAwLCAwICk7CisgICAgICAgICBjYXNlIGZsb2F0X3JvdW5kX3VwOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICBhU2lnbiA/IHBhY2tGbG9hdHg4MCggMSwgMCwgMCApCisgICAgICAgICAgICAgICAgOiBwYWNrRmxvYXR4ODAoIDAsIDB4M0ZGRiwgTElUNjQoIDB4ODAwMDAwMDAwMDAwMDAwMCApICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBhY2tGbG9hdHg4MCggYVNpZ24sIDAsIDAgKTsKKyAgICB9CisgICAgbGFzdEJpdE1hc2sgPSAxOworICAgIGxhc3RCaXRNYXNrIDw8PSAweDQwM0UgLSBhRXhwOworICAgIHJvdW5kQml0c01hc2sgPSBsYXN0Qml0TWFzayAtIDE7CisgICAgeiA9IGE7CisgICAgcm91bmRpbmdNb2RlID0gZmxvYXRfcm91bmRpbmdfbW9kZTsKKyAgICBpZiAoIHJvdW5kaW5nTW9kZSA9PSBmbG9hdF9yb3VuZF9uZWFyZXN0X2V2ZW4gKSB7CisgICAgICAgIHoubG93ICs9IGxhc3RCaXRNYXNrPj4xOworICAgICAgICBpZiAoICggei5sb3cgJiByb3VuZEJpdHNNYXNrICkgPT0gMCApIHoubG93ICY9IH4gbGFzdEJpdE1hc2s7CisgICAgfQorICAgIGVsc2UgaWYgKCByb3VuZGluZ01vZGUgIT0gZmxvYXRfcm91bmRfdG9femVybyApIHsKKyAgICAgICAgaWYgKCBleHRyYWN0RmxvYXR4ODBTaWduKCB6ICkgXiAoIHJvdW5kaW5nTW9kZSA9PSBmbG9hdF9yb3VuZF91cCApICkgeworICAgICAgICAgICAgei5sb3cgKz0gcm91bmRCaXRzTWFzazsKKyAgICAgICAgfQorICAgIH0KKyAgICB6LmxvdyAmPSB+IHJvdW5kQml0c01hc2s7CisgICAgaWYgKCB6LmxvdyA9PSAwICkgeworICAgICAgICArK3ouaGlnaDsKKyAgICAgICAgei5sb3cgPSBMSVQ2NCggMHg4MDAwMDAwMDAwMDAwMDAwICk7CisgICAgfQorICAgIGlmICggei5sb3cgIT0gYS5sb3cgKSBmbG9hdF9leGNlcHRpb25fZmxhZ3MgfD0gZmxvYXRfZmxhZ19pbmV4YWN0OworICAgIHJldHVybiB6OworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIHRoZSByZXN1bHQgb2YgYWRkaW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZXMgb2YgdGhlIGV4dGVuZGVkIGRvdWJsZS0KK3ByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgYGEnIGFuZCBgYicuICBJZiBgelNpZ24nIGlzIHRydWUsIHRoZSBzdW0gaXMKK25lZ2F0ZWQgYmVmb3JlIGJlaW5nIHJldHVybmVkLiAgYHpTaWduJyBpcyBpZ25vcmVkIGlmIHRoZSByZXN1bHQgaXMgYSBOYU4uCitUaGUgYWRkaXRpb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yIEJpbmFyeQorRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitzdGF0aWMgZmxvYXR4ODAgYWRkRmxvYXR4ODBTaWdzKCBmbG9hdHg4MCBhLCBmbG9hdHg4MCBiLCBmbGFnIHpTaWduICkKK3sKKyAgICBpbnQzMiBhRXhwLCBiRXhwLCB6RXhwOworICAgIGJpdHM2NCBhU2lnLCBiU2lnLCB6U2lnMCwgelNpZzE7CisgICAgaW50MzIgZXhwRGlmZjsKKworICAgIGFTaWcgPSBleHRyYWN0RmxvYXR4ODBGcmFjKCBhICk7CisgICAgYUV4cCA9IGV4dHJhY3RGbG9hdHg4MEV4cCggYSApOworICAgIGJTaWcgPSBleHRyYWN0RmxvYXR4ODBGcmFjKCBiICk7CisgICAgYkV4cCA9IGV4dHJhY3RGbG9hdHg4MEV4cCggYiApOworICAgIGV4cERpZmYgPSBhRXhwIC0gYkV4cDsKKyAgICBpZiAoIDAgPCBleHBEaWZmICkgeworICAgICAgICBpZiAoIGFFeHAgPT0gMHg3RkZGICkgeworICAgICAgICAgICAgaWYgKCAoYml0czY0KSAoIGFTaWc8PDEgKSApIHJldHVybiBwcm9wYWdhdGVGbG9hdHg4ME5hTiggYSwgYiApOworICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBiRXhwID09IDAgKSAtLWV4cERpZmY7CisgICAgICAgIHNoaWZ0NjRFeHRyYVJpZ2h0SmFtbWluZyggYlNpZywgMCwgZXhwRGlmZiwgJmJTaWcsICZ6U2lnMSApOworICAgICAgICB6RXhwID0gYUV4cDsKKyAgICB9CisgICAgZWxzZSBpZiAoIGV4cERpZmYgPCAwICkgeworICAgICAgICBpZiAoIGJFeHAgPT0gMHg3RkZGICkgeworICAgICAgICAgICAgaWYgKCAoYml0czY0KSAoIGJTaWc8PDEgKSApIHJldHVybiBwcm9wYWdhdGVGbG9hdHg4ME5hTiggYSwgYiApOworICAgICAgICAgICAgcmV0dXJuIHBhY2tGbG9hdHg4MCggelNpZ24sIDB4N0ZGRiwgTElUNjQoIDB4ODAwMDAwMDAwMDAwMDAwMCApICk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBhRXhwID09IDAgKSArK2V4cERpZmY7CisgICAgICAgIHNoaWZ0NjRFeHRyYVJpZ2h0SmFtbWluZyggYVNpZywgMCwgLSBleHBEaWZmLCAmYVNpZywgJnpTaWcxICk7CisgICAgICAgIHpFeHAgPSBiRXhwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCBhRXhwID09IDB4N0ZGRiApIHsKKyAgICAgICAgICAgIGlmICggKGJpdHM2NCkgKCAoIGFTaWcgfCBiU2lnICk8PDEgKSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGFnYXRlRmxvYXR4ODBOYU4oIGEsIGIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhOworICAgICAgICB9CisgICAgICAgIHpTaWcxID0gMDsKKyAgICAgICAgelNpZzAgPSBhU2lnICsgYlNpZzsKKyAgICAgICAgaWYgKCBhRXhwID09IDAgKSB7CisgICAgICAgICAgICBub3JtYWxpemVGbG9hdHg4MFN1Ym5vcm1hbCggelNpZzAsICZ6RXhwLCAmelNpZzAgKTsKKyAgICAgICAgICAgIGdvdG8gcm91bmRBbmRQYWNrOworICAgICAgICB9CisgICAgICAgIHpFeHAgPSBhRXhwOworICAgICAgICBnb3RvIHNoaWZ0UmlnaHQxOworICAgIH0KKyAgICAKKyAgICB6U2lnMCA9IGFTaWcgKyBiU2lnOworCisgICAgaWYgKCAoc2JpdHM2NCkgelNpZzAgPCAwICkgZ290byByb3VuZEFuZFBhY2s7IAorIHNoaWZ0UmlnaHQxOgorICAgIHNoaWZ0NjRFeHRyYVJpZ2h0SmFtbWluZyggelNpZzAsIHpTaWcxLCAxLCAmelNpZzAsICZ6U2lnMSApOworICAgIHpTaWcwIHw9IExJVDY0KCAweDgwMDAwMDAwMDAwMDAwMDAgKTsKKyAgICArK3pFeHA7Cisgcm91bmRBbmRQYWNrOgorICAgIHJldHVybgorICAgICAgICByb3VuZEFuZFBhY2tGbG9hdHg4MCgKKyAgICAgICAgICAgIGZsb2F0eDgwX3JvdW5kaW5nX3ByZWNpc2lvbiwgelNpZ24sIHpFeHAsIHpTaWcwLCB6U2lnMSApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIHRoZSByZXN1bHQgb2Ygc3VidHJhY3RpbmcgdGhlIGFic29sdXRlIHZhbHVlcyBvZiB0aGUgZXh0ZW5kZWQKK2RvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzIGBhJyBhbmQgYGInLiAgSWYgYHpTaWduJyBpcyB0cnVlLAordGhlIGRpZmZlcmVuY2UgaXMgbmVnYXRlZCBiZWZvcmUgYmVpbmcgcmV0dXJuZWQuICBgelNpZ24nIGlzIGlnbm9yZWQgaWYgdGhlCityZXN1bHQgaXMgYSBOYU4uICBUaGUgc3VidHJhY3Rpb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUKK1N0YW5kYXJkIGZvciBCaW5hcnkgRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitzdGF0aWMgZmxvYXR4ODAgc3ViRmxvYXR4ODBTaWdzKCBmbG9hdHg4MCBhLCBmbG9hdHg4MCBiLCBmbGFnIHpTaWduICkKK3sKKyAgICBpbnQzMiBhRXhwLCBiRXhwLCB6RXhwOworICAgIGJpdHM2NCBhU2lnLCBiU2lnLCB6U2lnMCwgelNpZzE7CisgICAgaW50MzIgZXhwRGlmZjsKKyAgICBmbG9hdHg4MCB6OworCisgICAgYVNpZyA9IGV4dHJhY3RGbG9hdHg4MEZyYWMoIGEgKTsKKyAgICBhRXhwID0gZXh0cmFjdEZsb2F0eDgwRXhwKCBhICk7CisgICAgYlNpZyA9IGV4dHJhY3RGbG9hdHg4MEZyYWMoIGIgKTsKKyAgICBiRXhwID0gZXh0cmFjdEZsb2F0eDgwRXhwKCBiICk7CisgICAgZXhwRGlmZiA9IGFFeHAgLSBiRXhwOworICAgIGlmICggMCA8IGV4cERpZmYgKSBnb3RvIGFFeHBCaWdnZXI7CisgICAgaWYgKCBleHBEaWZmIDwgMCApIGdvdG8gYkV4cEJpZ2dlcjsKKyAgICBpZiAoIGFFeHAgPT0gMHg3RkZGICkgeworICAgICAgICBpZiAoIChiaXRzNjQpICggKCBhU2lnIHwgYlNpZyApPDwxICkgKSB7CisgICAgICAgICAgICByZXR1cm4gcHJvcGFnYXRlRmxvYXR4ODBOYU4oIGEsIGIgKTsKKyAgICAgICAgfQorICAgICAgICBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19pbnZhbGlkICk7CisgICAgICAgIHoubG93ID0gZmxvYXR4ODBfZGVmYXVsdF9uYW5fbG93OworICAgICAgICB6LmhpZ2ggPSBmbG9hdHg4MF9kZWZhdWx0X25hbl9oaWdoOworICAgICAgICByZXR1cm4gejsKKyAgICB9CisgICAgaWYgKCBhRXhwID09IDAgKSB7CisgICAgICAgIGFFeHAgPSAxOworICAgICAgICBiRXhwID0gMTsKKyAgICB9CisgICAgelNpZzEgPSAwOworICAgIGlmICggYlNpZyA8IGFTaWcgKSBnb3RvIGFCaWdnZXI7CisgICAgaWYgKCBhU2lnIDwgYlNpZyApIGdvdG8gYkJpZ2dlcjsKKyAgICByZXR1cm4gcGFja0Zsb2F0eDgwKCBmbG9hdF9yb3VuZGluZ19tb2RlID09IGZsb2F0X3JvdW5kX2Rvd24sIDAsIDAgKTsKKyBiRXhwQmlnZ2VyOgorICAgIGlmICggYkV4cCA9PSAweDdGRkYgKSB7CisgICAgICAgIGlmICggKGJpdHM2NCkgKCBiU2lnPDwxICkgKSByZXR1cm4gcHJvcGFnYXRlRmxvYXR4ODBOYU4oIGEsIGIgKTsKKyAgICAgICAgcmV0dXJuIHBhY2tGbG9hdHg4MCggelNpZ24gXiAxLCAweDdGRkYsIExJVDY0KCAweDgwMDAwMDAwMDAwMDAwMDAgKSApOworICAgIH0KKyAgICBpZiAoIGFFeHAgPT0gMCApICsrZXhwRGlmZjsKKyAgICBzaGlmdDEyOFJpZ2h0SmFtbWluZyggYVNpZywgMCwgLSBleHBEaWZmLCAmYVNpZywgJnpTaWcxICk7CisgYkJpZ2dlcjoKKyAgICBzdWIxMjgoIGJTaWcsIDAsIGFTaWcsIHpTaWcxLCAmelNpZzAsICZ6U2lnMSApOworICAgIHpFeHAgPSBiRXhwOworICAgIHpTaWduIF49IDE7CisgICAgZ290byBub3JtYWxpemVSb3VuZEFuZFBhY2s7CisgYUV4cEJpZ2dlcjoKKyAgICBpZiAoIGFFeHAgPT0gMHg3RkZGICkgeworICAgICAgICBpZiAoIChiaXRzNjQpICggYVNpZzw8MSApICkgcmV0dXJuIHByb3BhZ2F0ZUZsb2F0eDgwTmFOKCBhLCBiICk7CisgICAgICAgIHJldHVybiBhOworICAgIH0KKyAgICBpZiAoIGJFeHAgPT0gMCApIC0tZXhwRGlmZjsKKyAgICBzaGlmdDEyOFJpZ2h0SmFtbWluZyggYlNpZywgMCwgZXhwRGlmZiwgJmJTaWcsICZ6U2lnMSApOworIGFCaWdnZXI6CisgICAgc3ViMTI4KCBhU2lnLCAwLCBiU2lnLCB6U2lnMSwgJnpTaWcwLCAmelNpZzEgKTsKKyAgICB6RXhwID0gYUV4cDsKKyBub3JtYWxpemVSb3VuZEFuZFBhY2s6CisgICAgcmV0dXJuCisgICAgICAgIG5vcm1hbGl6ZVJvdW5kQW5kUGFja0Zsb2F0eDgwKAorICAgICAgICAgICAgZmxvYXR4ODBfcm91bmRpbmdfcHJlY2lzaW9uLCB6U2lnbiwgekV4cCwgelNpZzAsIHpTaWcxICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIHJlc3VsdCBvZiBhZGRpbmcgdGhlIGV4dGVuZGVkIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQKK3ZhbHVlcyBgYScgYW5kIGBiJy4gIFRoZSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUKK1N0YW5kYXJkIGZvciBCaW5hcnkgRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbG9hdHg4MCBmbG9hdHg4MF9hZGQoIGZsb2F0eDgwIGEsIGZsb2F0eDgwIGIgKQoreworICAgIGZsYWcgYVNpZ24sIGJTaWduOworICAgIAorICAgIGFTaWduID0gZXh0cmFjdEZsb2F0eDgwU2lnbiggYSApOworICAgIGJTaWduID0gZXh0cmFjdEZsb2F0eDgwU2lnbiggYiApOworICAgIGlmICggYVNpZ24gPT0gYlNpZ24gKSB7CisgICAgICAgIHJldHVybiBhZGRGbG9hdHg4MFNpZ3MoIGEsIGIsIGFTaWduICk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4gc3ViRmxvYXR4ODBTaWdzKCBhLCBiLCBhU2lnbiApOworICAgIH0KKyAgICAKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIHJlc3VsdCBvZiBzdWJ0cmFjdGluZyB0aGUgZXh0ZW5kZWQgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy0KK3BvaW50IHZhbHVlcyBgYScgYW5kIGBiJy4gIFRoZSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUKK0lFQy9JRUVFIFN0YW5kYXJkIGZvciBCaW5hcnkgRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbG9hdHg4MCBmbG9hdHg4MF9zdWIoIGZsb2F0eDgwIGEsIGZsb2F0eDgwIGIgKQoreworICAgIGZsYWcgYVNpZ24sIGJTaWduOworCisgICAgYVNpZ24gPSBleHRyYWN0RmxvYXR4ODBTaWduKCBhICk7CisgICAgYlNpZ24gPSBleHRyYWN0RmxvYXR4ODBTaWduKCBiICk7CisgICAgaWYgKCBhU2lnbiA9PSBiU2lnbiApIHsKKyAgICAgICAgcmV0dXJuIHN1YkZsb2F0eDgwU2lncyggYSwgYiwgYVNpZ24gKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybiBhZGRGbG9hdHg4MFNpZ3MoIGEsIGIsIGFTaWduICk7CisgICAgfQorCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIHRoZSByZXN1bHQgb2YgbXVsdGlwbHlpbmcgdGhlIGV4dGVuZGVkIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctCitwb2ludCB2YWx1ZXMgYGEnIGFuZCBgYicuICBUaGUgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBhY2NvcmRpbmcgdG8gdGhlCitJRUMvSUVFRSBTdGFuZGFyZCBmb3IgQmluYXJ5IEZsb2F0aW5nLXBvaW50IEFyaXRobWV0aWMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworZmxvYXR4ODAgZmxvYXR4ODBfbXVsKCBmbG9hdHg4MCBhLCBmbG9hdHg4MCBiICkKK3sKKyAgICBmbGFnIGFTaWduLCBiU2lnbiwgelNpZ247CisgICAgaW50MzIgYUV4cCwgYkV4cCwgekV4cDsKKyAgICBiaXRzNjQgYVNpZywgYlNpZywgelNpZzAsIHpTaWcxOworICAgIGZsb2F0eDgwIHo7CisKKyAgICBhU2lnID0gZXh0cmFjdEZsb2F0eDgwRnJhYyggYSApOworICAgIGFFeHAgPSBleHRyYWN0RmxvYXR4ODBFeHAoIGEgKTsKKyAgICBhU2lnbiA9IGV4dHJhY3RGbG9hdHg4MFNpZ24oIGEgKTsKKyAgICBiU2lnID0gZXh0cmFjdEZsb2F0eDgwRnJhYyggYiApOworICAgIGJFeHAgPSBleHRyYWN0RmxvYXR4ODBFeHAoIGIgKTsKKyAgICBiU2lnbiA9IGV4dHJhY3RGbG9hdHg4MFNpZ24oIGIgKTsKKyAgICB6U2lnbiA9IGFTaWduIF4gYlNpZ247CisgICAgaWYgKCBhRXhwID09IDB4N0ZGRiApIHsKKyAgICAgICAgaWYgKCAgICAoYml0czY0KSAoIGFTaWc8PDEgKQorICAgICAgICAgICAgIHx8ICggKCBiRXhwID09IDB4N0ZGRiApICYmIChiaXRzNjQpICggYlNpZzw8MSApICkgKSB7CisgICAgICAgICAgICByZXR1cm4gcHJvcGFnYXRlRmxvYXR4ODBOYU4oIGEsIGIgKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoICggYkV4cCB8IGJTaWcgKSA9PSAwICkgZ290byBpbnZhbGlkOworICAgICAgICByZXR1cm4gcGFja0Zsb2F0eDgwKCB6U2lnbiwgMHg3RkZGLCBMSVQ2NCggMHg4MDAwMDAwMDAwMDAwMDAwICkgKTsKKyAgICB9CisgICAgaWYgKCBiRXhwID09IDB4N0ZGRiApIHsKKyAgICAgICAgaWYgKCAoYml0czY0KSAoIGJTaWc8PDEgKSApIHJldHVybiBwcm9wYWdhdGVGbG9hdHg4ME5hTiggYSwgYiApOworICAgICAgICBpZiAoICggYUV4cCB8IGFTaWcgKSA9PSAwICkgeworIGludmFsaWQ6CisgICAgICAgICAgICBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19pbnZhbGlkICk7CisgICAgICAgICAgICB6LmxvdyA9IGZsb2F0eDgwX2RlZmF1bHRfbmFuX2xvdzsKKyAgICAgICAgICAgIHouaGlnaCA9IGZsb2F0eDgwX2RlZmF1bHRfbmFuX2hpZ2g7CisgICAgICAgICAgICByZXR1cm4gejsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGFja0Zsb2F0eDgwKCB6U2lnbiwgMHg3RkZGLCBMSVQ2NCggMHg4MDAwMDAwMDAwMDAwMDAwICkgKTsKKyAgICB9CisgICAgaWYgKCBhRXhwID09IDAgKSB7CisgICAgICAgIGlmICggYVNpZyA9PSAwICkgcmV0dXJuIHBhY2tGbG9hdHg4MCggelNpZ24sIDAsIDAgKTsKKyAgICAgICAgbm9ybWFsaXplRmxvYXR4ODBTdWJub3JtYWwoIGFTaWcsICZhRXhwLCAmYVNpZyApOworICAgIH0KKyAgICBpZiAoIGJFeHAgPT0gMCApIHsKKyAgICAgICAgaWYgKCBiU2lnID09IDAgKSByZXR1cm4gcGFja0Zsb2F0eDgwKCB6U2lnbiwgMCwgMCApOworICAgICAgICBub3JtYWxpemVGbG9hdHg4MFN1Ym5vcm1hbCggYlNpZywgJmJFeHAsICZiU2lnICk7CisgICAgfQorICAgIHpFeHAgPSBhRXhwICsgYkV4cCAtIDB4M0ZGRTsKKyAgICBtdWw2NFRvMTI4KCBhU2lnLCBiU2lnLCAmelNpZzAsICZ6U2lnMSApOworICAgIGlmICggMCA8IChzYml0czY0KSB6U2lnMCApIHsKKyAgICAgICAgc2hvcnRTaGlmdDEyOExlZnQoIHpTaWcwLCB6U2lnMSwgMSwgJnpTaWcwLCAmelNpZzEgKTsKKyAgICAgICAgLS16RXhwOworICAgIH0KKyAgICByZXR1cm4KKyAgICAgICAgcm91bmRBbmRQYWNrRmxvYXR4ODAoCisgICAgICAgICAgICBmbG9hdHg4MF9yb3VuZGluZ19wcmVjaXNpb24sIHpTaWduLCB6RXhwLCB6U2lnMCwgelNpZzEgKTsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyB0aGUgcmVzdWx0IG9mIGRpdmlkaW5nIHRoZSBleHRlbmRlZCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50Cit2YWx1ZSBgYScgYnkgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgYGInLiAgVGhlIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQKK2FjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yIEJpbmFyeSBGbG9hdGluZy1wb2ludCBBcml0aG1ldGljLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2Zsb2F0eDgwIGZsb2F0eDgwX2RpdiggZmxvYXR4ODAgYSwgZmxvYXR4ODAgYiApCit7CisgICAgZmxhZyBhU2lnbiwgYlNpZ24sIHpTaWduOworICAgIGludDMyIGFFeHAsIGJFeHAsIHpFeHA7CisgICAgYml0czY0IGFTaWcsIGJTaWcsIHpTaWcwLCB6U2lnMTsKKyAgICBiaXRzNjQgcmVtMCwgcmVtMSwgcmVtMiwgdGVybTAsIHRlcm0xLCB0ZXJtMjsKKyAgICBmbG9hdHg4MCB6OworCisgICAgYVNpZyA9IGV4dHJhY3RGbG9hdHg4MEZyYWMoIGEgKTsKKyAgICBhRXhwID0gZXh0cmFjdEZsb2F0eDgwRXhwKCBhICk7CisgICAgYVNpZ24gPSBleHRyYWN0RmxvYXR4ODBTaWduKCBhICk7CisgICAgYlNpZyA9IGV4dHJhY3RGbG9hdHg4MEZyYWMoIGIgKTsKKyAgICBiRXhwID0gZXh0cmFjdEZsb2F0eDgwRXhwKCBiICk7CisgICAgYlNpZ24gPSBleHRyYWN0RmxvYXR4ODBTaWduKCBiICk7CisgICAgelNpZ24gPSBhU2lnbiBeIGJTaWduOworICAgIGlmICggYUV4cCA9PSAweDdGRkYgKSB7CisgICAgICAgIGlmICggKGJpdHM2NCkgKCBhU2lnPDwxICkgKSByZXR1cm4gcHJvcGFnYXRlRmxvYXR4ODBOYU4oIGEsIGIgKTsKKyAgICAgICAgaWYgKCBiRXhwID09IDB4N0ZGRiApIHsKKyAgICAgICAgICAgIGlmICggKGJpdHM2NCkgKCBiU2lnPDwxICkgKSByZXR1cm4gcHJvcGFnYXRlRmxvYXR4ODBOYU4oIGEsIGIgKTsKKyAgICAgICAgICAgIGdvdG8gaW52YWxpZDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGFja0Zsb2F0eDgwKCB6U2lnbiwgMHg3RkZGLCBMSVQ2NCggMHg4MDAwMDAwMDAwMDAwMDAwICkgKTsKKyAgICB9CisgICAgaWYgKCBiRXhwID09IDB4N0ZGRiApIHsKKyAgICAgICAgaWYgKCAoYml0czY0KSAoIGJTaWc8PDEgKSApIHJldHVybiBwcm9wYWdhdGVGbG9hdHg4ME5hTiggYSwgYiApOworICAgICAgICByZXR1cm4gcGFja0Zsb2F0eDgwKCB6U2lnbiwgMCwgMCApOworICAgIH0KKyAgICBpZiAoIGJFeHAgPT0gMCApIHsKKyAgICAgICAgaWYgKCBiU2lnID09IDAgKSB7CisgICAgICAgICAgICBpZiAoICggYUV4cCB8IGFTaWcgKSA9PSAwICkgeworIGludmFsaWQ6CisgICAgICAgICAgICAgICAgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfaW52YWxpZCApOworICAgICAgICAgICAgICAgIHoubG93ID0gZmxvYXR4ODBfZGVmYXVsdF9uYW5fbG93OworICAgICAgICAgICAgICAgIHouaGlnaCA9IGZsb2F0eDgwX2RlZmF1bHRfbmFuX2hpZ2g7CisgICAgICAgICAgICAgICAgcmV0dXJuIHo7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19kaXZieXplcm8gKTsKKyAgICAgICAgICAgIHJldHVybiBwYWNrRmxvYXR4ODAoIHpTaWduLCAweDdGRkYsIExJVDY0KCAweDgwMDAwMDAwMDAwMDAwMDAgKSApOworICAgICAgICB9CisgICAgICAgIG5vcm1hbGl6ZUZsb2F0eDgwU3Vibm9ybWFsKCBiU2lnLCAmYkV4cCwgJmJTaWcgKTsKKyAgICB9CisgICAgaWYgKCBhRXhwID09IDAgKSB7CisgICAgICAgIGlmICggYVNpZyA9PSAwICkgcmV0dXJuIHBhY2tGbG9hdHg4MCggelNpZ24sIDAsIDAgKTsKKyAgICAgICAgbm9ybWFsaXplRmxvYXR4ODBTdWJub3JtYWwoIGFTaWcsICZhRXhwLCAmYVNpZyApOworICAgIH0KKyAgICB6RXhwID0gYUV4cCAtIGJFeHAgKyAweDNGRkU7CisgICAgcmVtMSA9IDA7CisgICAgaWYgKCBiU2lnIDw9IGFTaWcgKSB7CisgICAgICAgIHNoaWZ0MTI4UmlnaHQoIGFTaWcsIDAsIDEsICZhU2lnLCAmcmVtMSApOworICAgICAgICArK3pFeHA7CisgICAgfQorICAgIHpTaWcwID0gZXN0aW1hdGVEaXYxMjhUbzY0KCBhU2lnLCByZW0xLCBiU2lnICk7CisgICAgbXVsNjRUbzEyOCggYlNpZywgelNpZzAsICZ0ZXJtMCwgJnRlcm0xICk7CisgICAgc3ViMTI4KCBhU2lnLCByZW0xLCB0ZXJtMCwgdGVybTEsICZyZW0wLCAmcmVtMSApOworICAgIHdoaWxlICggKHNiaXRzNjQpIHJlbTAgPCAwICkgeworICAgICAgICAtLXpTaWcwOworICAgICAgICBhZGQxMjgoIHJlbTAsIHJlbTEsIDAsIGJTaWcsICZyZW0wLCAmcmVtMSApOworICAgIH0KKyAgICB6U2lnMSA9IGVzdGltYXRlRGl2MTI4VG82NCggcmVtMSwgMCwgYlNpZyApOworICAgIGlmICggKGJpdHM2NCkgKCB6U2lnMTw8MSApIDw9IDggKSB7CisgICAgICAgIG11bDY0VG8xMjgoIGJTaWcsIHpTaWcxLCAmdGVybTEsICZ0ZXJtMiApOworICAgICAgICBzdWIxMjgoIHJlbTEsIDAsIHRlcm0xLCB0ZXJtMiwgJnJlbTEsICZyZW0yICk7CisgICAgICAgIHdoaWxlICggKHNiaXRzNjQpIHJlbTEgPCAwICkgeworICAgICAgICAgICAgLS16U2lnMTsKKyAgICAgICAgICAgIGFkZDEyOCggcmVtMSwgcmVtMiwgMCwgYlNpZywgJnJlbTEsICZyZW0yICk7CisgICAgICAgIH0KKyAgICAgICAgelNpZzEgfD0gKCAoIHJlbTEgfCByZW0yICkgIT0gMCApOworICAgIH0KKyAgICByZXR1cm4KKyAgICAgICAgcm91bmRBbmRQYWNrRmxvYXR4ODAoCisgICAgICAgICAgICBmbG9hdHg4MF9yb3VuZGluZ19wcmVjaXNpb24sIHpTaWduLCB6RXhwLCB6U2lnMCwgelNpZzEgKTsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIHRoZSBleHRlbmRlZCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlCitgYScgd2l0aCByZXNwZWN0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGBiJy4gIFRoZSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkCithY2NvcmRpbmcgdG8gdGhlIElFQy9JRUVFIFN0YW5kYXJkIGZvciBCaW5hcnkgRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbG9hdHg4MCBmbG9hdHg4MF9yZW0oIGZsb2F0eDgwIGEsIGZsb2F0eDgwIGIgKQoreworICAgIGZsYWcgYVNpZ24sIGJTaWduLCB6U2lnbjsKKyAgICBpbnQzMiBhRXhwLCBiRXhwLCBleHBEaWZmOworICAgIGJpdHM2NCBhU2lnMCwgYVNpZzEsIGJTaWc7CisgICAgYml0czY0IHEsIHRlcm0wLCB0ZXJtMSwgYWx0ZXJuYXRlQVNpZzAsIGFsdGVybmF0ZUFTaWcxOworICAgIGZsb2F0eDgwIHo7CisKKyAgICBhU2lnMCA9IGV4dHJhY3RGbG9hdHg4MEZyYWMoIGEgKTsKKyAgICBhRXhwID0gZXh0cmFjdEZsb2F0eDgwRXhwKCBhICk7CisgICAgYVNpZ24gPSBleHRyYWN0RmxvYXR4ODBTaWduKCBhICk7CisgICAgYlNpZyA9IGV4dHJhY3RGbG9hdHg4MEZyYWMoIGIgKTsKKyAgICBiRXhwID0gZXh0cmFjdEZsb2F0eDgwRXhwKCBiICk7CisgICAgYlNpZ24gPSBleHRyYWN0RmxvYXR4ODBTaWduKCBiICk7CisgICAgaWYgKCBhRXhwID09IDB4N0ZGRiApIHsKKyAgICAgICAgaWYgKCAgICAoYml0czY0KSAoIGFTaWcwPDwxICkKKyAgICAgICAgICAgICB8fCAoICggYkV4cCA9PSAweDdGRkYgKSAmJiAoYml0czY0KSAoIGJTaWc8PDEgKSApICkgeworICAgICAgICAgICAgcmV0dXJuIHByb3BhZ2F0ZUZsb2F0eDgwTmFOKCBhLCBiICk7CisgICAgICAgIH0KKyAgICAgICAgZ290byBpbnZhbGlkOworICAgIH0KKyAgICBpZiAoIGJFeHAgPT0gMHg3RkZGICkgeworICAgICAgICBpZiAoIChiaXRzNjQpICggYlNpZzw8MSApICkgcmV0dXJuIHByb3BhZ2F0ZUZsb2F0eDgwTmFOKCBhLCBiICk7CisgICAgICAgIHJldHVybiBhOworICAgIH0KKyAgICBpZiAoIGJFeHAgPT0gMCApIHsKKyAgICAgICAgaWYgKCBiU2lnID09IDAgKSB7CisgaW52YWxpZDoKKyAgICAgICAgICAgIGZsb2F0X3JhaXNlKCBmbG9hdF9mbGFnX2ludmFsaWQgKTsKKyAgICAgICAgICAgIHoubG93ID0gZmxvYXR4ODBfZGVmYXVsdF9uYW5fbG93OworICAgICAgICAgICAgei5oaWdoID0gZmxvYXR4ODBfZGVmYXVsdF9uYW5faGlnaDsKKyAgICAgICAgICAgIHJldHVybiB6OworICAgICAgICB9CisgICAgICAgIG5vcm1hbGl6ZUZsb2F0eDgwU3Vibm9ybWFsKCBiU2lnLCAmYkV4cCwgJmJTaWcgKTsKKyAgICB9CisgICAgaWYgKCBhRXhwID09IDAgKSB7CisgICAgICAgIGlmICggKGJpdHM2NCkgKCBhU2lnMDw8MSApID09IDAgKSByZXR1cm4gYTsKKyAgICAgICAgbm9ybWFsaXplRmxvYXR4ODBTdWJub3JtYWwoIGFTaWcwLCAmYUV4cCwgJmFTaWcwICk7CisgICAgfQorICAgIGJTaWcgfD0gTElUNjQoIDB4ODAwMDAwMDAwMDAwMDAwMCApOworICAgIHpTaWduID0gYVNpZ247CisgICAgZXhwRGlmZiA9IGFFeHAgLSBiRXhwOworICAgIGFTaWcxID0gMDsKKyAgICBpZiAoIGV4cERpZmYgPCAwICkgeworICAgICAgICBpZiAoIGV4cERpZmYgPCAtMSApIHJldHVybiBhOworICAgICAgICBzaGlmdDEyOFJpZ2h0KCBhU2lnMCwgMCwgMSwgJmFTaWcwLCAmYVNpZzEgKTsKKyAgICAgICAgZXhwRGlmZiA9IDA7CisgICAgfQorICAgIHEgPSAoIGJTaWcgPD0gYVNpZzAgKTsKKyAgICBpZiAoIHEgKSBhU2lnMCAtPSBiU2lnOworICAgIGV4cERpZmYgLT0gNjQ7CisgICAgd2hpbGUgKCAwIDwgZXhwRGlmZiApIHsKKyAgICAgICAgcSA9IGVzdGltYXRlRGl2MTI4VG82NCggYVNpZzAsIGFTaWcxLCBiU2lnICk7CisgICAgICAgIHEgPSAoIDIgPCBxICkgPyBxIC0gMiA6IDA7CisgICAgICAgIG11bDY0VG8xMjgoIGJTaWcsIHEsICZ0ZXJtMCwgJnRlcm0xICk7CisgICAgICAgIHN1YjEyOCggYVNpZzAsIGFTaWcxLCB0ZXJtMCwgdGVybTEsICZhU2lnMCwgJmFTaWcxICk7CisgICAgICAgIHNob3J0U2hpZnQxMjhMZWZ0KCBhU2lnMCwgYVNpZzEsIDYyLCAmYVNpZzAsICZhU2lnMSApOworICAgICAgICBleHBEaWZmIC09IDYyOworICAgIH0KKyAgICBleHBEaWZmICs9IDY0OworICAgIGlmICggMCA8IGV4cERpZmYgKSB7CisgICAgICAgIHEgPSBlc3RpbWF0ZURpdjEyOFRvNjQoIGFTaWcwLCBhU2lnMSwgYlNpZyApOworICAgICAgICBxID0gKCAyIDwgcSApID8gcSAtIDIgOiAwOworICAgICAgICBxID4+PSA2NCAtIGV4cERpZmY7CisgICAgICAgIG11bDY0VG8xMjgoIGJTaWcsIHE8PCggNjQgLSBleHBEaWZmICksICZ0ZXJtMCwgJnRlcm0xICk7CisgICAgICAgIHN1YjEyOCggYVNpZzAsIGFTaWcxLCB0ZXJtMCwgdGVybTEsICZhU2lnMCwgJmFTaWcxICk7CisgICAgICAgIHNob3J0U2hpZnQxMjhMZWZ0KCAwLCBiU2lnLCA2NCAtIGV4cERpZmYsICZ0ZXJtMCwgJnRlcm0xICk7CisgICAgICAgIHdoaWxlICggbGUxMjgoIHRlcm0wLCB0ZXJtMSwgYVNpZzAsIGFTaWcxICkgKSB7CisgICAgICAgICAgICArK3E7CisgICAgICAgICAgICBzdWIxMjgoIGFTaWcwLCBhU2lnMSwgdGVybTAsIHRlcm0xLCAmYVNpZzAsICZhU2lnMSApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB0ZXJtMSA9IDA7CisgICAgICAgIHRlcm0wID0gYlNpZzsKKyAgICB9CisgICAgc3ViMTI4KCB0ZXJtMCwgdGVybTEsIGFTaWcwLCBhU2lnMSwgJmFsdGVybmF0ZUFTaWcwLCAmYWx0ZXJuYXRlQVNpZzEgKTsKKyAgICBpZiAoICAgIGx0MTI4KCBhbHRlcm5hdGVBU2lnMCwgYWx0ZXJuYXRlQVNpZzEsIGFTaWcwLCBhU2lnMSApCisgICAgICAgICB8fCAoICAgIGVxMTI4KCBhbHRlcm5hdGVBU2lnMCwgYWx0ZXJuYXRlQVNpZzEsIGFTaWcwLCBhU2lnMSApCisgICAgICAgICAgICAgICYmICggcSAmIDEgKSApCisgICAgICAgKSB7CisgICAgICAgIGFTaWcwID0gYWx0ZXJuYXRlQVNpZzA7CisgICAgICAgIGFTaWcxID0gYWx0ZXJuYXRlQVNpZzE7CisgICAgICAgIHpTaWduID0gISB6U2lnbjsKKyAgICB9CisgICAgcmV0dXJuCisgICAgICAgIG5vcm1hbGl6ZVJvdW5kQW5kUGFja0Zsb2F0eDgwKAorICAgICAgICAgICAgODAsIHpTaWduLCBiRXhwICsgZXhwRGlmZiwgYVNpZzAsIGFTaWcxICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgdGhlIHNxdWFyZSByb290IG9mIHRoZSBleHRlbmRlZCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50Cit2YWx1ZSBgYScuICBUaGUgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBhY2NvcmRpbmcgdG8gdGhlIElFQy9JRUVFIFN0YW5kYXJkCitmb3IgQmluYXJ5IEZsb2F0aW5nLXBvaW50IEFyaXRobWV0aWMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworZmxvYXR4ODAgZmxvYXR4ODBfc3FydCggZmxvYXR4ODAgYSApCit7CisgICAgZmxhZyBhU2lnbjsKKyAgICBpbnQzMiBhRXhwLCB6RXhwOworICAgIGJpdHM2NCBhU2lnMCwgYVNpZzEsIHpTaWcwLCB6U2lnMTsKKyAgICBiaXRzNjQgcmVtMCwgcmVtMSwgcmVtMiwgcmVtMywgdGVybTAsIHRlcm0xLCB0ZXJtMiwgdGVybTM7CisgICAgYml0czY0IHNoaWZ0ZWRSZW0wLCBzaGlmdGVkUmVtMTsKKyAgICBmbG9hdHg4MCB6OworCisgICAgYVNpZzAgPSBleHRyYWN0RmxvYXR4ODBGcmFjKCBhICk7CisgICAgYUV4cCA9IGV4dHJhY3RGbG9hdHg4MEV4cCggYSApOworICAgIGFTaWduID0gZXh0cmFjdEZsb2F0eDgwU2lnbiggYSApOworICAgIGlmICggYUV4cCA9PSAweDdGRkYgKSB7CisgICAgICAgIGlmICggKGJpdHM2NCkgKCBhU2lnMDw8MSApICkgcmV0dXJuIHByb3BhZ2F0ZUZsb2F0eDgwTmFOKCBhLCBhICk7CisgICAgICAgIGlmICggISBhU2lnbiApIHJldHVybiBhOworICAgICAgICBnb3RvIGludmFsaWQ7CisgICAgfQorICAgIGlmICggYVNpZ24gKSB7CisgICAgICAgIGlmICggKCBhRXhwIHwgYVNpZzAgKSA9PSAwICkgcmV0dXJuIGE7CisgaW52YWxpZDoKKyAgICAgICAgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfaW52YWxpZCApOworICAgICAgICB6LmxvdyA9IGZsb2F0eDgwX2RlZmF1bHRfbmFuX2xvdzsKKyAgICAgICAgei5oaWdoID0gZmxvYXR4ODBfZGVmYXVsdF9uYW5faGlnaDsKKyAgICAgICAgcmV0dXJuIHo7CisgICAgfQorICAgIGlmICggYUV4cCA9PSAwICkgeworICAgICAgICBpZiAoIGFTaWcwID09IDAgKSByZXR1cm4gcGFja0Zsb2F0eDgwKCAwLCAwLCAwICk7CisgICAgICAgIG5vcm1hbGl6ZUZsb2F0eDgwU3Vibm9ybWFsKCBhU2lnMCwgJmFFeHAsICZhU2lnMCApOworICAgIH0KKyAgICB6RXhwID0gKCAoIGFFeHAgLSAweDNGRkYgKT4+MSApICsgMHgzRkZGOworICAgIHpTaWcwID0gZXN0aW1hdGVTcXJ0MzIoIGFFeHAsIGFTaWcwPj4zMiApOworICAgIHpTaWcwIDw8PSAzMTsKKyAgICBhU2lnMSA9IDA7CisgICAgc2hpZnQxMjhSaWdodCggYVNpZzAsIDAsICggYUV4cCAmIDEgKSArIDIsICZhU2lnMCwgJmFTaWcxICk7CisgICAgelNpZzAgPSBlc3RpbWF0ZURpdjEyOFRvNjQoIGFTaWcwLCBhU2lnMSwgelNpZzAgKSArIHpTaWcwICsgNDsKKyAgICBpZiAoIDAgPD0gKHNiaXRzNjQpIHpTaWcwICkgelNpZzAgPSBMSVQ2NCggMHhGRkZGRkZGRkZGRkZGRkZGICk7CisgICAgc2hvcnRTaGlmdDEyOExlZnQoIGFTaWcwLCBhU2lnMSwgMiwgJmFTaWcwLCAmYVNpZzEgKTsKKyAgICBtdWw2NFRvMTI4KCB6U2lnMCwgelNpZzAsICZ0ZXJtMCwgJnRlcm0xICk7CisgICAgc3ViMTI4KCBhU2lnMCwgYVNpZzEsIHRlcm0wLCB0ZXJtMSwgJnJlbTAsICZyZW0xICk7CisgICAgd2hpbGUgKCAoc2JpdHM2NCkgcmVtMCA8IDAgKSB7CisgICAgICAgIC0telNpZzA7CisgICAgICAgIHNob3J0U2hpZnQxMjhMZWZ0KCAwLCB6U2lnMCwgMSwgJnRlcm0wLCAmdGVybTEgKTsKKyAgICAgICAgdGVybTEgfD0gMTsKKyAgICAgICAgYWRkMTI4KCByZW0wLCByZW0xLCB0ZXJtMCwgdGVybTEsICZyZW0wLCAmcmVtMSApOworICAgIH0KKyAgICBzaG9ydFNoaWZ0MTI4TGVmdCggcmVtMCwgcmVtMSwgNjMsICZzaGlmdGVkUmVtMCwgJnNoaWZ0ZWRSZW0xICk7CisgICAgelNpZzEgPSBlc3RpbWF0ZURpdjEyOFRvNjQoIHNoaWZ0ZWRSZW0wLCBzaGlmdGVkUmVtMSwgelNpZzAgKTsKKyAgICBpZiAoIChiaXRzNjQpICggelNpZzE8PDEgKSA8PSAxMCApIHsKKyAgICAgICAgaWYgKCB6U2lnMSA9PSAwICkgelNpZzEgPSAxOworICAgICAgICBtdWw2NFRvMTI4KCB6U2lnMCwgelNpZzEsICZ0ZXJtMSwgJnRlcm0yICk7CisgICAgICAgIHNob3J0U2hpZnQxMjhMZWZ0KCB0ZXJtMSwgdGVybTIsIDEsICZ0ZXJtMSwgJnRlcm0yICk7CisgICAgICAgIHN1YjEyOCggcmVtMSwgMCwgdGVybTEsIHRlcm0yLCAmcmVtMSwgJnJlbTIgKTsKKyAgICAgICAgbXVsNjRUbzEyOCggelNpZzEsIHpTaWcxLCAmdGVybTIsICZ0ZXJtMyApOworICAgICAgICBzdWIxOTIoIHJlbTEsIHJlbTIsIDAsIDAsIHRlcm0yLCB0ZXJtMywgJnJlbTEsICZyZW0yLCAmcmVtMyApOworICAgICAgICB3aGlsZSAoIChzYml0czY0KSByZW0xIDwgMCApIHsKKyAgICAgICAgICAgIC0telNpZzE7CisgICAgICAgICAgICBzaG9ydFNoaWZ0MTkyTGVmdCggMCwgelNpZzAsIHpTaWcxLCAxLCAmdGVybTEsICZ0ZXJtMiwgJnRlcm0zICk7CisgICAgICAgICAgICB0ZXJtMyB8PSAxOworICAgICAgICAgICAgYWRkMTkyKAorICAgICAgICAgICAgICAgIHJlbTEsIHJlbTIsIHJlbTMsIHRlcm0xLCB0ZXJtMiwgdGVybTMsICZyZW0xLCAmcmVtMiwgJnJlbTMgKTsKKyAgICAgICAgfQorICAgICAgICB6U2lnMSB8PSAoICggcmVtMSB8IHJlbTIgfCByZW0zICkgIT0gMCApOworICAgIH0KKyAgICByZXR1cm4KKyAgICAgICAgcm91bmRBbmRQYWNrRmxvYXR4ODAoCisgICAgICAgICAgICBmbG9hdHg4MF9yb3VuZGluZ19wcmVjaXNpb24sIDAsIHpFeHAsIHpTaWcwLCB6U2lnMSApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIDEgaWYgdGhlIGV4dGVuZGVkIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgYGEnIGlzCitlcXVhbCB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBgYicsIGFuZCAwIG90aGVyd2lzZS4gIFRoZSBjb21wYXJpc29uIGlzCitwZXJmb3JtZWQgYWNjb3JkaW5nIHRvIHRoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IgQmluYXJ5IEZsb2F0aW5nLXBvaW50CitBcml0aG1ldGljLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2ZsYWcgZmxvYXR4ODBfZXEoIGZsb2F0eDgwIGEsIGZsb2F0eDgwIGIgKQoreworCisgICAgaWYgKCAgICAoICAgICggZXh0cmFjdEZsb2F0eDgwRXhwKCBhICkgPT0gMHg3RkZGICkKKyAgICAgICAgICAgICAgJiYgKGJpdHM2NCkgKCBleHRyYWN0RmxvYXR4ODBGcmFjKCBhICk8PDEgKSApCisgICAgICAgICB8fCAoICAgICggZXh0cmFjdEZsb2F0eDgwRXhwKCBiICkgPT0gMHg3RkZGICkKKyAgICAgICAgICAgICAgJiYgKGJpdHM2NCkgKCBleHRyYWN0RmxvYXR4ODBGcmFjKCBiICk8PDEgKSApCisgICAgICAgKSB7CisgICAgICAgIGlmICggICAgZmxvYXR4ODBfaXNfc2lnbmFsaW5nX25hbiggYSApCisgICAgICAgICAgICAgfHwgZmxvYXR4ODBfaXNfc2lnbmFsaW5nX25hbiggYiApICkgeworICAgICAgICAgICAgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfaW52YWxpZCApOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4KKyAgICAgICAgICAgKCBhLmxvdyA9PSBiLmxvdyApCisgICAgICAgICYmICggICAgKCBhLmhpZ2ggPT0gYi5oaWdoICkKKyAgICAgICAgICAgICB8fCAoICAgICggYS5sb3cgPT0gMCApCisgICAgICAgICAgICAgICAgICAmJiAoIChiaXRzMTYpICggKCBhLmhpZ2ggfCBiLmhpZ2ggKTw8MSApID09IDAgKSApCisgICAgICAgICAgICk7CisKK30KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JldHVybnMgMSBpZiB0aGUgZXh0ZW5kZWQgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSBgYScgaXMKK2xlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBgYicsIGFuZCAwIG90aGVyd2lzZS4gIFRoZQorY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQgYWNjb3JkaW5nIHRvIHRoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IgQmluYXJ5CitGbG9hdGluZy1wb2ludCBBcml0aG1ldGljLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2ZsYWcgZmxvYXR4ODBfbGUoIGZsb2F0eDgwIGEsIGZsb2F0eDgwIGIgKQoreworICAgIGZsYWcgYVNpZ24sIGJTaWduOworCisgICAgaWYgKCAgICAoICAgICggZXh0cmFjdEZsb2F0eDgwRXhwKCBhICkgPT0gMHg3RkZGICkKKyAgICAgICAgICAgICAgJiYgKGJpdHM2NCkgKCBleHRyYWN0RmxvYXR4ODBGcmFjKCBhICk8PDEgKSApCisgICAgICAgICB8fCAoICAgICggZXh0cmFjdEZsb2F0eDgwRXhwKCBiICkgPT0gMHg3RkZGICkKKyAgICAgICAgICAgICAgJiYgKGJpdHM2NCkgKCBleHRyYWN0RmxvYXR4ODBGcmFjKCBiICk8PDEgKSApCisgICAgICAgKSB7CisgICAgICAgIGZsb2F0X3JhaXNlKCBmbG9hdF9mbGFnX2ludmFsaWQgKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGFTaWduID0gZXh0cmFjdEZsb2F0eDgwU2lnbiggYSApOworICAgIGJTaWduID0gZXh0cmFjdEZsb2F0eDgwU2lnbiggYiApOworICAgIGlmICggYVNpZ24gIT0gYlNpZ24gKSB7CisgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgYVNpZ24KKyAgICAgICAgICAgIHx8ICggICAgKCAoIChiaXRzMTYpICggKCBhLmhpZ2ggfCBiLmhpZ2ggKTw8MSApICkgfCBhLmxvdyB8IGIubG93ICkKKyAgICAgICAgICAgICAgICAgPT0gMCApOworICAgIH0KKyAgICByZXR1cm4KKyAgICAgICAgICBhU2lnbiA/IGxlMTI4KCBiLmhpZ2gsIGIubG93LCBhLmhpZ2gsIGEubG93ICkKKyAgICAgICAgOiBsZTEyOCggYS5oaWdoLCBhLmxvdywgYi5oaWdoLCBiLmxvdyApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIDEgaWYgdGhlIGV4dGVuZGVkIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgYGEnIGlzCitsZXNzIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgYGInLCBhbmQgMCBvdGhlcndpc2UuICBUaGUgY29tcGFyaXNvbgoraXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yIEJpbmFyeSBGbG9hdGluZy1wb2ludAorQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbGFnIGZsb2F0eDgwX2x0KCBmbG9hdHg4MCBhLCBmbG9hdHg4MCBiICkKK3sKKyAgICBmbGFnIGFTaWduLCBiU2lnbjsKKworICAgIGlmICggICAgKCAgICAoIGV4dHJhY3RGbG9hdHg4MEV4cCggYSApID09IDB4N0ZGRiApCisgICAgICAgICAgICAgICYmIChiaXRzNjQpICggZXh0cmFjdEZsb2F0eDgwRnJhYyggYSApPDwxICkgKQorICAgICAgICAgfHwgKCAgICAoIGV4dHJhY3RGbG9hdHg4MEV4cCggYiApID09IDB4N0ZGRiApCisgICAgICAgICAgICAgICYmIChiaXRzNjQpICggZXh0cmFjdEZsb2F0eDgwRnJhYyggYiApPDwxICkgKQorICAgICAgICkgeworICAgICAgICBmbG9hdF9yYWlzZSggZmxvYXRfZmxhZ19pbnZhbGlkICk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBhU2lnbiA9IGV4dHJhY3RGbG9hdHg4MFNpZ24oIGEgKTsKKyAgICBiU2lnbiA9IGV4dHJhY3RGbG9hdHg4MFNpZ24oIGIgKTsKKyAgICBpZiAoIGFTaWduICE9IGJTaWduICkgeworICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgIGFTaWduCisgICAgICAgICAgICAmJiAoICAgICggKCAoYml0czE2KSAoICggYS5oaWdoIHwgYi5oaWdoICk8PDEgKSApIHwgYS5sb3cgfCBiLmxvdyApCisgICAgICAgICAgICAgICAgICE9IDAgKTsKKyAgICB9CisgICAgcmV0dXJuCisgICAgICAgICAgYVNpZ24gPyBsdDEyOCggYi5oaWdoLCBiLmxvdywgYS5oaWdoLCBhLmxvdyApCisgICAgICAgIDogbHQxMjgoIGEuaGlnaCwgYS5sb3csIGIuaGlnaCwgYi5sb3cgKTsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyAxIGlmIHRoZSBleHRlbmRlZCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIGBhJyBpcyBlcXVhbAordG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgYGInLCBhbmQgMCBvdGhlcndpc2UuICBUaGUgaW52YWxpZCBleGNlcHRpb24gaXMKK3JhaXNlZCBpZiBlaXRoZXIgb3BlcmFuZCBpcyBhIE5hTi4gIE90aGVyd2lzZSwgdGhlIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkCithY2NvcmRpbmcgdG8gdGhlIElFQy9JRUVFIFN0YW5kYXJkIGZvciBCaW5hcnkgRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbGFnIGZsb2F0eDgwX2VxX3NpZ25hbGluZyggZmxvYXR4ODAgYSwgZmxvYXR4ODAgYiApCit7CisKKyAgICBpZiAoICAgICggICAgKCBleHRyYWN0RmxvYXR4ODBFeHAoIGEgKSA9PSAweDdGRkYgKQorICAgICAgICAgICAgICAmJiAoYml0czY0KSAoIGV4dHJhY3RGbG9hdHg4MEZyYWMoIGEgKTw8MSApICkKKyAgICAgICAgIHx8ICggICAgKCBleHRyYWN0RmxvYXR4ODBFeHAoIGIgKSA9PSAweDdGRkYgKQorICAgICAgICAgICAgICAmJiAoYml0czY0KSAoIGV4dHJhY3RGbG9hdHg4MEZyYWMoIGIgKTw8MSApICkKKyAgICAgICApIHsKKyAgICAgICAgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfaW52YWxpZCApOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuCisgICAgICAgICAgICggYS5sb3cgPT0gYi5sb3cgKQorICAgICAgICAmJiAoICAgICggYS5oaWdoID09IGIuaGlnaCApCisgICAgICAgICAgICAgfHwgKCAgICAoIGEubG93ID09IDAgKQorICAgICAgICAgICAgICAgICAgJiYgKCAoYml0czE2KSAoICggYS5oaWdoIHwgYi5oaWdoICk8PDEgKSA9PSAwICkgKQorICAgICAgICAgICApOworCit9CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZXR1cm5zIDEgaWYgdGhlIGV4dGVuZGVkIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgYGEnIGlzIGxlc3MKK3RoYW4gb3IgZXF1YWwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgYGInLCBhbmQgMCBvdGhlcndpc2UuICBRdWlldCBOYU5zCitkbyBub3QgY2F1c2UgYW4gZXhjZXB0aW9uLiAgT3RoZXJ3aXNlLCB0aGUgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQgYWNjb3JkaW5nCit0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yIEJpbmFyeSBGbG9hdGluZy1wb2ludCBBcml0aG1ldGljLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2ZsYWcgZmxvYXR4ODBfbGVfcXVpZXQoIGZsb2F0eDgwIGEsIGZsb2F0eDgwIGIgKQoreworICAgIGZsYWcgYVNpZ24sIGJTaWduOworCisgICAgaWYgKCAgICAoICAgICggZXh0cmFjdEZsb2F0eDgwRXhwKCBhICkgPT0gMHg3RkZGICkKKyAgICAgICAgICAgICAgJiYgKGJpdHM2NCkgKCBleHRyYWN0RmxvYXR4ODBGcmFjKCBhICk8PDEgKSApCisgICAgICAgICB8fCAoICAgICggZXh0cmFjdEZsb2F0eDgwRXhwKCBiICkgPT0gMHg3RkZGICkKKyAgICAgICAgICAgICAgJiYgKGJpdHM2NCkgKCBleHRyYWN0RmxvYXR4ODBGcmFjKCBiICk8PDEgKSApCisgICAgICAgKSB7CisgICAgICAgIGlmICggICAgZmxvYXR4ODBfaXNfc2lnbmFsaW5nX25hbiggYSApCisgICAgICAgICAgICAgfHwgZmxvYXR4ODBfaXNfc2lnbmFsaW5nX25hbiggYiApICkgeworICAgICAgICAgICAgZmxvYXRfcmFpc2UoIGZsb2F0X2ZsYWdfaW52YWxpZCApOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBhU2lnbiA9IGV4dHJhY3RGbG9hdHg4MFNpZ24oIGEgKTsKKyAgICBiU2lnbiA9IGV4dHJhY3RGbG9hdHg4MFNpZ24oIGIgKTsKKyAgICBpZiAoIGFTaWduICE9IGJTaWduICkgeworICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgIGFTaWduCisgICAgICAgICAgICB8fCAoICAgICggKCAoYml0czE2KSAoICggYS5oaWdoIHwgYi5oaWdoICk8PDEgKSApIHwgYS5sb3cgfCBiLmxvdyApCisgICAgICAgICAgICAgICAgID09IDAgKTsKKyAgICB9CisgICAgcmV0dXJuCisgICAgICAgICAgYVNpZ24gPyBsZTEyOCggYi5oaWdoLCBiLmxvdywgYS5oaWdoLCBhLmxvdyApCisgICAgICAgIDogbGUxMjgoIGEuaGlnaCwgYS5sb3csIGIuaGlnaCwgYi5sb3cgKTsKKworfQorCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV0dXJucyAxIGlmIHRoZSBleHRlbmRlZCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIGBhJyBpcyBsZXNzCit0aGFuIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGBiJywgYW5kIDAgb3RoZXJ3aXNlLiAgUXVpZXQgTmFOcyBkbyBub3QgY2F1c2UKK2FuIGV4Y2VwdGlvbi4gIE90aGVyd2lzZSwgdGhlIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUKK0lFQy9JRUVFIFN0YW5kYXJkIGZvciBCaW5hcnkgRmxvYXRpbmctcG9pbnQgQXJpdGhtZXRpYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbGFnIGZsb2F0eDgwX2x0X3F1aWV0KCBmbG9hdHg4MCBhLCBmbG9hdHg4MCBiICkKK3sKKyAgICBmbGFnIGFTaWduLCBiU2lnbjsKKworICAgIGlmICggICAgKCAgICAoIGV4dHJhY3RGbG9hdHg4MEV4cCggYSApID09IDB4N0ZGRiApCisgICAgICAgICAgICAgICYmIChiaXRzNjQpICggZXh0cmFjdEZsb2F0eDgwRnJhYyggYSApPDwxICkgKQorICAgICAgICAgfHwgKCAgICAoIGV4dHJhY3RGbG9hdHg4MEV4cCggYiApID09IDB4N0ZGRiApCisgICAgICAgICAgICAgICYmIChiaXRzNjQpICggZXh0cmFjdEZsb2F0eDgwRnJhYyggYiApPDwxICkgKQorICAgICAgICkgeworICAgICAgICBpZiAoICAgIGZsb2F0eDgwX2lzX3NpZ25hbGluZ19uYW4oIGEgKQorICAgICAgICAgICAgIHx8IGZsb2F0eDgwX2lzX3NpZ25hbGluZ19uYW4oIGIgKSApIHsKKyAgICAgICAgICAgIGZsb2F0X3JhaXNlKCBmbG9hdF9mbGFnX2ludmFsaWQgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgYVNpZ24gPSBleHRyYWN0RmxvYXR4ODBTaWduKCBhICk7CisgICAgYlNpZ24gPSBleHRyYWN0RmxvYXR4ODBTaWduKCBiICk7CisgICAgaWYgKCBhU2lnbiAhPSBiU2lnbiApIHsKKyAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICBhU2lnbgorICAgICAgICAgICAgJiYgKCAgICAoICggKGJpdHMxNikgKCAoIGEuaGlnaCB8IGIuaGlnaCApPDwxICkgKSB8IGEubG93IHwgYi5sb3cgKQorICAgICAgICAgICAgICAgICAhPSAwICk7CisgICAgfQorICAgIHJldHVybgorICAgICAgICAgIGFTaWduID8gbHQxMjgoIGIuaGlnaCwgYi5sb3csIGEuaGlnaCwgYS5sb3cgKQorICAgICAgICA6IGx0MTI4KCBhLmhpZ2gsIGEubG93LCBiLmhpZ2gsIGIubG93ICk7CisKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL3NvZnRmbG9hdC5oIGIvYXJjaC9hcm0vbndmcGUvc29mdGZsb2F0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUxNzQzMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL253ZnBlL3NvZnRmbG9hdC5oCkBAIC0wLDAgKzEsMjc4IEBACisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgQyBoZWFkZXIgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTb2Z0RmxvYXQgSUVDL0lFRUUgRmxvYXRpbmctcG9pbnQKK0FyaXRobWV0aWMgUGFja2FnZSwgUmVsZWFzZSAyLgorCitXcml0dGVuIGJ5IEpvaG4gUi4gSGF1c2VyLiAgVGhpcyB3b3JrIHdhcyBtYWRlIHBvc3NpYmxlIGluIHBhcnQgYnkgdGhlCitJbnRlcm5hdGlvbmFsIENvbXB1dGVyIFNjaWVuY2UgSW5zdGl0dXRlLCBsb2NhdGVkIGF0IFN1aXRlIDYwMCwgMTk0NyBDZW50ZXIKK1N0cmVldCwgQmVya2VsZXksIENhbGlmb3JuaWEgOTQ3MDQuICBGdW5kaW5nIHdhcyBwYXJ0aWFsbHkgcHJvdmlkZWQgYnkgdGhlCitOYXRpb25hbCBTY2llbmNlIEZvdW5kYXRpb24gdW5kZXIgZ3JhbnQgTUlQLTkzMTE5ODAuICBUaGUgb3JpZ2luYWwgdmVyc2lvbgorb2YgdGhpcyBjb2RlIHdhcyB3cml0dGVuIGFzIHBhcnQgb2YgYSBwcm9qZWN0IHRvIGJ1aWxkIGEgZml4ZWQtcG9pbnQgdmVjdG9yCitwcm9jZXNzb3IgaW4gY29sbGFib3JhdGlvbiB3aXRoIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYXQgQmVya2VsZXksCitvdmVyc2VlbiBieSBQcm9mcy4gTmVsc29uIE1vcmdhbiBhbmQgSm9obiBXYXdyenluZWsuICBNb3JlIGluZm9ybWF0aW9uCitpcyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgV2ViIHBhZ2UgYGh0dHA6Ly9IVFRQLkNTLkJlcmtlbGV5LkVEVS9+amhhdXNlci8KK2FyaXRobWV0aWMvc29mdGZsb2F0Lmh0bWwnLgorCitUSElTIFNPRlRXQVJFIElTIERJU1RSSUJVVEVEIEFTIElTLCBGT1IgRlJFRS4gIEFsdGhvdWdoIHJlYXNvbmFibGUgZWZmb3J0CitoYXMgYmVlbiBtYWRlIHRvIGF2b2lkIGl0LCBUSElTIFNPRlRXQVJFIE1BWSBDT05UQUlOIEZBVUxUUyBUSEFUIFdJTEwgQVQKK1RJTUVTIFJFU1VMVCBJTiBJTkNPUlJFQ1QgQkVIQVZJT1IuICBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBJUyBSRVNUUklDVEVEIFRPCitQRVJTT05TIEFORCBPUkdBTklaQVRJT05TIFdITyBDQU4gQU5EIFdJTEwgVEFLRSBGVUxMIFJFU1BPTlNJQklMSVRZIEZPUiBBTlkKK0FORCBBTEwgTE9TU0VTLCBDT1NUUywgT1IgT1RIRVIgUFJPQkxFTVMgQVJJU0lORyBGUk9NIElUUyBVU0UuCisKK0Rlcml2YXRpdmUgd29ya3MgYXJlIGFjY2VwdGFibGUsIGV2ZW4gZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMsIHNvIGxvbmcgYXMKKygxKSB0aGV5IGluY2x1ZGUgcHJvbWluZW50IG5vdGljZSB0aGF0IHRoZSB3b3JrIGlzIGRlcml2YXRpdmUsIGFuZCAoMikgdGhleQoraW5jbHVkZSBwcm9taW5lbnQgbm90aWNlIGFraW4gdG8gdGhlc2UgdGhyZWUgcGFyYWdyYXBocyBmb3IgdGhvc2UgcGFydHMgb2YKK3RoaXMgY29kZSB0aGF0IGFyZSByZXRhaW5lZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworI2lmbmRlZiBfX1NPRlRGTE9BVF9IX18KKyNkZWZpbmUgX19TT0ZURkxPQVRfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBtYWNybyBgRkxPQVRYODAnIG11c3QgYmUgZGVmaW5lZCB0byBlbmFibGUgdGhlIGV4dGVuZGVkIGRvdWJsZS1wcmVjaXNpb24KK2Zsb2F0aW5nLXBvaW50IGZvcm1hdCBgZmxvYXR4ODAnLiAgSWYgdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCwgdGhlCitgZmxvYXR4ODAnIHR5cGUgd2lsbCBub3QgYmUgZGVmaW5lZCwgYW5kIG5vbmUgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGVpdGhlcgoraW5wdXQgb3Igb3V0cHV0IHRoZSBgZmxvYXR4ODAnIHR5cGUgd2lsbCBiZSBkZWZpbmVkLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKyNpZmRlZiBDT05GSUdfRlBFX05XRlBFX1hQCisjZGVmaW5lIEZMT0FUWDgwCisjZW5kaWYKKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NvZnR3YXJlIElFQy9JRUVFIGZsb2F0aW5nLXBvaW50IHR5cGVzLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgZmxvYXQzMjsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGZsb2F0NjQ7Cit0eXBlZGVmIHN0cnVjdCB7CisgICAgdW5zaWduZWQgc2hvcnQgaGlnaDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbG93OworfSBmbG9hdHg4MDsKKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NvZnR3YXJlIElFQy9JRUVFIGZsb2F0aW5nLXBvaW50IHVuZGVyZmxvdyB0aW5pbmVzcy1kZXRlY3Rpb24gbW9kZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitleHRlcm4gc2lnbmVkIGNoYXIgZmxvYXRfZGV0ZWN0X3RpbmluZXNzOworZW51bSB7CisgICAgZmxvYXRfdGluaW5lc3NfYWZ0ZXJfcm91bmRpbmcgID0gMCwKKyAgICBmbG9hdF90aW5pbmVzc19iZWZvcmVfcm91bmRpbmcgPSAxCit9OworCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU29mdHdhcmUgSUVDL0lFRUUgZmxvYXRpbmctcG9pbnQgcm91bmRpbmcgbW9kZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitleHRlcm4gc2lnbmVkIGNoYXIgZmxvYXRfcm91bmRpbmdfbW9kZTsKK2VudW0geworICAgIGZsb2F0X3JvdW5kX25lYXJlc3RfZXZlbiA9IDAsCisgICAgZmxvYXRfcm91bmRfdG9femVybyAgICAgID0gMSwKKyAgICBmbG9hdF9yb3VuZF9kb3duICAgICAgICAgPSAyLAorICAgIGZsb2F0X3JvdW5kX3VwICAgICAgICAgICA9IDMKK307CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTb2Z0d2FyZSBJRUMvSUVFRSBmbG9hdGluZy1wb2ludCBleGNlcHRpb24gZmxhZ3MuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitleHRlcm4gc2lnbmVkIGNoYXIgZmxvYXRfZXhjZXB0aW9uX2ZsYWdzOworZW51bSB7CisgICAgZmxvYXRfZmxhZ19pbmV4YWN0ICAgPSAgMSwKKyAgICBmbG9hdF9mbGFnX3VuZGVyZmxvdyA9ICAyLAorICAgIGZsb2F0X2ZsYWdfb3ZlcmZsb3cgID0gIDQsCisgICAgZmxvYXRfZmxhZ19kaXZieXplcm8gPSAgOCwKKyAgICBmbG9hdF9mbGFnX2ludmFsaWQgICA9IDE2Cit9OworCitTY290dEI6IE5vdmVtYmVyIDQsIDE5OTgKK0NoYW5nZWQgdGhlIGVudW1lcmF0aW9uIHRvIG1hdGNoIHRoZSBiaXQgb3JkZXIgaW4gdGhlIEZQQTExLgorKi8KKworZXh0ZXJuIHNpZ25lZCBjaGFyIGZsb2F0X2V4Y2VwdGlvbl9mbGFnczsKK2VudW0geworICAgIGZsb2F0X2ZsYWdfaW52YWxpZCAgID0gIDEsCisgICAgZmxvYXRfZmxhZ19kaXZieXplcm8gPSAgMiwKKyAgICBmbG9hdF9mbGFnX292ZXJmbG93ICA9ICA0LAorICAgIGZsb2F0X2ZsYWdfdW5kZXJmbG93ID0gIDgsCisgICAgZmxvYXRfZmxhZ19pbmV4YWN0ICAgPSAxNgorfTsKKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JvdXRpbmUgdG8gcmFpc2UgYW55IG9yIGFsbCBvZiB0aGUgc29mdHdhcmUgSUVDL0lFRUUgZmxvYXRpbmctcG9pbnQKK2V4Y2VwdGlvbiBmbGFncy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCit2b2lkIGZsb2F0X3JhaXNlKCBzaWduZWQgY2hhciApOworCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU29mdHdhcmUgSUVDL0lFRUUgaW50ZWdlci10by1mbG9hdGluZy1wb2ludCBjb252ZXJzaW9uIHJvdXRpbmVzLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2Zsb2F0MzIgaW50MzJfdG9fZmxvYXQzMiggc2lnbmVkIGludCApOworZmxvYXQ2NCBpbnQzMl90b19mbG9hdDY0KCBzaWduZWQgaW50ICk7CisjaWZkZWYgRkxPQVRYODAKK2Zsb2F0eDgwIGludDMyX3RvX2Zsb2F0eDgwKCBzaWduZWQgaW50ICk7CisjZW5kaWYKKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NvZnR3YXJlIElFQy9JRUVFIHNpbmdsZS1wcmVjaXNpb24gY29udmVyc2lvbiByb3V0aW5lcy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitzaWduZWQgaW50IGZsb2F0MzJfdG9faW50MzIoIGZsb2F0MzIgKTsKK3NpZ25lZCBpbnQgZmxvYXQzMl90b19pbnQzMl9yb3VuZF90b196ZXJvKCBmbG9hdDMyICk7CitmbG9hdDY0IGZsb2F0MzJfdG9fZmxvYXQ2NCggZmxvYXQzMiApOworI2lmZGVmIEZMT0FUWDgwCitmbG9hdHg4MCBmbG9hdDMyX3RvX2Zsb2F0eDgwKCBmbG9hdDMyICk7CisjZW5kaWYKKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NvZnR3YXJlIElFQy9JRUVFIHNpbmdsZS1wcmVjaXNpb24gb3BlcmF0aW9ucy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitmbG9hdDMyIGZsb2F0MzJfcm91bmRfdG9faW50KCBmbG9hdDMyICk7CitmbG9hdDMyIGZsb2F0MzJfYWRkKCBmbG9hdDMyLCBmbG9hdDMyICk7CitmbG9hdDMyIGZsb2F0MzJfc3ViKCBmbG9hdDMyLCBmbG9hdDMyICk7CitmbG9hdDMyIGZsb2F0MzJfbXVsKCBmbG9hdDMyLCBmbG9hdDMyICk7CitmbG9hdDMyIGZsb2F0MzJfZGl2KCBmbG9hdDMyLCBmbG9hdDMyICk7CitmbG9hdDMyIGZsb2F0MzJfcmVtKCBmbG9hdDMyLCBmbG9hdDMyICk7CitmbG9hdDMyIGZsb2F0MzJfc3FydCggZmxvYXQzMiApOworY2hhciBmbG9hdDMyX2VxKCBmbG9hdDMyLCBmbG9hdDMyICk7CitjaGFyIGZsb2F0MzJfbGUoIGZsb2F0MzIsIGZsb2F0MzIgKTsKK2NoYXIgZmxvYXQzMl9sdCggZmxvYXQzMiwgZmxvYXQzMiApOworY2hhciBmbG9hdDMyX2VxX3NpZ25hbGluZyggZmxvYXQzMiwgZmxvYXQzMiApOworY2hhciBmbG9hdDMyX2xlX3F1aWV0KCBmbG9hdDMyLCBmbG9hdDMyICk7CitjaGFyIGZsb2F0MzJfbHRfcXVpZXQoIGZsb2F0MzIsIGZsb2F0MzIgKTsKK2NoYXIgZmxvYXQzMl9pc19zaWduYWxpbmdfbmFuKCBmbG9hdDMyICk7CisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTb2Z0d2FyZSBJRUMvSUVFRSBkb3VibGUtcHJlY2lzaW9uIGNvbnZlcnNpb24gcm91dGluZXMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworc2lnbmVkIGludCBmbG9hdDY0X3RvX2ludDMyKCBmbG9hdDY0ICk7CitzaWduZWQgaW50IGZsb2F0NjRfdG9faW50MzJfcm91bmRfdG9femVybyggZmxvYXQ2NCApOworZmxvYXQzMiBmbG9hdDY0X3RvX2Zsb2F0MzIoIGZsb2F0NjQgKTsKKyNpZmRlZiBGTE9BVFg4MAorZmxvYXR4ODAgZmxvYXQ2NF90b19mbG9hdHg4MCggZmxvYXQ2NCApOworI2VuZGlmCisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTb2Z0d2FyZSBJRUMvSUVFRSBkb3VibGUtcHJlY2lzaW9uIG9wZXJhdGlvbnMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworZmxvYXQ2NCBmbG9hdDY0X3JvdW5kX3RvX2ludCggZmxvYXQ2NCApOworZmxvYXQ2NCBmbG9hdDY0X2FkZCggZmxvYXQ2NCwgZmxvYXQ2NCApOworZmxvYXQ2NCBmbG9hdDY0X3N1YiggZmxvYXQ2NCwgZmxvYXQ2NCApOworZmxvYXQ2NCBmbG9hdDY0X211bCggZmxvYXQ2NCwgZmxvYXQ2NCApOworZmxvYXQ2NCBmbG9hdDY0X2RpdiggZmxvYXQ2NCwgZmxvYXQ2NCApOworZmxvYXQ2NCBmbG9hdDY0X3JlbSggZmxvYXQ2NCwgZmxvYXQ2NCApOworZmxvYXQ2NCBmbG9hdDY0X3NxcnQoIGZsb2F0NjQgKTsKK2NoYXIgZmxvYXQ2NF9lcSggZmxvYXQ2NCwgZmxvYXQ2NCApOworY2hhciBmbG9hdDY0X2xlKCBmbG9hdDY0LCBmbG9hdDY0ICk7CitjaGFyIGZsb2F0NjRfbHQoIGZsb2F0NjQsIGZsb2F0NjQgKTsKK2NoYXIgZmxvYXQ2NF9lcV9zaWduYWxpbmcoIGZsb2F0NjQsIGZsb2F0NjQgKTsKK2NoYXIgZmxvYXQ2NF9sZV9xdWlldCggZmxvYXQ2NCwgZmxvYXQ2NCApOworY2hhciBmbG9hdDY0X2x0X3F1aWV0KCBmbG9hdDY0LCBmbG9hdDY0ICk7CitjaGFyIGZsb2F0NjRfaXNfc2lnbmFsaW5nX25hbiggZmxvYXQ2NCApOworCisjaWZkZWYgRkxPQVRYODAKKworLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NvZnR3YXJlIElFQy9JRUVFIGV4dGVuZGVkIGRvdWJsZS1wcmVjaXNpb24gY29udmVyc2lvbiByb3V0aW5lcy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitzaWduZWQgaW50IGZsb2F0eDgwX3RvX2ludDMyKCBmbG9hdHg4MCApOworc2lnbmVkIGludCBmbG9hdHg4MF90b19pbnQzMl9yb3VuZF90b196ZXJvKCBmbG9hdHg4MCApOworZmxvYXQzMiBmbG9hdHg4MF90b19mbG9hdDMyKCBmbG9hdHg4MCApOworZmxvYXQ2NCBmbG9hdHg4MF90b19mbG9hdDY0KCBmbG9hdHg4MCApOworCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU29mdHdhcmUgSUVDL0lFRUUgZXh0ZW5kZWQgZG91YmxlLXByZWNpc2lvbiByb3VuZGluZyBwcmVjaXNpb24uICBWYWxpZAordmFsdWVzIGFyZSAzMiwgNjQsIGFuZCA4MC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCitleHRlcm4gc2lnbmVkIGNoYXIgZmxvYXR4ODBfcm91bmRpbmdfcHJlY2lzaW9uOworCisvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU29mdHdhcmUgSUVDL0lFRUUgZXh0ZW5kZWQgZG91YmxlLXByZWNpc2lvbiBvcGVyYXRpb25zLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KK2Zsb2F0eDgwIGZsb2F0eDgwX3JvdW5kX3RvX2ludCggZmxvYXR4ODAgKTsKK2Zsb2F0eDgwIGZsb2F0eDgwX2FkZCggZmxvYXR4ODAsIGZsb2F0eDgwICk7CitmbG9hdHg4MCBmbG9hdHg4MF9zdWIoIGZsb2F0eDgwLCBmbG9hdHg4MCApOworZmxvYXR4ODAgZmxvYXR4ODBfbXVsKCBmbG9hdHg4MCwgZmxvYXR4ODAgKTsKK2Zsb2F0eDgwIGZsb2F0eDgwX2RpdiggZmxvYXR4ODAsIGZsb2F0eDgwICk7CitmbG9hdHg4MCBmbG9hdHg4MF9yZW0oIGZsb2F0eDgwLCBmbG9hdHg4MCApOworZmxvYXR4ODAgZmxvYXR4ODBfc3FydCggZmxvYXR4ODAgKTsKK2NoYXIgZmxvYXR4ODBfZXEoIGZsb2F0eDgwLCBmbG9hdHg4MCApOworY2hhciBmbG9hdHg4MF9sZSggZmxvYXR4ODAsIGZsb2F0eDgwICk7CitjaGFyIGZsb2F0eDgwX2x0KCBmbG9hdHg4MCwgZmxvYXR4ODAgKTsKK2NoYXIgZmxvYXR4ODBfZXFfc2lnbmFsaW5nKCBmbG9hdHg4MCwgZmxvYXR4ODAgKTsKK2NoYXIgZmxvYXR4ODBfbGVfcXVpZXQoIGZsb2F0eDgwLCBmbG9hdHg4MCApOworY2hhciBmbG9hdHg4MF9sdF9xdWlldCggZmxvYXR4ODAsIGZsb2F0eDgwICk7CitjaGFyIGZsb2F0eDgwX2lzX3NpZ25hbGluZ19uYW4oIGZsb2F0eDgwICk7CisKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGZsYWcgZXh0cmFjdEZsb2F0MzJTaWduKGZsb2F0MzIgYSkKK3sKKwlyZXR1cm4gYSA+PiAzMTsKK30KKworc3RhdGljIGlubGluZSBmbGFnIGZsb2F0MzJfZXFfbm9jaGVjayhmbG9hdDMyIGEsIGZsb2F0MzIgYikKK3sKKwlyZXR1cm4gKGEgPT0gYikgfHwgKChiaXRzMzIpICgoYSB8IGIpIDw8IDEpID09IDApOworfQorCitzdGF0aWMgaW5saW5lIGZsYWcgZmxvYXQzMl9sdF9ub2NoZWNrKGZsb2F0MzIgYSwgZmxvYXQzMiBiKQoreworCWZsYWcgYVNpZ24sIGJTaWduOworCisJYVNpZ24gPSBleHRyYWN0RmxvYXQzMlNpZ24oYSk7CisJYlNpZ24gPSBleHRyYWN0RmxvYXQzMlNpZ24oYik7CisJaWYgKGFTaWduICE9IGJTaWduKQorCQlyZXR1cm4gYVNpZ24gJiYgKChiaXRzMzIpICgoYSB8IGIpIDw8IDEpICE9IDApOworCXJldHVybiAoYSAhPSBiKSAmJiAoYVNpZ24gXiAoYSA8IGIpKTsKK30KKworc3RhdGljIGlubGluZSBmbGFnIGV4dHJhY3RGbG9hdDY0U2lnbihmbG9hdDY0IGEpCit7CisJcmV0dXJuIGEgPj4gNjM7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxhZyBmbG9hdDY0X2VxX25vY2hlY2soZmxvYXQ2NCBhLCBmbG9hdDY0IGIpCit7CisJcmV0dXJuIChhID09IGIpIHx8ICgoYml0czY0KSAoKGEgfCBiKSA8PCAxKSA9PSAwKTsKK30KKworc3RhdGljIGlubGluZSBmbGFnIGZsb2F0NjRfbHRfbm9jaGVjayhmbG9hdDY0IGEsIGZsb2F0NjQgYikKK3sKKwlmbGFnIGFTaWduLCBiU2lnbjsKKworCWFTaWduID0gZXh0cmFjdEZsb2F0NjRTaWduKGEpOworCWJTaWduID0gZXh0cmFjdEZsb2F0NjRTaWduKGIpOworCWlmIChhU2lnbiAhPSBiU2lnbikKKwkJcmV0dXJuIGFTaWduICYmICgoYml0czY0KSAoKGEgfCBiKSA8PCAxKSAhPSAwKTsKKwlyZXR1cm4gKGEgIT0gYikgJiYgKGFTaWduIF4gKGEgPCBiKSk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vb3Byb2ZpbGUvS2NvbmZpZyBiL2FyY2gvYXJtL29wcm9maWxlL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlkMzc3MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL0tjb25maWcKQEAgLTAsMCArMSwyMyBAQAorCittZW51ICJQcm9maWxpbmcgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCitjb25maWcgUFJPRklMSU5HCisJYm9vbCAiUHJvZmlsaW5nIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGV4dGVuZGVkIHByb2ZpbGluZyBzdXBwb3J0IG1lY2hhbmlzbXMgdXNlZAorCSAgYnkgcHJvZmlsZXJzIHN1Y2ggYXMgT1Byb2ZpbGUuCisKKworY29uZmlnIE9QUk9GSUxFCisJdHJpc3RhdGUgIk9Qcm9maWxlIHN5c3RlbSBwcm9maWxpbmcgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBQUk9GSUxJTkcKKwloZWxwCisJICBPUHJvZmlsZSBpcyBhIHByb2ZpbGluZyBzeXN0ZW0gY2FwYWJsZSBvZiBwcm9maWxpbmcgdGhlCisJICB3aG9sZSBzeXN0ZW0sIGluY2x1ZGUgdGhlIGtlcm5lbCwga2VybmVsIG1vZHVsZXMsIGxpYnJhcmllcywKKwkgIGFuZCBhcHBsaWNhdGlvbnMuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2VuZG1lbnUKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vb3Byb2ZpbGUvTWFrZWZpbGUgYi9hcmNoL2FybS9vcHJvZmlsZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTFhNmU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vb3Byb2ZpbGUvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAorb2JqLSQoQ09ORklHX09QUk9GSUxFKSArPSBvcHJvZmlsZS5vCisKK0RSSVZFUl9PQkpTID0gJChhZGRwcmVmaXggLi4vLi4vLi4vZHJpdmVycy9vcHJvZmlsZS8sIFwKKwkJb3Byb2YubyBjcHVfYnVmZmVyLm8gYnVmZmVyX3N5bmMubyBcCisJCWV2ZW50X2J1ZmZlci5vIG9wcm9maWxlX2ZpbGVzLm8gXAorCQlvcHJvZmlsZWZzLm8gb3Byb2ZpbGVfc3RhdHMubyBcCisJCXRpbWVyX2ludC5vICkKKworb3Byb2ZpbGUteQkJCQk6PSAkKERSSVZFUl9PQkpTKSBpbml0Lm8KK29wcm9maWxlLSQoQ09ORklHX0NQVV9YU0NBTEUpCQkrPSBjb21tb24ubyBvcF9tb2RlbF94c2NhbGUubworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9jb21tb24uYyBiL2FyY2gvYXJtL29wcm9maWxlL2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1N2RkZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9vcHJvZmlsZS9jb21tb24uYwpAQCAtMCwwICsxLDE1NiBAQAorLyoqCisgKiBAZmlsZSBjb21tb24uYworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDQgT3Byb2ZpbGUgQXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFp3YW5lIE13YWlrYW1ibworICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKworI2luY2x1ZGUgIm9wX2NvdW50ZXIuaCIKKyNpbmNsdWRlICJvcF9hcm1fbW9kZWwuaCIKKworc3RhdGljIHN0cnVjdCBvcF9hcm1fbW9kZWxfc3BlYyAqcG11X21vZGVsOworc3RhdGljIGludCBwbXVfZW5hYmxlZDsKK3N0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIHBtdV9zZW07CisKK3N0YXRpYyBpbnQgcG11X3N0YXJ0KHZvaWQpOworc3RhdGljIGludCBwbXVfc2V0dXAodm9pZCk7CitzdGF0aWMgdm9pZCBwbXVfc3RvcCh2b2lkKTsKK3N0YXRpYyBpbnQgcG11X2NyZWF0ZV9maWxlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGRlbnRyeSAqKTsKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBwbXVfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJaWYgKHBtdV9lbmFibGVkKQorCQlwbXVfc3RvcCgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBtdV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwlpZiAocG11X2VuYWJsZWQpCisJCXBtdV9zdGFydCgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBvcHJvZmlsZV9zeXNjbGFzcyA9IHsKKwlzZXRfa3NldF9uYW1lKCJvcHJvZmlsZSIpLAorCS5yZXN1bWUJCT0gcG11X3Jlc3VtZSwKKwkuc3VzcGVuZAk9IHBtdV9zdXNwZW5kLAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGRldmljZV9vcHJvZmlsZSA9IHsKKwkuaWQJCT0gMCwKKwkuY2xzCQk9ICZvcHJvZmlsZV9zeXNjbGFzcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfZHJpdmVyZnModm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCEocmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZvcHJvZmlsZV9zeXNjbGFzcykpKQorCQlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoJmRldmljZV9vcHJvZmlsZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCAgZXhpdF9kcml2ZXJmcyh2b2lkKQoreworCXN5c2Rldl91bnJlZ2lzdGVyKCZkZXZpY2Vfb3Byb2ZpbGUpOworCXN5c2Rldl9jbGFzc191bnJlZ2lzdGVyKCZvcHJvZmlsZV9zeXNjbGFzcyk7Cit9CisjZWxzZQorI2RlZmluZSBpbml0X2RyaXZlcmZzKCkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBleGl0X2RyaXZlcmZzKCkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmIC8qIENPTkZJR19QTSAqLworCitzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgY291bnRlcl9jb25maWdbT1BfTUFYX0NPVU5URVJdOworCitzdGF0aWMgaW50IHBtdV9jcmVhdGVfZmlsZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGRlbnRyeSAqcm9vdCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwbXVfbW9kZWwtPm51bV9jb3VudGVyczsgaSsrKSB7CisJCXN0cnVjdCBkZW50cnkgKmRpcjsKKwkJY2hhciBidWZbMl07CisKKwkJc25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAiJWQiLCBpKTsKKwkJZGlyID0gb3Byb2ZpbGVmc19ta2RpcihzYiwgcm9vdCwgYnVmKTsKKwkJb3Byb2ZpbGVmc19jcmVhdGVfdWxvbmcoc2IsIGRpciwgImVuYWJsZWQiLCAmY291bnRlcl9jb25maWdbaV0uZW5hYmxlZCk7CisJCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJldmVudCIsICZjb3VudGVyX2NvbmZpZ1tpXS5ldmVudCk7CisJCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJjb3VudCIsICZjb3VudGVyX2NvbmZpZ1tpXS5jb3VudCk7CisJCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJ1bml0X21hc2siLCAmY291bnRlcl9jb25maWdbaV0udW5pdF9tYXNrKTsKKwkJb3Byb2ZpbGVmc19jcmVhdGVfdWxvbmcoc2IsIGRpciwgImtlcm5lbCIsICZjb3VudGVyX2NvbmZpZ1tpXS5rZXJuZWwpOworCQlvcHJvZmlsZWZzX2NyZWF0ZV91bG9uZyhzYiwgZGlyLCAidXNlciIsICZjb3VudGVyX2NvbmZpZ1tpXS51c2VyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbXVfc2V0dXAodm9pZCkKK3sKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrKCZvcHJvZmlsZWZzX2xvY2spOworCXJldCA9IHBtdV9tb2RlbC0+c2V0dXBfY3RycygpOworCXNwaW5fdW5sb2NrKCZvcHJvZmlsZWZzX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcG11X3N0YXJ0KHZvaWQpCit7CisJaW50IHJldCA9IC1FQlVTWTsKKworCWRvd24oJnBtdV9zZW0pOworCWlmICghcG11X2VuYWJsZWQpIHsKKwkJcmV0ID0gcG11X21vZGVsLT5zdGFydCgpOworCQlwbXVfZW5hYmxlZCA9ICFyZXQ7CisJfQorCXVwKCZwbXVfc2VtKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwbXVfc3RvcCh2b2lkKQoreworCWRvd24oJnBtdV9zZW0pOworCWlmIChwbXVfZW5hYmxlZCkKKwkJcG11X21vZGVsLT5zdG9wKCk7CisJcG11X2VuYWJsZWQgPSAwOworCXVwKCZwbXVfc2VtKTsKK30KKworaW50IF9faW5pdCBwbXVfaW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqb3BzLCBzdHJ1Y3Qgb3BfYXJtX21vZGVsX3NwZWMgKnNwZWMpCit7CisJaW5pdF9NVVRFWCgmcG11X3NlbSk7CisKKwlpZiAoc3BlYy0+aW5pdCgpIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwbXVfbW9kZWwgPSBzcGVjOworCWluaXRfZHJpdmVyZnMoKTsKKwlvcHMtPmNyZWF0ZV9maWxlcyA9IHBtdV9jcmVhdGVfZmlsZXM7CisJb3BzLT5zZXR1cCA9IHBtdV9zZXR1cDsKKwlvcHMtPnNodXRkb3duID0gcG11X3N0b3A7CisJb3BzLT5zdGFydCA9IHBtdV9zdGFydDsKKwlvcHMtPnN0b3AgPSBwbXVfc3RvcDsKKwlvcHMtPmNwdV90eXBlID0gcG11X21vZGVsLT5uYW1lOworCXByaW50ayhLRVJOX0lORk8gIm9wcm9maWxlOiB1c2luZyAlcyBQTVVcbiIsIHNwZWMtPm5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcG11X2V4aXQodm9pZCkKK3sKKwlpZiAocG11X21vZGVsKSB7CisJCWV4aXRfZHJpdmVyZnMoKTsKKwkJcG11X21vZGVsID0gTlVMTDsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL29wcm9maWxlL2luaXQuYyBiL2FyY2gvYXJtL29wcm9maWxlL2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2UzZDMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vb3Byb2ZpbGUvaW5pdC5jCkBAIC0wLDAgKzEsMzEgQEAKKy8qKgorICogQGZpbGUgaW5pdC5jCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNCBPcHJvZmlsZSBBdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgWndhbmUgTXdhaWthbWJvCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L29wcm9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSAib3BfYXJtX21vZGVsLmgiCisKK2ludCBfX2luaXQgb3Byb2ZpbGVfYXJjaF9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpCit7CisJaW50IHJldCA9IC1FTk9ERVY7CisKKyNpZmRlZiBDT05GSUdfQ1BVX1hTQ0FMRQorCXJldCA9IHBtdV9pbml0KG9wcywgJm9wX3hzY2FsZV9zcGVjKTsKKyNlbmRpZgorCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBvcHJvZmlsZV9hcmNoX2V4aXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfQ1BVX1hTQ0FMRQorCXBtdV9leGl0KCk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL29wcm9maWxlL29wX2FybV9tb2RlbC5oIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfYXJtX21vZGVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ0Y2FmNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL29wX2FybV9tb2RlbC5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qKgorICogQGZpbGUgb3BfYXJtX21vZGVsLmgKKyAqIGludGVyZmFjZSB0byBBUk0gbWFjaGluZSBzcGVjaWZpYyBvcGVyYXRpb25zCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNCBPcHJvZmlsZSBBdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgWndhbmUgTXdhaWthbWJvCisgKi8KKworI2lmbmRlZiBPUF9BUk1fTU9ERUxfSAorI2RlZmluZSBPUF9BUk1fTU9ERUxfSAorCitzdHJ1Y3Qgb3BfYXJtX21vZGVsX3NwZWMgeworCWludCAoKmluaXQpKHZvaWQpOworCXVuc2lnbmVkIGludCBudW1fY291bnRlcnM7CisJaW50ICgqc2V0dXBfY3Rycykodm9pZCk7CisJaW50ICgqc3RhcnQpKHZvaWQpOworCXZvaWQgKCpzdG9wKSh2b2lkKTsKKwljaGFyICpuYW1lOworfTsKKworI2lmZGVmIENPTkZJR19DUFVfWFNDQUxFCitleHRlcm4gc3RydWN0IG9wX2FybV9tb2RlbF9zcGVjIG9wX3hzY2FsZV9zcGVjOworI2VuZGlmCisKK2V4dGVybiBpbnQgX19pbml0IHBtdV9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMsIHN0cnVjdCBvcF9hcm1fbW9kZWxfc3BlYyAqc3BlYyk7CitleHRlcm4gdm9pZCBwbXVfZXhpdCh2b2lkKTsKKyNlbmRpZiAvKiBPUF9BUk1fTU9ERUxfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfY291bnRlci5oIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfY291bnRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1M2MxZDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9jb3VudGVyLmgKQEAgLTAsMCArMSwyOSBAQAorLyoqCisgKiBAZmlsZSBvcF9jb3VudGVyLmgKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA0IE9wcm9maWxlIEF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBad2FuZSBNd2Fpa2FtYm8KKyAqLworCisjaWZuZGVmIE9QX0NPVU5URVJfSAorI2RlZmluZSBPUF9DT1VOVEVSX0gKKworI2RlZmluZSBPUF9NQVhfQ09VTlRFUiA1CisKKy8qIFBlciBwZXJmb3JtYW5jZSBtb25pdG9yIGNvbmZpZ3VyYXRpb24gYXMgc2V0IHZpYQorICogb3Byb2ZpbGVmcy4KKyAqLworc3RydWN0IG9wX2NvdW50ZXJfY29uZmlnIHsKKwl1bnNpZ25lZCBsb25nIGNvdW50OworCXVuc2lnbmVkIGxvbmcgZW5hYmxlZDsKKwl1bnNpZ25lZCBsb25nIGV2ZW50OworCXVuc2lnbmVkIGxvbmcgdW5pdF9tYXNrOworCXVuc2lnbmVkIGxvbmcga2VybmVsOworCXVuc2lnbmVkIGxvbmcgdXNlcjsKK307CisKK2V4dGVybiBzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgY291bnRlcl9jb25maWdbXTsKKworI2VuZGlmIC8qIE9QX0NPVU5URVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfeHNjYWxlLmMgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF94c2NhbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGYwYjMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfeHNjYWxlLmMKQEAgLTAsMCArMSw0NDMgQEAKKy8qKgorICogQGZpbGUgb3BfbW9kZWxfeHNjYWxlLmMKKyAqIFhTY2FsZSBQZXJmb3JtYW5jZSBNb25pdG9yIERyaXZlcgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDAtMjAwNCBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQG12aXN0YS5jb20+CisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAwLTIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDQgRGF2ZSBKaWFuZyA8ZGF2ZS5qaWFuZ0BpbnRlbC5jb20+CisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA0IEludGVsIENvcnBvcmF0aW9uCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA0IFp3YW5lIE13YWlrYW1ibyA8endhbmVAYXJtLmxpbnV4Lm9yZy51az4KKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDQgT1Byb2ZpbGUgQXV0aG9ycworICoKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBad2FuZSBNd2Fpa2FtYm8KKyAqLworCisvKiAjZGVmaW5lIERFQlVHICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjaW5jbHVkZSAib3BfY291bnRlci5oIgorI2luY2x1ZGUgIm9wX2FybV9tb2RlbC5oIgorCisjZGVmaW5lCVBNVV9FTkFCTEUJMHgwMDEJLyogRW5hYmxlIGNvdW50ZXJzICovCisjZGVmaW5lIFBNTl9SRVNFVAkweDAwMgkvKiBSZXNldCBldmVudCBjb3VudGVycyAqLworI2RlZmluZQlDQ05UX1JFU0VUCTB4MDA0CS8qIFJlc2V0IGNsb2NrIGNvdW50ZXIgKi8KKyNkZWZpbmUJUE1VX1JFU0VUCShDQ05UX1JFU0VUIHwgUE1OX1JFU0VUKQorI2RlZmluZSBQTVVfQ05UNjQJMHgwMDgJLyogTWFrZSBDQ05UIGNvdW50IGV2ZXJ5IDY0dGggY3ljbGUgKi8KKworLyogVE9ETyBkbyBydW50aW1lIGRldGVjdGlvbiAqLworI2lmZGVmIENPTkZJR19BUkNIX0lPUDMxMAorI2RlZmluZSBYU0NBTEVfUE1VX0lSUSAgSVJRX1hTODAyMDBfUE1VCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9JT1AzMjEKKyNkZWZpbmUgWFNDQUxFX1BNVV9JUlEgIElSUV9JT1AzMjFfQ09SRV9QTVUKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX0lPUDMzMQorI2RlZmluZSBYU0NBTEVfUE1VX0lSUSAgSVJRX0lPUDMzMV9DT1JFX1BNVQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfUFhBCisjZGVmaW5lIFhTQ0FMRV9QTVVfSVJRICBJUlFfUE1VCisjZW5kaWYKKworLyoKKyAqIERpZmZlcmVudCB0eXBlcyBvZiBldmVudHMgdGhhdCBjYW4gYmUgY291bnRlZCBieSB0aGUgWFNjYWxlIFBNVQorICogYXMgdXNlZCBieSBPcHJvZmlsZSB1c2Vyc3BhY2UuIEhlcmUgcHJpbWFyaWx5IGZvciBkb2N1bWVudGF0aW9uCisgKiBwdXJwb3Nlcy4KKyAqLworCisjZGVmaW5lIEVWVF9JQ0FDSEVfTUlTUwkJCTB4MDAKKyNkZWZpbmUJRVZUX0lDQUNIRV9OT19ERUxJVkVSCQkweDAxCisjZGVmaW5lCUVWVF9EQVRBX1NUQUxMCQkJMHgwMgorI2RlZmluZQlFVlRfSVRMQl9NSVNTCQkJMHgwMworI2RlZmluZQlFVlRfRFRMQl9NSVNTCQkJMHgwNAorI2RlZmluZQlFVlRfQlJBTkNICQkJMHgwNQorI2RlZmluZQlFVlRfQlJBTkNIX01JU1MJCQkweDA2CisjZGVmaW5lCUVWVF9JTlNUUlVDVElPTgkJCTB4MDcKKyNkZWZpbmUJRVZUX0RDQUNIRV9GVUxMX1NUQUxMCQkweDA4CisjZGVmaW5lCUVWVF9EQ0FDSEVfRlVMTF9TVEFMTF9DT05USUcJMHgwOQorI2RlZmluZQlFVlRfRENBQ0hFX0FDQ0VTUwkJMHgwQQorI2RlZmluZQlFVlRfRENBQ0hFX01JU1MJCQkweDBCCisjZGVmaW5lCUVWVF9EQ0FDRV9XUklURV9CQUNLCQkweDBDCisjZGVmaW5lCUVWVF9QQ19DSEFOR0VECQkJMHgwRAorI2RlZmluZQlFVlRfQkNVX1JFUVVFU1QJCQkweDEwCisjZGVmaW5lCUVWVF9CQ1VfRlVMTAkJCTB4MTEKKyNkZWZpbmUJRVZUX0JDVV9EUkFJTgkJCTB4MTIKKyNkZWZpbmUJRVZUX0JDVV9FQ0NfTk9fRUxPRwkJMHgxNAorI2RlZmluZQlFVlRfQkNVXzFfQklUX0VSUgkJMHgxNQorI2RlZmluZQlFVlRfUk1XCQkJCTB4MTYKKy8qIEVWVF9DQ05UIGlzIG5vdCBoYXJkd2FyZSBkZWZpbmVkICovCisjZGVmaW5lIEVWVF9DQ05UCQkJMHhGRQorI2RlZmluZSBFVlRfVU5VU0VECQkJMHhGRgorCitzdHJ1Y3QgcG11X2NvdW50ZXIgeworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgb3ZmOworCXVuc2lnbmVkIGxvbmcgcmVzZXRfY291bnRlcjsKK307CisKK2VudW0geyBDQ05ULCBQTU4wLCBQTU4xLCBQTU4yLCBQTU4zLCBNQVhfQ09VTlRFUlMgfTsKKworc3RhdGljIHN0cnVjdCBwbXVfY291bnRlciByZXN1bHRzW01BWF9DT1VOVEVSU107CisKKy8qCisgKiBUaGVyZSBhcmUgdHdvIHZlcnNpb25zIG9mIHRoZSBQTVUgaW4gY3VycmVudCBYU2NhbGUgcHJvY2Vzc29ycworICogd2l0aCBkaWZmZXJpbmcgcmVnaXN0ZXIgbGF5b3V0cyBhbmQgbnVtYmVyIG9mIHBlcmZvcm1hbmNlIGNvdW50ZXJzLgorICogZS5nLiBJT1AzMjEgaXMgeHNjMSB3aGlsc3QgSU9QMzMxIGlzIHhzYzIuCisgKiBXZSBkZXRlY3Qgd2hpY2ggcmVnaXN0ZXIgbGF5b3V0IHRvIHVzZSBpbiB4c2NhbGVfZGV0ZWN0X3BtdSgpCisgKi8KK2VudW0geyBQTVVfWFNDMSwgUE1VX1hTQzIgfTsKKworc3RydWN0IHBtdV90eXBlIHsKKwlpbnQgaWQ7CisJY2hhciAqbmFtZTsKKwlpbnQgbnVtX2NvdW50ZXJzOworCXVuc2lnbmVkIGludCBpbnRfZW5hYmxlOworCXVuc2lnbmVkIGludCBjbnRfb3ZmW01BWF9DT1VOVEVSU107CisJdW5zaWduZWQgaW50IGludF9tYXNrW01BWF9DT1VOVEVSU107Cit9OworCitzdGF0aWMgc3RydWN0IHBtdV90eXBlIHBtdV9wYXJtc1tdID0geworCXsKKwkJLmlkCQk9IFBNVV9YU0MxLAorCQkubmFtZQkJPSAiYXJtL3hzY2FsZTEiLAorCQkubnVtX2NvdW50ZXJzCT0gMywKKwkJLmludF9tYXNrCT0geyBbUE1OMF0gPSAweDEwLCBbUE1OMV0gPSAweDIwLAorCQkJCSAgICBbQ0NOVF0gPSAweDQwIH0sCisJCS5jbnRfb3ZmCT0geyBbQ0NOVF0gPSAweDQwMCwgW1BNTjBdID0gMHgxMDAsCisJCQkJICAgIFtQTU4xXSA9IDB4MjAwfSwKKwl9LAorCXsKKwkJLmlkCQk9IFBNVV9YU0MyLAorCQkubmFtZQkJPSAiYXJtL3hzY2FsZTIiLAorCQkubnVtX2NvdW50ZXJzCT0gNSwKKwkJLmludF9tYXNrCT0geyBbQ0NOVF0gPSAweDAxLCBbUE1OMF0gPSAweDAyLAorCQkJCSAgICBbUE1OMV0gPSAweDA0LCBbUE1OMl0gPSAweDA4LAorCQkJCSAgICBbUE1OM10gPSAweDEwIH0sCisJCS5jbnRfb3ZmCT0geyBbQ0NOVF0gPSAweDAxLCBbUE1OMF0gPSAweDAyLAorCQkJCSAgICBbUE1OMV0gPSAweDA0LCBbUE1OMl0gPSAweDA4LAorCQkJCSAgICBbUE1OM10gPSAweDEwIH0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcG11X3R5cGUgKnBtdTsKKworc3RhdGljIHZvaWQgd3JpdGVfcG1uYyh1MzIgdmFsKQoreworCWlmIChwbXUtPmlkID09IFBNVV9YU0MxKSB7CisJCS8qIHVwcGVyIDRiaXRzIGFuZCA3LCAxMSBhcmUgd3JpdGUtYXMtMCAqLworCQl2YWwgJj0gMHhmZmZmNzdmOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1jciBwMTQsIDAsICUwLCBjMCwgYzAsIDAiIDogOiAiciIgKHZhbCkpOworCX0gZWxzZSB7CisJCS8qIGJpdHMgNC0yMyBhcmUgd3JpdGUtYXMtMCwgMjQtMzEgYXJlIHdyaXRlIGlnbm9yZWQgKi8KKwkJdmFsICY9IDB4ZjsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtY3IgcDE0LCAwLCAlMCwgYzAsIGMxLCAwIiA6IDogInIiICh2YWwpKTsKKwl9Cit9CisKK3N0YXRpYyB1MzIgcmVhZF9wbW5jKHZvaWQpCit7CisJdTMyIHZhbDsKKworCWlmIChwbXUtPmlkID09IFBNVV9YU0MxKQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1yYyBwMTQsIDAsICUwLCBjMCwgYzAsIDAiIDogIj1yIiAodmFsKSk7CisJZWxzZSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fICgibXJjIHAxNCwgMCwgJTAsIGMwLCBjMSwgMCIgOiAiPXIiICh2YWwpKTsKKwkJLyogYml0cyAxLTIgYW5kIDQtMjMgYXJlIHJlYWQtdW5wcmVkaWN0YWJsZSAqLworCQl2YWwgJj0gMHhmZjAwMDAwOTsKKwl9CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgdTMyIF9feHNjMV9yZWFkX2NvdW50ZXIoaW50IGNvdW50ZXIpCit7CisJdTMyIHZhbCA9IDA7CisKKwlzd2l0Y2ggKGNvdW50ZXIpIHsKKwljYXNlIENDTlQ6CisJCV9fYXNtX18gX192b2xhdGlsZV9fICgibXJjIHAxNCwgMCwgJTAsIGMxLCBjMCwgMCIgOiAiPXIiICh2YWwpKTsKKwkJYnJlYWs7CisJY2FzZSBQTU4wOgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1yYyBwMTQsIDAsICUwLCBjMiwgYzAsIDAiIDogIj1yIiAodmFsKSk7CisJCWJyZWFrOworCWNhc2UgUE1OMToKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtcmMgcDE0LCAwLCAlMCwgYzMsIGMwLCAwIiA6ICI9ciIgKHZhbCkpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHUzMiBfX3hzYzJfcmVhZF9jb3VudGVyKGludCBjb3VudGVyKQoreworCXUzMiB2YWwgPSAwOworCisJc3dpdGNoIChjb3VudGVyKSB7CisJY2FzZSBDQ05UOgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1yYyBwMTQsIDAsICUwLCBjMSwgYzEsIDAiIDogIj1yIiAodmFsKSk7CisJCWJyZWFrOworCWNhc2UgUE1OMDoKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtcmMgcDE0LCAwLCAlMCwgYzAsIGMyLCAwIiA6ICI9ciIgKHZhbCkpOworCQlicmVhazsKKwljYXNlIFBNTjE6CisJCV9fYXNtX18gX192b2xhdGlsZV9fICgibXJjIHAxNCwgMCwgJTAsIGMxLCBjMiwgMCIgOiAiPXIiICh2YWwpKTsKKwkJYnJlYWs7CisJY2FzZSBQTU4yOgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1yYyBwMTQsIDAsICUwLCBjMiwgYzIsIDAiIDogIj1yIiAodmFsKSk7CisJCWJyZWFrOworCWNhc2UgUE1OMzoKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtcmMgcDE0LCAwLCAlMCwgYzMsIGMyLCAwIiA6ICI9ciIgKHZhbCkpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHUzMiByZWFkX2NvdW50ZXIoaW50IGNvdW50ZXIpCit7CisJdTMyIHZhbDsKKworCWlmIChwbXUtPmlkID09IFBNVV9YU0MxKQorCQl2YWwgPSBfX3hzYzFfcmVhZF9jb3VudGVyKGNvdW50ZXIpOworCWVsc2UKKwkJdmFsID0gX194c2MyX3JlYWRfY291bnRlcihjb3VudGVyKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9feHNjMV93cml0ZV9jb3VudGVyKGludCBjb3VudGVyLCB1MzIgdmFsKQoreworCXN3aXRjaCAoY291bnRlcikgeworCWNhc2UgQ0NOVDoKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtY3IgcDE0LCAwLCAlMCwgYzEsIGMwLCAwIiA6IDogInIiICh2YWwpKTsKKwkJYnJlYWs7CisJY2FzZSBQTU4wOgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1jciBwMTQsIDAsICUwLCBjMiwgYzAsIDAiIDogOiAiciIgKHZhbCkpOworCQlicmVhazsKKwljYXNlIFBNTjE6CisJCV9fYXNtX18gX192b2xhdGlsZV9fICgibWNyIHAxNCwgMCwgJTAsIGMzLCBjMCwgMCIgOiA6ICJyIiAodmFsKSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgX194c2MyX3dyaXRlX2NvdW50ZXIoaW50IGNvdW50ZXIsIHUzMiB2YWwpCit7CisJc3dpdGNoIChjb3VudGVyKSB7CisJY2FzZSBDQ05UOgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1jciBwMTQsIDAsICUwLCBjMSwgYzEsIDAiIDogOiAiciIgKHZhbCkpOworCQlicmVhazsKKwljYXNlIFBNTjA6CisJCV9fYXNtX18gX192b2xhdGlsZV9fICgibWNyIHAxNCwgMCwgJTAsIGMwLCBjMiwgMCIgOiA6ICJyIiAodmFsKSk7CisJCWJyZWFrOworCWNhc2UgUE1OMToKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtY3IgcDE0LCAwLCAlMCwgYzEsIGMyLCAwIiA6IDogInIiICh2YWwpKTsKKwkJYnJlYWs7CisJY2FzZSBQTU4yOgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1jciBwMTQsIDAsICUwLCBjMiwgYzIsIDAiIDogOiAiciIgKHZhbCkpOworCQlicmVhazsKKwljYXNlIFBNTjM6CisJCV9fYXNtX18gX192b2xhdGlsZV9fICgibWNyIHAxNCwgMCwgJTAsIGMzLCBjMiwgMCIgOiA6ICJyIiAodmFsKSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgd3JpdGVfY291bnRlcihpbnQgY291bnRlciwgdTMyIHZhbCkKK3sKKwlpZiAocG11LT5pZCA9PSBQTVVfWFNDMSkKKwkJX194c2MxX3dyaXRlX2NvdW50ZXIoY291bnRlciwgdmFsKTsKKwllbHNlCisJCV9feHNjMl93cml0ZV9jb3VudGVyKGNvdW50ZXIsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgeHNjYWxlX3NldHVwX2N0cnModm9pZCkKK3sKKwl1MzIgZXZ0c2VsLCBwbW5jOworCWludCBpOworCisJZm9yIChpID0gQ0NOVDsgaSA8IE1BWF9DT1VOVEVSUzsgaSsrKSB7CisJCWlmIChjb3VudGVyX2NvbmZpZ1tpXS5lbmFibGVkKQorCQkJY29udGludWU7CisKKwkJY291bnRlcl9jb25maWdbaV0uZXZlbnQgPSBFVlRfVU5VU0VEOworCX0KKworCXN3aXRjaCAocG11LT5pZCkgeworCWNhc2UgUE1VX1hTQzE6CisJCXBtbmMgPSAoY291bnRlcl9jb25maWdbUE1OMV0uZXZlbnQgPDwgMjApIHwgKGNvdW50ZXJfY29uZmlnW1BNTjBdLmV2ZW50IDw8IDEyKTsKKwkJcHJfZGVidWcoInhzY2FsZV9zZXR1cF9jdHJzOiBwbW5jOiAlIzA4eFxuIiwgcG1uYyk7CisJCXdyaXRlX3BtbmMocG1uYyk7CisJCWJyZWFrOworCisJY2FzZSBQTVVfWFNDMjoKKwkJZXZ0c2VsID0gY291bnRlcl9jb25maWdbUE1OMF0uZXZlbnQgfCAoY291bnRlcl9jb25maWdbUE1OMV0uZXZlbnQgPDwgOCkgfAorCQkJKGNvdW50ZXJfY29uZmlnW1BNTjJdLmV2ZW50IDw8IDE2KSB8IChjb3VudGVyX2NvbmZpZ1tQTU4zXS5ldmVudCA8PCAyNCk7CisKKwkJcHJfZGVidWcoInhzY2FsZV9zZXR1cF9jdHJzOiBldnRzZWwgJSMwOHhcbiIsIGV2dHNlbCk7CisJCV9fYXNtX18gX192b2xhdGlsZV9fICgibWNyIHAxNCwgMCwgJTAsIGM4LCBjMSwgMCIgOiA6ICJyIiAoZXZ0c2VsKSk7CisJCWJyZWFrOworCX0KKworCWZvciAoaSA9IENDTlQ7IGkgPCBNQVhfQ09VTlRFUlM7IGkrKykgeworCQlpZiAoY291bnRlcl9jb25maWdbaV0uZXZlbnQgPT0gRVZUX1VOVVNFRCkgeworCQkJY291bnRlcl9jb25maWdbaV0uZXZlbnQgPSAwOworCQkJcG11LT5pbnRfZW5hYmxlICY9IH5wbXUtPmludF9tYXNrW2ldOworCQkJY29udGludWU7CisJCX0KKworCQlyZXN1bHRzW2ldLnJlc2V0X2NvdW50ZXIgPSBjb3VudGVyX2NvbmZpZ1tpXS5jb3VudDsKKwkJd3JpdGVfY291bnRlcihpLCAtKHUzMiljb3VudGVyX2NvbmZpZ1tpXS5jb3VudCk7CisJCXBtdS0+aW50X2VuYWJsZSB8PSBwbXUtPmludF9tYXNrW2ldOworCQlwcl9kZWJ1ZygieHNjYWxlX3NldHVwX2N0cnM6IGNvdW50ZXIlZCAlIzA4eCBmcm9tICUjMDhseFxuIiwgaSwKKwkJCXJlYWRfY291bnRlcihpKSwgY291bnRlcl9jb25maWdbaV0uY291bnQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbmxpbmUgX194c2MxX2NoZWNrX2N0cnModm9pZCkKK3sKKwlpbnQgaTsKKwl1MzIgcG1uYyA9IHJlYWRfcG1uYygpOworCisJLyogTk9URTogdGhlcmUncyBhbiBBIHN0ZXBwaW5nIGVycmF0YSB0aGF0IHN0YXRlcyBpZiBhbiBvdmVyZmxvdyAqLworCS8qICAgICAgIGJpdCBhbHJlYWR5IGV4aXN0cyBhbmQgYW5vdGhlciBvY2N1cnMsIHRoZSBwcmV2aW91cyAgICAgKi8KKwkvKiAgICAgICBPdmVyZmxvdyBiaXQgZ2V0cyBjbGVhcmVkLiBUaGVyZSdzIG5vIHdvcmthcm91bmQuCSAqLworCS8qCSBGaXhlZCBpbiBCIHN0ZXBwaW5nIG9yIGxhdGVyCQkJIAkgKi8KKworCS8qIFdyaXRlIHRoZSB2YWx1ZSBiYWNrIHRvIGNsZWFyIHRoZSBvdmVyZmxvdyBmbGFncy4gT3ZlcmZsb3cgKi8KKwkvKiBmbGFncyByZW1haW4gaW4gcG1uYyBmb3IgdXNlIGJlbG93ICovCisJd3JpdGVfcG1uYyhwbW5jICYgflBNVV9FTkFCTEUpOworCisJZm9yIChpID0gQ0NOVDsgaSA8PSBQTU4xOyBpKyspIHsKKwkJaWYgKCEocG11LT5pbnRfbWFza1tpXSAmIHBtdS0+aW50X2VuYWJsZSkpCisJCQljb250aW51ZTsKKworCQlpZiAocG1uYyAmIHBtdS0+Y250X292ZltpXSkKKwkJCXJlc3VsdHNbaV0ub3ZmKys7CisJfQorfQorCitzdGF0aWMgdm9pZCBpbmxpbmUgX194c2MyX2NoZWNrX2N0cnModm9pZCkKK3sKKwlpbnQgaTsKKwl1MzIgZmxhZyA9IDAsIHBtbmMgPSByZWFkX3BtbmMoKTsKKworCXBtbmMgJj0gflBNVV9FTkFCTEU7CisJd3JpdGVfcG1uYyhwbW5jKTsKKworCS8qIHJlYWQgb3ZlcmZsb3cgZmxhZyByZWdpc3RlciAqLworCV9fYXNtX18gX192b2xhdGlsZV9fICgibXJjIHAxNCwgMCwgJTAsIGM1LCBjMSwgMCIgOiAiPXIiIChmbGFnKSk7CisKKwlmb3IgKGkgPSBDQ05UOyBpIDw9IFBNTjM7IGkrKykgeworCQlpZiAoIShwbXUtPmludF9tYXNrW2ldICYgcG11LT5pbnRfZW5hYmxlKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChmbGFnICYgcG11LT5jbnRfb3ZmW2ldKQorCQkJcmVzdWx0c1tpXS5vdmYrKzsKKwl9CisKKwkvKiB3cml0ZWJhY2sgY2xlYXJzIG92ZXJmbG93IGJpdHMgKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1jciBwMTQsIDAsICUwLCBjNSwgYzEsIDAiIDogOiAiciIgKGZsYWcpKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHhzY2FsZV9wbXVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmFyZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGk7CisJdTMyIHBtbmM7CisKKwlpZiAocG11LT5pZCA9PSBQTVVfWFNDMSkKKwkJX194c2MxX2NoZWNrX2N0cnMoKTsKKwllbHNlCisJCV9feHNjMl9jaGVja19jdHJzKCk7CisKKwlmb3IgKGkgPSBDQ05UOyBpIDwgTUFYX0NPVU5URVJTOyBpKyspIHsKKwkJaWYgKCFyZXN1bHRzW2ldLm92ZikKKwkJCWNvbnRpbnVlOworCisJCXdyaXRlX2NvdW50ZXIoaSwgLSh1MzIpcmVzdWx0c1tpXS5yZXNldF9jb3VudGVyKTsKKwkJb3Byb2ZpbGVfYWRkX3NhbXBsZShyZWdzLCBpKTsKKwkJcmVzdWx0c1tpXS5vdmYtLTsKKwl9CisKKwlwbW5jID0gcmVhZF9wbW5jKCkgfCBQTVVfRU5BQkxFOworCXdyaXRlX3BtbmMocG1uYyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHhzY2FsZV9wbXVfc3RvcCh2b2lkKQoreworCXUzMiBwbW5jID0gcmVhZF9wbW5jKCk7CisKKwlwbW5jICY9IH5QTVVfRU5BQkxFOworCXdyaXRlX3BtbmMocG1uYyk7CisKKwlmcmVlX2lycShYU0NBTEVfUE1VX0lSUSwgcmVzdWx0cyk7Cit9CisKK3N0YXRpYyBpbnQgeHNjYWxlX3BtdV9zdGFydCh2b2lkKQoreworCWludCByZXQ7CisJdTMyIHBtbmMgPSByZWFkX3BtbmMoKTsKKworCXJldCA9IHJlcXVlc3RfaXJxKFhTQ0FMRV9QTVVfSVJRLCB4c2NhbGVfcG11X2ludGVycnVwdCwgU0FfSU5URVJSVVBULAorCQkJIlhTY2FsZSBQTVUiLCAodm9pZCAqKXJlc3VsdHMpOworCisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJvcHJvZmlsZTogdW5hYmxlIHRvIHJlcXVlc3QgSVJRJWQgZm9yIFhTY2FsZSBQTVVcbiIsCisJCQlYU0NBTEVfUE1VX0lSUSk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHBtdS0+aWQgPT0gUE1VX1hTQzEpCisJCXBtbmMgfD0gcG11LT5pbnRfZW5hYmxlOworCWVsc2UgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1jciBwMTQsIDAsICUwLCBjNCwgYzEsIDAiIDogOiAiciIgKHBtdS0+aW50X2VuYWJsZSkpOworCQlwbW5jICY9IH5QTVVfQ05UNjQ7CisJfQorCisJcG1uYyB8PSBQTVVfRU5BQkxFOworCXdyaXRlX3BtbmMocG1uYyk7CisJcHJfZGVidWcoInhzY2FsZV9wbXVfc3RhcnQ6IHBtbmM6ICUjMDh4IG1hc2s6ICUwOHhcbiIsIHBtbmMsIHBtdS0+aW50X2VuYWJsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeHNjYWxlX2RldGVjdF9wbXUodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwl1MzIgaWQ7CisKKwlpZCA9IChyZWFkX2NwdWlkKENQVUlEX0lEKSA+PiAxMykgJiAweDc7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSAxOgorCQlwbXUgPSAmcG11X3Bhcm1zW1BNVV9YU0MxXTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwbXUgPSAmcG11X3Bhcm1zW1BNVV9YU0MyXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT0RFVjsKKwkJYnJlYWs7CisJfQorCisJaWYgKCFyZXQpIHsKKwkJb3BfeHNjYWxlX3NwZWMubmFtZSA9IHBtdS0+bmFtZTsKKwkJb3BfeHNjYWxlX3NwZWMubnVtX2NvdW50ZXJzID0gcG11LT5udW1fY291bnRlcnM7CisJCXByX2RlYnVnKCJ4c2NhbGVfZGV0ZWN0X3BtdTogZGV0ZWN0ZWQgJXMgUE1VXG4iLCBwbXUtPm5hbWUpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBvcF9hcm1fbW9kZWxfc3BlYyBvcF94c2NhbGVfc3BlYyA9IHsKKwkuaW5pdAkJPSB4c2NhbGVfZGV0ZWN0X3BtdSwKKwkuc2V0dXBfY3Rycwk9IHhzY2FsZV9zZXR1cF9jdHJzLAorCS5zdGFydAkJPSB4c2NhbGVfcG11X3N0YXJ0LAorCS5zdG9wCQk9IHhzY2FsZV9wbXVfc3RvcCwKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3Rvb2xzL01ha2VmaWxlIGIvYXJjaC9hcm0vdG9vbHMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJhNDk5MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3Rvb2xzL01ha2VmaWxlCkBAIC0wLDAgKzEsOSBAQAorIworIyBsaW51eC9hcmNoL2FybS90b29scy9NYWtlZmlsZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDEgUnVzc2VsbCBLaW5nCisjCisKK2luY2x1ZGUvYXNtLWFybS9tYWNoLXR5cGVzLmg6ICQoc3JjKS9nZW4tbWFjaC10eXBlcyAkKHNyYykvbWFjaC10eXBlcworCUBlY2hvICcgIEdlbmVyYXRpbmcgJEAnCisJJChRKSQoQVdLKSAtZiAkXiA+ICRAIHx8IHsgcm0gLWYgJEA7IC9iaW4vZmFsc2U7IH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3Rvb2xzL2dlbi1tYWNoLXR5cGVzIGIvYXJjaC9hcm0vdG9vbHMvZ2VuLW1hY2gtdHlwZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY5YzliNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3Rvb2xzL2dlbi1tYWNoLXR5cGVzCkBAIC0wLDAgKzEsNzMgQEAKKyMhL2Jpbi9hd2sKKyMKKyMgQXdrIHNjcmlwdCB0byBnZW5lcmF0ZSBpbmNsdWRlL2FzbS1hcm0vbWFjaC10eXBlcy5oCisjCitCRUdJTgl7IG5yID0gMCB9CisvXiMvCXsgbmV4dCB9CisvXlsgCV0qJC8geyBuZXh0IH0KKworTkYgPT0gNCB7CisJICBtYWNoaW5lX2lzW25yXSA9ICJtYWNoaW5lX2lzXyIkMTsKKwkgIGNvbmZpZ1tucl0gPSAiQ09ORklHXyIkMjsKKwkgIG1hY2hfdHlwZVtucl0gPSAiTUFDSF9UWVBFXyIkMzsKKwkgIG51bVtucl0gPSAkNDsgbnIrKworCX0KKworTkYgPT0gMyB7CisJICBtYWNoaW5lX2lzW25yXSA9ICJtYWNoaW5lX2lzXyIkMTsKKwkgIGNvbmZpZ1tucl0gPSAiQ09ORklHXyIkMjsKKwkgIG1hY2hfdHlwZVtucl0gPSAiTUFDSF9UWVBFXyIkMzsKKwkgIG51bVtucl0gPSAiIjsgbnIrKworCX0KKworCitFTkQJeworCSAgcHJpbnRmKCIvKlxuIik7CisJICBwcmludGYoIiAqIFRoaXMgd2FzIGF1dG9tYWdpY2FsbHkgZ2VuZXJhdGVkIGZyb20gJXMhXG4iLCBGSUxFTkFNRSk7CisJICBwcmludGYoIiAqIERvIE5PVCBlZGl0XG4iKTsKKwkgIHByaW50ZigiICovXG5cbiIpOworCSAgcHJpbnRmKCIjaWZuZGVmIF9fQVNNX0FSTV9NQUNIX1RZUEVfSFxuIik7CisJICBwcmludGYoIiNkZWZpbmUgX19BU01fQVJNX01BQ0hfVFlQRV9IXG5cbiIpOworCSAgcHJpbnRmKCIjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+XG5cbiIpOworCSAgcHJpbnRmKCIjaWZuZGVmIF9fQVNTRU1CTFlfX1xuIik7CisJICBwcmludGYoIi8qIFRoZSB0eXBlIG9mIG1hY2hpbmUgd2UncmUgcnVubmluZyBvbiAqL1xuIik7CisJICBwcmludGYoImV4dGVybiB1bnNpZ25lZCBpbnQgX19tYWNoaW5lX2FyY2hfdHlwZTtcbiIpOworCSAgcHJpbnRmKCIjZW5kaWZcblxuIik7CisKKwkgIHByaW50ZigiLyogc2VlIGFyY2gvYXJtL2tlcm5lbC9hcmNoLmMgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlc2UgKi9cbiIpOworCSAgZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCisJICAgIGlmIChudW1baV0gfiAvLi4qLykKKwkgICAgICBwcmludGYoIiNkZWZpbmUgJS0zMHMgJWRcbiIsIG1hY2hfdHlwZVtpXSwgbnVtW2ldKTsKKworCSAgcHJpbnRmKCJcbiIpOworCisJICBmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKKwkgICAgaWYgKG51bVtpXSB+IC8uLiovKSB7CisJICAgICAgcHJpbnRmKCIjaWZkZWYgJXNcbiIsIGNvbmZpZ1tpXSk7CisJICAgICAgcHJpbnRmKCIjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlXG4iKTsKKwkgICAgICBwcmludGYoIiMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlXG4iKTsKKwkgICAgICBwcmludGYoIiMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZVx0X19tYWNoaW5lX2FyY2hfdHlwZVxuIik7CisJICAgICAgcHJpbnRmKCIjIGVsc2VcbiIpOworCSAgICAgIHByaW50ZigiIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlXHQlc1xuIiwgbWFjaF90eXBlW2ldKTsKKwkgICAgICBwcmludGYoIiMgZW5kaWZcbiIpOworCSAgICAgIHByaW50ZigiIyBkZWZpbmUgJXMoKVx0KG1hY2hpbmVfYXJjaF90eXBlID09ICVzKVxuIiwgbWFjaGluZV9pc1tpXSwgbWFjaF90eXBlW2ldKTsKKwkgICAgICBwcmludGYoIiNlbHNlXG4iKTsKKwkgICAgICBwcmludGYoIiMgZGVmaW5lICVzKClcdCgwKVxuIiwgbWFjaGluZV9pc1tpXSk7CisJICAgICAgcHJpbnRmKCIjZW5kaWZcblxuIik7CisJICAgIH0KKworCSAgcHJpbnRmKCIvKlxuICogVGhlc2UgaGF2ZSBub3QgeWV0IGJlZW4gcmVnaXN0ZXJlZFxuICovXG4iKTsKKwkgIGZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQorCSAgICBpZiAobnVtW2ldICF+IC8uLiovKQorCSAgICAgIHByaW50ZigiLyogI2RlZmluZSAlLTMwcyA8PG5vdCByZWdpc3RlcmVkPj4gKi9cbiIsIG1hY2hfdHlwZVtpXSk7CisKKwkgIGZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQorCSAgICBpZiAobnVtW2ldICF+IC8uLiovKSB7CisJICAgICAgcHJpbnRmKCIjZGVmaW5lICVzKClcdCgwKVxuIiwgbWFjaGluZV9pc1tpXSk7CisJICAgIH0KKworCSAgcHJpbnRmKCJcbiNpZm5kZWYgbWFjaGluZV9hcmNoX3R5cGVcbiIpOworCSAgcHJpbnRmKCIjZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlXHRfX21hY2hpbmVfYXJjaF90eXBlXG4iKTsKKwkgIHByaW50ZigiI2VuZGlmXG5cbiIpOworCSAgcHJpbnRmKCIjZW5kaWZcbiIpOworCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYzFkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCkBAIC0wLDAgKzEsNzI2IEBACisjIERhdGFiYXNlIG9mIG1hY2hpbmUgbWFjcm9zIGFuZCBudW1iZXJzCisjCisjIFRoaXMgZmlsZSBpcyBsaW51eC9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCisjCisjIFBsZWFzZSBkbyBub3Qgc2VuZCBwYXRjaGVzIHRvIHRoaXMgZmlsZTsgaXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQhCisjIFRvIGFkZCBhbiBlbnRyeSBpbnRvIHRoaXMgZGF0YWJhc2UsIHBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9hcm0vUkVBRE1FLAorIyBvciBjb250YWN0IHJta0Bhcm0ubGludXgub3JnLnVrCisjCisjIExhc3QgdXBkYXRlOiBUaHUgTWFyIDI0IDE0OjM0OjUwIDIwMDUKKyMKKyMgbWFjaGluZV9pc194eHgJQ09ORklHX3h4eHgJCU1BQ0hfVFlQRV94eHgJCW51bWJlcgorIworZWJzYTExMAkJCUFSQ0hfRUJTQTExMAkJRUJTQTExMAkJCTAKK3Jpc2NwYwkJCUFSQ0hfUlBDCQlSSVNDUEMJCQkxCituZXh1c3BjaQkJQVJDSF9ORVhVU1BDSQkJTkVYVVNQQ0kJCTMKK2Vic2EyODUJCQlBUkNIX0VCU0EyODUJCUVCU0EyODUJCQk0CituZXR3aW5kZXIJCUFSQ0hfTkVUV0lOREVSCQlORVRXSU5ERVIJCTUKK2NhdHMJCQlBUkNIX0NBVFMJCUNBVFMJCQk2Cit0Ym94CQkJQVJDSF9UQk9YCQlUQk9YCQkJNworY28yODUJCQlBUkNIX0NPMjg1CQlDTzI4NQkJCTgKK2NscHM3MTEwCQlBUkNIX0NMUFM3MTEwCQlDTFBTNzExMAkJOQorYXJjaGltZWRlcwkJQVJDSF9BUkMJCUFSQ0hJTUVERVMJCTEwCithNWsJCQlBUkNIX0E1SwkJQTVLCQkJMTEKK2V0b2lsZQkJCUFSQ0hfRVRPSUxFCQlFVE9JTEUJCQkxMgorbGFjaWVfbmFzCQlBUkNIX0xBQ0lFX05BUwkJTEFDSUVfTkFTCQkxMworY2xwczc1MDAJCUFSQ0hfQ0xQUzc1MDAJCUNMUFM3NTAwCQkxNAorc2hhcmsJCQlBUkNIX1NIQVJLCQlTSEFSSwkJCTE1CiticnV0dXMJCQlTQTExMDBfQlJVVFVTCQlCUlVUVVMJCQkxNgorcGVyc29uYWxfc2VydmVyCQlBUkNIX1BFUlNPTkFMX1NFUlZFUglQRVJTT05BTF9TRVJWRVIJCTE3CitpdHN5CQkJU0ExMTAwX0lUU1kJCUlUU1kJCQkxOAorbDcyMDAJCQlBUkNIX0w3MjAwCQlMNzIwMAkJCTE5CitwbGViCQkJU0ExMTAwX1BMRUIJCVBMRUIJCQkyMAoraW50ZWdyYXRvcgkJQVJDSF9JTlRFR1JBVE9SCQlJTlRFR1JBVE9SCQkyMQoraDM2MDAJCQlTQTExMDBfSDM2MDAJCUgzNjAwCQkJMjIKK2l4cDEyMDAJCQlBUkNIX0lYUDEyMDAJCUlYUDEyMDAJCQkyMworcDcyMHQJCQlBUkNIX1A3MjBUCQlQNzIwVAkJCTI0Cithc3NhYmV0CQkJU0ExMTAwX0FTU0FCRVQJCUFTU0FCRVQJCQkyNQordmljdG9yCQkJU0ExMTAwX1ZJQ1RPUgkJVklDVE9SCQkJMjYKK2xhcnQJCQlTQTExMDBfTEFSVAkJTEFSVAkJCTI3CityYW5nZXIJCQlTQTExMDBfUkFOR0VSCQlSQU5HRVIJCQkyOAorZ3JhcGhpY3NjbGllbnQJCVNBMTEwMF9HUkFQSElDU0NMSUVOVAlHUkFQSElDU0NMSUVOVAkJMjkKK3hwODYwCQkJU0ExMTAwX1hQODYwCQlYUDg2MAkJCTMwCitjZXJmCQkJU0ExMTAwX0NFUkYJCUNFUkYJCQkzMQorbmFub2VuZ2luZQkJU0ExMTAwX05BTk9FTkdJTkUJTkFOT0VOR0lORQkJMzIKK2ZwaWMJCQlTQTExMDBfRlBJQwkJRlBJQwkJCTMzCitleHRlbmV4MQkJU0ExMTAwX0VYVEVORVgxCQlFWFRFTkVYMQkJMzQKK3NoZXJtYW4JCQlTQTExMDBfU0hFUk1BTgkJU0hFUk1BTgkJCTM1CithY2NlbGVudF9zYQkJU0ExMTAwX0FDQ0VMRU5UCQlBQ0NFTEVOVF9TQQkJMzYKK2FjY2VsZW50X2w3MjAwCQlBUkNIX0w3MjAwX0FDQ0VMRU5UCUFDQ0VMRU5UX0w3MjAwCQkzNworbmV0cG9ydAkJCVNBMTEwMF9ORVRQT1JUCQlORVRQT1JUCQkJMzgKK3BhbmdvbGluCQlTQTExMDBfUEFOR09MSU4JCVBBTkdPTElOCQkzOQoreW9weQkJCVNBMTEwMF9ZT1BZCQlZT1BZCQkJNDAKK2Nvb2xpZGdlCQlTQTExMDBfQ09PTElER0UJCUNPT0xJREdFCQk0MQoraHV3X3dlYnBhbmVsCQlTQTExMDBfSFVXX1dFQlBBTkVMCUhVV19XRUJQQU5FTAkJNDIKK3Nwb3RtZQkJCUFSQ0hfU1BPVE1FCQlTUE9UTUUJCQk0MworZnJlZWJpcmQJCUFSQ0hfRlJFRUJJUkQJCUZSRUVCSVJECQk0NAordGk5MjUJCQlBUkNIX1RJOTI1CQlUSTkyNQkJCTQ1CityaXNjc3RhdGlvbgkJQVJDSF9SSVNDU1RBVElPTglSSVNDU1RBVElPTgkJNDYKK2NhdnkJCQlTQTExMDBfQ0FWWQkJQ0FWWQkJCTQ3Citqb3JuYWRhNzIwCQlTQTExMDBfSk9STkFEQTcyMAlKT1JOQURBNzIwCQk0OAorb21uaW1ldGVyCQlTQTExMDBfT01OSU1FVEVSCU9NTklNRVRFUgkJNDkKK2VkYjcyMTEJCQlBUkNIX0VEQjcyMTEJCUVEQjcyMTEJCQk1MAorY2l0eWdvCQkJU0ExMTAwX0NJVFlHTwkJQ0lUWUdPCQkJNTEKK3BmczE2OAkJCVNBMTEwMF9QRlMxNjgJCVBGUzE2OAkJCTUyCitzcG90CQkJU0ExMTAwX1NQT1QJCVNQT1QJCQk1MworZmxleGFuZXQJCVNBMTEwMF9GTEVYQU5FVAkJRkxFWEFORVQJCTU0Cit3ZWJwYWwJCQlBUkNIX1dFQlBBTAkJV0VCUEFMCQkJNTUKK2xpbnBkYQkJCVNBMTEwMF9MSU5QREEJCUxJTlBEQQkJCTU2CithbmFraW4JCQlBUkNIX0FOQUtJTgkJQU5BS0lOCQkJNTcKK212aQkJCVNBMTEwMF9NVkkJCU1WSQkJCTU4CitqdXBpdGVyCQkJU0ExMTAwX0pVUElURVIJCUpVUElURVIJCQk1OQorcHNpb253CQkJQVJDSF9QU0lPTlcJCVBTSU9OVwkJCTYwCithbG4JCQlTQTExMDBfQUxOCQlBTE4JCQk2MQorZXB4YQkJCUFSQ0hfQ0FNRUxPVAkJQ0FNRUxPVAkJCTYyCitnZHMyMjAwCQkJU0ExMTAwX0dEUzIyMDAJCUdEUzIyMDAJCQk2MworcHNpb25fc2VyaWVzNwkJU0ExMTAwX1BTSU9OX1NFUklFUzcJUFNJT05fU0VSSUVTNwkJNjQKK3hmaWxlCQkJU0ExMTAwX1hGSUxFCQlYRklMRQkJCTY1CithY2NlbGVudF9lcDkzMTIJCUFSQ0hfQUNDRUxFTlRfRVA5MzEyCUFDQ0VMRU5UX0VQOTMxMgkJNjYKK2ljMjAwCQkJQVJDSF9JQzIwMAkJSUMyMDAJCQk2NworY3JlZGl0bGFydAkJU0ExMTAwX0NSRURJVExBUlQJQ1JFRElUTEFSVAkJNjgKK2h0bQkJCVNBMTEwMF9IVE0JCUhUTQkJCTY5CitpcTgwMzEwCQkJQVJDSF9JUTgwMzEwCQlJUTgwMzEwCQkJNzAKK2ZyZWVib3QJCQlTQTExMDBfRlJFRUJPVAkJRlJFRUJPVAkJCTcxCitlbnRlbAkJCUFSQ0hfRU5URUwJCUVOVEVMCQkJNzIKK2VucDM1MTAJCQlBUkNIX0VOUDM1MTAJCUVOUDM1MTAJCQk3MwordHJpemVwcwkJCVNBMTEwMF9UUklaRVBTCQlUUklaRVBTCQkJNzQKK25lc2EJCQlTQTExMDBfTkVTQQkJTkVTQQkJCTc1Cit2ZW51cwkJCUFSQ0hfVkVOVVMJCVZFTlVTCQkJNzYKK3RhcmRpcwkJCUFSQ0hfVEFSRElTCQlUQVJESVMJCQk3NworbWVyY3VyeQkJCUFSQ0hfTUVSQ1VSWQkJTUVSQ1VSWQkJCTc4CitlbXBlZwkJCVNBMTEwMF9FTVBFRwkJRU1QRUcJCQk3OQorYWRpX2V2YgkJCUFSQ0hfSTgwMjAwRkNDCQlJODAyMDBGQ0MJCTgwCitpdHRfY3BiCQkJU0ExMTAwX0lUVF9DUEIJCUlUVF9DUEIJCQk4MQorc3ZjCQkJU0ExMTAwX1NWQwkJU1ZDCQkJODIKK2FscGhhMgkJCVNBMTEwMF9BTFBIQTIJCUFMUEhBMgkJCTg0CithbHBoYTEJCQlTQTExMDBfQUxQSEExCQlBTFBIQTEJCQk4NQorbmV0YXJtCQkJQVJDSF9ORVRBUk0JCU5FVEFSTQkJCTg2CitzaW1wYWQJCQlTQTExMDBfU0lNUEFECQlTSU1QQUQJCQk4NworcGRhMQkJCUFSQ0hfUERBMQkJUERBMQkJCTg4CitsdWJib2NrCQkJQVJDSF9MVUJCT0NLCQlMVUJCT0NLCQkJODkKK2FuaWtvCQkJQVJDSF9BTklLTwkJQU5JS08JCQk5MAorY2xlcDcyMTIJCUFSQ0hfQ0xFUDcyMTIJCUNMRVA3MjEyCQk5MQorY3M4OTcxMgkJCUFSQ0hfQ1M4OTcxMgkJQ1M4OTcxMgkJCTkyCit3ZWFyYXJtCQkJU0ExMTAwX1dFQVJBUk0JCVdFQVJBUk0JCQk5MworcG9zc2lvX3B4CQlTQTExMDBfUE9TU0lPX1BYCVBPU1NJT19QWAkJOTQKK3NpZGVhcm0JCQlTQTExMDBfU0lERUFSTQkJU0lERUFSTQkJCTk1CitzdG9yawkJCVNBMTEwMF9TVE9SSwkJU1RPUksJCQk5Ngorc2hhbm5vbgkJCVNBMTEwMF9TSEFOTk9OCQlTSEFOTk9OCQkJOTcKK2FjZQkJCUFSQ0hfQUNFCQlBQ0UJCQk5OAorYmFsbHlhcm0JCVNBMTEwMF9CQUxMWUFSTQkJQkFMTFlBUk0JCTk5CitzaW1wdXRlcgkJU0ExMTAwX1NJTVBVVEVSCQlTSU1QVVRFUgkJMTAwCituZXh0ZXJtCQkJU0ExMTAwX05FWFRFUk0JCU5FWFRFUk0JCQkxMDEKK3NhMTEwMF9lbGYJCVNBMTEwMF9TQTExMDBfRUxGCVNBMTEwMF9FTEYJCTEwMgorZ2F0b3IJCQlTQTExMDBfR0FUT1IJCUdBVE9SCQkJMTAzCitncmFuaXRlCQkJQVJDSF9HUkFOSVRFCQlHUkFOSVRFCQkJMTA0Citjb25zdXMJCQlTQTExMDBfQ09OU1VTCQlDT05TVVMJCQkxMDUKK2FhZWQyMDAwCQlBUkNIX0FBRUQyMDAwCQlBQUVEMjAwMAkJMTA2CitjZGI4OTcxMgkJQVJDSF9DREI4OTcxMgkJQ0RCODk3MTIJCTEwNworZ3JhcGhpY3NtYXN0ZXIJCVNBMTEwMF9HUkFQSElDU01BU1RFUglHUkFQSElDU01BU1RFUgkJMTA4CithZHNiaXRzeQkJU0ExMTAwX0FEU0JJVFNZCQlBRFNCSVRTWQkJMTA5CitweGFfaWRwCQkJQVJDSF9QWEFfSURQCQlQWEFfSURQCQkJMTEwCitwbGNlCQkJQVJDSF9QTENFCQlQTENFCQkJMTExCitwdF9zeXN0ZW0zCQlTQTExMDBfUFRfU1lTVEVNMwlQVF9TWVNURU0zCQkxMTIKK211cnBoeQkJCUFSQ0hfTUVEQUxCCQlNRURBTEIJCQkxMTMKK2VhZ2xlCQkJQVJDSF9FQUdMRQkJRUFHTEUJCQkxMTQKK2RzYzIxCQkJQVJDSF9EU0MyMQkJRFNDMjEJCQkxMTUKK2RzYzI0CQkJQVJDSF9EU0MyNAkJRFNDMjQJCQkxMTYKK3RpNTQ3MgkJCUFSQ0hfVEk1NDcyCQlUSTU0NzIJCQkxMTcKK2F1dGNwdTEyCQlBUkNIX0FVVENQVTEyCQlBVVRDUFUxMgkJMTE4Cit1ZW5naW5lCQkJQVJDSF9VRU5HSU5FCQlVRU5HSU5FCQkJMTE5CitibHVlc3RlbQkJU0ExMTAwX0JMVUVTVEVNCQlCTFVFU1RFTQkJMTIwCit4aW5ndTgJCQlBUkNIX1hJTkdVOAkJWElOR1U4CQkJMTIxCitidXNoc3RiCQkJQVJDSF9CVVNIU1RCCQlCVVNIU1RCCQkJMTIyCitlcHNpbG9uMQkJU0ExMTAwX0VQU0lMT04xCQlFUFNJTE9OMQkJMTIzCitiYWxsb29uCQkJU0ExMTAwX0JBTExPT04JCUJBTExPT04JCQkxMjQKK3B1cHB5CQkJQVJDSF9QVVBQWQkJUFVQUFkJCQkxMjUKK2Vscm95CQkJU0ExMTAwX0VMUk9ZCQlFTFJPWQkJCTEyNgorZ21zNzIwCQkJQVJDSF9HTVM3MjAJCUdNUzcyMAkJCTEyNworczI0eAkJCUFSQ0hfUzI0WAkJUzI0WAkJCTEyOAoranRlbF9jbGVwNzMxMgkJQVJDSF9KVEVMX0NMRVA3MzEyCUpURUxfQ0xFUDczMTIJCTEyOQorY3g4MjF4eAkJCUFSQ0hfQ1g4MjFYWAkJQ1g4MjFYWAkJCTEzMAorZWRiNzMxMgkJCUFSQ0hfRURCNzMxMgkJRURCNzMxMgkJCTEzMQorYnNhMTExMAkJCVNBMTEwMF9CU0ExMTEwCQlCU0ExMTEwCQkJMTMyCitwb3dlcnBpbgkJQVJDSF9QT1dFUlBJTgkJUE9XRVJQSU4JCTEzMworb3BlbmFybQkJCUFSQ0hfT1BFTkFSTQkJT1BFTkFSTQkJCTEzNAord2hpdGVjaGFwZWwJCVNBMTEwMF9XSElURUNIQVBFTAlXSElURUNIQVBFTAkJMTM1CitoMzEwMAkJCVNBMTEwMF9IMzEwMAkJSDMxMDAJCQkxMzYKK2gzODAwCQkJU0ExMTAwX0gzODAwCQlIMzgwMAkJCTEzNworYmx1ZV92MQkJCUFSQ0hfQkxVRV9WMQkJQkxVRV9WMQkJCTEzOAorcHhhX2NlcmYJCUFSQ0hfUFhBX0NFUkYJCVBYQV9DRVJGCQkxMzkKK2FybTd0ZXZiCQlBUkNIX0FSTTdURVZCCQlBUk03VEVWQgkJMTQwCitkNzQwMAkJCVNBMTEwMF9ENzQwMAkJRDc0MDAJCQkxNDEKK3BpcmFuaGEJCQlBUkNIX1BJUkFOSEEJCVBJUkFOSEEJCQkxNDIKK3NiY2FtZWxvdAkJU0ExMTAwX1NCQ0FNRUxPVAlTQkNBTUVMT1QJCTE0Mwora2luZ3MJCQlTQTExMDBfS0lOR1MJCUtJTkdTCQkJMTQ0CitzbWRrMjQwMAkJQVJDSF9TTURLMjQwMAkJU01ESzI0MDAJCTE0NQorY29sbGllCQkJU0ExMTAwX0NPTExJRQkJQ09MTElFCQkJMTQ2CitpZHIJCQlBUkNIX0lEUgkJSURSCQkJMTQ3CitiYWRnZTQJCQlTQTExMDBfQkFER0U0CQlCQURHRTQJCQkxNDgKK3dlYm5ldAkJCUFSQ0hfV0VCTkVUCQlXRUJORVQJCQkxNDkKK2Q3MzAwCQkJU0ExMTAwX0Q3MzAwCQlENzMwMAkJCTE1MAorY2VwCQkJU0ExMTAwX0NFUAkJQ0VQCQkJMTUxCitmb3J0dW5ldAkJQVJDSF9GT1JUVU5FVAkJRk9SVFVORVQJCTE1MgordmM1NDd4CQkJQVJDSF9WQzU0N1gJCVZDNTQ3WAkJCTE1MworZmlsZXdhbGtlcgkJU0ExMTAwX0ZJTEVXQUxLRVIJRklMRVdBTEtFUgkJMTU0CituZXRnYXRld2F5CQlTQTExMDBfTkVUR0FURVdBWQlORVRHQVRFV0FZCQkxNTUKK3N5bWJvbDI4MDAJCVNBMTEwMF9TWU1CT0wyODAwCVNZTUJPTDI4MDAJCTE1Ngorc3VucwkJCVNBMTEwMF9TVU5TCQlTVU5TCQkJMTU3Citmcm9kbwkJCVNBMTEwMF9GUk9ETwkJRlJPRE8JCQkxNTgKK21zMzAxCQkJU0ExMTAwX01BQ0hfVFlURV9NUzMwMQlNQUNIX1RZVEVfTVMzMDEJCTE1OQorbXgxYWRzCQkJQVJDSF9NWDFBRFMJCU1YMUFEUwkJCTE2MAoraDcyMDEJCQlBUkNIX0g3MjAxCQlINzIwMQkJCTE2MQoraDcyMDIJCQlBUkNIX0g3MjAyCQlINzIwMgkJCTE2MgorYW1pY28JCQlBUkNIX0FNSUNPCQlBTUlDTwkJCTE2MworaWFtCQkJU0ExMTAwX0lBTQkJSUFNCQkJMTY0Cit0dDUzMAkJCVNBMTEwMF9UVDUzMAkJVFQ1MzAJCQkxNjUKK3NhbTI0MDAJCQlBUkNIX1NBTTI0MDAJCVNBTTI0MDAJCQkxNjYKK2pvcm5hZGE1NngJCVNBMTEwMF9KT1JOQURBNTZYCUpPUk5BREE1NlgJCTE2NworYWN0aXZlCQkJU0ExMTAwX0FDVElWRQkJQUNUSVZFCQkJMTY4CitpcTgwMzIxCQkJQVJDSF9JUTgwMzIxCQlJUTgwMzIxCQkJMTY5Cit3aWQJCQlTQTExMDBfV0lECQlXSUQJCQkxNzAKK3NhYmluYWwJCQlBUkNIX1NBQklOQUwJCVNBQklOQUwJCQkxNzEKK2l4cDQyNV9tYXRhY3VtYmUJQVJDSF9JWFA0MjVfTUFUQUNVTUJFCUlYUDQyNV9NQVRBQ1VNQkUJMTcyCittaW5pcHJpbnQJCVNBMTEwMF9NSU5JUFJJTlQJTUlOSVBSSU5UCQkxNzMKK2FkbTUxMHgJCQlBUkNIX0FETTUxMFgJCUFETTUxMFgJCQkxNzQKK3N2czIwMAkJCVNBMTEwMF9TVlMyMDAJCVNWUzIwMAkJCTE3NQorYXRnX3RjdQkJCUFSQ0hfQVRHX1RDVQkJQVRHX1RDVQkJCTE3Ngoram9ybmFkYTgyMAkJU0ExMTAwX0pPUk5BREE4MjAJSk9STkFEQTgyMAkJMTc3CitzM2M0NGIwCQkJQVJDSF9TM0M0NEIwCQlTM0M0NEIwCQkJMTc4CittYXJnaXMyCQkJQVJDSF9NQVJHSVMyCQlNQVJHSVMyCQkJMTc5Citrczg2OTUJCQlBUkNIX0tTODY5NQkJS1M4Njk1CQkJMTgwCiticmgJCQlBUkNIX0JSSAkJQlJICQkJMTgxCitzM2MyNDEwCQkJQVJDSF9TM0MyNDEwCQlTM0MyNDEwCQkJMTgyCitwb3NzaW9fcHgzMAkJQVJDSF9QT1NTSU9fUFgzMAlQT1NTSU9fUFgzMAkJMTgzCitzM2MyODAwCQkJQVJDSF9TM0MyODAwCQlTM0MyODAwCQkJMTg0CitmbGVldHdvb2QJCVNBMTEwMF9GTEVFVFdPT0QJRkxFRVRXT09ECQkxODUKK29tYWhhCQkJQVJDSF9PTUFIQQkJT01BSEEJCQkxODYKK3RhNwkJCUFSQ0hfVEE3CQlUQTcJCQkxODcKK25vdmEJCQlTQTExMDBfTk9WQQkJTk9WQQkJCTE4OAoraG1rCQkJQVJDSF9ITUsJCUhNSwkJCTE4OQora2FybwkJCUFSQ0hfS0FSTwkJS0FSTwkJCTE5MAorZmVzdGVyCQkJU0ExMTAwX0ZFU1RFUgkJRkVTVEVSCQkJMTkxCitncGkJCQlBUkNIX0dQSQkJR1BJCQkJMTkyCitzbWRrMjQxMAkJQVJDSF9TTURLMjQxMAkJU01ESzI0MTAJCTE5MworaTUxOQkJCUFSQ0hfSTUxOQkJSTUxOQkJCTE5NAorbmV4aW8JCQlTQTExMDBfTkVYSU8JCU5FWElPCQkJMTk1CitiaXRib3gJCQlTQTExMDBfQklUQk9YCQlCSVRCT1gJCQkxOTYKK2cyMDAJCQlTQTExMDBfRzIwMAkJRzIwMAkJCTE5NworZ2lsbAkJCVNBMTEwMF9HSUxMCQlHSUxMCQkJMTk4CitweGFfbWVyY3VyeQkJQVJDSF9QWEFfTUVSQ1VSWQlQWEFfTUVSQ1VSWQkJMTk5CitjZWl2YQkJCUFSQ0hfQ0VJVkEJCUNFSVZBCQkJMjAwCitmcmV0CQkJU0ExMTAwX0ZSRVQJCUZSRVQJCQkyMDEKK2VtYWlscGhvbmUJCVNBMTEwMF9FTUFJTFBIT05FCUVNQUlMUEhPTkUJCTIwMgoraDM5MDAJCQlBUkNIX0gzOTAwCQlIMzkwMAkJCTIwMworcHhhMQkJCUFSQ0hfUFhBMQkJUFhBMQkJCTIwNAora29hbjM2OQkJCVNBMTEwMF9LT0FOMzY5CQlLT0FOMzY5CQkJMjA1Citjb2dlbnQJCQlBUkNIX0NPR0VOVAkJQ09HRU5UCQkJMjA2Citlc2xfc2ltcHV0ZXIJCUFSQ0hfRVNMX1NJTVBVVEVSCUVTTF9TSU1QVVRFUgkJMjA3Citlc2xfc2ltcHV0ZXJfY2xyCUFSQ0hfRVNMX1NJTVBVVEVSX0NMUglFU0xfU0lNUFVURVJfQ0xSCTIwOAorZXNsX3NpbXB1dGVyX2J3CQlBUkNIX0VTTF9TSU1QVVRFUl9CVwlFU0xfU0lNUFVURVJfQlcJCTIwOQoraGhwX2NyYWRsZQkJQVJDSF9ISFBfQ1JBRExFCQlISFBfQ1JBRExFCQkyMTAKK2hlNTAwCQkJQVJDSF9IRTUwMAkJSEU1MDAJCQkyMTEKK2luaGFuZGVsZjIJCVNBMTEwMF9JTkhBTkRFTEYyCUlOSEFOREVMRjIJCTIxMgoraW5oYW5kZnRpcAkJU0ExMTAwX0lOSEFOREZUSVAJSU5IQU5ERlRJUAkJMjEzCitkbnAxMTEwCQkJU0ExMTAwX0ROUDExMTAJCUROUDExMTAJCQkyMTQKK3BucDExMTAJCQlTQTExMDBfUE5QMTExMAkJUE5QMTExMAkJCTIxNQorY3NiMjI2CQkJQVJDSF9DU0IyMjYJCUNTQjIyNgkJCTIxNgorYXJub2xkCQkJU0ExMTAwX0FSTk9MRAkJQVJOT0xECQkJMjE3Cit2b2ljZWJsdWUJCU1BQ0hfVk9JQ0VCTFVFCQlWT0lDRUJMVUUJCTIxOAorano4MDI4CQkJQVJDSF9KWjgwMjgJCUpaODAyOAkJCTIxOQoraDU0MDAJCQlBUkNIX0g1NDAwCQlINTQwMAkJCTIyMAorZm9ydGUJCQlTQTExMDBfRk9SVEUJCUZPUlRFCQkJMjIxCithY2FtCQkJU0ExMTAwX0FDQU0JCUFDQU0JCQkyMjIKK2Fib3gJCQlTQTExMDBfQUJPWAkJQUJPWAkJCTIyMworYXRtZWwJCQlBUkNIX0FUTUVMCQlBVE1FTAkJCTIyNAorc2l0c2FuZwkJCUFSQ0hfU0lUU0FORwkJU0lUU0FORwkJCTIyNQorY3B1MTExMGxjZG5ldAkJU0ExMTAwX0NQVTExMTBMQ0RORVQJQ1BVMTExMExDRE5FVAkJMjI2CittcGxfdmNtYTkJCUFSQ0hfTVBMX1ZDTUE5CQlNUExfVkNNQTkJCTIyNworb3B1c19hMQkJCUFSQ0hfT1BVU19BMQkJT1BVU19BMQkJCTIyOAorZGF5dG9uYQkJCUFSQ0hfREFZVE9OQQkJREFZVE9OQQkJCTIyOQora2lsbGJlYXIJCVNBMTEwMF9LSUxMQkVBUgkJS0lMTEJFQVIJCTIzMAoreW9obwkJCUFSQ0hfWU9ITwkJWU9ITwkJCTIzMQoramFzcGVyCQkJQVJDSF9KQVNQRVIJCUpBU1BFUgkJCTIzMgorZHNjMjUJCQlBUkNIX0RTQzI1CQlEU0MyNQkJCTIzMworb21hcF9pbm5vdmF0b3IJCU1BQ0hfT01BUF9JTk5PVkFUT1IJT01BUF9JTk5PVkFUT1IJCTIzNAorcmFtc2VzCQkJQVJDSF9SQU1TRVMJCVJBTVNFUwkJCTIzNQorczI4eAkJCUFSQ0hfUzI4WAkJUzI4WAkJCTIzNgorbXBvcnQzCQkJQVJDSF9NUE9SVDMJCU1QT1JUMwkJCTIzNworcHhhX2VhZ2xlMjUwCQlBUkNIX1BYQV9FQUdMRTI1MAlQWEFfRUFHTEUyNTAJCTIzOAorcGRiCQkJQVJDSF9QREIJCVBEQgkJCTIzOQorYmx1ZV8yZwkJCVNBMTEwMF9CTFVFXzJHCQlCTFVFXzJHCQkJMjQwCitibHVlYXJjaAkJU0ExMTAwX0JMVUVBUkNICQlCTFVFQVJDSAkJMjQxCitpeGRwMjQwMAkJQVJDSF9JWERQMjQwMAkJSVhEUDI0MDAJCTI0MgoraXhkcDI4MDAJCUFSQ0hfSVhEUDI4MDAJCUlYRFAyODAwCQkyNDMKK2V4cGxvcmVyCQlTQTExMDBfRVhQTE9SRVIJCUVYUExPUkVSCQkyNDQKK2l4ZHA0MjUJCQlBUkNIX0lYRFA0MjUJCUlYRFA0MjUJCQkyNDUKK2NoaW1wCQkJQVJDSF9DSElNUAkJQ0hJTVAJCQkyNDYKK3N0b3JrX25lc3QJCUFSQ0hfU1RPUktfTkVTVAkJU1RPUktfTkVTVAkJMjQ3CitzdG9ya19lZ2cJCUFSQ0hfU1RPUktfRUdHCQlTVE9SS19FR0cJCTI0OAord2lzbW8JCQlTQTExMDBfV0lTTU8JCVdJU01PCQkJMjQ5CitlemxpbngJCQlBUkNIX0VaTElOWAkJRVpMSU5YCQkJMjUwCithdDkxcm05MjAwCQlBUkNIX0FUOTFSTTkyMDAJCUFUOTFSTTkyMDAJCTI1MQorb3Jpb24JCQlBUkNIX09SSU9OCQlPUklPTgkJCTI1MgorbmVwdHVuZQkJCUFSQ0hfTkVQVFVORQkJTkVQVFVORQkJCTI1MworaGFja2tpdAkJCVNBMTEwMF9IQUNLS0lUCQlIQUNLS0lUCQkJMjU0CitweGFfd2luczMwCQlBUkNIX1BYQV9XSU5TMzAJCVBYQV9XSU5TMzAJCTI1NQorbGF2aW5uYQkJCVNBMTEwMF9MQVZJTk5BCQlMQVZJTk5BCQkJMjU2CitweGFfdWVuZ2luZQkJQVJDSF9QWEFfVUVOR0lORQlQWEFfVUVOR0lORQkJMjU3Citpbm5va29tCQkJQVJDSF9JTk5PS09NCQlJTk5PS09NCQkJMjU4CitibXMJCQlBUkNIX0JNUwkJQk1TCQkJMjU5CitpeGNkcDExMDAJCUFSQ0hfSVhDRFAxMTAwCQlJWENEUDExMDAJCTI2MAorcHJwbWMxMTAwCQlBUkNIX1BSUE1DMTEwMAkJUFJQTUMxMTAwCQkyNjEKK2F0OTFybTkyMDBkawkJQVJDSF9BVDkxUk05MjAwREsJQVQ5MVJNOTIwMERLCQkyNjIKK2FybXN0aWNrCQlBUkNIX0FSTVNUSUNLCQlBUk1TVElDSwkJMjYzCithcm1vbmllCQkJQVJDSF9BUk1PTklFCQlBUk1PTklFCQkJMjY0CittcG9ydDEJCQlBUkNIX01QT1JUMQkJTVBPUlQxCQkJMjY1CitzM2M1NDEwCQkJQVJDSF9TM0M1NDEwCQlTM0M1NDEwCQkJMjY2Cit6Y3AzMjBhCQkJQVJDSF9aQ1AzMjBBCQlaQ1AzMjBBCQkJMjY3CitpX2JveAkJCUFSQ0hfSV9CT1gJCUlfQk9YCQkJMjY4CitzdGxjMTUwMgkJQVJDSF9TVExDMTUwMgkJU1RMQzE1MDIJCTI2OQorc2lyZW4JCQlBUkNIX1NJUkVOCQlTSVJFTgkJCTI3MAorZ3JlZW5sYWtlCQlBUkNIX0dSRUVOTEFLRQkJR1JFRU5MQUtFCQkyNzEKK2FyZ3VzCQkJQVJDSF9BUkdVUwkJQVJHVVMJCQkyNzIKK2NvbWJhZGdlCQlTQTExMDBfQ09NQkFER0UJCUNPTUJBREdFCQkyNzMKK3Jva2VweGEJCQlBUkNIX1JPS0VQWEEJCVJPS0VQWEEJCQkyNzQKK2NpbnRlZ3JhdG9yCQlBUkNIX0NJTlRFR1JBVE9SCUNJTlRFR1JBVE9SCQkyNzUKK2d1aWRlYTA3CQlBUkNIX0dVSURFQTA3CQlHVUlERUEwNwkJMjc2Cit0YXQyNTcJCQlBUkNIX1RBVDI1NwkJVEFUMjU3CQkJMjc3CitpZ3AyNDI1CQkJQVJDSF9JR1AyNDI1CQlJR1AyNDI1CQkJMjc4CitibHVlZ3JhbWEJCUFSQ0hfQkxVRUdSQU1NQQkJQkxVRUdSQU1NQQkJMjc5CitpcG9kCQkJQVJDSF9JUE9ECQlJUE9ECQkJMjgwCithZHNiaXRzeXgJCUFSQ0hfQURTQklUU1lYCQlBRFNCSVRTWVgJCTI4MQordHJpemVwczIJCUFSQ0hfVFJJWkVQUzIJCVRSSVpFUFMyCQkyODIKK3ZpcGVyCQkJQVJDSF9WSVBFUgkJVklQRVIJCQkyODMKK2Fkc2JpdHN5cGx1cwkJU0ExMTAwX0FEU0JJVFNZUExVUwlBRFNCSVRTWVBMVVMJCTI4NAorYWRzYWdjCQkJU0ExMTAwX0FEU0FHQwkJQURTQUdDCQkJMjg1CitzdHA3MzEyCQkJQVJDSF9TVFA3MzEyCQlTVFA3MzEyCQkJMjg2CitueF9waG54CQkJTUFDSF9OWF9QSE5YCQlOWF9QSE5YCQkJMjg3Cit3ZXBfZXAyNTAJCUFSQ0hfV0VQX0VQMjUwCQlXRVBfRVAyNTAJCTI4OAoraW5oYW5kZWxmMwkJQVJDSF9JTkhBTkRFTEYzCQlJTkhBTkRFTEYzCQkyODkKK2FkaV9jb3lvdGUJCUFSQ0hfQURJX0NPWU9URQkJQURJX0NPWU9URQkJMjkwCitpeW9uaXgJCQlBUkNIX0lZT05JWAkJSVlPTklYCQkJMjkxCitkYW1pY2FtMQkJQVJDSF9EQU1JQ0FNX1NBMTExMAlEQU1JQ0FNX1NBMTExMAkJMjkyCittZWcwMwkJCUFSQ0hfTUVHMDMJCU1FRzAzCQkJMjkzCitweGFfd2hpdGVjaGFwZWwJCUFSQ0hfUFhBX1dISVRFQ0hBUEVMCVBYQV9XSElURUNIQVBFTAkJMjk0Citud3NjCQkJQVJDSF9OV1NDCQlOV1NDCQkJMjk1Citud2xhcm0JCQlBUkNIX05XTEFSTQkJTldMQVJNCQkJMjk2CitpeHA0MjVfbWd1YXJkCQlBUkNIX0lYUDQyNV9NR1VBUkQJSVhQNDI1X01HVUFSRAkJMjk3CitweGFfbmV0ZGN1NAkJQVJDSF9QWEFfTkVURENVNAlQWEFfTkVURENVNAkJMjk4CitpeGRwMjQwMQkJQVJDSF9JWERQMjQwMQkJSVhEUDI0MDEJCTI5OQoraXhkcDI4MDEJCUFSQ0hfSVhEUDI4MDEJCUlYRFAyODAxCQkzMDAKK3pvZGlhYwkJCUFSQ0hfWk9ESUFDCQlaT0RJQUMJCQkzMDEKK2FybW1vZHVsCQlBUkNIX0FSTU1PRFVMCQlBUk1NT0RVTAkJMzAyCitrZXRvcAkJCVNBMTEwMF9LRVRPUAkJS0VUT1AJCQkzMDMKK2F2NzIwMAkJCUFSQ0hfQVY3MjAwCQlBVjcyMDAJCQkzMDQKK2FyY2hfdGk5MjUJCUFSQ0hfQVJDSF9USTkyNQkJQVJDSF9USTkyNQkJMzA1CithY3EyMDAJCQlBUkNIX0FDUTIwMAkJQUNRMjAwCQkJMzA2CitwdF9kYWZpdAkJU0ExMTAwX1BUX0RBRklUCQlQVF9EQUZJVAkJMzA3CitpaGJhCQkJQVJDSF9JSEJBCQlJSEJBCQkJMzA4CitxdWlucXVlCQkJQVJDSF9RVUlOUVVFCQlRVUlOUVVFCQkJMzA5CituaW1icmFvbmUJCUFSQ0hfTklNQlJBT05FCQlOSU1CUkFPTkUJCTMxMAorbmltYnJhMjl4CQlBUkNIX05JTUJSQTI5WAkJTklNQlJBMjlYCQkzMTEKK25pbWJyYTIxMAkJQVJDSF9OSU1CUkEyMTAJCU5JTUJSQTIxMAkJMzEyCitoaHBfZDk1eHgJCUFSQ0hfSEhQX0Q5NVhYCQlISFBfRDk1WFgJCTMxMworbGFiYXJtCQkJQVJDSF9MQUJBUk0JCUxBQkFSTQkJCTMxNAorbTgyNXh4CQkJQVJDSF9NODI1WFgJCU04MjVYWAkJCTMxNQorbTcxMDAJCQlTQTExMDBfTTcxMDAJCU03MTAwCQkJMzE2CituaXBjMgkJCUFSQ0hfTklQQzIJCU5JUEMyCQkJMzE3CitmdTcyMDIJCQlBUkNIX0ZVNzIwMgkJRlU3MjAyCQkJMzE4CithZHNhZ3gJCQlBUkNIX0FEU0FHWAkJQURTQUdYCQkJMzE5CitweGFfcG9vaAkJQVJDSF9QWEFfUE9PSAkJUFhBX1BPT0gJCTMyMAorYmFuZG9uCQkJQVJDSF9CQU5ET04JCUJBTkRPTgkJCTMyMQorcGNtNzIxMAkJCUFSQ0hfUENNNzIxMAkJUENNNzIxMAkJCTMyMgorbm1zOTIwMAkJCUFSQ0hfTk1TOTIwMAkJTk1TOTIwMAkJCTMyMworbG9nb2RsCQkJQVJDSF9MT0dPREwJCUxPR09ETAkJCTMyNAorbTcxNDAJCQlTQTExMDBfTTcxNDAJCU03MTQwCQkJMzI1Citrb3JlYm90CQkJQVJDSF9LT1JFQk9UCQlLT1JFQk9UCQkJMzI2CitpcTMxMjQ0CQkJQVJDSF9JUTMxMjQ0CQlJUTMxMjQ0CQkJMzI3Citrb2FuMzkzCQkJU0ExMTAwX0tPQU4zOTMJCUtPQU4zOTMJCQkzMjgKK2luaGFuZGZ0aXAzCQlBUkNIX0lOSEFOREZUSVAzCUlOSEFOREZUSVAzCQkzMjkKK2dvbnpvCQkJQVJDSF9HT05aTwkJR09OWk8JCQkzMzAKK2Jhc3QJCQlBUkNIX0JBU1QJCUJBU1QJCQkzMzEKK3NjYW5wYXNzCQlBUkNIX1NDQU5QQVNTCQlTQ0FOUEFTUwkJMzMyCitlcDczMTJfcG9vaAkJQVJDSF9FUDczMTJfUE9PSAlFUDczMTJfUE9PSAkJMzMzCit0YTdzCQkJQVJDSF9UQTdTCQlUQTdTCQkJMzM0Cit0YTd2CQkJQVJDSF9UQTdWCQlUQTdWCQkJMzM1CitpY2FydXMJCQlTQTExMDBfSUNBUlVTCQlJQ0FSVVMJCQkzMzYKK2gxOTAwCQkJQVJDSF9IMTkwMAkJSDE5MDAJCQkzMzcKK2dlbWluaQkJCVNBMTEwMF9HRU1JTkkJCUdFTUlOSQkJCTMzOAorYXhpbQkJCUFSQ0hfQVhJTQkJQVhJTQkJCTMzOQorYXVkaW90cm9uCQlBUkNIX0FVRElPVFJPTgkJQVVESU9UUk9OCQkzNDAKK2gyMjAwCQkJQVJDSF9IMjIwMAkJSDIyMDAJCQkzNDEKK2xvb3g2MDAJCQlBUkNIX0xPT1g2MDAJCUxPT1g2MDAJCQkzNDIKK25pb3AJCQlBUkNIX05JT1AJCU5JT1AJCQkzNDMKK2RtMzEwCQkJQVJDSF9ETTMxMAkJRE0zMTAJCQkzNDQKK3NlZWRweGFfYzIJCUFSQ0hfU0VFRFBYQV9DMgkJU0VFRFBYQV9DMgkJMzQ1CitpeHA0eHhfbWd1YXJkcGNpCUFSQ0hfSVhQNFhYX01HVUFSRF9QQ0kJSVhQNFhYX01HVUFSRF9QQ0kJMzQ2CitoMTk0MAkJCUFSQ0hfSDE5NDAJCUgxOTQwCQkJMzQ3CitzY29ycGlvCQkJQVJDSF9TQ09SUElPCQlTQ09SUElPCQkJMzQ4Cit2aXZhCQkJQVJDSF9WSVZBCQlWSVZBCQkJMzQ5CitweGFfeGNhcmQJCUFSQ0hfUFhBX1hDQVJECQlQWEFfWENBUkQJCTM1MAorY3NiMzM1CQkJQVJDSF9DU0IzMzUJCUNTQjMzNQkJCTM1MQoraXhyZDQyNQkJCUFSQ0hfSVhSRDQyNQkJSVhSRDQyNQkJCTM1MgoraXE4MDMxNQkJCUFSQ0hfSVE4MDMxNQkJSVE4MDMxNQkJCTM1Mworbm1wNzMxMgkJCUFSQ0hfTk1QNzMxMgkJTk1QNzMxMgkJCTM1NAorY3g4NjF4eAkJCUFSQ0hfQ1g4NjFYWAkJQ1g4NjFYWAkJCTM1NQorZW5wMjYxMQkJCUFSQ0hfRU5QMjYxMQkJRU5QMjYxMQkJCTM1NgoreGRhCQkJU0ExMTAwX1hEQQkJWERBCQkJMzU3Citjc2lyX2ltcwkJQVJDSF9DU0lSX0lNUwkJQ1NJUl9JTVMJCTM1OAoraXhwNDIxX2RuYWVldGgJCUFSQ0hfSVhQNDIxX0ROQUVFVEgJSVhQNDIxX0ROQUVFVEgJCTM1OQorcG9ja2V0c2VydjkyMDAJCUFSQ0hfUE9DS0VUU0VSVjkyMDAJUE9DS0VUU0VSVjkyMDAJCTM2MAordG90bwkJCUFSQ0hfVE9UTwkJVE9UTwkJCTM2MQorczNjMjQ0MAkJCUFSQ0hfUzNDMjQ0MAkJUzNDMjQ0MAkJCTM2Mgora3M4Njk1cAkJCUFSQ0hfS1M4Njk1UAkJS1M4Njk1UAkJCTM2Mworc2U0MDAwCQkJQVJDSF9TRTQwMDAJCVNFNDAwMAkJCTM2NAorcXVhZHJpY2VwcwkJQVJDSF9RVUFEUklDRVBTCQlRVUFEUklDRVBTCQkzNjUKK2Jyb25jbwkJCUFSQ0hfQlJPTkNPCQlCUk9OQ08JCQkzNjYKK2VzbF93aXJlbGVzc190YWIJQVJDSF9FU0xfV0lSRUxFU1NfVEFCTEVURVNMX1dJUkVMRVNTX1RBQkxFVAkzNjcKK2VzbF9zb2Zjb21wCQlBUkNIX0VTTF9TT0ZDT01QCUVTTF9TT0ZDT01QCQkzNjgKK3M1YzczNzUJCQlBUkNIX1M1QzczNzUJCVM1QzczNzUJCQkzNjkKK3NwZWFyaGVhZAkJQVJDSF9TUEVBUkhFQUQJCVNQRUFSSEVBRAkJMzcwCitwYW50ZXJhCQkJQVJDSF9QQU5URVJBCQlQQU5URVJBCQkJMzcxCitwcmF5b2dsaXRlCQlBUkNIX1BSQVlPR0xJVEUJCVBSQVlPR0xJVEUJCTM3MgorZ3Vtc3RpeAkJCUFSQ0hfR1VNU1RJSwkJR1VNU1RJSwkJCTM3MworcmN1YmUJCQlBUkNIX1JDVUJFCQlSQ1VCRQkJCTM3NAorcmVhX29sdgkJCUFSQ0hfUkVBX09MVgkJUkVBX09MVgkJCTM3NQorcHhhX2lwaG9uZQkJQVJDSF9QWEFfSVBIT05FCQlQWEFfSVBIT05FCQkzNzYKK3MzYzM0MTAJCQlBUkNIX1MzQzM0MTAJCVMzQzM0MTAJCQkzNzcKK2VzcGRfNDUxMGIJCUFSQ0hfRVNQRF80NTEwQgkJRVNQRF80NTEwQgkJMzc4CittcDF4CQkJQVJDSF9NUDFYCQlNUDFYCQkJMzc5CithdDkxcm05MjAwdGIJCUFSQ0hfQVQ5MVJNOTIwMFRCCUFUOTFSTTkyMDBUQgkJMzgwCithZHN2Z3gJCQlBUkNIX0FEU1ZHWAkJQURTVkdYCQkJMzgxCitvbWFwX2gyCQkJTUFDSF9PTUFQX0gyCQlPTUFQX0gyCQkJMzgyCitwZWxlZQkJCUFSQ0hfUEVMRUUJCVBFTEVFCQkJMzgzCitlNzQwCQkJTUFDSF9FNzQwCQlFNzQwCQkJMzg0CitpcTgwMzMxCQkJQVJDSF9JUTgwMzMxCQlJUTgwMzMxCQkJMzg1Cit2ZXJzYXRpbGVfcGIJCUFSQ0hfVkVSU0FUSUxFX1BCCVZFUlNBVElMRV9QQgkJMzg3CitrZXY3YTQwMAkJTUFDSF9LRVY3QTQwMAkJS0VWN0E0MDAJCTM4OAorbHBkN2E0MDAJCU1BQ0hfTFBEN0E0MDAJCUxQRDdBNDAwCQkzODkKK2xwZDdhNDA0CQlNQUNIX0xQRDdBNDA0CQlMUEQ3QTQwNAkJMzkwCitmdWppdHN1X2NhbWVsb3QJCUFSQ0hfRlVKSVRTVV9DQU1FTE9UCUZVSklUU1VfQ0FNRUxPVAkJMzkxCitqYW51czJtCQkJQVJDSF9KQU5VUzJNCQlKQU5VUzJNCQkJMzkyCitlbWJ0ZgkJCU1BQ0hfRU1CVEYJCUVNQlRGCQkJMzkzCitocG0JCQlNQUNIX0hQTQkJSFBNCQkJMzk0CitzbWRrMjQxMHRrCQlNQUNIX1NNREsyNDEwVEsJCVNNREsyNDEwVEsJCTM5NQorc21kazI0MTBhagkJTUFDSF9TTURLMjQxMEFKCQlTTURLMjQxMEFKCQkzOTYKK3N0cmVldHJhY2VyCQlNQUNIX1NUUkVFVFJBQ0VSCVNUUkVFVFJBQ0VSCQkzOTcKK2VmcmFtZQkJCU1BQ0hfRUZSQU1FCQlFRlJBTUUJCQkzOTgKK2NzYjMzNwkJCU1BQ0hfQ1NCMzM3CQlDU0IzMzcJCQkzOTkKK3B4YV9sYXJrCQlNQUNIX1BYQV9MQVJLCQlQWEFfTEFSSwkJNDAwCitweGFfcG5wMjExMAkJTUFDSF9QTlAyMTEwCQlQTlAyMTEwCQkJNDAxCit0Y2M3MngJCQlNQUNIX1RDQzcyWAkJVENDNzJYCQkJNDAyCithbHRhaXIJCQlNQUNIX0FMVEFJUgkJQUxUQUlSCQkJNDAzCitrYzMJCQlNQUNIX0tDMwkJS0MzCQkJNDA0CitzaW50ZWZ0ZAkJTUFDSF9TSU5URUZURAkJU0lOVEVGVEQJCTQwNQorbWFpbnN0b25lCQlNQUNIX01BSU5TVE9ORQkJTUFJTlNUT05FCQk0MDYKK2FkYXk0eAkJCU1BQ0hfQURBWTRYCQlBREFZNFgJCQk0MDcKK2xpdGUzMDAJCQlNQUNIX0xJVEUzMDAJCUxJVEUzMDAJCQk0MDgKK3M1YzczNzYJCQlNQUNIX1M1QzczNzYJCVM1QzczNzYJCQk0MDkKK210MDIJCQlNQUNIX01UMDIJCU1UMDIJCQk0MTAKK21wb3J0M3MJCQlNQUNIX01QT1JUM1MJCU1QT1JUM1MJCQk0MTEKK3JhX2FscGhhCQlNQUNIX1JBX0FMUEhBCQlSQV9BTFBIQQkJNDEyCit4Y2VwCQkJTUFDSF9YQ0VQCQlYQ0VQCQkJNDEzCithcmNvbV9tZXJjdXJ5CQlNQUNIX0FSQ09NX01FUkNVUlkJQVJDT01fTUVSQ1VSWQkJNDE0CitzdGFyZ2F0ZQkJTUFDSF9TVEFSR0FURQkJU1RBUkdBVEUJCTQxNQorYXJtYWRpbGxvagkJTUFDSF9BUk1BRElMTE9KCQlBUk1BRElMTE9KCQk0MTYKK2Vscm95X2phY2sJCU1BQ0hfRUxST1lfSkFDSwkJRUxST1lfSkFDSwkJNDE3CitiYWNrZW5kCQkJTUFDSF9CQUNLRU5ECQlCQUNLRU5ECQkJNDE4CitzNWxpbmJveAkJTUFDSF9TNUxJTkJPWAkJUzVMSU5CT1gJCTQxOQorbm9tYWRpawkJCU1BQ0hfTk9NQURJSwkJTk9NQURJSwkJCTQyMAoraWFfY3B1XzkyMDAJCU1BQ0hfSUFfQ1BVXzkyMDAJSUFfQ1BVXzkyMDAJCTQyMQorYXQ5MV9iamExCQlNQUNIX0FUOTFfQkpBMQkJQVQ5MV9CSkExCQk0MjIKK2NvcmdpCQkJTUFDSF9DT1JHSQkJQ09SR0kJCQk0MjMKK3Bvb2RsZQkJCU1BQ0hfUE9PRExFCQlQT09ETEUJCQk0MjQKK3RlbgkJCU1BQ0hfVEVOCQlURU4JCQk0MjUKK3JvdmVycDVwCQlNQUNIX1JPVkVSUDVQCQlST1ZFUlA1UAkJNDI2CitzYzI3MDAJCQlNQUNIX1NDMjcwMAkJU0MyNzAwCQkJNDI3CitleF9lYWdsZQkJTUFDSF9FWF9FQUdMRQkJRVhfRUFHTEUJCTQyOAorbnhfcHhhMTIJCU1BQ0hfTlhfUFhBMTIJCU5YX1BYQTEyCQk0MjkKK254X3B4YTUJCQlNQUNIX05YX1BYQTUJCU5YX1BYQTUJCQk0MzAKK2JsYWNrYm9hcmQyCQlNQUNIX0JMQUNLQk9BUkQyCUJMQUNLQk9BUkQyCQk0MzEKK2k4MTkJCQlNQUNIX0k4MTkJCUk4MTkJCQk0MzIKK2l4bWI5OTVlCQlNQUNIX0lYTUI5OTVFCQlJWE1COTk1RQkJNDMzCitza3lyaWRlcgkJTUFDSF9TS1lSSURFUgkJU0tZUklERVIJCTQzNAorc2t5aGF3awkJCU1BQ0hfU0tZSEFXSwkJU0tZSEFXSwkJCTQzNQorZW50ZXJwcmlzZQkJTUFDSF9FTlRFUlBSSVNFCQlFTlRFUlBSSVNFCQk0MzYKK2RlcDI0MTAJCQlNQUNIX0RFUDI0MTAJCURFUDI0MTAJCQk0MzcKK2FybWNvcmUJCQlNQUNIX0FSTUNPUkUJCUFSTUNPUkUJCQk0MzgKK2hvYmJpdAkJCU1BQ0hfSE9CQklUCQlIT0JCSVQJCQk0MzkKK2g3MjEwCQkJTUFDSF9INzIxMAkJSDcyMTAJCQk0NDAKK3B4YV9uZXRkY3U1CQlNQUNIX1BYQV9ORVREQ1U1CVBYQV9ORVREQ1U1CQk0NDEKK2FjYwkJCU1BQ0hfQUNDCQlBQ0MJCQk0NDIKK2VzbF9zYXJ2YQkJTUFDSF9FU0xfU0FSVkEJCUVTTF9TQVJWQQkJNDQzCit4bTI1MAkJCU1BQ0hfWE0yNTAJCVhNMjUwCQkJNDQ0Cit0NnRjMXhiCQkJTUFDSF9UNlRDMVhCCQlUNlRDMVhCCQkJNDQ1Citlc3M3MTAJCQlNQUNIX0VTUzcxMAkJRVNTNzEwCQkJNDQ2CitteDNhZHMJCQlNQUNIX01YM0FEUwkJTVgzQURTCQkJNDQ3CitoaW1hbGF5YQkJTUFDSF9ISU1BTEFZQQkJSElNQUxBWUEJCTQ0OAorYm9sZmVuawkJCU1BQ0hfQk9MRkVOSwkJQk9MRkVOSwkJCTQ0OQorYXQ5MXJtOTIwMGtyCQlNQUNIX0FUOTFSTTkyMDBLUglBVDkxUk05MjAwS1IJCTQ1MAorZWRiOTMxMgkJCU1BQ0hfRURCOTMxMgkJRURCOTMxMgkJCTQ1MQorb21hcF9nZW5lcmljCQlNQUNIX09NQVBfR0VORVJJQwlPTUFQX0dFTkVSSUMJCTQ1MgorYXhpbXgzCQkJTUFDSF9BWElNWDMJCUFYSU1YMwkJCTQ1MworZWI2N3hkaXAJCU1BQ0hfRUI2N1hESVAJCUVCNjdYRElQCQk0NTQKK3dlYnR4cwkJCU1BQ0hfV0VCVFhTCQlXRUJUWFMJCQk0NTUKK2hhd2sJCQlNQUNIX0hBV0sJCUhBV0sJCQk0NTYKK2NjYXQ5MXNiYzAwMQkJTUFDSF9DQ0FUOTFTQkMwMDEJQ0NBVDkxU0JDMDAxCQk0NTcKK2V4cHJlc3NvCQlNQUNIX0VYUFJFU1NPCQlFWFBSRVNTTwkJNDU4CitoNDAwMAkJCU1BQ0hfSDQwMDAJCUg0MDAwCQkJNDU5CitkaW5vCQkJTUFDSF9ESU5PCQlESU5PCQkJNDYwCittbDY3NWsJCQlNQUNIX01MNjc1SwkJTUw2NzVLCQkJNDYxCitlZGI5MzAxCQkJTUFDSF9FREI5MzAxCQlFREI5MzAxCQkJNDYyCitlZGI5MzE1CQkJTUFDSF9FREI5MzE1CQlFREI5MzE1CQkJNDYzCityZWNpdmFfdHQJCU1BQ0hfUkVDSVZBX1RUCQlSRUNJVkFfVFQJCTQ2NAorY3N0Y2IwMQkJCU1BQ0hfQ1NUQ0IwMQkJQ1NUQ0IwMQkJCTQ2NQorY3N0Y2IxCQkJTUFDSF9DU1RDQjEJCUNTVENCMQkJCTQ2Ngorc2hhZHdlbGwJCU1BQ0hfU0hBRFdFTEwJCVNIQURXRUxMCQk0NjcKK2dvZXBlbDI2MwkJTUFDSF9HT0VQRUwyNjMJCUdPRVBFTDI2MwkJNDY4CithY3ExMDAJCQlNQUNIX0FDUTEwMAkJQUNRMTAwCQkJNDY5CitteDFmczIJCQlNQUNIX01YMUZTMgkJTVgxRlMyCQkJNDcwCitoaXB0b3BfZzEJCU1BQ0hfSElQVE9QX0cxCQlISVBUT1BfRzEJCTQ3MQorc3Bhcmt5CQkJTUFDSF9TUEFSS1kJCVNQQVJLWQkJCTQ3MgorbnM5NzUwCQkJTUFDSF9OUzk3NTAJCU5TOTc1MAkJCTQ3MworcGhvZW5peAkJCU1BQ0hfUEhPRU5JWAkJUEhPRU5JWAkJCTQ3NAordnIxMDAwCQkJTUFDSF9WUjEwMDAJCVZSMTAwMAkJCTQ3NQorZGVpc3RlcnB4YQkJTUFDSF9ERUlTVEVSUFhBCQlERUlTVEVSUFhBCQk0NzYKK2JjbTExNjAJCQlNQUNIX0JDTTExNjAJCUJDTTExNjAJCQk0NzcKK3BjbTAyMgkJCU1BQ0hfUENNMDIyCQlQQ00wMjIJCQk0NzgKK2Fkc2djeAkJCU1BQ0hfQURTR0NYCQlBRFNHQ1gJCQk0NzkKK2RyZWFkbmF1Z2h0CQlNQUNIX0RSRUFETkFVR0hUCURSRUFETkFVR0hUCQk0ODAKK2RtMzIwCQkJTUFDSF9ETTMyMAkJRE0zMjAJCQk0ODEKK21hcmtvdgkJCU1BQ0hfTUFSS09WCQlNQVJLT1YJCQk0ODIKK2NvczdhNDAwCQlNQUNIX0NPUzdBNDAwCQlDT1M3QTQwMAkJNDgzCittaWxhbm8JCQlNQUNIX01JTEFOTwkJTUlMQU5PCQkJNDg0Cit1ZTkzMjgJCQlNQUNIX1VFOTMyOAkJVUU5MzI4CQkJNDg1Cit1ZXgyNTUJCQlNQUNIX1VFWDI1NQkJVUVYMjU1CQkJNDg2Cit1ZTI0MTAJCQlNQUNIX1VFMjQxMAkJVUUyNDEwCQkJNDg3CithNjIwCQkJTUFDSF9BNjIwCQlBNjIwCQkJNDg4CitvY2Vsb3QJCQlNQUNIX09DRUxPVAkJT0NFTE9UCQkJNDg5CitjaGVldGFoCQkJTUFDSF9DSEVFVEFICQlDSEVFVEFICQkJNDkwCitvbWFwX3BlcnNldXMyCQlNQUNIX09NQVBfUEVSU0VVUzIJT01BUF9QRVJTRVVTMgkJNDkxCit6dnVlCQkJTUFDSF9aVlVFCQlaVlVFCQkJNDkyCityb3ZlcnAxCQkJTUFDSF9ST1ZFUlAxCQlST1ZFUlAxCQkJNDkzCithc2lkaWFsMgkJTUFDSF9BU0lESUFMMgkJQVNJRElBTDIJCTQ5NAorczNjMjRhMAkJCU1BQ0hfUzNDMjRBMAkJUzNDMjRBMAkJCTQ5NQorZTgwMAkJCU1BQ0hfRTgwMAkJRTgwMAkJCTQ5NgorZTc1MAkJCU1BQ0hfRTc1MAkJRTc1MAkJCTQ5NworczNjNTUwMAkJCU1BQ0hfUzNDNTUwMAkJUzNDNTUwMAkJCTQ5OAorc21kazU1MDAJCU1BQ0hfU01ESzU1MDAJCVNNREs1NTAwCQk0OTkKK3NpZ25hbHN5bmMJCU1BQ0hfU0lHTkFMU1lOQwkJU0lHTkFMU1lOQwkJNTAwCituYmMJCQlNQUNIX05CQwkJTkJDCQkJNTAxCitrb2RpYWsJCQlNQUNIX0tPRElBSwkJS09ESUFLCQkJNTAyCituZXRib29rcHJvCQlNQUNIX05FVEJPT0tQUk8JCU5FVEJPT0tQUk8JCTUwMworaHc5MDIwMAkJCU1BQ0hfSFc5MDIwMAkJSFc5MDIwMAkJCTUwNAorY29uZG9yCQkJTUFDSF9DT05ET1IJCUNPTkRPUgkJCTUwNQorY3VwCQkJTUFDSF9DVVAJCUNVUAkJCTUwNgora2l0ZQkJCU1BQ0hfS0lURQkJS0lURQkJCTUwNworc2NiOTMyOAkJCU1BQ0hfU0NCOTMyOAkJU0NCOTMyOAkJCTUwOAorb21hcF9oMwkJCU1BQ0hfT01BUF9IMwkJT01BUF9IMwkJCTUwOQorb21hcF9oNAkJCU1BQ0hfT01BUF9INAkJT01BUF9INAkJCTUxMAorbjEwCQkJTUFDSF9OMTAJCU4xMAkJCTUxMQorbW9udGVqYWRlCQlNQUNIX01PTlRBSkFERQkJTU9OVEFKQURFCQk1MTIKK3NnNTYwCQkJTUFDSF9TRzU2MAkJU0c1NjAJCQk1MTMKK2RwMTAwMAkJCU1BQ0hfRFAxMDAwCQlEUDEwMDAJCQk1MTQKK29tYXBfb3NrCQlNQUNIX09NQVBfT1NLCQlPTUFQX09TSwkJNTE1CityZzEwMHYzCQkJTUFDSF9SRzEwMFYzCQlSRzEwMFYzCQkJNTE2CitteDJhZHMJCQlNQUNIX01YMkFEUwkJTVgyQURTCQkJNTE3CitweGFfa2lsbwkJTUFDSF9QWEFfS0lMTwkJUFhBX0tJTE8JCTUxOAoraXhwNHh4X2VhZ2xlCQlNQUNIX0lYUDRYWF9FQUdMRQlJWFA0WFhfRUFHTEUJCTUxOQordG9zYQkJCU1BQ0hfVE9TQQkJVE9TQQkJCTUyMAorbWIyNTIwZgkJCU1BQ0hfTUIyNTIwRgkJTUIyNTIwRgkJCTUyMQorZW1jMTAwMAkJCU1BQ0hfRU1DMTAwMAkJRU1DMTAwMAkJCTUyMgordGlkc2MyNQkJCU1BQ0hfVElEU0MyNQkJVElEU0MyNQkJCTUyMworYWtjcG14bAkJCU1BQ0hfQUtDUE1YTAkJQUtDUE1YTAkJCTUyNAorYXYzeHgJCQlNQUNIX0FWM1hYCQlBVjNYWAkJCTUyNQorYXZpbGEJCQlNQUNIX0FWSUxBCQlBVklMQQkJCTUyNgorcHhhX21wbTEwCQlNQUNIX1BYQV9NUE0xMAkJUFhBX01QTTEwCQk1MjcKK3B4YV9reWFuaXRlCQlNQUNIX1BYQV9LWUFOSVRFCVBYQV9LWUFOSVRFCQk1MjgKK3Nnb2xkCQkJTUFDSF9TR09MRAkJU0dPTEQJCQk1MjkKK29zY2FyCQkJTUFDSF9PU0NBUgkJT1NDQVIJCQk1MzAKK2VweGE0dXNiMgkJTUFDSF9FUFhBNFVTQjIJCUVQWEE0VVNCMgkJNTMxCit4c2VuZ2luZQkJTUFDSF9YU0VOR0lORQkJWFNFTkdJTkUJCTUzMgoraXA2MDAJCQlNQUNIX0lQNjAwCQlJUDYwMAkJCTUzMworbWNhbjIJCQlNQUNIX01DQU4yCQlNQ0FOMgkJCTUzNAorZGRpX2JsdWVyaWRnZQkJTUFDSF9ERElfQkxVRVJJREdFCURESV9CTFVFUklER0UJCTUzNQorc2t5bWluZGVyCQlNQUNIX1NLWU1JTkRFUgkJU0tZTUlOREVSCQk1MzYKK2xwZDc5NTIwCQlNQUNIX0xQRDc5NTIwCQlMUEQ3OTUyMAkJNTM3CitlZGI5MzAyCQkJTUFDSF9FREI5MzAyCQlFREI5MzAyCQkJNTM4CitodzkwMzQwCQkJTUFDSF9IVzkwMzQwCQlIVzkwMzQwCQkJNTM5CitjaXBfYm94CQkJTUFDSF9DSVBfQk9YCQlDSVBfQk9YCQkJNTQwCitpdnBuCQkJTUFDSF9JVlBOCQlJVlBOCQkJNTQxCityc29jMgkJCU1BQ0hfUlNPQzIJCVJTT0MyCQkJNTQyCitodXNreQkJCU1BQ0hfSFVTS1kJCUhVU0tZCQkJNTQzCitib3hlcgkJCU1BQ0hfQk9YRVIJCUJPWEVSCQkJNTQ0CitzaGVwaGVyZAkJTUFDSF9TSEVQSEVSRAkJU0hFUEhFUkQJCTU0NQorYW1sNDI4MDBhYQkJTUFDSF9BTUw0MjgwMEFBCQlBTUw0MjgwMEFBCQk1NDYKK21sNjc0MDAxCQlNQUNIX01BQ0hfVFlQRV9NTDY3NDAwMQlNQUNIX1RZUEVfTUw2NzQwMDEJNTQ3CitscGMyMjk0CQkJTUFDSF9MUEMyMjk0CQlMUEMyMjk0CQkJNTQ4Citzd2l0Y2hncmFzcwkJTUFDSF9TV0lUQ0hHUkFTUwlTV0lUQ0hHUkFTUwkJNTQ5CitlbnNfY211CQkJTUFDSF9FTlNfQ01VCQlFTlNfQ01VCQkJNTUwCittbTZfc2RiCQkJTUFDSF9NTTZfU0RCCQlNTTZfU0RCCQkJNTUxCitzYXR1cm4JCQlNQUNIX1NBVFVSTgkJU0FUVVJOCQkJNTUyCithcmdvbnBsdXNldmIJCU1BQ0hfQVJHT05QTFVTRVZCCUFSR09OUExVU0VWQgkJNTUzCitzY21hMTFldmIJCU1BQ0hfU0NNQTExRVZCCQlTQ01BMTFFVkIJCTU1NAorc21kazI4MDAJCU1BQ0hfU01ESzI4MDAJCVNNREsyODAwCQk1NTUKK210d2lsc29uCQlNQUNIX01UV0lMU09OCQlNVFdJTFNPTgkJNTU2Cit6aXRpCQkJTUFDSF9aSVRJCQlaSVRJCQkJNTU3CitncmFuZGZhdGhlcgkJTUFDSF9HUkFOREZBVEhFUglHUkFOREZBVEhFUgkJNTU4Cit0ZW5naW5lCQkJTUFDSF9URU5HSU5FCQlURU5HSU5FCQkJNTU5CitzM2MyNDYwCQkJTUFDSF9TM0MyNDYwCQlTM0MyNDYwCQkJNTYwCitwZG0JCQlNQUNIX1BETQkJUERNCQkJNTYxCitoNDcwMAkJCU1BQ0hfSDQ3MDAJCUg0NzAwCQkJNTYyCitoNjMwMAkJCU1BQ0hfSDYzMDAJCUg2MzAwCQkJNTYzCityejE3MDAJCQlNQUNIX1JaMTcwMAkJUloxNzAwCQkJNTY0CithNzE2CQkJTUFDSF9BNzE2CQlBNzE2CQkJNTY1Citlc3RrMjQ0MGEJCU1BQ0hfRVNUSzI0NDBBCQlFU1RLMjQ0MEEJCTU2NgorYXR3aXhwNDI1CQlNQUNIX0FUV0lYUDQyNQkJQVRXSVhQNDI1CQk1NjcKK2NzYjMzNgkJCU1BQ0hfQ1NCMzM2CQlDU0IzMzYJCQk1NjgKK3Jpcm0yCQkJTUFDSF9SSVJNMgkJUklSTTIJCQk1NjkKK2N4MjM1MTgJCQlNQUNIX0NYMjM1MTgJCUNYMjM1MTgJCQk1NzAKK2N4MjM1MXgJCQlNQUNIX0NYMjM1MVgJCUNYMjM1MVgJCQk1NzEKK2NvbXB1dGltZQkJTUFDSF9DT01QVVRJTUUJCUNPTVBVVElNRQkJNTcyCitpemFydXMJCQlNQUNIX0laQVJVUwkJSVpBUlVTCQkJNTczCitweGFfcnRzCQkJTUFDSF9SVFMJCVJUUwkJCTU3NAorc2U1MTAwCQkJTUFDSF9TRTUxMDAJCVNFNTEwMAkJCTU3NQorczNjMjUxMAkJCU1BQ0hfUzNDMjUxMAkJUzNDMjUxMAkJCTU3NgorY3NiNDM3dGwJCU1BQ0hfQ1NCNDM3VEwJCUNTQjQzN1RMCQk1NzcKK3NsYXVzb24JCQlNQUNIX1NMQVVTT04JCVNMQVVTT04JCQk1NzgKK3BlYXJscml2ZXIJCU1BQ0hfUEVBUkxSSVZFUgkJUEVBUkxSSVZFUgkJNTc5Cit0ZGNfcDIxMAkJTUFDSF9URENfUDIxMAkJVERDX1AyMTAJCTU4MAorc2c1ODAJCQlNQUNIX1NHNTgwCQlTRzU4MAkJCTU4MQord3JzYmNhcm03CQlNQUNIX1dSU0JDQVJNNwkJV1JTQkNBUk03CQk1ODIKK2lwZAkJCU1BQ0hfSVBECQlJUEQJCQk1ODMKK3B4YV9kbnAyMTEwCQlNQUNIX1BYQV9ETlAyMTEwCVBYQV9ETlAyMTEwCQk1ODQKK3hhZW5pYXgJCQlNQUNIX1hBRU5JQVgJCVhBRU5JQVgJCQk1ODUKK3NvbW40MjUwCQlNQUNIX1NPTU40MjUwCQlTT01ONDI1MAkJNTg2CitwbGViMgkJCU1BQ0hfUExFQjIJCVBMRUIyCQkJNTg3Citjb3Jud2FsbGlzCQlNQUNIX0NPUk5XQUxMSVMJCUNPUk5XQUxMSVMJCTU4OAorZ3VybmV5X2RydgkJTUFDSF9HVVJORVlfRFJWCQlHVVJORVlfRFJWCQk1ODkKK2NoYWZmZWUJCQlNQUNIX0NIQUZGRUUJCUNIQUZGRUUJCQk1OTAKK3JtczEwMQkJCU1BQ0hfUk1TMTAxCQlSTVMxMDEJCQk1OTEKK3J4MzcxNQkJCU1BQ0hfUlgzNzE1CQlSWDM3MTUJCQk1OTIKK3N3aWZ0CQkJTUFDSF9TV0lGVAkJU1dJRlQJCQk1OTMKK3JvdmVycDcJCQlNQUNIX1JPVkVSUDcJCVJPVkVSUDcJCQk1OTQKK3ByODE4cwkJCU1BQ0hfUFI4MThTCQlQUjgxOFMJCQk1OTUKK3RyeHBybwkJCU1BQ0hfVFJYUFJPCQlUUlhQUk8JCQk1OTYKK25zbHUyCQkJTUFDSF9OU0xVMgkJTlNMVTIJCQk1OTcKK2U0MDAJCQlNQUNIX0U0MDAJCUU0MDAJCQk1OTgKK3RyYWIJCQlNQUNIX1RSQUIJCVRSQUIJCQk1OTkKK2NtY19wdTIJCQlNQUNIX0NNQ19QVTIJCUNNQ19QVTIJCQk2MDAKK2Z1bGNydW0JCQlNQUNIX0ZVTENSVU0JCUZVTENSVU0JCQk2MDEKK25ldGdhdGU0MngJCU1BQ0hfTkVUR0FURTQyWAkJTkVUR0FURTQyWAkJNjAyCitzdHI3MTAJCQlNQUNIX1NUUjcxMAkJU1RSNzEwCQkJNjAzCitpeGRwZzQyNQkJTUFDSF9JWERQRzQyNQkJSVhEUEc0MjUJCTYwNAordG9tdG9tZ28JCU1BQ0hfVE9NVE9NR08JCVRPTVRPTUdPCQk2MDUKK3ZlcnNhdGlsZV9hYgkJTUFDSF9WRVJTQVRJTEVfQUIJVkVSU0FUSUxFX0FCCQk2MDYKK2VkYjkzMDcJCQlNQUNIX0VEQjkzMDcJCUVEQjkzMDcJCQk2MDcKK3NnNTY1CQkJTUFDSF9TRzU2NQkJU0c1NjUJCQk2MDgKK2xwZDc5NTI0CQlNQUNIX0xQRDc5NTI0CQlMUEQ3OTUyNAkJNjA5CitscGQ3OTUyNQkJTUFDSF9MUEQ3OTUyNQkJTFBENzk1MjUJCTYxMAorcm1zMTAwCQkJTUFDSF9STVMxMDAJCVJNUzEwMAkJCTYxMQora2I5MjAwCQkJTUFDSF9LQjkyMDAJCUtCOTIwMAkJCTYxMgorc3gxCQkJTUFDSF9TWDEJCVNYMQkJCTYxMworaG1zMzljNzA5MgkJTUFDSF9ITVMzOUM3MDkyCQlITVMzOUM3MDkyCQk2MTQKK2FybWFkaWxsbwkJTUFDSF9BUk1BRElMTE8JCUFSTUFESUxMTwkJNjE1CitpcGN1CQkJTUFDSF9JUENVCQlJUENVCQkJNjE2Citsb294NzIwCQkJTUFDSF9MT09YNzIwCQlMT09YNzIwCQkJNjE3CitpeGRwNDY1CQkJTUFDSF9JWERQNDY1CQlJWERQNDY1CQkJNjE4CitpeGRwMjM1MQkJTUFDSF9JWERQMjM1MQkJSVhEUDIzNTEJCTYxOQorYWRzdml4CQkJTUFDSF9BRFNWSVgJCUFEU1ZJWAkJCTYyMAorZG0yNzAJCQlNQUNIX0RNMjcwCQlETTI3MAkJCTYyMQorc29jbHRwbHVzCQlNQUNIX1NPQ0xUUExVUwkJU09DTFRQTFVTCQk2MjIKK2VjaWEJCQlNQUNIX0VDSUEJCUVDSUEJCQk2MjMKK2NtNDAwOAkJCU1BQ0hfQ000MDA4CQlDTTQwMDgJCQk2MjQKK3AyMDAxCQkJTUFDSF9QMjAwMQkJUDIwMDEJCQk2MjUKK3R3aXN0ZXIJCQlNQUNIX1RXSVNURVIJCVRXSVNURVIJCQk2MjYKK211ZHNoYXJrCQlNQUNIX01VRFNIQVJLCQlNVURTSEFSSwkJNjI3CitoYjIJCQlNQUNIX0hCMgkJSEIyCQkJNjI4CitpcTgwMzMyCQkJTUFDSF9JUTgwMzMyCQlJUTgwMzMyCQkJNjI5CitzZW5kdAkJCU1BQ0hfU0VORFQJCVNFTkRUCQkJNjMwCitteDJqYXp6CQkJTUFDSF9NWDJKQVpaCQlNWDJKQVpaCQkJNjMxCittdWx0aWlvCQkJTUFDSF9NVUxUSUlPCQlNVUxUSUlPCQkJNjMyCitocmRpc3BsYXkJCU1BQ0hfSFJESVNQTEFZCQlIUkRJU1BMQVkJCTYzMworc2NtYTExYmIJCU1BQ0hfU0NNQTExQkIJCVNDTUExMUJCCQk2MzQKK3RyaXplcHMzCQlNQUNIX1RSSVpFUFMzCQlUUklaRVBTMwkJNjM1Cit6ZWZlZXJkemEJCU1BQ0hfWkVGRUVSRFpBCQlaRUZFRVJEWkEJCTYzNgoremVmZWVyZHpiCQlNQUNIX1pFRkVFUkRaQgkJWkVGRUVSRFpCCQk2MzcKK3plZmVlcmR6ZwkJTUFDSF9aRUZFRVJEWkcJCVpFRkVFUkRaRwkJNjM4Cit6ZWZlZXJkem4JCU1BQ0hfWkVGRUVSRFpOCQlaRUZFRVJEWk4JCTYzOQoremVmZWVyZHpxCQlNQUNIX1pFRkVFUkRaUQkJWkVGRUVSRFpRCQk2NDAKK2d0d3g1NzE1CQlNQUNIX0dUV1g1NzE1CQlHVFdYNTcxNQkJNjQxCithc3Ryb19qYWNrCQlNQUNIX0FTVFJPX0pBQ0sJCUFTVFJPX0pBQ0sJCTY0MwordGlwMDMJCQlNQUNIX1RJUDAzCQlUSVAwMwkJCTY0NAorYTkyMDBlYwkJCU1BQ0hfQTkyMDBFQwkJQTkyMDBFQwkJCTY0NQorcG54MDEwNQkJCU1BQ0hfUE5YMDEwNQkJUE5YMDEwNQkJCTY0NgorYWRjcG9lY3B1CQlNQUNIX0FEQ1BPRUNQVQkJQURDUE9FQ1BVCQk2NDcKK2NzYjYzNwkJCU1BQ0hfQ1NCNjM3CQlDU0I2MzcJCQk2NDgKK21sNjlxNjIwMwkJTUFDSF9NTDY5UTYyMDMJCU1MNjlRNjIwMwkJNjQ5CittYjkyMDAJCQlNQUNIX01COTIwMAkJTUI5MjAwCQkJNjUwCitrdWx1bgkJCU1BQ0hfS1VMVU4JCUtVTFVOCQkJNjUxCitzbmFwcGVyCQkJTUFDSF9TTkFQUEVSCQlTTkFQUEVSCQkJNjUyCitvcHRpbWEJCQlNQUNIX09QVElNQQkJT1BUSU1BCQkJNjUzCitkbGhzYmMJCQlNQUNIX0RMSFNCQwkJRExIU0JDCQkJNjU0Cit4MzAJCQlNQUNIX1gzMAkJWDMwCQkJNjU1CituMzAJCQlNQUNIX04zMAkJTjMwCQkJNjU2CittYW5nYV9rczg2OTUJCU1BQ0hfTUFOR0FfS1M4Njk1CU1BTkdBX0tTODY5NQkJNjU3CithamF4CQkJTUFDSF9BSkFYCQlBSkFYCQkJNjU4CituZWNfbXA5MDAJCU1BQ0hfTkVDX01QOTAwCQlORUNfTVA5MDAJCTY1OQordnZ0azEwMDAJCU1BQ0hfVlZUSzEwMDAJCVZWVEsxMDAwCQk2NjEKK2thZmEJCQlNQUNIX0tBRkEJCUtBRkEJCQk2NjIKK3Z2dGszMDAwCQlNQUNIX1ZWVEszMDAwCQlWVlRLMzAwMAkJNjYzCitwaW14MQkJCU1BQ0hfUElNWDEJCVBJTVgxCQkJNjY0CitvbGxpZQkJCU1BQ0hfT0xMSUUJCU9MTElFCQkJNjY1Citza3ltYXgJCQlNQUNIX1NLWU1BWAkJU0tZTUFYCQkJNjY2CitqYXp6CQkJTUFDSF9KQVpaCQlKQVpaCQkJNjY3Cit0ZWxfdDMJCQlNQUNIX1RFTF9UMwkJVEVMX1QzCQkJNjY4CithaXNpbm9fZmNyMjU1CQlNQUNIX0FJU0lOT19GQ1IyNTUJQUlTSU5PX0ZDUjI1NQkJNjY5CitidHdlYgkJCU1BQ0hfQlRXRUIJCUJUV0VCCQkJNjcwCitkYmdfbGg3OTUyMAkJTUFDSF9EQkdfTEg3OTUyMAlEQkdfTEg3OTUyMAkJNjcxCitjbTQxeHgJCQlNQUNIX0NNNDFYWAkJQ000MVhYCQkJNjcyCit0czcyeHgJCQlNQUNIX1RTNzJYWAkJVFM3MlhYCQkJNjczCituZ2dweGEJCQlNQUNIX05HR1BYQQkJTkdHUFhBCQkJNjc0Citjc2I1MzUJCQlNQUNIX0NTQjUzNQkJQ1NCNTM1CQkJNjc1Citjc2I1MzYJCQlNQUNIX0NTQjUzNgkJQ1NCNTM2CQkJNjc2CitweGFfdHJha3BvZAkJTUFDSF9QWEFfVFJBS1BPRAlQWEFfVFJBS1BPRAkJNjc3CitwcmF4aXMJCQlNQUNIX1BSQVhJUwkJUFJBWElTCQkJNjc4CitsaDc1NDExCQkJTUFDSF9MSDc1NDExCQlMSDc1NDExCQkJNjc5CitvdG9tCQkJTUFDSF9PVE9NCQlPVE9NCQkJNjgwCituZXhjb2Rlcl8yNDQwCQlNQUNIX05FWENPREVSXzI0NDAJTkVYQ09ERVJfMjQ0MAkJNjgxCitsb294NDEwCQkJTUFDSF9MT09YNDEwCQlMT09YNDEwCQkJNjgyCit3ZXN0bGFrZQkJTUFDSF9XRVNUTEFLRQkJV0VTVExBS0UJCTY4MworbnNiCQkJTUFDSF9OU0IJCU5TQgkJCTY4NAorZXNsX3NhcnZhX3N0bgkJTUFDSF9FU0xfU0FSVkFfU1ROCUVTTF9TQVJWQV9TVE4JCTY4NQorZXNsX3NhcnZhX3RmdAkJTUFDSF9FU0xfU0FSVkFfVEZUCUVTTF9TQVJWQV9URlQJCTY4NgorZXNsX3NhcnZhX2lhZAkJTUFDSF9FU0xfU0FSVkFfSUFECUVTTF9TQVJWQV9JQUQJCTY4NworZXNsX3NhcnZhX2FjYwkJTUFDSF9FU0xfU0FSVkFfQUNDCUVTTF9TQVJWQV9BQ0MJCTY4OAordHlwaG9vbgkJCU1BQ0hfVFlQSE9PTgkJVFlQSE9PTgkJCTY4OQorY25hdgkJCU1BQ0hfQ05BVgkJQ05BVgkJCTY5MAorYTczMAkJCU1BQ0hfQTczMAkJQTczMAkJCTY5MQorbmV0c3RhcgkJCU1BQ0hfTkVUU1RBUgkJTkVUU1RBUgkJCTY5Mgorc3VwZXJjb24JCU1BQ0hfUEhBU0VGQUxFX1NVUEVSQ09OCVBIQVNFRkFMRV9TVVBFUkNPTgk2OTMKK3NoaXZhMTEwMAkJTUFDSF9TSElWQTExMDAJCVNISVZBMTEwMAkJNjk0CitldGV4c2MJCQlNQUNIX0VURVhTQwkJRVRFWFNDCQkJNjk1CitpeGRwZzQ2NQkJTUFDSF9JWERQRzQ2NQkJSVhEUEc0NjUJCTY5NgorYTltMjQxMAkJCU1BQ0hfQTlNMjQxMAkJQTlNMjQxMAkJCTY5NworYTltMjQ0MAkJCU1BQ0hfQTlNMjQ0MAkJQTlNMjQ0MAkJCTY5OAorYTltOTc1MAkJCU1BQ0hfQTlNOTc1MAkJQTlNOTc1MAkJCTY5OQorYTltOTM2MAkJCU1BQ0hfQTlNOTM2MAkJQTlNOTM2MAkJCTcwMAordW5jOTAJCQlNQUNIX1VOQzkwCQlVTkM5MAkJCTcwMQorZWNvOTIwCQkJTUFDSF9FQ085MjAJCUVDTzkyMAkJCTcwMgorc2F0dmlldwkJCU1BQ0hfU0FUVklFVwkJU0FUVklFVwkJCTcwMworcm9hZHJ1bm5lcgkJTUFDSF9ST0FEUlVOTkVSCQlST0FEUlVOTkVSCQk3MDQKK2F0OTFybTkyMDBlawkJTUFDSF9BVDkxUk05MjAwRUsJQVQ5MVJNOTIwMEVLCQk3MDUKK2dwMzIJCQlNQUNIX0dQMzIJCUdQMzIJCQk3MDYKK2dlbQkJCU1BQ0hfR0VNCQlHRU0JCQk3MDcKK2k4NTgJCQlNQUNIX0k4NTgJCUk4NTgJCQk3MDgKK2h4Mjc1MAkJCU1BQ0hfSFgyNzUwCQlIWDI3NTAJCQk3MDkKK3pldXNldmIJCQlNQUNIX1pFVVNFVkIJCVpFVVNFVkIJCQk3MTAKK3A3MDAJCQlNQUNIX1A3MDAJCVA3MDAJCQk3MTEKK2NwZQkJCU1BQ0hfQ1BFCQlDUEUJCQk3MTIKK3NwaXR6CQkJTUFDSF9TUElUWgkJU1BJVFoJCQk3MTMKK25pbWJyYTM0MAkJTUFDSF9OSU1CUkEzNDAJCU5JTUJSQTM0MAkJNzE0CitscGMyMnh4CQkJTUFDSF9MUEMyMlhYCQlMUEMyMlhYCQkJNzE1CitvbWFwX2NvbWV0MwkJTUFDSF9DT01FVDMJCUNPTUVUMwkJCTcxNgorb21hcF9jb21ldDQJCU1BQ0hfQ09NRVQ0CQlDT01FVDQJCQk3MTcKK2NzYjYyNQkJCU1BQ0hfQ1NCNjI1CQlDU0I2MjUJCQk3MTgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC9NYWtlZmlsZSBiL2FyY2gvYXJtL3ZmcC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmFiYWMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vdmZwL01ha2VmaWxlCkBAIC0wLDAgKzEsMTIgQEAKKyMKKyMgbGludXgvYXJjaC9hcm0vdmZwL01ha2VmaWxlCisjCisjIENvcHlyaWdodCAoQykgMjAwMSBBUk0gTGltaXRlZAorIworCisjIEVYVFJBX0NGTEFHUyA6PSAtRERFQlVHCisjIEVYVFJBX0FGTEFHUyA6PSAtRERFQlVHCisKK29iai15CQkJKz0gdmZwLm8KKwordmZwLSQoQ09ORklHX1ZGUCkJKz0gZW50cnkubyB2ZnBtb2R1bGUubyB2ZnBody5vIHZmcHNpbmdsZS5vIHZmcGRvdWJsZS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvZW50cnkuUyBiL2FyY2gvYXJtL3ZmcC9lbnRyeS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3M2M4ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS92ZnAvZW50cnkuUwpAQCAtMCwwICsxLDQ1IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL3ZmcC9lbnRyeS5TCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBBUk0gTGltaXRlZC4KKyAqICBXcml0dGVuIGJ5IERlZXAgQmx1ZSBTb2x1dGlvbnMgTGltaXRlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIEJhc2ljIGVudHJ5IGNvZGUsIGNhbGxlZCBmcm9tIHRoZSBrZXJuZWwncyB1bmRlZmluZWQgaW5zdHJ1Y3Rpb24gdHJhcC4KKyAqICByMCAgPSBmYXVsdGVkIGluc3RydWN0aW9uCisgKiAgcjUgID0gZmF1bHRlZCBQQys0CisgKiAgcjkgID0gc3VjY2Vzc2Z1bCByZXR1cm4KKyAqICByMTAgPSB0aHJlYWRfaW5mbyBzdHJ1Y3R1cmUKKyAqICBsciAgPSBmYWlsdXJlIHJldHVybgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8YXNtL3ZmcG1hY3Jvcy5oPgorCisJLmdsb2JsCWRvX3ZmcAorZG9fdmZwOgorIAlsZHIJcjQsIC5MQ3ZmcAorCWFkZAlyMTAsIHIxMCwgI1RJX1ZGUFNUQVRFCUAgcjEwID0gd29ya3NwYWNlCisJbGRyCXBjLCBbcjRdCQlAIGNhbGwgVkZQIGVudHJ5IHBvaW50CisKKy5MQ3ZmcDoKKwkud29yZAl2ZnBfdmVjdG9yCisKK0AgVGhpcyBjb2RlIGlzIGNhbGxlZCBpZiB0aGUgVkZQIGRvZXMgbm90IGV4aXN0LiBJdCBuZWVkcyB0byBmbGFnIHRoZQorQCBmYWlsdXJlIHRvIHRoZSBWRlAgaW5pdGlhbGlzYXRpb24gY29kZS4KKworCV9fSU5JVAorCS5nbG9ibAl2ZnBfdGVzdGluZ19lbnRyeQordmZwX3Rlc3RpbmdfZW50cnk6CisJbGRyCXIwLCBWRlBfYXJjaF9hZGRyZXNzCisJc3RyCXI1LCBbcjBdCQlAIGtub3duIG5vbi16ZXJvIHZhbHVlCisJbW92CXBjLCByOQkJCUAgd2UgaGF2ZSBoYW5kbGVkIHRoZSBmYXVsdAorCitWRlBfYXJjaF9hZGRyZXNzOgorCS53b3JkCVZGUF9hcmNoCisKKwlfX0ZJTklUCmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwLmggYi9hcmNoL2FybS92ZnAvdmZwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhMDJiYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnAuaApAQCAtMCwwICsxLDM0NCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS92ZnAvdmZwLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEFSTSBMaW1pdGVkLgorICogIFdyaXR0ZW4gYnkgRGVlcCBCbHVlIFNvbHV0aW9ucyBMaW1pdGVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworc3RhdGljIGlubGluZSB1MzIgdmZwX3NoaWZ0cmlnaHQzMmphbW1pbmcodTMyIHZhbCwgdW5zaWduZWQgaW50IHNoaWZ0KQoreworCWlmIChzaGlmdCkgeworCQlpZiAoc2hpZnQgPCAzMikKKwkJCXZhbCA9IHZhbCA+PiBzaGlmdCB8ICgodmFsIDw8ICgzMiAtIHNoaWZ0KSkgIT0gMCk7CisJCWVsc2UKKwkJCXZhbCA9IHZhbCAhPSAwOworCX0KKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHU2NCB2ZnBfc2hpZnRyaWdodDY0amFtbWluZyh1NjQgdmFsLCB1bnNpZ25lZCBpbnQgc2hpZnQpCit7CisJaWYgKHNoaWZ0KSB7CisJCWlmIChzaGlmdCA8IDY0KQorCQkJdmFsID0gdmFsID4+IHNoaWZ0IHwgKCh2YWwgPDwgKDY0IC0gc2hpZnQpKSAhPSAwKTsKKwkJZWxzZQorCQkJdmFsID0gdmFsICE9IDA7CisJfQorCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHZmcF9oaTY0dG8zMmphbW1pbmcodTY0IHZhbCkKK3sKKwl1MzIgdjsKKworCWFzbSgKKwkiY21wCSVRMSwgIzEJCUAgdmZwX2hpNjR0bzMyamFtbWluZ1xuXHQiCisJIm1vdmNjCSUwLCAlUjFcblx0IgorCSJvcnJjcwklMCwgJVIxLCAjMSIKKwk6ICI9ciIgKHYpIDogInIiICh2YWwpIDogImNjIik7CisKKwlyZXR1cm4gdjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZDEyOCh1NjQgKnJlc2gsIHU2NCAqcmVzbCwgdTY0IG5oLCB1NjQgbmwsIHU2NCBtaCwgdTY0IG1sKQoreworCWFzbSgJImFkZHMJJVEwLCAlUTIsICVRNFxuXHQiCisJCSJhZGNzCSVSMCwgJVIyLCAlUjRcblx0IgorCQkiYWRjcwklUTEsICVRMywgJVE1XG5cdCIKKwkJImFkYwklUjEsICVSMywgJVI1IgorCSAgICA6ICI9ciIgKG5sKSwgIj1yIiAobmgpCisJICAgIDogIjAiIChubCksICIxIiAobmgpLCAiciIgKG1sKSwgInIiIChtaCkKKwkgICAgOiAiY2MiKTsKKwkqcmVzaCA9IG5oOworCSpyZXNsID0gbmw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdWIxMjgodTY0ICpyZXNoLCB1NjQgKnJlc2wsIHU2NCBuaCwgdTY0IG5sLCB1NjQgbWgsIHU2NCBtbCkKK3sKKwlhc20oCSJzdWJzCSVRMCwgJVEyLCAlUTRcblx0IgorCQkic2JjcwklUjAsICVSMiwgJVI0XG5cdCIKKwkJInNiY3MJJVExLCAlUTMsICVRNVxuXHQiCisJCSJzYmMJJVIxLCAlUjMsICVSNVxuXHQiCisJICAgIDogIj1yIiAobmwpLCAiPXIiIChuaCkKKwkgICAgOiAiMCIgKG5sKSwgIjEiIChuaCksICJyIiAobWwpLCAiciIgKG1oKQorCSAgICA6ICJjYyIpOworCSpyZXNoID0gbmg7CisJKnJlc2wgPSBubDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG11bDY0dG8xMjgodTY0ICpyZXNoLCB1NjQgKnJlc2wsIHU2NCBuLCB1NjQgbSkKK3sKKwl1MzIgbmgsIG5sLCBtaCwgbWw7CisJdTY0IHJoLCBybWEsIHJtYiwgcmw7CisKKwlubCA9IG47CisJbWwgPSBtOworCXJsID0gKHU2NClubCAqIG1sOworCisJbmggPSBuID4+IDMyOworCXJtYSA9ICh1NjQpbmggKiBtbDsKKworCW1oID0gbSA+PiAzMjsKKwlybWIgPSAodTY0KW5sICogbWg7CisJcm1hICs9IHJtYjsKKworCXJoID0gKHU2NCluaCAqIG1oOworCXJoICs9ICgodTY0KShybWEgPCBybWIpIDw8IDMyKSArIChybWEgPj4gMzIpOworCisJcm1hIDw8PSAzMjsKKwlybCArPSBybWE7CisJcmggKz0gKHJsIDwgcm1hKTsKKworCSpyZXNsID0gcmw7CisJKnJlc2ggPSByaDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNoaWZ0NjRsZWZ0KHU2NCAqcmVzaCwgdTY0ICpyZXNsLCB1NjQgbikKK3sKKwkqcmVzaCA9IG4gPj4gNjM7CisJKnJlc2wgPSBuIDw8IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IHZmcF9oaTY0bXVsdGlwbHk2NCh1NjQgbiwgdTY0IG0pCit7CisJdTY0IHJoLCBybDsKKwltdWw2NHRvMTI4KCZyaCwgJnJsLCBuLCBtKTsKKwlyZXR1cm4gcmggfCAocmwgIT0gMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IHZmcF9lc3RpbWF0ZV9kaXYxMjh0bzY0KHU2NCBuaCwgdTY0IG5sLCB1NjQgbSkKK3sKKwl1NjQgbWgsIG1sLCByZW1oLCByZW1sLCB0ZXJtaCwgdGVybWwsIHo7CisKKwlpZiAobmggPj0gbSkKKwkJcmV0dXJuIH4wVUxMOworCW1oID0gbSA+PiAzMjsKKwl6ID0gKG1oIDw8IDMyIDw9IG5oKSA/IDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCA6IChuaCAvIG1oKSA8PCAzMjsKKwltdWw2NHRvMTI4KCZ0ZXJtaCwgJnRlcm1sLCBtLCB6KTsKKwlzdWIxMjgoJnJlbWgsICZyZW1sLCBuaCwgbmwsIHRlcm1oLCB0ZXJtbCk7CisJbWwgPSBtIDw8IDMyOworCXdoaWxlICgoczY0KXJlbWggPCAwKSB7CisJCXogLT0gMHgxMDAwMDAwMDBVTEw7CisJCWFkZDEyOCgmcmVtaCwgJnJlbWwsIHJlbWgsIHJlbWwsIG1oLCBtbCk7CisJfQorCXJlbWggPSAocmVtaCA8PCAzMikgfCAocmVtbCA+PiAzMik7CisJeiB8PSAobWggPDwgMzIgPD0gcmVtaCkgPyAweGZmZmZmZmZmIDogcmVtaCAvIG1oOworCXJldHVybiB6OworfQorCisvKgorICogT3BlcmF0aW9ucyBvbiB1bnBhY2tlZCBlbGVtZW50cworICovCisjZGVmaW5lIHZmcF9zaWduX25lZ2F0ZShzaWduKQkoc2lnbiBeIDB4ODAwMCkKKworLyoKKyAqIFNpbmdsZS1wcmVjaXNpb24KKyAqLworc3RydWN0IHZmcF9zaW5nbGUgeworCXMxNglleHBvbmVudDsKKwl1MTYJc2lnbjsKKwl1MzIJc2lnbmlmaWNhbmQ7Cit9OworCitleHRlcm4gczMyIHZmcF9nZXRfZmxvYXQodW5zaWduZWQgaW50IHJlZyk7CitleHRlcm4gdm9pZCB2ZnBfcHV0X2Zsb2F0KHVuc2lnbmVkIGludCByZWcsIHMzMiB2YWwpOworCisvKgorICogVkZQX1NJTkdMRV9NQU5USVNTQV9CSVRTIC0gbnVtYmVyIG9mIGJpdHMgaW4gdGhlIG1hbnRpc3NhCisgKiBWRlBfU0lOR0xFX0VYUE9ORU5UX0JJVFMgLSBudW1iZXIgb2YgYml0cyBpbiB0aGUgZXhwb25lbnQKKyAqIFZGUF9TSU5HTEVfTE9XX0JJVFMgLSBudW1iZXIgb2YgbG93IGJpdHMgaW4gdGhlIHVucGFja2VkIHNpZ25pZmljYW5kCisgKiAgd2hpY2ggYXJlIG5vdCBwcm9wYWdhdGVkIHRvIHRoZSBmbG9hdCB1cG9uIHBhY2tpbmcuCisgKi8KKyNkZWZpbmUgVkZQX1NJTkdMRV9NQU5USVNTQV9CSVRTCSgyMykKKyNkZWZpbmUgVkZQX1NJTkdMRV9FWFBPTkVOVF9CSVRTCSg4KQorI2RlZmluZSBWRlBfU0lOR0xFX0xPV19CSVRTCQkoMzIgLSBWRlBfU0lOR0xFX01BTlRJU1NBX0JJVFMgLSAyKQorI2RlZmluZSBWRlBfU0lOR0xFX0xPV19CSVRTX01BU0sJKCgxIDw8IFZGUF9TSU5HTEVfTE9XX0JJVFMpIC0gMSkKKworLyoKKyAqIFRoZSBiaXQgaW4gYW4gdW5wYWNrZWQgZmxvYXQgd2hpY2ggaW5kaWNhdGVzIHRoYXQgaXQgaXMgYSBxdWlldCBOYU4KKyAqLworI2RlZmluZSBWRlBfU0lOR0xFX1NJR05JRklDQU5EX1FOQU4JKDEgPDwgKFZGUF9TSU5HTEVfTUFOVElTU0FfQklUUyAtIDEgKyBWRlBfU0lOR0xFX0xPV19CSVRTKSkKKworLyoKKyAqIE9wZXJhdGlvbnMgb24gcGFja2VkIHNpbmdsZS1wcmVjaXNpb24gbnVtYmVycworICovCisjZGVmaW5lIHZmcF9zaW5nbGVfcGFja2VkX3NpZ24odikJKCh2KSAmIDB4ODAwMDAwMDApCisjZGVmaW5lIHZmcF9zaW5nbGVfcGFja2VkX25lZ2F0ZSh2KQkoKHYpIF4gMHg4MDAwMDAwMCkKKyNkZWZpbmUgdmZwX3NpbmdsZV9wYWNrZWRfYWJzKHYpCSgodikgJiB+MHg4MDAwMDAwMCkKKyNkZWZpbmUgdmZwX3NpbmdsZV9wYWNrZWRfZXhwb25lbnQodikJKCgodikgPj4gVkZQX1NJTkdMRV9NQU5USVNTQV9CSVRTKSAmICgoMSA8PCBWRlBfU0lOR0xFX0VYUE9ORU5UX0JJVFMpIC0gMSkpCisjZGVmaW5lIHZmcF9zaW5nbGVfcGFja2VkX21hbnRpc3NhKHYpCSgodikgJiAoKDEgPDwgVkZQX1NJTkdMRV9NQU5USVNTQV9CSVRTKSAtIDEpKQorCisvKgorICogVW5wYWNrIGEgc2luZ2xlLXByZWNpc2lvbiBmbG9hdC4gIE5vdGUgdGhhdCB0aGlzIHJldHVybnMgdGhlIG1hZ25pdHVkZQorICogb2YgdGhlIHNpbmdsZS1wcmVjaXNpb24gZmxvYXQgbWFudGlzc2Egd2l0aCB0aGUgMS4gaWYgbmVjZXNzYXJ5LAorICogYWxpZ25lZCB0byBiaXQgMzAuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZnBfc2luZ2xlX3VucGFjayhzdHJ1Y3QgdmZwX3NpbmdsZSAqcywgczMyIHZhbCkKK3sKKwl1MzIgc2lnbmlmaWNhbmQ7CisKKwlzLT5zaWduID0gdmZwX3NpbmdsZV9wYWNrZWRfc2lnbih2YWwpID4+IDE2LAorCXMtPmV4cG9uZW50ID0gdmZwX3NpbmdsZV9wYWNrZWRfZXhwb25lbnQodmFsKTsKKworCXNpZ25pZmljYW5kID0gKHUzMikgdmFsOworCXNpZ25pZmljYW5kID0gKHNpZ25pZmljYW5kIDw8ICgzMiAtIFZGUF9TSU5HTEVfTUFOVElTU0FfQklUUykpID4+IDI7CisJaWYgKHMtPmV4cG9uZW50ICYmIHMtPmV4cG9uZW50ICE9IDI1NSkKKwkJc2lnbmlmaWNhbmQgfD0gMHg0MDAwMDAwMDsKKwlzLT5zaWduaWZpY2FuZCA9IHNpZ25pZmljYW5kOworfQorCisvKgorICogUmUtcGFjayBhIHNpbmdsZS1wcmVjaXNpb24gZmxvYXQuICBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgZmxvYXQgaXMKKyAqIGFscmVhZHkgbm9ybWFsaXNlZCBzdWNoIHRoYXQgdGhlIE1TQiBpcyBiaXQgMzAsIF9ub3RfIGJpdCAzMS4KKyAqLworc3RhdGljIGlubGluZSBzMzIgdmZwX3NpbmdsZV9wYWNrKHN0cnVjdCB2ZnBfc2luZ2xlICpzKQoreworCXUzMiB2YWw7CisJdmFsID0gKHMtPnNpZ24gPDwgMTYpICsKKwkgICAgICAocy0+ZXhwb25lbnQgPDwgVkZQX1NJTkdMRV9NQU5USVNTQV9CSVRTKSArCisJICAgICAgKHMtPnNpZ25pZmljYW5kID4+IFZGUF9TSU5HTEVfTE9XX0JJVFMpOworCXJldHVybiAoczMyKXZhbDsKK30KKworI2RlZmluZSBWRlBfTlVNQkVSCQkoMTw8MCkKKyNkZWZpbmUgVkZQX1pFUk8JCSgxPDwxKQorI2RlZmluZSBWRlBfREVOT1JNQUwJCSgxPDwyKQorI2RlZmluZSBWRlBfSU5GSU5JVFkJCSgxPDwzKQorI2RlZmluZSBWRlBfTkFOCQkJKDE8PDQpCisjZGVmaW5lIFZGUF9OQU5fU0lHTkFMCQkoMTw8NSkKKworI2RlZmluZSBWRlBfUU5BTgkJKFZGUF9OQU4pCisjZGVmaW5lIFZGUF9TTkFOCQkoVkZQX05BTnxWRlBfTkFOX1NJR05BTCkKKworc3RhdGljIGlubGluZSBpbnQgdmZwX3NpbmdsZV90eXBlKHN0cnVjdCB2ZnBfc2luZ2xlICpzKQoreworCWludCB0eXBlID0gVkZQX05VTUJFUjsKKwlpZiAocy0+ZXhwb25lbnQgPT0gMjU1KSB7CisJCWlmIChzLT5zaWduaWZpY2FuZCA9PSAwKQorCQkJdHlwZSA9IFZGUF9JTkZJTklUWTsKKwkJZWxzZSBpZiAocy0+c2lnbmlmaWNhbmQgJiBWRlBfU0lOR0xFX1NJR05JRklDQU5EX1FOQU4pCisJCQl0eXBlID0gVkZQX1FOQU47CisJCWVsc2UKKwkJCXR5cGUgPSBWRlBfU05BTjsKKwl9IGVsc2UgaWYgKHMtPmV4cG9uZW50ID09IDApIHsKKwkJaWYgKHMtPnNpZ25pZmljYW5kID09IDApCisJCQl0eXBlIHw9IFZGUF9aRVJPOworCQllbHNlCisJCQl0eXBlIHw9IFZGUF9ERU5PUk1BTDsKKwl9CisJcmV0dXJuIHR5cGU7Cit9CisKKyNpZm5kZWYgREVCVUcKKyNkZWZpbmUgdmZwX3NpbmdsZV9ub3JtYWxpc2Vyb3VuZChzZCx2c2QsZnBzY3IsZXhjZXB0LGZ1bmMpIF9fdmZwX3NpbmdsZV9ub3JtYWxpc2Vyb3VuZChzZCx2c2QsZnBzY3IsZXhjZXB0KQordTMyIF9fdmZwX3NpbmdsZV9ub3JtYWxpc2Vyb3VuZChpbnQgc2QsIHN0cnVjdCB2ZnBfc2luZ2xlICp2cywgdTMyIGZwc2NyLCB1MzIgZXhjZXB0aW9ucyk7CisjZWxzZQordTMyIHZmcF9zaW5nbGVfbm9ybWFsaXNlcm91bmQoaW50IHNkLCBzdHJ1Y3QgdmZwX3NpbmdsZSAqdnMsIHUzMiBmcHNjciwgdTMyIGV4Y2VwdGlvbnMsIGNvbnN0IGNoYXIgKmZ1bmMpOworI2VuZGlmCisKKy8qCisgKiBEb3VibGUtcHJlY2lzaW9uCisgKi8KK3N0cnVjdCB2ZnBfZG91YmxlIHsKKwlzMTYJZXhwb25lbnQ7CisJdTE2CXNpZ247CisJdTY0CXNpZ25pZmljYW5kOworfTsKKworLyoKKyAqIFZGUF9SRUdfWkVSTyBpcyBhIHNwZWNpYWwgcmVnaXN0ZXIgbnVtYmVyIGZvciB2ZnBfZ2V0X2RvdWJsZQorICogd2hpY2ggcmV0dXJucyAoZG91YmxlKTAuMC4gIFRoaXMgaXMgdXNlZnVsIGZvciB0aGUgY29tcGFyZSB3aXRoCisgKiB6ZXJvIGluc3RydWN0aW9ucy4KKyAqLworI2RlZmluZSBWRlBfUkVHX1pFUk8JMTYKK2V4dGVybiB1NjQgdmZwX2dldF9kb3VibGUodW5zaWduZWQgaW50IHJlZyk7CitleHRlcm4gdm9pZCB2ZnBfcHV0X2RvdWJsZSh1bnNpZ25lZCBpbnQgcmVnLCB1NjQgdmFsKTsKKworI2RlZmluZSBWRlBfRE9VQkxFX01BTlRJU1NBX0JJVFMJKDUyKQorI2RlZmluZSBWRlBfRE9VQkxFX0VYUE9ORU5UX0JJVFMJKDExKQorI2RlZmluZSBWRlBfRE9VQkxFX0xPV19CSVRTCQkoNjQgLSBWRlBfRE9VQkxFX01BTlRJU1NBX0JJVFMgLSAyKQorI2RlZmluZSBWRlBfRE9VQkxFX0xPV19CSVRTX01BU0sJKCgxIDw8IFZGUF9ET1VCTEVfTE9XX0JJVFMpIC0gMSkKKworLyoKKyAqIFRoZSBiaXQgaW4gYW4gdW5wYWNrZWQgZG91YmxlIHdoaWNoIGluZGljYXRlcyB0aGF0IGl0IGlzIGEgcXVpZXQgTmFOCisgKi8KKyNkZWZpbmUgVkZQX0RPVUJMRV9TSUdOSUZJQ0FORF9RTkFOCSgxVUxMIDw8IChWRlBfRE9VQkxFX01BTlRJU1NBX0JJVFMgLSAxICsgVkZQX0RPVUJMRV9MT1dfQklUUykpCisKKy8qCisgKiBPcGVyYXRpb25zIG9uIHBhY2tlZCBzaW5nbGUtcHJlY2lzaW9uIG51bWJlcnMKKyAqLworI2RlZmluZSB2ZnBfZG91YmxlX3BhY2tlZF9zaWduKHYpCSgodikgJiAoMVVMTCA8PCA2MykpCisjZGVmaW5lIHZmcF9kb3VibGVfcGFja2VkX25lZ2F0ZSh2KQkoKHYpIF4gKDFVTEwgPDwgNjMpKQorI2RlZmluZSB2ZnBfZG91YmxlX3BhY2tlZF9hYnModikJKCh2KSAmIH4oMVVMTCA8PCA2MykpCisjZGVmaW5lIHZmcF9kb3VibGVfcGFja2VkX2V4cG9uZW50KHYpCSgoKHYpID4+IFZGUF9ET1VCTEVfTUFOVElTU0FfQklUUykgJiAoKDEgPDwgVkZQX0RPVUJMRV9FWFBPTkVOVF9CSVRTKSAtIDEpKQorI2RlZmluZSB2ZnBfZG91YmxlX3BhY2tlZF9tYW50aXNzYSh2KQkoKHYpICYgKCgxVUxMIDw8IFZGUF9ET1VCTEVfTUFOVElTU0FfQklUUykgLSAxKSkKKworLyoKKyAqIFVucGFjayBhIGRvdWJsZS1wcmVjaXNpb24gZmxvYXQuICBOb3RlIHRoYXQgdGhpcyByZXR1cm5zIHRoZSBtYWduaXR1ZGUKKyAqIG9mIHRoZSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0IG1hbnRpc3NhIHdpdGggdGhlIDEuIGlmIG5lY2Vzc2FyeSwKKyAqIGFsaWduZWQgdG8gYml0IDYyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdmZwX2RvdWJsZV91bnBhY2soc3RydWN0IHZmcF9kb3VibGUgKnMsIHM2NCB2YWwpCit7CisJdTY0IHNpZ25pZmljYW5kOworCisJcy0+c2lnbiA9IHZmcF9kb3VibGVfcGFja2VkX3NpZ24odmFsKSA+PiA0ODsKKwlzLT5leHBvbmVudCA9IHZmcF9kb3VibGVfcGFja2VkX2V4cG9uZW50KHZhbCk7CisKKwlzaWduaWZpY2FuZCA9ICh1NjQpIHZhbDsKKwlzaWduaWZpY2FuZCA9IChzaWduaWZpY2FuZCA8PCAoNjQgLSBWRlBfRE9VQkxFX01BTlRJU1NBX0JJVFMpKSA+PiAyOworCWlmIChzLT5leHBvbmVudCAmJiBzLT5leHBvbmVudCAhPSAyMDQ3KQorCQlzaWduaWZpY2FuZCB8PSAoMVVMTCA8PCA2Mik7CisJcy0+c2lnbmlmaWNhbmQgPSBzaWduaWZpY2FuZDsKK30KKworLyoKKyAqIFJlLXBhY2sgYSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0LiAgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIGZsb2F0IGlzCisgKiBhbHJlYWR5IG5vcm1hbGlzZWQgc3VjaCB0aGF0IHRoZSBNU0IgaXMgYml0IDMwLCBfbm90XyBiaXQgMzEuCisgKi8KK3N0YXRpYyBpbmxpbmUgczY0IHZmcF9kb3VibGVfcGFjayhzdHJ1Y3QgdmZwX2RvdWJsZSAqcykKK3sKKwl1NjQgdmFsOworCXZhbCA9ICgodTY0KXMtPnNpZ24gPDwgNDgpICsKKwkgICAgICAoKHU2NClzLT5leHBvbmVudCA8PCBWRlBfRE9VQkxFX01BTlRJU1NBX0JJVFMpICsKKwkgICAgICAocy0+c2lnbmlmaWNhbmQgPj4gVkZQX0RPVUJMRV9MT1dfQklUUyk7CisJcmV0dXJuIChzNjQpdmFsOworfQorCitzdGF0aWMgaW5saW5lIGludCB2ZnBfZG91YmxlX3R5cGUoc3RydWN0IHZmcF9kb3VibGUgKnMpCit7CisJaW50IHR5cGUgPSBWRlBfTlVNQkVSOworCWlmIChzLT5leHBvbmVudCA9PSAyMDQ3KSB7CisJCWlmIChzLT5zaWduaWZpY2FuZCA9PSAwKQorCQkJdHlwZSA9IFZGUF9JTkZJTklUWTsKKwkJZWxzZSBpZiAocy0+c2lnbmlmaWNhbmQgJiBWRlBfRE9VQkxFX1NJR05JRklDQU5EX1FOQU4pCisJCQl0eXBlID0gVkZQX1FOQU47CisJCWVsc2UKKwkJCXR5cGUgPSBWRlBfU05BTjsKKwl9IGVsc2UgaWYgKHMtPmV4cG9uZW50ID09IDApIHsKKwkJaWYgKHMtPnNpZ25pZmljYW5kID09IDApCisJCQl0eXBlIHw9IFZGUF9aRVJPOworCQllbHNlCisJCQl0eXBlIHw9IFZGUF9ERU5PUk1BTDsKKwl9CisJcmV0dXJuIHR5cGU7Cit9CisKK3UzMiB2ZnBfZG91YmxlX25vcm1hbGlzZXJvdW5kKGludCBkZCwgc3RydWN0IHZmcF9kb3VibGUgKnZkLCB1MzIgZnBzY3IsIHUzMiBleGNlcHRpb25zLCBjb25zdCBjaGFyICpmdW5jKTsKKworLyoKKyAqIFN5c3RlbSByZWdpc3RlcnMKKyAqLworZXh0ZXJuIHUzMiB2ZnBfZ2V0X3N5cyh1bnNpZ25lZCBpbnQgcmVnKTsKK2V4dGVybiB2b2lkIHZmcF9wdXRfc3lzKHVuc2lnbmVkIGludCByZWcsIHUzMiB2YWwpOworCit1MzIgdmZwX2VzdGltYXRlX3NxcnRfc2lnbmlmaWNhbmQodTMyIGV4cG9uZW50LCB1MzIgc2lnbmlmaWNhbmQpOworCisvKgorICogQSBzcGVjaWFsIGZsYWcgdG8gdGVsbCB0aGUgbm9ybWFsaXNhdGlvbiBjb2RlIG5vdCB0byBub3JtYWxpc2UuCisgKi8KKyNkZWZpbmUgVkZQX05BTl9GTEFHCTB4MTAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwZG91YmxlLmMgYi9hcmNoL2FybS92ZnAvdmZwZG91YmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEzMDUzZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBkb3VibGUuYwpAQCAtMCwwICsxLDExODYgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vdmZwL3ZmcGRvdWJsZS5jCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgaW4gcGFydCBmcm9tIEpvaG4gUi4gSG91c2VycyBzb2Z0ZmxvYXQgbGlicmFyeSwgd2hpY2gKKyAqIGNhcnJpZXMgdGhlIGZvbGxvd2luZyBub3RpY2U6CisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBUaGlzIEMgc291cmNlIGZpbGUgaXMgcGFydCBvZiB0aGUgU29mdEZsb2F0IElFQy9JRUVFIEZsb2F0aW5nLXBvaW50CisgKiBBcml0aG1ldGljIFBhY2thZ2UsIFJlbGVhc2UgMi4KKyAqCisgKiBXcml0dGVuIGJ5IEpvaG4gUi4gSGF1c2VyLiAgVGhpcyB3b3JrIHdhcyBtYWRlIHBvc3NpYmxlIGluIHBhcnQgYnkgdGhlCisgKiBJbnRlcm5hdGlvbmFsIENvbXB1dGVyIFNjaWVuY2UgSW5zdGl0dXRlLCBsb2NhdGVkIGF0IFN1aXRlIDYwMCwgMTk0NyBDZW50ZXIKKyAqIFN0cmVldCwgQmVya2VsZXksIENhbGlmb3JuaWEgOTQ3MDQuICBGdW5kaW5nIHdhcyBwYXJ0aWFsbHkgcHJvdmlkZWQgYnkgdGhlCisgKiBOYXRpb25hbCBTY2llbmNlIEZvdW5kYXRpb24gdW5kZXIgZ3JhbnQgTUlQLTkzMTE5ODAuICBUaGUgb3JpZ2luYWwgdmVyc2lvbgorICogb2YgdGhpcyBjb2RlIHdhcyB3cml0dGVuIGFzIHBhcnQgb2YgYSBwcm9qZWN0IHRvIGJ1aWxkIGEgZml4ZWQtcG9pbnQgdmVjdG9yCisgKiBwcm9jZXNzb3IgaW4gY29sbGFib3JhdGlvbiB3aXRoIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYXQgQmVya2VsZXksCisgKiBvdmVyc2VlbiBieSBQcm9mcy4gTmVsc29uIE1vcmdhbiBhbmQgSm9obiBXYXdyenluZWsuICBNb3JlIGluZm9ybWF0aW9uCisgKiBpcyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd2ViIHBhZ2UgYGh0dHA6Ly9IVFRQLkNTLkJlcmtlbGV5LkVEVS9+amhhdXNlci8KKyAqIGFyaXRobWV0aWMvc29mdGZsb2F0Lmh0bWwnLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgRElTVFJJQlVURUQgQVMgSVMsIEZPUiBGUkVFLiAgQWx0aG91Z2ggcmVhc29uYWJsZSBlZmZvcnQKKyAqIGhhcyBiZWVuIG1hZGUgdG8gYXZvaWQgaXQsIFRISVMgU09GVFdBUkUgTUFZIENPTlRBSU4gRkFVTFRTIFRIQVQgV0lMTCBBVAorICogVElNRVMgUkVTVUxUIElOIElOQ09SUkVDVCBCRUhBVklPUi4gIFVTRSBPRiBUSElTIFNPRlRXQVJFIElTIFJFU1RSSUNURUQgVE8KKyAqIFBFUlNPTlMgQU5EIE9SR0FOSVpBVElPTlMgV0hPIENBTiBBTkQgV0lMTCBUQUtFIEZVTEwgUkVTUE9OU0lCSUxJVFkgRk9SIEFOWQorICogQU5EIEFMTCBMT1NTRVMsIENPU1RTLCBPUiBPVEhFUiBQUk9CTEVNUyBBUklTSU5HIEZST00gSVRTIFVTRS4KKyAqCisgKiBEZXJpdmF0aXZlIHdvcmtzIGFyZSBhY2NlcHRhYmxlLCBldmVuIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLCBzbyBsb25nIGFzCisgKiAoMSkgdGhleSBpbmNsdWRlIHByb21pbmVudCBub3RpY2UgdGhhdCB0aGUgd29yayBpcyBkZXJpdmF0aXZlLCBhbmQgKDIpIHRoZXkKKyAqIGluY2x1ZGUgcHJvbWluZW50IG5vdGljZSBha2luIHRvIHRoZXNlIHRocmVlIHBhcmFncmFwaHMgZm9yIHRob3NlIHBhcnRzIG9mCisgKiB0aGlzIGNvZGUgdGhhdCBhcmUgcmV0YWluZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vdmZwLmg+CisKKyNpbmNsdWRlICJ2ZnBpbnN0ci5oIgorI2luY2x1ZGUgInZmcC5oIgorCitzdGF0aWMgc3RydWN0IHZmcF9kb3VibGUgdmZwX2RvdWJsZV9kZWZhdWx0X3FuYW4gPSB7CisJLmV4cG9uZW50CT0gMjA0NywKKwkuc2lnbgkJPSAwLAorCS5zaWduaWZpY2FuZAk9IFZGUF9ET1VCTEVfU0lHTklGSUNBTkRfUU5BTiwKK307CisKK3N0YXRpYyB2b2lkIHZmcF9kb3VibGVfZHVtcChjb25zdCBjaGFyICpzdHIsIHN0cnVjdCB2ZnBfZG91YmxlICpkKQoreworCXByX2RlYnVnKCJWRlA6ICVzOiBzaWduPSVkIGV4cG9uZW50PSVkIHNpZ25pZmljYW5kPSUwMTZsbHhcbiIsCisJCSBzdHIsIGQtPnNpZ24gIT0gMCwgZC0+ZXhwb25lbnQsIGQtPnNpZ25pZmljYW5kKTsKK30KKworc3RhdGljIHZvaWQgdmZwX2RvdWJsZV9ub3JtYWxpc2VfZGVub3JtYWwoc3RydWN0IHZmcF9kb3VibGUgKnZkKQoreworCWludCBiaXRzID0gMzEgLSBmbHModmQtPnNpZ25pZmljYW5kID4+IDMyKTsKKwlpZiAoYml0cyA9PSAzMSkKKwkJYml0cyA9IDYyIC0gZmxzKHZkLT5zaWduaWZpY2FuZCk7CisKKwl2ZnBfZG91YmxlX2R1bXAoIm5vcm1hbGlzZV9kZW5vcm1hbDogaW4iLCB2ZCk7CisKKwlpZiAoYml0cykgeworCQl2ZC0+ZXhwb25lbnQgLT0gYml0cyAtIDE7CisJCXZkLT5zaWduaWZpY2FuZCA8PD0gYml0czsKKwl9CisKKwl2ZnBfZG91YmxlX2R1bXAoIm5vcm1hbGlzZV9kZW5vcm1hbDogb3V0IiwgdmQpOworfQorCit1MzIgdmZwX2RvdWJsZV9ub3JtYWxpc2Vyb3VuZChpbnQgZGQsIHN0cnVjdCB2ZnBfZG91YmxlICp2ZCwgdTMyIGZwc2NyLCB1MzIgZXhjZXB0aW9ucywgY29uc3QgY2hhciAqZnVuYykKK3sKKwl1NjQgc2lnbmlmaWNhbmQsIGluY3I7CisJaW50IGV4cG9uZW50LCBzaGlmdCwgdW5kZXJmbG93OworCXUzMiBybW9kZTsKKworCXZmcF9kb3VibGVfZHVtcCgicGFjazogaW4iLCB2ZCk7CisKKwkvKgorCSAqIEluZmluaXRpZXMgYW5kIE5hTnMgYXJlIGEgc3BlY2lhbCBjYXNlLgorCSAqLworCWlmICh2ZC0+ZXhwb25lbnQgPT0gMjA0NyAmJiAodmQtPnNpZ25pZmljYW5kID09IDAgfHwgZXhjZXB0aW9ucykpCisJCWdvdG8gcGFjazsKKworCS8qCisJICogU3BlY2lhbC1jYXNlIHplcm8uCisJICovCisJaWYgKHZkLT5zaWduaWZpY2FuZCA9PSAwKSB7CisJCXZkLT5leHBvbmVudCA9IDA7CisJCWdvdG8gcGFjazsKKwl9CisKKwlleHBvbmVudCA9IHZkLT5leHBvbmVudDsKKwlzaWduaWZpY2FuZCA9IHZkLT5zaWduaWZpY2FuZDsKKworCXNoaWZ0ID0gMzIgLSBmbHMoc2lnbmlmaWNhbmQgPj4gMzIpOworCWlmIChzaGlmdCA9PSAzMikKKwkJc2hpZnQgPSA2NCAtIGZscyhzaWduaWZpY2FuZCk7CisJaWYgKHNoaWZ0KSB7CisJCWV4cG9uZW50IC09IHNoaWZ0OworCQlzaWduaWZpY2FuZCA8PD0gc2hpZnQ7CisJfQorCisjaWZkZWYgREVCVUcKKwl2ZC0+ZXhwb25lbnQgPSBleHBvbmVudDsKKwl2ZC0+c2lnbmlmaWNhbmQgPSBzaWduaWZpY2FuZDsKKwl2ZnBfZG91YmxlX2R1bXAoInBhY2s6IG5vcm1hbGlzZWQiLCB2ZCk7CisjZW5kaWYKKworCS8qCisJICogVGlueSBudW1iZXI/CisJICovCisJdW5kZXJmbG93ID0gZXhwb25lbnQgPCAwOworCWlmICh1bmRlcmZsb3cpIHsKKwkJc2lnbmlmaWNhbmQgPSB2ZnBfc2hpZnRyaWdodDY0amFtbWluZyhzaWduaWZpY2FuZCwgLWV4cG9uZW50KTsKKwkJZXhwb25lbnQgPSAwOworI2lmZGVmIERFQlVHCisJCXZkLT5leHBvbmVudCA9IGV4cG9uZW50OworCQl2ZC0+c2lnbmlmaWNhbmQgPSBzaWduaWZpY2FuZDsKKwkJdmZwX2RvdWJsZV9kdW1wKCJwYWNrOiB0aW55IG51bWJlciIsIHZkKTsKKyNlbmRpZgorCQlpZiAoIShzaWduaWZpY2FuZCAmICgoMVVMTCA8PCAoVkZQX0RPVUJMRV9MT1dfQklUUyArIDEpKSAtIDEpKSkKKwkJCXVuZGVyZmxvdyA9IDA7CisJfQorCisJLyoKKwkgKiBTZWxlY3Qgcm91bmRpbmcgaW5jcmVtZW50LgorCSAqLworCWluY3IgPSAwOworCXJtb2RlID0gZnBzY3IgJiBGUFNDUl9STU9ERV9NQVNLOworCisJaWYgKHJtb2RlID09IEZQU0NSX1JPVU5EX05FQVJFU1QpIHsKKwkJaW5jciA9IDFVTEwgPDwgVkZQX0RPVUJMRV9MT1dfQklUUzsKKwkJaWYgKChzaWduaWZpY2FuZCAmICgxVUxMIDw8IChWRlBfRE9VQkxFX0xPV19CSVRTICsgMSkpKSA9PSAwKQorCQkJaW5jciAtPSAxOworCX0gZWxzZSBpZiAocm1vZGUgPT0gRlBTQ1JfUk9VTkRfVE9aRVJPKSB7CisJCWluY3IgPSAwOworCX0gZWxzZSBpZiAoKHJtb2RlID09IEZQU0NSX1JPVU5EX1BMVVNJTkYpIF4gKHZkLT5zaWduICE9IDApKQorCQlpbmNyID0gKDFVTEwgPDwgKFZGUF9ET1VCTEVfTE9XX0JJVFMgKyAxKSkgLSAxOworCisJcHJfZGVidWcoIlZGUDogcm91bmRpbmcgaW5jcmVtZW50ID0gMHglMDhsbHhcbiIsIGluY3IpOworCisJLyoKKwkgKiBJcyBvdXIgcm91bmRpbmcgZ29pbmcgdG8gb3ZlcmZsb3c/CisJICovCisJaWYgKChzaWduaWZpY2FuZCArIGluY3IpIDwgc2lnbmlmaWNhbmQpIHsKKwkJZXhwb25lbnQgKz0gMTsKKwkJc2lnbmlmaWNhbmQgPSAoc2lnbmlmaWNhbmQgPj4gMSkgfCAoc2lnbmlmaWNhbmQgJiAxKTsKKwkJaW5jciA+Pj0gMTsKKyNpZmRlZiBERUJVRworCQl2ZC0+ZXhwb25lbnQgPSBleHBvbmVudDsKKwkJdmQtPnNpZ25pZmljYW5kID0gc2lnbmlmaWNhbmQ7CisJCXZmcF9kb3VibGVfZHVtcCgicGFjazogb3ZlcmZsb3ciLCB2ZCk7CisjZW5kaWYKKwl9CisKKwkvKgorCSAqIElmIGFueSBvZiB0aGUgbG93IGJpdHMgKHdoaWNoIHdpbGwgYmUgc2hpZnRlZCBvdXQgb2YgdGhlCisJICogbnVtYmVyKSBhcmUgbm9uLXplcm8sIHRoZSByZXN1bHQgaXMgaW5leGFjdC4KKwkgKi8KKwlpZiAoc2lnbmlmaWNhbmQgJiAoKDEgPDwgKFZGUF9ET1VCTEVfTE9XX0JJVFMgKyAxKSkgLSAxKSkKKwkJZXhjZXB0aW9ucyB8PSBGUFNDUl9JWEM7CisKKwkvKgorCSAqIERvIG91ciByb3VuZGluZy4KKwkgKi8KKwlzaWduaWZpY2FuZCArPSBpbmNyOworCisJLyoKKwkgKiBJbmZpbml0eT8KKwkgKi8KKwlpZiAoZXhwb25lbnQgPj0gMjA0NikgeworCQlleGNlcHRpb25zIHw9IEZQU0NSX09GQyB8IEZQU0NSX0lYQzsKKwkJaWYgKGluY3IgPT0gMCkgeworCQkJdmQtPmV4cG9uZW50ID0gMjA0NTsKKwkJCXZkLT5zaWduaWZpY2FuZCA9IDB4N2ZmZmZmZmZmZmZmZmZmZlVMTDsKKwkJfSBlbHNlIHsKKwkJCXZkLT5leHBvbmVudCA9IDIwNDc7CQkvKiBpbmZpbml0eSAqLworCQkJdmQtPnNpZ25pZmljYW5kID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChzaWduaWZpY2FuZCA+PiAoVkZQX0RPVUJMRV9MT1dfQklUUyArIDEpID09IDApCisJCQlleHBvbmVudCA9IDA7CisJCWlmIChleHBvbmVudCB8fCBzaWduaWZpY2FuZCA+IDB4ODAwMDAwMDAwMDAwMDAwMFVMTCkKKwkJCXVuZGVyZmxvdyA9IDA7CisJCWlmICh1bmRlcmZsb3cpCisJCQlleGNlcHRpb25zIHw9IEZQU0NSX1VGQzsKKwkJdmQtPmV4cG9uZW50ID0gZXhwb25lbnQ7CisJCXZkLT5zaWduaWZpY2FuZCA9IHNpZ25pZmljYW5kID4+IDE7CisJfQorCisgcGFjazoKKwl2ZnBfZG91YmxlX2R1bXAoInBhY2s6IGZpbmFsIiwgdmQpOworCXsKKwkJczY0IGQgPSB2ZnBfZG91YmxlX3BhY2sodmQpOworCQlwcl9kZWJ1ZygiVkZQOiAlczogZChkJWQpPSUwMTZsbHggZXhjZXB0aW9ucz0lMDh4XG4iLCBmdW5jLAorCQkJIGRkLCBkLCBleGNlcHRpb25zKTsKKwkJdmZwX3B1dF9kb3VibGUoZGQsIGQpOworCX0KKwlyZXR1cm4gZXhjZXB0aW9ucyAmIH5WRlBfTkFOX0ZMQUc7Cit9CisKKy8qCisgKiBQcm9wYWdhdGUgdGhlIE5hTiwgc2V0dGluZyBleGNlcHRpb25zIGlmIGl0IGlzIHNpZ25hbGxpbmcuCisgKiAnbicgaXMgYWx3YXlzIGEgTmFOLiAgJ20nIG1heSBiZSBhIG51bWJlciwgTmFOIG9yIGluZmluaXR5LgorICovCitzdGF0aWMgdTMyCit2ZnBfcHJvcGFnYXRlX25hbihzdHJ1Y3QgdmZwX2RvdWJsZSAqdmRkLCBzdHJ1Y3QgdmZwX2RvdWJsZSAqdmRuLAorCQkgIHN0cnVjdCB2ZnBfZG91YmxlICp2ZG0sIHUzMiBmcHNjcikKK3sKKwlzdHJ1Y3QgdmZwX2RvdWJsZSAqbmFuOworCWludCB0biwgdG0gPSAwOworCisJdG4gPSB2ZnBfZG91YmxlX3R5cGUodmRuKTsKKworCWlmICh2ZG0pCisJCXRtID0gdmZwX2RvdWJsZV90eXBlKHZkbSk7CisKKwlpZiAoZnBzY3IgJiBGUFNDUl9ERUZBVUxUX05BTikKKwkJLyoKKwkJICogRGVmYXVsdCBOYU4gbW9kZSAtIGFsd2F5cyByZXR1cm5zIGEgcXVpZXQgTmFOCisJCSAqLworCQluYW4gPSAmdmZwX2RvdWJsZV9kZWZhdWx0X3FuYW47CisJZWxzZSB7CisJCS8qCisJCSAqIENvbnRlbXBvcmFyeSBtb2RlIC0gc2VsZWN0IHRoZSBmaXJzdCBzaWduYWxsaW5nCisJCSAqIE5BTiwgb3IgaWYgbmVpdGhlciBhcmUgc2lnbmFsbGluZywgdGhlIGZpcnN0CisJCSAqIHF1aWV0IE5BTi4KKwkJICovCisJCWlmICh0biA9PSBWRlBfU05BTiB8fCAodG0gIT0gVkZQX1NOQU4gJiYgdG4gPT0gVkZQX1FOQU4pKQorCQkJbmFuID0gdmRuOworCQllbHNlCisJCQluYW4gPSB2ZG07CisJCS8qCisJCSAqIE1ha2UgdGhlIE5hTiBxdWlldC4KKwkJICovCisJCW5hbi0+c2lnbmlmaWNhbmQgfD0gVkZQX0RPVUJMRV9TSUdOSUZJQ0FORF9RTkFOOworCX0KKworCSp2ZGQgPSAqbmFuOworCisJLyoKKwkgKiBJZiBvbmUgd2FzIGEgc2lnbmFsbGluZyBOQU4sIHJhaXNlIGludmFsaWQgb3BlcmF0aW9uLgorCSAqLworCXJldHVybiB0biA9PSBWRlBfU05BTiB8fCB0bSA9PSBWRlBfU05BTiA/IEZQU0NSX0lPQyA6IFZGUF9OQU5fRkxBRzsKK30KKworLyoKKyAqIEV4dGVuZGVkIG9wZXJhdGlvbnMKKyAqLworc3RhdGljIHUzMiB2ZnBfZG91YmxlX2ZhYnMoaW50IGRkLCBpbnQgdW51c2VkLCBpbnQgZG0sIHUzMiBmcHNjcikKK3sKKwl2ZnBfcHV0X2RvdWJsZShkZCwgdmZwX2RvdWJsZV9wYWNrZWRfYWJzKHZmcF9nZXRfZG91YmxlKGRtKSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIHZmcF9kb3VibGVfZmNweShpbnQgZGQsIGludCB1bnVzZWQsIGludCBkbSwgdTMyIGZwc2NyKQoreworCXZmcF9wdXRfZG91YmxlKGRkLCB2ZnBfZ2V0X2RvdWJsZShkbSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIHZmcF9kb3VibGVfZm5lZyhpbnQgZGQsIGludCB1bnVzZWQsIGludCBkbSwgdTMyIGZwc2NyKQoreworCXZmcF9wdXRfZG91YmxlKGRkLCB2ZnBfZG91YmxlX3BhY2tlZF9uZWdhdGUodmZwX2dldF9kb3VibGUoZG0pKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgdmZwX2RvdWJsZV9mc3FydChpbnQgZGQsIGludCB1bnVzZWQsIGludCBkbSwgdTMyIGZwc2NyKQoreworCXN0cnVjdCB2ZnBfZG91YmxlIHZkbSwgdmRkOworCWludCByZXQsIHRtOworCisJdmZwX2RvdWJsZV91bnBhY2soJnZkbSwgdmZwX2dldF9kb3VibGUoZG0pKTsKKwl0bSA9IHZmcF9kb3VibGVfdHlwZSgmdmRtKTsKKwlpZiAodG0gJiAoVkZQX05BTnxWRlBfSU5GSU5JVFkpKSB7CisJCXN0cnVjdCB2ZnBfZG91YmxlICp2ZHAgPSAmdmRkOworCisJCWlmICh0bSAmIFZGUF9OQU4pCisJCQlyZXQgPSB2ZnBfcHJvcGFnYXRlX25hbih2ZHAsICZ2ZG0sIE5VTEwsIGZwc2NyKTsKKwkJZWxzZSBpZiAodmRtLnNpZ24gPT0gMCkgeworIHNxcnRfY29weToKKwkJCXZkcCA9ICZ2ZG07CisJCQlyZXQgPSAwOworCQl9IGVsc2UgeworIHNxcnRfaW52YWxpZDoKKwkJCXZkcCA9ICZ2ZnBfZG91YmxlX2RlZmF1bHRfcW5hbjsKKwkJCXJldCA9IEZQU0NSX0lPQzsKKwkJfQorCQl2ZnBfcHV0X2RvdWJsZShkZCwgdmZwX2RvdWJsZV9wYWNrKHZkcCkpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qCisJICogc3FydCgrLy0gMCkgPT0gKy8tIDAKKwkgKi8KKwlpZiAodG0gJiBWRlBfWkVSTykKKwkJZ290byBzcXJ0X2NvcHk7CisKKwkvKgorCSAqIE5vcm1hbGlzZSBhIGRlbm9ybWFsaXNlZCBudW1iZXIKKwkgKi8KKwlpZiAodG0gJiBWRlBfREVOT1JNQUwpCisJCXZmcF9kb3VibGVfbm9ybWFsaXNlX2Rlbm9ybWFsKCZ2ZG0pOworCisJLyoKKwkgKiBzcXJ0KDwwKSA9IGludmFsaWQKKwkgKi8KKwlpZiAodmRtLnNpZ24pCisJCWdvdG8gc3FydF9pbnZhbGlkOworCisJdmZwX2RvdWJsZV9kdW1wKCJzcXJ0IiwgJnZkbSk7CisKKwkvKgorCSAqIEVzdGltYXRlIHRoZSBzcXVhcmUgcm9vdC4KKwkgKi8KKwl2ZGQuc2lnbiA9IDA7CisJdmRkLmV4cG9uZW50ID0gKCh2ZG0uZXhwb25lbnQgLSAxMDIzKSA+PiAxKSArIDEwMjM7CisJdmRkLnNpZ25pZmljYW5kID0gKHU2NCl2ZnBfZXN0aW1hdGVfc3FydF9zaWduaWZpY2FuZCh2ZG0uZXhwb25lbnQsIHZkbS5zaWduaWZpY2FuZCA+PiAzMikgPDwgMzE7CisKKwl2ZnBfZG91YmxlX2R1bXAoInNxcnQgZXN0aW1hdGUxIiwgJnZkZCk7CisKKwl2ZG0uc2lnbmlmaWNhbmQgPj49IDEgKyAodmRtLmV4cG9uZW50ICYgMSk7CisJdmRkLnNpZ25pZmljYW5kICs9IDIgKyB2ZnBfZXN0aW1hdGVfZGl2MTI4dG82NCh2ZG0uc2lnbmlmaWNhbmQsIDAsIHZkZC5zaWduaWZpY2FuZCk7CisKKwl2ZnBfZG91YmxlX2R1bXAoInNxcnQgZXN0aW1hdGUyIiwgJnZkZCk7CisKKwkvKgorCSAqIEFuZCBub3cgYWRqdXN0LgorCSAqLworCWlmICgodmRkLnNpZ25pZmljYW5kICYgVkZQX0RPVUJMRV9MT1dfQklUU19NQVNLKSA8PSA1KSB7CisJCWlmICh2ZGQuc2lnbmlmaWNhbmQgPCAyKSB7CisJCQl2ZGQuc2lnbmlmaWNhbmQgPSB+MFVMTDsKKwkJfSBlbHNlIHsKKwkJCXU2NCB0ZXJtaCwgdGVybWwsIHJlbWgsIHJlbWw7CisJCQl2ZG0uc2lnbmlmaWNhbmQgPDw9IDI7CisJCQltdWw2NHRvMTI4KCZ0ZXJtaCwgJnRlcm1sLCB2ZGQuc2lnbmlmaWNhbmQsIHZkZC5zaWduaWZpY2FuZCk7CisJCQlzdWIxMjgoJnJlbWgsICZyZW1sLCB2ZG0uc2lnbmlmaWNhbmQsIDAsIHRlcm1oLCB0ZXJtbCk7CisJCQl3aGlsZSAoKHM2NClyZW1oIDwgMCkgeworCQkJCXZkZC5zaWduaWZpY2FuZCAtPSAxOworCQkJCXNoaWZ0NjRsZWZ0KCZ0ZXJtaCwgJnRlcm1sLCB2ZGQuc2lnbmlmaWNhbmQpOworCQkJCXRlcm1sIHw9IDE7CisJCQkJYWRkMTI4KCZyZW1oLCAmcmVtbCwgcmVtaCwgcmVtbCwgdGVybWgsIHRlcm1sKTsKKwkJCX0KKwkJCXZkZC5zaWduaWZpY2FuZCB8PSAocmVtaCB8IHJlbWwpICE9IDA7CisJCX0KKwl9CisJdmRkLnNpZ25pZmljYW5kID0gdmZwX3NoaWZ0cmlnaHQ2NGphbW1pbmcodmRkLnNpZ25pZmljYW5kLCAxKTsKKworCXJldHVybiB2ZnBfZG91YmxlX25vcm1hbGlzZXJvdW5kKGRkLCAmdmRkLCBmcHNjciwgMCwgImZzcXJ0Iik7Cit9CisKKy8qCisgKiBFcXVhbAk6PSBaQworICogTGVzcyB0aGFuCTo9IE4KKyAqIEdyZWF0ZXIgdGhhbgk6PSBDCisgKiBVbm9yZGVyZWQJOj0gQ1YKKyAqLworc3RhdGljIHUzMiB2ZnBfY29tcGFyZShpbnQgZGQsIGludCBzaWduYWxfb25fcW5hbiwgaW50IGRtLCB1MzIgZnBzY3IpCit7CisJczY0IGQsIG07CisJdTMyIHJldCA9IDA7CisKKwltID0gdmZwX2dldF9kb3VibGUoZG0pOworCWlmICh2ZnBfZG91YmxlX3BhY2tlZF9leHBvbmVudChtKSA9PSAyMDQ3ICYmIHZmcF9kb3VibGVfcGFja2VkX21hbnRpc3NhKG0pKSB7CisJCXJldCB8PSBGUFNDUl9DIHwgRlBTQ1JfVjsKKwkJaWYgKHNpZ25hbF9vbl9xbmFuIHx8ICEodmZwX2RvdWJsZV9wYWNrZWRfbWFudGlzc2EobSkgJiAoMVVMTCA8PCAoVkZQX0RPVUJMRV9NQU5USVNTQV9CSVRTIC0gMSkpKSkKKwkJCS8qCisJCQkgKiBTaWduYWxsaW5nIE5hTiwgb3Igc2lnbmFsbGluZyBvbiBxdWlldCBOYU4KKwkJCSAqLworCQkJcmV0IHw9IEZQU0NSX0lPQzsKKwl9CisKKwlkID0gdmZwX2dldF9kb3VibGUoZGQpOworCWlmICh2ZnBfZG91YmxlX3BhY2tlZF9leHBvbmVudChkKSA9PSAyMDQ3ICYmIHZmcF9kb3VibGVfcGFja2VkX21hbnRpc3NhKGQpKSB7CisJCXJldCB8PSBGUFNDUl9DIHwgRlBTQ1JfVjsKKwkJaWYgKHNpZ25hbF9vbl9xbmFuIHx8ICEodmZwX2RvdWJsZV9wYWNrZWRfbWFudGlzc2EoZCkgJiAoMVVMTCA8PCAoVkZQX0RPVUJMRV9NQU5USVNTQV9CSVRTIC0gMSkpKSkKKwkJCS8qCisJCQkgKiBTaWduYWxsaW5nIE5hTiwgb3Igc2lnbmFsbGluZyBvbiBxdWlldCBOYU4KKwkJCSAqLworCQkJcmV0IHw9IEZQU0NSX0lPQzsKKwl9CisKKwlpZiAocmV0ID09IDApIHsKKwkJaWYgKGQgPT0gbSB8fCB2ZnBfZG91YmxlX3BhY2tlZF9hYnMoZCB8IG0pID09IDApIHsKKwkJCS8qCisJCQkgKiBlcXVhbAorCQkJICovCisJCQlyZXQgfD0gRlBTQ1JfWiB8IEZQU0NSX0M7CisJCX0gZWxzZSBpZiAodmZwX2RvdWJsZV9wYWNrZWRfc2lnbihkIF4gbSkpIHsKKwkJCS8qCisJCQkgKiBkaWZmZXJlbnQgc2lnbnMKKwkJCSAqLworCQkJaWYgKHZmcF9kb3VibGVfcGFja2VkX3NpZ24oZCkpCisJCQkJLyoKKwkJCQkgKiBkIGlzIG5lZ2F0aXZlLCBzbyBkIDwgbQorCQkJCSAqLworCQkJCXJldCB8PSBGUFNDUl9OOworCQkJZWxzZQorCQkJCS8qCisJCQkJICogZCBpcyBwb3NpdGl2ZSwgc28gZCA+IG0KKwkJCQkgKi8KKwkJCQlyZXQgfD0gRlBTQ1JfQzsKKwkJfSBlbHNlIGlmICgodmZwX2RvdWJsZV9wYWNrZWRfc2lnbihkKSAhPSAwKSBeIChkIDwgbSkpIHsKKwkJCS8qCisJCQkgKiBkIDwgbQorCQkJICovCisJCQlyZXQgfD0gRlBTQ1JfTjsKKwkJfSBlbHNlIGlmICgodmZwX2RvdWJsZV9wYWNrZWRfc2lnbihkKSAhPSAwKSBeIChkID4gbSkpIHsKKwkJCS8qCisJCQkgKiBkID4gbQorCQkJICovCisJCQlyZXQgfD0gRlBTQ1JfQzsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MzIgdmZwX2RvdWJsZV9mY21wKGludCBkZCwgaW50IHVudXNlZCwgaW50IGRtLCB1MzIgZnBzY3IpCit7CisJcmV0dXJuIHZmcF9jb21wYXJlKGRkLCAwLCBkbSwgZnBzY3IpOworfQorCitzdGF0aWMgdTMyIHZmcF9kb3VibGVfZmNtcGUoaW50IGRkLCBpbnQgdW51c2VkLCBpbnQgZG0sIHUzMiBmcHNjcikKK3sKKwlyZXR1cm4gdmZwX2NvbXBhcmUoZGQsIDEsIGRtLCBmcHNjcik7Cit9CisKK3N0YXRpYyB1MzIgdmZwX2RvdWJsZV9mY21weihpbnQgZGQsIGludCB1bnVzZWQsIGludCBkbSwgdTMyIGZwc2NyKQoreworCXJldHVybiB2ZnBfY29tcGFyZShkZCwgMCwgVkZQX1JFR19aRVJPLCBmcHNjcik7Cit9CisKK3N0YXRpYyB1MzIgdmZwX2RvdWJsZV9mY21wZXooaW50IGRkLCBpbnQgdW51c2VkLCBpbnQgZG0sIHUzMiBmcHNjcikKK3sKKwlyZXR1cm4gdmZwX2NvbXBhcmUoZGQsIDEsIFZGUF9SRUdfWkVSTywgZnBzY3IpOworfQorCitzdGF0aWMgdTMyIHZmcF9kb3VibGVfZmN2dHMoaW50IHNkLCBpbnQgdW51c2VkLCBpbnQgZG0sIHUzMiBmcHNjcikKK3sKKwlzdHJ1Y3QgdmZwX2RvdWJsZSB2ZG07CisJc3RydWN0IHZmcF9zaW5nbGUgdnNkOworCWludCB0bTsKKwl1MzIgZXhjZXB0aW9ucyA9IDA7CisKKwl2ZnBfZG91YmxlX3VucGFjaygmdmRtLCB2ZnBfZ2V0X2RvdWJsZShkbSkpOworCisJdG0gPSB2ZnBfZG91YmxlX3R5cGUoJnZkbSk7CisKKwkvKgorCSAqIElmIHdlIGhhdmUgYSBzaWduYWxsaW5nIE5hTiwgc2lnbmFsIGludmFsaWQgb3BlcmF0aW9uLgorCSAqLworCWlmICh0bSA9PSBWRlBfU05BTikKKwkJZXhjZXB0aW9ucyA9IEZQU0NSX0lPQzsKKworCWlmICh0bSAmIFZGUF9ERU5PUk1BTCkKKwkJdmZwX2RvdWJsZV9ub3JtYWxpc2VfZGVub3JtYWwoJnZkbSk7CisKKwl2c2Quc2lnbiA9IHZkbS5zaWduOworCXZzZC5zaWduaWZpY2FuZCA9IHZmcF9oaTY0dG8zMmphbW1pbmcodmRtLnNpZ25pZmljYW5kKTsKKworCS8qCisJICogSWYgd2UgaGF2ZSBhbiBpbmZpbml0eSBvciBhIE5hTiwgdGhlIGV4cG9uZW50IG11c3QgYmUgMjU1CisJICovCisJaWYgKHRtICYgKFZGUF9JTkZJTklUWXxWRlBfTkFOKSkgeworCQl2c2QuZXhwb25lbnQgPSAyNTU7CisJCWlmICh0bSAmIFZGUF9OQU4pCisJCQl2c2Quc2lnbmlmaWNhbmQgfD0gVkZQX1NJTkdMRV9TSUdOSUZJQ0FORF9RTkFOOworCQlnb3RvIHBhY2tfbmFuOworCX0gZWxzZSBpZiAodG0gJiBWRlBfWkVSTykKKwkJdnNkLmV4cG9uZW50ID0gMDsKKwllbHNlCisJCXZzZC5leHBvbmVudCA9IHZkbS5leHBvbmVudCAtICgxMDIzIC0gMTI3KTsKKworCXJldHVybiB2ZnBfc2luZ2xlX25vcm1hbGlzZXJvdW5kKHNkLCAmdnNkLCBmcHNjciwgZXhjZXB0aW9ucywgImZjdnRzIik7CisKKyBwYWNrX25hbjoKKwl2ZnBfcHV0X2Zsb2F0KHNkLCB2ZnBfc2luZ2xlX3BhY2soJnZzZCkpOworCXJldHVybiBleGNlcHRpb25zOworfQorCitzdGF0aWMgdTMyIHZmcF9kb3VibGVfZnVpdG8oaW50IGRkLCBpbnQgdW51c2VkLCBpbnQgZG0sIHUzMiBmcHNjcikKK3sKKwlzdHJ1Y3QgdmZwX2RvdWJsZSB2ZG07CisJdTMyIG0gPSB2ZnBfZ2V0X2Zsb2F0KGRtKTsKKworCXZkbS5zaWduID0gMDsKKwl2ZG0uZXhwb25lbnQgPSAxMDIzICsgNjMgLSAxOworCXZkbS5zaWduaWZpY2FuZCA9ICh1NjQpbTsKKworCXJldHVybiB2ZnBfZG91YmxlX25vcm1hbGlzZXJvdW5kKGRkLCAmdmRtLCBmcHNjciwgMCwgImZ1aXRvIik7Cit9CisKK3N0YXRpYyB1MzIgdmZwX2RvdWJsZV9mc2l0byhpbnQgZGQsIGludCB1bnVzZWQsIGludCBkbSwgdTMyIGZwc2NyKQoreworCXN0cnVjdCB2ZnBfZG91YmxlIHZkbTsKKwl1MzIgbSA9IHZmcF9nZXRfZmxvYXQoZG0pOworCisJdmRtLnNpZ24gPSAobSAmIDB4ODAwMDAwMDApID4+IDE2OworCXZkbS5leHBvbmVudCA9IDEwMjMgKyA2MyAtIDE7CisJdmRtLnNpZ25pZmljYW5kID0gdmRtLnNpZ24gPyAtbSA6IG07CisKKwlyZXR1cm4gdmZwX2RvdWJsZV9ub3JtYWxpc2Vyb3VuZChkZCwgJnZkbSwgZnBzY3IsIDAsICJmc2l0byIpOworfQorCitzdGF0aWMgdTMyIHZmcF9kb3VibGVfZnRvdWkoaW50IHNkLCBpbnQgdW51c2VkLCBpbnQgZG0sIHUzMiBmcHNjcikKK3sKKwlzdHJ1Y3QgdmZwX2RvdWJsZSB2ZG07CisJdTMyIGQsIGV4Y2VwdGlvbnMgPSAwOworCWludCBybW9kZSA9IGZwc2NyICYgRlBTQ1JfUk1PREVfTUFTSzsKKwlpbnQgdG07CisKKwl2ZnBfZG91YmxlX3VucGFjaygmdmRtLCB2ZnBfZ2V0X2RvdWJsZShkbSkpOworCisJLyoKKwkgKiBEbyB3ZSBoYXZlIGEgZGVub3JtYWxpc2VkIG51bWJlcj8KKwkgKi8KKwl0bSA9IHZmcF9kb3VibGVfdHlwZSgmdmRtKTsKKwlpZiAodG0gJiBWRlBfREVOT1JNQUwpCisJCWV4Y2VwdGlvbnMgfD0gRlBTQ1JfSURDOworCisJaWYgKHRtICYgVkZQX05BTikKKwkJdmRtLnNpZ24gPSAwOworCisJaWYgKHZkbS5leHBvbmVudCA+PSAxMDIzICsgMzIpIHsKKwkJZCA9IHZkbS5zaWduID8gMCA6IDB4ZmZmZmZmZmY7CisJCWV4Y2VwdGlvbnMgPSBGUFNDUl9JT0M7CisJfSBlbHNlIGlmICh2ZG0uZXhwb25lbnQgPj0gMTAyMyAtIDEpIHsKKwkJaW50IHNoaWZ0ID0gMTAyMyArIDYzIC0gdmRtLmV4cG9uZW50OworCQl1NjQgcmVtLCBpbmNyID0gMDsKKworCQkvKgorCQkgKiAyXjAgPD0gbSA8IDJeMzItMl44CisJCSAqLworCQlkID0gKHZkbS5zaWduaWZpY2FuZCA8PCAxKSA+PiBzaGlmdDsKKwkJcmVtID0gdmRtLnNpZ25pZmljYW5kIDw8ICg2NSAtIHNoaWZ0KTsKKworCQlpZiAocm1vZGUgPT0gRlBTQ1JfUk9VTkRfTkVBUkVTVCkgeworCQkJaW5jciA9IDB4ODAwMDAwMDAwMDAwMDAwMFVMTDsKKwkJCWlmICgoZCAmIDEpID09IDApCisJCQkJaW5jciAtPSAxOworCQl9IGVsc2UgaWYgKHJtb2RlID09IEZQU0NSX1JPVU5EX1RPWkVSTykgeworCQkJaW5jciA9IDA7CisJCX0gZWxzZSBpZiAoKHJtb2RlID09IEZQU0NSX1JPVU5EX1BMVVNJTkYpIF4gKHZkbS5zaWduICE9IDApKSB7CisJCQlpbmNyID0gfjBVTEw7CisJCX0KKworCQlpZiAoKHJlbSArIGluY3IpIDwgcmVtKSB7CisJCQlpZiAoZCA8IDB4ZmZmZmZmZmYpCisJCQkJZCArPSAxOworCQkJZWxzZQorCQkJCWV4Y2VwdGlvbnMgfD0gRlBTQ1JfSU9DOworCQl9CisKKwkJaWYgKGQgJiYgdmRtLnNpZ24pIHsKKwkJCWQgPSAwOworCQkJZXhjZXB0aW9ucyB8PSBGUFNDUl9JT0M7CisJCX0gZWxzZSBpZiAocmVtKQorCQkJZXhjZXB0aW9ucyB8PSBGUFNDUl9JWEM7CisJfSBlbHNlIHsKKwkJZCA9IDA7CisJCWlmICh2ZG0uZXhwb25lbnQgfCB2ZG0uc2lnbmlmaWNhbmQpIHsKKwkJCWV4Y2VwdGlvbnMgfD0gRlBTQ1JfSVhDOworCQkJaWYgKHJtb2RlID09IEZQU0NSX1JPVU5EX1BMVVNJTkYgJiYgdmRtLnNpZ24gPT0gMCkKKwkJCQlkID0gMTsKKwkJCWVsc2UgaWYgKHJtb2RlID09IEZQU0NSX1JPVU5EX01JTlVTSU5GICYmIHZkbS5zaWduKSB7CisJCQkJZCA9IDA7CisJCQkJZXhjZXB0aW9ucyB8PSBGUFNDUl9JT0M7CisJCQl9CisJCX0KKwl9CisKKwlwcl9kZWJ1ZygiVkZQOiBmdG91aTogZChzJWQpPSUwOHggZXhjZXB0aW9ucz0lMDh4XG4iLCBzZCwgZCwgZXhjZXB0aW9ucyk7CisKKwl2ZnBfcHV0X2Zsb2F0KHNkLCBkKTsKKworCXJldHVybiBleGNlcHRpb25zOworfQorCitzdGF0aWMgdTMyIHZmcF9kb3VibGVfZnRvdWl6KGludCBzZCwgaW50IHVudXNlZCwgaW50IGRtLCB1MzIgZnBzY3IpCit7CisJcmV0dXJuIHZmcF9kb3VibGVfZnRvdWkoc2QsIHVudXNlZCwgZG0sIEZQU0NSX1JPVU5EX1RPWkVSTyk7Cit9CisKK3N0YXRpYyB1MzIgdmZwX2RvdWJsZV9mdG9zaShpbnQgc2QsIGludCB1bnVzZWQsIGludCBkbSwgdTMyIGZwc2NyKQoreworCXN0cnVjdCB2ZnBfZG91YmxlIHZkbTsKKwl1MzIgZCwgZXhjZXB0aW9ucyA9IDA7CisJaW50IHJtb2RlID0gZnBzY3IgJiBGUFNDUl9STU9ERV9NQVNLOworCisJdmZwX2RvdWJsZV91bnBhY2soJnZkbSwgdmZwX2dldF9kb3VibGUoZG0pKTsKKwl2ZnBfZG91YmxlX2R1bXAoIlZETSIsICZ2ZG0pOworCisJLyoKKwkgKiBEbyB3ZSBoYXZlIGRlbm9ybWFsaXNlZCBudW1iZXI/CisJICovCisJaWYgKHZmcF9kb3VibGVfdHlwZSgmdmRtKSAmIFZGUF9ERU5PUk1BTCkKKwkJZXhjZXB0aW9ucyB8PSBGUFNDUl9JREM7CisKKwlpZiAodmRtLmV4cG9uZW50ID49IDEwMjMgKyAzMikgeworCQlkID0gMHg3ZmZmZmZmZjsKKwkJaWYgKHZkbS5zaWduKQorCQkJZCA9IH5kOworCQlleGNlcHRpb25zIHw9IEZQU0NSX0lPQzsKKwl9IGVsc2UgaWYgKHZkbS5leHBvbmVudCA+PSAxMDIzIC0gMSkgeworCQlpbnQgc2hpZnQgPSAxMDIzICsgNjMgLSB2ZG0uZXhwb25lbnQ7CS8qIDU4ICovCisJCXU2NCByZW0sIGluY3IgPSAwOworCisJCWQgPSAodmRtLnNpZ25pZmljYW5kIDw8IDEpID4+IHNoaWZ0OworCQlyZW0gPSB2ZG0uc2lnbmlmaWNhbmQgPDwgKDY1IC0gc2hpZnQpOworCisJCWlmIChybW9kZSA9PSBGUFNDUl9ST1VORF9ORUFSRVNUKSB7CisJCQlpbmNyID0gMHg4MDAwMDAwMDAwMDAwMDAwVUxMOworCQkJaWYgKChkICYgMSkgPT0gMCkKKwkJCQlpbmNyIC09IDE7CisJCX0gZWxzZSBpZiAocm1vZGUgPT0gRlBTQ1JfUk9VTkRfVE9aRVJPKSB7CisJCQlpbmNyID0gMDsKKwkJfSBlbHNlIGlmICgocm1vZGUgPT0gRlBTQ1JfUk9VTkRfUExVU0lORikgXiAodmRtLnNpZ24gIT0gMCkpIHsKKwkJCWluY3IgPSB+MFVMTDsKKwkJfQorCisJCWlmICgocmVtICsgaW5jcikgPCByZW0gJiYgZCA8IDB4ZmZmZmZmZmYpCisJCQlkICs9IDE7CisJCWlmIChkID4gMHg3ZmZmZmZmZiArICh2ZG0uc2lnbiAhPSAwKSkgeworCQkJZCA9IDB4N2ZmZmZmZmYgKyAodmRtLnNpZ24gIT0gMCk7CisJCQlleGNlcHRpb25zIHw9IEZQU0NSX0lPQzsKKwkJfSBlbHNlIGlmIChyZW0pCisJCQlleGNlcHRpb25zIHw9IEZQU0NSX0lYQzsKKworCQlpZiAodmRtLnNpZ24pCisJCQlkID0gLWQ7CisJfSBlbHNlIHsKKwkJZCA9IDA7CisJCWlmICh2ZG0uZXhwb25lbnQgfCB2ZG0uc2lnbmlmaWNhbmQpIHsKKwkJCWV4Y2VwdGlvbnMgfD0gRlBTQ1JfSVhDOworCQkJaWYgKHJtb2RlID09IEZQU0NSX1JPVU5EX1BMVVNJTkYgJiYgdmRtLnNpZ24gPT0gMCkKKwkJCQlkID0gMTsKKwkJCWVsc2UgaWYgKHJtb2RlID09IEZQU0NSX1JPVU5EX01JTlVTSU5GICYmIHZkbS5zaWduKQorCQkJCWQgPSAtMTsKKwkJfQorCX0KKworCXByX2RlYnVnKCJWRlA6IGZ0b3NpOiBkKHMlZCk9JTA4eCBleGNlcHRpb25zPSUwOHhcbiIsIHNkLCBkLCBleGNlcHRpb25zKTsKKworCXZmcF9wdXRfZmxvYXQoc2QsIChzMzIpZCk7CisKKwlyZXR1cm4gZXhjZXB0aW9uczsKK30KKworc3RhdGljIHUzMiB2ZnBfZG91YmxlX2Z0b3NpeihpbnQgZGQsIGludCB1bnVzZWQsIGludCBkbSwgdTMyIGZwc2NyKQoreworCXJldHVybiB2ZnBfZG91YmxlX2Z0b3NpKGRkLCB1bnVzZWQsIGRtLCBGUFNDUl9ST1VORF9UT1pFUk8pOworfQorCisKK3N0YXRpYyB1MzIgKCogY29uc3QgZm9wX2V4dGZuc1szMl0pKGludCBkZCwgaW50IHVudXNlZCwgaW50IGRtLCB1MzIgZnBzY3IpID0geworCVtGRVhUX1RPX0lEWChGRVhUX0ZDUFkpXQk9IHZmcF9kb3VibGVfZmNweSwKKwlbRkVYVF9UT19JRFgoRkVYVF9GQUJTKV0JPSB2ZnBfZG91YmxlX2ZhYnMsCisJW0ZFWFRfVE9fSURYKEZFWFRfRk5FRyldCT0gdmZwX2RvdWJsZV9mbmVnLAorCVtGRVhUX1RPX0lEWChGRVhUX0ZTUVJUKV0JPSB2ZnBfZG91YmxlX2ZzcXJ0LAorCVtGRVhUX1RPX0lEWChGRVhUX0ZDTVApXQk9IHZmcF9kb3VibGVfZmNtcCwKKwlbRkVYVF9UT19JRFgoRkVYVF9GQ01QRSldCT0gdmZwX2RvdWJsZV9mY21wZSwKKwlbRkVYVF9UT19JRFgoRkVYVF9GQ01QWildCT0gdmZwX2RvdWJsZV9mY21weiwKKwlbRkVYVF9UT19JRFgoRkVYVF9GQ01QRVopXQk9IHZmcF9kb3VibGVfZmNtcGV6LAorCVtGRVhUX1RPX0lEWChGRVhUX0ZDVlQpXQk9IHZmcF9kb3VibGVfZmN2dHMsCisJW0ZFWFRfVE9fSURYKEZFWFRfRlVJVE8pXQk9IHZmcF9kb3VibGVfZnVpdG8sCisJW0ZFWFRfVE9fSURYKEZFWFRfRlNJVE8pXQk9IHZmcF9kb3VibGVfZnNpdG8sCisJW0ZFWFRfVE9fSURYKEZFWFRfRlRPVUkpXQk9IHZmcF9kb3VibGVfZnRvdWksCisJW0ZFWFRfVE9fSURYKEZFWFRfRlRPVUlaKV0JPSB2ZnBfZG91YmxlX2Z0b3VpeiwKKwlbRkVYVF9UT19JRFgoRkVYVF9GVE9TSSldCT0gdmZwX2RvdWJsZV9mdG9zaSwKKwlbRkVYVF9UT19JRFgoRkVYVF9GVE9TSVopXQk9IHZmcF9kb3VibGVfZnRvc2l6LAorfTsKKworCisKKworc3RhdGljIHUzMgordmZwX2RvdWJsZV9mYWRkX25vbm51bWJlcihzdHJ1Y3QgdmZwX2RvdWJsZSAqdmRkLCBzdHJ1Y3QgdmZwX2RvdWJsZSAqdmRuLAorCQkJICBzdHJ1Y3QgdmZwX2RvdWJsZSAqdmRtLCB1MzIgZnBzY3IpCit7CisJc3RydWN0IHZmcF9kb3VibGUgKnZkcDsKKwl1MzIgZXhjZXB0aW9ucyA9IDA7CisJaW50IHRuLCB0bTsKKworCXRuID0gdmZwX2RvdWJsZV90eXBlKHZkbik7CisJdG0gPSB2ZnBfZG91YmxlX3R5cGUodmRtKTsKKworCWlmICh0biAmIHRtICYgVkZQX0lORklOSVRZKSB7CisJCS8qCisJCSAqIFR3byBpbmZpbml0aWVzLiAgQXJlIHRoZXkgZGlmZmVyZW50IHNpZ25zPworCQkgKi8KKwkJaWYgKHZkbi0+c2lnbiBeIHZkbS0+c2lnbikgeworCQkJLyoKKwkJCSAqIGRpZmZlcmVudCBzaWducyAtPiBpbnZhbGlkCisJCQkgKi8KKwkJCWV4Y2VwdGlvbnMgPSBGUFNDUl9JT0M7CisJCQl2ZHAgPSAmdmZwX2RvdWJsZV9kZWZhdWx0X3FuYW47CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogc2FtZSBzaWducyAtPiB2YWxpZAorCQkJICovCisJCQl2ZHAgPSB2ZG47CisJCX0KKwl9IGVsc2UgaWYgKHRuICYgVkZQX0lORklOSVRZICYmIHRtICYgVkZQX05VTUJFUikgeworCQkvKgorCQkgKiBPbmUgaW5maW5pdHkgYW5kIG9uZSBudW1iZXIgLT4gaW5maW5pdHkKKwkJICovCisJCXZkcCA9IHZkbjsKKwl9IGVsc2UgeworCQkvKgorCQkgKiAnbicgaXMgYSBOYU4gb2Ygc29tZSB0eXBlCisJCSAqLworCQlyZXR1cm4gdmZwX3Byb3BhZ2F0ZV9uYW4odmRkLCB2ZG4sIHZkbSwgZnBzY3IpOworCX0KKwkqdmRkID0gKnZkcDsKKwlyZXR1cm4gZXhjZXB0aW9uczsKK30KKworc3RhdGljIHUzMgordmZwX2RvdWJsZV9hZGQoc3RydWN0IHZmcF9kb3VibGUgKnZkZCwgc3RydWN0IHZmcF9kb3VibGUgKnZkbiwKKwkgICAgICAgc3RydWN0IHZmcF9kb3VibGUgKnZkbSwgdTMyIGZwc2NyKQoreworCXUzMiBleHBfZGlmZjsKKwl1NjQgbV9zaWc7CisKKwlpZiAodmRuLT5zaWduaWZpY2FuZCAmICgxVUxMIDw8IDYzKSB8fAorCSAgICB2ZG0tPnNpZ25pZmljYW5kICYgKDFVTEwgPDwgNjMpKSB7CisJCXByX2luZm8oIlZGUDogYmFkIEZQIHZhbHVlcyBpbiAlc1xuIiwgX19mdW5jX18pOworCQl2ZnBfZG91YmxlX2R1bXAoIlZETiIsIHZkbik7CisJCXZmcF9kb3VibGVfZHVtcCgiVkRNIiwgdmRtKTsKKwl9CisKKwkvKgorCSAqIEVuc3VyZSB0aGF0ICduJyBpcyB0aGUgbGFyZ2VzdCBtYWduaXR1ZGUgbnVtYmVyLiAgTm90ZSB0aGF0CisJICogaWYgJ24nIGFuZCAnbScgaGF2ZSBlcXVhbCBleHBvbmVudHMsIHdlIGRvIG5vdCBzd2FwIHRoZW0uCisJICogVGhpcyBlbnN1cmVzIHRoYXQgTmFOIHByb3BhZ2F0aW9uIHdvcmtzIGNvcnJlY3RseS4KKwkgKi8KKwlpZiAodmRuLT5leHBvbmVudCA8IHZkbS0+ZXhwb25lbnQpIHsKKwkJc3RydWN0IHZmcF9kb3VibGUgKnQgPSB2ZG47CisJCXZkbiA9IHZkbTsKKwkJdmRtID0gdDsKKwl9CisKKwkvKgorCSAqIElzICduJyBhbiBpbmZpbml0eSBvciBhIE5hTj8gIE5vdGUgdGhhdCAnbScgbWF5IGJlIGEgbnVtYmVyLAorCSAqIGluZmluaXR5IG9yIGEgTmFOIGhlcmUuCisJICovCisJaWYgKHZkbi0+ZXhwb25lbnQgPT0gMjA0NykKKwkJcmV0dXJuIHZmcF9kb3VibGVfZmFkZF9ub25udW1iZXIodmRkLCB2ZG4sIHZkbSwgZnBzY3IpOworCisJLyoKKwkgKiBXZSBoYXZlIHR3byBwcm9wZXIgbnVtYmVycywgd2hlcmUgJ3ZkbicgaXMgdGhlIGxhcmdlciBtYWduaXR1ZGUuCisJICoKKwkgKiBDb3B5ICduJyB0byAnZCcgYmVmb3JlIGRvaW5nIHRoZSBhcml0aG1ldGljLgorCSAqLworCSp2ZGQgPSAqdmRuOworCisJLyoKKwkgKiBBbGlnbiAnbScgd2l0aCB0aGUgcmVzdWx0LgorCSAqLworCWV4cF9kaWZmID0gdmRuLT5leHBvbmVudCAtIHZkbS0+ZXhwb25lbnQ7CisJbV9zaWcgPSB2ZnBfc2hpZnRyaWdodDY0amFtbWluZyh2ZG0tPnNpZ25pZmljYW5kLCBleHBfZGlmZik7CisKKwkvKgorCSAqIElmIHRoZSBzaWducyBhcmUgZGlmZmVyZW50LCB3ZSBhcmUgcmVhbGx5IHN1YnRyYWN0aW5nLgorCSAqLworCWlmICh2ZG4tPnNpZ24gXiB2ZG0tPnNpZ24pIHsKKwkJbV9zaWcgPSB2ZG4tPnNpZ25pZmljYW5kIC0gbV9zaWc7CisJCWlmICgoczY0KW1fc2lnIDwgMCkgeworCQkJdmRkLT5zaWduID0gdmZwX3NpZ25fbmVnYXRlKHZkZC0+c2lnbik7CisJCQltX3NpZyA9IC1tX3NpZzsKKwkJfQorCX0gZWxzZSB7CisJCW1fc2lnICs9IHZkbi0+c2lnbmlmaWNhbmQ7CisJfQorCXZkZC0+c2lnbmlmaWNhbmQgPSBtX3NpZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyCit2ZnBfZG91YmxlX211bHRpcGx5KHN0cnVjdCB2ZnBfZG91YmxlICp2ZGQsIHN0cnVjdCB2ZnBfZG91YmxlICp2ZG4sCisJCSAgICBzdHJ1Y3QgdmZwX2RvdWJsZSAqdmRtLCB1MzIgZnBzY3IpCit7CisJdmZwX2RvdWJsZV9kdW1wKCJWRE4iLCB2ZG4pOworCXZmcF9kb3VibGVfZHVtcCgiVkRNIiwgdmRtKTsKKworCS8qCisJICogRW5zdXJlIHRoYXQgJ24nIGlzIHRoZSBsYXJnZXN0IG1hZ25pdHVkZSBudW1iZXIuICBOb3RlIHRoYXQKKwkgKiBpZiAnbicgYW5kICdtJyBoYXZlIGVxdWFsIGV4cG9uZW50cywgd2UgZG8gbm90IHN3YXAgdGhlbS4KKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBOYU4gcHJvcGFnYXRpb24gd29ya3MgY29ycmVjdGx5LgorCSAqLworCWlmICh2ZG4tPmV4cG9uZW50IDwgdmRtLT5leHBvbmVudCkgeworCQlzdHJ1Y3QgdmZwX2RvdWJsZSAqdCA9IHZkbjsKKwkJdmRuID0gdmRtOworCQl2ZG0gPSB0OworCQlwcl9kZWJ1ZygiVkZQOiBzd2FwcGluZyBNIDwtPiBOXG4iKTsKKwl9CisKKwl2ZGQtPnNpZ24gPSB2ZG4tPnNpZ24gXiB2ZG0tPnNpZ247CisKKwkvKgorCSAqIElmICduJyBpcyBhbiBpbmZpbml0eSBvciBOYU4sIGhhbmRsZSBpdC4gICdtJyBtYXkgYmUgYW55dGhpbmcuCisJICovCisJaWYgKHZkbi0+ZXhwb25lbnQgPT0gMjA0NykgeworCQlpZiAodmRuLT5zaWduaWZpY2FuZCB8fCAodmRtLT5leHBvbmVudCA9PSAyMDQ3ICYmIHZkbS0+c2lnbmlmaWNhbmQpKQorCQkJcmV0dXJuIHZmcF9wcm9wYWdhdGVfbmFuKHZkZCwgdmRuLCB2ZG0sIGZwc2NyKTsKKwkJaWYgKCh2ZG0tPmV4cG9uZW50IHwgdmRtLT5zaWduaWZpY2FuZCkgPT0gMCkgeworCQkJKnZkZCA9IHZmcF9kb3VibGVfZGVmYXVsdF9xbmFuOworCQkJcmV0dXJuIEZQU0NSX0lPQzsKKwkJfQorCQl2ZGQtPmV4cG9uZW50ID0gdmRuLT5leHBvbmVudDsKKwkJdmRkLT5zaWduaWZpY2FuZCA9IDA7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogSWYgJ20nIGlzIHplcm8sIHRoZSByZXN1bHQgaXMgYWx3YXlzIHplcm8uICBJbiB0aGlzIGNhc2UsCisJICogJ24nIG1heSBiZSB6ZXJvIG9yIGEgbnVtYmVyLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIgd2hpY2guCisJICovCisJaWYgKCh2ZG0tPmV4cG9uZW50IHwgdmRtLT5zaWduaWZpY2FuZCkgPT0gMCkgeworCQl2ZGQtPmV4cG9uZW50ID0gMDsKKwkJdmRkLT5zaWduaWZpY2FuZCA9IDA7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogV2UgYWRkIDIgdG8gdGhlIGRlc3RpbmF0aW9uIGV4cG9uZW50IGZvciB0aGUgc2FtZSByZWFzb24KKwkgKiBhcyB0aGUgYWRkaXRpb24gY2FzZSAtIHRob3VnaCB0aGlzIHRpbWUgd2UgaGF2ZSArMSBmcm9tCisJICogZWFjaCBpbnB1dCBvcGVyYW5kLgorCSAqLworCXZkZC0+ZXhwb25lbnQgPSB2ZG4tPmV4cG9uZW50ICsgdmRtLT5leHBvbmVudCAtIDEwMjMgKyAyOworCXZkZC0+c2lnbmlmaWNhbmQgPSB2ZnBfaGk2NG11bHRpcGx5NjQodmRuLT5zaWduaWZpY2FuZCwgdmRtLT5zaWduaWZpY2FuZCk7CisKKwl2ZnBfZG91YmxlX2R1bXAoIlZERCIsIHZkZCk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTkVHX01VTFRJUExZCSgxIDw8IDApCisjZGVmaW5lIE5FR19TVUJUUkFDVAkoMSA8PCAxKQorCitzdGF0aWMgdTMyCit2ZnBfZG91YmxlX211bHRpcGx5X2FjY3VtdWxhdGUoaW50IGRkLCBpbnQgZG4sIGludCBkbSwgdTMyIGZwc2NyLCB1MzIgbmVnYXRlLCBjaGFyICpmdW5jKQoreworCXN0cnVjdCB2ZnBfZG91YmxlIHZkZCwgdmRwLCB2ZG4sIHZkbTsKKwl1MzIgZXhjZXB0aW9uczsKKworCXZmcF9kb3VibGVfdW5wYWNrKCZ2ZG4sIHZmcF9nZXRfZG91YmxlKGRuKSk7CisJaWYgKHZkbi5leHBvbmVudCA9PSAwICYmIHZkbi5zaWduaWZpY2FuZCkKKwkJdmZwX2RvdWJsZV9ub3JtYWxpc2VfZGVub3JtYWwoJnZkbik7CisKKwl2ZnBfZG91YmxlX3VucGFjaygmdmRtLCB2ZnBfZ2V0X2RvdWJsZShkbSkpOworCWlmICh2ZG0uZXhwb25lbnQgPT0gMCAmJiB2ZG0uc2lnbmlmaWNhbmQpCisJCXZmcF9kb3VibGVfbm9ybWFsaXNlX2Rlbm9ybWFsKCZ2ZG0pOworCisJZXhjZXB0aW9ucyA9IHZmcF9kb3VibGVfbXVsdGlwbHkoJnZkcCwgJnZkbiwgJnZkbSwgZnBzY3IpOworCWlmIChuZWdhdGUgJiBORUdfTVVMVElQTFkpCisJCXZkcC5zaWduID0gdmZwX3NpZ25fbmVnYXRlKHZkcC5zaWduKTsKKworCXZmcF9kb3VibGVfdW5wYWNrKCZ2ZG4sIHZmcF9nZXRfZG91YmxlKGRkKSk7CisJaWYgKG5lZ2F0ZSAmIE5FR19TVUJUUkFDVCkKKwkJdmRuLnNpZ24gPSB2ZnBfc2lnbl9uZWdhdGUodmRuLnNpZ24pOworCisJZXhjZXB0aW9ucyB8PSB2ZnBfZG91YmxlX2FkZCgmdmRkLCAmdmRuLCAmdmRwLCBmcHNjcik7CisKKwlyZXR1cm4gdmZwX2RvdWJsZV9ub3JtYWxpc2Vyb3VuZChkZCwgJnZkZCwgZnBzY3IsIGV4Y2VwdGlvbnMsIGZ1bmMpOworfQorCisvKgorICogU3RhbmRhcmQgb3BlcmF0aW9ucworICovCisKKy8qCisgKiBzZCA9IHNkICsgKHNuICogc20pCisgKi8KK3N0YXRpYyB1MzIgdmZwX2RvdWJsZV9mbWFjKGludCBkZCwgaW50IGRuLCBpbnQgZG0sIHUzMiBmcHNjcikKK3sKKwlyZXR1cm4gdmZwX2RvdWJsZV9tdWx0aXBseV9hY2N1bXVsYXRlKGRkLCBkbiwgZG0sIGZwc2NyLCAwLCAiZm1hYyIpOworfQorCisvKgorICogc2QgPSBzZCAtIChzbiAqIHNtKQorICovCitzdGF0aWMgdTMyIHZmcF9kb3VibGVfZm5tYWMoaW50IGRkLCBpbnQgZG4sIGludCBkbSwgdTMyIGZwc2NyKQoreworCXJldHVybiB2ZnBfZG91YmxlX211bHRpcGx5X2FjY3VtdWxhdGUoZGQsIGRuLCBkbSwgZnBzY3IsIE5FR19NVUxUSVBMWSwgImZubWFjIik7Cit9CisKKy8qCisgKiBzZCA9IC1zZCArIChzbiAqIHNtKQorICovCitzdGF0aWMgdTMyIHZmcF9kb3VibGVfZm1zYyhpbnQgZGQsIGludCBkbiwgaW50IGRtLCB1MzIgZnBzY3IpCit7CisJcmV0dXJuIHZmcF9kb3VibGVfbXVsdGlwbHlfYWNjdW11bGF0ZShkZCwgZG4sIGRtLCBmcHNjciwgTkVHX1NVQlRSQUNULCAiZm1zYyIpOworfQorCisvKgorICogc2QgPSAtc2QgLSAoc24gKiBzbSkKKyAqLworc3RhdGljIHUzMiB2ZnBfZG91YmxlX2ZubXNjKGludCBkZCwgaW50IGRuLCBpbnQgZG0sIHUzMiBmcHNjcikKK3sKKwlyZXR1cm4gdmZwX2RvdWJsZV9tdWx0aXBseV9hY2N1bXVsYXRlKGRkLCBkbiwgZG0sIGZwc2NyLCBORUdfU1VCVFJBQ1QgfCBORUdfTVVMVElQTFksICJmbm1zYyIpOworfQorCisvKgorICogc2QgPSBzbiAqIHNtCisgKi8KK3N0YXRpYyB1MzIgdmZwX2RvdWJsZV9mbXVsKGludCBkZCwgaW50IGRuLCBpbnQgZG0sIHUzMiBmcHNjcikKK3sKKwlzdHJ1Y3QgdmZwX2RvdWJsZSB2ZGQsIHZkbiwgdmRtOworCXUzMiBleGNlcHRpb25zOworCisJdmZwX2RvdWJsZV91bnBhY2soJnZkbiwgdmZwX2dldF9kb3VibGUoZG4pKTsKKwlpZiAodmRuLmV4cG9uZW50ID09IDAgJiYgdmRuLnNpZ25pZmljYW5kKQorCQl2ZnBfZG91YmxlX25vcm1hbGlzZV9kZW5vcm1hbCgmdmRuKTsKKworCXZmcF9kb3VibGVfdW5wYWNrKCZ2ZG0sIHZmcF9nZXRfZG91YmxlKGRtKSk7CisJaWYgKHZkbS5leHBvbmVudCA9PSAwICYmIHZkbS5zaWduaWZpY2FuZCkKKwkJdmZwX2RvdWJsZV9ub3JtYWxpc2VfZGVub3JtYWwoJnZkbSk7CisKKwlleGNlcHRpb25zID0gdmZwX2RvdWJsZV9tdWx0aXBseSgmdmRkLCAmdmRuLCAmdmRtLCBmcHNjcik7CisJcmV0dXJuIHZmcF9kb3VibGVfbm9ybWFsaXNlcm91bmQoZGQsICZ2ZGQsIGZwc2NyLCBleGNlcHRpb25zLCAiZm11bCIpOworfQorCisvKgorICogc2QgPSAtKHNuICogc20pCisgKi8KK3N0YXRpYyB1MzIgdmZwX2RvdWJsZV9mbm11bChpbnQgZGQsIGludCBkbiwgaW50IGRtLCB1MzIgZnBzY3IpCit7CisJc3RydWN0IHZmcF9kb3VibGUgdmRkLCB2ZG4sIHZkbTsKKwl1MzIgZXhjZXB0aW9uczsKKworCXZmcF9kb3VibGVfdW5wYWNrKCZ2ZG4sIHZmcF9nZXRfZG91YmxlKGRuKSk7CisJaWYgKHZkbi5leHBvbmVudCA9PSAwICYmIHZkbi5zaWduaWZpY2FuZCkKKwkJdmZwX2RvdWJsZV9ub3JtYWxpc2VfZGVub3JtYWwoJnZkbik7CisKKwl2ZnBfZG91YmxlX3VucGFjaygmdmRtLCB2ZnBfZ2V0X2RvdWJsZShkbSkpOworCWlmICh2ZG0uZXhwb25lbnQgPT0gMCAmJiB2ZG0uc2lnbmlmaWNhbmQpCisJCXZmcF9kb3VibGVfbm9ybWFsaXNlX2Rlbm9ybWFsKCZ2ZG0pOworCisJZXhjZXB0aW9ucyA9IHZmcF9kb3VibGVfbXVsdGlwbHkoJnZkZCwgJnZkbiwgJnZkbSwgZnBzY3IpOworCXZkZC5zaWduID0gdmZwX3NpZ25fbmVnYXRlKHZkZC5zaWduKTsKKworCXJldHVybiB2ZnBfZG91YmxlX25vcm1hbGlzZXJvdW5kKGRkLCAmdmRkLCBmcHNjciwgZXhjZXB0aW9ucywgImZubXVsIik7Cit9CisKKy8qCisgKiBzZCA9IHNuICsgc20KKyAqLworc3RhdGljIHUzMiB2ZnBfZG91YmxlX2ZhZGQoaW50IGRkLCBpbnQgZG4sIGludCBkbSwgdTMyIGZwc2NyKQoreworCXN0cnVjdCB2ZnBfZG91YmxlIHZkZCwgdmRuLCB2ZG07CisJdTMyIGV4Y2VwdGlvbnM7CisKKwl2ZnBfZG91YmxlX3VucGFjaygmdmRuLCB2ZnBfZ2V0X2RvdWJsZShkbikpOworCWlmICh2ZG4uZXhwb25lbnQgPT0gMCAmJiB2ZG4uc2lnbmlmaWNhbmQpCisJCXZmcF9kb3VibGVfbm9ybWFsaXNlX2Rlbm9ybWFsKCZ2ZG4pOworCisJdmZwX2RvdWJsZV91bnBhY2soJnZkbSwgdmZwX2dldF9kb3VibGUoZG0pKTsKKwlpZiAodmRtLmV4cG9uZW50ID09IDAgJiYgdmRtLnNpZ25pZmljYW5kKQorCQl2ZnBfZG91YmxlX25vcm1hbGlzZV9kZW5vcm1hbCgmdmRtKTsKKworCWV4Y2VwdGlvbnMgPSB2ZnBfZG91YmxlX2FkZCgmdmRkLCAmdmRuLCAmdmRtLCBmcHNjcik7CisKKwlyZXR1cm4gdmZwX2RvdWJsZV9ub3JtYWxpc2Vyb3VuZChkZCwgJnZkZCwgZnBzY3IsIGV4Y2VwdGlvbnMsICJmYWRkIik7Cit9CisKKy8qCisgKiBzZCA9IHNuIC0gc20KKyAqLworc3RhdGljIHUzMiB2ZnBfZG91YmxlX2ZzdWIoaW50IGRkLCBpbnQgZG4sIGludCBkbSwgdTMyIGZwc2NyKQoreworCXN0cnVjdCB2ZnBfZG91YmxlIHZkZCwgdmRuLCB2ZG07CisJdTMyIGV4Y2VwdGlvbnM7CisKKwl2ZnBfZG91YmxlX3VucGFjaygmdmRuLCB2ZnBfZ2V0X2RvdWJsZShkbikpOworCWlmICh2ZG4uZXhwb25lbnQgPT0gMCAmJiB2ZG4uc2lnbmlmaWNhbmQpCisJCXZmcF9kb3VibGVfbm9ybWFsaXNlX2Rlbm9ybWFsKCZ2ZG4pOworCisJdmZwX2RvdWJsZV91bnBhY2soJnZkbSwgdmZwX2dldF9kb3VibGUoZG0pKTsKKwlpZiAodmRtLmV4cG9uZW50ID09IDAgJiYgdmRtLnNpZ25pZmljYW5kKQorCQl2ZnBfZG91YmxlX25vcm1hbGlzZV9kZW5vcm1hbCgmdmRtKTsKKworCS8qCisJICogU3VidHJhY3Rpb24gaXMgbGlrZSBhZGRpdGlvbiwgYnV0IHdpdGggYSBuZWdhdGVkIG9wZXJhbmQuCisJICovCisJdmRtLnNpZ24gPSB2ZnBfc2lnbl9uZWdhdGUodmRtLnNpZ24pOworCisJZXhjZXB0aW9ucyA9IHZmcF9kb3VibGVfYWRkKCZ2ZGQsICZ2ZG4sICZ2ZG0sIGZwc2NyKTsKKworCXJldHVybiB2ZnBfZG91YmxlX25vcm1hbGlzZXJvdW5kKGRkLCAmdmRkLCBmcHNjciwgZXhjZXB0aW9ucywgImZzdWIiKTsKK30KKworLyoKKyAqIHNkID0gc24gLyBzbQorICovCitzdGF0aWMgdTMyIHZmcF9kb3VibGVfZmRpdihpbnQgZGQsIGludCBkbiwgaW50IGRtLCB1MzIgZnBzY3IpCit7CisJc3RydWN0IHZmcF9kb3VibGUgdmRkLCB2ZG4sIHZkbTsKKwl1MzIgZXhjZXB0aW9ucyA9IDA7CisJaW50IHRtLCB0bjsKKworCXZmcF9kb3VibGVfdW5wYWNrKCZ2ZG4sIHZmcF9nZXRfZG91YmxlKGRuKSk7CisJdmZwX2RvdWJsZV91bnBhY2soJnZkbSwgdmZwX2dldF9kb3VibGUoZG0pKTsKKworCXZkZC5zaWduID0gdmRuLnNpZ24gXiB2ZG0uc2lnbjsKKworCXRuID0gdmZwX2RvdWJsZV90eXBlKCZ2ZG4pOworCXRtID0gdmZwX2RvdWJsZV90eXBlKCZ2ZG0pOworCisJLyoKKwkgKiBJcyBuIGEgTkFOPworCSAqLworCWlmICh0biAmIFZGUF9OQU4pCisJCWdvdG8gdmRuX25hbjsKKworCS8qCisJICogSXMgbSBhIE5BTj8KKwkgKi8KKwlpZiAodG0gJiBWRlBfTkFOKQorCQlnb3RvIHZkbV9uYW47CisKKwkvKgorCSAqIElmIG4gYW5kIG0gYXJlIGluZmluaXR5LCB0aGUgcmVzdWx0IGlzIGludmFsaWQKKwkgKiBJZiBuIGFuZCBtIGFyZSB6ZXJvLCB0aGUgcmVzdWx0IGlzIGludmFsaWQKKwkgKi8KKwlpZiAodG0gJiB0biAmIChWRlBfSU5GSU5JVFl8VkZQX1pFUk8pKQorCQlnb3RvIGludmFsaWQ7CisKKwkvKgorCSAqIElmIG4gaXMgaW5maW5pdHksIHRoZSByZXN1bHQgaXMgaW5maW5pdHkKKwkgKi8KKwlpZiAodG4gJiBWRlBfSU5GSU5JVFkpCisJCWdvdG8gaW5maW5pdHk7CisKKwkvKgorCSAqIElmIG0gaXMgemVybywgcmFpc2UgZGl2MCBleGNlcHRpb25zCisJICovCisJaWYgKHRtICYgVkZQX1pFUk8pCisJCWdvdG8gZGl2emVybzsKKworCS8qCisJICogSWYgbSBpcyBpbmZpbml0eSwgb3IgbiBpcyB6ZXJvLCB0aGUgcmVzdWx0IGlzIHplcm8KKwkgKi8KKwlpZiAodG0gJiBWRlBfSU5GSU5JVFkgfHwgdG4gJiBWRlBfWkVSTykKKwkJZ290byB6ZXJvOworCisJaWYgKHRuICYgVkZQX0RFTk9STUFMKQorCQl2ZnBfZG91YmxlX25vcm1hbGlzZV9kZW5vcm1hbCgmdmRuKTsKKwlpZiAodG0gJiBWRlBfREVOT1JNQUwpCisJCXZmcF9kb3VibGVfbm9ybWFsaXNlX2Rlbm9ybWFsKCZ2ZG0pOworCisJLyoKKwkgKiBPaywgd2UgaGF2ZSB0d28gbnVtYmVycywgd2UgY2FuIHBlcmZvcm0gZGl2aXNpb24uCisJICovCisJdmRkLmV4cG9uZW50ID0gdmRuLmV4cG9uZW50IC0gdmRtLmV4cG9uZW50ICsgMTAyMyAtIDE7CisJdmRtLnNpZ25pZmljYW5kIDw8PSAxOworCWlmICh2ZG0uc2lnbmlmaWNhbmQgPD0gKDIgKiB2ZG4uc2lnbmlmaWNhbmQpKSB7CisJCXZkbi5zaWduaWZpY2FuZCA+Pj0gMTsKKwkJdmRkLmV4cG9uZW50Kys7CisJfQorCXZkZC5zaWduaWZpY2FuZCA9IHZmcF9lc3RpbWF0ZV9kaXYxMjh0bzY0KHZkbi5zaWduaWZpY2FuZCwgMCwgdmRtLnNpZ25pZmljYW5kKTsKKwlpZiAoKHZkZC5zaWduaWZpY2FuZCAmIDB4MWZmKSA8PSAyKSB7CisJCXU2NCB0ZXJtaCwgdGVybWwsIHJlbWgsIHJlbWw7CisJCW11bDY0dG8xMjgoJnRlcm1oLCAmdGVybWwsIHZkbS5zaWduaWZpY2FuZCwgdmRkLnNpZ25pZmljYW5kKTsKKwkJc3ViMTI4KCZyZW1oLCAmcmVtbCwgdmRuLnNpZ25pZmljYW5kLCAwLCB0ZXJtaCwgdGVybWwpOworCQl3aGlsZSAoKHM2NClyZW1oIDwgMCkgeworCQkJdmRkLnNpZ25pZmljYW5kIC09IDE7CisJCQlhZGQxMjgoJnJlbWgsICZyZW1sLCByZW1oLCByZW1sLCAwLCB2ZG0uc2lnbmlmaWNhbmQpOworCQl9CisJCXZkZC5zaWduaWZpY2FuZCB8PSAocmVtbCAhPSAwKTsKKwl9CisJcmV0dXJuIHZmcF9kb3VibGVfbm9ybWFsaXNlcm91bmQoZGQsICZ2ZGQsIGZwc2NyLCAwLCAiZmRpdiIpOworCisgdmRuX25hbjoKKwlleGNlcHRpb25zID0gdmZwX3Byb3BhZ2F0ZV9uYW4oJnZkZCwgJnZkbiwgJnZkbSwgZnBzY3IpOworIHBhY2s6CisJdmZwX3B1dF9kb3VibGUoZGQsIHZmcF9kb3VibGVfcGFjaygmdmRkKSk7CisJcmV0dXJuIGV4Y2VwdGlvbnM7CisKKyB2ZG1fbmFuOgorCWV4Y2VwdGlvbnMgPSB2ZnBfcHJvcGFnYXRlX25hbigmdmRkLCAmdmRtLCAmdmRuLCBmcHNjcik7CisJZ290byBwYWNrOworCisgemVybzoKKwl2ZGQuZXhwb25lbnQgPSAwOworCXZkZC5zaWduaWZpY2FuZCA9IDA7CisJZ290byBwYWNrOworCisgZGl2emVybzoKKwlleGNlcHRpb25zID0gRlBTQ1JfRFpDOworIGluZmluaXR5OgorCXZkZC5leHBvbmVudCA9IDIwNDc7CisJdmRkLnNpZ25pZmljYW5kID0gMDsKKwlnb3RvIHBhY2s7CisKKyBpbnZhbGlkOgorCXZmcF9wdXRfZG91YmxlKGRkLCB2ZnBfZG91YmxlX3BhY2soJnZmcF9kb3VibGVfZGVmYXVsdF9xbmFuKSk7CisJcmV0dXJuIEZQU0NSX0lPQzsKK30KKworc3RhdGljIHUzMiAoKiBjb25zdCBmb3BfZm5zWzE2XSkoaW50IGRkLCBpbnQgZG4sIGludCBkbSwgdTMyIGZwc2NyKSA9IHsKKwlbRk9QX1RPX0lEWChGT1BfRk1BQyldCT0gdmZwX2RvdWJsZV9mbWFjLAorCVtGT1BfVE9fSURYKEZPUF9GTk1BQyldCT0gdmZwX2RvdWJsZV9mbm1hYywKKwlbRk9QX1RPX0lEWChGT1BfRk1TQyldCT0gdmZwX2RvdWJsZV9mbXNjLAorCVtGT1BfVE9fSURYKEZPUF9GTk1TQyldCT0gdmZwX2RvdWJsZV9mbm1zYywKKwlbRk9QX1RPX0lEWChGT1BfRk1VTCldCT0gdmZwX2RvdWJsZV9mbXVsLAorCVtGT1BfVE9fSURYKEZPUF9GTk1VTCldCT0gdmZwX2RvdWJsZV9mbm11bCwKKwlbRk9QX1RPX0lEWChGT1BfRkFERCldCT0gdmZwX2RvdWJsZV9mYWRkLAorCVtGT1BfVE9fSURYKEZPUF9GU1VCKV0JPSB2ZnBfZG91YmxlX2ZzdWIsCisJW0ZPUF9UT19JRFgoRk9QX0ZESVYpXQk9IHZmcF9kb3VibGVfZmRpdiwKK307CisKKyNkZWZpbmUgRlJFR19CQU5LKHgpCSgoeCkgJiAweDBjKQorI2RlZmluZSBGUkVHX0lEWCh4KQkoKHgpICYgMykKKwordTMyIHZmcF9kb3VibGVfY3Bkbyh1MzIgaW5zdCwgdTMyIGZwc2NyKQoreworCXUzMiBvcCA9IGluc3QgJiBGT1BfTUFTSzsKKwl1MzIgZXhjZXB0aW9ucyA9IDA7CisJdW5zaWduZWQgaW50IGRkID0gdmZwX2dldF9zZChpbnN0KTsKKwl1bnNpZ25lZCBpbnQgZG4gPSB2ZnBfZ2V0X3NuKGluc3QpOworCXVuc2lnbmVkIGludCBkbSA9IHZmcF9nZXRfc20oaW5zdCk7CisJdW5zaWduZWQgaW50IHZlY2l0ciwgdmVjbGVuLCB2ZWNzdHJpZGU7CisJdTMyICgqZm9wKShpbnQsIGludCwgczMyLCB1MzIpOworCisJdmVjbGVuID0gZnBzY3IgJiBGUFNDUl9MRU5HVEhfTUFTSzsKKwl2ZWNzdHJpZGUgPSAoMSArICgoZnBzY3IgJiBGUFNDUl9TVFJJREVfTUFTSykgPT0gRlBTQ1JfU1RSSURFX01BU0spKSAqIDI7CisKKwkvKgorCSAqIElmIGRlc3RpbmF0aW9uIGJhbmsgaXMgemVybywgdmVjdG9yIGxlbmd0aCBpcyBhbHdheXMgJzEnLgorCSAqIEFSTSBEREkwMTAwRiBDNS4xLjMsIEM1LjMuMi4KKwkgKi8KKwlpZiAoRlJFR19CQU5LKGRkKSA9PSAwKQorCQl2ZWNsZW4gPSAwOworCisJcHJfZGVidWcoIlZGUDogdmVjc3RyaWRlPSV1IHZlY2xlbj0ldVxuIiwgdmVjc3RyaWRlLAorCQkgKHZlY2xlbiA+PiBGUFNDUl9MRU5HVEhfQklUKSArIDEpOworCisJZm9wID0gKG9wID09IEZPUF9FWFQpID8gZm9wX2V4dGZuc1tkbl0gOiBmb3BfZm5zW0ZPUF9UT19JRFgob3ApXTsKKwlpZiAoIWZvcCkKKwkJZ290byBpbnZhbGlkOworCisJZm9yICh2ZWNpdHIgPSAwOyB2ZWNpdHIgPD0gdmVjbGVuOyB2ZWNpdHIgKz0gMSA8PCBGUFNDUl9MRU5HVEhfQklUKSB7CisJCXUzMiBleGNlcHQ7CisKKwkJaWYgKG9wID09IEZPUF9FWFQpCisJCQlwcl9kZWJ1ZygiVkZQOiBpdHIlZCAoZCV1LiV1KSA9IG9wWyV1XSAoZCV1LiV1KVxuIiwKKwkJCQkgdmVjaXRyID4+IEZQU0NSX0xFTkdUSF9CSVQsCisJCQkJIGRkID4+IDEsIGRkICYgMSwgZG4sCisJCQkJIGRtID4+IDEsIGRtICYgMSk7CisJCWVsc2UKKwkJCXByX2RlYnVnKCJWRlA6IGl0ciVkIChkJXUuJXUpID0gKGQldS4ldSkgb3BbJXVdIChkJXUuJXUpXG4iLAorCQkJCSB2ZWNpdHIgPj4gRlBTQ1JfTEVOR1RIX0JJVCwKKwkJCQkgZGQgPj4gMSwgZGQgJiAxLAorCQkJCSBkbiA+PiAxLCBkbiAmIDEsCisJCQkJIEZPUF9UT19JRFgob3ApLAorCQkJCSBkbSA+PiAxLCBkbSAmIDEpOworCisJCWV4Y2VwdCA9IGZvcChkZCwgZG4sIGRtLCBmcHNjcik7CisJCXByX2RlYnVnKCJWRlA6IGl0ciVkOiBleGNlcHRpb25zPSUwOHhcbiIsCisJCQkgdmVjaXRyID4+IEZQU0NSX0xFTkdUSF9CSVQsIGV4Y2VwdCk7CisKKwkJZXhjZXB0aW9ucyB8PSBleGNlcHQ7CisKKwkJLyoKKwkJICogVGhpcyBlbnN1cmVzIHRoYXQgY29tcGFyaXNvbnMgb25seSBvcGVyYXRlIG9uIHNjYWxhcnM7CisJCSAqIGNvbXBhcmlzb25zIGFsd2F5cyByZXR1cm4gd2l0aCBvbmUgRlBTQ1Igc3RhdHVzIGJpdCBzZXQuCisJCSAqLworCQlpZiAoZXhjZXB0ICYgKEZQU0NSX058RlBTQ1JfWnxGUFNDUl9DfEZQU0NSX1YpKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogQ0hFQ0s6IEl0IGFwcGVhcnMgdG8gYmUgdW5kZWZpbmVkIHdoZXRoZXIgd2Ugc3RvcCB3aGVuCisJCSAqIHdlIGVuY291bnRlciBhbiBleGNlcHRpb24uICBXZSBjb250aW51ZS4KKwkJICovCisKKwkJZGQgPSBGUkVHX0JBTksoZGQpICsgKChGUkVHX0lEWChkZCkgKyB2ZWNzdHJpZGUpICYgNik7CisJCWRuID0gRlJFR19CQU5LKGRuKSArICgoRlJFR19JRFgoZG4pICsgdmVjc3RyaWRlKSAmIDYpOworCQlpZiAoRlJFR19CQU5LKGRtKSAhPSAwKQorCQkJZG0gPSBGUkVHX0JBTksoZG0pICsgKChGUkVHX0lEWChkbSkgKyB2ZWNzdHJpZGUpICYgNik7CisJfQorCXJldHVybiBleGNlcHRpb25zOworCisgaW52YWxpZDoKKwlyZXR1cm4gfjA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwaHcuUyBiL2FyY2gvYXJtL3ZmcC92ZnBody5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNGNhMTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS92ZnAvdmZwaHcuUwpAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS92ZnAvdmZwaHcuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQVJNIExpbWl0ZWQuCisgKiAgV3JpdHRlbiBieSBEZWVwIEJsdWUgU29sdXRpb25zIExpbWl0ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIGNvZGUgaXMgY2FsbGVkIGZyb20gdGhlIGtlcm5lbCdzIHVuZGVmaW5lZCBpbnN0cnVjdGlvbiB0cmFwLgorICogcjkgaG9sZHMgdGhlIHJldHVybiBhZGRyZXNzIGZvciBzdWNjZXNzZnVsIGhhbmRsaW5nLgorICogbHIgaG9sZHMgdGhlIHJldHVybiBhZGRyZXNzIGZvciB1bnJlY29nbmlzZWQgaW5zdHJ1Y3Rpb25zLgorICogcjEwIHBvaW50cyBhdCB0aGUgc3RhcnQgb2YgdGhlIHByaXZhdGUgRlAgd29ya3NwYWNlIGluIHRoZSB0aHJlYWQgc3RydWN0dXJlCisgKiBzcCBwb2ludHMgdG8gYSBzdHJ1Y3QgcHRfcmVncyAoYXMgZGVmaW5lZCBpbiBpbmNsdWRlL2FzbS9wcm9jL3B0cmFjZS5oKQorICovCisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL3ZmcG1hY3Jvcy5oPgorI2luY2x1ZGUgIi4uL2tlcm5lbC9lbnRyeS1oZWFkZXIuUyIKKworCS5tYWNybwlEQkdTVFIsIHN0cgorI2lmZGVmIERFQlVHCisJc3RtZmQJc3AhLCB7cjAtcjMsIGlwLCBscn0KKwlhZGQJcjAsIHBjLCAjNAorCWJsCXByaW50aworCWIJMWYKKwkuYXNjaXogICI8Nz5WRlA6IFxzdHJcbiIKKwkuYmFsaWduIDQKKzE6CWxkbWZkCXNwISwge3IwLXIzLCBpcCwgbHJ9CisjZW5kaWYKKwkuZW5kbQorCisJLm1hY3JvICBEQkdTVFIxLCBzdHIsIGFyZworI2lmZGVmIERFQlVHCisJc3RtZmQJc3AhLCB7cjAtcjMsIGlwLCBscn0KKwltb3YJcjEsIFxhcmcKKwlhZGQJcjAsIHBjLCAjNAorCWJsCXByaW50aworCWIJMWYKKwkuYXNjaXogICI8Nz5WRlA6IFxzdHJcbiIKKwkuYmFsaWduIDQKKzE6CWxkbWZkCXNwISwge3IwLXIzLCBpcCwgbHJ9CisjZW5kaWYKKwkuZW5kbQorCisJLm1hY3JvICBEQkdTVFIzLCBzdHIsIGFyZzEsIGFyZzIsIGFyZzMKKyNpZmRlZiBERUJVRworCXN0bWZkCXNwISwge3IwLXIzLCBpcCwgbHJ9CisJbW92CXIzLCBcYXJnMworCW1vdglyMiwgXGFyZzIKKwltb3YJcjEsIFxhcmcxCisJYWRkCXIwLCBwYywgIzQKKwlibAlwcmludGsKKwliCTFmCisJLmFzY2l6ICAiPDc+VkZQOiBcc3RyXG4iCisJLmJhbGlnbiA0CisxOglsZG1mZAlzcCEsIHtyMC1yMywgaXAsIGxyfQorI2VuZGlmCisJLmVuZG0KKworCitAIFZGUCBoYXJkd2FyZSBzdXBwb3J0IGVudHJ5IHBvaW50LgorQAorQCAgcjAgID0gZmF1bHRlZCBpbnN0cnVjdGlvbgorQCAgcjIgID0gZmF1bHRlZCBQQys0CitAICByOSAgPSBzdWNjZXNzZnVsIHJldHVybgorQCAgcjEwID0gdmZwX3N0YXRlIHVuaW9uCitAICBsciAgPSBmYWlsdXJlIHJldHVybgorCisJLmdsb2JsCXZmcF9zdXBwb3J0X2VudHJ5Cit2ZnBfc3VwcG9ydF9lbnRyeToKKwlEQkdTVFIzCSJpbnN0ciAlMDh4IHBjICUwOHggc3RhdGUgJXAiLCByMCwgcjIsIHIxMAorCisJVkZQRk1SWAlyMSwgRlBFWEMJCUAgSXMgdGhlIFZGUCBlbmFibGVkPworCURCR1NUUjEJImZwZXhjICUwOHgiLCByMQorCXRzdAlyMSwgI0ZQRVhDX0VOQUJMRQorCWJuZQlsb29rX2Zvcl9WRlBfZXhjZXB0aW9ucwlAIFZGUCBpcyBhbHJlYWR5IGVuYWJsZWQKKworCURCR1NUUjEgImVuYWJsZSAleCIsIHIxMAorCWxkcglyMywgbGFzdF9WRlBfY29udGV4dF9hZGRyZXNzCisJb3JyCXIxLCByMSwgI0ZQRVhDX0VOQUJMRQlAIHVzZXIgRlBFWEMgaGFzIHRoZSBlbmFibGUgYml0IHNldAorCWxkcglyNCwgW3IzXQkJQCBsYXN0X1ZGUF9jb250ZXh0IHBvaW50ZXIKKwliaWMJcjUsIHIxLCAjRlBFWENfRVhDRVBUSU9OIEAgbWFrZSBzdXJlIGV4Y2VwdGlvbnMgYXJlIGRpc2FibGVkCisJY21wCXI0LCByMTAKKwliZXEJY2hlY2tfZm9yX2V4Y2VwdGlvbglAIHdlIGFyZSByZXR1cm5pbmcgdG8gdGhlIHNhbWUKKwkJCQkJQCBwcm9jZXNzLCBzbyB0aGUgcmVnaXN0ZXJzIGFyZQorCQkJCQlAIHN0aWxsIHRoZXJlLiAgSW4gdGhpcyBjYXNlLCB3ZSBkbworCQkJCQlAIG5vdCB3YW50IHRvIGRyb3AgYSBwZW5kaW5nIGV4Y2VwdGlvbi4KKworCVZGUEZNWFIJRlBFWEMsIHI1CQlAIGVuYWJsZSBWRlAsIGRpc2FibGUgYW55IHBlbmRpbmcKKwkJCQkJQCBleGNlcHRpb25zLCBzbyB3ZSBjYW4gZ2V0IGF0IHRoZQorCQkJCQlAIHJlc3Qgb2YgaXQKKworCUAgU2F2ZSBvdXQgdGhlIGN1cnJlbnQgcmVnaXN0ZXJzIHRvIHRoZSBvbGQgdGhyZWFkIHN0YXRlCisKKwlEQkdTVFIxCSJzYXZlIG9sZCBzdGF0ZSAlcCIsIHI0CisJY21wCXI0LCAjMAorCWJlcQlub19vbGRfVkZQX3Byb2Nlc3MKKwlWRlBGTVJYCXI1LCBGUFNDUgkJQCBjdXJyZW50IHN0YXR1cworCVZGUEZNUlgJcjYsIEZQSU5TVAkJQCBGUElOU1QgKGFsd2F5cyB0aGVyZSwgcmV2MCBvbndhcmRzKQorCXRzdAlyMSwgI0ZQRVhDX0ZQVjIJCUAgaXMgdGhlcmUgYW4gRlBJTlNUMiB0byByZWFkPworCVZGUEZNUlgJcjgsIEZQSU5TVDIsIE5FCQlAIEZQSU5TVDIgaWYgbmVlZGVkIC0gYXZvaWRzIHJlYWRpbmcKKwkJCQkJQCBub25leGlzdGFudCByZWcgb24gcmV2MAorCVZGUEZTVE1JQSByNCAJCQlAIHNhdmUgdGhlIHdvcmtpbmcgcmVnaXN0ZXJzCisJYWRkCXI0LCByNCwgIzgqMTYrNAorCXN0bWlhCXI0LCB7cjEsIHI1LCByNiwgcjh9CUAgc2F2ZSBGUEVYQywgRlBTQ1IsIEZQSU5TVCwgRlBJTlNUMgorCQkJCQlAIGFuZCBwb2ludCByNCBhdCB0aGUgd29yZCBhdCB0aGUKKwkJCQkJQCBzdGFydCBvZiB0aGUgcmVnaXN0ZXIgZHVtcAorCitub19vbGRfVkZQX3Byb2Nlc3M6CisJREJHU1RSMQkibG9hZCBzdGF0ZSAlcCIsIHIxMAorCXN0cglyMTAsIFtyM10JCUAgdXBkYXRlIHRoZSBsYXN0X1ZGUF9jb250ZXh0IHBvaW50ZXIKKwkJCQkJQCBMb2FkIHRoZSBzYXZlZCBzdGF0ZSBiYWNrIGludG8gdGhlIFZGUAorCWFkZAlyNCwgcjEwLCAjOCoxNis0CisJbGRtaWEJcjQsIHtyMSwgcjUsIHI2LCByOH0JQCBsb2FkIEZQRVhDLCBGUFNDUiwgRlBJTlNULCBGUElOU1QyCisJVkZQRkxETUlBIHIxMAkgCQlAIHJlbG9hZCB0aGUgd29ya2luZyByZWdpc3RlcnMgd2hpbGUKKwkJCQkJQCBGUEVYQyBpcyBpbiBhIHNhZmUgc3RhdGUKKwl0c3QJcjEsICNGUEVYQ19GUFYyCQlAIGlzIHRoZXJlIGFuIEZQSU5TVDIgdG8gd3JpdGU/CisJVkZQRk1YUglGUElOU1QyLCByOCwgTkUJCUAgRlBJTlNUMiBpZiBuZWVkZWQgLSBhdm9pZHMgd3JpdGluZworCQkJCQlAIG5vbmV4aXN0YW50IHJlZyBvbiByZXYwCisJVkZQRk1YUglGUElOU1QsIHI2CisJVkZQRk1YUglGUFNDUiwgcjUJCUAgcmVzdG9yZSBzdGF0dXMKKworY2hlY2tfZm9yX2V4Y2VwdGlvbjoKKwl0c3QJcjEsICNGUEVYQ19FWENFUFRJT04KKwlibmUJcHJvY2Vzc19leGNlcHRpb24JQCBtaWdodCBhcyB3ZWxsIGhhbmRsZSB0aGUgcGVuZGluZworCQkJCQlAIGV4Y2VwdGlvbiBiZWZvcmUgcmV0cnlpbmcgYnJhbmNoCisJCQkJCUAgb3V0IGJlZm9yZSBzZXR0aW5nIGFuIEZQRVhDIHRoYXQKKwkJCQkJQCBzdG9wcyB1cyByZWFkaW5nIHN0dWZmCisJVkZQRk1YUglGUEVYQywgcjEJCUAgcmVzdG9yZSBGUEVYQyBsYXN0CisJc3ViCXIyLCByMiwgIzQKKwlzdHIJcjIsIFtzcCwgI1NfUENdCQlAIHJldHJ5IHRoZSBpbnN0cnVjdGlvbgorCW1vdglwYywgcjkJCQlAIHdlIHRoaW5rIHdlIGhhdmUgaGFuZGxlZCB0aGluZ3MKKworCitsb29rX2Zvcl9WRlBfZXhjZXB0aW9uczoKKwl0c3QJcjEsICNGUEVYQ19FWENFUFRJT04KKwlibmUJcHJvY2Vzc19leGNlcHRpb24KKwlWRlBGTVJYCXI1LCBGUFNDUgorCXRzdAlyNSwgI0ZQU0NSX0lYRQkJQCBJWEUgZG9lc24ndCBzZXQgRlBFWENfRVhDRVBUSU9OICEKKwlibmUJcHJvY2Vzc19leGNlcHRpb24KKworCUAgRmFsbCBpbnRvIGhhbmQgb24gdG8gbmV4dCBoYW5kbGVyIC0gYXBwcm9wcmlhdGUgY29wcm9jIGluc3RyCisJQCBub3QgcmVjb2duaXNlZCBieSBWRlAKKworCURCR1NUUgkibm90IFZGUCIKKwltb3YJcGMsIGxyCisKK3Byb2Nlc3NfZXhjZXB0aW9uOgorCURCR1NUUgkiYm91bmNlIgorCXN1YglyMiwgcjIsICM0CisJc3RyCXIyLCBbc3AsICNTX1BDXQkJQCByZXRyeSB0aGUgaW5zdHJ1Y3Rpb24gb24gZXhpdCBmcm9tCisJCQkJCUAgdGhlIGltcHJlY2lzZSBleGNlcHRpb24gaGFuZGxpbmcgaW4KKwkJCQkJQCB0aGUgc3VwcG9ydCBjb2RlCisJbW92CXIyLCBzcAkJCUAgbm90aGluZyBzdGFja2VkIC0gcmVnZHVtcCBpcyBhdCBUT1MKKwltb3YJbHIsIHI5CQkJQCBzZXR1cCBmb3IgYSByZXR1cm4gdG8gdGhlIHVzZXIgY29kZS4KKworCUAgTm93IGNhbGwgdGhlIEMgY29kZSB0byBwYWNrYWdlIHVwIHRoZSBib3VuY2UgdG8gdGhlIHN1cHBvcnQgY29kZQorCUAgICByMCBob2xkcyB0aGUgdHJpZ2dlciBpbnN0cnVjdGlvbgorCUAgICByMSBob2xkcyB0aGUgRlBFWEMgdmFsdWUKKwlAICAgcjIgcG9pbnRlciB0byByZWdpc3RlciBkdW1wCisJYglWRlA5X2JvdW5jZQkJQCB3ZSBoYXZlIGhhbmRsZWQgdGhpcyAtIHRoZSBzdXBwb3J0CisJCQkJCUAgY29kZSB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZgorCQkJCQlAIHJlcXVpcmVkLiBJZiBub3QsIHRoZSB1c2VyIGNvZGUgd2lsbAorCQkJCQlAIHJldHJ5IHRoZSBmYXVsdGVkIGluc3RydWN0aW9uCisKK2xhc3RfVkZQX2NvbnRleHRfYWRkcmVzczoKKwkud29yZAlsYXN0X1ZGUF9jb250ZXh0CisKKwkuZ2xvYmwJdmZwX2dldF9mbG9hdAordmZwX2dldF9mbG9hdDoKKwlhZGQJcGMsIHBjLCByMCwgbHNsICMzCisJbW92CXIwLCByMAorCS5pcnAJZHIsMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQorCW1yYwlwMTAsIDAsIHIwLCBjXGRyLCBjMCwgMAlAIGZtcnMJcjAsIHMwCisJbW92CXBjLCBscgorCW1yYwlwMTAsIDAsIHIwLCBjXGRyLCBjMCwgNAlAIGZtcnMJcjAsIHMxCisJbW92CXBjLCBscgorCS5lbmRyCisKKwkuZ2xvYmwJdmZwX3B1dF9mbG9hdAordmZwX3B1dF9mbG9hdDoKKwlhZGQJcGMsIHBjLCByMCwgbHNsICMzCisJbW92CXIwLCByMAorCS5pcnAJZHIsMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQorCW1jcglwMTAsIDAsIHIxLCBjXGRyLCBjMCwgMAlAIGZtc3IJcjAsIHMwCisJbW92CXBjLCBscgorCW1jcglwMTAsIDAsIHIxLCBjXGRyLCBjMCwgNAlAIGZtc3IJcjAsIHMxCisJbW92CXBjLCBscgorCS5lbmRyCisKKwkuZ2xvYmwJdmZwX2dldF9kb3VibGUKK3ZmcF9nZXRfZG91YmxlOgorCW1vdglyMCwgcjAsIGxzciAjMQorCWFkZAlwYywgcGMsIHIwLCBsc2wgIzMKKwltb3YJcjAsIHIwCisJLmlycAlkciwwLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1CisJbXJyYwlwMTAsIDEsIHIwLCByMSwgY1xkcglAIGZtcnJkCXIwLCByMSwgZFxkcgorCW1vdglwYywgbHIKKwkuZW5kcgorCisJQCB2aXJ0dWFsIHJlZ2lzdGVyIDE2IGZvciBjb21wYXJlIHdpdGggemVybworCW1vdglyMCwgIzAKKwltb3YJcjEsICMwCisJbW92CXBjLCBscgorCisJLmdsb2JsCXZmcF9wdXRfZG91YmxlCit2ZnBfcHV0X2RvdWJsZToKKwltb3YJcjAsIHIwLCBsc3IgIzEKKwlhZGQJcGMsIHBjLCByMCwgbHNsICMzCisJbW92CXIwLCByMAorCS5pcnAJZHIsMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQorCW1jcnIJcDEwLCAxLCByMSwgcjIsIGNcZHIJQCBmbXJyZAlyMSwgcjIsIGRcZHIKKwltb3YJcGMsIGxyCisJLmVuZHIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBpbnN0ci5oIGIvYXJjaC9hcm0vdmZwL3ZmcGluc3RyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM4MTlhZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBpbnN0ci5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vdmZwL3ZmcGluc3RyLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEFSTSBMaW1pdGVkLgorICogIFdyaXR0ZW4gYnkgRGVlcCBCbHVlIFNvbHV0aW9ucyBMaW1pdGVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVkZQIGluc3RydWN0aW9uIG1hc2tzLgorICovCisjZGVmaW5lIElOU1RfQ1BSVERPKGluc3QpCSgoKGluc3QpICYgMHgwZjAwMDAwMCkgPT0gMHgwZTAwMDAwMCkKKyNkZWZpbmUgSU5TVF9DUFJUKGluc3QpCQkoKGluc3QpICYgKDEgPDwgNCkpCisjZGVmaW5lIElOU1RfQ1BSVF9MKGluc3QpCSgoaW5zdCkgJiAoMSA8PCAyMCkpCisjZGVmaW5lIElOU1RfQ1BSVF9SZChpbnN0KQkoKChpbnN0KSAmICgxNSA8PCAxMikpID4+IDEyKQorI2RlZmluZSBJTlNUX0NQUlRfT1AoaW5zdCkJKCgoaW5zdCkgPj4gMjEpICYgNykKKyNkZWZpbmUgSU5TVF9DUE5VTShpbnN0KQkoKGluc3QpICYgMHhmMDApCisjZGVmaW5lIENQTlVNKGNwKQkJKChjcCkgPDwgOCkKKworI2RlZmluZSBGT1BfTUFTSwkoMHgwMGIwMDA0MCkKKyNkZWZpbmUgRk9QX0ZNQUMJKDB4MDAwMDAwMDApCisjZGVmaW5lIEZPUF9GTk1BQwkoMHgwMDAwMDA0MCkKKyNkZWZpbmUgRk9QX0ZNU0MJKDB4MDAxMDAwMDApCisjZGVmaW5lIEZPUF9GTk1TQwkoMHgwMDEwMDA0MCkKKyNkZWZpbmUgRk9QX0ZNVUwJKDB4MDAyMDAwMDApCisjZGVmaW5lIEZPUF9GTk1VTAkoMHgwMDIwMDA0MCkKKyNkZWZpbmUgRk9QX0ZBREQJKDB4MDAzMDAwMDApCisjZGVmaW5lIEZPUF9GU1VCCSgweDAwMzAwMDQwKQorI2RlZmluZSBGT1BfRkRJVgkoMHgwMDgwMDAwMCkKKyNkZWZpbmUgRk9QX0VYVAkJKDB4MDBiMDAwNDApCisKKyNkZWZpbmUgRk9QX1RPX0lEWChpbnN0KQkoKGluc3QgJiAweDAwYjAwMDAwKSA+PiAyMCB8IChpbnN0ICYgKDEgPDwgNikpID4+IDQpCisKKyNkZWZpbmUgRkVYVF9NQVNLCSgweDAwMGYwMDgwKQorI2RlZmluZSBGRVhUX0ZDUFkJKDB4MDAwMDAwMDApCisjZGVmaW5lIEZFWFRfRkFCUwkoMHgwMDAwMDA4MCkKKyNkZWZpbmUgRkVYVF9GTkVHCSgweDAwMDEwMDAwKQorI2RlZmluZSBGRVhUX0ZTUVJUCSgweDAwMDEwMDgwKQorI2RlZmluZSBGRVhUX0ZDTVAJKDB4MDAwNDAwMDApCisjZGVmaW5lIEZFWFRfRkNNUEUJKDB4MDAwNDAwODApCisjZGVmaW5lIEZFWFRfRkNNUFoJKDB4MDAwNTAwMDApCisjZGVmaW5lIEZFWFRfRkNNUEVaCSgweDAwMDUwMDgwKQorI2RlZmluZSBGRVhUX0ZDVlQJKDB4MDAwNzAwODApCisjZGVmaW5lIEZFWFRfRlVJVE8JKDB4MDAwODAwMDApCisjZGVmaW5lIEZFWFRfRlNJVE8JKDB4MDAwODAwODApCisjZGVmaW5lIEZFWFRfRlRPVUkJKDB4MDAwYzAwMDApCisjZGVmaW5lIEZFWFRfRlRPVUlaCSgweDAwMGMwMDgwKQorI2RlZmluZSBGRVhUX0ZUT1NJCSgweDAwMGQwMDAwKQorI2RlZmluZSBGRVhUX0ZUT1NJWgkoMHgwMDBkMDA4MCkKKworI2RlZmluZSBGRVhUX1RPX0lEWChpbnN0KQkoKGluc3QgJiAweDAwMGYwMDAwKSA+PiAxNSB8IChpbnN0ICYgKDEgPDwgNykpID4+IDcpCisKKyNkZWZpbmUgdmZwX2dldF9zZChpbnN0KQkoKGluc3QgJiAweDAwMDBmMDAwKSA+PiAxMSB8IChpbnN0ICYgKDEgPDwgMjIpKSA+PiAyMikKKyNkZWZpbmUgdmZwX2dldF9kZChpbnN0KQkoKGluc3QgJiAweDAwMDBmMDAwKSA+PiAxMikKKyNkZWZpbmUgdmZwX2dldF9zbShpbnN0KQkoKGluc3QgJiAweDAwMDAwMDBmKSA8PCAxIHwgKGluc3QgJiAoMSA8PCA1KSkgPj4gNSkKKyNkZWZpbmUgdmZwX2dldF9kbShpbnN0KQkoKGluc3QgJiAweDAwMDAwMDBmKSkKKyNkZWZpbmUgdmZwX2dldF9zbihpbnN0KQkoKGluc3QgJiAweDAwMGYwMDAwKSA+PiAxNSB8IChpbnN0ICYgKDEgPDwgNykpID4+IDcpCisjZGVmaW5lIHZmcF9nZXRfZG4oaW5zdCkJKChpbnN0ICYgMHgwMDBmMDAwMCkgPj4gMTYpCisKKyNkZWZpbmUgdmZwX3NpbmdsZShpbnN0KQkoKChpbnN0KSAmIDB4MDAwMGYwMCkgPT0gMHhhMDApCisKKyNkZWZpbmUgRlBTQ1JfTgkoMSA8PCAzMSkKKyNkZWZpbmUgRlBTQ1JfWgkoMSA8PCAzMCkKKyNkZWZpbmUgRlBTQ1JfQyAoMSA8PCAyOSkKKyNkZWZpbmUgRlBTQ1JfVgkoMSA8PCAyOCkKKworLyoKKyAqIFNpbmNlIHdlIGFyZW4ndCBidWlsZGluZyB3aXRoIC1tZnB1PXZmcCwgd2UgbmVlZCB0byBjb2RlCisgKiB0aGVzZSBpbnN0cnVjdGlvbnMgdXNpbmcgdGhlaXIgTVJDL01DUiBlcXVpdmFsZW50cy4KKyAqLworI2RlZmluZSB2ZnByZWcoX3ZmcF8pICNfdmZwXworCisjZGVmaW5lIGZtcngoX3ZmcF8pICh7CQkJXAorCXUzMiBfX3Y7CQkJXAorCWFzbSgibXJjJT8gcDEwLCA3LCAlMCwgIiB2ZnByZWcoX3ZmcF8pICIsIGNyMCwgMCBAIGZtcngJJTAsICIgI192ZnBfCVwKKwkgICAgOiAiPXIiIChfX3YpKTsJCVwKKwlfX3Y7CQkJCVwKKyB9KQorCisjZGVmaW5lIGZteHIoX3ZmcF8sX3Zhcl8pCQlcCisJYXNtKCJtY3IlPyBwMTAsIDcsICUwLCAiIHZmcHJlZyhfdmZwXykgIiwgY3IwLCAwIEAgZm14cgkiICNfdmZwXyAiLCAlMCIJXAorCSAgIDogOiAiciIgKF92YXJfKSkKKwordTMyIHZmcF9zaW5nbGVfY3Bkbyh1MzIgaW5zdCwgdTMyIGZwc2NyKTsKK3UzMiB2ZnBfc2luZ2xlX2NwcnQodTMyIGluc3QsIHUzMiBmcHNjciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCit1MzIgdmZwX2RvdWJsZV9jcGRvKHUzMiBpbnN0LCB1MzIgZnBzY3IpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jIGIvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZWVkZDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBBUk0gTGltaXRlZC4KKyAqICBXcml0dGVuIGJ5IERlZXAgQmx1ZSBTb2x1dGlvbnMgTGltaXRlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vdmZwLmg+CisKKyNpbmNsdWRlICJ2ZnBpbnN0ci5oIgorI2luY2x1ZGUgInZmcC5oIgorCisvKgorICogT3VyIHVuZGVmIGhhbmRsZXJzIChpbiBlbnRyeS5TKQorICovCit2b2lkIHZmcF90ZXN0aW5nX2VudHJ5KHZvaWQpOwordm9pZCB2ZnBfc3VwcG9ydF9lbnRyeSh2b2lkKTsKKwordm9pZCAoKnZmcF92ZWN0b3IpKHZvaWQpID0gdmZwX3Rlc3RpbmdfZW50cnk7Cit1bmlvbiB2ZnBfc3RhdGUgKmxhc3RfVkZQX2NvbnRleHQ7CisKKy8qCisgKiBEdWFsLXVzZSB2YXJpYWJsZS4KKyAqIFVzZWQgaW4gc3RhcnR1cDogc2V0IHRvIG5vbi16ZXJvIGlmIFZGUCBjaGVja3MgZmFpbAorICogQWZ0ZXIgc3RhcnR1cCwgaG9sZHMgVkZQIGFyY2hpdGVjdHVyZQorICovCit1bnNpZ25lZCBpbnQgVkZQX2FyY2g7CisKKy8qCisgKiBQZXItdGhyZWFkIFZGUCBpbml0aWFsaXNhdGlvbi4KKyAqLwordm9pZCB2ZnBfZmx1c2hfdGhyZWFkKHVuaW9uIHZmcF9zdGF0ZSAqdmZwKQoreworCW1lbXNldCh2ZnAsIDAsIHNpemVvZih1bmlvbiB2ZnBfc3RhdGUpKTsKKworCXZmcC0+aGFyZC5mcGV4YyA9IEZQRVhDX0VOQUJMRTsKKwl2ZnAtPmhhcmQuZnBzY3IgPSBGUFNDUl9ST1VORF9ORUFSRVNUOworCisJLyoKKwkgKiBEaXNhYmxlIFZGUCB0byBlbnN1cmUgd2UgaW5pdGlhbGlzZSBpdCBmaXJzdC4KKwkgKi8KKwlmbXhyKEZQRVhDLCBmbXJ4KEZQRVhDKSAmIH5GUEVYQ19FTkFCTEUpOworCisJLyoKKwkgKiBFbnN1cmUgd2UgZG9uJ3QgdHJ5IHRvIG92ZXJ3cml0ZSBvdXIgbmV3bHkgaW5pdGlhbGlzZWQKKwkgKiBzdGF0ZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgZmF1bHQuCisJICovCisJaWYgKGxhc3RfVkZQX2NvbnRleHQgPT0gdmZwKQorCQlsYXN0X1ZGUF9jb250ZXh0ID0gTlVMTDsKK30KKworLyoKKyAqIFBlci10aHJlYWQgVkZQIGNsZWFudXAuCisgKi8KK3ZvaWQgdmZwX3JlbGVhc2VfdGhyZWFkKHVuaW9uIHZmcF9zdGF0ZSAqdmZwKQoreworCWlmIChsYXN0X1ZGUF9jb250ZXh0ID09IHZmcCkKKwkJbGFzdF9WRlBfY29udGV4dCA9IE5VTEw7Cit9CisKKy8qCisgKiBSYWlzZSBhIFNJR0ZQRSBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KKyAqIHNpY29kZSBkZXNjcmliZXMgdGhlIHNpZ25hbCBiZWluZyByYWlzZWQuCisgKi8KK3ZvaWQgdmZwX3JhaXNlX3NpZ2ZwZSh1bnNpZ25lZCBpbnQgc2ljb2RlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzaWdpbmZvX3QgaW5mbzsKKworCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKKworCWluZm8uc2lfc2lnbm8gPSBTSUdGUEU7CisJaW5mby5zaV9jb2RlID0gc2ljb2RlOworCWluZm8uc2lfYWRkciA9ICh2b2lkICopKGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgLSA0KTsKKworCS8qCisJICogVGhpcyBpcyB0aGUgc2FtZSBhcyBOV0ZQRSwgYmVjYXVzZSBpdCdzIG5vdCBjbGVhciB3aGF0CisJICogdGhpcyBpcyB1c2VkIGZvcgorCSAqLworCWN1cnJlbnQtPnRocmVhZC5lcnJvcl9jb2RlID0gMDsKKwljdXJyZW50LT50aHJlYWQudHJhcF9ubyA9IDY7CisKKwlmb3JjZV9zaWdfaW5mbyhTSUdGUEUsICZpbmZvLCBjdXJyZW50KTsKK30KKworc3RhdGljIHZvaWQgdmZwX3BhbmljKGNoYXIgKnJlYXNvbikKK3sKKwlpbnQgaTsKKworCXByaW50ayhLRVJOX0VSUiAiVkZQOiBFcnJvcjogJXNcbiIsIHJlYXNvbik7CisJcHJpbnRrKEtFUk5fRVJSICJWRlA6IEVYQyAweCUwOHggU0NSIDB4JTA4eCBJTlNUIDB4JTA4eFxuIiwKKwkJZm1yeChGUEVYQyksIGZtcngoRlBTQ1IpLCBmbXJ4KEZQSU5TVCkpOworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSArPSAyKQorCQlwcmludGsoS0VSTl9FUlIgIlZGUDogcyUydTogMHglMDh4IHMlMnU6IDB4JTA4eFxuIiwKKwkJICAgICAgIGksIHZmcF9nZXRfZmxvYXQoaSksIGkrMSwgdmZwX2dldF9mbG9hdChpKzEpKTsKK30KKworLyoKKyAqIFByb2Nlc3MgYml0bWFzayBvZiBleGNlcHRpb24gY29uZGl0aW9ucy4KKyAqLworc3RhdGljIHZvaWQgdmZwX3JhaXNlX2V4Y2VwdGlvbnModTMyIGV4Y2VwdGlvbnMsIHUzMiBpbnN0LCB1MzIgZnBzY3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBzaV9jb2RlID0gMDsKKworCXByX2RlYnVnKCJWRlA6IHJhaXNpbmcgZXhjZXB0aW9ucyAlMDh4XG4iLCBleGNlcHRpb25zKTsKKworCWlmIChleGNlcHRpb25zID09ICh1MzIpLTEpIHsKKwkJdmZwX3BhbmljKCJ1bmhhbmRsZWQgYm91bmNlIik7CisJCXZmcF9yYWlzZV9zaWdmcGUoMCwgcmVncyk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIElmIGFueSBvZiB0aGUgc3RhdHVzIGZsYWdzIGFyZSBzZXQsIHVwZGF0ZSB0aGUgRlBTQ1IuCisJICogQ29tcGFyaXNvbiBpbnN0cnVjdGlvbnMgYWx3YXlzIHJldHVybiBhdCBsZWFzdCBvbmUgb2YKKwkgKiB0aGVzZSBmbGFncyBzZXQuCisJICovCisJaWYgKGV4Y2VwdGlvbnMgJiAoRlBTQ1JfTnxGUFNDUl9afEZQU0NSX0N8RlBTQ1JfVikpCisJCWZwc2NyICY9IH4oRlBTQ1JfTnxGUFNDUl9afEZQU0NSX0N8RlBTQ1JfVik7CisKKwlmcHNjciB8PSBleGNlcHRpb25zOworCisJZm14cihGUFNDUiwgZnBzY3IpOworCisjZGVmaW5lIFJBSVNFKHN0YXQsZW4sc2lnKQkJCQlcCisJaWYgKGV4Y2VwdGlvbnMgJiBzdGF0ICYmIGZwc2NyICYgZW4pCQlcCisJCXNpX2NvZGUgPSBzaWc7CisKKwkvKgorCSAqIFRoZXNlIGFyZSBhcnJhbmdlZCBpbiBwcmlvcml0eSBvcmRlciwgbGVhc3QgdG8gaGlnaGVzdC4KKwkgKi8KKwlSQUlTRShGUFNDUl9JWEMsIEZQU0NSX0lYRSwgRlBFX0ZMVFJFUyk7CisJUkFJU0UoRlBTQ1JfVUZDLCBGUFNDUl9VRkUsIEZQRV9GTFRVTkQpOworCVJBSVNFKEZQU0NSX09GQywgRlBTQ1JfT0ZFLCBGUEVfRkxUT1ZGKTsKKwlSQUlTRShGUFNDUl9JT0MsIEZQU0NSX0lPRSwgRlBFX0ZMVElOVik7CisKKwlpZiAoc2lfY29kZSkKKwkJdmZwX3JhaXNlX3NpZ2ZwZShzaV9jb2RlLCByZWdzKTsKK30KKworLyoKKyAqIEVtdWxhdGUgYSBWRlAgaW5zdHJ1Y3Rpb24uCisgKi8KK3N0YXRpYyB1MzIgdmZwX2VtdWxhdGVfaW5zdHJ1Y3Rpb24odTMyIGluc3QsIHUzMiBmcHNjciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdTMyIGV4Y2VwdGlvbnMgPSAodTMyKS0xOworCisJcHJfZGVidWcoIlZGUDogZW11bGF0ZTogSU5TVD0weCUwOHggU0NSPTB4JTA4eFxuIiwgaW5zdCwgZnBzY3IpOworCisJaWYgKElOU1RfQ1BSVERPKGluc3QpKSB7CisJCWlmICghSU5TVF9DUFJUKGluc3QpKSB7CisJCQkvKgorCQkJICogQ1BETworCQkJICovCisJCQlpZiAodmZwX3NpbmdsZShpbnN0KSkgeworCQkJCWV4Y2VwdGlvbnMgPSB2ZnBfc2luZ2xlX2NwZG8oaW5zdCwgZnBzY3IpOworCQkJfSBlbHNlIHsKKwkJCQlleGNlcHRpb25zID0gdmZwX2RvdWJsZV9jcGRvKGluc3QsIGZwc2NyKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBBIENQUlQgaW5zdHJ1Y3Rpb24gY2FuIG5vdCBhcHBlYXIgaW4gRlBJTlNUMiwgbm9yCisJCQkgKiBjYW4gaXQgY2F1c2UgYW4gZXhjZXB0aW9uLiAgVGhlcmVmb3JlLCB3ZSBkbyBub3QKKwkJCSAqIGhhdmUgdG8gZW11bGF0ZSBpdC4KKwkJCSAqLworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQSBDUERUIGluc3RydWN0aW9uIGNhbiBub3QgYXBwZWFyIGluIEZQSU5TVDIsIG5vciBjYW4KKwkJICogaXQgY2F1c2UgYW4gZXhjZXB0aW9uLiAgVGhlcmVmb3JlLCB3ZSBkbyBub3QgaGF2ZSB0bworCQkgKiBlbXVsYXRlIGl0LgorCQkgKi8KKwl9CisJcmV0dXJuIGV4Y2VwdGlvbnM7Cit9CisKKy8qCisgKiBQYWNrYWdlIHVwIGEgYm91bmNlIGNvbmRpdGlvbi4KKyAqLwordm9pZCBWRlA5X2JvdW5jZSh1MzIgdHJpZ2dlciwgdTMyIGZwZXhjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1MzIgZnBzY3IsIG9yaWdfZnBzY3IsIGV4Y2VwdGlvbnMsIGluc3Q7CisKKwlwcl9kZWJ1ZygiVkZQOiBib3VuY2U6IHRyaWdnZXIgJTA4eCBmcGV4YyAlMDh4XG4iLCB0cmlnZ2VyLCBmcGV4Yyk7CisKKwkvKgorCSAqIEVuYWJsZSBhY2Nlc3MgdG8gdGhlIFZGUCBzbyB3ZSBjYW4gaGFuZGxlIHRoZSBib3VuY2UuCisJICovCisJZm14cihGUEVYQywgZnBleGMgJiB+KEZQRVhDX0VYQ0VQVElPTnxGUEVYQ19JTlZ8RlBFWENfVUZDfEZQRVhDX0lPQykpOworCisJb3JpZ19mcHNjciA9IGZwc2NyID0gZm1yeChGUFNDUik7CisKKwkvKgorCSAqIElmIHdlIGFyZSBydW5uaW5nIHdpdGggaW5leGFjdCBleGNlcHRpb25zIGVuYWJsZWQsIHdlIG5lZWQgdG8KKwkgKiBlbXVsYXRlIHRoZSB0cmlnZ2VyIGluc3RydWN0aW9uLiAgTm90ZSB0aGF0IGFzIHdlJ3JlIGVtdWxhdGluZworCSAqIHRoZSB0cmlnZ2VyIGluc3RydWN0aW9uLCB3ZSBuZWVkIHRvIGluY3JlbWVudCBQQy4KKwkgKi8KKwlpZiAoZnBzY3IgJiBGUFNDUl9JWEUpIHsKKwkJcmVncy0+QVJNX3BjICs9IDQ7CisJCWdvdG8gZW11bGF0ZTsKKwl9CisKKwliYXJyaWVyKCk7CisKKwkvKgorCSAqIE1vZGlmeSBmcHNjciB0byBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgcmVtYWluaW5nCisJICovCisJaWYgKGZwZXhjICYgRlBFWENfRVhDRVBUSU9OKSB7CisJCXUzMiBsZW47CisKKwkJbGVuID0gZnBleGMgKyAoMSA8PCBGUEVYQ19MRU5HVEhfQklUKTsKKworCQlmcHNjciAmPSB+RlBTQ1JfTEVOR1RIX01BU0s7CisJCWZwc2NyIHw9IChsZW4gJiBGUEVYQ19MRU5HVEhfTUFTSykgPDwgKEZQU0NSX0xFTkdUSF9CSVQgLSBGUEVYQ19MRU5HVEhfQklUKTsKKwl9CisKKwkvKgorCSAqIEhhbmRsZSB0aGUgZmlyc3QgRlAgaW5zdHJ1Y3Rpb24uICBXZSB1c2VkIHRvIHRha2Ugbm90ZSBvZiB0aGUKKwkgKiBGUEVYQyBib3VuY2UgcmVhc29uLCBidXQgdGhpcyBhcHBlYXJzIHRvIGJlIHVucmVsaWFibGUuCisJICogRW11bGF0ZSB0aGUgYm91bmNlZCBpbnN0cnVjdGlvbiBpbnN0ZWFkLgorCSAqLworCWluc3QgPSBmbXJ4KEZQSU5TVCk7CisJZXhjZXB0aW9ucyA9IHZmcF9lbXVsYXRlX2luc3RydWN0aW9uKGluc3QsIGZwc2NyLCByZWdzKTsKKwlpZiAoZXhjZXB0aW9ucykKKwkJdmZwX3JhaXNlX2V4Y2VwdGlvbnMoZXhjZXB0aW9ucywgaW5zdCwgb3JpZ19mcHNjciwgcmVncyk7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzbid0IGEgc2Vjb25kIEZQIGluc3RydWN0aW9uLCBleGl0IG5vdy4KKwkgKi8KKwlpZiAoIShmcGV4YyAmIEZQRVhDX0ZQVjIpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFRoZSBiYXJyaWVyKCkgaGVyZSBwcmV2ZW50cyBmcGluc3QyIGJlaW5nIHJlYWQKKwkgKiBiZWZvcmUgdGhlIGNvbmRpdGlvbiBhYm92ZS4KKwkgKi8KKwliYXJyaWVyKCk7CisJdHJpZ2dlciA9IGZtcngoRlBJTlNUMik7CisJZnBzY3IgPSBmbXJ4KEZQU0NSKTsKKworIGVtdWxhdGU6CisJZXhjZXB0aW9ucyA9IHZmcF9lbXVsYXRlX2luc3RydWN0aW9uKHRyaWdnZXIsIGZwc2NyLCByZWdzKTsKKwlpZiAoZXhjZXB0aW9ucykKKwkJdmZwX3JhaXNlX2V4Y2VwdGlvbnMoZXhjZXB0aW9ucywgdHJpZ2dlciwgb3JpZ19mcHNjciwgcmVncyk7Cit9CisgCisvKgorICogVkZQIHN1cHBvcnQgY29kZSBpbml0aWFsaXNhdGlvbi4KKyAqLworc3RhdGljIGludCBfX2luaXQgdmZwX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdmZwc2lkOworCisJLyoKKwkgKiBGaXJzdCBjaGVjayB0aGF0IHRoZXJlIGlzIGEgVkZQIHRoYXQgd2UgY2FuIHVzZS4KKwkgKiBUaGUgaGFuZGxlciBpcyBhbHJlYWR5IHNldHVwIHRvIGp1c3QgbG9nIGNhbGxzLCBzbworCSAqIHdlIGp1c3QgbmVlZCB0byByZWFkIHRoZSBWRlBTSUQgcmVnaXN0ZXIuCisJICovCisJdmZwc2lkID0gZm1yeChGUFNJRCk7CisKKwlwcmludGsoS0VSTl9JTkZPICJWRlAgc3VwcG9ydCB2MC4zOiAiKTsKKwlpZiAoVkZQX2FyY2gpIHsKKwkJcHJpbnRrKCJub3QgcHJlc2VudFxuIik7CisJfSBlbHNlIGlmICh2ZnBzaWQgJiBGUFNJRF9OT0RPVUJMRSkgeworCQlwcmludGsoIm5vIGRvdWJsZSBwcmVjaXNpb24gc3VwcG9ydFxuIik7CisJfSBlbHNlIHsKKwkJVkZQX2FyY2ggPSAodmZwc2lkICYgRlBTSURfQVJDSF9NQVNLKSA+PiBGUFNJRF9BUkNIX0JJVDsgIC8qIEV4dHJhY3QgdGhlIGFyY2hpdGVjdHVyZSB2ZXJzaW9uICovCisJCXByaW50aygiaW1wbGVtZW50b3IgJTAyeCBhcmNoaXRlY3R1cmUgJWQgcGFydCAlMDJ4IHZhcmlhbnQgJXggcmV2ICV4XG4iLAorCQkJKHZmcHNpZCAmIEZQU0lEX0lNUExFTUVOVEVSX01BU0spID4+IEZQU0lEX0lNUExFTUVOVEVSX0JJVCwKKwkJCSh2ZnBzaWQgJiBGUFNJRF9BUkNIX01BU0spID4+IEZQU0lEX0FSQ0hfQklULAorCQkJKHZmcHNpZCAmIEZQU0lEX1BBUlRfTUFTSykgPj4gRlBTSURfUEFSVF9CSVQsCisJCQkodmZwc2lkICYgRlBTSURfVkFSSUFOVF9NQVNLKSA+PiBGUFNJRF9WQVJJQU5UX0JJVCwKKwkJCSh2ZnBzaWQgJiBGUFNJRF9SRVZfTUFTSykgPj4gRlBTSURfUkVWX0JJVCk7CisJCXZmcF92ZWN0b3IgPSB2ZnBfc3VwcG9ydF9lbnRyeTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2xhdGVfaW5pdGNhbGwodmZwX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL3ZmcHNpbmdsZS5jIGIvYXJjaC9hcm0vdmZwL3ZmcHNpbmdsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NDlmZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS92ZnAvdmZwc2luZ2xlLmMKQEAgLTAsMCArMSwxMjI0IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL3ZmcC92ZnBzaW5nbGUuYworICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGluIHBhcnQgZnJvbSBKb2huIFIuIEhvdXNlcnMgc29mdGZsb2F0IGxpYnJhcnksIHdoaWNoCisgKiBjYXJyaWVzIHRoZSBmb2xsb3dpbmcgbm90aWNlOgorICoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVGhpcyBDIHNvdXJjZSBmaWxlIGlzIHBhcnQgb2YgdGhlIFNvZnRGbG9hdCBJRUMvSUVFRSBGbG9hdGluZy1wb2ludAorICogQXJpdGhtZXRpYyBQYWNrYWdlLCBSZWxlYXNlIDIuCisgKgorICogV3JpdHRlbiBieSBKb2huIFIuIEhhdXNlci4gIFRoaXMgd29yayB3YXMgbWFkZSBwb3NzaWJsZSBpbiBwYXJ0IGJ5IHRoZQorICogSW50ZXJuYXRpb25hbCBDb21wdXRlciBTY2llbmNlIEluc3RpdHV0ZSwgbG9jYXRlZCBhdCBTdWl0ZSA2MDAsIDE5NDcgQ2VudGVyCisgKiBTdHJlZXQsIEJlcmtlbGV5LCBDYWxpZm9ybmlhIDk0NzA0LiAgRnVuZGluZyB3YXMgcGFydGlhbGx5IHByb3ZpZGVkIGJ5IHRoZQorICogTmF0aW9uYWwgU2NpZW5jZSBGb3VuZGF0aW9uIHVuZGVyIGdyYW50IE1JUC05MzExOTgwLiAgVGhlIG9yaWdpbmFsIHZlcnNpb24KKyAqIG9mIHRoaXMgY29kZSB3YXMgd3JpdHRlbiBhcyBwYXJ0IG9mIGEgcHJvamVjdCB0byBidWlsZCBhIGZpeGVkLXBvaW50IHZlY3RvcgorICogcHJvY2Vzc29yIGluIGNvbGxhYm9yYXRpb24gd2l0aCB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGF0IEJlcmtlbGV5LAorICogb3ZlcnNlZW4gYnkgUHJvZnMuIE5lbHNvbiBNb3JnYW4gYW5kIEpvaG4gV2F3cnp5bmVrLiAgTW9yZSBpbmZvcm1hdGlvbgorICogaXMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdlYiBwYWdlIGBodHRwOi8vSFRUUC5DUy5CZXJrZWxleS5FRFUvfmpoYXVzZXIvCisgKiBhcml0aG1ldGljL3NvZnRmbG9hdC5odG1sJy4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIERJU1RSSUJVVEVEIEFTIElTLCBGT1IgRlJFRS4gIEFsdGhvdWdoIHJlYXNvbmFibGUgZWZmb3J0CisgKiBoYXMgYmVlbiBtYWRlIHRvIGF2b2lkIGl0LCBUSElTIFNPRlRXQVJFIE1BWSBDT05UQUlOIEZBVUxUUyBUSEFUIFdJTEwgQVQKKyAqIFRJTUVTIFJFU1VMVCBJTiBJTkNPUlJFQ1QgQkVIQVZJT1IuICBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBJUyBSRVNUUklDVEVEIFRPCisgKiBQRVJTT05TIEFORCBPUkdBTklaQVRJT05TIFdITyBDQU4gQU5EIFdJTEwgVEFLRSBGVUxMIFJFU1BPTlNJQklMSVRZIEZPUiBBTlkKKyAqIEFORCBBTEwgTE9TU0VTLCBDT1NUUywgT1IgT1RIRVIgUFJPQkxFTVMgQVJJU0lORyBGUk9NIElUUyBVU0UuCisgKgorICogRGVyaXZhdGl2ZSB3b3JrcyBhcmUgYWNjZXB0YWJsZSwgZXZlbiBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcywgc28gbG9uZyBhcworICogKDEpIHRoZXkgaW5jbHVkZSBwcm9taW5lbnQgbm90aWNlIHRoYXQgdGhlIHdvcmsgaXMgZGVyaXZhdGl2ZSwgYW5kICgyKSB0aGV5CisgKiBpbmNsdWRlIHByb21pbmVudCBub3RpY2UgYWtpbiB0byB0aGVzZSB0aHJlZSBwYXJhZ3JhcGhzIGZvciB0aG9zZSBwYXJ0cyBvZgorICogdGhpcyBjb2RlIHRoYXQgYXJlIHJldGFpbmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3ZmcC5oPgorCisjaW5jbHVkZSAidmZwaW5zdHIuaCIKKyNpbmNsdWRlICJ2ZnAuaCIKKworc3RhdGljIHN0cnVjdCB2ZnBfc2luZ2xlIHZmcF9zaW5nbGVfZGVmYXVsdF9xbmFuID0geworCS5leHBvbmVudAk9IDI1NSwKKwkuc2lnbgkJPSAwLAorCS5zaWduaWZpY2FuZAk9IFZGUF9TSU5HTEVfU0lHTklGSUNBTkRfUU5BTiwKK307CisKK3N0YXRpYyB2b2lkIHZmcF9zaW5nbGVfZHVtcChjb25zdCBjaGFyICpzdHIsIHN0cnVjdCB2ZnBfc2luZ2xlICpzKQoreworCXByX2RlYnVnKCJWRlA6ICVzOiBzaWduPSVkIGV4cG9uZW50PSVkIHNpZ25pZmljYW5kPSUwOHhcbiIsCisJCSBzdHIsIHMtPnNpZ24gIT0gMCwgcy0+ZXhwb25lbnQsIHMtPnNpZ25pZmljYW5kKTsKK30KKworc3RhdGljIHZvaWQgdmZwX3NpbmdsZV9ub3JtYWxpc2VfZGVub3JtYWwoc3RydWN0IHZmcF9zaW5nbGUgKnZzKQoreworCWludCBiaXRzID0gMzEgLSBmbHModnMtPnNpZ25pZmljYW5kKTsKKworCXZmcF9zaW5nbGVfZHVtcCgibm9ybWFsaXNlX2Rlbm9ybWFsOiBpbiIsIHZzKTsKKworCWlmIChiaXRzKSB7CisJCXZzLT5leHBvbmVudCAtPSBiaXRzIC0gMTsKKwkJdnMtPnNpZ25pZmljYW5kIDw8PSBiaXRzOworCX0KKworCXZmcF9zaW5nbGVfZHVtcCgibm9ybWFsaXNlX2Rlbm9ybWFsOiBvdXQiLCB2cyk7Cit9CisKKyNpZm5kZWYgREVCVUcKKyNkZWZpbmUgdmZwX3NpbmdsZV9ub3JtYWxpc2Vyb3VuZChzZCx2c2QsZnBzY3IsZXhjZXB0LGZ1bmMpIF9fdmZwX3NpbmdsZV9ub3JtYWxpc2Vyb3VuZChzZCx2c2QsZnBzY3IsZXhjZXB0KQordTMyIF9fdmZwX3NpbmdsZV9ub3JtYWxpc2Vyb3VuZChpbnQgc2QsIHN0cnVjdCB2ZnBfc2luZ2xlICp2cywgdTMyIGZwc2NyLCB1MzIgZXhjZXB0aW9ucykKKyNlbHNlCit1MzIgdmZwX3NpbmdsZV9ub3JtYWxpc2Vyb3VuZChpbnQgc2QsIHN0cnVjdCB2ZnBfc2luZ2xlICp2cywgdTMyIGZwc2NyLCB1MzIgZXhjZXB0aW9ucywgY29uc3QgY2hhciAqZnVuYykKKyNlbmRpZgoreworCXUzMiBzaWduaWZpY2FuZCwgaW5jciwgcm1vZGU7CisJaW50IGV4cG9uZW50LCBzaGlmdCwgdW5kZXJmbG93OworCisJdmZwX3NpbmdsZV9kdW1wKCJwYWNrOiBpbiIsIHZzKTsKKworCS8qCisJICogSW5maW5pdGllcyBhbmQgTmFOcyBhcmUgYSBzcGVjaWFsIGNhc2UuCisJICovCisJaWYgKHZzLT5leHBvbmVudCA9PSAyNTUgJiYgKHZzLT5zaWduaWZpY2FuZCA9PSAwIHx8IGV4Y2VwdGlvbnMpKQorCQlnb3RvIHBhY2s7CisKKwkvKgorCSAqIFNwZWNpYWwtY2FzZSB6ZXJvLgorCSAqLworCWlmICh2cy0+c2lnbmlmaWNhbmQgPT0gMCkgeworCQl2cy0+ZXhwb25lbnQgPSAwOworCQlnb3RvIHBhY2s7CisJfQorCisJZXhwb25lbnQgPSB2cy0+ZXhwb25lbnQ7CisJc2lnbmlmaWNhbmQgPSB2cy0+c2lnbmlmaWNhbmQ7CisKKwkvKgorCSAqIE5vcm1hbGlzZSBmaXJzdC4gIE5vdGUgdGhhdCB3ZSBzaGlmdCB0aGUgc2lnbmlmaWNhbmQgdXAgdG8KKwkgKiBiaXQgMzEsIHNvIHdlIGhhdmUgVkZQX1NJTkdMRV9MT1dfQklUUyArIDEgYmVsb3cgdGhlIGxlYXN0CisJICogc2lnbmlmaWNhbnQgYml0LgorCSAqLworCXNoaWZ0ID0gMzIgLSBmbHMoc2lnbmlmaWNhbmQpOworCWlmIChzaGlmdCA8IDMyICYmIHNoaWZ0KSB7CisJCWV4cG9uZW50IC09IHNoaWZ0OworCQlzaWduaWZpY2FuZCA8PD0gc2hpZnQ7CisJfQorCisjaWZkZWYgREVCVUcKKwl2cy0+ZXhwb25lbnQgPSBleHBvbmVudDsKKwl2cy0+c2lnbmlmaWNhbmQgPSBzaWduaWZpY2FuZDsKKwl2ZnBfc2luZ2xlX2R1bXAoInBhY2s6IG5vcm1hbGlzZWQiLCB2cyk7CisjZW5kaWYKKworCS8qCisJICogVGlueSBudW1iZXI/CisJICovCisJdW5kZXJmbG93ID0gZXhwb25lbnQgPCAwOworCWlmICh1bmRlcmZsb3cpIHsKKwkJc2lnbmlmaWNhbmQgPSB2ZnBfc2hpZnRyaWdodDMyamFtbWluZyhzaWduaWZpY2FuZCwgLWV4cG9uZW50KTsKKwkJZXhwb25lbnQgPSAwOworI2lmZGVmIERFQlVHCisJCXZzLT5leHBvbmVudCA9IGV4cG9uZW50OworCQl2cy0+c2lnbmlmaWNhbmQgPSBzaWduaWZpY2FuZDsKKwkJdmZwX3NpbmdsZV9kdW1wKCJwYWNrOiB0aW55IG51bWJlciIsIHZzKTsKKyNlbmRpZgorCQlpZiAoIShzaWduaWZpY2FuZCAmICgoMSA8PCAoVkZQX1NJTkdMRV9MT1dfQklUUyArIDEpKSAtIDEpKSkKKwkJCXVuZGVyZmxvdyA9IDA7CisJfQorCisJLyoKKwkgKiBTZWxlY3Qgcm91bmRpbmcgaW5jcmVtZW50LgorCSAqLworCWluY3IgPSAwOworCXJtb2RlID0gZnBzY3IgJiBGUFNDUl9STU9ERV9NQVNLOworCisJaWYgKHJtb2RlID09IEZQU0NSX1JPVU5EX05FQVJFU1QpIHsKKwkJaW5jciA9IDEgPDwgVkZQX1NJTkdMRV9MT1dfQklUUzsKKwkJaWYgKChzaWduaWZpY2FuZCAmICgxIDw8IChWRlBfU0lOR0xFX0xPV19CSVRTICsgMSkpKSA9PSAwKQorCQkJaW5jciAtPSAxOworCX0gZWxzZSBpZiAocm1vZGUgPT0gRlBTQ1JfUk9VTkRfVE9aRVJPKSB7CisJCWluY3IgPSAwOworCX0gZWxzZSBpZiAoKHJtb2RlID09IEZQU0NSX1JPVU5EX1BMVVNJTkYpIF4gKHZzLT5zaWduICE9IDApKQorCQlpbmNyID0gKDEgPDwgKFZGUF9TSU5HTEVfTE9XX0JJVFMgKyAxKSkgLSAxOworCisJcHJfZGVidWcoIlZGUDogcm91bmRpbmcgaW5jcmVtZW50ID0gMHglMDh4XG4iLCBpbmNyKTsKKworCS8qCisJICogSXMgb3VyIHJvdW5kaW5nIGdvaW5nIHRvIG92ZXJmbG93PworCSAqLworCWlmICgoc2lnbmlmaWNhbmQgKyBpbmNyKSA8IHNpZ25pZmljYW5kKSB7CisJCWV4cG9uZW50ICs9IDE7CisJCXNpZ25pZmljYW5kID0gKHNpZ25pZmljYW5kID4+IDEpIHwgKHNpZ25pZmljYW5kICYgMSk7CisJCWluY3IgPj49IDE7CisjaWZkZWYgREVCVUcKKwkJdnMtPmV4cG9uZW50ID0gZXhwb25lbnQ7CisJCXZzLT5zaWduaWZpY2FuZCA9IHNpZ25pZmljYW5kOworCQl2ZnBfc2luZ2xlX2R1bXAoInBhY2s6IG92ZXJmbG93IiwgdnMpOworI2VuZGlmCisJfQorCisJLyoKKwkgKiBJZiBhbnkgb2YgdGhlIGxvdyBiaXRzICh3aGljaCB3aWxsIGJlIHNoaWZ0ZWQgb3V0IG9mIHRoZQorCSAqIG51bWJlcikgYXJlIG5vbi16ZXJvLCB0aGUgcmVzdWx0IGlzIGluZXhhY3QuCisJICovCisJaWYgKHNpZ25pZmljYW5kICYgKCgxIDw8IChWRlBfU0lOR0xFX0xPV19CSVRTICsgMSkpIC0gMSkpCisJCWV4Y2VwdGlvbnMgfD0gRlBTQ1JfSVhDOworCisJLyoKKwkgKiBEbyBvdXIgcm91bmRpbmcuCisJICovCisJc2lnbmlmaWNhbmQgKz0gaW5jcjsKKworCS8qCisJICogSW5maW5pdHk/CisJICovCisJaWYgKGV4cG9uZW50ID49IDI1NCkgeworCQlleGNlcHRpb25zIHw9IEZQU0NSX09GQyB8IEZQU0NSX0lYQzsKKwkJaWYgKGluY3IgPT0gMCkgeworCQkJdnMtPmV4cG9uZW50ID0gMjUzOworCQkJdnMtPnNpZ25pZmljYW5kID0gMHg3ZmZmZmZmZjsKKwkJfSBlbHNlIHsKKwkJCXZzLT5leHBvbmVudCA9IDI1NTsJCS8qIGluZmluaXR5ICovCisJCQl2cy0+c2lnbmlmaWNhbmQgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHNpZ25pZmljYW5kID4+IChWRlBfU0lOR0xFX0xPV19CSVRTICsgMSkgPT0gMCkKKwkJCWV4cG9uZW50ID0gMDsKKwkJaWYgKGV4cG9uZW50IHx8IHNpZ25pZmljYW5kID4gMHg4MDAwMDAwMCkKKwkJCXVuZGVyZmxvdyA9IDA7CisJCWlmICh1bmRlcmZsb3cpCisJCQlleGNlcHRpb25zIHw9IEZQU0NSX1VGQzsKKwkJdnMtPmV4cG9uZW50ID0gZXhwb25lbnQ7CisJCXZzLT5zaWduaWZpY2FuZCA9IHNpZ25pZmljYW5kID4+IDE7CisJfQorCisgcGFjazoKKwl2ZnBfc2luZ2xlX2R1bXAoInBhY2s6IGZpbmFsIiwgdnMpOworCXsKKwkJczMyIGQgPSB2ZnBfc2luZ2xlX3BhY2sodnMpOworCQlwcl9kZWJ1ZygiVkZQOiAlczogZChzJWQpPSUwOHggZXhjZXB0aW9ucz0lMDh4XG4iLCBmdW5jLAorCQkJIHNkLCBkLCBleGNlcHRpb25zKTsKKwkJdmZwX3B1dF9mbG9hdChzZCwgZCk7CisJfQorCisJcmV0dXJuIGV4Y2VwdGlvbnMgJiB+VkZQX05BTl9GTEFHOworfQorCisvKgorICogUHJvcGFnYXRlIHRoZSBOYU4sIHNldHRpbmcgZXhjZXB0aW9ucyBpZiBpdCBpcyBzaWduYWxsaW5nLgorICogJ24nIGlzIGFsd2F5cyBhIE5hTi4gICdtJyBtYXkgYmUgYSBudW1iZXIsIE5hTiBvciBpbmZpbml0eS4KKyAqLworc3RhdGljIHUzMgordmZwX3Byb3BhZ2F0ZV9uYW4oc3RydWN0IHZmcF9zaW5nbGUgKnZzZCwgc3RydWN0IHZmcF9zaW5nbGUgKnZzbiwKKwkJICBzdHJ1Y3QgdmZwX3NpbmdsZSAqdnNtLCB1MzIgZnBzY3IpCit7CisJc3RydWN0IHZmcF9zaW5nbGUgKm5hbjsKKwlpbnQgdG4sIHRtID0gMDsKKworCXRuID0gdmZwX3NpbmdsZV90eXBlKHZzbik7CisKKwlpZiAodnNtKQorCQl0bSA9IHZmcF9zaW5nbGVfdHlwZSh2c20pOworCisJaWYgKGZwc2NyICYgRlBTQ1JfREVGQVVMVF9OQU4pCisJCS8qCisJCSAqIERlZmF1bHQgTmFOIG1vZGUgLSBhbHdheXMgcmV0dXJucyBhIHF1aWV0IE5hTgorCQkgKi8KKwkJbmFuID0gJnZmcF9zaW5nbGVfZGVmYXVsdF9xbmFuOworCWVsc2UgeworCQkvKgorCQkgKiBDb250ZW1wb3JhcnkgbW9kZSAtIHNlbGVjdCB0aGUgZmlyc3Qgc2lnbmFsbGluZworCQkgKiBOQU4sIG9yIGlmIG5laXRoZXIgYXJlIHNpZ25hbGxpbmcsIHRoZSBmaXJzdAorCQkgKiBxdWlldCBOQU4uCisJCSAqLworCQlpZiAodG4gPT0gVkZQX1NOQU4gfHwgKHRtICE9IFZGUF9TTkFOICYmIHRuID09IFZGUF9RTkFOKSkKKwkJCW5hbiA9IHZzbjsKKwkJZWxzZQorCQkJbmFuID0gdnNtOworCQkvKgorCQkgKiBNYWtlIHRoZSBOYU4gcXVpZXQuCisJCSAqLworCQluYW4tPnNpZ25pZmljYW5kIHw9IFZGUF9TSU5HTEVfU0lHTklGSUNBTkRfUU5BTjsKKwl9CisKKwkqdnNkID0gKm5hbjsKKworCS8qCisJICogSWYgb25lIHdhcyBhIHNpZ25hbGxpbmcgTkFOLCByYWlzZSBpbnZhbGlkIG9wZXJhdGlvbi4KKwkgKi8KKwlyZXR1cm4gdG4gPT0gVkZQX1NOQU4gfHwgdG0gPT0gVkZQX1NOQU4gPyBGUFNDUl9JT0MgOiBWRlBfTkFOX0ZMQUc7Cit9CisKKworLyoKKyAqIEV4dGVuZGVkIG9wZXJhdGlvbnMKKyAqLworc3RhdGljIHUzMiB2ZnBfc2luZ2xlX2ZhYnMoaW50IHNkLCBpbnQgdW51c2VkLCBzMzIgbSwgdTMyIGZwc2NyKQoreworCXZmcF9wdXRfZmxvYXQoc2QsIHZmcF9zaW5nbGVfcGFja2VkX2FicyhtKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgdmZwX3NpbmdsZV9mY3B5KGludCBzZCwgaW50IHVudXNlZCwgczMyIG0sIHUzMiBmcHNjcikKK3sKKwl2ZnBfcHV0X2Zsb2F0KHNkLCBtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiB2ZnBfc2luZ2xlX2ZuZWcoaW50IHNkLCBpbnQgdW51c2VkLCBzMzIgbSwgdTMyIGZwc2NyKQoreworCXZmcF9wdXRfZmxvYXQoc2QsIHZmcF9zaW5nbGVfcGFja2VkX25lZ2F0ZShtKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCB1MTYgc3FydF9vZGRhZGp1c3RbXSA9IHsKKwkweDAwMDQsIDB4MDAyMiwgMHgwMDVkLCAweDAwYjEsIDB4MDExZCwgMHgwMTlmLCAweDAyMzYsIDB4MDJlMCwKKwkweDAzOWMsIDB4MDQ2OCwgMHgwNTQ1LCAweDA2MzEsIDB4MDcyYiwgMHgwODMyLCAweDA5NDYsIDB4MGE2NworfTsKKworc3RhdGljIGNvbnN0IHUxNiBzcXJ0X2V2ZW5hZGp1c3RbXSA9IHsKKwkweDBhMmQsIDB4MDhhZiwgMHgwNzVhLCAweDA2MjksIDB4MDUxYSwgMHgwNDI5LCAweDAzNTYsIDB4MDI5ZSwKKwkweDAyMDAsIDB4MDE3OSwgMHgwMTA5LCAweDAwYWYsIDB4MDA2OCwgMHgwMDM0LCAweDAwMTIsIDB4MDAwMgorfTsKKwordTMyIHZmcF9lc3RpbWF0ZV9zcXJ0X3NpZ25pZmljYW5kKHUzMiBleHBvbmVudCwgdTMyIHNpZ25pZmljYW5kKQoreworCWludCBpbmRleDsKKwl1MzIgeiwgYTsKKworCWlmICgoc2lnbmlmaWNhbmQgJiAweGMwMDAwMDAwKSAhPSAweDQwMDAwMDAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlZGUDogZXN0aW1hdGVfc3FydDogaW52YWxpZCBzaWduaWZpY2FuZFxuIik7CisJfQorCisJYSA9IHNpZ25pZmljYW5kIDw8IDE7CisJaW5kZXggPSAoYSA+PiAyNykgJiAxNTsKKwlpZiAoZXhwb25lbnQgJiAxKSB7CisJCXogPSAweDQwMDAgKyAoYSA+PiAxNykgLSBzcXJ0X29kZGFkanVzdFtpbmRleF07CisJCXogPSAoKGEgLyB6KSA8PCAxNCkgKyAoeiA8PCAxNSk7CisJCWEgPj49IDE7CisJfSBlbHNlIHsKKwkJeiA9IDB4ODAwMCArIChhID4+IDE3KSAtIHNxcnRfZXZlbmFkanVzdFtpbmRleF07CisJCXogPSBhIC8geiArIHo7CisJCXogPSAoeiA+PSAweDIwMDAwKSA/IDB4ZmZmZjgwMDAgOiAoeiA8PCAxNSk7CisJCWlmICh6IDw9IGEpCisJCQlyZXR1cm4gKHMzMilhID4+IDE7CisJfQorCXJldHVybiAodTMyKSgoKHU2NClhIDw8IDMxKSAvIHopICsgKHogPj4gMSk7Cit9CisKK3N0YXRpYyB1MzIgdmZwX3NpbmdsZV9mc3FydChpbnQgc2QsIGludCB1bnVzZWQsIHMzMiBtLCB1MzIgZnBzY3IpCit7CisJc3RydWN0IHZmcF9zaW5nbGUgdnNtLCB2c2Q7CisJaW50IHJldCwgdG07CisKKwl2ZnBfc2luZ2xlX3VucGFjaygmdnNtLCBtKTsKKwl0bSA9IHZmcF9zaW5nbGVfdHlwZSgmdnNtKTsKKwlpZiAodG0gJiAoVkZQX05BTnxWRlBfSU5GSU5JVFkpKSB7CisJCXN0cnVjdCB2ZnBfc2luZ2xlICp2c3AgPSAmdnNkOworCisJCWlmICh0bSAmIFZGUF9OQU4pCisJCQlyZXQgPSB2ZnBfcHJvcGFnYXRlX25hbih2c3AsICZ2c20sIE5VTEwsIGZwc2NyKTsKKwkJZWxzZSBpZiAodnNtLnNpZ24gPT0gMCkgeworIHNxcnRfY29weToKKwkJCXZzcCA9ICZ2c207CisJCQlyZXQgPSAwOworCQl9IGVsc2UgeworIHNxcnRfaW52YWxpZDoKKwkJCXZzcCA9ICZ2ZnBfc2luZ2xlX2RlZmF1bHRfcW5hbjsKKwkJCXJldCA9IEZQU0NSX0lPQzsKKwkJfQorCQl2ZnBfcHV0X2Zsb2F0KHNkLCB2ZnBfc2luZ2xlX3BhY2sodnNwKSk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkgKiBzcXJ0KCsvLSAwKSA9PSArLy0gMAorCSAqLworCWlmICh0bSAmIFZGUF9aRVJPKQorCQlnb3RvIHNxcnRfY29weTsKKworCS8qCisJICogTm9ybWFsaXNlIGEgZGVub3JtYWxpc2VkIG51bWJlcgorCSAqLworCWlmICh0bSAmIFZGUF9ERU5PUk1BTCkKKwkJdmZwX3NpbmdsZV9ub3JtYWxpc2VfZGVub3JtYWwoJnZzbSk7CisKKwkvKgorCSAqIHNxcnQoPDApID0gaW52YWxpZAorCSAqLworCWlmICh2c20uc2lnbikKKwkJZ290byBzcXJ0X2ludmFsaWQ7CisKKwl2ZnBfc2luZ2xlX2R1bXAoInNxcnQiLCAmdnNtKTsKKworCS8qCisJICogRXN0aW1hdGUgdGhlIHNxdWFyZSByb290LgorCSAqLworCXZzZC5zaWduID0gMDsKKwl2c2QuZXhwb25lbnQgPSAoKHZzbS5leHBvbmVudCAtIDEyNykgPj4gMSkgKyAxMjc7CisJdnNkLnNpZ25pZmljYW5kID0gdmZwX2VzdGltYXRlX3NxcnRfc2lnbmlmaWNhbmQodnNtLmV4cG9uZW50LCB2c20uc2lnbmlmaWNhbmQpICsgMjsKKworCXZmcF9zaW5nbGVfZHVtcCgic3FydCBlc3RpbWF0ZSIsICZ2c2QpOworCisJLyoKKwkgKiBBbmQgbm93IGFkanVzdC4KKwkgKi8KKwlpZiAoKHZzZC5zaWduaWZpY2FuZCAmIFZGUF9TSU5HTEVfTE9XX0JJVFNfTUFTSykgPD0gNSkgeworCQlpZiAodnNkLnNpZ25pZmljYW5kIDwgMikgeworCQkJdnNkLnNpZ25pZmljYW5kID0gMHhmZmZmZmZmZjsKKwkJfSBlbHNlIHsKKwkJCXU2NCB0ZXJtOworCQkJczY0IHJlbTsKKwkJCXZzbS5zaWduaWZpY2FuZCA8PD0gISh2c20uZXhwb25lbnQgJiAxKTsKKwkJCXRlcm0gPSAodTY0KXZzZC5zaWduaWZpY2FuZCAqIHZzZC5zaWduaWZpY2FuZDsKKwkJCXJlbSA9ICgodTY0KXZzbS5zaWduaWZpY2FuZCA8PCAzMikgLSB0ZXJtOworCisJCQlwcl9kZWJ1ZygiVkZQOiB0ZXJtPSUwMTZsbHggcmVtPSUwMTZsbHhcbiIsIHRlcm0sIHJlbSk7CisKKwkJCXdoaWxlIChyZW0gPCAwKSB7CisJCQkJdnNkLnNpZ25pZmljYW5kIC09IDE7CisJCQkJcmVtICs9ICgodTY0KXZzZC5zaWduaWZpY2FuZCA8PCAxKSB8IDE7CisJCQl9CisJCQl2c2Quc2lnbmlmaWNhbmQgfD0gcmVtICE9IDA7CisJCX0KKwl9CisJdnNkLnNpZ25pZmljYW5kID0gdmZwX3NoaWZ0cmlnaHQzMmphbW1pbmcodnNkLnNpZ25pZmljYW5kLCAxKTsKKworCXJldHVybiB2ZnBfc2luZ2xlX25vcm1hbGlzZXJvdW5kKHNkLCAmdnNkLCBmcHNjciwgMCwgImZzcXJ0Iik7Cit9CisKKy8qCisgKiBFcXVhbAk6PSBaQworICogTGVzcyB0aGFuCTo9IE4KKyAqIEdyZWF0ZXIgdGhhbgk6PSBDCisgKiBVbm9yZGVyZWQJOj0gQ1YKKyAqLworc3RhdGljIHUzMiB2ZnBfY29tcGFyZShpbnQgc2QsIGludCBzaWduYWxfb25fcW5hbiwgczMyIG0sIHUzMiBmcHNjcikKK3sKKwlzMzIgZDsKKwl1MzIgcmV0ID0gMDsKKworCWQgPSB2ZnBfZ2V0X2Zsb2F0KHNkKTsKKwlpZiAodmZwX3NpbmdsZV9wYWNrZWRfZXhwb25lbnQobSkgPT0gMjU1ICYmIHZmcF9zaW5nbGVfcGFja2VkX21hbnRpc3NhKG0pKSB7CisJCXJldCB8PSBGUFNDUl9DIHwgRlBTQ1JfVjsKKwkJaWYgKHNpZ25hbF9vbl9xbmFuIHx8ICEodmZwX3NpbmdsZV9wYWNrZWRfbWFudGlzc2EobSkgJiAoMSA8PCAoVkZQX1NJTkdMRV9NQU5USVNTQV9CSVRTIC0gMSkpKSkKKwkJCS8qCisJCQkgKiBTaWduYWxsaW5nIE5hTiwgb3Igc2lnbmFsbGluZyBvbiBxdWlldCBOYU4KKwkJCSAqLworCQkJcmV0IHw9IEZQU0NSX0lPQzsKKwl9CisKKwlpZiAodmZwX3NpbmdsZV9wYWNrZWRfZXhwb25lbnQoZCkgPT0gMjU1ICYmIHZmcF9zaW5nbGVfcGFja2VkX21hbnRpc3NhKGQpKSB7CisJCXJldCB8PSBGUFNDUl9DIHwgRlBTQ1JfVjsKKwkJaWYgKHNpZ25hbF9vbl9xbmFuIHx8ICEodmZwX3NpbmdsZV9wYWNrZWRfbWFudGlzc2EoZCkgJiAoMSA8PCAoVkZQX1NJTkdMRV9NQU5USVNTQV9CSVRTIC0gMSkpKSkKKwkJCS8qCisJCQkgKiBTaWduYWxsaW5nIE5hTiwgb3Igc2lnbmFsbGluZyBvbiBxdWlldCBOYU4KKwkJCSAqLworCQkJcmV0IHw9IEZQU0NSX0lPQzsKKwl9CisKKwlpZiAocmV0ID09IDApIHsKKwkJaWYgKGQgPT0gbSB8fCB2ZnBfc2luZ2xlX3BhY2tlZF9hYnMoZCB8IG0pID09IDApIHsKKwkJCS8qCisJCQkgKiBlcXVhbAorCQkJICovCisJCQlyZXQgfD0gRlBTQ1JfWiB8IEZQU0NSX0M7CisJCX0gZWxzZSBpZiAodmZwX3NpbmdsZV9wYWNrZWRfc2lnbihkIF4gbSkpIHsKKwkJCS8qCisJCQkgKiBkaWZmZXJlbnQgc2lnbnMKKwkJCSAqLworCQkJaWYgKHZmcF9zaW5nbGVfcGFja2VkX3NpZ24oZCkpCisJCQkJLyoKKwkJCQkgKiBkIGlzIG5lZ2F0aXZlLCBzbyBkIDwgbQorCQkJCSAqLworCQkJCXJldCB8PSBGUFNDUl9OOworCQkJZWxzZQorCQkJCS8qCisJCQkJICogZCBpcyBwb3NpdGl2ZSwgc28gZCA+IG0KKwkJCQkgKi8KKwkJCQlyZXQgfD0gRlBTQ1JfQzsKKwkJfSBlbHNlIGlmICgodmZwX3NpbmdsZV9wYWNrZWRfc2lnbihkKSAhPSAwKSBeIChkIDwgbSkpIHsKKwkJCS8qCisJCQkgKiBkIDwgbQorCQkJICovCisJCQlyZXQgfD0gRlBTQ1JfTjsKKwkJfSBlbHNlIGlmICgodmZwX3NpbmdsZV9wYWNrZWRfc2lnbihkKSAhPSAwKSBeIChkID4gbSkpIHsKKwkJCS8qCisJCQkgKiBkID4gbQorCQkJICovCisJCQlyZXQgfD0gRlBTQ1JfQzsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdTMyIHZmcF9zaW5nbGVfZmNtcChpbnQgc2QsIGludCB1bnVzZWQsIHMzMiBtLCB1MzIgZnBzY3IpCit7CisJcmV0dXJuIHZmcF9jb21wYXJlKHNkLCAwLCBtLCBmcHNjcik7Cit9CisKK3N0YXRpYyB1MzIgdmZwX3NpbmdsZV9mY21wZShpbnQgc2QsIGludCB1bnVzZWQsIHMzMiBtLCB1MzIgZnBzY3IpCit7CisJcmV0dXJuIHZmcF9jb21wYXJlKHNkLCAxLCBtLCBmcHNjcik7Cit9CisKK3N0YXRpYyB1MzIgdmZwX3NpbmdsZV9mY21weihpbnQgc2QsIGludCB1bnVzZWQsIHMzMiBtLCB1MzIgZnBzY3IpCit7CisJcmV0dXJuIHZmcF9jb21wYXJlKHNkLCAwLCAwLCBmcHNjcik7Cit9CisKK3N0YXRpYyB1MzIgdmZwX3NpbmdsZV9mY21wZXooaW50IHNkLCBpbnQgdW51c2VkLCBzMzIgbSwgdTMyIGZwc2NyKQoreworCXJldHVybiB2ZnBfY29tcGFyZShzZCwgMSwgMCwgZnBzY3IpOworfQorCitzdGF0aWMgdTMyIHZmcF9zaW5nbGVfZmN2dGQoaW50IGRkLCBpbnQgdW51c2VkLCBzMzIgbSwgdTMyIGZwc2NyKQoreworCXN0cnVjdCB2ZnBfc2luZ2xlIHZzbTsKKwlzdHJ1Y3QgdmZwX2RvdWJsZSB2ZGQ7CisJaW50IHRtOworCXUzMiBleGNlcHRpb25zID0gMDsKKworCXZmcF9zaW5nbGVfdW5wYWNrKCZ2c20sIG0pOworCisJdG0gPSB2ZnBfc2luZ2xlX3R5cGUoJnZzbSk7CisKKwkvKgorCSAqIElmIHdlIGhhdmUgYSBzaWduYWxsaW5nIE5hTiwgc2lnbmFsIGludmFsaWQgb3BlcmF0aW9uLgorCSAqLworCWlmICh0bSA9PSBWRlBfU05BTikKKwkJZXhjZXB0aW9ucyA9IEZQU0NSX0lPQzsKKworCWlmICh0bSAmIFZGUF9ERU5PUk1BTCkKKwkJdmZwX3NpbmdsZV9ub3JtYWxpc2VfZGVub3JtYWwoJnZzbSk7CisKKwl2ZGQuc2lnbiA9IHZzbS5zaWduOworCXZkZC5zaWduaWZpY2FuZCA9ICh1NjQpdnNtLnNpZ25pZmljYW5kIDw8IDMyOworCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGFuIGluZmluaXR5IG9yIE5hTiwgdGhlIGV4cG9uZW50IG11c3QgYmUgMjA0Ny4KKwkgKi8KKwlpZiAodG0gJiAoVkZQX0lORklOSVRZfFZGUF9OQU4pKSB7CisJCXZkZC5leHBvbmVudCA9IDIwNDc7CisJCWlmICh0bSAmIFZGUF9OQU4pCisJCQl2ZGQuc2lnbmlmaWNhbmQgfD0gVkZQX0RPVUJMRV9TSUdOSUZJQ0FORF9RTkFOOworCQlnb3RvIHBhY2tfbmFuOworCX0gZWxzZSBpZiAodG0gJiBWRlBfWkVSTykKKwkJdmRkLmV4cG9uZW50ID0gMDsKKwllbHNlCisJCXZkZC5leHBvbmVudCA9IHZzbS5leHBvbmVudCArICgxMDIzIC0gMTI3KTsKKworCS8qCisJICogVGVjaG5pY2FsbHksIGlmIGJpdCAwIG9mIGRkIGlzIHNldCwgdGhpcyBpcyBhbiBpbnZhbGlkCisJICogaW5zdHJ1Y3Rpb24uICBIb3dldmVyLCB3ZSBpZ25vcmUgdGhpcyBmb3IgZWZmaWNpZW5jeS4KKwkgKi8KKwlyZXR1cm4gdmZwX2RvdWJsZV9ub3JtYWxpc2Vyb3VuZChkZCwgJnZkZCwgZnBzY3IsIGV4Y2VwdGlvbnMsICJmY3Z0ZCIpOworCisgcGFja19uYW46CisJdmZwX3B1dF9kb3VibGUoZGQsIHZmcF9kb3VibGVfcGFjaygmdmRkKSk7CisJcmV0dXJuIGV4Y2VwdGlvbnM7Cit9CisKK3N0YXRpYyB1MzIgdmZwX3NpbmdsZV9mdWl0byhpbnQgc2QsIGludCB1bnVzZWQsIHMzMiBtLCB1MzIgZnBzY3IpCit7CisJc3RydWN0IHZmcF9zaW5nbGUgdnM7CisKKwl2cy5zaWduID0gMDsKKwl2cy5leHBvbmVudCA9IDEyNyArIDMxIC0gMTsKKwl2cy5zaWduaWZpY2FuZCA9ICh1MzIpbTsKKworCXJldHVybiB2ZnBfc2luZ2xlX25vcm1hbGlzZXJvdW5kKHNkLCAmdnMsIGZwc2NyLCAwLCAiZnVpdG8iKTsKK30KKworc3RhdGljIHUzMiB2ZnBfc2luZ2xlX2ZzaXRvKGludCBzZCwgaW50IHVudXNlZCwgczMyIG0sIHUzMiBmcHNjcikKK3sKKwlzdHJ1Y3QgdmZwX3NpbmdsZSB2czsKKworCXZzLnNpZ24gPSAobSAmIDB4ODAwMDAwMDApID4+IDE2OworCXZzLmV4cG9uZW50ID0gMTI3ICsgMzEgLSAxOworCXZzLnNpZ25pZmljYW5kID0gdnMuc2lnbiA/IC1tIDogbTsKKworCXJldHVybiB2ZnBfc2luZ2xlX25vcm1hbGlzZXJvdW5kKHNkLCAmdnMsIGZwc2NyLCAwLCAiZnNpdG8iKTsKK30KKworc3RhdGljIHUzMiB2ZnBfc2luZ2xlX2Z0b3VpKGludCBzZCwgaW50IHVudXNlZCwgczMyIG0sIHUzMiBmcHNjcikKK3sKKwlzdHJ1Y3QgdmZwX3NpbmdsZSB2c207CisJdTMyIGQsIGV4Y2VwdGlvbnMgPSAwOworCWludCBybW9kZSA9IGZwc2NyICYgRlBTQ1JfUk1PREVfTUFTSzsKKwlpbnQgdG07CisKKwl2ZnBfc2luZ2xlX3VucGFjaygmdnNtLCBtKTsKKwl2ZnBfc2luZ2xlX2R1bXAoIlZTTSIsICZ2c20pOworCisJLyoKKwkgKiBEbyB3ZSBoYXZlIGEgZGVub3JtYWxpc2VkIG51bWJlcj8KKwkgKi8KKwl0bSA9IHZmcF9zaW5nbGVfdHlwZSgmdnNtKTsKKwlpZiAodG0gJiBWRlBfREVOT1JNQUwpCisJCWV4Y2VwdGlvbnMgfD0gRlBTQ1JfSURDOworCisJaWYgKHRtICYgVkZQX05BTikKKwkJdnNtLnNpZ24gPSAwOworCisJaWYgKHZzbS5leHBvbmVudCA+PSAxMjcgKyAzMikgeworCQlkID0gdnNtLnNpZ24gPyAwIDogMHhmZmZmZmZmZjsKKwkJZXhjZXB0aW9ucyA9IEZQU0NSX0lPQzsKKwl9IGVsc2UgaWYgKHZzbS5leHBvbmVudCA+PSAxMjcgLSAxKSB7CisJCWludCBzaGlmdCA9IDEyNyArIDMxIC0gdnNtLmV4cG9uZW50OworCQl1MzIgcmVtLCBpbmNyID0gMDsKKworCQkvKgorCQkgKiAyXjAgPD0gbSA8IDJeMzItMl44CisJCSAqLworCQlkID0gKHZzbS5zaWduaWZpY2FuZCA8PCAxKSA+PiBzaGlmdDsKKwkJcmVtID0gdnNtLnNpZ25pZmljYW5kIDw8ICgzMyAtIHNoaWZ0KTsKKworCQlpZiAocm1vZGUgPT0gRlBTQ1JfUk9VTkRfTkVBUkVTVCkgeworCQkJaW5jciA9IDB4ODAwMDAwMDA7CisJCQlpZiAoKGQgJiAxKSA9PSAwKQorCQkJCWluY3IgLT0gMTsKKwkJfSBlbHNlIGlmIChybW9kZSA9PSBGUFNDUl9ST1VORF9UT1pFUk8pIHsKKwkJCWluY3IgPSAwOworCQl9IGVsc2UgaWYgKChybW9kZSA9PSBGUFNDUl9ST1VORF9QTFVTSU5GKSBeICh2c20uc2lnbiAhPSAwKSkgeworCQkJaW5jciA9IH4wOworCQl9CisKKwkJaWYgKChyZW0gKyBpbmNyKSA8IHJlbSkgeworCQkJaWYgKGQgPCAweGZmZmZmZmZmKQorCQkJCWQgKz0gMTsKKwkJCWVsc2UKKwkJCQlleGNlcHRpb25zIHw9IEZQU0NSX0lPQzsKKwkJfQorCisJCWlmIChkICYmIHZzbS5zaWduKSB7CisJCQlkID0gMDsKKwkJCWV4Y2VwdGlvbnMgfD0gRlBTQ1JfSU9DOworCQl9IGVsc2UgaWYgKHJlbSkKKwkJCWV4Y2VwdGlvbnMgfD0gRlBTQ1JfSVhDOworCX0gZWxzZSB7CisJCWQgPSAwOworCQlpZiAodnNtLmV4cG9uZW50IHwgdnNtLnNpZ25pZmljYW5kKSB7CisJCQlleGNlcHRpb25zIHw9IEZQU0NSX0lYQzsKKwkJCWlmIChybW9kZSA9PSBGUFNDUl9ST1VORF9QTFVTSU5GICYmIHZzbS5zaWduID09IDApCisJCQkJZCA9IDE7CisJCQllbHNlIGlmIChybW9kZSA9PSBGUFNDUl9ST1VORF9NSU5VU0lORiAmJiB2c20uc2lnbikgeworCQkJCWQgPSAwOworCQkJCWV4Y2VwdGlvbnMgfD0gRlBTQ1JfSU9DOworCQkJfQorCQl9CisJfQorCisJcHJfZGVidWcoIlZGUDogZnRvdWk6IGQocyVkKT0lMDh4IGV4Y2VwdGlvbnM9JTA4eFxuIiwgc2QsIGQsIGV4Y2VwdGlvbnMpOworCisJdmZwX3B1dF9mbG9hdChzZCwgZCk7CisKKwlyZXR1cm4gZXhjZXB0aW9uczsKK30KKworc3RhdGljIHUzMiB2ZnBfc2luZ2xlX2Z0b3VpeihpbnQgc2QsIGludCB1bnVzZWQsIHMzMiBtLCB1MzIgZnBzY3IpCit7CisJcmV0dXJuIHZmcF9zaW5nbGVfZnRvdWkoc2QsIHVudXNlZCwgbSwgRlBTQ1JfUk9VTkRfVE9aRVJPKTsKK30KKworc3RhdGljIHUzMiB2ZnBfc2luZ2xlX2Z0b3NpKGludCBzZCwgaW50IHVudXNlZCwgczMyIG0sIHUzMiBmcHNjcikKK3sKKwlzdHJ1Y3QgdmZwX3NpbmdsZSB2c207CisJdTMyIGQsIGV4Y2VwdGlvbnMgPSAwOworCWludCBybW9kZSA9IGZwc2NyICYgRlBTQ1JfUk1PREVfTUFTSzsKKworCXZmcF9zaW5nbGVfdW5wYWNrKCZ2c20sIG0pOworCXZmcF9zaW5nbGVfZHVtcCgiVlNNIiwgJnZzbSk7CisKKwkvKgorCSAqIERvIHdlIGhhdmUgYSBkZW5vcm1hbGlzZWQgbnVtYmVyPworCSAqLworCWlmICh2ZnBfc2luZ2xlX3R5cGUoJnZzbSkgJiBWRlBfREVOT1JNQUwpCisJCWV4Y2VwdGlvbnMgfD0gRlBTQ1JfSURDOworCisJaWYgKHZzbS5leHBvbmVudCA+PSAxMjcgKyAzMikgeworCQkvKgorCQkgKiBtID49IDJeMzEtMl43OiBpbnZhbGlkCisJCSAqLworCQlkID0gMHg3ZmZmZmZmZjsKKwkJaWYgKHZzbS5zaWduKQorCQkJZCA9IH5kOworCQlleGNlcHRpb25zIHw9IEZQU0NSX0lPQzsKKwl9IGVsc2UgaWYgKHZzbS5leHBvbmVudCA+PSAxMjcgLSAxKSB7CisJCWludCBzaGlmdCA9IDEyNyArIDMxIC0gdnNtLmV4cG9uZW50OworCQl1MzIgcmVtLCBpbmNyID0gMDsKKworCQkvKiAyXjAgPD0gbSA8PSAyXjMxLTJeNyAqLworCQlkID0gKHZzbS5zaWduaWZpY2FuZCA8PCAxKSA+PiBzaGlmdDsKKwkJcmVtID0gdnNtLnNpZ25pZmljYW5kIDw8ICgzMyAtIHNoaWZ0KTsKKworCQlpZiAocm1vZGUgPT0gRlBTQ1JfUk9VTkRfTkVBUkVTVCkgeworCQkJaW5jciA9IDB4ODAwMDAwMDA7CisJCQlpZiAoKGQgJiAxKSA9PSAwKQorCQkJCWluY3IgLT0gMTsKKwkJfSBlbHNlIGlmIChybW9kZSA9PSBGUFNDUl9ST1VORF9UT1pFUk8pIHsKKwkJCWluY3IgPSAwOworCQl9IGVsc2UgaWYgKChybW9kZSA9PSBGUFNDUl9ST1VORF9QTFVTSU5GKSBeICh2c20uc2lnbiAhPSAwKSkgeworCQkJaW5jciA9IH4wOworCQl9CisKKwkJaWYgKChyZW0gKyBpbmNyKSA8IHJlbSAmJiBkIDwgMHhmZmZmZmZmZikKKwkJCWQgKz0gMTsKKwkJaWYgKGQgPiAweDdmZmZmZmZmICsgKHZzbS5zaWduICE9IDApKSB7CisJCQlkID0gMHg3ZmZmZmZmZiArICh2c20uc2lnbiAhPSAwKTsKKwkJCWV4Y2VwdGlvbnMgfD0gRlBTQ1JfSU9DOworCQl9IGVsc2UgaWYgKHJlbSkKKwkJCWV4Y2VwdGlvbnMgfD0gRlBTQ1JfSVhDOworCisJCWlmICh2c20uc2lnbikKKwkJCWQgPSAtZDsKKwl9IGVsc2UgeworCQlkID0gMDsKKwkJaWYgKHZzbS5leHBvbmVudCB8IHZzbS5zaWduaWZpY2FuZCkgeworCQkJZXhjZXB0aW9ucyB8PSBGUFNDUl9JWEM7CisJCQlpZiAocm1vZGUgPT0gRlBTQ1JfUk9VTkRfUExVU0lORiAmJiB2c20uc2lnbiA9PSAwKQorCQkJCWQgPSAxOworCQkJZWxzZSBpZiAocm1vZGUgPT0gRlBTQ1JfUk9VTkRfTUlOVVNJTkYgJiYgdnNtLnNpZ24pCisJCQkJZCA9IC0xOworCQl9CisJfQorCisJcHJfZGVidWcoIlZGUDogZnRvc2k6IGQocyVkKT0lMDh4IGV4Y2VwdGlvbnM9JTA4eFxuIiwgc2QsIGQsIGV4Y2VwdGlvbnMpOworCisJdmZwX3B1dF9mbG9hdChzZCwgKHMzMilkKTsKKworCXJldHVybiBleGNlcHRpb25zOworfQorCitzdGF0aWMgdTMyIHZmcF9zaW5nbGVfZnRvc2l6KGludCBzZCwgaW50IHVudXNlZCwgczMyIG0sIHUzMiBmcHNjcikKK3sKKwlyZXR1cm4gdmZwX3NpbmdsZV9mdG9zaShzZCwgdW51c2VkLCBtLCBGUFNDUl9ST1VORF9UT1pFUk8pOworfQorCitzdGF0aWMgdTMyICgqIGNvbnN0IGZvcF9leHRmbnNbMzJdKShpbnQgc2QsIGludCB1bnVzZWQsIHMzMiBtLCB1MzIgZnBzY3IpID0geworCVtGRVhUX1RPX0lEWChGRVhUX0ZDUFkpXQk9IHZmcF9zaW5nbGVfZmNweSwKKwlbRkVYVF9UT19JRFgoRkVYVF9GQUJTKV0JPSB2ZnBfc2luZ2xlX2ZhYnMsCisJW0ZFWFRfVE9fSURYKEZFWFRfRk5FRyldCT0gdmZwX3NpbmdsZV9mbmVnLAorCVtGRVhUX1RPX0lEWChGRVhUX0ZTUVJUKV0JPSB2ZnBfc2luZ2xlX2ZzcXJ0LAorCVtGRVhUX1RPX0lEWChGRVhUX0ZDTVApXQk9IHZmcF9zaW5nbGVfZmNtcCwKKwlbRkVYVF9UT19JRFgoRkVYVF9GQ01QRSldCT0gdmZwX3NpbmdsZV9mY21wZSwKKwlbRkVYVF9UT19JRFgoRkVYVF9GQ01QWildCT0gdmZwX3NpbmdsZV9mY21weiwKKwlbRkVYVF9UT19JRFgoRkVYVF9GQ01QRVopXQk9IHZmcF9zaW5nbGVfZmNtcGV6LAorCVtGRVhUX1RPX0lEWChGRVhUX0ZDVlQpXQk9IHZmcF9zaW5nbGVfZmN2dGQsCisJW0ZFWFRfVE9fSURYKEZFWFRfRlVJVE8pXQk9IHZmcF9zaW5nbGVfZnVpdG8sCisJW0ZFWFRfVE9fSURYKEZFWFRfRlNJVE8pXQk9IHZmcF9zaW5nbGVfZnNpdG8sCisJW0ZFWFRfVE9fSURYKEZFWFRfRlRPVUkpXQk9IHZmcF9zaW5nbGVfZnRvdWksCisJW0ZFWFRfVE9fSURYKEZFWFRfRlRPVUlaKV0JPSB2ZnBfc2luZ2xlX2Z0b3VpeiwKKwlbRkVYVF9UT19JRFgoRkVYVF9GVE9TSSldCT0gdmZwX3NpbmdsZV9mdG9zaSwKKwlbRkVYVF9UT19JRFgoRkVYVF9GVE9TSVopXQk9IHZmcF9zaW5nbGVfZnRvc2l6LAorfTsKKworCisKKworCitzdGF0aWMgdTMyCit2ZnBfc2luZ2xlX2ZhZGRfbm9ubnVtYmVyKHN0cnVjdCB2ZnBfc2luZ2xlICp2c2QsIHN0cnVjdCB2ZnBfc2luZ2xlICp2c24sCisJCQkgIHN0cnVjdCB2ZnBfc2luZ2xlICp2c20sIHUzMiBmcHNjcikKK3sKKwlzdHJ1Y3QgdmZwX3NpbmdsZSAqdnNwOworCXUzMiBleGNlcHRpb25zID0gMDsKKwlpbnQgdG4sIHRtOworCisJdG4gPSB2ZnBfc2luZ2xlX3R5cGUodnNuKTsKKwl0bSA9IHZmcF9zaW5nbGVfdHlwZSh2c20pOworCisJaWYgKHRuICYgdG0gJiBWRlBfSU5GSU5JVFkpIHsKKwkJLyoKKwkJICogVHdvIGluZmluaXRpZXMuICBBcmUgdGhleSBkaWZmZXJlbnQgc2lnbnM/CisJCSAqLworCQlpZiAodnNuLT5zaWduIF4gdnNtLT5zaWduKSB7CisJCQkvKgorCQkJICogZGlmZmVyZW50IHNpZ25zIC0+IGludmFsaWQKKwkJCSAqLworCQkJZXhjZXB0aW9ucyA9IEZQU0NSX0lPQzsKKwkJCXZzcCA9ICZ2ZnBfc2luZ2xlX2RlZmF1bHRfcW5hbjsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBzYW1lIHNpZ25zIC0+IHZhbGlkCisJCQkgKi8KKwkJCXZzcCA9IHZzbjsKKwkJfQorCX0gZWxzZSBpZiAodG4gJiBWRlBfSU5GSU5JVFkgJiYgdG0gJiBWRlBfTlVNQkVSKSB7CisJCS8qCisJCSAqIE9uZSBpbmZpbml0eSBhbmQgb25lIG51bWJlciAtPiBpbmZpbml0eQorCQkgKi8KKwkJdnNwID0gdnNuOworCX0gZWxzZSB7CisJCS8qCisJCSAqICduJyBpcyBhIE5hTiBvZiBzb21lIHR5cGUKKwkJICovCisJCXJldHVybiB2ZnBfcHJvcGFnYXRlX25hbih2c2QsIHZzbiwgdnNtLCBmcHNjcik7CisJfQorCSp2c2QgPSAqdnNwOworCXJldHVybiBleGNlcHRpb25zOworfQorCitzdGF0aWMgdTMyCit2ZnBfc2luZ2xlX2FkZChzdHJ1Y3QgdmZwX3NpbmdsZSAqdnNkLCBzdHJ1Y3QgdmZwX3NpbmdsZSAqdnNuLAorCSAgICAgICBzdHJ1Y3QgdmZwX3NpbmdsZSAqdnNtLCB1MzIgZnBzY3IpCit7CisJdTMyIGV4cF9kaWZmLCBtX3NpZzsKKworCWlmICh2c24tPnNpZ25pZmljYW5kICYgMHg4MDAwMDAwMCB8fAorCSAgICB2c20tPnNpZ25pZmljYW5kICYgMHg4MDAwMDAwMCkgeworCQlwcl9pbmZvKCJWRlA6IGJhZCBGUCB2YWx1ZXMgaW4gJXNcbiIsIF9fZnVuY19fKTsKKwkJdmZwX3NpbmdsZV9kdW1wKCJWU04iLCB2c24pOworCQl2ZnBfc2luZ2xlX2R1bXAoIlZTTSIsIHZzbSk7CisJfQorCisJLyoKKwkgKiBFbnN1cmUgdGhhdCAnbicgaXMgdGhlIGxhcmdlc3QgbWFnbml0dWRlIG51bWJlci4gIE5vdGUgdGhhdAorCSAqIGlmICduJyBhbmQgJ20nIGhhdmUgZXF1YWwgZXhwb25lbnRzLCB3ZSBkbyBub3Qgc3dhcCB0aGVtLgorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IE5hTiBwcm9wYWdhdGlvbiB3b3JrcyBjb3JyZWN0bHkuCisJICovCisJaWYgKHZzbi0+ZXhwb25lbnQgPCB2c20tPmV4cG9uZW50KSB7CisJCXN0cnVjdCB2ZnBfc2luZ2xlICp0ID0gdnNuOworCQl2c24gPSB2c207CisJCXZzbSA9IHQ7CisJfQorCisJLyoKKwkgKiBJcyAnbicgYW4gaW5maW5pdHkgb3IgYSBOYU4/ICBOb3RlIHRoYXQgJ20nIG1heSBiZSBhIG51bWJlciwKKwkgKiBpbmZpbml0eSBvciBhIE5hTiBoZXJlLgorCSAqLworCWlmICh2c24tPmV4cG9uZW50ID09IDI1NSkKKwkJcmV0dXJuIHZmcF9zaW5nbGVfZmFkZF9ub25udW1iZXIodnNkLCB2c24sIHZzbSwgZnBzY3IpOworCisJLyoKKwkgKiBXZSBoYXZlIHR3byBwcm9wZXIgbnVtYmVycywgd2hlcmUgJ3ZzbicgaXMgdGhlIGxhcmdlciBtYWduaXR1ZGUuCisJICoKKwkgKiBDb3B5ICduJyB0byAnZCcgYmVmb3JlIGRvaW5nIHRoZSBhcml0aG1ldGljLgorCSAqLworCSp2c2QgPSAqdnNuOworCisJLyoKKwkgKiBBbGlnbiBib3RoIG51bWJlcnMuCisJICovCisJZXhwX2RpZmYgPSB2c24tPmV4cG9uZW50IC0gdnNtLT5leHBvbmVudDsKKwltX3NpZyA9IHZmcF9zaGlmdHJpZ2h0MzJqYW1taW5nKHZzbS0+c2lnbmlmaWNhbmQsIGV4cF9kaWZmKTsKKworCS8qCisJICogSWYgdGhlIHNpZ25zIGFyZSBkaWZmZXJlbnQsIHdlIGFyZSByZWFsbHkgc3VidHJhY3RpbmcuCisJICovCisJaWYgKHZzbi0+c2lnbiBeIHZzbS0+c2lnbikgeworCQltX3NpZyA9IHZzbi0+c2lnbmlmaWNhbmQgLSBtX3NpZzsKKwkJaWYgKChzMzIpbV9zaWcgPCAwKSB7CisJCQl2c2QtPnNpZ24gPSB2ZnBfc2lnbl9uZWdhdGUodnNkLT5zaWduKTsKKwkJCW1fc2lnID0gLW1fc2lnOworCQl9IGVsc2UgaWYgKG1fc2lnID09IDApIHsKKwkJCXZzZC0+c2lnbiA9IChmcHNjciAmIEZQU0NSX1JNT0RFX01BU0spID09CisJCQkJICAgICAgRlBTQ1JfUk9VTkRfTUlOVVNJTkYgPyAweDgwMDAgOiAwOworCQl9CisJfSBlbHNlIHsKKwkJbV9zaWcgPSB2c24tPnNpZ25pZmljYW5kICsgbV9zaWc7CisJfQorCXZzZC0+c2lnbmlmaWNhbmQgPSBtX3NpZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyCit2ZnBfc2luZ2xlX211bHRpcGx5KHN0cnVjdCB2ZnBfc2luZ2xlICp2c2QsIHN0cnVjdCB2ZnBfc2luZ2xlICp2c24sIHN0cnVjdCB2ZnBfc2luZ2xlICp2c20sIHUzMiBmcHNjcikKK3sKKwl2ZnBfc2luZ2xlX2R1bXAoIlZTTiIsIHZzbik7CisJdmZwX3NpbmdsZV9kdW1wKCJWU00iLCB2c20pOworCisJLyoKKwkgKiBFbnN1cmUgdGhhdCAnbicgaXMgdGhlIGxhcmdlc3QgbWFnbml0dWRlIG51bWJlci4gIE5vdGUgdGhhdAorCSAqIGlmICduJyBhbmQgJ20nIGhhdmUgZXF1YWwgZXhwb25lbnRzLCB3ZSBkbyBub3Qgc3dhcCB0aGVtLgorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IE5hTiBwcm9wYWdhdGlvbiB3b3JrcyBjb3JyZWN0bHkuCisJICovCisJaWYgKHZzbi0+ZXhwb25lbnQgPCB2c20tPmV4cG9uZW50KSB7CisJCXN0cnVjdCB2ZnBfc2luZ2xlICp0ID0gdnNuOworCQl2c24gPSB2c207CisJCXZzbSA9IHQ7CisJCXByX2RlYnVnKCJWRlA6IHN3YXBwaW5nIE0gPC0+IE5cbiIpOworCX0KKworCXZzZC0+c2lnbiA9IHZzbi0+c2lnbiBeIHZzbS0+c2lnbjsKKworCS8qCisJICogSWYgJ24nIGlzIGFuIGluZmluaXR5IG9yIE5hTiwgaGFuZGxlIGl0LiAgJ20nIG1heSBiZSBhbnl0aGluZy4KKwkgKi8KKwlpZiAodnNuLT5leHBvbmVudCA9PSAyNTUpIHsKKwkJaWYgKHZzbi0+c2lnbmlmaWNhbmQgfHwgKHZzbS0+ZXhwb25lbnQgPT0gMjU1ICYmIHZzbS0+c2lnbmlmaWNhbmQpKQorCQkJcmV0dXJuIHZmcF9wcm9wYWdhdGVfbmFuKHZzZCwgdnNuLCB2c20sIGZwc2NyKTsKKwkJaWYgKCh2c20tPmV4cG9uZW50IHwgdnNtLT5zaWduaWZpY2FuZCkgPT0gMCkgeworCQkJKnZzZCA9IHZmcF9zaW5nbGVfZGVmYXVsdF9xbmFuOworCQkJcmV0dXJuIEZQU0NSX0lPQzsKKwkJfQorCQl2c2QtPmV4cG9uZW50ID0gdnNuLT5leHBvbmVudDsKKwkJdnNkLT5zaWduaWZpY2FuZCA9IDA7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogSWYgJ20nIGlzIHplcm8sIHRoZSByZXN1bHQgaXMgYWx3YXlzIHplcm8uICBJbiB0aGlzIGNhc2UsCisJICogJ24nIG1heSBiZSB6ZXJvIG9yIGEgbnVtYmVyLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIgd2hpY2guCisJICovCisJaWYgKCh2c20tPmV4cG9uZW50IHwgdnNtLT5zaWduaWZpY2FuZCkgPT0gMCkgeworCQl2c2QtPmV4cG9uZW50ID0gMDsKKwkJdnNkLT5zaWduaWZpY2FuZCA9IDA7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogV2UgYWRkIDIgdG8gdGhlIGRlc3RpbmF0aW9uIGV4cG9uZW50IGZvciB0aGUgc2FtZSByZWFzb24gYXMKKwkgKiB0aGUgYWRkaXRpb24gY2FzZSAtIHRob3VnaCB0aGlzIHRpbWUgd2UgaGF2ZSArMSBmcm9tIGVhY2gKKwkgKiBpbnB1dCBvcGVyYW5kLgorCSAqLworCXZzZC0+ZXhwb25lbnQgPSB2c24tPmV4cG9uZW50ICsgdnNtLT5leHBvbmVudCAtIDEyNyArIDI7CisJdnNkLT5zaWduaWZpY2FuZCA9IHZmcF9oaTY0dG8zMmphbW1pbmcoKHU2NCl2c24tPnNpZ25pZmljYW5kICogdnNtLT5zaWduaWZpY2FuZCk7CisKKwl2ZnBfc2luZ2xlX2R1bXAoIlZTRCIsIHZzZCk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTkVHX01VTFRJUExZCSgxIDw8IDApCisjZGVmaW5lIE5FR19TVUJUUkFDVAkoMSA8PCAxKQorCitzdGF0aWMgdTMyCit2ZnBfc2luZ2xlX211bHRpcGx5X2FjY3VtdWxhdGUoaW50IHNkLCBpbnQgc24sIHMzMiBtLCB1MzIgZnBzY3IsIHUzMiBuZWdhdGUsIGNoYXIgKmZ1bmMpCit7CisJc3RydWN0IHZmcF9zaW5nbGUgdnNkLCB2c3AsIHZzbiwgdnNtOworCXUzMiBleGNlcHRpb25zOworCXMzMiB2OworCisJdiA9IHZmcF9nZXRfZmxvYXQoc24pOworCXByX2RlYnVnKCJWRlA6IHMldSA9ICUwOHhcbiIsIHNuLCB2KTsKKwl2ZnBfc2luZ2xlX3VucGFjaygmdnNuLCB2KTsKKwlpZiAodnNuLmV4cG9uZW50ID09IDAgJiYgdnNuLnNpZ25pZmljYW5kKQorCQl2ZnBfc2luZ2xlX25vcm1hbGlzZV9kZW5vcm1hbCgmdnNuKTsKKworCXZmcF9zaW5nbGVfdW5wYWNrKCZ2c20sIG0pOworCWlmICh2c20uZXhwb25lbnQgPT0gMCAmJiB2c20uc2lnbmlmaWNhbmQpCisJCXZmcF9zaW5nbGVfbm9ybWFsaXNlX2Rlbm9ybWFsKCZ2c20pOworCisJZXhjZXB0aW9ucyA9IHZmcF9zaW5nbGVfbXVsdGlwbHkoJnZzcCwgJnZzbiwgJnZzbSwgZnBzY3IpOworCWlmIChuZWdhdGUgJiBORUdfTVVMVElQTFkpCisJCXZzcC5zaWduID0gdmZwX3NpZ25fbmVnYXRlKHZzcC5zaWduKTsKKworCXYgPSB2ZnBfZ2V0X2Zsb2F0KHNkKTsKKwlwcl9kZWJ1ZygiVkZQOiBzJXUgPSAlMDh4XG4iLCBzZCwgdik7CisJdmZwX3NpbmdsZV91bnBhY2soJnZzbiwgdik7CisJaWYgKG5lZ2F0ZSAmIE5FR19TVUJUUkFDVCkKKwkJdnNuLnNpZ24gPSB2ZnBfc2lnbl9uZWdhdGUodnNuLnNpZ24pOworCisJZXhjZXB0aW9ucyB8PSB2ZnBfc2luZ2xlX2FkZCgmdnNkLCAmdnNuLCAmdnNwLCBmcHNjcik7CisKKwlyZXR1cm4gdmZwX3NpbmdsZV9ub3JtYWxpc2Vyb3VuZChzZCwgJnZzZCwgZnBzY3IsIGV4Y2VwdGlvbnMsIGZ1bmMpOworfQorCisvKgorICogU3RhbmRhcmQgb3BlcmF0aW9ucworICovCisKKy8qCisgKiBzZCA9IHNkICsgKHNuICogc20pCisgKi8KK3N0YXRpYyB1MzIgdmZwX3NpbmdsZV9mbWFjKGludCBzZCwgaW50IHNuLCBzMzIgbSwgdTMyIGZwc2NyKQoreworCXJldHVybiB2ZnBfc2luZ2xlX211bHRpcGx5X2FjY3VtdWxhdGUoc2QsIHNuLCBtLCBmcHNjciwgMCwgImZtYWMiKTsKK30KKworLyoKKyAqIHNkID0gc2QgLSAoc24gKiBzbSkKKyAqLworc3RhdGljIHUzMiB2ZnBfc2luZ2xlX2ZubWFjKGludCBzZCwgaW50IHNuLCBzMzIgbSwgdTMyIGZwc2NyKQoreworCXJldHVybiB2ZnBfc2luZ2xlX211bHRpcGx5X2FjY3VtdWxhdGUoc2QsIHNuLCBtLCBmcHNjciwgTkVHX01VTFRJUExZLCAiZm5tYWMiKTsKK30KKworLyoKKyAqIHNkID0gLXNkICsgKHNuICogc20pCisgKi8KK3N0YXRpYyB1MzIgdmZwX3NpbmdsZV9mbXNjKGludCBzZCwgaW50IHNuLCBzMzIgbSwgdTMyIGZwc2NyKQoreworCXJldHVybiB2ZnBfc2luZ2xlX211bHRpcGx5X2FjY3VtdWxhdGUoc2QsIHNuLCBtLCBmcHNjciwgTkVHX1NVQlRSQUNULCAiZm1zYyIpOworfQorCisvKgorICogc2QgPSAtc2QgLSAoc24gKiBzbSkKKyAqLworc3RhdGljIHUzMiB2ZnBfc2luZ2xlX2ZubXNjKGludCBzZCwgaW50IHNuLCBzMzIgbSwgdTMyIGZwc2NyKQoreworCXJldHVybiB2ZnBfc2luZ2xlX211bHRpcGx5X2FjY3VtdWxhdGUoc2QsIHNuLCBtLCBmcHNjciwgTkVHX1NVQlRSQUNUIHwgTkVHX01VTFRJUExZLCAiZm5tc2MiKTsKK30KKworLyoKKyAqIHNkID0gc24gKiBzbQorICovCitzdGF0aWMgdTMyIHZmcF9zaW5nbGVfZm11bChpbnQgc2QsIGludCBzbiwgczMyIG0sIHUzMiBmcHNjcikKK3sKKwlzdHJ1Y3QgdmZwX3NpbmdsZSB2c2QsIHZzbiwgdnNtOworCXUzMiBleGNlcHRpb25zOworCXMzMiBuID0gdmZwX2dldF9mbG9hdChzbik7CisKKwlwcl9kZWJ1ZygiVkZQOiBzJXUgPSAlMDh4XG4iLCBzbiwgbik7CisKKwl2ZnBfc2luZ2xlX3VucGFjaygmdnNuLCBuKTsKKwlpZiAodnNuLmV4cG9uZW50ID09IDAgJiYgdnNuLnNpZ25pZmljYW5kKQorCQl2ZnBfc2luZ2xlX25vcm1hbGlzZV9kZW5vcm1hbCgmdnNuKTsKKworCXZmcF9zaW5nbGVfdW5wYWNrKCZ2c20sIG0pOworCWlmICh2c20uZXhwb25lbnQgPT0gMCAmJiB2c20uc2lnbmlmaWNhbmQpCisJCXZmcF9zaW5nbGVfbm9ybWFsaXNlX2Rlbm9ybWFsKCZ2c20pOworCisJZXhjZXB0aW9ucyA9IHZmcF9zaW5nbGVfbXVsdGlwbHkoJnZzZCwgJnZzbiwgJnZzbSwgZnBzY3IpOworCXJldHVybiB2ZnBfc2luZ2xlX25vcm1hbGlzZXJvdW5kKHNkLCAmdnNkLCBmcHNjciwgZXhjZXB0aW9ucywgImZtdWwiKTsKK30KKworLyoKKyAqIHNkID0gLShzbiAqIHNtKQorICovCitzdGF0aWMgdTMyIHZmcF9zaW5nbGVfZm5tdWwoaW50IHNkLCBpbnQgc24sIHMzMiBtLCB1MzIgZnBzY3IpCit7CisJc3RydWN0IHZmcF9zaW5nbGUgdnNkLCB2c24sIHZzbTsKKwl1MzIgZXhjZXB0aW9uczsKKwlzMzIgbiA9IHZmcF9nZXRfZmxvYXQoc24pOworCisJcHJfZGVidWcoIlZGUDogcyV1ID0gJTA4eFxuIiwgc24sIG4pOworCisJdmZwX3NpbmdsZV91bnBhY2soJnZzbiwgbik7CisJaWYgKHZzbi5leHBvbmVudCA9PSAwICYmIHZzbi5zaWduaWZpY2FuZCkKKwkJdmZwX3NpbmdsZV9ub3JtYWxpc2VfZGVub3JtYWwoJnZzbik7CisKKwl2ZnBfc2luZ2xlX3VucGFjaygmdnNtLCBtKTsKKwlpZiAodnNtLmV4cG9uZW50ID09IDAgJiYgdnNtLnNpZ25pZmljYW5kKQorCQl2ZnBfc2luZ2xlX25vcm1hbGlzZV9kZW5vcm1hbCgmdnNtKTsKKworCWV4Y2VwdGlvbnMgPSB2ZnBfc2luZ2xlX211bHRpcGx5KCZ2c2QsICZ2c24sICZ2c20sIGZwc2NyKTsKKwl2c2Quc2lnbiA9IHZmcF9zaWduX25lZ2F0ZSh2c2Quc2lnbik7CisJcmV0dXJuIHZmcF9zaW5nbGVfbm9ybWFsaXNlcm91bmQoc2QsICZ2c2QsIGZwc2NyLCBleGNlcHRpb25zLCAiZm5tdWwiKTsKK30KKworLyoKKyAqIHNkID0gc24gKyBzbQorICovCitzdGF0aWMgdTMyIHZmcF9zaW5nbGVfZmFkZChpbnQgc2QsIGludCBzbiwgczMyIG0sIHUzMiBmcHNjcikKK3sKKwlzdHJ1Y3QgdmZwX3NpbmdsZSB2c2QsIHZzbiwgdnNtOworCXUzMiBleGNlcHRpb25zOworCXMzMiBuID0gdmZwX2dldF9mbG9hdChzbik7CisKKwlwcl9kZWJ1ZygiVkZQOiBzJXUgPSAlMDh4XG4iLCBzbiwgbik7CisKKwkvKgorCSAqIFVucGFjayBhbmQgbm9ybWFsaXNlIGRlbm9ybWFscy4KKwkgKi8KKwl2ZnBfc2luZ2xlX3VucGFjaygmdnNuLCBuKTsKKwlpZiAodnNuLmV4cG9uZW50ID09IDAgJiYgdnNuLnNpZ25pZmljYW5kKQorCQl2ZnBfc2luZ2xlX25vcm1hbGlzZV9kZW5vcm1hbCgmdnNuKTsKKworCXZmcF9zaW5nbGVfdW5wYWNrKCZ2c20sIG0pOworCWlmICh2c20uZXhwb25lbnQgPT0gMCAmJiB2c20uc2lnbmlmaWNhbmQpCisJCXZmcF9zaW5nbGVfbm9ybWFsaXNlX2Rlbm9ybWFsKCZ2c20pOworCisJZXhjZXB0aW9ucyA9IHZmcF9zaW5nbGVfYWRkKCZ2c2QsICZ2c24sICZ2c20sIGZwc2NyKTsKKworCXJldHVybiB2ZnBfc2luZ2xlX25vcm1hbGlzZXJvdW5kKHNkLCAmdnNkLCBmcHNjciwgZXhjZXB0aW9ucywgImZhZGQiKTsKK30KKworLyoKKyAqIHNkID0gc24gLSBzbQorICovCitzdGF0aWMgdTMyIHZmcF9zaW5nbGVfZnN1YihpbnQgc2QsIGludCBzbiwgczMyIG0sIHUzMiBmcHNjcikKK3sKKwkvKgorCSAqIFN1YnRyYWN0aW9uIGlzIGFkZGl0aW9uIHdpdGggb25lIHNpZ24gaW52ZXJ0ZWQuCisJICovCisJcmV0dXJuIHZmcF9zaW5nbGVfZmFkZChzZCwgc24sIHZmcF9zaW5nbGVfcGFja2VkX25lZ2F0ZShtKSwgZnBzY3IpOworfQorCisvKgorICogc2QgPSBzbiAvIHNtCisgKi8KK3N0YXRpYyB1MzIgdmZwX3NpbmdsZV9mZGl2KGludCBzZCwgaW50IHNuLCBzMzIgbSwgdTMyIGZwc2NyKQoreworCXN0cnVjdCB2ZnBfc2luZ2xlIHZzZCwgdnNuLCB2c207CisJdTMyIGV4Y2VwdGlvbnMgPSAwOworCXMzMiBuID0gdmZwX2dldF9mbG9hdChzbik7CisJaW50IHRtLCB0bjsKKworCXByX2RlYnVnKCJWRlA6IHMldSA9ICUwOHhcbiIsIHNuLCBuKTsKKworCXZmcF9zaW5nbGVfdW5wYWNrKCZ2c24sIG4pOworCXZmcF9zaW5nbGVfdW5wYWNrKCZ2c20sIG0pOworCisJdnNkLnNpZ24gPSB2c24uc2lnbiBeIHZzbS5zaWduOworCisJdG4gPSB2ZnBfc2luZ2xlX3R5cGUoJnZzbik7CisJdG0gPSB2ZnBfc2luZ2xlX3R5cGUoJnZzbSk7CisKKwkvKgorCSAqIElzIG4gYSBOQU4/CisJICovCisJaWYgKHRuICYgVkZQX05BTikKKwkJZ290byB2c25fbmFuOworCisJLyoKKwkgKiBJcyBtIGEgTkFOPworCSAqLworCWlmICh0bSAmIFZGUF9OQU4pCisJCWdvdG8gdnNtX25hbjsKKworCS8qCisJICogSWYgbiBhbmQgbSBhcmUgaW5maW5pdHksIHRoZSByZXN1bHQgaXMgaW52YWxpZAorCSAqIElmIG4gYW5kIG0gYXJlIHplcm8sIHRoZSByZXN1bHQgaXMgaW52YWxpZAorCSAqLworCWlmICh0bSAmIHRuICYgKFZGUF9JTkZJTklUWXxWRlBfWkVSTykpCisJCWdvdG8gaW52YWxpZDsKKworCS8qCisJICogSWYgbiBpcyBpbmZpbml0eSwgdGhlIHJlc3VsdCBpcyBpbmZpbml0eQorCSAqLworCWlmICh0biAmIFZGUF9JTkZJTklUWSkKKwkJZ290byBpbmZpbml0eTsKKworCS8qCisJICogSWYgbSBpcyB6ZXJvLCByYWlzZSBkaXYwIGV4Y2VwdGlvbgorCSAqLworCWlmICh0bSAmIFZGUF9aRVJPKQorCQlnb3RvIGRpdnplcm87CisKKwkvKgorCSAqIElmIG0gaXMgaW5maW5pdHksIG9yIG4gaXMgemVybywgdGhlIHJlc3VsdCBpcyB6ZXJvCisJICovCisJaWYgKHRtICYgVkZQX0lORklOSVRZIHx8IHRuICYgVkZQX1pFUk8pCisJCWdvdG8gemVybzsKKworCWlmICh0biAmIFZGUF9ERU5PUk1BTCkKKwkJdmZwX3NpbmdsZV9ub3JtYWxpc2VfZGVub3JtYWwoJnZzbik7CisJaWYgKHRtICYgVkZQX0RFTk9STUFMKQorCQl2ZnBfc2luZ2xlX25vcm1hbGlzZV9kZW5vcm1hbCgmdnNtKTsKKworCS8qCisJICogT2ssIHdlIGhhdmUgdHdvIG51bWJlcnMsIHdlIGNhbiBwZXJmb3JtIGRpdmlzaW9uLgorCSAqLworCXZzZC5leHBvbmVudCA9IHZzbi5leHBvbmVudCAtIHZzbS5leHBvbmVudCArIDEyNyAtIDE7CisJdnNtLnNpZ25pZmljYW5kIDw8PSAxOworCWlmICh2c20uc2lnbmlmaWNhbmQgPD0gKDIgKiB2c24uc2lnbmlmaWNhbmQpKSB7CisJCXZzbi5zaWduaWZpY2FuZCA+Pj0gMTsKKwkJdnNkLmV4cG9uZW50Kys7CisJfQorCXZzZC5zaWduaWZpY2FuZCA9ICgodTY0KXZzbi5zaWduaWZpY2FuZCA8PCAzMikgLyB2c20uc2lnbmlmaWNhbmQ7CisJaWYgKCh2c2Quc2lnbmlmaWNhbmQgJiAweDNmKSA9PSAwKQorCQl2c2Quc2lnbmlmaWNhbmQgfD0gKCh1NjQpdnNtLnNpZ25pZmljYW5kICogdnNkLnNpZ25pZmljYW5kICE9ICh1NjQpdnNuLnNpZ25pZmljYW5kIDw8IDMyKTsKKworCXJldHVybiB2ZnBfc2luZ2xlX25vcm1hbGlzZXJvdW5kKHNkLCAmdnNkLCBmcHNjciwgMCwgImZkaXYiKTsKKworIHZzbl9uYW46CisJZXhjZXB0aW9ucyA9IHZmcF9wcm9wYWdhdGVfbmFuKCZ2c2QsICZ2c24sICZ2c20sIGZwc2NyKTsKKyBwYWNrOgorCXZmcF9wdXRfZmxvYXQoc2QsIHZmcF9zaW5nbGVfcGFjaygmdnNkKSk7CisJcmV0dXJuIGV4Y2VwdGlvbnM7CisKKyB2c21fbmFuOgorCWV4Y2VwdGlvbnMgPSB2ZnBfcHJvcGFnYXRlX25hbigmdnNkLCAmdnNtLCAmdnNuLCBmcHNjcik7CisJZ290byBwYWNrOworCisgemVybzoKKwl2c2QuZXhwb25lbnQgPSAwOworCXZzZC5zaWduaWZpY2FuZCA9IDA7CisJZ290byBwYWNrOworCisgZGl2emVybzoKKwlleGNlcHRpb25zID0gRlBTQ1JfRFpDOworIGluZmluaXR5OgorCXZzZC5leHBvbmVudCA9IDI1NTsKKwl2c2Quc2lnbmlmaWNhbmQgPSAwOworCWdvdG8gcGFjazsKKworIGludmFsaWQ6CisJdmZwX3B1dF9mbG9hdChzZCwgdmZwX3NpbmdsZV9wYWNrKCZ2ZnBfc2luZ2xlX2RlZmF1bHRfcW5hbikpOworCXJldHVybiBGUFNDUl9JT0M7Cit9CisKK3N0YXRpYyB1MzIgKCogY29uc3QgZm9wX2Zuc1sxNl0pKGludCBzZCwgaW50IHNuLCBzMzIgbSwgdTMyIGZwc2NyKSA9IHsKKwlbRk9QX1RPX0lEWChGT1BfRk1BQyldCT0gdmZwX3NpbmdsZV9mbWFjLAorCVtGT1BfVE9fSURYKEZPUF9GTk1BQyldCT0gdmZwX3NpbmdsZV9mbm1hYywKKwlbRk9QX1RPX0lEWChGT1BfRk1TQyldCT0gdmZwX3NpbmdsZV9mbXNjLAorCVtGT1BfVE9fSURYKEZPUF9GTk1TQyldCT0gdmZwX3NpbmdsZV9mbm1zYywKKwlbRk9QX1RPX0lEWChGT1BfRk1VTCldCT0gdmZwX3NpbmdsZV9mbXVsLAorCVtGT1BfVE9fSURYKEZPUF9GTk1VTCldCT0gdmZwX3NpbmdsZV9mbm11bCwKKwlbRk9QX1RPX0lEWChGT1BfRkFERCldCT0gdmZwX3NpbmdsZV9mYWRkLAorCVtGT1BfVE9fSURYKEZPUF9GU1VCKV0JPSB2ZnBfc2luZ2xlX2ZzdWIsCisJW0ZPUF9UT19JRFgoRk9QX0ZESVYpXQk9IHZmcF9zaW5nbGVfZmRpdiwKK307CisKKyNkZWZpbmUgRlJFR19CQU5LKHgpCSgoeCkgJiAweDE4KQorI2RlZmluZSBGUkVHX0lEWCh4KQkoKHgpICYgNykKKwordTMyIHZmcF9zaW5nbGVfY3Bkbyh1MzIgaW5zdCwgdTMyIGZwc2NyKQoreworCXUzMiBvcCA9IGluc3QgJiBGT1BfTUFTSzsKKwl1MzIgZXhjZXB0aW9ucyA9IDA7CisJdW5zaWduZWQgaW50IHNkID0gdmZwX2dldF9zZChpbnN0KTsKKwl1bnNpZ25lZCBpbnQgc24gPSB2ZnBfZ2V0X3NuKGluc3QpOworCXVuc2lnbmVkIGludCBzbSA9IHZmcF9nZXRfc20oaW5zdCk7CisJdW5zaWduZWQgaW50IHZlY2l0ciwgdmVjbGVuLCB2ZWNzdHJpZGU7CisJdTMyICgqZm9wKShpbnQsIGludCwgczMyLCB1MzIpOworCisJdmVjbGVuID0gZnBzY3IgJiBGUFNDUl9MRU5HVEhfTUFTSzsKKwl2ZWNzdHJpZGUgPSAxICsgKChmcHNjciAmIEZQU0NSX1NUUklERV9NQVNLKSA9PSBGUFNDUl9TVFJJREVfTUFTSyk7CisKKwkvKgorCSAqIElmIGRlc3RpbmF0aW9uIGJhbmsgaXMgemVybywgdmVjdG9yIGxlbmd0aCBpcyBhbHdheXMgJzEnLgorCSAqIEFSTSBEREkwMTAwRiBDNS4xLjMsIEM1LjMuMi4KKwkgKi8KKwlpZiAoRlJFR19CQU5LKHNkKSA9PSAwKQorCQl2ZWNsZW4gPSAwOworCisJcHJfZGVidWcoIlZGUDogdmVjc3RyaWRlPSV1IHZlY2xlbj0ldVxuIiwgdmVjc3RyaWRlLAorCQkgKHZlY2xlbiA+PiBGUFNDUl9MRU5HVEhfQklUKSArIDEpOworCisJZm9wID0gKG9wID09IEZPUF9FWFQpID8gZm9wX2V4dGZuc1tzbl0gOiBmb3BfZm5zW0ZPUF9UT19JRFgob3ApXTsKKwlpZiAoIWZvcCkKKwkJZ290byBpbnZhbGlkOworCisJZm9yICh2ZWNpdHIgPSAwOyB2ZWNpdHIgPD0gdmVjbGVuOyB2ZWNpdHIgKz0gMSA8PCBGUFNDUl9MRU5HVEhfQklUKSB7CisJCXMzMiBtID0gdmZwX2dldF9mbG9hdChzbSk7CisJCXUzMiBleGNlcHQ7CisKKwkJaWYgKG9wID09IEZPUF9FWFQpCisJCQlwcl9kZWJ1ZygiVkZQOiBpdHIlZCAocyV1KSA9IG9wWyV1XSAocyV1PSUwOHgpXG4iLAorCQkJCSB2ZWNpdHIgPj4gRlBTQ1JfTEVOR1RIX0JJVCwgc2QsIHNuLCBzbSwgbSk7CisJCWVsc2UKKwkJCXByX2RlYnVnKCJWRlA6IGl0ciVkIChzJXUpID0gKHMldSkgb3BbJXVdIChzJXU9JTA4eClcbiIsCisJCQkJIHZlY2l0ciA+PiBGUFNDUl9MRU5HVEhfQklULCBzZCwgc24sCisJCQkJIEZPUF9UT19JRFgob3ApLCBzbSwgbSk7CisKKwkJZXhjZXB0ID0gZm9wKHNkLCBzbiwgbSwgZnBzY3IpOworCQlwcl9kZWJ1ZygiVkZQOiBpdHIlZDogZXhjZXB0aW9ucz0lMDh4XG4iLAorCQkJIHZlY2l0ciA+PiBGUFNDUl9MRU5HVEhfQklULCBleGNlcHQpOworCisJCWV4Y2VwdGlvbnMgfD0gZXhjZXB0OworCisJCS8qCisJCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGNvbXBhcmlzb25zIG9ubHkgb3BlcmF0ZSBvbiBzY2FsYXJzOworCQkgKiBjb21wYXJpc29ucyBhbHdheXMgcmV0dXJuIHdpdGggb25lIEZQU0NSIHN0YXR1cyBiaXQgc2V0LgorCQkgKi8KKwkJaWYgKGV4Y2VwdCAmIChGUFNDUl9OfEZQU0NSX1p8RlBTQ1JfQ3xGUFNDUl9WKSkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIENIRUNLOiBJdCBhcHBlYXJzIHRvIGJlIHVuZGVmaW5lZCB3aGV0aGVyIHdlIHN0b3Agd2hlbgorCQkgKiB3ZSBlbmNvdW50ZXIgYW4gZXhjZXB0aW9uLiAgV2UgY29udGludWUuCisJCSAqLworCisJCXNkID0gRlJFR19CQU5LKHNkKSArICgoRlJFR19JRFgoc2QpICsgdmVjc3RyaWRlKSAmIDcpOworCQlzbiA9IEZSRUdfQkFOSyhzbikgKyAoKEZSRUdfSURYKHNuKSArIHZlY3N0cmlkZSkgJiA3KTsKKwkJaWYgKEZSRUdfQkFOSyhzbSkgIT0gMCkKKwkJCXNtID0gRlJFR19CQU5LKHNtKSArICgoRlJFR19JRFgoc20pICsgdmVjc3RyaWRlKSAmIDcpOworCX0KKwlyZXR1cm4gZXhjZXB0aW9uczsKKworIGludmFsaWQ6CisJcmV0dXJuICh1MzIpLTE7Cit9Cg==