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=