[Biojava-l] sequence similarity searches - some code

Gerald Loeffler Gerald.Loeffler@vienna.at
Thu, 29 Jun 2000 19:57:09 +0200


This is a multi-part message in MIME format.
--------------61F5F96E809D634B44FBFDF4
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

hi!

Since the topic of BLAST-parsing was mentioned again in an earlier mail,
i thought i could share with you an object-model for sequence-similarity
searches that i've developed over the last few days.

The object-model is defined through interfaces and should be able to
handle all kinds of sequence similarity searches, including BLAST.
Please look in this order at:
	SeqSimilaritySearcher
	SeqSimilaritySearchResult
	SeqSimilaritySearchHit
	SeqSimilaritySearchSubHit

Simple (but sufficient) implementations for result, hit and sub-hit can
be found in these classes, but they don't really contain any
intelligence:
	SimpleSeqSimilaritySearchResult
	SimpleSeqSimilaritySearchHit
	SimpleSeqSimilaritySearchSubHit

An abstract super-class of concrete implementations of a sequence
similarity searcher is
	AbstractSeqSimilaritySearcher
This class handles many things that should be common to all searchers
like configuration from a Java property file and launching the actual
search process and handling input and output to it. It delegates to
abstract methods (following the Template Method Pattern) that need to be
implemented by the concrete sub-classes of this class.

Class
	NCBIBlastPSearcher
and the property file
	ncbi_blastp_searcher.properties
is a partly finished concrete parser for the NCBI BLASTP implementation.
The hard parsing part, namely parsing the alignments from the textual
output of BLASTP still needs to be done...

The whole design lacks many of the sexy aspects of the XML-SAX-based
parser that has been proposed some time ago on this list but i think
that the object-model (defined through the interfaces) describes pretty
accurately how we think of sequence similarity searches - and this was
important to me. Furthermore, it's straightforward to use once
implemented - look at NCBIBlastPSearcher.main().

Please look at the code of at least the interfaces
(SeqSimilaritySearcher, SeqSimilaritySearchResult,
SeqSimilaritySearchHit, SeqSimilaritySearchSubHit) and let me know what
you think of it and what the place of this within BioJava could be!

(you won't be able to compile any of this because it lives within my
package tree and depends on other classes which i don't want to go into
the trouble to send now...)

	cheers,
	gerald
-- 
   Gerald.Loeffler@vienna.at _________________ Software Architect
   http://www.imp.univie.ac.at ____ http://www.daemonstration.com
   OOA&D, Java, J2EE, JSP, Servlets, JavaBeans, ODBMS, RDBMS, XML
--------------61F5F96E809D634B44FBFDF4
Content-Type: application/x-unknown-content-type-java_auto_file;
 name="SeqSimilaritySearcher.java"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="SeqSimilaritySearcher.java"

cGFja2FnZSBjb20uZGFlbW9uc3RyYXRpb24uYnNhLnNlYXJjaDsKCmltcG9ydCBvcmcuYmlv
amF2YS5iaW8uc2VxLio7CmltcG9ydCBvcmcuYmlvamF2YS5iaW8uc3ltYm9sLlN5bWJvbExp
c3Q7CmltcG9ydCBvcmcuYmlvamF2YS5iaW8uQmlvRXhjZXB0aW9uOwoKaW1wb3J0IGphdmEu
dXRpbC4qOwoKLyoqCiAqIG9iamVjdHMgb2YgdGhpcyB0eXBlIHJlcHJlc2VudCBvbmUgcGFy
dGljdWxhciBpbnN0YWxsYXRpb24gKG5vdCBqdXN0IGltcGxlbWVudGF0aW9uKSBvZiBhIHNl
cXVlbmNlIHNpbWlsYXJpdHkKICogc2VhcmNoZXIgc3VjaCBhcyBCTEFTVFAuCiAqIE9iamVj
dHMgb2YgdGhpcyB0eXBlIG11c3QgYmUgaW1tdXRhYmxlIHN1Y2ggdGhhdCBhbGwgcGFyYW1l
dGVycyBhZmZlY3RpbmcgdGhlIG91dGNvbWUgb2YgYSBzZWFyY2ggbXVzdCBiZSBwYXNzZWQK
ICogYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNlYXJjaCgpIG1ldGhvZC4gCiAqCiAqIEBhdXRo
b3IgPEEgaHJlZj0ibWFpbHRvOkdlcmFsZC5Mb2VmZmxlckB2aWVubmEuYXQiPkdlcmFsZCBM
b2VmZmxlcjwvQT4gZm9yIHRoZSAKICogICAgICAgICA8QSBocmVmPSJodHRwOi8vd3d3Lmlt
cC51bml2aWUuYWMuYXQiPklNUDwvQT4KICovCnB1YmxpYyBpbnRlcmZhY2UgU2VxU2ltaWxh
cml0eVNlYXJjaGVyIGV4dGVuZHMgQ2xvbmVhYmxlIHsKICAvKioKICAgKiByZXR1cm4gYSBz
ZXQgb2YgYWxsIGRhdGFiYXNlcyB0aGF0IGNhbiBiZSBzZWFyY2hlZCB3aXRoIHRoaXMgc2Vx
dWVuY2Ugc2ltaWxhcml0eSBzZWFyY2hlci4gVGhpcyBtZXRob2QgcmVmbGVjdHMKICAgKiB0
aGUgZmFjdCB0aGF0IG9iamVjdHMgb2YgdGhpcyB0eXBlIHJlcHJlc2VudCBhIHBhcnRpY3Vs
YXIgaW5zdGFsbGF0aW9uIG9mIGEgc2VhcmNoZXIgd2hpY2ggaGFzIGFjY2VzcyB0byBvbmx5
IGEKICAgKiBsaW1pdGVkIG51bWJlciBvZiBkYXRhYmFzZXMuCiAgICoKICAgKiBAcmV0dXJu
IGFuIHVubW9kaWZpYWJsZSBTZXQgb2YgU2VxdWVuY2VEQiBvYmplY3RzLiBOZXZlciByZXR1
cm5zIG51bGwgYnV0IG1heSByZXR1cm4gYW4gZW1wdHkgc2V0LgogICAqLwogIFNldCBnZXRT
ZWFyY2hhYmxlREJzKCk7CiAgCiAgLyoqCiAgICogdXNpbmcgdGhpcyBzZXF1ZW5jZSBzaW1p
bGFyaXR5IHNlYXJjaGVyLCBzZWFyY2ggd2l0aCB0aGUgZ2l2ZW4gc2VxdWVuY2UgYWdhaW5z
dCB0aGUgZ2l2ZW4KICAgKiBzZXF1ZW5jZSBkYXRhYmFzZS4gSXQgaXMgYSBwcmVjb25kaXRp
b24gdGhhdCB0aGUgc2VxdWVuY2UgYW5kIHRoZSBzZXF1ZW5jZSBkYXRhYmFzZSBiZQogICAq
IGNvbXBhdGlibGUgd2l0aCBlYWNoIG90aGVyIGFuZCB3aXRoIHRoaXMgc2VxdWVuY2Ugc2lt
aWxhcml0eSBzZWFyY2hlciwgb3RoZXJ3aXNlIGFuCiAgICogSWxsZWdhbEFyZ3VtZW50RXhj
ZXB0aW9uIGlzIHRocm93bi4KICAgKiA8cD4KICAgKiBQYXJ0aWN1bGFyIGltcGxlbWVudGF0
aW9ucyBvZiBhIHNlYXJjaGVyIHdpbGwgZGlmZmVyIGluIHRoZSBudW1iZXIgYW5kIGtpbmQg
b2YgcGFyYW1ldGVycyB0aGF0IGNhbiBiZSB1c2VkIHRvCiAgICogY3VzdG9taXplIGEgc2Vh
cmNoLiBBbGwgdGhlc2UgcGFyYW1ldGVycyBtdXN0IGJlIHBhc3NlZCBhcyBhbiBhcmd1bWVu
dCB0byB0aGlzIG1ldGhvZCwgaS5lLiB0aGVzZSBwYXJhbWV0ZXJzIGFyZQogICAqIG5vdCBw
YXJ0IG9mIHRoZSBzdGF0ZSBvZiB0aGlzIHNlYXJjaGVyLgogICAqIDxwPgogICAqIFRoaXMg
bWV0aG9kIHBlcmZvcm1zIGEgc3luY2hyb25vdXMgc2VhcmNoLCBpLmUuIGl0IHdpbGwgYmxv
Y2sgdW50aWwgdGhlIHNlYXJjaCByZXN1bHQgYmVjb21lcwogICAqIGF2YWlsYWJsZS4KICAg
KgogICAqIEBwYXJhbSBxdWVyeVNlcSB0aGUgc2VxdWVuY2Ugd2l0aCB3aGljaCB0byBzZWFy
Y2guCiAgICogICAgICAgICAgICAgICAgIE1heSBub3QgYmUgbnVsbCBvdGhlcndpc2UgYW4g
SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlzIHRocm93bi4KICAgKiBAcGFyYW0gZGIgdGhl
IHNlcXVlbmNlIGRhdGFiYXNlIGFnYWluc3Qgd2hpY2ggdGhlIHNpbWlsYXJpdHkgc2VhcmNo
IHdpbGwgYmUgcGVyZm9ybWVkLgogICAqICAgICAgICAgICBNYXkgbm90IGJlIG51bGwgb3Ro
ZXJ3aXNlIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpcyB0aHJvd24uIE11c3QgYWxz
byBiZSBhbiBlbGVtZW50IG9mIHRoZSBzZXQgb2YKICAgKiAgICAgICAgICAgc2VhcmNoYWJs
ZSBkYnMgcmV0dXJuZXMgYnkgZ2V0U2VhcmNoYWJsZURCcygpLgogICAqIEBwYXJhbSBzZWFy
Y2hQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgdGhhdCBjdXN0b21pemUgdGhlIHNlYXJjaC4gTnVs
bCBtdXN0IGFsd2F5cyBiZSBhIGxlZ2FsIHZhbHVlCiAgICogICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIHRoaXMgYXJndW1lbnQgYW5kIHJlc3VsdHMgaW4gYSBkZWZhdWx0IHNlYXJj
aCBiZWluZyBwZXJmb3JtZWQuIElmIHRoaXMKICAgKiAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXAgY29udGFpbnMga2V5cyBhbmQvb3IgdmFsdWVzIHRoYXQgYXJlIG5vdCBzdXBwb3J0
ZWQgYnkgYSBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uIG9mCiAgICogICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcyBpbnRlcmZhY2UsIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlv
biBpcyB0aHJvd24uCiAgICogQHJldHVybiB0aGUgc2VxdWVuY2Ugc2ltaWxhcml0eSBzZWFy
Y2ggcmVzdWx0IHRoYXQgZW5jYXBzdWxhdGVzIHRoZSByZXN1bHQgb2YgdGhlIHNlYXJjaC4g
TmV2ZXIgcmV0dXJucyBudWxsLgogICAqIEBleGNlcHRpb24gQmlvRXhjZXB0aW9uIGlmIHRo
ZSBhY3R1YWwgc2VhcmNoIGZhaWxzIGZvciBzb21lIHJlYXNvbi4gSWYsIGhvd2V2ZXIsIHRo
ZSBzZWFyY2gKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBjYW4gbm90IGV2ZW4gYmUg
c3RhcnRlZCwgYmVjYXVzZSBhIHByZWNvbmRpdGlvbiBpcyBub3QgbWV0LCBhbgogICAqICAg
ICAgICAgICAgICAgICAgICAgICAgIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpcyB0aHJv
d24uCiAgICogCiAgICovCiAgU2VxU2ltaWxhcml0eVNlYXJjaFJlc3VsdCBzZWFyY2goU3lt
Ym9sTGlzdCBxdWVyeVNlcSwgU2VxdWVuY2VEQiBkYiwgTWFwIHNlYXJjaFBhcmFtZXRlcnMp
IHRocm93cyBCaW9FeGNlcHRpb247CgogIE9iamVjdCBjbG9uZSgpOwp9Cg==
--------------61F5F96E809D634B44FBFDF4
Content-Type: application/x-unknown-content-type-java_auto_file;
 name="SeqSimilaritySearchResult.java"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="SeqSimilaritySearchResult.java"

cGFja2FnZSBjb20uZGFlbW9uc3RyYXRpb24uYnNhLnNlYXJjaDsKCmltcG9ydCBvcmcuYmlv
amF2YS5iaW8uc2VxLio7CmltcG9ydCBvcmcuYmlvamF2YS5iaW8uc3ltYm9sLlN5bWJvbExp
c3Q7CmltcG9ydCBvcmcuYmlvamF2YS5iaW8uQmlvRXhjZXB0aW9uOwoKaW1wb3J0IGphdmEu
dXRpbC4qOwoKLyoqCiAqIG9iamVjdHMgb2YgdGhpcyB0eXBlIHJlcHJlc2VudCBvbmUgcGFy
dGljdWxhciByZXN1bHQgb2YgYSBzZXF1ZW5jZSBzaW1pbGFyaXR5IHNlYXJjaC4KICoKICog
QGF1dGhvciA8QSBocmVmPSJtYWlsdG86R2VyYWxkLkxvZWZmbGVyQHZpZW5uYS5hdCI+R2Vy
YWxkIExvZWZmbGVyPC9BPiBmb3IgdGhlIAogKiAgICAgICAgIDxBIGhyZWY9Imh0dHA6Ly93
d3cuaW1wLnVuaXZpZS5hYy5hdCI+SU1QPC9BPgogKi8KcHVibGljIGludGVyZmFjZSBTZXFT
aW1pbGFyaXR5U2VhcmNoUmVzdWx0IGV4dGVuZHMgQ2xvbmVhYmxlIHsKICAvKioKICAgKiBy
ZXR1cm4gdGhlIHNlcXVlbmNlIHNpbWlsYXJpdHkgc2VhcmNoZXIgdGhhdCBwcm9kdWNlZCB0
aGlzIHNlcXVlbmNlIHNpbWlsYXJpdHkgc2VhcmNoIHJlc3VsdC4KICAgKiBAcmV0dXJuIHRo
ZSBTZXFTaW1pbGFyaXR5U2VhcmNoZXIgb2JqZWN0IHdob3NlIHNlYXJjaCgpIG1ldGhvZCBw
cm9kdWNlZCB0aGlzIG9iamVjdC4gTmV2ZXIgcmV0dXJucwogICAqICAgICAgICAgbnVsbC4K
ICAgKi8KICBTZXFTaW1pbGFyaXR5U2VhcmNoZXIgZ2V0U2VhcmNoZXIoKTsKCiAgLyoqCiAg
ICogcmV0dXJuIHRoZSBzZXF1ZW5jZSB3aXRoIHdoaWNoIHRoZSBzZWFyY2ggdGhhdCBwcm9k
dWNlZCB0aGlzIHNlYXJjaCByZXN1bHQgd2FzIHBlcmZvcm1lZC4KICAgKiBAcmV0dXJuIHRo
ZSBTeW1ib2xMaXN0IG9iamVjdCBwYXNzZWQgdG8gdGhlIHNlYXJjaGVycyBzZWFyY2goKSBt
ZXRob2QgdGhhdCBwcm9kdWNlZCB0aGlzIG9iamVjdC4gTmV2ZXIKICAgKiAgICAgICAgIHJl
dHVybnMgbnVsbC4KICAgKi8KICBTeW1ib2xMaXN0IGdldFF1ZXJ5U2VxdWVuY2UoKTsKCiAg
LyoqCiAgICogcmV0dXJuIHRoZSBzZXF1ZW5jZSBkYXRhYmFzZSBhZ2FpbnN0IHdoaWNoIHRo
ZSBzZWFyY2ggdGhhdCBwcm9kdWNlZCB0aGlzIHNlYXJjaCByZXN1bHQgd2FzIHBlcmZvcm1l
ZC4KICAgKiBAcmV0dXJuIHRoZSBTZXF1ZW5jZURCIG9iamVjdCBwYXNzZWQgdG8gdGhlIHNl
YXJjaGVycyBzZWFyY2goKSBtZXRob2QgdGhhdCBwcm9kdWNlZCB0aGlzIG9iamVjdC4gTmV2
ZXIgcmV0dXJucwogICAqIG51bGwuCiAgICovCiAgU2VxdWVuY2VEQiBnZXRTZXF1ZW5jZURC
KCk7CgogIC8qKgogICAqIHJldHVybiB0aGUgc2VhcmNoIHBhcmFtZXRlcnMgdXNlZCBpbiB0
aGUgc2VhcmNoIHRoYXQgcHJvZHVjZWQgdGhpcyBzZWFyY2ggcmVzdWx0LgogICAqIEByZXR1
cm4gdGhlIChpbW11dGFibGUpIHNlYXJjaCBwYXJhbWV0ZXIgTWFwIG9iamVjdCBwYXNzZWQg
dG8gdGhlIHNlYXJjaGVycyBzZWFyY2goKSBtZXRob2QgdGhhdCBwcm9kdWNlZCB0aGlzCiAg
ICogICAgICAgICBvYmplY3QuIE1heSByZXR1cm4gbnVsbCBiZWNhdXNlIFNlcVNpbWlsYXJp
dHlTZWFyY2hlci5zZWFyY2goKSBtdXN0IGFjY2VwdCBhIG51bGwgdmFsdWUgZm9yCiAgICog
ICAgICAgICBzZWFyY2hQYXJhbWV0ZXJzLgogICAqLwogIE1hcCBnZXRTZWFyY2hQYXJhbWV0
ZXJzKCk7CgogIC8qKgogICAqIHJldHVybiBhbGwgaGl0cyBpbiB0aGlzIHNlcXVlbmNlIHNp
bWlsYXJpdHkgc2VhcmNoIHJlc3VsdC4gVGhlIGhpdHMgYXJlIHNvcnRlZCBmcm9tIGJlc3Qg
dG8gd29yc3QuCiAgICogQHJldHVybiBhbiAoaW1tdXRhYmxlKSBMaXN0IG9mIFNlcVNpbWls
YXJpdHlTZWFyY2hIaXQgb2JqZWN0cyBjb250YWluaW5nIGFsbCBoaXRzIGluIHRoZSBzZWFy
Y2ggcmVzdWx0LgogICAqICAgICAgICAgTmV2ZXIgcmV0dXJucyBudWxsIGJ1dCBtYXkgcmV0
dXJuIGFuIGVtcHR5IGxpc3QuCiAgICovCiAgTGlzdCBnZXRIaXRzKCk7CgogIE9iamVjdCBj
bG9uZSgpOwp9Cg==
--------------61F5F96E809D634B44FBFDF4
Content-Type: application/x-unknown-content-type-java_auto_file;
 name="SeqSimilaritySearchHit.java"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="SeqSimilaritySearchHit.java"

