[Debtags-devel] AI Tagger status

Benjamin Mesing bensmail@gmx.net
Tue, 12 Apr 2005 14:47:00 +0200


--=-dVbgkzAXd7UnTdPsnYKY
Content-Type: multipart/mixed; boundary="=-YItjzhcNMQVqo6Jzc5ju"


--=-YItjzhcNMQVqo6Jzc5ju
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable

Hello,

I've devoted some work to the AI Tagger recently. Mainly to be able to
determine were it stands right now. I have created an automated testing
script which tests the correctness of the AI tagging. With this mail I
want to give you a status report.
I'm still trying to improve the precision. One thing that Peter
mentioned some time ago was the inclusion of data from docs, manpages
and other stuff. I wrote a data harvesting script that collects the data
from the readme, news and even the changelog file in a database so it is
easy accessible. Though I think the most useful information can be found
in the readme files (changlog is probably useless). However this script
needs to be run on a machine where all packages are installed (or
modified to install the neccessary packages). I would like to run this
script somewhere and get the information produced (Enrico: you mentioned
something about this being possible?). I want to check if the
information can be used to improve the tagging precision.

I now present the results for the current tagging engine. I've performed
a test with a (mostly) randomly created testset of around 20 tags. A
more detailed output is attached to this mail which holds the statistics
for each tag (beauty-test-results-{date}).
Summary:
        Tested Packages: =3D 6668
       =20
        Matches: 5182 ^=3D 0.777144571085783
        Mismatches: 471 ^=3D 0.0706358728254349
        Unsure: 1015 ^=3D 0.152219556088782
       =20
        Average match percentage: 0.819133777266375
        Average mismatch percentage: 0.0896824581959319
        Average unsure percentage: 0.0911837645376926
       =20
        False positives: 227 ^=3D 0.0340431913617277
        Average false positive percentage: 0.0839093275421026
        False negative: 244 ^=3D 0.0365926814637073
        Average false negative percentage: 0.0952299902579352
       =20
The second block with MMU (match,mismatch,unsure) gives the total number
of MMU and the percentage of each category.
The average MMU percentage (third block) gives the average of MMU
percentage for all tags. This weigths all tags equally independent of
the amount of packages tested for it.
The last block shows the number of false positives and negatives with
average percentage as described above.

=46rom the detailed statistics you can see, that the precision is highly
depended on the type of of tags. E.g. the field::* tags seem to give
quite good results. Now looking at the results perhaps I should take
some more tags into the testing set.

I hope for your comments!

Greetings Ben


Attachments:=20
beauty-test-results-{date}: result of the tags
test-taglist: tags that were tested
collect-doc.pl: data harvesting script


--=-YItjzhcNMQVqo6Jzc5ju
Content-Disposition: attachment; filename=beauty-test-results-2005-04-10
Content-Type: text/plain; name=beauty-test-results-2005-04-10; charset=ISO-8859-15
Content-Transfer-Encoding: base64

