From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <pbs-devel-bounces@lists.proxmox.com>
Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9])
	by lore.proxmox.com (Postfix) with ESMTPS id 99E231FF16F
	for <inbox@lore.proxmox.com>; Tue, 15 Apr 2025 14:21:11 +0200 (CEST)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id 2BBEF775D;
	Tue, 15 Apr 2025 14:21:10 +0200 (CEST)
Date: Tue, 15 Apr 2025 14:20:35 +0200
From: Wolfgang Bumiller <w.bumiller@proxmox.com>
To: Maximiliano Sandoval <m.sandoval@proxmox.com>
Message-ID: <yyqjnapm4rgrl6mle3wtxl3xafhecxnkyjrdoa6f2bifjhccj5@q5kujnnpexo2>
References: <20250326144410.430616-1-m.sandoval@proxmox.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <20250326144410.430616-1-m.sandoval@proxmox.com>
X-SPAM-LEVEL: Spam detection results:  0
 AWL 0.080 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, proxmox.com]
Subject: Re: [pbs-devel] [PATCH proxmox] proxmox-client: add query builder
X-BeenThere: pbs-devel@lists.proxmox.com
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Proxmox Backup Server development discussion
 <pbs-devel.lists.proxmox.com>
List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pbs-devel>, 
 <mailto:pbs-devel-request@lists.proxmox.com?subject=unsubscribe>
List-Archive: <http://lists.proxmox.com/pipermail/pbs-devel/>
List-Post: <mailto:pbs-devel@lists.proxmox.com>
List-Help: <mailto:pbs-devel-request@lists.proxmox.com?subject=help>
List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel>, 
 <mailto:pbs-devel-request@lists.proxmox.com?subject=subscribe>
Reply-To: Proxmox Backup Server development discussion
 <pbs-devel@lists.proxmox.com>
Cc: pbs-devel@lists.proxmox.com
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: pbs-devel-bounces@lists.proxmox.com
Sender: "pbs-devel" <pbs-devel-bounces@lists.proxmox.com>

