From 4ecb4fdc40decac2a0ccdd9e8f3e7081d4bf3d93 Mon Sep 17 00:00:00 2001 From: bugzilla-daemon Date: Tue, 5 May 2020 17:02:11 +0000 Subject: [PATCH] [libre-riscv-dev] [Bug 208] implement CORDIC in a general way sufficient to do transcendentals --- 4d/8cbb584b7a3e383fa3cc9e1382fb95f6b3724c | 192 ++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 4d/8cbb584b7a3e383fa3cc9e1382fb95f6b3724c diff --git a/4d/8cbb584b7a3e383fa3cc9e1382fb95f6b3724c b/4d/8cbb584b7a3e383fa3cc9e1382fb95f6b3724c new file mode 100644 index 0000000..d1cc273 --- /dev/null +++ b/4d/8cbb584b7a3e383fa3cc9e1382fb95f6b3724c @@ -0,0 +1,192 @@ +Return-path: +Envelope-to: publicinbox@libre-riscv.org +Delivery-date: Tue, 05 May 2020 18:02:13 +0100 +Received: from localhost ([::1] helo=libre-riscv.org) + by libre-soc.org with esmtp (Exim 4.89) + (envelope-from ) + id 1jW0xR-0000kq-6j; Tue, 05 May 2020 18:02:13 +0100 +Received: from localhost ([127.0.0.1] helo=bugs.libre-soc.org) + by libre-soc.org with esmtp (Exim 4.89) + (envelope-from ) id 1jW0xP-0000kb-CZ + for libre-riscv-dev@lists.libre-riscv.org; Tue, 05 May 2020 18:02:11 +0100 +From: bugzilla-daemon@libre-soc.org +To: libre-riscv-dev@lists.libre-riscv.org +Date: Tue, 05 May 2020 17:02:11 +0000 +X-Bugzilla-Reason: CC +X-Bugzilla-Type: changed +X-Bugzilla-Watch-Reason: None +X-Bugzilla-Product: Libre-SOC's first SoC +X-Bugzilla-Component: ALU (including IEEE754 16/32/64-bit FPU) +X-Bugzilla-Version: unspecified +X-Bugzilla-Keywords: +X-Bugzilla-Severity: enhancement +X-Bugzilla-Who: lkcl@lkcl.net +X-Bugzilla-Status: CONFIRMED +X-Bugzilla-Resolution: +X-Bugzilla-Priority: --- +X-Bugzilla-Assigned-To: mtnolan2640@gmail.com +X-Bugzilla-Flags: +X-Bugzilla-Changed-Fields: +Message-ID: +In-Reply-To: +References: +X-Bugzilla-URL: https://bugs.libre-soc.org/ +Auto-Submitted: auto-generated +MIME-Version: 1.0 +Subject: [libre-riscv-dev] [Bug 208] implement CORDIC in a general way + sufficient to do transcendentals +X-BeenThere: libre-riscv-dev@lists.libre-riscv.org +X-Mailman-Version: 2.1.23 +Precedence: list +List-Id: Libre-RISCV General Development + +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +Reply-To: Libre-RISCV General Development + +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: base64 +Errors-To: libre-riscv-dev-bounces@lists.libre-riscv.org +Sender: "libre-riscv-dev" + +aHR0cHM6Ly9idWdzLmxpYnJlLXNvYy5vcmcvc2hvd19idWcuY2dpP2lkPTIwOAoKLS0tIENvbW1l +bnQgIzUzIGZyb20gTHVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbiA8bGtjbEBsa2NsLm5ldD4g +LS0tCihJbiByZXBseSB0byBNaWNoYWVsIE5vbGFuIGZyb20gY29tbWVudCAjNTIpCj4gKEluIHJl +cGx5IHRvIEx1a2UgS2VubmV0aCBDYXNzb24gTGVpZ2h0b24gZnJvbSBjb21tZW50ICM1MCkKPiA+ +IGJ0dyAxMiBzdGFnZXMgaXMgdG9vIG1hbnksIGJlY2F1c2Ugd2UgbmVlZCBhIG1pbmltdW0gb2Yg +b25lIEZ1bmN0aW9uVW5pdAo+ID4gIm1hbmFnaW5nIiAobWF0Y2hpbmcgdXApIHNvdXJjZSBvcGVy +YW5kcyBhbmQgcmVzdWx0cy4KPiA+IAo+ID4gZWFjaCBleHRyYSBGdW5jdGlvbiBVbml0IGFkZGVk +IGNyZWF0ZXMgYW4gT3JkZXIgTl4yIGluY3JlYXNlIGluIHRoZSBvdmVyYWxsCj4gPiBzaXplIG9m +IHRoZSBEZXBlbmRlbmN5IE1hdHJpY2VzLgo+ID4gCj4gPiBzbyAtIGFuZCBpIGRvbid0IG1lYW4g +cmlnaHQgbm93IC0gaWYgdGhpcyBjYW4gYmUgZWl0aGVyOgo+ID4gCj4gPiAqIGN1dCBpbnRvIHR3 +byBzZXBhcmF0ZSBwaXBlbGluZXMgKHBhcnRpYWwgZGF0YSBmZWQgYmFjayBhcyBhIG1pY3JvLW9w +KQo+ID4gKiBudW1iZXIgb2YgY29tYmluYXRvcmlhbCBibG9ja3MgaW5jcmVhc2VkIHRvIDUgb3Ig +Ngo+ID4gCj4gPiB3ZSBzdGFuZCBhIGNoYW5jZSBvZiBrZWVwaW5nIHRoZSBGVSBjb3VudCBkb3du +ICg4IGlzIG9rKS4KPiA+IAo+ID4gaGF2ZSB0byB0aGluayB0aGF0IHRocm91Z2ggY2FyZWZ1bGx5 +LCBob3cgdG8gZG8gbWljcm8tb3BzLgo+IAo+IFN1cmUuIEkgZG9uJ3Qga25vdyBhYm91dCBzcGxp +dHRpbmcgaXQgdXAgaW50byBtdWx0aXBsZSB1b3BzLAoKbmVpdGhlciBkbyBpIGF0IHRoZSBtb21l +bnQhICBpIHRoaW5rIGkgbWlnaHQgaGF2ZSBnb3QgY29uZnVzZWQgYWJvdXQKc2hhcmluZyB0aGUg +TVVMIHVuaXQgd2l0aCBGUE1VTC4KCj4gIGJ1dCByZWR1Y2luZwo+IHRoZSBudW1iZXIgb2Ygc3Rh +Z2VzIGlzIHByZXR0eSBlYXN5LiBJIGFkZGVkIGEgcGFyYW1ldGVyIHRvIHRoZSBtb2R1bGUKPiBj +YWxsZWQgcm91bmRzX3Blcl9zdGFnZSB3aGljaCBnb3Zlcm5zIGhvdyBtYW55IGNvcmRpYyByb3Vu +ZHMgZ28gaW4gZWFjaAo+IHBpcGVsaW5lIHN0YWdlLiBJbmNyZWFzaW5nIHRoYXQgbnVtYmVyIHdp +bGwgZGVjcmVhc2UgdGhlIG51bWJlciBvZiBwaXBlbGluZQo+IHN0YWdlcy4KCmZhbnRhc3RpYywg +dGhhdCdzIGV4YWN0bHkgdGhlIGtpbmQgb2YgcGFyYW1ldGVyaXNhdGlvbiBfd2VfIG5lZWQsCmhv +d2V2ZXIgYXMgYSBnZW5lcmFsLXB1cnBvc2UgSUVFRTc1NCBGUCBsaWJyYXJ5LCBpdCdzIGV4YWN0 +bHkKdGhlIGtpbmQgb2YgcGFyYW1ldGVyaXNhdGlvbiB0aGF0IG90aGVyIF91c2Vyc18gbmVlZCA6 +KQoKPiAKPiAoSW4gcmVwbHkgdG8gTHVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbiBmcm9tIGNv +bW1lbnQgIzUxKQo+ID4gdGhlIG90aGVyIG9wdGlvbjoKPiA+IAo+ID4ga2VlcCB0aGUgbG9uZyBw +aXBlbGluZSBsZW5ndGhzOiB3ZSAqa25vdyogdGhhdCB0aGVyZSdzIG1vcmUgc3RhZ2VzIHRoYW4K +PiA+IHRoZXJlIGFyZSBGVXMsIGFuZCB0aGF0J3MganVzdCAidG91Z2ggbHVjayIuICB3ZSBrbm93 +IHRoYXQgd2l0aCBvbmx5Cj4gPiA4IEZVcyBhbmQgMTIgcGlwZWxpbmUgc3RhZ2VzLCA0IG9mIHRo +b3NlIGF0IGFueSBvbmUgdGltZSB3aWxsIHJ1bgo+ID4gZW1wdHksIGFuZCB3ZSBqdXN0Li4uIGxp +dmUgd2l0aCB0aGF0Lgo+IAo+IEkgd2FzIGdvaW5nIHRvIGFzayBpZiB3ZSBjb3VsZCBkbyBzb21l +dGhpbmcgbGlrZSB0aGlzLiBTaW5jZSBJIGRvbid0IHRoaW5rCj4gdGhlIGNvcmRpYyB3aWxsIGJl +IHVzZWQgKnRoYXQqIG9mdGVuLCB0aGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHRoaW5nIHRv +Cj4gZG8uCgp5ZWh5ZWguCgpvayB3aGF0IGVsc2UgY2FuIHdlIHRocm93IGluIGhlcmU/ICBMT0cx +UCBpcyBwcm9iYWJseSBhIGdvb2QgdGhpbmcgdG8gdHJ5Cgp0aGlzIGlzIGEgZ3JlYXQgZXhwbGFu +YXRpb246Cmh0dHA6Ly93d3cubWNsZW5lZ2FuLmNvbS9wdWJsaWMvdGhlc2lzLnBkZgoKc2VjdGlv +biA0LjQuMSBleHBsYWlucyAicm90YXRpb24gbW9kZSIKCmhvd2V2ZXIgd2UgYWxzbyBuZWVkICp2 +ZWN0b3IqIG1vZGUgKDQuNC4yKQoKaSBrbm93IC0gc29tZXdoZXJlIC0gaSd2ZSBzZWVuIGEgcHl0 +aG9uIGltcGxlbWVudGF0aW9uIG9mIHZlY3RvciBtb2RlLgppdCBhbHNvIHNwZWNpZmllZCwgYXMg +eW91IGNhbiBzZWUsIHRoZSB0aHJlZSBvdGhlciBtb2RlczogY2lyY3VsYXIsCmxpbmVhciwgaHlw +ZXJib2xpYy4KCmFoISAgaSBrbm93IHdoeSB3ZSB3YW50IHRvIGtlZXAgdGhlIHR3byBhbnN3ZXJz +OiBzZWUgcDM5IG9mIHRoYXQKdGhlc2lzOiB5b3UgY2FuIHVzZSB0aGVtICh3aXRoIHNvbWUgcG9z +dC1wcm9jZXNzaW5nKSB0byBkbwp0YW4uCgphbHNvLCBzZWUgY2lyY3VsYXItdmVjdG9yaW5nIG1v +ZGUsIGl0IGVuZHMgdXAgY29tcHV0aW5nIHRoZQpub3JtYWwgZGlzdGFuY2UgYW5kLi4uIGFuZCB0 +aGUgYW5nbGU/ICBvaGgsIHRoYXQncyBmb3IuLi4gZGFybgp3aGF0IHdhcyBpdC4uLiBpdCdzIGZv +ciBhcmNzLiAgdGhlcmUncyBhIG5hbWUgZm9yIHRoaXMuLi4gc29ycnkKaSBmb3JnZXQgd2hhdCBp +dCdzIGNhbGxlZCByaWdodCBub3cuCgpodHRwczovL3d3dy5pamVydC5vcmcvdmhkbC1pbXBsZW1l +bnRhdGlvbi1vZi1jb3JkaWMtYWxnb3JpdGhtLWZvci13aXJlbGVzcy1sYW4KCnRoaXMgdmVyc2lv +biwgcDE0LCBleHBsYWlucyBtdWNoIGNsZWFyZXIgdGhhdCAicm90YXRlIiBtb2RlIGdvZXMKYnkg +YW5nbGUgYW5kIGNvbXB1dGVzIHgseQoKInZlY3RvciIgbW9kZSB0aGUgdmVjdG9yIGlzIHJvdGF0 +ZWQgdG8gYmUgZmxhdCBhZ2FpbnN0IHRoZSB4LWF4aXMsCnJlY29yZGluZyB0aGUgYW5nbGUgKFop +IG5lZWRlZCB0byBkbyBzby4KCnRoaXMgb25lIGlzIGEgc3VydmV5IG9mIENPUkRJQyBhbGdvcml0 +aG1zOgpodHRwOi8vd3d3LmVlLmljLmFjLnVrL3BjaGV1bmcvdGVhY2hpbmcvZWUzX0RTRC9jcmRj +c3J2eS5wZGYKCml0IHNob3dzIC0gKmJyaWVmbHkqIC0gaG93IHRvIHVzZSB0aGVtIHRvIGRvIGRp +ZmZlcmVudCB0aGluZ3MsIGJ1dAppdCBhbHNvLCBieSBiZWluZyBhIHN1cnZleSwgaGFzIHNvbWUg +cmVhbGx5IHVzZWZ1bCBpbnNpZ2h0cyBpbnRvCnZhcmlvdXMgb3B0aW1pc2F0aW9ucy4KCnNvIGNh +biBpIHN1Z2dlc3QsIGZpcnN0IGFkZGluZyB0aGUgaW5mcmFzdHJ1Y3R1cmUgYmFjayBpbiB0byBh +bGxvdwpjYW5jZWxsYXRpb24gYW5kIG9wZXJhdGlvbnMgKGN0eCksIHRoZW4gc2VlIGlmIHlvdSBj +YW4gYWRkIG9uZSBleHRyYQoibW9kZSIgKHRoZSBtPS0xLCBtPTAsIG09MSB0aGluZyBzZWVtcyB0 +cml2aWFsIHdoaWNoIHdpbGwgZ2l2ZSB0aGUKY2lyY3VsYXIsIGxpbmVhciBhbmQgaHlwZXJib2xp +YyBtb2RlcywgcmVzcGVjdGl2ZWx5KS4KCiJjaXJjdWxhciIgbW9kZSBpcyBjb3ZlcmVkIHdpdGgg +dGhlIG91dHB1dCBiZWluZyBTSU4vQ09TLgoKYWggaGEhICBoZXJlJ3MgYSB1c2VmdWwgc3VpdGUg +b2YgaW1wbGVtZW50YXRpb25zIChhbm5veWluZ2x5IGJlaW5nCmluIGp1cGl0ZXIpCmh0dHBzOi8v +Z2l0aHViLmNvbS9zdXlhc2htYWhhci9jb3JkaWMtYWxnb3JpdGhtLXB5dGhvbi9ibG9iL21hc3Rl +ci9jb3JkaWNfaW1wbGVtZW50YXRpb24uaXB5bmIKCmV4dHJhY3RpZ24gdGhlIHR3byBtb2RlczoK +CgpjaXJjdWxhciA9IDEKbGluZWFyID0gMApoeXBlcmJvbGljID0gLTEKCgoKZGVmIFJPTV9sb29r +dXAoaXRlcmF0aW9uLCBjb29yZGluYXRlKToKICAgIGlmIChjb29yZGluYXRlID09IGNpcmN1bGFy +KToKICAgICAgICByZXR1cm4gbWF0aC5kZWdyZWVzKG1hdGguYXRhbigyKiooLTEqaXRlcmF0aW9u +KSkpCiAgICBlbGlmIChjb29yZGluYXRlID09IGxpbmVhcik6CiAgICAgICAgcmV0dXJuIDIqKigt +MSppdGVyYXRpb24pCiAgICBlbGlmIChjb29yZGluYXRlID09IGh5cGVyYm9saWMpOgogICAgICAg +IHJldHVybiAobWF0aC5hdGFuaCgyKiooLTEqaXRlcmF0aW9uKSkpCgpkZWYgcm90YXRpb25fbW9k +ZSh4LCB5LCB6LCBjb29yZGluYXRlLCBpdGVyYXRpb25zKToKICAgIGEgPSAwLjYwNzI1MjkzNTsg +ICAjID0gMS9LCgogICAgeF92YWxfbGlzdCA9IFtdCiAgICB5X3ZhbF9saXN0ID0gW10KICAgIHpf +dmFsX2xpc3QgPSBbXQogICAgaXRlcmF0aW9uc19saXN0ID0gW10KCiAgICBpID0gMDsgICAgICAg +ICAgICAgICAgICAjIEtlZXBzIGNvdW50IG9uIG51bWJlciBvZiBpdGVyYXRpb25zCgogICAgY3Vy +cmVudF94ID0geCAgICAgICAgICMgVmFsdWUgb2YgWCBvbiBpdGggaXRlcmF0aW9uIAogICAgY3Vy +cmVudF95ID0geSAgICAgICAgICMgVmFsdWUgb2YgWSBvbiBpdGggaXRlcmF0aW9uCiAgICBjdXJy +ZW50X3ogPSB6ICAgICAgICAgIyBWYWx1ZSBvZiBaIG9uIGl0aCBpdGVyYXRpb24KCiAgICBkaSA9 +IDAKCiAgICBpZiAoY29vcmRpbmF0ZSA9PSBoeXBlcmJvbGljKToKICAgICAgICBpID0gMQogICAg +ZWxzZToKICAgICAgICBpID0gMAoKICAgIGZsYWcgPSAwCgogICAgaWYgKGl0ZXJhdGlvbnMgPiAw +KToKICAgICAgICB3aGlsZSAoaSA8IGl0ZXJhdGlvbnMpOgogICAgICAgICAgICBpZiAoY3VycmVu +dF96IDwgMCk6CiAgICAgICAgICAgICAgICBkaSA9IC0xCiAgICAgICAgICAgIGVsc2U6CiAgICAg +ICAgICAgICAgICBkaSA9ICsxCiAgICAgICAgICAgIG5leHRfeiA9IGN1cnJlbnRfeiAtIGRpICog +Uk9NX2xvb2t1cChpLCBjb29yZGluYXRlKQogICAgICAgICAgICBuZXh0X3ggPSBjdXJyZW50X3gg +LSBjb29yZGluYXRlICogZGkgKiBjdXJyZW50X3kgKiAoMioqKC0xKmkpKQogICAgICAgICAgICBu +ZXh0X3kgPSBjdXJyZW50X3kgKyBkaSAqIGN1cnJlbnRfeCAqIDIqKigtMSppKQoKICAgICAgICAg +ICAgY3VycmVudF94ID0gbmV4dF94CiAgICAgICAgICAgIGN1cnJlbnRfeSA9IG5leHRfeQogICAg +ICAgICAgICBjdXJyZW50X3ogPSBuZXh0X3oKCiAgICAgICAgICAgIHhfdmFsX2xpc3QuYXBwZW5k +KGN1cnJlbnRfeCkKICAgICAgICAgICAgeV92YWxfbGlzdC5hcHBlbmQoY3VycmVudF95KQogICAg +ICAgICAgICB6X3ZhbF9saXN0LmFwcGVuZChjdXJyZW50X3opCgogICAgICAgICAgICBpdGVyYXRp +b25zX2xpc3QuYXBwZW5kKGkpCgogICAgICAgICAgICBpZiAoY29vcmRpbmF0ZSA9PSBoeXBlcmJv +bGljKToKICAgICAgICAgICAgICAgIGlmICgoaSAhPSA0KSAmIChpICE9IDEzKSAmIChpIT00MCkp +OgogICAgICAgICAgICAgICAgICAgIGkgPSBpKzEKICAgICAgICAgICAgICAgIGVsaWYgKGZsYWcg +PT0gMCk6CiAgICAgICAgICAgICAgICAgICAgZmxhZyA9IDEKICAgICAgICAgICAgICAgIGVsaWYg +KGZsYWcgPT0gMSk6CiAgICAgICAgICAgICAgICAgICAgZmxhZyA9IDAKICAgICAgICAgICAgICAg +ICAgICBpID0gaSsxCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBpID0gaSsxCiAg +ICByZXR1cm4geyAneCc6eF92YWxfbGlzdCwgJ3knOnlfdmFsX2xpc3QsICd6Jzp6X3ZhbF9saXN0 +LAonaXRlcmF0aW9uJzppdGVyYXRpb25zX2xpc3QsIH0KCgphaGhoLCBpIHJlY29nbmlzZSB0aGlz +IGNvZGUgOikgIGkndmUgc2VlbiBpdCBiZWZvcmUuICAKZGVmIHZlY3Rvcl9tb2RlKHgsIHksIHos +IGNvb3JkaW5hdGUsIGl0ZXJhdGlvbnMpOgogICAgYSA9IDEuMjA3NTsgICAjID0gMS9LCgogICAg +eF92YWxfbGlzdCA9IFtdCiAgICB5X3ZhbF9saXN0ID0gW10KICAgIHpfdmFsX2xpc3QgPSBbXQog +ICAgaXRlcmF0aW9uc19saXN0ID0gW10KCiAgICBpID0gMDsgICAgICAgICAgICAgICAgICAjIEtl +ZXBzIGNvdW50IG9uIG51bWJlciBvZiBpdGVyYXRpb25zCgogICAgY3VycmVudF94ID0geCAgICAg +ICAgICMgVmFsdWUgb2YgWCBvbiBpdGggaXRlcmF0aW9uIAogICAgY3VycmVudF95ID0geSAgICAg +ICAgICMgVmFsdWUgb2YgWSBvbiBpdGggaXRlcmF0aW9uCiAgICBjdXJyZW50X3ogPSB6ICAgICAg +ICAgIyBWYWx1ZSBvZiBaIG9uIGl0aCBpdGVyYXRpb24KCiAgICBkaSA9IDAKCiAgICAjIFRoaXMg +aXMgbmVjY2VzYXJ5IHNpbmNlIHJlc3VsdCBmb3IgaT0wIGRvZXNuJ3QgZXhpc3RzIGZvciBoeXBl +cmJvbGljIAogICAgIyBjby1vcmRpbmF0ZSBzeXN0ZW0uCiAgICBpZiAoY29vcmRpbmF0ZSA9PSBo +eXBlcmJvbGljKToKICAgICAgICBpID0gMQogICAgZWxzZToKICAgICAgICBpID0gMAoKICAgIGZs +YWcgPSAwCgogICAgaWYgKGl0ZXJhdGlvbnMgPiAwKToKICAgICAgICB3aGlsZSAoaSA8IGl0ZXJh +dGlvbnMpOgogICAgICAgICAgICBkaSA9IC0xKm1hdGguY29weXNpZ24oMSwgY3VycmVudF95KTsj +KmN1cnJlbnRfeCk7CiAgICAgICAgICAgIG5leHRfeCA9IGN1cnJlbnRfeCAtIGNvb3JkaW5hdGUg +KiBkaSAqIGN1cnJlbnRfeSAqICgyKiooLTEqaSkpCiAgICAgICAgICAgIG5leHRfeSA9IGN1cnJl +bnRfeSArIGRpICogY3VycmVudF94ICogMioqKC0xKmkpCiAgICAgICAgICAgIG5leHRfeiA9IGN1 +cnJlbnRfeiAtIGRpICogUk9NX2xvb2t1cChpLCBjb29yZGluYXRlKQoKICAgICAgICAgICAgY3Vy +cmVudF94ID0gbmV4dF94CiAgICAgICAgICAgIGN1cnJlbnRfeSA9IG5leHRfeQogICAgICAgICAg +ICBjdXJyZW50X3ogPSBuZXh0X3oKCiAgICAgICAgICAgIHhfdmFsX2xpc3QuYXBwZW5kKGN1cnJl +bnRfeCkKICAgICAgICAgICAgeV92YWxfbGlzdC5hcHBlbmQoY3VycmVudF95KQogICAgICAgICAg +ICB6X3ZhbF9saXN0LmFwcGVuZChjdXJyZW50X3opCgogICAgICAgICAgICBpdGVyYXRpb25zX2xp +c3QuYXBwZW5kKGkpCgogICAgICAgICAgICBpZiAoY29vcmRpbmF0ZSA9PSBoeXBlcmJvbGljKToK +ICAgICAgICAgICAgICAgIGlmICgoaSAhPSA0KSAmIChpICE9IDEzKSAmIChpIT00MCkpOgogICAg +ICAgICAgICAgICAgICAgIGkgPSBpKzEKICAgICAgICAgICAgICAgIGVsaWYgKGZsYWcgPT0gMCk6 +CiAgICAgICAgICAgICAgICAgICAgZmxhZyA9IDEKICAgICAgICAgICAgICAgIGVsaWYgKGZsYWcg +PT0gMSk6CiAgICAgICAgICAgICAgICAgICAgZmxhZyA9IDAKICAgICAgICAgICAgICAgICAgICBp +ID0gaSsxCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBpID0gaSsxCiAgICByZXR1 +cm4geyAneCc6eF92YWxfbGlzdCwgJ3knOnlfdmFsX2xpc3QsICd6Jzp6X3ZhbF9saXN0LAonaXRl +cmF0aW9uJzppdGVyYXRpb25zX2xpc3QgfQoKaWYgeW91IGNhbiBkcm9wIHRoYXQgaW50byBhIHJl +cG9zaXRvcnksIGdldCBpdCB3b3JraW5nLCB3cml0ZSBhCmZldyBzaW1wbGUgZXhwZXJpbWVudHMg +YW5kIHNlZSBob3cgaXQgb3BlcmF0ZXMgaW4gZWFjaCBvZiB0aGUgNgptb2Rlcywgd2UncmUgb24g +YSByb2xsIDopCgotLSAKWW91IGFyZSByZWNlaXZpbmcgdGhpcyBtYWlsIGJlY2F1c2U6CllvdSBh +cmUgb24gdGhlIENDIGxpc3QgZm9yIHRoZSBidWcuCl9fX19fX19fX19fX19fX19fX19fX19fX19f +X19fX19fX19fX19fX19fX19fX19fCmxpYnJlLXJpc2N2LWRldiBtYWlsaW5nIGxpc3QKbGlicmUt +cmlzY3YtZGV2QGxpc3RzLmxpYnJlLXJpc2N2Lm9yZwpodHRwOi8vbGlzdHMubGlicmUtcmlzY3Yu +b3JnL21haWxtYW4vbGlzdGluZm8vbGlicmUtcmlzY3YtZGV2Cg== + -- 2.30.2