From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ACEDA82883 for ; Mon, 29 Apr 2024 15:31:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.50 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714404662; cv=none; b=t5OzxHq9bBiLA5kAQQt+wy14Mn88lUUswtCxoWVIbF6YlGShQpBpwv+KJetf0jxryE/eOUypAdWjtDoCGsL8nOJcm2vwMI5cPk9OxOmNDmTqh/u1SVRzocORkJ/RsbRlp/6c7jEGyCAiC+P70lj2F8MYmGQTppSB8i6UhRqVBQU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714404662; c=relaxed/simple; bh=z+6MabEujZ69j8rVHxyJuJld9V0OSxOFcU0+Ot52psg=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=gpNayn+Obz5KFcKf84q7ol1VO/vGGGsTsEOd7HoJb1jJWmDYlvzO2m6UFelSGPNzR0k9i1dABmCxN33/VslIuR8C06aaoGeo2MpXNsemOS/gPAjJWlKbQTPsLccDYseWZuHaOIJJ3t7ZXivS8ZOgwue/x1YM23Lde2ehGhJcNTk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=HFNJWPnb; arc=none smtp.client-ip=209.85.208.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="HFNJWPnb" Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-5724736770cso14396a12.1 for ; Mon, 29 Apr 2024 08:31:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1714404659; x=1715009459; darn=lists.linux.dev; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=hXy2cvdiGMrvoZj7Xpu05ERqWp4+NPfu+AZvmGys6gc=; b=HFNJWPnbEMAFUUn6rmVZEZFTFRxw2ZI/wxfut+gWx4pUsT0X8nNztzOMELR6i2ttPH ghQjjcaA2kFsE1pIcVxJj4s4+/utV6WzYDZEen4PgERZmUihdD8mc9Z8iCps9QC+Udu0 GFvT1ztI9GeY/mjlIaRY2p74rhk2iNYbVnPju4bzJOo5aJwpxqnT1Zn2IEMNytXax2hg n5+lFJocCL6nncjHq9b3SkgmDU0EZOobaP96vrcYdHbClu8+3GTu/erQ9HRxDV2SwVT0 Na+qSewB0fIQjK0ILQuiJnW+e2Yrr8Oxjyl1+20bsx+auEFTHRMpFCKAAuVa9+OjzHlN L7/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714404659; x=1715009459; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=hXy2cvdiGMrvoZj7Xpu05ERqWp4+NPfu+AZvmGys6gc=; b=poLyo4W+ELoD4xPdU3j85UEPfsGRz6jt76jmHcUZJoFhi/GZ0VvFrXw92KCBHf7Du4 gPelexooJtlYXX7wM+qrAEbdNjMAcA6L1itS3taL3h0j8OiEXnahmxnejQ0eutJpH+2n kAAZr9X/owZ7JDeVHpCOd538P9X5P9bHSdjM6pocYNGSLP7tCQfXIiD8+x2HIy2BWw1v HG3H4R+ib2v33vgJ72FzB8jHueHxxDKkPC9KbU3dXi+VR/mXstdKnTKIQMn5uBL8qr47 UTsFCs+Y6HpLmlaXfvHUTAQ/xXMEBW79+lX72UED1lVpvG8k8CyKn0RjJKcqB95cZw19 VHgA== X-Gm-Message-State: AOJu0YxGFPr8rEqytmbZ4QpTO85AFAlChE31pUN2ySoBbsRJCC9qCHKx hJXo4zJ+LB2ovzOJCEI5TRWq0FNE6NotL6HwoGPWnf4ta/NVCx8qZ/zZWfxNgg== X-Google-Smtp-Source: AGHT+IFcekjTLTMptGZMdOu9AnHk2TPbXqdTP08qJ4DKudaF+gxMfs43RHTCLPdtiNMQP+9/eR8G3Q== X-Received: by 2002:aa7:d854:0:b0:572:554b:ec4f with SMTP id f20-20020aa7d854000000b00572554bec4fmr271687eds.3.1714404658606; Mon, 29 Apr 2024 08:30:58 -0700 (PDT) Received: from google.com (180.232.140.34.bc.googleusercontent.com. [34.140.232.180]) by smtp.gmail.com with ESMTPSA id bf7-20020a0560001cc700b003439d2a5f99sm29773568wrb.55.2024.04.29.08.30.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 08:30:57 -0700 (PDT) Date: Mon, 29 Apr 2024 15:30:53 +0000 From: Mostafa Saleh To: Jason Gunthorpe Cc: iommu@lists.linux.dev, Joerg Roedel , linux-arm-kernel@lists.infradead.org, Robin Murphy , Will Deacon , Eric Auger , Moritz Fischer , Moritz Fischer , Michael Shavit , Nicolin Chen , patches@lists.linux.dev, Shameerali Kolothum Thodi Subject: Re: [PATCH v7 2/9] iommu/arm-smmu-v3: Make CD programming use arm_smmu_write_entry() Message-ID: References: <0-v7-cb149db3a320+3b5-smmuv3_newapi_p2_jgg@nvidia.com> <2-v7-cb149db3a320+3b5-smmuv3_newapi_p2_jgg@nvidia.com> <20240422132954.GB49823@nvidia.com> <20240429142905.GF941030@nvidia.com> Precedence: bulk X-Mailing-List: iommu@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20240429142905.GF941030@nvidia.com> On Mon, Apr 29, 2024 at 11:29:05AM -0300, Jason Gunthorpe wrote: > On Sat, Apr 27, 2024 at 10:08:57PM +0000, Mostafa Saleh wrote: > > > The issue is the old logic constructs the new CD by manipulating the > > > existing CD in various ways "in place" that ends up creating CDs that > > > don't meet the requirements for the new programmer. For instance EPD0 > > > will be set and the TTB0 will also be left programmed. > > > > > > > I see, but what I don’t understand is why doesn't the function construct > > the CD correctly, as from > > Why? Because it never had to before. It made minimal edits to minimize > the code. I understand, my point was why don’t we introduce a new logic to construct it correctly, instead of hacking the old one, as it is much easier to reason about (at least from my point of view) > > > } else if (cd == &quiet_cd) { /* (4) */ > > if (!(smmu->features & ARM_SMMU_FEAT_STALL_FORCE)) > > val &= ~(CTXDESC_CD_0_S | CTXDESC_CD_0_R); > > val |= CTXDESC_CD_0_TCR_EPD0; > > // populate the rest of the CD correctly here. > > } > > What you are asking for is this: > > cd_live = !!(val & CTXDESC_CD_0_V); > > if (!cd) { /* (5) */ > + memset(cdptr, 0, sizeof(*cdptr)); > val = 0; > } else if (cd == &quiet_cd) { /* (4) */ > + val &= ~(CTXDESC_CD_0_TCR_T0SZ | CTXDESC_CD_0_TCR_TG0 | > + CTXDESC_CD_0_TCR_IRGN0 | CTXDESC_CD_0_TCR_ORGN0 | > + CTXDESC_CD_0_TCR_SH0); > if (!(smmu->features & ARM_SMMU_FEAT_STALL_FORCE)) > val &= ~(CTXDESC_CD_0_S | CTXDESC_CD_0_R); > val |= CTXDESC_CD_0_TCR_EPD0; > + cdptr->data[1] &= ~cpu_to_le64(CTXDESC_CD_1_TTB0_MASK); > } else if (cd_live) { /* (3) */ > val &= ~CTXDESC_CD_0_ASID; > val |= FIELD_PREP(CTXDESC_CD_0_ASID, cd->asid); > > I think.. I've been staring at this a while now and I *think* it > covers all the cases and we won't hit the WARN_ON? > That’s similar to how I imagined it. > So sure, lets do it that way, the code is all deleted anyhow .. > I agree, if it's deleted anyway we shouldn't put much time, I haven't looked at the SVA patch yet. > > As I don’t think the right approach is to populate the CD incorrectly > > and then clear the parts not needed for EPD0. > > It is very easy to see that such a simple algorithm will not trigger > the WARN_ON. The above is somewhat trickier. > > > Also, TTB0 is ignored anyway in that case, no? > > Only by HW, there is a protective WARN_ON that will trigger in the > programmer, that is what this is trying to avoid. For bisection. Makes sense. Thanks, Mostafa > Jason 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 CF9A7C04FFE for ; Mon, 29 Apr 2024 15:31:28 +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:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=gwPEbwqHPZSDlI3JfpAX3NsYsfDbvnWkKrWtN5jmKHQ=; b=5FD32cXlkB1846 +2jRj/MO9U092+lzLoZQSfbeFiTjX1CkbcHZXcRSeu6QnUAcP7mALAzWcQfwuphuZKLdrNDULcdzA V23yPWx39ny1CUgfx71aS3J0vpPBt4c0wCbj9iBYu+XhUufGG/KzTqHdzqWHMYp2TilXF2D0Uej11 ct6clLu0ADgA1SfU8bpBDK0r9kJ3RLH1JPJLHRj7RTYlcuyr/mt7hq5ISVFk1I25zlwY6SrRp45P7 PRS5yDiuhgm8b734a1Jq1DWps3e/Hj43wSB6gghjw4AaLbyIa48cjdKWDnIEhS5p1Lq1lhmA2jQmt nhaNja7jjX1ewzpqwxCA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1s1SyI-00000003Qoy-0xMw; Mon, 29 Apr 2024 15:31:14 +0000 Received: from mail-ed1-x52d.google.com ([2a00:1450:4864:20::52d]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1s1SyC-00000003QjS-12Dw for linux-arm-kernel@lists.infradead.org; Mon, 29 Apr 2024 15:31:12 +0000 Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-5727ce5b804so14087a12.0 for ; Mon, 29 Apr 2024 08:31:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1714404659; x=1715009459; darn=lists.infradead.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=hXy2cvdiGMrvoZj7Xpu05ERqWp4+NPfu+AZvmGys6gc=; b=aaX6yggzEKUf6tk3EU3ZCib8QRsA2QTx+t6oWoH2q98c/07vMk9eCrREi4UPlMzin1 VunvoMmspEDrI/TdJ6LdSjRMiJ3WfMzAH8E5nCU5uNOEJVyLDE55HP4F9cK8cPFYSVhh UU3KNgxcdAQ7jZQUOfiNsfTO9iwlaYZyIOKdAzrJXCxZg6uOV01KBbQvPghcblJCzIhG GAu021nMW3YbTYJvE510yWIBL20rR2C58NK2qUFQzQjslZjrHNm79CctL+vNA6CaM2Zg 9zd/02ROMGxagJ+9YMmjJitlvHAQ9VGi09p/btI0S0pNzAumgcxDOEeSk5C1hXl65aac vFrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714404659; x=1715009459; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=hXy2cvdiGMrvoZj7Xpu05ERqWp4+NPfu+AZvmGys6gc=; b=WofwHTeOIt3qEKx6ZnJFnPBU2ZJ4bOmdgE0xc4tZ5oMKaRF0xFajXfmuUrvKWEogvo 64W2vtHDKx0g4t8pCybSdGWrKSDntqsPELzRZw6ahUBtQH4jCwLMGroHdHjxyx8glw1y pkUeT1/UU+QA0t8Api1Of7i5nsTOvunSaWrl0PfQ7BbMNGVXh9SohQQDV+No5+81Qfng PPNa0DyJcDYVfCyJIpAy5XID+9SmOhhQowhz3QM0OS0iO1pED61/UlEOKxZrcrqa4bUo 7N5K6Bf3dlXRzn0lP5q3FoMmpke58RDbvdDaRlZ/D35LIysqTFdJk1qS05vKiYx1gfWN 21dg== X-Forwarded-Encrypted: i=1; AJvYcCXT5Bnrq75ZiSmSNh8QfGZCTOyYzvf0qaGeY/LgNUyyzy6gbN+v/3AwyT5cXt4VUix7NuHKBceTiDhMcFMlbRG0gYvweSeOZjLUB/6UqQOW2/H23+k= X-Gm-Message-State: AOJu0Yy/xRpO3JlFoL/OUsYpCe99Dj08MxRdUByDVkKJ5aJuM8fPZfQ/ A+GO0mHi6vxmv4SGtT+D5+lnL9y4DI8M7AskX7iYp/7mD2dbqie8aTvQDVH7ww== X-Google-Smtp-Source: AGHT+IFcekjTLTMptGZMdOu9AnHk2TPbXqdTP08qJ4DKudaF+gxMfs43RHTCLPdtiNMQP+9/eR8G3Q== X-Received: by 2002:aa7:d854:0:b0:572:554b:ec4f with SMTP id f20-20020aa7d854000000b00572554bec4fmr271687eds.3.1714404658606; Mon, 29 Apr 2024 08:30:58 -0700 (PDT) Received: from google.com (180.232.140.34.bc.googleusercontent.com. [34.140.232.180]) by smtp.gmail.com with ESMTPSA id bf7-20020a0560001cc700b003439d2a5f99sm29773568wrb.55.2024.04.29.08.30.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 08:30:57 -0700 (PDT) Date: Mon, 29 Apr 2024 15:30:53 +0000 From: Mostafa Saleh To: Jason Gunthorpe Cc: iommu@lists.linux.dev, Joerg Roedel , linux-arm-kernel@lists.infradead.org, Robin Murphy , Will Deacon , Eric Auger , Moritz Fischer , Moritz Fischer , Michael Shavit , Nicolin Chen , patches@lists.linux.dev, Shameerali Kolothum Thodi Subject: Re: [PATCH v7 2/9] iommu/arm-smmu-v3: Make CD programming use arm_smmu_write_entry() Message-ID: References: <0-v7-cb149db3a320+3b5-smmuv3_newapi_p2_jgg@nvidia.com> <2-v7-cb149db3a320+3b5-smmuv3_newapi_p2_jgg@nvidia.com> <20240422132954.GB49823@nvidia.com> <20240429142905.GF941030@nvidia.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20240429142905.GF941030@nvidia.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240429_083108_316530_B6CBB22C X-CRM114-Status: GOOD ( 29.41 ) 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 T24gTW9uLCBBcHIgMjksIDIwMjQgYXQgMTE6Mjk6MDVBTSAtMDMwMCwgSmFzb24gR3VudGhvcnBl IHdyb3RlOgo+IE9uIFNhdCwgQXByIDI3LCAyMDI0IGF0IDEwOjA4OjU3UE0gKzAwMDAsIE1vc3Rh ZmEgU2FsZWggd3JvdGU6Cj4gPiA+IFRoZSBpc3N1ZSBpcyB0aGUgb2xkIGxvZ2ljIGNvbnN0cnVj dHMgdGhlIG5ldyBDRCBieSBtYW5pcHVsYXRpbmcgdGhlCj4gPiA+IGV4aXN0aW5nIENEIGluIHZh cmlvdXMgd2F5cyAiaW4gcGxhY2UiIHRoYXQgZW5kcyB1cCBjcmVhdGluZyBDRHMgdGhhdAo+ID4g PiBkb24ndCBtZWV0IHRoZSByZXF1aXJlbWVudHMgZm9yIHRoZSBuZXcgcHJvZ3JhbW1lci4gRm9y IGluc3RhbmNlIEVQRDAKPiA+ID4gd2lsbCBiZSBzZXQgYW5kIHRoZSBUVEIwIHdpbGwgYWxzbyBi ZSBsZWZ0IHByb2dyYW1tZWQuCj4gPiA+IAo+ID4gCj4gPiBJIHNlZSwgYnV0IHdoYXQgSSBkb27i gJl0IHVuZGVyc3RhbmQgaXMgd2h5IGRvZXNuJ3QgdGhlIGZ1bmN0aW9uIGNvbnN0cnVjdAo+ID4g dGhlIENEIGNvcnJlY3RseSwgYXMgZnJvbQo+IAo+IFdoeT8gQmVjYXVzZSBpdCBuZXZlciBoYWQg dG8gYmVmb3JlLiBJdCBtYWRlIG1pbmltYWwgZWRpdHMgdG8gbWluaW1pemUKPiB0aGUgY29kZS4K CkkgdW5kZXJzdGFuZCwgbXkgcG9pbnQgd2FzIHdoeSBkb27igJl0IHdlIGludHJvZHVjZSBhIG5l dyBsb2dpYyB0byBjb25zdHJ1Y3QgaXQKY29ycmVjdGx5LCBpbnN0ZWFkIG9mIGhhY2tpbmcgdGhl IG9sZCBvbmUsIGFzIGl0IGlzIG11Y2ggZWFzaWVyIHRvIHJlYXNvbgphYm91dCAoYXQgbGVhc3Qg ZnJvbSBteSBwb2ludCBvZiB2aWV3KQoKPiAKPiA+IAl9IGVsc2UgaWYgKGNkID09ICZxdWlldF9j ZCkgeyAvKiAoNCkgKi8KPiA+IAkJaWYgKCEoc21tdS0+ZmVhdHVyZXMgJiBBUk1fU01NVV9GRUFU X1NUQUxMX0ZPUkNFKSkKPiA+IAkJCXZhbCAmPSB+KENUWERFU0NfQ0RfMF9TIHwgQ1RYREVTQ19D RF8wX1IpOwo+ID4gCQl2YWwgfD0gQ1RYREVTQ19DRF8wX1RDUl9FUEQwOwo+ID4gCQkvLyBwb3B1 bGF0ZSB0aGUgcmVzdCBvZiB0aGUgQ0QgY29ycmVjdGx5IGhlcmUuCj4gPiAJfQo+IAo+IFdoYXQg eW91IGFyZSBhc2tpbmcgZm9yIGlzIHRoaXM6Cj4gCj4gICAgICAgICBjZF9saXZlID0gISEodmFs ICYgQ1RYREVTQ19DRF8wX1YpOwo+ICAKPiAgICAgICAgIGlmICghY2QpIHsgLyogKDUpICovCj4g KyAgICAgICAgICAgICAgIG1lbXNldChjZHB0ciwgMCwgc2l6ZW9mKCpjZHB0cikpOwo+ICAgICAg ICAgICAgICAgICB2YWwgPSAwOwo+ICAgICAgICAgfSBlbHNlIGlmIChjZCA9PSAmcXVpZXRfY2Qp IHsgLyogKDQpICovCj4gKyAgICAgICAgICAgICAgIHZhbCAmPSB+KENUWERFU0NfQ0RfMF9UQ1Jf VDBTWiB8IENUWERFU0NfQ0RfMF9UQ1JfVEcwIHwKPiArICAgICAgICAgICAgICAgICAgICAgICAg Q1RYREVTQ19DRF8wX1RDUl9JUkdOMCB8IENUWERFU0NfQ0RfMF9UQ1JfT1JHTjAgfAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICBDVFhERVNDX0NEXzBfVENSX1NIMCk7Cj4gICAgICAgICAgICAg ICAgIGlmICghKHNtbXUtPmZlYXR1cmVzICYgQVJNX1NNTVVfRkVBVF9TVEFMTF9GT1JDRSkpCj4g ICAgICAgICAgICAgICAgICAgICAgICAgdmFsICY9IH4oQ1RYREVTQ19DRF8wX1MgfCBDVFhERVND X0NEXzBfUik7Cj4gICAgICAgICAgICAgICAgIHZhbCB8PSBDVFhERVNDX0NEXzBfVENSX0VQRDA7 Cj4gKyAgICAgICAgICAgICAgIGNkcHRyLT5kYXRhWzFdICY9IH5jcHVfdG9fbGU2NChDVFhERVND X0NEXzFfVFRCMF9NQVNLKTsKPiAgICAgICAgIH0gZWxzZSBpZiAoY2RfbGl2ZSkgeyAvKiAoMykg Ki8KPiAgICAgICAgICAgICAgICAgdmFsICY9IH5DVFhERVNDX0NEXzBfQVNJRDsKPiAgICAgICAg ICAgICAgICAgdmFsIHw9IEZJRUxEX1BSRVAoQ1RYREVTQ19DRF8wX0FTSUQsIGNkLT5hc2lkKTsK PiAKPiBJIHRoaW5rLi4gSSd2ZSBiZWVuIHN0YXJpbmcgYXQgdGhpcyBhIHdoaWxlIG5vdyBhbmQg SSAqdGhpbmsqIGl0Cj4gY292ZXJzIGFsbCB0aGUgY2FzZXMgYW5kIHdlIHdvbid0IGhpdCB0aGUg V0FSTl9PTj8KPiAKClRoYXTigJlzIHNpbWlsYXIgdG8gaG93IEkgaW1hZ2luZWQgaXQuCgo+IFNv IHN1cmUsIGxldHMgZG8gaXQgdGhhdCB3YXksIHRoZSBjb2RlIGlzIGFsbCBkZWxldGVkIGFueWhv dyAuLgo+IAoKSSBhZ3JlZSwgaWYgaXQncyBkZWxldGVkIGFueXdheSB3ZSBzaG91bGRuJ3QgcHV0 IG11Y2ggdGltZSwgSSBoYXZlbid0Cmxvb2tlZCBhdCB0aGUgU1ZBIHBhdGNoIHlldC4KCj4gPiBB cyBJICBkb27igJl0IHRoaW5rIHRoZSByaWdodCBhcHByb2FjaCBpcyB0byBwb3B1bGF0ZSB0aGUg Q0QgaW5jb3JyZWN0bHkKPiA+IGFuZCB0aGVuIGNsZWFyIHRoZSBwYXJ0cyBub3QgbmVlZGVkIGZv ciBFUEQwLgo+IAo+IEl0IGlzIHZlcnkgZWFzeSB0byBzZWUgdGhhdCBzdWNoIGEgc2ltcGxlIGFs Z29yaXRobSB3aWxsIG5vdCB0cmlnZ2VyCj4gdGhlIFdBUk5fT04uIFRoZSBhYm92ZSBpcyBzb21l d2hhdCB0cmlja2llci4KPiAKPiA+IEFsc28sIFRUQjAgaXMgaWdub3JlZCBhbnl3YXkgaW4gdGhh dCBjYXNlLCBubz8KPiAKPiBPbmx5IGJ5IEhXLCB0aGVyZSBpcyBhIHByb3RlY3RpdmUgV0FSTl9P TiB0aGF0IHdpbGwgdHJpZ2dlciBpbiB0aGUKPiBwcm9ncmFtbWVyLCB0aGF0IGlzIHdoYXQgdGhp cyBpcyB0cnlpbmcgdG8gYXZvaWQuIEZvciBiaXNlY3Rpb24uCgpNYWtlcyBzZW5zZS4KClRoYW5r cywKTW9zdGFmYQo+IEphc29uCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVs QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==