From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pdm-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id BF2CC1FF17C for <inbox@lore.proxmox.com>; Wed, 14 May 2025 16:09:12 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id D9CA17BF2; Wed, 14 May 2025 16:09:35 +0200 (CEST) Message-ID: <1df410bd-badc-45db-8a9e-a1292d8532d5@proxmox.com> Date: Wed, 14 May 2025 16:08:56 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Beta To: pdm-devel@lists.proxmox.com References: <20250512114144.118545-1-l.wagner@proxmox.com> <20250512114144.118545-2-l.wagner@proxmox.com> Content-Language: en-US From: Dominik Csapak <d.csapak@proxmox.com> In-Reply-To: <20250512114144.118545-2-l.wagner@proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL 0.021 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment 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: [pdm-devel] [PATCH proxmox-datacenter-manager v5 1/6] remote tasks: implement improved cache for remote tasks X-BeenThere: pdm-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Datacenter Manager development discussion <pdm-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pdm-devel>, <mailto:pdm-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pdm-devel/> List-Post: <mailto:pdm-devel@lists.proxmox.com> List-Help: <mailto:pdm-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel>, <mailto:pdm-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox Datacenter Manager development discussion <pdm-devel@lists.proxmox.com> Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: pdm-devel-bounces@lists.proxmox.com Sender: "pdm-devel" <pdm-devel-bounces@lists.proxmox.com> SnVzdCBzdGFydGVkIHRvIHJldmlldyB0aGUgc2VyaWVzLCBhbmQgd2FudGVkIHRvIHNheSB0aGF0 CkknbGwgZ2l2ZSBzb21lIGVhcmx5IGZlZWRiYWNrIG9uIHRoaXMgb25lIGJlZm9yZSBkaXZpbmcg aW50byB0aGUKb3RoZXJzLgoKKHNvcnJ5IGlmIGkgbWVudGlvbiBzb21ldGhpbmcgdGhhdCB3YXMg YWxyZWFkeSBtZW50aW9uZWQgaW4gYSBwcmV2aW91cwppdGVyYXRpb24sIGp1c3QgdGhyb3cgaXQg YmFjayB0byBtZSBzaG91bGQgdGhhdCBoYXBwZW4gOykgKQoKT24gYSBoaWdoIGxldmVsOiBMb29r cyBtb3N0bHkgZ29vZCB0byBtZSwgYmVzaWRlcyBhIGZldyBzbWFsbGVyIHRoaW5ncyBpbmxpbmUK YW5kIHRoZSBmb2xsb3dpbmc6Cgp5b3Ugd3JpdGUgYmVsb3cgdGhhdCB5b3UgdXNlIHRoZSBvbGRl c3QgYWN0aXZlIHRhc2sgYXMgYSBjdXRvZmYKKGkgZ3Vlc3MgaW4gYSBsYXRlciBwYXRjaCksIGJ1 dCB0aGF0IGhhcyBtYXliZSBzb21lIGJhZCBjb25zZXF1ZW5jZXM6CgppZiB0aGVyZSBpcyBhIGxv bmcgcnVubmluZyB0YXNrIChlLmcuIG11bHRpcGxlIGRheXM7IG5vdCB0aGF0IHVuY29tbW9uCmZv ciBlLmcuIHBicyksIHdlJ2QgcmV2aXNpdCBvbGQgdGFza3Mgb3ZlciBhbmQgb3ZlciBhZ2FpbiBm b3IgdGhhdApyZW1vdGUsIGhpdHRpbmcgdGhlIHRhc2sgYXJjaGl2ZSBvbiBkaXNrIGFnYWluIGV2 ZXJ5IHRpbWUuCgpjb3VsZCBpdCBtYXliZSBtYWtlIG1vcmUgc2Vuc2UgdG8gZWl0aGVyOgoqIGp1 c3QgcmVxdWVzdCBmaW5pc2hlZCB0YXNrcyBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlYWwgd2l0aCBy dW5uaW5nCiAgIHRhc2tzIHdlIGRpZCBub3QgdHJhY2sKKiB0cmFjayB0aGUgYWN0aXZlIHRhc2tz IHRoYXQgZ290IHN5bmNlZCwgbWF5YmUgd2l0aCBhIGxvd2VyCiAgIGludGVydmFsIHRoYW4gdGhl IG9uZXMgd2Ugc3RhcnRlZD8KClRoaXMgd2F5IHdlIGNhbiBhdm9pZCBoaXR0aW5nIHRoZSBvbiBk aXNrIHRhc2sgbGlzdCAoZXZlbiBpZgppdCdzIGp1c3QgcmVhZCBjYWxscykgZm9yIHJlbW90ZXMg d2l0aCBsb25nIHJ1bm5pbmcgdGFza3MuCgpXaGF0IGRvIHlvdSB0aGluaz8KCgpBbHNvIHNvbWUg Y29tbWVudHMgaW5saW5lCgpPbiA1LzEyLzI1IDEzOjQxLCBMdWthcyBXYWduZXIgd3JvdGU6Cj4g VGhpcyBjb21taXQgYWRkcyBhIG5ldyBpbXBsZW1lbnRhdGlvbiBmb3IgYSBjYWNoZSBmb3IgcmVt b3RlIHRhc2tzLCBvbmUKPiB0aGF0IHNob3VsZCBpbXByb3ZlIHBlcmZvcm1hbmNlIGNoYXJhY3Rl cmlzdGljcyBpbiBmb3IgcHJldHR5IG11Y2ggYWxsCj4gdXNlIGNhc2VzLgo+IAo+IEluIGdlbmVy YWwgc3RvcmFnZSB3b3JrcyBwcmV0dHkgc2ltaWxhciB0byB0aGUgdGFzayBhcmNoaXZlIHdlIGFs cmVhZHkKPiBoYXZlIGZvciAobG9jYWwpIFBETSB0YXNrcy4KPiAKPiByb290QHBkbS1kZXY6L3Zh ci9jYWNoZS9wcm94bW94LWRhdGFjZW50ZXItbWFuYWdlci9yZW1vdGUtdGFza3MjIGxzIC1sCj4g dG90YWwgNDAKPiAtcnctci0tci0tIDEgd3d3LWRhdGEgd3d3LWRhdGEgICAgIDAgTWFyIDEzIDEz OjE4IGFjdGl2ZQo+IC1ydy1yLS1yLS0gMSB3d3ctZGF0YSB3d3ctZGF0YSAgMTY3NiBNYXIgMTEg MTQ6NTEgYXJjaGl2ZS4xNzQxMzU1NDYyCj4gLXJ3LXItLXItLSAxIHd3dy1kYXRhIHd3dy1kYXRh ICAgICAwIE1hciAxMSAxNDo1MSBhcmNoaXZlLjE3NDE0NDE4NjIKPiAtcnctci0tci0tIDEgd3d3 LWRhdGEgd3d3LWRhdGEgIDI1MzggTWFyIDExIDE0OjUxIGFyY2hpdmUuMTc0MTUyODI2Mgo+IC1y dy1yLS1yLS0gMSB3d3ctZGF0YSB3d3ctZGF0YSAgODQyOCBNYXIgMTEgMTU6MDcgYXJjaGl2ZS4x NzQxNjE0NjYyCj4gLXJ3LXItLXItLSAxIHd3dy1kYXRhIHd3dy1kYXRhIDExNzQwIE1hciAxMyAx MDoxOCBhcmNoaXZlLjE3NDE3MDEwNjIKPiAtcnctci0tci0tIDEgd3d3LWRhdGEgd3d3LWRhdGEg IDMzNjQgTWFyIDEzIDEzOjE4IGFyY2hpdmUuMTc0MTc4ODI3MAo+IC1ydy1yLS1yLS0gMSB3d3ct ZGF0YSB3d3ctZGF0YSAgIDI4NyBNYXIgMTMgMTM6MTggc3RhdGUKPiAKPiBUYXNrcyBhcmUgc3Rv cmVkIGluIHRoZSAnYWN0aXZlJyBhbmQgbXVsdGlwbGUgJ2FyY2hpdmUnIGZpbGVzLiBSdW5uaW5n Cj4gdGFza3MgYXJlIHBsYWNlZCBpbnRvIHRoZSAnYWN0aXZlJyBmaWxlLCB0YXNrcyB0aGF0IGFy ZSBmaW5pc2hlZCBhcmUKPiBwZXJzaXN0ZWQgaW50byBvbmUgb2YgdGhlIGFyY2hpdmUgZmlsZXMu IFRoZSBhcmNoaXZlIGZpbGVzIGFyZSBzdWZmaXhlZAo+IHdpdGggYSBVTklYIHRpbWVzdGFtcCB3 aGljaCBzZXJ2ZXMgYXMgYSBsb3dlci1ib3VuZCBmb3Igc3RhcnQgdGltZXMgZm9yCj4gdGFza3Mg c3RvcmVkIGluIHRoaXMgZmlsZS4gRW5jb2RpbmcgdGhpcyBsb3dlci1ib3VuZCBpbiB0aGUgZmls ZSBuYW1lCj4gaW5zdGVhZCBvZiB1c2luZyBhIG1vcmUgdHJhZGl0aW9uYWwgaW5jcmVhc2luZyBm aWxlIGluZGV4ICguMSwgLjIsIC4zKQo+IGdpdmVzIHVzIHRoZSBiZW5lZml0IHRoYXQgd2UgY2Fu IGRlY2lkZSBpbiB3aGljaCBmaWxlIGEgbmV3bHkgYXJyaXZlZAo+IHRhc2tzIGJlbG9uZ3MgZnJv bSBhIHNpbmdsZSByZWFkZGlyIGNhbGwsIHdpdGhvdXQgZXZlbiByZWFkaW5nIHRoZSBmaWxlCj4g aXRzZWxmLgo+IAo+IFRoZSBzaXplIG9mIHRoZSBlbnRpcmUgYXJjaGl2ZSBjYW4gYmUgY29udHJv bGxlZCBieSBkb2luZyBmaWxlCj4gJ3JvdGF0aW9uJywgd2hlcmUgdGhlIGFyY2hpdmUgZmlsZSB3 aXRoIHRoZSBvbGRlc3QgdGltZXN0YW1wIGlzIGRlbGV0ZWQKPiBhbmQgYSBuZXcgZmlsZSB3aXRo IHRoZSBjdXJyZW50IHRpbWVzdGFtcCBpcyBhZGRlZC4gSWYgJ3JvdGF0aW9uJwo+IGhhcHBlbnMg YXQgZml4ZWQgaW50ZXJ2YWxzIChlLmcuIG9uY2UgZGFpbHkpLCB0aGlzIGdpdmVzIHVzIGEKPiBj b25maWd1cmFibGUgbnVtYmVyIG9mIGRheXMgb2YgdGFzayBoaXN0b3J5LiBUaGVyZSBpcyBubyBk aXJlY3QgY2FwIGZvcgo+IHRoZSB0b3RhbCBudW1iZXIgb2YgdGFza3MsIGJ1dCB0aGlzIGNvdWxk IGJlIGVhc2lseSBhZGRlZCBieSBjaGVja2luZwo+IHRoZSBzaXplIG9mIHRoZSBtb3N0IHJlY2Vu dCBhcmNoaXZlIGZpbGUgYW5kIGJ5IHJvdGF0aW5nIGVhcmx5IGlmIGEKPiB0aHJlc2hvbGQgaXMg ZXhjZWVkZWQuCj4gCj4gVGhlIGZvcm1hdCBpbnNpZGUgdGhlIGZpbGVzIGlzIGFsc28gc2ltaWxh ciB0byB0aGUgbG9jYWwgdGFzayBhcmNoaXZlLAo+IHdpdGggb25lIHRhc2sgY29ycmVzcG9uZGlu ZyB0byBvbmUgbGluZSBpbiB0aGUgZmlsZS4gT25lIGtleSBkaWZmZXJlbmNlCj4gaXMgdGhhdCBo ZXJlIGVhY2ggbGluZSBpcyBhIEpTT04gb2JqZWN0LCB0aGF0IGlzIHRvIG1ha2UgaXQgZWFzaWVy IHRvCj4gYWRkIGFkZGl0aW9uYWwgZGF0YSBsYXRlciwgaWYgbmVlZGVkLiBUaGUgSlNPTiBvYmpl Y3QgY29udGFpbnMgdGhlIHRhc2tzCj4gVVBJRCwgc3RhdHVzLCBlbmR0aW1lIGFuZCBzdGFydHRp bWUgKHRoZSBzdGFydHRpbWUgaXMgdGVjaG5pY2FsbHkgYWxzbwo+IGVuY29kZWQgaW4gdGhlIFVQ SUQsIGJ1dCBoYXZpbmcgaXQgYXMgYSBzZXBhcmF0ZSB2YWx1ZSBzaW1wbGlmaWVkIGEKPiBjb3Vw bGUgb2YgdGhpbmdzKSBFYWNoIGZpbGUgaXMgc29ydGVkIGJ5IHRoZSB0YXNrJ3Mgc3RhcnQgdGlt ZSwgdGhlCj4geW91bmdlc3QgdGFzayBjb21pbmcgZmlyc3QuCj4gCj4gT25lIGtleSBkaWZmZXJl bmNlIGJldHdlZW4gdGhpcyB0YXNrIGNhY2hlIGFuZCB0aGUgbG9jYWwgdGFzayBhcmNoaXZlIGlz Cj4gdGhhdCB3ZSBuZWVkIHRvIGhhbmRsZSB0YXNrcyBjb21pbmcgaW4gb3V0LW9mLW9yZGVyLCBl LmcuIGlmIHJlbW90ZXMKPiB3ZXJlIG5vdCByZWFjaGFibGUgZm9yIGEgY2VydGFpbiB0aW1lLiBU byBtYWludGFpbiB0aGUgb3JkZXJpbmcgaW4gdGhlCj4gZmlsZSwgd2UgaGF2ZSB0byBtZXJnZSB0 aGUgbmV3bHkgYXJyaXZlZCB0YXNrcyBpbnRvIHRoZSBleGlzdGluZyB0YXNrCj4gZmlsZS4gVGhp cyB3YXMgaW1wbGVtZW50ZWQgaW4gYSB3YXkgdGhhdCBhdm9pZHMgcmVhZGluZyB0aGUgZW50aXJl IGZpbGUKPiBpbnRvIG1lbW9yeSBhdCBvbmNlLCBleHBsb2l0aW5nIHRoZSBmYWN0IHRoYXQgdGhl IGNvbnRlbnRzIG9mIHRoZQo+IGV4aXN0aW5nIGZpbGUgYXJlIGFscmVhZHkgc29ydGVkLiBUaGlz IGFsbG93cyB0byBkbyBhIHppcHBlci9tZXJnZS1zb3J0Cj4gbGlrZSBhcHByb2FjaCAoc2VlIE1l cmdlVGFza0l0ZXJhdG9yIGZvciBkZXRhaWxzKS4gVGhlIGV4aXN0aW5nIGZpbGUgaXMKPiBvbmx5 IHJlYWQgbGluZS1ieS1saW5lIGFuZCBmaW5hbGx5IHJlcGxhY2VkIGF0b21pY2FsbHkuCj4gCj4g VGhlIGNhY2hlIGFsc28gaGFzIGEgc2VwYXJhdGUgc3RhdGUgZmlsZSwgY29udGFpbmluZyBhZGRp dGlvbmFsCj4gaW5mb3JtYXRpb24sIGUuZy4gY3V0LW9mZiB0aW1lc3RhbXBzIGZvciB0aGUgcG9s bGluZyB0YXNrLiBTb21lIG9mIHRoZQo+IGRhdGEgaW4gdGhlIHN0YXRlZmlsZSBpcyB0ZWNobmlj YWxseSBhbHNvIGNvbnRhaW5lZCBpbiB0aGUgYXJjaGl2ZQo+IGZpbGVzLCBidXQgcmVhZGluZyB0 aGUgc3RhdGUgZmlsZSBpcyBtdWNoIGZhc3Rlci4KPiAKPiBUaGlzIGNvbW1pdCBhbHNvIGFkZHMg YW4gZWxhYm9yYXRlIHN1aXRlIG9mIHVuaXQgdGVzdHMgZm9yIHRoaXMgbmV3Cj4gY2FjaGUuIFdo aWxlIGFkZGluZyBzb21lIGFkZGl0aW9uYWwgd29yayB1cCBmcm9udCwgdGhleSBwYWlkIG9mZgo+ IHRoZW1zZWx2ZXMgZHVyaW5nIGRldmVsb3BtZW50IHF1aXRlIHF1aWNrbHksIHNpbmNlIHRoZSBv dmVyYWxsIGFwcHJvYWNoCj4gZm9yIHRoZSBjYWNoZSBjaGFuZ2VkIGEgY291cGxlIG9mIHRpbWVz LiBUaGUgdGVzdCBzdWl0ZSBnYXZlIG1lCj4gY29uZmlkZW5jZSB0aGF0IHRoZSBkZXNpZ24gY2hh bmdlcyBkaWRuJ3Qgc2NyZXcgYW55dGhpbmcgdXAsIGNhdGNoaW5nIGEKPiBjb3VwbGUgb2YgYnVn cyBpbiB0aGUgcHJvY2Vzcy4KPiAKPiBGaW5hbGx5LCBzb21lIGNvbmNyZXRlIG51bWJlcnMgYWJv dXQgdGhlIHBlcmZvcm1hbmNlIGltcHJvdm1lbnRzLgo+IEJlbmNobWFya2luZyB3YXMgZG9uZSB1 c2luZyB0aGUgJ2Zha2UtcmVtb3RlJyBmZWF0dXJlLiBUaGVyZSB3ZXJlIDEwMAo+IHJlbW90ZXMs IDEwIFBWRSBub2RlcyBwZXIgcmVtb3RlLiBUaGUgdGFzayBjYWNoZSBjb250YWluZWQKPiBhYm91 dCAxLjUgbWlsbGlvbiB0YXNrcy4KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJlZm9yZSAgICAgICAgIGFmdGVyCj4gbGlzdCBvZiBhY3RpdmUgdGFza3Mg KCopOiAgICAgICAgICAgICAgICAgICAgIH4xLjNzICAgICAgICAgfjMwMMK1cwo+IGxpc3Qgb2Yg NTAwIHRhc2tzLCBvZmZzZXQgMCAoKiopOiAgICAgICAgICAgICB+MS4zcyAgICAgICAgfjE0NTDC tXMKPiBsaXN0IG9mIDUwMCB0YXNrcywgb2Zmc2V0IDEgbWlsbGlvbiAoKioqKTogICAgfjEuM3Mg ICAgICAgICB+MTc1bXMKPiBTaXplIG9uIGRpc2s6ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfjUwME1CICAgICAgICB+MjAwTUIKPiAKPiAoKik6ICBSZXF1ZXN0ZWQgYnkgdGhlIFVJ IGV2ZXJ5IDNzCj4gKCoqKTogUmVxdWVzdGVkIGJ5IHRoZSBVSSB3aGVuIHZpc2l0aW5nIFJlbW90 ZXMgPiBUYXNrcwo+ICgqKiopOiBFLmcuIHdoZW4gc2Nyb2xsaW5nIHRvd2FyZHMgdGhlIGJvdHRv bSBvZiAnUmVtb3RlcyA+IFRhc2tzJwo+IAo+IEluIHRoZSBvbGQgaW1wbGVtZW50YXRpb24sIHRo ZSBhcmNoaXZlIGZpbGUgd2FzICphbHdheXMqIGZ1bGx5Cj4gZGVzZXJpYWxpemVkIGFuZCBsb2Fk ZWQgaW50byBSQU0sIHRoaXMgaXMgdGhlIHJlYXNvbiB3aHkgdGhlIHRpbWUgbmVlZGVkCj4gaXMg cHJldHR5IGlkZW50aWFsIGZvciBhbGwgc2NlbmFyaW9zLiBUaGUgbmV3IGltcGxlbWVudGF0aW9u IHJlYWRzIHRoZQo+IGFyY2hpdmUgZmlsZXMgb25seSBsaW5lIGJ5IGxpbmUsIGFuZCBvbmx5IDUw MCB0YXNrcyB3ZXJlIGxvYWRlZCBpbnRvIFJBTQo+IGF0IHRoZSBzYW1lIHRpbWUuIFRoZSBoaWdo ZXIgdGhlIG9mZnNldCwgdGhlIG1vcmUgYXJjaGl2ZSBsaW5lcy9maWxlcyB3ZQo+IGhhdmUgdG8g c2Nhbiwgd2hpY2ggaW5jcmVhc2VzIHRoZSB0aW1lIG5lZWRlZCB0byBhY2Nlc3MgdGhlIGRhdGEu IFRoZQo+IHRhc2tzIGFyZSBzb3J0ZWQgZGVzY2VuZGluZyBieSBzdGFydHRpbWUsIGFzIGEgcmVz dWx0IHRoZSByZXF1ZXN0cyBnZXQKPiBzbG93ZXIgdGhlIGZ1cnRoZXIgeW91IGdvIGJhY2sgaW4g aGlzdG9yeS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBMdWthcyBXYWduZXIgPGwud2FnbmVyQHByb3ht b3guY29tPgo+IC0tLQo+IAo+IE5vdGVzOgo+ICAgICAgQ2hhbmdlcyBzaW5jZSB2MzoKPiAgICAg ICAgLSBJbmNsdWRlZCBiZW5jaG1hcmsgcmVzdWx0cyBpbiB0aGUgY29tbWl0IG1lc3NhZ2UKPiAg ICAgICAgLSBEcm9wIGBwdWJgIGZvciBUYXNrQ2FjaGU6OndyaXRlX3N0YXRlCj4gICAgICAKPiAg ICAgIENoYW5nZXMgc2luY2UgdjI6Cj4gICAgICAgIC0gSW5jb3Jwb3JhdGUgZmVlZGJhY2sgZnJv bSBXb2xmYW5nICh0aHghKQo+ICAgICAgICAgICAtIGVsaW1pbmF0ZSBvbmUgLmNsb25lKCkKPiAg ICAgICAgICAgLSBnZXRfdGFza3Nfd2l0aF9sb2NrOiBkaXJlY3RseSBjcmVhdGUgaXRlcmF0b3Ig b3ZlciBQYXRoQnVmCj4gICAgICAgICAgICAgaW5zdGVhZCBvZiBmaXJzdCBjcmVhdGluZyBBcmNo aXZlRmlsZSB2ZWMgYW5kIHRoZSBtYXBwaW5nCj4gICAgICAgICAgIC0gRml4ZWQgVE9DVE9VIHJh Y2UgY29uZGl0aW9uIChjaGVja2VkIFBhdGg6OmV4aXN0cyBpbnN0ZWFkIG9mCj4gICAgICAgICAg ICAgdHJ5aW5nIHRoZSBhY3R1YWwgb3BlcmF0aW9uIGFuZCByZWFjdGluZyB0byBFcnJvcktpbmQ6 Ok5vdEZvdW5kKQo+ICAgICAgICAgICAtIGhhbmRsZSBlcnJvciB3aGVuIHJlcGxhY2luZyAnYWN0 aXZlJyBmaWxlCj4gICAgICAgICAgIC0gdW5saW5rIHRlbXAgZmlsZSB3aGVuIHJlcGxhY2luZyB0 aGUgYXJjaGl2ZSBmaWxlIGRpZCBub3Qgd29yawo+ICAgICAgICAgICAtIGF2b2lkIFVURjggZGVj b2Rpbmcgd2hlcmUgbm90IHJlYWxseSBuZWNlc3NhcnkKPiAgICAgICAgLSBBZGRlZCBhIGNvdXBs ZSBvZiAuY29udGV4dCgpLy53aXRoX2NvbnRleHQoKSBmb3IgYmV0dGVyIGVycm9yCj4gICAgICAg ICAgbWVzc2FnZXMKPiAgICAgICAgLSBFeHRyYWN0ZWQgdGhlIGZpbGUgbmFtZXMgaW50byBjb25z dHMKPiAgICAgICAgLSBGaXhlZCBzb21lIGNsaXBweSBpc3N1ZXMgKC5jbG9uZSgpIGZvciBDcmVh dGVPcHRpb25zIC0gd2hlbgo+ICAgICAgICAgIHRoaXMgc2VyaWVzIHdhcyB3cml0dGVuLCBDcmVh dGVPcHRpb25zIHdlcmUgbm90IENvcHkgeWV0KQo+IAo+ICAgc2VydmVyL3NyYy9yZW1vdGVfdGFz a3MvbW9kLnJzICAgICAgICB8ICAgIDIgKwo+ICAgc2VydmVyL3NyYy9yZW1vdGVfdGFza3MvdGFz a19jYWNoZS5ycyB8IDEwMjIgKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgMiBmaWxlcyBj aGFuZ2VkLCAxMDI0IGluc2VydGlvbnMoKykKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzZXJ2ZXIv c3JjL3JlbW90ZV90YXNrcy90YXNrX2NhY2hlLnJzCj4gCj4gZGlmZiAtLWdpdCBhL3NlcnZlci9z cmMvcmVtb3RlX3Rhc2tzL21vZC5ycyBiL3NlcnZlci9zcmMvcmVtb3RlX3Rhc2tzL21vZC5ycwo+ IGluZGV4IDIzNGZmYTc2Li43YzhlMzFlZiAxMDA2NDQKPiAtLS0gYS9zZXJ2ZXIvc3JjL3JlbW90 ZV90YXNrcy9tb2QucnMKPiArKysgYi9zZXJ2ZXIvc3JjL3JlbW90ZV90YXNrcy9tb2QucnMKPiBA QCAtMTgsNiArMTgsOCBAQCB1c2UgdG9raW86OnRhc2s6OkpvaW5IYW5kbGU7Cj4gICAKPiAgIHVz ZSBjcmF0ZTo6e2FwaTo6cHZlLCB0YXNrX3V0aWxzfTsKPiAgIAo+ICttb2QgdGFza19jYWNoZTsK PiArCj4gICAvLy8gR2V0IHRhc2tzIGZvciBhbGwgcmVtb3Rlcwo+ICAgLy8gRklYTUU6IGZpbHRl ciBmb3IgcHJpdmlsZWdlcwo+ICAgcHViIGFzeW5jIGZuIGdldF90YXNrcyhtYXhfYWdlOiBpNjQs IGZpbHRlcnM6IFRhc2tGaWx0ZXJzKSAtPiBSZXN1bHQ8VmVjPFRhc2tMaXN0SXRlbT4sIEVycm9y PiB7Cj4gZGlmZiAtLWdpdCBhL3NlcnZlci9zcmMvcmVtb3RlX3Rhc2tzL3Rhc2tfY2FjaGUucnMg Yi9zZXJ2ZXIvc3JjL3JlbW90ZV90YXNrcy90YXNrX2NhY2hlLnJzCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwMC4uZjhkZDgyMWUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv c2VydmVyL3NyYy9yZW1vdGVfdGFza3MvdGFza19jYWNoZS5ycwo+IEBAIC0wLDAgKzEsMTAyMiBA QAo+ICsvLyEgVGFzayBjYWNoZSBpbXBsZW1lbnRhdGlvbiwgYmFzZWQgb24gcm90YXRpbmcgZmls ZXMuCj4gKwo+ICt1c2Ugc3RkOjp7Cj4gKyAgICBjbXA6Ok9yZGVyaW5nLAo+ICsgICAgY29sbGVj dGlvbnM6OntIYXNoTWFwLCBIYXNoU2V0fSwKPiArICAgIGZzOjpGaWxlLAo+ICsgICAgaW86OntC dWZSZWFkLCBCdWZSZWFkZXIsIEJ1ZldyaXRlciwgRXJyb3JLaW5kLCBMaW5lcywgV3JpdGV9LAo+ ICsgICAgaXRlcjo6UGVla2FibGUsCj4gKyAgICBwYXRoOjp7UGF0aCwgUGF0aEJ1Zn0sCj4gKyAg ICB0aW1lOjpEdXJhdGlvbiwKPiArfTsKPiArCj4gK3VzZSBhbnlob3c6OntDb250ZXh0LCBFcnJv cn07Cj4gK3VzZSBwcm94bW94X3N5czo6ZnM6OkNyZWF0ZU9wdGlvbnM7Cj4gK3VzZSBzZXJkZTo6 e0Rlc2VyaWFsaXplLCBTZXJpYWxpemV9Owo+ICsKPiArdXNlIHBkbV9hcGlfdHlwZXM6OlJlbW90 ZVVwaWQ7Cj4gKwo+ICsvLy8gRmlsZW5hbWUgZm9yIHRoZSBmaWxlIGNvbnRhaW5pbmcgcnVubmlu ZyB0YXNrcy4KPiArY29uc3QgQUNUSVZFX0ZJTEVOQU1FOiAmc3RyID0gImFjdGl2ZSI7Cj4gKy8v LyBGaWxlbmFtZSBwcmVmaXggZm9yIGFyY2hpdmUgZmlsZXMuCj4gK2NvbnN0IEFSQ0hJVkVfRklM RU5BTUVfUFJFRklYOiAmc3RyID0gImFyY2hpdmUuIjsKPiArLy8vIEZpbGVuYW1lIGZvciB0aGUg c3RhdGUgZmlsZS4KPiArY29uc3QgU1RBVEVfRklMRU5BTUU6ICZzdHIgPSAic3RhdGUiOwo+ICsv Ly8gRmlsZW5hbWUgb2YgdGhlIGFyY2hpdmUgbG9ja2ZpbGUuCj4gK2NvbnN0IExPQ0tGSUxFX0ZJ TEVOQU1FOiAmc3RyID0gIi5sb2NrIjsKPiArCj4gKy8vLyBJdGVtIHdoaWNoIGNhbiBiZSBwdXQg aW50byB0aGUgdGFzayBjYWNoZS4KPiArI1tkZXJpdmUoQ2xvbmUsIERlYnVnLCBTZXJpYWxpemUs IERlc2VyaWFsaXplLCBIYXNoLCBQYXJ0aWFsRXEsIEVxKV0KPiArcHViIHN0cnVjdCBUYXNrQ2Fj aGVJdGVtIHsKPiArICAgIC8vLyBUaGUgdGFzaydzIFVQSUQKPiArICAgIHB1YiB1cGlkOiBSZW1v dGVVcGlkLAo+ICsgICAgLy8vIFRoZSB0aW1lIGF0IHdoaWNoIHRoZSB0YXNrIHdhcyBzdGFydGVk IChzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoKS4KPiArICAgIC8vLyBUZWNobmljYWxseSB0 aGlzIGlzIGFsc28gY29udGFpbmVkIHdpdGhpbiB0aGUgVVBJRCwgZHVwbGljYXRpbmcgaXQgaGVy ZQo+ICsgICAgLy8vIGFsbG93cyB1cyB0byBkaXJlY3RseSBhY2Nlc3MgaXQgd2hlbiBzb3J0aW5n IGluIG5ldyB0YXNrcywgd2l0aG91dCBoYXZpbmcKPiArICAgIC8vLyB0byBwYXJzZSB0aGUgVVBJ RC4KPiArICAgIHB1YiBzdGFydHRpbWU6IGk2NCwKCmluc3RlYWQgb2Ygc2F2aW5nIHRoZSBzdGFy dHRpbWUgaGVyZSwgY291bGRuJ3Qgd2UgYWxzbyB1c2UgdGhlIHBhcnNlZApVUElEIHN0cnVjdCAr IHJlbW90ZSBpbnN0ZWFkPwoKbm90IHN1cmUgYWJvdXQgdGhlIG1lbW9yeSBpbXBsaWNhdGlvbnMs IGJ1dCB0aGVuIHdlIGNvdWxkIGF2b2lkIHRoaW5ncwpsaWtlIHlvdSBoYXZpbmcgdG8gcGFydGlh bGx5IG1vdmUgdGhlIHVwaWQgb3V0IG9mIGEgc3RydWN0IGFuZCBiYWNrIGFnYWluCmZvciByZW1v dmluZyBvdXQgb2YgYSBoYXNoc2V0CgoodGhvdWdoIGl0J3MgYWxzbyBmaW5lIGFzIGl0IGlzIGZv ciBtZSkKCj4gKyAgICAjW3NlcmRlKHNraXBfc2VyaWFsaXppbmdfaWYgPSAiT3B0aW9uOjppc19u b25lIildCj4gKyAgICAvLy8gVGhlIHRhc2sncyBzdGF0dXMuCj4gKyAgICBwdWIgc3RhdHVzOiBP cHRpb248U3RyaW5nPiwKPiArICAgICNbc2VyZGUoc2tpcF9zZXJpYWxpemluZ19pZiA9ICJPcHRp b246OmlzX25vbmUiKV0KPiArICAgIC8vLyBUaGUgdGFzaydzIGVuZHRpbWUgKHNlY29uZHMgc2lu Y2UgdGhlIFVOSVggZXBvY2gpLgo+ICsgICAgcHViIGVuZHRpbWU6IE9wdGlvbjxpNjQ+LAo+ICt9 Cj4gKwo+ICsvLy8gU3RhdGUgbmVlZGVkIGZvciB0YXNrIHBvbGxpbmcuCj4gKyNbZGVyaXZlKFNl cmlhbGl6ZSwgRGVzZXJpYWxpemUsIERlZmF1bHQpXQo+ICsjW3NlcmRlKHJlbmFtZV9hbGwgPSAi a2ViYWItY2FzZSIpXQo+ICtwdWIgc3RydWN0IFN0YXRlIHsKPiArICAgIC8vLyBNYXAgb2YgcmVt b3RlIC0+IG1vc3QgcmVjZW50IHRhc2sgc3RhcnR0aW1lIChVTklYIGVwb2NoKSBpbiB0aGUgYXJj aGl2ZS4KPiArICAgIC8vLyBUaGlzIGNhbiBiZSB1c2VkIGFzIGEgY3V0LW9mZiB3aGVuIHJlcXVl c3RpbmcgbmV3IHRhc2sgZGF0YS4KPiArICAgIHB1YiBtb3N0X3JlY2VudF9hcmNoaXZlX3N0YXJ0 dGltZTogSGFzaE1hcDxTdHJpbmcsIGk2ND4sCj4gKyAgICAvLy8gT2xkZXN0IHJ1bm5pbmcgdGFz ay4gVXNlZnVsIGFzIGFub3RoZXIgY3V0LW9mZiBmb3IgZmV0Y2hpbmcgdGFza3MuCj4gKyAgICAv Ly8gVGhlIHRpbWVzdGFtcCBpcyBiYXNlZCBvbiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2No Lgo+ICsgICAgcHViIG9sZGVzdF9hY3RpdmVfdGFzazogSGFzaE1hcDxTdHJpbmcsIGk2ND4sPiAr ICAgIC8vLyBUcmFja2VkIHRhc2tzIHBlciByZW1vdGUuCj4gKyAgICBwdWIgdHJhY2tlZF90YXNr czogSGFzaE1hcDxTdHJpbmcsIEhhc2hTZXQ8UmVtb3RlVXBpZD4+LAo+ICt9Cgp3b3VsZG4ndCBp dCBiZSBwb3NzaWJsZSB0byBqdXN0IHNhdmUgdGhlIGN1dG9mZiB0aW1lPwp3ZSBqdXN0IGhhdmUg dG8gZmlyc3QgaW5jcmVhdGUgdGhlIHRpbWUgZm9yIHRoZSBmaW5pc2hlZCB0YXNrcwphbmQgYWZ0 ZXJ3YXJkcyByZWR1Y2UgaXQgYWdhaW4gaWYgdGhlcmUgaXMgc3RpbGwgYW4gYWN0aXZlIHRhc2s/ CgphbHNvIHdvdWxkIGl0IGJlIHBvc3NpYmxlIHRvIGNvbWJpbmUgdGggaGFzaG1hcHMgaW50byBv bmU/CmUuZy4gSGFzaE1hcDxTdHJpbmcsIChpNjQsIEhhc2hTZXQ8U3RyaW5nPik+ID8KCnRoYXQg d2F5IHdlIHdvdWxkIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHRpbWVzIHdlIHNhdmUgdGhlIHJlbW90 ZSBpbiB0aGUgZmlsZQp3aGljaCBjYW4gYWRkIHVwIGlmIHdlIGhhdmUgbWFueSByZW1vdGVzIChl LmcuIGh1bmRyZWRzKQoKc28gaW5zdGVhZCBvZgoKewoJIm1vc3QtcmVjZW50LWFyY2hpdmUtc3Rh cnR0aW1lIjogewoJCSJyZW1vdGUtMSI6IDEyMzEyMywKCQkicmVtb3RlLTIiOiAxMjMxMjMsCgl9 LAogIAkib2xkZXN0X2FjdGl2ZV90YXNrIiA6IHsKCQkicmVtb3RlLTEiOiAyMzIzMjMsCgkJInJl bW90ZS0yIjogMjMyMzIzLAoJfSwKCSJ0cmFja2VkLXRhc2tzIjogewoJCSJyZW1vdGUtMSI6IFsK CQkJInJlbW90ZS0xITxVUElEMT4iLAoJCQkicmVtb3RlLTEhPFVQSUQyPiIKCQldCgl9Cn0KCml0 IHdvdWxkIGJlOgoKewoJInN0YXRlIjogewoJCSJyZW1vdGUtMSI6IFsKCQkJMTIzMTIzLAoJCQlb IjxVUElEMT4iLCAiPFVQSUQyPiJdCgkJXSwKCQkicmVtb3RlLTIiOiBbCgkJCTEyMzEyMywKCQkJ W10KCQldCgl9Cn0KCj4gKwo+ICsvLy8gQ2FjaGUgZm9yIHJlbW90ZSB0YXNrcy4KPiArI1tkZXJp dmUoQ2xvbmUpXQo+ICtwdWIgc3RydWN0IFRhc2tDYWNoZSB7Cj4gKyAgICAvLy8gUGF0aCB3aGVy ZSB0aGUgY2FjaGUncyBmaWxlcyBzaG91bGQgYmUgcGxhY2VkLgo+ICsgICAgYmFzZV9wYXRoOiBQ YXRoQnVmLAo+ICsgICAgLy8vIEZpbGUgcGVybWlzc2lvbnMgZm9yIHRoZSBjYWNoZSdzIGZpbGVz Lgo+ICsgICAgY3JlYXRlX29wdGlvbnM6IENyZWF0ZU9wdGlvbnMsCj4gK30KPiArCj4gKy8vLyBU YXNrcyB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgY2FjaGUgdmlhIFtgVGFza0NhY2hlOjph ZGRfdGFza3NgXS4KPiArcHViIHN0cnVjdCBBZGRUYXNrcyB7Cj4gKyAgICAvLy8gVXBkYXRlIHRo ZSByZW1vdGUncyBlbnRyeSBpbiB0aGUgc3RhdGVmaWxlIHdoaWNoIGNvbnRhaW5zIHRoZQo+ICsg ICAgLy8vIHRpbWVzdGFtcCBvZiB0aGUgbW9zdCByZWNlbnQgKmZpbmlzaGVkKiB0YXNrIGZyb20g dGhlIHRhc2sgYXJjaGl2ZS4KPiArICAgIHB1YiB1cGRhdGVfbW9zdF9yZWNlbnRfYXJjaGl2ZV90 aW1lc3RhbXA6IGJvb2wsCj4gKyAgICAvLy8gVGhlIHRhc2tzIHRvIGFkZC4KPiArICAgIHB1YiB0 YXNrczogVmVjPFRhc2tDYWNoZUl0ZW0+LAo+ICt9Cj4gKwo+ICsvLy8gTG9jayBmb3IgdGhlIGNh Y2hlLgo+ICsjW2FsbG93KGRlYWRfY29kZSldCj4gK3B1YiBzdHJ1Y3QgVGFza0NhY2hlTG9jayhG aWxlKTsKPiArCj4gKy8vLyBXaGljaCB0YXNrcyB0byBmZXRjaCBmcm9tIHRoZSBhcmNoaXZlLgo+ ICtwdWIgZW51bSBHZXRUYXNrcyB7Cj4gKyAgICAvLy8gR2V0IGFsbCB0YXNrcywgZmluaXNoZWQg YW5kIHJ1bm5pbmcuCj4gKyAgICBBbGwsCj4gKyAgICAvLy8gT25seSBnZXQgcnVubmluZyAoYWN0 aXZlKSB0YXNrcy4KPiArICAgIEFjdGl2ZSwKPiArICAgICNbY2ZnKHRlc3QpXSAvLyBVc2VkIGJ5 IHRlc3RzLCBtaWdodCBiZSB1c2VkIGJ5IHByb2R1Y3Rpb24gY29kZSBpbiB0aGUgZnV0dXJlCj4g KyAgICAvLy8gT25seSBnZXQgZmluaXNoZWQgKGFyY2hpdmVkKSB0YXNrcy4KPiArICAgIEFyY2hp dmVkLAo+ICt9Cj4gKwo+ICtpbXBsIFRhc2tDYWNoZSB7Cj4gKyAgICAvLy8gQ3JlYXRlIGEgbmV3 IHRhc2sgY2FjaGUgaW5zdGFuY2UuCj4gKyAgICAvLy8KPiArICAgIC8vLyBSZW1lbWJlciB0byBj YWxsIGBpbml0YCBvciBgbmV3X2ZpbGVgIHRvIGNyZWF0ZSBpbml0aWFsIGFyY2hpdmUgZmlsZXMg YmVmb3JlCj4gKyAgICAvLy8gYWRkaW5nIGFueSB0YXNrcy4KCk5vdCBzdXJlIGlmIHdlIHVzZSB0 aGlzIGtpbmQgb2YgcGF0dGVybiBzb21ld2hlcmUgYWxyZWFkeSwgYnV0IGlmIHlvdSB1c2UgZGlm ZmVyZW50CnR5cGVzIGZvciBkaWZmZXJlbnQgbWV0aG9kcz8KCgplLmcuIGhhdmluZyBhIFRhc2tD YWNoZSBhbmQgYW4gV3JpdGFibGVUYXNrQ2FjaGUgd2hlcmUgb25seSB0aGUgc2Vjb25kIGhhcwph ZGRfdGFza3MgYW5kIHlvdSBjYW4gb25seSByZWFjaCBpdCBieSB1c2luZyBpbml0L25ld19maWxl ID8KCnRoZW4gaXQgY2Fubm90IGhhcHBlbiB0aGF0IGFkZCBpcyBjYWxsZWQgZmFsc2VseQoKU2Ft ZSB3aXRoIHRoZSAubG9jaygpIGNhbGxzCgpJZiB0aGVyZSB3b3VsZCBiZSBhIExvY2tlZFRhc2tD YWNoZSB0aGF0IGNhbiBkbyBldmVyeXRoaW5nIHRoYXQgeW91IGNhbiBkbyB3aXRoIGEgbG9jawp0 aGVyZSBpcyBubyBuZWVkIHRvIG1hbnVhbGx5IGhhbmRsZSB0aGUgbG9jayBhbnl3aGVyZSBvdXRz aWRlIHRoaXMgbW9kdWxlCihwcm9iYWJseSBuZWVkcyB0d28gdmFyaWFudHMsIG9uZSBmb3IgcmVh ZGluZyBhbmQgb25lIGZvciB3cml0aW5nKQoKCj4gKyAgICBwdWIgZm4gbmV3PFA6IEFzUmVmPFBh dGg+PihwYXRoOiBQLCBjcmVhdGVfb3B0aW9uczogQ3JlYXRlT3B0aW9ucykgLT4gUmVzdWx0PFNl bGYsIEVycm9yPiB7Cj4gKyAgICAgICAgT2soU2VsZiB7Cj4gKyAgICAgICAgICAgIGJhc2VfcGF0 aDogcGF0aC5hc19yZWYoKS5pbnRvKCksCj4gKyAgICAgICAgICAgIGNyZWF0ZV9vcHRpb25zLAo+ ICsgICAgICAgIH0pCj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIENyZWF0ZSBpbml0aWFsIHRhc2sg YXJjaGl2ZXMgdGhhdCBjYW4gYmUgYmFja2ZpbGxlZCB3aXRoIHRoZQo+ICsgICAgLy8vIHJlY2Vu dCB0YXNrIGhpc3RvcnkgZnJvbSBhIHJlbW90ZS4KPiArICAgIC8vLwo+ICsgICAgLy8vIFRoaXMg ZnVuY3Rpb24gb25seSBoYXMgYW4gZWZmZWN0IGlmIHRoZXJlIGFyZSBubyBhcmNoaXZlIGZpbGVz IHlldC4KPiArICAgIHB1YiBmbiBpbml0KCZzZWxmLCBub3c6IGk2NCwgbnVtYmVyX29mX2ZpbGVz OiB1NjQsIHBlcmlvZF9wZXJfZmlsZTogdTY0KSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7Cj4gKyAg ICAgICAgbGV0IF9sb2NrID0gc2VsZi5sb2NrKHRydWUpLmNvbnRleHQoImZhaWxlZCB0byBsb2Nr IGFyY2hpdmUiKT87Cj4gKwo+ICsgICAgICAgIGlmIHNlbGYuYXJjaGl2ZV9maWxlcygpPy5pc19l bXB0eSgpIHsKPiArICAgICAgICAgICAgZm9yIGkgaW4gMC4ubnVtYmVyX29mX2ZpbGVzIHsKPiAr ICAgICAgICAgICAgICAgIHNlbGYubmV3X2ZpbGUobm93IC0gKGkgKiBwZXJpb2RfcGVyX2ZpbGUp IGFzIGk2NCk/Owo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBP aygoKSkKPiArICAgIH0KPiArCj4gKyAgICAvLy8gU3RhcnQgYSBuZXcgYXJjaGl2ZSBmaWxlIHdp dGggYSBnaXZlbiB0aW1lc3RhbXAuCj4gKyAgICAvLy8gYG5vd2AgaXMgc3VwcG9zZWQgdG8gYmUg YSBVTklYIHRpbWVzdGFtcCAoc2Vjb25kcykuCj4gKyAgICBmbiBuZXdfZmlsZSgmc2VsZiwgbm93 OiBpNjQpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKPiArICAgICAgICBsZXQgbmV3X3BhdGggPSBz ZWxmCj4gKyAgICAgICAgICAgIC5iYXNlX3BhdGgKPiArICAgICAgICAgICAgLmpvaW4oZm9ybWF0 ISgie0FSQ0hJVkVfRklMRU5BTUVfUFJFRklYfXtub3d9IikpOwo+ICsgICAgICAgIGxldCBtdXQg ZmlsZSA9IEZpbGU6OmNyZWF0ZSgmbmV3X3BhdGgpPzsKPiArICAgICAgICBzZWxmLmNyZWF0ZV9v cHRpb25zLmFwcGx5X3RvKCZtdXQgZmlsZSwgJm5ld19wYXRoKT87Cj4gKwo+ICsgICAgICAgIE9r KCgpKQo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBMb2NrIHRoZSBjYWNoZS4KPiArICAgIGZuIGxv Y2soJnNlbGYsIGV4Y2x1c2l2ZTogYm9vbCkgLT4gUmVzdWx0PFRhc2tDYWNoZUxvY2ssIEVycm9y PiB7Cj4gKyAgICAgICAgbGV0IGxvY2tmaWxlID0gc2VsZi5iYXNlX3BhdGguam9pbihMT0NLRklM RV9GSUxFTkFNRSk7Cj4gKwo+ICsgICAgICAgIGxldCBmZCA9IHByb3htb3hfc3lzOjpmczo6b3Bl bl9maWxlX2xvY2tlZCgKPiArICAgICAgICAgICAgbG9ja2ZpbGUsCj4gKyAgICAgICAgICAgIER1 cmF0aW9uOjpmcm9tX3NlY3MoMTUpLAoKCmp1c3QgZm9yIG15IGN1cmlvc2l0eSAobm90IGEgY3Jp dGlxdWUpOiBpcyB0aGVyZSBhIHNwZWNpYWwgcmVhc29uCndoeSB5b3Ugc2V0IHRoZSB0aW1lb3V0 IG1hbnVhbGx5IHRvIDE1IHNlY29uZHMgaW5zdGVhZCBvZiBsZWF2aW5nIGl0IHRvCnRoZSBmdW5j dGlvbiB0byB1c2UgdGhlIGRlZmF1bHQ/CgpyZWFzb24gZm9yIG15IHF1ZXN0aW9uIGlzOiBpZiB5 b3Ugb2Z0ZW4gcmFuIGludG8gdGltZW91dHMgd2l0aCBqdXN0IDEwIHNlY29uZHMgKGFmYWlyIHRo ZSBkZWZhdWx0KSwKY2hhbmNlcyBhcmUgdXNlcnMgaW4gdGhlIHdpbGQgd2lsbCBydW4gaW50byBp dCB3aXRoIDE1IHNlY29uZHMgdG9vLCBzbyB3ZSBtaWdodCB3YW50IHRvIGVpdGhlciB1c2UKYSAq bXVjaCogYmlnZ2VyIHRpbWVvdXQsIG9yIG1ha2UgaXQgc29tZWhvdyBjb25maWd1cmFibGUuCgo+ ICsgICAgICAgICAgICBleGNsdXNpdmUsCj4gKyAgICAgICAgICAgIHNlbGYuY3JlYXRlX29wdGlv bnMsCj4gKyAgICAgICAgKT87Cj4gKwo+ICsgICAgICAgIE9rKFRhc2tDYWNoZUxvY2soZmQpKQo+ ICsgICAgfQo+ICsKPiArICAgIC8vLyBSb3RhdGUgdGFzayBhcmNoaXZlIGlmIHRoZSB0aGUgbmV3 ZXN0IGFyY2hpdmUgZmlsZSBpcyBvbGRlciB0aGFuIGByb3RhdGVfYWZ0ZXJgLgo+ICsgICAgLy8v Cj4gKyAgICAvLy8gVGhlIG9sZGVzdCBhcmNoaXZlIGZpbGVzIGFyZSByZW1vdmVkIGlmIHRoZSB0 b3RhbCBudW1iZXIgb2YgYXJjaGl2ZSBmaWxlcyBleGNlZWRzCj4gKyAgICAvLy8gYG1heF9maWxl c2AuIGBub3dgIGlzIHN1cHBvc2VkIHRvIGJlIGEgVU5JWCB0aW1lc3RhbXAgKHNlY29uZHMpLgo+ ICsgICAgLy8vCj4gKyAgICAvLy8gVGhpcyBmdW5jdGlvbiByZXF1ZXN0cyBhbiBleGNsdXNpdmUg bG9jaywgZG9uJ3QgY2FsbCBpZiB5b3UgYWxyZWFkeSBob2xkIGEgbG9jay4KPiArICAgIHB1YiBm biByb3RhdGUoJnNlbGYsIG5vdzogaTY0LCByb3RhdGVfYWZ0ZXI6IHU2NCwgbWF4X2ZpbGVzOiB1 NjQpIC0+IFJlc3VsdDxib29sLCBFcnJvcj4gewo+ICsgICAgICAgIGxldCBfbG9jayA9IHNlbGYu bG9jayh0cnVlKS5jb250ZXh0KCJmYWlsZWQgdG8gbG9jayBhcmNoaXZlIik/Owo+ICsgICAgICAg IGxldCBtdXQgZGlkX3JvdGF0ZSA9IGZhbHNlOwo+ICsKPiArICAgICAgICBsZXQgbXV0IGJvdW5k cyA9IHNlbGYuYXJjaGl2ZV9maWxlcygpPzsKPiArCj4gKyAgICAgICAgbWF0Y2ggYm91bmRzLmZp cnN0KCkgewo+ICsgICAgICAgICAgICBTb21lKGJvdW5kKSA9PiB7Cj4gKyAgICAgICAgICAgICAg ICBpZiBub3cgPiBib3VuZC5zdGFydHRpbWUgJiYgbm93IC0gYm91bmQuc3RhcnR0aW1lID4gcm90 YXRlX2FmdGVyIGFzIGk2NCB7Cj4gKyAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXdfZmlsZShu b3cpPzsKPiArICAgICAgICAgICAgICAgICAgICBkaWRfcm90YXRlID0gdHJ1ZTsKPiArICAgICAg ICAgICAgICAgIH0KPiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICBOb25lID0+IHsKPiAr ICAgICAgICAgICAgICAgIHNlbGYubmV3X2ZpbGUobm93KT87Cj4gKyAgICAgICAgICAgICAgICBk aWRfcm90YXRlID0gdHJ1ZTsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArCj4gKyAg ICAgICAgd2hpbGUgYm91bmRzLmxlbigpID49IG1heF9maWxlcyBhcyB1c2l6ZSB7Cj4gKyAgICAg ICAgICAgIC8vIFVud3JhcCBpcyBzYWZlIGJlY2F1c2Ugb2YgdGhlIGxlbmd0aCBjaGVjayBhYm92 ZQo+ICsgICAgICAgICAgICBsZXQgdG9fcmVtb3ZlID0gYm91bmRzLnBvcCgpLnVud3JhcCgpOwo+ ICsgICAgICAgICAgICBzdGQ6OmZzOjpyZW1vdmVfZmlsZSgmdG9fcmVtb3ZlLmZpbGUpCj4gKyAg ICAgICAgICAgICAgICAud2l0aF9jb250ZXh0KHx8IGZvcm1hdCEoImZhaWxlZCB0byByZW1vdmUg e30iLCB0b19yZW1vdmUuZmlsZS5kaXNwbGF5KCkpKT87Cj4gKyAgICAgICAgfQo+ICsKPiArICAg ICAgICBPayhkaWRfcm90YXRlKQo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBBZGQgbmV3IHRhc2tz IHRvIHRoZSB0YXNrIGFyY2hpdmUuCj4gKyAgICAvLy8KPiArICAgIC8vLyBSdW5uaW5nIHRhc2tz ICh0YXNrcyB3aXRob3V0IGFuIGVuZHRpbWUpIGFyZSBwbGFjZWQgaW50byB0aGUgJ2FjdGl2ZScg ZmlsZSBpbiB0aGUKPiArICAgIC8vLyB0YXNrIGNhY2hlIGJhc2UgZGlyZWN0b3J5LiBGaW5pc2hl ZCB0YXNrcyBhcmUgc29ydGVkIGludG8gYGFyY2hpdmUuPHN0YXJ0aW1lPmAgYXJjaGl2ZQo+ICsg ICAgLy8vIGZpbGVzLCB3aGVyZSBgPHN0YXJ0dGltZXM+YCBkZW5vdGVzIHRoZSBsb3dlc3QgcGVy bWl0dGVkIHN0YXJ0IHRpbWUgdGltZXN0YW1wIGZvciBhIGdpdmVuCj4gKyAgICAvLy8gYXJjaGl2 ZSBmaWxlLiBJZiBhIHRhc2sgd2hpY2ggd2FzIGFkZGVkIGFzIHJ1bm5pbmcgcHJldmlvdXNseSBp cyBhZGRlZCBhZ2FpbiwgdGhpcyB0aW1lIGluCj4gKyAgICAvLy8gYSBmaW5pc2hlZCBzdGF0ZSwg aXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGBhY3RpdmVgIGZpbGUgYW5kIGFsc28gc29ydGVk IGludG8KPiArICAgIC8vLyBvbmUgb2YgdGhlIGFyY2hpdmUgZmlsZXMuCj4gKyAgICAvLy8gU2Ft ZSBnb2VzIGZvciB0aGUgbGlzdCBvZiB0cmFja2VkIHRhc2tzOyB0aGUgZW50cnkgaW4gdGhlIHN0 YXRlIGZpbGUgd2lsbCBiZSByZW1vdmVkLgo+ICsgICAgLy8vCj4gKyAgICAvLy8gQ3Jhc2ggY29u c2lzdGVuY3k6Cj4gKyAgICAvLy8KPiArICAgIC8vLyBUaGUgc3RhdGUgZmlsZSwgd2hpY2ggY29u dGFpbnMgdGhlIGN1dC1vZmYgdGltZXN0YW1wcyBmb3IgZnV0dXJlIHRhc2sgZmV0Y2hpbmcsIGlz IHVwZGF0ZWQgYXQgdGhlCj4gKyAgICAvLy8gZW5kIGFmdGVyIGFsbCB0YXNrcyBoYXZlIGJlZW4g YWRkZWQgaW50byB0aGUgYXJjaGl2ZS4gQWRkaW5nIHRhc2tzIGlzIGFuIGlkZW1wb3RlbnQKPiAr ICAgIC8vLyBvcGVyYXRpb247IGFkZGluZyB0aGUgKnNhbWUqIHRhc2sgbXVsdGlwbGUgdGltZXMg ZG9lcyBub3QgbGVhZCB0byBkdXBsaWNhdGVkIGVudHJpZXMgaW4gdGhlCj4gKyAgICAvLy8gdGFz ayBhcmNoaXZlLiBJbmRpdmlkdWFsIGFyY2hpdmUgZmlsZXMgYXJlIHVwZGF0ZWQgYXRvbWljYWxs eSwgYnV0IHNpbmNlCj4gKyAgICAvLy8gYWRkaW5nIHRhc2tzIGNhbiBpbnZvbHZlIHVwZGF0aW5n IG11bHRpcGxlIGFyY2hpdmUgZmlsZXMsIHRoZSBhcmNoaXZlIGNvdWxkIGVuZCB1cAo+ICsgICAg Ly8vIGluIGEgcGFydGlhbGx5LXVwZGF0ZWQsIGluY29uc2lzdGVudCBzdGF0ZSBpbiBjYXNlIG9m IGEgY3Jhc2guCj4gKyAgICAvLy8gSG93ZXZlciwgc2luY2UgdGhlIHN0YXRlIGZpbGUgd2l0aCB0 aGUgY3V0LW9mZiB0aW1lc3RhbXBzIGlzIHVwZGF0ZWQgbGFzdCwKPiArICAgIC8vLyB0aGUgY29u c2lzdGVuY3kgb2YgdGhlIGFyY2hpdmUgc2hvdWxkIGJlIHJlc3RvcmVkIGF0IHRoZSBuZXh0IHVw ZGF0ZSBjeWNsZSBvZiB0aGUgYXJjaGl2ZS4KPiArICAgIHB1YiBmbiBhZGRfdGFza3MoJnNlbGYs IG11dCBhZGRlZDogSGFzaE1hcDxTdHJpbmcsIEFkZFRhc2tzPikgLT4gUmVzdWx0PCgpLCBFcnJv cj4gewo+ICsgICAgICAgIGxldCBsb2NrID0gc2VsZi5sb2NrKHRydWUpLmNvbnRleHQoImZhaWxl ZCB0byBsb2NrIGFyY2hpdmUiKT87Cj4gKwo+ICsgICAgICAgIC8vIEdldCBhIGZsYXQgYFZlY2Ag b2YgYWxsIG5ldyB0YXNrcwo+ICsgICAgICAgIGxldCB0YXNrczogVmVjPF8+ID0gYWRkZWQKPiAr ICAgICAgICAgICAgLml0ZXJfbXV0KCkKPiArICAgICAgICAgICAgLmZsYXRfbWFwKHwoXywgdGFz a3MpfCBzdGQ6Om1lbTo6dGFrZSgmbXV0IHRhc2tzLnRhc2tzKSkKPiArICAgICAgICAgICAgLmNv bGxlY3QoKTsKPiArCj4gKyAgICAgICAgbGV0IHVwZGF0ZV9zdGF0ZV9mb3JfcmVtb3RlOiBIYXNo TWFwPFN0cmluZywgYm9vbD4gPSBhZGRlZAo+ICsgICAgICAgICAgICAuaW50b19pdGVyKCkKPiAr ICAgICAgICAgICAgLm1hcCh8KHJlbW90ZSwgYWRkX3Rhc2tzKXwgKHJlbW90ZSwgYWRkX3Rhc2tz LnVwZGF0ZV9tb3N0X3JlY2VudF9hcmNoaXZlX3RpbWVzdGFtcCkpCj4gKyAgICAgICAgICAgIC5j b2xsZWN0KCk7Cj4gKwo+ICsgICAgICAgIGxldCBtdXQgdGFza19pdGVyID0gc2VsZgo+ICsgICAg ICAgICAgICAuZ2V0X3Rhc2tzX3dpdGhfbG9jayhHZXRUYXNrczo6QWN0aXZlLCBsb2NrKQo+ICsg ICAgICAgICAgICAuY29udGV4dCgiZmFpbGVkIHRvIGNyZWF0ZSBhcmNoaXZlIGl0ZXJhdG9yIGZv ciBhY3RpdmUgdGFza3MiKT87Cj4gKwo+ICsgICAgICAgIGxldCBtdXQgYWN0aXZlX3Rhc2tzID0K PiArICAgICAgICAgICAgSGFzaFNldDo6ZnJvbV9pdGVyKHRhc2tfaXRlci5mbGF0X21hcCh8YWN0 aXZlX3Rhc2t8IG1hdGNoIGFjdGl2ZV90YXNrIHsKCmkgdGhpbmsgeW91IHdhbnQgdG8gdXNlICdm aWx0ZXJfbWFwJyBoZXJlPyBldmVuIHRob3VnaCBpdCBzZWVtcyB0byBkbyB0aGUgc2FtZSB0aGlu ZyBpbgp0aGlzIGluc3RhbmNlLCBpIHRoaW5rICdmaWx0ZXJfbWFwJyBiZXR0ZXIgZXhwcmVzc2Vz IHdoYXQgeW91IHdhbnQgdG8gZG8KCj4gKyAgICAgICAgICAgICAgICBPayh0YXNrKSA9PiBTb21l KCh0YXNrLnVwaWQsIHRhc2suc3RhcnR0aW1lKSksCj4gKyAgICAgICAgICAgICAgICBFcnIoZXJy KSA9PiB7Cj4gKyAgICAgICAgICAgICAgICAgICAgbG9nOjplcnJvciEoImZhaWxlZCB0byByZWFk IHRhc2sgY2FjaGUgZW50cnkgZnJvbSBhY3RpdmUgZmlsZToge2Vycn0iKTsKPiArICAgICAgICAg ICAgICAgICAgICBOb25lCj4gKyAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIH0pKTsK CmRvZXMgaXQgbWFrZSBhIGJpZyBkaWZmZXJlbmNlIHRoYXQgeW91IHNhdmUgdGhlIHN0YXJ0dGlt ZSBzZXBlcmF0ZWx5IGhlcmU/CgpGV0lDVCwgdGhpcyBtYWtlcyB0aGUgcmVtb3ZlIGNvZGUgbGF0 ZXIgYSBiaXQgbW9yZSBjb21wbGljYXRlZCwgYW5kCndvdWxkIG9ubHkgbmVlZCB0byBiZSBwYXJz ZWQgaW4gYHVwZGF0ZV9vbGRlc3RfYWN0aXZlYC4gU2luY2UgaSBkb24ndCBhc3N1bWUgdG9vIG1h bnkgY29uY3VycmVudAphY3RpdmUgdGFza3MgaW4gb25lIHNldCBvZiB1cGRhdGVzLCBpIGRvbid0 IHRoaW5rIHRoZSBwYXJzaW5nIHNob3VsZCBiZSB2ZXJ5IGJhZCBoZXJlLi4uCgo+ICsKPiArICAg ICAgICAvLyBDb25zdW1lIHRoZSBpdGVyYXRvciB0byBnZXQgYmFjayB0aGUgbG9jay4gVGhlIGxv Y2sgaXMgaGVsZAo+ICsgICAgICAgIC8vIHVudGlsIF9sb2NrIGlzIGZpbmFsbHkgZHJvcHBlZCBh dCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4KPiArICAgICAgICBsZXQgX2xvY2sgPSB0YXNrX2l0 ZXIuaW50b19sb2NrKCk7Cj4gKwo+ICsgICAgICAgIGxldCBtdXQgbmV3X2ZpbmlzaGVkX3Rhc2tz ID0gVmVjOjpuZXcoKTsKPiArCj4gKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3Mgewo+ICsgICAg ICAgICAgICBpZiB0YXNrLmVuZHRpbWUuaXNfbm9uZSgpIHsKPiArICAgICAgICAgICAgICAgIGFj dGl2ZV90YXNrcy5pbnNlcnQoKHRhc2sudXBpZCwgdGFzay5zdGFydHRpbWUpKTsKPiArICAgICAg ICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgIG5ld19maW5pc2hlZF90YXNrcy5wdXNo KHRhc2spOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBsZXQg bXV0IHN0YXRlID0gc2VsZi5yZWFkX3N0YXRlKCk7Cj4gKwo+ICsgICAgICAgIG5ld19maW5pc2hl ZF90YXNrcy5zb3J0X2J5KGNvbXBhcmVfdGFza3NfcmV2ZXJzZSk7Cj4gKyAgICAgICAgc2VsZi5t ZXJnZV90YXNrc19pbnRvX2FyY2hpdmUoCj4gKyAgICAgICAgICAgIG5ld19maW5pc2hlZF90YXNr cywKPiArICAgICAgICAgICAgJm11dCBhY3RpdmVfdGFza3MsCj4gKyAgICAgICAgICAgIHVwZGF0 ZV9zdGF0ZV9mb3JfcmVtb3RlLAo+ICsgICAgICAgICAgICAmbXV0IHN0YXRlLAo+ICsgICAgICAg ICk/Owo+ICsgICAgICAgIHNlbGYudXBkYXRlX29sZGVzdF9hY3RpdmUoJmFjdGl2ZV90YXNrcywg Jm11dCBzdGF0ZSk7Cj4gKwo+ICsgICAgICAgIGxldCBtdXQgYWN0aXZlOiBWZWM8VGFza0NhY2hl SXRlbT4gPSBhY3RpdmVfdGFza3MKPiArICAgICAgICAgICAgLmludG9faXRlcigpCj4gKyAgICAg ICAgICAgIC5tYXAofCh1cGlkLCBzdGFydHRpbWUpfCBUYXNrQ2FjaGVJdGVtIHsKPiArICAgICAg ICAgICAgICAgIHVwaWQsCj4gKyAgICAgICAgICAgICAgICBzdGFydHRpbWUsCj4gKyAgICAgICAg ICAgICAgICBzdGF0dXM6IE5vbmUsCj4gKyAgICAgICAgICAgICAgICBlbmR0aW1lOiBOb25lLAo+ ICsgICAgICAgICAgICB9KQo+ICsgICAgICAgICAgICAuY29sbGVjdCgpOwo+ICsKPiArICAgICAg ICBhY3RpdmUuc29ydF9ieShjb21wYXJlX3Rhc2tzX3JldmVyc2UpOwo+ICsgICAgICAgIHNlbGYu d3JpdGVfYWN0aXZlX3Rhc2tzKGFjdGl2ZS5pbnRvX2l0ZXIoKSkKPiArICAgICAgICAgICAgLmNv bnRleHQoImZhaWxlZCB0byB3cml0ZSBhY3RpdmUgdGFzayBmaWxlIHdoZW4gYWRkaW5nIHRhc2tz Iik/Owo+ICsgICAgICAgIHNlbGYud3JpdGVfc3RhdGUoc3RhdGUpCj4gKyAgICAgICAgICAgIC5j b250ZXh0KCJmYWlsZWQgdG8gdXBkYXRlIHRhc2sgYXJjaGl2ZSBzdGF0ZSBmaWxlIHdoZW4gYWRk aW5nIHRhc2tzIik/Owo+ICsKPiArICAgICAgICBPaygoKSkKPiArICAgIH0KPiArCj4gKyAgICAv Ly8gVXBkYXRlIHRoZSB0aW1lc3RhbXAgb2YgdGhlIG9sZGVzdCBydW5uaW5nIHRhc2sgaW4gYHN0 YXRlYC4KPiArICAgIGZuIHVwZGF0ZV9vbGRlc3RfYWN0aXZlKCZzZWxmLCBhY3RpdmVfdGFza3M6 ICZIYXNoU2V0PChSZW1vdGVVcGlkLCBpNjQpPiwgc3RhdGU6ICZtdXQgU3RhdGUpIHsKPiArICAg ICAgICAvLyBVcGRhdGUgdGhlIHN0YXRlIHdpdGggdGltZXN0YW1wIG9mIHRoZSBvbGRlc3QgcnVu bmluZyB0YXNrLAo+ICsgICAgICAgIC8vIHdlIGFsc28gdXNlIHRoaXMgYXMgY3V0LW9mZiB3aGVu IGZldGNoaW5nIHRhc2tzLCBzbyB3ZQo+ICsgICAgICAgIC8vIGZvciBzdXJlIGtub3cgd2hlbiBh IHRhc2sgZmluaXNoZXMuCj4gKyAgICAgICAgbGV0IG11dCBvbGRlc3RfYWN0aXZlX3Rhc2tfcGVy X3JlbW90ZSA9IEhhc2hNYXA6Om5ldygpOwo+ICsgICAgICAgIGZvciAodXBpZCwgc3RhcnRpbWUp IGluIGFjdGl2ZV90YXNrcy5pdGVyKCkgewo+ICsgICAgICAgICAgICBvbGRlc3RfYWN0aXZlX3Rh c2tfcGVyX3JlbW90ZQo+ICsgICAgICAgICAgICAgICAgLmVudHJ5KHVwaWQucmVtb3RlKCkudG9f b3duZWQoKSkKPiArICAgICAgICAgICAgICAgIC5hbmRfbW9kaWZ5KHx0aW1lfCAqdGltZSA9ICgq c3RhcnRpbWUpLm1pbigqdGltZSkpCj4gKyAgICAgICAgICAgICAgICAub3JfaW5zZXJ0KCpzdGFy dGltZSk7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIHN0YXRlLm9sZGVzdF9hY3RpdmVfdGFzayA9 IG9sZGVzdF9hY3RpdmVfdGFza19wZXJfcmVtb3RlOwo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBN ZXJnZSBhIGxpc3Qgb2YgKmZpbmlzaGVkKiB0YXNrcyBpbnRvIHRoZSByZW1vdGUgdGFzayBhcmNo aXZlIGZpbGVzLgo+ICsgICAgLy8vIFRoZSBsaXN0IG9mIHRhc2sgaW4gYHRhc2tzYCAqbXVzdCog YmUgc29ydGVkIGJ5IHRoZWlyIHRpbWVzdGFtcCBhbmQgVVBJRCAoZGVzY2VuZGluZyBieQo+ICsg ICAgLy8vIHRpbWVzdGFtcCwgYXNjZW5kaW5nIGJ5IFVQSUQpLgo+ICsgICAgLy8vCj4gKyAgICAv Ly8gVGhlIHRhc2sgYXJjaGl2ZSBzaG91bGQgYmUgbG9ja2VkIHdoZW4gY2FsbGluZyB0aGlzLgo+ ICsgICAgZm4gbWVyZ2VfdGFza3NfaW50b19hcmNoaXZlKAo+ICsgICAgICAgICZzZWxmLAo+ICsg ICAgICAgIHRhc2tzOiBWZWM8VGFza0NhY2hlSXRlbT4sCj4gKyAgICAgICAgYWN0aXZlX3Rhc2tz OiAmbXV0IEhhc2hTZXQ8KFJlbW90ZVVwaWQsIGk2NCk+LAo+ICsgICAgICAgIHVwZGF0ZV9zdGF0 ZV9mb3JfcmVtb3RlOiBIYXNoTWFwPFN0cmluZywgYm9vbD4sCj4gKyAgICAgICAgc3RhdGU6ICZt dXQgU3RhdGUsCj4gKyAgICApIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKPiArICAgICAgICBkZWJ1 Z19hc3NlcnQhKHRhc2tzCj4gKyAgICAgICAgICAgIC5pdGVyKCkKPiArICAgICAgICAgICAgLmlz X3NvcnRlZF9ieSh8YSwgYnwgY29tcGFyZV90YXNrcyhhLCBiKS5pc19nZSgpKSk7Cj4gKwo+ICsg ICAgICAgIGxldCBmaWxlcyA9IHNlbGYKPiArICAgICAgICAgICAgLmFyY2hpdmVfZmlsZXMoKQo+ ICsgICAgICAgICAgICAuY29udGV4dCgiZmFpbGVkIHRvIHJlYWQgYWNoaXZlIGZpbGVzIik/Owo+ ICsKPiArICAgICAgICBsZXQgbXV0IGZpbGVzID0gZmlsZXMuaXRlcigpLnBlZWthYmxlKCk7Cj4g Kwo+ICsgICAgICAgIGxldCBtdXQgY3VycmVudCA9IGZpbGVzLm5leHQoKTsKPiArICAgICAgICBs ZXQgbXV0IG5leHQgPSBmaWxlcy5wZWVrKCk7Cj4gKwo+ICsgICAgICAgIGxldCBtdXQgdGFza3Nf Zm9yX2N1cnJlbnRfZmlsZSA9IFZlYzo6bmV3KCk7Cj4gKwo+ICsgICAgICAgIC8vIFRhc2tzIGFy ZSBzb3J0ZWQgeW91bmdlc3QgdG8gb2xkZXN0IChiaWdnZXN0IHN0YXJ0dGltZSBmaXJzdCkKPiAr ICAgICAgICBmb3IgbXV0IHRhc2sgaW4gdGFza3Mgewo+ICsgICAgICAgICAgICAvLyBVc2luZyBh IHBhcnRpYWwgbW92ZSB0byBhdm9pZCBoYXZpbmcgdG8gY2xvbmUgdGFzay51cGlkCj4gKyAgICAg ICAgICAgIGxldCB1cGlkX2FuZF9zdGFydHRpbWUgPSAodGFzay51cGlkLCB0YXNrLnN0YXJ0dGlt ZSk7Cj4gKyAgICAgICAgICAgIGFjdGl2ZV90YXNrcy5yZW1vdmUoJnVwaWRfYW5kX3N0YXJ0dGlt ZSk7Cj4gKyAgICAgICAgICAgIHRhc2sudXBpZCA9IHVwaWRfYW5kX3N0YXJ0dGltZS4wOwo+ICsK PiArICAgICAgICAgICAgaWYgbGV0IFNvbWUodHJhY2tlZF90YXNrcykgPSBzdGF0ZS50cmFja2Vk X3Rhc2tzLmdldF9tdXQodGFzay51cGlkLnJlbW90ZSgpKSB7Cj4gKyAgICAgICAgICAgICAgICB0 cmFja2VkX3Rhc2tzLnJlbW92ZSgmdGFzay51cGlkKTsKPiArICAgICAgICAgICAgfQo+ICsKPiAr ICAgICAgICAgICAgaWYgbGV0IFNvbWUodHJ1ZSkgPSB1cGRhdGVfc3RhdGVfZm9yX3JlbW90ZS5n ZXQodGFzay51cGlkLnJlbW90ZSgpKSB7Cj4gKyAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhl IG1vc3QgcmVjZW50IHN0YXJ0aW1lIHBlciByZW1vdGUsIHRoZSB0YXNrIHBvbGxpbmcgbG9naWMg dXNlcyBpdCBhcyBhCj4gKyAgICAgICAgICAgICAgICAvLyBjdXQtb2ZmLgo+ICsgICAgICAgICAg ICAgICAgc3RhdGUKPiArICAgICAgICAgICAgICAgICAgICAubW9zdF9yZWNlbnRfYXJjaGl2ZV9z dGFydHRpbWUKPiArICAgICAgICAgICAgICAgICAgICAuZW50cnkodGFzay51cGlkLnJlbW90ZSgp LnRvX293bmVkKCkpCj4gKyAgICAgICAgICAgICAgICAgICAgLmFuZF9tb2RpZnkofHRpbWV8ICp0 aW1lID0gKHRhc2suc3RhcnR0aW1lKS5tYXgoKnRpbWUpKQo+ICsgICAgICAgICAgICAgICAgICAg IC5vcl9pbnNlcnQodGFzay5zdGFydHRpbWUpOwo+ICsgICAgICAgICAgICB9Cj4gKwo+ICsgICAg ICAgICAgICAvLyBTa2lwIGFoZWFkIHVudGlsIHdlIGhhdmUgZm91bmQgdGhlIGNvcnJlY3QgZmls ZS4KPiArICAgICAgICAgICAgd2hpbGUgbmV4dC5pc19zb21lKCkgewo+ICsgICAgICAgICAgICAg ICAgaWYgbGV0IFNvbWUoY3VycmVudCkgPSBjdXJyZW50IHsKPiArICAgICAgICAgICAgICAgICAg ICBpZiB0YXNrLnN0YXJ0dGltZSA+PSBjdXJyZW50LnN0YXJ0dGltZSB7Cj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAg ICAgICAgICAgICAvLyBUaGUgbmV4dCBlbnRyeSdzIGN1dC1vZmYgaXMgbGFyZ2VyIHRoZW4gdGhl IHRhc2sncyBzdGFydCB0aW1lLCB0aGF0IG1lYW5zCj4gKyAgICAgICAgICAgICAgICAgICAgLy8g d2Ugd2FudCB0byBmaW5hbGl6ZWQgdGhlIGN1cnJlbnQgZmlsZSBieSBtZXJnaW5nIGFsbCB0YXNr cyB0aGF0Cj4gKyAgICAgICAgICAgICAgICAgICAgLy8gc2hvdWxkIGJlIHN0b3JlZCBpbiBpdC4u Lgo+ICsgICAgICAgICAgICAgICAgICAgIHNlbGYubWVyZ2Vfc2luZ2xlX2FyY2hpdmVfZmlsZSgK PiArICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptZW06OnRha2UoJm11dCB0YXNrc19mb3Jf Y3VycmVudF9maWxlKSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgJmN1cnJlbnQuZmlsZSwK PiArICAgICAgICAgICAgICAgICAgICApCj4gKyAgICAgICAgICAgICAgICAgICAgLndpdGhfY29u dGV4dCh8fCB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCEoImZhaWxlZCB0byBt ZXJnZSBhcmNoaXZlIGZpbGUge30iLCBjdXJyZW50LmZpbGUuZGlzcGxheSgpKQo+ICsgICAgICAg ICAgICAgICAgICAgIH0pPzsKPiArICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAg ICAgICAvLyAuLi4gYW5kIHRoZSB0aGUgYGN1cnJlbnRgIGZpbGUgdG8gdGhlIG5leHQgZW50cnku Cj4gKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gZmlsZXMubmV4dCgpOwo+ICsgICAgICAgICAg ICAgICAgbmV4dCA9IGZpbGVzLnBlZWsoKTsKPiArICAgICAgICAgICAgfQo+ICsKPiArICAgICAg ICAgICAgaWYgbGV0IFNvbWUoY3VycmVudCkgPSBjdXJyZW50IHsKPiArICAgICAgICAgICAgICAg IGlmIHRhc2suc3RhcnR0aW1lIDwgY3VycmVudC5zdGFydHRpbWUgewo+ICsgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICB9Cj4g KyAgICAgICAgICAgIHRhc2tzX2Zvcl9jdXJyZW50X2ZpbGUucHVzaCh0YXNrKTsKPiArICAgICAg ICB9Cj4gKwo+ICsgICAgICAgIC8vIE1lcmdlIHRhc2tzIGZvciB0aGUgbGFzdCBmaWxlLgo+ICsg ICAgICAgIGlmIGxldCBTb21lKGN1cnJlbnQpID0gY3VycmVudCB7Cj4gKyAgICAgICAgICAgIHNl bGYubWVyZ2Vfc2luZ2xlX2FyY2hpdmVfZmlsZSh0YXNrc19mb3JfY3VycmVudF9maWxlLCAmY3Vy cmVudC5maWxlKQo+ICsgICAgICAgICAgICAgICAgLndpdGhfY29udGV4dCh8fCB7Cj4gKyAgICAg ICAgICAgICAgICAgICAgZm9ybWF0ISgiZmFpbGVkIHRvIG1lcmdlIGFyY2hpdmUgZmlsZSB7fSIs IGN1cnJlbnQuZmlsZS5kaXNwbGF5KCkpCj4gKyAgICAgICAgICAgICAgICB9KT87Cj4gKyAgICAg ICAgfQo+ICsKPiArICAgICAgICBPaygoKSkKPiArICAgIH0KPiArCj4gKyAgICAvLy8gQWRkIGEg bmV3IHRyYWNrZWQgdGFzay4KPiArICAgIC8vLwo+ICsgICAgLy8vIFRoaXMgd2lsbCBpbnNlcnQg dGhlIHRhc2sgaW4gdGhlIGxpc3Qgb2YgdHJhY2tlZCB0YXNrcyBpbiB0aGUgc3RhdGUgZmlsZSwK PiArICAgIC8vLyBhcyB3ZWxsIGFzIGNyZWF0ZSBhbiBlbnRyeSBpbiB0aGUgYGFjdGl2ZWAgZmls ZS4KPiArICAgIC8vLwo+ICsgICAgLy8vIFRoaXMgZnVuY3Rpb24gd2lsbCByZXF1ZXN0IGFuIGV4 Y2x1c2l2ZSBsb2NrIGZvciB0aGUgdGFzayBjYWNoZSwKPiArICAgIC8vLyBkbyBub3QgY2FsbCBp ZiB5b3UgYXJlIGFscmVhZHkgaG9sZGluZyBhIGxvY2suCj4gKyAgICBwdWIgZm4gYWRkX3RyYWNr ZWRfdGFzaygmc2VsZiwgdGFzazogVGFza0NhY2hlSXRlbSkgLT4gUmVzdWx0PCgpLCBFcnJvcj4g ewo+ICsgICAgICAgIGxldCBsb2NrID0gc2VsZi5sb2NrKHRydWUpLmNvbnRleHQoImZhaWxlZCB0 byBsb2NrIGFyY2hpdmUiKT87Cj4gKwo+ICsgICAgICAgIGxldCBtdXQgdGFza3MgPSBWZWM6Om5l dygpOwo+ICsgICAgICAgIGxldCBtdXQgdGFza19pdGVyID0gc2VsZgo+ICsgICAgICAgICAgICAu Z2V0X3Rhc2tzX3dpdGhfbG9jayhHZXRUYXNrczo6QWN0aXZlLCBsb2NrKQo+ICsgICAgICAgICAg ICAuY29udGV4dCgiZmFpbGVkIHRvIGNyZWF0ZSBhY3RpdmUgdGFzayBpdGVyYXRvciIpPzsKPiAr Cj4gKyAgICAgICAgZm9yIHRhc2sgaW4gJm11dCB0YXNrX2l0ZXIgewo+ICsgICAgICAgICAgICBt YXRjaCB0YXNrIHsKPiArICAgICAgICAgICAgICAgIE9rKHRhc2spID0+IHRhc2tzLnB1c2godGFz ayksCj4gKyAgICAgICAgICAgICAgICBFcnIoZXJyKSA9PiB7Cj4gKyAgICAgICAgICAgICAgICAg ICAgbG9nOjplcnJvciEoCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgcmVh ZCBleGlzdGluZyB0YXNrIGNhY2hlIGVudHJ5IGZyb20gJ2FjdGl2ZScgZmlsZToge2Vycn0iCj4g KyAgICAgICAgICAgICAgICAgICAgKTsKPiArICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAg ICAgfQo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgdGFza3MucHVzaCh0YXNrLmNsb25lKCkp Owo+ICsgICAgICAgIHRhc2tzLnNvcnRfYnkoY29tcGFyZV90YXNrc19yZXZlcnNlKTsKPiArCj4g KyAgICAgICAgbGV0IF9sb2NrID0gdGFza19pdGVyLmludG9fbG9jaygpOwo+ICsKPiArICAgICAg ICBsZXQgbXV0IHN0YXRlID0gc2VsZi5yZWFkX3N0YXRlKCk7Cj4gKwo+ICsgICAgICAgIHN0YXRl Cj4gKyAgICAgICAgICAgIC5vbGRlc3RfYWN0aXZlX3Rhc2sKPiArICAgICAgICAgICAgLmVudHJ5 KHRhc2sudXBpZC5yZW1vdGUoKS50b19vd25lZCgpKQo+ICsgICAgICAgICAgICAuYW5kX21vZGlm eSh8YXwgKmEgPSAoKmEpLm1pbih0YXNrLnN0YXJ0dGltZSkpCj4gKyAgICAgICAgICAgIC5vcl9p bnNlcnQodGFzay5zdGFydHRpbWUpOwo+ICsKPiArICAgICAgICBsZXQgdHJhY2tlZF9wZXJfcmVt b3RlID0gc3RhdGUKPiArICAgICAgICAgICAgLnRyYWNrZWRfdGFza3MKPiArICAgICAgICAgICAg LmVudHJ5KHRhc2sudXBpZC5yZW1vdGUoKS50b19vd25lZCgpKQo+ICsgICAgICAgICAgICAub3Jf ZGVmYXVsdCgpOwo+ICsgICAgICAgIHRyYWNrZWRfcGVyX3JlbW90ZS5pbnNlcnQodGFzay51cGlk KTsKPiArCj4gKyAgICAgICAgc2VsZi53cml0ZV9hY3RpdmVfdGFza3ModGFza3MuaW50b19pdGVy KCkpCj4gKyAgICAgICAgICAgIC5jb250ZXh0KCJmYWlsZWQgdG8gd3JpdGUgYWN0aXZlIHRhc2tz IGZpbGUgd2hlbiBhZGRpbmcgdHJhY2tlZCB0YXNrIik/Owo+ICsgICAgICAgIHNlbGYud3JpdGVf c3RhdGUoc3RhdGUpCj4gKyAgICAgICAgICAgIC5jb250ZXh0KCJmYWlsZWQgdG8gd3JpdGUgc3Rh dGUgZmlsZSB3aGVuIGFkZGluZyB0cmFja2VkIHRhc2tzIik/Owo+ICsKPiArICAgICAgICBPaygo KSkKPiArICAgIH0KPiArCj4gKyAgICAvLy8gSXRlcmF0ZSBvdmVyIGNhY2hlZCB0YXNrcy4KPiAr ICAgIC8vLwo+ICsgICAgLy8vIFRoaXMgZnVuY3Rpb24gd2lsbCByZXF1ZXN0IGEgbm9uLWV4Y2x1 c2l2ZSByZWFkLWxvY2ssIGRvbid0IGNhbGwgaWYKPiArICAgIC8vLyB5b3UgYWxyZWFkeSBob2xk IGEgbG9jayBmb3IgdGhpcyBjYWNoZS4gU2VlIFtgU2VsZjo6Z2V0X3Rhc2tzX3dpdGhfbG9ja2Bd Lgo+ICsgICAgcHViIGZuIGdldF90YXNrcygmc2VsZiwgbW9kZTogR2V0VGFza3MpIC0+IFJlc3Vs dDxUYXNrQXJjaGl2ZUl0ZXJhdG9yLCBFcnJvcj4gewo+ICsgICAgICAgIGxldCBsb2NrID0gc2Vs Zgo+ICsgICAgICAgICAgICAubG9jayhmYWxzZSkKPiArICAgICAgICAgICAgLmNvbnRleHQoImdl dF90YXNrczogZmFpbGVkIHRvIGFjcXVpcmUgbG9jayIpPzsKPiArICAgICAgICBzZWxmLmdldF90 YXNrc193aXRoX2xvY2sobW9kZSwgbG9jaykKPiArICAgICAgICAgICAgLmNvbnRleHQoImZhaWxl ZCB0byBjcmVhdGUgdGFzayBhcmNoaXZlIGl0ZXJhdG9yIikKPiArICAgIH0KPiArCj4gKyAgICAv Ly8gSXRlcmF0ZSBvdmVyIGNhY2hlZCB0YXNrcy4KPiArICAgIC8vLwo+ICsgICAgLy8vIFRoaXMg ZnVuY3Rpb24gcmVxdWlyZXMgeW91IHRvIHBhc3MgYSBsb2NrLiBJZiB5b3Ugd2FudCB0byBjb250 aW51ZSB0byBob2xkIHRoZSBsb2NrCj4gKyAgICAvLy8gYWZ0ZXIgaXRlcmF0aW5nLCB5b3UgY2Fu IGNvbnN1bWUgdGhlIGl0ZXJhdG9yIGJ5IGNhbGxpbmcKPiArICAgIC8vLyBbYFRhc2tBcmNoaXZl SXRlcmF0b3I6OmludG9fbG9ja2BdLCB5aWVsZGluZyB0aGUgb3JpZ2luYWwgbG9jay4KPiArICAg IHB1YiBmbiBnZXRfdGFza3Nfd2l0aF9sb2NrKAo+ICsgICAgICAgICZzZWxmLAo+ICsgICAgICAg IG1vZGU6IEdldFRhc2tzLAo+ICsgICAgICAgIGxvY2s6IFRhc2tDYWNoZUxvY2ssCj4gKyAgICAp IC0+IFJlc3VsdDxUYXNrQXJjaGl2ZUl0ZXJhdG9yLCBFcnJvcj4gewo+ICsgICAgICAgIG1hdGNo IG1vZGUgewo+ICsgICAgICAgICAgICBHZXRUYXNrczo6QWxsID0+IHsKPiArICAgICAgICAgICAg ICAgIGxldCBhcmNoaXZlX2ZpbGVzID0gc2VsZi5hcmNoaXZlX2ZpbGVzKCk/LmludG9faXRlcigp Lm1hcCh8cGFpcnwgcGFpci5maWxlKTsKPiArICAgICAgICAgICAgICAgIGxldCBhbGxfZmlsZXMg PSBbc2VsZi5iYXNlX3BhdGguam9pbihBQ1RJVkVfRklMRU5BTUUpXQo+ICsgICAgICAgICAgICAg ICAgICAgIC5pbnRvX2l0ZXIoKQo+ICsgICAgICAgICAgICAgICAgICAgIC5jaGFpbihhcmNoaXZl X2ZpbGVzKTsKPiArCj4gKyAgICAgICAgICAgICAgICBPayhUYXNrQXJjaGl2ZUl0ZXJhdG9yOjpu ZXcoQm94OjpuZXcoYWxsX2ZpbGVzKSwgbG9jaykpCj4gKyAgICAgICAgICAgIH0KPiArICAgICAg ICAgICAgR2V0VGFza3M6OkFjdGl2ZSA9PiB7Cj4gKyAgICAgICAgICAgICAgICBsZXQgZmlsZXMg PSBbc2VsZi5iYXNlX3BhdGguam9pbihBQ1RJVkVfRklMRU5BTUUpXTsKPiArICAgICAgICAgICAg ICAgIE9rKFRhc2tBcmNoaXZlSXRlcmF0b3I6Om5ldyhCb3g6Om5ldyhmaWxlcy5pbnRvX2l0ZXIo KSksIGxvY2spKQo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICNbY2ZnKHRlc3QpXQo+ ICsgICAgICAgICAgICBHZXRUYXNrczo6QXJjaGl2ZWQgPT4gewo+ICsgICAgICAgICAgICAgICAg bGV0IGZpbGVzID0gc2VsZi5hcmNoaXZlX2ZpbGVzKCk/Owo+ICsKPiArICAgICAgICAgICAgICAg IE9rKFRhc2tBcmNoaXZlSXRlcmF0b3I6Om5ldygKPiArICAgICAgICAgICAgICAgICAgICBCb3g6 Om5ldyhmaWxlcy5pbnRvX2l0ZXIoKS5tYXAofHBhaXJ8IHBhaXIuZmlsZSkpLAo+ICsgICAgICAg ICAgICAgICAgICAgIGxvY2ssCj4gKyAgICAgICAgICAgICAgICApKQo+ICsgICAgICAgICAgICB9 Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBXcml0ZSB0aGUgcHJvdmlkZWQg dGFza3MgdG8gdGhlICdhY3RpdmUnIGZpbGUuCj4gKyAgICAvLy8KPiArICAgIC8vLyBUaGUgdGFz a3MgYXJlIGZpcnN0IHdyaXR0ZW4gdG8gYSB0ZW1wb3JhcnkgZmlsZSwgd2hpY2ggaXMgdGhlbiB1 c2VkCj4gKyAgICAvLy8gdG8gYXRvbWljYWxseSByZXBsYWNlIHRoZSBvcmlnaW5hbC4KPiArICAg IGZuIHdyaXRlX2FjdGl2ZV90YXNrcygmc2VsZiwgdGFza3M6IGltcGwgSXRlcmF0b3I8SXRlbSA9 IFRhc2tDYWNoZUl0ZW0+KSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7Cj4gKyAgICAgICAgbGV0IChm ZCwgcGF0aCkgPSBwcm94bW94X3N5czo6ZnM6Om1ha2VfdG1wX2ZpbGUoCj4gKyAgICAgICAgICAg IHNlbGYuYmFzZV9wYXRoLmpvaW4oQUNUSVZFX0ZJTEVOQU1FKSwKPiArICAgICAgICAgICAgc2Vs Zi5jcmVhdGVfb3B0aW9ucywKPiArICAgICAgICApPzsKPiArICAgICAgICBsZXQgbXV0IGZkID0g QnVmV3JpdGVyOjpuZXcoZmQpOwo+ICsKPiArICAgICAgICBTZWxmOjp3cml0ZV90YXNrcygmbXV0 IGZkLCB0YXNrcyk/Owo+ICsKPiArICAgICAgICBpZiBsZXQgRXJyKGVycikgPSBmZC5mbHVzaCgp IHsKPiArICAgICAgICAgICAgbG9nOjplcnJvciEoImNvdWxkIG5vdCBmbHVzaCAnYWN0aXZlJyBm aWxlOiB7ZXJyfSIpOwo+ICsgICAgICAgIH0KPiArICAgICAgICBkcm9wKGZkKTsKPiArCj4gKyAg ICAgICAgbGV0IHRhcmdldCA9IHNlbGYuYmFzZV9wYXRoLmpvaW4oQUNUSVZFX0ZJTEVOQU1FKTsK PiArCj4gKyAgICAgICAgbGV0IHJlcyA9IHN0ZDo6ZnM6OnJlbmFtZSgmcGF0aCwgJnRhcmdldCku d2l0aF9jb250ZXh0KHx8IHsKPiArICAgICAgICAgICAgZm9ybWF0ISgKPiArICAgICAgICAgICAg ICAgICJmYWlsZWQgdG8gcmVwbGFjZSB7fSB3aXRoIHt9IiwKPiArICAgICAgICAgICAgICAgIHRh cmdldC5kaXNwbGF5KCksCj4gKyAgICAgICAgICAgICAgICBwYXRoLmRpc3BsYXkoKSwKPiArICAg ICAgICAgICAgKQo+ICsgICAgICAgIH0pOwo+ICsKPiArICAgICAgICBpZiBsZXQgRXJyKGVycikg PSByZXMgewo+ICsgICAgICAgICAgICBpZiBsZXQgRXJyKGVycikgPSBzdGQ6OmZzOjpyZW1vdmVf ZmlsZSgmcGF0aCkgewo+ICsgICAgICAgICAgICAgICAgbG9nOjplcnJvciEoImZhaWxlZCB0byBj bGVhbnVwIHRlbXBvcmFyeSBmaWxlIHt9OiB7ZXJyfSIsIHBhdGguZGlzcGxheSgpKTsKPiArICAg ICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgcmV0dXJuIEVycihlcnIpOwo+ICsgICAgICAg IH0KPiArCj4gKyAgICAgICAgT2soKCkpCj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIFJlYWQgdGhl IHN0YXRlIGZpbGUuCj4gKyAgICAvLy8gSWYgdGhlIHN0YXRlIGZpbGUgY291bGQgbm90IGJlIHJl YWQgb3IgZG9lcyBub3QgZXhpc3QsIHRoZSBkZWZhdWx0IChlbXB0eSkgc3RhdGUKPiArICAgIC8v LyBpcyByZXR1cm5lZC4KPiArICAgIC8vLyBBIGxvY2sgaXMgb25seSBuZWNlc3NhcnkgaWYgdGhl IHJldHVybmVkIHN0YXRlIGlzIG1vZGlmaWVkIGFuZCBsYXRlciBwYXNzZWQKPiArICAgIC8vLyB0 byBbYFNlbGY6OndyaXRlX3N0YXRlYF0uIEluIGNhc2Ugb2YgYSByZWFkLW9ubHkgYWNjZXNzIG5v IGxvY2sgaXMgbmVjZXNzYXJ5LCBhcwo+ICsgICAgLy8vIHRoZSBzdGF0ZSBmaWxlIGlzIGFsd2F5 cyByZXBsYWNlZCBhdG9taWNhbGx5Lgo+ICsgICAgcHViIGZuIHJlYWRfc3RhdGUoJnNlbGYpIC0+ IFN0YXRlIHsKPiArICAgICAgICBmbiBkb19yZWFkX3N0YXRlKHBhdGg6ICZQYXRoKSAtPiBSZXN1 bHQ8U3RhdGUsIEVycm9yPiB7Cj4gKyAgICAgICAgICAgIG1hdGNoIHN0ZDo6ZnM6OnJlYWQocGF0 aCkgewo+ICsgICAgICAgICAgICAgICAgT2soY29udGVudCkgPT4gc2VyZGVfanNvbjo6ZnJvbV9z bGljZSgmY29udGVudCkubWFwX2Vycih8ZXJyfCBlcnIuaW50bygpKSwKPiArICAgICAgICAgICAg ICAgIEVycihlcnIpIGlmIGVyci5raW5kKCkgPT0gRXJyb3JLaW5kOjpOb3RGb3VuZCA9PiBPayhE ZWZhdWx0OjpkZWZhdWx0KCkpLAo+ICsgICAgICAgICAgICAgICAgRXJyKGVycikgPT4gRXJyKGVy ci5pbnRvKCkpLAo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBs ZXQgcGF0aCA9IHNlbGYuYmFzZV9wYXRoLmpvaW4oU1RBVEVfRklMRU5BTUUpOwo+ICsgICAgICAg IGRvX3JlYWRfc3RhdGUoJnBhdGgpLnVud3JhcF9vcl9lbHNlKHxlcnJ8IHsKPiArICAgICAgICAg ICAgbG9nOjplcnJvciEoImNvdWxkIG5vdCByZWFkIHN0YXRlIGZpbGU6IHtlcnJ9Iik7Cj4gKyAg ICAgICAgICAgIERlZmF1bHQ6OmRlZmF1bHQoKQo+ICsgICAgICAgIH0pCj4gKyAgICB9Cj4gKwo+ ICsgICAgLy8vIFdyaXRlIHRoZSBzdGF0ZSBmaWxlLgo+ICsgICAgLy8vIFRoZSB0YXNrIGFyY2hp dmUgc2hvdWxkIGJlIGxvY2tlZCBmb3Igd3JpdGluZyB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlv bi4KPiArICAgIGZuIHdyaXRlX3N0YXRlKCZzZWxmLCBzdGF0ZTogU3RhdGUpIC0+IFJlc3VsdDwo KSwgRXJyb3I+IHsKPiArICAgICAgICBsZXQgcGF0aCA9IHNlbGYuYmFzZV9wYXRoLmpvaW4oU1RB VEVfRklMRU5BTUUpOwo+ICsKPiArICAgICAgICBsZXQgZGF0YSA9IHNlcmRlX2pzb246OnRvX3Zl Y19wcmV0dHkoJnN0YXRlKT87Cj4gKwo+ICsgICAgICAgIHByb3htb3hfc3lzOjpmczo6cmVwbGFj ZV9maWxlKHBhdGgsICZkYXRhLCBzZWxmLmNyZWF0ZV9vcHRpb25zLCB0cnVlKT87Cj4gKwo+ICsg ICAgICAgIE9rKCgpKQo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBSZXR1cm5zIGEgbGlzdCBvZiBl eGlzdGluZyBhcmNoaXZlIGZpbGVzLCB0b2dldGhlciB3aXRoIHRoZWlyIHJlc3BlY3RpdmUKPiAr ICAgIC8vLyBjdXQtb2ZmIHRpbWVzdGFtcC4gVGhlIHJlc3VsdCBpcyBzb3J0ZWQgYXNjZW5kaW5n IGJ5IGN1dC1vZmYgdGltZXN0YW1wIChtb3N0IHJlY2VudCBvbmUKPiArICAgIC8vLyBmaXJzdCku Cj4gKyAgICAvLy8gVGhlIHRhc2sgYXJjaGl2ZSBzaG91bGQgYmUgbG9ja2VkIGZvciByZWFkaW5n IHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgo+ICsgICAgZm4gYXJjaGl2ZV9maWxlcygmc2Vs ZikgLT4gUmVzdWx0PFZlYzxBcmNoaXZlRmlsZT4sIEVycm9yPiB7Cj4gKyAgICAgICAgbGV0IG11 dCBuYW1lcyA9IFZlYzo6bmV3KCk7Cj4gKwo+ICsgICAgICAgIGZvciBlbnRyeSBpbiBzdGQ6OmZz OjpyZWFkX2Rpcigmc2VsZi5iYXNlX3BhdGgpPyB7Cj4gKyAgICAgICAgICAgIGxldCBlbnRyeSA9 IGVudHJ5PzsKPiArCj4gKyAgICAgICAgICAgIGlmIGxldCBTb21lKGVuZHRpbWUpID0gZW50cnkK PiArICAgICAgICAgICAgICAgIC5wYXRoKCkKPiArICAgICAgICAgICAgICAgIC5maWxlX25hbWUo KQo+ICsgICAgICAgICAgICAgICAgLmFuZF90aGVuKHxzfCBzLnRvX3N0cigpKQo+ICsgICAgICAg ICAgICAgICAgLmFuZF90aGVuKHxzfCBzLnN0cmlwX3ByZWZpeChBUkNISVZFX0ZJTEVOQU1FX1BS RUZJWCkpCj4gKyAgICAgICAgICAgIHsKPiArICAgICAgICAgICAgICAgIG1hdGNoIGVuZHRpbWUu cGFyc2UoKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgT2soc3RhcnR0aW1lKSA9PiB7Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLnB1c2goQXJjaGl2ZUZpbGUgewo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RhcnR0aW1lLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmlsZTogZW50cnkucGF0aCgpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICB9KTsK PiArICAgICAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICAgICAgRXJyKGVycikg PT4gbG9nOjplcnJvciEoCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgcGFy c2UgYXJjaGl2ZSB0aW1lc3RhbXAgZm9yIGZpbGUge306IHtlcnJ9IiwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgZW50cnkucGF0aCgpLmRpc3BsYXkoKQo+ICsgICAgICAgICAgICAgICAgICAg ICksCj4gKyAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICB9Cj4g Kwo+ICsgICAgICAgIG5hbWVzLnNvcnRfYnlfa2V5KHxlfCAtZS5zdGFydHRpbWUpOwo+ICsKPiAr ICAgICAgICBPayhuYW1lcykKPiArICAgIH0KPiArCj4gKyAgICAvLy8gTWVyZ2UgYHRhc2tzYCB3 aXRoIGFuIGV4aXN0aW5nIGFyY2hpdmUgZmlsZS4KPiArICAgIC8vLyBUaGlzIGZ1bmN0aW9uIGFz c3VtZXMgdGhhdCBgdGFza3NgIGFuZCB0aGUgcHJlLWV4aXN0aW5nIGNvbnRlbnRzIG9mIHRoZSBh cmNoaXZlCj4gKyAgICAvLy8gZmlsZSBhcmUgYm90aCBzb3J0ZWQgZGVzY2VuZGluZyBieSBzdGFy dGltZSAobW9zdCByZWNlbnQgdGFza3MgY29tZSBmaXJzdCkuCj4gKyAgICAvLy8gVGhlIHRhc2sg YXJjaGl2ZSBtdXN0IGJlIGxvY2tlZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KPiArICAg IGZuIG1lcmdlX3NpbmdsZV9hcmNoaXZlX2ZpbGUoCj4gKyAgICAgICAgJnNlbGYsCj4gKyAgICAg ICAgdGFza3M6IFZlYzxUYXNrQ2FjaGVJdGVtPiwKPiArICAgICAgICBmaWxlOiAmUGF0aCwKPiAr ICAgICkgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewo+ICsgICAgICAgIGlmIHRhc2tzLmlzX2VtcHR5 KCkgewo+ICsgICAgICAgICAgICByZXR1cm4gT2soKCkpOwo+ICsgICAgICAgIH0KPiArCj4gKyAg ICAgICAgbGV0IChmZCwgbmV3X3BhdGgpID0gcHJveG1veF9zeXM6OmZzOjptYWtlX3RtcF9maWxl KGZpbGUsIHNlbGYuY3JlYXRlX29wdGlvbnMpPzsKPiArICAgICAgICBsZXQgbXV0IHdyaXRlciA9 IEJ1ZldyaXRlcjo6bmV3KGZkKTsKPiArCj4gKyAgICAgICAgbWF0Y2ggRmlsZTo6b3BlbihmaWxl KSB7Cj4gKyAgICAgICAgICAgIE9rKGZpbGUpID0+IHsKPiArICAgICAgICAgICAgICAgIGxldCBh cmNoaXZlX3JlYWRlciA9IEJ1ZlJlYWRlcjo6bmV3KGZpbGUpOwo+ICsgICAgICAgICAgICAgICAg bGV0IGFyY2hpdmVfaXRlciA9IEFyY2hpdmVJdGVyYXRvcjo6bmV3KGFyY2hpdmVfcmVhZGVyKQo+ ICsgICAgICAgICAgICAgICAgICAgIC5mbGF0X21hcCh8aXRlbXwgbWF0Y2ggaXRlbSB7Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgIE9rKGl0ZW0pID0+IFNvbWUoaXRlbSksCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgIEVycihlcnIpID0+IHsKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxvZzo6ZXJyb3IhKCJjb3VsZCBub3QgcmVhZCB0YXNrIGNhY2hlIGl0ZW0gd2hpbGUgbWVy Z2luZzoge2Vycn0iKTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUKPiArICAg ICAgICAgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICAgICAgIH0pCj4gKyAgICAg ICAgICAgICAgICAgICAgLnBlZWthYmxlKCk7Cj4gKyAgICAgICAgICAgICAgICBsZXQgdGFza19p dGVyID0gdGFza3MuaW50b19pdGVyKCkucGVla2FibGUoKTsKPiArCj4gKyAgICAgICAgICAgICAg ICBTZWxmOjp3cml0ZV90YXNrcygmbXV0IHdyaXRlciwgTWVyZ2VUYXNrSXRlcmF0b3I6Om5ldyhh cmNoaXZlX2l0ZXIsIHRhc2tfaXRlcikpPzsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAg ICBFcnIoZXJyKSBpZiBlcnIua2luZCgpID09IEVycm9yS2luZDo6Tm90Rm91bmQgPT4gewo+ICsg ICAgICAgICAgICAgICAgU2VsZjo6d3JpdGVfdGFza3MoJm11dCB3cml0ZXIsIHRhc2tzLmludG9f aXRlcigpKT87Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgRXJyKGVycikgPT4gcmV0 dXJuIEVycihlcnIuaW50bygpKSwKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlmIGxldCBF cnIoZXJyKSA9IHdyaXRlci5mbHVzaCgpIHsKPiArICAgICAgICAgICAgbG9nOjplcnJvciEoImNv dWxkIG5vdCBmbHVzaCBCdWZXcml0ZXIgZm9yIHtmaWxlOj99OiB7ZXJyfSIpOwo+ICsgICAgICAg IH0KPiArICAgICAgICBkcm9wKHdyaXRlcik7Cj4gKwo+ICsgICAgICAgIGlmIGxldCBFcnIoZXJy KSA9IHN0ZDo6ZnM6OnJlbmFtZSgmbmV3X3BhdGgsIGZpbGUpLndpdGhfY29udGV4dCh8fCB7Cj4g KyAgICAgICAgICAgIGZvcm1hdCEoCj4gKyAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIHJlcGxh Y2Uge30gd2l0aCB7fSIsCj4gKyAgICAgICAgICAgICAgICBmaWxlLmRpc3BsYXkoKSwKPiArICAg ICAgICAgICAgICAgIG5ld19wYXRoLmRpc3BsYXkoKQo+ICsgICAgICAgICAgICApCj4gKyAgICAg ICAgfSkgewo+ICsgICAgICAgICAgICBpZiBsZXQgRXJyKGVycikgPSBzdGQ6OmZzOjpyZW1vdmVf ZmlsZSgmbmV3X3BhdGgpIHsKPiArICAgICAgICAgICAgICAgIGxvZzo6ZXJyb3IhKAo+ICsgICAg ICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gY2xlYW4gdXAgdGVtcG9yYXJ5IGZpbGUge306IHtl cnJ9IiwKPiArICAgICAgICAgICAgICAgICAgICBuZXdfcGF0aC5kaXNwbGF5KCkKPiArICAgICAg ICAgICAgICAgICk7Cj4gKyAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgIHJldHVybiBF cnIoZXJyKTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIE9rKCgpKQo+ICsgICAgfQo+ICsK PiArICAgIC8vLyBXcml0ZSBhbiBpdGVyYXRvciBvZiBbYFRhc2tDYWNoZUl0ZW1gXSB0byBhIHNv bWV0aGluZyB0aGF0IGltcGxlbWVudHMgW2BXcml0ZWBdLgo+ICsgICAgLy8vIFRoZSBpbmRpdmlk dWFsIGl0ZW1zIGFyZSBlbmNvZGVkIGFzIEpTT04gZm9sbG93ZWQgYnkgYSBuZXdsaW5lLgo+ICsg ICAgLy8vIFRoZSB0YXNrIGFyY2hpdmUgc2hvdWxkIGJlIGxvY2tlZCB3aGVuIGNhbGxpbmcgdGhp cyBmdW5jdGlvbi4KPiArICAgIGZuIHdyaXRlX3Rhc2tzKAo+ICsgICAgICAgIHdyaXRlcjogJm11 dCBpbXBsIFdyaXRlLAo+ICsgICAgICAgIHRhc2tzOiBpbXBsIEl0ZXJhdG9yPEl0ZW0gPSBUYXNr Q2FjaGVJdGVtPiwKPiArICAgICkgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewo+ICsgICAgICAgIGZv ciB0YXNrIGluIHRhc2tzIHsKPiArICAgICAgICAgICAgc2VyZGVfanNvbjo6dG9fd3JpdGVyKCZt dXQgKndyaXRlciwgJnRhc2spPzsKPiArICAgICAgICAgICAgd3JpdGVsbiEod3JpdGVyKT87Cj4g KyAgICAgICAgfQo+ICsKPiArICAgICAgICBPaygoKSkKPiArICAgIH0KPiArfQo+ICsKPiArLy8v IENvbXBhcmlzb24gZnVuY3Rpb24gZm9yIHNvcnRpbmcgdGFza3MuCj4gKy8vLyBUaGUgdGFza3Mg YXJlIGNvbXBhcmVkIGJhc2VkIG9uIHRoZSB0YXNrJ3Mgc3RhcnQgdGltZSwgZmFsbGluZwo+ICsv Ly8gYmFjayB0byB0aGUgdGFzaydzIFVQSUQgYXMgYSBzZWNvbmRhcnkgY3JpdGVyaW9uIGluIGNh c2UgdGhlCj4gKy8vLyBzdGFydCB0aW1lcyBhcmUgZXF1YWwuCj4gK3B1YiBmbiBjb21wYXJlX3Rh c2tzKGE6ICZUYXNrQ2FjaGVJdGVtLCBiOiAmVGFza0NhY2hlSXRlbSkgLT4gT3JkZXJpbmcgewo+ ICsgICAgYS5zdGFydHRpbWUKPiArICAgICAgICAuY21wKCZiLnN0YXJ0dGltZSkKPiArICAgICAg ICAudGhlbl93aXRoKHx8IGIudXBpZC50b19zdHJpbmcoKS5jbXAoJmEudXBpZC50b19zdHJpbmco KSkpCj4gK30KPiArCj4gKy8vLyBDb21wYXJpc29uIGZ1bmN0aW9uIGZvciBzb3J0aW5nIHRhc2tz LCByZXZlcnNlZAo+ICsvLy8gVGhlIHRhc2tzIGFyZSBjb21wYXJlZCBiYXNlZCBvbiB0aGUgdGFz aydzIHN0YXJ0IHRpbWUsIGZhbGxpbmcKPiArLy8vIGJhY2sgdG8gdGhlIHRhc2sncyBVUElEIGFz IGEgc2Vjb25kYXJ5IGNyaXRlcmlvbiBpbiBjYXNlIHRoZQo+ICsvLy8gc3RhcnQgdGltZXMgYXJl IGVxdWFsLgo+ICtwdWIgZm4gY29tcGFyZV90YXNrc19yZXZlcnNlKGE6ICZUYXNrQ2FjaGVJdGVt LCBiOiAmVGFza0NhY2hlSXRlbSkgLT4gT3JkZXJpbmcgewo+ICsgICAgY29tcGFyZV90YXNrcyhh LCBiKS5yZXZlcnNlKCkKPiArfQo+ICsKPiArLy8vIEl0ZXJhdG9yIG92ZXIgdGhlIHRhc2sgYXJj aGl2ZS4KPiArcHViIHN0cnVjdCBUYXNrQXJjaGl2ZUl0ZXJhdG9yIHsKPiArICAgIC8vLyBBcmNo aXZlIGZpbGVzIHRvIHJlYWQuCj4gKyAgICBmaWxlczogQm94PGR5biBJdGVyYXRvcjxJdGVtID0g UGF0aEJ1Zj4+LAo+ICsgICAgLy8vIEFyY2hpdmUgaXRlcmF0b3Igd2UgYXJlIGN1cnJlbnRseSB1 c2luZywgaWYgYW55Cj4gKyAgICBjdXJyZW50OiBPcHRpb248QXJjaGl2ZUl0ZXJhdG9yPEJ1ZlJl YWRlcjxGaWxlPj4+LAo+ICsgICAgLy8vIExvY2sgZm9yIHRoaXMgYXJjaGl2ZS4KPiArICAgIGxv Y2s6IFRhc2tDYWNoZUxvY2ssCj4gK30KPiArCj4gK2ltcGwgVGFza0FyY2hpdmVJdGVyYXRvciB7 Cj4gKyAgICAvLy8gQ3JlYXRlIGEgbmV3IHRhc2sgYXJjaGl2ZSBpdGVyYXRvci4KPiArICAgIHB1 YiBmbiBuZXcoZmlsZXM6IEJveDxkeW4gSXRlcmF0b3I8SXRlbSA9IFBhdGhCdWY+PiwgbG9jazog VGFza0NhY2hlTG9jaykgLT4gU2VsZiB7Cj4gKyAgICAgICAgU2VsZiB7Cj4gKyAgICAgICAgICAg IGZpbGVzLAo+ICsgICAgICAgICAgICBjdXJyZW50OiBOb25lLAo+ICsgICAgICAgICAgICBsb2Nr LAo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICAvLy8gUmV0dXJuIHRoZSB0YXNrIGFy Y2hpdmUgbG9jaywgY29uc3VtaW5nIGBzZWxmYC4KPiArICAgIHB1YiBmbiBpbnRvX2xvY2soc2Vs ZikgLT4gVGFza0NhY2hlTG9jayB7Cj4gKyAgICAgICAgc2VsZi5sb2NrCj4gKyAgICB9Cj4gK30K PiArCj4gK2ltcGwgSXRlcmF0b3IgZm9yICZtdXQgVGFza0FyY2hpdmVJdGVyYXRvciB7Cj4gKyAg ICB0eXBlIEl0ZW0gPSBSZXN1bHQ8VGFza0NhY2hlSXRlbSwgRXJyb3I+Owo+ICsKPiArICAgIGZu IG5leHQoJm11dCBzZWxmKSAtPiBPcHRpb248U2VsZjo6SXRlbT4gewo+ICsgICAgICAgIGxvb3Ag ewo+ICsgICAgICAgICAgICBtYXRjaCAmbXV0IHNlbGYuY3VycmVudCB7Cj4gKyAgICAgICAgICAg ICAgICBTb21lKGN1cnJlbnQpID0+IHsKPiArICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dCA9 IGN1cnJlbnQubmV4dCgpOwo+ICsgICAgICAgICAgICAgICAgICAgIGlmIG5leHQuaXNfc29tZSgp IHsKPiArICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7Cj4gKyAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50 ID0gTm9uZTsKPiArICAgICAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICB9Cj4g KyAgICAgICAgICAgICAgICBOb25lID0+ICdpbm5lcjogbG9vcCB7Cj4gKyAgICAgICAgICAgICAg ICAgICAgLy8gUmV0dXJucyBgTm9uZWAgaWYgbm8gbW9yZSBmaWxlcyBhcmUgYXZhaWxhYmxlLCBz dG9wcGluZyBpdGVyYXRpb24uCj4gKyAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRfZmlsZSA9 IHNlbGYuZmlsZXMubmV4dCgpPzsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAgbWF0Y2ggRmls ZTo6b3BlbigmbmV4dF9maWxlKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIE9rKGZpbGUp ID0+IHsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcmNoaXZlX3JlYWRlciA9 IEJ1ZlJlYWRlcjo6bmV3KGZpbGUpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0 IGFyY2hpdmVfaXRlciA9IEFyY2hpdmVJdGVyYXRvcjo6bmV3KGFyY2hpdmVfcmVhZGVyKTsKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudCA9IFNvbWUoYXJjaGl2ZV9p dGVyKTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrICdpbm5lcjsKPiArICAg ICAgICAgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICAgICAgICAgICBFcnIoZXJy KSA9PiB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2c6OmVycm9yISgiY291bGQg bm90IG9wZW4ge25leHRfZmlsZTo/fSB3aGlsZSBpdGVyYXRpb24gb3ZlciB0YXNrIGFyY2hpdmUg ZmlsZXMsIHNraXBwaW5nOiB7ZXJyfSIpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIH0KPiAr ICAgICAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICB9LAo+ICsgICAgICAgICAg ICB9Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICt9Cj4gKwo+ICsvLy8gQXJjaGl2ZSBmaWxlLgo+ ICsjW2Rlcml2ZShDbG9uZSwgRGVidWcpXQo+ICtzdHJ1Y3QgQXJjaGl2ZUZpbGUgewo+ICsgICAg Ly8vIFRoZSBwYXRoIHRvIHRoZSBhcmNoaXZlIGZpbGUuCj4gKyAgICBmaWxlOiBQYXRoQnVmLAo+ ICsgICAgLy8vIFRoZSBhcmNoaXZlJ3MgbG93ZXN0IHBlcm1pdHRlZCBzdGFydHRpbWUgKHNlY29u ZHMgc2luY2UgVU5JWCBlcG9jaCkuCj4gKyAgICBzdGFydHRpbWU6IGk2NCwKPiArfQo+ICsKPiAr Ly8vIEl0ZXJhdG9yIHRoYXQgbWVyZ2VzIHR3byBfc29ydGVkXyBgSXRlcmF0b3I8SXRlbSA9IFRh c2tDYWNoZUl0ZW0+YCwgcmV0dXJuaW5nIHRoZSBpdGVtcwo+ICsvLy8gZnJvbSBib3RoIGl0ZXJh dG9ycyBzb3J0ZWQuCj4gKy8vLyBUaGUgdHdvIGl0ZXJhdG9ycyBhcmUgZXhwZWN0ZWQgdG8gYmUg c29ydGVkIGRlc2NlbmRpbmdseSBiYXNlZCBvbiB0aGUgdGFzaydzIHN0YXJ0dGltZSBhbmQKPiAr Ly8vIGFzY2VuZGluZ2x5IGJhc2VkIG9uIHRoZSB0YXNrJ3MgVVBJRCdzIHN0cmluZyByZXByZXNl bnRhdGlvbi4gVGhpcyBjYW4gYmUKPiArLy8vIGFjaGlldmVkIGJ5IHVzaW5nIHRoZSBbYGNvbXBh cmVfdGFza3NfcmV2ZXJzZWBdIGZ1bmN0aW9uIHdoZW4gc29ydGluZyBhbiBhcnJheSBvZiB0YXNr cy4KPiArcHViIHN0cnVjdCBNZXJnZVRhc2tJdGVyYXRvcjxUOiBJdGVyYXRvcjxJdGVtID0gVGFz a0NhY2hlSXRlbT4sIFU6IEl0ZXJhdG9yPEl0ZW0gPSBUYXNrQ2FjaGVJdGVtPj4gewo+ICsgICAg bGVmdDogUGVla2FibGU8VD4sCj4gKyAgICByaWdodDogUGVla2FibGU8VT4sCj4gK30KPiArCj4g K2ltcGw8VCwgVT4gTWVyZ2VUYXNrSXRlcmF0b3I8VCwgVT4KPiArd2hlcmUKPiArICAgIFQ6IEl0 ZXJhdG9yPEl0ZW0gPSBUYXNrQ2FjaGVJdGVtPiwKPiArICAgIFU6IEl0ZXJhdG9yPEl0ZW0gPSBU YXNrQ2FjaGVJdGVtPiwKPiArewo+ICsgICAgLy8vIENyZWF0ZSBhIG5ldyBtZXJnaW5nIGl0ZXJh dG9yLgo+ICsgICAgcHViIGZuIG5ldyhsZWZ0OiBQZWVrYWJsZTxUPiwgcmlnaHQ6IFBlZWthYmxl PFU+KSAtPiBTZWxmIHsKPiArICAgICAgICBTZWxmIHsgbGVmdCwgcmlnaHQgfQo+ICsgICAgfQo+ ICt9Cj4gKwo+ICtpbXBsPFQsIFU+IEl0ZXJhdG9yIGZvciBNZXJnZVRhc2tJdGVyYXRvcjxULCBV Pgo+ICt3aGVyZQo+ICsgICAgVDogSXRlcmF0b3I8SXRlbSA9IFRhc2tDYWNoZUl0ZW0+LAo+ICsg ICAgVTogSXRlcmF0b3I8SXRlbSA9IFRhc2tDYWNoZUl0ZW0+LAo+ICt7Cj4gKyAgICB0eXBlIEl0 ZW0gPSBUOjpJdGVtOwo+ICsKPiArICAgIGZuIG5leHQoJm11dCBzZWxmKSAtPiBPcHRpb248VDo6 SXRlbT4gewo+ICsgICAgICAgIGxldCBvcmRlciA9IG1hdGNoIChzZWxmLmxlZnQucGVlaygpLCBz ZWxmLnJpZ2h0LnBlZWsoKSkgewo+ICsgICAgICAgICAgICAoU29tZShsKSwgU29tZShyKSkgPT4g U29tZShjb21wYXJlX3Rhc2tzKGwsIHIpKSwKPiArICAgICAgICAgICAgKFNvbWUoXyksIE5vbmUp ID0+IFNvbWUoT3JkZXJpbmc6OkdyZWF0ZXIpLAo+ICsgICAgICAgICAgICAoTm9uZSwgU29tZShf KSkgPT4gU29tZShPcmRlcmluZzo6TGVzcyksCj4gKyAgICAgICAgICAgIChOb25lLCBOb25lKSA9 PiBOb25lLAo+ICsgICAgICAgIH07Cj4gKwo+ICsgICAgICAgIG1hdGNoIG9yZGVyIHsKPiArICAg ICAgICAgICAgU29tZShPcmRlcmluZzo6R3JlYXRlcikgPT4gc2VsZi5sZWZ0Lm5leHQoKSwKPiAr ICAgICAgICAgICAgU29tZShPcmRlcmluZzo6TGVzcykgPT4gc2VsZi5yaWdodC5uZXh0KCksCj4g KyAgICAgICAgICAgIFNvbWUoT3JkZXJpbmc6OkVxdWFsKSA9PiB7Cj4gKyAgICAgICAgICAgICAg ICAvLyBEZWR1cCBieSBjb25zdW1pbmcgdGhlIG90aGVyIGl0ZXJhdG9yIGFzIHdlbGwKPiArICAg ICAgICAgICAgICAgIGxldCBfID0gc2VsZi5yaWdodC5uZXh0KCk7Cj4gKyAgICAgICAgICAgICAg ICBzZWxmLmxlZnQubmV4dCgpCj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgTm9uZSA9 PiBOb25lLAo+ICsgICAgICAgIH0KPiArICAgIH0KPiArfQo+ICsKPiArLy8vIEl0ZXJhdG9yIGZv ciBhIHNpbmdsZSB0YXNrIGFyY2hpdmUgZmlsZS4KPiArLy8vCj4gKy8vLyBUaGlzIGl0ZXJhdG9y IGltcGxlbWVudHMgYEl0ZXJhdG9yPEl0ZW0gPSBSZXN1bHQ8VGFza0NhY2hlSXRlbSwgRXJyb3I+ YC4gV2hlbiBpdGVyYXRpbmcsCj4gKy8vLyB0YXNrcyBhcmUgcmVhZCBsaW5lIGJ5IGxpbmUsIHdp dGhvdXQgbGVhZGluZyB0aGUgZW50aXJlIGFyY2hpdmUgZmlsZSBpbnRvIG1lbW9yeS4KPiArcHVi IHN0cnVjdCBBcmNoaXZlSXRlcmF0b3I8VD4gewo+ICsgICAgaXRlcjogTGluZXM8VD4sCj4gK30K PiArCj4gK2ltcGw8VDogQnVmUmVhZD4gQXJjaGl2ZUl0ZXJhdG9yPFQ+IHsKPiArICAgIC8vLyBD cmVhdGUgYSBuZXcgaXRlcmF0b3IuCj4gKyAgICBwdWIgZm4gbmV3KGZpbGU6IFQpIC0+IFNlbGYg ewo+ICsgICAgICAgIGxldCByZWFkZXIgPSBmaWxlLmxpbmVzKCk7Cj4gKwo+ICsgICAgICAgIFNl bGYgeyBpdGVyOiByZWFkZXIgfQo+ICsgICAgfQo+ICt9Cj4gKwo+ICtpbXBsPFQ6IEJ1ZlJlYWQ+ IEl0ZXJhdG9yIGZvciBBcmNoaXZlSXRlcmF0b3I8VD4gewo+ICsgICAgdHlwZSBJdGVtID0gUmVz dWx0PFRhc2tDYWNoZUl0ZW0sIEVycm9yPjsKPiArCj4gKyAgICBmbiBuZXh0KCZtdXQgc2VsZikg LT4gT3B0aW9uPFNlbGY6Okl0ZW0+IHsKPiArICAgICAgICBzZWxmLml0ZXIubmV4dCgpLm1hcCh8 cmVzdWx0fCB7Cj4gKyAgICAgICAgICAgIHJlc3VsdAo+ICsgICAgICAgICAgICAgICAgLmFuZF90 aGVuKHxsaW5lfCBPayhzZXJkZV9qc29uOjpmcm9tX3N0cigmbGluZSk/KSkKPiArICAgICAgICAg ICAgICAgIC5tYXBfZXJyKEludG86OmludG8pCj4gKyAgICAgICAgfSkKPiArICAgIH0KPiArfQo+ ICsKPiArI1tjZmcodGVzdCldCj4gK21vZCB0ZXN0cyB7Cj4gKyAgICB1c2Ugc3RkOjppbzo6Q3Vy c29yOwo+ICsKPiArICAgIHVzZSBjcmF0ZTo6dGVzdF9zdXBwb3J0Ojp0ZW1wOjpOYW1lZFRlbXBE aXI7Cj4gKwo+ICsgICAgdXNlIHN1cGVyOjoqOwo+ICsKPiArICAgICNbdGVzdF0KPiArICAgIGZu IGFyY2hpdmVfaXRlcmF0b3IoKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7Cj4gKyAgICAgICAgbGV0 IGZpbGUgPSByIyIKPiArICAgICAgICAgICAgeyJ1cGlkIjoicHZlLXJlbW90ZSFVUElEOnB2ZTow MDAzOUU0RDowMDI2MzhCODo2N0I0QTlEMTpzdG9wYWxsOjpyb290QHBhbToiLCJzdGF0dXMiOiJP SyIsImVuZHRpbWUiOjEyMzQ1LCAic3RhcnR0aW1lIjogMTIzNH0KPiArICAgICAgICAgICAgeyJ1 cGlkIjoicGJzLXJlbW90ZSFVUElEOnBiczowMDAwMDJCMjowMDAwMDE1ODowMDAwMDAwMDo2NzRE ODI4Qzpsb2dyb3RhdGU6OnJvb3RAcGFtOiIsInN0YXR1cyI6Ik9LIiwiZW5kdGltZSI6MTIzNDUs ICJzdGFydHRpbWUiOiAxMjM0fQo+ICsgICAgICAgICAgICBpbnZhbGlkIiMKPiArICAgICAgICAg ICAgLnRyaW1fc3RhcnQoKTsKPiArCj4gKyAgICAgICAgbGV0IGN1cnNvciA9IEN1cnNvcjo6bmV3 KGZpbGUuYXNfYnl0ZXMoKSk7Cj4gKyAgICAgICAgbGV0IG11dCBpdGVyID0gQXJjaGl2ZUl0ZXJh dG9yOjpuZXcoY3Vyc29yKTsKPiArCj4gKyAgICAgICAgYXNzZXJ0X2VxIShpdGVyLm5leHQoKS51 bndyYXAoKS51bndyYXAoKS51cGlkLnJlbW90ZSgpLCAicHZlLXJlbW90ZSIpOwo+ICsgICAgICAg IGFzc2VydF9lcSEoaXRlci5uZXh0KCkudW53cmFwKCkudW53cmFwKCkudXBpZC5yZW1vdGUoKSwg InBicy1yZW1vdGUiKTsKPiArICAgICAgICBhc3NlcnQhKGl0ZXIubmV4dCgpLnVud3JhcCgpLmlz X2VycigpKTsKPiArICAgICAgICBhc3NlcnQhKGl0ZXIubmV4dCgpLmlzX25vbmUoKSk7Cj4gKwo+ ICsgICAgICAgIE9rKCgpKQo+ICsgICAgfQo+ICsKPiArICAgIGZuIHRhc2soc3RhcnR0aW1lOiBp NjQsIGVuZGVkOiBib29sKSAtPiBUYXNrQ2FjaGVJdGVtIHsKPiArICAgICAgICBsZXQgKHN0YXR1 cywgZW5kdGltZSkgPSBpZiBlbmRlZCB7Cj4gKyAgICAgICAgICAgIChTb21lKCJPSyIuaW50bygp KSwgU29tZShzdGFydHRpbWUgKyAxMCkpCj4gKyAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAg ICAgKE5vbmUsIE5vbmUpCj4gKyAgICAgICAgfTsKPiArCj4gKyAgICAgICAgVGFza0NhY2hlSXRl bSB7Cj4gKyAgICAgICAgICAgIHVwaWQ6IGZvcm1hdCEoCj4gKyAgICAgICAgICAgICAgICAicHZl LXJlbW90ZSFVUElEOnB2ZTowMDAzOUU0RDowMDI2MzhCODp7c3RhcnR0aW1lOjA4WH06c3RvcGFs bDo6cm9vdEBwYW06Igo+ICsgICAgICAgICAgICApCj4gKyAgICAgICAgICAgIC5wYXJzZSgpCj4g KyAgICAgICAgICAgIC51bndyYXAoKSwKPiArICAgICAgICAgICAgc3RhcnR0aW1lLAo+ICsgICAg ICAgICAgICBzdGF0dXMsCj4gKyAgICAgICAgICAgIGVuZHRpbWUsCj4gKyAgICAgICAgfQo+ICsg ICAgfQo+ICsKPiArICAgIGZuIGFzc2VydF9zdGFydHRpbWVzKGNhY2hlOiAmVGFza0NhY2hlLCBz dGFydHRpbWVzOiAmW2k2NF0pIHsKPiArICAgICAgICBsZXQgdGFza3M6IFZlYzxpNjQ+ID0gY2Fj aGUKPiArICAgICAgICAgICAgLmdldF90YXNrcyhHZXRUYXNrczo6QWxsKQo+ICsgICAgICAgICAg ICAudW53cmFwKCkKPiArICAgICAgICAgICAgLm1hcCh8dGFza3wgdGFzay51bndyYXAoKS5zdGFy dHRpbWUpCj4gKyAgICAgICAgICAgIC5jb2xsZWN0KCk7Cj4gKwo+ICsgICAgICAgIGFzc2VydF9l cSEoJnRhc2tzLCBzdGFydHRpbWVzKTsKPiArICAgIH0KPiArCj4gKyAgICBmbiBhZGRfdGFza3Mo Y2FjaGU6ICZUYXNrQ2FjaGUsIHRhc2tzOiBWZWM8VGFza0NhY2hlSXRlbT4pIC0+IFJlc3VsdDwo KSwgRXJyb3I+IHsKPiArICAgICAgICBsZXQgcGFyYW0gPSBBZGRUYXNrcyB7Cj4gKyAgICAgICAg ICAgIHVwZGF0ZV9tb3N0X3JlY2VudF9hcmNoaXZlX3RpbWVzdGFtcDogdHJ1ZSwKPiArICAgICAg ICAgICAgdGFza3MsCj4gKyAgICAgICAgfTsKPiArICAgICAgICBsZXQgbXV0IGEgPSBIYXNoTWFw OjpuZXcoKTsKPiArICAgICAgICBhLmluc2VydCgicHZlLXJlbW90ZSIuaW50bygpLCBwYXJhbSk7 Cj4gKwo+ICsgICAgICAgIGNhY2hlLmFkZF90YXNrcyhhKQo+ICsgICAgfQo+ICsKPiArICAgICNb dGVzdF0KPiArICAgIGZuIHRlc3RfYWRkX3Rhc2tzKCkgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewo+ ICsgICAgICAgIGxldCB0bXBfZGlyID0gTmFtZWRUZW1wRGlyOjpuZXcoKT87Cj4gKyAgICAgICAg bGV0IGNhY2hlID0gVGFza0NhY2hlOjpuZXcodG1wX2Rpci5wYXRoKCksIENyZWF0ZU9wdGlvbnM6 Om5ldygpKS51bndyYXAoKTsKPiArCj4gKyAgICAgICAgY2FjaGUubmV3X2ZpbGUoMTAwMCk/Owo+ ICsgICAgICAgIGFzc2VydF9lcSEoY2FjaGUuYXJjaGl2ZV9maWxlcygpPy5sZW4oKSwgMSk7Cj4g Kwo+ICsgICAgICAgIGFkZF90YXNrcygmY2FjaGUsIHZlYyFbdGFzaygxMDAwLCB0cnVlKSwgdGFz aygxMDAxLCB0cnVlKV0pPzsKPiArCj4gKyAgICAgICAgY2FjaGUucm90YXRlKDE1MDAsIDAsIDMp PzsKPiArICAgICAgICBhc3NlcnRfZXEhKGNhY2hlLmFyY2hpdmVfZmlsZXMoKT8ubGVuKCksIDIp Owo+ICsKPiArICAgICAgICBhZGRfdGFza3MoJmNhY2hlLCB2ZWMhW3Rhc2soMTUwMCwgdHJ1ZSks IHRhc2soMTUwMSwgdHJ1ZSldKT87Cj4gKyAgICAgICAgYWRkX3Rhc2tzKCZjYWNoZSwgdmVjIVt0 YXNrKDEyMDAsIHRydWUpLCB0YXNrKDEzMDAsIHRydWUpXSk/Owo+ICsKPiArICAgICAgICBjYWNo ZS5yb3RhdGUoMjAwMCwgMCwgMyk/Owo+ICsgICAgICAgIGFzc2VydF9lcSEoY2FjaGUuYXJjaGl2 ZV9maWxlcygpPy5sZW4oKSwgMyk7Cj4gKwo+ICsgICAgICAgIGFkZF90YXNrcygmY2FjaGUsIHZl YyFbdGFzaygyMDAwLCB0cnVlKV0pPzsKPiArICAgICAgICBhZGRfdGFza3MoJmNhY2hlLCB2ZWMh W3Rhc2soMTUwMiwgdHJ1ZSldKT87Cj4gKyAgICAgICAgYWRkX3Rhc2tzKCZjYWNoZSwgdmVjIVt0 YXNrKDEwMDIsIHRydWUpXSk/Owo+ICsKPiArICAgICAgICAvLyBUaGVzZSBhcmUgYmVmb3JlIHRo ZSBjdXQtb2ZmIG9mIDEwMDAsIHNvIHRoZXkgd2lsbCBiZSBkaXNjYXJkZWQuCj4gKyAgICAgICAg YWRkX3Rhc2tzKCZjYWNoZSwgdmVjIVt0YXNrKDgwMCwgdHJ1ZSksIHRhc2soOTAwLCB0cnVlKV0p PzsKPiArCj4gKyAgICAgICAgLy8gVGhpcyBvbmUgc2hvdWxkIGJlIGRlZHVwZWQKPiArICAgICAg ICBhZGRfdGFza3MoJmNhY2hlLCB2ZWMhW3Rhc2soMTAwMCwgdHJ1ZSldKT87Cj4gKwo+ICsgICAg ICAgIGFzc2VydF9zdGFydHRpbWVzKAo+ICsgICAgICAgICAgICAmY2FjaGUsCj4gKyAgICAgICAg ICAgICZbMjAwMCwgMTUwMiwgMTUwMSwgMTUwMCwgMTMwMCwgMTIwMCwgMTAwMiwgMTAwMSwgMTAw MF0sCj4gKyAgICAgICAgKTsKPiArCj4gKyAgICAgICAgY2FjaGUucm90YXRlKDI1MDAsIDAsIDMp PzsKPiArCj4gKyAgICAgICAgYXNzZXJ0X2VxIShjYWNoZS5hcmNoaXZlX2ZpbGVzKCk/Lmxlbigp LCAzKTsKPiArCj4gKyAgICAgICAgYXNzZXJ0X3N0YXJ0dGltZXMoJmNhY2hlLCAmWzIwMDAsIDE1 MDIsIDE1MDEsIDE1MDBdKTsKPiArCj4gKyAgICAgICAgY2FjaGUucm90YXRlKDMwMDAsIDAsIDMp PzsKPiArICAgICAgICBhc3NlcnRfZXEhKGNhY2hlLmFyY2hpdmVfZmlsZXMoKT8ubGVuKCksIDMp Owo+ICsKPiArICAgICAgICBhc3NlcnRfc3RhcnR0aW1lcygmY2FjaGUsICZbMjAwMF0pOwo+ICsK PiArICAgICAgICBPaygoKSkKPiArICAgIH0KPiArCj4gKyAgICAjW3Rlc3RdCj4gKyAgICBmbiB0 ZXN0X2FjdGl2ZV90YXNrc19hcmVfbWlncmF0ZWRfdG9fYXJjaGl2ZSgpIC0+IFJlc3VsdDwoKSwg RXJyb3I+IHsKPiArICAgICAgICBsZXQgdG1wX2RpciA9IE5hbWVkVGVtcERpcjo6bmV3KCk/Owo+ ICsgICAgICAgIGxldCBjYWNoZSA9IFRhc2tDYWNoZTo6bmV3KHRtcF9kaXIucGF0aCgpLCBDcmVh dGVPcHRpb25zOjpuZXcoKSkudW53cmFwKCk7Cj4gKwo+ICsgICAgICAgIGNhY2hlLm5ld19maWxl KDEwMDApPzsKPiArICAgICAgICBhZGRfdGFza3MoJmNhY2hlLCB2ZWMhW3Rhc2soMTAwMCwgZmFs c2UpLCB0YXNrKDEwMDEsIGZhbHNlKV0pPzsKPiArICAgICAgICBhc3NlcnRfZXEhKGNhY2hlLmdl dF90YXNrcyhHZXRUYXNrczo6QWN0aXZlKT8uY291bnQoKSwgMik7Cj4gKwo+ICsgICAgICAgIGxl dCBzdGF0ZSA9IGNhY2hlLnJlYWRfc3RhdGUoKTsKPiArICAgICAgICBhc3NlcnRfZXEhKCpzdGF0 ZS5vbGRlc3RfYWN0aXZlX3Rhc2suZ2V0KCJwdmUtcmVtb3RlIikudW53cmFwKCksIDEwMDApOwo+ ICsKPiArICAgICAgICBhZGRfdGFza3MoJmNhY2hlLCB2ZWMhW3Rhc2soMTAwMCwgdHJ1ZSksIHRh c2soMTAwMSwgdHJ1ZSldKT87Cj4gKwo+ICsgICAgICAgIGFzc2VydF9zdGFydHRpbWVzKCZjYWNo ZSwgJlsxMDAxLCAxMDAwXSk7Cj4gKwo+ICsgICAgICAgIGFzc2VydF9lcSEoY2FjaGUuZ2V0X3Rh c2tzKEdldFRhc2tzOjpBY3RpdmUpPy5jb3VudCgpLCAwKTsKPiArCj4gKyAgICAgICAgT2soKCkp Cj4gKyAgICB9Cj4gKwo+ICsgICAgI1t0ZXN0XQo+ICsgICAgZm4gdGVzdF9pbml0KCkgLT4gUmVz dWx0PCgpLCBFcnJvcj4gewo+ICsgICAgICAgIGxldCB0bXBfZGlyID0gTmFtZWRUZW1wRGlyOjpu ZXcoKT87Cj4gKyAgICAgICAgbGV0IGNhY2hlID0gVGFza0NhY2hlOjpuZXcodG1wX2Rpci5wYXRo KCksIENyZWF0ZU9wdGlvbnM6Om5ldygpKS51bndyYXAoKTsKPiArCj4gKyAgICAgICAgY2FjaGUu aW5pdCgxMDAwLCAzLCAxMDApPzsKPiArICAgICAgICBhc3NlcnRfZXEhKGNhY2hlLmFyY2hpdmVf ZmlsZXMoKT8ubGVuKCksIDMpOwo+ICsKPiArICAgICAgICBhZGRfdGFza3MoCj4gKyAgICAgICAg ICAgICZjYWNoZSwKPiArICAgICAgICAgICAgdmVjIVsKPiArICAgICAgICAgICAgICAgIHRhc2so MTA1MCwgdHJ1ZSksCj4gKyAgICAgICAgICAgICAgICB0YXNrKDk1MCwgdHJ1ZSksCj4gKyAgICAg ICAgICAgICAgICB0YXNrKDg1MCwgdHJ1ZSksCj4gKyAgICAgICAgICAgICAgICB0YXNrKDc1MCwg dHJ1ZSksIC8vIFRoaXMgb25lIGlzIGRpc2NhcmRlZAo+ICsgICAgICAgICAgICBdLAo+ICsgICAg ICAgICk/Owo+ICsKPiArICAgICAgICBhc3NlcnRfZXEhKGNhY2hlLmdldF90YXNrcyhHZXRUYXNr czo6QXJjaGl2ZWQpPy5jb3VudCgpLCAzKTsKPiArCj4gKyAgICAgICAgT2soKCkpCj4gKyAgICB9 Cj4gKwo+ICsgICAgI1t0ZXN0XQo+ICsgICAgZm4gdGVzdF90cmFja2luZ190YXNrcygpIC0+IFJl c3VsdDwoKSwgRXJyb3I+IHsKPiArICAgICAgICBsZXQgdG1wX2RpciA9IE5hbWVkVGVtcERpcjo6 bmV3KCk/Owo+ICsgICAgICAgIGxldCBjYWNoZSA9IFRhc2tDYWNoZTo6bmV3KHRtcF9kaXIucGF0 aCgpLCBDcmVhdGVPcHRpb25zOjpuZXcoKSkudW53cmFwKCk7Cj4gKwo+ICsgICAgICAgIGNhY2hl LmluaXQoMTAwMCwgMywgMTAwKT87Cj4gKwo+ICsgICAgICAgIGNhY2hlLmFkZF90cmFja2VkX3Rh c2sodGFzaygxMDUwLCBmYWxzZSkpPzsKPiArCj4gKyAgICAgICAgYXNzZXJ0X2VxIShjYWNoZS5n ZXRfdGFza3MoR2V0VGFza3M6OkFjdGl2ZSk/LmNvdW50KCksIDEpOwo+ICsgICAgICAgIGNhY2hl LmFkZF90cmFja2VkX3Rhc2sodGFzaygxMDYwLCBmYWxzZSkpPzsKPiArICAgICAgICBhc3NlcnRf ZXEhKGNhY2hlLmdldF90YXNrcyhHZXRUYXNrczo6QWN0aXZlKT8uY291bnQoKSwgMik7Cj4gKwo+ ICsgICAgICAgIGxldCBzdGF0ZSA9IGNhY2hlLnJlYWRfc3RhdGUoKTsKPiArICAgICAgICBhc3Nl cnRfZXEhKHN0YXRlLnRyYWNrZWRfdGFza3MuZ2V0KCJwdmUtcmVtb3RlIikudW53cmFwKCkubGVu KCksIDIpOwo+ICsgICAgICAgIGFzc2VydF9lcSEoKnN0YXRlLm9sZGVzdF9hY3RpdmVfdGFzay5n ZXQoInB2ZS1yZW1vdGUiKS51bndyYXAoKSwgMTA1MCk7Cj4gKwo+ICsgICAgICAgIC8vIE1hcmsg Zmlyc3QgdGFzayBhcyBmaW5pc2hlZAo+ICsgICAgICAgIGFkZF90YXNrcygmY2FjaGUsIHZlYyFb dGFzaygxMDUwLCB0cnVlKV0pPzsKPiArCj4gKyAgICAgICAgYXNzZXJ0X2VxIShjYWNoZS5nZXRf dGFza3MoR2V0VGFza3M6OkFjdGl2ZSk/LmNvdW50KCksIDEpOwo+ICsgICAgICAgIGFzc2VydF9l cSEoY2FjaGUuZ2V0X3Rhc2tzKEdldFRhc2tzOjpBcmNoaXZlZCk/LmNvdW50KCksIDEpOwo+ICsK PiArICAgICAgICAvLyBNYXJrIHNlY29uZCB0YXNrIGFzIGZpbmlzaGVkCj4gKyAgICAgICAgYWRk X3Rhc2tzKCZjYWNoZSwgdmVjIVt0YXNrKDEwNjAsIHRydWUpXSk/Owo+ICsKPiArICAgICAgICBh c3NlcnRfZXEhKGNhY2hlLmdldF90YXNrcyhHZXRUYXNrczo6QWN0aXZlKT8uY291bnQoKSwgMCk7 Cj4gKyAgICAgICAgYXNzZXJ0X2VxIShjYWNoZS5nZXRfdGFza3MoR2V0VGFza3M6OkFyY2hpdmVk KT8uY291bnQoKSwgMik7Cj4gKwo+ICsgICAgICAgIE9rKCgpKQo+ICsgICAgfQo+ICt9CgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KcGRtLWRldmVsIG1h aWxpbmcgbGlzdApwZG0tZGV2ZWxAbGlzdHMucHJveG1veC5jb20KaHR0cHM6Ly9saXN0cy5wcm94 bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vcGRtLWRldmVsCg==