Date: Wed, 13 May 1998 16:19:22 -0700 (PDT)
From: Yuri Romanenko <yuri@CS.UCLA.EDU>
To: Jan Luehe <Jan.Luehe@Eng>
Subject: Re: can't compile the sample code for JCE1.2
In-Reply-To: <libSDtMail.9805131608.21819.luehe@shorter>
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.
---559023410-758783491-895101562=:19149
Content-Type: TEXT/PLAIN; charset=US-ASCII
thanks for the fast response!!
I did copy the code correctly: I downloaded JCE1.2 ea2 (for NT) about a
week ago.
The code for Diffie-Hellman key agreement protocol between 2 parties is
present in the following file:
... jce12-ea2-dom\doc\guide\API_users_guide.html
The same bug is in the protocol for key agreement between 3 parties.
I am attaching the html file (API_users_guide.html) that got installed on
my NT machine.
If you could send me updated code that WOULD BE GREAT!!!
If you guys also have some implementation of RSA or other asymmetric
algorithm I would like to look at it as well (if possible).
Thank you very much!
Sincerely,
Yuri Romanenko
yuri@cs.ucla.edu
On Wed, 13 May 1998, Jan Luehe wrote:
> Yuri:
>
> Are you sure you copied the correct example and have
> not modified it yourself?
>
> Line 181 of that example has the following code, which
> compiles without any problems:
>
> for (int i=0; i<aliceLen; i++) {
>
> Jan
>
>
> > Date: Wed, 13 May 1998 15:51:50 -0700 (PDT)
> > From: Yuri Romanenko <yuri@CS.UCLA.EDU>
> > To: java-security@web2.javasoft.com
> > Subject: can't compile the sample code for JCE1.2
> > MIME-Version: 1.0
> >
> > Hi,
> >
> > I am grad student at UCLA and enrolled in the computer security class.
> > We've been trying to evaluate JCE and apparently we can't compile the
> > sample code for Diffie-Hellman key exchange listed in
> > API_users_guide.html. It complains about the following line:
> >
> > DHKeyAgreement2.java:181: ';' expected.
> > for (int i=0; i> 4);
> > ^
> > 1 error
> >
> > Clearly this "for" loop has a problem. Please check it out and let me
> > know ASAP. Thanks!!
> >
> >
> > Yuri Romanenko
> > yuri@cs.ucla.edu
> >
> >
>
>
---559023410-758783491-895101562=:19149
Content-Type: TEXT/html; name="API_users_guide.html"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.SOL.3.96.980513161922.19149E@panther.cs.ucla.edu>
Content-Description:
PCFkb2N0eXBlIGh0bWwgcHVibGljICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
Pg0KPEhUTUw+DQoNCjxIRUFEPg0KDQo8VElUTEU+SmF2YSBDcnlwdG9ncmFw
aHkgRXh0ZW5zaW9uIDEuMjwvVElUTEU+DQoNCjwvSEVBRD4NCg0KPEJPRFk+
DQo8SFI+DQoNCjxjZW50ZXI+DQoNCjxIMT5KYXZhPGZvbnQgc2l6ZT0tMT48
c3VwPlRNPC9zdXA+PC9mb250PiBDcnlwdG9ncmFwaHkgRXh0ZW5zaW9uIDEu
MjwvSDE+DQoNCjxIMT5BUEkgU3BlY2lmaWNhdGlvbiAmYW1wOyBSZWZlcmVu
Y2U8L0gxPg0KDQo8SDM+PEk+TGFzdCBNb2RpZmllZDogMTIgRmVicnVhcnkg
MTk5ODwvST48L0gzPg0KDQo8L2NlbnRlcj4NCg0KPEhSPg0KPEgxPkludHJv
ZHVjdGlvbjwvSDE+DQoNCjxibG9ja3F1b3RlPg0KDQo8UD4gVGhpcyBkb2N1
bWVudCBpcyBpbnRlbmRlZCBhcyBhIGNvbXBhbmlvbiB0byB0aGUgPGENCmhy
ZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vcHJvZHVjdHMvamRrLzEuMi9kb2Nz
L2d1aWRlL3NlY3VyaXR5L0NyeXB0b1NwZWMuaHRtbCI+DQpKYXZhIENyeXB0
b2dyYXBoeSBBcmNoaXRlY3R1cmUgKEpDQSkgQVBJIFNwZWNpZmljYXRpb24g
JmFtcDsNClJlZmVyZW5jZTwvYT4uIFJlZmVyZW5jZXMgdG8gY2hhcHRlcnMg
bm90IHByZXNlbnQgaW4gdGhpcyBkb2N1bWVudCBhcmUNCnRvIGNoYXB0ZXJz
IGluIHRoZSBKQ0EgU3BlY2lmaWNhdGlvbi4NCg0KPFA+IFRoZSBKYXZhIENy
eXB0b2dyYXBoeSBFeHRlbnNpb24gKEpDRSkgMS4yIHByb3ZpZGVzIGEgZnJh
bWV3b3JrIGZvcg0KZW5jcnlwdGlvbiwga2V5IGFncmVlbWVudCwgYW5kIG1l
c3NhZ2UgYXV0aGVudGljYXRpb24uIEl0IGluY2x1ZGVzDQppbnRlcmZhY2Vz
IGFuZCBpbXBsZW1lbnRhdGlvbnMgb2YgY2lwaGVycyAoc3ltbWV0cmljLCBh
c3ltbWV0cmljLA0KYmxvY2ssIGFuZCBzdHJlYW0gY2lwaGVycyksIHNlY3Vy
ZSBKYXZhIHN0cmVhbXMsIHNlYWxlZCBKYXZhIG9iamVjdHMsDQphbmQgc2Vz
c2lvbiBrZXkgZ2VuZXJhdGlvbi4NCg0KPFA+IEpDRSAxLjIgaXMgZGVzaWdu
ZWQgc28gdGhhdCBvdGhlciBjcnlwdG9ncmFwaHkgbGlicmFyaWVzIGNhbiBi
ZQ0KcGx1Z2dlZCBpbiBhcyBhIHNlcnZpY2UgcHJvdmlkZXIsIGFuZCBuZXcg
YWxnb3JpdGhtcyBjYW4gYmUgYWRkZWQNCnNlYW1sZXNzbHkuDQoNCjxQPiBK
Q0UgMS4yIHN1cHBsZW1lbnRzIHRoZSBKYXZhIERldmVsb3BtZW50IEtpdCAx
LjIgKEpESyksIHdoaWNoDQphbHJlYWR5IGluY2x1ZGVzIGludGVyZmFjZXMg
YW5kIGltcGxlbWVudGF0aW9ucyBvZiBtZXNzYWdlIGRpZ2VzdHMgYW5kDQpk
aWdpdGFsIHNpZ25hdHVyZXMuIEpDRSAxLjIgaXMgcHJvdmlkZWQgYXMgYSBK
YXZhIGV4dGVuc2lvbiB0byB0aGUNCkphdmEgcGxhdGZvcm0uDQoNCjxQPiBU
aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBKQ0UgZm9sbG93cyB0aGUgc2FtZSA8
YQ0KaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9wcm9kdWN0cy9qZGsvMS4y
L2RvY3MvZ3VpZGUvc2VjdXJpdHkvQ3J5cHRvU3BlYy5odG1sI0Rlc2lnbiI+
ZGVzaWduDQpwcmluY2lwbGVzPC9hPiBmb3VuZCBlbHNld2hlcmUgaW4gdGhl
IEpDQTogaW1wbGVtZW50YXRpb24gaW5kZXBlbmRlbmNlDQphbmQsIHdoZW5l
dmVyIHBvc3NpYmxlLCBhbGdvcml0aG0gaW5kZXBlbmRlbmNlLiBJdCB1c2Vz
IHRoZSBzYW1lIDxhDQpocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL3Byb2R1
Y3RzL2pkay8xLjIvZG9jcy9ndWlkZS9zZWN1cml0eS9DcnlwdG9TcGVjLmh0
bWwjUHJvdmlkZXJBcmNoIj4icHJvdmlkZXIiPC9hPg0KYXJjaGl0ZWN0dXJl
Lg0KDQo8UD4gVGhlIEpDRSAxLjIgQVBJIGNvdmVyczoNCg0KPFVMPg0KDQo8
TEk+U3ltbWV0cmljIGJ1bGsgZW5jcnlwdGlvbiwgc3VjaCBhcyBERVMsIFJD
MiwgYW5kIElERUE8cD4NCg0KPExJPlN5bW1ldHJpYyBzdHJlYW0gZW5jcnlw
dGlvbiwgc3VjaCBhcyBSQzQ8cD4NCg0KPExJPkFzeW1tZXRyaWMgZW5jcnlw
dGlvbiwgc3VjaCBhcyBSU0E8cD4NCg0KPExJPlBhc3N3b3JkLWJhc2VkIGVu
Y3J5cHRpb24gKFBCRSk8cD4NCg0KPExJPktleSBBZ3JlZW1lbnQsIHN1Y2gg
YXMgRGlmZmllLUhlbGxtYW48cD4NCg0KPExJPk1lc3NhZ2UgQXV0aGVudGlj
YXRpb24gQ29kZXMgKE1BQykNCjwvVUw+DQoNCjxQPiBKQ0UgMS4yIGNvbWVz
IHdpdGggYSBidWlsdC1pbiBjcnlwdG9ncmFwaGljIHByb3ZpZGVyICgiU3Vu
SkNFIiksIHdoaWNoDQpzdXBwbGllcyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhl
IGZvbGxvd2luZyBhbGdvcml0aG1zOg0KDQo8VUw+DQoNCjxMST5EYXRhIEVu
Y3J5cHRpb24gU3RhbmRhcmQgKERFUykgYW5kIFRyaXBsZSBERVMgaW4gRUNC
LCBDQkMsDQpDRkIsIE9GQiwgYW5kIFBDQkMgbW9kZXMgd2l0aCBQS0NTIzUt
c3R5bGUgcGFkZGluZzxwPg0KDQo8TEk+TUQ1IHdpdGggREVTLUNCQyBwYXNz
d29yZC1iYXNlZCBlbmNyeXB0aW9uIChhcyBkZWZpbmVkIGluIFBLQ1MgIzUp
PHA+DQoNCjxMST5EaWZmaWUtSGVsbG1hbiBLZXkgQWdyZWVtZW50IGJldHdl
ZW4gMiBwYXJ0aWVzPHA+DQoNCjxMST5ITUFDLU1ENSBhbmQgSE1BQy1TSEEx
DQo8L1VMPg0KDQo8L2Jsb2NrcXVvdGU+DQoNCg0KDQo8SDE+Q29uY2VwdHM8
L0gxPg0KDQo8YmxvY2txdW90ZT4NCg0KPFA+IFRoaXMgc2VjdGlvbiBwcm92
aWRlcyBhIGhpZ2gtbGV2ZWwgZGVzY3JpcHRpb24gb2YgdGhlIGNvbmNlcHRz
DQppbXBsZW1lbnRlZCBieSB0aGUgQVBJLCBhbmQgdGhlIGV4YWN0IG1lYW5p
bmcgb2YgdGhlIHRlY2huaWNhbCB0ZXJtcw0KdXNlZCBpbiB0aGUgQVBJIHNw
ZWNpZmljYXRpb24uDQoNCjxIND5FbmNyeXB0aW9uIGFuZCBEZWNyeXB0aW9u
PC9IND4NCg0KPFA+IEVuY3J5cHRpb24gaXMgdGhlIHByb2Nlc3Mgb2YgdGFr
aW5nIGRhdGEgKGNhbGxlZCA8ST5jbGVhcnRleHQ8L0k+KQ0KYW5kIGEgc2hv
cnQgc3RyaW5nIChhIDxpPmtleTwvaT4pLCBhbmQgcHJvZHVjaW5nIGRhdGEN
Cig8ST5jaXBoZXJ0ZXh0PC9JPikgbWVhbmluZ2xlc3MgdG8gYSB0aGlyZC1w
YXJ0eSB3aG8gZG9lcyBub3Qga25vdyB0aGUNCmtleS4gRGVjcnlwdGlvbiBp
cyB0aGUgaW52ZXJzZSBwcm9jZXNzOiB0aGF0IG9mIHRha2luZyBjaXBoZXJ0
ZXh0IGFuZA0KYSBzaG9ydCBrZXkgc3RyaW5nLCBhbmQgcHJvZHVjaW5nIGNs
ZWFydGV4dC4NCg0KPEg0PlBhc3N3b3JkLUJhc2VkIEVuY3J5cHRpb248L0g0
Pg0KDQo8UD4gUGFzc3dvcmQtQmFzZWQgRW5jcnlwdGlvbiAoUEJFKSBnZW5l
cmF0ZXMgYSBrZXkgZnJvbSBhIHBhc3N3b3JkLA0KYW5kIGVuY3J5cHRzIHVz
aW5nIHRoYXQga2V5LiBJbiBvcmRlciB0byBtYWtlIHRoZSB0YXNrIG9mIGdl
dHRpbmcgZnJvbQ0KcGFzc3dvcmQgdG8ga2V5IHZlcnkgdGltZS1jb25zdW1p
bmcgZm9yIGFuIGF0dGFja2VyLCBtb3N0IFBCRQ0KaW1wbGVtZW50YXRpb25z
IHdpbGwgbWl4IGluIGEgcmFuZG9tIG51bWJlciwga25vd24gYXMgYSA8aT5z
YWx0PC9pPiwNCnRvIGNyZWF0ZSB0aGUga2V5Lg0KDQo8SDQ+Q2lwaGVyPC9I
ND4NCg0KPFA+IEVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gYXJlIGRvbmUg
dXNpbmcgYSBjaXBoZXIuIEEgY2lwaGVyIGlzIGFuDQpvYmplY3QgY2FwYWJs
ZSBvZiBjYXJyeWluZyBvdXQgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiBh
Y2NvcmRpbmcgdG8NCmFuIGVuY3J5cHRpb24gc2NoZW1lIChhbGdvcml0aG0p
Lg0KDQo8SDQ+S2V5IEFncmVlbWVudDwvSDQ+DQoNCjxQPiBLZXkgYWdyZWVt
ZW50IGlzIGEgcHJvdG9jb2wgYnkgd2hpY2ggMiBvciBtb3JlIHBhcnRpZXMg
Y2FuDQplc3RhYmxpc2ggdGhlIHNhbWUgY3J5cHRvZ3JhcGhpYyBrZXlzLCB3
aXRob3V0IGhhdmluZyB0byBleGNoYW5nZSBhbnkNCnNlY3JldCBpbmZvcm1h
dGlvbi48cD4NCg0KPEg0Pk1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZSAo
TUFDKTwvSDQ+DQoNCjxQPiBBIE1BQyBwcm92aWRlcyBhIHdheSB0byBjaGVj
ayB0aGUgaW50ZWdyaXR5IG9mIGluZm9ybWF0aW9uDQp0cmFuc21pdHRlZCBv
dmVyIG9yIHN0b3JlZCBpbiBhbiB1bnJlbGlhYmxlIG1lZGl1bSwgYmFzZWQg
b24gYSBzZWNyZXQNCmtleS4gVHlwaWNhbGx5LCBtZXNzYWdlIGF1dGhlbnRp
Y2F0aW9uIGNvZGVzIGFyZSB1c2VkIGJldHdlZW4gdHdvDQpwYXJ0aWVzIHRo
YXQgc2hhcmUgYSBzZWNyZXQga2V5IGluIG9yZGVyIHRvIHZhbGlkYXRlIGlu
Zm9ybWF0aW9uDQp0cmFuc21pdHRlZCBiZXR3ZWVuIHRoZXNlIHBhcnRpZXMu
DQoNCjxwPiBBIE1BQyBtZWNoYW5pc20gdGhhdCBpcyBiYXNlZCBvbiBjcnlw
dG9ncmFwaGljIGhhc2ggZnVuY3Rpb25zIGlzDQpyZWZlcnJlZCB0byBhcyBI
TUFDLiBITUFDIGNhbiBiZSB1c2VkIHdpdGggYW55IGNyeXB0b2dyYXBoaWMg
aGFzaCBmdW5jdGlvbiwNCmUuZy4sIE1ENSBvciBTSEEtMSwgaW4gY29tYmlu
YXRpb24gd2l0aCBhIHNlY3JldCBzaGFyZWQga2V5LiBITUFDIGlzDQpzcGVj
aWZpZWQgaW4gUkZDIDIxMDQuDQoNCjwvYmxvY2txdW90ZT4NCg0KDQoNCjxI
MT5Db3JlIENsYXNzZXMgYW5kIEludGVyZmFjZXM8L0gxPg0KDQo8YmxvY2tx
dW90ZT4NCg0KPFVMPg0KDQo8TEk+PEgyPlRoZSBDaXBoZXIgQ2xhc3M8L0gy
Pg0KDQo8YmxvY2txdW90ZT4NCg0KPFA+IFRoZSBDaXBoZXIgY2xhc3MgcHJv
dmlkZXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYSBjcnlwdG9ncmFwaGljDQpj
aXBoZXIgdXNlZCBmb3IgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbi4gSXQg
Zm9ybXMgdGhlIGNvcmUgb2YgdGhlDQpKQ0UuDQoNCjxIND5DcmVhdGluZyBh
IENpcGhlciBPYmplY3Q8L0g0Pg0KDQo8YmxvY2txdW90ZT4NCg0KPFA+IExp
a2Ugb3RoZXIgZW5naW5lIGNsYXNzZXMgaW4gdGhlIEFQSSwgQ2lwaGVyIG9i
amVjdHMgYXJlIGNyZWF0ZWQNCnVzaW5nIHRoZSA8Y29kZT5nZXRJbnN0YW5j
ZTwvY29kZT4gZmFjdG9yeSBtZXRob2RzIG9mIHRoZSBDaXBoZXINCmNsYXNz
LiAgQSBmYWN0b3J5IG1ldGhvZCBpcyBhIHN0YXRpYyBtZXRob2QgdGhhdCBy
ZXR1cm5zIGFuIGluc3RhbmNlDQpvZiBhIGNsYXNzLCBpbiB0aGlzIGNhc2Us
IGFuIGluc3RhbmNlIG9mIDxjb2RlPkNpcGhlcjwvY29kZT4gd2hpY2gNCnBy
b3ZpZGVzIHRoZSByZXF1ZXN0ZWQgPGk+dHJhbnNmb3JtYXRpb248L2k+Lg0K
DQo8UD4gQSB0cmFuc2Zvcm1hdGlvbiBpcyBhIHN0cmluZyB0aGF0IGRlc2Ny
aWJlcyB0aGUgb3BlcmF0aW9uIChvciBzZXQNCm9mIG9wZXJhdGlvbnMpIHRv
IGJlIHBlcmZvcm1lZCBvbiB0aGUgZ2l2ZW4gaW5wdXQsIHRvIHByb2R1Y2Ug
c29tZQ0Kb3V0cHV0LiBBIHRyYW5zZm9ybWF0aW9uIGFsd2F5cyBpbmNsdWRl
cyB0aGUgbmFtZSBvZiBhIGNyeXB0b2dyYXBoaWMNCmFsZ29yaXRobSAoZS5n
LiwgPGk+REVTPC9pPiksIGFuZCBtYXkgYmUgZm9sbG93ZWQgYnkgYSBmZWVk
YmFjayBtb2RlDQphbmQgcGFkZGluZyBzY2hlbWUuIEEgdHJhbnNmb3JtYXRp
b24gaXMgb2YgdGhlIGZvcm06DQoiPGk+YWxnb3JpdGhtPC9pPiIgb3IgIjxp
PmFsZ29yaXRobS9tb2RlL3BhZGRpbmc8L2k+IiAoaW4gdGhlIGZvcm1lcg0K
Y2FzZSwgZGVmYXVsdHMgYXJlIHVzZWQgZm9yIG1vZGUgYW5kIHBhZGRpbmcp
Lg0KDQo8UD4gV2hlbiByZXF1ZXN0aW5nIGEgYmxvY2sgY2lwaGVyIGluIHN0
cmVhbSBjaXBoZXIgbW9kZSAoZS5nLiwNCjxjb2RlPkRFUzwvY29kZT4gaW4g
PGNvZGU+Q0ZCPC9jb2RlPiBvciA8Y29kZT5PRkI8L2NvZGU+IG1vZGUpLCB5
b3UNCm1heSBvcHRpb25hbGx5IHNwZWNpZnkgdGhlIG51bWJlciBvZiBiaXRz
IHRvIGJlIHByb2Nlc3NlZCBhdCBhIHRpbWUsDQpieSBhcHBlbmRpbmcgdGhp
cyBudW1iZXIgdG8gdGhlIG1vZGUgbmFtZSBhcyBzaG93biBpbiB0aGUNCiI8
aT5ERVMvQ0ZCOC9Ob1BhZGRpbmc8L2k+IiBhbmQgIjxpPkRFUy9PRkIzMi9Q
S0NTNVBhZGRpbmc8L2k+Ig0KdHJhbnNmb3JtYXRpb25zLiBJZiBubyBzdWNo
IG51bWJlciBpcyBzcGVjaWZpZWQsIGEgcHJvdmlkZXItc3BlY2lmaWMNCmRl
ZmF1bHQgaXMgdXNlZC4gKEZvciBleGFtcGxlLCB0aGUgU3VuIEpDRSBwcm92
aWRlciB1c2VzIGEgZGVmYXVsdCBvZg0KNjQgYml0cy4pDQoNCjxQPiBUbyBj
cmVhdGUgYSBDaXBoZXIgb2JqZWN0LCB5b3UgbXVzdCBzcGVjaWZ5IHRoZSB0
cmFuc2Zvcm1hdGlvbg0KbmFtZS4gWW91IG1heSBhbHNvIHNwZWNpZnkgd2hp
Y2ggcHJvdmlkZXIgeW91IHdhbnQgdG8gc3VwcGx5IHRoZQ0KaW1wbGVtZW50
YXRpb24gb2YgdGhlIHJlcXVlc3RlZCB0cmFuc2Zvcm1hdGlvbjoNCg0KPHBy
ZT4NCiAgICBwdWJsaWMgc3RhdGljIENpcGhlciBnZXRJbnN0YW5jZShTdHJp
bmcgdHJhbnNmb3JtYXRpb24pOw0KDQogICAgcHVibGljIHN0YXRpYyBDaXBo
ZXIgZ2V0SW5zdGFuY2UoU3RyaW5nIHRyYW5zZm9ybWF0aW9uLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcm92aWRl
cik7DQo8L3ByZT4NCg0KPFA+IElmIGp1c3QgYSB0cmFuc2Zvcm1hdGlvbiBu
YW1lIGlzIHNwZWNpZmllZCwgdGhlIHN5c3RlbSB3aWxsDQpkZXRlcm1pbmUg
aWYgdGhlcmUgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHJlcXVlc3Rl
ZA0KdHJhbnNmb3JtYXRpb24gYXZhaWxhYmxlIGluIHRoZSBlbnZpcm9ubWVu
dCwgYW5kIGlmIHRoZXJlIGlzIG1vcmUgdGhhbg0Kb25lLCBpZiB0aGVyZSBp
cyBhIHByZWZlcnJlZCBvbmUuDQoNCjxQPiBJZiBib3RoIGEgdHJhbnNmb3Jt
YXRpb24gbmFtZSBhbmQgYSBwYWNrYWdlIHByb3ZpZGVyIGFyZQ0Kc3BlY2lm
aWVkLCB0aGUgc3lzdGVtIHdpbGwgZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGFu
IGltcGxlbWVudGF0aW9uIG9mDQp0aGUgcmVxdWVzdGVkIHRyYW5zZm9ybWF0
aW9uIGluIHRoZSBwYWNrYWdlIHJlcXVlc3RlZCwgYW5kIHRocm93IGFuDQpl
eGNlcHRpb24gaWYgdGhlcmUgaXMgbm90Lg0KDQo8UD4gRm9yIGV4YW1wbGUs
IHVzZSB0aGUgZm9sbG93aW5nIHRvIHNwZWNpZnkgdGhlIERFUyBhbGdvcml0
aG0sIEVDQg0KbW9kZSwgYW5kIFBLQ1MjNSBwYWRkaW5nOg0KDQo8cHJlPg0K
ICAgIENpcGhlciBjID0gQ2lwaGVyLmdldEluc3RhbmNlKCJERVMvRUNCL1BL
Q1M1UGFkZGluZyIpOw0KPC9wcmU+DQoNCjxQPiBTdGFuZGFyZCBuYW1lcyB0
byBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGFsZ29yaXRobSwgbW9kZSwgYW5k
DQpwYWRkaW5nIGNvbXBvbmVudHMgb2YgYSB0cmFuc2Zvcm1hdGlvbiBhcmUg
ZGlzY3Vzc2VkIGluIDxhDQpocmVmPSIjQXBwQSI+QXBwZW5kaXggQTwvYT4g
aW4gdGhpcyBkb2N1bWVudC4NCg0KPFA+IFRoZSBvYmplY3RzIHJldHVybmVk
IGJ5IGZhY3RvcnkgbWV0aG9kcyBhcmUgdW5pbml0aWFsaXplZCwgYW5kDQpt
dXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGV5IGJlY29tZSB1c2FibGUu
DQoNCjwvYmxvY2txdW90ZT4NCg0KPEg0PkluaXRpYWxpemluZyBhIENpcGhl
ciBPYmplY3Q8L0g0Pg0KDQo8YmxvY2txdW90ZT4NCg0KPFA+IEEgQ2lwaGVy
IG9iamVjdCBvYnRhaW5lZCBmcm9tIDxjb2RlPmdldEluc3RhbmNlPC9jb2Rl
PiBtdXN0IGJlDQppbml0aWFsaXplZCBmb3Igb25lIG9mIHR3byBtb2RlcyAo
ZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uKSwgd2hpY2ggYXJlDQpkZWZpbmVk
IGFzIGZpbmFsIGludGVnZXIgY29uc3RhbnRzIGluIHRoZSA8Y29kZT5DaXBo
ZXI8L2NvZGU+DQpjbGFzcy4gVGhlIHR3byBtb2RlcyBjYW4gYmUgcmVmZXJl
bmNlZCBieSB0aGVpciBzeW1ib2xpYyBuYW1lczoNCg0KPFVMPg0KPExJPkVO
Q1JZUFRfTU9ERTxwPiA8TEk+REVDUllQVF9NT0RFDQo8L1VMPg0KDQpFYWNo
IG9mIHRoZSBDaXBoZXIgaW5pdGlhbGl6YXRpb24gbWV0aG9kcyB0YWtlcyBh
IG1vZGUgcGFyYW1ldGVyDQooPGNvZGU+b3Btb2RlPC9jb2RlPiksIGFuZCBp
bml0aWFsaXplcyB0aGUgQ2lwaGVyIG9iamVjdCBmb3IgdGhhdA0KbW9kZS4g
T3RoZXIgcGFyYW1ldGVycyBpbmNsdWRlIHRoZSBrZXkgKDxjb2RlPmtleTwv
Y29kZT4pLCBhbGdvcml0aG0NCnBhcmFtZXRlcnMgKDxjb2RlPnBhcmFtczwv
Y29kZT4pLCBhbmQgYSBzb3VyY2Ugb2YgcmFuZG9tbmVzcw0KKDxjb2RlPnJh
bmRvbTwvY29kZT4pLg0KDQo8UD4gVG8gaW5pdGlhbGl6ZSBhIENpcGhlciBv
YmplY3QsIGNhbGwgb25lIG9mIHRoZSA8Y29kZT5pbml0PC9jb2RlPg0KbWV0
aG9kczoNCg0KPHByZT4NCiAgICBwdWJsaWMgdm9pZCBpbml0KGludCBvcG1v
ZGUsIEtleSBrZXkpOw0KDQogICAgcHVibGljIHZvaWQgaW5pdChpbnQgb3Bt
b2RlLCBLZXkga2V5LCBTZWN1cmVSYW5kb20gcmFuZG9tKTsNCg0KICAgIHB1
YmxpYyB2b2lkIGluaXQoaW50IG9wbW9kZSwgS2V5IGtleSwNCiAgICAgICAg
ICAgICAgICAgICAgIEFsZ29yaXRobVBhcmFtZXRlclNwZWMgcGFyYW1zKTsN
Cg0KICAgIHB1YmxpYyB2b2lkIGluaXQoaW50IG9wbW9kZSwgS2V5IGtleSwN
CiAgICAgICAgICAgICAgICAgICAgIEFsZ29yaXRobVBhcmFtZXRlclNwZWMg
cGFyYW1zLA0KICAgICAgICAgICAgICAgICAgICAgU2VjdXJlUmFuZG9tIHJh
bmRvbSk7DQo8L3ByZT4NCg0KPFA+IE5vdGUgdGhhdCB3aGVuIGEgQ2lwaGVy
IG9iamVjdCBpcyBpbml0aWFsaXplZCwgaXQgbG9zZXMgYWxsDQpwcmV2aW91
c2x5LWFjcXVpcmVkIHN0YXRlLiBJbiBvdGhlciB3b3JkcywgaW5pdGlhbGl6
aW5nIGEgQ2lwaGVyIGlzDQplcXVpdmFsZW50IHRvIGNyZWF0aW5nIGEgbmV3
IGluc3RhbmNlIG9mIHRoYXQgQ2lwaGVyLCBhbmQgaW5pdGlhbGl6aW5nDQpp
dC4gRm9yIGV4YW1wbGUsIGlmIGEgQ2lwaGVyIGlzIGZpcnN0IGluaXRpYWxp
emVkIGZvciBkZWNyeXB0aW9uIHdpdGgNCmEgZ2l2ZW4ga2V5LCBhbmQgdGhl
biBpbml0aWFsaXplZCBmb3IgZW5jcnlwdGlvbiwgaXQgd2lsbCBsb3NlIGFu
eQ0Kc3RhdGUgYWNxdWlyZWQgd2hpbGUgaW4gZGVjcnlwdGlvbiBtb2RlLg0K
DQo8L2Jsb2NrcXVvdGU+DQoNCjxIND5FbmNyeXB0aW5nIGFuZCBEZWNyeXB0
aW5nIERhdGE8L0g0Pg0KDQo8YmxvY2txdW90ZT4NCg0KPFA+IERhdGEgY2Fu
IGJlIGVuY3J5cHRlZC9kZWNyeXB0ZWQgaW4gb25lIHN0ZXAgKDxpPnNpbmds
ZS1wYXJ0DQpvcGVyYXRpb248L2k+KSBvciBpbiBtdWx0aXBsZSBzdGVwcyAo
PGk+bXVsdGlwbGUtcGFydA0Kb3BlcmF0aW9uPC9pPikuIEEgbXVsdGlwbGUt
cGFydCBvcGVyYXRpb24gaXMgdXNlZnVsIGlmIHlvdSBkbyBub3Qga25vdw0K
aW4gYWR2YW5jZSBob3cgbG9uZyB0aGUgZGF0YSBpcyBnb2luZyB0byBiZSwg
b3IgaWYgdGhlIGRhdGEgaXMgdG9vDQpsb25nIHRvIGJlIHN0b3JlZCBpbiBt
ZW1vcnkgYWxsIGF0IG9uY2UuDQoNCjxQPiBUbyBlbmNyeXB0IG9yIGRlY3J5
cHQgZGF0YSBpbiBhIHNpbmdsZSBzdGVwLCBjYWxsIG9uZSBvZiB0aGUNCjxj
b2RlPmRvRmluYWw8L2NvZGU+IG1ldGhvZHM6DQoNCjxwcmU+DQogICAgcHVi
bGljIGJ5dGVbXSBkb0ZpbmFsKGJ5dGVbXSBpbnB1dCk7DQoNCiAgICBwdWJs
aWMgYnl0ZVtdIGRvRmluYWwoYnl0ZVtdIGlucHV0LCBpbnQgaW5wdXRPZmZz
ZXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dExlbik7
DQoNCiAgICBwdWJsaWMgaW50IGRvRmluYWwoYnl0ZVtdIGlucHV0LCBpbnQg
aW5wdXRPZmZzZXQsIGludCBpbnB1dExlbiwNCiAgICAgICAgICAgICAgICAg
ICAgICAgYnl0ZVtdIG91dHB1dCk7DQoNCiAgICBwdWJsaWMgaW50IGRvRmlu
YWwoYnl0ZVtdIGlucHV0LCBpbnQgaW5wdXRPZmZzZXQsIGludCBpbnB1dExl
biwNCiAgICAgICAgICAgICAgICAgICAgICAgYnl0ZVtdIG91dHB1dCwgaW50
IG91dHB1dE9mZnNldCkNCjwvcHJlPg0KDQo8UD4gVG8gZW5jcnlwdCBvciBk
ZWNyeXB0IGRhdGEgaW4gbXVsdGlwbGUgc3RlcHMsIGNhbGwgb25lIG9mIHRo
ZQ0KPGNvZGU+dXBkYXRlPC9jb2RlPiBtZXRob2RzOg0KDQo8cHJlPg0KICAg
IHB1YmxpYyBieXRlW10gdXBkYXRlKGJ5dGVbXSBpbnB1dCk7DQoNCiAgICBw
dWJsaWMgYnl0ZVtdIHVwZGF0ZShieXRlW10gaW5wdXQsIGludCBpbnB1dE9m
ZnNldCwgaW50IGlucHV0TGVuKTsNCg0KICAgIHB1YmxpYyBpbnQgdXBkYXRl
KGJ5dGVbXSBpbnB1dCwgaW50IGlucHV0T2Zmc2V0LCBpbnQgaW5wdXRMZW4s
DQogICAgICAgICAgICAgICAgICAgICAgYnl0ZVtdIG91dHB1dCk7DQoNCiAg
ICBwdWJsaWMgaW50IHVwZGF0ZShieXRlW10gaW5wdXQsIGludCBpbnB1dE9m
ZnNldCwgaW50IGlucHV0TGVuLA0KICAgICAgICAgICAgICAgICAgICAgIGJ5
dGVbXSBvdXRwdXQsIGludCBvdXRwdXRPZmZzZXQpDQo8L3ByZT4NCg0KPFA+
IEEgbXVsdGlwbGUtcGFydCBvcGVyYXRpb24gbXVzdCBiZSB0ZXJtaW5hdGVk
IGJ5IG9uZSBvZiB0aGUgYWJvdmUNCjxjb2RlPmRvRmluYWw8L2NvZGU+IG1l
dGhvZHMgKGlmIHRoZXJlIGlzIHN0aWxsIHNvbWUgaW5wdXQgZGF0YSBsZWZ0
DQpmb3IgdGhlIGxhc3Qgc3RlcCksIG9yIGJ5IG9uZSBvZiB0aGUgZm9sbG93
aW5nIDxjb2RlPmRvRmluYWw8L2NvZGU+DQptZXRob2RzIChpZiB0aGVyZSBp
cyBubyBpbnB1dCBkYXRhIGxlZnQgZm9yIHRoZSBsYXN0IHN0ZXApOg0KDQo8
cHJlPg0KICAgIHB1YmxpYyBieXRlW10gZG9GaW5hbCgpOw0KDQogICAgcHVi
bGljIGludCBkb0ZpbmFsKGJ5dGVbXSBvdXRwdXQsIGludCBvdXRwdXRPZmZz
ZXQpOw0KPC9wcmU+DQoNCjxQPiBBbGwgdGhlIDxjb2RlPmRvRmluYWw8L2Nv
ZGU+IG1ldGhvZHMgdGFrZSBjYXJlIG9mIGFueSBuZWNlc3NhcnkNCnBhZGRp
bmcgb3IgdW5wYWRkaW5nLCBpZiBwYWRkaW5nIChvciB1bnBhZGRpbmcpIGhh
cyBiZWVuIHJlcXVlc3RlZCBhcw0KcGFydCBvZiB0aGUgc3BlY2lmaWVkIHRy
YW5zZm9ybWF0aW9uLg0KDQo8L2Jsb2NrcXVvdGU+DQoNCjwvYmxvY2txdW90
ZT4NCg0KPExJPjxIMj5UaGUgQ2lwaGVyIFN0cmVhbSBDbGFzc2VzPC9IMj4N
Cg0KPGJsb2NrcXVvdGU+DQoNCjxQPiBKQ0UgMS4yIGludHJvZHVjZXMgdGhl
IGNvbmNlcHQgb2Ygc2VjdXJlIEphdmEgc3RyZWFtcywgd2hpY2ggY29tYmlu
ZQ0KYW4gSW5wdXRTdHJlYW0gb3IgT3V0cHV0U3RyZWFtIHdpdGggYSBDaXBo
ZXIgb2JqZWN0LiBTZWN1cmUgSmF2YQ0Kc3RyZWFtcyBhcmUgcHJvdmlkZWQg
YnkgdGhlIDxjb2RlPkNpcGhlcklucHV0U3RyZWFtPC9jb2RlPiBhbmQNCjxj
b2RlPkNpcGhlck91dHB1dFN0cmVhbTwvY29kZT4gY2xhc3Nlcy4NCg0KPEgz
PkNpcGhlcklucHV0U3RyZWFtPC9IMz4NCg0KPGJsb2NrcXVvdGU+DQoNCjxQ
PiBUaGlzIGNsYXNzIGlzIGEgPGNvZGU+RmlsdGVySW5wdXRTdHJlYW08L2Nv
ZGU+IHRoYXQgZW5jcnlwdHMgb3INCmRlY3J5cHRzIHRoZSBkYXRhIHBhc3Np
bmcgdGhyb3VnaCBpdC4gSXQgaXMgY29tcG9zZWQgb2YgYW4NCjxjb2RlPklu
cHV0U3RyZWFtPC9jb2RlPiwgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLCBh
bmQgYQ0KPGNvZGU+Q2lwaGVyPC9jb2RlPi4gQ2lwaGVySW5wdXRTdHJlYW0g
cmVwcmVzZW50cyBhIHNlY3VyZSBpbnB1dA0Kc3RyZWFtIGludG8gd2hpY2gg
YSBDaXBoZXIgb2JqZWN0IGhhcyBiZWVuIGludGVycG9zZWQuIFRoZQ0KPGNv
ZGU+cmVhZDwvY29kZT4gbWV0aG9kcyBvZiBDaXBoZXJJbnB1dFN0cmVhbSBy
ZXR1cm4gZGF0YSB0aGF0IGFyZQ0KcmVhZCBmcm9tIHRoZSB1bmRlcmx5aW5n
IElucHV0U3RyZWFtIGJ1dCBoYXZlIGFkZGl0aW9uYWxseSBiZWVuDQpwcm9j
ZXNzZWQgYnkgdGhlIGVtYmVkZGVkIENpcGhlciBvYmplY3QuIFRoZSBDaXBo
ZXIgb2JqZWN0IG11c3QgYmUNCmZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBi
ZWluZyB1c2VkIGJ5IGEgQ2lwaGVySW5wdXRTdHJlYW0uDQoNCjxQPiBGb3Ig
ZXhhbXBsZSwgaWYgdGhlIGVtYmVkZGVkIENpcGhlciBoYXMgYmVlbiBpbml0
aWFsaXplZCBmb3INCmRlY3J5cHRpb24sIHRoZSBDaXBoZXJJbnB1dFN0cmVh
bSB3aWxsIGF0dGVtcHQgdG8gZGVjcnlwdCB0aGUgZGF0YSBpdA0KcmVhZHMg
ZnJvbSB0aGUgdW5kZXJseWluZyBJbnB1dFN0cmVhbSBiZWZvcmUgcmV0dXJu
aW5nIHRoZW0gdG8gdGhlDQphcHBsaWNhdGlvbi4NCg0KPFA+IFRoaXMgY2xh
c3MgYWRoZXJlcyBzdHJpY3RseSB0byB0aGUgc2VtYW50aWNzLCBlc3BlY2lh
bGx5IHRoZQ0KZmFpbHVyZSBzZW1hbnRpY3MsIG9mIGl0cyBhbmNlc3RvciBj
bGFzc2VzDQo8Y29kZT5qYXZhLmlvLkZpbHRlcklucHV0U3RyZWFtPC9jb2Rl
PiBhbmQNCjxjb2RlPmphdmEuaW8uSW5wdXRTdHJlYW08L2NvZGU+LiAgVGhp
cyBjbGFzcyBoYXMgZXhhY3RseSB0aG9zZQ0KbWV0aG9kcyBzcGVjaWZpZWQg
aW4gaXRzIGFuY2VzdG9yIGNsYXNzZXMsIGFuZCBvdmVycmlkZXMgdGhlbSBh
bGwsIHNvDQp0aGF0IHRoZSBkYXRhIGFyZSBhZGRpdG9uYWxseSBwcm9jZXNz
ZWQgYnkgdGhlIGVtYmVkZGVkIGNpcGhlci4NCk1vcmVvdmVyLCB0aGlzIGNs
YXNzIGNhdGNoZXMgYWxsIGV4Y2VwdGlvbnMgdGhhdCBhcmUgbm90IHRocm93
biBieSBpdHMNCmFuY2VzdG9yIGNsYXNzZXMuICBJbiBwYXJ0aWN1bGFyLCB0
aGUgPGNvZGU+c2tpcChsb25nKTwvY29kZT4gbWV0aG9kDQpza2lwcyBvbmx5
IGRhdGEgdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkIGJ5IHRoZSBDaXBoZXIu
DQoNCjxQPiBJdCBpcyBjcnVjaWFsIGZvciBhIHByb2dyYW1tZXIgdXNpbmcg
dGhpcyBjbGFzcyBub3QgdG8gdXNlIG1ldGhvZHMNCnRoYXQgYXJlIG5vdCBk
ZWZpbmVkIG9yIG92ZXJyaWRlbiBpbiB0aGlzIGNsYXNzIChzdWNoIGFzIGEg
bmV3IG1ldGhvZA0Kb3IgY29uc3RydWN0b3IgdGhhdCBpcyBsYXRlciBhZGRl
ZCB0byBvbmUgb2YgdGhlIHN1cGVyIGNsYXNzZXMpLA0KYmVjYXVzZSB0aGUg
ZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBtZXRob2RzIGFy
ZSB1bmxpa2VseSB0bw0KaGF2ZSBjb25zaWRlcmVkIHNlY3VyaXR5IGltcGFj
dCB3aXRoIHJlZ2FyZCB0byBDaXBoZXJJbnB1dFN0cmVhbS4NCg0KPFA+IEFz
IGFuIGV4YW1wbGUgb2YgaXRzIHVzYWdlLCBzdXBwb3NlIDxjb2RlPmNpcGhl
cjE8L2NvZGU+IGFuZA0KPGNvZGU+Y2lwaGVyMjwvY29kZT4gaGF2ZSBiZWVu
IGluaXRpYWxpemVkIGZvciBlbmNyeXB0aW9uIGFuZA0KZGVjcnlwdGlvbiAo
d2l0aCBjb3JyZXNwb25kaW5nIGtleXMpLCByZXNwZWN0aXZlbHkuIFRoZSBj
b2RlIGJlbG93DQpkZW1vbnN0cmF0ZXMgaG93IHRvIGVhc2lseSBjb25uZWN0
IHNldmVyYWwgaW5zdGFuY2VzIG9mDQpDaXBoZXJJbnB1dFN0cmVhbSBhbmQg
SW5wdXRTdHJlYW06DQoNCjxwcmU+DQogICAgRmlsZUlucHV0U3RyZWFtIGZp
cyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oIi90bXAvYS50eHQiKTsNCiAgICBD
aXBoZXJJbnB1dFN0cmVhbSBjaXMxID0gbmV3IENpcGhlcklucHV0U3RyZWFt
KGZpcywgY2lwaGVyMSk7DQogICAgQ2lwaGVySW5wdXRTdHJlYW0gY2lzMiA9
IG5ldyBDaXBoZXJJbnB1dFN0cmVhbShjaXMxLCBjaXBoZXIyKTsNCiAgICBG
aWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCIv
dG1wL2IudHh0Iik7DQogICAgYnl0ZVtdIGIgPSBuZXcgYnl0ZVs4XTsNCiAg
ICBpbnQgaSA9IGNpczIucmVhZChiKTsNCiAgICB3aGlsZSAoaSAhPSAtMSkg
ew0KICAgICAgICBmb3Mud3JpdGUoYiwgMCwgaSk7DQogICAgICAgIGkgPSBj
aXMyLnJlYWQoYik7DQogICAgfQ0KPC9wcmU+DQoNCjxQPiBUaGUgYWJvdmUg
cHJvZ3JhbSBjb3BpZXMgdGhlIGNvbnRlbnQgZnJvbSBmaWxlIC90bXAvYS50
eHQgdG8NCi90bXAvYi50eHQsIGV4Y2VwdCB0aGF0IHRoZSBjb250ZW50IGlz
IGZpcnN0IGVuY3J5cHRlZCBhbmQgdGhlbg0KZGVjcnlwdGVkIGJhY2sgd2hl
biBpdCBpcyByZWFkIGZyb20gL3RtcC9hLnR4dC4NCg0KPC9ibG9ja3F1b3Rl
Pg0KDQo8SDM+Q2lwaGVyT3V0cHV0U3RyZWFtPC9IMz4NCg0KPGJsb2NrcXVv
dGU+DQoNCjxQPiBUaGlzIGNsYXNzIGlzIGEgPGNvZGU+RmlsdGVyT3V0cHV0
U3RyZWFtPC9jb2RlPiB0aGF0IGVuY3J5cHRzIG9yDQpkZWNyeXB0cyB0aGUg
ZGF0YSBwYXNzaW5nIHRocm91Z2ggaXQuIEl0IGlzIGNvbXBvc2VkIG9mIGFu
DQo8Y29kZT5PdXRwdXRTdHJlYW08L2NvZGU+LCBvciBvbmUgb2YgaXRzIHN1
YmNsYXNzZXMsIGFuZCBhDQo8Y29kZT5DaXBoZXI8L2NvZGU+LiBDaXBoZXJP
dXRwdXRTdHJlYW0gcmVwcmVzZW50cyBhIHNlY3VyZSBvdXRwdXQNCnN0cmVh
bSBpbnRvIHdoaWNoIGEgQ2lwaGVyIG9iamVjdCBoYXMgYmVlbiBpbnRlcnBv
c2VkLiBUaGUNCjxjb2RlPndyaXRlPC9jb2RlPiBtZXRob2RzIG9mIENpcGhl
ck91dHB1dFN0cmVhbSBmaXJzdCBwcm9jZXNzIHRoZQ0KZGF0YSB3aXRoIHRo
ZSBlbWJlZGRlZCBDaXBoZXIgb2JqZWN0IGJlZm9yZSB3cml0aW5nIHRoZW0g
b3V0IHRvIHRoZQ0KdW5kZXJseWluZyBPdXRwdXRTdHJlYW0uIFRoZSBDaXBo
ZXIgb2JqZWN0IG11c3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQNCmJlZm9yZSBi
ZWluZyB1c2VkIGJ5IGEgQ2lwaGVyT3V0cHV0U3RyZWFtLg0KDQo8UD4gRm9y
IGV4YW1wbGUsIGlmIHRoZSBlbWJlZGRlZCBDaXBoZXIgaGFzIGJlZW4gaW5p
dGlhbGl6ZWQgZm9yDQplbmNyeXB0aW9uLCB0aGUgQ2lwaGVyT3V0cHV0U3Ry
ZWFtIHdpbGwgZW5jcnlwdCBpdHMgZGF0YSwgYmVmb3JlDQp3cml0aW5nIHRo
ZW0gb3V0IHRvIHRoZSB1bmRlcmx5aW5nIG91dHB1dCBzdHJlYW0uDQoNCjxQ
PiBUaGlzIGNsYXNzIGFkaGVyZXMgc3RyaWN0bHkgdG8gdGhlIHNlbWFudGlj
cywgZXNwZWNpYWxseSB0aGUNCmZhaWx1cmUgc2VtYW50aWNzLCBvZiBpdHMg
YW5jZXN0b3IgY2xhc3NlcyBqYXZhLmlvLk91dHB1dFN0cmVhbSBhbmQNCmph
dmEuaW8uRmlsdGVyT3V0cHV0U3RyZWFtLiAgVGhpcyBjbGFzcyBoYXMgZXhh
Y3RseSB0aG9zZSBtZXRob2RzDQpzcGVjaWZpZWQgaW4gaXRzIGFuY2VzdG9y
IGNsYXNzZXMsIGFuZCBvdmVycmlkZXMgdGhlbSBhbGwsIHNvIHRoYXQgYWxs
DQpkYXRhIGFyZSBhZGRpdGlvbmFsbHkgcHJvY2Vzc2VkIGJ5IHRoZSBlbWJl
ZGRlZCBjaXBoZXIuICBNb3Jlb3ZlciwNCnRoaXMgY2xhc3MgY2F0Y2hlcyBh
bGwgZXhjZXB0aW9ucyB0aGF0IGFyZSBub3QgdGhyb3duIGJ5IGl0cyBhbmNl
c3Rvcg0KY2xhc3Nlcy4NCg0KPFA+IEl0IGlzIGNydWNpYWwgZm9yIGEgcHJv
Z3JhbW1lciB1c2luZyB0aGlzIGNsYXNzIG5vdCB0byB1c2UgbWV0aG9kcw0K
dGhhdCBhcmUgbm90IGRlZmluZWQgb3Igb3ZlcnJpZGVuIGluIHRoaXMgY2xh
c3MgKHN1Y2ggYXMgYSBuZXcgbWV0aG9kDQpvciBjb25zdHJ1Y3RvciB0aGF0
IGlzIGxhdGVyIGFkZGVkIHRvIG9uZSBvZiB0aGUgc3VwZXIgY2xhc3Nlcyks
DQpiZWNhdXNlIHRoZSBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uIG9mIHRo
b3NlIG1ldGhvZHMgYXJlIHVubGlrZWx5IHRvDQpoYXZlIGNvbnNpZGVyZWQg
c2VjdXJpdHkgaW1wYWN0IHdpdGggcmVnYXJkIHRvIENpcGhlck91dHB1dFN0
cmVhbS4NCg0KPFA+IFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBkZW1vbnN0cmF0
ZXMgdGhlIHVzYWdlIG9mDQpDaXBoZXJPdXRwdXRTdHJlYW0sIHdoZXJlIHNl
dmVyYWwgaW5zdGFuY2VzIG9mIENpcGhlck91dHB1dFN0cmVhbSBhbmQNCk91
dHB1dFN0cmVhbSBhcmUgY29ubmVjdGVkLiBJdCBpcyBhc3N1bWVkIHRoYXQg
PGNvZGU+Y2lwaGVyMTwvY29kZT4NCmFuZCA8Y29kZT5jaXBoZXIyPC9jb2Rl
PiBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgZm9yIGRlY3J5cHRpb24gYW5kDQpl
bmNyeXB0aW9uICh3aXRoIGNvcnJlc3BvbmRpbmcga2V5cyksIHJlc3BlY3Rp
dmVseToNCg0KPHByZT4NCiAgICBGaWxlSW5wdXRTdHJlYW0gZmlzID0gbmV3
IEZpbGVJbnB1dFN0cmVhbSgiL3RtcC9hLnR4dCIpOw0KICAgIEZpbGVPdXRw
dXRTdHJlYW0gZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oIi90bXAvYi50
eHQiKTsNCiAgICBDaXBoZXJPdXRwdXRTdHJlYW0gY29zMSA9IG5ldyBDaXBo
ZXJPdXRwdXRTdHJlYW0oZm9zLCBjaXBoZXIxKTsNCiAgICBDaXBoZXJPdXRw
dXRTdHJlYW0gY29zMiA9IG5ldyBDaXBoZXJPdXRwdXRTdHJlYW0oY29zMSwg
Y2lwaGVyMik7DQogICAgYnl0ZVtdIGIgPSBuZXcgYnl0ZVs4XTsNCiAgICBp
bnQgaSA9IGZpcy5yZWFkKGIpOw0KICAgIHdoaWxlIChpICE9IC0xKSB7DQog
ICAgICAgIGNvczIud3JpdGUoYiwgMCwgaSk7DQogICAgICAgIGkgPSBmaXMu
cmVhZChiKTsNCiAgICB9DQogICAgY29zMi5mbHVzaCgpOw0KPC9wcmU+DQog
DQo8UD4gVGhlIGFib3ZlIHByb2dyYW0gY29waWVzIHRoZSBjb250ZW50IGZy
b20gZmlsZSAvdG1wL2EudHh0IHRvDQovdG1wL2IudHh0LCBleGNlcHQgdGhh
dCB0aGUgY29udGVudCBpcyBmaXJzdCBlbmNyeXB0ZWQgYW5kIHRoZW4NCmRl
Y3J5cHRlZCBiYWNrIGJlZm9yZSBpdCBpcyB3cml0dGVuIHRvIC90bXAvYi50
eHQuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQo8L2Js
b2NrcXVvdGU+DQoNCjwvYmxvY2txdW90ZT4NCg0KPExJPjxIMj5UaGUgS2V5
IEdlbmVyYXRvciBDbGFzczwvSDI+DQoNCjxibG9ja3F1b3RlPg0KDQo8UD4g
QSBrZXkgZ2VuZXJhdG9yIGlzIHVzZWQgdG8gZ2VuZXJhdGUgc2VjcmV0IGtl
eXMgZm9yIHN5bW1ldHJpYw0KYWxnb3JpdGhtcy4NCg0KPEg0PkNyZWF0aW5n
IGEgS2V5IEdlbmVyYXRvcjwvSDQ+DQoNCjxibG9ja3F1b3RlPg0KDQo8UD4g
TGlrZSBvdGhlciBlbmdpbmUgY2xhc3NlcyBpbiB0aGUgQVBJLCBLZXlHZW5l
cmF0b3Igb2JqZWN0cyBhcmUNCmNyZWF0ZWQgdXNpbmcgdGhlIDxjb2RlPmdl
dEluc3RhbmNlPC9jb2RlPiBmYWN0b3J5IG1ldGhvZHMgb2YgdGhlDQpLZXlH
ZW5lcmF0b3IgY2xhc3MuICBBIGZhY3RvcnkgbWV0aG9kIGlzIGEgc3RhdGlj
IG1ldGhvZCB0aGF0IHJldHVybnMNCmFuIGluc3RhbmNlIG9mIGEgY2xhc3Ms
IGluIHRoaXMgY2FzZSwgYW4gaW5zdGFuY2Ugb2YNCjxjb2RlPktleUdlbmVy
YXRvcjwvY29kZT4gd2hpY2ggcHJvdmlkZXMgYW4gaW1wbGVtZW50YXRpb24g
b2YgdGhlDQpyZXF1ZXN0ZWQga2V5IGdlbmVyYXRvci4NCg0KPFA+PGNvZGU+
Z2V0SW5zdGFuY2U8L2NvZGU+IHRha2VzIGFzIGl0cyBhcmd1bWVudCB0aGUg
bmFtZSBvZiBhDQpzeW1tZXRyaWMgYWxnb3JpdGhtIGZvciB3aGljaCBhIHNl
Y3JldCBrZXkgaXMgdG8gYmUNCmdlbmVyYXRlZC4gT3B0aW9uYWxseSwgYSBw
YWNrYWdlIHByb3ZpZGVyIG5hbWUgbWF5IGJlIHNwZWNpZmllZDoNCg0KPHBy
ZT4NCiAgICBwdWJsaWMgc3RhdGljIEtleUdlbmVyYXRvciBnZXRJbnN0YW5j
ZShTdHJpbmcgYWxnb3JpdGhtKTsNCg0KICAgIHB1YmxpYyBzdGF0aWMgS2V5
R2VuZXJhdG9yIGdldEluc3RhbmNlKFN0cmluZyBhbGdvcml0aG0sDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5n
IHByb3ZpZGVyKTsNCjwvcHJlPg0KDQo8UD4gSWYganVzdCBhbiBhbGdvcml0
aG0gbmFtZSBpcyBzcGVjaWZpZWQsIHRoZSBzeXN0ZW0gd2lsbCBkZXRlcm1p
bmUNCmlmIHRoZXJlIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSByZXF1
ZXN0ZWQga2V5IGdlbmVyYXRvciBhdmFpbGFibGUNCmluIHRoZSBlbnZpcm9u
bWVudCwgYW5kIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUsIGlmIHRoZXJl
IGlzIGENCnByZWZlcnJlZCBvbmUuDQoNCjxQPiBJZiBib3RoIGFuIGFsZ29y
aXRobSBuYW1lIGFuZCBhIHBhY2thZ2UgcHJvdmlkZXIgYXJlIHNwZWNpZmll
ZCwNCnRoZSBzeXN0ZW0gd2lsbCBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYW4g
aW1wbGVtZW50YXRpb24gb2YgdGhlDQpyZXF1ZXN0ZWQga2V5IGdlbmVyYXRv
ciBpbiB0aGUgcGFja2FnZSByZXF1ZXN0ZWQsIGFuZCB0aHJvdyBhbg0KZXhj
ZXB0aW9uIGlmIHRoZXJlIGlzIG5vdC4NCg0KPC9ibG9ja3F1b3RlPg0KDQo8
SDQ+SW5pdGlhbGl6aW5nIGEgS2V5R2VuZXJhdG9yIE9iamVjdDwvSDQ+DQoN
CjxibG9ja3F1b3RlPg0KDQo8UD4gQSBrZXkgZ2VuZXJhdG9yIGZvciBhIHBh
cnRpY3VsYXIgc3ltbWV0cmljLWtleSBhbGdvcml0aG0gY3JlYXRlcyBhDQpz
eW1tZXRyaWMga2V5IHRoYXQgY2FuIGJlIHVzZWQgd2l0aCB0aGF0IGFsZ29y
aXRobS4gSXQgYWxzbyBhc3NvY2lhdGVzDQphbGdvcml0aG0tc3BlY2lmaWMg
cGFyYW1ldGVycyAoaWYgYW55KSB3aXRoIHRoZSBnZW5lcmF0ZWQga2V5Lg0K
DQo8UD4gVGhlcmUgYXJlIHR3byB3YXlzIHRvIGdlbmVyYXRlIGEga2V5OiBp
biBhbiBhbGdvcml0aG0taW5kZXBlbmRlbnQNCm1hbm5lciwgYW5kIGluIGFu
IGFsZ29yaXRobS1zcGVjaWZpYyBtYW5uZXIuIFRoZSBvbmx5IGRpZmZlcmVu
Y2UNCmJldHdlZW4gdGhlIHR3byBpcyB0aGUgaW5pdGlhbGl6YXRpb24gb2Yg
dGhlIG9iamVjdDoNCjxQPg0KIA0KPFVMPg0KPGxpPjxiPkFsZ29yaXRobS1J
bmRlcGVuZGVudCBJbml0aWFsaXphdGlvbjwvYj4NCg0KPFA+IEFsbCBrZXkg
Z2VuZXJhdG9ycw0Kc2hhcmUgdGhlIGNvbmNlcHRzIG9mIGEgInN0cmVuZ3Ro
IiBhbmQgYSBzb3VyY2Ugb2YgcmFuZG9tbmVzcy4gVGhlDQptZWFzdXJlIG9m
IHN0cmVuZ3RoIGlzIHVuaXZlcnNhbGx5IHNoYXJlZCBieSBhbGwgYWxnb3Jp
dGhtcywgdGhvdWdoIGl0DQppcyBpbnRlcnByZXRlZCBkaWZmZXJlbnRseSBm
b3IgZGlmZmVyZW50IGFsZ29yaXRobXMuIFRoZXJlIGlzIGFuDQo8Y29kZT5p
bml0PC9jb2RlPiBtZXRob2QgdGhhdCB0YWtlcyB0aGVzZSB0d28gdW5pdmVy
c2FsbHkgc2hhcmVkIHR5cGVzDQpvZiBhcmd1bWVudHMuIFRoZXJlIGlzIGFs
c28gb25lIHRoYXQgdGFrZXMganVzdCBhDQo8Y29kZT5zdHJlbmd0aDwvY29k
ZT4gYXJndW1lbnQsIGFuZCB1c2VzIGEgc3lzdGVtLXByb3ZpZGVkIHNvdXJj
ZSBvZg0KcmFuZG9tbmVzcywgYW5kIG9uZSB0aGF0IHRha2VzIGp1c3QgYSBz
b3VyY2Ugb2YgcmFuZG9tbmVzczoNCg0KPHByZT4NCiAgICBwdWJsaWMgdm9p
ZCBpbml0KFNlY3VyZVJhbmRvbSByYW5kb20pOw0KDQogICAgcHVibGljIHZv
aWQgaW5pdChpbnQgc3RyZW5ndGgpOw0KDQogICAgcHVibGljIHZvaWQgaW5p
dChpbnQgc3RyZW5ndGgsIFNlY3VyZVJhbmRvbSByYW5kb20pOw0KPC9wcmU+
DQoNCjxQPiBTaW5jZSBubyBvdGhlciBwYXJhbWV0ZXJzIGFyZSBzcGVjaWZp
ZWQgd2hlbiB5b3UgY2FsbCB0aGUgYWJvdmUNCmFsZ29yaXRobS1pbmRlcGVu
ZGVudCA8Y29kZT5pbml0PC9jb2RlPiBtZXRob2RzLCBpdCBpcyB1cCB0byB0
aGUNCnByb3ZpZGVyIHdoYXQgdG8gZG8gYWJvdXQgdGhlIGFsZ29yaXRobS1z
cGVjaWZpYyBwYXJhbWV0ZXJzIChpZiBhbnkpDQp0byBiZSBhc3NvY2lhdGVk
IHdpdGggdGhlIGdlbmVyYXRlZCBrZXkuDQo8UD4NCg0KPGxpPjxiPkFsZ29y
aXRobS1TcGVjaWZpYyBJbml0aWFsaXphdGlvbjwvYj4NCg0KPFA+IEZvciBz
aXR1YXRpb25zIHdoZXJlDQphIHNldCBvZiBhbGdvcml0aG0tc3BlY2lmaWMg
cGFyYW1ldGVycyBhbHJlYWR5IGV4aXN0cywgdGhlcmUgYXJlIHR3bw0KPGNv
ZGU+aW5pdDwvY29kZT4gbWV0aG9kcyB0aGF0IGhhdmUgYW4NCjxjb2RlPkFs
Z29yaXRobVBhcmFtZXRlclNwZWM8L2NvZGU+IGFyZ3VtZW50LiBPbmUgYWxz
byBoYXMgYQ0KPGNvZGU+U2VjdXJlUmFuZG9tPC9jb2RlPiBhcmd1bWVudCwg
d2hpbGUgdGhlIHNvdXJjZSBvZiByYW5kb21uZXNzIGlzDQpzeXN0ZW0tcHJv
dmlkZWQgZm9yIHRoZSBvdGhlcjoNCg0KPHByZT4NCiAgICBwdWJsaWMgdm9p
ZCBpbml0KEFsZ29yaXRobVBhcmFtZXRlclNwZWMgcGFyYW1zKTsNCg0KICAg
IHB1YmxpYyB2b2lkIGluaXQoQWxnb3JpdGhtUGFyYW1ldGVyU3BlYyBwYXJh
bXMsDQogICAgICAgICAgICAgICAgICAgICBTZWN1cmVSYW5kb20gcmFuZG9t
KTsNCjwvcHJlPg0KDQo8L1VMPg0KDQo8UD4gSW4gY2FzZSB0aGUgY2xpZW50
IGRvZXMgbm90IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSB0aGUgS2V5R2VuZXJh
dG9yDQoodmlhIGEgY2FsbCB0byBhbiA8Y29kZT5pbml0PC9jb2RlPiBtZXRo
b2QpLCBlYWNoIHByb3ZpZGVyIG11c3Qgc3VwcGx5DQooYW5kIGRvY3VtZW50
KSBhIGRlZmF1bHQgaW5pdGlhbGl6YXRpb24uDQoNCjwvYmxvY2txdW90ZT4N
Cg0KPEg0PkNyZWF0aW5nIGEgS2V5PC9IND4NCg0KPGJsb2NrcXVvdGU+DQoN
ClRoZSBmb2xsb3dpbmcgbWV0aG9kIGdlbmVyYXRlcyBhIHNlY3JldCBrZXk6
DQoNCjxwcmU+DQogICAgcHVibGljIFNlY3JldEtleSBnZW5lcmF0ZUtleSgp
Ow0KPC9wcmU+DQoNCjwvYmxvY2txdW90ZT4NCg0KPC9ibG9ja3F1b3RlPg0K
DQo8TEk+PEgyPlRoZSBTZWNyZXRLZXlGYWN0b3J5IENsYXNzPC9IMj4NCg0K
PGJsb2NrcXVvdGU+DQoNCjxQPiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBm
YWN0b3J5IGZvciBzZWNyZXQga2V5cy4NCg0KPFA+IEtleSBmYWN0b3JpZXMg
YXJlIHVzZWQgdG8gY29udmVydCA8ST5rZXlzPC9JPiAob3BhcXVlDQpjcnlw
dG9ncmFwaGljIGtleXMgb2YgdHlwZSA8Y29kZT5qYXZhLnNlY3VyaXR5Lktl
eTwvY29kZT4pIGludG8gPEk+a2V5DQpzcGVjaWZpY2F0aW9uczwvST4gKHRy
YW5zcGFyZW50IHJlcHJlc2VudGF0aW9ucyBvZiB0aGUgdW5kZXJseWluZyBr
ZXkNCm1hdGVyaWFsIGluIGEgc3VpdGFibGUgZm9ybWF0KSwgYW5kIHZpY2Ug
dmVyc2EuDQoNCjxQPiBBIDxjb2RlPmphdmF4LmNyeXB0by5TZWNyZXRLZXlG
YWN0b3J5PC9jb2RlPiBvYmplY3Qgb3BlcmF0ZXMgb25seQ0Kb24gc2VjcmV0
IChzeW1tZXRyaWMpIGtleXMsIHdoZXJlYXMgYSA8Y29kZT5qYXZhLnNlY3Vy
aXR5LktleUZhY3Rvcnk8L2NvZGU+DQpvYmplY3QgcHJvY2Vzc2VzIHRoZSBw
dWJsaWMgYW5kIHByaXZhdGUga2V5IGNvbXBvbmVudHMgb2YgYSBrZXkgcGFp
ci4NCg0KPFA+IE9iamVjdHMgb2YgdHlwZSA8Y29kZT5qYXZhLnNlY3VyaXR5
LktleTwvY29kZT4sIG9mIHdoaWNoDQo8Y29kZT5qYXZhLnNlY3VyaXR5LlB1
YmxpY0tleTwvY29kZT4sDQo8Y29kZT5qYXZhLnNlY3VyaXR5LlByaXZhdGVL
ZXk8L2NvZGU+LCBhbmQNCjxjb2RlPmphdmF4LmNyeXB0by5TZWNyZXRLZXk8
L2NvZGU+IGFyZSBzdWJjbGFzc2VzLCBhcmUgb3BhcXVlIGtleQ0Kb2JqZWN0
cywgYmVjYXVzZSB5b3UgY2Fubm90IHRlbGwgaG93IHRoZXkgYXJlIGltcGxl
bWVudGVkLiAgVGhlDQp1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIGlzIHBy
b3ZpZGVyLWRlcGVuZGVudCwgYW5kIG1heSBiZSBzb2Z0d2FyZQ0Kb3IgaGFy
ZHdhcmUgYmFzZWQuIEtleSBmYWN0b3JpZXMgYWxsb3cgcHJvdmlkZXJzIHRv
IHN1cHBseSB0aGVpciBvd24NCmltcGxlbWVudGF0aW9ucyBvZiBjcnlwdG9n
cmFwaGljIGtleXMuDQoNCjxQPiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUg
YSBrZXkgc3BlY2lmaWNhdGlvbiBmb3IgYSBEaWZmaWUgSGVsbG1hbg0KcHVi
bGljIGtleSwgY29uc2lzdGluZyBvZiB0aGUgcHVibGljIHZhbHVlIDxjb2Rl
Pnk8L2NvZGU+LCB0aGUgcHJpbWUNCm1vZHVsdXMgPGNvZGU+cDwvY29kZT4s
IGFuZCB0aGUgYmFzZSA8Y29kZT5nPC9jb2RlPiwgYW5kIHlvdSBmZWVkIHRo
ZQ0Kc2FtZSBzcGVjaWZpY2F0aW9uIHRvIERpZmZpZS1IZWxsbWFuIGtleSBm
YWN0b3JpZXMgZnJvbSBkaWZmZXJlbnQNCnByb3ZpZGVycywgdGhlIHJlc3Vs
dGluZyA8Y29kZT5QdWJsaWNLZXk8L2NvZGU+IG9iamVjdHMgd2lsbCBtb3N0
DQpsaWtlbHkgaGF2ZSBkaWZmZXJlbnQgdW5kZXJseWluZyBpbXBsZW1lbnRh
dGlvbnMuDQoNCjxQPiBBIHByb3ZpZGVyIHNob3VsZCBkb2N1bWVudCB0aGUg
a2V5IHNwZWNpZmljYXRpb25zIHN1cHBvcnRlZCBieSBpdHMNCnNlY3JldCBr
ZXkgZmFjdG9yeS4gRm9yIGV4YW1wbGUsIHRoZSA8Y29kZT5TZWNyZXRLZXlG
YWN0b3J5PC9jb2RlPiBmb3INCkRFUyBrZXlzIHN1cHBsaWVkIGJ5IHRoZSBT
dW5KQ0UgcHJvdmlkZXIgc3VwcG9ydHMgPGNvZGU+REVTS2V5U3BlYzwvY29k
ZT4NCmFzIGEgdHJhbnNwYXJlbnQgcmVwcmVzZW50YXRpb24gb2YgREVTIGtl
eXMsIHRoZQ0KPGNvZGU+U2VjcmV0S2V5RmFjdG9yeTwvY29kZT4gZm9yIERF
Uy1FREUga2V5cyBzdXBwb3J0cw0KPGNvZGU+REVTZWRlS2V5U3BlYzwvY29k
ZT4gYXMgYSB0cmFuc3BhcmVudCByZXByZXNlbnRhdGlvbiBvZiBERVMtRURF
DQprZXlzLCBhbmQgdGhlIDxjb2RlPlNlY3JldEtleUZhY3Rvcnk8L2NvZGU+
IGZvciBQQkUgc3VwcG9ydHMNCjxjb2RlPlBCRUtleVNwZWM8L2NvZGU+IGFz
IGEgdHJhbnNwYXJlbnQgcmVwcmVzZW50YXRpb24gb2YgdGhlDQp1bmRlcmx5
aW5nIHBhc3N3b3JkLg0KDQo8UD5UaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1w
bGUgb2YgaG93IHRvIHVzZSBhDQo8Y29kZT5TZWNyZXRLZXlGYWN0b3J5PC9j
b2RlPiB0byBjb252ZXJ0IHNlY3JldCBrZXkgZGF0YSBpbnRvIGENCjxjb2Rl
PlNlY3JldEtleTwvY29kZT4gb2JqZWN0LCB3aGljaCBjYW4gYmUgdXNlZCBm
b3IgYSBzdWJzZXF1ZW50DQo8Y29kZT5DaXBoZXI8L2NvZGU+IG9wZXJhdGlv
bjoNCg0KPHByZT4NCiAgICBieXRlW10gZGVzS2V5RGF0YSA9IHsgKGJ5dGUp
MHgwMSwgKGJ5dGUpMHgwMiwgLi4ufTsNCiAgICBERVNLZXlTcGVjIGRlc0tl
eVNwZWMgPSBuZXcgREVTS2V5U3BlYyhkZXNLZXlEYXRhKTsNCiAgICBTZWNy
ZXRLZXlGYWN0b3J5IGtleUZhY3RvcnkgPSBTZWNyZXRLZXlGYWN0b3J5Lmdl
dEluc3RhbmNlKCJERVMiKTsNCiAgICBTZWNyZXRLZXkgc2VjcmV0S2V5ID0g
a2V5RmFjdG9yeS5nZW5lcmF0ZVNlY3JldChkZXNLZXlTcGVjKTsNCjwvcHJl
Pg0KDQo8UD4gSW4gdGhpcyBjYXNlLCB0aGUgdW5kZXJseWluZyBpbXBsZW1l
bnRhdGlvbiBvZiA8Y29kZT5zZWNyZXRLZXk8L2NvZGU+IGlzIGJhc2VkIG9u
IHRoZSBwcm92aWRlciBvZiA8Y29kZT5rZXlGYWN0b3J5PC9jb2RlPi4NCg0K
PFA+IEFuIGFsdGVybmF0aXZlLCBwcm92aWRlci1pbmRlcGVuZGVudCB3YXkg
b2YgY3JlYXRpbmcgYQ0KZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgPGNvZGU+
U2VjcmV0S2V5PC9jb2RlPiBvYmplY3QgZnJvbSB0aGUgc2FtZQ0Ka2V5IG1h
dGVyaWFsIGlzIHRvIHVzZSB0aGUgPGNvZGU+U2VjcmV0S2V5U3BlYzwvY29k
ZT4gY2xhc3MsIHdoaWNoDQppbXBsZW1lbnRzIHRoZSA8Y29kZT5qYXZheC5j
cnlwdG8uU2VjcmV0S2V5PC9jb2RlPiBpbnRlcmZhY2U6DQoNCjxwcmU+DQog
ICAgYnl0ZVtdIGRlc0tleURhdGEgPSB7IChieXRlKTB4MDEsIChieXRlKTB4
MDIsIC4uLn07DQogICAgU2VjcmV0S2V5U3BlYyBzZWNyZXRLZXkgPSBuZXcg
U2VjcmV0S2V5U3BlYyhkZXNLZXlEYXRhLCAiREVTIik7DQo8L3ByZT4NCg0K
PC9ibG9ja3F1b3RlPg0KDQo8TEk+PEgyPlRoZSBTZWFsZWRPYmplY3QgQ2xh
c3M8L0gyPg0KDQo8YmxvY2txdW90ZT4NCg0KPFA+IFRoaXMgY2xhc3MgZW5h
YmxlcyBhIHByb2dyYW1tZXIgdG8gY3JlYXRlIGFuIG9iamVjdCBhbmQgcHJv
dGVjdA0KaXRzIGNvbmZpZGVudGlhbGl0eSB3aXRoIGEgY3J5cHRvZ3JhcGhp
YyBhbGdvcml0aG0uDQoNCjxQPiBHaXZlbiBhbnkgU2VyaWFsaXphYmxlIG9i
amVjdCwgb25lIGNhbiBjcmVhdGUgYSBTZWFsZWRPYmplY3QgdGhhdA0KZW5j
YXBzdWxhdGVzIHRoZSBvcmlnaW5hbCBvYmplY3QsIGluIHNlcmlhbGl6ZWQg
Zm9ybWF0IChpLmUuLCBhICJkZWVwDQpjb3B5IiksIGFuZCBzZWFscyAoZW5j
cnlwdHMpIGl0cyBzZXJpYWxpemVkIGNvbnRlbnRzLCB1c2luZyBhDQpjcnlw
dG9ncmFwaGljIGFsZ29yaXRobSBzdWNoIGFzIERFUywgdG8gcHJvdGVjdCBp
dHMgY29uZmlkZW50aWFsaXR5Lg0KVGhlIGVuY3J5cHRlZCBjb250ZW50IGNh
biBsYXRlciBiZSBkZWNyeXB0ZWQgKHdpdGggdGhlIGNvcnJlc3BvbmRpbmcN
CmFsZ29yaXRobSB1c2luZyB0aGUgY29ycmVjdCBkZWNyeXB0aW9uIGtleSkg
YW5kIGRlLXNlcmlhbGl6ZWQsDQp5aWVsZGluZyB0aGUgb3JpZ2luYWwgb2Jq
ZWN0Lg0KDQo8UD4gQSB0eXBpY2FsIHVzYWdlIGlzIGlsbHVzdHJhdGVkIGlu
IHRoZSBmb2xsb3dpbmcgY29kZSBzZWdtZW50LiBUaGlzDQpleGFtcGxlIGFz
c3VtZXMgdGhhdCA8Y29kZT5jaXBoZXI8L2NvZGU+IGlzIGEgQ2lwaGVyIG9i
amVjdCBmb3IgREVTDQphbmQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgZm9yIGVu
Y3J5cHRpb24gdXNpbmcgdGhlIERFUyBrZXkNCjxjb2RlPmRlc0tleTwvY29k
ZT46DQoNCjxwcmU+DQogICAgLy8gY3JlYXRlIFNlYWxlZE9iamVjdA0KICAg
IFNlYWxlZE9iamVjdCBzbyA9IG5ldyBTZWFsZWRPYmplY3QoIlRoaXMgaXMg
c2VjcmV0IiwgY2lwaGVyKTsNCg0KICAgIC4uLg0KDQogICAgLy8gcmV0cmll
dmUgdGhlIG9yaWdpbmFsIG9iamVjdA0KICAgIGNpcGhlci5pbml0KENpcGhl
ci5ERUNSWVBUX01PREUsIGRlc0tleSk7DQogICAgdHJ5IHsNCiAgICAgICAg
U3RyaW5nIHMgPSAoU3RyaW5nKXNvLmdldE9iamVjdChjaXBoZXIpOw0KICAg
IH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fTsNCjwvcHJlPg0KDQo8UD4gTm90
ZSB0aGF0IHRoZSBDaXBoZXIgb2JqZWN0IG11c3QgYmUgZnVsbHkgaW5pdGlh
bGl6ZWQgd2l0aCB0aGUNCmNvcnJlY3QgYWxnb3JpdGhtLCBrZXksIHBhZGRp
bmcgc2NoZW1lLCBldGMuLCBiZWZvcmUgYmVpbmcgYXBwbGllZCB0bw0KYSBT
ZWFsZWRPYmplY3QuDQoNCjwvYmxvY2txdW90ZT4NCg0KPExJPjxIMj5UaGUg
S2V5QWdyZWVtZW50IENsYXNzPC9IMj4NCg0KPGJsb2NrcXVvdGU+DQoNCjxQ
PiBUaGUgS2V5QWdyZWVtZW50IGNsYXNzIHByb3ZpZGVzIHRoZSBmdW5jdGlv
bmFsaXR5IG9mIGEga2V5DQphZ3JlZW1lbnQgcHJvdG9jb2wuIFRoZSBrZXlz
IGludm9sdmVkIGluIGVzdGFibGlzaGluZyBhIHNoYXJlZCBzZWNyZXQNCmFy
ZSBjcmVhdGVkIGJ5IG9uZSBvZiB0aGUga2V5IGdlbmVyYXRvcnMNCig8Y29k
ZT5LZXlQYWlyR2VuZXJhdG9yPC9jb2RlPiBvciA8Y29kZT5LZXlHZW5lcmF0
b3I8L2NvZGU+KSwgYQ0KPGNvZGU+S2V5RmFjdG9yeTwvY29kZT4sIG9yIGFz
IGEgcmVzdWx0IGZyb20gYW4gaW50ZXJtZWRpYXRlIHBoYXNlIG9mDQp0aGUg
a2V5IGFncmVlbWVudCBwcm90b2NvbC4NCg0KPEg0PkNyZWF0aW5nIGEgS2V5
QWdyZWVtZW50IE9iamVjdDwvSDQ+DQoNCjxibG9ja3F1b3RlPg0KDQo8UD4g
RWFjaCBwYXJ0eSBpbnZvbHZlZCBpbiB0aGUga2V5IGFncmVlbWVudCBoYXMg
dG8gY3JlYXRlIGENCktleUFncmVlbWVudCBvYmplY3QuIExpa2Ugb3RoZXIg
ZW5naW5lIGNsYXNzZXMgaW4gdGhlIEFQSSwNCktleUFncmVlbWVudCBvYmpl
Y3RzIGFyZSBjcmVhdGVkIHVzaW5nIHRoZSA8Y29kZT5nZXRJbnN0YW5jZTwv
Y29kZT4NCmZhY3RvcnkgbWV0aG9kcyBvZiB0aGUgS2V5QWdyZWVtZW50IGNs
YXNzLiAgQSBmYWN0b3J5IG1ldGhvZCBpcyBhDQpzdGF0aWMgbWV0aG9kIHRo
YXQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzLCBpbiB0aGlzIGNh
c2UsIGFuDQppbnN0YW5jZSBvZiA8Y29kZT5LZXlBZ3JlZW1lbnQ8L2NvZGU+
IHdoaWNoIHByb3ZpZGVzIHRoZSByZXF1ZXN0ZWQga2V5DQphZ3JlZW1lbnQg
YWxnb3JpdGhtLg0KDQo8UD48Y29kZT5nZXRJbnN0YW5jZTwvY29kZT4gdGFr
ZXMgYXMgaXRzIGFyZ3VtZW50IHRoZSBuYW1lIG9mIGEga2V5DQphZ3JlZW1l
bnQgYWxnb3JpdGhtLiBPcHRpb25hbGx5LCBhIHBhY2thZ2UgcHJvdmlkZXIg
bmFtZSBtYXkgYmUNCnNwZWNpZmllZDoNCg0KPHByZT4NCiAgICBwdWJsaWMg
c3RhdGljIEtleUFncmVlbWVudCBnZXRJbnN0YW5jZShTdHJpbmcgYWxnb3Jp
dGhtKTsNCg0KICAgIHB1YmxpYyBzdGF0aWMgS2V5QWdyZWVtZW50IGdldElu
c3RhbmNlKFN0cmluZyBhbGdvcml0aG0sDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHByb3ZpZGVyKTsNCjwv
cHJlPg0KDQo8UD4gSWYganVzdCBhbiBhbGdvcml0aG0gbmFtZSBpcyBzcGVj
aWZpZWQsIHRoZSBzeXN0ZW0gd2lsbCBkZXRlcm1pbmUNCmlmIHRoZXJlIGlz
IGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSByZXF1ZXN0ZWQga2V5IGFncmVl
bWVudCBhdmFpbGFibGUNCmluIHRoZSBlbnZpcm9ubWVudCwgYW5kIGlmIHRo
ZXJlIGlzIG1vcmUgdGhhbiBvbmUsIGlmIHRoZXJlIGlzIGENCnByZWZlcnJl
ZCBvbmUuDQoNCjxQPiBJZiBib3RoIGFuIGFsZ29yaXRobSBuYW1lIGFuZCBh
IHBhY2thZ2UgcHJvdmlkZXIgYXJlIHNwZWNpZmllZCwNCnRoZSBzeXN0ZW0g
d2lsbCBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYW4gaW1wbGVtZW50YXRpb24g
b2YgdGhlDQpyZXF1ZXN0ZWQga2V5IGFncmVlbWVudCBpbiB0aGUgcGFja2Fn
ZSByZXF1ZXN0ZWQsIGFuZCB0aHJvdyBhbg0KZXhjZXB0aW9uIGlmIHRoZXJl
IGlzIG5vdC4NCg0KPC9ibG9ja3F1b3RlPg0KDQo8SDQ+SW5pdGlhbGl6aW5n
IGEgS2V5QWdyZWVtZW50IE9iamVjdDwvSDQ+DQoNCjxibG9ja3F1b3RlPg0K
DQo8UD4gWW91IGluaXRpYWxpemUgYSBLZXlBZ3JlZW1lbnQgb2JqZWN0IHdp
dGggeW91ciBwcml2YXRlDQppbmZvcm1hdGlvbi4gSW4gdGhlIGNhc2Ugb2Yg
RGlmZmllLUhlbGxtYW4sIHlvdSBpbml0aWFsaXplIGl0IHdpdGgNCnlvdXIg
RGlmZmllLUhlbGxtYW4gcHJpdmF0ZSBrZXkuIEFkZGl0aW9uYWwgaW5pdGlh
bGl6YXRpb24gaW5mb3JtYXRpb24NCm1heSBjb250YWluIGEgc291cmNlIG9m
IHJhbmRvbW5lc3MgYW5kL29yIGEgc2V0IG9mIGFsZ29yaXRobQ0KcGFyYW1l
dGVycy4gTm90ZSB0aGF0IGlmIHRoZSByZXF1ZXN0ZWQga2V5IGFncmVlbWVu
dCBhbGdvcml0aG0NCnJlcXVpcmVzIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGFs
Z29yaXRobSBwYXJhbWV0ZXJzLCBhbmQgb25seSBhIGtleSwNCmJ1dCBubyBw
YXJhbWV0ZXJzIGFyZSBwcm92aWRlZCB0byBpbml0aWFsaXplIHRoZSBLZXlB
Z3JlZW1lbnQgb2JqZWN0LA0KdGhlIGtleSBtdXN0IGNvbnRhaW4gdGhlIHJl
cXVpcmVkIGFsZ29yaXRobSBwYXJhbWV0ZXJzLiAoRm9yIGV4YW1wbGUsDQp0
aGUgRGlmZmllLUhlbGxtYW4gYWxnb3JpdGhtIHVzZXMgYSBwcmltZSBtb2R1
bHVzIDxjb2RlPnA8L2NvZGU+IGFuZCBhDQpiYXNlIGdlbmVyYXRvciA8Y29k
ZT5nPC9jb2RlPiBhcyBpdHMgcGFyYW1ldGVycy4pDQoNCjxQPiBUbyBpbml0
aWFsaXplIGEgQ2lwaGVyIG9iamVjdCwgY2FsbCBvbmUgb2YgdGhlIDxjb2Rl
PmluaXQ8L2NvZGU+DQptZXRob2RzOg0KDQo8cHJlPg0KICAgIHB1YmxpYyB2
b2lkIGluaXQoS2V5IGtleSk7DQoNCiAgICBwdWJsaWMgdm9pZCBpbml0KEtl
eSBrZXksIFNlY3VyZVJhbmRvbSByYW5kb20pOw0KDQogICAgcHVibGljIHZv
aWQgaW5pdChLZXkga2V5LCBBbGdvcml0aG1QYXJhbWV0ZXJTcGVjIHBhcmFt
cyk7DQoNCiAgICBwdWJsaWMgdm9pZCBpbml0KEtleSBrZXksIEFsZ29yaXRo
bVBhcmFtZXRlclNwZWMgcGFyYW1zLA0KICAgICAgICAgICAgICAgICAgICAg
U2VjdXJlUmFuZG9tIHJhbmRvbSk7DQo8L3ByZT4NCg0KPC9ibG9ja3F1b3Rl
Pg0KDQo8SDQ+RXhlY3V0aW5nIGEgS2V5QWdyZWVtZW50IFBoYXNlPC9IND4N
Cg0KPGJsb2NrcXVvdGU+DQoNCjxQPiBFdmVyeSBrZXkgYWdyZWVtZW50IHBy
b3RvY29sIGNvbnNpc3RzIG9mIGEgbnVtYmVyIG9mIHBoYXNlcyB0aGF0DQpu
ZWVkIHRvIGJlIGV4ZWN1dGVkIGJ5IGVhY2ggcGFydHkgaW52b2x2ZWQgaW4g
dGhlIGtleSBhZ3JlZW1lbnQuDQoNCjxQPiBUbyBleGVjdXRlIHRoZSBuZXh0
IHBoYXNlIGluIHRoZSBrZXkgYWdyZWVtZW50LCBjYWxsIHRoZQ0KPGNvZGU+
ZG9QaGFzZTwvY29kZT4gbWV0aG9kOg0KDQo8cHJlPg0KICAgIHB1YmxpYyBL
ZXkgZG9QaGFzZShLZXkga2V5LCBib29sZWFuIGxhc3RQaGFzZSk7DQo8L3By
ZT4NCg0KPFA+IFRoZSA8Y29kZT5rZXk8L2NvZGU+IHBhcmFtZXRlciBjb250
YWlucyB0aGUga2V5IHRvIGJlIHByb2Nlc3NlZCBieQ0KdGhhdCBwaGFzZS4g
SW4gbW9zdCBjYXNlcywgdGhpcyBpcyB0aGUgcHVibGljIGtleSBvZiBvbmUg
b2YgdGhlIG90aGVyDQpwYXJ0aWVzIGludm9sdmVkIGluIHRoZSBrZXkgYWdy
ZWVtZW50LCBvciBhbiBpbnRlcm1lZGlhdGUga2V5IHRoYXQgd2FzDQpnZW5l
cmF0ZWQgYnkgYSBwcmV2aW91cyBwaGFzZS4gPGNvZGU+ZG9QaGFzZTwvY29k
ZT4gbWF5IHJldHVybiBhbg0KaW50ZXJtZWRpYXRlIGtleSB0aGF0IHlvdSBt
YXkgaGF2ZSB0byBzZW5kIHRvIHRoZSBvdGhlciBwYXJ0aWVzIG9mDQp0aGlz
IGtleSBhZ3JlZW1lbnQsIHNvIHRoZXkgY2FuIHByb2Nlc3MgaXQgaW4gYSBz
dWJzZXF1ZW50IHBoYXNlLg0KDQo8UD4gVGhlIDxjb2RlPmxhc3RQaGFzZTwv
Y29kZT4gcGFyYW1ldGVyIHNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0aGUg
cGhhc2UgdG8NCmJlIGV4ZWN1dGVkIGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUg
a2V5IGFncmVlZW1lbnQ6IEEgdmFsdWUgb2YNCjxjb2RlPkZBTFNFPC9jb2Rl
PiBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIG5vdCB0aGUgbGFzdCBwaGFzZSBv
ZiB0aGUNCmtleSBhZ3JlZW1lbnQgKHRoZXJlIGFyZSBtb3JlIHBoYXNlcyB0
byBmb2xsb3cpLCBhbmQgYSB2YWx1ZSBvZg0KPGNvZGU+VFJVRTwvY29kZT4g
aW5kaWNhdGVzIHRoYXQgdGhpcyBpcyB0aGUgbGFzdCBwaGFzZSBvZiB0aGUg
a2V5DQphZ3JlZW1lbnQgYW5kIHRoZSBrZXkgYWdyZWVtZW50IGlzIGNvbXBs
ZXRlZCwgaS5lLiwNCjxjb2RlPmdlbmVyYXRlU2VjcmV0PC9jb2RlPiBjYW4g
YmUgY2FsbGVkIG5leHQuDQoNCjxQPiBJbiB0aGUgZXhhbXBsZSBvZiBEaWZm
aWUtSGVsbG1hbiBiZXR3ZWVuIHR3byBwYXJ0aWVzIChzZWUNCjxhIGhyZWY9
IiNBcHBCIj5BcHBlbmRpeCBCPC9hPiksIHlvdSBjYWxsDQo8Y29kZT5kb1Bo
YXNlPC9jb2RlPiBvbmNlLCB3aXRoIDxjb2RlPmxhc3RQaGFzZTwvY29kZT4N
CnNldCB0byA8Y29kZT5UUlVFPC9jb2RlPi4gSW4gdGhlIGV4YW1wbGUgb2Yg
RGlmZmllLUhlbGxtYW4gYmV0d2VlbiB0aHJlZQ0KcGFydGllcywgeW91IGNh
bGwgPGNvZGU+ZG9QaGFzZTwvY29kZT4gdHdpY2U6IHRoZSBmaXJzdCB0aW1l
IHdpdGgNCjxjb2RlPmxhc3RQaGFzZTwvY29kZT4gc2V0IHRvIDxjb2RlPkZB
TFNFPC9jb2RlPiwgdGhlIDJuZCB0aW1lIHdpdGgNCjxjb2RlPmxhc3RQaGFz
ZTwvY29kZT4gc2V0IHRvIDxjb2RlPlRSVUU8L2NvZGU+Lg0KDQo8L2Jsb2Nr
cXVvdGU+DQoNCjxIND5HZW5lcmF0aW5nIHRoZSBTaGFyZWQgU2VjcmV0PC9I
ND4NCg0KPGJsb2NrcXVvdGU+DQoNCjxQPiBBZnRlciBlYWNoIHBhcnR5IGhh
cyBleGVjdXRlZCBhbGwgdGhlIHJlcXVpcmVkIGtleSBhZ3JlZW1lbnQNCnBo
YXNlcywgaXQgY2FuIGNvbXB1dGUgdGhlIHNoYXJlZCBzZWNyZXQgYnkgY2Fs
bGluZyBvbmUgb2YgdGhlDQo8Y29kZT5nZW5lcmF0ZVNlY3JldDwvY29kZT4g
bWV0aG9kczoNCg0KPHByZT4NCiAgICBwdWJsaWMgYnl0ZVtdIGdlbmVyYXRl
U2VjcmV0KCk7DQoNCiAgICBwdWJsaWMgaW50IGdlbmVyYXRlU2VjcmV0KGJ5
dGVbXSBzaGFyZWRTZWNyZXQsIGludCBvZmZzZXQpOw0KDQogICAgcHVibGlj
IFNlY3JldEtleSBnZW5lcmF0ZVNlY3JldChTdHJpbmcgYWxnb3JpdGhtKTsN
CjwvcHJlPg0KDQo8L2Jsb2NrcXVvdGU+DQoNCjwvYmxvY2txdW90ZT4NCg0K
PExJPjxIMj5UaGUgTWFjIENsYXNzPC9IMj4NCg0KPGJsb2NrcXVvdGU+DQoN
CjxQPiBUaGUgTWFjIGNsYXNzIHByb3ZpZGVzIHRoZSBmdW5jdGlvbmFsaXR5
IG9mIGEgTWVzc2FnZQ0KQXV0aGVudGljYXRpb24gQ29kZSAoTUFDKS4NCg0K
PEg0PkNyZWF0aW5nIGEgTWFjIE9iamVjdDwvSDQ+DQoNCjxibG9ja3F1b3Rl
Pg0KDQo8UD4gTGlrZSBvdGhlciBlbmdpbmUgY2xhc3NlcyBpbiB0aGUgQVBJ
LA0KTWFjIG9iamVjdHMgYXJlIGNyZWF0ZWQgdXNpbmcgdGhlIDxjb2RlPmdl
dEluc3RhbmNlPC9jb2RlPg0KZmFjdG9yeSBtZXRob2RzIG9mIHRoZSBNYWMg
Y2xhc3MuICBBIGZhY3RvcnkgbWV0aG9kIGlzIGENCnN0YXRpYyBtZXRob2Qg
dGhhdCByZXR1cm5zIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MsIGluIHRoaXMg
Y2FzZSwgYW4NCmluc3RhbmNlIG9mIDxjb2RlPk1hYzwvY29kZT4gd2hpY2gg
cHJvdmlkZXMgdGhlIHJlcXVlc3RlZCBNQUMNCmFsZ29yaXRobS4NCg0KPFA+
PGNvZGU+Z2V0SW5zdGFuY2U8L2NvZGU+IHRha2VzIGFzIGl0cyBhcmd1bWVu
dCB0aGUgbmFtZSBvZiBhIE1BQw0KYWxnb3JpdGhtLiBPcHRpb25hbGx5LCBh
IHBhY2thZ2UgcHJvdmlkZXIgbmFtZSBtYXkgYmUgc3BlY2lmaWVkOg0KDQo8
cHJlPg0KICAgIHB1YmxpYyBzdGF0aWMgTWFjIGdldEluc3RhbmNlKFN0cmlu
ZyBhbGdvcml0aG0pOw0KDQogICAgcHVibGljIHN0YXRpYyBNYWMgZ2V0SW5z
dGFuY2UoU3RyaW5nIGFsZ29yaXRobSwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTdHJpbmcgcHJvdmlkZXIpOw0KPC9wcmU+DQoNCjxQ
PiBJZiBqdXN0IGFuIGFsZ29yaXRobSBuYW1lIGlzIHNwZWNpZmllZCwgdGhl
IHN5c3RlbSB3aWxsIGRldGVybWluZQ0KaWYgdGhlcmUgaXMgYW4gaW1wbGVt
ZW50YXRpb24gb2YgdGhlIHJlcXVlc3RlZCBNQUMgYWxnb3JpdGhtIGF2YWls
YWJsZQ0KaW4gdGhlIGVudmlyb25tZW50LCBhbmQgaWYgdGhlcmUgaXMgbW9y
ZSB0aGFuIG9uZSwgaWYgdGhlcmUgaXMgYQ0KcHJlZmVycmVkIG9uZS4NCg0K
PFA+IElmIGJvdGggYW4gYWxnb3JpdGhtIG5hbWUgYW5kIGEgcGFja2FnZSBw
cm92aWRlciBhcmUgc3BlY2lmaWVkLA0KdGhlIHN5c3RlbSB3aWxsIGRldGVy
bWluZSBpZiB0aGVyZSBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUNCnJl
cXVlc3RlZCBNQUMgYWxnb3JpdGhtIGluIHRoZSBwYWNrYWdlIHJlcXVlc3Rl
ZCwgYW5kIHRocm93IGFuDQpleGNlcHRpb24gaWYgdGhlcmUgaXMgbm90Lg0K
DQo8L2Jsb2NrcXVvdGU+DQoNCjxIND5Jbml0aWFsaXppbmcgYSBNYWMgT2Jq
ZWN0PC9IND4NCg0KPGJsb2NrcXVvdGU+DQoNCjxQPiBBIE1hYyBvYmplY3Qg
aXMgYWx3YXlzIGluaXRpYWxpemVkIHdpdGggYSBzZWNyZXQga2V5LCB3aGlj
aCBtYXkNCmJlIHRoZSByZXN1bHQgb2YgYSBrZXkgYWdyZWVtZW50IHByb3Rv
Y29sLCBhbmQgbWF5IGFsc28gYmUgaW5pdGlhbGl6ZWQNCndpdGggYSBzZXQg
b2YgcGFyYW1ldGVycywgaWYgdGhpcyBpcyByZXF1aXJlZCBieSB0aGUgcmVx
dWVzdGVkIE1BQw0KYWxnb3JpdGhtLg0KDQo8UD4gVG8gaW5pdGlhbGl6ZSBh
IE1hYyBvYmplY3QsIGNhbGwgb25lIG9mIHRoZSA8Y29kZT5pbml0PC9jb2Rl
Pg0KbWV0aG9kczoNCg0KPHByZT4NCiAgICBwdWJsaWMgdm9pZCBpbml0KEtl
eSBrZXkpOw0KDQogICAgcHVibGljIHZvaWQgaW5pdChLZXkga2V5LCBBbGdv
cml0aG1QYXJhbWV0ZXJTcGVjIHBhcmFtcyk7DQo8L3ByZT4NCg0KPC9ibG9j
a3F1b3RlPg0KDQo8SDQ+Q29tcHV0aW5nIGEgTUFDPC9IND4NCg0KPGJsb2Nr
cXVvdGU+DQoNCjxQPiBBIE1BQyBjYW4gYmUgY29tcHV0ZWQgaW4gb25lIHN0
ZXAgKDxpPnNpbmdsZS1wYXJ0DQpvcGVyYXRpb248L2k+KSBvciBpbiBtdWx0
aXBsZSBzdGVwcyAoPGk+bXVsdGlwbGUtcGFydA0Kb3BlcmF0aW9uPC9pPiku
IEEgbXVsdGlwbGUtcGFydCBvcGVyYXRpb24gaXMgdXNlZnVsIGlmIHlvdSBk
byBub3Qga25vdw0KaW4gYWR2YW5jZSBob3cgbG9uZyB0aGUgZGF0YSBpcyBn
b2luZyB0byBiZSwgb3IgaWYgdGhlIGRhdGEgaXMgdG9vDQpsb25nIHRvIGJl
IHN0b3JlZCBpbiBtZW1vcnkgYWxsIGF0IG9uY2UuDQoNCjxQPiBUbyBjb21w
dXRlIHRoZSBNQUMgb2Ygc29tZSBkYXRhIGluIGEgc2luZ2xlIHN0ZXAsIGNh
bGwgb25lIG9mIHRoZQ0KPGNvZGU+ZG9GaW5hbDwvY29kZT4gbWV0aG9kczoN
Cg0KPHByZT4NCiAgICBwdWJsaWMgYnl0ZVtdIGRvRmluYWwoYnl0ZVtdIGlu
cHV0KTsNCjwvcHJlPg0KDQo8UD4gVG8gY29tcHV0ZSB0aGUgTUFDIG9mIHNv
bWUgZGF0YSBpbiBtdWx0aXBsZSBzdGVwcywgY2FsbCBvbmUgb2YgdGhlDQo8
Y29kZT51cGRhdGU8L2NvZGU+IG1ldGhvZHM6DQoNCjxwcmU+DQogICAgcHVi
bGljIHZvaWQgdXBkYXRlKGJ5dGUgaW5wdXQpOw0KDQogICAgcHVibGljIHZv
aWQgdXBkYXRlKGJ5dGVbXSBpbnB1dCk7DQoNCiAgICBwdWJsaWMgdm9pZCB1
cGRhdGUoYnl0ZVtdIGlucHV0LCBpbnQgaW5wdXRPZmZzZXQsIGludCBpbnB1
dExlbik7DQo8L3ByZT4NCg0KPFA+IEEgbXVsdGlwbGUtcGFydCBvcGVyYXRp
b24gbXVzdCBiZSB0ZXJtaW5hdGVkIGJ5IG9uZSBvZiB0aGUgYWJvdmUNCjxj
b2RlPmRvRmluYWw8L2NvZGU+IG1ldGhvZHMgKGlmIHRoZXJlIGlzIHN0aWxs
IHNvbWUgaW5wdXQgZGF0YSBsZWZ0DQpmb3IgdGhlIGxhc3Qgc3RlcCksIG9y
IGJ5IG9uZSBvZiB0aGUgZm9sbG93aW5nIDxjb2RlPmRvRmluYWw8L2NvZGU+
DQptZXRob2RzIChpZiB0aGVyZSBpcyBubyBpbnB1dCBkYXRhIGxlZnQgZm9y
IHRoZSBsYXN0IHN0ZXApOg0KDQo8cHJlPg0KICAgIHB1YmxpYyBieXRlW10g
ZG9GaW5hbCgpOw0KDQogICAgcHVibGljIHZvaWQgZG9GaW5hbChieXRlW10g
b3V0cHV0LCBpbnQgb3V0T2Zmc2V0KTsNCjwvcHJlPg0KDQo8L2Jsb2NrcXVv
dGU+DQoNCjwvYmxvY2txdW90ZT4NCg0KPC9VTD4NCg0KPC9ibG9ja3F1b3Rl
Pg0KDQoNCg0KPEgxPkluc3RhbGxpbmcgSkNFIFByb3ZpZGVyczwvSDE+DQoN
CjxibG9ja3F1b3RlPg0KDQo8UD4gQ3J5cHRvZ3JhcGhpYyBwcm92aWRlcnMg
Zm9yIHRoZSBKQ0UgYXJlIGluc3RhbGxlZCBhbmQgY29uZmlndXJlZA0KaW4g
bXVjaCB0aGUgc2FtZSB3YXkgYXMgY3J5cHRvZ3JhcGhpYyBwcm92aWRlcnMg
Zm9yIHRoZSBKREsuIFRoZXJlIGFyZQ0KdHdvIHBhcnRzIHRvIGluc3RhbGxp
bmcgYSBwcm92aWRlcjogaW5zdGFsbGluZyB0aGUgcHJvdmlkZXIgcGFja2Fn
ZQ0KY2xhc3NlcywgYW5kIGNvbmZpZ3VyaW5nIHRoZSBwcm92aWRlci4gVGhl
IDxhDQpocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL3Byb2R1Y3RzL2pkay8x
LjIvZG9jcy9ndWlkZS9zZWN1cml0eS9DcnlwdG9TcGVjLmh0bWwjUHJvdmlk
ZXJJbnN0YWxsaW5nIj5JbnN0YWxsaW5nDQpQcm92aWRlcnM8L2E+IHNlY3Rp
b24gaW4gdGhlIDxpPkphdmEgQ3J5cHRvZ3JhcGh5IEFyY2hpdGVjdHVyZSBB
UEkNClNwZWNpZmljYXRpb24gJmFtcDsgUmVmZXJlbmNlPC9pPiBkb2N1bWVu
dCBleHBsYWlucyBob3cgdG8gZG8gdGhpcy4NCg0KPFA+IFRoZSBtYXN0ZXJD
bGFzc05hbWUgb2YgU3VuJ3MgY3J5cHRvZ3JhcGhpYyBwcm92aWRlciBmb3Ig
dGhlIEpDRQ0KKCJTdW5KQ0UiKSBpcyA8Y29kZT5jb20uc3VuLmNyeXB0by5w
cm92aWRlci5TdW5KQ0U8L2NvZGU+LiBJbiBvcmRlciB0bw0Kc3RhdGljYWxs
eSBhZGQgU3VuSkNFIHRvIHlvdXIgbGlzdCBvZiBhcHByb3ZlZCBwcm92aWRl
cnMsIGFkZCB0aGUNCmZvbGxvd2luZyBsaW5lIHRvIHRoZSA8Y29kZT5qYXZh
LnNlY3VyaXR5PC9jb2RlPiBmaWxlIGluIHRoZQ0KPGNvZGU+bGliL3NlY3Vy
aXR5PC9jb2RlPiBkaXJlY3Rvcnkgb2YgdGhlIEpESzoNCg0KPHByZT4NCiAg
ICBzZWN1cml0eS5wcm92aWRlci48aT5uPC9pPj1jb20uc3VuLmNyeXB0by5w
cm92aWRlci5TdW5KQ0UNCjwvcHJlPg0KDQo8UD4gVGhpcyBkZWNsYXJlcyB0
aGUgU3VuSkNFIHByb3ZpZGVyLCBhbmQgc3BlY2lmaWVzIGl0cyBwcmVmZXJl
bmNlDQpvcmRlciA8aT5uPC9pPi4NCg0KPFA+IFRvIGR5bmFtaWNhbGx5IGFk
ZCB0aGUgU3VuSkNFIHByb3ZpZGVyIHRvIHlvdXIgbGlzdCBvZiBwcm92aWRl
cnMsDQpjYWxsIGVpdGhlciB0aGUgPGNvZGU+YWRkUHJvdmlkZXI8L2NvZGU+
IG9yDQo8Y29kZT5pbnNlcnRQcm92aWRlckF0PC9jb2RlPiBtZXRob2QgaW4g
dGhlIDxjb2RlPlNlY3VyaXR5PC9jb2RlPg0KY2xhc3M6DQoNCjxwcmU+DQog
ICAgUHJvdmlkZXIgc3VuSmNlID0gbmV3IGNvbS5zdW4uY3J5cHRvLnByb3Zp
ZGVyLlN1bkpDRSgpOw0KICAgIFNlY3VyaXR5LmFkZFByb3ZpZGVyKHN1bkpj
ZSk7DQo8L3ByZT4NCg0KPFA+IFRoZSBsYXR0ZXIgdHlwZSBvZiByZWdpc3Ry
YXRpb24gaXMgbm90IHBlcnNpc3RlbnQgYW5kIGNhbiBvbmx5IGJlDQpkb25l
IGJ5ICJ0cnVzdGVkIiBwcm9ncmFtcy4NCg0KPC9ibG9ja3F1b3RlPg0KDQoN
Cg0KPEgxPkNpcGhlciBPdXRwdXQgQ29uc2lkZXJhdGlvbnM8L0gxPg0KDQo8
YmxvY2txdW90ZT4NCg0KPFA+IFNvbWUgb2YgdGhlIDxjb2RlPnVwZGF0ZTwv
Y29kZT4gYW5kIDxjb2RlPmRvRmluYWw8L2NvZGU+IG1ldGhvZHMNCm9mIENp
cGhlciBhbGxvdyB0aGUgY2FsbGVyIHRvIHNwZWNpZnkgdGhlIG91dHB1dCBi
dWZmZXIgaW50byB3aGljaCB0bw0KZW5jcnlwdCBvciBkZWNyeXB0IHRoZSBk
YXRhLiBJbiB0aGVzZSBjYXNlcywgaXQgaXMgaW1wb3J0YW50IHRvIHBhc3Mg
YQ0KYnVmZmVyIHRoYXQgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHJl
c3VsdCBvZiB0aGUgZW5jcnlwdGlvbiBvcg0KZGVjcnlwdGlvbiBvcGVyYXRp
b24uDQoNCjxQPiBUaGUgZm9sbG93aW5nIG1ldGhvZCBpbiBDaXBoZXIgY2Fu
IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyBiaWcNCnRoZSBvdXRwdXQgYnVm
ZmVyIHNob3VsZCBiZToNCg0KPHByZT4NCiAgICBwdWJsaWMgaW50IG91dE91
dHB1dFNpemUoaW50IGlucHV0TGVuKQ0KPC9wcmU+DQoNCjwvYmxvY2txdW90
ZT4NCg0KDQoNCjxIMT5FeGFtcGxlczwvSDE+DQoNCjxibG9ja3F1b3RlPg0K
DQo8UD4gVGhpcyBzZWN0aW9uIGlzIGEgc2hvcnQgdHV0b3JpYWwgb24gaG93
IHRvIHVzZSBzb21lIG9mIHRoZSBtYWpvcg0KZmVhdHVyZXMgb2YgdGhlIEpD
RSBBUElzLiBDb21wbGV0ZSBzYW1wbGUgcHJvZ3JhbXMgdGhhdCBleGVyY2lz
ZSB0aGUNCkFQSXMgY2FuIGJlIGZvdW5kIGluIDxhIGhyZWY9IiNBcHBCIj5B
cHBlbmRpeCBCPC9hPiBpbiB0aGlzIGRvY3VtZW50Lg0KDQo8SDI+U2ltcGxl
IEVuY3J5cHRpb24gRXhhbXBsZTwvSDI+DQoNCjxibG9ja3F1b3RlPg0KDQo8
UD4gVGhpcyBzZWN0aW9uIHRha2VzIHRoZSB1c2VyIHRocm91Z2ggdGhlIHBy
b2Nlc3Mgb2YgZ2VuZXJhdGluZyBhDQprZXksIGNyZWF0aW5nIGFuZCBpbml0
aWFsaXppbmcgYSBjaXBoZXIgb2JqZWN0LCBlbmNyeXB0aW5nIGEgZmlsZSwg
YW5kDQp0aGVuIGRlY3J5cHRpbmcgaXQuIFRocm91Z2hvdXQgdGhpcyBleGFt
cGxlLCB3ZSB1c2UgdGhlIERhdGENCkVuY3J5cHRpb24gU3RhbmRhcmQgKERF
UykuDQoNCjxIND5HZW5lcmF0aW5nIGEgS2V5PC9IND4NCg0KPGJsb2NrcXVv
dGU+DQoNCjxQPiBUbyBjcmVhdGUgYSBERVMga2V5LCB3ZSBoYXZlIHRvIGlu
c3RhbnRpYXRlIGEgS2V5R2VuZXJhdG9yIGZvcg0KREVTLiBXZSBkbyBub3Qg
c3BlY2lmeSBhIHByb3ZpZGVyLCBiZWNhdXNlIHdlIGRvIG5vdCBjYXJlIGFi
b3V0IGENCnBhcnRpY3VsYXIgREVTIGtleSBnZW5lcmF0aW9uIGltcGxlbWVu
dGF0aW9uLiBTaW5jZSB3ZSBkbyBub3QNCmluaXRpYWxpemUgdGhlIEtleUdl
bmVyYXRvciwgYSBzeXN0ZW0tcHJvdmlkZWQgc291cmNlIG9mIHJhbmRvbW5l
c3MNCndpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIERFUyBrZXk6DQoNCjxw
cmU+DQogICAgS2V5R2VuZXJhdG9yIGtleWdlbiA9IEtleUdlbmVyYXRvci5n
ZXRJbnN0YW5jZSgiREVTIik7DQogICAgU2VjcmV0S2V5IGRlc0tleSA9IGtl
eWdlbi5nZW5lcmF0ZUtleSgpOw0KPC9wcmU+DQoNCjxQPiBBZnRlciB0aGUg
a2V5IGhhcyBiZWVuIGdlbmVyYXRlZCwgdGhlIHNhbWUgS2V5R2VuZXJhdG9y
IG9iamVjdCBjYW4NCmJlIHJlLXVzZWQgdG8gY3JlYXRlIGZ1cnRoZXIga2V5
cy4NCg0KPC9ibG9ja3F1b3RlPg0KDQo8SDQ+Q3JlYXRpbmcgYSBDaXBoZXI8
L0g0Pg0KDQo8YmxvY2txdW90ZT4NCg0KPFA+IFRoZSBuZXh0IHN0ZXAgaXMg
dG8gY3JlYXRlIGEgQ2lwaGVyIGluc3RhbmNlLiBUbyBkbyB0aGlzLCB3ZSB1
c2UNCm9uZSBvZiB0aGUgPGNvZGU+Z2V0SW5zdGFuY2U8L2NvZGU+IGZhY3Rv
cnkgbWV0aG9kcyBvZiB0aGUgQ2lwaGVyDQpjbGFzcy4gV2UgbXVzdCBzcGVj
aWZ5IHRoZSBuYW1lIG9mIHRoZSByZXF1ZXN0ZWQgdHJhbnNmb3JtYXRpb24s
IHdoaWNoDQppbmNsdWRlcyB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHMsIHNl
cGFyYXRlZCBieSBzbGFzaGVzICgvKToNCg0KPFVMPg0KPExJPnRoZSBhbGdv
cml0aG0gbmFtZSA8TEk+dGhlIG1vZGUgKG9wdGlvbmFsKSA8TEk+dGhlIHBh
ZGRpbmcgc2NoZW1lDQoob3B0aW9uYWwpDQo8L1VMPg0KDQo8UD4gSW4gdGhp
cyBleGFtcGxlLCB3ZSBjcmVhdGUgYSBERVMgKERhdGEgRW5jcnlwdGlvbiBT
dGFuZGFyZCkgY2lwaGVyDQppbiBFbGVjdHJvbmljIENvZGVib29rIG1vZGUs
IHdpdGggUEtDUyM1LXN0eWxlIHBhZGRpbmcuIFdlIGRvIG5vdA0Kc3BlY2lm
eSBhIHByb3ZpZGVyLCBiZWNhdXNlIHdlIGRvIG5vdCBjYXJlIGFib3V0IGEg
cGFydGljdWxhcg0KaW1wbGVtZW50YXRpb24gb2YgdGhlIHJlcXVlc3RlZCB0
cmFuc2Zvcm1hdGlvbi4NCg0KPFA+IFRoZSBzdGFuZGFyZCBhbGdvcml0aG0g
bmFtZSBmb3IgREVTIGlzICJERVMiLCB0aGUgc3RhbmRhcmQgbmFtZQ0KZm9y
IHRoZSBFbGVjdHJvbmljIENvZGVib29rIG1vZGUgaXMgIkVDQiIsIGFuZCB0
aGUgc3RhbmRhcmQgbmFtZSBmb3INClBLQ1MjNS1zdHlsZSBwYWRkaW5nIGlz
ICJQS0NTNVBhZGRpbmciOg0KDQo8cHJlPg0KICAgIENpcGhlciBkZXNDaXBo
ZXI7DQoNCiAgICAvLyBDcmVhdGUgdGhlIGNpcGhlciBkZXNDaXBoZXIgPQ0K
ICAgIENpcGhlci5nZXRJbnN0YW5jZSgiREVTL0VDQi9QS0NTNVBhZGRpbmci
KTsNCjwvcHJlPg0KDQo8UD4gV2UgdXNlIHRoZSBnZW5lcmF0ZWQgPGNvZGU+
ZGVzS2V5PC9jb2RlPiBmcm9tIGFib3ZlIHRvIGluaXRpYWxpemUNCnRoZSBD
aXBoZXIgb2JqZWN0IGZvciBlbmNyeXB0aW9uOg0KDQo8cHJlPg0KICAgIC8v
IEluaXRpYWxpemUgdGhlIGNpcGhlciBmb3IgZW5jcnlwdGlvbg0KICAgIGRl
c0NpcGhlci5pbml0KENpcGhlci5FTkNSWVBUX01PREUsIGRlc0tleSk7DQoN
CiAgICAvLyBPdXIgY2xlYXJ0ZXh0DQogICAgYnl0ZVtdIGNsZWFydGV4dCA9
ICJUaGlzIGlzIGp1c3QgYW4gZXhhbXBsZSIuZ2V0Qnl0ZXMoKTsNCg0KICAg
IC8vIEVuY3J5cHQgdGhlIGNsZWFydGV4dA0KICAgIGJ5dGVbXSBjaXBoZXJ0
ZXh0ID0gZGVzQ2lwaGVyLmRvRmluYWwoY2xlYXJ0ZXh0KTsNCg0KICAgIC8v
IEluaXRpYWxpemUgdGhlIHNhbWUgY2lwaGVyIGZvciBkZWNyeXB0aW9uDQog
ICAgZGVzQ2lwaGVyLmluaXQoQ2lwaGVyLkRFQ1JZUFRfTU9ERSwgZGVzS2V5
KTsNCg0KICAgIC8vIERlY3J5cHQgdGhlIGNpcGhlcnRleHQNCiAgICBieXRl
W10gY2xlYXJ0ZXh0MSA9IGRlc0NpcGhlci5kb0ZpbmFsKGNpcGhlcnRleHQp
Ow0KPC9wcmU+DQoNCjxQPiA8Y29kZT5jbGVhcnRleHQ8L2NvZGU+IGFuZCA8
Y29kZT5jbGVhcnRleHQxPC9jb2RlPiBhcmUgaWRlbnRpY2FsLg0KDQo8L2Js
b2NrcXVvdGU+DQoNCjwvYmxvY2txdW90ZT4NCg0KPEgyPlBhc3N3b3JkLUJh
c2VkIEVuY3J5cHRpb24gRXhhbXBsZTwvSDI+DQoNCjxibG9ja3F1b3RlPg0K
DQo8UD4gSW4gdGhpcyBleGFtcGxlLCB0aGUgc3RyaW5nICI8aT5EbyBub3Qg
c2hhcmUgdGhpczwvaT4iIGlzIHVzZWQgYXMNCnRoZSBlbmNyeXB0aW9uIHBh
c3N3b3JkLg0KDQo8UD4gSW4gb3JkZXIgdG8gdXNlIFBhc3N3b3JkLUJhc2Vk
IEVuY3J5cHRpb24gKFBCRSkgYXMgZGVmaW5lZCBpbg0KUEtDUyM1LCB3ZSBo
YXZlIHRvIHNwZWNpZnkgYSA8aT5zYWx0PC9pPiBhbmQgYW4gPGk+aXRlcmF0
aW9uDQpjb3VudDwvaT4uIFRoZSBzYW1lIHNhbHQgYW5kIGl0ZXJhdGlvbiBj
b3VudCB0aGF0IGFyZSB1c2VkIGZvcg0KZW5jcnlwdGlvbiBtdXN0IGJlIHVz
ZWQgZm9yIGRlY3J5cHRpb24uDQoNCjxwcmU+DQogICAgUEJFS2V5U3BlYyBw
YmVLZXlTcGVjOw0KICAgIFBCRVBhcmFtZXRlclNwZWMgcGJlUGFyYW1TcGVj
Ow0KICAgIFNlY3JldEtleUZhY3Rvcnkga2V5RmFjOw0KDQogICAgLy8gU2Fs
dA0KICAgIGJ5dGVbXSBzYWx0ID0geyAoYnl0ZSkweGM3LCAoYnl0ZSkweDcz
LCAoYnl0ZSkweDIxLCAoYnl0ZSkweDhjLA0KICAgIChieXRlKTB4N2UsIChi
eXRlKTB4YzgsIChieXRlKTB4ZWUsIChieXRlKTB4OTkgfTsNCg0KICAgIC8v
IEl0ZXJhdGlvbiBjb3VudA0KICAgIGludCBjb3VudCA9IDIwOw0KDQogICAg
Ly8gQ3JlYXRlIFBCRSBwYXJhbWV0ZXIgc2V0DQogICAgcGJlUGFyYW1TcGVj
ID0gbmV3IFBCRVBhcmFtZXRlclNwZWMoc2FsdCwgY291bnQpOw0KDQogICAg
Ly8gQ29udmVydCBwYXNzd29yZCBpbnRvIFNlY3JldEtleSBvYmplY3QsIHVz
aW5nIGEgUEJFIGtleQ0KICAgIGZhY3RvcnkgcGJlS2V5U3BlYyA9IG5ldyBQ
QkVLZXlTcGVjKCJEbyBub3Qgc2hhcmUgdGhpcyIpOw0KICAgIGtleUZhYyA9
IFNlY3JldEtleUZhY3RvcnkuZ2V0SW5zdGFuY2UoIlBCRVdpdGhNRDVBbmRE
RVMiKTsNCiAgICBTZWNyZXRLZXkgcGJlS2V5ID0ga2V5RmFjLmdlbmVyYXRl
U2VjcmV0KHBiZUtleVNwZWMpOw0KDQogICAgLy8gQ3JlYXRlIFBCRSBDaXBo
ZXINCiAgICBDaXBoZXIgcGJlQ2lwaGVyID0gQ2lwaGVyLmdldEluc3RhbmNl
KCJQQkVXaXRoTUQ1QW5kREVTIik7DQoNCiAgICAvLyBJbml0aWFsaXplIFBC
RSBDaXBoZXIgd2l0aCBrZXkgYW5kIHBhcmFtZXRlcnMNCiAgICBwYmVDaXBo
ZXIuaW5pdChDaXBoZXIuRU5DUllQVF9NT0RFLCBwYmVLZXksIHBiZVBhcmFt
U3BlYyk7DQoNCiAgICAvLyBPdXIgY2xlYXJ0ZXh0DQogICAgYnl0ZVtdIGNs
ZWFydGV4dCA9ICJUaGlzIGlzIGFub3RoZXIgZXhhbXBsZSIuZ2V0Qnl0ZXMo
KTsNCg0KICAgIC8vIEVuY3J5cHQgdGhlIGNsZWFydGV4dA0KICAgIGJ5dGVb
XSBjaXBoZXJ0ZXh0ID0gcGJlQ2lwaGVyLmRvRmluYWwoY2xlYXJ0ZXh0KTsN
CjwvcHJlPg0KDQo8L2Jsb2NrcXVvdGU+DQoNCjxIMj5LZXkgQWdyZWVtZW50
IEV4YW1wbGU8L0gyPg0KDQo8YmxvY2txdW90ZT4NCg0KPFA+IFBsZWFzZSBy
ZWZlciB0byA8YSBocmVmPSIjQXBwQiI+QXBwZW5kaXggQjwvYT4gZm9yIHNh
bXBsZSBwcm9ncmFtcw0KZXhlcmNpc2luZyB0aGUgRGlmZmllLUhlbGxtYW4g
a2V5IGV4Y2hhbmdlIGJldHdlZW4gMiBhbmQgMyBwYXJ0aWVzLA0KcmVzcGVj
dGl2ZWx5Lg0KDQo8L2Jsb2NrcXVvdGU+DQoNCjwvYmxvY2txdW90ZT4NCg0K
PEhSPg0KDQo8YSBuYW1lPSJBcHBBIj4NCjxIMT5BcHBlbmRpeCBBOiBTdGFu
ZGFyZCBOYW1lczwvSDE+DQoNCjxibG9ja3F1b3RlPg0KDQo8UD4gVGhlIEFQ
SSByZXF1aXJlcyBhbmQgdXRpbGl6ZXMgYSBzZXQgb2Ygc3RhbmRhcmQgbmFt
ZXMgZm9yIHZhcmlvdXMNCmFsZ29yaXRobXMsIGFsZ29yaXRobSBtb2Rlcywg
cGFkZGluZyBzY2hlbWVzLCBldGMuIFRoaXMgYXBwZW5kaXgNCnN1cHBsZW1l
bnRzIHRoZSBzdGFuZGFyZCBzZXQgb2YgbmFtZXMgZGVmaW5lZCBieSA8YQ0K
aHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9wcm9kdWN0cy9qZGsvMS4yL2Rv
Y3MvZ3VpZGUvc2VjdXJpdHkvQ3J5cHRvU3BlYy5odG1sI0FwcEEiPkFwcGVu
ZGl4DQpBPC9hPiBpbiB0aGUgPGk+SmF2YSBDcnlwdG9ncmFwaHkgQXJjaGl0
ZWN0dXJlIEFQSSBTcGVjaWZpY2F0aW9uICZhbXA7DQpSZWZlcmVuY2U8L2k+
LiBOb3RlIHRoYXQgYWxnb3JpdGhtIG5hbWVzIGFyZSB0cmVhdGVkIGNhc2Ut
aW5zZW5zaXRpdmUuDQoNCjxIMj5DaXBoZXI8L0gyPg0KDQo8YmxvY2txdW90
ZT4NCg0KPEg0PkFsZ29yaXRobTwvSDQ+DQoNCjxibG9ja3F1b3RlPg0KDQo8
UD4gREVTDQoNCjxQPiBERVNlZGUgKGFsaWFzOiBUcmlwbGVERVMpDQoNCjxQ
PiBQQkVXaXRoTUQ1QW5kREVTOiBQYXNzd29yZC1CYXNlZCBFbmNyeXB0aW9u
LCBhcyBkZWZpbmVkIGluOiBSU0ENCkxhYm9yYXRvcmllcywgIlBLQ1MgIzU6
IFBhc3N3b3JkLUJhc2VkIEVuY3J5cHRpb24gU3RhbmRhcmQsIiB2ZXJzaW9u
DQoxLjUsIE5vdiAxOTkzLg0KDQo8L2Jsb2NrcXVvdGU+DQoNCjxIND5Nb2Rl
PC9IND4NCg0KPGJsb2NrcXVvdGU+DQoNCjxQPiBFQ0I6IEVsZWN0cm9uaWMg
Q29kZWJvb2sgTW9kZSwgYXMgZGVmaW5lZCBpbjogVGhlIE5hdGlvbmFsDQpJ
bnN0aXR1dGUgb2YgU3RhbmRhcmRzIGFuZCBUZWNobm9sb2d5IChOSVNUKSBG
ZWRlcmFsIEluZm9ybWF0aW9uDQpQcm9jZXNzaW5nIFN0YW5kYXJkIChGSVBT
KSBQVUIgODEsICJERVMgTW9kZXMgb2YgT3BlcmF0aW9uLCINClUuUy4gRGVw
YXJ0bWVudCBvZiBDb21tZXJjZSwgRGVjIDE5ODAuDQoNCjxQPiBDQkM6IENp
cGhlciBCbG9jayBDaGFpbmluZyBNb2RlLCBhcyBkZWZpbmVkIGluIE5JU1Qg
RklQUyBQVUIgODEuDQoNCjxQPiBDRkI6IENpcGhlciBGZWVkYmFjayBNb2Rl
LCBhcyBkZWZpbmVkIGluIE5JU1QgRklQUyBQVUIgODEuDQoNCjxQPiBPRkI6
IE91dHB1dCBGZWVkYmFjayBNb2RlLCBhcyBkZWZpbmVkIGluIE5JU1QgRklQ
UyBQVUIgODEuDQoNCjxQPiBQQ0JDOiBQbGFpbnRleHQgQ2lwaGVyIEJsb2Nr
IENoYWluaW5nLCBhcyBkZWZpbmVkIGJ5IEtlcmJlcm9zLg0KDQo8L2Jsb2Nr
cXVvdGU+DQoNCjxIND5QYWRkaW5nPC9IND4NCg0KPGJsb2NrcXVvdGU+DQoN
CjxQPiBOb1BhZGRpbmc6IE5vIHBhZGRpbmcuDQoNCjxQPiBQS0NTNVBhZGRp
bmc6IFRoZSBwYWRkaW5nIHNjaGVtZSBkZXNjcmliZWQgaW46IFJTQSBMYWJv
cmF0b3JpZXMsDQoiUEtDUyAjNTogUGFzc3dvcmQtQmFzZWQgRW5jcnlwdGlv
biBTdGFuZGFyZCwiIHZlcnNpb24gMS41LCBOb3ZlbWJlcg0KMTk5My4NCg0K
PC9ibG9ja3F1b3RlPg0KDQo8L2Jsb2NrcXVvdGU+DQoNCjxIMj5LZXlBZ3Jl
ZW1lbnQ8L0gyPg0KDQo8YmxvY2txdW90ZT4NCg0KPFA+IERIOiBEaWZmaWUt
SGVsbG1hbiBLZXkgQWdyZWVtZW50IGFzIGRlZmluZWQgaW46IFJTQSBMYWJv
cmF0b3JpZXMsDQoiUEtDUyAjMzogRGlmZmllLUhlbGxtYW4gS2V5LUFncmVl
bWVudCBTdGFuZGFyZCwiIHZlcnNpb24gMS40LA0KTm92ZW1iZXIgMTk5My4N
Cg0KPC9ibG9ja3F1b3RlPg0KDQo8SDI+TUFDPC9IMj4NCg0KPGJsb2NrcXVv
dGU+DQoNCjxQPiBIbWFjTUQ1OiBUaGUgSE1BQy1NRDUga2V5ZWQtaGFzaGlu
ZyBhbGdvcml0aG0gYXMgZGVmaW5lZCBpbjogUkZDIDIxMDQsDQoiSE1BQzog
S2V5ZWQtSGFzaGluZyBmb3IgTWVzc2FnZSBBdXRoZW50aWNhdGlvbiwiIEZl
YnJ1YXJ5IDE5OTcuDQoNCjxQPiBIbWFjU0hBMTogVGhlIEhNQUMtU0hBMSBr
ZXllZC1oYXNoaW5nIGFsZ29yaXRobSBhcyBkZWZpbmVkIGluOiBSRkMgMjEw
NCwNCiJITUFDOiBLZXllZC1IYXNoaW5nIGZvciBNZXNzYWdlIEF1dGhlbnRp
Y2F0aW9uLCIgRmVicnVhcnkgMTk5Ny4NCg0KPC9ibG9ja3F1b3RlPg0KDQo8
L2Jsb2NrcXVvdGU+DQoNCjxIUj4NCg0KPGEgbmFtZT0iQXBwQiI+DQo8SDE+
QXBwZW5kaXggQjogU2FtcGxlIFByb2dyYW1zPC9IMT4NCg0KPFVMPg0KDQo8
TEk+PEgzPkRpZmZpZS1IZWxsbWFuIGtleSBleGNoYW5nZSBiZXR3ZWVuIDIg
cGFydGllczwvSDM+DQoNCjxwcmU+DQovKg0KICogQ29weXJpZ2h0IDE5OTMt
MTk5NyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIDkwMSBTYW4gQW50b25pbyBS
b2FkLCANCiAqIFBhbG8gQWx0bywgQ2FsaWZvcm5pYSwgOTQzMDMsIFUuUy5B
LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCiAqIA0KICogVGhpcyBzb2Z0d2Fy
ZSBpcyB0aGUgY29uZmlkZW50aWFsIGFuZCBwcm9wcmlldGFyeSBpbmZvcm1h
dGlvbiBvZiBTdW4NCiAqIE1pY3Jvc3lzdGVtcywgSW5jLiAoIkNvbmZpZGVu
dGlhbCBJbmZvcm1hdGlvbiIpLiAgWW91IHNoYWxsIG5vdA0KICogZGlzY2xv
c2Ugc3VjaCBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gYW5kIHNoYWxsIHVz
ZSBpdCBvbmx5IGluDQogKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIG9m
IHRoZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgZW50ZXJlZCBpbnRvDQogKiB3
aXRoIFN1bi4NCiAqIA0KICogQ29weXJpZ2h0VmVyc2lvbiAxLjINCiAqIA0K
ICovDQoNCmltcG9ydCBqYXZhLmlvLio7DQppbXBvcnQgamF2YS5tYXRoLkJp
Z0ludGVnZXI7DQppbXBvcnQgamF2YS5zZWN1cml0eS4qOw0KaW1wb3J0IGph
dmEuc2VjdXJpdHkuc3BlYy4qOw0KaW1wb3J0IGphdmEuc2VjdXJpdHkuaW50
ZXJmYWNlcy4qOw0KaW1wb3J0IGphdmF4LmNyeXB0by4qOw0KaW1wb3J0IGph
dmF4LmNyeXB0by5zcGVjLio7DQppbXBvcnQgamF2YXguY3J5cHRvLmludGVy
ZmFjZXMuKjsNCmltcG9ydCBjb20uc3VuLmNyeXB0by5wcm92aWRlci5TdW5K
Q0U7DQoNCi8qKg0KICogVGhpcyB0ZXN0IHV0aWxpdHkgZXhlY3V0ZXMgdGhl
IERpZmZpZS1IZWxsbWFuIGtleSBhZ3JlZW1lbnQgcHJvdG9jb2wNCiAqIGJl
dHdlZW4gMiBwYXJ0aWVzOiBBbGljZSBhbmQgQm9iLg0KICoNCiAqIEJ5IGRl
ZmF1bHQsIHByZWNvbmZpZ3VyZWQgcGFyYW1ldGVycyAoMTAyNCBiaXQgcHJp
bWUgbW9kdWx1cyBhbmQgYmFzZQ0KICogZ2VuZXJhdG9yIHVzZWQgYnkgU0tJ
UCkgYXJlIHVzZWQuDQogKiBJZiB0aGlzIHByb2dyYW0gaXMgY2FsbGVkIHdp
dGggdGhlICItZ2VuIiBvcHRpb24sIGEgbmV3IHNldCBvZiBwYXJhbWV0ZXJz
DQogKiAoNTEyIGJpdCBwcmltZSBtb2R1bHVzIGFuZCBiYXNlIGdlbmVyYXRv
cikgYXJlIGNyZWF0ZWQuIChQYXJhbWV0ZXINCiAqIGdlbmVyYXRpb24gdGFr
ZXMgYSB2ZXJ5IGxvbmcgdGltZSB0byBjb21wbGV0ZSEpDQogKi8NCg0KcHVi
bGljIGNsYXNzIERIS2V5QWdyZWVtZW50MiB7DQoNCiAgICBwcml2YXRlIERI
S2V5QWdyZWVtZW50MigpIHt9DQoNCiAgICBwdWJsaWMgc3RhdGljIHZvaWQg
bWFpbihTdHJpbmcgYXJndltdKSB7DQoJdHJ5IHsNCgkgICAgU3RyaW5nIG1v
ZGUgPSAiVVNFX1NLSVBfREhfUEFSQU1TIjsNCg0KCSAgICAvLyBBZGQgSkNF
IHRvIHRoZSBsaXN0IG9mIHByb3ZpZGVycw0KICAgICAgICAgICAgU3VuSkNF
IGpjZSA9IG5ldyBTdW5KQ0UoKTsNCiAgICAgICAgICAgIFNlY3VyaXR5LmFk
ZFByb3ZpZGVyKGpjZSk7DQoNCgkgICAgREhLZXlBZ3JlZW1lbnQyIGtleUFn
cmVlID0gbmV3IERIS2V5QWdyZWVtZW50MigpOw0KDQoJICAgIGlmIChhcmd2
Lmxlbmd0aCA+IDEpIHsNCgkJa2V5QWdyZWUudXNhZ2UoKTsNCgkJdGhyb3cg
bmV3IEV4Y2VwdGlvbigiV3JvbmcgbnVtYmVyIG9mIGNvbW1hbmQgb3B0aW9u
cyIpOw0KCSAgICB9IGVsc2UgaWYgKGFyZ3YubGVuZ3RoID09IDEpIHsNCgkJ
aWYgKCEoYXJndlswXS5lcXVhbHMoIi1nZW4iKSkpIHsNCgkJICAgIGtleUFn
cmVlLnVzYWdlKCk7DQoJCSAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJVbnJl
Y29nbml6ZWQgZmxhZzogIiArIGFyZ3ZbMF0pOw0KCQl9DQoJCW1vZGUgPSAi
R0VORVJBVEVfREhfUEFSQU1TIjsNCgkgICAgfQ0KDQoJICAgIGtleUFncmVl
LnJ1bihtb2RlKTsNCgl9IGNhdGNoIChFeGNlcHRpb24gZSkgew0KCSAgICBT
eXN0ZW0uZXJyLnByaW50bG4oIkVycm9yOiAiICsgZSk7DQoJICAgIFN5c3Rl
bS5leGl0KDEpOw0KCX0NCiAgICB9DQoNCiAgICBwcml2YXRlIHZvaWQgcnVu
KFN0cmluZyBtb2RlKSB0aHJvd3MgRXhjZXB0aW9uIHsNCg0KCURIUGFyYW1l
dGVyU3BlYyBkaFNraXBQYXJhbVNwZWM7DQoNCglpZiAobW9kZS5lcXVhbHMo
IkdFTkVSQVRFX0RIX1BBUkFNUyIpKSB7DQoJICAgIC8vIFNvbWUgY2VudHJh
bCBhdXRob3JpdHkgY3JlYXRlcyBuZXcgREggcGFyYW1ldGVycw0KCSAgICBT
eXN0ZW0uZXJyLnByaW50bG4NCgkJKCJDcmVhdGluZyBEaWZmaWUtSGVsbG1h
biBwYXJhbWV0ZXJzICh0YWtlcyBWRVJZIGxvbmcpIC4uLiIpOw0KCSAgICBB
bGdvcml0aG1QYXJhbWV0ZXJHZW5lcmF0b3IgcGFyYW1HZW4NCgkJPSBBbGdv
cml0aG1QYXJhbWV0ZXJHZW5lcmF0b3IuZ2V0SW5zdGFuY2UoIkRIIik7DQoJ
ICAgIHBhcmFtR2VuLmluaXQoNTEyKTsNCgkgICAgQWxnb3JpdGhtUGFyYW1l
dGVycyBwYXJhbXMgPSBwYXJhbUdlbi5nZW5lcmF0ZVBhcmFtZXRlcnMoKTsN
CgkgICAgZGhTa2lwUGFyYW1TcGVjID0gKERIUGFyYW1ldGVyU3BlYylwYXJh
bXMuZ2V0UGFyYW1ldGVyU3BlYw0KCQkoREhQYXJhbWV0ZXJTcGVjLmNsYXNz
KTsNCgl9IGVsc2Ugew0KCSAgICAvLyB1c2Ugc29tZSBwcmUtZ2VuZXJhdGVk
LCBkZWZhdWx0IERIIHBhcmFtZXRlcnMNCgkgICAgU3lzdGVtLmVyci5wcmlu
dGxuKCJVc2luZyBTS0lQIERpZmZpZS1IZWxsbWFuIHBhcmFtZXRlcnMiKTsN
CgkgICAgZGhTa2lwUGFyYW1TcGVjID0gbmV3IERIUGFyYW1ldGVyU3BlYyhz
a2lwMTAyNE1vZHVsdXMsDQoJCQkJCQkgIHNraXAxMDI0QmFzZSk7DQoJfQ0K
DQoJLyoNCgkgKiBBbGljZSBjcmVhdGVzIGhlciBvd24gREgga2V5IHBhaXIs
IHVzaW5nIHRoZSBESCBwYXJhbWV0ZXJzIGZyb20NCgkgKiBhYm92ZQ0KCSAq
Lw0KCVN5c3RlbS5lcnIucHJpbnRsbigiQUxJQ0U6IEdlbmVyYXRlIERIIGtl
eXBhaXIgLi4uIik7DQoJS2V5UGFpckdlbmVyYXRvciBhbGljZUtwYWlyR2Vu
ID0gS2V5UGFpckdlbmVyYXRvci5nZXRJbnN0YW5jZSgiREgiKTsNCglhbGlj
ZUtwYWlyR2VuLmluaXRpYWxpemUoZGhTa2lwUGFyYW1TcGVjKTsNCglLZXlQ
YWlyIGFsaWNlS3BhaXIgPSBhbGljZUtwYWlyR2VuLmdlbmVyYXRlS2V5UGFp
cigpOw0KDQoJLy8gQWxpY2UgZXhlY3V0ZXMgUGhhc2UxIG9mIGhlciB2ZXJz
aW9uIG9mIHRoZSBESCBwcm90b2NvbA0KCVN5c3RlbS5lcnIucHJpbnRsbigi
QUxJQ0U6IEV4ZWN1dGUgUEhBU0UxIC4uLiIpOw0KCUtleUFncmVlbWVudCBh
bGljZUtleUFncmVlID0gS2V5QWdyZWVtZW50LmdldEluc3RhbmNlKCJESCIp
Ow0KCWFsaWNlS2V5QWdyZWUuaW5pdChhbGljZUtwYWlyLmdldFByaXZhdGUo
KSk7DQoNCgkvLyBBbGljZSBlbmNvZGVzIGhlciBwdWJsaWMga2V5LCBhbmQg
c2VuZHMgaXQgb3ZlciB0byBCb2IuDQoJYnl0ZVtdIGFsaWNlUHViS2V5RW5j
ID0gYWxpY2VLcGFpci5nZXRQdWJsaWMoKS5nZXRFbmNvZGVkKCk7DQoNCgkv
Kg0KCSAqIExldCdzIHR1cm4gb3ZlciB0byBCb2IuIEJvYiBoYXMgcmVjZWl2
ZWQgQWxpY2UncyBwdWJsaWMga2V5DQoJICogaW4gZW5jb2RlZCBmb3JtYXQu
DQoJICogSGUgaW5zdGFudGlhdGVzIGEgREggcHVibGljIGtleSBmcm9tIHRo
ZSBlbmNvZGVkIGtleSBtYXRlcmlhbC4NCgkgKi8NCglLZXlGYWN0b3J5IGJv
YktleUZhYyA9IEtleUZhY3RvcnkuZ2V0SW5zdGFuY2UoIkRIIik7DQoJWDUw
OUVuY29kZWRLZXlTcGVjIHg1MDlLZXlTcGVjID0gbmV3IFg1MDlFbmNvZGVk
S2V5U3BlYw0KCSAgICAoYWxpY2VQdWJLZXlFbmMpOw0KCVB1YmxpY0tleSBh
bGljZVB1YktleSA9IGJvYktleUZhYy5nZW5lcmF0ZVB1YmxpYyh4NTA5S2V5
U3BlYyk7DQoNCgkvKg0KCSAqIEJvYiBnZXRzIHRoZSBESCBwYXJhbWV0ZXJz
IGFzc29jaWF0ZWQgd2l0aCBBbGljZSdzIHB1YmxpYyBrZXkuIA0KCSAqIEhl
IG11c3QgdXNlIHRoZSBzYW1lIHBhcmFtZXRlcnMgd2hlbiBoZSBnZW5lcmF0
ZXMgaGlzIG93biBrZXkNCgkgKiBwYWlyLg0KCSAqLw0KCURIUGFyYW1ldGVy
U3BlYyBkaFBhcmFtU3BlYyA9ICgoREhQdWJsaWNLZXkpYWxpY2VQdWJLZXkp
LmdldFBhcmFtcygpOw0KDQoJLy8gQm9iIGNyZWF0ZXMgaGlzIG93biBESCBr
ZXkgcGFpcg0KCVN5c3RlbS5lcnIucHJpbnRsbigiQk9COiBHZW5lcmF0ZSBE
SCBrZXlwYWlyIC4uLiIpOw0KCUtleVBhaXJHZW5lcmF0b3IgYm9iS3BhaXJH
ZW4gPSBLZXlQYWlyR2VuZXJhdG9yLmdldEluc3RhbmNlKCJESCIpOw0KCWJv
YktwYWlyR2VuLmluaXRpYWxpemUoZGhQYXJhbVNwZWMpOw0KCUtleVBhaXIg
Ym9iS3BhaXIgPSBib2JLcGFpckdlbi5nZW5lcmF0ZUtleVBhaXIoKTsNCg0K
CS8vIEJvYiBleGVjdXRlcyBQaGFzZTEgb2YgaGlzIHZlcnNpb24gb2YgdGhl
IERIIHByb3RvY29sDQoJU3lzdGVtLmVyci5wcmludGxuKCJCT0I6IEV4ZWN1
dGUgUEhBU0UxIC4uLiIpOw0KCUtleUFncmVlbWVudCBib2JLZXlBZ3JlZSA9
IEtleUFncmVlbWVudC5nZXRJbnN0YW5jZSgiREgiKTsNCglib2JLZXlBZ3Jl
ZS5pbml0KGJvYktwYWlyLmdldFByaXZhdGUoKSk7DQoNCgkvLyBCb2IgZW5j
b2RlcyBoaXMgcHVibGljIGtleSwgYW5kIHNlbmRzIGl0IG92ZXIgdG8gQWxp
Y2UuDQoJYnl0ZVtdIGJvYlB1YktleUVuYyA9IGJvYktwYWlyLmdldFB1Ymxp
YygpLmdldEVuY29kZWQoKTsNCg0KCS8qDQoJICogQWxpY2UgdXNlcyBCb2In
cyBwdWJsaWMga2V5IGZvciBQaGFzZTIgb2YgaGVyIHZlcnNpb24gb2YgdGhl
IERIDQoJICogcHJvdG9jb2wuDQoJICogQmVmb3JlIHNoZSBjYW4gZG8gc28s
IHNoZSBoYXMgdG8gaW5zdGFudGljYXRlIGEgREggcHVibGljIGtleQ0KCSAq
IGZyb20gQm9iJ3MgZW5jb2RlZCBrZXkgbWF0ZXJpYWwuDQoJICovDQoJS2V5
RmFjdG9yeSBhbGljZUtleUZhYyA9IEtleUZhY3RvcnkuZ2V0SW5zdGFuY2Uo
IkRIIik7DQoJeDUwOUtleVNwZWMgPSBuZXcgWDUwOUVuY29kZWRLZXlTcGVj
KGJvYlB1YktleUVuYyk7DQoJUHVibGljS2V5IGJvYlB1YktleSA9IGFsaWNl
S2V5RmFjLmdlbmVyYXRlUHVibGljKHg1MDlLZXlTcGVjKTsNCglTeXN0ZW0u
ZXJyLnByaW50bG4oIkFMSUNFOiBFeGVjdXRlIFBIQVNFMiAuLi4iKTsNCglh
bGljZUtleUFncmVlLmRvUGhhc2UoYm9iUHViS2V5LCB0cnVlKTsNCg0KCS8q
DQoJICogQm9iIHVzZXMgQWxpY2UncyBwdWJsaWMga2V5IGZvciBQaGFzZTIg
b2YgaGlzIHZlcnNpb24gb2YgdGhlIERIDQoJICogcHJvdG9jb2wuDQoJICov
DQoJU3lzdGVtLmVyci5wcmludGxuKCJCT0I6IEV4ZWN1dGUgUEhBU0UyIC4u
LiIpOw0KCWJvYktleUFncmVlLmRvUGhhc2UoYWxpY2VQdWJLZXksIHRydWUp
Ow0KCSAgICANCgkvKg0KCSAqIEF0IHRoaXMgc3RhZ2UsIGJvdGggQWxpY2Ug
YW5kIEJvYiBoYXZlIGNvbXBsZXRlZCB0aGUgREgga2V5DQoJICogYWdyZWVt
ZW50IHByb3RvY29sLg0KCSAqIEVhY2ggZ2VuZXJhdGVzIHRoZSAoc2FtZSkg
c2hhcmVkIHNlY3JldC4NCgkgKi8NCglieXRlW10gYWxpY2VTaGFyZWRTZWNy
ZXQgPSBhbGljZUtleUFncmVlLmdlbmVyYXRlU2VjcmV0KCk7DQoJaW50IGFs
aWNlTGVuID0gYWxpY2VTaGFyZWRTZWNyZXQubGVuZ3RoOw0KDQoJYnl0ZVtd
IGJvYlNoYXJlZFNlY3JldCA9IG5ldyBieXRlW2FsaWNlTGVuXTsNCglpbnQg
Ym9iTGVuOw0KCXRyeSB7DQoJICAgIC8vIHByb3ZpZGUgb3V0cHV0IGJ1ZmZl
ciB0aGF0IGlzIHRvbyBzaG9ydA0KCSAgICBib2JMZW4gPSBib2JLZXlBZ3Jl
ZS5nZW5lcmF0ZVNlY3JldChib2JTaGFyZWRTZWNyZXQsIDEpOw0KCX0gY2F0
Y2ggKFNob3J0QnVmZmVyRXhjZXB0aW9uIGUpIHsNCgkgICAgU3lzdGVtLm91
dC5wcmludGxuKGUuZ2V0TWVzc2FnZSgpKTsNCgl9DQoJLy8gcHJvdmlkZSBv
dXRwdXQgYnVmZmVyIG9mIHJlcXVpcmVkIHNpemUNCglib2JMZW4gPSBib2JL
ZXlBZ3JlZS5nZW5lcmF0ZVNlY3JldChib2JTaGFyZWRTZWNyZXQsIDApOw0K
DQoJU3lzdGVtLm91dC5wcmludGxuKCJBbGljZSBzZWNyZXQ6ICIgKyB0b0hl
eFN0cmluZyhhbGljZVNoYXJlZFNlY3JldCkpOw0KCVN5c3RlbS5vdXQucHJp
bnRsbigiQm9iIHNlY3JldDogIiArIHRvSGV4U3RyaW5nKGJvYlNoYXJlZFNl
Y3JldCkpOw0KDQoJaWYgKGFsaWNlTGVuICE9IGJvYkxlbikgew0KCSAgICB0
aHJvdyBuZXcgRXhjZXB0aW9uKCJTaGFyZWQgc2VjcmV0cyBoYXZlIGRpZmZl
cmVudCBsZW5ndGhzIik7DQoJfQ0KCWZvciAoaW50IGk9MDsgaTxhbGljZUxl
bjsgaSsrKSB7DQoJICAgIGlmIChhbGljZVNoYXJlZFNlY3JldFtpXSAhPSBi
b2JTaGFyZWRTZWNyZXRbaV0pIHsNCgkJdGhyb3cgbmV3IEV4Y2VwdGlvbigi
U2hhcmVkIHNlY3JldHMgZGlmZmVyIik7DQoJICAgIH0NCgl9DQoJU3lzdGVt
LmVyci5wcmludGxuKCJTaGFyZWQgc2VjcmV0cyBhcmUgdGhlIHNhbWUiKTsN
Cg0KCS8vIE5vdyBsZXQncyByZXR1cm4gdGhlIHNoYXJlZCBzZWNyZXQgYXMg
YSBTZWNyZXRLZXkgb2JqZWN0DQoJLy8gYW5kIHVzZSBpdCBmb3IgZW5jcnlw
dGlvbg0KCVN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuIHNoYXJlZCBzZWNy
ZXQgYXMgU2VjcmV0S2V5IG9iamVjdCAuLi4iKTsNCglib2JLZXlBZ3JlZS5k
b1BoYXNlKGFsaWNlUHViS2V5LCB0cnVlKTsNCglTZWNyZXRLZXkgZGVzS2V5
ID0gYm9iS2V5QWdyZWUuZ2VuZXJhdGVTZWNyZXQoIkRFUyIpOw0KDQoJQ2lw
aGVyIGRlc0NpcGhlciA9IENpcGhlci5nZXRJbnN0YW5jZSgiREVTL0VDQi9Q
S0NTNVBhZGRpbmciKTsNCglkZXNDaXBoZXIuaW5pdChDaXBoZXIuRU5DUllQ
VF9NT0RFLCBkZXNLZXkpOw0KDQoJYnl0ZVtdIGNsZWFydGV4dCA9ICJUaGlz
IGlzIGp1c3QgYW4gZXhhbXBsZSIuZ2V0Qnl0ZXMoKTsNCglieXRlW10gY2lw
aGVydGV4dCA9IGRlc0NpcGhlci5kb0ZpbmFsKGNsZWFydGV4dCk7DQoNCglk
ZXNDaXBoZXIuaW5pdChDaXBoZXIuREVDUllQVF9NT0RFLCBkZXNLZXkpOw0K
CWJ5dGVbXSBjbGVhcnRleHQxID0gZGVzQ2lwaGVyLmRvRmluYWwoY2lwaGVy
dGV4dCk7DQoJICAgIA0KCWludCBjbGVhckxlbiA9IGNsZWFydGV4dC5sZW5n
dGg7DQoJaW50IGNsZWFyMUxlbiA9IGNsZWFydGV4dDEubGVuZ3RoOw0KCWlm
IChjbGVhckxlbiAhPSBjbGVhcjFMZW4pIHsNCgkgICAgdGhyb3cgbmV3IEV4
Y2VwdGlvbigiRElGRkVSRU5UIik7DQoJfQ0KCWZvciAoaW50IGk9MDsgaSA8
IGNsZWFyMUxlbjsgaSsrKSB7DQoJICAgIGlmIChjbGVhcnRleHRbaV0gIT0g
Y2xlYXJ0ZXh0MVtpXSkgew0KCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJESUZG
RVJFTlQiKTsNCgkgICAgfQ0KCX0NCgkgICAgICAgDQoJU3lzdGVtLmVyci5w
cmludGxuKCJTQU1FIik7ICAgIA0KICAgIH0NCg0KICAgIC8qDQogICAgICog
Q29udmVydHMgYSBieXRlIHRvIGhleCBkaWdpdCBhbmQgd3JpdGVzIHRvIHRo
ZSBzdXBwbGllZCBidWZmZXINCiAgICAgKi8NCiAgICBwcml2YXRlIHZvaWQg
Ynl0ZTJoZXgoYnl0ZSBiLCBTdHJpbmdCdWZmZXIgYnVmKSB7DQogICAgICAg
IGNoYXJbXSBoZXhDaGFycyA9IHsgJzAnLCAnMScsICcyJywgJzMnLCAnNCcs
ICc1JywgJzYnLCAnNycsICc4JywNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnOScsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicgfTsNCiAg
ICAgICAgaW50IGhpZ2ggPSAoKGIgJiAweGYwKSA+PiA0KTsNCiAgICAgICAg
aW50IGxvdyA9IChiICYgMHgwZik7DQogICAgICAgIGJ1Zi5hcHBlbmQoaGV4
Q2hhcnNbaGlnaF0pOw0KICAgICAgICBidWYuYXBwZW5kKGhleENoYXJzW2xv
d10pOw0KICAgIH0NCg0KICAgIC8qDQogICAgICogQ29udmVydHMgYSBieXRl
IGFycmF5IHRvIGhleCBzdHJpbmcNCiAgICAgKi8NCiAgICBwcml2YXRlIFN0
cmluZyB0b0hleFN0cmluZyhieXRlW10gYmxvY2spIHsNCiAgICAgICAgU3Ry
aW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsNCg0KCWludCBs
ZW4gPSBibG9jay5sZW5ndGg7DQoNCiAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBsZW47IGkrKykgew0KICAgICAgICAgICAgIGJ5dGUyaGV4KGJsb2Nr
W2ldLCBidWYpOw0KCSAgICAgaWYgKGkgPCBsZW4tMSkgew0KCQkgYnVmLmFw
cGVuZCgiOiIpOw0KCSAgICAgfQ0KICAgICAgICB9IA0KICAgICAgICByZXR1
cm4gYnVmLnRvU3RyaW5nKCk7DQogICAgfQ0KDQogICAgLyoNCiAgICAgKiBQ
cmludHMgdGhlIHVzYWdlIG9mIHRoaXMgdGVzdC4NCiAgICAgKi8NCiAgICBw
cml2YXRlIHZvaWQgdXNhZ2UoKSB7DQoJU3lzdGVtLmVyci5wcmludCgiREhL
ZXlBZ3JlZW1lbnQgdXNhZ2U6ICIpOw0KCVN5c3RlbS5lcnIucHJpbnRsbigi
Wy1nZW5dIik7DQogICAgfQ0KDQogICAgLy8gVGhlIDEwMjQgYml0IERpZmZp
ZS1IZWxsbWFuIG1vZHVsdXMgdmFsdWVzIHVzZWQgYnkgU0tJUA0KICAgIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgc2tpcDEwMjRNb2R1bHVzQnl0ZXNb
XSA9IHsNCgkoYnl0ZSkweEY0LCAoYnl0ZSkweDg4LCAoYnl0ZSkweEZELCAo
Ynl0ZSkweDU4LA0KCShieXRlKTB4NEUsIChieXRlKTB4NDksIChieXRlKTB4
REIsIChieXRlKTB4Q0QsDQoJKGJ5dGUpMHgyMCwgKGJ5dGUpMHhCNCwgKGJ5
dGUpMHg5RCwgKGJ5dGUpMHhFNCwNCgkoYnl0ZSkweDkxLCAoYnl0ZSkweDA3
LCAoYnl0ZSkweDM2LCAoYnl0ZSkweDZCLA0KCShieXRlKTB4MzMsIChieXRl
KTB4NkMsIChieXRlKTB4MzgsIChieXRlKTB4MEQsDQoJKGJ5dGUpMHg0NSwg
KGJ5dGUpMHgxRCwgKGJ5dGUpMHgwRiwgKGJ5dGUpMHg3QywNCgkoYnl0ZSkw
eDg4LCAoYnl0ZSkweEIzLCAoYnl0ZSkweDFDLCAoYnl0ZSkweDdDLA0KCShi
eXRlKTB4NUIsIChieXRlKTB4MkQsIChieXRlKTB4OEUsIChieXRlKTB4RjYs
DQoJKGJ5dGUpMHhGMywgKGJ5dGUpMHhDOSwgKGJ5dGUpMHgyMywgKGJ5dGUp
MHhDMCwNCgkoYnl0ZSkweDQzLCAoYnl0ZSkweEYwLCAoYnl0ZSkweEE1LCAo
Ynl0ZSkweDVCLA0KCShieXRlKTB4MTgsIChieXRlKTB4OEQsIChieXRlKTB4
OEUsIChieXRlKTB4QkIsDQoJKGJ5dGUpMHg1NSwgKGJ5dGUpMHg4QywgKGJ5
dGUpMHhCOCwgKGJ5dGUpMHg1RCwNCgkoYnl0ZSkweDM4LCAoYnl0ZSkweEQz
LCAoYnl0ZSkweDM0LCAoYnl0ZSkweEZELA0KCShieXRlKTB4N0MsIChieXRl
KTB4MTcsIChieXRlKTB4NTcsIChieXRlKTB4NDMsDQoJKGJ5dGUpMHhBMywg
KGJ5dGUpMHgxRCwgKGJ5dGUpMHgxOCwgKGJ5dGUpMHg2QywNCgkoYnl0ZSkw
eERFLCAoYnl0ZSkweDMzLCAoYnl0ZSkweDIxLCAoYnl0ZSkweDJDLA0KCShi
eXRlKTB4QjUsIChieXRlKTB4MkEsIChieXRlKTB4RkYsIChieXRlKTB4M0Ms
DQoJKGJ5dGUpMHhFMSwgKGJ5dGUpMHhCMSwgKGJ5dGUpMHgyOSwgKGJ5dGUp
MHg0MCwNCgkoYnl0ZSkweDE4LCAoYnl0ZSkweDExLCAoYnl0ZSkweDhELCAo
Ynl0ZSkweDdDLA0KCShieXRlKTB4ODQsIChieXRlKTB4QTcsIChieXRlKTB4
MEEsIChieXRlKTB4NzIsDQoJKGJ5dGUpMHhENiwgKGJ5dGUpMHg4NiwgKGJ5
dGUpMHhDNCwgKGJ5dGUpMHgwMywNCgkoYnl0ZSkweDE5LCAoYnl0ZSkweEM4
LCAoYnl0ZSkweDA3LCAoYnl0ZSkweDI5LA0KCShieXRlKTB4N0EsIChieXRl
KTB4Q0EsIChieXRlKTB4OTUsIChieXRlKTB4MEMsDQoJKGJ5dGUpMHhEOSwg
KGJ5dGUpMHg5NiwgKGJ5dGUpMHg5RiwgKGJ5dGUpMHhBQiwNCgkoYnl0ZSkw
eEQwLCAoYnl0ZSkweDBBLCAoYnl0ZSkweDUwLCAoYnl0ZSkweDlCLA0KCShi
eXRlKTB4MDIsIChieXRlKTB4NDYsIChieXRlKTB4RDMsIChieXRlKTB4MDgs
DQoJKGJ5dGUpMHgzRCwgKGJ5dGUpMHg2NiwgKGJ5dGUpMHhBNCwgKGJ5dGUp
MHg1RCwNCgkoYnl0ZSkweDQxLCAoYnl0ZSkweDlGLCAoYnl0ZSkweDlDLCAo
Ynl0ZSkweDdDLA0KCShieXRlKTB4QkQsIChieXRlKTB4ODksIChieXRlKTB4
NEIsIChieXRlKTB4MjIsDQoJKGJ5dGUpMHgxOSwgKGJ5dGUpMHgyNiwgKGJ5
dGUpMHhCQSwgKGJ5dGUpMHhBQiwNCgkoYnl0ZSkweEEyLCAoYnl0ZSkweDVF
LCAoYnl0ZSkweEMzLCAoYnl0ZSkweDU1LA0KCShieXRlKTB4RTksIChieXRl
KTB4MkYsIChieXRlKTB4NzgsIChieXRlKTB4QzcNCiAgICB9Ow0KDQogICAg
Ly8gVGhlIFNLSVAgMTAyNCBiaXQgbW9kdWx1cw0KICAgIHByaXZhdGUgc3Rh
dGljIGZpbmFsIEJpZ0ludGVnZXIgc2tpcDEwMjRNb2R1bHVzDQogICAgPSBu
ZXcgQmlnSW50ZWdlcigxLCBza2lwMTAyNE1vZHVsdXNCeXRlcyk7DQoNCiAg
ICAvLyBUaGUgYmFzZSB1c2VkIHdpdGggdGhlIFNLSVAgMTAyNCBiaXQgbW9k
dWx1cw0KICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEJpZ0ludGVnZXIgc2tp
cDEwMjRCYXNlID0gQmlnSW50ZWdlci52YWx1ZU9mKDIpOw0KfQ0KPC9wcmU+
DQoNCjxIUj4NCg0KPExJPjxIMz5EaWZmaWUtSGVsbG1hbiBrZXkgZXhjaGFu
Z2UgYmV0d2VlbiAzIHBhcnRpZXM8L0gzPg0KDQo8cHJlPg0KLyoNCiAqIENv
cHlyaWdodCAxOTkzLTE5OTcgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiA5MDEg
U2FuIEFudG9uaW8gUm9hZCwgDQogKiBQYWxvIEFsdG8sIENhbGlmb3JuaWEs
IDk0MzAzLCBVLlMuQS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQogKiANCiAq
IFRoaXMgc29mdHdhcmUgaXMgdGhlIGNvbmZpZGVudGlhbCBhbmQgcHJvcHJp
ZXRhcnkgaW5mb3JtYXRpb24gb2YgU3VuDQogKiBNaWNyb3N5c3RlbXMsIElu
Yy4gKCJDb25maWRlbnRpYWwgSW5mb3JtYXRpb24iKS4gIFlvdSBzaGFsbCBu
b3QNCiAqIGRpc2Nsb3NlIHN1Y2ggQ29uZmlkZW50aWFsIEluZm9ybWF0aW9u
IGFuZCBzaGFsbCB1c2UgaXQgb25seSBpbg0KICogYWNjb3JkYW5jZSB3aXRo
IHRoZSB0ZXJtcyBvZiB0aGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IGVudGVy
ZWQgaW50bw0KICogd2l0aCBTdW4uDQogKiANCiAqIENvcHlyaWdodFZlcnNp
b24gMS4yDQogKiANCiAqLw0KDQppbXBvcnQgamF2YS5pby4qOw0KaW1wb3J0
IGphdmEubWF0aC5CaWdJbnRlZ2VyOw0KaW1wb3J0IGphdmEuc2VjdXJpdHku
KjsNCmltcG9ydCBqYXZhLnNlY3VyaXR5LnNwZWMuKjsNCmltcG9ydCBqYXZh
LnNlY3VyaXR5LmludGVyZmFjZXMuKjsNCmltcG9ydCBqYXZheC5jcnlwdG8u
KjsNCmltcG9ydCBqYXZheC5jcnlwdG8uc3BlYy4qOw0KaW1wb3J0IGphdmF4
LmNyeXB0by5pbnRlcmZhY2VzLio7DQppbXBvcnQgY29tLnN1bi5jcnlwdG8u
cHJvdmlkZXIuU3VuSkNFOw0KDQovKioNCiAqIFRoaXMgdGVzdCB1dGlsaXR5
IGV4ZWN1dGVzIHRoZSBEaWZmaWUtSGVsbG1hbiBrZXkgYWdyZWVtZW50IHBy
b3RvY29sDQogKiBiZXR3ZWVuIDMgcGFydGllczogQWxpY2UsIEJvYiwgYW5k
IENhcm9sLg0KICoNCiAqIFdlIHVzZSB0aGUgc2FtZSAxMDI0IGJpdCBwcmlt
ZSBtb2R1bHVzIGFuZCBiYXNlIGdlbmVyYXRvciB0aGF0IGFyZSB1c2VkIGJ5
DQogKiBTS0lQLg0KICovDQoNCnB1YmxpYyBjbGFzcyBESEtleUFncmVlbWVu
dDMgew0KDQogICAgcHJpdmF0ZSBESEtleUFncmVlbWVudDMoKSB7fQ0KDQog
ICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3ZbXSkgew0K
CXRyeSB7DQoJICAgIC8vIEFkZCBKQ0UgdG8gdGhlIGxpc3Qgb2YgcHJvdmlk
ZXJzDQogICAgICAgICAgICBTdW5KQ0UgamNlID0gbmV3IFN1bkpDRSgpOw0K
ICAgICAgICAgICAgU2VjdXJpdHkuYWRkUHJvdmlkZXIoamNlKTsNCg0KCSAg
ICBESEtleUFncmVlbWVudDMga2V5QWdyZWUgPSBuZXcgREhLZXlBZ3JlZW1l
bnQzKCk7DQoJICAgIGtleUFncmVlLnJ1bigpOw0KCX0gY2F0Y2ggKEV4Y2Vw
dGlvbiBlKSB7DQoJICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3I6ICIg
KyBlKTsNCgkgICAgU3lzdGVtLmV4aXQoMSk7DQoJfQ0KICAgIH0NCg0KICAg
IHByaXZhdGUgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsNCg0KCURI
UGFyYW1ldGVyU3BlYyBkaFNraXBQYXJhbVNwZWM7DQoNCglTeXN0ZW0uZXJy
LnByaW50bG4oIlVzaW5nIFNLSVAgRGlmZmllLUhlbGxtYW4gcGFyYW1ldGVy
cyIpOw0KCWRoU2tpcFBhcmFtU3BlYyA9IG5ldyBESFBhcmFtZXRlclNwZWMo
c2tpcDEwMjRNb2R1bHVzLCBza2lwMTAyNEJhc2UpOw0KDQoJLy8gQWxpY2Ug
Y3JlYXRlcyBoZXIgb3duIERIIGtleSBwYWlyDQoJU3lzdGVtLmVyci5wcmlu
dGxuKCJBTElDRTogR2VuZXJhdGUgREgga2V5cGFpciAuLi4iKTsNCglLZXlQ
YWlyR2VuZXJhdG9yIGFsaWNlS3BhaXJHZW4gPSBLZXlQYWlyR2VuZXJhdG9y
LmdldEluc3RhbmNlKCJESCIpOw0KCWFsaWNlS3BhaXJHZW4uaW5pdGlhbGl6
ZShkaFNraXBQYXJhbVNwZWMpOw0KCUtleVBhaXIgYWxpY2VLcGFpciA9IGFs
aWNlS3BhaXJHZW4uZ2VuZXJhdGVLZXlQYWlyKCk7DQoNCgkvLyBCb2IgY3Jl
YXRlcyBoaXMgb3duIERIIGtleSBwYWlyDQoJU3lzdGVtLmVyci5wcmludGxu
KCJCT0I6IEdlbmVyYXRlIERIIGtleXBhaXIgLi4uIik7DQoJS2V5UGFpckdl
bmVyYXRvciBib2JLcGFpckdlbiA9IEtleVBhaXJHZW5lcmF0b3IuZ2V0SW5z
dGFuY2UoIkRIIik7DQoJYm9iS3BhaXJHZW4uaW5pdGlhbGl6ZShkaFNraXBQ
YXJhbVNwZWMpOw0KCUtleVBhaXIgYm9iS3BhaXIgPSBib2JLcGFpckdlbi5n
ZW5lcmF0ZUtleVBhaXIoKTsNCg0KCS8vIENhcm9sIGNyZWF0ZXMgaGVyIG93
biBESCBrZXkgcGFpcg0KCVN5c3RlbS5lcnIucHJpbnRsbigiQ0FST0w6IEdl
bmVyYXRlIERIIGtleXBhaXIgLi4uIik7DQoJS2V5UGFpckdlbmVyYXRvciBj
YXJvbEtwYWlyR2VuID0gS2V5UGFpckdlbmVyYXRvci5nZXRJbnN0YW5jZSgi
REgiKTsNCgljYXJvbEtwYWlyR2VuLmluaXRpYWxpemUoZGhTa2lwUGFyYW1T
cGVjKTsNCglLZXlQYWlyIGNhcm9sS3BhaXIgPSBjYXJvbEtwYWlyR2VuLmdl
bmVyYXRlS2V5UGFpcigpOw0KDQoNCgkvLyBBbGljZSBpbml0aWFsaXplDQoJ
U3lzdGVtLmVyci5wcmludGxuKCJBTElDRTogSW5pdGlhbGl6ZSAuLi4iKTsN
CglLZXlBZ3JlZW1lbnQgYWxpY2VLZXlBZ3JlZSA9IEtleUFncmVlbWVudC5n
ZXRJbnN0YW5jZSgiREgiKTsNCglhbGljZUtleUFncmVlLmluaXQoYWxpY2VL
cGFpci5nZXRQcml2YXRlKCkpOw0KDQoJLy8gQm9iIGluaXRpYWxpemUNCglT
eXN0ZW0uZXJyLnByaW50bG4oIkJPQjogSW5pdGlhbGl6ZSAuLi4iKTsNCglL
ZXlBZ3JlZW1lbnQgYm9iS2V5QWdyZWUgPSBLZXlBZ3JlZW1lbnQuZ2V0SW5z
dGFuY2UoIkRIIik7DQoJYm9iS2V5QWdyZWUuaW5pdChib2JLcGFpci5nZXRQ
cml2YXRlKCkpOw0KDQoJLy8gQ2Fyb2wgaW5pdGlhbGl6ZQ0KCVN5c3RlbS5l
cnIucHJpbnRsbigiQ0FST0w6IEluaXRpYWxpemUgLi4uIik7DQoJS2V5QWdy
ZWVtZW50IGNhcm9sS2V5QWdyZWUgPSBLZXlBZ3JlZW1lbnQuZ2V0SW5zdGFu
Y2UoIkRIIik7DQoJY2Fyb2xLZXlBZ3JlZS5pbml0KGNhcm9sS3BhaXIuZ2V0
UHJpdmF0ZSgpKTsNCg0KDQoJLy8gQWxpY2UgdXNlcyBDYXJvbCdzIHB1Ymxp
YyBrZXkNCglLZXkgYWMgPSBhbGljZUtleUFncmVlLmRvUGhhc2UoY2Fyb2xL
cGFpci5nZXRQdWJsaWMoKSwgZmFsc2UpOw0KDQoJLy8gQm9iIHVzZXMgQWxp
Y2UncyBwdWJsaWMga2V5DQoJS2V5IGJhID0gYm9iS2V5QWdyZWUuZG9QaGFz
ZShhbGljZUtwYWlyLmdldFB1YmxpYygpLCBmYWxzZSk7DQoNCgkvLyBDYXJv
bCB1c2VzIEJvYidzIHB1YmxpYyBrZXkNCglLZXkgY2IgPSBjYXJvbEtleUFn
cmVlLmRvUGhhc2UoYm9iS3BhaXIuZ2V0UHVibGljKCksIGZhbHNlKTsNCg0K
DQoJLy8gQWxpY2UgdXNlcyBDYXJvbCdzIHJlc3VsdCBmcm9tIGFib3ZlDQoJ
YWxpY2VLZXlBZ3JlZS5kb1BoYXNlKGNiLCB0cnVlKTsNCg0KCS8vIEJvYiB1
c2VzIEFsaWNlJ3MgcmVzdWx0IGZyb20gYWJvdmUNCglib2JLZXlBZ3JlZS5k
b1BoYXNlKGFjLCB0cnVlKTsNCg0KCS8vIENhcm9sIHVzZXMgQm9iJ3MgcmVz
dWx0IGZyb20gYWJvdmUNCgljYXJvbEtleUFncmVlLmRvUGhhc2UoYmEsIHRy
dWUpOw0KDQoNCgkvLyBBbGljZSwgQm9iIGFuZCBDYXJvbCBjb21wdXRlIHRo
ZWlyIHNlY3JldHMNCglieXRlW10gYWxpY2VTaGFyZWRTZWNyZXQgPSBhbGlj
ZUtleUFncmVlLmdlbmVyYXRlU2VjcmV0KCk7DQoJaW50IGFsaWNlTGVuID0g
YWxpY2VTaGFyZWRTZWNyZXQubGVuZ3RoOw0KCVN5c3RlbS5vdXQucHJpbnRs
bigiQWxpY2Ugc2VjcmV0OiAiICsgdG9IZXhTdHJpbmcoYWxpY2VTaGFyZWRT
ZWNyZXQpKTsNCg0KCWJ5dGVbXSBib2JTaGFyZWRTZWNyZXQgPSBib2JLZXlB
Z3JlZS5nZW5lcmF0ZVNlY3JldCgpOw0KCWludCBib2JMZW4gPSBib2JTaGFy
ZWRTZWNyZXQubGVuZ3RoOw0KCVN5c3RlbS5vdXQucHJpbnRsbigiQm9iIHNl
Y3JldDogIiArIHRvSGV4U3RyaW5nKGJvYlNoYXJlZFNlY3JldCkpOw0KDQoJ
Ynl0ZVtdIGNhcm9sU2hhcmVkU2VjcmV0ID0gY2Fyb2xLZXlBZ3JlZS5nZW5l
cmF0ZVNlY3JldCgpOw0KCWludCBjYXJvbExlbiA9IGNhcm9sU2hhcmVkU2Vj
cmV0Lmxlbmd0aDsNCglTeXN0ZW0ub3V0LnByaW50bG4oIkNhcm9sIHNlY3Jl
dDogIiArIHRvSGV4U3RyaW5nKGNhcm9sU2hhcmVkU2VjcmV0KSk7DQoNCg0K
CS8vIENvbXBhcmUgQWxpY2UgYW5kIEJvYg0KCWlmIChhbGljZUxlbiAhPSBi
b2JMZW4pIHsNCgkgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQWxpY2UgYW5k
IEJvYiBoYXZlIGRpZmZlcmVudCBsZW5ndGhzIik7DQoJfQ0KCWZvciAoaW50
IGk9MDsgaTxhbGljZUxlbjsgaSsrKSB7DQoJICAgIGlmIChhbGljZVNoYXJl
ZFNlY3JldFtpXSAhPSBib2JTaGFyZWRTZWNyZXRbaV0pIHsNCgkJdGhyb3cg
bmV3IEV4Y2VwdGlvbigiQWxpY2UgYW5kIEJvYiBkaWZmZXIiKTsNCgkgICAg
fQ0KCX0NCglTeXN0ZW0uZXJyLnByaW50bG4oIkFsaWNlIGFuZCBCb2IgYXJl
IHRoZSBzYW1lIik7DQoNCgkvLyBDb21wYXJlIEJvYiBhbmQgQ2Fyb2wNCglp
ZiAoYm9iTGVuICE9IGNhcm9sTGVuKSB7DQoJICAgIHRocm93IG5ldyBFeGNl
cHRpb24oIkJvYiBhbmQgQ2Fyb2wgaGF2ZSBkaWZmZXJlbnQgbGVuZ3RocyIp
Ow0KCX0NCglmb3IgKGludCBpPTA7IGk8Ym9iTGVuOyBpKyspIHsNCgkgICAg
aWYgKGJvYlNoYXJlZFNlY3JldFtpXSAhPSBjYXJvbFNoYXJlZFNlY3JldFtp
XSkgew0KCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJCb2IgYW5kIENhcm9sIGRp
ZmZlciIpOw0KCSAgICB9DQoJfQ0KCVN5c3RlbS5lcnIucHJpbnRsbigiQm9i
IGFuZCBDYXJvbCBhcmUgdGhlIHNhbWUiKTsNCiAgICB9DQoNCg0KICAgIC8q
DQogICAgICogQ29udmVydHMgYSBieXRlIHRvIGhleCBkaWdpdCBhbmQgd3Jp
dGVzIHRvIHRoZSBzdXBwbGllZCBidWZmZXINCiAgICAgKi8NCiAgICBwcml2
YXRlIHZvaWQgYnl0ZTJoZXgoYnl0ZSBiLCBTdHJpbmdCdWZmZXIgYnVmKSB7
DQogICAgICAgIGNoYXJbXSBoZXhDaGFycyA9IHsgJzAnLCAnMScsICcyJywg
JzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnOScsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAn
RicgfTsNCiAgICAgICAgaW50IGhpZ2ggPSAoKGIgJiAweGYwKSA+PiA0KTsN
CiAgICAgICAgaW50IGxvdyA9IChiICYgMHgwZik7DQogICAgICAgIGJ1Zi5h
cHBlbmQoaGV4Q2hhcnNbaGlnaF0pOw0KICAgICAgICBidWYuYXBwZW5kKGhl
eENoYXJzW2xvd10pOw0KICAgIH0NCg0KICAgIC8qDQogICAgICogQ29udmVy
dHMgYSBieXRlIGFycmF5IHRvIGhleCBzdHJpbmcNCiAgICAgKi8NCiAgICBw
cml2YXRlIFN0cmluZyB0b0hleFN0cmluZyhieXRlW10gYmxvY2spIHsNCiAg
ICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsN
Cg0KCWludCBsZW4gPSBibG9jay5sZW5ndGg7DQoNCiAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBsZW47IGkrKykgew0KICAgICAgICAgICAgIGJ5dGUy
aGV4KGJsb2NrW2ldLCBidWYpOw0KCSAgICAgaWYgKGkgPCBsZW4tMSkgew0K
CQkgYnVmLmFwcGVuZCgiOiIpOw0KCSAgICAgfQ0KICAgICAgICB9IA0KICAg
ICAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCk7DQogICAgfQ0KDQogICAgLyoN
CiAgICAgKiBQcmludHMgdGhlIHVzYWdlIG9mIHRoaXMgdGVzdC4NCiAgICAg
Ki8NCiAgICBwcml2YXRlIHZvaWQgdXNhZ2UoKSB7DQoJU3lzdGVtLmVyci5w
cmludCgiREhLZXlBZ3JlZW1lbnQgdXNhZ2U6ICIpOw0KCVN5c3RlbS5lcnIu
cHJpbnRsbigiWy1nZW5dIik7DQogICAgfQ0KDQogICAgLy8gVGhlIDEwMjQg
Yml0IERpZmZpZS1IZWxsbWFuIG1vZHVsdXMgdmFsdWVzIHVzZWQgYnkgU0tJ
UA0KICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgc2tpcDEwMjRNb2R1
bHVzQnl0ZXNbXSA9IHsNCgkoYnl0ZSkweEY0LCAoYnl0ZSkweDg4LCAoYnl0
ZSkweEZELCAoYnl0ZSkweDU4LA0KCShieXRlKTB4NEUsIChieXRlKTB4NDks
IChieXRlKTB4REIsIChieXRlKTB4Q0QsDQoJKGJ5dGUpMHgyMCwgKGJ5dGUp
MHhCNCwgKGJ5dGUpMHg5RCwgKGJ5dGUpMHhFNCwNCgkoYnl0ZSkweDkxLCAo
Ynl0ZSkweDA3LCAoYnl0ZSkweDM2LCAoYnl0ZSkweDZCLA0KCShieXRlKTB4
MzMsIChieXRlKTB4NkMsIChieXRlKTB4MzgsIChieXRlKTB4MEQsDQoJKGJ5
dGUpMHg0NSwgKGJ5dGUpMHgxRCwgKGJ5dGUpMHgwRiwgKGJ5dGUpMHg3QywN
CgkoYnl0ZSkweDg4LCAoYnl0ZSkweEIzLCAoYnl0ZSkweDFDLCAoYnl0ZSkw
eDdDLA0KCShieXRlKTB4NUIsIChieXRlKTB4MkQsIChieXRlKTB4OEUsIChi
eXRlKTB4RjYsDQoJKGJ5dGUpMHhGMywgKGJ5dGUpMHhDOSwgKGJ5dGUpMHgy
MywgKGJ5dGUpMHhDMCwNCgkoYnl0ZSkweDQzLCAoYnl0ZSkweEYwLCAoYnl0
ZSkweEE1LCAoYnl0ZSkweDVCLA0KCShieXRlKTB4MTgsIChieXRlKTB4OEQs
IChieXRlKTB4OEUsIChieXRlKTB4QkIsDQoJKGJ5dGUpMHg1NSwgKGJ5dGUp
MHg4QywgKGJ5dGUpMHhCOCwgKGJ5dGUpMHg1RCwNCgkoYnl0ZSkweDM4LCAo
Ynl0ZSkweEQzLCAoYnl0ZSkweDM0LCAoYnl0ZSkweEZELA0KCShieXRlKTB4
N0MsIChieXRlKTB4MTcsIChieXRlKTB4NTcsIChieXRlKTB4NDMsDQoJKGJ5
dGUpMHhBMywgKGJ5dGUpMHgxRCwgKGJ5dGUpMHgxOCwgKGJ5dGUpMHg2QywN
CgkoYnl0ZSkweERFLCAoYnl0ZSkweDMzLCAoYnl0ZSkweDIxLCAoYnl0ZSkw
eDJDLA0KCShieXRlKTB4QjUsIChieXRlKTB4MkEsIChieXRlKTB4RkYsIChi
eXRlKTB4M0MsDQoJKGJ5dGUpMHhFMSwgKGJ5dGUpMHhCMSwgKGJ5dGUpMHgy
OSwgKGJ5dGUpMHg0MCwNCgkoYnl0ZSkweDE4LCAoYnl0ZSkweDExLCAoYnl0
ZSkweDhELCAoYnl0ZSkweDdDLA0KCShieXRlKTB4ODQsIChieXRlKTB4QTcs
IChieXRlKTB4MEEsIChieXRlKTB4NzIsDQoJKGJ5dGUpMHhENiwgKGJ5dGUp
MHg4NiwgKGJ5dGUpMHhDNCwgKGJ5dGUpMHgwMywNCgkoYnl0ZSkweDE5LCAo
Ynl0ZSkweEM4LCAoYnl0ZSkweDA3LCAoYnl0ZSkweDI5LA0KCShieXRlKTB4
N0EsIChieXRlKTB4Q0EsIChieXRlKTB4OTUsIChieXRlKTB4MEMsDQoJKGJ5
dGUpMHhEOSwgKGJ5dGUpMHg5NiwgKGJ5dGUpMHg5RiwgKGJ5dGUpMHhBQiwN
CgkoYnl0ZSkweEQwLCAoYnl0ZSkweDBBLCAoYnl0ZSkweDUwLCAoYnl0ZSkw
eDlCLA0KCShieXRlKTB4MDIsIChieXRlKTB4NDYsIChieXRlKTB4RDMsIChi
eXRlKTB4MDgsDQoJKGJ5dGUpMHgzRCwgKGJ5dGUpMHg2NiwgKGJ5dGUpMHhB
NCwgKGJ5dGUpMHg1RCwNCgkoYnl0ZSkweDQxLCAoYnl0ZSkweDlGLCAoYnl0
ZSkweDlDLCAoYnl0ZSkweDdDLA0KCShieXRlKTB4QkQsIChieXRlKTB4ODks
IChieXRlKTB4NEIsIChieXRlKTB4MjIsDQoJKGJ5dGUpMHgxOSwgKGJ5dGUp
MHgyNiwgKGJ5dGUpMHhCQSwgKGJ5dGUpMHhBQiwNCgkoYnl0ZSkweEEyLCAo
Ynl0ZSkweDVFLCAoYnl0ZSkweEMzLCAoYnl0ZSkweDU1LA0KCShieXRlKTB4
RTksIChieXRlKTB4MkYsIChieXRlKTB4NzgsIChieXRlKTB4QzcNCiAgICB9
Ow0KDQogICAgLy8gVGhlIFNLSVAgMTAyNCBiaXQgbW9kdWx1cw0KICAgIHBy
aXZhdGUgc3RhdGljIGZpbmFsIEJpZ0ludGVnZXIgc2tpcDEwMjRNb2R1bHVz
DQogICAgPSBuZXcgQmlnSW50ZWdlcigxLCBza2lwMTAyNE1vZHVsdXNCeXRl
cyk7DQoNCiAgICAvLyBUaGUgYmFzZSB1c2VkIHdpdGggdGhlIFNLSVAgMTAy
NCBiaXQgbW9kdWx1cw0KICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEJpZ0lu
dGVnZXIgc2tpcDEwMjRCYXNlID0gQmlnSW50ZWdlci52YWx1ZU9mKDIpOw0K
fQ0KPC9wcmU+DQoNCjwvVUw+DQoNCjxIUj4NClBsZWFzZSBzZW5kIGNvbW1l
bnRzIHRvOiA8YQ0KaHJlZj0ibWFpbHRvOmphdmEtc2VjdXJpdHlAamF2YS5z
dW4uY29tIj5qYXZhLXNlY3VyaXR5QGphdmEuc3VuLmNvbTwvYT4NCg0KPC9C
T0RZPg0KDQo8L0hUTUw+DQo=
---559023410-758783491-895101562=:19149--