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 C35001FF16F
	for <inbox@lore.proxmox.com>; Tue, 29 Apr 2025 16:09:55 +0200 (CEST)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id CE32B9AE7;
	Tue, 29 Apr 2025 16:09:51 +0200 (CEST)
From: =?UTF-8?q?Michael=20K=C3=B6ppl?= <m.koeppl@proxmox.com>
To: pve-devel@lists.proxmox.com
Date: Tue, 29 Apr 2025 16:09:40 +0200
Message-Id: <20250429140940.161711-7-m.koeppl@proxmox.com>
X-Mailer: git-send-email 2.39.5
In-Reply-To: <20250429140940.161711-1-m.koeppl@proxmox.com>
References: <20250429140940.161711-1-m.koeppl@proxmox.com>
MIME-Version: 1.0
X-SPAM-LEVEL: Spam detection results:  0
 AWL 0.000 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
Subject: [pve-devel] [RFC PATCH pve-installer v2 6/6] common: add checks for
 valid subnet mask and IPv4 address within subnet
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>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: pve-devel-bounces@lists.proxmox.com
Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com>

QWRkIGNoZWNrcyBmb3IgdmFsaWQgc3VibmV0IG1hc2sgKGdyZWF0ZXIgdGhhbiAvMCBhbmQgYXQg
bW9zdCAvMzIgZm9yCklQdjQpLiBJbiBhZGRpdGlvbiwgY2hlY2sgaWYgdGhlIGFkZHJlc3MgZW50
ZXJlZCBieSB0aGUgdXNlciBpcyB2YWxpZAp3aXRoaW4gdGhlIGdpdmVuIHN1Ym5ldCwgaS5lLiBu
b3QgYSBuZXR3b3JrIGFkZHJlc3Mgb3IgYnJvYWRjYXN0CmFkZHJlc3MuIC8zMSBpcyBjb25zaWRl
cmVkIGFuIGV4Y2VwdGlvbiBpbiBhY2NvcmRhbmNlIHdpdGggUkZDMzAyMSBbMF0sCmNvbnNpZGVy
aW5nIGFueSBvZiB0aGUgMiBhdmFpbGFibGUgYWRkcmVzc2VzIHRvIGJlIHZhbGlkIGhvc3QgYWRk
cmVzc2VzLgoKWzBdIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzAy
MQoKU2lnbmVkLW9mZi1ieTogTWljaGFlbCBLw7ZwcGwgPG0ua29lcHBsQHByb3htb3guY29tPgot
LS0KU29tZSBpbnB1dCAvIGRpc2N1c3Npb24gd291bGQgYmUgbXVjaCBhcHByZWNpYXRlZCBoZXJl
LCBzaW5jZSB0aGlzIG1pZ2h0CmFnYWluIGJlIGNvbnNpZGVyZWQgdG9vIHJlc3RyaWN0aXZlLgoK
IHByb3htb3gtYXV0by1pbnN0YWxsZXIvdGVzdHMvcGFyc2UtYW5zd2VyLnJzICB8ICAzICsKIC4u
Li9wYXJzZV9hbnN3ZXIvaXB2NF9hbmRfc3VibmV0XzMxLmpzb24gICAgICB8IDE5ICsrKysrCiAu
Li4vcGFyc2VfYW5zd2VyL2lwdjRfYW5kX3N1Ym5ldF8zMS50b21sICAgICAgfCAxOCArKysrKwog
Li4uL2lwdjRfYW5kX3N1Ym5ldF9hZGRyX2lzX25ldHdvcmsuanNvbiAgICAgIHwgIDMgKwogLi4u
L2lwdjRfYW5kX3N1Ym5ldF9hZGRyX2lzX25ldHdvcmsudG9tbCAgICAgIHwgMTggKysrKysKIC4u
Li9pcHY0X2FuZF9zdWJuZXRfbWFza18zMy5qc29uICAgICAgICAgICAgICB8ICAzICsKIC4uLi9p
cHY0X2FuZF9zdWJuZXRfbWFza18zMy50b21sICAgICAgICAgICAgICB8IDE4ICsrKysrCiBwcm94
bW94LWluc3RhbGxlci1jb21tb24vc3JjL3V0aWxzLnJzICAgICAgICAgfCA4MSArKysrKysrKysr
KysrKy0tLS0tCiA4IGZpbGVzIGNoYW5nZWQsIDE0MyBpbnNlcnRpb25zKCspLCAyMCBkZWxldGlv
bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwcm94bW94LWF1dG8taW5zdGFsbGVyL3Rlc3RzL3Jl
c291cmNlcy9wYXJzZV9hbnN3ZXIvaXB2NF9hbmRfc3VibmV0XzMxLmpzb24KIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBwcm94bW94LWF1dG8taW5zdGFsbGVyL3Rlc3RzL3Jlc291cmNlcy9wYXJzZV9hbnN3
ZXIvaXB2NF9hbmRfc3VibmV0XzMxLnRvbWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwcm94bW94LWF1
dG8taW5zdGFsbGVyL3Rlc3RzL3Jlc291cmNlcy9wYXJzZV9hbnN3ZXJfZmFpbC9pcHY0X2FuZF9z
dWJuZXRfYWRkcl9pc19uZXR3b3JrLmpzb24KIGNyZWF0ZSBtb2RlIDEwMDY0NCBwcm94bW94LWF1
dG8taW5zdGFsbGVyL3Rlc3RzL3Jlc291cmNlcy9wYXJzZV9hbnN3ZXJfZmFpbC9pcHY0X2FuZF9z
dWJuZXRfYWRkcl9pc19uZXR3b3JrLnRvbWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwcm94bW94LWF1
dG8taW5zdGFsbGVyL3Rlc3RzL3Jlc291cmNlcy9wYXJzZV9hbnN3ZXJfZmFpbC9pcHY0X2FuZF9z
dWJuZXRfbWFza18zMy5qc29uCiBjcmVhdGUgbW9kZSAxMDA2NDQgcHJveG1veC1hdXRvLWluc3Rh
bGxlci90ZXN0cy9yZXNvdXJjZXMvcGFyc2VfYW5zd2VyX2ZhaWwvaXB2NF9hbmRfc3VibmV0X21h
c2tfMzMudG9tbAoKZGlmZiAtLWdpdCBhL3Byb3htb3gtYXV0by1pbnN0YWxsZXIvdGVzdHMvcGFy
c2UtYW5zd2VyLnJzIGIvcHJveG1veC1hdXRvLWluc3RhbGxlci90ZXN0cy9wYXJzZS1hbnN3ZXIu
cnMKaW5kZXggZjU2MDQ4My4uNmY2MjdhMCAxMDA2NDQKLS0tIGEvcHJveG1veC1hdXRvLWluc3Rh
bGxlci90ZXN0cy9wYXJzZS1hbnN3ZXIucnMKKysrIGIvcHJveG1veC1hdXRvLWluc3RhbGxlci90
ZXN0cy9wYXJzZS1hbnN3ZXIucnMKQEAgLTEyNyw2ICsxMjcsNyBAQCBtb2QgdGVzdHMgewogICAg
ICAgICAgICAgZnFkbl9mcm9tX2RoY3Bfbm9fZGhjcF9kb21haW5fd2l0aF9kZWZhdWx0X2RvbWFp
biwKICAgICAgICAgICAgIGZ1bGxfZnFkbl9mcm9tX2RoY3Bfd2l0aF9kZWZhdWx0X2RvbWFpbiwK
ICAgICAgICAgICAgIGhhc2hlZF9yb290X3Bhc3N3b3JkLAorICAgICAgICAgICAgaXB2NF9hbmRf
c3VibmV0XzMxLAogICAgICAgICAgICAgbWluaW1hbCwKICAgICAgICAgICAgIG5pY19tYXRjaGlu
ZywKICAgICAgICAgICAgIHNwZWNpZmljX25pYywKQEAgLTE0Niw2ICsxNDcsOCBAQCBtb2QgdGVz
dHMgewogICAgICAgICAgICAgZHVwbGljYXRlX2Rpc2ssCiAgICAgICAgICAgICBmcWRuX2Zyb21f
ZGhjcF9ub19kZWZhdWx0X2RvbWFpbiwKICAgICAgICAgICAgIGZxZG5faG9zdG5hbWVfb25seSwK
KyAgICAgICAgICAgIGlwdjRfYW5kX3N1Ym5ldF9hZGRyX2lzX25ldHdvcmssCisgICAgICAgICAg
ICBpcHY0X2FuZF9zdWJuZXRfbWFza18zMywKICAgICAgICAgICAgIGx2bV9tYXhyb290X2dyZWF0
ZXJfdGhhbl9tYXhpbXVtLAogICAgICAgICAgICAgbHZtX3N3YXBzaXplX2dyZWF0ZXJfdGhhbl9o
ZHNpemUsCiAgICAgICAgICAgICBub19mcWRuX2Zyb21fZGhjcCwKZGlmZiAtLWdpdCBhL3Byb3ht
b3gtYXV0by1pbnN0YWxsZXIvdGVzdHMvcmVzb3VyY2VzL3BhcnNlX2Fuc3dlci9pcHY0X2FuZF9z
dWJuZXRfMzEuanNvbiBiL3Byb3htb3gtYXV0by1pbnN0YWxsZXIvdGVzdHMvcmVzb3VyY2VzL3Bh
cnNlX2Fuc3dlci9pcHY0X2FuZF9zdWJuZXRfMzEuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4yYTQ3NWZlCi0tLSAvZGV2L251bGwKKysrIGIvcHJveG1veC1hdXRvLWlu
c3RhbGxlci90ZXN0cy9yZXNvdXJjZXMvcGFyc2VfYW5zd2VyL2lwdjRfYW5kX3N1Ym5ldF8zMS5q
c29uCkBAIC0wLDAgKzEsMTkgQEAKK3sKKyAgImF1dG9yZWJvb3QiOiAxLAorICAiY2lkciI6ICIx
MC4xMC4xMC4xMC8zMSIsCisgICJjb3VudHJ5IjogImF0IiwKKyAgImRucyI6ICIxMC4xMC4xMC4x
IiwKKyAgImRvbWFpbiI6ICJ0ZXN0aW5zdGFsbCIsCisgICJmaWxlc3lzIjogImV4dDQiLAorICAi
Z2F0ZXdheSI6ICIxMC4xMC4xMC4xIiwKKyAgImhkc2l6ZSI6IDIyMy41NzA4ODQ3MDQ1ODk4NCwK
KyAgImV4aXN0aW5nX3N0b3JhZ2VfYXV0b19yZW5hbWUiOiAxLAorICAiaG9zdG5hbWUiOiAicHZl
YXV0byIsCisgICJrZXltYXAiOiAiZGUiLAorICAibWFpbHRvIjogIm1haWxAbm8uaW52YWxpZCIs
CisgICJtbmdtdF9uaWMiOiAiZW5wMTI5czBmMW5wMSIsCisgICJyb290X3Bhc3N3b3JkIjogeyAi
cGxhaW4iOiAiMTIzNDU2NzgiIH0sCisgICJ0YXJnZXRfaGQiOiAiL2Rldi9zZGEiLAorICAidGlt
ZXpvbmUiOiAiRXVyb3BlL1ZpZW5uYSIsCisgICJmaXJzdF9ib290IjogeyAiZW5hYmxlZCI6IDAg
fQorfQpkaWZmIC0tZ2l0IGEvcHJveG1veC1hdXRvLWluc3RhbGxlci90ZXN0cy9yZXNvdXJjZXMv
cGFyc2VfYW5zd2VyL2lwdjRfYW5kX3N1Ym5ldF8zMS50b21sIGIvcHJveG1veC1hdXRvLWluc3Rh
bGxlci90ZXN0cy9yZXNvdXJjZXMvcGFyc2VfYW5zd2VyL2lwdjRfYW5kX3N1Ym5ldF8zMS50b21s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYTZjYTUKLS0tIC9kZXYvbnVs
bAorKysgYi9wcm94bW94LWF1dG8taW5zdGFsbGVyL3Rlc3RzL3Jlc291cmNlcy9wYXJzZV9hbnN3
ZXIvaXB2NF9hbmRfc3VibmV0XzMxLnRvbWwKQEAgLTAsMCArMSwxOCBAQAorW2dsb2JhbF0KK2tl
eWJvYXJkID0gImRlIgorY291bnRyeSA9ICJhdCIKK2ZxZG4gPSAicHZlYXV0by50ZXN0aW5zdGFs
bCIKK21haWx0byA9ICJtYWlsQG5vLmludmFsaWQiCit0aW1lem9uZSA9ICJFdXJvcGUvVmllbm5h
Igorcm9vdF9wYXNzd29yZCA9ICIxMjM0NTY3OCIKKworW25ldHdvcmtdCitzb3VyY2UgPSAiZnJv
bS1hbnN3ZXIiCitjaWRyID0gIjEwLjEwLjEwLjEwLzMxIgorZG5zID0gIjEwLjEwLjEwLjEiCitn
YXRld2F5ID0gIjEwLjEwLjEwLjEiCitmaWx0ZXIuSURfTkVUX05BTUUgPSAiZW5wMTI5czBmMW5w
MSIKKworW2Rpc2stc2V0dXBdCitmaWxlc3lzdGVtID0gImV4dDQiCitkaXNrX2xpc3QgPSBbInNk
YSJdCmRpZmYgLS1naXQgYS9wcm94bW94LWF1dG8taW5zdGFsbGVyL3Rlc3RzL3Jlc291cmNlcy9w
YXJzZV9hbnN3ZXJfZmFpbC9pcHY0X2FuZF9zdWJuZXRfYWRkcl9pc19uZXR3b3JrLmpzb24gYi9w
cm94bW94LWF1dG8taW5zdGFsbGVyL3Rlc3RzL3Jlc291cmNlcy9wYXJzZV9hbnN3ZXJfZmFpbC9p
cHY0X2FuZF9zdWJuZXRfYWRkcl9pc19uZXR3b3JrLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYjI4Njk5ZAotLS0gL2Rldi9udWxsCisrKyBiL3Byb3htb3gtYXV0by1p
bnN0YWxsZXIvdGVzdHMvcmVzb3VyY2VzL3BhcnNlX2Fuc3dlcl9mYWlsL2lwdjRfYW5kX3N1Ym5l
dF9hZGRyX2lzX25ldHdvcmsuanNvbgpAQCAtMCwwICsxLDMgQEAKK3sKKyAgInBhcnNlLWVycm9y
IjogImVycm9yIHBhcnNpbmcgYW5zd2VyLnRvbWw6IEludmFsaWQgQ0lEUjogYWRkcmVzcyBpcyBh
IG5ldHdvcmsgYWRkcmVzcyIKK30KZGlmZiAtLWdpdCBhL3Byb3htb3gtYXV0by1pbnN0YWxsZXIv
dGVzdHMvcmVzb3VyY2VzL3BhcnNlX2Fuc3dlcl9mYWlsL2lwdjRfYW5kX3N1Ym5ldF9hZGRyX2lz
X25ldHdvcmsudG9tbCBiL3Byb3htb3gtYXV0by1pbnN0YWxsZXIvdGVzdHMvcmVzb3VyY2VzL3Bh
cnNlX2Fuc3dlcl9mYWlsL2lwdjRfYW5kX3N1Ym5ldF9hZGRyX2lzX25ldHdvcmsudG9tbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTkxNDFiCi0tLSAvZGV2L251bGwKKysr
IGIvcHJveG1veC1hdXRvLWluc3RhbGxlci90ZXN0cy9yZXNvdXJjZXMvcGFyc2VfYW5zd2VyX2Zh
aWwvaXB2NF9hbmRfc3VibmV0X2FkZHJfaXNfbmV0d29yay50b21sCkBAIC0wLDAgKzEsMTggQEAK
K1tnbG9iYWxdCitrZXlib2FyZCA9ICJkZSIKK2NvdW50cnkgPSAiYXQiCitmcWRuID0gInB2ZWF1
dG8udGVzdGluc3RhbGwiCittYWlsdG8gPSAibWFpbEBuby5pbnZhbGlkIgordGltZXpvbmUgPSAi
RXVyb3BlL1ZpZW5uYSIKK3Jvb3RfcGFzc3dvcmQgPSAiMTIzNDU2NzgiCisKK1tuZXR3b3JrXQor
c291cmNlID0gImZyb20tYW5zd2VyIgorY2lkciA9ICIxMC4xMC4xMC4zMi8yNyIKK2RucyA9ICIx
MC4xMC4xMC4xIgorZ2F0ZXdheSA9ICIxMC4xMC4xMC4xIgorZmlsdGVyLklEX05FVF9OQU1FID0g
ImVucDEyOXMwZjFucDEiCisKK1tkaXNrLXNldHVwXQorZmlsZXN5c3RlbSA9ICJleHQ0IgorZGlz
a19saXN0ID0gWyJzZGEiXQpkaWZmIC0tZ2l0IGEvcHJveG1veC1hdXRvLWluc3RhbGxlci90ZXN0
cy9yZXNvdXJjZXMvcGFyc2VfYW5zd2VyX2ZhaWwvaXB2NF9hbmRfc3VibmV0X21hc2tfMzMuanNv
biBiL3Byb3htb3gtYXV0by1pbnN0YWxsZXIvdGVzdHMvcmVzb3VyY2VzL3BhcnNlX2Fuc3dlcl9m
YWlsL2lwdjRfYW5kX3N1Ym5ldF9tYXNrXzMzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNmIyODg4YgotLS0gL2Rldi9udWxsCisrKyBiL3Byb3htb3gtYXV0by1pbnN0
YWxsZXIvdGVzdHMvcmVzb3VyY2VzL3BhcnNlX2Fuc3dlcl9mYWlsL2lwdjRfYW5kX3N1Ym5ldF9t
YXNrXzMzLmpzb24KQEAgLTAsMCArMSwzIEBACit7CisgICAgInBhcnNlLWVycm9yIjogImVycm9y
IHBhcnNpbmcgYW5zd2VyLnRvbWw6IEludmFsaWQgQ0lEUjogbWFzayBjYW5ub3QgYmUgZ3JlYXRl
ciB0aGFuIDMyIgorfQpkaWZmIC0tZ2l0IGEvcHJveG1veC1hdXRvLWluc3RhbGxlci90ZXN0cy9y
ZXNvdXJjZXMvcGFyc2VfYW5zd2VyX2ZhaWwvaXB2NF9hbmRfc3VibmV0X21hc2tfMzMudG9tbCBi
L3Byb3htb3gtYXV0by1pbnN0YWxsZXIvdGVzdHMvcmVzb3VyY2VzL3BhcnNlX2Fuc3dlcl9mYWls
L2lwdjRfYW5kX3N1Ym5ldF9tYXNrXzMzLnRvbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMTZhNTYwZgotLS0gL2Rldi9udWxsCisrKyBiL3Byb3htb3gtYXV0by1pbnN0YWxs
ZXIvdGVzdHMvcmVzb3VyY2VzL3BhcnNlX2Fuc3dlcl9mYWlsL2lwdjRfYW5kX3N1Ym5ldF9tYXNr
XzMzLnRvbWwKQEAgLTAsMCArMSwxOCBAQAorW2dsb2JhbF0KK2tleWJvYXJkID0gImRlIgorY291
bnRyeSA9ICJhdCIKK2ZxZG4gPSAicHZlYXV0by50ZXN0aW5zdGFsbCIKK21haWx0byA9ICJtYWls
QG5vLmludmFsaWQiCit0aW1lem9uZSA9ICJFdXJvcGUvVmllbm5hIgorcm9vdF9wYXNzd29yZCA9
ICIxMjM0NTY3OCIKKworW25ldHdvcmtdCitzb3VyY2UgPSAiZnJvbS1hbnN3ZXIiCitjaWRyID0g
IjEwLjEwLjEwLjEwLzMzIgorZG5zID0gIjEwLjEwLjEwLjEiCitnYXRld2F5ID0gIjEwLjEwLjEw
LjEiCitmaWx0ZXIuSURfTkVUX05BTUUgPSAiZW5wMTI5czBmMW5wMSIKKworW2Rpc2stc2V0dXBd
CitmaWxlc3lzdGVtID0gImV4dDQiCitkaXNrX2xpc3QgPSBbInNkYSJdCmRpZmYgLS1naXQgYS9w
cm94bW94LWluc3RhbGxlci1jb21tb24vc3JjL3V0aWxzLnJzIGIvcHJveG1veC1pbnN0YWxsZXIt
Y29tbW9uL3NyYy91dGlscy5ycwppbmRleCAxZmU2YTc0Li5mZWE5OGRiIDEwMDY0NAotLS0gYS9w
cm94bW94LWluc3RhbGxlci1jb21tb24vc3JjL3V0aWxzLnJzCisrKyBiL3Byb3htb3gtaW5zdGFs
bGVyLWNvbW1vbi9zcmMvdXRpbHMucnMKQEAgLTEsNyArMSw3IEBACiB1c2Ugc3RkOjp7CisgICAg
ZXJyb3I6OkVycm9yLAogICAgIGZtdCwKICAgICBuZXQ6OntBZGRyUGFyc2VFcnJvciwgSXBBZGRy
fSwKLSAgICBudW06OlBhcnNlSW50RXJyb3IsCiAgICAgc3RyOjpGcm9tU3RyLAogfTsKIApAQCAt
MTUsMjAgKzE1LDI2IEBAIHB1YiBlbnVtIENpZHJBZGRyZXNzUGFyc2VFcnJvciB7CiAgICAgLy8v
IFRoZSBJUCBhZGRyZXNzIHBhcnQgY291bGQgbm90IGJlIHBhcnNlZC4KICAgICBJbnZhbGlkQWRk
cihBZGRyUGFyc2VFcnJvciksCiAgICAgLy8vIFRoZSBtYXNrIGNvdWxkIG5vdCBiZSBwYXJzZWQu
Ci0gICAgSW52YWxpZE1hc2soT3B0aW9uPFBhcnNlSW50RXJyb3I+KSwKKyAgICBJbnZhbGlkTWFz
ayhCb3g8ZHluIEVycm9yPiksCisgICAgLy8vIFRoZSBJUCBhZGRyZXNzIGlzIGEgbmV0d29yayBh
ZGRyZXNzLgorICAgIElzTmV0d29ya0FkZHIsCisgICAgLy8vIFRoZSBJUCBhZGRyZXNzIGlzIGEg
YnJvYWRjYXN0IGFkZHJlc3MuCisgICAgSXNCcm9hZGNhc3RBZGRyLAogfQogCiBpbXBsIGZtdDo6
RGlzcGxheSBmb3IgQ2lkckFkZHJlc3NQYXJzZUVycm9yIHsKICAgICBmbiBmbXQoJnNlbGYsIGY6
ICZtdXQgZm10OjpGb3JtYXR0ZXI8J18+KSAtPiBmbXQ6OlJlc3VsdCB7Ci0gICAgICAgIGxldCBt
c2cgPSBtYXRjaCAmc2VsZiB7CisgICAgICAgIHdyaXRlIShmLCAiSW52YWxpZCBDSURSOiAiKT87
CisKKyAgICAgICAgbWF0Y2ggc2VsZiB7CiAgICAgICAgICAgICBDaWRyQWRkcmVzc1BhcnNlRXJy
b3I6Ok5vRGVsaW1pdGVyID0+IHsKLSAgICAgICAgICAgICAgICBTdHJpbmc6OmZyb20oIk5vIGRl
bGltaXRlciBmb3Igc2VwYXJhdGluZyBhZGRyZXNzIGFuZCBtYXNrIHdhcyBmb3VuZCIpCisgICAg
ICAgICAgICAgICAgd3JpdGUhKGYsICJubyBkZWxpbWl0ZXIgZm9yIHNlcGFyYXRpbmcgYWRkcmVz
cyBhbmQgbWFzayB3YXMgZm91bmQiKQogICAgICAgICAgICAgfQotICAgICAgICAgICAgQ2lkckFk
ZHJlc3NQYXJzZUVycm9yOjpJbnZhbGlkQWRkcihhZGRyX3BhcnNlX2Vycm9yKSA9PiBmb3JtYXQh
KCJ7YWRkcl9wYXJzZV9lcnJvcn0iKSwKLSAgICAgICAgICAgIENpZHJBZGRyZXNzUGFyc2VFcnJv
cjo6SW52YWxpZE1hc2socGFyc2VfaW50X2Vycm9yKSA9PiBmb3JtYXQhKCJ7Oj99IiwgcGFyc2Vf
aW50X2Vycm9yKSwKLSAgICAgICAgfTsKLQotICAgICAgICB3cml0ZSEoZiwgIkludmFsaWQgQ0lE
Ujoge21zZ30iKQorICAgICAgICAgICAgQ2lkckFkZHJlc3NQYXJzZUVycm9yOjpJbnZhbGlkQWRk
cihlcnIpID0+IHdyaXRlIShmLCAie2Vycn0iKSwKKyAgICAgICAgICAgIENpZHJBZGRyZXNzUGFy
c2VFcnJvcjo6SW52YWxpZE1hc2soZXJyKSA9PiB3cml0ZSEoZiwgIntlcnJ9IiksCisgICAgICAg
ICAgICBDaWRyQWRkcmVzc1BhcnNlRXJyb3I6OklzTmV0d29ya0FkZHIgPT4gd3JpdGUhKGYsICJh
ZGRyZXNzIGlzIGEgbmV0d29yayBhZGRyZXNzIiksCisgICAgICAgICAgICBDaWRyQWRkcmVzc1Bh
cnNlRXJyb3I6OklzQnJvYWRjYXN0QWRkciA9PiB3cml0ZSEoZiwgImFkZHJlc3MgaXMgYSBicm9h
ZGNhc3QgYWRkcmVzcyIpLAorICAgICAgICB9CiAgICAgfQogfQogCkBAIC02MSwxMSArNjcsMTAg
QEAgaW1wbCBDaWRyQWRkcmVzcyB7CiAgICAgcHViIGZuIG5ldzxUOiBJbnRvPElwQWRkcj4+KGFk
ZHI6IFQsIG1hc2s6IHVzaXplKSAtPiBSZXN1bHQ8U2VsZiwgQ2lkckFkZHJlc3NQYXJzZUVycm9y
PiB7CiAgICAgICAgIGxldCBhZGRyID0gYWRkci5pbnRvKCk7CiAKLSAgICAgICAgaWYgbWFzayA+
IG1hc2tfbGltaXQoJmFkZHIpIHsKLSAgICAgICAgICAgIEVycihDaWRyQWRkcmVzc1BhcnNlRXJy
b3I6OkludmFsaWRNYXNrKE5vbmUpKQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgT2so
U2VsZiB7IGFkZHIsIG1hc2sgfSkKLSAgICAgICAgfQorICAgICAgICBjaGVja19tYXNrX2xpbWl0
KCZhZGRyLCBtYXNrKT87CisgICAgICAgIGNoZWNrX2FkZHJfdmFsaWRfaW5fc3VibmV0KCZhZGRy
LCBtYXNrKT87CisKKyAgICAgICAgT2soU2VsZiB7IGFkZHIsIG1hc2sgfSkKICAgICB9CiAKICAg
ICAvLy8gUmV0dXJucyBvbmx5IHRoZSBJUCBhZGRyZXNzIHBhcnQgb2YgdGhlIGFkZHJlc3MuCkBA
IC0xMDEsMTMgKzEwNiwxMiBAQCBpbXBsIEZyb21TdHIgZm9yIENpZHJBZGRyZXNzIHsKIAogICAg
ICAgICBsZXQgbWFzayA9IG1hc2sKICAgICAgICAgICAgIC5wYXJzZSgpCi0gICAgICAgICAgICAu
bWFwX2Vycih8ZXJyfCBDaWRyQWRkcmVzc1BhcnNlRXJyb3I6OkludmFsaWRNYXNrKFNvbWUoZXJy
KSkpPzsKKyAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IENpZHJBZGRyZXNzUGFyc2VFcnJvcjo6
SW52YWxpZE1hc2soQm94OjpuZXcoZXJyKSkpPzsKIAotICAgICAgICBpZiBtYXNrID4gbWFza19s
aW1pdCgmYWRkcikgewotICAgICAgICAgICAgRXJyKENpZHJBZGRyZXNzUGFyc2VFcnJvcjo6SW52
YWxpZE1hc2soTm9uZSkpCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBPayhTZWxmIHsg
YWRkciwgbWFzayB9KQotICAgICAgICB9CisgICAgICAgIGNoZWNrX21hc2tfbGltaXQoJmFkZHIs
IG1hc2spPzsKKyAgICAgICAgY2hlY2tfYWRkcl92YWxpZF9pbl9zdWJuZXQoJmFkZHIsIG1hc2sp
PzsKKworICAgICAgICBPayhTZWxmIHsgYWRkciwgbWFzayB9KQogICAgIH0KIH0KIApAQCAtMTMz
LDYgKzEzNyw0MyBAQCBmbiBtYXNrX2xpbWl0KGFkZHI6ICZJcEFkZHIpIC0+IHVzaXplIHsKICAg
ICBpZiBhZGRyLmlzX2lwdjQoKSB7IDMyIH0gZWxzZSB7IDEyOCB9CiB9CiAKK2ZuIGNoZWNrX21h
c2tfbGltaXQoYWRkcjogJklwQWRkciwgbWFzazogdXNpemUpIC0+IFJlc3VsdDwoKSwgQ2lkckFk
ZHJlc3NQYXJzZUVycm9yPiB7CisgICAgcmV0dXJuIGlmIG1hc2sgPiBtYXNrX2xpbWl0KCZhZGRy
KSB7CisgICAgICAgIEVycihDaWRyQWRkcmVzc1BhcnNlRXJyb3I6OkludmFsaWRNYXNrKAorICAg
ICAgICAgICAgIm1hc2sgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiAzMiIuaW50bygpLAorICAgICAg
ICApKQorICAgIH0gZWxzZSB7CisgICAgICAgIE9rKCgpKQorICAgIH07Cit9CisKK2ZuIGNoZWNr
X2FkZHJfdmFsaWRfaW5fc3VibmV0KGFkZHI6ICZJcEFkZHIsIG1hc2s6IHVzaXplKSAtPiBSZXN1
bHQ8KCksIENpZHJBZGRyZXNzUGFyc2VFcnJvcj4geworICAgIG1hdGNoICZhZGRyIHsKKyAgICAg
ICAgSXBBZGRyOjpWNChhZGRyX3Y0KSA9PiB7CisgICAgICAgICAgICBpZiBtYXNrID49IDMxIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gT2soKCkpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBsZXQgbnVtX2hvc3RfYml0cyA9IDMyIC0gbWFzazsKKyAgICAgICAgICAgIGxldCBob3N0
X3BhcnRfbWFzayA9ICgxdTMyIDw8IG51bV9ob3N0X2JpdHMpIC0gMTsKKworICAgICAgICAgICAg
bGV0IGlwX2JpdHMgPSB1MzI6OmZyb21fYmVfYnl0ZXMoYWRkcl92NC5vY3RldHMoKSk7CisKKyAg
ICAgICAgICAgIGxldCBuZXR3b3JrX2FkZHIgPSBpcF9iaXRzICYgIWhvc3RfcGFydF9tYXNrOwor
ICAgICAgICAgICAgbGV0IGJyb2FkY2FzdF9hZGRyID0gbmV0d29ya19hZGRyIHwgaG9zdF9wYXJ0
X21hc2s7CisKKyAgICAgICAgICAgIGlmIGlwX2JpdHMgPT0gbmV0d29ya19hZGRyIHsKKyAgICAg
ICAgICAgICAgICBFcnIoQ2lkckFkZHJlc3NQYXJzZUVycm9yOjpJc05ldHdvcmtBZGRyKQorICAg
ICAgICAgICAgfSBlbHNlIGlmIGlwX2JpdHMgPT0gYnJvYWRjYXN0X2FkZHIgeworICAgICAgICAg
ICAgICAgIEVycihDaWRyQWRkcmVzc1BhcnNlRXJyb3I6OklzQnJvYWRjYXN0QWRkcikKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgT2soKCkpCisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgSXBBZGRyOjpWNihfKSA9PiBPaygoKSksCisgICAgfQorfQorCiAv
Ly8gUG9zc2libGUgZXJyb3JzIHRoYXQgbWlnaHQgb2NjdXIgd2hlbiBwYXJzaW5nIEZRRE5zLgog
I1tkZXJpdmUoRGVidWcsIEVxLCBQYXJ0aWFsRXEpXQogcHViIGVudW0gRnFkblBhcnNlRXJyb3Ig
ewotLSAKMi4zOS41CgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCnB2ZS1kZXZlbCBtYWlsaW5nIGxpc3QKcHZlLWRldmVsQGxpc3RzLnByb3htb3guY29t
Cmh0dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3B2ZS1k
ZXZlbAo=