From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 44CFEC433FE for ; Fri, 7 Oct 2022 18:11:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229686AbiJGSLn (ORCPT ); Fri, 7 Oct 2022 14:11:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54652 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229648AbiJGSLm (ORCPT ); Fri, 7 Oct 2022 14:11:42 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 99D62B84F for ; Fri, 7 Oct 2022 11:11:40 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id t8-20020a258388000000b006bfb0865043so812021ybk.13 for ; Fri, 07 Oct 2022 11:11:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; 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=MlqnxrgfmzENWBGsSpIBZPiSPhQ1F6m8PVnj5ZjL7rk=; b=W3LF/ceYNqO7vRLo3A6Lte/+kOhQ7AgvUkGszdhaXH+ySmVgN9z55m4zMKaSh6upFu ZuJKLU5mF02LdHK2qLXxfYMp3o45FU3hUKEUVey18vrYKMk6L2nXf3ghmYJgftByCGid Iw0ZMeUxfjOsqGVCWKNTmQaTuojYC24luK3SV1Wi2J5G82wr7T3wKrxjZhX0vi74NWqn 4d42ujFdpQNu1IJwRYl+HSxR9jeK57NvLZnYxzoRg5e2breZe6dArE5OgvHWWQV0dgl1 9uqk+UI4VkuQ2eAfUERmKXHMEvd/GwOMw1NGrMqq9JV0ZD/8YHEtedNEsiApMlEhoQML EjcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=MlqnxrgfmzENWBGsSpIBZPiSPhQ1F6m8PVnj5ZjL7rk=; b=Vk9saRryJH4zfV/BXn0uzy1WytzqgWPF5vCpe5RQreecICYQesBl293ZuAI7axZ1OA BZybjyFPD6Ee12f00BI8K4v01bxlN4kFhThsJDN1JS37KFqd/6nJ0b83545DYu3Wugj6 pBvVN/genyq6tqnPR1Oz/2diqS8Tc5DprIG4E/GKX524Ok60FNwUTjeG/JdnjYrFHTq5 Hcfsp9tbdoVrkVtGmXb6vP3dmFF1xIAHQxgMUu1wbtKT0TnNPr5ID9McyFEBaZXduuPm +HtGG2oIrVpk5kkA6MwLYGF2Nv7EqWHDOfmkoCledRMUlhswkpGyWg3fRGS5mQP4T/gq CQkg== X-Gm-Message-State: ACrzQf0XbxXQ1mBC+AT6OkquS0KAJxXUSkm09nfpl9UCvlgkPMiYjnYa nBqBaMjDaHQXbuiQ8ny2tm1rhT8= X-Google-Smtp-Source: AMsMyM7IhEq3uG/wyQOGoRbEaWNxgls8cu3DVW1G6KOUXW1dUaGzi6zWVm+uKc14SVczRTzks7UllbI= X-Received: from sdf.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5935]) (user=sdf job=sendgmr) by 2002:a5b:286:0:b0:6bd:22f8:43d1 with SMTP id x6-20020a5b0286000000b006bd22f843d1mr6190672ybl.356.1665166299932; Fri, 07 Oct 2022 11:11:39 -0700 (PDT) Date: Fri, 7 Oct 2022 11:11:38 -0700 In-Reply-To: <87tu4fczyv.fsf@toke.dk> Mime-Version: 1.0 References: <20221004231143.19190-1-daniel@iogearbox.net> <20221004231143.19190-2-daniel@iogearbox.net> <20221006050053.pbwo72xtzoza6gfl@macbook-pro-4.dhcp.thefacebook.com> <14f368eb-9158-68bc-956c-c8371cfcb531@iogearbox.net> <875ygvemau.fsf@toke.dk> <87tu4fczyv.fsf@toke.dk> Message-ID: Subject: Re: [PATCH bpf-next 01/10] bpf: Add initial fd-based API to attach tc BPF programs From: sdf@google.com To: "Toke =?iso-8859-1?Q?H=F8iland-J=F8rgensen?=" Cc: Daniel Borkmann , Alexei Starovoitov , bpf , Nikolay Aleksandrov , Alexei Starovoitov , Andrii Nakryiko , Martin KaFai Lau , John Fastabend , Joanne Koong , Kumar Kartikeya Dwivedi , Joe Stringer , Network Development Content-Type: text/plain; charset="UTF-8"; format=flowed; delsp=yes Content-Transfer-Encoding: base64 Precedence: bulk List-ID: X-Mailing-List: bpf@vger.kernel.org T24gMTAvMDcsIFRva2UgSMO4aWxhbmQtSsO4cmdlbnNlbiB3cm90ZToNCj4gc2RmQGdvb2dsZS5j b20gd3JpdGVzOg0KDQo+ID4gT24gMTAvMDcsIFRva2UgSO+/vWlsYW5kLUrvv71yZ2Vuc2VuIHdy b3RlOg0KPiA+PiBEYW5pZWwgQm9ya21hbm4gPGRhbmllbEBpb2dlYXJib3gubmV0PiB3cml0ZXM6 DQo+ID4NCj4gPj4gPiBPbiAxMC83LzIyIDE6MjggQU0sIEFsZXhlaSBTdGFyb3ZvaXRvdiB3cm90 ZToNCj4gPj4gPj4gT24gVGh1LCBPY3QgNiwgMjAyMiBhdCAyOjI5IFBNIERhbmllbCBCb3JrbWFu biAgDQo+IDxkYW5pZWxAaW9nZWFyYm94Lm5ldD4NCj4gPj4gd3JvdGU6DQo+ID4+ID4+PiBPbiAx MC82LzIyIDc6MDAgQU0sIEFsZXhlaSBTdGFyb3ZvaXRvdiB3cm90ZToNCj4gPj4gPj4+PiBPbiBX ZWQsIE9jdCAwNSwgMjAyMiBhdCAwMToxMTozNEFNICswMjAwLCBEYW5pZWwgQm9ya21hbm4gd3Jv dGU6DQo+ID4+ID4+PiBbLi4uXQ0KPiA+PiA+Pj4+DQo+ID4+ID4+Pj4gSSBjYW5ub3QgaGVscCBi dXQgZmVlbCB0aGF0IHByaW8gbG9naWMgY29weS1wYXN0ZSBmcm9tIG9sZCB0YywNCj4gPj4gbmV0 ZmlsdGVyIGFuZCBmcmllbmRzDQo+ID4+ID4+Pj4gaXMgZG9uZSBiZWNhdXNlICJ0aGF0J3MgaG93 IHRoaW5ncyB3ZXJlIGRvbmUgaW4gdGhlIHBhc3QiLg0KPiA+PiA+Pj4+IGltbyBpdCB3YXMgYSB3 ZWxsIGludGVudGlvbmVkIG1pc3Rha2UgYW5kIGFsbCBuZXR3b3JraW5nIHRoaW5ncyAgDQo+ICh0 YywNCj4gPj4gbmV0ZmlsdGVyLCBldGMpDQo+ID4+ID4+Pj4gY29weS1wYXN0ZWQgdGhhdCBjdW1i ZXJzb21lIGFuZCBoYXJkIHRvIHVzZSBjb25jZXB0Lg0KPiA+PiA+Pj4+IExldCdzIHRocm93IGF3 YXkgdGhhdCBiYWdnYWdlPw0KPiA+PiA+Pj4+IEluIGdvb2Qgc2V0IG9mIGNhc2VzIHRoZSBicGYg cHJvZyBpbnNlcnRlciBjYXJlcyB3aGV0aGVyIHRoZSBwcm9nICANCj4gaXMNCj4gPj4gZmlyc3Qg b3Igbm90Lg0KPiA+PiA+Pj4+IFNpbmNlIHRoZSBmaXJzdCBwcm9nIHJldHVybmluZyBhbnl0aGlu ZyBidXQgVENfTkVYVCB3aWxsIGJlIGZpbmFsLg0KPiA+PiA+Pj4+IEkgdGhpbmsgcHJvZyBpbnNl cnRpb24gZmxhZ3M6ICdJIHdhbnQgdG8gcnVuIGZpcnN0JyB2cyAnSSBkb24ndCAgDQo+IGNhcmUN Cj4gPj4gYWJvdXQgb3JkZXInDQo+ID4+ID4+Pj4gaXMgZ29vZCBlbm91Z2ggaW4gcHJhY3RpY2Uu IEFueSBjb21wbGV4IHNjaGVtZSBzaG91bGQgcHJvYmFibHkgYmUNCj4gPj4gcHJvZ3JhbW1hYmxl DQo+ID4+ID4+Pj4gYXMgYW55IHBvbGljeSBzaG91bGQuIEZvciBleGFtcGxlIGluIE1ldGEgd2Ug aGF2ZSAneGRwIGNoYWluZXInDQo+ID4+IGxvZ2ljIHRoYXQgaXMgc2ltaWxhcg0KPiA+PiA+Pj4+ IHRvIGxpYnhkcCBjaGFpbmluZywgYnV0IHdlIGFkZGVkIGEgZmVhdHVyZSB0aGF0IGFsbG93cyBh IHByb2cgdG8NCj4gPj4ganVtcCBvdmVyIGFub3RoZXINCj4gPj4gPj4+PiBwcm9nIGFuZCBjb250 aW51ZSB0aGUgY2hhaW4uIFByaW9yaXR5IGNvbmNlcHQgY2Fubm90IGV4cHJlc3MgdGhhdC4NCj4g Pj4gPj4+PiBTaW5jZSB3ZSdkIGhhdmUgdG8gYWRkIHNvbWUgInBvbGljeSBwcm9ncmFtIiBhbnl3 YXkgZm9yIHVzZSBjYXNlcw0KPiA+PiBsaWtlIHRoaXMNCj4gPj4gPj4+PiBsZXQncyBrZWVwIHRo aW5ncyBhcyBzaW1wbGUgYXMgcG9zc2libGU/DQo+ID4+ID4+Pj4gVGhlbiBtYXliZSB3ZSBjYW4g YWRvcHQgdGhpcyAiYXMtc2ltcGxlLWFzLXBvc3NpYmxlIiB0byBYRFAgIA0KPiBob29rcyA/DQo+ ID4+ID4+Pj4gQW5kIGFsbG93IGJwZiBwcm9ncyBjaGFpbmluZyBpbiB0aGUga2VybmVsIHdpdGgg InJ1bl9tZV9maXJzdCINCj4gPj4gdnMgInJ1bl9tZV9hbnl3aGVyZSINCj4gPj4gPj4+PiBpbiBi b3RoIHRjeCBhbmQgeGRwID8NCj4gPj4gPj4+PiBOYXR1cmFsbHkgInJ1bl9tZV9maXJzdCIgcHJv ZyB3aWxsIGJlIHRoZSBvbmx5IG9uZS4gTm8gbmVlZCBmb3INCj4gPj4gRl9SRVBMQUNFIGZsYWdz LCBldGMuDQo+ID4+ID4+Pj4gVGhlIG93bmVyIG9mICJydW5fbWVfZmlyc3QiIHdpbGwgdXBkYXRl IGl0cyBwcm9nIHRocm91Z2gNCj4gPj4gYnBmX2xpbmtfdXBkYXRlLg0KPiA+PiA+Pj4+ICJydW5f bWVfYW55d2hlcmUiIHdpbGwgYWRkIHRvIHRoZSBlbmQgb2YgdGhlIGNoYWluLg0KPiA+PiA+Pj4+ IEluIFhEUCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zICJydW5fbWVfZmlyc3QiIHdpbGwgYmUg dGhlICANCj4gZGVmYXVsdC4NCj4gPj4gPj4+PiBTaW5jZSBvbmx5IG9uZSBwcm9nIGNhbiBiZSBl bnF1ZXVlZCB3aXRoIHN1Y2ggZmxhZyBpdCB3aWxsIG1hdGNoDQo+ID4+IGV4aXN0aW5nIHNpbmds ZSBwcm9nIGJlaGF2aW9yLg0KPiA+PiA+Pj4+IFdlbGwgYmVoYXZpbmcgcHJvZ3Mgd2lsbCB1c2Ug KGxpa2UgeGRwLXRjcGR1bXAgb3IgbW9uaXRvcmluZyAgDQo+IHByb2dzKQ0KPiA+PiB3aWxsIHVz ZSAicnVuX21lX2FueXdoZXJlIi4NCj4gPj4gPj4+PiBJIGtub3cgaXQncyBmYXIgZnJvbSBjb3Zl cmluZyBwbGVudHkgb2YgY2FzZXMgdGhhdCB3ZSd2ZSBkaXNjdXNzZWQNCj4gPj4gZm9yIGxvbmcg dGltZSwNCj4gPj4gPj4+PiBidXQgcHJpbyBjb25jZXB0IGlzbid0IHJlYWxseSBjb3ZlcmluZyB0 aGVtIGVpdGhlci4NCj4gPj4gPj4+PiBXZSd2ZSBzdHJ1Z2dsZWQgZW5vdWdoIHdpdGggc2luZ2xl IHhkcCBwcm9nLCBzbyBjZXJ0YWlubHkgbm90DQo+ID4+IGFkdm9jYXRpbmcgZm9yIHRoYXQuDQo+ ID4+ID4+Pj4gQW5vdGhlciBhbHRlcm5hdGl2ZSBpcyB0byBkbzogInF1ZXVlX2F0X2hlYWQiIHZz ICJxdWV1ZV9hdF90YWlsIi4NCj4gPj4gSnVzdCBhcyBzaW1wbGUuDQo+ID4+ID4+Pj4gQm90aCBz aW1wbGUgdmVyc2lvbnMgaGF2ZSB0aGVpciBwcm9zIGFuZCBjb25zIGFuZCBkb24ndCBjb3Zlcg0K PiA+PiBldmVyeXRoaW5nLA0KPiA+PiA+Pj4+IGJ1dCBpbW8gYm90aCBhcmUgYmV0dGVyIHRoYW4g cHJpby4NCj4gPj4gPj4+DQo+ID4+ID4+PiBZZWFoLCBpdCdzIGtpbmQgb2YgdHJpY2t5LCBpbWhv LiBUaGUgJ3J1bl9tZV9maXJzdCcNCj4gPj4gdnMgJ3J1bl9tZV9hbnl3aGVyZScgYXJlIHR3bw0K PiA+PiA+Pj4gdXNlIGNhc2VzIHRoYXQgc2hvdWxkIGJlIGNvdmVyZWQgKGFuZCBhY3R1YWxseSB3 ZSBraW5kIG9mIGRvIHRoaXMgIA0KPiBpbg0KPiA+PiB0aGlzIHNldCwgdG9vLA0KPiA+PiA+Pj4g d2l0aCB0aGUgcHJpb3MgdmlhIHByaW89eCB2cyBwcmlvPTApLiBHaXZlbiB1c2VycyB3aWxsIG9u bHkgYmUNCj4gPj4gY29uc3VtaW5nIHRoZSBBUElzDQo+ID4+ID4+PiB2aWEgbGlicyBsaWtlIGxp YmJwZiwgdGhpcyBjYW4gYWxzbyBiZSBhYnN0cmFjdGVkIHRoaXMgd2F5IHcvbyAgDQo+IHVzZXJz DQo+ID4+IGhhdmluZyB0byBiZQ0KPiA+PiA+Pj4gYXdhcmUgb2YgcHJpb3MuDQo+ID4+ID4+DQo+ ID4+ID4+IGJ1dCB0aGUgcGF0Y2hzZXQgdGVsbHMgZGlmZmVyZW50IHN0b3J5Lg0KPiA+PiA+PiBQ cmlvIGdldHMgZXhwb3NlZCBldmVyeXdoZXJlIGluIHVhcGkgYWxsIHRoZSB3YXkgdG8gYnBmdG9v bA0KPiA+PiA+PiB3aGVuIGl0J3MgcmlnaHQgdGhlcmUgZm9yIHVzZXJzIHRvIHVuZGVyc3RhbmQu DQo+ID4+ID4+IEFuZCB0aGF0J3MgdGhlIG1haW4gcHJvYmxlbSB3aXRoIGl0Lg0KPiA+PiA+PiBU aGUgdXNlciBkb24ndCB3YW50IHRvIGFuZCBkb24ndCBuZWVkIHRvIGJlIGF3YXJlIG9mIGl0LA0K PiA+PiA+PiBidXQgdWFwaSBmb3JjZXMgdGhlbSB0byBwaWNrIHRoZSBwcmlvcml0eS4NCj4gPj4g Pj4NCj4gPj4gPj4+IEFueXdheSwgd2hlcmUgaXQgZ2V0cyB0cmlja3kgd291bGQgYmUgd2hlbiB0 aGluZ3MgZGVwZW5kIG9uICANCj4gb3JkZXJpbmcsDQo+ID4+ID4+PiBlLmcuIHlvdSBoYXZlIEJQ RiBwcm9ncyBkb2luZzogcG9saWN5LCBtb25pdG9yaW5nLCBsYiwgbW9uaXRvcmluZywNCj4gPj4g ZW5jcnlwdGlvbiwgd2hpY2gNCj4gPj4gPj4+IHdvdWxkIGJlIHN0aCB5b3UgY2FuIGJ1aWxkIHRv ZGF5IHZpYSB0YyBCUEY6IHNvIHBvbGljeSBvbmUgYWN0cyBhcyAgDQo+IGENCj4gPj4gcHJlZmls dGVyIGZvcg0KPiA+PiA+Pj4gdmFyaW91cyBjaWRyIHJhbmdlcyB0aGF0IHNob3VsZCBiZSBibG9j a2VkIG5vIG1hdHRlciB3aGF0LCB0aGVuDQo+ID4+IG1vbml0b3JpbmcgdG8gc2FtcGxlDQo+ID4+ ID4+PiB3aGF0IGdvZXMgaW50byB0aGUgbGIsIHRoZW4gbGIgaXRzZWxmIHdoaWNoIGRvZXMgc25h dC9kbmF0LCB0aGVuDQo+ID4+IG1vbml0b3JpbmcgdG8gc2VlIHdoYXQNCj4gPj4gPj4+IHRoZSBj b3JyZXNwb25kaW5nIHBrdCBsb29rcyB0aGF0IGdvZXMgdG8gYmFja2VuZCwgYW5kIG1heWJlDQo+ ID4+IGVuY3J5cHRpb24gdG8gZS5nLiBzZW5kDQo+ID4+ID4+PiB0aGUgcmVzdWx0IHRvIHdpcmVn dWFyZCBkZXYsIHNvIGl0J3MgZW5jcnlwdGVkIGZyb20gbGIgbm9kZSB0bw0KPiA+PiBiYWNrZW5k Lg0KPiA+PiA+Pg0KPiA+PiA+PiBUaGF0J3MgYWxsIHRoZW9yeS4gWW91ciBjb3ZlciBsZXR0ZXIg ZXhhbXBsZSBwcm92ZXMgdGhhdCBpbg0KPiA+PiA+PiByZWFsIGxpZmUgZGlmZmVyZW50IHNlcnZp Y2UgcGljayB0aGUgc2FtZSBwcmlvcml0eS4NCj4gPj4gPj4gVGhleSBzaW1wbHkgZG9uJ3Qga25v dyBhbnkgYmV0dGVyLg0KPiA+PiA+PiBwcmlvIGlzIGFuIHVubmVjZXNzYXJ5IG1hZ2ljIHRoYXQg YXBwcyBfaGF2ZV8gdG8gcGljaywNCj4gPj4gPj4gc28gdGhleSBqdXN0IGNvcHktcGFzdGUgYW5k IGV2ZXJ5b25lIGVuZHMgdXAgdXNpbmcgdGhlIHNhbWUuDQo+ID4+ID4+DQo+ID4+ID4+PiBGb3Ig c3VjaA0KPiA+PiA+Pj4gZXhhbXBsZSwgeW91J2QgbmVlZCBwcmlvcyBhcyB0aGUgJ3J1bl9tZV9h bnl3aGVyZScgZG9lc24ndCAgDQo+IGd1YXJhbnRlZQ0KPiA+PiBvcmRlciwgc28gdGhlcmUncw0K PiA+PiA+Pj4gYSBjYXNlIGZvciBib3RoIHNjZW5hcmlvcyAoY29uY3JldGUgbGF5b3V0IHZzIGxv b3NlIG9uZSksIGFuZCBmb3INCj4gPj4gbGF0dGVyIHdlIGNvdWxkDQo+ID4+ID4+PiBzdGFydCBv ZmYgd2l0aCBhbmQgaW50ZXJuYWwgcHJpbyBhcm91bmQgeCAoZS5nLiAxNmspLCBzbyB0aGVyZSdz ICANCj4gcm9vbQ0KPiA+PiB0byBhdHRhY2ggaW4NCj4gPj4gPj4+IGZyb250IHZpYSBmaXhlZCBw cmlvLCBidXQgYWxzbyBhcHBlbmQgdG8gZW5kIGZvciAnZG9uJ3QgY2FyZScsIGFuZA0KPiA+PiB0 aGF0IGNvdWxkIGJlDQo+ID4+ID4+PiBmcm9tIGxpYiBwb3YgdGhlIGRlZmF1bHQvbWFpbiBBUEkg d2hlcmVhcyBwcmlvIHdvdWxkIGJlIHNvbWUga2luZCAgDQo+IG9mDQo+ID4+IGV4dGVuZGVkIG9u ZS4NCj4gPj4gPj4+IFRob3VnaHRzPw0KPiA+PiA+Pg0KPiA+PiA+PiBJZiBwcmlvIHdhcyBub3Qg cGFydCBvZiB1YXBpLCBsaWtlIGtlcm5lbCBpbnRlcm5hbCBzb21laG93LA0KPiA+PiA+PiBhbmQg dGhlcmUgd2FzIGEgdXNlciBzcGFjZSBkYWVtb24sIHN5c3RlbWQsIG9yIGFub3RoZXIgYnBmIHBy b2csDQo+ID4+ID4+IG1vZHVsZSwgd2hhdGV2ZXIgdGhhdCB1c2VycyB3b3VsZCBpbnRlcmZhY2Ug dG8gdGhlbg0KPiA+PiA+PiB0aGUgcHJvcG9zZWQgaW1wbGVtZW50YXRpb24gb2YgcHJpbyB3b3Vs ZCB0b3RhbGx5IG1ha2Ugc2Vuc2UuDQo+ID4+ID4+IHByaW8gYXMgdWFwaSBpcyBub3QgdGhhdC4N Cj4gPj4gPg0KPiA+PiA+IEEgZ29vZCBhbmFsb2d5IHRvIHRoaXMgaXNzdWUgbWlnaHQgYmUgc3lz dGVtZCdzIHVuaXQgZmlsZXMuLiB5b3UNCj4gPj4gc3BlY2lmeSBkZXBlbmRlbmNpZXMNCj4gPj4g PiBmb3IgeW91ciBvd24gPHVuaXQ+IGZpbGUgdmlhICdXYW50cz08dW5pdEE+JywgYW5kIG9yZGVy aW5nDQo+ID4+IHZpYSAnQmVmb3JlPTx1bml0Qj4nIGFuZA0KPiA+PiA+ICdBZnRlcj08dW5pdEM+ JyBhbmQgdGhleSByZWZlciB0byBvdGhlciB1bml0IGZpbGVzLiBJIHRoaW5rIHRoYXQgaXMNCj4g Pj4gZ2VuZXJhbGx5IG9rYXksDQo+ID4+ID4geW91IGRvbid0IGRlYWwgd2l0aCBwcmlvIG51bWJl cnMsIGJ1dCByYXRoZXIgc29tZSBraW5kIHRleHR1YWwNCj4gPj4gcmVwcmVzZW50YXRpb24uIEhv d2V2ZXINCj4gPj4gPiB1c2VyL29wZXJhdG9yIHdpbGwgaGF2ZSB0byBkZWFsIHdpdGggZGVwZW5k ZW5jaWVzL29yZGVyaW5nIG9uZSB3YXkgb3INCj4gPj4gYW5vdGhlciwgdGhlDQo+ID4+ID4gcHJv YmxlbSBoZXJlIGlzIHRoYXQgd2UgZGVhbCB3aXRoIGtlcm5lbCBhbmQgbG9hZGVyIHRhbGtzIHRv IGtlcm5lbA0KPiA+PiBkaXJlY3RseSBzbyBpdA0KPiA+PiA+IGhhcyBubyBhd2FyZW5lc3Mgb2Yg d2hhdCBlbHNlIGlzIHJ1bm5pbmcgb3IgY291bGQgYmUgcnVubmluZywgc28gYXBwcw0KPiA+PiBu ZWVkcyB0byBkZWFsDQo+ID4+ID4gd2l0aCBpdCBzb21laG93IChhbmQgaXQgY2Fubm90IHdpdGhv dXQgZXh0ZXJuYWwgaGVscCkuDQo+ID4NCj4gPj4gSSB3YXMgdGhpbmtpbmcgYSBsaXR0bGUgYWJv dXQgaG93IHRoaXMgbWlnaHQgd29yazsgaS5lLiwgaG93IGNhbiB0aGUNCj4gPj4ga2VybmVsIGV4 cG9zZSB0aGUgcmVxdWlyZWQga25vYnMgdG8gYWxsb3cgYSBzeXN0ZW0gcG9saWN5IHRvIGJlDQo+ ID4+IGltcGxlbWVudGVkIHdpdGhvdXQgcHJvZ3JhbSBsb2FkaW5nIGhhdmluZyB0byB0YWxrIHRv IGFueXRoaW5nIG90aGVyDQo+ID4+IHRoYW4gdGhlIHN5c2NhbGwgQVBJPw0KPiA+DQo+ID4+IEhv dyBhYm91dCB3ZSBvbmx5IGV4cG9zZSBwcmVwZW5kL2FwcGVuZCBpbiB0aGUgcHJvZyBhdHRhY2gg VUFQSSwgYW5kDQo+ID4+IHRoZW4gaGF2ZSBhIGtlcm5lbCBmdW5jdGlvbiB0aGF0IGRvZXMgdGhl IHNvcnRpbmcgbGlrZToNCj4gPg0KPiA+PiBpbnQgYnBmX2FkZF9uZXdfdGN4X3Byb2coc3RydWN0 IGJwZl9wcm9nICpwcm9ncywgc2l6ZV90IG51bV9wcm9ncywgIA0KPiBzdHJ1Y3QNCj4gPj4gYnBm X3Byb2cgKm5ld19wcm9nLCBib29sIGFwcGVuZCkNCj4gPg0KPiA+PiB3aGVyZSB0aGUgZGVmYXVs dCBpbXBsZW1lbnRhdGlvbiBqdXN0IGFwcGVuZHMvcHJlcGVuZHMgdG8gdGhlIGFycmF5IGluDQo+ ID4+IHByb2dzIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgJ2FwcGVuJy4NCj4gPg0KPiA+PiBB bmQgdGhlbiB1c2UgdGhlIF9fd2VhayBsaW5raW5nIHRyaWNrIChvciBtYXliZSBzdHJ1Y3Rfb3Bz IHdpdGggYSAgDQo+IG1lbWJlcg0KPiA+PiBmb3IgVFhDLCBhbm90aGVyIGZvciBYRFAsIGV0Yz8p IHRvIGFsbG93IEJQRiB0byBvdmVycmlkZSB0aGUgZnVuY3Rpb24NCj4gPj4gd2hvbGVzYWxlIGFu ZCBpbXBsZW1lbnQgd2hhdGV2ZXIgb3JkZXJpbmcgaXQgd2FudHM/IEkuZS4sIGFsbG93IGl0IGNh bg0KPiA+PiB0byBqdXN0IHNoaWZ0IGFyb3VuZCB0aGUgb3JkZXIgb2YgcHJvZ3MgaW4gdGhlICdw cm9ncycgYXJyYXkgd2hlbmV2ZXIgYQ0KPiA+PiBwcm9ncmFtIGlzIGxvYWRlZC91bmxvYWRlZD8N Cj4gPg0KPiA+PiBUaGlzIHdheSwgYSB1c2Vyc3BhY2UgZGFlbW9uIGNhbiBpbXBsZW1lbnQgYW55 IHBvbGljeSBpdCB3YW50cyBieSBqdXN0DQo+ID4+IGF0dGFjaGluZyB0byB0aGF0IGhvb2ssIGFu ZCBrZWVwaW5nIHRoaW5ncyBsaWtlIGhvdyB0byBleHByZXNzDQo+ID4+IGRlcGVuZGVuY2llcyBh cyBhIHVzZXJzcGFjZSBjb25jZXJuPw0KPiA+DQo+ID4gV2hhdCBpZiB3ZSBkbyB0aGUgYWJvdmUs IGJ1dCBpbnN0ZWFkIG9mIHNpbXBsZSBnbG9iYWwgJ2F0dGFjaCAgDQo+IGZpcnN0L2xhc3QnLA0K PiA+IHRoZSBkZWZhdWx0IGFwaSB3b3VsZCBiZToNCj4gPg0KPiA+IC0gYXR0YWNoIGJlZm9yZSA8 dGFyZ2V0X2ZkPg0KPiA+IC0gYXR0YWNoIGFmdGVyIDx0YXJnZXRfZmQ+DQo+ID4gLSBhdHRhY2gg YmVmb3JlIHRhcmdldF9mZD0tMSA9PSBmaXJzdA0KPiA+IC0gYXR0YWNoIGFmdGVyIHRhcmdldF9m ZD0tMSA9PSBsYXN0DQo+ID4NCj4gPiA/DQoNCj4gSG1tLCB0aGUgcHJvYmxlbSB3aXRoIHRoYXQg aXMgdGhhdCBhcHBsaWNhdGlvbnMgZG9uJ3QgZ2VuZXJhbGx5IGhhdmUgYW4NCj4gZmQgdG8gYW5v dGhlciBhcHBsaWNhdGlvbidzIEJQRiBwcm9ncmFtczsgYW5kIG9idGFpbmluZyB0aGVtIGZyb20g YW4gSUQNCj4gaXMgYSBwcml2aWxlZ2VkIG9wZXJhdGlvbiAoQ0FQX1NZU19BRE1JTikuIFdlIGNv dWxkIGhhdmUgaXQgYmUgImF0dGFjaA0KPiBiZWZvcmUgdGFyZ2V0ICpJRCoiIGluc3RlYWQsIHdo aWNoIGNvdWxkIHdvcmsgSSBndWVzcz8gQnV0IHRoZW4gdGhlDQo+IHByb2JsZW0gYmVjb21lcyB0 aGF0IGl0J3MgcmFjeTogdGhlIElEIHlvdSdyZSB0YXJnZXRpbmcgY291bGQgZ2V0DQo+IGRldGFj aGVkIGJlZm9yZSB5b3UgYXR0YWNoLCBzbyB5b3UnbGwgbmVlZCB0byBiZSBwcmVwYXJlZCB0byBj aGVjayB0aGF0DQo+IGFuZCByZXRyeTsgYW5kIEknbSBhbG1vc3QgY2VydGFpbiB0aGF0IGFwcGxp Y2F0aW9ucyB3b24ndCB0ZXN0IGZvciB0aGlzLA0KPiBzbyBpdCdsbCBqdXN0IGxlYWQgdG8gaGFy ZC10by1kZWJ1ZyBoZWlzZW5idWdzLiBPciBhbSBJIGJlaW5nIHRvbw0KPiBwZXNzaW1pc3RpYyBo ZXJlPw0KDQpZZWFoLCBhZ3JlZWQsIGlkIHdvdWxkIHdvcmsgYmV0dGVyLiBJIGd1ZXNzIEknbSBt b3N0bHkgY29taW5nIGhlcmUNCmZyb20gdGhlIGJwZnRvb2wvb2JzZXJ2YWJpbGl0eSBwZXJzcGVj dGl2ZSB3aGVyZSBpdCBzZWVtcyBoYW5keSB0bw0KYmVpbmcgYWJsZSB0byBzdGljayBpbnRvIGFu eSBwbGFjZSBpbiB0aGUgY2hhaW4gZm9yIGRlYnVnZ2luZz8NCg0KTm90IHN1cmUgaWYgd2UgbmVl ZCB0byBjYXJlIGFib3V0IHJhY2luZXNzIGhlcmUuIFRoZSBzYW1lIHRoaW5nIGFwcGxpZXMNCmZv ciB0aGluZ3MgbGlrZSAnbGlzdCBhbGwgcHJvZ3JhbXMgYW5kIGR1bXAgdGhlaXIgaW5mbycgYW5k IGFsbCBvdGhlcg0Kc2ltaWxhciBybXcgb3BlcmF0aW9ucz8NCg0KQnV0LCBJIGd1ZXNzLCBtb3N0 IHVzZXJzIHdpbGwgc3RpbGwgZG8gJ2F0dGFjaCB0YXJnZXQgaWQgPSAtMScgYWthDQonYXR0YWNo IGxhc3QnIHdoaWNoIHByb2JhYmx5IG1ha2VzIHRoaXMgZmxleGliaWxpdHkgdW5uZWNlc3Nhcnk/ DQpPVE9ILCB0aGUgdXNlcnMgdGhhdCBzdGlsbCB3YW50IGl0IChicGZ0b29sL29ic2VydmFiaWxp dHkpIG1pZ2h0IHVzZSBpdC4NCg==