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 ACD1B1FF139 for ; Tue, 27 Jan 2026 14:17:14 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 612B422772; Tue, 27 Jan 2026 14:17:36 +0100 (CET) Message-ID: <22e23935-04e6-425a-a06f-8c68e4a14aaa@proxmox.com> Date: Tue, 27 Jan 2026 14:16:53 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Samuel Rufinatscha To: Proxmox VE development discussion , Kefu Chai References: <20260106142440.2368585-1-k.chai@proxmox.com> <20260106142440.2368585-4-k.chai@proxmox.com> Content-Language: en-US In-Reply-To: <20260106142440.2368585-4-k.chai@proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL -0.154 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_ASCII_DIVIDERS 0.8 Email that uses ascii formatting dividers and possible spam tricks KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: Re: [pve-devel] [PATCH pve-cluster 03/15] pmxcfs-rs: add pmxcfs-logger crate 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" VGhhbmtzIGZvciB0aGUgcGF0Y2gsIEtlZnUuCgpUaGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgbG9va3Mg c29saWQuCgpNYWluIHBvaW50cyBhcmUgYXJvdW5kIEMgY29tcGF0aWJpbGl0eSBkZXRhaWxzLiBJ dCBtaWdodAphbHNvIGJlIHdvcnRoIGFkZGluZyBhIGNvdXBsZSBvZiBiaW5hcnkgY29tcGF0aWJp bGl0eSB0ZXN0cwooa25vd24gQyBibG9icy9maXh0dXJlcykgYW5kIGEgcGVyZiB0ZXN0IGZvciBt ZXJnaW5nIGxhcmdlIGxvZ3MuCgpQbGVhc2Ugc2VlIGlubGluZSBjb21tZW50cyBiZWxvdy4KCk9u IDEvNi8yNiAzOjI0IFBNLCBLZWZ1IENoYWkgd3JvdGU6Cj4gQWRkIGNsdXN0ZXIgbG9nZ2luZyBz eXN0ZW0gd2l0aDoKPiAtIENsdXN0ZXJMb2c6IE1haW4gQVBJIHdpdGggYXV0b21hdGljIGRlZHVw bGljYXRpb24KPiAtIFJpbmdCdWZmZXI6IENpcmN1bGFyIGJ1ZmZlciAoNTAsMDAwIGVudHJpZXMp Cj4gLSBGTlYtMWEgaGFzaGluZyBmb3IgZHVwbGljYXRlIGRldGVjdGlvbgo+IC0gSlNPTiBleHBv cnQgbWF0Y2hpbmcgQyBmb3JtYXQKPiAtIEJpbmFyeSBzZXJpYWxpemF0aW9uIGZvciBlZmZpY2ll bnQgc3RvcmFnZQo+IC0gVGltZS1iYXNlZCBhbmQgbm9kZS1kaWdlc3Qgc29ydGluZwo+IAo+IFRo aXMgaXMgYSBzZWxmLWNvbnRhaW5lZCBjcmF0ZSB3aXRoIG5vIGludGVybmFsIGRlcGVuZGVuY2ll cywKPiBvbmx5IHJlcXVpcmluZyBzZXJkZSBhbmQgcGFya2luZ19sb3QuIEl0IHByb3ZpZGVzIH4y NCUgb2YgdGhlCj4gQyB2ZXJzaW9uJ3MgTE9DICg3NDAgdnMgMzAwMCspIHdoaWxlIG1haW50YWlu aW5nIGZ1bGwKPiBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGV4aXN0aW5nIGxvZyBmb3JtYXQuCj4g Cj4gSW5jbHVkZXMgY29tcHJlaGVuc2l2ZSB1bml0IHRlc3RzIGZvciByaW5nIGJ1ZmZlciBvcGVy YXRpb25zLAo+IHNlcmlhbGl6YXRpb24sIGFuZCBmaWx0ZXJpbmcuCj4gCj4gU2lnbmVkLW9mZi1i eTogS2VmdSBDaGFpIDxrLmNoYWlAcHJveG1veC5jb20+Cj4gLS0tCj4gICBzcmMvcG14Y2ZzLXJz L0NhcmdvLnRvbWwgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwo+ICAgc3JjL3BteGNmcy1y cy9wbXhjZnMtbG9nZ2VyL0NhcmdvLnRvbWwgICAgICAgIHwgIDE1ICsKPiAgIHNyYy9wbXhjZnMt cnMvcG14Y2ZzLWxvZ2dlci9SRUFETUUubWQgICAgICAgICB8ICA1OCArKwo+ICAgLi4uL3BteGNm cy1sb2dnZXIvc3JjL2NsdXN0ZXJfbG9nLnJzICAgICAgICAgIHwgNTUwICsrKysrKysrKysrKysr KysrCj4gICBzcmMvcG14Y2ZzLXJzL3BteGNmcy1sb2dnZXIvc3JjL2VudHJ5LnJzICAgICAgfCA1 NzkgKysrKysrKysrKysrKysrKysKPiAgIHNyYy9wbXhjZnMtcnMvcG14Y2ZzLWxvZ2dlci9zcmMv aGFzaC5ycyAgICAgICB8IDE3MyArKysrKysKPiAgIHNyYy9wbXhjZnMtcnMvcG14Y2ZzLWxvZ2dl ci9zcmMvbGliLnJzICAgICAgICB8ICAyNyArCj4gICAuLi4vcG14Y2ZzLWxvZ2dlci9zcmMvcmlu Z19idWZmZXIucnMgICAgICAgICAgfCA1ODEgKysrKysrKysrKysrKysrKysrCj4gICA4IGZpbGVz IGNoYW5nZWQsIDE5ODQgaW5zZXJ0aW9ucygrKQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9w bXhjZnMtcnMvcG14Y2ZzLWxvZ2dlci9DYXJnby50b21sCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3BteGNmcy1ycy9wbXhjZnMtbG9nZ2VyL1JFQURNRS5tZAo+ICAgY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy9wbXhjZnMtcnMvcG14Y2ZzLWxvZ2dlci9zcmMvY2x1c3Rlcl9sb2cucnMKPiAgIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcG14Y2ZzLXJzL3BteGNmcy1sb2dnZXIvc3JjL2VudHJ5LnJz Cj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3BteGNmcy1ycy9wbXhjZnMtbG9nZ2VyL3NyYy9o YXNoLnJzCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3BteGNmcy1ycy9wbXhjZnMtbG9nZ2Vy L3NyYy9saWIucnMKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcG14Y2ZzLXJzL3BteGNmcy1s b2dnZXIvc3JjL3JpbmdfYnVmZmVyLnJzCj4gCj4gZGlmZiAtLWdpdCBhL3NyYy9wbXhjZnMtcnMv Q2FyZ28udG9tbCBiL3NyYy9wbXhjZnMtcnMvQ2FyZ28udG9tbAo+IGluZGV4IDI4ZTIwYmI3Li40 ZDE3ZTg3ZSAxMDA2NDQKPiAtLS0gYS9zcmMvcG14Y2ZzLXJzL0NhcmdvLnRvbWwKPiArKysgYi9z cmMvcG14Y2ZzLXJzL0NhcmdvLnRvbWwKPiBAQCAtMyw2ICszLDcgQEAKPiAgIG1lbWJlcnMgPSBb Cj4gICAgICAgInBteGNmcy1hcGktdHlwZXMiLCAgIyBTaGFyZWQgdHlwZXMgYW5kIGVycm9yIGRl ZmluaXRpb25zCj4gICAgICAgInBteGNmcy1jb25maWciLCAgICAgIyBDb25maWd1cmF0aW9uIG1h bmFnZW1lbnQKPiArICAgICJwbXhjZnMtbG9nZ2VyIiwgICAgICMgQ2x1c3RlciBsb2cgd2l0aCBy aW5nIGJ1ZmZlciBhbmQgZGVkdXBsaWNhdGlvbgo+ICAgXQo+ICAgcmVzb2x2ZXIgPSAiMiIKPiAg IAo+IGRpZmYgLS1naXQgYS9zcmMvcG14Y2ZzLXJzL3BteGNmcy1sb2dnZXIvQ2FyZ28udG9tbCBi L3NyYy9wbXhjZnMtcnMvcG14Y2ZzLWxvZ2dlci9DYXJnby50b21sCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwMC4uMWFmM2YwMTUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv c3JjL3BteGNmcy1ycy9wbXhjZnMtbG9nZ2VyL0NhcmdvLnRvbWwKPiBAQCAtMCwwICsxLDE1IEBA Cj4gK1twYWNrYWdlXQo+ICtuYW1lID0gInBteGNmcy1sb2dnZXIiCj4gK3ZlcnNpb24gPSAiMC4x LjAiCj4gK2VkaXRpb24gPSAiMjAyMSIKPiArCj4gK1tkZXBlbmRlbmNpZXNdCj4gK2FueWhvdyA9 ICIxLjAiCj4gK3BhcmtpbmdfbG90ID0gIjAuMTIiCj4gK3NlcmRlID0geyB2ZXJzaW9uID0gIjEu MCIsIGZlYXR1cmVzID0gWyJkZXJpdmUiXSB9Cj4gK3NlcmRlX2pzb24gPSAiMS4wIgo+ICt0cmFj aW5nID0gIjAuMSIKPiArCj4gK1tkZXYtZGVwZW5kZW5jaWVzXQo+ICt0ZW1wZmlsZSA9ICIzLjAi Cj4gKwo+IGRpZmYgLS1naXQgYS9zcmMvcG14Y2ZzLXJzL3BteGNmcy1sb2dnZXIvUkVBRE1FLm1k IGIvc3JjL3BteGNmcy1ycy9wbXhjZnMtbG9nZ2VyL1JFQURNRS5tZAo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAuLjM4ZjEwMmMyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L3NyYy9wbXhjZnMtcnMvcG14Y2ZzLWxvZ2dlci9SRUFETUUubWQKPiBAQCAtMCwwICsxLDU4IEBA Cj4gKyMgcG14Y2ZzLWxvZ2dlcgo+ICsKPiArQ2x1c3Rlci13aWRlIGxvZyBtYW5hZ2VtZW50IGZv ciBwbXhjZnMsIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCB0aGUgQyBpbXBsZW1lbnRhdGlvbiAobG9n Z2VyLmMpLgo+ICsKPiArIyMgT3ZlcnZpZXcKPiArCj4gK1RoaXMgY3JhdGUgaW1wbGVtZW50cyBh IGNsdXN0ZXIgbG9nIHN5c3RlbSBtYXRjaGluZyBQcm94bW94J3MgQy1iYXNlZCBsb2dnZXIuYyBi ZWhhdmlvci4gSXQgcHJvdmlkZXM6Cj4gKwo+ICstICoqUmluZyBCdWZmZXIgU3RvcmFnZSoqOiBD aXJjdWxhciBidWZmZXIgZm9yIGxvZyBlbnRyaWVzIHdpdGggYXV0b21hdGljIGNhcGFjaXR5IG1h bmFnZW1lbnQKPiArLSAqKkZOVi0xYSBIYXNoaW5nKio6IEhhc2hpbmcgZm9yIG5vZGUgYW5kIGlk ZW50aXR5LWJhc2VkIGRlZHVwbGljYXRpb24KPiArLSAqKkRlZHVwbGljYXRpb24qKjogUGVyLW5v ZGUgdHJhY2tpbmcgb2YgbGF0ZXN0IGxvZyBlbnRyaWVzIHRvIGF2b2lkIGR1cGxpY2F0ZXMKPiAr LSAqKlRpbWUtYmFzZWQgU29ydGluZyoqOiBDaHJvbm9sb2dpY2FsIG9yZGVyaW5nIG9mIGxvZyBl bnRyaWVzIGFjcm9zcyBub2Rlcwo+ICstICoqTXVsdGktbm9kZSBNZXJnaW5nKio6IENvbWJpbmlu ZyBsb2dzIGZyb20gbXVsdGlwbGUgY2x1c3RlciBub2Rlcwo+ICstICoqSlNPTiBFeHBvcnQqKjog V2ViIFVJLWNvbXBhdGlibGUgSlNPTiBvdXRwdXQgbWF0Y2hpbmcgQyBmb3JtYXQKPiArCj4gKyMj IEFyY2hpdGVjdHVyZQo+ICsKPiArIyMjIEtleSBDb21wb25lbnRzCj4gKwo+ICsxLiAqKkxvZ0Vu dHJ5KiogKGBlbnRyeS5yc2ApOiBJbmRpdmlkdWFsIGxvZyBlbnRyeSB3aXRoIGF1dG9tYXRpYyBV SUQgZ2VuZXJhdGlvbgo+ICsyLiAqKlJpbmdCdWZmZXIqKiAoYHJpbmdfYnVmZmVyLnJzYCk6IENp cmN1bGFyIGJ1ZmZlciB3aXRoIGNhcGFjaXR5IG1hbmFnZW1lbnQKPiArMy4gKipDbHVzdGVyTG9n KiogKGBsaWIucnNgKTogTWFpbiBBUEkgd2l0aCBkZWR1cGxpY2F0aW9uIGFuZCBtZXJnaW5nCj4g KzQuICoqSGFzaCBGdW5jdGlvbnMqKiAoYGhhc2gucnNgKTogRk5WLTFhIGltcGxlbWVudGF0aW9u IG1hdGNoaW5nIEMKPiArCj4gKyMjIEMgdG8gUnVzdCBNYXBwaW5nCj4gKwo+ICt8IEMgRnVuY3Rp b24gfCBSdXN0IEVxdWl2YWxlbnQgfCBMb2NhdGlvbiB8Cj4gK3wtLS0tLS0tLS0tLS18LS0tLS0t LS0tLS0tLS0tLS18LS0tLS0tLS0tLXwKPiArfCBgZm52XzY0YV9idWZgIHwgYGhhc2g6OmZudl82 NGFgIHwgaGFzaC5ycyB8Cj4gK3wgYGNsb2dfcGFja2AgfCBgTG9nRW50cnk6OnBhY2tgIHwgZW50 cnkucnMgfAo+ICt8IGBjbG9nX2NvcHlgIHwgYFJpbmdCdWZmZXI6OmFkZF9lbnRyeWAgfCByaW5n X2J1ZmZlci5ycyB8Cj4gK3wgYGNsb2dfc29ydGAgfCBgUmluZ0J1ZmZlcjo6c29ydGAgfCByaW5n X2J1ZmZlci5ycyB8Cj4gK3wgYGNsb2dfZHVtcF9qc29uYCB8IGBSaW5nQnVmZmVyOjpkdW1wX2pz b25gIHwgcmluZ19idWZmZXIucnMgfAo+ICt8IGBjbHVzdGVybG9nX2luc2VydGAgfCBgQ2x1c3Rl ckxvZzo6aW5zZXJ0YCB8IGxpYi5ycyB8Cj4gK3wgYGNsdXN0ZXJsb2dfYWRkYCB8IGBDbHVzdGVy TG9nOjphZGRgIHwgbGliLnJzIHwKPiArfCBgY2x1c3RlcmxvZ19tZXJnZWAgfCBgQ2x1c3Rlckxv Zzo6bWVyZ2VgIHwgbGliLnJzIHwKPiArfCBgZGVkdXBfbG9va3VwYCB8IGBDbHVzdGVyTG9nOjpk ZWR1cF9sb29rdXBgIHwgbGliLnJzIHwKPiArCj4gKyMjIEtleSBEaWZmZXJlbmNlcyBmcm9tIEMK PiArCj4gKzEuICoqTm8gYG5vZGVfZGlnZXN0YCBpbiBEZWR1cEVudHJ5Kio6IEMgc3RvcmVzIGBu b2RlX2RpZ2VzdGAgYm90aCBhcyBIYXNoTWFwIGtleSBhbmQgaW4gdGhlIHN0cnVjdC4gUnVzdCBv bmx5IHVzZXMgaXQgYXMgdGhlIGtleSwgc2F2aW5nIDggYnl0ZXMgcGVyIGVudHJ5Lgo+ICsKPiAr Mi4gKipNdXRleCBncmFudWxhcml0eSoqOiBDIHVzZXMgYSBzaW5nbGUgZ2xvYmFsIG11dGV4LiBS dXN0IHVzZXMgc2VwYXJhdGUgQXJjPE11dGV4PD4+IGZvciBidWZmZXIgYW5kIGRlZHVwIHRhYmxl LCBhbGxvd2luZyBiZXR0ZXIgY29uY3VycmVuY3kuCj4gKwo+ICszLiAqKkNvZGUgc2l6ZSoqOiBS dXN0IGltcGxlbWVudGF0aW9uIGlzIH4yNCUgdGhlIHNpemUgb2YgQyAoNzQwIGxpbmVzIHZzIDMs MDAwKykgd2hpbGUgbWFpbnRhaW5pbmcgZXF1aXZhbGVudCBmdW5jdGlvbmFsaXR5Lgo+ICsKPiAr IyMgSW50ZWdyYXRpb24KPiArCj4gK1RoaXMgY3JhdGUgaXMgaW50ZWdyYXRlZCBpbnRvIGBwbXhj ZnMtc3RhdHVzYCB0byBwcm92aWRlIGNsdXN0ZXIgbG9nIGZ1bmN0aW9uYWxpdHkuIFRoZSBgLmNs dXN0ZXJsb2dgIEZVU0UgcGx1Z2luIHVzZXMgdGhpcyB0byBwcm92aWRlIEpTT04gbG9nIG91dHB1 dCBjb21wYXRpYmxlIHdpdGggdGhlIFByb3htb3ggd2ViIFVJLgo+ICsKPiArIyMgUmVmZXJlbmNl cwo+ICsKPiArIyMjIEMgSW1wbGVtZW50YXRpb24KPiArLSBgc3JjL3BteGNmcy9sb2dnZXIuY2Ag LyBgbG9nZ2VyLmhgIC0gQ2x1c3RlciBsb2cgaW1wbGVtZW50YXRpb24KPiArCj4gKyMjIyBSZWxh dGVkIENyYXRlcwo+ICstICoqcG14Y2ZzLXN0YXR1cyoqOiBJbnRlZ3JhdGVzIENsdXN0ZXJMb2cg Zm9yIHN0YXR1cyB0cmFja2luZwo+ICstICoqcG14Y2ZzKio6IEZVU0UgcGx1Z2luIGV4cG9zZXMg Y2x1c3RlciBsb2cgdmlhIGAuY2x1c3RlcmxvZ2AKPiBkaWZmIC0tZ2l0IGEvc3JjL3BteGNmcy1y cy9wbXhjZnMtbG9nZ2VyL3NyYy9jbHVzdGVyX2xvZy5ycyBiL3NyYy9wbXhjZnMtcnMvcG14Y2Zz LWxvZ2dlci9zcmMvY2x1c3Rlcl9sb2cucnMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAwLi4zZWI2YzY4Ywo+IC0tLSAvZGV2L251bGwKPiArKysgYi9zcmMvcG14Y2ZzLXJz L3BteGNmcy1sb2dnZXIvc3JjL2NsdXN0ZXJfbG9nLnJzCj4gQEAgLTAsMCArMSw1NTAgQEAKPiAr Ly8vIENsdXN0ZXIgTG9nIEltcGxlbWVudGF0aW9uCj4gKy8vLwo+ICsvLy8gVGhpcyBtb2R1bGUg aW1wbGVtZW50cyB0aGUgY2x1c3Rlci13aWRlIGxvZyBzeXN0ZW0gd2l0aCBkZWR1cGxpY2F0aW9u Cj4gKy8vLyBhbmQgbWVyZ2luZyBzdXBwb3J0LCBtYXRjaGluZyBDJ3MgY2x1c3RlcmxvZ190Lgo+ ICt1c2UgY3JhdGU6OmVudHJ5OjpMb2dFbnRyeTsKPiArdXNlIGNyYXRlOjpyaW5nX2J1ZmZlcjo6 e1JpbmdCdWZmZXIsIENMT0dfREVGQVVMVF9TSVpFfTsKPiArdXNlIGFueWhvdzo6UmVzdWx0Owo+ ICt1c2UgcGFya2luZ19sb3Q6Ok11dGV4Owo+ICt1c2Ugc3RkOjpjb2xsZWN0aW9uczo6e0JUcmVl TWFwLCBIYXNoTWFwfTsKPiArdXNlIHN0ZDo6c3luYzo6QXJjOwo+ICsKPiArLy8vIERlZHVwbGlj YXRpb24gZW50cnkgLSB0cmFja3MgdGhlIGxhdGVzdCBVSUQgYW5kIHRpbWUgZm9yIGVhY2ggbm9k ZQo+ICsvLy8KPiArLy8vIE5vdGU6IEMncyBgZGVkdXBfZW50cnlfdGAgKGxvZ2dlci5jOjcwLTc0 KSBpbmNsdWRlcyBub2RlX2RpZ2VzdCBmaWVsZCBiZWNhdXNlCj4gKy8vLyBHSGFzaFRhYmxlIHN0 b3JlcyB0aGUgc3RydWN0IHBvaW50ZXIgYm90aCBhcyBrZXkgYW5kIHZhbHVlLiBJbiBSdXN0LCB3 ZSB1c2UKPiArLy8vIEhhc2hNYXA8dTY0LCBEZWR1cEVudHJ5PiB3aGVyZSBub2RlX2RpZ2VzdCBp cyB0aGUga2V5LCBzbyB3ZSBkb24ndCBuZWVkIHRvCj4gKy8vLyBkdXBsaWNhdGUgaXQgaW4gdGhl IHZhbHVlLiBUaGlzIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGJ1dCBtb3JlIGVmZmljaWVu dC4KPiArI1tkZXJpdmUoRGVidWcsIENsb25lKV0KPiArcHViKGNyYXRlKSBzdHJ1Y3QgRGVkdXBF bnRyeSB7Cj4gKyAgICAvLy8gTGF0ZXN0IFVJRCBzZWVuIGZyb20gdGhpcyBub2RlCj4gKyAgICBw dWIgdWlkOiB1MzIsCj4gKyAgICAvLy8gTGF0ZXN0IHRpbWVzdGFtcCBzZWVuIGZyb20gdGhpcyBu b2RlCj4gKyAgICBwdWIgdGltZTogdTMyLAo+ICt9Cj4gKwo+ICsvLy8gQ2x1c3Rlci13aWRlIGxv ZyB3aXRoIGRlZHVwbGljYXRpb24gYW5kIG1lcmdpbmcgc3VwcG9ydAo+ICsvLy8gTWF0Y2hlcyBD J3MgYGNsdXN0ZXJsb2dfdGAKPiArcHViIHN0cnVjdCBDbHVzdGVyTG9nIHsKPiArICAgIC8vLyBS aW5nIGJ1ZmZlciBmb3IgbG9nIHN0b3JhZ2UKPiArICAgIHB1YihjcmF0ZSkgYnVmZmVyOiBBcmM8 TXV0ZXg8UmluZ0J1ZmZlcj4+LAo+ICsKPiArICAgIC8vLyBEZWR1cGxpY2F0aW9uIHRyYWNrZXIg KG5vZGVfZGlnZXN0IC0+IGxhdGVzdCBlbnRyeSBpbmZvKQo+ICsgICAgLy8vIE1hdGNoZXMgQydz IGRlZHVwIGhhc2ggdGFibGUKPiArICAgIHB1YihjcmF0ZSkgZGVkdXA6IEFyYzxNdXRleDxIYXNo TWFwPHU2NCwgRGVkdXBFbnRyeT4+PiwKPiArfQo+ICsKPiAraW1wbCBDbHVzdGVyTG9nIHsKPiAr ICAgIC8vLyBDcmVhdGUgYSBuZXcgY2x1c3RlciBsb2cgd2l0aCBkZWZhdWx0IHNpemUKPiArICAg IHB1YiBmbiBuZXcoKSAtPiBTZWxmIHsKPiArICAgICAgICBTZWxmOjp3aXRoX2NhcGFjaXR5KENM T0dfREVGQVVMVF9TSVpFKQo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBDcmVhdGUgYSBuZXcgY2x1 c3RlciBsb2cgd2l0aCBzcGVjaWZpZWQgY2FwYWNpdHkKPiArICAgIHB1YiBmbiB3aXRoX2NhcGFj aXR5KGNhcGFjaXR5OiB1c2l6ZSkgLT4gU2VsZiB7Cj4gKyAgICAgICAgU2VsZiB7Cj4gKyAgICAg ICAgICAgIGJ1ZmZlcjogQXJjOjpuZXcoTXV0ZXg6Om5ldyhSaW5nQnVmZmVyOjpuZXcoY2FwYWNp dHkpKSksCj4gKyAgICAgICAgICAgIGRlZHVwOiBBcmM6Om5ldyhNdXRleDo6bmV3KEhhc2hNYXA6 Om5ldygpKSksCj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBNYXRjaGVzIEMn cyBgY2x1c3RlcmxvZ19hZGRgIGZ1bmN0aW9uIChsb2dnZXIuYzo1ODgtNjE1KQo+ICsgICAgI1th bGxvdyhjbGlwcHk6OnRvb19tYW55X2FyZ3VtZW50cyldCj4gKyAgICBwdWIgZm4gYWRkKAo+ICsg ICAgICAgICZzZWxmLAo+ICsgICAgICAgIG5vZGU6ICZzdHIsCj4gKyAgICAgICAgaWRlbnQ6ICZz dHIsCj4gKyAgICAgICAgdGFnOiAmc3RyLAo+ICsgICAgICAgIHBpZDogdTMyLAo+ICsgICAgICAg IHByaW9yaXR5OiB1OCwKPiArICAgICAgICB0aW1lOiB1MzIsCj4gKyAgICAgICAgbWVzc2FnZTog JnN0ciwKPiArICAgICkgLT4gUmVzdWx0PCgpPiB7Cj4gKyAgICAgICAgbGV0IGVudHJ5ID0gTG9n RW50cnk6OnBhY2sobm9kZSwgaWRlbnQsIHRhZywgcGlkLCB0aW1lLCBwcmlvcml0eSwgbWVzc2Fn ZSk/Owo+ICsgICAgICAgIHNlbGYuaW5zZXJ0KCZlbnRyeSkKPiArICAgIH0KPiArCj4gKyAgICAv Ly8gSW5zZXJ0IGEgbG9nIGVudHJ5ICh3aXRoIGRlZHVwbGljYXRpb24pCj4gKyAgICAvLy8KPiAr ICAgIC8vLyBNYXRjaGVzIEMncyBgY2x1c3RlcmxvZ19pbnNlcnRgIGZ1bmN0aW9uIChsb2dnZXIu Yzo1NzMtNTg2KQo+ICsgICAgcHViIGZuIGluc2VydCgmc2VsZiwgZW50cnk6ICZMb2dFbnRyeSkg LT4gUmVzdWx0PCgpPiB7Cj4gKyAgICAgICAgbGV0IG11dCBkZWR1cCA9IHNlbGYuZGVkdXAubG9j aygpOwo+ICsKPiArICAgICAgICAvLyBDaGVjayBkZWR1cGxpY2F0aW9uCj4gKyAgICAgICAgaWYg c2VsZi5pc19ub3RfZHVwbGljYXRlKCZtdXQgZGVkdXAsIGVudHJ5KSB7Cj4gKyAgICAgICAgICAg IC8vIEVudHJ5IGlzIG5vdCBhIGR1cGxpY2F0ZSwgYWRkIGl0Cj4gKyAgICAgICAgICAgIGxldCBt dXQgYnVmZmVyID0gc2VsZi5idWZmZXIubG9jaygpOwo+ICsgICAgICAgICAgICBidWZmZXIuYWRk X2VudHJ5KGVudHJ5KT87Cj4gKyAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgdHJhY2lu Zzo6ZGVidWchKCJJZ25vcmluZyBkdXBsaWNhdGUgY2x1c3RlciBsb2cgZW50cnkiKTsKPiArICAg ICAgICB9Cj4gKwo+ICsgICAgICAgIE9rKCgpKQo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBDaGVj ayBpZiBlbnRyeSBpcyBhIGR1cGxpY2F0ZSAocmV0dXJucyB0cnVlIGlmIE5PVCBhIGR1cGxpY2F0 ZSkKPiArICAgIC8vLwo+ICsgICAgLy8vIE1hdGNoZXMgQydzIGBkZWR1cF9sb29rdXBgIGZ1bmN0 aW9uIChsb2dnZXIuYzozNjItMzg4KQo+ICsgICAgZm4gaXNfbm90X2R1cGxpY2F0ZSgmc2VsZiwg ZGVkdXA6ICZtdXQgSGFzaE1hcDx1NjQsIERlZHVwRW50cnk+LCBlbnRyeTogJkxvZ0VudHJ5KSAt PiBib29sIHsKPiArICAgICAgICBtYXRjaCBkZWR1cC5nZXRfbXV0KCZlbnRyeS5ub2RlX2RpZ2Vz dCkgewo+ICsgICAgICAgICAgICBOb25lID0+IHsKPiArICAgICAgICAgICAgICAgIGRlZHVwLmlu c2VydCgKPiArICAgICAgICAgICAgICAgICAgICBlbnRyeS5ub2RlX2RpZ2VzdCwKPiArICAgICAg ICAgICAgICAgICAgICBEZWR1cEVudHJ5IHsKPiArICAgICAgICAgICAgICAgICAgICAgICAgdGlt ZTogZW50cnkudGltZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgdWlkOiBlbnRyeS51aWQs Cj4gKyAgICAgICAgICAgICAgICAgICAgfSwKPiArICAgICAgICAgICAgICAgICk7Cj4gKyAgICAg ICAgICAgICAgICB0cnVlCj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgU29tZShkZCkg PT4gewo+ICsgICAgICAgICAgICAgICAgaWYgZW50cnkudGltZSA+IGRkLnRpbWUgfHwgKGVudHJ5 LnRpbWUgPT0gZGQudGltZSAmJiBlbnRyeS51aWQgPiBkZC51aWQpIHsKPiArICAgICAgICAgICAg ICAgICAgICBkZC50aW1lID0gZW50cnkudGltZTsKPiArICAgICAgICAgICAgICAgICAgICBkZC51 aWQgPSBlbnRyeS51aWQ7Cj4gKyAgICAgICAgICAgICAgICAgICAgdHJ1ZQo+ICsgICAgICAgICAg ICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgICAgICBmYWxzZQo+ICsgICAgICAgICAg ICAgICAgfQo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAg IHB1YiBmbiBnZXRfZW50cmllcygmc2VsZiwgbWF4OiB1c2l6ZSkgLT4gVmVjPExvZ0VudHJ5PiB7 Cj4gKyAgICAgICAgbGV0IGJ1ZmZlciA9IHNlbGYuYnVmZmVyLmxvY2soKTsKPiArICAgICAgICBi dWZmZXIuaXRlcigpLnRha2UobWF4KS5jbG9uZWQoKS5jb2xsZWN0KCkKPiArICAgIH0KPiArCj4g KyAgICAvLy8gQ2xlYXIgYWxsIGxvZyBlbnRyaWVzIChmb3IgdGVzdGluZykKPiArICAgIHB1YiBm biBjbGVhcigmc2VsZikgewo+ICsgICAgICAgIGxldCBtdXQgYnVmZmVyID0gc2VsZi5idWZmZXIu bG9jaygpOwo+ICsgICAgICAgIGxldCBjYXBhY2l0eSA9IGJ1ZmZlci5jYXBhY2l0eSgpOwo+ICsg ICAgICAgICpidWZmZXIgPSBSaW5nQnVmZmVyOjpuZXcoY2FwYWNpdHkpOwo+ICsgICAgICAgIGRy b3AoYnVmZmVyKTsKPiArCj4gKyAgICAgICAgc2VsZi5kZWR1cC5sb2NrKCkuY2xlYXIoKTsKPiAr ICAgIH0KPiArCj4gKyAgICAvLy8gU29ydCB0aGUgbG9nIGVudHJpZXMgYnkgdGltZQo+ICsgICAg Ly8vCj4gKyAgICAvLy8gTWF0Y2hlcyBDJ3MgYGNsb2dfc29ydGAgZnVuY3Rpb24gKGxvZ2dlci5j OjMyMS0zNTUpCj4gKyAgICBwdWIgZm4gc29ydCgmc2VsZikgLT4gUmVzdWx0PFJpbmdCdWZmZXI+ IHsKPiArICAgICAgICBsZXQgYnVmZmVyID0gc2VsZi5idWZmZXIubG9jaygpOwo+ICsgICAgICAg IGJ1ZmZlci5zb3J0KCkKPiArICAgIH0KPiArCj4gKyAgICAvLy8gTWVyZ2UgbG9ncyBmcm9tIG11 bHRpcGxlIG5vZGVzCj4gKyAgICAvLy8KPiArICAgIC8vLyBNYXRjaGVzIEMncyBgY2x1c3Rlcmxv Z19tZXJnZWAgZnVuY3Rpb24gKGxvZ2dlci5jOjQwNS01MTIpCj4gKyAgICBwdWIgZm4gbWVyZ2Uo JnNlbGYsIHJlbW90ZV9sb2dzOiBWZWM8UmluZ0J1ZmZlcj4sIGluY2x1ZGVfbG9jYWw6IGJvb2wp IC0+IFJlc3VsdDxSaW5nQnVmZmVyPiB7Cj4gKyAgICAgICAgbGV0IG11dCBzb3J0ZWRfZW50cmll czogQlRyZWVNYXA8KHUzMiwgdTY0LCB1MzIpLCBMb2dFbnRyeT4gPSBCVHJlZU1hcDo6bmV3KCk7 Cj4gKyAgICAgICAgbGV0IG11dCBtZXJnZV9kZWR1cDogSGFzaE1hcDx1NjQsIERlZHVwRW50cnk+ ID0gSGFzaE1hcDo6bmV3KCk7Cj4gKwo+ICsgICAgICAgIC8vIENhbGN1bGF0ZSBtYXhpbXVtIGNh cGFjaXR5Cj4gKyAgICAgICAgbGV0IG1heF9zaXplID0gaWYgaW5jbHVkZV9sb2NhbCB7Cj4gKyAg ICAgICAgICAgIGxldCBsb2NhbCA9IHNlbGYuYnVmZmVyLmxvY2soKTsKPiArICAgICAgICAgICAg bGV0IGxvY2FsX2NhcCA9IGxvY2FsLmNhcGFjaXR5KCk7Cj4gKyAgICAgICAgICAgIGRyb3AobG9j YWwpOwo+ICsKPiArICAgICAgICAgICAgc3RkOjppdGVyOjpvbmNlKGxvY2FsX2NhcCkKPiArICAg ICAgICAgICAgICAgIC5jaGFpbihyZW1vdGVfbG9ncy5pdGVyKCkubWFwKHxifCBiLmNhcGFjaXR5 KCkpKQo+ICsgICAgICAgICAgICAgICAgLm1heCgpCj4gKyAgICAgICAgICAgICAgICAudW53cmFw X29yKENMT0dfREVGQVVMVF9TSVpFKQo+ICsgICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAg IHJlbW90ZV9sb2dzCj4gKyAgICAgICAgICAgICAgICAuaXRlcigpCj4gKyAgICAgICAgICAgICAg ICAubWFwKHxifCBiLmNhcGFjaXR5KCkpCj4gKyAgICAgICAgICAgICAgICAubWF4KCkKPiArICAg ICAgICAgICAgICAgIC51bndyYXBfb3IoQ0xPR19ERUZBVUxUX1NJWkUpCj4gKyAgICAgICAgfTsK PiArCj4gKyAgICAgICAgLy8gQWRkIGxvY2FsIGVudHJpZXMgaWYgcmVxdWVzdGVkCj4gKyAgICAg ICAgaWYgaW5jbHVkZV9sb2NhbCB7Cj4gKyAgICAgICAgICAgIGxldCBidWZmZXIgPSBzZWxmLmJ1 ZmZlci5sb2NrKCk7Cj4gKyAgICAgICAgICAgIGZvciBlbnRyeSBpbiBidWZmZXIuaXRlcigpIHsK PiArICAgICAgICAgICAgICAgIGxldCBrZXkgPSAoZW50cnkudGltZSwgZW50cnkubm9kZV9kaWdl c3QsIGVudHJ5LnVpZCk7Cj4gKyAgICAgICAgICAgICAgICBzb3J0ZWRfZW50cmllcy5pbnNlcnQo a2V5LCBlbnRyeS5jbG9uZSgpKTsKCkJUcmVlTWFwOjppbnNlcnQgb3ZlcndyaXRlcyBvbiBkdXBs aWNhdGUuIFBsZWFzZSByZS1jaGVjayB3aGV0aGVyIHdlCndhbnQgdGhhdDsgaWYgd2Ugd2FudCB0 byBrZWVwLWZpcnN0LCB1c2UKZW50cnkoa2V5KS5vcl9pbnNlcnQoLi4uKSBhbmQgb25seSB1cGRh dGUgbWVyZ2VfZGVkdXAgd2hlbiBuZXdseQppbnNlcnRlZC4KCj4gKyAgICAgICAgICAgICAgICBz ZWxmLmlzX25vdF9kdXBsaWNhdGUoJm11dCBtZXJnZV9kZWR1cCwgZW50cnkpOwo+ICsgICAgICAg ICAgICB9Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICAvLyBBZGQgcmVtb3RlIGVudHJpZXMK PiArICAgICAgICBmb3IgcmVtb3RlX2J1ZmZlciBpbiAmcmVtb3RlX2xvZ3Mgewo+ICsgICAgICAg ICAgICBmb3IgZW50cnkgaW4gcmVtb3RlX2J1ZmZlci5pdGVyKCkgewo+ICsgICAgICAgICAgICAg ICAgbGV0IGtleSA9IChlbnRyeS50aW1lLCBlbnRyeS5ub2RlX2RpZ2VzdCwgZW50cnkudWlkKTsK PiArICAgICAgICAgICAgICAgIHNvcnRlZF9lbnRyaWVzLmluc2VydChrZXksIGVudHJ5LmNsb25l KCkpOwo+ICsgICAgICAgICAgICAgICAgc2VsZi5pc19ub3RfZHVwbGljYXRlKCZtdXQgbWVyZ2Vf ZGVkdXAsIGVudHJ5KTsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArCj4gKyAgICAg ICAgbGV0IG11dCByZXN1bHQgPSBSaW5nQnVmZmVyOjpuZXcobWF4X3NpemUpOwo+ICsKPiArICAg ICAgICAvLyBCVHJlZU1hcCBpdGVyYXRlcyBpbiBrZXkgb3JkZXIsIGVudHJpZXMgYXJlIGFscmVh ZHkgc29ydGVkIGJ5ICh0aW1lLCBub2RlX2RpZ2VzdCwgdWlkKQo+ICsgICAgICAgIGZvciAoX2tl eSwgZW50cnkpIGluIHNvcnRlZF9lbnRyaWVzLml0ZXIoKS5yZXYoKSB7CgpDIGl0ZXJhdGVzIG9s ZGVzdCAtPiBuZXdlc3QgYW5kIGNsb2dfY29weSgpIG1ha2VzIGVhY2ggZW50cnkgdGhlIG5ldwpo ZWFkLCBzbyByZXN1bHQgaXMgbmV3ZXN0IGZpcnN0LiBXaXRoIC5yZXYoKSBhbmQgcHVzaF9mcm9u dCB3ZSBsaWtlbHkKaW52ZXJ0IGl0LiBNYXliZSBkcm9wIC5yZXYoKT8gUGxlYXNlIHJlLWNoZWNr Cgo+ICsgICAgICAgICAgICBpZiByZXN1bHQuaXNfbmVhcl9mdWxsKCkgewo+ICsgICAgICAgICAg ICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgcmVzdWx0LmFkZF9l bnRyeShlbnRyeSk/Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgKnNlbGYuZGVkdXAubG9j aygpID0gbWVyZ2VfZGVkdXA7CgpjbHVzdGVybG9nX21lcmdlKCkgaW4gQyB1cGRhdGVzIGJvdGgg Y2wtPmRlZHVwIGFuZCBjbC0+YmFzZSB1bmRlciB0aGUKc2FtZSBtdXRleC4gSGVyZSB3ZSB1cGRh dGUgb25seSBkZWR1cCBidXQgcmV0dXJuIGEgUmluZ0J1ZmZlciB3aGljaAp0aGVuIHJlcXVpcmVz IGEgc2VwYXJhdGUgdXBkYXRlX2J1ZmZlcigpIGNhbGwuIFNob3VsZG4ndCB0aGlzIGJlIGFuCmF0 b21pYyBvcGVyYXRpb24/IEFsc28sIHdlIGN1cnJlbnRseSBoYXZlIHR3byBtdXRleGVzIChkZWR1 cCBhbmQKYnVmZmVyKSwgd2hpY2ggaW5jcmVhc2VzIGRlYWRsb2NrIHJpc2suIENvdWxkbnQgd2Ug cHV0IGJ1ZmZlciBhbmQKZGVkdXAgYmVoaW5kIG9uZSBtdXRleCBhbmQgbWFrZSBtZXJnZSgpIHVw ZGF0ZSBib3RoIGJ1ZmZlcitkZWR1cAphdG9taWNhbGx5IGluc2lkZSB0aGUgc2FtZSBsb2NrPwoK PiArCj4gKyAgICAgICAgT2socmVzdWx0KQo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBFeHBvcnQg bG9nIHRvIEpTT04gZm9ybWF0Cj4gKyAgICAvLy8KPiArICAgIC8vLyBNYXRjaGVzIEMncyBgY2xv Z19kdW1wX2pzb25gIGZ1bmN0aW9uIChsb2dnZXIuYzoxMzktMTk5KQo+ICsgICAgcHViIGZuIGR1 bXBfanNvbigmc2VsZiwgaWRlbnRfZmlsdGVyOiBPcHRpb248JnN0cj4sIG1heF9lbnRyaWVzOiB1 c2l6ZSkgLT4gU3RyaW5nIHsKPiArICAgICAgICBsZXQgYnVmZmVyID0gc2VsZi5idWZmZXIubG9j aygpOwo+ICsgICAgICAgIGJ1ZmZlci5kdW1wX2pzb24oaWRlbnRfZmlsdGVyLCBtYXhfZW50cmll cykKPiArICAgIH0KPiArCj4gKyAgICAvLy8gRXhwb3J0IGxvZyB0byBKU09OIGZvcm1hdCB3aXRo IHNvcnRlZCBlbnRyaWVzCj4gKyAgICBwdWIgZm4gZHVtcF9qc29uX3NvcnRlZCgKPiArICAgICAg ICAmc2VsZiwKPiArICAgICAgICBpZGVudF9maWx0ZXI6IE9wdGlvbjwmc3RyPiwKPiArICAgICAg ICBtYXhfZW50cmllczogdXNpemUsCj4gKyAgICApIC0+IFJlc3VsdDxTdHJpbmc+IHsKPiArICAg ICAgICBsZXQgc29ydGVkID0gc2VsZi5zb3J0KCk/Owo+ICsgICAgICAgIE9rKHNvcnRlZC5kdW1w X2pzb24oaWRlbnRfZmlsdGVyLCBtYXhfZW50cmllcykpCj4gKyAgICB9Cj4gKwo+ICsgICAgLy8v IE1hdGNoZXMgQydzIGBjbHVzdGVybG9nX2dldF9zdGF0ZWAgZnVuY3Rpb24gKGxvZ2dlci5jOjU1 My01NzEpCj4gKyAgICAvLy8KPiArICAgIC8vLyBSZXR1cm5zIGJpbmFyeS1zZXJpYWxpemVkIGNs b2dfYmFzZV90IHN0cnVjdHVyZSBmb3IgbmV0d29yayB0cmFuc21pc3Npb24uCj4gKyAgICAvLy8g VGhpcyBmb3JtYXQgaXMgY29tcGF0aWJsZSB3aXRoIEMgbm9kZXMgZm9yIG1peGVkLWNsdXN0ZXIg b3BlcmF0aW9uLgo+ICsgICAgcHViIGZuIGdldF9zdGF0ZSgmc2VsZikgLT4gUmVzdWx0PFZlYzx1 OD4+IHsKPiArICAgICAgICBsZXQgc29ydGVkID0gc2VsZi5zb3J0KCk/Owo+ICsgICAgICAgIE9r KHNvcnRlZC5zZXJpYWxpemVfYmluYXJ5KCkpCj4gKyAgICB9Cj4gKwo+ICsgICAgcHViIGZuIGRl c2VyaWFsaXplX3N0YXRlKGRhdGE6ICZbdThdKSAtPiBSZXN1bHQ8UmluZ0J1ZmZlcj4gewo+ICsg ICAgICAgIFJpbmdCdWZmZXI6OmRlc2VyaWFsaXplX2JpbmFyeShkYXRhKQo+ICsgICAgfQo+ICsK PiArICAgIC8vLyBSZXBsYWNlIHRoZSBlbnRpcmUgYnVmZmVyIGFmdGVyIG1lcmdpbmcgbG9ncyBm cm9tIG11bHRpcGxlIG5vZGVzCj4gKyAgICBwdWIgZm4gdXBkYXRlX2J1ZmZlcigmc2VsZiwgbmV3 X2J1ZmZlcjogUmluZ0J1ZmZlcikgewo+ICsgICAgICAgICpzZWxmLmJ1ZmZlci5sb2NrKCkgPSBu ZXdfYnVmZmVyOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICtpbXBsIERlZmF1bHQgZm9yIENsdXN0ZXJM b2cgewo+ICsgICAgZm4gZGVmYXVsdCgpIC0+IFNlbGYgewo+ICsgICAgICAgIFNlbGY6Om5ldygp Cj4gKyAgICB9Cj4gK30KPiArCj4gKyNbY2ZnKHRlc3QpXQo+ICttb2QgdGVzdHMgewo+ICsgICAg dXNlIHN1cGVyOjoqOwo+ICsKPiArICAgICNbdGVzdF0KPiArICAgIGZuIHRlc3RfY2x1c3Rlcl9s b2dfY3JlYXRpb24oKSB7Cj4gKyAgICAgICAgbGV0IGxvZyA9IENsdXN0ZXJMb2c6Om5ldygpOwo+ ICsgICAgICAgIGFzc2VydCEobG9nLmJ1ZmZlci5sb2NrKCkuaXNfZW1wdHkoKSk7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgI1t0ZXN0XQo+ICsgICAgZm4gdGVzdF9hZGRfZW50cnkoKSB7Cj4gKyAgICAg ICAgbGV0IGxvZyA9IENsdXN0ZXJMb2c6Om5ldygpOwo+ICsKPiArICAgICAgICBsZXQgcmVzdWx0 ID0gbG9nLmFkZCgKPiArICAgICAgICAgICAgIm5vZGUxIiwKPiArICAgICAgICAgICAgInJvb3Qi LAo+ICsgICAgICAgICAgICAiY2x1c3RlciIsCj4gKyAgICAgICAgICAgIDEyMzQ1LAo+ICsgICAg ICAgICAgICA2LCAvLyBJbmZvIHByaW9yaXR5Cj4gKyAgICAgICAgICAgIDEyMzQ1Njc4OTAsCj4g KyAgICAgICAgICAgICJUZXN0IG1lc3NhZ2UiLAo+ICsgICAgICAgICk7Cj4gKwo+ICsgICAgICAg IGFzc2VydCEocmVzdWx0LmlzX29rKCkpOwo+ICsgICAgICAgIGFzc2VydCEoIWxvZy5idWZmZXIu bG9jaygpLmlzX2VtcHR5KCkpOwo+ICsgICAgfQo+ICsKPiArICAgICNbdGVzdF0KPiArICAgIGZu IHRlc3RfZGVkdXBsaWNhdGlvbigpIHsKPiArICAgICAgICBsZXQgbG9nID0gQ2x1c3RlckxvZzo6 bmV3KCk7Cj4gKwo+ICsgICAgICAgIC8vIEFkZCBzYW1lIGVudHJ5IHR3aWNlIChidXQgd2l0aCBk aWZmZXJlbnQgVUlEcyBzaW5jZSBlYWNoIGFkZCBjcmVhdGVzIGEgbmV3IGVudHJ5KQo+ICsgICAg ICAgIGxldCBfID0gbG9nLmFkZCgibm9kZTEiLCAicm9vdCIsICJjbHVzdGVyIiwgMTIzLCA2LCAx MDAwLCAiTWVzc2FnZSAxIik7Cj4gKyAgICAgICAgbGV0IF8gPSBsb2cuYWRkKCJub2RlMSIsICJy b290IiwgImNsdXN0ZXIiLCAxMjMsIDYsIDEwMDAsICJNZXNzYWdlIDEiKTsKPiArCj4gKyAgICAg ICAgLy8gQm90aCBlbnRyaWVzIGFyZSBhZGRlZCBiZWNhdXNlIHRoZXkgaGF2ZSBkaWZmZXJlbnQg VUlEcwo+ICsgICAgICAgIC8vIERlZHVwbGljYXRpb24gdHJhY2tzIHRoZSBsYXRlc3QgKHRpbWUs IFVJRCkgcGVyIG5vZGUsIG5vdCBjb250ZW50Cj4gKyAgICAgICAgbGV0IGJ1ZmZlciA9IGxvZy5i dWZmZXIubG9jaygpOwo+ICsgICAgICAgIGFzc2VydF9lcSEoYnVmZmVyLmxlbigpLCAyKTsKPiAr ICAgIH0KPiArCj4gKyAgICAjW3Rlc3RdCj4gKyAgICBmbiB0ZXN0X25ld2VyX2VudHJ5X3JlcGxh Y2VzKCkgewo+ICsgICAgICAgIGxldCBsb2cgPSBDbHVzdGVyTG9nOjpuZXcoKTsKPiArCj4gKyAg ICAgICAgLy8gQWRkIG9sZGVyIGVudHJ5Cj4gKyAgICAgICAgbGV0IF8gPSBsb2cuYWRkKCJub2Rl MSIsICJyb290IiwgImNsdXN0ZXIiLCAxMjMsIDYsIDEwMDAsICJPbGQgbWVzc2FnZSIpOwo+ICsK PiArICAgICAgICAvLyBBZGQgbmV3ZXIgZW50cnkgZnJvbSBzYW1lIG5vZGUKPiArICAgICAgICBs ZXQgXyA9IGxvZy5hZGQoIm5vZGUxIiwgInJvb3QiLCAiY2x1c3RlciIsIDEyMywgNiwgMTAwMSwg Ik5ldyBtZXNzYWdlIik7Cj4gKwo+ICsgICAgICAgIC8vIFNob3VsZCBoYXZlIGJvdGggZW50cmll cyAobmV3ZXIgZG9lc24ndCByZW1vdmUgb2xkZXIsIGp1c3QgdXBkYXRlcyBkZWR1cCB0cmFja2Vy KQo+ICsgICAgICAgIGxldCBidWZmZXIgPSBsb2cuYnVmZmVyLmxvY2soKTsKPiArICAgICAgICBh c3NlcnRfZXEhKGJ1ZmZlci5sZW4oKSwgMik7Cj4gKyAgICB9Cj4gKwo+ICsgICAgI1t0ZXN0XQo+ ICsgICAgZm4gdGVzdF9qc29uX2V4cG9ydCgpIHsKPiArICAgICAgICBsZXQgbG9nID0gQ2x1c3Rl ckxvZzo6bmV3KCk7Cj4gKwo+ICsgICAgICAgIGxldCBfID0gbG9nLmFkZCgKPiArICAgICAgICAg ICAgIm5vZGUxIiwKPiArICAgICAgICAgICAgInJvb3QiLAo+ICsgICAgICAgICAgICAiY2x1c3Rl ciIsCj4gKyAgICAgICAgICAgIDEyMywKPiArICAgICAgICAgICAgNiwKPiArICAgICAgICAgICAg MTIzNDU2Nzg5MCwKPiArICAgICAgICAgICAgIlRlc3QgbWVzc2FnZSIsCj4gKyAgICAgICAgKTsK PiArCj4gKyAgICAgICAgbGV0IGpzb24gPSBsb2cuZHVtcF9qc29uKE5vbmUsIDUwKTsKPiArCj4g KyAgICAgICAgLy8gU2hvdWxkIGJlIHZhbGlkIEpTT04KPiArICAgICAgICBhc3NlcnQhKHNlcmRl X2pzb246OmZyb21fc3RyOjo8c2VyZGVfanNvbjo6VmFsdWU+KCZqc29uKS5pc19vaygpKTsKPiAr Cj4gKyAgICAgICAgLy8gU2hvdWxkIGNvbnRhaW4gImRhdGEiIGZpZWxkCj4gKyAgICAgICAgbGV0 IHZhbHVlOiBzZXJkZV9qc29uOjpWYWx1ZSA9IHNlcmRlX2pzb246OmZyb21fc3RyKCZqc29uKS51 bndyYXAoKTsKPiArICAgICAgICBhc3NlcnQhKHZhbHVlLmdldCgiZGF0YSIpLmlzX3NvbWUoKSk7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgI1t0ZXN0XQo+ICsgICAgZm4gdGVzdF9tZXJnZV9sb2dzKCkg ewo+ICsgICAgICAgIGxldCBsb2cxID0gQ2x1c3RlckxvZzo6bmV3KCk7Cj4gKyAgICAgICAgbGV0 IGxvZzIgPSBDbHVzdGVyTG9nOjpuZXcoKTsKPiArCj4gKyAgICAgICAgLy8gQWRkIGVudHJpZXMg dG8gZmlyc3QgbG9nCj4gKyAgICAgICAgbGV0IF8gPSBsb2cxLmFkZCgKPiArICAgICAgICAgICAg Im5vZGUxIiwKPiArICAgICAgICAgICAgInJvb3QiLAo+ICsgICAgICAgICAgICAiY2x1c3RlciIs Cj4gKyAgICAgICAgICAgIDEyMywKPiArICAgICAgICAgICAgNiwKPiArICAgICAgICAgICAgMTAw MCwKPiArICAgICAgICAgICAgIk1lc3NhZ2UgZnJvbSBub2RlMSIsCj4gKyAgICAgICAgKTsKPiAr Cj4gKyAgICAgICAgLy8gQWRkIGVudHJpZXMgdG8gc2Vjb25kIGxvZwo+ICsgICAgICAgIGxldCBf ID0gbG9nMi5hZGQoCj4gKyAgICAgICAgICAgICJub2RlMiIsCj4gKyAgICAgICAgICAgICJyb290 IiwKPiArICAgICAgICAgICAgImNsdXN0ZXIiLAo+ICsgICAgICAgICAgICA0NTYsCj4gKyAgICAg ICAgICAgIDYsCj4gKyAgICAgICAgICAgIDEwMDEsCj4gKyAgICAgICAgICAgICJNZXNzYWdlIGZy b20gbm9kZTIiLAo+ICsgICAgICAgICk7Cj4gKwo+ICsgICAgICAgIC8vIEdldCBsb2cyJ3MgYnVm ZmVyIGZvciBtZXJnaW5nCj4gKyAgICAgICAgbGV0IGxvZzJfYnVmZmVyID0gbG9nMi5idWZmZXIu bG9jaygpLmNsb25lKCk7Cj4gKwo+ICsgICAgICAgIC8vIE1lcmdlIGludG8gbG9nMQo+ICsgICAg ICAgIGxldCBtZXJnZWQgPSBsb2cxLm1lcmdlKHZlYyFbbG9nMl9idWZmZXJdLCB0cnVlKS51bndy YXAoKTsKPiArCj4gKyAgICAgICAgLy8gU2hvdWxkIGNvbnRhaW4gZW50cmllcyBmcm9tIGJvdGgg bG9ncwo+ICsgICAgICAgIGFzc2VydCEobWVyZ2VkLmxlbigpID49IDIpOwo+ICsgICAgfQo+ICsK PiArICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICsgICAgLy8gSElHSCBQUklPUklUWSBURVNUUyAt IE1lcmdlIEVkZ2UgQ2FzZXMKPiArICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICsKPiArICAgICNb dGVzdF0KPiArICAgIGZuIHRlc3RfbWVyZ2VfZW1wdHlfbG9ncygpIHsKPiArICAgICAgICBsZXQg bG9nID0gQ2x1c3RlckxvZzo6bmV3KCk7Cj4gKwo+ICsgICAgICAgIC8vIEFkZCBzb21lIGVudHJp ZXMgdG8gbG9jYWwgbG9nCj4gKyAgICAgICAgbGV0IF8gPSBsb2cuYWRkKCJub2RlMSIsICJyb290 IiwgImNsdXN0ZXIiLCAxMjMsIDYsIDEwMDAsICJMb2NhbCBlbnRyeSIpOwo+ICsKPiArICAgICAg ICAvLyBNZXJnZSB3aXRoIGVtcHR5IHJlbW90ZSBsb2dzCj4gKyAgICAgICAgbGV0IG1lcmdlZCA9 IGxvZy5tZXJnZSh2ZWMhW10sIHRydWUpLnVud3JhcCgpOwo+ICsKPiArICAgICAgICAvLyBTaG91 bGQgaGF2ZSAxIGVudHJ5IChmcm9tIGxvY2FsIGxvZykKPiArICAgICAgICBhc3NlcnRfZXEhKG1l cmdlZC5sZW4oKSwgMSk7Cj4gKyAgICAgICAgbGV0IGVudHJ5ID0gbWVyZ2VkLml0ZXIoKS5uZXh0 KCkudW53cmFwKCk7Cj4gKyAgICAgICAgYXNzZXJ0X2VxIShlbnRyeS5ub2RlLCAibm9kZTEiKTsK PiArICAgIH0KPiArCj4gKyAgICAjW3Rlc3RdCj4gKyAgICBmbiB0ZXN0X21lcmdlX3NpbmdsZV9u b2RlX29ubHkoKSB7Cj4gKyAgICAgICAgbGV0IGxvZyA9IENsdXN0ZXJMb2c6Om5ldygpOwo+ICsK PiArICAgICAgICAvLyBBZGQgZW50cmllcyBvbmx5IGZyb20gc2luZ2xlIG5vZGUKPiArICAgICAg ICBsZXQgXyA9IGxvZy5hZGQoIm5vZGUxIiwgInJvb3QiLCAiY2x1c3RlciIsIDEyMywgNiwgMTAw MCwgIkVudHJ5IDEiKTsKPiArICAgICAgICBsZXQgXyA9IGxvZy5hZGQoIm5vZGUxIiwgInJvb3Qi LCAiY2x1c3RlciIsIDEyNCwgNiwgMTAwMSwgIkVudHJ5IDIiKTsKPiArICAgICAgICBsZXQgXyA9 IGxvZy5hZGQoIm5vZGUxIiwgInJvb3QiLCAiY2x1c3RlciIsIDEyNSwgNiwgMTAwMiwgIkVudHJ5 IDMiKTsKPiArCj4gKyAgICAgICAgLy8gTWVyZ2Ugd2l0aCBubyByZW1vdGUgbG9ncyAoanVzdCBz b3J0IGxvY2FsKQo+ICsgICAgICAgIGxldCBtZXJnZWQgPSBsb2cubWVyZ2UodmVjIVtdLCB0cnVl KS51bndyYXAoKTsKPiArCj4gKyAgICAgICAgLy8gU2hvdWxkIGhhdmUgYWxsIDMgZW50cmllcwo+ ICsgICAgICAgIGFzc2VydF9lcSEobWVyZ2VkLmxlbigpLCAzKTsKPiArCj4gKyAgICAgICAgLy8g RW50cmllcyBzaG91bGQgYmUgc29ydGVkIGJ5IHRpbWUgKGJ1ZmZlciBzdG9yZXMgbmV3ZXN0IGZp cnN0IGFmdGVyIHJldmVyc2luZyBkdXJpbmcgYWRkKQo+ICsgICAgICAgIC8vIE1lcmdlIHJldmVy c2VzIHRoZSBCVHJlZU1hcCBpdGVyYXRpb24sIHNvIG5ld2VzdCBlbnRyaWVzIGFyZSBhZGRlZCBm aXJzdAo+ICsgICAgICAgIGxldCB0aW1lczogVmVjPHUzMj4gPSBtZXJnZWQuaXRlcigpLm1hcCh8 ZXwgZS50aW1lKS5jb2xsZWN0KCk7Cj4gKyAgICAgICAgbGV0IG11dCBleHBlY3RlZCA9IHZlYyFb MTAwMiwgMTAwMSwgMTAwMF07Cj4gKyAgICAgICAgZXhwZWN0ZWQuc29ydCgpOwo+ICsgICAgICAg IGV4cGVjdGVkLnJldmVyc2UoKTsgLy8gTmV3ZXN0IGZpcnN0Cj4gKwo+ICsgICAgICAgIGxldCBt dXQgYWN0dWFsID0gdGltZXMuY2xvbmUoKTsKPiArICAgICAgICBhY3R1YWwuc29ydCgpOwo+ICsg ICAgICAgIGFjdHVhbC5yZXZlcnNlKCk7Cj4gKwo+ICsgICAgICAgIGFzc2VydF9lcSEoYWN0dWFs LCBleHBlY3RlZCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgI1t0ZXN0XQo+ICsgICAgZm4gdGVzdF9t ZXJnZV9hbGxfZHVwbGljYXRlcygpIHsKPiArICAgICAgICBsZXQgbG9nMSA9IENsdXN0ZXJMb2c6 Om5ldygpOwo+ICsgICAgICAgIGxldCBsb2cyID0gQ2x1c3RlckxvZzo6bmV3KCk7Cj4gKwo+ICsg ICAgICAgIC8vIEFkZCBzYW1lIGVudHJpZXMgdG8gYm90aCBsb2dzIChzYW1lIG5vZGUsIHRpbWUs IGJ1dCBkaWZmZXJlbnQgVUlEcykKPiArICAgICAgICBsZXQgXyA9IGxvZzEuYWRkKCJub2RlMSIs ICJyb290IiwgImNsdXN0ZXIiLCAxMjMsIDYsIDEwMDAsICJFbnRyeSAxIik7Cj4gKyAgICAgICAg bGV0IF8gPSBsb2cxLmFkZCgibm9kZTEiLCAicm9vdCIsICJjbHVzdGVyIiwgMTI0LCA2LCAxMDAx LCAiRW50cnkgMiIpOwo+ICsKPiArICAgICAgICBsZXQgXyA9IGxvZzIuYWRkKCJub2RlMSIsICJy b290IiwgImNsdXN0ZXIiLCAxMjUsIDYsIDEwMDAsICJFbnRyeSAxIik7Cj4gKyAgICAgICAgbGV0 IF8gPSBsb2cyLmFkZCgibm9kZTEiLCAicm9vdCIsICJjbHVzdGVyIiwgMTI2LCA2LCAxMDAxLCAi RW50cnkgMiIpOwo+ICsKPiArICAgICAgICBsZXQgbG9nMl9idWZmZXIgPSBsb2cyLmJ1ZmZlci5s b2NrKCkuY2xvbmUoKTsKPiArCj4gKyAgICAgICAgLy8gTWVyZ2UgLSBzaG91bGQgaGFuZGxlIGVu dHJpZXMgZnJvbSBzYW1lIG5vZGUgYXQgc2FtZSB0aW1lcwo+ICsgICAgICAgIGxldCBtZXJnZWQg PSBsb2cxLm1lcmdlKHZlYyFbbG9nMl9idWZmZXJdLCB0cnVlKS51bndyYXAoKTsKPiArCj4gKyAg ICAgICAgLy8gU2hvdWxkIGhhdmUgNCBlbnRyaWVzIChhbGwgYXJlIHVuaXF1ZSBieSBVSUQgZGVz cGl0ZSBzYW1lIHRpbWUvbm9kZSkKPiArICAgICAgICBhc3NlcnRfZXEhKG1lcmdlZC5sZW4oKSwg NCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgI1t0ZXN0XQo+ICsgICAgZm4gdGVzdF9tZXJnZV9leGNl ZWRpbmdfY2FwYWNpdHkoKSB7Cj4gKyAgICAgICAgLy8gQ3JlYXRlIHNtYWxsIGJ1ZmZlciB0byB0 ZXN0IGNhcGFjaXR5IGVuZm9yY2VtZW50Cj4gKyAgICAgICAgbGV0IGxvZyA9IENsdXN0ZXJMb2c6 OndpdGhfY2FwYWNpdHkoNTBfMDAwKTsgLy8gU21hbGwgYnVmZmVyCj4gKwo+ICsgICAgICAgIC8v IEFkZCBtYW55IGVudHJpZXMgdG8gZmlsbCBiZXlvbmQgY2FwYWNpdHkKPiArICAgICAgICBmb3Ig aSBpbiAwLi4xMDAgewo+ICsgICAgICAgICAgICBsZXQgXyA9IGxvZy5hZGQoCj4gKyAgICAgICAg ICAgICAgICAibm9kZTEiLAo+ICsgICAgICAgICAgICAgICAgInJvb3QiLAo+ICsgICAgICAgICAg ICAgICAgImNsdXN0ZXIiLAo+ICsgICAgICAgICAgICAgICAgMTAwICsgaSwKPiArICAgICAgICAg ICAgICAgIDYsCj4gKyAgICAgICAgICAgICAgICAxMDAwICsgaSwKPiArICAgICAgICAgICAgICAg ICZmb3JtYXQhKCJFbnRyeSB7fSIsIGkpLAo+ICsgICAgICAgICAgICApOwo+ICsgICAgICAgIH0K PiArCj4gKyAgICAgICAgLy8gQ3JlYXRlIHJlbW90ZSBsb2cgd2l0aCBtYW55IGVudHJpZXMKPiAr ICAgICAgICBsZXQgcmVtb3RlID0gQ2x1c3RlckxvZzo6d2l0aF9jYXBhY2l0eSg1MF8wMDApOwo+ ICsgICAgICAgIGZvciBpIGluIDAuLjEwMCB7Cj4gKyAgICAgICAgICAgIGxldCBfID0gcmVtb3Rl LmFkZCgKPiArICAgICAgICAgICAgICAgICJub2RlMiIsCj4gKyAgICAgICAgICAgICAgICAicm9v dCIsCj4gKyAgICAgICAgICAgICAgICAiY2x1c3RlciIsCj4gKyAgICAgICAgICAgICAgICAyMDAg KyBpLAo+ICsgICAgICAgICAgICAgICAgNiwKPiArICAgICAgICAgICAgICAgIDEwMDAgKyBpLAo+ ICsgICAgICAgICAgICAgICAgJmZvcm1hdCEoIlJlbW90ZSB7fSIsIGkpLAo+ICsgICAgICAgICAg ICApOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgbGV0IHJlbW90ZV9idWZmZXIgPSByZW1v dGUuYnVmZmVyLmxvY2soKS5jbG9uZSgpOwo+ICsKPiArICAgICAgICAvLyBNZXJnZSAtIHNob3Vs ZCBzdG9wIHdoZW4gYnVmZmVyIGlzIG5lYXIgZnVsbAo+ICsgICAgICAgIGxldCBtZXJnZWQgPSBs b2cubWVyZ2UodmVjIVtyZW1vdGVfYnVmZmVyXSwgdHJ1ZSkudW53cmFwKCk7Cj4gKwo+ICsgICAg ICAgIC8vIEJ1ZmZlciBzaG91bGQgYmUgbGltaXRlZCBieSBjYXBhY2l0eSwgbm90IG5lY2Vzc2Fy aWx5IDwgMjAwCj4gKyAgICAgICAgLy8gVGhlIGFjdHVhbCBsaW1pdCBkZXBlbmRzIG9uIGVudHJ5 IHNpemVzIGFuZCBjYXBhY2l0eQo+ICsgICAgICAgIC8vIEp1c3QgdmVyaWZ5IHdlIGdvdCBzb21l IHJlYXNvbmFibGUgbnVtYmVyIG9mIGVudHJpZXMKPiArICAgICAgICBhc3NlcnQhKCFtZXJnZWQu aXNfZW1wdHkoKSwgIlNob3VsZCBoYXZlIHNvbWUgZW50cmllcyIpOwo+ICsgICAgICAgIGFzc2Vy dCEoCj4gKyAgICAgICAgICAgIG1lcmdlZC5sZW4oKSA8PSAyMDAsCj4gKyAgICAgICAgICAgICJT aG91bGQgbm90IGV4Y2VlZCB0b3RhbCBhdmFpbGFibGUgZW50cmllcyIKPiArICAgICAgICApOwo+ ICsgICAgfQo+ICsKPiArICAgICNbdGVzdF0KPiArICAgIGZuIHRlc3RfbWVyZ2VfcHJlc2VydmVz X2RlZHVwX3N0YXRlKCkgewo+ICsgICAgICAgIGxldCBsb2cgPSBDbHVzdGVyTG9nOjpuZXcoKTsK PiArCj4gKyAgICAgICAgLy8gQWRkIGVudHJpZXMgZnJvbSBub2RlMQo+ICsgICAgICAgIGxldCBf ID0gbG9nLmFkZCgibm9kZTEiLCAicm9vdCIsICJjbHVzdGVyIiwgMTIzLCA2LCAxMDAwLCAiRW50 cnkgMSIpOwo+ICsgICAgICAgIGxldCBfID0gbG9nLmFkZCgibm9kZTEiLCAicm9vdCIsICJjbHVz dGVyIiwgMTI0LCA2LCAxMDAxLCAiRW50cnkgMiIpOwo+ICsKPiArICAgICAgICAvLyBDcmVhdGUg cmVtb3RlIGxvZyB3aXRoIGxhdGVyIGVudHJpZXMgZnJvbSBub2RlMQo+ICsgICAgICAgIGxldCBy ZW1vdGUgPSBDbHVzdGVyTG9nOjpuZXcoKTsKPiArICAgICAgICBsZXQgXyA9IHJlbW90ZS5hZGQo Im5vZGUxIiwgInJvb3QiLCAiY2x1c3RlciIsIDEyNSwgNiwgMTAwMiwgIkVudHJ5IDMiKTsKPiAr Cj4gKyAgICAgICAgbGV0IHJlbW90ZV9idWZmZXIgPSByZW1vdGUuYnVmZmVyLmxvY2soKS5jbG9u ZSgpOwo+ICsKPiArICAgICAgICAvLyBNZXJnZQo+ICsgICAgICAgIGxldCBfID0gbG9nLm1lcmdl KHZlYyFbcmVtb3RlX2J1ZmZlcl0sIHRydWUpLnVud3JhcCgpOwo+ICsKPiArICAgICAgICAvLyBD aGVjayB0aGF0IGRlZHVwIHN0YXRlIHdhcyB1cGRhdGVkCj4gKyAgICAgICAgbGV0IGRlZHVwID0g bG9nLmRlZHVwLmxvY2soKTsKPiArICAgICAgICBsZXQgbm9kZTFfZGlnZXN0ID0gY3JhdGU6Omhh c2g6OmZudl82NGFfc3RyKCJub2RlMSIpOwo+ICsgICAgICAgIGxldCBkZWR1cF9lbnRyeSA9IGRl ZHVwLmdldCgmbm9kZTFfZGlnZXN0KS51bndyYXAoKTsKPiArCj4gKyAgICAgICAgLy8gU2hvdWxk IHRyYWNrIHRoZSBsYXRlc3QgdGltZSBmcm9tIG5vZGUxCj4gKyAgICAgICAgYXNzZXJ0X2VxIShk ZWR1cF9lbnRyeS50aW1lLCAxMDAyKTsKPiArICAgICAgICAvLyBVSUQgaXMgYXV0by1nZW5lcmF0 ZWQsIHNvIGp1c3QgdmVyaWZ5IGl0IGV4aXN0cyBhbmQgaXMgcmVhc29uYWJsZQo+ICsgICAgICAg IGFzc2VydCEoZGVkdXBfZW50cnkudWlkID4gMCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgI1t0ZXN0 XQo+ICsgICAgZm4gdGVzdF9nZXRfc3RhdGVfYmluYXJ5X2Zvcm1hdCgpIHsKPiArICAgICAgICBs ZXQgbG9nID0gQ2x1c3RlckxvZzo6bmV3KCk7Cj4gKwo+ICsgICAgICAgIC8vIEFkZCBzb21lIGVu dHJpZXMKPiArICAgICAgICBsZXQgXyA9IGxvZy5hZGQoIm5vZGUxIiwgInJvb3QiLCAiY2x1c3Rl ciIsIDEyMywgNiwgMTAwMCwgIkVudHJ5IDEiKTsKPiArICAgICAgICBsZXQgXyA9IGxvZy5hZGQo Im5vZGUyIiwgImFkbWluIiwgInN5c3RlbSIsIDQ1NiwgNiwgMTAwMSwgIkVudHJ5IDIiKTsKPiAr Cj4gKyAgICAgICAgLy8gR2V0IHN0YXRlCj4gKyAgICAgICAgbGV0IHN0YXRlID0gbG9nLmdldF9z dGF0ZSgpLnVud3JhcCgpOwo+ICsKPiArICAgICAgICAvLyBTaG91bGQgYmUgYmluYXJ5IGZvcm1h dCwgbm90IEpTT04KPiArICAgICAgICBhc3NlcnQhKHN0YXRlLmxlbigpID49IDgpOyAvLyBBdCBs ZWFzdCBoZWFkZXIKPiArCj4gKyAgICAgICAgLy8gQ2hlY2sgaGVhZGVyIGZvcm1hdCAoY2xvZ19i YXNlX3QpCj4gKyAgICAgICAgbGV0IHNpemUgPSB1MzI6OmZyb21fbGVfYnl0ZXMoc3RhdGVbMC4u NF0udHJ5X2ludG8oKS51bndyYXAoKSkgYXMgdXNpemU7Cj4gKyAgICAgICAgbGV0IGNwb3MgPSB1 MzI6OmZyb21fbGVfYnl0ZXMoc3RhdGVbNC4uOF0udHJ5X2ludG8oKS51bndyYXAoKSk7Cj4gKwo+ ICsgICAgICAgIGFzc2VydF9lcSEoc2l6ZSwgc3RhdGUubGVuKCkpOwo+ICsgICAgICAgIGFzc2Vy dF9lcSEoY3BvcywgOCk7IC8vIEZpcnN0IGVudHJ5IGF0IG9mZnNldCA4Cj4gKwo+ICsgICAgICAg IC8vIFNob3VsZCBiZSBhYmxlIHRvIGRlc2VyaWFsaXplIGJhY2sKPiArICAgICAgICBsZXQgZGVz ZXJpYWxpemVkID0gQ2x1c3RlckxvZzo6ZGVzZXJpYWxpemVfc3RhdGUoJnN0YXRlKS51bndyYXAo KTsKPiArICAgICAgICBhc3NlcnRfZXEhKGRlc2VyaWFsaXplZC5sZW4oKSwgMik7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgI1t0ZXN0XQo+ICsgICAgZm4gdGVzdF9zdGF0ZV9yb3VuZHRyaXAoKSB7Cj4g KyAgICAgICAgbGV0IGxvZyA9IENsdXN0ZXJMb2c6Om5ldygpOwo+ICsKPiArICAgICAgICAvLyBB ZGQgZW50cmllcwo+ICsgICAgICAgIGxldCBfID0gbG9nLmFkZCgibm9kZTEiLCAicm9vdCIsICJj bHVzdGVyIiwgMTIzLCA2LCAxMDAwLCAiVGVzdCAxIik7Cj4gKyAgICAgICAgbGV0IF8gPSBsb2cu YWRkKCJub2RlMiIsICJhZG1pbiIsICJzeXN0ZW0iLCA0NTYsIDYsIDEwMDEsICJUZXN0IDIiKTsK PiArCj4gKyAgICAgICAgLy8gU2VyaWFsaXplCj4gKyAgICAgICAgbGV0IHN0YXRlID0gbG9nLmdl dF9zdGF0ZSgpLnVud3JhcCgpOwo+ICsKPiArICAgICAgICAvLyBEZXNlcmlhbGl6ZQo+ICsgICAg ICAgIGxldCBkZXNlcmlhbGl6ZWQgPSBDbHVzdGVyTG9nOjpkZXNlcmlhbGl6ZV9zdGF0ZSgmc3Rh dGUpLnVud3JhcCgpOwo+ICsKPiArICAgICAgICAvLyBDaGVjayBlbnRyaWVzIHByZXNlcnZlZAo+ ICsgICAgICAgIGFzc2VydF9lcSEoZGVzZXJpYWxpemVkLmxlbigpLCAyKTsKPiArCj4gKyAgICAg ICAgLy8gQnVmZmVyIGlzIHN0b3JlZCBuZXdlc3QtZmlyc3QgYWZ0ZXIgc29ydGluZyBhbmQgc2Vy aWFsaXphdGlvbgo+ICsgICAgICAgIGxldCBlbnRyaWVzOiBWZWM8Xz4gPSBkZXNlcmlhbGl6ZWQu aXRlcigpLmNvbGxlY3QoKTsKPiArICAgICAgICBhc3NlcnRfZXEhKGVudHJpZXNbMF0ubm9kZSwg Im5vZGUyIik7IC8vIE5ld2VzdCAodGltZSAxMDAxKQo+ICsgICAgICAgIGFzc2VydF9lcSEoZW50 cmllc1swXS5tZXNzYWdlLCAiVGVzdCAyIik7Cj4gKyAgICAgICAgYXNzZXJ0X2VxIShlbnRyaWVz WzFdLm5vZGUsICJub2RlMSIpOyAvLyBPbGRlc3QgKHRpbWUgMTAwMCkKPiArICAgICAgICBhc3Nl cnRfZXEhKGVudHJpZXNbMV0ubWVzc2FnZSwgIlRlc3QgMSIpOwo+ICsgICAgfQo+ICt9Cj4gZGlm ZiAtLWdpdCBhL3NyYy9wbXhjZnMtcnMvcG14Y2ZzLWxvZ2dlci9zcmMvZW50cnkucnMgYi9zcmMv cG14Y2ZzLXJzL3BteGNmcy1sb2dnZXIvc3JjL2VudHJ5LnJzCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwMC4uMTg3NjY3YWQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvc3Jj L3BteGNmcy1ycy9wbXhjZnMtbG9nZ2VyL3NyYy9lbnRyeS5ycwo+IEBAIC0wLDAgKzEsNTc5IEBA Cj4gKy8vLyBMb2cgRW50cnkgSW1wbGVtZW50YXRpb24KPiArLy8vCj4gKy8vLyBUaGlzIG1vZHVs ZSBpbXBsZW1lbnRzIHRoZSBjbHVzdGVyIGxvZyBlbnRyeSBzdHJ1Y3R1cmUsIG1hdGNoaW5nIHRo ZSBDCj4gKy8vLyBpbXBsZW1lbnRhdGlvbidzIGNsb2dfZW50cnlfdCAobG9nZ2VyLmMpLgo+ICt1 c2Ugc3VwZXI6Omhhc2g6OmZudl82NGFfc3RyOwo+ICt1c2UgYW55aG93Ojp7YmFpbCwgUmVzdWx0 fTsKPiArdXNlIHNlcmRlOjpTZXJpYWxpemU7Cj4gK3VzZSBzdGQ6OnN5bmM6OmF0b21pYzo6e0F0 b21pY1UzMiwgT3JkZXJpbmd9Owo+ICsKPiArLy8gQ29uc3RhbnRzIGZyb20gQyBpbXBsZW1lbnRh dGlvbgo+ICtwdWIoY3JhdGUpIGNvbnN0IENMT0dfTUFYX0VOVFJZX1NJWkU6IHVzaXplID0gODE5 MiArIDQwOTY7IC8vIFNZU0xPR19NQVhfTElORV9MRU5HVEggKyBvdmVyaGVhZAoKVGhpcyBjb25z dGFudCBpcyBhbHNvIGRlZmluZWQgaW4gcmluZ19idWZmZXIucnMuCgo+ICsKPiArLy8vIEdsb2Jh bCBVSUQgY291bnRlciAobWF0Y2hlcyBDJ3MgYHVpZF9jb3VudGVyYCBpbiBsb2dnZXIuYzo2MikK PiArc3RhdGljIFVJRF9DT1VOVEVSOiBBdG9taWNVMzIgPSBBdG9taWNVMzI6Om5ldygwKTsKPiAr Cj4gKy8vLyBMb2cgZW50cnkgc3RydWN0dXJlCj4gKy8vLwo+ICsvLy8gTWF0Y2hlcyBDJ3MgYGNs b2dfZW50cnlfdGAgZnJvbSBsb2dnZXIuYzoKPiArLy8vIGBgYGMKPiArLy8vIHR5cGVkZWYgc3Ry dWN0IHsKPiArLy8vICAgICB1aW50MzJfdCBwcmV2OyAgICAgICAgICAvLyBQcmV2aW91cyBlbnRy eSBvZmZzZXQKPiArLy8vICAgICB1aW50MzJfdCBuZXh0OyAgICAgICAgICAvLyBOZXh0IGVudHJ5 IG9mZnNldAo+ICsvLy8gICAgIHVpbnQzMl90IHVpZDsgICAgICAgICAgIC8vIFVuaXF1ZSBJRAo+ ICsvLy8gICAgIHVpbnQzMl90IHRpbWU7ICAgICAgICAgIC8vIFRpbWVzdGFtcAo+ICsvLy8gICAg IHVpbnQ2NF90IG5vZGVfZGlnZXN0OyAgIC8vIEZOVi0xYSBoYXNoIG9mIG5vZGUgbmFtZQo+ICsv Ly8gICAgIHVpbnQ2NF90IGlkZW50X2RpZ2VzdDsgIC8vIEZOVi0xYSBoYXNoIG9mIGlkZW50Cj4g Ky8vLyAgICAgdWludDMyX3QgcGlkOyAgICAgICAgICAgLy8gUHJvY2VzcyBJRAo+ICsvLy8gICAg IHVpbnQ4X3QgcHJpb3JpdHk7ICAgICAgIC8vIFN5c2xvZyBwcmlvcml0eSAoMC03KQo+ICsvLy8g ICAgIHVpbnQ4X3Qgbm9kZV9sZW47ICAgICAgIC8vIExlbmd0aCBvZiBub2RlIG5hbWUgKGluY2x1 ZGluZyBudWxsKQo+ICsvLy8gICAgIHVpbnQ4X3QgaWRlbnRfbGVuOyAgICAgIC8vIExlbmd0aCBv ZiBpZGVudCAoaW5jbHVkaW5nIG51bGwpCj4gKy8vLyAgICAgdWludDhfdCB0YWdfbGVuOyAgICAg ICAgLy8gTGVuZ3RoIG9mIHRhZyAoaW5jbHVkaW5nIG51bGwpCj4gKy8vLyAgICAgdWludDMyX3Qg bXNnX2xlbjsgICAgICAgLy8gTGVuZ3RoIG9mIG1lc3NhZ2UgKGluY2x1ZGluZyBudWxsKQo+ICsv Ly8gICAgIGNoYXIgZGF0YVtdOyAgICAgICAgICAgIC8vIFZhcmlhYmxlIGxlbmd0aCBkYXRhOiBu b2RlICsgaWRlbnQgKyB0YWcgKyBtc2cKPiArLy8vIH0gY2xvZ19lbnRyeV90Owo+ICsvLy8gYGBg Cj4gKyNbZGVyaXZlKERlYnVnLCBDbG9uZSwgU2VyaWFsaXplKV0KPiArcHViIHN0cnVjdCBMb2dF bnRyeSB7Cj4gKyAgICAvLy8gVW5pcXVlIElEIGZvciB0aGlzIGVudHJ5IChhdXRvLWluY3JlbWVu dGluZykKPiArICAgIHB1YiB1aWQ6IHUzMiwKPiArCj4gKyAgICAvLy8gVW5peCB0aW1lc3RhbXAK PiArICAgIHB1YiB0aW1lOiB1MzIsCj4gKwo+ICsgICAgLy8vIEZOVi0xYSBoYXNoIG9mIG5vZGUg bmFtZQo+ICsgICAgcHViIG5vZGVfZGlnZXN0OiB1NjQsCj4gKwo+ICsgICAgLy8vIEZOVi0xYSBo YXNoIG9mIGlkZW50ICh1c2VyKQo+ICsgICAgcHViIGlkZW50X2RpZ2VzdDogdTY0LAo+ICsKPiAr ICAgIC8vLyBQcm9jZXNzIElECj4gKyAgICBwdWIgcGlkOiB1MzIsCj4gKwo+ICsgICAgLy8vIFN5 c2xvZyBwcmlvcml0eSAoMC03KQo+ICsgICAgcHViIHByaW9yaXR5OiB1OCwKPiArCj4gKyAgICAv Ly8gTm9kZSBuYW1lCj4gKyAgICBwdWIgbm9kZTogU3RyaW5nLAo+ICsKPiArICAgIC8vLyBJZGVu dGl0eS91c2VyCj4gKyAgICBwdWIgaWRlbnQ6IFN0cmluZywKPiArCj4gKyAgICAvLy8gVGFnIChl LmcuLCAiY2x1c3RlciIsICJwbXhjZnMiKQo+ICsgICAgcHViIHRhZzogU3RyaW5nLAo+ICsKPiAr ICAgIC8vLyBMb2cgbWVzc2FnZQo+ICsgICAgcHViIG1lc3NhZ2U6IFN0cmluZywKPiArfQo+ICsK PiAraW1wbCBMb2dFbnRyeSB7Cj4gKyAgICAvLy8gTWF0Y2hlcyBDJ3MgYGNsb2dfcGFja2AgZnVu Y3Rpb24gKGxvZ2dlci5jOjIyMC0yNzgpCj4gKyAgICBwdWIgZm4gcGFjaygKPiArICAgICAgICBu b2RlOiAmc3RyLAo+ICsgICAgICAgIGlkZW50OiAmc3RyLAo+ICsgICAgICAgIHRhZzogJnN0ciwK PiArICAgICAgICBwaWQ6IHUzMiwKPiArICAgICAgICB0aW1lOiB1MzIsCj4gKyAgICAgICAgcHJp b3JpdHk6IHU4LAo+ICsgICAgICAgIG1lc3NhZ2U6ICZzdHIsCj4gKyAgICApIC0+IFJlc3VsdDxT ZWxmPiB7Cj4gKyAgICAgICAgaWYgcHJpb3JpdHkgPj0gOCB7Cj4gKyAgICAgICAgICAgIGJhaWwh KCJJbnZhbGlkIHByaW9yaXR5OiB7cHJpb3JpdHl9IChtdXN0IGJlIDAtNykiKTsKPiArICAgICAg ICB9Cj4gKwo+ICsgICAgICAgIGxldCBub2RlID0gU2VsZjo6dHJ1bmNhdGVfc3RyaW5nKG5vZGUs IDI1NSk7Cj4gKyAgICAgICAgbGV0IGlkZW50ID0gU2VsZjo6dHJ1bmNhdGVfc3RyaW5nKGlkZW50 LCAyNTUpOwo+ICsgICAgICAgIGxldCB0YWcgPSBTZWxmOjp0cnVuY2F0ZV9zdHJpbmcodGFnLCAy NTUpOwo+ICsgICAgICAgIGxldCBtZXNzYWdlID0gU2VsZjo6dXRmOF90b19hc2NpaShtZXNzYWdl KTsKPiArCj4gKyAgICAgICAgbGV0IG5vZGVfbGVuID0gbm9kZS5sZW4oKSArIDE7Cj4gKyAgICAg ICAgbGV0IGlkZW50X2xlbiA9IGlkZW50LmxlbigpICsgMTsKPiArICAgICAgICBsZXQgdGFnX2xl biA9IHRhZy5sZW4oKSArIDE7Cj4gKyAgICAgICAgbGV0IG11dCBtc2dfbGVuID0gbWVzc2FnZS5s ZW4oKSArIDE7Cj4gKwo+ICsgICAgICAgIGxldCB0b3RhbF9zaXplID0gc3RkOjptZW06OnNpemVf b2Y6Ojx1MzI+KCkgKiA0ICAvLyBwcmV2LCBuZXh0LCB1aWQsIHRpbWUKPiArICAgICAgICAgICAg KyBzdGQ6Om1lbTo6c2l6ZV9vZjo6PHU2ND4oKSAqIDIgIC8vIG5vZGVfZGlnZXN0LCBpZGVudF9k aWdlc3QKPiArICAgICAgICAgICAgKyBzdGQ6Om1lbTo6c2l6ZV9vZjo6PHUzMj4oKSAqIDIgIC8v IHBpZCwgbXNnX2xlbgo+ICsgICAgICAgICAgICArIHN0ZDo6bWVtOjpzaXplX29mOjo8dTg+KCkg KiA0ICAgLy8gcHJpb3JpdHksIG5vZGVfbGVuLCBpZGVudF9sZW4sIHRhZ19sZW4KPiArICAgICAg ICAgICAgKyBub2RlX2xlbgo+ICsgICAgICAgICAgICArIGlkZW50X2xlbgo+ICsgICAgICAgICAg ICArIHRhZ19sZW4KPiArICAgICAgICAgICAgKyBtc2dfbGVuOwo+ICsKPiArICAgICAgICBpZiB0 b3RhbF9zaXplID4gQ0xPR19NQVhfRU5UUllfU0laRSB7Cj4gKyAgICAgICAgICAgIGxldCBkaWZm ID0gdG90YWxfc2l6ZSAtIENMT0dfTUFYX0VOVFJZX1NJWkU7Cj4gKyAgICAgICAgICAgIG1zZ19s ZW4gPSBtc2dfbGVuLnNhdHVyYXRpbmdfc3ViKGRpZmYpOwo+ICsgICAgICAgIH0KPiArCj4gKyAg ICAgICAgbGV0IG5vZGVfZGlnZXN0ID0gZm52XzY0YV9zdHIoJm5vZGUpOwo+ICsgICAgICAgIGxl dCBpZGVudF9kaWdlc3QgPSBmbnZfNjRhX3N0cigmaWRlbnQpOwo+ICsgICAgICAgIGxldCB1aWQg PSBVSURfQ09VTlRFUi5mZXRjaF9hZGQoMSwgT3JkZXJpbmc6OlNlcUNzdCkud3JhcHBpbmdfYWRk KDEpOwo+ICsKPiArICAgICAgICBPayhTZWxmIHsKPiArICAgICAgICAgICAgdWlkLAo+ICsgICAg ICAgICAgICB0aW1lLAo+ICsgICAgICAgICAgICBub2RlX2RpZ2VzdCwKPiArICAgICAgICAgICAg aWRlbnRfZGlnZXN0LAo+ICsgICAgICAgICAgICBwaWQsCj4gKyAgICAgICAgICAgIHByaW9yaXR5 LAo+ICsgICAgICAgICAgICBub2RlLAo+ICsgICAgICAgICAgICBpZGVudCwKPiArICAgICAgICAg ICAgdGFnLAo+ICsgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlWy4ubXNnX2xlbi5zYXR1cmF0 aW5nX3N1YigxKV0udG9fc3RyaW5nKCksCj4gKyAgICAgICAgfSkKPiArICAgIH0KPiArCj4gKyAg ICAvLy8gVHJ1bmNhdGUgc3RyaW5nIHRvIG1heCBsZW5ndGgKPiArICAgIGZuIHRydW5jYXRlX3N0 cmluZyhzOiAmc3RyLCBtYXhfbGVuOiB1c2l6ZSkgLT4gU3RyaW5nIHsKPiArICAgICAgICBpZiBz LmxlbigpID4gbWF4X2xlbiB7Cj4gKyAgICAgICAgICAgIHNbLi5tYXhfbGVuXS50b19zdHJpbmco KQo+ICsgICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgIHMudG9fc3RyaW5nKCkKPiArICAg ICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIENvbnZlcnQgVVRGLTggdG8gQVNDSUkgd2l0 aCBwcm9wZXIgZXNjYXBpbmcKPiArICAgIC8vLwo+ICsgICAgLy8vIE1hdGNoZXMgQydzIGB1dGY4 X3RvX2FzY2lpYCBiZWhhdmlvciAoY2ZzLXV0aWxzLmM6NDAtMTA3KToKPiArICAgIC8vLyAtIENv bnRyb2wgY2hhcmFjdGVycyAoMHgwMC0weDFGLCAweDdGKTogRXNjYXBlZCBhcyAjMFhYWCAoZS5n LiwgIzAwNyBmb3IgQkVMKQo+ICsgICAgLy8vIC0gVW5pY29kZSAoVSswMDgwIHRvIFUrRkZGRik6 IEVzY2FwZWQgYXMgXHVYWFhYIChlLmcuLCBcdTRlMTYgZm9yIOS4likKPiArICAgIC8vLyAtIFF1 b3RlcyAod2hlbiBxdW90ZXF1b3RlPXRydWUpOiBFc2NhcGVkIGFzIFwiCj4gKyAgICAvLy8gLSBD aGFyYWN0ZXJzID4gVStGRkZGOiBTaWxlbnRseSBkcm9wcGVkCj4gKyAgICAvLy8gLSBBU0NJSSBw cmludGFibGUgKDB4MjAtMHg3RSBleGNlcHQgcXVvdGVzKTogUGFzc2VkIHRocm91Z2ggdW5jaGFu Z2VkCj4gKyAgICBmbiB1dGY4X3RvX2FzY2lpKHM6ICZzdHIpIC0+IFN0cmluZyB7Cj4gKyAgICAg ICAgbGV0IG11dCByZXN1bHQgPSBTdHJpbmc6OndpdGhfY2FwYWNpdHkocy5sZW4oKSk7Cj4gKwo+ ICsgICAgICAgIGZvciBjIGluIHMuY2hhcnMoKSB7Cj4gKyAgICAgICAgICAgIG1hdGNoIGMgewo+ ICsgICAgICAgICAgICAgICAgLy8gQ29udHJvbCBjaGFyYWN0ZXJzOiAjMFhYWCBmb3JtYXQgKDMg ZGVjaW1hbCBkaWdpdHMgd2l0aCBsZWFkaW5nIDApCj4gKyAgICAgICAgICAgICAgICAnXHgwMCcu Lj0nXHgxRicgfCAnXHg3RicgPT4gewo+ICsgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0g YyBhcyB1MzI7Cj4gKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goJyMnKTsKPiArICAg ICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnMCcpOwo+ICsgICAgICAgICAgICAgICAgICAg IC8vIEZvcm1hdCBhcyAzIGRlY2ltYWwgZGlnaXRzIHdpdGggbGVhZGluZyB6ZXJvcyAoZS5nLiwg IzAwMDcgZm9yIEJFTCkKPiArICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaF9zdHIoJmZv cm1hdCEoIns6MDN9IiwgY29kZSkpOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAg ICAgICAgLy8gQVNDSUkgcHJpbnRhYmxlIGNoYXJhY3RlcnM6IHBhc3MgdGhyb3VnaAo+ICsgICAg ICAgICAgICAgICAgYyBpZiBjLmlzX2FzY2lpKCkgPT4gewo+ICsgICAgICAgICAgICAgICAgICAg IHJlc3VsdC5wdXNoKGMpOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICAg Ly8gVW5pY29kZSBVKzAwODAgdG8gVStGRkZGOiBcdVhYWFggZm9ybWF0Cj4gKyAgICAgICAgICAg ICAgICBjIGlmIChjIGFzIHUzMikgPCAweDEwMDAwID0+IHsKPiArICAgICAgICAgICAgICAgICAg ICByZXN1bHQucHVzaCgnXFwnKTsKPiArICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgn dScpOwo+ICsgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoX3N0cigmZm9ybWF0ISgiezow NHh9IiwgYyBhcyB1MzIpKTsKPiArICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAg IC8vIENoYXJhY3RlcnMgPiBVK0ZGRkY6IHNpbGVudGx5IGRyb3AgKG1hdGNoZXMgQyBiZWhhdmlv cikKPiArICAgICAgICAgICAgICAgIF8gPT4ge30KPiArICAgICAgICAgICAgfQo+ICsgICAgICAg IH0KPiArCj4gKyAgICAgICAgcmVzdWx0Cj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIE1hdGNoZXMg QydzIGBjbG9nX2VudHJ5X3NpemVgIGZ1bmN0aW9uIChsb2dnZXIuYzoyMDEtMjA2KQo+ICsgICAg cHViIGZuIHNpemUoJnNlbGYpIC0+IHVzaXplIHsKPiArICAgICAgICBzdGQ6Om1lbTo6c2l6ZV9v Zjo6PHUzMj4oKSAqIDQgIC8vIHByZXYsIG5leHQsIHVpZCwgdGltZQo+ICsgICAgICAgICAgICAr IHN0ZDo6bWVtOjpzaXplX29mOjo8dTY0PigpICogMiAgLy8gbm9kZV9kaWdlc3QsIGlkZW50X2Rp Z2VzdAo+ICsgICAgICAgICAgICArIHN0ZDo6bWVtOjpzaXplX29mOjo8dTMyPigpICogMiAgLy8g cGlkLCBtc2dfbGVuCj4gKyAgICAgICAgICAgICsgc3RkOjptZW06OnNpemVfb2Y6Ojx1OD4oKSAq IDQgICAvLyBwcmlvcml0eSwgbm9kZV9sZW4sIGlkZW50X2xlbiwgdGFnX2xlbgo+ICsgICAgICAg ICAgICArIHNlbGYubm9kZS5sZW4oKSArIDEKPiArICAgICAgICAgICAgKyBzZWxmLmlkZW50Lmxl bigpICsgMQo+ICsgICAgICAgICAgICArIHNlbGYudGFnLmxlbigpICsgMQo+ICsgICAgICAgICAg ICArIHNlbGYubWVzc2FnZS5sZW4oKSArIDEKPiArICAgIH0KPiArCj4gKyAgICAvLy8gQyBpbXBs ZW1lbnRhdGlvbjogYHVpbnQzMl90IHJlYWxzaXplID0gKChzaXplICsgNykgJiAweGZmZmZmZmY4 KTtgCj4gKyAgICBwdWIgZm4gYWxpZ25lZF9zaXplKCZzZWxmKSAtPiB1c2l6ZSB7Cj4gKyAgICAg ICAgbGV0IHNpemUgPSBzZWxmLnNpemUoKTsKPiArICAgICAgICAoc2l6ZSArIDcpICYgITcKPiAr ICAgIH0KPiArCj4gKyAgICBwdWIgZm4gdG9fanNvbl9vYmplY3QoJnNlbGYpIC0+IHNlcmRlX2pz b246OlZhbHVlIHsKPiArICAgICAgICBzZXJkZV9qc29uOjpqc29uISh7Cj4gKyAgICAgICAgICAg ICJ1aWQiOiBzZWxmLnVpZCwKPiArICAgICAgICAgICAgInRpbWUiOiBzZWxmLnRpbWUsCj4gKyAg ICAgICAgICAgICJwcmkiOiBzZWxmLnByaW9yaXR5LAo+ICsgICAgICAgICAgICAidGFnIjogc2Vs Zi50YWcsCj4gKyAgICAgICAgICAgICJwaWQiOiBzZWxmLnBpZCwKPiArICAgICAgICAgICAgIm5v ZGUiOiBzZWxmLm5vZGUsCj4gKyAgICAgICAgICAgICJ1c2VyIjogc2VsZi5pZGVudCwKPiArICAg ICAgICAgICAgIm1zZyI6IHNlbGYubWVzc2FnZSwKPiArICAgICAgICB9KQo+ICsgICAgfQo+ICsK PiArICAgIC8vLyBTZXJpYWxpemUgdG8gQyBiaW5hcnkgZm9ybWF0IChjbG9nX2VudHJ5X3QpCj4g KyAgICAvLy8KPiArICAgIC8vLyBCaW5hcnkgbGF5b3V0IG1hdGNoZXMgQyBzdHJ1Y3R1cmU6Cj4g KyAgICAvLy8gYGBgYwo+ICsgICAgLy8vIHN0cnVjdCB7Cj4gKyAgICAvLy8gICAgIHVpbnQzMl90 IHByZXY7ICAgICAgICAgIC8vIFdpbGwgYmUgZmlsbGVkIGJ5IHJpbmcgYnVmZmVyCj4gKyAgICAv Ly8gICAgIHVpbnQzMl90IG5leHQ7ICAgICAgICAgIC8vIFdpbGwgYmUgZmlsbGVkIGJ5IHJpbmcg YnVmZmVyCj4gKyAgICAvLy8gICAgIHVpbnQzMl90IHVpZDsKPiArICAgIC8vLyAgICAgdWludDMy X3QgdGltZTsKPiArICAgIC8vLyAgICAgdWludDY0X3Qgbm9kZV9kaWdlc3Q7Cj4gKyAgICAvLy8g ICAgIHVpbnQ2NF90IGlkZW50X2RpZ2VzdDsKPiArICAgIC8vLyAgICAgdWludDMyX3QgcGlkOwo+ ICsgICAgLy8vICAgICB1aW50OF90IHByaW9yaXR5Owo+ICsgICAgLy8vICAgICB1aW50OF90IG5v ZGVfbGVuOwo+ICsgICAgLy8vICAgICB1aW50OF90IGlkZW50X2xlbjsKPiArICAgIC8vLyAgICAg dWludDhfdCB0YWdfbGVuOwo+ICsgICAgLy8vICAgICB1aW50MzJfdCBtc2dfbGVuOwo+ICsgICAg Ly8vICAgICBjaGFyIGRhdGFbXTsgIC8vIG5vZGUgKyBpZGVudCArIHRhZyArIG1zZyAobnVsbC10 ZXJtaW5hdGVkKQo+ICsgICAgLy8vIH0KPiArICAgIC8vLyBgYGAKPiArICAgIHB1YihjcmF0ZSkg Zm4gc2VyaWFsaXplX2JpbmFyeSgmc2VsZiwgcHJldjogdTMyLCBuZXh0OiB1MzIpIC0+IFZlYzx1 OD4gewo+ICsgICAgICAgIGxldCBtdXQgYnVmID0gVmVjOjpuZXcoKTsKPiArCj4gKyAgICAgICAg YnVmLmV4dGVuZF9mcm9tX3NsaWNlKCZwcmV2LnRvX2xlX2J5dGVzKCkpOwo+ICsgICAgICAgIGJ1 Zi5leHRlbmRfZnJvbV9zbGljZSgmbmV4dC50b19sZV9ieXRlcygpKTsKPiArICAgICAgICBidWYu ZXh0ZW5kX2Zyb21fc2xpY2UoJnNlbGYudWlkLnRvX2xlX2J5dGVzKCkpOwo+ICsgICAgICAgIGJ1 Zi5leHRlbmRfZnJvbV9zbGljZSgmc2VsZi50aW1lLnRvX2xlX2J5dGVzKCkpOwo+ICsgICAgICAg IGJ1Zi5leHRlbmRfZnJvbV9zbGljZSgmc2VsZi5ub2RlX2RpZ2VzdC50b19sZV9ieXRlcygpKTsK PiArICAgICAgICBidWYuZXh0ZW5kX2Zyb21fc2xpY2UoJnNlbGYuaWRlbnRfZGlnZXN0LnRvX2xl X2J5dGVzKCkpOwo+ICsgICAgICAgIGJ1Zi5leHRlbmRfZnJvbV9zbGljZSgmc2VsZi5waWQudG9f bGVfYnl0ZXMoKSk7Cj4gKyAgICAgICAgYnVmLnB1c2goc2VsZi5wcmlvcml0eSk7Cj4gKwo+ICsg ICAgICAgIGxldCBub2RlX2xlbiA9IChzZWxmLm5vZGUubGVuKCkgKyAxKSBhcyB1ODsKPiArICAg ICAgICBsZXQgaWRlbnRfbGVuID0gKHNlbGYuaWRlbnQubGVuKCkgKyAxKSBhcyB1ODsKPiArICAg ICAgICBsZXQgdGFnX2xlbiA9IChzZWxmLnRhZy5sZW4oKSArIDEpIGFzIHU4OwoKClRoZXNlIHRo cmVlIGZpZWxkcyBhcmUgdTggaW5jbC4gTlVMLiBQYXlsb2FkIG11c3QgY2FwIGF0IDI1NCBieXRl cywgCm90aGVyd2lzZSBsZW4gKyAxIHdyYXBzIHRvIDAuIEMgZG9lcyBNSU4oc3RybGVuICsgMSwy NTUpCgo+ICsgICAgICAgIGxldCBtc2dfbGVuID0gKHNlbGYubWVzc2FnZS5sZW4oKSArIDEpIGFz IHUzMjsKPiArCj4gKyAgICAgICAgYnVmLnB1c2gobm9kZV9sZW4pOwo+ICsgICAgICAgIGJ1Zi5w dXNoKGlkZW50X2xlbik7Cj4gKyAgICAgICAgYnVmLnB1c2godGFnX2xlbik7Cj4gKyAgICAgICAg YnVmLmV4dGVuZF9mcm9tX3NsaWNlKCZtc2dfbGVuLnRvX2xlX2J5dGVzKCkpOwo+ICsKPiArICAg ICAgICBidWYuZXh0ZW5kX2Zyb21fc2xpY2Uoc2VsZi5ub2RlLmFzX2J5dGVzKCkpOwo+ICsgICAg ICAgIGJ1Zi5wdXNoKDApOwo+ICsKPiArICAgICAgICBidWYuZXh0ZW5kX2Zyb21fc2xpY2Uoc2Vs Zi5pZGVudC5hc19ieXRlcygpKTsKPiArICAgICAgICBidWYucHVzaCgwKTsKPiArCj4gKyAgICAg ICAgYnVmLmV4dGVuZF9mcm9tX3NsaWNlKHNlbGYudGFnLmFzX2J5dGVzKCkpOwo+ICsgICAgICAg IGJ1Zi5wdXNoKDApOwo+ICsKPiArICAgICAgICBidWYuZXh0ZW5kX2Zyb21fc2xpY2Uoc2VsZi5t ZXNzYWdlLmFzX2J5dGVzKCkpOwo+ICsgICAgICAgIGJ1Zi5wdXNoKDApOwo+ICsKPiArICAgICAg ICBidWYKPiArICAgIH0KPiArCj4gKyAgICBwdWIoY3JhdGUpIGZuIGRlc2VyaWFsaXplX2JpbmFy eShkYXRhOiAmW3U4XSkgLT4gUmVzdWx0PChTZWxmLCB1MzIsIHUzMik+IHsKPiArICAgICAgICBp ZiBkYXRhLmxlbigpIDwgNDggewo+ICsgICAgICAgICAgICBiYWlsISgKPiArICAgICAgICAgICAg ICAgICJFbnRyeSB0b28gc21hbGw6IHt9IGJ5dGVzIChuZWVkIGF0IGxlYXN0IDQ4IGZvciBoZWFk ZXIpIiwKPiArICAgICAgICAgICAgICAgIGRhdGEubGVuKCkKPiArICAgICAgICAgICAgKTsKPiAr ICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGxldCBtdXQgb2Zmc2V0ID0gMDsKPiArCj4gKyAgICAg ICAgbGV0IHByZXYgPSB1MzI6OmZyb21fbGVfYnl0ZXMoZGF0YVtvZmZzZXQuLm9mZnNldCArIDRd LnRyeV9pbnRvKCk/KTsKPiArICAgICAgICBvZmZzZXQgKz0gNDsKPiArCj4gKyAgICAgICAgbGV0 IG5leHQgPSB1MzI6OmZyb21fbGVfYnl0ZXMoZGF0YVtvZmZzZXQuLm9mZnNldCArIDRdLnRyeV9p bnRvKCk/KTsKPiArICAgICAgICBvZmZzZXQgKz0gNDsKPiArCj4gKyAgICAgICAgbGV0IHVpZCA9 IHUzMjo6ZnJvbV9sZV9ieXRlcyhkYXRhW29mZnNldC4ub2Zmc2V0ICsgNF0udHJ5X2ludG8oKT8p Owo+ICsgICAgICAgIG9mZnNldCArPSA0Owo+ICsKPiArICAgICAgICBsZXQgdGltZSA9IHUzMjo6 ZnJvbV9sZV9ieXRlcyhkYXRhW29mZnNldC4ub2Zmc2V0ICsgNF0udHJ5X2ludG8oKT8pOwo+ICsg ICAgICAgIG9mZnNldCArPSA0Owo+ICsKPiArICAgICAgICBsZXQgbm9kZV9kaWdlc3QgPSB1NjQ6 OmZyb21fbGVfYnl0ZXMoZGF0YVtvZmZzZXQuLm9mZnNldCArIDhdLnRyeV9pbnRvKCk/KTsKPiAr ICAgICAgICBvZmZzZXQgKz0gODsKPiArCj4gKyAgICAgICAgbGV0IGlkZW50X2RpZ2VzdCA9IHU2 NDo6ZnJvbV9sZV9ieXRlcyhkYXRhW29mZnNldC4ub2Zmc2V0ICsgOF0udHJ5X2ludG8oKT8pOwo+ ICsgICAgICAgIG9mZnNldCArPSA4Owo+ICsKPiArICAgICAgICBsZXQgcGlkID0gdTMyOjpmcm9t X2xlX2J5dGVzKGRhdGFbb2Zmc2V0Li5vZmZzZXQgKyA0XS50cnlfaW50bygpPyk7Cj4gKyAgICAg ICAgb2Zmc2V0ICs9IDQ7Cj4gKwo+ICsgICAgICAgIGxldCBwcmlvcml0eSA9IGRhdGFbb2Zmc2V0 XTsKPiArICAgICAgICBvZmZzZXQgKz0gMTsKPiArCj4gKyAgICAgICAgbGV0IG5vZGVfbGVuID0g ZGF0YVtvZmZzZXRdIGFzIHVzaXplOwo+ICsgICAgICAgIG9mZnNldCArPSAxOwo+ICsKPiArICAg ICAgICBsZXQgaWRlbnRfbGVuID0gZGF0YVtvZmZzZXRdIGFzIHVzaXplOwo+ICsgICAgICAgIG9m ZnNldCArPSAxOwo+ICsKPiArICAgICAgICBsZXQgdGFnX2xlbiA9IGRhdGFbb2Zmc2V0XSBhcyB1 c2l6ZTsKPiArICAgICAgICBvZmZzZXQgKz0gMTsKPiArCj4gKyAgICAgICAgbGV0IG1zZ19sZW4g PSB1MzI6OmZyb21fbGVfYnl0ZXMoZGF0YVtvZmZzZXQuLm9mZnNldCArIDRdLnRyeV9pbnRvKCk/ KSBhcyB1c2l6ZTsKPiArICAgICAgICBvZmZzZXQgKz0gNDsKPiArCj4gKyAgICAgICAgaWYgb2Zm c2V0ICsgbm9kZV9sZW4gKyBpZGVudF9sZW4gKyB0YWdfbGVuICsgbXNnX2xlbiA+IGRhdGEubGVu KCkgewo+ICsgICAgICAgICAgICBiYWlsISgiRW50cnkgZGF0YSBleGNlZWRzIGJ1ZmZlciBzaXpl Iik7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBsZXQgbm9kZSA9IHJlYWRfbnVsbF90ZXJt aW5hdGVkKCZkYXRhW29mZnNldC4ub2Zmc2V0ICsgbm9kZV9sZW5dKT87Cj4gKyAgICAgICAgb2Zm c2V0ICs9IG5vZGVfbGVuOwo+ICsKPiArICAgICAgICBsZXQgaWRlbnQgPSByZWFkX251bGxfdGVy bWluYXRlZCgmZGF0YVtvZmZzZXQuLm9mZnNldCArIGlkZW50X2xlbl0pPzsKPiArICAgICAgICBv ZmZzZXQgKz0gaWRlbnRfbGVuOwo+ICsKPiArICAgICAgICBsZXQgdGFnID0gcmVhZF9udWxsX3Rl cm1pbmF0ZWQoJmRhdGFbb2Zmc2V0Li5vZmZzZXQgKyB0YWdfbGVuXSk/Owo+ICsgICAgICAgIG9m ZnNldCArPSB0YWdfbGVuOwo+ICsKPiArICAgICAgICBsZXQgbWVzc2FnZSA9IHJlYWRfbnVsbF90 ZXJtaW5hdGVkKCZkYXRhW29mZnNldC4ub2Zmc2V0ICsgbXNnX2xlbl0pPzsKPiArCj4gKyAgICAg ICAgT2soKAo+ICsgICAgICAgICAgICBTZWxmIHsKPiArICAgICAgICAgICAgICAgIHVpZCwKPiAr ICAgICAgICAgICAgICAgIHRpbWUsCj4gKyAgICAgICAgICAgICAgICBub2RlX2RpZ2VzdCwKPiAr ICAgICAgICAgICAgICAgIGlkZW50X2RpZ2VzdCwKPiArICAgICAgICAgICAgICAgIHBpZCwKPiAr ICAgICAgICAgICAgICAgIHByaW9yaXR5LAo+ICsgICAgICAgICAgICAgICAgbm9kZSwKPiArICAg ICAgICAgICAgICAgIGlkZW50LAo+ICsgICAgICAgICAgICAgICAgdGFnLAo+ICsgICAgICAgICAg ICAgICAgbWVzc2FnZSwKPiArICAgICAgICAgICAgfSwKPiArICAgICAgICAgICAgcHJldiwKPiAr ICAgICAgICAgICAgbmV4dCwKPiArICAgICAgICApKQo+ICsgICAgfQo+ICt9Cj4gKwo+ICtmbiBy ZWFkX251bGxfdGVybWluYXRlZChkYXRhOiAmW3U4XSkgLT4gUmVzdWx0PFN0cmluZz4gewo+ICsg ICAgbGV0IGxlbiA9IGRhdGEuaXRlcigpLnBvc2l0aW9uKHwmYnwgYiA9PSAwKS51bndyYXBfb3Io ZGF0YS5sZW4oKSk7Cj4gKyAgICBPayhTdHJpbmc6OmZyb21fdXRmOF9sb3NzeSgmZGF0YVsuLmxl bl0pLmludG9fb3duZWQoKSkKPiArfQo+ICsKPiArI1tjZmcodGVzdCldCj4gK3B1YiBmbiByZXNl dF91aWRfY291bnRlcigpIHsKPiArICAgIFVJRF9DT1VOVEVSLnN0b3JlKDAsIE9yZGVyaW5nOjpT ZXFDc3QpOwo+ICt9Cj4gKwo+ICsjW2NmZyh0ZXN0KV0KPiArbW9kIHRlc3RzIHsKPiArICAgIHVz ZSBzdXBlcjo6KjsKPiArCj4gKyAgICAjW3Rlc3RdCj4gKyAgICBmbiB0ZXN0X3BhY2tfZW50cnko KSB7Cj4gKyAgICAgICAgcmVzZXRfdWlkX2NvdW50ZXIoKTsKPiArCj4gKyAgICAgICAgbGV0IGVu dHJ5ID0gTG9nRW50cnk6OnBhY2soCj4gKyAgICAgICAgICAgICJub2RlMSIsCj4gKyAgICAgICAg ICAgICJyb290IiwKPiArICAgICAgICAgICAgImNsdXN0ZXIiLAo+ICsgICAgICAgICAgICAxMjM0 NSwKPiArICAgICAgICAgICAgMTIzNDU2Nzg5MCwKPiArICAgICAgICAgICAgNiwgLy8gSW5mbyBw cmlvcml0eQo+ICsgICAgICAgICAgICAiVGVzdCBtZXNzYWdlIiwKPiArICAgICAgICApCj4gKyAg ICAgICAgLnVud3JhcCgpOwo+ICsKPiArICAgICAgICBhc3NlcnRfZXEhKGVudHJ5LnVpZCwgMSk7 Cj4gKyAgICAgICAgYXNzZXJ0X2VxIShlbnRyeS50aW1lLCAxMjM0NTY3ODkwKTsKPiArICAgICAg ICBhc3NlcnRfZXEhKGVudHJ5Lm5vZGUsICJub2RlMSIpOwo+ICsgICAgICAgIGFzc2VydF9lcSEo ZW50cnkuaWRlbnQsICJyb290Iik7Cj4gKyAgICAgICAgYXNzZXJ0X2VxIShlbnRyeS50YWcsICJj bHVzdGVyIik7Cj4gKyAgICAgICAgYXNzZXJ0X2VxIShlbnRyeS5waWQsIDEyMzQ1KTsKPiArICAg ICAgICBhc3NlcnRfZXEhKGVudHJ5LnByaW9yaXR5LCA2KTsKPiArICAgICAgICBhc3NlcnRfZXEh KGVudHJ5Lm1lc3NhZ2UsICJUZXN0IG1lc3NhZ2UiKTsKPiArICAgIH0KPiArCj4gKyAgICAjW3Rl c3RdCj4gKyAgICBmbiB0ZXN0X3VpZF9pbmNyZW1lbnQoKSB7Cj4gKyAgICAgICAgcmVzZXRfdWlk X2NvdW50ZXIoKTsKPiArCj4gKyAgICAgICAgbGV0IGVudHJ5MSA9IExvZ0VudHJ5OjpwYWNrKCJu b2RlMSIsICJyb290IiwgInRhZyIsIDAsIDEwMDAsIDYsICJtc2cxIikudW53cmFwKCk7Cj4gKyAg ICAgICAgbGV0IGVudHJ5MiA9IExvZ0VudHJ5OjpwYWNrKCJub2RlMSIsICJyb290IiwgInRhZyIs IDAsIDEwMDEsIDYsICJtc2cyIikudW53cmFwKCk7Cj4gKwo+ICsgICAgICAgIGFzc2VydF9lcSEo ZW50cnkxLnVpZCwgMSk7Cj4gKyAgICAgICAgYXNzZXJ0X2VxIShlbnRyeTIudWlkLCAyKTsKPiAr ICAgIH0KPiArCj4gKyAgICAjW3Rlc3RdCj4gKyAgICBmbiB0ZXN0X2ludmFsaWRfcHJpb3JpdHko KSB7Cj4gKyAgICAgICAgbGV0IHJlc3VsdCA9IExvZ0VudHJ5OjpwYWNrKCJub2RlMSIsICJyb290 IiwgInRhZyIsIDAsIDEwMDAsIDgsICJtZXNzYWdlIik7Cj4gKyAgICAgICAgYXNzZXJ0IShyZXN1 bHQuaXNfZXJyKCkpOwo+ICsgICAgfQo+ICsKPiArICAgICNbdGVzdF0KPiArICAgIGZuIHRlc3Rf bm9kZV9kaWdlc3QoKSB7Cj4gKyAgICAgICAgbGV0IGVudHJ5MSA9IExvZ0VudHJ5OjpwYWNrKCJu b2RlMSIsICJyb290IiwgInRhZyIsIDAsIDEwMDAsIDYsICJtc2ciKS51bndyYXAoKTsKPiArICAg ICAgICBsZXQgZW50cnkyID0gTG9nRW50cnk6OnBhY2soIm5vZGUxIiwgInJvb3QiLCAidGFnIiwg MCwgMTAwMSwgNiwgIm1zZyIpLnVud3JhcCgpOwo+ICsgICAgICAgIGxldCBlbnRyeTMgPSBMb2dF bnRyeTo6cGFjaygibm9kZTIiLCAicm9vdCIsICJ0YWciLCAwLCAxMDAwLCA2LCAibXNnIikudW53 cmFwKCk7Cj4gKwo+ICsgICAgICAgIC8vIFNhbWUgbm9kZSBzaG91bGQgaGF2ZSBzYW1lIGRpZ2Vz dAo+ICsgICAgICAgIGFzc2VydF9lcSEoZW50cnkxLm5vZGVfZGlnZXN0LCBlbnRyeTIubm9kZV9k aWdlc3QpOwo+ICsKPiArICAgICAgICAvLyBEaWZmZXJlbnQgbm9kZSBzaG91bGQgaGF2ZSBkaWZm ZXJlbnQgZGlnZXN0Cj4gKyAgICAgICAgYXNzZXJ0X25lIShlbnRyeTEubm9kZV9kaWdlc3QsIGVu dHJ5My5ub2RlX2RpZ2VzdCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgI1t0ZXN0XQo+ICsgICAgZm4g dGVzdF9pZGVudF9kaWdlc3QoKSB7Cj4gKyAgICAgICAgbGV0IGVudHJ5MSA9IExvZ0VudHJ5Ojpw YWNrKCJub2RlMSIsICJyb290IiwgInRhZyIsIDAsIDEwMDAsIDYsICJtc2ciKS51bndyYXAoKTsK PiArICAgICAgICBsZXQgZW50cnkyID0gTG9nRW50cnk6OnBhY2soIm5vZGUxIiwgInJvb3QiLCAi dGFnIiwgMCwgMTAwMSwgNiwgIm1zZyIpLnVud3JhcCgpOwo+ICsgICAgICAgIGxldCBlbnRyeTMg PSBMb2dFbnRyeTo6cGFjaygibm9kZTEiLCAiYWRtaW4iLCAidGFnIiwgMCwgMTAwMCwgNiwgIm1z ZyIpLnVud3JhcCgpOwo+ICsKPiArICAgICAgICAvLyBTYW1lIGlkZW50IHNob3VsZCBoYXZlIHNh bWUgZGlnZXN0Cj4gKyAgICAgICAgYXNzZXJ0X2VxIShlbnRyeTEuaWRlbnRfZGlnZXN0LCBlbnRy eTIuaWRlbnRfZGlnZXN0KTsKPiArCj4gKyAgICAgICAgLy8gRGlmZmVyZW50IGlkZW50IHNob3Vs ZCBoYXZlIGRpZmZlcmVudCBkaWdlc3QKPiArICAgICAgICBhc3NlcnRfbmUhKGVudHJ5MS5pZGVu dF9kaWdlc3QsIGVudHJ5My5pZGVudF9kaWdlc3QpOwo+ICsgICAgfQo+ICsKPiArICAgICNbdGVz dF0KPiArICAgIGZuIHRlc3RfdXRmOF90b19hc2NpaSgpIHsKPiArICAgICAgICBsZXQgZW50cnkg PSBMb2dFbnRyeTo6cGFjaygibm9kZTEiLCAicm9vdCIsICJ0YWciLCAwLCAxMDAwLCA2LCAiSGVs bG8g5LiW55WMIikudW53cmFwKCk7Cj4gKyAgICAgICAgYXNzZXJ0IShlbnRyeS5tZXNzYWdlLmlz X2FzY2lpKCkpOwo+ICsgICAgICAgIC8vIFVuaWNvZGUgY2hhcnMgZXNjYXBlZCBhcyBcdVhYWFgg Zm9ybWF0IChtYXRjaGVzIEMgaW1wbGVtZW50YXRpb24pCj4gKyAgICAgICAgYXNzZXJ0IShlbnRy eS5tZXNzYWdlLmNvbnRhaW5zKCJcXHU0ZTE2IikpOyAvLyDkuJYgPSBVKzRFMTYKPiArICAgICAg ICBhc3NlcnQhKGVudHJ5Lm1lc3NhZ2UuY29udGFpbnMoIlxcdTc1NGMiKSk7IC8vIOeVjCA9IFUr NzU0Qwo+ICsgICAgfQo+ICsKPiArICAgICNbdGVzdF0KPiArICAgIGZuIHRlc3RfdXRmOF9jb250 cm9sX2NoYXJzKCkgewo+ICsgICAgICAgIC8vIFRlc3QgY29udHJvbCBjaGFyYWN0ZXIgZXNjYXBp bmcKPiArICAgICAgICBsZXQgZW50cnkgPSBMb2dFbnRyeTo6cGFjaygibm9kZTEiLCAicm9vdCIs ICJ0YWciLCAwLCAxMDAwLCA2LCAiSGVsbG9ceDA3V29ybGQiKS51bndyYXAoKTsKPiArICAgICAg ICBhc3NlcnQhKGVudHJ5Lm1lc3NhZ2UuaXNfYXNjaWkoKSk7Cj4gKyAgICAgICAgLy8gQkVMICgw eDA3KSBzaG91bGQgYmUgZXNjYXBlZCBhcyAjMDAwNwo+ICsgICAgICAgIGFzc2VydCEoZW50cnku bWVzc2FnZS5jb250YWlucygiIzAwMDciKSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgI1t0ZXN0XQo+ ICsgICAgZm4gdGVzdF91dGY4X21peGVkX2NvbnRlbnQoKSB7Cj4gKyAgICAgICAgLy8gVGVzdCBt aXggb2YgQVNDSUksIFVuaWNvZGUsIGFuZCBjb250cm9sIGNoYXJzCj4gKyAgICAgICAgbGV0IGVu dHJ5ID0gTG9nRW50cnk6OnBhY2soCj4gKyAgICAgICAgICAgICJub2RlMSIsCj4gKyAgICAgICAg ICAgICJyb290IiwKPiArICAgICAgICAgICAgInRhZyIsCj4gKyAgICAgICAgICAgIDAsCj4gKyAg ICAgICAgICAgIDEwMDAsCj4gKyAgICAgICAgICAgIDYsCj4gKyAgICAgICAgICAgICJUZXN0XHgw MVxuVW5pY29kZeS4llx0dGFiIiwKPiArICAgICAgICApCj4gKyAgICAgICAgLnVud3JhcCgpOwo+ ICsgICAgICAgIGFzc2VydCEoZW50cnkubWVzc2FnZS5pc19hc2NpaSgpKTsKPiArICAgICAgICAv LyBTT0ggKDB4MDEpIC0+ICMwMDAxCj4gKyAgICAgICAgYXNzZXJ0IShlbnRyeS5tZXNzYWdlLmNv bnRhaW5zKCIjMDAwMSIpKTsKPiArICAgICAgICAvLyBOZXdsaW5lICgweDBBKSAtPiAjMDAxMAo+ ICsgICAgICAgIGFzc2VydCEoZW50cnkubWVzc2FnZS5jb250YWlucygiIzAwMTAiKSk7Cj4gKyAg ICAgICAgLy8gVW5pY29kZSDkuJYgKFUrNEUxNikgLT4gXHU0ZTE2Cj4gKyAgICAgICAgYXNzZXJ0 IShlbnRyeS5tZXNzYWdlLmNvbnRhaW5zKCJcXHU0ZTE2IikpOwo+ICsgICAgICAgIC8vIFRhYiAo MHgwOSkgLT4gIzAwMDkKPiArICAgICAgICBhc3NlcnQhKGVudHJ5Lm1lc3NhZ2UuY29udGFpbnMo IiMwMDA5IikpOwo+ICsgICAgfQo+ICsKPiArICAgICNbdGVzdF0KPiArICAgIGZuIHRlc3Rfc3Ry aW5nX3RydW5jYXRpb24oKSB7Cj4gKyAgICAgICAgbGV0IGxvbmdfbm9kZSA9ICJhIi5yZXBlYXQo MzAwKTsKPiArICAgICAgICBsZXQgZW50cnkgPSBMb2dFbnRyeTo6cGFjaygmbG9uZ19ub2RlLCAi cm9vdCIsICJ0YWciLCAwLCAxMDAwLCA2LCAibXNnIikudW53cmFwKCk7Cj4gKyAgICAgICAgYXNz ZXJ0IShlbnRyeS5ub2RlLmxlbigpIDw9IDI1NSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgI1t0ZXN0 XQo+ICsgICAgZm4gdGVzdF9tZXNzYWdlX3RydW5jYXRpb24oKSB7Cj4gKyAgICAgICAgbGV0IGxv bmdfbWVzc2FnZSA9ICJhIi5yZXBlYXQoQ0xPR19NQVhfRU5UUllfU0laRSk7Cj4gKyAgICAgICAg bGV0IGVudHJ5ID0gTG9nRW50cnk6OnBhY2soIm5vZGUxIiwgInJvb3QiLCAidGFnIiwgMCwgMTAw MCwgNiwgJmxvbmdfbWVzc2FnZSkudW53cmFwKCk7Cj4gKyAgICAgICAgLy8gRW50cnkgc2hvdWxk IGZpdCB3aXRoaW4gbWF4IHNpemUKPiArICAgICAgICBhc3NlcnQhKGVudHJ5LnNpemUoKSA8PSBD TE9HX01BWF9FTlRSWV9TSVpFKTsKPiArICAgIH0KPiArCj4gKyAgICAjW3Rlc3RdCj4gKyAgICBm biB0ZXN0X2FsaWduZWRfc2l6ZSgpIHsKPiArICAgICAgICBsZXQgZW50cnkgPSBMb2dFbnRyeTo6 cGFjaygibm9kZTEiLCAicm9vdCIsICJ0YWciLCAwLCAxMDAwLCA2LCAibXNnIikudW53cmFwKCk7 Cj4gKyAgICAgICAgbGV0IGFsaWduZWQgPSBlbnRyeS5hbGlnbmVkX3NpemUoKTsKPiArCj4gKyAg ICAgICAgLy8gQWxpZ25lZCBzaXplIHNob3VsZCBiZSBtdWx0aXBsZSBvZiA4Cj4gKyAgICAgICAg YXNzZXJ0X2VxIShhbGlnbmVkICUgOCwgMCk7Cj4gKwo+ICsgICAgICAgIC8vIEFsaWduZWQgc2l6 ZSBzaG91bGQgYmUgPj0gYWN0dWFsIHNpemUKPiArICAgICAgICBhc3NlcnQhKGFsaWduZWQgPj0g ZW50cnkuc2l6ZSgpKTsKPiArCj4gKyAgICAgICAgLy8gQWxpZ25lZCBzaXplIHNob3VsZCBiZSB3 aXRoaW4gNyBieXRlcyBvZiBhY3R1YWwgc2l6ZQo+ICsgICAgICAgIGFzc2VydCEoYWxpZ25lZCAt IGVudHJ5LnNpemUoKSA8IDgpOwo+ICsgICAgfQo+ICsKPiArICAgICNbdGVzdF0KPiArICAgIGZu IHRlc3RfanNvbl9leHBvcnQoKSB7Cj4gKyAgICAgICAgbGV0IGVudHJ5ID0gTG9nRW50cnk6OnBh Y2soIm5vZGUxIiwgInJvb3QiLCAiY2x1c3RlciIsIDEyMywgMTIzNDU2Nzg5MCwgNiwgIlRlc3Qi KS51bndyYXAoKTsKPiArICAgICAgICBsZXQganNvbiA9IGVudHJ5LnRvX2pzb25fb2JqZWN0KCk7 Cj4gKwo+ICsgICAgICAgIGFzc2VydF9lcSEoanNvblsibm9kZSJdLCAibm9kZTEiKTsKPiArICAg ICAgICBhc3NlcnRfZXEhKGpzb25bInVzZXIiXSwgInJvb3QiKTsKPiArICAgICAgICBhc3NlcnRf ZXEhKGpzb25bInRhZyJdLCAiY2x1c3RlciIpOwo+ICsgICAgICAgIGFzc2VydF9lcSEoanNvblsi cGlkIl0sIDEyMyk7Cj4gKyAgICAgICAgYXNzZXJ0X2VxIShqc29uWyJ0aW1lIl0sIDEyMzQ1Njc4 OTApOwo+ICsgICAgICAgIGFzc2VydF9lcSEoanNvblsicHJpIl0sIDYpOwo+ICsgICAgICAgIGFz c2VydF9lcSEoanNvblsibXNnIl0sICJUZXN0Iik7Cj4gKyAgICB9Cj4gKwo+ICsgICAgI1t0ZXN0 XQo+ICsgICAgZm4gdGVzdF9iaW5hcnlfc2VyaWFsaXphdGlvbl9yb3VuZHRyaXAoKSB7Cj4gKyAg ICAgICAgbGV0IGVudHJ5ID0gTG9nRW50cnk6OnBhY2soCj4gKyAgICAgICAgICAgICJub2RlMSIs Cj4gKyAgICAgICAgICAgICJyb290IiwKPiArICAgICAgICAgICAgImNsdXN0ZXIiLAo+ICsgICAg ICAgICAgICAxMjM0NSwKPiArICAgICAgICAgICAgMTIzNDU2Nzg5MCwKPiArICAgICAgICAgICAg NiwKPiArICAgICAgICAgICAgIlRlc3QgbWVzc2FnZSIsCj4gKyAgICAgICAgKQo+ICsgICAgICAg IC51bndyYXAoKTsKPiArCj4gKyAgICAgICAgLy8gU2VyaWFsaXplIHdpdGggcHJldi9uZXh0IHBv aW50ZXJzCj4gKyAgICAgICAgbGV0IGJpbmFyeSA9IGVudHJ5LnNlcmlhbGl6ZV9iaW5hcnkoMTAw LCAyMDApOwo+ICsKPiArICAgICAgICAvLyBEZXNlcmlhbGl6ZQo+ICsgICAgICAgIGxldCAoZGVz ZXJpYWxpemVkLCBwcmV2LCBuZXh0KSA9IExvZ0VudHJ5OjpkZXNlcmlhbGl6ZV9iaW5hcnkoJmJp bmFyeSkudW53cmFwKCk7Cj4gKwo+ICsgICAgICAgIC8vIENoZWNrIHByZXYvbmV4dCBwb2ludGVy cwo+ICsgICAgICAgIGFzc2VydF9lcSEocHJldiwgMTAwKTsKPiArICAgICAgICBhc3NlcnRfZXEh KG5leHQsIDIwMCk7Cj4gKwo+ICsgICAgICAgIC8vIENoZWNrIGVudHJ5IGZpZWxkcwo+ICsgICAg ICAgIGFzc2VydF9lcSEoZGVzZXJpYWxpemVkLnVpZCwgZW50cnkudWlkKTsKPiArICAgICAgICBh c3NlcnRfZXEhKGRlc2VyaWFsaXplZC50aW1lLCBlbnRyeS50aW1lKTsKPiArICAgICAgICBhc3Nl cnRfZXEhKGRlc2VyaWFsaXplZC5ub2RlX2RpZ2VzdCwgZW50cnkubm9kZV9kaWdlc3QpOwo+ICsg ICAgICAgIGFzc2VydF9lcSEoZGVzZXJpYWxpemVkLmlkZW50X2RpZ2VzdCwgZW50cnkuaWRlbnRf ZGlnZXN0KTsKPiArICAgICAgICBhc3NlcnRfZXEhKGRlc2VyaWFsaXplZC5waWQsIGVudHJ5LnBp ZCk7Cj4gKyAgICAgICAgYXNzZXJ0X2VxIShkZXNlcmlhbGl6ZWQucHJpb3JpdHksIGVudHJ5LnBy aW9yaXR5KTsKPiArICAgICAgICBhc3NlcnRfZXEhKGRlc2VyaWFsaXplZC5ub2RlLCBlbnRyeS5u b2RlKTsKPiArICAgICAgICBhc3NlcnRfZXEhKGRlc2VyaWFsaXplZC5pZGVudCwgZW50cnkuaWRl bnQpOwo+ICsgICAgICAgIGFzc2VydF9lcSEoZGVzZXJpYWxpemVkLnRhZywgZW50cnkudGFnKTsK PiArICAgICAgICBhc3NlcnRfZXEhKGRlc2VyaWFsaXplZC5tZXNzYWdlLCBlbnRyeS5tZXNzYWdl KTsKPiArICAgIH0KPiArCj4gKyAgICAjW3Rlc3RdCj4gKyAgICBmbiB0ZXN0X2JpbmFyeV9mb3Jt YXRfaGVhZGVyX3NpemUoKSB7Cj4gKyAgICAgICAgbGV0IGVudHJ5ID0gTG9nRW50cnk6OnBhY2so Im4iLCAidSIsICJ0IiwgMSwgMTAwMCwgNiwgIm0iKS51bndyYXAoKTsKPiArICAgICAgICBsZXQg YmluYXJ5ID0gZW50cnkuc2VyaWFsaXplX2JpbmFyeSgwLCAwKTsKPiArCj4gKyAgICAgICAgLy8g SGVhZGVyIHNob3VsZCBiZSBleGFjdGx5IDQ4IGJ5dGVzCj4gKyAgICAgICAgLy8gcHJldig0KSAr IG5leHQoNCkgKyB1aWQoNCkgKyB0aW1lKDQpICsgbm9kZV9kaWdlc3QoOCkgKyBpZGVudF9kaWdl c3QoOCkgKwo+ICsgICAgICAgIC8vIHBpZCg0KSArIHByaW9yaXR5KDEpICsgbm9kZV9sZW4oMSkg KyBpZGVudF9sZW4oMSkgKyB0YWdfbGVuKDEpICsgbXNnX2xlbig0KQo+ICsgICAgICAgIGFzc2Vy dCEoYmluYXJ5LmxlbigpID49IDQ4KTsKPiArCj4gKyAgICAgICAgLy8gRmlyc3QgNDggYnl0ZXMg YXJlIGhlYWRlcgo+ICsgICAgICAgIGFzc2VydF9lcSEoJmJpbmFyeVswLi40XSwgJjB1MzIudG9f bGVfYnl0ZXMoKSk7IC8vIHByZXYKPiArICAgICAgICBhc3NlcnRfZXEhKCZiaW5hcnlbNC4uOF0s ICYwdTMyLnRvX2xlX2J5dGVzKCkpOyAvLyBuZXh0Cj4gKyAgICB9Cj4gKwo+ICsgICAgI1t0ZXN0 XQo+ICsgICAgZm4gdGVzdF9iaW5hcnlfZGVzZXJpYWxpemVfaW52YWxpZF9zaXplKCkgewo+ICsg ICAgICAgIGxldCB0b29fc21hbGwgPSB2ZWMhWzB1ODsgNDBdOyAvLyBMZXNzIHRoYW4gNDggYnl0 ZSBoZWFkZXIKPiArICAgICAgICBsZXQgcmVzdWx0ID0gTG9nRW50cnk6OmRlc2VyaWFsaXplX2Jp bmFyeSgmdG9vX3NtYWxsKTsKPiArICAgICAgICBhc3NlcnQhKHJlc3VsdC5pc19lcnIoKSk7Cj4g KyAgICB9Cj4gKwo+ICsgICAgI1t0ZXN0XQo+ICsgICAgZm4gdGVzdF9iaW5hcnlfbnVsbF90ZXJt aW5hdG9ycygpIHsKPiArICAgICAgICBsZXQgZW50cnkgPSBMb2dFbnRyeTo6cGFjaygibm9kZTEi LCAicm9vdCIsICJ0YWciLCAxMjMsIDEwMDAsIDYsICJtZXNzYWdlIikudW53cmFwKCk7Cj4gKyAg ICAgICAgbGV0IGJpbmFyeSA9IGVudHJ5LnNlcmlhbGl6ZV9iaW5hcnkoMCwgMCk7Cj4gKwo+ICsg ICAgICAgIC8vIENoZWNrIHRoYXQgc3RyaW5ncyBhcmUgbnVsbC10ZXJtaW5hdGVkCj4gKyAgICAg ICAgLy8gRmluZCBudWxsIGJ5dGVzIGluIGRhdGEgc2VjdGlvbiAoYWZ0ZXIgNDgtYnl0ZSBoZWFk ZXIpCj4gKyAgICAgICAgbGV0IGRhdGFfc2VjdGlvbiA9ICZiaW5hcnlbNDguLl07Cj4gKyAgICAg ICAgbGV0IG51bGxfY291bnQgPSBkYXRhX3NlY3Rpb24uaXRlcigpLmZpbHRlcih8JiZifCBiID09 IDApLmNvdW50KCk7Cj4gKyAgICAgICAgYXNzZXJ0X2VxIShudWxsX2NvdW50LCA0KTsgLy8gNCBu dWxsIHRlcm1pbmF0b3JzIChub2RlLCBpZGVudCwgdGFnLCBtc2cpCj4gKyAgICB9Cj4gK30KPiBk aWZmIC0tZ2l0IGEvc3JjL3BteGNmcy1ycy9wbXhjZnMtbG9nZ2VyL3NyYy9oYXNoLnJzIGIvc3Jj L3BteGNmcy1ycy9wbXhjZnMtbG9nZ2VyL3NyYy9oYXNoLnJzCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwMC4uNzEwYzlhYjMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvc3Jj L3BteGNmcy1ycy9wbXhjZnMtbG9nZ2VyL3NyYy9oYXNoLnJzCj4gQEAgLTAsMCArMSwxNzMgQEAK PiArLy8vIEZOVi0xYSAoRm93bGVyLU5vbGwtVm8pIDY0LWJpdCBoYXNoIGZ1bmN0aW9uCj4gKy8v Lwo+ICsvLy8gVGhpcyBtYXRjaGVzIHRoZSBDIGltcGxlbWVudGF0aW9uJ3MgZm52XzY0YV9idWYg ZnVuY3Rpb24gKGxvZ2dlci5jOjUyLTYwKQo+ICsvLy8gVXNlZCBmb3IgZ2VuZXJhdGluZyBub2Rl IGFuZCBpZGVudCBkaWdlc3RzIGZvciBkZWR1cGxpY2F0aW9uLgo+ICsvLy8gRk5WLTFhIDY0LWJp dCBub24temVybyBpbml0aWFsIGJhc2lzCj4gK3B1YihjcmF0ZSkgY29uc3QgRk5WMUFfNjRfSU5J VDogdTY0ID0gMHhjYmYyOWNlNDg0MjIyMzI1Owo+ICsKPiArLy8vIENvbXB1dGUgNjQtYml0IEZO Vi0xYSBoYXNoCj4gKy8vLwo+ICsvLy8gVGhpcyBpcyBhIGZhaXRoZnVsIHBvcnQgb2YgdGhlIEMg aW1wbGVtZW50YXRpb24gZnJvbSBsb2dnZXIuYyBsaW5lcyA1Mi02MDoKPiArLy8vIGBgYGMKPiAr Ly8vIHN0YXRpYyBpbmxpbmUgdWludDY0X3QgZm52XzY0YV9idWYoY29uc3Qgdm9pZCAqYnVmLCBz aXplX3QgbGVuLCB1aW50NjRfdCBodmFsKSB7Cj4gKy8vLyAgICAgdW5zaWduZWQgY2hhciAqYnAg PSAodW5zaWduZWQgY2hhciAqKWJ1ZjsKPiArLy8vICAgICB1bnNpZ25lZCBjaGFyICpiZSA9IGJw ICsgbGVuOwo+ICsvLy8gICAgIHdoaWxlIChicCA8IGJlKSB7Cj4gKy8vLyAgICAgICAgIGh2YWwg Xj0gKHVpbnQ2NF90KSpicCsrOwo+ICsvLy8gICAgICAgICBodmFsICs9IChodmFsIDw8IDEpICsg KGh2YWwgPDwgNCkgKyAoaHZhbCA8PCA1KSArIChodmFsIDw8IDcpICsgKGh2YWwgPDwgOCkgKyAo aHZhbCA8PCA0MCk7Cj4gKy8vLyAgICAgfQo+ICsvLy8gICAgIHJldHVybiBodmFsOwo+ICsvLy8g fQo+ICsvLy8gYGBgCj4gKy8vLwo+ICsvLy8gIyBBcmd1bWVudHMKPiArLy8vICogYGRhdGFgIC0g VGhlIGRhdGEgdG8gaGFzaAo+ICsvLy8gKiBgaW5pdGAgLSBJbml0aWFsIGhhc2ggdmFsdWUgKHVz ZSBGTlYxQV82NF9JTklUIGZvciBmaXJzdCBoYXNoKQo+ICsvLy8KPiArLy8vICMgUmV0dXJucwo+ ICsvLy8gNjQtYml0IGhhc2ggdmFsdWUKPiArLy8vCj4gKy8vLyBOb3RlOiBUaGlzIGZ1bmN0aW9u IGFwcGVhcnMgdW51c2VkIGJ1dCBpcyBhY3R1YWxseSBjYWxsZWQgdmlhIGBmbnZfNjRhX3N0cmAg YmVsb3csCj4gKy8vLyB3aGljaCBwcm92aWRlcyB0aGUgcHJpbWFyeSBBUEkgZm9yIHN0cmluZyBo YXNoaW5nLiBCb3RoIGZ1bmN0aW9ucyBzaGFyZSB0aGUgY29yZQo+ICsvLy8gRk5WLTFhIGltcGxl bWVudGF0aW9uIGxvZ2ljLgo+ICsjW2lubGluZV0KPiArI1thbGxvdyhkZWFkX2NvZGUpXSAvLyBV c2VkIHZpYSBmbnZfNjRhX3N0ciB3cmFwcGVyCj4gK3B1YihjcmF0ZSkgZm4gZm52XzY0YShkYXRh OiAmW3U4XSwgaW5pdDogdTY0KSAtPiB1NjQgewo+ICsgICAgbGV0IG11dCBodmFsID0gaW5pdDsK PiArCj4gKyAgICBmb3IgJmJ5dGUgaW4gZGF0YSB7Cj4gKyAgICAgICAgaHZhbCBePSBieXRlIGFz IHU2NDsKPiArICAgICAgICAvLyBGTlYgbWFnaWMgcHJpbWUgbXVsdGlwbGljYXRpb24gZG9uZSB2 aWEgc2hpZnRzIGFuZCBhZGRzCj4gKyAgICAgICAgLy8gVGhpcyBpcyBlcXVpdmFsZW50IHRvOiBo dmFsICo9IDB4MTAwMDAwMDAxYjMgKEZOViA2NC1iaXQgcHJpbWUpCj4gKyAgICAgICAgaHZhbCA9 IGh2YWwud3JhcHBpbmdfYWRkKAo+ICsgICAgICAgICAgICAoaHZhbCA8PCAxKQo+ICsgICAgICAg ICAgICAgICAgLndyYXBwaW5nX2FkZChodmFsIDw8IDQpCj4gKyAgICAgICAgICAgICAgICAud3Jh cHBpbmdfYWRkKGh2YWwgPDwgNSkKPiArICAgICAgICAgICAgICAgIC53cmFwcGluZ19hZGQoaHZh bCA8PCA3KQo+ICsgICAgICAgICAgICAgICAgLndyYXBwaW5nX2FkZChodmFsIDw8IDgpCj4gKyAg ICAgICAgICAgICAgICAud3JhcHBpbmdfYWRkKGh2YWwgPDwgNDApLAo+ICsgICAgICAgICk7Cj4g KyAgICB9Cj4gKwo+ICsgICAgaHZhbAo+ICt9Cj4gKwo+ICsvLy8gSGFzaCBhIG51bGwtdGVybWlu YXRlZCBzdHJpbmcgKGluY2x1ZGVzIHRoZSBudWxsIGJ5dGUpCj4gKy8vLwo+ICsvLy8gVGhlIEMg aW1wbGVtZW50YXRpb24gaW5jbHVkZXMgdGhlIG51bGwgdGVybWluYXRvciBpbiB0aGUgaGFzaDoK PiArLy8vIGBmbnZfNjRhX2J1Zihub2RlLCBub2RlX2xlbiwgRk5WMUFfNjRfSU5JVClgIHdoZXJl IG5vZGVfbGVuIGluY2x1ZGVzIHRoZSAnXDAnCj4gKy8vLwo+ICsvLy8gVGhpcyBmdW5jdGlvbiBh ZGRzIGEgbnVsbCBieXRlIHRvIG1hdGNoIHRoYXQgYmVoYXZpb3IuCj4gKyNbaW5saW5lXQo+ICtw dWIoY3JhdGUpIGZuIGZudl82NGFfc3RyKHM6ICZzdHIpIC0+IHU2NCB7Cj4gKyAgICBsZXQgYnl0 ZXMgPSBzLmFzX2J5dGVzKCk7Cj4gKyAgICBsZXQgbXV0IGh2YWwgPSBGTlYxQV82NF9JTklUOwo+ ICsKPiArICAgIGZvciAmYnl0ZSBpbiBieXRlcyB7Cj4gKyAgICAgICAgaHZhbCBePSBieXRlIGFz IHU2NDsKPiArICAgICAgICBodmFsID0gaHZhbC53cmFwcGluZ19hZGQoCj4gKyAgICAgICAgICAg IChodmFsIDw8IDEpCj4gKyAgICAgICAgICAgICAgICAud3JhcHBpbmdfYWRkKGh2YWwgPDwgNCkK PiArICAgICAgICAgICAgICAgIC53cmFwcGluZ19hZGQoaHZhbCA8PCA1KQo+ICsgICAgICAgICAg ICAgICAgLndyYXBwaW5nX2FkZChodmFsIDw8IDcpCj4gKyAgICAgICAgICAgICAgICAud3JhcHBp bmdfYWRkKGh2YWwgPDwgOCkKPiArICAgICAgICAgICAgICAgIC53cmFwcGluZ19hZGQoaHZhbCA8 PCA0MCksCj4gKyAgICAgICAgKTsKPiArICAgIH0KPiArCj4gKyAgICAvLyBIYXNoIHRoZSBudWxs IHRlcm1pbmF0b3IgKEMgY29tcGF0aWJpbGl0eTogb3JpZ2luYWwgWE9ScyB3aXRoIDAgd2hpY2gg aXMgYSBuby1vcCkKPiArICAgIC8vIFdlIHNraXAgdGhlIG5vLW9wIFhPUiBhbmQgcHJvY2VlZCBk aXJlY3RseSB0byB0aGUgZmluYWwgYXZhbGFuY2hlCj4gKyAgICBodmFsLndyYXBwaW5nX2FkZCgK PiArICAgICAgICAoaHZhbCA8PCAxKQo+ICsgICAgICAgICAgICAud3JhcHBpbmdfYWRkKGh2YWwg PDwgNCkKPiArICAgICAgICAgICAgLndyYXBwaW5nX2FkZChodmFsIDw8IDUpCj4gKyAgICAgICAg ICAgIC53cmFwcGluZ19hZGQoaHZhbCA8PCA3KQo+ICsgICAgICAgICAgICAud3JhcHBpbmdfYWRk KGh2YWwgPDwgOCkKPiArICAgICAgICAgICAgLndyYXBwaW5nX2FkZChodmFsIDw8IDQwKSwKPiAr ICAgICkKPiArfQo+ICsKPiArI1tjZmcodGVzdCldCj4gK21vZCB0ZXN0cyB7Cj4gKyAgICB1c2Ug c3VwZXI6Oio7Cj4gKwo+ICsgICAgI1t0ZXN0XQo+ICsgICAgZm4gdGVzdF9mbnYxYV9pbml0KCkg ewo+ICsgICAgICAgIC8vIFRlc3QgdGhhdCBpbml0IGNvbnN0YW50IG1hdGNoZXMgQyBpbXBsZW1l bnRhdGlvbgo+ICsgICAgICAgIGFzc2VydF9lcSEoRk5WMUFfNjRfSU5JVCwgMHhjYmYyOWNlNDg0 MjIyMzI1KTsKPiArICAgIH0KPiArCj4gKyAgICAjW3Rlc3RdCj4gKyAgICBmbiB0ZXN0X2ZudjFh X2VtcHR5KCkgewo+ICsgICAgICAgIC8vIEVtcHR5IHN0cmluZyB3aXRoIG51bGwgdGVybWluYXRv cgo+ICsgICAgICAgIGxldCBoYXNoID0gZm52XzY0YSgmWzBdLCBGTlYxQV82NF9JTklUKTsKPiAr ICAgICAgICBhc3NlcnRfbmUhKGhhc2gsIEZOVjFBXzY0X0lOSVQpOyAvLyBTaG91bGQgYmUgZGlm ZmVyZW50IGZyb20gaW5pdAo+ICsgICAgfQo+ICsKPiArICAgICNbdGVzdF0KPiArICAgIGZuIHRl c3RfZm52MWFfY29uc2lzdGVuY3koKSB7Cj4gKyAgICAgICAgLy8gU2FtZSBpbnB1dCBzaG91bGQg cHJvZHVjZSBzYW1lIG91dHB1dAo+ICsgICAgICAgIGxldCBkYXRhID0gYiJ0ZXN0IjsKPiArICAg ICAgICBsZXQgaGFzaDEgPSBmbnZfNjRhKGRhdGEsIEZOVjFBXzY0X0lOSVQpOwo+ICsgICAgICAg IGxldCBoYXNoMiA9IGZudl82NGEoZGF0YSwgRk5WMUFfNjRfSU5JVCk7Cj4gKyAgICAgICAgYXNz ZXJ0X2VxIShoYXNoMSwgaGFzaDIpOwo+ICsgICAgfQo+ICsKPiArICAgICNbdGVzdF0KPiArICAg IGZuIHRlc3RfZm52MWFfZGlmZmVyZW50X2RhdGEoKSB7Cj4gKyAgICAgICAgLy8gRGlmZmVyZW50 IGlucHV0IHNob3VsZCAodXN1YWxseSkgcHJvZHVjZSBkaWZmZXJlbnQgb3V0cHV0Cj4gKyAgICAg ICAgbGV0IGhhc2gxID0gZm52XzY0YShiInRlc3QxIiwgRk5WMUFfNjRfSU5JVCk7Cj4gKyAgICAg ICAgbGV0IGhhc2gyID0gZm52XzY0YShiInRlc3QyIiwgRk5WMUFfNjRfSU5JVCk7Cj4gKyAgICAg ICAgYXNzZXJ0X25lIShoYXNoMSwgaGFzaDIpOwo+ICsgICAgfQo+ICsKPiArICAgICNbdGVzdF0K PiArICAgIGZuIHRlc3RfZm52MWFfc3RyKCkgewo+ICsgICAgICAgIC8vIFRlc3Qgc3RyaW5nIGhh c2hpbmcgd2l0aCBudWxsIHRlcm1pbmF0b3IKPiArICAgICAgICBsZXQgaGFzaDEgPSBmbnZfNjRh X3N0cigibm9kZTEiKTsKPiArICAgICAgICBsZXQgaGFzaDIgPSBmbnZfNjRhX3N0cigibm9kZTEi KTsKPiArICAgICAgICBsZXQgaGFzaDMgPSBmbnZfNjRhX3N0cigibm9kZTIiKTsKPiArCj4gKyAg ICAgICAgYXNzZXJ0X2VxIShoYXNoMSwgaGFzaDIpOyAvLyBTYW1lIHN0cmluZyBzaG91bGQgaGFz aCB0aGUgc2FtZQo+ICsgICAgICAgIGFzc2VydF9uZSEoaGFzaDEsIGhhc2gzKTsgLy8gRGlmZmVy ZW50IHN0cmluZ3Mgc2hvdWxkIGhhc2ggZGlmZmVyZW50bHkKPiArICAgIH0KPiArCj4gKyAgICAj W3Rlc3RdCj4gKyAgICBmbiB0ZXN0X2ZudjFhX25vZGVfbmFtZXMoKSB7Cj4gKyAgICAgICAgLy8g VGVzdCB3aXRoIHR5cGljYWwgUHJveG1veCBub2RlIG5hbWVzCj4gKyAgICAgICAgbGV0IG5vZGVz ID0gdmVjIVsicHZlMSIsICJwdmUyIiwgInB2ZTMiXTsKPiArICAgICAgICBsZXQgbXV0IGhhc2hl cyA9IFZlYzo6bmV3KCk7Cj4gKwo+ICsgICAgICAgIGZvciBub2RlIGluICZub2RlcyB7Cj4gKyAg ICAgICAgICAgIGxldCBoYXNoID0gZm52XzY0YV9zdHIobm9kZSk7Cj4gKyAgICAgICAgICAgIGhh c2hlcy5wdXNoKGhhc2gpOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLy8gQWxsIGhhc2hl cyBzaG91bGQgYmUgdW5pcXVlCj4gKyAgICAgICAgZm9yIGkgaW4gMC4uaGFzaGVzLmxlbigpIHsK PiArICAgICAgICAgICAgZm9yIGogaW4gKGkgKyAxKS4uaGFzaGVzLmxlbigpIHsKPiArICAgICAg ICAgICAgICAgIGFzc2VydF9uZSEoCj4gKyAgICAgICAgICAgICAgICAgICAgaGFzaGVzW2ldLCBo YXNoZXNbal0sCj4gKyAgICAgICAgICAgICAgICAgICAgIkhhc2hlcyBmb3Ige30gYW5kIHt9IHNo b3VsZCBkaWZmZXIiLAo+ICsgICAgICAgICAgICAgICAgICAgIG5vZGVzW2ldLCBub2Rlc1tqXQo+ ICsgICAgICAgICAgICAgICAgKTsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArICAg IH0KPiArCj4gKyAgICAjW3Rlc3RdCj4gKyAgICBmbiB0ZXN0X2ZudjFhX2NoYWluaW5nKCkgewo+ ICsgICAgICAgIC8vIFRlc3QgdGhhdCB3ZSBjYW4gY2hhaW4gaGFzaGVzCj4gKyAgICAgICAgbGV0 IGRhdGExID0gYiJmaXJzdCI7Cj4gKyAgICAgICAgbGV0IGRhdGEyID0gYiJzZWNvbmQiOwo+ICsK PiArICAgICAgICBsZXQgaGFzaDEgPSBmbnZfNjRhKGRhdGExLCBGTlYxQV82NF9JTklUKTsKPiAr ICAgICAgICBsZXQgaGFzaDIgPSBmbnZfNjRhKGRhdGEyLCBoYXNoMSk7IC8vIFVzZSBwcmV2aW91 cyBoYXNoIGFzIGluaXQKPiArCj4gKyAgICAgICAgLy8gU2hvdWxkIHByb2R1Y2UgYSBkZXRlcm1p bmlzdGljIHJlc3VsdAo+ICsgICAgICAgIGxldCBoYXNoMV9hZ2FpbiA9IGZudl82NGEoZGF0YTEs IEZOVjFBXzY0X0lOSVQpOwo+ICsgICAgICAgIGxldCBoYXNoMl9hZ2FpbiA9IGZudl82NGEoZGF0 YTIsIGhhc2gxX2FnYWluKTsKPiArCj4gKyAgICAgICAgYXNzZXJ0X2VxIShoYXNoMiwgaGFzaDJf YWdhaW4pOwo+ICsgICAgfQo+ICt9Cj4gZGlmZiAtLWdpdCBhL3NyYy9wbXhjZnMtcnMvcG14Y2Zz LWxvZ2dlci9zcmMvbGliLnJzIGIvc3JjL3BteGNmcy1ycy9wbXhjZnMtbG9nZ2VyL3NyYy9saWIu cnMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwLi45NjRmMGIzYQo+IC0t LSAvZGV2L251bGwKPiArKysgYi9zcmMvcG14Y2ZzLXJzL3BteGNmcy1sb2dnZXIvc3JjL2xpYi5y cwo+IEBAIC0wLDAgKzEsMjcgQEAKPiArLy8vIENsdXN0ZXIgTG9nIEltcGxlbWVudGF0aW9uCj4g Ky8vLwo+ICsvLy8gVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBjbHVzdGVyLXdpZGUgbG9nIHN5c3Rl bSBjb21wYXRpYmxlIHdpdGggdGhlIEMgaW1wbGVtZW50YXRpb24uCj4gKy8vLyBJdCBtYWludGFp bnMgYSByaW5nIGJ1ZmZlciBvZiBsb2cgZW50cmllcyB0aGF0IGNhbiBiZSBtZXJnZWQgZnJvbSBt dWx0aXBsZSBub2RlcywKPiArLy8vIGRlZHVwbGljYXRlZCwgYW5kIGV4cG9ydGVkIHRvIEpTT04u Cj4gKy8vLwo+ICsvLy8gS2V5IGZlYXR1cmVzOgo+ICsvLy8gLSBSaW5nIGJ1ZmZlciBzdG9yYWdl IGZvciBlZmZpY2llbnQgbWVtb3J5IHVzYWdlCj4gKy8vLyAtIEZOVi0xYSBoYXNoaW5nIGZvciBu b2RlIGFuZCBpZGVudCB0cmFja2luZwo+ICsvLy8gLSBEZWR1cGxpY2F0aW9uIGFjcm9zcyBub2Rl cwo+ICsvLy8gLSBUaW1lLWJhc2VkIHNvcnRpbmcKPiArLy8vIC0gTXVsdGktbm9kZSBsb2cgbWVy Z2luZwo+ICsvLy8gLSBKU09OIGV4cG9ydCBmb3Igd2ViIFVJCj4gKy8vIEludGVybmFsIG1vZHVs ZXMgKG5vdCBleHBvc2VkKQo+ICttb2QgY2x1c3Rlcl9sb2c7Cj4gK21vZCBlbnRyeTsKPiArbW9k IGhhc2g7Cj4gK21vZCByaW5nX2J1ZmZlcjsKPiArCj4gKy8vIFB1YmxpYyBBUEkgLSBvbmx5IGV4 cG9zZSB3aGF0J3MgbmVlZGVkIGV4dGVybmFsbHkKPiArcHViIHVzZSBjbHVzdGVyX2xvZzo6Q2x1 c3RlckxvZzsKPiArCj4gKy8vIFJlLWV4cG9ydCB0eXBlcyBvbmx5IGZvciB0ZXN0aW5nIG9yIGlu dGVybmFsIGNyYXRlIHVzZQo+ICsjW2RvYyhoaWRkZW4pXQo+ICtwdWIgdXNlIGVudHJ5OjpMb2dF bnRyeTsKPiArI1tkb2MoaGlkZGVuKV0KPiArcHViIHVzZSByaW5nX2J1ZmZlcjo6UmluZ0J1ZmZl cjsKPiBkaWZmIC0tZ2l0IGEvc3JjL3BteGNmcy1ycy9wbXhjZnMtbG9nZ2VyL3NyYy9yaW5nX2J1 ZmZlci5ycyBiL3NyYy9wbXhjZnMtcnMvcG14Y2ZzLWxvZ2dlci9zcmMvcmluZ19idWZmZXIucnMK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwLi40ZjZkYjYzZQo+IC0tLSAv ZGV2L251bGwKPiArKysgYi9zcmMvcG14Y2ZzLXJzL3BteGNmcy1sb2dnZXIvc3JjL3JpbmdfYnVm ZmVyLnJzCj4gQEAgLTAsMCArMSw1ODEgQEAKPiArLy8vIFJpbmcgQnVmZmVyIEltcGxlbWVudGF0 aW9uIGZvciBDbHVzdGVyIExvZwo+ICsvLy8KPiArLy8vIFRoaXMgbW9kdWxlIGltcGxlbWVudHMg YSBjaXJjdWxhciBidWZmZXIgZm9yIHN0b3JpbmcgbG9nIGVudHJpZXMsCj4gKy8vLyBtYXRjaGlu ZyB0aGUgQyBpbXBsZW1lbnRhdGlvbidzIGNsb2dfYmFzZV90IHN0cnVjdHVyZS4KPiArdXNlIHN1 cGVyOjplbnRyeTo6TG9nRW50cnk7Cj4gK3VzZSBzdXBlcjo6aGFzaDo6Zm52XzY0YV9zdHI7Cj4g K3VzZSBhbnlob3c6OntiYWlsLCBSZXN1bHR9Owo+ICt1c2Ugc3RkOjpjb2xsZWN0aW9uczo6VmVj RGVxdWU7Cj4gKwo+ICtwdWIoY3JhdGUpIGNvbnN0IENMT0dfREVGQVVMVF9TSVpFOiB1c2l6ZSA9 IDUgKiAxMDI0ICogMTAyNDsgLy8gNU1CCj4gK3B1YihjcmF0ZSkgY29uc3QgQ0xPR19NQVhfRU5U UllfU0laRTogdXNpemUgPSA4MTkyICsgNDA5NjsKClRoZXNlIGNvbnN0YW50cyBkb24ndCBtYXRj aCB0aGUgQyBjb25zdGFudHMKCiNkZWZpbmUgQ0xPR19ERUZBVUxUX1NJWkUgKDgxOTIgKiAxNikK I2RlZmluZSBDTE9HX01BWF9FTlRSWV9TSVpFIDQwOTYKClRoYXQgbGlrZWx5IGFmZmVjdHMgY2Fw YWNpdHkgc2VtYW50aWNzLCBtZXJnZSBsaW1pdHMsIGFuZCB0aGUgYmluYXJ5CmZvcm1hdD8KCj4g Kwo+ICsvLy8gUmluZyBidWZmZXIgZm9yIGxvZyBlbnRyaWVzCj4gKy8vLwo+ICsvLy8gVGhpcyBp cyBhIHNpbXBsaWZpZWQgUnVzdCB2ZXJzaW9uIG9mIHRoZSBDIGltcGxlbWVudGF0aW9uJ3Mgcmlu ZyBidWZmZXIuCj4gKy8vLyBUaGUgQyB2ZXJzaW9uIHVzZXMgYSByYXcgYnl0ZSBidWZmZXIgd2l0 aCBtYW51YWwgcG9pbnRlciBhcml0aG1ldGljLAo+ICsvLy8gYnV0IHdlIHVzZSBhIFZlY0RlcXVl IGZvciBzYWZldHkgYW5kIHNpbXBsaWNpdHkgd2hpbGUgbWFpbnRhaW5pbmcKPiArLy8vIHRoZSBz YW1lIGNvbmNlcHR1YWwgYmVoYXZpb3IuCj4gKy8vLwo+ICsvLy8gQyBzdHJ1Y3R1cmUgKGxvZ2dl ci5jOjY0LTY4KToKPiArLy8vIGBgYGMKPiArLy8vIHN0cnVjdCBjbG9nX2Jhc2Ugewo+ICsvLy8g ICAgIHVpbnQzMl90IHNpemU7ICAgIC8vIFRvdGFsIGJ1ZmZlciBzaXplCj4gKy8vLyAgICAgdWlu dDMyX3QgY3BvczsgICAgLy8gQ3VycmVudCBwb3NpdGlvbgo+ICsvLy8gICAgIGNoYXIgZGF0YVtd OyAgICAgIC8vIFZhcmlhYmxlIGxlbmd0aCBkYXRhCj4gKy8vLyB9Owo+ICsvLy8gYGBgCj4gKyNb ZGVyaXZlKERlYnVnLCBDbG9uZSldCj4gK3B1YiBzdHJ1Y3QgUmluZ0J1ZmZlciB7Cj4gKyAgICAv Ly8gTWF4aW11bSBjYXBhY2l0eSBpbiBieXRlcwo+ICsgICAgY2FwYWNpdHk6IHVzaXplLAo+ICsK PiArICAgIC8vLyBDdXJyZW50IHNpemUgaW4gYnl0ZXMgKGFwcHJveGltYXRlKQo+ICsgICAgY3Vy cmVudF9zaXplOiB1c2l6ZSwKPiArCj4gKyAgICAvLy8gRW50cmllcyBzdG9yZWQgaW4gdGhlIGJ1 ZmZlciAobmV3ZXN0IGZpcnN0KQo+ICsgICAgLy8vIFdlIHVzZSBWZWNEZXF1ZSBmb3IgZWZmaWNp ZW50IHB1c2gvcG9wIGF0IGJvdGggZW5kcwo+ICsgICAgZW50cmllczogVmVjRGVxdWU8TG9nRW50 cnk+LAo+ICt9Cj4gKwo+ICtpbXBsIFJpbmdCdWZmZXIgewo+ICsgICAgLy8vIENyZWF0ZSBhIG5l dyByaW5nIGJ1ZmZlciB3aXRoIHNwZWNpZmllZCBjYXBhY2l0eQo+ICsgICAgcHViIGZuIG5ldyhj YXBhY2l0eTogdXNpemUpIC0+IFNlbGYgewo+ICsgICAgICAgIC8vIEVuc3VyZSBtaW5pbXVtIGNh cGFjaXR5Cj4gKyAgICAgICAgbGV0IGNhcGFjaXR5ID0gaWYgY2FwYWNpdHkgPCBDTE9HX01BWF9F TlRSWV9TSVpFICogMTAgewo+ICsgICAgICAgICAgICBDTE9HX0RFRkFVTFRfU0laRQo+ICsgICAg ICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgIGNhcGFjaXR5Cj4gKyAgICAgICAgfTsKPiArCj4g KyAgICAgICAgU2VsZiB7Cj4gKyAgICAgICAgICAgIGNhcGFjaXR5LAo+ICsgICAgICAgICAgICBj dXJyZW50X3NpemU6IDAsCj4gKyAgICAgICAgICAgIGVudHJpZXM6IFZlY0RlcXVlOjpuZXcoKSwK PiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIEFkZCBhbiBlbnRyeSB0byB0aGUg YnVmZmVyCj4gKyAgICAvLy8KPiArICAgIC8vLyBNYXRjaGVzIEMncyBgY2xvZ19jb3B5YCBmdW5j dGlvbiAobG9nZ2VyLmM6MjA4LTIxOCkgd2hpY2ggY2FsbHMKPiArICAgIC8vLyBgY2xvZ19hbGxv Y19lbnRyeWAgKGxvZ2dlci5jOjc2LTEwMikgdG8gYWxsb2NhdGUgc3BhY2UgaW4gdGhlIHJpbmcg YnVmZmVyLgo+ICsgICAgcHViIGZuIGFkZF9lbnRyeSgmbXV0IHNlbGYsIGVudHJ5OiAmTG9nRW50 cnkpIC0+IFJlc3VsdDwoKT4gewo+ICsgICAgICAgIGxldCBlbnRyeV9zaXplID0gZW50cnkuYWxp Z25lZF9zaXplKCk7Cj4gKwo+ICsgICAgICAgIC8vIE1ha2Ugcm9vbSBpZiBuZWVkZWQgKHJlbW92 ZSBvbGRlc3QgZW50cmllcykKPiArICAgICAgICB3aGlsZSBzZWxmLmN1cnJlbnRfc2l6ZSArIGVu dHJ5X3NpemUgPiBzZWxmLmNhcGFjaXR5ICYmICFzZWxmLmVudHJpZXMuaXNfZW1wdHkoKSB7Cj4g KyAgICAgICAgICAgIGlmIGxldCBTb21lKG9sZF9lbnRyeSkgPSBzZWxmLmVudHJpZXMucG9wX2Jh Y2soKSB7Cj4gKyAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRfc2l6ZSA9IHNlbGYuY3VycmVu dF9zaXplLnNhdHVyYXRpbmdfc3ViKG9sZF9lbnRyeS5hbGlnbmVkX3NpemUoKSk7Cj4gKyAgICAg ICAgICAgIH0KPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIC8vIEFkZCBuZXcgZW50cnkgYXQg dGhlIGZyb250IChuZXdlc3QgZmlyc3QpCj4gKyAgICAgICAgc2VsZi5lbnRyaWVzLnB1c2hfZnJv bnQoZW50cnkuY2xvbmUoKSk7Cj4gKyAgICAgICAgc2VsZi5jdXJyZW50X3NpemUgKz0gZW50cnlf c2l6ZTsKPiArCj4gKyAgICAgICAgT2soKCkpCj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIENoZWNr IGlmIGJ1ZmZlciBpcyBuZWFyIGZ1bGwgKD45MCUgY2FwYWNpdHkpCj4gKyAgICBwdWIgZm4gaXNf bmVhcl9mdWxsKCZzZWxmKSAtPiBib29sIHsKPiArICAgICAgICBzZWxmLmN1cnJlbnRfc2l6ZSA+ IChzZWxmLmNhcGFjaXR5ICogOSAvIDEwKQo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBDaGVjayBp ZiBidWZmZXIgaXMgZW1wdHkKPiArICAgIHB1YiBmbiBpc19lbXB0eSgmc2VsZikgLT4gYm9vbCB7 Cj4gKyAgICAgICAgc2VsZi5lbnRyaWVzLmlzX2VtcHR5KCkKPiArICAgIH0KPiArCj4gKyAgICAv Ly8gR2V0IG51bWJlciBvZiBlbnRyaWVzCj4gKyAgICBwdWIgZm4gbGVuKCZzZWxmKSAtPiB1c2l6 ZSB7Cj4gKyAgICAgICAgc2VsZi5lbnRyaWVzLmxlbigpCj4gKyAgICB9Cj4gKwo+ICsgICAgLy8v IEdldCBidWZmZXIgY2FwYWNpdHkKPiArICAgIHB1YiBmbiBjYXBhY2l0eSgmc2VsZikgLT4gdXNp emUgewo+ICsgICAgICAgIHNlbGYuY2FwYWNpdHkKPiArICAgIH0KPiArCj4gKyAgICAvLy8gSXRl cmF0ZSBvdmVyIGVudHJpZXMgKG5ld2VzdCBmaXJzdCkKPiArICAgIHB1YiBmbiBpdGVyKCZzZWxm KSAtPiBpbXBsIEl0ZXJhdG9yPEl0ZW0gPSAmTG9nRW50cnk+IHsKPiArICAgICAgICBzZWxmLmVu dHJpZXMuaXRlcigpCj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIFNvcnQgZW50cmllcyBieSB0aW1l LCBub2RlX2RpZ2VzdCwgYW5kIHVpZAo+ICsgICAgLy8vCj4gKyAgICAvLy8gTWF0Y2hlcyBDJ3Mg YGNsb2dfc29ydGAgZnVuY3Rpb24gKGxvZ2dlci5jOjMyMS0zNTUpCj4gKyAgICAvLy8KPiArICAg IC8vLyBDIHVzZXMgR1RyZWUgd2l0aCBjdXN0b20gY29tcGFyaXNvbiBmdW5jdGlvbiBgY2xvZ19l bnRyeV9zb3J0X2ZuYAo+ICsgICAgLy8vIChsb2dnZXIuYzoyOTctMzEwKToKPiArICAgIC8vLyBg YGBjCj4gKyAgICAvLy8gaWYgKGVudHJ5MS0+dGltZSAhPSBlbnRyeTItPnRpbWUpIHsKPiArICAg IC8vLyAgICAgcmV0dXJuIGVudHJ5MS0+dGltZSAtIGVudHJ5Mi0+dGltZTsKPiArICAgIC8vLyB9 Cj4gKyAgICAvLy8gaWYgKGVudHJ5MS0+bm9kZV9kaWdlc3QgIT0gZW50cnkyLT5ub2RlX2RpZ2Vz dCkgewo+ICsgICAgLy8vICAgICByZXR1cm4gZW50cnkxLT5ub2RlX2RpZ2VzdCAtIGVudHJ5Mi0+ bm9kZV9kaWdlc3Q7Cj4gKyAgICAvLy8gfQo+ICsgICAgLy8vIHJldHVybiBlbnRyeTEtPnVpZCAt IGVudHJ5Mi0+dWlkOwo+ICsgICAgLy8vIGBgYAo+ICsgICAgcHViIGZuIHNvcnQoJnNlbGYpIC0+ IFJlc3VsdDxTZWxmPiB7Cj4gKyAgICAgICAgbGV0IG11dCBuZXdfYnVmZmVyID0gU2VsZjo6bmV3 KHNlbGYuY2FwYWNpdHkpOwo+ICsKPiArICAgICAgICAvLyBDb2xsZWN0IGFuZCBzb3J0IGVudHJp ZXMKPiArICAgICAgICBsZXQgbXV0IHNvcnRlZDogVmVjPExvZ0VudHJ5PiA9IHNlbGYuZW50cmll cy5pdGVyKCkuY2xvbmVkKCkuY29sbGVjdCgpOwo+ICsKPiArICAgICAgICAvLyBTb3J0IGJ5IHRp bWUgKGFzY2VuZGluZyksIHRoZW4gbm9kZV9kaWdlc3QsIHRoZW4gdWlkCj4gKyAgICAgICAgc29y dGVkLnNvcnRfYnlfa2V5KHxlfCAoZS50aW1lLCBlLm5vZGVfZGlnZXN0LCBlLnVpZCkpOwo+ICsK PiArICAgICAgICAvLyBBZGQgc29ydGVkIGVudHJpZXMgdG8gbmV3IGJ1ZmZlcgo+ICsgICAgICAg IC8vIFNpbmNlIGFkZF9lbnRyeSBwdXNoZXMgdG8gZnJvbnQsIHdlIGFkZCBpbiBmb3J3YXJkIG9y ZGVyIHRvIGdldCBuZXdlc3QtZmlyc3QKPiArICAgICAgICAvLyBzb3J0ZWQgPSBbb2xkZXN0Li4u bmV3ZXN0XSwgYWRkX2VudHJ5IHB1c2hlcyB0byBmcm9udCwgc286Cj4gKyAgICAgICAgLy8gLSBB ZGQgb2xkZXN0OiBbb2xkZXN0XQo+ICsgICAgICAgIC8vIC0gQWRkIG5leHQ6IFtuZXh0LCBvbGRl c3RdCj4gKyAgICAgICAgLy8gLSBBZGQgbmV3ZXN0OiBbbmV3ZXN0LCBuZXh0LCBvbGRlc3RdCj4g KyAgICAgICAgZm9yIGVudHJ5IGluIHNvcnRlZC5pdGVyKCkgewo+ICsgICAgICAgICAgICBuZXdf YnVmZmVyLmFkZF9lbnRyeShlbnRyeSk/Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgT2so bmV3X2J1ZmZlcikKPiArICAgIH0KPiArCj4gKyAgICAvLy8gRHVtcCBidWZmZXIgdG8gSlNPTiBm b3JtYXQKPiArICAgIC8vLwo+ICsgICAgLy8vIE1hdGNoZXMgQydzIGBjbG9nX2R1bXBfanNvbmAg ZnVuY3Rpb24gKGxvZ2dlci5jOjEzOS0xOTkpCj4gKyAgICAvLy8KPiArICAgIC8vLyAjIEFyZ3Vt ZW50cwo+ICsgICAgLy8vICogYGlkZW50X2ZpbHRlcmAgLSBPcHRpb25hbCBpZGVudCBmaWx0ZXIg KHVzZXIgZmlsdGVyKQo+ICsgICAgLy8vICogYG1heF9lbnRyaWVzYCAtIE1heGltdW0gbnVtYmVy IG9mIGVudHJpZXMgdG8gaW5jbHVkZQo+ICsgICAgcHViIGZuIGR1bXBfanNvbigmc2VsZiwgaWRl bnRfZmlsdGVyOiBPcHRpb248JnN0cj4sIG1heF9lbnRyaWVzOiB1c2l6ZSkgLT4gU3RyaW5nIHsK PiArICAgICAgICAvLyBDb21wdXRlIGlkZW50IGRpZ2VzdCBpZiBmaWx0ZXIgaXMgcHJvdmlkZWQK PiArICAgICAgICBsZXQgaWRlbnRfZGlnZXN0ID0gaWRlbnRfZmlsdGVyLm1hcChmbnZfNjRhX3N0 cik7Cj4gKwo+ICsgICAgICAgIGxldCBtdXQgZGF0YSA9IFZlYzo6bmV3KCk7Cj4gKyAgICAgICAg bGV0IG11dCBjb3VudCA9IDA7Cj4gKwo+ICsgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBlbnRyaWVz IChuZXdlc3QgZmlyc3QpCj4gKyAgICAgICAgZm9yIGVudHJ5IGluIHNlbGYuaXRlcigpIHsKPiAr ICAgICAgICAgICAgaWYgY291bnQgPj0gbWF4X2VudHJpZXMgewo+ICsgICAgICAgICAgICAgICAg YnJlYWs7Cj4gKyAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgIC8vIEFwcGx5IGlkZW50 IGZpbHRlciBpZiBzcGVjaWZpZWQKPiArICAgICAgICAgICAgaWYgbGV0IFNvbWUoZGlnZXN0KSA9 IGlkZW50X2RpZ2VzdCB7Cj4gKyAgICAgICAgICAgICAgICBpZiBkaWdlc3QgIT0gZW50cnkuaWRl bnRfZGlnZXN0IHsKPiArICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICAg ICAgICAgIH0KPiArICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgZGF0YS5wdXNoKGVu dHJ5LnRvX2pzb25fb2JqZWN0KCkpOwo+ICsgICAgICAgICAgICBjb3VudCArPSAxOwo+ICsgICAg ICAgIH0KPiArCj4gKyAgICAgICAgLy8gUmV2ZXJzZSB0byBzaG93IG9sZGVzdCBmaXJzdCAobWF0 Y2hpbmcgQyBiZWhhdmlvcikKPiArICAgICAgICBkYXRhLnJldmVyc2UoKTsKCkMgcHJpbnRzIGVu dHJpZXMgbmV3ZXN0IHRvIG9sZGVzdCAod2FsayBwcmV2IGZyb20gY3BvcykuClNob3VsZG50IHRo aXMgbGluZSBiZSByZW1vdmVkPwoKPiArCj4gKyAgICAgICAgbGV0IHJlc3VsdCA9IHNlcmRlX2pz b246Ompzb24hKHsKPiArICAgICAgICAgICAgImRhdGEiOiBkYXRhCj4gKyAgICAgICAgfSk7Cj4g Kwo+ICsgICAgICAgIHNlcmRlX2pzb246OnRvX3N0cmluZ19wcmV0dHkoJnJlc3VsdCkudW53cmFw X29yX2Vsc2UofF98ICJ7fSIudG9fc3RyaW5nKCkpCj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIER1 bXAgYnVmZmVyIGNvbnRlbnRzIChmb3IgZGVidWdnaW5nKQo+ICsgICAgLy8vCj4gKyAgICAvLy8g TWF0Y2hlcyBDJ3MgYGNsb2dfZHVtcGAgZnVuY3Rpb24gKGxvZ2dlci5jOjEyMi0xMzcpCj4gKyAg ICAjW2FsbG93KGRlYWRfY29kZSldCj4gKyAgICBwdWIgZm4gZHVtcCgmc2VsZikgewo+ICsgICAg ICAgIGZvciAoaWR4LCBlbnRyeSkgaW4gc2VsZi5lbnRyaWVzLml0ZXIoKS5lbnVtZXJhdGUoKSB7 Cj4gKyAgICAgICAgICAgIHByaW50bG4hKAo+ICsgICAgICAgICAgICAgICAgIlt7fV0gdWlkPXs6 MDh4fSB0aW1lPXt9IG5vZGU9e317e3s6MDE2WH19fSB0YWc9e31be317e3s6MDE2WH19fV06IHt9 IiwKPiArICAgICAgICAgICAgICAgIGlkeCwKPiArICAgICAgICAgICAgICAgIGVudHJ5LnVpZCwK PiArICAgICAgICAgICAgICAgIGVudHJ5LnRpbWUsCj4gKyAgICAgICAgICAgICAgICBlbnRyeS5u b2RlLAo+ICsgICAgICAgICAgICAgICAgZW50cnkubm9kZV9kaWdlc3QsCj4gKyAgICAgICAgICAg ICAgICBlbnRyeS50YWcsCj4gKyAgICAgICAgICAgICAgICBlbnRyeS5pZGVudCwKPiArICAgICAg ICAgICAgICAgIGVudHJ5LmlkZW50X2RpZ2VzdCwKPiArICAgICAgICAgICAgICAgIGVudHJ5Lm1l c3NhZ2UKPiArICAgICAgICAgICAgKTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAg Ly8vIFNlcmlhbGl6ZSB0byBDIGJpbmFyeSBmb3JtYXQgKGNsb2dfYmFzZV90KQo+ICsgICAgLy8v Cj4gKyAgICAvLy8gQmluYXJ5IGxheW91dCBtYXRjaGVzIEMgc3RydWN0dXJlOgo+ICsgICAgLy8v IGBgYGMKPiArICAgIC8vLyBzdHJ1Y3QgY2xvZ19iYXNlIHsKPiArICAgIC8vLyAgICAgdWludDMy X3Qgc2l6ZTsgICAgLy8gVG90YWwgYnVmZmVyIHNpemUKPiArICAgIC8vLyAgICAgdWludDMyX3Qg Y3BvczsgICAgLy8gQ3VycmVudCBwb3NpdGlvbiAob2Zmc2V0IHRvIG5ld2VzdCBlbnRyeSkKPiAr ICAgIC8vLyAgICAgY2hhciBkYXRhW107ICAgICAgLy8gRW50cnkgZGF0YQo+ICsgICAgLy8vIH07 Cj4gKyAgICAvLy8gYGBgCj4gKyAgICBwdWIoY3JhdGUpIGZuIHNlcmlhbGl6ZV9iaW5hcnkoJnNl bGYpIC0+IFZlYzx1OD4gewoKUGxlYXNlIHJlLWNoZWNrLCBidXQgaW4gQywgY2x1c3RlcmxvZ19n ZXRfc3RhdGUoKSByZXR1cm5zIGEgZnVsbAptZW1kdW1wIChhbGxvY2F0ZWQgcmluZyBidWZmZXIg Y2FwYWNpdHkpLCB3aXRoIGNwb3MgcG9pbnRpbmcgYXQgdGhlCm5ld2VzdCBlbnRyeSBvZmZzZXQg KG5vdCBhbHdheXMgOCkuIEFsc28gaW4gQywgZW50cnkubmV4dCBpcyBub3QgYQpwb2ludGVyIHRv IHRoZSBuZXh0L25ld2VyIGVudHJ5LCBpdOKAmXMgdGhlIGVuZCBvZmZzZXQgb2YgdGhpcyBlbnRy eQooZW50cnlfb2ZmICsgYWxpZ25lZF9zaXplKSwgdXNlZCB0byBmaW5kIHdoZXJlIHRoZSBuZXh0 IGVudHJ5CnNob3VsZCBiZSB3cml0dGVuLgoKPiArICAgICAgICAvLyBFbXB0eSBidWZmZXIgY2Fz ZQo+ICsgICAgICAgIGlmIHNlbGYuZW50cmllcy5pc19lbXB0eSgpIHsKPiArICAgICAgICAgICAg bGV0IG11dCBidWYgPSBWZWM6OndpdGhfY2FwYWNpdHkoOCk7Cj4gKyAgICAgICAgICAgIGJ1Zi5l eHRlbmRfZnJvbV9zbGljZSgmOHUzMi50b19sZV9ieXRlcygpKTsgLy8gc2l6ZSA9IGhlYWRlciBv bmx5Cj4gKyAgICAgICAgICAgIGJ1Zi5leHRlbmRfZnJvbV9zbGljZSgmMHUzMi50b19sZV9ieXRl cygpKTsgLy8gY3BvcyA9IDAgKGVtcHR5KQo+ICsgICAgICAgICAgICByZXR1cm4gYnVmOwo+ICsg ICAgICAgIH0KPiArCj4gKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRvdGFsIHNpemUgbmVlZGVkCj4g KyAgICAgICAgbGV0IG11dCBkYXRhX3NpemUgPSAwdXNpemU7Cj4gKyAgICAgICAgZm9yIGVudHJ5 IGluIHNlbGYuaXRlcigpIHsKPiArICAgICAgICAgICAgZGF0YV9zaXplICs9IGVudHJ5LmFsaWdu ZWRfc2l6ZSgpOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgbGV0IHRvdGFsX3NpemUgPSA4 ICsgZGF0YV9zaXplOyAvLyA4IGJ5dGVzIGhlYWRlciArIGRhdGEKPiArICAgICAgICBsZXQgbXV0 IGJ1ZiA9IFZlYzo6d2l0aF9jYXBhY2l0eSh0b3RhbF9zaXplKTsKPiArCj4gKyAgICAgICAgLy8g V3JpdGUgaGVhZGVyCj4gKyAgICAgICAgYnVmLmV4dGVuZF9mcm9tX3NsaWNlKCYodG90YWxfc2l6 ZSBhcyB1MzIpLnRvX2xlX2J5dGVzKCkpOyAvLyBzaXplCj4gKyAgICAgICAgYnVmLmV4dGVuZF9m cm9tX3NsaWNlKCY4dTMyLnRvX2xlX2J5dGVzKCkpOyAvLyBjcG9zIChwb2ludHMgdG8gZmlyc3Qg ZW50cnkgYXQgb2Zmc2V0IDgpCj4gKwo+ICsgICAgICAgIC8vIFdyaXRlIGVudHJpZXMgd2l0aCBs aW5rZWQgbGlzdCBzdHJ1Y3R1cmUKPiArICAgICAgICAvLyBFbnRyaWVzIGFyZSBpbiBuZXdlc3Qt Zmlyc3Qgb3JkZXIgaW4gb3VyIFZlY0RlcXVlCj4gKyAgICAgICAgbGV0IGVudHJ5X2NvdW50ID0g c2VsZi5lbnRyaWVzLmxlbigpOwo+ICsgICAgICAgIGxldCBtdXQgb2Zmc2V0cyA9IFZlYzo6d2l0 aF9jYXBhY2l0eShlbnRyeV9jb3VudCk7Cj4gKyAgICAgICAgbGV0IG11dCBjdXJyZW50X29mZnNl dCA9IDh1MzI7IC8vIFN0YXJ0IGFmdGVyIGhlYWRlcgo+ICsKPiArICAgICAgICAvLyBDYWxjdWxh dGUgb2Zmc2V0cyBmaXJzdAo+ICsgICAgICAgIGZvciBlbnRyeSBpbiBzZWxmLml0ZXIoKSB7Cj4g KyAgICAgICAgICAgIG9mZnNldHMucHVzaChjdXJyZW50X29mZnNldCk7Cj4gKyAgICAgICAgICAg IGN1cnJlbnRfb2Zmc2V0ICs9IGVudHJ5LmFsaWduZWRfc2l6ZSgpIGFzIHUzMjsKPiArICAgICAg ICB9Cj4gKwo+ICsgICAgICAgIC8vIFdyaXRlIGVudHJpZXMgd2l0aCBwcmV2L25leHQgcG9pbnRl cnMKPiArICAgICAgICAvLyBCdWlsZCBjaXJjdWxhciBsaW5rZWQgbGlzdDogbmV3ZXN0IC0+IC4u LiAtPiBvbGRlc3QKPiArICAgICAgICAvLyBFbnRyeSAwIChuZXdlc3QpIGhhcyBwcmV2IHBvaW50 aW5nIHRvIGVudHJ5IDEKPiArICAgICAgICAvLyBMYXN0IGVudHJ5IGhhcyBwcmV2ID0gMCAoZW5k IG9mIGxpc3QpCj4gKyAgICAgICAgZm9yIChpLCBlbnRyeSkgaW4gc2VsZi5pdGVyKCkuZW51bWVy YXRlKCkgewo+ICsgICAgICAgICAgICBsZXQgcHJldiA9IGlmIGkgKyAxIDwgZW50cnlfY291bnQg ewo+ICsgICAgICAgICAgICAgICAgb2Zmc2V0c1tpICsgMV0KPiArICAgICAgICAgICAgfSBlbHNl IHsKPiArICAgICAgICAgICAgICAgIDAKPiArICAgICAgICAgICAgfTsKPiArICAgICAgICAgICAg bGV0IG5leHQgPSBpZiBpID4gMCB7IG9mZnNldHNbaSAtIDFdIH0gZWxzZSB7IDAgfTsKPiArCj4g KyAgICAgICAgICAgIGxldCBlbnRyeV9ieXRlcyA9IGVudHJ5LnNlcmlhbGl6ZV9iaW5hcnkocHJl diwgbmV4dCk7Cj4gKyAgICAgICAgICAgIGJ1Zi5leHRlbmRfZnJvbV9zbGljZSgmZW50cnlfYnl0 ZXMpOwo+ICsKPiArICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmcgdG8gbWFpbnRhaW4gOC1ieXRl IGFsaWdubWVudAo+ICsgICAgICAgICAgICBsZXQgYWxpZ25lZF9zaXplID0gZW50cnkuYWxpZ25l ZF9zaXplKCk7Cj4gKyAgICAgICAgICAgIGxldCBwYWRkaW5nID0gYWxpZ25lZF9zaXplIC0gZW50 cnlfYnl0ZXMubGVuKCk7Cj4gKyAgICAgICAgICAgIGJ1Zi5yZXNpemUoYnVmLmxlbigpICsgcGFk ZGluZywgMCk7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBidWYKPiArICAgIH0KPiArCj4g KyAgICAvLy8gRGVzZXJpYWxpemUgZnJvbSBDIGJpbmFyeSBmb3JtYXQKPiArICAgIC8vLwo+ICsg ICAgLy8vIFBhcnNlcyBjbG9nX2Jhc2VfdCBzdHJ1Y3R1cmUgYW5kIGV4dHJhY3RzIGFsbCBlbnRy aWVzCj4gKyAgICBwdWIoY3JhdGUpIGZuIGRlc2VyaWFsaXplX2JpbmFyeShkYXRhOiAmW3U4XSkg LT4gUmVzdWx0PFNlbGY+IHsKPiArICAgICAgICBpZiBkYXRhLmxlbigpIDwgOCB7Cj4gKyAgICAg ICAgICAgIGJhaWwhKAo+ICsgICAgICAgICAgICAgICAgIkJ1ZmZlciB0b28gc21hbGw6IHt9IGJ5 dGVzIChuZWVkIGF0IGxlYXN0IDggZm9yIGhlYWRlcikiLAo+ICsgICAgICAgICAgICAgICAgZGF0 YS5sZW4oKQo+ICsgICAgICAgICAgICApOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLy8g UmVhZCBoZWFkZXIKPiArICAgICAgICBsZXQgc2l6ZSA9IHUzMjo6ZnJvbV9sZV9ieXRlcyhkYXRh WzAuLjRdLnRyeV9pbnRvKCk/KSBhcyB1c2l6ZTsKPiArICAgICAgICBsZXQgY3BvcyA9IHUzMjo6 ZnJvbV9sZV9ieXRlcyhkYXRhWzQuLjhdLnRyeV9pbnRvKCk/KSBhcyB1c2l6ZTsKPiArCj4gKyAg ICAgICAgaWYgc2l6ZSAhPSBkYXRhLmxlbigpIHsKPiArICAgICAgICAgICAgYmFpbCEoCj4gKyAg ICAgICAgICAgICAgICAiU2l6ZSBtaXNtYXRjaDogaGVhZGVyIHNheXMge30sIGdvdCB7fSBieXRl cyIsCj4gKyAgICAgICAgICAgICAgICBzaXplLAo+ICsgICAgICAgICAgICAgICAgZGF0YS5sZW4o KQo+ICsgICAgICAgICAgICApOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgaWYgY3BvcyA8 IDggfHwgY3BvcyA+PSBzaXplIHsKPiArICAgICAgICAgICAgLy8gRW1wdHkgYnVmZmVyIChjcG9z ID09IDApIG9yIGludmFsaWQKPiArICAgICAgICAgICAgaWYgY3BvcyA9PSAwIHsKPiArICAgICAg ICAgICAgICAgIHJldHVybiBPayhTZWxmOjpuZXcoc2l6ZSkpOwo+ICsgICAgICAgICAgICB9Cj4g KyAgICAgICAgICAgIGJhaWwhKCJJbnZhbGlkIGNwb3M6IHtjcG9zfSAoc2l6ZToge3NpemV9KSIp Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLy8gUGFyc2UgZW50cmllcyBzdGFydGluZyBm cm9tIGNwb3MsIHdhbGtpbmcgYmFja3dhcmRzIHZpYSBwcmV2IHBvaW50ZXJzCj4gKyAgICAgICAg bGV0IG11dCBlbnRyaWVzID0gVmVjRGVxdWU6Om5ldygpOwo+ICsgICAgICAgIGxldCBtdXQgY3Vy cmVudF9wb3MgPSBjcG9zOwo+ICsKCkMgaGFzIHdyYXAvb3ZlcndyaXRlIGd1YXJkcyB3aGVuIHdh bGtpbmcgcHJldi4KV2Ugc2hvdWxkIHByb2JhYmx5IG1pcnJvciB0aG9zZSBjaGVja3MgaGVyZSB0 b28KCj4gKyAgICAgICAgbG9vcCB7Cj4gKyAgICAgICAgICAgIGlmIGN1cnJlbnRfcG9zID09IDAg fHwgY3VycmVudF9wb3MgPCA4IHx8IGN1cnJlbnRfcG9zID49IHNpemUgewo+ICsgICAgICAgICAg ICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgIC8vIFBhcnNl IGVudHJ5IGF0IGN1cnJlbnRfcG9zCj4gKyAgICAgICAgICAgIGxldCBlbnRyeV9kYXRhID0gJmRh dGFbY3VycmVudF9wb3MuLl07Cj4gKyAgICAgICAgICAgIGxldCAoZW50cnksIHByZXYsIF9uZXh0 KSA9IExvZ0VudHJ5OjpkZXNlcmlhbGl6ZV9iaW5hcnkoZW50cnlfZGF0YSk/Owo+ICsKPiArICAg ICAgICAgICAgLy8gQWRkIHRvIGJhY2sgKHdlJ3JlIHdhbGtpbmcgYmFja3dhcmRzIGluIHRpbWUs IG5ld2VzdCB0byBvbGRlc3QpCj4gKyAgICAgICAgICAgIC8vIFZlY0RlcXVlIHNob3VsZCBlbmQg dXAgYXMgW25ld2VzdCwgLi4uLCBvbGRlc3RdCj4gKyAgICAgICAgICAgIGVudHJpZXMucHVzaF9i YWNrKGVudHJ5KTsKPiArCj4gKyAgICAgICAgICAgIGN1cnJlbnRfcG9zID0gcHJldiBhcyB1c2l6 ZTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIC8vIENyZWF0ZSByaW5nIGJ1ZmZlciB3aXRo IGVudHJpZXMKPiArICAgICAgICBsZXQgbXV0IHJpbmcgPSBTZWxmOjpuZXcoc2l6ZSk7Cj4gKyAg ICAgICAgcmluZy5lbnRyaWVzID0gZW50cmllczsKPiArICAgICAgICByaW5nLmN1cnJlbnRfc2l6 ZSA9IHNpemUgLSA4OyAvLyBBcHByb3hpbWF0ZQo+ICsKPiArICAgICAgICBPayhyaW5nKQo+ICsg ICAgfQo+ICt9Cj4gKwo+ICtpbXBsIERlZmF1bHQgZm9yIFJpbmdCdWZmZXIgewo+ICsgICAgZm4g ZGVmYXVsdCgpIC0+IFNlbGYgewo+ICsgICAgICAgIFNlbGY6Om5ldyhDTE9HX0RFRkFVTFRfU0la RSkKPiArICAgIH0KPiArfQo+ICsKPiArI1tjZmcodGVzdCldCj4gK21vZCB0ZXN0cyB7Cj4gKyAg ICB1c2Ugc3VwZXI6Oio7Cj4gKwo+ICsgICAgI1t0ZXN0XQo+ICsgICAgZm4gdGVzdF9yaW5nX2J1 ZmZlcl9jcmVhdGlvbigpIHsKPiArICAgICAgICBsZXQgYnVmZmVyID0gUmluZ0J1ZmZlcjo6bmV3 KENMT0dfREVGQVVMVF9TSVpFKTsKPiArICAgICAgICBhc3NlcnRfZXEhKGJ1ZmZlci5jYXBhY2l0 eSwgQ0xPR19ERUZBVUxUX1NJWkUpOwo+ICsgICAgICAgIGFzc2VydF9lcSEoYnVmZmVyLmxlbigp LCAwKTsKPiArICAgICAgICBhc3NlcnQhKGJ1ZmZlci5pc19lbXB0eSgpKTsKPiArICAgIH0KPiAr Cj4gKyAgICAjW3Rlc3RdCj4gKyAgICBmbiB0ZXN0X2FkZF9lbnRyeSgpIHsKPiArICAgICAgICBs ZXQgbXV0IGJ1ZmZlciA9IFJpbmdCdWZmZXI6Om5ldyhDTE9HX0RFRkFVTFRfU0laRSk7Cj4gKyAg ICAgICAgbGV0IGVudHJ5ID0gTG9nRW50cnk6OnBhY2soIm5vZGUxIiwgInJvb3QiLCAidGFnIiwg MCwgMTAwMCwgNiwgIm1lc3NhZ2UiKS51bndyYXAoKTsKPiArCj4gKyAgICAgICAgbGV0IHJlc3Vs dCA9IGJ1ZmZlci5hZGRfZW50cnkoJmVudHJ5KTsKPiArICAgICAgICBhc3NlcnQhKHJlc3VsdC5p c19vaygpKTsKPiArICAgICAgICBhc3NlcnRfZXEhKGJ1ZmZlci5sZW4oKSwgMSk7Cj4gKyAgICAg ICAgYXNzZXJ0ISghYnVmZmVyLmlzX2VtcHR5KCkpOwo+ICsgICAgfQo+ICsKPiArICAgICNbdGVz dF0KPiArICAgIGZuIHRlc3RfcmluZ19idWZmZXJfd3JhcGFyb3VuZCgpIHsKPiArICAgICAgICAv LyBDcmVhdGUgYSBidWZmZXIgd2l0aCBtaW5pbXVtIHJlcXVpcmVkIHNpemUgKENMT0dfTUFYX0VO VFJZX1NJWkUgKiAxMCkKPiArICAgICAgICAvLyBidXQgZmlsbCBpdCBiZXlvbmQgOTAlIHRvIHRy aWdnZXIgd3JhcGFyb3VuZAo+ICsgICAgICAgIGxldCBtdXQgYnVmZmVyID0gUmluZ0J1ZmZlcjo6 bmV3KENMT0dfTUFYX0VOVFJZX1NJWkUgKiAxMCk7Cj4gKwo+ICsgICAgICAgIC8vIEFkZCBtYW55 IHNtYWxsIGVudHJpZXMgdG8gZmlsbCB0aGUgYnVmZmVyCj4gKyAgICAgICAgLy8gRWFjaCBlbnRy eSBpcyBzbWFsbCwgc28gd2UgbmVlZCBtYW55IHRvIGZpbGwgdGhlIGJ1ZmZlcgo+ICsgICAgICAg IGxldCBpbml0aWFsX2NvdW50ID0gNTBfdXNpemU7Cj4gKyAgICAgICAgZm9yIGkgaW4gMC4uaW5p dGlhbF9jb3VudCB7Cj4gKyAgICAgICAgICAgIGxldCBlbnRyeSA9Cj4gKyAgICAgICAgICAgICAg ICBMb2dFbnRyeTo6cGFjaygibm9kZTEiLCAicm9vdCIsICJ0YWciLCAwLCAxMDAwICsgaSBhcyB1 MzIsIDYsICJtc2ciKS51bndyYXAoKTsKPiArICAgICAgICAgICAgbGV0IF8gPSBidWZmZXIuYWRk X2VudHJ5KCZlbnRyeSk7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICAvLyBBbGwgZW50cmll cyBzaG91bGQgZml0IGluaXRpYWxseQo+ICsgICAgICAgIGxldCBjb3VudF9iZWZvcmUgPSBidWZm ZXIubGVuKCk7Cj4gKyAgICAgICAgYXNzZXJ0X2VxIShjb3VudF9iZWZvcmUsIGluaXRpYWxfY291 bnQpOwo+ICsKPiArICAgICAgICAvLyBOb3cgYWRkIGVudHJpZXMgd2l0aCBsYXJnZSBtZXNzYWdl cyB0byB0cmlnZ2VyIHdyYXBhcm91bmQKPiArICAgICAgICAvLyBNYWtlIG1lc3NhZ2VzIGxhcmdl IGVub3VnaCB0byBmaWxsIHRoZSBidWZmZXIgYmV5b25kIGNhcGFjaXR5Cj4gKyAgICAgICAgbGV0 IGxhcmdlX21zZyA9ICJ4Ii5yZXBlYXQoNzAwMCk7IC8vIFZlcnkgbGFyZ2UgbWVzc2FnZSAoY2xv c2UgdG8gbWF4KQo+ICsgICAgICAgIGxldCBsYXJnZV9lbnRyaWVzX2NvdW50ID0gMjBfdXNpemU7 Cj4gKyAgICAgICAgZm9yIGkgaW4gMC4ubGFyZ2VfZW50cmllc19jb3VudCB7Cj4gKyAgICAgICAg ICAgIGxldCBlbnRyeSA9Cj4gKyAgICAgICAgICAgICAgICBMb2dFbnRyeTo6cGFjaygibm9kZTEi LCAicm9vdCIsICJ0YWciLCAwLCAyMDAwICsgaSBhcyB1MzIsIDYsICZsYXJnZV9tc2cpLnVud3Jh cCgpOwo+ICsgICAgICAgICAgICBsZXQgXyA9IGJ1ZmZlci5hZGRfZW50cnkoJmVudHJ5KTsKPiAr ICAgICAgICB9Cj4gKwo+ICsgICAgICAgIC8vIFNob3VsZCBoYXZlIHJlbW92ZWQgc29tZSBvbGQg ZW50cmllcyBkdWUgdG8gY2FwYWNpdHkgbGltaXRzCj4gKyAgICAgICAgYXNzZXJ0ISgKPiArICAg ICAgICAgICAgYnVmZmVyLmxlbigpIDwgY291bnRfYmVmb3JlICsgbGFyZ2VfZW50cmllc19jb3Vu dCwKPiArICAgICAgICAgICAgIkV4cGVjdGVkIHdyYXBhcm91bmQgdG8gcmVtb3ZlIG9sZCBlbnRy aWVzIChoYXZlIHt9IGVudHJpZXMsIGV4cGVjdGVkIDwge30pIiwKPiArICAgICAgICAgICAgYnVm ZmVyLmxlbigpLAo+ICsgICAgICAgICAgICBjb3VudF9iZWZvcmUgKyBsYXJnZV9lbnRyaWVzX2Nv dW50Cj4gKyAgICAgICAgKTsKPiArCj4gKyAgICAgICAgLy8gTmV3ZXN0IGVudHJ5IHNob3VsZCBi ZSBwcmVzZW50Cj4gKyAgICAgICAgbGV0IG5ld2VzdCA9IGJ1ZmZlci5pdGVyKCkubmV4dCgpLnVu d3JhcCgpOwo+ICsgICAgICAgIGFzc2VydF9lcSEobmV3ZXN0LnRpbWUsIDIwMDAgKyBsYXJnZV9l bnRyaWVzX2NvdW50IGFzIHUzMiAtIDEpOyAvLyBMYXN0IGFkZGVkIGVudHJ5Cj4gKyAgICB9Cj4g Kwo+ICsgICAgI1t0ZXN0XQo+ICsgICAgZm4gdGVzdF9zb3J0X2J5X3RpbWUoKSB7Cj4gKyAgICAg ICAgbGV0IG11dCBidWZmZXIgPSBSaW5nQnVmZmVyOjpuZXcoQ0xPR19ERUZBVUxUX1NJWkUpOwo+ ICsKPiArICAgICAgICAvLyBBZGQgZW50cmllcyBpbiByYW5kb20gdGltZSBvcmRlcgo+ICsgICAg ICAgIGxldCBfID0gYnVmZmVyLmFkZF9lbnRyeSgmTG9nRW50cnk6OnBhY2soIm5vZGUxIiwgInJv b3QiLCAidGFnIiwgMCwgMTAwMiwgNiwgImMiKS51bndyYXAoKSk7Cj4gKyAgICAgICAgbGV0IF8g PSBidWZmZXIuYWRkX2VudHJ5KCZMb2dFbnRyeTo6cGFjaygibm9kZTEiLCAicm9vdCIsICJ0YWci LCAwLCAxMDAwLCA2LCAiYSIpLnVud3JhcCgpKTsKPiArICAgICAgICBsZXQgXyA9IGJ1ZmZlci5h ZGRfZW50cnkoJkxvZ0VudHJ5OjpwYWNrKCJub2RlMSIsICJyb290IiwgInRhZyIsIDAsIDEwMDEs IDYsICJiIikudW53cmFwKCkpOwo+ICsKPiArICAgICAgICBsZXQgc29ydGVkID0gYnVmZmVyLnNv cnQoKS51bndyYXAoKTsKPiArCj4gKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBlbnRyaWVzIGFyZSBz b3J0ZWQgYnkgdGltZSAob2xkZXN0IGZpcnN0IGFmdGVyIHJldmVyc2luZykKPiArICAgICAgICBs ZXQgdGltZXM6IFZlYzx1MzI+ID0gc29ydGVkLml0ZXIoKS5tYXAofGV8IGUudGltZSkuY29sbGVj dCgpOwo+ICsgICAgICAgIGxldCBtdXQgdGltZXNfc29ydGVkID0gdGltZXMuY2xvbmUoKTsKPiAr ICAgICAgICB0aW1lc19zb3J0ZWQuc29ydCgpOwo+ICsgICAgICAgIHRpbWVzX3NvcnRlZC5yZXZl cnNlKCk7IC8vIE5ld2VzdCBmaXJzdCBpbiBidWZmZXIKPiArICAgICAgICBhc3NlcnRfZXEhKHRp bWVzLCB0aW1lc19zb3J0ZWQpOwo+ICsgICAgfQo+ICsKPiArICAgICNbdGVzdF0KPiArICAgIGZu IHRlc3Rfc29ydF9ieV9ub2RlX2RpZ2VzdCgpIHsKPiArICAgICAgICBsZXQgbXV0IGJ1ZmZlciA9 IFJpbmdCdWZmZXI6Om5ldyhDTE9HX0RFRkFVTFRfU0laRSk7Cj4gKwo+ICsgICAgICAgIC8vIEFk ZCBlbnRyaWVzIHdpdGggc2FtZSB0aW1lIGJ1dCBkaWZmZXJlbnQgbm9kZXMKPiArICAgICAgICBs ZXQgXyA9IGJ1ZmZlci5hZGRfZW50cnkoJkxvZ0VudHJ5OjpwYWNrKCJub2RlMyIsICJyb290Iiwg InRhZyIsIDAsIDEwMDAsIDYsICJjIikudW53cmFwKCkpOwo+ICsgICAgICAgIGxldCBfID0gYnVm ZmVyLmFkZF9lbnRyeSgmTG9nRW50cnk6OnBhY2soIm5vZGUxIiwgInJvb3QiLCAidGFnIiwgMCwg MTAwMCwgNiwgImEiKS51bndyYXAoKSk7Cj4gKyAgICAgICAgbGV0IF8gPSBidWZmZXIuYWRkX2Vu dHJ5KCZMb2dFbnRyeTo6cGFjaygibm9kZTIiLCAicm9vdCIsICJ0YWciLCAwLCAxMDAwLCA2LCAi YiIpLnVud3JhcCgpKTsKPiArCj4gKyAgICAgICAgbGV0IHNvcnRlZCA9IGJ1ZmZlci5zb3J0KCku dW53cmFwKCk7Cj4gKwo+ICsgICAgICAgIC8vIEVudHJpZXMgd2l0aCBzYW1lIHRpbWUgc2hvdWxk IGJlIHNvcnRlZCBieSBub2RlX2RpZ2VzdAo+ICsgICAgICAgIC8vIFdpdGhpbiBzYW1lIHRpbWUs IHNob3VsZCBiZSBzb3J0ZWQKPiArICAgICAgICBmb3IgZW50cmllcyBpbiBzb3J0ZWQuaXRlcigp LmNvbGxlY3Q6OjxWZWM8Xz4+KCkud2luZG93cygyKSB7Cj4gKyAgICAgICAgICAgIGlmIGVudHJp ZXNbMF0udGltZSA9PSBlbnRyaWVzWzFdLnRpbWUgewo+ICsgICAgICAgICAgICAgICAgYXNzZXJ0 IShlbnRyaWVzWzBdLm5vZGVfZGlnZXN0ID49IGVudHJpZXNbMV0ubm9kZV9kaWdlc3QpOwo+ICsg ICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgICNbdGVzdF0KPiAr ICAgIGZuIHRlc3RfanNvbl9kdW1wKCkgewo+ICsgICAgICAgIGxldCBtdXQgYnVmZmVyID0gUmlu Z0J1ZmZlcjo6bmV3KENMT0dfREVGQVVMVF9TSVpFKTsKPiArICAgICAgICBsZXQgXyA9IGJ1ZmZl cgo+ICsgICAgICAgICAgICAuYWRkX2VudHJ5KCZMb2dFbnRyeTo6cGFjaygibm9kZTEiLCAicm9v dCIsICJjbHVzdGVyIiwgMTIzLCAxMDAwLCA2LCAibXNnIikudW53cmFwKCkpOwo+ICsKPiArICAg ICAgICBsZXQganNvbiA9IGJ1ZmZlci5kdW1wX2pzb24oTm9uZSwgNTApOwo+ICsKPiArICAgICAg ICAvLyBTaG91bGQgYmUgdmFsaWQgSlNPTgo+ICsgICAgICAgIGxldCBwYXJzZWQ6IHNlcmRlX2pz b246OlZhbHVlID0gc2VyZGVfanNvbjo6ZnJvbV9zdHIoJmpzb24pLnVud3JhcCgpOwo+ICsgICAg ICAgIGFzc2VydCEocGFyc2VkLmdldCgiZGF0YSIpLmlzX3NvbWUoKSk7Cj4gKwo+ICsgICAgICAg IGxldCBkYXRhID0gcGFyc2VkWyJkYXRhIl0uYXNfYXJyYXkoKS51bndyYXAoKTsKPiArICAgICAg ICBhc3NlcnRfZXEhKGRhdGEubGVuKCksIDEpOwo+ICsKPiArICAgICAgICBsZXQgZW50cnkgPSAm ZGF0YVswXTsKPiArICAgICAgICBhc3NlcnRfZXEhKGVudHJ5WyJub2RlIl0sICJub2RlMSIpOwo+ ICsgICAgICAgIGFzc2VydF9lcSEoZW50cnlbInVzZXIiXSwgInJvb3QiKTsKPiArICAgICAgICBh c3NlcnRfZXEhKGVudHJ5WyJ0YWciXSwgImNsdXN0ZXIiKTsKPiArICAgIH0KPiArCj4gKyAgICAj W3Rlc3RdCj4gKyAgICBmbiB0ZXN0X2pzb25fZHVtcF93aXRoX2ZpbHRlcigpIHsKPiArICAgICAg ICBsZXQgbXV0IGJ1ZmZlciA9IFJpbmdCdWZmZXI6Om5ldyhDTE9HX0RFRkFVTFRfU0laRSk7Cj4g Kwo+ICsgICAgICAgIC8vIEFkZCBlbnRyaWVzIHdpdGggZGlmZmVyZW50IHVzZXJzCj4gKyAgICAg ICAgbGV0IF8gPQo+ICsgICAgICAgICAgICBidWZmZXIuYWRkX2VudHJ5KCZMb2dFbnRyeTo6cGFj aygibm9kZTEiLCAicm9vdCIsICJ0YWciLCAwLCAxMDAwLCA2LCAibXNnMSIpLnVud3JhcCgpKTsK PiArICAgICAgICBsZXQgXyA9Cj4gKyAgICAgICAgICAgIGJ1ZmZlci5hZGRfZW50cnkoJkxvZ0Vu dHJ5OjpwYWNrKCJub2RlMSIsICJhZG1pbiIsICJ0YWciLCAwLCAxMDAxLCA2LCAibXNnMiIpLnVu d3JhcCgpKTsKPiArICAgICAgICBsZXQgXyA9Cj4gKyAgICAgICAgICAgIGJ1ZmZlci5hZGRfZW50 cnkoJkxvZ0VudHJ5OjpwYWNrKCJub2RlMSIsICJyb290IiwgInRhZyIsIDAsIDEwMDIsIDYsICJt c2czIikudW53cmFwKCkpOwo+ICsKPiArICAgICAgICAvLyBGaWx0ZXIgZm9yICJyb290IiBvbmx5 Cj4gKyAgICAgICAgbGV0IGpzb24gPSBidWZmZXIuZHVtcF9qc29uKFNvbWUoInJvb3QiKSwgNTAp Owo+ICsKPiArICAgICAgICBsZXQgcGFyc2VkOiBzZXJkZV9qc29uOjpWYWx1ZSA9IHNlcmRlX2pz b246OmZyb21fc3RyKCZqc29uKS51bndyYXAoKTsKPiArICAgICAgICBsZXQgZGF0YSA9IHBhcnNl ZFsiZGF0YSJdLmFzX2FycmF5KCkudW53cmFwKCk7Cj4gKwo+ICsgICAgICAgIC8vIFNob3VsZCBv bmx5IGhhdmUgMiBlbnRyaWVzICh0aGUgb25lcyBmcm9tICJyb290IikKPiArICAgICAgICBhc3Nl cnRfZXEhKGRhdGEubGVuKCksIDIpOwo+ICsKPiArICAgICAgICBmb3IgZW50cnkgaW4gZGF0YSB7 Cj4gKyAgICAgICAgICAgIGFzc2VydF9lcSEoZW50cnlbInVzZXIiXSwgInJvb3QiKTsKPiArICAg ICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgI1t0ZXN0XQo+ICsgICAgZm4gdGVzdF9qc29uX2R1 bXBfbWF4X2VudHJpZXMoKSB7Cj4gKyAgICAgICAgbGV0IG11dCBidWZmZXIgPSBSaW5nQnVmZmVy OjpuZXcoQ0xPR19ERUZBVUxUX1NJWkUpOwo+ICsKPiArICAgICAgICAvLyBBZGQgMTAgZW50cmll cwo+ICsgICAgICAgIGZvciBpIGluIDAuLjEwIHsKPiArICAgICAgICAgICAgbGV0IF8gPSBidWZm ZXIKPiArICAgICAgICAgICAgICAgIC5hZGRfZW50cnkoJkxvZ0VudHJ5OjpwYWNrKCJub2RlMSIs ICJyb290IiwgInRhZyIsIDAsIDEwMDAgKyBpLCA2LCAibXNnIikudW53cmFwKCkpOwo+ICsgICAg ICAgIH0KPiArCj4gKyAgICAgICAgLy8gUmVxdWVzdCBvbmx5IDUgZW50cmllcwo+ICsgICAgICAg IGxldCBqc29uID0gYnVmZmVyLmR1bXBfanNvbihOb25lLCA1KTsKPiArCj4gKyAgICAgICAgbGV0 IHBhcnNlZDogc2VyZGVfanNvbjo6VmFsdWUgPSBzZXJkZV9qc29uOjpmcm9tX3N0cigmanNvbiku dW53cmFwKCk7Cj4gKyAgICAgICAgbGV0IGRhdGEgPSBwYXJzZWRbImRhdGEiXS5hc19hcnJheSgp LnVud3JhcCgpOwo+ICsKPiArICAgICAgICBhc3NlcnRfZXEhKGRhdGEubGVuKCksIDUpOwo+ICsg ICAgfQo+ICsKPiArICAgICNbdGVzdF0KPiArICAgIGZuIHRlc3RfaXRlcmF0b3IoKSB7Cj4gKyAg ICAgICAgbGV0IG11dCBidWZmZXIgPSBSaW5nQnVmZmVyOjpuZXcoQ0xPR19ERUZBVUxUX1NJWkUp Owo+ICsKPiArICAgICAgICBsZXQgXyA9IGJ1ZmZlci5hZGRfZW50cnkoJkxvZ0VudHJ5OjpwYWNr KCJub2RlMSIsICJyb290IiwgInRhZyIsIDAsIDEwMDAsIDYsICJhIikudW53cmFwKCkpOwo+ICsg ICAgICAgIGxldCBfID0gYnVmZmVyLmFkZF9lbnRyeSgmTG9nRW50cnk6OnBhY2soIm5vZGUxIiwg InJvb3QiLCAidGFnIiwgMCwgMTAwMSwgNiwgImIiKS51bndyYXAoKSk7Cj4gKyAgICAgICAgbGV0 IF8gPSBidWZmZXIuYWRkX2VudHJ5KCZMb2dFbnRyeTo6cGFjaygibm9kZTEiLCAicm9vdCIsICJ0 YWciLCAwLCAxMDAyLCA2LCAiYyIpLnVud3JhcCgpKTsKPiArCj4gKyAgICAgICAgbGV0IG1lc3Nh Z2VzOiBWZWM8U3RyaW5nPiA9IGJ1ZmZlci5pdGVyKCkubWFwKHxlfCBlLm1lc3NhZ2UuY2xvbmUo KSkuY29sbGVjdCgpOwo+ICsKPiArICAgICAgICAvLyBTaG91bGQgYmUgaW4gcmV2ZXJzZSBvcmRl ciAobmV3ZXN0IGZpcnN0KQo+ICsgICAgICAgIGFzc2VydF9lcSEobWVzc2FnZXMsIHZlYyFbImMi LCAiYiIsICJhIl0pOwo+ICsgICAgfQo+ICsKPiArICAgICNbdGVzdF0KPiArICAgIGZuIHRlc3Rf YmluYXJ5X3NlcmlhbGl6YXRpb25fcm91bmR0cmlwKCkgewo+ICsgICAgICAgIGxldCBtdXQgYnVm ZmVyID0gUmluZ0J1ZmZlcjo6bmV3KENMT0dfREVGQVVMVF9TSVpFKTsKPiArCj4gKyAgICAgICAg bGV0IF8gPSBidWZmZXIuYWRkX2VudHJ5KAo+ICsgICAgICAgICAgICAmTG9nRW50cnk6OnBhY2so Im5vZGUxIiwgInJvb3QiLCAiY2x1c3RlciIsIDEyMywgMTAwMCwgNiwgIkVudHJ5IDEiKS51bndy YXAoKSwKPiArICAgICAgICApOwo+ICsgICAgICAgIGxldCBfID0gYnVmZmVyLmFkZF9lbnRyeSgK PiArICAgICAgICAgICAgJkxvZ0VudHJ5OjpwYWNrKCJub2RlMiIsICJhZG1pbiIsICJzeXN0ZW0i LCA0NTYsIDEwMDEsIDUsICJFbnRyeSAyIikudW53cmFwKCksCj4gKyAgICAgICAgKTsKPiArCj4g KyAgICAgICAgLy8gU2VyaWFsaXplCj4gKyAgICAgICAgbGV0IGJpbmFyeSA9IGJ1ZmZlci5zZXJp YWxpemVfYmluYXJ5KCk7Cj4gKwo+ICsgICAgICAgIC8vIERlc2VyaWFsaXplCj4gKyAgICAgICAg bGV0IGRlc2VyaWFsaXplZCA9IFJpbmdCdWZmZXI6OmRlc2VyaWFsaXplX2JpbmFyeSgmYmluYXJ5 KS51bndyYXAoKTsKPiArCj4gKyAgICAgICAgLy8gQ2hlY2sgZW50cnkgY291bnQKPiArICAgICAg ICBhc3NlcnRfZXEhKGRlc2VyaWFsaXplZC5sZW4oKSwgYnVmZmVyLmxlbigpKTsKPiArCj4gKyAg ICAgICAgLy8gQ2hlY2sgZW50cmllcyBtYXRjaAo+ICsgICAgICAgIGxldCBvcmlnX2VudHJpZXM6 IFZlYzxfPiA9IGJ1ZmZlci5pdGVyKCkuY29sbGVjdCgpOwo+ICsgICAgICAgIGxldCBkZXNlcl9l bnRyaWVzOiBWZWM8Xz4gPSBkZXNlcmlhbGl6ZWQuaXRlcigpLmNvbGxlY3QoKTsKPiArCj4gKyAg ICAgICAgZm9yIChvcmlnLCBkZXNlcikgaW4gb3JpZ19lbnRyaWVzLml0ZXIoKS56aXAoZGVzZXJf ZW50cmllcy5pdGVyKCkpIHsKPiArICAgICAgICAgICAgYXNzZXJ0X2VxIShkZXNlci51aWQsIG9y aWcudWlkKTsKPiArICAgICAgICAgICAgYXNzZXJ0X2VxIShkZXNlci50aW1lLCBvcmlnLnRpbWUp Owo+ICsgICAgICAgICAgICBhc3NlcnRfZXEhKGRlc2VyLm5vZGUsIG9yaWcubm9kZSk7Cj4gKyAg ICAgICAgICAgIGFzc2VydF9lcSEoZGVzZXIubWVzc2FnZSwgb3JpZy5tZXNzYWdlKTsKPiArICAg ICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgI1t0ZXN0XQo+ICsgICAgZm4gdGVzdF9iaW5hcnlf Zm9ybWF0X2hlYWRlcigpIHsKPiArICAgICAgICBsZXQgbXV0IGJ1ZmZlciA9IFJpbmdCdWZmZXI6 Om5ldyhDTE9HX0RFRkFVTFRfU0laRSk7Cj4gKyAgICAgICAgbGV0IF8gPSBidWZmZXIuYWRkX2Vu dHJ5KCZMb2dFbnRyeTo6cGFjaygibiIsICJ1IiwgInQiLCAxLCAxMDAwLCA2LCAibSIpLnVud3Jh cCgpKTsKPiArCj4gKyAgICAgICAgbGV0IGJpbmFyeSA9IGJ1ZmZlci5zZXJpYWxpemVfYmluYXJ5 KCk7Cj4gKwo+ICsgICAgICAgIC8vIENoZWNrIGhlYWRlciBmb3JtYXQKPiArICAgICAgICBhc3Nl cnQhKGJpbmFyeS5sZW4oKSA+PSA4KTsKPiArCj4gKyAgICAgICAgbGV0IHNpemUgPSB1MzI6OmZy b21fbGVfYnl0ZXMoYmluYXJ5WzAuLjRdLnRyeV9pbnRvKCkudW53cmFwKCkpIGFzIHVzaXplOwo+ ICsgICAgICAgIGxldCBjcG9zID0gdTMyOjpmcm9tX2xlX2J5dGVzKGJpbmFyeVs0Li44XS50cnlf aW50bygpLnVud3JhcCgpKTsKPiArCj4gKyAgICAgICAgYXNzZXJ0X2VxIShzaXplLCBiaW5hcnku bGVuKCkpOwo+ICsgICAgICAgIGFzc2VydF9lcSEoY3BvcywgOCk7IC8vIEZpcnN0IGVudHJ5IGF0 IG9mZnNldCA4Cj4gKyAgICB9Cj4gKwo+ICsgICAgI1t0ZXN0XQo+ICsgICAgZm4gdGVzdF9iaW5h cnlfZW1wdHlfYnVmZmVyKCkgewo+ICsgICAgICAgIGxldCBidWZmZXIgPSBSaW5nQnVmZmVyOjpu ZXcoMTAyNCk7Cj4gKyAgICAgICAgbGV0IGJpbmFyeSA9IGJ1ZmZlci5zZXJpYWxpemVfYmluYXJ5 KCk7Cj4gKwo+ICsgICAgICAgIC8vIEVtcHR5IGJ1ZmZlciBzaG91bGQganVzdCBiZSBoZWFkZXIK PiArICAgICAgICBhc3NlcnRfZXEhKGJpbmFyeS5sZW4oKSwgOCk7Cj4gKwo+ICsgICAgICAgIGxl dCBkZXNlcmlhbGl6ZWQgPSBSaW5nQnVmZmVyOjpkZXNlcmlhbGl6ZV9iaW5hcnkoJmJpbmFyeSku dW53cmFwKCk7Cj4gKyAgICAgICAgYXNzZXJ0X2VxIShkZXNlcmlhbGl6ZWQubGVuKCksIDApOwo+ ICsgICAgfQo+ICt9CgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCnB2ZS1kZXZlbCBtYWlsaW5nIGxpc3QKcHZlLWRldmVsQGxpc3RzLnByb3htb3guY29t Cmh0dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3B2ZS1k ZXZlbAo=