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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 10E26C433EF for ; Tue, 19 Oct 2021 08:37:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E1AFB61391 for ; Tue, 19 Oct 2021 08:37:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234767AbhJSIjy (ORCPT ); Tue, 19 Oct 2021 04:39:54 -0400 Received: from foss.arm.com ([217.140.110.172]:46066 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234755AbhJSIjv (ORCPT ); Tue, 19 Oct 2021 04:39:51 -0400 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 1795DD6E; Tue, 19 Oct 2021 01:37:39 -0700 (PDT) Received: from [10.57.25.70] (unknown [10.57.25.70]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 89CD33F73D; Tue, 19 Oct 2021 01:37:37 -0700 (PDT) Subject: Re: [PATCH v5 10/15] coresight: trbe: Workaround TRBE errata overwrite in FILL mode To: Anshuman Khandual , Mathieu Poirier Cc: will@kernel.org, catalin.marinas@arm.com, mike.leach@linaro.org, leo.yan@linaro.org, maz@kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org References: <20211014223125.2605031-1-suzuki.poulose@arm.com> <20211014223125.2605031-11-suzuki.poulose@arm.com> <20211018155154.GB3163131@p14s> <1dd61f9a-cd55-c9a5-8573-1b6a0327247b@arm.com> From: Suzuki K Poulose Message-ID: <64babcc5-f7af-1b0d-e0a0-cd00994d9d29@arm.com> Date: Tue, 19 Oct 2021 09:37:36 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: <1dd61f9a-cd55-c9a5-8573-1b6a0327247b@arm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 19/10/2021 05:36, Anshuman Khandual wrote: > > > On 10/19/21 2:45 AM, Suzuki K Poulose wrote: >> On 18/10/2021 16:51, Mathieu Poirier wrote: >>> On Thu, Oct 14, 2021 at 11:31:20PM +0100, Suzuki K Poulose wrote: >>>> ARM Neoverse-N2 (#2139208) and Cortex-A710(##2119858) suffers from >>>> an erratum, which when triggered, might cause the TRBE to overwrite >>>> the trace data already collected in FILL mode, in the event of a WRAP. >>>> i.e, the TRBE doesn't stop writing the data, instead wraps to the base >>>> and could write upto 3 cache line size worth trace. Thus, this could >>>> corrupt the trace at the "BASE" pointer. >>>> >>>> The workaround is to program the write pointer 256bytes from the >>>> base, such that if the erratum is triggered, it doesn't overwrite >>>> the trace data that was captured. This skipped region could be >>>> padded with ignore packets at the end of the session, so that >>>> the decoder sees a continuous buffer with some padding at the >>>> beginning. The trace data written at the base is considered >>>> lost as the limit could have been in the middle of the perf >>>> ring buffer, and jumping to the "base" is not acceptable. >>>> We set the flags already to indicate that some amount of trace >>>> was lost during the FILL event IRQ. So this is fine. >>>> >>>> One important change with the work around is, we program the >>>> TRBBASER_EL1 to current page where we are allowed to write. >>>> Otherwise, it could overwrite a region that may be consumed >>>> by the perf. Towards this, we always make sure that the >>>> "handle->head" and thus the trbe_write is PAGE_SIZE aligned, >>>> so that we can set the BASE to the PAGE base and move the >>>> TRBPTR to the 256bytes offset. >>>> >>>> Cc: Mike Leach >>>> Cc: Mathieu Poirier >>>> Cc: Anshuman Khandual >>>> Cc: Leo Yan >>>> Reviewed-by: Mathieu Poirier >>>> Signed-off-by: Suzuki K Poulose >>>> --- >>>> Changes since v2: >>>>   - Updated the ASCII art to include better description of >>>>     all the steps in the work around >>>> Change since v1: >>>>   - Updated comment with ASCII art >>>>   - Add _BYTES suffix for the space to skip for the work around. >>>> --- >>>>   drivers/hwtracing/coresight/coresight-trbe.c | 169 +++++++++++++++++-- >>>>   1 file changed, 158 insertions(+), 11 deletions(-) >>>> >>>> diff --git a/drivers/hwtracing/coresight/coresight-trbe.c b/drivers/hwtracing/coresight/coresight-trbe.c >>>> index 314e5e7374c7..b56b166b2dec 100644 >>>> --- a/drivers/hwtracing/coresight/coresight-trbe.c >>>> +++ b/drivers/hwtracing/coresight/coresight-trbe.c >>>> @@ -16,6 +16,7 @@ >>>>   #define pr_fmt(fmt) DRVNAME ": " fmt >>>>     #include >>>> +#include >>> >>> Here too I get a checkpatch warning... >>> >> >> That is a false alarm. I guess that warns for including >> linux/cpufeature.h? It is a bit odd, we include this >> for the arm64 cpucaps, not the generic linux feature > > It is a bit odd, I saw that too. > >> checks. (They are used for "loading modules" based >> on "features" which are more like ELF HWCAPs). > > Should be renamed as > or something similar instead to differentiate it from the generic > as they are not related. Also, probably this > warning could be avoided. It is not that simple. asm/cpufeature.h on arm64 provides : * arch backend for linux/cpufeature.h * CPU feature sanity check infrastructure * CPU capability infrastructure ( features & errata ) So ideally it should be split into 3 for better cleanup and is something that could be pursued outside this series. Suzuki 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D78DCC433EF for ; Tue, 19 Oct 2021 08:39:16 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id A4EB26134F for ; Tue, 19 Oct 2021 08:39:16 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org A4EB26134F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org 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:MIME-Version:Date:Message-ID:From: References:Cc:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=1Wh4jELqmxNmhZl/TcG1XJre7comH4enKzGOIuHOceM=; b=2Ayw8UdR4LdBqETju5Mp1qt87a FXjFocXNc9Qqk7E/XHRRdqbLHU5jdDqiRO9XSULmd0OK1gE/2wCaedxp81tP/VFiABOVBd2lVofIE zHkQ1dWz2ppEHhlBYYg04ATT3dErWaN746eNIix7bkzmZ48l5gluidh9eWhw3oFoz8bkKcXHH6/uI LsUZK9Ng5nN2t7+VOYn+6kbTZnv/5t30F0CWoGdhm/HKwyXd1/qq0IAa8YAoTN5HoZHSztAc8B6t2 /H/zR83Gfb2a+Ls62spvCMPoUZ6+/VSEvoys7QSF0kw+70u1CC+ctR5eg1bm9WHCdkB7Nb2Fupgqx aL3UMPJw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mckd5-000XCZ-3R; Tue, 19 Oct 2021 08:37:51 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mckd0-000XC4-N3 for linux-arm-kernel@lists.infradead.org; Tue, 19 Oct 2021 08:37:48 +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 1795DD6E; Tue, 19 Oct 2021 01:37:39 -0700 (PDT) Received: from [10.57.25.70] (unknown [10.57.25.70]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 89CD33F73D; Tue, 19 Oct 2021 01:37:37 -0700 (PDT) Subject: Re: [PATCH v5 10/15] coresight: trbe: Workaround TRBE errata overwrite in FILL mode To: Anshuman Khandual , Mathieu Poirier Cc: will@kernel.org, catalin.marinas@arm.com, mike.leach@linaro.org, leo.yan@linaro.org, maz@kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org References: <20211014223125.2605031-1-suzuki.poulose@arm.com> <20211014223125.2605031-11-suzuki.poulose@arm.com> <20211018155154.GB3163131@p14s> <1dd61f9a-cd55-c9a5-8573-1b6a0327247b@arm.com> From: Suzuki K Poulose Message-ID: <64babcc5-f7af-1b0d-e0a0-cd00994d9d29@arm.com> Date: Tue, 19 Oct 2021 09:37:36 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: <1dd61f9a-cd55-c9a5-8573-1b6a0327247b@arm.com> Content-Language: en-GB X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211019_013746_868421_9151DA33 X-CRM114-Status: GOOD ( 21.78 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMTkvMTAvMjAyMSAwNTozNiwgQW5zaHVtYW4gS2hhbmR1YWwgd3JvdGU6Cj4gCj4gCj4gT24g MTAvMTkvMjEgMjo0NSBBTSwgU3V6dWtpIEsgUG91bG9zZSB3cm90ZToKPj4gT24gMTgvMTAvMjAy MSAxNjo1MSwgTWF0aGlldSBQb2lyaWVyIHdyb3RlOgo+Pj4gT24gVGh1LCBPY3QgMTQsIDIwMjEg YXQgMTE6MzE6MjBQTSArMDEwMCwgU3V6dWtpIEsgUG91bG9zZSB3cm90ZToKPj4+PiBBUk0gTmVv dmVyc2UtTjIgKCMyMTM5MjA4KSBhbmQgQ29ydGV4LUE3MTAoIyMyMTE5ODU4KSBzdWZmZXJzIGZy b20KPj4+PiBhbiBlcnJhdHVtLCB3aGljaCB3aGVuIHRyaWdnZXJlZCwgbWlnaHQgY2F1c2UgdGhl IFRSQkUgdG8gb3ZlcndyaXRlCj4+Pj4gdGhlIHRyYWNlIGRhdGEgYWxyZWFkeSBjb2xsZWN0ZWQg aW4gRklMTCBtb2RlLCBpbiB0aGUgZXZlbnQgb2YgYSBXUkFQLgo+Pj4+IGkuZSwgdGhlIFRSQkUg ZG9lc24ndCBzdG9wIHdyaXRpbmcgdGhlIGRhdGEsIGluc3RlYWQgd3JhcHMgdG8gdGhlIGJhc2UK Pj4+PiBhbmQgY291bGQgd3JpdGUgdXB0byAzIGNhY2hlIGxpbmUgc2l6ZSB3b3J0aCB0cmFjZS4g VGh1cywgdGhpcyBjb3VsZAo+Pj4+IGNvcnJ1cHQgdGhlIHRyYWNlIGF0IHRoZSAiQkFTRSIgcG9p bnRlci4KPj4+Pgo+Pj4+IFRoZSB3b3JrYXJvdW5kIGlzIHRvIHByb2dyYW0gdGhlIHdyaXRlIHBv aW50ZXIgMjU2Ynl0ZXMgZnJvbSB0aGUKPj4+PiBiYXNlLCBzdWNoIHRoYXQgaWYgdGhlIGVycmF0 dW0gaXMgdHJpZ2dlcmVkLCBpdCBkb2Vzbid0IG92ZXJ3cml0ZQo+Pj4+IHRoZSB0cmFjZSBkYXRh IHRoYXQgd2FzIGNhcHR1cmVkLiBUaGlzIHNraXBwZWQgcmVnaW9uIGNvdWxkIGJlCj4+Pj4gcGFk ZGVkIHdpdGggaWdub3JlIHBhY2tldHMgYXQgdGhlIGVuZCBvZiB0aGUgc2Vzc2lvbiwgc28gdGhh dAo+Pj4+IHRoZSBkZWNvZGVyIHNlZXMgYSBjb250aW51b3VzIGJ1ZmZlciB3aXRoIHNvbWUgcGFk ZGluZyBhdCB0aGUKPj4+PiBiZWdpbm5pbmcuIFRoZSB0cmFjZSBkYXRhIHdyaXR0ZW4gYXQgdGhl IGJhc2UgaXMgY29uc2lkZXJlZAo+Pj4+IGxvc3QgYXMgdGhlIGxpbWl0IGNvdWxkIGhhdmUgYmVl biBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwZXJmCj4+Pj4gcmluZyBidWZmZXIsIGFuZCBqdW1waW5n IHRvIHRoZSAiYmFzZSIgaXMgbm90IGFjY2VwdGFibGUuCj4+Pj4gV2Ugc2V0IHRoZSBmbGFncyBh bHJlYWR5IHRvIGluZGljYXRlIHRoYXQgc29tZSBhbW91bnQgb2YgdHJhY2UKPj4+PiB3YXMgbG9z dCBkdXJpbmcgdGhlIEZJTEwgZXZlbnQgSVJRLiBTbyB0aGlzIGlzIGZpbmUuCj4+Pj4KPj4+PiBP bmUgaW1wb3J0YW50IGNoYW5nZSB3aXRoIHRoZSB3b3JrIGFyb3VuZCBpcywgd2UgcHJvZ3JhbSB0 aGUKPj4+PiBUUkJCQVNFUl9FTDEgdG8gY3VycmVudCBwYWdlIHdoZXJlIHdlIGFyZSBhbGxvd2Vk IHRvIHdyaXRlLgo+Pj4+IE90aGVyd2lzZSwgaXQgY291bGQgb3ZlcndyaXRlIGEgcmVnaW9uIHRo YXQgbWF5IGJlIGNvbnN1bWVkCj4+Pj4gYnkgdGhlIHBlcmYuIFRvd2FyZHMgdGhpcywgd2UgYWx3 YXlzIG1ha2Ugc3VyZSB0aGF0IHRoZQo+Pj4+ICJoYW5kbGUtPmhlYWQiIGFuZCB0aHVzIHRoZSB0 cmJlX3dyaXRlIGlzIFBBR0VfU0laRSBhbGlnbmVkLAo+Pj4+IHNvIHRoYXQgd2UgY2FuIHNldCB0 aGUgQkFTRSB0byB0aGUgUEFHRSBiYXNlIGFuZCBtb3ZlIHRoZQo+Pj4+IFRSQlBUUiB0byB0aGUg MjU2Ynl0ZXMgb2Zmc2V0Lgo+Pj4+Cj4+Pj4gQ2M6IE1pa2UgTGVhY2ggPG1pa2UubGVhY2hAbGlu YXJvLm9yZz4KPj4+PiBDYzogTWF0aGlldSBQb2lyaWVyIDxtYXRoaWV1LnBvaXJpZXJAbGluYXJv Lm9yZz4KPj4+PiBDYzogQW5zaHVtYW4gS2hhbmR1YWwgPGFuc2h1bWFuLmtoYW5kdWFsQGFybS5j b20+Cj4+Pj4gQ2M6IExlbyBZYW4gPGxlby55YW5AbGluYXJvLm9yZz4KPj4+PiBSZXZpZXdlZC1i eTogTWF0aGlldSBQb2lyaWVyIDxtYXRoaWV1LnBvaXJpZXJAbGluYXJvLm9yZz4KPj4+PiBTaWdu ZWQtb2ZmLWJ5OiBTdXp1a2kgSyBQb3Vsb3NlIDxzdXp1a2kucG91bG9zZUBhcm0uY29tPgo+Pj4+ IC0tLQo+Pj4+IENoYW5nZXMgc2luY2UgdjI6Cj4+Pj4gIMKgIC0gVXBkYXRlZCB0aGUgQVNDSUkg YXJ0IHRvIGluY2x1ZGUgYmV0dGVyIGRlc2NyaXB0aW9uIG9mCj4+Pj4gIMKgwqDCoCBhbGwgdGhl IHN0ZXBzIGluIHRoZSB3b3JrIGFyb3VuZAo+Pj4+IENoYW5nZSBzaW5jZSB2MToKPj4+PiAgwqAg LSBVcGRhdGVkIGNvbW1lbnQgd2l0aCBBU0NJSSBhcnQKPj4+PiAgwqAgLSBBZGQgX0JZVEVTIHN1 ZmZpeCBmb3IgdGhlIHNwYWNlIHRvIHNraXAgZm9yIHRoZSB3b3JrIGFyb3VuZC4KPj4+PiAtLS0K Pj4+PiAgwqAgZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC10cmJlLmMgfCAx NjkgKysrKysrKysrKysrKysrKystLQo+Pj4+ICDCoCAxIGZpbGUgY2hhbmdlZCwgMTU4IGluc2Vy dGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQo+Pj4+Cj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv aHd0cmFjaW5nL2NvcmVzaWdodC9jb3Jlc2lnaHQtdHJiZS5jIGIvZHJpdmVycy9od3RyYWNpbmcv Y29yZXNpZ2h0L2NvcmVzaWdodC10cmJlLmMKPj4+PiBpbmRleCAzMTRlNWU3Mzc0YzcuLmI1NmIx NjZiMmRlYyAxMDA2NDQKPj4+PiAtLS0gYS9kcml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvY29y ZXNpZ2h0LXRyYmUuYwo+Pj4+ICsrKyBiL2RyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdodC9jb3Jl c2lnaHQtdHJiZS5jCj4+Pj4gQEAgLTE2LDYgKzE2LDcgQEAKPj4+PiAgwqAgI2RlZmluZSBwcl9m bXQoZm10KSBEUlZOQU1FICI6ICIgZm10Cj4+Pj4gIMKgIMKgICNpbmNsdWRlIDxhc20vYmFycmll ci5oPgo+Pj4+ICsjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KPj4+Cj4+PiBIZXJlIHRvbyBJ IGdldCBhIGNoZWNrcGF0Y2ggd2FybmluZy4uLgo+Pj4KPj4KPj4gVGhhdCBpcyBhIGZhbHNlIGFs YXJtLiBJIGd1ZXNzIHRoYXQgd2FybnMgZm9yIGluY2x1ZGluZwo+PiBsaW51eC9jcHVmZWF0dXJl Lmg/IEl0IGlzIGEgYml0IG9kZCwgd2UgaW5jbHVkZSB0aGlzCj4+IGZvciB0aGUgYXJtNjQgY3B1 Y2Fwcywgbm90IHRoZSBnZW5lcmljIGxpbnV4IGZlYXR1cmUKPiAKPiBJdCBpcyBhIGJpdCBvZGQs IEkgc2F3IHRoYXQgdG9vLgo+IAo+PiBjaGVja3MuIChUaGV5IGFyZSB1c2VkIGZvciAibG9hZGlu ZyBtb2R1bGVzIiBiYXNlZAo+PiBvbiAiZmVhdHVyZXMiIHdoaWNoIGFyZSBtb3JlIGxpa2UgRUxG IEhXQ0FQcykuCj4gCj4gU2hvdWxkIDxhc20vY3B1ZmVhdHVyZS5oPiBiZSByZW5hbWVkIGFzIDxh c20vYXJtNjRfY3B1ZmVhdHVyZS5oPgo+IG9yIHNvbWV0aGluZyBzaW1pbGFyIGluc3RlYWQgdG8g ZGlmZmVyZW50aWF0ZSBpdCBmcm9tIHRoZSBnZW5lcmljCj4gPGxpbnV4L2NwdWZlYXR1cmUuaD4g YXMgdGhleSBhcmUgbm90IHJlbGF0ZWQuIEFsc28sIHByb2JhYmx5IHRoaXMKPiB3YXJuaW5nIGNv dWxkIGJlIGF2b2lkZWQuCgpJdCBpcyBub3QgdGhhdCBzaW1wbGUuIGFzbS9jcHVmZWF0dXJlLmgg b24gYXJtNjQgcHJvdmlkZXMgOgoKICAqIGFyY2ggYmFja2VuZCBmb3IgbGludXgvY3B1ZmVhdHVy ZS5oCiAgKiBDUFUgZmVhdHVyZSBzYW5pdHkgY2hlY2sgaW5mcmFzdHJ1Y3R1cmUKICAqIENQVSBj YXBhYmlsaXR5IGluZnJhc3RydWN0dXJlICggZmVhdHVyZXMgJiBlcnJhdGEgKQoKU28gaWRlYWxs eSBpdCBzaG91bGQgYmUgc3BsaXQgaW50byAzIGZvciBiZXR0ZXIgY2xlYW51cCBhbmQKaXMgc29t ZXRoaW5nIHRoYXQgY291bGQgYmUgcHVyc3VlZCBvdXRzaWRlIHRoaXMgc2VyaWVzLgoKU3V6dWtp CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1h cm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5v cmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0t a2VybmVsCg==