From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 10/13] drm/i915: Load balancing across a virtual engine Date: Mon, 11 Mar 2019 12:47:30 +0000 Message-ID: References: <20190308141244.16837-1-chris@chris-wilson.co.uk> <20190308141244.16837-11-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id EEEF9891DD for ; Mon, 11 Mar 2019 12:47:33 +0000 (UTC) In-Reply-To: <20190308141244.16837-11-chris@chris-wilson.co.uk> 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: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDA4LzAzLzIwMTkgMTQ6MTIsIENocmlzIFdpbHNvbiB3cm90ZToKPiBIYXZpbmcgYWxsb3dl ZCB0aGUgdXNlciB0byBkZWZpbmUgYSBzZXQgb2YgZW5naW5lcyB0aGF0IHRoZXkgd2lsbCB3YW50 Cj4gdG8gb25seSB1c2UsIHdlIGdvIG9uZSBzdGVwIGZ1cnRoZXIgYW5kIGFsbG93IHRoZW0gdG8g YmluZCB0aG9zZSBlbmdpbmVzCj4gaW50byBhIHNpbmdsZSB2aXJ0dWFsIGluc3RhbmNlLiBTdWJt aXR0aW5nIGEgYmF0Y2ggdG8gdGhlIHZpcnR1YWwgZW5naW5lCj4gd2lsbCB0aGVuIGZvcndhcmQg aXQgdG8gYW55IG9uZSBvZiB0aGUgc2V0IGluIGEgbWFubmVyIGFzIGJlc3QgdG8KPiBkaXN0cmli dXRlIGxvYWQuICBUaGUgdmlydHVhbCBlbmdpbmUgaGFzIGEgc2luZ2xlIHRpbWVsaW5lIGFjcm9z cyBhbGwKPiBlbmdpbmVzIChpdCBvcGVyYXRlcyBhcyBhIHNpbmdsZSBxdWV1ZSksIHNvIGl0IGlz IG5vdCBhYmxlIHRvIGNvbmN1cnJlbnRseQo+IHJ1biBiYXRjaGVzIGFjcm9zcyBtdWx0aXBsZSBl bmdpbmVzIGJ5IGl0c2VsZjsgdGhhdCBpcyBsZWZ0IHVwIHRvIHRoZSB1c2VyCj4gdG8gc3VibWl0 IG11bHRpcGxlIGNvbmN1cnJlbnQgYmF0Y2hlcyB0byBtdWx0aXBsZSBxdWV1ZXMuIE11bHRpcGxl IHVzZXJzCj4gd2lsbCBiZSBsb2FkIGJhbGFuY2VkIGFjcm9zcyB0aGUgc3lzdGVtLgo+IAo+IFRo ZSBtZWNoYW5pc20gdXNlZCBmb3IgbG9hZCBiYWxhbmNpbmcgaW4gdGhpcyBwYXRjaCBpcyBhIGxh dGUgZ3JlZWR5Cj4gYmFsYW5jZXIuIFdoZW4gYSByZXF1ZXN0IGlzIHJlYWR5IGZvciBleGVjdXRp b24sIGl0IGlzIGFkZGVkIHRvIGVhY2gKPiBlbmdpbmUncyBxdWV1ZSwgYW5kIHdoZW4gYW4gZW5n aW5lIGlzIHJlYWR5IGZvciBpdHMgbmV4dCByZXF1ZXN0IGl0Cj4gY2xhaW1zIGl0IGZyb20gdGhl IHZpcnR1YWwgZW5naW5lLiBUaGUgZmlyc3QgZW5naW5lIHRvIGRvIHNvLCB3aW5zLCBpLmUuCj4g dGhlIHJlcXVlc3QgaXMgZXhlY3V0ZWQgYXQgdGhlIGVhcmxpZXN0IG9wcG9ydHVuaXR5IChpZGxl IG1vbWVudCkgaW4gdGhlCj4gc3lzdGVtLgo+IAo+IEFzIG5vdCBhbGwgSFcgaXMgY3JlYXRlZCBl cXVhbCwgdGhlIHVzZXIgaXMgc3RpbGwgYWJsZSB0byBza2lwIHRoZQo+IHZpcnR1YWwgZW5naW5l IGFuZCBleGVjdXRlIHRoZSBiYXRjaCBvbiBhIHNwZWNpZmljIGVuZ2luZSwgYWxsIHdpdGhpbiB0 aGUKPiBzYW1lIHF1ZXVlLiBJdCB3aWxsIHRoZW4gYmUgZXhlY3V0ZWQgaW4gb3JkZXIgb24gdGhl IGNvcnJlY3QgZW5naW5lLAo+IHdpdGggZXhlY3V0aW9uIG9uIG90aGVyIHZpcnR1YWwgZW5naW5l cyBiZWluZyBtb3ZlZCBhd2F5IGR1ZSB0byB0aGUgbG9hZAo+IGRldGVjdGlvbi4KPiAKPiBBIGNv dXBsZSBvZiBhcmVhcyBmb3IgcG90ZW50aWFsIGltcHJvdmVtZW50IGxlZnQhCj4gCj4gLSBUaGUg dmlydHVhbCBlbmdpbmUgYWx3YXlzIHRha2UgcHJpb3JpdHkgb3ZlciBlcXVhbC1wcmlvcml0eSB0 YXNrcy4KPiBNb3N0bHkgYnJva2VuIHVwIGJ5IGFwcGx5aW5nIEZRX0NPREVMIHJ1bGVzIGZvciBw cmlvcml0aXNpbmcgbmV3IGNsaWVudHMsCj4gYW5kIGhvcGVmdWxseSB0aGUgdmlydHVhbCBhbmQg cmVhbCBlbmdpbmVzIGFyZSBub3QgdGhlbiBjb25nZXN0ZWQgKGkuZS4KPiBhbGwgd29yayBpcyB2 aWEgdmlydHVhbCBlbmdpbmVzLCBvciBhbGwgd29yayBpcyB0byB0aGUgcmVhbCBlbmdpbmUpLgo+ IAo+IC0gV2UgcmVxdWlyZSB0aGUgYnJlYWRjcnVtYiBpcnEgYXJvdW5kIGV2ZXJ5IHZpcnR1YWwg ZW5naW5lIHJlcXVlc3QuIEZvcgo+IG5vcm1hbCBlbmdpbmVzLCB3ZSBlbGltaW5hdGUgdGhlIG5l ZWQgZm9yIHRoZSBzbG93IHJvdW5kIHRyaXAgdmlhCj4gaW50ZXJydXB0IGJ5IHVzaW5nIHRoZSBz dWJtaXQgZmVuY2UgYW5kIHF1ZXVlaW5nIGluIG9yZGVyLiBGb3IgdmlydHVhbAo+IGVuZ2luZXMs IHdlIGhhdmUgdG8gYWxsb3cgYW55IGpvYiB0byB0cmFuc2ZlciB0byBhIG5ldyByaW5nLCBhbmQg Y2Fubm90Cj4gY29hbGVzY2UgdGhlIHN1Ym1pc3Npb25zLCBzbyByZXF1aXJlIHRoZSBjb21wbGV0 aW9uIGZlbmNlIGluc3RlYWQsCj4gZm9yY2luZyB0aGUgcGVyc2lzdGVudCB1c2Ugb2YgaW50ZXJy dXB0cy4KPiAKPiAtIFdlIG9ubHkgZHJpcCBmZWVkIHNpbmdsZSByZXF1ZXN0cyB0aHJvdWdoIGVh Y2ggdmlydHVhbCBlbmdpbmUgYW5kIG9udG8KPiB0aGUgcGh5c2ljYWwgZW5naW5lcywgZXZlbiBp ZiB0aGVyZSB3YXMgZW5vdWdoIHdvcmsgdG8gZmlsbCBhbGwgRUxTUCwKPiBsZWF2aW5nIHNtYWxs IHN0YWxscyB3aXRoIGFuIGlkbGUgQ1MgZXZlbnQgYXQgdGhlIGVuZCBvZiBldmVyeSByZXF1ZXN0 Lgo+IENvdWxkIHdlIGJlIGdyZWVkeSBhbmQgZmlsbCBib3RoIHNsb3RzPyBCZWluZyBsYXp5IGlz IHZpcnR1b3VzIGZvciBsb2FkCj4gZGlzdHJpYnV0aW9uIG9uIGxlc3MtdGhhbi1mdWxsIHdvcmts b2FkcyB0aG91Z2guCj4gCj4gT3RoZXIgYXJlYXMgb2YgaW1wcm92ZW1lbnQgYXJlIG1vcmUgZ2Vu ZXJhbCwgc3VjaCBhcyByZWR1Y2luZyBsb2NrCj4gY29udGVudGlvbiwgcmVkdWNpbmcgZGlzcGF0 Y2ggb3ZlcmhlYWQsIGxvb2tpbmcgYXQgZGlyZWN0IHN1Ym1pc3Npb24KPiByYXRoZXIgdGhhbiBi b3VuY2luZyBhcm91bmQgdGFza2xldHMgZXRjLgo+IAo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdp bHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZy dGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+IC0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW0uaCAgICAgICAgICAgIHwgICA1ICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2NvbnRleHQuYyAgICB8IDE1MyArKysrKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfc2NoZWR1bGVyLmMgICAgICB8ICAxNyArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV90aW1lbGluZV90eXBlcy5oIHwgICAxICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2VuZ2luZV90eXBlcy5oICB8ICAgOCArCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9s cmMuYyAgICAgICAgICAgfCA1MjEgKysrKysrKysrKysrKysrKysrKystCj4gICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9scmMuaCAgICAgICAgICAgfCAgMTEgKwo+ICAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2xyYy5jIHwgMTY1ICsrKysrKysKPiAgIGluY2x1ZGUv dWFwaS9kcm0vaTkxNV9kcm0uaCAgICAgICAgICAgICAgICB8ICAzMCArKwo+ICAgOSBmaWxlcyBj aGFuZ2VkLCA4OTUgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbS5oCj4gaW5kZXggNzRhMmRkYzFiNTJmLi5kYmNlYTZlMjlkNDggMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uaAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtLmgKPiBAQCAtOTEsNCArOTEsOSBAQCBzdGF0aWMgaW5saW5lIGJv b2wgX190YXNrbGV0X2lzX2VuYWJsZWQoY29uc3Qgc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KQo+ ICAgCXJldHVybiAhYXRvbWljX3JlYWQoJnQtPmNvdW50KTsKPiAgIH0KPiAgIAo+ICtzdGF0aWMg aW5saW5lIGJvb2wgX190YXNrbGV0X2lzX3NjaGVkdWxlZChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3Qg KnQpCj4gK3sKPiArCXJldHVybiB0ZXN0X2JpdChUQVNLTEVUX1NUQVRFX1NDSEVELCAmdC0+c3Rh dGUpOwo+ICt9Cj4gKwo+ICAgI2VuZGlmIC8qIF9fSTkxNV9HRU1fSF9fICovCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwo+IGluZGV4IGE1ODFjMDFmZmZmMS4uMTNiNzk5 ODBmN2YzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRl eHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwo+IEBA IC04NiwxMiArODYsMTYgQEAKPiAgICAqLwo+ICAgCj4gICAjaW5jbHVkZSA8bGludXgvbG9nMi5o Pgo+ICsjaW5jbHVkZSA8bGludXgvbm9zcGVjLmg+Cj4gKwo+ICAgI2luY2x1ZGUgPGRybS9pOTE1 X2RybS5oPgo+ICsKPiAgICNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ICAgI2luY2x1ZGUgImk5MTVf Z2xvYmFscy5oIgo+ICAgI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKPiAgICNpbmNsdWRlICJpOTE1 X3VzZXJfZXh0ZW5zaW9ucy5oIgo+ICAgI2luY2x1ZGUgImludGVsX2xyY19yZWcuaCIKPiArI2lu Y2x1ZGUgImludGVsX2xyYy5oIgo+ICAgI2luY2x1ZGUgImludGVsX3dvcmthcm91bmRzLmgiCj4g ICAKPiAgICNkZWZpbmUgQUxMX0wzX1NMSUNFUyhkZXYpICgxIDw8IE5VTV9MM19TTElDRVMoZGV2 KSkgLSAxCj4gQEAgLTIzOCw2ICsyNDIsMjAgQEAgc3RhdGljIHZvaWQgcmVsZWFzZV9od19pZChz dHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+ICAgCW11dGV4X3VubG9jaygmaTkxNS0+Y29u dGV4dHMubXV0ZXgpOwo+ICAgfQo+ICAgCj4gK3N0YXRpYyB2b2lkIGZyZWVfZW5naW5lcyhzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICoqZW5naW5lcywgaW50IGNvdW50KQo+ICt7Cj4gKwlpbnQgaTsK PiArCj4gKwlpZiAoIWVuZ2luZXMpCj4gKwkJcmV0dXJuOwo+ICsKPiArCS8qIFdlIG93biB0aGUg dmVuZyB3ZSBjcmVhdGVkOyByZWd1bGFyIGVuZ2luZXMgYXJlIGlnbm9yZWQgKi8KPiArCWZvciAo aSA9IDA7IGkgPCBjb3VudDsgaSsrKQo+ICsJCWludGVsX3ZpcnR1YWxfZW5naW5lX2Rlc3Ryb3ko ZW5naW5lc1tpXSk7Cj4gKwo+ICsJa2ZyZWUoZW5naW5lcyk7Cj4gK30KPiArCj4gICBzdGF0aWMg dm9pZCBpOTE1X2dlbV9jb250ZXh0X2ZyZWUoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkK PiAgIHsKPiAgIAlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqaXQsICpuOwo+IEBAIC0yNDgsOCArMjY2 LDcgQEAgc3RhdGljIHZvaWQgaTkxNV9nZW1fY29udGV4dF9mcmVlKHN0cnVjdCBpOTE1X2dlbV9j b250ZXh0ICpjdHgpCj4gICAKPiAgIAlyZWxlYXNlX2h3X2lkKGN0eCk7Cj4gICAJaTkxNV9wcGd0 dF9wdXQoY3R4LT5wcGd0dCk7Cj4gLQo+IC0Ja2ZyZWUoY3R4LT5lbmdpbmVzKTsKPiArCWZyZWVf ZW5naW5lcyhjdHgtPmVuZ2luZXMsIGN0eC0+bmVuZ2luZSk7Cj4gICAKPiAgIAlyYnRyZWVfcG9z dG9yZGVyX2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXQsIG4sICZjdHgtPmh3X2NvbnRleHRzLCBub2Rl KQo+ICAgCQlpdC0+b3BzLT5kZXN0cm95KGl0KTsKPiBAQCAtMTM1OSwxMyArMTM3NiwxMTYgQEAg c3RhdGljIGludCBzZXRfc3NldShzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+ICAgCXJl dHVybiAwOwo+ICAgfTsKPiAgIAo+ICtzdGF0aWMgaW50IGNoZWNrX3VzZXJfbWJ6MTYodTE2IF9f dXNlciAqdXNlcikKPiArewo+ICsJdTE2IG1iejsKPiArCj4gKwlpZiAoZ2V0X3VzZXIobWJ6LCB1 c2VyKSkKPiArCQlyZXR1cm4gLUVGQVVMVDsKPiArCj4gKwlyZXR1cm4gbWJ6ID8gLUVJTlZBTCA6 IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgY2hlY2tfdXNlcl9tYnozMih1MzIgX191c2VyICp1 c2VyKQo+ICt7Cj4gKwl1MzIgbWJ6Owo+ICsKPiArCWlmIChnZXRfdXNlcihtYnosIHVzZXIpKQo+ ICsJCXJldHVybiAtRUZBVUxUOwo+ICsKPiArCXJldHVybiBtYnogPyAtRUlOVkFMIDogMDsKPiAr fQo+ICsKPiArc3RhdGljIGludCBjaGVja191c2VyX21iejY0KHU2NCBfX3VzZXIgKnVzZXIpCj4g K3sKPiArCXU2NCBtYno7Cj4gKwo+ICsJaWYgKGdldF91c2VyKG1ieiwgdXNlcikpCj4gKwkJcmV0 dXJuIC1FRkFVTFQ7Cj4gKwo+ICsJcmV0dXJuIG1ieiA/IC1FSU5WQUwgOiAwOwo+ICt9CgpDb3Vs ZCBnZW5lcmF0ZSB0aGUgdGhyZWUgd2l0aCBhIG1hY3JvIGJ1dCBpdCB3b3VsZCBiZSBtYXJnaW5h bCAKaW1wcm92ZW1lbnQgaWYgYW55LgoKPiArCj4gICBzdHJ1Y3Qgc2V0X2VuZ2luZXMgewo+ICAg CXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHg7Cj4gICAJc3RydWN0IGludGVsX2VuZ2luZV9j cyAqKmVuZ2luZXM7Cj4gICAJdW5zaWduZWQgaW50IG5lbmdpbmU7Cj4gICB9Owo+ICAgCj4gK3N0 YXRpYyBpbnQKPiArc2V0X2VuZ2luZXNfX2xvYWRfYmFsYW5jZShzdHJ1Y3QgaTkxNV91c2VyX2V4 dGVuc2lvbiBfX3VzZXIgKmJhc2UsIHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0cnVjdCBpOTE1X2Nv bnRleHRfZW5naW5lc19sb2FkX2JhbGFuY2UgX191c2VyICpleHQgPQo+ICsJCWNvbnRhaW5lcl9v Zl91c2VyKGJhc2UsIHR5cGVvZigqZXh0KSwgYmFzZSk7Cj4gKwljb25zdCBzdHJ1Y3Qgc2V0X2Vu Z2luZXMgKnNldCA9IGRhdGE7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICp2ZTsKPiArCXVu c2lnbmVkIGludCBuOwo+ICsJdTY0IG1hc2s7Cj4gKwl1MTYgaWR4Owo+ICsJaW50IGVycjsKPiAr Cj4gKwlpZiAoIUhBU19FWEVDTElTVFMoc2V0LT5jdHgtPmk5MTUpKQo+ICsJCXJldHVybiAtRU5P REVWOwo+ICsKPiArCWlmIChVU0VTX0dVQ19TVUJNSVNTSU9OKHNldC0+Y3R4LT5pOTE1KSkKPiAr CQlyZXR1cm4gLUVOT0RFVjsgLyogbm90IGltcGxlbWVudCB5ZXQgKi8KPiArCj4gKwlpZiAoZ2V0 X3VzZXIoaWR4LCAmZXh0LT5lbmdpbmVfaW5kZXgpKQo+ICsJCXJldHVybiAtRUZBVUxUOwo+ICsK PiArCWlmIChpZHggPj0gc2V0LT5uZW5naW5lKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiAr CWlkeCA9IGFycmF5X2luZGV4X25vc3BlYyhpZHgsIHNldC0+bmVuZ2luZSk7Cj4gKwlpZiAoc2V0 LT5lbmdpbmVzW2lkeF0pCj4gKwkJcmV0dXJuIC1FRVhJU1Q7Cj4gKwo+ICsJZXJyID0gY2hlY2tf dXNlcl9tYnoxNigmZXh0LT5tYnoxNik7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4g Kwo+ICsJZXJyID0gY2hlY2tfdXNlcl9tYnozMigmZXh0LT5mbGFncyk7Cj4gKwlpZiAoZXJyKQo+ ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJZm9yIChuID0gMDsgbiA8IEFSUkFZX1NJWkUoZXh0LT5t Yno2NCk7IG4rKykgewo+ICsJCWVyciA9IGNoZWNrX3VzZXJfbWJ6NjQoJmV4dC0+bWJ6NjRbbl0p Owo+ICsJCWlmIChlcnIpCj4gKwkJCXJldHVybiBlcnI7Cj4gKwl9Cj4gKwo+ICsJaWYgKGdldF91 c2VyKG1hc2ssICZleHQtPmVuZ2luZXNfbWFzaykpCj4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4gKwo+ ICsJbWFzayAmPSBHRU5NQVNLX1VMTChzZXQtPm5lbmdpbmUgLSAxLCAwKSAmIH5CSVRfVUxMKGlk eCk7Cj4gKwlpZiAoIW1hc2spCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJaWYgKGlzX3Bv d2VyX29mXzIobWFzaykpIHsKPiArCQl2ZSA9IHNldC0+ZW5naW5lc1tfX2ZmczY0KG1hc2spXTsK PiArCX0gZWxzZSB7Cj4gKwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc3RhY2tbNjRdOwo+ICsJ CWludCBiaXQ7Cj4gKwo+ICsJCW4gPSAwOwo+ICsJCWZvcl9lYWNoX3NldF9iaXQoYml0LCAodW5z aWduZWQgbG9uZyAqKSZtYXNrLCBzZXQtPm5lbmdpbmUpCj4gKwkJCXN0YWNrW24rK10gPSBzZXQt PmVuZ2luZXNbYml0XTsKPiArCj4gKwkJdmUgPSBpbnRlbF9leGVjbGlzdHNfY3JlYXRlX3ZpcnR1 YWwoc2V0LT5jdHgsIHN0YWNrLCBuKTsKPiArCX0KPiArCWlmIChJU19FUlIodmUpKQo+ICsJCXJl dHVybiBQVFJfRVJSKHZlKTsKPiArCj4gKwlpZiAoY21weGNoZygmc2V0LT5lbmdpbmVzW2lkeF0s IE5VTEwsIHZlKSkgewo+ICsJCWludGVsX3ZpcnR1YWxfZW5naW5lX2Rlc3Ryb3kodmUpOwo+ICsJ CXJldHVybiAtRUVYSVNUOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICAgc3Rh dGljIGNvbnN0IGk5MTVfdXNlcl9leHRlbnNpb25fZm4gc2V0X2VuZ2luZXNfX2V4dGVuc2lvbnNb XSA9IHsKPiArCVtJOTE1X0NPTlRFWFRfRU5HSU5FU19FWFRfTE9BRF9CQUxBTkNFXSA9IHNldF9l bmdpbmVzX19sb2FkX2JhbGFuY2UsCj4gICB9Owo+ICAgCj4gICBzdGF0aWMgaW50Cj4gQEAgLTE0 MjYsMTMgKzE1NDYsMTMgQEAgc2V0X2VuZ2luZXMoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0 eCwKPiAgIAkJCQkJICAgQVJSQVlfU0laRShzZXRfZW5naW5lc19fZXh0ZW5zaW9ucyksCj4gICAJ CQkJCSAgICZzZXQpOwo+ICAgCWlmIChlcnIpIHsKPiAtCQlrZnJlZShzZXQuZW5naW5lcyk7Cj4g KwkJZnJlZV9lbmdpbmVzKHNldC5lbmdpbmVzLCBzZXQubmVuZ2luZSk7Cj4gICAJCXJldHVybiBl cnI7Cj4gICAJfQo+ICAgCj4gICBvdXQ6Cj4gICAJbXV0ZXhfbG9jaygmY3R4LT5pOTE1LT5kcm0u c3RydWN0X211dGV4KTsKPiAtCWtmcmVlKGN0eC0+ZW5naW5lcyk7Cj4gKwlmcmVlX2VuZ2luZXMo Y3R4LT5lbmdpbmVzLCBjdHgtPm5lbmdpbmUpOwo+ICAgCWN0eC0+ZW5naW5lcyA9IHNldC5lbmdp bmVzOwo+ICAgCWN0eC0+bmVuZ2luZSA9IHNldC5uZW5naW5lOwo+ICAgCW11dGV4X3VubG9jaygm Y3R4LT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiBAQCAtMTYzNyw2ICsxNzU3LDcgQEAgc3Rh dGljIGludCBjbG9uZV9lbmdpbmVzKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpkc3QsCj4gICAJ CQkgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKnNyYykKPiAgIHsKPiAgIAlzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICoqZW5naW5lczsKPiArCWludCBpOwo+ICAgCj4gICAJZW5naW5lcyA9IGttZW1k dXAoc3JjLT5lbmdpbmVzLAo+ICAgCQkJICBzaXplb2YoKnNyYy0+ZW5naW5lcykgKiBzcmMtPm5l bmdpbmUsCj4gQEAgLTE2NDQsNiArMTc2NSwzMCBAQCBzdGF0aWMgaW50IGNsb25lX2VuZ2luZXMo c3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmRzdCwKPiAgIAlpZiAoIWVuZ2luZXMpCj4gICAJCXJl dHVybiAtRU5PTUVNOwo+ICAgCj4gKwkvKgo+ICsJICogVmlydHVhbCBlbmdpbmVzIGFyZSBzaW5n bGV0b25zOyB0aGV5IGNhbiBvbmx5IGV4aXN0Cj4gKwkgKiBpbnNpZGUgYSBzaW5nbGUgY29udGV4 dCwgYmVjYXVzZSB0aGV5IGVtYmVkIHRoZWlyCj4gKwkgKiBIVyBjb250ZXh0Li4uIEFzIGVhY2gg dmlydHVhbCBjb250ZXh0IGltcGxpZXMgYSBzaW5nbGUKPiArCSAqIHRpbWVsaW5lIChlYWNoIGVu Z2luZSBjYW4gb25seSBkZXF1ZXVlIGEgc2luZ2xlIHJlcXVlc3QKPiArCSAqIGF0IGFueSB0aW1l KSwgaXQgd291bGQgYmUgc3VycHJpc2luZyBmb3IgdHdvIGNvbnRleHRzCj4gKwkgKiB0byB1c2Ug dGhlIHNhbWUgZW5naW5lLiBTbyBsZXQncyBjcmVhdGUgYSBjb3B5IG9mCj4gKwkgKiB0aGUgdmly dHVhbCBlbmdpbmUgaW5zdGVhZC4KPiArCSAqLwo+ICsJZm9yIChpID0gMDsgaSA8IHNyYy0+bmVu Z2luZTsgaSsrKSB7Cj4gKwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gZW5naW5l c1tpXTsKPiArCj4gKwkJaWYgKCFpbnRlbF9lbmdpbmVfaXNfdmlydHVhbChlbmdpbmUpKQo+ICsJ CQljb250aW51ZTsKPiArCj4gKwkJZW5naW5lID0gaW50ZWxfZXhlY2xpc3RzX2Nsb25lX3ZpcnR1 YWwoZHN0LCBlbmdpbmUpOwo+ICsJCWlmIChJU19FUlIoZW5naW5lKSkgewo+ICsJCQlmcmVlX2Vu Z2luZXMoZW5naW5lcywgaSk7Cj4gKwkJCXJldHVybiBQVFJfRVJSKGVuZ2luZSk7Cj4gKwkJfQo+ ICsKPiArCQllbmdpbmVzW2ldID0gZW5naW5lOwo+ICsJfQo+ICsKPiAgIAlkc3QtPmVuZ2luZXMg PSBlbmdpbmVzOwo+ICAgCWRzdC0+bmVuZ2luZSA9IHNyYy0+bmVuZ2luZTsKPiAgIAlyZXR1cm4g MDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMKPiBpbmRleCBlMGY2MDlkMDE1 NjQuLmJiOTgxOWRiZTMxMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3NjaGVkdWxlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIu Ywo+IEBAIC0yNDcsMTcgKzI0NywyNSBAQCBzY2hlZF9sb2NrX2VuZ2luZShjb25zdCBzdHJ1Y3Qg aTkxNV9zY2hlZF9ub2RlICpub2RlLAo+ICAgCQkgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmxv Y2tlZCwKPiAgIAkJICBzdHJ1Y3Qgc2NoZWRfY2FjaGUgKmNhY2hlKQo+ICAgewo+IC0Jc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gbm9kZV90b19yZXF1ZXN0KG5vZGUpLT5lbmdpbmU7 Cj4gKwljb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSA9IG5vZGVfdG9fcmVxdWVzdChub2Rl KTsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAgIAo+ICAgCUdFTV9CVUdf T04oIWxvY2tlZCk7Cj4gICAKPiAtCWlmIChlbmdpbmUgIT0gbG9ja2VkKSB7Cj4gKwkvKgo+ICsJ ICogVmlydHVhbCBlbmdpbmVzIGNvbXBsaWNhdGUgYWNxdWlyaW5nIHRoZSBlbmdpbmUgdGltZWxp bmUgbG9jaywKPiArCSAqIGFzIHRoZWlyIHJxLT5lbmdpbmUgcG9pbnRlciBpcyBub3Qgc3RhYmxl IHVudGlsIHVuZGVyIHRoYXQKPiArCSAqIGVuZ2luZSBsb2NrLiBUaGUgc2ltcGxlIHBsb3kgd2Ug dXNlIGlzIHRvIHRha2UgdGhlIGxvY2sgdGhlbgo+ICsJICogY2hlY2sgdGhhdCB0aGUgcnEgc3Rp bGwgYmVsb25ncyB0byB0aGUgbmV3bHkgbG9ja2VkIGVuZ2luZS4KPiArCSAqLwo+ICsJd2hpbGUg KGxvY2tlZCAhPSAoZW5naW5lID0gUkVBRF9PTkNFKHJxLT5lbmdpbmUpKSkgewo+ICAgCQlzcGlu X3VubG9jaygmbG9ja2VkLT50aW1lbGluZS5sb2NrKTsKPiAgIAkJbWVtc2V0KGNhY2hlLCAwLCBz aXplb2YoKmNhY2hlKSk7Cj4gICAJCXNwaW5fbG9jaygmZW5naW5lLT50aW1lbGluZS5sb2NrKTsK PiArCQlsb2NrZWQgPSBlbmdpbmU7Cj4gICAJfQo+ICAgCj4gLQlyZXR1cm4gZW5naW5lOwo+ICsJ cmV0dXJuIGxvY2tlZDsKCmVuZ2luZSA9PSBsb2NrZWQgYXQgdGhpcyBwb2ludCwgcmlnaHQ/Cgo+ ICAgfQo+ICAgCj4gICBzdGF0aWMgYm9vbCBpbmZsaWdodChjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpycSwKPiBAQCAtMzcwLDggKzM3OCwxMSBAQCBzdGF0aWMgdm9pZCBfX2k5MTVfc2NoZWR1 bGUoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4gICAJCWlmIChwcmlvIDw9IG5vZGUtPmF0dHIu cHJpb3JpdHkgfHwgbm9kZV9zaWduYWxlZChub2RlKSkKPiAgIAkJCWNvbnRpbnVlOwo+ICAgCj4g KwkJR0VNX0JVR19PTihub2RlX3RvX3JlcXVlc3Qobm9kZSktPmVuZ2luZSAhPSBlbmdpbmUpOwo+ ICsKPiAgIAkJbm9kZS0+YXR0ci5wcmlvcml0eSA9IHByaW87Cj4gICAJCWlmICghbGlzdF9lbXB0 eSgmbm9kZS0+bGluaykpIHsKPiArCQkJR0VNX0JVR19PTihpbnRlbF9lbmdpbmVfaXNfdmlydHVh bChlbmdpbmUpKTsKPiAgIAkJCWlmICghY2FjaGUucHJpb2xpc3QpCj4gICAJCQkJY2FjaGUucHJp b2xpc3QgPQo+ICAgCQkJCQlpOTE1X3NjaGVkX2xvb2t1cF9wcmlvbGlzdChlbmdpbmUsCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdGltZWxpbmVfdHlwZXMuaCBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdGltZWxpbmVfdHlwZXMuaAo+IGluZGV4IDhmZjE0NmRj MDViYS4uNWU0NDVmMTQ1ZWIxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfdGltZWxpbmVfdHlwZXMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdGlt ZWxpbmVfdHlwZXMuaAo+IEBAIC0yNSw2ICsyNSw3IEBAIHN0cnVjdCBpOTE1X3RpbWVsaW5lIHsK PiAgIAlzcGlubG9ja190IGxvY2s7Cj4gICAjZGVmaW5lIFRJTUVMSU5FX0NMSUVOVCAwIC8qIGRl ZmF1bHQgc3ViY2xhc3MgKi8KPiAgICNkZWZpbmUgVElNRUxJTkVfRU5HSU5FIDEKPiArI2RlZmlu ZSBUSU1FTElORV9WSVJUVUFMIDIKPiAgIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7IC8qIHByb3RlY3Rz IHRoZSBmbG93IG9mIHJlcXVlc3RzICovCj4gICAKPiAgIAl1bnNpZ25lZCBpbnQgcGluX2NvdW50 Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfdHlwZXMu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV90eXBlcy5oCj4gaW5kZXggYjBh YTFmMGQ0ZTQ3Li5kNTRkMmExODQwY2MgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZW5naW5lX3R5cGVzLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9lbmdpbmVfdHlwZXMuaAo+IEBAIC0yMTYsNiArMjE2LDcgQEAgc3RydWN0IGludGVsX2VuZ2lu ZV9leGVjbGlzdHMgewo+ICAgCSAqIEBxdWV1ZTogcXVldWUgb2YgcmVxdWVzdHMsIGluIHByaW9y aXR5IGxpc3RzCj4gICAJICovCj4gICAJc3RydWN0IHJiX3Jvb3RfY2FjaGVkIHF1ZXVlOwo+ICsJ c3RydWN0IHJiX3Jvb3RfY2FjaGVkIHZpcnR1YWw7Cj4gICAKPiAgIAkvKioKPiAgIAkgKiBAY3Ni X3dyaXRlOiBjb250cm9sIHJlZ2lzdGVyIGZvciBDb250ZXh0IFN3aXRjaCBidWZmZXIKPiBAQCAt NDIxLDYgKzQyMiw3IEBAIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mgewo+ICAgI2RlZmluZSBJOTE1 X0VOR0lORV9TVVBQT1JUU19TVEFUUyAgIEJJVCgxKQo+ICAgI2RlZmluZSBJOTE1X0VOR0lORV9I QVNfUFJFRU1QVElPTiAgIEJJVCgyKQo+ICAgI2RlZmluZSBJOTE1X0VOR0lORV9IQVNfU0VNQVBI T1JFUyAgIEJJVCgzKQo+ICsjZGVmaW5lIEk5MTVfRU5HSU5FX0lTX1ZJUlRVQUwgICAgICAgQklU KDQpCj4gICAJdW5zaWduZWQgaW50IGZsYWdzOwo+ICAgCj4gICAJLyoKPiBAQCAtNTA0LDYgKzUw NiwxMiBAQCBpbnRlbF9lbmdpbmVfaGFzX3NlbWFwaG9yZXMoY29uc3Qgc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQo+ICAgCXJldHVybiBlbmdpbmUtPmZsYWdzICYgSTkxNV9FTkdJTkVf SEFTX1NFTUFQSE9SRVM7Cj4gICB9Cj4gICAKPiArc3RhdGljIGlubGluZSBib29sCj4gK2ludGVs X2VuZ2luZV9pc192aXJ0dWFsKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK PiArewo+ICsJcmV0dXJuIGVuZ2luZS0+ZmxhZ3MgJiBJOTE1X0VOR0lORV9JU19WSVJUVUFMOwo+ ICt9Cj4gKwo+ICAgI2RlZmluZSBpbnN0ZG9uZV9zbGljZV9tYXNrKGRldl9wcml2X18pIFwKPiAg IAkoSVNfR0VOKGRldl9wcml2X18sIDcpID8gXAo+ICAgCSAxIDogUlVOVElNRV9JTkZPKGRldl9w cml2X18pLT5zc2V1LnNsaWNlX21hc2spCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2xyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiBpbmRl eCA3YjkzOGVhZmY5YzUuLjBjOTdlOGYzMDIyMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9scmMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xy Yy5jCj4gQEAgLTE2Niw2ICsxNjYsMjggQEAKPiAgIAo+ICAgI2RlZmluZSBBQ1RJVkVfUFJJT1JJ VFkgKEk5MTVfUFJJT1JJVFlfTkVXQ0xJRU5UIHwgSTkxNV9QUklPUklUWV9OT1NFTUFQSE9SRSkK PiAgIAo+ICtzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgewo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9j cyBiYXNlOwo+ICsKPiArCXN0cnVjdCBpbnRlbF9jb250ZXh0IGNvbnRleHQ7Cj4gKwlzdHJ1Y3Qg a3JlZiBrcmVmOwo+ICsJc3RydWN0IHJjdV9oZWFkIHJjdTsKPiArCj4gKwlzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpyZXF1ZXN0Owo+ICsJc3RydWN0IHZlX25vZGUgewo+ICsJCXN0cnVjdCByYl9ub2Rl IHJiOwo+ICsJCWludCBwcmlvOwo+ICsJfSBub2Rlc1tJOTE1X05VTV9FTkdJTkVTXTsKClBsZWFz ZSBjb21tZW50IHRoZSBmaWVsZHMgYXQgbGlzdCBpbiB0aGUgYWJvdmUgYmxvY2suCgo+ICsKPiAr CXVuc2lnbmVkIGludCBjb3VudDsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNpYmxpbmdz WzBdOwo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqdG9fdmlydHVh bF9lbmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlyZXR1cm4g Y29udGFpbmVyX29mKGVuZ2luZSwgc3RydWN0IHZpcnR1YWxfZW5naW5lLCBiYXNlKTsKPiArfQo+ ICsKPiAgIHN0YXRpYyBpbnQgZXhlY2xpc3RzX2NvbnRleHRfZGVmZXJyZWRfYWxsb2Moc3RydWN0 IGludGVsX2NvbnRleHQgKmNlLAo+ICAgCQkJCQkgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKTsKPiAgIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19pbml0X3JlZ19zdGF0ZSh1MzIgKnJl Z19zdGF0ZSwKPiBAQCAtMjM1LDcgKzI1Nyw4IEBAIHN0YXRpYyBpbnQgcXVldWVfcHJpbyhjb25z dCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZXhlY2xpc3RzKQo+ICAgfQo+ICAgCj4g ICBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9wcmVlbXB0KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwKPiAtCQkJCWNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ICsJ CQkJY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4gKwkJCQlzdHJ1Y3QgcmJfbm9kZSAq cmIpCj4gICB7Cj4gICAJaW50IGxhc3RfcHJpbzsKPiAgIAo+IEBAIC0yNzAsNiArMjkzLDIyIEBA IHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX3ByZWVtcHQoY29uc3Qgc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLAo+ICAgCSAgICBycV9wcmlvKGxpc3RfbmV4dF9lbnRyeShycSwgbGluaykp ID4gbGFzdF9wcmlvKQo+ICAgCQlyZXR1cm4gdHJ1ZTsKPiAgIAo+ICsJaWYgKHJiKSB7IC8qIFhY WCB2aXJ0dWFsIHByZWNlZGVuY2UgKi8KPiArCQlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0K PiArCQkJcmJfZW50cnkocmIsIHR5cGVvZigqdmUpLCBub2Rlc1tlbmdpbmUtPmlkXS5yYik7Cj4g KwkJYm9vbCBwcmVlbXB0ID0gZmFsc2U7Cj4gKwo+ICsJCWlmIChlbmdpbmUgPT0gdmUtPnNpYmxp bmdzWzBdKSB7IC8qIG9ubHkgcHJlZW1wdCBvbmUgc2libGluZyAqLwoKV2h5IGFsd2F5cyBzaWJs aW5nc1swXSA/Cgo+ICsJCQlzcGluX2xvY2soJnZlLT5iYXNlLnRpbWVsaW5lLmxvY2spOwo+ICsJ CQlpZiAodmUtPnJlcXVlc3QpCj4gKwkJCQlwcmVlbXB0ID0gcnFfcHJpbyh2ZS0+cmVxdWVzdCkg PiBsYXN0X3ByaW87Cj4gKwkJCXNwaW5fdW5sb2NrKCZ2ZS0+YmFzZS50aW1lbGluZS5sb2NrKTsK PiArCQl9Cj4gKwo+ICsJCWlmIChwcmVlbXB0KQo+ICsJCQlyZXR1cm4gcHJlZW1wdDsKPiArCX0K PiArCj4gICAJLyoKPiAgIAkgKiBJZiB0aGUgaW5mbGlnaHQgY29udGV4dCBkaWQgbm90IHRyaWdn ZXIgdGhlIHByZWVtcHRpb24sIHRoZW4gbWF5YmUKPiAgIAkgKiBpdCB3YXMgdGhlIHNldCBvZiBx dWV1ZWQgcmVxdWVzdHM/IFBpY2sgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgaW4KPiBAQCAtMzg4LDYg KzQyNyw4IEBAIF9fdW53aW5kX2luY29tcGxldGVfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQo+ICAgCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKHJxLCBy biwKPiAgIAkJCQkJICZlbmdpbmUtPnRpbWVsaW5lLnJlcXVlc3RzLAo+ICAgCQkJCQkgbGluaykg ewo+ICsJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKm93bmVyOwo+ICsKPiAgIAkJaWYgKGk5MTVf cmVxdWVzdF9jb21wbGV0ZWQocnEpKQo+ICAgCQkJYnJlYWs7Cj4gICAKPiBAQCAtMzk2LDE0ICs0 MzcsMjMgQEAgX191bndpbmRfaW5jb21wbGV0ZV9yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4gICAKPiAgIAkJR0VNX0JVR19PTihycS0+aHdfY29udGV4dC0+YWN0aXZl KTsKPiAgIAo+IC0JCUdFTV9CVUdfT04ocnFfcHJpbyhycSkgPT0gSTkxNV9QUklPUklUWV9JTlZB TElEKTsKPiAtCQlpZiAocnFfcHJpbyhycSkgIT0gcHJpbykgewo+IC0JCQlwcmlvID0gcnFfcHJp byhycSk7Cj4gLQkJCXBsID0gaTkxNV9zY2hlZF9sb29rdXBfcHJpb2xpc3QoZW5naW5lLCBwcmlv KTsKPiAtCQl9Cj4gLQkJR0VNX0JVR19PTihSQl9FTVBUWV9ST09UKCZlbmdpbmUtPmV4ZWNsaXN0 cy5xdWV1ZS5yYl9yb290KSk7Cj4gKwkJb3duZXIgPSBycS0+aHdfY29udGV4dC0+ZW5naW5lOwo+ ICsJCWlmIChsaWtlbHkob3duZXIgPT0gZW5naW5lKSkgewo+ICsJCQlHRU1fQlVHX09OKHJxX3By aW8ocnEpID09IEk5MTVfUFJJT1JJVFlfSU5WQUxJRCk7Cj4gKwkJCWlmIChycV9wcmlvKHJxKSAh PSBwcmlvKSB7Cj4gKwkJCQlwcmlvID0gcnFfcHJpbyhycSk7Cj4gKwkJCQlwbCA9IGk5MTVfc2No ZWRfbG9va3VwX3ByaW9saXN0KGVuZ2luZSwgcHJpbyk7Cj4gKwkJCX0KPiArCQkJR0VNX0JVR19P TihSQl9FTVBUWV9ST09UKCZlbmdpbmUtPmV4ZWNsaXN0cy5xdWV1ZS5yYl9yb290KSk7Cj4gKwo+ ICsJCQlsaXN0X2FkZCgmcnEtPnNjaGVkLmxpbmssIHBsKTsKPiArCQl9IGVsc2Ugewo+ICsJCQlp ZiAoX19pOTE1X3JlcXVlc3RfaGFzX3N0YXJ0ZWQocnEpKQo+ICsJCQkJcnEtPnNjaGVkLmF0dHIu cHJpb3JpdHkgfD0gQUNUSVZFX1BSSU9SSVRZOwo+ICAgCj4gLQkJbGlzdF9hZGQoJnJxLT5zY2hl ZC5saW5rLCBwbCk7Cj4gKwkJCXJxLT5lbmdpbmUgPSBvd25lcjsKPiArCQkJb3duZXItPnN1Ym1p dF9yZXF1ZXN0KHJxKTsKPiArCQl9CgpXaGF0J3MgaGFwcGVuaW5nIGhlcmUgLSBwdXQgc29tZSBj b21tZW50IGluIHBsZWFzZS4KCj4gICAKPiAgIAkJYWN0aXZlID0gcnE7Cj4gICAJfQo+IEBAIC02 NjUsNiArNzE1LDUwIEBAIHN0YXRpYyB2b2lkIGNvbXBsZXRlX3ByZWVtcHRfY29udGV4dChzdHJ1 Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZXhlY2xpc3RzKQo+ICAgCQkJCQkJICBleGVjbGlz dHMpKTsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgdm9pZCB2aXJ0dWFsX3VwZGF0ZV9yZWdpc3Rlcl9v ZmZzZXRzKHUzMiAqcmVncywKPiArCQkJCQkgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQo+ICt7Cj4gKwl1MzIgYmFzZSA9IGVuZ2luZS0+bW1pb19iYXNlOwo+ICsKPiArCXJlZ3Nb Q1RYX0NPTlRFWFRfQ09OVFJPTF0gPQo+ICsJCWk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfQ09O VEVYVF9DT05UUk9MKGVuZ2luZSkpOwo+ICsJcmVnc1tDVFhfUklOR19IRUFEXSA9IGk5MTVfbW1p b19yZWdfb2Zmc2V0KFJJTkdfSEVBRChiYXNlKSk7Cj4gKwlyZWdzW0NUWF9SSU5HX1RBSUxdID0g aTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19UQUlMKGJhc2UpKTsKPiArCXJlZ3NbQ1RYX1JJTkdf QlVGRkVSX1NUQVJUXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfU1RBUlQoYmFzZSkpOwo+ ICsJcmVnc1tDVFhfUklOR19CVUZGRVJfQ09OVFJPTF0gPSBpOTE1X21taW9fcmVnX29mZnNldChS SU5HX0NUTChiYXNlKSk7Cj4gKwo+ICsJcmVnc1tDVFhfQkJfSEVBRF9VXSA9IGk5MTVfbW1pb19y ZWdfb2Zmc2V0KFJJTkdfQkJBRERSX1VEVyhiYXNlKSk7Cj4gKwlyZWdzW0NUWF9CQl9IRUFEX0xd ID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19CQkFERFIoYmFzZSkpOwo+ICsJcmVnc1tDVFhf QkJfU1RBVEVdID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19CQlNUQVRFKGJhc2UpKTsKPiAr CXJlZ3NbQ1RYX1NFQ09ORF9CQl9IRUFEX1VdID0KPiArCQlpOTE1X21taW9fcmVnX29mZnNldChS SU5HX1NCQkFERFJfVURXKGJhc2UpKTsKPiArCXJlZ3NbQ1RYX1NFQ09ORF9CQl9IRUFEX0xdID0g aTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19TQkJBRERSKGJhc2UpKTsKPiArCXJlZ3NbQ1RYX1NF Q09ORF9CQl9TVEFURV0gPSBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX1NCQlNUQVRFKGJhc2Up KTsKPiArCj4gKwlyZWdzW0NUWF9DVFhfVElNRVNUQU1QXSA9Cj4gKwkJaTkxNV9tbWlvX3JlZ19v ZmZzZXQoUklOR19DVFhfVElNRVNUQU1QKGJhc2UpKTsKPiArCXJlZ3NbQ1RYX1BEUDNfVURXXSA9 IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfUklOR19QRFBfVURXKGVuZ2luZSwgMykpOwo+ICsJ cmVnc1tDVFhfUERQM19MRFddID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9M RFcoZW5naW5lLCAzKSk7Cj4gKwlyZWdzW0NUWF9QRFAyX1VEV10gPSBpOTE1X21taW9fcmVnX29m ZnNldChHRU44X1JJTkdfUERQX1VEVyhlbmdpbmUsIDIpKTsKPiArCXJlZ3NbQ1RYX1BEUDJfTERX XSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfUklOR19QRFBfTERXKGVuZ2luZSwgMikpOwo+ ICsJcmVnc1tDVFhfUERQMV9VRFddID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BE UF9VRFcoZW5naW5lLCAxKSk7Cj4gKwlyZWdzW0NUWF9QRFAxX0xEV10gPSBpOTE1X21taW9fcmVn X29mZnNldChHRU44X1JJTkdfUERQX0xEVyhlbmdpbmUsIDEpKTsKPiArCXJlZ3NbQ1RYX1BEUDBf VURXXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfUklOR19QRFBfVURXKGVuZ2luZSwgMCkp Owo+ICsJcmVnc1tDVFhfUERQMF9MRFddID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5H X1BEUF9MRFcoZW5naW5lLCAwKSk7Cj4gKwo+ICsJaWYgKGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVS X0NMQVNTKSB7Cj4gKwkJcmVnc1tDVFhfUkNTX0lORElSRUNUX0NUWF0gPQo+ICsJCQlpOTE1X21t aW9fcmVnX29mZnNldChSSU5HX0lORElSRUNUX0NUWChiYXNlKSk7Cj4gKwkJcmVnc1tDVFhfUkNT X0lORElSRUNUX0NUWF9PRkZTRVRdID0KPiArCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19J TkRJUkVDVF9DVFhfT0ZGU0VUKGJhc2UpKTsKPiArCQlyZWdzW0NUWF9CQl9QRVJfQ1RYX1BUUl0g PQo+ICsJCQlpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0JCX1BFUl9DVFhfUFRSKGJhc2UpKTsK PiArCj4gKwkJcmVnc1tDVFhfUl9QV1JfQ0xLX1NUQVRFXSA9Cj4gKwkJCWk5MTVfbW1pb19yZWdf b2Zmc2V0KEdFTjhfUl9QV1JfQ0xLX1NUQVRFKTsKPiArCX0KPiArfQo+ICsKPiAgIHN0YXRpYyB2 b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAg IHsKPiAgIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cyA9 ICZlbmdpbmUtPmV4ZWNsaXN0czsKPiBAQCAtNjk3LDYgKzc5MSwyOCBAQCBzdGF0aWMgdm9pZCBl eGVjbGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gICAJICog YW5kIGNvbnRleHQgc3dpdGNoZXMpIHN1Ym1pc3Npb24uCj4gICAJICovCj4gICAKPiArCWZvciAo cmIgPSByYl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0cy0+dmlydHVhbCk7IHJiOyApIHsKPiArCQlz dHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0KPiArCQkJcmJfZW50cnkocmIsIHR5cGVvZigqdmUp LCBub2Rlc1tlbmdpbmUtPmlkXS5yYik7Cj4gKwkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEgPSBS RUFEX09OQ0UodmUtPnJlcXVlc3QpOwo+ICsJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmFjdGl2 ZTsKPiArCj4gKwkJaWYgKCFycSkgewo+ICsJCQlyYl9lcmFzZV9jYWNoZWQocmIsICZleGVjbGlz dHMtPnZpcnR1YWwpOwo+ICsJCQlSQl9DTEVBUl9OT0RFKHJiKTsKPiArCQkJcmIgPSByYl9maXJz dF9jYWNoZWQoJmV4ZWNsaXN0cy0+dmlydHVhbCk7Cj4gKwkJCWNvbnRpbnVlOwo+ICsJCX0KClBy b2JhYmx5IGEgZ29vZCBwbGFjZSB0byBjb21tZW50IGhvdyBlYWNoIHBoeXNpY2FsIGVuZ2luZSBz ZWVzIGFsbCB2ZW5nIApyZXF1ZXN0cyBhbmQgbmVlZHMgdG8gdW5saW5rIGlmIHNvbWVvbmUgZWxz ZSBkZXF1ZXVlZC4KClRoaXMgcmVsaWVzIG9uIHNldHRpbmcgdmUtPnJlcXVlc3QgdG8gTlVMTCBw cm9wYWdhdGluZyB0byBhbGwgQ1BVcyBhcyAKc29vbiBhcyBjbGVhcmVkIEkgdGhpbmsuIEJlY3Vh c2UgYWxsIHRhc2tsZXRzIHdpbGwgYmUgdW5kZXIgZGlmZmVyZW50IAplbmdpbmUtPnRpbWVsaW5l LmxvY2ssIGFuZCB0aGUgY2xlYXIgaXMgdW5kZXIgdGhlIFZFLT50aW1lbGluZS5sb2NrIGJ1dCAK dGhpcyBpc24ndC4KCklmIG9uZSBDUFUgZG9lcyBub3Qgc2VlIHRoZSBjbGVhciwgaXQgd2lsbCBz a2lwIHJlbW92aW5nIHRoZSBlbnRyeSBmcm9tIAp0aGUgcmJ0cmVlLiBCdXQgdGhlbiBpdCB3aWxs IHRha2UgdGhlIFZFLT50aW1lbGluZS5sb2NrIGEgYml0IGRvd24gYW5kIApmaXggdXAuIE9rYXkg SSB0aGluay4KCj4gKwo+ICsJCWFjdGl2ZSA9IFJFQURfT05DRSh2ZS0+Y29udGV4dC5hY3RpdmUp Owo+ICsJCWlmIChhY3RpdmUgJiYgYWN0aXZlICE9IGVuZ2luZSkgewo+ICsJCQlyYiA9IHJiX25l eHQocmIpOwo+ICsJCQljb250aW51ZTsKPiArCQl9CgpXaGF0J3MgaGFwcGVuaW5nIGhlcmUgKGEg Y29tbWVudCBwbGVhc2UpPwoKPiArCj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICAgCWlmIChsYXN0 KSB7Cj4gICAJCS8qCj4gICAJCSAqIERvbid0IHJlc3VibWl0IG9yIHN3aXRjaCB1bnRpbCBhbGwg b3V0c3RhbmRpbmcKPiBAQCAtNzE4LDcgKzgzNCw3IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19k ZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIAkJaWYgKCFleGVjbGlz dHNfaXNfYWN0aXZlKGV4ZWNsaXN0cywgRVhFQ0xJU1RTX0FDVElWRV9IV0FDSykpCj4gICAJCQly ZXR1cm47Cj4gICAKPiAtCQlpZiAobmVlZF9wcmVlbXB0KGVuZ2luZSwgbGFzdCkpIHsKPiArCQlp ZiAobmVlZF9wcmVlbXB0KGVuZ2luZSwgbGFzdCwgcmIpKSB7Cj4gICAJCQlpbmplY3RfcHJlZW1w dF9jb250ZXh0KGVuZ2luZSk7Cj4gICAJCQlyZXR1cm47Cj4gICAJCX0KPiBAQCAtNzU4LDYgKzg3 NCw3MiBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4gICAJCWxhc3QtPnRhaWwgPSBsYXN0LT53YV90YWlsOwo+ICAgCX0KPiAg IAo+ICsJd2hpbGUgKHJiKSB7IC8qIFhYWCB2aXJ0dWFsIGlzIGFsd2F5cyB0YWtpbmcgcHJlY2Vk ZW5jZSAqLwo+ICsJCXN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqdmUgPQo+ICsJCQlyYl9lbnRyeShy YiwgdHlwZW9mKCp2ZSksIG5vZGVzW2VuZ2luZS0+aWRdLnJiKTsKPiArCQlzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpycTsKPiArCj4gKwkJc3Bpbl9sb2NrKCZ2ZS0+YmFzZS50aW1lbGluZS5sb2NrKTsK ClRoaXMgaXMgdW5kZXIgdGhlIHBoeXNpY2FsIGVuZ2luZSB0aW1lbGluZSBsb2NrLCBzbyBpc24n dCBuZXN0ZWQgCmFsbG9jYXRpb24gbmVlZGVkPwoKPiArCj4gKwkJcnEgPSB2ZS0+cmVxdWVzdDsK PiArCQlpZiAodW5saWtlbHkoIXJxKSkgeyAvKiBsb3N0IHRoZSByYWNlIHRvIGEgc2libGluZyAq Lwo+ICsJCQlzcGluX3VubG9jaygmdmUtPmJhc2UudGltZWxpbmUubG9jayk7Cj4gKwkJCXJiX2Vy YXNlX2NhY2hlZChyYiwgJmV4ZWNsaXN0cy0+dmlydHVhbCk7Cj4gKwkJCVJCX0NMRUFSX05PREUo cmIpOwo+ICsJCQlyYiA9IHJiX2ZpcnN0X2NhY2hlZCgmZXhlY2xpc3RzLT52aXJ0dWFsKTsKPiAr CQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQlpZiAocnFfcHJpbyhycSkgPj0gcXVldWVfcHJp byhleGVjbGlzdHMpKSB7Cj4gKwkJCWlmIChsYXN0ICYmICFjYW5fbWVyZ2VfcnEobGFzdCwgcnEp KSB7Cj4gKwkJCQlzcGluX3VubG9jaygmdmUtPmJhc2UudGltZWxpbmUubG9jayk7Cj4gKwkJCQly ZXR1cm47IC8qIGxlYXZlIHRoaXMgcnEgZm9yIGFub3RoZXIgZW5naW5lICovCj4gKwkJCX0KPiAr Cj4gKwkJCUdFTV9CVUdfT04ocnEtPmVuZ2luZSAhPSAmdmUtPmJhc2UpOwo+ICsJCQl2ZS0+cmVx dWVzdCA9IE5VTEw7Cj4gKwkJCXZlLT5iYXNlLmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eV9oaW50 ID0gSU5UX01JTjsKCldoeSBzZXQgdG8gSU5UX01JTj8gQ2FuJ3QgdGhlcmUgYmUgcXVldWVkIHJl cXVlc3RzIGFmdGVyIHRoaXMgb25lPwoKPiArCQkJcmJfZXJhc2VfY2FjaGVkKHJiLCAmZXhlY2xp c3RzLT52aXJ0dWFsKTsKPiArCQkJUkJfQ0xFQVJfTk9ERShyYik7Cj4gKwo+ICsJCQlHRU1fQlVH X09OKHJxLT5od19jb250ZXh0ICE9ICZ2ZS0+Y29udGV4dCk7Cj4gKwkJCXJxLT5lbmdpbmUgPSBl bmdpbmU7Cj4gKwo+ICsJCQlpZiAoZW5naW5lICE9IHZlLT5zaWJsaW5nc1swXSkgewo+ICsJCQkJ dTMyICpyZWdzID0gdmUtPmNvbnRleHQubHJjX3JlZ19zdGF0ZTsKPiArCQkJCXVuc2lnbmVkIGlu dCBuOwo+ICsKPiArCQkJCUdFTV9CVUdfT04oUkVBRF9PTkNFKHZlLT5jb250ZXh0LmFjdGl2ZSkp Owo+ICsJCQkJdmlydHVhbF91cGRhdGVfcmVnaXN0ZXJfb2Zmc2V0cyhyZWdzLCBlbmdpbmUpOwo+ ICsKPiArCQkJCS8qCj4gKwkJCQkgKiBNb3ZlIHRoZSBib3VuZCBlbmdpbmUgdG8gdGhlIHRvcCBv ZiB0aGUgbGlzdAo+ICsJCQkJICogZm9yIGZ1dHVyZSBleGVjdXRpb24uIFdlIHRoZW4ga2ljayB0 aGlzCj4gKwkJCQkgKiB0YXNrbGV0IGZpcnN0IGJlZm9yZSBjaGVja2luZyBvdGhlcnMsIHNvIHRo YXQKPiArCQkJCSAqIHdlIHByZWZlcmVudGlhbGx5IHJldXNlIHRoaXMgc2V0IG9mIGJvdW5kCj4g KwkJCQkgKiByZWdpc3RlcnMuCj4gKwkJCQkgKi8KPiArCQkJCWZvciAobiA9IDE7IG4gPCB2ZS0+ Y291bnQ7IG4rKykgewo+ICsJCQkJCWlmICh2ZS0+c2libGluZ3Nbbl0gPT0gZW5naW5lKSB7Cj4g KwkJCQkJCXN3YXAodmUtPnNpYmxpbmdzW25dLAo+ICsJCQkJCQkgICAgIHZlLT5zaWJsaW5nc1sw XSk7Cj4gKwkJCQkJCWJyZWFrOwo+ICsJCQkJCX0KPiArCQkJCX0KPiArCj4gKwkJCQlHRU1fQlVH X09OKHZlLT5zaWJsaW5nc1swXSAhPSBlbmdpbmUpOwo+ICsJCQl9Cj4gKwo+ICsJCQlfX2k5MTVf cmVxdWVzdF9zdWJtaXQocnEpOwo+ICsJCQl0cmFjZV9pOTE1X3JlcXVlc3RfaW4ocnEsIHBvcnRf aW5kZXgocG9ydCwgZXhlY2xpc3RzKSk7Cj4gKwkJCXN1Ym1pdCA9IHRydWU7Cj4gKwkJCWxhc3Qg PSBycTsKPiArCQl9Cj4gKwo+ICsJCXNwaW5fdW5sb2NrKCZ2ZS0+YmFzZS50aW1lbGluZS5sb2Nr KTsKPiArCQlicmVhazsKPiArCX0KPiArCj4gICAJd2hpbGUgKChyYiA9IHJiX2ZpcnN0X2NhY2hl ZCgmZXhlY2xpc3RzLT5xdWV1ZSkpKSB7Cj4gICAJCXN0cnVjdCBpOTE1X3ByaW9saXN0ICpwID0g dG9fcHJpb2xpc3QocmIpOwo+ICAgCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgKnJuOwo+IEBA IC0yOTA0LDYgKzMwODYsMzA0IEBAIHZvaWQgaW50ZWxfbHJfY29udGV4dF9yZXN1bWUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gICAJfQo+ICAgfQo+ICAgCj4gK3N0YXRpYyB2b2lk IF9fdmlydHVhbF9lbmdpbmVfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKPiArewo+ICsJc3Ry dWN0IHZpcnR1YWxfZW5naW5lICp2ZSA9IGNvbnRhaW5lcl9vZihyY3UsIHR5cGVvZigqdmUpLCBy Y3UpOwo+ICsKPiArCWtmcmVlKHZlKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmlydHVhbF9l bmdpbmVfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKPiArewo+ICsJc3RydWN0IHZpcnR1YWxfZW5n aW5lICp2ZSA9IGNvbnRhaW5lcl9vZihrcmVmLCB0eXBlb2YoKnZlKSwga3JlZik7Cj4gKwl1bnNp Z25lZCBpbnQgbjsKPiArCj4gKwlHRU1fQlVHX09OKHZlLT5yZXF1ZXN0KTsKPiArCUdFTV9CVUdf T04odmUtPmNvbnRleHQuYWN0aXZlKTsKPiArCj4gKwlmb3IgKG4gPSAwOyBuIDwgdmUtPmNvdW50 OyBuKyspIHsKPiArCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzaWJsaW5nID0gdmUtPnNpYmxp bmdzW25dOwo+ICsJCXN0cnVjdCByYl9ub2RlICpub2RlID0gJnZlLT5ub2Rlc1tzaWJsaW5nLT5p ZF0ucmI7Cj4gKwo+ICsJCWlmIChSQl9FTVBUWV9OT0RFKG5vZGUpKQo+ICsJCQljb250aW51ZTsK PiArCj4gKwkJc3Bpbl9sb2NrX2lycSgmc2libGluZy0+dGltZWxpbmUubG9jayk7Cj4gKwo+ICsJ CWlmICghUkJfRU1QVFlfTk9ERShub2RlKSkKPiArCQkJcmJfZXJhc2VfY2FjaGVkKG5vZGUsICZz aWJsaW5nLT5leGVjbGlzdHMudmlydHVhbCk7CgpUaGVyZSBjYW4gb25seSBiZSBvbmUgcXVldWVk IHJlcXVlc3Q/Cgo+ICsKPiArCQlzcGluX3VubG9ja19pcnEoJnNpYmxpbmctPnRpbWVsaW5lLmxv Y2spOwo+ICsJfQo+ICsJR0VNX0JVR19PTihfX3Rhc2tsZXRfaXNfc2NoZWR1bGVkKCZ2ZS0+YmFz ZS5leGVjbGlzdHMudGFza2xldCkpOwoKV2h5IHdvdWxkIHRoaXMgbm90IGZpcmUgc2luY2Ugdmly dHVhbF9lbmdpbmVfZnJlZSBjYW4gZ2V0IGNhbGxlZCBmcm9tIApzZXRfcGFyYW0gYXQgYW55IHRp bWU/Cgo+ICsKPiArCWlmICh2ZS0+Y29udGV4dC5zdGF0ZSkKPiArCQlfX2V4ZWNsaXN0c19jb250 ZXh0X2ZpbmkoJnZlLT5jb250ZXh0KTsKCkFuZCBoZXJlIHdoeSBpdCBjYW4ndCBiZSBpbiB1c2U/ Cgo+ICsKPiArCWk5MTVfdGltZWxpbmVfZmluaSgmdmUtPmJhc2UudGltZWxpbmUpOwo+ICsJY2Fs bF9yY3UoJnZlLT5yY3UsIF9fdmlydHVhbF9lbmdpbmVfZnJlZSk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIHZpcnR1YWxfY29udGV4dF91bnBpbihzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4g K3sKPiArCXN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqdmUgPSBjb250YWluZXJfb2YoY2UsIHR5cGVv ZigqdmUpLCBjb250ZXh0KTsKPiArCj4gKwlleGVjbGlzdHNfY29udGV4dF91bnBpbihjZSk7Cj4g Kwo+ICsJa3JlZl9wdXQoJnZlLT5rcmVmLCB2aXJ0dWFsX2VuZ2luZV9mcmVlKTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgdmlydHVhbF9lbmdpbmVfaW5pdGlhbF9oaW50KHN0cnVjdCB2aXJ0dWFs X2VuZ2luZSAqdmUpCj4gK3sKPiArCWludCBzd3A7Cj4gKwo+ICsJLyoKPiArCSAqIFBpY2sgYSBy YW5kb20gc2libGluZyBvbiBzdGFydGluZyB0byBoZWxwIHNwcmVhZCB0aGUgbG9hZCBhcm91bmQu Cj4gKwkgKgo+ICsJICogTmV3IGNvbnRleHRzIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCB3aXRoIGV4 YWN0bHkgdGhlIHNhbWUgb3JkZXIKPiArCSAqIG9mIHNpYmxpbmdzLCBhbmQgb2Z0ZW4gc3RhcnRl ZCBpbiBiYXRjaGVzLiBEdWUgdG8gdGhlIHdheSB3ZSBpdGVyYXRlCj4gKwkgKiB0aGUgYXJyYXkg b2Ygc2libGluZyB3aGVuIHN1Ym1pdHRpbmcgcmVxdWVzdHMsIHNpYmxpbmdbMF0gaXMKPiArCSAq IHByaW9yaXRpc2VkIGZvciBkZXF1ZXVpbmcuIElmIHdlIG1ha2Ugc3VyZSB0aGF0IHNpYmxpbmdb MF0gaXMgZmFpcmx5Cj4gKwkgKiByYW5kb21pc2VkIGFjcm9zcyB0aGUgc3lzdGVtLCB3ZSBhbHNv IGhlbHAgc3ByZWFkIHRoZSBsb2FkIGJ5IHRoZQo+ICsJICogZmlyc3QgZW5naW5lIHdlIGluc3Bl Y3QgYmVpbmcgZGlmZmVyZW50IGVhY2ggdGltZS4KPiArCSAqCj4gKwkgKiBOQiBUaGlzIGRvZXMg bm90IGZvcmNlIHVzIHRvIGV4ZWN1dGUgb24gdGhpcyBlbmdpbmUsIGl0IHdpbGwganVzdAo+ICsJ ICogdHlwaWNhbGx5IGJlIHRoZSBmaXJzdCB3ZSBpbnNwZWN0IGZvciBzdWJtaXNzaW9uLgo+ICsJ ICovCj4gKwlzd3AgPSBwcmFuZG9tX3UzMl9tYXgodmUtPmNvdW50KTsKPiArCWlmICghc3dwKQo+ ICsJCXJldHVybjsKCldhcyByYW5kb24gYmV0dGVyIHRoYW4gcm91bmQgcm9iaW4/IEFsdGhvdWdo IHllYWgsIGl0IGlzIGxvY2FsIHRvIGVhY2ggCmVuZ2luZSBtYXAgc28gZ2xvYmFsIHJyIG9yIHJh bmRvbSBwaWNrIHdvdWxkIGJlIGEgbW9yZSBjb21wbGljYXRlZCAKaW1wbGVtZW50YXRpb24gYmVz dCBsZWZ0IGZvciBsYXRlciBpZiBuZWVkZWQuCgo+ICsKPiArCXN3YXAodmUtPnNpYmxpbmdzW3N3 cF0sIHZlLT5zaWJsaW5nc1swXSk7Cj4gKwl2aXJ0dWFsX3VwZGF0ZV9yZWdpc3Rlcl9vZmZzZXRz KHZlLT5jb250ZXh0LmxyY19yZWdfc3RhdGUsCj4gKwkJCQkJdmUtPnNpYmxpbmdzWzBdKTsKPiAr fQo+ICsKPiArc3RhdGljIGludCB2aXJ0dWFsX2NvbnRleHRfcGluKHN0cnVjdCBpbnRlbF9jb250 ZXh0ICpjZSkKPiArewo+ICsJc3RydWN0IHZpcnR1YWxfZW5naW5lICp2ZSA9IGNvbnRhaW5lcl9v ZihjZSwgdHlwZW9mKCp2ZSksIGNvbnRleHQpOwo+ICsJaW50IGVycjsKPiArCj4gKwkvKiBOb3Rl OiB3ZSBtdXN0IHVzZSBhIHJlYWwgZW5naW5lIGNsYXNzIGZvciBzZXR0aW5nIHVwIHJlZyBzdGF0 ZSAqLwo+ICsJZXJyID0gX19leGVjbGlzdHNfY29udGV4dF9waW4oY2UsIHZlLT5zaWJsaW5nc1sw XSk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJdmlydHVhbF9lbmdpbmVf aW5pdGlhbF9oaW50KHZlKTsKPiArCj4gKwlrcmVmX2dldCgmdmUtPmtyZWYpOwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfY29udGV4dF9vcHMgdmly dHVhbF9jb250ZXh0X29wcyA9IHsKPiArCS5waW4gPSB2aXJ0dWFsX2NvbnRleHRfcGluLAo+ICsJ LnVucGluID0gdmlydHVhbF9jb250ZXh0X3VucGluLAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQg dmlydHVhbF9zdWJtaXNzaW9uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQo+ICt7Cj4gKwlz dHJ1Y3QgdmlydHVhbF9lbmdpbmUgKiBjb25zdCB2ZSA9IChzdHJ1Y3QgdmlydHVhbF9lbmdpbmUg KilkYXRhOwo+ICsJdW5zaWduZWQgaW50IG47Cj4gKwlpbnQgcHJpbzsKPiArCj4gKwlwcmlvID0g UkVBRF9PTkNFKHZlLT5iYXNlLmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eV9oaW50KTsKPiArCWlm IChwcmlvID09IElOVF9NSU4pCj4gKwkJcmV0dXJuOwo+ICsKPiArCWxvY2FsX2lycV9kaXNhYmxl KCk7Cj4gKwlmb3IgKG4gPSAwOyBSRUFEX09OQ0UodmUtPnJlcXVlc3QpICYmIG4gPCB2ZS0+Y291 bnQ7IG4rKykgewo+ICsJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNpYmxpbmcgPSB2ZS0+c2li bGluZ3Nbbl07Cj4gKwkJc3RydWN0IHZlX25vZGUgKiBjb25zdCBub2RlID0gJnZlLT5ub2Rlc1tz aWJsaW5nLT5pZF07Cj4gKwkJc3RydWN0IHJiX25vZGUgKipwYXJlbnQsICpyYjsKPiArCQlib29s IGZpcnN0Owo+ICsKPiArCQlzcGluX2xvY2soJnNpYmxpbmctPnRpbWVsaW5lLmxvY2spOwo+ICsK PiArCQlpZiAoIVJCX0VNUFRZX05PREUoJm5vZGUtPnJiKSkgewo+ICsJCQlmaXJzdCA9IHJiX2Zp cnN0X2NhY2hlZCgmc2libGluZy0+ZXhlY2xpc3RzLnZpcnR1YWwpID09ICZub2RlLT5yYjsKPiAr CQkJaWYgKHByaW8gPT0gbm9kZS0+cHJpbyB8fCAocHJpbyA+IG5vZGUtPnByaW8gJiYgZmlyc3Qp KQo+ICsJCQkJZ290byBzdWJtaXRfZW5naW5lOwo+ICsKPiArCQkJcmJfZXJhc2VfY2FjaGVkKCZu b2RlLT5yYiwgJnNpYmxpbmctPmV4ZWNsaXN0cy52aXJ0dWFsKTsKPiArCQl9CgpXaGF0IGRvZXMg dGhpcyBibG9jayBkbz8KCj4gKwo+ICsJCXJiID0gTlVMTDsKPiArCQlmaXJzdCA9IHRydWU7Cj4g KwkJcGFyZW50ID0gJnNpYmxpbmctPmV4ZWNsaXN0cy52aXJ0dWFsLnJiX3Jvb3QucmJfbm9kZTsK PiArCQl3aGlsZSAoKnBhcmVudCkgewo+ICsJCQlzdHJ1Y3QgdmVfbm9kZSAqb3RoZXI7Cj4gKwo+ ICsJCQlyYiA9ICpwYXJlbnQ7Cj4gKwkJCW90aGVyID0gcmJfZW50cnkocmIsIHR5cGVvZigqb3Ro ZXIpLCByYik7Cj4gKwkJCWlmIChwcmlvID4gb3RoZXItPnByaW8pIHsKPiArCQkJCXBhcmVudCA9 ICZyYi0+cmJfbGVmdDsKPiArCQkJfSBlbHNlIHsKPiArCQkJCXBhcmVudCA9ICZyYi0+cmJfcmln aHQ7Cj4gKwkJCQlmaXJzdCA9IGZhbHNlOwo+ICsJCQl9Cj4gKwkJfQo+ICsKPiArCQlyYl9saW5r X25vZGUoJm5vZGUtPnJiLCByYiwgcGFyZW50KTsKPiArCQlyYl9pbnNlcnRfY29sb3JfY2FjaGVk KCZub2RlLT5yYiwKPiArCQkJCSAgICAgICAmc2libGluZy0+ZXhlY2xpc3RzLnZpcnR1YWwsCj4g KwkJCQkgICAgICAgZmlyc3QpOwo+ICsKPiArc3VibWl0X2VuZ2luZToKPiArCQlHRU1fQlVHX09O KFJCX0VNUFRZX05PREUoJm5vZGUtPnJiKSk7Cj4gKwkJbm9kZS0+cHJpbyA9IHByaW87Cj4gKwkJ aWYgKGZpcnN0ICYmIHByaW8gPiBzaWJsaW5nLT5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGlu dCkgewo+ICsJCQlzaWJsaW5nLT5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludCA9IHByaW87 Cj4gKwkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnNpYmxpbmctPmV4ZWNsaXN0cy50YXNrbGV0KTsK PiArCQl9Cj4gKwo+ICsJCXNwaW5fdW5sb2NrKCZzaWJsaW5nLT50aW1lbGluZS5sb2NrKTsKPiAr CX0KPiArCWxvY2FsX2lycV9lbmFibGUoKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmlydHVh bF9zdWJtaXRfcmVxdWVzdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0KQo+ICt7Cj4gKwlz dHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0gdG9fdmlydHVhbF9lbmdpbmUocmVxdWVzdC0+ZW5n aW5lKTsKPiArCj4gKwlHRU1fQlVHX09OKHZlLT5iYXNlLnN1Ym1pdF9yZXF1ZXN0ICE9IHZpcnR1 YWxfc3VibWl0X3JlcXVlc3QpOwo+ICsKPiArCUdFTV9CVUdfT04odmUtPnJlcXVlc3QpOwo+ICsJ dmUtPmJhc2UuZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBycV9wcmlvKHJlcXVlc3Qp Owo+ICsJV1JJVEVfT05DRSh2ZS0+cmVxdWVzdCwgcmVxdWVzdCk7Cj4gKwo+ICsJdGFza2xldF9z Y2hlZHVsZSgmdmUtPmJhc2UuZXhlY2xpc3RzLnRhc2tsZXQpOwoKTm90IHRhc2tsZXRfaGlfc2No ZWR1bGUgbGlrZSB3ZSBvdGhlcndpc2UgZG8/Cgo+ICt9Cj4gKwo+ICtzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICoKPiAraW50ZWxfZXhlY2xpc3RzX2NyZWF0ZV92aXJ0dWFsKHN0cnVjdCBpOTE1X2dl bV9jb250ZXh0ICpjdHgsCj4gKwkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoqc2li bGluZ3MsCj4gKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgY291bnQpCj4gK3sKPiArCXN0cnVjdCB2 aXJ0dWFsX2VuZ2luZSAqdmU7Cj4gKwl1bnNpZ25lZCBpbnQgbjsKPiArCWludCBlcnI7Cj4gKwo+ ICsJaWYgKCFjb3VudCkKPiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiArCj4gKwl2ZSA9 IGt6YWxsb2Moc3RydWN0X3NpemUodmUsIHNpYmxpbmdzLCBjb3VudCksIEdGUF9LRVJORUwpOwo+ ICsJaWYgKCF2ZSkKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4gKwlrcmVmX2lu aXQoJnZlLT5rcmVmKTsKPiArCXJjdV9oZWFkX2luaXQoJnZlLT5yY3UpOwo+ICsJdmUtPmJhc2Uu aTkxNSA9IGN0eC0+aTkxNTsKPiArCXZlLT5iYXNlLmlkID0gLTE7Cj4gKwl2ZS0+YmFzZS5jbGFz cyA9IE9USEVSX0NMQVNTOwo+ICsJdmUtPmJhc2UudWFiaV9jbGFzcyA9IEk5MTVfRU5HSU5FX0NM QVNTX0lOVkFMSUQ7Cj4gKwl2ZS0+YmFzZS5pbnN0YW5jZSA9IEk5MTVfRU5HSU5FX0NMQVNTX0lO VkFMSURfVklSVFVBTDsKPiArCXZlLT5iYXNlLmZsYWdzID0gSTkxNV9FTkdJTkVfSVNfVklSVFVB TDsKPiArCj4gKwlzbnByaW50Zih2ZS0+YmFzZS5uYW1lLCBzaXplb2YodmUtPmJhc2UubmFtZSks ICJ2aXJ0dWFsIik7Cj4gKwo+ICsJZXJyID0gaTkxNV90aW1lbGluZV9pbml0KGN0eC0+aTkxNSwK PiArCQkJCSAmdmUtPmJhc2UudGltZWxpbmUsCj4gKwkJCQkgdmUtPmJhc2UubmFtZSwKPiArCQkJ CSBOVUxMKTsKPiArCWlmIChlcnIpCj4gKwkJZ290byBlcnJfcHV0Owo+ICsJaTkxNV90aW1lbGlu ZV9zZXRfc3ViY2xhc3MoJnZlLT5iYXNlLnRpbWVsaW5lLCBUSU1FTElORV9WSVJUVUFMKTsKPiAr Cj4gKwl2ZS0+YmFzZS5jb3BzID0gJnZpcnR1YWxfY29udGV4dF9vcHM7Cj4gKwl2ZS0+YmFzZS5y ZXF1ZXN0X2FsbG9jID0gZXhlY2xpc3RzX3JlcXVlc3RfYWxsb2M7Cj4gKwo+ICsJdmUtPmJhc2Uu c2NoZWR1bGUgPSBpOTE1X3NjaGVkdWxlOwo+ICsJdmUtPmJhc2Uuc3VibWl0X3JlcXVlc3QgPSB2 aXJ0dWFsX3N1Ym1pdF9yZXF1ZXN0Owo+ICsKPiArCXZlLT5iYXNlLmV4ZWNsaXN0cy5xdWV1ZV9w cmlvcml0eV9oaW50ID0gSU5UX01JTjsKPiArCXRhc2tsZXRfaW5pdCgmdmUtPmJhc2UuZXhlY2xp c3RzLnRhc2tsZXQsCj4gKwkJICAgICB2aXJ0dWFsX3N1Ym1pc3Npb25fdGFza2xldCwKPiArCQkg ICAgICh1bnNpZ25lZCBsb25nKXZlKTsKPiArCj4gKwlpbnRlbF9jb250ZXh0X2luaXQoJnZlLT5j b250ZXh0LCBjdHgsICZ2ZS0+YmFzZSk7Cj4gKwo+ICsJZm9yIChuID0gMDsgbiA8IGNvdW50OyBu KyspIHsKPiArCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzaWJsaW5nID0gc2libGluZ3Nbbl07 Cj4gKwo+ICsJCUdFTV9CVUdfT04oIWlzX3Bvd2VyX29mXzIoc2libGluZy0+bWFzaykpOwo+ICsJ CWlmIChzaWJsaW5nLT5tYXNrICYgdmUtPmJhc2UubWFzaykKPiArCQkJY29udGludWU7CgpFbGlt aW5hdGUgZHVwbGljYXRlcz8gTmVlZCBvciB3YW50PwoKPiArCj4gKwkJaWYgKHNpYmxpbmctPmV4 ZWNsaXN0cy50YXNrbGV0LmZ1bmMgIT0gZXhlY2xpc3RzX3N1Ym1pc3Npb25fdGFza2xldCkgewo+ ICsJCQllcnIgPSAtRU5PREVWOyA+ICsJCQlnb3RvIGVycl9wdXQ7CgpJcyB0aGlzIGludGVuZGVk IHRvIHByZXZlbnQgbWFraW5nIHZpcnR1YWwgZW5naW5lcyBmcm9tIHZpcnR1YWwgZW5naW5lcyAK b3IgbW9yZT8gV291bGQgaXQgbWFrZSBzZW5zZSB0byBwdXQgYW4gZXhwbGljaXQgaXNfdmlydHVh bCBjaGVjayBmb3IgCmNsYXJpdHk/IChTaW5jZSBpbiB0aGUgZXh0ZW5zaW9uIHByb2Nlc3Npbmcg aXQgZG9lc24ndCBjaGVjayAtIG9yIG1heWJlIAppdCB3b3VsZCBiZSBnb29kIHRvIGNoZWNrIHRo ZXJlIGVhcmx5PykKCj4gKwkJfQo+ICsKPiArCQlHRU1fQlVHX09OKFJCX0VNUFRZX05PREUoJnZl LT5ub2Rlc1tzaWJsaW5nLT5pZF0ucmIpKTsKPiArCQlSQl9DTEVBUl9OT0RFKCZ2ZS0+bm9kZXNb c2libGluZy0+aWRdLnJiKTsKPiArCj4gKwkJdmUtPnNpYmxpbmdzW3ZlLT5jb3VudCsrXSA9IHNp Ymxpbmc7Cj4gKwkJdmUtPmJhc2UubWFzayB8PSBzaWJsaW5nLT5tYXNrOwo+ICsKCi8qIEFsbG93 IG9ubHkgc2FtZSBlbmdpbmUgY2xhc3MuICovCgo+ICsJCWlmICh2ZS0+YmFzZS5jbGFzcyAhPSBP VEhFUl9DTEFTUykgewo+ICsJCQlpZiAodmUtPmJhc2UuY2xhc3MgIT0gc2libGluZy0+Y2xhc3Mp IHsKPiArCQkJCWVyciA9IC1FSU5WQUw7Cj4gKwkJCQlnb3RvIGVycl9wdXQ7Cj4gKwkJCX0KPiAr CQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQl2ZS0+YmFzZS5jbGFzcyA9IHNpYmxpbmctPmNs YXNzOwo+ICsJCXNucHJpbnRmKHZlLT5iYXNlLm5hbWUsIHNpemVvZih2ZS0+YmFzZS5uYW1lKSwK PiArCQkJICJ2JWR4JWQiLCB2ZS0+YmFzZS5jbGFzcywgY291bnQpOwoKRG8gd2Ugd2FudCB0byBn byBmb3IgdW5pcXVlIG5hbWVzPyBMaWtlIGluc3RlYWQgb2YgY291bnQgaGF2ZSBhbiB1bmlxdWUg Cm1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBjb3VudGVyIGF0IHRoZSBlbmQ/IE9yIG1heWJlIAp2 aXJ0PHVuaXF1ZT46PGNsYXNzPjo8c2libGluZy1jb3VudD4/IE1pZ2h0IG5lZWQgaW5jcmVhc2lu ZyB0aGUgZW5naW5lIApuYW1lIGJ1ZmZlci4KCj4gKwkJdmUtPmJhc2UuY29udGV4dF9zaXplID0g c2libGluZy0+Y29udGV4dF9zaXplOwo+ICsKPiArCQl2ZS0+YmFzZS5lbWl0X2JiX3N0YXJ0ID0g c2libGluZy0+ZW1pdF9iYl9zdGFydDsKPiArCQl2ZS0+YmFzZS5lbWl0X2ZsdXNoID0gc2libGlu Zy0+ZW1pdF9mbHVzaDsKPiArCQl2ZS0+YmFzZS5lbWl0X2luaXRfYnJlYWRjcnVtYiA9IHNpYmxp bmctPmVtaXRfaW5pdF9icmVhZGNydW1iOwo+ICsJCXZlLT5iYXNlLmVtaXRfZmluaV9icmVhZGNy dW1iID0gc2libGluZy0+ZW1pdF9maW5pX2JyZWFkY3J1bWI7Cj4gKwkJdmUtPmJhc2UuZW1pdF9m aW5pX2JyZWFkY3J1bWJfZHcgPQo+ICsJCQlzaWJsaW5nLT5lbWl0X2ZpbmlfYnJlYWRjcnVtYl9k dzsKPiArCX0KPiArCj4gKwkvKiBncmFjZWZ1bGx5IHJlcGxhY2UgYSBkZWdlbmVyYXRlIHZpcnR1 YWwgZW5naW5lICovCj4gKwlpZiAoaXNfcG93ZXJfb2ZfMih2ZS0+YmFzZS5tYXNrKSkgewo+ICsJ CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmFjdHVhbCA9IHZlLT5zaWJsaW5nc1swXTsKPiArCQl2 aXJ0dWFsX2VuZ2luZV9mcmVlKCZ2ZS0+a3JlZik7Cj4gKwkJcmV0dXJuIGFjdHVhbDsKPiArCX0K CldoeSB0aGUgdGVybSBkZWdlbmVyYXRlPwoKQWxzbywgaXMgaXQgcG9zc2libGUgYXQgdGhpcyBz dGFnZT8gSGlnaGVyIGxldmVsIGNvZGUgd2lsbCBhdm9pZCAKY3JlYXRpbmcgYSB2ZW5nIHdpdGgg b25seSBvbmUgZW5naW5lLgoKPiArCj4gKwlfX2ludGVsX2NvbnRleHRfaW5zZXJ0KGN0eCwgJnZl LT5iYXNlLCAmdmUtPmNvbnRleHQpOwo+ICsJcmV0dXJuICZ2ZS0+YmFzZTsKPiArCj4gK2Vycl9w dXQ6Cj4gKwl2aXJ0dWFsX2VuZ2luZV9mcmVlKCZ2ZS0+a3JlZik7Cj4gKwlyZXR1cm4gRVJSX1BU UihlcnIpOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoKPiAraW50ZWxfZXhl Y2xpc3RzX2Nsb25lX3ZpcnR1YWwoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiArCQkJ ICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc3JjKQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydHVh bF9lbmdpbmUgKnNlID0gdG9fdmlydHVhbF9lbmdpbmUoc3JjKTsKPiArCXN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmRzdDsKPiArCj4gKwlkc3QgPSBpbnRlbF9leGVjbGlzdHNfY3JlYXRlX3ZpcnR1 YWwoY3R4LAo+ICsJCQkJCSAgICAgc2UtPnNpYmxpbmdzLAo+ICsJCQkJCSAgICAgc2UtPmNvdW50 KTsKPiArCWlmIChJU19FUlIoZHN0KSkKPiArCQlyZXR1cm4gZHN0Owo+ICsKPiArCXJldHVybiBk c3Q7Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfdmlydHVhbF9lbmdpbmVfZGVzdHJveShzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArCXN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAq dmUgPSB0b192aXJ0dWFsX2VuZ2luZShlbmdpbmUpOwo+ICsKPiArCWlmICghZW5naW5lIHx8ICFp bnRlbF9lbmdpbmVfaXNfdmlydHVhbChlbmdpbmUpKQo+ICsJCXJldHVybjsKPiArCj4gKwlfX2lu dGVsX2NvbnRleHRfcmVtb3ZlKCZ2ZS0+Y29udGV4dCk7Cj4gKwo+ICsJa3JlZl9wdXQoJnZlLT5r cmVmLCB2aXJ0dWFsX2VuZ2luZV9mcmVlKTsKPiArfQo+ICsKPiAgIHZvaWQgaW50ZWxfZXhlY2xp c3RzX3Nob3dfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAgCQkJ CSAgIHN0cnVjdCBkcm1fcHJpbnRlciAqbSwKPiAgIAkJCQkgICB2b2lkICgqc2hvd19yZXF1ZXN0 KShzdHJ1Y3QgZHJtX3ByaW50ZXIgKm0sCj4gQEAgLTI5NjEsNiArMzQ0MSwyOSBAQCB2b2lkIGlu dGVsX2V4ZWNsaXN0c19zaG93X3JlcXVlc3RzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSwKPiAgIAkJc2hvd19yZXF1ZXN0KG0sIGxhc3QsICJcdFx0USAiKTsKPiAgIAl9Cj4gICAKPiAr CWxhc3QgPSBOVUxMOwo+ICsJY291bnQgPSAwOwo+ICsJZm9yIChyYiA9IHJiX2ZpcnN0X2NhY2hl ZCgmZXhlY2xpc3RzLT52aXJ0dWFsKTsgcmI7IHJiID0gcmJfbmV4dChyYikpIHsKPiArCQlzdHJ1 Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0KPiArCQkJcmJfZW50cnkocmIsIHR5cGVvZigqdmUpLCBu b2Rlc1tlbmdpbmUtPmlkXS5yYik7Cj4gKwkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEgPSBSRUFE X09OQ0UodmUtPnJlcXVlc3QpOwo+ICsKPiArCQlpZiAocnEpIHsKPiArCQkJaWYgKGNvdW50Kysg PCBtYXggLSAxKQo+ICsJCQkJc2hvd19yZXF1ZXN0KG0sIHJxLCAiXHRcdFYgIik7Cj4gKwkJCWVs c2UKPiArCQkJCWxhc3QgPSBycTsKPiArCQl9Cj4gKwl9Cj4gKwlpZiAobGFzdCkgewo+ICsJCWlm IChjb3VudCA+IG1heCkgewo+ICsJCQlkcm1fcHJpbnRmKG0sCj4gKwkJCQkgICAiXHRcdC4uLnNr aXBwaW5nICVkIHZpcnR1YWwgcmVxdWVzdHMuLi5cbiIsCj4gKwkJCQkgICBjb3VudCAtIG1heCk7 Cj4gKwkJfQo+ICsJCXNob3dfcmVxdWVzdChtLCBsYXN0LCAiXHRcdFYgIik7Cj4gKwl9Cj4gKwo+ ICAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+dGltZWxpbmUubG9jaywgZmxhZ3Mp Owo+ICAgfQo+ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xy Yy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgKPiBpbmRleCBmMWFlYzhhNjk4 NmYuLjlkOTBkYzY4ZTAyYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9scmMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oCj4gQEAgLTEx Miw2ICsxMTIsMTcgQEAgdm9pZCBpbnRlbF9leGVjbGlzdHNfc2hvd19yZXF1ZXN0cyhzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gICAJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4KSwK PiAgIAkJCQkgICB1bnNpZ25lZCBpbnQgbWF4KTsKPiAgIAo+ICtzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICoKPiAraW50ZWxfZXhlY2xpc3RzX2NyZWF0ZV92aXJ0dWFsKHN0cnVjdCBpOTE1X2dlbV9j b250ZXh0ICpjdHgsCj4gKwkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoqc2libGlu Z3MsCj4gKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgY291bnQpOwo+ICsKPiArc3RydWN0IGludGVs X2VuZ2luZV9jcyAqCj4gK2ludGVsX2V4ZWNsaXN0c19jbG9uZV92aXJ0dWFsKHN0cnVjdCBpOTE1 X2dlbV9jb250ZXh0ICpjdHgsCj4gKwkJCSAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNy Yyk7Cj4gKwo+ICt2b2lkIGludGVsX3ZpcnR1YWxfZW5naW5lX2Rlc3Ryb3koc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKTsKPiArCj4gICB1MzIgZ2VuOF9tYWtlX3JwY3Moc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUsIHN0cnVjdCBpbnRlbF9zc2V1ICpjdHhfc3NldSk7Cj4gICAK PiAgICNlbmRpZiAvKiBfSU5URUxfTFJDX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Nl bGZ0ZXN0cy9pbnRlbF9scmMuYwo+IGluZGV4IGQ2MTUyMGVhMDNjMS4uNGI4YTMzOTUyOWQxIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9scmMuYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9scmMuYwo+IEBAIC0x MCw2ICsxMCw3IEBACj4gICAKPiAgICNpbmNsdWRlICIuLi9pOTE1X3NlbGZ0ZXN0LmgiCj4gICAj aW5jbHVkZSAiaWd0X2ZsdXNoX3Rlc3QuaCIKPiArI2luY2x1ZGUgImlndF9saXZlX3Rlc3QuaCIK PiAgICNpbmNsdWRlICJpZ3Rfc3Bpbm5lci5oIgo+ICAgI2luY2x1ZGUgImk5MTVfcmFuZG9tLmgi Cj4gICAKPiBAQCAtMTA2MCw2ICsxMDYxLDE2OSBAQCBzdGF0aWMgaW50IGxpdmVfcHJlZW1wdF9z bW9rZSh2b2lkICphcmcpCj4gICAJcmV0dXJuIGVycjsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgaW50 IG5vcF92aXJ0dWFsX2VuZ2luZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiArCQkJ ICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqKnNpYmxpbmdzLAo+ICsJCQkgICAgICB1bnNp Z25lZCBpbnQgbnNpYmxpbmcsCj4gKwkJCSAgICAgIHVuc2lnbmVkIGludCBuY3R4LAo+ICsJCQkg ICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4gKyNkZWZpbmUgQ0hBSU4gQklUKDApCj4gK3sKPiAr CUlHVF9USU1FT1VUKGVuZF90aW1lKTsKPiArCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3Rb MTZdOwo+ICsJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eFsxNl07Cj4gKwlzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICp2ZVsxNl07Cj4gKwl1bnNpZ25lZCBsb25nIG4sIHByaW1lLCBuYzsKPiAr CXN0cnVjdCBpZ3RfbGl2ZV90ZXN0IHQ7Cj4gKwlrdGltZV90IHRpbWVzWzJdID0ge307Cj4gKwlp bnQgZXJyOwo+ICsKPiArCUdFTV9CVUdfT04oIW5jdHggfHwgbmN0eCA+IEFSUkFZX1NJWkUoY3R4 KSk7Cj4gKwo+ICsJZm9yIChuID0gMDsgbiA8IG5jdHg7IG4rKykgewo+ICsJCWN0eFtuXSA9IGtl cm5lbF9jb250ZXh0KGk5MTUpOwo+ICsJCWlmICghY3R4W25dKQo+ICsJCQlyZXR1cm4gLUVOT01F TTsKPiArCj4gKwkJdmVbbl0gPSBpbnRlbF9leGVjbGlzdHNfY3JlYXRlX3ZpcnR1YWwoY3R4W25d LAo+ICsJCQkJCQkgICAgICAgc2libGluZ3MsIG5zaWJsaW5nKTsKPiArCQlpZiAoSVNfRVJSKHZl W25dKSkKPiArCQkJcmV0dXJuIFBUUl9FUlIodmVbbl0pOwo+ICsJfQo+ICsKPiArCWVyciA9IGln dF9saXZlX3Rlc3RfYmVnaW4oJnQsIGk5MTUsIF9fZnVuY19fLCB2ZVswXS0+bmFtZSk7Cj4gKwlp ZiAoZXJyKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCWZvcl9lYWNoX3ByaW1lX251bWJlcl9mcm9t KHByaW1lLCAxLCA4MTkyKSB7Cj4gKwkJdGltZXNbMV0gPSBrdGltZV9nZXRfcmF3KCk7Cj4gKwo+ ICsJCWlmIChmbGFncyAmIENIQUlOKSB7Cj4gKwkJCWZvciAobmMgPSAwOyBuYyA8IG5jdHg7IG5j KyspIHsKPiArCQkJCWZvciAobiA9IDA7IG4gPCBwcmltZTsgbisrKSB7Cj4gKwkJCQkJcmVxdWVz dFtuY10gPQo+ICsJCQkJCQlpOTE1X3JlcXVlc3RfYWxsb2ModmVbbmNdLCBjdHhbbmNdKTsKPiAr CQkJCQlpZiAoSVNfRVJSKHJlcXVlc3RbbmNdKSkgewo+ICsJCQkJCQllcnIgPSBQVFJfRVJSKHJl cXVlc3RbbmNdKTsKPiArCQkJCQkJZ290byBvdXQ7Cj4gKwkJCQkJfQo+ICsKPiArCQkJCQlpOTE1 X3JlcXVlc3RfYWRkKHJlcXVlc3RbbmNdKTsKPiArCQkJCX0KPiArCQkJfQo+ICsJCX0gZWxzZSB7 Cj4gKwkJCWZvciAobiA9IDA7IG4gPCBwcmltZTsgbisrKSB7Cj4gKwkJCQlmb3IgKG5jID0gMDsg bmMgPCBuY3R4OyBuYysrKSB7Cj4gKwkJCQkJcmVxdWVzdFtuY10gPQo+ICsJCQkJCQlpOTE1X3Jl cXVlc3RfYWxsb2ModmVbbmNdLCBjdHhbbmNdKTsKPiArCQkJCQlpZiAoSVNfRVJSKHJlcXVlc3Rb bmNdKSkgewo+ICsJCQkJCQllcnIgPSBQVFJfRVJSKHJlcXVlc3RbbmNdKTsKPiArCQkJCQkJZ290 byBvdXQ7Cj4gKwkJCQkJfQo+ICsKPiArCQkJCQlpOTE1X3JlcXVlc3RfYWRkKHJlcXVlc3RbbmNd KTsKPiArCQkJCX0KPiArCQkJfQo+ICsJCX0KPiArCj4gKwkJZm9yIChuYyA9IDA7IG5jIDwgbmN0 eDsgbmMrKykgewo+ICsJCQlpZiAoaTkxNV9yZXF1ZXN0X3dhaXQocmVxdWVzdFtuY10sCj4gKwkJ CQkJICAgICAgSTkxNV9XQUlUX0xPQ0tFRCwKPiArCQkJCQkgICAgICBIWiAvIDEwKSA8IDApIHsK PiArCQkJCXByX2VycigiJXMoJXMpOiB3YWl0IGZvciAlbGx4OiVsbGQgdGltZWQgb3V0XG4iLAo+ ICsJCQkJICAgICAgIF9fZnVuY19fLCB2ZVswXS0+bmFtZSwKPiArCQkJCSAgICAgICByZXF1ZXN0 W25jXS0+ZmVuY2UuY29udGV4dCwKPiArCQkJCSAgICAgICByZXF1ZXN0W25jXS0+ZmVuY2Uuc2Vx bm8pOwo+ICsKPiArCQkJCUdFTV9UUkFDRSgiJXMoJXMpIGZhaWxlZCBhdCByZXF1ZXN0ICVsbHg6 JWxsZFxuIiwKPiArCQkJCQkgIF9fZnVuY19fLCB2ZVswXS0+bmFtZSwKPiArCQkJCQkgIHJlcXVl c3RbbmNdLT5mZW5jZS5jb250ZXh0LAo+ICsJCQkJCSAgcmVxdWVzdFtuY10tPmZlbmNlLnNlcW5v KTsKPiArCQkJCUdFTV9UUkFDRV9EVU1QKCk7Cj4gKwkJCQlpOTE1X2dlbV9zZXRfd2VkZ2VkKGk5 MTUpOwo+ICsJCQkJYnJlYWs7Cj4gKwkJCX0KPiArCQl9Cj4gKwo+ICsJCXRpbWVzWzFdID0ga3Rp bWVfc3ViKGt0aW1lX2dldF9yYXcoKSwgdGltZXNbMV0pOwo+ICsJCWlmIChwcmltZSA9PSAxKQo+ ICsJCQl0aW1lc1swXSA9IHRpbWVzWzFdOwo+ICsKPiArCQlpZiAoX19pZ3RfdGltZW91dChlbmRf dGltZSwgTlVMTCkpCj4gKwkJCWJyZWFrOwo+ICsJfQo+ICsKPiArCWVyciA9IGlndF9saXZlX3Rl c3RfZW5kKCZ0KTsKPiArCWlmIChlcnIpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJcHJfaW5mbygi UmVxdWVzdHglZCBsYXRlbmNpZXMgb24gJXM6IDEgPSAlbGx1bnMsICVsdSA9ICVsbHVuc1xuIiwK PiArCQluY3R4LCB2ZVswXS0+bmFtZSwga3RpbWVfdG9fbnModGltZXNbMF0pLAo+ICsJCXByaW1l LCBkaXY2NF91NjQoa3RpbWVfdG9fbnModGltZXNbMV0pLCBwcmltZSkpOwo+ICsKPiArb3V0Ogo+ ICsJaWYgKGlndF9mbHVzaF90ZXN0KGk5MTUsIEk5MTVfV0FJVF9MT0NLRUQpKQo+ICsJCWVyciA9 IC1FSU87Cj4gKwo+ICsJZm9yIChuYyA9IDA7IG5jIDwgbmN0eDsgbmMrKykgewo+ICsJCWludGVs X3ZpcnR1YWxfZW5naW5lX2Rlc3Ryb3kodmVbbmNdKTsKPiArCQlrZXJuZWxfY29udGV4dF9jbG9z ZShjdHhbbmNdKTsKPiArCX0KPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg bGl2ZV92aXJ0dWFsX2VuZ2luZSh2b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0gYXJnOwo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc2libGluZ3Nb TUFYX0VOR0lORV9JTlNUQU5DRSArIDFdOwo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lOwo+ICsJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gKwl1bnNpZ25lZCBpbnQgY2xhc3Ms IGluc3Q7Cj4gKwlpbnQgZXJyID0gLUVOT0RFVjsKPiArCj4gKwlpZiAoVVNFU19HVUNfU1VCTUlT U0lPTihpOTE1KSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwltdXRleF9sb2NrKCZpOTE1LT5kcm0u c3RydWN0X211dGV4KTsKPiArCj4gKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1LCBpZCkg ewo+ICsJCWVyciA9IG5vcF92aXJ0dWFsX2VuZ2luZShpOTE1LCAmZW5naW5lLCAxLCAxLCAwKTsK PiArCQlpZiAoZXJyKSB7Cj4gKwkJCXByX2VycigiRmFpbGVkIHRvIHdyYXAgZW5naW5lICVzOiBl cnI9JWRcbiIsCj4gKwkJCSAgICAgICBlbmdpbmUtPm5hbWUsIGVycik7Cj4gKwkJCWdvdG8gb3V0 X3VubG9jazsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJZm9yIChjbGFzcyA9IDA7IGNsYXNzIDw9IE1B WF9FTkdJTkVfQ0xBU1M7IGNsYXNzKyspIHsKPiArCQlpbnQgbnNpYmxpbmcsIG47Cj4gKwo+ICsJ CW5zaWJsaW5nID0gMDsKPiArCQlmb3IgKGluc3QgPSAwOyBpbnN0IDw9IE1BWF9FTkdJTkVfSU5T VEFOQ0U7IGluc3QrKykgewo+ICsJCQlpZiAoIWk5MTUtPmVuZ2luZV9jbGFzc1tjbGFzc11baW5z dF0pCj4gKwkJCQlicmVhazsKPiArCj4gKwkJCXNpYmxpbmdzW25zaWJsaW5nKytdID0gaTkxNS0+ ZW5naW5lX2NsYXNzW2NsYXNzXVtpbnN0XTsKPiArCQl9Cj4gKwkJaWYgKG5zaWJsaW5nIDwgMikK PiArCQkJY29udGludWU7Cj4gKwo+ICsJCWZvciAobiA9IDE7IG4gPD0gbnNpYmxpbmcgKyAxOyBu KyspIHsKPiArCQkJZXJyID0gbm9wX3ZpcnR1YWxfZW5naW5lKGk5MTUsIHNpYmxpbmdzLCBuc2li bGluZywKPiArCQkJCQkJIG4sIDApOwo+ICsJCQlpZiAoZXJyKQo+ICsJCQkJZ290byBvdXRfdW5s b2NrOwo+ICsJCX0KPiArCj4gKwkJZXJyID0gbm9wX3ZpcnR1YWxfZW5naW5lKGk5MTUsIHNpYmxp bmdzLCBuc2libGluZywgbiwgQ0hBSU4pOwo+ICsJCWlmIChlcnIpCj4gKwkJCWdvdG8gb3V0X3Vu bG9jazsKPiArCX0KPiArCj4gK291dF91bmxvY2s6Cj4gKwltdXRleF91bmxvY2soJmk5MTUtPmRy bS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiAgIGludCBpbnRlbF9l eGVjbGlzdHNfbGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4g ICB7Cj4gICAJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsKPiBA QCAtMTA3MSw2ICsxMjM1LDcgQEAgaW50IGludGVsX2V4ZWNsaXN0c19saXZlX3NlbGZ0ZXN0cyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIAkJU1VCVEVTVChsaXZlX2NoYWluX3By ZWVtcHQpLAo+ICAgCQlTVUJURVNUKGxpdmVfcHJlZW1wdF9oYW5nKSwKPiAgIAkJU1VCVEVTVChs aXZlX3ByZWVtcHRfc21va2UpLAo+ICsJCVNVQlRFU1QobGl2ZV92aXJ0dWFsX2VuZ2luZSksCj4g ICAJfTsKPiAgIAo+ICAgCWlmICghSEFTX0VYRUNMSVNUUyhpOTE1KSkKPiBkaWZmIC0tZ2l0IGEv aW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5o Cj4gaW5kZXggYTYwOTYxOTYxMGYyLi41OTJiMDI2NzYwNDQgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVk ZS91YXBpL2RybS9pOTE1X2RybS5oCj4gKysrIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5o Cj4gQEAgLTEyNSw2ICsxMjUsNyBAQCBlbnVtIGRybV9pOTE1X2dlbV9lbmdpbmVfY2xhc3Mgewo+ ICAgfTsKPiAgIAo+ICAgI2RlZmluZSBJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEX05PTkUgLTEK PiArI2RlZmluZSBJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEX1ZJUlRVQUwgMAo+ICAgCj4gICAv KioKPiAgICAqIERPQzogcGVyZl9ldmVudHMgZXhwb3NlZCBieSBpOTE1IHRocm91Z2ggL3N5cy9i dXMvZXZlbnRfc291cmNlcy9kcml2ZXJzL2k5MTUKPiBAQCAtMTU5Niw4ICsxNTk3LDM3IEBAIHN0 cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1IHsKPiAgIAlfX3UzMiByc3ZkOwo+ ICAgfTsKPiAgIAo+ICsvKgo+ICsgKiBpOTE1X2NvbnRleHRfZW5naW5lc19sb2FkX2JhbGFuY2U6 Cj4gKyAqCj4gKyAqIEVuYWJsZSBsb2FkIGJhbGFuY2luZyBhY3Jvc3MgdGhpcyBzZXQgb2YgZW5n aW5lcy4KPiArICoKPiArICogSW50byB0aGUgSTkxNV9FWEVDX0RFRkFVTFQgc2xvdCBbMF0sIGEg dmlydHVhbCBlbmdpbmUgaXMgY3JlYXRlZCB0aGF0IHdoZW4KPiArICogdXNlZCB3aWxsIHByb3h5 IHRoZSBleGVjYnVmZmVyIHJlcXVlc3Qgb250byBvbmUgb2YgdGhlIHNldCBvZiBlbmdpbmVzCj4g KyAqIGluIHN1Y2ggYSB3YXkgYXMgdG8gZGlzdHJpYnV0ZSB0aGUgbG9hZCBldmVubHkgYWNyb3Nz IHRoZSBzZXQuCj4gKyAqCj4gKyAqIFRoZSBzZXQgb2YgZW5naW5lcyBtdXN0IGJlIGNvbXBhdGli bGUgKGUuZy4gdGhlIHNhbWUgSFcgY2xhc3MpIGFzIHRoZXkKPiArICogd2lsbCBzaGFyZSB0aGUg c2FtZSBsb2dpY2FsIEdQVSBjb250ZXh0IGFuZCByaW5nLgo+ICsgKgo+ICsgKiBUbyBpbnRlcm1p eCByZW5kZXJpbmcgd2l0aCB0aGUgdmlydHVhbCBlbmdpbmUgYW5kIGRpcmVjdCByZW5kZXJpbmcg b250bwo+ICsgKiB0aGUgYmFja2luZyBlbmdpbmVzIChieXBhc3NpbmcgdGhlIGxvYWQgYmFsYW5j aW5nIHByb3h5KSwgdGhlIGNvbnRleHQgbXVzdAo+ICsgKiBiZSBkZWZpbmVkIHRvIHVzZSBhIHNp bmdsZSB0aW1lbGluZSBmb3IgYWxsIGVuZ2luZXMuCj4gKyAqLwo+ICtzdHJ1Y3QgaTkxNV9jb250 ZXh0X2VuZ2luZXNfbG9hZF9iYWxhbmNlIHsKPiArCXN0cnVjdCBpOTE1X3VzZXJfZXh0ZW5zaW9u IGJhc2U7Cj4gKwo+ICsJX191MTYgZW5naW5lX2luZGV4OwoKTWlzc2luZyBkb2MgaGVyZS4KCkFu eSBuZWVkIGZvciBtYnoxNiBvciBjb3VsZCBtYWtlIHRoZSBpbmRleCB1MzI/Cgo+ICsJX191MTYg bWJ6MTY7IC8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlOyBtdXN0IGJlIHplcm8gKi8KPiArCV9f dTMyIGZsYWdzOyAvKiBhbGwgdW5kZWZpbmVkIGZsYWdzIG11c3QgYmUgemVybyAqLwo+ICsKPiAr CV9fdTY0IGVuZ2luZXNfbWFzazsgLyogc2VsZWN0aW9uIG1hc2sgb2YgZW5naW5lc1tdICovCj4g Kwo+ICsJX191NjQgbWJ6NjRbNF07IC8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlOyBtdXN0IGJl IHplcm8gKi8KPiArfTsKPiArCj4gICBzdHJ1Y3QgaTkxNV9jb250ZXh0X3BhcmFtX2VuZ2luZXMg ewo+ICAgCV9fdTY0IGV4dGVuc2lvbnM7IC8qIGxpbmtlZCBjaGFpbiBvZiBleHRlbnNpb24gYmxv Y2tzLCAwIHRlcm1pbmF0ZXMgKi8KPiArI2RlZmluZSBJOTE1X0NPTlRFWFRfRU5HSU5FU19FWFRf TE9BRF9CQUxBTkNFIDAKPiAgIAo+ICAgCXN0cnVjdCB7Cj4gICAJCV9fdTE2IGVuZ2luZV9jbGFz czsgLyogc2VlIGVudW0gZHJtX2k5MTVfZ2VtX2VuZ2luZV9jbGFzcyAqLwo+IAoKUmVnYXJkcywK ClR2cnRrbwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJ bnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=