JNLP cornerstone block

Mauro Talevi <[email protected]> Sun, 23 Mar 2003 19:30:47 +0000
Newsgroups gmane.comp.jakarta.avalon.phoenix.devel,gmane.comp.jakarta.turbine.maven.devel
Message-ID <[email protected]>
--------------000806070206050704010805
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Peter Royal wrote:
> I'd like to remove Phyre, 
> <http://cvs.apache.org/viewcvs.cgi/avalon-apps/phyre/>, from the 
> avalon-apps CVS in accordance with the downsizing. I don't have any 
> plans to develop this codebase any further (and seeing as how I was the 
> only one that ever did any real work on it).

Peter,

I've refactored the the phyre block which handles JNLP connections into 
a generic cornerstone block.
I think its use is quite generic and goes beyond phyre being developed 
further.
I attach a patch with the cornerstone jnlp src.
I've introduced a JNLPManager interface which at the moment has no 
methods but which may in the future.

Cheers, Mauro



--------------000806070206050704010805
Content-Type: application/zip;
 name="jnlp.zip"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="jnlp.zip"

UEsDBAoAAAAAAA6Mdy4AAAAAAAAAAAAAAAAEAAAAc3JjL1BLAwQKAAAAAAAOjHcuAAAAAAAA
AAAAAAAACQAAAHNyYy9qYXZhL1BLAwQKAAAAAAAOjHcuAAAAAAAAAAAAAAAADQAAAHNyYy9q
YXZhL29yZy9QSwMECgAAAAAADox3LgAAAAAAAAAAAAAAABQAAABzcmMvamF2YS9vcmcvYXBh
Y2hlL1BLAwQKAAAAAAAOjHcuAAAAAAAAAAAAAAAAGwAAAHNyYy9qYXZhL29yZy9hcGFjaGUv
YXZhbG9uL1BLAwQKAAAAAAAOjHcuAAAAAAAAAAAAAAAAJwAAAHNyYy9qYXZhL29yZy9hcGFj
aGUvYXZhbG9uL2Nvcm5lcnN0b25lL1BLAwQKAAAAAAALjXcuAAAAAAAAAAAAAAAALgAAAHNy
Yy9qYXZhL29yZy9hcGFjaGUvYXZhbG9uL2Nvcm5lcnN0b25lL2Jsb2Nrcy9QSwMECgAAAAAA
kI13LgAAAAAAAAAAAAAAADMAAABzcmMvamF2YS9vcmcvYXBhY2hlL2F2YWxvbi9jb3JuZXJz
dG9uZS9ibG9ja3Mvam5scC9QSwMECgAAAAAAfY53Lk0LLjtpIAAAaSAAAE0AAABzcmMvamF2
YS9vcmcvYXBhY2hlL2F2YWxvbi9jb3JuZXJzdG9uZS9ibG9ja3Mvam5scC9IdHRwQ29ubmVj
dGlvbkhhbmRsZXIuamF2YS8qCiAqIENvcHlyaWdodCAoQykgVGhlIEFwYWNoZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBUaGlzIHNvZnR3YXJl
IGlzIHB1Ymxpc2hlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBM
aWNlbnNlCiAqIHZlcnNpb24gMS4xLCBhIGNvcHkgb2Ygd2hpY2ggaGFzIGJlZW4gaW5jbHVk
ZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpbgogKiB0aGUgTElDRU5TRS50eHQgZmlsZS4K
ICovCnBhY2thZ2Ugb3JnLmFwYWNoZS5hdmFsb24uY29ybmVyc3RvbmUuYmxvY2tzLmpubHA7
CgppbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwppbXBvcnQgamF2YS5pby5G
aWxlOwppbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CmltcG9ydCBqYXZhLmlvLklP
RXhjZXB0aW9uOwppbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKaW1wb3J0IGphdmEuaW8u
UHJpbnRTdHJlYW07CmltcG9ydCBqYXZhLm5ldC5Qcm90b2NvbEV4Y2VwdGlvbjsKaW1wb3J0
IGphdmEubmV0LlNvY2tldDsKaW1wb3J0IGphdmEudXRpbC5EYXRlOwppbXBvcnQgamF2YS51
dGlsLkhhc2hNYXA7CmltcG9ydCBqYXZhLnV0aWwuTWFwOwoKaW1wb3J0IG9yZy5hcGFjaGUu
YXZhbG9uLmNvcm5lcnN0b25lLnNlcnZpY2VzLmNvbm5lY3Rpb24uQ29ubmVjdGlvbkhhbmRs
ZXI7CmltcG9ydCBvcmcuYXBhY2hlLmF2YWxvbi5leGNhbGlidXIuaW8uSU9VdGlsOwppbXBv
cnQgb3JnLmFwYWNoZS5hdmFsb24uZnJhbWV3b3JrLmNvbmZpZ3VyYXRpb24uQ29uZmlndXJh
YmxlOwppbXBvcnQgb3JnLmFwYWNoZS5hdmFsb24uZnJhbWV3b3JrLmNvbmZpZ3VyYXRpb24u
Q29uZmlndXJhdGlvbjsKaW1wb3J0IG9yZy5hcGFjaGUuYXZhbG9uLmZyYW1ld29yay5jb25m
aWd1cmF0aW9uLkNvbmZpZ3VyYXRpb25FeGNlcHRpb247CmltcG9ydCBvcmcuYXBhY2hlLmF2
YWxvbi5mcmFtZXdvcmsuY29udGV4dC5Db250ZXh0OwppbXBvcnQgb3JnLmFwYWNoZS5hdmFs
b24uZnJhbWV3b3JrLmNvbnRleHQuQ29udGV4dEV4Y2VwdGlvbjsKaW1wb3J0IG9yZy5hcGFj
aGUuYXZhbG9uLmZyYW1ld29yay5jb250ZXh0LkNvbnRleHR1YWxpemFibGU7CmltcG9ydCBv
cmcuYXBhY2hlLmF2YWxvbi5mcmFtZXdvcmsubG9nZ2VyLkFic3RyYWN0TG9nRW5hYmxlZDsK
Ci8qKgogKiBIdHRwQ29ubm5lY3Rpb25IYW5kbGVyIGhhbmRsZXMgdGhlIEhUVFAgY29ubmVj
dGlvbnMgdG8gdGhlIEpOTFBNYW5hZ2VyCiAqIHJldHVybmluZyB0aGUgYXBwcm9wcmlhdGUg
SFRUUCByZXNwb25zZS4KICogCiAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnByb3lhbEBh
cGFjaGUub3JnIj5QZXRlciBSb3lhbDwvYT4KICovCmNsYXNzIEh0dHBDb25uZWN0aW9uSGFu
ZGxlciBleHRlbmRzIEFic3RyYWN0TG9nRW5hYmxlZAogICAgaW1wbGVtZW50cyBDb25uZWN0
aW9uSGFuZGxlciwgQ29uZmlndXJhYmxlLCBDb250ZXh0dWFsaXphYmxlLCBIdHRwQ29uc3Rh
bnRzCnsKICAgIC8qIG1hcHBpbmcgb2YgZmlsZSBleHRlbnNpb25zIHRvIGNvbnRlbnQtdHlw
ZXMgKi8KICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE1hcCBDT05URU5UX1RZUEVfTUFQID0g
bmV3IEhhc2hNYXAoKTsKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCVUZfU0laRSA9
IDIwNDg7CiAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlW10gRU9MID0geyggYnl0ZSAp
ICdccicsICggYnl0ZSApICdcbid9OwoKICAgIHByaXZhdGUgRmlsZSBtX2hvbWVEaXI7CiAg
ICBwcml2YXRlIEZpbGUgbV9zdWJEaXI7CiAgICBwcml2YXRlIEZpbGUgbV9qbmxwOwoKICAg
IHByaXZhdGUgaW50IG1fdGltZW91dDsKCiAgICBzdGF0aWMKICAgIHsKICAgICAgICBmaWxs
TWFwKCk7CiAgICB9CgogICAgcHVibGljIHZvaWQgY29udGV4dHVhbGl6ZSggQ29udGV4dCBj
b250ZXh0ICkKICAgICAgICB0aHJvd3MgQ29udGV4dEV4Y2VwdGlvbgogICAgewogICAgICAg
IG1faG9tZURpciA9ICggRmlsZSApIGNvbnRleHQuZ2V0KCAiYXBwLmhvbWUiICk7CiAgICB9
CgogICAgcHVibGljIHZvaWQgY29uZmlndXJlKCBDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24gKQogICAgICAgIHRocm93cyBDb25maWd1cmF0aW9uRXhjZXB0aW9uCiAgICB7CiAgICAg
ICAgbV9zdWJEaXIgPSBuZXcgRmlsZSggbV9ob21lRGlyLCBjb25maWd1cmF0aW9uLmdldENo
aWxkKCAiZGF0YS1kaXJlY3RvcnkiICkuZ2V0VmFsdWUoKSApOwoKICAgICAgICBpZiggIW1f
c3ViRGlyLmV4aXN0cygpICkKICAgICAgICB7CiAgICAgICAgICAgIHRocm93IG5ldyBDb25m
aWd1cmF0aW9uRXhjZXB0aW9uKCAiSW52YWxpZCBkYXRhLWRpcmVjdG9yeSAiK21fc3ViRGly
ICk7CiAgICAgICAgfQoKICAgICAgICBtX2pubHAgPSBuZXcgRmlsZSggbV9zdWJEaXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uZ2V0Q2hpbGQoICJqbmxw
LWZpbGUiICkuZ2V0VmFsdWUoICJwaHlyZS5qbmxwIiApICk7CgogICAgICAgIGlmKCAhbV9q
bmxwLmV4aXN0cygpICkKICAgICAgICB7CiAgICAgICAgICAgIHRocm93IG5ldyBDb25maWd1
cmF0aW9uRXhjZXB0aW9uKCAiSW52YWxpZCBqbmxwLWZpbGUgIittX2pubHAgKTsKICAgICAg
ICB9CgogICAgICAgIG1fdGltZW91dCA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlQXNJ
bnRlZ2VyKCAidGltZW91dCIsIDAgKTsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBoYW5kbGVD
b25uZWN0aW9uKCBTb2NrZXQgY29ubmVjdGlvbiApCiAgICAgICAgdGhyb3dzIElPRXhjZXB0
aW9uLCBQcm90b2NvbEV4Y2VwdGlvbgogICAgewogICAgICAgIGZpbmFsIGJ5dGVbXSBidWZm
ZXIgPSBuZXcgYnl0ZVtCVUZfU0laRV07CiAgICAgICAgZmluYWwgSW5wdXRTdHJlYW0gaXMg
PSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggY29ubmVjdGlvbi5nZXRJbnB1dFN0cmVhbSgp
ICk7CiAgICAgICAgZmluYWwgUHJpbnRTdHJlYW0gcHMgPSBuZXcgUHJpbnRTdHJlYW0oIGNv
bm5lY3Rpb24uZ2V0T3V0cHV0U3RyZWFtKCkgKTsKCiAgICAgICAgY29ubmVjdGlvbi5zZXRT
b1RpbWVvdXQoIG1fdGltZW91dCApOwogICAgICAgIGNvbm5lY3Rpb24uc2V0VGNwTm9EZWxh
eSggdHJ1ZSApOwoKICAgICAgICBpbnQgbnJlYWQgPSAwOwogICAgICAgIGludCByID0gMDsK
CiAgICAgICAgb3V0ZXJsb29wOiB3aGlsZSggbnJlYWQgPCBCVUZfU0laRSApCiAgICAgICAg
ewogICAgICAgICAgICByID0gaXMucmVhZCggYnVmZmVyLCBucmVhZCwgQlVGX1NJWkUgLSBu
cmVhZCApOwoKICAgICAgICAgICAgaWYoIC0xID09IHIgKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGludCBpID0g
bnJlYWQ7CgogICAgICAgICAgICBucmVhZCArPSByOwoKICAgICAgICAgICAgZm9yKCA7IGkg
PCBucmVhZDsgaSsrICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoIGJ1ZmZl
cltpXSA9PSAoIGJ5dGUgKSAnXG4nIHx8IGJ1ZmZlcltpXSA9PSAoIGJ5dGUgKSAnXHInICkK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAvKiByZWFkIG9uZSBsaW5l
ICovCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXJsb29wOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBib29sZWFuIGdldCA9IGZh
bHNlOwogICAgICAgIGludCBpbmRleDsKCiAgICAgICAgaWYoIGlzR2V0KCBidWZmZXIgKSAp
CiAgICAgICAgewogICAgICAgICAgICBnZXQgPSB0cnVlOwogICAgICAgICAgICBpbmRleCA9
IDQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYoIGlzSGVhZCggYnVmZmVyICkgKQogICAg
ICAgIHsKICAgICAgICAgICAgaW5kZXggPSA1OwogICAgICAgIH0KICAgICAgICBlbHNlCiAg
ICAgICAgewogICAgICAgICAgICAvKiB3ZSBkb24ndCBzdXBwb3J0IHRoaXMgbWV0aG9kICov
CiAgICAgICAgICAgIHBzLnByaW50KCAiSFRUUC8xLjAgIiArIEhUVFBfQkFEX01FVEhPRCAr
ICIgdW5zdXBwb3J0ZWQgbWV0aG9kIHR5cGU6ICIgKTsKICAgICAgICAgICAgcHMud3JpdGUo
IGJ1ZmZlciwgMCwgNSApOwogICAgICAgICAgICBwcy53cml0ZSggRU9MICk7CiAgICAgICAg
ICAgIHBzLmZsdXNoKCk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAg
ICBpbnQgaSA9IDA7CiAgICAgICAgLyogZmluZCB0aGUgZmlsZSBuYW1lLCBmcm9tOgogICAg
ICAgICAqIEdFVCAvZm9vL2Jhci5odG1sIEhUVFAvMS4wCiAgICAgICAgICogZXh0cmFjdCAi
L2Zvby9iYXIuaHRtbCIKICAgICAgICAgKi8KICAgICAgICBmb3IoIGkgPSBpbmRleDsgaSA8
IG5yZWFkOyBpKysgKQogICAgICAgIHsKICAgICAgICAgICAgaWYoIGJ1ZmZlcltpXSA9PSAo
IGJ5dGUgKSAnICcgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgU3RyaW5nIGZuYW1lID0gbmV3IFN0cmlu
ZyggYnVmZmVyLCAwLCBpbmRleCwgaSAtIGluZGV4ICkucmVwbGFjZSggJy8nLCBGaWxlLnNl
cGFyYXRvckNoYXIgKTsKICAgICAgICBGaWxlIHRhcmdldDsKCiAgICAgICAgaWYoIGZuYW1l
LnN0YXJ0c1dpdGgoIEZpbGUuc2VwYXJhdG9yICkgKQogICAgICAgIHsKICAgICAgICAgICAg
Zm5hbWUgPSBmbmFtZS5zdWJzdHJpbmcoIDEgKTsKICAgICAgICB9CgogICAgICAgIGlmKCAw
ID09IGZuYW1lLmxlbmd0aCgpICkKICAgICAgICB7CiAgICAgICAgICAgIHRhcmdldCA9IG1f
am5scDsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgdGFy
Z2V0ID0gbmV3IEZpbGUoIG1fc3ViRGlyLCBmbmFtZSApOwogICAgICAgIH0KCiAgICAgICAg
Ym9vbGVhbiBPSyA9IHByaW50SGVhZGVycyggdGFyZ2V0LCBwcyApOwoKICAgICAgICBpZigg
Z2V0ICkKICAgICAgICB7CiAgICAgICAgICAgIGlmKCBPSyApCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgIHNlbmRGaWxlKCB0YXJnZXQsIHBzICk7CiAgICAgICAgICAgIH0KICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzZW5kNDA0KCBw
cyApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgdm9pZCBz
ZW5kNDA0KCBQcmludFN0cmVhbSBwcyApIHRocm93cyBJT0V4Y2VwdGlvbgogICAgewogICAg
ICAgIHBzLndyaXRlKCBFT0wgKTsKICAgICAgICBwcy53cml0ZSggRU9MICk7CiAgICAgICAg
cHMucHJpbnRsbiggIk5vdCBGb3VuZFxuXG4iICsgIlRoZSByZXF1ZXN0ZWQgcmVzb3VyY2Ug
d2FzIG5vdCBmb3VuZC5cbiIgKTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgc2VuZEZpbGUo
IEZpbGUgdGFyZywgUHJpbnRTdHJlYW0gcHMgKSB0aHJvd3MgSU9FeGNlcHRpb24KICAgIHsK
ICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oIHRhcmcuZ2V0
QWJzb2x1dGVQYXRoKCkgKTsKCiAgICAgICAgcHMud3JpdGUoIEVPTCApOwoKICAgICAgICB0
cnkKICAgICAgICB7CiAgICAgICAgICAgIElPVXRpbC5jb3B5KCBpcywgcHMgKTsKICAgICAg
ICB9CiAgICAgICAgZmluYWxseQogICAgICAgIHsKICAgICAgICAgICAgaXMuY2xvc2UoKTsK
ICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBib29sZWFuIHByaW50SGVhZGVycyggRmls
ZSB0YXJnZXQsIFByaW50U3RyZWFtIHBzICkgdGhyb3dzIElPRXhjZXB0aW9uCiAgICB7CiAg
ICAgICAgYm9vbGVhbiByZXQgPSBmYWxzZTsKICAgICAgICBpbnQgckNvZGUgPSAwOwoKICAg
ICAgICBpZiggIXRhcmdldC5leGlzdHMoKSApCiAgICAgICAgewogICAgICAgICAgICByQ29k
ZSA9IEhUVFBfTk9UX0ZPVU5EOwogICAgICAgICAgICBwcy5wcmludCggIkhUVFAvMS4wICIg
KyBIVFRQX05PVF9GT1VORCArICIgbm90IGZvdW5kIiApOwogICAgICAgICAgICBwcy53cml0
ZSggRU9MICk7CiAgICAgICAgICAgIHJldCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBl
bHNlIGlmKCB0YXJnZXQuaXNEaXJlY3RvcnkoKSApCiAgICAgICAgewogICAgICAgICAgICBy
Q29kZSA9IEhUVFBfRk9SQklEREVOOwogICAgICAgICAgICBwcy5wcmludCggIkhUVFAvMS4w
ICIgKyBIVFRQX0ZPUkJJRERFTiArICIgRGlyZWN0b3J5IGxpc3RpbmcgZm9yYmlkZGVuIiAp
OwogICAgICAgICAgICBwcy53cml0ZSggRU9MICk7CiAgICAgICAgICAgIHJldCA9IGZhbHNl
OwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICByQ29kZSA9
IEhUVFBfT0s7CiAgICAgICAgICAgIHBzLnByaW50KCAiSFRUUC8xLjAgIiArIEhUVFBfT0sg
KyAiIE9LIiApOwogICAgICAgICAgICBwcy53cml0ZSggRU9MICk7CiAgICAgICAgICAgIHJl
dCA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICBwcy5wcmludCggIlNlcnZlcjogSk5MUCBD
b25uZWN0aW9uIGhhbmRsZWQiICk7CiAgICAgICAgcHMud3JpdGUoIEVPTCApOwogICAgICAg
IHBzLnByaW50KCAiRGF0ZTogIiArIG5ldyBEYXRlKCkgKTsKICAgICAgICBwcy53cml0ZSgg
RU9MICk7CgogICAgICAgIGlmKCByZXQgKQogICAgICAgIHsKICAgICAgICAgICAgcHMucHJp
bnQoICJDb250ZW50LWxlbmd0aDogIiArIHRhcmdldC5sZW5ndGgoKSApOwogICAgICAgICAg
ICBwcy53cml0ZSggRU9MICk7CiAgICAgICAgICAgIHBzLnByaW50KCAiTGFzdCBNb2RpZmll
ZDogIiArIG5ldyBEYXRlKCB0YXJnZXQubGFzdE1vZGlmaWVkKCkgKSApOwogICAgICAgICAg
ICBwcy53cml0ZSggRU9MICk7CgogICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHRhcmdldC5n
ZXROYW1lKCk7CgogICAgICAgICAgICBpbnQgaW5kID0gbmFtZS5sYXN0SW5kZXhPZiggJy4n
ICk7CiAgICAgICAgICAgIFN0cmluZyBjdCA9IG51bGw7CgogICAgICAgICAgICBpZiggaW5k
ID4gMCApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGN0ID0gKCBTdHJpbmcgKSBD
T05URU5UX1RZUEVfTUFQLmdldCggbmFtZS5zdWJzdHJpbmcoIGluZCApICk7CiAgICAgICAg
ICAgIH0KICAgICAgICAgICAgaWYoIGN0ID09IG51bGwgKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICBjdCA9ICJ1bmtub3duL3Vua25vd24iOwogICAgICAgICAgICB9CgogICAg
ICAgICAgICBwcy5wcmludCggIkNvbnRlbnQtdHlwZTogIiArIGN0ICk7CiAgICAgICAgICAg
IHBzLndyaXRlKCBFT0wgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiByZXQ7CiAgICB9
CgogICAgcHJpdmF0ZSBib29sZWFuIGlzSGVhZCggZmluYWwgYnl0ZVtdIGJ1ZmZlciApCiAg
ICB7CiAgICAgICAgcmV0dXJuIGJ1ZmZlclswXSA9PSAoIGJ5dGUgKSAnSCcKICAgICAgICAg
ICAgJiYgYnVmZmVyWzFdID09ICggYnl0ZSApICdFJwogICAgICAgICAgICAmJiBidWZmZXJb
Ml0gPT0gKCBieXRlICkgJ0EnCiAgICAgICAgICAgICYmIGJ1ZmZlclszXSA9PSAoIGJ5dGUg
KSAnRCcKICAgICAgICAgICAgJiYgYnVmZmVyWzRdID09ICggYnl0ZSApICcgJzsKICAgIH0K
CiAgICBwcml2YXRlIGJvb2xlYW4gaXNHZXQoIGZpbmFsIGJ5dGVbXSBidWZmZXIgKQogICAg
ewogICAgICAgIHJldHVybiBidWZmZXJbMF0gPT0gKCBieXRlICkgJ0cnCiAgICAgICAgICAg
ICYmIGJ1ZmZlclsxXSA9PSAoIGJ5dGUgKSAnRScKICAgICAgICAgICAgJiYgYnVmZmVyWzJd
ID09ICggYnl0ZSApICdUJwogICAgICAgICAgICAmJiBidWZmZXJbM10gPT0gKCBieXRlICkg
JyAnOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIHZvaWQgc2V0U3VmZml4KCBTdHJpbmcg
aywgU3RyaW5nIHYgKQogICAgewogICAgICAgIENPTlRFTlRfVFlQRV9NQVAucHV0KCBrLCB2
ICk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBmaWxsTWFwKCkKICAgIHsKICAg
ICAgICBzZXRTdWZmaXgoICIiLCAiY29udGVudC91bmtub3duIiApOwogICAgICAgIHNldFN1
ZmZpeCggIi5qYXIiLCAiYXBwbGljYXRpb24veC1qYXIiICk7CiAgICAgICAgc2V0U3VmZml4
KCAiLmdpZiIsICJpbWFnZS9naWYiICk7CiAgICAgICAgc2V0U3VmZml4KCAiLmpwZyIsICJp
bWFnZS9qcGVnIiApOwogICAgICAgIHNldFN1ZmZpeCggIi5qcGVnIiwgImltYWdlL2pwZWci
ICk7CiAgICAgICAgc2V0U3VmZml4KCAiLmh0bSIsICJ0ZXh0L2h0bWwiICk7CiAgICAgICAg
c2V0U3VmZml4KCAiLmh0bWwiLCAidGV4dC9odG1sIiApOwogICAgICAgIHNldFN1ZmZpeCgg
Ii5qbmxwIiwgImFwcGxpY2F0aW9uL3gtamF2YS1qbmxwLWZpbGUiICk7CiAgICB9Cn0KUEsD
BAoAAAAAAGSNdy68vU1yqAYAAKgGAABFAAAAc3JjL2phdmEvb3JnL2FwYWNoZS9hdmFsb24v
Y29ybmVyc3RvbmUvYmxvY2tzL2pubHAvSHR0cENvbnN0YW50cy5qYXZhLyoKICogQ29weXJp
Z2h0IChDKSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAqCiAqIFRoaXMgc29mdHdhcmUgaXMgcHVibGlzaGVkIHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UKICogdmVyc2lvbiAxLjEsIGEgY29w
eSBvZiB3aGljaCBoYXMgYmVlbiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlu
CiAqIHRoZSBMSUNFTlNFLnR4dCBmaWxlLgogKi8KcGFja2FnZSBvcmcuYXBhY2hlLmF2YWxv
bi5jb3JuZXJzdG9uZS5ibG9ja3Muam5scDsKCi8qKgogKiBDb250YW50cyB1c2VkIGluIEhU
VFAgY29tbXVuaWNhdGlvbiB3aXRoIEpOTFAgc2VydmVyLgogKiBAYXV0aG9yIDxhIGhyZWY9
Im1haWx0bzpwcm95YWxAYXBhY2hlLm9yZyI+UGV0ZXIgUm95YWw8L2E+CiAqLwppbnRlcmZh
Y2UgSHR0cENvbnN0YW50cwp7CiAgICAvKiogMlhYOiBnZW5lcmFsbHkgIk9LIiAqLwogICAg
aW50IEhUVFBfT0sgPSAyMDA7CiAgICBpbnQgSFRUUF9DUkVBVEVEID0gMjAxOwogICAgaW50
IEhUVFBfQUNDRVBURUQgPSAyMDI7CiAgICBpbnQgSFRUUF9OT1RfQVVUSE9SSVRBVElWRSA9
IDIwMzsKICAgIGludCBIVFRQX05PX0NPTlRFTlQgPSAyMDQ7CiAgICBpbnQgSFRUUF9SRVNF
VCA9IDIwNTsKICAgIGludCBIVFRQX1BBUlRJQUwgPSAyMDY7CgogICAgLyoqIDNYWDogcmVs
b2NhdGlvbi9yZWRpcmVjdCAqLwogICAgaW50IEhUVFBfTVVMVF9DSE9JQ0UgPSAzMDA7CiAg
ICBpbnQgSFRUUF9NT1ZFRF9QRVJNID0gMzAxOwogICAgaW50IEhUVFBfTU9WRURfVEVNUCA9
IDMwMjsKICAgIGludCBIVFRQX1NFRV9PVEhFUiA9IDMwMzsKICAgIGludCBIVFRQX05PVF9N
T0RJRklFRCA9IDMwNDsKICAgIGludCBIVFRQX1VTRV9QUk9YWSA9IDMwNTsKCiAgICAvKiog
NFhYOiBjbGllbnQgZXJyb3IgKi8KICAgIGludCBIVFRQX0JBRF9SRVFVRVNUID0gNDAwOwog
ICAgaW50IEhUVFBfVU5BVVRIT1JJWkVEID0gNDAxOwogICAgaW50IEhUVFBfUEFZTUVOVF9S
RVFVSVJFRCA9IDQwMjsKICAgIGludCBIVFRQX0ZPUkJJRERFTiA9IDQwMzsKICAgIGludCBI
VFRQX05PVF9GT1VORCA9IDQwNDsKICAgIGludCBIVFRQX0JBRF9NRVRIT0QgPSA0MDU7CiAg
ICBpbnQgSFRUUF9OT1RfQUNDRVBUQUJMRSA9IDQwNjsKICAgIGludCBIVFRQX1BST1hZX0FV
VEggPSA0MDc7CiAgICBpbnQgSFRUUF9DTElFTlRfVElNRU9VVCA9IDQwODsKICAgIGludCBI
VFRQX0NPTkZMSUNUID0gNDA5OwogICAgaW50IEhUVFBfR09ORSA9IDQxMDsKICAgIGludCBI
VFRQX0xFTkdUSF9SRVFVSVJFRCA9IDQxMTsKICAgIGludCBIVFRQX1BSRUNPTl9GQUlMRUQg
PSA0MTI7CiAgICBpbnQgSFRUUF9FTlRJVFlfVE9PX0xBUkdFID0gNDEzOwogICAgaW50IEhU
VFBfUkVRX1RPT19MT05HID0gNDE0OwogICAgaW50IEhUVFBfVU5TVVBQT1JURURfVFlQRSA9
IDQxNTsKCiAgICAvKiogNVhYOiBzZXJ2ZXIgZXJyb3IgKi8KICAgIGludCBIVFRQX1NFUlZF
Ul9FUlJPUiA9IDUwMDsKICAgIGludCBIVFRQX0lOVEVSTkFMX0VSUk9SID0gNTAxOwogICAg
aW50IEhUVFBfQkFEX0dBVEVXQVkgPSA1MDI7CiAgICBpbnQgSFRUUF9VTkFWQUlMQUJMRSA9
IDUwMzsKICAgIGludCBIVFRQX0dBVEVXQVlfVElNRU9VVCA9IDUwNDsKICAgIGludCBIVFRQ
X1ZFUlNJT04gPSA1MDU7Cn0KUEsDBAoAAAAAAL2Zdy7cdY6teQ4AAHkOAABKAAAAc3JjL2ph
dmEvb3JnL2FwYWNoZS9hdmFsb24vY29ybmVyc3RvbmUvYmxvY2tzL2pubHAvRGVmYXVsdEpO
TFBNYW5hZ2VyLmphdmEvKgogKiBDb3B5cmlnaHQgKEMpIFRoZSBBcGFjaGUgU29mdHdhcmUg
Rm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogVGhpcyBzb2Z0d2FyZSBp
cyBwdWJsaXNoZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgTGlj
ZW5zZQogKiB2ZXJzaW9uIDEuMSwgYSBjb3B5IG9mIHdoaWNoIGhhcyBiZWVuIGluY2x1ZGVk
IHdpdGggdGhpcyBkaXN0cmlidXRpb24gaW4KICogdGhlIExJQ0VOU0UudHh0IGZpbGUuCiAq
LwpwYWNrYWdlIG9yZy5hcGFjaGUuYXZhbG9uLmNvcm5lcnN0b25lLmJsb2Nrcy5qbmxwOwoK
aW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwppbXBvcnQgamF2YS5uZXQuU2VydmVyU29j
a2V0OwppbXBvcnQgamF2YS5uZXQuVW5rbm93bkhvc3RFeGNlcHRpb247CgppbXBvcnQgb3Jn
LmFwYWNoZS5hdmFsb24uY29ybmVyc3RvbmUuc2VydmljZXMuam5scC5KTkxQTWFuYWdlcjsK
aW1wb3J0IG9yZy5hcGFjaGUuYXZhbG9uLmNvcm5lcnN0b25lLnNlcnZpY2VzLmNvbm5lY3Rp
b24uQWJzdHJhY3RIYW5kbGVyRmFjdG9yeTsKaW1wb3J0IG9yZy5hcGFjaGUuYXZhbG9uLmNv
cm5lcnN0b25lLnNlcnZpY2VzLmNvbm5lY3Rpb24uQ29ubmVjdGlvbkhhbmRsZXI7CmltcG9y
dCBvcmcuYXBhY2hlLmF2YWxvbi5jb3JuZXJzdG9uZS5zZXJ2aWNlcy5jb25uZWN0aW9uLkNv
bm5lY3Rpb25IYW5kbGVyRmFjdG9yeTsKaW1wb3J0IG9yZy5hcGFjaGUuYXZhbG9uLmNvcm5l
cnN0b25lLnNlcnZpY2VzLmNvbm5lY3Rpb24uQ29ubmVjdGlvbk1hbmFnZXI7CmltcG9ydCBv
cmcuYXBhY2hlLmF2YWxvbi5jb3JuZXJzdG9uZS5zZXJ2aWNlcy5zb2NrZXRzLlNlcnZlclNv
Y2tldEZhY3Rvcnk7CmltcG9ydCBvcmcuYXBhY2hlLmF2YWxvbi5jb3JuZXJzdG9uZS5zZXJ2
aWNlcy5zb2NrZXRzLlNvY2tldE1hbmFnZXI7CmltcG9ydCBvcmcuYXBhY2hlLmF2YWxvbi5m
cmFtZXdvcmsuYWN0aXZpdHkuU3RhcnRhYmxlOwppbXBvcnQgb3JnLmFwYWNoZS5hdmFsb24u
ZnJhbWV3b3JrLmNvbmZpZ3VyYXRpb24uQ29uZmlndXJhdGlvbjsKaW1wb3J0IG9yZy5hcGFj
aGUuYXZhbG9uLmZyYW1ld29yay5jb25maWd1cmF0aW9uLkNvbmZpZ3VyYXRpb25FeGNlcHRp
b247CmltcG9ydCBvcmcuYXBhY2hlLmF2YWxvbi5mcmFtZXdvcmsuc2VydmljZS5TZXJ2aWNl
RXhjZXB0aW9uOwppbXBvcnQgb3JnLmFwYWNoZS5hdmFsb24uZnJhbWV3b3JrLnNlcnZpY2Uu
U2VydmljZU1hbmFnZXI7CgovKioKICogRGVmYXVsdEpOTFBNYW5hZ2VyIGhhbmRsZXMgc29j
a2V0IGNvbm5lY3Rpb25zIGZvciBKTkxQIHNlcnZlciByZXF1ZXN0cy4gCiAqIAogKiBAYXV0
aG9yIDxhIGhyZWY9Im1haWx0bzpwcm95YWxAYXBhY2hlLm9yZyI+UGV0ZXIgUm95YWw8L2E+
CiAqIEBhdXRob3IgTWF1cm8gVGFsZXZpCiAqIEBwaG9lbml4OnNlcnZpY2UgbmFtZT0ib3Jn
LmFwYWNoZS5hdmFsb24uY29ybmVyc3RvbmUuc2VydmljZXMuam5scC5KTkxQTWFuYWdlciIK
ICogQHBob2VuaXg6YmxvY2sKICovCnB1YmxpYyBjbGFzcyBEZWZhdWx0Sk5MUE1hbmFnZXIg
ZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXJGYWN0b3J5CiAgICBpbXBsZW1lbnRzIEpOTFBNYW5h
Z2VyLCBTdGFydGFibGUsIENvbm5lY3Rpb25IYW5kbGVyRmFjdG9yeQp7CiAgICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OTkVDVElPTl9OQU1FID0gSk5MUE1hbmFnZXIuUk9M
RTsKCiAgICBwcml2YXRlIFNvY2tldE1hbmFnZXIgbV9zb2NrZXRNYW5hZ2VyOwogICAgcHJp
dmF0ZSBDb25uZWN0aW9uTWFuYWdlciBtX2Nvbm5lY3Rpb25NYW5hZ2VyOwoKICAgIHByaXZh
dGUgU2VydmVyU29ja2V0IG1fc2VydmVyU29ja2V0OwoKICAgIHByaXZhdGUgaW50IG1fcG9y
dDsKICAgIHByaXZhdGUgSW5ldEFkZHJlc3MgbV9iaW5kVG87CgogICAgLyoqCiAgICAgKiBA
cGhvZW5peDpjb25maWd1cmF0aW9uLXNjaGVtYSB0eXBlPSJyZWxheC1uZyIKICAgICAqLwog
ICAgcHVibGljIHZvaWQgY29uZmlndXJlKCBmaW5hbCBDb25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24gKQogICAgICAgIHRocm93cyBDb25maWd1cmF0aW9uRXhjZXB0aW9uCiAgICB7CiAg
ICAgICAgc3VwZXIuY29uZmlndXJlKCBjb25maWd1cmF0aW9uLmdldENoaWxkKCAiaGFuZGxl
ciIgKSApOwoKICAgICAgICBtX3BvcnQgPSBjb25maWd1cmF0aW9uLmdldENoaWxkKCAicG9y
dCIgKS5nZXRWYWx1ZUFzSW50ZWdlciggODAwOCApOwoKICAgICAgICB0cnkKICAgICAgICB7
CiAgICAgICAgICAgIGZpbmFsIFN0cmluZyBiaW5kQWRkcmVzcyA9IGNvbmZpZ3VyYXRpb24u
Z2V0Q2hpbGQoICJiaW5kIiApLmdldFZhbHVlKCk7CiAgICAgICAgICAgIG1fYmluZFRvID0g
SW5ldEFkZHJlc3MuZ2V0QnlOYW1lKCBiaW5kQWRkcmVzcyApOwogICAgICAgIH0KICAgICAg
ICBjYXRjaCggZmluYWwgVW5rbm93bkhvc3RFeGNlcHRpb24gdW5oZSApCiAgICAgICAgewog
ICAgICAgICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiggIk1hbGZvcm1l
ZCBiaW5kIHBhcmFtZXRlciIsIHVuaGUgKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAg
ICAgKiBAcGhvZW5peDpkZXBlbmRlbmN5IG5hbWU9Im9yZy5hcGFjaGUuYXZhbG9uLmNvcm5l
cnN0b25lLnNlcnZpY2VzLnNvY2tldHMuU29ja2V0TWFuYWdlciIKICAgICAqIEBwaG9lbml4
OmRlcGVuZGVuY3kgbmFtZT0ib3JnLmFwYWNoZS5hdmFsb24uY29ybmVyc3RvbmUuc2Vydmlj
ZXMuY29ubmVjdGlvbi5Db25uZWN0aW9uTWFuYWdlciIKICAgICAqLwogICAgcHVibGljIHZv
aWQgc2VydmljZSggZmluYWwgU2VydmljZU1hbmFnZXIgc2VydmljZU1hbmFnZXIgKQogICAg
ICAgIHRocm93cyBTZXJ2aWNlRXhjZXB0aW9uCiAgICB7CiAgICAgICAgc3VwZXIuc2Vydmlj
ZSggc2VydmljZU1hbmFnZXIgKTsKCiAgICAgICAgbV9zb2NrZXRNYW5hZ2VyID0gKCBTb2Nr
ZXRNYW5hZ2VyICkgc2VydmljZU1hbmFnZXIubG9va3VwKCBTb2NrZXRNYW5hZ2VyLlJPTEUg
KTsKICAgICAgICBtX2Nvbm5lY3Rpb25NYW5hZ2VyID0gKCBDb25uZWN0aW9uTWFuYWdlciAp
IHNlcnZpY2VNYW5hZ2VyLmxvb2t1cCggQ29ubmVjdGlvbk1hbmFnZXIuUk9MRSApOwogICAg
fQoKICAgIHB1YmxpYyB2b2lkIHN0YXJ0KCkKICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAg
ICB7CiAgICAgICAgZmluYWwgU2VydmVyU29ja2V0RmFjdG9yeSBmYWN0b3J5ID0gbV9zb2Nr
ZXRNYW5hZ2VyLmdldFNlcnZlclNvY2tldEZhY3RvcnkoICJwbGFpbiIgKTsKCiAgICAgICAg
bV9zZXJ2ZXJTb2NrZXQgPSBmYWN0b3J5LmNyZWF0ZVNlcnZlclNvY2tldCggbV9wb3J0LCA1
LCBtX2JpbmRUbyApOwogICAgICAgIG1fY29ubmVjdGlvbk1hbmFnZXIuY29ubmVjdCggQ09O
TkVDVElPTl9OQU1FLCBtX3NlcnZlclNvY2tldCwgdGhpcyApOwogICAgfQoKICAgIHB1Ymxp
YyB2b2lkIHN0b3AoKSB0aHJvd3MgRXhjZXB0aW9uCiAgICB7CiAgICAgICAgbV9jb25uZWN0
aW9uTWFuYWdlci5kaXNjb25uZWN0KCBDT05ORUNUSU9OX05BTUUgKTsKICAgICAgICBtX3Nl
cnZlclNvY2tldC5jbG9zZSgpOwogICAgfQoKICAgIHByb3RlY3RlZCBDb25uZWN0aW9uSGFu
ZGxlciBuZXdIYW5kbGVyKCkKICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICB7CiAgICAg
ICAgcmV0dXJuIG5ldyBIdHRwQ29ubmVjdGlvbkhhbmRsZXIoKTsKICAgIH0KfQpQSwMECgAA
AAAAEY13LgAAAAAAAAAAAAAAADAAAABzcmMvamF2YS9vcmcvYXBhY2hlL2F2YWxvbi9jb3Ju
ZXJzdG9uZS9zZXJ2aWNlcy9QSwMECgAAAAAADY93LgAAAAAAAAAAAAAAADUAAABzcmMvamF2
YS9vcmcvYXBhY2hlL2F2YWxvbi9jb3JuZXJzdG9uZS9zZXJ2aWNlcy9qbmxwL1BLAwQKAAAA
AAAlj3cut0TErfgBAAD4AQAARQAAAHNyYy9qYXZhL29yZy9hcGFjaGUvYXZhbG9uL2Nvcm5l
cnN0b25lL3NlcnZpY2VzL2pubHAvSk5MUE1hbmFnZXIuamF2YS8qCiAqIENvcHlyaWdodCAo
QykgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogKgogKiBUaGlzIHNvZnR3YXJlIGlzIHB1Ymxpc2hlZCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlCiAqIHZlcnNpb24gMS4xLCBhIGNvcHkgb2Yg
d2hpY2ggaGFzIGJlZW4gaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpbgogKiB0
aGUgTElDRU5TRS50eHQgZmlsZS4KICovCnBhY2thZ2Ugb3JnLmFwYWNoZS5hdmFsb24uY29y
bmVyc3RvbmUuc2VydmljZXMuam5scDsKCi8qKgogKiBKTkxQTWFuYWdlciAKICogQGF1dGhv
ciBNYXVybyBUYWxldmkKICovCnB1YmxpYyBpbnRlcmZhY2UgSk5MUE1hbmFnZXIKewogICAg
LyoqCiAgICAgKiBSZXByZXNlbnRzIFJvbGUgb2YgdGhlIHNlcnZpY2UKICAgICAqLwogICAg
IFN0cmluZyBST0xFID0gSk5MUE1hbmFnZXIuY2xhc3MuZ2V0TmFtZSgpOyAKICAgIAp9CgoK
ClBLAQIUAAoAAAAAAA6Mdy4AAAAAAAAAAAAAAAAEAAAAAAAAAAAAEAD9QQAAAABzcmMvUEsB
AhQACgAAAAAADox3LgAAAAAAAAAAAAAAAAkAAAAAAAAAAAAQAP1BIgAAAHNyYy9qYXZhL1BL
AQIUAAoAAAAAAA6Mdy4AAAAAAAAAAAAAAAANAAAAAAAAAAAAEAD9QUkAAABzcmMvamF2YS9v
cmcvUEsBAhQACgAAAAAADox3LgAAAAAAAAAAAAAAABQAAAAAAAAAAAAQAP1BdAAAAHNyYy9q
YXZhL29yZy9hcGFjaGUvUEsBAhQACgAAAAAADox3LgAAAAAAAAAAAAAAABsAAAAAAAAAAAAQ
AP1BpgAAAHNyYy9qYXZhL29yZy9hcGFjaGUvYXZhbG9uL1BLAQIUAAoAAAAAAA6Mdy4AAAAA
AAAAAAAAAAAnAAAAAAAAAAAAEAD9Qd8AAABzcmMvamF2YS9vcmcvYXBhY2hlL2F2YWxvbi9j
b3JuZXJzdG9uZS9QSwECFAAKAAAAAAALjXcuAAAAAAAAAAAAAAAALgAAAAAAAAAAABAA/UEk
AQAAc3JjL2phdmEvb3JnL2FwYWNoZS9hdmFsb24vY29ybmVyc3RvbmUvYmxvY2tzL1BLAQIU
AAoAAAAAAJCNdy4AAAAAAAAAAAAAAAAzAAAAAAAAAAAAEAD9QXABAABzcmMvamF2YS9vcmcv
YXBhY2hlL2F2YWxvbi9jb3JuZXJzdG9uZS9ibG9ja3Mvam5scC9QSwECFAAKAAAAAAB9jncu
TQsuO2kgAABpIAAATQAAAAAAAAAAAAAAAADBAQAAc3JjL2phdmEvb3JnL2FwYWNoZS9hdmFs
b24vY29ybmVyc3RvbmUvYmxvY2tzL2pubHAvSHR0cENvbm5lY3Rpb25IYW5kbGVyLmphdmFQ
SwECFAAKAAAAAABkjXcuvL1NcqgGAACoBgAARQAAAAAAAAAAAAAAAACVIgAAc3JjL2phdmEv
b3JnL2FwYWNoZS9hdmFsb24vY29ybmVyc3RvbmUvYmxvY2tzL2pubHAvSHR0cENvbnN0YW50
cy5qYXZhUEsBAhQACgAAAAAAvZl3Ltx1jq15DgAAeQ4AAEoAAAAAAAAAAAAAAAAAoCkAAHNy
Yy9qYXZhL29yZy9hcGFjaGUvYXZhbG9uL2Nvcm5lcnN0b25lL2Jsb2Nrcy9qbmxwL0RlZmF1
bHRKTkxQTWFuYWdlci5qYXZhUEsBAhQACgAAAAAAEY13LgAAAAAAAAAAAAAAADAAAAAAAAAA
AAAQAP1BgTgAAHNyYy9qYXZhL29yZy9hcGFjaGUvYXZhbG9uL2Nvcm5lcnN0b25lL3NlcnZp
Y2VzL1BLAQIUAAoAAAAAAA2Pdy4AAAAAAAAAAAAAAAA1AAAAAAAAAAAAEAD9Qc84AABzcmMv
amF2YS9vcmcvYXBhY2hlL2F2YWxvbi9jb3JuZXJzdG9uZS9zZXJ2aWNlcy9qbmxwL1BLAQIU
AAoAAAAAACWPdy63RMSt+AEAAPgBAABFAAAAAAAAAAAAAAAAACI5AABzcmMvamF2YS9vcmcv
YXBhY2hlL2F2YWxvbi9jb3JuZXJzdG9uZS9zZXJ2aWNlcy9qbmxwL0pOTFBNYW5hZ2VyLmph
dmFQSwUGAAAAAA4ADgDbBAAAfTsAAAAA

--------------000806070206050704010805
Content-Type: text/plain; charset=us-ascii

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
--------------000806070206050704010805--