From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: [PATCH 03/59] drm/prime: Update docs Date: Fri, 14 Jun 2019 22:35:19 +0200 Message-ID: <20190614203615.12639-4-daniel.vetter@ffwll.ch> References: <20190614203615.12639-1-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190614203615.12639-1-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: DRI Development Cc: Daniel Vetter , Intel Graphics Development , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org WWVzIHRoaXMgaXMgYSBiaXQgYSBiaWcgcGF0Y2gsIGJ1dCBzaW5jZSBpdCdzIGVzc2VudGlhbGx5 IGEgY29tcGxldGUKcmV3cml0ZSBvZiBhbGwgdGhlIHByaW1lIGRvY3MgSSBkaWRuJ3Qgc2VlIGhv dyB0byBiZXR0ZXIgc3BsaXQgaXQgdXAuCgpDaGFuZ2VzOgotIENvbnNpc3RlbnRseSBwb2ludCB0 byBkcm1fZ2VtX29iamVjdF9mdW5jcyBhcyB0aGUgcHJlZmVycmVkIGhvb2tzLAogIHdoZXJlIGFw cGxpY2FibGUuCgotIFJlb3JkZXIgYWxsIHRoZSBmdW5jdGlvbnMgaW4gZHJtX3ByaW1lLltoY10g aW50byB0aHJlZSBncm91cHM6IGNvcmUsCiAgZXhwb3J0IGhlbHBlcnMsIGltcG9ydCBoZWxwZXJz LgoKLSBEb2N1bWVudCBhbGwgdGhlIGhvb2tzIGluICZkcm1fZHJpdmVyIHRoYXQgbGFja2VkIGtl cm5lbGRvYy4KCi0gQ29tcGxldGVseSBuZXcgb3ZlcnZpZXcgc2VjdGlvbiwgd2hpY2ggbm93IGFs c28gaW5jbHVkZXMgdGhlIGNsZWFuZWQKICB1cCBsaWZldGltZS9yZWZlcmVuY2UgY291bnRpbmcg c3ViY2hhcHRlci4gSSBhbHNvIG1lbnRpb25lZCB0aGUgd2VhawogIHJlZmVyZW5jZXMgaW4gdGhl cmUgZHVlIHRvIHRoZSBsb29rdXAgY2FjaGVzLgoKLSBDb21wbGV0ZWx5IHJld3JpdHRlbiBoZWxw ZXIgaW50cm8gc2VjdGlvbiwgaGlnaGxpZ2h0IHRoZQogIGltcG9ydC9leHBvcnQgcmVsYXRlZCBm dW5jdGlvbmFsaXR5LgoKLSBQb2xpc2ggZm9yIGFsbCB0aGUgZnVuY3Rpb25zIGFuZCBtb3JlIGNy b3NzIHJlZmVyZW5jZXMuCgpJIGFsc28gc3ByaW5rbGVkIGEgYnVuY2ggb2YgdG9kb3MgYWxsIG92 ZXIuCgpNb3N0IGltcG9ydGFudDogMCBjb2RlIGNoYW5nZXMgaW4gaGVyZS4gVGhlIGNsZWFudXAg bW90aXZhdGVkIGJ5CnJlYWRpbmcgYW5kIGltcHJvdmluZyBhbGwgdGhpcyB3aWxsIGZvbGxvdyBs YXRlciBvbi4KCnYyOiBBY3R1YWxseSB1cGRhdGUgdGhlIHByaW1lIGhlbHBlciBkb2NzLiBQbHVz IGFkZCBhIGZldyBGSVhNRXMgdGhhdApJIHdvbid0IGFkZHJlc3MgcmlnaHQgYXdheSBpbiBzdWJz ZXF1ZW50IGNsZWFudXAgcGF0Y2hlcy4KClNpZ25lZC1vZmYtYnk6IERhbmllbCBWZXR0ZXIgPGRh bmllbC52ZXR0ZXJAaW50ZWwuY29tPgotLS0KIERvY3VtZW50YXRpb24vZ3B1L2RybS1tbS5yc3Qg fCAgNDAgKy0KIGRyaXZlcnMvZ3B1L2RybS9kcm1fcHJpbWUuYyAgfCA4NTEgKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tLS0tLS0tLS0KIGluY2x1ZGUvZHJtL2RybV9kcnYuaCAgICAgICAgfCAx MDQgKysrKy0KIGluY2x1ZGUvZHJtL2RybV9nZW0uaCAgICAgICAgfCAgMTggKy0KIGluY2x1ZGUv ZHJtL2RybV9wcmltZS5oICAgICAgfCAgNDIgKy0KIDUgZmlsZXMgY2hhbmdlZCwgNTc2IGluc2Vy dGlvbnMoKyksIDQ3OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dw dS9kcm0tbW0ucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLW1tLnJzdAppbmRleCBjOGViZDRm NjZhNmEuLmI2NjRmMDU0YzI1OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLW1t LnJzdAorKysgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tbW0ucnN0CkBAIC00MzMsNDMgKzQzMywx MSBAQCBQUklNRSBpcyB0aGUgY3Jvc3MgZGV2aWNlIGJ1ZmZlciBzaGFyaW5nIGZyYW1ld29yayBp biBkcm0sIG9yaWdpbmFsbHkKIGNyZWF0ZWQgZm9yIHRoZSBPUFRJTVVTIHJhbmdlIG9mIG11bHRp LWdwdSBwbGF0Zm9ybXMuIFRvIHVzZXJzcGFjZSBQUklNRQogYnVmZmVycyBhcmUgZG1hLWJ1ZiBi YXNlZCBmaWxlIGRlc2NyaXB0b3JzLgogCi1PdmVydmlldyBhbmQgRHJpdmVyIEludGVyZmFjZQot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK092ZXJ2aWV3IGFuZCBMaWZldGltZSBSdWxl cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVNpbWlsYXIgdG8gR0VNIGdsb2JhbCBu YW1lcywgUFJJTUUgZmlsZSBkZXNjcmlwdG9ycyBhcmUgYWxzbyB1c2VkIHRvCi1zaGFyZSBidWZm ZXIgb2JqZWN0cyBhY3Jvc3MgcHJvY2Vzc2VzLiBUaGV5IG9mZmVyIGFkZGl0aW9uYWwgc2VjdXJp dHk6Ci1hcyBmaWxlIGRlc2NyaXB0b3JzIG11c3QgYmUgZXhwbGljaXRseSBzZW50IG92ZXIgVU5J WCBkb21haW4gc29ja2V0cyB0bwotYmUgc2hhcmVkIGJldHdlZW4gYXBwbGljYXRpb25zLCB0aGV5 IGNhbid0IGJlIGd1ZXNzZWQgbGlrZSB0aGUgZ2xvYmFsbHkKLXVuaXF1ZSBHRU0gbmFtZXMuCi0K LURyaXZlcnMgdGhhdCBzdXBwb3J0IHRoZSBQUklNRSBBUEkgbXVzdCBzZXQgdGhlIERSSVZFUl9Q UklNRSBiaXQgaW4gdGhlCi1zdHJ1Y3QgOmM6dHlwZTpgc3RydWN0IGRybV9kcml2ZXIgPGRybV9k cml2ZXI+YAotZHJpdmVyX2ZlYXR1cmVzIGZpZWxkLCBhbmQgaW1wbGVtZW50IHRoZSBwcmltZV9o YW5kbGVfdG9fZmQgYW5kCi1wcmltZV9mZF90b19oYW5kbGUgb3BlcmF0aW9ucy4KLQotaW50IChc KnByaW1lX2hhbmRsZV90b19mZCkoc3RydWN0IGRybV9kZXZpY2UgXCpkZXYsIHN0cnVjdCBkcm1f ZmlsZQotXCpmaWxlX3ByaXYsIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3QgZmxhZ3MsIGludCBc KnByaW1lX2ZkKTsgaW50Ci0oXCpwcmltZV9mZF90b19oYW5kbGUpKHN0cnVjdCBkcm1fZGV2aWNl IFwqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUKLVwqZmlsZV9wcml2LCBpbnQgcHJpbWVfZmQsIHVpbnQz Ml90IFwqaGFuZGxlKTsgVGhvc2UgdHdvIG9wZXJhdGlvbnMKLWNvbnZlcnQgYSBoYW5kbGUgdG8g YSBQUklNRSBmaWxlIGRlc2NyaXB0b3IgYW5kIHZpY2UgdmVyc2EuIERyaXZlcnMgbXVzdAotdXNl IHRoZSBrZXJuZWwgZG1hLWJ1ZiBidWZmZXIgc2hhcmluZyBmcmFtZXdvcmsgdG8gbWFuYWdlIHRo ZSBQUklNRSBmaWxlCi1kZXNjcmlwdG9ycy4gU2ltaWxhciB0byB0aGUgbW9kZSBzZXR0aW5nIEFQ SSBQUklNRSBpcyBhZ25vc3RpYyB0byB0aGUKLXVuZGVybHlpbmcgYnVmZmVyIG9iamVjdCBtYW5h Z2VyLCBhcyBsb25nIGFzIGhhbmRsZXMgYXJlIDMyYml0IHVuc2lnbmVkCi1pbnRlZ2Vycy4KLQot V2hpbGUgbm9uLUdFTSBkcml2ZXJzIG11c3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb25zIHRoZW1z ZWx2ZXMsIEdFTQotZHJpdmVycyBtdXN0IHVzZSB0aGUgOmM6ZnVuYzpgZHJtX2dlbV9wcmltZV9o YW5kbGVfdG9fZmQoKWAgYW5kCi06YzpmdW5jOmBkcm1fZ2VtX3ByaW1lX2ZkX3RvX2hhbmRsZSgp YCBoZWxwZXIgZnVuY3Rpb25zLiBUaG9zZQotaGVscGVycyByZWx5IG9uIHRoZSBkcml2ZXIgZ2Vt X3ByaW1lX2V4cG9ydCBhbmQgZ2VtX3ByaW1lX2ltcG9ydAotb3BlcmF0aW9ucyB0byBjcmVhdGUg YSBkbWEtYnVmIGluc3RhbmNlIGZyb20gYSBHRU0gb2JqZWN0IChkbWEtYnVmCi1leHBvcnRlciBy b2xlKSBhbmQgdG8gY3JlYXRlIGEgR0VNIG9iamVjdCBmcm9tIGEgZG1hLWJ1ZiBpbnN0YW5jZQot KGRtYS1idWYgaW1wb3J0ZXIgcm9sZSkuCi0KLXN0cnVjdCBkbWFfYnVmIFwqIChcKmdlbV9wcmlt ZV9leHBvcnQpKHN0cnVjdCBkcm1fZGV2aWNlIFwqZGV2LAotc3RydWN0IGRybV9nZW1fb2JqZWN0 IFwqb2JqLCBpbnQgZmxhZ3MpOyBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgXCoKLShcKmdlbV9wcmlt ZV9pbXBvcnQpKHN0cnVjdCBkcm1fZGV2aWNlIFwqZGV2LCBzdHJ1Y3QgZG1hX2J1ZgotXCpkbWFf YnVmKTsgVGhlc2UgdHdvIG9wZXJhdGlvbnMgYXJlIG1hbmRhdG9yeSBmb3IgR0VNIGRyaXZlcnMg dGhhdAotc3VwcG9ydCBQUklNRS4KKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJt X3ByaW1lLmMKKyAgIDpkb2M6IG92ZXJ2aWV3IGFuZCBsaWZldGltZSBydWxlcwogCiBQUklNRSBI ZWxwZXIgRnVuY3Rpb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX3ByaW1lLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ByaW1lLmMKaW5k ZXggZDBjMDEzMTgwNzZiLi5mMDgxNTlhOGIwM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fcHJpbWUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ByaW1lLmMKQEAgLTM4LDQ3 ICszOCw1MyBAQAogCiAjaW5jbHVkZSAiZHJtX2ludGVybmFsLmgiCiAKLS8qCi0gKiBETUEtQlVG L0dFTSBPYmplY3QgcmVmZXJlbmNlcyBhbmQgbGlmZXRpbWUgb3ZlcnZpZXc6Ci0gKgotICogT24g dGhlIGV4cG9ydCB0aGUgZG1hX2J1ZiBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgZXhwb3J0aW5n IEdFTQotICogb2JqZWN0LiBJdCB0YWtlcyB0aGlzIHJlZmVyZW5jZSBpbiBoYW5kbGVfdG9fZmRf aW9jdGwsIHdoZW4gaXQKLSAqIGZpcnN0IGNhbGxzIC5wcmltZV9leHBvcnQgYW5kIHN0b3JlcyB0 aGUgZXhwb3J0aW5nIEdFTSBvYmplY3QgaW4KLSAqIHRoZSBkbWFfYnVmIHByaXYuIFRoaXMgcmVm ZXJlbmNlIG5lZWRzIHRvIGJlIHJlbGVhc2VkIHdoZW4gdGhlCi0gKiBmaW5hbCByZWZlcmVuY2Ug dG8gdGhlICZkbWFfYnVmIGl0c2VsZiBpcyBkcm9wcGVkIGFuZCBpdHMKLSAqICZkbWFfYnVmX29w cy5yZWxlYXNlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gRm9yIEdFTS1iYXNlZCBkcml2ZXJzLAotICog dGhlIGRtYV9idWYgc2hvdWxkIGJlIGV4cG9ydGVkIHVzaW5nIGRybV9nZW1fZG1hYnVmX2V4cG9y dCgpIGFuZAotICogdGhlbiByZWxlYXNlZCBieSBkcm1fZ2VtX2RtYWJ1Zl9yZWxlYXNlKCkuCi0g KgotICogT24gdGhlIGltcG9ydCB0aGUgaW1wb3J0aW5nIEdFTSBvYmplY3QgaG9sZHMgYSByZWZl cmVuY2UgdG8gdGhlCi0gKiBkbWFfYnVmICh3aGljaCBpbiB0dXJuIGhvbGRzIGEgcmVmIHRvIHRo ZSBleHBvcnRpbmcgR0VNIG9iamVjdCkuCi0gKiBJdCB0YWtlcyB0aGF0IHJlZmVyZW5jZSBpbiB0 aGUgZmRfdG9faGFuZGxlIGlvY3RsLgotICogSXQgY2FsbHMgZG1hX2J1Zl9nZXQsIGNyZWF0ZXMg YW4gYXR0YWNobWVudCB0byBpdCBhbmQgc3RvcmVzIHRoZQotICogYXR0YWNobWVudCBpbiB0aGUg R0VNIG9iamVjdC4gV2hlbiB0aGlzIGF0dGFjaG1lbnQgaXMgZGVzdHJveWVkCi0gKiB3aGVuIHRo ZSBpbXBvcnRlZCBvYmplY3QgaXMgZGVzdHJveWVkLCB3ZSByZW1vdmUgdGhlIGF0dGFjaG1lbnQK LSAqIGFuZCBkcm9wIHRoZSByZWZlcmVuY2UgdG8gdGhlIGRtYV9idWYuCi0gKgotICogV2hlbiBh bGwgdGhlIHJlZmVyZW5jZXMgdG8gdGhlICZkbWFfYnVmIGFyZSBkcm9wcGVkLCBpLmUuIHdoZW4K LSAqIHVzZXJzcGFjZSBoYXMgY2xvc2VkIGJvdGggaGFuZGxlcyB0byB0aGUgaW1wb3J0ZWQgR0VN IG9iamVjdCAodGhyb3VnaCB0aGUKLSAqIEZEX1RPX0hBTkRMRSBJT0NUTCkgYW5kIGNsb3NlZCB0 aGUgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBleHBvcnRlZAotICogKHRocm91Z2ggdGhlIEhBTkRM RV9UT19GRCBJT0NUTCkgZG1hX2J1ZiwgYW5kIGFsbCBrZXJuZWwtaW50ZXJuYWwgcmVmZXJlbmNl cwotICogYXJlIGFsc28gZ29uZSwgdGhlbiB0aGUgZG1hX2J1ZiBnZXRzIGRlc3Ryb3llZC4gIFRo aXMgY2FuIGFsc28gaGFwcGVuIGFzIGEKLSAqIHBhcnQgb2YgdGhlIGNsZWFuIHVwIHByb2NlZHVy ZSBpbiB0aGUgZHJtX3JlbGVhc2UoKSBmdW5jdGlvbiBpZiB1c2Vyc3BhY2UKLSAqIGZhaWxzIHRv IHByb3Blcmx5IGNsZWFuIHVwLiAgTm90ZSB0aGF0IGJvdGggdGhlIGtlcm5lbCBhbmQgdXNlcnNw YWNlIChieQotICoga2VlZXBpbmcgdGhlIFBSSU1FIGZpbGUgZGVzY3JpcHRvcnMgb3BlbikgY2Fu IGhvbGQgcmVmZXJlbmNlcyBvbnRvIGEKLSAqICZkbWFfYnVmLgotICoKLSAqIFRodXMgdGhlIGNo YWluIG9mIHJlZmVyZW5jZXMgYWx3YXlzIGZsb3dzIGluIG9uZSBkaXJlY3Rpb24KLSAqIChhdm9p ZGluZyBsb29wcyk6IGltcG9ydGluZ19nZW0gLT4gZG1hYnVmIC0+IGV4cG9ydGluZ19nZW0KLSAq Ci0gKiBTZWxmLWltcG9ydGluZzogaWYgdXNlcnNwYWNlIGlzIHVzaW5nIFBSSU1FIGFzIGEgcmVw bGFjZW1lbnQgZm9yIGZsaW5rCi0gKiB0aGVuIGl0IHdpbGwgZ2V0IGEgZmQtPmhhbmRsZSByZXF1 ZXN0IGZvciBhIEdFTSBvYmplY3QgdGhhdCBpdCBjcmVhdGVkLgotICogRHJpdmVycyBzaG91bGQg ZGV0ZWN0IHRoaXMgc2l0dWF0aW9uIGFuZCByZXR1cm4gYmFjayB0aGUgZ2VtIG9iamVjdAotICog ZnJvbSB0aGUgZG1hLWJ1ZiBwcml2YXRlLiAgUHJpbWUgd2lsbCBkbyB0aGlzIGF1dG9tYXRpY2Fs bHkgZm9yIGRyaXZlcnMgdGhhdAotICogdXNlIHRoZSBkcm1fZ2VtX3ByaW1lX3tpbXBvcnQsZXhw b3J0fSBoZWxwZXJzLgotICoKLSAqIEdFTSBzdHJ1Y3QgJmRtYV9idWZfb3BzIHN5bWJvbHMgYXJl IG5vdyBleHBvcnRlZC4gVGhleSBjYW4gYmUgcmVzdWVkIGJ5Ci0gKiBkcml2ZXJzIHdoaWNoIGlt cGxlbWVudCBHRU0gaW50ZXJmYWNlLgorLyoqCisgKiBET0M6IG92ZXJ2aWV3IGFuZCBsaWZldGlt ZSBydWxlcworICoKKyAqIFNpbWlsYXIgdG8gR0VNIGdsb2JhbCBuYW1lcywgUFJJTUUgZmlsZSBk ZXNjcmlwdG9ycyBhcmUgYWxzbyB1c2VkIHRvIHNoYXJlCisgKiBidWZmZXIgb2JqZWN0cyBhY3Jv c3MgcHJvY2Vzc2VzLiBUaGV5IG9mZmVyIGFkZGl0aW9uYWwgc2VjdXJpdHk6IGFzIGZpbGUKKyAq IGRlc2NyaXB0b3JzIG11c3QgYmUgZXhwbGljaXRseSBzZW50IG92ZXIgVU5JWCBkb21haW4gc29j a2V0cyB0byBiZSBzaGFyZWQKKyAqIGJldHdlZW4gYXBwbGljYXRpb25zLCB0aGV5IGNhbid0IGJl IGd1ZXNzZWQgbGlrZSB0aGUgZ2xvYmFsbHkgdW5pcXVlIEdFTQorICogbmFtZXMuCisgKgorICog RHJpdmVycyB0aGF0IHN1cHBvcnQgdGhlIFBSSU1FIEFQSSBtdXN0IHNldCB0aGUgRFJJVkVSX1BS SU1FIGJpdCBpbiB0aGUKKyAqICZkcm1fZHJpdmVyLmRyaXZlcl9mZWF0dXJlcyBmaWVsZCwgYW5k IGltcGxlbWVudCB0aGUKKyAqICZkcm1fZHJpdmVyLnByaW1lX2hhbmRsZV90b19mZCBhbmQgJmRy bV9kcml2ZXIucHJpbWVfZmRfdG9faGFuZGxlIG9wZXJhdGlvbnMuCisgKiBHRU0gYmFzZWQgZHJp dmVycyBtdXN0IHVzZSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCgpIGFuCisgKiBkcm1fZ2Vt X3ByaW1lX2ZkX3RvX2hhbmRsZSgpIHRvIGltcGxlbWVudCB0aGVzZS4gRm9yIEdFTSBiYXNlZCBk cml2ZXJzIHRoZQorICogYWN0dWFsIGRyaXZlciBpbnRlcmZhY2VzIGlzIHByb3ZpZGVkIHRocm91 Z2ggdGhlICZkcm1fZ2VtX29iamVjdF9mdW5jcy5leHBvcnQKKyAqIGFuZCAmZHJtX2RyaXZlci5n ZW1fcHJpbWVfaW1wb3J0IGhvb2tzLgorICoKKyAqICZkbWFfYnVmX29wcyBpbXBsZW1lbnRhdGlv bnMgZm9yIEdFTSBkcml2ZXJzIGFyZSBhbGwgaW5kaXZpZHVhbGx5IGV4cG9ydGVkCisgKiBmb3Ig ZHJpdmVycyB3aGljaCBuZWVkIHRvIG92ZXJ3cml0ZSBvciByZWltcGxlbWVudCBzb21lIG9mIHRo ZW0uCisgKgorICogUmVmZXJlbmNlIENvdW50aW5nIGZvciBHRU0gRHJpdmVycworICogfn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqIE9uIHRoZSBleHBvcnQgdGhlICZk bWFfYnVmIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBleHBvcnRlZCBidWZmZXIgb2JqZWN0LAor ICogdXN1YWxseSBhICZkcm1fZ2VtX29iamVjdC4gSXQgdGFrZXMgdGhpcyByZWZlcmVuY2UgaW4g dGhlIFBSSU1FX0hBTkRMRV9UT19GRAorICogSU9DVEwsIHdoZW4gaXQgZmlyc3QgY2FsbHMgJmRy bV9nZW1fb2JqZWN0X2Z1bmNzLmV4cG9ydAorICogYW5kIHN0b3JlcyB0aGUgZXhwb3J0aW5nIEdF TSBvYmplY3QgaW4gdGhlICZkbWFfYnVmLnByaXYgZmllbGQuIFRoaXMKKyAqIHJlZmVyZW5jZSBu ZWVkcyB0byBiZSByZWxlYXNlZCB3aGVuIHRoZSBmaW5hbCByZWZlcmVuY2UgdG8gdGhlICZkbWFf YnVmCisgKiBpdHNlbGYgaXMgZHJvcHBlZCBhbmQgaXRzICZkbWFfYnVmX29wcy5yZWxlYXNlIGZ1 bmN0aW9uIGlzIGNhbGxlZC4gIEZvcgorICogR0VNLWJhc2VkIGRyaXZlcnMsIHRoZSAmZG1hX2J1 ZiBzaG91bGQgYmUgZXhwb3J0ZWQgdXNpbmcKKyAqIGRybV9nZW1fZG1hYnVmX2V4cG9ydCgpIGFu ZCB0aGVuIHJlbGVhc2VkIGJ5IGRybV9nZW1fZG1hYnVmX3JlbGVhc2UoKS4KKyAqCisgKiBUaHVz IHRoZSBjaGFpbiBvZiByZWZlcmVuY2VzIGFsd2F5cyBmbG93cyBpbiBvbmUgZGlyZWN0aW9uLCBh dm9pZGluZyBsb29wczoKKyAqIGltcG9ydGluZyBHRU0gb2JqZWN0IC0+IGRtYS1idWYgLT4gZXhw b3J0ZWQgR0VNIGJvLiBBIGZ1cnRoZXIgY29tcGxpY2F0aW9uCisgKiBhcmUgdGhlIGxvb2t1cCBj YWNoZXMgZm9yIGltcG9ydCBhbmQgZXhwb3J0LiBUaGVzZSBhcmUgcmVxdWlyZWQgdG8gZ3VhcmFu dGVlCisgKiB0aGF0IGFueSBnaXZlbiBvYmplY3Qgd2lsbCBhbHdheXMgaGF2ZSBvbmx5IG9uZSB1 bmlxZSB1c2Vyc3BhY2UgaGFuZGxlLiBUaGlzCisgKiBpcyByZXF1aXJlZCB0byBhbGxvdyB1c2Vy c3BhY2UgdG8gZGV0ZWN0IGR1cGxpY2F0ZWQgaW1wb3J0cywgc2luY2Ugc29tZSBHRU0KKyAqIGRy aXZlcnMgZG8gZmFpbCBjb21tYW5kIHN1Ym1pc3Npb25zIGlmIGEgZ2l2ZW4gYnVmZmVyIG9iamVj dCBpcyBsaXN0ZWQgbW9yZQorICogdGhhbiBvbmNlLiBUaGVzZSBpbXBvcnQgYW5kIGV4cG9ydCBj YWNoZXMgaW4gJmRybV9wcmltZV9maWxlX3ByaXZhdGUgb25seQorICogcmV0YWluIGEgd2VhayBy ZWZlcmVuY2UsIHdoaWNoIGlzIGNsZWFuZWQgdXAgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBvYmpl Y3QgaXMKKyAqIHJlbGVhc2VkLgorICoKKyAqIFNlbGYtaW1wb3J0aW5nOiBJZiB1c2Vyc3BhY2Ug aXMgdXNpbmcgUFJJTUUgYXMgYSByZXBsYWNlbWVudCBmb3IgZmxpbmsgdGhlbgorICogaXQgd2ls bCBnZXQgYSBmZC0+aGFuZGxlIHJlcXVlc3QgZm9yIGEgR0VNIG9iamVjdCB0aGF0IGl0IGNyZWF0 ZWQuICBEcml2ZXJzCisgKiBzaG91bGQgZGV0ZWN0IHRoaXMgc2l0dWF0aW9uIGFuZCByZXR1cm4g YmFjayB0aGUgdW5kZXJseWluZyBvYmplY3QgZnJvbSB0aGUKKyAqIGRtYS1idWYgcHJpdmF0ZS4g Rm9yIEdFTSBiYXNlZCBkcml2ZXJzIHRoaXMgaXMgaGFuZGxlZCBpbgorICogZHJtX2dlbV9wcmlt ZV9pbXBvcnQoKSBhbHJlYWR5LgogICovCiAKIHN0cnVjdCBkcm1fcHJpbWVfbWVtYmVyIHsKQEAg LTE4MSw0MiArMTg3LDYgQEAgc3RhdGljIGludCBkcm1fcHJpbWVfbG9va3VwX2J1Zl9oYW5kbGUo c3RydWN0IGRybV9wcmltZV9maWxlX3ByaXZhdGUgKnByaW1lX2ZwcmkKIAlyZXR1cm4gLUVOT0VO VDsKIH0KIAotLyoqCi0gKiBkcm1fZ2VtX21hcF9hdHRhY2ggLSBkbWFfYnVmIGF0dGFjaCBpbXBs ZW1lbnRhdGlvbiBmb3IgR0VNCi0gKiBAZG1hX2J1ZjogYnVmZmVyIHRvIGF0dGFjaCBkZXZpY2Ug dG8KLSAqIEBhdHRhY2g6IGJ1ZmZlciBhdHRhY2htZW50IGRhdGEKLSAqCi0gKiBDYWxscyAmZHJt X2RyaXZlci5nZW1fcHJpbWVfcGluIGZvciBkZXZpY2Ugc3BlY2lmaWMgaGFuZGxpbmcuIFRoaXMg Y2FuIGJlCi0gKiB1c2VkIGFzIHRoZSAmZG1hX2J1Zl9vcHMuYXR0YWNoIGNhbGxiYWNrLgotICoK LSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUu Ci0gKi8KLWludCBkcm1fZ2VtX21hcF9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYV9idWYsCi0J CSAgICAgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCi17Ci0Jc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmogPSBkbWFfYnVmLT5wcml2OwotCi0JcmV0dXJuIGRybV9nZW1fcGlu KG9iaik7Ci19Ci1FWFBPUlRfU1lNQk9MKGRybV9nZW1fbWFwX2F0dGFjaCk7Ci0KLS8qKgotICog ZHJtX2dlbV9tYXBfZGV0YWNoIC0gZG1hX2J1ZiBkZXRhY2ggaW1wbGVtZW50YXRpb24gZm9yIEdF TQotICogQGRtYV9idWY6IGJ1ZmZlciB0byBkZXRhY2ggZnJvbQotICogQGF0dGFjaDogYXR0YWNo bWVudCB0byBiZSBkZXRhY2hlZAotICoKLSAqIENsZWFucyB1cCAmZG1hX2J1Zl9hdHRhY2htZW50 LiBUaGlzIGNhbiBiZSB1c2VkIGFzIHRoZSAmZG1hX2J1Zl9vcHMuZGV0YWNoCi0gKiBjYWxsYmFj ay4KLSAqLwotdm9pZCBkcm1fZ2VtX21hcF9kZXRhY2goc3RydWN0IGRtYV9idWYgKmRtYV9idWYs Ci0JCQlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCi17Ci0Jc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmogPSBkbWFfYnVmLT5wcml2OwotCi0JZHJtX2dlbV91bnBpbihvYmopOwot fQotRVhQT1JUX1NZTUJPTChkcm1fZ2VtX21hcF9kZXRhY2gpOwotCiB2b2lkIGRybV9wcmltZV9y ZW1vdmVfYnVmX2hhbmRsZV9sb2NrZWQoc3RydWN0IGRybV9wcmltZV9maWxlX3ByaXZhdGUgKnBy aW1lX2Zwcml2LAogCQkJCQlzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZikKIHsKQEAgLTI0Miw2NyAr MjEyLDIxIEBAIHZvaWQgZHJtX3ByaW1lX3JlbW92ZV9idWZfaGFuZGxlX2xvY2tlZChzdHJ1Y3Qg ZHJtX3ByaW1lX2ZpbGVfcHJpdmF0ZSAqcHJpbWVfZnByCiAJfQogfQogCi0vKioKLSAqIGRybV9n ZW1fbWFwX2RtYV9idWYgLSBtYXBfZG1hX2J1ZiBpbXBsZW1lbnRhdGlvbiBmb3IgR0VNCi0gKiBA YXR0YWNoOiBhdHRhY2htZW50IHdob3NlIHNjYXR0ZXJsaXN0IGlzIHRvIGJlIHJldHVybmVkCi0g KiBAZGlyOiBkaXJlY3Rpb24gb2YgRE1BIHRyYW5zZmVyCi0gKgotICogQ2FsbHMgJmRybV9kcml2 ZXIuZ2VtX3ByaW1lX2dldF9zZ190YWJsZSBhbmQgdGhlbiBtYXBzIHRoZSBzY2F0dGVybGlzdC4g VGhpcwotICogY2FuIGJlIHVzZWQgYXMgdGhlICZkbWFfYnVmX29wcy5tYXBfZG1hX2J1ZiBjYWxs YmFjay4KLSAqCi0gKiBSZXR1cm5zIHNnX3RhYmxlIGNvbnRhaW5pbmcgdGhlIHNjYXR0ZXJsaXN0 IHRvIGJlIHJldHVybmVkOyByZXR1cm5zIEVSUl9QVFIKLSAqIG9uIGVycm9yLiBNYXkgcmV0dXJu IC1FSU5UUiBpZiBpdCBpcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC4KLSAqLwotCi1zdHJ1Y3Qg c2dfdGFibGUgKmRybV9nZW1fbWFwX2RtYV9idWYoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAq YXR0YWNoLAotCQkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQordm9pZCBkcm1f cHJpbWVfaW5pdF9maWxlX3ByaXZhdGUoc3RydWN0IGRybV9wcmltZV9maWxlX3ByaXZhdGUgKnBy aW1lX2Zwcml2KQogewotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gYXR0YWNoLT5kbWFi dWYtPnByaXY7Ci0Jc3RydWN0IHNnX3RhYmxlICpzZ3Q7Ci0KLQlpZiAoV0FSTl9PTihkaXIgPT0g RE1BX05PTkUpKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQotCWlmIChvYmotPmZ1bmNz KQotCQlzZ3QgPSBvYmotPmZ1bmNzLT5nZXRfc2dfdGFibGUob2JqKTsKLQllbHNlCi0JCXNndCA9 IG9iai0+ZGV2LT5kcml2ZXItPmdlbV9wcmltZV9nZXRfc2dfdGFibGUob2JqKTsKLQotCWlmICgh ZG1hX21hcF9zZ19hdHRycyhhdHRhY2gtPmRldiwgc2d0LT5zZ2wsIHNndC0+bmVudHMsIGRpciwK LQkJCSAgICAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpKSB7Ci0JCXNnX2ZyZWVfdGFibGUoc2d0 KTsKLQkJa2ZyZWUoc2d0KTsKLQkJc2d0ID0gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci0KLQlyZXR1 cm4gc2d0OworCW11dGV4X2luaXQoJnByaW1lX2Zwcml2LT5sb2NrKTsKKwlwcmltZV9mcHJpdi0+ ZG1hYnVmcyA9IFJCX1JPT1Q7CisJcHJpbWVfZnByaXYtPmhhbmRsZXMgPSBSQl9ST09UOwogfQot RVhQT1JUX1NZTUJPTChkcm1fZ2VtX21hcF9kbWFfYnVmKTsKIAotLyoqCi0gKiBkcm1fZ2VtX3Vu bWFwX2RtYV9idWYgLSB1bm1hcF9kbWFfYnVmIGltcGxlbWVudGF0aW9uIGZvciBHRU0KLSAqIEBh dHRhY2g6IGF0dGFjaG1lbnQgdG8gdW5tYXAgYnVmZmVyIGZyb20KLSAqIEBzZ3Q6IHNjYXR0ZXJs aXN0IGluZm8gb2YgdGhlIGJ1ZmZlciB0byB1bm1hcAotICogQGRpcjogZGlyZWN0aW9uIG9mIERN QSB0cmFuc2ZlcgotICoKLSAqIFRoaXMgY2FuIGJlIHVzZWQgYXMgdGhlICZkbWFfYnVmX29wcy51 bm1hcF9kbWFfYnVmIGNhbGxiYWNrLgotICovCi12b2lkIGRybV9nZW1fdW5tYXBfZG1hX2J1Zihz dHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCi0JCQkgICBzdHJ1Y3Qgc2dfdGFibGUg KnNndCwKLQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3ZvaWQgZHJtX3ByaW1l X2Rlc3Ryb3lfZmlsZV9wcml2YXRlKHN0cnVjdCBkcm1fcHJpbWVfZmlsZV9wcml2YXRlICpwcmlt ZV9mcHJpdikKIHsKLQlpZiAoIXNndCkKLQkJcmV0dXJuOwotCi0JZG1hX3VubWFwX3NnX2F0dHJz KGF0dGFjaC0+ZGV2LCBzZ3QtPnNnbCwgc2d0LT5uZW50cywgZGlyLAotCQkJICAgRE1BX0FUVFJf U0tJUF9DUFVfU1lOQyk7Ci0Jc2dfZnJlZV90YWJsZShzZ3QpOwotCWtmcmVlKHNndCk7CisJLyog Ynkgbm93IGRybV9nZW1fcmVsZWFzZSBzaG91bGQndmUgbWFkZSBzdXJlIHRoZSBsaXN0IGlzIGVt cHR5ICovCisJV0FSTl9PTighUkJfRU1QVFlfUk9PVCgmcHJpbWVfZnByaXYtPmRtYWJ1ZnMpKTsK IH0KLUVYUE9SVF9TWU1CT0woZHJtX2dlbV91bm1hcF9kbWFfYnVmKTsKIAogLyoqCi0gKiBkcm1f Z2VtX2RtYWJ1Zl9leHBvcnQgLSBkbWFfYnVmIGV4cG9ydCBpbXBsZW1lbnRhdGlvbiBmb3IgR0VN CisgKiBkcm1fZ2VtX2RtYWJ1Zl9leHBvcnQgLSAmZG1hX2J1ZiBleHBvcnQgaW1wbGVtZW50YXRp b24gZm9yIEdFTQogICogQGRldjogcGFyZW50IGRldmljZSBmb3IgdGhlIGV4cG9ydGVkIGRtYWJ1 ZgogICogQGV4cF9pbmZvOiB0aGUgZXhwb3J0IGluZm9ybWF0aW9uIHVzZWQgYnkgZG1hX2J1Zl9l eHBvcnQoKQogICoKQEAgLTMzMCwxMSArMjU0LDExIEBAIHN0cnVjdCBkbWFfYnVmICpkcm1fZ2Vt X2RtYWJ1Zl9leHBvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIEVYUE9SVF9TWU1CT0woZHJt X2dlbV9kbWFidWZfZXhwb3J0KTsKIAogLyoqCi0gKiBkcm1fZ2VtX2RtYWJ1Zl9yZWxlYXNlIC0g ZG1hX2J1ZiByZWxlYXNlIGltcGxlbWVudGF0aW9uIGZvciBHRU0KKyAqIGRybV9nZW1fZG1hYnVm X3JlbGVhc2UgLSAmZG1hX2J1ZiByZWxlYXNlIGltcGxlbWVudGF0aW9uIGZvciBHRU0KICAqIEBk bWFfYnVmOiBidWZmZXIgdG8gYmUgcmVsZWFzZWQKICAqCiAgKiBHZW5lcmljIHJlbGVhc2UgZnVu Y3Rpb24gZm9yIGRtYV9idWZzIGV4cG9ydGVkIGFzIFBSSU1FIGJ1ZmZlcnMuIEdFTSBkcml2ZXJz Ci0gKiBtdXN0IHVzZSB0aGlzIGluIHRoZWlyIGRtYV9idWYgb3BzIHN0cnVjdHVyZSBhcyB0aGUg cmVsZWFzZSBjYWxsYmFjay4KKyAqIG11c3QgdXNlIHRoaXMgaW4gdGhlaXIgJmRtYV9idWZfb3Bz IHN0cnVjdHVyZSBhcyB0aGUgcmVsZWFzZSBjYWxsYmFjay4KICAqIGRybV9nZW1fZG1hYnVmX3Jl bGVhc2UoKSBzaG91bGQgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCiAgKiBkcm1fZ2VtX2Rt YWJ1Zl9leHBvcnQoKS4KICAqLwpAQCAtMzUxLDEyOCArMjc1LDEwMSBAQCB2b2lkIGRybV9nZW1f ZG1hYnVmX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYV9idWYpCiBFWFBPUlRfU1lNQk9MKGRy bV9nZW1fZG1hYnVmX3JlbGVhc2UpOwogCiAvKioKLSAqIGRybV9nZW1fZG1hYnVmX3ZtYXAgLSBk bWFfYnVmIHZtYXAgaW1wbGVtZW50YXRpb24gZm9yIEdFTQotICogQGRtYV9idWY6IGJ1ZmZlciB0 byBiZSBtYXBwZWQKLSAqCi0gKiBTZXRzIHVwIGEga2VybmVsIHZpcnR1YWwgbWFwcGluZy4gVGhp cyBjYW4gYmUgdXNlZCBhcyB0aGUgJmRtYV9idWZfb3BzLnZtYXAKLSAqIGNhbGxiYWNrLgorICog ZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUgLSBQUklNRSBpbXBvcnQgZnVuY3Rpb24gZm9yIEdF TSBkcml2ZXJzCisgKiBAZGV2OiBkZXYgdG8gZXhwb3J0IHRoZSBidWZmZXIgZnJvbQorICogQGZp bGVfcHJpdjogZHJtIGZpbGUtcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEBwcmltZV9mZDogZmQgaWQg b2YgdGhlIGRtYS1idWYgd2hpY2ggc2hvdWxkIGJlIGltcG9ydGVkCisgKiBAaGFuZGxlOiBwb2lu dGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSBoYW5kbGUgb2YgdGhlIGltcG9ydGVkIGJ1ZmZlciBvYmpl Y3QKICAqCi0gKiBSZXR1cm5zIHRoZSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzLgorICogVGhpcyBp cyB0aGUgUFJJTUUgaW1wb3J0IGZ1bmN0aW9uIHdoaWNoIG11c3QgYmUgdXNlZCBtYW5kYXRvcmls eSBieSBHRU0KKyAqIGRyaXZlcnMgdG8gZW5zdXJlIGNvcnJlY3QgbGlmZXRpbWUgbWFuYWdlbWVu dCBvZiB0aGUgdW5kZXJseWluZyBHRU0gb2JqZWN0LgorICogVGhlIGFjdHVhbCBpbXBvcnRpbmcg b2YgR0VNIG9iamVjdCBmcm9tIHRoZSBkbWEtYnVmIGlzIGRvbmUgdGhyb3VnaCB0aGUKKyAqICZk cm1fZHJpdmVyLmdlbV9pbXBvcnRfZXhwb3J0IGRyaXZlciBjYWxsYmFjay4KICAqLwotdm9pZCAq ZHJtX2dlbV9kbWFidWZfdm1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZikKK2ludCBkcm1fZ2Vt X3ByaW1lX2ZkX3RvX2hhbmRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0 cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBpbnQgcHJpbWVfZmQsCisJCQkgICAgICAgdWludDMy X3QgKmhhbmRsZSkKIHsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IGRtYV9idWYtPnBy aXY7Ci0Jdm9pZCAqdmFkZHI7CisJc3RydWN0IGRtYV9idWYgKmRtYV9idWY7CisJc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IHJldDsKIAotCXZhZGRyID0gZHJtX2dlbV92bWFwKG9i aik7Ci0JaWYgKElTX0VSUih2YWRkcikpCi0JCXZhZGRyID0gTlVMTDsKKwlkbWFfYnVmID0gZG1h X2J1Zl9nZXQocHJpbWVfZmQpOworCWlmIChJU19FUlIoZG1hX2J1ZikpCisJCXJldHVybiBQVFJf RVJSKGRtYV9idWYpOwogCi0JcmV0dXJuIHZhZGRyOwotfQotRVhQT1JUX1NZTUJPTChkcm1fZ2Vt X2RtYWJ1Zl92bWFwKTsKKwltdXRleF9sb2NrKCZmaWxlX3ByaXYtPnByaW1lLmxvY2spOwogCi0v KioKLSAqIGRybV9nZW1fZG1hYnVmX3Z1bm1hcCAtIGRtYV9idWYgdnVubWFwIGltcGxlbWVudGF0 aW9uIGZvciBHRU0KLSAqIEBkbWFfYnVmOiBidWZmZXIgdG8gYmUgdW5tYXBwZWQKLSAqIEB2YWRk cjogdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgYnVmZmVyCi0gKgotICogUmVsZWFzZXMgYSBr ZXJuZWwgdmlydHVhbCBtYXBwaW5nLiBUaGlzIGNhbiBiZSB1c2VkIGFzIHRoZQotICogJmRtYV9i dWZfb3BzLnZ1bm1hcCBjYWxsYmFjay4KLSAqLwotdm9pZCBkcm1fZ2VtX2RtYWJ1Zl92dW5tYXAo c3RydWN0IGRtYV9idWYgKmRtYV9idWYsIHZvaWQgKnZhZGRyKQotewotCXN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqID0gZG1hX2J1Zi0+cHJpdjsKKwlyZXQgPSBkcm1fcHJpbWVfbG9va3VwX2J1 Zl9oYW5kbGUoJmZpbGVfcHJpdi0+cHJpbWUsCisJCQlkbWFfYnVmLCBoYW5kbGUpOworCWlmIChy ZXQgPT0gMCkKKwkJZ290byBvdXRfcHV0OwogCi0JZHJtX2dlbV92dW5tYXAob2JqLCB2YWRkcik7 Ci19Ci1FWFBPUlRfU1lNQk9MKGRybV9nZW1fZG1hYnVmX3Z1bm1hcCk7CisJLyogbmV2ZXIgc2Vl biB0aGlzIG9uZSwgbmVlZCB0byBpbXBvcnQgKi8KKwltdXRleF9sb2NrKCZkZXYtPm9iamVjdF9u YW1lX2xvY2spOworCWlmIChkZXYtPmRyaXZlci0+Z2VtX3ByaW1lX2ltcG9ydCkKKwkJb2JqID0g ZGV2LT5kcml2ZXItPmdlbV9wcmltZV9pbXBvcnQoZGV2LCBkbWFfYnVmKTsKKwllbHNlCisJCW9i aiA9IGRybV9nZW1fcHJpbWVfaW1wb3J0KGRldiwgZG1hX2J1Zik7CisJaWYgKElTX0VSUihvYmop KSB7CisJCXJldCA9IFBUUl9FUlIob2JqKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KIAotLyoq Ci0gKiBkcm1fZ2VtX2RtYWJ1Zl9tbWFwIC0gZG1hX2J1ZiBtbWFwIGltcGxlbWVudGF0aW9uIGZv ciBHRU0KLSAqIEBkbWFfYnVmOiBidWZmZXIgdG8gYmUgbWFwcGVkCi0gKiBAdm1hOiB2aXJ0dWFs IGFkZHJlc3MgcmFuZ2UKLSAqCi0gKiBQcm92aWRlcyBtZW1vcnkgbWFwcGluZyBmb3IgdGhlIGJ1 ZmZlci4gVGhpcyBjYW4gYmUgdXNlZCBhcyB0aGUKLSAqICZkbWFfYnVmX29wcy5tbWFwIGNhbGxi YWNrLgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29k ZSBvbiBmYWlsdXJlLgotICovCi1pbnQgZHJtX2dlbV9kbWFidWZfbW1hcChzdHJ1Y3QgZG1hX2J1 ZiAqZG1hX2J1Ziwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmogPSBkbWFfYnVmLT5wcml2OwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBvYmotPmRldjsKKwlpZiAob2JqLT5kbWFfYnVmKSB7CisJCVdBUk5fT04ob2JqLT5kbWFfYnVm ICE9IGRtYV9idWYpOworCX0gZWxzZSB7CisJCW9iai0+ZG1hX2J1ZiA9IGRtYV9idWY7CisJCWdl dF9kbWFfYnVmKGRtYV9idWYpOworCX0KIAotCWlmICghZGV2LT5kcml2ZXItPmdlbV9wcmltZV9t bWFwKQotCQlyZXR1cm4gLUVOT1NZUzsKKwkvKiBfaGFuZGxlX2NyZWF0ZV90YWlsIHVuY29uZGl0 aW9uYWxseSB1bmxvY2tzIGRldi0+b2JqZWN0X25hbWVfbG9jay4gKi8KKwlyZXQgPSBkcm1fZ2Vt X2hhbmRsZV9jcmVhdGVfdGFpbChmaWxlX3ByaXYsIG9iaiwgaGFuZGxlKTsKKwlkcm1fZ2VtX29i amVjdF9wdXRfdW5sb2NrZWQob2JqKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9wdXQ7CiAKLQly ZXR1cm4gZGV2LT5kcml2ZXItPmdlbV9wcmltZV9tbWFwKG9iaiwgdm1hKTsKLX0KLUVYUE9SVF9T WU1CT0woZHJtX2dlbV9kbWFidWZfbW1hcCk7CisJcmV0ID0gZHJtX3ByaW1lX2FkZF9idWZfaGFu ZGxlKCZmaWxlX3ByaXYtPnByaW1lLAorCQkJZG1hX2J1ZiwgKmhhbmRsZSk7CisJbXV0ZXhfdW5s b2NrKCZmaWxlX3ByaXYtPnByaW1lLmxvY2spOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKIAot c3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyBkcm1fZ2VtX3ByaW1lX2RtYWJ1Zl9vcHMg PSAgewotCS5jYWNoZV9zZ3RfbWFwcGluZyA9IHRydWUsCi0JLmF0dGFjaCA9IGRybV9nZW1fbWFw X2F0dGFjaCwKLQkuZGV0YWNoID0gZHJtX2dlbV9tYXBfZGV0YWNoLAotCS5tYXBfZG1hX2J1ZiA9 IGRybV9nZW1fbWFwX2RtYV9idWYsCi0JLnVubWFwX2RtYV9idWYgPSBkcm1fZ2VtX3VubWFwX2Rt YV9idWYsCi0JLnJlbGVhc2UgPSBkcm1fZ2VtX2RtYWJ1Zl9yZWxlYXNlLAotCS5tbWFwID0gZHJt X2dlbV9kbWFidWZfbW1hcCwKLQkudm1hcCA9IGRybV9nZW1fZG1hYnVmX3ZtYXAsCi0JLnZ1bm1h cCA9IGRybV9nZW1fZG1hYnVmX3Z1bm1hcCwKLX07CisJZG1hX2J1Zl9wdXQoZG1hX2J1Zik7CiAK LS8qKgotICogRE9DOiBQUklNRSBIZWxwZXJzCi0gKgotICogRHJpdmVycyBjYW4gaW1wbGVtZW50 IEBnZW1fcHJpbWVfZXhwb3J0IGFuZCBAZ2VtX3ByaW1lX2ltcG9ydCBpbiB0ZXJtcyBvZgotICog c2ltcGxlciBBUElzIGJ5IHVzaW5nIHRoZSBoZWxwZXIgZnVuY3Rpb25zIEBkcm1fZ2VtX3ByaW1l X2V4cG9ydCBhbmQKLSAqIEBkcm1fZ2VtX3ByaW1lX2ltcG9ydC4gIFRoZXNlIGZ1bmN0aW9ucyBp bXBsZW1lbnQgZG1hLWJ1ZiBzdXBwb3J0IGluIHRlcm1zIG9mCi0gKiBzaXggbG93ZXItbGV2ZWwg ZHJpdmVyIGNhbGxiYWNrczoKLSAqCi0gKiBFeHBvcnQgY2FsbGJhY2tzOgotICoKLSAqICAqIEBn ZW1fcHJpbWVfcGluIChvcHRpb25hbCk6IHByZXBhcmUgYSBHRU0gb2JqZWN0IGZvciBleHBvcnRp bmcKLSAqICAqIEBnZW1fcHJpbWVfZ2V0X3NnX3RhYmxlOiBwcm92aWRlIGEgc2NhdHRlci9nYXRo ZXIgdGFibGUgb2YgcGlubmVkIHBhZ2VzCi0gKiAgKiBAZ2VtX3ByaW1lX3ZtYXA6IHZtYXAgYSBi dWZmZXIgZXhwb3J0ZWQgYnkgeW91ciBkcml2ZXIKLSAqICAqIEBnZW1fcHJpbWVfdnVubWFwOiB2 dW5tYXAgYSBidWZmZXIgZXhwb3J0ZWQgYnkgeW91ciBkcml2ZXIKLSAqICAqIEBnZW1fcHJpbWVf bW1hcCAob3B0aW9uYWwpOiBtbWFwIGEgYnVmZmVyIGV4cG9ydGVkIGJ5IHlvdXIgZHJpdmVyCi0g KgotICogSW1wb3J0IGNhbGxiYWNrOgotICoKLSAqICAqIEBnZW1fcHJpbWVfaW1wb3J0X3NnX3Rh YmxlIChpbXBvcnQpOiBwcm9kdWNlIGEgR0VNIG9iamVjdCBmcm9tIGFub3RoZXIKLSAqICAgIGRy aXZlcidzIHNjYXR0ZXIvZ2F0aGVyIHRhYmxlCi0gKi8KKwlyZXR1cm4gMDsKIAotLyoqCi0gKiBk cm1fZ2VtX3ByaW1lX2V4cG9ydCAtIGhlbHBlciBsaWJyYXJ5IGltcGxlbWVudGF0aW9uIG9mIHRo ZSBleHBvcnQgY2FsbGJhY2sKLSAqIEBkZXY6IGRybV9kZXZpY2UgdG8gZXhwb3J0IGZyb20KLSAq IEBvYmo6IEdFTSBvYmplY3QgdG8gZXhwb3J0Ci0gKiBAZmxhZ3M6IGZsYWdzIGxpa2UgRFJNX0NM T0VYRUMgYW5kIERSTV9SRFdSCi0gKgotICogVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2Yg dGhlIGdlbV9wcmltZV9leHBvcnQgZnVuY3Rpb25zIGZvciBHRU0gZHJpdmVycwotICogdXNpbmcg dGhlIFBSSU1FIGhlbHBlcnMuCi0gKi8KLXN0cnVjdCBkbWFfYnVmICpkcm1fZ2VtX3ByaW1lX2V4 cG9ydChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmosCi0JCQkJICAgICBpbnQgZmxhZ3MpCitmYWlsOgorCS8qIGhtbSwgaWYgZHJpdmVy IGF0dGFjaGVkLCB3ZSBhcmUgcmVseWluZyBvbiB0aGUgZnJlZS1vYmplY3QgcGF0aAorCSAqIHRv IGRldGFjaC4uIHdoaWNoIHNlZW1zIG9rLi4KKwkgKi8KKwlkcm1fZ2VtX2hhbmRsZV9kZWxldGUo ZmlsZV9wcml2LCAqaGFuZGxlKTsKKwlkbWFfYnVmX3B1dChkbWFfYnVmKTsKKwlyZXR1cm4gcmV0 OworCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmZGV2LT5vYmplY3RfbmFtZV9sb2NrKTsK K291dF9wdXQ6CisJbXV0ZXhfdW5sb2NrKCZmaWxlX3ByaXYtPnByaW1lLmxvY2spOworCWRtYV9i dWZfcHV0KGRtYV9idWYpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZW1f cHJpbWVfZmRfdG9faGFuZGxlKTsKKworaW50IGRybV9wcmltZV9mZF90b19oYW5kbGVfaW9jdGwo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQkgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYpCiB7Ci0Jc3RydWN0IGRtYV9idWZfZXhwb3J0X2luZm8gZXhwX2luZm8gPSB7 Ci0JCS5leHBfbmFtZSA9IEtCVUlMRF9NT0ROQU1FLCAvKiB3aGl0ZSBsaWUgZm9yIGRlYnVnICov Ci0JCS5vd25lciA9IGRldi0+ZHJpdmVyLT5mb3BzLT5vd25lciwKLQkJLm9wcyA9ICZkcm1fZ2Vt X3ByaW1lX2RtYWJ1Zl9vcHMsCi0JCS5zaXplID0gb2JqLT5zaXplLAotCQkuZmxhZ3MgPSBmbGFn cywKLQkJLnByaXYgPSBvYmosCi0JCS5yZXN2ID0gb2JqLT5yZXN2LAotCX07CisJc3RydWN0IGRy bV9wcmltZV9oYW5kbGUgKmFyZ3MgPSBkYXRhOwogCi0JaWYgKGRldi0+ZHJpdmVyLT5nZW1fcHJp bWVfcmVzX29iaikKLQkJZXhwX2luZm8ucmVzdiA9IGRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfcmVz X29iaihvYmopOworCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9QUklN RSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiBkcm1fZ2VtX2RtYWJ1Zl9leHBv cnQoZGV2LCAmZXhwX2luZm8pOworCWlmICghZGV2LT5kcml2ZXItPnByaW1lX2ZkX3RvX2hhbmRs ZSkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlyZXR1cm4gZGV2LT5kcml2ZXItPnByaW1lX2ZkX3Rv X2hhbmRsZShkZXYsIGZpbGVfcHJpdiwKKwkJCWFyZ3MtPmZkLCAmYXJncy0+aGFuZGxlKTsKIH0K LUVYUE9SVF9TWU1CT0woZHJtX2dlbV9wcmltZV9leHBvcnQpOwogCiBzdGF0aWMgc3RydWN0IGRt YV9idWYgKmV4cG9ydF9hbmRfcmVnaXN0ZXJfb2JqZWN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CiAJCQkJCQkgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLApAQCAtNTIxLDcgKzQxOCw3IEBA IHN0YXRpYyBzdHJ1Y3QgZG1hX2J1ZiAqZXhwb3J0X2FuZF9yZWdpc3Rlcl9vYmplY3Qoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKICAqIFRoaXMgaXMgdGhlIFBSSU1FIGV4cG9ydCBmdW5jdGlvbiB3 aGljaCBtdXN0IGJlIHVzZWQgbWFuZGF0b3JpbHkgYnkgR0VNCiAgKiBkcml2ZXJzIHRvIGVuc3Vy ZSBjb3JyZWN0IGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgdGhlIHVuZGVybHlpbmcgR0VNIG9iamVj dC4KICAqIFRoZSBhY3R1YWwgZXhwb3J0aW5nIGZyb20gR0VNIG9iamVjdCB0byBhIGRtYS1idWYg aXMgZG9uZSB0aHJvdWdoIHRoZQotICogZ2VtX3ByaW1lX2V4cG9ydCBkcml2ZXIgY2FsbGJhY2su CisgKiAmZHJtX2RyaXZlci5nZW1fcHJpbWVfZXhwb3J0IGRyaXZlciBjYWxsYmFjay4KICAqLwog aW50IGRybV9nZW1fcHJpbWVfaGFuZGxlX3RvX2ZkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJ CQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHVpbnQzMl90IGhhbmRsZSwKQEAg LTYxMCw2ICs1MDcsMTk4IEBAIGludCBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAogfQogRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3ByaW1lX2hhbmRsZV90 b19mZCk7CiAKK2ludCBkcm1fcHJpbWVfaGFuZGxlX3RvX2ZkX2lvY3RsKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQor eworCXN0cnVjdCBkcm1fcHJpbWVfaGFuZGxlICphcmdzID0gZGF0YTsKKworCWlmICghZHJtX2Nv cmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9QUklNRSkpCisJCXJldHVybiAtRU9QTk9UU1VQ UDsKKworCWlmICghZGV2LT5kcml2ZXItPnByaW1lX2hhbmRsZV90b19mZCkKKwkJcmV0dXJuIC1F Tk9TWVM7CisKKwkvKiBjaGVjayBmbGFncyBhcmUgdmFsaWQgKi8KKwlpZiAoYXJncy0+ZmxhZ3Mg JiB+KERSTV9DTE9FWEVDIHwgRFJNX1JEV1IpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVy biBkZXYtPmRyaXZlci0+cHJpbWVfaGFuZGxlX3RvX2ZkKGRldiwgZmlsZV9wcml2LAorCQkJYXJn cy0+aGFuZGxlLCBhcmdzLT5mbGFncywgJmFyZ3MtPmZkKTsKK30KKworLyoqCisgKiBET0M6IFBS SU1FIEhlbHBlcnMKKyAqCisgKiBEcml2ZXJzIGNhbiBpbXBsZW1lbnQgJmRybV9nZW1fb2JqZWN0 X2Z1bmNzLmV4cG9ydCBhbmQKKyAqICZkcm1fZHJpdmVyLmdlbV9wcmltZV9pbXBvcnQgaW4gdGVy bXMgb2Ygc2ltcGxlciBBUElzIGJ5IHVzaW5nIHRoZSBoZWxwZXIKKyAqIGZ1bmN0aW9ucyBkcm1f Z2VtX3ByaW1lX2V4cG9ydCgpIGFuZCBkcm1fZ2VtX3ByaW1lX2ltcG9ydCgpLiAgVGhlc2UgZnVu Y3Rpb25zCisgKiBpbXBsZW1lbnQgZG1hLWJ1ZiBzdXBwb3J0IGluIHRlcm1zIG9mIHNvbWUgbG93 ZXItbGV2ZWwgaGVscGVycywgd2hpY2ggYXJlCisgKiBhZ2FpbiBleHBvcnRlZCBmb3IgZHJpdmVy cyB0byB1c2UgaW5kaXZpZHVhbGx5OgorICoKKyAqIEV4cG9ydGluZyBidWZmZXJzCisgKiB+fn5+ fn5+fn5+fn5+fn5+fgorICoKKyAqIE9wdGlvbmFsIHBpbm5pbmcgb2YgYnVmZmVycyBpcyBoYW5k bGVkIGF0IGRtYS1idWYgYXR0YWNoIGFuZCBkZXRhY2ggdGltZSBpbgorICogZHJtX2dlbV9tYXBf YXR0YWNoKCkgYW5kIGRybV9nZW1fbWFwX2RldGFjaCgpLiBCYWNraW5nIHN0b3JhZ2UgaXRzZWxm IGlzCisgKiBoYW5kbGVkIGJ5IGRybV9nZW1fbWFwX2RtYV9idWYoKSBhbmQgZHJtX2dlbV91bm1h cF9kbWFfYnVmKCksIHdoaWNoIHJlbGllcyBvbgorICogJmRybV9nZW1fb2JqZWN0X2Z1bmNzLmdl dF9zZ190YWJsZS4KKyAqCisgKiBGb3Iga2VybmVsLWludGVybmFsIGFjY2VzcyB0aGVyZSdzIGRy bV9nZW1fZG1hYnVmX3ZtYXAoKSBhbmQKKyAqIGRybV9nZW1fZG1hYnVmX3Z1bm1hcCgpLiBVc2Vy c3BhY2UgbW1hcCBzdXBwb3J0IGlzIHByb3ZpZGVkIGJ5CisgKiBkcm1fZ2VtX2RtYWJ1Zl9tbWFw KCkuCisgKgorICogTm90ZSB0aGF0IHRoZXNlIGV4cG9ydCBoZWxwZXJzIGNhbiBvbmx5IGJlIHVz ZWQgaWYgdGhlIHVuZGVybHlpbmcgYmFja2luZworICogc3RvcmFnZSBpcyBmdWxseSBjb2hlcmVu dCBhbmQgZWl0aGVyIHBlcm1hbmVudGx5IHBpbm5lZCwgb3IgaXQgaXMgc2FmZSB0byBwaW4KKyAq IGl0IGluZGVmaW5pdGVseS4KKyAqCisgKiBGSVhNRTogVGhlIHVuZGVybHlpbmcgaGVscGVyIGZ1 bmN0aW9ucyBhcmUgbmFtZWQgcmF0aGVyIGluY29uc2lzdGVudGx5LgorICoKKyAqIEV4cG9ydGlu ZyBidWZmZXJzCisgKiB+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqIEltcG9ydGluZyBkbWEtYnVm cyB1c2luZyBkcm1fZ2VtX3ByaW1lX2ltcG9ydCgpIHJlbGllcyBvbgorICogJmRybV9kcml2ZXIu Z2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZS4KKyAqCisgKiBOb3RlIHRoYXQgc2ltaWxhcmx5IHRv IHRoZSBleHBvcnQgaGVscGVycyB0aGlzIHBlcm1hbmVudGx5IHBpbnMgdGhlCisgKiB1bmRlcmx5 aW5nIGJhY2tpbmcgc3RvcmFnZS4gV2hpY2ggaXMgb2sgZm9yIHNjYW5vdXQsIGJ1dCBpcyBub3Qg dGhlIGJlc3QKKyAqIG9wdGlvbiBmb3Igc2hhcmluZyBsb3RzIG9mIGJ1ZmZlcnMgZm9yIHJlbmRl cmluZy4KKyAqLworCisvKioKKyAqIGRybV9nZW1fbWFwX2F0dGFjaCAtIGRtYV9idWYgYXR0YWNo IGltcGxlbWVudGF0aW9uIGZvciBHRU0KKyAqIEBkbWFfYnVmOiBidWZmZXIgdG8gYXR0YWNoIGRl dmljZSB0bworICogQGF0dGFjaDogYnVmZmVyIGF0dGFjaG1lbnQgZGF0YQorICoKKyAqIENhbGxz ICZkcm1fZ2VtX29iamVjdF9mdW5jcy5waW4gZm9yIGRldmljZSBzcGVjaWZpYyBoYW5kbGluZy4g VGhpcyBjYW4gYmUKKyAqIHVzZWQgYXMgdGhlICZkbWFfYnVmX29wcy5hdHRhY2ggY2FsbGJhY2su IE11c3QgYmUgdXNlZCB0b2dldGhlciB3aXRoCisgKiBkcm1fZ2VtX21hcF9kZXRhY2goKS4KKyAq CisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJl LgorICovCitpbnQgZHJtX2dlbV9tYXBfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmLAor CQkgICAgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQoreworCXN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqID0gZG1hX2J1Zi0+cHJpdjsKKworCXJldHVybiBkcm1fZ2VtX3Bp bihvYmopOworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX21hcF9hdHRhY2gpOworCisvKioKKyAq IGRybV9nZW1fbWFwX2RldGFjaCAtIGRtYV9idWYgZGV0YWNoIGltcGxlbWVudGF0aW9uIGZvciBH RU0KKyAqIEBkbWFfYnVmOiBidWZmZXIgdG8gZGV0YWNoIGZyb20KKyAqIEBhdHRhY2g6IGF0dGFj aG1lbnQgdG8gYmUgZGV0YWNoZWQKKyAqCisgKiBDYWxscyAmZHJtX2dlbV9vYmplY3RfZnVuY3Mu cGluIGZvciBkZXZpY2Ugc3BlY2lmaWMgaGFuZGxpbmcuICBDbGVhbnMgdXAKKyAqICZkbWFfYnVm X2F0dGFjaG1lbnQgZnJvbSBkcm1fZ2VtX21hcF9hdHRhY2goKS4gVGhpcyBjYW4gYmUgdXNlZCBh cyB0aGUKKyAqICZkbWFfYnVmX29wcy5kZXRhY2ggY2FsbGJhY2suCisgKi8KK3ZvaWQgZHJtX2dl bV9tYXBfZGV0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmLAorCQkJc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCAqYXR0YWNoKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gZG1h X2J1Zi0+cHJpdjsKKworCWRybV9nZW1fdW5waW4ob2JqKTsKK30KK0VYUE9SVF9TWU1CT0woZHJt X2dlbV9tYXBfZGV0YWNoKTsKKworLyoqCisgKiBkcm1fZ2VtX21hcF9kbWFfYnVmIC0gbWFwX2Rt YV9idWYgaW1wbGVtZW50YXRpb24gZm9yIEdFTQorICogQGF0dGFjaDogYXR0YWNobWVudCB3aG9z ZSBzY2F0dGVybGlzdCBpcyB0byBiZSByZXR1cm5lZAorICogQGRpcjogZGlyZWN0aW9uIG9mIERN QSB0cmFuc2ZlcgorICoKKyAqIENhbGxzICZkcm1fZ2VtX29iamVjdF9mdW5jcy5nZXRfc2dfdGFi bGUgYW5kIHRoZW4gbWFwcyB0aGUgc2NhdHRlcmxpc3QuIFRoaXMKKyAqIGNhbiBiZSB1c2VkIGFz IHRoZSAmZG1hX2J1Zl9vcHMubWFwX2RtYV9idWYgY2FsbGJhY2suIFNob3VsZCBiZSB1c2VkIHRv Z2V0aGVyCisgKiB3aXRoIGRybV9nZW1fdW5tYXBfZG1hX2J1ZigpLgorICoKKyAqIFJldHVybnM6 c2dfdGFibGUgY29udGFpbmluZyB0aGUgc2NhdHRlcmxpc3QgdG8gYmUgcmV0dXJuZWQ7IHJldHVy bnMgRVJSX1BUUgorICogb24gZXJyb3IuIE1heSByZXR1cm4gLUVJTlRSIGlmIGl0IGlzIGludGVy cnVwdGVkIGJ5IGEgc2lnbmFsLgorICovCitzdHJ1Y3Qgc2dfdGFibGUgKmRybV9nZW1fbWFwX2Rt YV9idWYoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAorCQkJCSAgICAgZW51bSBk bWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0g YXR0YWNoLT5kbWFidWYtPnByaXY7CisJc3RydWN0IHNnX3RhYmxlICpzZ3Q7CisKKwlpZiAoV0FS Tl9PTihkaXIgPT0gRE1BX05PTkUpKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWlm IChvYmotPmZ1bmNzKQorCQlzZ3QgPSBvYmotPmZ1bmNzLT5nZXRfc2dfdGFibGUob2JqKTsKKwll bHNlCisJCXNndCA9IG9iai0+ZGV2LT5kcml2ZXItPmdlbV9wcmltZV9nZXRfc2dfdGFibGUob2Jq KTsKKworCWlmICghZG1hX21hcF9zZ19hdHRycyhhdHRhY2gtPmRldiwgc2d0LT5zZ2wsIHNndC0+ bmVudHMsIGRpciwKKwkJCSAgICAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpKSB7CisJCXNnX2Zy ZWVfdGFibGUoc2d0KTsKKwkJa2ZyZWUoc2d0KTsKKwkJc2d0ID0gRVJSX1BUUigtRU5PTUVNKTsK Kwl9CisKKwlyZXR1cm4gc2d0OworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX21hcF9kbWFfYnVm KTsKKworLyoqCisgKiBkcm1fZ2VtX3VubWFwX2RtYV9idWYgLSB1bm1hcF9kbWFfYnVmIGltcGxl bWVudGF0aW9uIGZvciBHRU0KKyAqIEBhdHRhY2g6IGF0dGFjaG1lbnQgdG8gdW5tYXAgYnVmZmVy IGZyb20KKyAqIEBzZ3Q6IHNjYXR0ZXJsaXN0IGluZm8gb2YgdGhlIGJ1ZmZlciB0byB1bm1hcAor ICogQGRpcjogZGlyZWN0aW9uIG9mIERNQSB0cmFuc2ZlcgorICoKKyAqIFRoaXMgY2FuIGJlIHVz ZWQgYXMgdGhlICZkbWFfYnVmX29wcy51bm1hcF9kbWFfYnVmIGNhbGxiYWNrLgorICovCit2b2lk IGRybV9nZW1fdW5tYXBfZG1hX2J1ZihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gs CisJCQkgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCwKKwkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0 aW9uIGRpcikKK3sKKwlpZiAoIXNndCkKKwkJcmV0dXJuOworCisJZG1hX3VubWFwX3NnX2F0dHJz KGF0dGFjaC0+ZGV2LCBzZ3QtPnNnbCwgc2d0LT5uZW50cywgZGlyLAorCQkJICAgRE1BX0FUVFJf U0tJUF9DUFVfU1lOQyk7CisJc2dfZnJlZV90YWJsZShzZ3QpOworCWtmcmVlKHNndCk7Cit9CitF WFBPUlRfU1lNQk9MKGRybV9nZW1fdW5tYXBfZG1hX2J1Zik7CisKKy8qKgorICogZHJtX2dlbV9k bWFidWZfdm1hcCAtIGRtYV9idWYgdm1hcCBpbXBsZW1lbnRhdGlvbiBmb3IgR0VNCisgKiBAZG1h X2J1ZjogYnVmZmVyIHRvIGJlIG1hcHBlZAorICoKKyAqIFNldHMgdXAgYSBrZXJuZWwgdmlydHVh bCBtYXBwaW5nLiBUaGlzIGNhbiBiZSB1c2VkIGFzIHRoZSAmZG1hX2J1Zl9vcHMudm1hcAorICog Y2FsbGJhY2suIENhbGxzIGludG8gJmRybV9nZW1fb2JqZWN0X2Z1bmNzLnZtYXAgZm9yIGRldmlj ZSBzcGVjaWZpYyBoYW5kbGluZy4KKyAqCisgKiBSZXR1cm5zIHRoZSBrZXJuZWwgdmlydHVhbCBh ZGRyZXNzLgorICovCit2b2lkICpkcm1fZ2VtX2RtYWJ1Zl92bWFwKHN0cnVjdCBkbWFfYnVmICpk bWFfYnVmKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gZG1hX2J1Zi0+cHJpdjsK Kwl2b2lkICp2YWRkcjsKKworCXZhZGRyID0gZHJtX2dlbV92bWFwKG9iaik7CisJaWYgKElTX0VS Uih2YWRkcikpCisJCXZhZGRyID0gTlVMTDsKKworCXJldHVybiB2YWRkcjsKK30KK0VYUE9SVF9T WU1CT0woZHJtX2dlbV9kbWFidWZfdm1hcCk7CisKKy8qKgorICogZHJtX2dlbV9kbWFidWZfdnVu bWFwIC0gZG1hX2J1ZiB2dW5tYXAgaW1wbGVtZW50YXRpb24gZm9yIEdFTQorICogQGRtYV9idWY6 IGJ1ZmZlciB0byBiZSB1bm1hcHBlZAorICogQHZhZGRyOiB0aGUgdmlydHVhbCBhZGRyZXNzIG9m IHRoZSBidWZmZXIKKyAqCisgKiBSZWxlYXNlcyBhIGtlcm5lbCB2aXJ0dWFsIG1hcHBpbmcuIFRo aXMgY2FuIGJlIHVzZWQgYXMgdGhlCisgKiAmZG1hX2J1Zl9vcHMudnVubWFwIGNhbGxiYWNrLiBD YWxscyBpbnRvICZkcm1fZ2VtX29iamVjdF9mdW5jcy52dW5tYXAgZm9yIGRldmljZSBzcGVjaWZp YyBoYW5kbGluZy4KKyAqLwordm9pZCBkcm1fZ2VtX2RtYWJ1Zl92dW5tYXAoc3RydWN0IGRtYV9i dWYgKmRtYV9idWYsIHZvaWQgKnZhZGRyKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq ID0gZG1hX2J1Zi0+cHJpdjsKKworCWRybV9nZW1fdnVubWFwKG9iaiwgdmFkZHIpOworfQorRVhQ T1JUX1NZTUJPTChkcm1fZ2VtX2RtYWJ1Zl92dW5tYXApOworCiAvKioKICAqIGRybV9nZW1fcHJp bWVfbW1hcCAtIFBSSU1FIG1tYXAgZnVuY3Rpb24gZm9yIEdFTSBkcml2ZXJzCiAgKiBAb2JqOiBH RU0gb2JqZWN0CkBAIC02NTYsMTUgKzc0NSwxMjEgQEAgaW50IGRybV9nZW1fcHJpbWVfbW1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB9 CiBFWFBPUlRfU1lNQk9MKGRybV9nZW1fcHJpbWVfbW1hcCk7CiAKKy8qKgorICogZHJtX2dlbV9k bWFidWZfbW1hcCAtIGRtYV9idWYgbW1hcCBpbXBsZW1lbnRhdGlvbiBmb3IgR0VNCisgKiBAZG1h X2J1ZjogYnVmZmVyIHRvIGJlIG1hcHBlZAorICogQHZtYTogdmlydHVhbCBhZGRyZXNzIHJhbmdl CisgKgorICogUHJvdmlkZXMgbWVtb3J5IG1hcHBpbmcgZm9yIHRoZSBidWZmZXIuIFRoaXMgY2Fu IGJlIHVzZWQgYXMgdGhlCisgKiAmZG1hX2J1Zl9vcHMubW1hcCBjYWxsYmFjay4gSXQganVzdCBm b3J3YXJkcyB0byAmZHJtX2RyaXZlci5nZW1fcHJpbWVfbW1hcCwKKyAqIHdoaWNoIHNob3VsZCBi ZSBzZXQgdG8gZHJtX2dlbV9wcmltZV9tbWFwKCkuCisgKgorICogRklYTUU6IFRoZXJlJ3MgcmVh bGx5IG5vIHBvaW50IHRvIHRoaXMgd3JhcHBlciwgZHJpdmVycyB3aGljaCBuZWVkIGFueXRoaW5n CisgKiBlbHNlIGJ1dCBkcm1fZ2VtX3ByaW1lX21tYXAgY2FuIHJvbGwgdGhlaXIgb3duICZkbWFf YnVmX29wcy5tbWFwIGNhbGxiYWNrLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGEg bmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgZHJtX2dlbV9kbWFidWZf bW1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Ziwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEp Cit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBkbWFfYnVmLT5wcml2OworCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKworCWlmICghZGV2LT5kcml2ZXItPmdlbV9w cmltZV9tbWFwKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCXJldHVybiBkZXYtPmRyaXZlci0+Z2Vt X3ByaW1lX21tYXAob2JqLCB2bWEpOworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX2RtYWJ1Zl9t bWFwKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyBkcm1fZ2VtX3ByaW1lX2Rt YWJ1Zl9vcHMgPSAgeworCS5jYWNoZV9zZ3RfbWFwcGluZyA9IHRydWUsCisJLmF0dGFjaCA9IGRy bV9nZW1fbWFwX2F0dGFjaCwKKwkuZGV0YWNoID0gZHJtX2dlbV9tYXBfZGV0YWNoLAorCS5tYXBf ZG1hX2J1ZiA9IGRybV9nZW1fbWFwX2RtYV9idWYsCisJLnVubWFwX2RtYV9idWYgPSBkcm1fZ2Vt X3VubWFwX2RtYV9idWYsCisJLnJlbGVhc2UgPSBkcm1fZ2VtX2RtYWJ1Zl9yZWxlYXNlLAorCS5t bWFwID0gZHJtX2dlbV9kbWFidWZfbW1hcCwKKwkudm1hcCA9IGRybV9nZW1fZG1hYnVmX3ZtYXAs CisJLnZ1bm1hcCA9IGRybV9nZW1fZG1hYnVmX3Z1bm1hcCwKK307CisKKy8qKgorICogZHJtX3By aW1lX3BhZ2VzX3RvX3NnIC0gY29udmVydHMgYSBwYWdlIGFycmF5IGludG8gYW4gc2cgbGlzdAor ICogQHBhZ2VzOiBwb2ludGVyIHRvIHRoZSBhcnJheSBvZiBwYWdlIHBvaW50ZXJzIHRvIGNvbnZl cnQKKyAqIEBucl9wYWdlczogbGVuZ3RoIG9mIHRoZSBwYWdlIHZlY3RvcgorICoKKyAqIFRoaXMg aGVscGVyIGNyZWF0ZXMgYW4gc2cgdGFibGUgb2JqZWN0IGZyb20gYSBzZXQgb2YgcGFnZXMKKyAq IHRoZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIG1hcHBpbmcgdGhlIHBhZ2VzIGludG8gdGhl CisgKiBpbXBvcnRlcnMgYWRkcmVzcyBzcGFjZSBmb3IgdXNlIHdpdGggZG1hX2J1ZiBpdHNlbGYu CisgKgorICogVGhpcyBpcyB1c2VmdWwgZm9yIGltcGxlbWVudGluZyAmZHJtX2dlbV9vYmplY3Rf ZnVuY3MuZ2V0X3NnX3RhYmxlLgorICovCitzdHJ1Y3Qgc2dfdGFibGUgKmRybV9wcmltZV9wYWdl c190b19zZyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpCit7CisJ c3RydWN0IHNnX3RhYmxlICpzZyA9IE5VTEw7CisJaW50IHJldDsKKworCXNnID0ga21hbGxvYyhz aXplb2Yoc3RydWN0IHNnX3RhYmxlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZykgeworCQlyZXQg PSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBzZ19hbGxvY190YWJsZV9mcm9t X3BhZ2VzKHNnLCBwYWdlcywgbnJfcGFnZXMsIDAsCisJCQkJbnJfcGFnZXMgPDwgUEFHRV9TSElG VCwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZXR1cm4gc2c7Citv dXQ6CisJa2ZyZWUoc2cpOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CitFWFBPUlRfU1lNQk9M KGRybV9wcmltZV9wYWdlc190b19zZyk7CisKKy8qKgorICogZHJtX2dlbV9wcmltZV9leHBvcnQg LSBoZWxwZXIgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZXhwb3J0IGNhbGxiYWNrCisg KiBAZGV2OiBkcm1fZGV2aWNlIHRvIGV4cG9ydCBmcm9tCisgKiBAb2JqOiBHRU0gb2JqZWN0IHRv IGV4cG9ydAorICogQGZsYWdzOiBmbGFncyBsaWtlIERSTV9DTE9FWEVDIGFuZCBEUk1fUkRXUgor ICoKKyAqIFRoaXMgaXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSAmZHJtX2dlbV9vYmplY3Rf ZnVuY3MuZXhwb3J0IGZ1bmN0aW9ucyBmb3IgR0VNIGRyaXZlcnMKKyAqIHVzaW5nIHRoZSBQUklN RSBoZWxwZXJzLgorICovCitzdHJ1Y3QgZG1hX2J1ZiAqZHJtX2dlbV9wcmltZV9leHBvcnQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LAorCQkJCSAgICAgaW50IGZsYWdzKQoreworCXN0cnVjdCBkbWFfYnVmX2V4cG9ydF9pbmZvIGV4 cF9pbmZvID0geworCQkuZXhwX25hbWUgPSBLQlVJTERfTU9ETkFNRSwgLyogd2hpdGUgbGllIGZv ciBkZWJ1ZyAqLworCQkub3duZXIgPSBkZXYtPmRyaXZlci0+Zm9wcy0+b3duZXIsCisJCS5vcHMg PSAmZHJtX2dlbV9wcmltZV9kbWFidWZfb3BzLAorCQkuc2l6ZSA9IG9iai0+c2l6ZSwKKwkJLmZs YWdzID0gZmxhZ3MsCisJCS5wcml2ID0gb2JqLAorCQkucmVzdiA9IG9iai0+cmVzdiwKKwl9Owor CisJaWYgKGRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfcmVzX29iaikKKwkJZXhwX2luZm8ucmVzdiA9 IGRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfcmVzX29iaihvYmopOworCisJcmV0dXJuIGRybV9nZW1f ZG1hYnVmX2V4cG9ydChkZXYsICZleHBfaW5mbyk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZW1f cHJpbWVfZXhwb3J0KTsKKwogLyoqCiAgKiBkcm1fZ2VtX3ByaW1lX2ltcG9ydF9kZXYgLSBjb3Jl IGltcGxlbWVudGF0aW9uIG9mIHRoZSBpbXBvcnQgY2FsbGJhY2sKICAqIEBkZXY6IGRybV9kZXZp Y2UgdG8gaW1wb3J0IGludG8KICAqIEBkbWFfYnVmOiBkbWEtYnVmIG9iamVjdCB0byBpbXBvcnQK ICAqIEBhdHRhY2hfZGV2OiBzdHJ1Y3QgZGV2aWNlIHRvIGRtYV9idWYgYXR0YWNoCiAgKgotICog VGhpcyBpcyB0aGUgY29yZSBvZiBkcm1fZ2VtX3ByaW1lX2ltcG9ydC4gSXQncyBkZXNpZ25lZCB0 byBiZSBjYWxsZWQgYnkKLSAqIGRyaXZlcnMgd2hvIHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IGRl dmljZSBzdHJ1Y3R1cmUgdGhhbiBkZXYtPmRldiBmb3IKLSAqIGF0dGFjaGluZyB2aWEgZG1hX2J1 Zi4KKyAqIFRoaXMgaXMgdGhlIGNvcmUgb2YgZHJtX2dlbV9wcmltZV9pbXBvcnQoKS4gSXQncyBk ZXNpZ25lZCB0byBiZSBjYWxsZWQgYnkKKyAqIGRyaXZlcnMgd2hvIHdhbnQgdG8gdXNlIGEgZGlm ZmVyZW50IGRldmljZSBzdHJ1Y3R1cmUgdGhhbiAmZHJtX2RldmljZS5kZXYgZm9yCisgKiBhdHRh Y2hpbmcgdmlhIGRtYV9idWYuIFRoaXMgZnVuY3Rpb24gY2FsbHMKKyAqICZkcm1fZHJpdmVyLmdl bV9wcmltZV9pbXBvcnRfc2dfdGFibGUgaW50ZXJuYWxseS4KKyAqCisgKiBEcml2ZXJzIG11c3Qg YXJyYW5nZSB0byBjYWxsIGRybV9wcmltZV9nZW1fZGVzdHJveSgpIGZyb20gdGhlaXIKKyAqICZk cm1fZ2VtX29iamVjdF9mdW5jcy5mcmVlIGhvb2sgd2hlbiB1c2luZyB0aGlzIGZ1bmN0aW9uLgog ICovCiBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmRybV9nZW1fcHJpbWVfaW1wb3J0X2RldihzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkgICAgc3RydWN0IGRtYV9idWYgKmRtYV9idWYsCkBA IC03MjgsNyArOTIzLDExIEBAIEVYUE9SVF9TWU1CT0woZHJtX2dlbV9wcmltZV9pbXBvcnRfZGV2 KTsKICAqIEBkbWFfYnVmOiBkbWEtYnVmIG9iamVjdCB0byBpbXBvcnQKICAqCiAgKiBUaGlzIGlz IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZ2VtX3ByaW1lX2ltcG9ydCBmdW5jdGlvbnMgZm9y IEdFTSBkcml2ZXJzCi0gKiB1c2luZyB0aGUgUFJJTUUgaGVscGVycy4KKyAqIHVzaW5nIHRoZSBQ UklNRSBoZWxwZXJzLiBEcml2ZXJzIGNhbiB1c2UgdGhpcyBhcyB0aGVpcgorICogJmRybV9kcml2 ZXIuZ2VtX3ByaW1lX2ltcG9ydCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBEcml2ZXJzIG11c3Qg YXJyYW5nZSB0byBjYWxsIGRybV9wcmltZV9nZW1fZGVzdHJveSgpIGZyb20gdGhlaXIKKyAqICZk cm1fZ2VtX29iamVjdF9mdW5jcy5mcmVlIGhvb2sgd2hlbiB1c2luZyB0aGlzIGZ1bmN0aW9uLgog ICovCiBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmRybV9nZW1fcHJpbWVfaW1wb3J0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCiAJCQkJCSAgICBzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZikKQEAgLTcz NywxNTQgKzkzNiw2IEBAIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZHJtX2dlbV9wcmltZV9pbXBv cnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2dlbV9wcmlt ZV9pbXBvcnQpOwogCi0vKioKLSAqIGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlIC0gUFJJTUUg aW1wb3J0IGZ1bmN0aW9uIGZvciBHRU0gZHJpdmVycwotICogQGRldjogZGV2IHRvIGV4cG9ydCB0 aGUgYnVmZmVyIGZyb20KLSAqIEBmaWxlX3ByaXY6IGRybSBmaWxlLXByaXZhdGUgc3RydWN0dXJl Ci0gKiBAcHJpbWVfZmQ6IGZkIGlkIG9mIHRoZSBkbWEtYnVmIHdoaWNoIHNob3VsZCBiZSBpbXBv cnRlZAotICogQGhhbmRsZTogcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgaGFuZGxlIG9mIHRo ZSBpbXBvcnRlZCBidWZmZXIgb2JqZWN0Ci0gKgotICogVGhpcyBpcyB0aGUgUFJJTUUgaW1wb3J0 IGZ1bmN0aW9uIHdoaWNoIG11c3QgYmUgdXNlZCBtYW5kYXRvcmlseSBieSBHRU0KLSAqIGRyaXZl cnMgdG8gZW5zdXJlIGNvcnJlY3QgbGlmZXRpbWUgbWFuYWdlbWVudCBvZiB0aGUgdW5kZXJseWlu ZyBHRU0gb2JqZWN0LgotICogVGhlIGFjdHVhbCBpbXBvcnRpbmcgb2YgR0VNIG9iamVjdCBmcm9t IHRoZSBkbWEtYnVmIGlzIGRvbmUgdGhyb3VnaCB0aGUKLSAqIGdlbV9pbXBvcnRfZXhwb3J0IGRy aXZlciBjYWxsYmFjay4KLSAqLwotaW50IGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYs IGludCBwcmltZV9mZCwKLQkJCSAgICAgICB1aW50MzJfdCAqaGFuZGxlKQotewotCXN0cnVjdCBk bWFfYnVmICpkbWFfYnVmOwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwotCWludCByZXQ7 Ci0KLQlkbWFfYnVmID0gZG1hX2J1Zl9nZXQocHJpbWVfZmQpOwotCWlmIChJU19FUlIoZG1hX2J1 ZikpCi0JCXJldHVybiBQVFJfRVJSKGRtYV9idWYpOwotCi0JbXV0ZXhfbG9jaygmZmlsZV9wcml2 LT5wcmltZS5sb2NrKTsKLQotCXJldCA9IGRybV9wcmltZV9sb29rdXBfYnVmX2hhbmRsZSgmZmls ZV9wcml2LT5wcmltZSwKLQkJCWRtYV9idWYsIGhhbmRsZSk7Ci0JaWYgKHJldCA9PSAwKQotCQln b3RvIG91dF9wdXQ7Ci0KLQkvKiBuZXZlciBzZWVuIHRoaXMgb25lLCBuZWVkIHRvIGltcG9ydCAq LwotCW11dGV4X2xvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7Ci0JaWYgKGRldi0+ZHJpdmVy LT5nZW1fcHJpbWVfaW1wb3J0KQotCQlvYmogPSBkZXYtPmRyaXZlci0+Z2VtX3ByaW1lX2ltcG9y dChkZXYsIGRtYV9idWYpOwotCWVsc2UKLQkJb2JqID0gZHJtX2dlbV9wcmltZV9pbXBvcnQoZGV2 LCBkbWFfYnVmKTsKLQlpZiAoSVNfRVJSKG9iaikpIHsKLQkJcmV0ID0gUFRSX0VSUihvYmopOwot CQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JaWYgKG9iai0+ZG1hX2J1ZikgewotCQlXQVJOX09O KG9iai0+ZG1hX2J1ZiAhPSBkbWFfYnVmKTsKLQl9IGVsc2UgewotCQlvYmotPmRtYV9idWYgPSBk bWFfYnVmOwotCQlnZXRfZG1hX2J1ZihkbWFfYnVmKTsKLQl9Ci0KLQkvKiBfaGFuZGxlX2NyZWF0 ZV90YWlsIHVuY29uZGl0aW9uYWxseSB1bmxvY2tzIGRldi0+b2JqZWN0X25hbWVfbG9jay4gKi8K LQlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGVfdGFpbChmaWxlX3ByaXYsIG9iaiwgaGFuZGxl KTsKLQlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQob2JqKTsKLQlpZiAocmV0KQotCQlnb3Rv IG91dF9wdXQ7Ci0KLQlyZXQgPSBkcm1fcHJpbWVfYWRkX2J1Zl9oYW5kbGUoJmZpbGVfcHJpdi0+ cHJpbWUsCi0JCQlkbWFfYnVmLCAqaGFuZGxlKTsKLQltdXRleF91bmxvY2soJmZpbGVfcHJpdi0+ cHJpbWUubG9jayk7Ci0JaWYgKHJldCkKLQkJZ290byBmYWlsOwotCi0JZG1hX2J1Zl9wdXQoZG1h X2J1Zik7Ci0KLQlyZXR1cm4gMDsKLQotZmFpbDoKLQkvKiBobW0sIGlmIGRyaXZlciBhdHRhY2hl ZCwgd2UgYXJlIHJlbHlpbmcgb24gdGhlIGZyZWUtb2JqZWN0IHBhdGgKLQkgKiB0byBkZXRhY2gu LiB3aGljaCBzZWVtcyBvay4uCi0JICovCi0JZHJtX2dlbV9oYW5kbGVfZGVsZXRlKGZpbGVfcHJp diwgKmhhbmRsZSk7Ci0JZG1hX2J1Zl9wdXQoZG1hX2J1Zik7Ci0JcmV0dXJuIHJldDsKLQotb3V0 X3VubG9jazoKLQltdXRleF91bmxvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7Ci1vdXRfcHV0 OgotCW11dGV4X3VubG9jaygmZmlsZV9wcml2LT5wcmltZS5sb2NrKTsKLQlkbWFfYnVmX3B1dChk bWFfYnVmKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3ByaW1lX2Zk X3RvX2hhbmRsZSk7Ci0KLWludCBkcm1fcHJpbWVfaGFuZGxlX3RvX2ZkX2lvY3RsKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2KQotewotCXN0cnVjdCBkcm1fcHJpbWVfaGFuZGxlICphcmdzID0gZGF0YTsKLQotCWlmICgh ZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9QUklNRSkpCi0JCXJldHVybiAtRU9Q Tk9UU1VQUDsKLQotCWlmICghZGV2LT5kcml2ZXItPnByaW1lX2hhbmRsZV90b19mZCkKLQkJcmV0 dXJuIC1FTk9TWVM7Ci0KLQkvKiBjaGVjayBmbGFncyBhcmUgdmFsaWQgKi8KLQlpZiAoYXJncy0+ ZmxhZ3MgJiB+KERSTV9DTE9FWEVDIHwgRFJNX1JEV1IpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQot CXJldHVybiBkZXYtPmRyaXZlci0+cHJpbWVfaGFuZGxlX3RvX2ZkKGRldiwgZmlsZV9wcml2LAot CQkJYXJncy0+aGFuZGxlLCBhcmdzLT5mbGFncywgJmFyZ3MtPmZkKTsKLX0KLQotaW50IGRybV9w cmltZV9mZF90b19oYW5kbGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSwKLQkJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCi17Ci0Jc3RydWN0IGRybV9wcmlt ZV9oYW5kbGUgKmFyZ3MgPSBkYXRhOwotCi0JaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRl diwgRFJJVkVSX1BSSU1FKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKCFkZXYtPmRy aXZlci0+cHJpbWVfZmRfdG9faGFuZGxlKQotCQlyZXR1cm4gLUVOT1NZUzsKLQotCXJldHVybiBk ZXYtPmRyaXZlci0+cHJpbWVfZmRfdG9faGFuZGxlKGRldiwgZmlsZV9wcml2LAotCQkJYXJncy0+ ZmQsICZhcmdzLT5oYW5kbGUpOwotfQotCi0vKioKLSAqIGRybV9wcmltZV9wYWdlc190b19zZyAt IGNvbnZlcnRzIGEgcGFnZSBhcnJheSBpbnRvIGFuIHNnIGxpc3QKLSAqIEBwYWdlczogcG9pbnRl ciB0byB0aGUgYXJyYXkgb2YgcGFnZSBwb2ludGVycyB0byBjb252ZXJ0Ci0gKiBAbnJfcGFnZXM6 IGxlbmd0aCBvZiB0aGUgcGFnZSB2ZWN0b3IKLSAqCi0gKiBUaGlzIGhlbHBlciBjcmVhdGVzIGFu IHNnIHRhYmxlIG9iamVjdCBmcm9tIGEgc2V0IG9mIHBhZ2VzCi0gKiB0aGUgZHJpdmVyIGlzIHJl c3BvbnNpYmxlIGZvciBtYXBwaW5nIHRoZSBwYWdlcyBpbnRvIHRoZQotICogaW1wb3J0ZXJzIGFk ZHJlc3Mgc3BhY2UgZm9yIHVzZSB3aXRoIGRtYV9idWYgaXRzZWxmLgotICovCi1zdHJ1Y3Qgc2df dGFibGUgKmRybV9wcmltZV9wYWdlc190b19zZyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25l ZCBpbnQgbnJfcGFnZXMpCi17Ci0Jc3RydWN0IHNnX3RhYmxlICpzZyA9IE5VTEw7Ci0JaW50IHJl dDsKLQotCXNnID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNnX3RhYmxlKSwgR0ZQX0tFUk5FTCk7 Ci0JaWYgKCFzZykgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQg PSBzZ19hbGxvY190YWJsZV9mcm9tX3BhZ2VzKHNnLCBwYWdlcywgbnJfcGFnZXMsIDAsCi0JCQkJ bnJfcGFnZXMgPDwgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJldCkKLQkJZ290byBv dXQ7Ci0KLQlyZXR1cm4gc2c7Ci1vdXQ6Ci0Ja2ZyZWUoc2cpOwotCXJldHVybiBFUlJfUFRSKHJl dCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGRybV9wcmltZV9wYWdlc190b19zZyk7Ci0KIC8qKgogICog ZHJtX3ByaW1lX3NnX3RvX3BhZ2VfYWRkcl9hcnJheXMgLSBjb252ZXJ0IGFuIHNnIHRhYmxlIGlu dG8gYSBwYWdlIGFycmF5CiAgKiBAc2d0OiBzY2F0dGVyLWdhdGhlciB0YWJsZSB0byBjb252ZXJ0 CkBAIC04OTQsNiArOTQ1LDkgQEAgRVhQT1JUX1NZTUJPTChkcm1fcHJpbWVfcGFnZXNfdG9fc2cp OwogICoKICAqIEV4cG9ydHMgYW4gc2cgdGFibGUgaW50byBhbiBhcnJheSBvZiBwYWdlcyBhbmQg YWRkcmVzc2VzLiBUaGlzIGlzIGN1cnJlbnRseQogICogcmVxdWlyZWQgYnkgdGhlIFRUTSBkcml2 ZXIgaW4gb3JkZXIgdG8gZG8gY29ycmVjdCBmYXVsdCBoYW5kbGluZy4KKyAqCisgKiBEcml2ZXJz IGNhbiB1c2UgdGhpcyBpbiB0aGVpciAmZHJtX2RyaXZlci5nZW1fcHJpbWVfaW1wb3J0X3NnX3Rh YmxlCisgKiBpbXBsZW1lbnRhdGlvbi4KICAqLwogaW50IGRybV9wcmltZV9zZ190b19wYWdlX2Fk ZHJfYXJyYXlzKHN0cnVjdCBzZ190YWJsZSAqc2d0LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAogCQkJ CSAgICAgZG1hX2FkZHJfdCAqYWRkcnMsIGludCBtYXhfZW50cmllcykKQEAgLTkzNCw3ICs5ODgs NyBAQCBFWFBPUlRfU1lNQk9MKGRybV9wcmltZV9zZ190b19wYWdlX2FkZHJfYXJyYXlzKTsKICAq IEBzZzogdGhlIHNnLXRhYmxlIHdoaWNoIHdhcyBwaW5uZWQgYXQgaW1wb3J0IHRpbWUKICAqCiAg KiBUaGlzIGlzIHRoZSBjbGVhbnVwIGZ1bmN0aW9ucyB3aGljaCBHRU0gZHJpdmVycyBuZWVkIHRv IGNhbGwgd2hlbiB0aGV5IHVzZQotICogQGRybV9nZW1fcHJpbWVfaW1wb3J0IHRvIGltcG9ydCBk bWEtYnVmcy4KKyAqIGRybV9nZW1fcHJpbWVfaW1wb3J0KCkgb3IgZHJtX2dlbV9wcmltZV9pbXBv cnRfZGV2KCkgdG8gaW1wb3J0IGRtYS1idWZzLgogICovCiB2b2lkIGRybV9wcmltZV9nZW1fZGVz dHJveShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHNnX3RhYmxlICpzZykKIHsK QEAgLTk0OSwxNiArMTAwMywzIEBAIHZvaWQgZHJtX3ByaW1lX2dlbV9kZXN0cm95KHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qgc2dfdGFibGUgKnNnKQogCWRtYV9idWZfcHV0KGRt YV9idWYpOwogfQogRVhQT1JUX1NZTUJPTChkcm1fcHJpbWVfZ2VtX2Rlc3Ryb3kpOwotCi12b2lk IGRybV9wcmltZV9pbml0X2ZpbGVfcHJpdmF0ZShzdHJ1Y3QgZHJtX3ByaW1lX2ZpbGVfcHJpdmF0 ZSAqcHJpbWVfZnByaXYpCi17Ci0JbXV0ZXhfaW5pdCgmcHJpbWVfZnByaXYtPmxvY2spOwotCXBy aW1lX2Zwcml2LT5kbWFidWZzID0gUkJfUk9PVDsKLQlwcmltZV9mcHJpdi0+aGFuZGxlcyA9IFJC X1JPT1Q7Ci19Ci0KLXZvaWQgZHJtX3ByaW1lX2Rlc3Ryb3lfZmlsZV9wcml2YXRlKHN0cnVjdCBk cm1fcHJpbWVfZmlsZV9wcml2YXRlICpwcmltZV9mcHJpdikKLXsKLQkvKiBieSBub3cgZHJtX2dl bV9yZWxlYXNlIHNob3VsZCd2ZSBtYWRlIHN1cmUgdGhlIGxpc3QgaXMgZW1wdHkgKi8KLQlXQVJO X09OKCFSQl9FTVBUWV9ST09UKCZwcmltZV9mcHJpdi0+ZG1hYnVmcykpOwotfQpkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9kcm0vZHJtX2Rydi5oIGIvaW5jbHVkZS9kcm0vZHJtX2Rydi5oCmluZGV4IDVj NGZjMGRkYzg2My4uNWUxYmExNmQxOWM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fZHJ2 LmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2Rydi5oCkBAIC01MDUsMjEgKzUwNSwyNSBAQCBzdHJ1 Y3QgZHJtX2RyaXZlciB7CiAJICogQGdlbV9mcmVlX29iamVjdDogZGVjb25zdHJ1Y3RvciBmb3Ig ZHJtX2dlbV9vYmplY3RzCiAJICoKIAkgKiBUaGlzIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBu b3QgYmUgdXNlZCBieSBuZXcgZHJpdmVycy4gVXNlCi0JICogQGdlbV9mcmVlX29iamVjdF91bmxv Y2tlZCBpbnN0ZWFkLgorCSAqICZkcm1fZ2VtX29iamVjdF9mdW5jcy5mcmVlIGluc3RlYWQuCiAJ ICovCiAJdm9pZCAoKmdlbV9mcmVlX29iamVjdCkgKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq KTsKIAogCS8qKgogCSAqIEBnZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQ6IGRlY29uc3RydWN0b3Ig Zm9yIGRybV9nZW1fb2JqZWN0cwogCSAqCi0JICogVGhpcyBpcyBmb3IgZHJpdmVycyB3aGljaCBh cmUgbm90IGVuY3VtYmVyZWQgd2l0aCAmZHJtX2RldmljZS5zdHJ1Y3RfbXV0ZXgKLQkgKiBsZWdh Y3kgbG9ja2luZyBzY2hlbWVzLiBVc2UgdGhpcyBob29rIGluc3RlYWQgb2YgQGdlbV9mcmVlX29i amVjdC4KKwkgKiBUaGlzIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBieSBu ZXcgZHJpdmVycy4gVXNlCisJICogJmRybV9nZW1fb2JqZWN0X2Z1bmNzLmZyZWUgaW5zdGVhZC4K KwkgKiBDb21wYXJlZCB0byBAZ2VtX2ZyZWVfb2JqZWN0IHRoaXMgaXMgbm90IGVuY3VtYmVyZWQg d2l0aAorCSAqICZkcm1fZGV2aWNlLnN0cnVjdF9tdXRleCBsZWdhY3kgbG9ja2luZyBzY2hlbWVz LgogCSAqLwogCXZvaWQgKCpnZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQpIChzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaik7CiAKIAkvKioKIAkgKiBAZ2VtX29wZW5fb2JqZWN0OgogCSAqCisJICog VGhpcyBjYWxsYmFjayBpcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiAmZHJtX2dlbV9vYmplY3Rf ZnVuY3Mub3Blbi4KKwkgKgogCSAqIERyaXZlciBob29rIGNhbGxlZCB1cG9uIGdlbSBoYW5kbGUg Y3JlYXRpb24KIAkgKi8KIAlpbnQgKCpnZW1fb3Blbl9vYmplY3QpIChzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKiwgc3RydWN0IGRybV9maWxlICopOwpAQCAtNTI3LDYgKzUzMSw4IEBAIHN0cnVjdCBk cm1fZHJpdmVyIHsKIAkvKioKIAkgKiBAZ2VtX2Nsb3NlX29iamVjdDoKIAkgKgorCSAqIFRoaXMg Y2FsbGJhY2sgaXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgJmRybV9nZW1fb2JqZWN0X2Z1bmNz LmNsb3NlLgorCSAqCiAJICogRHJpdmVyIGhvb2sgY2FsbGVkIHVwb24gZ2VtIGhhbmRsZSByZWxl YXNlCiAJICovCiAJdm9pZCAoKmdlbV9jbG9zZV9vYmplY3QpIChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKiwgc3RydWN0IGRybV9maWxlICopOwpAQCAtNTM0LDYgKzU0MCw5IEBAIHN0cnVjdCBkcm1f ZHJpdmVyIHsKIAkvKioKIAkgKiBAZ2VtX3ByaW50X2luZm86CiAJICoKKwkgKiBUaGlzIGNhbGxi YWNrIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mCisJICogJmRybV9nZW1fb2JqZWN0X2Z1bmNz LnByaW50X2luZm8uCisJICoKIAkgKiBJZiBkcml2ZXIgc3ViY2xhc3NlcyBzdHJ1Y3QgJmRybV9n ZW1fb2JqZWN0LCBpdCBjYW4gaW1wbGVtZW50IHRoaXMKIAkgKiBvcHRpb25hbCBob29rIGZvciBw cmludGluZyBhZGRpdGlvbmFsIGRyaXZlciBzcGVjaWZpYyBpbmZvLgogCSAqCkBAIC01NDgsNTYg KzU1NywxMjAgQEAgc3RydWN0IGRybV9kcml2ZXIgewogCS8qKgogCSAqIEBnZW1fY3JlYXRlX29i amVjdDogY29uc3RydWN0b3IgZm9yIGdlbSBvYmplY3RzCiAJICoKLQkgKiBIb29rIGZvciBhbGxv Y2F0aW5nIHRoZSBHRU0gb2JqZWN0IHN0cnVjdCwgZm9yIHVzZSBieSBjb3JlCi0JICogaGVscGVy cy4KKwkgKiBIb29rIGZvciBhbGxvY2F0aW5nIHRoZSBHRU0gb2JqZWN0IHN0cnVjdCwgZm9yIHVz ZSBieSB0aGUgQ01BIGFuZAorCSAqIFNITUVNIEdFTSBoZWxwZXJzLgogCSAqLwogCXN0cnVjdCBk cm1fZ2VtX29iamVjdCAqKCpnZW1fY3JlYXRlX29iamVjdCkoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKIAkJCQkJCSAgICBzaXplX3Qgc2l6ZSk7Ci0KLQkvKiBwcmltZTogKi8KIAkvKioKIAkgKiBA cHJpbWVfaGFuZGxlX3RvX2ZkOgogCSAqCi0JICogZXhwb3J0IGhhbmRsZSAtPiBmZCAoc2VlIGRy bV9nZW1fcHJpbWVfaGFuZGxlX3RvX2ZkKCkgaGVscGVyKQorCSAqIE1haW4gUFJJTUUgZXhwb3J0 IGZ1bmN0aW9uLiBTaG91bGQgYmUgaW1wbGVudGVkIHdpdGgKKwkgKiBkcm1fZ2VtX3ByaW1lX2hh bmRsZV90b19mZCgpIGZvciBHRU0gYmFzZWQgZHJpdmVycy4KKwkgKgorCSAqIEZvciBhbiBpbi1k ZXB0aCBkaXNjdXNzaW9uIHNlZSA6cmVmOmBQUklNRSBidWZmZXIgc2hhcmluZworCSAqIGRvY3Vt ZW50YXRpb24gPHByaW1lX2J1ZmZlcl9zaGFyaW5nPmAuCiAJICovCiAJaW50ICgqcHJpbWVfaGFu ZGxlX3RvX2ZkKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVf cHJpdiwKIAkJCQl1aW50MzJfdCBoYW5kbGUsIHVpbnQzMl90IGZsYWdzLCBpbnQgKnByaW1lX2Zk KTsKIAkvKioKIAkgKiBAcHJpbWVfZmRfdG9faGFuZGxlOgogCSAqCi0JICogaW1wb3J0IGZkIC0+ IGhhbmRsZSAoc2VlIGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlKCkgaGVscGVyKQorCSAqIE1h aW4gUFJJTUUgaW1wb3J0IGZ1bmN0aW9uLiBTaG91bGQgYmUgaW1wbGVudGVkIHdpdGgKKwkgKiBk cm1fZ2VtX3ByaW1lX2ZkX3RvX2hhbmRsZSgpIGZvciBHRU0gYmFzZWQgZHJpdmVycy4KKwkgKgor CSAqIEZvciBhbiBpbi1kZXB0aCBkaXNjdXNzaW9uIHNlZSA6cmVmOmBQUklNRSBidWZmZXIgc2hh cmluZworCSAqIGRvY3VtZW50YXRpb24gPHByaW1lX2J1ZmZlcl9zaGFyaW5nPmAuCiAJICovCiAJ aW50ICgqcHJpbWVfZmRfdG9faGFuZGxlKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAkJCQlpbnQgcHJpbWVfZmQsIHVpbnQzMl90ICpoYW5kbGUp OwogCS8qKgogCSAqIEBnZW1fcHJpbWVfZXhwb3J0OgogCSAqCi0JICogZXhwb3J0IEdFTSAtPiBk bWFidWYKLQkgKgotCSAqIFRoaXMgZGVmYXVsdHMgdG8gZHJtX2dlbV9wcmltZV9leHBvcnQoKSBp ZiBub3Qgc2V0LgorCSAqIEV4cG9ydCBob29rIGZvciBHRU0gZHJpdmVycy4gRGVwcmVjYXRlZCBp biBmYXZvdXIgb2YKKwkgKiAmZHJtX2dlbV9vYmplY3RfZnVuY3MuZXhwb3J0LgogCSAqLwogCXN0 cnVjdCBkbWFfYnVmICogKCpnZW1fcHJpbWVfZXhwb3J0KShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAogCQkJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgZmxhZ3MpOwogCS8qKgogCSAq IEBnZW1fcHJpbWVfaW1wb3J0OgogCSAqCi0JICogaW1wb3J0IGRtYWJ1ZiAtPiBHRU0KKwkgKiBJ bXBvcnQgaG9vayBmb3IgR0VNIGRyaXZlcnMuCiAJICoKIAkgKiBUaGlzIGRlZmF1bHRzIHRvIGRy bV9nZW1fcHJpbWVfaW1wb3J0KCkgaWYgbm90IHNldC4KIAkgKi8KIAlzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKiAoKmdlbV9wcmltZV9pbXBvcnQpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJ c3RydWN0IGRtYV9idWYgKmRtYV9idWYpOworCisJLyoqCisJICogQGdlbV9wcmltZV9waW46CisJ ICoKKwkgKiBEZXByZWNhdGVkIGhvb2sgaW4gZmF2b3VyIG9mICZkcm1fZ2VtX29iamVjdF9mdW5j cy5waW4uCisJICovCiAJaW50ICgqZ2VtX3ByaW1lX3Bpbikoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopOworCisJLyoqCisJICogQGdlbV9wcmltZV91bnBpbjoKKwkgKgorCSAqIERlcHJlY2F0 ZWQgaG9vayBpbiBmYXZvdXIgb2YgJmRybV9nZW1fb2JqZWN0X2Z1bmNzLnVucGluLgorCSAqLwog CXZvaWQgKCpnZW1fcHJpbWVfdW5waW4pKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKKwor CisJLyoqCisJICogQGdlbV9wcmltZV9nZXRfc2dfdGFibGU6CisJICoKKwkgKiBEZXByZWNhdGVk IGhvb2sgaW4gZmF2b3VyIG9mICZkcm1fZ2VtX29iamVjdF9mdW5jcy5nZXRfc2dfdGFibGUuCisJ ICovCisJc3RydWN0IHNnX3RhYmxlICooKmdlbV9wcmltZV9nZXRfc2dfdGFibGUpKHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqKTsKKworCS8qKgorCSAqIEBnZW1fcHJpbWVfcmVzX29iajoKKwkg KgorCSAqIE9wdGlvbmFsIGhvb2sgdG8gbG9vayB1cCB0aGUgJnJlc2VydmF0aW9uX29iamVjdCBm b3IgYW4gYnVmZmVyIHdoZW4KKwkgKiBleHBvcnRpbmcgaXQuCisJICoKKwkgKiBGSVhNRTogVGhp cyBob29rIGlzIGRlcHJlY2F0ZWQuIFVzZXIgb2YgdGhpcyBob29rIHNob3VsZCBiZSByZXBsYWNl ZAorCSAqIGJ5IHNldHRpbmcgJmRybV9nZW1fb2JqZWN0LnJlc3YgaW5zdGVhZC4KKwkgKi8KIAlz dHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICogKCpnZW1fcHJpbWVfcmVzX29iaikoCiAJCQkJc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwotCXN0cnVjdCBzZ190YWJsZSAqKCpnZW1fcHJpbWVf Z2V0X3NnX3RhYmxlKShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CisKKwkvKioKKwkgKiBA Z2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZToKKwkgKgorCSAqIE9wdGlvbmFsIGhvb2sgdXNlZCBi eSB0aGUgUFJJTUUgaGVscGVyIGZ1bmN0aW9ucworCSAqIGRybV9nZW1fcHJpbWVfaW1wb3J0KCkg cmVzcGVjdGl2ZWx5IGRybV9nZW1fcHJpbWVfaW1wb3J0X2RldigpLgorCSAqLwogCXN0cnVjdCBk cm1fZ2VtX29iamVjdCAqKCpnZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKSgKIAkJCQlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwK IAkJCQlzdHJ1Y3Qgc2dfdGFibGUgKnNndCk7CisJLyoqCisJICogQGdlbV9wcmltZV92bWFwOgor CSAqCisJICogRGVwcmVjYXRlZCB2bWFwIGhvb2sgZm9yIEdFTSBkcml2ZXJzLiBQbGVhc2UgdXNl CisJICogJmRybV9nZW1fb2JqZWN0X2Z1bmNzLnZtYXAgaW5zdGVhZC4KKwkgKi8KIAl2b2lkICoo KmdlbV9wcmltZV92bWFwKShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CisKKwkvKioKKwkg KiBAZ2VtX3ByaW1lX3Z1bm1hcDoKKwkgKgorCSAqIERlcHJlY2F0ZWQgdnVubWFwIGhvb2sgZm9y IEdFTSBkcml2ZXJzLiBQbGVhc2UgdXNlCisJICogJmRybV9nZW1fb2JqZWN0X2Z1bmNzLnZ1bm1h cCBpbnN0ZWFkLgorCSAqLwogCXZvaWQgKCpnZW1fcHJpbWVfdnVubWFwKShzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOworCisJLyoqCisJICogQGdlbV9wcmltZV9tbWFw OgorCSAqCisJICogbW1hcCBob29rIGZvciBHRU0gZHJpdmVycywgdXNlZCB0byBpbXBsZW1lbnQg ZG1hLWJ1ZiBtbWFwIGluIHRoZQorCSAqIFBSSU1FIGhlbHBlcnMuCisJICoKKwkgKiBGSVhNRTog VGhlcmUncyB3YXkgdG9vIG11Y2ggZHVwbGljYXRpb24gZ29pbmcgb24gaGVyZSwgYW5kIGFsc28g bW92ZWQKKwkgKiB0byAmZHJtX2dlbV9vYmplY3RfZnVuY3MuCisJICovCiAJaW50ICgqZ2VtX3By aW1lX21tYXApKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAogCQkJCXN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKTsKIApAQCAtNjY1LDYgKzczOCw5IEBAIHN0cnVjdCBkcm1fZHJpdmVyIHsK IAogCS8qKgogCSAqIEBnZW1fdm1fb3BzOiBEcml2ZXIgcHJpdmF0ZSBvcHMgZm9yIHRoaXMgb2Jq ZWN0CisJICoKKwkgKiBGb3IgR0VNIGRyaXZlciB0aGlzIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Vy IG9mCisJICogJmRybV9nZW1fb2JqZWN0X2Z1bmNzLnZtX29wcy4KIAkgKi8KIAljb25zdCBzdHJ1 Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKmdlbV92bV9vcHM7CiAKZGlmZiAtLWdpdCBhL2luY2x1 ZGUvZHJtL2RybV9nZW0uaCBiL2luY2x1ZGUvZHJtL2RybV9nZW0uaAppbmRleCBhOTEyMWZlNjZl YTIuLjlhZjg4MjM4ZWU1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2dlbS5oCisrKyBi L2luY2x1ZGUvZHJtL2RybV9nZW0uaApAQCAtMTAxLDcgKzEwMSw3IEBAIHN0cnVjdCBkcm1fZ2Vt X29iamVjdF9mdW5jcyB7CiAJLyoqCiAJICogQHBpbjoKIAkgKgotCSAqIFBpbiBiYWNraW5nIGJ1 ZmZlciBpbiBtZW1vcnkuCisJICogUGluIGJhY2tpbmcgYnVmZmVyIGluIG1lbW9yeS4gVXNlZCBi eSB0aGUgZHJtX2dlbV9tYXBfYXR0YWNoIGhlbHBlci4KIAkgKgogCSAqIFRoaXMgY2FsbGJhY2sg aXMgb3B0aW9uYWwuCiAJICovCkBAIC0xMTAsNyArMTEwLDcgQEAgc3RydWN0IGRybV9nZW1fb2Jq ZWN0X2Z1bmNzIHsKIAkvKioKIAkgKiBAdW5waW46CiAJICoKLQkgKiBVbnBpbiBiYWNraW5nIGJ1 ZmZlci4KKwkgKiBVbnBpbiBiYWNraW5nIGJ1ZmZlci4gVXNlZCBieSB0aGUgZHJtX2dlbV9tYXBf ZGV0YWNoKCkgaGVscGVyLgogCSAqCiAJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4KIAkg Ki8KQEAgLTEyMCwxNiArMTIwLDIxIEBAIHN0cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5jcyB7CiAJ ICogQGdldF9zZ190YWJsZToKIAkgKgogCSAqIFJldHVybnMgYSBTY2F0dGVyLUdhdGhlciB0YWJs ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgYnVmZmVyLgotCSAqIFVzZWQgd2hlbiBleHBvcnRpbmcg YSBidWZmZXIuCisJICogVXNlZCB3aGVuIGV4cG9ydGluZyBhIGJ1ZmZlciBieSB0aGUgZHJtX2dl bV9tYXBfZG1hX2J1ZigpIGhlbHBlci4KKwkgKiBSZWxlYXNpbmcgaXMgZG9uZSBieSBjYWxsaW5n IGRtYV91bm1hcF9zZ19hdHRycygpIGFuZCBzZ19mcmVlX3RhYmxlKCkKKwkgKiBpbiBkcm1fZ2Vt X3VubWFwX2J1ZigpLCB0aGVyZWZvcmUgdGhlc2UgaGVscGVycyBhbmQgdGhpcyBjYWxsYmFjawor CSAqIGhlcmUgY2Fubm90IGJlIHVzZWQgZm9yIHNnIHRhYmxlcyBwb2ludGluZyBhdCBkcml2ZXIg cHJpdmF0ZSBtZW1vcnkKKwkgKiByYW5nZXMuCiAJICoKLQkgKiBUaGlzIGNhbGxiYWNrIGlzIG1h bmRhdG9yeSBpZiBidWZmZXIgZXhwb3J0IGlzIHN1cHBvcnRlZC4KKwkgKiBTZWUgYWxzbyBkcm1f cHJpbWVfcGFnZXNfdG9fc2coKS4KIAkgKi8KIAlzdHJ1Y3Qgc2dfdGFibGUgKigqZ2V0X3NnX3Rh YmxlKShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CiAKIAkvKioKIAkgKiBAdm1hcDoKIAkg KgotCSAqIFJldHVybnMgYSB2aXJ0dWFsIGFkZHJlc3MgZm9yIHRoZSBidWZmZXIuCisJICogUmV0 dXJucyBhIHZpcnR1YWwgYWRkcmVzcyBmb3IgdGhlIGJ1ZmZlci4gVXNlZCBieSB0aGUKKwkgKiBk cm1fZ2VtX2RtYWJ1Zl92bWFwKCkgaGVscGVyLgogCSAqCiAJICogVGhpcyBjYWxsYmFjayBpcyBv cHRpb25hbC4KIAkgKi8KQEAgLTEzOCw3ICsxNDMsOCBAQCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3Rf ZnVuY3MgewogCS8qKgogCSAqIEB2dW5tYXA6CiAJICoKLQkgKiBSZWxlYXNlcyB0aGUgdGhlIGFk ZHJlc3MgcHJldmlvdXNseSByZXR1cm5lZCBieSBAdm1hcC4KKwkgKiBSZWxlYXNlcyB0aGUgdGhl IGFkZHJlc3MgcHJldmlvdXNseSByZXR1cm5lZCBieSBAdm1hcC4gVXNlZCBieSB0aGUKKwkgKiBk cm1fZ2VtX2RtYWJ1Zl92dW5tYXAoKSBoZWxwZXIuCiAJICoKIAkgKiBUaGlzIGNhbGxiYWNrIGlz IG9wdGlvbmFsLgogCSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3ByaW1lLmggYi9p bmNsdWRlL2RybS9kcm1fcHJpbWUuaAppbmRleCBiMDM3MzFhM2YwNzkuLmVlMzJiMDdmM2ViMCAx MDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX3ByaW1lLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJt X3ByaW1lLmgKQEAgLTQyLDcgKzQyLDYgQEAKICAqIFRoaXMganVzdCBjb250YWlucyB0aGUgaW50 ZXJuYWwgJnN0cnVjdCBkbWFfYnVmIGFuZCBoYW5kbGUgY2FjaGVzIGZvciBlYWNoCiAgKiAmc3Ry dWN0IGRybV9maWxlIHVzZWQgYnkgdGhlIFBSSU1FIGNvcmUgY29kZS4KICAqLwotCiBzdHJ1Y3Qg ZHJtX3ByaW1lX2ZpbGVfcHJpdmF0ZSB7CiAvKiBwcml2YXRlOiAqLwogCXN0cnVjdCBtdXRleCBs b2NrOwpAQCAtNjQsMjUgKzYzLDE4IEBAIHN0cnVjdCBkcm1fZmlsZTsKIAogc3RydWN0IGRldmlj ZTsKIAotc3RydWN0IGRtYV9idWYgKmRybV9nZW1fcHJpbWVfZXhwb3J0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKLQkJCQkgICAg IGludCBmbGFncyk7CisvKiBjb3JlIHByaW1lIGZ1bmN0aW9ucyAqLworc3RydWN0IGRtYV9idWYg KmRybV9nZW1fZG1hYnVmX2V4cG9ydChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgICAg IHN0cnVjdCBkbWFfYnVmX2V4cG9ydF9pbmZvICpleHBfaW5mbyk7Cit2b2lkIGRybV9nZW1fZG1h YnVmX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYV9idWYpOworCitpbnQgZHJtX2dlbV9wcmlt ZV9mZF90b19oYW5kbGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGVfcHJpdiwgaW50IHByaW1lX2ZkLCB1aW50MzJfdCAqaGFuZGxlKTsKIGlu dCBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJ ICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCB1aW50MzJfdCBoYW5kbGUsIHVpbnQz Ml90IGZsYWdzLAogCQkJICAgICAgIGludCAqcHJpbWVfZmQpOwotaW50IGRybV9nZW1fcHJpbWVf bW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEpOwotc3RydWN0IGRybV9nZW1fb2JqZWN0ICpkcm1fZ2VtX3ByaW1lX2ltcG9ydChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAotCQkJCQkgICAgc3RydWN0IGRtYV9idWYgKmRtYV9idWYpOwotCi1z dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmRybV9nZW1fcHJpbWVfaW1wb3J0X2RldihzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAotCQkJCQkJc3RydWN0IGRtYV9idWYgKmRtYV9idWYsCi0JCQkJCQlzdHJ1 Y3QgZGV2aWNlICphdHRhY2hfZGV2KTsKIAotaW50IGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxl KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxl X3ByaXYsIGludCBwcmltZV9mZCwgdWludDMyX3QgKmhhbmRsZSk7Ci1zdHJ1Y3QgZG1hX2J1ZiAq ZHJtX2dlbV9kbWFidWZfZXhwb3J0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJICAgICAg c3RydWN0IGRtYV9idWZfZXhwb3J0X2luZm8gKmV4cF9pbmZvKTsKLXZvaWQgZHJtX2dlbV9kbWFi dWZfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zik7CisvKiBoZWxwZXIgZnVuY3Rpb25z IGZvciBleHBvcnRpbmcgKi8KIGludCBkcm1fZ2VtX21hcF9hdHRhY2goc3RydWN0IGRtYV9idWYg KmRtYV9idWYsCiAJCSAgICAgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpOwog dm9pZCBkcm1fZ2VtX21hcF9kZXRhY2goc3RydWN0IGRtYV9idWYgKmRtYV9idWYsCkBAIC05NCwx MiArODYsMjYgQEAgdm9pZCBkcm1fZ2VtX3VubWFwX2RtYV9idWYoc3RydWN0IGRtYV9idWZfYXR0 YWNobWVudCAqYXR0YWNoLAogCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKIHZv aWQgKmRybV9nZW1fZG1hYnVmX3ZtYXAoc3RydWN0IGRtYV9idWYgKmRtYV9idWYpOwogdm9pZCBk cm1fZ2VtX2RtYWJ1Zl92dW5tYXAoc3RydWN0IGRtYV9idWYgKmRtYV9idWYsIHZvaWQgKnZhZGRy KTsKKworaW50IGRybV9nZW1fcHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwg c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogaW50IGRybV9nZW1fZG1hYnVmX21tYXAoc3Ry dWN0IGRtYV9idWYgKmRtYV9idWYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIAotaW50 IGRybV9wcmltZV9zZ190b19wYWdlX2FkZHJfYXJyYXlzKHN0cnVjdCBzZ190YWJsZSAqc2d0LCBz dHJ1Y3QgcGFnZSAqKnBhZ2VzLAotCQkJCSAgICAgZG1hX2FkZHJfdCAqYWRkcnMsIGludCBtYXhf cGFnZXMpOwogc3RydWN0IHNnX3RhYmxlICpkcm1fcHJpbWVfcGFnZXNfdG9fc2coc3RydWN0IHBh Z2UgKipwYWdlcywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKTsKK3N0cnVjdCBkbWFfYnVmICpkcm1f Z2VtX3ByaW1lX2V4cG9ydChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkJICAgICBpbnQgZmxhZ3MpOworCisvKiBoZWxwZXIg ZnVuY3Rpb25zIGZvciBpbXBvcnRpbmcgKi8KK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqZHJtX2dl bV9wcmltZV9pbXBvcnRfZGV2KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3Qg ZG1hX2J1ZiAqZG1hX2J1ZiwKKwkJCQkJCXN0cnVjdCBkZXZpY2UgKmF0dGFjaF9kZXYpOworc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpkcm1fZ2VtX3ByaW1lX2ltcG9ydChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAorCQkJCQkgICAgc3RydWN0IGRtYV9idWYgKmRtYV9idWYpOworCiB2b2lkIGRybV9w cmltZV9nZW1fZGVzdHJveShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHNnX3Rh YmxlICpzZyk7CiAKK2ludCBkcm1fcHJpbWVfc2dfdG9fcGFnZV9hZGRyX2FycmF5cyhzdHJ1Y3Qg c2dfdGFibGUgKnNndCwgc3RydWN0IHBhZ2UgKipwYWdlcywKKwkJCQkgICAgIGRtYV9hZGRyX3Qg KmFkZHJzLCBpbnQgbWF4X3BhZ2VzKTsKKwogCiAjZW5kaWYgLyogX19EUk1fUFJJTUVfSF9fICov Ci0tIAoyLjIwLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eA==