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 2943BD12688 for ; Wed, 3 Dec 2025 01:06:55 +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-Type: Content-Transfer-Encoding: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=kvN03mKK/DMl5hkc5GxrNhmbNfnAvSLL/xzIR0E9Op0=; b=CfVHowfSvGaFAA +gqSfeemezAa5d9oGJvT404u1Yl4RqxUqNCCw8X5pZP5q1IZMlLywLcLC1NQK3HZvGi/BhQovKVOj Er3g+v1IDdGQxuwuUBOFTJZrwDuf+3YRXChpoDEeuZpalqtOpPyQw0MxUzFrCzEJnzXyaFw3TkU6X 36oJb8jZkcjlKAmLnikZKi7N1A4XgnRQ0MADA3/KvnVZQkdEjNbvCagXj/IoHPCbhaGWEt5GWXRnZ GMUODdJJ38UZDgf5ldvalhBVIu8dgUXbEDZnjZ/R0oVh60Vzswa8CmBHuohmyKcQ0+lIPiDrkXW3y XrTM8/ApBiSWK/xOyLQg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1vQbKA-00000005zEv-0WoU; Wed, 03 Dec 2025 01:06:30 +0000 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1vQbK7-00000005zEX-1lBp for linux-riscv@lists.infradead.org; Wed, 03 Dec 2025 01:06:28 +0000 Received: by mail-pf1-x429.google.com with SMTP id d2e1a72fcca58-7a9c64dfa8aso4851945b3a.3 for ; Tue, 02 Dec 2025 17:06:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764723986; x=1765328786; darn=lists.infradead.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=hVTsO6sKVp5sJhZZt8xlrDTY7Nlr/H6T2hEmxYTZfww=; b=kFDNOLWzu9zHfjdgSS9wg0XmJJbw8WZ9KJ+WlIsfDQH2ZlerfYPF696FN6NLieMmpz qTzZMZ3sexlsPDpXCHfWyCAgCus+8/NQSWr65aXctcdjIgP3lNwOqyPcK6v3vJGPxrhW nNwys2jguD5afyjORanSo7IWJ6dp/t+cqu0IHbu9CAlj4crMxAtO1c8/MT9MqL4nz8/o Dw+PFUoaJ9DSpVt0Z/7TVEk0K6LLNoUWpQsJbWZWkY5Xdx9/DS09wZ++pJUPed7rFBcM CZRQkj2akYmKqnLXC9+ULePTNJwiSjtAzmrNwu2hNRNFBjNK5ygfhDlTPZ1iuVKkao6E LqGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764723986; x=1765328786; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=hVTsO6sKVp5sJhZZt8xlrDTY7Nlr/H6T2hEmxYTZfww=; b=REqjzhgql5Iw/2pQEWE0EmK96rEEtHgF5fmCJmNYpt73tFDcJcfBlkl5Sacv/I0bA7 twqzVXQL/jmSPXLVnUuFgldmqTEdmB+FWYS1Oxx6cTe0t9REu2PadAXEumryKjNwLGFU aQKrrZXRjNzXQKu1BZ+snB7ATsysfFAHphrBULu0HzKckZrb6yvbdNEyyUOxhYd5ZrE0 btw8/duPH9Sipm32kCZ4dzByv7madPpcHAmseGh/vWsUEYxPSEjElhjlPeYdbwdcLfdA u2Uz8yikAvHDtnrbYj7InLe1C0rjwd1t8KBDpUKA667G86/CYvEoeVoqjQseIVNJDGNm lZ1Q== X-Forwarded-Encrypted: i=1; AJvYcCVOfpQd04DNJ508D+Ov7FvaspzOSOaVAWNfLKptrTwOsOZasDHlY37dPFhDOzTN/7OzPhXV/XCtYzsfFw==@lists.infradead.org X-Gm-Message-State: AOJu0YxMTcx08SVePCEvaJHim3iDtwwaNWkzTZZNd1RE0haJwa3lXwEu sFQIHG0LV5JdJM9NZwEW2QkYrf1VLJiATs3/JUw8ZQVQxJ1OqRdOqcaQ X-Gm-Gg: ASbGncvHGopXQHydzJKSUD5OJj3PZQ/EBmJSi7Fs5zLUAj5I4ax0ZmWE2OwGG674HiW EN6dAccMcLrDwtkF6nR2oLYUDTbGVt3mTEWiDvmvbmCLMFHmmv4WfMn0w5XRc7rbCpCPSM2k1LO zfPXqkhGfkQQFXSEO3jV9H2KhT2wK7zIS9sY1stINXzF0RmH5n29B9SNSDtSdeNETPtdTTkcoAA F0Vqy3arm3lS2irk2fiWP/dy12Qj+FrymrRqwd+8T/PvYiwVl570hgIV95MZjRsaWc/gNMiFrrs r8UV8FAcnzYv3N4ztjQvHTG7gYvJUUmF/Ewe4RGElcOTd18eRBtCKF4ekMtogJl3xq+6Tr0pwD6 9NOoof8rNnz+lZfFGgxs9Ez4ap8pUmDuUAQ8FHZagyES7oeB077PApHHg6kG/1TOmAH93U8NjBS OhYN6Dxr/Gv3saval1ye7qNyH2Z2M00298dCI= X-Google-Smtp-Source: AGHT+IEoDJ4eqn6WFaRMMb636vIDOv1pEsvAjUxvyCy/YOdewWejqt9BXLzOM5WyDlKV9qSJKrRqtw== X-Received: by 2002:a05:6a20:12d5:b0:35d:8c8:8acb with SMTP id adf61e73a8af0-363f5d669d5mr776850637.26.1764723985360; Tue, 02 Dec 2025 17:06:25 -0800 (PST) Received: from [172.16.0.242] ([192.19.161.250]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7d1516f6621sm18086961b3a.16.2025.12.02.17.06.22 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 02 Dec 2025 17:06:24 -0800 (PST) Message-ID: <73de5da3-5412-4991-8a14-9c60bfd872d7@gmail.com> Date: Tue, 2 Dec 2025 17:10:34 -0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 07/12] rvtrace: Add trace ramsink driver To: Mayuresh Chitale , Bo Gan , Anup Patel Cc: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Paul Walmsley , Palmer Dabbelt , Greg KH , Alexander Shishkin , Ian Rogers , Mark Rutland , devicetree@vger.kernel.org, Alexandre Ghiti , Atish Patra , Peter Zijlstra , Anup Patel , Adrian Hunter , linux-kernel@vger.kernel.org, Ingo Molnar , Jiri Olsa , Mayuresh Chitale , Namhyung Kim , linux-riscv@lists.infradead.org, Andrew Jones , Liang Kan References: <20251101154245.162492-1-apatel@ventanamicro.com> <20251101154245.162492-8-apatel@ventanamicro.com> <26475221-f852-4d76-80dd-43f04f9e7ec4@gmail.com> Content-Language: en-US From: Bo Gan In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20251202_170627_516699_8C3EE35D X-CRM114-Status: GOOD ( 42.40 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org SGkgTWF5dXJlc2gsCgpUaGFua3MgZm9yIHlvdXIgcmVwbHkuIE15IGNvbW1lbnRzIGJlbG93LgoK T24gMTIvMi8yNSAwMzo0NywgTWF5dXJlc2ggQ2hpdGFsZSB3cm90ZToKPiBIaSBCbywKPiAKPiBP biBTdW4sIE5vdiAzMCwgMjAyNSBhdCAxOjE34oCvUE0gQm8gR2FuIDxnYW5ib2luZ0BnbWFpbC5j b20+IHdyb3RlOgo+Pgo+PiBIaSBBbnVwLAo+Pgo+PiBNeSBjb21tZW50cyBiZWxvdzoKPj4KPj4g T24gMTEvMS8yNSAwODo0MiwgQW51cCBQYXRlbCB3cm90ZToKPj4+IEZyb206IE1heXVyZXNoIENo aXRhbGUgPG1jaGl0YWxlQHZlbnRhbmFtaWNyby5jb20+Cj4+Pgo+Pj4gQWRkIGluaXRpYWwgaW1w bGVtZW50YXRpb24gb2YgUklTQy1WIHRyYWNlIHJhbXNpbmsgZHJpdmVyLiBUaGUgcmFtc2luawo+ Pj4gaXMgZGVmaW5lZCBpbiB0aGUgUklTQy1WIFRyYWNlIENvbnRyb2wgSW50ZXJmYWNlIHNwZWNp ZmljYXRpb24uCj4+Pgo+Pj4gQ28tZGV2ZWxvcGVkLWJ5OiBBbnVwIFBhdGVsIDxhcGF0ZWxAdmVu dGFuYW1pY3JvLmNvbT4KPj4+IFNpZ25lZC1vZmYtYnk6IEFudXAgUGF0ZWwgPGFwYXRlbEB2ZW50 YW5hbWljcm8uY29tPgo+Pj4gU2lnbmVkLW9mZi1ieTogTWF5dXJlc2ggQ2hpdGFsZSA8bWNoaXRh bGVAdmVudGFuYW1pY3JvLmNvbT4KPj4+IC0tLQo+Pj4gICAgZHJpdmVycy9od3RyYWNpbmcvcnZ0 cmFjZS9LY29uZmlnICAgICAgICAgICB8ICAgOSArCj4+PiAgICBkcml2ZXJzL2h3dHJhY2luZy9y dnRyYWNlL01ha2VmaWxlICAgICAgICAgIHwgICAxICsKPj4+ICAgIGRyaXZlcnMvaHd0cmFjaW5n L3J2dHJhY2UvcnZ0cmFjZS1yYW1zaW5rLmMgfCAyNjIgKysrKysrKysrKysrKysrKysrKysKPj4+ ICAgIDMgZmlsZXMgY2hhbmdlZCwgMjcyIGluc2VydGlvbnMoKykKPj4+ICAgIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2h3dHJhY2luZy9ydnRyYWNlL3J2dHJhY2UtcmFtc2luay5jCj4+Pgo+ Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHd0cmFjaW5nL3J2dHJhY2UvS2NvbmZpZyBiL2RyaXZl cnMvaHd0cmFjaW5nL3J2dHJhY2UvS2NvbmZpZwo+Pj4gaW5kZXggYmEzNWMwNWYzZjU0Li4wNTc3 ZjlhY2I4NTggMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2h3dHJhY2luZy9ydnRyYWNlL0tjb25m aWcKPj4+ICsrKyBiL2RyaXZlcnMvaHd0cmFjaW5nL3J2dHJhY2UvS2NvbmZpZwo+Pj4gQEAgLTIx LDMgKzIxLDEyIEBAIGNvbmZpZyBSVlRSQUNFX0VOQ09ERVIKPj4+ICAgICAgICBkZWZhdWx0IHkK Pj4+ICAgICAgICBoZWxwCj4+PiAgICAgICAgICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0 IGZvciBSSVNDLVYgVHJhY2UgRW5jb2RlciBjb21wb25lbnQuCj4+PiArCj4+PiArY29uZmlnIFJW VFJBQ0VfUkFNU0lOSwo+Pj4gKyAgICAgdHJpc3RhdGUgIlJJU0MtViBUcmFjZSBSYW1zaW5rIGRy aXZlciIKPj4+ICsgICAgIGRlcGVuZHMgb24gUlZUUkFDRQo+Pj4gKyAgICAgc2VsZWN0IERNQV9T SEFSRURfQlVGRkVSCj4+PiArICAgICBkZWZhdWx0IHkKPj4+ICsgICAgIGhlbHAKPj4+ICsgICAg ICAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgUmlzYy1WIEUtVHJhY2UgUmFtc2lu awo+Pj4gKyAgICAgICBjb21wb25lbnQuCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9od3RyYWNp bmcvcnZ0cmFjZS9NYWtlZmlsZSBiL2RyaXZlcnMvaHd0cmFjaW5nL3J2dHJhY2UvTWFrZWZpbGUK Pj4+IGluZGV4IGYzMjA2OTNhMWZjNS4uMTIyZTU3NWRhOWZiIDEwMDY0NAo+Pj4gLS0tIGEvZHJp dmVycy9od3RyYWNpbmcvcnZ0cmFjZS9NYWtlZmlsZQo+Pj4gKysrIGIvZHJpdmVycy9od3RyYWNp bmcvcnZ0cmFjZS9NYWtlZmlsZQo+Pj4gQEAgLTMsMyArMyw0IEBACj4+PiAgICBvYmotJChDT05G SUdfUlZUUkFDRSkgKz0gcnZ0cmFjZS5vCj4+PiAgICBydnRyYWNlLXkgOj0gcnZ0cmFjZS1jb3Jl Lm8gcnZ0cmFjZS1wbGF0Zm9ybS5vCj4+PiAgICBvYmotJChDT05GSUdfUlZUUkFDRV9FTkNPREVS KSArPSBydnRyYWNlLWVuY29kZXIubwo+Pj4gK29iai0kKENPTkZJR19SVlRSQUNFX1JBTVNJTksp ICs9IHJ2dHJhY2UtcmFtc2luay5vCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9od3RyYWNpbmcv cnZ0cmFjZS9ydnRyYWNlLXJhbXNpbmsuYyBiL2RyaXZlcnMvaHd0cmFjaW5nL3J2dHJhY2UvcnZ0 cmFjZS1yYW1zaW5rLmMKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAw MDAwMDAuLjY3NjM0NGM5Mzg3Ywo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIvZHJpdmVycy9o d3RyYWNpbmcvcnZ0cmFjZS9ydnRyYWNlLXJhbXNpbmsuYwo+Pj4gQEAgLTAsMCArMSwyNjIgQEAK Pj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+Pj4gKy8qCj4+PiArICog Q29weXJpZ2h0IChjKSAyMDI1IFZlbnRhbmEgTWljcm8gU3lzdGVtcyBJbmMuCj4+PiArICovCj4+ PiArCj4+PiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9w bGF0Zm9ybV9kZXZpY2UuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvcHJvcGVydHkuaD4KPj4+ICsj aW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvcnZ0cmFj ZS5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9z aXplcy5oPgo+Pj4gKwo+Pj4gKyNkZWZpbmUgUlZUUkFDRV9SQU1TSU5LX1NUQVJUTE9XX09GRiAg ICAgICAgIDB4MDEwCj4+PiArI2RlZmluZSBSVlRSQUNFX1JBTVNJTktfU1RBUlRISUdIX09GRiAg ICAgICAgICAgICAgICAweDAxNAo+Pj4gKyNkZWZpbmUgUlZUUkFDRV9SQU1TSU5LX0xJTUlUTE9X X09GRiAgICAgICAgIDB4MDE4Cj4+PiArI2RlZmluZSBSVlRSQUNFX1JBTVNJTktfTElNSVRISUdI X09GRiAgICAgICAgICAgICAgICAweDAxYwo+Pj4gKyNkZWZpbmUgUlZUUkFDRV9SQU1TSU5LX1dQ TE9XX09GRiAgICAgICAgICAgIDB4MDIwCj4+PiArI2RlZmluZSAgIFJWVFJBQ0VfUkFNU0lOS19X UExPV19XUkFQICAgICAgICAgMHgxCj4+Cj4+IG5pdDogd3Jvbmcgc3BhY2luZwo+Pgo+Pj4gKyNk ZWZpbmUgUlZUUkFDRV9SQU1TSU5LX1dQSElHSF9PRkYgICAgICAgICAgIDB4MDI0Cj4+PiArI2Rl ZmluZSBSVlRSQUNFX1JBTVNJTktfUlBMT1dfT0ZGICAgICAgICAgICAgMHgwMjgKPj4+ICsjZGVm aW5lIFJWVFJBQ0VfUkFNU0lOS19SUEhJR0hfT0ZGICAgICAgICAgICAweDAyYwo+Pj4gKwo+Pj4g K3N0cnVjdCBydnRyYWNlX3JhbXNpbmtfcHJpdiB7Cj4+PiArICAgICBzaXplX3Qgc2l6ZTsKPj4+ ICsgICAgIHZvaWQgKnZhOwo+Pj4gKyAgICAgZG1hX2FkZHJfdCBzdGFydDsKPj4+ICsgICAgIGRt YV9hZGRyX3QgZW5kOwo+Pj4gKyAgICAgLyogV1AgZnJvbSBwcmV2IGl0ZXJhdGlvbiAqLwo+Pj4g KyAgICAgZG1hX2FkZHJfdCBwcmV2X2hlYWQ7Cj4+PiArfTsKPj4+ICsKPj4+ICtzdHJ1Y3QgdHJh Y2VfYnVmIHsKPj4+ICsgICAgIHZvaWQgKmJhc2U7Cj4+PiArICAgICBzaXplX3Qgc2l6ZTsKPj4+ ICsgICAgIGxvbmcgY3VyOwo+Pj4gKyAgICAgc2l6ZV90IGxlbjsKPj4+ICt9Owo+Pj4gKwo+Pj4g K3N0YXRpYyBpbnQgcnZ0cmFjZV9yYW1zaW5rX3N0b3Aoc3RydWN0IHJ2dHJhY2VfY29tcG9uZW50 ICpjb21wKQo+Pj4gK3sKPj4+ICsgICAgIHJldHVybiBydnRyYWNlX2NvbXBfaXNfZW1wdHkoY29t cCk7Cj4+PiArfQo+Pj4gKwo+Pgo+PiBXZSBzaG91bGQgZmlyc3Qgc2V0IHRyUmFtRW5hYmxlIHRv IDAsIHBvbGwgaXQsIHRoZW4gcG9sbCB0clJhbUVtcHR5LiBJdCdzCj4+IGVzc2VudGlhbGx5IHRo ZSBzYW1lIGFzIGVuY29kZXIsIHNvIHBlcmhhcHMgbW92ZSBpdCB0byBjb3JlLmMuIEhlcmUgd2Un cmUKPj4ganVzdCBjaGVja2luZyB3aGV0aGVyIGl0J3MgZW1wdHksIHdoaWNoIGlzIHdyb25nLiBX ZSdyZSBhbHNvIGRvaW5nIHNpbWlsYXIKPj4gdGhpbmdzIGluIGVuY29kZXIuYyBTaG91bGQgZml4 IHRoYXQgYXMgd2VsbC4KPiBUaGlzIGNvZGUgaXMgY2FsbGVkIHRvIGp1c3Qgc3RvcCBhbGwgY29t cG9uZW50cyBpbiBhIHBhdGggd2hpY2ggbWVhbnM6Cj4gLSBmb3IgZW5jb2RlcnMgdGhlIGRyaXZl ciBjbGVhcnMgdGhlIHRyVGVJbnN0VHJhY2luZyBiaXQgYW5kIHRoZW4KPiBwb2xscyBmb3IgZW1w dHkgYml0IHRvIGJlIGNsZWFyZWQKPiAtIGZvciByYW1zaW5rcyB0aGUgZHJpdmVyIGp1c3QgcG9s bHMgZm9yIHRoZSBlbXB0eSBiaXQgdG8gYmUgY2xlYXJlZAo+IE1vcmUgb24gdGhpcyBiZWxvdy4K CkNhbiB3ZSByZW5hbWUgaXQgdG8gc29tZXRoaW5nIGxpa2UgcnZ0cmFjZV9jb21wX3BvbGxfZW1w dHkoLi4uKSBmb3IgY2xhcml0eT8KVGhpcyBuYW1lIGtpbmQgb2YgY29uZnVzZWQgbWUgaW50byB0 aGlua2luZyBpdCdzIGp1c3QgYSBjaGVjay4KCj4+Cj4+PiArc3RhdGljIHZvaWQgdGJ1Zl90b19w YnVmX2NvcHkoc3RydWN0IHRyYWNlX2J1ZiAqc3JjLCBzdHJ1Y3QgdHJhY2VfYnVmICpkc3QpCj4+ PiArewo+Pj4gKyAgICAgaW50IGJ5dGVzX2RzdCwgYnl0ZXNfc3JjLCBieXRlczsKPj4+ICsgICAg IHZvaWQgKmRzdF9hZGRyLCAqc3JjX2FkZHI7Cj4+PiArCj4+PiArICAgICB3aGlsZSAoc3JjLT5z aXplKSB7Cj4+PiArICAgICAgICAgICAgIHNyY19hZGRyID0gc3JjLT5iYXNlICsgc3JjLT5jdXI7 Cj4+PiArICAgICAgICAgICAgIGRzdF9hZGRyID0gZHN0LT5iYXNlICsgZHN0LT5jdXI7Cj4+PiAr Cj4+PiArICAgICAgICAgICAgIGlmIChkc3QtPmxlbiAtIGRzdC0+Y3VyIDwgc3JjLT5zaXplKQo+ Pj4gKyAgICAgICAgICAgICAgICAgICAgIGJ5dGVzX2RzdCA9IGRzdC0+bGVuIC0gZHN0LT5jdXI7 Cj4+PiArICAgICAgICAgICAgIGVsc2UKPj4+ICsgICAgICAgICAgICAgICAgICAgICBieXRlc19k c3QgPSBzcmMtPnNpemU7Cj4+PiArICAgICAgICAgICAgIGlmIChzcmMtPmxlbiAtIHNyYy0+Y3Vy IDwgc3JjLT5zaXplKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGJ5dGVzX3NyYyA9IHNyYy0+ bGVuIC0gc3JjLT5jdXI7Cj4+PiArICAgICAgICAgICAgIGVsc2UKPj4+ICsgICAgICAgICAgICAg ICAgICAgICBieXRlc19zcmMgPSBzcmMtPnNpemU7Cj4+PiArICAgICAgICAgICAgIGJ5dGVzID0g Ynl0ZXNfZHN0IDwgYnl0ZXNfc3JjID8gYnl0ZXNfZHN0IDogYnl0ZXNfc3JjOwo+Pj4gKyAgICAg ICAgICAgICBtZW1jcHkoZHN0X2FkZHIsIHNyY19hZGRyLCBieXRlcyk7Cj4+PiArICAgICAgICAg ICAgIGRzdC0+Y3VyID0gKGRzdC0+Y3VyICsgYnl0ZXMpICUgZHN0LT5sZW47Cj4+PiArICAgICAg ICAgICAgIHNyYy0+Y3VyID0gKHNyYy0+Y3VyICsgYnl0ZXMpICUgc3JjLT5sZW47Cj4+PiArICAg ICAgICAgICAgIHNyYy0+c2l6ZSAtPSBieXRlczsKPj4+ICsgICAgIH0KPj4+ICt9Cj4+PiArCj4+ PiArc3RhdGljIHNpemVfdCBydnRyYWNlX3JhbXNpbmtfY29weXRvX2F1eGJ1ZihzdHJ1Y3QgcnZ0 cmFjZV9jb21wb25lbnQgKmNvbXAsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgcnZ0cmFjZV9wZXJmX2F1eGJ1ZiAqYnVmKQo+Pj4gK3sKPj4+ICsg ICAgIHN0cnVjdCBydnRyYWNlX3JhbXNpbmtfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgm Y29tcC0+ZGV2KTsKPj4+ICsgICAgIHN0cnVjdCB0cmFjZV9idWYgc3JjLCBkc3Q7Cj4+PiArICAg ICB1MzIgd3BfbG93LCB3cF9oaWdoOwo+Pj4gKyAgICAgdTY0IGJ1Zl9jdXJfaGVhZDsKPj4+ICsg ICAgIHNpemVfdCBzaXplOwo+Pj4gKwo+Pj4gKyAgICAgd3BfbG93ID0gcnZ0cmFjZV9yZWFkMzIo Y29tcC0+cGRhdGEsIFJWVFJBQ0VfUkFNU0lOS19XUExPV19PRkYpOwo+Pj4gKyAgICAgd3BfaGln aCA9IHJ2dHJhY2VfcmVhZDMyKGNvbXAtPnBkYXRhLCBSVlRSQUNFX1JBTVNJTktfV1BISUdIX09G Rik7Cj4+PiArICAgICBidWZfY3VyX2hlYWQgPSAodTY0KSh3cF9oaWdoKSA8PCAzMiB8ICh3cF9s b3cgJiB+UlZUUkFDRV9SQU1TSU5LX1dQTE9XX1dSQVApOwo+Pj4gKwo+Pj4gKyAgICAgaWYgKGJ1 Zl9jdXJfaGVhZCA9PSBwcml2LT5wcmV2X2hlYWQpCj4+PiArICAgICAgICAgICAgIHJldHVybiAw Owo+Pgo+PiBjdXJfaGVhZCA9PSBwcmV2X2hlYWQgY291bGQgbWVhbiB0aGF0IHdlJ3ZlIHdyYXBw ZWQgYXJvdW5kIGFuZCBzdG9wcGVkIGF0Cj4+IHRoZSBleGFjdCBwb3NpdGlvbi4gVGh1cywgd2Ug bmVlZCB0byBjaGVjayBmb3IgdGhlIHdyYXBwZWQgYXJvdW5kIGJpdC4gSWYKPj4gc2V0LCB0aGVu IHRoaXMgY2FzZSBjYW4gYmUgbWVyZ2VkIGludG8gYnVmX2N1cl9oZWFkIDw9IHByaXYtPnByZXZf aGVhZAo+PiBiZWxvdy4KPiBjdXJfaGVhZCBpcyB0aGUgY3VycmVudCB2YWx1ZSBpbiB0aGUgd3Ag cmVnaXN0ZXJzIHdoZXJlYXMgcHJldl9oZWFkIGlzCj4gdGhlIHZhbHVlIGluIHdwIHJlZ2lzdGVy cyBmcm9tIHRoZSBwcmV2aW91cyBpdGVyYXRpb24gd2hpY2ggaXMgc2F2ZWQKPiBleHBsaWNpdGx5 IGJ5IHNvZnR3YXJlLiBTbyBwcmV2X2hlYWQgY2FuJ3QgY2hhbmdlIGR5bmFtaWNhbGx5Lgo+IAo+ Pgo+PiBGb3IgY3VyX2hlYWQgPiBwcmV2X2hlYWQgY2FzZSwgd2UgYWxzbyBuZWVkIHRvIGNoZWNr IGZvciB3cmFwLWFyb3VuZC4gSWYKPj4gd3JhcHBlZC1hcm91bmQsIHdlIGFjdHVhbGx5IGZpbGxl ZCB0aGUgZW50aXJlIGJ1ZmZlciwgbm90IGp1c3QgY3VyIC0gcHJldgo+PiBXZSBhbHNvIHNob3Vs ZCBjb25zaWRlciB0aGUgcG9zc2liaWxpdHkgdGhhdCB0aGUgYnVmZmVyIGhhcyBiZWVuIHdyYXBw ZWQKPj4gYXJvdW5kIG11bHRpcGxlIHRpbWVzLiBJbiBhbGwgY2FzZXMsIG1haW50YWluaW5nIGEg cHJldl9oZWFkIHNlZW1zIHRvCj4+IGNvbXBsaWNhdGUgdGhpbmdzLCBzbyB3aHkgZG9uJ3Qgd2Ug anVzdCByZXNldCB0aGUgV1AgdG8gcHJpdi0+c3RhcnQgZWFjaAo+PiB0aW1lIHdlIHN0YXJ0IHRo ZSByYW1zaW5rIGNvbXBvbmVudCBhbmQgZ2V0IHJpZCBvZiBwcmV2X2hlYWQ/IFRoaXMgd2F5LAo+ PiB3ZSdsbCBhbHdheXMgaGF2ZSBjdXIgPj0gc3RhcnQsIGFuZCBkZXBlbmRpbmcgb24gd3JhcHBl ZCBiaXQsIHdlIGVpdGhlcgo+PiBnZXQgdGhlIHdob2xlIGJ1ZmZlciwgb3IgY3VyIC0gc3RhcnQu Cj4gQ3VycmVudGx5IHRoZSBzb2Z0d2FyZSBuZXZlciBjbGVhcnMgdHJSYW1XcmFwIGJpdCBiZWNh dXNlIGFzIHBlciB0aGUgc3BlYzoKPiAtIEl0IGlzIG9ubHkgc2V0IHRvIDAgaWYgdHJSYW1XUExv dyBpcyB3cml0dGVuCj4gLSBBZnRlciB0cmFjZSBpcyBlbmFibGVkIGFuZCBhY3RpdmUgLCB0aGUg dHJhY2UgdG9vbCBzaG91bGQgTk9UIHdyaXRlCj4gYW55IG9mIHRyUmFtU3RhcnQvTGltaXQvV1A/ PyByZWdpc3RlcnMuCgpJIHRoaW5rIHlvdSBtaXNzZWQgbXkgcG9pbnQuIEknbSBub3Qgc3VnZ2Vz dGluZyB0aGF0IHdlIHNob3VsZCBjaGFuZ2UgdGhlCnJlZ2lzdGVyIHZhbHVlcyB3aGVuIHRyYWNl IGlzIGFjdGl2ZS4gSSdtIHNheWluZyB0aGF0IHRoZXJlJ3Mgbm8gbmVlZCB0bwptYWludGFpbiBh IHByZXZfaGVhZC4gRm9yIGV2ZXJ5IHRyYWNlIHNlc3Npb24sIHdlIGNhbiBqdXN0IHN0YXJ0IGZy ZXNoLAphbmQgcmVzZXQgV1AgdG8gU3RhcnQgYmVmb3JlIHRyYWNlIHN0YXJ0cy4gVGhpcyB3YXkg d2UgZG9uJ3QgbmVlZCB0byBkZWFsCndpdGggdGhlIGNvbXBsZXggY29uZGl0aW9ucyBvZiBjdXJf aGVhZCA+IHByZXZfaGVhZCwgYmVjYXVzZSB5b3UnbGwgYWxzbwpuZWVkIHRvIGRlYWwgd2l0aCB3 cmFwIGFyb3VuZCwgYW5kIHRoZSBpZiBjb25kaXRpb24gd2lsbCBiZSBjb21wbGV4LiBUaGUKdHJh Y2UgY2FuIHdyYXAgYXJvdW5kIGFuZCBvdmVyLXdyaXRlIG9sZCB0cmFjZXMgYW55d2F5LCBzbyBJ IGRvbid0IHNlZSBhCnZhbHVlIG9mIGtlZXBpbmcgdHJhY2sgb2YgcHJldl9oZWFkLgoKPiBMZXQg bWUgdGVzdCB0aGlzIGNoYW5nZSB0byBkaXNhYmxlIGFsbCB0aGUgY29tcG9uZW50cyAoaW5zdGVh ZCBvZiBqdXN0Cj4gc3RvcHBpbmcgdHJhY2UpIGV2ZXJ5IHRpbWUgd2Ugd2FudCB0byBjb3B5IGRh dGEgdG8gcGVyZiBidWZmZXIuIFRoaXMKPiBzaG91bGQgbGV0IHVzIHVzZSB0aGUgdHJSYW1XcmFw IGJpdCBhcyBleHBlY3RlZC4gTXVsdGlwbGUgd3JhcGFyb3VuZHMKPiBjYW4ndCBiZSBhdm9pZGVk IHVubGVzcyBTdG9wT25XcmFwIHdhcyBzZXQuIEkgd2lsbCB1cGRhdGUgdGhlIHJhbXNpbmsKPiBk cml2ZXIgdG8gc2V0IFN0b3BPbldyYXAgYmFzZWQgb24gdGhlIGltcGxlbWVudGF0aW9uIGlkLgo+ Pgo+IAo+Pj4gKwo+Pj4gKyAgICAgZHN0LmJhc2UgPSBidWYtPmJhc2U7Cj4+PiArICAgICBkc3Qu bGVuID0gYnVmLT5sZW5ndGg7Cj4+PiArICAgICBkc3QuY3VyID0gYnVmLT5wb3M7Cj4+PiArCj4+ PiArICAgICBzcmMuYmFzZSA9IHByaXYtPnZhOwo+Pj4gKyAgICAgc3JjLmxlbiA9IHByaXYtPmVu ZCAtIHByaXYtPnN0YXJ0Owo+Pj4gKyAgICAgaWYgKGJ1Zl9jdXJfaGVhZCA+IHByaXYtPnByZXZf aGVhZCkgewo+Pj4gKyAgICAgICAgICAgICBzcmMuc2l6ZSA9IGJ1Zl9jdXJfaGVhZCAtIHByaXYt PnByZXZfaGVhZDsKPj4+ICsgICAgIH0gZWxzZSB7Cj4+PiArICAgICAgICAgICAgIHNyYy5zaXpl ID0gcHJpdi0+ZW5kIC0gcHJpdi0+cHJldl9oZWFkOwo+Pj4gKyAgICAgICAgICAgICBzcmMuc2l6 ZSArPSBidWZfY3VyX2hlYWQgLSBwcml2LT5zdGFydDsKPj4+ICsgICAgIH0KPj4+ICsKPj4+ICsg ICAgIHNyYy5jdXIgPSBidWZfY3VyX2hlYWQgLSBwcml2LT5zdGFydDsKPj4+ICsgICAgIHNpemUg PSBzcmMuc2l6ZTsKPj4+ICsgICAgIHRidWZfdG9fcGJ1Zl9jb3B5KCZzcmMsICZkc3QpOwo+Pj4g KyAgICAgYnVmLT5wb3MgPSBkc3QuY3VyOwo+Pj4gKyAgICAgcHJpdi0+cHJldl9oZWFkID0gYnVm X2N1cl9oZWFkOwo+Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIHNpemU7Cj4+PiArfQo+Pj4gKwo+Pj4g K3N0YXRpYyBpbnQgcnZ0cmFjZV9yYW1zaW5rX3NldHVwX2J1ZihzdHJ1Y3QgcnZ0cmFjZV9jb21w b25lbnQgKmNvbXApCj4+PiArewo+Pj4gKyAgICAgc3RydWN0IHJ2dHJhY2VfcmFtc2lua19wcml2 ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZjb21wLT5kZXYpOwo+Pj4gKyAgICAgdTY0IHN0YXJ0 X21pbiwgbGltaXRfbWF4LCBlbmQ7Cj4+PiArICAgICB1MzIgbG93LCBoaWdoOwo+Pj4gKwo+Pj4g KyAgICAgLyogUHJvYmUgbWluIGFuZCBtYXggdmFsdWVzIGZvciBzdGFydCBhbmQgbGltaXQgcmVn aXN0ZXJzICovCj4+PiArICAgICBydnRyYWNlX3dyaXRlMzIoY29tcC0+cGRhdGEsIDAsIFJWVFJB Q0VfUkFNU0lOS19TVEFSVExPV19PRkYpOwo+Pj4gKyAgICAgcnZ0cmFjZV93cml0ZTMyKGNvbXAt PnBkYXRhLCAwLCBSVlRSQUNFX1JBTVNJTktfU1RBUlRISUdIX09GRik7Cj4+PiArICAgICBsb3cg PSBydnRyYWNlX3JlYWQzMihjb21wLT5wZGF0YSwgUlZUUkFDRV9SQU1TSU5LX1NUQVJUTE9XX09G Rik7Cj4+PiArICAgICBoaWdoID0gcnZ0cmFjZV9yZWFkMzIoY29tcC0+cGRhdGEsIFJWVFJBQ0Vf UkFNU0lOS19TVEFSVEhJR0hfT0ZGKTsKPj4+ICsgICAgIHN0YXJ0X21pbiA9ICh1NjQpKGhpZ2gp IDw8IDMyIHwgbG93Owo+Pj4gKwo+Pj4gKyAgICAgcnZ0cmFjZV93cml0ZTMyKGNvbXAtPnBkYXRh LCAweGZmZmZmZmZmLCBSVlRSQUNFX1JBTVNJTktfTElNSVRMT1dfT0ZGKTsKPj4+ICsgICAgIHJ2 dHJhY2Vfd3JpdGUzMihjb21wLT5wZGF0YSwgMHhmZmZmZmZmZiwgUlZUUkFDRV9SQU1TSU5LX0xJ TUlUSElHSF9PRkYpOwo+Pj4gKyAgICAgbG93ID0gcnZ0cmFjZV9yZWFkMzIoY29tcC0+cGRhdGEs IFJWVFJBQ0VfUkFNU0lOS19MSU1JVExPV19PRkYpOwo+Pj4gKyAgICAgaGlnaCA9IHJ2dHJhY2Vf cmVhZDMyKGNvbXAtPnBkYXRhLCBSVlRSQUNFX1JBTVNJTktfTElNSVRISUdIX09GRik7Cj4+PiAr ICAgICBsaW1pdF9tYXggPSAodTY0KShoaWdoKSA8PCAzMiB8IGxvdzsKPj4+ICsKPj4+ICsgICAg IGlmIChwcml2LT5lbmQgPCBzdGFydF9taW4pIHsKPj4KPj4gV2hlcmUgd2FzIHByaXYtPmVuZCBp bml0aWFsaXplZCBiZWZvcmUgdGhpcyBjaGVjaz8KPiBJIHdpbGwgbW92ZSBpdCBiZWZvcmUgdGhl IGNoZWNrLgo+Pgo+Pj4gKyAgICAgICAgICAgICBkZXZfZXJyKCZjb21wLT5kZXYsICJETUEgbWVt b3J5IG5vdCBhZGRyZXNzYWJsZSBieSBkZXZpY2VcbiIpOwo+Pj4gKyAgICAgICAgICAgICByZXR1 cm4gLUVJTlZBTDsKPj4+ICsgICAgIH0KPj4+ICsKPj4+ICsgICAgIC8qIFNldHVwIHJhbSBzaW5r IHN0YXJ0IGFkZHJlc3NlcyAqLwo+Pj4gKyAgICAgaWYgKHByaXYtPnN0YXJ0IDwgc3RhcnRfbWlu KSB7Cj4+Cj4+IE5vIGNoZWNrcyBmb3Igc3RhcnRfbWluID49IHByaXYtPmVuZD8KPj4KPj4+ICsg ICAgICAgICAgICAgZGV2X3dhcm4oJmNvbXAtPmRldiwgIlJhbXNpbmsgc3RhcnQgYWRkcmVzcyB1 cGRhdGVkIGZyb20gJWxseCB0byAlbGx4XG4iLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICBw cml2LT5zdGFydCwgc3RhcnRfbWluKTsKPj4+ICsgICAgICAgICAgICAgcHJpdi0+dmEgKz0gc3Rh cnRfbWluIC0gcHJpdi0+c3RhcnQ7Cj4+PiArICAgICAgICAgICAgIHByaXYtPnN0YXJ0ID0gc3Rh cnRfbWluOwo+Pj4gKyAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgcHJpdi0+cHJldl9oZWFkID0gcHJp di0+c3RhcnQ7Cj4+PiArICAgICBwcml2LT5lbmQgPSBwcml2LT5zdGFydCArIHByaXYtPnNpemU7 Cj4+PiArICAgICBydnRyYWNlX3dyaXRlMzIoY29tcC0+cGRhdGEsIGxvd2VyXzMyX2JpdHMocHJp di0+c3RhcnQpLCBSVlRSQUNFX1JBTVNJTktfU1RBUlRMT1dfT0ZGKTsKPj4+ICsgICAgIHJ2dHJh Y2Vfd3JpdGUzMihjb21wLT5wZGF0YSwgdXBwZXJfMzJfYml0cyhwcml2LT5zdGFydCksIFJWVFJB Q0VfUkFNU0lOS19TVEFSVEhJR0hfT0ZGKTsKPj4+ICsgICAgIHJ2dHJhY2Vfd3JpdGUzMihjb21w LT5wZGF0YSwgbG93ZXJfMzJfYml0cyhwcml2LT5zdGFydCksIFJWVFJBQ0VfUkFNU0lOS19XUExP V19PRkYpOwo+Pj4gKyAgICAgcnZ0cmFjZV93cml0ZTMyKGNvbXAtPnBkYXRhLCB1cHBlcl8zMl9i aXRzKHByaXYtPnN0YXJ0KSwgUlZUUkFDRV9SQU1TSU5LX1dQSElHSF9PRkYpOwo+Pj4gKyAgICAg LyogU2V0dXAgcmFtIHNpbmsgbGltaXQgYWRkcmVzc2VzICovCj4+PiArICAgICBpZiAocHJpdi0+ ZW5kID4gbGltaXRfbWF4KSB7Cj4+PiArICAgICAgICAgICAgIGRldl93YXJuKCZjb21wLT5kZXYs ICJSYW1zaW5rIGxpbWl0IGFkZHJlc3MgdXBkYXRlZCBmcm9tICVsbHggdG8gJWxseFxuIiwgcHJp di0+ZW5kLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICBsaW1pdF9tYXgpOwo+Pj4gKyAgICAg ICAgICAgICBwcml2LT5lbmQgPSBsaW1pdF9tYXg7Cj4+PiArICAgICAgICAgICAgIHByaXYtPnNp emUgPSBwcml2LT5lbmQgLSBwcml2LT5zdGFydDsKPj4+ICsgICAgIH0KPj4+ICsKPj4+ICsgICAg IC8qIExpbWl0IGFkZHJlc3MgbmVlZHMgdG8gYmUgc2V0IHRvIGVuZCAtIDQgdG8gYXZvaWQgb3Zl cmZsb3cgKi8KPj4+ICsgICAgIGVuZCA9IHByaXYtPmVuZCAtIDQ7Cj4+Cj4+IFNob3VsZCBub3Qg aGFyZC1jb2RlIDQsIGluc3RlYWQsIGRvIHdyaXRlMzIoMHhmZmZmZmZmLCBSYW1MaW1pdCksIHRo ZW4KPj4gZmZzKFJhbUxpbWl0KSB0byBwcm9iZSBmb3IgdGhlIHRoZSB3cml0ZSB3aWR0aCwgYWth LCAiQSIgdmFsdWUgaW4gVGFibGUKPj4gNDcuIFR5cGljYWwgVHJhY2UgUkFNIFNpbmsgQ29uZmln dXJhdGlvbiBpbiB0aGUgU3BlYy4KPiBJIGRvbnQgdGhpbmsgJ0EnIGNhbiBiZSBwcm9iZWQgdGhh dCB3YXkgYmVjYXVzZSBhcyBwZXIgc2VjdGlvbiA3LjE6Cj4gIk5vdCBldmVyeSB2YWx1ZSBtYXkg YmUgc2V0dGFibGUgaW4gdHJSYW1TdGFydC9MaW1pdCByZWdpc3RlcnMuIFZhbHVlCj4gd3JpdHRl biBtYXkgYmUgdHJpbW1lZCAoZm9yIGV4YW1wbGUgYWxpZ25lZCBvbiBhIHBhcnRpY3VsYXIgMl5O Cj4gYm91bmRhcnkpIi4gU28gd3JpdGluZyAweGZmZmZmZmZmIHRvIGxpbWl0IHJlZ2lzdGVyIHdp bGwgcmV2ZWFsIHRoZQo+IGJvdW5kYXJ5IGFsaWdubWVudCBidXQgbm90ICdBJy4gSSB0aGluayAn QScgbmVlZHMgdG8gYmUgc3BlY2lmaWVkIGJ5Cj4gYW4gaW1wbGVtZW50YXRpb24gd2l0aCBkZWZh dWx0IGFzIDQuIEkgd2lsbCBjaGFuZ2UgaXQgYWNjb3JkaW5nbHkuCj4gCgpRdW90aW5nIGZyb20g c3BlYzoKCiJWYWx1ZSBBIG1lYW5zIGFsaWdubWVudCB3aGljaCBkZXBlbmRzIG9uIG1lbW9yeSBh Y2Nlc3Mgd2lkdGguIElmIHdlCiAgaGF2ZSBtZW1vcnkgYWNjZXNzIHdpZHRoIG9mIDMyLWJpdHMs IEE9NCBhbmQgdmFsdWUgb2YgdHJSYW1MaW1pdAogIHJlZ2lzdGVyIHNob3VsZCBiZSAweOKApkZD LiBTb21lIGltcGxlbWVudGF0aW9ucyBtYXkgaW1wb3NlIGJpZ2dlcgogIGFsaWdubWVudCBvZiB0 cmFjZSBkYXRhICh0byBhbGxvdyBtb3JlIGVmZmljaWVudCB0cmFuc2ZlciByYXRlcykKICBmb3Ig U01FTSBtb2RlLiBGb3IgU1JBTSBtb2RlIEEgbXVzdCBiZSA0IGFzIGFjY2VzcyB0byB0cmFjZSB2 aWEKICB0clJhbURhdGEgaXMgYWx3YXlzIDMyLWJpdHMgd2lkZSAiCgp0aGUgNCBieXRlIG9mIEEg dmFsdWUgaXMgb25seSBmb3IgU1JBTSBtb2RlLCBub3QgU01FTSBtb2RlLiBNeSBpbnRlci0KcHJl dGF0aW9uIG9mIHRoZSBzcGVjIGlzIHRoYXQgdGhpcyBjYW4gYmUgZGV0ZWN0ZWQgYnkgd3JpdGlu ZyAtMSB0bwpMaW1pdCwgYW5kIGRldGVjdCBNLCBBIGFzIGZvbGxvd3MuCgoweDExMTEwMDAwMDEx MTExMDAwCiAgICAgICAgICAgXiAgICBeCiAgICAgICAgICAgfCAgICB8CiAgICAgICBNIHZhbHVl ICBBIHZhbHVlCgpBID0gMSA8PCAoX19idWlsdGluX2Zmcyh2KSAtIDEpCk0gPSAxIDw8IF9fYnVp bHRpbl9jdHoodiArIEEgLSAxKQoKSSdsbCBzdGFydCBhIHRocmVhZCBvbiB0aGUgRFRQTSBtYWls aW5nIGxpc3QgdG8gY29uZmlybSB0aGlzLiBCVFcsCm15IFA1NTAgTi10cmFjZSAocHJlLXJhdGlm aWVkKSByYW1zaW5rIGFzIEE9OC4KCj4+Cj4+PiArICAgICBydnRyYWNlX3dyaXRlMzIoY29tcC0+ cGRhdGEsIGxvd2VyXzMyX2JpdHMoZW5kKSwgUlZUUkFDRV9SQU1TSU5LX0xJTUlUTE9XX09GRik7 Cj4+PiArICAgICBydnRyYWNlX3dyaXRlMzIoY29tcC0+cGRhdGEsIHVwcGVyXzMyX2JpdHMoZW5k KSwgUlZUUkFDRV9SQU1TSU5LX0xJTUlUSElHSF9PRkYpOwo+Pj4gKyAgICAgbG93ID0gcnZ0cmFj ZV9yZWFkMzIoY29tcC0+cGRhdGEsIFJWVFJBQ0VfUkFNU0lOS19MSU1JVExPV19PRkYpOwo+Pj4g KyAgICAgaGlnaCA9IHJ2dHJhY2VfcmVhZDMyKGNvbXAtPnBkYXRhLCBSVlRSQUNFX1JBTVNJTktf TElNSVRISUdIX09GRik7Cj4+PiArICAgICBlbmQgPSAodTY0KShoaWdoKSA8PCAzMiB8IGxvdzsK Pj4+ICsgICAgIGlmIChlbmQgIT0gKHByaXYtPmVuZCAtIDQpKSB7Cj4+PiArICAgICAgICAgICAg IGRldl93YXJuKCZjb21wLT5kZXYsICJSYW1zaW5rIGxpbWl0IGFkZHJlc3MgdXBkYXRlZCBmcm9t ICVsbHggdG8gJWxseFxuIiwgcHJpdi0+ZW5kLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICBl bmQpOwo+Pj4gKyAgICAgICAgICAgICBwcml2LT5lbmQgPSBlbmQ7Cj4+PiArICAgICAgICAgICAg IHByaXYtPnNpemUgPSBwcml2LT5lbmQgLSBwcml2LT5zdGFydDsKPj4KPj4gQWN0dWFsbHkgdGhl IFJhbUxpbWl0IHJlYWQgaXMgbm90IHRoZSByZWFsIGxpbWl0LiBJdCdzIExpbWl0IC0gIkEiICh0 aGUKPj4gd3JpdGUgd2lkdGgpLgo+Pgo+Pj4gKyAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgcmV0dXJu IDA7Cj4+PiArfQo+Pgo+PiBJIHRoaW5rIG92ZXJhbGwgd2Ugc2hvdWxkIHNpbXBsaWZ5IHRoaXMg c2V0dXBfYnVmIGZ1bmN0aW9uLiBGb3IgUmFtU3RhcnQKPj4gYWxvbmUsIHRoZXJlJ3JlIGFsaWdu bWVudCArIG1pbl9hZGRyIHJlcXVpcmVtZW50LCB3aGljaCBpcyB2ZXJ5IHVubGlrZWx5Cj4+IHRo YXQgdGhlIGxvd2VzdCB2YWxpZCBhZGRyZXNzIGhhcHBlbnMgdG8gYmUgd2l0aGluIHRoZSByYW5n ZSB0aGF0IGRtYS0KPj4gYWxsb2NhdGVkIGluIHRoZSBjYWxsZXIgKHdoZW4geW91IG5lZWQgdG8g YWRqdXN0IHByaXYtPnN0YXJ0KS4gVGh1cywgdG8KPj4gZG8gaXQgcHJvcGVybHksIHdlIGZpcnN0 IG5lZWQgdG8gZGV0ZWN0IHRoZSBtaW5fYWRkciArIGFsaWdubWVudCAqYmVmb3JlKgo+PiBkbWEt YWxsb2MsIGFuZCBwYXNzIHN1Y2ggcmVxdWlyZW1lbnRzIGludG8gZG1hLWFsbG9jLCB0aGVuIGRl cGVuZGluZyBvbgo+PiB3aGF0IGRtYS1hbGxvYyByZXR1cm5zLCBkZXRlY3QgdGhlICJNIiB2YWx1 ZSBieSBpbnRlcnJvZ2F0aW5nIFJhbUxpbWl0Lgo+PiBJJ20gbm90IHN1cmUgaWYgZG1hLWFsbG9j IGNhbiBiZSBwYXNzZWQgYSBoaW50IGFkZHJlc3MgdGhhdCB3aGF0ZXZlcgo+PiByZXR1cm5lZCBt dXN0IGJlIGhpZ2hlciwgYW5kIHdoZXRoZXIgaXQgY2FuIGVuZm9yY2UgcmFuZG9tIGFsaWdubWVu dCwgc28KPj4gbWF5IGJlIHdlIGNhbiBqdXN0IHByb2dyYW0gUmFtU3RhcnQvTGltaXQgYmFzZWQg b24gd2hhdCBkbWEtYWxsb2MgZ2l2ZXMKPj4gYW5kIGVycm9yIG91dCBpZiB2YWx1ZSBpcyBub3Qg cmV0YWluZWQuIFdlIGRvIGhvd2V2ZXIgbmVlZCB0byBwcm9iZSBmb3IKPj4gd3JpdGUgd2lkdGgg KCJBIiB2YWx1ZSkuIEl0J3MgdXN1YWxseSA0IG9yIDgsIGJ1dCBpdCBkb2VzIHZhcnkgcGVyLWlt cGwsCj4+IGFuZCByZW1lbWJlciwgdGhlIHRvdGFsIGJ1ZmZlciBzaXplIGlzIHN0aWxsIDFNQiwg bm90IDFNQiAtIDQgb3IgLTguCj4gCj4gSSB0aGluayB0aGUgaXNzdWUgaXMgdGhhdCB0aGUgcGh5 c2ljYWwgbWVtb3J5IHJlZ2lvbiByZXR1cm5lZCBieQo+IGRtYV9hbGxvYyogbWlnaHQgbm90IGJl IGFkZHJlc3NhYmxlIGJ5IHRoZSBodyBhbmQgc28gdGhlIHN0YXJ0IC8gZW5kCj4gYWRkcmVzc2Vz IGFyZSBhbHJlYWR5IHRyaW1tZWQgaW4gdGhlIGNvZGUgYWNjb3JkaW5nbHkgYnV0IEkgYWdyZWUg dGhpcwo+IGNhbiBiZSBoYW5kbGVkIGRpZmZlcmVudGx5LiBGb3IgZS5nCj4gLSBwcm9iZSBtYXgg UmFtTGltaXQgdmFsdWUgLgo+IC0gc2V0IHRoZSBkbWFfbWFzayB0byB0aGUgcHJvYmVkIHZhbHVl Cj4gLSBkbWFfYWxsb2MqCj4gLSBmdXJ0aGVyIGFkZHJlc3MgY2hlY2tzCj4gCj4+Cj4+PiArCj4+ PiArc3RhdGljIGludCBydnRyYWNlX3JhbXNpbmtfc2V0dXAoc3RydWN0IHJ2dHJhY2VfY29tcG9u ZW50ICpjb21wKQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCBkZXZpY2UgKnBkZXYgPSBjb21wLT5w ZGF0YS0+ZGV2Owo+Pj4gKyAgICAgc3RydWN0IHJ2dHJhY2VfcmFtc2lua19wcml2ICpwcml2Owo+ Pj4gKwo+Pj4gKyAgICAgcHJpdiA9IGRldm1fa3phbGxvYygmY29tcC0+ZGV2LCBzaXplb2YoKnBy aXYpLCBHRlBfS0VSTkVMKTsKPj4+ICsgICAgIGlmICghcHJpdikKPj4+ICsgICAgICAgICAgICAg cmV0dXJuIC1FTk9NRU07Cj4+PiArCj4+PiArICAgICBkZXZfc2V0X2RydmRhdGEoJmNvbXAtPmRl diwgcHJpdik7Cj4+PiArCj4+PiArICAgICAvKiBEZXJpdmUgUkFNIHNpbmsgbWVtb3J5IHNpemUg YmFzZWQgb24gY29tcG9uZW50IGltcGxlbWVudGF0aW9uIElEICovCj4+PiArICAgICBzd2l0Y2gg KGNvbXAtPnBkYXRhLT5pbXBpZCkgewo+Pj4gKyAgICAgZGVmYXVsdDoKPj4+ICsgICAgICAgICAg ICAgcHJpdi0+c2l6ZSA9IFNaXzFNOwo+Pj4gKyAgICAgICAgICAgICBicmVhazsKPj4+ICsgICAg IH0KPj4+ICsKPj4+ICsgICAgIHByaXYtPnZhID0gZG1hX2FsbG9jX2NvaGVyZW50KHBkZXYsIHBy aXYtPnNpemUsICZwcml2LT5zdGFydCwgR0ZQX0tFUk5FTCk7Cj4+PiArICAgICBpZiAoIXByaXYt PnZhKQo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKPj4+ICsKPj4+ICsgICAgIHJl dHVybiBydnRyYWNlX3JhbXNpbmtfc2V0dXBfYnVmKGNvbXApOwo+Pj4gK30KPj4+ICsKPj4+ICtz dGF0aWMgdm9pZCBydnRyYWNlX3JhbXNpbmtfY2xlYW51cChzdHJ1Y3QgcnZ0cmFjZV9jb21wb25l bnQgKmNvbXApCj4+PiArewo+Pj4gKyAgICAgc3RydWN0IHJ2dHJhY2VfcmFtc2lua19wcml2ICpw cml2ID0gZGV2X2dldF9kcnZkYXRhKCZjb21wLT5kZXYpOwo+Pj4gKwo+Pj4gKyAgICAgZG1hX2Zy ZWVfY29oZXJlbnQoJmNvbXAtPmRldiwgcHJpdi0+c2l6ZSwgcHJpdi0+dmEsIHByaXYtPnN0YXJ0 KTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBydnRyYWNlX3JhbXNpbmtfcHJvYmUoc3Ry dWN0IHJ2dHJhY2VfY29tcG9uZW50ICpjb21wKQo+Pj4gK3sKPj4+ICsgICAgIGludCByZXQ7Cj4+ PiArCj4+PiArICAgICByZXQgPSBydnRyYWNlX3JhbXNpbmtfc2V0dXAoY29tcCk7Cj4+PiArICAg ICBpZiAocmV0KQo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gZGV2X2Vycl9wcm9iZSgmY29tcC0+ ZGV2LCByZXQsICJmYWlsZWQgdG8gc2V0dXAgcmFtc2luay5cbiIpOwo+Pj4gKwo+Pj4gKyAgICAg cmV0ID0gcnZ0cmFjZV9lbmFibGVfY29tcG9uZW50KGNvbXApOwo+Pj4gKyAgICAgaWYgKHJldCkK Pj4+ICsgICAgICAgICAgICAgcmV0dXJuIGRldl9lcnJfcHJvYmUoJmNvbXAtPmRldiwgcmV0LCAi ZmFpbGVkIHRvIGVuYWJsZSByYW1zaW5rLlxuIik7Cj4+PiArCj4+PiArICAgICByZXR1cm4gcmV0 Owo+Pj4gK30KPj4KPj4gSW4gcHJvYmUsIHdlIHNob3VsZCBkZXRlY3QgYW5kIHNldCBpdCB0byBT TUVNIG1vZGUuIFRoZSBkZWZhdWx0IGlzIFNSQU0KPj4gbW9kZS4KPiBBY3R1YWxseSB0aGUgZGVm YXVsdCBpcyBub3Qgc2V0IGJ1dCBJIGFncmVlIHRoaXMgbmVlZHMgdG8gYmUgaGFuZGxlZAo+IGRp ZmZlcmVudGx5LiBXZSBjYW4gbWFrZSB0aGlzIGFuIGltcGxlbWVudGF0aW9uIGRlZmluZWQgcGFy YW1ldGVyIGFuZAo+IHRoZW4gY3Jvc3MgY2hlY2sgd2l0aCB0clJhbUltcGwgcmVnaXN0ZXIgZHVy aW5nIHByb2JlLgoKWW91IGFyZSByaWdodC4gVGhlIHJlc2V0IHZhbHVlIG9mIHRyUmFtTW9kZSBp cyBVbmRlZi4gVGh1cywgd2UgZG8gbmVlZCB0bwp0ZXN0IGFuZCBzZXQgaXQgdG8gU01FTSBtb2Rl LiAoSXQncyBhIFdBUkwgZmllbGQpCgo+Pgo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIHJ2dHJhY2Vf cmFtc2lua19yZW1vdmUoc3RydWN0IHJ2dHJhY2VfY29tcG9uZW50ICpjb21wKQo+Pj4gK3sKPj4+ ICsgICAgIGludCByZXQ7Cj4+PiArCj4+PiArICAgICByZXQgPSBydnRyYWNlX2Rpc2FibGVfY29t cG9uZW50KGNvbXApOwo+Pj4gKyAgICAgaWYgKHJldCkKPj4+ICsgICAgICAgICAgICAgZGV2X2Vy cigmY29tcC0+ZGV2LCAiZmFpbGVkIHRvIGRpc2FibGUgcmFtc2luay5cbiIpOwo+Pj4gKwo+Pj4g KyAgICAgcnZ0cmFjZV9yYW1zaW5rX2NsZWFudXAoY29tcCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0 YXRpYyBzdHJ1Y3QgcnZ0cmFjZV9jb21wb25lbnRfaWQgcnZ0cmFjZV9yYW1zaW5rX2lkc1tdID0g ewo+Pj4gKyAgICAgeyAudHlwZSA9IFJWVFJBQ0VfQ09NUE9ORU5UX1RZUEVfUkFNU0lOSywKPj4+ ICsgICAgICAgLnZlcnNpb24gPSBydnRyYWNlX2NvbXBvbmVudF9ta3ZlcnNpb24oMSwgMCksIH0s Cj4+PiArICAgICB7fSwKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyBzdHJ1Y3QgcnZ0cmFjZV9k cml2ZXIgcnZ0cmFjZV9yYW1zaW5rX2RyaXZlciA9IHsKPj4+ICsgICAgIC5pZF90YWJsZSA9IHJ2 dHJhY2VfcmFtc2lua19pZHMsCj4+PiArICAgICAuY29weXRvX2F1eGJ1ZiA9IHJ2dHJhY2VfcmFt c2lua19jb3B5dG9fYXV4YnVmLAo+Pgo+PiBTaG91bGQgaGF2ZSBhIC5zdGFydCBmdW5jdGlvbiBs aWtlIHRoZSBlbmNvZGVyIChzZXR0aW5nIHRyUmFtRW5hYmxlKSwKPj4gYW5kIHJlc2V0IHRoZSBX UCB0byBwcml2LT5zdGFydCwgYXMgc3VnZ2VzdGVkIGFib3ZlLgo+IFRoZSBhY3RpdmUgYW5kIGVu YWJsZSBiaXRzIGZvciBhbGwgY29tcG9uZW50cyBhcmUgaGFuZGxlZCB2aWEgZ2VuZXJpYwo+IHJ2 dHJhY2VfZW5hYmxlX2NvbXBvbmVudC9ydnRyYWNlX2Rpc2FibGVfY29tcG9uZW50IGZ1bmN0aW9u cy4gV2hlbiBhbGwKPiBjb21wb25lbnRzIGFyZSBkaXNhYmxlZCBiZWZvcmUgY29weWluZyBkYXRh IHRvIHBlcmYgdGhlbiBXUCB3b3VsZCBiZQo+IHJlc2V0IHRvIHByaXYtPnN0YXJ0IGFzIGEgcGFy dCBvZiBjb3B5X3RvX2F1eGJ1ZiBjYWxsYmFjay4KCkRpc2FncmVlLiBZb3UgY2FuJ3QgcmVseSBv biBlbmFibGUvZGlzYWJsZV9jb21wb25lbnQgZm9yIHJhbXNpbmsuIEl0J3MKdGhlIHNhbWUgYXMg ZW5jb2RlciwgeW91IG5lZWQgcHJvcGVyIHN0YXJ0L3N0b3AuIElmIHRoZSBSYW1FbmFibGUgYml0 CmlzIG5vdCBjbGVhcmVkLCB0cmFjZSBtYXkgbmV2ZXIgZ2V0cyBmbHVzaGVkLCBhbmQgeW91J2xs IG5ldmVyIGdldApSYW1FbXB0eS4gQWxzbyB5b3UgY2FuJ3QgYWNjZXNzIFdQIHdpdGhvdXQgY2xl YXJpbmcgUmFtRW5hYmxlLgoKSSdkIGFsc28gdGhpbmsgaXQncyBtb3JlIGFwcHJvcHJpYXRlIHRv IHJlc2V0IFdQIGluIHN0YXJ0IGNhbGxiYWNrLiBBcwpzYWlkIGVhcmxpZXIsIG5ldyB0cmFjZXMg Y2FuIG92ZXJ3cml0ZSBhbHJlYWR5IGNhcHR1cmVkIG9uZXMgYW55d2F5LApzbyB3aHkgbm90IHJl c2V0IFdQIG9uIGVhY2ggc3RhcnQuIEZ1dHVyZSBlbmhhbmNlbWVudHMgd2UgY2FuIHN1cHBvcnQK ZGlyZWN0bHkgcmVhZGluZyBvdXQgdGhlIHRyYWNlIGJ1ZmZlciB3aGVuIHRoZSBlbmNvZGVyL3Np bmsgaXMgaW5hY3RpdmUsCnNvIGJldHRlciBqdXN0IGxlYXZlIHRoZSBXUCB3aGVyZSBpdCB3YXMg YWZ0ZXIgc3RvcHBpbmcuCgpCbwoKPj4KPj4+ICsgICAgIC5zdG9wID0gcnZ0cmFjZV9yYW1zaW5r X3N0b3AsCj4+PiArICAgICAucHJvYmUgPSBydnRyYWNlX3JhbXNpbmtfcHJvYmUsCj4+PiArICAg ICAucmVtb3ZlID0gcnZ0cmFjZV9yYW1zaW5rX3JlbW92ZSwKPj4+ICsgICAgIC5kcml2ZXIgPSB7 Cj4+PiArICAgICAgICAgICAgIC5uYW1lID0gInJ2dHJhY2UtcmFtc2luayIsCj4+PiArICAgICB9 LAo+Pj4gK307Cj4+PiArCj4+PiArc3RhdGljIGludCBfX2luaXQgcnZ0cmFjZV9yYW1zaW5rX2lu aXQodm9pZCkKPj4+ICt7Cj4+PiArICAgICByZXR1cm4gcnZ0cmFjZV9yZWdpc3Rlcl9kcml2ZXIo JnJ2dHJhY2VfcmFtc2lua19kcml2ZXIpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBf X2V4aXQgcnZ0cmFjZV9yYW1zaW5rX2V4aXQodm9pZCkKPj4+ICt7Cj4+PiArICAgICBydnRyYWNl X3VucmVnaXN0ZXJfZHJpdmVyKCZydnRyYWNlX3JhbXNpbmtfZHJpdmVyKTsKPj4+ICt9Cj4+PiAr Cj4+PiArbW9kdWxlX2luaXQocnZ0cmFjZV9yYW1zaW5rX2luaXQpOwo+Pj4gK21vZHVsZV9leGl0 KHJ2dHJhY2VfcmFtc2lua19leGl0KTsKPj4+ICsKPj4+ICsvKiBNb2R1bGUgaW5mb3JtYXRpb24g Ki8KPj4+ICtNT0RVTEVfQVVUSE9SKCJNYXl1cmVzaCBDaGl0YWxlIDxtY2hpdGFsZUB2ZW50YW5h bWljcm8uY29tPiIpOwo+Pj4gK01PRFVMRV9ERVNDUklQVElPTigiUklTQy1WIFRyYWNlIFJhbXNp bmsgRHJpdmVyIik7Cj4+PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+Pgo+PiBCbwo+PgoKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LXJpc2N2 IG1haWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0 cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcmlzY3YK