From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-oa1-f42.google.com (mail-oa1-f42.google.com [209.85.160.42]) (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 5485818BBA5 for ; Thu, 12 Sep 2024 06:18:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.42 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1726121901; cv=none; b=FrQF69XaPJyDwEpLpH30qRfNPlNq8B0G/QHr5gXkS1GEz351T7/s8sTlQ1/QcPp7NwTGHp6yjZAPeMW0s7cX+/X/d72BYho6WZoawTDDeYAr9xuxhTNzk51aFJr97q/OgQJtgeaXcNnUlKsHw3lcJAuBWdfaCI7h0iw0rQhIbFA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1726121901; c=relaxed/simple; bh=JXQ5stJy2yGFyhQM8tYpvYIBlea3Ge+wa2GDoDqdiSo=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=fYp/8l7r5WLkUMxll2bzyBqsudiwufZ8Rvee4MUZ5gSA7FnAHDCnj1tlFLgUGhWB77de6itOeVy9piX3uqj9t4uJG2DzTFqAgcD2zs3QsIE60F78iWFxD0SIKdy3JAZgybkJ1YV2OSFCVOPsJeFgLLAoqTuEBVC2Wumy313jVww= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=IBwzBVm+; arc=none smtp.client-ip=209.85.160.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="IBwzBVm+" Received: by mail-oa1-f42.google.com with SMTP id 586e51a60fabf-26ff21d82e4so257520fac.2 for ; Wed, 11 Sep 2024 23:18:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1726121898; x=1726726698; darn=vger.kernel.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=MAcwRzdYBVGpQvvsotib//4T0Ptv25mGEFNsz8/kzr4=; b=IBwzBVm+Dy9DemXiT+1joiWwNQ4MpJ6HiprnZBhfp+qlwYCm1SZOS8UFwa0Ob/wPCW vdT0GLddrfPUul+3HWiREsrr1BVDND1R7IS3vT802MVi0qC8GIU4yHQ7GO4xm81KEdx9 TjHA9HiBsqv3ofAFpygNDj+gVBPINMdydaIlxa7xXengpnJtRkikrnl6a/Eeb/ABae/w ks3IT3BnNHYp4r19IbvLouGn3n1x1WKFgjdl3Thz3Yk4xPuVmDxPGtMs1TmPEX/TLFcE VGAPF+76PBRlColfrY2Ua355B6uk/L1vuIEzKCB0wC54ruMA9wW79peGN+bPCNqw8pEJ omLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1726121898; x=1726726698; 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=MAcwRzdYBVGpQvvsotib//4T0Ptv25mGEFNsz8/kzr4=; b=I/jKQkhmSI9lO/HxDYrzIq8Iv7HeLHYnlZsyKqf1tPGOew9QxRwT4SzdsPxRP7AeGP syko58B68sknUmuQloPO22H0y5UlxfomWfXJH1jjztkZfitN9hY+KieQh51U/19S4CqW vT3t/WDJtTCSXWx/JiCfCDAcPGgS4hQIH2xuVsa6pcO53VYrXdZQtQ+Z78T3yZ/dLs85 O/EaApitl1FsWC/EFWGf6BXV/79BzR7ybzeyfdf2DcdugDcslm9cCnMC3TrnJ4pIbhFq yNLdM6eS2A/j2Lj9bVWqIjpahOd4ssFi+fgYA9YpExk7TqafqXNkUfe+PakrdYtcBO6R Berg== X-Forwarded-Encrypted: i=1; AJvYcCWQi3N0dOZx1EeH4tDHRmmXmKgL4hpXA0MqGY2mTlYykfCsc42bRX8mJm1qXAqfHklScHWW57SfSBdnjA==@vger.kernel.org X-Gm-Message-State: AOJu0YzLQa8R/AGnWp4zrKQ5KmK0nRtL3zU+bVGLOGGFVUmq8p2w7GHn wm34ysWInbnGZ1PSJizB6YG7QAYrwAJXNQzWiOKD4SG+Afxa/cbOjhtt8ktyAEA= X-Google-Smtp-Source: AGHT+IH1u/BITj52DSA2KLJ5czFa7HaODYxdqRl9mmjp1F3evKXCtYQOfdJUyouLtu9doLCVCxJHIA== X-Received: by 2002:a05:6870:910f:b0:277:eb68:2878 with SMTP id 586e51a60fabf-27c3f6a6e6emr1295326fac.44.1726121898162; Wed, 11 Sep 2024 23:18:18 -0700 (PDT) Received: from ghost ([2601:647:6700:64d0:7acc:9910:2c1d:4e65]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7190f888a78sm3692711b3a.140.2024.09.11.23.18.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Sep 2024 23:18:17 -0700 (PDT) Date: Wed, 11 Sep 2024 23:18:12 -0700 From: Charlie Jenkins To: Catalin Marinas Cc: "Liam R. Howlett" , Arnd Bergmann , guoren , Richard Henderson , Ivan Kokshaysky , Matt Turner , Vineet Gupta , Russell King , Huacai Chen , WANG Xuerui , Thomas Bogendoerfer , "James E . J . Bottomley" , Helge Deller , Michael Ellerman , Nicholas Piggin , Christophe Leroy , Naveen N Rao , Alexander Gordeev , Gerald Schaefer , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Sven Schnelle , Yoshinori Sato , Rich Felker , John Paul Adrian Glaubitz , "David S . Miller" , Andreas Larsson , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Andy Lutomirski , Peter Zijlstra , Muchun Song , Andrew Morton , Vlastimil Babka , Lorenzo Stoakes , shuah , Christoph Hellwig , Michal Hocko , "Kirill A. Shutemov" , Chris Torek , Linux-Arch , linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, "linux-csky@vger.kernel.org" , loongarch@lists.linux.dev, linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-abi-devel@lists.sourceforge.net Subject: Re: [PATCH RFC v3 1/2] mm: Add personality flag to limit address to 47 bits Message-ID: References: <20240905-patches-below_hint_mmap-v3-0-3cd5564efbbb@rivosinc.com> <20240905-patches-below_hint_mmap-v3-1-3cd5564efbbb@rivosinc.com> <9fc4746b-8e9d-4a75-b966-e0906187e6b7@app.fastmail.com> Precedence: bulk X-Mailing-List: linux-alpha@vger.kernel.org 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: On Wed, Sep 11, 2024 at 07:21:27PM +0100, Catalin Marinas wrote: > On Tue, Sep 10, 2024 at 05:45:07PM -0700, Charlie Jenkins wrote: > > On Tue, Sep 10, 2024 at 03:08:14PM -0400, Liam R. Howlett wrote: > > > * Catalin Marinas [240906 07:44]: > > > > On Fri, Sep 06, 2024 at 09:55:42AM +0000, Arnd Bergmann wrote: > > > > > On Fri, Sep 6, 2024, at 09:14, Guo Ren wrote: > > > > > > On Fri, Sep 6, 2024 at 3:18 PM Arnd Bergmann wrote: > > > > > >> It's also unclear to me how we want this flag to interact with > > > > > >> the existing logic in arch_get_mmap_end(), which attempts to > > > > > >> limit the default mapping to a 47-bit address space already. > > > > > > > > > > > > To optimize RISC-V progress, I recommend: > > > > > > > > > > > > Step 1: Approve the patch. > > > > > > Step 2: Update Go and OpenJDK's RISC-V backend to utilize it. > > > > > > Step 3: Wait approximately several iterations for Go & OpenJDK > > > > > > Step 4: Remove the 47-bit constraint in arch_get_mmap_end() > > Point 4 is an ABI change. What guarantees that there isn't still > software out there that relies on the old behaviour? Yeah I don't think it would be desirable to remove the 47 bit constraint in architectures that already have it. > > > > > > I really want to first see a plausible explanation about why > > > > > RISC-V can't just implement this using a 47-bit DEFAULT_MAP_WINDOW > > > > > like all the other major architectures (x86, arm64, powerpc64), > > > > > > > > FWIW arm64 actually limits DEFAULT_MAP_WINDOW to 48-bit in the default > > > > configuration. We end up with a 47-bit with 16K pages but for a > > > > different reason that has to do with LPA2 support (I doubt we need this > > > > for the user mapping but we need to untangle some of the macros there; > > > > that's for a separate discussion). > > > > > > > > That said, we haven't encountered any user space problems with a 48-bit > > > > DEFAULT_MAP_WINDOW. So I also think RISC-V should follow a similar > > > > approach (47 or 48 bit default limit). Better to have some ABI > > > > consistency between architectures. One can still ask for addresses above > > > > this default limit via mmap(). > > > > > > I think that is best as well. > > > > > > Can we please just do what x86 and arm64 does? > > > > I responded to Arnd in the other thread, but I am still not convinced > > that the solution that x86 and arm64 have selected is the best solution. > > The solution of defaulting to 47 bits does allow applications the > > ability to get addresses that are below 47 bits. However, due to > > differences across architectures it doesn't seem possible to have all > > architectures default to the same value. Additionally, this flag will be > > able to help users avoid potential bugs where a hint address is passed > > that causes upper bits of a VA to be used. > > The reason we added this limit on arm64 is that we noticed programs > using the top 8 bits of a 64-bit pointer for additional information. > IIRC, it wasn't even openJDK but some JavaScript JIT. We could have > taught those programs of a new flag but since we couldn't tell how many > are out there, it was the safest to default to a smaller limit and opt > in to the higher one. Such opt-in is via mmap() but if you prefer a > prctl() flag, that's fine by me as well (though I think this should be > opt-in to higher addresses rather than opt-out of the higher addresses). The mmap() flag was used in previous versions but was decided against because this feature is more useful if it is process-wide. A personality() flag was chosen instead of a prctl() flag because there existed other flags in personality() that were similar. I am tempted to use prctl() however because then we could have an additional arg to select the exact number of bits that should be reserved (rather than being fixed at 47 bits). Opting-in to the higher address space is reasonable. However, it is not my preference, because the purpose of this flag is to ensure that allocations do not exceed 47-bits, so it is a clearer ABI to have the applications that want this guarantee to be the ones setting the flag, rather than the applications that want the higher bits setting the flag. - Charlie > > -- > Catalin 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 122CBEE57C7 for ; Thu, 12 Sep 2024 06:18:23 +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=0cQTI6G+2GLSxIunkaJxVQCuoXQxBA5PtyINHQOyZz4=; b=MCNiu8lR2v5Tt/ jmOS9cRu+AU4S9B4FDgOO6khu1LAGZaqu5r8/mmdGxn8JTOCZYwJnsr5hqawJLIovnn0W/pdZ0ZwD 654IYUn6LEQSTt+7QCkW06J1n7VHY5WVctVh5SQohyQaRuVS4Qg8RHxsQA6jgvq4Fb/a0l3xjEBvI W83rcaU44qGwgs56lx8nt1EFOee2sxLJ1BvIOjj0xEVk7mp4an7Pjn/fWnOJ8casldKUu7QzI1Cr0 E2NsLfOKb2K6OiVVmDwfTYtSO6Qo/hxWom15WHuB54RbSC20th5M3nRt5Ae0rmQlJ18QsJkgeoE0p 7LYiXF+UfI2SPosCd+Og==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sod9r-0000000C02P-2RjA; Thu, 12 Sep 2024 06:18:23 +0000 Received: from mail-oa1-x29.google.com ([2001:4860:4864:20::29]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sod9n-0000000C00M-1Yyj for linux-snps-arc@lists.infradead.org; Thu, 12 Sep 2024 06:18:21 +0000 Received: by mail-oa1-x29.google.com with SMTP id 586e51a60fabf-277f35c01f5so284810fac.0 for ; Wed, 11 Sep 2024 23:18:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1726121898; x=1726726698; 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=MAcwRzdYBVGpQvvsotib//4T0Ptv25mGEFNsz8/kzr4=; b=jJ7rfMSj9LzEuVCXGhLS51z055EWf28SUp2qcX9h3vOaim3LczEIkuVMvk+46wK/++ 14q59+Jcc2EJXg0NKwFbE92byL6ALigcT2GiX5s6Xsl68bl6toBhb6UuQLWVsmcUALCq 5tc0LSHe8woadoS8KHuWrN8oSMt6MobF6WNqnXZM6O2NrbBm5g+MZ1x3vERp7l8db9+2 S4W8nRbcYFdZsnxvzsDeT6AlSGsxyZdsOjrOcazfcXTOblDavUxw0rMqNTe5/xs9ZZr8 M+1Nhj/86TrYa6E+kgjzIylDpfZPbxqO9x3Umj0m2Lo0BpUmeIaGZwTzPAOIYByVqpp1 xmxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1726121898; x=1726726698; 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=MAcwRzdYBVGpQvvsotib//4T0Ptv25mGEFNsz8/kzr4=; b=oSQ6hupfIXhmcnj05G47t4KenSlade4wgspqVNu8jtX8V+t5QwP3OnL3VxniCsbW2s Qp2DJhCgBccsw7Psy8/KtvCG4G2HaoIkIxkd2f9LBHZgYRXdIEkhO53UYHwEJxp6lRIb 14YUIU6Wkp1zkb/H3zI5nEuXwM8ZbYUw54yqQN9rz3e9q0rVJdAzyJfdC9hSScITZRNN XE6Gj2/tcOdSi69uJAxXYKMqT5KmZxTCjUlbnfA1Ty2sMx2tJfCC3Gqvb9vKjLF0MvfW nEvsKwTO2aqdHcFvksJTJhsw8M2XcPfnri35v+vO7lrdJ2mqyI6HVn91WKXtUl6expWx BBmA== X-Forwarded-Encrypted: i=1; AJvYcCXsFXK+beVnNbjO+/5oZoNf/uJWpWvcNMWwiKOfFtUXqnZtgC9mgkbEtFEjr+D9RlM7PCEkoRB6zPumc44Ktw==@lists.infradead.org X-Gm-Message-State: AOJu0Yxo+3uFqZ4xrR3Jqx70N+sQjLBsdKg502n4U3/YMVxfMXt7LdB8 N1XM9iSHVG7xGtIicAN9RpKmKeJ6tWG2Z52vQ9o62U1xyEEn/TKjWU/GcwZa5Uo= X-Google-Smtp-Source: AGHT+IH1u/BITj52DSA2KLJ5czFa7HaODYxdqRl9mmjp1F3evKXCtYQOfdJUyouLtu9doLCVCxJHIA== X-Received: by 2002:a05:6870:910f:b0:277:eb68:2878 with SMTP id 586e51a60fabf-27c3f6a6e6emr1295326fac.44.1726121898162; Wed, 11 Sep 2024 23:18:18 -0700 (PDT) Received: from ghost ([2601:647:6700:64d0:7acc:9910:2c1d:4e65]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7190f888a78sm3692711b3a.140.2024.09.11.23.18.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Sep 2024 23:18:17 -0700 (PDT) Date: Wed, 11 Sep 2024 23:18:12 -0700 From: Charlie Jenkins To: Catalin Marinas Cc: "Liam R. Howlett" , Arnd Bergmann , guoren , Richard Henderson , Ivan Kokshaysky , Matt Turner , Vineet Gupta , Russell King , Huacai Chen , WANG Xuerui , Thomas Bogendoerfer , "James E . J . Bottomley" , Helge Deller , Michael Ellerman , Nicholas Piggin , Christophe Leroy , Naveen N Rao , Alexander Gordeev , Gerald Schaefer , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Sven Schnelle , Yoshinori Sato , Rich Felker , John Paul Adrian Glaubitz , "David S . Miller" , Andreas Larsson , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Andy Lutomirski , Peter Zijlstra , Muchun Song , Andrew Morton , Vlastimil Babka , Lorenzo Stoakes , shuah , Christoph Hellwig , Michal Hocko , "Kirill A. Shutemov" , Chris Torek , Linux-Arch , linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, "linux-csky@vger.kernel.org" , loongarch@lists.linux.dev, linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-abi-devel@lists.sourceforge.net Subject: Re: [PATCH RFC v3 1/2] mm: Add personality flag to limit address to 47 bits Message-ID: References: <20240905-patches-below_hint_mmap-v3-0-3cd5564efbbb@rivosinc.com> <20240905-patches-below_hint_mmap-v3-1-3cd5564efbbb@rivosinc.com> <9fc4746b-8e9d-4a75-b966-e0906187e6b7@app.fastmail.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240911_231819_460112_4C6D350A X-CRM114-Status: GOOD ( 45.00 ) X-BeenThere: linux-snps-arc@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux on Synopsys ARC Processors List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-snps-arc" Errors-To: linux-snps-arc-bounces+linux-snps-arc=archiver.kernel.org@lists.infradead.org T24gV2VkLCBTZXAgMTEsIDIwMjQgYXQgMDc6MjE6MjdQTSArMDEwMCwgQ2F0YWxpbiBNYXJpbmFz IHdyb3RlOgo+IE9uIFR1ZSwgU2VwIDEwLCAyMDI0IGF0IDA1OjQ1OjA3UE0gLTA3MDAsIENoYXJs aWUgSmVua2lucyB3cm90ZToKPiA+IE9uIFR1ZSwgU2VwIDEwLCAyMDI0IGF0IDAzOjA4OjE0UE0g LTA0MDAsIExpYW0gUi4gSG93bGV0dCB3cm90ZToKPiA+ID4gKiBDYXRhbGluIE1hcmluYXMgPGNh dGFsaW4ubWFyaW5hc0Bhcm0uY29tPiBbMjQwOTA2IDA3OjQ0XToKPiA+ID4gPiBPbiBGcmksIFNl cCAwNiwgMjAyNCBhdCAwOTo1NTo0MkFNICswMDAwLCBBcm5kIEJlcmdtYW5uIHdyb3RlOgo+ID4g PiA+ID4gT24gRnJpLCBTZXAgNiwgMjAyNCwgYXQgMDk6MTQsIEd1byBSZW4gd3JvdGU6Cj4gPiA+ ID4gPiA+IE9uIEZyaSwgU2VwIDYsIDIwMjQgYXQgMzoxOOKAr1BNIEFybmQgQmVyZ21hbm4gPGFy bmRAYXJuZGIuZGU+IHdyb3RlOgo+ID4gPiA+ID4gPj4gSXQncyBhbHNvIHVuY2xlYXIgdG8gbWUg aG93IHdlIHdhbnQgdGhpcyBmbGFnIHRvIGludGVyYWN0IHdpdGgKPiA+ID4gPiA+ID4+IHRoZSBl eGlzdGluZyBsb2dpYyBpbiBhcmNoX2dldF9tbWFwX2VuZCgpLCB3aGljaCBhdHRlbXB0cyB0bwo+ ID4gPiA+ID4gPj4gbGltaXQgdGhlIGRlZmF1bHQgbWFwcGluZyB0byBhIDQ3LWJpdCBhZGRyZXNz IHNwYWNlIGFscmVhZHkuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IFRvIG9wdGltaXplIFJJU0Mt ViBwcm9ncmVzcywgSSByZWNvbW1lbmQ6Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IFN0ZXAgMTog QXBwcm92ZSB0aGUgcGF0Y2guCj4gPiA+ID4gPiA+IFN0ZXAgMjogVXBkYXRlIEdvIGFuZCBPcGVu SkRLJ3MgUklTQy1WIGJhY2tlbmQgdG8gdXRpbGl6ZSBpdC4KPiA+ID4gPiA+ID4gU3RlcCAzOiBX YWl0IGFwcHJveGltYXRlbHkgc2V2ZXJhbCBpdGVyYXRpb25zIGZvciBHbyAmIE9wZW5KREsKPiA+ ID4gPiA+ID4gU3RlcCA0OiBSZW1vdmUgdGhlIDQ3LWJpdCBjb25zdHJhaW50IGluIGFyY2hfZ2V0 X21tYXBfZW5kKCkKPiAKPiBQb2ludCA0IGlzIGFuIEFCSSBjaGFuZ2UuIFdoYXQgZ3VhcmFudGVl cyB0aGF0IHRoZXJlIGlzbid0IHN0aWxsCj4gc29mdHdhcmUgb3V0IHRoZXJlIHRoYXQgcmVsaWVz IG9uIHRoZSBvbGQgYmVoYXZpb3VyPwoKWWVhaCBJIGRvbid0IHRoaW5rIGl0IHdvdWxkIGJlIGRl c2lyYWJsZSB0byByZW1vdmUgdGhlIDQ3IGJpdApjb25zdHJhaW50IGluIGFyY2hpdGVjdHVyZXMg dGhhdCBhbHJlYWR5IGhhdmUgaXQuCgo+IAo+ID4gPiA+ID4gSSByZWFsbHkgd2FudCB0byBmaXJz dCBzZWUgYSBwbGF1c2libGUgZXhwbGFuYXRpb24gYWJvdXQgd2h5Cj4gPiA+ID4gPiBSSVNDLVYg Y2FuJ3QganVzdCBpbXBsZW1lbnQgdGhpcyB1c2luZyBhIDQ3LWJpdCBERUZBVUxUX01BUF9XSU5E T1cKPiA+ID4gPiA+IGxpa2UgYWxsIHRoZSBvdGhlciBtYWpvciBhcmNoaXRlY3R1cmVzICh4ODYs IGFybTY0LCBwb3dlcnBjNjQpLAo+ID4gPiA+IAo+ID4gPiA+IEZXSVcgYXJtNjQgYWN0dWFsbHkg bGltaXRzIERFRkFVTFRfTUFQX1dJTkRPVyB0byA0OC1iaXQgaW4gdGhlIGRlZmF1bHQKPiA+ID4g PiBjb25maWd1cmF0aW9uLiBXZSBlbmQgdXAgd2l0aCBhIDQ3LWJpdCB3aXRoIDE2SyBwYWdlcyBi dXQgZm9yIGEKPiA+ID4gPiBkaWZmZXJlbnQgcmVhc29uIHRoYXQgaGFzIHRvIGRvIHdpdGggTFBB MiBzdXBwb3J0IChJIGRvdWJ0IHdlIG5lZWQgdGhpcwo+ID4gPiA+IGZvciB0aGUgdXNlciBtYXBw aW5nIGJ1dCB3ZSBuZWVkIHRvIHVudGFuZ2xlIHNvbWUgb2YgdGhlIG1hY3JvcyB0aGVyZTsKPiA+ ID4gPiB0aGF0J3MgZm9yIGEgc2VwYXJhdGUgZGlzY3Vzc2lvbikuCj4gPiA+ID4gCj4gPiA+ID4g VGhhdCBzYWlkLCB3ZSBoYXZlbid0IGVuY291bnRlcmVkIGFueSB1c2VyIHNwYWNlIHByb2JsZW1z IHdpdGggYSA0OC1iaXQKPiA+ID4gPiBERUZBVUxUX01BUF9XSU5ET1cuIFNvIEkgYWxzbyB0aGlu ayBSSVNDLVYgc2hvdWxkIGZvbGxvdyBhIHNpbWlsYXIKPiA+ID4gPiBhcHByb2FjaCAoNDcgb3Ig NDggYml0IGRlZmF1bHQgbGltaXQpLiBCZXR0ZXIgdG8gaGF2ZSBzb21lIEFCSQo+ID4gPiA+IGNv bnNpc3RlbmN5IGJldHdlZW4gYXJjaGl0ZWN0dXJlcy4gT25lIGNhbiBzdGlsbCBhc2sgZm9yIGFk ZHJlc3NlcyBhYm92ZQo+ID4gPiA+IHRoaXMgZGVmYXVsdCBsaW1pdCB2aWEgbW1hcCgpLgo+ID4g PiAKPiA+ID4gSSB0aGluayB0aGF0IGlzIGJlc3QgYXMgd2VsbC4KPiA+ID4gCj4gPiA+IENhbiB3 ZSBwbGVhc2UganVzdCBkbyB3aGF0IHg4NiBhbmQgYXJtNjQgZG9lcz8KPiA+IAo+ID4gSSByZXNw b25kZWQgdG8gQXJuZCBpbiB0aGUgb3RoZXIgdGhyZWFkLCBidXQgSSBhbSBzdGlsbCBub3QgY29u dmluY2VkCj4gPiB0aGF0IHRoZSBzb2x1dGlvbiB0aGF0IHg4NiBhbmQgYXJtNjQgaGF2ZSBzZWxl Y3RlZCBpcyB0aGUgYmVzdCBzb2x1dGlvbi4KPiA+IFRoZSBzb2x1dGlvbiBvZiBkZWZhdWx0aW5n IHRvIDQ3IGJpdHMgZG9lcyBhbGxvdyBhcHBsaWNhdGlvbnMgdGhlCj4gPiBhYmlsaXR5IHRvIGdl dCBhZGRyZXNzZXMgdGhhdCBhcmUgYmVsb3cgNDcgYml0cy4gSG93ZXZlciwgZHVlIHRvCj4gPiBk aWZmZXJlbmNlcyBhY3Jvc3MgYXJjaGl0ZWN0dXJlcyBpdCBkb2Vzbid0IHNlZW0gcG9zc2libGUg dG8gaGF2ZSBhbGwKPiA+IGFyY2hpdGVjdHVyZXMgZGVmYXVsdCB0byB0aGUgc2FtZSB2YWx1ZS4g QWRkaXRpb25hbGx5LCB0aGlzIGZsYWcgd2lsbCBiZQo+ID4gYWJsZSB0byBoZWxwIHVzZXJzIGF2 b2lkIHBvdGVudGlhbCBidWdzIHdoZXJlIGEgaGludCBhZGRyZXNzIGlzIHBhc3NlZAo+ID4gdGhh dCBjYXVzZXMgdXBwZXIgYml0cyBvZiBhIFZBIHRvIGJlIHVzZWQuCj4gCj4gVGhlIHJlYXNvbiB3 ZSBhZGRlZCB0aGlzIGxpbWl0IG9uIGFybTY0IGlzIHRoYXQgd2Ugbm90aWNlZCBwcm9ncmFtcwo+ IHVzaW5nIHRoZSB0b3AgOCBiaXRzIG9mIGEgNjQtYml0IHBvaW50ZXIgZm9yIGFkZGl0aW9uYWwg aW5mb3JtYXRpb24uCj4gSUlSQywgaXQgd2Fzbid0IGV2ZW4gb3BlbkpESyBidXQgc29tZSBKYXZh U2NyaXB0IEpJVC4gV2UgY291bGQgaGF2ZQo+IHRhdWdodCB0aG9zZSBwcm9ncmFtcyBvZiBhIG5l dyBmbGFnIGJ1dCBzaW5jZSB3ZSBjb3VsZG4ndCB0ZWxsIGhvdyBtYW55Cj4gYXJlIG91dCB0aGVy ZSwgaXQgd2FzIHRoZSBzYWZlc3QgdG8gZGVmYXVsdCB0byBhIHNtYWxsZXIgbGltaXQgYW5kIG9w dAo+IGluIHRvIHRoZSBoaWdoZXIgb25lLiBTdWNoIG9wdC1pbiBpcyB2aWEgbW1hcCgpIGJ1dCBp ZiB5b3UgcHJlZmVyIGEKPiBwcmN0bCgpIGZsYWcsIHRoYXQncyBmaW5lIGJ5IG1lIGFzIHdlbGwg KHRob3VnaCBJIHRoaW5rIHRoaXMgc2hvdWxkIGJlCj4gb3B0LWluIHRvIGhpZ2hlciBhZGRyZXNz ZXMgcmF0aGVyIHRoYW4gb3B0LW91dCBvZiB0aGUgaGlnaGVyIGFkZHJlc3NlcykuCgpUaGUgbW1h cCgpIGZsYWcgd2FzIHVzZWQgaW4gcHJldmlvdXMgdmVyc2lvbnMgYnV0IHdhcyBkZWNpZGVkIGFn YWluc3QKYmVjYXVzZSB0aGlzIGZlYXR1cmUgaXMgbW9yZSB1c2VmdWwgaWYgaXQgaXMgcHJvY2Vz cy13aWRlLiBBCnBlcnNvbmFsaXR5KCkgZmxhZyB3YXMgY2hvc2VuIGluc3RlYWQgb2YgYSBwcmN0 bCgpIGZsYWcgYmVjYXVzZSB0aGVyZQpleGlzdGVkIG90aGVyIGZsYWdzIGluIHBlcnNvbmFsaXR5 KCkgdGhhdCB3ZXJlIHNpbWlsYXIuIEkgYW0gdGVtcHRlZCB0bwp1c2UgcHJjdGwoKSBob3dldmVy IGJlY2F1c2UgdGhlbiB3ZSBjb3VsZCBoYXZlIGFuIGFkZGl0aW9uYWwgYXJnIHRvCnNlbGVjdCB0 aGUgZXhhY3QgbnVtYmVyIG9mIGJpdHMgdGhhdCBzaG91bGQgYmUgcmVzZXJ2ZWQgKHJhdGhlciB0 aGFuCmJlaW5nIGZpeGVkIGF0IDQ3IGJpdHMpLgoKT3B0aW5nLWluIHRvIHRoZSBoaWdoZXIgYWRk cmVzcyBzcGFjZSBpcyByZWFzb25hYmxlLiBIb3dldmVyLCBpdCBpcyBub3QKbXkgcHJlZmVyZW5j ZSwgYmVjYXVzZSB0aGUgcHVycG9zZSBvZiB0aGlzIGZsYWcgaXMgdG8gZW5zdXJlIHRoYXQKYWxs b2NhdGlvbnMgZG8gbm90IGV4Y2VlZCA0Ny1iaXRzLCBzbyBpdCBpcyBhIGNsZWFyZXIgQUJJIHRv IGhhdmUgdGhlCmFwcGxpY2F0aW9ucyB0aGF0IHdhbnQgdGhpcyBndWFyYW50ZWUgdG8gYmUgdGhl IG9uZXMgc2V0dGluZyB0aGUgZmxhZywKcmF0aGVyIHRoYW4gdGhlIGFwcGxpY2F0aW9ucyB0aGF0 IHdhbnQgdGhlIGhpZ2hlciBiaXRzIHNldHRpbmcgdGhlIGZsYWcuCgotIENoYXJsaWUKCj4gCj4g LS0gCj4gQ2F0YWxpbgoKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KbGludXgtc25wcy1hcmMgbWFpbGluZyBsaXN0CmxpbnV4LXNucHMtYXJjQGxpc3Rz LmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1zbnBzLWFyYwo=