cGFja2FnZSBjb20uZGFlbW9uc3RyYXRpb24uYnNhLnNlYXJjaDsKCmltcG9ydCBvcmcuYmlv
amF2YS5iaW8uc2VxLio7CmltcG9ydCBvcmcuYmlvamF2YS5iaW8uQmlvRXhjZXB0aW9uOwpp
bXBvcnQgb3JnLmJpb2phdmEuYmlvLnN5bWJvbC5BbGlnbm1lbnQ7CgppbXBvcnQgamF2YS51
dGlsLkxpc3Q7CgovKioKICogb2JqZWN0cyBvZiB0aGlzIHR5cGUgcmVwcmVzZW50IG9uZSBw
YXJ0aWN1bGFyIGhpdCAoaS5lLiBzZXF1ZW5jZSBhbmQgYXNzb2NpYXRlZCBpbmZvcm1hdGlv
bikgZnJvbSBhIHNlcXVlbmNlCiAqIHNpbWlsYXJpdHkgc2VhcmNoLgogKgogKiBAYXV0aG9y
IDxBIGhyZWY9Im1haWx0bzpHZXJhbGQuTG9lZmZsZXJAdmllbm5hLmF0Ij5HZXJhbGQgTG9l
ZmZsZXI8L0E+IGZvciB0aGUgCiAqICAgICAgICAgPEEgaHJlZj0iaHR0cDovL3d3dy5pbXAu
dW5pdmllLmFjLmF0Ij5JTVA8L0E+CiAqLwpwdWJsaWMgaW50ZXJmYWNlIFNlcVNpbWlsYXJp
dHlTZWFyY2hIaXQgZXh0ZW5kcyBDbG9uZWFibGUgewogIC8qKgogICAqIHJldHVybiB0aGUg
c3NlcXVlbmNlIHNpbWlsYXJpdHkgc2VhcmNoIHJlc3VsdCB0byB3aGljaCB0aGlzIHNlcXVl
bmNlIHNpbWlsYXJpdHkgc2VhcmNoIGhpdCBiZWxvbmdzLgogICAqIEByZXR1cm4gdGhlIFNl
cVNpbWlsYXJpdHlTZWFyY2hSZXN1bHQgb2JqZWN0IG9mIHdoaWNoIHRoaXMgb2JqZWN0IGlz
IGEgcGFydC4gTmV2ZXIgcmV0dXJucyBudWxsLgogICAqLwogIFNlcVNpbWlsYXJpdHlTZWFy
Y2hSZXN1bHQgZ2V0U2VhcmNoUmVzdWx0KCk7CiAgCiAgLyoqCiAgICogcmV0dXJuIHRoZSBv
dmVyYWxsIHNjb3JlIG9mIHRoaXMgaGl0IGluIHRoZSB1bml0cyBkZWZpbmVkIGJ5IHRoZSBz
ZWFyY2ggYWxnb3JpdGhtLgogICAqIEByZXR1cm4gdGhlIG92ZXJhbGwgc2NvcmUgb2YgdGhp
cyBoaXQuIFRoaXMgaXMgYSBtYW5kYXRvcnkgcGllY2Ugb2YgaW5mb3JtYXRpb24gYW5kIG1h
eSBoZW5jZSBub3QgYmUgTmFOLgogICAqLwogIGRvdWJsZSBnZXRTY29yZSgpOwoKICAvKioK
ICAgKiByZXR1cm4gdGhlIG92ZXJhbGwgUC12YWx1ZSBvZiB0aGlzIGhpdC4KICAgKiBAcmV0
dXJuIHRoZSBvdmVyYWxsIFAtdmFsdWUgb2YgdGhpcyBoaXQuIFRoaXMgaXMgYW4gb3B0aW9u
YWwgKGJ1dCBkZXNpcmVkKSBwaWVjZSBvZiBpbmZvcm1hdGlvbiBhbmQgaW1wbGVtZW50YXRp
b25zCiAgICogICAgICAgICBvZiB0aGlzIGludGVyZmFjZSBtYXkgcmV0dXJuIE5hTiBpZiBh
IFAtdmFsdWUgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyBoaXQuCiAgICovCiAgZG91Ymxl
IGdldFBWYWx1ZSgpOwogIAogIC8qKgogICAqIHJldHVybiB0aGUgb3ZlcmFsbCBFLXZhbHVl
IG9mIHRoaXMgaGl0LgogICAqIEByZXR1cm4gdGhlIG92ZXJhbGwgRS12YWx1ZSBvZiB0aGlz
IGhpdC4gVGhpcyBpcyBhbiBvcHRpb25hbCAoYnV0IGRlc2lyZWQpIHBpZWNlIG9mIGluZm9y
bWF0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbnMKICAgKiAgICAgICAgIG9mIHRoaXMgaW50ZXJm
YWNlIG1heSByZXR1cm4gTmFOIGlmIGFuIEUtdmFsdWUgaXMgbm90IGF2YWlsYWJsZSBmb3Ig
dGhpcyBoaXQuCiAgICovCiAgZG91YmxlIGdldEVWYWx1ZSgpOwoKICAvKioKICAgKiB0aGUg
c2VxdWVuY2UgaWRlbnRpZmllciBvZiB0aGlzIGhpdCB3aXRoaW4gdGhlIHNlcXVlbmNlIGRh
dGFiYXNlIGFnYWluc3Qgd2hpY2ggdGhlIHNlYXJjaCB3YXMgcGVyZm9ybWVkLgogICAqIFVz
ZSBnZXRTZWFyY2hSZXN1bHQoKS5nZXRTZXF1ZW5jZURCKCkuZ2V0U2VxdWVuY2UoaWQpIHRv
IGFjdHVhbGx5IHJldHJpZXZlIHRoZSBzZXF1ZW5jZSB3aXRoIHRoaXMgaWQuCiAgICogQHJl
dHVybiB0aGUgKHVuaXF1ZSkgc2VxdWVuY2UgaWRlbnRpZmllciBmb3IgdGhpcyBoaXQsIHZh
bGlkIHdpdGhpbiB0aGUgc2VxdWVuY2UgZGF0YWJhc2UgYWdhaW5zdCB3aGljaCB0aGlzIHNl
YXJjaAogICAqIHdhcyBwZXJmb3JtZWQuIE5ldmVyIHJldHVybnMgbnVsbC4KICAgKi8KICBT
dHJpbmcgZ2V0U2VxdWVuY2VJRCgpOwogIAogIC8qKgogICAqIHJldHVybiBhbGwgc3ViLWhp
dHMgZm9yIHRoaXMgc2VxdWVuY2Ugc2ltaWxhcml0eSBzZWFyY2ggaGl0LiBUaGUgc3ViLWhp
dHMgY29udGFpbiBjb25yZXRlIGFsaWdubWVudHMgKGFuZCBzY29yZXMpCiAgICogZm9yIHNl
cXVlbmNlIHN0cmV0Y2hlcyBmcm9tIHRoZSBzZXF1ZW5jZSBvZiB0aGlzIGhpdC4gVGhlIHN1
Yi1oaXRzIGluIHRoZSBsaXN0IHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kIGFyZSBzb3J0ZWQK
ICAgKiBmcm9tIGJlc3QgdG8gd29yc3QuCiAgICogQHJldHVybiBhIExpc3Qgb2YgU2VxU2lt
aWxhcml0eVNlYXJjaFN1YkhpdCBvYmplY3RzIGNvbnRhaW5pbmcgYWxsIHN1Yi1oaXRzIGZv
ciB0aGlzIGhpdC4KICAgKiAgICAgICAgIE5ldmVyIHJldHVybnMgbnVsbCBhbmQgdGhlIExp
c3QgaXMgZ3VhcmFudGVlZCB0byBjb250YWluIGF0IGxlYXN0IDEgZW50cnkuCiAgICovCiAg
TGlzdCBnZXRTdWJIaXRzKCk7CgogIE9iamVjdCBjbG9uZSgpOwp9Cg==
--------------61F5F96E809D634B44FBFDF4
Content-Type: application/x-unknown-content-type-java_auto_file;
 name="SeqSimilaritySearchSubHit.java"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="SeqSimilaritySearchSubHit.java"

cGFja2FnZSBjb20uZGFlbW9uc3RyYXRpb24uYnNhLnNlYXJjaDsKCmltcG9ydCBvcmcuYmlv
amF2YS5iaW8uc2VxLio7CmltcG9ydCBvcmcuYmlvamF2YS5iaW8uQmlvRXhjZXB0aW9uOwpp
bXBvcnQgb3JnLmJpb2phdmEuYmlvLnN5bWJvbC5BbGlnbm1lbnQ7CgovKioKICogb2JqZWN0
cyBvZiB0aGlzIHR5cGUgcmVwcmVzZW50IG9uZSBwYXJ0aWN1bGFyIHN1Yi1oaXQgKGkuZS4g
b25lIGNvbmNyZXRlIHNlcXVlbmNlIHN0cmV0Y2ggd2l0aGluIGEgc2VxdWVuY2UgYW5kCiAq
IGFzc29jaWF0ZWQgaW5mb3JtYXRpb24pIGZyb20gYSBzZXF1ZW5jZSBzaW1pbGFyaXR5IHNl
YXJjaCBoaXQuCiAqCiAqIEBhdXRob3IgPEEgaHJlZj0ibWFpbHRvOkdlcmFsZC5Mb2VmZmxl
ckB2aWVubmEuYXQiPkdlcmFsZCBMb2VmZmxlcjwvQT4gZm9yIHRoZSAKICogICAgICAgICA8
QSBocmVmPSJodHRwOi8vd3d3LmltcC51bml2aWUuYWMuYXQiPklNUDwvQT4KICovCnB1Ymxp
YyBpbnRlcmZhY2UgU2VxU2ltaWxhcml0eVNlYXJjaFN1YkhpdCBleHRlbmRzIENsb25lYWJs
ZSB7CiAgLyoqCiAgICogdGhpcyBvYmplY3QgaXMgdXNlZCBhcyB0aGUgbGFiZWwgZm9yIHRo
ZSBxdWVyeSBzZXF1ZW5jZSBpbiB0aGUgYWxpZ25tZW50IG9mIHRoZSBxdWVyeSBzZXF1ZW5j
ZSB3aXRoIHRoaXMgc3ViLWhpdAogICAqIHNlcXVlbmNlCiAgICovCiAgcHVibGljIHN0YXRp
YyBmaW5hbCBTdHJpbmcgUVVFUllfTEFCRUwgPSAiUXVlcnkiOwoKICAvKioKICAgKiByZXR1
cm4gdGhlIHNzZXF1ZW5jZSBzaW1pbGFyaXR5IHNlYXJjaCBoaXQgdG8gd2hpY2ggdGhpcyBz
ZXF1ZW5jZSBzaW1pbGFyaXR5IHNlYXJjaCBzdWItaGl0IGJlbG9uZ3MuCiAgICogQHJldHVy
biB0aGUgU2VxU2ltaWxhcml0eVNlYXJjaEhpdCBvYmplY3Qgb2Ygd2hpY2ggdGhpcyBvYmpl
Y3QgaXMgYSBwYXJ0LiBOZXZlciByZXR1cm5zIG51bGwuCiAgICovCiAgU2VxU2ltaWxhcml0
eVNlYXJjaEhpdCBnZXRIaXQoKTsKICAKICAvKioKICAgKiByZXR1cm4gdGhlIHNjb3JlIG9m
IHRoaXMgc3ViLWhpdCBpbiB0aGUgdW5pdHMgZGVmaW5lZCBieSB0aGUgc2VhcmNoIGFsZ29y
aXRobS4KICAgKiBAcmV0dXJuIHRoZSBzY29yZSBvZiB0aGlzIHN1Yi1oaXQuIFRoaXMgaXMg
YSBtYW5kYXRvcnkgcGllY2Ugb2YgaW5mb3JtYXRpb24gYW5kIG1heSBoZW5jZSBub3QgYmUg
TmFOLgogICAqLwogIGRvdWJsZSBnZXRTY29yZSgpOwoKICAvKioKICAgKiByZXR1cm4gdGhl
IFAtdmFsdWUgb2YgdGhpcyBzdWItaGl0LgogICAqIEByZXR1cm4gdGhlIFAtdmFsdWUgb2Yg
dGhpcyBzdWItaGl0LiBUaGlzIGlzIGFuIG9wdGlvbmFsIChidXQgZGVzaXJlZCkgcGllY2Ug
b2YgaW5mb3JtYXRpb24gYW5kIGltcGxlbWVudGF0aW9ucyBvZgogICAqICAgICAgICAgdGhp
cyBpbnRlcmZhY2UgbWF5IHJldHVybiBOYU4gaWYgYSBQLXZhbHVlIGlzIG5vdCBhdmFpbGFi
bGUgZm9yIHRoaXMgaGl0LgogICAqLwogIGRvdWJsZSBnZXRQVmFsdWUoKTsKICAKICAvKioK
ICAgKiByZXR1cm4gdGhlIEUtdmFsdWUgb2YgdGhpcyBzdWItaGl0LgogICAqIEByZXR1cm4g
dGhlIEUtdmFsdWUgb2YgdGhpcyBzdWItaGl0LiBUaGlzIGlzIGFuIG9wdGlvbmFsIChidXQg
ZGVzaXJlZCkgcGllY2Ugb2YgaW5mb3JtYXRpb24gYW5kIGltcGxlbWVudGF0aW9ucyBvZgog
ICAqICAgICAgICAgdGhpcyBpbnRlcmZhY2UgbWF5IHJldHVybiBOYU4gaWYgYW4gRS12YWx1
ZSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIGhpdC4KICAgKi8KICBkb3VibGUgZ2V0RVZh
bHVlKCk7CiAgCiAgLyoqCiAgICogcmV0dXJuIGFuIGFsaWdubWVudCBvZiAocG9zc2libHkg
cGFydCBvZikgdGhlIHF1ZXJ5IHNlcXVlbmNlIGFnYWluc3QgKHBvc3NpYmx5IHBhcnQgb2Yp
IHRoaXMgaGl0IHNlcXVlbmNlLiBJbiB0aGlzCiAgICogYWxpZ25tZW50LCB0aGUgcXVlcnkg
aXMgaWRlbnRpZmllZCBieSB0aGUgbGFiZWwgZ2l2ZW4gYnkgdGhlIHN0YXRpYyBmaWVsZCBR
VUVSWV9MQUJFTC4KICAgKiBAcmV0dXJuIHRoZSBhbGlnbm1lbnQgb2YgdGhlIHF1ZXJ5IHNl
cXVlbmNlIGFnYWluc3QgdGhpcyBoaXQgc2VxdWVuY2UuIE1heSByZXR1cm4gbnVsbC4KICAg
Ki8KICBBbGlnbm1lbnQgZ2V0QWxpZ25tZW50KCk7CgogIE9iamVjdCBjbG9uZSgpOwp9Cg==
--------------61F5F96E809D634B44FBFDF4
Content-Type: application/x-unknown-content-type-java_auto_file;
 name="SimpleSeqSimilaritySearchResult.java"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="SimpleSeqSimilaritySearchResult.java"

