From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from out2.migadu.com (out2.migadu.com [IPv6:2001:41d0:2:aacc::]) by mail.toke.dk (Postfix) with ESMTPS id AF5E09B48CD for ; Wed, 9 Nov 2022 05:19:19 +0100 (CET) Authentication-Results: mail.toke.dk; dkim=pass (1024-bit key; unprotected) header.d=linux.dev header.i=@linux.dev header.a=rsa-sha256 header.s=key1 header.b=AY35qZK/ Message-ID: <6f57370f-7ec3-07dd-54df-04423cab6d1f@linux.dev> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1667967558; 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; bh=ouYOFF6aFUVHomGahLwuODRnf5pOyTvr4vgnuiqDJD0=; b=AY35qZK/X4oWooNNnwuekvQDtqa8AcUwtE/S/0ekk/r+Dx2IsSnICVl/zQ1u2d27Zyjy59 f8BTR7VPu+AHoFlfpu5J79J2sq4QVIsTYBhzfjnvSjlaJuVFnDCofTd8hJR81N09X65e8v gf4rYLAVK08x6oT6O3FSvjzLvw5uIYM= Date: Tue, 8 Nov 2022 20:19:13 -0800 MIME-Version: 1.0 Content-Language: en-US X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Martin KaFai Lau To: Stanislav Fomichev References: <20221104032532.1615099-1-sdf@google.com> <20221104032532.1615099-7-sdf@google.com> <187e89c3-d7de-7bec-c72e-d9d6eb5bcca0@linux.dev> <9a8fefe4-2fcb-95b7-cda0-06509feee78e@linux.dev> In-Reply-To: <9a8fefe4-2fcb-95b7-cda0-06509feee78e@linux.dev> Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 X-Migadu-Flow: FLOW_OUT Message-ID-Hash: BM4IV6F6MHTWSTPAB4XA2OMKNF4XVYJ4 X-Message-ID-Hash: BM4IV6F6MHTWSTPAB4XA2OMKNF4XVYJ4 X-MailFrom: martin.lau@linux.dev 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: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, song@kernel.org, yhs@fb.com, john.fastabend@gmail.com, kpsingh@kernel.org, haoluo@google.com, jolsa@kernel.org, David Ahern , Jakub Kicinski , Willem de Bruijn , Jesper Dangaard Brouer , Anatoly Burakov , Alexander Lobakin , Magnus Karlsson , Maryam Tahhan , xdp-hints@xdp-project.net, netdev@vger.kernel.org, bpf@vger.kernel.org X-Mailman-Version: 3.3.5 Precedence: list Subject: [xdp-hints] Re: [RFC bpf-next v2 06/14] xdp: Carry over xdp metadata into skb context List-Id: XDP hardware hints design discussion Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: T24gMTEvOC8yMiA3OjA3IFBNLCBNYXJ0aW4gS2FGYWkgTGF1IHdyb3RlOg0KPiBPbiAxMS84LzIy IDE6NTQgUE0sIFN0YW5pc2xhdiBGb21pY2hldiB3cm90ZToNCj4+IE9uIE1vbiwgTm92IDcsIDIw MjIgYXQgMjowMiBQTSBNYXJ0aW4gS2FGYWkgTGF1IDxtYXJ0aW4ubGF1QGxpbnV4LmRldj4gd3Jv dGU6DQo+Pj4NCj4+PiBPbiAxMS8zLzIyIDg6MjUgUE0sIFN0YW5pc2xhdiBGb21pY2hldiB3cm90 ZToNCj4+Pj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9s aW51eC9za2J1ZmYuaA0KPj4+PiBpbmRleCA1OWM5ZmQ1NTY5OWQuLmRiYTg1N2YyMTJkNyAxMDA2 NDQNCj4+Pj4gLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaA0KPj4+PiArKysgYi9pbmNsdWRl L2xpbnV4L3NrYnVmZi5oDQo+Pj4+IEBAIC00MjE3LDkgKzQyMTcsMTMgQEAgc3RhdGljIGlubGlu ZSBib29sIHNrYl9tZXRhZGF0YV9kaWZmZXJzKGNvbnN0IHN0cnVjdCANCj4+Pj4gc2tfYnVmZiAq c2tiX2EsDQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRydWUgOiBfX3NrYl9tZXRh ZGF0YV9kaWZmZXJzKHNrYl9hLCBza2JfYiwgbGVuX2EpOw0KPj4+PiDCoMKgIH0NCj4+Pj4NCj4+ Pj4gK3ZvaWQgc2tiX21ldGFkYXRhX2ltcG9ydF9mcm9tX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2ti LCBzaXplX3QgbGVuKTsNCj4+Pj4gKw0KPj4+PiDCoMKgIHN0YXRpYyBpbmxpbmUgdm9pZCBza2Jf bWV0YWRhdGFfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHU4IG1ldGFfbGVuKQ0KPj4+PiDCoMKg IHsNCj4+Pj4gwqDCoMKgwqDCoMKgIHNrYl9zaGluZm8oc2tiKS0+bWV0YV9sZW4gPSBtZXRhX2xl bjsNCj4+Pj4gK8KgwqDCoMKgIGlmIChtZXRhX2xlbikNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBza2JfbWV0YWRhdGFfaW1wb3J0X2Zyb21feGRwKHNrYiwgbWV0YV9sZW4pOw0KPj4+ PiDCoMKgIH0NCj4+Pj4NCj4+PiBbIC4uLiBdDQo+Pj4NCj4+Pj4gK3N0cnVjdCB4ZHBfdG9fc2ti X21ldGFkYXRhIHsNCj4+Pj4gK8KgwqDCoMKgIHUzMiBtYWdpYzsgLyogeGRwX21ldGFkYXRhX21h Z2ljICovDQo+Pj4+ICvCoMKgwqDCoCB1NjQgcnhfdGltZXN0YW1wOw0KPj4+PiArfSBfX3JhbmRv bWl6ZV9sYXlvdXQ7DQo+Pj4+ICsNCj4+Pj4gK3N0cnVjdCBicGZfcGF0Y2g7DQo+Pj4+ICsNCj4+ Pg0KPj4+IFsgLi4uIF0NCj4+Pg0KPj4+PiArdm9pZCBza2JfbWV0YWRhdGFfaW1wb3J0X2Zyb21f eGRwKHN0cnVjdCBza19idWZmICpza2IsIHNpemVfdCBsZW4pDQo+Pj4+ICt7DQo+Pj4+ICvCoMKg wqDCoCBzdHJ1Y3QgeGRwX3RvX3NrYl9tZXRhZGF0YSAqbWV0YSA9ICh2b2lkICopKHNrYl9tYWNf aGVhZGVyKHNrYikgLSBsZW4pOw0KPj4+PiArDQo+Pj4+ICvCoMKgwqDCoCAvKiBPcHRpb25hbCBT S0IgaW5mbywgY3VycmVudGx5IG1pc3Npbmc6DQo+Pj4+ICvCoMKgwqDCoMKgICogLSBIVyBjaGVj a3N1bSBpbmZvwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHNrYi0+aXBfc3VtbWVkKQ0KPj4+PiArwqDC oMKgwqDCoCAqIC0gSFcgUlggaGFzaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChz a2Jfc2V0X2hhc2gpDQo+Pj4+ICvCoMKgwqDCoMKgICogLSBSWCByaW5nIGRldiBxdWV1ZSBpbmRl eMKgwqDCoCAoc2tiX3JlY29yZF9yeF9xdWV1ZSkNCj4+Pj4gK8KgwqDCoMKgwqAgKi8NCj4+Pj4g Kw0KPj4+PiArwqDCoMKgwqAgaWYgKGxlbiAhPSBzaXplb2Yoc3RydWN0IHhkcF90b19za2JfbWV0 YWRhdGEpKQ0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybjsNCj4+Pj4gKw0K Pj4+PiArwqDCoMKgwqAgaWYgKG1ldGEtPm1hZ2ljICE9IHhkcF9tZXRhZGF0YV9tYWdpYykNCj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm47DQo+Pj4+ICsNCj4+Pj4gK8KgwqDC oMKgIGlmIChtZXRhLT5yeF90aW1lc3RhbXApIHsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAqc2tiX2h3dHN0YW1wcyhza2IpID0gKHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyl7 DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5od3RzdGFt cCA9IG5zX3RvX2t0aW1lKG1ldGEtPnJ4X3RpbWVzdGFtcCksDQo+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfTsNCj4+Pj4gK8KgwqDCoMKgIH0NCj4+Pj4gK30NCj4+Pg0KPj4+IENvbnNp ZGVyaW5nIHRoZSBtZXRhZGF0YSB3aWxsIGFmZmVjdCB0aGUgZ3JvLCBzaG91bGQgdGhlIG1ldGEg YmUgY2xlYXJlZCBhZnRlcg0KPj4+IGltcG9ydGluZyB0byB0aGUgc2tiPw0KPj4NCj4+IFllYWgs IGdvb2Qgc3VnZ2VzdGlvbiwgd2lsbCBjbGVhciBpdCBoZXJlLg0KPj4NCj4+PiBbIC4uLiBdDQo+ Pj4NCj4+Pj4gKy8qIFNpbmNlIHdlJ3JlIG5vdCBhY3R1YWxseSBkb2luZyBhIGNhbGwgYnV0IGlu c3RlYWQgcmV3cml0aW5nDQo+Pj4+ICsgKiBpbiBwbGFjZSwgd2UgY2FuIG9ubHkgYWZmb3JkIHRv IHVzZSBSMC1SNSBzY3JhdGNoIHJlZ2lzdGVycy4NCj4+Pj4gKyAqDQo+Pj4+ICsgKiBXZSByZXNl cnZlIFIxIGZvciBicGZfeGRwX21ldGFkYXRhX2V4cG9ydF90b19za2IgYW5kIGxldCBpbmRpdmlk dWFsDQo+Pj4+ICsgKiBtZXRhZGF0YSBrZnVuY3MgdXNlIG9ubHkgUjAsUjQtUjUuDQo+Pj4+ICsg Kg0KPj4+PiArICogVGhlIGFib3ZlIGFsc28gbWVhbnMgd2UgX2Nhbm5vdF8gZWFzaWx5IGNhbGwg YW55IG90aGVyIGhlbHBlci9rZnVuYw0KPj4+PiArICogYmVjYXVzZSB0aGVyZSBpcyBubyBwbGFj ZSBmb3IgdXMgdG8gcHJlc2VydmUgb3VyIFIxIGFyZ3VtZW50Ow0KPj4+PiArICogZXhpc3Rpbmcg UjYtUjkgYmVsb25nIHRvIHRoZSBjYWxsZWUuDQo+Pj4+ICsgKi8NCj4+Pj4gK3ZvaWQgeGRwX21l dGFkYXRhX2V4cG9ydF90b19za2IoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3Qg DQo+Pj4+IGJwZl9wYXRjaCAqcGF0Y2gpDQo+Pj4+ICt7DQo+Pj4+ICvCoMKgwqDCoCB1MzIgZnVu Y19pZDsNCj4+Pj4gKw0KPj4+PiArwqDCoMKgwqAgLyoNCj4+Pj4gK8KgwqDCoMKgwqAgKiBUaGUg Y29kZSBiZWxvdyBnZW5lcmF0ZXMgdGhlIGZvbGxvd2luZzoNCj4+Pj4gK8KgwqDCoMKgwqAgKg0K Pj4+PiArwqDCoMKgwqDCoCAqIHZvaWQgYnBmX3hkcF9tZXRhZGF0YV9leHBvcnRfdG9fc2tiKHN0 cnVjdCB4ZHBfbWQgKmN0eCkNCj4+Pj4gK8KgwqDCoMKgwqAgKiB7DQo+Pj4+ICvCoMKgwqDCoMKg ICrCoMKgwqDCoMKgIHN0cnVjdCB4ZHBfdG9fc2tiX21ldGFkYXRhICptZXRhOw0KPj4+PiArwqDC oMKgwqDCoCAqwqDCoMKgwqDCoCBpbnQgcmV0Ow0KPj4+PiArwqDCoMKgwqDCoCAqDQo+Pj4+ICvC oMKgwqDCoMKgICrCoMKgwqDCoMKgIHJldCA9IGJwZl94ZHBfYWRqdXN0X21ldGEoY3R4LCAtc2l6 ZW9mKCptZXRhKSk7DQo+Pj4+ICvCoMKgwqDCoMKgICrCoMKgwqDCoMKgIGlmICghcmV0KQ0KPj4+ PiArwqDCoMKgwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuOw0KPj4+PiAr wqDCoMKgwqDCoCAqDQo+Pj4+ICvCoMKgwqDCoMKgICrCoMKgwqDCoMKgIG1ldGEgPSBjdHgtPmRh dGFfbWV0YTsNCj4+Pj4gK8KgwqDCoMKgwqAgKsKgwqDCoMKgwqAgbWV0YS0+bWFnaWMgPSB4ZHBf bWV0YWRhdGFfbWFnaWM7DQo+Pj4+ICvCoMKgwqDCoMKgICrCoMKgwqDCoMKgIG1ldGEtPnJ4X3Rp bWVzdGFtcCA9IGJwZl94ZHBfbWV0YWRhdGFfcnhfdGltZXN0YW1wKGN0eCk7DQo+Pj4+ICvCoMKg wqDCoMKgICogfQ0KPj4+PiArwqDCoMKgwqDCoCAqDQo+Pj4+ICvCoMKgwqDCoMKgICovDQo+Pj4+ ICsNCj4+Pj4gK8KgwqDCoMKgIGJwZl9wYXRjaF9hcHBlbmQocGF0Y2gsDQo+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgLyogcjIgPSAoKHN0cnVjdCB4ZHBfYnVmZiAqKXIxKS0+ZGF0YV9t ZXRhOyAqLw0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJQRl9MRFhfTUVNKEJQRl9E VywgQlBGX1JFR18yLCBCUEZfUkVHXzEsDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2Zmc2V0b2Yoc3RydWN0IHhkcF9idWZmLCBkYXRhX21l dGEpKSwNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiByMyA9ICgoc3RydWN0IHhk cF9idWZmICopcjEpLT5kYXRhOyAqLw0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJQ Rl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18zLCBCUEZfUkVHXzEsDQo+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2Zmc2V0b2Yoc3RydWN0IHhk cF9idWZmLCBkYXRhKSksDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogaWYgKGRh dGFfbWV0YSAhPSBkYXRhKSByZXR1cm47DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAqDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqwqDCoMKgwqDCoCBkYXRhX21l dGEgPiBkYXRhOiB4ZHBfZGF0YV9tZXRhX3Vuc3VwcG9ydGVkKCkNCj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICrCoMKgwqDCoMKgIGRhdGFfbWV0YSA8IGRhdGE6IGFscmVhZHkgdXNl ZCwgbm8gbmVlZCB0byB0b3VjaA0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8N Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCUEZfSk1QX1JFRyhCUEZfSk5FLCBCUEZf UkVHXzIsIEJQRl9SRUdfMywgUzE2X01BWCksDQo+Pj4+ICsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAvKiByMiAtPSBzaXplb2Yoc3RydWN0IHhkcF90b19za2JfbWV0YWRhdGEpOyAq Lw0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJQRl9BTFU2NF9JTU0oQlBGX1NVQiwg QlBGX1JFR18yLA0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzaXplb2Yoc3RydWN0IHhkcF90b19za2JfbWV0YWRhdGEpKSwNCj4+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiByMyA9ICgoc3RydWN0IHhkcF9idWZmICopcjEp LT5kYXRhX2hhcmRfc3RhcnQ7ICovDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQlBG X0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzMsIEJQRl9SRUdfMSwNCj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvZmZzZXRvZihzdHJ1Y3QgeGRw X2J1ZmYsIGRhdGFfaGFyZF9zdGFydCkpLA0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IC8qIHIzICs9IHNpemVvZihzdHJ1Y3QgeGRwX2ZyYW1lKSAqLw0KPj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgQlBGX1JFR18zLA0KPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2Yo c3RydWN0IHhkcF9mcmFtZSkpLA0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIGlm IChkYXRhLXNpemVvZihzdHJ1Y3QgeGRwX3RvX3NrYl9tZXRhZGF0YSkgPCANCj4+Pj4gZGF0YV9o YXJkX3N0YXJ0K3NpemVvZihzdHJ1Y3QgeGRwX2ZyYW1lKSkgcmV0dXJuOyAqLw0KPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJQRl9KTVBfUkVHKEJQRl9KTFQsIEJQRl9SRUdfMiwgQlBG X1JFR18zLCBTMTZfTUFYKSwNCj4+Pj4gKw0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IC8qICgoc3RydWN0IHhkcF9idWZmICopcjEpLT5kYXRhX21ldGEgPSByMjsgKi8NCj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCUEZfU1RYX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgQlBG X1JFR18yLA0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIG9mZnNldG9mKHN0cnVjdCB4ZHBfYnVmZiwgZGF0YV9tZXRhKSksDQo+Pj4+ICsNCj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiAqKChzdHJ1Y3QgeGRwX3RvX3NrYl9tZXRh ZGF0YSAqKXIyKS0+bWFnaWMgPSANCj4+Pj4geGRwX21ldGFkYXRhX21hZ2ljOyAqLw0KPj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJQRl9TVF9NRU0oQlBGX1csIEJQRl9SRUdfMiwNCj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2Zmc2V0 b2Yoc3RydWN0IHhkcF90b19za2JfbWV0YWRhdGEsIG1hZ2ljKSwNCj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeGRwX21ldGFkYXRhX21hZ2ljKSwN Cj4+Pj4gK8KgwqDCoMKgICk7DQo+Pj4+ICsNCj4+Pj4gK8KgwqDCoMKgIC8qwqDCoMKgwqDCoCBy MCA9IGJwZl94ZHBfbWV0YWRhdGFfcnhfdGltZXN0YW1wKGN0eCk7ICovDQo+Pj4+ICvCoMKgwqDC oCBmdW5jX2lkID0geGRwX21ldGFkYXRhX2tmdW5jX2lkKFhEUF9NRVRBREFUQV9LRlVOQ19SWF9U SU1FU1RBTVApOw0KPj4+PiArwqDCoMKgwqAgcHJvZy0+YXV4LT54ZHBfa2Z1bmNfbmRvLT5uZG9f dW5yb2xsX2tmdW5jKHByb2csIGZ1bmNfaWQsIHBhdGNoKTsNCj4+Pj4gKw0KPj4+PiArwqDCoMKg wqAgYnBmX3BhdGNoX2FwcGVuZChwYXRjaCwNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAvKiByMiA9ICgoc3RydWN0IHhkcF9idWZmICopcjEpLT5kYXRhX21ldGE7ICovDQo+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzIsIEJQ Rl9SRUdfMSwNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBvZmZzZXRvZihzdHJ1Y3QgeGRwX2J1ZmYsIGRhdGFfbWV0YSkpLA0KPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qICooKHN0cnVjdCB4ZHBfdG9fc2tiX21ldGFkYXRhICop cjIpLT5yeF90aW1lc3RhbXAgPSByMDsgKi8NCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBCUEZfU1RYX01FTShCUEZfRFcsIEJQRl9SRUdfMiwgQlBGX1JFR18wLA0KPj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9mZnNldG9mKHN0cnVj dCB4ZHBfdG9fc2tiX21ldGFkYXRhLCByeF90aW1lc3RhbXApKSwNCj4+Pg0KPj4+IENhbiB0aGUg eGRwIHByb2cgc3RpbGwgY2hhbmdlIHRoZSBtZXRhZGF0YSB0aHJvdWdoIHhkcC0+ZGF0YV9tZXRh PyB0YmgsIEkgYW0gbm90DQo+Pj4gc3VyZSBpdCBpcyBzb2xpZCBlbm91Z2ggYnkgYXNraW5nIHRo ZSB4ZHAgcHJvZyBub3QgdG8gdXNlIHRoZSBzYW1lIHJhbmRvbSBudW1iZXINCj4+PiBpbiBpdHMg b3duIG1ldGFkYXRhICsgbm90IHRvIGNoYW5nZSB0aGUgbWV0YWRhdGEgdGhyb3VnaCB4ZHAtPmRh dGFfbWV0YSBhZnRlcg0KPj4+IGNhbGxpbmcgYnBmX3hkcF9tZXRhZGF0YV9leHBvcnRfdG9fc2ti KCkuDQo+Pg0KPj4gV2hhdCBkbyB5b3UgdGhpbmsgdGhlIHVzZWNhc2UgaGVyZSBtaWdodCBiZT8g T3IgYXJlIHlvdSBzdWdnZXN0aW5nIHdlDQo+PiByZWplY3QgZnVydGhlciBhY2Nlc3MgdG8gZGF0 YV9tZXRhIGFmdGVyDQo+PiBicGZfeGRwX21ldGFkYXRhX2V4cG9ydF90b19za2Igc29tZWhvdz8N Cj4+DQo+PiBJZiB3ZSB3YW50IHRvIGxldCB0aGUgcHJvZ3JhbXMgb3ZlcnJpZGUgc29tZSBvZiB0 aGlzDQo+PiBicGZfeGRwX21ldGFkYXRhX2V4cG9ydF90b19za2IoKSBtZXRhZGF0YSwgaXQgZmVl bHMgbGlrZSB3ZSBjYW4gYWRkDQo+PiBtb3JlIGtmdW5jcyBpbnN0ZWFkIG9mIGV4cG9zaW5nIHRo ZSBsYXlvdXQ/DQo+Pg0KPj4gYnBmX3hkcF9tZXRhZGF0YV9leHBvcnRfdG9fc2tiKGN0eCk7DQo+ PiBicGZfeGRwX21ldGFkYXRhX2V4cG9ydF9za2JfaGFzaChjdHgsIDEyMzQpOw0KDQpBZnRlciBy ZS1yZWFkaW5nIHBhdGNoIDYsIGhhdmUgYW5vdGhlciBxdWVzdGlvbi4gIFRoZSAndm9pZCANCmJw Zl94ZHBfbWV0YWRhdGFfZXhwb3J0X3RvX3NrYigpOycgZnVuY3Rpb24gc2lnbmF0dXJlLiAgU2hv dWxkIGl0IGF0IGxlYXN0IA0KcmV0dXJuIG9rL2Vycj8gb3IgZXZlbiByZXR1cm4gYSAnc3RydWN0 IHhkcF90b19za2JfbWV0YWRhdGEgKicgcG9pbnRlciBhbmQgdGhlIA0KeGRwIHByb2cgY2FuIGRp cmVjdGx5IHJlYWQgKG9yIGV2ZW4gd3JpdGUpIGl0PyAgQSByZWxhdGVkIHF1ZXN0aW9uLCB3aHkg J3N0cnVjdCANCnhkcF90b19za2JfbWV0YWRhdGEnIG5lZWRzIF9fcmFuZG9taXplX2xheW91dD8N Cg0KDQo+IA0KPiANCj4gSSBjYW4ndCB0aGluayBvZiBhIHVzZSBjYXNlIG5vdyBmb3IgdGhlIHhk cCBwcm9nIHRvIHVzZSB0aGUgeGRwX3RvX3NrYl9tZXRhZGF0YSANCj4gd2hpbGUgdGhlIHhkcCBw cm9nIGNhbiBkaXJlY3RseSBjYWxsIHRoZSBrZnVuYyAoZWcgDQo+IGJwZl94ZHBfbWV0YWRhdGFf cnhfdGltZXN0YW1wKSB0byBnZXQgaW5kaXZpZHVhbCBoaW50LsKgIEkgd2FzIGFza2luZyBpZiBw YXRjaCA3IA0KPiBpcyBhbiBhY3R1YWwgdXNlIGNhc2UgYmVjYXVzZSBpdCBkb2VzIHRlc3QgdGhl IHRzdGFtcCBpbiBYRFBfUEFTUyBvciBpdCBpcyANCj4gbW9zdGx5IGZvciBzZWxmdGVzdCBwdXJw b3NlP8KgIFllYWgsIG1heSBiZSB0aGUgeGRwIHByb2cgd2lsbCBiZSBhYmxlIHRvIGNoYW5nZSAN Cj4gdGhlIHhkcF90b19za2JfbWV0YWRhdGEgZXZlbnR1YWxseSBidXQgdGhhdCBpcyBmb3IgbGF0 ZXIuDQo+IA0KPiBNeSBjb25jZXJuIGlzIHRoZSB4ZHAgcHJvZyBpcyBhbGxvd2VkIHRvIGNoYW5n ZSB4ZHBfdG9fc2tiX21ldGFkYXRhIG9yIA0KPiBieS1jb2luY2lkZW50IHdyaXRpbmcgbWV0YWRh dGEgdGhhdCBtYXRjaGVzIHRoZSByYW5kb20gYW5kIHRoZSBzaXplb2Yoc3RydWN0IA0KPiB4ZHBf dG9fc2tiX21ldGFkYXRhKS4NCj4gDQo+IEFsc28sIHRoZSBhZGRlZCBvcGFjaXR5IG9mIHhkcF90 b19za2JfbWV0YWRhdGEgKF9fcmFuZG9taXplX2xheW91dCArIHJhbmRvbSBpbnQpIA0KPiBpcyB0 cnlpbmcgdmVyeSBoYXJkIHRvIGhpZGUgaXQgZnJvbSB4ZHAgcHJvZy7CoCBJbnN0ZWFkLCB3b3Vs ZCBpdCBiZSBjbGVhbmVyIHRvIA0KPiBoYXZlIGEgZmxhZyBpbiB4ZHAtPmZsYWdzICh0byBiZSBz ZXQgYnkgYnBmX3hkcF9tZXRhZGF0YV9leHBvcnRfdG9fc2tiPykgdG8gDQo+IGd1YXJkIHRoaXMs IGxpa2Ugb25lIG9mIEplc3BlcidzIHBhdGNoLsKgIFRoZSB4ZHBfY29udmVydF9jdHhfYWNjZXNz KCkgYW5kIA0KPiBicGZfeGRwX2FkanVzdF9tZXRhKCkgY2FuIGNoZWNrIHRoaXMgYml0IHRvIGVu c3VyZSB0aGUgeGRwX3RvX3NrYl9tZXRhZGF0YSANCj4gY2Fubm90IGJlIHJlYWQgYW5kIG5vIG1l dGFkYXRhIGNhbiBiZSBhZGRlZC9kZWxldGVkIGFmdGVyIHRoYXQuwqAgYnR3LCBpcyBpdCANCj4g cG9zc2libGUgdG8ga2VlcCBib3RoIHhkcF90b19za2JfbWV0YWRhdGEgYW5kIHRoZSB4ZHBfcHJv ZydzIG1ldGFkYXRhP8KgIEFmdGVyIA0KPiBza2JfbWV0YWRhdGFfaW1wb3J0X2Zyb21feGRwIHBv cHBpbmcgdGhlIHhkcF90b19za2JfbWV0YWRhdGEsIHRoZSByZW1haW5pbmcgDQo+IHhkcF9wcm9n J3MgbWV0YXRkYXRhIGNhbiBzdGlsbCBiZSB1c2VkIGJ5IHRoZSBicGYtdGMuDQo+IA0KPj4gLi4u DQo+Pg0KPj4+IERvZXMgeGRwX3RvX3NrYl9tZXRhZGF0YSBoYXZlIGEgdXNlIGNhc2UgZm9yIFhE UF9QQVNTIChsaWtlIHBhdGNoIDcpIG9yIHRoZQ0KPj4+IHhkcF90b19za2JfbWV0YWRhdGEgY2Fu IGJlIGxpbWl0ZWQgdG8gWERQX1JFRElSRUNUIG9ubHk/DQo+Pg0KPj4gWERQX1BBU1MgY2FzZXMg d2hlcmUgd2UgY29udmVydCB4ZHBfYnVmZiBpbnRvIHNrYiBpbiB0aGUgZHJpdmVycyByaWdodA0K Pj4gbm93IHVzdWFsbHkgaGF2ZSBDIGNvZGUgdG8gbWFudWFsbHkgcHVsbCBvdXQgdGhlIG1ldGFk YXRhIChvdXQgb2YgaHcNCj4+IGRlc2MpIGFuZCBwdXQgaXQgaW50byBza2IuDQo+Pg0KPj4gU28s IGN1cnJlbnRseSwgaWYgd2UncmUgY2FsbGluZyBicGZfeGRwX21ldGFkYXRhX2V4cG9ydF90b19z a2IoKSBmb3INCj4+IFhEUF9QQVNTLCB3ZSdyZSBkb2luZyBhIGRvdWJsZSBhbW91bnQgb2Ygd29y azoNCj4+IHNrYl9tZXRhZGF0YV9pbXBvcnRfZnJvbV94ZHAgZmlyc3QsIHRoZW4gY3VzdG9tIGRy aXZlciBjb2RlIHNlY29uZC4NCj4+DQo+PiBJbiB0aGVvcnksIG1heWJlIHdlIHNob3VsZCBjb21w bGV0ZWx5IHNraXAgZHJpdmVycyBjdXN0b20gcGFyc2luZyB3aGVuDQo+PiB0aGVyZSBpcyBhIHBy b2cgd2l0aCBCUEZfRl9YRFBfSEFTX01FVEFEQVRBPw0KPj4gVGhlbiBib3RoIHhkcC0+c2tiIHBh dGhzIChYRFBfUEFTUytYRFBfUkVESVJFQ1QpIHdpbGwgYmUgYnBmLWRyaXZlbg0KPj4gYW5kIHdv bid0IHJlcXVpcmUgYW55IG1lbnRhbCB3b3JrIChwbHVzLCB0aGUgZHJpdmVycyB3b24ndCBoYXZl IHRvDQo+PiBjYXJlIGVpdGhlciBpbiB0aGUgZnV0dXJlKS4NCj4+IMKgPiBXRFlUPw0KPiANCj4g DQo+IFllYWgsIG5vdCBzdXJlIGlmIGl0IGNhbiBzb2xlbHkgZGVwZW5kIG9uIEJQRl9GX1hEUF9I QVNfTUVUQURBVEEgYnV0IGl0IG1ha2VzIA0KPiBzZW5zZSB0byBvbmx5IHVzZSB0aGUgaGludHMg KGlmIGV2ZXIgd3JpdHRlbikgZnJvbSB4ZHAgcHJvZyBlc3BlY2lhbGx5IGlmIGl0IA0KPiB3aWxs IGV2ZW50dWFsbHkgc3VwcG9ydCB4ZHAgcHJvZyBjaGFuZ2luZyBzb21lIG9mIHRoZSBoaW50cyBp biB0aGUgZnV0dXJlLsKgIEZvciANCj4gbm93LCBJIHRoaW5rIGVpdGhlciB3YXkgaXMgZmluZSBz aW5jZSB0aGV5IGFyZSB0aGUgc2FtZSBhbmQgdGhlIHhkcCBwcm9nIGlzIHNvcnQgDQo+IG9mIGRv aW5nIGV4dHJhIHVubmVjZXNzYXJ5IHdvcmsgYW55d2F5IGJ5IGNhbGxpbmcgDQo+IGJwZl94ZHBf bWV0YWRhdGFfZXhwb3J0X3RvX3NrYigpIHdpdGggWERQX1BBU1MgYW5kIGtub3dpbmcgbm90aGlu ZyBjYW4gYmUgDQo+IGNoYW5nZWQgbm93Lg0KPiANCj4gDQo+Pg0KPj4+PiArwqDCoMKgwqAgKTsN Cj4+Pj4gKw0KPj4+PiArwqDCoMKgwqAgYnBmX3BhdGNoX3Jlc29sdmVfam1wKHBhdGNoKTsNCj4+ Pj4gK30NCj4+Pj4gKw0KPj4+PiDCoMKgIHN0YXRpYyBpbnQgX19pbml0IHhkcF9tZXRhZGF0YV9p bml0KHZvaWQpDQo+Pj4+IMKgwqAgew0KPj4+PiArwqDCoMKgwqAgeGRwX21ldGFkYXRhX21hZ2lj ID0gZ2V0X3JhbmRvbV91MzIoKSB8IDE7DQo+Pj4+IMKgwqDCoMKgwqDCoCByZXR1cm4gcmVnaXN0 ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1hEUCwgDQo+Pj4+ICZ4ZHBfbWV0YWRh dGFfa2Z1bmNfc2V0KTsNCj4+Pj4gwqDCoCB9DQo+Pj4+IMKgwqAgbGF0ZV9pbml0Y2FsbCh4ZHBf bWV0YWRhdGFfaW5pdCk7DQo+IA0KDQo=