From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oded Gabbay Subject: [PATCH v3 10/23] amdkfd: Add basic modules to amdkfd Date: Tue, 5 Aug 2014 18:30:38 +0300 Message-ID: <1407252651-3539-11-git-send-email-oded.gabbay@amd.com> References: <1407252651-3539-1-git-send-email-oded.gabbay@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from na01-bl2-obe.outbound.protection.outlook.com (mail-bl2lp0205.outbound.protection.outlook.com [207.46.163.205]) by gabe.freedesktop.org (Postfix) with ESMTP id 7989A6E4CF for ; Tue, 5 Aug 2014 08:32:44 -0700 (PDT) In-Reply-To: <1407252651-3539-1-git-send-email-oded.gabbay@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, David Airlie , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Alexander Deucher Cc: Andrew.Lewycky@amd.com, michel.daenzer@amd.com, Andrew Morton List-Id: dri-devel@lists.freedesktop.org RnJvbTogQW5kcmV3IExld3lja3kgPEFuZHJldy5MZXd5Y2t5QGFtZC5jb20+CgpUaGlzIHBhdGNo IGFkZHMgdGhlIHByb2Nlc3MgbW9kdWxlIGFuZCB0aHJlZSBoZWxwZXIgbW9kdWxlczoKCi0ga2Zk X3Byb2Nlc3MsIHdoaWNoIGhhbmRsZXMgcHJvY2VzcyB3aGljaCBvcGVuIC9kZXYva2ZkCgotIGtm ZF9kb29yYmVsbCwgd2hpY2ggcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZG9vcmJlbGwg YWxsb2NhdGlvbiwKICByZWxlYXNlIGFuZCBtYXBwaW5nIHRvIHVzZXJzcGFjZQoKLSBrZmRfcGFz aWQsIHdoaWNoIHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgZm9yIHBhc2lkIGFsbG9jYXRpb24g YW5kIHJlbGVhc2UKCi0ga2ZkX2FwZXJ0dXJlLCB3aGljaCBwcm92aWRlcyBoZWxwZXIgZnVuY3Rp b25zIGZvciBtYW5hZ2luZyB0aGUgTERTLCBMb2NhbCBHUFUKICBtZW1vcnkgYW5kIFNjcmF0Y2gg bWVtb3J5IGFwZXJ0dXJlcyBvZiB0aGUgcHJvY2VzcwoKVGhpcyBwYXRjaCBvbmx5IGNvbnRhaW5z IHRoZSBiYXNpYyBrZmRfcHJvY2VzcyBtb2R1bGUsIHdoaWNoIGRvZXNuJ3QgY29udGFpbgp0aGUg cmVmZXJlbmNlIHRvIHRoZSBxdWV1ZSBzY2hlZHVsZXIuIFRoaXMgd2FzIGRvbmUgdG8gYWxsb3cg ZWFzaWVyIGNvZGUgcmV2aWV3LgoKQWxzbywgdGhpcyBwYXRjaCBkb2Vzbid0IGNvbnRhaW4gdGhl IGNhbGxzIHRvIHRoZSBJT01NVSBkcml2ZXIgZm9yIGJpbmRpbmcgdGhlCnBhc2lkIHRvIHRoZSBk ZXZpY2UuIEFnYWluLCB0aGlzIHdhcyBkb25lIHRvIGFsbG93IGVhc2llciBjb2RlIHJldmlldwoK VGhlIGtmZF9wcm9jZXNzIG9iamVjdCBpcyBjcmVhdGVkIHdoZW4gYSBwcm9jZXNzIG9wZW5zIC9k ZXYva2ZkIGFuZCBpcyBjbG9zZWQKd2hlbiB0aGUgbW1fc3RydWN0IG9mIHRoYXQgcHJvY2VzcyBp cyB0ZWFyZWQtZG93bi4KCnYzOiBSZW1vdmUga2ZkX3ZpZG1lbSBmaWxlCnYzOiBSZXBsYWNlIGRp cmVjdCBtbXB1dCBjYWxsIHRvIG1tdV9ub3RpZmllciByZWxlYXNlCnYzOiByZW1vdmUgdHlwZWRl ZnMKdjM6IG1vdmUgYm9vbCB0byBlbmQgb2Ygc3RydWN0CnYzOiBBZGQgbmV3IGtlcm5lbCBwYXJh bXMgZm9yIGdhcnQgdXNhZ2UgbGltaXRhdGlvbgp2MzogaW5pdCBzYSBtYW5hZ2VyCnYzOiBmaXgg ZGVidWcgbXNncwp2MzogcmVtb3ZlIHN1cHBvcnQgZm9yIExEUyBpbiAzMiBiaXQKdjM6IENoYW5n ZSBjb2RlIHRvIHN1cHBvcnQgbW1hcCBvZiBkb29yYmVsbCBwYWdlcyBmcm9tIHVzZXJzcGFjZQp2 MzogQWRkIGRvY3VtZW50YXRpb24gZm9yIGFwZXJ0dXJlcwoKU2lnbmVkLW9mZi1ieTogQW5kcmV3 IExld3lja3kgPEFuZHJldy5MZXd5Y2t5QGFtZC5jb20+ClNpZ25lZC1vZmYtYnk6IE9kZWQgR2Fi YmF5IDxvZGVkLmdhYmJheUBhbWQuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vYW1k a2ZkL01ha2VmaWxlICAgICAgIHwgICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2FtZGtm ZC9rZmRfYXBlcnR1cmUuYyB8IDM1MCArKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZl cnMvZ3B1L2RybS9yYWRlb24vYW1ka2ZkL2tmZF9jaGFyZGV2LmMgIHwgIDMxICsrLQogZHJpdmVy cy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQva2ZkX2RldmljZS5jICAgfCAgNDUgKysrLQogZHJpdmVy cy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQva2ZkX2Rvb3JiZWxsLmMgfCAyMzYgKysrKysrKysrKysr KysrKysrCiBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2FtZGtmZC9rZmRfbW9kdWxlLmMgICB8ICAz MiArKy0KIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vYW1ka2ZkL2tmZF9wYXNpZC5jICAgIHwgIDk1 ICsrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2FtZGtmZC9rZmRfcHJpdi5oICAgICB8 IDE0MSArKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQva2ZkX3Byb2Nl c3MuYyAgfCAzMTkgKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vcmFk ZW9uL3JhZGVvbl9rZmQuYyAgICAgICAgICB8ICAyMSArLQogMTAgZmlsZXMgY2hhbmdlZCwgMTI0 NyBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vcmFkZW9uL2FtZGtmZC9rZmRfYXBlcnR1cmUuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vYW1ka2ZkL2tmZF9kb29yYmVsbC5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQva2ZkX3Bhc2lkLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2FtZGtmZC9rZmRfcHJvY2Vz cy5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQvTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2FtZGtmZC9NYWtlZmlsZQppbmRleCAwOGVjZmNkLi42 ZDY3NDZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2FtZGtmZC9NYWtlZmls ZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2FtZGtmZC9NYWtlZmlsZQpAQCAtNCw2ICs0 LDggQEAKIAogY2NmbGFncy15IDo9IC1JaW5jbHVkZS9kcm0KIAotYW1ka2ZkLXkJOj0ga2ZkX21v ZHVsZS5vIGtmZF9kZXZpY2UubyBrZmRfY2hhcmRldi5vIGtmZF90b3BvbG9neS5vCithbWRrZmQt eQk6PSBrZmRfbW9kdWxlLm8ga2ZkX2RldmljZS5vIGtmZF9jaGFyZGV2Lm8ga2ZkX3RvcG9sb2d5 Lm8gXAorCQlrZmRfcGFzaWQubyBrZmRfZG9vcmJlbGwubyBrZmRfYXBlcnR1cmUubyBcCisJCWtm ZF9wcm9jZXNzLm8KIAogb2JqLSQoQ09ORklHX0hTQV9SQURFT04pCSs9IGFtZGtmZC5vCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2FtZGtmZC9rZmRfYXBlcnR1cmUuYyBiL2Ry aXZlcnMvZ3B1L2RybS9yYWRlb24vYW1ka2ZkL2tmZF9hcGVydHVyZS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZmI3MjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vcmFkZW9uL2FtZGtmZC9rZmRfYXBlcnR1cmUuYwpAQCAtMCwwICsxLDM1MCBAQAor LyoKKyAqIENvcHlyaWdodCAyMDE0IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgor ICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVS KFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICog T1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBT T0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUg PGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4 L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+ CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgor I2luY2x1ZGUgPHVhcGkvbGludXgva2ZkX2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5o PgorI2luY2x1ZGUgImtmZF9wcml2LmgiCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRl IDx1YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nv ci5oPgorCisvKgorICogVGhlIHByaW1hcnkgbWVtb3J5IEkvTyBmZWF0dXJlcyBiZWluZyBhZGRl ZCBmb3IgcmV2aXNpb25zIG9mIGdmeGlwCisgKiBiZXlvbmQgNy4wIChLYXZlcmkpIGFyZToKKyAq CisgKiBBY2Nlc3MgdG8gQVRDL0lPTU1VIG1hcHBlZCBtZW1vcnkgdy8gYXNzb2NpYXRlZCBleHRl bnNpb24gb2YgVkEgdG8gNDhiCisgKgorICog4oCcRmxhdOKAnSBzaGFkZXIgbWVtb3J5IGFjY2Vz cyDigJMgVGhlc2UgYXJlIG5ldyBzaGFkZXIgdmVjdG9yIG1lbW9yeSBvcGVyYXRpb25zCisgKiB0 aGF0IGRvIG5vdCByZWZlcmVuY2UgYSBUIy9WIyBzbyBhIOKAnHBvaW50ZXLigJ0gaXMgd2hhdCBp cyBzb3VyY2VkIGZyb20gdGhlCisgKiB2ZWN0b3IgZ3BycyBmb3IgZGlyZWN0IGFjY2VzcyB0byBt ZW1vcnkuICBUaGlzIHBvaW50ZXIgc3BhY2UgaGFzIHRoZQorICogU2hhcmVkKExEUykgYW5kIFBy aXZhdGUoU2NyYXRjaCkgbWVtb3J5IG1hcHBlZCBpbnRvIHRoaXMgcG9pbnRlciBzcGFjZSBhcwor ICogYXBlcnR1cmVzLiAgVGhlIGhhcmR3YXJlIHRoZW4gZGV0ZXJtaW5lcyBob3cgdG8gZGlyZWN0 IHRoZSBtZW1vcnkgcmVxdWVzdAorICogYmFzZWQgb24gd2hhdCBhcGVydHVyZXMgdGhlIHJlcXVl c3QgZmFsbHMgaW4uCisgKgorICogVW5hbGlnbmVkIHN1cHBvcnQgYW5kIGFsaWdubWVudCBjaGVj aworICoKKyAqCisgKiBTeXN0ZW0gVW5pZmllZCBBZGRyZXNzIC0gU1VBCisgKgorICogVGhlIHN0 YW5kYXJkIHVzYWdlIGZvciBHUFUgdmlydHVhbCBhZGRyZXNzZXMgYXJlIHRoYXQgdGhleSBhcmUg bWFwcGVkIGJ5CisgKiBhIHNldCBvZiBwYWdlIHRhYmxlcyB3ZSBjYWxsIEdQVVZNIGFuZCB0aGVz ZSBwYWdlIHRhYmxlcyBhcmUgbWFuYWdlZCBieQorICogYSBjb21iaW5hdGlvbiBvZiB2aWRNTS9k cml2ZXIgc29mdHdhcmUgY29tcG9uZW50cy4gIFRoZSBjdXJyZW50IHZpcnR1YWwKKyAqIGFkZHJl c3MgKFZBKSByYW5nZSBmb3IgR1BVVk0gaXMgNDBiLgorICoKKyAqIEFzIG9mIGdmeGlwNy4xIGFu ZCBiZXlvbmQgd2XigJlyZSBhZGRpbmcgdGhlIGFiaWxpdHkgZm9yIGNvbXB1dGUgbWVtb3J5Cisg KiBjbGllbnRzIChDUC9STEMsIERNQSwgU0hBREVSKGlmZXRjaCwgc2NhbGFyLCBhbmQgdmVjdG9y IG9wcykpIHRvIGFjY2VzcworICogdGhlIHNhbWUgcGFnZSB0YWJsZXMgdXNlZCBieSBob3N0IHg4 NiBwcm9jZXNzb3JzIGFuZCB0aGF0IGFyZSBtYW5hZ2VkIGJ5CisgKiB0aGUgb3BlcmF0aW5nIHN5 c3RlbS4gVGhpcyBpcyB2aWEgYSB0ZWNobmlxdWUgYW5kIGhhcmR3YXJlIGNhbGxlZCBBVEMvSU9N TVUuCisgKiBUaGUgR1BVIGhhcyB0aGUgY2FwYWJpbGl0eSBvZiBhY2Nlc3NpbmcgYm90aCB0aGUg R1BVVk0gYW5kIEFUQyBhZGRyZXNzCisgKiBzcGFjZXMgZm9yIGEgZ2l2ZW4gVk1JRCAocHJvY2Vz cykgc2ltdWx0YW5lb3VzbHkgYW5kIHdlIGNhbGwgdGhpcyBmZWF0dXJlCisgKiBzeXN0ZW0gdW5p ZmllZCBhZGRyZXNzIChTVUEpLgorICoKKyAqIFRoZXJlIGFyZSB0aHJlZSBmdW5kYW1lbnRhbCBh ZGRyZXNzIG1vZGVzIG9mIG9wZXJhdGlvbiBmb3IgYSBnaXZlbiBWTUlECisgKiAocHJvY2Vzcykg b24gdGhlIEdQVToKKyAqCisgKglIU0E2NCDigJMgNjRiIHBvaW50ZXJzIGFuZCB0aGUgZGVmYXVs dCBhZGRyZXNzIHNwYWNlIGlzIEFUQworICoJSFNBMzIg4oCTIDMyYiBwb2ludGVycyBhbmQgdGhl IGRlZmF1bHQgYWRkcmVzcyBzcGFjZSBpcyBBVEMKKyAqCUdQVVZNIOKAkyA2NGIgcG9pbnRlcnMg YW5kIHRoZSBkZWZhdWx0IGFkZHJlc3Mgc3BhY2UgaXMgR1BVVk0gKGRyaXZlcgorICoJCW1vZGVs IG1vZGUpCisgKgorICoKKyAqIEhTQTY0IC0gQVRDL0lPTU1VIDY0YgorICoKKyAqIEEgNjRiIHBv aW50ZXIgaW4gdGhlIEFNRDY0L0lBNjQgQ1BVIGFyY2hpdGVjdHVyZSBpcyBub3QgZnVsbHkgdXRp bGl6ZWQKKyAqIGJ5IHRoZSBDUFUgc28gYW4gQU1EIENQVSBjYW4gb25seSBhY2Nlc3MgdGhlIGhp Z2ggYXJlYQorICogKFZBWzYzOjQ3XSA9PSAweDFGRkZGKSBhbmQgbG93IGFyZWEgKFZBWzYzOjQ3 ID09IDApIG9mIHRoZSBhZGRyZXNzIHNwYWNlCisgKiBzbyB0aGUgYWN0dWFsIFZBIGNhcnJpZWQg dG8gdHJhbnNsYXRpb24gaXMgNDhiLiAgVGhlcmUgaXMgYSDigJxob2xl4oCdIGluCisgKiB0aGUg bWlkZGxlIG9mIHRoZSA2NGIgVkEgc3BhY2UuCisgKgorICogVGhlIEdQVSBub3Qgb25seSBoYXMg YWNjZXNzIHRvIGFsbCBvZiB0aGUgQ1BVIGFjY2Vzc2libGUgYWRkcmVzcyBzcGFjZSB2aWEKKyAq IEFUQy9JT01NVSwgYnV0IGl0IGFsc28gaGFzIGFjY2VzcyB0byB0aGUgR1BVVk0gYWRkcmVzcyBz cGFjZS4gIFRoZSDigJxzeXN0ZW0KKyAqIHVuaWZpZWQgYWRkcmVzc+KAnSBmZWF0dXJlIChTVUEp IGlzIHRoZSBtYXBwaW5nIG9mIEdQVVZNIGFuZCBBVEMgYWRkcmVzcyBzcGFjZXMKKyAqIGludG8g YSB1bmlmaWVkIHBvaW50ZXIgc3BhY2UuICBUaGUgbWV0aG9kIHdlIHRha2UgZm9yIDY0YiBtb2Rl IGlzIHRvIG1hcCB0aGUKKyAqIGZ1bGwgNDBiIEdQVVZNIGFkZHJlc3Mgc3BhY2UgaW50byB0aGUg aG9sZSBvZiB0aGUgNjRiIGFkZHJlc3Mgc3BhY2UuCisKKyAqIFRoZSBHUFVWTV9CYXNlL0dQVVZN X0xpbWl0IGRlZmluZXMgdGhlIGFwZXJ0dXJlIGluIHRoZSA2NGIgc3BhY2Ugd2hlcmUgd2UKKyAq IGRpcmVjdCByZXF1ZXN0cyB0byBiZSB0cmFuc2xhdGVkIHZpYSBHUFVWTSBwYWdlIHRhYmxlcyBp bnN0ZWFkIG9mIHRoZQorICogSU9NTVUgcGF0aC4KKyAqCisgKgorICogNjRiIHRvIDQ5YiBBZGRy ZXNzIGNvbnZlcnNpb24KKyAqCisgKiBOb3RlIHRoYXQgdGhlcmUgYXJlIHN0aWxsIHNpZ25pZmlj YW50IHBvcnRpb25zIG9mIHVudXNlZCByZWdpb25zIChob2xlcykKKyAqIGluIHRoZSA2NGIgYWRk cmVzcyBzcGFjZSBldmVuIGZvciB0aGUgR1BVLiAgVGhlcmUgYXJlIHNldmVyYWwgcGxhY2VzIGlu CisgKiB0aGUgcGlwZWxpbmUgKHN3IGFuZCBodyksIHdlIHdpc2ggdG8gY29tcHJlc3MgdGhlIDY0 YiB2aXJ0dWFsIGFkZHJlc3MKKyAqIHRvIGEgNDliIGFkZHJlc3MuICBUaGlzIDQ5YiBhZGRyZXNz IGlzIGNvbnN0aXR1dGVkIG9mIGFuIOKAnEFUQ+KAnSBiaXQKKyAqIHBsdXMgYSA0OGIgdmlydHVh bCBhZGRyZXNzLiAgVGhpcyA0OWIgYWRkcmVzcyBpcyB3aGF0IGlzIHBhc3NlZCB0byB0aGUKKyAq IHRyYW5zbGF0aW9uIGhhcmR3YXJlLiAgQVRDPT0wIG1lYW5zIHRoZSA0OGIgYWRkcmVzcyBpcyBh IEdQVVZNIGFkZHJlc3MKKyAqIChtYXggb2YgMl40MCDigJMgMSkgaW50ZW5kZWQgdG8gYmUgdHJh bnNsYXRlZCB2aWEgR1BVVk0gcGFnZSB0YWJsZXMuCisgKiBBVEM9PTEgbWVhbnMgdGhlIDQ4YiBh ZGRyZXNzIGlzIGludGVuZGVkIHRvIGJlIHRyYW5zbGF0ZWQgdmlhIElPTU1VCisgKiBwYWdlIHRh Ymxlcy4KKyAqCisgKiBBIDY0YiBwb2ludGVyIGlzIGNvbXBhcmVkIHRvIHRoZSBhcGVydHVyZXMg dGhhdCBhcmUgZGVmaW5lZCAoQmFzZS9MaW1pdCksIGluCisgKiB0aGlzIGNhc2UgdGhlIEdQVVZN IGFwZXJ0dXJlIChyZWQpIGlzIGRlZmluZWQgYW5kIGlmIGEgcG9pbnRlciBmYWxscyBpbiB0aGlz CisgKiBhcGVydHVyZSwgd2Ugc3VidHJhY3QgdGhlIEdQVVZNX0Jhc2UgYWRkcmVzcyBhbmQgc2V0 IHRoZSBBVEMgYml0IHRvIHplcm8KKyAqIGFzIHBhcnQgb2YgdGhlIDY0YiB0byA0OWIgY29udmVy c2lvbi4KKyAqCisgKiBXaGVyZSB0aGlzIDY0YiB0byA0OWIgY29udmVyc2lvbiBpcyBkb25lIGlz IGEgZnVuY3Rpb24gb2YgdGhlIHVzYWdlLgorICogTW9zdCBHUFUgbWVtb3J5IGFjY2VzcyBpcyB2 aWEgbWVtb3J5IG9iamVjdHMgd2hlcmUgdGhlIGRyaXZlciBidWlsZHMKKyAqIGEgZGVzY3JpcHRv ciB3aGljaCBjb25zaXN0cyBvZiBhIGJhc2UgYWRkcmVzcyBhbmQgYSBtZW1vcnkgYWNjZXNzIGJ5 CisgKiB0aGUgR1BVIHVzdWFsbHkgY29uc2lzdHMgb2Ygc29tZSBraW5kIG9mIGFuIG9mZnNldCBv ciBDYXJ0ZXNpYW4gY29vcmRpbmF0ZQorICogdGhhdCByZWZlcmVuY2VzIHRoaXMgbWVtb3J5IGRl c2NyaXB0b3IuICBUaGlzIGlzIHRoZSBjYXNlIGZvciBzaGFkZXIKKyAqIGluc3RydWN0aW9ucyB0 aGF0IHJlZmVyZW5jZSB0aGUgVCMgb3IgViMgY29uc3RhbnRzLCBvciBmb3Igc3BlY2lmaWVkCisg KiBsb2NhdGlvbnMgb2YgYXNzZXRzIChleC4gdGhlIHNoYWRlciBwcm9ncmFtIGxvY2F0aW9uKS4g IEluIHRoZXNlIGNhc2VzCisgKiB0aGUgZHJpdmVyIGlzIHdoYXQgaGFuZGxlcyB0aGUgNjRiIHRv IDQ5YiBjb252ZXJzaW9uIGFuZCB0aGUgYmFzZQorICogYWRkcmVzcyBpbiB0aGUgZGVzY3JpcHRv ciAoZXguIFYjIG9yIFQjIG9yIHNoYWRlciBwcm9ncmFtIGxvY2F0aW9uKQorICogaXMgZGVmaW5l ZCBhcyBhIDQ4YiBhZGRyZXNzIHcvIGFuIEFUQyBiaXQuICBGb3IgdGhpcyB1c2FnZSBhIGdpdmVu CisgKiBtZW1vcnkgb2JqZWN0IGNhbm5vdCBzdHJhZGRsZSBtdWx0aXBsZSBhcGVydHVyZXMgaW4g dGhlIDY0YiBhZGRyZXNzCisgKiBzcGFjZS4gRm9yIGV4YW1wbGUgYSBzaGFkZXIgcHJvZ3JhbSBj YW5ub3QganVtcCBpbi9vdXQgYmV0d2VlbiBBVEMKKyAqIGFuZCBHUFVWTSBzcGFjZS4KKyAqCisg KiBJbiBzb21lIGNhc2VzIHdlIHdpc2ggdG8gcGFzcyBhIDY0YiBwb2ludGVyIHRvIHRoZSBHUFUg aGFyZHdhcmUgYW5kCisgKiB0aGUgR1BVIGh3IGRvZXMgdGhlIDY0YiB0byA0OWIgY29udmVyc2lv biBiZWZvcmUgcGFzc2luZyBtZW1vcnkKKyAqIHJlcXVlc3RzIHRvIHRoZSBjYWNoZS9tZW1vcnkg c3lzdGVtLiAgVGhpcyBpcyB0aGUgY2FzZSBmb3IgdGhlCisgKiBTX0xPQUQgYW5kIEZMQVRfKiBz aGFkZXIgbWVtb3J5IGluc3RydWN0aW9ucyB3aGVyZSB3ZSBoYXZlIDY0YiBwb2ludGVycworICog aW4gc2NhbGFyIGFuZCB2ZWN0b3IgR1BScyByZXNwZWN0aXZlbHkuCisgKgorICogSW4gYWxsIGNh c2VzIChubyBtYXR0ZXIgd2hlcmUgdGhlIDY0YiAtPiA0OWIgY29udmVyc2lvbiBpcyBkb25lKSwg dGhlIGdmeGlwCisgKiBoYXJkd2FyZSBzZW5kcyBhIDQ4YiBhZGRyZXNzIGFsb25nIHcvIGFuIEFU QyBiaXQsIHRvIHRoZSBtZW1vcnkgY29udHJvbGxlcgorICogb24gdGhlIG1lbW9yeSByZXF1ZXN0 IGludGVyZmFjZXMuCisgKgorICoJPGNsaWVudD5fTUNfcmRyZXFfYXRjICAgLy8gcmVhZCByZXF1 ZXN0IEFUQyBiaXQKKyAqCisgKgkJMCA6IDxjbGllbnQ+X01DX3JkcmVxX2FkZHIgaXMgYSBHUFVW TSBWQQorICoKKyAqCQkxIDogPGNsaWVudD5fTUNfcmRyZXFfYWRkciBpcyBhIEFUQyBWQQorICoK KyAqCisgKiDigJxTcGFyZeKAnSBhcGVydHVyZSAoQVBFMSkKKyAqCisgKiBXZSB1c2UgdGhlIEdQ VVZNIGFwZXJ0dXJlIHRvIGRpZmZlcmVudGlhdGUgQVRDIHZzLiBHUFVWTSwgYnV0IHdlIGFsc28g dXNlCisgKiBhcGVydHVyZXMgdG8gc2V0IHRoZSBNdHlwZSBmaWVsZCBmb3IgU19MT0FEL0ZMQVRf KiBvcHMgd2hpY2ggaXMgaW5wdXQgdG8gdGhlCisgKiBjb25maWcgdGFibGVzIGZvciBzZXR0aW5n IGNhY2hlIHBvbGljaWVzLiBUaGUg4oCcc3BhcmXigJ0gKEFQRTEpIGFwZXJ0dXJlIGlzCisgKiBt b3RpdmF0ZWQgYnkgZ2V0dGluZyBhIGRpZmZlcmVudCBNdHlwZSBmcm9tIHRoZSBkZWZhdWx0Lgor ICogVGhlIGRlZmF1bHQgYXBlcnR1cmUgaXNu4oCZdCBhbiBhY3R1YWwgYmFzZS9saW1pdCBhcGVy dHVyZTsgaXQgaXMganVzdCB0aGUKKyAqIGFkZHJlc3Mgc3BhY2UgdGhhdCBkb2VzbuKAmXQgaGl0 IGFueSBkZWZpbmVkIGJhc2UvbGltaXQgYXBlcnR1cmVzLgorICogVGhlIGZvbGxvd2luZyBkaWFn cmFtIGlzIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZ2Z4aXA3LnggU1VBIGFwZXJ0dXJlcy4K KyAqIFRoZSBBUEUxIGNhbiBiZSBwbGFjZWQgZWl0aGVyIGJlbG93IG9yIGFib3ZlCisgKiB0aGUg aG9sZSAoY2Fubm90IGJlIGluIHRoZSBob2xlKS4KKyAqCisgKgorICogR2VuZXJhbCBBcGVydHVy ZSBkZWZpbml0aW9ucyBhbmQgcnVsZXMKKyAqCisgKiBBbiBhcGVydHVyZSByZWdpc3RlciBkZWZp bml0aW9uIGNvbnNpc3RzIG9mIGEgQmFzZSwgTGltaXQsIE10eXBlLCBhbmQKKyAqIHVzdWFsbHkg YW4gQVRDIGJpdCBpbmRpY2F0aW5nIHdoaWNoIHRyYW5zbGF0aW9uIHRhYmxlcyB0aGF0IGFwZXJ0 dXJlIHVzZXMuCisgKiBJbiBhbGwgY2FzZXMgKGZvciBTVUEgYW5kIERVQSBhcGVydHVyZXMgZGlz Y3Vzc2VkIGxhdGVyKSwgYXBlcnR1cmUgYmFzZQorICogYW5kIGxpbWl0IGRlZmluaXRpb25zIGFy ZSA2NEtCIGFsaWduZWQuCisgKgorICoJPGFwZT5fQmFzZVs2MzowXSA9IHsgPGFwZT5fQmFzZV9y ZWdpc3Rlcls2MzoxNl0sIDB4MDAwMCB9CisgKgorICoJPGFwZT5fTGltaXRbNjM6MF0gPSB7IDxh cGU+X0xpbWl0X3JlZ2lzdGVyWzYzOjE2XSwgMHhGRkZGIH0KKyAqCisgKiBUaGUgYmFzZSBhbmQg bGltaXQgYXJlIGNvbnNpZGVyZWQgaW5jbHVzaXZlIHRvIGFuIGFwZXJ0dXJlIHNvIGJlaW5nIGlu c2lkZSBhbgorICogYXBlcnR1cmUgbWVhbnMgKGFkZHJlc3MgPj0gQmFzZSkgQU5EIChhZGRyZXNz IDw9IExpbWl0KS4KKyAqCisgKiBJbiBubyBjYXNlIGlzIGEgcGF5bG9hZCB0aGF0IHN0cmFkZGxl cyBtdWx0aXBsZSBhcGVydHVyZXMgZXhwZWN0ZWQgdG8gd29yay4KKyAqIEZvciBleGFtcGxlIGEg bG9hZF9kd29yZF94NCB0aGF0IHN0YXJ0cyBpbiBvbmUgYXBlcnR1cmUgYW5kIGVuZHMgaW4gYW5v dGhlciwKKyAqIGRvZXMgbm90IHdvcmsuICBGb3IgdGhlIHZlY3RvciBGTEFUXyogb3BzIHdlIGhh dmUgZGV0ZWN0aW9uIGNhcGFiaWxpdHkgaW4KKyAqIHRoZSBzaGFkZXIgZm9yIHJlcG9ydGluZyBh IOKAnG1lbW9yeSB2aW9sYXRpb27igJ0gYmFjayB0byB0aGUgU1EgYmxvY2sgZm9yIHVzZQorICog aW4gdHJhcHMuIEEgbWVtb3J5IHZpb2xhdGlvbiByZXN1bHRzIHdoZW4gYW4gb3AgZmFsbHMgaW50 byB0aGUgaG9sZSwKKyAqIG9yIGEgcGF5bG9hZCBzdHJhZGRsZXMgbXVsdGlwbGUgYXBlcnR1cmVz LiAgVGhlIFNfTE9BRCBpbnN0cnVjdGlvbgorICogZG9lcyBub3QgaGF2ZSB0aGlzIGRldGVjdGlv bi4KKyAqCisgKiBBcGVydHVyZXMgY2Fubm90IG92ZXJsYXAuCisgKgorICoKKyAqCisgKiBIU0Ez MiAtIEFUQy9JT01NVSAzMmIKKyAqCisgKiBGb3IgSFNBMzIgbW9kZSwgdGhlIHBvaW50ZXJzIGFy ZSBpbnRlcnByZXRlZCBhcyAzMiBiaXRzIGFuZCB1c2UgYSBzaW5nbGUgR1BSCisgKiBpbnN0ZWFk IG9mIHR3byBmb3IgdGhlIFNfTE9BRCBhbmQgRkxBVF8qIG9wcy4gVGhlIGVudGlyZSBHUFVWTSBz cGFjZSBvZiA0MGIKKyAqIHdpbGwgbm90IGZpdCBzbyB0aGVyZSBpcyBvbmx5IHBhcnRpYWwgdmlz aWJpbGl0eSB0byB0aGUgR1BVVk0KKyAqIHNwYWNlIChkZWZpbmVkIGJ5IHRoZSBhcGVydHVyZSkg Zm9yIFNfTE9BRCBhbmQgRkxBVF8qIG9wcy4KKyAqIFRoZXJlIGlzIG5vIHNwYXJlIChBUEUxKSBh cGVydHVyZSBmb3IgSFNBMzIgbW9kZS4KKyAqCisgKgorICogR1BVVk0gNjRiIG1vZGUgKGRyaXZl ciBtb2RlbCkKKyAqCisgKiBUaGlzIG1vZGUgaXMgcmVsYXRlZCB0byBIU0E2NCBpbiB0aGF0IHRo ZSBkaWZmZXJlbmNlIHJlYWxseSBpcyB0aGF0CisgKiB0aGUgZGVmYXVsdCBhcGVydHVyZSBpcyBH UFVWTSAoQVRDPT0wKSBhbmQgbm90IEFUQyBzcGFjZS4KKyAqIFdlIGhhdmUgZ2Z4aXA3LnggaGFy ZHdhcmUgdGhhdCBoYXMgRkxBVF8qIGFuZCBTX0xPQUQgc3VwcG9ydCBmb3IKKyAqIFNVQSBHUFVW TSBtb2RlLCBidXQgZG9lcyBub3Qgc3VwcG9ydCBIU0EzMi9IU0E2NC4KKyAqCisgKgorICogRGV2 aWNlIFVuaWZpZWQgQWRkcmVzcyAtIERVQQorICoKKyAqIERldmljZSB1bmlmaWVkIGFkZHJlc3Mg KERVQSkgaXMgdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgdGhhdCBtYXBzIHRoZQorICogU2hhcmVk KExEUykgbWVtb3J5IGFuZCBQcml2YXRlKFNjcmF0Y2gpIG1lbW9yeSBpbnRvIHRoZSBvdmVyYWxs IGFkZHJlc3MKKyAqIHNwYWNlIGZvciB1c2UgYnkgdGhlIG5ldyBGTEFUXyogdmVjdG9yIG1lbW9y eSBvcHMuICBUaGUgU2hhcmVkIGFuZAorICogUHJpdmF0ZSBtZW1vcmllcyBhcmUgbWFwcGVkIGFz IGFwZXJ0dXJlcyBpbnRvIHRoZSBhZGRyZXNzIHNwYWNlLAorICogYW5kIHRoZSBoYXJkd2FyZSBk ZXRlY3RzIHdoZW4gYSBGTEFUXyogbWVtb3J5IHJlcXVlc3QgaXMgdG8gYmUgcmVkaXJlY3RlZAor ICogdG8gdGhlIExEUyBvciBTY3JhdGNoIG1lbW9yeSB3aGVuIGl0IGZhbGxzIGludG8gb25lIG9m IHRoZXNlIGFwZXJ0dXJlcy4KKyAqIExpa2UgdGhlIFNVQSBhcGVydHVyZXMsIHRoZSBTaGFyZWQv UHJpdmF0ZSBhcGVydHVyZXMgYXJlIDY0S0IgYWxpZ25lZCBhbmQKKyAqIHRoZSBiYXNlL2xpbWl0 IGlzIOKAnGlu4oCdIHRoZSBhcGVydHVyZS4gRm9yIGJvdGggSFNBNjQgYW5kIEdQVVZNIFNVQSBt b2RlcywKKyAqIHRoZSBTaGFyZWQvUHJpdmF0ZSBhcGVydHVyZXMgYXJlIGFsd2F5cyBwbGFjZWQg aW4gYSBsaW1pdGVkIHNlbGVjdGlvbiBvZgorICogb3B0aW9ucyBpbiB0aGUgaG9sZSBvZiB0aGUg NjRiIGFkZHJlc3Mgc3BhY2UuIEZvciBIU0EzMiBtb2RlLCB0aGUKKyAqIFNoYXJlZC9Qcml2YXRl IGFwZXJ0dXJlcyBjYW4gYmUgcGxhY2VkIGFueXdoZXJlIGluIHRoZSAzMmIgc3BhY2UgZXhjZXB0 IGF0IDAuCisgKgorICoKKyAqIEhTQTY0IEFwZXJ0dXJlcyBmb3IgRkxBVF8qIHZlY3RvciBvcHMK KyAqCisgKiBGb3IgSFNBNjQgU1VBIG1vZGUsIHRoZSBTaGFyZWQgYW5kIFByaXZhdGUgYXBlcnR1 cmVzIGFyZSBhbHdheXMgcGxhY2VkCisgKiBpbiB0aGUgaG9sZSB3LyBhIGxpbWl0ZWQgc2VsZWN0 aW9uIG9mIHBvc3NpYmxlIGxvY2F0aW9ucy4gVGhlIHJlcXVlc3RzCisgKiB0aGF0IGZhbGwgaW4g dGhlIHByaXZhdGUgYXBlcnR1cmUgYXJlIGV4cGFuZGVkIGFzIGEgZnVuY3Rpb24gb2YgdGhlCisg KiB3b3JrLWl0ZW0gaWQgKHRpZCkgYW5kIHJlZGlyZWN0ZWQgdG8gdGhlIGxvY2F0aW9uIG9mIHRo ZQorICog4oCcaGlkZGVuIHByaXZhdGUgbWVtb3J54oCdLiBUaGUgaGlkZGVuIHByaXZhdGUgY2Fu IGJlIHBsYWNlZCBpbiBlaXRoZXIgR1BVVk0KKyAqIG9yIEFUQyBzcGFjZS4gVGhlIGFkZHJlc3Nl cyB0aGF0IGZhbGwgaW4gdGhlIHNoYXJlZCBhcGVydHVyZSBhcmUKKyAqIHJlLWRpcmVjdGVkIHRv IHRoZSBvbi1jaGlwIExEUyBtZW1vcnkgaGFyZHdhcmUuCisgKgorICoKKyAqIEhTQTMyIEFwZXJ0 dXJlcyBmb3IgRkxBVF8qIHZlY3RvciBvcHMKKyAqCisgKiBJbiBIU0EzMiBtb2RlLCB0aGUgUHJp dmF0ZSBhbmQgU2hhcmVkIGFwZXJ0dXJlcyBjYW4gYmUgcGxhY2VkIGFueXdoZXJlCisgKiBpbiB0 aGUgMzJiIHNwYWNlIGV4Y2VwdCBhdCAwIChQcml2YXRlIG9yIFNoYXJlZCBCYXNlIGF0IHplcm8g ZGlzYWJsZXMKKyAqIHRoZSBhcGVydHVyZXMpLiBJZiB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBh cGVydHVyZXMgYXJlIG5vbi16ZXJvCisgKiAoaWUgYXBlcnR1cmVzIGV4aXN0cyksIHRoZSBzaXpl IGlzIGFsd2F5cyA2NEtCLgorICoKKyAqCisgKiBHUFVWTSBBcGVydHVyZXMgZm9yIEZMQVRfKiB2 ZWN0b3Igb3BzCisgKgorICogSW4gR1BVVk0gbW9kZSwgdGhlIFNoYXJlZC9Qcml2YXRlIGFwZXJ0 dXJlcyBhcmUgc3BlY2lmaWVkIGlkZW50aWNhbGx5CisgKiB0byBIU0E2NCBtb2RlIHdoZXJlIHRo ZXkgYXJlIGFsd2F5cyBpbiB0aGUgaG9sZSBhdCBhIGxpbWl0ZWQgc2VsZWN0aW9uCisgKiBvZiBs b2NhdGlvbnMuCisgKgorICoKKyAqIEFwZXJ0dXJlIERlZmluaXRpb25zIGZvciBTVUEgYW5kIERV QQorICoKKyAqIFRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgYXBlcnR1cmUgcmVnaXN0ZXIgZGVm aW5pdGlvbnMgZm9yIGEgZ2l2ZW4KKyAqIFZNSUQgaXMgYSBmdW5jdGlvbiBvZiB0aGUg4oCcU1VB IE1vZGXigJ0gd2hpY2ggaXMgb25lIG9mIEhTQTY0LCBIU0EzMiwgb3IKKyAqIEdQVVZNNjQgZGlz Y3Vzc2VkIGluIHByZXZpb3VzIHNlY3Rpb25zLiBUaGUgbW9kZSBpcyBmaXJzdCBkZWNvZGVkLCBh bmQKKyAqIHRoZW4gdGhlIHJlbWFpbmluZyByZWdpc3RlciBkZWNvZGUgaXMgYSBmdW5jdGlvbiBv ZiB0aGUgbW9kZS4KKyAqCisgKgorICogU1VBIE1vZGUgRGVjb2RlCisgKgorICogRm9yIHRoZSBT X0xPQUQgYW5kIEZMQVRfKiBzaGFkZXIgb3BlcmF0aW9ucywgdGhlIFNVQSBtb2RlIGlzIGRlY29k ZWQgZnJvbQorICogdGhlIENPTVBVVEVfRElTUEFUQ0hfSU5JVElBVE9SOkRBVEFfQVRDIGJpdCBh bmQKKyAqIHRoZSBTSF9NRU1fQ09ORklHOlBUUjMyIGJpdHMuCisgKgorICogQ09NUFVURV9ESVNQ QVRDSF9JTklUSUFUT1I6REFUQV9BVEMgICAgU0hfTUVNX0NPTkZJRzpQVFIzMiAgICAgICAgTW9k ZQorICoKKyAqIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MCAgICAgICAgICAgICAgICAgIEhTQTY0CisgKgorICogMSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgSFNBMzIKKyAqCisgKiAw ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFggICAgICAgICAg ICAgICAgIEdQVVZNNjQKKyAqCisgKiBJbiBnZW5lcmFsIHRoZSBoYXJkd2FyZSB3aWxsIGlnbm9y ZSB0aGUgUFRSMzIgYml0IGFuZCB0cmVhdCBhcyDigJww4oCdIHdoZW5ldmVyCisgKiBEQVRBX0FU QyA9IOKAnDDigJ0sIGJ1dCBzdyBzaG91bGQgc2V0IFBUUjMyPTAgd2hlbiBEQVRBX0FUQz0wLgor ICoKKyAqIFRoZSBEQVRBX0FUQyBiaXQgaXMgb25seSBzZXQgZm9yIGNvbXB1dGUgZGlzcGF0Y2hl cy4KKyAqIEFsbCDigJxEcmF34oCdIGRpc3BhdGNoZXMgYXJlIGhhcmRjb2RlZCB0byBHUFVWTTY0 IG1vZGUKKyAqIGZvciBGTEFUXyogLyBTX0xPQUQgb3BlcmF0aW9ucy4KKyAqLworCisjZGVmaW5l IE1BS0VfR1BVVk1fQVBQX0JBU0UoZ3B1X251bSkgXAorCSgoKHVpbnQ2NF90KShncHVfbnVtKSA8 PCA2MSkgKyAweDEwMDAwMDAwMDAwMDApCisKKyNkZWZpbmUgTUFLRV9HUFVWTV9BUFBfTElNSVQo YmFzZSkgXAorCSgoKHVpbnQ2NF90KShiYXNlKSAmIDB4RkZGRkZGMDAwMDAwMDAwMCkgfCAweEZG RkZGRkZGRkYpCisKKyNkZWZpbmUgTUFLRV9TQ1JBVENIX0FQUF9CQVNFKGdwdV9udW0pIFwKKwko KCh1aW50NjRfdCkoZ3B1X251bSkgPDwgNjEpICsgMHgxMDAwMDAwMDApCisKKyNkZWZpbmUgTUFL RV9TQ1JBVENIX0FQUF9MSU1JVChiYXNlKSBcCisJKCgodWludDY0X3QpYmFzZSAmIDB4RkZGRkZG RkYwMDAwMDAwMCkgfCAweEZGRkZGRkZGKQorCisjZGVmaW5lIE1BS0VfTERTX0FQUF9CQVNFKGdw dV9udW0pIFwKKwkoKCh1aW50NjRfdCkoZ3B1X251bSkgPDwgNjEpICsgMHgwKQorI2RlZmluZSBN QUtFX0xEU19BUFBfTElNSVQoYmFzZSkgXAorCSgoKHVpbnQ2NF90KShiYXNlKSAmIDB4RkZGRkZG RkYwMDAwMDAwMCkgfCAweEZGRkZGRkZGKQorCitpbnQga2ZkX2luaXRfYXBlcnR1cmVzKHN0cnVj dCBrZmRfcHJvY2VzcyAqcHJvY2VzcykKK3sKKwl1aW50OF90IGlkICA9IDA7CisJc3RydWN0IGtm ZF9kZXYgKmRldjsKKwlzdHJ1Y3Qga2ZkX3Byb2Nlc3NfZGV2aWNlICpwZGQ7CisKKwltdXRleF9s b2NrKCZwcm9jZXNzLT5tdXRleCk7CisKKwkvKkl0ZXJhdGluZyBvdmVyIGFsbCBkZXZpY2VzKi8K Kwl3aGlsZSAoKGRldiA9IGtmZF90b3BvbG9neV9lbnVtX2tmZF9kZXZpY2VzKGlkKSkgIT0gTlVM TCAmJgorCQlpZCA8IE5VTV9PRl9TVVBQT1JURURfR1BVUykgeworCisJCXBkZCA9IGtmZF9nZXRf cHJvY2Vzc19kZXZpY2VfZGF0YShkZXYsIHByb2Nlc3MsIDEpOworCisJCS8qCisJCSAqIEZvciA2 NCBiaXQgcHJvY2VzcyBhcGVydHVyZSB3aWxsIGJlIHN0YXRpY2FsbHkgcmVzZXJ2ZWQgaW4KKwkJ ICogdGhlIHg4Nl82NCBub24gY2Fub25pY2FsIHByb2Nlc3MgYWRkcmVzcyBzcGFjZQorCQkgKiBh bWRrZmQgZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCBhcGVydHVyZXMgZm9yIDMyIGJpdCBwcm9j ZXNzCisJCSAqLworCQlpZiAocHJvY2Vzcy0+aXNfMzJiaXRfdXNlcl9tb2RlKSB7CisJCQlwZGQt Pmxkc19iYXNlID0gcGRkLT5sZHNfbGltaXQgPSAwOworCQkJcGRkLT5ncHV2bV9iYXNlID0gcGRk LT5ncHV2bV9saW1pdCA9IDA7CisJCQlwZGQtPnNjcmF0Y2hfYmFzZSA9IHBkZC0+c2NyYXRjaF9s aW1pdCA9IDA7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogbm9kZSBpZCBjb3VsZG4ndCBiZSAw IC0gdGhlIHRocmVlIE1TQiBiaXRzIG9mCisJCQkgKiBhcGVydHVyZSBzaG91ZG4ndCBiZSAwCisJ CQkgKi8KKwkJCXBkZC0+bGRzX2Jhc2UgPSBNQUtFX0xEU19BUFBfQkFTRShpZCArIDEpOworCisJ CQlwZGQtPmxkc19saW1pdCA9IE1BS0VfTERTX0FQUF9MSU1JVChwZGQtPmxkc19iYXNlKTsKKwor CQkJcGRkLT5ncHV2bV9iYXNlID0gTUFLRV9HUFVWTV9BUFBfQkFTRShpZCArIDEpOworCisJCQlw ZGQtPmdwdXZtX2xpbWl0ID0KKwkJCQkJTUFLRV9HUFVWTV9BUFBfTElNSVQocGRkLT5ncHV2bV9i YXNlKTsKKworCQkJcGRkLT5zY3JhdGNoX2Jhc2UgPSBNQUtFX1NDUkFUQ0hfQVBQX0JBU0UoaWQg KyAxKTsKKworCQkJcGRkLT5zY3JhdGNoX2xpbWl0ID0KKwkJCQlNQUtFX1NDUkFUQ0hfQVBQX0xJ TUlUKHBkZC0+c2NyYXRjaF9iYXNlKTsKKwkJfQorCisJCWRldl9kYmcoa2ZkX2RldmljZSwgIm5v ZGUgaWQgJXVcbiIsIGlkKTsKKwkJZGV2X2RiZyhrZmRfZGV2aWNlLCAiZ3B1IGlkICV1XG4iLCBw ZGQtPmRldi0+aWQpOworCQlkZXZfZGJnKGtmZF9kZXZpY2UsICJsZHNfYmFzZSAlbGxYXG4iLCBw ZGQtPmxkc19iYXNlKTsKKwkJZGV2X2RiZyhrZmRfZGV2aWNlLCAibGRzX2xpbWl0ICVsbFhcbiIs IHBkZC0+bGRzX2xpbWl0KTsKKwkJZGV2X2RiZyhrZmRfZGV2aWNlLCAiZ3B1dm1fYmFzZSAlbGxY XG4iLCBwZGQtPmdwdXZtX2Jhc2UpOworCQlkZXZfZGJnKGtmZF9kZXZpY2UsICJncHV2bV9saW1p dCAlbGxYXG4iLCBwZGQtPmdwdXZtX2xpbWl0KTsKKwkJZGV2X2RiZyhrZmRfZGV2aWNlLCAic2Ny YXRjaF9iYXNlICVsbFhcbiIsIHBkZC0+c2NyYXRjaF9iYXNlKTsKKwkJZGV2X2RiZyhrZmRfZGV2 aWNlLCAic2NyYXRjaF9saW1pdCAlbGxYXG4iLCBwZGQtPnNjcmF0Y2hfbGltaXQpOworCisJCWlk Kys7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZwcm9jZXNzLT5tdXRleCk7CisKKwlyZXR1cm4gMDsK K30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2FtZGtmZC9rZmRfY2hh cmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQva2ZkX2NoYXJkZXYuYwppbmRl eCBmMTk4ZTVhLi5jNDJmNTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2Ft ZGtmZC9rZmRfY2hhcmRldi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYW1ka2ZkL2tm ZF9jaGFyZGV2LmMKQEAgLTM4LDYgKzM4LDcgQEAKIAogc3RhdGljIGxvbmcga2ZkX2lvY3RsKHN0 cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgaW50IGtm ZF9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKK3N0YXRpYyBpbnQga2ZkX21t YXAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwogCiBzdGF0aWMgY29u c3QgY2hhciBrZmRfZGV2X25hbWVbXSA9ICJrZmQiOwogCkBAIC00Niw2ICs0Nyw3IEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGtmZF9mb3BzID0gewogCS51bmxvY2tlZF9p b2N0bCA9IGtmZF9pb2N0bCwKIAkuY29tcGF0X2lvY3RsID0ga2ZkX2lvY3RsLAogCS5vcGVuID0g a2ZkX29wZW4sCisJLm1tYXAgPSBrZmRfbW1hcCwKIH07CiAKIHN0YXRpYyBpbnQga2ZkX2NoYXJf ZGV2X21ham9yID0gLTE7CkBAIC05Niw5ICs5OCwyMiBAQCBzdHJ1Y3QgZGV2aWNlICprZmRfY2hh cmRldih2b2lkKQogCiBzdGF0aWMgaW50IGtmZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0 cnVjdCBmaWxlICpmaWxlcCkKIHsKKwlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnByb2Nlc3M7CisKIAlp ZiAoaW1pbm9yKGlub2RlKSAhPSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCXByb2Nlc3MgPSBr ZmRfY3JlYXRlX3Byb2Nlc3MoY3VycmVudCk7CisJaWYgKElTX0VSUihwcm9jZXNzKSkKKwkJcmV0 dXJuIFBUUl9FUlIocHJvY2Vzcyk7CisKKwlwcm9jZXNzLT5pc18zMmJpdF91c2VyX21vZGUgPSBp c19jb21wYXRfdGFzaygpOworCisJZGV2X2RiZyhrZmRfZGV2aWNlLCAicHJvY2VzcyAlZCBvcGVu ZWQsIGNvbXBhdCBtb2RlICgzMiBiaXQpIC0gJWRcbiIsCisJCXByb2Nlc3MtPnBhc2lkLCBwcm9j ZXNzLT5pc18zMmJpdF91c2VyX21vZGUpOworCisJa2ZkX2luaXRfYXBlcnR1cmVzKHByb2Nlc3Mp OworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0Miw4ICsxNTcsOSBAQCBzdGF0aWMgbG9uZyBrZmRf aW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25n IGFyZykKIAkJImlvY3RsIGNtZCAweCV4ICgjJWQpLCBhcmcgMHglbHhcbiIsCiAJCWNtZCwgX0lP Q19OUihjbWQpLCBhcmcpOwogCi0JLyogVE9ETzogYWRkIGZ1bmN0aW9uIHRoYXQgcmV0cmlldmVz IHByb2Nlc3MgKi8KLQlwcm9jZXNzID0gTlVMTDsKKwlwcm9jZXNzID0ga2ZkX2dldF9wcm9jZXNz KGN1cnJlbnQpOworCWlmIChJU19FUlIocHJvY2VzcykpCisJCXJldHVybiBQVFJfRVJSKHByb2Nl c3MpOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEtGRF9JT0NfQ1JFQVRFX1FVRVVFOgpAQCAt MTg1LDMgKzIwMSwxNCBAQCBzdGF0aWMgbG9uZyBrZmRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVw LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIAogCXJldHVybiBlcnI7CiB9 CisKK3N0YXRpYyBpbnQga2ZkX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBrZmRfcHJvY2VzcyAqcHJvY2VzczsKKworCXByb2Nl c3MgPSBrZmRfZ2V0X3Byb2Nlc3MoY3VycmVudCk7CisJaWYgKElTX0VSUihwcm9jZXNzKSkKKwkJ cmV0dXJuIFBUUl9FUlIocHJvY2Vzcyk7CisKKwlyZXR1cm4ga2ZkX2Rvb3JiZWxsX21tYXAocHJv Y2Vzcywgdm1hKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYW1ka2Zk L2tmZF9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYW1ka2ZkL2tmZF9kZXZpY2Uu YwppbmRleCA0MTM4Njk0Li44ZTJiMDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFk ZW9uL2FtZGtmZC9rZmRfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hbWRr ZmQva2ZkX2RldmljZS5jCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5o PgogI2luY2x1ZGUgImtmZF9wcml2LmgiCiAKKyNkZWZpbmUgTVFEX1NJWkVfQUxJR05FRCA3NjgK Kwogc3RhdGljIGNvbnN0IHN0cnVjdCBrZmRfZGV2aWNlX2luZm8ga2F2ZXJpX2RldmljZV9pbmZv ID0gewogCS5tYXhfcGFzaWRfYml0cyA9IDE2LAogfTsKQEAgLTkxLDYgKzkzLDcgQEAgc3RydWN0 IGtmZF9kZXYgKmtnZDJrZmRfcHJvYmUoc3RydWN0IGtnZF9kZXYgKmtnZCwgc3RydWN0IHBjaV9k ZXYgKnBkZXYpCiAJa2ZkLT5rZ2QgPSBrZ2Q7CiAJa2ZkLT5kZXZpY2VfaW5mbyA9IGRldmljZV9p bmZvOwogCWtmZC0+cGRldiA9IHBkZXY7CisJa2ZkLT5pbml0X2NvbXBsZXRlID0gZmFsc2U7CiAK IAlyZXR1cm4ga2ZkOwogfQpAQCAtOTgsMjMgKzEwMSw1MyBAQCBzdHJ1Y3Qga2ZkX2RldiAqa2dk MmtmZF9wcm9iZShzdHJ1Y3Qga2dkX2RldiAqa2dkLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKIGJv b2wga2dkMmtmZF9kZXZpY2VfaW5pdChzdHJ1Y3Qga2ZkX2RldiAqa2ZkLAogCQkJIGNvbnN0IHN0 cnVjdCBrZ2Qya2ZkX3NoYXJlZF9yZXNvdXJjZXMgKmdwdV9yZXNvdXJjZXMpCiB7CisJdW5zaWdu ZWQgaW50IHNpemU7CisKIAlrZmQtPnNoYXJlZF9yZXNvdXJjZXMgPSAqZ3B1X3Jlc291cmNlczsK IAotCWlmIChrZmRfdG9wb2xvZ3lfYWRkX2RldmljZShrZmQpICE9IDApCi0JCXJldHVybiBmYWxz ZTsKKwkvKiBjYWxjdWxhdGUgbWF4IHNpemUgb2YgbXFkcyBuZWVkZWQgZm9yIHF1ZXVlcyAqLwor CXNpemUgPSBtYXhfbnVtX29mX3Byb2Nlc3NlcyAqCisJCW1heF9udW1fb2ZfcXVldWVzX3Blcl9w cm9jZXNzICoKKwkJTVFEX1NJWkVfQUxJR05FRDsKKworCS8qIGFkZCBhbm90aGVyIDUxMktCIGZv ciBhbGwgb3RoZXIgYWxsb2NhdGlvbnMgb24gZ2FydCAqLworCXNpemUgKz0gNTEyICogMTAyNDsK KworCWlmIChrZmQya2dkLT5pbml0X3NhX21hbmFnZXIoa2ZkLT5rZ2QsIHNpemUpKSB7CisJCWRl dl9lcnIoa2ZkX2RldmljZSwKKwkJCSJFcnJvciBpbml0aWFsaXppbmcgc2EgbWFuYWdlciBmb3Ig ZGV2aWNlICgleDoleClcbiIsCisJCQlrZmQtPnBkZXYtPnZlbmRvciwga2ZkLT5wZGV2LT5kZXZp Y2UpOworCQlnb3RvIG91dDsKKwl9CisKKwlrZmRfZG9vcmJlbGxfaW5pdChrZmQpOworCisJaWYg KGtmZF90b3BvbG9neV9hZGRfZGV2aWNlKGtmZCkgIT0gMCkgeworCQlkZXZfZXJyKGtmZF9kZXZp Y2UsCisJCQkiRXJyb3IgYWRkaW5nIGRldmljZSAoJXg6JXgpIHRvIHRvcG9sb2d5XG4iLAorCQkJ a2ZkLT5wZGV2LT52ZW5kb3IsIGtmZC0+cGRldi0+ZGV2aWNlKTsKKwkJZ290byBrZmRfdG9wb2xv Z3lfYWRkX2RldmljZV9lcnJvcjsKKwl9CisKIAogCWtmZC0+aW5pdF9jb21wbGV0ZSA9IHRydWU7 CiAJZGV2X2luZm8oa2ZkX2RldmljZSwgImFkZGVkIGRldmljZSAoJXg6JXgpXG4iLCBrZmQtPnBk ZXYtPnZlbmRvciwKIAkJIGtmZC0+cGRldi0+ZGV2aWNlKTsKIAotCXJldHVybiB0cnVlOworCWdv dG8gb3V0OworCitrZmRfdG9wb2xvZ3lfYWRkX2RldmljZV9lcnJvcjoKKwlrZmQya2dkLT5maW5p X3NhX21hbmFnZXIoa2ZkLT5rZ2QpOworCWRldl9lcnIoa2ZkX2RldmljZSwKKwkJImRldmljZSAo JXg6JXgpIE5PVCBhZGRlZCBkdWUgdG8gZXJyb3JzXG4iLAorCQlrZmQtPnBkZXYtPnZlbmRvciwg a2ZkLT5wZGV2LT5kZXZpY2UpOworb3V0OgorCXJldHVybiBrZmQtPmluaXRfY29tcGxldGU7CiB9 CiAKIHZvaWQga2dkMmtmZF9kZXZpY2VfZXhpdChzdHJ1Y3Qga2ZkX2RldiAqa2ZkKQogewotCWlu dCBlcnIgPSBrZmRfdG9wb2xvZ3lfcmVtb3ZlX2RldmljZShrZmQpOwotCi0JQlVHX09OKGVyciAh PSAwKTsKKwlrZmRfdG9wb2xvZ3lfcmVtb3ZlX2RldmljZShrZmQpOwogCiAJa2ZyZWUoa2ZkKTsK IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYW1ka2ZkL2tmZF9kb29yYmVs bC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQva2ZkX2Rvb3JiZWxsLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQxZjIwZQotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYW1ka2ZkL2tmZF9kb29yYmVsbC5jCkBAIC0wLDAgKzEs MjM2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5j LgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3Rh bnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S CisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdI VCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VT IE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1Mg SU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAia2ZkX3ByaXYuaCIKKyNpbmNsdWRlIDxs aW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+CisKKy8qCisgKiBUaGlzIGV4dGVuc2lvbiBzdXBwb3J0cyBhIGtlcm5lbCBsZXZlbCBkb29y YmVsbHMgbWFuYWdlbWVudCBmb3IKKyAqIHRoZSBrZXJuZWwgcXVldWVzLgorICogQmFzaWNhbGx5 IHRoZSBsYXN0IGRvb3JiZWxscyBwYWdlIGlzIGRldm90ZWQgdG8ga2VybmVsIHF1ZXVlcworICog YW5kIHRoYXQncyBhc3N1cmVzIHRoYXQgYW55IHVzZXIgcHJvY2VzcyB3b24ndCBnZXQgYWNjZXNz IHRvIHRoZQorICoga2VybmVsIGRvb3JiZWxscyBwYWdlCisgKi8KK3N0YXRpYyBERUZJTkVfTVVU RVgoZG9vcmJlbGxfbXV0ZXgpOworc3RhdGljIHVuc2lnbmVkIGxvbmcgZG9vcmJlbGxfYXZhaWxh YmxlX2luZGV4W0RJVl9ST1VORF9VUChLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX1BST0NFU1Ms IEJJVFNfUEVSX0xPTkcpXSA9IHsgMCB9OworI2RlZmluZSBLRVJORUxfRE9PUkJFTExfUEFTSUQg MQorI2RlZmluZSBLRkRfU0laRV9PRl9ET09SQkVMTF9JTl9CWVRFUyA0CisKKy8qCisgKiBFYWNo IGRldmljZSBleHBvc2VzIGEgZG9vcmJlbGwgYXBlcnR1cmUsIGEgUENJIE1NSU8gYXBlcnR1cmUg dGhhdAorICogcmVjZWl2ZXMgMzItYml0IHdyaXRlcyB0aGF0IGFyZSBwYXNzZWQgdG8gcXVldWVz IGFzIHdwdHIgdmFsdWVzLgorICogVGhlIGRvb3JiZWxscyBhcmUgaW50ZW5kZWQgdG8gYmUgd3Jp dHRlbiBieSBhcHBsaWNhdGlvbnMgYXMgcGFydAorICogb2YgcXVldWVpbmcgd29yayBvbiB1c2Vy LW1vZGUgcXVldWVzLgorICogV2UgYXNzaWduIGRvb3JiZWxscyB0byBhcHBsaWNhdGlvbnMgaW4g UEFHRV9TSVpFLXNpemVkIGFuZCBhbGlnbmVkIGNodW5rcy4KKyAqIFdlIG1hcCB0aGUgZG9vcmJl bGwgYWRkcmVzcyBzcGFjZSBpbnRvIHVzZXItbW9kZSB3aGVuIGEgcHJvY2VzcyBjcmVhdGVzCisg KiBpdHMgZmlyc3QgcXVldWUgb24gZWFjaCBkZXZpY2UuCisgKiBBbHRob3VnaCB0aGUgbWFwcGlu ZyBpcyBkb25lIGJ5IEtGRCwgaXQgaXMgZXF1aXZhbGVudCB0byBhbiBtbWFwIG9mCisgKiB0aGUg L2Rldi9rZmQgd2l0aCB0aGUgcGFydGljdWxhciBkZXZpY2UgZW5jb2RlZCBpbiB0aGUgbW1hcCBv ZmZzZXQuCisgKiBUaGVyZSB3aWxsIGJlIG90aGVyIHVzZXMgZm9yIG1tYXAgb2YgL2Rldi9rZmQs IHNvIG9ubHkgYSByYW5nZSBvZgorICogb2Zmc2V0cyAoS0ZEX01NQVBfRE9PUkJFTExfU1RBUlQt RU5EKSBpcyB1c2VkIGZvciBkb29yYmVsbHMuCisgKi8KKworLyogIyBvZiBkb29yYmVsbCBieXRl cyBhbGxvY2F0ZWQgZm9yIGVhY2ggcHJvY2Vzcy4gKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGRv b3JiZWxsX3Byb2Nlc3NfYWxsb2NhdGlvbih2b2lkKQoreworCXJldHVybiByb3VuZHVwKEtGRF9T SVpFX09GX0RPT1JCRUxMX0lOX0JZVEVTICoKKwkJCUtGRF9NQVhfTlVNX09GX1FVRVVFU19QRVJf UFJPQ0VTUywKKwkJCVBBR0VfU0laRSk7Cit9CisKKy8qIERvb3JiZWxsIGNhbGN1bGF0aW9ucyBm b3IgZGV2aWNlIGluaXQuICovCit2b2lkIGtmZF9kb29yYmVsbF9pbml0KHN0cnVjdCBrZmRfZGV2 ICprZmQpCit7CisJc2l6ZV90IGRvb3JiZWxsX3N0YXJ0X29mZnNldDsKKwlzaXplX3QgZG9vcmJl bGxfYXBlcnR1cmVfc2l6ZTsKKwlzaXplX3QgZG9vcmJlbGxfcHJvY2Vzc19saW1pdDsKKworCS8q CisJICogV2Ugc3RhcnQgd2l0aCBjYWxjdWxhdGlvbnMgaW4gYnl0ZXMgYmVjYXVzZSB0aGUgaW5w dXQgZGF0YSBtaWdodAorCSAqIG9ubHkgYmUgYnl0ZS1hbGlnbmVkLgorCSAqIE9ubHkgYWZ0ZXIg d2UgaGF2ZSBkb25lIHRoZSByb3VuZGluZyBjYW4gd2UgYXNzdW1lIGFueSBhbGlnbm1lbnQuCisJ ICovCisKKwlkb29yYmVsbF9zdGFydF9vZmZzZXQgPSByb3VuZHVwKGtmZC0+c2hhcmVkX3Jlc291 cmNlcy5kb29yYmVsbF9zdGFydF9vZmZzZXQsCisJCQkJCWRvb3JiZWxsX3Byb2Nlc3NfYWxsb2Nh dGlvbigpKTsKKwlkb29yYmVsbF9hcGVydHVyZV9zaXplID0gcm91bmRkb3duKGtmZC0+c2hhcmVk X3Jlc291cmNlcy5kb29yYmVsbF9hcGVydHVyZV9zaXplLAorCQkJCQlkb29yYmVsbF9wcm9jZXNz X2FsbG9jYXRpb24oKSk7CisKKwlpZiAoZG9vcmJlbGxfYXBlcnR1cmVfc2l6ZSA+IGRvb3JiZWxs X3N0YXJ0X29mZnNldCkKKwkJZG9vcmJlbGxfcHJvY2Vzc19saW1pdCA9CisJCQkoZG9vcmJlbGxf YXBlcnR1cmVfc2l6ZSAtIGRvb3JiZWxsX3N0YXJ0X29mZnNldCkgLyBkb29yYmVsbF9wcm9jZXNz X2FsbG9jYXRpb24oKTsKKwllbHNlCisJCWRvb3JiZWxsX3Byb2Nlc3NfbGltaXQgPSAwOworCisJ a2ZkLT5kb29yYmVsbF9iYXNlID0ga2ZkLT5zaGFyZWRfcmVzb3VyY2VzLmRvb3JiZWxsX3BoeXNp Y2FsX2FkZHJlc3MgKyBkb29yYmVsbF9zdGFydF9vZmZzZXQ7CisJa2ZkLT5kb29yYmVsbF9pZF9v ZmZzZXQgPSBkb29yYmVsbF9zdGFydF9vZmZzZXQgLyBzaXplb2YodTMyKTsKKwlrZmQtPmRvb3Ji ZWxsX3Byb2Nlc3NfbGltaXQgPSBkb29yYmVsbF9wcm9jZXNzX2xpbWl0IC0gMTsKKworCWtmZC0+ ZG9vcmJlbGxfa2VybmVsX3B0ciA9IGlvcmVtYXAoa2ZkLT5kb29yYmVsbF9iYXNlLCBkb29yYmVs bF9wcm9jZXNzX2FsbG9jYXRpb24oKSk7CisJQlVHX09OKCFrZmQtPmRvb3JiZWxsX2tlcm5lbF9w dHIpOworCisJcHJfZGVidWcoImtmZDogZG9vcmJlbGwgaW5pdGlhbGl6YXRpb246XG4iKTsKKwlw cl9kZWJ1Zygia2ZkOiBkb29yYmVsbCBiYXNlICAgICAgICAgICA9PSAweCUwOGxYXG4iLAorCQkJ KHVpbnRwdHJfdClrZmQtPmRvb3JiZWxsX2Jhc2UpOworCisJcHJfZGVidWcoImtmZDogZG9vcmJl bGxfaWRfb2Zmc2V0ICAgICAgPT0gMHglMDhsWFxuIiwKKwkJCWtmZC0+ZG9vcmJlbGxfaWRfb2Zm c2V0KTsKKworCXByX2RlYnVnKCJrZmQ6IGRvb3JiZWxsX3Byb2Nlc3NfbGltaXQgID09IDB4JTA4 bFhcbiIsCisJCQlkb29yYmVsbF9wcm9jZXNzX2xpbWl0KTsKKworCXByX2RlYnVnKCJrZmQ6IGRv b3JiZWxsX2tlcm5lbF9vZmZzZXQgID09IDB4JTA4bFhcbiIsCisJCQkodWludHB0cl90KWtmZC0+ ZG9vcmJlbGxfYmFzZSk7CisKKwlwcl9kZWJ1Zygia2ZkOiBkb29yYmVsbCBhcGVydHVyZSBzaXpl ICA9PSAweCUwOGxYXG4iLAorCQkJa2ZkLT5zaGFyZWRfcmVzb3VyY2VzLmRvb3JiZWxsX2FwZXJ0 dXJlX3NpemUpOworCisJcHJfZGVidWcoImtmZDogZG9vcmJlbGwga2VybmVsIGFkZHJlc3MgPT0g MHglMDhsWFxuIiwKKwkJCSh1aW50cHRyX3Qpa2ZkLT5kb29yYmVsbF9rZXJuZWxfcHRyKTsKK30K KworaW50IGtmZF9kb29yYmVsbF9tbWFwKHN0cnVjdCBrZmRfcHJvY2VzcyAqcHJvY2Vzcywgc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJcGh5c19hZGRyX3QgYWRkcmVzczsKKwlzdHJ1 Y3Qga2ZkX2RldiAqZGV2OworCisJLyoKKwkgKiBGb3Igc2ltcGxpY2l0bHkgd2Ugb25seSBhbGxv dyBtYXBwaW5nIG9mIHRoZSBlbnRpcmUgZG9vcmJlbGwKKwkgKiBhbGxvY2F0aW9uIG9mIGEgc2lu Z2xlIGRldmljZSAmIHByb2Nlc3MuCisJICovCisJaWYgKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9z dGFydCAhPSBkb29yYmVsbF9wcm9jZXNzX2FsbG9jYXRpb24oKSkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwkvKiBGaW5kIGtmZCBkZXZpY2UgYWNjb3JkaW5nIHRvIGdwdSBpZCAqLworCWRldiA9IGtm ZF9kZXZpY2VfYnlfaWQodm1hLT52bV9wZ29mZik7CisJaWYgKGRldiA9PSBOVUxMKQorCQlyZXR1 cm4gLUVJTlZBTDsKKworCS8qIEZpbmQgaWYgcGRkIGV4aXN0cyBmb3IgY29tYmluYXRpb24gb2Yg cHJvY2VzcyBhbmQgZ3B1IGlkICovCisJaWYgKCFrZmRfZ2V0X3Byb2Nlc3NfZGV2aWNlX2RhdGEo ZGV2LCBwcm9jZXNzLCAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBDYWxjdWxhdGUgcGh5 c2ljYWwgYWRkcmVzcyBvZiBkb29yYmVsbCAqLworCWFkZHJlc3MgPSBrZmRfZ2V0X3Byb2Nlc3Nf ZG9vcmJlbGxzKGRldiwgcHJvY2Vzcyk7CisKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPIHwgVk1f RE9OVENPUFkgfCBWTV9ET05URVhQQU5EIHwgVk1fTk9SRVNFUlZFIHwgVk1fRE9OVERVTVAgfCBW TV9QRk5NQVA7CisJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS0+dm1f cGFnZV9wcm90KTsKKworCXByX2RlYnVnKCJrZmQ6IG1hcHBpbmcgZG9vcmJlbGwgcGFnZSBpbiBr ZmRfZG9vcmJlbGxfbW1hcFxuIgorCQkgIiAgICAgdGFyZ2V0IHVzZXIgYWRkcmVzcyA9PSAweCUw MTZsbFhcbiIKKwkJICIgICAgIHBoeXNpY2FsIGFkZHJlc3MgICAgPT0gMHglMDE2bGxYXG4iCisJ CSAiICAgICB2bV9mbGFncyAgICAgICAgICAgID09IDB4JTA4bFhcbiIKKwkJICIgICAgIHNpemUg ICAgICAgICAgICAgICAgPT0gMHglMDhsWFxuIiwKKwkJIChsb25nIGxvbmcgdW5zaWduZWQgaW50 KSB2bWEtPnZtX3N0YXJ0LCBhZGRyZXNzLCB2bWEtPnZtX2ZsYWdzLAorCQkgZG9vcmJlbGxfcHJv Y2Vzc19hbGxvY2F0aW9uKCkpOworCisKKwlyZXR1cm4gaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwK KwkJCQl2bWEtPnZtX3N0YXJ0LAorCQkJCWFkZHJlc3MgPj4gUEFHRV9TSElGVCwKKwkJCQlkb29y YmVsbF9wcm9jZXNzX2FsbG9jYXRpb24oKSwKKwkJCQl2bWEtPnZtX3BhZ2VfcHJvdCk7Cit9CisK KworLyogZ2V0IGtlcm5lbCBpb21lbSBwb2ludGVyIGZvciBhIGRvb3JiZWxsICovCit1MzIgX19p b21lbSAqa2ZkX2dldF9rZXJuZWxfZG9vcmJlbGwoc3RydWN0IGtmZF9kZXYgKmtmZCwgdW5zaWdu ZWQgaW50ICpkb29yYmVsbF9vZmYpCit7CisJdTMyIGlueDsKKworCUJVR19PTigha2ZkIHx8ICFk b29yYmVsbF9vZmYpOworCisJbXV0ZXhfbG9jaygmZG9vcmJlbGxfbXV0ZXgpOworCWlueCA9IGZp bmRfZmlyc3RfemVyb19iaXQoZG9vcmJlbGxfYXZhaWxhYmxlX2luZGV4LCBLRkRfTUFYX05VTV9P Rl9RVUVVRVNfUEVSX1BST0NFU1MpOworCV9fc2V0X2JpdChpbngsIGRvb3JiZWxsX2F2YWlsYWJs ZV9pbmRleCk7CisJbXV0ZXhfdW5sb2NrKCZkb29yYmVsbF9tdXRleCk7CisKKwlpZiAoaW54ID49 IEtGRF9NQVhfTlVNX09GX1FVRVVFU19QRVJfUFJPQ0VTUykKKwkJcmV0dXJuIE5VTEw7CisKKwkv KiBjYWx1Y3VsYXRpbmcgdGhlIGtlcm5lbCBkb29yYmVsbCBvZmZzZXQgdXNpbmcgImZha2VkIiBr ZXJuZWwgcGFzaWQgdGhhdCBhbGxvY2F0ZWQgZm9yIGtlcm5lbCBxdWV1ZXMgb25seSAqLworCSpk b29yYmVsbF9vZmYgPSBLRVJORUxfRE9PUkJFTExfUEFTSUQgKiAoZG9vcmJlbGxfcHJvY2Vzc19h bGxvY2F0aW9uKCkvc2l6ZW9mKHUzMikpICsgaW54OworCisJcHJfZGVidWcoImtmZDogZ2V0IGtl cm5lbCBxdWV1ZSBkb29yYmVsbFxuIgorCQkJICIgICAgIGRvb3JiZWxsIG9mZnNldCAgID09IDB4 JTA4ZFxuIgorCQkJICIgICAgIGtlcm5lbCBhZGRyZXNzICAgID09IDB4JTA4bFhcbiIsCisJCQkg KmRvb3JiZWxsX29mZiwgKHVpbnRwdHJfdCkoa2ZkLT5kb29yYmVsbF9rZXJuZWxfcHRyICsgaW54 KSk7CisKKwlyZXR1cm4ga2ZkLT5kb29yYmVsbF9rZXJuZWxfcHRyICsgaW54OworfQorCit2b2lk IGtmZF9yZWxlYXNlX2tlcm5lbF9kb29yYmVsbChzdHJ1Y3Qga2ZkX2RldiAqa2ZkLCB1MzIgX19p b21lbSAqZGJfYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgaW54OworCisJQlVHX09OKCFrZmQgfHwg IWRiX2FkZHIpOworCisJaW54ID0gKHVuc2lnbmVkIGludCkoZGJfYWRkciAtIGtmZC0+ZG9vcmJl bGxfa2VybmVsX3B0cik7CisKKwltdXRleF9sb2NrKCZkb29yYmVsbF9tdXRleCk7CisJX19jbGVh cl9iaXQoaW54LCBkb29yYmVsbF9hdmFpbGFibGVfaW5kZXgpOworCW11dGV4X3VubG9jaygmZG9v cmJlbGxfbXV0ZXgpOworfQorCitpbmxpbmUgdm9pZCB3cml0ZV9rZXJuZWxfZG9vcmJlbGwodTMy IF9faW9tZW0gKmRiLCB1MzIgdmFsdWUpCit7CisJaWYgKGRiKSB7CisJCXdyaXRlbCh2YWx1ZSwg ZGIpOworCQlwcl9kZWJ1Zygid3JpdGluZyAlZCB0byBkb29yYmVsbCBhZGRyZXNzIDB4JXBcbiIs IHZhbHVlLCBkYik7CisJfQorfQorCisvKgorICogcXVldWVfaWRzIGFyZSBpbiB0aGUgcmFuZ2Ug WzAsTUFYX1BST0NFU1NfUVVFVUVTKSBhbmQgYXJlIG1hcHBlZCAxOjEKKyAqIHRvIGRvb3JiZWxs cyB3aXRoIHRoZSBwcm9jZXNzJ3MgZG9vcmJlbGwgcGFnZQorICovCit1bnNpZ25lZCBpbnQga2Zk X3F1ZXVlX2lkX3RvX2Rvb3JiZWxsKHN0cnVjdCBrZmRfZGV2ICprZmQsCisJCQkJCXN0cnVjdCBr ZmRfcHJvY2VzcyAqcHJvY2VzcywKKwkJCQkJdW5zaWduZWQgaW50IHF1ZXVlX2lkKQoreworCS8q CisJICogZG9vcmJlbGxfaWRfb2Zmc2V0IGFjY291bnRzIGZvciBkb29yYmVsbHMgdGFrZW4gYnkg S0dELgorCSAqIHBhc2lkICogZG9vcmJlbGxfcHJvY2Vzc19hbGxvY2F0aW9uL3NpemVvZih1MzIp IGFkanVzdHMKKwkgKiB0byB0aGUgcHJvY2VzcydzIGRvb3JiZWxscworCSAqLworCXJldHVybiBr ZmQtPmRvb3JiZWxsX2lkX29mZnNldCArCisJCXByb2Nlc3MtPnBhc2lkICogKGRvb3JiZWxsX3By b2Nlc3NfYWxsb2NhdGlvbigpL3NpemVvZih1MzIpKSArCisJCXF1ZXVlX2lkOworfQorCit1aW50 NjRfdCBrZmRfZ2V0X251bWJlcl9lbGVtcyhzdHJ1Y3Qga2ZkX2RldiAqa2ZkKQoreworCXVpbnQ2 NF90IG51bV9vZl9lbGVtcyA9IChrZmQtPnNoYXJlZF9yZXNvdXJjZXMuZG9vcmJlbGxfYXBlcnR1 cmVfc2l6ZSAtCisJCQkJa2ZkLT5zaGFyZWRfcmVzb3VyY2VzLmRvb3JiZWxsX3N0YXJ0X29mZnNl dCkgLworCQkJCQlkb29yYmVsbF9wcm9jZXNzX2FsbG9jYXRpb24oKSArIDE7CisKKwlyZXR1cm4g bnVtX29mX2VsZW1zOworCit9CisKK3BoeXNfYWRkcl90IGtmZF9nZXRfcHJvY2Vzc19kb29yYmVs bHMoc3RydWN0IGtmZF9kZXYgKmRldiwKKwkJCQkJc3RydWN0IGtmZF9wcm9jZXNzICpwcm9jZXNz KQoreworCXJldHVybiBkZXYtPmRvb3JiZWxsX2Jhc2UgKworCQlwcm9jZXNzLT5wYXNpZCAqIGRv b3JiZWxsX3Byb2Nlc3NfYWxsb2NhdGlvbigpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3JhZGVvbi9hbWRrZmQva2ZkX21vZHVsZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9h bWRrZmQva2ZkX21vZHVsZS5jCmluZGV4IDAwMDI1MTguLmEzMWJmMDMgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9yYWRlb24vYW1ka2ZkL2tmZF9tb2R1bGUuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vcmFkZW9uL2FtZGtmZC9rZmRfbW9kdWxlLmMKQEAgLTIyLDcgKzIyLDYgQEAKIAogI2lu Y2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVk ZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2lu Y2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgImtmZF9wcml2LmgiCkBAIC00Niw2ICs0 NSwxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtnZDJrZmRfY2FsbHMga2dkMmtmZCA9IHsKIAku cmVzdW1lCQk9IGtnZDJrZmRfcmVzdW1lLAogfTsKIAoraW50IG1heF9udW1fb2ZfcHJvY2Vzc2Vz ID0gS0ZEX01BWF9OVU1fT0ZfUFJPQ0VTU0VTX0RFRkFVTFQ7Cittb2R1bGVfcGFyYW0obWF4X251 bV9vZl9wcm9jZXNzZXMsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1heF9udW1fb2Zf cHJvY2Vzc2VzLAorCSJLZXJuZWwgY21kbGluZSBwYXJhbWV0ZXIgdGhhdCBkZWZpbmVzIHRoZSBh bWRrZmQgbWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydGVkIHByb2Nlc3NlcyIpOworCitpbnQgbWF4 X251bV9vZl9xdWV1ZXNfcGVyX3Byb2Nlc3MgPSBLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX1BS T0NFU1NfREVGQVVMVDsKK21vZHVsZV9wYXJhbShtYXhfbnVtX29mX3F1ZXVlc19wZXJfcHJvY2Vz cywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobWF4X251bV9vZl9xdWV1ZXNfcGVyX3By b2Nlc3MsCisJIktlcm5lbCBjbWRsaW5lIHBhcmFtZXRlciB0aGF0IGRlZmluZXMgdGhlIGFtZGtm ZCBtYXhpbXVtIG51bWJlciBvZiBzdXBwb3J0ZWQgcXVldWVzIHBlciBwcm9jZXNzIik7CisKIGJv b2wga2dkMmtmZF9pbml0KHVuc2lnbmVkIGludGVyZmFjZV92ZXJzaW9uLAogCQkgIGNvbnN0IHN0 cnVjdCBrZmQya2dkX2NhbGxzICpmMmcsCiAJCSAgY29uc3Qgc3RydWN0IGtnZDJrZmRfY2FsbHMg KipnMmYpCkBAIC02OSw2ICs3OCwyNCBAQCBzdGF0aWMgaW50IF9faW5pdCBrZmRfbW9kdWxlX2lu aXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCisJLyogVmVyaWZ5IG1vZHVsZSBwYXJhbWV0ZXJzICov CisJaWYgKChtYXhfbnVtX29mX3Byb2Nlc3NlcyA8IDApIHx8CisJCShtYXhfbnVtX29mX3Byb2Nl c3NlcyA+IEtGRF9NQVhfTlVNX09GX1BST0NFU1NFUykpIHsKKwkJcHJfZXJyKCJrZmQ6IG1heF9u dW1fb2ZfcHJvY2Vzc2VzIG11c3QgYmUgYmV0d2VlbiAwIHRvIEtGRF9NQVhfTlVNX09GX1BST0NF U1NFU1xuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoKG1heF9udW1fb2ZfcXVldWVzX3Bl cl9wcm9jZXNzIDwgMCkgfHwKKwkJKG1heF9udW1fb2ZfcXVldWVzX3Blcl9wcm9jZXNzID4KKwkJ CUtGRF9NQVhfTlVNX09GX1FVRVVFU19QRVJfUFJPQ0VTUykpIHsKKwkJcHJfZXJyKCJrZmQ6IG1h eF9udW1fb2ZfcXVldWVzX3Blcl9wcm9jZXNzIG11c3QgYmUgYmV0d2VlbiAwIHRvIEtGRF9NQVhf TlVNX09GX1FVRVVFU19QRVJfUFJPQ0VTU1xuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwllcnIg PSBrZmRfcGFzaWRfaW5pdCgpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9wYXNpZDsKKwog CWVyciA9IGtmZF9jaGFyZGV2X2luaXQoKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJfaW9j dGw7CkBAIC04NCw2ICsxMTEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBrZmRfbW9kdWxlX2luaXQo dm9pZCkKIGVycl90b3BvbG9neToKIAlrZmRfY2hhcmRldl9leGl0KCk7CiBlcnJfaW9jdGw6CisJ a2ZkX3Bhc2lkX2V4aXQoKTsKK2Vycl9wYXNpZDoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC05MSw2 ICsxMjAsNyBAQCBzdGF0aWMgdm9pZCBfX2V4aXQga2ZkX21vZHVsZV9leGl0KHZvaWQpCiB7CiAJ a2ZkX3RvcG9sb2d5X3NodXRkb3duKCk7CiAJa2ZkX2NoYXJkZXZfZXhpdCgpOworCWtmZF9wYXNp ZF9leGl0KCk7CiAJZGV2X2luZm8oa2ZkX2RldmljZSwgIlJlbW92ZWQgbW9kdWxlXG4iKTsKIH0K IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQva2ZkX3Bhc2lkLmMg Yi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2FtZGtmZC9rZmRfcGFzaWQuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmE1ZTJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQva2ZkX3Bhc2lkLmMKQEAgLTAsMCArMSw5NSBAQAorLyoK KyAqIENvcHlyaWdodCAyMDE0IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp b25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMp IE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RI RVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg VEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZU V0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+CisjaW5jbHVkZSAia2ZkX3ByaXYuaCIKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgKnBh c2lkX2JpdG1hcDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGFzaWRfbGltaXQ7CitzdGF0aWMgREVG SU5FX01VVEVYKHBhc2lkX211dGV4KTsKKworaW50IGtmZF9wYXNpZF9pbml0KHZvaWQpCit7CisJ cGFzaWRfbGltaXQgPSBtYXhfbnVtX29mX3Byb2Nlc3NlczsKKworCXBhc2lkX2JpdG1hcCA9IGt6 YWxsb2MoRElWX1JPVU5EX1VQKHBhc2lkX2xpbWl0LCBCSVRTX1BFUl9CWVRFKSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFwYXNpZF9iaXRtYXApCisJCXJldHVybiAtRU5PTUVNOworCisJc2V0X2JpdCgw LCBwYXNpZF9iaXRtYXApOyAvKiBQQVNJRCAwIGlzIHJlc2VydmVkLiAqLworCisJcmV0dXJuIDA7 Cit9CisKK3ZvaWQga2ZkX3Bhc2lkX2V4aXQodm9pZCkKK3sKKwlrZnJlZShwYXNpZF9iaXRtYXAp OworfQorCitib29sIGtmZF9zZXRfcGFzaWRfbGltaXQodW5zaWduZWQgaW50IG5ld19saW1pdCkK K3sKKwlpZiAobmV3X2xpbWl0IDwgcGFzaWRfbGltaXQpIHsKKwkJYm9vbCBvazsKKworCQltdXRl eF9sb2NrKCZwYXNpZF9tdXRleCk7CisKKwkJLyogZW5zdXJlIHRoYXQgbm8gcGFzaWRzID49IG5l d19saW1pdCBhcmUgaW4tdXNlICovCisJCW9rID0gKGZpbmRfbmV4dF9iaXQocGFzaWRfYml0bWFw LCBwYXNpZF9saW1pdCwgbmV3X2xpbWl0KSA9PSBwYXNpZF9saW1pdCk7CisJCWlmIChvaykKKwkJ CXBhc2lkX2xpbWl0ID0gbmV3X2xpbWl0OworCisJCW11dGV4X3VubG9jaygmcGFzaWRfbXV0ZXgp OworCisJCXJldHVybiBvazsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIHVuc2ln bmVkIGludCBrZmRfZ2V0X3Bhc2lkX2xpbWl0KHZvaWQpCit7CisJcmV0dXJuIHBhc2lkX2xpbWl0 OworfQorCit1bnNpZ25lZCBpbnQga2ZkX3Bhc2lkX2FsbG9jKHZvaWQpCit7CisJdW5zaWduZWQg aW50IGZvdW5kOworCisJbXV0ZXhfbG9jaygmcGFzaWRfbXV0ZXgpOworCisJZm91bmQgPSBmaW5k X2ZpcnN0X3plcm9fYml0KHBhc2lkX2JpdG1hcCwgcGFzaWRfbGltaXQpOworCWlmIChmb3VuZCA9 PSBwYXNpZF9saW1pdCkKKwkJZm91bmQgPSAwOworCWVsc2UKKwkJc2V0X2JpdChmb3VuZCwgcGFz aWRfYml0bWFwKTsKKworCW11dGV4X3VubG9jaygmcGFzaWRfbXV0ZXgpOworCisJcmV0dXJuIGZv dW5kOworfQorCit2b2lkIGtmZF9wYXNpZF9mcmVlKHVuc2lnbmVkIGludCBwYXNpZCkKK3sKKwlC VUdfT04ocGFzaWQgPT0gMCB8fCBwYXNpZCA+PSBwYXNpZF9saW1pdCk7CisJY2xlYXJfYml0KHBh c2lkLCBwYXNpZF9iaXRtYXApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVv bi9hbWRrZmQva2ZkX3ByaXYuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYW1ka2ZkL2tmZF9w cml2LmgKaW5kZXggNGI3ZmZiNi4uNDNmNGJkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L3JhZGVvbi9hbWRrZmQva2ZkX3ByaXYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2Ft ZGtmZC9rZmRfcHJpdi5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1 ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlICIuLi9yYWRlb25f a2ZkLmgiCisjaW5jbHVkZSA8bGludXgva2ZkX2lvY3RsLmg+CiAKICNkZWZpbmUgS0ZEX1NZU0ZT X0ZJTEVfTU9ERSAwNDQ0CiAKQEAgLTQwLDYgKzQxLDIyIEBACiAvKiBNYWNybyBmb3IgYWxsb2Nh dGluZyBzdHJ1Y3R1cmVzICovCiAjZGVmaW5lIGtmZF9hbGxvY19zdHJ1Y3QocHRyX3RvX3N0cnVj dCkJKCh0eXBlb2YocHRyX3RvX3N0cnVjdCkpIGt6YWxsb2Moc2l6ZW9mKCpwdHJfdG9fc3RydWN0 KSwgR0ZQX0tFUk5FTCkpCiAKKy8qIEtlcm5lbCBtb2R1bGUgcGFyYW1ldGVyIHRvIHNwZWNpZnkg bWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydGVkIHByb2Nlc3NlcyAqLworZXh0ZXJuIGludCBtYXhf bnVtX29mX3Byb2Nlc3NlczsKKworI2RlZmluZSBLRkRfTUFYX05VTV9PRl9QUk9DRVNTRVNfREVG QVVMVCAzMgorI2RlZmluZSBLRkRfTUFYX05VTV9PRl9QUk9DRVNTRVMgNTEyCisKKy8qCisgKiBL ZXJuZWwgbW9kdWxlIHBhcmFtZXRlciB0byBzcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIHN1cHBv cnRlZCBxdWV1ZXMKKyAqIHBlciBwcm9jZXNzCisgKi8KK2V4dGVybiBpbnQgbWF4X251bV9vZl9x dWV1ZXNfcGVyX3Byb2Nlc3M7CisKKyNkZWZpbmUgS0ZEX01BWF9OVU1fT0ZfUVVFVUVTX1BFUl9Q Uk9DRVNTX0RFRkFVTFQgMTI4CisjZGVmaW5lIEtGRF9NQVhfTlVNX09GX1FVRVVFU19QRVJfUFJP Q0VTUyAxMDI0CisKKwogc3RydWN0IGtmZF9kZXZpY2VfaW5mbyB7CiAJY29uc3Qgc3RydWN0IGtm ZF9zY2hlZHVsZXJfY2xhc3MgKnNjaGVkdWxlcl9jbGFzczsKIAl1bnNpZ25lZCBpbnQgbWF4X3Bh c2lkX2JpdHM7CkBAIC01NCw2ICs3MSwxNyBAQCBzdHJ1Y3Qga2ZkX2RldiB7CiAKIAl1bnNpZ25l ZCBpbnQgaWQ7CQkvKiB0b3BvbG9neSBzdHViIGluZGV4ICovCiAKKwlwaHlzX2FkZHJfdCBkb29y YmVsbF9iYXNlOwkvKiBTdGFydCBvZiBhY3R1YWwgZG9vcmJlbGxzIHVzZWQgYnkKKwkJCQkJICog S0ZELiBJdCBpcyBhbGlnbmVkIGZvciBtYXBwaW5nCisJCQkJCSAqIGludG8gdXNlciBtb2RlCisJ CQkJCSAqLworCXNpemVfdCBkb29yYmVsbF9pZF9vZmZzZXQ7CS8qIERvb3JiZWxsIG9mZnNldCAo ZnJvbSBLRkQgZG9vcmJlbGwKKwkJCQkJICogdG8gSFcgZG9vcmJlbGwsIEdGWCByZXNlcnZlZCBz b21lCisJCQkJCSAqIGF0IHRoZSBzdGFydCkKKwkJCQkJICovCisJc2l6ZV90IGRvb3JiZWxsX3By b2Nlc3NfbGltaXQ7CS8qIE51bWJlciBvZiBwcm9jZXNzZXMgd2UgaGF2ZSBkb29yYmVsbCBzcGFj ZSBmb3IuICovCisJdTMyIF9faW9tZW0gKmRvb3JiZWxsX2tlcm5lbF9wdHI7IC8qIHRoaXMgaXMg YSBwb2ludGVyIGZvciBhIGRvb3JiZWxscyBwYWdlIHVzZWQgYnkga2VybmVsIHF1ZXVlICovCisK IAlzdHJ1Y3Qga2dkMmtmZF9zaGFyZWRfcmVzb3VyY2VzIHNoYXJlZF9yZXNvdXJjZXM7CiAKIAli b29sIGluaXRfY29tcGxldGU7CkBAIC02OSwxNSArOTcsMTIxIEBAIHZvaWQga2dkMmtmZF9kZXZp Y2VfZXhpdChzdHJ1Y3Qga2ZkX2RldiAqa2ZkKTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBrZmQy a2dkX2NhbGxzICprZmQya2dkOwogCisvKiBEdW1teSBzdHJ1Y3QganVzdCB0byBtYWtlIGtmZF9t ZW1fb2JqKiBhIHVuaXF1ZSBwb2ludGVyIHR5cGUuICovCitzdHJ1Y3Qga2ZkX21lbV9vYmogewor CXZvaWQgKnNhX2JvOworCXVpbnQ2NF90IGdwdV9hZGRyOworCXVpbnQzMl90ICpwdHI7Cit9Owor CitlbnVtIGtmZF9tZW1wb29sIHsKKwlLRkRfTUVNUE9PTF9TWVNURU1fQ0FDSEVBQkxFID0gMSwK KwlLRkRfTUVNUE9PTF9TWVNURU1fV1JJVEVDT01CSU5FID0gMiwKKwlLRkRfTUVNUE9PTF9GUkFN RUJVRkZFUiA9IDMsCit9OworCiAvKiBDaGFyYWN0ZXIgZGV2aWNlIGludGVyZmFjZSAqLwogaW50 IGtmZF9jaGFyZGV2X2luaXQodm9pZCk7CiB2b2lkIGtmZF9jaGFyZGV2X2V4aXQodm9pZCk7CiBz dHJ1Y3QgZGV2aWNlICprZmRfY2hhcmRldih2b2lkKTsKIAorCisvKiBEYXRhIHRoYXQgaXMgcGVy LXByb2Nlc3MtcGVyIGRldmljZS4gKi8KK3N0cnVjdCBrZmRfcHJvY2Vzc19kZXZpY2UgeworCS8q CisJICogTGlzdCBvZiBhbGwgcGVyLWRldmljZSBkYXRhIGZvciBhIHByb2Nlc3MuCisJICogU3Rh cnRzIGZyb20ga2ZkX3Byb2Nlc3MucGVyX2RldmljZV9kYXRhLgorCSAqLworCXN0cnVjdCBsaXN0 X2hlYWQgcGVyX2RldmljZV9saXN0OworCisJLyogVGhlIGRldmljZSB0aGF0IG93bnMgdGhpcyBk YXRhLiAqLworCXN0cnVjdCBrZmRfZGV2ICpkZXY7CisKKworCS8qQXBlcnR1cmVzKi8KKwl1aW50 NjRfdCBsZHNfYmFzZTsKKwl1aW50NjRfdCBsZHNfbGltaXQ7CisJdWludDY0X3QgZ3B1dm1fYmFz ZTsKKwl1aW50NjRfdCBncHV2bV9saW1pdDsKKwl1aW50NjRfdCBzY3JhdGNoX2Jhc2U7CisJdWlu dDY0X3Qgc2NyYXRjaF9saW1pdDsKKworCS8qIElzIHRoaXMgcHJvY2Vzcy9wYXNpZCBib3VuZCB0 byB0aGlzIGRldmljZT8gKGFtZF9pb21tdV9iaW5kX3Bhc2lkKSAqLworCWJvb2wgYm91bmQ7Cit9 OworCiAvKiBQcm9jZXNzIGRhdGEgKi8KIHN0cnVjdCBrZmRfcHJvY2VzcyB7CisJLyoKKwkgKiBr ZmRfcHJvY2VzcyBhcmUgc3RvcmVkIGluIGFuIG1tX3N0cnVjdCotPmtmZF9wcm9jZXNzKgorCSAq IGhhc2ggdGFibGUgKGtmZF9wcm9jZXNzZXMgaW4ga2ZkX3Byb2Nlc3MuYykKKwkgKi8KKwlzdHJ1 Y3QgaGxpc3Rfbm9kZSBrZmRfcHJvY2Vzc2VzOworCisJc3RydWN0IG1tX3N0cnVjdCAqbW07CisK KwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisKKwkvKgorCSAqIEluIGFueSBwcm9jZXNzLCB0aGUgdGhy ZWFkIHRoYXQgc3RhcnRlZCBtYWluKCkgaXMgdGhlIGxlYWQKKwkgKiB0aHJlYWQgYW5kIG91dGxp dmVzIHRoZSByZXN0LgorCSAqIEl0IGlzIGhlcmUgYmVjYXVzZSBhbWRfaW9tbXVfYmluZF9wYXNp ZCB3YW50cyBhIHRhc2tfc3RydWN0LgorCSAqLworCXN0cnVjdCB0YXNrX3N0cnVjdCAqbGVhZF90 aHJlYWQ7CisKKwkvKiBXZSB3YW50IHRvIHJlY2VpdmUgYSBub3RpZmljYXRpb24gd2hlbiB0aGUg bW1fc3RydWN0IGlzIGRlc3Ryb3llZCAqLworCXN0cnVjdCBtbXVfbm90aWZpZXIgbW11X25vdGlm aWVyOworCisJLyogVXNlIGZvciBkZWxheWVkIGZyZWVpbmcgb2Yga2ZkX3Byb2Nlc3Mgc3RydWN0 dXJlICovCisJc3RydWN0IHJjdV9oZWFkCXJjdTsKKworCXVuc2lnbmVkIGludCBwYXNpZDsKKwor CS8qCisJICogTGlzdCBvZiBrZmRfcHJvY2Vzc19kZXZpY2Ugc3RydWN0dXJlcywKKwkgKiBvbmUg Zm9yIGVhY2ggZGV2aWNlIHRoZSBwcm9jZXNzIGlzIHVzaW5nLgorCSAqLworCXN0cnVjdCBsaXN0 X2hlYWQgcGVyX2RldmljZV9kYXRhOworCisJLyogVGhlIHByb2Nlc3MncyBxdWV1ZXMuICovCisJ c2l6ZV90IHF1ZXVlX2FycmF5X3NpemU7CisKKwkvKiBTaXplIGlzIHF1ZXVlX2FycmF5X3NpemUs IHVwIHRvIE1BWF9QUk9DRVNTX1FVRVVFUy4gKi8KKwlzdHJ1Y3Qga2ZkX3F1ZXVlICoqcXVldWVz OworCisJdW5zaWduZWQgbG9uZyBhbGxvY2F0ZWRfcXVldWVfYml0bWFwW0RJVl9ST1VORF9VUChL RkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX1BST0NFU1MsIEJJVFNfUEVSX0xPTkcpXTsKKworCS8q SXMgdGhlIHVzZXIgc3BhY2UgcHJvY2VzcyAzMiBiaXQ/Ki8KKwlib29sIGlzXzMyYml0X3VzZXJf bW9kZTsKIH07CiAKK3N0cnVjdCBrZmRfcHJvY2VzcyAqa2ZkX2NyZWF0ZV9wcm9jZXNzKGNvbnN0 IHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK3N0cnVjdCBrZmRfcHJvY2VzcyAqa2ZkX2dldF9wcm9j ZXNzKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKworc3RydWN0IGtmZF9wcm9jZXNzX2Rl dmljZSAqa2ZkX2dldF9wcm9jZXNzX2RldmljZV9kYXRhKHN0cnVjdCBrZmRfZGV2ICpkZXYsCisJ CQkJCQkJc3RydWN0IGtmZF9wcm9jZXNzICpwLAorCQkJCQkJCWludCBjcmVhdGVfcGRkKTsKKwor LyogUEFTSURzICovCitpbnQga2ZkX3Bhc2lkX2luaXQodm9pZCk7Cit2b2lkIGtmZF9wYXNpZF9l eGl0KHZvaWQpOworYm9vbCBrZmRfc2V0X3Bhc2lkX2xpbWl0KHVuc2lnbmVkIGludCBuZXdfbGlt aXQpOwordW5zaWduZWQgaW50IGtmZF9nZXRfcGFzaWRfbGltaXQodm9pZCk7Cit1bnNpZ25lZCBp bnQga2ZkX3Bhc2lkX2FsbG9jKHZvaWQpOwordm9pZCBrZmRfcGFzaWRfZnJlZSh1bnNpZ25lZCBp bnQgcGFzaWQpOworCisvKiBEb29yYmVsbHMgKi8KK3ZvaWQga2ZkX2Rvb3JiZWxsX2luaXQoc3Ry dWN0IGtmZF9kZXYgKmtmZCk7CitpbnQga2ZkX2Rvb3JiZWxsX21tYXAoc3RydWN0IGtmZF9wcm9j ZXNzICpwcm9jZXNzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Cit1MzIgX19pb21lbSAq a2ZkX2dldF9rZXJuZWxfZG9vcmJlbGwoc3RydWN0IGtmZF9kZXYgKmtmZCwKKwkJCQkJdW5zaWdu ZWQgaW50ICpkb29yYmVsbF9vZmYpOwordm9pZCBrZmRfcmVsZWFzZV9rZXJuZWxfZG9vcmJlbGwo c3RydWN0IGtmZF9kZXYgKmtmZCwgdTMyIF9faW9tZW0gKmRiX2FkZHIpOwordTMyIHJlYWRfa2Vy bmVsX2Rvb3JiZWxsKHUzMiBfX2lvbWVtICpkYik7Cit2b2lkIHdyaXRlX2tlcm5lbF9kb29yYmVs bCh1MzIgX19pb21lbSAqZGIsIHUzMiB2YWx1ZSk7Cit1bnNpZ25lZCBpbnQga2ZkX3F1ZXVlX2lk X3RvX2Rvb3JiZWxsKHN0cnVjdCBrZmRfZGV2ICprZmQsCisJCQkJCXN0cnVjdCBrZmRfcHJvY2Vz cyAqcHJvY2VzcywKKwkJCQkJdW5zaWduZWQgaW50IHF1ZXVlX2lkKTsKKwogZXh0ZXJuIHN0cnVj dCBkZXZpY2UgKmtmZF9kZXZpY2U7CiAKIC8qIFRvcG9sb2d5ICovCkBAIC05Niw0ICsyMzAsMTEg QEAgdm9pZCBrZ2Qya2ZkX2ludGVycnVwdChzdHJ1Y3Qga2ZkX2RldiAqZGV2LCBjb25zdCB2b2lk ICppaF9yaW5nX2VudHJ5KTsKIHZvaWQga2dkMmtmZF9zdXNwZW5kKHN0cnVjdCBrZmRfZGV2ICpk ZXYpOwogaW50IGtnZDJrZmRfcmVzdW1lKHN0cnVjdCBrZmRfZGV2ICpkZXYpOwogCisvKiBhbWRr ZmQgQXBlcnR1cmVzICovCitpbnQga2ZkX2luaXRfYXBlcnR1cmVzKHN0cnVjdCBrZmRfcHJvY2Vz cyAqcHJvY2Vzcyk7CisKK3VpbnQ2NF90IGtmZF9nZXRfbnVtYmVyX2VsZW1zKHN0cnVjdCBrZmRf ZGV2ICprZmQpOworcGh5c19hZGRyX3Qga2ZkX2dldF9wcm9jZXNzX2Rvb3JiZWxscyhzdHJ1Y3Qg a2ZkX2RldiAqZGV2LAorCQkJCQlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnByb2Nlc3MpOworCiAjZW5k aWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYW1ka2ZkL2tmZF9wcm9jZXNz LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2FtZGtmZC9rZmRfcHJvY2Vzcy5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMDE5YzUKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vcmFkZW9uL2FtZGtmZC9rZmRfcHJvY2Vzcy5jCkBAIC0wLDAgKzEsMzE5 IEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgor ICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh bnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhl IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBI T0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S CisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4g VEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUg PGxpbnV4L2xvZzIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4 L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorc3RydWN0IG1tX3N0cnVjdDsK KworI2luY2x1ZGUgImtmZF9wcml2LmgiCisKKy8qCisgKiBJbml0aWFsIHNpemUgZm9yIHRoZSBh cnJheSBvZiBxdWV1ZXMuCisgKiBUaGUgYWxsb2NhdGVkIHNpemUgaXMgZG91YmxlZCBlYWNoIHRp bWUKKyAqIGl0IGlzIGV4Y2VlZGVkIHVwIHRvIE1BWF9QUk9DRVNTX1FVRVVFUy4KKyAqLworI2Rl ZmluZSBJTklUSUFMX1FVRVVFX0FSUkFZX1NJWkUgMTYKKworLyogTGlzdCBvZiBzdHJ1Y3Qga2Zk X3Byb2Nlc3MgKGZpZWxkIGtmZF9wcm9jZXNzKS4gVW5pcXVlL2luZGV4ZWQgYnkgbW1fc3RydWN0 Ki4gKi8KKyNkZWZpbmUgS0ZEX1BST0NFU1NfVEFCTEVfU0laRSA1IC8qIGJpdHM6IDMyIGVudHJp ZXMgKi8KK3N0YXRpYyBERUZJTkVfSEFTSFRBQkxFKGtmZF9wcm9jZXNzZXNfdGFibGUsIEtGRF9Q Uk9DRVNTX1RBQkxFX1NJWkUpOworc3RhdGljIERFRklORV9NVVRFWChrZmRfcHJvY2Vzc2VzX211 dGV4KTsKKworc3RhdGljIHN0cnVjdCBrZmRfcHJvY2VzcyAqZmluZF9wcm9jZXNzKGNvbnN0IHN0 cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkKTsKK3N0YXRpYyBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKmNy ZWF0ZV9wcm9jZXNzKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkKTsKKworc3RydWN0 IGtmZF9wcm9jZXNzICprZmRfY3JlYXRlX3Byb2Nlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0 ICp0aHJlYWQpCit7CisJc3RydWN0IGtmZF9wcm9jZXNzICpwcm9jZXNzOworCisJaWYgKHRocmVh ZC0+bW0gPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwkvKiBPbmx5IHRo ZSBwdGhyZWFkcyB0aHJlYWRpbmcgbW9kZWwgaXMgc3VwcG9ydGVkLiAqLworCWlmICh0aHJlYWQt Pmdyb3VwX2xlYWRlci0+bW0gIT0gdGhyZWFkLT5tbSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZB TCk7CisKKwkvKiBUYWtlIG1tYXBfc2VtIGJlY2F1c2Ugd2UgY2FsbCBfX21tdV9ub3RpZmllcl9y ZWdpc3RlciBpbnNpZGUgKi8KKwlkb3duX3dyaXRlKCZ0aHJlYWQtPm1tLT5tbWFwX3NlbSk7CisK KwkvKgorCSAqIHRha2Uga2ZkIHByb2Nlc3NlcyBtdXRleCBiZWZvcmUgc3RhcnRpbmcgb2YgcHJv Y2VzcyBjcmVhdGlvbgorCSAqIHNvIHRoZXJlIHdvbid0IGJlIGEgY2FzZSB3aGVyZSB0d28gdGhy ZWFkcyBvZiB0aGUgc2FtZSBwcm9jZXNzCisJICogY3JlYXRlIHR3byBrZmRfcHJvY2VzcyBzdHJ1 Y3R1cmVzCisJICovCisJbXV0ZXhfbG9jaygma2ZkX3Byb2Nlc3Nlc19tdXRleCk7CisKKwkvKiBB IHByaW9yIG9wZW4gb2YgL2Rldi9rZmQgY291bGQgaGF2ZSBhbHJlYWR5IGNyZWF0ZWQgdGhlIHBy b2Nlc3MuICovCisJcHJvY2VzcyA9IGZpbmRfcHJvY2Vzcyh0aHJlYWQpOworCWlmIChwcm9jZXNz KQorCQlwcl9kZWJ1Zygia2ZkOiBwcm9jZXNzIGFscmVhZHkgZm91bmRcbiIpOworCisJaWYgKCFw cm9jZXNzKQorCQlwcm9jZXNzID0gY3JlYXRlX3Byb2Nlc3ModGhyZWFkKTsKKworCW11dGV4X3Vu bG9jaygma2ZkX3Byb2Nlc3Nlc19tdXRleCk7CisKKwl1cF93cml0ZSgmdGhyZWFkLT5tbS0+bW1h cF9zZW0pOworCisJcmV0dXJuIHByb2Nlc3M7Cit9CisKK3N0cnVjdCBrZmRfcHJvY2VzcyAqa2Zk X2dldF9wcm9jZXNzKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkKQoreworCXN0cnVj dCBrZmRfcHJvY2VzcyAqcHJvY2VzczsKKworCWlmICh0aHJlYWQtPm1tID09IE5VTEwpCisJCXJl dHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJLyogT25seSB0aGUgcHRocmVhZHMgdGhyZWFkaW5n IG1vZGVsIGlzIHN1cHBvcnRlZC4gKi8KKwlpZiAodGhyZWFkLT5ncm91cF9sZWFkZXItPm1tICE9 IHRocmVhZC0+bW0pCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJcHJvY2VzcyA9IGZp bmRfcHJvY2Vzcyh0aHJlYWQpOworCisJcmV0dXJuIHByb2Nlc3M7Cit9CisKK3N0YXRpYyBzdHJ1 Y3Qga2ZkX3Byb2Nlc3MgKmZpbmRfcHJvY2Vzc19ieV9tbShjb25zdCBzdHJ1Y3QgbW1fc3RydWN0 ICptbSkKK3sKKwlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnByb2Nlc3M7CisKKwloYXNoX2Zvcl9lYWNo X3Bvc3NpYmxlX3JjdShrZmRfcHJvY2Vzc2VzX3RhYmxlLCBwcm9jZXNzLCBrZmRfcHJvY2Vzc2Vz LCAodWludHB0cl90KW1tKQorCQlpZiAocHJvY2Vzcy0+bW0gPT0gbW0pCisJCQlyZXR1cm4gcHJv Y2VzczsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGtmZF9wcm9jZXNzICpm aW5kX3Byb2Nlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQpCit7CisJc3RydWN0 IGtmZF9wcm9jZXNzICpwOworCisJcmN1X3JlYWRfbG9jaygpOworCXAgPSBmaW5kX3Byb2Nlc3Nf YnlfbW0odGhyZWFkLT5tbSk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gcDsKK30K Kworc3RhdGljIHZvaWQga2ZkX3Byb2Nlc3NfZGVzdHJveV9kZWxheWVkKHN0cnVjdCByY3VfaGVh ZCAqcmN1KQoreworCXN0cnVjdCBrZmRfcHJvY2VzcyAqcDsKKworCXAgPSBjb250YWluZXJfb2Yo cmN1LCBzdHJ1Y3Qga2ZkX3Byb2Nlc3MsIHJjdSk7CisJQlVHX09OKGF0b21pY19yZWFkKCZwLT5t bS0+bW1fY291bnQpIDw9IDApOworCisJbW1kcm9wKHAtPm1tKTsKKwlrZnJlZShwKTsKK30KKwor c3RhdGljIHZvaWQga2ZkX3Byb2Nlc3Nfbm90aWZpZXJfcmVsZWFzZShzdHJ1Y3QgbW11X25vdGlm aWVyICptbiwKKwkJCQkJc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJc3RydWN0IGtmZF9wcm9j ZXNzX2RldmljZSAqcGRkLCAqdGVtcDsKKwlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnA7CisKKwkvKgor CSAqIFRoZSBrZmRfcHJvY2VzcyBzdHJ1Y3R1cmUgY2FuIG5vdCBiZSBmcmVlIGJlY2F1c2UgdGhl CisJICogbW11X25vdGlmaWVyIHNyY3UgaXMgcmVhZCBsb2NrZWQKKwkgKi8KKwlwID0gY29udGFp bmVyX29mKG1uLCBzdHJ1Y3Qga2ZkX3Byb2Nlc3MsIG1tdV9ub3RpZmllcik7CisJQlVHX09OKHAt Pm1tICE9IG1tKTsKKworCW11dGV4X2xvY2soJmtmZF9wcm9jZXNzZXNfbXV0ZXgpOworCWhhc2hf ZGVsX3JjdSgmcC0+a2ZkX3Byb2Nlc3Nlcyk7CisJbXV0ZXhfdW5sb2NrKCZrZmRfcHJvY2Vzc2Vz X211dGV4KTsKKwlzeW5jaHJvbml6ZV9yY3UoKTsKKworCW11dGV4X2xvY2soJnAtPm11dGV4KTsK KworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZGQsIHRlbXAsICZwLT5wZXJfZGV2aWNlX2Rh dGEsIHBlcl9kZXZpY2VfbGlzdCkgeworCQlsaXN0X2RlbCgmcGRkLT5wZXJfZGV2aWNlX2xpc3Qp OworCQlrZnJlZShwZGQpOworCX0KKworCWtmZF9wYXNpZF9mcmVlKHAtPnBhc2lkKTsKKworCW11 dGV4X3VubG9jaygmcC0+bXV0ZXgpOworCisJbXV0ZXhfZGVzdHJveSgmcC0+bXV0ZXgpOworCisJ a2ZyZWUocC0+cXVldWVzKTsKKworCS8qCisJICogQmVjYXVzZSB3ZSBkcm9wIG1tX2NvdW50IGlu c2lkZSBrZmRfcHJvY2Vzc19kZXN0cm95X2RlbGF5ZWQKKwkgKiBhbmQgYmVjYXVzZSB0aGUgbW11 X25vdGlmaWVyX3VucmVnaXN0ZXIgZnVuY3Rpb24gYWxzbyBkcm9wCisJICogbW1fY291bnQgd2Ug bmVlZCB0byB0YWtlIGFuIGV4dHJhIGNvdW50IGhlcmUuCisJICovCisJYXRvbWljX2luYygmcC0+ bW0tPm1tX2NvdW50KTsKKwltbXVfbm90aWZpZXJfdW5yZWdpc3Rlcl9ub19yZWxlYXNlKCZwLT5t bXVfbm90aWZpZXIsIHAtPm1tKTsKKwltbXVfbm90aWZpZXJfY2FsbF9zcmN1KCZwLT5yY3UsICZr ZmRfcHJvY2Vzc19kZXN0cm95X2RlbGF5ZWQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1t dV9ub3RpZmllcl9vcHMga2ZkX3Byb2Nlc3NfbW11X25vdGlmaWVyX29wcyA9IHsKKwkucmVsZWFz ZSA9IGtmZF9wcm9jZXNzX25vdGlmaWVyX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IGtm ZF9wcm9jZXNzICpjcmVhdGVfcHJvY2Vzcyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVh ZCkKK3sKKwlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnByb2Nlc3M7CisJaW50IGVyciA9IC1FTk9NRU07 CisKKwlwcm9jZXNzID0ga3phbGxvYyhzaXplb2YoKnByb2Nlc3MpLCBHRlBfS0VSTkVMKTsKKwor CWlmICghcHJvY2VzcykKKwkJZ290byBlcnJfYWxsb2NfcHJvY2VzczsKKworCXByb2Nlc3MtPnF1 ZXVlcyA9IGttYWxsb2NfYXJyYXkoSU5JVElBTF9RVUVVRV9BUlJBWV9TSVpFLCBzaXplb2YocHJv Y2Vzcy0+cXVldWVzWzBdKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcm9jZXNzLT5xdWV1ZXMpCisJ CWdvdG8gZXJyX2FsbG9jX3F1ZXVlczsKKworCXByb2Nlc3MtPnBhc2lkID0ga2ZkX3Bhc2lkX2Fs bG9jKCk7CisJaWYgKHByb2Nlc3MtPnBhc2lkID09IDApCisJCWdvdG8gZXJyX2FsbG9jX3Bhc2lk OworCisJbXV0ZXhfaW5pdCgmcHJvY2Vzcy0+bXV0ZXgpOworCisJcHJvY2Vzcy0+bW0gPSB0aHJl YWQtPm1tOworCisJLyogcmVnaXN0ZXIgbm90aWZpZXIgKi8KKwlwcm9jZXNzLT5tbXVfbm90aWZp ZXIub3BzID0gJmtmZF9wcm9jZXNzX21tdV9ub3RpZmllcl9vcHM7CisJZXJyID0gX19tbXVfbm90 aWZpZXJfcmVnaXN0ZXIoJnByb2Nlc3MtPm1tdV9ub3RpZmllciwgcHJvY2Vzcy0+bW0pOworCWlm IChlcnIpCisJCWdvdG8gZXJyX21tdV9ub3RpZmllcjsKKworCWhhc2hfYWRkX3JjdShrZmRfcHJv Y2Vzc2VzX3RhYmxlLCAmcHJvY2Vzcy0+a2ZkX3Byb2Nlc3NlcywgKHVpbnRwdHJfdClwcm9jZXNz LT5tbSk7CisKKwlwcm9jZXNzLT5sZWFkX3RocmVhZCA9IHRocmVhZC0+Z3JvdXBfbGVhZGVyOwor CisJcHJvY2Vzcy0+cXVldWVfYXJyYXlfc2l6ZSA9IElOSVRJQUxfUVVFVUVfQVJSQVlfU0laRTsK KworCUlOSVRfTElTVF9IRUFEKCZwcm9jZXNzLT5wZXJfZGV2aWNlX2RhdGEpOworCisJcmV0dXJu IHByb2Nlc3M7CisKK2Vycl9tbXVfbm90aWZpZXI6CisJa2ZkX3Bhc2lkX2ZyZWUocHJvY2Vzcy0+ cGFzaWQpOworZXJyX2FsbG9jX3Bhc2lkOgorCWtmcmVlKHByb2Nlc3MtPnF1ZXVlcyk7CitlcnJf YWxsb2NfcXVldWVzOgorCWtmcmVlKHByb2Nlc3MpOworZXJyX2FsbG9jX3Byb2Nlc3M6CisJcmV0 dXJuIEVSUl9QVFIoZXJyKTsKK30KKworc3RydWN0IGtmZF9wcm9jZXNzX2RldmljZSAqa2ZkX2dl dF9wcm9jZXNzX2RldmljZV9kYXRhKHN0cnVjdCBrZmRfZGV2ICpkZXYsCisJCQkJCQkJc3RydWN0 IGtmZF9wcm9jZXNzICpwLAorCQkJCQkJCWludCBjcmVhdGVfcGRkKQoreworCXN0cnVjdCBrZmRf cHJvY2Vzc19kZXZpY2UgKnBkZCA9IE5VTEw7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBkZCwg JnAtPnBlcl9kZXZpY2VfZGF0YSwgcGVyX2RldmljZV9saXN0KQorCQlpZiAocGRkLT5kZXYgPT0g ZGV2KQorCQkJcmV0dXJuIHBkZDsKKworCWlmIChjcmVhdGVfcGRkKSB7CisJCXBkZCA9IGt6YWxs b2Moc2l6ZW9mKCpwZGQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHBkZCAhPSBOVUxMKSB7CisJCQlw ZGQtPmRldiA9IGRldjsKKwkJCWxpc3RfYWRkKCZwZGQtPnBlcl9kZXZpY2VfbGlzdCwgJnAtPnBl cl9kZXZpY2VfZGF0YSk7CisJCX0KKwl9CisKKwlyZXR1cm4gcGRkOworfQorCisvKgorICogRGly ZWN0IHRoZSBJT01NVSB0byBiaW5kIHRoZSBwcm9jZXNzIChzcGVjaWZpY2FsbHkgdGhlIHBhc2lk LT5tbSkgdG8gdGhlIGRldmljZS4KKyAqIFVuYmluZGluZyBvY2N1cnMgd2hlbiB0aGUgcHJvY2Vz cyBkaWVzIG9yIHRoZSBkZXZpY2UgaXMgcmVtb3ZlZC4KKyAqCisgKiBBc3N1bWVzIHRoYXQgdGhl IHByb2Nlc3MgbG9jayBpcyBoZWxkLgorICovCitzdHJ1Y3Qga2ZkX3Byb2Nlc3NfZGV2aWNlICpr ZmRfYmluZF9wcm9jZXNzX3RvX2RldmljZShzdHJ1Y3Qga2ZkX2RldiAqZGV2LAorCQkJCQkJCXN0 cnVjdCBrZmRfcHJvY2VzcyAqcCkKK3sKKwlzdHJ1Y3Qga2ZkX3Byb2Nlc3NfZGV2aWNlICpwZGQg PSBrZmRfZ2V0X3Byb2Nlc3NfZGV2aWNlX2RhdGEoZGV2LCBwLCAxKTsKKworCWlmIChwZGQgPT0g TlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlpZiAocGRkLT5ib3VuZCkKKwkJ cmV0dXJuIHBkZDsKKworCXBkZC0+Ym91bmQgPSB0cnVlOworCisJcmV0dXJuIHBkZDsKK30KKwor dm9pZCBrZmRfdW5iaW5kX3Byb2Nlc3NfZnJvbV9kZXZpY2Uoc3RydWN0IGtmZF9kZXYgKmRldiwg dW5zaWduZWQgaW50IHBhc2lkKQoreworCXN0cnVjdCBrZmRfcHJvY2VzcyAqcDsKKwlzdHJ1Y3Qg a2ZkX3Byb2Nlc3NfZGV2aWNlICpwZGQ7CisJaW50IGk7CisKKwlCVUdfT04oZGV2ID09IE5VTEwp OworCisJcmN1X3JlYWRfbG9jaygpOworCisJaGFzaF9mb3JfZWFjaF9yY3Uoa2ZkX3Byb2Nlc3Nl c190YWJsZSwgaSwgcCwga2ZkX3Byb2Nlc3NlcykKKwkJaWYgKHAtPnBhc2lkID09IHBhc2lkKQor CQkJYnJlYWs7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCUJVR19PTihwLT5wYXNpZCAhPSBw YXNpZCk7CisKKwltdXRleF9sb2NrKCZwLT5tdXRleCk7CisKKwlwZGQgPSBrZmRfZ2V0X3Byb2Nl c3NfZGV2aWNlX2RhdGEoZGV2LCBwLCAwKTsKKworCS8qCisJICogSnVzdCBtYXJrIHBkZCBhcyB1 bmJvdW5kLCBiZWNhdXNlIHdlIHN0aWxsIG5lZWQgaXQgdG8gY2FsbAorCSAqIGFtZF9pb21tdV91 bmJpbmRfcGFzaWQoKSBpbiB3aGVuIHRoZSBwcm9jZXNzIGV4aXRzLgorCSAqIFdlIGRvbid0IGNh bGwgYW1kX2lvbW11X3VuYmluZF9wYXNpZCgpIGhlcmUKKwkgKiBiZWNhdXNlIHRoZSBJT01NVSBj YWxsZWQgdXMuCisJICovCisJaWYgKHBkZCkKKwkJcGRkLT5ib3VuZCA9IGZhbHNlOworCisJbXV0 ZXhfdW5sb2NrKCZwLT5tdXRleCk7Cit9CisKK3N0cnVjdCBrZmRfcHJvY2Vzc19kZXZpY2UgKmtm ZF9nZXRfZmlyc3RfcHJvY2Vzc19kZXZpY2VfZGF0YShzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnApCit7 CisJcmV0dXJuIGxpc3RfZmlyc3RfZW50cnkoJnAtPnBlcl9kZXZpY2VfZGF0YSwgc3RydWN0IGtm ZF9wcm9jZXNzX2RldmljZSwgcGVyX2RldmljZV9saXN0KTsKK30KKworc3RydWN0IGtmZF9wcm9j ZXNzX2RldmljZSAqa2ZkX2dldF9uZXh0X3Byb2Nlc3NfZGV2aWNlX2RhdGEoc3RydWN0IGtmZF9w cm9jZXNzICpwLCBzdHJ1Y3Qga2ZkX3Byb2Nlc3NfZGV2aWNlICpwZGQpCit7CisJaWYgKGxpc3Rf aXNfbGFzdCgmcGRkLT5wZXJfZGV2aWNlX2xpc3QsICZwLT5wZXJfZGV2aWNlX2RhdGEpKQorCQly ZXR1cm4gTlVMTDsKKwlyZXR1cm4gbGlzdF9uZXh0X2VudHJ5KHBkZCwgcGVyX2RldmljZV9saXN0 KTsKK30KKworYm9vbCBrZmRfaGFzX3Byb2Nlc3NfZGV2aWNlX2RhdGEoc3RydWN0IGtmZF9wcm9j ZXNzICpwKQoreworCXJldHVybiAhKGxpc3RfZW1wdHkoJnAtPnBlcl9kZXZpY2VfZGF0YSkpOwor fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa2ZkLmMgYi9kcml2 ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rZmQuYwppbmRleCA3YjU0NTEzLi5iZjM0ODVjIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rZmQuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rZmQuYwpAQCAtMTc3LDggKzE3Nyw3IEBAIHN0YXRp YyB1MzIgcG9vbF90b19kb21haW4oZW51bSBrZ2RfbWVtb3J5X3Bvb2wgcCkKIHN0YXRpYyBpbnQg aW5pdF9zYV9tYW5hZ2VyKHN0cnVjdCBrZ2RfZGV2ICprZ2QsIHVuc2lnbmVkIGludCBzaXplKQog ewogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gKHN0cnVjdCByYWRlb25fZGV2aWNlICop a2dkOwotCXU2NCBtYXhfb2Zmc2V0WzRdOwotCWludCByLCBpOworCWludCByOwogCiAJQlVHX09O KGtnZCA9PSBOVUxMKTsKIApAQCAtMTkxLDIxICsxOTAsOSBAQCBzdGF0aWMgaW50IGluaXRfc2Ff bWFuYWdlcihzdHJ1Y3Qga2dkX2RldiAqa2dkLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIAlpZiAocikK IAkJcmV0dXJuIHI7CiAKLQkvKiBUcnkgdG8gcGluIGJ1ZmZlciBpbiBmaXJzdCA4TUIsIDE2TUIg b3IgNjRNQiBvZiBHQVJUICovCi0JbWF4X29mZnNldFswXSA9IHJvdW5kdXAoc2l6ZSwgOCAqIDEw MjQgKiAxMDI0KTsKLQltYXhfb2Zmc2V0WzFdID0gcm91bmR1cChzaXplLCAxNiAqIDEwMjQgKiAx MDI0KTsKLQltYXhfb2Zmc2V0WzJdID0gcm91bmR1cChzaXplLCA2NCAqIDEwMjQgKiAxMDI0KTsK LQltYXhfb2Zmc2V0WzNdID0gMDsKLQotCWZvciAoaSA9IDAgOyBpIDwgNCA7IGkrKykgewotCi0J CXIgPSByYWRlb25fc2FfYm9fbWFuYWdlcl9zdGFydChyZGV2LCAmcmRldi0+a2ZkX2JvLAotCQkJ CQkJbWF4X29mZnNldFtpXSk7Ci0JCWlmICghcikKLQkJCXJldHVybiByOwotCX0KLQotCXJhZGVv bl9zYV9ib19tYW5hZ2VyX2ZpbmkocmRldiwgJnJkZXYtPmtmZF9ibyk7CisJciA9IHJhZGVvbl9z YV9ib19tYW5hZ2VyX3N0YXJ0KHJkZXYsICZyZGV2LT5rZmRfYm8pOworCWlmIChyKQorCQlyYWRl b25fc2FfYm9fbWFuYWdlcl9maW5pKHJkZXYsICZyZGV2LT5rZmRfYm8pOwogCiAJcmV0dXJuIHI7 CiB9Ci0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2 ZWwK