From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Kumar, Mahesh" Subject: Re: [PATCH v2] drm/i915/skl+: ddb allocation algorithm optimization Date: Tue, 3 Jul 2018 12:09:14 +0530 Message-ID: References: <20180629094335.15242-1-mahesh1.kumar@intel.com> <20180702232641.GJ31287@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id D927B6E114 for ; Tue, 3 Jul 2018 06:39:16 +0000 (UTC) In-Reply-To: <20180702232641.GJ31287@intel.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Rodrigo Vivi Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org SGksCgoKT24gNy8zLzIwMTggNDo1NiBBTSwgUm9kcmlnbyBWaXZpIHdyb3RlOgo+IE9uIEZyaSwg SnVuIDI5LCAyMDE4IGF0IDAzOjEzOjM1UE0gKzA1MzAsIE1haGVzaCBLdW1hciB3cm90ZToKPj4g VGhpcyBwYXRjaCBpbXBsZW1lbnRzIG5ldyBEREIgYWxsb2NhdGlvbiBhbGdvcml0aG0gYXMgcGVy IEhXIHRlYW0KPj4gcmVjb21tZW5kYXRpb24uIFRoaXMgYWxnbyB0YWtlY2FyZSBvZiBzY2VuYXJp byB3aGVyZSB3ZSBhbGxvY2F0ZSBsZXNzIEREQgo+PiBmb3IgdGhlIHBsYW5lcyB3aXRoIGxvd2Vy IHJlbGF0aXZlIHBpeGVsIHJhdGUsIGJ1dCB0aGV5IHJlcXVpcmUgbW9yZSBEREIKPj4gdG8gd29y ay4KPj4gSXQgYWxzbyB0YWtlcyBjYXJlIG9mIGVuYWJsaW5nIHNhbWUgd2F0ZXJtYXJrIGxldmVs IGZvciBlYWNoCj4gVXN1YWxseSAiSXQgYWxzbyIgaW4gYSBjb21taXQgbWVzc2FnZSBpcyBhIGdv b2QgaW5kaWNhdGlvbiB0aGF0IHdlIHNob3VsZAo+IGJlIGRvaW5nIG1vcmUgdGhhbiBvbmUgcGF0 Y2guCkVuYWJsaW5nIHNhbWUgd2F0ZXJtYXJrIGxldmVsIGZvciBlYWNoIHBsYW5lIGluIENSVEMg aXMgYnlwcm9kdWN0IG9mIAp0aGlzIGFsZ29yaXRobS4KQnV0IEFncmVlIHdpbGwgcmV3b3JrIG9u IHBhdGNoIGFuZCB0cnkgdG8gYnJlYWsgaXQgYXMgbXVjaCBhcyBwb3NzaWJsZS4KSSB0aGluayBJ IHNob3VsZCBBZGQgb2xkIGNvdmVyIGxldHRlciBhcyB3ZWxsIHRvIGV4cGxhaW4gd2hhdCBpcyBu ZXcgCmFsZ28gb3B0aW1pemF0aW9uIGFsbCBhYm91dC4KPgo+PiBwbGFuZSBpbiBjcnRjLCBmb3Ig ZWZmaWNpZW50IHBvd2VyIHNhdmluZy4KPj4gVGhpcyBhbGdvcml0aG0gdXNlcyBmaXhlZCBkZGIg YWxsb2NhdGlvbiBmb3IgY3Vyc29yIHBsYW5lcy4KPj4KPj4gRWFsaWVyIHZlcnNpb24gb2YgdGhp cyBwYXRjaCByZXZlcnRlZCBkdWUgdG8gcmVncmVzc2lvbi4gQW5kIGl0IHdhcyByb290Cj4+IGNh dXNlZCB0byBmb2xsb3dpbmc6Cj4+IE5ldyBhbGdvcml0aG0gcmVxdWlyZWQgbW9yZSBEREIgZm9y IGN1cnNvciBwbGFuZSBidXQgYXMgY3Vyc29yIHBsYW5lIGhhcwo+PiBmaXhlZCBhbGxvY2F0aW9u IGl0J3MgRERCIHdhcyBub3Qgc3VmZmljaWVudCBhbmQgV00gbGV2ZWwtMCB3YXMgZ2V0dGluZwo+ PiBkaXNhYmxlZCwgcmVzdWx0aW5nIGluIGJsYW5rIHNjcmVlbi4gTm93IHdlIHVzZSBvbGQgRERC IGFsbG9jYXRpb24gbG9naWMKPj4gb25seSBmb3IgY3Vyc29yIHBsYW5lLgo+IEkgcmVhbGx5IGRv bid0IHNlZSBvbiBzcGVjIG9sZCBhbmQgbmV3IEREQiBhbGxvY2F0aW9uIGxvZ2ljcy4KQWN0dWFs bHkgbm93IHNwZWMgaGF2ZSAyIG1ldGhvZCBmb3IgRERCIGFsbG9jYXRpb24gKEFkZGVkIGJhc2Vk IG9uIG91ciAKcmVxdWVzdCkuIFNvIG5ldyBBbGdvcml0aG0gaXMgbm90aGluZyBidXQgc2Vjb25k IG1ldGhvZCBvZiBhbGxvY2F0aW9uIGxvZ2ljLgoKPgo+IE9ubHkgdGhpbmcgZGlmZmVyZW50IGZv ciBjdXJzb3IgdGhhdCBJIHNlZSB0aGVyZSBpcyB0aGF0IGEgd29ya2Fyb3VuZCBvbgo+IHdhdGVy bWFyayBjYWxjdWxhdGlvbiB3aGVyZSAiRm9yIGVhY2ggcGxhbmUsIGV4Y2VwdCBjdXJzb3IuLi4i Cj4KPiAiTnVtYmVyIG9mIHBsYW5lcywgZXhjZXB0IGN1cnNvci4uLiIKPgo+IFRoaXMgaXMgbm90 IHdoYXQgSSBzZWUgaW4gdGhpcyBwYXRjaCwgYnV0IG1heWJlIGJlY2F1c2UgdGhlIHBhdGNoIGlz IHRvbyBiaWcuCnNvIGZvciBlYWNoIHBsYW5lIHdlIGZpcnN0IGNhbGN1bGF0ZSBXTSB0aGVuIHRy eSB0byBmaW5kIG1heGltdW0gbGV2ZWwgCnRoYXQgY2FuIGJlIGVuYWJsZWQgd2l0aCBhdmFpbGFi bGUgRERCIGZvciBwaXBlIGFuZCBkaXN0cmlidXRlIEREQiAKYWNjb3JkaW5nbHkuCmJ1dCBmb3Ig Y3Vyc29yIE5vdyBJJ20gYWxsb2NhdGluZyBEREIgZmlyc3QgKDhibG9jayBvciAzMiBibG9ja3Mg YmFzZWQgCm9uIG51bWJlciBvZiBDUlRDIHNpbWlsYXIgdG8gb2xkIG1ldGhvZCkgdGhhdCBpcyB0 aGUgZGlmZmVyZW5jZSBmcm9tIApwcmV2aW91cyB2ZXJzaW9uIG9mIHBhdGNoLgo+Cj4+IENoYW5n ZXM6Cj4+ICAgLSBhZGQgcmVhc29uIGZvciByZXZlcnQgaW4gY29tbWl0IG1zZyAoTWFhcnRlbikK Pj4gICAtIEZpeCBjaGVja3BhdGNoIGNoZWNrcwo+Pgo+PiBUZXN0Y2FzZTogaWd0L2ttc19wbGFu ZV9tdWx0aXBsZQo+PiBTaWduZWQtb2ZmLWJ5OiBNYWhlc2ggS3VtYXIgPG1haGVzaDEua3VtYXJA aW50ZWwuY29tPgo+PiBDYzogUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwuY29tPgo+ IFdlbGwsIHNpbmNlIEknbSBvbiBjYyBhbmQgSSB3YXMgdGhlIG9uZSB0aGF0IHJldmVydGVkIHRo YXQgYmVjYXVzZSBJIG5vdGljZWQKPiBvbiBteSBvd24gbWFjaGluZSBJIG9wZW5lZCB0aGlzIHBh dGNoIGZvciByZXZpZXcgbWFueSB0aW1lcyBoZXJlIGFscmVhZHksCj4gYnV0IEkgZ2F2ZSB1cCBj b21wbGV0ZWx5IGV2ZXJ5IHRpbWUgYmVjYXVzZSB0aGlzIHBhdGNoIGlzIGhhcmQgdG8gcmV2aWV3 LgpBZ3JlZSwgTXkgYmFkLCB3aWxsIHRyeSB0byBzcGxpdCB0aGlzIHBhdGNoIGJ1dCBJJ20gYWZy YWlkIG1haW4gcGF0Y2ggCnN0aWxsIGJlIGxlbmd0aHkgcGxlYXNlIGJhcmUgd2l0aCBtZS4KPgo+ IFNvIHRoaXMgdGltZSBJIHdvbid0IGZ1bGx5IGdpdmUgdXAgYW5kIGF0IGxlYXN0IHB1dCBzb21l IGNvbW1lbnRzLi4uCj4KPiBTbywgb3ZlcmFsbCBpdCBpcyBoYXJkIHRvIG1hdGNoIHRoZSBzcGVj IGRpZmZlcmVuY2VzIGJlY2F1c2UgdGhpcyBwYXRjaAo+IGlzIHRyeWluZyB0byBkbyBhbGwgYXQg b25jZS4gU21hbGxlciBwYXRjaGVzIHNob3VsZCBiZSBiZXR0ZXIuCj4KPj4gLS0tCj4+ICAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCB8ICAgNSArLQo+PiAgIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3BtLmMgfCAzNzYgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0t LS0tLS0tLQo+PiAgIDIgZmlsZXMgY2hhbmdlZCwgMjE5IGluc2VydGlvbnMoKyksIDE2MiBkZWxl dGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+IGluZGV4IDJiNjg0ZjQzMWM2 MC4uZjVkNjM2YTZkMTIxIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4gQEAgLTEy MTIsOCArMTIxMiw5IEBAIHN0cnVjdCBza2xfZGRiX3ZhbHVlcyB7Cj4+ICAgCj4+ICAgc3RydWN0 IHNrbF93bV9sZXZlbCB7Cj4+ICAgCWJvb2wgcGxhbmVfZW47Cj4+IC0JdWludDE2X3QgcGxhbmVf cmVzX2I7Cj4+IC0JdWludDhfdCBwbGFuZV9yZXNfbDsKPj4gKwl1MTYgcGxhbmVfcmVzX2I7Cj4+ ICsJdTggcGxhbmVfcmVzX2w7Cj4+ICsJdTE2IG1pbl9kYnVmX3JlcTsKPj4gICB9Owo+PiAgIAo+ PiAgIC8qIFN0b3JlcyBwbGFuZSBzcGVjaWZpYyBXTSBwYXJhbWV0ZXJzICovCj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcG0uYwo+PiBpbmRleCA1M2FhYWEzZTY4ODYuLmQxNTY0YTA4YTIwMiAxMDA2NDQK Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4+IEBAIC0zODAyLDE3ICszODAyLDM3IEBAIHN0YXRp YyB1bnNpZ25lZCBpbnQgaW50ZWxfZ2V0X2RkYl9zaXplKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKPj4gICAJcmV0dXJuIGRkYl9zaXplOwo+PiAgIH0KPj4gICAKPj4gK3N0YXRp YyBpbnQKPj4gK3NrbF9nZXRfbnVtX3BpcGVzX2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCj4+ICsJCQkgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0 ZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUgPSBjc3RhdGUtPmJh c2Uuc3RhdGU7Cj4+ICsJY29uc3Qgc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqaW50ZWxfc3Rh dGU7Cj4+ICsJaW50IG51bV9hY3RpdmU7Cj4+ICsKPj4gKwlpZiAoV0FSTl9PTighc3RhdGUpIHx8 ICFjc3RhdGUtPmJhc2UuYWN0aXZlKQo+PiArCQlyZXR1cm4gaHdlaWdodDMyKGRldl9wcml2LT5h Y3RpdmVfY3J0Y3MpOwo+PiArCj4+ICsJaW50ZWxfc3RhdGUgPSB0b19pbnRlbF9hdG9taWNfc3Rh dGUoc3RhdGUpOwo+PiArCj4+ICsJaWYgKGludGVsX3N0YXRlLT5hY3RpdmVfcGlwZV9jaGFuZ2Vz KQo+PiArCQludW1fYWN0aXZlID0gaHdlaWdodDMyKGludGVsX3N0YXRlLT5hY3RpdmVfY3J0Y3Mp Owo+PiArCWVsc2UKPj4gKwkJbnVtX2FjdGl2ZSA9IGh3ZWlnaHQzMihkZXZfcHJpdi0+YWN0aXZl X2NydGNzKTsKPj4gKwo+PiArCXJldHVybiBudW1fYWN0aXZlOwo+PiArfQo+IFRoaXMgZW50aXJl IGZ1bmN0aW9uIGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGNvbWUgaW4gYSBzZXBhcmF0 ZWQgcGF0Y2guClRoaXMgaXMgbmV3IGNoYW5nZSBpbiB0aGlzIHZlcnNpb24uIEkgc2hvdWxkIGhh dmUgY3JlYXRlZCBzZXBhcmF0ZSAKcGF0Y2guIHdpbGwgZG8gc28uCj4KPj4gKwo+PiAgIHN0YXRp YyB2b2lkCj4+IC1za2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRzKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4+ICtza2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4gICAJCQkJICAgY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPj4gICAJCQkJICAgY29uc3QgdW5zaWduZWQgaW50IHRv dGFsX2RhdGFfcmF0ZSwKPj4gICAJCQkJICAgc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqZGRi LAo+PiAtCQkJCSAgIHN0cnVjdCBza2xfZGRiX2VudHJ5ICphbGxvYywgLyogb3V0ICovCj4+IC0J CQkJICAgaW50ICpudW1fYWN0aXZlIC8qIG91dCAqLykKPj4gKwkJCQkgICBpbnQgbnVtX2FjdGl2 ZSwKPj4gKwkJCQkgICBzdHJ1Y3Qgc2tsX2RkYl9lbnRyeSAqYWxsb2MgLyogb3V0ICovKQo+IHlv dSBkb24ndCBuZWVkIHRvIGludmVydCB0aGUgb3JkZXIgd2hlbiByZW1vdmluZyB0aGUgcG9pbnRl ci4uLgpyZWFzb24gd2FzIHRvIGtlZXAgKm91dCB2YXJpYWJsZXMgYXQgdGhlIGxhc3Qgb2YgdmFy aWFibGUgbGlzdC4gd2hpY2ggaXMgCmFuIGlucHV0IG5vdyBmb3IgdGhpcyBmdW5jdGlvbi4KPgo+ IGJ1dCBhZ2FpbiwgYWxsIHRoaXMgbnVtX2FjdGl2ZSBzZWVtcyB0byBiZSBpbiBhIHNlcGFyYXRl ZCBwYXRjaC4uLi4KPgo+PiAgIHsKPj4gICAJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl ID0gY3N0YXRlLT5iYXNlLnN0YXRlOwo+PiAgIAlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpp bnRlbF9zdGF0ZSA9IHRvX2ludGVsX2F0b21pY19zdGF0ZShzdGF0ZSk7Cj4+IC0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+PiAgIAlzdHJ1Y3QgZHJt X2NydGMgKmZvcl9jcnRjID0gY3N0YXRlLT5iYXNlLmNydGM7Cj4+ICAgCXVuc2lnbmVkIGludCBw aXBlX3NpemUsIGRkYl9zaXplOwo+PiAgIAlpbnQgbnRoX2FjdGl2ZV9waXBlOwo+PiBAQCAtMzgy MCwxNyArMzg0MCwxMSBAQCBza2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRzKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCj4+ICAgCWlmIChXQVJOX09OKCFzdGF0ZSkgfHwgIWNzdGF0ZS0+ YmFzZS5hY3RpdmUpIHsKPj4gICAJCWFsbG9jLT5zdGFydCA9IDA7Cj4+ICAgCQlhbGxvYy0+ZW5k ID0gMDsKPj4gLQkJKm51bV9hY3RpdmUgPSBod2VpZ2h0MzIoZGV2X3ByaXYtPmFjdGl2ZV9jcnRj cyk7Cj4+ICAgCQlyZXR1cm47Cj4+ICAgCX0KPj4gICAKPj4gLQlpZiAoaW50ZWxfc3RhdGUtPmFj dGl2ZV9waXBlX2NoYW5nZXMpCj4+IC0JCSpudW1fYWN0aXZlID0gaHdlaWdodDMyKGludGVsX3N0 YXRlLT5hY3RpdmVfY3J0Y3MpOwo+PiAtCWVsc2UKPj4gLQkJKm51bV9hY3RpdmUgPSBod2VpZ2h0 MzIoZGV2X3ByaXYtPmFjdGl2ZV9jcnRjcyk7Cj4+IC0KPj4gICAJZGRiX3NpemUgPSBpbnRlbF9n ZXRfZGRiX3NpemUoZGV2X3ByaXYsIGNzdGF0ZSwgdG90YWxfZGF0YV9yYXRlLAo+PiAtCQkJCSAg ICAgICpudW1fYWN0aXZlLCBkZGIpOwo+PiArCQkJCSAgICAgIG51bV9hY3RpdmUsIGRkYik7Cj4+ ICAgCj4+ICAgCS8qCj4+ICAgCSAqIElmIHRoZSBzdGF0ZSBkb2Vzbid0IGNoYW5nZSB0aGUgYWN0 aXZlIENSVEMncywgdGhlbiB0aGVyZSdzCj4+IEBAIC0zODUyLDcgKzM4NjYsNyBAQCBza2xfZGRi X2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+ICAg CW50aF9hY3RpdmVfcGlwZSA9IGh3ZWlnaHQzMihpbnRlbF9zdGF0ZS0+YWN0aXZlX2NydGNzICYK Pj4gICAJCQkJICAgIChkcm1fY3J0Y19tYXNrKGZvcl9jcnRjKSAtIDEpKTsKPj4gICAJcGlwZV9z aXplID0gZGRiX3NpemUgLyBod2VpZ2h0MzIoaW50ZWxfc3RhdGUtPmFjdGl2ZV9jcnRjcyk7Cj4+ IC0JYWxsb2MtPnN0YXJ0ID0gbnRoX2FjdGl2ZV9waXBlICogZGRiX3NpemUgLyAqbnVtX2FjdGl2 ZTsKPj4gKwlhbGxvYy0+c3RhcnQgPSBudGhfYWN0aXZlX3BpcGUgKiBkZGJfc2l6ZSAvIG51bV9h Y3RpdmU7Cj4+ICAgCWFsbG9jLT5lbmQgPSBhbGxvYy0+c3RhcnQgKyBwaXBlX3NpemU7Cj4+ICAg fQo+PiAgIAo+PiBAQCAtNDI3MSwxMyArNDI4NSw1OCBAQCBza2xfZGRiX2NhbGNfbWluKGNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsIGludCBudW1fYWN0aXZlLAo+PiAgIAlt aW5pbXVtW1BMQU5FX0NVUlNPUl0gPSBza2xfY3Vyc29yX2FsbG9jYXRpb24obnVtX2FjdGl2ZSk7 Cj4+ICAgfQo+PiAgIAo+PiArc3RhdGljIHZvaWQKPj4gK3NrbF9lbmFibGVfcGxhbmVfd21fbGV2 ZWxzKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4gKwkJCSAgIHUx NiBwbGFuZV9kZGIsCj4+ICsJCQkgICB1MTYgbWF4X2xldmVsLAo+PiArCQkJICAgc3RydWN0IHNr bF9wbGFuZV93bSAqd20pCj4+ICt7Cj4+ICsJaW50IGxldmVsOwo+PiArCS8qCj4+ICsJICogTm93 IGVuYWJsZSBhbGwgbGV2ZWxzIGluIFdNIHN0cnVjdHVyZSB3aGljaCBjYW4gYmUgZW5hYmxlZAo+ PiArCSAqIHVzaW5nIGN1cnJlbnQgRERCIGFsbG9jYXRpb24KPj4gKwkgKi8KPiBUaGlzIHN0YXRl bWVudCBjb25mdXNlcyBtZSBhIGJpdC4uLiAiTm93IiBpcyBwcm9iYWJseSBub3QgdGhlIHJpZ2h0 IHdvcmQgZm9yCj4gdGhlIGF0b21pYyBjaGVjayBwYXJ0LgpobW0sIHdlIGFyZSBub3QgZW5hYmxp bmcgbGV2ZWxzIGluc3RlYWQganVzdCBzZXR0aW5nIHRoZSAiZW5hYmxlIiAKdmFyaWFibGUgYmFz ZWQgb24gd2hpY2ggY29tbWl0IHdpbGwgZW5hYmxlIFdNLiB3aWxsIHJlcGhyYXNlLgo+Cj4+ICsJ Zm9yIChsZXZlbCA9IGlsa193bV9tYXhfbGV2ZWwoZGV2X3ByaXYpOyBsZXZlbCA+PSAwOyBsZXZl bC0tKSB7Cj4+ICsJCXN0cnVjdCBza2xfd21fbGV2ZWwgKmxldmVsX3dtID0gJndtLT53bVtsZXZl bF07Cj4+ICsKPj4gKwkJaWYgKGxldmVsX3dtLT5taW5fZGJ1Zl9yZXEgPiBwbGFuZV9kZGIgfHwg bGV2ZWwgPiBtYXhfbGV2ZWwgfHwKPj4gKwkJICAgIChsZXZlbCAmJiBsZXZlbF93bS0+cGxhbmVf cmVzX2wgPj0gMzEpIHx8Cj4+ICsJCSAgICBsZXZlbF93bS0+cGxhbmVfcmVzX2IgPT0gMCkgewo+ PiArCQkJbGV2ZWxfd20tPnBsYW5lX2VuID0gZmFsc2U7Cj4+ICsJCQlsZXZlbF93bS0+cGxhbmVf cmVzX2IgPSAwOwo+PiArCQkJbGV2ZWxfd20tPnBsYW5lX3Jlc19sID0gMDsKPj4gKwkJfSBlbHNl IHsKPj4gKwkJCWxldmVsX3dtLT5wbGFuZV9lbiA9IHRydWU7Cj4+ICsJCX0KPj4gKwo+PiArCQkv Kgo+PiArCQkgKiBEaXNwbGF5IFdBICM4MjYgKFNLTDpBTEwsIEJYVDpBTEwpICYgIzEwNTkgKENO TDpBKQo+PiArCQkgKiBkaXNhYmxlIHdtIGxldmVsIDEtNyBvbiBOVjEyIHBsYW5lcwo+PiArCQkg Ki8KPj4gKwkJaWYgKHdtLT5pc19wbGFuYXIgJiYgbGV2ZWwgPj0gMSAmJgo+PiArCQkgICAgKElT X1NLWUxBS0UoZGV2X3ByaXYpIHx8IElTX0JST1hUT04oZGV2X3ByaXYpIHx8Cj4+ICsJCSAgICAg SVNfQ05MX1JFVklEKGRldl9wcml2LCBDTkxfUkVWSURfQTAsIENOTF9SRVZJRF9BMCkpKSB7Cj4+ ICsJCQlsZXZlbF93bS0+cGxhbmVfZW4gPSBmYWxzZTsKPj4gKwkJCWxldmVsX3dtLT5wbGFuZV9y ZXNfYiA9IDA7Cj4+ICsJCQlsZXZlbF93bS0+cGxhbmVfcmVzX2wgPSAwOwo+PiArCQl9Cj4+ICsJ fQo+PiArCj4+ICsJaWYgKHdtLT50cmFuc193bS5wbGFuZV9yZXNfYiAmJiB3bS0+dHJhbnNfd20u cGxhbmVfcmVzX2IgPCBwbGFuZV9kZGIpCj4+ICsJCXdtLT50cmFuc193bS5wbGFuZV9lbiA9IHRy dWU7Cj4+ICsJZWxzZQo+PiArCQl3bS0+dHJhbnNfd20ucGxhbmVfZW4gPSBmYWxzZTsKPj4gK30K Pj4gKwo+PiAgIHN0YXRpYyBpbnQKPj4gICBza2xfYWxsb2NhdGVfcGlwZV9kZGIoc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPj4gKwkJICAgICAgc3RydWN0IHNrbF9waXBlX3dtICpw aXBlX3dtLAo+PiAgIAkJICAgICAgc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqZGRiIC8qIG91 dCAqLykKPj4gICB7Cj4+ICAgCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IGNzdGF0 ZS0+YmFzZS5zdGF0ZTsKPj4gICAJc3RydWN0IGRybV9jcnRjICpjcnRjID0gY3N0YXRlLT5iYXNl LmNydGM7Cj4+ICAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+PiAgIAlzdHJ1 Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4+ICAgCWVu dW0gcGlwZSBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKPj4gICAJc3RydWN0IHNrbF9kZGJfZW50 cnkgKmFsbG9jID0gJmNzdGF0ZS0+d20uc2tsLmRkYjsKPj4gQEAgLTQyOTAsNiArNDM0OSw4IEBA IHNrbF9hbGxvY2F0ZV9waXBlX2RkYihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ PiAgIAl1bnNpZ25lZCBpbnQgcGxhbmVfZGF0YV9yYXRlW0k5MTVfTUFYX1BMQU5FU10gPSB7fTsK Pj4gICAJdW5zaWduZWQgaW50IHV2X3BsYW5lX2RhdGFfcmF0ZVtJOTE1X01BWF9QTEFORVNdID0g e307Cj4+ICAgCXVpbnQxNl90IHRvdGFsX21pbl9ibG9ja3MgPSAwOwo+PiArCXUxNiB0b3RhbF9s ZXZlbF9kZGIsIHBsYW5lX2Jsb2NrcyA9IDA7Cj4+ICsJaW50IG1heF9sZXZlbCwgbGV2ZWw7Cj4+ ICAgCj4+ICAgCS8qIENsZWFyIHRoZSBwYXJ0aXRpb25pbmcgZm9yIGRpc2FibGVkIHBsYW5lcy4g Ki8KPj4gICAJbWVtc2V0KGRkYi0+cGxhbmVbcGlwZV0sIDAsIHNpemVvZihkZGItPnBsYW5lW3Bp cGVdKSk7Cj4+IEBAIC00MzA2LDE0ICs0MzY3LDE2IEBAIHNrbF9hbGxvY2F0ZV9waXBlX2RkYihz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+PiAgIAl0b3RhbF9kYXRhX3JhdGUgPSBz a2xfZ2V0X3RvdGFsX3JlbGF0aXZlX2RhdGFfcmF0ZShjc3RhdGUsCj4+ICAgCQkJCQkJCSAgIHBs YW5lX2RhdGFfcmF0ZSwKPj4gICAJCQkJCQkJICAgdXZfcGxhbmVfZGF0YV9yYXRlKTsKPj4gLQlz a2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRzKGRldiwgY3N0YXRlLCB0b3RhbF9kYXRh X3JhdGUsIGRkYiwKPj4gLQkJCQkJICAgYWxsb2MsICZudW1fYWN0aXZlKTsKPj4gKwo+PiArCW51 bV9hY3RpdmUgPSBza2xfZ2V0X251bV9waXBlc19hY3RpdmUoZGV2X3ByaXYsIGNzdGF0ZSk7Cj4+ ICsJc2tsX2RkYl9jYWxjX21pbihjc3RhdGUsIG51bV9hY3RpdmUsIG1pbmltdW0sIHV2X21pbmlt dW0pOwo+PiArCj4+ICsJc2tsX2RkYl9nZXRfcGlwZV9hbGxvY2F0aW9uX2xpbWl0cyhkZXZfcHJp diwgY3N0YXRlLCB0b3RhbF9kYXRhX3JhdGUsCj4+ICsJCQkJCSAgIGRkYiwgbnVtX2FjdGl2ZSwg YWxsb2MpOwo+PiAgIAlhbGxvY19zaXplID0gc2tsX2RkYl9lbnRyeV9zaXplKGFsbG9jKTsKPj4g ICAJaWYgKGFsbG9jX3NpemUgPT0gMCkKPj4gICAJCXJldHVybiAwOwo+PiAgIAo+PiAtCXNrbF9k ZGJfY2FsY19taW4oY3N0YXRlLCBudW1fYWN0aXZlLCBtaW5pbXVtLCB1dl9taW5pbXVtKTsKPj4g LQo+PiAgIAkvKgo+PiAgIAkgKiAxLiBBbGxvY2F0ZSB0aGUgbWluaW51bSByZXF1aXJlZCBibG9j a3MgZm9yIGVhY2ggYWN0aXZlIHBsYW5lCj4+ICAgCSAqIGFuZCBhbGxvY2F0ZSB0aGUgY3Vyc29y LCBpdCBkb2Vzbid0IHJlcXVpcmUgZXh0cmEgYWxsb2NhdGlvbgo+PiBAQCAtNDMyNSwxNiArNDM4 OCw1MiBAQCBza2xfYWxsb2NhdGVfcGlwZV9kZGIoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNz dGF0ZSwKPj4gICAJCXRvdGFsX21pbl9ibG9ja3MgKz0gdXZfbWluaW11bVtwbGFuZV9pZF07Cj4+ ICAgCX0KPj4gICAKPj4gLQlpZiAodG90YWxfbWluX2Jsb2NrcyA+IGFsbG9jX3NpemUpIHsKPj4g KwlhbGxvY19zaXplIC09IG1pbmltdW1bUExBTkVfQ1VSU09SXTsKPj4gKwlkZGItPnBsYW5lW3Bp cGVdW1BMQU5FX0NVUlNPUl0uc3RhcnQgPSBhbGxvYy0+ZW5kIC0KPj4gKwkJCQkJCQltaW5pbXVt W1BMQU5FX0NVUlNPUl07Cj4+ICsJZGRiLT5wbGFuZVtwaXBlXVtQTEFORV9DVVJTT1JdLmVuZCA9 IGFsbG9jLT5lbmQ7Cj4+ICsKPj4gKwlmb3IgKGxldmVsID0gaWxrX3dtX21heF9sZXZlbChkZXZf cHJpdik7IGxldmVsID49IDA7IGxldmVsLS0pIHsKPj4gKwkJdG90YWxfbGV2ZWxfZGRiID0gMDsK Pj4gKwkJZm9yX2VhY2hfcGxhbmVfaWRfb25fY3J0YyhpbnRlbF9jcnRjLCBwbGFuZV9pZCkgewo+ PiArCQkJc3RydWN0IHNrbF9wbGFuZV93bSAqd20gPSAmcGlwZV93bS0+cGxhbmVzW3BsYW5lX2lk XTsKPj4gKwkJCXUxNiBwbGFuZV9yZXNfYiA9IHdtLT53bVtsZXZlbF0ubWluX2RidWZfcmVxICsK Pj4gKwkJCQkJCXdtLT51dl93bVtsZXZlbF0ubWluX2RidWZfcmVxOwo+PiArCQkJdTE2IG1pbiA9 IG1pbmltdW1bcGxhbmVfaWRdICsgdXZfbWluaW11bVtwbGFuZV9pZF07Cj4+ICsKPj4gKwkJCWlm IChwbGFuZV9pZCA9PSBQTEFORV9DVVJTT1IpCj4+ICsJCQkJY29udGludWU7Cj4+ICsKPj4gKwkJ CXRvdGFsX2xldmVsX2RkYiArPSBtYXgocGxhbmVfcmVzX2IsIG1pbik7Cj4+ICsJCX0KPj4gKwo+ PiArCQkvKgo+PiArCQkgKiBJZiBUaGlzIGxldmVsIGNhbiBzdWNjZXNzZnVsbHkgYmUgZW5hYmxl ZCB3aXRoIHRoZQo+PiArCQkgKiBwaXBlJ3MgY3VycmVudCBEREIgYWxsb2NhdGlvbiwgdGhlbiBh bGwgbG93ZXIgbGV2ZWxzIGFyZQo+PiArCQkgKiBndWFyYW50ZWVkIHRvIHN1Y2NlZWQgYXMgd2Vs bC4KPj4gKwkJICovCj4+ICsJCWlmICh0b3RhbF9sZXZlbF9kZGIgPD0gYWxsb2Nfc2l6ZSkKPj4g KwkJCWJyZWFrOwo+PiArCX0KPj4gKwo+PiArCWlmIChsZXZlbCA8IDAgfHwgdG90YWxfbWluX2Js b2NrcyA+IGFsbG9jX3NpemUpIHsKPj4gICAJCURSTV9ERUJVR19LTVMoIlJlcXVlc3RlZCBkaXNw bGF5IGNvbmZpZ3VyYXRpb24gZXhjZWVkcyBzeXN0ZW0gRERCIGxpbWl0YXRpb25zIik7Cj4+IC0J CURSTV9ERUJVR19LTVMoIm1pbmltdW0gcmVxdWlyZWQgJWQvJWRcbiIsIHRvdGFsX21pbl9ibG9j a3MsCj4+IC0JCQkJCQkJYWxsb2Nfc2l6ZSk7Cj4+ICsJCURSTV9ERUJVR19LTVMoIm1pbmltdW0g cmVxdWlyZWQgJWQvJWRcbiIsIChsZXZlbCA8IDApID8KPj4gKwkJCQl0b3RhbF9sZXZlbF9kZGIg OiB0b3RhbF9taW5fYmxvY2tzLCBhbGxvY19zaXplKTsKPj4gICAJCXJldHVybiAtRUlOVkFMOwo+ PiAgIAl9Cj4+ICsJbWF4X2xldmVsID0gbGV2ZWw7Cj4+ICsJYWxsb2Nfc2l6ZSAtPSB0b3RhbF9s ZXZlbF9kZGI7Cj4+ICAgCj4+IC0JYWxsb2Nfc2l6ZSAtPSB0b3RhbF9taW5fYmxvY2tzOwo+PiAt CWRkYi0+cGxhbmVbcGlwZV1bUExBTkVfQ1VSU09SXS5zdGFydCA9IGFsbG9jLT5lbmQgLSBtaW5p bXVtW1BMQU5FX0NVUlNPUl07Cj4+IC0JZGRiLT5wbGFuZVtwaXBlXVtQTEFORV9DVVJTT1JdLmVu ZCA9IGFsbG9jLT5lbmQ7Cj4+ICsJLyoKPj4gKwkgKiBQTEFORV9DVVJTT1IgZGF0YSByYXRlIGlz IG5vdCBpbmNsdWRlZCBpbiB0b3RhbF9kYXRhX3JhdGUuCj4+ICsJICogSWYgb25seSBjdXJzb3Ig cGxhbmUgaXMgZW5hYmxlZCB3ZSBoYXZlIHRvIGVuYWJsZSBpdHMgV00gbGV2ZWxzCj4+ICsJICog ZXhwbGljaXRseSBiZWZvcmUgcmV0dXJuaW5nLiBDdXJzb3IgaGFzIGZpeGVkIGRkYiBhbGxvY2F0 aW9uLAo+PiArCSAqIFNvIGl0J3Mgb2sgdG8gYWx3YXlzIGNoZWNrIGN1cnNvciBXTSBlbmFibGlu ZyBiZWZvcmUgcmV0dXJuLgo+PiArCSAqLwo+PiArCXBsYW5lX2Jsb2NrcyA9IHNrbF9kZGJfZW50 cnlfc2l6ZSgmZGRiLT5wbGFuZVtwaXBlXVtQTEFORV9DVVJTT1JdKTsKPj4gKwlza2xfZW5hYmxl X3BsYW5lX3dtX2xldmVscyhkZXZfcHJpdiwgcGxhbmVfYmxvY2tzLCBtYXhfbGV2ZWwsCj4+ICsJ CQkJICAgJnBpcGVfd20tPnBsYW5lc1tQTEFORV9DVVJTT1JdKTsKPj4gICAKPj4gICAJLyoKPj4g ICAJICogMi4gRGlzdHJpYnV0ZSB0aGUgcmVtYWluaW5nIHNwYWNlIGluIHByb3BvcnRpb24gdG8g dGhlIGFtb3VudCBvZgo+PiBAQCAtNDM0OCw0NCArNDQ0Nyw0OSBAQCBza2xfYWxsb2NhdGVfcGlw ZV9kZGIoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPj4gICAJc3RhcnQgPSBhbGxv Yy0+c3RhcnQ7Cj4+ICAgCWZvcl9lYWNoX3BsYW5lX2lkX29uX2NydGMoaW50ZWxfY3J0YywgcGxh bmVfaWQpIHsKPj4gICAJCXVuc2lnbmVkIGludCBkYXRhX3JhdGUsIHV2X2RhdGFfcmF0ZTsKPj4g LQkJdWludDE2X3QgcGxhbmVfYmxvY2tzLCB1dl9wbGFuZV9ibG9ja3M7Cj4+ICsJCXUxNiBwbGFu ZV9ibG9ja3MgPSAwLCB1dl9wbGFuZV9ibG9ja3MgPSAwOwo+PiArCQlzdHJ1Y3Qgc2tsX3BsYW5l X3dtICp3bSA9ICZwaXBlX3dtLT5wbGFuZXNbcGxhbmVfaWRdOwo+PiArCQl1MTYgbWluX3JlcV9i bGsgPSB3bS0+d21bbWF4X2xldmVsXS5taW5fZGJ1Zl9yZXE7Cj4+ICsJCXUxNiB1dl9taW5fcmVx X2JsayA9IHdtLT51dl93bVttYXhfbGV2ZWxdLm1pbl9kYnVmX3JlcTsKPj4gICAKPj4gICAJCWlm IChwbGFuZV9pZCA9PSBQTEFORV9DVVJTT1IpCj4+ICAgCQkJY29udGludWU7Cj4+ICAgCj4+ICAg CQlkYXRhX3JhdGUgPSBwbGFuZV9kYXRhX3JhdGVbcGxhbmVfaWRdOwo+PiAgIAo+PiAtCQkvKgo+ PiAtCQkgKiBhbGxvY2F0aW9uIGZvciAocGFja2VkIGZvcm1hdHMpIG9yICh1di1wbGFuZSBwYXJ0 IG9mIHBsYW5hciBmb3JtYXQpOgo+PiAtCQkgKiBwcm9tb3RlIHRoZSBleHByZXNzaW9uIHRvIDY0 IGJpdHMgdG8gYXZvaWQgb3ZlcmZsb3dpbmcsIHRoZQo+PiAtCQkgKiByZXN1bHQgaXMgPCBhdmFp bGFibGUgYXMgZGF0YV9yYXRlIC8gdG90YWxfZGF0YV9yYXRlIDwgMQo+PiAtCQkgKi8KPj4gLQkJ cGxhbmVfYmxvY2tzID0gbWluaW11bVtwbGFuZV9pZF07Cj4+IC0JCXBsYW5lX2Jsb2NrcyArPSBk aXZfdTY0KCh1aW50NjRfdClhbGxvY19zaXplICogZGF0YV9yYXRlLAo+PiAtCQkJCQl0b3RhbF9k YXRhX3JhdGUpOwo+PiAtCj4+ICAgCQkvKiBMZWF2ZSBkaXNhYmxlZCBwbGFuZXMgYXQgKDAsMCkg Ki8KPj4gICAJCWlmIChkYXRhX3JhdGUpIHsKPj4gKwkJCS8qCj4+ICsJCQkgKiBhbGxvY2F0aW9u IGZvciAocGFja2VkIGZvcm1hdHMpIG9yICh1di1wbGFuZSBwYXJ0IG9mCj4+ICsJCQkgKiBwbGFu YXIgZm9ybWF0KTogcHJvbW90ZSB0aGUgZXhwcmVzc2lvbiB0byA2NCBiaXRzIHRvCj4+ICsJCQkg KiBhdm9pZCBvdmVyZmxvd2luZywgdGhlIHJlc3VsdCBpcyA8IGF2YWlsYWJsZSBhcwo+PiArCQkJ ICogZGF0YV9yYXRlIC8gdG90YWxfZGF0YV9yYXRlIDwgMQo+PiArCQkJICovCj4+ICsKPj4gKwkJ CXBsYW5lX2Jsb2NrcyA9IG1heChtaW5pbXVtW3BsYW5lX2lkXSwgbWluX3JlcV9ibGspOwo+PiAr CQkJcGxhbmVfYmxvY2tzICs9IGRpdl91NjQoKHU2NClhbGxvY19zaXplICoKPj4gKwkJCQkJCWRh dGFfcmF0ZSwgdG90YWxfZGF0YV9yYXRlKTsKPj4gICAJCQlkZGItPnBsYW5lW3BpcGVdW3BsYW5l X2lkXS5zdGFydCA9IHN0YXJ0Owo+PiAgIAkJCWRkYi0+cGxhbmVbcGlwZV1bcGxhbmVfaWRdLmVu ZCA9IHN0YXJ0ICsgcGxhbmVfYmxvY2tzOwo+PiArCQkJc3RhcnQgKz0gcGxhbmVfYmxvY2tzOwo+ PiAgIAkJfQo+PiAgIAo+PiAtCQlzdGFydCArPSBwbGFuZV9ibG9ja3M7Cj4+IC0KPj4gICAJCS8q IEFsbG9jYXRlIEREQiBmb3IgVVYgcGxhbmUgZm9yIHBsYW5hciBmb3JtYXQvTlYxMiAqLwo+PiAg IAkJdXZfZGF0YV9yYXRlID0gdXZfcGxhbmVfZGF0YV9yYXRlW3BsYW5lX2lkXTsKPj4gICAKPj4g LQkJdXZfcGxhbmVfYmxvY2tzID0gdXZfbWluaW11bVtwbGFuZV9pZF07Cj4+IC0JCXV2X3BsYW5l X2Jsb2NrcyArPSBkaXZfdTY0KCh1aW50NjRfdClhbGxvY19zaXplICogdXZfZGF0YV9yYXRlLAo+ PiAtCQkJCQkgICB0b3RhbF9kYXRhX3JhdGUpOwo+PiAtCj4+ICAgCQlpZiAodXZfZGF0YV9yYXRl KSB7Cj4+ICsJCQl1dl9wbGFuZV9ibG9ja3MgPSBtYXgodXZfbWluaW11bVtwbGFuZV9pZF0sCj4+ ICsJCQkJCSAgICAgIHV2X21pbl9yZXFfYmxrKTsKPj4gKwkJCXV2X3BsYW5lX2Jsb2NrcyArPSBk aXZfdTY0KCh1NjQpYWxsb2Nfc2l6ZSAqCj4+ICsJCQkJCQl1dl9kYXRhX3JhdGUsIHRvdGFsX2Rh dGFfcmF0ZSk7Cj4+ICAgCQkJZGRiLT51dl9wbGFuZVtwaXBlXVtwbGFuZV9pZF0uc3RhcnQgPSBz dGFydDsKPj4gLQkJCWRkYi0+dXZfcGxhbmVbcGlwZV1bcGxhbmVfaWRdLmVuZCA9Cj4+IC0JCQkJ c3RhcnQgKyB1dl9wbGFuZV9ibG9ja3M7Cj4+ICsJCQlkZGItPnV2X3BsYW5lW3BpcGVdW3BsYW5l X2lkXS5lbmQgPSBzdGFydCArCj4+ICsJCQkJCQkJICAgIHV2X3BsYW5lX2Jsb2NrczsKPj4gKwkJ CXN0YXJ0ICs9IHV2X3BsYW5lX2Jsb2NrczsKPj4gICAJCX0KPj4gICAKPj4gLQkJc3RhcnQgKz0g dXZfcGxhbmVfYmxvY2tzOwo+PiArCQlza2xfZW5hYmxlX3BsYW5lX3dtX2xldmVscyhkZXZfcHJp diwgcGxhbmVfYmxvY2tzLAo+PiArCQkJCQkgICBtYXhfbGV2ZWwsIHdtKTsKPj4gICAJfQo+PiAg IAo+PiAgIAlyZXR1cm4gMDsKPj4gQEAgLTQ1OTQsNyArNDY5OCw2IEBAIHN0YXRpYyBpbnQgc2ts X2NvbXB1dGVfcGxhbmVfd20oY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+PiAgIAkJCQljb25zdCBzdHJ1Y3Qgc2tsX3dtX2xldmVsICpyZXN1bHRfcHJldiwKPj4gICAJ CQkJc3RydWN0IHNrbF93bV9sZXZlbCAqcmVzdWx0IC8qIG91dCAqLykKPj4gICB7Cj4+IC0JY29u c3Qgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcHN0YXRlID0gJmludGVsX3BzdGF0ZS0+YmFzZTsK Pj4gICAJdWludDMyX3QgbGF0ZW5jeSA9IGRldl9wcml2LT53bS5za2xfbGF0ZW5jeVtsZXZlbF07 Cj4+ICAgCXVpbnRfZml4ZWRfMTZfMTZfdCBtZXRob2QxLCBtZXRob2QyOwo+PiAgIAl1aW50X2Zp eGVkXzE2XzE2X3Qgc2VsZWN0ZWRfcmVzdWx0Owo+PiBAQCAtNDY5Myw2MSArNDc5NiwyNyBAQCBz dGF0aWMgaW50IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPj4gICAJCW1pbl9kaXNwX2J1Zl9uZWVkZWQgPSByZXNfYmxvY2tzOwo+ PiAgIAl9Cj4+ICAgCj4+IC0JaWYgKChsZXZlbCA+IDAgJiYgcmVzX2xpbmVzID4gMzEpIHx8Cj4+ IC0JICAgIHJlc19ibG9ja3MgPj0gZGRiX2FsbG9jYXRpb24gfHwKPj4gLQkgICAgbWluX2Rpc3Bf YnVmX25lZWRlZCA+PSBkZGJfYWxsb2NhdGlvbikgewo+PiAtCQlyZXN1bHQtPnBsYW5lX2VuID0g ZmFsc2U7Cj4+IC0KPj4gLQkJLyoKPj4gLQkJICogSWYgdGhlcmUgYXJlIG5vIHZhbGlkIGxldmVs IDAgd2F0ZXJtYXJrcywgdGhlbiB3ZSBjYW4ndAo+PiAtCQkgKiBzdXBwb3J0IHRoaXMgZGlzcGxh eSBjb25maWd1cmF0aW9uLgo+PiAtCQkgKi8KPj4gLQkJaWYgKGxldmVsKSB7Cj4+IC0JCQlyZXR1 cm4gMDsKPj4gLQkJfSBlbHNlIHsKPj4gLQkJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gcHN0 YXRlLT5wbGFuZTsKPj4gLQo+PiAtCQkJRFJNX0RFQlVHX0tNUygiUmVxdWVzdGVkIGRpc3BsYXkg Y29uZmlndXJhdGlvbiBleGNlZWRzIHN5c3RlbSB3YXRlcm1hcmsgbGltaXRhdGlvbnNcbiIpOwo+ PiAtCQkJRFJNX0RFQlVHX0tNUygiW1BMQU5FOiVkOiVzXSBibG9ja3MgcmVxdWlyZWQgPSAldS8l dSwgbGluZXMgcmVxdWlyZWQgPSAldS8zMVxuIiwKPj4gLQkJCQkgICAgICBwbGFuZS0+YmFzZS5p ZCwgcGxhbmUtPm5hbWUsCj4+IC0JCQkJICAgICAgcmVzX2Jsb2NrcywgZGRiX2FsbG9jYXRpb24s IHJlc19saW5lcyk7Cj4+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQkJfQo+PiAtCX0KPj4gLQo+ PiAtCS8qCj4+IC0JICogRGlzcGxheSBXQSAjODI2IChTS0w6QUxMLCBCWFQ6QUxMKSAmICMxMDU5 IChDTkw6QSkKPj4gLQkgKiBkaXNhYmxlIHdtIGxldmVsIDEtNyBvbiBOVjEyIHBsYW5lcwo+PiAt CSAqLwo+PiAtCWlmICh3cC0+aXNfcGxhbmFyICYmIGxldmVsID49IDEgJiYKPj4gLQkgICAgKElT X1NLWUxBS0UoZGV2X3ByaXYpIHx8IElTX0JST1hUT04oZGV2X3ByaXYpIHx8Cj4+IC0JICAgICBJ U19DTkxfUkVWSUQoZGV2X3ByaXYsIENOTF9SRVZJRF9BMCwgQ05MX1JFVklEX0EwKSkpIHsKPj4g LQkJcmVzdWx0LT5wbGFuZV9lbiA9IGZhbHNlOwo+PiAtCQlyZXR1cm4gMDsKPj4gLQl9Cj4+IC0K Pj4gICAJLyogVGhlIG51bWJlciBvZiBsaW5lcyBhcmUgaWdub3JlZCBmb3IgdGhlIGxldmVsIDAg d2F0ZXJtYXJrLiAqLwo+PiAgIAlyZXN1bHQtPnBsYW5lX3Jlc19iID0gcmVzX2Jsb2NrczsKPj4g KwlyZXN1bHQtPm1pbl9kYnVmX3JlcSA9IG1pbl9kaXNwX2J1Zl9uZWVkZWQgKyAxOwo+PiAgIAly ZXN1bHQtPnBsYW5lX3Jlc19sID0gcmVzX2xpbmVzOwo+PiAtCXJlc3VsdC0+cGxhbmVfZW4gPSB0 cnVlOwo+PiAgIAo+PiAgIAlyZXR1cm4gMDsKPj4gICB9Cj4+ICAgCj4+ICAgc3RhdGljIGludAo+ PiAgIHNrbF9jb21wdXRlX3dtX2xldmVscyhjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCj4+IC0JCSAgICAgIHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRkYiwKPj4g ICAJCSAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4+ICAgCQkgICAgICBj b25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKmludGVsX3BzdGF0ZSwKPj4gICAJCSAgICAg IGNvbnN0IHN0cnVjdCBza2xfd21fcGFyYW1zICp3bV9wYXJhbXMsCj4+ICAgCQkgICAgICBzdHJ1 Y3Qgc2tsX3BsYW5lX3dtICp3bSwKPj4gICAJCSAgICAgIGludCBwbGFuZV9pZCkKPj4gICB7Cj4+ IC0Jc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNzdGF0ZS0+ YmFzZS5jcnRjKTsKPj4gICAJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSBpbnRlbF9wc3RhdGUt PmJhc2UucGxhbmU7Cj4+ICAgCXN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUgPSB0b19p bnRlbF9wbGFuZShwbGFuZSk7Cj4+IC0JdWludDE2X3QgZGRiX2Jsb2NrczsKPj4gLQllbnVtIHBp cGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Cj4+ICsJc3RydWN0IGludGVsX2F0b21pY19zdGF0 ZSAqaW50ZWxfc3RhdGUgPQo+PiArCQkJdG9faW50ZWxfYXRvbWljX3N0YXRlKGNzdGF0ZS0+YmFz ZS5zdGF0ZSk7Cj4+ICsJdTE2IGRkYl9ibG9ja3MgPSAwOwo+PiAgIAlpbnQgbGV2ZWwsIG1heF9s ZXZlbCA9IGlsa193bV9tYXhfbGV2ZWwoZGV2X3ByaXYpOwo+PiAgIAllbnVtIHBsYW5lX2lkIGlu dGVsX3BsYW5lX2lkID0gaW50ZWxfcGxhbmUtPmlkOwo+PiAgIAlpbnQgcmV0Owo+PiBAQCAtNDc1 NSw5ICs0ODI0LDE3IEBAIHNrbF9jb21wdXRlX3dtX2xldmVscyhjb25zdCBzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+ICAgCWlmIChXQVJOX09OKCFpbnRlbF9wc3RhdGUtPmJh c2UuZmIpKQo+PiAgIAkJcmV0dXJuIC1FSU5WQUw7Cj4+ICAgCj4+IC0JZGRiX2Jsb2NrcyA9IHBs YW5lX2lkID8KPj4gLQkJICAgICBza2xfZGRiX2VudHJ5X3NpemUoJmRkYi0+dXZfcGxhbmVbcGlw ZV1baW50ZWxfcGxhbmVfaWRdKSA6Cj4+IC0JCSAgICAgc2tsX2RkYl9lbnRyeV9zaXplKCZkZGIt PnBsYW5lW3BpcGVdW2ludGVsX3BsYW5lX2lkXSk7Cj4+ICsJLyogRml4IEREQiBhbGxvY2F0aW9u IGlzIGF2YWlsYWJsZSBvbmx5IGZvciBjdXJzb3IgcGxhbmUgKi8KPj4gKwlpZiAoaW50ZWxfcGxh bmVfaWQgPT0gUExBTkVfQ1VSU09SKSB7Cj4+ICsJCWludCBudW1fYWN0aXZlOwo+PiArCj4+ICsJ CWlmIChpbnRlbF9zdGF0ZS0+YWN0aXZlX3BpcGVfY2hhbmdlcykKPj4gKwkJCW51bV9hY3RpdmUg PSBod2VpZ2h0MzIoaW50ZWxfc3RhdGUtPmFjdGl2ZV9jcnRjcyk7Cj4+ICsJCWVsc2UKPj4gKwkJ CW51bV9hY3RpdmUgPSBod2VpZ2h0MzIoZGV2X3ByaXYtPmFjdGl2ZV9jcnRjcyk7Cj4+ICsKPiBh bmQgeW91IGp1c3QgYWRkZWQgYSBmdW5jdGlvbiBmb3IgdGhhdCwgd2h5IHRvIGR1cGxpY2F0ZT8K PiBidXQgaWYgbm90IGVub3VnaDogd2h5IG5vdCBtYWtpbmcgc29tZXRoaW5nIGdlbmVyaWMgZW5v dWdoIHRvIGF2b2lkIHRoaXMgZHVwbGljYXRpb24/CisxLAo+Cj4+ICsJCWRkYl9ibG9ja3MgPSBz a2xfY3Vyc29yX2FsbG9jYXRpb24obnVtX2FjdGl2ZSk7Cj4gaXQgc2VlbXMgdGhpcyByZS1vcmcg Zm9yIGN1cnNvciBhbHNvIGRlc2VydmVzIGEgZGlmZmVyZW50IHBhdGNoLi4uCm9rLgoKVGhhbmtz IGZvciB0aGUgcmV2aWV3LgoKLU1haGVzaAo+Cj4+ICsJfQo+PiAgIAo+PiAgIAlmb3IgKGxldmVs ID0gMDsgbGV2ZWwgPD0gbWF4X2xldmVsOyBsZXZlbCsrKSB7Cj4+ICAgCQlzdHJ1Y3Qgc2tsX3dt X2xldmVsICpyZXN1bHQgPSBwbGFuZV9pZCA/ICZ3bS0+dXZfd21bbGV2ZWxdIDoKPj4gQEAgLTQ4 MTQsNyArNDg5MSw2IEBAIHNrbF9jb21wdXRlX2xpbmV0aW1lX3dtKHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjc3RhdGUpCj4+ICAgc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfdHJhbnNpdGlvbl93 bShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+PiAgIAkJCQkgICAgICBzdHJ1Y3Qg c2tsX3dtX3BhcmFtcyAqd3AsCj4+ICAgCQkJCSAgICAgIHN0cnVjdCBza2xfd21fbGV2ZWwgKndt X2wwLAo+PiAtCQkJCSAgICAgIHVpbnQxNl90IGRkYl9hbGxvY2F0aW9uLAo+PiAgIAkJCQkgICAg ICBzdHJ1Y3Qgc2tsX3dtX2xldmVsICp0cmFuc193bSAvKiBvdXQgKi8pCj4+ICAgewo+PiAgIAlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3N0YXRlLT5iYXNlLmNydGMtPmRldjsKPj4gQEAgLTQ4 NTEsMjMgKzQ5MjcsMTYgQEAgc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfdHJhbnNpdGlvbl93bShz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+PiAgIAkJLyogV0EgQlVHOjE5Mzg0NjYg YWRkIG9uZSBibG9jayBmb3Igbm9uIHktdGlsZSBwbGFuZXMgKi8KPj4gICAJCWlmIChJU19DTkxf UkVWSUQoZGV2X3ByaXYsIENOTF9SRVZJRF9BMCwgQ05MX1JFVklEX0EwKSkKPj4gICAJCQlyZXNf YmxvY2tzICs9IDE7Cj4+IC0KPj4gICAJfQo+PiAgIAo+PiAtCXJlc19ibG9ja3MgKz0gMTsKPj4g LQo+PiAtCWlmIChyZXNfYmxvY2tzIDwgZGRiX2FsbG9jYXRpb24pIHsKPj4gLQkJdHJhbnNfd20t PnBsYW5lX3Jlc19iID0gcmVzX2Jsb2NrczsKPj4gLQkJdHJhbnNfd20tPnBsYW5lX2VuID0gdHJ1 ZTsKPj4gLQkJcmV0dXJuOwo+PiAtCX0KPj4gKwl0cmFuc193bS0+cGxhbmVfcmVzX2IgPSByZXNf YmxvY2tzICsgMTsKPj4gKwlyZXR1cm47Cj4+ICAgCj4+ICAgZXhpdDoKPj4gLQl0cmFuc193bS0+ cGxhbmVfZW4gPSBmYWxzZTsKPj4gKwl0cmFuc193bS0+cGxhbmVfcmVzX2IgPSAwOwo+PiAgIH0K Pj4gICAKPj4gICBzdGF0aWMgaW50IHNrbF9idWlsZF9waXBlX3dtKHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjc3RhdGUsCj4+IC0JCQkgICAgIHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRk YiwKPj4gICAJCQkgICAgIHN0cnVjdCBza2xfcGlwZV93bSAqcGlwZV93bSkKPj4gICB7Cj4+ICAg CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjc3RhdGUtPmJhc2UuY3J0Yy0+ZGV2Owo+PiBAQCAt NDg4OSwyNCArNDk1OCwyMSBAQCBzdGF0aWMgaW50IHNrbF9idWlsZF9waXBlX3dtKHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4+ICAgCQkJCQkJdG9faW50ZWxfcGxhbmVfc3RhdGUo cHN0YXRlKTsKPj4gICAJCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSB0b19pbnRlbF9wbGFuZShw bGFuZSktPmlkOwo+PiAgIAkJc3RydWN0IHNrbF93bV9wYXJhbXMgd21fcGFyYW1zOwo+PiAtCQll bnVtIHBpcGUgcGlwZSA9IHRvX2ludGVsX2NydGMoY3N0YXRlLT5iYXNlLmNydGMpLT5waXBlOwo+ PiAtCQl1aW50MTZfdCBkZGJfYmxvY2tzOwo+PiAgIAo+PiAgIAkJd20gPSAmcGlwZV93bS0+cGxh bmVzW3BsYW5lX2lkXTsKPj4gLQkJZGRiX2Jsb2NrcyA9IHNrbF9kZGJfZW50cnlfc2l6ZSgmZGRi LT5wbGFuZVtwaXBlXVtwbGFuZV9pZF0pOwo+PiAgIAo+PiAgIAkJcmV0ID0gc2tsX2NvbXB1dGVf cGxhbmVfd21fcGFyYW1zKGRldl9wcml2LCBjc3RhdGUsCj4+ICAgCQkJCQkJICBpbnRlbF9wc3Rh dGUsICZ3bV9wYXJhbXMsIDApOwo+PiAgIAkJaWYgKHJldCkKPj4gICAJCQlyZXR1cm4gcmV0Owo+ PiAgIAo+PiAtCQlyZXQgPSBza2xfY29tcHV0ZV93bV9sZXZlbHMoZGV2X3ByaXYsIGRkYiwgY3N0 YXRlLAo+PiAtCQkJCQkgICAgaW50ZWxfcHN0YXRlLCAmd21fcGFyYW1zLCB3bSwgMCk7Cj4+ICsJ CXJldCA9IHNrbF9jb21wdXRlX3dtX2xldmVscyhkZXZfcHJpdiwgY3N0YXRlLCBpbnRlbF9wc3Rh dGUsCj4+ICsJCQkJCSAgICAmd21fcGFyYW1zLCB3bSwgMCk7Cj4+ICAgCQlpZiAocmV0KQo+PiAg IAkJCXJldHVybiByZXQ7Cj4+ICAgCj4+ICAgCQlza2xfY29tcHV0ZV90cmFuc2l0aW9uX3dtKGNz dGF0ZSwgJndtX3BhcmFtcywgJndtLT53bVswXSwKPj4gLQkJCQkJICBkZGJfYmxvY2tzLCAmd20t PnRyYW5zX3dtKTsKPj4gKwkJCQkJICAmd20tPnRyYW5zX3dtKTsKPj4gICAKPj4gICAJCS8qIHV2 IHBsYW5lIHdhdGVybWFya3MgbXVzdCBhbHNvIGJlIHZhbGlkYXRlZCBmb3IgTlYxMi9QbGFuYXIg Ki8KPj4gICAJCWlmICh3bV9wYXJhbXMuaXNfcGxhbmFyKSB7Cj4+IEBAIC00OTE5LDcgKzQ5ODUs NyBAQCBzdGF0aWMgaW50IHNrbF9idWlsZF9waXBlX3dtKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjc3RhdGUsCj4+ICAgCQkJaWYgKHJldCkKPj4gICAJCQkJcmV0dXJuIHJldDsKPj4gICAKPj4g LQkJCXJldCA9IHNrbF9jb21wdXRlX3dtX2xldmVscyhkZXZfcHJpdiwgZGRiLCBjc3RhdGUsCj4+ ICsJCQlyZXQgPSBza2xfY29tcHV0ZV93bV9sZXZlbHMoZGV2X3ByaXYsIGNzdGF0ZSwKPj4gICAJ CQkJCQkgICAgaW50ZWxfcHN0YXRlLCAmd21fcGFyYW1zLAo+PiAgIAkJCQkJCSAgICB3bSwgMSk7 Cj4+ICAgCQkJaWYgKHJldCkKPj4gQEAgLTUwNTAsNDIgKzUxMTYsMTAgQEAgYm9vbCBza2xfZGRi X2FsbG9jYXRpb25fb3ZlcmxhcHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ PiAgIAlyZXR1cm4gZmFsc2U7Cj4+ICAgfQo+PiAgIAo+PiAtc3RhdGljIGludCBza2xfdXBkYXRl X3BpcGVfd20oc3RydWN0IGRybV9jcnRjX3N0YXRlICpjc3RhdGUsCj4+IC0JCQkgICAgICBjb25z dCBzdHJ1Y3Qgc2tsX3BpcGVfd20gKm9sZF9waXBlX3dtLAo+PiAtCQkJICAgICAgc3RydWN0IHNr bF9waXBlX3dtICpwaXBlX3dtLCAvKiBvdXQgKi8KPj4gLQkJCSAgICAgIHN0cnVjdCBza2xfZGRi X2FsbG9jYXRpb24gKmRkYiwgLyogb3V0ICovCj4+IC0JCQkgICAgICBib29sICpjaGFuZ2VkIC8q IG91dCAqLykKPj4gLXsKPj4gLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqaW50ZWxfY3N0YXRl ID0gdG9faW50ZWxfY3J0Y19zdGF0ZShjc3RhdGUpOwo+PiAtCWludCByZXQ7Cj4+IC0KPj4gLQly ZXQgPSBza2xfYnVpbGRfcGlwZV93bShpbnRlbF9jc3RhdGUsIGRkYiwgcGlwZV93bSk7Cj4+IC0J aWYgKHJldCkKPj4gLQkJcmV0dXJuIHJldDsKPj4gLQo+PiAtCWlmICghbWVtY21wKG9sZF9waXBl X3dtLCBwaXBlX3dtLCBzaXplb2YoKnBpcGVfd20pKSkKPj4gLQkJKmNoYW5nZWQgPSBmYWxzZTsK Pj4gLQllbHNlCj4+IC0JCSpjaGFuZ2VkID0gdHJ1ZTsKPj4gLQo+PiAtCXJldHVybiAwOwo+PiAt fQo+PiAtCj4+IC1zdGF0aWMgdWludDMyX3QKPj4gLXBpcGVzX21vZGlmaWVkKHN0cnVjdCBkcm1f YXRvbWljX3N0YXRlICpzdGF0ZSkKPj4gLXsKPj4gLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4+ IC0Jc3RydWN0IGRybV9jcnRjX3N0YXRlICpjc3RhdGU7Cj4+IC0JdWludDMyX3QgaSwgcmV0ID0g MDsKPj4gLQo+PiAtCWZvcl9lYWNoX25ld19jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjc3Rh dGUsIGkpCj4+IC0JCXJldCB8PSBkcm1fY3J0Y19tYXNrKGNydGMpOwo+PiAtCj4+IC0JcmV0dXJu IHJldDsKPj4gLX0KPj4gLQo+PiAgIHN0YXRpYyBpbnQKPj4gLXNrbF9kZGJfYWRkX2FmZmVjdGVk X3BsYW5lcyhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlKQo+PiArc2tsX2RkYl9hZGRf YWZmZWN0ZWRfcGxhbmVzKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4+ICsJCQkg ICAgY29uc3Qgc3RydWN0IHNrbF9waXBlX3dtICpvbGRfcGlwZV93bSwKPj4gKwkJCSAgICBjb25z dCBzdHJ1Y3Qgc2tsX3BpcGVfd20gKnBpcGVfd20pCj4+ICAgewo+PiAgIAlzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqc3RhdGUgPSBjc3RhdGUtPmJhc2Uuc3RhdGU7Cj4+ICAgCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBzdGF0ZS0+ZGV2Owo+PiBAQCAtNTEwMSwxMSArNTEzNSwxNSBAQCBza2xf ZGRiX2FkZF9hZmZlY3RlZF9wbGFuZXMoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSkK Pj4gICAKPj4gICAJZHJtX2Zvcl9lYWNoX3BsYW5lX21hc2socGxhbmUsIGRldiwgY3N0YXRlLT5i YXNlLnBsYW5lX21hc2spIHsKPj4gICAJCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSB0b19pbnRl bF9wbGFuZShwbGFuZSktPmlkOwo+PiArCQljb25zdCBzdHJ1Y3Qgc2tsX3BsYW5lX3dtICp3bSA9 ICZwaXBlX3dtLT5wbGFuZXNbcGxhbmVfaWRdOwo+PiArCQljb25zdCBzdHJ1Y3Qgc2tsX3BsYW5l X3dtICpvbGRfd20gPQo+PiArCQkJCQkJJm9sZF9waXBlX3dtLT5wbGFuZXNbcGxhbmVfaWRdOwo+ PiAgIAo+PiAtCQlpZiAoc2tsX2RkYl9lbnRyeV9lcXVhbCgmY3VyX2RkYi0+cGxhbmVbcGlwZV1b cGxhbmVfaWRdLAo+PiAtCQkJCQkmbmV3X2RkYi0+cGxhbmVbcGlwZV1bcGxhbmVfaWRdKSAmJgo+ PiArCQlpZiAoKHNrbF9kZGJfZW50cnlfZXF1YWwoJmN1cl9kZGItPnBsYW5lW3BpcGVdW3BsYW5l X2lkXSwKPj4gKwkJCQkJICZuZXdfZGRiLT5wbGFuZVtwaXBlXVtwbGFuZV9pZF0pICYmCj4+ICAg CQkgICAgc2tsX2RkYl9lbnRyeV9lcXVhbCgmY3VyX2RkYi0+dXZfcGxhbmVbcGlwZV1bcGxhbmVf aWRdLAo+PiAtCQkJCQkmbmV3X2RkYi0+dXZfcGxhbmVbcGlwZV1bcGxhbmVfaWRdKSkKPj4gKwkJ CQkJJm5ld19kZGItPnV2X3BsYW5lW3BpcGVdW3BsYW5lX2lkXSkpICYmCj4+ICsJCSAgICAhbWVt Y21wKHdtLCBvbGRfd20sIHNpemVvZihzdHJ1Y3Qgc2tsX3BsYW5lX3dtKSkpCj4+ICAgCQkJY29u dGludWU7Cj4+ICAgCj4+ICAgCQlwbGFuZV9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X3BsYW5lX3N0 YXRlKHN0YXRlLCBwbGFuZSk7Cj4+IEBAIC01MTE2LDMxICs1MTU0LDUxIEBAIHNrbF9kZGJfYWRk X2FmZmVjdGVkX3BsYW5lcyhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlKQo+PiAgIAly ZXR1cm4gMDsKPj4gICB9Cj4+ICAgCj4+IC1zdGF0aWMgaW50Cj4+IC1za2xfY29tcHV0ZV9kZGIo c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+PiArc3RhdGljIGludCBza2xfdXBkYXRl X3BpcGVfd20oc3RydWN0IGRybV9jcnRjX3N0YXRlICpjc3RhdGUsCj4+ICsJCQkgICAgICBjb25z dCBzdHJ1Y3Qgc2tsX3BpcGVfd20gKm9sZF9waXBlX3dtLAo+PiArCQkJICAgICAgc3RydWN0IHNr bF9waXBlX3dtICpwaXBlX3dtLCAvKiBvdXQgKi8KPj4gKwkJCSAgICAgIHN0cnVjdCBza2xfZGRi X2FsbG9jYXRpb24gKmRkYiwgLyogb3V0ICovCj4+ICsJCQkgICAgICBib29sICpjaGFuZ2VkIC8q IG91dCAqLykKPj4gICB7Cj4+IC0JY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShzdGF0ZS0+ZGV2KTsKPj4gLQlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRl ICppbnRlbF9zdGF0ZSA9IHRvX2ludGVsX2F0b21pY19zdGF0ZShzdGF0ZSk7Cj4+IC0Jc3RydWN0 IHNrbF9kZGJfYWxsb2NhdGlvbiAqZGRiID0gJmludGVsX3N0YXRlLT53bV9yZXN1bHRzLmRkYjsK Pj4gLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKPj4gLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3N0YXRlOwo+PiAtCWludCByZXQsIGk7Cj4+ICsJc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmludGVsX2NzdGF0ZSA9IHRvX2ludGVsX2NydGNfc3RhdGUoY3N0YXRlKTsKPj4gKwlpbnQgcmV0 Owo+PiAgIAo+PiAtCW1lbWNweShkZGIsICZkZXZfcHJpdi0+d20uc2tsX2h3LmRkYiwgc2l6ZW9m KCpkZGIpKTsKPj4gKwlyZXQgPSBza2xfYnVpbGRfcGlwZV93bShpbnRlbF9jc3RhdGUsIHBpcGVf d20pOwo+PiArCWlmIChyZXQpCj4+ICsJCXJldHVybiByZXQ7Cj4+ICAgCj4+IC0JZm9yX2VhY2hf bmV3X2ludGVsX2NydGNfaW5fc3RhdGUoaW50ZWxfc3RhdGUsIGNydGMsIGNzdGF0ZSwgaSkgewo+ PiAtCQlyZXQgPSBza2xfYWxsb2NhdGVfcGlwZV9kZGIoY3N0YXRlLCBkZGIpOwo+PiAtCQlpZiAo cmV0KQo+PiAtCQkJcmV0dXJuIHJldDsKPj4gKwlyZXQgPSBza2xfYWxsb2NhdGVfcGlwZV9kZGIo aW50ZWxfY3N0YXRlLCBwaXBlX3dtLCBkZGIpOwo+PiArCWlmIChyZXQpCj4+ICsJCXJldHVybiBy ZXQ7Cj4+ICsJLyoKPj4gKwkgKiBUT0RPOiBQbGFuZXMgYXJlIGluY2x1ZGVkIGluIHN0YXRlIHRv IGFybSBXTSByZWdpc3RlcnMuCj4+ICsJICogU2NvcGUgdG8gb3B0aW1pemUgZnVydGhlciwgYnkg anVzdCByZXdyaXRpbmcgcGxhbmUgc3VyZiByZWdpc3Rlci4KPj4gKwkgKi8KPj4gKwlyZXQgPSBz a2xfZGRiX2FkZF9hZmZlY3RlZF9wbGFuZXMoaW50ZWxfY3N0YXRlLCBvbGRfcGlwZV93bSwgcGlw ZV93bSk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJcmV0dXJuIHJldDsKPj4gICAKPj4gLQkJcmV0ID0g c2tsX2RkYl9hZGRfYWZmZWN0ZWRfcGxhbmVzKGNzdGF0ZSk7Cj4+IC0JCWlmIChyZXQpCj4+IC0J CQlyZXR1cm4gcmV0Owo+PiAtCX0KPj4gKwlpZiAoIW1lbWNtcChvbGRfcGlwZV93bSwgcGlwZV93 bSwgc2l6ZW9mKCpwaXBlX3dtKSkpCj4+ICsJCSpjaGFuZ2VkID0gZmFsc2U7Cj4+ICsJZWxzZQo+ PiArCQkqY2hhbmdlZCA9IHRydWU7Cj4+ICAgCj4+ICAgCXJldHVybiAwOwo+PiAgIH0KPj4gICAK Pj4gK3N0YXRpYyB1aW50MzJfdAo+PiArcGlwZXNfbW9kaWZpZWQoc3RydWN0IGRybV9hdG9taWNf c3RhdGUgKnN0YXRlKQo+PiArewo+PiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPj4gKwlzdHJ1 Y3QgZHJtX2NydGNfc3RhdGUgKmNzdGF0ZTsKPj4gKwl1MzIgaSwgcmV0ID0gMDsKPj4gKwo+PiAr CWZvcl9lYWNoX25ld19jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjc3RhdGUsIGkpCj4+ICsJ CXJldCB8PSBkcm1fY3J0Y19tYXNrKGNydGMpOwo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30K Pj4gKwo+PiAgIHN0YXRpYyB2b2lkCj4+ICAgc2tsX2NvcHlfZGRiX2Zvcl9waXBlKHN0cnVjdCBz a2xfZGRiX3ZhbHVlcyAqZHN0LAo+PiAgIAkJICAgICAgc3RydWN0IHNrbF9kZGJfdmFsdWVzICpz cmMsCj4+IEBAIC01Mjg1LDYgKzUzNDMsNyBAQCBza2xfY29tcHV0ZV93bShzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqc3RhdGUpCj4+ICAgCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPj4gICAJc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpjc3RhdGU7Cj4+ICAgCXN0cnVjdCBpbnRlbF9hdG9taWNfc3Rh dGUgKmludGVsX3N0YXRlID0gdG9faW50ZWxfYXRvbWljX3N0YXRlKHN0YXRlKTsKPj4gKwljb25z dCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHN0YXRlLT5kZXYp Owo+PiAgIAlzdHJ1Y3Qgc2tsX2RkYl92YWx1ZXMgKnJlc3VsdHMgPSAmaW50ZWxfc3RhdGUtPndt X3Jlc3VsdHM7Cj4+ICAgCXN0cnVjdCBza2xfcGlwZV93bSAqcGlwZV93bTsKPj4gICAJYm9vbCBj aGFuZ2VkID0gZmFsc2U7Cj4+IEBAIC01Mjk3LDEwICs1MzU2LDcgQEAgc2tsX2NvbXB1dGVfd20o c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+PiAgIAlpZiAocmV0IHx8ICFjaGFuZ2Vk KQo+PiAgIAkJcmV0dXJuIHJldDsKPj4gICAKPj4gLQlyZXQgPSBza2xfY29tcHV0ZV9kZGIoc3Rh dGUpOwo+PiAtCWlmIChyZXQpCj4+IC0JCXJldHVybiByZXQ7Cj4+IC0KPj4gKwltZW1jcHkoJnJl c3VsdHMtPmRkYiwgJmRldl9wcml2LT53bS5za2xfaHcuZGRiLCBzaXplb2YocmVzdWx0cy0+ZGRi KSk7Cj4+ICAgCS8qCj4+ICAgCSAqIENhbGN1bGF0ZSBXTSdzIGZvciBhbGwgcGlwZXMgdGhhdCBh cmUgcGFydCBvZiB0aGlzIHRyYW5zYWN0aW9uLgo+PiAgIAkgKiBOb3RlIHRoYXQgdGhlIEREQiBh bGxvY2F0aW9uIGFib3ZlIG1heSBoYXZlIGFkZGVkIG1vcmUgQ1JUQydzIHRoYXQKPj4gLS0gCj4+ IDIuMTYuMgo+PgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 Cg==