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=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,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 F0FD0C433E6 for ; Mon, 1 Feb 2021 13:15:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BB06864E2A for ; Mon, 1 Feb 2021 13:15:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231466AbhBANO4 (ORCPT ); Mon, 1 Feb 2021 08:14:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40828 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231314AbhBANOy (ORCPT ); Mon, 1 Feb 2021 08:14:54 -0500 Received: from mail-qk1-x72d.google.com (mail-qk1-x72d.google.com [IPv6:2607:f8b0:4864:20::72d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DC968C06174A for ; Mon, 1 Feb 2021 05:14:13 -0800 (PST) Received: by mail-qk1-x72d.google.com with SMTP id a19so16107820qka.2 for ; Mon, 01 Feb 2021 05:14:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=m/m4iDNhXlC/4SoepFWMucxyT4bgcrx85mTDKJelr6A=; b=IFGNwmuuTtFzC4nyasNkq/kmGH1XxBzW3n6shA/3Aq88TjZkak+MuRj+GqbtUEax/5 jmF/G4GG6QZL0JCK6d4mfZmN8ZlVdHteyLuw9fCY58FEcW07EEGga0Z7lUKra04nmEl3 pqQizOLJE7GCXECY54S21BxPO2zpzg/1rjbbhbXtefFsaisv3885IzSE92YowpuSrI9y 3z6mi72i/o0p4BnUq6CJOLwKJEy4iPAs5bj2P/9mU7XwKjv/m8/KePWuNR2tjWPM9El9 hKEoWsUJiUwQp0BafM8MM1hIHR9k/Oj0jXbXnZ8b+2CgrsNZ3ZLTyMSnKCEurXK4/QhK uWVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=m/m4iDNhXlC/4SoepFWMucxyT4bgcrx85mTDKJelr6A=; b=YbgBENinE66huukH6pdOFUE3RJ8VQdAJC3m4ULBddX7PRkWe1bOuS0Vil4jWQ9xasX hsYEq9+uE84ie+OfvvG1Qh8qXI1WaR7NVtH9/xj7OSghu8hi1I74hTH+/yEQBCAVnysT B8uatOQ69cgTg3dGqz1CMHZQkQqRhPMrD32Kr3Hsh9Yl9z6o3fxfcjN5MUwxU5wGEfMX MGkhAVXq1gxS4aVHjpoCbq8Q5iXp3c3SMp2LN+uSKZ6T/u52GddSrRboalqdgPQSNdv3 GR5mPPWm8wycGSH3zN/ZGGdnZ/v9HdDXAeH2dWu4+leRRpBw50P4r34BqFdwwaOD8f07 VlMw== X-Gm-Message-State: AOAM531OdAYpQ6Jc0esIerhNkdXh7261j9+nhpx+e+lIay6vDA5VI8Vy adVNb1u3xxM2RVbplF07SLE4c2M46/kXPSvd4BA= X-Google-Smtp-Source: ABdhPJxhHhM+hyiqlTKN68abhPZ0I8LNquuVChIU64oCRP2OQGuNQYluOjMTxVjJIoyl+9xLVQ0nB3dSbM9m/mZAN5c= X-Received: by 2002:a05:620a:5fa:: with SMTP id z26mr16004586qkg.108.1612185253097; Mon, 01 Feb 2021 05:14:13 -0800 (PST) MIME-Version: 1.0 References: <20210124232007.21639-1-richard@nod.at> In-Reply-To: <20210124232007.21639-1-richard@nod.at> From: Richard Weinberger Date: Mon, 1 Feb 2021 14:14:01 +0100 Message-ID: Subject: Re: [PATCH 0/8] MUSE: Userspace backed MTD v3 To: Richard Weinberger Cc: Miklos Szeredi , Miquel Raynal , Vignesh Raghavendra , Boris Brezillon , rminnich@google.com, sven@narfation.org, LKML , linux-mtd@lists.infradead.org, "open list:FUSE: FILESYSTEM..." Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org *friendly FUSE maintainer ping* :-) On Mon, Jan 25, 2021 at 12:24 AM Richard Weinberger wrote: > > I'm happy to announce the first non-RFC version of this patch set. > Over the xmas holidays I found some time to experiment with various users= pace > implementations of MTDs and gave the kernel side more fine-tuning. > > Rationale: > ---------- > > When working with flash devices a common task is emulating them to run va= rious > tests or inspect dumps from real hardware. To achieve that we have plenty= of > emulators in the MTD subsystem: mtdram, block2mtd, nandsim. > > Each of them implements an ad-hoc MTD and have various drawbacks. > Over the last years some developers tried to extend them but these attemp= ts > often got rejected because they added just more adhoc feature instead of > addressing overall problems. > > MUSE is a novel approach to address the need of advanced MTD emulators. > Advanced means in this context supporting different (vendor specific) ima= ge > formats, different ways for fault injection (fuzzing) and recoding/replay= ing > IOs to emulate power cuts. > > The core goal of MUSE is having the complexity on the userspace side and > only a small MTD driver in kernelspace. > While playing with different approaches I realized that FUSE offers every= thing > we need. So MUSE is a little like CUSE except that it does not implement = a > bare character device but an MTD. > > Notes: > ------ > > - OOB support is currently limited. Currently MUSE has no support for pro= cessing > in- and out-band in the same MTD operation. It is good enough to make J= FFS2 > happy. This limitation is because FUSE has no support more than one var= iable > length buffer in a FUSE request. > At least I didn=E2=80=99t find a good way to pass more than one buffer = to a request. > Maybe FUSE folks can correct me. :-) > > - Every MTD read/write operation maps 1:1 to a MUSE_READ/WRITE opcode. > Since FUSE requests are not cheap, the amount of read/written bytes in = a MTD > operation as a huge impact on the performance. Especially when NOR styl= e MTDs > are implemented in userspace a large writebufsize should be requested t= o gain > good write performance. > On the other hand, MTD operations with lengths larger than writesize ar= e *not* > split up into multiple MUSE_READ/WRITE requests. This means that usersp= ace > has to split them manually when doing power-cut emulation. > > - MUSE is not super fast. On my i5 workstation nandsim is almost twice as= fast > as a NAND flash in userspace. But MUSE is still magnitudes faster than = any > real world MTD out there. So it is good enough for the use cases I have= in > mind. > > Changelog: > ---------- > > Changes since v2 (RFC): > - OOB support > - MUSE_READ/WRITE opcodes are no longer a min IO MTD unit > - MTD partitions support via mtdparts string > - More code cleanup > - Code rebased to 5.11-rc4 > > Changes since v1 (RFC): > - Rewrote IO path, fuse_direct_io() is no longer used. > Instead of cheating fuse_direct_io() use custom ops to implement > reading and writing. That way MUSE no longer needs a dummy file object > nor a fuse file object. > In MTD all IO is synchronous and operations on kernel buffers, this > makes IO processing simple for MUSE. > - Support for bad blocks. > - No more (ab)use of FUSE ops such as FUSE_FSYNC. > - Major code cleanup. > > This series can also be found at: > git://git.kernel.org/pub/scm/linux/kernel/git/rw/misc.git muse_v3 > > Richard Weinberger (8): > fuse: Export fuse_simple_request > fuse: Export IO helpers > fuse: Make cuse_parse_one a common helper > mtd: Add MTD_MUSE flag > mtd: Allow passing a custom cmdline to cmdline line parser > fuse: Add MUSE specific defines FUSE interface > fuse: Implement MUSE - MTD in userspace > MAINTAINERS: Add entry for MUSE > > Documentation/ABI/testing/sysfs-class-mtd | 8 + > MAINTAINERS | 7 + > drivers/mtd/parsers/cmdlinepart.c | 73 +- > fs/fuse/Kconfig | 15 + > fs/fuse/Makefile | 2 + > fs/fuse/cuse.c | 58 +- > fs/fuse/dev.c | 1 + > fs/fuse/file.c | 16 +- > fs/fuse/fuse_i.h | 18 + > fs/fuse/helper.c | 70 ++ > fs/fuse/muse.c | 1086 +++++++++++++++++++++ > include/linux/mtd/partitions.h | 2 + > include/uapi/linux/fuse.h | 76 ++ > include/uapi/mtd/mtd-abi.h | 1 + > 14 files changed, 1346 insertions(+), 87 deletions(-) > create mode 100644 fs/fuse/helper.c > create mode 100644 fs/fuse/muse.c > > -- > 2.26.2 > --=20 Thanks, //richard 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=-10.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,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 B1200C433DB for ; Mon, 1 Feb 2021 13:14:58 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 6346360C41 for ; Mon, 1 Feb 2021 13:14:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6346360C41 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=m6f8ND6JjJaSCbx+pvNWItZ1S8/byRUR1IS3PAGJlTA=; b=3O2L8BR07Q2+JQJaobJG6jL4r xV2NeRoDK/xtfkXNF3UQ55AUhpgoVsQ0Un7CCJhRqdCM8GhY/7J6DJD4TaoWUS32sPNkWBYEuW03T IZHqGzOV38BK9u+K5wteWNolfaNRpQNEYbFB0+YixiHeMc+KddWVcPI39bxhEKyF5RPwyXG3m2FBm XfLEmVoRaU64B0C7qzr1AbXLaBWeEfHGkifofH1EIDjutk6WpFVAXwVQAWaX4KTp5i+YmyWB4Hj30 wMudu1z8MhuUABRtDOvvaPMu+ug6+lk8h3OpbpyW4A2gemzJvB1+hPc/vrmmdP5NrfI71nQ8QN8J6 oZynX6UVw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l6Z22-000747-OE; Mon, 01 Feb 2021 13:14:18 +0000 Received: from mail-qk1-x72a.google.com ([2607:f8b0:4864:20::72a]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l6Z20-00073G-P3 for linux-mtd@lists.infradead.org; Mon, 01 Feb 2021 13:14:17 +0000 Received: by mail-qk1-x72a.google.com with SMTP id x81so16094833qkb.0 for ; Mon, 01 Feb 2021 05:14:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=m/m4iDNhXlC/4SoepFWMucxyT4bgcrx85mTDKJelr6A=; b=IFGNwmuuTtFzC4nyasNkq/kmGH1XxBzW3n6shA/3Aq88TjZkak+MuRj+GqbtUEax/5 jmF/G4GG6QZL0JCK6d4mfZmN8ZlVdHteyLuw9fCY58FEcW07EEGga0Z7lUKra04nmEl3 pqQizOLJE7GCXECY54S21BxPO2zpzg/1rjbbhbXtefFsaisv3885IzSE92YowpuSrI9y 3z6mi72i/o0p4BnUq6CJOLwKJEy4iPAs5bj2P/9mU7XwKjv/m8/KePWuNR2tjWPM9El9 hKEoWsUJiUwQp0BafM8MM1hIHR9k/Oj0jXbXnZ8b+2CgrsNZ3ZLTyMSnKCEurXK4/QhK uWVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=m/m4iDNhXlC/4SoepFWMucxyT4bgcrx85mTDKJelr6A=; b=s3Aq1HjsAAeNt/8BGafRTHDEKgIHp3XKyGTlyxiLINnpOYcj6xZBac1pREjjQn8cJi bFz/r3L+OS5OeOoMzik5srjn1hvjx2RHslji6Bai4vgTlVToLa768DHffce4Co/ReK7/ tcXlrG7b6FsNyYi4ZVMNjDhETKetSFUFPPfoUVQbiTv5QKI7bX8TKUto976D1JSz3Q+X RQ6mgL3QMArjJwfYJuQbaeK3C0j48ZQIXQnuXkiQ8qXlFnH12PDzh1Eu3DSGZ5LSHecc Tgb7hNcmMnCVegkUpEpneedEIc406VQNlfgw/DwgVCUV0U5N1XS4zzEZ6dAtysjtcP9+ 1RvQ== X-Gm-Message-State: AOAM530uUqfYCHLLJ7w0Hy2Hwphk333dvwB+XQI5aHG/e1jMUOmgZ+nD LN2Md1Vw/Lf/TJbLJkGgRTKZ+IpTl0FYIarLCM2H6mO8 X-Google-Smtp-Source: ABdhPJxhHhM+hyiqlTKN68abhPZ0I8LNquuVChIU64oCRP2OQGuNQYluOjMTxVjJIoyl+9xLVQ0nB3dSbM9m/mZAN5c= X-Received: by 2002:a05:620a:5fa:: with SMTP id z26mr16004586qkg.108.1612185253097; Mon, 01 Feb 2021 05:14:13 -0800 (PST) MIME-Version: 1.0 References: <20210124232007.21639-1-richard@nod.at> In-Reply-To: <20210124232007.21639-1-richard@nod.at> From: Richard Weinberger Date: Mon, 1 Feb 2021 14:14:01 +0100 Message-ID: Subject: Re: [PATCH 0/8] MUSE: Userspace backed MTD v3 To: Richard Weinberger X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210201_081416_920287_9F234505 X-CRM114-Status: GOOD ( 29.07 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Vignesh Raghavendra , Miklos Szeredi , "open list:FUSE: FILESYSTEM..." , Miquel Raynal , LKML , Boris Brezillon , linux-mtd@lists.infradead.org, rminnich@google.com, sven@narfation.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org KmZyaWVuZGx5IEZVU0UgbWFpbnRhaW5lciBwaW5nKiA6LSkKCk9uIE1vbiwgSmFuIDI1LCAyMDIx IGF0IDEyOjI0IEFNIFJpY2hhcmQgV2VpbmJlcmdlciA8cmljaGFyZEBub2QuYXQ+IHdyb3RlOgo+ Cj4gSSdtIGhhcHB5IHRvIGFubm91bmNlIHRoZSBmaXJzdCBub24tUkZDIHZlcnNpb24gb2YgdGhp cyBwYXRjaCBzZXQuCj4gT3ZlciB0aGUgeG1hcyBob2xpZGF5cyBJIGZvdW5kIHNvbWUgdGltZSB0 byBleHBlcmltZW50IHdpdGggdmFyaW91cyB1c2Vyc3BhY2UKPiBpbXBsZW1lbnRhdGlvbnMgb2Yg TVREcyBhbmQgZ2F2ZSB0aGUga2VybmVsIHNpZGUgbW9yZSBmaW5lLXR1bmluZy4KPgo+IFJhdGlv bmFsZToKPiAtLS0tLS0tLS0tCj4KPiBXaGVuIHdvcmtpbmcgd2l0aCBmbGFzaCBkZXZpY2VzIGEg Y29tbW9uIHRhc2sgaXMgZW11bGF0aW5nIHRoZW0gdG8gcnVuIHZhcmlvdXMKPiB0ZXN0cyBvciBp bnNwZWN0IGR1bXBzIGZyb20gcmVhbCBoYXJkd2FyZS4gVG8gYWNoaWV2ZSB0aGF0IHdlIGhhdmUg cGxlbnR5IG9mCj4gZW11bGF0b3JzIGluIHRoZSBNVEQgc3Vic3lzdGVtOiBtdGRyYW0sIGJsb2Nr Mm10ZCwgbmFuZHNpbS4KPgo+IEVhY2ggb2YgdGhlbSBpbXBsZW1lbnRzIGFuIGFkLWhvYyBNVEQg YW5kIGhhdmUgdmFyaW91cyBkcmF3YmFja3MuCj4gT3ZlciB0aGUgbGFzdCB5ZWFycyBzb21lIGRl dmVsb3BlcnMgdHJpZWQgdG8gZXh0ZW5kIHRoZW0gYnV0IHRoZXNlIGF0dGVtcHRzCj4gb2Z0ZW4g Z290IHJlamVjdGVkIGJlY2F1c2UgdGhleSBhZGRlZCBqdXN0IG1vcmUgYWRob2MgZmVhdHVyZSBp bnN0ZWFkIG9mCj4gYWRkcmVzc2luZyBvdmVyYWxsIHByb2JsZW1zLgo+Cj4gTVVTRSBpcyBhIG5v dmVsIGFwcHJvYWNoIHRvIGFkZHJlc3MgdGhlIG5lZWQgb2YgYWR2YW5jZWQgTVREIGVtdWxhdG9y cy4KPiBBZHZhbmNlZCBtZWFucyBpbiB0aGlzIGNvbnRleHQgc3VwcG9ydGluZyBkaWZmZXJlbnQg KHZlbmRvciBzcGVjaWZpYykgaW1hZ2UKPiBmb3JtYXRzLCBkaWZmZXJlbnQgd2F5cyBmb3IgZmF1 bHQgaW5qZWN0aW9uIChmdXp6aW5nKSBhbmQgcmVjb2RpbmcvcmVwbGF5aW5nCj4gSU9zIHRvIGVt dWxhdGUgcG93ZXIgY3V0cy4KPgo+IFRoZSBjb3JlIGdvYWwgb2YgTVVTRSBpcyBoYXZpbmcgdGhl IGNvbXBsZXhpdHkgb24gdGhlIHVzZXJzcGFjZSBzaWRlIGFuZAo+IG9ubHkgYSBzbWFsbCBNVEQg ZHJpdmVyIGluIGtlcm5lbHNwYWNlLgo+IFdoaWxlIHBsYXlpbmcgd2l0aCBkaWZmZXJlbnQgYXBw cm9hY2hlcyBJIHJlYWxpemVkIHRoYXQgRlVTRSBvZmZlcnMgZXZlcnl0aGluZwo+IHdlIG5lZWQu IFNvIE1VU0UgaXMgYSBsaXR0bGUgbGlrZSBDVVNFIGV4Y2VwdCB0aGF0IGl0IGRvZXMgbm90IGlt cGxlbWVudCBhCj4gYmFyZSBjaGFyYWN0ZXIgZGV2aWNlIGJ1dCBhbiBNVEQuCj4KPiBOb3RlczoK PiAtLS0tLS0KPgo+IC0gT09CIHN1cHBvcnQgaXMgY3VycmVudGx5IGxpbWl0ZWQuIEN1cnJlbnRs eSBNVVNFIGhhcyBubyBzdXBwb3J0IGZvciBwcm9jZXNzaW5nCj4gICBpbi0gYW5kIG91dC1iYW5k IGluIHRoZSBzYW1lIE1URCBvcGVyYXRpb24uIEl0IGlzIGdvb2QgZW5vdWdoIHRvIG1ha2UgSkZG UzIKPiAgIGhhcHB5LiBUaGlzIGxpbWl0YXRpb24gaXMgYmVjYXVzZSBGVVNFIGhhcyBubyBzdXBw b3J0IG1vcmUgdGhhbiBvbmUgdmFyaWFibGUKPiAgIGxlbmd0aCBidWZmZXIgaW4gYSBGVVNFIHJl cXVlc3QuCj4gICBBdCBsZWFzdCBJIGRpZG7igJl0IGZpbmQgYSBnb29kIHdheSB0byBwYXNzIG1v cmUgdGhhbiBvbmUgYnVmZmVyIHRvIGEgcmVxdWVzdC4KPiAgIE1heWJlIEZVU0UgZm9sa3MgY2Fu IGNvcnJlY3QgbWUuIDotKQo+Cj4gLSBFdmVyeSBNVEQgcmVhZC93cml0ZSBvcGVyYXRpb24gbWFw cyAxOjEgdG8gYSBNVVNFX1JFQUQvV1JJVEUgb3Bjb2RlLgo+ICAgU2luY2UgRlVTRSByZXF1ZXN0 cyBhcmUgbm90IGNoZWFwLCB0aGUgYW1vdW50IG9mIHJlYWQvd3JpdHRlbiBieXRlcyBpbiBhIE1U RAo+ICAgb3BlcmF0aW9uIGFzIGEgaHVnZSBpbXBhY3Qgb24gdGhlIHBlcmZvcm1hbmNlLiBFc3Bl Y2lhbGx5IHdoZW4gTk9SIHN0eWxlIE1URHMKPiAgIGFyZSBpbXBsZW1lbnRlZCBpbiB1c2Vyc3Bh Y2UgYSBsYXJnZSB3cml0ZWJ1ZnNpemUgc2hvdWxkIGJlIHJlcXVlc3RlZCB0byBnYWluCj4gICBn b29kIHdyaXRlIHBlcmZvcm1hbmNlLgo+ICAgT24gdGhlIG90aGVyIGhhbmQsIE1URCBvcGVyYXRp b25zIHdpdGggbGVuZ3RocyBsYXJnZXIgdGhhbiB3cml0ZXNpemUgYXJlICpub3QqCj4gICBzcGxp dCB1cCBpbnRvIG11bHRpcGxlIE1VU0VfUkVBRC9XUklURSByZXF1ZXN0cy4gVGhpcyBtZWFucyB0 aGF0IHVzZXJzcGFjZQo+ICAgaGFzIHRvIHNwbGl0IHRoZW0gbWFudWFsbHkgd2hlbiBkb2luZyBw b3dlci1jdXQgZW11bGF0aW9uLgo+Cj4gLSBNVVNFIGlzIG5vdCBzdXBlciBmYXN0LiBPbiBteSBp NSB3b3Jrc3RhdGlvbiBuYW5kc2ltIGlzIGFsbW9zdCB0d2ljZSBhcyBmYXN0Cj4gICBhcyBhIE5B TkQgZmxhc2ggaW4gdXNlcnNwYWNlLiBCdXQgTVVTRSBpcyBzdGlsbCBtYWduaXR1ZGVzIGZhc3Rl ciB0aGFuIGFueQo+ICAgcmVhbCB3b3JsZCBNVEQgb3V0IHRoZXJlLiBTbyBpdCBpcyBnb29kIGVu b3VnaCBmb3IgdGhlIHVzZSBjYXNlcyBJIGhhdmUgaW4KPiAgIG1pbmQuCj4KPiBDaGFuZ2Vsb2c6 Cj4gLS0tLS0tLS0tLQo+Cj4gQ2hhbmdlcyBzaW5jZSB2MiAoUkZDKToKPiAtIE9PQiBzdXBwb3J0 Cj4gLSBNVVNFX1JFQUQvV1JJVEUgb3Bjb2RlcyBhcmUgbm8gbG9uZ2VyIGEgbWluIElPIE1URCB1 bml0Cj4gLSBNVEQgcGFydGl0aW9ucyBzdXBwb3J0IHZpYSBtdGRwYXJ0cyBzdHJpbmcKPiAtIE1v cmUgY29kZSBjbGVhbnVwCj4gLSBDb2RlIHJlYmFzZWQgdG8gNS4xMS1yYzQKPgo+IENoYW5nZXMg c2luY2UgdjEgKFJGQyk6Cj4gLSBSZXdyb3RlIElPIHBhdGgsIGZ1c2VfZGlyZWN0X2lvKCkgaXMg bm8gbG9uZ2VyIHVzZWQuCj4gICBJbnN0ZWFkIG9mIGNoZWF0aW5nIGZ1c2VfZGlyZWN0X2lvKCkg dXNlIGN1c3RvbSBvcHMgdG8gaW1wbGVtZW50Cj4gICByZWFkaW5nIGFuZCB3cml0aW5nLiBUaGF0 IHdheSBNVVNFIG5vIGxvbmdlciBuZWVkcyBhIGR1bW15IGZpbGUgb2JqZWN0Cj4gICBub3IgYSBm dXNlIGZpbGUgb2JqZWN0Lgo+ICAgSW4gTVREIGFsbCBJTyBpcyBzeW5jaHJvbm91cyBhbmQgb3Bl cmF0aW9ucyBvbiBrZXJuZWwgYnVmZmVycywgdGhpcwo+ICAgbWFrZXMgSU8gcHJvY2Vzc2luZyBz aW1wbGUgZm9yIE1VU0UuCj4gLSBTdXBwb3J0IGZvciBiYWQgYmxvY2tzLgo+IC0gTm8gbW9yZSAo YWIpdXNlIG9mIEZVU0Ugb3BzIHN1Y2ggYXMgRlVTRV9GU1lOQy4KPiAtIE1ham9yIGNvZGUgY2xl YW51cC4KPgo+IFRoaXMgc2VyaWVzIGNhbiBhbHNvIGJlIGZvdW5kIGF0Ogo+IGdpdDovL2dpdC5r ZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9ydy9taXNjLmdpdCBtdXNlX3YzCj4K PiBSaWNoYXJkIFdlaW5iZXJnZXIgKDgpOgo+ICAgZnVzZTogRXhwb3J0IGZ1c2Vfc2ltcGxlX3Jl cXVlc3QKPiAgIGZ1c2U6IEV4cG9ydCBJTyBoZWxwZXJzCj4gICBmdXNlOiBNYWtlIGN1c2VfcGFy c2Vfb25lIGEgY29tbW9uIGhlbHBlcgo+ICAgbXRkOiBBZGQgTVREX01VU0UgZmxhZwo+ICAgbXRk OiBBbGxvdyBwYXNzaW5nIGEgY3VzdG9tIGNtZGxpbmUgdG8gY21kbGluZSBsaW5lIHBhcnNlcgo+ ICAgZnVzZTogQWRkIE1VU0Ugc3BlY2lmaWMgZGVmaW5lcyBGVVNFIGludGVyZmFjZQo+ICAgZnVz ZTogSW1wbGVtZW50IE1VU0UgLSBNVEQgaW4gdXNlcnNwYWNlCj4gICBNQUlOVEFJTkVSUzogQWRk IGVudHJ5IGZvciBNVVNFCj4KPiAgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFz cy1tdGQgfCAgICA4ICsKPiAgTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgICA3ICsKPiAgZHJpdmVycy9tdGQvcGFyc2Vycy9jbWRsaW5lcGFydC5jICAgICAgICAg fCAgIDczICstCj4gIGZzL2Z1c2UvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAxNSArCj4gIGZzL2Z1c2UvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg MiArCj4gIGZzL2Z1c2UvY3VzZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1OCAr LQo+ICBmcy9mdXNlL2Rldi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwo+ ICBmcy9mdXNlL2ZpbGUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTYgKy0KPiAg ZnMvZnVzZS9mdXNlX2kuaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE4ICsKPiAgZnMv ZnVzZS9oZWxwZXIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDcwICsrCj4gIGZzL2Z1 c2UvbXVzZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTA4NiArKysrKysrKysrKysr KysrKysrKysKPiAgaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oICAgICAgICAgICAgfCAg ICAyICsKPiAgaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaCAgICAgICAgICAgICAgICAgfCAgIDc2 ICsrCj4gIGluY2x1ZGUvdWFwaS9tdGQvbXRkLWFiaS5oICAgICAgICAgICAgICAgIHwgICAgMSAr Cj4gIDE0IGZpbGVzIGNoYW5nZWQsIDEzNDYgaW5zZXJ0aW9ucygrKSwgODcgZGVsZXRpb25zKC0p Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBmcy9mdXNlL2hlbHBlci5jCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBmcy9mdXNlL211c2UuYwo+Cj4gLS0KPiAyLjI2LjIKPgoKCi0tIApUaGFua3MsCi8vcmlj aGFyZAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkxpbnV4IE1URCBkaXNjdXNzaW9uIG1haWxpbmcgbGlzdApodHRwOi8vbGlzdHMuaW5mcmFk ZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LW10ZC8K