From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pve-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 053A11FF168 for <inbox@lore.proxmox.com>; Tue, 4 Mar 2025 17:28:33 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id CB5EB5AAB; Tue, 4 Mar 2025 17:28:27 +0100 (CET) Date: Tue, 4 Mar 2025 17:28:23 +0100 From: Gabriel Goller <g.goller@proxmox.com> To: Stefan Hanreich <s.hanreich@proxmox.com> Message-ID: <2d5zwigdxnxolimbgxiqtlbvsmu7wgt3fuenhci3qyz6jtjssg@qulezubkzxr5> Mail-Followup-To: Stefan Hanreich <s.hanreich@proxmox.com>, pve-devel@lists.proxmox.com References: <20250214133951.344500-1-g.goller@proxmox.com> <20250214133951.344500-3-g.goller@proxmox.com> <2443e9a1-a494-452b-8840-51c301582aa8@proxmox.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <2443e9a1-a494-452b-8840-51c301582aa8@proxmox.com> User-Agent: NeoMutt/20241002-35-39f9a6 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.031 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [lib.rs] Subject: Re: [pve-devel] [PATCH proxmox-ve-rs 02/11] add proxmox-frr crate with frr types X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/> List-Post: <mailto:pve-devel@lists.proxmox.com> List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com> Cc: pve-devel@lists.proxmox.com Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com> T24gMDMuMDMuMjAyNSAxNzoyOSwgU3RlZmFuIEhhbnJlaWNoIHdyb3RlOgo+VGhpcyB1c2VzIHN0 dWZmIGZyb20gYSBsYXRlciBwYXRjaCwgZG9lc24ndCBpdD8gU2hvdWxkbid0IHRoZSBvcmRlciBv Zgo+cGF0Y2hlcyAyIGFuZCAzIGJlIGZsaXBwZWQ/Cgpvb3BzLCB5ZWFoIG1iLgoKPj4gW3NuaXBd Cj4+IGRpZmYgLS1naXQgYS9wcm94bW94LWZyci9zcmMvbGliLnJzIGIvcHJveG1veC1mcnIvc3Jj L2xpYi5ycwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmNl ZWY4Mjk5OTYxOQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL3Byb3htb3gtZnJyL3NyYy9saWIu cnMKPj4gQEAgLTAsMCArMSwyMjMgQEAKPj4gK3B1YiBtb2QgY29tbW9uOwo+PiArcHViIG1vZCBv cGVuZmFicmljOwo+PiArcHViIG1vZCBvc3BmOwo+PiArCj4+ICt1c2Ugc3RkOjp7Y29sbGVjdGlv bnM6OntoYXNoX21hcDo6RW50cnksIEhhc2hNYXB9LCBmbXQ6OkRpc3BsYXksIHN0cjo6RnJvbVN0 cn07Cj4+ICsKPj4gK3VzZSBjb21tb246OntGcnJXb3JkLCBGcnJXb3JkRXJyb3J9Owo+PiArdXNl IHByb3htb3hfdmVfY29uZmlnOjpzZG46OmZhYnJpYzo6Y29tbW9uOjpIb3N0bmFtZTsKPgo+TWF5 YmUgbW92ZSBpdCB0byBuZXR3b3JrLXR5cGVzLCBpZiBpdCBpcyBhbHdheXMgbmVlZGVkPyBTZWVt cyBsaWtlIGEKPmJldHRlciBmaXQuIEVzcGVjaWFsbHkgc2luY2UgdGhlIGRlcGVuZGVuY3kgaXMg b3B0aW9uYWwuCgpBZ3JlZS4KCj4+IFtzbmlwXQo+PiArI1tkZXJpdmUoQ2xvbmUsIERlYnVnLCBQ YXJ0aWFsRXEsIEVxLCBIYXNoLCBEZXNlcmlhbGl6ZUZyb21TdHIsIFNlcmlhbGl6ZURpc3BsYXkp XQo+PiArcHViIGVudW0gUm91dGVyTmFtZSB7Cj4+ICsgICAgT3BlbkZhYnJpYyhvcGVuZmFicmlj OjpPcGVuRmFicmljUm91dGVyTmFtZSksCj4+ICsgICAgT3NwZihvc3BmOjpPc3BmUm91dGVyTmFt ZSksCj4+ICt9Cj4+ICsKPj4gK2ltcGwgRnJvbTxvcGVuZmFicmljOjpPcGVuRmFicmljUm91dGVy TmFtZT4gZm9yIFJvdXRlck5hbWUgewo+PiArICAgIGZuIGZyb20odmFsdWU6IG9wZW5mYWJyaWM6 Ok9wZW5GYWJyaWNSb3V0ZXJOYW1lKSAtPiBTZWxmIHsKPj4gKyAgICAgICAgU2VsZjo6T3BlbkZh YnJpYyh2YWx1ZSkKPj4gKyAgICB9Cj4+ICt9Cj4+ICsKPj4gK2ltcGwgRGlzcGxheSBmb3IgUm91 dGVyTmFtZSB7Cj4+ICsgICAgZm4gZm10KCZzZWxmLCBmOiAmbXV0IHN0ZDo6Zm10OjpGb3JtYXR0 ZXI8J18+KSAtPiBzdGQ6OmZtdDo6UmVzdWx0IHsKPj4gKyAgICAgICAgbWF0Y2ggc2VsZiB7Cj4+ ICsgICAgICAgICAgICBTZWxmOjpPcGVuRmFicmljKHIpID0+IHIuZm10KGYpLAo+PiArICAgICAg ICAgICAgU2VsZjo6T3NwZihyKSA9PiByLmZtdChmKSwKPj4gKyAgICAgICAgfQo+PiArICAgIH0K Pj4gK30KPj4gKwo+PiAraW1wbCBGcm9tU3RyIGZvciBSb3V0ZXJOYW1lIHsKPj4gKyAgICB0eXBl IEVyciA9IFJvdXRlck5hbWVFcnJvcjsKPj4gKwo+PiArICAgIGZuIGZyb21fc3RyKHM6ICZzdHIp IC0+IFJlc3VsdDxTZWxmLCBTZWxmOjpFcnI+IHsKPj4gKyAgICAgICAgaWYgbGV0IE9rKHJvdXRl cikgPSBzLnBhcnNlKCkgewo+PiArICAgICAgICAgICAgcmV0dXJuIE9rKFNlbGY6Ok9wZW5GYWJy aWMocm91dGVyKSk7Cj4+ICsgICAgICAgIH0KPgo+ZG9lcyB0aGlzIG1ha2Ugc2Vuc2UgaGVyZT8g Y2FuIHdlIGFjdHVhbGx5IG1ha2UgYSBjbGVhciBkaXN0aW5jdGlvbiBvbgo+d2hldGhlciB0aGlz IGlzIGEgT3BlbkZhYnJpYyAvIE9TUEYgcm91dGVyIG5hbWUgKGFuZCBmb3IgYWxsIG90aGVyCj5m dXR1cmUgUm91dGVyTmFtZXMpIGZyb20gdGhlIHN0cmluZyBhbG9uZT8gSSB0aGluayBpdCBtaWdo dCBiZSBiZXR0ZXIgdG8KPmV4cGxpY2l0bHkgY29uc3RydWN0IHRoZSBzcGVjaWZpYyB0eXBlIGFu ZCB0aGVuIG1ha2UgYSBSb3V0ZXJOYW1lIG91dCBvZgo+aXQgYW5kIGRvIG5vdCBpbXBsZW1lbnQg RnJvbVN0ciBhdCBhbGwuIE9yIGdldCByaWQgb2YgUm91dGVyTmFtZQo+YWx0b2dldGhlciAoc2Vl IGJlbG93KS4KPgo+SXQncyBhbHNvIGNvbnN0cnVjdGluZyBhbiBPcGVuRmFicmljIFJvdXRlck5h bWUgYnV0IG5ldmVyIGFuIE9TUEYgcm91dGVyCj5uYW1lLgoKbm9wZSwgdGhpcyBkb2Vzbid0IG1h a2UgYW55IHNlbnNlIGF0IGFsbCwgbm8gaWRlYSBob3cgaXQgZ290IGluIGhlcmUuClJlbW92ZWQg aXQgYW5kIHRoZSBEZXNlcmlhbGl6ZSBkZXJpdmUgZm9yIGFsbCB0aGUgcGFyZW50IHR5cGVzIGFz IGl0Cmlzbid0IG5lZWRlZCBhbnl3YXkuCgo+PiArICAgICAgICBFcnIoUm91dGVyTmFtZUVycm9y OjpJbnZhbGlkTmFtZSkKPj4gKyAgICB9Cj4+ICt9Cj4+ICsKPj4gKy8vLyBUaGUgaW50ZXJmYWNl IG5hbWUgaXMgdGhlIHNhbWUgb24gb3NwZiBhbmQgb3BlbmZhYnJpYywgYnV0IGl0IGlzIGFuIGVu dW0gc28gd2UgY2FuIGhhdmUgdHdvCj4+ICsvLy8gZGlmZmVyZW50IGVudHJpZXMgaW4gdGhlIGhh c2htYXAuIFRoaXMgYWxsb3dzIHVzIHRvIGhhdmUgYW4gaW50ZXJmYWNlIGluIGFuIG9zcGYgYW5k IG9wZW5mYWJyaWMKPj4gKy8vLyBmYWJyaWMuCj4+ICsjW2Rlcml2ZShDbG9uZSwgRGVidWcsIFBh cnRpYWxFcSwgRXEsIERlc2VyaWFsaXplLCBTZXJpYWxpemUsIEhhc2gpXQo+PiArcHViIGVudW0g SW50ZXJmYWNlTmFtZSB7Cj4+ICsgICAgT3BlbkZhYnJpYyhGcnJXb3JkKSwKPj4gKyAgICBPc3Bm KEZycldvcmQpLAo+PiArfQo+Cj5tYXliZSB0aGlzIHNob3VsZCBiZSBhIHN0cnVjdCByZXByZXNl bnRpbmcgYSBsaW51eCBpbnRlcmZhY2UgbmFtZQo+KG51bC10ZXJtaW5hdGVkIDE2Ynl0ZSBzdHJp bmcpIGluc3RlYWQgb2YgYW4gRnJyV29yZD8KCk1ha2VzIHNlbnNlLCBhZGRlZCBhIGRpZmZlcmVu dCBJbnRlcmZhY2VOYW1lIHN0cnVjdCB0aGF0IHdyYXBzIGEgU3RyaW5nIGFuZApjaGVja3MgdGhl IGxlbmd0aCB1cG9uIGNyZWF0aW9uLgoKPj4gW3NuaXBdCj4+ICsjW2Rlcml2ZShDbG9uZSwgRGVi dWcsIFBhcnRpYWxFcSwgRXEsIERlZmF1bHQsIERlc2VyaWFsaXplLCBTZXJpYWxpemUpXQo+PiAr cHViIHN0cnVjdCBGcnJDb25maWcgewo+PiArICAgIHJvdXRlcjogSGFzaE1hcDxSb3V0ZXJOYW1l LCBSb3V0ZXI+LAo+PiArICAgIGludGVyZmFjZXM6IEhhc2hNYXA8SW50ZXJmYWNlTmFtZSwgSW50 ZXJmYWNlPiwKPgo+YXJlIHdlIGV2ZXIgcXVlcnlpbmcgdGhlIGZyciByb3V0ZXIvaW50ZXJmYWNl IGJ5IG5hbWU/IGp1ZGdpbmcgZnJvbSB0aGUKPnB1YmxpYyBBUEkgd2UgZG9uJ3QgYW5kIG9ubHkg aXRlcmF0ZSBvdmVyIGl0LiB3ZSBjb3VsZCBtb3ZlIHRoZSBuYW1lCj5pbnRvIHRoZSBSb3V0ZXIv SW50ZXJmYWNlIHRoZW4sIHRoaXMgd291bGQgZW5zdXJlIHRoYXQgdGhlIG5hbWUgYWx3YXlzCj5m aXRzIHRoZSBjb25jcmV0ZSByb3V0ZXIuIFdlIGNvdWxkIHByb2JhYmx5IGFsc28gbWFrZSBjb252 ZXJ0aW5nIGZyb20KPnRoZSBzZWN0aW9uIGNvbmZpZyBlYXNpZXIgdGhlbiBhbmQgcG9zc2libHkg c2F2ZSB1cyB0aGUgd2hvbGUgUm91dGVyTmFtZQo+c3RydWN0Lgo+Cj5BcmUgZHVwbGljYXRlcyBw b3NzaWJsZSB3aXRoIGhvdyB0aGUgSUQgaW4gdGhlIFNlY3Rpb25Db25maWcgd29ya3M/IElmCj53 ZSB3YW50IHRvIGF2b2lkIHRoYXQsIHdlIGNvdWxkIHByb2JhYmx5IHVzZSBvdGhlciB3YXlzLgoK VGhlIHByb2JsZW0gaGVyZSBhcmUgZHVwbGljYXRlIGludGVyZmFjZXMgb3ZlciBkaWZmZXJlbnQg ZmFicmljcwooYXJlYXMpLCB3aGljaCBhcmUgbm90IGFsbG93ZWQuCgpUaGVzZSBhcmUgbm90IGNo ZWNrZWQgYnkgU2VjdGlvbkNvbmZpZyBiZWNhdXNlIHRoZSBrZXkgaXM6CiI8YXJlYT5fPGludGVy ZmFjZS1uYW1lPiIuCgpXZSBjb3VsZCBzaW1wbHkgaW1wbGVtZW50IGNoZWNrcyB3aGVuIGluc2Vy dGluZywgc3VyZSwgYnV0IHdoeSBub3QganVzdAp1c2UgSGFzaE1hcHMgYW5kIHNlYWwgdGhlIGRl YWw/IDopCgo+PiArfQo+PiArCj4+ICtpbXBsIEZyckNvbmZpZyB7Cj4+ICsgICAgcHViIGZuIG5l dygpIC0+IFNlbGYgewo+PiArICAgICAgICBTZWxmOjpkZWZhdWx0KCkKPj4gKyAgICB9Cj4+ICsK Pj4gKyAgICAjW2NmZyhmZWF0dXJlID0gImNvbmZpZy1leHQiKV0KPj4gKyAgICBwdWIgZm4gYnVp bGRlcigpIC0+IEZyckNvbmZpZ0J1aWxkZXIgewo+PiArICAgICAgICBGcnJDb25maWdCdWlsZGVy OjpkZWZhdWx0KCkKPj4gKyAgICB9Cj4KPnNlZSBhYm92ZSBmb3IgaWYgd2UgcmVhbGx5IG5lZWQg YSBidWlsZGVyIGhlcmUgb3IgaWYgaW1wbGVtZW50aW5nCj5jb252ZXJzaW9uIHRyYWl0cyBzdWZm aWNlcy4KCk15IGlkZWEgaXMgdGhhdCB3ZSBjYW4gYWRkIHRoZSBiZ3Agc3R1ZmYgaGVyZSBhcyB3 ZWxsIChzb29uVE0pLgpJIHdhbnRlZCB0byBhdm9pZCBhIFRyeUZyb208KEZhYnJpY0NvbmZpZywg QmdwQ29uZmlnLCAuLi4pPgppbXBsZW1lbnRhdGlvbiB0byBiZSBob25lc3QuCgo+PiArICAgIHB1 YiBmbiByb3V0ZXIoJnNlbGYpIC0+IGltcGwgSXRlcmF0b3I8SXRlbSA9ICgmUm91dGVyTmFtZSwg JlJvdXRlcik+ICsgJ18gewo+PiArICAgICAgICBzZWxmLnJvdXRlci5pdGVyKCkKPj4gKyAgICB9 Cj4+ICsKPj4gKyAgICBwdWIgZm4gaW50ZXJmYWNlcygmc2VsZikgLT4gaW1wbCBJdGVyYXRvcjxJ dGVtID0gKCZJbnRlcmZhY2VOYW1lLCAmSW50ZXJmYWNlKT4gKyAnXyB7Cj4+ICsgICAgICAgIHNl bGYuaW50ZXJmYWNlcy5pdGVyKCkKPj4gKyAgICB9Cj4+ICt9Cj4+ICsKPj4gKyNbZGVyaXZlKERl ZmF1bHQpXQo+PiArI1tjZmcoZmVhdHVyZSA9ICJjb25maWctZXh0IildCj4+ICtwdWIgc3RydWN0 IEZyckNvbmZpZ0J1aWxkZXIgewo+PiArICAgIGZhYnJpY3M6IEZhYnJpY0NvbmZpZywKPj4gKyAg ICAvL2JncDogT3B0aW9uPGludGVybmFsOjpCZ3BDb25maWc+Cj4+ICt9Cj4+ICsKPj4gKyNbY2Zn KGZlYXR1cmUgPSAiY29uZmlnLWV4dCIpXQo+PiAraW1wbCBGcnJDb25maWdCdWlsZGVyIHsKPj4g KyAgICBwdWIgZm4gYWRkX2ZhYnJpY3MobXV0IHNlbGYsIGZhYnJpYzogRmFicmljQ29uZmlnKSAt PiBGcnJDb25maWdCdWlsZGVyIHsKPj4gKyAgICAgICAgc2VsZi5mYWJyaWNzID0gZmFicmljOwo+ PiArICAgICAgICBzZWxmCj4+ICsgICAgfQo+Cj5Gcm9tPEZhYnJpY0NvbmZpZz4gbWlnaHQgYmUg YmV0dGVyIGlmIGl0IHJlcGxhY2VzIHNlbGYuZmFicmljcyAvCj5jb25zdW1lcyBGYWJyaWNDb25m aWcgYW55d2F5PyBNYXliZSBldmVuIFRyeUZyb208RmFicmljQ29uZmlnPiBmb3IKPkZyckNvbmZp ZyBpdHNlbGY/CgpzZWUgYWJvdmUuCgo+PiArCj4+ICsgICAgcHViIGZuIGJ1aWxkKHNlbGYsIGN1 cnJlbnRfbm9kZTogJnN0cikgLT4gUmVzdWx0PEZyckNvbmZpZywgYW55aG93OjpFcnJvcj4gewo+ PiArICAgICAgICBsZXQgbXV0IHJvdXRlcjogSGFzaE1hcDxSb3V0ZXJOYW1lLCBSb3V0ZXI+ID0g SGFzaE1hcDo6bmV3KCk7Cj4+ICsgICAgICAgIGxldCBtdXQgaW50ZXJmYWNlczogSGFzaE1hcDxJ bnRlcmZhY2VOYW1lLCBJbnRlcmZhY2U+ID0gSGFzaE1hcDo6bmV3KCk7Cj4+ICsKPj4gKyAgICAg ICAgaWYgbGV0IFNvbWUob3BlbmZhYnJpYykgPSBzZWxmLmZhYnJpY3Mub3BlbmZhYnJpYygpIHsK Pj4gKyAgICAgICAgICAgIC8vIG9wZW5mYWJyaWMKPj4gKyAgICAgICAgICAgIG9wZW5mYWJyaWMK Pj4gKyAgICAgICAgICAgICAgICAuZmFicmljcygpCj4+ICsgICAgICAgICAgICAgICAgLml0ZXIo KQo+PiArICAgICAgICAgICAgICAgIC50cnlfZm9yX2VhY2gofChmYWJyaWNfaWQsIGZhYnJpY19j b25maWcpfCB7Cj4+ICsgICAgICAgICAgICAgICAgICAgIGxldCBub2RlX2NvbmZpZyA9IGZhYnJp Y19jb25maWcubm9kZXMoKS5nZXQoJkhvc3RuYW1lOjpuZXcoY3VycmVudF9ub2RlKSk7Cj4+ICsg ICAgICAgICAgICAgICAgICAgIGlmIGxldCBTb21lKG5vZGVfY29uZmlnKSA9IG5vZGVfY29uZmln IHsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvZnIgPSBvcGVuZmFicmljOjpPcGVu RmFicmljUm91dGVyOjpmcm9tKChmYWJyaWNfY29uZmlnLCBub2RlX2NvbmZpZykpOwo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgbGV0IHJvdXRlcl9pdGVtID0gUm91dGVyOjpPcGVuRmFicmlj KG9mcik7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcm91dGVyX25hbWUgPSBSb3V0 ZXJOYW1lOjpPcGVuRmFicmljKAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5m YWJyaWM6Ok9wZW5GYWJyaWNSb3V0ZXJOYW1lOjp0cnlfZnJvbShmYWJyaWNfaWQpPywKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICk7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICByb3V0 ZXIuaW5zZXJ0KHJvdXRlcl9uYW1lLmNsb25lKCksIHJvdXRlcl9pdGVtKTsKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgIG5vZGVfY29uZmlnLmludGVyZmFjZXMoKS50cnlfZm9yX2VhY2gofGlu dGVyZmFjZXwgewo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtdXQgb3BlbmZh YnJpY19pbnRlcmZhY2U6IG9wZW5mYWJyaWM6Ok9wZW5GYWJyaWNJbnRlcmZhY2UgPQo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmFicmljX2lkLCBpbnRlcmZhY2UpLnRyeV9p bnRvKCk/Owo+Cj5UaGUgb25seSBmYWxsaWJsZSB0aGluZyBoZXJlIGlzIGNvbnN0cnVjdGluZyB0 aGUgUm91dGVyTmFtZSwgc28gd2UgY291bGQKPmp1c3QgY2xvbmUgaXQgZnJvbSBhYm92ZSBhbmQg bWFrZSBhCj5PcGVuRmFicmljSW50ZXJmYWNlOjpmcm9tX3NlY3Rpb25fY29uZmlnKCkgbWV0aG9k IHRoYXQgYWNjZXB0cyB0aGUgbmFtZQo+KyBzZWN0aW9uY29uZmlnIHN0cnVjdHM/CgpmYWlyIOKA kyBvciBqdXN0IGhhdmUgdGhlIApUcnlGcm9tPCgmaW50ZXJuYWw6OkZhYnJpY0lkLCZpbnRlcm5h bDo6SW50ZXJmYWNlKT4gZm9yIE9wZW5GYWJyaWNJbnRlcmZhY2UKYmUgYSAKVHJ5RnJvbTwoJk9w ZW5GYWJyaWNSb3V0ZXJOYW1lLCAmaW50ZXJuYWw6OkludGVyZmFjZSk+IGZvciBPcGVuRmFicmlj SW50ZXJmYWNlCgppbW8gdGhhdCdzIGV2ZW4gYmV0dGVyLgoKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvLyBJZiBubyBzcGVjaWZpYyBoZWxsb19pbnRlcnZhbCBpcyBzZXQsIGdldCBk ZWZhdWx0IG9uZSBmcm9tIGZhYnJpYwo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v IGNvbmZpZwo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9wZW5mYWJyaWNfaW50 ZXJmYWNlLmhlbGxvX2ludGVydmFsKCkuaXNfbm9uZSgpIHsKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb3BlbmZhYnJpY19pbnRlcmZhY2UKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC5zZXRfaGVsbG9faW50ZXJ2YWwoZmFicmljX2NvbmZpZy5oZWxs b19pbnRlcnZhbCgpLmNsb25lKCkpOwo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW50ZXJmYWNlX25hbWUgPSBJbnRl cmZhY2VOYW1lOjpPcGVuRmFicmljKEZycldvcmQ6OmZyb21fc3RyKGludGVyZmFjZS5uYW1lKCkp Pyk7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3BlbmZhYnJpYyBkb2Vzbid0 IGFsbG93IGFuIGludGVyZmFjZSB0byBiZSBpbiBtdWx0aXBsZSBvcGVuZmFicmljCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmFicmljcy4gRnJyIHdpbGwganVzdCBpZ25vcmUg aXQgYW5kIHRha2UgdGhlIGZpcnN0IG9uZS4KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiBsZXQgRW50cnk6OlZhY2FudChlKSA9IGludGVyZmFjZXMuZW50cnkoaW50ZXJmYWNlX25h bWUpIHsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5pbnNlcnQob3BlbmZh YnJpY19pbnRlcmZhY2UuaW50bygpKTsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 IGVsc2Ugewo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjaW5nOjp3YXJu ISgiQW4gaW50ZXJmYWNlIGNhbm5vdCBiZSBpbiBtdWx0aXBsZSBvcGVuZmFicmljIGZhYnJpY3Mi KTsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cj4KPmlmIGxldCBFcnIoXykgPSBp bnRlcmZhY2VzLnRyeV9pbnNlcnQoLi4pIG1heWJlIChpZiB3ZSBrZWVwIHRoZSBIYXNoTWFwKT8K CnRyeV9pbnNlcnQgaXMgdW5zdGFibGUgOigKCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT2s6OjwoKSwgYW55aG93OjpFcnJvcj4oKCkpCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICB9KT87Cj4+ICsgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICB0cmFjaW5nOjp3YXJuISgibm8gbm9kZSBjb25maWd1cmF0aW9uIGZvciBmYWJy aWMgXCJ7ZmFicmljX2lkfVwiIOKAkyB0aGlzIGZhYnJpYyBpcyBub3QgY29uZmlndXJlZCBmb3Ig dGhpcyBub2RlLiIpOwo+Cj5NYXliZSBpdCB3b3VsZCBtYWtlIHNlbnNlIHRvIHNwbGl0IHRoaXMg aW50byB0d28gZnVuY3Rpb25zLCB3aGVyZSB3ZQo+Y291bGQganVzdCByZXR1cm4gZWFybHkgaWYg dGhlcmUgaXMgbm8gY29uZmlndXJhdGlvbiBmb3IgdGhpcyBub2RlPwoKZG8geW91IG1lYW4gb25l IGZ1bmN0aW9uIGZvciBvc3BmIGFuZCBvbmUgZm9yIG9wZW5mYWJyaWM/CkknZCBhZ3JlZSB0byB0 aGF0LgoKPlRoZW4gaGVyZSBhbiBlYXJseSByZXR1cm4gd291bGQgc3VmZmljZSwgc2luY2Ugb3Ro ZXJ3aXNlIHRoZSBsb2cgZ2V0cwo+c3BhbW1lZCBvbiBub2RlcyB0aGF0IGFyZSBzaW1wbHkgbm90 IHBhcnQgb2YgYSBmYWJyaWMgKHdoaWNoIGlzCj5wZXJmZWN0bHkgdmFsaWQpPwoKVHJ1ZSwgZGlk IG5vdCBjb25zaWRlciB0aGF0LiBJIHRoaW5rIGl0J3Mgb2sgaWYgd2UganVzdCBtYWtlIHRoaXMg YQpkZWJ1ZyBwcmludC4gTm8gbmVlZCB0byBhZGQgc29tZSBmYW5jeSBjaGVja3MgaW1vLgoKPj4g W3NuaXBdCj4+ICsjW2Rlcml2ZShDbG9uZSwgRGVidWcsIFBhcnRpYWxFcSwgRXEsIEhhc2gsIERl c2VyaWFsaXplLCBTZXJpYWxpemUpXQo+PiArcHViIHN0cnVjdCBPcGVuRmFicmljSW50ZXJmYWNl IHsKPj4gKyAgICAvLyBOb3RlOiBhbiBpbnRlcmZhY2UgY2FuIG9ubHkgYmUgYSBwYXJ0IG9mIGEg c2luZ2xlIGZhYnJpYyAoc28gbm8gdmVjIG5lZWRlZCBoZXJlKQo+PiArICAgIGZhYnJpY19pZDog T3BlbkZhYnJpY1JvdXRlck5hbWUsCj4+ICsgICAgcGFzc2l2ZTogT3B0aW9uPGJvb2w+LAo+PiAr ICAgIGhlbGxvX2ludGVydmFsOiBPcHRpb248b3BlbmZhYnJpYzo6SGVsbG9JbnRlcnZhbD4sCj4+ ICsgICAgY3NucF9pbnRlcnZhbDogT3B0aW9uPG9wZW5mYWJyaWM6OkNzbnBJbnRlcnZhbD4sCj4+ ICsgICAgaGVsbG9fbXVsdGlwbGllcjogT3B0aW9uPG9wZW5mYWJyaWM6OkhlbGxvTXVsdGlwbGll cj4sCj4+ICt9Cj4+ICsKPj4gK2ltcGwgT3BlbkZhYnJpY0ludGVyZmFjZSB7Cj4+ICsgICAgcHVi IGZuIGZhYnJpY19pZCgmc2VsZikgLT4gJk9wZW5GYWJyaWNSb3V0ZXJOYW1lIHsKPj4gKyAgICAg ICAgJnNlbGYuZmFicmljX2lkCj4+ICsgICAgfQo+PiArICAgIHB1YiBmbiBwYXNzaXZlKCZzZWxm KSAtPiAmT3B0aW9uPGJvb2w+IHsKPj4gKyAgICAgICAgJnNlbGYucGFzc2l2ZQo+PiArICAgIH0K Pj4gKyAgICBwdWIgZm4gaGVsbG9faW50ZXJ2YWwoJnNlbGYpIC0+ICZPcHRpb248b3BlbmZhYnJp Yzo6SGVsbG9JbnRlcnZhbD4gewo+PiArICAgICAgICAmc2VsZi5oZWxsb19pbnRlcnZhbAo+PiAr ICAgIH0KPj4gKyAgICBwdWIgZm4gY3NucF9pbnRlcnZhbCgmc2VsZikgLT4gJk9wdGlvbjxvcGVu ZmFicmljOjpDc25wSW50ZXJ2YWw+IHsKPj4gKyAgICAgICAgJnNlbGYuY3NucF9pbnRlcnZhbAo+ PiArICAgIH0KPj4gKyAgICBwdWIgZm4gaGVsbG9fbXVsdGlwbGllcigmc2VsZikgLT4gJk9wdGlv bjxvcGVuZmFicmljOjpIZWxsb011bHRpcGxpZXI+IHsKPj4gKyAgICAgICAgJnNlbGYuaGVsbG9f bXVsdGlwbGllcgo+PiArICAgIH0KPgo+SWYgd2UgaW1wbGVtZW50IENvcHkgZm9yIHRob3NlIHR5 cGVzIGl0J3MgdXN1YWxseSBqdXN0IGVhc2llciB0byByZXR1cm4KPnRoZW0gb3duZWQuCgp0cnVl Cgo+PiArICAgIHB1YiBmbiBzZXRfaGVsbG9faW50ZXJ2YWwoJm11dCBzZWxmLCBpbnRlcnZhbDog T3B0aW9uPG9wZW5mYWJyaWM6OkhlbGxvSW50ZXJ2YWw+KSB7Cj4KPm5pdDogSSB1c3VhbGx5IGxp a2UgaW1wbCBJbnRvPE9wdGlvbjwuLj4+IGJlY2F1c2UgaXQgbWFrZXMgdGhlIEFQSSBuaWNlcgo+ KGRvbid0IGhhdmUgdG8gd3JpdGUgU29tZSguLikgYWxsIHRoZSB0aW1lIC4uLikKCnllcC4KCj4+ IFtzbmlwXQo+PiArI1tjZmcoZmVhdHVyZSA9ICJjb25maWctZXh0IildCj4+ICtpbXBsIFRyeUZy b208KCZpbnRlcm5hbDo6RmFicmljSWQsICZpbnRlcm5hbDo6SW50ZXJmYWNlKT4gZm9yIE9wZW5G YWJyaWNJbnRlcmZhY2Ugewo+PiArICAgIHR5cGUgRXJyb3IgPSBPcGVuRmFicmljSW50ZXJmYWNl RXJyb3I7Cj4+ICsKPj4gKyAgICBmbiB0cnlfZnJvbSh2YWx1ZTogKCZpbnRlcm5hbDo6RmFicmlj SWQsICZpbnRlcm5hbDo6SW50ZXJmYWNlKSkgLT4gUmVzdWx0PFNlbGYsIFNlbGY6OkVycm9yPiB7 Cj4+ICsgICAgICAgIE9rKFNlbGYgewo+PiArICAgICAgICAgICAgZmFicmljX2lkOiBPcGVuRmFi cmljUm91dGVyTmFtZTo6dHJ5X2Zyb20odmFsdWUuMCk/LAo+PiArICAgICAgICAgICAgcGFzc2l2 ZTogdmFsdWUuMS5wYXNzaXZlKCksCj4+ICsgICAgICAgICAgICBoZWxsb19pbnRlcnZhbDogdmFs dWUuMS5oZWxsb19pbnRlcnZhbCgpLmNsb25lKCksCj4+ICsgICAgICAgICAgICBjc25wX2ludGVy dmFsOiB2YWx1ZS4xLmNzbnBfaW50ZXJ2YWwoKS5jbG9uZSgpLAo+PiArICAgICAgICAgICAgaGVs bG9fbXVsdGlwbGllcjogdmFsdWUuMS5oZWxsb19tdWx0aXBsaWVyKCkuY2xvbmUoKSwKPgo+V2Ug Y2FuIGVhc2lseSBpbXBsZW1lbnQgQ29weSBmb3IgdGhvc2UgdmFsdWVzLCBzaW5jZSB0aGV5J3Jl IHUxNi4KCm5pY2UKCj4+ICsgICAgICAgIH0pCj4+ICsgICAgfQo+PiArfQo+PiArCj4+ICsjW2Nm ZyhmZWF0dXJlID0gImNvbmZpZy1leHQiKV0KPj4gK2ltcGwgVHJ5RnJvbTwmaW50ZXJuYWw6OkZh YnJpY0lkPiBmb3IgT3BlbkZhYnJpY1JvdXRlck5hbWUgewo+PiArICAgIHR5cGUgRXJyb3IgPSBS b3V0ZXJOYW1lRXJyb3I7Cj4+ICsKPj4gKyAgICBmbiB0cnlfZnJvbSh2YWx1ZTogJmludGVybmFs OjpGYWJyaWNJZCkgLT4gUmVzdWx0PFNlbGYsIFNlbGY6OkVycm9yPiB7Cj4+ICsgICAgICAgIE9r KE9wZW5GYWJyaWNSb3V0ZXJOYW1lOjpuZXcoRnJyV29yZDo6bmV3KHZhbHVlLnRvX3N0cmluZygp KT8pKQo+PiArICAgIH0KPj4gK30KPj4gKwo+PiArI1tjZmcoZmVhdHVyZSA9ICJjb25maWctZXh0 IildCj4+ICtpbXBsIEZyb208KCZpbnRlcm5hbDo6RmFicmljQ29uZmlnLCAmaW50ZXJuYWw6Ok5v ZGVDb25maWcpPiBmb3IgT3BlbkZhYnJpY1JvdXRlciB7Cj4+ICsgICAgZm4gZnJvbSh2YWx1ZTog KCZpbnRlcm5hbDo6RmFicmljQ29uZmlnLCAmaW50ZXJuYWw6Ok5vZGVDb25maWcpKSAtPiBTZWxm IHsKPj4gKyAgICAgICAgU2VsZiB7Cj4+ICsgICAgICAgICAgICBuZXQ6IHZhbHVlLjEubmV0KCku dG9fb3duZWQoKSwKPj4gKyAgICAgICAgfQo+PiArICAgIH0KPj4gK30KPgo+V2UgbmV2ZXIgdXNl IHZhbHVlLjAgaGVyZSwgYnV0IHdlIG1pZ2h0IGlmIHdlIGhhdmUgc29tZSBnbG9iYWwgb3B0aW9u cywKPnJpZ2h0PwoKRXhhY3RseS4gQWx0aG91Z2ggSSd2ZSBiZWVuIHRoaW5raW5nIGFib3V0IHRo YXQuIE1heWJlIHdlIHNob3VsZCBqdXN0CmFsbCBjaHVjayB0aGVtIGluIHRvIHRoZSBJbnRlcm1l ZGlhdGUgUmVwcmVzZW50YXRpb24gKGFuZCBleHBhbmQgdGhlCnByb3BlcnRpZXMgdG8gZXZlcnkg bm9kZSkgYW5kIGRvbid0IGJvdGhlciB3aXRoIHRoZW0gaW4gdGhlIEZyckNvbmZpZz8KCj4+IFtz bmlwXQo+PiArLy8vIFRoZSBuYW1lIG9mIHRoZSBvc3BmIGZyciByb3V0ZXIuIFRoZXJlIGlzIG9u bHkgb25lIG9zcGYgZmFicmljIHBvc3NpYmxlIGluIGZyciAoaWdub3JpbmcKPj4gKy8vLyBtdWx0 aXBsZSBpbnZvY2F0aW9ucyBvZiB0aGUgb3NwZmQgZGFlbW9uKSBhbmQgdGhlIHNlcGFyYXRpb24g aXMgZG9uZSB3aXRoIGFyZWFzLiBTdGlsbCwKPj4gKy8vLyBkaWZmZXJlbnQgYXJlYXMgaGF2ZSB0 aGUgc2FtZSBmcnIgcm91dGVyLCBzbyB0aGUgbmFtZSBvZiB0aGUgcm91dGVyIGlzIGp1c3QgIm9z cGYiIGluICJyb3V0ZXIKPj4gKy8vLyBvc3BmIi4gVGhpcyB0eXBlIHN0aWxsIGNvbnRhaW5zIHRo ZSBBcmVhIHNvIHRoYXQgd2UgY2FuIGluc2VydCBpdCBpbiB0aGUgSGFzaG1hcC4KPj4gKyNbZGVy aXZlKENsb25lLCBEZWJ1ZywgUGFydGlhbEVxLCBFcSwgSGFzaCwgRGVzZXJpYWxpemUsIFNlcmlh bGl6ZSldCj4+ICtwdWIgc3RydWN0IE9zcGZSb3V0ZXJOYW1lKEFyZWEpOwo+PiArCj4+ICtpbXBs IEZyb208QXJlYT4gZm9yIE9zcGZSb3V0ZXJOYW1lIHsKPj4gKyAgICBmbiBmcm9tKHZhbHVlOiBB cmVhKSAtPiBTZWxmIHsKPj4gKyAgICAgICAgU2VsZih2YWx1ZSkKPj4gKyAgICB9Cj4+ICt9Cj4+ ICsKPj4gK2ltcGwgRGlzcGxheSBmb3IgT3NwZlJvdXRlck5hbWUgewo+PiArICAgIGZuIGZtdCgm c2VsZiwgZjogJm11dCBzdGQ6OmZtdDo6Rm9ybWF0dGVyPCdfPikgLT4gc3RkOjpmbXQ6OlJlc3Vs dCB7Cj4+ICsgICAgICAgIHdyaXRlIShmLCAib3NwZiIpCj4KPnRoaXMgaXMgbWlzc2luZyB0aGUg YXJlYSwgb3I/CgpOb3BlLCB0aGlzIGlzIGZpbmUsIHlvdSBjYW4ndCBoYXZlIG1vcmUgdGhhbiBv bmUgb3NwZiByb3V0ZXIgZXhjZXB0IGlmCnlvdXIgaGF2aW5nIG11bHRpcGxlIG9zcGZkIGRhZW1v bnMuIE5vdGUgdGhhdCB0aGUgcm91dGVyLWlkIGFsc28KcGVyLWRhZW1vbiwgbm90IHBlci1hcmVh LgoKPj4gW3NuaXBdCj4+ICsvLy8gVGhlIE9TUEYgQXJlYS4gTW9zdCBjb21tb25seSwgdGhpcyBp cyBqdXN0IGEgbnVtYmVyLCBlLmcuIDUsIGJ1dCBzb21ldGltZXMgYWxzbyBhCj4+ICsvLy8gcHNl dWRvLWlwYWRkcmVzcywgZS5nLiAwLjAuMC4wCj4+ICsjW2Rlcml2ZShDbG9uZSwgRGVidWcsIFBh cnRpYWxFcSwgRXEsIEhhc2gsIERlc2VyaWFsaXplLCBTZXJpYWxpemUpXQo+PiArcHViIHN0cnVj dCBBcmVhKEZycldvcmQpOwo+PiArCj4+ICtpbXBsIFRyeUZyb208RnJyV29yZD4gZm9yIEFyZWEg ewo+PiArICAgIHR5cGUgRXJyb3IgPSBBcmVhUGFyc2luZ0Vycm9yOwo+PiArCj4+ICsgICAgZm4g dHJ5X2Zyb20odmFsdWU6IEZycldvcmQpIC0+IFJlc3VsdDxTZWxmLCBTZWxmOjpFcnJvcj4gewo+ PiArICAgICAgICBBcmVhOjpuZXcodmFsdWUpCj4+ICsgICAgfQo+PiArfQo+PiArCj4+ICtpbXBs IEFyZWEgewo+PiArICAgIHB1YiBmbiBuZXcobmFtZTogRnJyV29yZCkgLT4gUmVzdWx0PFNlbGYs IEFyZWFQYXJzaW5nRXJyb3I+IHsKPj4gKyAgICAgICAgaWYgbmFtZS5hc19yZWYoKS5wYXJzZTo6 PGkzMj4oKS5pc19vaygpIHx8IG5hbWUuYXNfcmVmKCkucGFyc2U6OjxJcHY0QWRkcj4oKS5pc19v aygpIHsKPgo+dXNlIHUzMiBoZXJlPyBvdGhlcndpc2UgYXJlYSBJRCBjYW4gYmUgbmVnYXRpdmUs IHdoaWNoIGlzbid0IGFsbG93ZWQgYWZhaWN0PwoKdHJ1ZS4KClRoYW5rcyBmb3IgdGhlIHJldmll dyEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpwdmUt ZGV2ZWwgbWFpbGluZyBsaXN0CnB2ZS1kZXZlbEBsaXN0cy5wcm94bW94LmNvbQpodHRwczovL2xp c3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9wdmUtZGV2ZWwK