From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 6AE4F1FF16B for ; Thu, 31 Oct 2024 18:08:00 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 3BC4ADFB0; Thu, 31 Oct 2024 18:08:02 +0100 (CET) From: Max Carrara To: pve-devel@lists.proxmox.com Date: Thu, 31 Oct 2024 18:07:16 +0100 Message-Id: <20241031170720.338794-2-m.carrara@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20241031170720.338794-1-m.carrara@proxmox.com> References: <20241031170720.338794-1-m.carrara@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.016 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 URIBL_SBL_A 0.1 Contains URL's A record listed in the Spamhaus SBL blocklist [185.199.108.153, 185.199.109.153, 185.199.110.153, 185.199.111.153] Subject: [pve-devel] [PATCH v3 pve-common 1/5] section config: document package and its methods with POD X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" QXBhcnQgZnJvbSB0aGUgb2J2aW91cyBiZW5lZml0cyB0aGF0IGRvY3VtZW50YXRpb24gaGFzLCB0 aGlzIGFsc28KYWxsb3dzIExTUHMgdG8gcHJvdmlkZSBkb2NzdHJpbmdzIGUuZy4gdmlhICd0ZXh0 RG9jdW1lbnQvaG92ZXInIFswXS4KClRlc3RlZCB3aXRoIFBlcmwgTmF2aWdhdG9yIFsxXS4KClsw XTogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9z cGVjaWZpY2F0aW9ucy9sc3AvMy4xNy9zcGVjaWZpY2F0aW9uLyN0ZXh0RG9jdW1lbnRfaG92ZXIK WzFdOiBodHRwczovL2dpdGh1Yi5jb20vYnNjYW4vUGVybE5hdmlnYXRvcgoKU2lnbmVkLW9mZi1i eTogTWF4IENhcnJhcmEgPG0uY2FycmFyYUBwcm94bW94LmNvbT4KLS0tCkNoYW5nZXMgdjIgLS0+ IHYzOgogICogdXBkYXRlIFBPRCBzdHlsZQogICogcGxhY2UgTkFNRSwgREVTQ1JJUFRJT04sIFVT QUdFIHNlY3Rpb25zIGFib3ZlIGBwYWNrYWdlYCBkZWZpbml0aW9uCiAgKiByZW1vdmUgZXhjZXNz IHVzYWdlIG9mIEk8PiBjb2RlcwogICogcmVtb3ZlIG5lZWRsZXNzIGA9cG9kYCBwYXJhZ3JhcGhz IChlLmcuIGA9aGVhZDNgIGFsb25lIHN1ZmZpY2VzIHRvCiAgICBzdGFydCBQT0QgY29udGVudCkK CkNoYW5nZXMgdjEgLS0+IHYyOgogICogYmFzaWNhbGx5IGFsbCBvZiBARmFiaWFuJ3MgZmVlZGJh Y2sgWzBdIHdhcyB0YWtlbiBpbnRvIGFjY291bnQsCiAgICB3aGljaCBpcyB3YXkgdG9vIG11Y2gg dG8gbGlzdCBoZXJlLCBzbyBwbGVhc2Ugc2VlIHRoZSBmZWVkYmFjawogICAgaXRzZWxmCiAgKiB1 c2UgbW9yZSBsaW5rcyB3aGVyZSBhcHByb3ByaWF0ZSwgZS5nLiB0byByZWZlciB0byBtZXRob2Rz CiAgICBhc3NvY2lhdGVkIHdpdGggYSB0ZXJtCiAgKiBwcm92aWRlIG1vcmUgZXhhbXBsZSBjb2Rl IChzdWJyb3V0aW5lcyBgcHJpdmF0ZWAgYW5kIGBkZWNvZGVfdmFsdWVgKQoKWzBdOiBodHRwczov L2xvcmUucHJveG1veC5jb20vcHZlLWRldmVsLzE3MTgwOTczOTcueG5zOGk0NDh2My5hc3Ryb2lk QHl1bmEubm9uZS8KCiBzcmMvUFZFL1NlY3Rpb25Db25maWcucG0gfCA5NDIgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrLS0tCiAxIGZpbGUgY2hhbmdlZCwgODc3IGluc2VydGlv bnMoKyksIDY1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9QVkUvU2VjdGlvbkNvbmZp Zy5wbSBiL3NyYy9QVkUvU2VjdGlvbkNvbmZpZy5wbQppbmRleCBhMThlOWQ4Li4xMmY3ZWE0IDEw MDY0NAotLS0gYS9zcmMvUFZFL1NlY3Rpb25Db25maWcucG0KKysrIGIvc3JjL1BWRS9TZWN0aW9u Q29uZmlnLnBtCkBAIC0xLDMgKzEsOTcgQEAKKz1oZWFkMSBOQU1FCisKK0M8UFZFOjpTZWN0aW9u Q29uZmlnPiAtIEFuIEV4dGVuZGlibGUgQ29uZmlndXJhdGlvbiBGaWxlIEZvcm1hdAorCis9aGVh ZDEgREVTQ1JJUFRJT04KKworVGhpcyBwYWNrYWdlIHByb3ZpZGVzIGEgd2F5IHRvIGhhdmUgbXVs dGlwbGUgKG9mdGVuIHNpbWlsYXIpIHR5cGVzIG9mIGVudHJpZXMKK2luIHRoZSBzYW1lIGNvbmZp ZyBmaWxlLCBlYWNoIGluIGl0cyBvd24gc2VjdGlvbiwgdGh1cyBJPFNlY3Rpb24gQ29uZmlnPi4K KworRm9yIGVhY2ggQzxTZWN0aW9uQ29uZmlnPi1iYXNlZCBjb25maWcgZmlsZSwgYSBDPFBWRTo6 SlNPTlNjaGVtYT4gaXMgZGVyaXZlZAorYXV0b21hdGljYWxseS4gVGhpcyBzY2hlbWEgY2FuIGJl IHVzZWQgdG8gaW1wbGVtZW50IENSVUQgb3BlcmF0aW9ucyBmb3IKK3RoZSBjb25maWcgZGF0YS4K KworVGhlIGxvY2F0aW9uIG9mIGEgY29uZmlnIGZpbGUgaXMgY2hvc2VuIGJ5IHRoZSBhdXRob3Ig b2YgdGhlIGNvZGUgdGhhdCB1c2VzCitDPFNlY3Rpb25Db25maWc+IGFuZCBpcyBub3Qgc29tZXRo aW5nIHRoaXMgbW9kdWxlIGlzIGNvbmNlcm5lZCB3aXRoLgorCis9aGVhZDEgVVNBR0UKKworVGhl IGludGVuZGVkIHN0cnVjdHVyZSBpcyB0byBoYXZlIGEgc2luZ2xlIEk8YmFzZSBwbHVnaW4+IHRo YXQgdXNlcyB0aGUKK0M8TDxQVkU6OlNlY3Rpb25Db25maWc+PiBtb2R1bGUgYXMgYSBiYXNlIG1v ZHVsZS4gRnVydGhlcm1vcmUsIGl0IHNob3VsZCBwcm92aWRlCittZWFuaW5nZnVsIGRlZmF1bHRz IGluIGl0cyBDPCRkZWZhdWx0RGF0YT4sIHN1Y2ggYXMgYSBkZWZhdWx0IGxpc3Qgb2YgY29yZQor QzxMPFBWRTo6SlNPTlNjaGVtYT4+IEk8cHJvcGVydGllcz4uIFRoZSBJPGJhc2UgcGx1Z2luPiBp cyB0aHVzIHZlcnkgc2ltaWxhciB0byBhbgorSTxhYnN0cmFjdCBjbGFzcz4uCisKK0VhY2ggSTxj aGlsZCBwbHVnaW4+IGlzIHRoZW4gZGVmaW5lZCBpbiBpdHMgb3duIHBhY2thZ2UgdGhhdCBzaG91 bGQgaW5oZXJpdAorZnJvbSB0aGUgYmFzZSBwbHVnaW4gYW5kIGRlZmluZXMgd2hpY2ggcHJvcGVy dGllcyBpdCBpdHNlbGYgcHJvdmlkZXMgYW5kCit1c2VzLCBhcyB3ZWxsIGFzIHdoaWNoIHByb3Bl cnRpZXMgaXQgdXNlcyBmcm9tIHRoZSBiYXNlIHBsdWdpbi4KKworVGhlIG1ldGhvZHMgdGhhdCBu ZWVkIHRvIGJlIGltcGxlbWVudGVkIGFyZSBhbm5vdGF0ZWQgaW4gdGhlIEw8L01FVEhPRFM+IHNl Y3Rpb24KK2JlbG93LgorCisgICAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkAorICAgICAgICAgICAgICDilIIgIFNlY3Rp b25Db25maWcgIOKUggorICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDi lKzilIDilIDilIDilIDilIDilIDilIDilIDilJgKKyAgICAgICAgICAgICAgICAgICAgICAg4pSC CisgICAgICAgICAgICAgICAgICAgICAgIOKUggorICAgICAgICAgICAgICAgICAgICAgICDilIIK KyAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pa84pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSQCisgICAgICAgICAgICAgIOKUgiAgICBCYXNlUGx1Z2luICAg4pSCCisg ICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUmAorICAgICAgICAgICAgICAgICAgICAgICDilIIKKyAgICAgICAgICAgICDi lIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDi lIDilJAKKyAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAg4pSCCisgICAg4pSM4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQIOKUjOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkAorICAg IOKUgkNvbmNyZXRlUGx1Z2luRm9v4pSCIOKUgkNvbmNyZXRlUGx1Z2luQmFy4pSCCisgICAg4pSU 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYIOKU lOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmAor Cis9aGVhZDIgUkVHSVNURVJJTkcgUExVR0lOUworCitJbiBvcmRlciB0byBhY3R1YWxseSBiZSBh YmxlIHRvIHVzZSBwbHVnaW5zLCB0aGV5IG11c3QgZmlyc3QgYmUKK0w8PCByZWdpc3RlcmVkfC8k cGx1Z2luLT5yZWdpc3RlcigpID4+IGFuZCB0aGVuIEw8PCBpbml0aWFsaXplZHwvJGJhc2UtPmlu aXQoKSA+PgordmlhIHRoZSBJPGJhc2UgcGx1Z2luPjoKKworICAgIHVzZSBQVkU6OkV4YW1wbGU6 OkJhc2VQbHVnaW47CisgICAgdXNlIFBWRTo6RXhhbXBsZTo6UGx1Z2luQTsKKyAgICB1c2UgUFZF OjpFeGFtcGxlOjpQbHVnaW5COworCisgICAgUFZFOjpFeGFtcGxlOjpQbHVnaW5BLT5yZWdpc3Rl cigpOworICAgIFBWRTo6RXhhbXBsZTo6UGx1Z2luQi0+cmVnaXN0ZXIoKTsKKyAgICBQVkU6OkV4 YW1wbGU6OkJhc2VQbHVnaW4tPmluaXQoKTsKKworPWhlYWQyIE1PREVTCisKK1RoZXJlIGFyZSB0 d28gbW9kZXMgZm9yIGhvdyBwcm9wZXJ0aWVzIGFyZSBleHBvc2VkLgorCis9aGVhZDMgdW5pZmll ZCBtb2RlIChkZWZhdWx0KQorCitJbiB0aGlzIG1vZGUgdGhlcmUgaXMgb25seSBhIGdsb2JhbCBs aXN0IG9mIHByb3BlcnRpZXMgd2hpY2ggdGhlIGNoaWxkCitwbHVnaW5zIGNhbiB1c2UuIFRoaXMg aGFzIHRoZSBjb25zZXF1ZW5jZSB0aGF0IGl0J3Mgbm90IHBvc3NpYmxlIHRvIGRlZmluZSB0aGUK K3NhbWUgcHJvcGVydHkgbmFtZSBtb3JlIHRoYW4gb25jZSBpbiBkaWZmZXJlbnQgcGx1Z2lucy4K KworVGhlIHJlYXNvbiBiZWhpbmQgdGhpcyBiZWhhdmlvdXIgaXMgdG8gZW5zdXJlIHRoYXQgcHJv cGVydGllcyB3aXRoIHRoZSBzYW1lCituYW1lIGRvbid0IGJlaGF2ZSBpbiBkaWZmZXJlbnQgd2F5 cywgb3IgaW4gb3RoZXIgd29yZHMsIHRvIGVuZm9yY2UgdGhlIHVzZSBvZgoraWRlbnRpY2FsIHBy b3BlcnRpZXMgZm9yIG11bHRpcGxlIHBsdWdpbnMuCisKKz1oZWFkMyBpc29sYXRlZCBtb2RlCisK K1RoaXMgbW9kZSBjYW4gYmUgdXNlZCBieSBjYWxsaW5nIEM8TDw8IGluaXQoKXwvJGJhc2UtPmlu aXQoKSA+Pj4gd2l0aCBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlcjoKKworICAgIFBWRTo6RXhhbXBs ZTo6QmFzZVBsdWdpbi0+aW5pdChwcm9wZXJ0eV9pc29sYXRpb24gPT4gMSk7CisKK1dpdGggdGhp cyBtb2RlIGVhY2ggSTxjaGlsZCBwbHVnaW4+IGdldHMgaXRzIG93biBpc29sYXRlZCBsaXN0IG9m IHByb3BlcnRpZXMsCitvciBpbiBvdGhlciB3b3JkcywgYSBmdWxseSBpc29sYXRlZCBzY2hlbWEg bmFtZXNwYWNlLiBOb3JtYWxseSBvbmUgd2FudHMgdG8gdXNlCitDPG9uZU9mPiBzY2hlbWFzIHdo ZW4gZW5hYmxpbmcgaXNvbGF0aW9uLgorCitOb3RlIHRoYXQgaW4gdGhpcyBtb2RlIGl0J3Mgb25s eSBuZWNlc3NhcnkgdG8gc3BlY2lmeSBhIHByb3BlcnR5IGluIHRoZQorcmV0dXJuIHZhbHVlIG9m IHRoZSBDPEw8PCBvcHRpb25zKCl8L29wdGlvbnMoKSA+Pj4gbWV0aG9kIHdoZW4gaXQncyBlaXRo ZXIKK0M8Zml4ZWQ+IG9yIHN0ZW1zIGZyb20gdGhlIGdsb2JhbCBsaXN0IG9mIHByb3BlcnRpZXMu CisKK0FsbCBJPGxvY2FsbHk+IGRlZmluZWQgcHJvcGVydGllcyBvZiBhIGNoaWxkIHBsdWdpbiBh cmUgYXV0b21hdGljYWxseSBhZGRlZCB0bworaXRzIHNjaGVtYS4KKworPWN1dAorCiBwYWNrYWdl IFBWRTo6U2VjdGlvbkNvbmZpZzsKIAogdXNlIHN0cmljdDsKQEAgLTEwLDY1ICsxMDQsOSBAQCB1 c2UgUFZFOjpFeGNlcHRpb24gcXcocmFpc2VfcGFyYW1fZXhjKTsKIHVzZSBQVkU6OkpTT05TY2hl bWEgcXcoZ2V0X3N0YW5kYXJkX29wdGlvbik7CiB1c2UgUFZFOjpUb29sczsKIAotIyBUaGlzIHBh Y2thZ2UgcHJvdmlkZXMgYSB3YXkgdG8gaGF2ZSBtdWx0aXBsZSAob2Z0ZW4gc2ltaWxhcikgdHlw ZXMgb2YgZW50cmllcwotIyBpbiB0aGUgc2FtZSBjb25maWcgZmlsZSwgZWFjaCBpbiBpdHMgb3du IHNlY3Rpb24sIHRodXMgIlNlY3Rpb24gQ29uZmlnIi4KLSMKLSMgVGhlIGludGVuZGVkIHN0cnVj dHVyZSBpcyB0byBoYXZlIGEgc2luZ2xlICdiYXNlJyBwbHVnaW4gdGhhdCBpbmhlcml0cyBmcm9t Ci0jIHRoaXMgY2xhc3MgYW5kIHByb3ZpZGVzIG1lYW5pbmdmdWwgZGVmYXVsdHMgaW4gaXRzICck ZGVmYXVsdERhdGEnLCBlLmcuIGEKLSMgZGVmYXVsdCBsaXN0IG9mIHRoZSBjb3JlIHByb3BlcnRp ZXMgaW4gaXRzIHByb3BlcnR5TGlzdCAobW9zdCBvZnRlbiBvbmx5ICdpZCcKLSMgYW5kICd0eXBl JykKLSMKLSMgRWFjaCAncmVhbCcgcGx1Z2luIHRoZW4gaGFzIGl0J3Mgb3duIHBhY2thZ2UgdGhh dCBzaG91bGQgaW5oZXJpdCBmcm9tIHRoZQotIyAnYmFzZScgcGx1Z2luIGFuZCByZXR1cm5zIGl0 J3Mgc3BlY2lmaWMgcHJvcGVydGllcyBpbiB0aGUgJ3Byb3BlcnRpZXMnIG1ldGhvZCwKLSMgaXRz IHR5cGUgaW4gdGhlICd0eXBlJyBtZXRob2QgYW5kIGFsbCB0aGUga25vd24gb3B0aW9ucywgZnJv bSBib3RoIHBhcmVudCBhbmQKLSMgaXRzZWxmLCBpbiB0aGUgJ29wdGlvbnMnIG1ldGhvZC4KLSMg VGhlIG9wdGlvbnMgbWV0aG9kIGNhbiBhbHNvIGJlIHVzZWQgdG8gZGVmaW5lIGlmIGEgcHJvcGVy dHkgaXMgJ29wdGlvbmFsJyBvcgotIyAnZml4ZWQnIChvbmx5IHNldHRhYmxlIG9uIGNvbmZpZyBl bnRpdHktY3JlYXRpb24pLCBmb3IgZXhhbXBsZToKLSMKLSMgYGBgYAotIyBzdWIgb3B0aW9ucyB7 Ci0jICAgICByZXR1cm4gewotIyAgICAgICAgICdzb21lLW9wdGlvbmFsLXByb3BlcnR5JyA9PiB7 IG9wdGlvbmFsID0+IDEgfSwKLSMgICAgICAgICAnYS1maXhlZC1wcm9wZXJ0eScgPT4geyBmaXhl ZCA9PiAxIH0sCi0jICAgICAgICAgJ2EtcmVxdWlyZWQtYnV0LW5vdC1maXhlZC1wcm9wZXJ0eScg PT4ge30sCi0jICAgICB9OwotIyB9Ci0jIGBgYAotIwotIyAnZml4ZWQnIG9wdGlvbnMgY2FuIGJl IHNldCBvbiBjcmVhdGUsIGJ1dCBub3QgY2hhbmdlZCBhZnRlcndhcmRzLgotIwotIyBUbyBhY3R1 YWxseSB1c2UgaXQsIHlvdSBoYXZlIHRvIGZpcnN0IHJlZ2lzdGVyIGFsbCB0aGUgcGx1Z2lucyBh bmQgdGhlbiBpbml0Ci0jIHRoZSAnYmFzZScgcGx1Z2luLCBsaWtlIHNvOgotIwotIyBgYGAKLSMg dXNlIFBWRTo6RHVtbXk6OlBsdWdpbjE7Ci0jIHVzZSBQVkU6OkR1bW15OjpQbHVnaW4yOwotIyB1 c2UgUFZFOjpEdW1teTo6QmFzZVBsdWdpbjsKLSMKLSMgUFZFOjpEdW1teTo6UGx1Z2luMS0+cmVn aXN0ZXIoKTsKLSMgUFZFOjpEdW1teTo6UGx1Z2luMi0+cmVnaXN0ZXIoKTsKLSMgUFZFOjpEdW1t eTo6QmFzZVBsdWdpbi0+aW5pdCgpOwotIyBgYGAKLSMKLSMgVGhlcmUgYXJlIHR3byBtb2RlcyBm b3IgaG93IHByb3BlcnRpZXMgYXJlIGV4cG9zZWQsIHRoZSBkZWZhdWx0ICd1bmlmaWVkJwotIyBt b2RlIGFuZCB0aGUgJ2lzb2xhdGVkJyBtb2RlLgotIyBJbiB0aGUgZGVmYXVsdCB1bmlmaWVkIG1v ZGUsIHRoZXJlIGlzIG9ubHkgYSBnbG9iYWwgbGlzdCBvZiBwcm9wZXJ0aWVzCi0jIHdoaWNoIHRo ZSBwbHVnaW5zIGNhbiB1c2UsIHNvIHlvdSBjYW5ub3QgZGVmaW5lIHRoZSBzYW1lIHByb3BlcnR5 IG5hbWUgdHdpY2UKLSMgaW4gZGlmZmVyZW50IHBsdWdpbnMuIFRoZSByZWFzb24gZm9yIHRoaXMg aXMgdG8gZm9yY2UgdGhlIHVzZSBvZiBpZGVudGljYWwKLSMgcHJvcGVydGllcyBmb3IgbXVsdGlw bGUgcGx1Z2lucy4KLSMKLSMgVGhlIHNlY29uZCB3YXkgaXMgdG8gdXNlIHRoZSAnaXNvbGF0ZWQn IG1vZGUsIHdoaWNoIGNhbiBiZSBhY2hpZXZlZCBieQotIyBjYWxsaW5nIGluaXQgd2l0aCBgMWAg YXMgaXRzIHBhcmFtZXRlciBsaWtlIHRoaXM6Ci0jCi0jIGBgYAotIyBQVkU6OkR1bW15OjpCYXNl UGx1Z2luLT5pbml0KHByb3BlcnR5X2lzb2xhdGlvbiA9PiAxKTsKLSMgYGBgCi0jCi0jIFdpdGgg dGhpcywgZWFjaCBwbHVnaW4gZ2V0J3MgdGhlaXIgb3duIGlzb2xhdGVkIGxpc3Qgb2YgcHJvcGVy dGllcyB3aGljaCBpdAotIyBjYW4gdXNlLiBOb3RlIHRoYXQgaW4gdGhpcyBtb2RlLCB5b3Ugb25s eSBoYXZlIHRvIHNwZWNpZnkgdGhlIHByb3BlcnR5IGluIHRoZQotIyBvcHRpb25zIG1ldGhvZCB3 aGVuIGl0IGlzIGVpdGhlciAnZml4ZWQnIG9yIGNvbWVzIGZyb20gdGhlIGdsb2JhbCBsaXN0IG9m Ci0jIHByb3BlcnRpZXMuIEFsbCBsb2NhbGx5IGRlZmluZWQgb25lcyBnZXQgYXV0b21hdGljYWxs eSBhZGRlZCB0byB0aGUgc2NoZW1hCi0jIGZvciB0aGF0IHBsdWdpbi4KKz1oZWFkMiBNRVRIT0RT CisKKz1jdXQKIAogbXkgJGRlZmF1bHREYXRhID0gewogICAgIG9wdGlvbnMgPT4ge30sCkBAIC03 NywxMSArMTE1LDEyNCBAQCBteSAkZGVmYXVsdERhdGEgPSB7CiAgICAgcHJvcGVydHlMaXN0ID0+ IHt9LAogfTsKIAorPWhlYWQzICRiYXNlLT5wcml2YXRlKCkKKworQjxSRVFVSVJFRDo+IE11c3Qg YmUgaW1wbGVtZW50ZWQgaW4gdGhlIEk8YmFzZSBwbHVnaW4+LgorCisgICAgJGRhdGEgPSBQVkU6 OkV4YW1wbGU6OlBsdWdpbi0+cHJpdmF0ZSgpCisgICAgJGRhdGEgPSAkY2xhc3MtPnByaXZhdGUo KQorCitSZXR1cm5zIHRoZSBlbnRpcmUgaW50ZXJuYWwgc3RhdGUgb2YgQzxMPFBWRTo6U2VjdGlv bkNvbmZpZz4+LCB3aGVyZSBhbGwgcGx1Z2lucworYXMgd2VsbCBhcyB0aGVpciBDPEw8PCBvcHRp b25zKCl8LyRwbHVnaW4tPm9wdGlvbnMoKSA+Pj4gYW5kIG1vcmUgYXJlIGJlaW5nIHRyYWNrZWQu CisKK01vcmUgcHJlY2lzZWx5LCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgaGFzaCB3aXRoIHRoZSBm b2xsb3dpbmcgc3RydWN0dXJlOgorCisgICAgeworCXByb3BlcnR5TGlzdCA9PiB7CisJICAgICdz b21lLW9wdGlvbmFsLXByb3BlcnR5JyA9PiB7CisJCXR5cGUgPT4gJ3N0cmluZycsCisJCW9wdGlv bmFsID0+IDEsCisJCWRlc2NyaXB0aW9uID0+ICdleGFtcGxlIHByb3BlcnR5JywKKwkgICAgfSwK KwkgICAgc29tZS1wcm9wZXJ0eSA9PiB7CisJCWRlc2NyaXB0aW9uID0+ICdhbm90aGVyIGV4YW1w bGUgcHJvcGVydHknLAorCQl0eXBlID0+ICdib29sZWFuJworCSAgICB9LAorCX0sCisJb3B0aW9u cyA9PiB7CisJICAgIGZvbyA9PiB7CisJCSdzb21lLW9wdGlvbmFsLXByb3BlcnR5JyA9PiB7IG9w dGlvbmFsID0+IDEgfSwKKwkJLi4uCisJICAgIH0sCisJICAgIC4uLgorCX0sCisJcGx1Z2lucyA9 PiB7CisJICAgIGZvbyA9PiAnUFZFOjpFeGFtcGxlOjpGb29QbHVnaW4nLCAgIyByZWZlcmVuY2Ug dG8gcGFja2FnZSBvZiBjaGlsZCBwbHVnaW4KKwkgICAgLi4uCisJfSwKKwlwbHVnaW5kYXRhID0+ IHsKKwkgICAgZm9vID0+IHsgLi4uIH0sICAjIGRlcGVuZHMgb24gdGhlIHNwZWNpZmljIHBsdWdp biBhcmNoaXRlY3R1cmUKKwl9LAorICAgIH0KKworV2hlcmUgQzxmb28+IGlzIHRoZSBDPEw8PCB0 eXBlKCl8LyRwbHVnaW4tPnR5cGUoKSA+Pj4gb2YgdGhlIHBsdWdpbi4gU2VlCitDPEw8PCBvcHRp b25zKCl8LyRwbHVnaW4tPm9wdGlvbnMoKSA+Pj4gYW5kIEM8TDw8IHBsdWdpbmRhdGEoKXwvJHBs dWdpbi0+cGx1Z2luZGF0YSgpID4+PgorZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlaXIgY29y cmVzcG9uZGluZyBrZXlzIGFib3ZlLgorCitNb3N0IGNvbW1vbmx5IHRoaXMgaXMgdXNlZCB0byBk ZWZpbmUgdGhlIGRlZmF1bHQgSTxwcm9wZXJ0eSBsaXN0PiBvZiBvbmUncworcGx1Z2luIGFyY2hp dGVjdHVyZSB1cGZyb250LCBmb3IgZXhhbXBsZToKKworICAgIHVzZSBQVkU6OkpTT05TY2hlbWEg cXcoZ2V0X3N0YW5kYXJkX29wdGlvbik7CisKKyAgICB1c2UgYmFzZSBxdyhQVkU6OlNlY3Rpb25D b25maWcpOworCisgICAgIyBbLi4uXQorCisgICAgbXkgJGRlZmF1bHREYXRhID0geworCXByb3Bl cnR5TGlzdCA9PiB7CisJICAgIHR5cGUgPT4geworCQlkZXNjcmlwdGlvbiA9PiAiVHlwZSBvZiBw bHVnaW4uIgorCSAgICB9LAorCSAgICBub2RlcyA9PiBnZXRfc3RhbmRhcmRfb3B0aW9uKCdwdmUt bm9kZS1saXN0JywgeworCQlkZXNjcmlwdGlvbiA9PiAiTGlzdCBvZiBub2RlcyBmb3Igd2hpY2gg dGhlIHBsdWdpbiBhcHBsaWVzLiIsCisJCW9wdGlvbmFsID0+IDEsCisJICAgIH0pLAorCSAgICBk aXNhYmxlID0+IHsKKwkJZGVzY3JpcHRpb24gPT4gIkZsYWcgdG8gZGlzYWJsZSB0aGUgcGx1Z2lu LiIsCisJCXR5cGUgPT4gJ2Jvb2xlYW4nLAorCQlvcHRpb25hbCA9PiAxLAorCSAgICB9LAorCSAg ICAnbWF4LWZvby1yYXRlJyA9PiB7CisJCWRlc2NyaXB0aW9uID0+ICJNYXhpbXVtICdmb28nIHJh dGUgb2YgdGhlIHBsdWdpbi4gVXNlICctMScgZm9yIHVubGltaXRlZC4iLAorCQl0eXBlID0+ICdp bnRlZ2VyJywKKwkJbWluaW11bSA9PiAtMSwKKwkJZGVmYXVsdCA9PiA0MiwKKwkJb3B0aW9uYWwg PT4gMSwKKwkgICAgfSwKKwkgICAgIyBbLi4uXQorCX0sCisgICAgfTsKKworICAgIHN1YiBwcml2 YXRlIHsKKwlyZXR1cm4gJGRlZmF1bHREYXRhOworICAgIH0KKworQWRkaXRpb25hbCBwcm9wZXJ0 aWVzIGRlZmluZWQgaW4gSTxjaGlsZCBwbHVnaW5zPiBhcmUgc3RvcmVkIGluIHRoZQorQzxwcm9w ZXJ0eUxpc3Q+IGtleS4gU2VlIEM8TDw8IHByb3BlcnRpZXMoKXwvJHBsdWdpbi0+cHJvcGVydGll cygpID4+Pi4KKworPWN1dAorCiBzdWIgcHJpdmF0ZSB7CiAgICAgZGllICJvdmVyd3JpdGUgbWUi OwogICAgIHJldHVybiAkZGVmYXVsdERhdGE7CiB9CiAKKz1oZWFkMyAkcGx1Z2luLT5yZWdpc3Rl cigpCisKKyAgICBQVkU6OkV4YW1wbGU6OlBsdWdpbi0+cmVnaXN0ZXIoKQorCitVc2VkIHRvIHJl Z2lzdGVyIEk8Y2hpbGQgcGx1Z2lucz4uCisKK01vcmUgc3BlY2lmaWNhbGx5LCBJPHJlZ2lzdGVy aW5nPiBhIGNoaWxkIHBsdWdpbiBtZWFucyB0aGF0IGl0IGlzIGFkZGVkIHRvIHRoZQorbGlzdCBv ZiBrbm93biBjaGlsZCBwbHVnaW5zIHRoYXQgaXMga2VwdCBpbiB0aGUgaGFzaCByZXR1cm5lZCBi eQorQzxMPDwgcHJpdmF0ZSgpfC8kYmFzZS0+cHJpdmF0ZSgpID4+Pi4gRnVydGhlcm1vcmUsIHRo ZSBkYXRhIHJldHVybmVkIGJ5CitDPEw8PCBwbHVnaW5kYXRhKCl8LyRwbHVnaW4tPnBsdWdpbmRh dGEoKSA+Pj4gaXMgYWxzbyBzdG9yZWQgdXBvbiByZWdpc3RyYXRpb24uCisKK1RoaXMgbWV0aG9k IG11c3QgYmUgY2FsbGVkIG9uIGVhY2ggY2hpbGQgcGx1Z2luIGJlZm9yZSBMPDwgaW5pdGlhbGl6 aW5nfC8kYmFzZS0+aW5pdCgpID4+Cit0aGUgYmFzZSBwbHVnaW4uCisKK0ZvciBleGFtcGxlOgor CisgICAgdXNlIFBWRTo6RXhhbXBsZTo6QmFzZVBsdWdpbjsKKyAgICB1c2UgUFZFOjpFeGFtcGxl OjpQbHVnaW5BOworICAgIHVzZSBQVkU6OkV4YW1wbGU6OlBsdWdpbkI7CisKKyAgICBQVkU6OkV4 YW1wbGU6OlBsdWdpbkEtPnJlZ2lzdGVyKCk7CisgICAgUFZFOjpFeGFtcGxlOjpQbHVnaW5CLT5y ZWdpc3RlcigpOworICAgIFBWRTo6RXhhbXBsZTo6QmFzZVBsdWdpbi0+aW5pdCgpOworCis9Y3V0 CisKIHN1YiByZWdpc3RlciB7CiAgICAgbXkgKCRjbGFzcykgPSBAXzsKIApAQCAtOTYsMjIgKzI0 NywxNDQgQEAgc3ViIHJlZ2lzdGVyIHsKICAgICAkcGRhdGEtPntwbHVnaW5zfS0+eyR0eXBlfSA9 ICRjbGFzczsKIH0KIAorPWhlYWQzICRwbHVnaW4tPnR5cGUoKQorCitCPFJFUVVJUkVEOj4gTXVz dCBiZSBpbXBsZW1lbnRlZCBpbiBJPEI8ZWFjaD4+IEk8Y2hpbGQgcGx1Z2luPi4KKworICAgICR0 eXBlID0gUFZFOjpFeGFtcGxlOjpQbHVnaW4tPnR5cGUoKQorICAgICR0eXBlID0gJGNsYXNzLT50 eXBlKCkKKworUmV0dXJucyB0aGUgSTx0eXBlPiBvZiBhIGNoaWxkIHBsdWdpbiwgd2hpY2ggaXMg YSBJPHVuaXF1ZT4gc3RyaW5nIHVzZWQgdG8KK2lkZW50aWZ5IHRoZSBjaGlsZCBwbHVnaW4uCisK K011c3QgYmUgb3ZlcnJpZGRlbiBvbiBJPEI8ZWFjaD4+IEk8Y2hpbGQgcGx1Z2luPiwgZm9yIGV4 YW1wbGU6CisKKyAgICBzdWIgdHlwZSB7CisJcmV0dXJuICJmb28iOworICAgIH0KKworPWN1dAor CiBzdWIgdHlwZSB7CiAgICAgZGllICJvdmVyd3JpdGUgbWUiOwogfQogCis9aGVhZDMgJHBsdWdp bi0+cHJvcGVydGllcygpCisKK0I8T1BUSU9OQUw6PiBDYW4gYmUgb3ZlcnJpZGRlbiBpbiBJPGNo aWxkIHBsdWdpbnM+LgorCisgICAgJHByb3BzID0gUFZFOjpFeGFtcGxlOjpQbHVnaW4tPnByb3Bl cnRpZXMoKQorICAgICRwcm9wcyA9ICRjbGFzcy0+cHJvcGVydGllcygpCisKK1VzZWQgdG8gcmVn aXN0ZXIgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIHRvIGEgSTxjaGlsZCBwbHVn aW4+LgorU2VlIGJlbG93IGZvciBkZXRhaWxzIG9uIEw8dGhlIGRpZmZlcmVudCBtb2Rlc3wvTU9E RVM+LgorCitUaGlzIG1ldGhvZCBkb2Vzbid0IG5lZWQgdG8gYmUgb3ZlcnJpZGRlbiBpZiBubyBu ZXcgcHJvcGVydGllcyBhcmUgbmVjZXNzYXJ5LgorCisgICAgc3ViIHByb3BlcnRpZXMoKSB7CisJ cmV0dXJuIHsKKwkgICAgcGF0aCA9PiB7CisJCWRlc2NyaXB0aW9uID0+ICJQYXRoIHVzZWQgdG8g cmV0cmlldmUgYSAnZm9vJy4iLAorCQl0eXBlID0+ICdzdHJpbmcnLAorCQlmb3JtYXQgPT4gJ3Nv bWUtY3VzdG9tLWZvcm1hdC1oYW5kbGVyLWZvci1wYXRocycsCisJICAgIH0sCisJICAgIGlzX2Jh ciA9IHsKKwkJZGVzY3JpcHRpb24gPT4gIldoZXRoZXIgdGhlICdmb28nIGlzICdiYXInIG9yIG5v dC4iLAorCQl0eXBlID0+ICdib29sZWFuJywKKwkgICAgfSwKKwkgICAgYndsaW1pdCA9PiBnZXRf c3RhbmRhcmRfb3B0aW9uKCdid2xpbWl0JyksCisJfTsKKyAgICB9CisKK0luIHRoZSBkZWZhdWx0 IEk8TDx1bmlmaWVkIG1vZGV8L01PREVTPj4sIHRoZXNlIHByb3BlcnRpZXMgYXJlIGFkZGVkIHRv IHRoZQorZ2xvYmFsIGxpc3Qgb2YgcHJvcGVydGllcy4gVGhpcyBtZWFucyB0aGV5IG1heSBhbHNv IGJlIHVzZWQgYnkgb3RoZXIgcGx1Z2lucywKK3JhdGhlciB0aGFuIGp1c3QgYnkgaXRzZWxmLiBU aGUgc2FtZSBwcm9wZXJ0eSBtdXN0IG5vdCBiZSBkZWZpbmVkIGJ5IG90aGVyCitwbHVnaW5zLgor CitJbiBJPEw8aXNvbGF0ZWQgbW9kZXwvTU9ERVM+PiwgdGhlc2UgcHJvcGVydGllcyBhcmUgc3Bl Y2lmaWMgdG8gdGhlIHBsdWdpbgoraXRzZWxmIGFuZCBjYW5ub3QgYmUgdXNlZCBieSBvdGhlcnMu IFRoZXkgYXJlIGhvd2V2ZXIgYXV0b21hdGljYWxseSBhZGRlZCB0bwordGhlIHBsdWdpbidzIHNj aGVtYSBhbmQgbWFkZSBDPG9wdGlvbmFsPiBieSBkZWZhdWx0LgorCitTZWUgdGhlIEM8TDw8IG9w dGlvbnMoKXwvJHBsdWdpbi0+b3B0aW9ucygpID4+PiBtZXRob2QgZm9yIG1vcmUgaW5mb3JtYXRp b24uCisKKz1jdXQKKwogc3ViIHByb3BlcnRpZXMgewogICAgIHJldHVybiB7fTsKIH0KIAorPWhl YWQzICRwbHVnaW4tPm9wdGlvbnMoKQorCitCPE9QVElPTkFMOj4gQ2FuIGJlIG92ZXJyaWRkZW4g aW4gSTxjaGlsZCBwbHVnaW5zPi4KKworICAgICRvcHRzID0gUFZFOjpFeGFtcGxlOjpQbHVnaW4t Pm9wdGlvbnMoKQorICAgICRvcHRzID0gJGNsYXNzLT5vcHRpb25zKCkKKworVGhpcyBtZXRob2Qg aXMgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIHByb3BlcnRpZXMgYXJlIGFjdHVhbGx5IGFsbG93ZWQg Zm9yCithIGdpdmVuIEk8Y2hpbGQgcGx1Z2luPi4gU2VlIGJlbG93IGZvciBkZXRhaWxzIG9uIEw8 dGhlIGRpZmZlcmVudCBtb2Rlc3wvTU9ERVM+LgorCitBZGRpdGlvbmFsbHksIHRoaXMgbWV0aG9k IGFsc28gYWxsb3dzIHRvIGRlY2xhcmUgd2hldGhlciBhIHByb3BlcnR5IGlzCitDPG9wdGlvbmFs PiBvciBDPGZpeGVkPi4KKworICAgIHN1YiBvcHRpb25zIHsKKwlyZXR1cm4geworCSAgICAnc29t ZS1vcHRpb25hbC1wcm9wZXJ0eScgPT4geyBvcHRpb25hbCA9PiAxIH0sCisJICAgICdhLWZpeGVk LXByb3BlcnR5JyA9PiB7IGZpeGVkID0+IDEgfSwKKwkgICAgJ2EtcmVxdWlyZWQtYnV0LW5vdC1m aXhlZC1wcm9wZXJ0eScgPT4ge30sCisJfTsKKyAgICB9CisKK0M8b3B0aW9uYWw+IHByb3BlcnRp ZXMgYXJlIG5vdCByZXF1aXJlZCB0byBiZSBzZXQuCisKK0M8Zml4ZWQ+IHByb3BlcnRpZXMgbWF5 IG9ubHkgYmUgc2V0IG9uIGNyZWF0aW9uIG9mIHRoZSBjb25maWcgZW50aXR5LgorCitJbiBJPEw8 dW5pZmllZCBtb2RlfC9NT0RFUz4+IChkZWZhdWx0KSwgaXQgaXMgbmVjZXNzYXJ5IHRvIGV4cGxp Y2l0bHkgc3BlY2lmeQord2hpY2ggSTxwcm9wZXJ0aWVzPiBhcmUgdXNlZCBpbiB0aGUgbWV0aG9k J3MgcmV0dXJuIHZhbHVlLiBCZWNhdXNlIHByb3BlcnRpZXMKK2FyZSByZWdpc3RlcmVkIGdsb2Jh bGx5IGluIHRoaXMgbW9kZSwgYW55IHByb3BlcnRpZXMgbWF5IGJlIHNwZWNpZmllZCwKK3JlZ2Fy ZGxlc3Mgb2Ygd2hpY2ggcGx1Z2luIGludHJvZHVjZWQgdGhlbS4KKworSW4gSTxMPGlzb2xhdGVk IG1vZGV8L01PREVTPj4sIHRoZSBsb2NhbGx5IGRlZmluZWQgcHJvcGVydGllcyAodGhvc2UgcmVn aXN0ZXJlZAorYnkgb3ZlcnJpZGluZyBDPEw8PCBwcm9wZXJ0aWVzKCl8LyRwbHVnaW4tPnByb3Bl cnRpZXMoKSA+Pj4pIGFyZSBhdXRvbWF0aWNhbGx5CithZGRlZCB0byB0aGUgcGx1Z2luJ3Mgc2No ZW1hIGFuZCBtYWRlIEM8b3B0aW9uYWw+IGJ5IGRlZmF1bHQuIFNob3VsZCB0aGlzIG5vdCBiZQor ZGVzaXJlZCwgYSBwcm9wZXJ0eSBtYXkgc3RpbGwgYmUgZXhwbGljaXRseSBkZWZpbmVkLCBpbiBv cmRlciB0byBtYWtlIGl0IHJlcXVpcmVkCitvciBDPGZpeGVkPiBpbnN0ZWFkLgorCitQcm9wZXJ0 aWVzIGluIHRoZSBnbG9iYWwgbGlzdCBvZiBwcm9wZXJ0aWVzIChzZWUgQzxMPDwgcHJpdmF0ZSgp fC8kYmFzZS0+cHJpdmF0ZSgpID4+PikKK2FyZSBub3QgYXV0b21hdGljYWxseSBhZGRlZCBhbmQg bXVzdCBiZSBleHBsaWNpdGx5IGRlZmluZWQgaW5zdGVhZC4KKworPWN1dAorCiBzdWIgb3B0aW9u cyB7CiAgICAgcmV0dXJuIHt9OwogfQogCis9aGVhZDMgJHBsdWdpbi0+cGx1Z2luZGF0YSgpCisK K0I8T1BUSU9OQUw6PiBDYW4gYmUgaW1wbGVtZW50ZWQgaW4gSTxjaGlsZCBwbHVnaW5zPi4KKwor ICAgICRwbHVnaW5kYXRhID0gUFZFOjpFeGFtcGxlOjpQbHVnaW4tPnBsdWdpbmRhdGEoKQorICAg ICRwbHVnaW5kYXRhID0gJGNsYXNzLT5wbHVnaW5kYXRhKCkKKworVGhpcyBtZXRob2QgaXMgdXNl ZCBieSBwbHVnaW4gYXV0aG9ycyB0byBwcm92aWRlIGFueSBraW5kIG9mIGRhdGEgc3BlY2lmaWMg dG8KK3RoZWlyIHBsdWdpbiBpbXBsZW1lbnRhdGlvbiBhbmQgaXMgb3RoZXJ3aXNlIG5vdCB0b3Vj aGVkIGJ5IEM8TDxQVkU6OlNlY3Rpb25Db25maWc+Pi4KKworVGhpcyBtb3N0bHkgZXhpc3RzIGZv ciBjb252ZW5pZW5jZSBhbmQgZG9lc24ndCBuZWVkIHRvIGJlIGltcGxlbWVudGVkLgorCis9Y3V0 CisKIHN1YiBwbHVnaW5kYXRhIHsKICAgICByZXR1cm4ge307CiB9CiAKKz1oZWFkMyAkcGx1Z2lu LT5oYXNfaXNvbGF0ZWRfcHJvcGVydGllcygpCisKKyAgICAkaXNfaXNvbGF0ZWQgPSBQVkU6OkV4 YW1wbGU6OlBsdWdpbi0+aGFzX2lzb2xhdGVkX3Byb3BlcnRpZXMoKQorICAgICRpc19pc29sYXRl ZCA9ICRjbGFzcy0+aGFzX2lzb2xhdGVkX3Byb3BlcnRpZXMoKQorCitDaGVja3Mgd2hldGhlciB0 aGUgcGx1Z2luIGhhcyBJPGlzb2xhdGVkIHByb3BlcnRpZXM+IChydW5zIGluIGlzb2xhdGVkIG1v ZGUpLgorCis9Y3V0CisKIHN1YiBoYXNfaXNvbGF0ZWRfcHJvcGVydGllcyB7CiAgICAgbXkgKCRj bGFzcykgPSBAXzsKIApAQCAtMTY4LDYgKzQ0MSwzMyBAQCBteSBzdWIgYWRkX3Byb3BlcnR5IHsK ICAgICB9CiB9OwogCis9aGVhZDMgJHBsdWdpbi0+Y3JlYXRlU2NoZW1hKCkKKworPWhlYWQzICRw bHVnaW4tPmNyZWF0ZVNjaGVtYShbICRza2lwX3R5cGUsICRiYXNlIF0pCisKKyAgICAkc2NoZW1h ID0gUFZFOjpFeGFtcGxlOjpQbHVnaW4tPigkc2tpcF90eXBlLCAkYmFzZSkKKyAgICAkc2NoZW1h ID0gJGNsYXNzLT4oJHNraXBfdHlwZSwgJGJhc2UpCisKK1JldHVybnMgdGhlIEM8UFZFOjpKU09O U2NoZW1hPiB1c2VkIGZvciBJPGNyZWF0aW5nPiBjb25maWcgZW50cmllcyBvZiBhCitJPGNoaWxk IHBsdWdpbj4uCisKK1RoaXMgc2NoZW1hIG1heSB0aGVuIGJlIHVzZWQgYXMgZGVzaXJlZCwgZm9y IGV4YW1wbGUgYXMgdGhlIGRlZmluaXRpb24gb2YKK3BhcmFtZXRlcnMgb2YgYW4gQVBJIGhhbmRs ZXIgKEM8UE9TVD4pLgorCis9b3ZlcgorCis9aXRlbSBDPCRza2lwX3R5cGU+IChvcHRpb25hbCkK KworQ2FuIGJlIHNldCB0byBDPDE+IHRvIG5vdCBhZGQgdGhlIEM8dHlwZT4gcHJvcGVydHkgdG8g dGhlIHNjaGVtYS4KKworPWl0ZW0gQzwkYmFzZT4gKG9wdGlvbmFsKQorCitUaGUgc2NoZW1hIG9m IGFkZGl0aW9uYWwgcHJvcGVydGllcyBub3QgZGVyaXZlZCBmcm9tIHRoZSBwbHVnaW4gZGVmaW5p dGlvbi4KKworPWJhY2sKKworPWN1dAorCiBzdWIgY3JlYXRlU2NoZW1hIHsKICAgICBteSAoJGNs YXNzLCAkc2tpcF90eXBlLCAkYmFzZSkgPSBAXzsKIApAQCAtMjQyLDYgKzU0MiwzNiBAQCBzdWIg Y3JlYXRlU2NoZW1hIHsKICAgICB9OwogfQogCis9aGVhZDMgJHBsdWdpbi0+dXBkYXRlU2NoZW1h KCkKKworPWhlYWQzICRwbHVnaW4tPnVwZGF0ZVNjaGVtYShbICRzaW5nbGVfY2xhc3MsICRiYXNl IF0pCisKKyAgICAkdXBkYXRlZF9zY2hlbWEgPSBQVkU6OkV4YW1wbGU6OlBsdWdpbi0+KCRzaW5n bGVfY2xhc3MsICRiYXNlKQorICAgICR1cGRhdGVkX3NjaGVtYSA9ICRjbGFzcy0+dXBkYXRlU2No ZW1hKCRzaW5nbGVfY2xhc3MsICRiYXNlKQorCitSZXR1cm5zIHRoZSBDPEw8UFZFOjpKU09OU2No ZW1hPj4gdXNlZCBmb3IgSTx1cGRhdGluZz4gY29uZmlnIGVudHJpZXMgb2YgYQorSTxjaGlsZCBw bHVnaW4+LgorCitUaGlzIHNjaGVtYSBtYXkgdGhlbiBiZSB1c2VkIGFzIGRlc2lyZWQsIGZvciBl eGFtcGxlIGFzIHRoZSBkZWZpbml0aW9uIG9mCitwYXJhbWV0ZXJzIG9mIGFuIEFQSSBoYW5kbGVy IChDPFBVVD4pLgorCis9b3ZlcgorCis9aXRlbSBDPCRzaW5nbGVfY2xhc3M+IChvcHRpb25hbCkK KworQ2FuIGJlIHNldCB0byBDPDE+IHRvIG9ubHkgaW5jbHVkZSBwcm9wZXJ0aWVzIHdoaWNoIGFy ZSBkZWZpbmVkIGluIHRoZSByZXR1cm5lZAoraGFzaCBvZiBDPEw8PCBvcHRpb25zKCl8L29wdGlv bnMoKSA+Pj4gb2YgdGhlIHBsdWdpbiBDPCRjbGFzcz4uCisKK1RoaXMgcGFyYW1ldGVyIGlzIG9u bHkgdmFsaWQgZm9yIGNoaWxkIHBsdWdpbnMsIG5vdCB0aGUgYmFzZSBwbHVnaW4uCisKKz1pdGVt IEM8JGJhc2U+IChvcHRpb25hbCkKKworVGhlIHNjaGVtYSBvZiBhZGRpdGlvbmFsIHByb3BlcnRp ZXMgbm90IGRlcml2ZWQgZnJvbSB0aGUgcGx1Z2luIGRlZmluaXRpb24uCisKKz1iYWNrCisKKz1j dXQKKwogc3ViIHVwZGF0ZVNjaGVtYSB7CiAgICAgbXkgKCRjbGFzcywgJHNpbmdsZV9jbGFzcywg JGJhc2UpID0gQF87CiAKQEAgLTMyNiwxMiArNjU2LDIyIEBAIHN1YiB1cGRhdGVTY2hlbWEgewog ICAgIH07CiB9CiAKLSMgdGhlICVwYXJhbSBoYXNoIGNvbnRyb2xzIHNvbWUgYmVoYXZpb3Igb2Yg dGhlIHNlY3Rpb24gY29uZmlnLCBjdXJyZW50bHkgdGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZQot IyB1bmRlcnN0b29kOgotIwotIyAtIHByb3BlcnR5X2lzb2xhdGlvbjogaWYgc2V0LCBlYWNoIGNo aWxkLXBsdWdpbiBoYXMgYSBmdWxseSBpc29sYXRlZCBwcm9wZXJ0eSAoc2NoZW1hKSBuYW1lc3Bh Y2UuCi0jICAgQnkgZGVmYXVsdCB0aGlzIGlzIG9mZiwgbWVhbmluZyBhbGwgY2hpbGQtcGx1Z2lu cyBzaGFyZSB0aGUgc2NoZW1hIG9mIHByb3BlcnRpZXMgd2l0aCB0aGUgc2FtZQotIyAgIG5hbWUu IE5vcm1hbGx5IG9uZSB3YW50cyB0byB1c2Ugb25lT2Ygc2NoZW1hJ3Mgd2hlbiBlbmFibGluZyBp c29sYXRpb24uCis9aGVhZDMgJGJhc2UtPmluaXQoKQorCis9aGVhZDMgJGJhc2UtPmluaXQocHJv cGVydHlfaXNvbGF0aW9uID0+IDEpCisKKyAgICAkYmFzZV9wbHVnaW4tPmluaXQoKTsKKyAgICAk YmFzZV9wbHVnaW4tPmluaXQocHJvcGVydHlfaXNvbGF0aW9uID0+IDEpOworCitUaGlzIG1ldGhv ZCBpcyB1c2VkIHRvIGluaXRpYWxpemUgQzxTZWN0aW9uQ29uZmlnPiB1c2luZyBhbGwgb2YgdGhl CitJPGNoaWxkIHBsdWdpbnM+IHRoYXQgd2VyZSBJPEw8PCByZWdpc3RlcmVkfC8kcGx1Z2luLT5y ZWdpc3RlcigpID4+PiBiZWZvcmVoYW5kLgorCitPcHRpb25hbGx5LCBpdCBpcyBhbHNvIHBvc3Np YmxlIHRvIHBhc3MgQzw8IHByb3BlcnR5X2lzb2xhdGlvbiA9PiAxPj4gdG8gQzwlcGFyYW0+Citp biBvcmRlciB0byBhY3RpdmF0ZSBJPGlzb2xhdGVkIG1vZGU+LiBTZWUgTDwvTU9ERVM+IGluIHRo ZSBwYWNrYWdlLWxldmVsCitkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCis9 Y3V0CisKIHN1YiBpbml0IHsKICAgICBteSAoJGNsYXNzLCAlcGFyYW0pID0gQF87CiAKQEAgLTM5 Miw2ICs3MzIsMTYgQEAgc3ViIGluaXQgewogICAgICRwcm9wZXJ0eUxpc3QtPnt0eXBlfS0+e2Vu dW19ID0gW3NvcnQga2V5cyAlJHBsdWdpbnNdOwogfQogCis9aGVhZDMgJGJhc2UtPmxvb2t1cCgk dHlwZSkKKworICAgICRwbHVnaW4gPSBQVkU6OkV4YW1wbGU6OkJhc2VQbHVnaW4tPmxvb2t1cCgk dHlwZSkKKyAgICAkcGx1Z2luID0gJGNsYXNzLT5sb29rdXAoJHR5cGUpCisKK1JldHVybnMgdGhl IEk8Y2hpbGQgcGx1Z2luPiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBDPEw8PCB0eXBlKCl8 LyRwbHVnaW4tPnR5cGUoKSA+Pj4KK29yIGRpZXMgaWYgaXQgY2Fubm90IGJlIGZvdW5kLgorCis9 Y3V0CisKIHN1YiBsb29rdXAgewogICAgIG15ICgkY2xhc3MsICR0eXBlKSA9IEBfOwogCkBAIC00 MDUsNiArNzU1LDE1IEBAIHN1YiBsb29rdXAgewogICAgIHJldHVybiAkcGx1Z2luOwogfQogCis9 aGVhZDMgJGJhc2UtPmxvb2t1cF90eXBlcygpCisKKyAgICAkdHlwZXMgPSBQVkU6OkV4YW1wbGU6 OkJhc2VQbHVnaW4tPmxvb2t1cF90eXBlcygpCisgICAgJHR5cGVzID0gJGNsYXNzLT5sb29rdXBf dHlwZXMoKQorCitSZXR1cm5zIGEgbGlzdCBvZiBhbGwgSTxjaGlsZCBwbHVnaW4+IEM8TDw8IHR5 cGV8LyRwbHVnaW4tPnR5cGUoKSA+Pj5zLgorCis9Y3V0CisKIHN1YiBsb29rdXBfdHlwZXMgewog ICAgIG15ICgkY2xhc3MpID0gQF87CiAKQEAgLTQxMywxOCArNzcyLDE1OSBAQCBzdWIgbG9va3Vw X3R5cGVzIHsKICAgICByZXR1cm4gWyBzb3J0IGtleXMgJXskcGRhdGEtPntwbHVnaW5zfX0gXTsK IH0KIAorPWhlYWQzICRiYXNlLT5kZWNvZGVfdmFsdWUoLi4uKQorCis9aGVhZDMgJGJhc2UtPmRl Y29kZV92YWx1ZSgkdHlwZSwgJGtleSwgJHZhbHVlKQorCitCPE9QVElPTkFMOj4gQ2FuIGJlIGlt cGxlbWVudGVkIGluIHRoZSBJPGJhc2UgcGx1Z2luPi4KKworICAgICRkZWNvZGVkX3ZhbHVlID0g UFZFOjpFeGFtcGxlOjpCYXNlUGx1Z2luLT5kZWNvZGVfdmFsdWUoJHR5cGUsICRrZXksICR2YWx1 ZSkKKyAgICAkZGVjb2RlZF92YWx1ZSA9ICRjbGFzcy0+KCR0eXBlLCAka2V5LCAkdmFsdWUpCisK K0NhbGxlZCBkdXJpbmcgQzxMPDwgY2hlY2tfY29uZmlnKCl8LyRiYXNlLT5jaGVja19jb25maWco Li4uKSA+Pj4gaW4gb3JkZXIgdG8gY29udmVydCB2YWx1ZXMKK3RoYXQgaGF2ZSBiZWVuIHJlYWQg ZnJvbSBhIEM8TDxQVkU6OlNlY3Rpb25Db25maWc+PiBmaWxlIHdoaWNoIGhhdmUgYmVlbgorSTxl bmNvZGVkPiBiZWZvcmVoYW5kIGJ5IEM8TDw8IGVuY29kZV92YWx1ZSgpfC8kYmFzZS0+ZW5jb2Rl X3ZhbHVlKC4uLikgPj4+LgorCitEb2VzIG5vdGhpbmcgdG8gQzwkdmFsdWU+IGJ5IGRlZmF1bHQs IGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgSTxiYXNlIHBsdWdpbj4KK2luIG9yZGVyIHRv IGltcGxlbWVudCBjdXN0b20gY29udmVyc2lvbiBiZWhhdmlvci4KKworICAgIHN1YiBkZWNvZGVf dmFsdWUgeworCW15ICgkY2xhc3MsICR0eXBlLCAka2V5LCAkdmFsdWUpID0gQF87CisKKwlpZiAo JGtleSBlcSAnbm9kZXMnKSB7CisJICAgIG15ICRyZXMgPSB7fTsKKworCSAgICBmb3IgbXkgJG5v ZGUgKFBWRTo6VG9vbHM6OnNwbGl0X2xpc3QoJHZhbHVlKSkgeworCQlpZiAoUFZFOjpKU09OU2No ZW1hOjpwdmVfdmVyaWZ5X25vZGVfbmFtZSgkbm9kZSkpIHsKKwkJICAgICRyZXMtPnskbm9kZX0g PSAxOworCQl9CisJICAgIH0KKworCSAgICByZXR1cm4gJHJlczsKKwl9CisKKwlyZXR1cm4gJHZh bHVlOworICAgIH0KKworPW92ZXIKKworPWl0ZW0gQzwkdHlwZT4KKworVGhlIEM8TDw8IHR5cGUo KXwvJHBsdWdpbi0+dHlwZSgpID4+PiBvZiBwbHVnaW4gdGhlIEM8JGtleT4gYW5kIEM8JHZhbHVl PiBiZWxvbmcgdG8uCisKKz1pdGVtIEM8JGtleT4KKworVGhlIG5hbWUgb2YgYSBJPEw8PCBwcm9w ZXJ0eXwvJHBsdWdpbi0+cHJvcGVydGllcygpID4+IHRoYXQgaGFzIGJlZW4gc2V0IG9uIGEgQzwk dHlwZT4gb2YKK2NvbmZpZyBzZWN0aW9uLgorCis9aXRlbSBDPCR2YWx1ZT4KKworVGhlIHJhdyB2 YWx1ZSBvZiB0aGUgSTxMPDwgcHJvcGVydHl8LyRwbHVnaW4tPnByb3BlcnRpZXMgPj4+IGRlbm90 ZWQgYnkgQzwka2V5PiB0aGF0IHdhcyByZWFkCitmcm9tIGEgc2VjdGlvbiBjb25maWcgZmlsZS4K KworPWJhY2sKKworPWN1dAorCiBzdWIgZGVjb2RlX3ZhbHVlIHsKICAgICBteSAoJGNsYXNzLCAk dHlwZSwgJGtleSwgJHZhbHVlKSA9IEBfOwogCiAgICAgcmV0dXJuICR2YWx1ZTsKIH0KIAorPWhl YWQzICRiYXNlLT5lbmNvZGVfdmFsdWUoLi4uKQorCis9aGVhZDMgJGJhc2UtPmVuY29kZV92YWx1 ZSgkdHlwZSwgJGtleSwgJHZhbHVlKQorCitCPE9QVElPTkFMOj4gQ2FuIGJlIGltcGxlbWVudGVk IGluIHRoZSBJPGJhc2UgcGx1Z2luPi4KKworICAgICRlbmNvZGVkX3ZhbHVlID0gUFZFOjpFeGFt cGxlOjpCYXNlUGx1Z2luLT5lbmNvZGVfdmFsdWUoJHR5cGUsICRrZXksICR2YWx1ZSkKKyAgICAk ZW5jb2RlZF92YWx1ZSA9ICRjbGFzcy0+KCR0eXBlLCAka2V5LCAkdmFsdWUpCisKK0NhbGxlZCBk dXJpbmcgQzxMPDwgd3JpdGVfY29uZmlnKCl8LyRiYXNlLT53cml0ZV9jb25maWcoLi4uKSA+Pj4g aW4gb3JkZXIgdG8KK2NvbnZlcnQgdmFsdWVzIGludG8gYSBzZXJpYWxpemFibGUgZm9ybWF0Lgor CitEb2VzIG5vdGhpbmcgdG8gQzwkdmFsdWU+IGJ5IGRlZmF1bHQsIGJ1dCBjYW4gYmUgb3ZlcnJp ZGRlbiBpbiB0aGUgSTxiYXNlIHBsdWdpbj4KK2luIG9yZGVyIHRvIGltcGxlbWVudCBjdXN0b20g Y29udmVyc2lvbiBiZWhhdmlvci4gVXN1YWxseSBvbmUgc2hvdWxkIGFsc28KK292ZXJyaWRlIEM8 TDw8IGRlY29kZV92YWx1ZSgpfC8kYmFzZS0+ZGVjb2RlX3ZhbHVlKC4uLikgPj4+IGluIGEgbWF0 Y2hpbmcgbWFubmVyLgorCisgICAgc3ViIGVuY29kZV92YWx1ZSB7CisJbXkgKCRjbGFzcywgJHR5 cGUsICRrZXksICR2YWx1ZSkgPSBAXzsKKworCWlmICgka2V5IGVxICdub2RlcycpIHsKKwkgICAg cmV0dXJuIGpvaW4oJywnLCBrZXlzKCUkdmFsdWUpKTsKKwl9CisKKwlyZXR1cm4gJHZhbHVlOwor ICAgIH0KKworPW92ZXIKKworPWl0ZW0gQzwkdHlwZT4KKworVGhlIEM8TDw8IHR5cGUoKXwvJHBs dWdpbi0+dHlwZSgpID4+PiBvZiBwbHVnaW4gdGhlIEM8JGtleT4gYW5kIEM8JHZhbHVlPiBiZWxv bmcgdG8uCisKKz1pdGVtIEM8JGtleT4KKworVGhlIG5hbWUgb2YgYSBJPEw8PCBwcm9wZXJ0eXwv JHBsdWdpbi0+cHJvcGVydGllcygpID4+PiB0aGF0IGhhcyBiZWVuIHNldCBvbiBhCitDPCR0eXBl PiBvZiBjb25maWcgc2VjdGlvbi4KKworPWl0ZW0gQzwkdmFsdWU+CisKK1RoZSB2YWx1ZSBvZiB0 aGUgSTxMPDwgcHJvcGVydHl8LyRwbHVnaW4tPnByb3BlcnRpZXMgPj4+IGRlbm90ZWQgYnkgQzwk a2V5PiB0byBiZQorZW5jb2RlZCBzbyB0aGF0IGl0IGNhbiBiZSB3cml0dGVuIHRvIGEgc2VjdGlv biBjb25maWcgZmlsZS4KKworPWJhY2sKKworPWN1dAorCiBzdWIgZW5jb2RlX3ZhbHVlIHsKICAg ICBteSAoJGNsYXNzLCAkdHlwZSwgJGtleSwgJHZhbHVlKSA9IEBfOwogCiAgICAgcmV0dXJuICR2 YWx1ZTsKIH0KIAorPWhlYWQzICRiYXNlLT5jaGVja192YWx1ZSguLi4pCisKKz1oZWFkMyAkYmFz ZS0+Y2hlY2tfdmFsdWUoJHR5cGUsICRrZXksICR2YWx1ZSwgJHN0b3JlaWQgWywgJHNraXBTY2hl bWFDaGVjayBdKQorCisgICAgJGNoZWNrZWRfdmFsdWUgPSBQVkU6OkV4YW1wbGU6OkJhc2VQbHVn aW4tPmNoZWNrX3ZhbHVlKCR0eXBlLCAka2V5LCAkdmFsdWUsICRzdG9yZWlkLCAkc2tpcFNjaGVt YUNoZWNrKQorICAgICRjaGVja2VkX3ZhbHVlID0gJGNsYXNzLT5jaGVja192YWx1ZSgkdHlwZSwg JGtleSwgJHZhbHVlLCAkc3RvcmVpZCwgJHNraXBTY2hlbWFDaGVjaykKKworVXNlZCBpbnRlcm5h bGx5IHRvIGNoZWNrIGlmIHZhcmlvdXMgaW52YXJpYW50cyBhcmUgdXBoZWxkIHdoZW4gcGFyc2lu ZyBhIHNlY3Rpb24KK2NvbmZpZyBmaWxlLiBBbHNvIHBlcmZvcm1zIGEgQzxQVkU6OkpTT05TY2hl bWE+IGNoZWNrIG9uIHRoZSBDPCR2YWx1ZT4gb2YgdGhlCitJPHByb3BlcnR5PiBnaXZlbiBieSBD PCRrZXk+IG9mIHRoZSBwbHVnaW4gQzwkdHlwZT4sIHVubGVzcyBDPCRza2lwU2NoZW1hQ2hlY2s+ CitpcyB0cnV0aHkuCisKKz1vdmVyCisKKz1pdGVtIEM8JHR5cGU+CisKK1RoZSBDPEw8PCB0eXBl KCl8LyRwbHVnaW4tPnR5cGUoKSA+Pj4gb2YgcGx1Z2luIHRoZSBDPCRrZXk+IGFuZCBDPCR2YWx1 ZT4gYmVsb25nIHRvLgorCis9aXRlbSBDPCRrZXk+CisKK1RoZSBuYW1lIG9mIGEgSTxMPDwgcHJv cGVydHl8LyRwbHVnaW4tPnByb3BlcnRpZXMoKSA+Pj4gdGhhdCBoYXMgYmVlbiBzZXQgb24gYQor QzwkdHlwZT4gb2YgY29uZmlnIHNlY3Rpb24uCisKKz1pdGVtIEM8JHZhbHVlPgorCitUaGUgdmFs dWUgb2YgdGhlIEk8TDw8IHByb3BlcnR5fC8kcGx1Z2luLT5wcm9wZXJ0aWVzKCkgPj4+IGRlbm90 ZWQgYnkgQzwka2V5PgordGhhdCB3YXMgcmVhZCBmcm9tIGEgc2VjdGlvbiBjb25maWcgZmlsZS4K KworPWl0ZW0gQzwkc3RvcmVpZD4KKworVGhlIGlkZW50aWZpZXIgb2YgYSBzZWN0aW9uLCBhcyBy ZXR1cm5lZCBieSBDPEw8PCBwYXJzZV9zZWN0aW9uX2hlYWRlcigpfC8kYmFzZS0+cGFyc2Vfc2Vj dGlvbl9oZWFkZXIoLi4uKSA+Pj4uCisKKz1pdGVtIEM8JHNraXBTY2hlbWFDaGVjaz4gKG9wdGlv bmFsKQorCitXaGV0aGVyIHRvIHNraXAgcGVyZm9ybWluZyBhIEM8TDxQVkU6OkpTT05TY2hlbWE+ PiBwcm9wZXJ0eSBjaGVjayBvbiB0aGUgZ2l2ZW4KK0M8JHZhbHVlPi4KKworPWJhY2sKKworPWN1 dAorCiBzdWIgY2hlY2tfdmFsdWUgewogICAgIG15ICgkY2xhc3MsICR0eXBlLCAka2V5LCAkdmFs dWUsICRzdG9yZWlkLCAkc2tpcFNjaGVtYUNoZWNrKSA9IEBfOwogCkBAIC00NzMsNiArOTczLDQy IEBAIHN1YiBjaGVja192YWx1ZSB7CiAgICAgcmV0dXJuICR2YWx1ZTsKIH0KIAorPWhlYWQzICRi YXNlLT5wYXJzZV9zZWN0aW9uX2hlYWRlcigkbGluZSkKKworQjxPUFRJT05BTDo+IENhbiBiZSBv dmVycmlkZGVuIGluIHRoZSBJPGJhc2UgcGx1Z2luPi4KKworICAgICgkdHlwZSwgJHNlY3Rpb25J ZCwgJGVycm1zZywgJGNvbmZpZykgPSBQVkU6OkV4YW1wbGU6OkJhc2VQbHVnaW4tPnBhcnNlX3Nl Y3Rpb25faGVhZGVyKCRsaW5lKQorICAgICgkdHlwZSwgJHNlY3Rpb25JZCwgJGVycm1zZywgJGNv bmZpZykgPSAkY2xhc3MtPnBhcnNlX3NlY3Rpb25faGVhZGVyKCRsaW5lKQorCitQYXJzZXMgdGhl IGhlYWRlciBvZiBhIHNlY3Rpb24gYW5kIHJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUg c2VjdGlvbidzCitMPDwgdHlwZXwvJHBsdWdpbi0+dHlwZSgpID4+LCBJRCBhbmQgb3B0aW9uYWxs eSBhbiBlcnJvciBtZXNzYWdlIGFzIHdlbGwgYXMKK2FkZGl0aW9uYWwgY29uZmlnIGF0dHJpYnV0 ZXMuCisKK0NhbiBiZSBvdmVycmlkZGVuIG9uIHRoZSBJPGJhc2UgcGx1Z2luPiBpbiBvcmRlciB0 byBwcm92aWRlIGN1c3RvbSBsb2dpYyBmb3IKK2hhbmRsaW5nIHRoZSBoZWFkZXIsIGUuZy4gaWYg dGhlIHNlY3Rpb24gSURzIG5lZWQgdG8gYmUgcGFyc2VkIG9yIHZhbGlkYXRlZCBpbgorYSBjZXJ0 YWluIHdheS4KKworRm9yIGV4YW1wbGU6CisKKyAgICBzdWIgcGFyc2Vfc2VjdGlvbl9oZWFkZXIg eworCW15ICgkY2xhc3MsICRsaW5lKSA9IEBfOworCisJaWYgKCRsaW5lID1+IG0vXihcUyk6XHMq KFxTKylccyokLykgeworCSAgICBteSAoJHR5cGUsICRzZWN0aW9uSWQpID0gKCQxLCAkMik7CisK KwkgICAgbXkgJGVycm1zZyA9IHVuZGVmOworCSAgICBldmFsIHsgY2hlY2tfc2VjdGlvbl9pZF9p c192YWxpZCgkc2VjdGlvbklkKTsgfTsKKwkgICAgJGVycm1zZyA9ICRAIGlmICRAOworCisJICAg IG15ICRjb25maWcgPSBwYXJzZV9leHRyYV9zdHVmZl9mcm9tX3NlY3Rpb25faWQoJHNlY3Rpb25J ZCk7CisKKwkgICAgcmV0dXJuICgkdHlwZSwgJHNlY3Rpb25JZCwgJGVycm1zZywgJGNvbmZpZyk7 CisJfQorCXJldHVybiB1bmRlZjsKKyAgICB9CisKKz1jdXQKKwogc3ViIHBhcnNlX3NlY3Rpb25f aGVhZGVyIHsKICAgICBteSAoJGNsYXNzLCAkbGluZSkgPSBAXzsKIApAQCAtNDg1LDEyICsxMDIx LDQxIEBAIHN1YiBwYXJzZV9zZWN0aW9uX2hlYWRlciB7CiAgICAgcmV0dXJuIHVuZGVmOwogfQog Cis9aGVhZDMgJGJhc2UtPmZvcm1hdF9zZWN0aW9uX2hlYWRlciguLi4pCisKKz1oZWFkMyAkYmFz ZS0+Zm9ybWF0X3NlY3Rpb25faGVhZGVyKCR0eXBlLCAkc2VjdGlvbklkLCAkc2NmZywgJGRvbmVf aGFzaCkKKworQjxPUFRJT05BTDo+IENhbiBiZSBvdmVycmlkZGVuIGluIHRoZSBJPGJhc2UgcGx1 Z2luPi4KKworICAgICRoZWFkZXIgPSBQVkU6OkV4YW1wbGU6OkJhc2VQbHVnaW4tPmZvcm1hdF9z ZWN0aW9uX2hlYWRlcigkdHlwZSwgJHNlY3Rpb25JZCwgJHNjZmcsICRkb25lX2hhc2gpCisgICAg JGhlYWRlciA9ICRjbGFzcy0+Zm9ybWF0X3NlY3Rpb25faGVhZGVyKCR0eXBlLCAkc2VjdGlvbklk LCAkc2NmZywgJGRvbmVfaGFzaCkKKworRm9ybWF0cyB0aGUgaGVhZGVyIG9mIGEgc2VjdGlvbi4g U2ltcGx5IEM8IiR0eXBlOiAkc2VjdGlvbklkXG4iPiBieSBkZWZhdWx0LgorCitOb3RlIHRoYXQg d2hlbiBvdmVycmlkaW5nIHRoaXMsIHRoZSBoZWFkZXIgQjxNVVNUPiBlbmQgd2l0aCBhIG5ld2xp bmUgKEM8XG4+KS4KK09uZSBhbHNvIG1pZ2h0IHdhbnQgdG8gYWRkIGEgbWF0Y2hpbmcgb3ZlcnJp ZGUgZm9yCitDPEw8PCBwYXJzZV9zZWN0aW9uX2hlYWRlcigpfC8kYmFzZS0+cGFyc2Vfc2VjdGlv bl9oZWFkZXIoJGxpbmUpID4+Pi4KKworPWN1dAorCiBzdWIgZm9ybWF0X3NlY3Rpb25faGVhZGVy IHsKICAgICBteSAoJGNsYXNzLCAkdHlwZSwgJHNlY3Rpb25JZCwgJHNjZmcsICRkb25lX2hhc2gp ID0gQF87CiAKICAgICByZXR1cm4gIiR0eXBlOiAkc2VjdGlvbklkXG4iOwogfQogCis9aGVhZDMg JGJhc2UtPmdldF9wcm9wZXJ0eV9zY2hlbWEoLi4uKQorCis9aGVhZDMgJGJhc2UtPmdldF9wcm9w ZXJ0eV9zY2hlbWEoJHR5cGUsICRrZXkpCisKKyAgICAkc2NoZW1hID0gUFZFOjpFeGFtcGxlOjpC YXNlUGx1Z2luLT5nZXRfcHJvcGVydHlfc2NoZW1hKCR0eXBlLCAka2V5KQorICAgICRzY2hlbWEg PSAkY2xhc3MtPmdldF9wcm9wZXJ0eV9zY2hlbWEoJHR5cGUsICRrZXkpCisKK1JldHVybnMgdGhl IHNjaGVtYSBvZiB0aGUgTDw8IHByb3BlcnR5fC8kcGx1Z2luLT5wcm9wZXJ0aWVzKCkgPj4gQzwk a2V5PiBvZiB0aGUKK3BsdWdpbiBmb3IgQzwkdHlwZT4uCisKKz1jdXQKKwogc3ViIGdldF9wcm9w ZXJ0eV9zY2hlbWEgewogICAgIG15ICgkY2xhc3MsICR0eXBlLCAka2V5KSA9IEBfOwogCkBAIC01 MDYsNiArMTA3MSwxMDkgQEAgc3ViIGdldF9wcm9wZXJ0eV9zY2hlbWEgewogICAgIHJldHVybiAk c2NoZW1hOwogfQogCis9aGVhZDMgJGJhc2UtPnBhcnNlX2NvbmZpZyguLi4pCisKKz1oZWFkMyAk YmFzZS0+cGFyc2VfY29uZmlnKCRmaWxlbmFtZSwgJHJhdyBbLCAkYWxsb3dfdW5rbm93biBdKQor CisgICAgJGNvbmZpZyA9IFBWRTo6RXhhbXBsZTo6QmFzZVBsdWdpbi0+cGFyc2VfY29uZmlnKCRm aWxlbmFtZSwgJHJhdywgJGFsbG93X3Vua25vd24pCisgICAgJGNvbmZpZyA9ICRjbGFzcy0+cGFy c2VfY29uZmlnKCRmaWxlbmFtZSwgJHJhdywgJGFsbG93X3Vua25vd24pCisKK1BhcnNlcyB0aGUg Y29udGVudHMgb2YgYSBmaWxlIGFzIEM8TDxQVkU6OlNlY3Rpb25Db25maWc+PiwgcmV0dXJuaW5n IHRoZSBwYXJzZWQKK2RhdGEgYW5ub3RhdGVkIHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvbiAo c2VlIGJlbG93KS4KKworPW92ZXIKKworPWl0ZW0gQzwkZmlsZW5hbWU+CisKK1RoZSBuYW1lIG9m IHRoZSBmaWxlIHdob3NlIGNvbnRlbnQgaXMgc3RvcmVkIGluIEM8JHJhdz4uCisKK09ubHkgdXNl ZCBmb3IgZXJyb3IgbWVzc2FnZXMgYW5kIHdhcm5pbmdzLCBzbyBpdCBtYXkgYWxzbyBiZSBzb21l dGhpbmcgZWxzZS4KKworPWl0ZW0gQzwkcmF3PgorCitUaGUgcmF3IGNvbnRlbnQgb2YgQzwkZmls ZW5hbWU+LgorCis9aXRlbSBDPCRhbGxvd191bmtub3duPiAob3B0aW9uYWwpCisKK1doZXRoZXIg dG8gYWxsb3cgcGFyc2luZyB1bmtub3duIEk8dHlwZXM+LgorCis9YmFjaworCitUaGUgcmV0dXJu ZWQgaGFzaCBpcyBzdHJ1Y3R1cmVkIGFzIGZvbGxvd3M6CisKKyAgICB7CisJaWRzID0+IHsKKwkg ICAgZm9vID0+IHsKKwkJa2V5ID0+IHZhbHVlLAorCQkuLi4KKwkgICAgfSwKKwkgICAgYmFyID0+ IHsKKwkJa2V5ID0+IHZhbHVlLAorCQkuLi4KKwkgICAgfSwKKwl9LAorCW9yZGVyID0+IHsKKwkg ICAgZm9vID0+IDEsCisJICAgIGJhciA9PiAyLAorCX0sCisJZGlnZXN0ID0+ICI1ZjU1MTNmODgy MmZkYmU1MTQ1YWYzM2I2NGQ4ZDk3MGRjZjk1YzZlIiwKKwllcnJvcnMgPT4gKAorCSAgICB7CisJ CWNvbnRleHQgPT4gLi4uLAorCQlzZWN0aW9uID0+ICJzZWN0aW9uIElEIiwKKwkJa2V5ID0+ICJz b21lX2tleSIsCisJCWVyciA9PiAiZXJyb3IgbWVzc2FnZSIsCisJICAgIH0sCisJICAgIC4uLgor CSksCisgICAgfQorCis9b3ZlcgorCis9aXRlbSBDPGlkcz4KKworRWFjaCBzZWN0aW9uJ3MgcGFy c2VkIGRhdGEgKHZpYSBDPEw8PCBjaGVja19jb25maWcoKS8kYmFzZS0+Y2hlY2tfY29uZmlnKC4u LikgPj4+KSwKK2luZGV4ZWQgYnkgdGhlIHNlY3Rpb24gSUQuCisKKz1pdGVtIEM8b3JkZXI+CisK K1RoZSBvcmRlciBpbiB3aGljaCB0aGUgc2VjdGlvbnMgaW4gQzxpZHM+IHdlcmUgZm91bmQgaW4g dGhlIGNvbmZpZyBmaWxlLgorCis9aXRlbSBDPGRpZ2VzdD4KKworQSBTSEExIGhleCBkaWdlc3Qg b2YgdGhlIGNvbnRlbnRzIGluIEM8JHJhdz4uIE1heSBmb3IgZXhhbXBsZSBiZSB1c2VkIHRvIGNo ZWNrCit3aGV0aGVyIHRoZSBjb25maWd1cmF0aW9uIGhhcyBjaGFuZ2VkIGJldHdlZW4gcGFyc2Vz LgorCis9aXRlbSBDPGVycm9ycz4gKG9wdGlvbmFsKQorCitBbiBvcHRpb25hbCBsaXN0IG9mIGVy cm9yIGhhc2hlcy4KKworPWJhY2sKKworVGhlIGhhc2hlcyBpbiB0aGUgb3B0aW9uYWxseSByZXR1 cm5lZCBDPGVycm9ycz4ga2V5IGFyZSBzdHJ1Y3R1cmVkIGFzIGZvbGxvd3M6CisKKz1vdmVyCisK Kz1pdGVtIEM8Y29udGV4dD4KKworSW4gd2hpY2ggZmlsZSBhbmQgaW4gd2hpY2ggbGluZSB0aGUg ZXJyb3Igd2FzIGVuY291bnRlcmVkLgorCis9aXRlbSBDPHNlY3Rpb24+CisKK0luIHdoaWNoIHNl Y3Rpb24gdGhlIGVycm9yIHdhcyBlbmNvdW50ZXJlZC4KKworPWl0ZW0gQzxrZXk+CisKK1doaWNo IEk8cHJvcGVydHk+IHRoZSBlcnJvciBjb3JyZXNwb25kcyB0by4KKworPWl0ZW0gQzxlcnI+CisK K1RoZSBlcnJvci4KKworPWJhY2sKKworPWN1dAorCiBzdWIgcGFyc2VfY29uZmlnIHsKICAgICBt eSAoJGNsYXNzLCAkZmlsZW5hbWUsICRyYXcsICRhbGxvd191bmtub3duKSA9IEBfOwogCkBAIC02 NDIsNiArMTMxMCw2MCBAQCBzdWIgcGFyc2VfY29uZmlnIHsKICAgICByZXR1cm4gJGNmZzsKIH0K IAorPWhlYWQzICRiYXNlLT5jaGVja19jb25maWcoLi4uKQorCis9aGVhZDMgJGJhc2UtPmNoZWNr X2NvbmZpZygkc2VjdGlvbklkLCAkY29uZmlnLCAkY3JlYXRlIFssICRza2lwU2NoZW1hQ2hlY2sg XSkKKworICAgICRzZXR0aW5ncyA9IFBWRTo6RXhhbXBsZTo6QmFzZVBsdWdpbi0+Y2hlY2tfY29u ZmlnKCRzZWN0aW9uSWQsICRjb25maWcsICRjcmVhdGUsICRza2lwU2NoZW1hQ2hlY2spCisgICAg JHNldHRpbmdzID0gJGNsYXNzLT5jaGVja19jb25maWcoJHNlY3Rpb25JZCwgJGNvbmZpZywgJGNy ZWF0ZSwgJHNraXBTY2hlbWFDaGVjaykKKworRG9lcyBub3QganVzdCBjaGVjayB3aGV0aGVyIGEg c2VjdGlvbidzIGNvbmZpZ3VyYXRpb24gaXMgdmFsaWQsIGRlc3BpdGUgaXRzCituYW1lLCBidXQg YWxzbyBjYWxscyBjaGVja3MgdmFsdWVzIG9mIEk8TDw8IHByb3BlcnRpZXN8LyRwbHVnaW5fPnBy b3BlcnRpZXMoKSA+Pj4KK3dpdGggQzxMPDwgY2hlY2tfdmFsdWUoKXwvJGJhc2UtPmNoZWNrX3Zh bHVlKC4uLikgPj4+IGJlZm9yZSBkZWNvZGluZyB0aGVtIHVzaW5nCitDPEw8PCBkZWNvZGVfdmFs dWUoKXwvJGJhc2UtPmRlY29kZV92YWx1ZSguLi4pID4+Pi4KKworUmV0dXJucyBhIGhhc2ggd2hp Y2ggY29udGFpbnMgYWxsIEk8TDw8IHByb3BlcnRpZXN8LyRwbHVnaW5fPnByb3BlcnRpZXMoKSA+ Pj4KK2ZvciB0aGUgZ2l2ZW4gQzwkc2VjdGlvbklkPi4gSW4gb3RoZXIgd29yZHMsIGFsbCBjb25m aWd1cmVkIGtleS12YWx1ZSBwYWlycyBmb3IKK3RoZSBwcm92aWRlZCBzZWN0aW9uLgorCis9b3Zl cgorCis9aXRlbSBDPCRzZWN0aW9uSWQ+CisKK1RoZSBpZGVudGlmaWVyIG9mIGEgc2VjdGlvbiwg YXMgcmV0dXJuZWQgYnkgQzxMPDwgLyRiYXNlLT5wYXJzZV9zZWN0aW9uX2hlYWRlcigkbGluZSkg Pj4+LgorCis9aXRlbSBDPCRjb25maWc+CisKK1RoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBzZWN0 aW9uIGNvcnJlc3BvbmRpbmcgdG8gQzwkc2VjdGlvbklkPi4KKworPWl0ZW0gQzwkY3JlYXRlPgor CitJZiBzZXQgdG8gQzwxPiwgY2hlY2tzIHdoZXRoZXIgYSB2YWx1ZSBoYXMgYmVlbiBzZXQgZm9y IGFsbCByZXF1aXJlZCBwcm9wZXJ0aWVzCitvZiBDPCRjb25maWc+LgorCis9aXRlbSBDPCRza2lw U2NoZW1hQ2hlY2s+IChvcHRpb25hbCkKKworV2hldGhlciB0byBza2lwIHBlcmZvcm1pbmcgYW55 IEM8TDxQVkU6OkpTT05TY2hlbWE+PiBwcm9wZXJ0eSBjaGVja3MuCisKKz1iYWNrCisKKz1oZWFk NCBBIE5vdGUgb24gRXh0ZW5kaW5nIGFuZCBPdmVycmlkaW5nCisKK0lmIGFkZGl0aW9uYWwgY2hl Y2tzIGFyZSBuZWVkZWQgdGhhdCBjYW5ub3QgYmUgZXhwcmVzc2VkIGluIHRoZSBzY2hlbWEsIHRo aXMKK21ldGhvZCBtYXkgYmUgZXh0ZW5kZWQgb3Igb3ZlcnJpZGRlbiBJPHdpdGggY2FyZT4uCisK K1doZW4gdGhpcyBtZXRob2QgaXMgSTxvdmVycmlkZGVuPiwgYXMgaW4gdGhlIG9yaWdpbmFsIGlt cGxlbWVudGF0aW9uIGlzIHJlcGxhY2VkCitjb21wbGV0ZWx5LCBhbGwgdmFsdWVzIG11c3Qgc3Rp bGwgYmUgY2hlY2tlZCB2aWEgQzxMPDwgY2hlY2tfdmFsdWUoKXwvJGJhc2UtPmNoZWNrX3ZhbHVl KC4uLikgPj4+CithbmQgZGVjb2RlZCB3aXRoIEM8TDw8IGRlY29kZV92YWx1ZSgpfC8kYmFzZS0+ ZGVjb2RlX3ZhbHVlKC4uLikgPj4+LgorCitXaGVuIGV4dGVuZGluZyB0aGUgbWV0aG9kLCBhcyBp biBjYWxsaW5nIEM8TDw8ICRjbGFzcy0+U1VQRVI6OmNoZWNrX2NvbmZpZygpfC8kYmFzZS0+Y2hl Y2tfY29uZmlnKC4uLikgPj4+CitpbnNpZGUgdGhlIHJlZGVmaW5lZCBtZXRob2QsIGl0IGlzIGlt cG9ydGFudCB0byBub3RlIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRoZQoraGFzaCByZXR1cm5lZCBi eSB0aGUgQzxTVVBFUj4gY2FsbCBkaWZmZXIgZnJvbSB0aGUgY29udGVudHMgb2YgQzwkY29uZmln Pi4gVGhpcworbWVhbnMgdGhhdCBhIGN1c3RvbSBjaGVjayBwZXJmb3JtZWQgSTxiZWZvcmU+IHRo ZSBDPFNVUEVSPiBjYWxsIGNhbm5vdAorbmVjZXNzYXJpbHkgYmUgcGVyZm9ybWVkIGluIHRoZSBz YW1lIHdheSBJPGFmdGVyPiB0aGUgQzxTVVBFUj4gY2FsbC4KKworPWN1dAorCiBzdWIgY2hlY2tf Y29uZmlnIHsKICAgICBteSAoJGNsYXNzLCAkc2VjdGlvbklkLCAkY29uZmlnLCAkY3JlYXRlLCAk c2tpcFNjaGVtYUNoZWNrKSA9IEBfOwogCkBAIC03MDAsNiArMTQyMiw1NSBAQCBteSAkZm9ybWF0 X2NvbmZpZ19saW5lID0gc3ViIHsKICAgICB9CiB9OwogCis9aGVhZDMgJGJhc2UtPndyaXRlX2Nv bmZpZyguLi4pCisKKz1oZWFkMyAkYmFzZS0+d3JpdGVfY29uZmlnKCRmaWxlbmFtZSwgJGNmZyBb LCAkYWxsb3dfdW5rbm93biBdKQorCisgICAgJG91dHB1dCA9IFBWRTo6RXhhbXBsZTo6QmFzZVBs dWdpbi0+d3JpdGVfY29uZmlnKCRmaWxlbmFtZSwgJGNmZywgJGFsbG93X3Vua25vd24pCisgICAg JG91dHB1dCA9ICRjbGFzcy0+d3JpdGVfY29uZmlnKCRmaWxlbmFtZSwgJGNmZywgJGFsbG93X3Vu a25vd24pCisKK0dlbmVyYXRlcyB0aGUgb3V0cHV0IHRoYXQgc2hvdWxkIGJlIHdyaXR0ZW4gdG8g dGhlIEM8TDxQVkU6OlNlY3Rpb25Db25maWc+PiBmaWxlLgorCis9b3ZlcgorCis9aXRlbSBDPCRm aWxlbmFtZT4gKHVudXNlZCkKKworVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gd2hpY2ggdGhlIGdl bmVyYXRlZCBvdXRwdXQgd2lsbCBiZSB3cml0dGVuIHRvLgorVGhpcyBwYXJhbWV0ZXIgaXMgY3Vy cmVudGx5IHVudXNlZCBhbmQgaGFzIG5vIGVmZmVjdC4KKworPWl0ZW0gQzwkY2ZnPgorCitUaGUg aGFzaCB0aGF0IHJlcHJlc2VudHMgdGhlIGVudGlyZSBjb25maWd1cmF0aW9uIHRoYXQgc2hvdWxk IGJlIHdyaXR0ZW4uCitUaGlzIGhhc2ggaXMgZXhwZWN0ZWQgdG8gaGF2ZSB0aGUgZm9sbG93aW5n IGZvcm1hdDoKKworICAgIHsKKwlpZHMgPT4geworCSAgICBmb28gPT4geworCQlrZXkgPT4gdmFs dWUsCisJCS4uLgorCSAgICB9LAorCSAgICBiYXIgPT4geworCQlrZXkgPT4gdmFsdWUsCisJCS4u LgorCSAgICB9LAorCX0sCisJb3JkZXIgPT4geworCSAgICBmb28gPT4gMSwKKwkgICAgYmFyID0+ IDIsCisJfSwKKyAgICB9CisKK0FueSBvdGhlciB0b3AtbGV2ZWwga2V5cyB3aWxsIGJlIGlnbm9y ZWQsIHNvIGl0J3Mgb2theSB0byBwYXNzIGFsb25nIHRoZQorQzxkaWdlc3Q+IGtleSBmcm9tIEM8 TDw8IHBhcnNlX2NvbmZpZygpfC8kYmFzZS0+cGFyc2VfY29uZmlnKC4uLikgPj4+LCBmb3IgZXhh bXBsZS4KKworPWl0ZW0gQzwkYWxsb3dfdW5rbm93bj4gKG9wdGlvbmFsKQorCitXaGV0aGVyIHRv IGFsbG93IHdyaXRpbmcgc2VjdGlvbnMgd2l0aCBhbiB1bmtub3duIEk8TDwvdHlwZT4+LgorCis9 YmFjaworCis9Y3V0CisKIHN1YiB3cml0ZV9jb25maWcgewogICAgIG15ICgkY2xhc3MsICRmaWxl bmFtZSwgJGNmZywgJGFsbG93X3Vua25vd24pID0gQF87CiAKQEAgLTc5OCw2ICsxNTY5LDQ3IEBA IHN1YiBhc3NlcnRfaWZfbW9kaWZpZWQgewogICAgIFBWRTo6VG9vbHM6OmFzc2VydF9pZl9tb2Rp ZmllZCgkY2ZnLT57ZGlnZXN0fSwgJGRpZ2VzdCk7CiB9CiAKKz1oZWFkMyBkZWxldGVfZnJvbV9j b25maWcoLi4uKQorCis9aGVhZDMgZGVsZXRlX2Zyb21fY29uZmlnKCRjb25maWcsICRvcHRpb25f c2NoZW1hLCAkbmV3X29wdGlvbnMsICR0b19kZWxldGUpCisKKyAgICAkY29uZmlnID0gZGVsZXRl X2Zyb21fY29uZmlnKCRjb25maWcsICRvcHRpb25fc2NoZW1hLCAkbmV3X29wdGlvbnMsICR0b19k ZWxldGUpCisKK0NvbnZlbmllbmNlIGhlbHBlciBtZXRob2QgdXNlZCBpbnRlcm5hbGx5IHRvIGRl bGV0ZSBrZXlzIGZyb20gdGhlIHNpbmdsZSBzZWN0aW9uCitjb25maWcgQzwkY29uZmlnPi4KKwor U3BlY2lmaWNhbGx5LCB0aGUga2V5cyBnaXZlbiBieSBDPCR0b19kZWxldGU+IGFyZSBkZWxldGVk IGZyb20gQzwkY29uZmlnPiBpZgordGhleSdyZSBub3QgcmVxdWlyZWQgb3IgZml4ZWQsIG9yIHNl dCBpbiB0aGUgc2FtZSBnby4KKworTm90ZTogVGhlIHBhc3NlZCBDPCRjb25maWc+IGlzIG1vZGlm aWVkIGluIHBsYWNlIGFuZCBhbHNvIHJldHVybmVkLgorCis9b3ZlcgorCis9aXRlbSBDPCRjb25m aWc+CisKK1RoZSBzZWN0aW9uJ3MgY29uZmlndXJhdGlvbiB0aGF0IHRoZSBnaXZlbiBJPEw8PCBw cm9wZXJ0aWVzfC8kcGx1Z2luLT5wcm9wZXJ0aWVzKC4uLikgPj4+CitpbiBDPCR0b19kZWxldGU+ IHNob3VsZCBiZSBkZWxldGVkIGZyb20uCisKKz1pdGVtIEM8JG9wdGlvbl9zY2hlbWE+CisKK1Ro ZSBzY2hlbWEgb2YgdGhlIHByb3BlcnRpZXMgYXNzb2NpYXRlZCB3aXRoIEM8JGNvbmZpZz4uIFNl ZSB0aGUKK0M8TDw8IG9wdGlvbnMoKXwvJHBsdWdpbi0+b3B0aW9ucygpID4+PiBtZXRob2QuCisK Kz1pdGVtIEM8JG5ld19vcHRpb25zPgorCitUaGUgcHJvcGVydGllcyB3aGljaCB3aWxsIGJlIGFk ZGVkIHRvIEM8JGNvbmZpZz4uIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBkb2Vzbid0CithZGQgYW55 IHByb3BlcnRpZXMgaXRzZWxmOyB0aGlzIGlzIHRvIHByb2hpYml0IHNpbXVsdGFuZW91c2x5IHNl dHRpbmcgYW5kIGRlbGV0aW5nCit0aGUgc2FtZSBJPHByb3BlcnR5Pi4KKworPWl0ZW0gQzwkdG9f ZGVsZXRlPgorCitBIHJlZmVyZW5jZSB0byBhbiBhcnJheSBjb250YWluaW5nIHRoZSBuYW1lcyBv ZiB0aGUgcHJvcGVydGllcyB0byBkZWxldGUgZnJvbQorQzwkY29uZmlnPi4KKworPWJhY2sKKwor PWN1dAorCiBzdWIgZGVsZXRlX2Zyb21fY29uZmlnIHsKICAgICBteSAoJGNvbmZpZywgJG9wdGlv bl9zY2hlbWEsICRuZXdfb3B0aW9ucywgJHRvX2RlbGV0ZSkgPSBAXzsKIAotLSAKMi4zOS41CgoK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCnB2ZS1kZXZl bCBtYWlsaW5nIGxpc3QKcHZlLWRldmVsQGxpc3RzLnByb3htb3guY29tCmh0dHBzOi8vbGlzdHMu cHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3B2ZS1kZXZlbAo=