From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by mail.toke.dk (Postfix) with ESMTPS id CB7889F9DFE for ; Wed, 29 Mar 2023 19:18:21 +0200 (CEST) Authentication-Results: mail.toke.dk; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256 header.s=20210112 header.b=k3uydzWN Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-54161af1984so160581457b3.3 for ; Wed, 29 Mar 2023 10:18:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1680110299; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=tl7PTmyJbqm9lg8y1UVM7ZnqUjXdO3ReUZtOsJis0wc=; b=k3uydzWN5ZBvZAOCMi8CSUtkUp6E/qvEvy7FPoCGeKKOfumHfsJwPXWXYtjwo7ZYKn vV8UvziVToRzXBASI+/eld+RSiEsa2YEvfFPyrL9HPhliIZXzqv9EDjGPxCKGLlZmO8B Ztv1cxbgcnXerWuV9MDzl1s5b51jpMT9oFH4vXKy5wgfqg0/+pgF9oyPv+HDx1tdvZEb HIPnoecd2H9ND1sngMcGGgANtJ8RmjyahQT43E+kJ49AwbGuf1homYtpfKWMDRKBkx/u XZj6TDgmIplDeOlCYwltAHqzk7B9kE31bsfpNgLuUhA6PQrhm89O0V/fnDakiBfZew99 MCJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680110299; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=tl7PTmyJbqm9lg8y1UVM7ZnqUjXdO3ReUZtOsJis0wc=; b=hSN9rdk8xEvHkfuhwHvsQoTZoc8BeBXMNNUjmwRdhai2R7bxpl1ki8KMu3mHl7Ji33 9YKZ5A9hKqkEp5PT7d3dn7S4iKGNzsij7XY1PkH/lrl1zqk9E3ZScP+YdaO8/+sa8osx pOjtN2L4t9M5PyJK+gvcuPZAhqhKLbSbqV9QPi4/aM9JRALl3ssTVg8Z3mHrBRTXxZyL 8lLpe3Oa2FCF2SyRhdVjt10TSHC8UgYlvqliVXqcWNGqE/MPmDXXloZylCufaBzYccR8 JNTiGAd2IwhqUq0jVIWH/QksjKB3TnuQ6u3SH4UlWIDp+1Kib+KNXAqwd+CKa2KThQGB AzLg== X-Gm-Message-State: AAQBX9cPaCuaRIu15kE1Ys9cOuJgxVyR2bZMVhE5O+l6ffSfzZzPNAMO XhdbfDd3L9KsgvDv0TLM6XJsjQo= X-Google-Smtp-Source: AKy350YczJoPLaaTb7ZJVMX28R8tjggr2A/okw3j2dhmBumGXpxXD8x0i3gVlBjrc8e1ttgEYUuimGk= X-Received: from sdf.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5935]) (user=sdf job=sendgmr) by 2002:a05:6902:1009:b0:b6b:e967:920d with SMTP id w9-20020a056902100900b00b6be967920dmr10794404ybt.13.1680110299246; Wed, 29 Mar 2023 10:18:19 -0700 (PDT) Date: Wed, 29 Mar 2023 10:18:17 -0700 In-Reply-To: <811724e2-cdd6-15fe-b176-9dfcdbd98bad@redhat.com> Mime-Version: 1.0 References: <168003451121.3027256.13000250073816770554.stgit@firesoul> <168003455815.3027256.7575362149566382055.stgit@firesoul> <811724e2-cdd6-15fe-b176-9dfcdbd98bad@redhat.com> Message-ID: From: Stanislav Fomichev To: Jesper Dangaard Brouer Content-Type: text/plain; charset="UTF-8"; format=flowed; delsp=yes Content-Transfer-Encoding: base64 Message-ID-Hash: QQVO3BRKGBRUOUQLTKT57DLD6GK3UHJY X-Message-ID-Hash: QQVO3BRKGBRUOUQLTKT57DLD6GK3UHJY X-MailFrom: 323IkZAMKCXoqbdemmejc.amkvbn-fglrqvbn-npmhcar.lcr@flex--sdf.bounces.google.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: brouer@redhat.com, bpf@vger.kernel.org, netdev@vger.kernel.org, martin.lau@kernel.org, ast@kernel.org, daniel@iogearbox.net, alexandr.lobakin@intel.com, larysa.zaremba@intel.com, xdp-hints@xdp-project.net, anthony.l.nguyen@intel.com, yoong.siang.song@intel.com, boon.leong.ong@intel.com, intel-wired-lan@lists.osuosl.org, pabeni@redhat.com, jesse.brandeburg@intel.com, kuba@kernel.org, edumazet@google.com, john.fastabend@gmail.com, hawk@kernel.org, davem@davemloft.net X-Mailman-Version: 3.3.8 Precedence: list Subject: [xdp-hints] Re: [PATCH bpf RFC 1/4] xdp: rss hash types representation List-Id: XDP hardware hints design discussion Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: T24gMDMvMjksIEplc3BlciBEYW5nYWFyZCBCcm91ZXIgd3JvdGU6DQoNCj4gT24gMjgvMDMvMjAy MyAyMy41OCwgU3RhbmlzbGF2IEZvbWljaGV2IHdyb3RlOg0KPiA+IE9uIDAzLzI4LCBKZXNwZXIg RGFuZ2FhcmQgQnJvdWVyIHdyb3RlOg0KPiA+ID4gVGhlIFJTUyBoYXNoIHR5cGUgc3BlY2lmaWVz IHdoYXQgcG9ydGlvbiBvZiBwYWNrZXQgZGF0YSBOSUMgaGFyZHdhcmUgIA0KPiB1c2VkDQo+ID4g PiB3aGVuIGNhbGN1bGF0aW5nIFJTUyBoYXNoIHZhbHVlLiBUaGUgUlNTIHR5cGVzIGFyZSBmb2N1 c2VkIG9uIEludGVybmV0DQo+ID4gPiB0cmFmZmljIHByb3RvY29scyBhdCBPU0kgbGF5ZXJzIEwz IGFuZCBMNC4gTDIgKGUuZy4gQVJQKSBvZnRlbiBnZXQgIA0KPiBoYXNoDQo+ID4gPiB2YWx1ZSB6 ZXJvIGFuZCBubyBSU1MgdHlwZS4gRm9yIEwzIGZvY3VzZWQgb24gSVB2NCB2cy4gSVB2NiwgYW5k IEw0DQo+ID4gPiBwcmltYXJpbHkgVENQIHZzIFVEUCwgYnV0IHNvbWUgaGFyZHdhcmUgc3VwcG9y dHMgU0NUUC4NCj4gPg0KPiA+ID4gSGFyZHdhcmUgUlNTIHR5cGVzIGFyZSBkaWZmZXJlbnRseSBl bmNvZGVkIGZvciBlYWNoIGhhcmR3YXJlIE5JQy4gTW9zdA0KPiA+ID4gaGFyZHdhcmUgcmVwcmVz ZW50IFJTUyBoYXNoIHR5cGUgYXMgYSBudW1iZXIuIERldGVybWluaW5nIEwzIHZzIEw0ICANCj4g b2Z0ZW4NCj4gPiA+IHJlcXVpcmVzIGEgbWFwcGluZyB0YWJsZSBhcyB0aGVyZSBvZnRlbiBpc24n dCBhIHBhdHRlcm4gb3Igc29ydGluZw0KPiA+ID4gYWNjb3JkaW5nIHRvIElTTyBsYXllci4NCj4g Pg0KPiA+ID4gVGhlIHBhdGNoIGludHJvZHVjZSBhIFhEUCBSU1MgaGFzaCB0eXBlICh4ZHBfcnNz X2hhc2hfdHlwZSkgdGhhdCBjYW4gIA0KPiBib3RoDQo+ID4gPiBiZSBzZWVuIGFzIGEgbnVtYmVy IHRoYXQgaXMgb3JkZXJlZCBhY2NvcmRpbmcgYnkgSVNPIGxheWVyLCBhbmQgY2FuICANCj4gYmUg Yml0DQo+ID4gPiBtYXNrZWQgdG8gc2VwYXJhdGUgSVB2NCBhbmQgSVB2NiB0eXBlcyBmb3IgTDQg cHJvdG9jb2xzLiBSb29tIGlzICANCj4gYXZhaWxhYmxlDQo+ID4gPiBmb3IgZXh0ZW5kaW5nIGxh dGVyIHdoaWxlIGtlZXBpbmcgdGhlc2UgcHJvcGVydGllcy4gVGhpcyBtYXBzIGFuZCAgDQo+IHVu aWZpZXMNCj4gPiA+IGRpZmZlcmVuY2UgdG8gaGFyZHdhcmUgc3BlY2lmaWMgaGFzaGVzLg0KPiA+ DQo+ID4gTG9va3MgZ29vZCBvdmVyYWxsLiBBbnkgcmVhc29uIHdlJ3JlIG1ha2luZyB0aGlzIHNw ZWNpZmljIGxheW91dD8NCg0KPiBPbmUgaW1wb3J0YW50IGdvYWwgaXMgdG8gaGF2ZSBhIHNpbXBs ZS9mYXN0IHdheSB0byBkZXRlcm1pbmluZyBMMyB2cyBMNCwNCj4gYmVjYXVzZSBhIEw0IGhhc2gg Y2FuIGJlIHVzZWQgZm9yIGZsb3cgaGFuZGxpbmcgKGUuZy4gbG9hZC1iYWxhbmNpbmcpLg0KDQo+ IFdlIGJlbG93IGxheW91dCB5b3UgY2FuOg0KDQo+ICAgaWYgKHJzc190eXBlICYgWERQX1JTU19U WVBFX0w0X01BU0spDQo+IAlib29sIGh3X2hhc2hfZG9fTEIgPSB0cnVlOw0KDQo+IE9yIHVzaW5n IGl0IGFzIGEgbnVtYmVyOg0KDQo+ICAgaWYgKHJzc190eXBlID4gWERQX1JTU19UWVBFX0w0KQ0K PiAJYm9vbCBod19oYXNoX2RvX0xCID0gdHJ1ZTsNCg0KV2h5IGlzIGl0IHN0cmljdGx5IGJldHRl ciB0aGVuIHRoZSBmb2xsb3dpbmc/DQoNCmlmIChyc3NfdHlwZSAmIChUWVBFX1VEUCB8IFRZUEVf VENQIHwgVFlQRV9TQ1RQKSkge30NCg0KSWYgd2UgYWRkIHNvbWUgbmV3IEw0IGZvcm1hdCwgdGhl IGJwZiBwcm9ncmFtcyBjYW4gYmUgdXBkYXRlZCB0byBzdXBwb3J0DQppdD8NCg0KPiBJJ20gdmVy eSBvcGVuIHRvIGNoYW5nZXMgdG8gbXkgInNwZWNpZmljIiBsYXlvdXQuICBJIGFtIGluIGRvdWJ0 IGlmDQo+IHVzaW5nIGl0IGFzIGEgbnVtYmVyIGlzIHRoZSByaWdodCBhcHByb2FjaCBhbmQgd29y dGggdGhlIHRyb3VibGUuDQoNCj4gPiBXaHkgbm90IHNpbXBseSB0aGUgZm9sbG93aW5nPw0KPiA+ DQo+ID4gZW51bSB7DQo+ID4gIO+/ve+/ve+/ve+/vVhEUF9SU1NfVFlQRV9OT05FID0gMCwNCj4g PiAg77+977+977+977+9WERQX1JTU19UWVBFX0lQVjQgPSBCSVQoMCksDQo+ID4gIO+/ve+/ve+/ ve+/vVhEUF9SU1NfVFlQRV9JUFY2ID0gQklUKDEpLA0KPiA+ICDvv73vv73vv73vv70vKiBJUHY2 IHdpdGggZXh0ZW5zaW9uIGhlYWRlci4gKi8NCj4gPiAg77+977+977+977+9LyogbGV0J3Mgbm90 ZSBeXl4gaXQgaW4gdGhlIFVBUEk/ICovDQo+ID4gIO+/ve+/ve+/ve+/vVhEUF9SU1NfVFlQRV9J UFY2X0VYID0gQklUKDIpLA0KPiA+ICDvv73vv73vv73vv71YRFBfUlNTX1RZUEVfVURQID0gQklU KDMpLA0KPiA+ICDvv73vv73vv73vv71YRFBfUlNTX1RZUEVfVENQID0gQklUKDQpLA0KPiA+ICDv v73vv73vv73vv71YRFBfUlNTX1RZUEVfU0NUUCA9IEJJVCg1KSwNCg0KPiBXZSBrbm93IHRoZXNl IGJpdHMgZm9yIFVEUCwgVENQLCBTQ1RQIChhbmQgSVBTRUMpIGFyZSBleGNsdXNpdmUsIHRoZXkN Cj4gY2Fubm90IGJlIHNldCBhdCB0aGUgc2FtZSB0aW1lLCBlLmcuIGFzIGEgcGFja2V0IGNhbm5v dCBib3RoIGJlIFVEUCBhbmQNCj4gVENQLiAgVGh1cywgdXNpbmcgdGhlc2UgYml0cyBhcyBhIG51 bWJlciBtYWtlIHNlbnNlIHRvIG1lLCBhbmQgaXMgbW9yZQ0KPiBjb21wYWN0Lg0KDQpbLi5dDQoN Cj4gVGhpcyBCSVQoKSBhcHByb2FjaCBhbHNvIGhhdmUgdGhlIGlzc3VlIG9mIGV4dGVuZGluZyBp dCBsYXRlciAoZm9yd2FyZA0KPiBjb21wYXRpYmlsaXR5KS4gIEFzIG1lbnRpb25lZCBhIGNvbW1v biB0YXNrIHdpbGwgYmUgdG8gY2hlY2sgaWYNCj4gaGFzaC10eXBlIGlzIGEgTDQgdHlwZS4gIFNl ZSBtbHg1IFtwYXRjaCA0LzRdIG5lZWRlZCB0byBleHRlbmQgd2l0aA0KPiBJUFNFQy4gTm90aWNl IGhvdyBteSBYRFBfUlNTX1RZUEVfTDRfTUFTSyBjb3ZlcnMgYWxsIHRoZSBiaXRzIHRoYXQgdGhp cw0KPiBjYW4gYmUgZXh0ZW5kZWQgd2l0aCBuZXcgTDQgdHlwZXMsIHN1Y2ggdGhhdCBleGlzdGlu ZyBwcm9ncyB3aWxsIHN0aWxsDQo+IHdvcmsgY2hlY2tpbmcgZm9yIEw0IGNoZWNrLiAgSXQgY2Fu IG9mLWNhdXNlIGJlIHNvbHZlZCBpbiB0aGUgc2FtZSB3YXkNCj4gZm9yIHRoaXMgQklUKCkgYXBw cm9hY2ggYnkgcmVzZXJ2aW5nIHNvbWUgYml0cyB1cGZyb250IGluIGEgbWFzay4NCg0KV2UncmUg dXNpbmcgNiBiaXRzIG91dCBvZiA2NCwgd2Ugc2hvdWxkIGJlIGdvb2QgZm9yIGF3aGlsZT8gSWYg dGhlcmUNCmlzIGV2ZXIgYSBmb3J3YXJkIGNvbXBhdGliaWxpdHkgaXNzdWUsIHdlIGNhbiBhbHdh eXMgY29tZSB1cCB3aXRoDQphIG5ldyBrZnVuYy4NCg0KT25lIG90aGVyIHJlbGF0ZWQgcXVlc3Rp b24gSSBoYXZlIGlzOiBzaG91bGQgd2UgZXhwb3J0IHRoZSB0eXBlDQpvdmVyIHNvbWUgYWRkaXRp b25hbCBuZXcga2Z1bmMgYXJndW1lbnQ/IChpbnN0ZWFkIG9mIGFidXNpbmcgdGhlIHJldHVybg0K dHlwZSkgTWF5YmUgdGhhdCB3aWxsIGxldCB1cyBkcm9wIHRoZSBleHBsaWNpdCBCVEZfVFlQRV9F TUlUIGFzIHdlbGw/DQoNCj4gPiB9DQo+ID4NCj4gPiBBbmQgdGhlbiB1c2luZyBYRFBfUlNTX1RZ UEVfSVBWNHxYRFBfUlNTX1RZUEVfVURQIHZzDQo+ID4gWERQX1JTU19UWVBFX0lQVjZ8WFhYID8N Cg0KPiBEbyBub3RpY2UsIHRoYXQgSSBhbHJlYWR5IGRvZXMgc29tZSBsZXZlbCBvZiBvcidpbmcg KCJ8IikgaW4gdGhpcw0KPiBwcm9wb3NhbC4gIFRoZSBtYWluIGRpZmZlcmVuY2UgaXMgdGhhdCBJ IGhpZGUgdGhpcyBmcm9tIHRoZSBkcml2ZXIsIGFuZA0KPiBraW5kIG9mIHByZS1jb21iaW5lIHRo ZSB2YWxpZCBjb21iaW5hdGlvbiAoZW51bSdzKSBkcml2ZXJzIGNhbiBzZWxlY3QNCj4gZnJvbS4g SSBkbyBnZXQgdGhlIHBvaW50LCBhbmQgSSB0aGluayBJIHdpbGwgY29tZSB1cCB3aXRoIGEgY29t YmluZWQNCj4gc29sdXRpb24gYmFzZWQgb24geW91ciBpbnB1dC4NCg0KDQo+IFRoZSBSU1MgaGFz aGluZyB0eXBlcyBhbmQgY29tYmluYXRpb25zIGNvbWVzIGZyb20gTSQgc3RhbmRhcmRzOg0KPiAg IFsxXSAgDQo+IGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy93aW5kb3dzLWhhcmR3 YXJlL2RyaXZlcnMvbmV0d29yay9yc3MtaGFzaGluZy10eXBlcyNpcHY0LWhhc2gtdHlwZS1jb21i aW5hdGlvbnMNCg0KTXkgbWFpbiBjb25jZXJuIGhlcmUgaXMgdGhhdCB3ZSdyZSBvdmVyLWNvbXBs aWNhdGluZyBpdCB3aXRoIHRoZSBtYXNrcw0KYW5kIHRoZSBmb3JtYXQuIFdpdGggdGhlIGV4cGxp Y2l0IGJpdHMgd2UgY2FuIGVhc2lseSBtYXAgdG8gdGhhdA0Kc3BlYyB5b3UgbWVudGlvbi4NCg0K Rm9yIGV4YW1wbGUsIGZvciBmb3J3YXJkIGNvbXBhdCwgSSdtIG5vdCBzdXJlIHdlIGNhbiBhc3N1 bWUgdGhhdCB0aGUgcGVvcGxlDQp3aWxsIGRvOg0KCSJyc3NfdHlwZSAmIFhEUF9SU1NfVFlQRV9M NF9NQVNLIg0KaW5zdGVhZCBvZiBzb21ldGhpbmcgbGlrZToNCgkicnNzX3R5cGUgJiAoWERQX1JT U19UWVBFX0w0X0lQVjRfVENQfFhEUF9SU1NfVFlQRV9MNF9JUFY0X1VEUCkiDQoNCj4gPiA+IFRo aXMgcHJvcG9zYWwgY2hhbmdlIHRoZSBrZnVuYyBBUEkgYnBmX3hkcF9tZXRhZGF0YV9yeF9oYXNo KCkgdG8gIA0KPiByZXR1cm4NCj4gPiA+IHRoaXMgUlNTIGhhc2ggdHlwZSBvbiBzdWNjZXNzLg0K PiA+DQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBKZXNwZXIgRGFuZ2FhcmQgQnJvdWVyIDxicm91ZXJA cmVkaGF0LmNvbT4NCj4gPiA+IC0tLQ0KPiA+ID4g77+9IGluY2x1ZGUvbmV0L3hkcC5oIHzvv73v v70gNTENCj4gPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKw0KPiA+ID4g77+9IG5ldC9jb3JlL3hkcC5j77+977+977+9IHzvv73vv73vv70gNCAr KystDQo+ID4gPiDvv70gMiBmaWxlcyBjaGFuZ2VkLCA1NCBpbnNlcnRpb25zKCspLCAxIGRlbGV0 aW9uKC0pDQo+ID4NCj4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94ZHAuaCBiL2luY2x1 ZGUvbmV0L3hkcC5oDQo+ID4gPiBpbmRleCA1MzkzYjNlYmU1NmUuLjYzZjQ2MmY1ZWE3ZiAxMDA2 NDQNCj4gPiA+IC0tLSBhL2luY2x1ZGUvbmV0L3hkcC5oDQo+ID4gPiArKysgYi9pbmNsdWRlL25l dC94ZHAuaA0KPiA+ID4gQEAgLTgsNiArOCw3IEBADQo+ID4NCj4gPiA+IO+/vSAjaW5jbHVkZSA8 bGludXgvc2tidWZmLmg+IC8qIHNrYl9zaGFyZWRfaW5mbyAqLw0KPiA+ID4g77+9ICNpbmNsdWRl IDx1YXBpL2xpbnV4L25ldGRldi5oPg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9iaXRmaWVsZC5o Pg0KPiA+DQo+ID4gPiDvv70gLyoqDQo+ID4gPiDvv73vv70gKiBET0M6IFhEUCBSWC1xdWV1ZSBp bmZvcm1hdGlvbg0KPiA+ID4gQEAgLTM5Niw2ICszOTcsNTYgQEAgWERQX01FVEFEQVRBX0tGVU5D X3h4eA0KPiA+ID4g77+9IE1BWF9YRFBfTUVUQURBVEFfS0ZVTkMsDQo+ID4gPiDvv70gfTsNCj4g Pg0KPiA+ID4gKy8qIEZvciBwYXJ0aXRpb25pbmcgb2YgeGRwX3Jzc19oYXNoX3R5cGUgKi8NCj4g PiA+ICsjZGVmaW5lIFJTU19MM++/ve+/ve+/ve+/ve+/ve+/ve+/vSBHRU5NQVNLKDIsMCkgLyog My1iaXRzID0gdmFsdWVzIGJldHdlZW4gMS03ICovDQo+ID4gPiArI2RlZmluZSBMNF9CSVTvv73v v73vv73vv73vv73vv73vv70gQklUKDMp77+977+977+977+977+977+9IC8qIDEtYml0IC0gTDQg aW5kaWNhdGlvbiAqLw0KPiA+ID4gKyNkZWZpbmUgUlNTX0w0X0lQVjTvv73vv73vv70gR0VOTUFT Syg2LDQpIC8qIDMtYml0cyAqLw0KPiA+ID4gKyNkZWZpbmUgUlNTX0w0X0lQVjbvv73vv73vv70g R0VOTUFTSyg5LDcpIC8qIDMtYml0cyAqLw0KPiA+ID4gKyNkZWZpbmUgUlNTX0w077+977+977+9 77+977+977+977+9IEdFTk1BU0soOSwzKSAvKiA9IDctYml0cyAtIGNvdmVyaW5nIEw0DQo+ID4g PiBJUFY0K0lQVjYgKi8NCj4gPiA+ICsjZGVmaW5lIEw0X0lQVjZfRVhfQklU77+977+977+9IEJJ VCg5Ke+/ve+/ve+/ve+/ve+/ve+/vSAvKiAxLWJpdCAtIEw0IElQdjYgd2l0aA0KPiA+ID4gRXh0 ZW5zaW9uIGhkciAqLw0KPiA+ID4gK++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vSAvKiAxMS1iaXRzIGluIHRvdGFsICovDQo+ID4gPiAr DQo+ID4gPiArLyogVGhlIFhEUCBSU1MgaGFzaCB0eXBlICh4ZHBfcnNzX2hhc2hfdHlwZSkgY2Fu IGJvdGggYmUgc2VlbiBhcyBhICANCj4gbnVtYmVyIHRoYXQNCj4gPiA+ICsgKiBpcyBvcmRlcmVk IGFjY29yZGluZyBieSBJU08gbGF5ZXIsIGFuZCBjYW4gYmUgYml0IG1hc2tlZCB0byAgDQo+IHNl cGFyYXRlIElQdjQgYW5kDQo+ID4gPiArICogSVB2NiB0eXBlcyBmb3IgTDQgcHJvdG9jb2xzLiBS b29tIGlzIGF2YWlsYWJsZSBmb3IgZXh0ZW5kaW5nICANCj4gbGF0ZXIgd2hpbGUNCj4gPiA+ICsg KiBrZWVwaW5nIGFib3ZlIHByb3BlcnRpZXMsIGFzIHRoaXMgbmVlZCB0byBjb3ZlciBOSUMgaGFy ZHdhcmUgUlNTICANCj4gdHlwZXMuDQo+ID4gPiArICovDQo+ID4gPiArZW51bSB4ZHBfcnNzX2hh c2hfdHlwZSB7DQo+ID4gPiAr77+977+977+9IFhEUF9SU1NfVFlQRV9OT05F77+977+977+977+9 77+977+977+977+977+977+977+9ID0gMCwNCj4gPiA+ICvvv73vv73vv70gWERQX1JTU19UWVBF X0wy77+977+977+977+977+977+977+977+977+977+977+977+977+9ID0gWERQX1JTU19UWVBF X05PTkUsDQo+ID4gPiArDQo+ID4gPiAr77+977+977+9IFhEUF9SU1NfVFlQRV9MM19NQVNL77+9 77+977+977+977+977+977+977+9ID0gUlNTX0wzLA0KPiA+ID4gK++/ve+/ve+/vSBYRFBfUlNT X1RZUEVfTDNfSVBWNO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vSA9IEZJRUxEX1BSRVBfQ09OU1Qo UlNTX0wzLCAxKSwNCj4gPiA+ICvvv73vv73vv70gWERQX1JTU19UWVBFX0wzX0lQVjbvv73vv73v v73vv73vv73vv73vv73vv70gPSBGSUVMRF9QUkVQX0NPTlNUKFJTU19MMywgMiksDQo+ID4gPiAr 77+977+977+9IFhEUF9SU1NfVFlQRV9MM19JUFY2X0VY77+977+977+977+977+9ID0gRklFTERf UFJFUF9DT05TVChSU1NfTDMsIDQpLA0KPiA+ID4gKw0KPiA+ID4gK++/ve+/ve+/vSBYRFBfUlNT X1RZUEVfTDRfTUFTS++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vSA9IFJTU19MNCwNCj4gPiA+ICvv v73vv73vv70gWERQX1JTU19UWVBFX0w0X1NISUZU77+977+977+977+977+977+977+9ID0gX19i Zl9zaGYoUlNTX0w0KSwNCj4gPiA+ICvvv73vv73vv70gWERQX1JTU19UWVBFX0w0X01BU0tfRVjv v73vv73vv73vv73vv70gPSBSU1NfTDQgfCBMNF9JUFY2X0VYX0JJVCwNCj4gPiA+ICsNCj4gPiA+ ICvvv73vv73vv70gWERQX1JTU19UWVBFX0w0X0lQVjRfTUFTS++/ve+/ve+/vSA9IFJTU19MNF9J UFY0LA0KPiA+ID4gK++/ve+/ve+/vSBYRFBfUlNTX1RZUEVfTDRfQklU77+977+977+977+977+9 77+977+977+977+9ID0gTDRfQklULA0KPiA+ID4gK++/ve+/ve+/vSBYRFBfUlNTX1RZUEVfTDRf SVBWNF9UQ1Dvv73vv73vv73vv70gPSBMNF9CSVR8IA0KPiBGSUVMRF9QUkVQX0NPTlNUKFJTU19M NF9JUFY0LCAxKSwNCj4gPiA+ICvvv73vv73vv70gWERQX1JTU19UWVBFX0w0X0lQVjRfVURQ77+9 77+977+977+9ID0gTDRfQklUfCANCj4gRklFTERfUFJFUF9DT05TVChSU1NfTDRfSVBWNCwgMiks DQo+ID4gPiAr77+977+977+9IFhEUF9SU1NfVFlQRV9MNF9JUFY0X1NDVFDvv73vv73vv70gPSBM NF9CSVR8IA0KPiBGSUVMRF9QUkVQX0NPTlNUKFJTU19MNF9JUFY0LCAzKSwNCj4gPiA+ICsNCj4g PiA+ICvvv73vv73vv70gWERQX1JTU19UWVBFX0w0X0lQVjZfTUFTS++/ve+/ve+/vSA9IFJTU19M NF9JUFY2LA0KPiA+ID4gK++/ve+/ve+/vSBYRFBfUlNTX1RZUEVfTDRfSVBWNl9UQ1Dvv73vv73v v73vv70gPSBMNF9CSVR8IA0KPiBGSUVMRF9QUkVQX0NPTlNUKFJTU19MNF9JUFY2LCAxKSwNCj4g PiA+ICvvv73vv73vv70gWERQX1JTU19UWVBFX0w0X0lQVjZfVURQ77+977+977+977+9ID0gTDRf QklUfCANCj4gRklFTERfUFJFUF9DT05TVChSU1NfTDRfSVBWNiwgMiksDQo+ID4gPiAr77+977+9 77+9IFhEUF9SU1NfVFlQRV9MNF9JUFY2X1NDVFDvv73vv73vv70gPSBMNF9CSVR8IA0KPiBGSUVM RF9QUkVQX0NPTlNUKFJTU19MNF9JUFY2LCAzKSwNCj4gPiA+ICsNCj4gPiA+ICvvv73vv73vv70g WERQX1JTU19UWVBFX0w0X0lQVjZfRVhfTUFTSyA9IEw0X0lQVjZfRVhfQklULA0KPiA+ID4gK++/ ve+/ve+/vSBYRFBfUlNTX1RZUEVfTDRfSVBWNl9UQ1BfRVjvv70gPSBYRFBfUlNTX1RZUEVfTDRf SVBWNl9UQ1B8IA0KPiBMNF9JUFY2X0VYX0JJVCwNCj4gPiA+ICvvv73vv73vv70gWERQX1JTU19U WVBFX0w0X0lQVjZfVURQX0VY77+9ID0gWERQX1JTU19UWVBFX0w0X0lQVjZfVURQfCANCj4gTDRf SVBWNl9FWF9CSVQsDQo+ID4gPiAr77+977+977+9IFhEUF9SU1NfVFlQRV9MNF9JUFY2X1NDVFBf RVggPSBYRFBfUlNTX1RZUEVfTDRfSVBWNl9TQ1RQfCANCj4gTDRfSVBWNl9FWF9CSVQsDQo+ID4g PiArfTsNCj4gPiA+ICsjdW5kZWYgUlNTX0wzDQo+ID4gPiArI3VuZGVmIEw0X0JJVA0KPiA+ID4g KyN1bmRlZiBSU1NfTDRfSVBWNA0KPiA+ID4gKyN1bmRlZiBSU1NfTDRfSVBWNg0KPiA+ID4gKyN1 bmRlZiBSU1NfTDQNCj4gPiA+ICsjdW5kZWYgTDRfSVBWNl9FWF9CSVQNCj4gPiA+ICsNCj4gPiA+ IO+/vSAjaWZkZWYgQ09ORklHX05FVA0KPiA+ID4g77+9IHUzMiBicGZfeGRwX21ldGFkYXRhX2tm dW5jX2lkKGludCBpZCk7DQo+ID4gPiDvv70gYm9vbCBicGZfZGV2X2JvdW5kX2tmdW5jX2lkKHUz MiBidGZfaWQpOw0KPiA+ID4gZGlmZiAtLWdpdCBhL25ldC9jb3JlL3hkcC5jIGIvbmV0L2NvcmUv eGRwLmMNCj4gPiA+IGluZGV4IDcxMzMwMTdiY2Q3NC4uODFkNDFkZjMwNjk1IDEwMDY0NA0KPiA+ ID4gLS0tIGEvbmV0L2NvcmUveGRwLmMNCj4gPiA+ICsrKyBiL25ldC9jb3JlL3hkcC5jDQo+ID4g PiBAQCAtNzIxLDEyICs3MjEsMTQgQEAgX19icGZfa2Z1bmMgaW50DQo+ID4gPiBicGZfeGRwX21l dGFkYXRhX3J4X3RpbWVzdGFtcChjb25zdCBzdHJ1Y3QgeGRwX21kICpjdHgsIHU2NCAqdGltDQo+ ID4gPiDvv73vv70gKiBAaGFzaDogUmV0dXJuIHZhbHVlIHBvaW50ZXIuDQo+ID4gPiDvv73vv70g Kg0KPiA+ID4g77+977+9ICogUmV0dXJuOg0KPiA+ID4gLSAqICogUmV0dXJucyAwIG9uIHN1Y2Nl c3Mgb3IgYGAtZXJybm9gYCBvbiBlcnJvci4NCj4gPiA+ICsgKiAqIFJldHVybnMgKHBvc2l0aXZl KSBSU1MgaGFzaCAqKnR5cGUqKiBvbiBzdWNjZXNzIG9yIGBgLWVycm5vYGANCj4gPiA+IG9uIGVy cm9yLg0KPiA+ID4gKyAqICogYGBlbnVtIHhkcF9yc3NfaGFzaF90eXBlYGAgOiBSU1MgaGFzaCB0 eXBlDQo+ID4gPiDvv73vv70gKiAqIGBgLUVPUE5PVFNVUFBgYCA6IG1lYW5zIGRldmljZSBkcml2 ZXIgZG9lc24ndCBpbXBsZW1lbnQga2Z1bmMNCj4gPiA+IO+/ve+/vSAqICogYGAtRU5PREFUQWBg 77+977+977+9IDogbWVhbnMgbm8gUlgtaGFzaCBhdmFpbGFibGUgZm9yIHRoaXMgZnJhbWUNCj4g PiA+IO+/ve+/vSAqLw0KPiA+ID4g77+9IF9fYnBmX2tmdW5jIGludCBicGZfeGRwX21ldGFkYXRh X3J4X2hhc2goY29uc3Qgc3RydWN0IHhkcF9tZCAqY3R4LA0KPiA+ID4gdTMyICpoYXNoKQ0KPiA+ ID4g77+9IHsNCj4gPiA+ICvvv73vv73vv70gQlRGX1RZUEVfRU1JVChlbnVtIHhkcF9yc3NfaGFz aF90eXBlKTsNCj4gPiA+IO+/ve+/ve+/ve+/ve+/vSByZXR1cm4gLUVPUE5PVFNVUFA7DQo+ID4g PiDvv70gfQ0KPiA+DQo+ID4NCj4gPg0KDQo=