From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=fail (p=quarantine dis=none) header.from=redhat.com 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 50FFD5A0265 for ; Fri, 06 Nov 2026 18:00:28 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1793984427; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to: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=Pd2dD1Ubaj2Z1bE6H2Hom8xRx2+8PyhDUKI4gUhF4G4=; b=aK2vPAc+PRAkwgu2AzZQ8kcfg/++CimXFVSk1INhI20H4Jf7/rbYEJyt9p/VCsTyTJOMld N38PHSLQy/Se7MkTNBPDzzm2DCUcaL0Y5GxeSOG8iIEi1s5v5tJv/McfH23eULN78zROnI 0I0cLjTYJul16H/kAG2+skAWch7YLAw= Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-658-P1303RZJOPSQDudIdHdwKA-1; Fri, 06 Nov 2026 12:00:24 -0500 X-MC-Unique: P1303RZJOPSQDudIdHdwKA-1 X-Mimecast-MFC-AGG-ID: P1303RZJOPSQDudIdHdwKA_1793984423 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-492d47f142cso672742f8f.0 for ; Fri, 06 Nov 2026 09:00:23 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793984422; x=1794589222; h=content-transfer-encoding:content-type:in-reply-to:autocrypt:from :content-language:references: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:content-type; bh=Pd2dD1Ubaj2Z1bE6H2Hom8xRx2+8PyhDUKI4gUhF4G4=; b=U0+FoHifRcC33QW//7AOen1Jd3DtCiMm+FZN8t1qnnn07KIhchgfZkgxK3aF3/16dC aMDodJhsIdWhO8hI6wAxdiJ+2yFjpBmPjF7SvViMHiQt6Hwna3qhvrVXHe+zJ2luF0d+ 1eBU9mwGlcnd7CE+s3vsh2DHPPPjOqZfWd9diA6TQPRkfexxQB5SkYh4z0LqkJdowMM2 FIo9ItZnu6AYN8pH7Pwg9gkqctM7xx11Oi/ytdKZrNJWhpgi4lanq6qsGk6GoT7nfBFB exBqTcHPCg92JVN4RX+4BLpv7YF4Tg07iG9/YMT7inPo9yGMsMLm6q7M8jk78MlMDKxF T6zw== X-Forwarded-Encrypted: i=1; AL+hErFL4Fqfe19SHPXOvmKm9LjM3tisaetfe6zsb/xSvwuY/qP4lqH00nhaB//fjlYv0ys1ANP69QElN8Q=@passt.top X-Gm-Message-State: APuU4Z9JfQ6b3Ar1ri9Py7s4GJQV9P1r6r/LdAOM8IVtekFTFxvoiNF3 bXF/86KdSm4x51aK1lpSMrllH+KdNd5G54af1FYbKMnY4hRqkqMyrS8o2/lqhtc6T6IYQPGp/H1 0GVysNE46yQpQSJmL6HywHwu8gnL+q4Gmfk9WDps2O5RHw5jYY/tycEM6yCdZcw== X-Gm-Gg: AYBFou06IrnRU55yjvnD5V0rI4LfvxKhYbNPIWcY07geqOJj3khrFvj32QGcQeaGQZ+ iJ1flSMG3UDYYvdfoy85VqrjmN9Prn8iHXHLBXjJpfaJNAkbiYzIVtzeXAKrrgQtSqsPxvXsu0K Aphzeg2CtuugDJij1xaHxy8YmUXWpj6u30aaYtnS44My1M08zrdgkhzSqbsywUpAQQktU6kfFuS yxeQ8WI1GGlUNrdaN1B7LVZTTVfQshmqQjIL02v6oGTpzilylUvEKxi4/kFBPSodMqvBVoQRj5Q IL+kmAfd/kAi6dBjiRV2ARSezPsiqwW1i9FNe+usfk8RtOkr1mCVZRNC/tjtA9+jEBxqa3nYNlu wE8qtTNy223WkDndt8f+T39aTGOQqjMjF8aL4hu4wsdWFqS0SlqPpQQXUEmuQp5pTqk0coFzYmN 8D2cMyvJ97Gzn0Va4= X-Received: by 2002:a5d:5f03:0:b0:48e:d7c:4bc3 with SMTP id ffacd0b85a97d-4911a2aa6f9mr12010190f8f.21.1793984422363; Fri, 06 Nov 2026 09:00:22 -0800 (PST) X-Received: by 2002:a5d:5f03:0:b0:48e:d7c:4bc3 with SMTP id ffacd0b85a97d-4911a2aa6f9mr12010115f8f.21.1793984421665; Fri, 06 Nov 2026 09:00:21 -0800 (PST) Received: from ?IPV6:2a01:e0a:e10:ef90:e9e7:d9a0:a4eb:dc4b? ([2a01:e0a:e10:ef90:e9e7:d9a0:a4eb:dc4b]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-492d809df21sm4613271f8f.54.2026.11.06.09.00.20 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 06 Nov 2026 09:00:20 -0800 (PST) Message-ID: Date: Fri, 6 Nov 2026 18:00:19 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 3/7] virtio: Add the pasta vhost-net interface and implementation To: aerosouund , passt-dev@passt.top References: <20261016204940.33190-1-aerosound161@gmail.com> <20261016204940.33190-4-aerosound161@gmail.com> From: Laurent Vivier Autocrypt: addr=lvivier@redhat.com; keydata= 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 In-Reply-To: <20261016204940.33190-4-aerosound161@gmail.com> X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 87RZa0br6i7PeuEK4xHXT5YgIeKCURNl2cYHq7AXK1w_1793984423 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: TGGYX5LVYC2DWNROGJUVMHBYBPHFLMTJ X-Message-ID-Hash: TGGYX5LVYC2DWNROGJUVMHBYBPHFLMTJ 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 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: T24gMTAvMTYvMjYgMjI6NDksIGFlcm9zb3V1bmQgd3JvdGU6DQo+IEZyb206IEFtbWFyIFlhc3Nl ciA8YWVyb3NvdW5kMTYxQGdtYWlsLmNvbT4NCj4gDQo+IEFkZCB2aG9zdC5jIGFuZCB2aG9zdC5o IHdoaWNoIGRlZmluZSB0aGUgYXBpIGFuZCBpbXBsZW1lbnRhdGlvbiBmb3INCj4gcGFzdGEgdmhv c3QgYWNjZWxlcmF0aW9uDQo+IA0KPiAtIHZxX3N0YXRlL3Zob3N0X3ZxX3N0YXRlW106IG91ciBv d24gdmlldyBvZiBlYWNoIHZpcnRxdWV1ZSwgd2hpY2ggdGhlDQo+ICAgIGtlcm5lbCBkb2Vzbid0 IHRyYWNrIGZvciB1czogZGVzY3JpcHRvcnMgcmVhZHkgdG8gaGFuZCBiYWNrLCBob3cgZmFyDQo+ ICAgIHdlJ3ZlIHJlYWQgdGhlIHVzZWQgcmluZywgYW5kIHRoZSBuZXh0IGRlc2NyaXB0b3IgdG8g YWxsb2NhdGUNCj4gLSB2cmluZ19kZXNjLCB2cmluZ19hdmFpbF9hbGwsIHZyaW5nX3VzZWRfYWxs LCB2aG9zdF9tZW1vcnk6IHRoZSByaW5ncw0KPiAgICBhbmQgdGhlIHJlZ2lvbiB0YWJsZSBzaGFy ZWQgd2l0aCB0aGUga2VybmVsDQo+IC0gdmhvc3Rfc2V0dXBfbmV0OiBvcGVuIC9kZXYvdmhvc3Qt bmV0IGFuZCBuZWdvdGlhdGUgVklSVElPX0ZfVkVSU0lPTl8xDQo+ICAgIGFuZCBWSE9TVF9ORVRf Rl9WSVJUSU9fTkVUX0hEUi4gRmFpbHVyZSBpcyBmYXRhbCBvbmx5IGlmDQo+ICAgIC0tdmhvc3Qt a2VybmVsIGlzIHNldCB0byAnb24nLg0KPiAtIHZob3N0X3NldHVwX2V2ZW50ZmRzOiBjcmVhdGUs IHJlZ2lzdGVyIGFuZCB3YXRjaCB0aGUgY2FsbCwga2ljayBhbmQNCj4gICAgZXJyb3IgZXZlbnRm ZHMgZm9yIG9uZSBxdWV1ZQ0KPiAtIHZob3N0X3NldHVwX21lbW9yeV90YWJsZTogcmVnaXN0ZXIg dGhlIGJ1ZmZlcnMgdGhlIGtlcm5lbCBtYXkgdG91Y2guDQo+ICAgIHBhc3RhIGhhcyBubyBndWVz dCwgc28gZWFjaCByZWdpb24gbWFwcyBndWVzdF9waHlzX2FkZHIgb250byB0aGUNCj4gICAgaWRl bnRpY2FsIHVzZXJzcGFjZV9hZGRyLCBtYWtpbmcgR1BBIHRyYW5zbGF0aW9uIGFuIGlkZW50aXR5 IG1hcHBpbmcuDQo+ICAgIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgKl9yZWdpc3Rlcl9tZW1vcnlf cmVnaW9ucyBmdW5jdGlvbnMgY3JlYXRlZCBwZXINCj4gICAgcHJvdG9jb2wgYW5kIGZvciBnZW5l cmFsIHB1cnBvc2UgYnVmZmVycy4NCj4gLSB2aG9zdF9zZXRfdnJpbmc6IHB1Ymxpc2ggYSB2cmlu ZydzIGFkZHJlc3NlcywgYmluZCB0aGUgdGFwIGZkIGFzIGl0cw0KPiAgICBiYWNrZW5kIGFuZCBs YXkgb3V0IGl0cyBkZXNjcmlwdG9ycw0KPiAtIHZob3N0X3J4X2Rlc2NyaXB0b3JfaGFuZG9mZiwg dmhvc3Rfa2ljazogaGFuZCBjb25zdW1lZCBkZXNjcmlwdG9ycyBiYWNrDQo+ICAgIGFuZCBub3Rp ZnkgdGhlIGtlcm5lbCB1bmxlc3MgaXQgc2F5cyBpdCdzIGFscmVhZHkgcG9sbGluZw0KPiANCj4g U2lnbmVkLW9mZi1ieTogRXVnZW5pbyBQw6lyZXogPGVwZXJlem1hQHJlZGhhdC5jb20+DQo+IFNp Z25lZC1vZmYtYnk6IEFtbWFyIFlhc3NlciA8YWVyb3NvdW5kMTYxQGdtYWlsLmNvbT4NCj4gLS0t DQo+ICAgTWFrZWZpbGUgIHwgICAyICstDQo+ICAgdGNwX2J1Zi5jIHwgIDIyICsrKy0NCj4gICB0 Y3BfYnVmLmggfCAgIDQgKw0KPiAgIHVkcC5jICAgICB8ICAyMCArKysrDQo+ICAgdWRwLmggICAg IHwgICAzICsNCj4gICB1dGlsLmMgICAgfCAgMTggKysrKw0KPiAgIHV0aWwuaCAgICB8ICAgMiAr DQo+ICAgdmhvc3QuYyAgIHwgMjk1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKw0KPiAgIHZob3N0LmggICB8ICA5MSArKysrKysrKysrKysrKysr Kw0KPiAgIDkgZmlsZXMgY2hhbmdlZCwgNDU1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0p DQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHZob3N0LmMNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQg dmhvc3QuaA0KPiANCj4gZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUNCj4gaW5kZXgg ZjZjODdiMS4uNmYxMWU0YiAxMDA2NDQNCj4gLS0tIGEvTWFrZWZpbGUNCj4gKysrIGIvTWFrZWZp bGUNCj4gQEAgLTM4LDcgKzM4LDcgQEAgUEFTU1RfU1JDUyA9IGFyY2guYyBhcnAuYyBiaXRtYXAu YyBjaGVja3N1bS5jIGNvbmYuYyBkaGNwLmMgZGhjcHY2LmMgXA0KPiAgIAlpc29sYXRpb24uYyBs aW5lcmVhZC5jIGxvZy5jIG1sZC5jIG5kcC5jIG5ldGxpbmsuYyBtaWdyYXRlLmMgcGFja2V0LmMg XA0KPiAgIAlwYXJzZS5jIHBhc3N0LmMgcGFzdGEuYyBwY2FwLmMgcGlmLmMgcmVwYWlyLmMgc2Vy aWFsaXNlLmMgdGFwLmMgdGNwLmMgXA0KPiAgIAl0Y3BfYnVmLmMgdGNwX3NwbGljZS5jIHRjcF92 dS5jIHVkcC5jIHVkcF9mbG93LmMgdWRwX3Z1LmMgdXRpbC5jIFwNCj4gLQl2aG9zdF91c2VyLmMg dmlydGlvLmMgdnVfY29tbW9uLmMNCj4gKwl2aG9zdC5jIHZob3N0X3VzZXIuYyB2aXJ0aW8uYyB2 dV9jb21tb24uYw0KPiAgIFBBU1NUX1JFUEFJUl9TUkNTID0gcGFzc3QtcmVwYWlyLmMNCj4gICBQ RVNUT19TUkNTID0gcGVzdG8uYyBiaXRtYXAuYyBmd2RfcnVsZS5jIGluYW55LmMgaXAuYyBsaW5l cmVhZC5jIHBhcnNlLmMgXA0KPiAgIAlzZXJpYWxpc2UuYw0KPiBkaWZmIC0tZ2l0IGEvdGNwX2J1 Zi5jIGIvdGNwX2J1Zi5jDQo+IGluZGV4IDcyYzQ1NDEuLmRkODAzODQgMTAwNjQ0DQo+IC0tLSBh L3RjcF9idWYuYw0KPiArKysgYi90Y3BfYnVmLmMNCj4gQEAgLTMxLDEyICszMSwxNCBAQA0KPiAg ICNpbmNsdWRlICJpbmFueS5oIg0KPiAgICNpbmNsdWRlICJ0Y3BfY29ubi5oIg0KPiAgICNpbmNs dWRlICJ0Y3BfaW50ZXJuYWwuaCINCj4gLSNpbmNsdWRlICJ0Y3BfYnVmLmgiDQo+ICsjaW5jbHVk ZSAidmhvc3QuaCINCj4gDQo+ICAgI2RlZmluZSBUQ1BfRlJBTUVTX01FTQkJCTEyOA0KPiAgICNk ZWZpbmUgVENQX0ZSQU1FUwkJCQkJCQkgICBcDQo+ICAgCShjLT5tb2RlID09IE1PREVfUEFTVEEg PyAxIDogVENQX0ZSQU1FU19NRU0pDQo+IA0KPiArI2RlZmluZSBUQ1BfTlJFR0lPTlMgNQ0KPiAr DQo+ICAgLyogU3RhdGljIGJ1ZmZlcnMgKi8NCj4gDQo+ICAgLyogRXRoZXJuZXQgaGVhZGVyIGZv ciBJUHY0IGFuZCBJUHY2IGZyYW1lcyAqLw0KPiBAQCAtNzUsNiArNzcsMjQgQEAgdm9pZCB0Y3Bf dXBkYXRlX2wyX2J1Zihjb25zdCB1bnNpZ25lZCBjaGFyICpldGhfZCkNCj4gICAJCWV0aF91cGRh dGVfbWFjKCZ0Y3BfZXRoX2hkcltpXSwgZXRoX2QsIE5VTEwpOw0KPiAgIH0NCj4gDQo+ICsvKioN Cj4gKyAqIHRjcF9yZWdpc3Rlcl9tZW1vcnlfcmVnaW9uKCkgLSBSZWdpc3RlciB0aGUgVENQIHNw ZWNpZmljIGJ1ZmZlcnMgaW50byBhIG1lbW9yeQ0KPiArICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBzbyBpdCBjYW4gYmUgc2hhcmVkIHdpdGggdGhlIGtlcm5lbC4NCj4g KyAqIEB2aG9zdF9tZW06IFRoZSBtZW1vcnkgc3RydWN0IHRvIHJlZ2lzdGVyIHJlZ2lvbnMgaW50 bw0KPiArICogQGxhc3RfaWR4OiAgVGhlIGxhc3QgaW5kZXggYXQgd2hpY2ggbWVtb3J5IHJlZ2lv biBoYXMgYmVlbiBwbGFjZWQNCj4gKyAqLw0KPiArdm9pZCB0Y3BfcmVnaXN0ZXJfbWVtb3J5X3Jl Z2lvbnModW5pb24gdmhvc3RfbWVtb3J5X3UgKnZob3N0X21lbSwgc2l6ZV90ICpsYXN0X2lkeCkg ew0KDQpvcGVuaW5nIGJyYWNlIG11c3QgYmUgb24gaXRzIG93biBsaW5lDQoNCj4gKwlpZiAoKCps YXN0X2lkeCArIFRDUF9OUkVHSU9OUykgPiBOX1ZIT1NUX1JFR0lPTlMpDQo+ICsJCWRpZSgidGNw OiBtZW1vcnkgcmVnaW9uIG92ZXJmbG93LiBtYXhpbXVtIGlzICVkLCBnb3QgJXp1IiwNCj4gKwkJ ICAgIE5fVkhPU1RfUkVHSU9OUywgKmxhc3RfaWR4ICsgVENQX05SRUdJT05TKTsNCg0KbXVsdGls aW5lIGJvZHkgbmVlZHMgb3BlbmluZyBhbmQgY2xvc2luZyBicmFjZXMNCg0KPiArDQo+ICsgICAJ dmhvc3RfbWVtLT5tZW0ucmVnaW9uc1soKmxhc3RfaWR4KSsrXSA9IFZIT1NUX01FTU9SWV9SRUdJ T04odGNwX3BheWxvYWRfdGFwX2hkcik7DQoNCnNwYWNlIGJlZm9yZSB0YWIgaW4gaW5kZW50DQoN Cj4gKwl2aG9zdF9tZW0tPm1lbS5yZWdpb25zWygqbGFzdF9pZHgpKytdID0gVkhPU1RfTUVNT1JZ X1JFR0lPTih0Y3A0X3BheWxvYWRfaXApOw0KPiArCXZob3N0X21lbS0+bWVtLnJlZ2lvbnNbKCps YXN0X2lkeCkrK10gPSBWSE9TVF9NRU1PUllfUkVHSU9OKHRjcDZfcGF5bG9hZF9pcCk7DQo+ICsJ dmhvc3RfbWVtLT5tZW0ucmVnaW9uc1soKmxhc3RfaWR4KSsrXSA9IFZIT1NUX01FTU9SWV9SRUdJ T04odGNwX3BheWxvYWQpOw0KPiArCXZob3N0X21lbS0+bWVtLnJlZ2lvbnNbKCpsYXN0X2lkeCkr K10gPSBWSE9TVF9NRU1PUllfUkVHSU9OKHRjcF9ldGhfaGRyKTsNCj4gK30NCj4gKw0KPiAgIC8q Kg0KPiAgICAqIHRjcF9zb2NrX2lvdl9pbml0KCkgLSBJbml0aWFsaXNlIHNjYXR0ZXItZ2F0aGVy IEwyIGJ1ZmZlcnMgZm9yIElQdjQgc29ja2V0cw0KPiAgICAqIEBjOgkJRXhlY3V0aW9uIGNvbnRl eHQNCj4gZGlmZiAtLWdpdCBhL3RjcF9idWYuaCBiL3RjcF9idWYuaA0KPiBpbmRleCA1ZDMxY2Vh Li41ZTM0MWVkIDEwMDY0NA0KPiAtLS0gYS90Y3BfYnVmLmgNCj4gKysrIGIvdGNwX2J1Zi5oDQo+ IEBAIC02LDExICs2LDE1IEBADQo+ICAgI2lmbmRlZiBUQ1BfQlVGX0gNCj4gICAjZGVmaW5lIFRD UF9CVUZfSA0KPiANCj4gK3VuaW9uIHZob3N0X21lbW9yeV91Ow0KPiArc3RydWN0IHRjcF90YXBf Y29ubjsNCj4gKw0KPiAgIHZvaWQgdGNwX3NvY2tfaW92X2luaXQoY29uc3Qgc3RydWN0IGN0eCAq Yyk7DQo+ICAgdm9pZCB0Y3BfcGF5bG9hZF9mbHVzaChjb25zdCBzdHJ1Y3QgY3R4ICpjLCBjb25z dCBzdHJ1Y3QgdGltZXNwZWMgKm5vdyk7DQo+ICAgaW50IHRjcF9idWZfZGF0YV9mcm9tX3NvY2so Y29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAqY29ubiwNCj4gICAJCQkg ICB1aW50MzJfdCBhbHJlYWR5X3NlbnQsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqbm93KTsNCj4g ICBpbnQgdGNwX2J1Zl9zZW5kX2ZsYWcoY29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90 YXBfY29ubiAqY29ubiwgaW50IGZsYWdzLA0KPiAgIAkJICAgICAgY29uc3Qgc3RydWN0IHRpbWVz cGVjICpub3cpOw0KPiArdm9pZCB0Y3BfcmVnaXN0ZXJfbWVtb3J5X3JlZ2lvbnModW5pb24gdmhv c3RfbWVtb3J5X3UgKnZob3N0X21lbSwgc2l6ZV90ICpsYXN0X2lkeCk7DQo+IA0KPiAgICNlbmRp ZiAgLypUQ1BfQlVGX0ggKi8NCj4gZGlmZiAtLWdpdCBhL3VkcC5jIGIvdWRwLmMNCj4gaW5kZXgg NTA1ZTU1NC4uYTQzNTVhMSAxMDA2NDQNCj4gLS0tIGEvdWRwLmMNCj4gKysrIGIvdWRwLmMNCj4g QEAgLTExOCw2ICsxMTgsNyBAQA0KPiAgICNpbmNsdWRlICJ1ZHBfaW50ZXJuYWwuaCINCj4gICAj aW5jbHVkZSAidWRwX3Z1LmgiDQo+ICAgI2luY2x1ZGUgImVwb2xsX2N0bC5oIg0KPiArI2luY2x1 ZGUgInZob3N0LmgiDQo+IA0KPiAgICNkZWZpbmUgVURQX01BWF9GUkFNRVMJCTMyICAvKiBtYXgg IyBvZiBmcmFtZXMgdG8gcmVjZWl2ZSBhdCBvbmNlICovDQo+IA0KPiBAQCAtMTI4LDYgKzEyOSw4 IEBADQo+ICAgI2RlZmluZSBVRFBfVElNRU9VVF9ERUZBVUxUCQkzMAkvKiBzICovDQo+ICAgI2Rl ZmluZSBVRFBfVElNRU9VVF9TVFJFQU1fREVGQVVMVAkxMjAJLyogcyAqLw0KPiANCj4gKyNkZWZp bmUgVURQX05SRUdJT05TIDUNCj4gKw0KPiAgIC8qIE1heGltdW0gVURQIGRhdGEgdG8gYmUgcmV0 dXJuZWQgaW4gSUNNUCBtZXNzYWdlcyAqLw0KPiAgICNkZWZpbmUgSUNNUDRfTUFYX0RMRU4gOA0K PiAgICNkZWZpbmUgSUNNUDZfTUFYX0RMRU4gKElQVjZfTUlOX01UVQkJCVwNCj4gQEAgLTQ0OCw2 ICs0NTEsMjMgQEAgc3RhdGljIHZvaWQgdWRwX3NlbmRfdGFwX2ljbXA0KGNvbnN0IHN0cnVjdCBj dHggKmMsDQo+ICAgCXRhcF9pY21wNF9zZW5kKGMsIHNhZGRyLCBlYWRkciwgJm1zZywgdGFwX29t YWMsIG1zZ2xlbik7DQo+ICAgfQ0KPiANCj4gKy8qKg0KPiArICogdWRwX3JlZ2lzdGVyX21lbW9y eV9yZWdpb24oKSAtIFJlZ2lzdGVyIHRoZSBVRFAgc3BlY2lmaWMgYnVmZmVycyBpbnRvIGEgbWVt b3J5DQo+ICsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvIGl0IGNh biBiZSBzaGFyZWQgd2l0aCB0aGUga2VybmVsLg0KPiArICogQHZob3N0X21lbTogVGhlIG1lbW9y eSBzdHJ1Y3QgdG8gcmVnaXN0ZXIgcmVnaW9ucyBpbnRvDQo+ICsgKiBAbGFzdF9pZHg6ICBUaGUg bGFzdCBpbmRleCBhdCB3aGljaCBtZW1vcnkgcmVnaW9uIGhhcyBiZWVuIHBsYWNlZA0KPiArICov DQo+ICt2b2lkIHVkcF9yZWdpc3Rlcl9tZW1vcnlfcmVnaW9ucyh1bmlvbiB2aG9zdF9tZW1vcnlf dSAqdmhvc3RfbWVtLCBzaXplX3QgKmxhc3RfaWR4KSB7DQoNCm9wZW5pbmcgYnJhY2Ugb24gaXRz IG93biBsaW5lDQoNCj4gKwlpZiAoKCpsYXN0X2lkeCArIFVEUF9OUkVHSU9OUykgPiBOX1ZIT1NU X1JFR0lPTlMpDQo+ICsJCWRpZSgidWRwOiBtZW1vcnkgcmVnaW9uIG92ZXJmbG93LiBtYXhpbXVt IGlzICVkLCBnb3QgJXp1IiwNCj4gKwkJICAgIE5fVkhPU1RfUkVHSU9OUywgKmxhc3RfaWR4ICsg VURQX05SRUdJT05TKTsNCg0Kb3BlbmluZyBhbmQgY2xvc2luZyBicmFjZXMgZm9yIHRoZSBpZiBi b2R5DQoNCj4gKw0KPiArICAgCXZob3N0X21lbS0+bWVtLnJlZ2lvbnNbKCpsYXN0X2lkeCkrK10g PSBWSE9TVF9NRU1PUllfUkVHSU9OKHVkcF9wYXlsb2FkKTsNCg0Kc3BhY2UgYmVmb3JlIHRhYiBp biBpbmRlbnQNCg0KPiArCXZob3N0X21lbS0+bWVtLnJlZ2lvbnNbKCpsYXN0X2lkeCkrK10gPSBW SE9TVF9NRU1PUllfUkVHSU9OKHVkcF9ldGhfaGRyKTsNCj4gKwl2aG9zdF9tZW0tPm1lbS5yZWdp b25zWygqbGFzdF9pZHgpKytdID0gVkhPU1RfTUVNT1JZX1JFR0lPTih1ZHBfaW92X3JlY3YpOw0K PiArCXZob3N0X21lbS0+bWVtLnJlZ2lvbnNbKCpsYXN0X2lkeCkrK10gPSBWSE9TVF9NRU1PUllf UkVHSU9OKHVkcF9taF9yZWN2KTsNCj4gKwl2aG9zdF9tZW0tPm1lbS5yZWdpb25zWygqbGFzdF9p ZHgpKytdID0gVkhPU1RfTUVNT1JZX1JFR0lPTih1ZHBfbWV0YSk7DQo+ICt9DQo+IA0KPiAgIC8q Kg0KPiAgICAqIHVkcF9zZW5kX3RhcF9pY21wNigpIC0gQ29uc3RydWN0IGFuZCBzZW5kIElDTVB2 NiB0byBsb2NhbCBwZWVyDQo+IGRpZmYgLS1naXQgYS91ZHAuaCBiL3VkcC5oDQo+IGluZGV4IGI1 MDI4M2UuLmViZjFhNGUgMTAwNjQ0DQo+IC0tLSBhL3VkcC5oDQo+ICsrKyBiL3VkcC5oDQo+IEBA IC0xMSw2ICsxMSw4IEBADQo+IA0KPiAgICNpbmNsdWRlICJmd2QuaCINCj4gDQo+ICt1bmlvbiB2 aG9zdF9tZW1vcnlfdTsNCj4gKw0KPiAgIHZvaWQgdWRwX2xpc3Rlbl9zb2NrX2hhbmRsZXIoY29u c3Qgc3RydWN0IGN0eCAqYywgdW5pb24gZXBvbGxfcmVmIHJlZiwNCj4gICAJCQkgICAgIHVpbnQz Ml90IGV2ZW50cywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpub3cpOw0KPiAgIHZvaWQgdWRwX3Nv Y2tfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3R4ICpjLCB1bmlvbiBlcG9sbF9yZWYgcmVmLA0KPiBA QCAtMjEsNiArMjMsNyBAQCBpbnQgdWRwX3RhcF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdHggKmMs IHVpbnQ4X3QgcGlmLA0KPiAgIAkJICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqbm93KTsNCj4g ICBpbnQgdWRwX2luaXQoc3RydWN0IGN0eCAqYyk7DQo+ICAgdm9pZCB1ZHBfdXBkYXRlX2wyX2J1 Zihjb25zdCB1bnNpZ25lZCBjaGFyICpldGhfZCk7DQo+ICt2b2lkIHVkcF9yZWdpc3Rlcl9tZW1v cnlfcmVnaW9ucyh1bmlvbiB2aG9zdF9tZW1vcnlfdSAqdmhvc3RfbWVtLCBzaXplX3QgKmxhc3Rf aWR4KTsNCj4gDQo+ICAgLyoqDQo+ICAgICogc3RydWN0IHVkcF9jdHggLSBFeGVjdXRpb24gY29u dGV4dCBmb3IgVURQDQo+IGRpZmYgLS1naXQgYS91dGlsLmMgYi91dGlsLmMNCj4gaW5kZXggZmYx ZjE5Zi4uY2FmZTBlYyAxMDA2NDQNCj4gLS0tIGEvdXRpbC5jDQo+ICsrKyBiL3V0aWwuYw0KPiBA QCAtMzMsMTAgKzMzLDEzIEBADQo+ICAgI2luY2x1ZGUgImxvZy5oIg0KPiAgICNpbmNsdWRlICJw Y2FwLmgiDQo+ICAgI2luY2x1ZGUgInNlcmlhbGlzZS5oIg0KPiArI2luY2x1ZGUgInZob3N0Lmgi DQo+ICAgI2lmZGVmIEhBU19HRVRSQU5ET00NCj4gICAjaW5jbHVkZSA8c3lzL3JhbmRvbS5oPg0K PiAgICNlbmRpZg0KPiANCj4gKyNkZWZpbmUgR0VORVJBTF9OUkVHSU9OUyAyDQo+ICsNCj4gICAv KiBaZXJvLWZpbGxlZCBidWZmZXIgdG8gcGFkIDgwMi4zIGZyYW1lcywgdXAgdG8gNjAgKEVUSF9a TEVOKSBieXRlcyAqLw0KPiAgIHVpbnQ4X3QgZXRoX3BhZFtFVEhfWkxFTl0gPSB7IDAgfTsNCj4g DQo+IEBAIC00NTMsNiArNDU2LDIxIEBAIGludCBvcGVuX2luX25zKGNvbnN0IHN0cnVjdCBjdHgg KmMsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBmbGFncykNCj4gICAJcmV0dXJuIGFyZy5mZDsNCj4g ICB9DQo+IA0KPiArLyoqDQo+ICsgKiBnZW5lcmFsX3JlZ2lzdGVyX21lbW9yeV9yZWdpb24oKSAt IFJlZ2lzdGVyIHRoZSBnZW5lcmFsIChub24gcHJvdG9jb2wgc3BlY2lmaWMpIGJ1ZmZlcnMNCj4g KyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50byBhIG1lbW9yeSBzdHJ1 Y3Qgc28gaXQgY2FuIGJlIHNoYXJlZCB3aXRoIHRoZSBrZXJuZWwuDQo+ICsgKiBAdmhvc3RfbWVt OiBUaGUgbWVtb3J5IHN0cnVjdCB0byByZWdpc3RlciByZWdpb25zIGludG8NCj4gKyAqIEBsYXN0 X2lkeDogIFRoZSBsYXN0IGluZGV4IGF0IHdoaWNoIG1lbW9yeSByZWdpb24gaGFzIGJlZW4gcGxh Y2VkDQo+ICsgKi8NCj4gK3ZvaWQgZ2VuZXJhbF9yZWdpc3Rlcl9tZW1vcnlfcmVnaW9ucyh1bmlv biB2aG9zdF9tZW1vcnlfdSAqdmhvc3RfbWVtLCBzaXplX3QgKmxhc3RfaWR4KSB7DQoNCm9wZW5p bmcgYnJhY2Ugb24gaXRzIG93biBsaW5lDQoNCj4gKwlpZiAoKCpsYXN0X2lkeCArIEdFTkVSQUxf TlJFR0lPTlMpID4gTl9WSE9TVF9SRUdJT05TKQ0KPiArCQlkaWUoImdlbmVyYWw6IG1lbW9yeSBy ZWdpb24gb3ZlcmZsb3cuIG1heGltdW0gaXMgJWQsIGdvdCAlenUiLA0KPiArCQkgICAgTl9WSE9T VF9SRUdJT05TLCAqbGFzdF9pZHggKyBHRU5FUkFMX05SRUdJT05TKTsNCg0Kb3BlbmluZyBhbmQg Y2xvc2luZyBicmFjZXMNCg0KPiArDQo+ICsgICAJdmhvc3RfbWVtLT5tZW0ucmVnaW9uc1soKmxh c3RfaWR4KSsrXSA9IFZIT1NUX01FTU9SWV9SRUdJT04ocGt0X2J1Zik7DQoNCnNwYWNlIGJlZm9y ZSB0YWIgaW4gaW5kZW50DQoNCj4gKwl2aG9zdF9tZW0tPm1lbS5yZWdpb25zWygqbGFzdF9pZHgp KytdID0gVkhPU1RfTUVNT1JZX1JFR0lPTihldGhfcGFkKTsNCj4gK30NCj4gKw0KPiAgIC8qKg0K PiAgICAqIHBpZGZpbGVfd3JpdGUoKSAtIFdyaXRlIFBJRCB0byBmaWxlLCBpZiByZXF1ZXN0ZWQg dG8gZG8gc28sIGFuZCBjbG9zZSBpdA0KPiAgICAqIEBmZDoJCU9wZW4gUElEIGZpbGUgZGVzY3Jp cHRvciwgY2xvc2VkIG9uIGV4aXQsIC0xIHRvIHNraXAgd3JpdGluZyBpdA0KPiBkaWZmIC0tZ2l0 IGEvdXRpbC5oIGIvdXRpbC5oDQo+IGluZGV4IGVjMmQ5YWMuLjExZjY4NzcgMTAwNjQ0DQo+IC0t LSBhL3V0aWwuaA0KPiArKysgYi91dGlsLmgNCj4gQEAgLTE0NSw2ICsxNDUsNyBAQCBpbnQgZG9f Y2xvbmUoaW50ICgqZm4pKHZvaWQgKiksIGNoYXIgKnN0YWNrX2FyZWEsIHNpemVfdCBzdGFja19z aXplLCBpbnQgZmxhZ3MsDQo+IA0KPiAgIHN0cnVjdCBjdHg7DQo+ICAgdW5pb24gc29ja2FkZHJf aW5hbnk7DQo+ICt1bmlvbiB2aG9zdF9tZW1vcnlfdTsNCj4gDQo+ICAgaW50IHNvY2tfbDQoY29u c3Qgc3RydWN0IGN0eCAqYywgZW51bSBlcG9sbF90eXBlIHR5cGUsDQo+ICAgCSAgICBjb25zdCB1 bmlvbiBzb2NrYWRkcl9pbmFueSAqc2EsIGNvbnN0IGNoYXIgKmlmbmFtZSk7DQo+IEBAIC0xNzAs NiArMTcxLDcgQEAgaW50IHdyaXRlX3JlbWFpbmRlcihpbnQgZmQsIGNvbnN0IHN0cnVjdCBpb3Zl YyAqaW92LCBzaXplX3QgaW92Y250LA0KPiAgIGludCByZWFkX3JlbWFpbmRlcihpbnQgZmQsIGNv bnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBzaXplX3QgY250LCBzaXplX3Qgc2tpcCk7DQo+ICAgYm9v bCBzbnByaW50Zl9jaGVjayhjaGFyICpzdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3Jt YXQsIC4uLik7DQo+ICAgbG9uZyBjbGFtcGVkX3NjYWxlKGxvbmcgeCwgbG9uZyB5LCBsb25nIGxv LCBsb25nIGhpLCBsb25nIGYpOw0KPiArdm9pZCBnZW5lcmFsX3JlZ2lzdGVyX21lbW9yeV9yZWdp b25zKHVuaW9uIHZob3N0X21lbW9yeV91ICp2aG9zdF9tZW0sIHNpemVfdCAqbGFzdF9pZHgpOw0K PiANCj4gICAvKioNCj4gICAgKiBhZl9uYW1lKCkgLSBSZXR1cm4gbmFtZSBvZiBhbiBhZGRyZXNz IGZhbWlseQ0KPiBkaWZmIC0tZ2l0IGEvdmhvc3QuYyBiL3Zob3N0LmMNCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uYTY5YzRiNQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsr KyBiL3Zob3N0LmMNCj4gQEAgLTAsMCArMSwyOTUgQEANCj4gKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyDQo+ICsvKiBDb3B5cmlnaHQgUmVkIEhhdA0KPiArICog QXV0aG9yOiBBbW1hciBZYXNzZXIgPGFlcm9zb3VuZDE2MUBnbWFpbC5jb20+DQo+ICsgKg0KPiAr ICogdmhvc3QuYyAtIHZob3N0LW5ldCAodmhvc3Qta2VybmVsKSBhY2NlbGVyYXRpb24gZm9yIHBh c3RhIG1vZGUNCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8ZXJybm8uaD4NCj4gKyNpbmNsdWRl IDxmY250bC5oPg0KPiArI2luY2x1ZGUgPGludHR5cGVzLmg+DQo+ICsjaW5jbHVkZSA8c3RkaW50 Lmg+DQo+ICsjaW5jbHVkZSA8c3RyaW5nLmg+DQo+ICsjaW5jbHVkZSA8dW5pc3RkLmg+DQo+ICsj aW5jbHVkZSA8c3lzL2V2ZW50ZmQuaD4NCj4gKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4NCj4gKw0K PiArI2luY2x1ZGUgInV0aWwuaCINCj4gKyNpbmNsdWRlICJwYXNzdC5oIg0KPiArI2luY2x1ZGUg InZob3N0LmgiDQo+ICsjaW5jbHVkZSAiZXBvbGxfY3RsLmgiDQo+ICsjaW5jbHVkZSAidWRwLmgi DQo+ICsjaW5jbHVkZSAidGNwX2J1Zi5oIg0KPiArDQo+ICtzdHJ1Y3QgdnFfc3RhdGUgdmhvc3Rf dnFfc3RhdGVbMl07DQo+ICsNCj4gK3N0cnVjdCB2cmluZ19kZXNjX3Bhc3RhIHZyaW5nX2Rlc2Nb Ml1bVkhPU1RfTkRFU0NTXQ0KPiArCQkJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoUEFHRV9TSVpF KSkpOw0KPiArDQo+ICtzdHJ1Y3QgdnJpbmdfYXZhaWxfcGFzdGEgdnJpbmdfYXZhaWxfYWxsWzJd DQo+ICsJCQkJX19hdHRyaWJ1dGVfXygoYWxpZ25lZChQQUdFX1NJWkUpKSk7DQo+ICtzdHJ1Y3Qg dnJpbmdfdXNlZF9wYXN0YSB2cmluZ191c2VkX2FsbFsyXQ0KPiArCQkJCV9fYXR0cmlidXRlX18o KGFsaWduZWQoUEFHRV9TSVpFKSkpOw0KPiArDQo+ICt1bmlvbiB2aG9zdF9tZW1vcnlfdSB2aG9z dF9tZW1vcnkgPSB7DQo+ICsJLm1lbSA9IHsNCj4gKwkJLm5yZWdpb25zID0gTl9WSE9TVF9SRUdJ T05TLA0KPiArCX0sDQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIHZob3N0X3NldHVwX25ldCgp IC0gT3BlbiBhbmQgbmVnb3RpYXRlIGZlYXR1cmVzIG9uIC9kZXYvdmhvc3QtbmV0DQo+ICsgKiBA YzoJCUV4ZWN1dGlvbiBjb250ZXh0OyBjLT52aG9zdC5mZCBhbmQgYy0+dmhvc3QuZmVhdHVyZXMg YXJlIHNldA0KPiArICoJCW9uIHN1Y2Nlc3MsIGFuZCBsZWZ0IHVudG91Y2hlZCBvbiBmYWlsdXJl DQo+ICsgKg0KPiArICogRmFpbHVyZSBoZXJlIG1lYW5zIHZob3N0LW5ldCBpc24ndCB1c2FibGUs IG5vdCB0aGF0IHBhc3RhIGNhbid0IHJ1bjogdGhlDQo+ICsgKiBjYWxsZXIgZmFsbHMgYmFjayB0 byBwbGFpbiB0YXAgb3BlcmF0aW9uIHVubGVzcyBhY2NlbGVyYXRpb24gd2FzIHJlcXVpcmVkLg0K PiArICogVGhhdCdzIHdoeSBub3RoaW5nIGluIGhlcmUgaXMgZmF0YWwuDQo+ICsgKg0KPiArICog UmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC0xIGlmIHZob3N0LW5ldCBpcyB1bmF2YWlsYWJsZSBvciB1 bnVzYWJsZQ0KPiArICovDQo+ICtpbnQgdmhvc3Rfc2V0dXBfbmV0KHN0cnVjdCBjdHggKmMpDQo+ ICt7DQo+ICsJY29uc3QgdWludDY0X3QgcmVxX2ZlYXR1cmVzID0gKDFVTEwgPDwgVklSVElPX0Zf VkVSU0lPTl8xKSB8DQo+ICsJCQkJICAgICAgKDFVTEwgPDwgVkhPU1RfTkVUX0ZfVklSVElPX05F VF9IRFIpOw0KPiArCXVpbnQ2NF90IGZlYXR1cmVzOw0KPiArCWludCB2aG9zdF9mZDsNCj4gKw0K PiArCXZob3N0X2ZkID0gb3BlbigiL2Rldi92aG9zdC1uZXQiLCBPX1JEV1IgfCBPX05PTkJMT0NL IHwgT19DTE9FWEVDKTsNCj4gKwlpZiAodmhvc3RfZmQgPCAwKSB7DQo+ICsJCWRlYnVnX3BlcnJv cigiQ291bGRuJ3Qgb3BlbiAvZGV2L3Zob3N0LW5ldCIpOw0KPiArCQlyZXR1cm4gLTE7DQo+ICsJ fQ0KPiArDQo+ICsJaWYgKGlvY3RsKHZob3N0X2ZkLCBWSE9TVF9TRVRfT1dORVIsIE5VTEwpIDwg MCkgew0KPiArCQlkZWJ1Z19wZXJyb3IoIlZIT1NUX1NFVF9PV05FUiBpb2N0bCBmYWlsZWQiKTsN Cj4gKwkJZ290byBjbG9zZV9mZDsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoaW9jdGwodmhvc3RfZmQs IFZIT1NUX0dFVF9GRUFUVVJFUywgJmZlYXR1cmVzKSA8IDApIHsNCj4gKwkJZGVidWdfcGVycm9y KCJWSE9TVF9HRVRfRkVBVFVSRVMgaW9jdGwgZmFpbGVkIik7DQo+ICsJCWdvdG8gY2xvc2VfZmQ7 DQo+ICsJfQ0KPiArDQo+ICsJaWYgKChmZWF0dXJlcyAmIHJlcV9mZWF0dXJlcykgIT0gcmVxX2Zl YXR1cmVzKSB7DQo+ICsJCWRlYnVnKCJ2aG9zdC1uZXQgaXMgbWlzc2luZyBmZWF0dXJlczogMHgl MDE2IiBQUkl4NjQsDQo+ICsJCSAgICAgIHJlcV9mZWF0dXJlcyAmIH5mZWF0dXJlcyk7DQo+ICsJ CWdvdG8gY2xvc2VfZmQ7DQo+ICsJfQ0KPiArDQo+ICsJZmVhdHVyZXMgPSByZXFfZmVhdHVyZXM7 DQo+ICsJaWYgKGlvY3RsKHZob3N0X2ZkLCBWSE9TVF9TRVRfRkVBVFVSRVMsICZmZWF0dXJlcykg PCAwKSB7DQo+ICsJCWRlYnVnX3BlcnJvcigiVkhPU1RfU0VUX0ZFQVRVUkVTIGlvY3RsIGZhaWxl ZCIpOw0KPiArCQlnb3RvIGNsb3NlX2ZkOw0KPiArCX0NCj4gKw0KPiArCWMtPnZob3N0LmZlYXR1 cmVzID0gZmVhdHVyZXM7DQo+ICsJYy0+dmhvc3QuZmQgPSB2aG9zdF9mZDsNCj4gKw0KPiArCXJl dHVybiAwOw0KPiArDQo+ICtjbG9zZV9mZDoNCj4gKwljbG9zZSh2aG9zdF9mZCk7DQo+ICsNCj4g KwlyZXR1cm4gLTE7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogdmhvc3Rfc2V0dXBfZXZlbnRm ZHMoKSAtIFNldCB1cCBvbmUgcXVldWUncyBldmVudGZkcyBhbmQgcmluZyBzaXplDQo+ICsgKiBA YzoJCUV4ZWN1dGlvbiBjb250ZXh0OyBjLT52aG9zdC5mZCBtdXN0IGFscmVhZHkgYmUgc2V0DQo+ ICsgKiBAcXVldWVfaWR4OglJbmRleCBvZiB0aGUgcXVldWUgKHZyaW5nKSB0byBjb25maWd1cmUN Cj4gKyAqDQo+ICsgKi8NCj4gK3ZvaWQgdmhvc3Rfc2V0dXBfZXZlbnRmZHMoc3RydWN0IGN0eCAq YywgaW50IHF1ZXVlX2lkeCkNCj4gK3sNCj4gKwlzdHJ1Y3Qgdmhvc3RfdnJpbmdfZmlsZSB2cmlu Z19maWxlID0geyAuaW5kZXggPSBxdWV1ZV9pZHggfTsNCj4gKwlzdHJ1Y3Qgdmhvc3RfdnJpbmdf c3RhdGUgc3RhdGUgPSB7IC5pbmRleCA9IHF1ZXVlX2lkeCB9Ow0KPiArCXVuaW9uIGVwb2xsX3Jl ZiByZWYgPSB7IDAgfTsNCj4gKwlpbnQgdmhvc3RfZmQgPSBjLT52aG9zdC5mZDsNCj4gKwlpbnQg cmM7DQo+ICsNCj4gKwlzdGF0ZS5udW0gPSBWSE9TVF9OREVTQ1M7DQo+ICsJcmVmLnF1ZXVlID0g cXVldWVfaWR4Ow0KPiArDQo+ICsJdnJpbmdfZmlsZS5mZCA9IGV2ZW50ZmQoMCwgRUZEX05PTkJM T0NLIHwgRUZEX0NMT0VYRUMpOw0KPiArCWlmICh2cmluZ19maWxlLmZkIDwgMCkNCj4gKwkJZGll X3BlcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSB2aG9zdCBjYWxsIGV2ZW50ZmQsIHF1ZXVlICVkIiwN Cj4gKwkJCSAgIHF1ZXVlX2lkeCk7DQo+ICsJcmVmLmZkID0gdnJpbmdfZmlsZS5mZDsNCj4gKw0K PiArCXJjID0gaW9jdGwodmhvc3RfZmQsIFZIT1NUX1NFVF9WUklOR19DQUxMLCAmdnJpbmdfZmls ZSk7DQo+ICsJaWYgKHJjIDwgMCkNCj4gKwkJZGllX3BlcnJvcigiVkhPU1RfU0VUX1ZSSU5HX0NB TEwgaW9jdGwgZmFpbGVkLCBxdWV1ZSAlZCIsDQo+ICsJCQkgICBxdWV1ZV9pZHgpOw0KPiArDQo+ ICsJcmVmLnR5cGUgPSBFUE9MTF9UWVBFX1ZIT1NUX0NBTEw7DQo+ICsJcmMgPSBlcG9sbF9hZGQo Yy0+ZXBvbGxmZCwgRVBPTExJTiwgcmVmKTsNCj4gKwlpZiAocmMgPCAwKQ0KPiArCQlkaWVfcGVy cm9yKCJGYWlsZWQgdG8gd2F0Y2ggdmhvc3QgY2FsbCBldmVudGZkLCBxdWV1ZSAlZCIsDQo+ICsJ CQkgICBxdWV1ZV9pZHgpOw0KPiArCWMtPnZob3N0LnZxW3F1ZXVlX2lkeF0uY2FsbF9mZCA9IHZy aW5nX2ZpbGUuZmQ7DQo+ICsNCj4gKwl2cmluZ19maWxlLmZkID0gZXZlbnRmZCgwLCBFRkRfTk9O QkxPQ0sgfCBFRkRfQ0xPRVhFQyk7DQo+ICsJaWYgKHZyaW5nX2ZpbGUuZmQgPCAwKQ0KPiArCQlk aWVfcGVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIHZob3N0IGVycm9yIGV2ZW50ZmQsIHF1ZXVlICVk IiwNCj4gKwkJCSAgIHF1ZXVlX2lkeCk7DQo+ICsNCj4gKwlyYyA9IGlvY3RsKHZob3N0X2ZkLCBW SE9TVF9TRVRfVlJJTkdfRVJSLCAmdnJpbmdfZmlsZSk7DQo+ICsJaWYgKHJjIDwgMCkNCj4gKwkJ ZGllX3BlcnJvcigiVkhPU1RfU0VUX1ZSSU5HX0VSUiBpb2N0bCBmYWlsZWQsIHF1ZXVlICVkIiwN Cj4gKwkJCSAgIHF1ZXVlX2lkeCk7DQo+ICsNCj4gKwlyZWYudHlwZSA9IEVQT0xMX1RZUEVfVkhP U1RfRVJST1I7DQo+ICsJcmVmLmZkID0gdnJpbmdfZmlsZS5mZDsNCj4gKwlyYyA9IGVwb2xsX2Fk ZChjLT5lcG9sbGZkLCBFUE9MTElOLCByZWYpOw0KPiArCWlmIChyYyA8IDApDQo+ICsJCWRpZV9w ZXJyb3IoIkZhaWxlZCB0byB3YXRjaCB2aG9zdCBlcnJvciBldmVudGZkLCBxdWV1ZSAlZCIsDQo+ ICsJCQkgICBxdWV1ZV9pZHgpOw0KPiArCWMtPnZob3N0LnZxW3F1ZXVlX2lkeF0uZXJyX2ZkID0g dnJpbmdfZmlsZS5mZDsNCj4gKw0KPiArCXJjID0gaW9jdGwodmhvc3RfZmQsIFZIT1NUX1NFVF9W UklOR19OVU0sICZzdGF0ZSk7DQo+ICsJaWYgKHJjIDwgMCkNCj4gKwkJZGllX3BlcnJvcigiVkhP U1RfU0VUX1ZSSU5HX05VTSBpb2N0bCBmYWlsZWQsIHF1ZXVlICVkIiwNCj4gKwkJCSAgIHF1ZXVl X2lkeCk7DQo+ICsNCj4gKwl2cmluZ19maWxlLmZkID0gZXZlbnRmZCgwLCBFRkRfTk9OQkxPQ0sg fCBFRkRfQ0xPRVhFQyk7DQo+ICsJaWYgKHZyaW5nX2ZpbGUuZmQgPCAwKQ0KPiArCQlkaWVfcGVy cm9yKCJGYWlsZWQgdG8gY3JlYXRlIHZob3N0IGtpY2sgZXZlbnRmZCwgcXVldWUgJWQiLA0KPiAr CQkJICAgcXVldWVfaWR4KTsNCj4gKw0KPiArCXJjID0gaW9jdGwodmhvc3RfZmQsIFZIT1NUX1NF VF9WUklOR19LSUNLLCAmdnJpbmdfZmlsZSk7DQo+ICsJaWYgKHJjIDwgMCkNCj4gKwkJZGllX3Bl cnJvcigiVkhPU1RfU0VUX1ZSSU5HX0tJQ0sgaW9jdGwgZmFpbGVkLCBxdWV1ZSAlZCIsDQo+ICsJ CQkgICBxdWV1ZV9pZHgpOw0KPiArDQo+ICsJYy0+dmhvc3QudnFbcXVldWVfaWR4XS5raWNrX2Zk ID0gdnJpbmdfZmlsZS5mZDsNCj4gKw0KPiArCXZob3N0X3ZxX3N0YXRlW3F1ZXVlX2lkeF0ubnVt X2ZyZWUgPSBWSE9TVF9OREVTQ1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogdmhvc3Rfc2V0 dXBfbWVtb3J5X3RhYmxlKCkgLSBSZWdpc3RlciB0aGUgR1BBL0hWQSB0cmFuc2xhdGlvbiB0YWJs ZQ0KPiArICogQGM6CQlFeGVjdXRpb24gY29udGV4dDsgYy0+dmhvc3QuZmQgbXVzdCBhbHJlYWR5 IGJlIHNldA0KPiArICoNCj4gKyAqIHZob3N0LW5ldCByZWFkcyB0aGUgYWRkcmVzc2VzIHdlIHB1 dCBpbiBkZXNjcmlwdG9ycyBhcyBndWVzdCBwaHlzaWNhbA0KPiArICogYWRkcmVzc2VzLCBhbmQg dHJhbnNsYXRlcyB0aGVtIHRocm91Z2ggdGhpcyB0YWJsZSBiZWZvcmUgdG91Y2hpbmcgdGhlDQo+ ICsgKiBtZW1vcnkgdGhleSByZWZlciB0by4gcGFzdGEgaGFzIG5vIGd1ZXN0IGFuZCBubyBzZWNv bmQgYWRkcmVzcyBzcGFjZToNCj4gKyAqIHRoZSBhZGRyZXNzZXMgd2UgcHV0IHRoZXJlIGFyZSBv dXIgb3duIHZpcnR1YWwgYWRkcmVzc2VzLiBFdmVyeSByZWdpb24NCj4gKyAqIGJlbG93IHRoZXJl Zm9yZSBzZXRzIGd1ZXN0X3BoeXNfYWRkciBlcXVhbCB0byB1c2Vyc3BhY2VfYWRkciwgc28gdGhh dA0KPiArICogR1BBID09IEhWQSBhbmQgdGhlIHRyYW5zbGF0aW9uIGlzIGFuIGlkZW50aXR5IG1h cHBpbmcuDQo+ICsgKg0KPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yIHdp dGggZXJybm8gc2V0DQo+ICsgKi8NCj4gK2ludCB2aG9zdF9zZXR1cF9tZW1vcnlfdGFibGUoc3Ry dWN0IGN0eCAqYykgew0KPiArCXNpemVfdCByZWdpb25faWR4ID0gMDsNCj4gKw0KPiArCS8qIGdl bmVyYWwgcHVycG9zZSBidWZmZXJzICovDQo+ICsJZ2VuZXJhbF9yZWdpc3Rlcl9tZW1vcnlfcmVn aW9ucygmdmhvc3RfbWVtb3J5LCAmcmVnaW9uX2lkeCk7DQo+ICsNCj4gKwkvKiB0Y3Agc3BlY2lm aWMgYnVmZmVycyAqLw0KPiArCXRjcF9yZWdpc3Rlcl9tZW1vcnlfcmVnaW9ucygmdmhvc3RfbWVt b3J5LCAmcmVnaW9uX2lkeCk7DQo+ICsNCj4gKwkvKiB1ZHAgc3BlY2lmaWMgYnVmZmVycyAqLw0K PiArCXVkcF9yZWdpc3Rlcl9tZW1vcnlfcmVnaW9ucygmdmhvc3RfbWVtb3J5LCAmcmVnaW9uX2lk eCk7DQo+ICsNCj4gKwl2aG9zdF9tZW1vcnkubWVtLm5yZWdpb25zID0gcmVnaW9uX2lkeDsNCj4g Kw0KPiArCXJldHVybiBpb2N0bChjLT52aG9zdC5mZCwgVkhPU1RfU0VUX01FTV9UQUJMRSwgJnZo b3N0X21lbW9yeS5tZW0pOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIHZob3N0X3NldF92cmlu ZygpIC0gUmVnaXN0ZXIgYSB2cmluZydzIGFkZHJlc3NlcyBhbmQgYmluZCBpdHMgYmFja2VuZA0K PiArICogQGM6CQlFeGVjdXRpb24gY29udGV4dDsgYy0+dmhvc3QuZmQgbXVzdCBhbHJlYWR5IGJl IHNldA0KPiArICogQHF1ZXVlX2lkeDoJSW5kZXggb2YgdGhlIHF1ZXVlICh2cmluZykgdG8gY29u ZmlndXJlDQo+ICsgKiBAdGFwX2ZkOglUYXAgZmQgdG8gYmluZCBhcyB0aGlzIHF1ZXVlJ3MgYmFj a2VuZA0KPiArICovDQo+ICt2b2lkIHZob3N0X3NldF92cmluZyhzdHJ1Y3QgY3R4ICpjLCBpbnQg cXVldWVfaWR4LCBpbnQgdGFwX2ZkKQ0KPiArew0KPiArCWludCB2aG9zdF9mZCA9IGMtPnZob3N0 LmZkOw0KPiArCXN0cnVjdCB2aG9zdF92cmluZ19hZGRyIGFkZHIgPSB7DQo+ICsJCS5pbmRleCA9 IHF1ZXVlX2lkeCwNCj4gKwkJLmRlc2NfdXNlcl9hZGRyID0gKHVuc2lnbmVkIGxvbmcpdnJpbmdf ZGVzY1txdWV1ZV9pZHhdLA0KPiArCQkuYXZhaWxfdXNlcl9hZGRyID0gKHVuc2lnbmVkIGxvbmcp JnZyaW5nX2F2YWlsX2FsbFtxdWV1ZV9pZHhdLA0KPiArCQkudXNlZF91c2VyX2FkZHIgPSAodW5z aWduZWQgbG9uZykmdnJpbmdfdXNlZF9hbGxbcXVldWVfaWR4XSwNCj4gKwkJLmxvZ19ndWVzdF9h ZGRyID0gKHVuc2lnbmVkIGxvbmcpJnZyaW5nX3VzZWRfYWxsW3F1ZXVlX2lkeF0sDQo+ICsJfTsN Cj4gKwlzdHJ1Y3Qgdmhvc3RfdnJpbmdfZmlsZSBmaWxlID0gew0KPiArCQkuaW5kZXggPSBxdWV1 ZV9pZHgsDQo+ICsJCS5mZCA9IHRhcF9mZCwNCj4gKwl9Ow0KPiArCXVuc2lnbmVkIGludCBpOw0K PiArCWludCByYzsNCj4gKw0KPiArCXJjID0gaW9jdGwodmhvc3RfZmQsIFZIT1NUX1NFVF9WUklO R19BRERSLCAmYWRkcik7DQo+ICsJaWYgKHJjIDwgMCkNCj4gKwkJZGllX3BlcnJvcigiVkhPU1Rf U0VUX1ZSSU5HX0FERFIgaW9jdGwgZmFpbGVkLCBxdWV1ZSAlZCIsDQo+ICsJCQkgICBxdWV1ZV9p ZHgpOw0KPiArDQo+ICsJaWYgKHF1ZXVlX2lkeCA9PSBWSE9TVF9BVkFJTF9RX0lEWCkgew0KPiAr CQlmb3IgKGkgPSAwOyBpIDwgVkhPU1RfTkRFU0NTOyArK2kpIHsNCj4gKwkJCXZyaW5nX2Rlc2Nb VkhPU1RfQVZBSUxfUV9JRFhdW2ldLmFkZHIgPQ0KPiArCQkJCSh1aW50cHRyX3QpcGt0X2J1ZiAr IGkgKiBWSE9TVF9ERVNDX0JZVEVTOw0KPiArCQkJdnJpbmdfZGVzY1tWSE9TVF9BVkFJTF9RX0lE WF1baV0ubGVuID0gVkhPU1RfREVTQ19CWVRFUzsNCj4gKwkJCXZyaW5nX2Rlc2NbVkhPU1RfQVZB SUxfUV9JRFhdW2ldLmZsYWdzID0NCj4gKwkJCQlWUklOR19ERVNDX0ZfV1JJVEU7DQoNCk1pc3Np bmcgZW5kaWFubmVzcyBjb252ZXJzaW9ucy4NCg0KPiArCQl9DQo+ICsNCj4gKwkJZm9yIChpID0g MDsgaSA8IFZIT1NUX05ERVNDUzsgKytpKQ0KPiArCQkJdnJpbmdfYXZhaWxfYWxsW1ZIT1NUX0FW QUlMX1FfSURYXS5yaW5nW2ldID0NCj4gKwkJCQlodG9sZTE2KGkpOw0KPiArDQo+ICsJCXZob3N0 X3J4X2Rlc2NyaXB0b3JfaGFuZG9mZihjKTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAocXVldWVfaWR4 ID09IFZIT1NUX1VTRURfUV9JRFgpIHsNCj4gKwkJZm9yIChpID0gMDsgaSA8IChWSE9TVF9OREVT Q1MgLSAxKTsgKytpKQ0KPiArCQkJdnJpbmdfZGVzY1tWSE9TVF9VU0VEX1FfSURYXVtpXS5uZXh0 ID0gaSArIDE7DQoNCm1pc3NpbmcgZW5kaWFubmVzcyBjb252ZXJzaW9uLg0KDQo+ICsJfQ0KPiAr DQo+ICsJcmMgPSBpb2N0bCh2aG9zdF9mZCwgVkhPU1RfTkVUX1NFVF9CQUNLRU5ELCAmZmlsZSk7 DQo+ICsJaWYgKHJjIDwgMCkNCj4gKwkJZGllX3BlcnJvcigiVkhPU1RfTkVUX1NFVF9CQUNLRU5E IGlvY3RsIGZhaWxlZCwgcXVldWUgJWQiLA0KPiArCQkJICAgcXVldWVfaWR4KTsNCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgKiB2aG9zdF9yeF9kZXNjcmlwdG9yX2hhbmRvZmYoKSAtIEFubm91bmNl IGZyZWVkIGZyb20tZ3Vlc3QgZGVzY3JpcHRvcnMNCj4gKyAqIEBjOgkJRXhlY3V0aW9uIGNvbnRl eHQNCj4gKyAqDQo+ICsgKiBCdW1wcyBhdmFpbC5pZHggYnkgdGhlIG51bWJlciBvZiBkZXNjcmlw dG9ycyBhY2N1bXVsYXRlZCBpbg0KPiArICogdmhvc3RfdnFfc3RhdGVbVkhPU1RfQVZBSUxfUV9J RFhdLm51bV9mcmVlIChmcm9tIHByaW9yDQo+ICsgKiBjb25zdW1lX29uZV9yeF9kZXNjcmlwdG9y KCkgY2FsbHMpLA0KPiArICogdGhlbiByZXNldHMgdGhlIGNvdW50ZXIgdG8gemVyby4gVGhlIGtl cm5lbCB3aWxsIHNlZSB0aGUgbmV3DQo+ICsgKiBhdmFpbC5pZHggYW5kIGNvbnN1bWUgdGhlIGZy ZXNobHktYXZhaWxhYmxlIGRlc2NyaXB0b3JzLg0KPiArICovDQo+ICt2b2lkIHZob3N0X3J4X2Rl c2NyaXB0b3JfaGFuZG9mZihzdHJ1Y3QgY3R4ICpjKQ0KDQptdXN0IGJlICJjb25zdCBzdHJ1Y3Qg Y3R4ICpjIg0KICA+ICt7DQo+ICsJc21wX3dtYigpOw0KPiArDQo+ICsJaWYgKCF2aG9zdF92cV9z dGF0ZVtWSE9TVF9BVkFJTF9RX0lEWF0ubnVtX2ZyZWUpDQo+ICsJCXJldHVybjsNCj4gKw0KPiAr CXZyaW5nX2F2YWlsX2FsbFtWSE9TVF9BVkFJTF9RX0lEWF0uaWR4ICs9DQo+ICsJCXZob3N0X3Zx X3N0YXRlW1ZIT1NUX0FWQUlMX1FfSURYXS5udW1fZnJlZTsNCj4gKwl2aG9zdF92cV9zdGF0ZVtW SE9TVF9BVkFJTF9RX0lEWF0ubnVtX2ZyZWUgPSAwOw0KPiArCXZob3N0X2tpY2soJnZyaW5nX3Vz ZWRfYWxsW1ZIT1NUX0FWQUlMX1FfSURYXSwNCj4gKwkJICAgYy0+dmhvc3QudnFbVkhPU1RfQVZB SUxfUV9JRFhdLmtpY2tfZmQpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIHZob3N0X2tpY2so KSAtIE5vdGlmeSB0aGUga2VybmVsIHRoYXQgbmV3IGRlc2NyaXB0b3JzIGFyZSBhdmFpbGFibGUN Cj4gKyAqIEB1c2VkOglVc2VkIHJpbmcgb2YgdGhlIHF1ZXVlIHdlJ3JlIGFubm91bmNpbmcgb24s IGNoZWNrZWQgdG8gc2VlDQo+ICsgKgkJd2hldGhlciB0aGUga2VybmVsJ3MgdmlydGlvIHRocmVh ZCBpcyBhbHJlYWR5IHJlYWRpbmcNCj4gKyAqCQlkZXNjcmlwdG9ycyBhbmQgZG9lc24ndCB3YW50 IHRvIGJlIG5vdGlmaWVkDQo+ICsgKiBAa2lja19mZDoJS2ljayBldmVudGZkIG9mIHRoYXQgc2Ft ZSBxdWV1ZQ0KPiArICovDQo+ICt2b2lkIHZob3N0X2tpY2soc3RydWN0IHZyaW5nX3VzZWRfcGFz dGEgKnVzZWQsIGludCBraWNrX2ZkKQ0KDQptdXN0IGJlICJjb25zdCBzdHJ1Y3QgdnJpbmdfdXNl ZF9wYXN0YSAqIg0KPiArew0KPiArCS8qIEVuc3VyZSB0aGF0IHRoZSByZWFkIG9mIHVzZWQtPmZs YWdzIGRvZXNuJ3QgZ2V0IHJlb3JkZXJlZCB0byBiZQ0KPiArCSAqIGFib3ZlIHRoZSBhdmFpbC5p ZHggdXBkYXRlDQo+ICsJICovDQo+ICsJc21wX21iKCk7DQo+ICsNCj4gKwlpZiAoISh1c2VkLT5m bGFncyAmIFZSSU5HX1VTRURfRl9OT19OT1RJRlkpKQ0KPiArCQlldmVudGZkX3dyaXRlKGtpY2tf ZmQsIDEpOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvdmhvc3QuaCBiL3Zob3N0LmgNCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uYmQ1NTVmOQ0KPiAtLS0gL2Rldi9udWxs DQo+ICsrKyBiL3Zob3N0LmgNCj4gQEAgLTAsMCArMSw5MSBAQA0KPiArLyogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXINCj4gKyAqIENvcHlyaWdodCBSZWQgSGF0DQo+ ICsgKiBBdXRob3I6IEFtbWFyIFlhc3NlciA8YWVyb3NvdW5kMTYxQGdtYWlsLmNvbT4NCj4gKyAq DQo+ICsgKiB2aG9zdC5oIC0gdmhvc3QtbmV0ICh2aG9zdC1rZXJuZWwpIGFjY2VsZXJhdGlvbiBm b3IgcGFzdGEgbW9kZQ0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYgVkhPU1RfSA0KPiArI2RlZmlu ZSBWSE9TVF9IDQo+ICsNCj4gKyNpbmNsdWRlIDxhc3NlcnQuaD4NCj4gKyNpbmNsdWRlIDxzdGRk ZWYuaD4NCj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4NCj4gKw0KPiArI2luY2x1ZGUgPGxpbnV4L3Zo b3N0Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvdmhvc3RfdHlwZXMuaD4NCj4gKyNpbmNsdWRlIDxs aW51eC92aXJ0aW9fY29uZmlnLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvdmlydGlvX25ldC5oPg0K PiArI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19yaW5nLmg+DQo+ICsNCj4gKyNpbmNsdWRlICJwYXNz dC5oIg0KPiArDQo+ICsjZGVmaW5lIFZIT1NUX0FWQUlMX1FfSURYIDANCj4gKyNkZWZpbmUgVkhP U1RfVVNFRF9RX0lEWCAxDQo+ICsNCj4gKy8qKg0KPiArICogc3RydWN0IHZxX3N0YXRlIC0gUGVy LXZpcnRxdWV1ZSBsb2NhbCBkZXNjcmlwdG9yIHRyYWNraW5nDQo+ICsgKiBAbnVtX2ZyZWU6CQlO dW1iZXIgb2YgZGVzY3JpcHRvcnMgcmVhZHkgdG8gYmUgYW5ub3VuY2VkIHRvIHRoZQ0KPiArICoJ CQlrZXJuZWwgdmlhIHZob3N0X3J4X2Rlc2NyaXB0b3JfaGFuZG9mZigpDQo+ICsgKiBAbGFzdF91 c2VkX2lkeDoJTnVtYmVyIG9mIHVzZWQtcmluZyBlbnRyaWVzIGNvbnN1bWVkIHNvIGZhcjsNCj4g KyAqCQkJbGFnZ2luZyByZWFkIGN1cnNvciB2cy4gdnJpbmdfdXNlZC0+aWR4ICh0aGUNCj4gKyAq CQkJa2VybmVsJ3Mgd3JpdGUgY3Vyc29yKQ0KPiArICovDQo+ICtleHRlcm4gc3RydWN0IHZxX3N0 YXRlIHsNCj4gKwl1aW50MTZfdCBudW1fZnJlZTsNCj4gKwl1aW50MTZfdCBsYXN0X3VzZWRfaWR4 Ow0KPiArCXVpbnQxNl90IG5leHRfZnJlZTsNCj4gK30gdmhvc3RfdnFfc3RhdGVbMl07DQo+ICsN Cj4gK3N0cnVjdCB2cmluZ19kZXNjX3Bhc3RhIHsNCg0KV2h5IGRvbid0IHlvdSB1c2UgdnJpbmdf ZGVzYyBmcm9tIGxpbnV4L3ZpcnRpb19yaW5nLmgNCg0KPiArCV9fdmlydGlvNjQgYWRkcjsNCj4g KwlfX3ZpcnRpbzMyIGxlbjsNCj4gKwlfX3ZpcnRpbzE2IGZsYWdzOw0KPiArCV9fdmlydGlvMTYg bmV4dDsNCj4gK307DQo+ICsNCj4gK2V4dGVybiBzdHJ1Y3QgdnJpbmdfZGVzY19wYXN0YSB2cmlu Z19kZXNjWzJdW1ZIT1NUX05ERVNDU107DQo+ICsNCj4gK3N0cnVjdCB2cmluZ19hdmFpbF9wYXN0 YSB7DQo+ICsJX192aXJ0aW8xNiBmbGFnczsNCj4gKwlfX3ZpcnRpbzE2IGlkeDsNCj4gKwlfX3Zp cnRpbzE2IHJpbmdbVkhPU1RfTkRFU0NTXTsNCj4gK307DQo+ICtzdGF0aWNfYXNzZXJ0KHNpemVv ZihzdHJ1Y3QgdnJpbmdfYXZhaWxfcGFzdGEpID09DQo+ICsJICAgICAgb2Zmc2V0b2Yoc3RydWN0 IHZyaW5nX2F2YWlsLCByaW5nW1ZIT1NUX05ERVNDU10pLA0KPiArCSAgICAgICJ2cmluZ19hdmFp bF9wYXN0YSBkb2Vzbid0IG1hdGNoIHRoZSBrZXJuZWwgYXZhaWwgcmluZyBsYXlvdXQiKTsNCj4g K2V4dGVybiBzdHJ1Y3QgdnJpbmdfYXZhaWxfcGFzdGEgdnJpbmdfYXZhaWxfYWxsWzJdOw0KPiAr DQo+ICtzdHJ1Y3QgdnJpbmdfdXNlZF9wYXN0YSB7DQo+ICsJX192aXJ0aW8xNiBmbGFnczsNCj4g KwlfX3ZpcnRpbzE2IGlkeDsNCj4gKwl2cmluZ191c2VkX2VsZW1fdCByaW5nW1ZIT1NUX05ERVND U107DQo+ICt9Ow0KPiArc3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IHZyaW5nX3VzZWRfcGFz dGEpID09DQo+ICsJICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZyaW5nX3VzZWQsIHJpbmdbVkhPU1Rf TkRFU0NTXSksDQo+ICsJICAgICAgInZyaW5nX3VzZWRfcGFzdGEgZG9lc24ndCBtYXRjaCB0aGUg a2VybmVsIHVzZWQgcmluZyBsYXlvdXQiKTsNCj4gK2V4dGVybiBzdHJ1Y3QgdnJpbmdfdXNlZF9w YXN0YSB2cmluZ191c2VkX2FsbFsyXTsNCj4gKw0KPiArI2RlZmluZSBOX1ZIT1NUX1JFR0lPTlMg MTINCj4gK3VuaW9uIHZob3N0X21lbW9yeV91IHsNCj4gKwlzdHJ1Y3Qgdmhvc3RfbWVtb3J5IG1l bTsNCj4gKwljaGFyIGJ1ZltvZmZzZXRvZihzdHJ1Y3Qgdmhvc3RfbWVtb3J5LCByZWdpb25zW05f VkhPU1RfUkVHSU9OU10pXTsNCj4gK307DQoNCnN0cnVjdCB2aG9zdF9tZW1vcnlfcGFzdGEgew0K ICAgICBfX3UzMiBucmVnaW9uczsNCiAgICAgX191MzIgcGFkZGluZzsNCiAgICAgc3RydWN0IHZo b3N0X21lbW9yeV9yZWdpb24gcmVnaW9uc1tOX1ZIT1NUX1JFR0lPTlNdOw0KfTsNCg0KPiArZXh0 ZXJuIHVuaW9uIHZob3N0X21lbW9yeV91IHZob3N0X21lbW9yeTsNCj4gKw0KPiArI2RlZmluZSBW SE9TVF9NRU1PUllfUkVHSU9OX1BUUihhZGRyLCBzaXplKSBcDQo+ICsgICAgKHN0cnVjdCB2aG9z dF9tZW1vcnlfcmVnaW9uKSB7IFwNCj4gKyAgICAgICAgLmd1ZXN0X3BoeXNfYWRkciA9ICh1aW50 cHRyX3QpYWRkciwgXA0KPiArICAgICAgICAubWVtb3J5X3NpemUgPSBzaXplLCBcDQo+ICsgICAg ICAgIC51c2Vyc3BhY2VfYWRkciAgPSAodWludHB0cl90KWFkZHIsIFwNCj4gKyAgICB9DQo+ICsj ZGVmaW5lIFZIT1NUX01FTU9SWV9SRUdJT04oYnVmKSBWSE9TVF9NRU1PUllfUkVHSU9OX1BUUigm YnVmLCBzaXplb2YoYnVmKSkNCj4gKw0KPiArdm9pZCB2aG9zdF9zZXRfdnJpbmcoc3RydWN0IGN0 eCAqYywgaW50IHF1ZXVlX2lkeCwgaW50IHRhcF9mZCk7DQo+ICtpbnQgdmhvc3Rfc2V0dXBfbWVt b3J5X3RhYmxlKHN0cnVjdCBjdHggKmMpOw0KPiAraW50IHZob3N0X3NldHVwX25ldChzdHJ1Y3Qg Y3R4ICpjKTsNCj4gK3ZvaWQgdmhvc3Rfc2V0dXBfZXZlbnRmZHMoc3RydWN0IGN0eCAqYywgaW50 IHF1ZXVlX2lkeCk7DQo+ICt2b2lkIHZob3N0X3J4X2Rlc2NyaXB0b3JfaGFuZG9mZihzdHJ1Y3Qg Y3R4ICpjKTsNCj4gK3ZvaWQgdmhvc3Rfa2ljayhzdHJ1Y3QgdnJpbmdfdXNlZF9wYXN0YSAqdXNl ZCwgaW50IGtpY2tfZmQpOw0KPiArDQo+ICsjZW5kaWYgLyogVkhPU1RfSCAqLw0KPiAtLQ0KPiAy LjM5LjUgKEFwcGxlIEdpdC0xNTQpDQoNCg==