From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2DE54CD80A2 for ; Tue, 10 Oct 2023 10:48:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=5Jbrc83SQTLafga1q8gTa9YAfQ04qOYO5OBxESJnqKI=; b=AjRy0SKXWNuQcN i4dG/it/aCiYuSYK0AgtUovMGqdaGBJ6AEEahn8mSvYAO3hubIIeo1Vo30kDY2Xmicy9q4XBvgaiJ JjkhFWsithE9hbA4U4ryNapYlaxPrpV11hkIFdMD24OFBWv0ECpLHdCML+6hrd+AcXvWIHam/N2GI v83/UeETWbTdT6EFEpj6mBR/uM85kR+HiEcSk+FMtcW7EPMHLDXfAv79R5BnkccgFpX5tmLjNDYWC TssbnYzj1ruIMQPge5OIeBg6JynZZtgVBx1XIW+7jmfV+sZwuYN1aBF2a/e/4xxEBpXTiihpogh8I cXKtALPio4yUaHM4jrHw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qqAGv-00D5AR-07; Tue, 10 Oct 2023 10:47:29 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qqAGq-00D59X-1Q for linux-arm-kernel@lists.infradead.org; Tue, 10 Oct 2023 10:47:27 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BE8991FB; Tue, 10 Oct 2023 03:48:02 -0700 (PDT) Received: from [10.1.30.177] (XHFQ2J9959.cambridge.arm.com [10.1.30.177]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 9165E3F762; Tue, 10 Oct 2023 03:47:19 -0700 (PDT) Message-ID: <15a52c3d-9584-449b-8228-1335e0753b04@arm.com> Date: Tue, 10 Oct 2023 11:47:18 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v6 0/9] variable-order, large folios for anonymous memory Content-Language: en-GB To: David Hildenbrand , Andrew Morton , Matthew Wilcox , Yin Fengwei , Yu Zhao , Catalin Marinas , Anshuman Khandual , Yang Shi , "Huang, Ying" , Zi Yan , Luis Chamberlain , Itaru Kitayama , "Kirill A. Shutemov" , John Hubbard , David Rientjes , Vlastimil Babka , Hugh Dickins Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org References: <20230929114421.3761121-1-ryan.roberts@arm.com> <6d89fdc9-ef55-d44e-bf12-fafff318aef8@redhat.com> <99f8294b-b4e5-424f-d761-24a70a82cc1a@redhat.com> From: Ryan Roberts In-Reply-To: <99f8294b-b4e5-424f-d761-24a70a82cc1a@redhat.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231010_034724_755388_429A7C14 X-CRM114-Status: GOOD ( 71.05 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMDkvMTAvMjAyMyAxNzoyMiwgRGF2aWQgSGlsZGVuYnJhbmQgd3JvdGU6Cj4gWy4uLl0KPiAK Pj4+Cj4+PiBJIGRpc2xpa2UgZXhwb3NpbmcgIm9yZGVycyIgdG8gdGhlIHVzZXJzLCBJJ20gaGFw cHkgdG8gYmUgY29udmluY2VkIHdoeSBJIGFtCj4+PiB3cm9uZyBhbmQgaXQgaXMgYSBnb29kIGlk ZWEuCj4+Pgo+Pj4gU28gbWF5YmUgIlNtYWxsIFRIUCIvIlNtYWxsLXNpemVkIFRIUCIgaXMgYmV0 dGVyLiBPciAiTWVkaXVtLXNpemVkIFRIUCIgLS0gYXMKPj4+IHNhaWQsIEkgdGhpbmsgRnJlZUJT RCB0ZW5kcyB0byBjYWxsIGl0ICJNZWRpdW0tc2l6ZWQgc3VwZXJwYWdlcyIuIEJ1dCB3aGF0J3MK Pj4+IHNtYWxsL21lZGl1bS9sYXJnZSBpcyBkZWJhdGFibGUuICJTbWFsbCIgaW1wbGllcyBhdCBs ZWFzdCB0aGF0IGl0J3Mgc21hbGxlciB0aGFuCj4+PiB3aGF0IHdlIHVzZWQgdG8ga25vdywgd2hp Y2ggaXMgYSBmYWN0Lgo+Pj4KPj4+IENhbiB3ZSBhbHNvIG5vdyB1c2UgdGhlIHRlcm1pbm9sb2d5 IGNvbnNpc3RlbnRseT8gKGUuZy4sICJ2YXJpYWJsZS1vcmRlciwgbGFyZ2UKPj4+IGZvbGlvcyBm b3IgYW5vbnltb3VzIG1lbW9yeSIgLT4gIlNtYWxsLXNpemVkIGFub255bW91cyBUSFAiLCB5b3Ug Y2FuIGp1c3QgcG9pbnQKPj4+IGF0IHRoZSBwcmV2aW91cyBwYXRjaCBzZXQgbmFtZSBpbiB0aGUg Y292ZXIgbGV0dGVyKQo+Pgo+PiBZZXMgYWJzb2x1dGVseS4gRldJVywgSSB3YXMgZGVsaWJlcmF0 ZWx5IG5vdCBjaGFuZ2luZyB0aGUgdGl0bGUgb2YgdGhlIHBhdGNoc2V0Cj4+IHNvIHBlb3BsZSBj b3VsZCBlYXNpbHkgc2VlIGl0IHdhcyBhbiBldm9sdXRpb24gb2Ygc29tZXRoaW5nIHBvc3RlZCBi ZWZvcmUuIEJ1dAo+PiBpZiBpdCdzIHRoZSBub3JtIHRvIGNoYW5nZSB0aGUgdGl0bGUgYXMgdGhl IHBhdGNoc2V0IGV2b2x2ZXMsIEknbSB2ZXJ5IGhhcHB5IHRvCj4+IGRvIHRoYXQuIEFuZCB0aGVy ZSBhcmUgb3RoZXIgcGxhY2VzIHRvbywgaW4gY29tbWl0IGxvZ3MgdGhhdCBJIGNhbiB0aWR5IHVw LiBJCj4+IHdpbGwgYXNzdW1lICJQTUQtc2l6ZWQgVEhQIiwgInNtYWxsLXNpemVkIFRIUCIgYW5k ICJhbm9ueW1vdXMgc21hbGwtc2l6ZWQgVEhQIgo+PiAodGhhdCBsYXN0IG9uZSBzbGlnaHRseSBk aWZmZXJlbnQgZnJvbSB3aGF0IERhdmlkIHN1Z2dlc3RlZCBhYm92ZSAtIGl0IG1lYW5zCj4+ICJz bWFsbC1zaXplZCBUSFAiIGNhbiBzdGlsbCBiZSBncmVwcGVkKSB1bmxlc3Mgb3RoZXJzIG9iamVj dC4KPiAKPiBBYnNvbHV0ZWx5IGZpbmUgd2l0aCBtZS4gSG9waW5nIG90aGVyIHBlb3BsZSB3aWxs IG9iamVjdCB3aGVuIEkgdGFsayBub25zZW5zZSBvcgo+IG15IHN1Z2dlc3Rpb25zIGRvbid0IG1h a2UgYW55IHNlbnNlLgo+IAo+IE9yIGV2ZW4gYmV0dGVyLCBwcm9wb3NlIHNvbWV0aGluZyBiZXR0 ZXIgOikKPiAKPj4KPj4+Cj4+Pj4KPj4+PiAxKSBTaW5jZSBTVyAodGhlIGtlcm5lbCkgaXMgZGVh bGluZyB3aXRoIGxhcmdlciBjaHVua3Mgb2YgbWVtb3J5IHRoYW4gYmFzZQo+Pj4+IMKgwqDCoMKg IHBhZ2VzLCB0aGVyZSBhcmUgZWZmaWNpZW5jeSBzYXZpbmdzIHRvIGJlIGhhZDsgZmV3ZXIgcGFn ZSBmYXVsdHMsCj4+Pj4gYmF0Y2hlZCBQVEUKPj4+PiDCoMKgwqDCoCBhbmQgUk1BUCBtYW5pcHVs YXRpb24sIHJlZHVjZWQgbHJ1IGxpc3QsIGV0Yy4gSW4gc2hvcnQsIHdlIHJlZHVjZSBrZXJuZWwK Pj4+PiDCoMKgwqDCoCBvdmVyaGVhZC4gVGhpcyBzaG91bGQgYmVuZWZpdCBhbGwgYXJjaGl0ZWN0 dXJlcy4KPj4+PiAyKSBTaW5jZSB3ZSBhcmUgbm93IG1hcHBpbmcgcGh5c2ljYWxseSBjb250aWd1 b3VzIGNodW5rcyBvZiBtZW1vcnksIHdlIGNhbiB0YWtlCj4+Pj4gwqDCoMKgwqAgYWR2YW50YWdl IG9mIEhXIFRMQiBjb21wcmVzc2lvbiB0ZWNobmlxdWVzLiBBIHJlZHVjdGlvbiBpbiBUTEIgcHJl c3N1cmUKPj4+PiDCoMKgwqDCoCBzcGVlZHMgdXAga2VybmVsIGFuZCB1c2VyIHNwYWNlLiBhcm02 NCBzeXN0ZW1zIGhhdmUgMiBtZWNoYW5pc21zIHRvCj4+Pj4gY29hbGVzY2UKPj4+PiDCoMKgwqDC oCBUTEIgZW50cmllczsgInRoZSBjb250aWd1b3VzIGJpdCIgKGFyY2hpdGVjdHVyYWwpIGFuZCBI UEEgKHVhcmNoKS4KPj4+Pgo+Pj4+IFRoZSBtYWpvciBjaGFuZ2UgaW4gdGhpcyByZXZpc2lvbiBp cyB0aGUgYWRkaXRpb24gb2Ygc3lzZnMgY29udHJvbHMgdG8gYWxsb3cKPj4+PiB0aGlzICJzbWFs bC1vcmRlciBUSFAiIHRvIGJlIGVuYWJsZWQvZGlzYWJsZWQvY29uZmlndXJlZCBpbmRlcGVuZGVu dGx5IG9mCj4+Pj4gUE1ELW9yZGVyIFRIUC4gVGhlIGFwcHJvYWNoIEkndmUgdGFrZW4gZGlmZmVy cyBhIGJpdCBmcm9tIHByZXZpb3VzIGRpc2N1c3Npb25zOwo+Pj4+IGluc3RlYWQgb2YgY3JlYXRp bmcgYSB3aG9sZSBuZXcgaW50ZXJmYWNlICgibGFyZ2VfZm9saW8iKSwgSSdtIGV4dGVuZGluZyBU SFAuIEkKPj4+PiBwZXJzb25hbGx5IHRoaW5rIHRoaXMgbWFrZXMgdGhpbmdzIGNsZWFyZXIgYW5k IG1vcmUgZXh0ZW5zaWJsZS4gU2VlIFs2XSBmb3IKPj4+PiBkZXRhaWxlZCByYXRpb25hbGUuCj4+ Pgo+Pj4gQ2hhbmdlIDI6IHN5c2ZzIGludGVyZmFjZS4KPj4+Cj4+PiBJZiB3ZSBjYWxsIGl0IFRI UCwgaXQgc2hhbGwgZ28gdW5kZXIgIi9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdl LyIsIEkKPj4+IGFncmVlLgo+Pj4KPj4+IFdoYXQgd2UgZXhwb3NlIHRoZXJlIGFuZCBob3csIGlz IFRCRC4gQWdhaW4sIG5vdCBhIGZyaWVuZCBvZiAib3JkZXJzIiBhbmQKPj4+IGJpdG1hcHMgYXQg YWxsLiBXZSBjYW4gZG8gYmV0dGVyIGlmIHdlIHdhbnQgdG8gZ28gZG93biB0aGF0IHBhdGguCj4+ Pgo+Pj4gTWF5YmUgd2Ugc2hvdWxkIHRha2UgYSBsb29rIGF0IGh1Z2V0bGIsIGFuZCBob3cgdGhl eSBhZGRlZCBzdXBwb3J0IGZvciBtdWx0aXBsZQo+Pj4gc2l6ZXMuIFdoYXQgKm1pZ2h0KiBtYWtl IHNlbnNlIGNvdWxkIGJlIChkZXBlbmRpbmcgb24gd2hpY2ggdmFsdWVzIHdlIGFjdHVhbGx5Cj4+ PiBzdXBwb3J0ISkKPj4+Cj4+Pgo+Pj4gL3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBh Z2UvaHVnZXBhZ2VzLTY0a0IvCj4+PiAvc3lzL2tlcm5lbC9tbS90cmFuc3BhcmVudF9odWdlcGFn ZS9odWdlcGFnZXMtMTI4a0IvCj4+PiAvc3lzL2tlcm5lbC9tbS90cmFuc3BhcmVudF9odWdlcGFn ZS9odWdlcGFnZXMtMjU2a0IvCj4+PiAvc3lzL2tlcm5lbC9tbS90cmFuc3BhcmVudF9odWdlcGFn ZS9odWdlcGFnZXMtNTEya0IvCj4+PiAvc3lzL2tlcm5lbC9tbS90cmFuc3BhcmVudF9odWdlcGFn ZS9odWdlcGFnZXMtMTAyNGtCLwo+Pj4gL3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBh Z2UvaHVnZXBhZ2VzLTIwNDhrQi8KPj4+Cj4+PiBFYWNoIG9uZSB3b3VsZCBjb250YWluIGFuICJl bmFibGVkIiBhbmQgImRlZnJhZyIgZmlsZS4gV2Ugd2FudCBzb21ldGhpbmcgbWluaW1hbAo+Pj4g Zmlyc3Q/IFN0YXJ0IHdpdGggdGhlICJlbmFibGVkIiBvcHRpb24uCj4+Pgo+Pj4KPj4+IGVuYWJs ZWQ6IGFsd2F5cyBbZ2xvYmFsXSBtYWR2aXNlIG5ldmVyCj4+Pgo+Pj4gSW5pdGlhbGx5LCB3ZSB3 b3VsZCBzZXQgaXQgZm9yIFBNRC1zaXplZCBUSFAgdG8gImdsb2JhbCIgYW5kIGZvciBldmVyeXRo aW5nIGVsc2UKPj4+IHRvICJuZXZlciIuCj4+Cj4+IE15IG9ubHkgcmVzZXJ2YXRpb24gYWJvdXQg dGhpcyBhcHByb2FjaCBpcyB0aGUgcG90ZW50aWFsIGZvciBhIGZ1dHVyZSBuZWVkIGZvciBhCj4+ ICJvbmUgc2V0dGluZyBhcHBsaWVkIGFjcm9zcyBhbGwgc2l6ZXMiIGNsYXNzIG9mIGNvbnRyb2wg KGUuZy4gImF1dG8iKS4gSSB0aGluawo+PiB3ZSBhZ3JlZWQgaW4gdGhlIHByZXZpb3VzIG1lZXRp bmdzIHRoYXQgY2hhc2luZyBhIHNvbHV0aW9uIGZvciAiYXV0byIgd2FzIGEgZ29vZAo+PiBhc3Bp cmF0aW9uIHRvIGhhdmUsIHNvIGl0IHdvdWxkIGJlIGdvb2QgdG8gaGF2ZSBhIHBsYWNlIHdlIHdl IGNhbiBpbnNlcnQgdGhhdCBpbgo+PiBmdXR1cmUuIFRoZSBtYWluIHJlYXNvbiB3aHkgSSBjaG9z ZSB0byBleHBvc2UgdGhlICJhbm9uX29yZGVycyIgY29udHJvbCBpcwo+PiBiZWNhdXNlIGl0IGlz IHBvc3NpYmxlIHRvIGJvdGggZW5hYmxlL2Rpc2FibGUgdGhlIHZhcmlvdXMgc2l6ZXMgYXMgd2Vs bCBhcwo+PiBzcGVjaWZpY3kgKGUuZy4pICJhdXRvIiwgd2l0aG91dCBjcmVhdGluZyByZWR1bmRh bmN5LiBCdXQgSSBhZ3JlZSB0aGF0IGlkZWFsbHkKPj4gd2Ugd291bGRuJ3QgZXhwb3NlIG9yZGVy cyB0byB0aGUgdXNlcjsgSSB3YXMgYXR0ZW1wdGluZyBhIGNvbXByb21pc2UgdG8gc2ltcGxpZnkK Pj4gdGhlICJhdXRvIiBjYXNlLgo+Pgo+PiBBIHBvdGVudGlhbCAodGhvdWdoIGZlZWxzIHF1aXRl IGNvbXBsZXgpIHNvbHV0aW9uIHRvIG1ha2UgYXV0byB3b3JrIHdpdGggeW91cgo+PiBwcm9wb3Nh bDogQWRkICJhdXRvIiBhcyBhbiBvcHRpb24gdG8gdGhlIGV4aXN0aW5nIGdsb2JhbCBlbmFibGVk IGZpbGUsIGFuZCB0bwo+PiBhbGwgb2YgeW91ciBwcm9wb3NlZCBuZXcgZW5hYmxlZCBmaWxlcy4g QnV0IGl0cyBvbmx5IHBvc3NpYmxlIHRvICpzZXQqIGF1dG8KPj4gdGhyb3VnaCB0aGUgZ2xvYmFs IGZpbGUuIEFuZCB3aGVuIGl0IGlzIHNldCwgYWxsIG9mIHRoZSBzaXplLXNwZWNpZmljIGVuYWJs ZWQKPj4gZmlsZXMgcmVhZC1iYWNrICJhdXRvIiB0b28uIEFueSBhbnkgd3JpdGVzIHRvIHRoZSBz aXplLXNwZWNpZmljIGVuYWJsZWQgZmlsZXMKPj4gYXJlIGlnbm9yZWQgKG9yIHJlbWVtYmVyZWQg YnV0IG5vdCBlbmFjdGVkKSB1bnRpbCB0aGUgZ2xvYmFsIGVuYWJsZWQgZmlsZSBpcwo+PiBjaGFu Z2VkIGF3YXkgZnJvbSBhdXRvLgo+IAo+IFllcywgSSB0aGluayB0aGVyZSBhcmUgdmFyaW91cyB3 YXlzIGZvcndhcmQgcmVnYXJkaW5nIHRoYXQuIE9yIHRvIGVuYWJsZSAiYXV0byIKPiBtb2RlIG9u bHkgb25jZSBhbGwgYXJlICJhdXRvIiwgYW5kIGFzIHNvb24gYXMgb25lIGlzIG5vdCAiYXV0byIs IGp1c3QgZGlzYWJsZQo+IGl0LiBBIHNpbXBsZQo+IAo+IGVjaG8gImF1dG8iID4gL3N5cy9rZXJu ZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2UvaHVnZXBhZ2VzLSovZW5hYmxlZAoKSSdtIG5vdCBy ZWFsbHkgYSBmYW4sIGJlY2F1c2UgdGhpcyBpbXBsaWVzIHRoYXQgeW91IGhhdmUgYSBwZXJpb2Qg d2hlcmUgImF1dG8iCmlzIHJlcG9ydGVkIGZvciBhIHNpemUsIGJ1dCBpdHMgbm90IHJlYWxseSBp biAiYXV0byIgbW9kZSB5ZXQuCgo+IAo+IFdvdWxkIGRvIHRvIGVuYWJsZSBpdC4gT3IsIGhhdmUg dGhlbSBhbGwgYmUgImdsb2JhbCIgYW5kIGhhdmUgYSBnbG9iYWwgImF1dG8iCj4gbW9kZSBhcyB5 b3UgcmFpc2VkLgo+IAo+IGVjaG8gImdsb2JhbCIgPiAvc3lzL2tlcm5lbC9tbS90cmFuc3BhcmVu dF9odWdlcGFnZS9odWdlcGFnZXMtKi9lbmFibGVkCj4gZWNobyAiYXV0byIgPiAvc3lzL2tlcm5l bC9tbS90cmFuc3BhcmVudF9odWdlcGFnZS9lbmFibGVkCj4gCgpBZ2FpbiwgdGhpcyBpc24ndCBh dG9taWMgZWl0aGVyLiBJIHRlbmQgdG8gcHJlZmVyIG15IHByb3Bvc2FsIGJlY2F1c2UgaXQKc3dp dGNoZXMgYXRvbWljYWxseSAtIHRoZXJlIGFyZSBubyB3ZWlyZCBpbnRlcm1lZGlhdGUgc3RhdGVz LiBBbnl3YXksIEkgZ3Vlc3MKdGhlIGltcG9ydGFudCBwb2ludCBpcyB3ZSBoYXZlIGRlbW9uc3Ry YXRlZCB0aGF0IHlvdXIgcHJvcG9zZWQgaW50ZXJmYWNlIGNvdWxkCmJlIGV4dGVuZGVkIHRvIHN1 cHBvcnQgImF1dG8iIGluIGZ1dHVyZSwgc2hvdWxkIHdlIG5lZWQgaXQuCgo+Pgo+PiBCdXQgSSdt IG5vdCBzdXJlIGlmIGFkZGluZyBhIG5ldyBvcHRpb24gdG8gdGhlIGdsb2JhbCBlbmFibGVkIGZp bGUgbWlnaHQgYnJlYWsKPj4gY29tcGF0Pwo+IAo+IEkgdGhpbmsgd2UgdXNlZCB0byBleHRlbmQg dGhlICJkZWZyYWciIG9wdGlvbiwgc2VlCj4gCj4gY29tbWl0IDIxNDQwZDdlYjkwNDQwMDFiN2Zk YjcxZDAxNjM2ODlmNjBhMGYyYTEKPiBBdXRob3I6IERhdmlkIFJpZW50amVzIDxyaWVudGplc0Bn b29nbGUuY29tPgo+IERhdGU6wqDCoCBXZWQgRmViIDIyIDE1OjQ1OjQ5IDIwMTcgLTA4MDAKPiAK PiDCoMKgwqAgbW0sIHRocDogYWRkIG5ldyBkZWZlcittYWR2aXNlIGRlZnJhZyBvcHRpb24KPiAK PiAKPiBTbyBJIHN1c3BlY3Qgd2UgY291bGQgZXh0ZW5kIHRoYXQgb25lIGluIGEgc2ltaWxhciB3 YXkuCj4gCj4gQnV0IGFnYWluLCB0aGlzIGlzIGp1c3QgdGhlIHRoaW5nIHRoYXQgY2FtZSB0byBt aW5kIHdoZW4gdGhpbmtpbmcgYWJvdXQgaG93IHRvOgo+IGEpIGF2b2lkIG9yZGVycwo+IGIpIG1h a2UgaXQgY29uZmlndXJhYmxlIGFuZCBmdXR1cmUtcHJvb2YKPiBjKSBtYWtlIGl0IGxvb2sgYSBi aXQgY29uc2lzdGVudCB3aXRoIG90aGVyIGludGVyZmFjZXMgKGh1Z2V0bGIgYW5kCj4gwqDCoCBl eGlzdGluZyB0aHApCj4gZCkgc3RpbGwgcHJlcGFyZSBmb3IgYW4gYXV0byBtb2RlIHRoYXQgd2Ug d2FudCBpbiB0aGUgZnV0dXJlCj4gCj4gSSdtIGhhcHB5IHRvIGhlYXIgb3RoZXIgaWRlYXMuCj4g Cj4+Cj4+Pgo+Pj4KPj4+Cj4+PiBUaGF0IHNvdW5kcyByZWFzb25hYmxlIGF0IGxlYXN0IHRvIG1l LCBhbmQgd2Ugd291bGQgYmUgdXNpbmcgd2hhdCB3ZSBsZWFybmVkCj4+PiBmcm9tIFRIUCAoYXMg Sm9obiBzdWdnZXN0ZWQpLsKgIFRoYXQgc3RpbGwgZ2l2ZXMgcmVhc29uYWJsZSBmbGV4aWJpbGl0 eSB3aXRob3V0Cj4+PiBnb2luZyB0b28gd2lsZCwgYW5kIGEgYmV0dGVyIElNSE8gaW50ZXJmYWNl Lgo+Pj4KPj4+IEkgdW5kZXJzdGFuZCBZdSdzIHBvaW50IGFib3V0IEFCSSBkaXNjdXNzaW9ucyBh bmQgIjAga25vYnMiLiBJJ20gaGFwcHkgYXMgbG9uZwo+Pj4gYXMgd2UgY2FuIGhhdmUgc29tZXRo aW5nIHRoYXQgd29uJ3QgaHVydCB1cyBsYXRlciBhbmQgc3RpbGwgYmUgYWJsZSB0byB1c2UgdGhp cwo+Pj4gaW4gZGlzdHJpYnV0aW9ucyB3aXRoaW4gYSByZWFzb25hYmxlIHRpbWVmcmFtZS4gRW5h YmxpbmcvZGlzYWJsaW5nIGluZGl2aWR1YWwKPj4+IHNpemVzIGRvZXMgbm90IHNvdW5kIHRvbyBy ZXN0cmljdGl2ZSB0byBtZS4gQW5kIHdlIGNvdWxkIGFsd2F5cyBhZGQgYW4gImF1dG8iCj4+PiBz ZXR0aW5nIGxhdGVyIGFuZCBkZWZhdWx0IHRvIHRoYXQgd2l0aCBhIG5ldyBrY29uZmlnIGtub2Iu Cj4+Pgo+Pj4gSWYgc29tZW9uZSB3YW50cyB0byBjb25maWd1cmUgaXQsIHdoeSBub3QuIExldCdz IGp1c3QgcHJlcGFyZSBhIHdheSB0byB0byBoYW5kbGUKPj4+IHRoaXMgImJldHRlciIgYXV0b21h dGljYWxseSBpbiB0aGUgZnV0dXJlIChpZiBldmVyIC4uLikuCj4+Pgo+Pj4KPj4+IENoYW5nZSAz OiBTdGF0cwo+Pj4KPj4+PiAvcHJvYy9tZW1pbmZvOgo+Pj4+IMKgwqDCoCBJbnRyb2R1Y2UgbmV3 ICJBbm9uSHVnZVB0ZU1hcCIgZmllbGQsIHdoaWNoIHJlcG9ydHMgdGhlIGFtb3VudCBvZgo+Pj4+ IMKgwqDCoCBtZW1vcnkgKGluIEtpQikgbWFwcGVkIGZyb20gbGFyZ2UgZm9saW9zIGdsb2JhbGx5 IChzaW1pbGFyIHRvCj4+Pj4gwqDCoMKgIEFub25IdWdlUGFnZXMgZmllbGQpLgo+Pj4KPj4+IEFu b25IdWdlUGFnZXMgaXMgYW5kIHJlbWFpbnMgIlBNRC1zaXplZCBUSFAgdGhhdCBpcyBtYXBwZWQg dXNpbmcgYSBQTUQiLCBJIHRoaW5rCj4+PiB3ZSBhbGwgYWdyZWUgb24gdGhhdC4gSXQgc2hvdWxk IGhhdmUgYmVlbiBuYW1lZCAiQW5vblBtZE1hcHBlZCIgb3IKPj4+ICJBbm9uSHVnZVBtZE1hcHBl ZCIsIHRvbyBiYWQsIHdlIGNhbid0IGNoYW5nZSB0aGF0Lgo+Pgo+PiBZZXMgYWdyZWVkLiBJIGRp ZCBjb25zaWRlciByZWRlZmluaW5nICJBbm9uSHVnZVBhZ2VzIiB0byBjb3ZlciBQTUQtIGFuZAo+ PiBQVEUtbWFwcGVkIG1lbW9yeSwgdGhlbiBpbnRyb2R1Y2UgYm90aCBhbiAiQW5vbkh1Z2VQbWRN YXBwZWQiIGFuZAo+PiAiQW5vbkh1Z2VQdGVNYXBwZWQiLCBidXQgSSB0aGluayB0aGF0IHdvdWxk IGxpa2VseSBicmVhayB0aGluZ3MuIEl0cyBmdXJ0aGVyCj4+IGNvbXBsaWNhdGVkIGJlY2F1c2Ug dm1zdGF0cyBwcmludHMgaXQgaW4gUE1ELXNpemUgdW5pdHMsIHNvIGNhbid0IHJlcHJlc2VudAo+ PiBQVEUtbWFwcGVkIG1lbW9yeSBpbiB0aGF0IGNvdW50ZXIuCj4gCj4gOi8KPiAKPj4KPj4+Cj4+ PiAiQW5vbkh1Z2VQdGVNYXAiIGJldHRlciBiZSAiQW5vbkh1Z2VQdGVNYXBwZWQiLgo+Pgo+PiBJ IGFncmVlLCBidXQgSSB3ZW50IHdpdGggdGhlIHNob3J0ZXIgb25lIGJlY2F1c2UgYW55IGxvbmdl ciBhbmQgaXQgd291bGQgdW5hbGlnbgo+PiB0aGUgdmFsdWUgZS5nOgo+Pgo+PiDCoMKgwqDCoCBB bm9uSHVnZVBhZ2VzOsKgwqDCoMKgwqDCoMKgwqAgMCBrQgo+PiDCoMKgwqDCoCBBbm9uSHVnZVB0 ZU1hcHBlZDrCoMKgwqDCoMKgwqDCoCAwIGtCCj4+IMKgwqDCoMKgIFNobWVtUG1kTWFwcGVkOsKg wqDCoMKgwqDCoMKgIDAga0IKPj4gwqDCoMKgwqAgU2hhcmVkX0h1Z2V0bGI6wqDCoMKgwqDCoMKg wqAgMCBrQgo+Pgo+IAo+IENhbid0IHRoYXQgYmUgaGFuZGxlZD8gV2Ugc3VyZWx5IGhhdmUgbG9u ZyBzdHVmZiBpbiB0aGVyZToKPiAKPiBIYXJkd2FyZUNvcnJ1cHRlZDrCoMKgwqDCoCAwIGtCCj4g QW5vbkh1Z2VQYWdlczrCoMKgwqDCoMKgwqDCoMKgIDAga0IKPiBTaG1lbUh1Z2VQYWdlczrCoCAx MDgxMzQ0IGtCCj4gU2htZW1QbWRNYXBwZWQ6wqDCoMKgwqDCoMKgwqAgMCBrQgo+IAo+IEhhcmR3 YXJlQ29ycnVwdGVkIGhhcyBzYW1lIGxlbmd0aCBhcyBBbm9uSHVnZVB0ZU1hcHBlZAoKSGFyZHdh cmVDb3JydXB0ZWQgaXMgc3BlY2lhbCBjYXNlZCBhbmQgaGFzIGEgZmllbGQgbGVuZ3RoIG9mIDUs IHNvIHRoZSBsYXJnZXN0CnZhbHVlIHlvdSBjYW4gcmVwcmVzZW50IGJlZm9yZSBpdCBnZXRzIHB1 c2hlZCBvdXQgaXMgfjk3TUIuIEkgaW1hZ2luZSB0aGF0J3MKcGxlbnR5IGZvciBIYXJkd2FyZUNv cnJ1cHRlZCwgYnV0IHVubGlrZWx5IGVub3VnaCBmb3IgQW5vbkh1Z2VQdGVNYXBwZWQuIFRoZQpz dGFuZGFyZCBmaWVsZCBzaXplIGlzIDgsIHdoaWNoIHByb3ZpZGVzIGZvciB+OTVHQiBiZWZvcmUg YmVjb21pbmcgdW5hbGlnbmVkLgoKPiAKPiBCdXQgSSdtIG5vdCBjb252aW5jZWQgYWJvdXQgIkFu b25IdWdlUHRlTWFwcGVkIiB5ZXQgOikKCk9LCgo+IAo+PiBTbyB3b3VsZCBuZWVkIHRvIGRlY2lk ZSB3aGljaCBpcyBwcmVmZXJhYmxlLCBvciBjb21lIHVwIHdpdGggYSBzaG9ydGVyIG5hbWUuCj4+ Cj4+Pgo+Pj4gQnV0LCBJIHdvbmRlciBpZiB3ZSB3YW50IHRvIGV4cG9zZSB0aGlzICJQdGVNYXBw ZWQiIHRvIHVzZXIgc3BhY2UgKmF0IGFsbCouIFdoeQo+Pj4gc2hvdWxkIHRoZXkgY2FyZSBpZiBp dCdzIFBURSBtYXBwZWQ/IEZvciBQTUQtc2l6ZWQgVEhQIGl0IG1ha2VzIGEgYml0IG9mIHNlbnNl LAo+Pj4gYmVjYXVzZSAhUE1EIGltcGxpZWQgIXBlcmZvcm1hbmNlLCBhbmQgb25lIG1pZ2h0IGhh dmUgYmVlbiBhYmxlIHRvIHRyb3VibGVzaG9vdAo+Pj4gdGhhdCBzb21laG93LiBGb3IgUFRFLW1h cHBlZCwgaXQgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgcmVhbGx5LCB0aGV5IGFyZSBhbHdheXMK Pj4+IFBURS1tYXBwZWQuCj4+Cj4+IEkgZGlzYWdyZWU7IEkndmUgYmVlbiB1c2luZyBpdCBhIGxv dCB0byBkZWJ1ZyBwZXJmb3JtYW5jZSBpc3N1ZXMuIEl0IHRlbGxzIHlvdQo+PiBob3cgbXVjaCBv ZiB5b3VyIGFub24gbWVtb3J5IGlzIGFsbG9jYXRlZCB3aXRoIGxhcmdlIGZvbGlvcy4gQW5kIG1h a2luZyB0aGF0Cj4+IHBlcmNlbnRhZ2UgYmlnZ2VyIGltcHJvdmVzIHBlcmZvcm1hbmNlOyBmZXdl ciBwYWdlIGZhdWx0cywgYW5kIHdpdGggYSBzZXBhcmF0ZQo+PiBjb250cHRlIHNlcmllcyBvbiBh cm02NCwgYmV0dGVyIHVzZSBvZiB0aGUgVExCLiBSZWFzb25zIG1pZ2h0IGluY2x1ZGU7IHBvb3Js eQo+PiBhbGlnbmVkL3RvbyBzbWFsbCBWTUFzLCBtZW1vcnkgZnJhZ21lbnRhdGlvbiBwcmV2ZW50 aW5nIGFsbG9jYXRpb24sIENvVywgZXRjLgo+IAo+IEp1c3QgYmVjYXVzZSBhIHNtYWxsLXNpemVk IFRIUCBpcyBQVEUtbWFwcGVkIGRvZXNuJ3QgdGVsbCB5b3UgYW55dGhpbmcsIHJlYWxseS4KPiBX aGF0IHlvdSB3YW50IHRvIGtub3cgaXMgaWYgaXQgaXMgImNvbXBsZXRlbHkiIGFuZCAiY29uc2Vj dXRpdmVseSIgbWFwcGVkIHN1Y2gKPiB0aGF0IHRoZSBIVyBjYW4gYWN0dWFsbHkgYmVuZWZpdCBm cm9tIGl0IC0tIGlmIEhXIGV2ZW4gc3VwcG9ydHMgaXQuIFNvCj4gIlBURS1tYXBwZWQgVEhQIiBp cyBqdXN0IHBhcnQgb2YgdGhlIHN0b3J5LiBBbmQgdGhhdCdzIHdoZXJlIGl0IGdldHMgdHJpY2t5 IEkKPiB0aGluay4KPiAKPiBJIGFncmVlIHRoYXQgaXQncyBnb29kIGZvciBkZWJ1Z2dpbmcsIGJ1 dCB0aGVuIG1heWJlIGl0IHNob3VsZCBhKSBsaXZlIHNvbWV3aGVyZQo+IGVsc2UgKGRlYnVnZnMs IGJ1Y2tldGluZyBiZWxvdykgYW5kIGIpIGJlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBUSFBzLCBt ZWFuaW5nIHdlCj4gYWxzbyB3YW50IHNpbWlsYXIgc3RhdHMgc29tZXdoZXJlLgo+IAo+IE9uZSBp ZGVhIHdvdWxkIGJlIHRvIGV4cG9zZSBzdWNoIHN0YXRzIGluIGEgUi9PIGZhc2hpb24gbGlrZSAi bnJfYWxsb2NhdGVkIiBvcgo+ICJucl9odWdlcGFnZXMiIGluIC9zeXMva2VybmVsL21tL3RyYW5z cGFyZW50X2h1Z2VwYWdlL2h1Z2VwYWdlcy02NGtCLyBhbmQKPiBmcmllbmRzLiBPZiBjb3Vyc2Us IG1heWJlIHRhZ2dpbmcgdGhlbSB3aXRoICJhbm9uIiBwcmVmaXguCgpJIHNlZSB5b3VyIHBvaW50 LCBidXQgSSBkb24ndCBjb21wbGV0ZWx5IGFncmVlIHdpdGggaXQgYWxsLiBUaGF0IHNhaWQsIGdp dmVuCnlvdXIgY29uY2x1c2lvbiBhdCB0aGUgYm90dG9tLCBwZXJoYXBzIHdlIHNob3VsZCBwYXJr IHRoZSBkaXNjdXNzaW9uIGFib3V0IHRoZQphY2NvdW50aW5nIGZvciBhIHNlcGFyYXRlIHNlcmll cyBpbiBmdXR1cmU/IFRoZW4gd2UgY2FuIGZvY3VzIG9uIHRoZSBBQkk/Cgo+IAo+Pgo+PiBJIHdv dWxkIGFjdHVhbGx5IGFyZ3VlIGZvciBhZGRpbmcgc2ltaWxhciBjb3VudGVycyBmb3IgZmlsZS1i YWNrZWQgbWVtb3J5IHRvbwo+PiBmb3IgdGhlIHNhbWUgcmVhc29ucy4gKEkgYWN0dWFsbHkgcG9z dGVkIGFuIGluZGVwZW5kZW50IHBhdGNoIGEgd2hpbGUgYmFjayB0aGF0Cj4+IGRpZCB0aGlzIGZv ciBmaWxlLSBhbmQgYW5vbi0gbWVtb3J5LCBidWNrZXR0ZWQgYnkgc2l6ZS4gQnV0IEkgdGhpbmsg dGhlIGlkZWEgb2YKPj4gdGhlIGJ1Y2tldHRpbmcgd2FzIE5BS2VkLgo+IEZvciBkZWJ1Z2dpbmcs IEkgKnRoaW5rKiBpdCBtaWdodCBiZSB2YWx1YWJsZSB0byBzZWUgaG93IG1hbnkgVEhQIG9mIGVh Y2ggc2l6ZQo+IGFyZSBhbGxvY2F0ZWQuIFRyYWNraW5nIGV4YWN0bHkgImhvdyBpcyBpdCBtYXBw ZWQiIGlzIG5vdCBlYXN5IHRvIGFjaGlldmUgYXMgd2UKPiBsZWFybmVkLiBQTUQtbWFwcGVkIHdh cyBlYXN5LCBidXQgYWxzbyByZXF1aXJlcyB1cyB0byBrZWVwIGRvaW5nIHRoYXQgdHJhY2tpbmcK PiBmb3IgYWxsIGV0ZXJuaXR5IC4uLgo+IAo+IERvIHlvdSBoYXZlIGEgcG9pbnRlciB0byB0aGUg cGF0Y2ggc2V0PyBEaWQgaXQgdHJ5IHRvIHNxdWVlemUgaXQgaW50bwo+IC9wcm9jL21lbWluZm8/ CgpJIHdhcyBhY3R1YWxseSBvbmx5IHdvcmtpbmcgb24gc21hcHMvc21hcHNfcm9sbHVwLCB3aGlj aCBoYXMgYmVlbiBteSBtYWluIHRvb2wKZm9yIGRlYnVnZ2luZy4gcGF0Y2hlcyBhdCBbMV0uCgpb MV0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGludXgtbW0vMjAyMzA2MTMxNjA5NTAuMzU1NDY3 NS0xLXJ5YW4ucm9iZXJ0c0Bhcm0uY29tLwoKPiAKPj4KPj4+Cj4+PiBUaGF0IGFsc28gcmFpc2Vz IHRoZSBxdWVzdGlvbiBob3cgeW91IHdvdWxkIGFjY291bnQgYSBQVEUtbWFwcGVkIFRIUC4gVGhl IGhvbGUKPj4+IHRoaW5nPyBPbmx5IHRoZSBwYXJ0cyB0aGF0IGFyZSBtYXBwZWQ/IExldCdzIGJl dHRlciBub3QgZ28gZG93biB0aGF0IHBhdGguCj4+Cj4+IFRoZSBhcHByb2FjaCBJJ3ZlIHRha2Vu IGluIHRoaXMgc2VyaWVzIGlzIHRoZSBzaW1wbGUgb25lIC0gYWNjb3VudCBldmVyeSBwYWdlCj4+ IHRoYXQgYmVsb25ncyB0byBhIGxhcmdlIGZvbGlvIGZyb20gd2hlbiBpdCBpcyBmaXJzdCBtYXBw ZWQgdG8gbGFzdCB1bm1hcHBlZC4KPj4gWWVzLCBpbiB0aGlzIGNhc2UsIHlvdSBtaWdodCBub3Qg YWN0dWFsbHkgYmUgbWFwcGluZyB0aGUgZnVsbCB0aGluZwo+PiBjb250aWdpb3VzbHkuIEJ1dCBp dCBnaXZlcyBhIGdvb2QgaW5kaWNhdGlvbi4KPj4KPj4gSSBhbHNvIGNvbnNpZGVyZWQgYWNjb3Vu dGluZyB0aGUgd2hvbGUgZm9saW8gb25seSB3aGVuIGFsbCBvZiBpdHMgcGFnZXMgYmVjb21lCj4+ IG1hcHBlZCAoYWx0aG91Z2ggbm90IHdvcnJ5aW5nIGFib3V0IHRoZW0gYWxsIGJlaW5nIGNvbnRp Z3VvdXMpLiBUaGF0J3Mgc3RpbGwKPj4gc2ltcGxlIHRvIGltcGxlbWVudCBmb3IgYWxsIGNvdW50 ZXJzIGV4Y2VwdCBzbWFwcy4gU28gd2VudCB3aXRoIHRoZSBzaW1wbGVzdAo+PiBhcHByb2FjaCB3 aXRoIHRoZSB2aWV3IHRoYXQgaXRzICJnb29kIGVub3VnaCIuCj4gCj4gSWYgeW91IHRha2UgYSBs b29rIGF0ICJTaG1lbUh1Z2VQYWdlcyIgYW5kICJGaWxlSHVnZVBhZ2VzIiwgdGhlcmUgd2UgYWN0 dWFsbHkKPiB0cmFjayB0aGVtIHdoZW4gdGhleSBnZXQgYWxsb2NhdGVkK2ZyZWVkLCB3aGljaCBp cyBtdWNoIGVhc2llciB0aGFuIHRyYWNraW5nCj4gd2hlbi9ob3cgdGhleSBhcmUgKHVuKW1hcHBl ZC4gQnV0IGl0J3Mgb25seSBkb25lIGZvciBQTUQtc2l6ZWQgVEhQIGZvciBub3cuCj4gCj4+Cj4+ Pgo+Pj4gVGhhdCBsZWF2ZXMgdGhlIHF1ZXN0aW9uIHdoeSB3ZSB3b3VsZCB3YW50IHRvIGluY2x1 ZGUgdGhlbSBoZXJlIGF0IGFsbCBpbiBhCj4+PiBzcGVjaWFsIFBURS1tYXBwZWQgd2F5Pwo+Pj4K Pj4+Cj4+PiBBZ2FpbiwgbGV0J3MgbG9vayBhdCBodWdldGxiOiBJIHByZXBhcmVkIDEgR2lCIGFu ZCBvbmUgMiBNaUIgcGFnZS4KPj4+Cj4+PiBIdWdlUGFnZXNfVG90YWw6wqDCoMKgwqDCoMKgIDEK Pj4+IEh1Z2VQYWdlc19GcmVlOsKgwqDCoMKgwqDCoMKgIDEKPj4+IEh1Z2VQYWdlc19Sc3ZkOsKg wqDCoMKgwqDCoMKgIDAKPj4+IEh1Z2VQYWdlc19TdXJwOsKgwqDCoMKgwqDCoMKgIDAKPj4+IEh1 Z2VwYWdlc2l6ZTrCoMKgwqDCoMKgwqAgMjA0OCBrQgo+Pj4gSHVnZXRsYjrCoMKgwqDCoMKgwqDC oMKgIDEwNTA2MjQga0IKPj4+Cj4+PiAtPiBPbmx5IHRoZSBsYXN0IG9uZSBnaXZlcyB0aGUgc3Vt LCB0aGUgb3RoZXIgc3RhdHMgZG9uJ3QgZXZlbiBtZW50aW9uIHRoZSBvdGhlcgo+Pj4gb25lcy4g W2hvdyBkbyB3ZSBnZXQgdGhlaXIgc3RhdHMsIGlmIGF0IGFsbD9dCj4+Cj4+IFRoZXJlIGFyZSBz b21lIGZpbGVzIGluIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtWFhrQiBhbmQK Pj4gL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGUqL2h1Z2VwYWdlcy87IG5yX2h1Z2VwYWdl cywgZnJlZV9odWdlcGFnZXMsCj4+IHN1cnBsdXNfaHVnZXBhZ2VzLiBCdXQgdGhpcyBpbnRlcmZh Y2UgYWxzbyBjb25zdGl0dXRlcyB0aGUgYWxsb2NhdG9yLCBub3QganVzdAo+PiBzdGF0cywgSSB0 aGluay4KPiAKPiBBaCwgSSBtaXNzZWQgdGhhdCB3ZSBleHBvc2UgZnJlZSB2cy4gcmVzZXJ2ZWQg dnMuIHN1cnBsdXNlIC4uLiB0aGVyZSBhcyB3ZWxsOyBJCj4gdGhvdWdodCB3ZSB3b3VsZCBvbmx5 IGhhdmUgIm5yX2h1Z2VwYWdlcyIuCj4gCj4+Cj4+Pgo+Pj4gU28gbWF5YmUsIHdlIG9ubHkgd2Fu dCBhIHN1bW1hcnkgb2YgaG93IG1hbnkgYW5vbiBodWdlIHBhZ2VzIG9mIGFueSBzaXplIGFyZQo+ Pj4gYWxsb2NhdGVkIChpbmRlcGVuZGVudCBvZiB0aGUgUFRFIHZzLiBQTUQgbWFwcGluZyksCj4+ Cj4+IEFyZSB5b3UgcHJvcG9zaW5nIChBbm9uSHVnZVBhZ2VzICsgQW5vbkh1Z2VQdGVNYXBwZWQp IGhlcmUgb3Igc29tZXRoaW5nIGVsc2U/IElmCj4+IHRoZSBmb3JtZXIsIHRoZW4gSSBkb24ndCBy ZWFsbHkgc2VlIHRoZSBkaWZmZXJlbmNlLiBXZSBoYXZlIHRvIGNvbnRpbnVlIHRvCj4+IGV4cG9z ZSBQTUQtc2l6ZSAoQW5vbkh1Z2VQYWdlcykuIFNvIGVpdGhlciBhZGQgUFRFLW9ubHkgY291bnRl ciwgYW5kIGRlcml2ZSB0aGUKPj4gdG90YWwsIG9yIGFkZCBhIHRvdGFsIGNvdW50ZXIgYW5kIGRl cml2ZSBQVEUtb25seS4gSSBzdXNwZWN0IEkndmUgbWlzdW5kZXJzdG9vZAo+PiB5b3VyIHBvaW50 Lgo+IAo+IEkgZG9uJ3QgdGhpbmsgd2Ugc2hvdWxkIGdvIGRvd24gdGhlICJQdGVNYXBwZWQiIHBh dGguIFByb2JhYmx5IHdlIHdhbnQKPiAiYnVja2V0aW5nIiBzdGF0cyBhcyB5b3Ugc2FpZCwgYW5k IG1heWJlIGEgZ2xvYmFsIG9uZSB0aGF0IGp1c3QgY29tYmluZXMKPiBldmVyeXRoaW5nIChhbnkg VEhQKS4gQnV0IG5hbWluZyB3aWxsIGJlIGRpZmZpY3VsdC4KPiAKPj4KPj4+IGFuZCBzb21lIG90 aGVyIHNvdXJjZSB0bwo+Pj4gZXZlbnR1YWxseSBpbnNwZWN0IGhvdyB0aGUgZGlmZmVyZW50IHNp emVzIGJlaGF2ZS4KPj4+Cj4+PiBCdXQgbm90ZSB0aGF0IGZvciBub24tUE1ELXNpemVkIGZpbGUg VEhQIHdlIGRvbid0IGV2ZW4gaGF2ZSBzcGVjaWFsIGNvdW50ZXJzIQo+Pj4gLi4uIHNvIG1heWJl IHdlIHNob3VsZCBhbHNvIGRlZmVyIGFueSBzdWNoIHN0YXRzIGFuZCBjb21lIHVwIHdpdGggc29t ZXRoaW5nCj4+PiB1bmlmb3JtIGZvciBhbGwgdHlwZXMgb2Ygbm9uLVBNRC1zaXplZCBUSFAuCj4+ Cj4+IEluZGVlZCwgSSBjYW4gc2VlIGJlbmVmaXQgaW4gYWRkaW5nIHRoZXNlIGZvciBmaWxlIFRI UCAtIGluIGZhY3QgSSBoYXZlIGEgcGF0Y2gKPj4gdGhhdCBkb2VzIGV4YWN0bHkgdGhhdCB0byBo ZWxwIG15IGRldmVsb3BtZW50IHdvcmsuIEkgaGFkIGVudmlzYWdlZCB0aGF0IHdlCj4+IGNvdWxk IGFkZCBzb21ldGhpbmcgbGlrZSBGaWxlSHVnZVB0ZU1hcHBlZCwgU2htZW1IdWdlUHRlTWFwcGVk IHRoYXQgd291bGQgZm9sbG93Cj4+IHRoZSBzYW1lIHNlbWFudGljcyBhcyBBbm9uSHVnZVB0ZU1h cHBlZC4KPiAKPiBBZ2FpbiwgbWF5YmUgd2UgY2FuIGZpbmQgc29tZXRoaW5nIHRoYXQgZG9lcyBu b3QgaW52b2x2ZSB0aGUgIlB0ZU1hcHBlZCIKPiB0ZXJtaW5vbG9neSBhbmQganVzdCBnaXZlcyB1 cyBhIGJpZyB0b3RhbCBvZiAiYWxsb2NhdGVkIiBUSFAuIEZvciBkZXRhaWxlZCBzdGF0cwo+IGZv ciBkZWJ1Z2dpbmcsIG1heWJlIHdlIGNhbiBqdXN0IHVzZSBhIGRpZmZlcmVudCBpbnRlcmZhY2Ug dGhlbi4KPiAKPj4KPj4+Cj4+Pgo+Pj4gU2FuZSBkaXNjdXNzaW9uIGFwcGxpZXMgdG8gYWxsIG90 aGVyIHN0YXRzLgo+Pj4KPj4+Cj4+Pj4KPj4+PiBCZWNhdXNlIHdlIG5vdyBoYXZlIHJ1bnRpbWUg ZW5hYmxlL2Rpc2FibGUgY29udHJvbCwgSSd2ZSByZW1vdmVkIHRoZSBjb21waWxlCj4+Pj4gdGlt ZSBLY29uZmlnIHN3aXRjaC4gSXQgc3RpbGwgZGVmYXVsdHMgdG8gcnVudGltZS1kaXNhYmxlZC4K Pj4+Pgo+Pj4+IE5PVEU6IFRoZXNlIGNoYW5nZXMgc2hvdWxkIG5vdCBiZSBtZXJnZWQgdW50aWwg dGhlIHByZXJlcXVpc2l0ZXMgYXJlIGNvbXBsZXRlLgo+Pj4+IFRoZXNlIGFyZSBpbiBwcm9ncmVz cyBhbmQgdHJhY2tlZCBhdCBbN10uCj4+Pgo+Pj4gV2Ugc2hvdWxkIHByb2JhYmx5IGxpc3QgdGhl bSBoZXJlLCBhbmQgY2xhc3NpZnkgd2hpY2ggb25lIHdlIHNlZSBhcyBzdHJpY3QgYQo+Pj4gcmVx dWlyZW1lbnQsIHdoaWNoIG9uZXMgbWlnaHQgYmUgYW4gb3B0aW1pemF0aW9uLgo+Pgo+Pgo+PiBJ J2xsIG5lZWQgc29tZSBoZWxwIHdpdGggY2xhc2lmeWluZyB0aGVtLCBzbyBzaG93aW5nIG15IHdv cmtpbmcuIEZpbmFsIGxpc3QgdGhhdAo+PiBJIHdvdWxkIHByb3Bvc2UgYXMgc3RyaWN0IHJlcXVp cmVtZW50cyBhdCBib3R0b20uCj4+Cj4+IFRoaXMgaXMgbXkgbGlzdCB3aXRoIHN0YXR1cywgYXMg cGVyIHJlc3BvbnNlIHRvIFl1IGluIG90aGVyIHRocmVhZDoKPj4KPj4gwqDCoCAtIERhdmlkIGlz IHdvcmtpbmcgb24gInNoYXJlZCB2cyBleGNsdXNpdmUgbWFwcGluZ3MiCj4gCj4gUHJvYmFibHkg IkNPVyByZXVzZSBzdXBwb3J0IiBpcyBhIHNlcGFyYXRlIGl0ZW0sIGFsdGhvdWdoIG15IGFwcHJv YWNoIHdvdWxkCj4gY292ZXIgdGhhdC4KClllYWggdGhhdCdzIHRoZSBpbiB0aGUgb3JpZ2luYWwg dGhyZWFkIGFzICgyKSwgYnV0IEkgdGhvdWdodCB3ZSB3ZXJlIGFsbCBhZ3JlZWQKdGhhdCBpcyBu b3QgYSBwcmVyZXF1aXNpdGUgc28gZGlkbid0IGJyaW5nIGl0IG92ZXIgaGVyZS4KCj4gCj4gVGhl IHF1ZXN0aW9uIGlzLCBpZiB0aGUgZXN0aW1hdGUgd2UncmUgdXNpbmcgaW4gbW9zdCBjb2RlIGZv ciBub3cgd291bGQgYXQgbGVhc3QKPiBiZSBzdWZmaWNpZW50IHRvIG1lcmdlIGl0LiBUaGUgZXN0 aW1hdGUgaXMgZWFzaWx5IHdyb25nLCBidXQgd2UgZG8gaGF2ZSB0aGF0Cj4gaXNzdWUgd2l0aCBQ VEUtbWFwcGVkIFRIUCBhbHJlYWR5LgoKV2VsbCBhcyBJIHVuZGVyc3RhbmQgaXQsIGF0IGxlYXN0 IHRoZSBOVU1BIGJhbGFuY2luZyBjb2RlIGFuZCBraHVnZXBhZ2VkIGFyZQppZ25vcmluZyBhbGwg Zm9saW9zID4gb3JkZXItMC4gVGhhdCdzIHByb2JhYmx5IG9rIGZvciB0aGUgb2NjYXNpb25hbCBQ VEUtbWFwcGVkClRIUCwgYnV0IEkgYXNzdW1lIGl0IGJlY29tZXMgdW50ZW5hYmxlIGlmIGxhcmdl IGZvbGlvcyBhcmUgdGhlIG5vcm0uIFBlcmhhcHMgd2UKY2FuIG1vZGlmeSB0aG9zZSBwYXRocyB0 byB3b3JrIHdpdGggdGhlIGN1cnJlbnQgZXN0aW1hdG9ycyBpbiBvcmRlciB0byByZW1vdmUKeW91 ciB3b3JrIGZyb20gdGhlIGNyaXRpY2FsIHBhdGggLSBpcyB0aGF0IHdoYXQgeW91IGFyZSBnZXR0 aW5nIGF0PwoKPiAKPiBCdXQgdGhhdCBhcmd1bWVudCBwcm9iYWJseSBhcHBsaWVzIHRvIG1vc3Qg dGhpbmdzIGhlcmU6IHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQKPiBQVEUtbWFwcGVkIFRIUCBhcmUg bm90IHRoZSBkZWZhdWx0LCB0aGF0J3Mgd2h5IG5vYm9keSByZWFsbHkgY2FyZWQuCj4gCj4gW0kn bSBwbGF5aW5nIHdpdGggYW4gYWxtb3N0LWxvY2tsZXNzIHNjaGVtZSByaWdodCBub3cgYW5kIGhv cGUgSSBoYXZlIHNvbWV0aGluZwo+IHJ1bm5pbmcgc29vbmlzaCAtLSBhcyB5b3Uga25vdywgSSBn b3QgZGlzdHJhY3RlZF0KPiAKPj4gwqDCoCAtIFppIFlhbiBoYXMgcG9zdGVkIGFuIFJGQyBmb3Ig Y29tcGFjdGlvbgo+PiDCoMKgIC0gWWluIEZlbmd3ZWkncyBtbG9jayBzZXJpZXMgaXMgbm93IGlu IG1tLXN0YWJsZQo+PiDCoMKgIC0gWWluIEZlbmd3ZWkncyBtYWR2aXNlIHNlcmllcyBpcyBpbiA2 LjYKPj4gwqDCoCAtIEkndmUgcmV3b3JrZWQgYW5kIHBvc3RlZCBhIHNlcmllcyBmb3IgZGVmZXJy ZWRfc3BsaXRfZm9saW87IGFsdGhvdWdoIEkndmUKPj4gwqDCoMKgwqAgZGVwcmlvcml0aWVkIGl0 IGJlY2F1c2UgWXUgc2FpZCBpdCB3YXNuJ3QgcmVhbGx5IGEgcHJlLXJlcXVpc2l0ZS4KPj4gwqDC oCAtIG51bWEgYmFsYW5jaW5nIGRlcGVuZHMgb24gRGF2aWQncyAic2hhcmVkIHZzIGV4Y2x1c2l2 ZSBtYXBwaW5ncyIgd29yawo+PiDCoMKgIC0gSSd2ZSBzdGFydGVkIGxvb2tpbmcgYXQgImxhcmdl IGZvbGlvcyBpbiBzd2FwIGNhY2hlIiBpbiB0aGUgYmFja2dyb3VuZCwKPj4gwqDCoMKgwqAgYmVj YXVzZSBJJ20gc2VlaW5nIHNvbWUgc2xvdyBkb3duIHdpdGggbGFyZ2UgZm9saW9zLCBidXQgd2Ug YWxzbyBhZ3JlZWQgdGhhdAo+PiDCoMKgwqDCoCB3YXNuJ3QgYSBwcmVyZXF1aXNpdGUKPj4KPiAK PiBQcm9iYWJseSBpdCB3b3VsZCBiZSBnb29kIHRvIHRhbGsgYWJvdXQgdGhlIGl0ZW1zIGFuZCBo b3cgd2Ugd291bGQgY2xhc3NpZnkgdGhlbQo+IGluIGEgbWVldGluZy4KClBlcmhhcHMgd2UgY2Fu IGdldCBhIHNsb3QgaW4gTWF0dGhldydzIG1lZXRpbmcgdG9tb3Jyb3c/Cgo+IAo+IAo+PiBBbHRo b3VnaCwgc2luY2Ugc2VuZGluZyB0aGF0LCBJJ3ZlIGRldGVybWluZWQgdGhhdCB3aGVuIHJ1bm5p bmcga2VybmVsCj4+IGNvbXBpbGF0aW9uIGFjcm9zcyBoaWdoIG51bWJlciBvZiBjb3JlcyBvbiBh cm02NCwgdGhlIGNvc3Qgb2Ygc3BsaXR0aW5nIHRoZQo+PiBmb2xpb3MgZ2V0cyBsYXJnZSBkdWUg dG8gbmVlZGluZyB0byBicm9hZGNhc3QgdGhlIGV4dHJhIFRMQklzLiBTbyBJIHRoaW5rIHRoZQo+ PiBsYXN0IHBvaW50IG9uIHRoYXQgbGlzdCBtYXkgYmUgYSBwcmVyZXF1aXNpdGUgYWZ0ZXIgYWxs LiAoSSd2ZSBiZWVuIGFibGUgdG8gZml4Cj4+IHRoaXMgYnkgYWRkaW5nIHN1cHBvcnQgZm9yIGFs bG9jYXRpbmcgbGFyZ2UgZm9saW9zIGluIHRoZSBzd2FwIGZpbGUsIGFuZAo+PiBhdm9pZGluZyB0 aGUgc3BsaXQgLSBwbGFubmluZyB0byBzZW5kIFJGQyB0aGlzIHdlZWspLgo+Pgo+PiBUaGVyZSBp cyBhbHNvIHRoaXMgc2V0IG9mIHRoaW5ncyB0aGF0IHlvdSBtZW50aW9uZWQgYWdhaW5zdCAic2hh cmVkIHZzIGV4Y2x1c2l2ZQo+PiBtYXBwaW5ncyIsIHdoaWNoIEknbSBub3Qgc3VyZSBpZiB5b3Ug YXJlIHBsYW5uaW5nIHRvIGNvdmVyIGFzIHBhcnQgb2YgeW91ciB3b3JrCj4+IG9yIGlmIHRoZXkg YXJlIGZvbGxvdyBvbiB0aGluZ3MgdGhhdCB3aWxsIG5lZWQgdG8gYmUgZG9uZToKPj4KPj4gKDEp IERldGVjdGluZyBzaGFyZWQgZm9saW9zLCB0byBub3QgbWVzcyB3aXRoIHRoZW0gd2hpbGUgdGhl eSBhcmUgc2hhcmVkLgo+PiDCoMKgwqDCoCBNQURWX1BBR0VPVVQsIHVzZXItdHJpZ2dlcmVkIHBh Z2UgbWlncmF0aW9uLCBOVU1BIGhpbnRpbmcsIGtodWdlcGFnZWQgLi4uCj4+IMKgwqDCoMKgIHJl cGxhY2UgY2FzZXMgd2hlcmUgZm9saW9fZXN0aW1hdGVkX3NoYXJlcnMoKSA9PSAxIHdvdWxkIGN1 cnJlbnRseSBiZSB0aGUKPj4gwqDCoMKgwqAgYmVzdCB3ZSBjYW4gZG8gKGFuZCBpbiBzb21lIGNh c2VzLCBwYWdlX21hcGNvdW50KCkgPT0gMSkuCj4+Cj4+IEFuZCBJIHJlY2VudGx5IGRpc2NvdmVy ZWQgdGhhdCBraHVnZXBhZ2VkIGRvZXNuJ3QgY29sbGFwc2UgZmlsZS1iYWNrZWQgcGFnZXMgdG8K Pj4gYSBQTUQtc2l6ZSBUSFAgaWYgdGhleSBiZWxvbmcgdG8gYSBsYXJnZSBmb2xpbywgc28gSSdt IGd1ZXNzaW5nIGl0IG1heSBhbHNvCj4+IHN1ZmZlciB0aGUgc2FtZSBiZWhhdmlvdXIgZm9yIGFu b24gbWVtb3J5LiBJJ20gbm90IHN1cmUgaWYgdGhhdCdzIHdoYXQgeW91cgo+PiAia2h1Z2VwYWdl ZCAuLi4iIGNvbW1lbnQgcmVmZXJzIHRvPwo+IAo+IFllcy4gQnV0IEkgZGlkIG5vdCBsb29rIGlu dG8gYWxsIHRoZSBkZXRhaWxzIHlldC4KPiAKPiAia3VoZXBhZ2VkIiBjb2xsYXBzZSBzdXBwb3J0 IHRvIHNtYWxsLXNpemVkIFRIUCBpcyBwcm9iYWJseSBhbHNvIGEgdmVyeSBpbXBvcmFudAo+IGl0 ZW0sIGFsdGhvdWdoIGl0IG1pZ2h0IGJlIGxlc3MgcmVsZXZhbnQgdGhhbiBmb3IgUE1EIC0tIGFu ZCBJIGNvbnNpZGVyIGl0Cj4gZnV0dXJlIHdvcmsuIFNlZSBiZWxvdy4KClllcyBJIGFncmVlIHRo YXQgaXQncyBkZWZpbml0ZWx5IGZ1dHVyZSB3b3JrLiBOb3RoaW5nIHJlZ3Jlc3NlcyBmcm9tIHRv ZGF5J3MKcGVyZm9ybWFuY2UgaWYgeW91IGRvbid0IGhhdmUgdGhhdC4KCj4gCj4+Cj4+IFNvIHRh a2luZyBhbGwgdGhhdCBhbmQgdHJ5aW5nIHRvIHB1dCB0b2dldGhlciBhIGNvbXBsZXRlIG91dHN0 YW5kaW5nIGxpc3QgZm9yCj4+IHN0cmljdCByZXF1aXJlbWVudHM6Cj4+Cj4+IMKgwqAgLSBTaGFy ZWQgdnMgRXhjbHVzaXZlIE1hcHBpbmdzIChEYXZpZEgpCj4+IMKgwqDCoMKgwqDCoCAtIHVzZXIt dHJpZ2dlcmVkIHBhZ2UgbWlncmF0aW9uCj4+IMKgwqDCoMKgwqDCoCAtIE5VTUEgaGludGluZy9i YWxhbmNpbmcKPj4gwqDCoMKgwqDCoMKgIC0gRW5oYW5jZSBraHVnZXBhZ2VkIHRvIGNvbGxhcHNl IHRvIFBNRC1zaXplIGZyb20gUFRFLW1hcHBlZCBsYXJnZSBmb2xpb3MKPj4gwqDCoCAtIENvbXBh Y3Rpb24gb2YgTGFyZ2UgRm9saW9zIChaaSBZYW4pCj4+IMKgwqAgLSBTd2FwIG91dCBzbWFsbC1z aXplIFRIUCB3aXRob3V0IFNwbGl0IChSeWFuIFJvYmVydHMpCj4gCj4gXiB0aGF0J3MgZ29pbmcg dG8gYmUgdG91Z2gsIEkgY2FuIHByb21pc2UuIEFuZCB0aGUgb25seSB3YXkgdG8gbGl2ZSB3aXRo b3V0IHRoYXQKPiB3b3VsZCBiZSBraHVnZXBhZ2VkIHN1cHBvcnQuIChiZWNhdXNlIHRoYXQncyBo b3cgaXQncyBhbGwgd29ya2luZyBmb3IgUE1ELXNpemVkCj4gVEhQIGFmdGVyIGFsbCEpCgpBcmUg eW91IHJlZmVycmluZyBzcGVjaWZpY2FsbHkgdG8gdGhlICJzd2FwIG91dCIgbGluZSB0aGVyZT8g SWYgc28sIGl0IHdhc24ndCBteQpwbGFuIHRoYXQgd2Ugd291bGQgKnN3YXAgaW4qIGxhcmdlIGZv bGlvcyAtIG9ubHkgc3dhcCB0aGVtICpvdXQqIGFzIGxhcmdlIGZvbGlvcwp0byBhdm9pZCB0aGUg Y29zdCBvZiBzcGxpdHRpbmcuIFRoZW4gd2hlbiB0aGV5IGNvbWUgYmFjayBpbiwgdGhlIGNvbWUg aW4gYXMKc2luZ2xlIHBhZ2VzLCBqdXN0IGxpa2UgUE1ELXNpemVkIFRIUCwgaWYgSSd2ZSB1bmRl cnN0b29kIHRoaW5ncyBjb3JyZWN0bHkuIEkKaGF2ZSBhIHBhdGNoIHdvcmtpbmcgYW5kIHNob3dp bmcgdGhlIHBlcmYgaW1wcm92ZW1lbnQgYXMgYSByZXN1bHQuIEknbSBwbGFubmluZwp0byBwb3N0 IGFuIFJGQyB0b2RheSwgaG9wZWZ1bGx5LgoKSSBkb24ndCBzZWUgdGhlIHN3YXAtaW4gc2lkZSBh cyBhIHByb2JsZW0gZm9yIHRoZSBpbml0aWFsIHBhdGNoIHNldC4gT0ssIHRoZXkKY29tZSBpbiBh cyBzaW5nbGUgcGFnZXMsIHNvIHlvdSBsb3N0IHRoZSBwb3RlbnRpYWwgVExCIGJlbmVmaXRzLiBC dXQgdGhhdCdzIG5vCndvcnNlIHRoYW4gdG9kYXkncyBwZXJmb3JtYW5jZSBzbyBub3QgYSByZWdy ZXNzaW9uLiBBbmQgdGhlIHJhdGlvIG9mIFNXIHNhdmluZ3MKb24gVEhQIGFsbG9jYXRpb24gdG8g SFcgc2F2aW5ncyBmcm9tIHRoZSBUTEIgaXMgdmVyeSBkaWZmZXJlbnQgZm9yIHNtYWxsLXNpemVk ClRIUDsgbXVjaCBtb3JlIG9mIHRoZSBiZW5lZml0IGNvbWVzIGZyb20gdGhlIFNXIGFuZCB0aGF0 J3Mgc3RpbGwgdGhlcmUuCgo+IAo+IE9uY2UgYSBQTUQtc2l6ZWQgVEhQIHdhcyBzd2FwcGVkIG91 dCBhbmQgZXZpY3RlZCwgaXQgd2lsbCBhbHdheXMgY29tZSBiYWNrIGluCj4gb3JkZXItMCBmb2xp b3MuIGtodWdlZ2VkIHdpbGwgcmUtY29sbGFwc2UgaW50byBQTUQtc2l6ZWQgY2h1bmtzLiBJZiB3 ZSBjb3VsZCBkbwo+IHRoYXQgZm9yIFBURS1zaXplZCBUSFAgYXMgd2VsbCAuLi4KClllcywgc3Vy ZSwgYnV0IHRoYXQncyBhIGZ1dHVyZSBpbXByb3ZlbWVudCwgbm90IGEgcmVxdWlyZW1lbnQgdG8g cHJldmVudApyZWdyZXNzaW9uIHZzIHRvZGF5LCByaWdodD8KCj4gCj4+Cj4+Cj4+Pgo+Pj4KPj4+ IE5vdywgdGhlc2UgYXJlIGp1c3QgbXkgdGhvdWdodHMsIGFuZCBJJ20gaGFwcHkgYWJvdXQgb3Ro ZXIgdGhvdWdodHMuCj4+Cj4+IEFzIGFsd2F5cywgdGhhbmtzIGZvciB0YWtpbmcgdGhlIHRpbWUg LSBJIHJlYWxseSBhcHByZWNpYXRlIGl0Lgo+IAo+IFN1cmUuIEhvcGluZyBvdGhlcnMgY2FuIGNv bW1lbnQuCj4gCj4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBpdCdzIGJlc3QgdG8gZm9jdXMgb24g Z2V0dGluZyB0aGUgc3lzZnMgaW50ZXJmYWNlCj4gcmlnaHQrZnV0dXJlIHByb29mIGFuZCBoYW5k bGluZyB0aGUgc3RhdHMgaW5kZXBlbmRlbnRseS4gV2hpbGUgYmVpbmcgYSBnb29kCj4gZGVidWcg bWVjaGFuaXNtLCBJIHdvdWxkbid0IGNvbnNpZGVyIHRoZXNlIHN0YXRzIGEgcmVxdWlyZW1lbnQ6 IHdlIGRvbid0IGhhdmUKPiB0aGVtIGZvciBmaWxlL3NobWVtIHNtYWxsLXNpemVkIHRocCBzbyBm YXIgYXMgd2VsbC4KPiAKPiBTbyBtYXliZSByZWFsbHkgYmV0dGVyIHRvIGhhbmRsZSB0aGUgc3Rh dHMgaW4gbWVtaW5mbyBhbmQgZnJpZW5kcyBzZXBhcmF0ZWx5Lgo+IAoKSSdkIGJlIHZlcnkgaGFw cHkgd2l0aCB0aGF0IGFwcHJvYWNoIGlmIG90aGVycyBhcmUgYm91Z2h0IGluLgoKVGhhbmtzLApS eWFuCgoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwps aW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJh ZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51 eC1hcm0ta2VybmVsCg==