T24gV2VkLCBNYXIgMjYsIDIwMjUgYXQgMDM6NDQ6MTBQTSArMDEwMCwgTWF4aW1pbGlhbm8gU2Fu
ZG92YWwgd3JvdGU6Cj4gQSBiaWcgcHJvcG9ydGlvbiBvZiB0aGUgY29uc3VtZXJzIG9mIHRoaXMg
QVBJIHVzZSB0aGUgYGZvcm1hdCFgIG1hY3JvIHRvCj4gZGVmaW5lIHRoZSBiYXNlIG9mIHRoZSB1
cmwsIGhlbmNlIHdlIHVzZSBhIGBDb3c8J18sIHN0cj5gIG9uIHRoZQo+IGNvbnN0cnVjdG9yIHRv
IHByZXZlbnQgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbnMuCj4gCj4gQSBgcGVybC1hcGktcGF0aC1i
dWlsZGVyYCBmZWF0dXJlIHdhcyBhZGRlZCB0byBzYXRpc2Z5IHRoZSBuZWVkcyBvZgo+IHB2ZS1h
cGktdHlwZXMuCj4gCj4gU2lnbmVkLW9mZi1ieTogTWF4aW1pbGlhbm8gU2FuZG92YWwgPG0uc2Fu
ZG92YWxAcHJveG1veC5jb20+Cj4gLS0tCj4gCj4gVGhpcyBpcyBhIGZvbGxvdy11cCBvZiBbMV0u
IEkgd2lsbCBzZW5kIHRoZSBmb2xsb3ctdXBzIHNlcGFyYXRlbHkuCj4gCj4gRGlmZmVyZW5jZXMg
ZnJvbSB0aGUgUkZDOgo+ICAtIE1vcmUgZG9jcwo+ICAtIE1vcmUgdGVzdHMKPiAgLSBNb3ZlZCBp
bnRvIHByb3htb3gtY2xpZW50Cj4gCj4gWzFdIGh0dHBzOi8vbG9yZS5wcm94bW94LmNvbS9wZG0t
ZGV2ZWwvN3FoNWtjaG1yZzRybGF2a293cXg0NGppYW1jem5hcnhuNGtvbnh3dzI0emo3bXN1dXZA
Z3NocXByNGxkeHVpL1QvI3UKPiAKPiAgcHJveG1veC1jbGllbnQvQ2FyZ28udG9tbCAgICAgICAg
ICAgICAgfCAgIDUgKwo+ICBwcm94bW94LWNsaWVudC9zcmMvYXBpX3BhdGhfYnVpbGRlci5ycyB8
IDI0MiArKysrKysrKysrKysrKysrKysrKysrKysrCj4gIHByb3htb3gtY2xpZW50L3NyYy9saWIu
cnMgICAgICAgICAgICAgIHwgICA0ICsKPiAgMyBmaWxlcyBjaGFuZ2VkLCAyNTEgaW5zZXJ0aW9u
cygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgcHJveG1veC1jbGllbnQvc3JjL2FwaV9wYXRoX2J1
aWxkZXIucnMKPiAKPiBkaWZmIC0tZ2l0IGEvcHJveG1veC1jbGllbnQvQ2FyZ28udG9tbCBiL3By
b3htb3gtY2xpZW50L0NhcmdvLnRvbWwKPiBpbmRleCBmODkwNTAxZS4uMDI3ZmJlM2UgMTAwNjQ0
Cj4gLS0tIGEvcHJveG1veC1jbGllbnQvQ2FyZ28udG9tbAo+ICsrKyBiL3Byb3htb3gtY2xpZW50
L0NhcmdvLnRvbWwKPiBAQCAtMTQsNiArMTQsNyBAQCByZXBvc2l0b3J5LndvcmtzcGFjZSA9IHRy
dWUKPiAgYW55aG93LndvcmtzcGFjZSA9IHRydWUKPiAgaGV4LndvcmtzcGFjZSA9IHRydWUKPiAg
aHR0cC53b3Jrc3BhY2UgPSB0cnVlCj4gK3BlcmNlbnQtZW5jb2Rpbmcud29ya3NwYWNlID0gdHJ1
ZQo+ICBzZXJkZS53b3Jrc3BhY2UgPSB0cnVlCj4gIHNlcmRlX2pzb24ud29ya3NwYWNlID0gdHJ1
ZQo+ICAKPiBAQCAtMjYsNyArMjcsMTEgQEAgcHJveG1veC1sb2dpbiA9IHsgd29ya3NwYWNlID0g
dHJ1ZSwgZmVhdHVyZXMgPSBbICJodHRwIiBdIH0KPiAgcHJveG1veC1odHRwID0geyB3b3Jrc3Bh
Y2UgPSB0cnVlLCBvcHRpb25hbCA9IHRydWUsIGZlYXR1cmVzID0gWyAiY2xpZW50IiBdIH0KPiAg
aHlwZXIgPSB7IHdvcmtzcGFjZSA9IHRydWUsIG9wdGlvbmFsID0gdHJ1ZSB9Cj4gIAo+ICtbZGV2
LWRlcGVuZGVuY2llc10KPiArc2VyZGVfcGxhaW4ud29ya3NwYWNlID0gdHJ1ZQo+ICsKPiAgW2Zl
YXR1cmVzXQo+ICBkZWZhdWx0ID0gW10KPiAgaHlwZXItY2xpZW50ID0gWyAiZGVwOm9wZW5zc2wi
LCAiZGVwOmh5cGVyIiwgImRlcDpwcm94bW94LWh0dHAiLCAiZGVwOmxvZyIgXQo+ICtwZXJsLWFw
aS1wYXRoLWJ1aWxkZXIgPSBbXQo+ICB3ZWJhdXRobiA9IFsgInByb3htb3gtbG9naW4vd2ViYXV0
aG4iIF0KPiBkaWZmIC0tZ2l0IGEvcHJveG1veC1jbGllbnQvc3JjL2FwaV9wYXRoX2J1aWxkZXIu
cnMgYi9wcm94bW94LWNsaWVudC9zcmMvYXBpX3BhdGhfYnVpbGRlci5ycwo+IG5ldyBmaWxlIG1v
ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAuLmJjMmRmZGU0Cj4gLS0tIC9kZXYvbnVsbAo+ICsr
KyBiL3Byb3htb3gtY2xpZW50L3NyYy9hcGlfcGF0aF9idWlsZGVyLnJzCj4gQEAgLTAsMCArMSwy
NDIgQEAKPiArdXNlIHN0ZDo6Ym9ycm93OjpDb3c7Cj4gKwo+ICsvLy8gQnVpbGRlciBmb3IgQVBJ
IHBhdGhzIHdpdGggYSBxdWVyeS4KPiArLy8vCj4gKy8vLyBUaGUgW1NlbGY6OmFyZ10gbWV0aG9k
IGNhbiBiZSB1c2VkIHRvIGFkZCBtdWx0aXBsZSBhcmd1bWVudHMgdG8gdGhlIHF1ZXJ5LgoKTWlz
c2luZyBgYmFja3RpY2tzYCBhcm91bmQgYFNlbGY6OmFyZ2AuCgpBbHNvLCBtYXliZSB1c2UgIltg
YXJnYF0oU2VsZjo6YXJnKCkpIiBpbnN0ZWFkPwoKVGhpcyBoYXBwZW5zIHRocm91Z2hvdXQgdGhl
IGNvZGUgYmVsb3cuCgo+ICsvLy8KPiArLy8vIGBgYHJ1c3QKPiArLy8vIHVzZSBwcm94bW94X2Ns
aWVudDo6QXBpUGF0aEJ1aWxkZXI7Cj4gKy8vLwo+ICsvLy8gbGV0IHN0b3JhZ2UgPSAibXktc3Rv
cmFnZSI7Cj4gKy8vLyBsZXQgdGFyZ2V0ID0gIm15LXRhcmdldCI7Cj4gKy8vLyBsZXQgbm9kZSA9
ICJwdmUwMSI7Cj4gKy8vLyBsZXQgcXVlcnkgPSBBcGlQYXRoQnVpbGRlcjo6bmV3KGZvcm1hdCEo
Ii9hcGkyL2V4dGpzL25vZGVzL3tub2RlfS9zdG9yYWdlIikpCj4gKy8vLyAgICAgLmFyZygic3Rv
cmFnZSIsIHN0b3JhZ2UpCj4gKy8vLyAgICAgLmFyZygidGFyZ2V0IiwgdGFyZ2V0KQo+ICsvLy8g
ICAgIC5idWlsZCgpOwo+ICsvLy8KPiArLy8vIGFzc2VydF9lcSEoJnF1ZXJ5LCAiL2FwaTIvZXh0
anMvbm9kZXMvcHZlMDEvc3RvcmFnZT9zdG9yYWdlPW15JTJEc3RvcmFnZSZ0YXJnZXQ9bXklMkR0
YXJnZXQiKTsKPiArLy8vIGBgYAo+ICsvLy8KPiArLy8vICMjIENvbXBhdGliaWxpdHkgd2l0aCBw
ZXJsIEhUVFAgc2VydmVycwo+ICsvLy8KPiArLy8vIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUg
YWRkZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBwZXJsIEhUVFAgc2VydmVycy4KPiArLy8vCj4g
Ky8vLyAtIGBib29sX2FyZ2A6IHRyYW5zbGF0ZXMgYm9vbGVhbnMgdG8gYCIwImAvYCIxImAKPiAr
Ly8vIC0gYGxpc3RfYXJnYDogc3BsaXQgbGlzdHMgc28gdGhhdCB0aGV5IGNhbiBiZSBmZWVkIHRv
IHBlcmwncyBgc3BsaXRfbGlzdCgpYAo+ICsvLy8KPiArLy8vIFRoZXNlIG1ldGhvZHMgcmVxdWly
ZSB0aGUgYHBlcmwtYXBpLXBhdGgtYnVpbGRlcmAgZmVhdHVyZS4KPiArcHViIHN0cnVjdCBBcGlQ
YXRoQnVpbGRlciB7Cj4gKyAgICB1cmw6IFN0cmluZywKPiArICAgIHNlcGFyYXRvcjogY2hhciwK
PiArfQo+ICsKPiAraW1wbCBBcGlQYXRoQnVpbGRlciB7Cj4gKyAgICAvLy8gQ3JlYXRlcyBhIG5l
dyBidWlsZGVyIGZyb20gYSBiYXNlIHBhdGguCj4gKyAgICBwdWIgZm4gbmV3PCdhPihiYXNlOiBp
bXBsIEludG88Q293PCdhLCBzdHI+PikgLT4gU2VsZiB7Cj4gKyAgICAgICAgU2VsZiB7Cj4gKyAg
ICAgICAgICAgIHVybDogYmFzZS5pbnRvKCkuaW50b19vd25lZCgpLAo+ICsgICAgICAgICAgICBz
ZXBhcmF0b3I6ICc/JywKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIEFkZHMg
YW4gYXJndW1lbnQgdG8gdGhlIHF1ZXJ5Lgo+ICsgICAgLy8vCj4gKyAgICAvLy8gVGhlIG5hbWUg
YW5kIHZhbHVlIHdpbGwgYmUgcGVyY2VudC1lbmNvZGVkLgo+ICsgICAgcHViIGZuIGFyZzxUOiBz
dGQ6OmZtdDo6RGlzcGxheT4obXV0IHNlbGYsIG5hbWU6ICZzdHIsIHZhbHVlOiBUKSAtPiBTZWxm
IHsKPiArICAgICAgICBzZWxmLnB1c2hfc2VwYXJhdG9yX2FuZF9uYW1lKG5hbWUpOwo+ICsgICAg
ICAgIHNlbGYucHVzaF9lbmNvZGVkKHZhbHVlLnRvX3N0cmluZygpLmFzX2J5dGVzKCkpOwo+ICsg
ICAgICAgIHNlbGYKPiArICAgIH0KPiArCj4gKyAgICAvLy8gQWRkcyBhbiBvcHRpb25hbCBhcmd1
bWVudCB0byB0aGUgcXVlcnkuCj4gKyAgICAvLy8KPiArICAgIC8vLyBEb2VzIG5vdGhpbmcgaWYg
dGhlIHZhbHVlIGlzIGBOb25lYC4gU2VlIFtTZWxmOjphcmddIGZvciBtb3JlIGRldGFpbHMuCj4g
KyAgICBwdWIgZm4gbWF5YmVfYXJnPFQ6IHN0ZDo6Zm10OjpEaXNwbGF5PihtdXQgc2VsZiwgbmFt
ZTogJnN0ciwgdmFsdWU6ICZPcHRpb248VD4pIC0+IFNlbGYgewo+ICsgICAgICAgIGlmIGxldCBT
b21lKHZhbHVlKSA9IHZhbHVlIHsKPiArICAgICAgICAgICAgc2VsZiA9IHNlbGYuYXJnKG5hbWUs
IHZhbHVlKTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgc2VsZgo+ICsgICAgfQo+ICsKPiArICAg
IC8vLyBCdWlsZHMgdGhlIHVybC4KPiArICAgIHB1YiBmbiBidWlsZChzZWxmKSAtPiBTdHJpbmcg
ewo+ICsgICAgICAgIHNlbGYudXJsCj4gKyAgICB9Cj4gKwo+ICsgICAgZm4gcHVzaF9zZXBhcmF0
b3JfYW5kX25hbWUoJm11dCBzZWxmLCBuYW1lOiAmc3RyKSB7Cj4gKyAgICAgICAgc2VsZi51cmwu
cHVzaChzZWxmLnNlcGFyYXRvcik7Cj4gKyAgICAgICAgc2VsZi5zZXBhcmF0b3IgPSAnJic7Cj4g
KyAgICAgICAgc2VsZi5wdXNoX2VuY29kZWQobmFtZS5hc19ieXRlcygpKTsKPiArICAgICAgICBz
ZWxmLnVybC5wdXNoKCc9Jyk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZm4gcHVzaF9lbmNvZGVkKCZt
dXQgc2VsZiwgdmFsdWU6ICZbdThdKSB7Cj4gKyAgICAgICAgbGV0IGVuY192YWx1ZSA9IHBlcmNl
bnRfZW5jb2Rpbmc6OnBlcmNlbnRfZW5jb2RlKHZhbHVlLCBwZXJjZW50X2VuY29kaW5nOjpOT05f
QUxQSEFOVU1FUklDKTsKPiArICAgICAgICBzZWxmLnVybC5leHRlbmQoZW5jX3ZhbHVlKTsKPiAr
ICAgIH0KPiArfQo+ICsKPiArI1tjZmcoZmVhdHVyZSA9ICJwZXJsLWFwaS1wYXRoLWJ1aWxkZXIi
KV0KPiAraW1wbCBBcGlQYXRoQnVpbGRlciB7Cj4gKyAgICAvLy8gQWRkcyBhIGJvb2xlYW4gYXJn
IGluIGEgcGVybC1mcmllbmRseSBmYXNoaW9uLgo+ICsgICAgLy8vCj4gKyAgICAvLy8gYGBgcnVz
dAo+ICsgICAgLy8vIHVzZSBwcm94bW94X2NsaWVudDo6QXBpUGF0aEJ1aWxkZXI7Cj4gKyAgICAv
Ly8KPiArICAgIC8vLyBsZXQgbm9kZSA9ICJwdmUwMSI7Cj4gKyAgICAvLy8gbGV0IHF1ZXJ5ID0g
QXBpUGF0aEJ1aWxkZXI6Om5ldyhmb3JtYXQhKCIvYXBpMi9leHRqcy9ub2Rlcy97bm9kZX0vc3Rv
cmFnZSIpKQo+ICsgICAgLy8vICAgICAuYm9vbF9hcmcoImVuYWJsZWQiLCB0cnVlKQo+ICsgICAg
Ly8vICAgICAuYnVpbGQoKTsKPiArICAgIC8vLwo+ICsgICAgLy8vIGFzc2VydF9lcSEoJnF1ZXJ5
LCAiL2FwaTIvZXh0anMvbm9kZXMvcHZlMDEvc3RvcmFnZT9lbmFibGVkPTEiKTsKPiArICAgIC8v
LyBgYGAKPiArICAgIC8vLwo+ICsgICAgLy8vIGB0cnVlYCB3aWxsIGJlIGNvbnZlcnRlZCBpbnRv
IGAiMSJgIGFuZCBgZmFsc2VgIHRvIGAiMCJgLgo+ICsgICAgcHViIGZuIGJvb2xfYXJnKG11dCBz
ZWxmLCBuYW1lOiAmc3RyLCB2YWx1ZTogYm9vbCkgLT4gU2VsZiB7Cj4gKyAgICAgICAgc2VsZi5w
dXNoX3NlcGFyYXRvcl9hbmRfbmFtZShuYW1lKTsKPiArICAgICAgICBpZiB2YWx1ZSB7Cj4gKyAg
ICAgICAgICAgIHNlbGYudXJsLnB1c2goJzEnKTsKPiArICAgICAgICB9IGVsc2Ugewo+ICsgICAg
ICAgICAgICBzZWxmLnVybC5wdXNoKCcwJyk7Cj4gKyAgICAgICAgfTsKPiArICAgICAgICBzZWxm
Cj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIEFkZHMgYW4gb3B0aW9uYWwgYm9vbGVhbiBhcmcgaW4g
YSBwZXJsLWZyaWVuZGx5IGZhc2hpb24uCj4gKyAgICAvLy8KPiArICAgIC8vLyBEb2VzIG5vdGhp
bmcgaWYgYHZhbHVlYCBpcyBgTm9uZWAuIFNlZSBbU2VsZjo6Ym9vbF9hcmddIGZvciBtb3JlCj4g
KyAgICAvLy8gZGV0YWlscy4KPiArICAgIHB1YiBmbiBtYXliZV9ib29sX2FyZyhtdXQgc2VsZiwg
bmFtZTogJnN0ciwgdmFsdWU6IE9wdGlvbjxib29sPikgLT4gU2VsZiB7Cj4gKyAgICAgICAgaWYg
bGV0IFNvbWUodmFsdWUpID0gdmFsdWUgewo+ICsgICAgICAgICAgICBzZWxmID0gc2VsZi5ib29s
X2FyZyhuYW1lLCB2YWx1ZSk7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIHNlbGYKPiArICAgIH0K
PiArCj4gKyAgICAvLy8gSGVscGVyIGZvciBidWlsZGluZyBwZXJsLWZyaWVuZGx5IHF1ZXJpZXMu
Cj4gKyAgICAvLy8KPiArICAgIC8vLyBGb3IgYDx0eXBlPi1saXN0YCBlbnRyaWVzIHdlIHR1cm4g
YW4gYXJyYXkgaW50byBhIHN0cmluZyByZWFkeSBmb3IKPiArICAgIC8vLyBwZXJsJ3MgYHNwbGl0
X2xpc3QoKWAgY2FsbC4KPiArICAgIC8vLwo+ICsgICAgLy8vIGBgYHJ1c3QKPiArICAgIC8vLyB1
c2UgcHJveG1veF9jbGllbnQ6OmFwaV9wYXRoX2J1aWxkZXI6OkFwaVBhdGhCdWlsZGVyOwo+ICsg
ICAgLy8vCj4gKyAgICAvLy8gbGV0IGNvbnRlbnQgPSB2ZWMhWyJiYWNrdXAiLCAiaW1hZ2VzIl07
Cj4gKyAgICAvLy8gbGV0IG5vZGUgPSAibXlfbm9kZSI7Cj4gKyAgICAvLy8gbGV0IHF1ZXJ5ID0g
JnByb3htb3hfY2xpZW50OjpBcGlQYXRoQnVpbGRlcjo6bmV3KGZvcm1hdCEoIi9hcGkyL2V4dGpz
L25vZGVzL3tub2RlfS9zdG9yYWdlIikpCj4gKyAgICAvLy8gICAgIC5tYXliZV9saXN0X2FyZygi
Y29udGVudCIsICZjb250ZW50KQo+ICsgICAgLy8vICAgICAuYXJnKCJ0eXBlIiwgInZtIikKCl4g
Q29udGFpbnMgdHlwZT12bQoKPiArICAgIC8vLyAgICAgLmJ1aWxkKCk7Cj4gKyAgICAvLy8KPiAr
ICAgIC8vLyBhc3NlcnRfZXEhKCZxdWVyeSwgIi9hcGkyL2V4dGpzL25vZGVzL215X25vZGUvc3Rv
cmFnZT9jb250ZW50PWJhY2t1cCUwMGltYWdlc3MiKTsKCl4gZG9lcyBub3QgY29udGFpbiB0eXBl
PXZtLi4uCgppb3cuIHRoZSB0ZXN0IHN1aXRlIGZhaWxzIHdpdGggYC0tYWxsLWZlYXR1cmVzYAoK
PiArICAgIC8vLyBgYGAKPiArICAgIC8vLwo+ICsgICAgLy8vIFRoZSBuYW1lIGFuZCB2YWx1ZXMg
d2lsbCBiZSBwZXJjZW50LWVuY29kZWQuCj4gKyAgICBwdWIgZm4gbGlzdF9hcmc8VDogc3RkOjpm
bXQ6OkRpc3BsYXksIEk6IEludG9JdGVyYXRvcjxJdGVtID0gVD4+KAoKXiBUaGlzIGlzIHF1aXRl
IGxvbmcsIHBsZWFzZSBtb3ZlIGl0IGludG8gYSB3aGVyZSBjYWx1c2UuCkFsc28sIHlvdSBjYW4g
c2tpcCBgVGAgdmlhOgoKICAgIHdoZXJlCiAgICAgICAgSTogSW50b0l0ZXJhdG9yLAogICAgICAg
IEk6Okl0ZW06IERpc3BsYXksCgpBbmQgc2luY2UgMS43OSBhc3NvY2lhdGVkIHR5cGUgYm91bmRz
IGFyZSBzdGFibGUsIHNvIHlvdSBjYW4gYWN0dWFsbHkKZG86CiAgICB3aGVyZQogICAgICAgIEk6
IEludG9JdGVyYXRvcjxJdGVtOiBEaXNwbGF5PiwKCgoKPiArICAgICAgICBtdXQgc2VsZiwKPiAr
ICAgICAgICBuYW1lOiAmc3RyLAo+ICsgICAgICAgIHZhbHVlczogSSwKPiArICAgICkgLT4gU2Vs
ZiB7Cj4gKyAgICAgICAgc2VsZi5wdXNoX3NlcGFyYXRvcl9hbmRfbmFtZShuYW1lKTsKPiArICAg
ICAgICBsZXQgbXV0IGxpc3Rfc2VwYXJhdG9yID0gIiI7Cj4gKyAgICAgICAgZm9yIGVudHJ5IGlu
IHZhbHVlcy5pbnRvX2l0ZXIoKSB7Cj4gKyAgICAgICAgICAgIHNlbGYudXJsLnB1c2hfc3RyKGxp
c3Rfc2VwYXJhdG9yKTsKPiArICAgICAgICAgICAgbGlzdF9zZXBhcmF0b3IgPSAiJTAwIjsKPiAr
ICAgICAgICAgICAgc2VsZi5wdXNoX2VuY29kZWQoZW50cnkudG9fc3RyaW5nKCkuYXNfYnl0ZXMo
KSk7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIHNlbGYKPiArICAgIH0KPiArCj4gKyAgICAvLy8g
SGVscGVyIGZvciBidWlsZGluZyBwZXJsLWZyaWVuZGx5IHF1ZXJpZXMuCj4gKyAgICAvLy8KPiAr
ICAgIC8vLyBTZWUgW1NlbGY6Omxpc3RfYXJnXSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgICAgcHVi
IGZuIG1heWJlX2xpc3RfYXJnPFQ6IHN0ZDo6Zm10OjpEaXNwbGF5PigKPiArICAgICAgICBtdXQg
c2VsZiwKPiArICAgICAgICBuYW1lOiAmc3RyLAo+ICsgICAgICAgIHZhbHVlczogJk9wdGlvbjxW
ZWM8VD4+LAo+ICsgICAgKSAtPiBTZWxmIHsKCk9oIEkgc28gd2lzaAogICAgd2hlcmUgZm9yPCdh
PiAmJ2EgSTogSW50b0l0ZXJhdG9yPFQ6IERpc3BsYXk+CndvdWxkIGFjdHVhbGx5ICp3b3JrKiAo
dG8gcmVwbGFjZSBgVmVjPFQ+YCB3aXRoIGFuIGBJYCwgYnV0IGl0IGRvZXNuJ3QKcmlnaHQgbm93
Li4uCgo+ICsgICAgICAgIGlmIGxldCBTb21lKHZhbHVlcykgPSB2YWx1ZXMgewo+ICsgICAgICAg
ICAgICBzZWxmID0gc2VsZi5saXN0X2FyZyhuYW1lLCB2YWx1ZXMuaXRlcigpKTsKPiArICAgICAg
ICB9Owo+ICsgICAgICAgIHNlbGYKPiArICAgIH0KPiArfQo+ICsKPiArI1tjZmcodGVzdCldCj4g
K21vZCB0ZXN0cyB7Cj4gKyAgICB1c2Ugc3VwZXI6Oio7Cj4gKwo+ICsgICAgLy8gU2VlIHBkbV9h
cGlfdHlwZXM6OkNvbmZpZ3VyYXRpb25TdGF0ZS4KPiArICAgICNbZGVyaXZlKHNlcmRlOjpTZXJp
YWxpemUpXQo+ICsgICAgI1tzZXJkZShyZW5hbWVfYWxsID0gImtlYmFiLWNhc2UiKV0KPiArICAg
IGVudW0gQ29uZmlndXJhdGlvblN0YXRlIHsKPiArICAgICAgICBBY3RpdmUsCj4gKyAgICB9Cj4g
KyAgICBzZXJkZV9wbGFpbjo6ZGVyaXZlX2Rpc3BsYXlfZnJvbV9zZXJpYWxpemUhKENvbmZpZ3Vy
YXRpb25TdGF0ZSk7Cj4gKwo+ICsgICAgLy8gU2VlIHB2ZV9hcGlfdHlwZXM6OkNsdXN0ZXJSZXNv
dXJjZUtpbmQuCj4gKyAgICAjW2Rlcml2ZShzZXJkZTo6U2VyaWFsaXplKV0KPiArICAgIGVudW0g
Q2x1c3RlclJlc291cmNlS2luZCB7Cj4gKyAgICAgICAgI1tzZXJkZShyZW5hbWUgPSAidm0iKV0K
PiArICAgICAgICBWbSwKPiArICAgIH0KPiArICAgIHNlcmRlX3BsYWluOjpkZXJpdmVfZGlzcGxh
eV9mcm9tX3NlcmlhbGl6ZSEoQ2x1c3RlclJlc291cmNlS2luZCk7Cj4gKwo+ICsgICAgI1t0ZXN0
XQo+ICsgICAgZm4gdGVzdF9idWlsZGVyKCkgewo+ICsgICAgICAgIGxldCBleHBlY3RlZCA9ICIv
YXBpMi9leHRqcy9jbHVzdGVyL3Jlc291cmNlcz90eXBlPXZtIjsKPiArICAgICAgICBsZXQgdHkg
PSBDbHVzdGVyUmVzb3VyY2VLaW5kOjpWbTsKPiArCj4gKyAgICAgICAgbGV0IHF1ZXJ5ID0gQXBp
UGF0aEJ1aWxkZXI6Om5ldygiL2FwaTIvZXh0anMvY2x1c3Rlci9yZXNvdXJjZXMiKQo+ICsgICAg
ICAgICAgICAuYXJnKCJ0eXBlIiwgdHkpCj4gKyAgICAgICAgICAgIC5idWlsZCgpOwo+ICsKPiAr
ICAgICAgICBhc3NlcnRfZXEhKCZxdWVyeSwgZXhwZWN0ZWQpOwo+ICsKPiArICAgICAgICBsZXQg
c2Vjb25kX2V4cGVjdGVkID0KPiArICAgICAgICAgICAgIi9hcGkyL2V4dGpzL3B2ZS9yZW1vdGVz
L3NvbWUtcmVtb3RlL3FlbXUvMTAwL2NvbmZpZz9zdGF0ZT1hY3RpdmUmbm9kZT1teU5vZGUiOwo+
ICsgICAgICAgIGxldCBzdGF0ZSA9IENvbmZpZ3VyYXRpb25TdGF0ZTo6QWN0aXZlOwo+ICsgICAg
ICAgIGxldCBub2RlID0gIm15Tm9kZSI7Cj4gKyAgICAgICAgbGV0IHNuYXBzaG90ID0gTm9uZTo6
PCZzdHI+Owo+ICsKPiArICAgICAgICBsZXQgc2Vjb25kX3F1ZXJ5ID0KPiArICAgICAgICAgICAg
QXBpUGF0aEJ1aWxkZXI6Om5ldygiL2FwaTIvZXh0anMvcHZlL3JlbW90ZXMvc29tZS1yZW1vdGUv
cWVtdS8xMDAvY29uZmlnIikKPiArICAgICAgICAgICAgICAgIC5hcmcoInN0YXRlIiwgc3RhdGUp
Cj4gKyAgICAgICAgICAgICAgICAuYXJnKCJub2RlIiwgbm9kZSkKPiArICAgICAgICAgICAgICAg
IC5tYXliZV9hcmcoInNuYXBzaG90IiwgJnNuYXBzaG90KQo+ICsgICAgICAgICAgICAgICAgLmJ1
aWxkKCk7Cj4gKwo+ICsgICAgICAgIGFzc2VydF9lcSEoJnNlY29uZF9xdWVyeSwgJnNlY29uZF9l
eHBlY3RlZCk7Cj4gKyAgICB9Cj4gK30KPiArCj4gKyNbY2ZnKGFsbCh0ZXN0LCBmZWF0dXJlID0g
InBlcmwtYXBpLXBhdGgtYnVpbGRlciIpKV0KPiArbW9kIHBlcmxfdGVzdHMgewo+ICsgICAgdXNl
IHN1cGVyOjoqOwo+ICsKPiArICAgICNbdGVzdF0KPiArICAgIGZuIHRlc3RfcGVybF9idWlsZGVy
KCkgewo+ICsgICAgICAgIGxldCBoaXN0b3J5ID0gdHJ1ZTsKPiArICAgICAgICBsZXQgbG9jYWxf
b25seSA9IGZhbHNlOwo+ICsgICAgICAgIGxldCBzdGFydF90aW1lID0gMTAwMDsKPiArCj4gKyAg
ICAgICAgbGV0IGV4cGVjdGVkX3VybCA9Cj4gKyAgICAgICAgICAgICIvYXBpMi9leHRqcy9jbHVz
dGVyL21ldHJpY3MvZXhwb3J0P2hpc3Rvcnk9MSZsb2NhbCUyRG9ubHk9MCZzdGFydCUyRHRpbWU9
MTAwMCI7Cj4gKwo+ICsgICAgICAgIGxldCBxdWVyeSA9IEFwaVBhdGhCdWlsZGVyOjpuZXcoIi9h
cGkyL2V4dGpzL2NsdXN0ZXIvbWV0cmljcy9leHBvcnQiKQo+ICsgICAgICAgICAgICAuYm9vbF9h
cmcoImhpc3RvcnkiLCBoaXN0b3J5KQo+ICsgICAgICAgICAgICAuYm9vbF9hcmcoImxvY2FsLW9u
bHkiLCBsb2NhbF9vbmx5KQo+ICsgICAgICAgICAgICAuYXJnKCJzdGFydC10aW1lIiwgc3RhcnRf
dGltZSkKPiArICAgICAgICAgICAgLmJ1aWxkKCk7Cj4gKyAgICAgICAgYXNzZXJ0X2VxIShleHBl
Y3RlZF91cmwsIHF1ZXJ5KTsKPiArCj4gKyAgICAgICAgbGV0IHF1ZXJ5X3dpdGhfbWF5YmUgPSBB
cGlQYXRoQnVpbGRlcjo6bmV3KCIvYXBpMi9leHRqcy9jbHVzdGVyL21ldHJpY3MvZXhwb3J0IikK
PiArICAgICAgICAgICAgLm1heWJlX2Jvb2xfYXJnKCJoaXN0b3J5IiwgU29tZShoaXN0b3J5KSkK
PiArICAgICAgICAgICAgLm1heWJlX2Jvb2xfYXJnKCJsb2NhbC1vbmx5IiwgU29tZShsb2NhbF9v
bmx5KSkKPiArICAgICAgICAgICAgLm1heWJlX2FyZygic3RhcnQtdGltZSIsICZTb21lKHN0YXJ0
X3RpbWUpKQo+ICsgICAgICAgICAgICAuYnVpbGQoKTsKPiArCj4gKyAgICAgICAgYXNzZXJ0X2Vx
IShleHBlY3RlZF91cmwsIHF1ZXJ5X3dpdGhfbWF5YmUpOwo+ICsgICAgfQo+ICt9Cj4gZGlmZiAt
LWdpdCBhL3Byb3htb3gtY2xpZW50L3NyYy9saWIucnMgYi9wcm94bW94LWNsaWVudC9zcmMvbGli
LnJzCj4gaW5kZXggMDBjNDg2NjUuLjU5NzhkNTAxIDEwMDY0NAo+IC0tLSBhL3Byb3htb3gtY2xp
ZW50L3NyYy9saWIucnMKPiArKysgYi9wcm94bW94LWNsaWVudC9zcmMvbGliLnJzCj4gQEAgLTE0
LDYgKzE0LDEwIEBAIHB1YiB1c2UgZXJyb3I6OkVycm9yOwo+ICBwdWIgdXNlIHByb3htb3hfbG9n
aW46OnRmYTo6VGZhQ2hhbGxlbmdlOwo+ICBwdWIgdXNlIHByb3htb3hfbG9naW46OntBdXRoZW50
aWNhdGlvbiwgVGlja2V0fTsKPiAgCj4gK3B1YiBtb2QgYXBpX3BhdGhfYnVpbGRlcjsKCuKGkSBE
cm9wIHRoZSBgcHViYCBoZXJlCkFuZCB0aGUgbmV3bGluZSDihpMKCj4gKwo+ICtwdWIgdXNlIGFw
aV9wYXRoX2J1aWxkZXI6OkFwaVBhdGhCdWlsZGVyOwo+ICsKPiAgcHViKGNyYXRlKSBtb2QgYXV0
aDsKPiAgcHViIHVzZSBhdXRoOjp7QXV0aGVudGljYXRpb25LaW5kLCBUb2tlbn07Cj4gIAo+IC0t
IAo+IDIuMzkuNQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCnBicy1kZXZlbCBtYWlsaW5nIGxpc3QKcGJzLWRldmVsQGxpc3RzLnByb3htb3guY29tCmh0
dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3Bicy1kZXZl
bAo=