From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id C65501FF16F for ; Tue, 8 Jul 2025 10:46:11 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id B73721177B; Tue, 8 Jul 2025 10:46:54 +0200 (CEST) Date: Tue, 8 Jul 2025 10:46:47 +0200 From: Wolfgang Bumiller To: Gabriel Goller Message-ID: References: <20250702145101.894299-1-g.goller@proxmox.com> <20250702145101.894299-24-g.goller@proxmox.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20250702145101.894299-24-g.goller@proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL 0.079 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 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. [mod.rs, rust-lang.org] Subject: Re: [pve-devel] [PATCH proxmox-ve-rs v4 17/22] config: sdn: fabrics: add fabric config X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Cc: pve-devel@lists.proxmox.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" T24gV2VkLCBKdWwgMDIsIDIwMjUgYXQgMDQ6NTA6MDhQTSArMDIwMCwgR2FicmllbCBHb2xsZXIg d3JvdGU6Cj4gRnJvbTogU3RlZmFuIEhhbnJlaWNoIDxzLmhhbnJlaWNoQHByb3htb3guY29tPgo+ IAo+IFRoZSBGYWJyaWNDb25maWcgdHJhbnNmb3JtcyB0aGUgZmxhdCBzZWN0aW9uIGNvbmZpZ3Vy YXRpb24gaW50byBpdHMKPiBoaWVyYXJjaGljYWwgcmVwcmVzZW50YXRpb24sIHdoaWNoIG1ha2Vz IHF1ZXJ5aW5nIGFuZCB2YWxpZGF0aW5nIHRoZQo+IGZhYnJpY3MgY29uZmlndXJhdGlvbiBtb3Jl IGVyZ29ub21pYy4KPiAKPiBJdCBwcm92aWRlcyB0aGUgQ1JVRCBtZXRob2RzIGZvciBzYWZlbHkg bWFuaXB1bGF0aW5nIHRoZSBmYWJyaWMKPiBjb25maWd1cmF0aW9uLCB3aGlsZSBjaGVja2luZyBm b3IgcG9zc2libGUgZXJyb3JzLiBJdCBpcyBpbnRlbmRlZCB0bwo+IGJlIHRoZSBpbnRlcmZhY2Ug Zm9yIGV4dGVybmFsIHVzZXJzIHRvIHVzZSB0aGUgZmFicmljIGNvbmZpZ3VyYXRpb24uCj4gCj4g QnkgZW5jYXBzdWxhdGluZyB0aGUgY29uZmlndXJhdGlvbiBpbnRvIHRoaXMgc3RydWN0LCB3ZSBj YW4gYWx3YXlzCj4gYXNzdXJlIHRoYXQgaW52YXJpYW50cyBhcmUgdXBoZWxkIGFuZCBtYW55IG9m IHRoZW0gY2FuIGFjdHVhbGx5IGJlCj4gY2hlY2tlZCBhdCBjb21waWxlIHRpbWUgKGUuZy4gcHJv cGVyIGNvbWJpbmF0aW9uIG9mIEZhYnJpY1NlY3Rpb24gYW5kCj4gTm9kZVNlY3Rpb24gaW4gdGhl IGhpZXJhcmNoeSB2aWEgdGhlIEVudHJ5IHN0cnVjdCkuCj4gCj4gSXQgdXNlcyB0aGUgRmFicmlj IGFuZCBOb2RlIGVudW1zIGZvcmVtb3N0IGluIGl0cyBwdWJsaWMgQVBJLCBzbwo+IGFkZGluZyBu ZXcgcHJvdG9jb2xzIGRvZXMgbm90IGNoYW5nZSB0aGUgcHVibGljIEFQSS4gVGhpcyBlbmFibGVz IHVzCj4gdG8gd3JpdGUgZ2VuZXJpYyBBUEkgbWV0aG9kcyB0aGF0IGRvIG5vdCBuZWVkIHRvIGJl IHVwZGF0ZWQgd2hlbgo+IGFkZGluZyBuZXcgcHJvdG9jb2xzLgo+IAo+IElmIHNvIGRlc2lyZWQs IHVzZXJzIGNhbiBzdGlsbCBhY2Nlc3MgdGhlIHByb3RvY29sLXNwZWNpZmljIHByb3BlcnRpZXMK PiBieSBtYXRjaGluZyBvbiB0aGUgRmFicmljRW50cnkgZW51bS4KPiAKPiBDby1hdXRob3JlZC1i eTogR2FicmllbCBHb2xsZXIgPGcuZ29sbGVyQHByb3htb3guY29tPgo+IFNpZ25lZC1vZmYtYnk6 IFN0ZWZhbiBIYW5yZWljaCA8cy5oYW5yZWljaEBwcm94bW94LmNvbT4KPiAtLS0KPiAgcHJveG1v eC12ZS1jb25maWcvc3JjL3Nkbi9mYWJyaWMvbW9kLnJzIHwgNTE2ICsrKysrKysrKysrKysrKysr KysrKysrKwo+ICAxIGZpbGUgY2hhbmdlZCwgNTE2IGluc2VydGlvbnMoKykKPiAKPiBkaWZmIC0t Z2l0IGEvcHJveG1veC12ZS1jb25maWcvc3JjL3Nkbi9mYWJyaWMvbW9kLnJzIGIvcHJveG1veC12 ZS1jb25maWcvc3JjL3Nkbi9mYWJyaWMvbW9kLnJzCj4gaW5kZXggMDA3YmU2YTNmZDhlLi4zMzQy YTcwNTNkM2YgMTAwNjQ0Cj4gLS0tIGEvcHJveG1veC12ZS1jb25maWcvc3JjL3Nkbi9mYWJyaWMv bW9kLnJzCj4gKysrIGIvcHJveG1veC12ZS1jb25maWcvc3JjL3Nkbi9mYWJyaWMvbW9kLnJzCj4g QEAgLTEgKzEsNTE3IEBACj4gIHB1YiBtb2Qgc2VjdGlvbl9jb25maWc7Cj4gKwo+ICt1c2Ugc3Rk Ojpjb2xsZWN0aW9uczo6QlRyZWVNYXA7Cj4gK3VzZSBzdGQ6Om1hcmtlcjo6UGhhbnRvbURhdGE7 Cj4gK3VzZSBzdGQ6Om9wczo6RGVyZWY7Cj4gKwo+ICt1c2Ugc2VyZGU6OntEZXNlcmlhbGl6ZSwg U2VyaWFsaXplfTsKPiArCj4gK3VzZSBjcmF0ZTo6c2RuOjpmYWJyaWM6OnNlY3Rpb25fY29uZmln Ojp7Cj4gKyAgICBmYWJyaWM6OnsKPiArICAgICAgICBGYWJyaWMsIEZhYnJpY0RlbGV0YWJsZVBy b3BlcnRpZXMsIEZhYnJpY0lkLCBGYWJyaWNTZWN0aW9uLCBGYWJyaWNTZWN0aW9uVXBkYXRlciwK PiArICAgICAgICBGYWJyaWNVcGRhdGVyLAo+ICsgICAgfSwKPiArICAgIG5vZGU6OnsKPiArICAg ICAgICBhcGk6OntOb2RlRGF0YVVwZGF0ZXIsIE5vZGVEZWxldGFibGVQcm9wZXJ0aWVzLCBOb2Rl VXBkYXRlcn0sCj4gKyAgICAgICAgTm9kZSwgTm9kZUlkLCBOb2RlU2VjdGlvbiwKPiArICAgIH0s Cj4gKyAgICBwcm90b2NvbDo6ewo+ICsgICAgICAgIG9wZW5mYWJyaWM6OnsKPiArICAgICAgICAg ICAgT3BlbmZhYnJpY0RlbGV0YWJsZVByb3BlcnRpZXMsIE9wZW5mYWJyaWNOb2RlRGVsZXRhYmxl UHJvcGVydGllcywKPiArICAgICAgICAgICAgT3BlbmZhYnJpY05vZGVQcm9wZXJ0aWVzLCBPcGVu ZmFicmljTm9kZVByb3BlcnRpZXNVcGRhdGVyLCBPcGVuZmFicmljUHJvcGVydGllcywKPiArICAg ICAgICAgICAgT3BlbmZhYnJpY1Byb3BlcnRpZXNVcGRhdGVyLAo+ICsgICAgICAgIH0sCj4gKyAg ICAgICAgb3NwZjo6ewo+ICsgICAgICAgICAgICBPc3BmRGVsZXRhYmxlUHJvcGVydGllcywgT3Nw Zk5vZGVEZWxldGFibGVQcm9wZXJ0aWVzLCBPc3BmTm9kZVByb3BlcnRpZXMsCj4gKyAgICAgICAg ICAgIE9zcGZOb2RlUHJvcGVydGllc1VwZGF0ZXIsIE9zcGZQcm9wZXJ0aWVzLCBPc3BmUHJvcGVy dGllc1VwZGF0ZXIsCj4gKyAgICAgICAgfSwKPiArICAgIH0sCj4gK307Cj4gKwo+ICsjW2Rlcml2 ZSh0aGlzZXJyb3I6OkVycm9yLCBEZWJ1ZyldCj4gK3B1YiBlbnVtIEZhYnJpY0NvbmZpZ0Vycm9y IHsKPiArICAgICNbZXJyb3IoImZhYnJpYyAnezB9JyBkb2VzIG5vdCBleGlzdCBpbiBjb25maWd1 cmF0aW9uIildCj4gKyAgICBGYWJyaWNEb2VzTm90RXhpc3QoU3RyaW5nKSwKPiArICAgICNbZXJy b3IoIm5vZGUgJ3swfScgZG9lcyBub3QgZXhpc3QgaW4gZmFicmljICd7MX0nIildCj4gKyAgICBO b2RlRG9lc05vdEV4aXN0KFN0cmluZywgU3RyaW5nKSwKCl4gU28sIGluIHRoZSAidXN1YWwiIGNh c2VzLCBgLmdldCgpYCBtZXRob2RzIHJldHVybiBhbiBgT3B0aW9uYC4gV2hlcmUKdGhpcyBpcyBu b3QgdGhlIGNhc2UsIHdlIG9mdGVuIGhhdmUgYW4gZW1wdHkgZXJyb3IuCkVnLjogYGlvOjpFcnJv cktpbmQ6Ok5vdEZvdW5kYCBoYXMgbm8gY29udGVudCwgYHN0ZDo6bnVtOjpQYXJzZUludEVycm9y YApkb2VzIG5vdCBpbmNsdWRlIHRoZSBudW1iZXIvZGlnaXRzLgpUaGUgbmFtZXMgYXJlIHVzdWFs bHkgYWRkZWQgdmlhIGAuY29udGV4dCgpYCBvciBzb21lIHN1Y2guCk9uIHRoZSBvdGhlciBoYW5k LCBzb21ldGltZXMgdGhlcmUgYXJlICJmdW5jdGlvbmFsIiBlcnJvcnMsIGxpa2UKYE51bEVycm9y YCBpbiBgQ1N0cmluZ2AsIHNpbmNlIGl0IHRha2VzIGFuIGBJbnRvPFZlYzx1OD4+YCBpdCBpbmNs dWRlcwp0aGUgYWxsb2NhdGVkIHZlY3RvciBpbiBjYXNlIHRoZSB1c2VyIHdhbnRzIHRvIHJldXNl IGl0IGluIHRoZSBlcnJvcgpjYXNlLiBTaW1pbGFybHksIGBNdXRleDo6bG9jaygpYCdzIGVycm9y IGlzIGEKYFBvaXNvbkVycm9yPE11dGV4R3VhcmQ8VD4+YCB3aGljaCBjYW4gYmUgdHVybmVkIGlu dG8gdGhlIGd1YXJkIHRvIHN0aWxsCmFjY2VzcyB0aGUgZGF0YS4uLgoKVGhlIHVzZSBvZiB0aGlz IGJlbG93IG1heSBhcyB3ZWxsIGp1c3QgcmV0dXJuIGFuIGBPcHRpb25gLCBidXQgSSBnZXQKdGhh dCB3ZSB3YW50IG1vcmUgY29udGV4dCwgcHJldHR5IG11Y2ggYWxsIGNhc2VzLiBJJ20ganVzdCB3 b3JyaWVkIHdlCm1pZ2h0IGVuZCB1cCB3aXRoIG1vcmUgaW5jb25zaXN0ZW5jaWVzIGFjcm9zcyBv dXIgdmFyaW91cyBjb2RlIGJhc2VzCihjYWxsZXJzIGFkZGluZyBjb250ZXh0IGJlY2F1c2UgdGhl eSBkaWQgbm90IGV4cGVjdCBpdCB0byBhbHJlYWR5IGJlCnRoZXJlKSwgc28gd2Ugc2hvdWxkIHBy b2JhYmx5IGRlY2xhcmUgc29tZSBydWxlcyBmb3IgaG93IHRvIGRlc2lnbiBlcnJvcgp0eXBlcyBp biBvdXIgY29kaW5nIHN0eWxlIGF0IHNvbWUgcG9pbnQuLi4gKFRoaXMgaXMgbG9uZyBvdmVyZHVl ISkKCkFueXdheS4uLiB1bnRpbCB3ZSBhY3R1YWxseSBkZWZpbmUgaG93IHdlIHdhbnQgdG8gZGVh bCB3aXRoIGVycm9yIHR5cGVzLAp3ZSBjYW4gbGVhdmUgaXQgbGlrZSB0aGlzIGZvciBub3cuLi4K Cj4gKyAgICAjW2Vycm9yKCJub2RlIGhhcyBhIGRpZmZlcmVudCBwcm90b2NvbCB0aGFuIHRoZSBy ZWZlcmVuY2VkIGZhYnJpYyIpXQo+ICsgICAgUHJvdG9jb2xNaXNtYXRjaCwKPiArICAgICNbZXJy b3IoImZhYnJpYyAnezB9JyBhbHJlYWR5IGV4aXN0cyBpbiBjb25maWciKV0KPiArICAgIER1cGxp Y2F0ZUZhYnJpYyhTdHJpbmcpLAo+ICsgICAgI1tlcnJvcigibm9kZSAnezB9JyBhbHJlYWR5IGV4 aXN0cyBpbiBjb25maWcgZm9yIGZhYnJpYyB7MX0iKV0KPiArICAgIER1cGxpY2F0ZU5vZGUoU3Ry aW5nLCBTdHJpbmcpLAo+ICsgICAgLy8gc2hvdWxkIHVzdWFsbHkgbm90IG9jY3VyLCBidXQgd2Ug c3RpbGwgY2hlY2sgZm9yIGl0IG5vbmV0aGVsZXNzCj4gKyAgICAjW2Vycm9yKCJtaXNtYXRjaGVk IGZhYnJpY19pZCIpXQo+ICsgICAgRmFicmljSWRNaXNtYXRjaCwKPiArfQo+ICsKPiArLy8vIEFu IGVudHJ5IGluIGEgW2BGYWJyaWNDb25maWdgXS4KPiArLy8vCj4gKy8vLyBJdCBlbmZvcmNlcyBj b21wYXRpYmxlIHR5cGVzIGZvciBpdHMgY29udGFpbmluZyBbYEZhYnJpY1NlY3Rpb25gXSBhbmQg W2BOb2RlU2VjdGlvbmBdIHZpYSB0aGUKPiArLy8vIGdlbmVyaWMgcGFyYW1ldGVycywgc28gb25s eSBOb2RlcyBhbmQgRmFicmljcyB3aXRoIGNvbXBhdGlibGUgdHlwZXMgY2FuIGJlIGluc2VydGVk IGludG8gYW4KPiArLy8vIGVudHJ5Lgo+ICsjW2Rlcml2ZShEZWJ1ZywgQ2xvbmUsIFNlcmlhbGl6 ZSwgRGVzZXJpYWxpemUsIEhhc2gpXQo+ICtwdWIgc3RydWN0IEVudHJ5PEYsIE4+IHsKPiArICAg IC8vIHdlIHdhbnQgdG8gc3RvcmUgdGhlIGVudW0gc3RydWN0cyBGYWJyaWMgJiBOb2RlIGhlcmUs IGluIG9yZGVyIHRvIGhhdmUgYWNjZXNzIHRvIHRoZQo+ICsgICAgLy8gcHJvcGVydGllcyBhbmQg bWV0aG9kcyBkZWZpbmVkIG9uIHRoZSBlbnVtIGl0c2VsZi4KPiArICAgIC8vIEluIG9yZGVyIHRv IHN0aWxsIGJlIGFibGUgdG8gdHlwZS1jaGVjayB0aGF0IGFuIEVudHJ5IGNvbnRhaW5zIHRoZSBy aWdodCBjb21iaW5hdGlvbiBvZgo+ICsgICAgLy8gTm9kZVNlY3Rpb24gYW5kIEZhYnJpY1NlY3Rp b24sIHdlIHR5cGUgaGludCB0aGUgYWN0dWFsIHR5cGVzIHdyYXBwZWQgaW50byBGYWJyaWMgJiBO b2RlIGhlcmUKPiArICAgIC8vIHZpYSBQaGFudG9tRGF0YSBhbmQgb25seSBhbGxvdyBpbnNlcnRp b24gb2YgdGhlIHByb3BlciB0eXBlcyB2aWEgdGhlIHByb3ZpZGVkIG1ldGhvZHMuCj4gKyAgICAj W3NlcmRlKHNraXApXQo+ICsgICAgX3BoYW50b21fZmFicmljOiBQaGFudG9tRGF0YTxGYWJyaWNT ZWN0aW9uPEY+PiwKPiArICAgICNbc2VyZGUoc2tpcCldCj4gKyAgICBfcGhhbnRvbV9ub2RlOiBQ aGFudG9tRGF0YTxOb2RlU2VjdGlvbjxOPj4sCgpUZWNobmljYWxseSwgc2luY2UgdGhpcyBzdHJ1 Y3QgKmNvbnRhaW5zKiBuZWl0aGVyIE4gbm9yIEYsIHRoaXMgY291bGQKdXNlIGBQaGFudG9tRGF0 YTxmbigpIC0+IEZvb1NlY3Rpb248WD4+YC4gSGVyZSB0aGlzIHByb2JhYmx5IHdvbid0IG1ha2UK YSBkaWZmZXJlbmNlLiBJbiBnZW5lcmFsLCB0aG91Z2gsIHRoZSB3YXkgeW91IHVzZSB0aGUgZ2Vu ZXJpYyB0eXBlIG9mCmBQaGFudG9tRGF0YWAgaW5mbHVlbmNlcyBhdXRvLXRyYWl0cyAoU2VuZC9T eW5jKSwgdmFyaWFuY2UgYW5kCmRyb3BjaGVja2luZy4KClNpbmNlIHRoaXMgc3RydWN0J3MgU2Vu ZC9TeW5jIGRvbid0IGRlcGVuZCBvbiBuZWl0aGVyIE4gbm9yIEYsIHRoZQpgZm4oKSAtPiDigKZg IHZlcnNpb24gd291bGQgYmUgc3VpdGFibGUuCgpTZWUgaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9y Zy9ub21pY29uL3BoYW50b20tZGF0YS5odG1sCgo+ICsKPiArICAgIGZhYnJpYzogRmFicmljLAo+ ICsgICAgbm9kZXM6IEJUcmVlTWFwPE5vZGVJZCwgTm9kZT4sCj4gK30KPiArCj4gK2ltcGw8Riwg Tj4gRW50cnk8RiwgTj4KPiArd2hlcmUKPiArICAgIEZhYnJpYzogRnJvbTxGYWJyaWNTZWN0aW9u PEY+PiwKPiArICAgIE5vZGU6IEZyb208Tm9kZVNlY3Rpb248Tj4+LAo+ICt7Cj4gKyAgICAvLy8g Q3JlYXRlIGEgbmV3IFtgRW50cnlgXSBmcm9tIHRoZSBwYXNzZWQgW2BGYWJyaWNTZWN0aW9uPEY+ YF0gd2l0aCBubyBub2Rlcy4KPiArICAgIGZuIG5ldyhmYWJyaWM6IEZhYnJpY1NlY3Rpb248Rj4p IC0+IFNlbGYgewo+ICsgICAgICAgIFNlbGYgewo+ICsgICAgICAgICAgICBmYWJyaWM6IGZhYnJp Yy5pbnRvKCksCj4gKyAgICAgICAgICAgIG5vZGVzOiBEZWZhdWx0OjpkZWZhdWx0KCksCj4gKyAg ICAgICAgICAgIF9waGFudG9tX2ZhYnJpYzogRGVmYXVsdDo6ZGVmYXVsdCgpLAo+ICsgICAgICAg ICAgICBfcGhhbnRvbV9ub2RlOiBEZWZhdWx0OjpkZWZhdWx0KCksCgpeIGBQaGFudG9tRGF0YWAg aXMgc2hvcnRlciwgY29uc3QgYW5kIG1vcmUgb2J2aW91cyB0aGFuIGBEZWZhdWx0OjpkZWZhdWx0 KClgLgoKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIEFkZHMgYSBub2RlIHRv IHRoaXMgZW50cnkKPiArICAgIC8vLwo+ICsgICAgLy8vICMgRXJyb3JzCgpQbGVhc2UgaW5jbHVk ZSBhIG5ld2xpbmUgaGVyZS4KCj4gKyAgICAvLy8gUmV0dXJucyBhbiBlcnJvciBpZiB0aGUgbm9k ZSdzIGZhYnJpY19pZCBkb2Vzbid0IG1hdGNoIHRoaXMgZW50cnkncyBmYWJyaWNfaWQKPiArICAg IC8vLyBvciBpZiBhIG5vZGUgd2l0aCB0aGUgc2FtZSBJRCBhbHJlYWR5IGV4aXN0cyBpbiB0aGlz IGVudHJ5Lgo+ICsgICAgZm4gYWRkX25vZGUoJm11dCBzZWxmLCBub2RlOiBOb2RlU2VjdGlvbjxO PikgLT4gUmVzdWx0PCgpLCBGYWJyaWNDb25maWdFcnJvcj4gewo+ICsgICAgICAgIGlmIHNlbGYu bm9kZXMuY29udGFpbnNfa2V5KG5vZGUuaWQoKS5ub2RlX2lkKCkpIHsKPiArICAgICAgICAgICAg cmV0dXJuIEVycihGYWJyaWNDb25maWdFcnJvcjo6RHVwbGljYXRlTm9kZSgKPiArICAgICAgICAg ICAgICAgIG5vZGUuaWQoKS5ub2RlX2lkKCkudG9fc3RyaW5nKCksCj4gKyAgICAgICAgICAgICAg ICBzZWxmLmZhYnJpYy5pZCgpLnRvX3N0cmluZygpLAo+ICsgICAgICAgICAgICApKTsKPiArICAg ICAgICB9Cj4gKwo+ICsgICAgICAgIGlmIG5vZGUuaWQoKS5mYWJyaWNfaWQoKSAhPSBzZWxmLmZh YnJpYy5pZCgpIHsKPiArICAgICAgICAgICAgcmV0dXJuIEVycihGYWJyaWNDb25maWdFcnJvcjo6 RmFicmljSWRNaXNtYXRjaCk7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBzZWxmLm5vZGVz Lmluc2VydChub2RlLmlkKCkubm9kZV9pZCgpLmNsb25lKCksIG5vZGUuaW50bygpKTsKPiArCj4g KyAgICAgICAgT2soKCkpCj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIEdldCBhIHJlZmVyZW5jZSB0 byB0aGUgbm9kZSB3aXRoIHRoZSBwYXNzZWQgbm9kZV9pZC4gUmV0dXJuIGFuIGVycm9yIGlmIHRo ZSBub2RlIGRvZXNuJ3QgZXhpc3QuCj4gKyAgICBmbiBnZXRfbm9kZSgmc2VsZiwgaWQ6ICZOb2Rl SWQpIC0+IFJlc3VsdDwmTm9kZSwgRmFicmljQ29uZmlnRXJyb3I+IHsKPiArICAgICAgICBzZWxm Lm5vZGVzLmdldChpZCkub2tfb3JfZWxzZSh8fCB7Cj4gKyAgICAgICAgICAgIEZhYnJpY0NvbmZp Z0Vycm9yOjpOb2RlRG9lc05vdEV4aXN0KGlkLnRvX3N0cmluZygpLCBzZWxmLmZhYnJpYy5pZCgp LnRvX3N0cmluZygpKQo+ICsgICAgICAgIH0pCj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIEdldCBh IG11dGFibGUgcmVmZXJlbmNlIHRvIHRoZSBOb2RlIHdpdGggdGhlIHBhc3NlZCBub2RlX2lkLgo+ ICsgICAgZm4gZ2V0X25vZGVfbXV0KCZtdXQgc2VsZiwgaWQ6ICZOb2RlSWQpIC0+IFJlc3VsdDwm bXV0IE5vZGUsIEZhYnJpY0NvbmZpZ0Vycm9yPiB7Cj4gKyAgICAgICAgc2VsZi5ub2Rlcy5nZXRf bXV0KGlkKS5va19vcl9lbHNlKHx8IHsKPiArICAgICAgICAgICAgRmFicmljQ29uZmlnRXJyb3I6 Ok5vZGVEb2VzTm90RXhpc3QoaWQudG9fc3RyaW5nKCksIHNlbGYuZmFicmljLmlkKCkudG9fc3Ry aW5nKCkpCj4gKyAgICAgICAgfSkKPiArICAgIH0KPiArCj4gKyAgICAvLy8gUmVtb3ZlcyBhbmQg cmV0dXJucyBhIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5vZGVfaWQgZnJvbSB0aGlzIGVudHJ5 Lgo+ICsgICAgLy8vCj4gKyAgICAvLy8gIyBFcnJvcnMKPiArICAgIC8vLyBSZXR1cm5zIGBGYWJy aWNDb25maWdFcnJvcjo6Tm9kZURvZXNOb3RFeGlzdGAgaWYgbm8gbm9kZSB3aXRoIHRoZSBnaXZl biBub2RlX2lkIGV4aXN0cy4KPiArICAgIGZuIGRlbGV0ZV9ub2RlKCZtdXQgc2VsZiwgaWQ6ICZO b2RlSWQpIC0+IFJlc3VsdDxOb2RlLCBGYWJyaWNDb25maWdFcnJvcj4gewo+ICsgICAgICAgIHNl bGYubm9kZXMucmVtb3ZlKGlkKS5va19vcl9lbHNlKHx8IHsKPiArICAgICAgICAgICAgRmFicmlj Q29uZmlnRXJyb3I6Ok5vZGVEb2VzTm90RXhpc3QoaWQudG9fc3RyaW5nKCksIHNlbGYuZmFicmlj LmlkKCkudG9fc3RyaW5nKCkpCj4gKyAgICAgICAgfSkKPiArICAgIH0KPiArCj4gKyAgICAvLy8g R2V0IGVudHJ5IGFzIGEgKEZhYnJpYywgVmVjPE5vZGU+KSBwYWlyLiBUaGlzIGNvbnN1bWVzIHRo ZSBFbnRyeS4KPiArICAgIGZuIGludG9fcGFpcihzZWxmKSAtPiAoRmFicmljLCBWZWM8Tm9kZT4p IHsKPiArICAgICAgICAoc2VsZi5mYWJyaWMsIHNlbGYubm9kZXMuaW50b192YWx1ZXMoKS5jb2xs ZWN0KCkpCj4gKyAgICB9Cj4gK30KPiArCj4gK2ltcGwgRW50cnk8T3BlbmZhYnJpY1Byb3BlcnRp ZXMsIE9wZW5mYWJyaWNOb2RlUHJvcGVydGllcz4gewo+ICsgICAgLy8vIEdldCB0aGUgT3BlbkZh YnJpYyBmYWJyaWMgY29uZmlnLgo+ICsgICAgLy8vCj4gKyAgICAvLy8gVGhpcyBtZXRob2QgaXMg aW1wbGVtZW50ZWQgZm9yIFtFbnRyeTxPcGVuZmFicmljUHJvcGVydGllcywgT3BlbmZhYnJpY05v ZGVQcm9wZXJ0aWVzPl0sCj4gKyAgICAvLy8gc28gaXQgaXMgZ3VhcmFudGVlZCB0aGF0IGEgW0Zh YnJpY1NlY3Rpb248T3BlbmZhYnJpY1Byb3BlcnRpZXM+XSBpcyByZXR1cm5lZC4KPiArICAgIHB1 YiBmbiBmYWJyaWNfc2VjdGlvbigmc2VsZikgLT4gJkZhYnJpY1NlY3Rpb248T3BlbmZhYnJpY1By b3BlcnRpZXM+IHsKPiArICAgICAgICBpZiBsZXQgRmFicmljOjpPcGVuZmFicmljKHNlY3Rpb24p ID0gJnNlbGYuZmFicmljIHsKPiArICAgICAgICAgICAgcmV0dXJuIHNlY3Rpb247Cj4gKyAgICAg ICAgfQo+ICsKPiArICAgICAgICB1bnJlYWNoYWJsZSEoKTsKPiArICAgIH0KPiArCj4gKyAgICAv Ly8gR2V0IHRoZSBPcGVuRmFicmljIG5vZGUgY29uZmlnIGZvciB0aGUgZ2l2ZW4gbm9kZV9pZC4K PiArICAgIC8vLwo+ICsgICAgLy8vIFRoaXMgbWV0aG9kIGlzIGltcGxlbWVudGVkIGZvciBbRW50 cnk8T3BlbmZhYnJpY1Byb3BlcnRpZXMsIE9wZW5mYWJyaWNOb2RlUHJvcGVydGllcz5dLAo+ICsg ICAgLy8vIHNvIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCBhIFtOb2RlU2VjdGlvbjxPcGVuZmFicmlj Tm9kZVByb3BlcnRpZXM+XSBpcyByZXR1cm5lZC4KPiArICAgIC8vLyBBbiBlcnJvciBpcyByZXR1 cm5lZCBpZiB0aGUgbm9kZSBpcyBub3QgZm91bmQuCj4gKyAgICBwdWIgZm4gbm9kZV9zZWN0aW9u KAo+ICsgICAgICAgICZzZWxmLAo+ICsgICAgICAgIGlkOiAmTm9kZUlkLAo+ICsgICAgKSAtPiBS ZXN1bHQ8Jk5vZGVTZWN0aW9uPE9wZW5mYWJyaWNOb2RlUHJvcGVydGllcz4sIEZhYnJpY0NvbmZp Z0Vycm9yPiB7Cj4gKyAgICAgICAgaWYgbGV0IE5vZGU6Ok9wZW5mYWJyaWMoc2VjdGlvbikgPSBz ZWxmLmdldF9ub2RlKGlkKT8gewo+ICsgICAgICAgICAgICByZXR1cm4gT2soc2VjdGlvbik7Cj4g KyAgICAgICAgfQo+ICsKPiArICAgICAgICB1bnJlYWNoYWJsZSEoKTsKPiArICAgIH0KPiArfQo+ ICsKPiAraW1wbCBFbnRyeTxPc3BmUHJvcGVydGllcywgT3NwZk5vZGVQcm9wZXJ0aWVzPiB7Cj4g KyAgICAvLy8gR2V0IHRoZSBPU1BGIGZhYnJpYyBjb25maWcuCj4gKyAgICAvLy8KPiArICAgIC8v LyBUaGlzIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBmb3IgW0VudHJ5PE9zcGZQcm9wZXJ0aWVzLCBP c3BmTm9kZVByb3BlcnRpZXM+XSwKPiArICAgIC8vLyBzbyBpdCBpcyBndWFyYW50ZWVkIHRoYXQg YSBbRmFicmljU2VjdGlvbjxPc3BmUHJvcGVydGllcz5dIGlzIHJldHVybmVkLgo+ICsgICAgcHVi IGZuIGZhYnJpY19zZWN0aW9uKCZzZWxmKSAtPiAmRmFicmljU2VjdGlvbjxPc3BmUHJvcGVydGll cz4gewo+ICsgICAgICAgIGlmIGxldCBGYWJyaWM6Ok9zcGYoc2VjdGlvbikgPSAmc2VsZi5mYWJy aWMgewo+ICsgICAgICAgICAgICByZXR1cm4gc2VjdGlvbjsKPiArICAgICAgICB9Cj4gKwo+ICsg ICAgICAgIHVucmVhY2hhYmxlISgpOwo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBHZXQgdGhlIE9T UEYgbm9kZSBjb25maWcgZm9yIHRoZSBnaXZlbiBub2RlX2lkLgo+ICsgICAgLy8vCj4gKyAgICAv Ly8gVGhpcyBtZXRob2QgaXMgaW1wbGVtZW50ZWQgZm9yIFtFbnRyeTxPc3BmUHJvcGVydGllcywg T3NwZk5vZGVQcm9wZXJ0aWVzPl0sCj4gKyAgICAvLy8gc28gaXQgaXMgZ3VhcmFudGVlZCB0aGF0 IGEgW05vZGVTZWN0aW9uPE9zcGZOb2RlUHJvcGVydGllcz5dIGlzIHJldHVybmVkLgo+ICsgICAg Ly8vIEFuIGVycm9yIGlzIHJldHVybmVkIGlmIHRoZSBub2RlIGlzIG5vdCBmb3VuZC4KPiArICAg IHB1YiBmbiBub2RlX3NlY3Rpb24oCj4gKyAgICAgICAgJnNlbGYsCj4gKyAgICAgICAgaWQ6ICZO b2RlSWQsCj4gKyAgICApIC0+IFJlc3VsdDwmTm9kZVNlY3Rpb248T3NwZk5vZGVQcm9wZXJ0aWVz PiwgRmFicmljQ29uZmlnRXJyb3I+IHsKPiArICAgICAgICBpZiBsZXQgTm9kZTo6T3NwZihzZWN0 aW9uKSA9IHNlbGYuZ2V0X25vZGUoaWQpPyB7Cj4gKyAgICAgICAgICAgIHJldHVybiBPayhzZWN0 aW9uKTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHVucmVhY2hhYmxlISgpOwo+ICsgICAg fQo+ICt9Cj4gKwo+ICsvLy8gQWxsIHBvc3NpYmxlIGVudHJpZXMgaW4gYSBbYEZhYnJpY0NvbmZp Z2BdLgo+ICsvLy8KPiArLy8vIEl0IHV0aWxpemVzIHRoZSBbYEVudHJ5YF0gc3RydWN0IHRvIHZh bGlkYXRlIHByb3BlciBjb21iaW5hdGlvbnMgb2YgW2BGYWJyaWNTZWN0aW9uYF0gYW5kCj4gKy8v LyBbYE5vZGVTZWN0aW9uYF0uCj4gKyNbZGVyaXZlKERlYnVnLCBDbG9uZSwgU2VyaWFsaXplLCBE ZXNlcmlhbGl6ZSwgSGFzaCldCj4gK3B1YiBlbnVtIEZhYnJpY0VudHJ5IHsKPiArICAgIE9wZW5m YWJyaWMoRW50cnk8T3BlbmZhYnJpY1Byb3BlcnRpZXMsIE9wZW5mYWJyaWNOb2RlUHJvcGVydGll cz4pLAo+ICsgICAgT3NwZihFbnRyeTxPc3BmUHJvcGVydGllcywgT3NwZk5vZGVQcm9wZXJ0aWVz PiksCj4gK30KPiArCj4gK2ltcGwgRmFicmljRW50cnkgewo+ICsgICAgLy8vIEFkZHMgYSBub2Rl IHRvIHRoZSBmYWJyaWMgZW50cnkuCj4gKyAgICAvLy8gVGhlIG5vZGUgbXVzdCBtYXRjaCB0aGUg cHJvdG9jb2wgdHlwZSBvZiB0aGUgZmFicmljIGVudHJ5Lgo+ICsgICAgcHViIGZuIGFkZF9ub2Rl KCZtdXQgc2VsZiwgbm9kZTogTm9kZSkgLT4gUmVzdWx0PCgpLCBGYWJyaWNDb25maWdFcnJvcj4g ewo+ICsgICAgICAgIG1hdGNoIChzZWxmLCBub2RlKSB7Cj4gKyAgICAgICAgICAgIChGYWJyaWNF bnRyeTo6T3BlbmZhYnJpYyhlbnRyeSksIE5vZGU6Ok9wZW5mYWJyaWMobm9kZV9zZWN0aW9uKSkg PT4gewo+ICsgICAgICAgICAgICAgICAgZW50cnkuYWRkX25vZGUobm9kZV9zZWN0aW9uKQo+ICsg ICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIChGYWJyaWNFbnRyeTo6T3NwZihlbnRyeSksIE5v ZGU6Ok9zcGYobm9kZV9zZWN0aW9uKSkgPT4gZW50cnkuYWRkX25vZGUobm9kZV9zZWN0aW9uKSwK PiArICAgICAgICAgICAgXyA9PiBFcnIoRmFicmljQ29uZmlnRXJyb3I6OlByb3RvY29sTWlzbWF0 Y2gpLAo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICAvLy8gR2V0IGEgcmVmZXJlbmNl IHRvIGEgTm9kZSBzcGVjaWZpZWQgYnkgdGhlIG5vZGVfaWQuIFJldHVybnMgYW4gZXJyb3IgaWYg dGhlIG5vZGUgaXMgbm90Cj4gKyAgICAvLy8gZm91bmQuCj4gKyAgICBwdWIgZm4gZ2V0X25vZGUo JnNlbGYsIGlkOiAmTm9kZUlkKSAtPiBSZXN1bHQ8Jk5vZGUsIEZhYnJpY0NvbmZpZ0Vycm9yPiB7 Cj4gKyAgICAgICAgbWF0Y2ggc2VsZiB7Cj4gKyAgICAgICAgICAgIEZhYnJpY0VudHJ5OjpPcGVu ZmFicmljKGVudHJ5KSA9PiBlbnRyeS5nZXRfbm9kZShpZCksCj4gKyAgICAgICAgICAgIEZhYnJp Y0VudHJ5OjpPc3BmKGVudHJ5KSA9PiBlbnRyeS5nZXRfbm9kZShpZCksCj4gKyAgICAgICAgfQo+ ICsgICAgfQo+ICsKPiArICAgIC8vLyBHZXQgYSBtdXRhYmxlIHJlZmVyZW5jZSB0byBhIE5vZGUg c3BlY2lmaWVkIGJ5IHRoZSBub2RlX2lkLiBSZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBub2RlIGlz IG5vdAo+ICsgICAgLy8vIGZvdW5kLgo+ICsgICAgcHViIGZuIGdldF9ub2RlX211dCgmbXV0IHNl bGYsIGlkOiAmTm9kZUlkKSAtPiBSZXN1bHQ8Jm11dCBOb2RlLCBGYWJyaWNDb25maWdFcnJvcj4g ewo+ICsgICAgICAgIG1hdGNoIHNlbGYgewo+ICsgICAgICAgICAgICBGYWJyaWNFbnRyeTo6T3Bl bmZhYnJpYyhlbnRyeSkgPT4gZW50cnkuZ2V0X25vZGVfbXV0KGlkKSwKPiArICAgICAgICAgICAg RmFicmljRW50cnk6Ok9zcGYoZW50cnkpID0+IGVudHJ5LmdldF9ub2RlX211dChpZCksCj4gKyAg ICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBVcGRhdGUgdGhlIE5vZGUgd2l0aCB0aGUg c3BlY2lmaWVkIG5vZGVfaWQgdXNpbmcgdGhlIHBhc3NlZCBbTm9kZVVwZGF0ZXJdLgo+ICsgICAg cHViIGZuIHVwZGF0ZV9ub2RlKAo+ICsgICAgICAgICZtdXQgc2VsZiwKPiArICAgICAgICBpZDog Jk5vZGVJZCwKPiArICAgICAgICB1cGRhdGVyOiBOb2RlVXBkYXRlciwKPiArICAgICkgLT4gUmVz dWx0PCgpLCBGYWJyaWNDb25maWdFcnJvcj4gewo+ICsgICAgICAgIGxldCBub2RlID0gc2VsZi5n ZXRfbm9kZV9tdXQoaWQpPzsKPiArCj4gKyAgICAgICAgbWF0Y2ggKG5vZGUsIHVwZGF0ZXIpIHsK PiArICAgICAgICAgICAgKE5vZGU6Ok9wZW5mYWJyaWMobm9kZV9zZWN0aW9uKSwgTm9kZVVwZGF0 ZXI6Ok9wZW5mYWJyaWModXBkYXRlcikpID0+IHsKPiArICAgICAgICAgICAgICAgIGxldCBOb2Rl RGF0YVVwZGF0ZXI6OjwKPiArICAgICAgICAgICAgICAgICAgICBPcGVuZmFicmljTm9kZVByb3Bl cnRpZXNVcGRhdGVyLAo+ICsgICAgICAgICAgICAgICAgICAgIE9wZW5mYWJyaWNOb2RlRGVsZXRh YmxlUHJvcGVydGllcywKPiArICAgICAgICAgICAgICAgID4gewo+ICsgICAgICAgICAgICAgICAg ICAgIGlwLAo+ICsgICAgICAgICAgICAgICAgICAgIGlwNiwKPiArICAgICAgICAgICAgICAgICAg ICBwcm9wZXJ0aWVzOiBPcGVuZmFicmljTm9kZVByb3BlcnRpZXNVcGRhdGVyIHsgaW50ZXJmYWNl cyB9LAo+ICsgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSwKPiArICAgICAgICAgICAgICAgIH0g PSB1cGRhdGVyOwo+ICsKPiArICAgICAgICAgICAgICAgIGlmIGxldCBTb21lKGlwKSA9IGlwIHsK PiArICAgICAgICAgICAgICAgICAgICBub2RlX3NlY3Rpb24uaXAgPSBTb21lKGlwKTsKPiArICAg ICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICBpZiBsZXQgU29tZShpcCkgPSBp cDYgewo+ICsgICAgICAgICAgICAgICAgICAgIG5vZGVfc2VjdGlvbi5pcDYgPSBTb21lKGlwKTsK PiArICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICBpZiBsZXQgU29tZShp bnRlcmZhY2VzKSA9IGludGVyZmFjZXMgewo+ICsgICAgICAgICAgICAgICAgICAgIG5vZGVfc2Vj dGlvbi5wcm9wZXJ0aWVzLmludGVyZmFjZXMgPSBpbnRlcmZhY2VzOwo+ICsgICAgICAgICAgICAg ICAgfQo+ICsKPiArICAgICAgICAgICAgICAgIGZvciBwcm9wZXJ0eSBpbiBkZWxldGUgewo+ICsg ICAgICAgICAgICAgICAgICAgIG1hdGNoIHByb3BlcnR5IHsKPiArICAgICAgICAgICAgICAgICAg ICAgICAgTm9kZURlbGV0YWJsZVByb3BlcnRpZXM6OklwID0+IG5vZGVfc2VjdGlvbi5pcCA9IE5v bmUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVEZWxldGFibGVQcm9wZXJ0aWVzOjpJ cDYgPT4gbm9kZV9zZWN0aW9uLmlwNiA9IE5vbmUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg IE5vZGVEZWxldGFibGVQcm9wZXJ0aWVzOjpQcm90b2NvbCgKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE9wZW5mYWJyaWNOb2RlRGVsZXRhYmxlUHJvcGVydGllczo6SW50ZXJmYWNlcywK PiArICAgICAgICAgICAgICAgICAgICAgICAgKSA9PiBub2RlX3NlY3Rpb24ucHJvcGVydGllcy5p bnRlcmZhY2VzID0gVmVjOjpuZXcoKSwKPiArICAgICAgICAgICAgICAgICAgICB9Cj4gKyAgICAg ICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICAgT2soKCkpCj4gKyAgICAgICAgICAg IH0KPiArICAgICAgICAgICAgKE5vZGU6Ok9zcGYobm9kZV9zZWN0aW9uKSwgTm9kZVVwZGF0ZXI6 Ok9zcGYodXBkYXRlcikpID0+IHsKPiArICAgICAgICAgICAgICAgIGxldCBOb2RlRGF0YVVwZGF0 ZXI6OjxPc3BmTm9kZVByb3BlcnRpZXNVcGRhdGVyLCBPc3BmTm9kZURlbGV0YWJsZVByb3BlcnRp ZXM+IHsKPiArICAgICAgICAgICAgICAgICAgICBpcCwKPiArICAgICAgICAgICAgICAgICAgICBp cDYsCj4gKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogT3NwZk5vZGVQcm9wZXJ0aWVz VXBkYXRlciB7IGludGVyZmFjZXMgfSwKPiArICAgICAgICAgICAgICAgICAgICBkZWxldGUsCj4g KyAgICAgICAgICAgICAgICB9ID0gdXBkYXRlcjsKPiArCj4gKyAgICAgICAgICAgICAgICBpZiBs ZXQgU29tZShpcCkgPSBpcCB7Cj4gKyAgICAgICAgICAgICAgICAgICAgbm9kZV9zZWN0aW9uLmlw ID0gU29tZShpcCk7Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICAg aWYgbGV0IFNvbWUoaXApID0gaXA2IHsKPiArICAgICAgICAgICAgICAgICAgICBub2RlX3NlY3Rp b24uaXA2ID0gU29tZShpcCk7Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAg ICAgICAgaWYgbGV0IFNvbWUoaW50ZXJmYWNlcykgPSBpbnRlcmZhY2VzIHsKPiArICAgICAgICAg ICAgICAgICAgICBub2RlX3NlY3Rpb24ucHJvcGVydGllcy5pbnRlcmZhY2VzID0gaW50ZXJmYWNl czsKPiArICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICBmb3IgcHJvcGVy dHkgaW4gZGVsZXRlIHsKPiArICAgICAgICAgICAgICAgICAgICBtYXRjaCBwcm9wZXJ0eSB7Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVEZWxldGFibGVQcm9wZXJ0aWVzOjpJcCA9PiBu b2RlX3NlY3Rpb24uaXAgPSBOb25lLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBOb2RlRGVs ZXRhYmxlUHJvcGVydGllczo6SXA2ID0+IG5vZGVfc2VjdGlvbi5pcDYgPSBOb25lLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICBOb2RlRGVsZXRhYmxlUHJvcGVydGllczo6UHJvdG9jb2woCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPc3BmTm9kZURlbGV0YWJsZVByb3BlcnRpZXM6 OkludGVyZmFjZXMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICkgPT4gbm9kZV9zZWN0aW9u LnByb3BlcnRpZXMuaW50ZXJmYWNlcyA9IFZlYzo6bmV3KCksCj4gKyAgICAgICAgICAgICAgICAg ICAgfQo+ICsgICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgIE9rKCgpKQo+ ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIF8gPT4gRXJyKEZhYnJpY0NvbmZpZ0Vycm9y OjpQcm90b2NvbE1pc21hdGNoKSwKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgLy8v IEdldCBhbiBpdGVyYXRvciBvdmVyIGFsbCB0aGUgbm9kZXMgaW4gdGhpcyBmYWJyaWMuCj4gKyAg ICBwdWIgZm4gbm9kZXMoJnNlbGYpIC0+IGltcGwgSXRlcmF0b3I8SXRlbSA9ICgmTm9kZUlkLCAm Tm9kZSk+ICsgJ18gewo+ICsgICAgICAgIG1hdGNoIHNlbGYgewo+ICsgICAgICAgICAgICBGYWJy aWNFbnRyeTo6T3BlbmZhYnJpYyhlbnRyeSkgPT4gZW50cnkubm9kZXMuaXRlcigpLAo+ICsgICAg ICAgICAgICBGYWJyaWNFbnRyeTo6T3NwZihlbnRyeSkgPT4gZW50cnkubm9kZXMuaXRlcigpLAo+ ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICAvLy8gRGVsZXRlIHRoZSBub2RlIHNwZWNp ZmllZCB3aXRoIHRoZSBub2RlX2lkLiBSZXR1cm5zIGFuIGVycm9yIGlmIGl0IGRvZXNuJ3QgZXhp c3QuCj4gKyAgICBwdWIgZm4gZGVsZXRlX25vZGUoJm11dCBzZWxmLCBpZDogJk5vZGVJZCkgLT4g UmVzdWx0PE5vZGUsIEZhYnJpY0NvbmZpZ0Vycm9yPiB7Cj4gKyAgICAgICAgbWF0Y2ggc2VsZiB7 Cj4gKyAgICAgICAgICAgIEZhYnJpY0VudHJ5OjpPcGVuZmFicmljKGVudHJ5KSA9PiBlbnRyeS5k ZWxldGVfbm9kZShpZCksCj4gKyAgICAgICAgICAgIEZhYnJpY0VudHJ5OjpPc3BmKGVudHJ5KSA9 PiBlbnRyeS5kZWxldGVfbm9kZShpZCksCj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAg IC8vLyBDb25zdW1lIHRoaXMgZW50cnkgYW5kIHJldHVybiBhIChGYWJyaWMsIFZlYzxOb2RlPikg cGFpci4gVGhpcyBpcyB1c2VkIHRvIHdyaXRlIHRvIHRoZQo+ICsgICAgLy8vIHNlY3Rpb24tY29u ZmlnIGZpbGUuCj4gKyAgICBwdWIgZm4gaW50b19zZWN0aW9uX2NvbmZpZyhzZWxmKSAtPiAoRmFi cmljLCBWZWM8Tm9kZT4pIHsKPiArICAgICAgICBtYXRjaCBzZWxmIHsKPiArICAgICAgICAgICAg RmFicmljRW50cnk6Ok9wZW5mYWJyaWMoZW50cnkpID0+IGVudHJ5LmludG9fcGFpcigpLAo+ICsg ICAgICAgICAgICBGYWJyaWNFbnRyeTo6T3NwZihlbnRyeSkgPT4gZW50cnkuaW50b19wYWlyKCks Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBHZXQgYSByZWZlcmVuY2UgdG8g dGhlIEZhYnJpYy4KPiArICAgIHB1YiBmbiBmYWJyaWMoJnNlbGYpIC0+ICZGYWJyaWMgewo+ICsg ICAgICAgIG1hdGNoIHNlbGYgewo+ICsgICAgICAgICAgICBGYWJyaWNFbnRyeTo6T3BlbmZhYnJp YyhlbnRyeSkgPT4gJmVudHJ5LmZhYnJpYywKPiArICAgICAgICAgICAgRmFicmljRW50cnk6Ok9z cGYoZW50cnkpID0+ICZlbnRyeS5mYWJyaWMsCj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiAr ICAgIC8vLyBHZXQgYSBtdXRhYmxlIHJlZmVyZW5jZSB0byB0aGUgRmFicmljLgo+ICsgICAgcHVi IGZuIGZhYnJpY19tdXQoJm11dCBzZWxmKSAtPiAmbXV0IEZhYnJpYyB7Cj4gKyAgICAgICAgbWF0 Y2ggc2VsZiB7Cj4gKyAgICAgICAgICAgIEZhYnJpY0VudHJ5OjpPcGVuZmFicmljKGVudHJ5KSA9 PiAmbXV0IGVudHJ5LmZhYnJpYywKPiArICAgICAgICAgICAgRmFicmljRW50cnk6Ok9zcGYoZW50 cnkpID0+ICZtdXQgZW50cnkuZmFicmljLAo+ICsgICAgICAgIH0KPiArICAgIH0KPiArfQo+ICsK PiAraW1wbCBGcm9tPEZhYnJpYz4gZm9yIEZhYnJpY0VudHJ5IHsKPiArICAgIGZuIGZyb20oZmFi cmljOiBGYWJyaWMpIC0+IFNlbGYgewo+ICsgICAgICAgIG1hdGNoIGZhYnJpYyB7Cj4gKyAgICAg ICAgICAgIEZhYnJpYzo6T3BlbmZhYnJpYyhmYWJyaWNfc2VjdGlvbikgPT4gewo+ICsgICAgICAg ICAgICAgICAgRmFicmljRW50cnk6Ok9wZW5mYWJyaWMoRW50cnk6Om5ldyhmYWJyaWNfc2VjdGlv bikpCj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgRmFicmljOjpPc3BmKGZhYnJpY19z ZWN0aW9uKSA9PiBGYWJyaWNFbnRyeTo6T3NwZihFbnRyeTo6bmV3KGZhYnJpY19zZWN0aW9uKSks Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICt9Cj4gKwo+ICsvLy8gQSBjb21wbGV0ZSBTRE4gZmFi cmljIGNvbmZpZ3VyYXRpb24uCj4gKy8vLwo+ICsvLy8gVGhpcyBzdHJ1Y3QgY29udGFpbnMgdGhl IHdob2xlIGZhYnJpYyBjb25maWd1cmF0aW9uIGluIGEgdHJlZS1saWtlIHN0cnVjdHVyZSAoZmFi cmljcyAtPiBub2Rlcwo+ICsvLy8gLT4gaW50ZXJmYWNlcykuCj4gKyNbZGVyaXZlKERlZmF1bHQs IERlYnVnLCBTZXJpYWxpemUsIERlc2VyaWFsaXplLCBDbG9uZSwgSGFzaCldCj4gK3B1YiBzdHJ1 Y3QgRmFicmljQ29uZmlnIHsKPiArICAgIGZhYnJpY3M6IEJUcmVlTWFwPEZhYnJpY0lkLCBGYWJy aWNFbnRyeT4sCj4gK30KPiArCj4gK2ltcGwgRGVyZWYgZm9yIEZhYnJpY0NvbmZpZyB7Cj4gKyAg ICB0eXBlIFRhcmdldCA9IEJUcmVlTWFwPEZhYnJpY0lkLCBGYWJyaWNFbnRyeT47Cj4gKwo+ICsg ICAgZm4gZGVyZWYoJnNlbGYpIC0+ICZTZWxmOjpUYXJnZXQgewo+ICsgICAgICAgICZzZWxmLmZh YnJpY3MKPiArICAgIH0KPiArfQo+ICsKPiAraW1wbCBGYWJyaWNDb25maWcgewo+ICsgICAgLy8v IEFkZCBhIGZhYnJpYyB0byB0aGUgW0ZhYnJpY0NvbmZpZ10uCj4gKyAgICAvLy8KPiArICAgIC8v LyBSZXR1cm5zIGFuIGVycm9yIGlmIGEgZmFicmljIHdpdGggdGhlIHNhbWUgbmFtZSBleGlzdHMu Cj4gKyAgICBwdWIgZm4gYWRkX2ZhYnJpYygmbXV0IHNlbGYsIGZhYnJpYzogRmFicmljKSAtPiBS ZXN1bHQ8KCksIEZhYnJpY0NvbmZpZ0Vycm9yPiB7Cj4gKyAgICAgICAgaWYgc2VsZi5mYWJyaWNz LmNvbnRhaW5zX2tleShmYWJyaWMuaWQoKSkgewo+ICsgICAgICAgICAgICByZXR1cm4gRXJyKEZh YnJpY0NvbmZpZ0Vycm9yOjpEdXBsaWNhdGVGYWJyaWMoZmFicmljLmlkKCkudG9fc3RyaW5nKCkp KTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHNlbGYuZmFicmljcy5pbnNlcnQoZmFicmlj LmlkKCkuY2xvbmUoKSwgZmFicmljLmludG8oKSk7Cj4gKwo+ICsgICAgICAgIE9rKCgpKQo+ICsg ICAgfQo+ICsKPiArICAgIC8vLyBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIGZhYnJpYyB3aXRoIHRo ZSBzcGVjaWZpZWQgZmFicmljX2lkLgo+ICsgICAgcHViIGZuIGdldF9mYWJyaWMoJnNlbGYsIGlk OiAmRmFicmljSWQpIC0+IFJlc3VsdDwmRmFicmljRW50cnksIEZhYnJpY0NvbmZpZ0Vycm9yPiB7 Cj4gKyAgICAgICAgc2VsZi5mYWJyaWNzCj4gKyAgICAgICAgICAgIC5nZXQoaWQpCj4gKyAgICAg ICAgICAgIC5va19vcl9lbHNlKHx8IEZhYnJpY0NvbmZpZ0Vycm9yOjpGYWJyaWNEb2VzTm90RXhp c3QoaWQudG9fc3RyaW5nKCkpKQo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBHZXQgYSBtdXRhYmxl IHJlZmVyZW5jZSB0byB0aGUgZmFicmljIHdpdGggdGhlIHNwZWNpZmllZCBmYWJyaWNfaWQuCj4g KyAgICBwdWIgZm4gZ2V0X2ZhYnJpY19tdXQoJm11dCBzZWxmLCBpZDogJkZhYnJpY0lkKSAtPiBS ZXN1bHQ8Jm11dCBGYWJyaWNFbnRyeSwgRmFicmljQ29uZmlnRXJyb3I+IHsKPiArICAgICAgICBz ZWxmLmZhYnJpY3MKPiArICAgICAgICAgICAgLmdldF9tdXQoaWQpCj4gKyAgICAgICAgICAgIC5v a19vcl9lbHNlKHx8IEZhYnJpY0NvbmZpZ0Vycm9yOjpGYWJyaWNEb2VzTm90RXhpc3QoaWQudG9f c3RyaW5nKCkpKQo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBEZWxldGUgYSBmYWJyaWMgd2l0aCB0 aGUgc3BlY2lmaWVkIGZhYnJpY19pZCBmcm9tIHRoZSBbRmFicmljQ29uZmlnXS4KPiArICAgIHB1 YiBmbiBkZWxldGVfZmFicmljKCZtdXQgc2VsZiwgaWQ6ICZGYWJyaWNJZCkgLT4gUmVzdWx0PEZh YnJpY0VudHJ5LCBGYWJyaWNDb25maWdFcnJvcj4gewo+ICsgICAgICAgIHNlbGYuZmFicmljcwo+ ICsgICAgICAgICAgICAucmVtb3ZlKGlkKQo+ICsgICAgICAgICAgICAub2tfb3JfZWxzZSh8fCBG YWJyaWNDb25maWdFcnJvcjo6RmFicmljRG9lc05vdEV4aXN0KGlkLnRvX3N0cmluZygpKSkKPiAr ICAgIH0KPiArCj4gKyAgICAvLy8gVXBkYXRlIHRoZSBmYWJyaWMgc3BlY2lmaWVkIGJ5IHRoZSBm YWJyaWNfaWQgdXNpbmcgdGhlIFtGYWJyaWNVcGRhdGVyXS4KPiArICAgIHB1YiBmbiB1cGRhdGVf ZmFicmljKAo+ICsgICAgICAgICZtdXQgc2VsZiwKPiArICAgICAgICBpZDogJkZhYnJpY0lkLAo+ ICsgICAgICAgIHVwZGF0ZXI6IEZhYnJpY1VwZGF0ZXIsCj4gKyAgICApIC0+IFJlc3VsdDwoKSwg RmFicmljQ29uZmlnRXJyb3I+IHsKPiArICAgICAgICBsZXQgZmFicmljID0gc2VsZi5nZXRfZmFi cmljX211dChpZCk/LmZhYnJpY19tdXQoKTsKPiArCj4gKyAgICAgICAgbWF0Y2ggKGZhYnJpYywg dXBkYXRlcikgewo+ICsgICAgICAgICAgICAoRmFicmljOjpPcGVuZmFicmljKGZhYnJpY19zZWN0 aW9uKSwgRmFicmljVXBkYXRlcjo6T3BlbmZhYnJpYyh1cGRhdGVyKSkgPT4gewo+ICsgICAgICAg ICAgICAgICAgbGV0IEZhYnJpY1NlY3Rpb25VcGRhdGVyOjo8Cj4gKyAgICAgICAgICAgICAgICAg ICAgT3BlbmZhYnJpY1Byb3BlcnRpZXNVcGRhdGVyLAo+ICsgICAgICAgICAgICAgICAgICAgIE9w ZW5mYWJyaWNEZWxldGFibGVQcm9wZXJ0aWVzLAo+ICsgICAgICAgICAgICAgICAgPiB7Cj4gKyAg ICAgICAgICAgICAgICAgICAgaXBfcHJlZml4LAo+ICsgICAgICAgICAgICAgICAgICAgIGlwNl9w cmVmaXgsCj4gKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoKPiArICAgICAgICAgICAg ICAgICAgICAgICAgT3BlbmZhYnJpY1Byb3BlcnRpZXNVcGRhdGVyIHsKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGhlbGxvX2ludGVydmFsLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY3NucF9pbnRlcnZhbCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgfSwKPiArICAg ICAgICAgICAgICAgICAgICBkZWxldGUsCj4gKyAgICAgICAgICAgICAgICB9ID0gdXBkYXRlcjsK PiArCj4gKyAgICAgICAgICAgICAgICBpZiBsZXQgU29tZShwcmVmaXgpID0gaXBfcHJlZml4IHsK PiArICAgICAgICAgICAgICAgICAgICBmYWJyaWNfc2VjdGlvbi5pcF9wcmVmaXggPSBTb21lKHBy ZWZpeCk7Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICAgaWYgbGV0 IFNvbWUocHJlZml4KSA9IGlwNl9wcmVmaXggewo+ICsgICAgICAgICAgICAgICAgICAgIGZhYnJp Y19zZWN0aW9uLmlwNl9wcmVmaXggPSBTb21lKHByZWZpeCk7Cj4gKyAgICAgICAgICAgICAgICB9 Cj4gKwo+ICsgICAgICAgICAgICAgICAgaWYgbGV0IFNvbWUoaGVsbG9faW50ZXJ2YWwpID0gaGVs bG9faW50ZXJ2YWwgewo+ICsgICAgICAgICAgICAgICAgICAgIGZhYnJpY19zZWN0aW9uLnByb3Bl cnRpZXMuaGVsbG9faW50ZXJ2YWwgPSBTb21lKGhlbGxvX2ludGVydmFsKTsKPiArICAgICAgICAg ICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICBpZiBsZXQgU29tZShjc25wX2ludGVydmFs KSA9IGNzbnBfaW50ZXJ2YWwgewo+ICsgICAgICAgICAgICAgICAgICAgIGZhYnJpY19zZWN0aW9u LnByb3BlcnRpZXMuY3NucF9pbnRlcnZhbCA9IFNvbWUoY3NucF9pbnRlcnZhbCk7Cj4gKyAgICAg ICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICAgZm9yIHByb3BlcnR5IGluIGRlbGV0 ZSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgbWF0Y2ggcHJvcGVydHkgewo+ICsgICAgICAgICAg ICAgICAgICAgICAgICBGYWJyaWNEZWxldGFibGVQcm9wZXJ0aWVzOjpJcFByZWZpeCA9PiB7Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWJyaWNfc2VjdGlvbi5pcF9wcmVmaXggPSBO b25lOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICAgICAg ICAgIEZhYnJpY0RlbGV0YWJsZVByb3BlcnRpZXM6OklwNlByZWZpeCA9PiB7Cj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmYWJyaWNfc2VjdGlvbi5pcDZfcHJlZml4ID0gTm9uZTsKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICAgICAgICAgICBGYWJy aWNEZWxldGFibGVQcm9wZXJ0aWVzOjpQcm90b2NvbCgKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE9wZW5mYWJyaWNEZWxldGFibGVQcm9wZXJ0aWVzOjpDc25wSW50ZXJ2YWwsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICkgPT4gZmFicmljX3NlY3Rpb24ucHJvcGVydGllcy5jc25w X2ludGVydmFsID0gTm9uZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgRmFicmljRGVsZXRh YmxlUHJvcGVydGllczo6UHJvdG9jb2woCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBP cGVuZmFicmljRGVsZXRhYmxlUHJvcGVydGllczo6SGVsbG9JbnRlcnZhbCwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgKSA9PiBmYWJyaWNfc2VjdGlvbi5wcm9wZXJ0aWVzLmhlbGxvX2ludGVy dmFsID0gTm9uZSwKPiArICAgICAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICB9 Cj4gKwo+ICsgICAgICAgICAgICAgICAgT2soKCkpCj4gKyAgICAgICAgICAgIH0KPiArICAgICAg ICAgICAgKEZhYnJpYzo6T3NwZihmYWJyaWNfc2VjdGlvbiksIEZhYnJpY1VwZGF0ZXI6Ok9zcGYo dXBkYXRlcikpID0+IHsKPiArICAgICAgICAgICAgICAgIGxldCBGYWJyaWNTZWN0aW9uVXBkYXRl cjo6PE9zcGZQcm9wZXJ0aWVzVXBkYXRlciwgT3NwZkRlbGV0YWJsZVByb3BlcnRpZXM+IHsKPiAr ICAgICAgICAgICAgICAgICAgICBpcF9wcmVmaXgsCj4gKyAgICAgICAgICAgICAgICAgICAgaXA2 X3ByZWZpeCwKPiArICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBPc3BmUHJvcGVydGll c1VwZGF0ZXIgeyBhcmVhIH0sCj4gKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlLAo+ICsgICAg ICAgICAgICAgICAgfSA9IHVwZGF0ZXI7Cj4gKwo+ICsgICAgICAgICAgICAgICAgaWYgbGV0IFNv bWUocHJlZml4KSA9IGlwX3ByZWZpeCB7Cj4gKyAgICAgICAgICAgICAgICAgICAgZmFicmljX3Nl Y3Rpb24uaXBfcHJlZml4ID0gU29tZShwcmVmaXgpOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsK PiArICAgICAgICAgICAgICAgIGlmIGxldCBTb21lKHByZWZpeCkgPSBpcDZfcHJlZml4IHsKPiAr ICAgICAgICAgICAgICAgICAgICBmYWJyaWNfc2VjdGlvbi5pcDZfcHJlZml4ID0gU29tZShwcmVm aXgpOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgIGlmIGxldCBT b21lKGFyZWEpID0gYXJlYSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgZmFicmljX3NlY3Rpb24u cHJvcGVydGllcy5hcmVhID0gYXJlYTsKPiArICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAg ICAgICAgICAgICBmb3IgcHJvcGVydHkgaW4gZGVsZXRlIHsKPiArICAgICAgICAgICAgICAgICAg ICBtYXRjaCBwcm9wZXJ0eSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIEZhYnJpY0RlbGV0 YWJsZVByb3BlcnRpZXM6OklwUHJlZml4ID0+IHsKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZhYnJpY19zZWN0aW9uLmlwX3ByZWZpeCA9IE5vbmU7Cj4gKyAgICAgICAgICAgICAgICAg ICAgICAgIH0KPiArICAgICAgICAgICAgICAgICAgICAgICAgRmFicmljRGVsZXRhYmxlUHJvcGVy dGllczo6SXA2UHJlZml4ID0+IHsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhYnJp Y19zZWN0aW9uLmlwNl9wcmVmaXggPSBOb25lOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICB9 Cj4gKyAgICAgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICAgfQo+ICsKPiArICAg ICAgICAgICAgICAgIE9rKCgpKQo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIF8gPT4g RXJyKEZhYnJpY0NvbmZpZ0Vycm9yOjpQcm90b2NvbE1pc21hdGNoKSwKPiArICAgICAgICB9Cj4g KyAgICB9Cj4gK30KPiAtLSAKPiAyLjM5LjUKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpwdmUtZGV2ZWwgbWFpbGluZyBsaXN0CnB2ZS1kZXZlbEBsaXN0 cy5wcm94bW94LmNvbQpodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9s aXN0aW5mby9wdmUtZGV2ZWwK