cGFja2FnZSBjb20uZGFlbW9uc3RyYXRpb24uYnNhLnNlYXJjaDsKCmltcG9ydCBjb20uZGFl
bW9uc3RyYXRpb24uY29udHJhY3QuQ29udHJhY3Q7CmltcG9ydCBjb20uZGFlbW9uc3RyYXRp
b24udXRpbC5PYmplY3RVdGlsOwoKaW1wb3J0IG9yZy5sb2c0ai5DYXRlZ29yeTsKCmltcG9y
dCBvcmcuYmlvamF2YS5iaW8uc2VxLio7CmltcG9ydCBvcmcuYmlvamF2YS5iaW8uc3ltYm9s
LlN5bWJvbExpc3Q7CmltcG9ydCBvcmcuYmlvamF2YS5iaW8uQmlvRXhjZXB0aW9uOwoKaW1w
b3J0IGphdmEudXRpbC4qOwoKLyoqCiAqIGFuIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUg
dHJpdmlhbCAoaG91c2VrZWVwaW5nKSByZXNwb25zaWJpbGl0aWVzIG9mIGludGVyZmFjZQog
KiBTZXFTaW1pbGFyaXR5U2VhcmNoUmVzdWx0LiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgYXJl
IGltbXV0YWJsZS4KICoKICogQGF1dGhvciA8QSBocmVmPSJtYWlsdG86R2VyYWxkLkxvZWZm
bGVyQHZpZW5uYS5hdCI+R2VyYWxkIExvZWZmbGVyPC9BPiBmb3IgdGhlIAogKiAgICAgICAg
IDxBIGhyZWY9Imh0dHA6Ly93d3cuaW1wLnVuaXZpZS5hYy5hdCI+SU1QPC9BPgogKi8KcHVi
bGljIGNsYXNzIFNpbXBsZVNlcVNpbWlsYXJpdHlTZWFyY2hSZXN1bHQgaW1wbGVtZW50cyBT
ZXFTaW1pbGFyaXR5U2VhcmNoUmVzdWx0LCBDbG9uZWFibGUgewogIHByaXZhdGUgc3RhdGlj
IGZpbmFsIENhdGVnb3J5IGxvZ2dlciA9IENhdGVnb3J5LmdldEluc3RhbmNlKFNpbXBsZVNl
cVNpbWlsYXJpdHlTZWFyY2hSZXN1bHQuY2xhc3MuZ2V0TmFtZSgpKTsKCiAgcHJpdmF0ZSBT
ZXFTaW1pbGFyaXR5U2VhcmNoZXIgc2VhcmNoZXI7CiAgcHJpdmF0ZSBTeW1ib2xMaXN0ICAg
ICAgICAgICAgcXVlcnlTZXF1ZW5jZTsKICBwcml2YXRlIFNlcXVlbmNlREIgICAgICAgICAg
ICBzZXF1ZW5jZURCOwogIHByaXZhdGUgTWFwICAgICAgICAgICAgICAgICAgIHNlYXJjaFBh
cmFtZXRlcnM7CiAgcHJpdmF0ZSBMaXN0ICAgICAgICAgICAgICAgICAgaGl0czsKCiAgLyoq
IAogICAqIGNvbnN0cnVjdCBhbiBpbW11dGFibGUgb2JqZWN0IGJ5IGdpdmluZyBhbGwgaXRz
IHByb3BlcnRpZXMuCiAgICogQHBhcmFtIHNlYXJjaGVyIHRoZSBzZXF1ZW5jZSBzaW1pbGFy
aXR5IHNlYXJjaGVyIHRoYXQgcHJvZHVjZWQgdGhpcyBzZWFyY2ggcmVzdWx0LiBOb3QgbnVs
bC4KICAgKiBAcGFyYW0gcXVlcnlTZXF1ZW5jZSB0aGUgcXVlcnkgc2VxdWVuY2UgdGhhdCBn
YXZlIHJpc2UgdG8gdGhpcyBzZWFyY2ggcmVzdWx0LiBOb3QgbnVsbC4KICAgKiBAcGFyYW0g
c2VxdWVuY2VEQiB0aGUgc2VxdWVuY2UgZGF0YWJhc2UgYWdhaW5zdCB0aGUgc2VhcmNoIHRo
YXQgcHJvZHVjZWQgdGhpcyByZXN1bHRzIHdhcyBkb25lLiBOb3QgbnVsbC4KICAgKiBAcGFy
YW0gc2VhcmNoUGFyYW1ldGVycyB0aGUgc2VhcmNoIHBhcmFtZXRlcnMgdXNlZCBpbiB0aGUg
c2VhcmNoIHRoYXQgcHJvZHVjZWQgdGhpcyByZXN1bHQuIE1heSBiZSBudWxsLiBJZiBub3QK
ICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCB0aGUgZ2V0dGVyIGZvciB0aGlz
IHByb3BlcnR5IHJldHVybnMgYW4gdW5tb2RpZmlhYmxlIHZpZXcgb2YgdGhpcyBvYmplY3Qu
CiAgICogQHBhcmFtIGhpdHMgdGhlIGxpc3Qgb2YgU2VxU2ltaWxhcml0eVNlYXJjaEhpdCBv
YmplY3RzIHRoYXQgbWFrZSB1cCB0aGlzIHJlc3VsdC4gTm90IG51bGwuIFRoZSBnZXR0ZXIg
Zm9yIHRoaXMKICAgKiAgICAgICAgICAgICBwcm9wZXJ0eSByZXR1cm5zIGFuIHVubW9kaWZp
YWJsZSB2aWV3IG9mIHRoaXMgb2JqZWN0LgogICAqLwogIHB1YmxpYyBTaW1wbGVTZXFTaW1p
bGFyaXR5U2VhcmNoUmVzdWx0KFNlcVNpbWlsYXJpdHlTZWFyY2hlciBzZWFyY2hlciwgU3lt
Ym9sTGlzdCBxdWVyeVNlcXVlbmNlLAogICAgICBTZXF1ZW5jZURCIHNlcXVlbmNlREIsIE1h
cCBzZWFyY2hQYXJhbWV0ZXJzLCBMaXN0IGhpdHMpIHsKICAgIENvbnRyYWN0LnByZShzZWFy
Y2hlciAhPSBudWxsLCAic2VhcmNoZXIgbm90IG51bGwiKTsKICAgIENvbnRyYWN0LnByZShx
dWVyeVNlcXVlbmNlICE9IG51bGwsICJxdWVyeVNlcXVlbmNlIG5vdCBudWxsIik7CiAgICBD
b250cmFjdC5wcmUoc2VxdWVuY2VEQiAhPSBudWxsLCAic2VxdWVuY2VEQiBub3QgbnVsbCIp
OwogICAgLy8gc2VhcmNoUGFyYW1ldGVycyBtYXkgYmUgbnVsbAogICAgQ29udHJhY3QucHJl
KGhpdHMgIT0gbnVsbCwgImhpdHMgbm90IG51bGwiKTsKCiAgICB0aGlzLnNlYXJjaGVyICAg
ICAgICAgPSBzZWFyY2hlcjsKICAgIHRoaXMucXVlcnlTZXF1ZW5jZSAgICA9IHF1ZXJ5U2Vx
dWVuY2U7CiAgICB0aGlzLnNlcXVlbmNlREIgICAgICAgPSBzZXF1ZW5jZURCOwogICAgdGhp
cy5zZWFyY2hQYXJhbWV0ZXJzID0gc2VhcmNoUGFyYW1ldGVyczsKICAgIHRoaXMuaGl0cyAg
ICAgICAgICAgICA9IGhpdHM7CiAgfQogIAogIHB1YmxpYyBTZXFTaW1pbGFyaXR5U2VhcmNo
ZXIgZ2V0U2VhcmNoZXIoKSB7CiAgICByZXR1cm4gc2VhcmNoZXI7CiAgfQoKICBwdWJsaWMg
U3ltYm9sTGlzdCBnZXRRdWVyeVNlcXVlbmNlKCkgewogICAgcmV0dXJuIHF1ZXJ5U2VxdWVu
Y2U7CiAgfQoKICBwdWJsaWMgU2VxdWVuY2VEQiBnZXRTZXF1ZW5jZURCKCkgewogICAgcmV0
dXJuIHNlcXVlbmNlREI7CiAgfQoKICAvKioKICAgKiByZXR1cm4gYW4gdW5tb2RpZmlhYmxl
IHZpZXcgb2YgdGhlIHNlYXJjaCBwYXJhbWV0ZXJzIG1hcC4KICAgKi8KICBwdWJsaWMgTWFw
IGdldFNlYXJjaFBhcmFtZXRlcnMoKSB7CiAgICByZXR1cm4gKHNlYXJjaFBhcmFtZXRlcnMg
PT0gbnVsbCA/IG51bGwgOiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVNYXAoc2VhcmNoUGFy
YW1ldGVycykpOwogIH0KCiAgLyoqCiAgICogcmV0dXJuIGFuIHVubW9kaWZpYWJsZSB2aWV3
IG9mIHRoZSBoaXRzIGxpc3QuCiAgICovCiAgcHVibGljIExpc3QgZ2V0SGl0cygpIHsKICAg
IHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KGhpdHMpOwogIH0KCiAgcHVi
bGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAiU2ltcGxlU2VxU2ltaWxhcml0
eVNlYXJjaFJlc3VsdCBvZiAiICsgZ2V0UXVlcnlTZXF1ZW5jZSgpICsgIiBhZ2FpbnN0ICIg
KyBnZXRTZXF1ZW5jZURCKCk7CiAgfQogIAogIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmpl
Y3QgbykgewogICAgaWYgKG8gPT0gdGhpcykgcmV0dXJuIHRydWU7CiAgICAKICAgIC8vIGlm
IHRoaXMgY2xhc3MgaXMgYSBkaXJlY3Qgc3ViLWNsYXNzIG9mIE9iamVjdDoKICAgIGlmIChv
ID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIGlmICghby5nZXRDbGFzcygpLmVxdWFscyh0
aGlzLmdldENsYXNzKCkpKSByZXR1cm4gZmFsc2U7CiAgICAKICAgIFNpbXBsZVNlcVNpbWls
YXJpdHlTZWFyY2hSZXN1bHQgdGhhdCA9IChTaW1wbGVTZXFTaW1pbGFyaXR5U2VhcmNoUmVz
dWx0KSBvOwogICAgCiAgICAvLyBvbmx5IGNvbXBhcmUgZmllbGRzIG9mIHRoaXMgY2xhc3Mg
KG5vdCBvZiBzdXBlci1jbGFzc2VzKToKICAgIGlmICghT2JqZWN0VXRpbC5lcXVhbHModGhp
cy5zZWFyY2hlciwgdGhhdC5zZWFyY2hlcikpIHJldHVybiBmYWxzZTsKICAgIGlmICghT2Jq
ZWN0VXRpbC5lcXVhbHModGhpcy5xdWVyeVNlcXVlbmNlLCB0aGF0LnF1ZXJ5U2VxdWVuY2Up
KSByZXR1cm4gZmFsc2U7CiAgICBpZiAoIU9iamVjdFV0aWwuZXF1YWxzKHRoaXMuc2VxdWVu
Y2VEQiwgdGhhdC5zZXF1ZW5jZURCKSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKCFPYmplY3RV
dGlsLmVxdWFscyh0aGlzLnNlYXJjaFBhcmFtZXRlcnMsIHRoYXQuc2VhcmNoUGFyYW1ldGVy
cykpIHJldHVybiBmYWxzZTsKICAgIGlmICghT2JqZWN0VXRpbC5lcXVhbHModGhpcy5oaXRz
LCB0aGF0LmhpdHMpKSByZXR1cm4gZmFsc2U7CiAgICAKICAgIC8vIHRoaXMgYW5kIHRoYXQg
YXJlIGlkZW50aWNhbCBpZiB3ZSBtYWRlIGl0ICd0aWwgaGVyZQogICAgcmV0dXJuIHRydWU7
CiAgfQogIAogIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CiAgICAvLyBpZiB0aGlzIGNsYXNz
IGlzIGEgZGlyZWN0IHN1Yi1jbGFzcyBvZiBPYmplY3Q6CiAgICBpbnQgaGMgPSAwOwoKICAg
IC8vIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgZmllbGRzIG9mIHRoaXMgY2xhc3MgKG5vdCBv
ZiBzdXBlci1jbGFzcyk6CiAgICBoYyA9IE9iamVjdFV0aWwuaGFzaENvZGUoaGMsIHNlYXJj
aGVyKTsKICAgIGhjID0gT2JqZWN0VXRpbC5oYXNoQ29kZShoYywgcXVlcnlTZXF1ZW5jZSk7
CiAgICBoYyA9IE9iamVjdFV0aWwuaGFzaENvZGUoaGMsIHNlcXVlbmNlREIpOwogICAgaGMg
PSBPYmplY3RVdGlsLmhhc2hDb2RlKGhjLCBzZWFyY2hQYXJhbWV0ZXJzKTsKICAgIGhjID0g
T2JqZWN0VXRpbC5oYXNoQ29kZShoYywgaGl0cyk7CgogICAgcmV0dXJuIGhjOwogIH0KICAK
ICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgewogICAgLy8gdGhpcyBpcyBhbiBpbW11dGFibGUg
Y2xhc3Mgc28gd2UgY2FuIHJldHVybiBvdXJzZWx2ZXMKICAgIHJldHVybiB0aGlzOwogIH0K
fQo=
--------------61F5F96E809D634B44FBFDF4
Content-Type: application/x-unknown-content-type-java_auto_file;
 name="SimpleSeqSimilaritySearchHit.java"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="SimpleSeqSimilaritySearchHit.java"

