Download Tracking

artur <[email protected]> Sun, 28 Mar 2010 12:59:44 +0200
Newsgroups gmane.network.freenet.frost.devel
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------000603090808070709060508
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 7bit

I have started to familiarize myself with the frost source code. As my 
first work I have implemented the ability to track which files have 
already been downloaded, so you do not download them a second time.
By default this feature is off, you can activate it in the properties menu.
When activated download keys are stored in a db, and each new download 
is compared to the files in the db. If there is a match the user will be 
warned and asked if he wants to continue the download.

So I would like if someone can review my patch

artur

--------------000603090808070709060508
Content-Type: text/plain;
 name="TrackDownloads.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="TrackDownloads.patch"

SW5kZXg6IHNvdXJjZS9mcm9zdC9Db3JlLmphdmENCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBzb3Vy
Y2UvZnJvc3QvQ29yZS5qYXZhCShyZXZpc2lvbiAzMTgwKQ0KKysrIHNvdXJjZS9mcm9zdC9D
b3JlLmphdmEJKHdvcmtpbmcgY29weSkNCkBAIC00MDAsNiArNDAwLDcgQEANCiAgICAgICAg
IEFyY2hpdmVNZXNzYWdlU3RvcmFnZS5pbnN0KCkuaW5pdFN0b3JhZ2UoKTsKICAgICAgICAg
SWRlbnRpdGllc1N0b3JhZ2UuaW5zdCgpLmluaXRTdG9yYWdlKCk7CiAgICAgICAgIEZpbGVM
aXN0U3RvcmFnZS5pbnN0KCkuaW5pdFN0b3JhZ2UoKTsKKyAgICAgICAgVHJhY2tEb3dubG9h
ZEtleXNTdG9yYWdlLmluc3QoKS5pbml0U3RvcmFnZSgpOwogCiAgICAgICAgIHNwbGFzaHNj
cmVlbi5zZXRUZXh0KGxhbmd1YWdlLmdldFN0cmluZygiU3BsYXNoc2NyZWVuLm1lc3NhZ2Uu
MiIpKTsKICAgICAgICAgc3BsYXNoc2NyZWVuLnNldFByb2dyZXNzKDQwKTsKQEAgLTU0Myw2
ICs1NDQsNyBAQA0KICAgICAgICAgc2F2ZXIuYWRkRXhpdFNhdmFibGUoQXJjaGl2ZU1lc3Nh
Z2VTdG9yYWdlLmluc3QoKSk7CiAgICAgICAgIHNhdmVyLmFkZEV4aXRTYXZhYmxlKElkZW50
aXRpZXNTdG9yYWdlLmluc3QoKSk7CiAgICAgICAgIHNhdmVyLmFkZEV4aXRTYXZhYmxlKEZp
bGVMaXN0U3RvcmFnZS5pbnN0KCkpOworICAgICAgICBzYXZlci5hZGRFeGl0U2F2YWJsZShU
cmFja0Rvd25sb2FkS2V5c1N0b3JhZ2UuaW5zdCgpKTsKIAogICAgICAgICAvLyBpbnZva2Ug
dGhlIG1haW5mcmFtZSB0aWNrZXIgKGJvYXJkIHVwZGF0ZXMsIGNsb2NrLCAuLi4pCiAgICAg
ICAgIG1haW5mcmFtZS5zdGFydFRpY2tlclRocmVhZCgpOwpJbmRleDogc291cmNlL2Zyb3N0
L2ZpbGVUcmFuc2Zlci9kb3dubG9hZC9Eb3dubG9hZE1hbmFnZXIuamF2YQ0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KLS0tIHNvdXJjZS9mcm9zdC9maWxlVHJhbnNmZXIvZG93bmxvYWQvRG93bmxvYWRN
YW5hZ2VyLmphdmEJKHJldmlzaW9uIDMxODApDQorKysgc291cmNlL2Zyb3N0L2ZpbGVUcmFu
c2Zlci9kb3dubG9hZC9Eb3dubG9hZE1hbmFnZXIuamF2YQkod29ya2luZyBjb3B5KQ0KQEAg
LTI1LDYgKzI1LDcgQEANCiBpbXBvcnQgZnJvc3QuZmNwLio7CiBpbXBvcnQgZnJvc3QuZmls
ZVRyYW5zZmVyLio7CiBpbXBvcnQgZnJvc3Quc3RvcmFnZS4qOworaW1wb3J0IGZyb3N0LnN0
b3JhZ2UucGVyc3QuKjsKIGltcG9ydCBmcm9zdC5zdG9yYWdlLnBlcnN0LmZpbGVsaXN0Lio7
CiBpbXBvcnQgZnJvc3QudXRpbC4qOwogaW1wb3J0IGZyb3N0LnV0aWwubW9kZWwuKjsKQEAg
LTI2MCw2ICsyNjEsMTUgQEANCiAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZEl0
ZW0uZ2V0RmlsZUxpc3RGaWxlT2JqZWN0KCkuZ2V0U2hhKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSApOwogICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBtYXliZSB0cmFjayBkb3dubG9hZAorICAg
ICAgICAgICAgaWYoIENvcmUuZnJvc3RTZXR0aW5ncy5nZXRCb29sVmFsdWUoU2V0dGluZ3ND
bGFzcy5UUkFDS19ET1dOTE9BRFNfRU5BQkxFRCkgJiYgIWRvd25sb2FkSXRlbS5pc1RyYWNr
ZWQoKSApIHsKKyAgICAgICAgICAgICAgICBUcmFja0Rvd25sb2FkS2V5c1N0b3JhZ2UgdHJh
Y2tEb3dubG9hZEtleXNTdG9yYWdlID0gVHJhY2tEb3dubG9hZEtleXNTdG9yYWdlLmluc3Qo
KTsKKyAgICAgICAgICAgICAgICB0cmFja0Rvd25sb2FkS2V5c1N0b3JhZ2Uuc3RvcmVJdGVt
KCAKKyAgICAgICAgICAgICAgICAgICAgbmV3IFRyYWNrRG93bmxvYWRLZXlzKCBkb3dubG9h
ZEl0ZW0uZ2V0S2V5KCksIGRvd25sb2FkSXRlbS5nZXRGaWxlbmFtZSgpLCAiIiwgZG93bmxv
YWRJdGVtLmdldEZpbGVTaXplKCksIGRvd25sb2FkSXRlbS5nZXREb3dubG9hZEZpbmlzaGVk
TWlsbGlzKCkgKQorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgZG93bmxv
YWRJdGVtLnNldFRyYWNrZWQodHJ1ZSk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IC8vIG1heWJlIGxvZyBzdWNjZXNzZnVsIGRvd25sb2FkIHRvIGZpbGUgbG9jYWxkYXRhL2Rv
d25sb2Fkcy50eHQKICAgICAgICAgICAgIGlmKCBDb3JlLmZyb3N0U2V0dGluZ3MuZ2V0Qm9v
bFZhbHVlKFNldHRpbmdzQ2xhc3MuTE9HX0RPV05MT0FEU19FTkFCTEVEKSAmJiAhZG93bmxv
YWRJdGVtLmlzTG9nZ2VkVG9GaWxlKCkgKSB7CkluZGV4OiBzb3VyY2UvZnJvc3QvZmlsZVRy
YW5zZmVyL2Rvd25sb2FkL0Rvd25sb2FkTW9kZWwuamF2YQ0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IHNvdXJjZS9mcm9zdC9maWxlVHJhbnNmZXIvZG93bmxvYWQvRG93bmxvYWRNb2RlbC5qYXZh
CShyZXZpc2lvbiAzMTgwKQ0KKysrIHNvdXJjZS9mcm9zdC9maWxlVHJhbnNmZXIvZG93bmxv
YWQvRG93bmxvYWRNb2RlbC5qYXZhCSh3b3JraW5nIGNvcHkpDQpAQCAtMjAsOSArMjAsMTQg
QEANCiBpbXBvcnQgamF2YS51dGlsLio7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuKjsK
IAoraW1wb3J0IGphdmF4LnN3aW5nLkpPcHRpb25QYW5lOworCitpbXBvcnQgZnJvc3QuQ29y
ZTsKK2ltcG9ydCBmcm9zdC5TZXR0aW5nc0NsYXNzOwogaW1wb3J0IGZyb3N0LmZpbGVUcmFu
c2Zlci4qOwogaW1wb3J0IGZyb3N0LnN0b3JhZ2UuKjsKIGltcG9ydCBmcm9zdC5zdG9yYWdl
LnBlcnN0Lio7CitpbXBvcnQgZnJvc3QudXRpbC5ndWkudHJhbnNsYXRpb24uTGFuZ3VhZ2U7
CiBpbXBvcnQgZnJvc3QudXRpbC5tb2RlbC4qOwogCiAvKioKQEAgLTQ2LDggKzUxLDI5IEBA
DQogCXB1YmxpYyBzeW5jaHJvbml6ZWQgYm9vbGVhbiBhZGREb3dubG9hZEl0ZW0oZmluYWwg
RnJvc3REb3dubG9hZEl0ZW0gaXRlbVRvQWRkKSB7CiAKICAgICAgICAgZmluYWwgRnJvc3RG
aWxlTGlzdEZpbGVPYmplY3QgZmxmVG9BZGQgPSBpdGVtVG9BZGQuZ2V0RmlsZUxpc3RGaWxl
T2JqZWN0KCk7IC8vIG1heWJlIG51bGwgb2YgbWFudWFsbHkgYWRkZWQKLQotCQlmb3IgKGlu
dCB4ID0gMDsgeCA8IGdldEl0ZW1Db3VudCgpOyB4KyspIHsKKyAgICAgICAgCisgICAgICAg
IC8vIElmIGRvd25sb2FkIHRyYWNraW5nIGlzIGVuYWJsZWQsIGNoZWNrIGlmIGZpbGUgaGFz
IG5vdCBiZWVuIGFscmVhZHkgZG93bmxvYWRlZAorICAgICAgICBpZiggQ29yZS5mcm9zdFNl
dHRpbmdzLmdldEJvb2xWYWx1ZShTZXR0aW5nc0NsYXNzLlRSQUNLX0RPV05MT0FEU19FTkFC
TEVEKSApIHsKKyAgICAgICAgCQorICAgICAgICAJLy8gT25seSBjaGVjayBpZiB0aGUgZmls
ZSBpcyBub3QgbGluZ2VyaW5nIGFyb3VuZCBpbiBmaW5pc2hlZCBzdGF0ZS4uLgorICAgICAg
ICAJaWYoICEgaXRlbVRvQWRkLmlzVHJhY2tlZCgpICl7CisJICAgICAgICAgICAgVHJhY2tE
b3dubG9hZEtleXNTdG9yYWdlIHRyYWNrRG93bmxvYWRLZXlzU3RvcmFnZSA9IFRyYWNrRG93
bmxvYWRLZXlzU3RvcmFnZS5pbnN0KCk7CisJICAgICAgICAgICAgaWYoIHRyYWNrRG93bmxv
YWRLZXlzU3RvcmFnZS5zZWFyY2hJdGVtKCBpdGVtVG9BZGQuZ2V0S2V5KCkgKSApIHsKKwkg
ICAgICAgICAgICAJTGFuZ3VhZ2UgbGFuZ3VhZ2UgPSBMYW5ndWFnZS5nZXRJbnN0YW5jZSgp
OworCSAgICAgICAgICAgIAkKKwkgICAgICAgICAgICAJLy8gQXNrIGlmIHRvIGRvd25sb2Fk
IGFnYWluCisJICAgICAgICAgICAgCWlmKCBKT3B0aW9uUGFuZS5zaG93Q29uZmlybURpYWxv
ZygKKwkgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAorCSAgICAgICAgICAgICAgICAg
ICAgICAgIGxhbmd1YWdlLmZvcm1hdE1lc3NhZ2UoIkRvd25sb2FkUGFuZS5hbHJlYWR5VHJh
Y2tlZERpYWxvZy5ib2R5IiwgaXRlbVRvQWRkLmdldEtleSgpKSwKKwkgICAgICAgICAgICAg
ICAgICAgICAgICBsYW5ndWFnZS5nZXRTdHJpbmcoIkRvd25sb2FkUGFuZS5hbHJlYWR5VHJh
Y2tlZERpYWxvZy50aXRsZSIpLAorCSAgICAgICAgICAgICAgICAgICAgICAgIEpPcHRpb25Q
YW5lLllFU19OT19PUFRJT04pID09IDEgKSB7CisJICAgICAgICAgICAgCQlyZXR1cm4gZmFs
c2U7CisJICAgICAgICAgICAgCX0KKwkgICAgICAgICAgICB9CisgICAgICAgIAl9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZ2V0SXRlbUNv
dW50KCk7IHgrKykgewogCQkJZmluYWwgRnJvc3REb3dubG9hZEl0ZW0gaXRlbSA9IChGcm9z
dERvd25sb2FkSXRlbSkgZ2V0SXRlbUF0KHgpOwogICAgICAgICAgICAgZmluYWwgRnJvc3RG
aWxlTGlzdEZpbGVPYmplY3QgZmxmID0gaXRlbS5nZXRGaWxlTGlzdEZpbGVPYmplY3QoKTsg
Ly8gbWF5YmUgbnVsbCBvZiBtYW51YWxseSBhZGRlZAogCkluZGV4OiBzb3VyY2UvZnJvc3Qv
ZmlsZVRyYW5zZmVyL2Rvd25sb2FkL0Rvd25sb2FkUGFuZWwuamF2YQ0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLS0tIHNvdXJjZS9mcm9zdC9maWxlVHJhbnNmZXIvZG93bmxvYWQvRG93bmxvYWRQYW5l
bC5qYXZhCShyZXZpc2lvbiAzMTgwKQ0KKysrIHNvdXJjZS9mcm9zdC9maWxlVHJhbnNmZXIv
ZG93bmxvYWQvRG93bmxvYWRQYW5lbC5qYXZhCSh3b3JraW5nIGNvcHkpDQpAQCAtMzQsNiAr
MzQsNyBAQA0KIGltcG9ydCBmcm9zdC5mY3AuKjsKIGltcG9ydCBmcm9zdC5maWxlVHJhbnNm
ZXIuKjsKIGltcG9ydCBmcm9zdC5maWxlVHJhbnNmZXIuY29tbW9uLio7CitpbXBvcnQgZnJv
c3Quc3RvcmFnZS5wZXJzdC5UcmFja0Rvd25sb2FkS2V5c1N0b3JhZ2U7CiBpbXBvcnQgZnJv
c3QudXRpbC4qOwogaW1wb3J0IGZyb3N0LnV0aWwuZ3VpLio7CiBpbXBvcnQgZnJvc3QudXRp
bC5ndWkuc2VhcmNoLio7CkBAIC0yNzMsNyArMjc0LDcgQEANCiAgICAgICAgICAgICAgICAg
ICAgIHNob3dJbnZhbGlkS2V5RXJyb3JEaWFsb2coa2V5KTsKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotCisgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgLy8gYWRkIHZhbGlkIGtleSB0byBkb3dubG9hZCB0YWJsZQogICAg
ICAgICAgICAgICAgIEZpbGVUcmFuc2Zlck1hbmFnZXIuaW5zdCgpLmdldERvd25sb2FkTWFu
YWdlcigpLmFkZE5ld0Rvd25sb2FkKGtleSwgZmlsZU5hbWUpOwogICAgICAgICAgICAgfQpA
QCAtMjkxLDcgKzI5Miw3IEBADQogICAgICAgICAgICAgICAgIGxhbmd1YWdlLmdldFN0cmlu
ZygiRG93bmxvYWRQYW5lLmludmFsaWRLZXlEaWFsb2cudGl0bGUiKSwKICAgICAgICAgICAg
ICAgICBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKICAgICB9Ci0KKyAgICAKIAkvKioK
IAkgKiBHZXQga2V5VHlwZWQgZm9yIGRvd25sb2FkVGFibGUKIAkgKi8KSW5kZXg6IHNvdXJj
ZS9mcm9zdC9maWxlVHJhbnNmZXIvZG93bmxvYWQvRnJvc3REb3dubG9hZEl0ZW0uamF2YQ0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIHNvdXJjZS9mcm9zdC9maWxlVHJhbnNmZXIvZG93bmxvYWQv
RnJvc3REb3dubG9hZEl0ZW0uamF2YQkocmV2aXNpb24gMzE4MCkNCisrKyBzb3VyY2UvZnJv
c3QvZmlsZVRyYW5zZmVyL2Rvd25sb2FkL0Zyb3N0RG93bmxvYWRJdGVtLmphdmEJKHdvcmtp
bmcgY29weSkNCkBAIC01MCw2ICs1MCw3IEBADQogICAgIHByaXZhdGUgU3RyaW5nIGdxSWRl
bnRpZmllciA9IG51bGw7CiAKICAgICBwcml2YXRlIGJvb2xlYW4gaXNMb2dnZWRUb0ZpbGUg
PSBmYWxzZTsKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNUcmFja2VkID0gZmFsc2U7CiAKICAg
ICBwcml2YXRlIGludCBydW50aW1lU2Vjb25kc1dpdGhvdXRQcm9ncmVzcyA9IDA7CiAgICAg
cHJpdmF0ZSBpbnQgb2xkRG9uZUJsb2NrcyA9IDA7CkBAIC0xNDQsNiArMTQ1LDcgQEANCiAg
ICAgICAgICAgICBmaW5hbCBsb25nIG5ld0xhc3REb3dubG9hZFN0b3BUaW1lLAogICAgICAg
ICAgICAgZmluYWwgU3RyaW5nIG5ld0dxSWQsCiAgICAgICAgICAgICBmaW5hbCBib29sZWFu
IG5ld0lzTG9nZ2VkVG9GaWxlLAorICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBuZXdJc1Ry
YWNrZWQsCiAgICAgICAgICAgICBmaW5hbCBpbnQgbmV3UnVudGltZVNlY29uZHNXaXRob3V0
UHJvZ3Jlc3MsCiAgICAgICAgICAgICBmaW5hbCBpbnQgbmV3T2xkRG9uZUJsb2NrcykKICAg
ICB7CkBAIC0xNjAsNiArMTYyLDcgQEANCiAgICAgICAgIGxhc3REb3dubG9hZFN0b3BUaW1l
ID0gbmV3TGFzdERvd25sb2FkU3RvcFRpbWU7CiAgICAgICAgIGdxSWRlbnRpZmllciA9IG5l
d0dxSWQ7CiAgICAgICAgIGlzTG9nZ2VkVG9GaWxlPSBuZXdJc0xvZ2dlZFRvRmlsZTsKKyAg
ICAgICAgaXNUcmFja2VkPSBuZXdJc1RyYWNrZWQ7CiAgICAgICAgIHJ1bnRpbWVTZWNvbmRz
V2l0aG91dFByb2dyZXNzID0gbmV3UnVudGltZVNlY29uZHNXaXRob3V0UHJvZ3Jlc3M7CiAg
ICAgICAgIG9sZERvbmVCbG9ja3MgPSBuZXdPbGREb25lQmxvY2tzOwogCkBAIC00NjMsMTAg
KzQ2NiwxOCBAQA0KICAgICBwdWJsaWMgYm9vbGVhbiBpc0xvZ2dlZFRvRmlsZSgpIHsKICAg
ICAgICAgcmV0dXJuIGlzTG9nZ2VkVG9GaWxlOwogICAgIH0KKyAgICAKKyAgICBwdWJsaWMg
Ym9vbGVhbiBpc1RyYWNrZWQoKSB7CisgICAgICAgIHJldHVybiBpc1RyYWNrZWQ7CisgICAg
fQogCiAgICAgcHVibGljIHZvaWQgc2V0TG9nZ2VkVG9GaWxlKGZpbmFsIGJvb2xlYW4gaXNM
b2dnZWRUb0ZpbGUpIHsKICAgICAgICAgdGhpcy5pc0xvZ2dlZFRvRmlsZSA9IGlzTG9nZ2Vk
VG9GaWxlOwogICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBzZXRUcmFja2VkKGZpbmFs
IGJvb2xlYW4gaXNUcmFja2VkKSB7CisgICAgICAgIHRoaXMuaXNUcmFja2VkID0gaXNUcmFj
a2VkOworICAgIH0KIAogICAgIC8qKgogICAgICAqIEByZXR1cm4gIHRoZSBydW50aW1lIG9m
IHRoaXMgZG93bmxvYWQgaXRlbSBpbiBzZWNvbmRzCkluZGV4OiBzb3VyY2UvZnJvc3QvZ3Vp
L3ByZWZlcmVuY2VzL0Rvd25sb2FkUGFuZWwuamF2YQ0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHNv
dXJjZS9mcm9zdC9ndWkvcHJlZmVyZW5jZXMvRG93bmxvYWRQYW5lbC5qYXZhCShyZXZpc2lv
biAzMTgwKQ0KKysrIHNvdXJjZS9mcm9zdC9ndWkvcHJlZmVyZW5jZXMvRG93bmxvYWRQYW5l
bC5qYXZhCSh3b3JraW5nIGNvcHkpDQpAQCAtNTgsNiArNTgsNyBAQA0KICAgICBwcml2YXRl
IGZpbmFsIEpMYWJlbCB0aHJlYWRzVGV4dExhYmVsID0gbmV3IEpMYWJlbCgpOwogCiAgICAg
cHJpdmF0ZSBmaW5hbCBKQ2hlY2tCb3ggbG9nRG93bmxvYWRzQ2hlY2tCb3ggPSBuZXcgSkNo
ZWNrQm94KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBKQ2hlY2tCb3ggdHJhY2tEb3dubG9hZHND
aGVja0JveCA9IG5ldyBKQ2hlY2tCb3goKTsKIAogICAgIHByaXZhdGUgZmluYWwgSkxhYmVs
IHdhaXRUaW1lTGFiZWwgPSBuZXcgSkxhYmVsKCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBKVGV4
dEZpZWxkIHdhaXRUaW1lVGV4dEZpZWxkID0gbmV3IEpUZXh0RmllbGQoNik7CkBAIC0xNjIs
NiArMTYzLDEzIEBADQogICAgICAgICBjb25zdHJhaW50cy5ncmlkeCA9IDA7CiAgICAgICAg
IGNvbnN0cmFpbnRzLmdyaWR3aWR0aCA9IDM7CiAgICAgICAgIGNvbnN0cmFpbnRzLmluc2V0
cyA9IGluc2V0czA1NTU7CisgICAgICAgIGNvbnN0cmFpbnRzLmFuY2hvciA9IEdyaWRCYWdD
b25zdHJhaW50cy5OT1JUSFdFU1Q7CisgICAgICAgIGFkZCh0cmFja0Rvd25sb2Fkc0NoZWNr
Qm94LCBjb25zdHJhaW50cyk7CisKKyAgICAgICAgY29uc3RyYWludHMuZ3JpZHkrKzsKKyAg
ICAgICAgY29uc3RyYWludHMuZ3JpZHggPSAwOworICAgICAgICBjb25zdHJhaW50cy5ncmlk
d2lkdGggPSAzOworICAgICAgICBjb25zdHJhaW50cy5pbnNldHMgPSBpbnNldHMwNTU1Owog
ICAgICAgICBhZGQoZW5mb3JjZUZyb3N0UHJpb3JpdHlGaWxlRG93bmxvYWQsIGNvbnN0cmFp
bnRzKTsKIAogICAgICAgICAvLyBnbHVlCkBAIC0xODQsNiArMTkyLDcgQEANCiAgICAgICAg
IG1heFJldHJpZXNUZXh0RmllbGQuc2V0VGV4dCgiIiArIHNldHRpbmdzLmdldEludFZhbHVl
KFNldHRpbmdzQ2xhc3MuRE9XTkxPQURfTUFYX1JFVFJJRVMpKTsKICAgICAgICAgd2FpdFRp
bWVUZXh0RmllbGQuc2V0VGV4dCgiIiArIHNldHRpbmdzLmdldEludFZhbHVlKFNldHRpbmdz
Q2xhc3MuRE9XTkxPQURfV0FJVFRJTUUpKTsKICAgICAgICAgbG9nRG93bmxvYWRzQ2hlY2tC
b3guc2V0U2VsZWN0ZWQoc2V0dGluZ3MuZ2V0Qm9vbFZhbHVlKFNldHRpbmdzQ2xhc3MuTE9H
X0RPV05MT0FEU19FTkFCTEVEKSk7CisgICAgICAgIHRyYWNrRG93bmxvYWRzQ2hlY2tCb3gu
c2V0U2VsZWN0ZWQoc2V0dGluZ3MuZ2V0Qm9vbFZhbHVlKFNldHRpbmdzQ2xhc3MuVFJBQ0tf
RE9XTkxPQURTX0VOQUJMRUQpKTsKICAgICAgICAgcHJpb3JpdHlUZXh0RmllbGQuc2V0VGV4
dChzZXR0aW5ncy5nZXRWYWx1ZShTZXR0aW5nc0NsYXNzLkZDUDJfREVGQVVMVF9QUklPX0ZJ
TEVfRE9XTkxPQUQpKTsKICAgICAgICAgZW5mb3JjZUZyb3N0UHJpb3JpdHlGaWxlRG93bmxv
YWQuc2V0U2VsZWN0ZWQoc2V0dGluZ3MuZ2V0Qm9vbFZhbHVlKFNldHRpbmdzQ2xhc3MuRkNQ
Ml9FTkZPUkNFX0ZST1NUX1BSSU9fRklMRV9ET1dOTE9BRCkpOwogICAgIH0KQEAgLTE5OSw2
ICsyMDgsNyBAQA0KICAgICAgICAgbWF4UmV0cmllc0xhYmVsLnNldFRleHQobGFuZ3VhZ2Uu
Z2V0U3RyaW5nKCJPcHRpb25zLmRvd25sb2Fkcy5tYXhpbXVtTnVtYmVyT2ZSZXRyaWVzIikp
OwogCiAgICAgICAgIGxvZ0Rvd25sb2Fkc0NoZWNrQm94LnNldFRleHQobGFuZ3VhZ2UuZ2V0
U3RyaW5nKCJPcHRpb25zLmRvd25sb2Fkcy5sb2dEb3dubG9hZHMiKSk7CisgICAgICAgIHRy
YWNrRG93bmxvYWRzQ2hlY2tCb3guc2V0VGV4dChsYW5ndWFnZS5nZXRTdHJpbmcoIk9wdGlv
bnMuZG93bmxvYWRzLnRyYWNrRG93bmxvYWRzIikpOwogCiAgICAgICAgIGRpcmVjdG9yeUxh
YmVsLnNldFRleHQobGFuZ3VhZ2UuZ2V0U3RyaW5nKCJPcHRpb25zLmRvd25sb2Fkcy5kb3du
bG9hZERpcmVjdG9yeSIpKTsKICAgICAgICAgYnJvd3NlRGlyZWN0b3J5QnV0dG9uLnNldFRl
eHQobGFuZ3VhZ2UuZ2V0U3RyaW5nKCJDb21tb24uYnJvd3NlIikgKyAiLi4uIik7CkBAIC0y
MjYsNiArMjM2LDcgQEANCiAgICAgICAgIHNldHRpbmdzLnNldFZhbHVlKFNldHRpbmdzQ2xh
c3MuRE9XTkxPQURfV0FJVFRJTUUsIHdhaXRUaW1lVGV4dEZpZWxkLmdldFRleHQoKSk7CiAK
ICAgICAgICAgc2V0dGluZ3Muc2V0VmFsdWUoU2V0dGluZ3NDbGFzcy5MT0dfRE9XTkxPQURT
X0VOQUJMRUQsIGxvZ0Rvd25sb2Fkc0NoZWNrQm94LmlzU2VsZWN0ZWQoKSk7CisgICAgICAg
IHNldHRpbmdzLnNldFZhbHVlKFNldHRpbmdzQ2xhc3MuVFJBQ0tfRE9XTkxPQURTX0VOQUJM
RUQsIHRyYWNrRG93bmxvYWRzQ2hlY2tCb3guaXNTZWxlY3RlZCgpKTsKICAgICAgICAgc2V0
dGluZ3Muc2V0VmFsdWUoU2V0dGluZ3NDbGFzcy5GQ1AyX0RFRkFVTFRfUFJJT19GSUxFX0RP
V05MT0FELCBwcmlvcml0eVRleHRGaWVsZC5nZXRUZXh0KCkpOwogICAgICAgICBzZXR0aW5n
cy5zZXRWYWx1ZShTZXR0aW5nc0NsYXNzLkZDUDJfRU5GT1JDRV9GUk9TVF9QUklPX0ZJTEVf
RE9XTkxPQUQsIGVuZm9yY2VGcm9zdFByaW9yaXR5RmlsZURvd25sb2FkLmlzU2VsZWN0ZWQo
KSk7CiAgICAgfQpJbmRleDogc291cmNlL2Zyb3N0L1NldHRpbmdzQ2xhc3MuamF2YQ0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLS0tIHNvdXJjZS9mcm9zdC9TZXR0aW5nc0NsYXNzLmphdmEJKHJldmlz
aW9uIDMxODApDQorKysgc291cmNlL2Zyb3N0L1NldHRpbmdzQ2xhc3MuamF2YQkod29ya2lu
ZyBjb3B5KQ0KQEAgLTI1Nyw2ICsyNTcsOCBAQA0KIAogICAgIHB1YmxpYyBzdGF0aWMgZmlu
YWwgU3RyaW5nIExPR19ET1dOTE9BRFNfRU5BQkxFRCA9ICJsb2dEb3dubG9hZHMiOwogICAg
IHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPR19VUExPQURTX0VOQUJMRUQgPSAibG9n
VXBsb2FkcyI7CisgICAgCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBQ0tf
RE9XTkxPQURTX0VOQUJMRUQgPSAidHJhY2tEb3dubG9hZHMiOwogCiAgICAgcHVibGljIFNl
dHRpbmdzQ2xhc3MoKSB7CiAgICAgICAgIHNldHRpbmdzSGFzaCA9IG5ldyBIYXNodGFibGU8
U3RyaW5nLE9iamVjdD4oKTsKQEAgLTEwMTcsNyArMTAxOSw5IEBADQogCiAgICAgICAgIGRl
ZmF1bHRzLnB1dChMT0dfRE9XTkxPQURTX0VOQUJMRUQsICJmYWxzZSIpOwogICAgICAgICBk
ZWZhdWx0cy5wdXQoTE9HX1VQTE9BRFNfRU5BQkxFRCwgImZhbHNlIik7CisgICAgICAgIGRl
ZmF1bHRzLnB1dChUUkFDS19ET1dOTE9BRFNfRU5BQkxFRCwgImZhbHNlIik7CiAKKyAgICAg
ICAgCiAgICAgICAgIGRlZmF1bHRzLnB1dChDT05GSVJNX01BUktfQUxMX01TR1NfUkVBRCwg
InRydWUiKTsKIAogICAgICAgICBkZWZhdWx0cy5wdXQoUEVSU1RfUEFHRVBPT0xTSVpFX0ZJ
TEVTLCAgICAgICAgICAgICAgIjUxMiIpOwpJbmRleDogc291cmNlL2Zyb3N0L3N0b3JhZ2Uv
cGVyc3QvUGVyc3RGcm9zdERvd25sb2FkSXRlbS5qYXZhDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
c291cmNlL2Zyb3N0L3N0b3JhZ2UvcGVyc3QvUGVyc3RGcm9zdERvd25sb2FkSXRlbS5qYXZh
CShyZXZpc2lvbiAzMTgwKQ0KKysrIHNvdXJjZS9mcm9zdC9zdG9yYWdlL3BlcnN0L1BlcnN0
RnJvc3REb3dubG9hZEl0ZW0uamF2YQkod29ya2luZyBjb3B5KQ0KQEAgLTQ5LDYgKzQ5LDcg
QEANCiAgICAgcHVibGljIFN0cmluZyBmaWxlTGlzdEZpbGVTaGE7DQogDQogICAgIHB1Ymxp
YyBib29sZWFuIGlzTG9nZ2VkVG9GaWxlOw0KKyAgICBwdWJsaWMgYm9vbGVhbiBpc1RyYWNr
ZWQ7DQogDQogICAgIHB1YmxpYyBpbnQgcnVudGltZVNlY29uZHNXaXRob3V0UHJvZ3Jlc3M7
DQogICAgIHB1YmxpYyBpbnQgb2xkRG9uZUJsb2NrczsNCkBAIC03MCw2ICs3MSw3IEBADQog
ICAgICAgICBncUlkZW50aWZpZXIgPSBkbEl0ZW0uZ2V0R3FJZGVudGlmaWVyKCk7DQogICAg
ICAgICBmaWxlTGlzdEZpbGVTaGEgPSAoZGxJdGVtLmdldEZpbGVMaXN0RmlsZU9iamVjdCgp
PT1udWxsP251bGw6ZGxJdGVtLmdldEZpbGVMaXN0RmlsZU9iamVjdCgpLmdldFNoYSgpKTsN
CiAgICAgICAgIGlzTG9nZ2VkVG9GaWxlID0gZGxJdGVtLmlzTG9nZ2VkVG9GaWxlKCk7DQor
ICAgICAgICBpc1RyYWNrZWQgPSBkbEl0ZW0uaXNUcmFja2VkKCk7DQogICAgICAgICBydW50
aW1lU2Vjb25kc1dpdGhvdXRQcm9ncmVzcyA9IGRsSXRlbS5nZXRSdW50aW1lU2Vjb25kc1dp
dGhvdXRQcm9ncmVzcygpOw0KICAgICAgICAgb2xkRG9uZUJsb2NrcyA9IGRsSXRlbS5nZXRP
bGREb25lQmxvY2tzKCk7DQogICAgIH0NCkBAIC0xMDEsNiArMTAzLDcgQEANCiAgICAgICAg
ICAgICAgICAgbGFzdERvd25sb2FkU3RvcFRpbWUsDQogICAgICAgICAgICAgICAgIGdxSWRl
bnRpZmllciwNCiAgICAgICAgICAgICAgICAgaXNMb2dnZWRUb0ZpbGUsDQorICAgICAgICAg
ICAgICAgIGlzVHJhY2tlZCwNCiAgICAgICAgICAgICAgICAgcnVudGltZVNlY29uZHNXaXRo
b3V0UHJvZ3Jlc3MsDQogICAgICAgICAgICAgICAgIG9sZERvbmVCbG9ja3MpOw0KIA0KSW5k
ZXg6IHNvdXJjZS9mcm9zdC9zdG9yYWdlL3BlcnN0L1NoYXJlZEZpbGVzQ0hLS2V5U3RvcmFn
ZS5qYXZhDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gc291cmNlL2Zyb3N0L3N0b3JhZ2UvcGVyc3Qv
U2hhcmVkRmlsZXNDSEtLZXlTdG9yYWdlLmphdmEJKHJldmlzaW9uIDMxODApDQorKysgc291
cmNlL2Zyb3N0L3N0b3JhZ2UvcGVyc3QvU2hhcmVkRmlsZXNDSEtLZXlTdG9yYWdlLmphdmEJ
KHdvcmtpbmcgY29weSkNCkBAIC0zNDksMTcgKzM0OSwxOCBAQA0KIC8vCiAvLyAgICB9CiAK
LSAgICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIExhc3REb3dubG9hZFRyeVN0b3BUaW1lQ29t
cGFyYXRvciBsYXN0RG93bmxvYWRUcnlTdG9wVGltZUNvbXBhcmF0b3IgPSBuZXcgTGFzdERv
d25sb2FkVHJ5U3RvcFRpbWVDb21wYXJhdG9yKCk7CisgICAgCiAgICAgcHJvdGVjdGVkIHN0
YXRpYyBjbGFzcyBMYXN0RG93bmxvYWRUcnlTdG9wVGltZUNvbXBhcmF0b3IgaW1wbGVtZW50
cyBDb21wYXJhdG9yPFNoYXJlZEZpbGVzQ0hLS2V5PiB7CiAgICAgICAgIHB1YmxpYyBpbnQg
Y29tcGFyZShmaW5hbCBTaGFyZWRGaWxlc0NIS0tleSBhcmcwLCBmaW5hbCBTaGFyZWRGaWxl
c0NIS0tleSBhcmcxKSB7CiAgICAgICAgICAgICByZXR1cm4gTWl4ZWQuY29tcGFyZUxvbmco
YXJnMC5nZXRMYXN0RG93bmxvYWRUcnlTdG9wVGltZSgpLCBhcmcxLmdldExhc3REb3dubG9h
ZFRyeVN0b3BUaW1lKCkpOwogICAgICAgICB9CiAgICAgfQorICAgIHByb3RlY3RlZCBmaW5h
bCBzdGF0aWMgTGFzdERvd25sb2FkVHJ5U3RvcFRpbWVDb21wYXJhdG9yIGxhc3REb3dubG9h
ZFRyeVN0b3BUaW1lQ29tcGFyYXRvciA9IG5ldyBMYXN0RG93bmxvYWRUcnlTdG9wVGltZUNv
bXBhcmF0b3IoKTsKIAotICAgIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgU2VlbkNvdW50Q29t
cGFyYXRvciBzZWVuQ291bnRDb21wYXJhdG9yID0gbmV3IFNlZW5Db3VudENvbXBhcmF0b3Io
KTsKICAgICBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIFNlZW5Db3VudENvbXBhcmF0b3IgaW1w
bGVtZW50cyBDb21wYXJhdG9yPFNoYXJlZEZpbGVzQ0hLS2V5PiB7CiAgICAgICAgIHB1Ymxp
YyBpbnQgY29tcGFyZShmaW5hbCBTaGFyZWRGaWxlc0NIS0tleSBhcmcwLCBmaW5hbCBTaGFy
ZWRGaWxlc0NIS0tleSBhcmcxKSB7CiAgICAgICAgICAgICByZXR1cm4gTWl4ZWQuY29tcGFy
ZUludChhcmcwLmdldFNlZW5Db3VudCgpLCBhcmcwLmdldFNlZW5Db3VudCgpKTsKICAgICAg
ICAgfQogICAgIH0KKyAgICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFNlZW5Db3VudENvbXBh
cmF0b3Igc2VlbkNvdW50Q29tcGFyYXRvciA9IG5ldyBTZWVuQ291bnRDb21wYXJhdG9yKCk7
CiB9CkluZGV4OiBzb3VyY2UvZnJvc3Qvc3RvcmFnZS9wZXJzdC9UcmFja0Rvd25sb2FkS2V5
cy5qYXZhDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gc291cmNlL2Zyb3N0L3N0b3JhZ2UvcGVyc3Qv
VHJhY2tEb3dubG9hZEtleXMuamF2YQkocmV2aXNpb24gMCkNCisrKyBzb3VyY2UvZnJvc3Qv
c3RvcmFnZS9wZXJzdC9UcmFja0Rvd25sb2FkS2V5cy5qYXZhCShyZXZpc2lvbiAwKQ0KQEAg
LTAsMCArMSw3NyBAQA0KKy8qDQorIFRyYWNrRG93bmxvYWRLZXlzLmphdmEgLyBGcm9zdA0K
KyBDb3B5cmlnaHQgKEMpIDIwMTAgIEZyb3N0IFByb2plY3QgPGp0Y2Zyb3N0LnNvdXJjZWZv
cmdlLm5ldD4NCisNCisgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcw0KKyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZg0KKyB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisg
VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsDQorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUNCisgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyBhbG9uZyB3
aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0K
KyBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzks
IFVTQS4NCisqLw0KK3BhY2thZ2UgZnJvc3Quc3RvcmFnZS5wZXJzdDsNCisNCitpbXBvcnQg
b3JnLmdhcnJldC5wZXJzdC4qOw0KKw0KKy8qKg0KKyAqIFJlcHJlc2VudHMgdGhlIGl0ZW0g
Zm9yIHRoZSBUcmFja0Rvd25sb2FkS2V5cy4NCisgKi8NCitwdWJsaWMgY2xhc3MgVHJhY2tE
b3dubG9hZEtleXMgZXh0ZW5kcyBQZXJzaXN0ZW50IHsNCisNCisJcHJpdmF0ZSBTdHJpbmcg
Y2hrS2V5Ow0KKwlwcml2YXRlIFN0cmluZyBmaWxlTmFtZTsNCisJcHJpdmF0ZSBTdHJpbmcg
Ym9hcmROYW1lOw0KKyAgICBwcml2YXRlIGxvbmcgZmlsZVNpemU7IA0KKwlwcml2YXRlIGxv
bmcgZG93bmxvYWRGaW5pc2hlZFRpbWU7IC8vIHdoZW4gd2FzIHRoaXMgZG93bmxvYWQgZmlu
aXNoZWQNCisNCisgICAgLy8gdXNlZCBieSBwZXJzdA0KKyAgICBwdWJsaWMgVHJhY2tEb3du
bG9hZEtleXMoKSB7fQ0KKyAgICANCisgICAgcHVibGljIFRyYWNrRG93bmxvYWRLZXlzKGZp
bmFsIFN0cmluZyBjaGtLZXksIGZpbmFsIFN0cmluZyBmaWxlTmFtZSwgDQorICAgIAkJZmlu
YWwgU3RyaW5nIGJvYXJkTmFtZSwgbG9uZyBmaWxlU2l6ZSwgbG9uZyBkb3dubG9hZEZpbmlz
aGVkVGltZSkgew0KKyAgICAgICAgdGhpcy5jaGtLZXkgPSBjaGtLZXk7DQorICAgICAgICB0
aGlzLmZpbGVOYW1lID0gZmlsZU5hbWU7DQorICAgICAgICB0aGlzLmJvYXJkTmFtZSA9IGJv
YXJkTmFtZTsNCisgICAgICAgIHRoaXMuZmlsZVNpemUgPSBmaWxlU2l6ZTsNCisgICAgICAg
IHRoaXMuZG93bmxvYWRGaW5pc2hlZFRpbWUgPSBkb3dubG9hZEZpbmlzaGVkVGltZTsNCisg
ICAgfQ0KKyAgICANCisgICAgcHVibGljIFRyYWNrRG93bmxvYWRLZXlzKGZpbmFsIFRyYWNr
RG93bmxvYWRLZXlzIHRyYWNrRG93bmxvYWRLZXkpIHsNCisgICAgICAgIHRoaXMuY2hrS2V5
ID0gdHJhY2tEb3dubG9hZEtleS5jaGtLZXk7DQorICAgICAgICB0aGlzLmZpbGVOYW1lID0g
dHJhY2tEb3dubG9hZEtleS5maWxlTmFtZTsNCisgICAgICAgIHRoaXMuYm9hcmROYW1lID0g
dHJhY2tEb3dubG9hZEtleS5ib2FyZE5hbWU7DQorICAgICAgICB0aGlzLmZpbGVTaXplID0g
dHJhY2tEb3dubG9hZEtleS5maWxlU2l6ZTsNCisgICAgICAgIHRoaXMuZG93bmxvYWRGaW5p
c2hlZFRpbWUgPSB0cmFja0Rvd25sb2FkS2V5LmRvd25sb2FkRmluaXNoZWRUaW1lOw0KKyAg
ICB9DQorDQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2hrS2V5KCkgew0KKyAgICAgICAgcmV0
dXJuIGNoa0tleTsNCisgICAgfQ0KKyAgICANCisgICAgcHVibGljIFN0cmluZyBnZXRGaWxl
TmFtZSgpIHsNCisgICAgICAgIHJldHVybiBmaWxlTmFtZTsNCisgICAgfQ0KKyAgICANCisg
ICAgcHVibGljIFN0cmluZyBnZXRCb2FyZE5hbWUoKSB7DQorCQlyZXR1cm4gYm9hcmROYW1l
Ow0KKwl9DQorDQorCXB1YmxpYyBsb25nIGdldEZpbGVTaXplKCkgew0KKwkJcmV0dXJuIGZp
bGVTaXplOw0KKwl9DQorDQorCXB1YmxpYyB2b2lkIHNldENoa0tleShTdHJpbmcgY2hrS2V5
KSB7DQorCQl0aGlzLmNoa0tleSA9IGNoa0tleTsNCisJfQ0KKw0KKwlwdWJsaWMgbG9uZyBn
ZXREb3dubG9hZEZpbmlzaGVkVGltZSgpIHsNCisgICAgICAgIHJldHVybiBkb3dubG9hZEZp
bmlzaGVkVGltZTsNCisgICAgfQ0KK30NCkluZGV4OiBzb3VyY2UvZnJvc3Qvc3RvcmFnZS9w
ZXJzdC9UcmFja0Rvd25sb2FkS2V5c1N0b3JhZ2UuamF2YQ0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IHNvdXJjZS9mcm9zdC9zdG9yYWdlL3BlcnN0L1RyYWNrRG93bmxvYWRLZXlzU3RvcmFnZS5q
YXZhCShyZXZpc2lvbiAwKQ0KKysrIHNvdXJjZS9mcm9zdC9zdG9yYWdlL3BlcnN0L1RyYWNr
RG93bmxvYWRLZXlzU3RvcmFnZS5qYXZhCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSwxMjUg
QEANCisvKg0KKyAgVHJhY2tEb3dubG9hZEtleXNTdG9yYWdlLmphdmEgLyBGcm9zdA0KKyAg
Q29weXJpZ2h0IChDKSAyMDEwICBGcm9zdCBQcm9qZWN0IDxqdGNmcm9zdC5zb3VyY2Vmb3Jn
ZS5uZXQ+DQorDQorICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQorICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcw0KKyAgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YNCisgIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKw0K
KyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsDQorICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQ0KKyAgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisg
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlDQorICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwg
TUEgMDIxMzksIFVTQS4NCisqLw0KK3BhY2thZ2UgZnJvc3Quc3RvcmFnZS5wZXJzdDsNCisN
CitpbXBvcnQgamF2YS51dGlsLio7DQorDQoraW1wb3J0IGZyb3N0Lio7DQoraW1wb3J0IGZy
b3N0LnN0b3JhZ2UuKjsNCisNCitwdWJsaWMgY2xhc3MgVHJhY2tEb3dubG9hZEtleXNTdG9y
YWdlIGV4dGVuZHMgQWJzdHJhY3RGcm9zdFN0b3JhZ2UgaW1wbGVtZW50cyBFeGl0U2F2YWJs
ZSB7DQorDQorICAgIHByaXZhdGUgVHJhY2tEb3dubG9hZEtleXNTdG9yYWdlUm9vdCBzdG9y
YWdlUm9vdCA9IG51bGw7DQorDQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBT
VE9SQUdFX0ZJTEVOQU1FID0gIlRyYWNrRG93bmxvYWRLZXlzLmRicyI7DQorDQorICAgIHBy
aXZhdGUgc3RhdGljIFRyYWNrRG93bmxvYWRLZXlzU3RvcmFnZSBpbnN0YW5jZSA9IG5ldyBU
cmFja0Rvd25sb2FkS2V5c1N0b3JhZ2UoKTsNCisNCisgICAgcHJvdGVjdGVkIFRyYWNrRG93
bmxvYWRLZXlzU3RvcmFnZSgpIHsNCisgICAgICAgIHN1cGVyKCk7DQorICAgIH0NCisNCisg
ICAgcHVibGljIHN0YXRpYyBUcmFja0Rvd25sb2FkS2V5c1N0b3JhZ2UgaW5zdCgpIHsNCisg
ICAgICAgIHJldHVybiBpbnN0YW5jZTsNCisgICAgfQ0KKw0KKyAgICBwcml2YXRlIGJvb2xl
YW4gYWRkVG9JbmRpY2VzKGZpbmFsIFRyYWNrRG93bmxvYWRLZXlzIHRyYWNrRG93bmxvYWRL
ZXlzKSB7DQorICAgIAlTeXN0ZW0ub3V0LnByaW50KCJERUJVRzogVHJhY2tEb3dubG9hZEtl
eXNTdG9yYWdlLmFkZFRvSW5kaWNlczogIik7DQorICAgIAlTeXN0ZW0ub3V0LnByaW50bG4o
dHJhY2tEb3dubG9hZEtleXMuZ2V0Q2hrS2V5KCkpOw0KKyAgICAgICAgcmV0dXJuIHN0b3Jh
Z2VSb290LmRvd25sb2FkS2V5TGlzdC5wdXQodHJhY2tEb3dubG9hZEtleXMuZ2V0Q2hrS2V5
KCksIHRyYWNrRG93bmxvYWRLZXlzKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgdm9pZCBz
dG9yZUl0ZW0oZmluYWwgVHJhY2tEb3dubG9hZEtleXMgdHJhY2tEb3dubG9hZEtleXMpIHsN
CisgICAgICAgIGlmKCBnZXRTdG9yYWdlKCkgPT0gbnVsbCApIHsNCisgICAgICAgICAgICBy
ZXR1cm47DQorICAgICAgICB9DQorICAgICAgICBpZiggdHJhY2tEb3dubG9hZEtleXMuZ2V0
U3RvcmFnZSgpID09IG51bGwgKSB7DQorICAgICAgICAJdHJhY2tEb3dubG9hZEtleXMubWFr
ZVBlcnNpc3RlbnQoZ2V0U3RvcmFnZSgpKTsNCisgICAgICAgICAgICBhZGRUb0luZGljZXMo
dHJhY2tEb3dubG9hZEtleXMpOw0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgIAl0cmFj
a0Rvd25sb2FkS2V5cy5tb2RpZnkoKTsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICANCisg
ICAgcHVibGljIGJvb2xlYW4gc2VhcmNoSXRlbShmaW5hbCBTdHJpbmcgY2hrS2V5KSB7DQor
ICAgIAlTeXN0ZW0ub3V0LnByaW50KCJERUJVRzogVHJhY2tEb3dubG9hZEtleXNTdG9yYWdl
LnNlYXJjaEl0ZW06ICIpOw0KKyAgICAJU3lzdGVtLm91dC5wcmludGxuKGNoa0tleSk7DQor
ICAgIAlyZXR1cm4gKHN0b3JhZ2VSb290LmRvd25sb2FkS2V5TGlzdC5nZXQoY2hrS2V5KSAh
PSBudWxsKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgdm9pZCBleGl0U2F2ZSgpIHRocm93
cyBTdG9yYWdlRXhjZXB0aW9uIHsNCisgICAgICAgIGNsb3NlKCk7DQorICAgICAgICBzdG9y
YWdlUm9vdCA9IG51bGw7DQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIklORk86IFRy
YWNrRG93bmxvYWRLZXlTdG9yYWdlIGNsb3NlZC4iKTsNCisgICAgfQ0KKw0KKyAgICBAT3Zl
cnJpZGUNCisgICAgcHVibGljIFN0cmluZyBnZXRTdG9yYWdlRmlsZW5hbWUoKSB7DQorICAg
ICAgICByZXR1cm4gU1RPUkFHRV9GSUxFTkFNRTsNCisgICAgfQ0KKw0KKyAgICBAT3ZlcnJp
ZGUNCisgICAgcHVibGljIGJvb2xlYW4gaW5pdFN0b3JhZ2UoKSB7DQorICAgICAgICBmaW5h
bCBTdHJpbmcgZGF0YWJhc2VGaWxlUGF0aCA9IGJ1aWxkU3RvcmFnZVBhdGgoZ2V0U3RvcmFn
ZUZpbGVuYW1lKCkpOyAvLyBwYXRoIHRvIHRoZSBkYXRhYmFzZSBmaWxlDQorICAgICAgICBm
aW5hbCBsb25nIHBhZ2VQb29sU2l6ZSA9IGdldFBhZ2VQb29sU2l6ZShTZXR0aW5nc0NsYXNz
LlBFUlNUX1BBR0VQT09MU0laRV9TSEFSRURGSUxFU0NIS0tFWVMpOw0KKw0KKyAgICAgICAg
b3BlbihkYXRhYmFzZUZpbGVQYXRoLCBwYWdlUG9vbFNpemUsIHRydWUsIHRydWUsIGZhbHNl
KTsNCisNCisgICAgICAgIHN0b3JhZ2VSb290ID0gKFRyYWNrRG93bmxvYWRLZXlzU3RvcmFn
ZVJvb3QpZ2V0U3RvcmFnZSgpLmdldFJvb3QoKTsNCisgICAgICAgIGlmIChzdG9yYWdlUm9v
dCA9PSBudWxsKSB7DQorICAgICAgICAgICAgLy8gU3RvcmFnZSB3YXMgbm90IGluaXRpYWxp
emVkIHlldA0KKyAgICAgICAgICAgIHN0b3JhZ2VSb290ID0gbmV3IFRyYWNrRG93bmxvYWRL
ZXlzU3RvcmFnZVJvb3QoKTsNCisgICAgICAgICAgICAvLyB1bmlxdWUgaW5kZXggb2YgY2hr
S2V5cw0KKyAgICAgICAgICAgIHN0b3JhZ2VSb290LmRvd25sb2FkS2V5TGlzdCA9IGdldFN0
b3JhZ2UoKS5jcmVhdGVJbmRleChTdHJpbmcuY2xhc3MsIHRydWUpOw0KKyAgICAgICAgICAg
IGdldFN0b3JhZ2UoKS5zZXRSb290KHN0b3JhZ2VSb290KTsNCisgICAgICAgICAgICBjb21t
aXQoKTsgLy8gY29tbWl0IHRyYW5zYWN0aW9uDQorICAgICAgICB9DQorICAgICAgICBTeXN0
ZW0ub3V0LnByaW50bG4oIklORk86IFRyYWNrRG93bmxvYWRLZXlTdG9yYWdlIGluaXRpYWxp
emVkLiIpOw0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisgICAgDQorICAgIC8q
Kg0KKyAgICAgKiBEZWxldGUgYWxsIGVudHJpZXMgdGhhdCB3ZXJlIGRvd25sb2FkZWQgbWF4
RGF5c09sZCBkYXllcyBhZ28uDQorICAgICAqIEByZXR1cm4gIGNvdW50IG9mIGRlbGV0ZWQg
cm93cw0KKyAgICAgKi8NCisgICAgcHVibGljIGludCBjbGVhbnVwVGFibGUoZmluYWwgaW50
IG1heERheXNPbGQpIHsNCisNCisgICAgICAgIGZpbmFsIGxvbmcgbWluVmFsID0gU3lzdGVt
LmN1cnJlbnRUaW1lTWlsbGlzKCkgLSAobWF4RGF5c09sZCAqIDI0TCAqIDYwTCAqIDYwTCAq
IDEwMDBMKTsNCisNCisgICAgICAgIC8vIGRlbGV0ZSBhbGwgaXRlbXMgd2l0aCBsYXN0U2Vl
biA8IG1pblZhbCwgYnV0IGxhc3RTZWVuID4gMA0KKyAgICAgICAgaW50IGRlbGV0ZWRDb3Vu
dCA9IDA7DQorDQorICAgICAgICBiZWdpbkV4Y2x1c2l2ZVRocmVhZFRyYW5zYWN0aW9uKCk7
DQorICAgICAgICB0cnkgew0KKyAgICAgICAgICAgIGZpbmFsIEl0ZXJhdG9yPFRyYWNrRG93
bmxvYWRLZXlzPiBpID0gc3RvcmFnZVJvb3QuZG93bmxvYWRLZXlMaXN0Lml0ZXJhdG9yKCk7
DQorICAgICAgICAgICAgd2hpbGUoaS5oYXNOZXh0KCkpIHsNCisgICAgICAgICAgICAgICAg
ZmluYWwgVHJhY2tEb3dubG9hZEtleXMgc2ZrID0gaS5uZXh0KCk7DQorICAgICAgICAgICAg
ICAgIGlmKCBzZmsuZ2V0RG93bmxvYWRGaW5pc2hlZFRpbWUoKSA+IDAgJiYgc2ZrLmdldERv
d25sb2FkRmluaXNoZWRUaW1lKCkgPCBtaW5WYWwgKSB7DQorICAgICAgICAgICAgICAgICAg
ICBpLnJlbW92ZSgpOyAvLyByZW1vdmUgZnJvbSBpdGVyYXRlZCBpbmRleA0KKyAgICAgICAg
ICAgICAgICAgICAgc2ZrLmRlYWxsb2NhdGUoKTsgLy8gcmVtb3ZlIGZyb20gU3RvcmFnZQ0K
KyAgICAgICAgICAgICAgICAgICAgZGVsZXRlZENvdW50Kys7DQorICAgICAgICAgICAgICAg
IH0NCisgICAgICAgICAgICB9DQorICAgICAgICB9IGZpbmFsbHkgew0KKyAgICAgICAgICAg
IGVuZFRocmVhZFRyYW5zYWN0aW9uKCk7DQorICAgICAgICB9DQorDQorICAgICAgICByZXR1
cm4gZGVsZXRlZENvdW50Ow0KKyAgICB9DQorfQ0KSW5kZXg6IHNvdXJjZS9mcm9zdC9zdG9y
YWdlL3BlcnN0L1RyYWNrRG93bmxvYWRLZXlzU3RvcmFnZVJvb3QuamF2YQ0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KLS0tIHNvdXJjZS9mcm9zdC9zdG9yYWdlL3BlcnN0L1RyYWNrRG93bmxvYWRLZXlz
U3RvcmFnZVJvb3QuamF2YQkocmV2aXNpb24gMCkNCisrKyBzb3VyY2UvZnJvc3Qvc3RvcmFn
ZS9wZXJzdC9UcmFja0Rvd25sb2FkS2V5c1N0b3JhZ2VSb290LmphdmEJKHJldmlzaW9uIDAp
DQpAQCAtMCwwICsxLDI4IEBADQorLyoNCisgIFRyYWNrRG93bmxvYWRLZXlzU3RvcmFnZVJv
b3QuamF2YSAvIEZyb3N0DQorICBDb3B5cmlnaHQgKEMpIDIwMTAgIEZyb3N0IFByb2plY3Qg
PGp0Y2Zyb3N0LnNvdXJjZWZvcmdlLm5ldD4NCisNCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz
DQorICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
IHZlcnNpb24gMiBvZg0KKyAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uDQorDQorICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0
aGUgR05VDQorICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQor
DQorICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQ0KKyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCisgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBN
YXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLg0KKyovDQorcGFja2FnZSBmcm9z
dC5zdG9yYWdlLnBlcnN0Ow0KKw0KK2ltcG9ydCBvcmcuZ2FycmV0LnBlcnN0Lio7DQorDQor
cHVibGljIGNsYXNzIFRyYWNrRG93bmxvYWRLZXlzU3RvcmFnZVJvb3QgZXh0ZW5kcyBQZXJz
aXN0ZW50IHsNCisgICAgDQorICAgIHB1YmxpYyBUcmFja0Rvd25sb2FkS2V5c1N0b3JhZ2VS
b290KCkge30NCisgICAgDQorICAgIEluZGV4PFRyYWNrRG93bmxvYWRLZXlzPiBkb3dubG9h
ZEtleUxpc3Q7DQorfQ0KSW5kZXg6IHNvdXJjZS9pMThuL2xhbmdyZXMucHJvcGVydGllcw0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5
IHR5cGUuDQpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtDQo=
--------------000603090808070709060508
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
--------------000603090808070709060508
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Jtcfrost-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jtcfrost-devl

--------------000603090808070709060508--