Re: chipsec-1.5.0 in EFI Shell

Vorname Nachname <[email protected]> Fri, 29 May 2020 17:16:23 +0200
Newsgroups dev.linux.lists.oe-chipsec
Message-ID <CAPwg83jtW4huXZ3Cf12xh7Q-8zS5rjV-VOMpNF3-3kjZ_aG1DA@mail.gmail.com>
--===============4646498992241321772==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable

Hello,

Many thanks for the quick answers. I followed the instructions from the
chipsec-manual.pdf of chipsec-1.5.0. In my first test I used python version
from chipsec-1.5.0 (chipsec_uefi_x64.zip) and UEFI-Shell from edk2 release
2019-03-08 (
https://github.com/tianocore/edk2/archive/edk2-stable201903.tar.gz). This
includes a precompiled UEFI-Shell binary which I used
(edk2-edk2-stable201903/ShellBinPkg/UefiShell/X64). With this setup I got
this error:

OSError: [Errno 22] Invalid argument: 'FS0:FS0:chipsec'

Can you tell me your working setup (UEFI-Binary and pyhton version)?

Best regards
Philipp

Am Fr., 29. Mai 2020 um 17:13 Uhr schrieb Vorname Nachname <
[email protected]>:

> Hello,
>
> Many thanks for the quick answers. I followed the instructions from the
> chipsec-manual.pdf of chipsec-1.5.0. In my first test I used python versi=
on
> from chipsec-1.5.0 (chipsec_uefi_x64.zip) and UEFI-Shell from edk2 release
> 2019-03-08 (
> https://github.com/tianocore/edk2/archive/edk2-stable201903.tar.gz). This
> includes a precompiled UEFI-Shell binary which I used
> (edk2-edk2-stable201903/ShellBinPkg/UefiShell/X64). With this setup I got
> this error:
>
> OSError: [Errno 22] Invalid argument: 'FS0:FS0:chipsec'
>
> Can you tell me your working setup (UEFI-Binary and pyhton version)?
>
> Best regards
> Philipp
>
> Am Fr., 29. Mai 2020 um 00:24 Uhr schrieb Holtsclaw, Brent <
> brent.holtsclaw(a)intel.com>:
>
>> Did you follow the instructions from
>> https://github.com/chipsec/chipsec/wiki/Creating-a-Bootable-USB-drive-wi=
th-UEFI-Shell?
>> They should have enough information to help out.  It sounds like UEFI SH=
ELL
>> is not the problem in this case.  Can you elaborate on the python that y=
ou
>> are using.  There is a python.efi module within the chipsec_uefi zipfile.
>> Python has been modified to include some chipsec specific commands with
>> chipsec.  There are steps to reproduce the build, however I'm not sure t=
hat
>> they work with the latest EDK and you may need to build from an older
>> version.  To my knowledge the code within chipsec is still compatible wi=
th
>> python2 at this point and you should be able to use 1.5.0.  If you can r=
un
>> chipsec with the debug flag and let us know where it is failing that wou=
ld
>> help.
>>
>> Thanks,
>> Brent
>>
>> -----Original Message-----
>> From: Blibbet <[email protected]>
>> Sent: Thursday, May 28, 2020 2:55 PM
>> To: Vorname Nachname <[email protected]>
>> Cc: chipsec(a)lists.01.org
>> Subject: [chipsec] Re: chipsec-1.5.0 in EFI Shell
>>
>> What UEFI Shell are you using? "EFI Shell" may mean an ancient one. I
>> think I recall some thread where someone was trying to get CHIPSEC runni=
ng
>> using an old (1.x?) OEM's shell (Apple?), and they had to provide their =
own
>> instead. There is an older and a newer UEFI Shell.
>>
>> You should also include info about other Python code you were able to
>> successfully run in this EFI Shell. Maybe CHIPSEC is not the issue, the
>> issue is your EFI Shell and Python.
>>
>> Instead of building your own UEFI Python, what happens when you use the
>> CHIPSEC instructions and use their supplied python.efi? Wasn't there some
>> special CHIPSEC-centric options needed to build Python with? If so, that
>> should be clarified better in build docs.
>>
>> (Granted, it sucks having a security tool ship a pre-compiled Python
>> binary in their source tree, built in an unknown manner, with no checksu=
ms,
>> and no reproducable builds, and have the tool rely on this for determini=
ng
>> platform security. But that's another issue...)
>>
>> Intel has abandoned CPython V2 for UEFI patch, and is instead is working
>> on MicroPython for UEFI (which has some Python V3 support). Though Python
>> V2 is deprecated and most of world has moved to Python V3, CHIPSEC team =
is
>> still using/bundling CPython V2, and hasn't switched over to
>> using/relying-on/bundling MicroPython for UEFI.
>>
>> FWIW, I rarely see replies from the team for support questions on this
>> mailing list nor the Google Groups lists. It I was looking for a reply, =
I'd
>> file a Github issue (and include more info), or use Twitter.
>>
>> You might want to clarify that you're trying to run this on an Intel
>> system, not another ISA (like AMD or ARM or RISC-V), as that'd also not
>> work.
>>
>> HTH,
>> Lee
>>
>> On 5/28/20 7:36 AM, Vorname Nachname wrote:
>> > Hello,
>> >
>> > I tried to run chipsec-1.5.0 in EFI Shell without operating system but
>> > unfortunately it doesn't run in the EFI Shell. I ran these commands:
>> >
>> > Shell> fs0:
>> > FS0:\> python -^# chipsec_main.py -m debugenabled
>> >
>> > This results in a traceback with the last file chipsec/defines.py
>> > called function get_version().
>> >
>> > OSError: [Errno 22] Invalud argument: 'FS0:FS0:chipsec'
>> >
>> > After that I compiled python 2.7.2 and python 2.7.10 from edk2 package
>> > version edk2-stable201903. This is the last package version with
>> > pyhton inside. With this version of pyhton I received another error
>> > message with the last line:
>> >
>> > ImportError: No module named expat; use SimpleXMLTreeBuilder instead.
>> >
>> > What is the best way to start the latest version of chipsec in the EFI
>> > Shell? What version of EFI Shell and pyhton is required?
>> >
>> > best wishes
>> > Philipp
>> >
>> >
>> > _______________________________________________
>> > chipsec mailing list -- chipsec(a)lists.01.org To unsubscribe send an
>> > email to chipsec-leave(a)lists.01.org
>> _______________________________________________
>> chipsec mailing list -- chipsec(a)lists.01.org To unsubscribe send an
>> email to chipsec-leave(a)lists.01.org
>> _______________________________________________
>> chipsec mailing list -- chipsec(a)lists.01.org
>> To unsubscribe send an email to chipsec-leave(a)lists.01.org
>>
>

--===============4646498992241321772==
Content-Type: text/html
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="attachment.htm"

PGRpdiBkaXI9Imx0ciI+SGVsbG8sPGJyPjxicj5NYW55IHRoYW5rcyBmb3IgdGhlIHF1aWNrIGFu
c3dlcnMuIEkgZm9sbG93ZWQgdGhlIGluc3RydWN0aW9ucyBmcm9tIHRoZSBjaGlwc2VjLW1hbnVh
bC5wZGYgb2YgY2hpcHNlYy0xLjUuMC4gSW4gbXkgZmlyc3QgdGVzdCBJIHVzZWQgcHl0aG9uIHZl
cnNpb24gZnJvbSBjaGlwc2VjLTEuNS4wIChjaGlwc2VjX3VlZmlfeDY0LnppcCkgYW5kIFVFRkkt
U2hlbGwgZnJvbSBlZGsyIHJlbGVhc2UgMjAxOS0wMy0wOCAoPGEgaHJlZj0iaHR0cHM6Ly9naXRo
dWIuY29tL3RpYW5vY29yZS9lZGsyL2FyY2hpdmUvZWRrMi1zdGFibGUyMDE5MDMudGFyLmd6Ij5o
dHRwczovL2dpdGh1Yi5jb20vdGlhbm9jb3JlL2VkazIvYXJjaGl2ZS9lZGsyLXN0YWJsZTIwMTkw
My50YXIuZ3o8L2E+KS4gVGhpcyBpbmNsdWRlcyBhIHByZWNvbXBpbGVkIFVFRkktU2hlbGwgYmlu
YXJ5IHdoaWNoIEkgdXNlZCAoZWRrMi1lZGsyLXN0YWJsZTIwMTkwMy9TaGVsbEJpblBrZy9VZWZp
U2hlbGwvWDY0KS4gV2l0aCB0aGlzIHNldHVwIEkgZ290IHRoaXMgZXJyb3I6PGJyPjxicj5PU0Vy
cm9yOiBbRXJybm8gMjJdIEludmFsaWQgYXJndW1lbnQ6ICYjMzk7RlMwOkZTMDpjaGlwc2VjJiMz
OTs8YnI+PGJyPkNhbiB5b3UgdGVsbCBtZSB5b3VyIHdvcmtpbmcgc2V0dXAgKFVFRkktQmluYXJ5
IGFuZCBweWh0b24gdmVyc2lvbik/PGJyPjxicj5CZXN0IHJlZ2FyZHM8YnI+UGhpbGlwcDxicj48
L2Rpdj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxkaXYgZGlyPSJsdHIiIGNsYXNzPSJn
bWFpbF9hdHRyIj5BbSBGci4sIDI5LiBNYWkgMjAyMCB1bSAxNzoxM8KgVWhyIHNjaHJpZWIgVm9y
bmFtZSBOYWNobmFtZSAmbHQ7PGEgaHJlZj0ibWFpbHRvOmxkZXZsemVyb0BnbWFpbC5jb20iPmxk
ZXZsemVyb0BnbWFpbC5jb208L2E+Jmd0Ozo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9Imdt
YWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjBweCAwcHggMHB4IDAuOGV4O2JvcmRlci1sZWZ0OjFw
eCBzb2xpZCByZ2IoMjA0LDIwNCwyMDQpO3BhZGRpbmctbGVmdDoxZXgiPjxkaXYgZGlyPSJsdHIi
PkhlbGxvLDxicj48YnI+TWFueSB0aGFua3MgZm9yIHRoZSBxdWljayBhbnN3ZXJzLiBJIGZvbGxv
d2VkIHRoZSBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgY2hpcHNlYy1tYW51YWwucGRmIG9mIGNoaXBz
ZWMtMS41LjAuIEluIG15IGZpcnN0IHRlc3QgSSB1c2VkIHB5dGhvbiB2ZXJzaW9uIGZyb20gY2hp
cHNlYy0xLjUuMCAoY2hpcHNlY191ZWZpX3g2NC56aXApIGFuZCBVRUZJLVNoZWxsIGZyb20gZWRr
MiByZWxlYXNlIDIwMTktMDMtMDggKDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90aWFub2Nv
cmUvZWRrMi9hcmNoaXZlL2VkazItc3RhYmxlMjAxOTAzLnRhci5neiIgdGFyZ2V0PSJfYmxhbmsi
Pmh0dHBzOi8vZ2l0aHViLmNvbS90aWFub2NvcmUvZWRrMi9hcmNoaXZlL2VkazItc3RhYmxlMjAx
OTAzLnRhci5nejwvYT4pLiBUaGlzIGluY2x1ZGVzIGEgcHJlY29tcGlsZWQgVUVGSS1TaGVsbCBi
aW5hcnkgd2hpY2ggSSB1c2VkIChlZGsyLWVkazItc3RhYmxlMjAxOTAzL1NoZWxsQmluUGtnL1Vl
ZmlTaGVsbC9YNjQpLiBXaXRoIHRoaXMgc2V0dXAgSSBnb3QgdGhpcyBlcnJvcjo8YnI+PGJyPk9T
RXJyb3I6IFtFcnJubyAyMl0gSW52YWxpZCBhcmd1bWVudDogJiMzOTtGUzA6RlMwOmNoaXBzZWMm
IzM5Ozxicj48YnI+Q2FuIHlvdSB0ZWxsIG1lIHlvdXIgd29ya2luZyBzZXR1cCAoVUVGSS1CaW5h
cnkgYW5kIHB5aHRvbiB2ZXJzaW9uKT88YnI+PGJyPkJlc3QgcmVnYXJkczxicj5QaGlsaXBwPC9k
aXY+PGJyPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj48ZGl2IGRpcj0ibHRyIiBjbGFzcz0iZ21h
aWxfYXR0ciI+QW0gRnIuLCAyOS4gTWFpIDIwMjAgdW0gMDA6MjTCoFVociBzY2hyaWViIEhvbHRz
Y2xhdywgQnJlbnQgJmx0OzxhIGhyZWY9Im1haWx0bzpicmVudC5ob2x0c2NsYXdAaW50ZWwuY29t
IiB0YXJnZXQ9Il9ibGFuayI+YnJlbnQuaG9sdHNjbGF3QGludGVsLmNvbTwvYT4mZ3Q7Ojxicj48
L2Rpdj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MHB4IDBw
eCAwcHggMC44ZXg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIHJnYigyMDQsMjA0LDIwNCk7cGFkZGlu
Zy1sZWZ0OjFleCI+RGlkIHlvdSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBmcm9tIDxhIGhyZWY9
Imh0dHBzOi8vZ2l0aHViLmNvbS9jaGlwc2VjL2NoaXBzZWMvd2lraS9DcmVhdGluZy1hLUJvb3Rh
YmxlLVVTQi1kcml2ZS13aXRoLVVFRkktU2hlbGwiIHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJf
YmxhbmsiPmh0dHBzOi8vZ2l0aHViLmNvbS9jaGlwc2VjL2NoaXBzZWMvd2lraS9DcmVhdGluZy1h
LUJvb3RhYmxlLVVTQi1kcml2ZS13aXRoLVVFRkktU2hlbGw8L2E+P8KgIFRoZXkgc2hvdWxkIGhh
dmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGhlbHAgb3V0LsKgIEl0IHNvdW5kcyBsaWtlIFVFRkkg
U0hFTEwgaXMgbm90IHRoZSBwcm9ibGVtIGluIHRoaXMgY2FzZS7CoCBDYW4geW91IGVsYWJvcmF0
ZSBvbiB0aGUgcHl0aG9uIHRoYXQgeW91IGFyZSB1c2luZy7CoCBUaGVyZSBpcyBhIHB5dGhvbi5l
ZmkgbW9kdWxlIHdpdGhpbiB0aGUgY2hpcHNlY191ZWZpIHppcGZpbGUuwqAgUHl0aG9uIGhhcyBi
ZWVuIG1vZGlmaWVkIHRvIGluY2x1ZGUgc29tZSBjaGlwc2VjIHNwZWNpZmljIGNvbW1hbmRzIHdp
dGggY2hpcHNlYy7CoCBUaGVyZSBhcmUgc3RlcHMgdG8gcmVwcm9kdWNlIHRoZSBidWlsZCwgaG93
ZXZlciBJJiMzOTttIG5vdCBzdXJlIHRoYXQgdGhleSB3b3JrIHdpdGggdGhlIGxhdGVzdCBFREsg
YW5kIHlvdSBtYXkgbmVlZCB0byBidWlsZCBmcm9tIGFuIG9sZGVyIHZlcnNpb24uwqAgVG8gbXkg
a25vd2xlZGdlIHRoZSBjb2RlIHdpdGhpbiBjaGlwc2VjIGlzIHN0aWxsIGNvbXBhdGlibGUgd2l0
aCBweXRob24yIGF0IHRoaXMgcG9pbnQgYW5kIHlvdSBzaG91bGQgYmUgYWJsZSB0byB1c2UgMS41
LjAuwqAgSWYgeW91IGNhbiBydW4gY2hpcHNlYyB3aXRoIHRoZSBkZWJ1ZyBmbGFnIGFuZCBsZXQg
dXMga25vdyB3aGVyZSBpdCBpcyBmYWlsaW5nIHRoYXQgd291bGQgaGVscC48YnI+Cjxicj4KVGhh
bmtzLDxicj4KQnJlbnQ8YnI+Cjxicj4KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS08YnI+CkZy
b206IEJsaWJiZXQgJmx0OzxhIGhyZWY9Im1haWx0bzpibGliYmV0QGdtYWlsLmNvbSIgdGFyZ2V0
PSJfYmxhbmsiPmJsaWJiZXRAZ21haWwuY29tPC9hPiZndDsgPGJyPgpTZW50OiBUaHVyc2RheSwg
TWF5IDI4LCAyMDIwIDI6NTUgUE08YnI+ClRvOiBWb3JuYW1lIE5hY2huYW1lICZsdDs8YSBocmVm
PSJtYWlsdG86bGRldmx6ZXJvQGdtYWlsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmxkZXZsemVyb0Bn
bWFpbC5jb208L2E+Jmd0Ozxicj4KQ2M6IDxhIGhyZWY9Im1haWx0bzpjaGlwc2VjQGxpc3RzLjAx
Lm9yZyIgdGFyZ2V0PSJfYmxhbmsiPmNoaXBzZWNAbGlzdHMuMDEub3JnPC9hPjxicj4KU3ViamVj
dDogW2NoaXBzZWNdIFJlOiBjaGlwc2VjLTEuNS4wIGluIEVGSSBTaGVsbDxicj4KPGJyPgpXaGF0
IFVFRkkgU2hlbGwgYXJlIHlvdSB1c2luZz8gJnF1b3Q7RUZJIFNoZWxsJnF1b3Q7IG1heSBtZWFu
IGFuIGFuY2llbnQgb25lLiBJIHRoaW5rIEkgcmVjYWxsIHNvbWUgdGhyZWFkIHdoZXJlIHNvbWVv
bmUgd2FzIHRyeWluZyB0byBnZXQgQ0hJUFNFQyBydW5uaW5nIHVzaW5nIGFuIG9sZCAoMS54Pykg
T0VNJiMzOTtzIHNoZWxsIChBcHBsZT8pLCBhbmQgdGhleSBoYWQgdG8gcHJvdmlkZSB0aGVpciBv
d24gaW5zdGVhZC4gVGhlcmUgaXMgYW4gb2xkZXIgYW5kIGEgbmV3ZXIgVUVGSSBTaGVsbC48YnI+
Cjxicj4KWW91IHNob3VsZCBhbHNvIGluY2x1ZGUgaW5mbyBhYm91dCBvdGhlciBQeXRob24gY29k
ZSB5b3Ugd2VyZSBhYmxlIHRvIHN1Y2Nlc3NmdWxseSBydW4gaW4gdGhpcyBFRkkgU2hlbGwuIE1h
eWJlIENISVBTRUMgaXMgbm90IHRoZSBpc3N1ZSwgdGhlIGlzc3VlIGlzIHlvdXIgRUZJIFNoZWxs
IGFuZCBQeXRob24uPGJyPgo8YnI+Ckluc3RlYWQgb2YgYnVpbGRpbmcgeW91ciBvd24gVUVGSSBQ
eXRob24sIHdoYXQgaGFwcGVucyB3aGVuIHlvdSB1c2UgdGhlIENISVBTRUMgaW5zdHJ1Y3Rpb25z
IGFuZCB1c2UgdGhlaXIgc3VwcGxpZWQgcHl0aG9uLmVmaT8gV2FzbiYjMzk7dCB0aGVyZSBzb21l
IHNwZWNpYWwgQ0hJUFNFQy1jZW50cmljIG9wdGlvbnMgbmVlZGVkIHRvIGJ1aWxkIFB5dGhvbiB3
aXRoPyBJZiBzbywgdGhhdCBzaG91bGQgYmUgY2xhcmlmaWVkIGJldHRlciBpbiBidWlsZCBkb2Nz
Ljxicj4KPGJyPgooR3JhbnRlZCwgaXQgc3Vja3MgaGF2aW5nIGEgc2VjdXJpdHkgdG9vbCBzaGlw
IGEgcHJlLWNvbXBpbGVkIFB5dGhvbiBiaW5hcnkgaW4gdGhlaXIgc291cmNlIHRyZWUsIGJ1aWx0
IGluIGFuIHVua25vd24gbWFubmVyLCB3aXRoIG5vIGNoZWNrc3VtcywgYW5kIG5vIHJlcHJvZHVj
YWJsZSBidWlsZHMsIGFuZCBoYXZlIHRoZSB0b29sIHJlbHkgb24gdGhpcyBmb3IgZGV0ZXJtaW5p
bmcgcGxhdGZvcm0gc2VjdXJpdHkuIEJ1dCB0aGF0JiMzOTtzIGFub3RoZXIgaXNzdWUuLi4pPGJy
Pgo8YnI+CkludGVsIGhhcyBhYmFuZG9uZWQgQ1B5dGhvbiBWMiBmb3IgVUVGSSBwYXRjaCwgYW5k
IGlzIGluc3RlYWQgaXMgd29ya2luZyBvbiBNaWNyb1B5dGhvbiBmb3IgVUVGSSAod2hpY2ggaGFz
IHNvbWUgUHl0aG9uIFYzIHN1cHBvcnQpLiBUaG91Z2ggUHl0aG9uIFYyIGlzIGRlcHJlY2F0ZWQg
YW5kIG1vc3Qgb2Ygd29ybGQgaGFzIG1vdmVkIHRvIFB5dGhvbiBWMywgQ0hJUFNFQyB0ZWFtIGlz
IHN0aWxsIHVzaW5nL2J1bmRsaW5nIENQeXRob24gVjIsIGFuZCBoYXNuJiMzOTt0IHN3aXRjaGVk
IG92ZXIgdG8gdXNpbmcvcmVseWluZy1vbi9idW5kbGluZyBNaWNyb1B5dGhvbiBmb3IgVUVGSS48
YnI+Cjxicj4KRldJVywgSSByYXJlbHkgc2VlIHJlcGxpZXMgZnJvbSB0aGUgdGVhbSBmb3Igc3Vw
cG9ydCBxdWVzdGlvbnMgb24gdGhpcyBtYWlsaW5nIGxpc3Qgbm9yIHRoZSBHb29nbGUgR3JvdXBz
IGxpc3RzLiBJdCBJIHdhcyBsb29raW5nIGZvciBhIHJlcGx5LCBJJiMzOTtkIGZpbGUgYSBHaXRo
dWIgaXNzdWUgKGFuZCBpbmNsdWRlIG1vcmUgaW5mbyksIG9yIHVzZSBUd2l0dGVyLjxicj4KPGJy
PgpZb3UgbWlnaHQgd2FudCB0byBjbGFyaWZ5IHRoYXQgeW91JiMzOTtyZSB0cnlpbmcgdG8gcnVu
IHRoaXMgb24gYW4gSW50ZWwgc3lzdGVtLCBub3QgYW5vdGhlciBJU0EgKGxpa2UgQU1EIG9yIEFS
TSBvciBSSVNDLVYpLCBhcyB0aGF0JiMzOTtkIGFsc28gbm90IHdvcmsuPGJyPgo8YnI+CkhUSCw8
YnI+CkxlZTxicj4KPGJyPgpPbiA1LzI4LzIwIDc6MzYgQU0sIFZvcm5hbWUgTmFjaG5hbWUgd3Jv
dGU6PGJyPgomZ3Q7IEhlbGxvLDxicj4KJmd0Ozxicj4KJmd0OyBJIHRyaWVkIHRvIHJ1biBjaGlw
c2VjLTEuNS4wIGluIEVGSSBTaGVsbCB3aXRob3V0IG9wZXJhdGluZyBzeXN0ZW0gYnV0IDxicj4K
Jmd0OyB1bmZvcnR1bmF0ZWx5IGl0IGRvZXNuJiMzOTt0IHJ1biBpbiB0aGUgRUZJIFNoZWxsLiBJ
IHJhbiB0aGVzZSBjb21tYW5kczo8YnI+CiZndDs8YnI+CiZndDsgU2hlbGwmZ3Q7IGZzMDo8YnI+
CiZndDsgRlMwOlwmZ3Q7IHB5dGhvbiAtXiMgY2hpcHNlY19tYWluLnB5IC1tIGRlYnVnZW5hYmxl
ZDxicj4KJmd0Ozxicj4KJmd0OyBUaGlzIHJlc3VsdHMgaW4gYSB0cmFjZWJhY2sgd2l0aCB0aGUg
bGFzdCBmaWxlIGNoaXBzZWMvZGVmaW5lcy5weSA8YnI+CiZndDsgY2FsbGVkIGZ1bmN0aW9uIGdl
dF92ZXJzaW9uKCkuPGJyPgomZ3Q7PGJyPgomZ3Q7IE9TRXJyb3I6IFtFcnJubyAyMl0gSW52YWx1
ZCBhcmd1bWVudDogJiMzOTtGUzA6RlMwOmNoaXBzZWMmIzM5Ozxicj4KJmd0Ozxicj4KJmd0OyBB
ZnRlciB0aGF0IEkgY29tcGlsZWQgcHl0aG9uIDIuNy4yIGFuZCBweXRob24gMi43LjEwIGZyb20g
ZWRrMiBwYWNrYWdlIDxicj4KJmd0OyB2ZXJzaW9uIGVkazItc3RhYmxlMjAxOTAzLiBUaGlzIGlz
IHRoZSBsYXN0IHBhY2thZ2UgdmVyc2lvbiB3aXRoIDxicj4KJmd0OyBweWh0b24gaW5zaWRlLiBX
aXRoIHRoaXMgdmVyc2lvbiBvZiBweWh0b24gSSByZWNlaXZlZCBhbm90aGVyIGVycm9yIDxicj4K
Jmd0OyBtZXNzYWdlIHdpdGggdGhlIGxhc3QgbGluZTo8YnI+CiZndDs8YnI+CiZndDsgSW1wb3J0
RXJyb3I6IE5vIG1vZHVsZSBuYW1lZCBleHBhdDsgdXNlIFNpbXBsZVhNTFRyZWVCdWlsZGVyIGlu
c3RlYWQuPGJyPgomZ3Q7PGJyPgomZ3Q7IFdoYXQgaXMgdGhlIGJlc3Qgd2F5IHRvIHN0YXJ0IHRo
ZSBsYXRlc3QgdmVyc2lvbiBvZiBjaGlwc2VjIGluIHRoZSBFRkkgPGJyPgomZ3Q7IFNoZWxsPyBX
aGF0IHZlcnNpb24gb2YgRUZJIFNoZWxsIGFuZCBweWh0b24gaXMgcmVxdWlyZWQ/PGJyPgomZ3Q7
PGJyPgomZ3Q7IGJlc3Qgd2lzaGVzPGJyPgomZ3Q7IFBoaWxpcHA8YnI+CiZndDs8YnI+CiZndDs8
YnI+CiZndDsgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188
YnI+CiZndDsgY2hpcHNlYyBtYWlsaW5nIGxpc3QgLS0gPGEgaHJlZj0ibWFpbHRvOmNoaXBzZWNA
bGlzdHMuMDEub3JnIiB0YXJnZXQ9Il9ibGFuayI+Y2hpcHNlY0BsaXN0cy4wMS5vcmc8L2E+IFRv
IHVuc3Vic2NyaWJlIHNlbmQgYW4gPGJyPgomZ3Q7IGVtYWlsIHRvIDxhIGhyZWY9Im1haWx0bzpj
aGlwc2VjLWxlYXZlQGxpc3RzLjAxLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPmNoaXBzZWMtbGVhdmVA
bGlzdHMuMDEub3JnPC9hPjxicj4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX188YnI+CmNoaXBzZWMgbWFpbGluZyBsaXN0IC0tIDxhIGhyZWY9Im1haWx0bzpj
aGlwc2VjQGxpc3RzLjAxLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPmNoaXBzZWNAbGlzdHMuMDEub3Jn
PC9hPiBUbyB1bnN1YnNjcmliZSBzZW5kIGFuIGVtYWlsIHRvIDxhIGhyZWY9Im1haWx0bzpjaGlw
c2VjLWxlYXZlQGxpc3RzLjAxLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPmNoaXBzZWMtbGVhdmVAbGlz
dHMuMDEub3JnPC9hPjxicj4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX188YnI+CmNoaXBzZWMgbWFpbGluZyBsaXN0IC0tIDxhIGhyZWY9Im1haWx0bzpjaGlw
c2VjQGxpc3RzLjAxLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPmNoaXBzZWNAbGlzdHMuMDEub3JnPC9h
Pjxicj4KVG8gdW5zdWJzY3JpYmUgc2VuZCBhbiBlbWFpbCB0byA8YSBocmVmPSJtYWlsdG86Y2hp
cHNlYy1sZWF2ZUBsaXN0cy4wMS5vcmciIHRhcmdldD0iX2JsYW5rIj5jaGlwc2VjLWxlYXZlQGxp
c3RzLjAxLm9yZzwvYT48YnI+CjwvYmxvY2txdW90ZT48L2Rpdj4KPC9ibG9ja3F1b3RlPjwvZGl2
Pgo=

--===============4646498992241321772==--