cGFja2FnZSBjb20uZGFlbW9uc3RyYXRpb24uYnNhLnNlYXJjaDsKCmltcG9ydCBjb20uZGFl
bW9uc3RyYXRpb24uY29udHJhY3QuQ29udHJhY3Q7CmltcG9ydCBjb20uZGFlbW9uc3RyYXRp
b24udXRpbC5PYmplY3RVdGlsOwoKaW1wb3J0IG9yZy5sb2c0ai5DYXRlZ29yeTsKCmltcG9y
dCBvcmcuYmlvamF2YS5iaW8uc2VxLio7CmltcG9ydCBvcmcuYmlvamF2YS5iaW8uQmlvRXhj
ZXB0aW9uOwppbXBvcnQgb3JnLmJpb2phdmEuYmlvLnN5bWJvbC5BbGlnbm1lbnQ7CgppbXBv
cnQgamF2YS51dGlsLio7CgovKioKICogYSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgaW50
ZXJmYWNlIFNlcVNpbWlsYXJpdHlTZWFyY2hIaXQgdGhhdCB0YWtlcyBjYXJlIG9mIGFsbCB0
aGUgaG91c2VrZWVwaW5nLgogKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgYXJlIGltbXV0YWJs
ZS4KICoKICogQGF1dGhvciA8QSBocmVmPSJtYWlsdG86R2VyYWxkLkxvZWZmbGVyQHZpZW5u
YS5hdCI+R2VyYWxkIExvZWZmbGVyPC9BPiBmb3IgdGhlIAogKiAgICAgICAgIDxBIGhyZWY9
Imh0dHA6Ly93d3cuaW1wLnVuaXZpZS5hYy5hdCI+SU1QPC9BPgogKi8KcHVibGljIGNsYXNz
IFNpbXBsZVNlcVNpbWlsYXJpdHlTZWFyY2hIaXQgaW1wbGVtZW50cyBTZXFTaW1pbGFyaXR5
U2VhcmNoSGl0LCBDbG9uZWFibGUgewogIHByaXZhdGUgc3RhdGljIGZpbmFsIENhdGVnb3J5
IGxvZ2dlciA9IENhdGVnb3J5LmdldEluc3RhbmNlKFNpbXBsZVNlcVNpbWlsYXJpdHlTZWFy
Y2hIaXQuY2xhc3MuZ2V0TmFtZSgpKTsKCiAgcHJpdmF0ZSBTZXFTaW1pbGFyaXR5U2VhcmNo
UmVzdWx0IHNlYXJjaFJlc3VsdDsKICBwcml2YXRlIGRvdWJsZSAgICAgICAgICAgICAgICAg
ICAgc2NvcmU7CiAgcHJpdmF0ZSBkb3VibGUgICAgICAgICAgICAgICAgICAgIHBWYWx1ZTsK
ICBwcml2YXRlIGRvdWJsZSAgICAgICAgICAgICAgICAgICAgZVZhbHVlOwogIHByaXZhdGUg
U3RyaW5nICAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZUlEOwogIHByaXZhdGUgTGlzdCAg
ICAgICAgICAgICAgICAgICAgICBzdWJIaXRzOwoKICAvKioKICAgKiBjb25zdHJ1Y3QgYW4g
aW1tdXRhYmxlIG9iamVjdCBmcm9tIHRoZSB2YWx1ZXMgb2YgYWxsIHByb3BlcnRpZXMuCiAg
ICogQHBhcmFtIHNlYXJjaFJlc3VsdCB0aGUgc2VhcmNoIHJlc3VsdCBvZiB3aGljaCB0aGlz
IHNlYXJjaCBoaXQgaXMgYSBwYXJ0LiBOb3QgbnVsbC4KICAgKiBAcGFyYW0gc2NvcmUgdGhl
IG92ZXJhbGwgc2NvcmUgb2YgdGhpcyBoaXQuIFRoaXMgaXMgYSBtYW5kYXRvcnkgcGllY2Ug
b2YgaW5mb3JtYXRpb24gYW5kIG1heSBoZW5jZSBub3QgYmUgTmFOLgogICAqIEBwYXJhbSBw
VmFsdWUgdGhlIG92ZXJhbGwgUC12YWx1ZSBvZiB0aGlzIGhpdC4gTWF5IGJlIE5hTi4KICAg
KiBAcGFyYW0gZVZhbHVlIHRoZSBvdmVyYWxsIEUtdmFsdWUgb2YgdGhpcyBoaXQuIE1heSBi
ZSBOYU4uCiAgICogQHBhcmFtIHNlcXVlbmNlSUQgdGhlICh1bmlxdWUpIHNlcXVlbmNlIGlk
ZW50aWZpZXIgZm9yIHRoaXMgaGl0LCB2YWxpZCB3aXRoaW4gdGhlIHNlcXVlbmNlIGRhdGFi
YXNlIGFnYWluc3Qgd2hpY2gKICAgKiAgICAgICAgICAgICAgICAgICB0aGlzIHNlYXJjaCB3
YXMgcGVyZm9ybWVkLiBOb3QgbnVsbC4KICAgKiBAcGFyYW0gc3ViSGl0cyBhIExpc3Qgb2Yg
U2VxU2ltaWxhcml0eVNlYXJjaFN1YkhpdCBvYmplY3RzIGNvbnRhaW5pbmcgYWxsIHN1Yi1o
aXRzIGZvciB0aGlzIGhpdC4gTm90IG51bGwuCiAgICovCiAgcHVibGljIFNpbXBsZVNlcVNp
bWlsYXJpdHlTZWFyY2hIaXQoU2VxU2ltaWxhcml0eVNlYXJjaFJlc3VsdCBzZWFyY2hSZXN1
bHQsIGRvdWJsZSBzY29yZSwgZG91YmxlIHBWYWx1ZSwKICAgICAgZG91YmxlIGVWYWx1ZSwg
U3RyaW5nIHNlcXVlbmNlSUQsIExpc3Qgc3ViSGl0cykgewogICAgQ29udHJhY3QucHJlKHNl
YXJjaFJlc3VsdCAhPSBudWxsLCAic2VhcmNoUmVzdWx0IG5vdCBudWxsIik7CiAgICBDb250
cmFjdC5wcmUoIURvdWJsZS5pc05hTihzY29yZSksICJzY29yZSBub3QgTmFOIik7CiAgICAv
LyBwVmFsdWUgbWF5IGJlIE5hTgogICAgLy8gZVZhbHVlIG1heSBiZSBOYU4KICAgIENvbnRy
YWN0LnByZShzZXF1ZW5jZUlEICE9IG51bGwsICJzZXF1ZW5jZUlEIG5vdCBudWxsIik7CiAg
ICBDb250cmFjdC5wcmUoc3ViSGl0cyAhPSBudWxsLCAic3ViSGl0cyBub3QgbnVsbCIpOwoK
ICAgIHRoaXMuc2VhcmNoUmVzdWx0ID0gc2VhcmNoUmVzdWx0OwogICAgdGhpcy5zY29yZSAg
ICAgICAgPSBzY29yZTsKICAgIHRoaXMucFZhbHVlICAgICAgID0gcFZhbHVlOwogICAgdGhp
cy5lVmFsdWUgICAgICAgPSBlVmFsdWU7CiAgICB0aGlzLnNlcXVlbmNlSUQgICA9IHNlcXVl
bmNlSUQ7CiAgICB0aGlzLnN1YkhpdHMgICAgICA9IHN1YkhpdHM7CiAgfQoKICBwdWJsaWMg
U2VxU2ltaWxhcml0eVNlYXJjaFJlc3VsdCBnZXRTZWFyY2hSZXN1bHQoKSB7CiAgICByZXR1
cm4gc2VhcmNoUmVzdWx0OwogIH0KICAKICBwdWJsaWMgZG91YmxlIGdldFNjb3JlKCkgewog
ICAgcmV0dXJuIHNjb3JlOwogIH0KCiAgcHVibGljIGRvdWJsZSBnZXRQVmFsdWUoKSB7CiAg
ICByZXR1cm4gcFZhbHVlOwogIH0KICAKICBwdWJsaWMgZG91YmxlIGdldEVWYWx1ZSgpIHsK
ICAgIHJldHVybiBlVmFsdWU7CiAgfQoKICBwdWJsaWMgU3RyaW5nIGdldFNlcXVlbmNlSUQo
KSB7CiAgICByZXR1cm4gc2VxdWVuY2VJRDsKICB9CiAgCiAgLyoqCiAgICogcmV0dXJuIGFu
IHVubW9kaWZpYWJsZSB2aWV3IG9mIHRoZSBzdWItaGl0cyBsaXN0LgogICAqLwogIHB1Ymxp
YyBMaXN0IGdldFN1YkhpdHMoKSB7CiAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlh
YmxlTGlzdChzdWJIaXRzKTsKICB9CgogIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAg
ICByZXR1cm4gIlNpbXBsZVNlcVNpbWlsYXJpdHlTZWFyY2hIaXQgZm9yICIgKyBnZXRTZXF1
ZW5jZUlEKCkgKyAiIHdpdGhpbiAiICsgZ2V0U2VhcmNoUmVzdWx0KCk7CiAgfQogIAogIHB1
YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgewogICAgaWYgKG8gPT0gdGhpcykgcmV0
dXJuIHRydWU7CiAgICAKICAgIC8vIGlmIHRoaXMgY2xhc3MgaXMgYSBkaXJlY3Qgc3ViLWNs
YXNzIG9mIE9iamVjdDoKICAgIGlmIChvID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIGlm
ICghby5nZXRDbGFzcygpLmVxdWFscyh0aGlzLmdldENsYXNzKCkpKSByZXR1cm4gZmFsc2U7
CiAgICAKICAgIFNpbXBsZVNlcVNpbWlsYXJpdHlTZWFyY2hIaXQgdGhhdCA9IChTaW1wbGVT
ZXFTaW1pbGFyaXR5U2VhcmNoSGl0KSBvOwogICAgCiAgICAvLyBvbmx5IGNvbXBhcmUgZmll
bGRzIG9mIHRoaXMgY2xhc3MgKG5vdCBvZiBzdXBlci1jbGFzc2VzKToKICAgIGlmICghT2Jq
ZWN0VXRpbC5lcXVhbHModGhpcy5zZWFyY2hSZXN1bHQsIHRoYXQuc2VhcmNoUmVzdWx0KSkg
cmV0dXJuIGZhbHNlOwogICAgaWYgKCFPYmplY3RVdGlsLmVxdWFscyh0aGlzLnNjb3JlLCB0
aGF0LnNjb3JlKSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKCFPYmplY3RVdGlsLmVxdWFscyh0
aGlzLnBWYWx1ZSwgdGhhdC5wVmFsdWUpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoIU9iamVj
dFV0aWwuZXF1YWxzKHRoaXMuZVZhbHVlLCB0aGF0LmVWYWx1ZSkpIHJldHVybiBmYWxzZTsK
ICAgIGlmICghT2JqZWN0VXRpbC5lcXVhbHModGhpcy5zZXF1ZW5jZUlELCB0aGF0LnNlcXVl
bmNlSUQpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoIU9iamVjdFV0aWwuZXF1YWxzKHRoaXMu
c3ViSGl0cywgdGhhdC5zdWJIaXRzKSkgcmV0dXJuIGZhbHNlOwogICAgCiAgICAvLyB0aGlz
IGFuZCB0aGF0IGFyZSBpZGVudGljYWwgaWYgd2UgbWFkZSBpdCAndGlsIGhlcmUKICAgIHJl
dHVybiB0cnVlOwogIH0KICAKICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewogICAgLy8gaWYg
dGhpcyBjbGFzcyBpcyBhIGRpcmVjdCBzdWItY2xhc3Mgb2YgT2JqZWN0OgogICAgaW50IGhj
ID0gMDsKCiAgICAvLyBvbmx5IHRha2UgaW50byBhY2NvdW50IGZpZWxkcyBvZiB0aGlzIGNs
YXNzIChub3Qgb2Ygc3VwZXItY2xhc3MpOgogICAgaGMgPSBPYmplY3RVdGlsLmhhc2hDb2Rl
KGhjLCBzZWFyY2hSZXN1bHQpOwogICAgaGMgPSBPYmplY3RVdGlsLmhhc2hDb2RlKGhjLCBz
Y29yZSk7CiAgICBoYyA9IE9iamVjdFV0aWwuaGFzaENvZGUoaGMsIHBWYWx1ZSk7CiAgICBo
YyA9IE9iamVjdFV0aWwuaGFzaENvZGUoaGMsIGVWYWx1ZSk7CiAgICBoYyA9IE9iamVjdFV0
aWwuaGFzaENvZGUoaGMsIHNlcXVlbmNlSUQpOwogICAgaGMgPSBPYmplY3RVdGlsLmhhc2hD
b2RlKGhjLCBzdWJIaXRzKTsKCiAgICByZXR1cm4gaGM7CiAgfQogIAogIHB1YmxpYyBPYmpl
Y3QgY2xvbmUoKSB7CiAgICAvLyB0aGlzIGlzIGFuIGltbXV0YWJsZSBjbGFzcyBzbyB3ZSBj
YW4gcmV0dXJuIG91cnNlbHZlcwogICAgcmV0dXJuIHRoaXM7CiAgfQp9Cg==
--------------61F5F96E809D634B44FBFDF4
Content-Type: application/x-unknown-content-type-java_auto_file;
 name="SimpleSeqSimilaritySearchSubHit.java"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="SimpleSeqSimilaritySearchSubHit.java"

cGFja2FnZSBjb20uZGFlbW9uc3RyYXRpb24uYnNhLnNlYXJjaDsKCmltcG9ydCBjb20uZGFl
bW9uc3RyYXRpb24uY29udHJhY3QuQ29udHJhY3Q7CmltcG9ydCBjb20uZGFlbW9uc3RyYXRp
b24udXRpbC5PYmplY3RVdGlsOwoKaW1wb3J0IG9yZy5iaW9qYXZhLmJpby5zZXEuKjsKaW1w
b3J0IG9yZy5iaW9qYXZhLmJpby5CaW9FeGNlcHRpb247CmltcG9ydCBvcmcuYmlvamF2YS5i
aW8uc3ltYm9sLkFsaWdubWVudDsKCmltcG9ydCBvcmcubG9nNGouQ2F0ZWdvcnk7CgovKioK
ICogYSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgaW50ZXJmYWNlIFNlcVNpbWlsYXJpdHlT
ZWFyY2hTdWJIaXQgdGhhdCB0YWtlcyBjYXJlIG9mIGFsbCB0aGUgaG91c2Uta2VlcGluZy4K
ICogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIGFyZSBpbW11dGFibGUuCiAqIAogKiBAYXV0aG9y
IDxBIGhyZWY9Im1haWx0bzpHZXJhbGQuTG9lZmZsZXJAdmllbm5hLmF0Ij5HZXJhbGQgTG9l
ZmZsZXI8L0E+IGZvciB0aGUgCiAqICAgICAgICAgPEEgaHJlZj0iaHR0cDovL3d3dy5pbXAu
dW5pdmllLmFjLmF0Ij5JTVA8L0E+CiAqLwpwdWJsaWMgY2xhc3MgU2ltcGxlU2VxU2ltaWxh
cml0eVNlYXJjaFN1YkhpdCBpbXBsZW1lbnRzIFNlcVNpbWlsYXJpdHlTZWFyY2hTdWJIaXQs
IENsb25lYWJsZSB7CiAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ2F0ZWdvcnkgbG9nZ2VyID0g
Q2F0ZWdvcnkuZ2V0SW5zdGFuY2UoU2ltcGxlU2VxU2ltaWxhcml0eVNlYXJjaFN1YkhpdC5j
bGFzcy5nZXROYW1lKCkpOwoKICBwcml2YXRlIFNlcVNpbWlsYXJpdHlTZWFyY2hIaXQgaGl0
OwogIHByaXZhdGUgZG91YmxlICAgICAgICAgICAgICAgICBzY29yZTsKICBwcml2YXRlIGRv
dWJsZSAgICAgICAgICAgICAgICAgcFZhbHVlOwogIHByaXZhdGUgZG91YmxlICAgICAgICAg
ICAgICAgICBlVmFsdWU7CiAgcHJpdmF0ZSBBbGlnbm1lbnQgICAgICAgICAgICAgIGFsaWdu
bWVudDsKCiAgLyoqCiAgICogY29uc3RydWN0IGFuIGltbXV0YWJsZSBvYmplY3Qgb2YgdGhp
cyBjbGFzcyBieSBwcm92aWRpbmcgYWxsIHByb3BlcnRpZXMuCiAgICogQHBhcmFtIGhpdCB0
aGUgU2VxU2ltaWxhcml0eVNlYXJjaEhpdCBvYmplY3Qgb2Ygd2hpY2ggdGhpcyBvYmplY3Qg
aXMgYSBwYXJ0LiBOb3QgbnVsbC4KICAgKiBAcGFyYW0gc2NvcmUgdGhlIHNjb3JlIG9mIHRo
aXMgaGl0LiBUaGlzIGlzIGEgbWFuZGF0b3J5IHBpZWNlIG9mIGluZm9ybWF0aW9uIGFuZCBt
YXkgaGVuY2Ugbm90IGJlIE5hTi4KICAgKiBAcGFyYW0gcFZhbHVlIHRoZSBQLXZhbHVlIG9m
IHRoaXMgaGl0LiBNYXkgYmUgTmFOLgogICAqIEBwYXJhbSBlVmFsdWUgdGhlIEUtdmFsdWUg
b2YgdGhpcyBoaXQuIE1heSBiZSBOYU4uCiAgICogQHBhcmFtIGFsaWdubWVudCB0aGUgYWxp
Z25tZW50IG9mIHRoZSBxdWVyeSBzZXF1ZW5jZSBhZ2FpbnN0IHRoaXMgaGl0IHNlcXVlbmNl
LiBNYXkgYmUgbnVsbC4KICAgKi8KICBwdWJsaWMgU2ltcGxlU2VxU2ltaWxhcml0eVNlYXJj
aFN1YkhpdChTZXFTaW1pbGFyaXR5U2VhcmNoSGl0IGhpdCwgZG91YmxlIHNjb3JlLCBkb3Vi
bGUgcFZhbHVlLCBkb3VibGUgZVZhbHVlLAogICAgICBBbGlnbm1lbnQgYWxpZ25tZW50KSB7
CiAgICBDb250cmFjdC5wcmUoaGl0ICE9IG51bGwsICJoaXQgbm90IG51bGwiKTsKICAgIENv
bnRyYWN0LnByZSghRG91YmxlLmlzTmFOKHNjb3JlKSwgInNjb3JlIG5vdCBOYU4iKTsKICAg
IC8vIHBWYWx1ZSBtYXkgYmUgTmFOCiAgICAvLyBlVmFsdWUgbWF5IGJlIE5hTgogICAgLy8g
YWxpZ25tZW50IG1heSBiZSBudWxsCgogICAgdGhpcy5oaXQgICAgICAgPSBoaXQ7CiAgICB0
aGlzLnNjb3JlICAgICA9IHNjb3JlOwogICAgdGhpcy5wVmFsdWUgICAgPSBwVmFsdWU7CiAg
ICB0aGlzLmVWYWx1ZSAgICA9IGVWYWx1ZTsKICAgIHRoaXMuYWxpZ25tZW50ID0gYWxpZ25t
ZW50OwogIH0KCiAgcHVibGljIFNlcVNpbWlsYXJpdHlTZWFyY2hIaXQgZ2V0SGl0KCkgewog
ICAgcmV0dXJuIGhpdDsKICB9CiAgCiAgcHVibGljIGRvdWJsZSBnZXRTY29yZSgpIHsKICAg
IHJldHVybiBzY29yZTsKICB9CgogIHB1YmxpYyBkb3VibGUgZ2V0UFZhbHVlKCkgewogICAg
cmV0dXJuIHBWYWx1ZTsKICB9CiAgCiAgcHVibGljIGRvdWJsZSBnZXRFVmFsdWUoKSB7CiAg
ICByZXR1cm4gZVZhbHVlOwogIH0KICAKICBwdWJsaWMgQWxpZ25tZW50IGdldEFsaWdubWVu
dCgpIHsKICAgIHJldHVybiBhbGlnbm1lbnQ7CiAgfQoKICBwdWJsaWMgU3RyaW5nIHRvU3Ry
aW5nKCkgewogICAgcmV0dXJuICJTaW1wbGVTZXFTaW1pbGFyaXR5U2VhcmNoU3ViSGl0IG9m
ICIgKyBnZXRIaXQoKTsKICB9CiAgCiAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBv
KSB7CiAgICBpZiAobyA9PSB0aGlzKSByZXR1cm4gdHJ1ZTsKICAgIAogICAgLy8gaWYgdGhp
cyBjbGFzcyBpcyBhIGRpcmVjdCBzdWItY2xhc3Mgb2YgT2JqZWN0OgogICAgaWYgKG8gPT0g
bnVsbCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKCFvLmdldENsYXNzKCkuZXF1YWxzKHRoaXMu
Z2V0Q2xhc3MoKSkpIHJldHVybiBmYWxzZTsKICAgIAogICAgU2ltcGxlU2VxU2ltaWxhcml0
eVNlYXJjaFN1YkhpdCB0aGF0ID0gKFNpbXBsZVNlcVNpbWlsYXJpdHlTZWFyY2hTdWJIaXQp
IG87CiAgICAKICAgIC8vIG9ubHkgY29tcGFyZSBmaWVsZHMgb2YgdGhpcyBjbGFzcyAobm90
IG9mIHN1cGVyLWNsYXNzZXMpOgogICAgaWYgKCFPYmplY3RVdGlsLmVxdWFscyh0aGlzLmhp
dCwgdGhhdC5oaXQpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoIU9iamVjdFV0aWwuZXF1YWxz
KHRoaXMuc2NvcmUsIHRoYXQuc2NvcmUpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoIU9iamVj
dFV0aWwuZXF1YWxzKHRoaXMucFZhbHVlLCB0aGF0LnBWYWx1ZSkpIHJldHVybiBmYWxzZTsK
ICAgIGlmICghT2JqZWN0VXRpbC5lcXVhbHModGhpcy5lVmFsdWUsIHRoYXQuZVZhbHVlKSkg
cmV0dXJuIGZhbHNlOwogICAgaWYgKCFPYmplY3RVdGlsLmVxdWFscyh0aGlzLmFsaWdubWVu
dCwgdGhhdC5hbGlnbm1lbnQpKSByZXR1cm4gZmFsc2U7CiAgICAKICAgIC8vIHRoaXMgYW5k
IHRoYXQgYXJlIGlkZW50aWNhbCBpZiB3ZSBtYWRlIGl0ICd0aWwgaGVyZQogICAgcmV0dXJu
IHRydWU7CiAgfQogIAogIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CiAgICAvLyBpZiB0aGlz
IGNsYXNzIGlzIGEgZGlyZWN0IHN1Yi1jbGFzcyBvZiBPYmplY3Q6CiAgICBpbnQgaGMgPSAw
OwoKICAgIC8vIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgZmllbGRzIG9mIHRoaXMgY2xhc3Mg
KG5vdCBvZiBzdXBlci1jbGFzcyk6CiAgICBoYyA9IE9iamVjdFV0aWwuaGFzaENvZGUoaGMs
IGhpdCk7CiAgICBoYyA9IE9iamVjdFV0aWwuaGFzaENvZGUoaGMsIHNjb3JlKTsKICAgIGhj
ID0gT2JqZWN0VXRpbC5oYXNoQ29kZShoYywgcFZhbHVlKTsKICAgIGhjID0gT2JqZWN0VXRp
bC5oYXNoQ29kZShoYywgZVZhbHVlKTsKICAgIGhjID0gT2JqZWN0VXRpbC5oYXNoQ29kZSho
YywgYWxpZ25tZW50KTsKCiAgICByZXR1cm4gaGM7CiAgfQogIAogIHB1YmxpYyBPYmplY3Qg
Y2xvbmUoKSB7CiAgICAvLyB0aGlzIGlzIGFuIGltbXV0YWJsZSBjbGFzcyBzbyB3ZSBjYW4g
cmV0dXJuIG91cnNlbHZlcwogICAgcmV0dXJuIHRoaXM7CiAgfQp9Cg==
--------------61F5F96E809D634B44FBFDF4
Content-Type: application/x-unknown-content-type-java_auto_file;
 name="AbstractSeqSimilaritySearcher.java"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="AbstractSeqSimilaritySearcher.java"

