KnNwZWxsLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMS4gIExhc3QgY2hhbmdlOiAyMDA3IE1heSAwNwoKCgkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTAkgIGJ5IEJyYW0gTW9vbGVuYWFyCgoKU3BlbGwgY2hlY2tpbmcJCQkJCQkqc3BlbGwqCgoxLiBRdWljayBzdGFydAkJCXxzcGVsbC1xdWlja3N0YXJ0fAoyLiBSZW1hcmtzIG9uIHNwZWxsIGNoZWNraW5nCXxzcGVsbC1yZW1hcmtzfAozLiBHZW5lcmF0aW5nIGEgc3BlbGwgZmlsZQl8c3BlbGwtbWtzcGVsbHwKNC4gU3BlbGwgZmlsZSBmb3JtYXQJCXxzcGVsbC1maWxlLWZvcm1hdHwKCntWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBjb21tYW5kc30KClNwZWxsIGNoZWNraW5nIGlzIG5vdCBhdmFpbGFibGUgd2hlbiB0aGUgfCtzeW50YXh8IGZlYXR1cmUgaGFzIGJlZW4gZGlzYWJsZWQKYXQgY29tcGlsZSB0aW1lLgoKTm90ZTogVGhlcmUgYWxzbyBpcyBhIHZpbXNwZWxsIHBsdWdpbi4gIElmIHlvdSBoYXZlIGl0IHlvdSBjYW4gZG8gIjpoZWxwCnZpbXNwZWxsIiB0byBmaW5kIGFib3V0IGl0LiAgQnV0IHlvdSB3aWxsIHByb2JhYmx5IHdhbnQgdG8gZ2V0IHJpZCBvZiB0aGUKcGx1Z2luIGFuZCB1c2UgdGhlICdzcGVsbCcgb3B0aW9uIGluc3RlYWQsIGl0IHdvcmtzIGJldHRlci4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBRdWljayBzdGFydAkJCQkJCSpzcGVsbC1xdWlja3N0YXJ0KgoKVGhpcyBjb21tYW5kIHN3aXRjaGVzIG9uIHNwZWxsIGNoZWNraW5nOiA+CgoJOnNldGxvY2FsIHNwZWxsIHNwZWxsbGFuZz1lbl91cwoKVGhpcyBzd2l0Y2hlcyBvbiB0aGUgJ3NwZWxsJyBvcHRpb24gYW5kIHNwZWNpZmllcyB0byBjaGVjayBmb3IgVVMgRW5nbGlzaC4KClRoZSB3b3JkcyB0aGF0IGFyZSBub3QgcmVjb2duaXplZCBhcmUgaGlnaGxpZ2h0ZWQgd2l0aCBvbmUgb2YgdGhlc2U6CglTcGVsbEJhZAl3b3JkIG5vdCByZWNvZ25pemVkCQkJfGhsLVNwZWxsQmFkfAoJU3BlbGxDYXAJd29yZCBub3QgY2FwaXRhbGlzZWQJCQl8aGwtU3BlbGxDYXB8CglTcGVsbFJhcmUJcmFyZSB3b3JkCQkJCXxobC1TcGVsbFJhcmV8CglTcGVsbExvY2FsCXdyb25nIHNwZWxsaW5nIGZvciBzZWxlY3RlZCByZWdpb24JfGhsLVNwZWxsTG9jYWx8CgpWaW0gb25seSBjaGVja3Mgd29yZHMgZm9yIHNwZWxsaW5nLCB0aGVyZSBpcyBubyBncmFtbWFyIGNoZWNrLgoKSWYgdGhlICdtb3VzZW1vZGVsJyBvcHRpb24gaXMgc2V0IHRvICJwb3B1cCIgYW5kIHRoZSBjdXJzb3IgaXMgb24gYSBiYWRseQpzcGVsbGVkIHdvcmQgb3IgaXQgaXMgInBvcHVwX3NldHBvcyIgYW5kIHRoZSBtb3VzZSBwb2ludGVyIGlzIG9uIGEgYmFkbHkKc3BlbGxlZCB3b3JkLCB0aGVuIHRoZSBwb3B1cCBtZW51IHdpbGwgY29udGFpbiBhIHN1Ym1lbnUgdG8gcmVwbGFjZSB0aGUgYmFkCndvcmQuICBOb3RlOiB0aGlzIHNsb3dzIGRvd24gdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIHBvcHVwIG1lbnUuICBOb3RlIGZvciBHVEs6CmRvbid0IHJlbGVhc2UgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiB1bnRpbCB0aGUgbWVudSBhcHBlYXJzLCBvdGhlcndpc2UgaXQKd29uJ3Qgd29yay4KClRvIHNlYXJjaCBmb3IgdGhlIG5leHQgbWlzc3BlbGxlZCB3b3JkOgoKCQkJCQkJCSpdcyogKkU3NTYqCl1zCQkJTW92ZSB0byBuZXh0IG1pc3NwZWxsZWQgd29yZCBhZnRlciB0aGUgY3Vyc29yLgoJCQlBIGNvdW50IGJlZm9yZSB0aGUgY29tbWFuZCBjYW4gYmUgdXNlZCB0byByZXBlYXQuCgkJCSd3cmFwc2NhbicgYXBwbGllcy4KCgkJCQkJCQkqW3MqCltzCQkJTGlrZSAiXXMiIGJ1dCBzZWFyY2ggYmFja3dhcmRzLCBmaW5kIHRoZSBtaXNzcGVsbGVkCgkJCXdvcmQgYmVmb3JlIHRoZSBjdXJzb3IuICBEb2Vzbid0IHJlY29nbml6ZSB3b3JkcwoJCQlzcGxpdCBvdmVyIHR3byBsaW5lcywgdGh1cyBtYXkgc3RvcCBhdCB3b3JkcyB0aGF0IGFyZQoJCQlub3QgaGlnaGxpZ2h0ZWQgYXMgYmFkLiAgRG9lcyBub3Qgc3RvcCBhdCB3b3JkIHdpdGgKCQkJbWlzc2luZyBjYXBpdGFsIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUuCgoJCQkJCQkJKl1TKgpdUwkJCUxpa2UgIl1zIiBidXQgb25seSBzdG9wIGF0IGJhZCB3b3Jkcywgbm90IGF0IHJhcmUKCQkJd29yZHMgb3Igd29yZHMgZm9yIGFub3RoZXIgcmVnaW9uLgoKCQkJCQkJCSpbUyoKW1MJCQlMaWtlICJdUyIgYnV0IHNlYXJjaCBiYWNrd2FyZHMuCgoKVG8gYWRkIHdvcmRzIHRvIHlvdXIgb3duIHdvcmQgbGlzdDoKCgkJCQkJCQkqemcqCnpnCQkJQWRkIHdvcmQgdW5kZXIgdGhlIGN1cnNvciBhcyBhIGdvb2Qgd29yZCB0byB0aGUgZmlyc3QKCQkJbmFtZSBpbiAnc3BlbGxmaWxlJy4gIEEgY291bnQgbWF5IHByZWNlZGUgdGhlIGNvbW1hbmQKCQkJdG8gaW5kaWNhdGUgdGhlIGVudHJ5IGluICdzcGVsbGZpbGUnIHRvIGJlIHVzZWQuICBBCgkJCWNvdW50IG9mIHR3byB1c2VzIHRoZSBzZWNvbmQgZW50cnkuCgoJCQlJbiBWaXN1YWwgbW9kZSB0aGUgc2VsZWN0ZWQgY2hhcmFjdGVycyBhcmUgYWRkZWQgYXMgYQoJCQl3b3JkIChpbmNsdWRpbmcgd2hpdGUgc3BhY2UhKS4KCQkJV2hlbiB0aGUgY3Vyc29yIGlzIG9uIHRleHQgdGhhdCBpcyBtYXJrZWQgYXMgYmFkbHkKCQkJc3BlbGxlZCB0aGVuIHRoZSBtYXJrZWQgdGV4dCBpcyB1c2VkLgoJCQlPdGhlcndpc2UgdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvciwgc2VwYXJhdGVkIGJ5CgkJCW5vbi13b3JkIGNoYXJhY3RlcnMsIGlzIHVzZWQuCgoJCQlJZiB0aGUgd29yZCBpcyBleHBsaWNpdGx5IG1hcmtlZCBhcyBiYWQgd29yZCBpbgoJCQlhbm90aGVyIHNwZWxsIGZpbGUgdGhlIHJlc3VsdCBpcyB1bnByZWRpY3RhYmxlLgoKCQkJCQkJCSp6RyoKekcJCQlMaWtlICJ6ZyIgYnV0IGFkZCB0aGUgd29yZCB0byB0aGUgaW50ZXJuYWwgd29yZCBsaXN0CgkJCXxpbnRlcm5hbC13b3JkbGlzdHwuCgoJCQkJCQkJKnp3Kgp6dwkJCUxpa2UgInpnIiBidXQgbWFyayB0aGUgd29yZCBhcyBhIHdyb25nIChiYWQpIHdvcmQuCgkJCUlmIHRoZSB3b3JkIGFscmVhZHkgYXBwZWFycyBpbiAnc3BlbGxmaWxlJyBpdCBpcwoJCQl0dXJuZWQgaW50byBhIGNvbW1lbnQgbGluZS4gIFNlZSB8c3BlbGxmaWxlLWNsZWFudXB8CgkJCWZvciBnZXR0aW5nIHJpZCBvZiB0aG9zZS4KCgkJCQkJCQkqelcqCnpXCQkJTGlrZSAienciIGJ1dCBhZGQgdGhlIHdvcmQgdG8gdGhlIGludGVybmFsIHdvcmQgbGlzdAoJCQl8aW50ZXJuYWwtd29yZGxpc3R8LgoKenV3CQkJCQkJCSp6dWcqICp6dXcqCnp1ZwkJCVVuZG8gfHp3fCBhbmQgfHpnfCwgcmVtb3ZlIHRoZSB3b3JkIGZyb20gdGhlIGVudHJ5IGluCgkJCSdzcGVsbGZpbGUnLiAgQ291bnQgdXNlZCBhcyB3aXRoIHx6Z3wuCgp6dVcJCQkJCQkJKnp1RyogKnp1VyoKenVHCQkJVW5kbyB8eld8IGFuZCB8ekd8LCByZW1vdmUgdGhlIHdvcmQgZnJvbSB0aGUgaW50ZXJuYWwKCQkJd29yZCBsaXN0LiAgQ291bnQgdXNlZCBhcyB3aXRoIHx6Z3wuCgoJCQkJCQkJKjpzcGUqICo6c3BlbGxnb29kKgo6W2NvdW50XXNwZVtsbGdvb2RdIHt3b3JkfQoJCQlBZGQge3dvcmR9IGFzIGEgZ29vZCB3b3JkIHRvICdzcGVsbGZpbGUnLCBsaWtlIHdpdGgKCQkJfHpnfC4gIFdpdGhvdXQgY291bnQgdGhlIGZpcnN0IG5hbWUgaXMgdXNlZCwgd2l0aCBhCgkJCWNvdW50IG9mIHR3byB0aGUgc2Vjb25kIGVudHJ5LCBldGMuCgo6c3BlW2xsZ29vZF0hIHt3b3JkfQlBZGQge3dvcmR9IGFzIGEgZ29vZCB3b3JkIHRvIHRoZSBpbnRlcm5hbCB3b3JkIGxpc3QsCgkJCWxpa2Ugd2l0aCB8ekd8LgoKCQkJCQkJCSo6c3BlbGx3KiAqOnNwZWxsd3JvbmcqCjpbY291bnRdc3BlbGx3W3JvbmddIHt3b3JkfQoJCQlBZGQge3dvcmR9IGFzIGEgd3JvbmcgKGJhZCkgd29yZCB0byAnc3BlbGxmaWxlJywgYXMKCQkJd2l0aCB8end8LiAgV2l0aG91dCBjb3VudCB0aGUgZmlyc3QgbmFtZSBpcyB1c2VkLCB3aXRoCgkJCWEgY291bnQgb2YgdHdvIHRoZSBzZWNvbmQgZW50cnksIGV0Yy4KCjpzcGVsbHdbcm9uZ10hIHt3b3JkfQlBZGQge3dvcmR9IGFzIGEgd3JvbmcgKGJhZCkgd29yZCB0byB0aGUgaW50ZXJuYWwgd29yZAoJCQlsaXN0LCBsaWtlIHdpdGggfHpXfC4KCjpbY291bnRdc3BlbGx1W25kb10ge3dvcmR9CQkJCSo6c3BlbGx1KiAqOnNwZWxsdW5kbyoKCQkJTGlrZSB8enV3fC4gIFtjb3VudF0gdXNlZCBhcyB3aXRoIHw6c3BlbGxnb29kfC4KCjpzcGVsbHVbbmRvXSEge3dvcmR9CUxpa2UgfHp1V3wuICBbY291bnRdIHVzZWQgYXMgd2l0aCB8OnNwZWxsZ29vZHwuCgoKQWZ0ZXIgYWRkaW5nIGEgd29yZCB0byAnc3BlbGxmaWxlJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kcyBpdHMgYXNzb2NpYXRlZAoiLnNwbCIgZmlsZSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgdXBkYXRlZCBhbmQgcmVsb2FkZWQuICBJZiB5b3UgY2hhbmdlCidzcGVsbGZpbGUnIG1hbnVhbGx5IHlvdSBuZWVkIHRvIHVzZSB0aGUgfDpta3NwZWxsfCBjb21tYW5kLiAgVGhpcyBzZXF1ZW5jZSBvZgpjb21tYW5kcyBtb3N0bHkgd29ya3Mgd2VsbDogPgoJOmVkaXQgPGZpbGUgaW4gJ3NwZWxsZmlsZSc+CjwJKG1ha2UgY2hhbmdlcyB0byB0aGUgc3BlbGwgZmlsZSkgPgoJOm1rc3BlbGwhICUKCk1vcmUgZGV0YWlscyBhYm91dCB0aGUgJ3NwZWxsZmlsZScgZm9ybWF0IGJlbG93IHxzcGVsbC13b3JkbGlzdC1mb3JtYXR8LgoKCQkJCQkJCSppbnRlcm5hbC13b3JkbGlzdCoKVGhlIGludGVybmFsIHdvcmQgbGlzdCBpcyB1c2VkIGZvciBhbGwgYnVmZmVycyB3aGVyZSAnc3BlbGwnIGlzIHNldC4gIEl0IGlzCm5vdCBzdG9yZWQsIGl0IGlzIGxvc3Qgd2hlbiB5b3UgZXhpdCBWaW0uICBJdCBpcyBhbHNvIGNsZWFyZWQgd2hlbiAnZW5jb2RpbmcnCmlzIHNldC4KCgpGaW5kaW5nIHN1Z2dlc3Rpb25zIGZvciBiYWQgd29yZHM6CgkJCQkJCQkqej0qCno9CQkJRm9yIHRoZSB3b3JkIHVuZGVyL2FmdGVyIHRoZSBjdXJzb3Igc3VnZ2VzdCBjb3JyZWN0bHkKCQkJc3BlbGxlZCB3b3Jkcy4gIFRoaXMgYWxzbyB3b3JrcyB0byBmaW5kIGFsdGVybmF0aXZlcwoJCQlmb3IgYSB3b3JkIHRoYXQgaXMgbm90IGhpZ2hsaWdodGVkIGFzIGEgYmFkIHdvcmQsCgkJCWUuZy4sIHdoZW4gdGhlIHdvcmQgYWZ0ZXIgaXQgaXMgYmFkLgoJCQlJbiBWaXN1YWwgbW9kZSB0aGUgaGlnaGxpZ2h0ZWQgdGV4dCBpcyB0YWtlbiBhcyB0aGUKCQkJd29yZCB0byBiZSByZXBsYWNlZC4KCQkJVGhlIHJlc3VsdHMgYXJlIHNvcnRlZCBvbiBzaW1pbGFyaXR5IHRvIHRoZSB3b3JkIGJlaW5nCgkJCXJlcGxhY2VkLgoJCQlUaGlzIG1heSB0YWtlIGEgbG9uZyB0aW1lLiAgSGl0IENUUkwtQyB3aGVuIHlvdSBnZXQKCQkJYm9yZWQuCgoJCQlJZiB0aGUgY29tbWFuZCBpcyB1c2VkIHdpdGhvdXQgYSBjb3VudCB0aGUKCQkJYWx0ZXJuYXRpdmVzIGFyZSBsaXN0ZWQgYW5kIHlvdSBjYW4gZW50ZXIgdGhlIG51bWJlcgoJCQlvZiB5b3VyIGNob2ljZSBvciBwcmVzcyA8RW50ZXI+IGlmIHlvdSBkb24ndCB3YW50IHRvCgkJCXJlcGxhY2UuICBZb3UgY2FuIGFsc28gdXNlIHRoZSBtb3VzZSB0byBjbGljayBvbiB5b3VyCgkJCWNob2ljZSAob25seSB3b3JrcyBpZiB0aGUgbW91c2UgY2FuIGJlIHVzZWQgaW4gTm9ybWFsCgkJCW1vZGUgYW5kIHdoZW4gdGhlcmUgYXJlIG5vIGxpbmUgd3JhcHMpLiAgQ2xpY2sgb24gdGhlCgkJCWZpcnN0IGxpbmUgKHRoZSBoZWFkZXIpIHRvIGNhbmNlbC4KCgkJCVRoZSBzdWdnZXN0aW9ucyBsaXN0ZWQgbm9ybWFsbHkgcmVwbGFjZSBhIGhpZ2hsaWdodGVkCgkJCWJhZCB3b3JkLiAgU29tZXRpbWVzIHRoZXkgaW5jbHVkZSBvdGhlciB0ZXh0LCBpbiB0aGF0CgkJCWNhc2UgdGhlIHJlcGxhY2VkIHRleHQgaXMgYWxzbyBsaXN0ZWQgYWZ0ZXIgYSAiPCIuCgoJCQlJZiBhIGNvdW50IGlzIHVzZWQgdGhhdCBzdWdnZXN0aW9uIGlzIHVzZWQsIHdpdGhvdXQKCQkJcHJvbXB0aW5nLiAgRm9yIGV4YW1wbGUsICIxej0iIGFsd2F5cyB0YWtlcyB0aGUgZmlyc3QKCQkJc3VnZ2VzdGlvbi4KCgkJCUlmICd2ZXJib3NlJyBpcyBub24temVybyBhIHNjb3JlIHdpbGwgYmUgZGlzcGxheWVkCgkJCXdpdGggdGhlIHN1Z2dlc3Rpb25zIHRvIGluZGljYXRlIHRoZSBsaWtlbGluZXNzIHRvIHRoZQoJCQliYWRseSBzcGVsbGVkIHdvcmQgKHRoZSBoaWdoZXIgdGhlIHNjb3JlIHRoZSBtb3JlCgkJCWRpZmZlcmVudCkuCgkJCVdoZW4gYSB3b3JkIHdhcyByZXBsYWNlZCB0aGUgcmVkbyBjb21tYW5kICIuIiB3aWxsCgkJCXJlcGVhdCB0aGUgd29yZCByZXBsYWNlbWVudC4gIFRoaXMgd29ya3MgbGlrZSAiY2l3IiwKCQkJdGhlIGdvb2Qgd29yZCBhbmQgPEVzYz4uICBUaGlzIGRvZXMgTk9UIHdvcmsgZm9yIFRoYWkKCQkJYW5kIG90aGVyIGxhbmd1YWdlcyB3aXRob3V0IHNwYWNlcyBiZXR3ZWVuIHdvcmRzLgoKCQkJCQkqOnNwZWxsciogKjpzcGVsbHJlcGFsbCogKkU3NTIqICpFNzUzKgo6c3BlbGxyW2VwYWxsXQkJUmVwZWF0IHRoZSByZXBsYWNlbWVudCBkb25lIGJ5IHx6PXwgZm9yIGFsbCBtYXRjaGVzCgkJCXdpdGggdGhlIHJlcGxhY2VkIHdvcmQgaW4gdGhlIGN1cnJlbnQgd2luZG93LgoKSW4gSW5zZXJ0IG1vZGUsIHdoZW4gdGhlIGN1cnNvciBpcyBhZnRlciBhIGJhZGx5IHNwZWxsZWQgd29yZCwgeW91IGNhbiB1c2UKQ1RSTC1YIHMgdG8gZmluZCBzdWdnZXN0aW9ucy4gIFRoaXMgd29ya3MgbGlrZSBJbnNlcnQgbW9kZSBjb21wbGV0aW9uLiAgVXNlCkNUUkwtTiB0byB1c2UgdGhlIG5leHQgc3VnZ2VzdGlvbiwgQ1RSTC1QIHRvIGdvIGJhY2suIHxpX0NUUkwtWF9zfAoKVGhlICdzcGVsbHN1Z2dlc3QnIG9wdGlvbiBpbmZsdWVuY2VzIGhvdyB0aGUgbGlzdCBvZiBzdWdnZXN0aW9ucyBpcyBnZW5lcmF0ZWQKYW5kIHNvcnRlZC4gIFNlZSB8J3NwZWxsc3VnZ2VzdCd8LgoKVGhlICdzcGVsbGNhcGNoZWNrJyBvcHRpb24gaXMgdXNlZCB0byBjaGVjayB0aGUgZmlyc3Qgd29yZCBvZiBhIHNlbnRlbmNlCnN0YXJ0cyB3aXRoIGEgY2FwaXRhbC4gIFRoaXMgZG9lc24ndCB3b3JrIGZvciB0aGUgZmlyc3Qgd29yZCBpbiB0aGUgZmlsZS4KV2hlbiB0aGVyZSBpcyBhIGxpbmUgYnJlYWsgcmlnaHQgYWZ0ZXIgYSBzZW50ZW5jZSB0aGUgaGlnaGxpZ2h0aW5nIG9mIHRoZSBuZXh0CmxpbmUgbWF5IGJlIHBvc3Rwb25lZC4gIFVzZSB8Q1RSTC1MfCB3aGVuIG5lZWRlZC4gIEFsc28gc2VlIHxzZXQtc3BjLWF1dG98IGZvcgpob3cgaXQgY2FuIGJlIHNldCBhdXRvbWF0aWNhbGx5IHdoZW4gJ3NwZWxsbGFuZycgaXMgc2V0LgoKVmltIGNvdW50cyB0aGUgbnVtYmVyIG9mIHRpbWVzIGEgZ29vZCB3b3JkIGlzIGVuY291bnRlcmVkLiAgVGhpcyBpcyB1c2VkIHRvCnNvcnQgdGhlIHN1Z2dlc3Rpb25zOiB3b3JkcyB0aGF0IGhhdmUgYmVlbiBzZWVuIGJlZm9yZSBnZXQgYSBzbWFsbCBib251cywKd29yZHMgdGhhdCBoYXZlIGJlZW4gc2VlbiBvZnRlbiBnZXQgYSBiaWdnZXIgYm9udXMuICBUaGUgQ09NTU9OIGl0ZW0gaW4gdGhlCmFmZml4IGZpbGUgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGNvbW1vbiB3b3Jkcywgc28gdGhhdCB0aGlzIG1lY2hhbmlzbSBhbHNvCndvcmtzIGluIGEgbmV3IG9yIHNob3J0IGZpbGUgfHNwZWxsLUNPTU1PTnwuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gUmVtYXJrcyBvbiBzcGVsbCBjaGVja2luZwkJCQkqc3BlbGwtcmVtYXJrcyoKClBFUkZPUk1BTkNFCgpWaW0gZG9lcyBvbi10aGUtZmx5IHNwZWxsIGNoZWNraW5nLiAgVG8gbWFrZSB0aGlzIHdvcmsgZmFzdCB0aGUgd29yZCBsaXN0IGlzCmxvYWRlZCBpbiBtZW1vcnkuICBUaHVzIHRoaXMgdXNlcyBhIGxvdCBvZiBtZW1vcnkgKDEgTWJ5dGUgb3IgbW9yZSkuICBUaGVyZQptaWdodCBhbHNvIGJlIGEgbm90aWNlYWJsZSBkZWxheSB3aGVuIHRoZSB3b3JkIGxpc3QgaXMgbG9hZGVkLCB3aGljaCBoYXBwZW5zCndoZW4gJ3NwZWxsJyBpcyBzZXQgYW5kIHdoZW4gJ3NwZWxsbGFuZycgaXMgc2V0IHdoaWxlICdzcGVsbCcgd2FzIGFscmVhZHkgc2V0LgpUbyBtaW5pbWl6ZSB0aGUgZGVsYXkgZWFjaCB3b3JkIGxpc3QgaXMgb25seSBsb2FkZWQgb25jZSwgaXQgaXMgbm90IGRlbGV0ZWQKd2hlbiAnc3BlbGxsYW5nJyBpcyBtYWRlIGVtcHR5IG9yICdzcGVsbCcgaXMgcmVzZXQuICBXaGVuICdlbmNvZGluZycgaXMgc2V0CmFsbCB0aGUgd29yZCBsaXN0cyBhcmUgcmVsb2FkZWQsIHRodXMgeW91IG1heSBub3RpY2UgYSBkZWxheSB0aGVuIHRvby4KCgpSRUdJT05TCgpBIHdvcmQgbWF5IGJlIHNwZWxsZWQgZGlmZmVyZW50bHkgaW4gdmFyaW91cyByZWdpb25zLiAgRm9yIGV4YW1wbGUsIEVuZ2xpc2gKY29tZXMgaW4gKGF0IGxlYXN0KSB0aGVzZSB2YXJpYW50czoKCgllbgkJYWxsIHJlZ2lvbnMKCWVuX2F1CQlBdXN0cmFsaWEKCWVuX2NhCQlDYW5hZGEKCWVuX2diCQlHcmVhdCBCcml0YWluCgllbl9uegkJTmV3IFplYWxhbmQKCWVuX3VzCQlVU0EKCldvcmRzIHRoYXQgYXJlIG5vdCB1c2VkIGluIG9uZSByZWdpb24gYnV0IGFyZSB1c2VkIGluIGFub3RoZXIgcmVnaW9uIGFyZQpoaWdobGlnaHRlZCB3aXRoIFNwZWxsTG9jYWwgfGhsLVNwZWxsTG9jYWx8LgoKQWx3YXlzIHVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgdGhlIGxhbmd1YWdlIGFuZCByZWdpb24gbmFtZXMuCgpXaGVuIGFkZGluZyBhIHdvcmQgd2l0aCB8emd8IG9yIGFub3RoZXIgY29tbWFuZCBpdCdzIGFsd2F5cyBhZGRlZCBmb3IgYWxsCnJlZ2lvbnMuICBZb3UgY2FuIGNoYW5nZSB0aGF0IGJ5IG1hbnVhbGx5IGVkaXRpbmcgdGhlICdzcGVsbGZpbGUnLiAgU2VlCnxzcGVsbC13b3JkbGlzdC1mb3JtYXR8LiAgTm90ZSB0aGF0IHRoZSByZWdpb25zIGFzIHNwZWNpZmllZCBpbiB0aGUgZmlsZXMgaW4KJ3NwZWxsZmlsZScgYXJlIG9ubHkgdXNlZCB3aGVuIGFsbCBlbnRyaWVzIGluICdzcGVsbGxhbmcnIHNwZWNpZnkgdGhlIHNhbWUKcmVnaW9uIChub3QgY291bnRpbmcgZmlsZXMgc3BlY2lmaWVkIGJ5IHRoZWlyIC5zcGwgbmFtZSkuCgoJCQkJCQkJKnNwZWxsLWdlcm1hbioKU3BlY2lmaWMgZXhjZXB0aW9uOiBGb3IgR2VybWFuIHRoZXNlIHNwZWNpYWwgcmVnaW9ucyBhcmUgdXNlZDoKCWRlCQlhbGwgR2VybWFuIHdvcmRzIGFjY2VwdGVkCglkZV9kZQkJb2xkIGFuZCBuZXcgc3BlbGxpbmcKCWRlXzE5CQlvbGQgc3BlbGxpbmcKCWRlXzIwCQluZXcgc3BlbGxpbmcKCWRlX2F0CQlBdXN0cmlhCglkZV9jaAkJU3dpdHplcmxhbmQKCgkJCQkJCQkqc3BlbGwtcnVzc2lhbioKU3BlY2lmaWMgZXhjZXB0aW9uOiBGb3IgUnVzc2lhbiB0aGVzZSBzcGVjaWFsIHJlZ2lvbnMgYXJlIHVzZWQ6CglydQkJYWxsIFJ1c3NpYW4gd29yZHMgYWNjZXB0ZWQKCXJ1X3J1CQkiSUUiIGxldHRlciBzcGVsbGluZwoJcnVfeW8JCSJZTyIgbGV0dGVyIHNwZWxsaW5nCgoJCQkJCQkJKnNwZWxsLXlpZGRpc2gqCllpZGRpc2ggcmVxdWlyZXMgdXNpbmcgInV0Zi04IiBlbmNvZGluZywgYmVjYXVzZSBvZiB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzCnVzZWQuICBJZiB5b3UgYXJlIHVzaW5nIGxhdGluMSBWaW0gd2lsbCB1c2UgdHJhbnNsaXRlcmF0ZWQgKHJvbWFuaXplZCkgWWlkZGlzaAppbnN0ZWFkLiAgSWYgeW91IHdhbnQgdG8gdXNlIHRyYW5zbGl0ZXJhdGVkIFlpZGRpc2ggd2l0aCB1dGYtOCB1c2UgInlpLXRyIi4KSW4gYSB0YWJsZToKCSdlbmNvZGluZycJJ3NwZWxsbGFuZycKCXV0Zi04CQl5aQkJWWlkZGlzaAoJbGF0aW4xCQl5aQkJdHJhbnNsaXRlcmF0ZWQgWWlkZGlzaAoJdXRmLTgJCXlpLXRyCQl0cmFuc2xpdGVyYXRlZCBZaWRkaXNoCgoKU1BFTEwgRklMRVMJCQkJCQkqc3BlbGwtbG9hZCoKClZpbSBzZWFyY2hlcyBmb3Igc3BlbGwgZmlsZXMgaW4gdGhlICJzcGVsbCIgc3ViZGlyZWN0b3J5IG9mIHRoZSBkaXJlY3RvcmllcyBpbgoncnVudGltZXBhdGgnLiAgVGhlIG5hbWUgaXM6IExMLkVFRS5zcGwsIHdoZXJlOgoJTEwJdGhlIGxhbmd1YWdlIG5hbWUKCUVFRQl0aGUgdmFsdWUgb2YgJ2VuY29kaW5nJwoKVGhlIHZhbHVlIGZvciAiTEwiIGNvbWVzIGZyb20gJ3NwZWxsbGFuZycsIGJ1dCBleGNsdWRlcyB0aGUgcmVnaW9uIG5hbWUuCkV4YW1wbGVzOgoJJ3NwZWxsbGFuZycJTEwgfgoJZW5fdXMJCWVuCgllbi1yYXJlCQllbi1yYXJlCgltZWRpY2FsX2NhCW1lZGljYWwKCk9ubHkgdGhlIGZpcnN0IGZpbGUgaXMgbG9hZGVkLCB0aGUgb25lIHRoYXQgaXMgZmlyc3QgaW4gJ3J1bnRpbWVwYXRoJy4gIElmCnRoaXMgc3VjY2VlZHMgdGhlbiBhZGRpdGlvbmFsbHkgZmlsZXMgd2l0aCB0aGUgbmFtZSBMTC5FRUUuYWRkLnNwbCBhcmUgbG9hZGVkLgpBbGwgdGhlIG9uZXMgdGhhdCBhcmUgZm91bmQgYXJlIHVzZWQuCgpJZiBubyBzcGVsbCBmaWxlIGlzIGZvdW5kIHRoZSB8U3BlbGxGaWxlTWlzc2luZ3wgYXV0b2NvbW1hbmQgZXZlbnQgaXMKdHJpZ2dlcmVkLiAgVGhpcyBtYXkgdHJpZ2dlciB0aGUgfHNwZWxsZmlsZS52aW18IHBsdWdpbiB0byBvZmZlciB5b3UKZG93bmxvYWRpbmcgdGhlIHNwZWxsIGZpbGUuCgpBZGRpdGlvbmFsbHksIHRoZSBmaWxlcyByZWxhdGVkIHRvIHRoZSBuYW1lcyBpbiAnc3BlbGxmaWxlJyBhcmUgbG9hZGVkLiAgVGhlc2UKYXJlIHRoZSBmaWxlcyB0aGF0IHx6Z3wgYW5kIHx6d3wgYWRkIGdvb2QgYW5kIHdyb25nIHdvcmRzIHRvLgoKRXhjZXB0aW9uczoKLSBWaW0gdXNlcyAibGF0aW4xIiB3aGVuICdlbmNvZGluZycgaXMgImlzby04ODU5LTE1Ii4gIFRoZSBldXJvIHNpZ24gZG9lc24ndAogIG1hdHRlciBmb3Igc3BlbGxpbmcuCi0gV2hlbiBubyBzcGVsbCBmaWxlIGZvciAnZW5jb2RpbmcnIGlzIGZvdW5kICJhc2NpaSIgaXMgdHJpZWQuICBUaGlzIG9ubHkKICB3b3JrcyBmb3IgbGFuZ3VhZ2VzIHdoZXJlIG5lYXJseSBhbGwgd29yZHMgYXJlIEFTQ0lJLCBzdWNoIGFzIEVuZ2xpc2guICBJdAogIGhlbHBzIHdoZW4gJ2VuY29kaW5nJyBpcyBub3QgImxhdGluMSIsIHN1Y2ggYXMgaXNvLTg4NTktMiwgYW5kIEVuZ2xpc2ggdGV4dAogIGlzIGJlaW5nIGVkaXRlZC4gIEZvciB0aGUgIi5hZGQiIGZpbGVzIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGZvdW5kIG1haW4KICBzcGVsbCBmaWxlIGlzIHVzZWQuCgpGb3IgZXhhbXBsZSwgd2l0aCB0aGVzZSB2YWx1ZXM6CgkncnVudGltZXBhdGgnIGlzICJ+Ly52aW0sL3Vzci9zaGFyZS92aW03MCx+Ly52aW0vYWZ0ZXIiCgknZW5jb2RpbmcnICAgIGlzICJpc28tODg1OS0yIgoJJ3NwZWxsbGFuZycgICBpcyAicGwiCgpWaW0gd2lsbCBsb29rIGZvcjoKMS4gfi8udmltL3NwZWxsL3BsLmlzby04ODU5LTIuc3BsCjIuIC91c3Ivc2hhcmUvdmltNzAvc3BlbGwvcGwuaXNvLTg4NTktMi5zcGwKMy4gfi8udmltL3NwZWxsL3BsLmlzby04ODU5LTIuYWRkLnNwbAo0LiAvdXNyL3NoYXJlL3ZpbTcwL3NwZWxsL3BsLmlzby04ODU5LTIuYWRkLnNwbAo1LiB+Ly52aW0vYWZ0ZXIvc3BlbGwvcGwuaXNvLTg4NTktMi5hZGQuc3BsCgpUaGlzIGFzc3VtZXMgMS4gaXMgbm90IGZvdW5kIGFuZCAyLiBpcyBmb3VuZC4KCklmICdlbmNvZGluZycgaXMgImxhdGluMSIgVmltIHdpbGwgbG9vayBmb3I6CjEuIH4vLnZpbS9zcGVsbC9wbC5sYXRpbjEuc3BsCjIuIC91c3Ivc2hhcmUvdmltNzAvc3BlbGwvcGwubGF0aW4xLnNwbAozLiB+Ly52aW0vYWZ0ZXIvc3BlbGwvcGwubGF0aW4xLnNwbAo0LiB+Ly52aW0vc3BlbGwvcGwuYXNjaWkuc3BsCjUuIC91c3Ivc2hhcmUvdmltNzAvc3BlbGwvcGwuYXNjaWkuc3BsCjYuIH4vLnZpbS9hZnRlci9zcGVsbC9wbC5hc2NpaS5zcGwKClRoaXMgYXNzdW1lcyBub25lIG9mIHRoZW0gYXJlIGZvdW5kIChQb2xpc2ggZG9lc24ndCBtYWtlIHNlbnNlIHdoZW4gbGVhdmluZwpvdXQgdGhlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzKS4KClNwZWxsaW5nIGZvciBFQkNESUMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuCgpBIHNwZWxsIGZpbGUgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCAnZW5jb2RpbmcnLiAgU2VlCnxzcGVsbC1ta3NwZWxsfCBhYm91dCBob3cgdG8gY3JlYXRlIGEgc3BlbGwgZmlsZS4gIENvbnZlcnRpbmcgYSBzcGVsbCBmaWxlCndpdGggImljb252IiB3aWxsIE5PVCB3b3JrIQoKCQkJCQkJICAgICpzcGVsbC1zdWctZmlsZSogKkU3ODEqCklmIHRoZXJlIGlzIGEgZmlsZSB3aXRoIGV4YWN0bHkgdGhlIHNhbWUgbmFtZSBhcyB0aGUgIi5zcGwiIGZpbGUgYnV0IGVuZGluZyBpbgoiLnN1ZyIsIHRoYXQgZmlsZSB3aWxsIGJlIHVzZWQgZm9yIGdpdmluZyBiZXR0ZXIgc3VnZ2VzdGlvbnMuICBJdCBpc24ndCBsb2FkZWQKYmVmb3JlIHN1Z2dlc3Rpb25zIGFyZSBtYWRlIHRvIHJlZHVjZSBtZW1vcnkgdXNlLgoKCQkJCSAgICAqRTc1OCogKkU3NTkqICpFNzc4KiAqRTc3OSogKkU3ODAqICpFNzgyKgpXaGVuIGxvYWRpbmcgYSBzcGVsbCBmaWxlIFZpbSBjaGVja3MgdGhhdCBpdCBpcyBwcm9wZXJseSBmb3JtYXR0ZWQuICBJZiB5b3UKZ2V0IGFuIGVycm9yIHRoZSBmaWxlIG1heSBiZSB0cnVuY2F0ZWQsIG1vZGlmaWVkIG9yIGludGVuZGVkIGZvciBhbm90aGVyIFZpbQp2ZXJzaW9uLgoKClNQRUxMRklMRSBDTEVBTlVQCQkJCQkqc3BlbGxmaWxlLWNsZWFudXAqCgpUaGUgfHp3fCBjb21tYW5kIHR1cm5zIGV4aXN0aW5nIGVudHJpZXMgaW4gJ3NwZWxsZmlsZScgaW50byBjb21tZW50IGxpbmVzLgpUaGlzIGF2b2lkcyBoYXZpbmcgdG8gd3JpdGUgYSBuZXcgZmlsZSBldmVyeSB0aW1lLCBidXQgcmVzdWx0cyBpbiB0aGUgZmlsZQpvbmx5IGdldHRpbmcgbG9uZ2VyLCBuZXZlciBzaG9ydGVyLiAgVG8gY2xlYW4gdXAgdGhlIGNvbW1lbnQgbGluZXMgaW4gYWxsCiIuYWRkIiBzcGVsbCBmaWxlcyBkbyB0aGlzOiA+Cgk6cnVudGltZSBzcGVsbC9jbGVhbmFkZC52aW0KClRoaXMgZGVsZXRlcyBhbGwgY29tbWVudCBsaW5lcywgZXhjZXB0IHRoZSBvbmVzIHRoYXQgc3RhcnQgd2l0aCAiIyMiLiAgVXNlCiIjIyIgbGluZXMgdG8gYWRkIGNvbW1lbnRzIHRoYXQgeW91IHdhbnQgdG8ga2VlcC4KCllvdSBjYW4gaW52b2tlIHRoaXMgc2NyaXB0IGFzIG9mdGVuIGFzIHlvdSBsaWtlLiAgQSB2YXJpYWJsZSBpcyBwcm92aWRlZCB0bwpza2lwIHVwZGF0aW5nIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgcmVjZW50bHkuICBTZXQgaXQgdG8gdGhlIG51bWJlciBvZgpzZWNvbmRzIHRoYXQgaGFzIHBhc3NlZCBzaW5jZSBhIGZpbGUgd2FzIGNoYW5nZWQgYmVmb3JlIGl0IHdpbGwgYmUgY2xlYW5lZC4KRm9yIGV4YW1wbGUsIHRvIGNsZWFuIG9ubHkgZmlsZXMgdGhhdCB3ZXJlIG5vdCBjaGFuZ2VkIGluIHRoZSBsYXN0IGhvdXI6ID4KICAgICAgbGV0IGc6c3BlbGxfY2xlYW5fbGltaXQgPSA2MCAqIDYwClRoZSBkZWZhdWx0IGlzIG9uZSBzZWNvbmQuCgoKV09SRFMKClZpbSB1c2VzIGEgZml4ZWQgbWV0aG9kIHRvIHJlY29nbml6ZSBhIHdvcmQuICBUaGlzIGlzIGluZGVwZW5kZW50IG9mCidpc2tleXdvcmQnLCBzbyB0aGF0IGl0IGFsc28gd29ya3MgaW4gaGVscCBmaWxlcyBhbmQgZm9yIGxhbmd1YWdlcyB0aGF0CmluY2x1ZGUgY2hhcmFjdGVycyBsaWtlICctJyBpbiAnaXNrZXl3b3JkJy4gIFRoZSB3b3JkIGNoYXJhY3RlcnMgZG8gZGVwZW5kIG9uCidlbmNvZGluZycuCgpUaGUgdGFibGUgd2l0aCB3b3JkIGNoYXJhY3RlcnMgaXMgc3RvcmVkIGluIHRoZSBtYWluIC5zcGwgZmlsZS4gIFRoZXJlZm9yZSBpdAptYXR0ZXJzIHdoYXQgdGhlIGN1cnJlbnQgbG9jYWxlIGlzIHdoZW4gZ2VuZXJhdGluZyBpdCEgIEEgLmFkZC5zcGwgZmlsZSBkb2VzCm5vdCBjb250YWluIGEgd29yZCB0YWJsZSB0aG91Z2guCgpGb3IgYSB3b3JkIHRoYXQgc3RhcnRzIHdpdGggYSBkaWdpdCB0aGUgZGlnaXQgaXMgaWdub3JlZCwgdW5sZXNzIHRoZSB3b3JkIGFzIGEKd2hvbGUgaXMgcmVjb2duaXplZC4gIFRodXMgaWYgIjNEIiBpcyBhIHdvcmQgYW5kICJEIiBpcyBub3QgdGhlbiAiM0QiIGlzCnJlY29nbml6ZWQgYXMgYSB3b3JkLCBidXQgaWYgIjNEIiBpcyBub3QgYSB3b3JkIHRoZW4gb25seSB0aGUgIkQiIGlzIG1hcmtlZCBhcwpiYWQuICBIZXggbnVtYmVycyBpbiB0aGUgZm9ybSAweDEyYWIgYW5kIDBYMTJBQiBhcmUgcmVjb2duaXplZC4KCgpXT1JEIENPTUJJTkFUSU9OUwoKSXQgaXMgcG9zc2libGUgdG8gc3BlbGwtY2hlY2sgd29yZHMgdGhhdCBpbmNsdWRlIGEgc3BhY2UuICBUaGlzIGlzIHVzZWQgdG8KcmVjb2duaXplIHdvcmRzIHRoYXQgYXJlIGludmFsaWQgd2hlbiB1c2VkIGJ5IHRoZW1zZWx2ZXMsIGUuZy4gZm9yICJldCBhbC4iLgpJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIHJlY29nbml6ZSAidGhlIHRoZSIgYW5kIGhpZ2hsaWdodCBpdC4KClRoZSBudW1iZXIgb2Ygc3BhY2VzIGlzIGlycmVsZXZhbnQuICBJbiBtb3N0IGNhc2VzIGEgbGluZSBicmVhayBtYXkgYWxzbwphcHBlYXIuICBIb3dldmVyLCB0aGlzIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBmaW5kIG91dCB3aGVyZSB0byBzdGFydCBjaGVja2luZwpmb3Igc3BlbGxpbmcgbWlzdGFrZXMuICBXaGVuIHlvdSBtYWtlIGEgY2hhbmdlIHRvIG9uZSBsaW5lIGFuZCBvbmx5IHRoYXQgbGluZQppcyByZWRyYXduIFZpbSB3b24ndCBsb29rIGluIHRoZSBwcmV2aW91cyBsaW5lLCB0aHVzIHdoZW4gImV0IiBpcyBhdCB0aGUgZW5kCm9mIHRoZSBwcmV2aW91cyBsaW5lICJhbC4iIHdpbGwgYmUgZmxhZ2dlZCBhcyBhbiBlcnJvci4gIEFuZCB3aGVuIHlvdSB0eXBlCiJ0aGU8Q1I+dGhlIiB0aGUgaGlnaGxpZ2h0aW5nIGRvZXNuJ3QgYXBwZWFyIHVudGlsIHRoZSBmaXJzdCBsaW5lIGlzIHJlZHJhd24uClVzZSB8Q1RSTC1MfCB0byByZWRyYXcgcmlnaHQgYXdheS4gICJbcyIgd2lsbCBhbHNvIHN0b3AgYXQgYSB3b3JkIGNvbWJpbmF0aW9uCndpdGggYSBsaW5lIGJyZWFrLgoKV2hlbiBlbmNvdW50ZXJpbmcgYSBsaW5lIGJyZWFrIFZpbSBza2lwcyBjaGFyYWN0ZXJzIHN1Y2ggYXMgJyonLCAnPicgYW5kICciJywKc28gdGhhdCBjb21tZW50cyBpbiBDLCBzaGVsbCBhbmQgVmltIGNvZGUgY2FuIGJlIHNwZWxsIGNoZWNrZWQuCgoKU1lOVEFYIEhJR0hMSUdIVElORwkJCQkJKnNwZWxsLXN5bnRheCoKCkZpbGVzIHRoYXQgdXNlIHN5bnRheCBoaWdobGlnaHRpbmcgY2FuIHNwZWNpZnkgd2hlcmUgc3BlbGwgY2hlY2tpbmcgc2hvdWxkIGJlCmRvbmU6CgoxLiAgZXZlcnl3aGVyZQkJCSAgIGRlZmF1bHQKMi4gIGluIHNwZWNpZmljIGl0ZW1zCQkgICB1c2UgImNvbnRhaW5zPUBTcGVsbCIKMy4gIGV2ZXJ5d2hlcmUgYnV0IHNwZWNpZmljIGl0ZW1zICB1c2UgImNvbnRhaW5zPUBOb1NwZWxsIgoKRm9yIHRoZSBzZWNvbmQgbWV0aG9kIGFkZGluZyB0aGUgQE5vU3BlbGwgY2x1c3RlciB3aWxsIGRpc2FibGUgc3BlbGwgY2hlY2tpbmcKYWdhaW4uICBUaGlzIGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gYWRkIEBTcGVsbCB0byB0aGUgY29tbWVudHMgb2YgYQpwcm9ncmFtLCBhbmQgYWRkIEBOb1NwZWxsIGZvciBpdGVtcyB0aGF0IHNob3VsZG4ndCBiZSBjaGVja2VkLgpBbHNvIHNlZSB8OnN5bi1zcGVsbHwgZm9yIHRleHQgdGhhdCBpcyBub3QgaW4gYSBzeW50YXggaXRlbS4KCgpWSU0gU0NSSVBUUwoKSWYgeW91IHdhbnQgdG8gd3JpdGUgYSBWaW0gc2NyaXB0IHRoYXQgZG9lcyBzb21ldGhpbmcgd2l0aCBzcGVsbGluZywgeW91IG1heQpmaW5kIHRoZXNlIGZ1bmN0aW9ucyB1c2VmdWw6CgogICAgc3BlbGxiYWR3b3JkKCkJZmluZCBiYWRseSBzcGVsbGVkIHdvcmQgYXQgdGhlIGN1cnNvcgogICAgc3BlbGxzdWdnZXN0KCkJZ2V0IGxpc3Qgb2Ygc3BlbGxpbmcgc3VnZ2VzdGlvbnMKICAgIHNvdW5kZm9sZCgpCQlnZXQgdGhlIHNvdW5kLWEtbGlrZSB2ZXJzaW9uIG9mIGEgd29yZAoKClNFVFRJTkcgJ3NwZWxsY2FwY2hlY2snIEFVVE9NQVRJQ0FMTFkJCQkqc2V0LXNwYy1hdXRvKgoKQWZ0ZXIgdGhlICdzcGVsbGxhbmcnIG9wdGlvbiBoYXMgYmVlbiBzZXQgc3VjY2Vzc2Z1bGx5LCBWaW0gd2lsbCBzb3VyY2UgdGhlCmZpbGVzICJzcGVsbC9MQU5HLnZpbSIgaW4gJ3J1bnRpbWVwYXRoJy4gICJMQU5HIiBpcyB0aGUgdmFsdWUgb2YgJ3NwZWxsbGFuZycKdXAgdG8gdGhlIGZpcnN0IGNvbW1hLCBkb3Qgb3IgdW5kZXJzY29yZS4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2V0IG9wdGlvbnMKc3BlY2lmaWNhbGx5IGZvciB0aGUgbGFuZ3VhZ2UsIGVzcGVjaWFsbHkgJ3NwZWxsY2FwY2hlY2snLgoKVGhlIGRpc3RyaWJ1dGlvbiBpbmNsdWRlcyBhIGZldyBvZiB0aGVzZSBmaWxlcy4gIFVzZSB0aGlzIGNvbW1hbmQgdG8gc2VlIHdoYXQKdGhleSBkbzogPgoJOm5leHQgJFZJTVJVTlRJTUUvc3BlbGwvKi52aW0KCk5vdGUgdGhhdCB0aGUgZGVmYXVsdCBzY3JpcHRzIGRvbid0IHNldCAnc3BlbGxjYXBjaGVjaycgaWYgaXQgd2FzIGNoYW5nZWQgZnJvbQp0aGUgZGVmYXVsdCB2YWx1ZS4gIFRoaXMgYXNzdW1lcyB0aGUgdXNlciBwcmVmZXJzIGFub3RoZXIgdmFsdWUgdGhlbi4KCgpET1VCTEUgU0NPUklORwkJCQkJCSpzcGVsbC1kb3VibGUtc2NvcmluZyoKClRoZSAnc3BlbGxzdWdnZXN0JyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc2VsZWN0ICJkb3VibGUiIHNjb3JpbmcuICBUaGlzCm1lY2hhbmlzbSBpcyBiYXNlZCBvbiB0aGUgcHJpbmNpcGxlIHRoYXQgdGhlcmUgYXJlIHR3byBraW5kcyBvZiBzcGVsbGluZwptaXN0YWtlczoKCjEuIFlvdSBrbm93IGhvdyB0byBzcGVsbCB0aGUgd29yZCwgYnV0IG1pc3R5cGUgc29tZXRoaW5nLiAgVGhpcyByZXN1bHRzIGluIGEKICAgc21hbGwgZWRpdGluZyBkaXN0YW5jZSAoY2hhcmFjdGVyIHN3YXBwZWQvb21pdHRlZC9pbnNlcnRlZCkgYW5kIHBvc3NpYmx5IGEKICAgd29yZCB0aGF0IHNvdW5kcyBjb21wbGV0ZWx5IGRpZmZlcmVudC4KCjIuIFlvdSBkb24ndCBrbm93IGhvdyB0byBzcGVsbCB0aGUgd29yZCBhbmQgdHlwZSBzb21ldGhpbmcgdGhhdCBzb3VuZHMgcmlnaHQuCiAgIFRoZSBlZGl0IGRpc3RhbmNlIGNhbiBiZSBiaWcgYnV0IHRoZSB3b3JkIGlzIHNpbWlsYXIgYWZ0ZXIgc291bmQtZm9sZGluZy4KClNpbmNlIHNjb3JlcyBmb3IgdGhlc2UgdHdvIG1pc3Rha2VzIHdpbGwgYmUgdmVyeSBkaWZmZXJlbnQgd2UgdXNlIGEgbGlzdApmb3IgZWFjaCBhbmQgbWl4IHRoZW0uCgpUaGUgc291bmQtZm9sZGluZyBpcyBzbG93IGFuZCBwZW9wbGUgdGhhdCBrbm93IHRoZSBsYW5ndWFnZSB3b24ndCBtYWtlIHRoZQpzZWNvbmQga2luZCBvZiBtaXN0YWtlcy4gIFRoZXJlZm9yZSAnc3BlbGxzdWdnZXN0JyBjYW4gYmUgc2V0IHRvIHNlbGVjdCB0aGUKcHJlZmVycmVkIG1ldGhvZCBmb3Igc2NvcmluZyB0aGUgc3VnZ2VzdGlvbnMuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gR2VuZXJhdGluZyBhIHNwZWxsIGZpbGUJCQkJKnNwZWxsLW1rc3BlbGwqCgpWaW0gdXNlcyBhIGJpbmFyeSBmaWxlIGZvcm1hdCBmb3Igc3BlbGxpbmcuICBUaGlzIGdyZWF0bHkgc3BlZWRzIHVwIGxvYWRpbmcKdGhlIHdvcmQgbGlzdCBhbmQga2VlcHMgaXQgc21hbGwuCgkJCQkJCSAgICAqLmFmZiogKi5kaWMqICpNeXNwZWxsKgpZb3UgY2FuIGNyZWF0ZSBhIFZpbSBzcGVsbCBmaWxlIGZyb20gdGhlIC5hZmYgYW5kIC5kaWMgZmlsZXMgdGhhdCBNeXNwZWxsCnVzZXMuICBNeXNwZWxsIGlzIHVzZWQgYnkgT3Blbk9mZmljZS5vcmcgYW5kIE1vemlsbGEuICBZb3Ugc2hvdWxkIGJlIGFibGUgdG8KZmluZCB0aGVtIGhlcmU6CglodHRwOi8vd2lraS5zZXJ2aWNlcy5vcGVub2ZmaWNlLm9yZy93aWtpL0RpY3Rpb25hcmllcwpZb3UgY2FuIGFsc28gdXNlIGEgcGxhaW4gd29yZCBsaXN0LiAgVGhlIHJlc3VsdHMgYXJlIHRoZSBzYW1lLCB0aGUgY2hvaWNlCmRlcGVuZHMgb24gd2hhdCB3b3JkIGxpc3RzIHlvdSBjYW4gZmluZC4KCklmIHlvdSBpbnN0YWxsIEFhcCAoZnJvbSB3d3cuYS1hLXAub3JnKSB5b3UgY2FuIHVzZSB0aGUgcmVjaXBlcyBpbiB0aGUKcnVudGltZS9zcGVsbC8/Py8gZGlyZWN0b3JpZXMuICBBYXAgd2lsbCB0YWtlIGNhcmUgb2YgZG93bmxvYWRpbmcgdGhlIGZpbGVzLAphcHBseSBwYXRjaGVzIG5lZWRlZCBmb3IgVmltIGFuZCBidWlsZCB0aGUgLnNwbCBmaWxlLgoKTWFrZSBzdXJlIHlvdXIgY3VycmVudCBsb2NhbGUgaXMgc2V0IHByb3Blcmx5LCBvdGhlcndpc2UgVmltIGRvZXNuJ3Qga25vdyB3aGF0CmNoYXJhY3RlcnMgYXJlIHVwcGVyL2xvd2VyIGNhc2UgbGV0dGVycy4gIElmIHRoZSBsb2NhbGUgaXNuJ3QgYXZhaWxhYmxlIChlLmcuLAp3aGVuIHVzaW5nIGFuIE1TLVdpbmRvd3MgY29kZXBhZ2Ugb24gVW5peCkgYWRkIHRhYmxlcyB0byB0aGUgLmFmZiBmaWxlCnxzcGVsbC1hZmZpeC1jaGFyc3wuICBJZiB0aGUgLmFmZiBmaWxlIGRvZXNuJ3QgZGVmaW5lIGEgdGFibGUgdGhlbiB0aGUgd29yZAp0YWJsZSBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBzcGVsbGluZyBpcyB1c2VkLiAgSWYgc3BlbGxpbmcgaXMgbm90IGFjdGl2ZQp0aGVuIFZpbSB3aWxsIHRyeSB0byBndWVzcy4KCgkJCQkJCQkqOm1rc3AqICo6bWtzcGVsbCoKOm1rc3BbZWxsXVshXSBbLWFzY2lpXSB7b3V0bmFtZX0ge2lubmFtZX0gLi4uCgkJCUdlbmVyYXRlIGEgVmltIHNwZWxsIGZpbGUgZnJvbSB3b3JkIGxpc3RzLiAgRXhhbXBsZTogPgoJCTpta3NwZWxsIC90bXAvbmwgbmxfTkwud29yZHMKPAkJCQkJCQkJKkU3NTEqCgkJCVdoZW4ge291dG5hbWV9IGVuZHMgaW4gIi5zcGwiIGl0IGlzIHVzZWQgYXMgdGhlIG91dHB1dAoJCQlmaWxlIG5hbWUuICBPdGhlcndpc2UgaXQgc2hvdWxkIGJlIGEgbGFuZ3VhZ2UgbmFtZSwKCQkJc3VjaCBhcyAiZW4iLCB3aXRob3V0IHRoZSByZWdpb24gbmFtZS4gIFRoZSBmaWxlCgkJCXdyaXR0ZW4gd2lsbCBiZSAie291dG5hbWV9LntlbmNvZGluZ30uc3BsIiwgd2hlcmUKCQkJe2VuY29kaW5nfSBpcyB0aGUgdmFsdWUgb2YgdGhlICdlbmNvZGluZycgb3B0aW9uLgoKCQkJV2hlbiB0aGUgb3V0cHV0IGZpbGUgYWxyZWFkeSBleGlzdHMgWyFdIG11c3QgYmUgdXNlZAoJCQl0byBvdmVyd3JpdGUgaXQuCgoJCQlXaGVuIHRoZSBbLWFzY2lpXSBhcmd1bWVudCBpcyBwcmVzZW50LCB3b3JkcyB3aXRoCgkJCW5vbi1hc2NpaSBjaGFyYWN0ZXJzIGFyZSBza2lwcGVkLiAgVGhlIHJlc3VsdGluZyBmaWxlCgkJCWVuZHMgaW4gImFzY2lpLnNwbCIuCgoJCQlUaGUgaW5wdXQgY2FuIGJlIHRoZSBNeXNwZWxsIGZvcm1hdCBmaWxlcyB7aW5uYW1lfS5hZmYKCQkJYW5kIHtpbm5hbWV9LmRpYy4gIElmIHtpbm5hbWV9LmFmZiBkb2VzIG5vdCBleGlzdCB0aGVuCgkJCXtpbm5hbWV9IGlzIHVzZWQgYXMgdGhlIGZpbGUgbmFtZSBvZiBhIHBsYWluIHdvcmQKCQkJbGlzdC4KCgkJCU11bHRpcGxlIHtpbm5hbWV9IGFyZ3VtZW50cyBjYW4gYmUgZ2l2ZW4gdG8gY29tYmluZQoJCQlyZWdpb25zIGludG8gb25lIFZpbSBzcGVsbCBmaWxlLiAgRXhhbXBsZTogPgoJCTpta3NwZWxsIH4vLnZpbS9zcGVsbC9lbiAvdG1wL2VuX1VTIC90bXAvZW5fQ0EgL3RtcC9lbl9BVQo8CQkJVGhpcyBjb21iaW5lcyB0aGUgRW5nbGlzaCB3b3JkIGxpc3RzIGZvciBVUywgQ0EgYW5kIEFVCgkJCWludG8gb25lIGVuLnNwbCBmaWxlLgoJCQlVcCB0byBlaWdodCByZWdpb25zIGNhbiBiZSBjb21iaW5lZC4gKkU3NTQqICpFNzU1KgoJCQlUaGUgUkVQIGFuZCBTQUwgaXRlbXMgb2YgdGhlIGZpcnN0IC5hZmYgZmlsZSB3aGVyZQoJCQl0aGV5IGFwcGVhciBhcmUgdXNlZC4gfHNwZWxsLVJFUHwgfHNwZWxsLVNBTHwKCgkJCVRoaXMgY29tbWFuZCB1c2VzIGEgbG90IG9mIG1lbW9yeSwgcmVxdWlyZWQgdG8gZmluZAoJCQl0aGUgb3B0aW1hbCB3b3JkIHRyZWUgKFBvbGlzaCwgSXRhbGlhbiBhbmQgSHVuZ2FyaWFuCgkJCXJlcXVpcmUgc2V2ZXJhbCBodW5kcmVkIE1ieXRlKS4gIFRoZSBmaW5hbCByZXN1bHQgd2lsbAoJCQliZSBtdWNoIHNtYWxsZXIsIGJlY2F1c2UgY29tcHJlc3Npb24gaXMgdXNlZC4gIFRvCgkJCWF2b2lkIHJ1bm5pbmcgb3V0IG9mIG1lbW9yeSBjb21wcmVzc2lvbiB3aWxsIGJlIGRvbmUKCQkJbm93IGFuZCB0aGVuLiAgVGhpcyBjYW4gYmUgdHVuZWQgd2l0aCB0aGUgJ21rc3BlbGxtZW0nCgkJCW9wdGlvbi4KCgkJCUFmdGVyIHRoZSBzcGVsbCBmaWxlIHdhcyB3cml0dGVuIGFuZCBpdCB3YXMgYmVpbmcgdXNlZAoJCQlpbiBhIGJ1ZmZlciBpdCB3aWxsIGJlIHJlbG9hZGVkIGF1dG9tYXRpY2FsbHkuCgo6bWtzcFtlbGxdIFstYXNjaWldIHtuYW1lfS57ZW5jfS5hZGQKCQkJTGlrZSAiOm1rc3BlbGwiIGFib3ZlLCB1c2luZyB7bmFtZX0ue2VuY30uYWRkIGFzIHRoZQoJCQlpbnB1dCBmaWxlIGFuZCBwcm9kdWNpbmcgYW4gb3V0cHV0IGZpbGUgaW4gdGhlIHNhbWUKCQkJZGlyZWN0b3J5IHRoYXQgaGFzICIuc3BsIiBhcHBlbmRlZC4KCjpta3NwW2VsbF0gWy1hc2NpaV0ge25hbWV9CgkJCUxpa2UgIjpta3NwZWxsIiBhYm92ZSwgdXNpbmcge25hbWV9IGFzIHRoZSBpbnB1dCBmaWxlCgkJCWFuZCBwcm9kdWNpbmcgYW4gb3V0cHV0IGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5CgkJCXRoYXQgaGFzICIue2VuY30uc3BsIiBhcHBlbmRlZC4KClZpbSB3aWxsIHJlcG9ydCB0aGUgbnVtYmVyIG9mIGR1cGxpY2F0ZSB3b3Jkcy4gIFRoaXMgbWlnaHQgYmUgYSBtaXN0YWtlIGluIHRoZQpsaXN0IG9mIHdvcmRzLiAgQnV0IHNvbWV0aW1lcyBpdCBpcyB1c2VkIHRvIGhhdmUgZGlmZmVyZW50IHByZWZpeGVzIGFuZApzdWZmaXhlcyBmb3IgdGhlIHNhbWUgYmFzaWMgd29yZCB0byBhdm9pZCB0aGVtIGNvbWJpbmluZyAoZS5nLiBDemVjaCB1c2VzCnRoaXMpLiAgSWYgeW91IHdhbnQgVmltIHRvIHJlcG9ydCBhbGwgZHVwbGljYXRlIHdvcmRzIHNldCB0aGUgJ3ZlcmJvc2UnCm9wdGlvbi4KClNpbmNlIHlvdSBtaWdodCB3YW50IHRvIGNoYW5nZSBhIE15c3BlbGwgd29yZCBsaXN0IGZvciB1c2Ugd2l0aCBWaW0gdGhlCmZvbGxvd2luZyBwcm9jZWR1cmUgaXMgcmVjb21tZW5kZWQ6CgoxLiBPYnRhaW4gdGhlIHh4X1lZLmFmZiBhbmQgeHhfWVkuZGljIGZpbGVzIGZyb20gTXlzcGVsbC4KMi4gTWFrZSBhIGNvcHkgb2YgdGhlc2UgZmlsZXMgdG8geHhfWVkub3JpZy5hZmYgYW5kIHh4X1lZLm9yaWcuZGljLgozLiBDaGFuZ2UgdGhlIHh4X1lZLmFmZiBhbmQgeHhfWVkuZGljIGZpbGVzIHRvIHJlbW92ZSBiYWQgd29yZHMsIGFkZCBtaXNzaW5nCiAgIHdvcmRzLCBkZWZpbmUgd29yZCBjaGFyYWN0ZXJzIHdpdGggRk9ML0xPVy9VUFAsIGV0Yy4gIFRoZSBkaXN0cmlidXRlZAogICAiKi5kaWZmIiBmaWxlcyBjYW4gYmUgdXNlZC4KNC4gU3RhcnQgVmltIHdpdGggdGhlIHJpZ2h0IGxvY2FsZSBhbmQgdXNlIHw6bWtzcGVsbHwgdG8gZ2VuZXJhdGUgdGhlIFZpbQogICBzcGVsbCBmaWxlLgo1LiBUcnkgb3V0IHRoZSBzcGVsbCBmaWxlIHdpdGggIjpzZXQgc3BlbGwgc3BlbGxsYW5nPXh4IiBpZiB5b3Ugd3JvdGUgaXQgaW4KICAgYSBzcGVsbCBkaXJlY3RvcnkgaW4gJ3J1bnRpbWVwYXRoJywgb3IgIjpzZXQgc3BlbGxsYW5nPXh4LmVuYy5zcGwiIGlmIHlvdQogICB3cm90ZSBpdCBzb21ld2hlcmUgZWxzZS4KCldoZW4gdGhlIE15c3BlbGwgZmlsZXMgYXJlIHVwZGF0ZWQgeW91IGNhbiBtZXJnZSB0aGUgZGlmZmVyZW5jZXM6CjEuIE9idGFpbiB0aGUgbmV3IE15c3BlbGwgZmlsZXMgYXMgeHhfWVkubmV3LmFmZiBhbmQgeHhfVVUubmV3LmRpYy4KMi4gVXNlIFZpbWRpZmYgdG8gc2VlIHdoYXQgY2hhbmdlZDogPgoJdmltZGlmZiB4eF9ZWS5vcmlnLmRpYyB4eF9ZWS5uZXcuZGljCjMuIFRha2Ugb3ZlciB0aGUgY2hhbmdlcyB5b3UgbGlrZSBpbiB4eF9ZWS5kaWMuCiAgIFlvdSBtYXkgYWxzbyBuZWVkIHRvIGNoYW5nZSB4eF9ZWS5hZmYuCjQuIFJlbmFtZSB4eF9ZWS5uZXcuZGljIHRvIHh4X1lZLm9yaWcuZGljIGFuZCB4eF9ZWS5uZXcuYWZmIHRvIHh4X1lZLm5ldy5hZmYuCgoKU1BFTEwgRklMRSBWRVJTSU9OUwkJCQkJKkU3NzAqICpFNzcxKiAqRTc3MioKClNwZWxsIGNoZWNraW5nIGlzIGEgcmVsYXRpdmVseSBuZXcgZmVhdHVyZSBpbiBWaW0sIHRodXMgaXQncyBwb3NzaWJsZSB0aGF0IHRoZQouc3BsIGZpbGUgZm9ybWF0IHdpbGwgYmUgY2hhbmdlZCB0byBzdXBwb3J0IG1vcmUgbGFuZ3VhZ2VzLiAgVmltIHdpbGwgY2hlY2sKdGhlIHZhbGlkaXR5IG9mIHRoZSBzcGVsbCBmaWxlIGFuZCByZXBvcnQgYW55dGhpbmcgd3JvbmcuCgoJRTc3MTogT2xkIHNwZWxsIGZpbGUsIG5lZWRzIHRvIGJlIHVwZGF0ZWQgfgpUaGlzIHNwZWxsIGZpbGUgaXMgb2xkZXIgdGhhbiB5b3VyIFZpbS4gIFlvdSBuZWVkIHRvIHVwZGF0ZSB0aGUgLnNwbCBmaWxlLgoKCUU3NzI6IFNwZWxsIGZpbGUgaXMgZm9yIG5ld2VyIHZlcnNpb24gb2YgVmltIH4KVGhpcyBtZWFucyB0aGUgc3BlbGwgZmlsZSB3YXMgbWFkZSBmb3IgYSBsYXRlciB2ZXJzaW9uIG9mIFZpbS4gIFlvdSBuZWVkIHRvCnVwZGF0ZSBWaW0uCgoJRTc3MDogVW5zdXBwb3J0ZWQgc2VjdGlvbiBpbiBzcGVsbCBmaWxlIH4KVGhpcyBtZWFucyB0aGUgc3BlbGwgZmlsZSB3YXMgbWFkZSBmb3IgYSBsYXRlciB2ZXJzaW9uIG9mIFZpbSBhbmQgY29udGFpbnMgYQpzZWN0aW9uIHRoYXQgaXMgcmVxdWlyZWQgZm9yIHRoZSBzcGVsbCBmaWxlIHRvIHdvcmsuICBJbiB0aGlzIGNhc2UgaXQncwpwcm9iYWJseSBhIGdvb2QgaWRlYSB0byB1cGdyYWRlIHlvdXIgVmltLgoKClNQRUxMIEZJTEUgRFVNUAoKSWYgZm9yIHNvbWUgcmVhc29uIHlvdSB3YW50IHRvIGNoZWNrIHdoYXQgd29yZHMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudGx5CnVzZWQgc3BlbGxpbmcgZmlsZXMsIHVzZSB0aGlzIGNvbW1hbmQ6CgoJCQkJCQkJKjpzcGVsbGR1bXAqICo6c3BlbGxkKgo6c3BlbGxkW3VtcF0JCU9wZW4gYSBuZXcgd2luZG93IGFuZCBmaWxsIGl0IHdpdGggYWxsIGN1cnJlbnRseSB2YWxpZAoJCQl3b3Jkcy4gIENvbXBvdW5kIHdvcmRzIGFyZSBub3QgaW5jbHVkZWQuCgkJCU5vdGU6IEZvciBzb21lIGxhbmd1YWdlcyB0aGUgcmVzdWx0IG1heSBiZSBlbm9ybW91cywKCQkJY2F1c2luZyBWaW0gdG8gcnVuIG91dCBvZiBtZW1vcnkuCgo6c3BlbGxkW3VtcF0hCQlMaWtlICI6c3BlbGxkdW1wIiBhbmQgaW5jbHVkZSB0aGUgd29yZCBjb3VudC4gIFRoaXMgaXMKCQkJdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgd29yZCB3YXMgZm91bmQgd2hpbGUKCQkJdXBkYXRpbmcgdGhlIHNjcmVlbi4gIFdvcmRzIHRoYXQgYXJlIGluIENPTU1PTiBpdGVtcwoJCQlnZXQgYSBzdGFydGluZyBjb3VudCBvZiAxMC4KClRoZSBmb3JtYXQgb2YgdGhlIHdvcmQgbGlzdCBpcyB1c2VkIHxzcGVsbC13b3JkbGlzdC1mb3JtYXR8LiAgWW91IHNob3VsZCBiZQphYmxlIHRvIHJlYWQgaXQgd2l0aCAiOm1rc3BlbGwiIHRvIGdlbmVyYXRlIG9uZSAuc3BsIGZpbGUgdGhhdCBpbmNsdWRlcyBhbGwKdGhlIHdvcmRzLgoKV2hlbiBhbGwgZW50cmllcyB0byAnc3BlbGxsYW5nJyB1c2UgdGhlIHNhbWUgcmVnaW9ucyBvciBubyByZWdpb25zIGF0IGFsbCB0aGVuCnRoZSByZWdpb24gaW5mb3JtYXRpb24gaXMgaW5jbHVkZWQgaW4gdGhlIGR1bXBlZCB3b3Jkcy4gIE90aGVyd2lzZSBvbmx5IHdvcmRzCmZvciB0aGUgY3VycmVudCByZWdpb24gYXJlIGluY2x1ZGVkIGFuZCBubyAiL3JlZ2lvbnMiIGxpbmUgaXMgZ2VuZXJhdGVkLgoKQ29tbWVudCBsaW5lcyB3aXRoIHRoZSBuYW1lIG9mIHRoZSAuc3BsIGZpbGUgYXJlIHVzZWQgYXMgYSBoZWFkZXIgYWJvdmUgdGhlCndvcmRzIHRoYXQgd2VyZSBnZW5lcmF0ZWQgZnJvbSB0aGF0IC5zcGwgZmlsZS4KCgpTUEVMTCBGSUxFIE1JU1NJTkcJCSpzcGVsbC1TcGVsbEZpbGVNaXNzaW5nKiAqc3BlbGxmaWxlLnZpbSoKCklmIHRoZSBzcGVsbCBmaWxlIGZvciB0aGUgbGFuZ3VhZ2UgeW91IGFyZSB1c2luZyBpcyBub3QgYXZhaWxhYmxlLCB5b3Ugd2lsbApnZXQgYW4gZXJyb3IgbWVzc2FnZS4gIEJ1dCBpZiB0aGUgInNwZWxsZmlsZS52aW0iIHBsdWdpbiBpcyBhY3RpdmUgaXQgd2lsbApvZmZlciB5b3UgdG8gZG93bmxvYWQgdGhlIHNwZWxsIGZpbGUuICBKdXN0IGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zLCBpdCB3aWxsCmFzayB5b3Ugd2hlcmUgdG8gd3JpdGUgdGhlIGZpbGUuCgpUaGUgcGx1Z2luIGhhcyBhIGRlZmF1bHQgcGxhY2Ugd2hlcmUgdG8gbG9vayBmb3Igc3BlbGwgZmlsZXMsIG9uIHRoZSBWaW0gZnRwCnNlcnZlci4gIElmIHlvdSB3YW50IHRvIHVzZSBhbm90aGVyIGxvY2F0aW9uIG9yIGFub3RoZXIgcHJvdG9jb2wsIHNldCB0aGUKZzpzcGVsbGZpbGVfVVJMIHZhcmlhYmxlIHRvIHRoZSBkaXJlY3RvcnkgdGhhdCBob2xkcyB0aGUgc3BlbGwgZmlsZXMuICBUaGUKfG5ldHJ3fCBwbHVnaW4gaXMgdXNlZCBmb3IgZ2V0dGluZyB0aGUgZmlsZSwgbG9vayB0aGVyZSBmb3IgdGhlIHNwZWNpZmljCnN5bnRheCBvZiB0aGUgVVJMLiAgRXhhbXBsZTogPgoJbGV0IGc6c3BlbGxmaWxlX1VSTCA9ICdodHRwOi8vZnRwLnZpbS5vcmcvdmltL3J1bnRpbWUvc3BlbGwnCllvdSBtYXkgbmVlZCB0byBlc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzLgoKVGhlIHBsdWdpbiB3aWxsIG9ubHkgYXNrIGFib3V0IGRvd25sb2FkaW5nIGEgbGFuZ3VhZ2Ugb25jZS4gIElmIHlvdSB3YW50IHRvCnRyeSBhZ2FpbiBhbnl3YXkgcmVzdGFydCBWaW0sIG9yIHNldCBnOnNwZWxsZmlsZV9VUkwgdG8gYW5vdGhlciB2YWx1ZSAoZS5nLiwKcHJlcGVuZCBhIHNwYWNlKS4KClRvIGF2b2lkIHVzaW5nIHRoZSAic3BlbGxmaWxlLnZpbSIgcGx1Z2luIGRvIHRoaXMgaW4geW91ciB2aW1yYyBmaWxlOiA+CgoJbGV0IGxvYWRlZF9zcGVsbGZpbGVfcGx1Z2luID0gMQoKSW5zdGVhZCBvZiB1c2luZyB0aGUgcGx1Z2luIHlvdSBjYW4gZGVmaW5lIGEgfFNwZWxsRmlsZU1pc3Npbmd8IGF1dG9jb21tYW5kIHRvCmhhbmRsZSB0aGUgbWlzc2luZyBmaWxlIHlvdXJzZWxmLiAgWW91IGNhbiB1c2UgaXQgbGlrZSB0aGlzOiA+CgoJOmF1IFNwZWxsRmlsZU1pc3NpbmcgKiBjYWxsIERvd25sb2FkX3NwZWxsX2ZpbGUoZXhwYW5kKCc8YW1hdGNoPicpKQoKVGh1cyB0aGUgPGFtYXRjaD4gaXRlbSBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgbGFuZ3VhZ2UuICBBbm90aGVyIGltcG9ydGFudAp2YWx1ZSBpcyAnZW5jb2RpbmcnLCBzaW5jZSBldmVyeSBlbmNvZGluZyBoYXMgaXRzIG93biBzcGVsbCBmaWxlLiAgV2l0aCB0d28KZXhjZXB0aW9uczoKLSBGb3IgSVNPLTg4NTktMTUgKGxhdGluOSkgdGhlIG5hbWUgImxhdGluMSIgaXMgdXNlZCAodGhlIGVuY29kaW5ncyBvbmx5CiAgZGlmZmVyIGluIGNoYXJhY3RlcnMgbm90IHVzZWQgaW4gZGljdGlvbmFyeSB3b3JkcykuCi0gVGhlIG5hbWUgImFzY2lpIiBtYXkgYWxzbyBiZSB1c2VkIGZvciBzb21lIGxhbmd1YWdlcyB3aGVyZSB0aGUgd29yZHMgdXNlCiAgb25seSBBU0NJSSBsZXR0ZXJzIGZvciBtb3N0IG9mIHRoZSB3b3Jkcy4KClRoZSBkZWZhdWx0ICJzcGVsbGZpbGUudmltIiBwbHVnaW4gdXNlcyB0aGlzIGF1dG9jb21tYW5kLCBpZiB5b3UgZGVmaW5lIHlvdXIKYXV0b2NvbW1hbmQgYWZ0ZXJ3YXJkcyB5b3UgbWF5IHdhbnQgdG8gdXNlICI6YXUhIFNwZWxsRmlsZU1pc3NpbmciIHRvIG92ZXJydWxlCml0LiAgSWYgeW91IGRlZmluZSB5b3VyIGF1dG9jb21tYW5kIGJlZm9yZSB0aGUgcGx1Z2luIGlzIGxvYWRlZCBpdCB3aWxsIG5vdGljZQp0aGlzIGFuZCBub3QgZG8gYW55dGhpbmcuCgkJCQkJCQkqRTc5NyoKTm90ZSB0aGF0IHRoZSBTcGVsbEZpbGVNaXNzaW5nIGF1dG9jb21tYW5kIG11c3Qgbm90IGNoYW5nZSBvciBkZXN0cm95IHRoZQpidWZmZXIgdGhlIHVzZXIgd2FzIGVkaXRpbmcuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gU3BlbGwgZmlsZSBmb3JtYXQJCQkJCSpzcGVsbC1maWxlLWZvcm1hdCoKClRoaXMgaXMgdGhlIGZvcm1hdCBvZiB0aGUgZmlsZXMgdGhhdCBhcmUgdXNlZCBieSB0aGUgcGVyc29uIHdobyBjcmVhdGVzIGFuZAptYWludGFpbnMgYSB3b3JkIGxpc3QuCgpOb3RlIHRoYXQgd2UgYXZvaWQgdGhlIHdvcmQgImRpY3Rpb25hcnkiIGhlcmUuICBUaGF0IGlzIGJlY2F1c2UgdGhlIGdvYWwgb2YKc3BlbGwgY2hlY2tpbmcgZGlmZmVycyBmcm9tIHdyaXRpbmcgYSBkaWN0aW9uYXJ5IChhcyBpbiB0aGUgYm9vaykuICBGb3IKc3BlbGxpbmcgd2UgbmVlZCBhIGxpc3Qgb2Ygd29yZHMgdGhhdCBhcmUgT0ssIHRodXMgc2hvdWxkIG5vdCBiZSBoaWdobGlnaHRlZC4KUGVyc29uIGFuZCBjb21wYW55IG5hbWVzIHdpbGwgbm90IGFwcGVhciBpbiBhIGRpY3Rpb25hcnksIGJ1dCBkbyBhcHBlYXIgaW4gYQp3b3JkIGxpc3QuICBBbmQgc29tZSBvbGQgd29yZHMgYXJlIHJhcmVseSB1c2VkIHdoaWxlIHRoZXkgYXJlIGNvbW1vbgptaXNzcGVsbGluZ3MuICBUaGVzZSBkbyBhcHBlYXIgaW4gYSBkaWN0aW9uYXJ5IGJ1dCBub3QgaW4gYSB3b3JkIGxpc3QuCgpUaGVyZSBhcmUgdHdvIGZvcm1hdHM6IEEgc3RyYWlnaHQgbGlzdCBvZiB3b3JkcyBhbmQgYSBsaXN0IHVzaW5nIGFmZml4CmNvbXByZXNzaW9uLiAgVGhlIGZpbGVzIHdpdGggYWZmaXggY29tcHJlc3Npb24gYXJlIHVzZWQgYnkgTXlzcGVsbCAoTW96aWxsYQphbmQgT3Blbk9mZmljZS5vcmcpLiAgVGhpcyByZXF1aXJlcyB0d28gZmlsZXMsIG9uZSB3aXRoIC5hZmYgYW5kIG9uZSB3aXRoIC5kaWMKZXh0ZW5zaW9uLgoKCkZPUk1BVCBPRiBTVFJBSUdIVCBXT1JEIExJU1QJCQkJKnNwZWxsLXdvcmRsaXN0LWZvcm1hdCoKClRoZSB3b3JkcyBtdXN0IGFwcGVhciBvbmUgcGVyIGxpbmUuICBUaGF0IGlzIGFsbCB0aGF0IGlzIHJlcXVpcmVkLgoKQWRkaXRpb25hbGx5IHRoZSBmb2xsb3dpbmcgaXRlbXMgYXJlIHJlY29nbml6ZWQ6CgotIEVtcHR5IGFuZCBibGFuayBsaW5lcyBhcmUgaWdub3JlZC4KCgkjIGNvbW1lbnQgfgotIExpbmVzIHN0YXJ0aW5nIHdpdGggYSAjIGFyZSBpZ25vcmVkIChjb21tZW50IGxpbmVzKS4KCgkvZW5jb2Rpbmc9dXRmLTggfgotIEEgbGluZSBzdGFydGluZyB3aXRoICIvZW5jb2Rpbmc9IiwgYmVmb3JlIGFueSB3b3JkLCBzcGVjaWZpZXMgdGhlIGVuY29kaW5nCiAgb2YgdGhlIGZpbGUuICBBZnRlciB0aGUgc2Vjb25kICc9JyBjb21lcyBhbiBlbmNvZGluZyBuYW1lLiAgVGhpcyB0ZWxscyBWaW0KICB0byBzZXR1cCBjb252ZXJzaW9uIGZyb20gdGhlIHNwZWNpZmllZCBlbmNvZGluZyB0byAnZW5jb2RpbmcnLiAgVGh1cyB5b3UgY2FuCiAgdXNlIG9uZSB3b3JkIGxpc3QgZm9yIHNldmVyYWwgdGFyZ2V0IGVuY29kaW5ncy4KCgkvcmVnaW9ucz11c2NhIH4KLSBBIGxpbmUgc3RhcnRpbmcgd2l0aCAiL3JlZ2lvbnM9IiBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBuYW1lcyB0aGF0IGFyZQogIHN1cHBvcnRlZC4gIEVhY2ggcmVnaW9uIG5hbWUgbXVzdCBiZSB0d28gQVNDSUkgbGV0dGVycy4gIFRoZSBmaXJzdCBvbmUgaXMKICByZWdpb24gMS4gIFRodXMgIi9yZWdpb25zPXVzY2EiIGhhcyByZWdpb24gMSAidXMiIGFuZCByZWdpb24gMiAiY2EiLgogIEluIGFuIGFkZGl0aW9uIHdvcmQgbGlzdCB0aGUgcmVnaW9uIG5hbWVzIHNob3VsZCBiZSBlcXVhbCB0byB0aGUgbWFpbiB3b3JkCiAgbGlzdCEKCi0gT3RoZXIgbGluZXMgc3RhcnRpbmcgd2l0aCAnLycgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiAgVGhlIG9uZXMgdGhhdAogIGFyZSBub3QgcmVjb2duaXplZCBhcmUgaWdub3JlZC4gIFlvdSBkbyBnZXQgYSB3YXJuaW5nIG1lc3NhZ2UsIHNvIHRoYXQgeW91CiAga25vdyBzb21ldGhpbmcgd29uJ3Qgd29yay4KCi0gQSAiLyIgbWF5IGZvbGxvdyB0aGUgd29yZCB3aXRoIHRoZSBmb2xsb3dpbmcgaXRlbXM6CiAgICA9CQlDYXNlIG11c3QgbWF0Y2ggZXhhY3RseS4KICAgID8JCVJhcmUgd29yZC4KICAgICEJCUJhZCAod3JvbmcpIHdvcmQuCiAgICBkaWdpdAlBIHJlZ2lvbiBpbiB3aGljaCB0aGUgd29yZCBpcyB2YWxpZC4gIElmIG5vIHJlZ2lvbnMgYXJlCgkJc3BlY2lmaWVkIHRoZSB3b3JkIGlzIHZhbGlkIGluIGFsbCByZWdpb25zLgoKRXhhbXBsZToKCgkjIFRoaXMgaXMgYW4gZXhhbXBsZSB3b3JkIGxpc3QJCWNvbW1lbnQKCS9lbmNvZGluZz1sYXRpbjEJCQllbmNvZGluZyBvZiB0aGUgZmlsZQoJL3JlZ2lvbnM9dXNjYWdiCQkJCXJlZ2lvbnMgInVzIiwgImNhIiBhbmQgImdiIgoJZXhhbXBsZQkJCQkJd29yZCBmb3IgYWxsIHJlZ2lvbnMKCWJsYWgvMTIJCQkJCXdvcmQgZm9yIHJlZ2lvbnMgInVzIiBhbmQgImNhIgoJdmltLyEJCQkJCWJhZCB3b3JkCglDYW1wYmVsbC8/MwkJCQlyYXJlIHdvcmQgaW4gcmVnaW9uIDMgImdiIgoJJ3MgbW9ybmluZ3MvPQkJCQlrZWVwLWNhc2Ugd29yZAoKTm90ZSB0aGF0IHdoZW4gIi89IiBpcyB1c2VkIHRoZSBzYW1lIHdvcmQgd2l0aCBhbGwgdXBwZXItY2FzZSBsZXR0ZXJzIGlzIG5vdAphY2NlcHRlZC4gIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gYSB3b3JkIHdpdGggbWl4ZWQgY2FzZSB0aGF0IGlzIGF1dG9tYXRpY2FsbHkKbWFya2VkIGFzIGtlZXAtY2FzZSwgdGhvc2Ugd29yZHMgbWF5IGFwcGVhciBpbiBhbGwgdXBwZXItY2FzZSBsZXR0ZXJzLgoKCkZPUk1BVCBXSVRIIC5BRkYgQU5EIC5ESUMgRklMRVMJCQkJKmFmZi1kaWMtZm9ybWF0KgoKVGhlcmUgYXJlIHR3byBmaWxlczogdGhlIGJhc2ljIHdvcmQgbGlzdCBhbmQgYW4gYWZmaXggZmlsZS4gIFRoZSBhZmZpeCBmaWxlCnNwZWNpZmllcyBzZXR0aW5ncyBmb3IgdGhlIGxhbmd1YWdlIGFuZCBjYW4gY29udGFpbiBhZmZpeGVzLiAgVGhlIGFmZml4ZXMgYXJlCnVzZWQgdG8gbW9kaWZ5IHRoZSBiYXNpYyB3b3JkcyB0byBnZXQgdGhlIGZ1bGwgd29yZCBsaXN0LiAgVGhpcyBzaWduaWZpY2FudGx5CnJlZHVjZXMgdGhlIG51bWJlciBvZiB3b3JkcywgZXNwZWNpYWxseSBmb3IgYSBsYW5ndWFnZSBsaWtlIFBvbGlzaC4gIFRoaXMgaXMKY2FsbGVkIGFmZml4IGNvbXByZXNzaW9uLgoKVGhlIGJhc2ljIHdvcmQgbGlzdCBhbmQgdGhlIGFmZml4IGZpbGUgYXJlIGNvbWJpbmVkIHdpdGggdGhlICI6bWtzcGVsbCIKY29tbWFuZCBhbmQgcmVzdWx0cyBpbiBhIGJpbmFyeSBzcGVsbCBmaWxlLiAgQWxsIHRoZSBwcmVwcm9jZXNzaW5nIGhhcyBiZWVuCmRvbmUsIHRodXMgdGhpcyBmaWxlIGxvYWRzIGZhc3QuICBUaGUgYmluYXJ5IHNwZWxsIGZpbGUgZm9ybWF0IGlzIGRlc2NyaWJlZCBpbgp0aGUgc291cmNlIGNvZGUgKHNyYy9zcGVsbC5jKS4gIEJ1dCBvbmx5IGRldmVsb3BlcnMgbmVlZCB0byBrbm93IGFib3V0IGl0LgoKVGhlIHByZXByb2Nlc3NpbmcgYWxzbyBhbGxvd3MgdXMgdG8gdGFrZSB0aGUgTXlzcGVsbCBsYW5ndWFnZSBmaWxlcyBhbmQgbW9kaWZ5CnRoZW0gYmVmb3JlIHRoZSBWaW0gd29yZCBsaXN0IGlzIG1hZGUuICBUaGUgdG9vbHMgZm9yIHRoaXMgY2FuIGJlIGZvdW5kIGluIHRoZQoic3JjL3NwZWxsIiBkaXJlY3RvcnkuCgpUaGUgZm9ybWF0IGZvciB0aGUgYWZmaXggYW5kIHdvcmQgbGlzdCBmaWxlcyBpcyBiYXNlZCBvbiB3aGF0IE15c3BlbGwgdXNlcwoodGhlIHNwZWxsIGNoZWNrZXIgb2YgTW96aWxsYSBhbmQgT3Blbk9mZmljZS5vcmcpLiAgQSBkZXNjcmlwdGlvbiBjYW4gYmUgZm91bmQKaGVyZToKCWh0dHA6Ly9saW5ndWNvbXBvbmVudC5vcGVub2ZmaWNlLm9yZy9hZmZpeC5yZWFkbWUgfgpOb3RlIHRoYXQgYWZmaXhlcyBhcmUgY2FzZSBzZW5zaXRpdmUsIHRoaXMgaXNuJ3Qgb2J2aW91cyBmcm9tIHRoZSBkZXNjcmlwdGlvbi4KClZpbSBzdXBwb3J0cyBxdWl0ZSBhIGZldyBleHRyYXMuICBUaGV5IGFyZSBkZXNjcmliZWQgYmVsb3cgfHNwZWxsLWFmZml4LXZpbXwuCkF0dGVtcHRzIGhhdmUgYmVlbiBtYWRlIHRvIGtlZXAgdGhpcyBjb21wYXRpYmxlIHdpdGggb3RoZXIgc3BlbGwgY2hlY2tlcnMsIHNvCnRoYXQgdGhlIHNhbWUgZmlsZXMgY2FuIG9mdGVuIGJlIHVzZWQuICBPbmUgb3RoZXIgcHJvamVjdCB0aGF0IG9mZmVycyBtb3JlCnRoYW4gTXlzcGVsbCBpcyBIdW5zcGVsbCAoIGh0dHA6Ly9odW5zcGVsbC5zZi5uZXQgKS4KCgpXT1JEIExJU1QgRk9STUFUCQkJCSpzcGVsbC1kaWMtZm9ybWF0KgoKQSBzaG9ydCBleGFtcGxlLCB3aXRoIGxpbmUgbnVtYmVyczoKCgkxCTEyMzQgfgoJMglhYW4gfgoJMwlBbHMgfgoJNAlFdHRlbi1MZXVyIH4KCTUJZXQgYWwuIH4KCTYJJ3MtR3JhdmVuaGFnZSB+Cgk3CSdzLUdyYXZlbmhhYWdzIH4KCTgJIyB3b3JkIHRoYXQgZGlmZmVycyBiZXR3ZWVuIHJlZ2lvbnMgfgoJOQlrYWRvLzEgfgoJMTAJY2FkZWF1LzIgfgoJMTEJVENQLElQIH4KCTEyCS90aGUgUyBhZmZpeCBtYXkgYWRkIGEgJ3MnIH4KCTEzCWJlZGVsL1MgfgoKVGhlIGZpcnN0IGxpbmUgY29udGFpbnMgdGhlIG51bWJlciBvZiB3b3Jkcy4gIFZpbSBpZ25vcmVzIGl0LCBidXQgeW91IGRvIGdldAphbiBlcnJvciBtZXNzYWdlIGlmIGl0J3Mgbm90IHRoZXJlLiAgKkU3NjAqCgpXaGF0IGZvbGxvd3MgaXMgb25lIHdvcmQgcGVyIGxpbmUuICBXaGl0ZSBzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIGlzCmlnbm9yZWQsIGFsbCBvdGhlciB3aGl0ZSBzcGFjZSBtYXR0ZXJzLiAgVGhlIGVuY29kaW5nIGlzIHNwZWNpZmllZCBpbiB0aGUKYWZmaXggZmlsZSB8c3BlbGwtU0VUfC4KCkNvbW1lbnQgbGluZXMgc3RhcnQgd2l0aCAnIycgb3IgJy8nLiAgU2VlIHRoZSBleGFtcGxlIGxpbmVzIDggYW5kIDEyLiAgTm90ZQp0aGF0IHB1dHRpbmcgYSBjb21tZW50IGFmdGVyIGEgd29yZCBpcyBOT1QgYWxsb3dlZDoKCgkJc29tZXdvcmQgICAjIGNvbW1lbnQgdGhhdCBjYXVzZXMgYW4gZXJyb3IhIH4KCkFmdGVyIHRoZSB3b3JkIHRoZXJlIGlzIGFuIG9wdGlvbmFsIHNsYXNoIGFuZCBmbGFncy4gIE1vc3Qgb2YgdGhlc2UgZmxhZ3MgYXJlCmxldHRlcnMgdGhhdCBpbmRpY2F0ZSB0aGUgYWZmaXhlcyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggdGhpcyB3b3JkLiAgVGhlc2UgYXJlCnNwZWNpZmllZCB3aXRoIFNGWCBhbmQgUEZYIGxpbmVzIGluIHRoZSAuYWZmIGZpbGUsIHNlZSB8c3BlbGwtU0ZYfCBhbmQKfHNwZWxsLVBGWHwuICBWaW0gYWxsb3dzIHVzaW5nIG90aGVyIGZsYWcgdHlwZXMgd2l0aCB0aGUgRkxBRyBpdGVtIGluIHRoZQphZmZpeCBmaWxlIHxzcGVsbC1GTEFHfC4KCldoZW4gdGhlIHdvcmQgb25seSBoYXMgbG93ZXItY2FzZSBsZXR0ZXJzIGl0IHdpbGwgYWxzbyBtYXRjaCB3aXRoIHRoZSB3b3JkCnN0YXJ0aW5nIHdpdGggYW4gdXBwZXItY2FzZSBsZXR0ZXIuCgpXaGVuIHRoZSB3b3JkIGluY2x1ZGVzIGFuIHVwcGVyLWNhc2UgbGV0dGVyLCB0aGlzIG1lYW5zIHRoZSB1cHBlci1jYXNlIGxldHRlcgppcyByZXF1aXJlZCBhdCB0aGlzIHBvc2l0aW9uLiAgVGhlIHNhbWUgd29yZCB3aXRoIGEgbG93ZXItY2FzZSBsZXR0ZXIgYXQgdGhpcwpwb3NpdGlvbiB3aWxsIG5vdCBtYXRjaC4gV2hlbiBzb21lIG9mIHRoZSBvdGhlciBsZXR0ZXJzIGFyZSB1cHBlci1jYXNlIGl0IHdpbGwKbm90IG1hdGNoIGVpdGhlci4KClRoZSB3b3JkIHdpdGggYWxsIHVwcGVyLWNhc2UgY2hhcmFjdGVycyB3aWxsIGFsd2F5cyBiZSBPSywKCgl3b3JkIGxpc3QJbWF0Y2hlcwkJCWRvZXMgbm90IG1hdGNoIH4KCWFscwkJYWxzIEFscyBBTFMJCUFMcyBBbFMgYUxzIGFMUwoJQWxzCQlBbHMgIEFMUwkJYWxzIEFMcyBBbFMgYUxzIGFMUwoJQUxTCQlBTFMJCQlhbHMgQWxzIEFMcyBBbFMgYUxzIGFMUwoJQWxTCQlBbFMgQUxTCQkJYWxzIEFscyBBTHMgYUxzIGFMUwoKVGhlIEtFRVBDQVNFIGFmZml4IElEIGNhbiBiZSB1c2VkIHRvIHNwZWNpZmljYWxseSBtYXRjaCBhIHdvcmQgd2l0aCBpZGVudGljYWwKY2FzZSBvbmx5LCBzZWUgYmVsb3cgfHNwZWxsLUtFRVBDQVNFfC4KCk5vdGU6IGluIGxpbmUgNSB0byA3IG5vbi13b3JkIGNoYXJhY3RlcnMgYXJlIHVzZWQuICBZb3UgY2FuIGluY2x1ZGUgYW55CmNoYXJhY3RlciBpbiBhIHdvcmQuICBXaGVuIGNoZWNraW5nIHRoZSB0ZXh0IGEgd29yZCBzdGlsbCBvbmx5IG1hdGNoZXMgd2hlbiBpdAphcHBlYXJzIHdpdGggYSBub24td29yZCBjaGFyYWN0ZXIgYmVmb3JlIGFuZCBhZnRlciBpdC4gIEZvciBNeXNwZWxsIGEgd29yZApzdGFydGluZyB3aXRoIGEgbm9uLXdvcmQgY2hhcmFjdGVyIHByb2JhYmx5IHdvbid0IHdvcmsuCgpJbiBsaW5lIDEyIHRoZSB3b3JkICJUQ1AvSVAiIGlzIGRlZmluZWQuICBTaW5jZSB0aGUgc2xhc2ggaGFzIGEgc3BlY2lhbAptZWFuaW5nIHRoZSBjb21tYSBpcyB1c2VkIGluc3RlYWQuICBUaGlzIGlzIGRlZmluZWQgd2l0aCB0aGUgU0xBU0ggaXRlbSBpbiB0aGUKYWZmaXggZmlsZSwgc2VlIHxzcGVsbC1TTEFTSHwuICBOb3RlIHRoYXQgd2l0aG91dCB0aGlzIFNMQVNIIGl0ZW0gdGhlIHdvcmQKd2lsbCBiZSAiVENQLElQIi4KCgpBRkZJWCBGSUxFIEZPUk1BVAkJCSpzcGVsbC1hZmYtZm9ybWF0KiAqc3BlbGwtYWZmaXgtdmltKgoKCQkJCQkJCSpzcGVsbC1hZmZpeC1jb21tZW50KgpDb21tZW50IGxpbmVzIGluIHRoZSAuYWZmIGZpbGUgc3RhcnQgd2l0aCBhICcjJzoKCgkjIGNvbW1lbnQgbGluZSB+CgpXaXRoIHNvbWUgaXRlbXMgaXQncyBhbHNvIHBvc3NpYmxlIHRvIHB1dCBhIGNvbW1lbnQgYWZ0ZXIgaXQsIGJ1dCB0aGlzIGlzbid0CnN1cHBvcnRlZCBpbiBnZW5lcmFsLgoKCkVOQ09ESU5HCQkJCQkJCSpzcGVsbC1TRVQqCgpUaGUgYWZmaXggZmlsZSBjYW4gYmUgaW4gYW55IGVuY29kaW5nIHRoYXQgaXMgc3VwcG9ydGVkIGJ5ICJpY29udiIuICBIb3dldmVyLAppbiBzb21lIGNhc2VzIHRoZSBjdXJyZW50IGxvY2FsZSBzaG91bGQgYWxzbyBiZSBzZXQgcHJvcGVybHkgYXQgdGhlIHRpbWUKfDpta3NwZWxsfCBpcyBpbnZva2VkLiAgQWRkaW5nIEZPTC9MT1cvVVBQIGxpbmVzIHJlbW92ZXMgdGhpcyByZXF1aXJlbWVudAp8c3BlbGwtRk9MfC4KClRoZSBlbmNvZGluZyBzaG91bGQgYmUgc3BlY2lmaWVkIGJlZm9yZSBhbnl0aGluZyB3aGVyZSB0aGUgZW5jb2RpbmcgbWF0dGVycy4KVGhlIGVuY29kaW5nIGFwcGxpZXMgYm90aCB0byB0aGUgYWZmaXggZmlsZSBhbmQgdGhlIGRpY3Rpb25hcnkgZmlsZS4gIEl0IGlzCmRvbmUgd2l0aCBhIFNFVCBsaW5lOgoKCVNFVCB1dGYtOCB+CgpUaGUgZW5jb2RpbmcgY2FuIGJlIGRpZmZlcmVudCBmcm9tIHRoZSB2YWx1ZSBvZiB0aGUgJ2VuY29kaW5nJyBvcHRpb24gYXQgdGhlCnRpbWUgIjpta3NwZWxsIiBpcyB1c2VkLiAgVmltIHdpbGwgdGhlbiBjb252ZXJ0IGV2ZXJ5dGhpbmcgdG8gJ2VuY29kaW5nJyBhbmQKZ2VuZXJhdGUgYSBzcGVsbCBmaWxlIGZvciAnZW5jb2RpbmcnLiAgSWYgc29tZSBvZiB0aGUgdXNlZCBjaGFyYWN0ZXJzIHRvIG5vdApmaXQgaW4gJ2VuY29kaW5nJyB5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgbWVzc2FnZS4KCQkJCQkJCSpzcGVsbC1hZmZpeC1tYnl0ZSoKV2hlbiB1c2luZyBhIG11bHRpLWJ5dGUgZW5jb2RpbmcgaXQncyBwb3NzaWJsZSB0byB1c2UgbW9yZSBkaWZmZXJlbnQgYWZmaXgKZmxhZ3MuICBCdXQgTXlzcGVsbCBkb2Vzbid0IHN1cHBvcnQgdGhhdCwgdGh1cyB5b3UgbWF5IG5vdCB3YW50IHRvIHVzZSBpdAphbnl3YXkuICBGb3IgY29tcGF0aWJpbGl0eSB1c2UgYW4gOC1iaXQgZW5jb2RpbmcuCgoKSU5GT1JNQVRJT04KClRoZXNlIGVudHJpZXMgaW4gdGhlIGFmZml4IGZpbGUgY2FuIGJlIHVzZWQgdG8gYWRkIGluZm9ybWF0aW9uIHRvIHRoZSBzcGVsbApmaWxlLiAgVGhlcmUgYXJlIG5vIHJlc3RyaWN0aW9ucyBvbiB0aGUgZm9ybWF0LCBidXQgdGhleSBzaG91bGQgYmUgaW4gdGhlCnJpZ2h0IGVuY29kaW5nLgoKCQkJCSpzcGVsbC1OQU1FKiAqc3BlbGwtVkVSU0lPTiogKnNwZWxsLUhPTUUqCgkJCQkqc3BlbGwtQVVUSE9SKiAqc3BlbGwtRU1BSUwqICpzcGVsbC1DT1BZUklHSFQqCglOQU1FCQlOYW1lIG9mIHRoZSBsYW5ndWFnZQoJVkVSU0lPTgkJMS4wLjEgIHdpdGggZml4ZXMKCUhPTUUJCWh0dHA6Ly93d3cubXlob21lLmV1CglBVVRIT1IJCUpvaG4gRG9lCglFTUFJTAkJam9obiBBVCBEb2UgRE9UIG5ldAoJQ09QWVJJR0hUCUxHUEwKClRoZXNlIGZpZWxkcyBhcmUgcHV0IGluIHRoZSAuc3BsIGZpbGUgYXMtaXMuICBUaGUgfDpzcGVsbGluZm98IGNvbW1hbmQgY2FuIGJlCnVzZWQgdG8gdmlldyB0aGUgaW5mby4KCgkJCQkJCQkqOnNwZWxsaW5mbyogKjpzcGVsbGkqCjpzcGVsbGlbbmZvXQkJRGlzcGxheSB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVsbCBmaWxlKHMpIHVzZWQgZm9yCgkJCXRoZSBjdXJyZW50IGJ1ZmZlci4KCgpDSEFSQUNURVIgVEFCTEVTCgkJCQkJCQkqc3BlbGwtYWZmaXgtY2hhcnMqCldoZW4gdXNpbmcgYW4gOC1iaXQgZW5jb2RpbmcgdGhlIGFmZml4IGZpbGUgc2hvdWxkIGRlZmluZSB3aGF0IGNoYXJhY3RlcnMgYXJlCndvcmQgY2hhcmFjdGVycy4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgc3lzdGVtIHdoZXJlICI6bWtzcGVsbCIgaXMgdXNlZCBtYXkgbm90CnN1cHBvcnQgYSBsb2NhbGUgd2l0aCB0aGlzIGVuY29kaW5nIGFuZCBpc2FscGhhKCkgd29uJ3Qgd29yay4gIEZvciBleGFtcGxlCndoZW4gdXNpbmcgImNwMTI1MCIgb24gVW5peC4KCQkJCQkJKkU3NjEqICpFNzYyKiAqc3BlbGwtRk9MKgoJCQkJCQkqc3BlbGwtTE9XKiAqc3BlbGwtVVBQKgpUaHJlZSBsaW5lcyBpbiB0aGUgYWZmaXggZmlsZSBhcmUgbmVlZGVkLiAgU2ltcGxpc3RpYyBleGFtcGxlOgoKCUZPTCAg4evxIH4KCUxPVyAg4evxIH4KCVVQUCAgwcvRIH4KCkFsbCB0aHJlZSBsaW5lcyBtdXN0IGhhdmUgZXhhY3RseSB0aGUgc2FtZSBudW1iZXIgb2YgY2hhcmFjdGVycy4KClRoZSAiRk9MIiBsaW5lIHNwZWNpZmllcyB0aGUgY2FzZS1mb2xkZWQgY2hhcmFjdGVycy4gIFRoZXNlIGFyZSB1c2VkIHRvCmNvbXBhcmUgd29yZHMgd2hpbGUgaWdub3JpbmcgY2FzZS4gIEZvciBtb3N0IGVuY29kaW5ncyB0aGlzIGlzIGlkZW50aWNhbCB0bwp0aGUgbG93ZXIgY2FzZSBsaW5lLgoKVGhlICJMT1ciIGxpbmUgc3BlY2lmaWVzIHRoZSBjaGFyYWN0ZXJzIGluIGxvd2VyLWNhc2UuICBNb3N0bHkgaXQncyBlcXVhbCB0bwp0aGUgIkZPTCIgbGluZS4KClRoZSAiVVBQIiBsaW5lIHNwZWNpZmllcyB0aGUgY2hhcmFjdGVycyB3aXRoIHVwcGVyLWNhc2UuICBUaGF0IGlzLCBhIGNoYXJhY3RlcgppcyB1cHBlci1jYXNlIHdoZXJlIGl0J3MgZGlmZmVyZW50IGZyb20gdGhlIGNoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbgoiRk9MIi4KCkFuIGV4Y2VwdGlvbiBpcyBtYWRlIGZvciB0aGUgR2VybWFuIHNoYXJwIHMg3y4gIFRoZSB1cHBlci1jYXNlIHZlcnNpb24gaXMKIlNTIi4gIEluIHRoZSBGT0wvTE9XL1VQUCBsaW5lcyBpdCBzaG91bGQgYmUgaW5jbHVkZWQsIHNvIHRoYXQgaXQncyByZWNvZ25pemVkCmFzIGEgd29yZCBjaGFyYWN0ZXIsIGJ1dCB1c2UgdGhlIN8gY2hhcmFjdGVyIGluIGFsbCB0aHJlZS4KCkFTQ0lJIGNoYXJhY3RlcnMgc2hvdWxkIGJlIG9taXR0ZWQsIFZpbSBhbHdheXMgaGFuZGxlcyB0aGVzZSBpbiB0aGUgc2FtZSB3YXkuCldoZW4gdGhlIGVuY29kaW5nIGlzIFVURi04IG5vIHdvcmQgY2hhcmFjdGVycyBuZWVkIHRvIGJlIHNwZWNpZmllZC4KCgkJCQkJCQkqRTc2MyoKVmltIGFsbG93cyB5b3UgdG8gdXNlIHNwZWxsIGNoZWNraW5nIGZvciBzZXZlcmFsIGxhbmd1YWdlcyBpbiB0aGUgc2FtZSBmaWxlLgpZb3UgY2FuIGxpc3QgdGhlbSBpbiB0aGUgJ3NwZWxsbGFuZycgb3B0aW9uLiAgQXMgYSBjb25zZXF1ZW5jZSBhbGwgc3BlbGwgZmlsZXMKZm9yIHRoZSBzYW1lIGVuY29kaW5nIG11c3QgdXNlIHRoZSBzYW1lIHdvcmQgY2hhcmFjdGVycywgb3RoZXJ3aXNlIHRoZXkgY2FuJ3QKYmUgY29tYmluZWQgd2l0aG91dCBlcnJvcnMuICBJZiB5b3UgZ2V0IGEgd2FybmluZyB0aGF0IHRoZSB3b3JkIHRhYmxlcyBkaWZmZXIKeW91IG1heSBuZWVkIHRvIGdlbmVyYXRlIHRoZSAuc3BsIGZpbGUgYWdhaW4gd2l0aCB8Om1rc3BlbGx8LiAgQ2hlY2sgdGhlIEZPTCwKTE9XIGFuZCBVUFAgbGluZXMgaW4gdGhlIHVzZWQgLmFmZiBmaWxlLgoKVGhlIFhYLmFzY2lpLnNwbCBzcGVsbCBmaWxlIGdlbmVyYXRlZCB3aXRoIHRoZSAiLWFzY2lpIiBhcmd1bWVudCB3aWxsIG5vdApjb250YWluIHRoZSB0YWJsZSB3aXRoIGNoYXJhY3RlcnMsIHNvIHRoYXQgaXQgY2FuIGJlIGNvbWJpbmUgd2l0aCBzcGVsbCBmaWxlcwpmb3IgYW55IGVuY29kaW5nLiAgVGhlIC5hZGQuc3BsIGZpbGVzIGFsc28gZG8gbm90IGNvbnRhaW4gdGhlIHRhYmxlLgoKCk1JRC1XT1JEIENIQVJBQ1RFUlMKCQkJCQkJCSpzcGVsbC1taWR3b3JkKgpTb21lIGNoYXJhY3RlcnMgYXJlIG9ubHkgdG8gYmUgY29uc2lkZXJlZCB3b3JkIGNoYXJhY3RlcnMgaWYgdGhleSBhcmUgdXNlZCBpbgpiZXR3ZWVuIHR3byBvcmRpbmFyeSB3b3JkIGNoYXJhY3RlcnMuICBBbiBleGFtcGxlIGlzIHRoZSBzaW5nbGUgcXVvdGU6IEl0IGlzCm9mdGVuIHVzZWQgdG8gcHV0IHRleHQgaW4gcXVvdGVzLCB0aHVzIGl0IGNhbid0IGJlIHJlY29nbml6ZWQgYXMgYSB3b3JkCmNoYXJhY3RlciwgYnV0IHdoZW4gaXQgYXBwZWFycyBpbiBiZXR3ZWVuIHdvcmQgY2hhcmFjdGVycyBpdCBtdXN0IGJlIHBhcnQgb2YKdGhlIHdvcmQuICBUaGlzIGlzIG5lZWRlZCB0byBkZXRlY3QgYSBzcGVsbGluZyBlcnJvciBzdWNoIGFzIHRoZXknYXJlLiAgVGhhdApzaG91bGQgYmUgdGhleSdyZSwgYnV0IHNpbmNlICJ0aGV5IiBhbmQgImFyZSIgYXJlIHdvcmRzIHRoZW1zZWx2ZXMgdGhhdCB3b3VsZApnbyB1bm5vdGljZWQuCgpUaGVzZSBjaGFyYWN0ZXJzIGFyZSBkZWZpbmVkIHdpdGggTUlEV09SRCBpbiB0aGUgLmFmZiBmaWxlLiAgRXhhbXBsZToKCglNSURXT1JECSctIH4KCgpGTEFHIFRZUEVTCQkJCQkJKnNwZWxsLUZMQUcqCgpGbGFncyBhcmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBhZmZpeGVzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBhIHdvcmQgYW5kIGZvcgpvdGhlciBwcm9wZXJ0aWVzIG9mIHRoZSB3b3JkLiAgTm9ybWFsbHkgc2luZ2xlLWNoYXJhY3RlciBmbGFncyBhcmUgdXNlZC4gIFRoaXMKbGltaXRzIHRoZSBudW1iZXIgb2YgcG9zc2libGUgZmxhZ3MsIGVzcGVjaWFsbHkgZm9yIDgtYml0IGVuY29kaW5ncy4gIFRoZSBGTEFHCml0ZW0gY2FuIGJlIHVzZWQgaWYgbW9yZSBhZmZpeGVzIGFyZSB0byBiZSB1c2VkLiAgUG9zc2libGUgdmFsdWVzOgoKCUZMQUcgbG9uZwl1c2UgdHdvLWNoYXJhY3RlciBmbGFncwoJRkxBRyBudW0JdXNlIG51bWJlcnMsIGZyb20gMSB1cCB0byA2NTAwMAoJRkxBRyBjYXBsb25nCXVzZSBvbmUtY2hhcmFjdGVyIGZsYWdzIHdpdGhvdXQgQS1aIGFuZCB0d28tY2hhcmFjdGVyCgkJCWZsYWdzIHRoYXQgc3RhcnQgd2l0aCBBLVoKCldpdGggIkZMQUcgbnVtIiB0aGUgbnVtYmVycyBpbiBhIGxpc3Qgb2YgYWZmaXhlcyBuZWVkIHRvIGJlIHNlcGFyYXRlZCB3aXRoIGEKY29tbWE6ICIyMzQsMjE0MywxNDM1Ii4gIFRoaXMgbWV0aG9kIGlzIGluZWZmaWNpZW50LCBidXQgdXNlZnVsIGlmIHRoZSBmaWxlIGlzCmdlbmVyYXRlZCB3aXRoIGEgcHJvZ3JhbS4KCldoZW4gdXNpbmcgImNhcGxvbmciIHRoZSB0d28tY2hhcmFjdGVyIGZsYWdzIGFsbCBzdGFydCB3aXRoIGEgY2FwaXRhbDogIkFhIiwKIkIxIiwgIkJCIiwgZXRjLiAgVGhpcyBpcyB1c2VmdWwgdG8gdXNlIG9uZS1jaGFyYWN0ZXIgZmxhZ3MgZm9yIHRoZSBtb3N0CmNvbW1vbiBpdGVtcyBhbmQgdHdvLWNoYXJhY3RlciBmbGFncyBmb3IgdW5jb21tb24gaXRlbXMuCgpOb3RlOiBXaGVuIHVzaW5nIHV0Zi04IG9ubHkgY2hhcmFjdGVycyB1cCB0byA2NTAwMCBtYXkgYmUgdXNlZCBmb3IgZmxhZ3MuCgoKQUZGSVhFUwoJCQkJCSAgICAqc3BlbGwtUEZYKiAqc3BlbGwtU0ZYKgpUaGUgdXN1YWwgUEZYIChwcmVmaXgpIGFuZCBTRlggKHN1ZmZpeCkgbGluZXMgYXJlIHN1cHBvcnRlZCAoc2VlIHRoZSBNeXNwZWxsCmRvY3VtZW50YXRpb24gb3IgdGhlIEFzcGVsbCBtYW51YWw6Cmh0dHA6Ly9hc3BlbGwubmV0L21hbi1odG1sL0FmZml4LUNvbXByZXNzaW9uLmh0bWwpLgoKU3VtbWFyeToKCVNGWCBMIFkgMiB+CglTRlggTCAwIHJlIFteeF0gfgoJU0ZYIEwgMCBybyB4IH4KClRoZSBmaXJzdCBsaW5lIGlzIGEgaGVhZGVyIGFuZCBoYXMgZm91ciBmaWVsZHM6CglTRlgge2ZsYWd9IHtjb21iaW5lfSB7Y291bnR9Cgp7ZmxhZ30JCVRoZSBuYW1lIHVzZWQgZm9yIHRoZSBzdWZmaXguICBNb3N0bHkgaXQncyBhIHNpbmdsZSBsZXR0ZXIsCgkJYnV0IG90aGVyIGNoYXJhY3RlcnMgY2FuIGJlIHVzZWQsIHNlZSB8c3BlbGwtRkxBR3wuCgp7Y29tYmluZX0JQ2FuIGJlICdZJyBvciAnTicuICBXaGVuICdZJyB0aGVuIHRoZSB3b3JkIHBsdXMgc3VmZml4IGNhbgoJCWFsc28gaGF2ZSBhIHByZWZpeC4gIFdoZW4gJ04nIHRoZW4gYSBwcmVmaXggaXMgbm90IGFsbG93ZWQuCgp7Y291bnR9CQlUaGUgbnVtYmVyIG9mIGxpbmVzIGZvbGxvd2luZy4gIElmIHRoaXMgaXMgd3JvbmcgeW91IHdpbGwgZ2V0CgkJYW4gZXJyb3IgbWVzc2FnZS4KCkZvciBQRlggdGhlIGZpZWxkcyBhcmUgZXhhY3RseSB0aGUgc2FtZS4KClRoZSBiYXNpYyBmb3JtYXQgZm9yIHRoZSBmb2xsb3dpbmcgbGluZXMgaXM6CglTRlgge2ZsYWd9IHtzdHJpcH0ge2FkZH0ge2NvbmRpdGlvbn0ge2V4dHJhfQoKe2ZsYWd9CQlNdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSB7ZmxhZ30gdXNlZCBpbiB0aGUgZmlyc3QgbGluZS4KCntzdHJpcH0JCUNoYXJhY3RlcnMgcmVtb3ZlZCBmcm9tIHRoZSBiYXNpYyB3b3JkLiAgVGhlcmUgaXMgbm8gY2hlY2sgaWYKCQl0aGUgY2hhcmFjdGVycyBhcmUgYWN0dWFsbHkgdGhlcmUsIG9ubHkgdGhlIGxlbmd0aCBpcyB1c2VkIChpbgoJCWJ5dGVzKS4gIFRoaXMgYmV0dGVyIG1hdGNoIHRoZSB7Y29uZGl0aW9ufSwgb3RoZXJ3aXNlIHN0cmFuZ2UKCQl0aGluZ3MgbWF5IGhhcHBlbi4gIElmIHRoZSB7c3RyaXB9IGxlbmd0aCBpcyBlcXVhbCB0byBvcgoJCWxvbmdlciB0aGFuIHRoZSBiYXNpYyB3b3JkIHRoZSBzdWZmaXggd29uJ3QgYmUgdXNlZC4KCQlXaGVuIHtzdHJpcH0gaXMgMCAoemVybykgdGhlbiBub3RoaW5nIGlzIHN0cmlwcGVkLgoKe2FkZH0JCUNoYXJhY3RlcnMgYWRkZWQgdG8gdGhlIGJhc2ljIHdvcmQsIGFmdGVyIHJlbW92aW5nIHtzdHJpcH0uCgkJT3B0aW9uYWxseSB0aGVyZSBpcyBhICcvJyBmb2xsb3dlZCBieSBmbGFncy4gIFRoZSBmbGFncyBhcHBseQoJCXRvIHRoZSB3b3JkIHBsdXMgYWZmaXguICBTZWUgfHNwZWxsLWFmZml4LWZsYWdzfAoKe2NvbmRpdGlvbn0JQSBzaW1wbGlzdGljIHBhdHRlcm4uICBPbmx5IHdoZW4gdGhpcyBtYXRjaGVzIHdpdGggYSBiYXNpYwoJCXdvcmQgd2lsbCB0aGUgc3VmZml4IGJlIHVzZWQgZm9yIHRoYXQgd29yZC4gIFRoaXMgaXMgbm9ybWFsbHkKCQlmb3IgdXNpbmcgb25lIHN1ZmZpeCBsZXR0ZXIgd2l0aCBkaWZmZXJlbnQge2FkZH0gYW5kIHtzdHJpcH0KCQlmaWVsZHMgZm9yIHdvcmRzIHdpdGggZGlmZmVyZW50IGVuZGluZ3MuCgkJV2hlbiB7Y29uZGl0aW9ufSBpcyBhIC4gKGRvdCkgdGhlcmUgaXMgbm8gY29uZGl0aW9uLgoJCVRoZSBwYXR0ZXJuIG1heSBjb250YWluOgoJCS0gTGl0ZXJhbCBjaGFyYWN0ZXJzLgoJCS0gQSBzZXQgb2YgY2hhcmFjdGVycyBpbiBbXS4gW2FiY10gbWF0Y2hlcyBhLCBiIGFuZCBjLgoJCSAgQSBkYXNoIGlzIGFsbG93ZWQgZm9yIGEgcmFuZ2UgW2EtY10sIGJ1dCB0aGlzIGlzCgkJICBWaW0tc3BlY2lmaWMuCgkJLSBBIHNldCBvZiBjaGFyYWN0ZXJzIHRoYXQgc3RhcnRzIHdpdGggYSBeLCBtZWFuaW5nIHRoZQoJCSAgY29tcGxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlcnMuIFteYWJjXSBtYXRjaGVzIGFueQoJCSAgY2hhcmFjdGVyIGJ1dCBhLCBiIGFuZCBjLgoKe2V4dHJhfQkJT3B0aW9uYWwgZXh0cmEgdGV4dDoKCQkgICAgIyBjb21tZW50CQlDb21tZW50IGlzIGlnbm9yZWQKCQkgICAgLQkJCUh1bnNwZWxsIHVzZXMgdGhpcywgaWdub3JlZAoKRm9yIFBGWCB0aGUgZmllbGRzIGFyZSB0aGUgc2FtZSwgYnV0IHRoZSB7c3RyaXB9LCB7YWRkfSBhbmQge2NvbmRpdGlvbn0gYXBwbHkKdG8gdGhlIHN0YXJ0IG9mIHRoZSB3b3JkLgoKTm90ZTogTXlzcGVsbCBpZ25vcmVzIGFueSBleHRyYSB0ZXh0IGFmdGVyIHRoZSByZWxldmFudCBpbmZvLiAgVmltIHJlcXVpcmVzCnRoaXMgdGV4dCB0byBzdGFydCB3aXRoIGEgIiMiIHNvIHRoYXQgbWlzdGFrZXMgZG9uJ3QgZ28gdW5ub3RpY2VkLiAgRXhhbXBsZToKCglTRlggRiAwIGluICAgW15pXW4gICAgICAjIFNwaW9uID4gU3Bpb25pbiAgfgoJU0ZYIEYgMCBuZW4gIGluCQkjIEJhdWVyaW4gPiBCYXVlcmlubmVuIH4KCkFwcGFyZW50bHkgTXlzcGVsbCBhbGxvd3MgYW4gYWZmaXggbmFtZSB0byBhcHBlYXIgbW9yZSB0aGFuIG9uY2UuICBTaW5jZSB0aGlzCm1pZ2h0IGFsc28gYmUgYSBtaXN0YWtlLCBWaW0gY2hlY2tzIGZvciBhbiBleHRyYSAiUyIuICBUaGUgYWZmaXggZmlsZXMgZm9yCk15c3BlbGwgdGhhdCB1c2UgdGhpcyBmZWF0dXJlIGFwcGFyZW50bHkgaGF2ZSB0aGlzIGZsYWcuICBFeGFtcGxlOgoKCVNGWCBhIFkgMSBTIH4KCVNGWCBhIDAgYW4gLiB+CgoJU0ZYIGEgWSAyIFMgfgoJU0ZYIGEgMCBlbiAuIH4KCVNGWCBhIDAgb24gLiB+CgoKQUZGSVggRkxBR1MJCQkJCQkqc3BlbGwtYWZmaXgtZmxhZ3MqCgpUaGlzIGlzIGEgZmVhdHVyZSB0aGF0IGNvbWVzIGZyb20gSHVuc3BlbGw6IFRoZSBhZmZpeCBtYXkgc3BlY2lmeSBmbGFncy4gIFRoaXMKd29ya3Mgc2ltaWxhciB0byBmbGFncyBzcGVjaWZpZWQgb24gYSBiYXNpYyB3b3JkLiAgVGhlIGZsYWdzIGFwcGx5IHRvIHRoZQpiYXNpYyB3b3JkIHBsdXMgdGhlIGFmZml4IChidXQgdGhlcmUgYXJlIHJlc3RyaWN0aW9ucykuICBFeGFtcGxlOgoKCVNGWCBTIFkgMSB+CglTRlggUyAwIHMgLiB+CgoJU0ZYIEEgWSAxIH4KCVNGWCBBIDAgYWJsZS9TIC4gfgoKV2hlbiB0aGUgZGljdGlvbmFyeSBmaWxlIGNvbnRhaW5zICJkcmluay9BUyIgdGhlbiB0aGVzZSB3b3JkcyBhcmUgcG9zc2libGU6CgoJZHJpbmsKCWRyaW5rcwkJdXNlcyBTIHN1ZmZpeAoJZHJpbmthYmxlCXVzZXMgQSBzdWZmaXgKCWRyaW5rYWJsZXMJdXNlcyBBIHN1ZmZpeCBhbmQgdGhlbiBTIHN1ZmZpeAoKR2VuZXJhbGx5IHRoZSBmbGFncyBvZiB0aGUgc3VmZml4IGFyZSBhZGRlZCB0byB0aGUgZmxhZ3Mgb2YgdGhlIGJhc2ljIHdvcmQsCmJvdGggYXJlIHVzZWQgZm9yIHRoZSB3b3JkIHBsdXMgc3VmZml4LiAgQnV0IHRoZSBmbGFncyBvZiB0aGUgYmFzaWMgd29yZCBhcmUKb25seSB1c2VkIG9uY2UgZm9yIGFmZml4ZXMsIGV4Y2VwdCB0aGF0IGJvdGggb25lIHByZWZpeCBhbmQgb25lIHN1ZmZpeCBjYW4gYmUKdXNlZCB3aGVuIGJvdGggc3VwcG9ydCBjb21iaW5pbmcuCgpTcGVjaWZpY2FsbHksIHRoZSBhZmZpeCBmbGFncyBjYW4gYmUgdXNlZCBmb3I6Ci0gU3VmZml4ZXMgb24gc3VmZml4ZXMsIGFzIGluIHRoZSBleGFtcGxlIGFib3ZlLiAgVGhpcyB3b3JrcyBvbmNlLCB0aHVzIHlvdQogIGNhbiBoYXZlIHR3byBzdWZmaXhlcyBvbiBhIHdvcmQgKHBsdXMgb25lIHByZWZpeCkuCi0gTWFraW5nIHRoZSB3b3JkIHdpdGggdGhlIGFmZml4IHJhcmUsIGJ5IHVzaW5nIHRoZSB8c3BlbGwtUkFSRXwgZmxhZy4KLSBFeGNsdWRlIHRoZSB3b3JkIHdpdGggdGhlIGFmZml4IGZyb20gY29tcG91bmRpbmcsIGJ5IHVzaW5nIHRoZQogIHxzcGVsbC1DT01QT1VOREZPUkJJREZMQUd8IGZsYWcuCi0gQWxsb3cgdGhlIHdvcmQgd2l0aCB0aGUgYWZmaXggdG8gYmUgcGFydCBvZiBhIGNvbXBvdW5kIHdvcmQgb24gdGhlIHNpZGUgb2YKICB0aGUgYWZmaXggd2l0aCB0aGUgfHNwZWxsLUNPTVBPVU5EUEVSTUlURkxBR3wuCi0gVXNlIHRoZSBORUVEQ09NUE9VTkQgZmxhZzogd29yZCBwbHVzIGFmZml4IGNhbiBvbmx5IGJlIHVzZWQgYXMgcGFydCBvZiBhCiAgY29tcG91bmQgd29yZC4gfHNwZWxsLU5FRURDT01QT1VORHwKLSBDb21wb3VuZCBmbGFnczogd29yZCBwbHVzIGFmZml4IGNhbiBiZSBwYXJ0IG9mIGEgY29tcG91bmQgd29yZCBhdCB0aGUgZW5kLAogIG1pZGRsZSwgc3RhcnQsIGV0Yy4gIFRoZSBmbGFncyBhcmUgY29tYmluZWQgd2l0aCB0aGUgZmxhZ3Mgb2YgdGhlIGJhc2ljCiAgd29yZC4gIHxzcGVsbC1jb21wb3VuZHwKLSBORUVEQUZGSVg6IGFub3RoZXIgYWZmaXggaXMgbmVlZGVkIHRvIG1ha2UgYSB2YWxpZCB3b3JkLgotIENJUkNVTUZJWCwgYXMgZXhwbGFpbmVkIGp1c3QgYmVsb3cuCgoKQ0lSQ1VNRklYCQkJCQkJKnNwZWxsLUNJUkNVTUZJWCoKClRoZSBDSVJDVU1GSVggZmxhZyBtZWFucyBhIHByZWZpeCBhbmQgc3VmZml4IG11c3QgYmUgYWRkZWQgYXQgdGhlIHNhbWUgdGltZS4KSWYgYSBwcmVmaXggaGFzIHRoZSBDSVJDVU1GSVggZmxhZyB0aGFuIG9ubHkgc3VmZml4ZXMgd2l0aCB0aGUgQ0lSQ1VNRklYIGZsYWcKY2FuIGJlIGFkZGVkLCBhbmQgdGhlIG90aGVyIHdheSBhcm91bmQuCkFuIGFsdGVybmF0aXZlIGlzIHRvIG9ubHkgc3BlY2lmeSB0aGUgc3VmZml4LCBhbmQgZ2l2ZSB0aGUgdGhhdCBzdWZmaXggdHdvCmZsYWdzOiBUaGUgcmVxdWlyZWQgcHJlZml4IGFuZCB0aGUgTkVFREFGRklYIGZsYWcuICB8c3BlbGwtTkVFREFGRklYfAoKClBGWFBPU1RQT05FCQkJCQkJKnNwZWxsLVBGWFBPU1RQT05FKgoKV2hlbiBhbiBhZmZpeCBmaWxlIGhhcyB2ZXJ5IG1hbnkgcHJlZml4ZXMgdGhhdCBhcHBseSB0byBtYW55IHdvcmRzIGl0J3Mgbm90CnBvc3NpYmxlIHRvIGJ1aWxkIHRoZSB3aG9sZSB3b3JkIGxpc3QgaW4gbWVtb3J5LiAgVGhpcyBhcHBsaWVzIHRvIEhlYnJldyAoYQpsaXN0IHdpdGggYWxsIHdvcmRzIGlzIG92ZXIgYSBHYnl0ZSkuICBJbiB0aGF0IGNhc2UgYXBwbHlpbmcgcHJlZml4ZXMgbXVzdCBiZQpwb3N0cG9uZWQuICBUaGlzIG1ha2VzIHNwZWxsIGNoZWNraW5nIHNsb3dlci4gIEl0IGlzIGluZGljYXRlZCBieSB0aGlzIGtleXdvcmQKaW4gdGhlIC5hZmYgZmlsZToKCglQRlhQT1NUUE9ORSB+CgpPbmx5IHByZWZpeGVzIHdpdGhvdXQgYSBjaG9wIHN0cmluZyBhbmQgd2l0aG91dCBmbGFncyBjYW4gYmUgcG9zdHBvbmVkLgpQcmVmaXhlcyB3aXRoIGEgY2hvcCBzdHJpbmcgb3Igd2l0aCBmbGFncyB3aWxsIHN0aWxsIGJlIGluY2x1ZGVkIGluIHRoZSB3b3JkCmxpc3QuICBBbiBleGNlcHRpb24gaWYgdGhlIGNob3Agc3RyaW5nIGlzIG9uZSBjaGFyYWN0ZXIgYW5kIGVxdWFsIHRvIHRoZSBsYXN0CmNoYXJhY3RlciBvZiB0aGUgYWRkZWQgc3RyaW5nLCBidXQgaW4gbG93ZXIgY2FzZS4gIFRodXMgd2hlbiB0aGUgY2hvcCBzdHJpbmcKaXMgdXNlZCB0byBhbGxvdyB0aGUgZm9sbG93aW5nIHdvcmQgdG8gc3RhcnQgd2l0aCBhbiB1cHBlciBjYXNlIGxldHRlci4KCgpXT1JEUyBXSVRIIEEgU0xBU0gJCQkJCSpzcGVsbC1TTEFTSCoKClRoZSBzbGFzaCBpcyB1c2VkIGluIHRoZSAuZGljIGZpbGUgdG8gc2VwYXJhdGUgdGhlIGJhc2ljIHdvcmQgZnJvbSB0aGUgYWZmaXgKbGV0dGVycyBhbmQgb3RoZXIgZmxhZ3MuICBVbmZvcnR1bmF0ZWx5LCB0aGlzIG1lYW5zIHlvdSBjYW5ub3QgdXNlIGEgc2xhc2ggaW4KYSB3b3JkLiAgVGh1cyAiVENQL0lQIiBpcyBub3QgYSB3b3JkIGJ1dCAiVENQIHdpdGggdGhlIGZsYWdzICJJUCIuICBUbyBpbmNsdWRlCmEgc2xhc2ggaW4gdGhlIHdvcmQgcHV0IGEgYmFja3NsYXNoIGJlZm9yZSBpdDogIlRDUFwvSVAiLiAgSW4gdGhlIHJhcmUgY2FzZQp5b3Ugd2FudCB0byB1c2UgYSBiYWNrc2xhc2ggaW5zaWRlIGEgd29yZCB5b3UgbmVlZCB0byB1c2UgdHdvIGJhY2tzbGFzaGVzLgpBbnkgb3RoZXIgdXNlIG9mIHRoZSBiYWNrc2xhc2ggaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHBhbnNpb24uCgoKS0VFUC1DQVNFIFdPUkRTCQkJCQkJKnNwZWxsLUtFRVBDQVNFKgoKSW4gdGhlIGFmZml4IGZpbGUgYSBLRUVQQ0FTRSBsaW5lIGNhbiBiZSB1c2VkIHRvIGRlZmluZSB0aGUgYWZmaXggbmFtZSB1c2VkCmZvciBrZWVwLWNhc2Ugd29yZHMuICBFeGFtcGxlOgoKCUtFRVBDQVNFID0gfgoKVGhpcyBmbGFnIGlzIG5vdCBzdXBwb3J0ZWQgYnkgTXlzcGVsbC4gIEl0IGhhcyB0aGUgbWVhbmluZyB0aGF0IGNhc2UgbWF0dGVycy4KVGhpcyBjYW4gYmUgdXNlZCBpZiB0aGUgd29yZCBkb2VzIG5vdCBoYXZlIHRoZSBmaXJzdCBsZXR0ZXIgaW4gdXBwZXIgY2FzZSBhdAp0aGUgc3RhcnQgb2YgYSBzZW50ZW5jZS4gIEV4YW1wbGU6CgogICAgd29yZCBsaXN0CSAgICBtYXRjaGVzCQkgICAgZG9lcyBub3QgbWF0Y2ggfgogICAgJ3MgbW9yZ2Vucy89ICAgICdzIG1vcmdlbnMJCSAgICAnUyBtb3JnZW5zICdzIE1vcmdlbnMgJ1MgTU9SR0VOUwogICAgJ3MgTW9yZ2VucwkgICAgJ3MgTW9yZ2VucyAnUyBNT1JHRU5TICAgJ1MgbW9yZ2VucyAncyBtb3JnZW5zCgpUaGUgZmxhZyBjYW4gYWxzbyBiZSB1c2VkIHRvIGF2b2lkIHRoYXQgdGhlIHdvcmQgbWF0Y2hlcyB3aGVuIGl0IGlzIGluIGFsbAp1cHBlci1jYXNlIGxldHRlcnMuCgoKUkFSRSBXT1JEUwkJCQkJCSpzcGVsbC1SQVJFKgoKSW4gdGhlIGFmZml4IGZpbGUgYSBSQVJFIGxpbmUgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBhZmZpeCBuYW1lIHVzZWQgZm9yCnJhcmUgd29yZHMuICBFeGFtcGxlOgoKCVJBUkUgPyB+CgpSYXJlIHdvcmRzIGFyZSBoaWdobGlnaHRlZCBkaWZmZXJlbnRseSBmcm9tIGJhZCB3b3Jkcy4gIFRoaXMgaXMgdG8gYmUgdXNlZCBmb3IKd29yZHMgdGhhdCBhcmUgY29ycmVjdCBmb3IgdGhlIGxhbmd1YWdlLCBidXQgYXJlIGhhcmRseSBldmVyIHVzZWQgYW5kIGNvdWxkIGJlCmEgdHlwaW5nIG1pc3Rha2UgYW55d2F5LiAgV2hlbiB0aGUgc2FtZSB3b3JkIGlzIGZvdW5kIGFzIGdvb2QgaXQgd29uJ3QgYmUKaGlnaGxpZ2h0ZWQgYXMgcmFyZS4KClRoaXMgZmxhZyBjYW4gYWxzbyBiZSB1c2VkIG9uIGFuIGFmZml4LCBzbyB0aGF0IGEgYmFzaWMgd29yZCBpcyBub3QgcmFyZSBidXQKdGhlIGJhc2ljIHdvcmQgcGx1cyBhZmZpeCBpcyByYXJlIHxzcGVsbC1hZmZpeC1mbGFnc3wuICBIb3dldmVyLCBpZiB0aGUgd29yZAphbHNvIGFwcGVhcnMgYXMgYSBnb29kIHdvcmQgaW4gYW5vdGhlciB3YXkgKGUuZy4sIGluIGFub3RoZXIgcmVnaW9uKSBpdCB3b24ndApiZSBtYXJrZWQgYXMgcmFyZS4KCgpCQUQgV09SRFMJCQkJCQkqc3BlbGwtQkFEKgoKSW4gdGhlIGFmZml4IGZpbGUgYSBCQUQgbGluZSBjYW4gYmUgdXNlZCB0byBkZWZpbmUgdGhlIGFmZml4IG5hbWUgdXNlZCBmb3IKYmFkIHdvcmRzLiAgRXhhbXBsZToKCglCQUQgISB+CgpUaGlzIGNhbiBiZSB1c2VkIHRvIGV4Y2x1ZGUgd29yZHMgdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUgZ29vZC4gIEZvciBleGFtcGxlCiJ0aGUgdGhlIiBpbiB0aGUgLmRpYyBmaWxlOgoKCXRoZSB0aGUvISB+CgpPbmNlIGEgd29yZCBoYXMgYmVlbiBtYXJrZWQgYXMgYmFkIGl0IHdvbid0IGJlIHVuZG9uZSBieSBlbmNvdW50ZXJpbmcgdGhlIHNhbWUKd29yZCBhcyBnb29kLgoKVGhlIGZsYWcgYWxzbyBhcHBsaWVzIHRvIHRoZSB3b3JkIHdpdGggYWZmaXhlcywgdGh1cyB0aGlzIGNhbiBiZSB1c2VkIHRvIG1hcmsKYSB3aG9sZSBidW5jaCBvZiByZWxhdGVkIHdvcmRzIGFzIGJhZC4KCgkJCQkJCQkqc3BlbGwtTkVFREFGRklYKgpUaGUgTkVFREFGRklYIGZsYWcgaXMgdXNlZCB0byByZXF1aXJlIHRoYXQgYSB3b3JkIGlzIHVzZWQgd2l0aCBhbiBhZmZpeC4gIFRoZQp3b3JkIGl0c2VsZiBpcyBub3QgYSBnb29kIHdvcmQgKHVubGVzcyB0aGVyZSBpcyBhbiBlbXB0eSBhZmZpeCkuICBFeGFtcGxlOgoKCU5FRURBRkZJWCArIH4KCgpDT01QT1VORCBXT1JEUwkJCQkJCSpzcGVsbC1jb21wb3VuZCoKCkEgY29tcG91bmQgd29yZCBpcyBhIGxvbmdlciB3b3JkIG1hZGUgYnkgY29uY2F0ZW5hdGluZyB3b3JkcyB0aGF0IGFwcGVhciBpbgp0aGUgLmRpYyBmaWxlLiAgVG8gc3BlY2lmeSB3aGljaCB3b3JkcyBtYXkgYmUgY29uY2F0ZW5hdGVkIGEgY2hhcmFjdGVyIGlzCnVzZWQuICBUaGlzIGNoYXJhY3RlciBpcyBwdXQgaW4gdGhlIGxpc3Qgb2YgYWZmaXhlcyBhZnRlciB0aGUgd29yZC4gIFdlIHdpbGwKY2FsbCB0aGlzIGNoYXJhY3RlciBhIGZsYWcgaGVyZS4gIE9idmlvdXNseSB0aGVzZSBmbGFncyBtdXN0IGJlIGRpZmZlcmVudCBmcm9tCmFueSBhZmZpeCBJRHMgdXNlZC4KCgkJCQkJCQkqc3BlbGwtQ09NUE9VTkRGTEFHKgpUaGUgTXlzcGVsbCBjb21wYXRpYmxlIG1ldGhvZCB1c2VzIG9uZSBmbGFnLCBzcGVjaWZpZWQgd2l0aCBDT01QT1VOREZMQUcuICBBbGwKd29yZHMgd2l0aCB0aGlzIGZsYWcgY29tYmluZSBpbiBhbnkgb3JkZXIuICBUaGlzIG1lYW5zIHRoZXJlIGlzIG5vIGNvbnRyb2wKb3ZlciB3aGljaCB3b3JkIGNvbWVzIGZpcnN0LiAgRXhhbXBsZToKCUNPTVBPVU5ERkxBRyBjIH4KCgkJCQkJCQkqc3BlbGwtQ09NUE9VTkRSVUxFKgpBIG1vcmUgYWR2YW5jZWQgbWV0aG9kIHRvIHNwZWNpZnkgaG93IGNvbXBvdW5kIHdvcmRzIGNhbiBiZSBmb3JtZWQgdXNlcwptdWx0aXBsZSBpdGVtcyB3aXRoIG11bHRpcGxlIGZsYWdzLiAgVGhpcyBpcyBub3QgY29tcGF0aWJsZSB3aXRoIE15c3BlbGwgMy4wLgpMZXQncyBzdGFydCB3aXRoIGFuIGV4YW1wbGU6CglDT01QT1VORFJVTEUgYysgfgoJQ09NUE9VTkRSVUxFIHNlIH4KClRoZSBmaXJzdCBsaW5lIGRlZmluZXMgdGhhdCB3b3JkcyB3aXRoIHRoZSAiYyIgZmxhZyBjYW4gYmUgY29uY2F0ZW5hdGVkIGluIGFueQpvcmRlci4gIFRoZSBzZWNvbmQgbGluZSBkZWZpbmVzIGNvbXBvdW5kIHdvcmRzIHRoYXQgYXJlIG1hZGUgb2Ygb25lIHdvcmQgd2l0aAp0aGUgInMiIGZsYWcgYW5kIG9uZSB3b3JkIHdpdGggdGhlICJlIiBmbGFnLiAgV2l0aCB0aGlzIGRpY3Rpb25hcnk6Cglib3JrL2MgfgoJb25pb24vcyB+Cglzb3VwL2UgfgoKWW91IGNhbiBtYWtlIHRoZXNlIHdvcmRzOgoJYm9yawoJYm9ya2JvcmsKCWJvcmtib3JrYm9yawoJKGV0Yy4pCglvbmlvbgoJc291cAoJb25pb25zb3VwCgpUaGUgQ09NUE9VTkRSVUxFIGl0ZW0gbWF5IGFwcGVhciBtdWx0aXBsZSB0aW1lcy4gIFRoZSBhcmd1bWVudCBpcyBtYWRlIG91dCBvZgpvbmUgb3IgbW9yZSBncm91cHMsIHdoZXJlIGVhY2ggZ3JvdXAgY2FuIGJlOgoJb25lIGZsYWcJCQllLmcuLCBjCglhbHRlcm5hdGUgZmxhZ3MgaW5zaWRlIFtdCWUuZy4sIFthYmNdCk9wdGlvbmFsbHkgdGhpcyBtYXkgYmUgZm9sbG93ZWQgYnk6CgkqCXRoZSBncm91cCBhcHBlYXJzIHplcm8gb3IgbW9yZSB0aW1lcywgZS5nLiwgc20qZQoJKwl0aGUgZ3JvdXAgYXBwZWFycyBvbmUgb3IgbW9yZSB0aW1lcywgZS5nLiwgYysKClRoaXMgaXMgc2ltaWxhciB0byB0aGUgcmVnZXhwIHBhdHRlcm4gc3ludGF4IChidXQgbm90IHRoZSBzYW1lISkuICBBIGZldwpleGFtcGxlcyB3aXRoIHRoZSBzZXF1ZW5jZSBvZiB3b3JkIGZsYWdzIHRoZXkgcmVxdWlyZToKICAgIENPTVBPVU5EUlVMRSB4KwkgICAgeCB4eCB4eHggZXRjLgogICAgQ09NUE9VTkRSVUxFIHl6CSAgICB5egogICAgQ09NUE9VTkRSVUxFIHgregkgICAgeHogeHh6IHh4eHogZXRjLgogICAgQ09NUE9VTkRSVUxFIHl4KwkgICAgeXggeXh4IHl4eHggZXRjLgoKICAgIENPTVBPVU5EUlVMRSBbYWJjXXogICAgYXogYnogY3oKICAgIENPTVBPVU5EUlVMRSBbYWJjXSt6ICAgYXogYWF6IGFiYXogYnogYmF6IGJjYnogY3ogY2F6IGNiYXogZXRjLgogICAgQ09NUE9VTkRSVUxFIGFbeHl6XSsgICBheCBheHggYXh5eiBheSBheXggYXl6eiBheiBhenkgYXp4eSBldGMuCiAgICBDT01QT1VORFJVTEUgc20qZQkgICAgc2Ugc21lIHNtbWUgc21tbWUgZXRjLgogICAgQ09NUE9VTkRSVUxFIHNbeHl6XSplICBzZSBzeGUgc3h5ZSBzeHl4ZSBzeWUgc3l6ZSBzemUgc3p5ZSBzenl4ZSAgZXRjLgoKQSBzcGVjaWZpYyBleGFtcGxlOiBBbGxvdyBhIGNvbXBvdW5kIHRvIGJlIG1hZGUgb2YgdHdvIHdvcmRzIGFuZCBhIGRhc2g6CglJbiB0aGUgLmFmZiBmaWxlOgoJICAgIENPTVBPVU5EUlVMRSBzZGUgfgoJICAgIE5FRURBRkZJWCB4IH4KCSAgICBDT01QT1VORFdPUkRNQVggMyB+CgkgICAgQ09NUE9VTkRNSU4gMSB+CglJbiB0aGUgLmRpYyBmaWxlOgoJICAgIHN0YXJ0L3MgfgoJICAgIGVuZC9lIH4KCSAgICAtL3hkIH4KClRoaXMgYWxsb3dzIGZvciB0aGUgd29yZCAic3RhcnQtZW5kIiwgYnV0IG5vdCAic3RhcnRlbmQiLgoKQW4gYWRkaXRpb25hbCBpbXBsaWVkIHJ1bGUgaXMgdGhhdCwgd2l0aG91dCBmdXJ0aGVyIGZsYWdzLCBhIHdvcmQgd2l0aCBhCnByZWZpeCBjYW5ub3QgYmUgY29tcG91bmRlZCBhZnRlciBhbm90aGVyIHdvcmQsIGFuZCBhIHdvcmQgd2l0aCBhIHN1ZmZpeApjYW5ub3QgYmUgY29tcG91bmRlZCB3aXRoIGEgZm9sbG93aW5nIHdvcmQuICBUaHVzIHRoZSBhZmZpeCBjYW5ub3QgYXBwZWFyCm9uIHRoZSBpbnNpZGUgb2YgYSBjb21wb3VuZCB3b3JkLiAgVGhpcyBjYW4gYmUgY2hhbmdlZCB3aXRoIHRoZQp8c3BlbGwtQ09NUE9VTkRQRVJNSVRGTEFHfC4KCgkJCQkJCQkqc3BlbGwtTkVFRENPTVBPVU5EKgpUaGUgTkVFRENPTVBPVU5EIGZsYWcgaXMgdXNlZCB0byByZXF1aXJlIHRoYXQgYSB3b3JkIGlzIHVzZWQgYXMgcGFydCBvZiBhCmNvbXBvdW5kIHdvcmQuICBUaGUgd29yZCBpdHNlbGYgaXMgbm90IGEgZ29vZCB3b3JkLiAgRXhhbXBsZToKCglORUVEQ09NUE9VTkQgJiB+CgoJCQkJCQkJKnNwZWxsLUNPTVBPVU5ETUlOKgpUaGUgbWluaW1hbCBjaGFyYWN0ZXIgbGVuZ3RoIG9mIGEgd29yZCB1c2VkIGZvciBjb21wb3VuZGluZyBpcyBzcGVjaWZpZWQgd2l0aApDT01QT1VORE1JTi4gIEV4YW1wbGU6CglDT01QT1VORE1JTiA1IH4KCldoZW4gb21pdHRlZCB0aGVyZSBpcyBubyBtaW5pbWFsIGxlbmd0aC4gIE9idmlvdXNseSB5b3UgY291bGQganVzdCBsZWF2ZSBvdXQKdGhlIGNvbXBvdW5kIGZsYWcgZnJvbSBzaG9ydCB3b3JkcyBpbnN0ZWFkLCB0aGlzIGZlYXR1cmUgaXMgcHJlc2VudCBmb3IKY29tcGF0aWJpbGl0eSB3aXRoIE15c3BlbGwuCgoJCQkJCQkJKnNwZWxsLUNPTVBPVU5EV09SRE1BWCoKVGhlIG1heGltdW0gbnVtYmVyIG9mIHdvcmRzIHRoYXQgY2FuIGJlIGNvbmNhdGVuYXRlZCBpbnRvIGEgY29tcG91bmQgd29yZCBpcwpzcGVjaWZpZWQgd2l0aCBDT01QT1VORFdPUkRNQVguICBFeGFtcGxlOgoJQ09NUE9VTkRXT1JETUFYIDMgfgoKV2hlbiBvbWl0dGVkIHRoZXJlIGlzIG5vIG1heGltdW0uICBJdCBhcHBsaWVzIHRvIGFsbCBjb21wb3VuZCB3b3Jkcy4KClRvIHNldCBhIGxpbWl0IGZvciB3b3JkcyB3aXRoIHNwZWNpZmljIGZsYWdzIG1ha2Ugc3VyZSB0aGUgaXRlbXMgaW4KQ09NUE9VTkRSVUxFIHdoZXJlIHRoZXkgYXBwZWFyIGRvbid0IGFsbG93IHRvbyBtYW55IHdvcmRzLgoKCQkJCQkJCSpzcGVsbC1DT01QT1VORFNZTE1BWCoKVGhlIG1heGltdW0gbnVtYmVyIG9mIHN5bGxhYmxlcyB0aGF0IGEgY29tcG91bmQgd29yZCBtYXkgY29udGFpbiBpcyBzcGVjaWZpZWQKd2l0aCBDT01QT1VORFNZTE1BWC4gIEV4YW1wbGU6CglDT01QT1VORFNZTE1BWCA2IH4KClRoaXMgaGFzIG5vIGVmZmVjdCBpZiB0aGVyZSBpcyBubyBTWUxMQUJMRSBpdGVtLiAgV2l0aG91dCBDT01QT1VORFNZTE1BWCB0aGVyZQppcyBubyBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHN5bGxhYmxlcy4KCklmIGJvdGggQ09NUE9VTkRXT1JETUFYIGFuZCBDT01QT1VORFNZTE1BWCBhcmUgZGVmaW5lZCwgYSBjb21wb3VuZCB3b3JkIGlzCmFjY2VwdGVkIGlmIGl0IGZpdHMgb25lIG9mIHRoZSBjcml0ZXJpYSwgdGh1cyBpcyBlaXRoZXIgbWFkZSBmcm9tIHVwIHRvCkNPTVBPVU5EV09SRE1BWCB3b3JkcyBvciBjb250YWlucyB1cCB0byBDT01QT1VORFNZTE1BWCBzeWxsYWJsZXMuCgoJCQkJCQkgICAgKnNwZWxsLUNPTVBPVU5ERk9SQklERkxBRyoKVGhlIENPTVBPVU5ERk9SQklERkxBRyBzcGVjaWZpZXMgYSBmbGFnIHRoYXQgY2FuIGJlIHVzZWQgb24gYW4gYWZmaXguICBJdAptZWFucyB0aGF0IHRoZSB3b3JkIHBsdXMgYWZmaXggY2Fubm90IGJlIHVzZWQgaW4gYSBjb21wb3VuZCB3b3JkLiAgRXhhbXBsZToKCWFmZml4IGZpbGU6CgkJQ09NUE9VTkRGTEFHIGMgfgoJCUNPTVBPVU5ERk9SQklERkxBRyB4IH4KCQlTRlggYSBZIDIgfgoJCVNGWCBhIDAgcyAgIC4gfgoJCVNGWCBhIDAgaXplL3ggLiB+CglkaWN0aW9uYXJ5OgoJCXdvcmQvYyB+CgkJdXRpbC9hYyB+CgpUaGlzIGFsbG93cyBmb3IgIndvcmR1dGlsIiBhbmQgIndvcmR1dGlscyIgYnV0IG5vdCAid29yZHV0aWxpemUiLgpOb3RlOiB0aGlzIGRvZXNuJ3Qgd29yayBmb3IgcG9zdHBvbmVkIHByZWZpeGVzIHlldC4KCgkJCQkJCSAgICAqc3BlbGwtQ09NUE9VTkRQRVJNSVRGTEFHKgpUaGUgQ09NUE9VTkRQRVJNSVRGTEFHIHNwZWNpZmllcyBhIGZsYWcgdGhhdCBjYW4gYmUgdXNlZCBvbiBhbiBhZmZpeC4gIEl0Cm1lYW5zIHRoYXQgdGhlIHdvcmQgcGx1cyBhZmZpeCBjYW4gYWxzbyBiZSB1c2VkIGluIGEgY29tcG91bmQgd29yZCBpbiBhIHdheQp3aGVyZSB0aGUgYWZmaXggZW5kcyB1cCBoYWxmd2F5IHRoZSB3b3JkLiAgV2l0aG91dCB0aGlzIGZsYWcgdGhhdCBpcyBub3QKYWxsb3dlZC4KTm90ZTogdGhpcyBkb2Vzbid0IHdvcmsgZm9yIHBvc3Rwb25lZCBwcmVmaXhlcyB5ZXQuCgoJCQkJCQkgICAgKnNwZWxsLUNPTVBPVU5EUk9PVCoKVGhlIENPTVBPVU5EUk9PVCBmbGFnIGlzIHVzZWQgZm9yIHdvcmRzIGluIHRoZSBkaWN0aW9uYXJ5IHRoYXQgYXJlIGFscmVhZHkgYQpjb21wb3VuZC4gIFRoaXMgbWVhbnMgaXQgY291bnRzIGZvciB0d28gd29yZHMgd2hlbiBjaGVja2luZyB0aGUgY29tcG91bmRpbmcKcnVsZXMuICBDYW4gYWxzbyBiZSB1c2VkIGZvciBhbiBhZmZpeCB0byBjb3VudCB0aGUgYWZmaXggYXMgYSBjb21wb3VuZGluZwp3b3JkLgoKCQkJCQkJCSpzcGVsbC1TWUxMQUJMRSoKVGhlIFNZTExBQkxFIGl0ZW0gZGVmaW5lcyBjaGFyYWN0ZXJzIG9yIGNoYXJhY3RlciBzZXF1ZW5jZXMgdGhhdCBhcmUgdXNlZCB0bwpjb3VudCB0aGUgbnVtYmVyIG9mIHN5bGxhYmxlcyBpbiBhIHdvcmQuICBFeGFtcGxlOgoJU1lMTEFCTEUgYeFl6Wntb/P29XX6/Pt5L2FhL2F1L2VhL2VlL2VpL2llL29hL29lL29vL291L3V1L3VpIH4KCkJlZm9yZSB0aGUgZmlyc3Qgc2xhc2ggaXMgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGNvdW50ZWQgZm9yIG9uZQpzeWxsYWJsZSwgYWxzbyB3aGVuIHJlcGVhdGVkIGFuZCBtaXhlZCwgdW50aWwgdGhlIG5leHQgY2hhcmFjdGVyIHRoYXQgaXMgbm90CmluIHRoaXMgc2V0LiAgQWZ0ZXIgdGhlIHNsYXNoIGNvbWUgc2VxdWVuY2VzIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgY291bnRlZApmb3Igb25lIHN5bGxhYmxlLiAgVGhlc2UgYXJlIHByZWZlcnJlZCBvdmVyIHVzaW5nIGNoYXJhY3RlcnMgZnJvbSB0aGUgc2V0LgpXaXRoIHRoZSBleGFtcGxlICJpZGVlZW4iIGhhcyB0aHJlZSBzeWxsYWJsZXMsIGNvdW50ZWQgYnkgImkiLCAiZWUiIGFuZCAiZSIuCgpPbmx5IGNhc2UtZm9sZGVkIGxldHRlcnMgbmVlZCB0byBiZSBpbmNsdWRlZC4KCkFub3RoZXIgd2F5IHRvIHJlc3RyaWN0IGNvbXBvdW5kaW5nIHdhcyBtZW50aW9uZWQgYWJvdmU6IEFkZGluZyB0aGUKfHNwZWxsLUNPTVBPVU5ERk9SQklERkxBR3wgZmxhZyB0byBhbiBhZmZpeCBjYXVzZXMgYWxsIHdvcmRzIHRoYXQgYXJlIG1hZGUKd2l0aCB0aGF0IGFmZml4IG5vdCBiZSBiZSB1c2VkIGZvciBjb21wb3VuZGluZy4KCgpVTkxJTUlURUQgQ09NUE9VTkRJTkcJCQkJCSpzcGVsbC1OT0JSRUFLKgoKRm9yIHNvbWUgbGFuZ3VhZ2VzLCBzdWNoIGFzIFRoYWksIHRoZXJlIGlzIG5vIHNwYWNlIGluIGJldHdlZW4gd29yZHMuICBUaGlzCmxvb2tzIGxpa2UgYWxsIHdvcmRzIGFyZSBjb21wb3VuZGVkLiAgVG8gc3BlY2lmeSB0aGlzIHVzZSB0aGUgTk9CUkVBSyBpdGVtIGluCnRoZSBhZmZpeCBmaWxlLCB3aXRob3V0IGFyZ3VtZW50czoKCU5PQlJFQUsgfgoKVmltIHdpbGwgdHJ5IHRvIGZpZ3VyZSBvdXQgd2hlcmUgb25lIHdvcmQgZW5kcyBhbmQgYSBuZXh0IHN0YXJ0cy4gIFdoZW4gdGhlcmUKYXJlIHNwZWxsaW5nIG1pc3Rha2VzIHRoaXMgbWF5IG5vdCBiZSBxdWl0ZSByaWdodC4KCgoJCQkJCQkJKnNwZWxsLUNPTU1PTioKQ29tbW9uIHdvcmRzIGNhbiBiZSBzcGVjaWZpZWQgd2l0aCB0aGUgQ09NTU9OIGl0ZW0uICBUaGlzIHdpbGwgZ2l2ZSBiZXR0ZXIKc3VnZ2VzdGlvbnMgd2hlbiBlZGl0aW5nIGEgc2hvcnQgZmlsZS4gIEV4YW1wbGU6CgoJQ09NTU9OICB0aGUgb2YgdG8gYW5kIGEgaW4gaXMgaXQgeW91IHRoYXQgaGUgd2FzIGZvciBvbiBhcmUgfgoKVGhlIHdvcmRzIG11c3QgYmUgc2VwYXJhdGVkIGJ5IHdoaXRlIHNwYWNlLCB1cCB0byAyNSBwZXIgbGluZS4KV2hlbiBtdWx0aXBsZSByZWdpb25zIGFyZSBzcGVjaWZpZWQgaW4gYSAiOm1rc3BlbGwiIGNvbW1hbmQgdGhlIGNvbW1vbiB3b3Jkcwpmb3IgYWxsIHJlZ2lvbnMgYXJlIGNvbWJpbmVkIGFuZCB1c2VkIGZvciBhbGwgcmVnaW9ucy4KCgkJCQkJCQkqc3BlbGwtTk9TUExJVFNVR1MqClRoaXMgaXRlbSBpbmRpY2F0ZXMgdGhhdCBzcGxpdHRpbmcgYSB3b3JkIHRvIG1ha2Ugc3VnZ2VzdGlvbnMgaXMgbm90IGEgZ29vZAppZGVhLiAgU3BsaXQtd29yZCBzdWdnZXN0aW9ucyB3aWxsIGFwcGVhciBvbmx5IHdoZW4gdGhlcmUgYXJlIGZldyBzaW1pbGFyCndvcmRzLgoKCU5PU1BMSVRTVUdTIH4KCgkJCQkJCQkqc3BlbGwtTk9TVUdHRVNUKgpUaGUgZmxhZyBzcGVjaWZpZWQgd2l0aCBOT1NVR0dFU1QgY2FuIGJlIHVzZWQgZm9yIHdvcmRzIHRoYXQgd2lsbCBub3QgYmUKc3VnZ2VzdGVkLiAgQ2FuIGJlIHVzZWQgZm9yIG9ic2NlbmUgd29yZHMuCgoJTk9TVUdHRVNUICUgfgoKClJFUExBQ0VNRU5UUwkJCQkJCSpzcGVsbC1SRVAqCgpJbiB0aGUgYWZmaXggZmlsZSBSRVAgaXRlbXMgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGNvbW1vbiBtaXN0YWtlcy4gIFRoaXMgaXMKdXNlZCB0byBtYWtlIHNwZWxsaW5nIHN1Z2dlc3Rpb25zLiAgVGhlIGl0ZW1zIGRlZmluZSB0aGUgImZyb20iIHRleHQgYW5kIHRoZQoidG8iIHJlcGxhY2VtZW50LiAgRXhhbXBsZToKCglSRVAgNCB+CglSRVAgZiBwaCB+CglSRVAgcGggZiB+CglSRVAgayBjaCB+CglSRVAgY2ggayB+CgpUaGUgZmlyc3QgbGluZSBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBSRVAgbGluZXMgZm9sbG93aW5nLiAgVmltIGlnbm9yZXMgdGhlCm51bWJlciwgYnV0IGl0IG11c3QgYmUgdGhlcmUgKGZvciBjb21wYXRpYmlsaXR5IHdpdGggTXlzcGVsbCkuCgpEb24ndCBpbmNsdWRlIHNpbXBsZSBvbmUtY2hhcmFjdGVyIHJlcGxhY2VtZW50cyBvciBzd2Fwcy4gIFZpbSB3aWxsIHRyeSB0aGVzZQphbnl3YXkuICBZb3UgY2FuIGluY2x1ZGUgd2hvbGUgd29yZHMgaWYgeW91IHdhbnQgdG8sIGJ1dCB5b3UgbWlnaHQgd2FudCB0byB1c2UKdGhlICJmaWxlOiIgaXRlbSBpbiAnc3BlbGxzdWdnZXN0JyBpbnN0ZWFkLgoKWW91IGNhbiBpbmNsdWRlIGEgc3BhY2UgYnkgdXNpbmcgYW4gdW5kZXJzY29yZToKCglSRVAgdGhlX3RoZSB0aGUgfgoKClNJTUlMQVIgQ0hBUkFDVEVSUwkJCQkJKnNwZWxsLU1BUCogKkU3ODMqCgpJbiB0aGUgYWZmaXggZmlsZSBNQVAgaXRlbXMgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGxldHRlcnMgdGhhdCBhcmUgdmVyeSBtdWNoCmFsaWtlLiAgVGhpcyBpcyBtb3N0bHkgdXNlZCBmb3IgYSBsZXR0ZXIgd2l0aCBkaWZmZXJlbnQgYWNjZW50cy4gIFRoaXMgaXMgdXNlZAp0byBwcmVmZXIgc3VnZ2VzdGlvbnMgd2l0aCB0aGVzZSBsZXR0ZXJzIHN1YnN0aXR1dGVkLiAgRXhhbXBsZToKCglNQVAgMiB+CglNQVAgZenr6uggfgoJTUFQIHX8+fr7IH4KClRoZSBmaXJzdCBsaW5lIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIE1BUCBsaW5lcyBmb2xsb3dpbmcuICBWaW0gaWdub3JlcyB0aGUKbnVtYmVyLCBidXQgdGhlIGxpbmUgbXVzdCBiZSB0aGVyZS4KCkVhY2ggbGV0dGVyIG11c3QgYXBwZWFyIGluIG9ubHkgb25lIG9mIHRoZSBNQVAgaXRlbXMuICBJdCdzIGEgYml0IG1vcmUKZWZmaWNpZW50IGlmIHRoZSBmaXJzdCBsZXR0ZXIgaXMgQVNDSUkgb3IgYXQgbGVhc3Qgb25lIHdpdGhvdXQgYWNjZW50cy4KCgouU1VHIEZJTEUJCQkJCQkqc3BlbGwtTk9TVUdGSUxFKgoKV2hlbiBzb3VuZGZvbGRpbmcgaXMgc3BlY2lmaWVkIGluIHRoZSBhZmZpeCBmaWxlIHRoZW4gIjpta3NwZWxsIiB3aWxsIG5vcm1hbGx5CnByb2R1Y2UgYSAuc3VnIGZpbGUgbmV4dCB0byB0aGUgLnNwbCBmaWxlLiAgVGhpcyBmaWxlIGlzIHVzZWQgdG8gZmluZApzdWdnZXN0aW9ucyBieSB0aGVpciBzb3VuZC1hLWxpa2UgZm9ybSBxdWlja2x5LiAgQXQgdGhlIGNvc3Qgb2YgYSBsb3Qgb2YKbWVtb3J5ICh0aGUgYW1vdW50IGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiB3b3JkcywgfDpta3NwZWxsfCB3aWxsIGRpc3BsYXkgYW4KZXN0aW1hdGUgd2hlbiBpdCdzIGRvbmUpLgoKVG8gYXZvaWQgcHJvZHVjaW5nIGEgLnN1ZyBmaWxlIHVzZSB0aGlzIGl0ZW0gaW4gdGhlIGFmZml4IGZpbGU6CgoJTk9TVUdGSUxFIH4KClVzZXJzIGNhbiBzaW1wbHkgb21pdCB0aGUgLnN1ZyBmaWxlIGlmIHRoZXkgZG9uJ3Qgd2FudCB0byB1c2UgaXQuCgoKU09VTkQtQS1MSUtFCQkJCQkJKnNwZWxsLVNBTCoKCkluIHRoZSBhZmZpeCBmaWxlIFNBTCBpdGVtcyBjYW4gYmUgdXNlZCB0byBkZWZpbmUgdGhlIHNvdW5kcy1hLWxpa2UgbWVjaGFuaXNtCnRvIGJlIHVzZWQuICBUaGUgbWFpbiBpdGVtcyBkZWZpbmUgdGhlICJmcm9tIiB0ZXh0IGFuZCB0aGUgInRvIiByZXBsYWNlbWVudC4KU2ltcGxpc3RpYyBleGFtcGxlOgoKCVNBTCBDSUEJCQkgWCB+CglTQUwgQ0gJCQkgWCB+CglTQUwgQwkJCSBLIH4KCVNBTCBLCQkJIEsgfgoKVGhlcmUgYXJlIGEgZmV3IHJ1bGVzIGFuZCB0aGlzIGNhbiBiZWNvbWUgcXVpdGUgY29tcGxpY2F0ZWQuICBBbiBleHBsYW5hdGlvbgpob3cgaXQgd29ya3MgY2FuIGJlIGZvdW5kIGluIHRoZSBBc3BlbGwgbWFudWFsOgpodHRwOi8vYXNwZWxsLm5ldC9tYW4taHRtbC9QaG9uZXRpYy1Db2RlLmh0bWwuCgpUaGVyZSBhcmUgYSBmZXcgc3BlY2lhbCBpdGVtczoKCglTQUwgZm9sbG93dXAJCXRydWUgfgoJU0FMIGNvbGxhcHNlX3Jlc3VsdAl0cnVlIH4KCVNBTCByZW1vdmVfYWNjZW50cwl0cnVlIH4KCiIxIiBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyAidHJ1ZSIuICBBbnkgb3RoZXIgdmFsdWUgbWVhbnMgImZhbHNlIi4KCgpTSU1QTEUgU09VTkRGT0xESU5HCQkJCSpzcGVsbC1TT0ZPRlJPTSogKnNwZWxsLVNPRk9UTyoKClRoZSBTQUwgbWVjaGFuaXNtIGlzIGNvbXBsZXggYW5kIHNsb3cuICBBIHNpbXBsZXIgbWVjaGFuaXNtIGlzIG1hcHBpbmcgYWxsCmNoYXJhY3RlcnMgdG8gYW5vdGhlciBjaGFyYWN0ZXIsIG1hcHBpbmcgc2ltaWxhciBzb3VuZGluZyBjaGFyYWN0ZXJzIHRvIHRoZQpzYW1lIGNoYXJhY3Rlci4gIEF0IHRoZSBzYW1lIHRpbWUgdGhpcyBkb2VzIGNhc2UgZm9sZGluZy4gIFlvdSBjYW4gbm90IGhhdmUKYm90aCBTQUwgaXRlbXMgYW5kIHNpbXBsZSBzb3VuZGZvbGRpbmcuCgpUaGVyZSBhcmUgdHdvIGl0ZW1zIHJlcXVpcmVkOiBvbmUgdG8gc3BlY2lmeSB0aGUgY2hhcmFjdGVycyB0aGF0IGFyZSBtYXBwZWQKYW5kIG9uZSB0aGF0IHNwZWNpZmllcyB0aGUgY2hhcmFjdGVycyB0aGV5IGFyZSBtYXBwZWQgdG8uICBUaGV5IG11c3QgaGF2ZQpleGFjdGx5IHRoZSBzYW1lIG51bWJlciBvZiBjaGFyYWN0ZXJzLiAgRXhhbXBsZToKCiAgICBTT0ZPRlJPTSBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIH4KICAgIFNPRk9UTyAgIGViY3RlZmdoZWprbG5uZXBrcnN0ZXZ2a2VzZWJjdGVmZ2hlamtsbm5lcGtyc3RldnZrZXMgfgoKSW4gdGhlIGV4YW1wbGUgYWxsIHZvd2VscyBhcmUgbWFwcGVkIHRvIHRoZSBzYW1lIGNoYXJhY3RlciAnZScuICBBbm90aGVyCm1ldGhvZCB3b3VsZCBiZSB0byBsZWF2ZSBvdXQgYWxsIHZvd2Vscy4gIFNvbWUgY2hhcmFjdGVycyB0aGF0IHNvdW5kIG5lYXJseQp0aGUgc2FtZSBhbmQgYXJlIG9mdGVuIG1peGVkIHVwLCBzdWNoIGFzICdtJyBhbmQgJ24nLCBhcmUgbWFwcGVkIHRvIHRoZSBzYW1lCmNoYXJhY3Rlci4gIERvbid0IGRvIHRoaXMgdG9vIG11Y2gsIGFsbCB3b3JkcyB3aWxsIHN0YXJ0IGxvb2tpbmcgYWxpa2UuCgpDaGFyYWN0ZXJzIHRoYXQgZG8gbm90IGFwcGVhciBpbiBTT0ZPRlJPTSB3aWxsIGJlIGxlZnQgb3V0LCBleGNlcHQgdGhhdCBhbGwKd2hpdGUgc3BhY2UgaXMgcmVwbGFjZWQgYnkgb25lIHNwYWNlLiAgU2VxdWVuY2VzIG9mIHRoZSBzYW1lIGNoYXJhY3RlciBpbgpTT0ZPRlJPTSBhcmUgcmVwbGFjZWQgYnkgb25lLgoKWW91IGNhbiB1c2UgdGhlIHxzb3VuZGZvbGQoKXwgZnVuY3Rpb24gdG8gdHJ5IG91dCB0aGUgcmVzdWx0cy4gIE9yIHNldCB0aGUKJ3ZlcmJvc2UnIG9wdGlvbiB0byBzZWUgdGhlIHNjb3JlIGluIHRoZSBvdXRwdXQgb2YgdGhlIHx6PXwgY29tbWFuZC4KCgpVTlNVUFBPUlRFRCBJVEVNUwkJCQkqc3BlbGwtYWZmaXgtbm90LXN1cHBvcnRlZCoKClRoZXNlIGl0ZW1zIGFwcGVhciBpbiB0aGUgYWZmaXggZmlsZSBvZiBvdGhlciBzcGVsbCBjaGVja2Vycy4gIEluIFZpbSB0aGV5IGFyZQppZ25vcmVkLCBub3Qgc3VwcG9ydGVkIG9yIGRlZmluZWQgaW4gYW5vdGhlciB3YXkuCgpBQ0NFTlQJCShIdW5zcGVsbCkJCQkJKnNwZWxsLUFDQ0VOVCoKCQlVc2UgTUFQIGluc3RlYWQuIHxzcGVsbC1NQVB8CgpDSEVDS0NPTVBPVU5EQ0FTRSAgKEh1bnNwZWxsKQkJCSpzcGVsbC1DSEVDS0NPTVBPVU5EQ0FTRSoKCQlEaXNhbGxvdyB1cHBlcmNhc2UgbGV0dGVycyBhdCBjb21wb3VuZCB3b3JkIGJvdW5kYXJpZXMuCgkJTm90IHN1cHBvcnRlZC4KCkNIRUNLQ09NUE9VTkREVVAgIChIdW5zcGVsbCkJCQkqc3BlbGwtQ0hFQ0tDT01QT1VORERVUCoKCQlEaXNhbGxvdyB1c2luZyB0aGUgc2FtZSB3b3JkIHR3aWNlIGluIGEgY29tcG91bmQuICBOb3QKCQlzdXBwb3J0ZWQuCgpDSEVDS0NPTVBPVU5EUkVQICAoSHVuc3BlbGwpCQkJKnNwZWxsLUNIRUNLQ09NUE9VTkRSRVAqCgkJU29tZXRoaW5nIGFib3V0IHVzaW5nIFJFUCBpdGVtcyBhbmQgY29tcG91bmQgd29yZHMuICBOb3QKCQlzdXBwb3J0ZWQuCgpDSEVDS0NPTVBPVU5EVFJJUExFICAoSHVuc3BlbGwpCQkJKnNwZWxsLUNIRUNLQ09NUE9VTkRUUklQTEUqCgkJRm9yYmlkIHRocmVlIGlkZW50aWNhbCBjaGFyYWN0ZXJzIHdoZW4gY29tcG91bmRpbmcuICBOb3QKCQlzdXBwb3J0ZWQuCgpDSEVDS0NPTVBPVU5EUEFUVEVSTiAgKEh1bnNwZWxsKQkJKnNwZWxsLUNIRUNLQ09NUE9VTkRQQVRURVJOKgoJCUZvcmJpZCBjb21wb3VuZGluZyB3aGVuIHBhdHRlcm5zIG1hdGNoLiAgTm90IHN1cHBvcnRlZC4KCkNPTVBMRVhQUkVGSVhFUyAgKEh1bnNwZWxsKQkJCQkqc3BlbGwtQ09NUExFWFBSRUZJWEVTKgoJCUVuYWJsZXMgdXNpbmcgdHdvIHByZWZpeGVzLiAgTm90IHN1cHBvcnRlZC4KCkNPTVBPVU5ECShIdW5zcGVsbCkJCQkJKnNwZWxsLUNPTVBPVU5EKgoJCVRoaXMgaXMgb25lIGxpbmUgd2l0aCB0aGUgY291bnQgb2YgQ09NUE9VTkQgaXRlbXMsIGZvbGxvd2VkIGJ5CgkJdGhhdCBtYW55IENPTVBPVU5EIGxpbmVzIHdpdGggYSBwYXR0ZXJuLgoJCVJlbW92ZSB0aGUgZmlyc3QgbGluZSB3aXRoIHRoZSBjb3VudCBhbmQgcmVuYW1lIHRoZSBvdGhlcgoJCWl0ZW1zIHRvIENPTVBPVU5EUlVMRSB8c3BlbGwtQ09NUE9VTkRSVUxFfAoKQ09NUE9VTkRGSVJTVAkoSHVuc3BlbGwpCQkJCSpzcGVsbC1DT01QT1VOREZJUlNUKgoJCVVzZSBDT01QT1VORFJVTEUgaW5zdGVhZC4gfHNwZWxsLUNPTVBPVU5EUlVMRXwKCkNPTVBPVU5EQkVHSU4JKEh1bnNwZWxsKQkJCQkqc3BlbGwtQ09NUE9VTkRCRUdJTioKCQlVc2UgQ09NUE9VTkRSVUxFIGluc3RlYWQuIHxzcGVsbC1DT01QT1VORFJVTEV8CgpDT01QT1VOREVORAkoSHVuc3BlbGwpCQkJCSpzcGVsbC1DT01QT1VOREVORCoKCQlVc2UgQ09NUE9VTkRSVUxFIGluc3RlYWQuIHxzcGVsbC1DT01QT1VORFJVTEV8CgpDT01QT1VORE1JRERMRQkoSHVuc3BlbGwpCQkJCSpzcGVsbC1DT01QT1VORE1JRERMRSoKCQlVc2UgQ09NUE9VTkRSVUxFIGluc3RlYWQuIHxzcGVsbC1DT01QT1VORFJVTEV8CgpDT01QT1VORFNZTExBQkxFICAoSHVuc3BlbGwpCQkJKnNwZWxsLUNPTVBPVU5EU1lMTEFCTEUqCgkJVXNlIFNZTExBQkxFIGFuZCBDT01QT1VORFNZTE1BWCBpbnN0ZWFkLiB8c3BlbGwtU1lMTEFCTEV8CgkJfHNwZWxsLUNPTVBPVU5EU1lMTUFYfAoKRk9SQklEREVOV09SRAkoSHVuc3BlbGwpCQkJCSpzcGVsbC1GT1JCSURERU5XT1JEKgoJCVVzZSBCQUQgaW5zdGVhZC4gfHNwZWxsLUJBRHwKCkxBTkcJCShIdW5zcGVsbCkJCQkJKnNwZWxsLUxBTkcqCgkJVGhpcyBzcGVjaWZpZXMgbGFuZ3VhZ2Utc3BlY2lmaWMgYmVoYXZpb3IuICBUaGlzIGFjdHVhbGx5CgkJbW92ZXMgcGFydCBvZiB0aGUgbGFuZ3VhZ2Uga25vd2xlZGdlIGludG8gdGhlIHByb2dyYW0sCgkJdGhlcmVmb3JlIFZpbSBkb2VzIG5vdCBzdXBwb3J0IGl0LiAgRWFjaCBsYW5ndWFnZSBwcm9wZXJ0eQoJCW11c3QgYmUgc3BlY2lmaWVkIHNlcGFyYXRlbHkuCgpMRU1NQV9QUkVTRU5UCShIdW5zcGVsbCkJCQkJKnNwZWxsLUxFTU1BX1BSRVNFTlQqCgkJT25seSBuZWVkZWQgZm9yIG1vcnBob2xvZ2ljYWwgYW5hbHlzaXMuCgpNQVhOR1JBTVNVR1MJKEh1bnNwZWxsKQkJCQkqc3BlbGwtTUFYTkdSQU1TVUdTKgoJCU5vdCBzdXBwb3J0ZWQuCgpPTkxZSU5DT01QT1VORAkoSHVuc3BlbGwpCQkJCSpzcGVsbC1PTkxZSU5DT01QT1VORCoKCQlVc2UgTkVFRENPTVBPVU5EIGluc3RlYWQuIHxzcGVsbC1ORUVEQ09NUE9VTkR8CgpQU0VVRE9ST09UCShIdW5zcGVsbCkJCQkJKnNwZWxsLVBTRVVET1JPT1QqCgkJVXNlIE5FRURBRkZJWCBpbnN0ZWFkLiB8c3BlbGwtTkVFREFGRklYfAoKU1VHU1dJVEhET1RTCShIdW5zcGVsbCkJCQkJKnNwZWxsLVNVR1NXSVRIRE9UUyoKCQlBZGRzIGRvdHMgdG8gc3VnZ2VzdGlvbnMuICBWaW0gZG9lc24ndCBuZWVkIHRoaXMuCgpTWUxMQUJMRU5VTQkoSHVuc3BlbGwpCQkJCSpzcGVsbC1TWUxMQUJMRU5VTSoKCQlOb3Qgc3VwcG9ydGVkLgoKVFJZCQkoTXlzcGVsbCwgSHVuc3BlbGwsIG90aGVycykJCSpzcGVsbC1UUlkqCgkJVmltIGRvZXMgbm90IHVzZSB0aGUgVFJZIGl0ZW0sIGl0IGlzIGlnbm9yZWQuICBGb3IgbWFraW5nCgkJc3VnZ2VzdGlvbnMgdGhlIGFjdHVhbCBjaGFyYWN0ZXJzIGluIHRoZSB3b3JkcyBhcmUgdXNlZCwgdGhhdAoJCWlzIG11Y2ggbW9yZSBlZmZpY2llbnQuCgpXT1JEQ0hBUlMJKEh1bnNwZWxsKQkJCQkqc3BlbGwtV09SRENIQVJTKgoJCVVzZWQgdG8gcmVjb2duaXplIHdvcmRzLiAgVmltIGRvZXNuJ3QgbmVlZCBpdCwgYmVjYXVzZSB0aGVyZQoJCWlzIG5vIG5lZWQgdG8gc2VwYXJhdGUgd29yZHMgYmVmb3JlIGNoZWNraW5nIHRoZW0gKHVzaW5nIGEKCQl0cmllIGluc3RlYWQgb2YgYSBoYXNodGFibGUpLgoKIHZpbTp0dz03ODpzdz00OnRzPTg6ZnQ9aGVscDpub3JsOgo=