From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: passt.top; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=git1nzey; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by passt.top (Postfix) with ESMTPS id DAE075A0262 for ; Fri, 19 Jun 2026 19:08:03 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1781888882; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=wzh7SbbxSh51AaO+e7odsyaRQ4o2jlDAoRDSYpttytg=; b=git1nzeybbU5AUCnm3zK9F4IqXQBwmhJOtexfAILRGTPANa5nSL2FodG3tEvRKopYdNb7s Z274mglBQQ4USBnFkqBAwV6oMuoQ/L057yOndRZTsE3pEdDpE4zu96wWwDt9gvZGr2xpr3 prNdKntgBGEsttNRZUT6M7oWdyn8AsI= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-374-dMhMkB10MlSo0CSiWpIlBw-1; Fri, 19 Jun 2026 13:08:01 -0400 X-MC-Unique: dMhMkB10MlSo0CSiWpIlBw-1 X-Mimecast-MFC-AGG-ID: dMhMkB10MlSo0CSiWpIlBw_1781888880 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-490b2f22ea2so20626765e9.1 for ; Fri, 19 Jun 2026 10:08:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781888880; x=1782493680; h=content-transfer-encoding:in-reply-to:autocrypt:from :content-language:references:cc:to:subject:user-agent:mime-version :date:message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=wzh7SbbxSh51AaO+e7odsyaRQ4o2jlDAoRDSYpttytg=; b=ZV/SU7Aa8gKephXY6nslvSbHXoUcEsvT9nCU3Eb2GDKWPrF0I4nWi7ReLYcW9M7bCK DMxY85CA5z8quU13374iQRB9bhz4wCvTqqx3HUZIYsGrdJEIaOjNL0wpHH8XkzemmTyK ZqsD2cmKfu3X7ZPGholOgiuU90WVGmg0rMMzSRbRGCCK4cdXrAu7/GefMXIbJoNvLJrt eG/rWrQukVVrMGwuCXfDhxV52z5nhxft9M8kxotHBgxsgtn2D6d2VCSk3vMpHpPKVUzO ePIWImCj+EeYHdh7mLBtueyREDQu4fiidfIPN4fiys4YRlE2UcGDTdwNjApQ41HPnKAn XVzQ== X-Gm-Message-State: AOJu0Yy+LuKLyCq8NN4UJR7ws8lllSoQYBwdD56uP51hvxNie6/2ICZ5 xLz21nMk7xcsZ3FK4tLfyopkRwHaM+QVRAv7VbBlDZXUnwcBhr4e/KBY/c0MctxYSd8HGz7XXbQ lOOgUanU8RX5i08pAOOulEzXQJahqQ+8Wd9sajciQLWihZACSK78SFx1HbFGAnqp4 X-Gm-Gg: AfdE7clavIC/rVjys0htLfBiIJ8IPklgxlw34SNLteujGb801EvycIq5ol6iyJGYJ6I 5D+2YpjUt2+gDlKOZac4f0kFOZO0EH/6uUYG1yYF74AZhZvhBsUT92bkwoL+hayEPNlkC7PBPXB cXrW+mQxSBVuRtG0JSDqUZBVZd+IsedSSDc4iAvf8YIrwdv13IttGxSr6FS4gWseRZ6Z03ilXXN DCtA2Jyz/3IDXXsIofmVLl5qZZpX2FXms84mr7aZ7H5/bmw3rRP3OJ5JT9d2PPsTSgCkZY6WUUs LxX0SF6uNfHWQ6KT6DTCluv+ymDryng1Rd7UosdwLi0NfSV3ZHYaFvJB/O6iikx6urIOy0ZSpcE Ay86rLrJUcRHqmK+ZmwQwZ+g7CrKvwUvUvV7ZdyWDbpukANff0g== X-Received: by 2002:a05:600c:46d2:b0:492:465a:7e5b with SMTP id 5b1f17b1804b1-492465a7e8bmr29699355e9.22.1781888879302; Fri, 19 Jun 2026 10:07:59 -0700 (PDT) X-Received: by 2002:a05:600c:46d2:b0:492:465a:7e5b with SMTP id 5b1f17b1804b1-492465a7e8bmr29698665e9.22.1781888878667; Fri, 19 Jun 2026 10:07:58 -0700 (PDT) Received: from ?IPV6:2a01:e0a:e10:ef90:343a:68f:2e91:95c? ([2a01:e0a:e10:ef90:343a:68f:2e91:95c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49240f054e3sm70237145e9.2.2026.06.19.10.07.56 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2026 10:07:57 -0700 (PDT) Message-ID: <499724cc-6262-402d-9e63-b38ec171a7b2@redhat.com> Date: Fri, 19 Jun 2026 19:07:56 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v5 06/12] tcp: Pass queue pair explicitly through TCP send path To: David Gibson References: <20260616125130.1324274-1-lvivier@redhat.com> <20260616125130.1324274-7-lvivier@redhat.com> From: Laurent Vivier Autocrypt: addr=lvivier@redhat.com; keydata= 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 In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: O8Bt75fD5vGy34EHeOEed3GTJUt2OLq3_D9O3YfsWns_1781888880 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 Message-ID-Hash: PETD4YZHZ2ZQ32RZYWA3RO3KS74S5E7Y X-Message-ID-Hash: PETD4YZHZ2ZQ32RZYWA3RO3KS74S5E7Y X-MailFrom: lvivier@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: passt-dev@passt.top X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: T24gNi8xOS8yNiAwODowMCwgRGF2aWQgR2lic29uIHdyb3RlOg0KPiBPbiBUdWUsIEp1biAxNiwg MjAyNiBhdCAwMjo1MToyNFBNICswMjAwLCBMYXVyZW50IFZpdmllciB3cm90ZToNCj4+IFRocmVh ZCBhIHFwYWlyIHBhcmFtZXRlciBmcm9tIHRoZSBlbnRyeSBwb2ludHMgKHRjcF9zb2NrX2hhbmRs ZXIsDQo+PiB0Y3BfdGltZXJfaGFuZGxlciwgdGNwX3RhcF9oYW5kbGVyLCB0Y3BfZGVmZXJfaGFu ZGxlcikgdGhyb3VnaCBldmVyeQ0KPj4gaW50ZXJtZWRpYXRlIGZ1bmN0aW9uIGRvd24gdG8gdGhl IHZob3N0LXVzZXIgc2VuZCBmdW5jdGlvbnMsIHNvIGNhbGxlcnMNCj4+IGV4cGxpY2l0bHkgc2Vs ZWN0IHRoZSB0YXJnZXQgUlggdmlydHF1ZXVlIGluc3RlYWQgb2YgaGFyZGNvZGluZw0KPj4gUVBB SVJfREVGQVVMVC4NCj4+DQo+PiBBZGQgYSBxcGFpciBwYXJhbWV0ZXIgdG8gdGNwX3NlbmRfZmxh ZygpLCB0Y3BfZGF0YV9mcm9tX3NvY2soKSwNCj4+IHRjcF9yc3RfZG8oKSBhbmQgaXRzIHRjcF9y c3QoKSBtYWNybywgdGNwX3Jld2luZF9zZXEoKSwNCj4+IHRjcF9kYXRhX2Zyb21fdGFwKCksIHRj cF9jb25uX2Zyb21fc29ja19maW5pc2goKSwgdGNwX2Nvbm5lY3RfZmluaXNoKCksDQo+PiB0Y3Bf dGFwX3dpbmRvd191cGRhdGUoKSwgdGNwX2Nvbm5fZnJvbV90YXAoKSwgdGNwX3JzdF9ub19jb25u KCksDQo+PiB0Y3Bfa2VlcGFsaXZlKCksIGFuZCB0Y3BfaW5hY3Rpdml0eSgpLg0KPiANCj4gRm9y IHRoZSB0by1ndWVzdCBmdW5jdGlvbnMgd2hpY2ggdGFrZSBhIGNvbm5lY3Rpb24gcGFyYW1ldGVy LCB0aGlzDQo+IHNlZW1zIG9kZCB0byBtZS4gIENhbid0IHRoZXkgZGVkdWNlIHRoZSByaWdodCBx dWV1ZSBmcm9tIHRoZQ0KPiBjb25uZWN0aW9uPw0KDQpUaGUgY29ubmVjdGlvbidzIHFwYWlyIChj b25uLT5mLnFwYWlyKSBjYW4gY2hhbmdlIGF0IGFueSB0aW1lIHdoZW4NCmFub3RoZXIgdGhyZWFk IHByb2Nlc3NlcyBhIHRhcCBwYWNrZXQgZm9yIHRoZSBzYW1lIGZsb3cgYW5kIGNhbGxzDQpGTE9X X01JR1JBVEUoKS4NCg0KSWYgYSBzb2NrZXQgZXZlbnQgZmlyZXMgb24gcXBhaXIgMCdzIGVwb2xs IGluc3RhbmNlIGFuZCB3ZSByZWFkDQpjb25uLT5mLnFwYWlyIGR1cmluZyBwcm9jZXNzaW5nLCBh bm90aGVyIHRocmVhZCBtaWdodCBjaGFuZ2UgaXQNCmNvbmN1cnJlbnRseSB2aWEgRkxPV19NSUdS QVRFKCkuICBUaGUgcXBhaXIgZnJvbSB0aGUgZXBvbGwgZXZlbnQgaXMNCnRoZSBzdGFibGUsIHJh Y2UtZnJlZSByZWZlcmVuY2UgZm9yICJ3aGljaCBxdWV1ZSBhbSBJIG9wZXJhdGluZyBvbi4iDQoN ClNvIHRoZSBleHBsaWNpdCBwYXJhbWV0ZXIgaXMgaW50ZW50aW9uYWw6IGl0IGNhcnJpZXMgdGhl IHFwYWlyIGZyb20NCnRoZSBlcG9sbCBldmVudCB0aHJvdWdoIHRoZSBjYWxsIGNoYWluLCBpbmRl cGVuZGVudCBvZiB0aGUgbXV0YWJsZQ0KZmxvdyBzdGF0ZS4NCg0KPiANCj4gSXQgbWFrZXMgc2Vu c2UsIG9idmlvdXNseSwgZm9yIGFueXRoaW5nIHdpdGhvdXQgYSBjb25uZWN0aW9uDQo+IHBhcmFt ZXRlci4gIEFuZCBpdCBtYWtlcyBzZW5zZSB0byBtZSBmb3IgZnJvbS1ndWVzdCBmdW5jdGlvbnMs IHNpbmNlDQo+IHRoZSBndWVzdCBtaWdodCBoYXZlIG1pZ3JhdGVkIHRoZSBjb25uZWN0aW9uIHRv IGEgZGlmZmVyZW50IHF1ZXVlDQo+IHNpbmNlIGxhc3Qgd2UgaGVhcmQgYWJvdXQgaXQuDQo+IA0K Pj4gdGNwX3Z1X3NlbmRfZmxhZygpIGFuZCB0Y3BfdnVfZGF0YV9mcm9tX3NvY2soKSBub3cgdXNl IHRoZSBwYXNzZWQNCj4+IHFwYWlyIHRvIHNlbGVjdCB0aGUgUlggdmlydHF1ZXVlIGluc3RlYWQg b2YgYWx3YXlzIHVzaW5nDQo+PiBRUEFJUl9ERUZBVUxULg0KPj4NCj4+IFRoZSBidWZmZXItYmFz ZWQgcGF0aCAodGNwX2J1Zi5jKSBkb2VzIG5vdCB0aHJlYWQgcXBhaXIgc2luY2UgaXQgaXMNCj4+ IG9ubHkgdXNlZCBpbiBub24tdmhvc3QtdXNlciBtb2RlLg0KPj4NCj4+IE5vIGZ1bmN0aW9uYWwg Y2hhbmdlLg0KPj4NCj4+IFNpZ25lZC1vZmYtYnk6IExhdXJlbnQgVml2aWVyIDxsdml2aWVyQHJl ZGhhdC5jb20+DQo+PiAtLS0NCj4+ICAgcGFzc3QuYyAgICAgICAgfCAgMTIgKy0tDQo+PiAgIHRh cC5jICAgICAgICAgIHwgICA4ICstDQo+PiAgIHRjcC5jICAgICAgICAgIHwgMTk5ICsrKysrKysr KysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4+ICAgdGNwLmggICAg ICAgICAgfCAgMTUgKystLQ0KPj4gICB0Y3BfYnVmLmMgICAgICB8ICAxMCArLS0NCj4+ICAgdGNw X2ludGVybmFsLmggfCAgIDcgKy0NCj4+ICAgdGNwX3Z1LmMgICAgICAgfCAgMTkgKysrLS0NCj4+ ICAgdGNwX3Z1LmggICAgICAgfCAgIDYgKy0NCj4+ICAgOCBmaWxlcyBjaGFuZ2VkLCAxNTcgaW5z ZXJ0aW9ucygrKSwgMTE5IGRlbGV0aW9ucygtKQ0KPj4NCj4+IGRpZmYgLS1naXQgYS9wYXNzdC5j IGIvcGFzc3QuYw0KPj4gaW5kZXggNzFlYjRmMDE5MmUyLi45NTY5ZjkyMGVlMjggMTAwNjQ0DQo+ PiAtLS0gYS9wYXNzdC5jDQo+PiArKysgYi9wYXNzdC5jDQo+PiBAQCAtOTgsMTEgKzk4LDEzIEBA IHN0cnVjdCBwYXNzdF9zdGF0cyB7DQo+PiAgICAqIHBvc3RfaGFuZGxlcigpIC0gUnVuIHBlcmlv ZGljIGFuZCBkZWZlcnJlZCB0YXNrcyBmb3IgTDQgcHJvdG9jb2wgaGFuZGxlcnMNCj4+ICAgICog QGM6CQlFeGVjdXRpb24gY29udGV4dA0KPj4gICAgKiBAbm93OglDdXJyZW50IHRpbWVzdGFtcA0K Pj4gKyAqIEBxcGFpcjoJUXVldWUgcGFpciB0byBwcm9jZXNzDQo+PiAgICAqLw0KPj4gLXN0YXRp YyB2b2lkIHBvc3RfaGFuZGxlcihzdHJ1Y3QgY3R4ICpjLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMg Km5vdykNCj4+ICtzdGF0aWMgdm9pZCBwb3N0X2hhbmRsZXIoc3RydWN0IGN0eCAqYywgY29uc3Qg c3RydWN0IHRpbWVzcGVjICpub3csDQo+PiArCQkJIHVuc2lnbmVkIGludCBxcGFpcikNCj4+ICAg ew0KPj4gICAJaWYgKCFjLT5ub190Y3ApDQo+PiAtCQl0Y3BfZGVmZXJfaGFuZGxlcihjLCBub3cp Ow0KPj4gKwkJdGNwX2RlZmVyX2hhbmRsZXIoYywgbm93LCBxcGFpcik7DQo+PiAgIA0KPj4gICAJ Zmxvd19kZWZlcl9oYW5kbGVyKGMsIG5vdyk7DQo+PiAgIAlmd2Rfc2Nhbl9wb3J0c190aW1lcihj LCBub3cpOw0KPj4gQEAgLTI1MSw3ICsyNTMsNyBAQCBzdGF0aWMgdm9pZCBwYXNzdF93b3JrZXIo dm9pZCAqb3BhcXVlLCBpbnQgbmZkcywgc3RydWN0IGVwb2xsX2V2ZW50ICpldmVudHMpDQo+PiAg IAkJCXBhc3RhX25ldG5zX3F1aXRfdGltZXJfaGFuZGxlcihjLCByZWYpOw0KPj4gICAJCQlicmVh azsNCj4+ICAgCQljYXNlIEVQT0xMX1RZUEVfVENQOg0KPj4gLQkJCXRjcF9zb2NrX2hhbmRsZXIo YywgcmVmLCBldmVudG1hc2spOw0KPj4gKwkJCXRjcF9zb2NrX2hhbmRsZXIoYywgcmVmLCBldmVu dG1hc2ssIFFQQUlSX0RFRkFVTFQpOw0KPj4gICAJCQlicmVhazsNCj4+ICAgCQljYXNlIEVQT0xM X1RZUEVfVENQX1NQTElDRToNCj4+ICAgCQkJdGNwX3NwbGljZV9zb2NrX2hhbmRsZXIoYywgcmVm LCBldmVudG1hc2ssICZub3cpOw0KPj4gQEAgLTI2MCw3ICsyNjIsNyBAQCBzdGF0aWMgdm9pZCBw YXNzdF93b3JrZXIodm9pZCAqb3BhcXVlLCBpbnQgbmZkcywgc3RydWN0IGVwb2xsX2V2ZW50ICpl dmVudHMpDQo+PiAgIAkJCXRjcF9saXN0ZW5faGFuZGxlcihjLCByZWYsICZub3cpOw0KPj4gICAJ CQlicmVhazsNCj4+ICAgCQljYXNlIEVQT0xMX1RZUEVfVENQX1RJTUVSOg0KPj4gLQkJCXRjcF90 aW1lcl9oYW5kbGVyKGMsIHJlZik7DQo+PiArCQkJdGNwX3RpbWVyX2hhbmRsZXIoYywgcmVmLCBR UEFJUl9ERUZBVUxUKTsNCj4+ICAgCQkJYnJlYWs7DQo+PiAgIAkJY2FzZSBFUE9MTF9UWVBFX1VE UF9MSVNURU46DQo+PiAgIAkJCXVkcF9saXN0ZW5fc29ja19oYW5kbGVyKGMsIHJlZiwgZXZlbnRt YXNrLCAmbm93KTsNCj4+IEBAIC0zMDAsNyArMzAyLDcgQEAgc3RhdGljIHZvaWQgcGFzc3Rfd29y a2VyKHZvaWQgKm9wYXF1ZSwgaW50IG5mZHMsIHN0cnVjdCBlcG9sbF9ldmVudCAqZXZlbnRzKQ0K Pj4gICAJCXByaW50X3N0YXRzKGMsICZzdGF0cywgJm5vdyk7DQo+PiAgIAl9DQo+PiAgIA0KPj4g LQlwb3N0X2hhbmRsZXIoYywgJm5vdyk7DQo+PiArCXBvc3RfaGFuZGxlcihjLCAmbm93LCBRUEFJ Ul9ERUZBVUxUKTsNCj4+ICAgDQo+PiAgIAltaWdyYXRlX2hhbmRsZXIoYyk7DQo+PiAgIH0NCj4+ IGRpZmYgLS1naXQgYS90YXAuYyBiL3RhcC5jDQo+PiBpbmRleCA2NmRjYjgzNjY1YTcuLmJhMmE1 NzNmYTYzMCAxMDA2NDQNCj4+IC0tLSBhL3RhcC5jDQo+PiArKysgYi90YXAuYw0KPj4gQEAgLTcx Nyw4ICs3MTcsNiBAQCBzdGF0aWMgaW50IHRhcDRfaGFuZGxlcihzdHJ1Y3QgY3R4ICpjLCB1bnNp Z25lZCBpbnQgcXBhaXIsDQo+PiAgIAl1bnNpZ25lZCBpbnQgaSwgaiwgc2VxX2NvdW50Ow0KPj4g ICAJc3RydWN0IHRhcDRfbDRfdCAqc2VxOw0KPj4gICANCj4+IC0JKHZvaWQpcXBhaXI7DQo+PiAt DQo+PiAgIAlpZiAoIWMtPmlmaTQgfHwgIXBvb2xfdGFwNC0+Y291bnQpDQo+PiAgIAkJcmV0dXJu IHBvb2xfdGFwNC0+Y291bnQ7DQo+PiAgIA0KPj4gQEAgLTg3MCw3ICs4NjgsNyBAQCBhcHBlbmQ6 DQo+PiAgIAkJCWlmIChjLT5ub190Y3ApDQo+PiAgIAkJCQljb250aW51ZTsNCj4+ICAgCQkJZm9y IChrID0gMDsgayA8IHAtPmNvdW50OyApDQo+PiAtCQkJCWsgKz0gdGNwX3RhcF9oYW5kbGVyKGMs IFBJRl9UQVAsIEFGX0lORVQsDQo+PiArCQkJCWsgKz0gdGNwX3RhcF9oYW5kbGVyKGMsIHFwYWly LCBQSUZfVEFQLCBBRl9JTkVULA0KPj4gICAJCQkJCQkgICAgICZzZXEtPnNhZGRyLCAmc2VxLT5k YWRkciwNCj4+ICAgCQkJCQkJICAgICAwLCBwLCBrLCBub3cpOw0KPj4gICAJCX0gZWxzZSBpZiAo c2VxLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgew0KPj4gQEAgLTk1NSw4ICs5NTMsNiBAQCBz dGF0aWMgaW50IHRhcDZfaGFuZGxlcihzdHJ1Y3QgY3R4ICpjLCB1bnNpZ25lZCBpbnQgcXBhaXIs DQo+PiAgIAl1bnNpZ25lZCBpbnQgaSwgaiwgc2VxX2NvdW50ID0gMDsNCj4+ICAgCXN0cnVjdCB0 YXA2X2w0X3QgKnNlcTsNCj4+ICAgDQo+PiAtCSh2b2lkKXFwYWlyOw0KPj4gLQ0KPj4gICAJaWYg KCFjLT5pZmk2IHx8ICFwb29sX3RhcDYtPmNvdW50KQ0KPj4gICAJCXJldHVybiBwb29sX3RhcDYt PmNvdW50Ow0KPj4gICANCj4+IEBAIC0xMTIxLDcgKzExMTcsNyBAQCBhcHBlbmQ6DQo+PiAgIAkJ CWlmIChjLT5ub190Y3ApDQo+PiAgIAkJCQljb250aW51ZTsNCj4+ICAgCQkJZm9yIChrID0gMDsg ayA8IHAtPmNvdW50OyApDQo+PiAtCQkJCWsgKz0gdGNwX3RhcF9oYW5kbGVyKGMsIFBJRl9UQVAs IEFGX0lORVQ2LA0KPj4gKwkJCQlrICs9IHRjcF90YXBfaGFuZGxlcihjLCBxcGFpciwgUElGX1RB UCwgQUZfSU5FVDYsDQo+PiAgIAkJCQkJCSAgICAgJnNlcS0+c2FkZHIsICZzZXEtPmRhZGRyLA0K Pj4gICAJCQkJCQkgICAgIHNlcS0+Zmxvd19sYmwsIHAsIGssIG5vdyk7DQo+PiAgIAkJfSBlbHNl IGlmIChzZXEtPnByb3RvY29sID09IElQUFJPVE9fVURQKSB7DQo+PiBkaWZmIC0tZ2l0IGEvdGNw LmMgYi90Y3AuYw0KPj4gaW5kZXggYzEyN2IzMTMyZTVhLi43ZjhlNjhhMzE5OTQgMTAwNjQ0DQo+ PiAtLS0gYS90Y3AuYw0KPj4gKysrIGIvdGNwLmMNCj4+IEBAIC0xMjU4LDE2ICsxMjU4LDE4IEBA IHN0YXRpYyB2b2lkIHRjcF91cGRhdGVfc2VxYWNrX2Zyb21fdGFwKGNvbnN0IHN0cnVjdCBjdHgg KmMsDQo+PiAgICAqIHRjcF9yZXdpbmRfc2VxKCkgLSBSZXdpbmQgc2VxdWVuY2UgdG8gdGFwIGFu ZCBzb2NrZXQgb2Zmc2V0IHRvIGN1cnJlbnQgQUNLDQo+PiAgICAqIEBjOgkJRXhlY3V0aW9uIGNv bnRleHQNCj4+ICAgICogQGNvbm46CUNvbm5lY3Rpb24gcG9pbnRlcg0KPj4gKyAqIEBxcGFpcjoJ UXVldWUgcGFpciB0byBwcm9jZXNzDQo+PiAgICAqDQo+PiAgICAqIFJldHVybjogMCBvbiBzdWNj ZXNzLCAtMSBvbiBmYWlsdXJlLCB3aXRoIGNvbm5lY3Rpb24gcmVzZXQNCj4+ICAgICovDQo+PiAt c3RhdGljIGludCB0Y3BfcmV3aW5kX3NlcShjb25zdCBzdHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNw X3RhcF9jb25uICpjb25uKQ0KPj4gK3N0YXRpYyBpbnQgdGNwX3Jld2luZF9zZXEoY29uc3Qgc3Ry dWN0IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAqY29ubiwNCj4+ICsJCQkgIHVuc2lnbmVk IGludCBxcGFpcikNCj4+ICAgew0KPj4gICAJY29ubi0+c2VxX3RvX3RhcCA9IGNvbm4tPnNlcV9h Y2tfZnJvbV90YXA7DQo+PiAgIAljb25uLT5ldmVudHMgJj0gflRBUF9GSU5fU0VOVDsNCj4+ICAg DQo+PiAgIAlpZiAodGNwX3NldF9wZWVrX29mZnNldChjb25uLCAwKSkgew0KPj4gLQkJdGNwX3Jz dChjLCBjb25uKTsNCj4+ICsJCXRjcF9yc3QoYywgY29ubiwgcXBhaXIpOw0KPj4gICAJCXJldHVy biAtMTsNCj4+ICAgCX0NCj4+ICAgDQo+PiBAQCAtMTM3MSwxNiArMTM3MywxNyBAQCBpbnQgdGNw X3ByZXBhcmVfZmxhZ3MoY29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAq Y29ubiwNCj4+ICAgICogQGM6ICAgICAgICAgRXhlY3V0aW9uIGNvbnRleHQNCj4+ICAgICogQGNv bm46ICAgICAgQ29ubmVjdGlvbiBwb2ludGVyDQo+PiAgICAqIEBmbGFnczogICAgIFRDUCBmbGFn czogaWYgbm90IHNldCwgc2VuZCBzZWdtZW50IG9ubHkgaWYgQUNLIGlzIGR1ZQ0KPj4gKyAqIEBx cGFpcjogICAgIFF1ZXVlIHBhaXIgdG8gcHJvY2Vzcw0KPj4gICAgKg0KPj4gICAgKiBSZXR1cm46 IG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmF0YWwgY29ubmVjdGlvbiBmYWlsdXJlLCAwIG90aGVy d2lzZQ0KPj4gICAgKi8NCj4+ICAgc3RhdGljIGludCB0Y3Bfc2VuZF9mbGFnKGNvbnN0IHN0cnVj dCBjdHggKmMsIHN0cnVjdCB0Y3BfdGFwX2Nvbm4gKmNvbm4sDQo+PiAtCQkJIGludCBmbGFncykN Cj4+ICsJCQkgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgcXBhaXIpDQo+PiAgIHsNCj4+ICAgCWlu dCByZXQ7DQo+PiAgIA0KPj4gICAJaWYgKGMtPm1vZGUgPT0gTU9ERV9WVSkNCj4+IC0JCXJldCA9 IHRjcF92dV9zZW5kX2ZsYWcoYywgY29ubiwgZmxhZ3MpOw0KPj4gKwkJcmV0ID0gdGNwX3Z1X3Nl bmRfZmxhZyhjLCBjb25uLCBmbGFncywgcXBhaXIpOw0KPj4gICAJZWxzZQ0KPj4gICAJCXJldCA9 IHRjcF9idWZfc2VuZF9mbGFnKGMsIGNvbm4sIGZsYWdzKTsNCj4+ICAgDQo+PiBAQCAtMTQyNSwx NCArMTQyOCwxNiBAQCBzdGF0aWMgdm9pZCB0Y3Bfc29ja19yc3QoY29uc3Qgc3RydWN0IGN0eCAq Yywgc3RydWN0IHRjcF90YXBfY29ubiAqY29ubikNCj4+ICAgICogdGNwX3JzdF9kbygpIC0gUmVz ZXQgYSB0YXAgY29ubmVjdGlvbjogc2VuZCBSU1Qgc2VnbWVudCBvbiBib3RoIHNpZGVzLCBjbG9z ZQ0KPj4gICAgKiBAYzoJCUV4ZWN1dGlvbiBjb250ZXh0DQo+PiAgICAqIEBjb25uOglDb25uZWN0 aW9uIHBvaW50ZXINCj4+ICsgKiBAcXBhaXI6CVF1ZXVlIHBhaXIgdG8gcHJvY2Vzcw0KPj4gICAg Ki8NCj4+IC12b2lkIHRjcF9yc3RfZG8oY29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90 YXBfY29ubiAqY29ubikNCj4+ICt2b2lkIHRjcF9yc3RfZG8oY29uc3Qgc3RydWN0IGN0eCAqYywg c3RydWN0IHRjcF90YXBfY29ubiAqY29ubiwNCj4+ICsJCXVuc2lnbmVkIGludCBxcGFpcikNCj4+ ICAgew0KPj4gICAJaWYgKGNvbm4tPmV2ZW50cyA9PSBDTE9TRUQpDQo+PiAgIAkJcmV0dXJuOw0K Pj4gICANCj4+ICAgCS8qIFNlbmQgUlNUIG9uIHRhcCAqLw0KPj4gLQl0Y3Bfc2VuZF9mbGFnKGMs IGNvbm4sIFJTVCk7DQo+PiArCXRjcF9zZW5kX2ZsYWcoYywgY29ubiwgUlNULCBxcGFpcik7DQo+ PiAgIA0KPj4gICAJdGNwX3NvY2tfcnN0KGMsIGNvbm4pOw0KPj4gICB9DQo+PiBAQCAtMTQ1OSwx MSArMTQ2NCwxMyBAQCBzdGF0aWMgdm9pZCB0Y3BfZ2V0X3RhcF93cyhzdHJ1Y3QgdGNwX3RhcF9j b25uICpjb25uLA0KPj4gICAgKiBAYzoJCUV4ZWN1dGlvbiBjb250ZXh0DQo+PiAgICAqIEBjb25u OglDb25uZWN0aW9uIHBvaW50ZXINCj4+ICAgICogQHduZDoJV2luZG93IHZhbHVlLCBob3N0IG9y ZGVyLCB1bnNjYWxlZA0KPj4gKyAqIEBxcGFpcjoJUXVldWUgcGFpciB0byBwcm9jZXNzDQo+PiAg ICAqDQo+PiAgICAqIFJldHVybjogZmFsc2Ugb24gemVybyB3aW5kb3cgKG5vdCBzdG9yZWQgdG8g d25kX2Zyb21fdGFwKSwgdHJ1ZSBvdGhlcndpc2UNCj4+ICAgICovDQo+PiAgIHN0YXRpYyBib29s IHRjcF90YXBfd2luZG93X3VwZGF0ZShjb25zdCBzdHJ1Y3QgY3R4ICpjLA0KPj4gLQkJCQkgIHN0 cnVjdCB0Y3BfdGFwX2Nvbm4gKmNvbm4sIHVuc2lnbmVkIHduZCkNCj4+ICsJCQkJICBzdHJ1Y3Qg dGNwX3RhcF9jb25uICpjb25uLCB1bnNpZ25lZCB3bmQsDQo+PiArCQkJCSAgdW5zaWduZWQgaW50 IHFwYWlyKQ0KPiANCj4gSW4gcGFydGljdWxhciB0aHJlYWRpbmcgdGhlIHFwYWlyIHRocm91Z2gg dGhpcyBmdW5jdGlvbiwgdGhhdCdzDQo+IGNoaWVmbHkgbm90IGFib3V0IHNlbmRpbmcgX29yXyBy ZWNlaXZpbmcgc2VlbXMgb2RkLi4NCj4gDQo+PiAgIHsNCj4+ICAgCXduZCA9IE1JTihNQVhfV0lO RE9XLCB3bmQgPDwgY29ubi0+d3NfZnJvbV90YXApOw0KPj4gICANCj4+IEBAIC0xNDc0LDcgKzE0 ODEsNyBAQCBzdGF0aWMgYm9vbCB0Y3BfdGFwX3dpbmRvd191cGRhdGUoY29uc3Qgc3RydWN0IGN0 eCAqYywNCj4+ICAgCSAqIHRoYXQgbm8gZGF0YSBiZXlvbmQgdGhlIHVwZGF0ZWQgd2luZG93IHdp bGwgYmUgYWNrbm93bGVkZ2VkLg0KPj4gICAJICovDQo+PiAgIAlpZiAoIXduZCAmJiBTRVFfTFQo Y29ubi0+c2VxX2Fja19mcm9tX3RhcCwgY29ubi0+c2VxX3RvX3RhcCkpIHsNCj4+IC0JCXRjcF9y ZXdpbmRfc2VxKGMsIGNvbm4pOw0KPj4gKwkJdGNwX3Jld2luZF9zZXEoYywgY29ubiwgcXBhaXIp Ow0KPiANCj4gLi4ganVzdCB0byBwYXNzIGhlcmUsIHdoaWNoIG9ubHkgY2FyZXMgYWJvdXQgaXQg Zm9yIGFuIGVycm9yIGNhc2UuDQoNCkZvciB0Y3BfdGFwX3dpbmRvd191cGRhdGUoKSwgdGhlIHFw YWlyIGlzIGp1c3QgdGhyZWFkZWQgdGhyb3VnaCB0bw0KdGhlIGVycm9yIHBhdGggKHRjcF9yZXdp bmRfc2VxIC0+IHRjcF9yc3QpLCB3aGljaCBuZWVkcyBpdCBmb3IgdGhlDQpzYW1lIHJlYXNvbiBh cyBhYm92ZS4NCg0KPiANCj4+ICAgCQlyZXR1cm4gZmFsc2U7DQo+PiAgIAl9DQo+PiAgIA0KPj4g QEAgLTE2NDYsNiArMTY1Myw3IEBAIHN0YXRpYyB2b2lkIHRjcF9iaW5kX291dGJvdW5kKGNvbnN0 IHN0cnVjdCBjdHggKmMsDQo+PiAgIC8qKg0KPj4gICAgKiB0Y3BfY29ubl9mcm9tX3RhcCgpIC0g SGFuZGxlIGNvbm5lY3Rpb24gcmVxdWVzdCAoU1lOIHNlZ21lbnQpIGZyb20gdGFwDQo+PiAgICAq IEBjOgkJRXhlY3V0aW9uIGNvbnRleHQNCj4+ICsgKiBAcXBhaXI6CVF1ZXVlIHBhaXIgZm9yIHRo ZSBmbG93DQo+PiAgICAqIEBhZjoJCUFkZHJlc3MgZmFtaWx5LCBBRl9JTkVUIG9yIEFGX0lORVQ2 DQo+PiAgICAqIEBzYWRkcjoJU291cmNlIGFkZHJlc3MsIHBvaW50ZXIgdG8gaW5fYWRkciBvciBp bjZfYWRkcg0KPj4gICAgKiBAZGFkZHI6CURlc3RpbmF0aW9uIGFkZHJlc3MsIHBvaW50ZXIgdG8g aW5fYWRkciBvciBpbjZfYWRkcg0KPj4gQEAgLTE2NTYsMTAgKzE2NjQsMTEgQEAgc3RhdGljIHZv aWQgdGNwX2JpbmRfb3V0Ym91bmQoY29uc3Qgc3RydWN0IGN0eCAqYywNCj4+ICAgICoNCj4+ICAg ICogI3N5c2NhbGxzOnZ1IGdldHNvY2tuYW1lDQo+PiAgICAqLw0KPj4gLXN0YXRpYyB2b2lkIHRj cF9jb25uX2Zyb21fdGFwKGNvbnN0IHN0cnVjdCBjdHggKmMsIHNhX2ZhbWlseV90IGFmLA0KPj4g LQkJCSAgICAgIGNvbnN0IHZvaWQgKnNhZGRyLCBjb25zdCB2b2lkICpkYWRkciwNCj4+IC0JCQkg ICAgICBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCwgY29uc3QgY2hhciAqb3B0cywNCj4+IC0JCQkg ICAgICBzaXplX3Qgb3B0bGVuLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKm5vdykNCj4+ICtzdGF0 aWMgdm9pZCB0Y3BfY29ubl9mcm9tX3RhcChjb25zdCBzdHJ1Y3QgY3R4ICpjLCB1bnNpZ25lZCBp bnQgcXBhaXIsDQo+PiArCQkJICAgICAgc2FfZmFtaWx5X3QgYWYsIGNvbnN0IHZvaWQgKnNhZGRy LA0KPj4gKwkJCSAgICAgIGNvbnN0IHZvaWQgKmRhZGRyLCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0 aCwNCj4+ICsJCQkgICAgICBjb25zdCBjaGFyICpvcHRzLCBzaXplX3Qgb3B0bGVuLA0KPj4gKwkJ CSAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqbm93KQ0KPj4gICB7DQo+PiAgIAlpbl9wb3J0 X3Qgc3JjcG9ydCA9IG50b2hzKHRoLT5zb3VyY2UpOw0KPj4gICAJaW5fcG9ydF90IGRzdHBvcnQg PSBudG9ocyh0aC0+ZGVzdCk7DQo+PiBAQCAtMTc2MCw3ICsxNzY5LDcgQEAgc3RhdGljIHZvaWQg dGNwX2Nvbm5fZnJvbV90YXAoY29uc3Qgc3RydWN0IGN0eCAqYywgc2FfZmFtaWx5X3QgYWYsDQo+ PiAgIA0KPj4gICAJaWYgKGNvbm5lY3QocywgJnNhLnNhLCBzb2NrbGVuX2luYW55KCZzYSkpKSB7 DQo+PiAgIAkJaWYgKGVycm5vICE9IEVJTlBST0dSRVNTKSB7DQo+PiAtCQkJdGNwX3JzdChjLCBj b25uKTsNCj4+ICsJCQl0Y3BfcnN0KGMsIGNvbm4sIHFwYWlyKTsNCj4+ICAgCQkJZ290byBjYW5j ZWw7DQo+PiAgIAkJfQ0KPj4gICANCj4+IEBAIC0xNzY4LDcgKzE3NzcsNyBAQCBzdGF0aWMgdm9p ZCB0Y3BfY29ubl9mcm9tX3RhcChjb25zdCBzdHJ1Y3QgY3R4ICpjLCBzYV9mYW1pbHlfdCBhZiwN Cj4+ICAgCX0gZWxzZSB7DQo+PiAgIAkJdGNwX2dldF9zbmRidWYoY29ubik7DQo+PiAgIA0KPj4g LQkJaWYgKHRjcF9zZW5kX2ZsYWcoYywgY29ubiwgU1lOIHwgQUNLKSkNCj4+ICsJCWlmICh0Y3Bf c2VuZF9mbGFnKGMsIGNvbm4sIFNZTiB8IEFDSywgcXBhaXIpKQ0KPj4gICAJCQlnb3RvIGNhbmNl bDsNCj4+ICAgDQo+PiAgIAkJY29ubl9ldmVudChjLCBjb25uLCBUQVBfU1lOX0FDS19TRU5UKTsN Cj4+IEBAIC0xODMwLDE1ICsxODM5LDE3IEBAIHN0YXRpYyBpbnQgdGNwX3NvY2tfY29uc3VtZShj b25zdCBzdHJ1Y3QgdGNwX3RhcF9jb25uICpjb25uLCB1aW50MzJfdCBhY2tfc2VxKQ0KPj4gICAg KiB0Y3BfZGF0YV9mcm9tX3NvY2soKSAtIEhhbmRsZSBuZXcgZGF0YSBmcm9tIHNvY2tldCwgcXVl dWUgdG8gdGFwLCBpbiB3aW5kb3cNCj4+ICAgICogQGM6CQlFeGVjdXRpb24gY29udGV4dA0KPj4g ICAgKiBAY29ubjoJQ29ubmVjdGlvbiBwb2ludGVyDQo+PiArICogQHFwYWlyOglRdWV1ZSBwYWly IHRvIHByb2Nlc3MNCj4+ICAgICoNCj4+ICAgICogUmV0dXJuOiBuZWdhdGl2ZSBvbiBjb25uZWN0 aW9uIHJlc2V0LCAwIG90aGVyd2lzZQ0KPj4gICAgKg0KPj4gICAgKiAjc3lzY2FsbHMgcmVjdm1z Zw0KPj4gICAgKi8NCj4+IC1zdGF0aWMgaW50IHRjcF9kYXRhX2Zyb21fc29jayhjb25zdCBzdHJ1 Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9jb25uICpjb25uKQ0KPj4gK3N0YXRpYyBpbnQgdGNw X2RhdGFfZnJvbV9zb2NrKGNvbnN0IHN0cnVjdCBjdHggKmMsIHN0cnVjdCB0Y3BfdGFwX2Nvbm4g KmNvbm4sDQo+PiArCQkJICAgICAgdW5zaWduZWQgaW50IHFwYWlyKQ0KPj4gICB7DQo+PiAgIAlp ZiAoYy0+bW9kZSA9PSBNT0RFX1ZVKQ0KPj4gLQkJcmV0dXJuIHRjcF92dV9kYXRhX2Zyb21fc29j ayhjLCBjb25uKTsNCj4+ICsJCXJldHVybiB0Y3BfdnVfZGF0YV9mcm9tX3NvY2soYywgY29ubiwg cXBhaXIpOw0KPj4gICANCj4+ICAgCXJldHVybiB0Y3BfYnVmX2RhdGFfZnJvbV9zb2NrKGMsIGNv bm4pOw0KPj4gICB9DQo+PiBAQCAtMTg2NiwxMyArMTg3NywxNSBAQCBzdGF0aWMgc3NpemVfdCB0 Y3BfcGFja2V0X2RhdGFfbGVuKGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoLCBzaXplX3QgbDRsZW4p DQo+PiAgICAqIEBjb25uOglDb25uZWN0aW9uIHBvaW50ZXINCj4+ICAgICogQHA6CQlQb29sIG9m IFRDUCBwYWNrZXRzLCB3aXRoIFRDUCBoZWFkZXJzDQo+PiAgICAqIEBpZHg6CUluZGV4IG9mIGZp cnN0IGRhdGEgcGFja2V0IGluIHBvb2wNCj4+ICsgKiBAcXBhaXI6CVF1ZXVlIHBhaXIgdG8gcHJv Y2Vzcw0KPj4gICAgKg0KPj4gICAgKiAjc3lzY2FsbHMgc2VuZG1zZw0KPj4gICAgKg0KPj4gICAg KiBSZXR1cm46IGNvdW50IG9mIGNvbnN1bWVkIHBhY2tldHMNCj4+ICAgICovDQo+PiAgIHN0YXRp YyBpbnQgdGNwX2RhdGFfZnJvbV90YXAoY29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90 YXBfY29ubiAqY29ubiwNCj4+IC0JCQkgICAgIGNvbnN0IHN0cnVjdCBwb29sICpwLCBpbnQgaWR4 KQ0KPj4gKwkJCSAgICAgY29uc3Qgc3RydWN0IHBvb2wgKnAsIGludCBpZHgsDQo+PiArCQkJICAg ICB1bnNpZ25lZCBpbnQgcXBhaXIpDQo+PiAgIHsNCj4+ICAgCWludCBpLCBpb3ZfaSwgYWNrID0g MCwgZmluID0gMCwgcmV0ciA9IDAsIGtlZXAgPSAtMSwgcGFydGlhbF9zZW5kID0gMDsNCj4+ICAg CXVpbnQxNl90IG1heF9hY2tfc2VxX3duZCA9IGNvbm4tPnduZF9mcm9tX3RhcDsNCj4+IEBAIC0x OTIyLDcgKzE5MzUsNyBAQCBzdGF0aWMgaW50IHRjcF9kYXRhX2Zyb21fdGFwKGNvbnN0IHN0cnVj dCBjdHggKmMsIHN0cnVjdCB0Y3BfdGFwX2Nvbm4gKmNvbm4sDQo+PiAgIAkJCQkgICAia2VlcC1h bGl2ZSBzZXF1ZW5jZTogJXUsIHByZXZpb3VzOiAldSIsDQo+PiAgIAkJCQkgICBzZXEsIGNvbm4t PnNlcV9mcm9tX3RhcCk7DQo+PiAgIA0KPj4gLQkJCWlmICh0Y3Bfc2VuZF9mbGFnKGMsIGNvbm4s IEFDSykpDQo+PiArCQkJaWYgKHRjcF9zZW5kX2ZsYWcoYywgY29ubiwgQUNLLCBxcGFpcikpDQo+ PiAgIAkJCQlyZXR1cm4gLTE7DQo+PiAgIA0KPj4gICAJCQl0Y3BfdGltZXJfY3RsKGMsIGNvbm4p Ow0KPj4gQEAgLTE5MzMsNyArMTk0Niw4IEBAIHN0YXRpYyBpbnQgdGNwX2RhdGFfZnJvbV90YXAo Y29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAqY29ubiwNCj4+ICAgDQo+ PiAgIAkJCWlmIChwLT5jb3VudCA9PSAxKSB7DQo+PiAgIAkJCQl0Y3BfdGFwX3dpbmRvd191cGRh dGUoYywgY29ubiwNCj4+IC0JCQkJCQkgICAgICBudG9ocyh0aC0+d2luZG93KSk7DQo+PiArCQkJ CQkJICAgICAgbnRvaHModGgtPndpbmRvdyksDQo+PiArCQkJCQkJICAgICAgcXBhaXIpOw0KPj4g ICAJCQkJcmV0dXJuIDE7DQo+PiAgIAkJCX0NCj4+ICAgDQo+PiBAQCAtMTk1OSw3ICsxOTczLDcg QEAgc3RhdGljIGludCB0Y3BfZGF0YV9mcm9tX3RhcChjb25zdCBzdHJ1Y3QgY3R4ICpjLCBzdHJ1 Y3QgdGNwX3RhcF9jb25uICpjb25uLA0KPj4gICAJCQkJICogd2VsbC4NCj4+ICAgCQkJCSAqLw0K Pj4gICAJCQkJaWYgKCFudG9ocyh0aC0+d2luZG93KSkNCj4+IC0JCQkJCXRjcF9yZXdpbmRfc2Vx KGMsIGNvbm4pOw0KPj4gKwkJCQkJdGNwX3Jld2luZF9zZXEoYywgY29ubiwgcXBhaXIpOw0KPj4g ICANCj4+ICAgCQkJCW1heF9hY2tfc2VxX3duZCA9IG50b2hzKHRoLT53aW5kb3cpOw0KPj4gICAJ CQkJbWF4X2Fja19zZXEgPSBhY2tfc2VxOw0KPj4gQEAgLTIwMjQsMTcgKzIwMzgsMTcgQEAgc3Rh dGljIGludCB0Y3BfZGF0YV9mcm9tX3RhcChjb25zdCBzdHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNw X3RhcF9jb25uICpjb25uLA0KPj4gICAJaWYgKGFjayAmJiAhdGNwX3NvY2tfY29uc3VtZShjb25u LCBtYXhfYWNrX3NlcSkpDQo+PiAgIAkJdGNwX3VwZGF0ZV9zZXFhY2tfZnJvbV90YXAoYywgY29u biwgbWF4X2Fja19zZXEpOw0KPj4gICANCj4+IC0JdGNwX3RhcF93aW5kb3dfdXBkYXRlKGMsIGNv bm4sIG1heF9hY2tfc2VxX3duZCk7DQo+PiArCXRjcF90YXBfd2luZG93X3VwZGF0ZShjLCBjb25u LCBtYXhfYWNrX3NlcV93bmQsIHFwYWlyKTsNCj4+ICAgDQo+PiAgIAlpZiAocmV0cikgew0KPj4g ICAJCWZsb3dfdHJhY2UoY29ubiwNCj4+ICAgCQkJICAgImZhc3QgcmUtdHJhbnNtaXQsIEFDSzog JXUsIHByZXZpb3VzIHNlcXVlbmNlOiAldSIsDQo+PiAgIAkJCSAgIGNvbm4tPnNlcV9hY2tfZnJv bV90YXAsIGNvbm4tPnNlcV90b190YXApOw0KPj4gICANCj4+IC0JCWlmICh0Y3BfcmV3aW5kX3Nl cShjLCBjb25uKSkNCj4+ICsJCWlmICh0Y3BfcmV3aW5kX3NlcShjLCBjb25uLCBxcGFpcikpDQo+ PiAgIAkJCXJldHVybiAtMTsNCj4+ICAgDQo+PiAtCQl0Y3BfZGF0YV9mcm9tX3NvY2soYywgY29u bik7DQo+PiArCQl0Y3BfZGF0YV9mcm9tX3NvY2soYywgY29ubiwgcXBhaXIpOw0KPj4gICAJfQ0K Pj4gICANCj4+ICAgCWlmICghaW92X2kpDQo+PiBAQCAtMjA1MCw3ICsyMDY0LDcgQEAgZWludHI6 DQo+PiAgIAkJCSAqICAgVGhlbiBzd2lmdGx5IGxvb2tlZCBhd2F5IGFuZCBsZWZ0Lg0KPj4gICAJ CQkgKi8NCj4+ICAgCQkJY29ubi0+c2VxX2Zyb21fdGFwID0gc2VxX2Zyb21fdGFwOw0KPj4gLQkJ CWlmICh0Y3Bfc2VuZF9mbGFnKGMsIGNvbm4sIEFDSykpDQo+PiArCQkJaWYgKHRjcF9zZW5kX2Zs YWcoYywgY29ubiwgQUNLLCBxcGFpcikpDQo+PiAgIAkJCQlyZXR1cm4gLTE7DQo+PiAgIAkJfQ0K Pj4gICANCj4+IEBAIC0yMDU4LDcgKzIwNzIsNyBAQCBlaW50cjoNCj4+ICAgCQkJZ290byBlaW50 cjsNCj4+ICAgDQo+PiAgIAkJaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFV09VTERC TE9DSykgew0KPj4gLQkJCWlmICh0Y3Bfc2VuZF9mbGFnKGMsIGNvbm4sIEFDSyB8IERVUF9BQ0sp KQ0KPj4gKwkJCWlmICh0Y3Bfc2VuZF9mbGFnKGMsIGNvbm4sIEFDSyB8IERVUF9BQ0ssIHFwYWly KSkNCj4+ICAgCQkJCXJldHVybiAtMTsNCj4+ICAgDQo+PiAgIAkJCXVpbnQzMl90IGV2ZW50cyA9 IHRjcF9jb25uX2Vwb2xsX2V2ZW50cyhjb25uLT5ldmVudHMsDQo+PiBAQCAtMjA5NCw3ICsyMTA4 LDcgQEAgb3V0Og0KPj4gICAJCSAqLw0KPj4gICAJCWlmIChjb25uLT5zZXFfZHVwX2Fja19hcHBy b3ggIT0gKGNvbm4tPnNlcV9mcm9tX3RhcCAmIDB4ZmYpKSB7DQo+PiAgIAkJCWNvbm4tPnNlcV9k dXBfYWNrX2FwcHJveCA9IGNvbm4tPnNlcV9mcm9tX3RhcCAmIDB4ZmY7DQo+PiAtCQkJaWYgKHRj cF9zZW5kX2ZsYWcoYywgY29ubiwgQUNLIHwgRFVQX0FDSykpDQo+PiArCQkJaWYgKHRjcF9zZW5k X2ZsYWcoYywgY29ubiwgQUNLIHwgRFVQX0FDSywgcXBhaXIpKQ0KPj4gICAJCQkJcmV0dXJuIC0x Ow0KPj4gICAJCX0NCj4+ICAgCQlyZXR1cm4gcC0+Y291bnQgLSBpZHg7DQo+PiBAQCAtMjEwOSw3 ICsyMTIzLDcgQEAgb3V0Og0KPj4gICANCj4+ICAgCQljb25uX2V2ZW50KGMsIGNvbm4sIFRBUF9G SU5fUkNWRCk7DQo+PiAgIAl9IGVsc2Ugew0KPj4gLQkJaWYgKHRjcF9zZW5kX2ZsYWcoYywgY29u biwgQUNLX0lGX05FRURFRCkpDQo+PiArCQlpZiAodGNwX3NlbmRfZmxhZyhjLCBjb25uLCBBQ0tf SUZfTkVFREVELCBxcGFpcikpDQo+PiAgIAkJCXJldHVybiAtMTsNCj4+ICAgCX0NCj4+ICAgDQo+ PiBAQCAtMjEyMywxMyArMjEzNywxNSBAQCBvdXQ6DQo+PiAgICAqIEB0aDoJCVRDUCBoZWFkZXIg b2YgU1lOLCBBQ0sgc2VnbWVudDogY2FsbGVyIE1VU1QgZW5zdXJlIGl0J3MgdGhlcmUNCj4+ICAg ICogQG9wdHM6CVBvaW50ZXIgdG8gc3RhcnQgb2Ygb3B0aW9ucw0KPj4gICAgKiBAb3B0bGVuOglC eXRlcyBpbiBvcHRpb25zOiBjYWxsZXIgTVVTVCBlbnN1cmUgYXZhaWxhYmxlIGxlbmd0aA0KPj4g KyAqIEBxcGFpcjoJUXVldWUgcGFpciB0byBwcm9jZXNzDQo+PiAgICAqLw0KPj4gICBzdGF0aWMg dm9pZCB0Y3BfY29ubl9mcm9tX3NvY2tfZmluaXNoKGNvbnN0IHN0cnVjdCBjdHggKmMsDQo+PiAg IAkJCQkgICAgICBzdHJ1Y3QgdGNwX3RhcF9jb25uICpjb25uLA0KPj4gICAJCQkJICAgICAgY29u c3Qgc3RydWN0IHRjcGhkciAqdGgsDQo+PiAtCQkJCSAgICAgIGNvbnN0IGNoYXIgKm9wdHMsIHNp emVfdCBvcHRsZW4pDQo+PiArCQkJCSAgICAgIGNvbnN0IGNoYXIgKm9wdHMsIHNpemVfdCBvcHRs ZW4sDQo+PiArCQkJCSAgICAgIHVuc2lnbmVkIGludCBxcGFpcikNCj4+ICAgew0KPj4gLQl0Y3Bf dGFwX3dpbmRvd191cGRhdGUoYywgY29ubiwgbnRvaHModGgtPndpbmRvdykpOw0KPj4gKwl0Y3Bf dGFwX3dpbmRvd191cGRhdGUoYywgY29ubiwgbnRvaHModGgtPndpbmRvdyksIHFwYWlyKTsNCj4+ ICAgCXRjcF9nZXRfdGFwX3dzKGNvbm4sIG9wdHMsIG9wdGxlbik7DQo+PiAgIA0KPj4gICAJLyog Rmlyc3QgdmFsdWUgaXMgbm90IHNjYWxlZCAqLw0KPj4gQEAgLTIxNDQsMjQgKzIxNjAsMjUgQEAg c3RhdGljIHZvaWQgdGNwX2Nvbm5fZnJvbV9zb2NrX2ZpbmlzaChjb25zdCBzdHJ1Y3QgY3R4ICpj LA0KPj4gICANCj4+ICAgCWNvbm5fZXZlbnQoYywgY29ubiwgRVNUQUJMSVNIRUQpOw0KPj4gICAJ aWYgKHRjcF9zZXRfcGVla19vZmZzZXQoY29ubiwgMCkpIHsNCj4+IC0JCXRjcF9yc3QoYywgY29u bik7DQo+PiArCQl0Y3BfcnN0KGMsIGNvbm4sIHFwYWlyKTsNCj4+ICAgCQlyZXR1cm47DQo+PiAg IAl9DQo+PiAgIA0KPj4gLQlpZiAodGNwX3NlbmRfZmxhZyhjLCBjb25uLCBBQ0spKSB7DQo+PiAt CQl0Y3BfcnN0KGMsIGNvbm4pOw0KPj4gKwlpZiAodGNwX3NlbmRfZmxhZyhjLCBjb25uLCBBQ0ss IHFwYWlyKSkgew0KPj4gKwkJdGNwX3JzdChjLCBjb25uLCBxcGFpcik7DQo+PiAgIAkJcmV0dXJu Ow0KPj4gICAJfQ0KPj4gICANCj4+ICAgCS8qIFRoZSBjbGllbnQgbWlnaHQgaGF2ZSBzZW50IGRh dGEgYWxyZWFkeSwgd2hpY2ggd2UgZGlkbid0DQo+PiAgIAkgKiBkZXF1ZXVlIHdhaXRpbmcgZm9y IFNZTixBQ0sgZnJvbSB0YXAgLS0gY2hlY2sgbm93Lg0KPj4gICAJICovDQo+PiAtCXRjcF9kYXRh X2Zyb21fc29jayhjLCBjb25uKTsNCj4+ICsJdGNwX2RhdGFfZnJvbV9zb2NrKGMsIGNvbm4sIHFw YWlyKTsNCj4+ICAgfQ0KPj4gICANCj4+ICAgLyoqDQo+PiAgICAqIHRjcF9yc3Rfbm9fY29ubigp IC0gU2VuZCBSU1QgaW4gcmVzcG9uc2UgdG8gYSBwYWNrZXQgd2l0aCBubyBjb25uZWN0aW9uDQo+ PiAgICAqIEBjOgkJRXhlY3V0aW9uIGNvbnRleHQNCj4+ICsgKiBAcXBhaXI6CVF1ZXVlIHBhaXIg b24gd2hpY2ggdG8gc2VuZCB0aGUgcmVwbHkNCj4+ICAgICogQGFmOgkJQWRkcmVzcyBmYW1pbHks IEFGX0lORVQgb3IgQUZfSU5FVDYNCj4+ICAgICogQHNhZGRyOglTb3VyY2UgYWRkcmVzcyBvZiB0 aGUgcGFja2V0IHdlJ3JlIHJlc3BvbmRpbmcgdG8NCj4+ICAgICogQGRhZGRyOglEZXN0aW5hdGlv biBhZGRyZXNzIG9mIHRoZSBwYWNrZXQgd2UncmUgcmVzcG9uZGluZyB0bw0KPj4gQEAgLTIxNjks NyArMjE4Niw3IEBAIHN0YXRpYyB2b2lkIHRjcF9jb25uX2Zyb21fc29ja19maW5pc2goY29uc3Qg c3RydWN0IGN0eCAqYywNCj4+ICAgICogQHRoOgkJVENQIGhlYWRlciBvZiB0aGUgcGFja2V0IHdl J3JlIHJlc3BvbmRpbmcgdG8NCj4+ICAgICogQGw0bGVuOglQYWNrZXQgbGVuZ3RoLCBpbmNsdWRp bmcgVENQIGhlYWRlcg0KPj4gICAgKi8NCj4+IC1zdGF0aWMgdm9pZCB0Y3BfcnN0X25vX2Nvbm4o Y29uc3Qgc3RydWN0IGN0eCAqYywgaW50IGFmLA0KPj4gK3N0YXRpYyB2b2lkIHRjcF9yc3Rfbm9f Y29ubihjb25zdCBzdHJ1Y3QgY3R4ICpjLCB1bnNpZ25lZCBpbnQgcXBhaXIsIGludCBhZiwNCj4+ ICAgCQkJICAgIGNvbnN0IHZvaWQgKnNhZGRyLCBjb25zdCB2b2lkICpkYWRkciwNCj4+ICAgCQkJ ICAgIHVpbnQzMl90IGZsb3dfbGJsLA0KPj4gICAJCQkgICAgY29uc3Qgc3RydWN0IHRjcGhkciAq dGgsIHNpemVfdCBsNGxlbikNCj4+IEBAIC0yMjI3LDEyICsyMjQ0LDEzIEBAIHN0YXRpYyB2b2lk IHRjcF9yc3Rfbm9fY29ubihjb25zdCBzdHJ1Y3QgY3R4ICpjLCBpbnQgYWYsDQo+PiAgIA0KPj4g ICAJdGNwX3VwZGF0ZV9jc3VtKHBzdW0sIHJzdGgsICZwYXlsb2FkLCAwKTsNCj4+ICAgCXJzdF9s MmxlbiA9ICgoY2hhciAqKXJzdGggLSBidWYpICsgc2l6ZW9mKCpyc3RoKTsNCj4+IC0JdGFwX3Nl bmRfc2luZ2xlKGMsIFFQQUlSX0RFRkFVTFQsIGJ1ZiwgcnN0X2wybGVuKTsNCj4+ICsJdGFwX3Nl bmRfc2luZ2xlKGMsIHFwYWlyLCBidWYsIHJzdF9sMmxlbik7DQo+PiAgIH0NCj4+ICAgDQo+PiAg IC8qKg0KPj4gICAgKiB0Y3BfdGFwX2hhbmRsZXIoKSAtIEhhbmRsZSBwYWNrZXRzIGZyb20gdGFw IGFuZCBzdGF0ZSB0cmFuc2l0aW9ucw0KPj4gICAgKiBAYzoJCUV4ZWN1dGlvbiBjb250ZXh0DQo+ PiArICogQHFwYWlyOglRdWV1ZSBwYWlyIG9uIHdoaWNoIHRvIHNlbmQgcGFja2V0cw0KPj4gICAg KiBAcGlmOglwaWYgb24gd2hpY2ggdGhlIHBhY2tldCBpcyBhcnJpdmluZw0KPj4gICAgKiBAYWY6 CQlBZGRyZXNzIGZhbWlseSwgQUZfSU5FVCBvciBBRl9JTkVUNg0KPj4gICAgKiBAc2FkZHI6CVNv dXJjZSBhZGRyZXNzDQo+PiBAQCAtMjI0NCw5ICsyMjYyLDEwIEBAIHN0YXRpYyB2b2lkIHRjcF9y c3Rfbm9fY29ubihjb25zdCBzdHJ1Y3QgY3R4ICpjLCBpbnQgYWYsDQo+PiAgICAqDQo+PiAgICAq IFJldHVybjogY291bnQgb2YgY29uc3VtZWQgcGFja2V0cw0KPj4gICAgKi8NCj4+IC1pbnQgdGNw X3RhcF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdHggKmMsIHVpbnQ4X3QgcGlmLCBzYV9mYW1pbHlf dCBhZiwNCj4+IC0JCSAgICBjb25zdCB2b2lkICpzYWRkciwgY29uc3Qgdm9pZCAqZGFkZHIsIHVp bnQzMl90IGZsb3dfbGJsLA0KPj4gLQkJICAgIGNvbnN0IHN0cnVjdCBwb29sICpwLCBpbnQgaWR4 LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKm5vdykNCj4+ICtpbnQgdGNwX3RhcF9oYW5kbGVyKGNv bnN0IHN0cnVjdCBjdHggKmMsIHVuc2lnbmVkIGludCBxcGFpciwgdWludDhfdCBwaWYsDQo+PiAr CQkgICAgc2FfZmFtaWx5X3QgYWYsIGNvbnN0IHZvaWQgKnNhZGRyLCBjb25zdCB2b2lkICpkYWRk ciwNCj4+ICsJCSAgICB1aW50MzJfdCBmbG93X2xibCwgY29uc3Qgc3RydWN0IHBvb2wgKnAsIGlu dCBpZHgsDQo+PiArCQkgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpub3cpDQo+PiAgIHsNCj4+ ICAgCXN0cnVjdCB0Y3BfdGFwX2Nvbm4gKmNvbm47DQo+PiAgIAlzdHJ1Y3QgdGNwaGRyIHRoX3N0 b3JhZ2U7DQo+PiBAQCAtMjI4MywxMCArMjMwMiwxMSBAQCBpbnQgdGNwX3RhcF9oYW5kbGVyKGNv bnN0IHN0cnVjdCBjdHggKmMsIHVpbnQ4X3QgcGlmLCBzYV9mYW1pbHlfdCBhZiwNCj4+ICAgCS8q IE5ldyBjb25uZWN0aW9uIGZyb20gdGFwICovDQo+PiAgIAlpZiAoIWZsb3cpIHsNCj4+ICAgCQlp ZiAob3B0cyAmJiB0aC0+c3luICYmICF0aC0+YWNrKQ0KPj4gLQkJCXRjcF9jb25uX2Zyb21fdGFw KGMsIGFmLCBzYWRkciwgZGFkZHIsIHRoLA0KPj4gKwkJCXRjcF9jb25uX2Zyb21fdGFwKGMsIHFw YWlyLCBhZiwgc2FkZHIsIGRhZGRyLCB0aCwNCj4+ICAgCQkJCQkgIG9wdHMsIG9wdGxlbiwgbm93 KTsNCj4+ICAgCQllbHNlDQo+PiAtCQkJdGNwX3JzdF9ub19jb25uKGMsIGFmLCBzYWRkciwgZGFk ZHIsIGZsb3dfbGJsLCB0aCwgbDRsZW4pOw0KPj4gKwkJCXRjcF9yc3Rfbm9fY29ubihjLCBxcGFp ciwgYWYsIHNhZGRyLCBkYWRkciwgZmxvd19sYmwsIHRoLA0KPj4gKwkJCQkJbDRsZW4pOw0KPj4g ICAJCXJldHVybiAxOw0KPj4gICAJfQ0KPj4gICANCj4+IEBAIC0yMzEwLDcgKzIzMzAsNyBAQCBp bnQgdGNwX3RhcF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdHggKmMsIHVpbnQ4X3QgcGlmLCBzYV9m YW1pbHlfdCBhZiwNCj4+ICAgCS8qIEVzdGFibGlzaGluZyBjb25uZWN0aW9uIGZyb20gc29ja2V0 ICovDQo+PiAgIAlpZiAoY29ubi0+ZXZlbnRzICYgU09DS19BQ0NFUFRFRCkgew0KPj4gICAJCWlm ICh0aC0+c3luICYmIHRoLT5hY2sgJiYgIXRoLT5maW4pIHsNCj4+IC0JCQl0Y3BfY29ubl9mcm9t X3NvY2tfZmluaXNoKGMsIGNvbm4sIHRoLCBvcHRzLCBvcHRsZW4pOw0KPj4gKwkJCXRjcF9jb25u X2Zyb21fc29ja19maW5pc2goYywgY29ubiwgdGgsIG9wdHMsIG9wdGxlbiwgcXBhaXIpOw0KPj4g ICAJCQlyZXR1cm4gMTsNCj4+ICAgCQl9DQo+PiAgIA0KPj4gQEAgLTIzMzcsNyArMjM1Nyw3IEBA IGludCB0Y3BfdGFwX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0eCAqYywgdWludDhfdCBwaWYsIHNh X2ZhbWlseV90IGFmLA0KPj4gICAJCQkJZ290byByZXNldDsNCj4+ICAgCQkJfQ0KPj4gICANCj4+ IC0JCQlpZiAodGNwX3NlbmRfZmxhZyhjLCBjb25uLCBBQ0spKQ0KPj4gKwkJCWlmICh0Y3Bfc2Vu ZF9mbGFnKGMsIGNvbm4sIEFDSywgcXBhaXIpKQ0KPj4gICAJCQkJZ290byByZXNldDsNCj4+ICAg DQo+PiAgIAkJCWNvbm5fZXZlbnQoYywgY29ubiwgU09DS19GSU5fU0VOVCk7DQo+PiBAQCAtMjM0 OCw4ICsyMzY4LDggQEAgaW50IHRjcF90YXBfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3R4ICpjLCB1 aW50OF90IHBpZiwgc2FfZmFtaWx5X3QgYWYsDQo+PiAgIAkJaWYgKCF0aC0+YWNrKQ0KPj4gICAJ CQlnb3RvIHJlc2V0Ow0KPj4gICANCj4+IC0JCWlmICh0Y3BfdGFwX3dpbmRvd191cGRhdGUoYywg Y29ubiwgbnRvaHModGgtPndpbmRvdykpKQ0KPj4gLQkJCXRjcF9kYXRhX2Zyb21fc29jayhjLCBj b25uKTsNCj4+ICsJCWlmICh0Y3BfdGFwX3dpbmRvd191cGRhdGUoYywgY29ubiwgbnRvaHModGgt PndpbmRvdyksIHFwYWlyKSkNCj4+ICsJCQl0Y3BfZGF0YV9mcm9tX3NvY2soYywgY29ubiwgcXBh aXIpOw0KPj4gICANCj4+ICAgCQlpZiAocC0+Y291bnQgLSBpZHggPT0gMSkNCj4+ICAgCQkJcmV0 dXJuIDE7DQo+PiBAQCAtMjM4MCwxMiArMjQwMCwxMiBAQCBpbnQgdGNwX3RhcF9oYW5kbGVyKGNv bnN0IHN0cnVjdCBjdHggKmMsIHVpbnQ4X3QgcGlmLCBzYV9mYW1pbHlfdCBhZiwNCj4+ICAgCQkJ CSAgICJmYXN0IHJlLXRyYW5zbWl0LCBBQ0s6ICV1LCBwcmV2aW91cyBzZXF1ZW5jZTogJXUiLA0K Pj4gICAJCQkJICAgbnRvaGwodGgtPmFja19zZXEpLCBjb25uLT5zZXFfdG9fdGFwKTsNCj4+ICAg DQo+PiAtCQkJaWYgKHRjcF9yZXdpbmRfc2VxKGMsIGNvbm4pKQ0KPj4gKwkJCWlmICh0Y3BfcmV3 aW5kX3NlcShjLCBjb25uLCBxcGFpcikpDQo+PiAgIAkJCQlyZXR1cm4gLTE7DQo+PiAgIAkJfQ0K Pj4gICANCj4+IC0JCWlmICh0Y3BfdGFwX3dpbmRvd191cGRhdGUoYywgY29ubiwgbnRvaHModGgt PndpbmRvdykpIHx8IHJldHIpDQo+PiAtCQkJdGNwX2RhdGFfZnJvbV9zb2NrKGMsIGNvbm4pOw0K Pj4gKwkJaWYgKHRjcF90YXBfd2luZG93X3VwZGF0ZShjLCBjb25uLCBudG9ocyh0aC0+d2luZG93 KSwgcXBhaXIpIHx8IHJldHIpDQo+PiArCQkJdGNwX2RhdGFfZnJvbV9zb2NrKGMsIGNvbm4sIHFw YWlyKTsNCj4+ICAgDQo+PiAgIAkJaWYgKGNvbm4tPnNlcV9hY2tfZnJvbV90YXAgPT0gY29ubi0+ c2VxX3RvX3RhcCkgew0KPj4gICAJCQlpZiAodGgtPmFjayAmJiBjb25uLT5ldmVudHMgJiBUQVBf RklOX1NFTlQpDQo+PiBAQCAtMjQwMCw3ICsyNDIwLDcgQEAgaW50IHRjcF90YXBfaGFuZGxlcihj b25zdCBzdHJ1Y3QgY3R4ICpjLCB1aW50OF90IHBpZiwgc2FfZmFtaWx5X3QgYWYsDQo+PiAgIAl9 DQo+PiAgIA0KPj4gICAJLyogRXN0YWJsaXNoZWQgY29ubmVjdGlvbnMgYWNjZXB0aW5nIGRhdGEg ZnJvbSB0YXAgKi8NCj4+IC0JY291bnQgPSB0Y3BfZGF0YV9mcm9tX3RhcChjLCBjb25uLCBwLCBp ZHgpOw0KPj4gKwljb3VudCA9IHRjcF9kYXRhX2Zyb21fdGFwKGMsIGNvbm4sIHAsIGlkeCwgcXBh aXIpOw0KPj4gICAJaWYgKGNvdW50ID09IC0xKQ0KPj4gICAJCWdvdG8gcmVzZXQ7DQo+PiAgIA0K Pj4gQEAgLTI0MTksNyArMjQzOSw3IEBAIGludCB0Y3BfdGFwX2hhbmRsZXIoY29uc3Qgc3RydWN0 IGN0eCAqYywgdWludDhfdCBwaWYsIHNhX2ZhbWlseV90IGFmLA0KPj4gICAJCX0NCj4+ICAgDQo+ PiAgIAkJY29ubl9ldmVudChjLCBjb25uLCBTT0NLX0ZJTl9TRU5UKTsNCj4+IC0JCWlmICh0Y3Bf c2VuZF9mbGFnKGMsIGNvbm4sIEFDSykpDQo+PiArCQlpZiAodGNwX3NlbmRfZmxhZyhjLCBjb25u LCBBQ0ssIHFwYWlyKSkNCj4+ICAgCQkJZ290byByZXNldDsNCj4+ICAgDQo+PiAgIAkJYWNrX2R1 ZSA9IDA7DQo+PiBAQCAtMjQ0OSw3ICsyNDY5LDcgQEAgcmVzZXQ6DQo+PiAgIAkgKiByZW1haW5p bmcgcGFja2V0cyBpbiB0aGUgYmF0Y2gsIHNpbmNlIHRoZXknZCBiZSBpbnZhbGlkYXRlZCB3aGVu IG91cg0KPj4gICAJICogUlNUIGlzIHJlY2VpdmVkLCBldmVuIGlmIG90aGVyd2lzZSBnb29kLg0K Pj4gICAJICovDQo+PiAtCXRjcF9yc3QoYywgY29ubik7DQo+PiArCXRjcF9yc3QoYywgY29ubiwg cXBhaXIpOw0KPj4gICAJcmV0dXJuIHAtPmNvdW50IC0gaWR4Ow0KPj4gICB9DQo+PiAgIA0KPj4g QEAgLTI0NTcsMjAgKzI0NzcsMjIgQEAgcmVzZXQ6DQo+PiAgICAqIHRjcF9jb25uZWN0X2Zpbmlz aCgpIC0gSGFuZGxlIGNvbXBsZXRpb24gb2YgY29ubmVjdCgpIGZyb20gRVBPTExPVVQgZXZlbnQN Cj4+ICAgICogQGM6CQlFeGVjdXRpb24gY29udGV4dA0KPj4gICAgKiBAY29ubjoJQ29ubmVjdGlv biBwb2ludGVyDQo+PiArICogQHFwYWlyOglRdWV1ZSBwYWlyIHRvIHByb2Nlc3MNCj4+ICAgICov DQo+PiAtc3RhdGljIHZvaWQgdGNwX2Nvbm5lY3RfZmluaXNoKGNvbnN0IHN0cnVjdCBjdHggKmMs IHN0cnVjdCB0Y3BfdGFwX2Nvbm4gKmNvbm4pDQo+PiArc3RhdGljIHZvaWQgdGNwX2Nvbm5lY3Rf ZmluaXNoKGNvbnN0IHN0cnVjdCBjdHggKmMsIHN0cnVjdCB0Y3BfdGFwX2Nvbm4gKmNvbm4sDQo+ PiArCQkJICAgICAgIHVuc2lnbmVkIGludCBxcGFpcikNCj4+ICAgew0KPj4gICAJc29ja2xlbl90 IHNsOw0KPj4gICAJaW50IHNvOw0KPj4gICANCj4+ICAgCXNsID0gc2l6ZW9mKHNvKTsNCj4+ICAg CWlmIChnZXRzb2Nrb3B0KGNvbm4tPnNvY2ssIFNPTF9TT0NLRVQsIFNPX0VSUk9SLCAmc28sICZz bCkgfHwgc28pIHsNCj4+IC0JCXRjcF9yc3QoYywgY29ubik7DQo+PiArCQl0Y3BfcnN0KGMsIGNv bm4sIHFwYWlyKTsNCj4+ICAgCQlyZXR1cm47DQo+PiAgIAl9DQo+PiAgIA0KPj4gLQlpZiAodGNw X3NlbmRfZmxhZyhjLCBjb25uLCBTWU4gfCBBQ0spKSB7DQo+PiAtCQl0Y3BfcnN0KGMsIGNvbm4p Ow0KPj4gKwlpZiAodGNwX3NlbmRfZmxhZyhjLCBjb25uLCBTWU4gfCBBQ0ssIHFwYWlyKSkgew0K Pj4gKwkJdGNwX3JzdChjLCBjb25uLCBxcGFpcik7DQo+PiAgIAkJcmV0dXJuOw0KPj4gICAJfQ0K Pj4gICANCj4+IEBAIC0yNTEzLDcgKzI1MzUsNyBAQCBzdGF0aWMgdm9pZCB0Y3BfdGFwX2Nvbm5f ZnJvbV9zb2NrKGNvbnN0IHN0cnVjdCBjdHggKmMsIHVuaW9uIGZsb3cgKmZsb3csDQo+PiAgIA0K Pj4gICAJY29ubi0+d25kX2Zyb21fdGFwID0gV0lORE9XX0RFRkFVTFQ7DQo+PiAgIA0KPj4gLQlp ZiAodGNwX3NlbmRfZmxhZyhjLCBjb25uLCBTWU4pKSB7DQo+PiArCWlmICh0Y3Bfc2VuZF9mbGFn KGMsIGNvbm4sIFNZTiwgUVBBSVJfREVGQVVMVCkpIHsNCj4+ICAgCQljb25uX2ZsYWcoYywgY29u biwgQ0xPU0lORyk7DQo+PiAgIAkJRkxPV19BQ1RJVkFURShjb25uKTsNCj4+ICAgCQlyZXR1cm47 DQo+PiBAQCAtMjYwNCwxMiArMjYyNiwxNCBAQCBjYW5jZWw6DQo+PiAgICAqIHRjcF90aW1lcl9o YW5kbGVyKCkgLSB0aW1lcmZkIGV2ZW50czogY2xvc2UsIHNlbmQgQUNLLCByZXRyYW5zbWl0LCBv ciByZXNldA0KPj4gICAgKiBAYzoJCUV4ZWN1dGlvbiBjb250ZXh0DQo+PiAgICAqIEByZWY6CWVw b2xsIHJlZmVyZW5jZSBvZiB0aW1lciAobm90IGNvbm5lY3Rpb24pDQo+PiArICogQHFwYWlyOglR dWV1ZSBwYWlyIHRvIHByb2Nlc3MNCj4+ICAgICoNCj4+ICAgICogI3N5c2NhbGxzIHRpbWVyZmRf Z2V0dGltZXx0aW1lcmZkX2dldHRpbWU2NA0KPj4gICAgKiAjc3lzY2FsbHMgYXJtOnRpbWVyZmRf Z2V0dGltZTY0IGk2ODY6dGltZXJmZF9nZXR0aW1lNjQNCj4+ICAgICogI3N5c2NhbGxzIGFybTp0 aW1lcmZkX3NldHRpbWU2NCBpNjg2OnRpbWVyZmRfc2V0dGltZTY0DQo+PiAgICAqLw0KPj4gLXZv aWQgdGNwX3RpbWVyX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0eCAqYywgdW5pb24gZXBvbGxfcmVm IHJlZikNCj4+ICt2b2lkIHRjcF90aW1lcl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdHggKmMsIHVu aW9uIGVwb2xsX3JlZiByZWYsDQo+PiArCQkgICAgICAgdW5zaWduZWQgaW50IHFwYWlyKQ0KPiAN Cj4gVGhpcyBvbmUgc2VlbXMgZXZlbiBzdHJhbmdlciB0byBtZS4gIFRoaXMgaXMgdHJpZ2dlcmVk IG9mZiBhIHRpbWVyLA0KPiBub3QgYSB0YXAgc2lkZSBldmVudCwgaG93IHdvdWxkIHdlIGV2ZW4g a25vdyB0aGUgcmVsZXZhbnQgcXBhaXIgZXhjZXB0DQo+IGJ5IGxvb2tpbmcgYXQgdGhlIGNvbm5l Y3Rpb24uDQo+IA0KPj4gICB7DQo+PiAgIAlzdHJ1Y3QgaXRpbWVyc3BlYyBjaGVja19hcm1lZCA9 IHsgeyAwIH0sIHsgMCB9IH07DQo+PiAgIAlzdHJ1Y3QgdGNwX3RhcF9jb25uICpjb25uID0gJkZM T1cocmVmLmZsb3cpLT50Y3A7DQo+PiBAQCAtMjYyOCw4ICsyNjUyLDggQEAgdm9pZCB0Y3BfdGlt ZXJfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3R4ICpjLCB1bmlvbiBlcG9sbF9yZWYgcmVmKQ0KPj4g ICAJCXJldHVybjsNCj4+ICAgDQo+PiAgIAlpZiAoY29ubi0+ZmxhZ3MgJiBBQ0tfVE9fVEFQX0RV RSkgew0KPj4gLQkJaWYgKHRjcF9zZW5kX2ZsYWcoYywgY29ubiwgQUNLX0lGX05FRURFRCkpIHsN Cj4+IC0JCQl0Y3BfcnN0KGMsIGNvbm4pOw0KPj4gKwkJaWYgKHRjcF9zZW5kX2ZsYWcoYywgY29u biwgQUNLX0lGX05FRURFRCwgcXBhaXIpKSB7DQo+PiArCQkJdGNwX3JzdChjLCBjb25uLCBxcGFp cik7DQo+PiAgIAkJCXJldHVybjsNCj4+ICAgCQl9DQo+PiAgIAkJdGNwX3RpbWVyX2N0bChjLCBj b25uKTsNCj4+IEBAIC0yNjQxLDExICsyNjY1LDExIEBAIHZvaWQgdGNwX3RpbWVyX2hhbmRsZXIo Y29uc3Qgc3RydWN0IGN0eCAqYywgdW5pb24gZXBvbGxfcmVmIHJlZikNCj4+ICAgCQkJbWF4ID0g TUlOKFRDUF9NQVhfUkVUUklFUywgbWF4KTsNCj4+ICAgCQkJaWYgKGNvbm4tPnJldHJpZXMgPj0g bWF4KSB7DQo+PiAgIAkJCQlmbG93X2RiZyhjb25uLCAiaGFuZHNoYWtlIHRpbWVvdXQiKTsNCj4+ IC0JCQkJdGNwX3JzdChjLCBjb25uKTsNCj4+ICsJCQkJdGNwX3JzdChjLCBjb25uLCBxcGFpcik7 DQo+PiAgIAkJCX0gZWxzZSB7DQo+PiAgIAkJCQlmbG93X3RyYWNlKGNvbm4sICJTWU4gdGltZW91 dCwgcmV0cnkiKTsNCj4+IC0JCQkJaWYgKHRjcF9zZW5kX2ZsYWcoYywgY29ubiwgU1lOKSkgew0K Pj4gLQkJCQkJdGNwX3JzdChjLCBjb25uKTsNCj4+ICsJCQkJaWYgKHRjcF9zZW5kX2ZsYWcoYywg Y29ubiwgU1lOLCBxcGFpcikpIHsNCj4+ICsJCQkJCXRjcF9yc3QoYywgY29ubiwgcXBhaXIpOw0K Pj4gICAJCQkJCXJldHVybjsNCj4+ICAgCQkJCX0NCj4+ICAgCQkJCWNvbm4tPnJldHJpZXMrKzsN Cj4+IEBAIC0yNjU0LDcgKzI2NzgsNyBAQCB2b2lkIHRjcF90aW1lcl9oYW5kbGVyKGNvbnN0IHN0 cnVjdCBjdHggKmMsIHVuaW9uIGVwb2xsX3JlZiByZWYpDQo+PiAgIAkJCX0NCj4+ICAgCQl9IGVs c2UgaWYgKGNvbm4tPnJldHJpZXMgPT0gVENQX01BWF9SRVRSSUVTKSB7DQo+PiAgIAkJCWZsb3df ZGJnKGNvbm4sICJyZXRyYW5zbWlzc2lvbnMgY291bnQgZXhjZWVkZWQiKTsNCj4+IC0JCQl0Y3Bf cnN0KGMsIGNvbm4pOw0KPj4gKwkJCXRjcF9yc3QoYywgY29ubiwgcXBhaXIpOw0KPj4gICAJCX0g ZWxzZSB7DQo+PiAgIAkJCWZsb3dfZGJnKGNvbm4sICJBQ0sgdGltZW91dCwgcmV0cnkiKTsNCj4+ ICAgDQo+PiBAQCAtMjY2MiwxMCArMjY4NiwxMCBAQCB2b2lkIHRjcF90aW1lcl9oYW5kbGVyKGNv bnN0IHN0cnVjdCBjdHggKmMsIHVuaW9uIGVwb2xsX3JlZiByZWYpDQo+PiAgIAkJCQljb25uLT53 bmRfZnJvbV90YXAgPSAxOyAvKiBaZXJvLXdpbmRvdyBwcm9iZSAqLw0KPj4gICANCj4+ICAgCQkJ Y29ubi0+cmV0cmllcysrOw0KPj4gLQkJCWlmICh0Y3BfcmV3aW5kX3NlcShjLCBjb25uKSkNCj4+ ICsJCQlpZiAodGNwX3Jld2luZF9zZXEoYywgY29ubiwgcXBhaXIpKQ0KPj4gICAJCQkJcmV0dXJu Ow0KPj4gICANCj4+IC0JCQl0Y3BfZGF0YV9mcm9tX3NvY2soYywgY29ubik7DQo+PiArCQkJdGNw X2RhdGFfZnJvbV9zb2NrKGMsIGNvbm4sIHFwYWlyKTsNCj4+ICAgCQkJdGNwX3RpbWVyX2N0bChj LCBjb25uKTsNCj4+ICAgCQl9DQo+PiAgIAl9DQo+PiBAQCAtMjY3Niw5ICsyNzAwLDEwIEBAIHZv aWQgdGNwX3RpbWVyX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0eCAqYywgdW5pb24gZXBvbGxfcmVm IHJlZikNCj4+ICAgICogQGM6CQlFeGVjdXRpb24gY29udGV4dA0KPj4gICAgKiBAcmVmOgllcG9s bCByZWZlcmVuY2UNCj4+ICAgICogQGV2ZW50czoJZXBvbGwgZXZlbnRzIGJpdG1hcA0KPj4gKyAq IEBxcGFpcjoJUXVldWUgcGFpciB0byBwcm9jZXNzDQo+PiAgICAqLw0KPj4gICB2b2lkIHRjcF9z b2NrX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0eCAqYywgdW5pb24gZXBvbGxfcmVmIHJlZiwNCj4+ IC0JCSAgICAgIHVpbnQzMl90IGV2ZW50cykNCj4+ICsJCSAgICAgIHVpbnQzMl90IGV2ZW50cywg dW5zaWduZWQgaW50IHFwYWlyKQ0KPiANCj4gTGlrZXdpc2UgaGVyZSwgaG93IGNvdWxkIHRoZSBj YWxsZXIga25vdyBhIHJlYXNvbmFibGUgcXBhaXIgYmFzZWQganVzdA0KPiBvbiB0aGUgc29ja2V0 IHNpZGUgZXZlbnQ/DQoNCkZvciB0Y3BfdGltZXJfaGFuZGxlcigpIGFuZCB0Y3Bfc29ja19oYW5k bGVyKCksIHRoZSBjYWxsZXIga25vd3MgdGhlDQpxcGFpciBiZWNhdXNlIGl0IGlzIHRoZSB3b3Jr ZXIgdGhyZWFkJ3Mgb3duIHFwYWlyIOKAlCBlYWNoIHRocmVhZCBoYXMNCml0cyBvd24gZXBvbGwg aW5zdGFuY2UgYW5kIHBhc3NlcyBpdHMgcXBhaXIgdG8gYWxsIGV2ZW50IGhhbmRsZXJzLg0KDQpU aGlzIGFsc28gbWF0dGVycyBmb3IgdGltZXIgbWlncmF0aW9uOiB0Y3BfdGltZXJfaGFuZGxlcigp IG5lZWRzIHRvDQpjb21wYXJlIHRoZSBldmVudCdzIHFwYWlyIGFnYWluc3QgY29ubi0+Zi5xcGFp ciB0byBkZXRlY3QgdGhhdCB0aGUNCmZsb3cgaGFzIG1vdmVkIGFuZCB0aGUgdGltZXJmZCBuZWVk cyB0byBiZSByZS1yZWdpc3RlcmVkLiAgSWYgd2UNCnJlYWQgcXBhaXIgZnJvbSB0aGUgY29ubmVj dGlvbiwgdGhlIGNvbXBhcmlzb24gd291bGQgYWx3YXlzIG1hdGNoLg0KDQoNCj4+ICAgew0KPj4g ICAJc3RydWN0IHRjcF90YXBfY29ubiAqY29ubiA9IGNvbm5fYXRfc2lkeChyZWYuZmxvd3NpZGUp Ow0KPj4gICANCj4+IEBAIC0yNjg5LDcgKzI3MTQsNyBAQCB2b2lkIHRjcF9zb2NrX2hhbmRsZXIo Y29uc3Qgc3RydWN0IGN0eCAqYywgdW5pb24gZXBvbGxfcmVmIHJlZiwNCj4+ICAgCQlyZXR1cm47 DQo+PiAgIA0KPj4gICAJaWYgKGV2ZW50cyAmIEVQT0xMRVJSKSB7DQo+PiAtCQl0Y3BfcnN0KGMs IGNvbm4pOw0KPj4gKwkJdGNwX3JzdChjLCBjb25uLCBxcGFpcik7DQo+PiAgIAkJcmV0dXJuOw0K Pj4gICAJfQ0KPj4gICANCj4+IEBAIC0yNzA4LDEzICsyNzMzLDEzIEBAIHZvaWQgdGNwX3NvY2tf aGFuZGxlcihjb25zdCBzdHJ1Y3QgY3R4ICpjLCB1bmlvbiBlcG9sbF9yZWYgcmVmLA0KPj4gICAJ CQljb25uX2V2ZW50KGMsIGNvbm4sIFNPQ0tfRklOX1JDVkQpOw0KPj4gICANCj4+ICAgCQlpZiAo ZXZlbnRzICYgRVBPTExJTikNCj4+IC0JCQl0Y3BfZGF0YV9mcm9tX3NvY2soYywgY29ubik7DQo+ PiArCQkJdGNwX2RhdGFfZnJvbV9zb2NrKGMsIGNvbm4sIHFwYWlyKTsNCj4+ICAgDQo+PiAgIAkJ aWYgKGV2ZW50cyAmIEVQT0xMT1VUKSB7DQo+PiAgIAkJCXRjcF9lcG9sbF9jdGwoY29ubik7DQo+ PiAgIAkJCWlmICh0Y3BfdXBkYXRlX3NlcWFja193bmQoYywgY29ubiwgZmFsc2UsIE5VTEwpICYm DQo+PiAtCQkJICAgIHRjcF9zZW5kX2ZsYWcoYywgY29ubiwgQUNLKSkgew0KPj4gLQkJCQl0Y3Bf cnN0KGMsIGNvbm4pOw0KPj4gKwkJCSAgICB0Y3Bfc2VuZF9mbGFnKGMsIGNvbm4sIEFDSywgcXBh aXIpKSB7DQo+PiArCQkJCXRjcF9yc3QoYywgY29ubiwgcXBhaXIpOw0KPj4gICAJCQkJcmV0dXJu Ow0KPj4gICAJCQl9DQo+PiAgIAkJfQ0KPj4gQEAgLTI3MjQsNyArMjc0OSw3IEBAIHZvaWQgdGNw X3NvY2tfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3R4ICpjLCB1bmlvbiBlcG9sbF9yZWYgcmVmLA0K Pj4gICANCj4+ICAgCS8qIEVQT0xMSFVQIGR1cmluZyBoYW5kc2hha2U6IHJlc2V0ICovDQo+PiAg IAlpZiAoZXZlbnRzICYgRVBPTExIVVApIHsNCj4+IC0JCXRjcF9yc3QoYywgY29ubik7DQo+PiAr CQl0Y3BfcnN0KGMsIGNvbm4sIHFwYWlyKTsNCj4+ICAgCQlyZXR1cm47DQo+PiAgIAl9DQo+PiAg IA0KPj4gQEAgLTI3MzQsNyArMjc1OSw3IEBAIHZvaWQgdGNwX3NvY2tfaGFuZGxlcihjb25zdCBz dHJ1Y3QgY3R4ICpjLCB1bmlvbiBlcG9sbF9yZWYgcmVmLA0KPj4gICANCj4+ICAgCWlmIChjb25u LT5ldmVudHMgPT0gVEFQX1NZTl9SQ1ZEKSB7DQo+PiAgIAkJaWYgKGV2ZW50cyAmIEVQT0xMT1VU KQ0KPj4gLQkJCXRjcF9jb25uZWN0X2ZpbmlzaChjLCBjb25uKTsNCj4+ICsJCQl0Y3BfY29ubmVj dF9maW5pc2goYywgY29ubiwgcXBhaXIpOw0KPj4gICAJCS8qIERhdGE/IENoZWNrIGxhdGVyICov DQo+PiAgIAl9DQo+PiAgIH0NCj4+IEBAIC0yOTM5LDkgKzI5NjQsMTEgQEAgaW50IHRjcF9pbml0 KHN0cnVjdCBjdHggKmMpDQo+PiAgIA0KPj4gICAvKioNCj4+ICAgICogdGNwX2tlZXBhbGl2ZSgp IC0gU2VuZCBrZWVwYWxpdmVzIGZvciBjb25uZWN0aW9ucyB3aGljaCBuZWVkIGl0DQo+PiAtICog QDoJRXhlY3V0aW9uIGNvbnRleHQNCj4+ICsgKiBAYzoJCUV4ZWN1dGlvbiBjb250ZXh0DQo+PiAr ICogQHFwYWlyOglRdWV1ZSBwYWlyIHRvIHByb2Nlc3MNCj4+ICAgICovDQo+PiAtc3RhdGljIHZv aWQgdGNwX2tlZXBhbGl2ZShzdHJ1Y3QgY3R4ICpjLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKm5v dykNCj4+ICtzdGF0aWMgdm9pZCB0Y3Bfa2VlcGFsaXZlKHN0cnVjdCBjdHggKmMsIGNvbnN0IHN0 cnVjdCB0aW1lc3BlYyAqbm93LA0KPj4gKwkJCSAgdW5zaWduZWQgaW50IHFwYWlyKQ0KPiANCj4g SGVyZSB3ZSdyZSBzY2FubmluZyB0aGUgZmxvdyB0YWJsZSwgYW5kIGVhY2ggY29ubmVjdGlvbiB0 aGVyZSBjb3VsZA0KPiBiZSBhc3NvY2lhdGVkIHdpdGggYSBkaWZmZXJlbnQgcXVldWUsIHNvIGFn YWluLCB0aGlzIHBhcmFtZXRlciBkb2Vzbid0DQo+IG1ha2Ugc2Vuc2UgdG8gbWUuDQoNCkZvciB0 Y3Bfa2VlcGFsaXZlKCkgYW5kIHRjcF9pbmFjdGl2aXR5KCksIHRoZSBxcGFpciBwYXJhbWV0ZXIg aXMgdXNlZA0KdG8gZmlsdGVyIGZsb3dzOiBlYWNoIHRocmVhZCBvbmx5IHByb2Nlc3NlcyBjb25u ZWN0aW9ucyBiZWxvbmdpbmcgdG8NCml0cyBxdWV1ZSBwYWlyIChhZGRlZCBpbiAiZmxvdzogQWRk IHF1ZXVlIHBhaXIgdHJhY2tpbmciKS4NCg0KVGhhbmtzLA0KTGF1cmVudA0KDQo+IA0KPj4gICB7 DQo+PiAgIAl1bmlvbiBmbG93ICpmbG93Ow0KPj4gICANCj4+IEBAIC0yOTU2LDggKzI5ODMsOCBA QCBzdGF0aWMgdm9pZCB0Y3Bfa2VlcGFsaXZlKHN0cnVjdCBjdHggKmMsIGNvbnN0IHN0cnVjdCB0 aW1lc3BlYyAqbm93KQ0KPj4gICAJCWlmIChjb25uLT50YXBfaW5hY3RpdmUpIHsNCj4+ICAgCQkJ Zmxvd19kYmcoY29ubiwgIk5vIHRhcCBhY3Rpdml0eSBmb3IgbGVhc3QgJXVzLCBzZW5kIGtlZXBh bGl2ZSIsDQo+PiAgIAkJCQkgS0VFUEFMSVZFX0lOVEVSVkFMKTsNCj4+IC0JCQlpZiAodGNwX3Nl bmRfZmxhZyhjLCBjb25uLCBLRUVQQUxJVkUpKQ0KPj4gLQkJCQl0Y3BfcnN0KGMsIGNvbm4pOw0K Pj4gKwkJCWlmICh0Y3Bfc2VuZF9mbGFnKGMsIGNvbm4sIEtFRVBBTElWRSwgcXBhaXIpKQ0KPj4g KwkJCQl0Y3BfcnN0KGMsIGNvbm4sIHFwYWlyKTsNCj4+ICAgCQl9DQo+PiAgIA0KPj4gICAJCS8q IFJlYWR5IHRvIGNoZWNrIGZvdCBuZXh0IGludGVydmFsICovDQo+PiBAQCAtMjk2Nyw5ICsyOTk0 LDExIEBAIHN0YXRpYyB2b2lkIHRjcF9rZWVwYWxpdmUoc3RydWN0IGN0eCAqYywgY29uc3Qgc3Ry dWN0IHRpbWVzcGVjICpub3cpDQo+PiAgIA0KPj4gICAvKioNCj4+ICAgICogdGNwX2luYWN0aXZp dHkoKSAtIFNjYW4gZm9yIGFuZCBjbG9zZSBsb25nLWluYWN0aXZlIGNvbm5lY3Rpb25zDQo+PiAt ICogQDoJRXhlY3V0aW9uIGNvbnRleHQNCj4+ICsgKiBAYzoJCUV4ZWN1dGlvbiBjb250ZXh0DQo+ PiArICogQHFwYWlyOglRdWV1ZSBwYWlyIHRvIHByb2Nlc3MNCj4+ICAgICovDQo+PiAtc3RhdGlj IHZvaWQgdGNwX2luYWN0aXZpdHkoc3RydWN0IGN0eCAqYywgY29uc3Qgc3RydWN0IHRpbWVzcGVj ICpub3cpDQo+PiArc3RhdGljIHZvaWQgdGNwX2luYWN0aXZpdHkoc3RydWN0IGN0eCAqYywgY29u c3Qgc3RydWN0IHRpbWVzcGVjICpub3csDQo+PiArCQkJICAgdW5zaWduZWQgaW50IHFwYWlyKQ0K PiANCj4gU2FtZSBoZXJlLg0KPiANCj4+ICAgew0KPj4gICAJdW5pb24gZmxvdyAqZmxvdzsNCj4+ ICAgDQo+PiBAQCAtMjk4Niw3ICszMDE1LDcgQEAgc3RhdGljIHZvaWQgdGNwX2luYWN0aXZpdHko c3RydWN0IGN0eCAqYywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpub3cpDQo+PiAgIAkJCS8qIE5v IGFjdGl2aXR5IGluIHRoaXMgaW50ZXJ2YWwsIHJlc2V0ICovDQo+PiAgIAkJCWZsb3dfZGJnKGNv bm4sICJJbmFjdGl2ZSBmb3IgYXQgbGVhc3QgJXVzLCByZXNldHRpbmciLA0KPj4gICAJCQkJIElO QUNUSVZJVFlfSU5URVJWQUwpOw0KPj4gLQkJCXRjcF9yc3QoYywgY29ubik7DQo+PiArCQkJdGNw X3JzdChjLCBjb25uLCBxcGFpcik7DQo+PiAgIAkJfQ0KPj4gICANCj4+ICAgCQkvKiBSZWFkeSB0 byBjaGVjayBmb3QgbmV4dCBpbnRlcnZhbCAqLw0KPj4gQEAgLTI5OTgsOSArMzAyNywxMSBAQCBz dGF0aWMgdm9pZCB0Y3BfaW5hY3Rpdml0eShzdHJ1Y3QgY3R4ICpjLCBjb25zdCBzdHJ1Y3QgdGlt ZXNwZWMgKm5vdykNCj4+ICAgICogdGNwX2RlZmVyX2hhbmRsZXIoKSAtIEhhbmRsZXIgZm9yIFRD UCBkZWZlcnJlZCB0YXNrcw0KPj4gICAgKiBAYzoJCUV4ZWN1dGlvbiBjb250ZXh0DQo+PiAgICAq IEBub3c6CUN1cnJlbnQgdGltZXN0YW1wDQo+PiArICogQHFwYWlyOglRdWV1ZSBwYWlyIHRvIHBy b2Nlc3MNCj4+ICAgICovDQo+PiAgIC8qIGNwcGNoZWNrLXN1cHByZXNzIFtjb25zdFBhcmFtZXRl clBvaW50ZXIsIHVubWF0Y2hlZFN1cHByZXNzaW9uXSAqLw0KPj4gLXZvaWQgdGNwX2RlZmVyX2hh bmRsZXIoc3RydWN0IGN0eCAqYywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpub3cpDQo+PiArdm9p ZCB0Y3BfZGVmZXJfaGFuZGxlcihzdHJ1Y3QgY3R4ICpjLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMg Km5vdywNCj4+ICsJCSAgICAgICB1bnNpZ25lZCBpbnQgcXBhaXIpDQo+PiAgIHsNCj4+ICAgCXRj cF9wYXlsb2FkX2ZsdXNoKGMpOw0KPj4gICANCj4+IEBAIC0zMDEzLDggKzMwNDQsOCBAQCB2b2lk IHRjcF9kZWZlcl9oYW5kbGVyKHN0cnVjdCBjdHggKmMsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAq bm93KQ0KPj4gICAJaWYgKGMtPm1vZGUgPT0gTU9ERV9QQVNUQSkNCj4+ICAgCQl0Y3Bfc3BsaWNl X3JlZmlsbChjKTsNCj4+ICAgDQo+PiAtCXRjcF9rZWVwYWxpdmUoYywgbm93KTsNCj4+IC0JdGNw X2luYWN0aXZpdHkoYywgbm93KTsNCj4+ICsJdGNwX2tlZXBhbGl2ZShjLCBub3csIHFwYWlyKTsN Cj4+ICsJdGNwX2luYWN0aXZpdHkoYywgbm93LCBxcGFpcik7DQo+PiAgIH0NCj4+ICAgDQo+PiAg IC8qKg0KPj4gQEAgLTM5ODgsMTAgKzQwMTksMTAgQEAgaW50IHRjcF9mbG93X21pZ3JhdGVfdGFy Z2V0X2V4dChzdHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9jb25uICpjb25uLCBpbnQgZmQN Cj4+ICAgCWlmICh0Y3Bfc2V0X3BlZWtfb2Zmc2V0KGNvbm4sIHBlZWtfb2Zmc2V0KSkNCj4+ICAg CQlnb3RvIGZhaWw7DQo+PiAgIA0KPj4gLQlpZiAodGNwX3NlbmRfZmxhZyhjLCBjb25uLCBBQ0sp KQ0KPj4gKwlpZiAodGNwX3NlbmRfZmxhZyhjLCBjb25uLCBBQ0ssIFFQQUlSX0RFRkFVTFQpKQ0K Pj4gICAJCWdvdG8gZmFpbDsNCj4+ICAgDQo+PiAtCXRjcF9kYXRhX2Zyb21fc29jayhjLCBjb25u KTsNCj4+ICsJdGNwX2RhdGFfZnJvbV9zb2NrKGMsIGNvbm4sIFFQQUlSX0RFRkFVTFQpOw0KPj4g ICANCj4+ICAgCWlmICgocmMgPSB0Y3BfZXBvbGxfY3RsKGNvbm4pKSkgew0KPj4gICAJCWZsb3df ZGJnKGNvbm4sDQo+PiBAQCAtNDAwOSw3ICs0MDQwLDcgQEAgZmFpbDoNCj4+ICAgCX0NCj4+ICAg DQo+PiAgIAljb25uLT5mbGFncyA9IDA7IC8qIE5vdCB3YWl0aW5nIGZvciBBQ0ssIGRvbid0IHNj aGVkdWxlIHRpbWVyICovDQo+PiAtCXRjcF9yc3QoYywgY29ubik7DQo+PiArCXRjcF9yc3QoYywg Y29ubiwgUVBBSVJfREVGQVVMVCk7DQo+PiAgIA0KPj4gICAJcmV0dXJuIDA7DQo+PiAgIH0NCj4+ IGRpZmYgLS1naXQgYS90Y3AuaCBiL3RjcC5oDQo+PiBpbmRleCAzMjYyYTgwN2U1ZDQuLjQ5MGYx YjE0MGU0NCAxMDA2NDQNCj4+IC0tLSBhL3RjcC5oDQo+PiArKysgYi90Y3AuaA0KPj4gQEAgLTE4 LDE4ICsxOCwyMSBAQA0KPj4gICANCj4+ICAgc3RydWN0IGN0eDsNCj4+ICAgDQo+PiAtdm9pZCB0 Y3BfdGltZXJfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3R4ICpjLCB1bmlvbiBlcG9sbF9yZWYgcmVm KTsNCj4+ICt2b2lkIHRjcF90aW1lcl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdHggKmMsIHVuaW9u IGVwb2xsX3JlZiByZWYsDQo+PiArCQkgICAgICAgdW5zaWduZWQgaW50IHFwYWlyKTsNCj4+ICAg dm9pZCB0Y3BfbGlzdGVuX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0eCAqYywgdW5pb24gZXBvbGxf cmVmIHJlZiwNCj4+ICAgCQkJY29uc3Qgc3RydWN0IHRpbWVzcGVjICpub3cpOw0KPj4gICB2b2lk IHRjcF9zb2NrX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0eCAqYywgdW5pb24gZXBvbGxfcmVmIHJl ZiwNCj4+IC0JCSAgICAgIHVpbnQzMl90IGV2ZW50cyk7DQo+PiAtaW50IHRjcF90YXBfaGFuZGxl cihjb25zdCBzdHJ1Y3QgY3R4ICpjLCB1aW50OF90IHBpZiwgc2FfZmFtaWx5X3QgYWYsDQo+PiAt CQkgICAgY29uc3Qgdm9pZCAqc2FkZHIsIGNvbnN0IHZvaWQgKmRhZGRyLCB1aW50MzJfdCBmbG93 X2xibCwNCj4+IC0JCSAgICBjb25zdCBzdHJ1Y3QgcG9vbCAqcCwgaW50IGlkeCwgY29uc3Qgc3Ry dWN0IHRpbWVzcGVjICpub3cpOw0KPj4gKwkJICAgICAgdWludDMyX3QgZXZlbnRzLCB1bnNpZ25l ZCBpbnQgcXBhaXIpOw0KPj4gK2ludCB0Y3BfdGFwX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0eCAq YywgdW5zaWduZWQgaW50IHFwYWlyLCB1aW50OF90IHBpZiwNCj4+ICsJCSAgICBzYV9mYW1pbHlf dCBhZiwgY29uc3Qgdm9pZCAqc2FkZHIsIGNvbnN0IHZvaWQgKmRhZGRyLA0KPj4gKwkJICAgIHVp bnQzMl90IGZsb3dfbGJsLCBjb25zdCBzdHJ1Y3QgcG9vbCAqcCwgaW50IGlkeCwNCj4+ICsJCSAg ICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKm5vdyk7DQo+PiAgIGludCB0Y3BfbGlzdGVuKGNvbnN0 IHN0cnVjdCBjdHggKmMsIHVpbnQ4X3QgcGlmLCB1bnNpZ25lZCBydWxlLA0KPj4gICAJICAgICAg IGNvbnN0IHVuaW9uIGluYW55X2FkZHIgKmFkZHIsIGNvbnN0IGNoYXIgKmlmbmFtZSwgaW5fcG9y dF90IHBvcnQpOw0KPj4gICBpbnQgdGNwX2luaXQoc3RydWN0IGN0eCAqYyk7DQo+PiAtdm9pZCB0 Y3BfZGVmZXJfaGFuZGxlcihzdHJ1Y3QgY3R4ICpjLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKm5v dyk7DQo+PiArdm9pZCB0Y3BfZGVmZXJfaGFuZGxlcihzdHJ1Y3QgY3R4ICpjLCBjb25zdCBzdHJ1 Y3QgdGltZXNwZWMgKm5vdywNCj4+ICsJCSAgICAgICB1bnNpZ25lZCBpbnQgcXBhaXIpOw0KPj4g ICANCj4+ICAgdm9pZCB0Y3BfdXBkYXRlX2wyX2J1Zihjb25zdCB1bnNpZ25lZCBjaGFyICpldGhf ZCk7DQo+PiAgIA0KPj4gZGlmZiAtLWdpdCBhL3RjcF9idWYuYyBiL3RjcF9idWYuYw0KPj4gaW5k ZXggY2EzNTYwODlkYzBiLi5hZThiZWJjYTUxMDcgMTAwNjQ0DQo+PiAtLS0gYS90Y3BfYnVmLmMN Cj4+ICsrKyBiL3RjcF9idWYuYw0KPj4gQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgdm9pZCB0 Y3BfcmV2ZXJ0X3NlcShjb25zdCBzdHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9jb25uICoq Y29ubnMsDQo+PiAgIAkJY29ubi0+c2VxX3RvX3RhcCA9IHNlcTsNCj4+ICAgCQlwZWVrX29mZnNl dCA9IGNvbm4tPnNlcV90b190YXAgLSBjb25uLT5zZXFfYWNrX2Zyb21fdGFwOw0KPj4gICAJCWlm ICh0Y3Bfc2V0X3BlZWtfb2Zmc2V0KGNvbm4sIHBlZWtfb2Zmc2V0KSkNCj4+IC0JCQl0Y3BfcnN0 KGMsIGNvbm4pOw0KPj4gKwkJCXRjcF9yc3QoYywgY29ubiwgUVBBSVJfREVGQVVMVCk7DQo+PiAg IAl9DQo+PiAgIH0NCj4+ICAgDQo+PiBAQCAtMzM0LDcgKzMzNCw3IEBAIGludCB0Y3BfYnVmX2Rh dGFfZnJvbV9zb2NrKGNvbnN0IHN0cnVjdCBjdHggKmMsIHN0cnVjdCB0Y3BfdGFwX2Nvbm4gKmNv bm4pDQo+PiAgIAkJY29ubi0+c2VxX3RvX3RhcCA9IGNvbm4tPnNlcV9hY2tfZnJvbV90YXA7DQo+ PiAgIAkJYWxyZWFkeV9zZW50ID0gMDsNCj4+ICAgCQlpZiAodGNwX3NldF9wZWVrX29mZnNldChj b25uLCAwKSkgew0KPj4gLQkJCXRjcF9yc3QoYywgY29ubik7DQo+PiArCQkJdGNwX3JzdChjLCBj b25uLCBRUEFJUl9ERUZBVUxUKTsNCj4+ICAgCQkJcmV0dXJuIC0xOw0KPj4gICAJCX0NCj4+ICAg CX0NCj4+IEBAIC0zNTYsNyArMzU2LDcgQEAgaW50IHRjcF9idWZfZGF0YV9mcm9tX3NvY2soY29u c3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAqY29ubikNCj4+ICAgCX0NCj4+ ICAgDQo+PiAgIAlpZiAodGNwX3ByZXBhcmVfaW92KCZtaF9zb2NrLCBpb3Zfc29jaywgYWxyZWFk eV9zZW50LCBmaWxsX2J1ZnMpKSB7DQo+PiAtCQl0Y3BfcnN0KGMsIGNvbm4pOw0KPj4gKwkJdGNw X3JzdChjLCBjb25uLCBRUEFJUl9ERUZBVUxUKTsNCj4+ICAgCQlyZXR1cm4gLTE7DQo+PiAgIAl9 DQo+PiAgIA0KPj4gQEAgLTM4MSw3ICszODEsNyBAQCBpbnQgdGNwX2J1Zl9kYXRhX2Zyb21fc29j ayhjb25zdCBzdHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9jb25uICpjb25uKQ0KPj4gICAN Cj4+ICAgCWlmIChsZW4gPCAwKSB7DQo+PiAgIAkJaWYgKGVycm5vICE9IEVBR0FJTiAmJiBlcnJu byAhPSBFV09VTERCTE9DSykgew0KPj4gLQkJCXRjcF9yc3QoYywgY29ubik7DQo+PiArCQkJdGNw X3JzdChjLCBjb25uLCBRUEFJUl9ERUZBVUxUKTsNCj4+ICAgCQkJcmV0dXJuIC1lcnJubzsNCj4+ ICAgCQl9DQo+PiAgIA0KPj4gQEAgLTQxMCw3ICs0MTAsNyBAQCBpbnQgdGNwX2J1Zl9kYXRhX2Zy b21fc29jayhjb25zdCBzdHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9jb25uICpjb25uKQ0K Pj4gICANCj4+ICAgCQkJcmV0ID0gdGNwX2J1Zl9zZW5kX2ZsYWcoYywgY29ubiwgRklOIHwgQUNL KTsNCj4+ICAgCQkJaWYgKHJldCkgew0KPj4gLQkJCQl0Y3BfcnN0KGMsIGNvbm4pOw0KPj4gKwkJ CQl0Y3BfcnN0KGMsIGNvbm4sIFFQQUlSX0RFRkFVTFQpOw0KPj4gICAJCQkJcmV0dXJuIHJldDsN Cj4+ICAgCQkJfQ0KPj4gICANCj4+IGRpZmYgLS1naXQgYS90Y3BfaW50ZXJuYWwuaCBiL3RjcF9p bnRlcm5hbC5oDQo+PiBpbmRleCA0MDQ3MmM5OTczYzguLjIyZjg4MjVhZGNjYyAxMDA2NDQNCj4+ IC0tLSBhL3RjcF9pbnRlcm5hbC5oDQo+PiArKysgYi90Y3BfaW50ZXJuYWwuaA0KPj4gQEAgLTE3 NCwxMSArMTc0LDEyIEBAIHZvaWQgY29ubl9ldmVudF9kbyhjb25zdCBzdHJ1Y3QgY3R4ICpjLCBz dHJ1Y3QgdGNwX3RhcF9jb25uICpjb25uLA0KPj4gICAJCWNvbm5fZXZlbnRfZG8oYywgY29ubiwg ZXZlbnQpOwkJCQlcDQo+PiAgIAl9IHdoaWxlICgwKQ0KPj4gICANCj4+IC12b2lkIHRjcF9yc3Rf ZG8oY29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAqY29ubik7DQo+PiAt I2RlZmluZSB0Y3BfcnN0KGMsIGNvbm4pCQkJCQkJXA0KPj4gK3ZvaWQgdGNwX3JzdF9kbyhjb25z dCBzdHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9jb25uICpjb25uLA0KPj4gKwkJdW5zaWdu ZWQgaW50IHFwYWlyKTsNCj4+ICsjZGVmaW5lIHRjcF9yc3QoYywgY29ubiwgcXBhaXIpCQkJCQkJ XA0KPj4gICAJZG8gewkJCQkJCQkJXA0KPj4gICAJCWZsb3dfZGJnKChjb25uKSwgIlRDUCByZXNl dCBhdCAlczolaSIsIF9fZnVuY19fLCBfX0xJTkVfXyk7IFwNCj4+IC0JCXRjcF9yc3RfZG8oYywg Y29ubik7CQkJCQlcDQo+PiArCQl0Y3BfcnN0X2RvKGMsIGNvbm4sIHFwYWlyKTsJCQkJXA0KPj4g ICAJfSB3aGlsZSAoMCkNCj4+ICAgDQo+PiAgIHN0cnVjdCB0Y3BfaW5mb19saW51eDsNCj4+IGRp ZmYgLS1naXQgYS90Y3BfdnUuYyBiL3RjcF92dS5jDQo+PiBpbmRleCA5ZWY2YjUyNDJjOWMuLjRm NzZmNTk5MTU2ZiAxMDA2NDQNCj4+IC0tLSBhL3RjcF92dS5jDQo+PiArKysgYi90Y3BfdnUuYw0K Pj4gQEAgLTExNiwxNSArMTE2LDE3IEBAIHN0YXRpYyBpbnQgdGNwX3Z1X3NlbmRfZHVwKGNvbnN0 IHN0cnVjdCBjdHggKmMsIHN0cnVjdCB2dV92aXJ0cSAqdnEsDQo+PiAgICAqIEBjOgkJRXhlY3V0 aW9uIGNvbnRleHQNCj4+ICAgICogQGNvbm46CUNvbm5lY3Rpb24gcG9pbnRlcg0KPj4gICAgKiBA ZmxhZ3M6CVRDUCBmbGFnczogaWYgbm90IHNldCwgc2VuZCBzZWdtZW50IG9ubHkgaWYgQUNLIGlz IGR1ZQ0KPj4gKyAqIEBxcGFpcjoJUXVldWUgcGFpciB0byBwcm9jZXNzDQo+PiAgICAqDQo+PiAg ICAqIFJldHVybjogLUVDT05OUkVTRVQgb24gZmF0YWwgY29ubmVjdGlvbiBlcnJvciwNCj4+ICAg ICogICAgICAgICAtRUFHQUlOIGlmIHZob3N0LXVzZXIgYnVmZmVycyBhcmUgdW5hdmFpbGFibGUs DQo+PiAgICAqICAgICAgICAgMCBvdGhlcndpc2UNCj4+ICAgICovDQo+PiAtaW50IHRjcF92dV9z ZW5kX2ZsYWcoY29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAqY29ubiwg aW50IGZsYWdzKQ0KPj4gK2ludCB0Y3BfdnVfc2VuZF9mbGFnKGNvbnN0IHN0cnVjdCBjdHggKmMs IHN0cnVjdCB0Y3BfdGFwX2Nvbm4gKmNvbm4sIGludCBmbGFncywNCj4+ICsJCSAgICAgdW5zaWdu ZWQgaW50IHFwYWlyKQ0KPj4gICB7DQo+PiAgIAlzdHJ1Y3QgdnVfZGV2ICp2ZGV2ID0gYy0+dmRl djsNCj4+IC0JaW50IHJ4X3F1ZXVlID0gUVBBSVJfVE9HVUVTVF9RVUVVRShRUEFJUl9ERUZBVUxU KTsNCj4+ICsJaW50IHJ4X3F1ZXVlID0gUVBBSVJfVE9HVUVTVF9RVUVVRShxcGFpcik7DQo+PiAg IAlzdHJ1Y3QgdnVfdmlydHEgKnZxID0gJnZkZXYtPnZxW3J4X3F1ZXVlXTsNCj4+ICAgCXNpemVf dCBvcHRsZW4sIGhkcmxlbiwgaW92X2NudCwgaW92X3VzZWQ7DQo+PiAgIAlzdHJ1Y3QgdnVfdmly dHFfZWxlbWVudCBmbGFnc19lbGVtWzJdOw0KPj4gQEAgLTQyNCwxMyArNDI2LDE0IEBAIHN0YXRp YyB2b2lkIHRjcF92dV9wcmVwYXJlKGNvbnN0IHN0cnVjdCBjdHggKmMsIHN0cnVjdCB0Y3BfdGFw X2Nvbm4gKmNvbm4sDQo+PiAgICAqCQkJICAgICBpbiB3aW5kb3cNCj4+ICAgICogQGM6CQlFeGVj dXRpb24gY29udGV4dA0KPj4gICAgKiBAY29ubjoJQ29ubmVjdGlvbiBwb2ludGVyDQo+PiArICog QHFwYWlyOglRdWV1ZSBwYWlyIHRvIHByb2Nlc3MNCj4+ICAgICoNCj4+ICAgICogUmV0dXJuOiBu ZWdhdGl2ZSBvbiBjb25uZWN0aW9uIHJlc2V0LCAwIG90aGVyd2lzZQ0KPj4gICAgKi8NCj4+IC1p bnQgdGNwX3Z1X2RhdGFfZnJvbV9zb2NrKGNvbnN0IHN0cnVjdCBjdHggKmMsIHN0cnVjdCB0Y3Bf dGFwX2Nvbm4gKmNvbm4pDQo+PiAraW50IHRjcF92dV9kYXRhX2Zyb21fc29jayhjb25zdCBzdHJ1 Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9jb25uICpjb25uLA0KPj4gKwkJCSAgdW5zaWduZWQg aW50IHFwYWlyKQ0KPj4gICB7DQo+PiAgIAl1aW50MzJfdCB3bmRfc2NhbGVkID0gY29ubi0+d25k X2Zyb21fdGFwIDw8IGNvbm4tPndzX2Zyb21fdGFwOw0KPj4gLQl1bnNpZ25lZCBpbnQgcXBhaXIg PSBRUEFJUl9ERUZBVUxUOw0KPj4gICAJaW50IHJ4X3F1ZXVlID0gUVBBSVJfVE9HVUVTVF9RVUVV RShxcGFpcik7DQo+PiAgIAlzdHJ1Y3QgdnVfZGV2ICp2ZGV2ID0gYy0+dmRldjsNCj4+ICAgCXN0 cnVjdCB2dV92aXJ0cSAqdnEgPSAmdmRldi0+dnFbcnhfcXVldWVdOw0KPj4gQEAgLTQ1NCw3ICs0 NTcsNyBAQCBpbnQgdGNwX3Z1X2RhdGFfZnJvbV9zb2NrKGNvbnN0IHN0cnVjdCBjdHggKmMsIHN0 cnVjdCB0Y3BfdGFwX2Nvbm4gKmNvbm4pDQo+PiAgIAkJY29ubi0+c2VxX3RvX3RhcCA9IGNvbm4t PnNlcV9hY2tfZnJvbV90YXA7DQo+PiAgIAkJYWxyZWFkeV9zZW50ID0gMDsNCj4+ICAgCQlpZiAo dGNwX3NldF9wZWVrX29mZnNldChjb25uLCAwKSkgew0KPj4gLQkJCXRjcF9yc3QoYywgY29ubik7 DQo+PiArCQkJdGNwX3JzdChjLCBjb25uLCBxcGFpcik7DQo+PiAgIAkJCXJldHVybiAtMTsNCj4+ ICAgCQl9DQo+PiAgIAl9DQo+PiBAQCAtNDc3LDcgKzQ4MCw3IEBAIGludCB0Y3BfdnVfZGF0YV9m cm9tX3NvY2soY29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAqY29ubikN Cj4+ICAgCQkJICAgICAgICZlbGVtX2NudCwgJmZyYW1lX2NudCk7DQo+PiAgIAlpZiAobGVuIDwg MCkgew0KPj4gICAJCWlmIChsZW4gIT0gLUVBR0FJTiAmJiBsZW4gIT0gLUVXT1VMREJMT0NLKSB7 DQo+PiAtCQkJdGNwX3JzdChjLCBjb25uKTsNCj4+ICsJCQl0Y3BfcnN0KGMsIGNvbm4sIHFwYWly KTsNCj4+ICAgCQkJcmV0dXJuIGxlbjsNCj4+ICAgCQl9DQo+PiAgIA0KPj4gQEAgLTQ5OCw5ICs1 MDEsOSBAQCBpbnQgdGNwX3Z1X2RhdGFfZnJvbV9zb2NrKGNvbnN0IHN0cnVjdCBjdHggKmMsIHN0 cnVjdCB0Y3BfdGFwX2Nvbm4gKmNvbm4pDQo+PiAgIAkJCS8qIFNlZSB0Y3BfYnVmX2RhdGFfZnJv bV9zb2NrKCkgKi8NCj4+ICAgCQkJY29ubi0+c2VxX2Fja190b190YXAgPSBjb25uLT5zZXFfZnJv bV90YXA7DQo+PiAgIA0KPj4gLQkJCXJldCA9IHRjcF92dV9zZW5kX2ZsYWcoYywgY29ubiwgRklO IHwgQUNLKTsNCj4+ICsJCQlyZXQgPSB0Y3BfdnVfc2VuZF9mbGFnKGMsIGNvbm4sIEZJTiB8IEFD SywgcXBhaXIpOw0KPj4gICAJCQlpZiAocmV0KSB7DQo+PiAtCQkJCXRjcF9yc3QoYywgY29ubik7 DQo+PiArCQkJCXRjcF9yc3QoYywgY29ubiwgcXBhaXIpOw0KPj4gICAJCQkJcmV0dXJuIHJldDsN Cj4+ICAgCQkJfQ0KPj4gICANCj4+IGRpZmYgLS1naXQgYS90Y3BfdnUuaCBiL3RjcF92dS5oDQo+ PiBpbmRleCA2YWI2MDU3ZjM1MmEuLmFlNDg0MjBmNDkwNiAxMDA2NDQNCj4+IC0tLSBhL3RjcF92 dS5oDQo+PiArKysgYi90Y3BfdnUuaA0KPj4gQEAgLTYsNyArNiw5IEBADQo+PiAgICNpZm5kZWYg VENQX1ZVX0gNCj4+ICAgI2RlZmluZSBUQ1BfVlVfSA0KPj4gICANCj4+IC1pbnQgdGNwX3Z1X3Nl bmRfZmxhZyhjb25zdCBzdHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9jb25uICpjb25uLCBp bnQgZmxhZ3MpOw0KPj4gLWludCB0Y3BfdnVfZGF0YV9mcm9tX3NvY2soY29uc3Qgc3RydWN0IGN0 eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAqY29ubik7DQo+PiAraW50IHRjcF92dV9zZW5kX2Zs YWcoY29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAqY29ubiwgaW50IGZs YWdzLA0KPj4gKwkJICAgICB1bnNpZ25lZCBpbnQgcXBhaXIpOw0KPj4gK2ludCB0Y3BfdnVfZGF0 YV9mcm9tX3NvY2soY29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAqY29u biwNCj4+ICsJCQkgIHVuc2lnbmVkIGludCBxcGFpcik7DQo+PiAgIA0KPj4gICAjZW5kaWYgIC8q VENQX1ZVX0ggKi8NCj4+IC0tIA0KPj4gMi41NC4wDQo+Pg0KPiANCg0K