cGFja2FnZSBjb20uZGFlbW9uc3RyYXRpb24uYnNhLnNlYXJjaDsKCmltcG9ydCBjb20uZGFl
bW9uc3RyYXRpb24uY29udHJhY3QuQ29udHJhY3Q7CmltcG9ydCBjb20uZGFlbW9uc3RyYXRp
b24udXRpbC4qOwoKaW1wb3J0IG9yZy5iaW9qYXZhLmJpby5zZXEuKjsKaW1wb3J0IG9yZy5i
aW9qYXZhLmJpby5zeW1ib2wuU3ltYm9sTGlzdDsKaW1wb3J0IG9yZy5iaW9qYXZhLmJpby5C
aW9FeGNlcHRpb247CgppbXBvcnQgb3JnLmxvZzRqLkNhdGVnb3J5OwoKaW1wb3J0IGphdmEu
dXRpbC4qOwppbXBvcnQgamF2YS5pby4qOwoKLyoqCiAqIGFuIGFic3RyYWN0IGNsYXNzIHRo
YXQgaW1wbGVtZW50cyB0aGUgU2VxU2ltaWxhcml0eVNlYXJjaGVyIGludGVyZmFjZSBhbmQg
Y2FuIGJlIHVzZWZ1bCBmb3IgYWxsIGNvbmNyZXRlIGNsYXNzZXMgdGhhdAogKiBpbXBsZW1l
bnQgdGhpcyBpbnRlcmZhY2UgYmVjYXVzZSBpdCBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcg
ZnVuY3Rpb25hbGl0eToKICogPHVsPgogKiA8bGk+VGhlIGNvbnN0cnVjdG9yIGluaXRpYWxp
emVzIHRoZSBvYmplY3QgZnJvbSBhIHByb3BlcnRpZXMgZmlsZSB3aGljaCBjb250YWlucyB0
aGUgZGF0YWJhc2VzIHRoYXQgY2FuIGJlIHNlYXJjaGVkCiAqIGFuZCB0aGUgY29tbWFuZCBs
aW5lIHVzZWQgdG8gbGF1bmNoIHRoZSBzZWFyY2ggcHJvZ3JhbS48L2xpPgogKiA8bGk+Z2V0
U2VhcmNoYWJsZURCcygpIGlzIGZ1bGx5IGltcGxlbWVudGVkIGFuZCByZXR1cm5zIHRoZSBE
QnMgYXMgY29udGFpbmVkIGluIHRoZSBwcm9wZXJ0aWVzIGZpbGUuPC9saT4KICogPGxpPnNl
YXJjaCgpIGlzIGltcGxlbWVudGVkIHRvIGxhdW5jaCB0aGUgc2VhcmNoIHByb2Nlc3MsIGNv
bGxlY3QgaXRzIHN0ZG91dCBhbmQgY2FsbCBhYnN0cmFjdCBtZXRob2RzICh0aGF0IG5lZWQK
ICogdG8gYmUgaW1wbGVtZW50ZWQgYnkgdGhlIGNvbmNyZXRlIHN1Yi1jbGFzc2VzIG9mIHRo
aXMgY2xhc3MpIHdoZW5ldmVyIHNvbWV0aGluZyBzcGVjaWZpYyBuZWVkcyB0byBiZSBkb25l
CiAqIChUZW1wbGF0ZSBNZXRob2QgcGF0dGVybikuPC9saT4KICogPC91bD4KICoKICogQGF1
dGhvciA8QSBocmVmPSJtYWlsdG86R2VyYWxkLkxvZWZmbGVyQHZpZW5uYS5hdCI+R2VyYWxk
IExvZWZmbGVyPC9BPiBmb3IgdGhlIAogKiAgICAgICAgIDxBIGhyZWY9Imh0dHA6Ly93d3cu
aW1wLnVuaXZpZS5hYy5hdCI+SU1QPC9BPgogKi8KcHVibGljIGFic3RyYWN0IGNsYXNzIEFi
c3RyYWN0U2VxU2ltaWxhcml0eVNlYXJjaGVyIGltcGxlbWVudHMgU2VxU2ltaWxhcml0eVNl
YXJjaGVyLCBDbG9uZWFibGUgewogIHByaXZhdGUgc3RhdGljIGZpbmFsIENhdGVnb3J5IGxv
Z2dlciA9IENhdGVnb3J5LmdldEluc3RhbmNlKEFic3RyYWN0U2VxU2ltaWxhcml0eVNlYXJj
aGVyLmNsYXNzLmdldE5hbWUoKSk7CgogIC8qKgogICAqIFRoZSBmb2xsb3dpbmcga2V5IGlz
IHVzZWQgdG8gZ2V0IHRoZSBsaXN0IG9mIHNlYXJjaGFibGUgZGF0YWJhc2VzIGZyb20gdGhl
IHByb3BlcnRpZXMgZmlsZSBieSB0aGUgY29uc3RydWN0b3IKICAgKiBvZiB0aGlzIGNsYXNz
LgogICAqLwogIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFQVJDSEFCTEVfREJTX1BS
T1BFUlRZX0tFWSA9ICJzZWFyY2hhYmxlX2RicyI7CgogIC8qKiAKICAgKiBUaGUgZm9sbG93
aW5nIGtleSBpcyB1c2VkIHRvIGdldCB0aGUgc2VhcmNoIGNvbW1hbmQgZnJvbSB0aGUgcHJv
cGVydGllcyBmaWxlIGJ5IHRoZSBjb25zdHJ1Y3RvcgogICAqIG9mIHRoaXMgY2xhc3MuCiAg
ICovCiAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VBUkNIX0NPTU1BTkRfUFJPUEVS
VFlfS0VZID0gInNlYXJjaF9jb21tYW5kIjsKCiAgLyoqCiAgICogVGhlIGZvbGxvd2luZyBr
ZXkgaXMgdXNlZCB0byBnZXQgdGhlIGRlZmF1bHQgc2VhcmNoIHBhcmFtZXRlcnMgZnJvbSB0
aGUgcHJvcGVydGllcyBmaWxlIGJ5IHRoZSBjb25zdHJ1Y3RvcgogICAqIG9mIHRoaXMgY2xh
c3MuCiAgICovCiAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9TRUFSQ0hf
UEFSQU1FVEVSU19QUk9QRVJUWV9LRVkgPSAiZGVmYXVsdF9zZWFyY2hfcGFyYW1ldGVycyI7
CgogIHByaXZhdGUgVHlwZWRQcm9wZXJ0aWVzIHByb3BlcnRpZXM7CiAgcHJpdmF0ZSBTZXQg
ICAgICAgICAgICAgc2VhcmNoYWJsZURCczsKICBwcml2YXRlIFN0cmluZyAgICAgICAgICBz
ZWFyY2hDb21tYW5kOwogIHByaXZhdGUgU3RyaW5nICAgICAgICAgIGRlZmF1bHRTZWFyY2hQ
YXJhbWV0ZXJzOwoKICAvKioKICAgKiBDb25zdHJ1Y3QgYnkgZ2l2aW5nIHRoZSBpbnB1dCBz
dHJlYW0gZnJvbSB3aGljaCBhIGphdmEudXRpbC5Qcm9wZXJ0aWVzIG9iamVjdCBjYW4gYmUg
bG9hZGVkIHRoYXQgY29uZmlndXJlcyB0aGlzCiAgICogb2JqZWN0LiBUaGUgZm9sbG93aW5n
IHByb3BlcnRpZXMgYXJlIGV4dHJhY3RlZCBmcm9tIHRoZSBwcm9wZXJ0aWVzIG9iamVjdCBs
b2FkZWQgaW4gdGhpcyB3YXk6CiAgICogPHVsPgogICAqIDxsaT5rZXk6IHNlYXJjaGFibGVf
ZGJzLCB2YWx1ZTogY29tbWEsIHNlbWljb2xvbiBvciB0YWItc2VwYXJhdGVkIGxpc3Qgb2Yg
c3RyaW5ncyBuYW1pbmcgdGhlIG5hbWVzIG9mIGFsbAogICAqICAgICBkYXRhYmFzZXMgdGhh
dCBjYW4gYmUgc2VhcmNoZWQgd2l0aCB0aGlzIHNlcXVlbmNlIHNpbWlsYXJpdHkgc2VhcmNo
ZXIuIEVhY2ggZGF0YWJhc2UgbmFtZSBtdXN0IGFwcGVhciBpbgogICAqICAgICBleGFjdGx5
IHRoZSB3YXkgaW4gd2hpY2ggaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHNlYXJjaCBjb21t
YW5kLjwvbGk+CiAgICogPGxpPmtleTogc2VhcmNoX2NvbW1hbmQsIHZhbHVlOiBzZWFyY2gg
Y29tbWFuZCAoYSBzdHJpbmcpIHVzZWQgdG8gbGF1bmNoIHRoZSBzZXF1ZW5jZSBzaW1pbGFy
aXR5IHNlYXJjaGVyLjwvbGk+CiAgICogPGxpPmtleTogZGVmYXVsdF9zZWFyY2hfcGFyYW1l
dGVycywgdmFsdWU6IHNlYXJjaCBwYXJhbWV0ZXJzIChhIHN0cmluZykgdGhhdCB3aWxsIGJl
IHVzZWQgZXhhY3RseSBhcyBnaXZlbgogICAqICAgICBoZXJlIHdpdGggdGhlIHNlYXJjaCBj
b21tYW5kIGlmIGFuZCBvbmx5IGlmIG5vIHNlYXJjaCBwYXJhbWV0ZXJzICh0aGUgbnVsbCB2
YWx1ZSkgYXJlIHBhc3NlZCB0byB0aGUgc2VhcmNoKCkKICAgKiAgICAgbWV0aG9kICh3aGlj
aCBzaWduaWZpZXMgdGhhdCBkZWZhdWx0IHNlYXJjaCBwYXJhbWV0ZXJzIHNob3VsZCBiZSB1
c2VkKS4gVGhpcyBwcm9wZXJ0eSBtdXN0IG5vdCBiZSBwcmVzZW50LjwvbGk+CiAgICogPC91
bD4KICAgKgogICAqIEBwYXJhbSBwcm9wZXJ0aWVzSW5wdXRTdHJlYW0gYW4gaW5wdXQgc3Ry
ZWFtIGZyb20gd2hpY2ggYSBQcm9wZXJ0aWVzIG9iamVjdCBjYW4gYmUgbG9hZGVkLiBOb3Qg
bnVsbC4KICAgKiBAZXhjZXB0aW9uIElPRXhjZXB0aW9uIGlzIHRocm93biBpZiBsb2FkaW5n
IGZyb20gdGhlIGdpdmVuIGlucHV0IHN0cmVhbSBmYWlscwogICAqLwogIHByb3RlY3RlZCBB
YnN0cmFjdFNlcVNpbWlsYXJpdHlTZWFyY2hlcihJbnB1dFN0cmVhbSBwcm9wZXJ0aWVzSW5w
dXRTdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICBDb250cmFjdC5wcmUocHJvcGVy
dGllc0lucHV0U3RyZWFtICE9IG51bGwsICJwcm9wZXJ0aWVzSW5wdXRTdHJlYW0gbm90IG51
bGwiKTsKICAgIAogICAgLy8gbG9hZCB0aGUgcHJvcGVydGllcwogICAgVHlwZWRQcm9wZXJ0
aWVzIHByb3BzID0gbmV3IFR5cGVkUHJvcGVydGllcygpOwogICAgcHJvcHMubG9hZChwcm9w
ZXJ0aWVzSW5wdXRTdHJlYW0pOwoKICAgIC8vIGxvYWQgbmFtZXMgb2Ygc2VhcmNoYWJsZSBk
YnMgYW5kIGNvbnZlcnQgdGhlbSBpbnRvIGEgc2V0IG9mIFNlcXVlbmNlREIgb2JqZWN0cwog
ICAgQ29sbGVjdGlvbiBkYlN0cmluZ3MgPSBwcm9wcy5nZXRQcm9wZXJ0eUFzU3RyaW5nTGlz
dChTRUFSQ0hBQkxFX0RCU19QUk9QRVJUWV9LRVkpOwogICAgU2V0IGRicyA9IG5ldyBIYXNo
U2V0KCk7CiAgICBmb3IgKEl0ZXJhdG9yIGkgPSBkYlN0cmluZ3MuaXRlcmF0b3IoKTsgaS5o
YXNOZXh0KCk7ICApIHsKICAgICAgLy8gVE9ETyBpbnN0YW50aWF0ZSBhIGJldHRlciBzdWl0
ZWQgc3ViY2xhc3Mgb2YgU2VxdWVuY2VEQiB0aGFuIHRoZSBIYXNoU2VxdWVuY2VEQgogICAg
ICBkYnMuYWRkKG5ldyBIYXNoU2VxdWVuY2VEQihudWxsLCAoU3RyaW5nKSBpLm5leHQoKSkp
OwogICAgfQoKICAgIC8vIGxvYWQgc2VhcmNoIGNvbW1hbmQKICAgIFN0cmluZyBjbWQgPSBw
cm9wcy5nZXRQcm9wZXJ0eShTRUFSQ0hfQ09NTUFORF9QUk9QRVJUWV9LRVkpOwogICAgQ29u
dHJhY3QucHJlKGNtZCAhPSBudWxsLCAic2VhcmNoIGNvbW1hbmQgcHJvcGVydHkgKHJldHJp
ZXZlZCBieSBrZXkgIiArIFNFQVJDSF9DT01NQU5EX1BST1BFUlRZX0tFWSArCiAgICAgICIp
IG11c3QgZXhpc3QiKTsKICAgIAogICAgLy8gbG9hZCBkZWZhdWx0IHNlYXJjaCBwYXJhbWV0
ZXJzIChpZiBwcmVzZW50KQogICAgU3RyaW5nIHBhcmFtcyA9IHByb3BzLmdldFByb3BlcnR5
KERFRkFVTFRfU0VBUkNIX1BBUkFNRVRFUlNfUFJPUEVSVFlfS0VZKTsKCiAgICAvLyBzZXQg
cmVtYWluaW5nIHN0YXRlIG9mIHRoaXMgb2JqZWN0CiAgICB0aGlzLnByb3BlcnRpZXMgICAg
ICAgICAgICAgID0gcHJvcHM7CiAgICB0aGlzLnNlYXJjaGFibGVEQnMgICAgICAgICAgID0g
ZGJzOwogICAgdGhpcy5zZWFyY2hDb21tYW5kICAgICAgICAgICA9IGNtZDsKICAgIHRoaXMu
ZGVmYXVsdFNlYXJjaFBhcmFtZXRlcnMgPSBwYXJhbXM7CiAgfQoKICBwdWJsaWMgU2V0IGdl
dFNlYXJjaGFibGVEQnMoKSB7CiAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxl
U2V0KHNlYXJjaGFibGVEQnMpOwogIH0KCiAgcHVibGljIFNlcVNpbWlsYXJpdHlTZWFyY2hS
ZXN1bHQgc2VhcmNoKFN5bWJvbExpc3QgcXVlcnlTZXEsIFNlcXVlbmNlREIgZGIsIE1hcCBz
ZWFyY2hQYXJhbWV0ZXJzKQogICAgICB0aHJvd3MgQmlvRXhjZXB0aW9uIHsKICAgIENvbnRy
YWN0LnByZShxdWVyeVNlcSAhPSBudWxsLCAicXVlcnlTZXEgbm90IG51bGwiKTsKICAgIENv
bnRyYWN0LnByZShkYiAhPSBudWxsLCAiZGIgbm90IG51bGwiKTsKICAgIENvbnRyYWN0LnBy
ZShnZXRTZWFyY2hhYmxlREJzKCkuY29udGFpbnMoZGIpLCAiZGIgbXVzdCBiZSBhIG1lbWJl
ciBvZiB0aGUgc2V0IG9mIHNlYXJjaGFibGUgZGJzIik7CgogICAgLy8gcHJlcGFyZSBzZWFy
Y2ggYW5kIGdldCB0aGUgZXhhY3QgY29tbWFuZCBzdHJpbmcKICAgIFN0cmluZyBjb21tYW5k
ID0gcHJlcGFyZVNlYXJjaEFuZEdldFNlYXJjaENvbW1hbmQocXVlcnlTZXEsIGRiLCBzZWFy
Y2hQYXJhbWV0ZXJzKTsKICAgIENvbnRyYWN0LmFzc2VydChjb21tYW5kICE9IG51bGwgJiYg
Y29tbWFuZC5sZW5ndGgoKSA+IDAsICJzZWFyY2ggY29tbWFuZCB0byBsYXVuY2ggbm90IG51
bGwgYW5kIG5vdCBlbXB0eSIpOwoKICAgIC8vIGxhdW5jaCB0aGUgc2VhcmNoIHByb2Nlc3Mg
YW5kIHdhaXQgZm9yIGl0cyBjb21wbGV0aW9uCiAgICBTZXFTaW1pbGFyaXR5U2VhcmNoUmVz
dWx0IHNlYXJjaFJlc3VsdCA9IG51bGw7CiAgICB0cnkgewogICAgICBQcm9jZXNzIHByb2Nl
c3MgPSBSdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKGNvbW1hbmQpOwoKICAgICAgV3JpdGVy
IHN0ZGluID0gbmV3IE91dHB1dFN0cmVhbVdyaXRlcihwcm9jZXNzLmdldE91dHB1dFN0cmVh
bSgpKTsKICAgICAgcGlwZUludG9TZWFyY2hQcm9jZXNzKHN0ZGluLCBxdWVyeVNlcSk7CiAg
ICAgIHN0ZGluLmNsb3NlKCk7CiAgICAgIAogICAgICAvLyB3YWl0IGZvciB0aGUgcHJvY2Vz
cyB0byBmaW5pc2gKICAgICAgaW50IGV4aXRWYWx1ZSA9IHByb2Nlc3Mud2FpdEZvcigpOwoK
ICAgICAgUmVhZGVyIHN0ZG91dCA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihwcm9jZXNzLmdl
dElucHV0U3RyZWFtKCkpOwogICAgICBzZWFyY2hSZXN1bHQgPSBwcm9jZXNzT3V0cHV0T2ZT
ZWFyY2hQcm9jZXNzQW5kR2V0U2VhcmNoUmVzdWx0KHN0ZG91dCwgZXhpdFZhbHVlLCBxdWVy
eVNlcSwgZGIsIHNlYXJjaFBhcmFtZXRlcnMpOwogICAgICBzdGRvdXQuY2xvc2UoKTsKICAg
IH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgIGxvZ2dlci5lcnJvcigiZXhlY3V0aW5n
IHRoZSBzZWFyY2ggY29tbWFuZCBmYWlsZWQgd2l0aCBhbiBleGNlcHRpb24iLCBlKTsKICAg
ICAgdGhyb3cgbmV3IEJpb0V4Y2VwdGlvbigic2VhcmNoIGZhaWxlZCBiZWNhdXNlOiBlLmdl
dE1lc3NhZ2UoKSIpOwogICAgfQoKICAgIC8vIGNoZWNrIHBvc3Rjb25kaXRpb24gdGhhdCBz
ZWFyY2ggcmVzdWx0IG1heSBub3QgYmUgbnVsbAogICAgQ29udHJhY3QucG9zdChzZWFyY2hS
ZXN1bHQgIT0gbnVsbCwgInNlYXJjaFJlc3VsdCBub3QgbnVsbCIpOwoKICAgIHJldHVybiBz
ZWFyY2hSZXN1bHQ7CiAgfQoKICAvKioKICAgKiBSZXR1cm4gdGhlIHByb3BlcnRpZXMgd2hp
Y2ggY29uZmlndXJlIHRoaXMgY2xhc3MgYW5kIHdoaWNoIHdhcyBsb2FkZWQgZnJvbSB0aGUg
aW5wdXQgc3RyZWFtIGdpdmVuIHRvIHRoZQogICAqIGNvbnN0cnVjdG9yIG9mIHRoaXMgY2xh
c3MuCiAgICovCiAgcHJvdGVjdGVkIFR5cGVkUHJvcGVydGllcyBnZXRQcm9wZXJ0aWVzKCkg
ewogICAgcmV0dXJuIHByb3BlcnRpZXM7CiAgfQoKICAvKioKICAgKiBSZXR1cm4gdGhlIHNl
YXJjaCBjb21tYW5kIGFzIGdpdmVuIGluIHRoZSBwcm9wZXJ0aWVzIGZpbGUuCiAgICovCiAg
cHJvdGVjdGVkIFN0cmluZyBnZXRTZWFyY2hDb21tYW5kKCkgewogICAgcmV0dXJuIHNlYXJj
aENvbW1hbmQ7CiAgfQoKICAvKioKICAgKiBSZXR1cm4gdGhlIGRlZmF1bHQgc2VhcmNoIHBh
cmFtZXRlcnMgYXMgZ2l2ZW4gaW4gdGhlIHByb3BlcnRpZXMgZmlsZS4KICAgKi8KICBwcm90
ZWN0ZWQgU3RyaW5nIGdldERlZmF1bHRTZWFyY2hQYXJhbWV0ZXJzKCkgewogICAgcmV0dXJu
IGRlZmF1bHRTZWFyY2hQYXJhbWV0ZXJzOwogIH0KCiAgLyoqIAogICAqIHRoaXMgbWV0aG9k
IGlzIGNhbGxlZCBmcm9tIHdpdGhpbiAodGhpcyBjbGFzc2VzIGltcGxlbWVudGF0aW9uIG9m
KSB0aGUgc2VhcmNoKCkgbWV0aG9kIGluIHByZXBhcmF0aW9uIG9mIGxhdW5jaGluZwogICAq
IHRoZSBzZWFyY2ggcHJvY2Vzcy4gSXQgc2hvdWxkIHByZXBhcmUgZXZlcnl0aGluZyBmb3Ig
dGhlIGFjdHVhbAogICAqIGxhdW5jaGluZyBvZiB0aGUgc2VhcmNoIHByb2Nlc3MgYW5kIG11
c3QgcmV0dXJuIHRoZSBhY3R1YWwgc2VhcmNoIGNvbW1hbmQgc3RyaW5nIHRoYXQgd2lsbCBi
ZSB1c2VkIHRvIGxhdW5jaCB0aGUKICAgKiBzZWFyY2ggcHJvY2Vzcy4gVGhlIGltcGxlbWVu
dGVyIG9mIHRoaXMgbWV0aG9kIHdpbGwgbW9zdCBwcm9iYWJseSB1c2UgdGhlIHZhbHVlcyBy
ZXR1cm5lZCBieSB0aGUgbWV0aG9kcwogICAqIGdldFNlYXJjaENvbW1hbmQoKSwgZ2V0RGVm
YXVsdFNlYXJjaFBhcmFtZXRlcnMoKSBhbmQgbWF5YmUgZ2V0UHJvcGVydGllcygpIHRvIGFj
dHVhbGx5IHBlcmZvcm0gdGhpcyB0YXNrLgogICAqCiAgICogQHBhcmFtIHF1ZXJ5U2VxIGV4
YWN0bHkgYXMgcGFzc2VkIHRvIHRoZSBzZWFyY2goKSBtZXRob2QuIEd1YXJhbnRlZWQgdG8g
bm90IGJlIG51bGwuCiAgICogQHBhcmFtIGRiIGV4YWN0bHkgYXMgcGFzc2VkIHRvIHRoZSBz
ZWFyY2goKSBtZXRob2QuIEd1YXJhbnRlZWQgdG8gbm90IGJlIG51bGwgYW5kIHRvIGJlIGEg
bWVtYmVyIG9mIHRoZSBzZXQgb2YKICAgKiAgICAgICAgICAgc2VhcmNoYWJsZSBkYnMuCiAg
ICogQHBhcmFtIHNlYXJjaFBhcmFtZXRlcnMgZXhhY3RseSBhcyBwYXNzZWQgdG8gdGhlIHNl
YXJjaCgpIG1ldGhvZC4gQ2FuIGJlIG51bGwuCiAgICogQHJldHVybiB0aGUgZXhhY3Qgc2Vh
cmNoIGNvbW1hbmQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gbGF1bmNoIHRoZSBzZWFyY2ggcHJv
Y2Vzcy4KICAgKi8KICBwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIHByZXBhcmVTZWFyY2hB
bmRHZXRTZWFyY2hDb21tYW5kKFN5bWJvbExpc3QgcXVlcnlTZXEsIFNlcXVlbmNlREIgZGIs
IE1hcCBzZWFyY2hQYXJhbWV0ZXJzKTsKCiAgLyoqCiAgICogdGhpcyBtZXRob2QgaXMgY2Fs
bGVkIGZyb20gd2l0aGluICh0aGlzIGNsYXNzZXMgaW1wbGVtZW50YXRpb24gb2YpIHRoZSBz
ZWFyY2goKSBtZXRob2QgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHNlYXJjaAogICAqIHByb2Nl
c3MgaGFzIGJlZW4gbGF1bmNoZWQuIFRoaXMgbWV0aG9kIGdpdmVzIGl0cyBpbXBsZW1lbnRl
ciBhIGNoYW5jZSB0byBwaXBlIGludG8gdGhlIHN0ZGluIG9mIHRoZSBzZWFyY2ggcHJvY2Vz
cy4KICAgKiBAcGFyYW0gc3RkaW4gYSB3cml0ZXIgdGhhdCBpcyBjb25uZWN0ZWQgdG8gdGhl
IHN0ZGluIG9mIHRoZSBzZWFyY2ggcHJvY2Vzcy4gRG9uJ3QgY2xvc2UgaXQgYWZ0ZXIgeW91
IGFyZSBkb25lCiAgICogICAgICAgICAgICAgIHdyaXRpbmcgdG8gaXQgLSB0aGUgc2VhcmNo
KCkgbWV0aG9kIHdpbGwgZG8gdGhpcy4KICAgKiBAcGFyYW0gcXVlcnlTZXEgZXhhY3RseSBh
cyBwYXNzZWQgdG8gdGhlIHNlYXJjaCgpIG1ldGhvZC4gR3VhcmFudGVlZCB0byBub3QgYmUg
bnVsbC4KICAgKi8KICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBwaXBlSW50b1NlYXJjaFBy
b2Nlc3MoV3JpdGVyIHN0ZGluLCBTeW1ib2xMaXN0IHF1ZXJ5U2VxKSB0aHJvd3MgSU9FeGNl
cHRpb247CgogIC8qKgogICAqIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiAo
dGhpcyBjbGFzc2VzIGltcGxlbWVudGF0aW9uIG9mKSB0aGUgc2VhcmNoKCkgbWV0aG9kIGFm
dGVyIHRoZSBzZWFyY2ggcHJvY2VzcyBoYXMKICAgKiBjb21wbGV0ZWx5IGZpbmlzaGVkLiBJ
dCBzaG91bGQgcHJvY2VzcyB0aGUgb3V0cHV0IG9mIHRoZSBzZWFyY2ggcHJvY2VzcyB3aGlj
aCBpcyBwYXNzZWQgdG8gdGhpcyBtZXRob2QgaW4gdGhlIGZvcm0KICAgKiBvZiB0aGUgc3Rk
b3V0IG9mIHRoZSBwcm9jZXNzIGFuZCB0aGUgZXhpdCB2YWx1ZSBvZiB0aGUgcHJvY2Vzcy4g
QmFzZWQgb24gdGhpcyBpbmZvcm1hdGlvbiAoYW5kIHBvc3NpYmx5IG90aGVyCiAgICogb3V0
cHV0IHRoYXQgdGhpcyBjbGFzcyBkb2VzIG5vdCBrbm93IGFib3V0KSwgdGhlIGltcGxlbWVu
dGVyIHNob3VsZCBpbnN0YW50aWF0ZSBhIFNlcVNpbWlsYXJpdHlTZWFyY2hSZXN1bHQgYW5k
CiAgICogcmV0dXJuIGl0IGZyb20gdGhpcyBtZXRob2QuIFRoaXMgaXMgdGhlIG9iamVjdCB0
aGF0IHdpbGwgYmUgcmV0dXJuZWQgZnJvbSB0aGUgc2VhcmNoKCkgbWV0aG9kIGFzIHdlbGwu
CiAgICoKICAgKiBAcGFyYW0gc3Rkb3V0IGEgcmVhZGVyIHRoYXQgaXMgY29ubmVjdGVkIHRv
IHRoZSBzdGRvdXQgb2YgdGhlIHNlYXJjaCBwcm9jZXNzLiBEb24ndCBjbG9zZSBpdCBhZnRl
ciB5b3UgYXJlIGRvbmUKICAgKiAgICAgICAgICAgICAgcmVhZGluZyBmcm9tIGl0IC0gdGhl
IHNlYXJjaCgpIG1ldGhvZCB3aWxsIGRvIHRoaXMuCiAgICogQHBhcmFtIGV4aXRWYWx1ZSB0
aGUgZXhpdCB2YWx1ZSBvZiB0aGUgc2VhcmNoIHByb2Nlc3MuCiAgICogQHBhcmFtIHF1ZXJ5
U2VxIGV4YWN0bHkgYXMgcGFzc2VkIHRvIHRoZSBzZWFyY2goKSBtZXRob2QuIEd1YXJhbnRl
ZWQgdG8gbm90IGJlIG51bGwuCiAgICogQHBhcmFtIGRiIGV4YWN0bHkgYXMgcGFzc2VkIHRv
IHRoZSBzZWFyY2goKSBtZXRob2QuIEd1YXJhbnRlZWQgdG8gbm90IGJlIG51bGwgYW5kIHRv
IGJlIGEgbWVtYmVyIG9mIHRoZSBzZXQgb2YKICAgKiAgICAgICAgICAgc2VhcmNoYWJsZSBk
YnMuCiAgICogQHBhcmFtIHNlYXJjaFBhcmFtZXRlcnMgZXhhY3RseSBhcyBwYXNzZWQgdG8g
dGhlIHNlYXJjaCgpIG1ldGhvZC4gQ2FuIGJlIG51bGwuCiAgICogQHJldHVybiB0aGUgc2Vx
dWVuY2Ugc2ltaWxhcml0eSBzZWFyY2ggcmVzdWx0IHRoYXQgc2hvdWxkIGJlIHJldHVybmVk
IGJ5IHRoZSBzZWFyY2goKSBtZXRob2QuIE1heSBub3QgYmUgbnVsbC4KICAgKi8KICBwcm90
ZWN0ZWQgYWJzdHJhY3QgU2VxU2ltaWxhcml0eVNlYXJjaFJlc3VsdCBwcm9jZXNzT3V0cHV0
T2ZTZWFyY2hQcm9jZXNzQW5kR2V0U2VhcmNoUmVzdWx0KFJlYWRlciBzdGRvdXQsCiAgICAg
IGludCBleGl0VmFsdWUsIFN5bWJvbExpc3QgcXVlcnlTZXEsIFNlcXVlbmNlREIgZGIsIE1h
cCBzZWFyY2hQYXJhbWV0ZXJzKSB0aHJvd3MgSU9FeGNlcHRpb247CgogIHB1YmxpYyBTdHJp
bmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gIkFic3RyYWN0U2VxU2ltaWxhcml0eVNlYXJj
aGVyIjsKICB9CiAgCiAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7CiAgICBp
ZiAobyA9PSB0aGlzKSByZXR1cm4gdHJ1ZTsKICAgIAogICAgLy8gaWYgdGhpcyBjbGFzcyBp
cyBhIGRpcmVjdCBzdWItY2xhc3Mgb2YgT2JqZWN0OgogICAgaWYgKG8gPT0gbnVsbCkgcmV0
dXJuIGZhbHNlOwogICAgaWYgKCFvLmdldENsYXNzKCkuZXF1YWxzKHRoaXMuZ2V0Q2xhc3Mo
KSkpIHJldHVybiBmYWxzZTsKICAgIAogICAgQWJzdHJhY3RTZXFTaW1pbGFyaXR5U2VhcmNo
ZXIgdGhhdCA9IChBYnN0cmFjdFNlcVNpbWlsYXJpdHlTZWFyY2hlcikgbzsKICAgIAogICAg
Ly8gb25seSBjb21wYXJlIGZpZWxkcyBvZiB0aGlzIGNsYXNzIChub3Qgb2Ygc3VwZXItY2xh
c3Nlcyk6CiAgICBpZiAoIU9iamVjdFV0aWwuZXF1YWxzKHRoaXMucHJvcGVydGllcywgdGhh
dC5wcm9wZXJ0aWVzKSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKCFPYmplY3RVdGlsLmVxdWFs
cyh0aGlzLnNlYXJjaGFibGVEQnMsIHRoYXQuc2VhcmNoYWJsZURCcykpIHJldHVybiBmYWxz
ZTsKICAgIGlmICghT2JqZWN0VXRpbC5lcXVhbHModGhpcy5zZWFyY2hDb21tYW5kLCB0aGF0
LnNlYXJjaENvbW1hbmQpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoIU9iamVjdFV0aWwuZXF1
YWxzKHRoaXMuZGVmYXVsdFNlYXJjaFBhcmFtZXRlcnMsIHRoYXQuZGVmYXVsdFNlYXJjaFBh
cmFtZXRlcnMpKSByZXR1cm4gZmFsc2U7CiAgICAKICAgIC8vIHRoaXMgYW5kIHRoYXQgYXJl
IGlkZW50aWNhbCBpZiB3ZSBtYWRlIGl0ICd0aWwgaGVyZQogICAgcmV0dXJuIHRydWU7CiAg
fQogIAogIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CiAgICAvLyBpZiB0aGlzIGNsYXNzIGlz
IGEgZGlyZWN0IHN1Yi1jbGFzcyBvZiBPYmplY3Q6CiAgICBpbnQgaGMgPSAwOwoKICAgIC8v
IG9ubHkgdGFrZSBpbnRvIGFjY291bnQgZmllbGRzIG9mIHRoaXMgY2xhc3MgKG5vdCBvZiBz
dXBlci1jbGFzcyk6CiAgICBoYyA9IE9iamVjdFV0aWwuaGFzaENvZGUoaGMsIHByb3BlcnRp
ZXMpOwogICAgaGMgPSBPYmplY3RVdGlsLmhhc2hDb2RlKGhjLCBzZWFyY2hhYmxlREJzKTsK
ICAgIGhjID0gT2JqZWN0VXRpbC5oYXNoQ29kZShoYywgc2VhcmNoQ29tbWFuZCk7CiAgICBo
YyA9IE9iamVjdFV0aWwuaGFzaENvZGUoaGMsIGRlZmF1bHRTZWFyY2hQYXJhbWV0ZXJzKTsK
CiAgICByZXR1cm4gaGM7CiAgfQogIAogIHB1YmxpYyBPYmplY3QgY2xvbmUoKSB7CiAgICB0
cnkgewogICAgICBBYnN0cmFjdFNlcVNpbWlsYXJpdHlTZWFyY2hlciBvID0gKEFic3RyYWN0
U2VxU2ltaWxhcml0eVNlYXJjaGVyKSBzdXBlci5jbG9uZSgpOwogICAgICAvLyBub3cgZXhw
bGljaXRseSBjbG9uZSBvbmx5IG11dGFibGUgb2JqZWN0IGZpZWxkcyAoaS5lLiBubyBwcmlt
aXRpdmVzIGFuZCBubyBpbW11dGFibGUgb2JqZWN0IGZpZWxkcykKICAgICAgby5wcm9wZXJ0
aWVzID0gKFR5cGVkUHJvcGVydGllcykgcHJvcGVydGllcy5jbG9uZSgpOwoKICAgICAgcmV0
dXJuIG87CiAgICB9IGNhdGNoIChDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKSB7CiAg
ICAgIC8vIGNhbiBub3QgaGFwcGVuIGJlY2F1c2UgdGhpcyBjbGFzcyBpbXBsZW1lbnRzIENs
b25lYWJsZQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9Cn0K
--------------61F5F96E809D634B44FBFDF4
Content-Type: application/x-unknown-content-type-java_auto_file;
 name="NCBIBlastPSearcher.java"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="NCBIBlastPSearcher.java"