LS0tLSBiZWdpbiBQcm9jZXNzaW5nIGN1bHR1cmU6OnNwYW5pc2ggLS0tLQ0KVGVzdGVkIHBhY2th
Z2VzOiAyMg0KRXhwZWN0ZWQgdG8gYmUgZ29vZDogMTENCkV4cGVjdGVkIHRvIGJlIGJhZDogMTEN
Ck1hdGNoZXM6IDE3IF49IDAuNzcyNzI3MjcyNzI3MjczDQpNaXNtYXRjaGVzOiAyIF49IDAuMDkw
OTA5MDkwOTA5MDkwOQ0KVW5zdXJlOiAzIF49IDAuMTM2MzYzNjM2MzYzNjM2DQpFeHBlY3RlZCBn
b29kLCBidXQgd2llbGRlZCBiYWQ6IDIgXj0gMC4xODE4MTgxODE4MTgxODINCkV4cGVjdGVkIGdv
b2QsIGJ1dCB3aWVsZGVkIHVuc3VyZTogMiBePSAwLjE4MTgxODE4MTgxODE4Mg0KRXhwZWN0ZWQg
Z29vZCwgYW5kIHdpZWxkZWQgZ29vZDogNyBePSAwLjYzNjM2MzYzNjM2MzYzNg0KRXhwZWN0ZWQg
YmFkLCBidXQgd2llbGRlZCBnb29kOiAwIF49IDANCkV4cGVjdGVkIGJhZCwgYnV0IHdpZWxkZWQg
dW5zdXJlOiAxIF49IDAuMDkwOTA5MDkwOTA5MDkwOQ0KRXhwZWN0ZWQgYmFkLCBhbmQgd2llbGRl
ZCBiYWQ6IDEwIF49IDAuOTA5MDkwOTA5MDkwOTA5DQotLS0tIGJlZ2luIFByb2Nlc3NpbmcgY3Vs
dHVyZTo6aHVuZ2FyaWFuIC0tLS0NCnRvIGZldyBwYWNrYWdlcyBmb3IgdGFnIGN1bHR1cmU6Omh1
bmdhcmlhbiAoPDgpDQotLS0tIGJlZ2luIFByb2Nlc3NpbmcgZGF0YTo6Zm9udCAtLS0tDQpUZXN0
ZWQgcGFja2FnZXM6IDQyDQpFeHBlY3RlZCB0byBiZSBnb29kOiAyMQ0KRXhwZWN0ZWQgdG8gYmUg
YmFkOiAyMQ0KTWF0Y2hlczogMzMgXj0gMC43ODU3MTQyODU3MTQyODYNCk1pc21hdGNoZXM6IDMg
Xj0gMC4wNzE0Mjg1NzE0Mjg1NzE0DQpVbnN1cmU6IDYgXj0gMC4xNDI4NTcxNDI4NTcxNDMNCkV4
cGVjdGVkIGdvb2QsIGJ1dCB3aWVsZGVkIGJhZDogMSBePSAwLjA0NzYxOTA0NzYxOTA0NzYNCkV4
cGVjdGVkIGdvb2QsIGJ1dCB3aWVsZGVkIHVuc3VyZTogMCBePSAwDQpFeHBlY3RlZCBnb29kLCBh
bmQgd2llbGRlZCBnb29kOiAyMCBePSAwLjk1MjM4MDk1MjM4MDk1Mg0KRXhwZWN0ZWQgYmFkLCBi
dXQgd2llbGRlZCBnb29kOiAyIF49IDAuMDk1MjM4MDk1MjM4MDk1Mg0KRXhwZWN0ZWQgYmFkLCBi
dXQgd2llbGRlZCB1bnN1cmU6IDYgXj0gMC4yODU3MTQyODU3MTQyODYNCkV4cGVjdGVkIGJhZCwg
YW5kIHdpZWxkZWQgYmFkOiAxMyBePSAwLjYxOTA0NzYxOTA0NzYxOQ0KLS0tLSBiZWdpbiBQcm9j
ZXNzaW5nIGRhdGE6OnVzZXJkb2MgLS0tLQ0KVGVzdGVkIHBhY2thZ2VzOiAxMjgNCkV4cGVjdGVk
IHRvIGJlIGdvb2Q6IDY0DQpFeHBlY3RlZCB0byBiZSBiYWQ6IDY0DQpNYXRjaGVzOiA5NSBePSAw
Ljc0MjE4NzUNCk1pc21hdGNoZXM6IDExIF49IDAuMDg1OTM3NQ0KVW5zdXJlOiAyMiBePSAwLjE3
MTg3NQ0KRXhwZWN0ZWQgZ29vZCwgYnV0IHdpZWxkZWQgYmFkOiAyIF49IDAuMDMxMjUNCkV4cGVj
dGVkIGdvb2QsIGJ1dCB3aWVsZGVkIHVuc3VyZTogMTAgXj0gMC4xNTYyNQ0KRXhwZWN0ZWQgZ29v
ZCwgYW5kIHdpZWxkZWQgZ29vZDogNTIgXj0gMC44MTI1DQpFeHBlY3RlZCBiYWQsIGJ1dCB3aWVs
ZGVkIGdvb2Q6IDkgXj0gMC4xNDA2MjUNCkV4cGVjdGVkIGJhZCwgYnV0IHdpZWxkZWQgdW5zdXJl
OiAxMiBePSAwLjE4NzUNCkV4cGVjdGVkIGJhZCwgYW5kIHdpZWxkZWQgYmFkOiA0MyBePSAwLjY3
MTg3NQ0KLS0tLSBiZWdpbiBQcm9jZXNzaW5nIGdhbWU6OmRlbW9zIC0tLS0NClRlc3RlZCBwYWNr
YWdlczogOA0KRXhwZWN0ZWQgdG8gYmUgZ29vZDogNA0KRXhwZWN0ZWQgdG8gYmUgYmFkOiA0DQpN
YXRjaGVzOiA1IF49IDAuNjI1DQpNaXNtYXRjaGVzOiAzIF49IDAuMzc1DQpVbnN1cmU6IDAgXj0g
MA0KRXhwZWN0ZWQgZ29vZCwgYnV0IHdpZWxkZWQgYmFkOiAzIF49IDAuNzUNCkV4cGVjdGVkIGdv
b2QsIGJ1dCB3aWVsZGVkIHVuc3VyZTogMCBePSAwDQpFeHBlY3RlZCBnb29kLCBhbmQgd2llbGRl
ZCBnb29kOiAxIF49IDAuMjUNCkV4cGVjdGVkIGJhZCwgYnV0IHdpZWxkZWQgZ29vZDogMCBePSAw
DQpFeHBlY3RlZCBiYWQsIGJ1dCB3aWVsZGVkIHVuc3VyZTogMCBePSAwDQpFeHBlY3RlZCBiYWQs
IGFuZCB3aWVsZGVkIGJhZDogNCBePSAxDQotLS0tIGJlZ2luIFByb2Nlc3Npbmcgc3VpdGU6Om1v
emlsbGEgLS0tLQ0KVGVzdGVkIHBhY2thZ2VzOiA1NA0KRXhwZWN0ZWQgdG8gYmUgZ29vZDogMjcN
CkV4cGVjdGVkIHRvIGJlIGJhZDogMjcNCk1hdGNoZXM6IDUwIF49IDAuOTI1OTI1OTI1OTI1OTI2
DQpNaXNtYXRjaGVzOiAyIF49IDAuMDM3MDM3MDM3MDM3MDM3DQpVbnN1cmU6IDIgXj0gMC4wMzcw
MzcwMzcwMzcwMzcNCkV4cGVjdGVkIGdvb2QsIGJ1dCB3aWVsZGVkIGJhZDogMiBePSAwLjA3NDA3
NDA3NDA3NDA3NDENCkV4cGVjdGVkIGdvb2QsIGJ1dCB3aWVsZGVkIHVuc3VyZTogMSBePSAwLjAz
NzAzNzAzNzAzNzAzNw0KRXhwZWN0ZWQgZ29vZCwgYW5kIHdpZWxkZWQgZ29vZDogMjQgXj0gMC44
ODg4ODg4ODg4ODg4ODkNCkV4cGVjdGVkIGJhZCwgYnV0IHdpZWxkZWQgZ29vZDogMCBePSAwDQpF
eHBlY3RlZCBiYWQsIGJ1dCB3aWVsZGVkIHVuc3VyZTogMSBePSAwLjAzNzAzNzAzNzAzNzAzNw0K
RXhwZWN0ZWQgYmFkLCBhbmQgd2llbGRlZCBiYWQ6IDI2IF49IDAuOTYyOTYyOTYyOTYyOTYzDQot
LS0tIGJlZ2luIFByb2Nlc3NpbmcgZGV2ZWw6OnJwYyAtLS0tDQpUZXN0ZWQgcGFja2FnZXM6IDM4
DQpFeHBlY3RlZCB0byBiZSBnb29kOiAxOQ0KRXhwZWN0ZWQgdG8gYmUgYmFkOiAxOQ0KTWF0Y2hl
czogMjkgXj0gMC43NjMxNTc4OTQ3MzY4NDINCk1pc21hdGNoZXM6IDYgXj0gMC4xNTc4OTQ3MzY4
NDIxMDUNClVuc3VyZTogMyBePSAwLjA3ODk0NzM2ODQyMTA1MjYNCkV4cGVjdGVkIGdvb2QsIGJ1
dCB3aWVsZGVkIGJhZDogMSBePSAwLjA1MjYzMTU3ODk0NzM2ODQNCkV4cGVjdGVkIGdvb2QsIGJ1
dCB3aWVsZGVkIHVuc3VyZTogMCBePSAwDQpFeHBlY3RlZCBnb29kLCBhbmQgd2llbGRlZCBnb29k
OiAxOCBePSAwLjk0NzM2ODQyMTA1MjYzMg0KRXhwZWN0ZWQgYmFkLCBidXQgd2llbGRlZCBnb29k
OiA1IF49IDAuMjYzMTU3ODk0NzM2ODQyDQpFeHBlY3RlZCBiYWQsIGJ1dCB3aWVsZGVkIHVuc3Vy
ZTogMyBePSAwLjE1Nzg5NDczNjg0MjEwNQ0KRXhwZWN0ZWQgYmFkLCBhbmQgd2llbGRlZCBiYWQ6
IDExIF49IDAuNTc4OTQ3MzY4NDIxMDUzDQotLS0tIGJlZ2luIFByb2Nlc3NpbmcgZGV2ZWw6OmVk
aXRvciAtLS0tDQpUZXN0ZWQgcGFja2FnZXM6IDIwDQpFeHBlY3RlZCB0byBiZSBnb29kOiAxMA0K
RXhwZWN0ZWQgdG8gYmUgYmFkOiAxMA0KTWF0Y2hlczogMTYgXj0gMC44DQpNaXNtYXRjaGVzOiA0
IF49IDAuMg0KVW5zdXJlOiAwIF49IDANCkV4cGVjdGVkIGdvb2QsIGJ1dCB3aWVsZGVkIGJhZDog
MSBePSAwLjENCkV4cGVjdGVkIGdvb2QsIGJ1dCB3aWVsZGVkIHVuc3VyZTogMCBePSAwDQpFeHBl
Y3RlZCBnb29kLCBhbmQgd2llbGRlZCBnb29kOiA5IF49IDAuOQ0KRXhwZWN0ZWQgYmFkLCBidXQg
d2llbGRlZCBnb29kOiAzIF49IDAuMw0KRXhwZWN0ZWQgYmFkLCBidXQgd2llbGRlZCB1bnN1cmU6
IDAgXj0gMA0KRXhwZWN0ZWQgYmFkLCBhbmQgd2llbGRlZCBiYWQ6IDcgXj0gMC43DQotLS0tIGJl
Z2luIFByb2Nlc3NpbmcgZGV2ZWw6OmxpYnJhcnkgLS0tLQ0KVGVzdGVkIHBhY2thZ2VzOiAzMjE4
DQpFeHBlY3RlZCB0byBiZSBnb29kOiAxNjA5DQpFeHBlY3RlZCB0byBiZSBiYWQ6IDE2MDkNCk1h
dGNoZXM6IDIyNTQgXj0gMC43MDA0MzUwNTI4Mjc4NDMNCk1pc21hdGNoZXM6IDI5NiBePSAwLjA5
MTk4MjU5Nzg4Njg4NjMNClVuc3VyZTogNjY4IF49IDAuMjA3NTgyMzQ5Mjg1MjcNCkV4cGVjdGVk
IGdvb2QsIGJ1dCB3aWVsZGVkIGJhZDogMTc3IF49IDAuMTEwMDA2MjE1MDQwMzk4DQpFeHBlY3Rl
ZCBnb29kLCBidXQgd2llbGRlZCB1bnN1cmU6IDM0NSBePSAwLjIxNDQxODg5MzcyMjgwOQ0KRXhw
ZWN0ZWQgZ29vZCwgYW5kIHdpZWxkZWQgZ29vZDogMTA4NyBePSAwLjY3NTU3NDg5MTIzNjc5Mw0K
RXhwZWN0ZWQgYmFkLCBidXQgd2llbGRlZCBnb29kOiAxMTkgXj0gMC4wNzM5NTg5ODA3MzMzNzQ4
DQpFeHBlY3RlZCBiYWQsIGJ1dCB3aWVsZGVkIHVuc3VyZTogMzIzIF49IDAuMjAwNzQ1ODA0ODQ3
NzMyDQpFeHBlY3RlZCBiYWQsIGFuZCB3aWVsZGVkIGJhZDogMTE2NyBePSAwLjcyNTI5NTIxNDQx
ODg5NA0KLS0tLSBiZWdpbiBQcm9jZXNzaW5nIGZpZWxkOjphc3Ryb25vbXkgLS0tLQ0KVGVzdGVk
IHBhY2thZ2VzOiAyNg0KRXhwZWN0ZWQgdG8gYmUgZ29vZDogMTMNCkV4cGVjdGVkIHRvIGJlIGJh
ZDogMTMNCk1hdGNoZXM6IDI1IF49IDAuOTYxNTM4NDYxNTM4NDYyDQpNaXNtYXRjaGVzOiAwIF49
IDANClVuc3VyZTogMSBePSAwLjAzODQ2MTUzODQ2MTUzODUNCkV4cGVjdGVkIGdvb2QsIGJ1dCB3
aWVsZGVkIGJhZDogMCBePSAwDQpFeHBlY3RlZCBnb29kLCBidXQgd2llbGRlZCB1bnN1cmU6IDEg
Xj0gMC4wNzY5MjMwNzY5MjMwNzY5DQpFeHBlY3RlZCBnb29kLCBhbmQgd2llbGRlZCBnb29kOiAx
MiBePSAwLjkyMzA3NjkyMzA3NjkyMw0KRXhwZWN0ZWQgYmFkLCBidXQgd2llbGRlZCBnb29kOiAw
IF49IDANCkV4cGVjdGVkIGJhZCwgYnV0IHdpZWxkZWQgdW5zdXJlOiAwIF49IDANCkV4cGVjdGVk
IGJhZCwgYW5kIHdpZWxkZWQgYmFkOiAxMyBePSAxDQotLS0tIGJlZ2luIFByb2Nlc3NpbmcgZmll
bGQ6OmVsZWN0cm9uaWNzIC0tLS0NClRlc3RlZCBwYWNrYWdlczogMzANCkV4cGVjdGVkIHRvIGJl
IGdvb2Q6IDE1DQpFeHBlY3RlZCB0byBiZSBiYWQ6IDE1DQpNYXRjaGVzOiAyNyBePSAwLjkNCk1p
c21hdGNoZXM6IDEgXj0gMC4wMzMzMzMzMzMzMzMzMzMzDQpVbnN1cmU6IDIgXj0gMC4wNjY2NjY2
NjY2NjY2NjY3DQpFeHBlY3RlZCBnb29kLCBidXQgd2llbGRlZCBiYWQ6IDAgXj0gMA0KRXhwZWN0
ZWQgZ29vZCwgYnV0IHdpZWxkZWQgdW5zdXJlOiAyIF49IDAuMTMzMzMzMzMzMzMzMzMzDQpFeHBl
Y3RlZCBnb29kLCBhbmQgd2llbGRlZCBnb29kOiAxMyBePSAwLjg2NjY2NjY2NjY2NjY2Nw0KRXhw
ZWN0ZWQgYmFkLCBidXQgd2llbGRlZCBnb29kOiAxIF49IDAuMDY2NjY2NjY2NjY2NjY2Nw0KRXhw
ZWN0ZWQgYmFkLCBidXQgd2llbGRlZCB1bnN1cmU6IDAgXj0gMA0KRXhwZWN0ZWQgYmFkLCBhbmQg
d2llbGRlZCBiYWQ6IDE0IF49IDAuOTMzMzMzMzMzMzMzMzMzDQotLS0tIGJlZ2luIFByb2Nlc3Np
bmcgZmlsZXRyYW5zZmVyOjpmdHAgLS0tLQ0KVGVzdGVkIHBhY2thZ2VzOiA3OA0KRXhwZWN0ZWQg
dG8gYmUgZ29vZDogMzkNCkV4cGVjdGVkIHRvIGJlIGJhZDogMzkNCk1hdGNoZXM6IDU0IF49IDAu
NjkyMzA3NjkyMzA3NjkyDQpNaXNtYXRjaGVzOiAxMyBePSAwLjE2NjY2NjY2NjY2NjY2Nw0KVW5z
dXJlOiAxMSBePSAwLjE0MTAyNTY0MTAyNTY0MQ0KRXhwZWN0ZWQgZ29vZCwgYnV0IHdpZWxkZWQg
YmFkOiA1IF49IDAuMTI4MjA1MTI4MjA1MTI4DQpFeHBlY3RlZCBnb29kLCBidXQgd2llbGRlZCB1
bnN1cmU6IDEgXj0gMC4wMjU2NDEwMjU2NDEwMjU2DQpFeHBlY3RlZCBnb29kLCBhbmQgd2llbGRl
ZCBnb29kOiAzMyBePSAwLjg0NjE1Mzg0NjE1Mzg0Ng0KRXhwZWN0ZWQgYmFkLCBidXQgd2llbGRl
ZCBnb29kOiA4IF49IDAuMjA1MTI4MjA1MTI4MjA1DQpFeHBlY3RlZCBiYWQsIGJ1dCB3aWVsZGVk
IHVuc3VyZTogMTAgXj0gMC4yNTY0MTAyNTY0MTAyNTYNCkV4cGVjdGVkIGJhZCwgYW5kIHdpZWxk
ZWQgYmFkOiAyMSBePSAwLjUzODQ2MTUzODQ2MTUzOA0KLS0tLSBiZWdpbiBQcm9jZXNzaW5nIHBy
b3RvY29sOjpwb3AgLS0tLQ0KVGVzdGVkIHBhY2thZ2VzOiAzNA0KRXhwZWN0ZWQgdG8gYmUgZ29v
ZDogMTcNCkV4cGVjdGVkIHRvIGJlIGJhZDogMTcNCk1hdGNoZXM6IDI5IF49IDAuODUyOTQxMTc2
NDcwNTg4DQpNaXNtYXRjaGVzOiAzIF49IDAuMDg4MjM1Mjk0MTE3NjQ3MQ0KVW5zdXJlOiAyIF49
IDAuMDU4ODIzNTI5NDExNzY0Nw0KRXhwZWN0ZWQgZ29vZCwgYnV0IHdpZWxkZWQgYmFkOiAzIF49
IDAuMTc2NDcwNTg4MjM1Mjk0DQpFeHBlY3RlZCBnb29kLCBidXQgd2llbGRlZCB1bnN1cmU6IDEg
Xj0gMC4wNTg4MjM1Mjk0MTE3NjQ3DQpFeHBlY3RlZCBnb29kLCBhbmQgd2llbGRlZCBnb29kOiAx
MyBePSAwLjc2NDcwNTg4MjM1Mjk0MQ0KRXhwZWN0ZWQgYmFkLCBidXQgd2llbGRlZCBnb29kOiAw
IF49IDANCkV4cGVjdGVkIGJhZCwgYnV0IHdpZWxkZWQgdW5zdXJlOiAxIF49IDAuMDU4ODIzNTI5
NDExNzY0Nw0KRXhwZWN0ZWQgYmFkLCBhbmQgd2llbGRlZCBiYWQ6IDE2IF49IDAuOTQxMTc2NDcw
NTg4MjM1DQotLS0tIGJlZ2luIFByb2Nlc3NpbmcgaW50ZXJmYWNlOjpzaGVsbCAtLS0tDQpUZXN0
ZWQgcGFja2FnZXM6IDU4DQpFeHBlY3RlZCB0byBiZSBnb29kOiAyOQ0KRXhwZWN0ZWQgdG8gYmUg
YmFkOiAyOQ0KTWF0Y2hlczogNDMgXj0gMC43NDEzNzkzMTAzNDQ4MjgNCk1pc21hdGNoZXM6IDcg
Xj0gMC4xMjA2ODk2NTUxNzI0MTQNClVuc3VyZTogOCBePSAwLjEzNzkzMTAzNDQ4Mjc1OQ0KRXhw
ZWN0ZWQgZ29vZCwgYnV0IHdpZWxkZWQgYmFkOiAzIF49IDAuMTAzNDQ4Mjc1ODYyMDY5DQpFeHBl
Y3RlZCBnb29kLCBidXQgd2llbGRlZCB1bnN1cmU6IDIgXj0gMC4wNjg5NjU1MTcyNDEzNzkzDQpF
eHBlY3RlZCBnb29kLCBhbmQgd2llbGRlZCBnb29kOiAyNCBePSAwLjgyNzU4NjIwNjg5NjU1Mg0K
RXhwZWN0ZWQgYmFkLCBidXQgd2llbGRlZCBnb29kOiA0IF49IDAuMTM3OTMxMDM0NDgyNzU5DQpF
eHBlY3RlZCBiYWQsIGJ1dCB3aWVsZGVkIHVuc3VyZTogNiBePSAwLjIwNjg5NjU1MTcyNDEzOA0K
RXhwZWN0ZWQgYmFkLCBhbmQgd2llbGRlZCBiYWQ6IDE5IF49IDAuNjU1MTcyNDEzNzkzMTAzDQot
LS0tIGJlZ2luIFByb2Nlc3NpbmcgaW1wbGVtZW50ZWQtaW46OmphdmEgLS0tLQ0KdG8gZmV3IHBh
Y2thZ2VzIGZvciB0YWcgaW1wbGVtZW50ZWQtaW46OmphdmEgKDw4KQ0KLS0tLSBiZWdpbiBQcm9j
ZXNzaW5nIG1haWw6Om5vdGlmaWNhdGlvbiAtLS0tDQpUZXN0ZWQgcGFja2FnZXM6IDIwDQpFeHBl
Y3RlZCB0byBiZSBnb29kOiAxMA0KRXhwZWN0ZWQgdG8gYmUgYmFkOiAxMA0KTWF0Y2hlczogMTUg
Xj0gMC43NQ0KTWlzbWF0Y2hlczogMiBePSAwLjENClVuc3VyZTogMyBePSAwLjE1DQpFeHBlY3Rl
ZCBnb29kLCBidXQgd2llbGRlZCBiYWQ6IDEgXj0gMC4xDQpFeHBlY3RlZCBnb29kLCBidXQgd2ll
bGRlZCB1bnN1cmU6IDIgXj0gMC4yDQpFeHBlY3RlZCBnb29kLCBhbmQgd2llbGRlZCBnb29kOiA3
IF49IDAuNw0KRXhwZWN0ZWQgYmFkLCBidXQgd2llbGRlZCBnb29kOiAxIF49IDAuMQ0KRXhwZWN0
ZWQgYmFkLCBidXQgd2llbGRlZCB1bnN1cmU6IDEgXj0gMC4xDQpFeHBlY3RlZCBiYWQsIGFuZCB3
aWVsZGVkIGJhZDogOCBePSAwLjgNCi0tLS0gYmVnaW4gUHJvY2Vzc2luZyBsYW5nZGV2ZWw6Om9i
amMgLS0tLQ0KdG8gZmV3IHBhY2thZ2VzIGZvciB0YWcgbGFuZ2RldmVsOjpvYmpjICg8OCkNCi0t
LS0gYmVnaW4gUHJvY2Vzc2luZyBsYW5nZGV2ZWw6OnJ1YnkgLS0tLQ0KVGVzdGVkIHBhY2thZ2Vz
OiAyNTENCkV4cGVjdGVkIHRvIGJlIGdvb2Q6IDEyNg0KRXhwZWN0ZWQgdG8gYmUgYmFkOiAxMjUN
Ck1hdGNoZXM6IDIzMCBePSAwLjkxNjMzNDY2MTM1NDU4Mg0KTWlzbWF0Y2hlczogMSBePSAwLjAw
Mzk4NDA2Mzc0NTAxOTkyDQpVbnN1cmU6IDIwIF49IDAuMDc5NjgxMjc0OTAwMzk4NA0KRXhwZWN0
ZWQgZ29vZCwgYnV0IHdpZWxkZWQgYmFkOiAwIF49IDANCkV4cGVjdGVkIGdvb2QsIGJ1dCB3aWVs
ZGVkIHVuc3VyZTogMTQgXj0gMC4xMTExMTExMTExMTExMTENCkV4cGVjdGVkIGdvb2QsIGFuZCB3
aWVsZGVkIGdvb2Q6IDExMiBePSAwLjg4ODg4ODg4ODg4ODg4OQ0KRXhwZWN0ZWQgYmFkLCBidXQg
d2llbGRlZCBnb29kOiAxIF49IDAuMDA4DQpFeHBlY3RlZCBiYWQsIGJ1dCB3aWVsZGVkIHVuc3Vy
ZTogNiBePSAwLjA0OA0KRXhwZWN0ZWQgYmFkLCBhbmQgd2llbGRlZCBiYWQ6IDExOCBePSAwLjk0
NA0KLS0tLSBiZWdpbiBQcm9jZXNzaW5nIHN1aXRlOjphcGFjaGUgLS0tLQ0KVGVzdGVkIHBhY2th
Z2VzOiAxMjANCkV4cGVjdGVkIHRvIGJlIGdvb2Q6IDYwDQpFeHBlY3RlZCB0byBiZSBiYWQ6IDYw
DQpNYXRjaGVzOiA5OCBePSAwLjgxNjY2NjY2NjY2NjY2Nw0KTWlzbWF0Y2hlczogOCBePSAwLjA2
NjY2NjY2NjY2NjY2NjcNClVuc3VyZTogMTQgXj0gMC4xMTY2NjY2NjY2NjY2NjcNCkV4cGVjdGVk
IGdvb2QsIGJ1dCB3aWVsZGVkIGJhZDogMSBePSAwLjAxNjY2NjY2NjY2NjY2NjcNCkV4cGVjdGVk
IGdvb2QsIGJ1dCB3aWVsZGVkIHVuc3VyZTogMSBePSAwLjAxNjY2NjY2NjY2NjY2NjcNCkV4cGVj
dGVkIGdvb2QsIGFuZCB3aWVsZGVkIGdvb2Q6IDU4IF49IDAuOTY2NjY2NjY2NjY2NjY3DQpFeHBl
Y3RlZCBiYWQsIGJ1dCB3aWVsZGVkIGdvb2Q6IDcgXj0gMC4xMTY2NjY2NjY2NjY2NjcNCkV4cGVj
dGVkIGJhZCwgYnV0IHdpZWxkZWQgdW5zdXJlOiAxMyBePSAwLjIxNjY2NjY2NjY2NjY2Nw0KRXhw
ZWN0ZWQgYmFkLCBhbmQgd2llbGRlZCBiYWQ6IDQwIF49IDAuNjY2NjY2NjY2NjY2NjY3DQotLS0t
IGJlZ2luIFByb2Nlc3NpbmcgbWVkaWE6OnNvdXJjZWNvZGUgLS0tLQ0KdG8gZmV3IHBhY2thZ2Vz
IGZvciB0YWcgbWVkaWE6OnNvdXJjZWNvZGUgKDw4KQ0KLS0tLSBiZWdpbiBQcm9jZXNzaW5nIG1l
ZGlhOjpwbGFpbnRleHQgLS0tLQ0KVGVzdGVkIHBhY2thZ2VzOiA2NA0KRXhwZWN0ZWQgdG8gYmUg
Z29vZDogMzINCkV4cGVjdGVkIHRvIGJlIGJhZDogMzINCk1hdGNoZXM6IDU5IF49IDAuOTIxODc1
DQpNaXNtYXRjaGVzOiAwIF49IDANClVuc3VyZTogNSBePSAwLjA3ODEyNQ0KRXhwZWN0ZWQgZ29v
ZCwgYnV0IHdpZWxkZWQgYmFkOiAwIF49IDANCkV4cGVjdGVkIGdvb2QsIGJ1dCB3aWVsZGVkIHVu
c3VyZTogMyBePSAwLjA5Mzc1DQpFeHBlY3RlZCBnb29kLCBhbmQgd2llbGRlZCBnb29kOiAyOSBe
PSAwLjkwNjI1DQpFeHBlY3RlZCBiYWQsIGJ1dCB3aWVsZGVkIGdvb2Q6IDAgXj0gMA0KRXhwZWN0
ZWQgYmFkLCBidXQgd2llbGRlZCB1bnN1cmU6IDIgXj0gMC4wNjI1DQpFeHBlY3RlZCBiYWQsIGFu
ZCB3aWVsZGVkIGJhZDogMzAgXj0gMC45Mzc1DQotLS0tIGJlZ2luIFByb2Nlc3Npbmcgc3BlY2lh
bDo6bWV0YSAtLS0tDQpUZXN0ZWQgcGFja2FnZXM6IDgyDQpFeHBlY3RlZCB0byBiZSBnb29kOiA0
MQ0KRXhwZWN0ZWQgdG8gYmUgYmFkOiA0MQ0KTWF0Y2hlczogNzYgXj0gMC45MjY4MjkyNjgyOTI2
ODMNCk1pc21hdGNoZXM6IDMgXj0gMC4wMzY1ODUzNjU4NTM2NTg1DQpVbnN1cmU6IDMgXj0gMC4w
MzY1ODUzNjU4NTM2NTg1DQpFeHBlY3RlZCBnb29kLCBidXQgd2llbGRlZCBiYWQ6IDIgXj0gMC4w
NDg3ODA0ODc4MDQ4NzgxDQpFeHBlY3RlZCBnb29kLCBidXQgd2llbGRlZCB1bnN1cmU6IDEgXj0g
MC4wMjQzOTAyNDM5MDI0MzkNCkV4cGVjdGVkIGdvb2QsIGFuZCB3aWVsZGVkIGdvb2Q6IDM4IF49
IDAuOTI2ODI5MjY4MjkyNjgzDQpFeHBlY3RlZCBiYWQsIGJ1dCB3aWVsZGVkIGdvb2Q6IDEgXj0g
MC4wMjQzOTAyNDM5MDI0MzkNCkV4cGVjdGVkIGJhZCwgYnV0IHdpZWxkZWQgdW5zdXJlOiAyIF49
IDAuMDQ4NzgwNDg3ODA0ODc4MQ0KRXhwZWN0ZWQgYmFkLCBhbmQgd2llbGRlZCBiYWQ6IDM4IF49
IDAuOTI2ODI5MjY4MjkyNjgzDQotLS0tIGJlZ2luIFByb2Nlc3NpbmcgcHJvdG9jb2w6OnNzbCAt
LS0tDQp0byBmZXcgcGFja2FnZXMgZm9yIHRhZyBwcm90b2NvbDo6c3NsICg8OCkNCi0tLS0gYmVn
aW4gUHJvY2Vzc2luZyBzdWl0ZTo6a2RlIC0tLS0NClRlc3RlZCBwYWNrYWdlczogMzIyDQpFeHBl
Y3RlZCB0byBiZSBnb29kOiAxNjENCkV4cGVjdGVkIHRvIGJlIGJhZDogMTYxDQpNYXRjaGVzOiAy
OTQgXj0gMC45MTMwNDM0NzgyNjA4Nw0KTWlzbWF0Y2hlczogMTMgXj0gMC4wNDAzNzI2NzA4MDc0
NTM0DQpVbnN1cmU6IDE1IF49IDAuMDQ2NTgzODUwOTMxNjc3DQpFeHBlY3RlZCBnb29kLCBidXQg
d2llbGRlZCBiYWQ6IDMgXj0gMC4wMTg2MzM1NDAzNzI2NzA4DQpFeHBlY3RlZCBnb29kLCBidXQg
d2llbGRlZCB1bnN1cmU6IDMgXj0gMC4wMTg2MzM1NDAzNzI2NzA4DQpFeHBlY3RlZCBnb29kLCBh
bmQgd2llbGRlZCBnb29kOiAxNTUgXj0gMC45NjI3MzI5MTkyNTQ2NTgNCkV4cGVjdGVkIGJhZCwg
YnV0IHdpZWxkZWQgZ29vZDogMTAgXj0gMC4wNjIxMTE4MDEyNDIyMzYNCkV4cGVjdGVkIGJhZCwg
YnV0IHdpZWxkZWQgdW5zdXJlOiAxMiBePSAwLjA3NDUzNDE2MTQ5MDY4MzINCkV4cGVjdGVkIGJh
ZCwgYW5kIHdpZWxkZWQgYmFkOiAxMzkgXj0gMC44NjMzNTQwMzcyNjcwODENCi0tLS0gYmVnaW4g
UHJvY2Vzc2luZyB1aXRvb2xraXQ6Omd0ayAtLS0tDQpUZXN0ZWQgcGFja2FnZXM6IDEyMjYNCkV4
cGVjdGVkIHRvIGJlIGdvb2Q6IDYxMw0KRXhwZWN0ZWQgdG8gYmUgYmFkOiA2MTMNCk1hdGNoZXM6
IDEwMzggXj0gMC44NDY2NTU3OTExOTA4NjUNCk1pc21hdGNoZXM6IDM4IF49IDAuMDMwOTk1MTA2
MDM1ODg5MQ0KVW5zdXJlOiAxNTAgXj0gMC4xMjIzNDkxMDI3NzMyNDYNCkV4cGVjdGVkIGdvb2Qs
IGJ1dCB3aWVsZGVkIGJhZDogMjAgXj0gMC4wMzI2MjY0Mjc0MDYxOTkNCkV4cGVjdGVkIGdvb2Qs
IGJ1dCB3aWVsZGVkIHVuc3VyZTogMzggXj0gMC4wNjE5OTAyMTIwNzE3NzgxDQpFeHBlY3RlZCBn
b29kLCBhbmQgd2llbGRlZCBnb29kOiA1NTUgXj0gMC45MDUzODMzNjA1MjIwMjMNCkV4cGVjdGVk
IGJhZCwgYnV0IHdpZWxkZWQgZ29vZDogMTggXj0gMC4wMjkzNjM3ODQ2NjU1NzkxDQpFeHBlY3Rl
ZCBiYWQsIGJ1dCB3aWVsZGVkIHVuc3VyZTogMTEyIF49IDAuMTgyNzA3OTkzNDc0NzE1DQpFeHBl
Y3RlZCBiYWQsIGFuZCB3aWVsZGVkIGJhZDogNDgzIF49IDAuNzg3OTI4MjIxODU5NzA2DQotLS0t
IGJlZ2luIFByb2Nlc3NpbmcgdWl0b29sa2l0Ojp3eHdpbmRvd3MgLS0tLQ0KVGVzdGVkIHBhY2th
Z2VzOiAyNg0KRXhwZWN0ZWQgdG8gYmUgZ29vZDogMTMNCkV4cGVjdGVkIHRvIGJlIGJhZDogMTMN
Ck1hdGNoZXM6IDIyIF49IDAuODQ2MTUzODQ2MTUzODQ2DQpNaXNtYXRjaGVzOiAyIF49IDAuMDc2
OTIzMDc2OTIzMDc2OQ0KVW5zdXJlOiAyIF49IDAuMDc2OTIzMDc2OTIzMDc2OQ0KRXhwZWN0ZWQg
Z29vZCwgYnV0IHdpZWxkZWQgYmFkOiAxIF49IDAuMDc2OTIzMDc2OTIzMDc2OQ0KRXhwZWN0ZWQg
Z29vZCwgYnV0IHdpZWxkZWQgdW5zdXJlOiAyIF49IDAuMTUzODQ2MTUzODQ2MTU0DQpFeHBlY3Rl
ZCBnb29kLCBhbmQgd2llbGRlZCBnb29kOiAxMCBePSAwLjc2OTIzMDc2OTIzMDc2OQ0KRXhwZWN0
ZWQgYmFkLCBidXQgd2llbGRlZCBnb29kOiAxIF49IDAuMDc2OTIzMDc2OTIzMDc2OQ0KRXhwZWN0
ZWQgYmFkLCBidXQgd2llbGRlZCB1bnN1cmU6IDAgXj0gMA0KRXhwZWN0ZWQgYmFkLCBhbmQgd2ll
bGRlZCBiYWQ6IDEyIF49IDAuOTIzMDc2OTIzMDc2OTIzDQotLS0tIGJlZ2luIFByb2Nlc3Npbmcg
dWl0b29sa2l0OjphdGhlbmEgLS0tLQ0KVGVzdGVkIHBhY2thZ2VzOiAxMzYNCkV4cGVjdGVkIHRv
IGJlIGdvb2Q6IDY4DQpFeHBlY3RlZCB0byBiZSBiYWQ6IDY4DQpNYXRjaGVzOiA5MSBePSAwLjY2
OTExNzY0NzA1ODgyMw0KTWlzbWF0Y2hlczogMjQgXj0gMC4xNzY0NzA1ODgyMzUyOTQNClVuc3Vy
ZTogMjEgXj0gMC4xNTQ0MTE3NjQ3MDU4ODINCkV4cGVjdGVkIGdvb2QsIGJ1dCB3aWVsZGVkIGJh
ZDogMiBePSAwLjAyOTQxMTc2NDcwNTg4MjQNCkV4cGVjdGVkIGdvb2QsIGJ1dCB3aWVsZGVkIHVu
c3VyZTogMyBePSAwLjA0NDExNzY0NzA1ODgyMzUNCkV4cGVjdGVkIGdvb2QsIGFuZCB3aWVsZGVk
IGdvb2Q6IDYzIF49IDAuOTI2NDcwNTg4MjM1Mjk0DQpFeHBlY3RlZCBiYWQsIGJ1dCB3aWVsZGVk
IGdvb2Q6IDIyIF49IDAuMzIzNTI5NDExNzY0NzA2DQpFeHBlY3RlZCBiYWQsIGJ1dCB3aWVsZGVk
IHVuc3VyZTogMTggXj0gMC4yNjQ3MDU4ODIzNTI5NDENCkV4cGVjdGVkIGJhZCwgYW5kIHdpZWxk
ZWQgYmFkOiAyOCBePSAwLjQxMTc2NDcwNTg4MjM1Mw0KLS0tLSBiZWdpbiBQcm9jZXNzaW5nIHVp
dG9vbGtpdDo6cXQgLS0tLQ0KVGVzdGVkIHBhY2thZ2VzOiA1MjQNCkV4cGVjdGVkIHRvIGJlIGdv
b2Q6IDI2Mg0KRXhwZWN0ZWQgdG8gYmUgYmFkOiAyNjINCk1hdGNoZXM6IDQ1NSBePSAwLjg2ODMy
MDYxMDY4NzAyMw0KTWlzbWF0Y2hlczogMjEgXj0gMC4wNDAwNzYzMzU4Nzc4NjI2DQpVbnN1cmU6
IDQ4IF49IDAuMDkxNjAzMDUzNDM1MTE0NQ0KRXhwZWN0ZWQgZ29vZCwgYnV0IHdpZWxkZWQgYmFk
OiA4IF49IDAuMDMwNTM0MzUxMTQ1MDM4Mg0KRXhwZWN0ZWQgZ29vZCwgYnV0IHdpZWxkZWQgdW5z
dXJlOiA3IF49IDAuMDI2NzE3NTU3MjUxOTA4NA0KRXhwZWN0ZWQgZ29vZCwgYW5kIHdpZWxkZWQg
Z29vZDogMjQ3IF49IDAuOTQyNzQ4MDkxNjAzMDUzDQpFeHBlY3RlZCBiYWQsIGJ1dCB3aWVsZGVk
IGdvb2Q6IDEzIF49IDAuMDQ5NjE4MzIwNjEwNjg3DQpFeHBlY3RlZCBiYWQsIGJ1dCB3aWVsZGVk
IHVuc3VyZTogNDEgXj0gMC4xNTY0ODg1NDk2MTgzMjENCkV4cGVjdGVkIGJhZCwgYW5kIHdpZWxk
ZWQgYmFkOiAyMDggXj0gMC43OTM4OTMxMjk3NzA5OTINCi0tLS0gYmVnaW4gUHJvY2Vzc2luZyB1
c2U6OmNoZWNraW5nIC0tLS0NClRlc3RlZCBwYWNrYWdlczogMzYNCkV4cGVjdGVkIHRvIGJlIGdv
b2Q6IDE4DQpFeHBlY3RlZCB0byBiZSBiYWQ6IDE4DQpNYXRjaGVzOiAzMyBePSAwLjkxNjY2NjY2
NjY2NjY2Nw0KTWlzbWF0Y2hlczogMiBePSAwLjA1NTU1NTU1NTU1NTU1NTYNClVuc3VyZTogMSBe
PSAwLjAyNzc3Nzc3Nzc3Nzc3NzgNCkV4cGVjdGVkIGdvb2QsIGJ1dCB3aWVsZGVkIGJhZDogMiBe
PSAwLjExMTExMTExMTExMTExMQ0KRXhwZWN0ZWQgZ29vZCwgYnV0IHdpZWxkZWQgdW5zdXJlOiAw
IF49IDANCkV4cGVjdGVkIGdvb2QsIGFuZCB3aWVsZGVkIGdvb2Q6IDE2IF49IDAuODg4ODg4ODg4
ODg4ODg5DQpFeHBlY3RlZCBiYWQsIGJ1dCB3aWVsZGVkIGdvb2Q6IDAgXj0gMA0KRXhwZWN0ZWQg
YmFkLCBidXQgd2llbGRlZCB1bnN1cmU6IDEgXj0gMC4wNTU1NTU1NTU1NTU1NTU2DQpFeHBlY3Rl
ZCBiYWQsIGFuZCB3aWVsZGVkIGJhZDogMTcgXj0gMC45NDQ0NDQ0NDQ0NDQ0NDQNCi0tLS0gYmVn
aW4gUHJvY2Vzc2luZyB1c2U6OmRvd25sb2FkaW5nIC0tLS0NClRlc3RlZCBwYWNrYWdlczogMjUN
CkV4cGVjdGVkIHRvIGJlIGdvb2Q6IDEzDQpFeHBlY3RlZCB0byBiZSBiYWQ6IDEyDQpNYXRjaGVz
OiAxNyBePSAwLjY4DQpNaXNtYXRjaGVzOiA0IF49IDAuMTYNClVuc3VyZTogNCBePSAwLjE2DQpF
eHBlY3RlZCBnb29kLCBidXQgd2llbGRlZCBiYWQ6IDMgXj0gMC4yMzA3NjkyMzA3NjkyMzENCkV4
cGVjdGVkIGdvb2QsIGJ1dCB3aWVsZGVkIHVuc3VyZTogMiBePSAwLjE1Mzg0NjE1Mzg0NjE1NA0K
RXhwZWN0ZWQgZ29vZCwgYW5kIHdpZWxkZWQgZ29vZDogOCBePSAwLjYxNTM4NDYxNTM4NDYxNQ0K
RXhwZWN0ZWQgYmFkLCBidXQgd2llbGRlZCBnb29kOiAxIF49IDAuMDgzMzMzMzMzMzMzMzMzMw0K
RXhwZWN0ZWQgYmFkLCBidXQgd2llbGRlZCB1bnN1cmU6IDIgXj0gMC4xNjY2NjY2NjY2NjY2NjcN
CkV4cGVjdGVkIGJhZCwgYW5kIHdpZWxkZWQgYmFkOiA5IF49IDAuNzUNCi0tLS0gYmVnaW4gUHJv
Y2Vzc2luZyB3ZWI6OmNtcyAtLS0tDQp0byBmZXcgcGFja2FnZXMgZm9yIHRhZyB3ZWI6OmNtcyAo
PDgpDQotLS0tIGJlZ2luIFByb2Nlc3NpbmcgeDExOjpmb250IC0tLS0NClRlc3RlZCBwYWNrYWdl
czogODANCkV4cGVjdGVkIHRvIGJlIGdvb2Q6IDQwDQpFeHBlY3RlZCB0byBiZSBiYWQ6IDQwDQpN
YXRjaGVzOiA3NyBePSAwLjk2MjUNCk1pc21hdGNoZXM6IDIgXj0gMC4wMjUNClVuc3VyZTogMSBe
PSAwLjAxMjUNCkV4cGVjdGVkIGdvb2QsIGJ1dCB3aWVsZGVkIGJhZDogMSBePSAwLjAyNQ0KRXhw
ZWN0ZWQgZ29vZCwgYnV0IHdpZWxkZWQgdW5zdXJlOiAwIF49IDANCkV4cGVjdGVkIGdvb2QsIGFu
ZCB3aWVsZGVkIGdvb2Q6IDM5IF49IDAuOTc1DQpFeHBlY3RlZCBiYWQsIGJ1dCB3aWVsZGVkIGdv
b2Q6IDEgXj0gMC4wMjUNCkV4cGVjdGVkIGJhZCwgYnV0IHdpZWxkZWQgdW5zdXJlOiAxIF49IDAu
MDI1DQpFeHBlY3RlZCBiYWQsIGFuZCB3aWVsZGVkIGJhZDogMzggXj0gMC45NQ0KDQotLS0tIGJl
Z2luIHN0YXRpc3RpY3MgLS0tLQ0KVGVzdGVkIFBhY2thZ2VzOiA9IDY2NjgNCg0KTWF0Y2hlczog
NTE4MiBePSAwLjc3NzE0NDU3MTA4NTc4Mw0KTWlzbWF0Y2hlczogNDcxIF49IDAuMDcwNjM1ODcy
ODI1NDM0OQ0KVW5zdXJlOiAxMDE1IF49IDAuMTUyMjE5NTU2MDg4NzgyDQoNCkF2ZXJhZ2UgbWF0
Y2ggcGVyY2VudGFnZTogMC44MTkxMzM3NzcyNjYzNzUNCkF2ZXJhZ2UgbWlzbWF0Y2ggcGVyY2Vu
dGFnZTogMC4wODk2ODI0NTgxOTU5MzE5DQpBdmVyYWdlIHVuc3VyZSBwZXJjZW50YWdlOiAwLjA5
MTE4Mzc2NDUzNzY5MjYNCg0KRmFsc2UgcG9zaXRpdmVzOiAyMjcgXj0gMC4wMzQwNDMxOTEzNjE3
Mjc3DQpBdmVyYWdlIGZhbHNlIHBvc2l0aXZlIHBlcmNlbnRhZ2U6IDAuMDgzOTA5MzI3NTQyMTAy
Ng0KRmFsc2UgbmVnYXRpdmU6IDI0NCBePSAwLjAzNjU5MjY4MTQ2MzcwNzMNCkF2ZXJhZ2UgZmFs
c2UgbmVnYXRpdmUgcGVyY2VudGFnZTogMC4wOTUyMjk5OTAyNTc5MzUyDQo=


