From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gavin Shan Subject: Re: [PATCH kernel v11 33/34] vfio: powerpc/spapr: Register memory and define IOMMU v2 Date: Fri, 5 Jun 2015 10:01:48 +1000 Message-ID: <20150605000148.GA14081@gwshan> References: <1432889098-22924-1-git-send-email-aik@ozlabs.ru> <1432889098-22924-34-git-send-email-aik@ozlabs.ru> Reply-To: Gavin Shan Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: kvm@vger.kernel.org, Gavin Shan , linux-kernel@vger.kernel.org, Alex Williamson , Paul Mackerras , linuxppc-dev@lists.ozlabs.org, David Gibson To: Alexey Kardashevskiy Return-path: Content-Disposition: inline In-Reply-To: <1432889098-22924-34-git-send-email-aik@ozlabs.ru> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+glppd-linuxppc64-dev=m.gmane.org@lists.ozlabs.org Sender: "Linuxppc-dev" List-Id: kvm.vger.kernel.org T24gRnJpLCBNYXkgMjksIDIwMTUgYXQgMDY6NDQ6NTdQTSArMTAwMCwgQWxleGV5IEthcmRhc2hl dnNraXkgd3JvdGU6Cj5UaGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24gYWNjb3VudHMgdGhlIHdo b2xlIERNQSB3aW5kb3cgaW4KPnRoZSBsb2NrZWRfdm0gY291bnRlci4gVGhpcyBpcyBnb2luZyB0 byBiZSB3b3JzZSB3aXRoIG11bHRpcGxlCj5jb250YWluZXJzIGFuZCBodWdlIERNQSB3aW5kb3dz LiBBbHNvLCByZWFsLXRpbWUgYWNjb3VudGluZyB3b3VsZCByZXF1aXRlCj5hZGRpdGlvbmFsIHRy YWNraW5nIG9mIGFjY291bnRlZCBwYWdlcyBkdWUgdG8gdGhlIHBhZ2Ugc2l6ZSBkaWZmZXJlbmNl IC0KPklPTU1VIHVzZXMgNEsgcGFnZXMgYW5kIHN5c3RlbSB1c2VzIDRLIG9yIDY0SyBwYWdlcy4K Pgo+QW5vdGhlciBpc3N1ZSBpcyB0aGF0IGFjdHVhbCBwYWdlcyBwaW5uaW5nL3VucGlubmluZyBo YXBwZW5zIG9uIGV2ZXJ5Cj5ETUEgbWFwL3VubWFwIHJlcXVlc3QuIFRoaXMgZG9lcyBub3QgYWZm ZWN0IHRoZSBwZXJmb3JtYW5jZSBtdWNoIG5vdyBhcwo+d2Ugc3BlbmQgd2F5IHRvbyBtdWNoIHRp bWUgbm93IG9uIHN3aXRjaGluZyBjb250ZXh0IGJldHdlZW4KPmd1ZXN0L3VzZXJzcGFjZS9ob3N0 IGJ1dCB0aGlzIHdpbGwgc3RhcnQgdG8gbWF0dGVyIHdoZW4gd2UgYWRkIGluLWtlcm5lbAo+RE1B IG1hcC91bm1hcCBhY2NlbGVyYXRpb24uCj4KPlRoaXMgaW50cm9kdWNlcyBhIG5ldyBJT01NVSB0 eXBlIGZvciBTUEFQUiAtIFZGSU9fU1BBUFJfVENFX3YyX0lPTU1VLgo+TmV3IElPTU1VIGRlcHJl Y2F0ZXMgVkZJT19JT01NVV9FTkFCTEUvVkZJT19JT01NVV9ESVNBQkxFIGFuZCBpbnRyb2R1Y2Vz Cj4yIG5ldyBpb2N0bHMgdG8gcmVnaXN0ZXIvdW5yZWdpc3RlciBETUEgbWVtb3J5IC0KPlZGSU9f SU9NTVVfU1BBUFJfUkVHSVNURVJfTUVNT1JZIGFuZCBWRklPX0lPTU1VX1NQQVBSX1VOUkVHSVNU RVJfTUVNT1JZIC0KPndoaWNoIHJlY2VpdmUgdXNlciBzcGFjZSBhZGRyZXNzIGFuZCBzaXplIG9m IGEgbWVtb3J5IHJlZ2lvbiB3aGljaAo+bmVlZHMgdG8gYmUgcGlubmVkL3VucGlubmVkIGFuZCBj b3VudGVkIGluIGxvY2tlZF92bS4KPk5ldyBJT01NVSBzcGxpdHMgcGh5c2ljYWwgcGFnZXMgcGlu bmluZyBhbmQgVENFIHRhYmxlIHVwZGF0ZQo+aW50byAyIGRpZmZlcmVudCBvcGVyYXRpb25zLiBJ dCByZXF1aXJlczoKPjEpIGd1ZXN0IHBhZ2VzIHRvIGJlIHJlZ2lzdGVyZWQgZmlyc3QKPjIpIGNv bnNlcXVlbnQgbWFwL3VubWFwIHJlcXVlc3RzIHRvIHdvcmsgb25seSB3aXRoIHByZS1yZWdpc3Rl cmVkIG1lbW9yeS4KPkZvciB0aGUgZGVmYXVsdCBzaW5nbGUgd2luZG93IGNhc2UgdGhpcyBtZWFu cyB0aGF0IHRoZSBlbnRpcmUgZ3Vlc3QKPihpbnN0ZWFkIG9mIDJHQikgbmVlZHMgdG8gYmUgcGlu bmVkIGJlZm9yZSB1c2luZyBWRklPLgo+V2hlbiBhIGh1Z2UgRE1BIHdpbmRvdyBpcyBhZGRlZCwg bm8gYWRkaXRpb25hbCBwaW5uaW5nIHdpbGwgYmUKPnJlcXVpcmVkLCBvdGhlcndpc2UgaXQgd291 bGQgYmUgZ3Vlc3QgUkFNICsgMkdCLgo+Cj5UaGUgbmV3IG1lbW9yeSByZWdpc3RyYXRpb24gaW9j dGxzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5Cj5WRklPX1NQQVBSX1RDRV9JT01NVS4gRHluYW1pYyBE TUEgd2luZG93IGFuZCBpbi1rZXJuZWwgYWNjZWxlcmF0aW9uCj53aWxsIHJlcXVpcmUgbWVtb3J5 IHRvIGJlIHByZXJlZ2lzdGVyZWQgaW4gb3JkZXIgdG8gd29yay4KPgo+VGhlIGFjY291bnRpbmcg aXMgZG9uZSBwZXIgdGhlIHVzZXIgcHJvY2Vzcy4KPgo+VGhpcyBhZHZlcnRpc2VzIHYyIFNQQVBS IFRDRSBJT01NVSBhbmQgcmVzdHJpY3RzIHdoYXQgdGhlIHVzZXJzcGFjZQo+Y2FuIGRvIHdpdGgg djEgb3IgdjIgSU9NTVVzLgo+Cj5JbiBvcmRlciB0byBzdXBwb3J0IG1lbW9yeSBwcmUtcmVnaXN0 cmF0aW9uLCB3ZSBuZWVkIGEgd2F5IHRvIHRyYWNrCj50aGUgdXNlIG9mIGV2ZXJ5IHJlZ2lzdGVy ZWQgbWVtb3J5IHJlZ2lvbiBhbmQgb25seSBhbGxvdyB1bnJlZ2lzdHJhdGlvbgo+aWYgYSByZWdp b24gaXMgbm90IGluIHVzZSBhbnltb3JlLiBTbyB3ZSBuZWVkIGEgd2F5IHRvIHRlbGwgZnJvbSB3 aGF0Cj5yZWdpb24gdGhlIGp1c3QgY2xlYXJlZCBUQ0Ugd2FzIGZyb20uCj4KPlRoaXMgYWRkcyBh IHVzZXJzcGFjZSB2aWV3IG9mIHRoZSBUQ0UgdGFibGUgaW50byBpb21tdV90YWJsZSBzdHJ1Y3Qu Cj5JdCBjb250YWlucyB1c2Vyc3BhY2UgYWRkcmVzcywgb25lIHBlciBUQ0UgZW50cnkuIFRoZSB0 YWJsZSBpcyBvbmx5Cj5hbGxvY2F0ZWQgd2hlbiB0aGUgb3duZXJzaGlwIG92ZXIgYW4gSU9NTVUg Z3JvdXAgaXMgdGFrZW4gd2hpY2ggbWVhbnMKPml0IGlzIG9ubHkgdXNlZCBmcm9tIG91dHNpZGUg b2YgdGhlIHBvd2VybnYgY29kZSAoc3VjaCBhcyBWRklPKS4KPgo+U2lnbmVkLW9mZi1ieTogQWxl eGV5IEthcmRhc2hldnNraXkgPGFpa0BvemxhYnMucnU+Cj5bYXc6IGZvciB0aGUgdmZpbyByZWxh dGVkIGNoYW5nZXNdCj5BY2tlZC1ieTogQWxleCBXaWxsaWFtc29uIDxhbGV4LndpbGxpYW1zb25A cmVkaGF0LmNvbT4KPi0tLQo+Q2hhbmdlczoKPnYxMToKPiogbW1faW9tbXVfcHV0KCkgZG9lcyBu b3QgcmV0dXJuIGEgY29kZSBzbyB0aGlzIGRvZXMgbm90IGNoZWNrIGl0Cj4qIG1vdmVkICJ2MiIg aW4gdGNlX2NvbnRhaW5lciB0byBwYWNrIHRoZSBzdHJ1Y3QKPgo+djEwOgo+KiBtb3ZlZCBpdF91 c2Vyc3BhY2UgYWxsb2NhdGlvbiB0byB2ZmlvX2lvbW11X3NwYXByX3RjZSBhcyBpdCBWRklPCj5z cGVjaWZpYyB0aGluZwo+KiBzcXVhc2hlZCAicG93ZXJwYy9pb21tdTogQWRkIHVzZXJzcGFjZSB2 aWV3IG9mIFRDRSB0YWJsZSIgaW50byB0aGlzIGFzCj5pdCBpcwo+YSBwYXJ0IG9mIElPTU1VIHYy Cj4qIHMvdGNlX2lvbW11X3VzZV9wYWdlX3YyL3RjZV9pb21tdV9wcmVyZWdfdWFfdG9faHBhLwo+ KiBmaXhlZCBzb21lIGZ1bmN0aW9uIG5hbWVzIHRvIGhhdmUgInRjZV9pb21tdV8iIGluIHRoZSBi ZWdpbm5pbmcgcmF0aGVyCj5qdXN0ICJ0Y2VfIgo+KiBhcyBtbV9pb21tdV9tYXBwZWRfaW5jKCkg Y2FuIG5vdyBmYWlsLCBjaGVjayBmb3IgdGhlIHJldHVybiBjb2RlCj4KPnY5Ogo+KiBzL3RjZV9n ZXRfaHZhX2NhY2hlZC90Y2VfaW9tbXVfdXNlX3BhZ2VfdjIvCj4KPnY3Ogo+KiBub3cgbWVtb3J5 IGlzIHJlZ2lzdGVyZWQgcGVyIG1tIChpLmUuIHByb2Nlc3MpCj4qIG1vdmVkIG1lbW9yeSByZWdp c3RyYXRpb24gY29kZSB0byBwb3dlcnBjL21tdQo+KiBtZXJnZWQgInZmaW86IHBvd2VycGMvc3Bh cHI6IERlZmluZSB2MiBJT01NVSIgaW50byB0aGlzCj4qIGxpbWl0ZWQgbmV3IGlvY3RscyB0byB2 MiBJT01NVQo+KiB1cGRhdGVkIGRvYwo+KiB1bnN1cHBvcnRlZCBpb2NsdHMgcmV0dXJuIC1FTk9U VFkgaW5zdGVhZCBvZiAtRVBFUk0KPgo+djY6Cj4qIHRjZV9nZXRfaHZhX2NhY2hlZCgpIHJldHVy bnMgaHZhIHZpYSBhIHBvaW50ZXIKPgo+djQ6Cj4qIHVwZGF0ZWQgZG9jcwo+KiBzL2t6bWFsbG9j L3Z6YWxsb2MvCj4qIGluIHRjZV9waW5fcGFnZXMoKS90Y2VfdW5waW5fcGFnZXMoKSByZW1vdmVk IEB2YWRkciwgQHNpemUgYW5kCj5yZXBsYWNlZCBvZmZzZXQgd2l0aCBpbmRleAo+KiByZW5hbWVk IHZmaW9faW9tbXVfdHlwZV9yZWdpc3Rlcl9tZW1vcnkgdG8gdmZpb19pb21tdV9zcGFwcl9yZWdp c3Rlcl9tZW1vcnkKPmFuZCByZW1vdmVkIGR1cGxpY2F0aW5nIHZmaW9faW9tbXVfc3BhcHJfcmVn aXN0ZXJfbWVtb3J5Cj4tLS0KPiBEb2N1bWVudGF0aW9uL3ZmaW8udHh0ICAgICAgICAgICAgICB8 ICAzMSArKy0KPiBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW9tbXUuaCAgICB8ICAgNiArCj4g ZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfc3BhcHJfdGNlLmMgfCA1MTIgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrLS0tLS0tCj4gaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCAgICAgICAg ICAgfCAgMjcgKysKPiA0IGZpbGVzIGNoYW5nZWQsIDQ4NyBpbnNlcnRpb25zKCspLCA4OSBkZWxl dGlvbnMoLSkKPgo+ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmZpby50eHQgYi9Eb2N1bWVu dGF0aW9uL3ZmaW8udHh0Cj5pbmRleCA5Njk3OGVjLi43ZGNmMmI1IDEwMDY0NAo+LS0tIGEvRG9j dW1lbnRhdGlvbi92ZmlvLnR4dAo+KysrIGIvRG9jdW1lbnRhdGlvbi92ZmlvLnR4dAo+QEAgLTI4 OSwxMCArMjg5LDEyIEBAIFBQQzY0IHNQQVBSIGltcGxlbWVudGF0aW9uIG5vdGUKPgo+IFRoaXMg aW1wbGVtZW50YXRpb24gaGFzIHNvbWUgc3BlY2lmaWNzOgo+Cj4tMSkgT25seSBvbmUgSU9NTVUg Z3JvdXAgcGVyIGNvbnRhaW5lciBpcyBzdXBwb3J0ZWQgYXMgYW4gSU9NTVUgZ3JvdXAKPi1yZXBy ZXNlbnRzIHRoZSBtaW5pbWFsIGVudGl0eSB3aGljaCBpc29sYXRpb24gY2FuIGJlIGd1YXJhbnRl ZWQgZm9yIGFuZAo+LWdyb3VwcyBhcmUgYWxsb2NhdGVkIHN0YXRpY2FsbHksIG9uZSBwZXIgYSBQ YXJ0aXRpb25hYmxlIEVuZHBvaW50IChQRSkKPisxKSBPbiBvbGRlciBzeXN0ZW1zIChQT1dFUjcg d2l0aCBQNUlPQzIvSU9EQTEpIG9ubHkgb25lIElPTU1VIGdyb3VwIHBlcgo+K2NvbnRhaW5lciBp cyBzdXBwb3J0ZWQgYXMgYW4gSU9NTVUgdGFibGUgaXMgYWxsb2NhdGVkIGF0IHRoZSBib290IHRp bWUsCj4rb25lIHRhYmxlIHBlciBhIElPTU1VIGdyb3VwIHdoaWNoIGlzIGEgUGFydGl0aW9uYWJs ZSBFbmRwb2ludCAoUEUpCj4gKFBFIGlzIG9mdGVuIGEgUENJIGRvbWFpbiBidXQgbm90IGFsd2F5 cykuCj4rTmV3ZXIgc3lzdGVtcyAoUE9XRVI4IHdpdGggSU9EQTIpIGhhdmUgaW1wcm92ZWQgaGFy ZHdhcmUgZGVzaWduIHdoaWNoIGFsbG93cwo+K3RvIHJlbW92ZSB0aGlzIGxpbWl0YXRpb24gYW5k IGhhdmUgbXVsdGlwbGUgSU9NTVUgZ3JvdXBzIHBlciBhIFZGSU8gY29udGFpbmVyLgo+Cj4gMikg VGhlIGhhcmR3YXJlIHN1cHBvcnRzIHNvIGNhbGxlZCBETUEgd2luZG93cyAtIHRoZSBQQ0kgYWRk cmVzcyByYW5nZQo+IHdpdGhpbiB3aGljaCBETUEgdHJhbnNmZXIgaXMgYWxsb3dlZCwgYW55IGF0 dGVtcHQgdG8gYWNjZXNzIGFkZHJlc3Mgc3BhY2UKPkBAIC00MjcsNiArNDI5LDI5IEBAIFRoZSBj b2RlIGZsb3cgZnJvbSB0aGUgZXhhbXBsZSBhYm92ZSBzaG91bGQgYmUgc2xpZ2h0bHkgY2hhbmdl ZDoKPgo+IAkuLi4uCj4KPis1KSBUaGVyZSBpcyB2MiBvZiBTUEFQUiBUQ0UgSU9NTVUuIEl0IGRl cHJlY2F0ZXMgVkZJT19JT01NVV9FTkFCTEUvCj4rVkZJT19JT01NVV9ESVNBQkxFIGFuZCBpbXBs ZW1lbnRzIDIgbmV3IGlvY3RsczoKPitWRklPX0lPTU1VX1NQQVBSX1JFR0lTVEVSX01FTU9SWSBh bmQgVkZJT19JT01NVV9TUEFQUl9VTlJFR0lTVEVSX01FTU9SWQo+Kyh3aGljaCBhcmUgdW5zdXBw b3J0ZWQgaW4gdjEgSU9NTVUpLgo+Kwo+K1BQQzY0IHBhcmF2aXJ0dWFsaXplZCBndWVzdHMgZ2Vu ZXJhdGUgYSBsb3Qgb2YgbWFwL3VubWFwIHJlcXVlc3RzLAo+K2FuZCB0aGUgaGFuZGxpbmcgb2Yg dGhvc2UgaW5jbHVkZXMgcGlubmluZy91bnBpbm5pbmcgcGFnZXMgYW5kIHVwZGF0aW5nCj4rbW06 OmxvY2tlZF92bSBjb3VudGVyIHRvIG1ha2Ugc3VyZSB3ZSBkbyBub3QgZXhjZWVkIHRoZSBybGlt aXQuCj4rVGhlIHYyIElPTU1VIHNwbGl0cyBhY2NvdW50aW5nIGFuZCBwaW5uaW5nIGludG8gc2Vw YXJhdGUgb3BlcmF0aW9uczoKPisKPistIFZGSU9fSU9NTVVfU1BBUFJfUkVHSVNURVJfTUVNT1JZ L1ZGSU9fSU9NTVVfU1BBUFJfVU5SRUdJU1RFUl9NRU1PUlkgaW9jdGxzCj4rcmVjZWl2ZSBhIHVz ZXIgc3BhY2UgYWRkcmVzcyBhbmQgc2l6ZSBvZiB0aGUgYmxvY2sgdG8gYmUgcGlubmVkLgo+K0Jp c2VjdGluZyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBWRklPX0lPTU1VX1VOUkVHSVNURVJfTUVNT1JZ IGlzIGV4cGVjdGVkIHRvCj4rYmUgY2FsbGVkIHdpdGggdGhlIGV4YWN0IGFkZHJlc3MgYW5kIHNp emUgdXNlZCBmb3IgcmVnaXN0ZXJpbmcKPit0aGUgbWVtb3J5IGJsb2NrLiBUaGUgdXNlcnNwYWNl IGlzIG5vdCBleHBlY3RlZCB0byBjYWxsIHRoZXNlIG9mdGVuLgo+K1RoZSByYW5nZXMgYXJlIHN0 b3JlZCBpbiBhIGxpbmtlZCBsaXN0IGluIGEgVkZJTyBjb250YWluZXIuCj4rCj4rLSBWRklPX0lP TU1VX01BUF9ETUEvVkZJT19JT01NVV9VTk1BUF9ETUEgaW9jdGxzIG9ubHkgdXBkYXRlIHRoZSBh Y3R1YWwKPitJT01NVSB0YWJsZSBhbmQgZG8gbm90IGRvIHBpbm5pbmc7IGluc3RlYWQgdGhlc2Ug Y2hlY2sgdGhhdCB0aGUgdXNlcnNwYWNlCj4rYWRkcmVzcyBpcyBmcm9tIHByZS1yZWdpc3RlcmVk IHJhbmdlLgo+Kwo+K1RoaXMgc2VwYXJhdGlvbiBoZWxwcyBpbiBvcHRpbWl6aW5nIERNQSBmb3Ig Z3Vlc3RzLgo+Kwo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPgo+IFsxXSBWRklPIHdhcyBvcmln aW5hbGx5IGFuIGFjcm9ueW0gZm9yICJWaXJ0dWFsIEZ1bmN0aW9uIEkvTyIgaW4gaXRzCj5kaWZm IC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvbW11LmggYi9hcmNoL3Bvd2VycGMv aW5jbHVkZS9hc20vaW9tbXUuaAo+aW5kZXggOWQzNzQ5Mi4uZjk5NTdlYiAxMDA2NDQKPi0tLSBh L2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pb21tdS5oCj4rKysgYi9hcmNoL3Bvd2VycGMvaW5j bHVkZS9hc20vaW9tbXUuaAo+QEAgLTExMiw5ICsxMTIsMTUgQEAgc3RydWN0IGlvbW11X3RhYmxl IHsKPiAJdW5zaWduZWQgbG9uZyAqaXRfbWFwOyAgICAgICAvKiBBIHNpbXBsZSBhbGxvY2F0aW9u IGJpdG1hcCBmb3Igbm93ICovCj4gCXVuc2lnbmVkIGxvbmcgIGl0X3BhZ2Vfc2hpZnQ7LyogdGFi bGUgaW9tbXUgcGFnZSBzaXplICovCj4gCXN0cnVjdCBsaXN0X2hlYWQgaXRfZ3JvdXBfbGlzdDsv KiBMaXN0IG9mIGlvbW11X3RhYmxlX2dyb3VwX2xpbmsgKi8KPisJdW5zaWduZWQgbG9uZyAqaXRf dXNlcnNwYWNlOyAvKiB1c2Vyc3BhY2UgdmlldyBvZiB0aGUgdGFibGUgKi8KPiAJc3RydWN0IGlv bW11X3RhYmxlX29wcyAqaXRfb3BzOwo+IH07Cj4KPisjZGVmaW5lIElPTU1VX1RBQkxFX1VTRVJT UEFDRV9FTlRSWSh0YmwsIGVudHJ5KSBcCj4rCQkoKHRibCktPml0X3VzZXJzcGFjZSA/IFwKPisJ CQkmKCh0YmwpLT5pdF91c2Vyc3BhY2VbKGVudHJ5KSAtICh0YmwpLT5pdF9vZmZzZXRdKSA6IFwK PisJCQlOVUxMKQo+Kwo+IC8qIFB1cmUgMl5uIHZlcnNpb24gb2YgZ2V0X29yZGVyICovCj4gc3Rh dGljIGlubGluZSBfX2F0dHJpYnV0ZV9jb25zdF9fCj4gaW50IGdldF9pb21tdV9vcmRlcih1bnNp Z25lZCBsb25nIHNpemUsIHN0cnVjdCBpb21tdV90YWJsZSAqdGJsKQo+ZGlmZiAtLWdpdCBhL2Ry aXZlcnMvdmZpby92ZmlvX2lvbW11X3NwYXByX3RjZS5jIGIvZHJpdmVycy92ZmlvL3ZmaW9faW9t bXVfc3BhcHJfdGNlLmMKPmluZGV4IDdhODQxMTAuLmNhZGQ5ZjggMTAwNjQ0Cj4tLS0gYS9kcml2 ZXJzL3ZmaW8vdmZpb19pb21tdV9zcGFwcl90Y2UuYwo+KysrIGIvZHJpdmVycy92ZmlvL3ZmaW9f aW9tbXVfc3BhcHJfdGNlLmMKPkBAIC0xOSw4ICsxOSwxMCBAQAo+ICNpbmNsdWRlIDxsaW51eC91 YWNjZXNzLmg+Cj4gI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+ICNpbmNsdWRlIDxsaW51eC92Zmlv Lmg+Cj4rI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KPiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+ Cj4gI2luY2x1ZGUgPGFzbS90Y2UuaD4KPisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+Cj4K PiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OICAiMC4xIgo+ICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAg ICJhaWtAb3psYWJzLnJ1Igo+QEAgLTgxLDYgKzgzLDExIEBAIHN0YXRpYyB2b2lkIGRlY3JlbWVu dF9sb2NrZWRfdm0obG9uZyBucGFnZXMpCj4gICogaW50byBETUEnYmxlIHNwYWNlIHVzaW5nIHRo ZSBJT01NVQo+ICAqLwo+Cj4rc3RydWN0IHRjZV9pb21tdV9ncm91cCB7Cj4rCXN0cnVjdCBsaXN0 X2hlYWQgbmV4dDsKPisJc3RydWN0IGlvbW11X2dyb3VwICpncnA7Cj4rfTsKPisKPiAvKgo+ICAq IFRoZSBjb250YWluZXIgZGVzY3JpcHRvciBzdXBwb3J0cyBvbmx5IGEgc2luZ2xlIGdyb3VwIHBl ciBjb250YWluZXIuCj4gICogUmVxdWlyZWQgYnkgdGhlIEFQSSBhcyB0aGUgY29udGFpbmVyIGlz IG5vdCBzdXBwbGllZCB3aXRoIHRoZSBJT01NVSBncm91cAo+QEAgLTg4LDExICs5NSw4NCBAQCBz dGF0aWMgdm9pZCBkZWNyZW1lbnRfbG9ja2VkX3ZtKGxvbmcgbnBhZ2VzKQo+ICAqLwo+IHN0cnVj dCB0Y2VfY29udGFpbmVyIHsKPiAJc3RydWN0IG11dGV4IGxvY2s7Cj4tCXN0cnVjdCBpb21tdV9n cm91cCAqZ3JwOwo+IAlib29sIGVuYWJsZWQ7Cj4rCWJvb2wgdjI7Cj4gCXVuc2lnbmVkIGxvbmcg bG9ja2VkX3BhZ2VzOwo+KwlzdHJ1Y3QgaW9tbXVfdGFibGUgKnRhYmxlc1tJT01NVV9UQUJMRV9H Uk9VUF9NQVhfVEFCTEVTXTsKPisJc3RydWN0IGxpc3RfaGVhZCBncm91cF9saXN0Owo+IH07Cj4K PitzdGF0aWMgbG9uZyB0Y2VfaW9tbXVfdW5yZWdpc3Rlcl9wYWdlcyhzdHJ1Y3QgdGNlX2NvbnRh aW5lciAqY29udGFpbmVyLAo+KwkJX191NjQgdmFkZHIsIF9fdTY0IHNpemUpCj4rewo+KwlzdHJ1 Y3QgbW1faW9tbXVfdGFibGVfZ3JvdXBfbWVtX3QgKm1lbTsKPisKPisJaWYgKCh2YWRkciAmIH5Q QUdFX01BU0spIHx8IChzaXplICYgflBBR0VfTUFTSykpCj4rCQlyZXR1cm4gLUVJTlZBTDsKPisK PisJbWVtID0gbW1faW9tbXVfbG9va3VwKHZhZGRyLCBzaXplID4+IFBBR0VfU0hJRlQpOwo+Kwlp ZiAoIW1lbSkKPisJCXJldHVybiAtRUlOVkFMOwo+Kwo+KwlyZXR1cm4gbW1faW9tbXVfcHV0KG1l bSk7Cj4rfQo+Kwo+K3N0YXRpYyBsb25nIHRjZV9pb21tdV9yZWdpc3Rlcl9wYWdlcyhzdHJ1Y3Qg dGNlX2NvbnRhaW5lciAqY29udGFpbmVyLAo+KwkJX191NjQgdmFkZHIsIF9fdTY0IHNpemUpCj4r ewo+Kwlsb25nIHJldCA9IDA7Cj4rCXN0cnVjdCBtbV9pb21tdV90YWJsZV9ncm91cF9tZW1fdCAq bWVtID0gTlVMTDsKPisJdW5zaWduZWQgbG9uZyBlbnRyaWVzID0gc2l6ZSA+PiBQQUdFX1NISUZU Owo+Kwo+KwlpZiAoKHZhZGRyICYgflBBR0VfTUFTSykgfHwgKHNpemUgJiB+UEFHRV9NQVNLKSB8 fAo+KwkJCSgodmFkZHIgKyBzaXplKSA8IHZhZGRyKSkKPisJCXJldHVybiAtRUlOVkFMOwo+Kwo+ KwlyZXQgPSBtbV9pb21tdV9nZXQodmFkZHIsIGVudHJpZXMsICZtZW0pOwo+KwlpZiAocmV0KQo+ KwkJcmV0dXJuIHJldDsKPisKPisJY29udGFpbmVyLT5lbmFibGVkID0gdHJ1ZTsKPisKPisJcmV0 dXJuIDA7Cj4rfQo+Kwo+K3N0YXRpYyBsb25nIHRjZV9pb21tdV91c2Vyc3BhY2Vfdmlld19hbGxv YyhzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCkKPit7Cj4rCXVuc2lnbmVkIGxvbmcgY2IgPSBfQUxJ R05fVVAoc2l6ZW9mKHRibC0+aXRfdXNlcnNwYWNlWzBdKSAqCj4rCQkJdGJsLT5pdF9zaXplLCBQ QUdFX1NJWkUpOwo+Kwl1bnNpZ25lZCBsb25nICp1YXM7Cj4rCWxvbmcgcmV0Owo+Kwo+KwlCVUdf T04odGJsLT5pdF91c2Vyc3BhY2UpOwo+Kwo+KwlyZXQgPSB0cnlfaW5jcmVtZW50X2xvY2tlZF92 bShjYiA+PiBQQUdFX1NISUZUKTsKPisJaWYgKHJldCkKPisJCXJldHVybiByZXQ7Cj4rCj4rCXVh cyA9IHZ6YWxsb2MoY2IpOwo+KwlpZiAoIXVhcykgewo+KwkJZGVjcmVtZW50X2xvY2tlZF92bShj YiA+PiBQQUdFX1NISUZUKTsKPisJCXJldHVybiAtRU5PTUVNOwo+Kwl9Cj4rCXRibC0+aXRfdXNl cnNwYWNlID0gdWFzOwo+Kwo+KwlyZXR1cm4gMDsKPit9Cj4rCj4rc3RhdGljIHZvaWQgdGNlX2lv bW11X3VzZXJzcGFjZV92aWV3X2ZyZWUoc3RydWN0IGlvbW11X3RhYmxlICp0YmwpCj4rewo+Kwl1 bnNpZ25lZCBsb25nIGNiID0gX0FMSUdOX1VQKHNpemVvZih0YmwtPml0X3VzZXJzcGFjZVswXSkg Kgo+KwkJCXRibC0+aXRfc2l6ZSwgUEFHRV9TSVpFKTsKPisKPisJaWYgKCF0YmwtPml0X3VzZXJz cGFjZSkKPisJCXJldHVybjsKPisKPisJdmZyZWUodGJsLT5pdF91c2Vyc3BhY2UpOwo+Kwl0Ymwt Pml0X3VzZXJzcGFjZSA9IE5VTEw7Cj4rCWRlY3JlbWVudF9sb2NrZWRfdm0oY2IgPj4gUEFHRV9T SElGVCk7Cj4rfQo+Kwo+IHN0YXRpYyBib29sIHRjZV9wYWdlX2lzX2NvbnRhaW5lZChzdHJ1Y3Qg cGFnZSAqcGFnZSwgdW5zaWduZWQgcGFnZV9zaGlmdCkKPiB7Cj4gCS8qCj5AQCAtMTAzLDE4ICsx ODMsMTggQEAgc3RhdGljIGJvb2wgdGNlX3BhZ2VfaXNfY29udGFpbmVkKHN0cnVjdCBwYWdlICpw YWdlLCB1bnNpZ25lZCBwYWdlX3NoaWZ0KQo+IAlyZXR1cm4gKFBBR0VfU0hJRlQgKyBjb21wb3Vu ZF9vcmRlcihjb21wb3VuZF9oZWFkKHBhZ2UpKSkgPj0gcGFnZV9zaGlmdDsKPiB9Cj4KPitzdGF0 aWMgaW5saW5lIGJvb2wgdGNlX2dyb3Vwc19hdHRhY2hlZChzdHJ1Y3QgdGNlX2NvbnRhaW5lciAq Y29udGFpbmVyKQo+K3sKPisJcmV0dXJuICFsaXN0X2VtcHR5KCZjb250YWluZXItPmdyb3VwX2xp c3QpOwo+K30KPisKPiBzdGF0aWMgbG9uZyB0Y2VfaW9tbXVfZmluZF90YWJsZShzdHJ1Y3QgdGNl X2NvbnRhaW5lciAqY29udGFpbmVyLAo+IAkJcGh5c19hZGRyX3QgaW9iYSwgc3RydWN0IGlvbW11 X3RhYmxlICoqcHRibCkKPiB7Cj4gCWxvbmcgaTsKPi0Jc3RydWN0IGlvbW11X3RhYmxlX2dyb3Vw ICp0YWJsZV9ncm91cDsKPi0KPi0JdGFibGVfZ3JvdXAgPSBpb21tdV9ncm91cF9nZXRfaW9tbXVk YXRhKGNvbnRhaW5lci0+Z3JwKTsKPi0JaWYgKCF0YWJsZV9ncm91cCkKPi0JCXJldHVybiAtMTsK Pgo+IAlmb3IgKGkgPSAwOyBpIDwgSU9NTVVfVEFCTEVfR1JPVVBfTUFYX1RBQkxFUzsgKytpKSB7 Cj4tCQlzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCA9IHRhYmxlX2dyb3VwLT50YWJsZXNbaV07Cj4r CQlzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCA9IGNvbnRhaW5lci0+dGFibGVzW2ldOwo+Cj4gCQlp ZiAodGJsKSB7Cj4gCQkJdW5zaWduZWQgbG9uZyBlbnRyeSA9IGlvYmEgPj4gdGJsLT5pdF9wYWdl X3NoaWZ0Owo+QEAgLTEzNiw5ICsyMTYsNyBAQCBzdGF0aWMgaW50IHRjZV9pb21tdV9lbmFibGUo c3RydWN0IHRjZV9jb250YWluZXIgKmNvbnRhaW5lcikKPiAJaW50IHJldCA9IDA7Cj4gCXVuc2ln bmVkIGxvbmcgbG9ja2VkOwo+IAlzdHJ1Y3QgaW9tbXVfdGFibGVfZ3JvdXAgKnRhYmxlX2dyb3Vw Owo+LQo+LQlpZiAoIWNvbnRhaW5lci0+Z3JwKQo+LQkJcmV0dXJuIC1FTlhJTzsKPisJc3RydWN0 IHRjZV9pb21tdV9ncm91cCAqdGNlZ3JwOwo+Cj4gCWlmICghY3VycmVudC0+bW0pCj4gCQlyZXR1 cm4gLUVTUkNIOyAvKiBwcm9jZXNzIGV4aXRlZCAqLwo+QEAgLTE3NSw3ICsyNTMsMTIgQEAgc3Rh dGljIGludCB0Y2VfaW9tbXVfZW5hYmxlKHN0cnVjdCB0Y2VfY29udGFpbmVyICpjb250YWluZXIp Cj4gCSAqIGFzIHRoZXJlIGlzIG5vIHdheSB0byBrbm93IGhvdyBtdWNoIHdlIHNob3VsZCBpbmNy ZW1lbnQKPiAJICogdGhlIGxvY2tlZF92bSBjb3VudGVyLgo+IAkgKi8KPi0JdGFibGVfZ3JvdXAg PSBpb21tdV9ncm91cF9nZXRfaW9tbXVkYXRhKGNvbnRhaW5lci0+Z3JwKTsKPisJaWYgKCF0Y2Vf Z3JvdXBzX2F0dGFjaGVkKGNvbnRhaW5lcikpCj4rCQlyZXR1cm4gLUVOT0RFVjsKPisKPisJdGNl Z3JwID0gbGlzdF9maXJzdF9lbnRyeSgmY29udGFpbmVyLT5ncm91cF9saXN0LAo+KwkJCXN0cnVj dCB0Y2VfaW9tbXVfZ3JvdXAsIG5leHQpOwo+Kwl0YWJsZV9ncm91cCA9IGlvbW11X2dyb3VwX2dl dF9pb21tdWRhdGEodGNlZ3JwLT5ncnApOwo+IAlpZiAoIXRhYmxlX2dyb3VwKQo+IAkJcmV0dXJu IC1FTk9ERVY7Cj4KPkBAIC0yMTEsNyArMjk0LDcgQEAgc3RhdGljIHZvaWQgKnRjZV9pb21tdV9v cGVuKHVuc2lnbmVkIGxvbmcgYXJnKQo+IHsKPiAJc3RydWN0IHRjZV9jb250YWluZXIgKmNvbnRh aW5lcjsKPgo+LQlpZiAoYXJnICE9IFZGSU9fU1BBUFJfVENFX0lPTU1VKSB7Cj4rCWlmICgoYXJn ICE9IFZGSU9fU1BBUFJfVENFX0lPTU1VKSAmJiAoYXJnICE9IFZGSU9fU1BBUFJfVENFX3YyX0lP TU1VKSkgewo+IAkJcHJfZXJyKCJ0Y2VfdmZpbzogV3JvbmcgSU9NTVUgdHlwZVxuIik7Cj4gCQly ZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiAJfQo+QEAgLTIyMSwxOCArMzA0LDQ1IEBAIHN0YXRp YyB2b2lkICp0Y2VfaW9tbXVfb3Blbih1bnNpZ25lZCBsb25nIGFyZykKPiAJCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOwo+Cj4gCW11dGV4X2luaXQoJmNvbnRhaW5lci0+bG9jayk7Cj4rCUlOSVRf TElTVF9IRUFEX1JDVSgmY29udGFpbmVyLT5ncm91cF9saXN0KTsKPisKPisJY29udGFpbmVyLT52 MiA9IGFyZyA9PSBWRklPX1NQQVBSX1RDRV92Ml9JT01NVTsKPgo+IAlyZXR1cm4gY29udGFpbmVy Owo+IH0KPgo+K3N0YXRpYyBpbnQgdGNlX2lvbW11X2NsZWFyKHN0cnVjdCB0Y2VfY29udGFpbmVy ICpjb250YWluZXIsCj4rCQlzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwKPisJCXVuc2lnbmVkIGxv bmcgZW50cnksIHVuc2lnbmVkIGxvbmcgcGFnZXMpOwo+K3N0YXRpYyB2b2lkIHRjZV9pb21tdV9m cmVlX3RhYmxlKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsKTsKPisKPiBzdGF0aWMgdm9pZCB0Y2Vf aW9tbXVfcmVsZWFzZSh2b2lkICppb21tdV9kYXRhKQo+IHsKPiAJc3RydWN0IHRjZV9jb250YWlu ZXIgKmNvbnRhaW5lciA9IGlvbW11X2RhdGE7Cj4rCXN0cnVjdCBpb21tdV90YWJsZV9ncm91cCAq dGFibGVfZ3JvdXA7Cj4rCXN0cnVjdCB0Y2VfaW9tbXVfZ3JvdXAgKnRjZWdycDsKPisJbG9uZyBp Owo+Cj4tCVdBUk5fT04oY29udGFpbmVyLT5ncnApOwo+Kwl3aGlsZSAodGNlX2dyb3Vwc19hdHRh Y2hlZChjb250YWluZXIpKSB7Cj4rCQl0Y2VncnAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZjb250YWlu ZXItPmdyb3VwX2xpc3QsCj4rCQkJCXN0cnVjdCB0Y2VfaW9tbXVfZ3JvdXAsIG5leHQpOwo+KwkJ dGFibGVfZ3JvdXAgPSBpb21tdV9ncm91cF9nZXRfaW9tbXVkYXRhKHRjZWdycC0+Z3JwKTsKPisJ CXRjZV9pb21tdV9kZXRhY2hfZ3JvdXAoaW9tbXVfZGF0YSwgdGNlZ3JwLT5ncnApOwo+Kwl9Cj4K Pi0JaWYgKGNvbnRhaW5lci0+Z3JwKQo+LQkJdGNlX2lvbW11X2RldGFjaF9ncm91cChpb21tdV9k YXRhLCBjb250YWluZXItPmdycCk7Cj4rCS8qCj4rCSAqIElmIFZGSU8gY3JlYXRlZCBhIHRhYmxl LCBpdCB3YXMgbm90IGRpc3Bvc2VkCj4rCSAqIGJ5IHRjZV9pb21tdV9kZXRhY2hfZ3JvdXAoKSBz byBkbyBpdCBub3cuCj4rCSAqLwo+Kwlmb3IgKGkgPSAwOyBpIDwgSU9NTVVfVEFCTEVfR1JPVVBf TUFYX1RBQkxFUzsgKytpKSB7Cj4rCQlzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCA9IGNvbnRhaW5l ci0+dGFibGVzW2ldOwo+Kwo+KwkJaWYgKCF0YmwpCj4rCQkJY29udGludWU7Cj4rCj4rCQl0Y2Vf aW9tbXVfY2xlYXIoY29udGFpbmVyLCB0YmwsIHRibC0+aXRfb2Zmc2V0LCB0YmwtPml0X3NpemUp Owo+KwkJdGNlX2lvbW11X2ZyZWVfdGFibGUodGJsKTsKPisJfQo+Cj4gCXRjZV9pb21tdV9kaXNh YmxlKGNvbnRhaW5lcik7Cj4gCW11dGV4X2Rlc3Ryb3koJmNvbnRhaW5lci0+bG9jayk7Cj5AQCAt MjQ5LDYgKzM1OSw0NyBAQCBzdGF0aWMgdm9pZCB0Y2VfaW9tbXVfdW51c2VfcGFnZShzdHJ1Y3Qg dGNlX2NvbnRhaW5lciAqY29udGFpbmVyLAo+IAlwdXRfcGFnZShwYWdlKTsKPiB9Cj4KPitzdGF0 aWMgaW50IHRjZV9pb21tdV9wcmVyZWdfdWFfdG9faHBhKHVuc2lnbmVkIGxvbmcgdGNlLCB1bnNp Z25lZCBsb25nIHNpemUsCj4rCQl1bnNpZ25lZCBsb25nICpwaHBhLCBzdHJ1Y3QgbW1faW9tbXVf dGFibGVfZ3JvdXBfbWVtX3QgKipwbWVtKQo+K3sKPisJbG9uZyByZXQgPSAwOwo+KwlzdHJ1Y3Qg bW1faW9tbXVfdGFibGVfZ3JvdXBfbWVtX3QgKm1lbTsKPisKPisJbWVtID0gbW1faW9tbXVfbG9v a3VwKHRjZSwgc2l6ZSk7Cj4rCWlmICghbWVtKQo+KwkJcmV0dXJuIC1FSU5WQUw7Cj4rCj4rCXJl dCA9IG1tX2lvbW11X3VhX3RvX2hwYShtZW0sIHRjZSwgcGhwYSk7Cj4rCWlmIChyZXQpCj4rCQly ZXR1cm4gLUVJTlZBTDsKPisKPisJKnBtZW0gPSBtZW07Cj4rCj4rCXJldHVybiAwOwo+K30KPisK PitzdGF0aWMgdm9pZCB0Y2VfaW9tbXVfdW51c2VfcGFnZV92MihzdHJ1Y3QgaW9tbXVfdGFibGUg KnRibCwKPisJCXVuc2lnbmVkIGxvbmcgZW50cnkpCj4rewo+KwlzdHJ1Y3QgbW1faW9tbXVfdGFi bGVfZ3JvdXBfbWVtX3QgKm1lbSA9IE5VTEw7Cj4rCWludCByZXQ7Cj4rCXVuc2lnbmVkIGxvbmcg aHBhID0gMDsKPisJdW5zaWduZWQgbG9uZyAqcHVhID0gSU9NTVVfVEFCTEVfVVNFUlNQQUNFX0VO VFJZKHRibCwgZW50cnkpOwo+Kwo+KwlpZiAoIXB1YSB8fCAhY3VycmVudCB8fCAhY3VycmVudC0+ bW0pCj4rCQlyZXR1cm47Cj4rCj4rCXJldCA9IHRjZV9pb21tdV9wcmVyZWdfdWFfdG9faHBhKCpw dWEsIElPTU1VX1BBR0VfU0laRSh0YmwpLAo+KwkJCSZocGEsICZtZW0pOwo+KwlpZiAocmV0KQo+ KwkJcHJfZGVidWcoIiVzOiB0Y2UgJWx4IGF0ICMlbHggd2FzIG5vdCBjYWNoZWQsIHJldD0lZFxu IiwKPisJCQkJX19mdW5jX18sICpwdWEsIGVudHJ5LCByZXQpOwo+KwlpZiAobWVtKQo+KwkJbW1f aW9tbXVfbWFwcGVkX2RlYyhtZW0pOwo+Kwo+KwkqcHVhID0gMDsKPit9Cj4rCj4gc3RhdGljIGlu dCB0Y2VfaW9tbXVfY2xlYXIoc3RydWN0IHRjZV9jb250YWluZXIgKmNvbnRhaW5lciwKPiAJCXN0 cnVjdCBpb21tdV90YWJsZSAqdGJsLAo+IAkJdW5zaWduZWQgbG9uZyBlbnRyeSwgdW5zaWduZWQg bG9uZyBwYWdlcykKPkBAIC0yNjcsNiArNDE4LDExIEBAIHN0YXRpYyBpbnQgdGNlX2lvbW11X2Ns ZWFyKHN0cnVjdCB0Y2VfY29udGFpbmVyICpjb250YWluZXIsCj4gCQlpZiAoZGlyZWN0aW9uID09 IERNQV9OT05FKQo+IAkJCWNvbnRpbnVlOwo+Cj4rCQlpZiAoY29udGFpbmVyLT52Mikgewo+KwkJ CXRjZV9pb21tdV91bnVzZV9wYWdlX3YyKHRibCwgZW50cnkpOwo+KwkJCWNvbnRpbnVlOwo+KwkJ fQo+Kwo+IAkJdGNlX2lvbW11X3VudXNlX3BhZ2UoY29udGFpbmVyLCBvbGRocGEpOwo+IAl9Cj4K PkBAIC0zMzMsNiArNDg5LDY0IEBAIHN0YXRpYyBsb25nIHRjZV9pb21tdV9idWlsZChzdHJ1Y3Qg dGNlX2NvbnRhaW5lciAqY29udGFpbmVyLAo+IAlyZXR1cm4gcmV0Owo+IH0KPgo+K3N0YXRpYyBs b25nIHRjZV9pb21tdV9idWlsZF92MihzdHJ1Y3QgdGNlX2NvbnRhaW5lciAqY29udGFpbmVyLAo+ KwkJc3RydWN0IGlvbW11X3RhYmxlICp0YmwsCj4rCQl1bnNpZ25lZCBsb25nIGVudHJ5LCB1bnNp Z25lZCBsb25nIHRjZSwgdW5zaWduZWQgbG9uZyBwYWdlcywKPisJCWVudW0gZG1hX2RhdGFfZGly ZWN0aW9uIGRpcmVjdGlvbikKPit7Cj4rCWxvbmcgaSwgcmV0ID0gMDsKPisJc3RydWN0IHBhZ2Ug KnBhZ2U7Cj4rCXVuc2lnbmVkIGxvbmcgaHBhOwo+KwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBk aXJ0bXA7Cj4rCj4rCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgKytpKSB7Cj4rCQlzdHJ1Y3QgbW1f aW9tbXVfdGFibGVfZ3JvdXBfbWVtX3QgKm1lbSA9IE5VTEw7Cj4rCQl1bnNpZ25lZCBsb25nICpw dWEgPSBJT01NVV9UQUJMRV9VU0VSU1BBQ0VfRU5UUlkodGJsLAo+KwkJCQllbnRyeSArIGkpOwo+ Kwo+KwkJcmV0ID0gdGNlX2lvbW11X3ByZXJlZ191YV90b19ocGEodGNlLCBJT01NVV9QQUdFX1NJ WkUodGJsKSwKPisJCQkJJmhwYSwgJm1lbSk7Cj4rCQlpZiAocmV0KQo+KwkJCWJyZWFrOwo+Kwo+ KwkJcGFnZSA9IHBmbl90b19wYWdlKGhwYSA+PiBQQUdFX1NISUZUKTsKPisJCWlmICghdGNlX3Bh Z2VfaXNfY29udGFpbmVkKHBhZ2UsIHRibC0+aXRfcGFnZV9zaGlmdCkpIHsKPisJCQlyZXQgPSAt RVBFUk07Cj4rCQkJYnJlYWs7Cj4rCQl9Cj4rCj4rCQkvKiBQcmVzZXJ2ZSBvZmZzZXQgd2l0aGlu IElPTU1VIHBhZ2UgKi8KPisJCWhwYSB8PSB0Y2UgJiBJT01NVV9QQUdFX01BU0sodGJsKSAmIH5Q QUdFX01BU0s7Cj4rCQlkaXJ0bXAgPSBkaXJlY3Rpb247Cj4rCj4rCQkvKiBUaGUgcmVnaXN0ZXJl ZCByZWdpb24gaXMgYmVpbmcgdW5yZWdpc3RlcmVkICovCj4rCQlpZiAobW1faW9tbXVfbWFwcGVk X2luYyhtZW0pKQo+KwkJCWJyZWFrOwo+Kwo+KwkJcmV0ID0gaW9tbXVfdGNlX3hjaGcodGJsLCBl bnRyeSArIGksICZocGEsICZkaXJ0bXApOwo+KwkJaWYgKHJldCkgewo+KwkJCS8qIGRpcnRtcCBj YW5ub3QgYmUgRE1BX05PTkUgaGVyZSAqLwo+KwkJCXRjZV9pb21tdV91bnVzZV9wYWdlX3YyKHRi bCwgZW50cnkgKyBpKTsKPisJCQlwcl9lcnIoImlvbW11X3RjZTogJXMgZmFpbGVkIGlvYmE9JWx4 LCB0Y2U9JWx4LCByZXQ9JWxkXG4iLAo+KwkJCQkJX19mdW5jX18sIGVudHJ5IDw8IHRibC0+aXRf cGFnZV9zaGlmdCwKPisJCQkJCXRjZSwgcmV0KTsKPisJCQlicmVhazsKPisJCX0KPisKPisJCWlm IChkaXJ0bXAgIT0gRE1BX05PTkUpCj4rCQkJdGNlX2lvbW11X3VudXNlX3BhZ2VfdjIodGJsLCBl bnRyeSArIGkpOwo+Kwo+KwkJKnB1YSA9IHRjZTsKPisKPisJCXRjZSArPSBJT01NVV9QQUdFX1NJ WkUodGJsKTsKPisJfQo+Kwo+KwlpZiAocmV0KQo+KwkJdGNlX2lvbW11X2NsZWFyKGNvbnRhaW5l ciwgdGJsLCBlbnRyeSwgaSk7Cj4rCj4rCXJldHVybiByZXQ7Cj4rfQo+Kwo+IHN0YXRpYyBsb25n IHRjZV9pb21tdV9jcmVhdGVfdGFibGUoc3RydWN0IHRjZV9jb250YWluZXIgKmNvbnRhaW5lciwK PiAJCQlzdHJ1Y3QgaW9tbXVfdGFibGVfZ3JvdXAgKnRhYmxlX2dyb3VwLAo+IAkJCWludCBudW0s Cj5AQCAtMzU4LDYgKzU3MiwxMiBAQCBzdGF0aWMgbG9uZyB0Y2VfaW9tbXVfY3JlYXRlX3RhYmxl KHN0cnVjdCB0Y2VfY29udGFpbmVyICpjb250YWluZXIsCj4gCVdBUk5fT04oIXJldCAmJiAhKCpw dGJsKS0+aXRfb3BzLT5mcmVlKTsKPiAJV0FSTl9PTighcmV0ICYmICgoKnB0YmwpLT5pdF9hbGxv Y2F0ZWRfc2l6ZSAhPSB0YWJsZV9zaXplKSk7Cj4KPisJaWYgKCFyZXQgJiYgY29udGFpbmVyLT52 Mikgewo+KwkJcmV0ID0gdGNlX2lvbW11X3VzZXJzcGFjZV92aWV3X2FsbG9jKCpwdGJsKTsKPisJ CWlmIChyZXQpCj4rCQkJKCpwdGJsKS0+aXRfb3BzLT5mcmVlKCpwdGJsKTsKPisJfQo+Kwo+IAlp ZiAocmV0KQo+IAkJZGVjcmVtZW50X2xvY2tlZF92bSh0YWJsZV9zaXplID4+IFBBR0VfU0hJRlQp Owo+Cj5AQCAtMzY4LDYgKzU4OCw3IEBAIHN0YXRpYyB2b2lkIHRjZV9pb21tdV9mcmVlX3RhYmxl KHN0cnVjdCBpb21tdV90YWJsZSAqdGJsKQo+IHsKPiAJdW5zaWduZWQgbG9uZyBwYWdlcyA9IHRi bC0+aXRfYWxsb2NhdGVkX3NpemUgPj4gUEFHRV9TSElGVDsKPgo+Kwl0Y2VfaW9tbXVfdXNlcnNw YWNlX3ZpZXdfZnJlZSh0YmwpOwo+IAl0YmwtPml0X29wcy0+ZnJlZSh0YmwpOwo+IAlkZWNyZW1l bnRfbG9ja2VkX3ZtKHBhZ2VzKTsKPiB9Cj5AQCAtMzgzLDYgKzYwNCw3IEBAIHN0YXRpYyBsb25n IHRjZV9pb21tdV9pb2N0bCh2b2lkICppb21tdV9kYXRhLAo+IAljYXNlIFZGSU9fQ0hFQ0tfRVhU RU5TSU9OOgo+IAkJc3dpdGNoIChhcmcpIHsKPiAJCWNhc2UgVkZJT19TUEFQUl9UQ0VfSU9NTVU6 Cj4rCQljYXNlIFZGSU9fU1BBUFJfVENFX3YyX0lPTU1VOgo+IAkJCXJldCA9IDE7Cj4gCQkJYnJl YWs7Cj4gCQlkZWZhdWx0Ogo+QEAgLTM5NCwxMiArNjE2LDE1IEBAIHN0YXRpYyBsb25nIHRjZV9p b21tdV9pb2N0bCh2b2lkICppb21tdV9kYXRhLAo+Cj4gCWNhc2UgVkZJT19JT01NVV9TUEFQUl9U Q0VfR0VUX0lORk86IHsKPiAJCXN0cnVjdCB2ZmlvX2lvbW11X3NwYXByX3RjZV9pbmZvIGluZm87 Cj4rCQlzdHJ1Y3QgdGNlX2lvbW11X2dyb3VwICp0Y2VncnA7Cj4gCQlzdHJ1Y3QgaW9tbXVfdGFi bGVfZ3JvdXAgKnRhYmxlX2dyb3VwOwo+Cj4tCQlpZiAoV0FSTl9PTighY29udGFpbmVyLT5ncnAp KQo+KwkJaWYgKCF0Y2VfZ3JvdXBzX2F0dGFjaGVkKGNvbnRhaW5lcikpCj4gCQkJcmV0dXJuIC1F TlhJTzsKPgo+LQkJdGFibGVfZ3JvdXAgPSBpb21tdV9ncm91cF9nZXRfaW9tbXVkYXRhKGNvbnRh aW5lci0+Z3JwKTsKPisJCXRjZWdycCA9IGxpc3RfZmlyc3RfZW50cnkoJmNvbnRhaW5lci0+Z3Jv dXBfbGlzdCwKPisJCQkJc3RydWN0IHRjZV9pb21tdV9ncm91cCwgbmV4dCk7Cj4rCQl0YWJsZV9n cm91cCA9IGlvbW11X2dyb3VwX2dldF9pb21tdWRhdGEodGNlZ3JwLT5ncnApOwo+Cj4gCQlpZiAo IXRhYmxlX2dyb3VwKQo+IAkJCXJldHVybiAtRU5YSU87Cj5AQCAtNDY4LDExICs2OTMsMTggQEAg c3RhdGljIGxvbmcgdGNlX2lvbW11X2lvY3RsKHZvaWQgKmlvbW11X2RhdGEsCj4gCQlpZiAocmV0 KQo+IAkJCXJldHVybiByZXQ7Cj4KPi0JCXJldCA9IHRjZV9pb21tdV9idWlsZChjb250YWluZXIs IHRibCwKPi0JCQkJcGFyYW0uaW92YSA+PiB0YmwtPml0X3BhZ2Vfc2hpZnQsCj4tCQkJCXBhcmFt LnZhZGRyLAo+LQkJCQlwYXJhbS5zaXplID4+IHRibC0+aXRfcGFnZV9zaGlmdCwKPi0JCQkJZGly ZWN0aW9uKTsKPisJCWlmIChjb250YWluZXItPnYyKQo+KwkJCXJldCA9IHRjZV9pb21tdV9idWls ZF92Mihjb250YWluZXIsIHRibCwKPisJCQkJCXBhcmFtLmlvdmEgPj4gdGJsLT5pdF9wYWdlX3No aWZ0LAo+KwkJCQkJcGFyYW0udmFkZHIsCj4rCQkJCQlwYXJhbS5zaXplID4+IHRibC0+aXRfcGFn ZV9zaGlmdCwKPisJCQkJCWRpcmVjdGlvbik7Cj4rCQllbHNlCj4rCQkJcmV0ID0gdGNlX2lvbW11 X2J1aWxkKGNvbnRhaW5lciwgdGJsLAo+KwkJCQkJcGFyYW0uaW92YSA+PiB0YmwtPml0X3BhZ2Vf c2hpZnQsCj4rCQkJCQlwYXJhbS52YWRkciwKPisJCQkJCXBhcmFtLnNpemUgPj4gdGJsLT5pdF9w YWdlX3NoaWZ0LAo+KwkJCQkJZGlyZWN0aW9uKTsKPgo+IAkJaW9tbXVfZmx1c2hfdGNlKHRibCk7 Cj4KPkBAIC01MTgsNyArNzUwLDYxIEBAIHN0YXRpYyBsb25nIHRjZV9pb21tdV9pb2N0bCh2b2lk ICppb21tdV9kYXRhLAo+Cj4gCQlyZXR1cm4gcmV0Owo+IAl9Cj4rCWNhc2UgVkZJT19JT01NVV9T UEFQUl9SRUdJU1RFUl9NRU1PUlk6IHsKPisJCXN0cnVjdCB2ZmlvX2lvbW11X3NwYXByX3JlZ2lz dGVyX21lbW9yeSBwYXJhbTsKPisKPisJCWlmICghY29udGFpbmVyLT52MikKPisJCQlicmVhazsK PisKPisJCW1pbnN6ID0gb2Zmc2V0b2ZlbmQoc3RydWN0IHZmaW9faW9tbXVfc3BhcHJfcmVnaXN0 ZXJfbWVtb3J5LAo+KwkJCQlzaXplKTsKPisKPisJCWlmIChjb3B5X2Zyb21fdXNlcigmcGFyYW0s ICh2b2lkIF9fdXNlciAqKWFyZywgbWluc3opKQo+KwkJCXJldHVybiAtRUZBVUxUOwo+Kwo+KwkJ aWYgKHBhcmFtLmFyZ3N6IDwgbWluc3opCj4rCQkJcmV0dXJuIC1FSU5WQUw7Cj4rCj4rCQkvKiBO byBmbGFnIGlzIHN1cHBvcnRlZCBub3cgKi8KPisJCWlmIChwYXJhbS5mbGFncykKPisJCQlyZXR1 cm4gLUVJTlZBTDsKPisKPisJCW11dGV4X2xvY2soJmNvbnRhaW5lci0+bG9jayk7Cj4rCQlyZXQg PSB0Y2VfaW9tbXVfcmVnaXN0ZXJfcGFnZXMoY29udGFpbmVyLCBwYXJhbS52YWRkciwKPisJCQkJ cGFyYW0uc2l6ZSk7Cj4rCQltdXRleF91bmxvY2soJmNvbnRhaW5lci0+bG9jayk7Cj4rCj4rCQly ZXR1cm4gcmV0Owo+Kwl9Cj4rCWNhc2UgVkZJT19JT01NVV9TUEFQUl9VTlJFR0lTVEVSX01FTU9S WTogewo+KwkJc3RydWN0IHZmaW9faW9tbXVfc3BhcHJfcmVnaXN0ZXJfbWVtb3J5IHBhcmFtOwo+ Kwo+KwkJaWYgKCFjb250YWluZXItPnYyKQo+KwkJCWJyZWFrOwo+Kwo+KwkJbWluc3ogPSBvZmZz ZXRvZmVuZChzdHJ1Y3QgdmZpb19pb21tdV9zcGFwcl9yZWdpc3Rlcl9tZW1vcnksCj4rCQkJCXNp emUpOwo+Kwo+KwkJaWYgKGNvcHlfZnJvbV91c2VyKCZwYXJhbSwgKHZvaWQgX191c2VyICopYXJn LCBtaW5zeikpCj4rCQkJcmV0dXJuIC1FRkFVTFQ7Cj4rCj4rCQlpZiAocGFyYW0uYXJnc3ogPCBt aW5zeikKPisJCQlyZXR1cm4gLUVJTlZBTDsKPisKPisJCS8qIE5vIGZsYWcgaXMgc3VwcG9ydGVk IG5vdyAqLwo+KwkJaWYgKHBhcmFtLmZsYWdzKQo+KwkJCXJldHVybiAtRUlOVkFMOwo+Kwo+KwkJ bXV0ZXhfbG9jaygmY29udGFpbmVyLT5sb2NrKTsKPisJCXJldCA9IHRjZV9pb21tdV91bnJlZ2lz dGVyX3BhZ2VzKGNvbnRhaW5lciwgcGFyYW0udmFkZHIsIHBhcmFtLnNpemUpOwo+KwkJbXV0ZXhf dW5sb2NrKCZjb250YWluZXItPmxvY2spOwoKQ29tcGxhaW4gZnJvbSBjaGVja3BhdGNoLnBsOgoK V0FSTklORzogbGluZSBvdmVyIDgwIGNoYXJhY3RlcnMKIzYwMDogRklMRTogZHJpdmVycy92Zmlv L3ZmaW9faW9tbXVfc3BhcHJfdGNlLmM6Nzk5OgorCQlyZXQgPSB0Y2VfaW9tbXVfdW5yZWdpc3Rl cl9wYWdlcyhjb250YWluZXIsIHBhcmFtLnZhZGRyLCBwYXJhbS5zaXplKTsKCgpUaGFua3MsCkdh dmluCgo+Kwo+KwkJcmV0dXJuIHJldDsKPisJfQo+IAljYXNlIFZGSU9fSU9NTVVfRU5BQkxFOgo+ KwkJaWYgKGNvbnRhaW5lci0+djIpCj4rCQkJYnJlYWs7Cj4rCj4gCQltdXRleF9sb2NrKCZjb250 YWluZXItPmxvY2spOwo+IAkJcmV0ID0gdGNlX2lvbW11X2VuYWJsZShjb250YWluZXIpOwo+IAkJ bXV0ZXhfdW5sb2NrKCZjb250YWluZXItPmxvY2spOwo+QEAgLTUyNiwxNiArODEyLDI3IEBAIHN0 YXRpYyBsb25nIHRjZV9pb21tdV9pb2N0bCh2b2lkICppb21tdV9kYXRhLAo+Cj4KPiAJY2FzZSBW RklPX0lPTU1VX0RJU0FCTEU6Cj4rCQlpZiAoY29udGFpbmVyLT52MikKPisJCQlicmVhazsKPisK PiAJCW11dGV4X2xvY2soJmNvbnRhaW5lci0+bG9jayk7Cj4gCQl0Y2VfaW9tbXVfZGlzYWJsZShj b250YWluZXIpOwo+IAkJbXV0ZXhfdW5sb2NrKCZjb250YWluZXItPmxvY2spOwo+IAkJcmV0dXJu IDA7Cj4tCWNhc2UgVkZJT19FRUhfUEVfT1A6Cj4tCQlpZiAoIWNvbnRhaW5lci0+Z3JwKQo+LQkJ CXJldHVybiAtRU5PREVWOwo+Cj4tCQlyZXR1cm4gdmZpb19zcGFwcl9pb21tdV9lZWhfaW9jdGwo Y29udGFpbmVyLT5ncnAsCj4tCQkJCQkJICBjbWQsIGFyZyk7Cj4rCWNhc2UgVkZJT19FRUhfUEVf T1A6IHsKPisJCXN0cnVjdCB0Y2VfaW9tbXVfZ3JvdXAgKnRjZWdycDsKPisKPisJCXJldCA9IDA7 Cj4rCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRjZWdycCwgJmNvbnRhaW5lci0+Z3JvdXBfbGlzdCwg bmV4dCkgewo+KwkJCXJldCA9IHZmaW9fc3BhcHJfaW9tbXVfZWVoX2lvY3RsKHRjZWdycC0+Z3Jw LAo+KwkJCQkJY21kLCBhcmcpOwo+KwkJCWlmIChyZXQpCj4rCQkJCXJldHVybiByZXQ7Cj4rCQl9 Cj4rCQlyZXR1cm4gcmV0Owo+Kwl9Cj4rCj4gCX0KPgo+IAlyZXR1cm4gLUVOT1RUWTsKPkBAIC01 NDcsMTQgKzg0NCwxNyBAQCBzdGF0aWMgdm9pZCB0Y2VfaW9tbXVfcmVsZWFzZV9vd25lcnNoaXAo c3RydWN0IHRjZV9jb250YWluZXIgKmNvbnRhaW5lciwKPiAJaW50IGk7Cj4KPiAJZm9yIChpID0g MDsgaSA8IElPTU1VX1RBQkxFX0dST1VQX01BWF9UQUJMRVM7ICsraSkgewo+LQkJc3RydWN0IGlv bW11X3RhYmxlICp0YmwgPSB0YWJsZV9ncm91cC0+dGFibGVzW2ldOwo+KwkJc3RydWN0IGlvbW11 X3RhYmxlICp0YmwgPSBjb250YWluZXItPnRhYmxlc1tpXTsKPgo+IAkJaWYgKCF0YmwpCj4gCQkJ Y29udGludWU7Cj4KPiAJCXRjZV9pb21tdV9jbGVhcihjb250YWluZXIsIHRibCwgdGJsLT5pdF9v ZmZzZXQsIHRibC0+aXRfc2l6ZSk7Cj4rCQl0Y2VfaW9tbXVfdXNlcnNwYWNlX3ZpZXdfZnJlZSh0 YmwpOwo+IAkJaWYgKHRibC0+aXRfbWFwKQo+IAkJCWlvbW11X3JlbGVhc2Vfb3duZXJzaGlwKHRi bCk7Cj4rCj4rCQljb250YWluZXItPnRhYmxlc1tpXSA9IE5VTEw7Cj4gCX0KPiB9Cj4KPkBAIC01 NjksNyArODY5LDEwIEBAIHN0YXRpYyBpbnQgdGNlX2lvbW11X3Rha2Vfb3duZXJzaGlwKHN0cnVj dCB0Y2VfY29udGFpbmVyICpjb250YWluZXIsCj4gCQlpZiAoIXRibCB8fCAhdGJsLT5pdF9tYXAp Cj4gCQkJY29udGludWU7Cj4KPi0JCXJjID0gaW9tbXVfdGFrZV9vd25lcnNoaXAodGJsKTsKPisJ CXJjID0gdGNlX2lvbW11X3VzZXJzcGFjZV92aWV3X2FsbG9jKHRibCk7Cj4rCQlpZiAoIXJjKQo+ KwkJCXJjID0gaW9tbXVfdGFrZV9vd25lcnNoaXAodGJsKTsKPisKPiAJCWlmIChyYykgewo+IAkJ CWZvciAoaiA9IDA7IGogPCBpOyArK2opCj4gCQkJCWlvbW11X3JlbGVhc2Vfb3duZXJzaGlwKAo+ QEAgLTU3OSw2ICs4ODIsOSBAQCBzdGF0aWMgaW50IHRjZV9pb21tdV90YWtlX293bmVyc2hpcChz dHJ1Y3QgdGNlX2NvbnRhaW5lciAqY29udGFpbmVyLAo+IAkJfQo+IAl9Cj4KPisJZm9yIChpID0g MDsgaSA8IElPTU1VX1RBQkxFX0dST1VQX01BWF9UQUJMRVM7ICsraSkKPisJCWNvbnRhaW5lci0+ dGFibGVzW2ldID0gdGFibGVfZ3JvdXAtPnRhYmxlc1tpXTsKPisKPiAJcmV0dXJuIDA7Cj4gfQo+ Cj5AQCAtNTkyLDE4ICs4OTgsOCBAQCBzdGF0aWMgdm9pZCB0Y2VfaW9tbXVfcmVsZWFzZV9vd25l cnNoaXBfZGR3KHN0cnVjdCB0Y2VfY29udGFpbmVyICpjb250YWluZXIsCj4gCQlyZXR1cm47Cj4g CX0KPgo+LQlmb3IgKGkgPSAwOyBpIDwgSU9NTVVfVEFCTEVfR1JPVVBfTUFYX1RBQkxFUzsgKytp KSB7Cj4tCQkvKiBTdG9yZSB0YWJsZSBwb2ludGVyIGFzIHVuc2V0X3dpbmRvdyByZXNldHMgaXQg Ki8KPi0JCXN0cnVjdCBpb21tdV90YWJsZSAqdGJsID0gdGFibGVfZ3JvdXAtPnRhYmxlc1tpXTsK Pi0KPi0JCWlmICghdGJsKQo+LQkJCWNvbnRpbnVlOwo+LQo+Kwlmb3IgKGkgPSAwOyBpIDwgSU9N TVVfVEFCTEVfR1JPVVBfTUFYX1RBQkxFUzsgKytpKQo+IAkJdGFibGVfZ3JvdXAtPm9wcy0+dW5z ZXRfd2luZG93KHRhYmxlX2dyb3VwLCBpKTsKPi0JCXRjZV9pb21tdV9jbGVhcihjb250YWluZXIs IHRibCwKPi0JCQkJdGJsLT5pdF9vZmZzZXQsIHRibC0+aXRfc2l6ZSk7Cj4tCQl0Y2VfaW9tbXVf ZnJlZV90YWJsZSh0YmwpOwo+LQl9Cj4KPiAJdGFibGVfZ3JvdXAtPm9wcy0+cmVsZWFzZV9vd25l cnNoaXAodGFibGVfZ3JvdXApOwo+IH0KPkBAIC02MTEsNyArOTA3LDcgQEAgc3RhdGljIHZvaWQg dGNlX2lvbW11X3JlbGVhc2Vfb3duZXJzaGlwX2RkdyhzdHJ1Y3QgdGNlX2NvbnRhaW5lciAqY29u dGFpbmVyLAo+IHN0YXRpYyBsb25nIHRjZV9pb21tdV90YWtlX293bmVyc2hpcF9kZHcoc3RydWN0 IHRjZV9jb250YWluZXIgKmNvbnRhaW5lciwKPiAJCXN0cnVjdCBpb21tdV90YWJsZV9ncm91cCAq dGFibGVfZ3JvdXApCj4gewo+LQlsb25nIHJldDsKPisJbG9uZyBpLCByZXQgPSAwOwo+IAlzdHJ1 Y3QgaW9tbXVfdGFibGUgKnRibCA9IE5VTEw7Cj4KPiAJaWYgKCF0YWJsZV9ncm91cC0+b3BzLT5j cmVhdGVfdGFibGUgfHwgIXRhYmxlX2dyb3VwLT5vcHMtPnNldF93aW5kb3cgfHwKPkBAIC02MjIs MjMgKzkxOCw0NSBAQCBzdGF0aWMgbG9uZyB0Y2VfaW9tbXVfdGFrZV9vd25lcnNoaXBfZGR3KHN0 cnVjdCB0Y2VfY29udGFpbmVyICpjb250YWluZXIsCj4KPiAJdGFibGVfZ3JvdXAtPm9wcy0+dGFr ZV9vd25lcnNoaXAodGFibGVfZ3JvdXApOwo+Cj4tCXJldCA9IHRjZV9pb21tdV9jcmVhdGVfdGFi bGUoY29udGFpbmVyLAo+LQkJCXRhYmxlX2dyb3VwLAo+LQkJCTAsIC8qIHdpbmRvdyBudW1iZXIg Ki8KPi0JCQlJT01NVV9QQUdFX1NISUZUXzRLLAo+LQkJCXRhYmxlX2dyb3VwLT50Y2UzMl9zaXpl LAo+LQkJCTEsIC8qIGRlZmF1bHQgbGV2ZWxzICovCj4tCQkJJnRibCk7Cj4tCWlmICghcmV0KSB7 Cj4tCQlyZXQgPSB0YWJsZV9ncm91cC0+b3BzLT5zZXRfd2luZG93KHRhYmxlX2dyb3VwLCAwLCB0 YmwpOwo+KwkvKgo+KwkgKiBJZiBpdCB0aGUgZmlyc3QgZ3JvdXAgYXR0YWNoZWQsIGNoZWNrIGlm IHRoZXJlIGlzCj4rCSAqIGEgZGVmYXVsdCBETUEgd2luZG93IGFuZCBjcmVhdGUgb25lIGlmIG5v bmUgYXMKPisJICogdGhlIHVzZXJzcGFjZSBleHBlY3RzIGl0IHRvIGV4aXN0Lgo+KwkgKi8KPisJ aWYgKCF0Y2VfZ3JvdXBzX2F0dGFjaGVkKGNvbnRhaW5lcikgJiYgIWNvbnRhaW5lci0+dGFibGVz WzBdKSB7Cj4rCQlyZXQgPSB0Y2VfaW9tbXVfY3JlYXRlX3RhYmxlKGNvbnRhaW5lciwKPisJCQkJ dGFibGVfZ3JvdXAsCj4rCQkJCTAsIC8qIHdpbmRvdyBudW1iZXIgKi8KPisJCQkJSU9NTVVfUEFH RV9TSElGVF80SywKPisJCQkJdGFibGVfZ3JvdXAtPnRjZTMyX3NpemUsCj4rCQkJCTEsIC8qIGRl ZmF1bHQgbGV2ZWxzICovCj4rCQkJCSZ0YmwpOwo+IAkJaWYgKHJldCkKPi0JCQl0Y2VfaW9tbXVf ZnJlZV90YWJsZSh0YmwpOwo+KwkJCWdvdG8gcmVsZWFzZV9leGl0Owo+IAkJZWxzZQo+LQkJCXRh YmxlX2dyb3VwLT50YWJsZXNbMF0gPSB0Ymw7Cj4rCQkJY29udGFpbmVyLT50YWJsZXNbMF0gPSB0 Ymw7Cj4gCX0KPgo+LQlpZiAocmV0KQo+LQkJdGFibGVfZ3JvdXAtPm9wcy0+cmVsZWFzZV9vd25l cnNoaXAodGFibGVfZ3JvdXApOwo+KwkvKiBTZXQgYWxsIHdpbmRvd3MgdG8gdGhlIG5ldyBncm91 cCAqLwo+Kwlmb3IgKGkgPSAwOyBpIDwgSU9NTVVfVEFCTEVfR1JPVVBfTUFYX1RBQkxFUzsgKytp KSB7Cj4rCQl0YmwgPSBjb250YWluZXItPnRhYmxlc1tpXTsKPisKPisJCWlmICghdGJsKQo+KwkJ CWNvbnRpbnVlOwo+Kwo+KwkJLyogU2V0IHRoZSBkZWZhdWx0IHdpbmRvdyB0byBhIG5ldyBncm91 cCAqLwo+KwkJcmV0ID0gdGFibGVfZ3JvdXAtPm9wcy0+c2V0X3dpbmRvdyh0YWJsZV9ncm91cCwg aSwgdGJsKTsKPisJCWlmIChyZXQpCj4rCQkJZ290byByZWxlYXNlX2V4aXQ7Cj4rCX0KPisKPisJ cmV0dXJuIDA7Cj4rCj4rcmVsZWFzZV9leGl0Ogo+Kwlmb3IgKGkgPSAwOyBpIDwgSU9NTVVfVEFC TEVfR1JPVVBfTUFYX1RBQkxFUzsgKytpKQo+KwkJdGFibGVfZ3JvdXAtPm9wcy0+dW5zZXRfd2lu ZG93KHRhYmxlX2dyb3VwLCBpKTsKPisKPisJdGFibGVfZ3JvdXAtPm9wcy0+cmVsZWFzZV9vd25l cnNoaXAodGFibGVfZ3JvdXApOwo+Cj4gCXJldHVybiByZXQ7Cj4gfQo+QEAgLTY0OSwyOSArOTY3 LDQ0IEBAIHN0YXRpYyBpbnQgdGNlX2lvbW11X2F0dGFjaF9ncm91cCh2b2lkICppb21tdV9kYXRh LAo+IAlpbnQgcmV0Owo+IAlzdHJ1Y3QgdGNlX2NvbnRhaW5lciAqY29udGFpbmVyID0gaW9tbXVf ZGF0YTsKPiAJc3RydWN0IGlvbW11X3RhYmxlX2dyb3VwICp0YWJsZV9ncm91cDsKPisJc3RydWN0 IHRjZV9pb21tdV9ncm91cCAqdGNlZ3JwID0gTlVMTDsKPgo+IAltdXRleF9sb2NrKCZjb250YWlu ZXItPmxvY2spOwo+Cj4gCS8qIHByX2RlYnVnKCJ0Y2VfdmZpbzogQXR0YWNoaW5nIGdyb3VwICMl dSB0byBpb21tdSAlcFxuIiwKPiAJCQlpb21tdV9ncm91cF9pZChpb21tdV9ncm91cCksIGlvbW11 X2dyb3VwKTsgKi8KPi0JaWYgKGNvbnRhaW5lci0+Z3JwKSB7Cj4tCQlwcl93YXJuKCJ0Y2VfdmZp bzogT25seSBvbmUgZ3JvdXAgcGVyIElPTU1VIGNvbnRhaW5lciBpcyBhbGxvd2VkLCBleGlzdGlu ZyBpZD0lZCwgYXR0YWNoaW5nIGlkPSVkXG4iLAo+LQkJCQlpb21tdV9ncm91cF9pZChjb250YWlu ZXItPmdycCksCj4tCQkJCWlvbW11X2dyb3VwX2lkKGlvbW11X2dyb3VwKSk7Cj4tCQlyZXQgPSAt RUJVU1k7Cj4tCQlnb3RvIHVubG9ja19leGl0Owo+LQl9Cj4tCj4tCWlmIChjb250YWluZXItPmVu YWJsZWQpIHsKPi0JCXByX2VycigidGNlX3ZmaW86IGF0dGFjaGluZyBncm91cCAjJXUgdG8gZW5h YmxlZCBjb250YWluZXJcbiIsCj4tCQkJCWlvbW11X2dyb3VwX2lkKGlvbW11X2dyb3VwKSk7Cj4t CQlyZXQgPSAtRUJVU1k7Cj4tCQlnb3RvIHVubG9ja19leGl0Owo+LQl9Cj4tCj4gCXRhYmxlX2dy b3VwID0gaW9tbXVfZ3JvdXBfZ2V0X2lvbW11ZGF0YShpb21tdV9ncm91cCk7Cj4tCWlmICghdGFi bGVfZ3JvdXApIHsKPi0JCXJldCA9IC1FTlhJTzsKPisKPisJaWYgKHRjZV9ncm91cHNfYXR0YWNo ZWQoY29udGFpbmVyKSAmJiAoIXRhYmxlX2dyb3VwLT5vcHMgfHwKPisJCQkhdGFibGVfZ3JvdXAt Pm9wcy0+dGFrZV9vd25lcnNoaXAgfHwKPisJCQkhdGFibGVfZ3JvdXAtPm9wcy0+cmVsZWFzZV9v d25lcnNoaXApKSB7Cj4rCQlyZXQgPSAtRUJVU1k7Cj4rCQlnb3RvIHVubG9ja19leGl0Owo+Kwl9 Cj4rCj4rCS8qIENoZWNrIGlmIG5ldyBncm91cCBoYXMgdGhlIHNhbWUgaW9tbXVfb3BzIChpLmUu IGNvbXBhdGlibGUpICovCj4rCWxpc3RfZm9yX2VhY2hfZW50cnkodGNlZ3JwLCAmY29udGFpbmVy LT5ncm91cF9saXN0LCBuZXh0KSB7Cj4rCQlzdHJ1Y3QgaW9tbXVfdGFibGVfZ3JvdXAgKnRhYmxl X2dyb3VwX3RtcDsKPisKPisJCWlmICh0Y2VncnAtPmdycCA9PSBpb21tdV9ncm91cCkgewo+KwkJ CXByX3dhcm4oInRjZV92ZmlvOiBHcm91cCAlZCBpcyBhbHJlYWR5IGF0dGFjaGVkXG4iLAo+KwkJ CQkJaW9tbXVfZ3JvdXBfaWQoaW9tbXVfZ3JvdXApKTsKPisJCQlyZXQgPSAtRUJVU1k7Cj4rCQkJ Z290byB1bmxvY2tfZXhpdDsKPisJCX0KPisJCXRhYmxlX2dyb3VwX3RtcCA9IGlvbW11X2dyb3Vw X2dldF9pb21tdWRhdGEodGNlZ3JwLT5ncnApOwo+KwkJaWYgKHRhYmxlX2dyb3VwX3RtcC0+b3Bz ICE9IHRhYmxlX2dyb3VwLT5vcHMpIHsKPisJCQlwcl93YXJuKCJ0Y2VfdmZpbzogR3JvdXAgJWQg aXMgaW5jb21wYXRpYmxlIHdpdGggZ3JvdXAgJWRcbiIsCj4rCQkJCQlpb21tdV9ncm91cF9pZChp b21tdV9ncm91cCksCj4rCQkJCQlpb21tdV9ncm91cF9pZCh0Y2VncnAtPmdycCkpOwo+KwkJCXJl dCA9IC1FUEVSTTsKPisJCQlnb3RvIHVubG9ja19leGl0Owo+KwkJfQo+Kwl9Cj4rCj4rCXRjZWdy cCA9IGt6YWxsb2Moc2l6ZW9mKCp0Y2VncnApLCBHRlBfS0VSTkVMKTsKPisJaWYgKCF0Y2VncnAp IHsKPisJCXJldCA9IC1FTk9NRU07Cj4gCQlnb3RvIHVubG9ja19leGl0Owo+IAl9Cj4KPkBAIC02 ODEsMTAgKzEwMTQsMTUgQEAgc3RhdGljIGludCB0Y2VfaW9tbXVfYXR0YWNoX2dyb3VwKHZvaWQg KmlvbW11X2RhdGEsCj4gCWVsc2UKPiAJCXJldCA9IHRjZV9pb21tdV90YWtlX293bmVyc2hpcF9k ZHcoY29udGFpbmVyLCB0YWJsZV9ncm91cCk7Cj4KPi0JaWYgKCFyZXQpCj4tCQljb250YWluZXIt PmdycCA9IGlvbW11X2dyb3VwOwo+KwlpZiAoIXJldCkgewo+KwkJdGNlZ3JwLT5ncnAgPSBpb21t dV9ncm91cDsKPisJCWxpc3RfYWRkKCZ0Y2VncnAtPm5leHQsICZjb250YWluZXItPmdyb3VwX2xp c3QpOwo+Kwl9Cj4KPiB1bmxvY2tfZXhpdDoKPisJaWYgKHJldCAmJiB0Y2VncnApCj4rCQlrZnJl ZSh0Y2VncnApOwo+Kwo+IAltdXRleF91bmxvY2soJmNvbnRhaW5lci0+bG9jayk7Cj4KPiAJcmV0 dXJuIHJldDsKPkBAIC02OTUsMjQgKzEwMzMsMjYgQEAgc3RhdGljIHZvaWQgdGNlX2lvbW11X2Rl dGFjaF9ncm91cCh2b2lkICppb21tdV9kYXRhLAo+IHsKPiAJc3RydWN0IHRjZV9jb250YWluZXIg KmNvbnRhaW5lciA9IGlvbW11X2RhdGE7Cj4gCXN0cnVjdCBpb21tdV90YWJsZV9ncm91cCAqdGFi bGVfZ3JvdXA7Cj4rCWJvb2wgZm91bmQgPSBmYWxzZTsKPisJc3RydWN0IHRjZV9pb21tdV9ncm91 cCAqdGNlZ3JwOwo+Cj4gCW11dGV4X2xvY2soJmNvbnRhaW5lci0+bG9jayk7Cj4tCWlmIChpb21t dV9ncm91cCAhPSBjb250YWluZXItPmdycCkgewo+LQkJcHJfd2FybigidGNlX3ZmaW86IGRldGFj aGluZyBncm91cCAjJXUsIGV4cGVjdGVkIGdyb3VwIGlzICMldVxuIiwKPi0JCQkJaW9tbXVfZ3Jv dXBfaWQoaW9tbXVfZ3JvdXApLAo+LQkJCQlpb21tdV9ncm91cF9pZChjb250YWluZXItPmdycCkp Owo+Kwo+KwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRjZWdycCwgJmNvbnRhaW5lci0+Z3JvdXBfbGlz dCwgbmV4dCkgewo+KwkJaWYgKHRjZWdycC0+Z3JwID09IGlvbW11X2dyb3VwKSB7Cj4rCQkJZm91 bmQgPSB0cnVlOwo+KwkJCWJyZWFrOwo+KwkJfQo+Kwl9Cj4rCj4rCWlmICghZm91bmQpIHsKPisJ CXByX3dhcm4oInRjZV92ZmlvOiBkZXRhY2hpbmcgdW5hdHRhY2hlZCBncm91cCAjJXVcbiIsCj4r CQkJCWlvbW11X2dyb3VwX2lkKGlvbW11X2dyb3VwKSk7Cj4gCQlnb3RvIHVubG9ja19leGl0Owo+ IAl9Cj4KPi0JaWYgKGNvbnRhaW5lci0+ZW5hYmxlZCkgewo+LQkJcHJfd2FybigidGNlX3ZmaW86 IGRldGFjaGluZyBncm91cCAjJXUgZnJvbSBlbmFibGVkIGNvbnRhaW5lciwgZm9yY2luZyBkaXNh YmxlXG4iLAo+LQkJCQlpb21tdV9ncm91cF9pZChjb250YWluZXItPmdycCkpOwo+LQkJdGNlX2lv bW11X2Rpc2FibGUoY29udGFpbmVyKTsKPi0JfQo+LQo+LQkvKiBwcl9kZWJ1ZygidGNlX3ZmaW86 IGRldGFjaGluZyBncm91cCAjJXUgZnJvbSBpb21tdSAlcFxuIiwKPi0JICAgaW9tbXVfZ3JvdXBf aWQoaW9tbXVfZ3JvdXApLCBpb21tdV9ncm91cCk7ICovCj4tCWNvbnRhaW5lci0+Z3JwID0gTlVM TDsKPisJbGlzdF9kZWwoJnRjZWdycC0+bmV4dCk7Cj4rCWtmcmVlKHRjZWdycCk7Cj4KPiAJdGFi bGVfZ3JvdXAgPSBpb21tdV9ncm91cF9nZXRfaW9tbXVkYXRhKGlvbW11X2dyb3VwKTsKPiAJQlVH X09OKCF0YWJsZV9ncm91cCk7Cj5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8u aCBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgKPmluZGV4IGI1N2I3NTAuLjhmZGNmYjkgMTAw NjQ0Cj4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oCj4rKysgYi9pbmNsdWRlL3VhcGkv bGludXgvdmZpby5oCj5AQCAtMzYsNiArMzYsOCBAQAo+IC8qIFR3by1zdGFnZSBJT01NVSAqLwo+ ICNkZWZpbmUgVkZJT19UWVBFMV9ORVNUSU5HX0lPTU1VCTYJLyogSW1wbGllcyB2MiAqLwo+Cj4r I2RlZmluZSBWRklPX1NQQVBSX1RDRV92Ml9JT01NVQkJNwo+Kwo+IC8qCj4gICogVGhlIElPQ1RM IGludGVyZmFjZSBpcyBkZXNpZ25lZCBmb3IgZXh0ZW5zaWJpbGl0eSBieSBlbWJlZGRpbmcgdGhl Cj4gICogc3RydWN0dXJlIGxlbmd0aCAoYXJnc3opIGFuZCBmbGFncyBpbnRvIHN0cnVjdHVyZXMg cGFzc2VkIGJldHdlZW4KPkBAIC00OTUsNiArNDk3LDMxIEBAIHN0cnVjdCB2ZmlvX2VlaF9wZV9v cCB7Cj4KPiAjZGVmaW5lIFZGSU9fRUVIX1BFX09QCQkJX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNF ICsgMjEpCj4KPisvKioKPisgKiBWRklPX0lPTU1VX1NQQVBSX1JFR0lTVEVSX01FTU9SWSAtIF9J T1coVkZJT19UWVBFLCBWRklPX0JBU0UgKyAxNywgc3RydWN0IHZmaW9faW9tbXVfc3BhcHJfcmVn aXN0ZXJfbWVtb3J5KQo+KyAqCj4rICogUmVnaXN0ZXJzIHVzZXIgc3BhY2UgbWVtb3J5IHdoZXJl IERNQSBpcyBhbGxvd2VkLiBJdCBwaW5zCj4rICogdXNlciBwYWdlcyBhbmQgZG9lcyB0aGUgbG9j a2VkIG1lbW9yeSBhY2NvdW50aW5nIHNvCj4rICogc3Vic2VxdWVudCBWRklPX0lPTU1VX01BUF9E TUEvVkZJT19JT01NVV9VTk1BUF9ETUEgY2FsbHMKPisgKiBnZXQgZmFzdGVyLgo+KyAqLwo+K3N0 cnVjdCB2ZmlvX2lvbW11X3NwYXByX3JlZ2lzdGVyX21lbW9yeSB7Cj4rCV9fdTMyCWFyZ3N6Owo+ KwlfX3UzMglmbGFnczsKPisJX191NjQJdmFkZHI7CQkJCS8qIFByb2Nlc3MgdmlydHVhbCBhZGRy ZXNzICovCj4rCV9fdTY0CXNpemU7CQkJCS8qIFNpemUgb2YgbWFwcGluZyAoYnl0ZXMpICovCj4r fTsKPisjZGVmaW5lIFZGSU9fSU9NTVVfU1BBUFJfUkVHSVNURVJfTUVNT1JZCV9JTyhWRklPX1RZ UEUsIFZGSU9fQkFTRSArIDE3KQo+Kwo+Ky8qKgo+KyAqIFZGSU9fSU9NTVVfU1BBUFJfVU5SRUdJ U1RFUl9NRU1PUlkgLSBfSU9XKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTgsIHN0cnVjdCB2Zmlv X2lvbW11X3NwYXByX3JlZ2lzdGVyX21lbW9yeSkKPisgKgo+KyAqIFVucmVnaXN0ZXJzIHVzZXIg c3BhY2UgbWVtb3J5IHJlZ2lzdGVyZWQgd2l0aAo+KyAqIFZGSU9fSU9NTVVfU1BBUFJfUkVHSVNU RVJfTUVNT1JZLgo+KyAqIFVzZXMgdmZpb19pb21tdV9zcGFwcl9yZWdpc3Rlcl9tZW1vcnkgZm9y IHBhcmFtZXRlcnMuCj4rICovCj4rI2RlZmluZSBWRklPX0lPTU1VX1NQQVBSX1VOUkVHSVNURVJf TUVNT1JZCV9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArIDE4KQo+Kwo+IC8qICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov Cj4KPiAjZW5kaWYgLyogX1VBUElWRklPX0ggKi8KPi0tIAo+Mi40LjAucmMzLjguZ2ZiM2U3ZDUK PgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXhw cGMtZGV2IG1haWxpbmcgbGlzdApMaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZwpodHRwczov L2xpc3RzLm96bGFicy5vcmcvbGlzdGluZm8vbGludXhwcGMtZGV2