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 ED749C47422 for ; Mon, 29 Jan 2024 04:36: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=qFmCJPEZNXkR5NRpHtMBRo89x3ZCfVBGkMXTrID20VM=; b=IFBsY+jDnKvmiK 5plLC72uyFvEr+LfbCAsf0MOgd8vdVsXYdC8nqezwJ2mIaBytjzuon9bLaWdqd0GENjMVF2SyI7hl 7l5HWtsUh7gpqNPEwF3iJCkuBl+5fzwi0P/2gCwPkByj5tcSaKJGaLYET2aYs2mZqObswmuWEfELN LxmS8GXuOAtwsAEvuPprJa0pPl+c4wg7/bAb0sxicrfV/kCRUyyp4qDokT5ALh4+LsxZ75aDhKKRH lVbXJqr+uTlr39kN6VaL3Mhco7/jl16eyynVGWlXg+IQTQqEtpc3fLF4w68yIvJCLy0+QEbYWD5Dl 7OvT+Rw0in8OEUyk/8dQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rUJN9-0000000BEmv-1igk; Mon, 29 Jan 2024 04:35:51 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rUJN5-0000000BElY-0TdD for linux-arm-kernel@lists.infradead.org; Mon, 29 Jan 2024 04:35:49 +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 6AFCD1FB; Sun, 28 Jan 2024 20:36:24 -0800 (PST) Received: from [10.162.42.11] (a077893.blr.arm.com [10.162.42.11]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1E77E3F762; Sun, 28 Jan 2024 20:35:35 -0800 (PST) Message-ID: <893041d1-9715-4b2d-ac28-6cca3121082d@arm.com> Date: Mon, 29 Jan 2024 10:05:32 +0530 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH V16 3/8] drivers: perf: arm_pmuv3: Enable branch stack sampling framework Content-Language: en-US To: Suzuki K Poulose , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, will@kernel.org, catalin.marinas@arm.com, mark.rutland@arm.com Cc: Mark Brown , James Clark , Rob Herring , Marc Zyngier , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , linux-perf-users@vger.kernel.org References: <20240125094119.2542332-1-anshuman.khandual@arm.com> <20240125094119.2542332-4-anshuman.khandual@arm.com> <4548445a-aefe-4111-be8d-12f7cc46188b@arm.com> From: Anshuman Khandual In-Reply-To: <4548445a-aefe-4111-be8d-12f7cc46188b@arm.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240128_203547_290643_54E1887C X-CRM114-Status: GOOD ( 38.87 ) 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 CgpPbiAxLzI1LzI0IDE5OjE0LCBTdXp1a2kgSyBQb3Vsb3NlIHdyb3RlOgo+IE9uIDI1LzAxLzIw MjQgMDk6NDEsIEFuc2h1bWFuIEtoYW5kdWFsIHdyb3RlOgo+PiBCcmFuY2ggc3RhY2sgc2FtcGxp bmcgc3VwcG9ydCBpLmUgY2FwdHVyaW5nIGJyYW5jaCByZWNvcmRzIGR1cmluZyBleGVjdXRpb24K Pj4gaW4gY29yZSBwZXJmLCByaWRlcyBhbG9uZyB3aXRoIG5vcm1hbCBIVyBldmVudHMgYmVpbmcg c2NoZWR1bGVkIG9uIHRoZSBQTVUuCj4+IFRoaXMgcHJlcGFyZXMgQVJNVjggUE1VIGZyYW1ld29y ayBmb3IgYnJhbmNoIHN0YWNrIHN1cHBvcnQgb24gcmVsZXZhbnQgUE1Vcwo+PiB3aXRoIHJlcXVp cmVkIEhXIGltcGxlbWVudGF0aW9uLgo+Pgo+PiBBUk1WOCBQTVUgaGFyZHdhcmUgc3VwcG9ydCBm b3IgYnJhbmNoIHN0YWNrIHNhbXBsaW5nIGlzIGluZGljYXRlZCB2aWEgYSBuZXcKPj4gZmVhdHVy ZSBmbGFnIGNhbGxlZCAnaGFzX2JyYW5jaF9zdGFjaycgdGhhdCBjYW4gYmUgYXNjZXJ0YWluZWQg dmlhIHByb2JpbmcuCj4+IFRoaXMgbW9kaWZpZXMgY3VycmVudCBnYXRlIGluIGFybXBtdV9ldmVu dF9pbml0KCkgd2hpY2ggYmxvY2tzIGJyYW5jaCBzdGFjawo+PiBzYW1wbGluZyBiYXNlZCBwZXJm IGV2ZW50cyB1bmNvbmRpdGlvbmFsbHkuIEluc3RlYWQgYWxsb3dzIHN1Y2ggcGVyZiBldmVudHMK Pj4gZ2V0dGluZyBpbml0aWFsaXplZCBvbiBzdXBwb3J0aW5nIFBNVSBoYXJkd2FyZS4KPj4KPj4g QnJhbmNoIHN0YWNrIHNhbXBsaW5nIGlzIGVuYWJsZWQgYW5kIGRpc2FibGVkIGFsb25nIHdpdGgg cmVndWxhciBQTVUgZXZlbnRzCj4+IC4gVGhpcyBhZGRzIHJlcXVpcmVkIGZ1bmN0aW9uIGNhbGxi YWNrcyBpbiBhcm12OHBtdV9icmFuY2hfeHh4KCkgZm9ybWF0LCB0bwo+PiBkcml2ZSB0aGUgUE1V IGJyYW5jaCBzdGFjayBoYXJkd2FyZSB3aGVuIHN1cHBvcnRlZC4gVGhpcyBhbHNvIGFkZHMgZmFs bGJhY2sKPj4gc3R1YiBkZWZpbml0aW9ucyBmb3IgdGhlc2UgY2FsbGJhY2tzIGZvciBQTVVzIHdo aWNoIHdvdWxkIG5vdCBoYXZlIHJlcXVpcmVkCj4+IHN1cHBvcnQuCj4+Cj4+IElmIGEgdGFzayBn ZXRzIHNjaGVkdWxlZCBvdXQsIHRoZSBjdXJyZW50IGJyYW5jaCByZWNvcmRzIGdldCBzYXZlZCBp biB0aGUKPj4gdGFzaydzIGNvbnRleHQgZGF0YSwgd2hpY2ggY2FuIGJlIGxhdGVyIHVzZWQgdG8g ZmlsbCBpbiB0aGUgcmVjb3JkcyB1cG9uIGFuCj4+IGV2ZW50IG92ZXJmbG93LiBIZW5jZSwgd2Ug ZW5hYmxlIFBFUkZfQVRUQUNIX1RBU0tfREFUQSAoZXZlbnQtPmF0dGFjaF9zdGF0ZQo+PiBiYXNl ZCBmbGFnKSBmb3IgYnJhbmNoIHN0YWNrIHJlcXVlc3RpbmcgcGVyZiBldmVudHMuIEJ1dCB0aGlz IGFsc28gcmVxdWlyZXMKPj4gYWRkaW5nIHN1cHBvcnQgZm9yIHBtdTo6c2NoZWRfdGFzaygpIGNh bGxiYWNrIHRvIGFybV9wbXUuCj4+Cj4+IENjOiBDYXRhbGluIE1hcmluYXMgPGNhdGFsaW4ubWFy aW5hc0Bhcm0uY29tPgo+PiBDYzogV2lsbCBEZWFjb24gPHdpbGxAa2VybmVsLm9yZz4KPj4gQ2M6 IE1hcmsgUnV0bGFuZCA8bWFyay5ydXRsYW5kQGFybS5jb20+Cj4+IENjOiBsaW51eC1hcm0ta2Vy bmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKPj4gQ2M6IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5v cmcKPj4gU2lnbmVkLW9mZi1ieTogQW5zaHVtYW4gS2hhbmR1YWwgPGFuc2h1bWFuLmtoYW5kdWFs QGFybS5jb20+Cj4+IC0tLQo+PiBDaGFuZ2VzIGluIFYxNjoKPj4KPj4gLSBSZW5hbWVkIGFybV9i cmJlLmggYXMgYXJtX3BtdXYzX2JyYW5jaC5oCj4+IC0gVXBkYXRlZCBwZXJmX3NhbXBsZV9zYXZl X2Jyc3RhY2soKSdzIG5ldyBhcmd1bWVudCByZXF1aXJlbWVudHMgd2l0aCBOVUxMCj4+Cj4+IMKg IGRyaXZlcnMvcGVyZi9hcm1fcG11LmPCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDU3ICsrKysrKysr KysrKy0KPj4gwqAgZHJpdmVycy9wZXJmL2FybV9wbXV2My5jwqDCoMKgwqDCoMKgwqAgfCAxNDEg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KPj4gwqAgZHJpdmVycy9wZXJmL2FybV9w bXV2M19icmFuY2guaCB8wqAgNTAgKysrKysrKysrKysKPj4gwqAgaW5jbHVkZS9saW51eC9wZXJm L2FybV9wbXUuaMKgwqDCoCB8wqAgMjkgKysrKysrLQo+PiDCoCBpbmNsdWRlL2xpbnV4L3BlcmYv YXJtX3BtdXYzLmjCoCB8wqDCoCAxIC0KPj4gwqAgNSBmaWxlcyBjaGFuZ2VkLCAyNzMgaW5zZXJ0 aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKPj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv cGVyZi9hcm1fcG11djNfYnJhbmNoLmgKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVyZi9h cm1fcG11LmMgYi9kcml2ZXJzL3BlcmYvYXJtX3BtdS5jCj4+IGluZGV4IDg0NThmZTJjZWJiNC4u MTZmNDg4YWU3NzQ3IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3BlcmYvYXJtX3BtdS5jCj4+ICsr KyBiL2RyaXZlcnMvcGVyZi9hcm1fcG11LmMKPj4gQEAgLTMxNyw2ICszMTcsMTUgQEAgYXJtcG11 X2RlbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKPj4gwqDCoMKgwqDCoCBz dHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKPj4gwqDCoMKgwqDCoCBpbnQg aWR4ID0gaHdjLT5pZHg7Cj4+IMKgICvCoMKgwqAgaWYgKGhhc19icmFuY2hfc3RhY2soZXZlbnQp KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBXQVJOX09OX09OQ0UoIWh3X2V2ZW50cy0+YnJiZV91c2Vy cyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBod19ldmVudHMtPmJyYmVfdXNlcnMtLTsKPiAKPiBeXiBT aG91bGQgd2UgZG8gdGhpcyBvbmx5IGlmIHRoZSBldmVudCBtYXRjaGVzIHRoZSBzYW1wbGUgdHlw ZSA/IFB1dCB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgd2hhdCBkb2VzIGJyYmVfdXNlcnMgdHJhY2sg PyBUaGUgbnVtYmVyIG9mIGV2ZW50cyB0aGF0Cj4gInNoYXJlIiB0aGUgQlJCRSBpbnN0YW5jZSA/ IE9yIHRoZSBudW1iZXIgb2YgYWN0aXZlIGV2ZW50cyB0aGF0Cj4gaGFzX2JyYW5jaF9zdGFjaygp ID8KCkFjdGl2ZSBwZXJmIGV2ZW50cyB3aXRoIGhhc19icmFuY2hfc3RhY2soKSBpcnJlc3BlY3Rp dmUgb2Ygd2hldGhlcgp0aGVyZSBpcyBicmFuY2hfc2FtcGxlX3R5cGUgbWF0Y2ggb3Igbm90IGku ZSBicmFuY2ggcmVjb3JkcyBtaWdodApiZSBjb25zdW1lZCBvciBub3QuCgo+IAo+PiArwqDCoMKg wqDCoMKgwqAgaWYgKCFod19ldmVudHMtPmJyYmVfdXNlcnMpIHsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaHdfZXZlbnRzLT5icmJlX2NvbnRleHQgPSBOVUxMOwo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBod19ldmVudHMtPmJyYmVfc2FtcGxlX3R5cGUgPSAwOwo+PiArwqDCoMKgwqDC oMKgwqAgfQo+PiArwqDCoMKgIH0KPj4gKwo+PiDCoMKgwqDCoMKgIGFybXBtdV9zdG9wKGV2ZW50 LCBQRVJGX0VGX1VQREFURSk7Cj4+IMKgwqDCoMKgwqAgaHdfZXZlbnRzLT5ldmVudHNbaWR4XSA9 IE5VTEw7Cj4+IMKgwqDCoMKgwqAgYXJtcG11LT5jbGVhcl9ldmVudF9pZHgoaHdfZXZlbnRzLCBl dmVudCk7Cj4+IEBAIC0zMzMsNiArMzQyLDM4IEBAIGFybXBtdV9hZGQoc3RydWN0IHBlcmZfZXZl bnQgKmV2ZW50LCBpbnQgZmxhZ3MpCj4+IMKgwqDCoMKgwqAgc3RydWN0IGh3X3BlcmZfZXZlbnQg Kmh3YyA9ICZldmVudC0+aHc7Cj4+IMKgwqDCoMKgwqAgaW50IGlkeDsKPj4gwqAgK8KgwqDCoCBp ZiAoaGFzX2JyYW5jaF9zdGFjayhldmVudCkpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qCj4+ICvC oMKgwqDCoMKgwqDCoMKgICogUmVzZXQgYnJhbmNoIHJlY29yZHMgYnVmZmVyIGlmIGEgbmV3IENQ VSBib3VuZCBldmVudAo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIGdldHMgc2NoZWR1bGVkIG9uIGEg UE1VLiBPdGhlcndpc2UgZXhpc3RpbmcgYnJhbmNoCj4+ICvCoMKgwqDCoMKgwqDCoMKgICogcmVj b3JkcyBwcmVzZW50IGluIHRoZSBidWZmZXIgbWlnaHQganVzdCBsZWFrIGludG8KPj4gK8KgwqDC oMKgwqDCoMKgwqAgKiBzdWNoIGV2ZW50cy4KPj4gK8KgwqDCoMKgwqDCoMKgwqAgKgo+PiArwqDC oMKgwqDCoMKgwqDCoCAqIEFsc28gcmVzZXQgY3VycmVudCAnaHdfZXZlbnRzLT5icmJlX2NvbnRl eHQnIGJlY2F1c2UKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBhbnkgcHJldmlvdXMgdGFzayBib3Vu ZCBldmVudCBub3cgd291bGQgaGF2ZSBsb3N0IGFuCj4+ICvCoMKgwqDCoMKgwqDCoMKgICogb3Bw b3J0dW5pdHkgZm9yIGNvbnRpbnVvdXMgYnJhbmNoIHJlY29yZHMuCj4+ICvCoMKgwqDCoMKgwqDC oMKgICovCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIWV2ZW50LT5jdHgtPnRhc2spIHsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaHdfZXZlbnRzLT5icmJlX2NvbnRleHQgPSBOVUxMOwo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYXJtcG11LT5icmFuY2hfcmVzZXQpCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXJtcG11LT5icmFuY2hfcmVzZXQoKTsKPj4gK8Kg wqDCoMKgwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgLyoKPj4gK8KgwqDCoMKgwqDC oMKgwqAgKiBSZXNldCBicmFuY2ggcmVjb3JkcyBidWZmZXIgaWYgYSBuZXcgdGFzayBldmVudCBn ZXRzCj4+ICvCoMKgwqDCoMKgwqDCoMKgICogc2NoZWR1bGVkIG9uIGEgUE1VIHdoaWNoIG1pZ2h0 IGhhdmUgZXhpc3RpbmcgcmVjb3Jkcy4KPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBPdGhlcndpc2Ug b2xkZXIgYnJhbmNoIHJlY29yZHMgcHJlc2VudCBpbiB0aGUgYnVmZmVyCj4+ICvCoMKgwqDCoMKg wqDCoMKgICogbWlnaHQgbGVhayBpbnRvIHRoZSBuZXcgdGFzayBldmVudC4KPj4gK8KgwqDCoMKg wqDCoMKgwqAgKi8KPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChldmVudC0+Y3R4LT50YXNrICYmIGh3 X2V2ZW50cy0+YnJiZV9jb250ZXh0ICE9IGV2ZW50LT5jdHgpIHsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaHdfZXZlbnRzLT5icmJlX2NvbnRleHQgPSBldmVudC0+Y3R4Owo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpZiAoYXJtcG11LT5icmFuY2hfcmVzZXQpCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYXJtcG11LT5icmFuY2hfcmVzZXQoKTsKPj4gK8KgwqDCoMKg wqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgIGh3X2V2ZW50cy0+YnJiZV91c2VycysrOwo+PiAr wqDCoMKgwqDCoMKgwqAgaHdfZXZlbnRzLT5icmJlX3NhbXBsZV90eXBlID0gZXZlbnQtPmF0dHIu YnJhbmNoX3NhbXBsZV90eXBlOwo+PiArwqDCoMKgIH0KPj4gKwo+PiDCoMKgwqDCoMKgIC8qIEFu IGV2ZW50IGZvbGxvd2luZyBhIHByb2Nlc3Mgd29uJ3QgYmUgc3RvcHBlZCBlYXJsaWVyICovCj4+ IMKgwqDCoMKgwqAgaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgJmFy bXBtdS0+c3VwcG9ydGVkX2NwdXMpKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9F TlQ7Cj4+IEBAIC01MTEsMTMgKzU1MiwyNCBAQCBzdGF0aWMgaW50IGFybXBtdV9ldmVudF9pbml0 KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgICFjcHVtYXNr X3Rlc3RfY3B1KGV2ZW50LT5jcHUsICZhcm1wbXUtPnN1cHBvcnRlZF9jcHVzKSkKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiAtRU5PRU5UOwo+PiDCoCAtwqDCoMKgIC8qIGRvZXMgbm90IHN1 cHBvcnQgdGFrZW4gYnJhbmNoIHNhbXBsaW5nICovCj4+IC3CoMKgwqAgaWYgKGhhc19icmFuY2hf c3RhY2soZXZlbnQpKQo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIEJyYW5jaCBzdGFjayBz YW1wbGluZyBldmVudHMgYXJlIGFsbG93ZWQKPj4gK8KgwqDCoMKgICogb25seSBvbiBQTVUgd2hp Y2ggaGFzIHJlcXVpcmVkIHN1cHBvcnQuCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIGlmICho YXNfYnJhbmNoX3N0YWNrKGV2ZW50KSAmJiAhYXJtcG11LT5oYXNfYnJhbmNoX3N0YWNrKQo+PiDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FT1BOT1RTVVBQOwo+PiDCoCDCoMKgwqDCoMKgIHJl dHVybiBfX2h3X3BlcmZfZXZlbnRfaW5pdChldmVudCk7Cj4+IMKgIH0KPj4gwqAgK3N0YXRpYyB2 b2lkIGFybXBtdV9zY2hlZF90YXNrKHN0cnVjdCBwZXJmX2V2ZW50X3BtdV9jb250ZXh0ICpwbXVf Y3R4LCBib29sIHNjaGVkX2luKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBhcm1fcG11ICphcm1w bXUgPSB0b19hcm1fcG11KHBtdV9jdHgtPnBtdSk7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoYXJtcG11 LT5zY2hlZF90YXNrKQo+PiArwqDCoMKgwqDCoMKgwqAgYXJtcG11LT5zY2hlZF90YXNrKHBtdV9j dHgsIHNjaGVkX2luKTsKPj4gK30KPj4gKwo+PiDCoCBzdGF0aWMgdm9pZCBhcm1wbXVfZW5hYmxl KHN0cnVjdCBwbXUgKnBtdSkKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBhcm1fcG11ICph cm1wbXUgPSB0b19hcm1fcG11KHBtdSk7Cj4+IEBAIC04NjQsNiArOTE2LDcgQEAgc3RydWN0IGFy bV9wbXUgKmFybXBtdV9hbGxvYyh2b2lkKQo+PiDCoMKgwqDCoMKgIH0KPj4gwqAgwqDCoMKgwqDC oCBwbXUtPnBtdSA9IChzdHJ1Y3QgcG11KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCAuc2NoZWRfdGFz a8KgwqDCoCA9IGFybXBtdV9zY2hlZF90YXNrLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgLnBtdV9l bmFibGXCoMKgwqAgPSBhcm1wbXVfZW5hYmxlLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgLnBtdV9k aXNhYmxlwqDCoMKgID0gYXJtcG11X2Rpc2FibGUsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAuZXZl bnRfaW5pdMKgwqDCoCA9IGFybXBtdV9ldmVudF9pbml0LAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9wZXJmL2FybV9wbXV2My5jIGIvZHJpdmVycy9wZXJmL2FybV9wbXV2My5jCj4+IGluZGV4IDIz ZmE2YzVkYTgyYy4uOWUxNzc2NGEwOTI5IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3BlcmYvYXJt X3BtdXYzLmMKPj4gKysrIGIvZHJpdmVycy9wZXJmL2FybV9wbXV2My5jCj4+IEBAIC0yNiw2ICsy Niw3IEBACj4+IMKgICNpbmNsdWRlIDxsaW51eC9ubWkuaD4KPj4gwqAgwqAgI2luY2x1ZGUgPGFz bS9hcm1fcG11djMuaD4KPj4gKyNpbmNsdWRlICJhcm1fcG11djNfYnJhbmNoLmgiCj4+IMKgIMKg IC8qIEFSTXY4IENvcnRleC1BNTMgc3BlY2lmaWMgZXZlbnQgdHlwZXMuICovCj4+IMKgICNkZWZp bmUgQVJNVjhfQTUzX1BFUkZDVFJfUFJFRl9MSU5FRklMTMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAweEMyCj4+IEBAIC04MjksMTQgKzgzMCw1NiBAQCBzdGF0aWMgdm9pZCBhcm12OHBt dV9zdGFydChzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSkKPj4gwqDCoMKgwqDCoCBhcm12OHBtdV9w bWNyX3dyaXRlKGFybXY4cG11X3BtY3JfcmVhZCgpIHwgQVJNVjhfUE1VX1BNQ1JfRSk7Cj4+IMKg IMKgwqDCoMKgwqAga3ZtX3ZjcHVfcG11X3Jlc3luY19lbDAoKTsKPj4gK8KgwqDCoCBpZiAoY3B1 X3BtdS0+aGFzX2JyYW5jaF9zdGFjaykKPj4gK8KgwqDCoMKgwqDCoMKgIGFybXY4cG11X2JyYW5j aF9lbmFibGUoY3B1X3BtdSk7Cj4gCj4gSXMgdGhlcmUgYSByZWFzb24gd2h5IGRvIHRoaXMgYWZ0 ZXIga3ZtX3ZjcHVfcG11X3Jlc3luY19lbDAoKSA/Cj4gSWRlYWxseSwgd2Ugc2hvdWxkIGdldCBj b3VudGluZyBhcyBzb29uIGFzIHRoZSBQTVUgaXMgb24gPwoKQnV0IGlmIHRoZSBrZXJuZWwgaXMg YWxzbyBiZWluZyB0cmFjZWQsIGJyYW5jaGVzIGZyb20ga3ZtX3ZjcHVfcG11X3Jlc3luY19lbDAo KQptaWdodCBnZXQgaW50byBmaW5hbCBCUkJFIHNhbXBsZXMgYXMgd2VsbC4gUGxhY2luZyBicmFu Y2hfZW5hYmxlKCkgYXQgdGhlIGxhc3QKaGVscCBhdm9pZCBzdWNoIHNpdHVhdGlvbnMuIEFsdGhv dWdoIHRoZSBzYW1lIGNvdWxkIGFsc28gYmUgcmVhc29uZWQgYWJvdXQKbm9ybWFsIFBNVSBldmVu dCBjb3VudGVycyBiZWluZyBlbmFibGVkIHZpYSBhcm12OHBtdV9wbWNyX3dyaXRlKCkgYXMgd2Vs bC4gU28KYXJtdjhwbXVfYnJhbmNoX2VuYWJsZSgpIGNvdWxkIGJlIG1vdmVkIGJlZm9yZSBrdm1f dmNwdV9wbXVfcmVzeW5jX2VsMCgpLgoKPiAKPj4gwqAgfQo+PiDCoCDCoCBzdGF0aWMgdm9pZCBh cm12OHBtdV9zdG9wKHN0cnVjdCBhcm1fcG11ICpjcHVfcG11KQo+PiDCoCB7Cj4+ICvCoMKgwqAg aWYgKGNwdV9wbXUtPmhhc19icmFuY2hfc3RhY2spCj4+ICvCoMKgwqDCoMKgwqDCoCBhcm12OHBt dV9icmFuY2hfZGlzYWJsZSgpOwo+PiArCj4+IMKgwqDCoMKgwqAgLyogRGlzYWJsZSBhbGwgY291 bnRlcnMgKi8KPj4gwqDCoMKgwqDCoCBhcm12OHBtdV9wbWNyX3dyaXRlKGFybXY4cG11X3BtY3Jf cmVhZCgpICYgfkFSTVY4X1BNVV9QTUNSX0UpOwo+PiDCoCB9Cj4+IMKgICtzdGF0aWMgdm9pZCBy ZWFkX2JyYW5jaF9yZWNvcmRzKHN0cnVjdCBwbXVfaHdfZXZlbnRzICpjcHVjLAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0 YSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBib29sICpicmFuY2hfY2FwdHVy ZWQpCj4+ICt7Cj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKgICogQ1BVIHNwZWNpZmljIGJyYW5j aCByZWNvcmRzIGJ1ZmZlciBtdXN0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgYWxyZWFkeQo+PiArwqDC oMKgwqAgKiBmb3IgdGhlIGhhcmR3YXJlIHJlY29yZHMgdG8gYmUgY2FwdHVyZWQgYW5kIHByb2Nl c3NlZCBmdXJ0aGVyLgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBpZiAoV0FSTl9PTighY3B1 Yy0+YnJhbmNoZXMpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArCj4+ICvCoMKgwqAg LyoKPj4gK8KgwqDCoMKgICogT3ZlcmZsb3dlZCBldmVudCdzIGJyYW5jaF9zYW1wbGVfdHlwZSBk b2VzIG5vdCBtYXRjaCB0aGUgY29uZmlndXJlZAo+PiArwqDCoMKgwqAgKiBicmFuY2ggZmlsdGVy cyBpbiB0aGUgQlJCRSBIVy4gU28gdGhlIGNhcHR1cmVkIGJyYW5jaCByZWNvcmRzIGhlcmUKPj4g K8KgwqDCoMKgICogY2Fubm90IGJlIGNvLXJlbGF0ZWQgdG8gdGhlIG92ZXJmbG93ZWQgZXZlbnQu IFJlcG9ydCB0byB0aGUgdXNlciBhcwo+PiArwqDCoMKgwqAgKiBpZiBubyBicmFuY2ggcmVjb3Jk cyBoYXZlIGJlZW4gY2FwdHVyZWQsIGFuZCBmbHVzaCBicmFuY2ggcmVjb3Jkcy4KPj4gK8KgwqDC oMKgICogVGhlIHNhbWUgc2NlbmFyaW8gaXMgYXBwbGljYWJsZSB3aGVuIHRoZSBjdXJyZW50IHRh c2sgY29udGV4dCBkb2VzCj4+ICvCoMKgwqDCoCAqIG5vdCBtYXRjaCB3aXRoIG92ZXJmbG93biBl dmVudC4KPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgaWYgKChjcHVjLT5icmJlX3NhbXBsZV90 eXBlICE9IGV2ZW50LT5hdHRyLmJyYW5jaF9zYW1wbGVfdHlwZSkgfHwKPj4gK8KgwqDCoMKgwqDC oMKgIChldmVudC0+Y3R4LT50YXNrICYmIGNwdWMtPmJyYmVfY29udGV4dCAhPSBldmVudC0+Y3R4 KSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKg wqDCoCAqIFJlYWQgdGhlIGJyYW5jaCByZWNvcmRzIGZyb20gdGhlIGhhcmR3YXJlIG9uY2UgYWZ0 ZXIgdGhlIFBNVSBJUlEKPj4gK8KgwqDCoMKgICogaGFzIGJlZW4gdHJpZ2dlcmVkIGJ1dCBzdWJz ZXF1ZW50bHkgc2FtZSByZWNvcmRzIGNhbiBiZSB1c2VkIGZvcgo+PiArwqDCoMKgwqAgKiBvdGhl ciBldmVudHMgdGhhdCBtaWdodCBoYXZlIGJlZW4gb3ZlcmZsb3dlZCBzaW11bHRhbmVvdXNseSB0 aHVzCj4+ICvCoMKgwqDCoCAqIHNhdmluZyBtdWNoIENQVSBjeWNsZXMuCj4+ICvCoMKgwqDCoCAq Lwo+PiArwqDCoMKgIGlmICghKmJyYW5jaF9jYXB0dXJlZCkgewo+PiArwqDCoMKgwqDCoMKgwqAg YXJtdjhwbXVfYnJhbmNoX3JlYWQoY3B1YywgZXZlbnQpOwo+PiArwqDCoMKgwqDCoMKgwqAgKmJy YW5jaF9jYXB0dXJlZCA9IHRydWU7Cj4+ICvCoMKgwqAgfQo+PiArwqDCoMKgIHBlcmZfc2FtcGxl X3NhdmVfYnJzdGFjayhkYXRhLCBldmVudCwgJmNwdWMtPmJyYW5jaGVzLT5icmFuY2hfc3RhY2ss IE5VTEwpOwo+PiArfQo+PiArCj4+IMKgIHN0YXRpYyBpcnFyZXR1cm5fdCBhcm12OHBtdV9oYW5k bGVfaXJxKHN0cnVjdCBhcm1fcG11ICpjcHVfcG11KQo+PiDCoCB7Cj4+IMKgwqDCoMKgwqAgdTMy IHBtb3ZzcjsKPj4gQEAgLTg0NCw2ICs4ODcsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYXJtdjhw bXVfaGFuZGxlX2lycShzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSkKPj4gwqDCoMKgwqDCoCBzdHJ1 Y3QgcG11X2h3X2V2ZW50cyAqY3B1YyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMp Owo+PiDCoMKgwqDCoMKgIHN0cnVjdCBwdF9yZWdzICpyZWdzOwo+PiDCoMKgwqDCoMKgIGludCBp ZHg7Cj4+ICvCoMKgwqAgYm9vbCBicmFuY2hfY2FwdHVyZWQgPSBmYWxzZTsKPj4gwqAgwqDCoMKg wqDCoCAvKgo+PiDCoMKgwqDCoMKgwqAgKiBHZXQgYW5kIHJlc2V0IHRoZSBJUlEgZmxhZ3MKPj4g QEAgLTg4Nyw2ICs5MzEsMTMgQEAgc3RhdGljIGlycXJldHVybl90IGFybXY4cG11X2hhbmRsZV9p cnEoc3RydWN0IGFybV9wbXUgKmNwdV9wbXUpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIWFy bXBtdV9ldmVudF9zZXRfcGVyaW9kKGV2ZW50KSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgY29udGludWU7Cj4+IMKgICvCoMKgwqDCoMKgwqDCoCAvKgo+PiArwqDCoMKgwqDCoMKgwqDC oCAqIFBNVSBJUlEgc2hvdWxkIHJlbWFpbiBhc3NlcnRlZCB1bnRpbCBhbGwgYnJhbmNoIHJlY29y ZHMKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBhcmUgY2FwdHVyZWQgYW5kIHByb2Nlc3NlZCBpbnRv IHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhLgo+PiArwqDCoMKgwqDCoMKgwqDCoCAqLwo+PiArwqDC oMKgwqDCoMKgwqAgaWYgKGhhc19icmFuY2hfc3RhY2soZXZlbnQpICYmIGNwdV9wbXUtPmhhc19i cmFuY2hfc3RhY2spCj4gCj4gbml0OiBEbyB3ZSByZWFsbHkgbmVlZCB0aGUgY3B1X3BtdS0+aGFz X2JyYW5jaF9zdGFjayBjaGVjayA/IFRoZSBldmVudAo+IHdvdWxkbid0IHJlYWNoIGhlcmUgaWYg dGhlIFBNVSBkb2Vzbid0IHN1cHBvcnRlZCBpdCA/CgpUaGlzIGlzIGp1c3QgYW4gYWRkaXRpb25h bCBjaGVjayAtIGhhc19icmFuY2hfc3RhY2soKSBiYXNlZCBldmVudCBtaWdodApub3QgaGF2ZSBy ZWFjaGVkIGhlcmUgb3RoZXJ3aXNlIGkuZSB3aXRob3V0IHRoZSBQTVUgc3VwcG9ydGluZyBicmFu Y2gKcmVjb3Jkcy4KCj4gCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlYWRfYnJhbmNoX3Jl Y29yZHMoY3B1YywgZXZlbnQsICZkYXRhLCAmYnJhbmNoX2NhcHR1cmVkKTsKPj4gKwo+PiDCoMKg wqDCoMKgwqDCoMKgwqAgLyoKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBQZXJmIGV2ZW50IG92 ZXJmbG93IHdpbGwgcXVldWUgdGhlIHByb2Nlc3Npbmcgb2YgdGhlIGV2ZW50IGFzCj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgICogYW4gaXJxX3dvcmsgd2hpY2ggd2lsbCBiZSB0YWtlbiBjYXJlIG9m IGluIHRoZSBoYW5kbGluZyBvZgo+PiBAQCAtODk2LDYgKzk0Nyw4IEBAIHN0YXRpYyBpcnFyZXR1 cm5fdCBhcm12OHBtdV9oYW5kbGVfaXJxKHN0cnVjdCBhcm1fcG11ICpjcHVfcG11KQo+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjcHVfcG11LT5kaXNhYmxlKGV2ZW50KTsKPj4gwqDCoMKg wqDCoCB9Cj4+IMKgwqDCoMKgwqAgYXJtdjhwbXVfc3RhcnQoY3B1X3BtdSk7Cj4+ICvCoMKgwqAg aWYgKGNwdV9wbXUtPmhhc19icmFuY2hfc3RhY2spCj4+ICvCoMKgwqDCoMKgwqDCoCBhcm12OHBt dV9icmFuY2hfcmVzZXQoKTsKPj4gwqAgwqDCoMKgwqDCoCByZXR1cm4gSVJRX0hBTkRMRUQ7Cj4+ IMKgIH0KPj4gQEAgLTk4NSw2ICsxMDM4LDI0IEBAIHN0YXRpYyBpbnQgYXJtdjhwbXVfdXNlcl9l dmVudF9pZHgoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+PiDCoMKgwqDCoMKgIHJldHVybiBl dmVudC0+aHcuaWR4Owo+PiDCoCB9Cj4+IMKgICtzdGF0aWMgdm9pZCBhcm12OHBtdV9zY2hlZF90 YXNrKHN0cnVjdCBwZXJmX2V2ZW50X3BtdV9jb250ZXh0ICpwbXVfY3R4LCBib29sIHNjaGVkX2lu KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBhcm1fcG11ICphcm1wbXUgPSB0b19hcm1fcG11KHBt dV9jdHgtPnBtdSk7Cj4+ICvCoMKgwqAgdm9pZCAqdGFza19jdHggPSBwbXVfY3R4LT50YXNrX2N0 eF9kYXRhOwo+PiArCj4+ICvCoMKgwqAgaWYgKGFybXBtdS0+aGFzX2JyYW5jaF9zdGFjaykgewo+ PiArwqDCoMKgwqDCoMKgwqAgLyogU2F2ZSBicmFuY2ggcmVjb3JkcyBpbiB0YXNrX2N0eCBvbiBz Y2hlZCBvdXQgKi8KPj4gK8KgwqDCoMKgwqDCoMKgIGlmICh0YXNrX2N0eCAmJiAhc2NoZWRfaW4p IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXJtdjhwbXVfYnJhbmNoX3NhdmUoYXJtcG11 LCB0YXNrX2N0eCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4gK8KgwqDC oMKgwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgLyogUmVzZXQgYnJhbmNoIHJlY29y ZHMgb24gc2NoZWQgaW4gKi8KPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChzY2hlZF9pbikKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYXJtdjhwbXVfYnJhbmNoX3Jlc2V0KCk7Cj4+ICvCoMKgwqAg fQo+PiArfQo+PiArCj4+IMKgIC8qCj4+IMKgwqAgKiBBZGQgYW4gZXZlbnQgZmlsdGVyIHRvIGEg Z2l2ZW4gZXZlbnQuCj4+IMKgwqAgKi8KPj4gQEAgLTEwNzcsNiArMTE0OCw5IEBAIHN0YXRpYyB2 b2lkIGFybXY4cG11X3Jlc2V0KHZvaWQgKmluZm8pCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBwbWNy IHw9IEFSTVY4X1BNVV9QTUNSX0xQOwo+PiDCoCDCoMKgwqDCoMKgIGFybXY4cG11X3BtY3Jfd3Jp dGUocG1jcik7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoY3B1X3BtdS0+aGFzX2JyYW5jaF9zdGFjaykK Pj4gK8KgwqDCoMKgwqDCoMKgIGFybXY4cG11X2JyYW5jaF9yZXNldCgpOwo+PiDCoCB9Cj4+IMKg IMKgIHN0YXRpYyBpbnQgX19hcm12OF9wbXV2M19tYXBfZXZlbnRfaWQoc3RydWN0IGFybV9wbXUg KmFybXBtdSwKPj4gQEAgLTExMTQsNiArMTE4OCwyMCBAQCBzdGF0aWMgaW50IF9fYXJtdjhfcG11 djNfbWFwX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKPj4gwqAgwqDCoMKgwqDCoCBo d19ldmVudF9pZCA9IF9fYXJtdjhfcG11djNfbWFwX2V2ZW50X2lkKGFybXBtdSwgZXZlbnQpOwo+ PiDCoCArwqDCoMKgIGlmIChoYXNfYnJhbmNoX3N0YWNrKGV2ZW50KSkgewo+PiArwqDCoMKgwqDC oMKgwqAgaWYgKCFhcm12OHBtdV9icmFuY2hfYXR0cl92YWxpZChldmVudCkpCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU9QTk9UU1VQUDsKPj4gKwo+PiArwqDCoMKgwqDCoMKg wqAgLyoKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBJZiBhIHRhc2sgZ2V0cyBzY2hlZHVsZWQgb3V0 LCB0aGUgY3VycmVudCBicmFuY2ggcmVjb3Jkcwo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIGdldCBz YXZlZCBpbiB0aGUgdGFzaydzIGNvbnRleHQgZGF0YSwgd2hpY2ggY2FuIGJlIGxhdGVyCj4+ICvC oMKgwqDCoMKgwqDCoMKgICogdXNlZCB0byBmaWxsIGluIHRoZSByZWNvcmRzIHVwb24gYW4gZXZl bnQgb3ZlcmZsb3cuIExldCdzCj4+ICvCoMKgwqDCoMKgwqDCoMKgICogZW5hYmxlIFBFUkZfQVRU QUNIX1RBU0tfREFUQSBpbiAnZXZlbnQtPmF0dGFjaF9zdGF0ZScgZm9yCj4+ICvCoMKgwqDCoMKg wqDCoMKgICogYWxsIGJyYW5jaCBzdGFjayBzYW1wbGluZyBwZXJmIGV2ZW50cy4KPj4gK8KgwqDC oMKgwqDCoMKgwqAgKi8KPj4gK8KgwqDCoMKgwqDCoMKgIGV2ZW50LT5hdHRhY2hfc3RhdGUgfD0g UEVSRl9BVFRBQ0hfVEFTS19EQVRBOwo+PiArwqDCoMKgIH0KPj4gKwo+PiDCoMKgwqDCoMKgIC8q Cj4+IMKgwqDCoMKgwqDCoCAqIENIQUlOIGV2ZW50cyBvbmx5IHdvcmsgd2hlbiBwYWlyZWQgd2l0 aCBhbiBhZGphY2VudCBjb3VudGVyLCBhbmQgaXQKPj4gwqDCoMKgwqDCoMKgICogbmV2ZXIgbWFr ZXMgc2Vuc2UgZm9yIGEgdXNlciB0byBvcGVuIG9uZSBpbiBpc29sYXRpb24sIGFzIHRoZXknbGwg YmUKPj4gQEAgLTEyMjksNiArMTMxNyw0MSBAQCBzdGF0aWMgdm9pZCBfX2FybXY4cG11X3Byb2Jl X3BtdSh2b2lkICppbmZvKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgY3B1X3BtdS0+cmVnX3BtbWly ID0gcmVhZF9wbW1pcigpOwo+PiDCoMKgwqDCoMKgIGVsc2UKPj4gwqDCoMKgwqDCoMKgwqDCoMKg IGNwdV9wbXUtPnJlZ19wbW1pciA9IDA7Cj4+ICsKPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAg KiBCUkJFIGlzIGJlaW5nIHByb2JlZCBvbiBhIHNpbmdsZSBjcHUgZm9yIGEKPj4gK8KgwqDCoMKg ICogZ2l2ZW4gUE1VLiBUaGUgcmVtYWluaW5nIGNwdXMsIGFyZSBhc3N1bWVkCj4+ICvCoMKgwqDC oCAqIHRvIGhhdmUgdGhlIGV4YWN0IHNhbWUgQlJCRSBpbXBsZW1lbnRhdGlvbi4KPj4gK8KgwqDC oMKgICovCj4+ICvCoMKgwqAgYXJtdjhwbXVfYnJhbmNoX3Byb2JlKGNwdV9wbXUpOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgaW50IGJyYW5jaF9yZWNvcmRzX2FsbG9jKHN0cnVjdCBhcm1fcG11ICph cm1wbXUpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGJyYW5jaF9yZWNvcmRzIF9fcGVyY3B1ICpy ZWNvcmRzOwo+PiArwqDCoMKgIGludCBjcHU7Cj4+ICsKPj4gK8KgwqDCoCByZWNvcmRzID0gYWxs b2NfcGVyY3B1X2dmcChzdHJ1Y3QgYnJhbmNoX3JlY29yZHMsIEdGUF9LRVJORUwpOwo+PiArwqDC oMKgIGlmICghcmVjb3JkcykKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+PiAr Cj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKgICogcGVyY3B1IG1lbW9yeSBhbGxvY2F0ZWQgZm9y ICdyZWNvcmRzJyBnZXRzIGNvbXBsZXRlbHkgY29uc3VtZWQKPj4gK8KgwqDCoMKgICogaGVyZSwg YW5kIG5ldmVyIHJlcXVpcmVkIHRvIGJlIGZyZWVkIHVwIGxhdGVyLiBTbyBwZXJtYW5lbnRseQo+ PiArwqDCoMKgwqAgKiBsb3NpbmcgYWNjZXNzIHRvIHRoaXMgYW5jaG9yIGkuZSAncmVjb3Jkcycg aXMgYWNjZXB0YWJsZS4KPj4gK8KgwqDCoMKgICoKPj4gK8KgwqDCoMKgICogT3RoZXJ3aXNlIHRo aXMgYWxsb2NhdGlvbiBoYW5kbGUgd291bGQgaGF2ZSB0byBiZSBzYXZlZCB1cCBmb3IKPj4gK8Kg wqDCoMKgICogZnJlZV9wZXJjcHUoKSByZWxlYXNlIGxhdGVyIGlmIHJlcXVpcmVkLgo+PiArwqDC oMKgwqAgKi8KPj4gK8KgwqDCoCBmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Cj4+ICvCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzX2NwdTsKPj4gK8KgwqDCoMKg wqDCoMKgIHN0cnVjdCBicmFuY2hfcmVjb3JkcyAqcmVjb3Jkc19jcHU7Cj4+ICsKPj4gK8KgwqDC oMKgwqDCoMKgIGV2ZW50c19jcHUgPSBwZXJfY3B1X3B0cihhcm1wbXUtPmh3X2V2ZW50cywgY3B1 KTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJlY29yZHNfY3B1ID0gcGVyX2NwdV9wdHIocmVjb3Jkcywg Y3B1KTsKPj4gK8KgwqDCoMKgwqDCoMKgIGV2ZW50c19jcHUtPmJyYW5jaGVzID0gcmVjb3Jkc19j cHU7Cj4+ICvCoMKgwqAgfQo+PiArwqDCoMKgIHJldHVybiAwOwo+PiDCoCB9Cj4+IMKgIMKgIHN0 YXRpYyBpbnQgYXJtdjhwbXVfcHJvYmVfcG11KHN0cnVjdCBhcm1fcG11ICpjcHVfcG11KQo+PiBA QCAtMTI0NSw3ICsxMzY4LDIxIEBAIHN0YXRpYyBpbnQgYXJtdjhwbXVfcHJvYmVfcG11KHN0cnVj dCBhcm1fcG11ICpjcHVfcG11KQo+PiDCoMKgwqDCoMKgIGlmIChyZXQpCj4+IMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gcmV0Owo+PiDCoCAtwqDCoMKgIHJldHVybiBwcm9iZS5wcmVzZW50ID8g MCA6IC1FTk9ERVY7Cj4+ICvCoMKgwqAgaWYgKCFwcm9iZS5wcmVzZW50KQo+PiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuIC1FTk9ERVY7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoY3B1X3BtdS0+aGFzX2Jy YW5jaF9zdGFjaykgewo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gYXJtdjhwbXVfdGFza19jdHhf Y2FjaGVfYWxsb2MoY3B1X3BtdSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXQgPSBicmFuY2hfcmVjb3Jkc19hbGxvYyhjcHVfcG11KTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlm IChyZXQpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXJtdjhwbXVfdGFza19jdHhfY2Fj aGVfZnJlZShjcHVfcG11KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsK Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoCB9Cj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ IMKgIH0KPj4gwqAgwqAgc3RhdGljIHZvaWQgYXJtdjhwbXVfZGlzYWJsZV91c2VyX2FjY2Vzc19p cGkodm9pZCAqdW51c2VkKQo+PiBAQCAtMTMwNCw2ICsxNDQxLDggQEAgc3RhdGljIGludCBhcm12 OF9wbXVfaW5pdChzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSwgY2hhciAqbmFtZSwKPj4gwqDCoMKg wqDCoCBjcHVfcG11LT5zZXRfZXZlbnRfZmlsdGVywqDCoMKgID0gYXJtdjhwbXVfc2V0X2V2ZW50 X2ZpbHRlcjsKPj4gwqAgwqDCoMKgwqDCoCBjcHVfcG11LT5wbXUuZXZlbnRfaWR4wqDCoMKgwqDC oMKgwqAgPSBhcm12OHBtdV91c2VyX2V2ZW50X2lkeDsKPj4gK8KgwqDCoCBjcHVfcG11LT5zY2hl ZF90YXNrwqDCoMKgwqDCoMKgwqAgPSBhcm12OHBtdV9zY2hlZF90YXNrOwo+PiArwqDCoMKgIGNw dV9wbXUtPmJyYW5jaF9yZXNldMKgwqDCoMKgwqDCoMKgID0gYXJtdjhwbXVfYnJhbmNoX3Jlc2V0 Owo+PiDCoCDCoMKgwqDCoMKgIGNwdV9wbXUtPm5hbWXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0g bmFtZTsKPj4gwqDCoMKgwqDCoCBjcHVfcG11LT5tYXBfZXZlbnTCoMKgwqDCoMKgwqDCoCA9IG1h cF9ldmVudDsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVyZi9hcm1fcG11djNfYnJhbmNoLmgg Yi9kcml2ZXJzL3BlcmYvYXJtX3BtdXYzX2JyYW5jaC5oCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uNjA5ZTRkNGNjYWM2Cj4+IC0tLSAvZGV2L251bGwKPj4g KysrIGIvZHJpdmVycy9wZXJmL2FybV9wbXV2M19icmFuY2guaAo+PiBAQCAtMCwwICsxLDUwIEBA Cj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCj4+ICsvKgo+ PiArICogQnJhbmNoIFJlY29yZCBCdWZmZXIgRXh0ZW5zaW9uIEhlbHBlcnMuCj4+ICsgKgo+PiAr ICogQ29weXJpZ2h0IChDKSAyMDIyLTIwMjMgQVJNIExpbWl0ZWQKPj4gKyAqCj4+ICsgKiBBdXRo b3I6IEFuc2h1bWFuIEtoYW5kdWFsIDxhbnNodW1hbi5raGFuZHVhbEBhcm0uY29tPgo+PiArICov Cj4+ICsjaW5jbHVkZSA8bGludXgvcGVyZi9hcm1fcG11Lmg+Cj4+ICsKPj4gK3N0YXRpYyBpbmxp bmUgdm9pZCBhcm12OHBtdV9icmFuY2hfcmVzZXQodm9pZCkKPj4gK3sKPj4gK30KPj4gKwo+PiAr c3RhdGljIGlubGluZSB2b2lkIGFybXY4cG11X2JyYW5jaF9wcm9iZShzdHJ1Y3QgYXJtX3BtdSAq YXJtX3BtdSkKPj4gK3sKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSBib29sIGFybXY4cG11 X2JyYW5jaF9hdHRyX3ZhbGlkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPj4gK3sKPj4gK8Kg wqDCoCBXQVJOX09OX09OQ0UoIWhhc19icmFuY2hfc3RhY2soZXZlbnQpKTsKPj4gK8KgwqDCoCBy ZXR1cm4gZmFsc2U7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBhcm12OHBtdV9i cmFuY2hfZW5hYmxlKHN0cnVjdCBhcm1fcG11ICphcm1fcG11KQo+PiArewo+PiArfQo+PiArCj4+ ICtzdGF0aWMgaW5saW5lIHZvaWQgYXJtdjhwbXVfYnJhbmNoX2Rpc2FibGUodm9pZCkKPj4gK3sK Pj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSB2b2lkIGFybXY4cG11X2JyYW5jaF9yZWFkKHN0 cnVjdCBwbXVfaHdfZXZlbnRzICpjcHVjLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+PiArewo+PiArwqDCoMKgIFdB Uk5fT05fT05DRSghaGFzX2JyYW5jaF9zdGFjayhldmVudCkpOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgaW5saW5lIHZvaWQgYXJtdjhwbXVfYnJhbmNoX3NhdmUoc3RydWN0IGFybV9wbXUgKmFybV9w bXUsIHZvaWQgKmN0eCkKPj4gK3sKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSBpbnQgYXJt djhwbXVfdGFza19jdHhfY2FjaGVfYWxsb2Moc3RydWN0IGFybV9wbXUgKmFybV9wbXUpCj4+ICt7 Cj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBh cm12OHBtdV90YXNrX2N0eF9jYWNoZV9mcmVlKHN0cnVjdCBhcm1fcG11ICphcm1fcG11KQo+PiAr ewo+PiArfQo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmL2FybV9wbXUuaCBiL2lu Y2x1ZGUvbGludXgvcGVyZi9hcm1fcG11LmgKPj4gaW5kZXggYjNiMzRmNjY3MGNmLi44Y2ZjYzcz NWMwZjcgMTAwNjQ0Cj4+IC0tLSBhL2luY2x1ZGUvbGludXgvcGVyZi9hcm1fcG11LmgKPj4gKysr IGIvaW5jbHVkZS9saW51eC9wZXJmL2FybV9wbXUuaAo+PiBAQCAtNDYsNiArNDYsMTggQEAgc3Rh dGljX2Fzc2VydCgoUEVSRl9FVkVOVF9GTEFHX0FSQ0ggJiBBUk1QTVVfRVZUXzYzQklUKSA9PSBB Uk1QTVVfRVZUXzYzQklUKTsKPj4gwqDCoMKgwqDCoCB9LMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPj4gwqAgfQo+PiDCoCAr LyoKPj4gKyAqIE1heGltdW0gYnJhbmNoIHJlY29yZCBlbnRyaWVzIHdoaWNoIGNvdWxkIGJlIHBy b2Nlc3NlZAo+PiArICogZm9yIGNvcmUgcGVyZiBicmFuY2ggc3RhY2sgc2FtcGxpbmcgc3VwcG9y dCwgcmVnYXJkbGVzcwo+PiArICogb2YgdGhlIGhhcmR3YXJlIHN1cHBvcnQgYXZhaWxhYmxlIG9u IGEgZ2l2ZW4gQVJNIFBNVS4KPj4gKyAqLwo+PiArI2RlZmluZSBNQVhfQlJBTkNIX1JFQ09SRFMg NjQKPj4gKwo+PiArc3RydWN0IGJyYW5jaF9yZWNvcmRzIHsKPj4gK8KgwqDCoCBzdHJ1Y3QgcGVy Zl9icmFuY2hfc3RhY2vCoMKgwqAgYnJhbmNoX3N0YWNrOwo+PiArwqDCoMKgIHN0cnVjdCBwZXJm X2JyYW5jaF9lbnRyecKgwqDCoCBicmFuY2hfZW50cmllc1tNQVhfQlJBTkNIX1JFQ09SRFNdOwo+ PiArfTsKPj4gKwo+PiDCoCAvKiBUaGUgZXZlbnRzIGZvciBhIGdpdmVuIFBNVSByZWdpc3RlciBz ZXQuICovCj4+IMKgIHN0cnVjdCBwbXVfaHdfZXZlbnRzIHsKPj4gwqDCoMKgwqDCoCAvKgo+PiBA QCAtNjYsNiArNzgsMTcgQEAgc3RydWN0IHBtdV9od19ldmVudHMgewo+PiDCoMKgwqDCoMKgIHN0 cnVjdCBhcm1fcG11wqDCoMKgwqDCoMKgwqAgKnBlcmNwdV9wbXU7Cj4+IMKgIMKgwqDCoMKgwqAg aW50IGlycTsKPj4gKwo+PiArwqDCoMKgIHN0cnVjdCBicmFuY2hfcmVjb3Jkc8KgwqDCoCAqYnJh bmNoZXM7Cj4+ICsKPj4gK8KgwqDCoCAvKiBBY3RpdmUgY29udGV4dCBmb3IgdGFzayBldmVudHMg Ki8KPj4gK8KgwqDCoCB2b2lkwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqYnJiZV9jb250ZXh0Owo+ PiArCj4+ICvCoMKgwqAgLyogQWN0aXZlIGV2ZW50cyByZXF1ZXN0aW5nIGJyYW5jaCByZWNvcmRz ICovCj4gCj4gUGxlYXNlIHNlZSBteSBjb21tZW50IGFib3ZlLgoKVGhpcyBpcyB0cnVlIC0gYnJi ZV91c2VycyB0cmFja3MgbnVtYmVyIG9mIGFjdGl2ZSBwZXJmIGV2ZW50cyByZXF1ZXN0aW5nCmJy YW5jaCByZWNvcmRzLCBpcnJlc3BlY3RpdmUgb2Ygd2hldGhlciB0aGVpciBicmFuY2hfc2FtcGxl X3R5cGUgbWF0Y2hlcwp3aXRoIGVhY2ggb3RoZXIgb3Igbm90LgoKPiAKPj4gK8KgwqDCoCB1bnNp Z25lZCBpbnTCoMKgwqDCoMKgwqDCoCBicmJlX3VzZXJzOwo+PiArCj4+ICvCoMKgwqAgLyogQWN0 aXZlIGJyYW5jaCBzYW1wbGUgdHlwZSBmaWx0ZXJzICovCj4+ICvCoMKgwqAgdW5zaWduZWQgbG9u Z8KgwqDCoMKgwqDCoMKgIGJyYmVfc2FtcGxlX3R5cGU7Cj4+IMKgIH07Cj4+IMKgIMKgIGVudW0g YXJtcG11X2F0dHJfZ3JvdXBzIHsKPj4gQEAgLTk2LDggKzExOSwxMiBAQCBzdHJ1Y3QgYXJtX3Bt dSB7Cj4+IMKgwqDCoMKgwqAgdm9pZMKgwqDCoMKgwqDCoMKgICgqc3RvcCkoc3RydWN0IGFybV9w bXUgKik7Cj4+IMKgwqDCoMKgwqAgdm9pZMKgwqDCoMKgwqDCoMKgICgqcmVzZXQpKHZvaWQgKik7 Cj4+IMKgwqDCoMKgwqAgaW50wqDCoMKgwqDCoMKgwqAgKCptYXBfZXZlbnQpKHN0cnVjdCBwZXJm X2V2ZW50ICpldmVudCk7Cj4+ICvCoMKgwqAgdm9pZMKgwqDCoMKgwqDCoMKgICgqc2NoZWRfdGFz aykoc3RydWN0IHBlcmZfZXZlbnRfcG11X2NvbnRleHQgKnBtdV9jdHgsIGJvb2wgc2NoZWRfaW4p Owo+PiArwqDCoMKgIHZvaWTCoMKgwqDCoMKgwqDCoCAoKmJyYW5jaF9yZXNldCkodm9pZCk7Cj4+ IMKgwqDCoMKgwqAgaW50wqDCoMKgwqDCoMKgwqAgbnVtX2V2ZW50czsKPj4gLcKgwqDCoCBib29s wqDCoMKgwqDCoMKgwqAgc2VjdXJlX2FjY2VzczsgLyogMzItYml0IEFSTSBvbmx5ICovCj4+ICvC oMKgwqAgdW5zaWduZWQgaW50wqDCoMKgIHNlY3VyZV9hY2Nlc3PCoMKgwqAgOiAxLCAvKiAzMi1i aXQgQVJNIG9ubHkgKi8KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaGFzX2JyYW5jaF9zdGFj azogMSwgLyogNjQtYml0IEFSTSBvbmx5ICovCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl c2VydmVkwqDCoMKgIDogMzA7Cj4+IMKgICNkZWZpbmUgQVJNVjhfUE1VVjNfTUFYX0NPTU1PTl9F VkVOVFPCoMKgwqDCoMKgwqDCoCAweDQwCj4+IMKgwqDCoMKgwqAgREVDTEFSRV9CSVRNQVAocG1j ZWlkX2JpdG1hcCwgQVJNVjhfUE1VVjNfTUFYX0NPTU1PTl9FVkVOVFMpOwo+PiDCoCAjZGVmaW5l IEFSTVY4X1BNVVYzX0VYVF9DT01NT05fRVZFTlRfQkFTRcKgwqDCoCAweDQwMDAKPj4gZGlmZiAt LWdpdCBhL2luY2x1ZGUvbGludXgvcGVyZi9hcm1fcG11djMuaCBiL2luY2x1ZGUvbGludXgvcGVy Zi9hcm1fcG11djMuaAo+PiBpbmRleCA0NjM3N2UxMzRkNjcuLmMzZTdkMmNmYjczNyAxMDA2NDQK Pj4gLS0tIGEvaW5jbHVkZS9saW51eC9wZXJmL2FybV9wbXV2My5oCj4+ICsrKyBiL2luY2x1ZGUv bGludXgvcGVyZi9hcm1fcG11djMuaAo+PiBAQCAtMzA4LDUgKzMwOCw0IEBACj4+IMKgwqDCoMKg wqDCoMKgwqDCoCBkZWZhdWx0OiBXQVJOKDEsICJJbnZhbGlkIFBNRVYqIGluZGV4XG4iKTvCoMKg wqAgXAo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgXAo+PiDCoMKgwqDCoMKgIH0gd2hpbGUgKDApCj4+IC0KPiAKPiBu aXQ6IFVucmVsYXRlZCBjaGFuZ2UgPwoKUmlnaHQsIHdpbGwgZml4IGFuZCBmb2xkLgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5l bCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6 Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=