--=-YItjzhcNMQVqo6Jzc5ju
Content-Disposition: attachment; filename=test-taglist
Content-Type: text/plain; name=test-taglist; charset=ISO-8859-15
Content-Transfer-Encoding: base64

Y3VsdHVyZTo6c3BhbmlzaA0KY3VsdHVyZTo6aHVuZ2FyaWFuDQpkYXRhOjpmb250DQpkYXRhOjp1
c2VyZG9jDQpnYW1lOjpkZW1vcw0Kc3VpdGU6Om1vemlsbGENCmRldmVsOjpycGMNCmRldmVsOjpl
ZGl0b3INCmRldmVsOjpsaWJyYXJ5DQpmaWVsZDo6YXN0cm9ub215DQpmaWVsZDo6ZWxlY3Ryb25p
Y3MNCmZpbGV0cmFuc2Zlcjo6ZnRwDQpwcm90b2NvbDo6cG9wDQppbnRlcmZhY2U6OnNoZWxsDQpp
bXBsZW1lbnRlZC1pbjo6amF2YQ0KbWFpbDo6bm90aWZpY2F0aW9uDQpsYW5nZGV2ZWw6Om9iamMN
CmxhbmdkZXZlbDo6cnVieQ0Kc3VpdGU6OmFwYWNoZQ0KbWVkaWE6OnNvdXJjZWNvZGUNCm1lZGlh
OjpwbGFpbnRleHQNCnNwZWNpYWw6Om1ldGENCnByb3RvY29sOjpzc2wNCnN1aXRlOjprZGUNCnVp
dG9vbGtpdDo6Z3RrDQp1aXRvb2xraXQ6Ond4d2luZG93cw0KdWl0b29sa2l0OjphdGhlbmENCnVp
dG9vbGtpdDo6cXQNCnVzZTo6Y2hlY2tpbmcNCnVzZTo6ZG93bmxvYWRpbmcNCndlYjo6Y21zDQp4
MTE6OmZvbnQNCg0K


