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 [IPv6:2a01:7e0:0:424::9])
	by lore.proxmox.com (Postfix) with ESMTPS id B5A401FF15C
	for <inbox@lore.proxmox.com>; Fri,  4 Apr 2025 18:31:17 +0200 (CEST)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id 0299E37B4F;
	Fri,  4 Apr 2025 18:29:51 +0200 (CEST)
From: Gabriel Goller <g.goller@proxmox.com>
To: pve-devel@lists.proxmox.com
Date: Fri,  4 Apr 2025 18:28:13 +0200
Message-Id: <20250404162908.563060-3-g.goller@proxmox.com>
X-Mailer: git-send-email 2.39.5
In-Reply-To: <20250404162908.563060-1-g.goller@proxmox.com>
References: <20250404162908.563060-1-g.goller@proxmox.com>
MIME-Version: 1.0
X-SPAM-LEVEL: Spam detection results:  0
 AWL -0.023 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
 KAM_SHORT               0.001 Use of a URL Shortener for very short URL
 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 v2 01/15] sdn-types: initial commit
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>

RnJvbTogU3RlZmFuIEhhbnJlaWNoIDxzLmhhbnJlaWNoQHByb3htb3guY29tPgoKVGhpcyBjcmF0
ZSBjb250YWlucyBTRE4gc3BlY2lmaWMgdHlwZXMsIHNvIHRoZXkgY2FuIGJlIHJlLXVzZWQgYWNy
b3NzCm11bHRpcGxlIGNyYXRlcyAoVGhlIGluaXRpYWwgdXNlLWNhc2UgYmVpbmcgc2hhcmVkIHR5
cGVzIGJldHdlZW4KcHJveG1veC1mcnIgYW5kIHByb3htb3gtdmUtY29uZmlnKS4KClRoaXMgaW5p
dGlhbCBjb21taXQgY29udGFpbnMgdHlwZXMgZm9yIHRoZSBmb2xsb3dpbmcgZW50aXRpZXM6Ciog
T3BlbkZhYnJpYyBIZWxsbyBJbnRlcnZhbC9NdWx0aXBsaWVyIGFuZCBDU05QIEludGVydmFsCiog
TmV0d29yayBFbnRpdHkgVGl0bGUgKHVzZWQgYXMgUm91dGVyIElEcyBpbiBJUy1JUyAvIE9wZW5G
YWJyaWMpCgpTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gSGFucmVpY2ggPHMuaGFucmVpY2hAcHJveG1v
eC5jb20+ClNpZ25lZC1vZmYtYnk6IEdhYnJpZWwgR29sbGVyIDxnLmdvbGxlckBwcm94bW94LmNv
bT4KLS0tCiBDYXJnby50b21sICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArCiBw
cm94bW94LXNkbi10eXBlcy9DYXJnby50b21sICAgICAgICAgICB8ICAxNCArCiBwcm94bW94LXNk
bi10eXBlcy9kZWJpYW4vY2hhbmdlbG9nICAgICB8ICAgNSArCiBwcm94bW94LXNkbi10eXBlcy9k
ZWJpYW4vY29udHJvbCAgICAgICB8ICAzOSArKysKIHByb3htb3gtc2RuLXR5cGVzL2RlYmlhbi9j
b3B5cmlnaHQgICAgIHwgIDE4ICsrCiBwcm94bW94LXNkbi10eXBlcy9kZWJpYW4vZGViY2FyZ28u
dG9tbCB8ICAgNyArCiBwcm94bW94LXNkbi10eXBlcy9zcmMvbGliLnJzICAgICAgICAgICB8ICAg
MiArCiBwcm94bW94LXNkbi10eXBlcy9zcmMvbmV0LnJzICAgICAgICAgICB8IDM4MiArKysrKysr
KysrKysrKysrKysrKysrKysrCiBwcm94bW94LXNkbi10eXBlcy9zcmMvb3BlbmZhYnJpYy5ycyAg
ICB8ICA4OSArKysrKysKIHByb3htb3gtdmUtY29uZmlnL0NhcmdvLnRvbWwgICAgICAgICAgIHwg
ICA2ICstCiAxMCBmaWxlcyBjaGFuZ2VkLCA1NjMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMo
LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwcm94bW94LXNkbi10eXBlcy9DYXJnby50b21sCiBjcmVh
dGUgbW9kZSAxMDA2NDQgcHJveG1veC1zZG4tdHlwZXMvZGViaWFuL2NoYW5nZWxvZwogY3JlYXRl
IG1vZGUgMTAwNjQ0IHByb3htb3gtc2RuLXR5cGVzL2RlYmlhbi9jb250cm9sCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgcHJveG1veC1zZG4tdHlwZXMvZGViaWFuL2NvcHlyaWdodAogY3JlYXRlIG1vZGUg
MTAwNjQ0IHByb3htb3gtc2RuLXR5cGVzL2RlYmlhbi9kZWJjYXJnby50b21sCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgcHJveG1veC1zZG4tdHlwZXMvc3JjL2xpYi5ycwogY3JlYXRlIG1vZGUgMTAwNjQ0
IHByb3htb3gtc2RuLXR5cGVzL3NyYy9uZXQucnMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwcm94bW94
LXNkbi10eXBlcy9zcmMvb3BlbmZhYnJpYy5ycwoKZGlmZiAtLWdpdCBhL0NhcmdvLnRvbWwgYi9D
YXJnby50b21sCmluZGV4IGI2ZTZkZjc3OTY5Yi4uYmQ2YTljYTRhNzlhIDEwMDY0NAotLS0gYS9D
YXJnby50b21sCisrKyBiL0NhcmdvLnRvbWwKQEAgLTEsNiArMSw3IEBACiBbd29ya3NwYWNlXQog
bWVtYmVycyA9IFsKICAgICAicHJveG1veC12ZS1jb25maWciLAorICAgICJwcm94bW94LXNkbi10
eXBlcyIsCiBdCiBleGNsdWRlID0gWwogICAgICJidWlsZCIsCkBAIC0xNywzICsxOCw2IEBAIHJ1
c3QtdmVyc2lvbiA9ICIxLjgyIgogCiBbd29ya3NwYWNlLmRlcGVuZGVuY2llc10KIHByb3htb3gt
bmV0d29yay10eXBlcyA9IHsgdmVyc2lvbiA9ICIwLjEiIH0KK3NlcmRlID0geyB2ZXJzaW9uID0g
IjEiIH0KK3NlcmRlX3dpdGggPSAiMyIKK3RoaXNlcnJvciA9ICIxLjAuNTkiCmRpZmYgLS1naXQg
YS9wcm94bW94LXNkbi10eXBlcy9DYXJnby50b21sIGIvcHJveG1veC1zZG4tdHlwZXMvQ2FyZ28u
dG9tbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmIzZGM5ODU1MGE1
NwotLS0gL2Rldi9udWxsCisrKyBiL3Byb3htb3gtc2RuLXR5cGVzL0NhcmdvLnRvbWwKQEAgLTAs
MCArMSwxNCBAQAorW3BhY2thZ2VdCituYW1lID0gInByb3htb3gtc2RuLXR5cGVzIgordmVyc2lv
biA9ICIwLjEuMCIKK2F1dGhvcnMud29ya3NwYWNlID0gdHJ1ZQorZWRpdGlvbi53b3Jrc3BhY2Ug
PSB0cnVlCitsaWNlbnNlLndvcmtzcGFjZSA9IHRydWUKK2hvbWVwYWdlLndvcmtzcGFjZSA9IHRy
dWUKK2V4Y2x1ZGUud29ya3NwYWNlID0gdHJ1ZQorcnVzdC12ZXJzaW9uLndvcmtzcGFjZSA9IHRy
dWUKKworW2RlcGVuZGVuY2llc10KK3RoaXNlcnJvciA9IHsgd29ya3NwYWNlID0gdHJ1ZSB9Citz
ZXJkZSA9IHsgd29ya3NwYWNlID0gdHJ1ZSwgZmVhdHVyZXMgPSBbICJkZXJpdmUiIF0gfQorc2Vy
ZGVfd2l0aCA9IHsgd29ya3NwYWNlID0gdHJ1ZSB9CmRpZmYgLS1naXQgYS9wcm94bW94LXNkbi10
eXBlcy9kZWJpYW4vY2hhbmdlbG9nIGIvcHJveG1veC1zZG4tdHlwZXMvZGViaWFuL2NoYW5nZWxv
ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQyMjkyMWMyZDFmNAot
LS0gL2Rldi9udWxsCisrKyBiL3Byb3htb3gtc2RuLXR5cGVzL2RlYmlhbi9jaGFuZ2Vsb2cKQEAg
LTAsMCArMSw1IEBACitydXN0LXByb3htb3gtc2RuLXR5cGVzICgwLjEuMC0xKSB1bnN0YWJsZTsg
dXJnZW5jeT1tZWRpdW0KKworICAqIEluaXRpYWwgcmVsZWFzZS4KKworIC0tIFByb3htb3ggU3Vw
cG9ydCBUZWFtIDxzdXBwb3J0QHByb3htb3guY29tPiAgTW9uLCAwMyBKdW4gMjAyNCAxMDo1MTox
MSArMDIwMApkaWZmIC0tZ2l0IGEvcHJveG1veC1zZG4tdHlwZXMvZGViaWFuL2NvbnRyb2wgYi9w
cm94bW94LXNkbi10eXBlcy9kZWJpYW4vY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLjE2YTI1MzEzYWQzNwotLS0gL2Rldi9udWxsCisrKyBiL3Byb3htb3gt
c2RuLXR5cGVzL2RlYmlhbi9jb250cm9sCkBAIC0wLDAgKzEsMzkgQEAKK1NvdXJjZTogcnVzdC1w
cm94bW94LXNkbi10eXBlcworU2VjdGlvbjogcnVzdAorUHJpb3JpdHk6IG9wdGlvbmFsCitCdWls
ZC1EZXBlbmRzOiBkZWJoZWxwZXItY29tcGF0ICg9IDEzKSwKKyBkaC1zZXF1ZW5jZS1jYXJnbwor
QnVpbGQtRGVwZW5kcy1BcmNoOiBjYXJnbzpuYXRpdmUgPCFub2NoZWNrPiwKKyBydXN0YzpuYXRp
dmUgKD49IDEuODIpIDwhbm9jaGVjaz4sCisgbGlic3RkLXJ1c3QtZGV2IDwhbm9jaGVjaz4sCisg
bGlicnVzdC1zZXJkZS0xK2RlZmF1bHQtZGV2IDwhbm9jaGVjaz4sCisgbGlicnVzdC1zZXJkZS0x
K2Rlcml2ZS1kZXYgPCFub2NoZWNrPiwKKyBsaWJydXN0LXNlcmRlLXdpdGgtMytkZWZhdWx0LWRl
diA8IW5vY2hlY2s+LAorIGxpYnJ1c3QtdGhpc2Vycm9yLTErZGVmYXVsdC1kZXYgKD49IDEuMC41
OS1+fikgPCFub2NoZWNrPgorTWFpbnRhaW5lcjogUHJveG1veCBTdXBwb3J0IFRlYW0gPHN1cHBv
cnRAcHJveG1veC5jb20+CitTdGFuZGFyZHMtVmVyc2lvbjogNC43LjAKK1Zjcy1HaXQ6IGdpdDov
L2dpdC5wcm94bW94LmNvbS9naXQvcHJveG1veC12ZS1ycy5naXQKK1Zjcy1Ccm93c2VyOiBodHRw
czovL2dpdC5wcm94bW94LmNvbS8/cD1wcm94bW94LXZlLXJzLmdpdAorSG9tZXBhZ2U6IGh0dHBz
Oi8vcHJveG1veC5jb20KK1gtQ2FyZ28tQ3JhdGU6IHByb3htb3gtc2RuLXR5cGVzCitSdWxlcy1S
ZXF1aXJlcy1Sb290OiBubworCitQYWNrYWdlOiBsaWJydXN0LXByb3htb3gtc2RuLXR5cGVzLWRl
dgorQXJjaGl0ZWN0dXJlOiBhbnkKK011bHRpLUFyY2g6IHNhbWUKK0RlcGVuZHM6CisgJHttaXNj
OkRlcGVuZHN9LAorIGxpYnJ1c3Qtc2VyZGUtMStkZWZhdWx0LWRldiwKKyBsaWJydXN0LXNlcmRl
LTErZGVyaXZlLWRldiwKKyBsaWJydXN0LXNlcmRlLXdpdGgtMytkZWZhdWx0LWRldiwKKyBsaWJy
dXN0LXRoaXNlcnJvci0xK2RlZmF1bHQtZGV2ICg+PSAxLjAuNTktfn4pCitQcm92aWRlczoKKyBs
aWJydXN0LXByb3htb3gtc2RuLXR5cGVzK2RlZmF1bHQtZGV2ICg9ICR7YmluYXJ5OlZlcnNpb259
KSwKKyBsaWJydXN0LXByb3htb3gtc2RuLXR5cGVzLTAtZGV2ICg9ICR7YmluYXJ5OlZlcnNpb259
KSwKKyBsaWJydXN0LXByb3htb3gtc2RuLXR5cGVzLTArZGVmYXVsdC1kZXYgKD0gJHtiaW5hcnk6
VmVyc2lvbn0pLAorIGxpYnJ1c3QtcHJveG1veC1zZG4tdHlwZXMtMC4xLWRldiAoPSAke2JpbmFy
eTpWZXJzaW9ufSksCisgbGlicnVzdC1wcm94bW94LXNkbi10eXBlcy0wLjErZGVmYXVsdC1kZXYg
KD0gJHtiaW5hcnk6VmVyc2lvbn0pLAorIGxpYnJ1c3QtcHJveG1veC1zZG4tdHlwZXMtMC4xLjAt
ZGV2ICg9ICR7YmluYXJ5OlZlcnNpb259KSwKKyBsaWJydXN0LXByb3htb3gtc2RuLXR5cGVzLTAu
MS4wK2RlZmF1bHQtZGV2ICg9ICR7YmluYXJ5OlZlcnNpb259KQorRGVzY3JpcHRpb246IFJ1c3Qg
Y3JhdGUgInByb3htb3gtc2RuLXR5cGVzIiAtIFJ1c3Qgc291cmNlIGNvZGUKKyBTb3VyY2UgY29k
ZSBmb3IgRGViaWFuaXplZCBSdXN0IGNyYXRlICJwcm94bW94LXNkbi10eXBlcyIKZGlmZiAtLWdp
dCBhL3Byb3htb3gtc2RuLXR5cGVzL2RlYmlhbi9jb3B5cmlnaHQgYi9wcm94bW94LXNkbi10eXBl
cy9kZWJpYW4vY29weXJpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uMWVhOGE1NmI0ZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvcHJveG1veC1zZG4tdHlwZXMvZGVi
aWFuL2NvcHlyaWdodApAQCAtMCwwICsxLDE4IEBACitGb3JtYXQ6IGh0dHBzOi8vd3d3LmRlYmlh
bi5vcmcvZG9jL3BhY2thZ2luZy1tYW51YWxzL2NvcHlyaWdodC1mb3JtYXQvMS4wLworCitGaWxl
czoKKyAqCitDb3B5cmlnaHQ6IDIwMTkgLSAyMDI1IFByb3htb3ggU2VydmVyIFNvbHV0aW9ucyBH
bWJIIDxzdXBwb3J0QHByb3htb3guY29tPgorTGljZW5zZTogQUdQTC0zLjAtb3ItbGF0ZXIKKyBU
aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yIG1vZGlmeSBpdCB1bmRlcgorIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIFNvZnR3YXJlIEZvdW5k
YXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55CisgbGF0ZXIgdmVyc2lvbi4KKyAuCisgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MKKyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEFm
ZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCisgZGV0YWlscy4KKyAuCisgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGFsb25nCisgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRw
czovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCmRpZmYgLS1naXQgYS9wcm94bW94LXNkbi10eXBl
cy9kZWJpYW4vZGViY2FyZ28udG9tbCBiL3Byb3htb3gtc2RuLXR5cGVzL2RlYmlhbi9kZWJjYXJn
by50b21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODdhNzg3ZTZk
MDNlCi0tLSAvZGV2L251bGwKKysrIGIvcHJveG1veC1zZG4tdHlwZXMvZGViaWFuL2RlYmNhcmdv
LnRvbWwKQEAgLTAsMCArMSw3IEBACitvdmVybGF5ID0gIi4iCitjcmF0ZV9zcmNfcGF0aCA9ICIu
LiIKK21haW50YWluZXIgPSAiUHJveG1veCBTdXBwb3J0IFRlYW0gPHN1cHBvcnRAcHJveG1veC5j
b20+IgorCitbc291cmNlXQordmNzX2dpdCA9ICJnaXQ6Ly9naXQucHJveG1veC5jb20vZ2l0L3By
b3htb3gtdmUtcnMuZ2l0IgordmNzX2Jyb3dzZXIgPSAiaHR0cHM6Ly9naXQucHJveG1veC5jb20v
P3A9cHJveG1veC12ZS1ycy5naXQiCmRpZmYgLS1naXQgYS9wcm94bW94LXNkbi10eXBlcy9zcmMv
bGliLnJzIGIvcHJveG1veC1zZG4tdHlwZXMvc3JjL2xpYi5ycwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAuLjAxODY3NDYxMjcxMAotLS0gL2Rldi9udWxsCisrKyBiL3By
b3htb3gtc2RuLXR5cGVzL3NyYy9saWIucnMKQEAgLTAsMCArMSwyIEBACitwdWIgbW9kIG5ldDsK
K3B1YiBtb2Qgb3BlbmZhYnJpYzsKZGlmZiAtLWdpdCBhL3Byb3htb3gtc2RuLXR5cGVzL3NyYy9u
ZXQucnMgYi9wcm94bW94LXNkbi10eXBlcy9zcmMvbmV0LnJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMC4uOTdlMDE5MzgzYmNjCi0tLSAvZGV2L251bGwKKysrIGIvcHJv
eG1veC1zZG4tdHlwZXMvc3JjL25ldC5ycwpAQCAtMCwwICsxLDM4MiBAQAordXNlIHN0ZDo6ewor
ICAgIGZtdDo6RGlzcGxheSwKKyAgICBuZXQ6OntJcEFkZHIsIElwdjRBZGRyLCBJcHY2QWRkcn0s
CisgICAgc3RyOjpGcm9tU3RyLAorfTsKKwordXNlIHNlcmRlOjpTZXJpYWxpemU7Cit1c2Ugc2Vy
ZGVfd2l0aDo6e0Rlc2VyaWFsaXplRnJvbVN0ciwgU2VyaWFsaXplRGlzcGxheX07Cit1c2UgdGhp
c2Vycm9yOjpFcnJvcjsKKworI1tkZXJpdmUoRXJyb3IsIERlYnVnKV0KK3B1YiBlbnVtIE5ldEVy
cm9yIHsKKyAgICAjW2Vycm9yKCJTb21lIG9jdGV0cyBhcmUgbWlzc2luZyIpXQorICAgIFdyb25n
TGVuZ3RoLAorICAgICNbZXJyb3IoIlRoZSBORVQgc2VsZWN0b3IgbXVzdCBiZSB0d28gY2hhcmFj
dGVycyB3aWRlIGFuZCBiZSAwMCIpXQorICAgIEludmFsaWROZXRTZWxlY3RvciwKKyAgICAjW2Vy
cm9yKCJJbnZhbGlkIEFGSSAod3Jvbmcgc2l6ZSBvciBwb3NpdGlvbikiKV0KKyAgICBJbnZhbGlk
QUZJLAorICAgICNbZXJyb3IoIkludmFsaWQgQXJlYSAod3Jvbmcgc2l6ZSBvciBwb3NpdGlvbiki
KV0KKyAgICBJbnZhbGlkQXJlYSwKKyAgICAjW2Vycm9yKCJJbnZhbGlkIFN5c3RlbUlkICh3cm9u
ZyBzaXplIG9yIHBvc2l0aW9uKSIpXQorICAgIEludmFsaWRTeXN0ZW1JZCwKK30KKworLy8vIEFk
ZHJlc3MgRmFtaWx5IGF1dGhvcml0eSBJZGVudGlmaWVyIC0gNDkgVGhlIEFGSSB2YWx1ZSA0OSBp
cyB3aGF0IElTLUlTIChhbmQgb3BlbmZhYnJpYykgdXNlcworLy8vIGZvciBwcml2YXRlIGFkZHJl
c3NpbmcuCisjW2Rlcml2ZSgKKyAgICBEZWJ1ZywgRGVzZXJpYWxpemVGcm9tU3RyLCBTZXJpYWxp
emVEaXNwbGF5LCBDbG9uZSwgSGFzaCwgUGFydGlhbEVxLCBFcSwgUGFydGlhbE9yZCwgT3JkLAor
KV0KK3N0cnVjdCBOZXRBRkkoU3RyaW5nKTsKKworaW1wbCBEZWZhdWx0IGZvciBOZXRBRkkgewor
ICAgIGZuIGRlZmF1bHQoKSAtPiBTZWxmIHsKKyAgICAgICAgU2VsZigiNDkiLnRvX293bmVkKCkp
CisgICAgfQorfQorCitpbXBsIERpc3BsYXkgZm9yIE5ldEFGSSB7CisgICAgZm4gZm10KCZzZWxm
LCBmOiAmbXV0IHN0ZDo6Zm10OjpGb3JtYXR0ZXI8J18+KSAtPiBzdGQ6OmZtdDo6UmVzdWx0IHsK
KyAgICAgICAgd3JpdGUhKGYsICJ7fSIsIHNlbGYuMCkKKyAgICB9Cit9CisKK2ltcGwgRnJvbVN0
ciBmb3IgTmV0QUZJIHsKKyAgICB0eXBlIEVyciA9IE5ldEVycm9yOworCisgICAgZm4gZnJvbV9z
dHIoczogJnN0cikgLT4gUmVzdWx0PFNlbGYsIFNlbGY6OkVycj4geworICAgICAgICBpZiBzLmxl
bigpICE9IDIgeworICAgICAgICAgICAgRXJyKE5ldEVycm9yOjpJbnZhbGlkQUZJKQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgT2soU2VsZihzLnRvX293bmVkKCkpKQorICAgICAgICB9
CisgICAgfQorfQorCisvLy8gQXJlYSBpZGVudGlmaWVyOiAwMDAxIElTLUlTIGFyZWEgbnVtYmVy
IChudW1lcmljYWwgYXJlYSAxKQorLy8vIFRoZSBzZWNvbmQgcGFydCAoc3lzdGVtKSBvZiB0aGUg
YG5ldGAgaWRlbnRpZmllci4gRXZlcnkgbm9kZSBoYXMgdG8gaGF2ZSBhIGRpZmZlcmVudCBzeXN0
ZW0KKy8vLyBudW1iZXIuCisjW2Rlcml2ZShEZWJ1ZywgRGVzZXJpYWxpemVGcm9tU3RyLCBTZXJp
YWxpemUsIENsb25lLCBIYXNoLCBQYXJ0aWFsRXEsIEVxLCBQYXJ0aWFsT3JkLCBPcmQpXQorc3Ry
dWN0IE5ldEFyZWEoU3RyaW5nKTsKKworaW1wbCBEZWZhdWx0IGZvciBOZXRBcmVhIHsKKyAgICBm
biBkZWZhdWx0KCkgLT4gU2VsZiB7CisgICAgICAgIFNlbGYoIjAwMDEiLnRvX293bmVkKCkpCisg
ICAgfQorfQorCitpbXBsIERpc3BsYXkgZm9yIE5ldEFyZWEgeworICAgIGZuIGZtdCgmc2VsZiwg
ZjogJm11dCBzdGQ6OmZtdDo6Rm9ybWF0dGVyPCdfPikgLT4gc3RkOjpmbXQ6OlJlc3VsdCB7Cisg
ICAgICAgIHdyaXRlIShmLCAie30iLCBzZWxmLjApCisgICAgfQorfQorCitpbXBsIEZyb21TdHIg
Zm9yIE5ldEFyZWEgeworICAgIHR5cGUgRXJyID0gTmV0RXJyb3I7CisKKyAgICBmbiBmcm9tX3N0
cihzOiAmc3RyKSAtPiBSZXN1bHQ8U2VsZiwgU2VsZjo6RXJyPiB7CisgICAgICAgIGlmIHMubGVu
KCkgIT0gNCB7CisgICAgICAgICAgICBFcnIoTmV0RXJyb3I6OkludmFsaWRBcmVhKQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgT2soU2VsZihzLnRvX293bmVkKCkpKQorICAgICAgICB9
CisgICAgfQorfQorCisvLy8gU3lzdGVtIGlkZW50aWZpZXI6IDE5MjEuNjgwMC4xMDAyIC0gZm9y
IHN5c3RlbSBpZGVudGlmaWVycyB3ZSByZWNvbW1lbmQgdG8gdXNlIElQIGFkZHJlc3Mgb3IKKy8v
LyBNQUMgYWRkcmVzcyBvZiB0aGUgcm91dGVyIGl0c2VsZi4gVGhlIHdheSB0byBjb25zdHJ1Y3Qg
dGhpcyBpcyB0byBrZWVwIGFsbCBvZiB0aGUgemVyb2VzIG9mIHRoZQorLy8vIHJvdXRlciBJUCBh
ZGRyZXNzLCBhbmQgdGhlbiBjaGFuZ2UgdGhlIHBlcmlvZHMgZnJvbSBiZWluZyBldmVyeSB0aHJl
ZSBudW1iZXJzIHRvIGV2ZXJ5IGZvdXIKKy8vLyBudW1iZXJzLiBUaGUgYWRkcmVzcyB0aGF0IGlz
IGxpc3RlZCBoZXJlIGlzIDE5Mi4xNjguMS4yLCB3aGljaCBpZiBleHBhbmRlZCB3aWxsIHR1cm4g
aW50bworLy8vIDE5Mi4xNjguMDAxLjAwMi4gVGhlbiBhbGwgb25lIGhhcyB0byBkbyBpcyBtb3Zl
IHRoZSBkb3RzIHRvIGhhdmUgZm91ciBudW1iZXJzIGluc3RlYWQgb2YgdGhyZWUuCisvLy8gVGhp
cyBnaXZlcyB1cyAxOTIxLjY4MDAuMTAwMi4KKyNbZGVyaXZlKERlYnVnLCBEZXNlcmlhbGl6ZUZy
b21TdHIsIFNlcmlhbGl6ZSwgQ2xvbmUsIEhhc2gsIFBhcnRpYWxFcSwgRXEsIFBhcnRpYWxPcmQs
IE9yZCldCitzdHJ1Y3QgTmV0U3lzdGVtSWQoU3RyaW5nKTsKKworaW1wbCBEaXNwbGF5IGZvciBO
ZXRTeXN0ZW1JZCB7CisgICAgZm4gZm10KCZzZWxmLCBmOiAmbXV0IHN0ZDo6Zm10OjpGb3JtYXR0
ZXI8J18+KSAtPiBzdGQ6OmZtdDo6UmVzdWx0IHsKKyAgICAgICAgd3JpdGUhKGYsICJ7fSIsIHNl
bGYuMCkKKyAgICB9Cit9CisKK2ltcGwgRnJvbVN0ciBmb3IgTmV0U3lzdGVtSWQgeworICAgIHR5
cGUgRXJyID0gTmV0RXJyb3I7CisKKyAgICBmbiBmcm9tX3N0cihzOiAmc3RyKSAtPiBSZXN1bHQ8
U2VsZiwgU2VsZjo6RXJyPiB7CisgICAgICAgIGlmIHMuc3BsaXQoIi4iKS5jb3VudCgpICE9IDMK
KyAgICAgICAgICAgIHx8IHMuc3BsaXQoIi4iKS5hbnkofHNlZ21lbnR8IHsKKyAgICAgICAgICAg
ICAgICBzZWdtZW50LmxlbigpICE9IDQgfHwgIXNlZ21lbnQuY2hhcnMoKS5hbGwofGN8IGMuaXNf
YXNjaWlfaGV4ZGlnaXQoKSkKKyAgICAgICAgICAgIH0pCisgICAgICAgIHsKKyAgICAgICAgICAg
IEVycihOZXRFcnJvcjo6SW52YWxpZFN5c3RlbUlkKQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgT2soU2VsZihzLnRvX293bmVkKCkpKQorICAgICAgICB9CisgICAgfQorfQorCisvLy8g
Q29udmVydCBJUC1BZGRyZXNzIHRvIGEgTkVUIGFkZHJlc3Mgd2l0aCB0aGUgZGVmYXVsdCBhZmks
IGFyZWEgYW5kIHNlbGVjdG9yIHZhbHVlcy4gTm90ZSB0aGF0IGEKKy8vLyB2YWxpZCBJcHY0QWRk
ciBpcyBhbHdheXMgYSB2YWxpZCBTeXN0ZW1JZCBhcyB3ZWxsLgoraW1wbCBGcm9tPElwdjRBZGRy
PiBmb3IgTmV0U3lzdGVtSWQgeworICAgIGZuIGZyb20odmFsdWU6IElwdjRBZGRyKSAtPiBTZWxm
IHsKKyAgICAgICAgbGV0IG9jdGV0cyA9IHZhbHVlLm9jdGV0cygpOworCisgICAgICAgIGxldCBz
eXN0ZW1faWRfc3RyID0gZm9ybWF0ISgKKyAgICAgICAgICAgICJ7OjAzfXs6MDF9Lns6MDJ9ezow
Mn0uezowMX17OjAzfSIsCisgICAgICAgICAgICBvY3RldHNbMF0sCisgICAgICAgICAgICBvY3Rl
dHNbMV0gLyAxMDAsCisgICAgICAgICAgICBvY3RldHNbMV0gJSAxMDAsCisgICAgICAgICAgICBv
Y3RldHNbMl0gLyAxMCwKKyAgICAgICAgICAgIG9jdGV0c1syXSAlIDEwLAorICAgICAgICAgICAg
b2N0ZXRzWzNdCisgICAgICAgICk7CisKKyAgICAgICAgU2VsZihzeXN0ZW1faWRfc3RyKQorICAg
IH0KK30KKworLy8vIENvbnZlcnQgSVB2Ni1BZGRyZXNzIHRvIGEgTkVUIGFkZHJlc3Mgd2l0aCB0
aGUgZGVmYXVsdCBhZmksIGFyZWEgYW5kIHNlbGVjdG9yIHZhbHVlcy4gTm90ZSB0aGF0IGEKKy8v
LyB2YWxpZCBJcHY2QWRkciBpcyBhbHdheXMgYSB2YWxpZCBTeXN0ZW1JZCBhcyB3ZWxsLgoraW1w
bCBGcm9tPElwdjZBZGRyPiBmb3IgTmV0U3lzdGVtSWQgeworICAgIGZuIGZyb20odmFsdWU6IElw
djZBZGRyKSAtPiBTZWxmIHsKKyAgICAgICAgbGV0IHNlZ21lbnRzID0gdmFsdWUuc2VnbWVudHMo
KTsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVXNlIHRoZSBsYXN0IDMgc2VnbWVudHMgKG91dCBv
ZiA4KSBvZiB0aGUgSVB2NiBhZGRyZXNzCisgICAgICAgIGxldCBzeXN0ZW1faWRfc3RyID0gZm9y
bWF0ISgKKyAgICAgICAgICAgICJ7OjA0eH0uezowNHh9Lns6MDR4fSIsCisgICAgICAgICAgICBz
ZWdtZW50c1s1XSwgc2VnbWVudHNbNl0sIHNlZ21lbnRzWzddCisgICAgICAgICk7CisKKyAgICAg
ICAgU2VsZihzeXN0ZW1faWRfc3RyKQorICAgIH0KK30KKworLy8vIE5FVCBzZWxlY3RvcjogMDAg
TXVzdCBhbHdheXMgYmUgMDAuIFRoaXMgc2V0dGluZyBpbmRpY2F0ZXMg4oCcdGhpcyBzeXN0ZW3i
gJ0gb3Ig4oCcbG9jYWwgc3lzdGVtLuKAnQorI1tkZXJpdmUoRGVidWcsIERlc2VyaWFsaXplRnJv
bVN0ciwgU2VyaWFsaXplLCBDbG9uZSwgSGFzaCwgUGFydGlhbEVxLCBFcSwgUGFydGlhbE9yZCwg
T3JkKV0KK3N0cnVjdCBOZXRTZWxlY3RvcihTdHJpbmcpOworCitpbXBsIERlZmF1bHQgZm9yIE5l
dFNlbGVjdG9yIHsKKyAgICBmbiBkZWZhdWx0KCkgLT4gU2VsZiB7CisgICAgICAgIFNlbGYoIjAw
Ii50b19vd25lZCgpKQorICAgIH0KK30KKworaW1wbCBEaXNwbGF5IGZvciBOZXRTZWxlY3RvciB7
CisgICAgZm4gZm10KCZzZWxmLCBmOiAmbXV0IHN0ZDo6Zm10OjpGb3JtYXR0ZXI8J18+KSAtPiBz
dGQ6OmZtdDo6UmVzdWx0IHsKKyAgICAgICAgd3JpdGUhKGYsICJ7fSIsIHNlbGYuMCkKKyAgICB9
Cit9CisKK2ltcGwgRnJvbVN0ciBmb3IgTmV0U2VsZWN0b3IgeworICAgIHR5cGUgRXJyID0gTmV0
RXJyb3I7CisKKyAgICBmbiBmcm9tX3N0cihzOiAmc3RyKSAtPiBSZXN1bHQ8U2VsZiwgU2VsZjo6
RXJyPiB7CisgICAgICAgIGlmIHMubGVuKCkgIT0gMiB7CisgICAgICAgICAgICBFcnIoTmV0RXJy
b3I6OkludmFsaWROZXRTZWxlY3RvcikKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE9r
KFNlbGYocy50b19vd25lZCgpKSkKKyAgICAgICAgfQorICAgIH0KK30KKworLy8vIFRoZSBPcGVu
RmFicmljIE5ldC4KKy8vLworLy8vIEV2ZXJ5IE9wZW5GYWJyaWMgbm9kZSBhbmQgZmFicmljIGlz
IGlkZW50aWZpZWQgdGhyb3VnaCB0aGUgTkVULiBJdCBoYXMgYSBuZXR3b3JrIGFuZCBhIGhvc3QK
Ky8vLyBwYXJ0LgorLy8vIFRoZSBmaXJzdCBwYXJ0IGlzIHRoZSBuZXR3b3JrIHBhcnQgKGFsc28g
Y2FsbGVkIGFyZWEpLiBUaGUgZW50aXJlIE9wZW5GYWJyaWMgZmFicmljIGhhcyB0byBoYXZlCisv
Ly8gdGhlIHNhbWUgbmV0d29yayBwYXJ0IChhcmVhKS4gVGhlIGZpcnN0IG51bWJlciBpcyB0aGUg
W2BOZXRBRklgXSBhbmQgdGhlIHNlY29uZCBpcyB0aGUgW2BOZXRBcmVhYF0uCisvLy8gZS5nLjog
IjQ5LjAwMDEiCisvLy8gVGhlIHNlY29uZCBwYXJ0IGlzIHRoZSBob3N0IHBhcnQsIHdoaWNoIGhh
cyB0byBkaWZmZXIgb24gZXZlcnkgbm9kZSBpbiB0aGUgZmFicmljLiBJdCBjb250YWlucworLy8v
IHRoZSBbYE5ldFN5c3RlbUlkYF0gYW5kIHRoZSBbYE5ldFNlbGVjdG9yYF0uCisvLy8gZS5nLjog
IjE5MjEuNjgwMC4xMDAyLjAwIgorI1tkZXJpdmUoCisgICAgRGVidWcsIERlc2VyaWFsaXplRnJv
bVN0ciwgU2VyaWFsaXplRGlzcGxheSwgQ2xvbmUsIEhhc2gsIFBhcnRpYWxFcSwgRXEsIFBhcnRp
YWxPcmQsIE9yZCwKKyldCitwdWIgc3RydWN0IE5ldCB7CisgICAgYWZpOiBOZXRBRkksCisgICAg
YXJlYTogTmV0QXJlYSwKKyAgICBzeXN0ZW06IE5ldFN5c3RlbUlkLAorICAgIHNlbGVjdG9yOiBO
ZXRTZWxlY3RvciwKK30KKworaW1wbCBGcm9tU3RyIGZvciBOZXQgeworICAgIHR5cGUgRXJyID0g
TmV0RXJyb3I7CisKKyAgICBmbiBmcm9tX3N0cihzOiAmc3RyKSAtPiBSZXN1bHQ8U2VsZiwgU2Vs
Zjo6RXJyPiB7CisgICAgICAgIGlmIHMuc3BsaXQoIi4iKS5jb3VudCgpICE9IDYgeworICAgICAg
ICAgICAgcmV0dXJuIEVycihOZXRFcnJvcjo6V3JvbmdMZW5ndGgpOworICAgICAgICB9CisgICAg
ICAgIGxldCBtdXQgaXRlciA9IHMuc3BsaXQoIi4iKTsKKyAgICAgICAgbGV0IGFmaSA9IGl0ZXIu
bmV4dCgpLm9rX29yKE5ldEVycm9yOjpXcm9uZ0xlbmd0aCk/OworICAgICAgICBsZXQgYXJlYSA9
IGl0ZXIubmV4dCgpLm9rX29yKE5ldEVycm9yOjpXcm9uZ0xlbmd0aCk/OworICAgICAgICBsZXQg
c3lzdGVtID0gZm9ybWF0ISgKKyAgICAgICAgICAgICJ7fS57fS57fSIsCisgICAgICAgICAgICBp
dGVyLm5leHQoKS5va19vcihOZXRFcnJvcjo6V3JvbmdMZW5ndGgpPywKKyAgICAgICAgICAgIGl0
ZXIubmV4dCgpLm9rX29yKE5ldEVycm9yOjpXcm9uZ0xlbmd0aCk/LAorICAgICAgICAgICAgaXRl
ci5uZXh0KCkub2tfb3IoTmV0RXJyb3I6Oldyb25nTGVuZ3RoKT8KKyAgICAgICAgKTsKKyAgICAg
ICAgbGV0IHNlbGVjdG9yID0gaXRlci5uZXh0KCkub2tfb3IoTmV0RXJyb3I6Oldyb25nTGVuZ3Ro
KT87CisgICAgICAgIE9rKFNlbGYgeworICAgICAgICAgICAgYWZpOiBhZmkucGFyc2UoKT8sCisg
ICAgICAgICAgICBhcmVhOiBhcmVhLnBhcnNlKCk/LAorICAgICAgICAgICAgc3lzdGVtOiBzeXN0
ZW0ucGFyc2UoKT8sCisgICAgICAgICAgICBzZWxlY3Rvcjogc2VsZWN0b3IucGFyc2UoKT8sCisg
ICAgICAgIH0pCisgICAgfQorfQorCisvLy8gRGVmYXVsdCBORVQgYWRkcmVzcyBmb3IgYSBnaXZl
biBJcHY0QWRkci4gVGhpcyBhZGRzIHRoZSBkZWZhdWx0IGFmaSwgYXJlYSBhbmQgc2VsZWN0b3Ig
dG8gdGhlCisvLy8gYWRkcmVzcy4KK2ltcGwgRnJvbTxJcHY0QWRkcj4gZm9yIE5ldCB7CisgICAg
Zm4gZnJvbSh2YWx1ZTogSXB2NEFkZHIpIC0+IFNlbGYgeworICAgICAgICBTZWxmIHsKKyAgICAg
ICAgICAgIGFmaTogTmV0QUZJOjpkZWZhdWx0KCksCisgICAgICAgICAgICBhcmVhOiBOZXRBcmVh
OjpkZWZhdWx0KCksCisgICAgICAgICAgICBzeXN0ZW06IHZhbHVlLmludG8oKSwKKyAgICAgICAg
ICAgIHNlbGVjdG9yOiBOZXRTZWxlY3Rvcjo6ZGVmYXVsdCgpLAorICAgICAgICB9CisgICAgfQor
fQorCisvLy8gRGVmYXVsdCBORVQgYWRkcmVzcyBmb3IgYSBnaXZlbiBJcHY2QWRkci4gVGhpcyBh
ZGRzIHRoZSBkZWZhdWx0IGFmaSwgYXJlYSBhbmQgc2VsZWN0b3IgdG8gdGhlCisvLy8gYWRkcmVz
cy4KK2ltcGwgRnJvbTxJcHY2QWRkcj4gZm9yIE5ldCB7CisgICAgZm4gZnJvbSh2YWx1ZTogSXB2
NkFkZHIpIC0+IFNlbGYgeworICAgICAgICBTZWxmIHsKKyAgICAgICAgICAgIGFmaTogTmV0QUZJ
OjpkZWZhdWx0KCksCisgICAgICAgICAgICBhcmVhOiBOZXRBcmVhOjpkZWZhdWx0KCksCisgICAg
ICAgICAgICBzeXN0ZW06IHZhbHVlLmludG8oKSwKKyAgICAgICAgICAgIHNlbGVjdG9yOiBOZXRT
ZWxlY3Rvcjo6ZGVmYXVsdCgpLAorICAgICAgICB9CisgICAgfQorfQorCisvLy8gRGVmYXVsdCBO
RVQgYWRkcmVzcyBmb3IgYSBnaXZlbiBJcEFkZHIgKGNhbiBiZSBlaXRoZXIgSXB2NCBvciBJcHY2
KS4gVGhpcyBhZGRzIHRoZSBkZWZhdWx0IGFmaSwKKy8vLyBhcmVhIGFuZCBzZWxlY3RvciB0byB0
aGUgYWRkcmVzcy4KK2ltcGwgRnJvbTxJcEFkZHI+IGZvciBOZXQgeworICAgIGZuIGZyb20odmFs
dWU6IElwQWRkcikgLT4gU2VsZiB7CisgICAgICAgIFNlbGYgeworICAgICAgICAgICAgYWZpOiBO
ZXRBRkk6OmRlZmF1bHQoKSwKKyAgICAgICAgICAgIGFyZWE6IE5ldEFyZWE6OmRlZmF1bHQoKSwK
KyAgICAgICAgICAgIHN5c3RlbTogbWF0Y2ggdmFsdWUgeworICAgICAgICAgICAgICAgIElwQWRk
cjo6VjQoaXB2NF9hZGRyKSA9PiBpcHY0X2FkZHIuaW50bygpLAorICAgICAgICAgICAgICAgIElw
QWRkcjo6VjYoaXB2Nl9hZGRyKSA9PiBpcHY2X2FkZHIuaW50bygpLAorICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgIHNlbGVjdG9yOiBOZXRTZWxlY3Rvcjo6ZGVmYXVsdCgpLAorICAgICAgICB9
CisgICAgfQorfQorCitpbXBsIERpc3BsYXkgZm9yIE5ldCB7CisgICAgZm4gZm10KCZzZWxmLCBm
OiAmbXV0IHN0ZDo6Zm10OjpGb3JtYXR0ZXI8J18+KSAtPiBzdGQ6OmZtdDo6UmVzdWx0IHsKKyAg
ICAgICAgd3JpdGUhKAorICAgICAgICAgICAgZiwKKyAgICAgICAgICAgICJ7fS57fS57fS57fSIs
CisgICAgICAgICAgICBzZWxmLmFmaSwgc2VsZi5hcmVhLCBzZWxmLnN5c3RlbSwgc2VsZi5zZWxl
Y3RvcgorICAgICAgICApCisgICAgfQorfQorCisjW2NmZyh0ZXN0KV0KK21vZCB0ZXN0cyB7Cisg
ICAgdXNlIHN1cGVyOjoqOworCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfbmV0X2Zyb21fc3Ry
KCkgeworICAgICAgICBsZXQgaW5wdXQgPSAiNDkuMDAwMS4xOTIxLjY4MDAuMTAwMi4wMCI7Cisg
ICAgICAgIGxldCBuZXQgPSBpbnB1dC5wYXJzZTo6PE5ldD4oKS5leHBlY3QoInRoaXMgbmV0IHNo
b3VsZCBwYXJzZSIpOworICAgICAgICBhc3NlcnRfZXEhKG5ldC5hZmksIE5ldEFGSSgiNDkiLnRv
X293bmVkKCkpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShuZXQuYXJlYSwgTmV0QXJlYSgiMDAwMSIu
dG9fb3duZWQoKSkpOworICAgICAgICBhc3NlcnRfZXEhKG5ldC5zeXN0ZW0sIE5ldFN5c3RlbUlk
KCIxOTIxLjY4MDAuMTAwMiIudG9fb3duZWQoKSkpOworICAgICAgICBhc3NlcnRfZXEhKG5ldC5z
ZWxlY3RvciwgTmV0U2VsZWN0b3IoIjAwIi50b19vd25lZCgpKSk7CisKKyAgICAgICAgbGV0IGlu
cHV0ID0gIjQ1LjAyMDAuMDEwMC4xMDAxLmJhMWYuMDEiOworICAgICAgICBsZXQgbmV0ID0gaW5w
dXQucGFyc2U6OjxOZXQ+KCkuZXhwZWN0KCJ0aGlzIG5ldCBzaG91bGQgcGFyc2UiKTsKKyAgICAg
ICAgYXNzZXJ0X2VxIShuZXQuYWZpLCBOZXRBRkkoIjQ1Ii50b19vd25lZCgpKSk7CisgICAgICAg
IGFzc2VydF9lcSEobmV0LmFyZWEsIE5ldEFyZWEoIjAyMDAiLnRvX293bmVkKCkpKTsKKyAgICAg
ICAgYXNzZXJ0X2VxIShuZXQuc3lzdGVtLCBOZXRTeXN0ZW1JZCgiMDEwMC4xMDAxLmJhMWYiLnRv
X293bmVkKCkpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShuZXQuc2VsZWN0b3IsIE5ldFNlbGVjdG9y
KCIwMSIudG9fb3duZWQoKSkpOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X25l
dF9mcm9tX3N0cl9mYWlsZWQoKSB7CisgICAgICAgIGxldCBpbnB1dCA9ICI0OS4wMDAxLjE5MjEu
NjgwMC4xMDAyLjAwMCI7CisgICAgICAgIGFzc2VydCEobWF0Y2hlcyEoCisgICAgICAgICAgICBp
bnB1dC5wYXJzZTo6PE5ldD4oKSwKKyAgICAgICAgICAgIEVycihOZXRFcnJvcjo6SW52YWxpZE5l
dFNlbGVjdG9yKQorICAgICAgICApKTsKKworICAgICAgICBsZXQgaW5wdXQgPSAiNDkuMDAwMS4x
OTIxLjY4MDAuMTAwMi4wMC4wMCI7CisgICAgICAgIGFzc2VydCEobWF0Y2hlcyEoaW5wdXQucGFy
c2U6OjxOZXQ+KCksIEVycihOZXRFcnJvcjo6V3JvbmdMZW5ndGgpKSk7CisKKyAgICAgICAgbGV0
IGlucHV0ID0gIjQ5LjAwMDEuMTkyMS42ODAwLjEwMDAyLjAwIjsKKyAgICAgICAgYXNzZXJ0ISht
YXRjaGVzISgKKyAgICAgICAgICAgIGlucHV0LnBhcnNlOjo8TmV0PigpLAorICAgICAgICAgICAg
RXJyKE5ldEVycm9yOjpJbnZhbGlkU3lzdGVtSWQpCisgICAgICAgICkpOworCisgICAgICAgIGxl
dCBpbnB1dCA9ICI0OS4wMDAxLjE5MjEuNjgwMC4xejAyLjAwIjsKKyAgICAgICAgYXNzZXJ0ISht
YXRjaGVzISgKKyAgICAgICAgICAgIGlucHV0LnBhcnNlOjo8TmV0PigpLAorICAgICAgICAgICAg
RXJyKE5ldEVycm9yOjpJbnZhbGlkU3lzdGVtSWQpCisgICAgICAgICkpOworCisgICAgICAgIGxl
dCBpbnB1dCA9ICI0MDkuMDAwMS4xOTIxLjY4MDAuMTAwMi4wMCI7CisgICAgICAgIGFzc2VydCEo
bWF0Y2hlcyEoaW5wdXQucGFyc2U6OjxOZXQ+KCksIEVycihOZXRFcnJvcjo6SW52YWxpZEFGSSkp
KTsKKworICAgICAgICBsZXQgaW5wdXQgPSAiNDkuMDAwMDEuMTkyMS42ODAwLjEwMDIuMDAiOwor
ICAgICAgICBhc3NlcnQhKG1hdGNoZXMhKGlucHV0LnBhcnNlOjo8TmV0PigpLCBFcnIoTmV0RXJy
b3I6OkludmFsaWRBcmVhKSkpOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X25l
dF9kaXNwbGF5KCkgeworICAgICAgICBsZXQgbmV0ID0gTmV0IHsKKyAgICAgICAgICAgIGFmaTog
TmV0QUZJKCI0OSIudG9fb3duZWQoKSksCisgICAgICAgICAgICBhcmVhOiBOZXRBcmVhKCIwMDAx
Ii50b19vd25lZCgpKSwKKyAgICAgICAgICAgIHN5c3RlbTogTmV0U3lzdGVtSWQoIjE5MjEuNjgw
MC4xMDAyIi50b19vd25lZCgpKSwKKyAgICAgICAgICAgIHNlbGVjdG9yOiBOZXRTZWxlY3Rvcigi
MDAiLnRvX293bmVkKCkpLAorICAgICAgICB9OworICAgICAgICBhc3NlcnRfZXEhKGZvcm1hdCEo
IntuZXR9IiksICI0OS4wMDAxLjE5MjEuNjgwMC4xMDAyLjAwIik7CisgICAgfQorCisgICAgI1t0
ZXN0XQorICAgIGZuIHRlc3RfbmV0X2Zyb21faXB2NCgpIHsKKyAgICAgICAgbGV0IGlwOiBJcHY0
QWRkciA9ICIxOTIuMTY4LjEuMTAwIi5wYXJzZSgpLnVud3JhcCgpOworICAgICAgICBsZXQgbmV0
OiBOZXQgPSBpcC5pbnRvKCk7CisgICAgICAgIGFzc2VydF9lcSEoZm9ybWF0ISgie25ldH0iKSwg
IjQ5LjAwMDEuMTkyMS42ODAwLjExMDAuMDAiKTsKKworICAgICAgICBsZXQgaXAxOiBJcHY0QWRk
ciA9ICIxMC4xMC4yLjI0NSIucGFyc2UoKS51bndyYXAoKTsKKyAgICAgICAgbGV0IG5ldDE6IE5l
dCA9IGlwMS5pbnRvKCk7CisgICAgICAgIGFzc2VydF9lcSEoZm9ybWF0ISgie25ldDF9IiksICI0
OS4wMDAxLjAxMDAuMTAwMC4yMjQ1LjAwIik7CisKKyAgICAgICAgbGV0IGlwMjogSXB2NEFkZHIg
PSAiMS4xLjEuMSIucGFyc2UoKS51bndyYXAoKTsKKyAgICAgICAgbGV0IG5ldDI6IE5ldCA9IGlw
Mi5pbnRvKCk7CisgICAgICAgIGFzc2VydF9lcSEoZm9ybWF0ISgie25ldDJ9IiksICI0OS4wMDAx
LjAwMTAuMDEwMC4xMDAxLjAwIik7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3Rf
bmV0X2Zyb21faXB2NigpIHsKKyAgICAgICAgLy8gMjAwMTpkYjg6OjEgLT4gWzIwMDEsIDBkYjgs
IDAsIDAsIDAsIDAsIDAsIDFdCisgICAgICAgIC8vIGxhc3QgMyBzZWdtZW50czogWzAsIDAsIDFd
CisgICAgICAgIGxldCBpcDogSXB2NkFkZHIgPSAiMjAwMTpkYjg6OjEiLnBhcnNlKCkudW53cmFw
KCk7CisgICAgICAgIGxldCBuZXQ6IE5ldCA9IGlwLmludG8oKTsKKyAgICAgICAgYXNzZXJ0X2Vx
IShmb3JtYXQhKCJ7bmV0fSIpLCAiNDkuMDAwMS4wMDAwLjAwMDAuMDAwMS4wMCIpOworCisgICAg
ICAgIC8vIGZlODA6OjEyMzQ6NTY3ODphYmNkIC0+IFtmZTgwLCAwLCAwLCAwLCAwLCAxMjM0LCA1
Njc4LCBhYmNkXQorICAgICAgICAvLyBsYXN0IDMgc2VnbWVudHM6IFsxMjM0LCA1Njc4LCBhYmNk
XQorICAgICAgICBsZXQgaXAxOiBJcHY2QWRkciA9ICJmZTgwOjoxMjM0OjU2Nzg6YWJjZCIucGFy
c2UoKS51bndyYXAoKTsKKyAgICAgICAgbGV0IG5ldDE6IE5ldCA9IGlwMS5pbnRvKCk7CisgICAg
ICAgIGFzc2VydF9lcSEoZm9ybWF0ISgie25ldDF9IiksICI0OS4wMDAxLjEyMzQuNTY3OC5hYmNk
LjAwIik7CisKKyAgICAgICAgLy8gMjAwMTowZGI4Ojg1YTM6OjhhMmU6MzcwOjczMzQgLT4gWzIw
MDEsIDBkYjgsIDg1YTMsIDAsIDAsIDhhMmUsIDAzNzAsIDczMzRdCisgICAgICAgIC8vIGxhc3Qg
MyBzZWdtZW50czogWzhhMmUsIDAzNzAsIDczMzRdCisgICAgICAgIGxldCBpcDI6IElwdjZBZGRy
ID0gIjIwMDE6MGRiODo4NWEzOjo4YTJlOjM3MDo3MzM0Ii5wYXJzZSgpLnVud3JhcCgpOworICAg
ICAgICBsZXQgbmV0MjogTmV0ID0gaXAyLmludG8oKTsKKyAgICAgICAgYXNzZXJ0X2VxIShmb3Jt
YXQhKCJ7bmV0Mn0iKSwgIjQ5LjAwMDEuOGEyZS4wMzcwLjczMzQuMDAiKTsKKworICAgICAgICAv
LyA6OjEgLT4gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDFdCisgICAgICAgIC8vIGxhc3QgMyBzZWdt
ZW50czogWzAsIDAsIDFdCisgICAgICAgIGxldCBpcDM6IElwdjZBZGRyID0gIjo6MSIucGFyc2Uo
KS51bndyYXAoKTsKKyAgICAgICAgbGV0IG5ldDM6IE5ldCA9IGlwMy5pbnRvKCk7CisgICAgICAg
IGFzc2VydF9lcSEoZm9ybWF0ISgie25ldDN9IiksICI0OS4wMDAxLjAwMDAuMDAwMC4wMDAxLjAw
Iik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcHJveG1veC1zZG4tdHlwZXMvc3JjL29wZW5mYWJy
aWMucnMgYi9wcm94bW94LXNkbi10eXBlcy9zcmMvb3BlbmZhYnJpYy5ycwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmYzZmNlNWRjY2E3YwotLS0gL2Rldi9udWxsCisr
KyBiL3Byb3htb3gtc2RuLXR5cGVzL3NyYy9vcGVuZmFicmljLnJzCkBAIC0wLDAgKzEsODkgQEAK
K3VzZSBzdGQ6OntmbXQ6OkRpc3BsYXksIG51bTo6UGFyc2VJbnRFcnJvcn07CisKK3VzZSBzZXJk
ZTo6e0Rlc2VyaWFsaXplLCBTZXJpYWxpemV9OwordXNlIHRoaXNlcnJvcjo6RXJyb3I7CisKKyNb
ZGVyaXZlKEVycm9yLCBEZWJ1ZyldCitwdWIgZW51bSBJbnRlZ2VyUmFuZ2VFcnJvciB7CisgICAg
I1tlcnJvcigiVGhlIHZhbHVlIG11c3QgYmUgYmV0d2VlbiB7bWlufSBhbmQge21heH0gc2Vjb25k
cyIpXQorICAgIE91dE9mUmFuZ2UgeyBtaW46IGkzMiwgbWF4OiBpMzIgfSwKKyAgICAjW2Vycm9y
KCJFcnJvciBwYXJzaW5nIHRvIG51bWJlciIpXQorICAgIFBhcnNpbmdFcnJvcigjW2Zyb21dIFBh
cnNlSW50RXJyb3IpLAorfQorCisvLy8gVGhlIE9wZW5GYWJyaWMgQ1NOUCBJbnRlcnZhbC4KKy8v
LworLy8vIFRoZSBDb21wbGV0ZSBTZXF1ZW5jZSBOdW1iZXIgUGFja2V0cyAoQ1NOUCkgaW50ZXJ2
YWwgaW4gc2Vjb25kcy4gVGhlIGludGVydmFsIHJhbmdlIGlzIDEgdG8KKy8vLyA2MDAuCisjW2Rl
cml2ZShTZXJpYWxpemUsIERlc2VyaWFsaXplLCBIYXNoLCBEZWJ1ZywgQ2xvbmUsIENvcHksIFBh
cnRpYWxFcSwgRXEsIFBhcnRpYWxPcmQsIE9yZCldCisjW3NlcmRlKHRyeV9mcm9tID0gInUxNiIp
XQorcHViIHN0cnVjdCBDc25wSW50ZXJ2YWwodTE2KTsKKworaW1wbCBUcnlGcm9tPHUxNj4gZm9y
IENzbnBJbnRlcnZhbCB7CisgICAgdHlwZSBFcnJvciA9IEludGVnZXJSYW5nZUVycm9yOworCisg
ICAgZm4gdHJ5X2Zyb20obnVtYmVyOiB1MTYpIC0+IFJlc3VsdDxTZWxmLCBTZWxmOjpFcnJvcj4g
eworICAgICAgICBpZiAoMS4uPTYwMCkuY29udGFpbnMoJm51bWJlcikgeworICAgICAgICAgICAg
T2soQ3NucEludGVydmFsKG51bWJlcikpCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBF
cnIoSW50ZWdlclJhbmdlRXJyb3I6Ok91dE9mUmFuZ2UgeyBtaW46IDEsIG1heDogNjAwIH0pCisg
ICAgICAgIH0KKyAgICB9Cit9CisKK2ltcGwgRGlzcGxheSBmb3IgQ3NucEludGVydmFsIHsKKyAg
ICBmbiBmbXQoJnNlbGYsIGY6ICZtdXQgc3RkOjpmbXQ6OkZvcm1hdHRlcjwnXz4pIC0+IHN0ZDo6
Zm10OjpSZXN1bHQgeworICAgICAgICBzZWxmLjAuZm10KGYpCisgICAgfQorfQorCisvLy8gVGhl
IE9wZW5GYWJyaWMgSGVsbG8gSW50ZXJ2YWwuCisvLy8KKy8vLyBUaGUgSGVsbG8gSW50ZXJ2YWwg
Zm9yIGEgZ2l2ZW4gaW50ZXJmYWNlIGluIHNlY29uZHMuIFRoZSByYW5nZSBpcyAxIHRvIDYwMC4g
SGVsbG8gcGFja2V0cyBhcmUKKy8vLyB1c2VkIHRvIGVzdGFibGlzaCBhbmQgbWFpbnRhaW4gYWRq
YWNlbmN5IGJldHdlZW4gT3BlbkZhYnJpYyBuZWlnaGJvcnMuCisjW2Rlcml2ZShTZXJpYWxpemUs
IERlc2VyaWFsaXplLCBIYXNoLCBEZWJ1ZywgQ2xvbmUsIENvcHksIFBhcnRpYWxFcSwgRXEsIFBh
cnRpYWxPcmQsIE9yZCldCisjW3NlcmRlKHRyeV9mcm9tID0gInUxNiIpXQorcHViIHN0cnVjdCBI
ZWxsb0ludGVydmFsKHUxNik7CisKK2ltcGwgVHJ5RnJvbTx1MTY+IGZvciBIZWxsb0ludGVydmFs
IHsKKyAgICB0eXBlIEVycm9yID0gSW50ZWdlclJhbmdlRXJyb3I7CisKKyAgICBmbiB0cnlfZnJv
bShudW1iZXI6IHUxNikgLT4gUmVzdWx0PFNlbGYsIFNlbGY6OkVycm9yPiB7CisgICAgICAgIGlm
ICgxLi49NjAwKS5jb250YWlucygmbnVtYmVyKSB7CisgICAgICAgICAgICBPayhIZWxsb0ludGVy
dmFsKG51bWJlcikpCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBFcnIoSW50ZWdlclJh
bmdlRXJyb3I6Ok91dE9mUmFuZ2UgeyBtaW46IDEsIG1heDogNjAwIH0pCisgICAgICAgIH0KKyAg
ICB9Cit9CisKK2ltcGwgRGlzcGxheSBmb3IgSGVsbG9JbnRlcnZhbCB7CisgICAgZm4gZm10KCZz
ZWxmLCBmOiAmbXV0IHN0ZDo6Zm10OjpGb3JtYXR0ZXI8J18+KSAtPiBzdGQ6OmZtdDo6UmVzdWx0
IHsKKyAgICAgICAgc2VsZi4wLmZtdChmKQorICAgIH0KK30KKworLy8vIFRoZSBPcGVuRmFicmlj
IEhlbGxvIE11bHRpcGxpZXIuCisvLy8KKy8vLyBUaGlzIGlzIHRoZSBtdWx0aXBsaWVyIGZvciB0
aGUgaGVsbG8gaG9sZGluZyB0aW1lIG9uIGEgZ2l2ZW4gaW50ZXJmYWNlLiBUaGUgcmFuZ2UgaXMg
MiB0byAxMDAuCisjW2Rlcml2ZShTZXJpYWxpemUsIERlc2VyaWFsaXplLCBIYXNoLCBEZWJ1Zywg
Q2xvbmUsIENvcHksIFBhcnRpYWxFcSwgRXEsIFBhcnRpYWxPcmQsIE9yZCldCisjW3NlcmRlKHRy
eV9mcm9tID0gInUxNiIpXQorcHViIHN0cnVjdCBIZWxsb011bHRpcGxpZXIodTE2KTsKKworaW1w
bCBUcnlGcm9tPHUxNj4gZm9yIEhlbGxvTXVsdGlwbGllciB7CisgICAgdHlwZSBFcnJvciA9IElu
dGVnZXJSYW5nZUVycm9yOworCisgICAgZm4gdHJ5X2Zyb20obnVtYmVyOiB1MTYpIC0+IFJlc3Vs
dDxTZWxmLCBTZWxmOjpFcnJvcj4geworICAgICAgICBpZiAoMi4uPTEwMCkuY29udGFpbnMoJm51
bWJlcikgeworICAgICAgICAgICAgT2soSGVsbG9NdWx0aXBsaWVyKG51bWJlcikpCisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBFcnIoSW50ZWdlclJhbmdlRXJyb3I6Ok91dE9mUmFuZ2Ug
eyBtaW46IDIsIG1heDogMTAwIH0pCisgICAgICAgIH0KKyAgICB9Cit9CisKK2ltcGwgRGlzcGxh
eSBmb3IgSGVsbG9NdWx0aXBsaWVyIHsKKyAgICBmbiBmbXQoJnNlbGYsIGY6ICZtdXQgc3RkOjpm
bXQ6OkZvcm1hdHRlcjwnXz4pIC0+IHN0ZDo6Zm10OjpSZXN1bHQgeworICAgICAgICBzZWxmLjAu
Zm10KGYpCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcHJveG1veC12ZS1jb25maWcvQ2FyZ28udG9t
bCBiL3Byb3htb3gtdmUtY29uZmlnL0NhcmdvLnRvbWwKaW5kZXggMmYzNTQ0YmQ1NjExLi5kODcz
NWUzMzY1M2IgMTAwNjQ0Ci0tLSBhL3Byb3htb3gtdmUtY29uZmlnL0NhcmdvLnRvbWwKKysrIGIv
cHJveG1veC12ZS1jb25maWcvQ2FyZ28udG9tbApAQCAtMTAsMTIgKzEwLDEyIEBAIGV4Y2x1ZGUu
d29ya3NwYWNlID0gdHJ1ZQogbG9nID0gIjAuNCIKIGFueWhvdyA9ICIxIgogbml4ID0gIjAuMjYi
Ci10aGlzZXJyb3IgPSAiMS4wLjU5IgordGhpc2Vycm9yID0geyB3b3Jrc3BhY2UgPSB0cnVlIH0K
IAotc2VyZGUgPSB7IHZlcnNpb24gPSAiMSIsIGZlYXR1cmVzID0gWyAiZGVyaXZlIiBdIH0KK3Nl
cmRlID0geyB3b3Jrc3BhY2UgPSB0cnVlLCBmZWF0dXJlcyA9IFsgImRlcml2ZSIgXSB9CiBzZXJk
ZV9qc29uID0gIjEiCiBzZXJkZV9wbGFpbiA9ICIxIgotc2VyZGVfd2l0aCA9ICIzIgorc2VyZGVf
d2l0aCA9IHsgd29ya3NwYWNlID0gdHJ1ZSB9CiAKIHByb3htb3gtbmV0d29yay10eXBlcyA9IHsg
d29ya3NwYWNlID0gdHJ1ZSB9CiBwcm94bW94LXNjaGVtYSA9ICI0IgotLSAKMi4zOS41CgoKCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCnB2ZS1kZXZlbCBt
YWlsaW5nIGxpc3QKcHZlLWRldmVsQGxpc3RzLnByb3htb3guY29tCmh0dHBzOi8vbGlzdHMucHJv
eG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3B2ZS1kZXZlbAo=