cGFja2FnZSBjb20uZGFlbW9uc3RyYXRpb24uYnNhLnNlYXJjaDsKCmltcG9ydCBjb20uZGFl
bW9uc3RyYXRpb24uY29udHJhY3QuQ29udHJhY3Q7CmltcG9ydCBjb20uZGFlbW9uc3RyYXRp
b24udXRpbC4qOwoKaW1wb3J0IG9yZy5iaW9qYXZhLmJpby5zZXEuKjsKaW1wb3J0IG9yZy5i
aW9qYXZhLmJpby5zeW1ib2wuU3ltYm9sTGlzdDsKaW1wb3J0IG9yZy5iaW9qYXZhLmJpby5C
aW9FeGNlcHRpb247CgppbXBvcnQgb3JnLmxvZzRqLkNhdGVnb3J5OwoKaW1wb3J0IGphdmEu
dXRpbC4qOwppbXBvcnQgamF2YS5pby4qOwoKLyoqCiAqIGEgY29uY3JldGUgc2VxdWVuY2Ug
c2ltaWxhcml0eSBzZWFyY2hlciB0aGF0IHVzZXMgdGhlIE5DQkkgQkxBU1RQIGltcGxlbWVu
dGF0aW9uIHRvIHNlYXJjaCBhIHByb3RlaW4gc2VxdWVuY2UgYWdhaW5zdAogKiBhIHByb3Rl
aW4gc2VxdWVuY2UgZGF0YWJhc2UuCiAqCiAqIEBhdXRob3IgPEEgaHJlZj0ibWFpbHRvOkdl
cmFsZC5Mb2VmZmxlckB2aWVubmEuYXQiPkdlcmFsZCBMb2VmZmxlcjwvQT4gZm9yIHRoZSAK
ICogICAgICAgICA8QSBocmVmPSJodHRwOi8vd3d3LmltcC51bml2aWUuYWMuYXQiPklNUDwv
QT4KICovCnB1YmxpYyBjbGFzcyBOQ0JJQmxhc3RQU2VhcmNoZXIgZXh0ZW5kcyBBYnN0cmFj
dFNlcVNpbWlsYXJpdHlTZWFyY2hlciBpbXBsZW1lbnRzIENsb25lYWJsZSB7CiAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgQ2F0ZWdvcnkgbG9nZ2VyID0gQ2F0ZWdvcnkuZ2V0SW5zdGFuY2Uo
TkNCSUJsYXN0UFNlYXJjaGVyLmNsYXNzLmdldE5hbWUoKSk7CgogIHB1YmxpYyBzdGF0aWMg
ZmluYWwgU3RyaW5nIERFRkFVTFRfUFJPUEVSVElFU19SRVNPVVJDRV9OQU1FID0gIm5jYmlf
Ymxhc3RwX3NlYXJjaGVyLnByb3BlcnRpZXMiOwoKICAvKioKICAgKiBjcmVhdGUgYSBuZXcg
c2VhcmNoZXIgdGhhdCB1c2VzIHRoZSBOQ0JJIEJMQVNUUCBpbXBsZW1lbnRhdGlvbiB0byBz
ZWFyY2ggYSBwcm90ZWluIHNlcXVlbmNlIGFnYWluc3QKICAgKiBhIHByb3RlaW4gc2VxdWVu
Y2UgZGF0YWJhc2UuIFRoZSBkZXRhaWxlZCBjb25maWd1cmF0aW9uIGlzIGxvYWRlZCBmcm9t
IGEgcHJvcGVydGllcyBmaWxlIHRoYXQgaXMgbG9hZGVkIGFzIGEKICAgKiByZXNvdXJjZSBv
ZiB0aGlzIGNsYXNzIHdpdGggdGhlIGdpdmVuIHJlc291cmNlIG5hbWUuIChzZWUgdGhlIGNv
bnN0cnVjdG9yIGZvciBBYnN0cmFjdFNlcVNpbWlsYXJpdHlTZWFyY2hlciBmb3IKICAgKiBk
ZXRhaWxzIG9uIHRoZSBzdXBwb2VydGVkIHByb3BlcnRpZXMuKQogICAqCiAgICogQHBhcmFt
IHJlc291cmNlTmFtZSB0aGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgcHJvcGVydGllcyBmaWxl
IHdpdGggd2hpY2ggdG8gY29uZmlndXJlIHRoaXMgY2xhc3MuIE5vdCBudWxsLgogICAqIEBl
eGNlcHRpb24gSU9FeGNlcHRpb24gaXMgdGhyb3duIGlmIGxvYWRpbmcgZnJvbSB0aGUgZ2l2
ZW4gaW5wdXQgc3RyZWFtIGZhaWxzCiAgICovCiAgcHVibGljIE5DQklCbGFzdFBTZWFyY2hl
cihTdHJpbmcgcmVzb3VyY2VOYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgc3VwZXIo
TkNCSUJsYXN0UFNlYXJjaGVyLmNsYXNzLmdldFJlc291cmNlQXNTdHJlYW0ocmVzb3VyY2VO
YW1lKSk7CiAgfQoKICAvKioKICAgKiBsaWtlIE5DQklCbGFzdFBTZWFyY2hlcihTdHJpbmcg
cmVzb3VyY2VOYW1lKSBidXQgdXNlcyB0aGUgZGVmYXVsdCBwcm9wZXJ0aWVzIGZpbGUgZm9y
IHRoaXMgY2xhc3MKICAgKiAoY2FsbGVkIG5jYmlfYmxhc3RwX3NlYXJjaGVyLnByb3BlcnRp
ZXMpIGFzIHRoZSBwcm9wZXJ0aWVzIGZpbGUuCiAgICovCiAgcHVibGljIE5DQklCbGFzdFBT
ZWFyY2hlcigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICB0aGlzKERFRkFVTFRfUFJPUEVS
VElFU19SRVNPVVJDRV9OQU1FKTsKICB9CgogIC8qKgogICAqIEltcGxlbWVudHMgbWV0aG9k
IGZyb20gaW50ZXJmYWNlIFNlcVNpbWlsYXJpdHlTZWFyY2hlciBhbmQgYWNjZXB0cyB0aGUg
Zm9sbG93aW5nIG5hbWUtdmFsdWUgcGFpcnMgaW4gdGhlCiAgICogc2VhcmNoUGFyYW1ldGVy
cyBhcmd1bWVudDoKICAgKiA8dWw+CiAgICogPGxpPjwvbGk+CiAgICogPC91bD4KICAgKi8K
ICBwcm90ZWN0ZWQgU3RyaW5nIHByZXBhcmVTZWFyY2hBbmRHZXRTZWFyY2hDb21tYW5kKFN5
bWJvbExpc3QgcXVlcnlTZXEsIFNlcXVlbmNlREIgZGIsIE1hcCBzZWFyY2hQYXJhbWV0ZXJz
KSB7CiAgICAvLyBjb25zdHJ1Y3QgTkNCSSBCTEFTVFAgY29tbWFuZCB0aGF0IHJlYWRzIHNl
cXVlbmNlIGZyb20gc3RkaW4KICAgIFN0cmluZyBjbWQgPSBnZXRTZWFyY2hDb21tYW5kKCkg
KyAiIC1kICIgKyBkYi5nZXROYW1lKCk7CgogICAgcmV0dXJuIGNtZDsKICB9CgogIHByb3Rl
Y3RlZCB2b2lkIHBpcGVJbnRvU2VhcmNoUHJvY2VzcyhXcml0ZXIgc3RkaW4sIFN5bWJvbExp
c3QgcXVlcnlTZXEpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAvLyBwaXBlIHNlcXVlbmNl
IHN0cmluZyBpbnRvIGJsYXN0IHByb2Nlc3MKICAgIHN0ZGluLndyaXRlKHF1ZXJ5U2VxLnNl
cVN0cmluZygpKTsKICB9CgogIHByb3RlY3RlZCBTZXFTaW1pbGFyaXR5U2VhcmNoUmVzdWx0
IHByb2Nlc3NPdXRwdXRPZlNlYXJjaFByb2Nlc3NBbmRHZXRTZWFyY2hSZXN1bHQoUmVhZGVy
IHN0ZG91dCwgaW50IGV4aXRWYWx1ZSwKICAgICAgU3ltYm9sTGlzdCBxdWVyeVNlcSwgU2Vx
dWVuY2VEQiBkYiwgTWFwIHNlYXJjaFBhcmFtZXRlcnMpIHRocm93cyBJT0V4Y2VwdGlvbiB7
CiAgICAvLyBwYXJzZSB0aGUgZm9sbG93aW5nIHR5cGUgb2Ygb3V0cHV0CiAgICAvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioKICAgICAgWy4uLl0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNj
b3JlICAgICBFCiAgICAgIFNlcXVlbmNlcyBwcm9kdWNpbmcgc2lnbmlmaWNhbnQgYWxpZ25t
ZW50czogICAgICAgICAgICAgICAgICAgICAgICAoYml0cykgIFZhbHVlCgogICAgICBnaXw2
MzI0NTkxIE1pdG9jaG9uZHJpYWwgbWVtYnJhbmUgcHJvdGVpbjsgUGV0MTI3cCA+Z2l8MTcw
OTg4OHxzLi4uICAxNTU4ICAwLjAKICAgICAgZW1ifENBQTQxMjU3LjF8IChYNTgzNjMpIFBl
dDEyNyBbU2FjY2hhcm9teWNlcyBjZXJldmlzaWFlXSAgICAgICAgICAgMTM3NSAgMC4wCiAg
ICAgIFsuLi5dCiAgICAgIGdifEFBRDMxNzI2LjF8QUYwNjMwODRfMSAoQUYwNjMwODQpIGNv
bmp1Z2F0aW9uLXNwZWNpZmljIHByb3RlaW4uLi4gICAgMzMgIDkuNQogICAgICBnaXw2MzIz
NTMyIGludGVybWVkaWF0ZSBmaWxhbWVudCBwcm90ZWluOyBNZG0xcCA+Z2l8MjEzMjMzNXxw
aXJ8Li4uICAgIDMzICA5LjUKCiAgICAgID5naXw2MzI0NTkxIE1pdG9jaG9uZHJpYWwgbWVt
YnJhbmUgcHJvdGVpbjsgUGV0MTI3cAogICAgICAgICAgICAgICAgID5naXwxNzA5ODg4fHNw
fFAzMjYwNnxQVDI3X1lFQVNUIFBVVEFUSVZFIE1JVE9DSE9ORFJJQUwKICAgICAgICAgICAg
ICAgICBUUkFOU0xBVElPTiBTWVNURU0gQ09NUE9ORU5UIFBFVDEyNwogICAgICAgICAgICAg
ICAgID5naXwxMDg0ODMyfHBpcnx8UzU0NjIzIHByb2JhYmxlIG1pdG9jaG9uZHJpYWwKICAg
ICAgICAgICAgICAgICB0cmFuc2xhdGlvbiBmYWN0b3IgUEVUMTI3IC0geWVhc3QgKFNhY2No
YXJvbXljZXMKICAgICAgICAgICAgICAgICBjZXJldmlzaWFlKSA+Z2l8ODI5MTI3fGVtYnxD
QUE2MDc2Ni4xfCAoWDg3MzMxKQogICAgICAgICAgICAgICAgIG1pdG9jaG9uZHJpYWwgdHJh
bnNsYXRpb24gZmFjdG9yIFtTYWNjaGFyb215Y2VzCiAgICAgICAgICAgICAgICAgY2VyZXZp
c2lhZV0gPmdpfDE0MjAxMTl8ZW1ifENBQTk5MjA3LjF8IChaNzQ5MjUpIE9SRgogICAgICAg
ICAgICAgICAgIFlPUjAxN3cgW1NhY2NoYXJvbXljZXMgY2VyZXZpc2lhZV0KICAgICAgICAg
ICAgICAgICBMZW5ndGggPSA4MDAKICAgICAgICAgICAgICAgICAKICAgICAgIFNjb3JlID0g
MTU1OCBiaXRzICgzOTkwKSwgRXhwZWN0ID0gMC4wCiAgICAgICBJZGVudGl0aWVzID0gNzY3
LzgwMCAoOTUlKSwgUG9zaXRpdmVzID0gNzY3LzgwMCAoOTUlKQoKICAgICAgUXVlcnk6IDEg
ICBNR0ZZTkNSRkxTUlJMU1ZFUENSSUdTQUFLU1lRUVJTSVlIRkdBQUxUTkFQU0dSRVRQREtM
UlNETEhTQUwgNjAKICAgICAgICAgICAgICAgICBNR0ZZTkNSRkxTUlJMU1ZFUENSSUdTQUFL
U1lRUVJTSVlIRkdBQUxUTkFQU0dSRVRQREtMUlNETEhTQUwKICAgICAgU2JqY3Q6IDEgICBN
R0ZZTkNSRkxTUlJMU1ZFUENSSUdTQUFLU1lRUVJTSVlIRkdBQUxUTkFQU0dSRVRQREtMUlNE
TEhTQUwgNjAKCiAgICAgIFF1ZXJ5OiA2MSAgRU1WREVJWURUTlNUVkVESUdOS0VLR0dSUUtZ
VEVFTURLQUlOTExLVE5JS0tFWVJIREtZTEVSVEtWR1RZIDEyMAogICAgICAgICAgICAgICAg
IEVNVkRFSVlEVE5TVFZFRElHTktFS0dHUlFLWVRFRU1ES0FJTkxMS1ROSUtLRVlSSERLWUxF
UlRLVkdUWQogICAgICBTYmpjdDogNjEgIEVNVkRFSVlEVE5TVFZFRElHTktFS0dHUlFLWVRF
RU1ES0FJTkxMS1ROSUtLRVlSSERLWUxFUlRLVkdUWSAxMjAKCiAgICAgIFsuLi5dCgogICAg
ICBRdWVyeTogNzIxIFZLTE5BTEtOUVZJVFJRRVBETVNLS0RFSU1OUklLU0xRQVJOREhSRE5H
U05LUllTTkZHUFRSTFFUS0xSQSA3ODAKICAgICAgICAgICAgICAgICBWS0xOQUxLTlFWSVRS
UUVQRE1TS0tERUlNTlJJS1NMUUFSTkRIUkROR1NOS1JZU05GR1BUUkxRVEtMUkEKICAgICAg
U2JqY3Q6IDcyMSBWS0xOQUxLTlFWSVRSUUVQRE1TS0tERUlNTlJJS1NMUUFSTkRIUkROR1NO
S1JZU05GR1BUUkxRVEtMUkEgNzgwCgogICAgICBRdWVyeTogNzgxIFlBS0tHQUxSUktMTEVS
U05LRkhJIDgwMAogICAgICAgICAgICAgICAgIFlBS0tHQUxSUktMTEVSU05LRkhJCiAgICAg
IFNiamN0OiA3ODEgWUFLS0dBTFJSS0xMRVJTTktGSEkgODAwCgoKICAgICAgPmVtYnxDQUE0
MTI1Ny4xfCAoWDU4MzYzKSBQZXQxMjcgW1NhY2NoYXJvbXljZXMgY2VyZXZpc2lhZV0KICAg
ICAgICAgICAgICAgICBMZW5ndGggPSA3MTAKICAgICAgICAgICAgICAgICAKICAgICAgIFNj
b3JlID0gMTM3NSBiaXRzICgzNTE5KSwgRXhwZWN0ID0gMC4wCiAgICAgICBJZGVudGl0aWVz
ID0gNjc3LzcxMCAoOTUlKSwgUG9zaXRpdmVzID0gNjc3LzcxMCAoOTUlKQoKICAgICAgUXVl
cnk6IDkxICBNREtBSU5MTEtUTklLS0VZUkhES1lMRVJUS1ZHVFlQR1JSVFlQR1JSVFlQQVJS
VFlQQVNSVFlTRFNOU1kgMTUwCiAgICAgICAgICAgICAgICAgTURLQUlOTExLVE5JS0tFWVJI
REtZTEVSVEtWR1RZUEdSUlRZUEdSUlRZUEFSUlRZUEFTUlRZU0RTTlNZCiAgICAgIFNiamN0
OiAxICAgTURLQUlOTExLVE5JS0tFWVJIREtZTEVSVEtWR1RZUEdSUlRZUEdSUlRZUEFSUlRZ
UEFTUlRZU0RTTlNZIDYwCgogICAgICBbLi4uXQoKICAgICAgUXVlcnk6IDY2MiBFU1JLWUlT
RE1NS1IgNjczCiAgICAgICAgICAgICAgICAgICArSyAgIEQrTSsrCiAgICAgIFNiamN0OiA4
MzQgWUxLS05GUkRMTVJRIDg0NQoKCiAgICAgICAgRGF0YWJhc2U6IG5yCiAgICAgICAgICBQ
b3N0ZWQgZGF0ZTogIEp1biAxOCwgMjAwMCAgNTozOCBQTQogICAgICAgIE51bWJlciBvZiBs
ZXR0ZXJzIGluIGRhdGFiYXNlOiAxNjAsMDIzLDI3MgogICAgICAgIE51bWJlciBvZiBzZXF1
ZW5jZXMgaW4gZGF0YWJhc2U6ICA1MTAsMjg2CiAgICAgICAgCiAgICAgIFsuLi5dCiAgICAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KICAKICAgIEJ1ZmZlcmVkUmVhZGVyIG91dCA9
IG5ldyBCdWZmZXJlZFJlYWRlcihzdGRvdXQpOwogICAgU3RyaW5nIGxpbmUgPSBudWxsOwoK
ICAgIC8vIHByb2NlZWQgdG8gbGluZSBhZnRlciB0aGUgbGluZSBzdGFydGluZyB3aXRoICJT
ZXF1ZW5jZXMgcHJvZHVjaW5nIHNpZ25pZmljYW50IGFsaWdubWVudHMiCiAgICBkbyB7CiAg
ICAgIGxpbmUgPSBvdXQucmVhZExpbmUoKTsKICAgIH0gd2hpbGUgKCEobGluZS5zdGFydHNX
aXRoKCJTZXF1ZW5jZXMgcHJvZHVjaW5nIHNpZ25pZmljYW50IGFsaWdubWVudHMiKSkpOwoK
ICAgIC8vIHNraXAgb25lIGJsYW5rIGxpbmUKICAgIGxpbmUgPSBvdXQucmVhZExpbmUoKTsK
ICAgIENvbnRyYWN0LmFzc2VydChsaW5lLmxlbmd0aCgpID09IDAsICJleHBlY3RlZCBibGFu
ayBsaW5lIGJlZm9yZSBoaXQgbGlzdCBidXQgZm91bmQgIiArIGxpbmUpOwoKICAgIC8vIHJl
YWQgYWxsIGxpbmVzIHVudGlsIHRoZSBuZXh0IGJsYW5rIGxpbmUgLSB0aGVzZSBjb250YWlu
IHRoZSBoaXRzCiAgICBMaXN0ICAgICAgICAgICAgICAgICAgICAgIGhpdHMgICA9IG5ldyBB
cnJheUxpc3QoKTsKICAgIFNlcVNpbWlsYXJpdHlTZWFyY2hSZXN1bHQgcmVzdWx0ID0gbmV3
IFNpbXBsZVNlcVNpbWlsYXJpdHlTZWFyY2hSZXN1bHQodGhpcywgcXVlcnlTZXEsIGRiLCBz
ZWFyY2hQYXJhbWV0ZXJzLCBoaXRzKTsKICAgIHdoaWxlICgobGluZSA9IG91dC5yZWFkTGlu
ZSgpKS5sZW5ndGgoKSA+IDApIHsKICAgICAgU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9
IG5ldyBTdHJpbmdUb2tlbml6ZXIobGluZSk7CiAgICAgIFN0cmluZyAgICAgICAgICBpZCAg
ICAgICAgPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7IC8vIHRoZSBJRCBvZiB0aGlzIGhpdCBz
ZXF1ZW5jZSAoZS5nLiBnaXw2MzI0NTkxKQoKICAgICAgLy8gd2UgbmVlZCB0aGUgbGFzdCB0
b2tlbiBhbmQgdGhlIHRva2VuIGJlZm9yZSB0aGF0IC0gcHJvY2VlZCB1bnRpbCB3ZSBmaW5k
IHRoZW0KICAgICAgU3RyaW5nIHNlY29uZExhc3QgPSBudWxsOwogICAgICBTdHJpbmcgbGFz
dCAgICAgICA9IG51bGw7CiAgICAgIHdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2Vucygp
KSB7CiAgICAgICAgc2Vjb25kTGFzdCA9IGxhc3Q7CiAgICAgICAgbGFzdCAgICAgICA9IHRv
a2VuaXplci5uZXh0VG9rZW4oKTsKICAgICAgfQogICAgICBDb250cmFjdC5hc3NlcnQoc2Vj
b25kTGFzdCAhPSBudWxsLCAiY2FuIG5vdCBmaW5kIHNlY29uZCBsYXN0IHRva2VuIGluIHRo
aXMgbGluZTogIiArIGxpbmUpOwogICAgICBDb250cmFjdC5hc3NlcnQobGFzdCAhPSBudWxs
LCAiY2FuIG5vdCBmaW5kIGxhc3QgdG9rZW4gaW4gdGhpcyBsaW5lOiAiICsgbGluZSk7CiAg
ICAgIGRvdWJsZSBzY29yZSAgPSBEb3VibGUucGFyc2VEb3VibGUoc2Vjb25kTGFzdCk7IC8v
IHNlY29uZCBsYXN0IHRva2VuIGNvbnRhaW5zIHNjb3JlIChlLmcuIDE1NTgpCiAgICAgIGRv
dWJsZSBlVmFsdWUgPSBEb3VibGUucGFyc2VEb3VibGUobGFzdCk7ICAgICAgIC8vIGxhc3Qg
dG9rZW4gY29udGFpbnMgZS12YWx1ZSAoZS5nLiAwLjApCgogICAgICAvLyBhZGQgdGhpcyBu
ZXcgaGl0IHRvIHRoZSBsaXN0IG9mIGhpdHMKICAgICAgTGlzdCBzdWJIaXRzID0gbmV3IEFy
cmF5TGlzdCgpOwogICAgICBTZXFTaW1pbGFyaXR5U2VhcmNoSGl0IGhpdCA9IG5ldyBTaW1w
bGVTZXFTaW1pbGFyaXR5U2VhcmNoSGl0KHJlc3VsdCwgc2NvcmUsIERvdWJsZS5OYU4sIGVW
YWx1ZSwgaWQsIHN1YkhpdHMpOwogICAgICBoaXRzLmFkZChoaXQpOwogICAgfQoKICAgIHJl
dHVybiByZXN1bHQ7CiAgfQoKICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0
dXJuICJOQ0JJQmxhc3RQU2VhcmNoZXIiOwogIH0KICAKICBwdWJsaWMgYm9vbGVhbiBlcXVh
bHMoT2JqZWN0IG8pIHsKICAgIGlmIChvID09IHRoaXMpIHJldHVybiB0cnVlOwogICAgCiAg
ICAvLyB0aGlzIGNsYXNzIGV4dGVuZHMgYW5vdGhlciBjbGFzcyB0aGFuIE9iamVjdDoKICAg
IGlmICghc3VwZXIuZXF1YWxzKG8pKSByZXR1cm4gZmFsc2U7CiAgICAKICAgIE5DQklCbGFz
dFBTZWFyY2hlciB0aGF0ID0gKE5DQklCbGFzdFBTZWFyY2hlcikgbzsKICAgIAogICAgLy8g
b25seSBjb21wYXJlIGZpZWxkcyBvZiB0aGlzIGNsYXNzIChub3Qgb2Ygc3VwZXItY2xhc3Nl
cyk6CiAgICAvL2lmICghT2JqZWN0VXRpbC5lcXVhbHModGhpcy5maWVsZCwgdGhhdC5maWVs
ZCkpIHJldHVybiBmYWxzZTsKICAgIAogICAgLy8gdGhpcyBhbmQgdGhhdCBhcmUgaWRlbnRp
Y2FsIGlmIHdlIG1hZGUgaXQgJ3RpbCBoZXJlCiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgCiAg
cHVibGljIGludCBoYXNoQ29kZSgpIHsKICAgIC8vIHRoaXMgY2xhc3MgZXh0ZW5kcyBhbm90
aGVyIGNsYXNzIHRoYW4gT2JqZWN0OgogICAgaW50IGhjID0gc3VwZXIuaGFzaENvZGUoKTsK
CiAgICAvLyBvbmx5IHRha2UgaW50byBhY2NvdW50IGZpZWxkcyBvZiB0aGlzIGNsYXNzIChu
b3Qgb2Ygc3VwZXItY2xhc3MpOgogICAgLy9oYyA9IE9iamVjdFV0aWwuaGFzaENvZGUoaGMs
IGZpZWxkKTsKCiAgICByZXR1cm4gaGM7CiAgfQogIAogIHB1YmxpYyBPYmplY3QgY2xvbmUo
KSB7CiAgICBOQ0JJQmxhc3RQU2VhcmNoZXIgbyA9IChOQ0JJQmxhc3RQU2VhcmNoZXIpIHN1
cGVyLmNsb25lKCk7CiAgICAvLyBub3cgZXhwbGljaXRseSBjbG9uZSBvbmx5IG11dGFibGUg
b2JqZWN0IGZpZWxkcyAoaS5lLiBubyBwcmltaXRpdmVzIGFuZCBubyBpbW11dGFibGUgb2Jq
ZWN0IGZpZWxkcykKICAgIC8vby5tdXRhYmxlID0gKE11dGFibGUpIG11dGFibGUuY2xvbmUo
KTsKCiAgICByZXR1cm4gbzsKICB9CgogIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmlu
Z1tdIGFyZ3MpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmlvRXhjZXB0aW9uIHsKICAgIG9yZy5s
b2c0ai5CYXNpY0NvbmZpZ3VyYXRvci5jb25maWd1cmUoKTsKCiAgICBpZiAoYXJncy5sZW5n
dGggIT0gMSkgewogICAgICBsb2dnZXIuZXJyb3IoIm11c3QgZ2l2ZSBleGFjdGx5IG9uZSBh
cmd1bWVudCBvbiBjb21tYW5kIGxpbmU6IHRoZSBwcm90ZWluIHNlcXVlbmNlIHRvIHNlYXJj
aCB3aXRoIik7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBOQ0JJQmxhc3RQU2VhcmNoZXIg
Ymxhc3RwID0gbmV3IE5DQklCbGFzdFBTZWFyY2hlcigpOwoKICAgIGxvZ2dlci5kZWJ1Zygi
VGhlIGZvbGxvd2luZyBkYXRhYmFzZXMgY2FuIGJlIHNlYXJjaGVkOiIpOwogICAgZm9yIChJ
dGVyYXRvciBpID0gYmxhc3RwLmdldFNlYXJjaGFibGVEQnMoKS5pdGVyYXRvcigpOyBpLmhh
c05leHQoKTsgKSB7CiAgICAgIFNlcXVlbmNlREIgZGIgPSAoU2VxdWVuY2VEQikgaS5uZXh0
KCk7CiAgICAgIGxvZ2dlci5kZWJ1ZyhkYi5nZXROYW1lKCkpOwogICAgfQoKICAgIFN5bWJv
bExpc3Qgc2VxID0gUHJvdGVpblRvb2xzLmdldEFscGhhYmV0KCkuZ2V0UGFyc2VyKCJ0b2tl
biIpLnBhcnNlKGFyZ3NbMF0pOwogICAgU2VxdWVuY2VEQiBkYiA9IChTZXF1ZW5jZURCKSBi
bGFzdHAuZ2V0U2VhcmNoYWJsZURCcygpLml0ZXJhdG9yKCkubmV4dCgpOwoKICAgIGxvZ2dl
ci5kZWJ1ZygiU2VhcmNoaW5nIHdpdGggc2VxdWVuY2UgIiArIHNlcS5zZXFTdHJpbmcoKSk7
CiAgICBsb2dnZXIuZGVidWcoIlNlYXJjaGluZyBhZ2FpbnN0ICIgKyBkYi5nZXROYW1lKCkp
OwoKICAgIFNlcVNpbWlsYXJpdHlTZWFyY2hSZXN1bHQgcmVzdWx0ID0gYmxhc3RwLnNlYXJj
aChzZXEsIGRiLCBudWxsKTsKICAgIGZvciAoSXRlcmF0b3IgaSA9IHJlc3VsdC5nZXRIaXRz
KCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkgewogICAgICBTZXFTaW1pbGFyaXR5U2Vh
cmNoSGl0IGhpdCA9IChTZXFTaW1pbGFyaXR5U2VhcmNoSGl0KSBpLm5leHQoKTsKICAgICAg
bG9nZ2VyLmRlYnVnKGhpdC5nZXRTZXF1ZW5jZUlEKCkgKyAiIFx0ICIgKyBoaXQuZ2V0U2Nv
cmUoKSArICIgXHQgIiArIGhpdC5nZXRFVmFsdWUoKSk7CiAgICB9CiAgfQp9Cg==
--------------61F5F96E809D634B44FBFDF4
Content-Type: application/x-unknown-content-type-properties_auto_file;
 name="ncbi_blastp_searcher.properties"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="ncbi_blastp_searcher.properties"