--=-YItjzhcNMQVqo6Jzc5ju
Content-Disposition: attachment; filename=collect-doc.pl
Content-Type: application/x-perl; name=collect-doc.pl
Content-Transfer-Encoding: base64

IyEvdXNyL2Jpbi9wZXJsIC13CiMgVGhpcyBzY3JpcHQgYWRkcyB0aGUgY29udGVudCBvZiBhbGwg
bmV3cyBmaWxlcyBhbmQgb25lIHJlYWRtZSBmaWxlIGZvciBlYWNoCiMgc3ViZGlyZWN0b3J5IHVu
ZGVyIC91c3Ivc2hhcmUvZG9jIHRvIGEgZmlsZSBuYW1lZCByZWFkbWUtbGlzdC4KIwojIEl0IGFk
ZHMgYWxsIGNoYW5nZWxvZyBmaWxlcyB0byBjaGFuZ2Vsb2ctbGlzdC4KIwojIGV4aXN0aW5nIGZp
bGVzIHdpbGwgYmUgZGVsZXRlZCEKIwojIFRoZSBvcHRpb25zIHJlYWRtZSwgY2hhbmdlbG9nIGFu
ZCBuZXdzIGFyZSB1c2VkIHRvIHNldCB3aGljaCAKIyBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcGFy
c2VkCgojdXNlIHN0cmljdDsKdXNlIERCX0ZpbGU7CgpzdWIgcHJvY2Vzc0NoYW5nZWxvZygpOwpz
dWIgcHJvY2Vzc1JlYWRtZSgpOwpzdWIgcHJvY2Vzc05ld3MoKTsKc3ViIGV2YWx1YXRlQXJndW1l
bnRzKCk7CgpteSAkY2hhbmdlbG9nT3B0aW9uPTA7Cm15ICRyZWFkbWVPcHRpb249MDsKbXkgJG5l
d3NPcHRpb249MDsKbXkgJHVzZURiT3B0aW9uPTA7CgpldmFsdWF0ZUFyZ3VtZW50cygpOwoKbXkg
JGNoYW5nZWxvZ0ZpbGUgPSAoJHVzZURiT3B0aW9uID8gImNoYW5nZWxvZy5kYiIgOiAiY2hhbmdl
bG9nLWxpc3QiKTsKbXkgJWNoYW5nZWxvZ0RiOwoKaWYgKCRjaGFuZ2Vsb2dPcHRpb24pCnsKCSMg
ZGVsZXRlIHRoZSBvbGQgbGlzdAoJdW5saW5rKCRjaGFuZ2Vsb2dGaWxlKSBpZiAoLWUgJGNoYW5n
ZWxvZ0ZpbGUpOwoJdGllKCAlY2hhbmdlbG9nRGIsICJEQl9GaWxlIiwgJGNoYW5nZWxvZ0ZpbGUp
IGlmICgkdXNlRGJPcHRpb24pOwp9CgpteSAkcmVhZG1lRmlsZSA9ICgkdXNlRGJPcHRpb24gPyAi
cmVhZG1lLmRiIiA6ICJyZWFkbWUtbGlzdCIpOwpteSAlcmVhZG1lRGI7CgppZiAoJHJlYWRtZU9w
dGlvbikKewoJIyBkZWxldGUgdGhlIG9sZCBsaXN0Cgl1bmxpbmsoJHJlYWRtZUZpbGUpIGlmICgt
ZSAkcmVhZG1lRmlsZSk7Cgl0aWUoICVyZWFkbWVEYiwgIkRCX0ZpbGUiLCAkcmVhZG1lRmlsZSkg
aWYgKCR1c2VEYk9wdGlvbik7Cn0KCiMgdXNlIHRoZSByZWFkbWUtbGlzdCBmaWxlIGFsc28gZm9y
IG5ld3MKbXkgJG5ld3NGaWxlID0gKCR1c2VEYk9wdGlvbiA/ICJuZXdzLmRiIiA6ICJuZXdzLWxp
c3QiKTsKbXkgJW5ld3NEYjsKCmlmICgkbmV3c09wdGlvbikKewoJIyBkZWxldGUgdGhlIG9sZCBs
aXN0Cgl1bmxpbmsoJG5ld3NGaWxlKSBpZiAoLWUgJG5ld3NGaWxlKTsKCXRpZSggJW5ld3NEYiwg
IkRCX0ZpbGUiLCAkbmV3c0ZpbGUpIGlmICgkdXNlRGJPcHRpb24pOwp9CgoKcHJpbnQgIlByb2Nl
c3NlZCAwJSI7Cm15IEBkaXJzID0gZ2xvYigiL3Vzci9zaGFyZS9kb2MvKiIpOwpteSAkc2l6ZSA9
ICQjZGlyczsKbXkgJGkgPSAwOwpmb3JlYWNoICggQGRpcnMgKQp7CglteSAkcHJvY2VzcyA9ICRp
LyRzaXplICoxMDAuMDsKCXByaW50ICJcclByb2Nlc3NlZCAkcHJvY2VzcyUgICAgICAgICAgICAi
OwoJLyhbXlwvXSopJC87CSMgZmluZCBldmVyeXRoaW5nIGFmdGVyIHRoZSBsYXN0IC8KCWxvY2Fs
ICRtYWluOjpwYWNrYWdlID0gJDE7CgoJIyByZW1lbWJlcnMgaWYgYSByZWFkbWUgd2FzIGFscmVh
ZHkgZm91bmQgZm9yIHRoaXMgcGFja2FnZQoJbXkgJHJlYWRtZUFkZGVkID0gMDsKCW15ICRkaXIg
PSAkXzsKCWlmICgtZCAkZGlyKQoJewoJCSMgaXRlcmF0ZSBhbGwgZmlsZXMgaW4gdXNyL3NoYXJl
L2RvYwoJCWZvcmVhY2ggKGdsb2IoIiRfLyoiKSkKCQl7CgkJCSRmaWxlbmFtZSA9ICRfOwkgIyB1
c2VkIHRvIHJlc3RvcmUgJF8gYXMgdGhlIGZ1bmN0aW9ucyByZWx5IG9uIHRoaXMKCQkJaWYgKCRj
aGFuZ2Vsb2dPcHRpb24pCgkJCXsKCQkJCXByb2Nlc3NDaGFuZ2Vsb2coKTsKCQkJCSRfID0gJGZp
bGVuYW1lOwoJCQl9CgkJCSMgaWYgbm8gcmVhZG1lIHdhcyBhZGRlZCBmb3IgdGhpcyBwYWNrYWdl
CgkJCWlmICgkcmVhZG1lT3B0aW9uICYmICEkcmVhZG1lQWRkZWQpCgkJCXsKCQkJCSRyZWFkbWVB
ZGRlZCA9IHByb2Nlc3NSZWFkbWUoKTsKCQkJCSRfID0gJGZpbGVuYW1lOwoJCQl9OwoJCQlwcm9j
ZXNzTmV3cygpIGlmICgkbmV3c09wdGlvbik7CgkJfQoJfQoJKyskaTsKfQpwcmludCAiXG5kb25l
XG4iOwoKCiMgcHJvY2Vzc2VzIGEgZmlsZSBhbmQgaWYgaXQgaXMgYSBjaGFuZ2Vsb2cgYWRkcyBp
dCB0byB0aGUgZmlsZSAkY2hhbmdlbG9nRmlsZQojIGFzc3VtZXMgdGhlIGZpbGUgdG8gY2hlY2sg
dG8gYmUgaW4gJF8KIyBhc3N1bWVzIHRoZSBwYWNrYWdlIG5hbWUgaW4gJG1haW46OnBhY2thZ2UK
c3ViIHByb2Nlc3NDaGFuZ2Vsb2coKQp7CglpZiAoL2NoYW5nZWxvZyguZGViaWFuKT8kL2kpCgl7
CgkJaWYgKC1mICRfKQoJCXsKCQkJaWYgKCR1c2VEYk9wdGlvbikKCQkJewoJCQkJb3BlbihGSCwg
JF8pOwoJCQkJbXkgJGNvbnRlbnQ7CgkJCQl3aGlsZSAoPEZIPikKCQkJCXsKCQkJCQkkY29udGVu
dCAuPSAkXzsKCQkJCX0KCQkJCSRjaGFuZ2Vsb2dEYnskbWFpbjo6cGFja2FnZX0gLj0gJGNvbnRl
bnQ7CgkJCQljbG9zZShGSCk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlzeXN0ZW0oImVjaG8gXCIt
LS0gYmVnaW4gJF8gLS0tXCIgPj4gJGNoYW5nZWxvZ0ZpbGUiKTsKCQkJCXN5c3RlbSgiY2F0ICRf
ID4+ICRjaGFuZ2Vsb2dGaWxlIik7CgkJCX0KCQl9Cgl9CglpZiAoL2NoYW5nZWxvZyguZGViaWFu
KT8uZ3okL2kpCgl7CgkJaWYgKC1mICRfKQoJCXsKCQkJaWYgKCR1c2VEYk9wdGlvbikKCQkJewoJ
CQkJb3BlbihGSCwgInpjYXQgJF8gfCIpOwoJCQkJbXkgJGNvbnRlbnQ7CgkJCQl3aGlsZSAoPEZI
PikKCQkJCXsKCQkJCQkkY29udGVudCAuPSAkXzsKCQkJCX0KCQkJCSRjaGFuZ2Vsb2dEYnskbWFp
bjo6cGFja2FnZX0gLj0gJGNvbnRlbnQ7CgkJCQljbG9zZShGSCk7CgkJCX0KCQkJZWxzZQoJCQl7
CgkJCQlzeXN0ZW0oImVjaG8gXCItLS0gYmVnaW4gJF8gLS0tXCIgPj4gJGNoYW5nZWxvZ0ZpbGUi
KTsKCQkJCXN5c3RlbSgiemNhdCAkXyA+PiAkY2hhbmdlbG9nRmlsZSIpOwoJCQl9CgkJfQoJfQp9
CgojIHByb2Nlc3NlcyBhIGZpbGUgYW5kIGlmIGl0IGlzIGEgUkVBRE1FIGFkZHMgaXQgdG8gdGhl
IGZpbGUgJGNoYW5nZWxvZ0ZpbGUKIyBhc3N1bWVzIHRoZSBmaWxlIHRvIGNoZWNrIHRvIGJlIGlu
ICRfCiMgYXNzdW1lcyB0aGUgcGFja2FnZSBuYW1lIGluICRtYWluOjpwYWNrYWdlCiMgQHJldHVy
bnMgaWYgYSByZWFkbWUgd2FzIGZvdW5kCnN1YiBwcm9jZXNzUmVhZG1lKCkKewoJbXkgJHByb2Nl
c3NlZCA9IDA7CglpZiAoL14oLipcLyk/cmVhZG1lJC9pKQoJewoJCWlmICgtZiAkXykKCQl7CgkJ
CWlmICgkdXNlRGJPcHRpb24pCgkJCXsKCQkJCW9wZW4oRkgsICRfKTsKCQkJCW15ICRjb250ZW50
OwoJCQkJd2hpbGUgKDxGSD4pCgkJCQl7CgkJCQkJJGNvbnRlbnQgLj0gJF87CgkJCQl9CgkJCQkk
cmVhZG1lRGJ7JG1haW46OnBhY2thZ2V9IC49ICRjb250ZW50OwoJCQkJY2xvc2UoRkgpOwoJCQl9
CgkJCWVsc2UKCQkJewoJCQkJc3lzdGVtKCJlY2hvIFwiLS0tLS0tLS0tLS0tLVxuLS0tIGJlZ2lu
ICRfIC0tLVxuLS0tLS0tLS0tLS0tLVwiID4+ICRyZWFkbWVGaWxlIik7CgkJCQlzeXN0ZW0oImNh
dCAkXyA+PiAkcmVhZG1lRmlsZSIpOwoJCQl9CgkJCXJldHVybiAxOwoJCX0KCX0KCWVsc2lmICgv
XiguKlwvKT9yZWFkbWUuZ3okL2kpCgl7CgkJaWYgKC1mICRfKQoJCXsKCQkJaWYgKCR1c2VEYk9w
dGlvbikKCQkJewoJCQkJb3BlbihGSCwgInpjYXQgJF8gfCIpOwoJCQkJbXkgJGNvbnRlbnQ7CgkJ
CQl3aGlsZSAoPEZIPikKCQkJCXsKCQkJCQkkY29udGVudCAuPSAkXzsKCQkJCX0KCQkJCSRyZWFk
bWVEYnskbWFpbjo6cGFja2FnZX0gLj0gJGNvbnRlbnQ7CgkJCQljbG9zZShGSCk7CgkJCX0KCQkJ
ZWxzZQoJCQl7CgkJCQlzeXN0ZW0oImVjaG8gXCItLS0tLS0tLS0tLS0tXG4tLS0gYmVnaW4gJF8g
LS0tXG4tLS0tLS0tLS0tLS0tXCIgPj4gJHJlYWRtZUZpbGUiKTsKCQkJCXN5c3RlbSgiemNhdCAk
XyA+PiAkcmVhZG1lRmlsZSIpOwoJCQl9CgkJCXJldHVybiAxOwoJCX0KCX0KCWVsc2lmICgvXigu
KlwvKT9yZWFkbWUuaHRtbCQvaSkKCXsKCQlpZiAoLWYgJF8pCgkJewoJCQlpZiAoJHVzZURiT3B0
aW9uKQoJCQl7CgkJCQlvcGVuKEZILCAiaHRtbDJ0ZXh0ICRfIHwiKTsKCQkJCW15ICRjb250ZW50
OwoJCQkJd2hpbGUgKDxGSD4pCgkJCQl7CgkJCQkJJGNvbnRlbnQgLj0gJF87CgkJCQl9CgkJCQkk
cmVhZG1lRGJ7JG1haW46OnBhY2thZ2V9IC49ICRjb250ZW50OwoJCQkJY2xvc2UoRkgpOwoJCQl9
CgkJCWVsc2UKCQkJewoJCQkJc3lzdGVtKCJlY2hvIFwiLS0tLS0tLS0tLS0tLVxuLS0tIGJlZ2lu
ICRfIC0tLVxuLS0tLS0tLS0tLS0tLVwiID4+ICRyZWFkbWVGaWxlIik7CgkJCQlzeXN0ZW0oImh0
bWwydGV4dCAkXyA+PiAkcmVhZG1lRmlsZSIpOwoJCQl9CgkJCXJldHVybiAxOwoJCX0KCX0KCWVs
c2lmICgvXiguKlwvKT9yZWFkbWUuZGViaWFuJC9pKQoJewoJCWlmICgtZiAkXykKCQl7CgkJCWlm
ICgkdXNlRGJPcHRpb24pCgkJCXsKCQkJCW9wZW4oRkgsICRfKTsKCQkJCW15ICRjb250ZW50OwoJ
CQkJd2hpbGUgKDxGSD4pCgkJCQl7CgkJCQkJJGNvbnRlbnQgLj0gJF87CgkJCQl9CgkJCQlpZiAo
JGNvbnRlbnQpCgkJCQl7CgkJCQkJJHJlYWRtZURieyRtYWluOjpwYWNrYWdlfSAuPSAkY29udGVu
dDsKCQkJCX0KCQkJCWNsb3NlKEZIKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCXN5c3RlbSgiZWNo
byBcIi0tLS0tLS0tLS0tLS1cbi0tLSBiZWdpbiAkXyAtLS1cbi0tLS0tLS0tLS0tLS1cIiA+PiAk
cmVhZG1lRmlsZSIpOwoJCQkJc3lzdGVtKCJjYXQgJF8gPj4gJHJlYWRtZUZpbGUiKTsKCQkJfQoJ
CQlyZXR1cm4gMTsKCQl9Cgl9CgllbHNpZiAoL14oLipcLyk/cmVhZG1lLmRlYmlhbi5neiQvaSkK
CXsKCQlpZiAoLWYgJF8pCgkJewoJCQlpZiAoJHVzZURiT3B0aW9uKQoJCQl7CgkJCQlvcGVuKEZI
LCAiemNhdCAkXyB8Iik7CgkJCQlteSAkY29udGVudDsKCQkJCXdoaWxlICg8Rkg+KQoJCQkJewoJ
CQkJCSRjb250ZW50IC49ICRfOwoJCQkJfQoJCQkJJHJlYWRtZURieyRtYWluOjpwYWNrYWdlfSAu
PSAkY29udGVudDsKCQkJCWNsb3NlKEZIKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCXN5c3RlbSgi
ZWNobyBcIi0tLS0tLS0tLS0tLS1cbi0tLSBiZWdpbiAkXyAtLS1cbi0tLS0tLS0tLS0tLS1cIiA+
PiAkcmVhZG1lRmlsZSIpOwoJCQkJc3lzdGVtKCJ6Y2F0ICRfID4+ICRyZWFkbWVGaWxlIik7CgkJ
CX0KCQkJcmV0dXJuIDE7CgkJfQoJfQoJcmV0dXJuIDA7Cn0KCiMgYXNzdW1lcyB0aGUgZmlsZSB0
byBjaGVjayB0byBiZSBpbiAkXwojIGFzc3VtZXMgdGhlIHBhY2thZ2UgbmFtZSBpbiAkbWFpbjo6
cGFja2FnZQpzdWIgcHJvY2Vzc05ld3MoKQp7CglpZiAoL14oLipcLyk/bmV3cyQvaSAmJiAtZiAk
XykKCXsKCQlpZiAoJHVzZURiT3B0aW9uKQoJCXsKCQkJb3BlbihGSCwgJF8pOwoJCQlteSAkY29u
dGVudDsKCQkJd2hpbGUgKDxGSD4pCgkJCXsKCQkJCSRjb250ZW50IC49ICRfOwoJCQl9CgkJCSRu
ZXdzRGJ7JG1haW46OnBhY2thZ2V9IC49ICRjb250ZW50OwoJCQljbG9zZShGSCk7CgkJfQoJCWVs
c2UKCQl7CgkJCXN5c3RlbSgiZWNobyBcIi0tLS0tLS0tLS0tLS1cbi0tLSBiZWdpbiAkXyAtLS1c
bi0tLS0tLS0tLS0tLS1cIiA+PiAkcmVhZG1lRmlsZSIpOwoJCQlzeXN0ZW0oImNhdCAkXyA+PiAk
bmV3c0ZpbGUiKTsKCQl9Cgl9CgllbHNpZiAoL14oLipcLyk/bmV3cy5neiQvaSAmJiAtZiAkXykK
CXsKCQlpZiAoJHVzZURiT3B0aW9uKQoJCXsKCQkJb3BlbihGSCwgInpjYXQgJF8gfCIpOwoJCQlt
eSAkY29udGVudDsKCQkJd2hpbGUgKDxGSD4pCgkJCXsKCQkJCSRjb250ZW50IC49ICRfOwoJCQl9
CgkJCSRuZXdzRGJ7JG1haW46OnBhY2thZ2V9IC49ICRjb250ZW50OwoJCQljbG9zZShGSCk7CgkJ
fQoJCWVsc2UKCQl7CgkJCXN5c3RlbSgiZWNobyBcIi0tLS0tLS0tLS0tLS1cbi0tLSBiZWdpbiAk
XyAtLS1cbi0tLS0tLS0tLS0tLS1cIiA+PiAkcmVhZG1lRmlsZSIpOwoJCQlzeXN0ZW0oInpjYXQg
JF8gPj4gJG5ld3NGaWxlIik7CgkJfQoJfQp9CgpzdWIgZXZhbHVhdGVBcmd1bWVudHMoKQp7Cglt
eSAkdXNhZ2UgPSAidXNhZ2U6IGNvbGxlY3QtZG9jLnBsIFtjaGFuZ2Vsb2ddIFtyZWFkbWVdIFtu
ZXdzXSBbdXNlRGJdXG4iOwoJaWYgKEBBUkdWPT0wKQkjIG5vIGFyZ3VtZW50Cgl7CgkJcHJpbnQg
JHVzYWdlOwoJCWV4aXQgMTsKCX0KCWZvcmVhY2goQEFSR1YpCgl7CgkJaWYgKCRfIGVxICJjaGFu
Z2Vsb2ciKQoJCXsKCQkJJGNoYW5nZWxvZ09wdGlvbiA9IDE7CgkJfQoJCWVsc2lmICgkXyBlcSAi
cmVhZG1lIikKCQl7CgkJCSRyZWFkbWVPcHRpb24gPSAxOwoJCX0KCQllbHNpZiAoJF8gZXEgIm5l
d3MiKQoJCXsKCQkJJG5ld3NPcHRpb24gPSAxOwoJCX0KCQllbHNpZiAoJF8gZXEgInVzZURiIikK
CQl7CgkJCSR1c2VEYk9wdGlvbiA9IDE7CgkJfQoJCWVsc2UJIyBub3Qgb25lIG9mIHRoZSBrZXl3
b3JkcwoJCXsKCQkJcHJpbnQgImJhZCBhcmd1bWVudDogJF9cbiIuJHVzYWdlOwoJCQlleGl0IDE7
CgkJfQoJfQp9CgoK


--=-YItjzhcNMQVqo6Jzc5ju--

--=-dVbgkzAXd7UnTdPsnYKY
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: This is a digitally signed message part

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)

iD8DBQBCW8NEVPUqhxOrA6cRAgBnAKCq+jxPKytaYrorG9QWXxtloNnwxACdF5uG
GPRCj+jRzeBN4YUbyqDsj+c=
=f5Aa
-----END PGP SIGNATURE-----

--=-dVbgkzAXd7UnTdPsnYKY--