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 89D4F1FF164
	for <inbox@lore.proxmox.com>; Fri, 28 Mar 2025 18:17:27 +0100 (CET)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id 9EAE1926D;
	Fri, 28 Mar 2025 18:14:23 +0100 (CET)
From: Gabriel Goller <g.goller@proxmox.com>
To: pve-devel@lists.proxmox.com
Date: Fri, 28 Mar 2025 18:12:52 +0100
Message-Id: <20250328171340.885413-5-g.goller@proxmox.com>
X-Mailer: git-send-email 2.39.5
In-Reply-To: <20250328171340.885413-1-g.goller@proxmox.com>
References: <20250328171340.885413-1-g.goller@proxmox.com>
MIME-Version: 1.0
X-SPAM-LEVEL: Spam detection results:  0
 AWL -0.025 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] [PATCH proxmox-ve-rs 03/17] network-types: add
 openfabric NET type
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>

VGhlIE5ldHdvcmsgRW50aXR5IFRpdGxlIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgaW4gb3BlbmZh
YnJpYywgYnV0IGl0J3MKYSBnZW5lcmljIGNvbnN0cnVjdCwgd2hpY2ggaW4gdGhlIGZ1dHVyZSwg
d2lsbCBhbHNvIGJlIHVzZWQgaW4gSVMtSVMKKHdoZW4gaXQncyBwb3J0ZWQgaW4gcnVzdCkuCkFs
c28gaW5jbHVkZSBoZWxwZXJzIHRoYXQgY29udmVydCBmcm9tIElQdjQgYW5kIElQdjYgdG8gTkVU
IGJ5IHVzaW5nIHRoZQpCaW5hcnkgQ29kZWQgRGVjaW1hbHMgKEJDRCkuIFRoZSBJUHY0IGNvbnZl
cnNpb24gaXMgcXVpdGUKc3RyYWlnaHRmb3J3YXJkLCB5b3UganVzdCBwYWQgdXAgdGhlIG51bWJl
cnMgYW5kIHRoZW4gc3BsaXQgdGhlIGFkZHJlc3MKaW4gMyBxdWFydGV0cyB3aGljaCBpcyB5b3Vy
IFN5c3RlbUlkLiBPbiBJUHY2IHlvdSB0YWtlIHRoZSBsYXN0IDMKc2VnbWVudHMsIHdoaWNoIGNh
biBiZSBkaXJlY3RseSBjb252ZXJ0ZWQgaW50byB0aGUgTkVUIGFkZHJlc3MuCgpUaGUgTkVUIGlz
IGRlZmluZWQgaW4gYSBJU08gc3RhbmRhcmQgYW5kIGFsc28gYnJpZWZseSBleHBsYWluZWQgaGVy
ZToKaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMxMTQyI3NlY3Rpb24t
Ny4xLjEKClNpZ25lZC1vZmYtYnk6IEdhYnJpZWwgR29sbGVyIDxnLmdvbGxlckBwcm94bW94LmNv
bT4KLS0tCiBwcm94bW94LW5ldHdvcmstdHlwZXMvc3JjL2xpYi5ycyB8ICAgMSArCiBwcm94bW94
LW5ldHdvcmstdHlwZXMvc3JjL25ldC5ycyB8IDM4MiArKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDM4MyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx
MDA2NDQgcHJveG1veC1uZXR3b3JrLXR5cGVzL3NyYy9uZXQucnMKCmRpZmYgLS1naXQgYS9wcm94
bW94LW5ldHdvcmstdHlwZXMvc3JjL2xpYi5ycyBiL3Byb3htb3gtbmV0d29yay10eXBlcy9zcmMv
bGliLnJzCmluZGV4IGFmY2VhYjAxODMxMi4uNzk3MDg0ZmVjNDIzIDEwMDY0NAotLS0gYS9wcm94
bW94LW5ldHdvcmstdHlwZXMvc3JjL2xpYi5ycworKysgYi9wcm94bW94LW5ldHdvcmstdHlwZXMv
c3JjL2xpYi5ycwpAQCAtMSwyICsxLDMgQEAKIHB1YiBtb2QgaG9zdG5hbWU7CitwdWIgbW9kIG5l
dDsKIHB1YiBtb2Qgb3BlbmZhYnJpYzsKZGlmZiAtLWdpdCBhL3Byb3htb3gtbmV0d29yay10eXBl
cy9zcmMvbmV0LnJzIGIvcHJveG1veC1uZXR3b3JrLXR5cGVzL3NyYy9uZXQucnMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45N2UwMTkzODNiY2MKLS0tIC9kZXYvbnVs
bAorKysgYi9wcm94bW94LW5ldHdvcmstdHlwZXMvc3JjL25ldC5ycwpAQCAtMCwwICsxLDM4MiBA
QAordXNlIHN0ZDo6eworICAgIGZtdDo6RGlzcGxheSwKKyAgICBuZXQ6OntJcEFkZHIsIElwdjRB
ZGRyLCBJcHY2QWRkcn0sCisgICAgc3RyOjpGcm9tU3RyLAorfTsKKwordXNlIHNlcmRlOjpTZXJp
YWxpemU7Cit1c2Ugc2VyZGVfd2l0aDo6e0Rlc2VyaWFsaXplRnJvbVN0ciwgU2VyaWFsaXplRGlz
cGxheX07Cit1c2UgdGhpc2Vycm9yOjpFcnJvcjsKKworI1tkZXJpdmUoRXJyb3IsIERlYnVnKV0K
K3B1YiBlbnVtIE5ldEVycm9yIHsKKyAgICAjW2Vycm9yKCJTb21lIG9jdGV0cyBhcmUgbWlzc2lu
ZyIpXQorICAgIFdyb25nTGVuZ3RoLAorICAgICNbZXJyb3IoIlRoZSBORVQgc2VsZWN0b3IgbXVz
dCBiZSB0d28gY2hhcmFjdGVycyB3aWRlIGFuZCBiZSAwMCIpXQorICAgIEludmFsaWROZXRTZWxl
Y3RvciwKKyAgICAjW2Vycm9yKCJJbnZhbGlkIEFGSSAod3Jvbmcgc2l6ZSBvciBwb3NpdGlvbiki
KV0KKyAgICBJbnZhbGlkQUZJLAorICAgICNbZXJyb3IoIkludmFsaWQgQXJlYSAod3Jvbmcgc2l6
ZSBvciBwb3NpdGlvbikiKV0KKyAgICBJbnZhbGlkQXJlYSwKKyAgICAjW2Vycm9yKCJJbnZhbGlk
IFN5c3RlbUlkICh3cm9uZyBzaXplIG9yIHBvc2l0aW9uKSIpXQorICAgIEludmFsaWRTeXN0ZW1J
ZCwKK30KKworLy8vIEFkZHJlc3MgRmFtaWx5IGF1dGhvcml0eSBJZGVudGlmaWVyIC0gNDkgVGhl
IEFGSSB2YWx1ZSA0OSBpcyB3aGF0IElTLUlTIChhbmQgb3BlbmZhYnJpYykgdXNlcworLy8vIGZv
ciBwcml2YXRlIGFkZHJlc3NpbmcuCisjW2Rlcml2ZSgKKyAgICBEZWJ1ZywgRGVzZXJpYWxpemVG
cm9tU3RyLCBTZXJpYWxpemVEaXNwbGF5LCBDbG9uZSwgSGFzaCwgUGFydGlhbEVxLCBFcSwgUGFy
dGlhbE9yZCwgT3JkLAorKV0KK3N0cnVjdCBOZXRBRkkoU3RyaW5nKTsKKworaW1wbCBEZWZhdWx0
IGZvciBOZXRBRkkgeworICAgIGZuIGRlZmF1bHQoKSAtPiBTZWxmIHsKKyAgICAgICAgU2VsZigi
NDkiLnRvX293bmVkKCkpCisgICAgfQorfQorCitpbXBsIERpc3BsYXkgZm9yIE5ldEFGSSB7Cisg
ICAgZm4gZm10KCZzZWxmLCBmOiAmbXV0IHN0ZDo6Zm10OjpGb3JtYXR0ZXI8J18+KSAtPiBzdGQ6
OmZtdDo6UmVzdWx0IHsKKyAgICAgICAgd3JpdGUhKGYsICJ7fSIsIHNlbGYuMCkKKyAgICB9Cit9
CisKK2ltcGwgRnJvbVN0ciBmb3IgTmV0QUZJIHsKKyAgICB0eXBlIEVyciA9IE5ldEVycm9yOwor
CisgICAgZm4gZnJvbV9zdHIoczogJnN0cikgLT4gUmVzdWx0PFNlbGYsIFNlbGY6OkVycj4gewor
ICAgICAgICBpZiBzLmxlbigpICE9IDIgeworICAgICAgICAgICAgRXJyKE5ldEVycm9yOjpJbnZh
bGlkQUZJKQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgT2soU2VsZihzLnRvX293bmVk
KCkpKQorICAgICAgICB9CisgICAgfQorfQorCisvLy8gQXJlYSBpZGVudGlmaWVyOiAwMDAxIElT
LUlTIGFyZWEgbnVtYmVyIChudW1lcmljYWwgYXJlYSAxKQorLy8vIFRoZSBzZWNvbmQgcGFydCAo
c3lzdGVtKSBvZiB0aGUgYG5ldGAgaWRlbnRpZmllci4gRXZlcnkgbm9kZSBoYXMgdG8gaGF2ZSBh
IGRpZmZlcmVudCBzeXN0ZW0KKy8vLyBudW1iZXIuCisjW2Rlcml2ZShEZWJ1ZywgRGVzZXJpYWxp
emVGcm9tU3RyLCBTZXJpYWxpemUsIENsb25lLCBIYXNoLCBQYXJ0aWFsRXEsIEVxLCBQYXJ0aWFs
T3JkLCBPcmQpXQorc3RydWN0IE5ldEFyZWEoU3RyaW5nKTsKKworaW1wbCBEZWZhdWx0IGZvciBO
ZXRBcmVhIHsKKyAgICBmbiBkZWZhdWx0KCkgLT4gU2VsZiB7CisgICAgICAgIFNlbGYoIjAwMDEi
LnRvX293bmVkKCkpCisgICAgfQorfQorCitpbXBsIERpc3BsYXkgZm9yIE5ldEFyZWEgeworICAg
IGZuIGZtdCgmc2VsZiwgZjogJm11dCBzdGQ6OmZtdDo6Rm9ybWF0dGVyPCdfPikgLT4gc3RkOjpm
bXQ6OlJlc3VsdCB7CisgICAgICAgIHdyaXRlIShmLCAie30iLCBzZWxmLjApCisgICAgfQorfQor
CitpbXBsIEZyb21TdHIgZm9yIE5ldEFyZWEgeworICAgIHR5cGUgRXJyID0gTmV0RXJyb3I7CisK
KyAgICBmbiBmcm9tX3N0cihzOiAmc3RyKSAtPiBSZXN1bHQ8U2VsZiwgU2VsZjo6RXJyPiB7Cisg
ICAgICAgIGlmIHMubGVuKCkgIT0gNCB7CisgICAgICAgICAgICBFcnIoTmV0RXJyb3I6OkludmFs
aWRBcmVhKQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgT2soU2VsZihzLnRvX293bmVk
KCkpKQorICAgICAgICB9CisgICAgfQorfQorCisvLy8gU3lzdGVtIGlkZW50aWZpZXI6IDE5MjEu
NjgwMC4xMDAyIC0gZm9yIHN5c3RlbSBpZGVudGlmaWVycyB3ZSByZWNvbW1lbmQgdG8gdXNlIElQ
IGFkZHJlc3Mgb3IKKy8vLyBNQUMgYWRkcmVzcyBvZiB0aGUgcm91dGVyIGl0c2VsZi4gVGhlIHdh
eSB0byBjb25zdHJ1Y3QgdGhpcyBpcyB0byBrZWVwIGFsbCBvZiB0aGUgemVyb2VzIG9mIHRoZQor
Ly8vIHJvdXRlciBJUCBhZGRyZXNzLCBhbmQgdGhlbiBjaGFuZ2UgdGhlIHBlcmlvZHMgZnJvbSBi
ZWluZyBldmVyeSB0aHJlZSBudW1iZXJzIHRvIGV2ZXJ5IGZvdXIKKy8vLyBudW1iZXJzLiBUaGUg
YWRkcmVzcyB0aGF0IGlzIGxpc3RlZCBoZXJlIGlzIDE5Mi4xNjguMS4yLCB3aGljaCBpZiBleHBh
bmRlZCB3aWxsIHR1cm4gaW50bworLy8vIDE5Mi4xNjguMDAxLjAwMi4gVGhlbiBhbGwgb25lIGhh
cyB0byBkbyBpcyBtb3ZlIHRoZSBkb3RzIHRvIGhhdmUgZm91ciBudW1iZXJzIGluc3RlYWQgb2Yg
dGhyZWUuCisvLy8gVGhpcyBnaXZlcyB1cyAxOTIxLjY4MDAuMTAwMi4KKyNbZGVyaXZlKERlYnVn
LCBEZXNlcmlhbGl6ZUZyb21TdHIsIFNlcmlhbGl6ZSwgQ2xvbmUsIEhhc2gsIFBhcnRpYWxFcSwg
RXEsIFBhcnRpYWxPcmQsIE9yZCldCitzdHJ1Y3QgTmV0U3lzdGVtSWQoU3RyaW5nKTsKKworaW1w
bCBEaXNwbGF5IGZvciBOZXRTeXN0ZW1JZCB7CisgICAgZm4gZm10KCZzZWxmLCBmOiAmbXV0IHN0
ZDo6Zm10OjpGb3JtYXR0ZXI8J18+KSAtPiBzdGQ6OmZtdDo6UmVzdWx0IHsKKyAgICAgICAgd3Jp
dGUhKGYsICJ7fSIsIHNlbGYuMCkKKyAgICB9Cit9CisKK2ltcGwgRnJvbVN0ciBmb3IgTmV0U3lz
dGVtSWQgeworICAgIHR5cGUgRXJyID0gTmV0RXJyb3I7CisKKyAgICBmbiBmcm9tX3N0cihzOiAm
c3RyKSAtPiBSZXN1bHQ8U2VsZiwgU2VsZjo6RXJyPiB7CisgICAgICAgIGlmIHMuc3BsaXQoIi4i
KS5jb3VudCgpICE9IDMKKyAgICAgICAgICAgIHx8IHMuc3BsaXQoIi4iKS5hbnkofHNlZ21lbnR8
IHsKKyAgICAgICAgICAgICAgICBzZWdtZW50LmxlbigpICE9IDQgfHwgIXNlZ21lbnQuY2hhcnMo
KS5hbGwofGN8IGMuaXNfYXNjaWlfaGV4ZGlnaXQoKSkKKyAgICAgICAgICAgIH0pCisgICAgICAg
IHsKKyAgICAgICAgICAgIEVycihOZXRFcnJvcjo6SW52YWxpZFN5c3RlbUlkKQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgT2soU2VsZihzLnRvX293bmVkKCkpKQorICAgICAgICB9Cisg
ICAgfQorfQorCisvLy8gQ29udmVydCBJUC1BZGRyZXNzIHRvIGEgTkVUIGFkZHJlc3Mgd2l0aCB0
aGUgZGVmYXVsdCBhZmksIGFyZWEgYW5kIHNlbGVjdG9yIHZhbHVlcy4gTm90ZSB0aGF0IGEKKy8v
LyB2YWxpZCBJcHY0QWRkciBpcyBhbHdheXMgYSB2YWxpZCBTeXN0ZW1JZCBhcyB3ZWxsLgoraW1w
bCBGcm9tPElwdjRBZGRyPiBmb3IgTmV0U3lzdGVtSWQgeworICAgIGZuIGZyb20odmFsdWU6IElw
djRBZGRyKSAtPiBTZWxmIHsKKyAgICAgICAgbGV0IG9jdGV0cyA9IHZhbHVlLm9jdGV0cygpOwor
CisgICAgICAgIGxldCBzeXN0ZW1faWRfc3RyID0gZm9ybWF0ISgKKyAgICAgICAgICAgICJ7OjAz
fXs6MDF9Lns6MDJ9ezowMn0uezowMX17OjAzfSIsCisgICAgICAgICAgICBvY3RldHNbMF0sCisg
ICAgICAgICAgICBvY3RldHNbMV0gLyAxMDAsCisgICAgICAgICAgICBvY3RldHNbMV0gJSAxMDAs
CisgICAgICAgICAgICBvY3RldHNbMl0gLyAxMCwKKyAgICAgICAgICAgIG9jdGV0c1syXSAlIDEw
LAorICAgICAgICAgICAgb2N0ZXRzWzNdCisgICAgICAgICk7CisKKyAgICAgICAgU2VsZihzeXN0
ZW1faWRfc3RyKQorICAgIH0KK30KKworLy8vIENvbnZlcnQgSVB2Ni1BZGRyZXNzIHRvIGEgTkVU
IGFkZHJlc3Mgd2l0aCB0aGUgZGVmYXVsdCBhZmksIGFyZWEgYW5kIHNlbGVjdG9yIHZhbHVlcy4g
Tm90ZSB0aGF0IGEKKy8vLyB2YWxpZCBJcHY2QWRkciBpcyBhbHdheXMgYSB2YWxpZCBTeXN0ZW1J
ZCBhcyB3ZWxsLgoraW1wbCBGcm9tPElwdjZBZGRyPiBmb3IgTmV0U3lzdGVtSWQgeworICAgIGZu
IGZyb20odmFsdWU6IElwdjZBZGRyKSAtPiBTZWxmIHsKKyAgICAgICAgbGV0IHNlZ21lbnRzID0g
dmFsdWUuc2VnbWVudHMoKTsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVXNlIHRoZSBsYXN0IDMg
c2VnbWVudHMgKG91dCBvZiA4KSBvZiB0aGUgSVB2NiBhZGRyZXNzCisgICAgICAgIGxldCBzeXN0
ZW1faWRfc3RyID0gZm9ybWF0ISgKKyAgICAgICAgICAgICJ7OjA0eH0uezowNHh9Lns6MDR4fSIs
CisgICAgICAgICAgICBzZWdtZW50c1s1XSwgc2VnbWVudHNbNl0sIHNlZ21lbnRzWzddCisgICAg
ICAgICk7CisKKyAgICAgICAgU2VsZihzeXN0ZW1faWRfc3RyKQorICAgIH0KK30KKworLy8vIE5F
VCBzZWxlY3RvcjogMDAgTXVzdCBhbHdheXMgYmUgMDAuIFRoaXMgc2V0dGluZyBpbmRpY2F0ZXMg
4oCcdGhpcyBzeXN0ZW3igJ0gb3Ig4oCcbG9jYWwgc3lzdGVtLuKAnQorI1tkZXJpdmUoRGVidWcs
IERlc2VyaWFsaXplRnJvbVN0ciwgU2VyaWFsaXplLCBDbG9uZSwgSGFzaCwgUGFydGlhbEVxLCBF
cSwgUGFydGlhbE9yZCwgT3JkKV0KK3N0cnVjdCBOZXRTZWxlY3RvcihTdHJpbmcpOworCitpbXBs
IERlZmF1bHQgZm9yIE5ldFNlbGVjdG9yIHsKKyAgICBmbiBkZWZhdWx0KCkgLT4gU2VsZiB7Cisg
ICAgICAgIFNlbGYoIjAwIi50b19vd25lZCgpKQorICAgIH0KK30KKworaW1wbCBEaXNwbGF5IGZv
ciBOZXRTZWxlY3RvciB7CisgICAgZm4gZm10KCZzZWxmLCBmOiAmbXV0IHN0ZDo6Zm10OjpGb3Jt
YXR0ZXI8J18+KSAtPiBzdGQ6OmZtdDo6UmVzdWx0IHsKKyAgICAgICAgd3JpdGUhKGYsICJ7fSIs
IHNlbGYuMCkKKyAgICB9Cit9CisKK2ltcGwgRnJvbVN0ciBmb3IgTmV0U2VsZWN0b3IgeworICAg
IHR5cGUgRXJyID0gTmV0RXJyb3I7CisKKyAgICBmbiBmcm9tX3N0cihzOiAmc3RyKSAtPiBSZXN1
bHQ8U2VsZiwgU2VsZjo6RXJyPiB7CisgICAgICAgIGlmIHMubGVuKCkgIT0gMiB7CisgICAgICAg
ICAgICBFcnIoTmV0RXJyb3I6OkludmFsaWROZXRTZWxlY3RvcikKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIE9rKFNlbGYocy50b19vd25lZCgpKSkKKyAgICAgICAgfQorICAgIH0KK30K
KworLy8vIFRoZSBPcGVuRmFicmljIE5ldC4KKy8vLworLy8vIEV2ZXJ5IE9wZW5GYWJyaWMgbm9k
ZSBhbmQgZmFicmljIGlzIGlkZW50aWZpZWQgdGhyb3VnaCB0aGUgTkVULiBJdCBoYXMgYSBuZXR3
b3JrIGFuZCBhIGhvc3QKKy8vLyBwYXJ0LgorLy8vIFRoZSBmaXJzdCBwYXJ0IGlzIHRoZSBuZXR3
b3JrIHBhcnQgKGFsc28gY2FsbGVkIGFyZWEpLiBUaGUgZW50aXJlIE9wZW5GYWJyaWMgZmFicmlj
IGhhcyB0byBoYXZlCisvLy8gdGhlIHNhbWUgbmV0d29yayBwYXJ0IChhcmVhKS4gVGhlIGZpcnN0
IG51bWJlciBpcyB0aGUgW2BOZXRBRklgXSBhbmQgdGhlIHNlY29uZCBpcyB0aGUgW2BOZXRBcmVh
YF0uCisvLy8gZS5nLjogIjQ5LjAwMDEiCisvLy8gVGhlIHNlY29uZCBwYXJ0IGlzIHRoZSBob3N0
IHBhcnQsIHdoaWNoIGhhcyB0byBkaWZmZXIgb24gZXZlcnkgbm9kZSBpbiB0aGUgZmFicmljLiBJ
dCBjb250YWlucworLy8vIHRoZSBbYE5ldFN5c3RlbUlkYF0gYW5kIHRoZSBbYE5ldFNlbGVjdG9y
YF0uCisvLy8gZS5nLjogIjE5MjEuNjgwMC4xMDAyLjAwIgorI1tkZXJpdmUoCisgICAgRGVidWcs
IERlc2VyaWFsaXplRnJvbVN0ciwgU2VyaWFsaXplRGlzcGxheSwgQ2xvbmUsIEhhc2gsIFBhcnRp
YWxFcSwgRXEsIFBhcnRpYWxPcmQsIE9yZCwKKyldCitwdWIgc3RydWN0IE5ldCB7CisgICAgYWZp
OiBOZXRBRkksCisgICAgYXJlYTogTmV0QXJlYSwKKyAgICBzeXN0ZW06IE5ldFN5c3RlbUlkLAor
ICAgIHNlbGVjdG9yOiBOZXRTZWxlY3RvciwKK30KKworaW1wbCBGcm9tU3RyIGZvciBOZXQgewor
ICAgIHR5cGUgRXJyID0gTmV0RXJyb3I7CisKKyAgICBmbiBmcm9tX3N0cihzOiAmc3RyKSAtPiBS
ZXN1bHQ8U2VsZiwgU2VsZjo6RXJyPiB7CisgICAgICAgIGlmIHMuc3BsaXQoIi4iKS5jb3VudCgp
ICE9IDYgeworICAgICAgICAgICAgcmV0dXJuIEVycihOZXRFcnJvcjo6V3JvbmdMZW5ndGgpOwor
ICAgICAgICB9CisgICAgICAgIGxldCBtdXQgaXRlciA9IHMuc3BsaXQoIi4iKTsKKyAgICAgICAg
bGV0IGFmaSA9IGl0ZXIubmV4dCgpLm9rX29yKE5ldEVycm9yOjpXcm9uZ0xlbmd0aCk/OworICAg
ICAgICBsZXQgYXJlYSA9IGl0ZXIubmV4dCgpLm9rX29yKE5ldEVycm9yOjpXcm9uZ0xlbmd0aCk/
OworICAgICAgICBsZXQgc3lzdGVtID0gZm9ybWF0ISgKKyAgICAgICAgICAgICJ7fS57fS57fSIs
CisgICAgICAgICAgICBpdGVyLm5leHQoKS5va19vcihOZXRFcnJvcjo6V3JvbmdMZW5ndGgpPywK
KyAgICAgICAgICAgIGl0ZXIubmV4dCgpLm9rX29yKE5ldEVycm9yOjpXcm9uZ0xlbmd0aCk/LAor
ICAgICAgICAgICAgaXRlci5uZXh0KCkub2tfb3IoTmV0RXJyb3I6Oldyb25nTGVuZ3RoKT8KKyAg
ICAgICAgKTsKKyAgICAgICAgbGV0IHNlbGVjdG9yID0gaXRlci5uZXh0KCkub2tfb3IoTmV0RXJy
b3I6Oldyb25nTGVuZ3RoKT87CisgICAgICAgIE9rKFNlbGYgeworICAgICAgICAgICAgYWZpOiBh
ZmkucGFyc2UoKT8sCisgICAgICAgICAgICBhcmVhOiBhcmVhLnBhcnNlKCk/LAorICAgICAgICAg
ICAgc3lzdGVtOiBzeXN0ZW0ucGFyc2UoKT8sCisgICAgICAgICAgICBzZWxlY3Rvcjogc2VsZWN0
b3IucGFyc2UoKT8sCisgICAgICAgIH0pCisgICAgfQorfQorCisvLy8gRGVmYXVsdCBORVQgYWRk
cmVzcyBmb3IgYSBnaXZlbiBJcHY0QWRkci4gVGhpcyBhZGRzIHRoZSBkZWZhdWx0IGFmaSwgYXJl
YSBhbmQgc2VsZWN0b3IgdG8gdGhlCisvLy8gYWRkcmVzcy4KK2ltcGwgRnJvbTxJcHY0QWRkcj4g
Zm9yIE5ldCB7CisgICAgZm4gZnJvbSh2YWx1ZTogSXB2NEFkZHIpIC0+IFNlbGYgeworICAgICAg
ICBTZWxmIHsKKyAgICAgICAgICAgIGFmaTogTmV0QUZJOjpkZWZhdWx0KCksCisgICAgICAgICAg
ICBhcmVhOiBOZXRBcmVhOjpkZWZhdWx0KCksCisgICAgICAgICAgICBzeXN0ZW06IHZhbHVlLmlu
dG8oKSwKKyAgICAgICAgICAgIHNlbGVjdG9yOiBOZXRTZWxlY3Rvcjo6ZGVmYXVsdCgpLAorICAg
ICAgICB9CisgICAgfQorfQorCisvLy8gRGVmYXVsdCBORVQgYWRkcmVzcyBmb3IgYSBnaXZlbiBJ
cHY2QWRkci4gVGhpcyBhZGRzIHRoZSBkZWZhdWx0IGFmaSwgYXJlYSBhbmQgc2VsZWN0b3IgdG8g
dGhlCisvLy8gYWRkcmVzcy4KK2ltcGwgRnJvbTxJcHY2QWRkcj4gZm9yIE5ldCB7CisgICAgZm4g
ZnJvbSh2YWx1ZTogSXB2NkFkZHIpIC0+IFNlbGYgeworICAgICAgICBTZWxmIHsKKyAgICAgICAg
ICAgIGFmaTogTmV0QUZJOjpkZWZhdWx0KCksCisgICAgICAgICAgICBhcmVhOiBOZXRBcmVhOjpk
ZWZhdWx0KCksCisgICAgICAgICAgICBzeXN0ZW06IHZhbHVlLmludG8oKSwKKyAgICAgICAgICAg
IHNlbGVjdG9yOiBOZXRTZWxlY3Rvcjo6ZGVmYXVsdCgpLAorICAgICAgICB9CisgICAgfQorfQor
CisvLy8gRGVmYXVsdCBORVQgYWRkcmVzcyBmb3IgYSBnaXZlbiBJcEFkZHIgKGNhbiBiZSBlaXRo
ZXIgSXB2NCBvciBJcHY2KS4gVGhpcyBhZGRzIHRoZSBkZWZhdWx0IGFmaSwKKy8vLyBhcmVhIGFu
ZCBzZWxlY3RvciB0byB0aGUgYWRkcmVzcy4KK2ltcGwgRnJvbTxJcEFkZHI+IGZvciBOZXQgewor
ICAgIGZuIGZyb20odmFsdWU6IElwQWRkcikgLT4gU2VsZiB7CisgICAgICAgIFNlbGYgeworICAg
ICAgICAgICAgYWZpOiBOZXRBRkk6OmRlZmF1bHQoKSwKKyAgICAgICAgICAgIGFyZWE6IE5ldEFy
ZWE6OmRlZmF1bHQoKSwKKyAgICAgICAgICAgIHN5c3RlbTogbWF0Y2ggdmFsdWUgeworICAgICAg
ICAgICAgICAgIElwQWRkcjo6VjQoaXB2NF9hZGRyKSA9PiBpcHY0X2FkZHIuaW50bygpLAorICAg
ICAgICAgICAgICAgIElwQWRkcjo6VjYoaXB2Nl9hZGRyKSA9PiBpcHY2X2FkZHIuaW50bygpLAor
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHNlbGVjdG9yOiBOZXRTZWxlY3Rvcjo6ZGVmYXVs
dCgpLAorICAgICAgICB9CisgICAgfQorfQorCitpbXBsIERpc3BsYXkgZm9yIE5ldCB7CisgICAg
Zm4gZm10KCZzZWxmLCBmOiAmbXV0IHN0ZDo6Zm10OjpGb3JtYXR0ZXI8J18+KSAtPiBzdGQ6OmZt
dDo6UmVzdWx0IHsKKyAgICAgICAgd3JpdGUhKAorICAgICAgICAgICAgZiwKKyAgICAgICAgICAg
ICJ7fS57fS57fS57fSIsCisgICAgICAgICAgICBzZWxmLmFmaSwgc2VsZi5hcmVhLCBzZWxmLnN5
c3RlbSwgc2VsZi5zZWxlY3RvcgorICAgICAgICApCisgICAgfQorfQorCisjW2NmZyh0ZXN0KV0K
K21vZCB0ZXN0cyB7CisgICAgdXNlIHN1cGVyOjoqOworCisgICAgI1t0ZXN0XQorICAgIGZuIHRl
c3RfbmV0X2Zyb21fc3RyKCkgeworICAgICAgICBsZXQgaW5wdXQgPSAiNDkuMDAwMS4xOTIxLjY4
MDAuMTAwMi4wMCI7CisgICAgICAgIGxldCBuZXQgPSBpbnB1dC5wYXJzZTo6PE5ldD4oKS5leHBl
Y3QoInRoaXMgbmV0IHNob3VsZCBwYXJzZSIpOworICAgICAgICBhc3NlcnRfZXEhKG5ldC5hZmks
IE5ldEFGSSgiNDkiLnRvX293bmVkKCkpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShuZXQuYXJlYSwg
TmV0QXJlYSgiMDAwMSIudG9fb3duZWQoKSkpOworICAgICAgICBhc3NlcnRfZXEhKG5ldC5zeXN0
ZW0sIE5ldFN5c3RlbUlkKCIxOTIxLjY4MDAuMTAwMiIudG9fb3duZWQoKSkpOworICAgICAgICBh
c3NlcnRfZXEhKG5ldC5zZWxlY3RvciwgTmV0U2VsZWN0b3IoIjAwIi50b19vd25lZCgpKSk7CisK
KyAgICAgICAgbGV0IGlucHV0ID0gIjQ1LjAyMDAuMDEwMC4xMDAxLmJhMWYuMDEiOworICAgICAg
ICBsZXQgbmV0ID0gaW5wdXQucGFyc2U6OjxOZXQ+KCkuZXhwZWN0KCJ0aGlzIG5ldCBzaG91bGQg
cGFyc2UiKTsKKyAgICAgICAgYXNzZXJ0X2VxIShuZXQuYWZpLCBOZXRBRkkoIjQ1Ii50b19vd25l
ZCgpKSk7CisgICAgICAgIGFzc2VydF9lcSEobmV0LmFyZWEsIE5ldEFyZWEoIjAyMDAiLnRvX293
bmVkKCkpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShuZXQuc3lzdGVtLCBOZXRTeXN0ZW1JZCgiMDEw
MC4xMDAxLmJhMWYiLnRvX293bmVkKCkpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShuZXQuc2VsZWN0
b3IsIE5ldFNlbGVjdG9yKCIwMSIudG9fb3duZWQoKSkpOworICAgIH0KKworICAgICNbdGVzdF0K
KyAgICBmbiB0ZXN0X25ldF9mcm9tX3N0cl9mYWlsZWQoKSB7CisgICAgICAgIGxldCBpbnB1dCA9
ICI0OS4wMDAxLjE5MjEuNjgwMC4xMDAyLjAwMCI7CisgICAgICAgIGFzc2VydCEobWF0Y2hlcyEo
CisgICAgICAgICAgICBpbnB1dC5wYXJzZTo6PE5ldD4oKSwKKyAgICAgICAgICAgIEVycihOZXRF
cnJvcjo6SW52YWxpZE5ldFNlbGVjdG9yKQorICAgICAgICApKTsKKworICAgICAgICBsZXQgaW5w
dXQgPSAiNDkuMDAwMS4xOTIxLjY4MDAuMTAwMi4wMC4wMCI7CisgICAgICAgIGFzc2VydCEobWF0
Y2hlcyEoaW5wdXQucGFyc2U6OjxOZXQ+KCksIEVycihOZXRFcnJvcjo6V3JvbmdMZW5ndGgpKSk7
CisKKyAgICAgICAgbGV0IGlucHV0ID0gIjQ5LjAwMDEuMTkyMS42ODAwLjEwMDAyLjAwIjsKKyAg
ICAgICAgYXNzZXJ0IShtYXRjaGVzISgKKyAgICAgICAgICAgIGlucHV0LnBhcnNlOjo8TmV0Pigp
LAorICAgICAgICAgICAgRXJyKE5ldEVycm9yOjpJbnZhbGlkU3lzdGVtSWQpCisgICAgICAgICkp
OworCisgICAgICAgIGxldCBpbnB1dCA9ICI0OS4wMDAxLjE5MjEuNjgwMC4xejAyLjAwIjsKKyAg
ICAgICAgYXNzZXJ0IShtYXRjaGVzISgKKyAgICAgICAgICAgIGlucHV0LnBhcnNlOjo8TmV0Pigp
LAorICAgICAgICAgICAgRXJyKE5ldEVycm9yOjpJbnZhbGlkU3lzdGVtSWQpCisgICAgICAgICkp
OworCisgICAgICAgIGxldCBpbnB1dCA9ICI0MDkuMDAwMS4xOTIxLjY4MDAuMTAwMi4wMCI7Cisg
ICAgICAgIGFzc2VydCEobWF0Y2hlcyEoaW5wdXQucGFyc2U6OjxOZXQ+KCksIEVycihOZXRFcnJv
cjo6SW52YWxpZEFGSSkpKTsKKworICAgICAgICBsZXQgaW5wdXQgPSAiNDkuMDAwMDEuMTkyMS42
ODAwLjEwMDIuMDAiOworICAgICAgICBhc3NlcnQhKG1hdGNoZXMhKGlucHV0LnBhcnNlOjo8TmV0
PigpLCBFcnIoTmV0RXJyb3I6OkludmFsaWRBcmVhKSkpOworICAgIH0KKworICAgICNbdGVzdF0K
KyAgICBmbiB0ZXN0X25ldF9kaXNwbGF5KCkgeworICAgICAgICBsZXQgbmV0ID0gTmV0IHsKKyAg
ICAgICAgICAgIGFmaTogTmV0QUZJKCI0OSIudG9fb3duZWQoKSksCisgICAgICAgICAgICBhcmVh
OiBOZXRBcmVhKCIwMDAxIi50b19vd25lZCgpKSwKKyAgICAgICAgICAgIHN5c3RlbTogTmV0U3lz
dGVtSWQoIjE5MjEuNjgwMC4xMDAyIi50b19vd25lZCgpKSwKKyAgICAgICAgICAgIHNlbGVjdG9y
OiBOZXRTZWxlY3RvcigiMDAiLnRvX293bmVkKCkpLAorICAgICAgICB9OworICAgICAgICBhc3Nl
cnRfZXEhKGZvcm1hdCEoIntuZXR9IiksICI0OS4wMDAxLjE5MjEuNjgwMC4xMDAyLjAwIik7Cisg
ICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfbmV0X2Zyb21faXB2NCgpIHsKKyAgICAg
ICAgbGV0IGlwOiBJcHY0QWRkciA9ICIxOTIuMTY4LjEuMTAwIi5wYXJzZSgpLnVud3JhcCgpOwor
ICAgICAgICBsZXQgbmV0OiBOZXQgPSBpcC5pbnRvKCk7CisgICAgICAgIGFzc2VydF9lcSEoZm9y
bWF0ISgie25ldH0iKSwgIjQ5LjAwMDEuMTkyMS42ODAwLjExMDAuMDAiKTsKKworICAgICAgICBs
ZXQgaXAxOiBJcHY0QWRkciA9ICIxMC4xMC4yLjI0NSIucGFyc2UoKS51bndyYXAoKTsKKyAgICAg
ICAgbGV0IG5ldDE6IE5ldCA9IGlwMS5pbnRvKCk7CisgICAgICAgIGFzc2VydF9lcSEoZm9ybWF0
ISgie25ldDF9IiksICI0OS4wMDAxLjAxMDAuMTAwMC4yMjQ1LjAwIik7CisKKyAgICAgICAgbGV0
IGlwMjogSXB2NEFkZHIgPSAiMS4xLjEuMSIucGFyc2UoKS51bndyYXAoKTsKKyAgICAgICAgbGV0
IG5ldDI6IE5ldCA9IGlwMi5pbnRvKCk7CisgICAgICAgIGFzc2VydF9lcSEoZm9ybWF0ISgie25l
dDJ9IiksICI0OS4wMDAxLjAwMTAuMDEwMC4xMDAxLjAwIik7CisgICAgfQorCisgICAgI1t0ZXN0
XQorICAgIGZuIHRlc3RfbmV0X2Zyb21faXB2NigpIHsKKyAgICAgICAgLy8gMjAwMTpkYjg6OjEg
LT4gWzIwMDEsIDBkYjgsIDAsIDAsIDAsIDAsIDAsIDFdCisgICAgICAgIC8vIGxhc3QgMyBzZWdt
ZW50czogWzAsIDAsIDFdCisgICAgICAgIGxldCBpcDogSXB2NkFkZHIgPSAiMjAwMTpkYjg6OjEi
LnBhcnNlKCkudW53cmFwKCk7CisgICAgICAgIGxldCBuZXQ6IE5ldCA9IGlwLmludG8oKTsKKyAg
ICAgICAgYXNzZXJ0X2VxIShmb3JtYXQhKCJ7bmV0fSIpLCAiNDkuMDAwMS4wMDAwLjAwMDAuMDAw
MS4wMCIpOworCisgICAgICAgIC8vIGZlODA6OjEyMzQ6NTY3ODphYmNkIC0+IFtmZTgwLCAwLCAw
LCAwLCAwLCAxMjM0LCA1Njc4LCBhYmNkXQorICAgICAgICAvLyBsYXN0IDMgc2VnbWVudHM6IFsx
MjM0LCA1Njc4LCBhYmNkXQorICAgICAgICBsZXQgaXAxOiBJcHY2QWRkciA9ICJmZTgwOjoxMjM0
OjU2Nzg6YWJjZCIucGFyc2UoKS51bndyYXAoKTsKKyAgICAgICAgbGV0IG5ldDE6IE5ldCA9IGlw
MS5pbnRvKCk7CisgICAgICAgIGFzc2VydF9lcSEoZm9ybWF0ISgie25ldDF9IiksICI0OS4wMDAx
LjEyMzQuNTY3OC5hYmNkLjAwIik7CisKKyAgICAgICAgLy8gMjAwMTowZGI4Ojg1YTM6OjhhMmU6
MzcwOjczMzQgLT4gWzIwMDEsIDBkYjgsIDg1YTMsIDAsIDAsIDhhMmUsIDAzNzAsIDczMzRdCisg
ICAgICAgIC8vIGxhc3QgMyBzZWdtZW50czogWzhhMmUsIDAzNzAsIDczMzRdCisgICAgICAgIGxl
dCBpcDI6IElwdjZBZGRyID0gIjIwMDE6MGRiODo4NWEzOjo4YTJlOjM3MDo3MzM0Ii5wYXJzZSgp
LnVud3JhcCgpOworICAgICAgICBsZXQgbmV0MjogTmV0ID0gaXAyLmludG8oKTsKKyAgICAgICAg
YXNzZXJ0X2VxIShmb3JtYXQhKCJ7bmV0Mn0iKSwgIjQ5LjAwMDEuOGEyZS4wMzcwLjczMzQuMDAi
KTsKKworICAgICAgICAvLyA6OjEgLT4gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDFdCisgICAgICAg
IC8vIGxhc3QgMyBzZWdtZW50czogWzAsIDAsIDFdCisgICAgICAgIGxldCBpcDM6IElwdjZBZGRy
ID0gIjo6MSIucGFyc2UoKS51bndyYXAoKTsKKyAgICAgICAgbGV0IG5ldDM6IE5ldCA9IGlwMy5p
bnRvKCk7CisgICAgICAgIGFzc2VydF9lcSEoZm9ybWF0ISgie25ldDN9IiksICI0OS4wMDAxLjAw
MDAuMDAwMC4wMDAxLjAwIik7CisgICAgfQorfQotLSAKMi4zOS41CgoKCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCnB2ZS1kZXZlbCBtYWlsaW5nIGxpc3QK
cHZlLWRldmVsQGxpc3RzLnByb3htb3guY29tCmh0dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dp
LWJpbi9tYWlsbWFuL2xpc3RpbmZvL3B2ZS1kZXZlbAo=