Iw0KIyBjb21tYSwgc2VtaWNvbG9uIG9yIHRhYi1zZXBhcmF0ZWQgbGlzdCBvZiBzdHJpbmdz
IG5hbWluZyB0aGUgbmFtZXMgb2YgYWxsIGRhdGFiYXNlcyB0aGF0IGNhbiBiZSBzZWFyY2hl
ZCB3aXRoIHRoaXMgTkNCSSBCTEFTVFAgaW1wbGVtZW50YXRpb24uDQojIEVhY2ggZGF0YWJh
c2UgbmFtZSBtdXN0IGFwcGVhciBpbiBleGFjdGx5IHRoZSB3YXkgaW4gd2hpY2ggaXQgd2ls
bCBiZSBwYXNzZWQgdG8gdGhlIHNlYXJjaCBjb21tYW5kLg0KIw0Kc2VhcmNoYWJsZV9kYnMg
PSBuciwgc3dpc3Nwcm90DQoNCiMNCiMgc2VhcmNoIGNvbW1hbmQgKGEgc3RyaW5nKSB1c2Vk
IHRvIGxhdW5jaCB0aGUgTkNCSSBCTEFTVFAgaW1wbGVtZW50YXRpb24uDQojDQpzZWFyY2hf
Y29tbWFuZCA9IC9iaW9fc29mdHdhcmUvYmluL0lSSVg2NC9uY2JpLWJsYXN0cA0KDQojDQoj
IHNlYXJjaCBwYXJhbWV0ZXJzIChhIHN0cmluZykgdGhhdCB3aWxsIGJlIHVzZWQgZXhhY3Rs
eSBhcyBnaXZlbiBoZXJlIHdpdGggdGhlIHNlYXJjaCBjb21tYW5kIGlmIGFuZCBvbmx5IGlm
IG5vIHNlYXJjaCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQNCiMgdG8gdGhlIHNlYXJjaCBtZXRo
b2QuIChvcHRpb25hbCkNCiMNCmRlZmF1bHRfc2VhcmNoX3BhcmFtZXRlcnMgPSANCg==
--------------61F5F96E809D634B44FBFDF4--