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 X-Spam-Level: X-Spam-Status: No, score=-1.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 86321C282CE for ; Mon, 8 Apr 2019 06:44:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 49B5020883 for ; Mon, 8 Apr 2019 06:44:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726471AbfDHGoI (ORCPT ); Mon, 8 Apr 2019 02:44:08 -0400 Received: from mx2.suse.de ([195.135.220.15]:33096 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725871AbfDHGoH (ORCPT ); Mon, 8 Apr 2019 02:44:07 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 7A456AFF4; Mon, 8 Apr 2019 06:44:05 +0000 (UTC) Subject: Re: [PATCH RFC 00/39] x86/KVM: Xen HVM guest support To: Joao Martins , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Ankur Arora , Boris Ostrovsky , =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , Thomas Gleixner , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" , x86@kernel.org, Stefano Stabellini , xen-devel@lists.xenproject.org References: <20190220201609.28290-1-joao.m.martins@oracle.com> <35051310-c497-8ad5-4434-1b8426a317d2@redhat.com> <8b1f4912-4f92-69ae-ae01-d899d5640572@oracle.com> <3ee91f33-2973-c2db-386f-afbf138081b4@redhat.com> <59676804-786d-3df8-7752-8e45dec6d65b@oracle.com> From: Juergen Gross Openpgp: preference=signencrypt Autocrypt: addr=jgross@suse.com; prefer-encrypt=mutual; keydata= mQENBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOB ycWxw3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJve dYm8Of8Zd621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJ NwQpd369y9bfIhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvx XP3FAp2pkW0xqG7/377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEB AAG0H0p1ZXJnZW4gR3Jvc3MgPGpncm9zc0BzdXNlLmNvbT6JATkEEwECACMFAlOMcK8CGwMH CwkIBwMCAQYVCAIJCgsEFgIDAQIeAQIXgAAKCRCw3p3WKL8TL8eZB/9G0juS/kDY9LhEXseh mE9U+iA1VsLhgDqVbsOtZ/S14LRFHczNd/Lqkn7souCSoyWsBs3/wO+OjPvxf7m+Ef+sMtr0 G5lCWEWa9wa0IXx5HRPW/ScL+e4AVUbL7rurYMfwCzco+7TfjhMEOkC+va5gzi1KrErgNRHH kg3PhlnRY0Udyqx++UYkAsN4TQuEhNN32MvN0Np3WlBJOgKcuXpIElmMM5f1BBzJSKBkW0Jc Wy3h2Wy912vHKpPV/Xv7ZwVJ27v7KcuZcErtptDevAljxJtE7aJG6WiBzm+v9EswyWxwMCIO RoVBYuiocc51872tRGywc03xaQydB+9R7BHPuQENBFOMcBYBCADLMfoA44MwGOB9YT1V4KCy vAfd7E0BTfaAurbG+Olacciz3yd09QOmejFZC6AnoykydyvTFLAWYcSCdISMr88COmmCbJzn sHAogjexXiif6ANUUlHpjxlHCCcELmZUzomNDnEOTxZFeWMTFF9Rf2k2F0Tl4E5kmsNGgtSa aMO0rNZoOEiD/7UfPP3dfh8JCQ1VtUUsQtT1sxos8Eb/HmriJhnaTZ7Hp3jtgTVkV0ybpgFg w6WMaRkrBh17mV0z2ajjmabB7SJxcouSkR0hcpNl4oM74d2/VqoW4BxxxOD1FcNCObCELfIS auZx+XT6s+CE7Qi/c44ibBMR7hyjdzWbABEBAAGJAR8EGAECAAkFAlOMcBYCGwwACgkQsN6d 1ii/Ey9D+Af/WFr3q+bg/8v5tCknCtn92d5lyYTBNt7xgWzDZX8G6/pngzKyWfedArllp0Pn fgIXtMNV+3t8Li1Tg843EXkP7+2+CQ98MB8XvvPLYAfW8nNDV85TyVgWlldNcgdv7nn1Sq8g HwB2BHdIAkYce3hEoDQXt/mKlgEGsLpzJcnLKimtPXQQy9TxUaLBe9PInPd+Ohix0XOlY+Uk QFEx50Ki3rSDl2Zt2tnkNYKUCvTJq7jvOlaPd6d/W0tZqpyy7KVay+K4aMobDsodB3dvEAs6 ScCnh03dDAFgIq5nsB11j3KPKdVoPlfucX2c7kGNH+LUMbzqV6beIENfNexkOfxHf4kBrQQY AQgAIBYhBIUSZ3Lo9gSUpdCX97DendYovxMvBQJa3fDQAhsCAIEJELDendYovxMvdiAEGRYI AB0WIQRTLbB6QfY48x44uB6AXGG7T9hjvgUCWt3w0AAKCRCAXGG7T9hjvk2LAP99B/9FenK/ 1lfifxQmsoOrjbZtzCS6OKxPqOLHaY47BgEAqKKn36YAPpbk09d2GTVetoQJwiylx/Z9/mQI CUbQMg1pNQf9EjA1bNcMbnzJCgt0P9Q9wWCLwZa01SnQWFz8Z4HEaKldie+5bHBL5CzVBrLv 81tqX+/j95llpazzCXZW2sdNL3r8gXqrajSox7LR2rYDGdltAhQuISd2BHrbkQVEWD4hs7iV 1KQHe2uwXbKlguKPhk5ubZxqwsg/uIHw0qZDk+d0vxjTtO2JD5Jv/CeDgaBX4Emgp0NYs8IC UIyKXBtnzwiNv4cX9qKlz2Gyq9b+GdcLYZqMlIBjdCz0yJvgeb3WPNsCOanvbjelDhskx9gd 6YUUFFqgsLtrKpCNyy203a58g2WosU9k9H+LcheS37Ph2vMVTISMszW9W8gyORSgmw== Message-ID: Date: Mon, 8 Apr 2019 08:44:03 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.5.1 MIME-Version: 1.0 In-Reply-To: <59676804-786d-3df8-7752-8e45dec6d65b@oracle.com> Content-Type: text/plain; charset=utf-8 Content-Language: de-DE Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 12/03/2019 18:14, Joao Martins wrote: > On 2/22/19 4:59 PM, Paolo Bonzini wrote: >> On 21/02/19 12:45, Joao Martins wrote: >>> On 2/20/19 9:09 PM, Paolo Bonzini wrote: >>>> On 20/02/19 21:15, Joao Martins wrote: >>>>> 2. PV Driver support (patches 17 - 39) >>>>> >>>>> We start by redirecting hypercalls from the backend to routines >>>>> which emulate the behaviour that PV backends expect i.e. grant >>>>> table and interdomain events. Next, we add support for late >>>>> initialization of xenbus, followed by implementing >>>>> frontend/backend communication mechanisms (i.e. grant tables and >>>>> interdomain event channels). Finally, introduce xen-shim.ko, >>>>> which will setup a limited Xen environment. This uses the added >>>>> functionality of Xen specific shared memory (grant tables) and >>>>> notifications (event channels). >>>> >>>> I am a bit worried by the last patches, they seem really brittle and >>>> prone to breakage. I don't know Xen well enough to understand if the >>>> lack of support for GNTMAP_host_map is fixable, but if not, you have to >>>> define a completely different hypercall. >>>> >>> I guess Ankur already answered this; so just to stack this on top of his comment. >>> >>> The xen_shim_domain() is only meant to handle the case where the backend >>> has/can-have full access to guest memory [i.e. netback and blkback would work >>> with similar assumptions as vhost?]. For the normal case, where a backend *in a >>> guest* maps and unmaps other guest memory, this is not applicable and these >>> changes don't affect that case. >>> >>> IOW, the PV backend here sits on the hypervisor, and the hypercalls aren't >>> actual hypercalls but rather invoking shim_hypercall(). The call chain would go >>> more or less like: >>> >>> >>> gnttab_map_refs(map_ops, pages) >>> HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref,...) >>> shim_hypercall() >>> shim_hcall_gntmap() >>> >>> Our reasoning was that given we are already in KVM, why mapping a page if the >>> user (i.e. the kernel PV backend) is himself? The lack of GNTMAP_host_map is how >>> the shim determines its user doesn't want to map the page. Also, there's another >>> issue where PV backends always need a struct page to reference the device >>> inflight data as Ankur pointed out. >> >> Ultimately it's up to the Xen people. It does make their API uglier, >> especially the in/out change for the parameter. If you can at least >> avoid that, it would alleviate my concerns quite a bit. > > In my view, we have two options overall: > > 1) Make it explicit, the changes the PV drivers we have to make in > order to support xen_shim_domain(). This could mean e.g. a) add a callback > argument to gnttab_map_refs() that is invoked for every page that gets looked up > successfully, and inside this callback the PV driver may update it's tracking > page. Here we no longer have this in/out parameter in gnttab_map_refs, and all > shim_domain specific bits would be a little more abstracted from Xen PV > backends. See netback example below the scissors mark. Or b) have sort of a > translate_gref() and put_gref() API that Xen PV drivers use which make it even > more explicit that there's no grant ops involved. The latter is more invasive. > > 2) The second option is to support guest grant mapping/unmapping [*] to allow > hosting PV backends inside the guest. This would remove the Xen changes in this > series completely. But it would require another guest being used > as netback/blkback/xenstored, and less performance than 1) (though, in theory, > it would be equivalent to what does Xen with grants/events). The only changes in > Linux Xen code is adding xenstored domain support, but that is useful on its own > outside the scope of this work. > > I think there's value on both; 1) is probably more familiar for KVM users > perhaps (as it is similar to what vhost does?) while 2) equates to implementing > Xen disagregation capabilities in KVM. > > Thoughts? Xen maintainers what's your take on this? What I'd like best would be a new handle (e.g. xenhost_t *) used as an abstraction layer for this kind of stuff. It should be passed to the backends and those would pass it on to low-level Xen drivers (xenbus, event channels, grant table, ...). I was planning to do that (the xenhost_t * stuff) soon in order to add support for nested Xen using PV devices (you need two Xenstores for that as the nested dom0 is acting as Xen backend server, while using PV frontends for accessing the "real" world outside). The xenhost_t should be used for: - accessing Xenstore - issuing and receiving events - doing hypercalls - grant table operations So exactly the kind of stuff you want to do, too. Juergen 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 X-Spam-Level: X-Spam-Status: No, score=-1.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 91B86C282CE for ; Mon, 8 Apr 2019 06:44:31 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (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 6B72F20870 for ; Mon, 8 Apr 2019 06:44:31 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6B72F20870 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hDO0p-00031x-Ft; Mon, 08 Apr 2019 06:44:11 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hDO0n-00031s-Dl for xen-devel@lists.xenproject.org; Mon, 08 Apr 2019 06:44:09 +0000 X-Inumbo-ID: b470db04-59c9-11e9-92d7-bc764e045a96 Received: from mx1.suse.de (unknown [195.135.220.15]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS id b470db04-59c9-11e9-92d7-bc764e045a96; Mon, 08 Apr 2019 06:44:07 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 7A456AFF4; Mon, 8 Apr 2019 06:44:05 +0000 (UTC) To: Joao Martins , Paolo Bonzini References: <20190220201609.28290-1-joao.m.martins@oracle.com> <35051310-c497-8ad5-4434-1b8426a317d2@redhat.com> <8b1f4912-4f92-69ae-ae01-d899d5640572@oracle.com> <3ee91f33-2973-c2db-386f-afbf138081b4@redhat.com> <59676804-786d-3df8-7752-8e45dec6d65b@oracle.com> From: Juergen Gross Openpgp: preference=signencrypt Autocrypt: addr=jgross@suse.com; prefer-encrypt=mutual; keydata= mQENBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOB ycWxw3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJve dYm8Of8Zd621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJ NwQpd369y9bfIhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvx XP3FAp2pkW0xqG7/377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEB AAG0H0p1ZXJnZW4gR3Jvc3MgPGpncm9zc0BzdXNlLmNvbT6JATkEEwECACMFAlOMcK8CGwMH CwkIBwMCAQYVCAIJCgsEFgIDAQIeAQIXgAAKCRCw3p3WKL8TL8eZB/9G0juS/kDY9LhEXseh mE9U+iA1VsLhgDqVbsOtZ/S14LRFHczNd/Lqkn7souCSoyWsBs3/wO+OjPvxf7m+Ef+sMtr0 G5lCWEWa9wa0IXx5HRPW/ScL+e4AVUbL7rurYMfwCzco+7TfjhMEOkC+va5gzi1KrErgNRHH kg3PhlnRY0Udyqx++UYkAsN4TQuEhNN32MvN0Np3WlBJOgKcuXpIElmMM5f1BBzJSKBkW0Jc Wy3h2Wy912vHKpPV/Xv7ZwVJ27v7KcuZcErtptDevAljxJtE7aJG6WiBzm+v9EswyWxwMCIO RoVBYuiocc51872tRGywc03xaQydB+9R7BHPuQENBFOMcBYBCADLMfoA44MwGOB9YT1V4KCy vAfd7E0BTfaAurbG+Olacciz3yd09QOmejFZC6AnoykydyvTFLAWYcSCdISMr88COmmCbJzn sHAogjexXiif6ANUUlHpjxlHCCcELmZUzomNDnEOTxZFeWMTFF9Rf2k2F0Tl4E5kmsNGgtSa aMO0rNZoOEiD/7UfPP3dfh8JCQ1VtUUsQtT1sxos8Eb/HmriJhnaTZ7Hp3jtgTVkV0ybpgFg w6WMaRkrBh17mV0z2ajjmabB7SJxcouSkR0hcpNl4oM74d2/VqoW4BxxxOD1FcNCObCELfIS auZx+XT6s+CE7Qi/c44ibBMR7hyjdzWbABEBAAGJAR8EGAECAAkFAlOMcBYCGwwACgkQsN6d 1ii/Ey9D+Af/WFr3q+bg/8v5tCknCtn92d5lyYTBNt7xgWzDZX8G6/pngzKyWfedArllp0Pn fgIXtMNV+3t8Li1Tg843EXkP7+2+CQ98MB8XvvPLYAfW8nNDV85TyVgWlldNcgdv7nn1Sq8g HwB2BHdIAkYce3hEoDQXt/mKlgEGsLpzJcnLKimtPXQQy9TxUaLBe9PInPd+Ohix0XOlY+Uk QFEx50Ki3rSDl2Zt2tnkNYKUCvTJq7jvOlaPd6d/W0tZqpyy7KVay+K4aMobDsodB3dvEAs6 ScCnh03dDAFgIq5nsB11j3KPKdVoPlfucX2c7kGNH+LUMbzqV6beIENfNexkOfxHf4kBrQQY AQgAIBYhBIUSZ3Lo9gSUpdCX97DendYovxMvBQJa3fDQAhsCAIEJELDendYovxMvdiAEGRYI AB0WIQRTLbB6QfY48x44uB6AXGG7T9hjvgUCWt3w0AAKCRCAXGG7T9hjvk2LAP99B/9FenK/ 1lfifxQmsoOrjbZtzCS6OKxPqOLHaY47BgEAqKKn36YAPpbk09d2GTVetoQJwiylx/Z9/mQI CUbQMg1pNQf9EjA1bNcMbnzJCgt0P9Q9wWCLwZa01SnQWFz8Z4HEaKldie+5bHBL5CzVBrLv 81tqX+/j95llpazzCXZW2sdNL3r8gXqrajSox7LR2rYDGdltAhQuISd2BHrbkQVEWD4hs7iV 1KQHe2uwXbKlguKPhk5ubZxqwsg/uIHw0qZDk+d0vxjTtO2JD5Jv/CeDgaBX4Emgp0NYs8IC UIyKXBtnzwiNv4cX9qKlz2Gyq9b+GdcLYZqMlIBjdCz0yJvgeb3WPNsCOanvbjelDhskx9gd 6YUUFFqgsLtrKpCNyy203a58g2WosU9k9H+LcheS37Ph2vMVTISMszW9W8gyORSgmw== Message-ID: Date: Mon, 8 Apr 2019 08:44:03 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.5.1 MIME-Version: 1.0 In-Reply-To: <59676804-786d-3df8-7752-8e45dec6d65b@oracle.com> Content-Language: de-DE Subject: Re: [Xen-devel] [PATCH RFC 00/39] x86/KVM: Xen HVM guest support X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Stefano Stabellini , kvm@vger.kernel.org, =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , x86@kernel.org, linux-kernel@vger.kernel.org, Ankur Arora , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" , xen-devel@lists.xenproject.org, Boris Ostrovsky , Thomas Gleixner Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" T24gMTIvMDMvMjAxOSAxODoxNCwgSm9hbyBNYXJ0aW5zIHdyb3RlOgo+IE9uIDIvMjIvMTkgNDo1 OSBQTSwgUGFvbG8gQm9uemluaSB3cm90ZToKPj4gT24gMjEvMDIvMTkgMTI6NDUsIEpvYW8gTWFy dGlucyB3cm90ZToKPj4+IE9uIDIvMjAvMTkgOTowOSBQTSwgUGFvbG8gQm9uemluaSB3cm90ZToK Pj4+PiBPbiAyMC8wMi8xOSAyMToxNSwgSm9hbyBNYXJ0aW5zIHdyb3RlOgo+Pj4+PiAgMi4gUFYg RHJpdmVyIHN1cHBvcnQgKHBhdGNoZXMgMTcgLSAzOSkKPj4+Pj4KPj4+Pj4gIFdlIHN0YXJ0IGJ5 IHJlZGlyZWN0aW5nIGh5cGVyY2FsbHMgZnJvbSB0aGUgYmFja2VuZCB0byByb3V0aW5lcwo+Pj4+ PiAgd2hpY2ggZW11bGF0ZSB0aGUgYmVoYXZpb3VyIHRoYXQgUFYgYmFja2VuZHMgZXhwZWN0IGku ZS4gZ3JhbnQKPj4+Pj4gIHRhYmxlIGFuZCBpbnRlcmRvbWFpbiBldmVudHMuIE5leHQsIHdlIGFk ZCBzdXBwb3J0IGZvciBsYXRlCj4+Pj4+ICBpbml0aWFsaXphdGlvbiBvZiB4ZW5idXMsIGZvbGxv d2VkIGJ5IGltcGxlbWVudGluZwo+Pj4+PiAgZnJvbnRlbmQvYmFja2VuZCBjb21tdW5pY2F0aW9u IG1lY2hhbmlzbXMgKGkuZS4gZ3JhbnQgdGFibGVzIGFuZAo+Pj4+PiAgaW50ZXJkb21haW4gZXZl bnQgY2hhbm5lbHMpLiBGaW5hbGx5LCBpbnRyb2R1Y2UgeGVuLXNoaW0ua28sCj4+Pj4+ICB3aGlj aCB3aWxsIHNldHVwIGEgbGltaXRlZCBYZW4gZW52aXJvbm1lbnQuIFRoaXMgdXNlcyB0aGUgYWRk ZWQKPj4+Pj4gIGZ1bmN0aW9uYWxpdHkgb2YgWGVuIHNwZWNpZmljIHNoYXJlZCBtZW1vcnkgKGdy YW50IHRhYmxlcykgYW5kCj4+Pj4+ICBub3RpZmljYXRpb25zIChldmVudCBjaGFubmVscykuCj4+ Pj4KPj4+PiBJIGFtIGEgYml0IHdvcnJpZWQgYnkgdGhlIGxhc3QgcGF0Y2hlcywgdGhleSBzZWVt IHJlYWxseSBicml0dGxlIGFuZAo+Pj4+IHByb25lIHRvIGJyZWFrYWdlLiAgSSBkb24ndCBrbm93 IFhlbiB3ZWxsIGVub3VnaCB0byB1bmRlcnN0YW5kIGlmIHRoZQo+Pj4+IGxhY2sgb2Ygc3VwcG9y dCBmb3IgR05UTUFQX2hvc3RfbWFwIGlzIGZpeGFibGUsIGJ1dCBpZiBub3QsIHlvdSBoYXZlIHRv Cj4+Pj4gZGVmaW5lIGEgY29tcGxldGVseSBkaWZmZXJlbnQgaHlwZXJjYWxsLgo+Pj4+Cj4+PiBJ IGd1ZXNzIEFua3VyIGFscmVhZHkgYW5zd2VyZWQgdGhpczsgc28ganVzdCB0byBzdGFjayB0aGlz IG9uIHRvcCBvZiBoaXMgY29tbWVudC4KPj4+Cj4+PiBUaGUgeGVuX3NoaW1fZG9tYWluKCkgaXMg b25seSBtZWFudCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIGJhY2tlbmQKPj4+IGhhcy9j YW4taGF2ZSBmdWxsIGFjY2VzcyB0byBndWVzdCBtZW1vcnkgW2kuZS4gbmV0YmFjayBhbmQgYmxr YmFjayB3b3VsZCB3b3JrCj4+PiB3aXRoIHNpbWlsYXIgYXNzdW1wdGlvbnMgYXMgdmhvc3Q/XS4g Rm9yIHRoZSBub3JtYWwgY2FzZSwgd2hlcmUgYSBiYWNrZW5kICppbiBhCj4+PiBndWVzdCogbWFw cyBhbmQgdW5tYXBzIG90aGVyIGd1ZXN0IG1lbW9yeSwgdGhpcyBpcyBub3QgYXBwbGljYWJsZSBh bmQgdGhlc2UKPj4+IGNoYW5nZXMgZG9uJ3QgYWZmZWN0IHRoYXQgY2FzZS4KPj4+Cj4+PiBJT1cs IHRoZSBQViBiYWNrZW5kIGhlcmUgc2l0cyBvbiB0aGUgaHlwZXJ2aXNvciwgYW5kIHRoZSBoeXBl cmNhbGxzIGFyZW4ndAo+Pj4gYWN0dWFsIGh5cGVyY2FsbHMgYnV0IHJhdGhlciBpbnZva2luZyBz aGltX2h5cGVyY2FsbCgpLiBUaGUgY2FsbCBjaGFpbiB3b3VsZCBnbwo+Pj4gbW9yZSBvciBsZXNz IGxpa2U6Cj4+Pgo+Pj4gPG5ldGJhY2t8YmxrYmFja3xzY3NpYmFjaz4KPj4+ICBnbnR0YWJfbWFw X3JlZnMobWFwX29wcywgcGFnZXMpCj4+PiAgICBIWVBFUlZJU09SX2dyYW50X3RhYmxlX29wKEdO VFRBQk9QX21hcF9ncmFudF9yZWYsLi4uKQo+Pj4gICAgICBzaGltX2h5cGVyY2FsbCgpCj4+PiAg ICAgICAgc2hpbV9oY2FsbF9nbnRtYXAoKQo+Pj4KPj4+IE91ciByZWFzb25pbmcgd2FzIHRoYXQg Z2l2ZW4gd2UgYXJlIGFscmVhZHkgaW4gS1ZNLCB3aHkgbWFwcGluZyBhIHBhZ2UgaWYgdGhlCj4+ PiB1c2VyIChpLmUuIHRoZSBrZXJuZWwgUFYgYmFja2VuZCkgaXMgaGltc2VsZj8gVGhlIGxhY2sg b2YgR05UTUFQX2hvc3RfbWFwIGlzIGhvdwo+Pj4gdGhlIHNoaW0gZGV0ZXJtaW5lcyBpdHMgdXNl ciBkb2Vzbid0IHdhbnQgdG8gbWFwIHRoZSBwYWdlLiBBbHNvLCB0aGVyZSdzIGFub3RoZXIKPj4+ IGlzc3VlIHdoZXJlIFBWIGJhY2tlbmRzIGFsd2F5cyBuZWVkIGEgc3RydWN0IHBhZ2UgdG8gcmVm ZXJlbmNlIHRoZSBkZXZpY2UKPj4+IGluZmxpZ2h0IGRhdGEgYXMgQW5rdXIgcG9pbnRlZCBvdXQu Cj4+Cj4+IFVsdGltYXRlbHkgaXQncyB1cCB0byB0aGUgWGVuIHBlb3BsZS4gIEl0IGRvZXMgbWFr ZSB0aGVpciBBUEkgdWdsaWVyLAo+PiBlc3BlY2lhbGx5IHRoZSBpbi9vdXQgY2hhbmdlIGZvciB0 aGUgcGFyYW1ldGVyLiAgSWYgeW91IGNhbiBhdCBsZWFzdAo+PiBhdm9pZCB0aGF0LCBpdCB3b3Vs ZCBhbGxldmlhdGUgbXkgY29uY2VybnMgcXVpdGUgYSBiaXQuCj4gCj4gSW4gbXkgdmlldywgd2Ug aGF2ZSB0d28gb3B0aW9ucyBvdmVyYWxsOgo+IAo+IDEpIE1ha2UgaXQgZXhwbGljaXQsIHRoZSBj aGFuZ2VzIHRoZSBQViBkcml2ZXJzIHdlIGhhdmUgdG8gbWFrZSBpbgo+IG9yZGVyIHRvIHN1cHBv cnQgeGVuX3NoaW1fZG9tYWluKCkuIFRoaXMgY291bGQgbWVhbiBlLmcuIGEpIGFkZCBhIGNhbGxi YWNrCj4gYXJndW1lbnQgdG8gZ250dGFiX21hcF9yZWZzKCkgdGhhdCBpcyBpbnZva2VkIGZvciBl dmVyeSBwYWdlIHRoYXQgZ2V0cyBsb29rZWQgdXAKPiBzdWNjZXNzZnVsbHksIGFuZCBpbnNpZGUg dGhpcyBjYWxsYmFjayB0aGUgUFYgZHJpdmVyIG1heSB1cGRhdGUgaXQncyB0cmFja2luZwo+IHBh Z2UuIEhlcmUgd2Ugbm8gbG9uZ2VyIGhhdmUgdGhpcyBpbi9vdXQgcGFyYW1ldGVyIGluIGdudHRh Yl9tYXBfcmVmcywgYW5kIGFsbAo+IHNoaW1fZG9tYWluIHNwZWNpZmljIGJpdHMgd291bGQgYmUg YSBsaXR0bGUgbW9yZSBhYnN0cmFjdGVkIGZyb20gWGVuIFBWCj4gYmFja2VuZHMuIFNlZSBuZXRi YWNrIGV4YW1wbGUgYmVsb3cgdGhlIHNjaXNzb3JzIG1hcmsuIE9yIGIpIGhhdmUgc29ydCBvZiBh Cj4gdHJhbnNsYXRlX2dyZWYoKSBhbmQgcHV0X2dyZWYoKSBBUEkgdGhhdCBYZW4gUFYgZHJpdmVy cyB1c2Ugd2hpY2ggbWFrZSBpdCBldmVuCj4gbW9yZSBleHBsaWNpdCB0aGF0IHRoZXJlJ3Mgbm8g Z3JhbnQgb3BzIGludm9sdmVkLiBUaGUgbGF0dGVyIGlzIG1vcmUgaW52YXNpdmUuCj4gCj4gMikg VGhlIHNlY29uZCBvcHRpb24gaXMgdG8gc3VwcG9ydCBndWVzdCBncmFudCBtYXBwaW5nL3VubWFw cGluZyBbKl0gdG8gYWxsb3cKPiBob3N0aW5nIFBWIGJhY2tlbmRzIGluc2lkZSB0aGUgZ3Vlc3Qu IFRoaXMgd291bGQgcmVtb3ZlIHRoZSBYZW4gY2hhbmdlcyBpbiB0aGlzCj4gc2VyaWVzIGNvbXBs ZXRlbHkuIEJ1dCBpdCB3b3VsZCByZXF1aXJlIGFub3RoZXIgZ3Vlc3QgYmVpbmcgdXNlZAo+IGFz IG5ldGJhY2svYmxrYmFjay94ZW5zdG9yZWQsIGFuZCBsZXNzIHBlcmZvcm1hbmNlIHRoYW4gMSkg KHRob3VnaCwgaW4gdGhlb3J5LAo+IGl0IHdvdWxkIGJlIGVxdWl2YWxlbnQgdG8gd2hhdCBkb2Vz IFhlbiB3aXRoIGdyYW50cy9ldmVudHMpLiBUaGUgb25seSBjaGFuZ2VzIGluCj4gTGludXggWGVu IGNvZGUgaXMgYWRkaW5nIHhlbnN0b3JlZCBkb21haW4gc3VwcG9ydCwgYnV0IHRoYXQgaXMgdXNl ZnVsIG9uIGl0cyBvd24KPiBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIHdvcmsuCj4gCj4gSSB0 aGluayB0aGVyZSdzIHZhbHVlIG9uIGJvdGg7IDEpIGlzIHByb2JhYmx5IG1vcmUgZmFtaWxpYXIg Zm9yIEtWTSB1c2Vycwo+IHBlcmhhcHMgKGFzIGl0IGlzIHNpbWlsYXIgdG8gd2hhdCB2aG9zdCBk b2VzPykgd2hpbGUgIDIpIGVxdWF0ZXMgdG8gaW1wbGVtZW50aW5nCj4gWGVuIGRpc2FncmVnYXRp b24gY2FwYWJpbGl0aWVzIGluIEtWTS4KPiAKPiBUaG91Z2h0cz8gWGVuIG1haW50YWluZXJzIHdo YXQncyB5b3VyIHRha2Ugb24gdGhpcz8KCldoYXQgSSdkIGxpa2UgYmVzdCB3b3VsZCBiZSBhIG5l dyBoYW5kbGUgKGUuZy4geGVuaG9zdF90ICopIHVzZWQgYXMgYW4KYWJzdHJhY3Rpb24gbGF5ZXIg Zm9yIHRoaXMga2luZCBvZiBzdHVmZi4gSXQgc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUKYmFja2Vu ZHMgYW5kIHRob3NlIHdvdWxkIHBhc3MgaXQgb24gdG8gbG93LWxldmVsIFhlbiBkcml2ZXJzICh4 ZW5idXMsCmV2ZW50IGNoYW5uZWxzLCBncmFudCB0YWJsZSwgLi4uKS4KCkkgd2FzIHBsYW5uaW5n IHRvIGRvIHRoYXQgKHRoZSB4ZW5ob3N0X3QgKiBzdHVmZikgc29vbiBpbiBvcmRlciB0byBhZGQK c3VwcG9ydCBmb3IgbmVzdGVkIFhlbiB1c2luZyBQViBkZXZpY2VzICh5b3UgbmVlZCB0d28gWGVu c3RvcmVzIGZvciB0aGF0CmFzIHRoZSBuZXN0ZWQgZG9tMCBpcyBhY3RpbmcgYXMgWGVuIGJhY2tl bmQgc2VydmVyLCB3aGlsZSB1c2luZyBQVgpmcm9udGVuZHMgZm9yIGFjY2Vzc2luZyB0aGUgInJl YWwiIHdvcmxkIG91dHNpZGUpLgoKVGhlIHhlbmhvc3RfdCBzaG91bGQgYmUgdXNlZCBmb3I6Cgot IGFjY2Vzc2luZyBYZW5zdG9yZQotIGlzc3VpbmcgYW5kIHJlY2VpdmluZyBldmVudHMKLSBkb2lu ZyBoeXBlcmNhbGxzCi0gZ3JhbnQgdGFibGUgb3BlcmF0aW9ucwoKU28gZXhhY3RseSB0aGUga2lu ZCBvZiBzdHVmZiB5b3Ugd2FudCB0byBkbywgdG9vLgoKCkp1ZXJnZW4KCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QK WGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5v cmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=