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.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable 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 D0176C433FE for ; Fri, 4 Dec 2020 13:11:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7E1EA2251D for ; Fri, 4 Dec 2020 13:11:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729041AbgLDNLF (ORCPT ); Fri, 4 Dec 2020 08:11:05 -0500 Received: from mailfilter03-out40.webhostingserver.nl ([195.211.72.99]:11596 "EHLO mailfilter03-out40.webhostingserver.nl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728067AbgLDNLF (ORCPT ); Fri, 4 Dec 2020 08:11:05 -0500 X-Greylist: delayed 1042 seconds by postgrey-1.27 at vger.kernel.org; Fri, 04 Dec 2020 08:10:58 EST DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eltan.com; s=whs1; h=mime-version:content-transfer-encoding:content-type:in-reply-to:references: message-id:date:subject:cc:to:from:from; bh=IsgwRvW85E5SBp0vynDgOoFtfedakcxXs8UmfqTBX74=; b=N4FhGCZnMbeERmDcdg5d3j7UCPkBM/7rkoattgo1kGQtz6cd/vhlIYBW9eW2gS81F1+KHwd1dvU/n bs5LZB4z9BckKSRvL2hr6W0ByWnBjSg+QnRS/CskldPK0DBZKRZdNo/pUzf89/3wcGBkG3mqaU//b6 8EJFzXOoZKA5FxDqd0gdZJ3yjWCL7qEyaR5isWIR9U3PYtF5VIBTjbGQl0yCkruWbYzG41Q1FfUTtQ jPTTcddU/ErkMwScPlK+QzY9Pr9neMlFfAMfidnRAteB2z1OYTm6cmVtELmzVVlhYuKq9r3EKl/4+C STxZwTQbP5valpbaI6HCLAC2t2mLvaQ== X-Halon-ID: 9f3e2b36-362f-11eb-bfeb-001a4a4cb9a5 Received: from s219.webhostingserver.nl (unknown [195.211.72.6]) by mailfilter03.webhostingserver.nl (Halon) with ESMTPSA id 9f3e2b36-362f-11eb-bfeb-001a4a4cb9a5; Fri, 04 Dec 2020 13:52:52 +0100 (CET) Received: from 84-85-114-86.fixed.kpn.net ([84.85.114.86] helo=Eltsrv03.Eltan.local) by s219.webhostingserver.nl with esmtpa (Exim 4.93.0.4) (envelope-from ) id 1klAZw-008vUv-HL; Fri, 04 Dec 2020 13:52:52 +0100 Received: from Eltsrv03.Eltan.local (192.168.100.3) by Eltsrv03.Eltan.local (192.168.100.3) with Microsoft SMTP Server (TLS) id 15.0.847.32; Fri, 4 Dec 2020 13:52:17 +0100 Received: from Eltsrv03.Eltan.local ([fe80::24e7:1cc6:a76a:a3a8]) by Eltsrv03.Eltan.local ([fe80::24e7:1cc6:a76a:a3a8%12]) with mapi id 15.00.0847.040; Fri, 4 Dec 2020 13:52:17 +0100 From: Wim Vervoorn To: The development of GNU GRUB , Daniel Kiper CC: Coreboot , LKML , "systemd-devel@lists.freedesktop.org" , "trenchboot-devel@googlegroups.com" , U-Boot Mailing List , "x86@kernel.org" , "xen-devel@lists.xenproject.org" , "alecb@umass.edu" , "alexander.burmashev@oracle.com" , "allen.cryptic@gmail.com" , "andrew.cooper3@citrix.com" , "ard.biesheuvel@linaro.org" , "btrotter@gmail.com" , "dpsmith@apertussolutions.com" , "eric.devolder@oracle.com" , "eric.snowberg@oracle.com" , "hpa@zytor.com" , "hun@n-dimensional.de" , "javierm@redhat.com" , "joao.m.martins@oracle.com" , "kanth.ghatraju@oracle.com" , "konrad.wilk@oracle.com" , "krystian.hebel@3mdeb.com" , "leif@nuviainc.com" , "lukasz.hawrylko@intel.com" , "luto@amacapital.net" , "michal.zygowski@3mdeb.com" , "mjg59@google.com" , "mtottenh@akamai.com" , Vladimir 'phcoder' Serbinenko , "piotr.krol@3mdeb.com" , "pjones@redhat.com" , Paul Menzel , "roger.pau@citrix.com" , "ross.philipson@oracle.com" , "tyhicks@linux.microsoft.com" , Heinrich Schuchardt Subject: RE: [SPECIFICATION RFC] The firmware and bootloader log specification Thread-Topic: [SPECIFICATION RFC] The firmware and bootloader log specification Thread-Index: AQHWyRJEB7rkC+S91ESmRf+zunoIxKnm5awg Date: Fri, 4 Dec 2020 12:52:17 +0000 Message-ID: <6c1e79be210549949c30253a6cfcafc1@Eltsrv03.Eltan.local> References: <20201113235242.k6fzlwmwm2xqhqsi@tomti.i.net-space.pl> In-Reply-To: Accept-Language: nl-NL, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [192.168.100.108] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Antivirus-Scanner: Clean mail though you should still use an Antivirus Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGVsbG8gSnVsaXVzLA0KDQpJIGFncmVlIHdpdGggeW91LiBVc2luZyBhbiBleGlzdGluZyBzdGFu ZGFyZCBpcyBiZXR0ZXIgdGhhbiBpbnZlbnRpbmcgYSBuZXcgb25lIGluIHRoaXMgY2FzZS4gSSB0 aGluayB1c2luZyB0aGUgY29yZWJvb3QgbG9nZ2luZyBpcyBhIGdvb2QgaWRlYSBhcyB0aGVyZSBp cyBpbmRlZWQgYSBsb3Qgb2Ygc3VwcG9ydCBhbHJlYWR5IGF2YWlsYWJsZSBhbmQgaXQgaXMgbGln aHR3ZWlnaHQgYW5kIHNpbXBsZS4NCg0KQmVzdCBSZWdhcmRzLA0KV2ltIFZlcnZvb3JuDQoNCkVs dGFuIEIuVi4NCkFtYmFjaHRzdHJhYXQgMjMNCjU0ODEgU00gU2NoaWpuZGVsDQpUaGUgTmV0aGVy bGFuZHMNCg0KVCA6ICszMS0oMCk3My01OTQgNDYgNjQNCkUgOiB3dmVydm9vcm5AZWx0YW4uY29t DQpXIDogaHR0cDovL3d3dy5lbHRhbi5jb20NCg0KDQoiVGhpcyBtZXNzYWdlIGNvbnRhaW5zIGNv bmZpZGVudGlhbCBpbmZvcm1hdGlvbi4gVW5sZXNzIHlvdSBhcmUgdGhlIGludGVuZGVkIHJlY2lw aWVudCBvZiB0aGlzIG1lc3NhZ2UsIGFueSB1c2Ugb2YgdGhpcyBtZXNzYWdlIGlzIHN0cmljdGx5 IHByb2hpYml0ZWQuIElmIHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMgbWVzc2FnZSBpbiBlcnJvciwg cGxlYXNlIGltbWVkaWF0ZWx5IG5vdGlmeSB0aGUgc2VuZGVyIGJ5IHRlbGVwaG9uZSArMzEtKDAp NzMtNTk0NDY2NCBvciByZXBseSBlbWFpbCwgYW5kIGltbWVkaWF0ZWx5IGRlbGV0ZSB0aGlzIG1l c3NhZ2UgYW5kIGFsbCBjb3BpZXMuIg0KDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpG cm9tOiBHcnViLWRldmVsIFttYWlsdG86Z3J1Yi1kZXZlbC1ib3VuY2VzK3d2ZXJ2b29ybj1lbHRh bi5jb21AZ251Lm9yZ10gT24gQmVoYWxmIE9mIEp1bGl1cyBXZXJuZXINClNlbnQ6IFRodXJzZGF5 LCBEZWNlbWJlciAzLCAyMDIwIDI6MTggQU0NClRvOiBEYW5pZWwgS2lwZXIgPGRhbmllbC5raXBl ckBvcmFjbGUuY29tPg0KQ2M6IENvcmVib290IDxjb3JlYm9vdEBjb3JlYm9vdC5vcmc+OyBUaGUg ZGV2ZWxvcG1lbnQgb2YgR1JVQiAyIDxncnViLWRldmVsQGdudS5vcmc+OyBMS01MIDxsaW51eC1r ZXJuZWxAdmdlci5rZXJuZWwub3JnPjsgc3lzdGVtZC1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmc7IHRyZW5jaGJvb3QtZGV2ZWxAZ29vZ2xlZ3JvdXBzLmNvbTsgVS1Cb290IE1haWxpbmcgTGlz dCA8dS1ib290QGxpc3RzLmRlbnguZGU+OyB4ODZAa2VybmVsLm9yZzsgeGVuLWRldmVsQGxpc3Rz LnhlbnByb2plY3Qub3JnOyBhbGVjYkB1bWFzcy5lZHU7IGFsZXhhbmRlci5idXJtYXNoZXZAb3Jh Y2xlLmNvbTsgYWxsZW4uY3J5cHRpY0BnbWFpbC5jb207IGFuZHJldy5jb29wZXIzQGNpdHJpeC5j b207IGFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmc7IGJ0cm90dGVyQGdtYWlsLmNvbTsgZHBzbWl0 aEBhcGVydHVzc29sdXRpb25zLmNvbTsgZXJpYy5kZXZvbGRlckBvcmFjbGUuY29tOyBlcmljLnNu b3diZXJnQG9yYWNsZS5jb207IGhwYUB6eXRvci5jb207IGh1bkBuLWRpbWVuc2lvbmFsLmRlOyBq YXZpZXJtQHJlZGhhdC5jb207IGpvYW8ubS5tYXJ0aW5zQG9yYWNsZS5jb207IGthbnRoLmdoYXRy YWp1QG9yYWNsZS5jb207IGtvbnJhZC53aWxrQG9yYWNsZS5jb207IGtyeXN0aWFuLmhlYmVsQDNt ZGViLmNvbTsgbGVpZkBudXZpYWluYy5jb207IGx1a2Fzei5oYXdyeWxrb0BpbnRlbC5jb207IGx1 dG9AYW1hY2FwaXRhbC5uZXQ7IG1pY2hhbC56eWdvd3NraUAzbWRlYi5jb207IG1qZzU5QGdvb2ds ZS5jb207IG10b3R0ZW5oQGFrYW1haS5jb207IFZsYWRpbWlyICdwaGNvZGVyJyBTZXJiaW5lbmtv IDxwaGNvZGVyQGdtYWlsLmNvbT47IHBpb3RyLmtyb2xAM21kZWIuY29tOyBwam9uZXNAcmVkaGF0 LmNvbTsgUGF1bCBNZW56ZWwgPHBtZW56ZWxAbW9sZ2VuLm1wZy5kZT47IHJvZ2VyLnBhdUBjaXRy aXguY29tOyByb3NzLnBoaWxpcHNvbkBvcmFjbGUuY29tOyB0eWhpY2tzQGxpbnV4Lm1pY3Jvc29m dC5jb207IEhlaW5yaWNoIFNjaHVjaGFyZHQgPHh5cHJvbi5nbHBrQGdteC5kZT4NClN1YmplY3Q6 IFJlOiBbU1BFQ0lGSUNBVElPTiBSRkNdIFRoZSBmaXJtd2FyZSBhbmQgYm9vdGxvYWRlciBsb2cg c3BlY2lmaWNhdGlvbg0KDQpTdGFuZGFyZGl6aW5nIGluLW1lbW9yeSBsb2dnaW5nIHNvdW5kcyBs aWtlIGFuIGludGVyZXN0aW5nIGlkZWEsIGVzcGVjaWFsbHkgd2l0aCByZWdhcmRzIHRvIGNvbXBv bmVudHMgdGhhdCBjYW4gcnVuIG9uIHRvcCBvZiBkaWZmZXJlbnQgZmlybXdhcmUgc3RhY2tzICh0 aGluZ3MgbGlrZSBHUlVCIG9yIFRGLUEpLiBCdXQgSSB3b3VsZCBiZSBhIGJpdCB3YXJ5IG9mIGNy ZWF0aW5nIGEgIm5ldyBzdGFuZGFyZCB0byBydWxlIHRoZW0gYWxsIiBhbmQgdGhlbiBleHBlY3Rp bmcgYWxsIHByb2plY3RzIHRvIHN3aXRjaCB3aGF0IHRoZXkgaGF2ZSBvdmVyIHRvIHRoYXQuIEkg dGhpbmsgd2UgYWxsIGtub3cgaHR0cHM6Ly94a2NkLmNvbS85MjcvLg0KDQpIYXZlIHlvdSBsb29r ZWQgYXJvdW5kIGFuZCBldmFsdWF0ZWQgZXhpc3Rpbmcgc29sdXRpb25zIHRoYXQgYWxyZWFkeSBo YXZlIHNvbWUgcHJvbGlmZXJhdGlvbiBmaXJzdD8gSSB0aGluayBpdCB3b3VsZCBiZSBtdWNoIGVh c2llciB0byBjb252aW5jZSBwZW9wbGUgdG8gc3RhbmRhcmRpemUgb24gc29tZXRoaW5nIHRoYXQg YWxyZWFkeSBoYXMgZXhpc3RpbmcgdXNlcnMgYW5kIGRyaXZlcnMgYXZhaWxhYmxlIGluIG11bHRp cGxlIHByb2plY3RzLg0KDQpJbiBjb3JlYm9vdCB3ZSdyZSB1c2luZyBhIHZlcnkgc2ltcGxlIGNo YXJhY3RlciByaW5nIGJ1ZmZlciB0aGF0IG9ubHkgaGFzIHR3byA0LWJ5dGUgaGVhZGVyIGZpZWxk czogdG90YWwgc2l6ZSBhbmQgY3Vyc29yIChpLmUuIGN1cnJlbnQgcG9zaXRpb24gd2hlcmUgeW91 IHdvdWxkIHdyaXRlIHRoZSBuZXh0IGNoYXJhY3RlcikuIFRoZSB0b3AgNCBiaXRzIG9mIHRoZSBj dXJzb3IgZmllbGQgYXJlIHJlc2VydmVkIGZvciBmbGFncywgb25lIG9mIHdoaWNoIGlzIHRoZSAi b3ZlcmZsb3ciIGZsYWcgdGhhdCB0ZWxscyB5b3Ugd2hldGhlciB0aGUgcmluZy1idWZmZXIgYWxy ZWFkeSBvdmVyZmxvd2VkIG9yIG5vdCAoc28gcmVhZGVycyBrbm93IHdoZXRoZXIgdG8gcHJpbnQg dGhlIHdob2xlIHJpbmcgYnVmZmVyLCBvciBvbmx5IGZyb20gdGhlIHN0YXJ0IHRvIHRoZSBjdXJy ZW50IGN1cnNvcikuIFdlIHRyeSB0byBkaW1lbnNpb24gdGhlIGJ1ZmZlcnMgc28gdGhleSBkb24n dCBvdmVyZmxvdyBvbiBhIHNpbmdsZSBib290LCBidXQgdGhpcyBhcHByb2FjaCBhbGxvd3MgdXMg dG8gbG9nIG11bHRpcGxlIGJvb3RzIG9uIHBsYXRmb3JtcyB0aGF0IGNhbiBwZXJzaXN0IG1lbW9y eSBhY3Jvc3MgcmVib290cywgd2hpY2ggc29tZXRpbWVzIGNvbWVzIGluIGhhbmR5Lg0KDQpUaGUg ZGlzYWR2YW50YWdlcyBvZiB0aGF0IGFwcHJvYWNoIGNvbXBhcmVkIHRvIHlvdXIgcHJvcG9zYWwg YXJlIGxhY2sgb2Ygc29tZSBmZWF0dXJlcywgbGlrZSB0aGUgZmFjaWxpdGllcyBmaWVsZCAoYWx0 aG91Z2ggb25lIGNhbiBzdGlsbCBqdXN0IHByaW50IGEgdGFnIGxpa2UgIjwwPiIgb3IgIjw0PiIg YmVoaW5kIGVhY2ggbmV3bGluZSkgb3IgdGltZXN0YW1wcyAoY29yZWJvb3QgaW5zdGVhZCBoYXMg c2VwYXJhdGUgdGltZXN0YW1wIGxvZ2dpbmcpLiBCdXQgSSB0aGluayBhIHJlYWxseSBiaWcgYWR2 YW50YWdlIGlzIHNpemU6IGluIGVhcmx5IGZpcm13YXJlIGVudmlyb25tZW50cyBiZWZvcmUgRERS IHRyYWluaW5nLCBzcGFjZSBpcyBvZnRlbiB2ZXJ5IHByZWNpb3VzIGFuZCB3ZSBzdHJ1Z2dsZSB0 byBmaW5kIG1vcmUgdGhhbiBhIGNvdXBsZSBvZiBraWxvYnl0ZXMgZm9yIHRoZSBsb2cgYnVmZmVy LiBJZiBJIGxvb2sgYXQgdGhlIHN0cnVjdHVyZSB5b3UgcHJvcG9zZWQsIHRoYXQncyBhbHJlYWR5 IDI0IGJ5dGVzIG9mIG92ZXJoZWFkIHBlciBpbmRpdmlkdWFsIG1lc3NhZ2UuIElmIHdlIHdlcmUg aG9va2luZyB0aGF0IHVwIHRvIG91ciBub3JtYWwgcHJpbnRrKCkgZmFjaWxpdHkgaW4gY29yZWJv b3QgKHN1Y2ggdGhhdCBlYWNoIGludm9jYXRpb24gY3JlYXRlcyBhIG5ldyBtZXNzYWdlIGhlYWRl ciksIHRoYXQgd291bGQgcHJvYmFibHkgd2FzdGUgYWJvdXQgYSB0aGlyZCBvZiB0aGUgd2hvbGUg bG9nIGJ1ZmZlciBvbiBvdmVyaGVhZC4gSSB0aGluayBhIGNvbXBsaWNhdGVkLCBzeXNsb2ctc3R5 bGUgbG9nZ2luZyBzdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgaW5kaXZpZHVhbCBtZXNzYWdlIGJsb2Nr cyBpbnN0ZWFkIG9mIGEgY29udGludW91cyBjaGFyYWN0ZXIgc3RyaW5nIGlzbid0IHJlYWxseSBz dWl0YWJsZSBmb3IgZmlybXdhcmUgbG9nZ2luZy4NCg0KRldJVyB0aGUgY29yZWJvb3QgY29uc29s ZSBoYXMgZXhpc3Rpbmcgc3VwcG9ydCBpbiBMaW51eCAoaHR0cHM6Ly9naXQua2VybmVsLm9yZy9w dWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdG9ydmFsZHMvbGludXguZ2l0L3RyZWUvZHJpdmVycy9m aXJtd2FyZS9nb29nbGUvbWVtY29uc29sZS1jb3JlYm9vdC5jKSwNClNlYUJJT1MgKGh0dHBzOi8v Z2l0aHViLmNvbS9jb3JlYm9vdC9zZWFiaW9zL2Jsb2IvbWFzdGVyL3NyYy9mdy9jb3JlYm9vdC5j I0wyMTkpLA0KVEYtQSAoaHR0cHM6Ly9naXRodWIuY29tL0FSTS1zb2Z0d2FyZS9hcm0tdHJ1c3Rl ZC1maXJtd2FyZS9ibG9iL21hc3Rlci9kcml2ZXJzL2NvcmVib290L2NibWVtX2NvbnNvbGUvYWFy Y2g2NC9jYm1lbV9jb25zb2xlLlMpLA0KR1JVQiAoaHR0cHM6Ly9naXQuc2F2YW5uYWguZ251Lm9y Zy9jZ2l0L2dydWIuZ2l0L3RyZWUvZ3J1Yi1jb3JlL3Rlcm0vaTM4Ni9jb3JlYm9vdC9jYm1lbWMu YyksDQpVLUJvb3QgKGh0dHBzOi8vZ2l0aHViLmNvbS91LWJvb3QvdS1ib290L2Jsb2IvbWFzdGVy L2RyaXZlcnMvbWlzYy9jYm1lbV9jb25zb2xlLmMpDQphbmQgcHJvYmFibHkgYSBjb3VwbGUgb2Yg b3RoZXJzIEknbSBub3QgYXdhcmUgb2YuIEFuZCB0aGUgY29kZSB0byBhZGQgc3VwcG9ydCAoZXNw ZWNpYWxseSB3aGVuIG9ubHkgYXBwZW5kaW5nKSBpcyBzbyBzaW1wbGUgdGhhdCBpdCBqdXN0IHRh a2VzIGEgY291cGxlIG9mIGxpbmVzIHRvIGltcGxlbWVudCAoYmluYXJ5IGNvZGUgc2l6ZSB0byBp bXBsZW1lbnQgdGhlIGZvcm1hdCBpcyBhbHNvIGFsd2F5cyBhIGNvbmNlcm4gZm9yIGZpcm13YXJl IGVudmlyb25tZW50cykuDQoNCk9uIFdlZCwgTm92IDE4LCAyMDIwIGF0IDc6MDQgQU0gSGVpbnJp Y2ggU2NodWNoYXJkdCA8eHlwcm9uLmdscGtAZ214LmRlPiB3cm90ZToNCj4NCj4gT24gMTQuMTEu MjAgMDA6NTIsIERhbmllbCBLaXBlciB3cm90ZToNCj4gPiBIZXksDQo+ID4NCj4gPiBUaGlzIGlz IG5leHQgYXR0ZW1wdCB0byBjcmVhdGUgZmlybXdhcmUgYW5kIGJvb3Rsb2FkZXIgbG9nIHNwZWNp ZmljYXRpb24uDQo+ID4gRHVlIHRvIGhpZ2ggaW50ZXJlc3QgYW1vbmcgaW5kdXN0cnkgaXQgaXMg YW4gZXh0ZW5zaW9uIHRvIHRoZSANCj4gPiBpbml0aWFsIGJvb3Rsb2FkZXIgbG9nIG9ubHkgc3Bl Y2lmaWNhdGlvbi4gSXQgdGFrZXMgaW50byB0aGUgYWNjb3VudCANCj4gPiBtb3N0IG9mIHRoZSBj b21tZW50cyB3aGljaCBJIGdvdCB1cCB1bnRpbCBub3cuDQo+ID4NCj4gPiBUaGUgZ29hbCBpcyB0 byBwYXNzIGFsbCBsb2dzIHByb2R1Y2VkIGJ5IHZhcmlvdXMgYm9vdCBjb21wb25lbnRzIHRvIA0K PiA+IHRoZSBydW5uaW5nIE9TLiBUaGUgT1Mga2VybmVsIHNob3VsZCBleHBvc2UgdGhlc2UgbG9n cyB0byB0aGUgdXNlciANCj4gPiBzcGFjZSBhbmQvb3IgcHJvY2VzcyB0aGVtIGludGVybmFsbHkg aWYgbmVlZGVkLiBUaGUgY29udGVudCBvZiB0aGVzZSANCj4gPiBsb2dzIHNob3VsZCBiZSBodW1h biByZWFkYWJsZS4gSG93ZXZlciwgdGhleSBzaG91bGQgYWxzbyBjb250YWluIHRoZSANCj4gPiBp bmZvcm1hdGlvbiB3aGljaCBhbGxvd3MgYWRtaW5zIHRvIGRvIGUuZy4gYm9vdCB0aW1lIGFuYWx5 c2lzLg0KPiA+DQo+ID4gVGhlIGxvZyBzcGVjaWZpY2F0aW9uIHNob3VsZCBiZSBhcyBtdWNoIGFz IHBvc3NpYmxlIHBsYXRmb3JtIA0KPiA+IGFnbm9zdGljIGFuZCBzZWxmIGNvbnRhaW5lZC4gVGhl IGZpbmFsIHZlcnNpb24gb2YgdGhpcyBzcGVjIHNob3VsZCANCj4gPiBiZSBtZXJnZWQgaW50byBl eGlzdGluZyBzcGVjaWZpY2F0aW9ucywgZS5nLiBVRUZJLCBBQ1BJLCBNdWx0aWJvb3QyLCANCj4g PiBvciBiZSBhIHN0YW5kYWxvbmUgc3BlYywgZS5nLiBhcyBhIHBhcnQgb2YgT0FTSVMgU3RhbmRh cmRzLiBUaGUgDQo+ID4gZm9ybWVyIHNlZW1zIGJldHRlciBidXQgaXMgbm90IHBlcmZlY3QgdG9v Li4uDQo+ID4NCj4gPiBIZXJlIGlzIHRoZSBkZXNjcmlwdGlvbiAocHNldWRvY29kZSkgb2YgdGhl IHN0cnVjdHVyZXMgd2hpY2ggd2lsbCBiZSANCj4gPiB1c2VkIHRvIHN0b3JlIHRoZSBsb2cgZGF0 YS4NCj4NCj4gSGVsbG8gRGFuaWVsLA0KPg0KPiB0aGFua3MgZm9yIHlvdXIgc3VnZ2VzdGlvbiB3 aGljaCBtYWtlcyBnb29kIHNlbnNlIHRvIG1lLg0KPg0KPiBXaHkgY2FuJ3Qgd2Ugc2ltcGx5IHVz ZSB0aGUgbWVzc2FnZSBmb3JtYXQgZGVmaW5lZCBpbiAiVGhlIFN5c2xvZyANCj4gUHJvdG9jb2wi LCBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTQyND8NCj4NCj4gPg0KPiA+ICAgc3Ry dWN0IGJmX2xvZw0KPiA+ICAgew0KPiA+ICAgICB1aW50MzJfdCAgIHZlcnNpb247DQo+ID4gICAg IGNoYXIgICAgICAgcHJvZHVjZXJbNjRdOw0KPiA+ICAgICB1aW50NjRfdCAgIGZsYWdzOw0KPiA+ ICAgICB1aW50NjRfdCAgIG5leHRfYmZfbG9nX2FkZHI7DQo+ID4gICAgIHVpbnQzMl90ICAgbmV4 dF9tc2dfb2ZmOw0KPiA+ICAgICBiZl9sb2dfbXNnIG1zZ3NbXTsNCj4NCj4gQXMgYmZfbG9nX21z ZyBpcyBkb2VzIG5vdCBoYXZlIGRlZmluZWQgbGVuZ3RoIG1zZ3NbXSBjYW5ub3QgYmUgYW4gYXJy YXkuDQo+DQo+ID4gICB9DQo+ID4NCj4gPiAgIHN0cnVjdCBiZl9sb2dfbXNnDQo+ID4gICB7DQo+ ID4gICAgIHVpbnQzMl90IHNpemU7DQo+ID4gICAgIHVpbnQ2NF90IHRzX25zZWM7DQo+ID4gICAg IHVpbnQzMl90IGxldmVsOw0KPiA+ICAgICB1aW50MzJfdCBmYWNpbGl0eTsNCj4gPiAgICAgdWlu dDMyX3QgbXNnX29mZjsNCj4gPiAgICAgY2hhciAgICAgc3RyaW5nc1tdOw0KPiA+ICAgfQ0KPiA+ DQo+ID4gVGhlIG1lbWJlcnMgb2Ygc3RydWN0IGJmX2xvZzoNCj4gPiAgIC0gdmVyc2lvbjogdGhl IGZpcm13YXJlIGFuZCBib290bG9hZGVyIGxvZyBmb3JtYXQgdmVyc2lvbiBudW1iZXIsIDEgZm9y IG5vdywNCj4gPiAgIC0gcHJvZHVjZXI6IHRoZSBwcm9kdWNlci9maXJtd2FyZS9ib290bG9hZGVy Ly4uLiB0eXBlOyB0aGUgbGVuZ3RoDQo+ID4gICAgIGFsbG93cyBBU0NJSSBVVUlEIHN0b3JhZ2Ug aWYgc29tZWJvZHkgbmVlZHMgdGhhdCBmdW5jdGlvbmFsaXR5LA0KPiA+ICAgLSBmbGFnczogaXQg Y2FuIGJlIHVzZWQgdG8gc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgbG9nIHN0YXRlLCBlLmcuDQo+ ID4gICAgIGl0IHdhcyB0cnVuY2F0ZWQgb3Igbm90IChkb2VzIGl0IG1ha2Ugc2Vuc2UgdG8gaGF2 ZSBhbiBpbmZvcm1hdGlvbg0KPiA+ICAgICBhYm91dCB0aGUgbnVtYmVyIG9mIGxvc3QgbWVzc2Fn ZXM/KSwNCj4gPiAgIC0gbmV4dF9iZl9sb2dfYWRkcjogYWRkcmVzcyBvZiBuZXh0IGJmX2xvZyBz dHJ1Y3Q7IG5vbmUgaWYgemVybyAoSSB0aGluaw0KPiA+ICAgICBuZXdlciBzcGVjIHZlcnNpb25z IHNob3VsZCBub3QgY2hhbmdlIGFueXRoaW5nIGluIGZpcnN0IDUgYmZfbG9nIG1lbWJlcnM7DQo+ ID4gICAgIHRoaXMgd2F5IG9sZGVyIGxvZyBwYXJzZXJzIHdpbGwgYmUgYWJsZSB0byB0cmF2ZXJz ZS9jb3B5IGFsbCBsb2dzIHJlZ2FyZGxlc3MNCj4gPiAgICAgb2YgdmVyc2lvbiB1c2VkIGluIG9u ZSBsb2cgb3IgYW5vdGhlciksDQo+ID4gICAtIG5leHRfbXNnX29mZjogdGhlIG9mZnNldCwgaW4g Ynl0ZXMsIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgYmZfbG9nIHN0cnVjdCwNCj4gPiAgICAg b2YgdGhlIG5leHQgYnl0ZSBhZnRlciB0aGUgbGFzdCBsb2cgbWVzc2FnZSBpbiB0aGUgbXNnc1td OyBpLmUuIHRoZSBvZmZzZXQNCj4gPiAgICAgb2YgdGhlIG5leHQgYXZhaWxhYmxlIGxvZyBtZXNz YWdlIHNsb3Q7IGl0IGlzIGVxdWFsIHRvIHRoZSB0b3RhbCBzaXplIG9mDQo+ID4gICAgIHRoZSBs b2cgYnVmZmVyIGluY2x1ZGluZyB0aGUgYmZfbG9nIHN0cnVjdCwNCj4NCj4gV2h5IHdvdWxkIHlv dSBuZWVkIGFuIG9mZnNldCB0byBmaXJzdCB1bnVzZWQgYnl0ZT8NCj4NCj4gV2UgcG9zc2libHkg aGF2ZSBtdWx0aXBsZSBwcm9kdWNlcnMgb2YgbWVzc2FnZXM6DQo+DQo+IC0gVEYtQQ0KPiAtIFUt Qm9vdA0KPiAtIGlQWEUNCj4gLSBHUlVCDQo+DQo+IFdoYXQgd2UgbmVlZCBpcyB0aGUgb2Zmc2V0 IHRvIHRoZSBuZXh0IHN0cnVjdCBiZl9sb2cuDQo+DQo+ID4gICAtIG1zZ3M6IHRoZSBhcnJheSBv ZiBsb2cgbWVzc2FnZXMsDQo+ID4gICAtIHNob3VsZCB3ZSBhZGQgQ1JDIG9yIGhhc2ggb3Igc2ln bmF0dXJlcyBoZXJlPw0KPiA+DQo+ID4gVGhlIG1lbWJlcnMgb2Ygc3RydWN0IGJmX2xvZ19tc2c6 DQo+ID4gICAtIHNpemU6IHRvdGFsIHNpemUgb2YgYmZfbG9nX21zZyBzdHJ1Y3QsDQo+ID4gICAt IHRzX25zZWM6IHRpbWVzdGFtcCBleHByZXNzZWQgaW4gbmFub3NlY29uZHMgc3RhcnRpbmcgZnJv bSAwLA0KPg0KPiBXb3VsZCBlYWNoIG1lc3NhZ2UgcHJvZHVjZXIgc3RhcnQgZnJvbSAwPw0KPg0K PiBTaG91bGRuJ3Qgd2UgdXNlIHRoZSB0aW1lIGZyb20gdGhlIGhhcmR3YXJlIFJUQyBpZiBpdCBp cyBhdmFpbGFibGUgdmlhIA0KPiBib290IHNlcnZpY2UgR2V0VGltZSgpPw0KPg0KPiA+ICAgLSBs ZXZlbDogc2ltaWxhciB0byBzeXNsb2cgbWVhbmluZzsgY2FuIGJlIHVzZWQgdG8gZGlmZmVyZW50 aWF0ZSBub3JtYWwgbWVzc2FnZXMNCj4gPiAgICAgZnJvbSBkZWJ1ZyBtZXNzYWdlczsgdGhlIGV4 YWN0IGludGVycHJldGF0aW9uIGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgcHJvZHVjZXINCj4gPiAg ICAgdHlwZSBzcGVjaWZpZWQgaW4gdGhlIGJmX2xvZy5wcm9kdWNlciwNCj4gPiAgIC0gZmFjaWxp dHk6IHNpbWlsYXIgdG8gc3lzbG9nIG1lYW5pbmc7IGNhbiBiZSB1c2VkIHRvIGRpZmZlcmVudGlh dGUgdGhlIHNvdXJjZXMgb2YNCj4gPiAgICAgdGhlIG1lc3NhZ2VzLCBlLmcuIG1lc3NhZ2UgcHJv ZHVjZWQgYnkgbmV0d29ya2luZyBtb2R1bGU7IHRoZSBleGFjdCBpbnRlcnByZXRhdGlvbg0KPiA+ ICAgICBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IHByb2R1Y2VyIHR5cGUgc3BlY2lmaWVkIGluIHRo ZSBiZl9sb2cucHJvZHVjZXIsDQo+ID4gICAtIG1zZ19vZmY6IHRoZSBsb2cgbWVzc2FnZSBvZmZz ZXQgaW4gc3RyaW5nc1tdLA0KPg0KPiBXaGF0IGlzIHRoaXMgZmllbGQgZ29vZCBmb3I/IFdoeSBk b24ndCB5b3Ugc3RhcnQgdGhlIHRoZSBzdHJpbmcgYXQgDQo+IHN0cmluZ3NbMF0/DQo+IFdoYXQg d291bGQgYmUgdXNlZnVsIHdvdWxkIGJlIHRoZSBvZmZzZXQgdG8gdGhlIG5leHQgYmZfbG9nX21z Zy4NCj4NCj4gPiAgIC0gc3RyaW5nc1swXTogdGhlIGJlZ2lubmluZyBvZiBsb2cgbWVzc2FnZSB0 eXBlLCBzaW1pbGFyIHRvIHRoZSBmYWNpbGl0eSBtZW1iZXIgYnV0DQo+ID4gICAgIE5VTCB0ZXJt aW5hdGVkIHN0cmluZyBpbnN0ZWFkIG9mIGludGVnZXI7IHRoaXMgd2lsbCBiZSB1c2VkIGJ5LCBl LmcuLCB0aGUgR1JVQjINCj4gPiAgICAgZm9yIG1lc3NhZ2VzIHByaW50ZWQgdXNpbmcgZ3J1Yl9k cHJpbnRmKCksDQo+ID4gICAtIHN0cmluZ3NbbXNnX29mZl06IHRoZSBiZWdpbm5pbmcgb2YgbG9n IG1lc3NhZ2UsIE5VTCB0ZXJtaW5hdGVkIHN0cmluZy4NCj4NCj4NCj4gV2h5IHN0cmluZ3MgaW4g cGx1cmFsPyBEbyB5b3Ugd2FudCB0byBwdXQgbXVsdGlwbGUgc3RyaW5ncyBpbnRvIA0KPiAnc3Ry aW5ncyc/IFdoYXQgaWRlbnRpZmllcyB0aGUgbGFzdCBzdHJpbmc/DQo+DQo+DQo+ID4NCj4gPiBO b3RlOiBUaGUgcHJvZHVjZXJzIGFyZSBmcmVlIHRvIHVzZS9pZ25vcmUgYW55IGdpdmVuIHNldCBv ZiBsZXZlbCwgZmFjaWxpdHkgYW5kL29yDQo+ID4gICAgICAgbG9nIHR5cGUgbWVtYmVycy4gVGhv dWdoIHRoZSB1c2FnZSBvZiB0aGVzZSBtZW1iZXJzIGhhcyB0byBiZSBjbGVhcmx5IGRlZmluZWQu DQo+ID4gICAgICAgSWdub3JlZCBpbnRlZ2VyIG1lbWJlcnMgc2hvdWxkIGJlIHNldCB0byAwLiBJ Z25vcmVkIGxvZyBtZXNzYWdlIHR5cGUgc2hvdWxkDQo+ID4gICAgICAgY29udGFpbiBhbiBlbXB0 eSBOVUwgdGVybWluYXRlZCBzdHJpbmcuIFRoZSBsb2cgbWVzc2FnZSBpcyBtYW5kYXRvcnkgYnV0 IGNhbg0KPiA+ICAgICAgIGJlIGFuIGVtcHR5IE5VTCB0ZXJtaW5hdGVkIHN0cmluZy4NCj4gPg0K PiA+IFRoZXJlIGlzIHN0aWxsIG5vdCBmdWxseSBzb2x2ZWQgcHJvYmxlbSBob3cgdGhlIGxvZ3Mg c2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgT1MuDQo+ID4gT24gdGhlIFVFRkkgcGxhdGZvcm1z IHdlIGNhbiB1c2UgY29uZmlnIHRhYmxlcyB0byBkbyB0aGF0LiBUaGVuIA0KPiA+IHByb2JhYmx5 IGJmX2xvZy5uZXh0X2JmX2xvZ19hZGRyIHNob3VsZCBub3QgYmUgdXNlZC4NCj4NCj4gV2h5PyBI b3cgd291bGQgeW91IG90aGVyd2lzZSBmaW5kIHRoZSBlbnRyaWVzIG9mIHRoZSBuZXh0IHByb2R1 c2VyIGluIA0KPiB0aGUgY29uZmlndXJhdGlvbiB0YWJsZT8gV2hhdCBJIGFtIG1pc3NpbmcgaXMg YSBHVUlEIGZvciB0aGUgDQo+IGNvbmZpZ3VyYXRpb24gdGFibGUuDQo+DQo+ID4gT24gdGhlIEFD UEkgYW5kIERldmljZSBUcmVlIHBsYXRmb3JtcyB3ZSBjYW4gdXNlIHRoZXNlIG1lY2hhbmlzbXMg dG8gDQo+ID4gcHJlc2VudCB0aGUgbG9ncyB0byB0aGUgT1Nlcy4gVGhlIHNpdHVhdGlvbiBnZXRz IG1vcmUNCj4NCj4gSSBkbyBub3QgdW5kZXJzdGFuZCB0aGlzLg0KPg0KPiBVRUZJIGltcGxlbWVu dGF0aW9ucyB1c2UgZWl0aGVyIG9mIEFDUEkgYW5kIGRldmljZS10cmVlcyBhbmQgc3VwcG9ydCAN Cj4gY29uZmlndXJhdGlvbiB0YWJsZXMuIFdoeSBkbyB5b3Ugd2FudCB0byB1c2Ugc29tZSBvdGhl ciBiaW5kaW5nPw0KPg0KPiBCZXN0IHJlZ2FyZHMNCj4NCj4gSGVpbnJpY2gNCj4NCj4gPiBkaWZm aWN1bHQgaWYgbmVpdGhlciBvZiB0aGVzZSBtZWNoYW5pc21zIGFyZSBwcmVzZW50LiBIb3dldmVy LCBtYXliZSANCj4gPiB3ZSBzaG91bGQgbm90IGJvdGhlciB0b28gbXVjaCBhYm91dCB0aGF0IGJl Y2F1c2UgcHJvYmFibHkgdGhlc2UgDQo+ID4gcGxhdGZvcm1zIGdldHRpbmcgbGVzcyBhbmQgbGVz cyBjb21tb24uDQo+ID4NCj4gPiBBbnl3YXksIEkgYW0gYXdhcmUgdGhhdCB0aGlzIGlzIG5vdCBz cGVjaWZpY2F0aW9uIHBlciBzZS4gVGhlIGdvYWwgDQo+ID4gb2YgdGhpcyBlbWFpbCBpcyB0byBj b250aW51ZSB0aGUgZGlzY3Vzc2lvbiBhYm91dCB0aGUgaWRlYSBvZiB0aGUgDQo+ID4gZmlybXdh cmUgYW5kIGJvb2xvYWRlciBsb2cgYW5kIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSBmaW5hbCANCj4g PiBzcGVjaWZpY2F0aW9uIHNob3VsZCBsYW5kLiBPZiBjb3Vyc2UgdGFraW5nIGludG8gdGhlIGFj Y291bnQgYXNzdW1wdGlvbnMgbWFkZSBhYm92ZS4NCj4gPg0KPiA+IFlvdSBjYW4gZmluZCBwcmV2 aW91cyBkaXNjdXNzaW9ucyBhYm91dCByZWxhdGVkIHRvcGljcyBhdCBbMV0sIFsyXSBhbmQgWzNd Lg0KPiA+DQo+ID4gQWRkaXRpb25hbGx5LCBJIGFtIGdvaW5nIHRvIHByZXNlbnQgdGhpcyBkdXJp bmcgR1JVQiBtaW5pLXN1bW1pdCANCj4gPiBzZXNzaW9uIG9uIFR1ZXNkYXksIDE3dGggb2YgTm92 ZW1iZXIgYXQgMTU6NDUgVVRDLiBTbywgaWYgeW91IHdhbnQgDQo+ID4gdG8gZGlzY3VzcyB0aGUg bG9nIGRlc2lnbiBwbGVhc2Ugam9pbiB1cy4gWW91IGNhbiBmaW5kIG1vcmUgZGV0YWlscyBoZXJl IFs0XS4NCj4gPg0KPiA+IERhbmllbA0KPiA+DQo+ID4gWzFdIA0KPiA+IGh0dHBzOi8vbGlzdHMu Z251Lm9yZy9hcmNoaXZlL2h0bWwvZ3J1Yi1kZXZlbC8yMDE5LTEwL21zZzAwMTA3Lmh0bWwNCj4g PiBbMl0gDQo+ID4gaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9ncnViLWRldmVs LzIwMTktMTEvbXNnMDAwNzkuaHRtbA0KPiA+IFszXSANCj4gPiBodHRwczovL2xpc3RzLmdudS5v cmcvYXJjaGl2ZS9odG1sL2dydWItZGV2ZWwvMjAyMC0wNS9tc2cwMDIyMy5odG1sDQo+ID4gWzRd IGh0dHBzOi8vdHdpdHRlci5jb20vM21kZWJfY29tL3N0YXR1cy8xMzI3Mjc4ODA0MTAwOTMxNTg3 DQo+ID4NCj4NCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18NCkdydWItZGV2ZWwgbWFpbGluZyBsaXN0DQpHcnViLWRldmVsQGdudS5vcmcNCmh0dHBzOi8v bGlzdHMuZ251Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2dydWItZGV2ZWwNCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wim Vervoorn Date: Fri, 4 Dec 2020 12:52:17 +0000 Subject: [SPECIFICATION RFC] The firmware and bootloader log specification In-Reply-To: References: <20201113235242.k6fzlwmwm2xqhqsi@tomti.i.net-space.pl> Message-ID: <6c1e79be210549949c30253a6cfcafc1@Eltsrv03.Eltan.local> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello Julius, I agree with you. Using an existing standard is better than inventing a new one in this case. I think using the coreboot logging is a good idea as there is indeed a lot of support already available and it is lightweight and simple. Best Regards, Wim Vervoorn Eltan B.V. Ambachtstraat 23 5481 SM Schijndel The Netherlands T : +31-(0)73-594 46 64 E : wvervoorn at eltan.com W : http://www.eltan.com "This message contains confidential information. Unless you are the intended recipient of this message, any use of this message is strictly prohibited. If you have received this message in error, please immediately notify the sender by telephone +31-(0)73-5944664 or reply email, and immediately delete this message and all copies." -----Original Message----- From: Grub-devel [mailto:grub-devel-bounces+wvervoorn=eltan.com at gnu.org] On Behalf Of Julius Werner Sent: Thursday, December 3, 2020 2:18 AM To: Daniel Kiper Cc: Coreboot ; The development of GRUB 2 ; LKML ; systemd-devel at lists.freedesktop.org; trenchboot-devel at googlegroups.com; U-Boot Mailing List ; x86 at kernel.org; xen-devel at lists.xenproject.org; alecb at umass.edu; alexander.burmashev at oracle.com; allen.cryptic at gmail.com; andrew.cooper3 at citrix.com; ard.biesheuvel at linaro.org; btrotter at gmail.com; dpsmith at apertussolutions.com; eric.devolder at oracle.com; eric.snowberg at oracle.com; hpa at zytor.com; hun at n-dimensional.de; javierm at redhat.com; joao.m.martins at oracle.com; kanth.ghatraju at oracle.com; konrad.wilk at oracle.com; krystian.hebel at 3mdeb.com; leif at nuviainc.com; lukasz.hawrylko at intel.com; luto at amacapital.net; michal.zygowski at 3mdeb.com; mjg59 at google.com; mtottenh at akamai.com; Vladimir 'phcoder' Serbinenko ; piotr.krol at 3mdeb.com; pjones at redhat.com; Paul Menzel ; roger.pau at citrix.com; ross.philipson at oracle.com; tyhicks at linux.microsoft.com; Heinrich Schuchardt Subject: Re: [SPECIFICATION RFC] The firmware and bootloader log specification Standardizing in-memory logging sounds like an interesting idea, especially with regards to components that can run on top of different firmware stacks (things like GRUB or TF-A). But I would be a bit wary of creating a "new standard to rule them all" and then expecting all projects to switch what they have over to that. I think we all know https://xkcd.com/927/. Have you looked around and evaluated existing solutions that already have some proliferation first? I think it would be much easier to convince people to standardize on something that already has existing users and drivers available in multiple projects. In coreboot we're using a very simple character ring buffer that only has two 4-byte header fields: total size and cursor (i.e. current position where you would write the next character). The top 4 bits of the cursor field are reserved for flags, one of which is the "overflow" flag that tells you whether the ring-buffer already overflowed or not (so readers know whether to print the whole ring buffer, or only from the start to the current cursor). We try to dimension the buffers so they don't overflow on a single boot, but this approach allows us to log multiple boots on platforms that can persist memory across reboots, which sometimes comes in handy. The disadvantages of that approach compared to your proposal are lack of some features, like the facilities field (although one can still just print a tag like "<0>" or "<4>" behind each newline) or timestamps (coreboot instead has separate timestamp logging). But I think a really big advantage is size: in early firmware environments before DDR training, space is often very precious and we struggle to find more than a couple of kilobytes for the log buffer. If I look at the structure you proposed, that's already 24 bytes of overhead per individual message. If we were hooking that up to our normal printk() facility in coreboot (such that each invocation creates a new message header), that would probably waste about a third of the whole log buffer on overhead. I think a complicated, syslog-style logging structure that stores individual message blocks instead of a continuous character string isn't really suitable for firmware logging. FWIW the coreboot console has existing support in Linux (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/firmware/google/memconsole-coreboot.c), SeaBIOS (https://github.com/coreboot/seabios/blob/master/src/fw/coreboot.c#L219), TF-A (https://github.com/ARM-software/arm-trusted-firmware/blob/master/drivers/coreboot/cbmem_console/aarch64/cbmem_console.S), GRUB (https://git.savannah.gnu.org/cgit/grub.git/tree/grub-core/term/i386/coreboot/cbmemc.c), U-Boot (https://github.com/u-boot/u-boot/blob/master/drivers/misc/cbmem_console.c) and probably a couple of others I'm not aware of. And the code to add support (especially when only appending) is so simple that it just takes a couple of lines to implement (binary code size to implement the format is also always a concern for firmware environments). On Wed, Nov 18, 2020 at 7:04 AM Heinrich Schuchardt wrote: > > On 14.11.20 00:52, Daniel Kiper wrote: > > Hey, > > > > This is next attempt to create firmware and bootloader log specification. > > Due to high interest among industry it is an extension to the > > initial bootloader log only specification. It takes into the account > > most of the comments which I got up until now. > > > > The goal is to pass all logs produced by various boot components to > > the running OS. The OS kernel should expose these logs to the user > > space and/or process them internally if needed. The content of these > > logs should be human readable. However, they should also contain the > > information which allows admins to do e.g. boot time analysis. > > > > The log specification should be as much as possible platform > > agnostic and self contained. The final version of this spec should > > be merged into existing specifications, e.g. UEFI, ACPI, Multiboot2, > > or be a standalone spec, e.g. as a part of OASIS Standards. The > > former seems better but is not perfect too... > > > > Here is the description (pseudocode) of the structures which will be > > used to store the log data. > > Hello Daniel, > > thanks for your suggestion which makes good sense to me. > > Why can't we simply use the message format defined in "The Syslog > Protocol", https://tools.ietf.org/html/rfc5424? > > > > > struct bf_log > > { > > uint32_t version; > > char producer[64]; > > uint64_t flags; > > uint64_t next_bf_log_addr; > > uint32_t next_msg_off; > > bf_log_msg msgs[]; > > As bf_log_msg is does not have defined length msgs[] cannot be an array. > > > } > > > > struct bf_log_msg > > { > > uint32_t size; > > uint64_t ts_nsec; > > uint32_t level; > > uint32_t facility; > > uint32_t msg_off; > > char strings[]; > > } > > > > The members of struct bf_log: > > - version: the firmware and bootloader log format version number, 1 for now, > > - producer: the producer/firmware/bootloader/... type; the length > > allows ASCII UUID storage if somebody needs that functionality, > > - flags: it can be used to store information about log state, e.g. > > it was truncated or not (does it make sense to have an information > > about the number of lost messages?), > > - next_bf_log_addr: address of next bf_log struct; none if zero (I think > > newer spec versions should not change anything in first 5 bf_log members; > > this way older log parsers will be able to traverse/copy all logs regardless > > of version used in one log or another), > > - next_msg_off: the offset, in bytes, from the beginning of the bf_log struct, > > of the next byte after the last log message in the msgs[]; i.e. the offset > > of the next available log message slot; it is equal to the total size of > > the log buffer including the bf_log struct, > > Why would you need an offset to first unused byte? > > We possibly have multiple producers of messages: > > - TF-A > - U-Boot > - iPXE > - GRUB > > What we need is the offset to the next struct bf_log. > > > - msgs: the array of log messages, > > - should we add CRC or hash or signatures here? > > > > The members of struct bf_log_msg: > > - size: total size of bf_log_msg struct, > > - ts_nsec: timestamp expressed in nanoseconds starting from 0, > > Would each message producer start from 0? > > Shouldn't we use the time from the hardware RTC if it is available via > boot service GetTime()? > > > - level: similar to syslog meaning; can be used to differentiate normal messages > > from debug messages; the exact interpretation depends on the current producer > > type specified in the bf_log.producer, > > - facility: similar to syslog meaning; can be used to differentiate the sources of > > the messages, e.g. message produced by networking module; the exact interpretation > > depends on the current producer type specified in the bf_log.producer, > > - msg_off: the log message offset in strings[], > > What is this field good for? Why don't you start the the string at > strings[0]? > What would be useful would be the offset to the next bf_log_msg. > > > - strings[0]: the beginning of log message type, similar to the facility member but > > NUL terminated string instead of integer; this will be used by, e.g., the GRUB2 > > for messages printed using grub_dprintf(), > > - strings[msg_off]: the beginning of log message, NUL terminated string. > > > Why strings in plural? Do you want to put multiple strings into > 'strings'? What identifies the last string? > > > > > > Note: The producers are free to use/ignore any given set of level, facility and/or > > log type members. Though the usage of these members has to be clearly defined. > > Ignored integer members should be set to 0. Ignored log message type should > > contain an empty NUL terminated string. The log message is mandatory but can > > be an empty NUL terminated string. > > > > There is still not fully solved problem how the logs should be presented to the OS. > > On the UEFI platforms we can use config tables to do that. Then > > probably bf_log.next_bf_log_addr should not be used. > > Why? How would you otherwise find the entries of the next produser in > the configuration table? What I am missing is a GUID for the > configuration table. > > > On the ACPI and Device Tree platforms we can use these mechanisms to > > present the logs to the OSes. The situation gets more > > I do not understand this. > > UEFI implementations use either of ACPI and device-trees and support > configuration tables. Why do you want to use some other binding? > > Best regards > > Heinrich > > > difficult if neither of these mechanisms are present. However, maybe > > we should not bother too much about that because probably these > > platforms getting less and less common. > > > > Anyway, I am aware that this is not specification per se. The goal > > of this email is to continue the discussion about the idea of the > > firmware and booloader log and to find out where the final > > specification should land. Of course taking into the account assumptions made above. > > > > You can find previous discussions about related topics at [1], [2] and [3]. > > > > Additionally, I am going to present this during GRUB mini-summit > > session on Tuesday, 17th of November at 15:45 UTC. So, if you want > > to discuss the log design please join us. You can find more details here [4]. > > > > Daniel > > > > [1] > > https://lists.gnu.org/archive/html/grub-devel/2019-10/msg00107.html > > [2] > > https://lists.gnu.org/archive/html/grub-devel/2019-11/msg00079.html > > [3] > > https://lists.gnu.org/archive/html/grub-devel/2020-05/msg00223.html > > [4] https://twitter.com/3mdeb_com/status/1327278804100931587 > > > _______________________________________________ Grub-devel mailing list Grub-devel at gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel 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.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,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 62462C433FE for ; Fri, 4 Dec 2020 12:55:05 +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 9BD6D22AB0 for ; Fri, 4 Dec 2020 12:55:04 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9BD6D22AB0 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=eltan.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from list by lists.xenproject.org with outflank-mailman.44728.80162 (Exim 4.92) (envelope-from ) id 1klAbc-0006TB-Ih; Fri, 04 Dec 2020 12:54:36 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 44728.80162; Fri, 04 Dec 2020 12:54:36 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1klAbc-0006T4-FC; Fri, 04 Dec 2020 12:54:36 +0000 Received: by outflank-mailman (input) for mailman id 44728; Fri, 04 Dec 2020 12:53:02 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1klAa5-0006Pg-1G for xen-devel@lists.xenproject.org; Fri, 04 Dec 2020 12:53:02 +0000 Received: from mailfilter03-out40.webhostingserver.nl (unknown [195.211.72.99]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id d887c7e6-7688-473d-a48e-6d2a4b047e1e; Fri, 04 Dec 2020 12:52:55 +0000 (UTC) Received: from s219.webhostingserver.nl (unknown [195.211.72.6]) by mailfilter03.webhostingserver.nl (Halon) with ESMTPSA id 9f3e2b36-362f-11eb-bfeb-001a4a4cb9a5; Fri, 04 Dec 2020 13:52:52 +0100 (CET) Received: from 84-85-114-86.fixed.kpn.net ([84.85.114.86] helo=Eltsrv03.Eltan.local) by s219.webhostingserver.nl with esmtpa (Exim 4.93.0.4) (envelope-from ) id 1klAZw-008vUv-HL; Fri, 04 Dec 2020 13:52:52 +0100 Received: from Eltsrv03.Eltan.local (192.168.100.3) by Eltsrv03.Eltan.local (192.168.100.3) with Microsoft SMTP Server (TLS) id 15.0.847.32; Fri, 4 Dec 2020 13:52:17 +0100 Received: from Eltsrv03.Eltan.local ([fe80::24e7:1cc6:a76a:a3a8]) by Eltsrv03.Eltan.local ([fe80::24e7:1cc6:a76a:a3a8%12]) with mapi id 15.00.0847.040; Fri, 4 Dec 2020 13:52:17 +0100 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: d887c7e6-7688-473d-a48e-6d2a4b047e1e DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eltan.com; s=whs1; h=mime-version:content-transfer-encoding:content-type:in-reply-to:references: message-id:date:subject:cc:to:from:from; bh=IsgwRvW85E5SBp0vynDgOoFtfedakcxXs8UmfqTBX74=; b=N4FhGCZnMbeERmDcdg5d3j7UCPkBM/7rkoattgo1kGQtz6cd/vhlIYBW9eW2gS81F1+KHwd1dvU/n bs5LZB4z9BckKSRvL2hr6W0ByWnBjSg+QnRS/CskldPK0DBZKRZdNo/pUzf89/3wcGBkG3mqaU//b6 8EJFzXOoZKA5FxDqd0gdZJ3yjWCL7qEyaR5isWIR9U3PYtF5VIBTjbGQl0yCkruWbYzG41Q1FfUTtQ jPTTcddU/ErkMwScPlK+QzY9Pr9neMlFfAMfidnRAteB2z1OYTm6cmVtELmzVVlhYuKq9r3EKl/4+C STxZwTQbP5valpbaI6HCLAC2t2mLvaQ== X-Halon-ID: 9f3e2b36-362f-11eb-bfeb-001a4a4cb9a5 From: Wim Vervoorn To: The development of GNU GRUB , Daniel Kiper CC: Coreboot , LKML , "systemd-devel@lists.freedesktop.org" , "trenchboot-devel@googlegroups.com" , U-Boot Mailing List , "x86@kernel.org" , "xen-devel@lists.xenproject.org" , "alecb@umass.edu" , "alexander.burmashev@oracle.com" , "allen.cryptic@gmail.com" , "andrew.cooper3@citrix.com" , "ard.biesheuvel@linaro.org" , "btrotter@gmail.com" , "dpsmith@apertussolutions.com" , "eric.devolder@oracle.com" , "eric.snowberg@oracle.com" , "hpa@zytor.com" , "hun@n-dimensional.de" , "javierm@redhat.com" , "joao.m.martins@oracle.com" , "kanth.ghatraju@oracle.com" , "konrad.wilk@oracle.com" , "krystian.hebel@3mdeb.com" , "leif@nuviainc.com" , "lukasz.hawrylko@intel.com" , "luto@amacapital.net" , "michal.zygowski@3mdeb.com" , "mjg59@google.com" , "mtottenh@akamai.com" , Vladimir 'phcoder' Serbinenko , "piotr.krol@3mdeb.com" , "pjones@redhat.com" , Paul Menzel , "roger.pau@citrix.com" , "ross.philipson@oracle.com" , "tyhicks@linux.microsoft.com" , Heinrich Schuchardt Subject: RE: [SPECIFICATION RFC] The firmware and bootloader log specification Thread-Topic: [SPECIFICATION RFC] The firmware and bootloader log specification Thread-Index: AQHWyRJEB7rkC+S91ESmRf+zunoIxKnm5awg Date: Fri, 4 Dec 2020 12:52:17 +0000 Message-ID: <6c1e79be210549949c30253a6cfcafc1@Eltsrv03.Eltan.local> References: <20201113235242.k6fzlwmwm2xqhqsi@tomti.i.net-space.pl> In-Reply-To: Accept-Language: nl-NL, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [192.168.100.108] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Antivirus-Scanner: Clean mail though you should still use an Antivirus SGVsbG8gSnVsaXVzLA0KDQpJIGFncmVlIHdpdGggeW91LiBVc2luZyBhbiBleGlzdGluZyBzdGFu ZGFyZCBpcyBiZXR0ZXIgdGhhbiBpbnZlbnRpbmcgYSBuZXcgb25lIGluIHRoaXMgY2FzZS4gSSB0 aGluayB1c2luZyB0aGUgY29yZWJvb3QgbG9nZ2luZyBpcyBhIGdvb2QgaWRlYSBhcyB0aGVyZSBp cyBpbmRlZWQgYSBsb3Qgb2Ygc3VwcG9ydCBhbHJlYWR5IGF2YWlsYWJsZSBhbmQgaXQgaXMgbGln aHR3ZWlnaHQgYW5kIHNpbXBsZS4NCg0KQmVzdCBSZWdhcmRzLA0KV2ltIFZlcnZvb3JuDQoNCkVs dGFuIEIuVi4NCkFtYmFjaHRzdHJhYXQgMjMNCjU0ODEgU00gU2NoaWpuZGVsDQpUaGUgTmV0aGVy bGFuZHMNCg0KVCA6ICszMS0oMCk3My01OTQgNDYgNjQNCkUgOiB3dmVydm9vcm5AZWx0YW4uY29t DQpXIDogaHR0cDovL3d3dy5lbHRhbi5jb20NCg0KDQoiVGhpcyBtZXNzYWdlIGNvbnRhaW5zIGNv bmZpZGVudGlhbCBpbmZvcm1hdGlvbi4gVW5sZXNzIHlvdSBhcmUgdGhlIGludGVuZGVkIHJlY2lw aWVudCBvZiB0aGlzIG1lc3NhZ2UsIGFueSB1c2Ugb2YgdGhpcyBtZXNzYWdlIGlzIHN0cmljdGx5 IHByb2hpYml0ZWQuIElmIHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMgbWVzc2FnZSBpbiBlcnJvciwg cGxlYXNlIGltbWVkaWF0ZWx5IG5vdGlmeSB0aGUgc2VuZGVyIGJ5IHRlbGVwaG9uZSArMzEtKDAp NzMtNTk0NDY2NCBvciByZXBseSBlbWFpbCwgYW5kIGltbWVkaWF0ZWx5IGRlbGV0ZSB0aGlzIG1l c3NhZ2UgYW5kIGFsbCBjb3BpZXMuIg0KDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpG cm9tOiBHcnViLWRldmVsIFttYWlsdG86Z3J1Yi1kZXZlbC1ib3VuY2VzK3d2ZXJ2b29ybj1lbHRh bi5jb21AZ251Lm9yZ10gT24gQmVoYWxmIE9mIEp1bGl1cyBXZXJuZXINClNlbnQ6IFRodXJzZGF5 LCBEZWNlbWJlciAzLCAyMDIwIDI6MTggQU0NClRvOiBEYW5pZWwgS2lwZXIgPGRhbmllbC5raXBl ckBvcmFjbGUuY29tPg0KQ2M6IENvcmVib290IDxjb3JlYm9vdEBjb3JlYm9vdC5vcmc+OyBUaGUg ZGV2ZWxvcG1lbnQgb2YgR1JVQiAyIDxncnViLWRldmVsQGdudS5vcmc+OyBMS01MIDxsaW51eC1r ZXJuZWxAdmdlci5rZXJuZWwub3JnPjsgc3lzdGVtZC1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmc7IHRyZW5jaGJvb3QtZGV2ZWxAZ29vZ2xlZ3JvdXBzLmNvbTsgVS1Cb290IE1haWxpbmcgTGlz dCA8dS1ib290QGxpc3RzLmRlbnguZGU+OyB4ODZAa2VybmVsLm9yZzsgeGVuLWRldmVsQGxpc3Rz LnhlbnByb2plY3Qub3JnOyBhbGVjYkB1bWFzcy5lZHU7IGFsZXhhbmRlci5idXJtYXNoZXZAb3Jh Y2xlLmNvbTsgYWxsZW4uY3J5cHRpY0BnbWFpbC5jb207IGFuZHJldy5jb29wZXIzQGNpdHJpeC5j b207IGFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmc7IGJ0cm90dGVyQGdtYWlsLmNvbTsgZHBzbWl0 aEBhcGVydHVzc29sdXRpb25zLmNvbTsgZXJpYy5kZXZvbGRlckBvcmFjbGUuY29tOyBlcmljLnNu b3diZXJnQG9yYWNsZS5jb207IGhwYUB6eXRvci5jb207IGh1bkBuLWRpbWVuc2lvbmFsLmRlOyBq YXZpZXJtQHJlZGhhdC5jb207IGpvYW8ubS5tYXJ0aW5zQG9yYWNsZS5jb207IGthbnRoLmdoYXRy YWp1QG9yYWNsZS5jb207IGtvbnJhZC53aWxrQG9yYWNsZS5jb207IGtyeXN0aWFuLmhlYmVsQDNt ZGViLmNvbTsgbGVpZkBudXZpYWluYy5jb207IGx1a2Fzei5oYXdyeWxrb0BpbnRlbC5jb207IGx1 dG9AYW1hY2FwaXRhbC5uZXQ7IG1pY2hhbC56eWdvd3NraUAzbWRlYi5jb207IG1qZzU5QGdvb2ds ZS5jb207IG10b3R0ZW5oQGFrYW1haS5jb207IFZsYWRpbWlyICdwaGNvZGVyJyBTZXJiaW5lbmtv IDxwaGNvZGVyQGdtYWlsLmNvbT47IHBpb3RyLmtyb2xAM21kZWIuY29tOyBwam9uZXNAcmVkaGF0 LmNvbTsgUGF1bCBNZW56ZWwgPHBtZW56ZWxAbW9sZ2VuLm1wZy5kZT47IHJvZ2VyLnBhdUBjaXRy aXguY29tOyByb3NzLnBoaWxpcHNvbkBvcmFjbGUuY29tOyB0eWhpY2tzQGxpbnV4Lm1pY3Jvc29m dC5jb207IEhlaW5yaWNoIFNjaHVjaGFyZHQgPHh5cHJvbi5nbHBrQGdteC5kZT4NClN1YmplY3Q6 IFJlOiBbU1BFQ0lGSUNBVElPTiBSRkNdIFRoZSBmaXJtd2FyZSBhbmQgYm9vdGxvYWRlciBsb2cg c3BlY2lmaWNhdGlvbg0KDQpTdGFuZGFyZGl6aW5nIGluLW1lbW9yeSBsb2dnaW5nIHNvdW5kcyBs aWtlIGFuIGludGVyZXN0aW5nIGlkZWEsIGVzcGVjaWFsbHkgd2l0aCByZWdhcmRzIHRvIGNvbXBv bmVudHMgdGhhdCBjYW4gcnVuIG9uIHRvcCBvZiBkaWZmZXJlbnQgZmlybXdhcmUgc3RhY2tzICh0 aGluZ3MgbGlrZSBHUlVCIG9yIFRGLUEpLiBCdXQgSSB3b3VsZCBiZSBhIGJpdCB3YXJ5IG9mIGNy ZWF0aW5nIGEgIm5ldyBzdGFuZGFyZCB0byBydWxlIHRoZW0gYWxsIiBhbmQgdGhlbiBleHBlY3Rp bmcgYWxsIHByb2plY3RzIHRvIHN3aXRjaCB3aGF0IHRoZXkgaGF2ZSBvdmVyIHRvIHRoYXQuIEkg dGhpbmsgd2UgYWxsIGtub3cgaHR0cHM6Ly94a2NkLmNvbS85MjcvLg0KDQpIYXZlIHlvdSBsb29r ZWQgYXJvdW5kIGFuZCBldmFsdWF0ZWQgZXhpc3Rpbmcgc29sdXRpb25zIHRoYXQgYWxyZWFkeSBo YXZlIHNvbWUgcHJvbGlmZXJhdGlvbiBmaXJzdD8gSSB0aGluayBpdCB3b3VsZCBiZSBtdWNoIGVh c2llciB0byBjb252aW5jZSBwZW9wbGUgdG8gc3RhbmRhcmRpemUgb24gc29tZXRoaW5nIHRoYXQg YWxyZWFkeSBoYXMgZXhpc3RpbmcgdXNlcnMgYW5kIGRyaXZlcnMgYXZhaWxhYmxlIGluIG11bHRp cGxlIHByb2plY3RzLg0KDQpJbiBjb3JlYm9vdCB3ZSdyZSB1c2luZyBhIHZlcnkgc2ltcGxlIGNo YXJhY3RlciByaW5nIGJ1ZmZlciB0aGF0IG9ubHkgaGFzIHR3byA0LWJ5dGUgaGVhZGVyIGZpZWxk czogdG90YWwgc2l6ZSBhbmQgY3Vyc29yIChpLmUuIGN1cnJlbnQgcG9zaXRpb24gd2hlcmUgeW91 IHdvdWxkIHdyaXRlIHRoZSBuZXh0IGNoYXJhY3RlcikuIFRoZSB0b3AgNCBiaXRzIG9mIHRoZSBj dXJzb3IgZmllbGQgYXJlIHJlc2VydmVkIGZvciBmbGFncywgb25lIG9mIHdoaWNoIGlzIHRoZSAi b3ZlcmZsb3ciIGZsYWcgdGhhdCB0ZWxscyB5b3Ugd2hldGhlciB0aGUgcmluZy1idWZmZXIgYWxy ZWFkeSBvdmVyZmxvd2VkIG9yIG5vdCAoc28gcmVhZGVycyBrbm93IHdoZXRoZXIgdG8gcHJpbnQg dGhlIHdob2xlIHJpbmcgYnVmZmVyLCBvciBvbmx5IGZyb20gdGhlIHN0YXJ0IHRvIHRoZSBjdXJy ZW50IGN1cnNvcikuIFdlIHRyeSB0byBkaW1lbnNpb24gdGhlIGJ1ZmZlcnMgc28gdGhleSBkb24n dCBvdmVyZmxvdyBvbiBhIHNpbmdsZSBib290LCBidXQgdGhpcyBhcHByb2FjaCBhbGxvd3MgdXMg dG8gbG9nIG11bHRpcGxlIGJvb3RzIG9uIHBsYXRmb3JtcyB0aGF0IGNhbiBwZXJzaXN0IG1lbW9y eSBhY3Jvc3MgcmVib290cywgd2hpY2ggc29tZXRpbWVzIGNvbWVzIGluIGhhbmR5Lg0KDQpUaGUg ZGlzYWR2YW50YWdlcyBvZiB0aGF0IGFwcHJvYWNoIGNvbXBhcmVkIHRvIHlvdXIgcHJvcG9zYWwg YXJlIGxhY2sgb2Ygc29tZSBmZWF0dXJlcywgbGlrZSB0aGUgZmFjaWxpdGllcyBmaWVsZCAoYWx0 aG91Z2ggb25lIGNhbiBzdGlsbCBqdXN0IHByaW50IGEgdGFnIGxpa2UgIjwwPiIgb3IgIjw0PiIg YmVoaW5kIGVhY2ggbmV3bGluZSkgb3IgdGltZXN0YW1wcyAoY29yZWJvb3QgaW5zdGVhZCBoYXMg c2VwYXJhdGUgdGltZXN0YW1wIGxvZ2dpbmcpLiBCdXQgSSB0aGluayBhIHJlYWxseSBiaWcgYWR2 YW50YWdlIGlzIHNpemU6IGluIGVhcmx5IGZpcm13YXJlIGVudmlyb25tZW50cyBiZWZvcmUgRERS IHRyYWluaW5nLCBzcGFjZSBpcyBvZnRlbiB2ZXJ5IHByZWNpb3VzIGFuZCB3ZSBzdHJ1Z2dsZSB0 byBmaW5kIG1vcmUgdGhhbiBhIGNvdXBsZSBvZiBraWxvYnl0ZXMgZm9yIHRoZSBsb2cgYnVmZmVy LiBJZiBJIGxvb2sgYXQgdGhlIHN0cnVjdHVyZSB5b3UgcHJvcG9zZWQsIHRoYXQncyBhbHJlYWR5 IDI0IGJ5dGVzIG9mIG92ZXJoZWFkIHBlciBpbmRpdmlkdWFsIG1lc3NhZ2UuIElmIHdlIHdlcmUg aG9va2luZyB0aGF0IHVwIHRvIG91ciBub3JtYWwgcHJpbnRrKCkgZmFjaWxpdHkgaW4gY29yZWJv b3QgKHN1Y2ggdGhhdCBlYWNoIGludm9jYXRpb24gY3JlYXRlcyBhIG5ldyBtZXNzYWdlIGhlYWRl ciksIHRoYXQgd291bGQgcHJvYmFibHkgd2FzdGUgYWJvdXQgYSB0aGlyZCBvZiB0aGUgd2hvbGUg bG9nIGJ1ZmZlciBvbiBvdmVyaGVhZC4gSSB0aGluayBhIGNvbXBsaWNhdGVkLCBzeXNsb2ctc3R5 bGUgbG9nZ2luZyBzdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgaW5kaXZpZHVhbCBtZXNzYWdlIGJsb2Nr cyBpbnN0ZWFkIG9mIGEgY29udGludW91cyBjaGFyYWN0ZXIgc3RyaW5nIGlzbid0IHJlYWxseSBz dWl0YWJsZSBmb3IgZmlybXdhcmUgbG9nZ2luZy4NCg0KRldJVyB0aGUgY29yZWJvb3QgY29uc29s ZSBoYXMgZXhpc3Rpbmcgc3VwcG9ydCBpbiBMaW51eCAoaHR0cHM6Ly9naXQua2VybmVsLm9yZy9w dWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdG9ydmFsZHMvbGludXguZ2l0L3RyZWUvZHJpdmVycy9m aXJtd2FyZS9nb29nbGUvbWVtY29uc29sZS1jb3JlYm9vdC5jKSwNClNlYUJJT1MgKGh0dHBzOi8v Z2l0aHViLmNvbS9jb3JlYm9vdC9zZWFiaW9zL2Jsb2IvbWFzdGVyL3NyYy9mdy9jb3JlYm9vdC5j I0wyMTkpLA0KVEYtQSAoaHR0cHM6Ly9naXRodWIuY29tL0FSTS1zb2Z0d2FyZS9hcm0tdHJ1c3Rl ZC1maXJtd2FyZS9ibG9iL21hc3Rlci9kcml2ZXJzL2NvcmVib290L2NibWVtX2NvbnNvbGUvYWFy Y2g2NC9jYm1lbV9jb25zb2xlLlMpLA0KR1JVQiAoaHR0cHM6Ly9naXQuc2F2YW5uYWguZ251Lm9y Zy9jZ2l0L2dydWIuZ2l0L3RyZWUvZ3J1Yi1jb3JlL3Rlcm0vaTM4Ni9jb3JlYm9vdC9jYm1lbWMu YyksDQpVLUJvb3QgKGh0dHBzOi8vZ2l0aHViLmNvbS91LWJvb3QvdS1ib290L2Jsb2IvbWFzdGVy L2RyaXZlcnMvbWlzYy9jYm1lbV9jb25zb2xlLmMpDQphbmQgcHJvYmFibHkgYSBjb3VwbGUgb2Yg b3RoZXJzIEknbSBub3QgYXdhcmUgb2YuIEFuZCB0aGUgY29kZSB0byBhZGQgc3VwcG9ydCAoZXNw ZWNpYWxseSB3aGVuIG9ubHkgYXBwZW5kaW5nKSBpcyBzbyBzaW1wbGUgdGhhdCBpdCBqdXN0IHRh a2VzIGEgY291cGxlIG9mIGxpbmVzIHRvIGltcGxlbWVudCAoYmluYXJ5IGNvZGUgc2l6ZSB0byBp bXBsZW1lbnQgdGhlIGZvcm1hdCBpcyBhbHNvIGFsd2F5cyBhIGNvbmNlcm4gZm9yIGZpcm13YXJl IGVudmlyb25tZW50cykuDQoNCk9uIFdlZCwgTm92IDE4LCAyMDIwIGF0IDc6MDQgQU0gSGVpbnJp Y2ggU2NodWNoYXJkdCA8eHlwcm9uLmdscGtAZ214LmRlPiB3cm90ZToNCj4NCj4gT24gMTQuMTEu MjAgMDA6NTIsIERhbmllbCBLaXBlciB3cm90ZToNCj4gPiBIZXksDQo+ID4NCj4gPiBUaGlzIGlz IG5leHQgYXR0ZW1wdCB0byBjcmVhdGUgZmlybXdhcmUgYW5kIGJvb3Rsb2FkZXIgbG9nIHNwZWNp ZmljYXRpb24uDQo+ID4gRHVlIHRvIGhpZ2ggaW50ZXJlc3QgYW1vbmcgaW5kdXN0cnkgaXQgaXMg YW4gZXh0ZW5zaW9uIHRvIHRoZSANCj4gPiBpbml0aWFsIGJvb3Rsb2FkZXIgbG9nIG9ubHkgc3Bl Y2lmaWNhdGlvbi4gSXQgdGFrZXMgaW50byB0aGUgYWNjb3VudCANCj4gPiBtb3N0IG9mIHRoZSBj b21tZW50cyB3aGljaCBJIGdvdCB1cCB1bnRpbCBub3cuDQo+ID4NCj4gPiBUaGUgZ29hbCBpcyB0 byBwYXNzIGFsbCBsb2dzIHByb2R1Y2VkIGJ5IHZhcmlvdXMgYm9vdCBjb21wb25lbnRzIHRvIA0K PiA+IHRoZSBydW5uaW5nIE9TLiBUaGUgT1Mga2VybmVsIHNob3VsZCBleHBvc2UgdGhlc2UgbG9n cyB0byB0aGUgdXNlciANCj4gPiBzcGFjZSBhbmQvb3IgcHJvY2VzcyB0aGVtIGludGVybmFsbHkg aWYgbmVlZGVkLiBUaGUgY29udGVudCBvZiB0aGVzZSANCj4gPiBsb2dzIHNob3VsZCBiZSBodW1h biByZWFkYWJsZS4gSG93ZXZlciwgdGhleSBzaG91bGQgYWxzbyBjb250YWluIHRoZSANCj4gPiBp bmZvcm1hdGlvbiB3aGljaCBhbGxvd3MgYWRtaW5zIHRvIGRvIGUuZy4gYm9vdCB0aW1lIGFuYWx5 c2lzLg0KPiA+DQo+ID4gVGhlIGxvZyBzcGVjaWZpY2F0aW9uIHNob3VsZCBiZSBhcyBtdWNoIGFz IHBvc3NpYmxlIHBsYXRmb3JtIA0KPiA+IGFnbm9zdGljIGFuZCBzZWxmIGNvbnRhaW5lZC4gVGhl IGZpbmFsIHZlcnNpb24gb2YgdGhpcyBzcGVjIHNob3VsZCANCj4gPiBiZSBtZXJnZWQgaW50byBl eGlzdGluZyBzcGVjaWZpY2F0aW9ucywgZS5nLiBVRUZJLCBBQ1BJLCBNdWx0aWJvb3QyLCANCj4g PiBvciBiZSBhIHN0YW5kYWxvbmUgc3BlYywgZS5nLiBhcyBhIHBhcnQgb2YgT0FTSVMgU3RhbmRh cmRzLiBUaGUgDQo+ID4gZm9ybWVyIHNlZW1zIGJldHRlciBidXQgaXMgbm90IHBlcmZlY3QgdG9v Li4uDQo+ID4NCj4gPiBIZXJlIGlzIHRoZSBkZXNjcmlwdGlvbiAocHNldWRvY29kZSkgb2YgdGhl IHN0cnVjdHVyZXMgd2hpY2ggd2lsbCBiZSANCj4gPiB1c2VkIHRvIHN0b3JlIHRoZSBsb2cgZGF0 YS4NCj4NCj4gSGVsbG8gRGFuaWVsLA0KPg0KPiB0aGFua3MgZm9yIHlvdXIgc3VnZ2VzdGlvbiB3 aGljaCBtYWtlcyBnb29kIHNlbnNlIHRvIG1lLg0KPg0KPiBXaHkgY2FuJ3Qgd2Ugc2ltcGx5IHVz ZSB0aGUgbWVzc2FnZSBmb3JtYXQgZGVmaW5lZCBpbiAiVGhlIFN5c2xvZyANCj4gUHJvdG9jb2wi LCBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTQyND8NCj4NCj4gPg0KPiA+ICAgc3Ry dWN0IGJmX2xvZw0KPiA+ICAgew0KPiA+ICAgICB1aW50MzJfdCAgIHZlcnNpb247DQo+ID4gICAg IGNoYXIgICAgICAgcHJvZHVjZXJbNjRdOw0KPiA+ICAgICB1aW50NjRfdCAgIGZsYWdzOw0KPiA+ ICAgICB1aW50NjRfdCAgIG5leHRfYmZfbG9nX2FkZHI7DQo+ID4gICAgIHVpbnQzMl90ICAgbmV4 dF9tc2dfb2ZmOw0KPiA+ICAgICBiZl9sb2dfbXNnIG1zZ3NbXTsNCj4NCj4gQXMgYmZfbG9nX21z ZyBpcyBkb2VzIG5vdCBoYXZlIGRlZmluZWQgbGVuZ3RoIG1zZ3NbXSBjYW5ub3QgYmUgYW4gYXJy YXkuDQo+DQo+ID4gICB9DQo+ID4NCj4gPiAgIHN0cnVjdCBiZl9sb2dfbXNnDQo+ID4gICB7DQo+ ID4gICAgIHVpbnQzMl90IHNpemU7DQo+ID4gICAgIHVpbnQ2NF90IHRzX25zZWM7DQo+ID4gICAg IHVpbnQzMl90IGxldmVsOw0KPiA+ICAgICB1aW50MzJfdCBmYWNpbGl0eTsNCj4gPiAgICAgdWlu dDMyX3QgbXNnX29mZjsNCj4gPiAgICAgY2hhciAgICAgc3RyaW5nc1tdOw0KPiA+ICAgfQ0KPiA+ DQo+ID4gVGhlIG1lbWJlcnMgb2Ygc3RydWN0IGJmX2xvZzoNCj4gPiAgIC0gdmVyc2lvbjogdGhl IGZpcm13YXJlIGFuZCBib290bG9hZGVyIGxvZyBmb3JtYXQgdmVyc2lvbiBudW1iZXIsIDEgZm9y IG5vdywNCj4gPiAgIC0gcHJvZHVjZXI6IHRoZSBwcm9kdWNlci9maXJtd2FyZS9ib290bG9hZGVy Ly4uLiB0eXBlOyB0aGUgbGVuZ3RoDQo+ID4gICAgIGFsbG93cyBBU0NJSSBVVUlEIHN0b3JhZ2Ug aWYgc29tZWJvZHkgbmVlZHMgdGhhdCBmdW5jdGlvbmFsaXR5LA0KPiA+ICAgLSBmbGFnczogaXQg Y2FuIGJlIHVzZWQgdG8gc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgbG9nIHN0YXRlLCBlLmcuDQo+ ID4gICAgIGl0IHdhcyB0cnVuY2F0ZWQgb3Igbm90IChkb2VzIGl0IG1ha2Ugc2Vuc2UgdG8gaGF2 ZSBhbiBpbmZvcm1hdGlvbg0KPiA+ICAgICBhYm91dCB0aGUgbnVtYmVyIG9mIGxvc3QgbWVzc2Fn ZXM/KSwNCj4gPiAgIC0gbmV4dF9iZl9sb2dfYWRkcjogYWRkcmVzcyBvZiBuZXh0IGJmX2xvZyBz dHJ1Y3Q7IG5vbmUgaWYgemVybyAoSSB0aGluaw0KPiA+ICAgICBuZXdlciBzcGVjIHZlcnNpb25z IHNob3VsZCBub3QgY2hhbmdlIGFueXRoaW5nIGluIGZpcnN0IDUgYmZfbG9nIG1lbWJlcnM7DQo+ ID4gICAgIHRoaXMgd2F5IG9sZGVyIGxvZyBwYXJzZXJzIHdpbGwgYmUgYWJsZSB0byB0cmF2ZXJz ZS9jb3B5IGFsbCBsb2dzIHJlZ2FyZGxlc3MNCj4gPiAgICAgb2YgdmVyc2lvbiB1c2VkIGluIG9u ZSBsb2cgb3IgYW5vdGhlciksDQo+ID4gICAtIG5leHRfbXNnX29mZjogdGhlIG9mZnNldCwgaW4g Ynl0ZXMsIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgYmZfbG9nIHN0cnVjdCwNCj4gPiAgICAg b2YgdGhlIG5leHQgYnl0ZSBhZnRlciB0aGUgbGFzdCBsb2cgbWVzc2FnZSBpbiB0aGUgbXNnc1td OyBpLmUuIHRoZSBvZmZzZXQNCj4gPiAgICAgb2YgdGhlIG5leHQgYXZhaWxhYmxlIGxvZyBtZXNz YWdlIHNsb3Q7IGl0IGlzIGVxdWFsIHRvIHRoZSB0b3RhbCBzaXplIG9mDQo+ID4gICAgIHRoZSBs b2cgYnVmZmVyIGluY2x1ZGluZyB0aGUgYmZfbG9nIHN0cnVjdCwNCj4NCj4gV2h5IHdvdWxkIHlv dSBuZWVkIGFuIG9mZnNldCB0byBmaXJzdCB1bnVzZWQgYnl0ZT8NCj4NCj4gV2UgcG9zc2libHkg aGF2ZSBtdWx0aXBsZSBwcm9kdWNlcnMgb2YgbWVzc2FnZXM6DQo+DQo+IC0gVEYtQQ0KPiAtIFUt Qm9vdA0KPiAtIGlQWEUNCj4gLSBHUlVCDQo+DQo+IFdoYXQgd2UgbmVlZCBpcyB0aGUgb2Zmc2V0 IHRvIHRoZSBuZXh0IHN0cnVjdCBiZl9sb2cuDQo+DQo+ID4gICAtIG1zZ3M6IHRoZSBhcnJheSBv ZiBsb2cgbWVzc2FnZXMsDQo+ID4gICAtIHNob3VsZCB3ZSBhZGQgQ1JDIG9yIGhhc2ggb3Igc2ln bmF0dXJlcyBoZXJlPw0KPiA+DQo+ID4gVGhlIG1lbWJlcnMgb2Ygc3RydWN0IGJmX2xvZ19tc2c6 DQo+ID4gICAtIHNpemU6IHRvdGFsIHNpemUgb2YgYmZfbG9nX21zZyBzdHJ1Y3QsDQo+ID4gICAt IHRzX25zZWM6IHRpbWVzdGFtcCBleHByZXNzZWQgaW4gbmFub3NlY29uZHMgc3RhcnRpbmcgZnJv bSAwLA0KPg0KPiBXb3VsZCBlYWNoIG1lc3NhZ2UgcHJvZHVjZXIgc3RhcnQgZnJvbSAwPw0KPg0K PiBTaG91bGRuJ3Qgd2UgdXNlIHRoZSB0aW1lIGZyb20gdGhlIGhhcmR3YXJlIFJUQyBpZiBpdCBp cyBhdmFpbGFibGUgdmlhIA0KPiBib290IHNlcnZpY2UgR2V0VGltZSgpPw0KPg0KPiA+ICAgLSBs ZXZlbDogc2ltaWxhciB0byBzeXNsb2cgbWVhbmluZzsgY2FuIGJlIHVzZWQgdG8gZGlmZmVyZW50 aWF0ZSBub3JtYWwgbWVzc2FnZXMNCj4gPiAgICAgZnJvbSBkZWJ1ZyBtZXNzYWdlczsgdGhlIGV4 YWN0IGludGVycHJldGF0aW9uIGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgcHJvZHVjZXINCj4gPiAg ICAgdHlwZSBzcGVjaWZpZWQgaW4gdGhlIGJmX2xvZy5wcm9kdWNlciwNCj4gPiAgIC0gZmFjaWxp dHk6IHNpbWlsYXIgdG8gc3lzbG9nIG1lYW5pbmc7IGNhbiBiZSB1c2VkIHRvIGRpZmZlcmVudGlh dGUgdGhlIHNvdXJjZXMgb2YNCj4gPiAgICAgdGhlIG1lc3NhZ2VzLCBlLmcuIG1lc3NhZ2UgcHJv ZHVjZWQgYnkgbmV0d29ya2luZyBtb2R1bGU7IHRoZSBleGFjdCBpbnRlcnByZXRhdGlvbg0KPiA+ ICAgICBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IHByb2R1Y2VyIHR5cGUgc3BlY2lmaWVkIGluIHRo ZSBiZl9sb2cucHJvZHVjZXIsDQo+ID4gICAtIG1zZ19vZmY6IHRoZSBsb2cgbWVzc2FnZSBvZmZz ZXQgaW4gc3RyaW5nc1tdLA0KPg0KPiBXaGF0IGlzIHRoaXMgZmllbGQgZ29vZCBmb3I/IFdoeSBk b24ndCB5b3Ugc3RhcnQgdGhlIHRoZSBzdHJpbmcgYXQgDQo+IHN0cmluZ3NbMF0/DQo+IFdoYXQg d291bGQgYmUgdXNlZnVsIHdvdWxkIGJlIHRoZSBvZmZzZXQgdG8gdGhlIG5leHQgYmZfbG9nX21z Zy4NCj4NCj4gPiAgIC0gc3RyaW5nc1swXTogdGhlIGJlZ2lubmluZyBvZiBsb2cgbWVzc2FnZSB0 eXBlLCBzaW1pbGFyIHRvIHRoZSBmYWNpbGl0eSBtZW1iZXIgYnV0DQo+ID4gICAgIE5VTCB0ZXJt aW5hdGVkIHN0cmluZyBpbnN0ZWFkIG9mIGludGVnZXI7IHRoaXMgd2lsbCBiZSB1c2VkIGJ5LCBl LmcuLCB0aGUgR1JVQjINCj4gPiAgICAgZm9yIG1lc3NhZ2VzIHByaW50ZWQgdXNpbmcgZ3J1Yl9k cHJpbnRmKCksDQo+ID4gICAtIHN0cmluZ3NbbXNnX29mZl06IHRoZSBiZWdpbm5pbmcgb2YgbG9n IG1lc3NhZ2UsIE5VTCB0ZXJtaW5hdGVkIHN0cmluZy4NCj4NCj4NCj4gV2h5IHN0cmluZ3MgaW4g cGx1cmFsPyBEbyB5b3Ugd2FudCB0byBwdXQgbXVsdGlwbGUgc3RyaW5ncyBpbnRvIA0KPiAnc3Ry aW5ncyc/IFdoYXQgaWRlbnRpZmllcyB0aGUgbGFzdCBzdHJpbmc/DQo+DQo+DQo+ID4NCj4gPiBO b3RlOiBUaGUgcHJvZHVjZXJzIGFyZSBmcmVlIHRvIHVzZS9pZ25vcmUgYW55IGdpdmVuIHNldCBv ZiBsZXZlbCwgZmFjaWxpdHkgYW5kL29yDQo+ID4gICAgICAgbG9nIHR5cGUgbWVtYmVycy4gVGhv dWdoIHRoZSB1c2FnZSBvZiB0aGVzZSBtZW1iZXJzIGhhcyB0byBiZSBjbGVhcmx5IGRlZmluZWQu DQo+ID4gICAgICAgSWdub3JlZCBpbnRlZ2VyIG1lbWJlcnMgc2hvdWxkIGJlIHNldCB0byAwLiBJ Z25vcmVkIGxvZyBtZXNzYWdlIHR5cGUgc2hvdWxkDQo+ID4gICAgICAgY29udGFpbiBhbiBlbXB0 eSBOVUwgdGVybWluYXRlZCBzdHJpbmcuIFRoZSBsb2cgbWVzc2FnZSBpcyBtYW5kYXRvcnkgYnV0 IGNhbg0KPiA+ICAgICAgIGJlIGFuIGVtcHR5IE5VTCB0ZXJtaW5hdGVkIHN0cmluZy4NCj4gPg0K PiA+IFRoZXJlIGlzIHN0aWxsIG5vdCBmdWxseSBzb2x2ZWQgcHJvYmxlbSBob3cgdGhlIGxvZ3Mg c2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgT1MuDQo+ID4gT24gdGhlIFVFRkkgcGxhdGZvcm1z IHdlIGNhbiB1c2UgY29uZmlnIHRhYmxlcyB0byBkbyB0aGF0LiBUaGVuIA0KPiA+IHByb2JhYmx5 IGJmX2xvZy5uZXh0X2JmX2xvZ19hZGRyIHNob3VsZCBub3QgYmUgdXNlZC4NCj4NCj4gV2h5PyBI b3cgd291bGQgeW91IG90aGVyd2lzZSBmaW5kIHRoZSBlbnRyaWVzIG9mIHRoZSBuZXh0IHByb2R1 c2VyIGluIA0KPiB0aGUgY29uZmlndXJhdGlvbiB0YWJsZT8gV2hhdCBJIGFtIG1pc3NpbmcgaXMg YSBHVUlEIGZvciB0aGUgDQo+IGNvbmZpZ3VyYXRpb24gdGFibGUuDQo+DQo+ID4gT24gdGhlIEFD UEkgYW5kIERldmljZSBUcmVlIHBsYXRmb3JtcyB3ZSBjYW4gdXNlIHRoZXNlIG1lY2hhbmlzbXMg dG8gDQo+ID4gcHJlc2VudCB0aGUgbG9ncyB0byB0aGUgT1Nlcy4gVGhlIHNpdHVhdGlvbiBnZXRz IG1vcmUNCj4NCj4gSSBkbyBub3QgdW5kZXJzdGFuZCB0aGlzLg0KPg0KPiBVRUZJIGltcGxlbWVu dGF0aW9ucyB1c2UgZWl0aGVyIG9mIEFDUEkgYW5kIGRldmljZS10cmVlcyBhbmQgc3VwcG9ydCAN Cj4gY29uZmlndXJhdGlvbiB0YWJsZXMuIFdoeSBkbyB5b3Ugd2FudCB0byB1c2Ugc29tZSBvdGhl ciBiaW5kaW5nPw0KPg0KPiBCZXN0IHJlZ2FyZHMNCj4NCj4gSGVpbnJpY2gNCj4NCj4gPiBkaWZm aWN1bHQgaWYgbmVpdGhlciBvZiB0aGVzZSBtZWNoYW5pc21zIGFyZSBwcmVzZW50LiBIb3dldmVy LCBtYXliZSANCj4gPiB3ZSBzaG91bGQgbm90IGJvdGhlciB0b28gbXVjaCBhYm91dCB0aGF0IGJl Y2F1c2UgcHJvYmFibHkgdGhlc2UgDQo+ID4gcGxhdGZvcm1zIGdldHRpbmcgbGVzcyBhbmQgbGVz cyBjb21tb24uDQo+ID4NCj4gPiBBbnl3YXksIEkgYW0gYXdhcmUgdGhhdCB0aGlzIGlzIG5vdCBz cGVjaWZpY2F0aW9uIHBlciBzZS4gVGhlIGdvYWwgDQo+ID4gb2YgdGhpcyBlbWFpbCBpcyB0byBj b250aW51ZSB0aGUgZGlzY3Vzc2lvbiBhYm91dCB0aGUgaWRlYSBvZiB0aGUgDQo+ID4gZmlybXdh cmUgYW5kIGJvb2xvYWRlciBsb2cgYW5kIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSBmaW5hbCANCj4g PiBzcGVjaWZpY2F0aW9uIHNob3VsZCBsYW5kLiBPZiBjb3Vyc2UgdGFraW5nIGludG8gdGhlIGFj Y291bnQgYXNzdW1wdGlvbnMgbWFkZSBhYm92ZS4NCj4gPg0KPiA+IFlvdSBjYW4gZmluZCBwcmV2 aW91cyBkaXNjdXNzaW9ucyBhYm91dCByZWxhdGVkIHRvcGljcyBhdCBbMV0sIFsyXSBhbmQgWzNd Lg0KPiA+DQo+ID4gQWRkaXRpb25hbGx5LCBJIGFtIGdvaW5nIHRvIHByZXNlbnQgdGhpcyBkdXJp bmcgR1JVQiBtaW5pLXN1bW1pdCANCj4gPiBzZXNzaW9uIG9uIFR1ZXNkYXksIDE3dGggb2YgTm92 ZW1iZXIgYXQgMTU6NDUgVVRDLiBTbywgaWYgeW91IHdhbnQgDQo+ID4gdG8gZGlzY3VzcyB0aGUg bG9nIGRlc2lnbiBwbGVhc2Ugam9pbiB1cy4gWW91IGNhbiBmaW5kIG1vcmUgZGV0YWlscyBoZXJl IFs0XS4NCj4gPg0KPiA+IERhbmllbA0KPiA+DQo+ID4gWzFdIA0KPiA+IGh0dHBzOi8vbGlzdHMu Z251Lm9yZy9hcmNoaXZlL2h0bWwvZ3J1Yi1kZXZlbC8yMDE5LTEwL21zZzAwMTA3Lmh0bWwNCj4g PiBbMl0gDQo+ID4gaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9ncnViLWRldmVs LzIwMTktMTEvbXNnMDAwNzkuaHRtbA0KPiA+IFszXSANCj4gPiBodHRwczovL2xpc3RzLmdudS5v cmcvYXJjaGl2ZS9odG1sL2dydWItZGV2ZWwvMjAyMC0wNS9tc2cwMDIyMy5odG1sDQo+ID4gWzRd IGh0dHBzOi8vdHdpdHRlci5jb20vM21kZWJfY29tL3N0YXR1cy8xMzI3Mjc4ODA0MTAwOTMxNTg3 DQo+ID4NCj4NCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18NCkdydWItZGV2ZWwgbWFpbGluZyBsaXN0DQpHcnViLWRldmVsQGdudS5vcmcNCmh0dHBzOi8v bGlzdHMuZ251Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2dydWItZGV2ZWwNCg==