KnNwZWxsLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMi4gIExhc3QgY2hhbmdlOiAyMDA4IEp1biAyMQoKCgkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTAkgIGJ5IEJyYW0gTW9vbGVuYWFyCgoKU3BlbGwgY2hlY2tpbmcJCQkJCQkqc3BlbGwqCgoxLiBRdWljayBzdGFydAkJCXxzcGVsbC1xdWlja3N0YXJ0fAoyLiBSZW1hcmtzIG9uIHNwZWxsIGNoZWNraW5nCXxzcGVsbC1yZW1hcmtzfAozLiBHZW5lcmF0aW5nIGEgc3BlbGwgZmlsZQl8c3BlbGwtbWtzcGVsbHwKNC4gU3BlbGwgZmlsZSBmb3JtYXQJCXxzcGVsbC1maWxlLWZvcm1hdHwKCntWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBjb21tYW5kc30KClNwZWxsIGNoZWNraW5nIGlzIG5vdCBhdmFpbGFibGUgd2hlbiB0aGUgfCtzeW50YXh8IGZlYXR1cmUgaGFzIGJlZW4gZGlzYWJsZWQKYXQgY29tcGlsZSB0aW1lLgoKTm90ZTogVGhlcmUgYWxzbyBpcyBhIHZpbXNwZWxsIHBsdWdpbi4gIElmIHlvdSBoYXZlIGl0IHlvdSBjYW4gZG8gIjpoZWxwCnZpbXNwZWxsIiB0byBmaW5kIGFib3V0IGl0LiAgQnV0IHlvdSB3aWxsIHByb2JhYmx5IHdhbnQgdG8gZ2V0IHJpZCBvZiB0aGUKcGx1Z2luIGFuZCB1c2UgdGhlICdzcGVsbCcgb3B0aW9uIGluc3RlYWQsIGl0IHdvcmtzIGJldHRlci4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBRdWljayBzdGFydAkJCQkJKnNwZWxsLXF1aWNrc3RhcnQqICpFNzU2KgoKVGhpcyBjb21tYW5kIHN3aXRjaGVzIG9uIHNwZWxsIGNoZWNraW5nOiA+CgoJOnNldGxvY2FsIHNwZWxsIHNwZWxsbGFuZz1lbl91cwoKVGhpcyBzd2l0Y2hlcyBvbiB0aGUgJ3NwZWxsJyBvcHRpb24gYW5kIHNwZWNpZmllcyB0byBjaGVjayBmb3IgVVMgRW5nbGlzaC4KClRoZSB3b3JkcyB0aGF0IGFyZSBub3QgcmVjb2duaXplZCBhcmUgaGlnaGxpZ2h0ZWQgd2l0aCBvbmUgb2YgdGhlc2U6CglTcGVsbEJhZAl3b3JkIG5vdCByZWNvZ25pemVkCQkJfGhsLVNwZWxsQmFkfAoJU3BlbGxDYXAJd29yZCBub3QgY2FwaXRhbGlzZWQJCQl8aGwtU3BlbGxDYXB8CglTcGVsbFJhcmUJcmFyZSB3b3JkCQkJCXxobC1TcGVsbFJhcmV8CglTcGVsbExvY2FsCXdyb25nIHNwZWxsaW5nIGZvciBzZWxlY3RlZCByZWdpb24JfGhsLVNwZWxsTG9jYWx8CgpWaW0gb25seSBjaGVja3Mgd29yZHMgZm9yIHNwZWxsaW5nLCB0aGVyZSBpcyBubyBncmFtbWFyIGNoZWNrLgoKSWYgdGhlICdtb3VzZW1vZGVsJyBvcHRpb24gaXMgc2V0IHRvICJwb3B1cCIgYW5kIHRoZSBjdXJzb3IgaXMgb24gYSBiYWRseQpzcGVsbGVkIHdvcmQgb3IgaXQgaXMgInBvcHVwX3NldHBvcyIgYW5kIHRoZSBtb3VzZSBwb2ludGVyIGlzIG9uIGEgYmFkbHkKc3BlbGxlZCB3b3JkLCB0aGVuIHRoZSBwb3B1cCBtZW51IHdpbGwgY29udGFpbiBhIHN1Ym1lbnUgdG8gcmVwbGFjZSB0aGUgYmFkCndvcmQuICBOb3RlOiB0aGlzIHNsb3dzIGRvd24gdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIHBvcHVwIG1lbnUuICBOb3RlIGZvciBHVEs6CmRvbid0IHJlbGVhc2UgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiB1bnRpbCB0aGUgbWVudSBhcHBlYXJzLCBvdGhlcndpc2UgaXQKd29uJ3Qgd29yay4KClRvIHNlYXJjaCBmb3IgdGhlIG5leHQgbWlzc3BlbGxlZCB3b3JkOgoKCQkJCQkJCSpdcyoKXXMJCQlNb3ZlIHRvIG5leHQgbWlzc3BlbGxlZCB3b3JkIGFmdGVyIHRoZSBjdXJzb3IuCgkJCUEgY291bnQgYmVmb3JlIHRoZSBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHJlcGVhdC4KCQkJJ3dyYXBzY2FuJyBhcHBsaWVzLgoKCQkJCQkJCSpbcyoKW3MJCQlMaWtlICJdcyIgYnV0IHNlYXJjaCBiYWNrd2FyZHMsIGZpbmQgdGhlIG1pc3NwZWxsZWQKCQkJd29yZCBiZWZvcmUgdGhlIGN1cnNvci4gIERvZXNuJ3QgcmVjb2duaXplIHdvcmRzCgkJCXNwbGl0IG92ZXIgdHdvIGxpbmVzLCB0aHVzIG1heSBzdG9wIGF0IHdvcmRzIHRoYXQgYXJlCgkJCW5vdCBoaWdobGlnaHRlZCBhcyBiYWQuICBEb2VzIG5vdCBzdG9wIGF0IHdvcmQgd2l0aAoJCQltaXNzaW5nIGNhcGl0YWwgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZS4KCgkJCQkJCQkqXVMqCl1TCQkJTGlrZSAiXXMiIGJ1dCBvbmx5IHN0b3AgYXQgYmFkIHdvcmRzLCBub3QgYXQgcmFyZQoJCQl3b3JkcyBvciB3b3JkcyBmb3IgYW5vdGhlciByZWdpb24uCgoJCQkJCQkJKltTKgpbUwkJCUxpa2UgIl1TIiBidXQgc2VhcmNoIGJhY2t3YXJkcy4KCgpUbyBhZGQgd29yZHMgdG8geW91ciBvd24gd29yZCBsaXN0OgoKCQkJCQkJCSp6ZyoKemcJCQlBZGQgd29yZCB1bmRlciB0aGUgY3Vyc29yIGFzIGEgZ29vZCB3b3JkIHRvIHRoZSBmaXJzdAoJCQluYW1lIGluICdzcGVsbGZpbGUnLiAgQSBjb3VudCBtYXkgcHJlY2VkZSB0aGUgY29tbWFuZAoJCQl0byBpbmRpY2F0ZSB0aGUgZW50cnkgaW4gJ3NwZWxsZmlsZScgdG8gYmUgdXNlZC4gIEEKCQkJY291bnQgb2YgdHdvIHVzZXMgdGhlIHNlY29uZCBlbnRyeS4KCgkJCUluIFZpc3VhbCBtb2RlIHRoZSBzZWxlY3RlZCBjaGFyYWN0ZXJzIGFyZSBhZGRlZCBhcyBhCgkJCXdvcmQgKGluY2x1ZGluZyB3aGl0ZSBzcGFjZSEpLgoJCQlXaGVuIHRoZSBjdXJzb3IgaXMgb24gdGV4dCB0aGF0IGlzIG1hcmtlZCBhcyBiYWRseQoJCQlzcGVsbGVkIHRoZW4gdGhlIG1hcmtlZCB0ZXh0IGlzIHVzZWQuCgkJCU90aGVyd2lzZSB0aGUgd29yZCB1bmRlciB0aGUgY3Vyc29yLCBzZXBhcmF0ZWQgYnkKCQkJbm9uLXdvcmQgY2hhcmFjdGVycywgaXMgdXNlZC4KCgkJCUlmIHRoZSB3b3JkIGlzIGV4cGxpY2l0bHkgbWFya2VkIGFzIGJhZCB3b3JkIGluCgkJCWFub3RoZXIgc3BlbGwgZmlsZSB0aGUgcmVzdWx0IGlzIHVucHJlZGljdGFibGUuCgoJCQkJCQkJKnpHKgp6RwkJCUxpa2UgInpnIiBidXQgYWRkIHRoZSB3b3JkIHRvIHRoZSBpbnRlcm5hbCB3b3JkIGxpc3QKCQkJfGludGVybmFsLXdvcmRsaXN0fC4KCgkJCQkJCQkqencqCnp3CQkJTGlrZSAiemciIGJ1dCBtYXJrIHRoZSB3b3JkIGFzIGEgd3JvbmcgKGJhZCkgd29yZC4KCQkJSWYgdGhlIHdvcmQgYWxyZWFkeSBhcHBlYXJzIGluICdzcGVsbGZpbGUnIGl0IGlzCgkJCXR1cm5lZCBpbnRvIGEgY29tbWVudCBsaW5lLiAgU2VlIHxzcGVsbGZpbGUtY2xlYW51cHwKCQkJZm9yIGdldHRpbmcgcmlkIG9mIHRob3NlLgoKCQkJCQkJCSp6VyoKelcJCQlMaWtlICJ6dyIgYnV0IGFkZCB0aGUgd29yZCB0byB0aGUgaW50ZXJuYWwgd29yZCBsaXN0CgkJCXxpbnRlcm5hbC13b3JkbGlzdHwuCgp6dXcJCQkJCQkJKnp1ZyogKnp1dyoKenVnCQkJVW5kbyB8end8IGFuZCB8emd8LCByZW1vdmUgdGhlIHdvcmQgZnJvbSB0aGUgZW50cnkgaW4KCQkJJ3NwZWxsZmlsZScuICBDb3VudCB1c2VkIGFzIHdpdGggfHpnfC4KCnp1VwkJCQkJCQkqenVHKiAqenVXKgp6dUcJCQlVbmRvIHx6V3wgYW5kIHx6R3wsIHJlbW92ZSB0aGUgd29yZCBmcm9tIHRoZSBpbnRlcm5hbAoJCQl3b3JkIGxpc3QuICBDb3VudCB1c2VkIGFzIHdpdGggfHpnfC4KCgkJCQkJCQkqOnNwZSogKjpzcGVsbGdvb2QqCjpbY291bnRdc3BlW2xsZ29vZF0ge3dvcmR9CgkJCUFkZCB7d29yZH0gYXMgYSBnb29kIHdvcmQgdG8gJ3NwZWxsZmlsZScsIGxpa2Ugd2l0aAoJCQl8emd8LiAgV2l0aG91dCBjb3VudCB0aGUgZmlyc3QgbmFtZSBpcyB1c2VkLCB3aXRoIGEKCQkJY291bnQgb2YgdHdvIHRoZSBzZWNvbmQgZW50cnksIGV0Yy4KCjpzcGVbbGxnb29kXSEge3dvcmR9CUFkZCB7d29yZH0gYXMgYSBnb29kIHdvcmQgdG8gdGhlIGludGVybmFsIHdvcmQgbGlzdCwKCQkJbGlrZSB3aXRoIHx6R3wuCgoJCQkJCQkJKjpzcGVsbHcqICo6c3BlbGx3cm9uZyoKOltjb3VudF1zcGVsbHdbcm9uZ10ge3dvcmR9CgkJCUFkZCB7d29yZH0gYXMgYSB3cm9uZyAoYmFkKSB3b3JkIHRvICdzcGVsbGZpbGUnLCBhcwoJCQl3aXRoIHx6d3wuICBXaXRob3V0IGNvdW50IHRoZSBmaXJzdCBuYW1lIGlzIHVzZWQsIHdpdGgKCQkJYSBjb3VudCBvZiB0d28gdGhlIHNlY29uZCBlbnRyeSwgZXRjLgoKOnNwZWxsd1tyb25nXSEge3dvcmR9CUFkZCB7d29yZH0gYXMgYSB3cm9uZyAoYmFkKSB3b3JkIHRvIHRoZSBpbnRlcm5hbCB3b3JkCgkJCWxpc3QsIGxpa2Ugd2l0aCB8eld8LgoKOltjb3VudF1zcGVsbHVbbmRvXSB7d29yZH0JCQkJKjpzcGVsbHUqICo6c3BlbGx1bmRvKgoJCQlMaWtlIHx6dXd8LiAgW2NvdW50XSB1c2VkIGFzIHdpdGggfDpzcGVsbGdvb2R8LgoKOnNwZWxsdVtuZG9dISB7d29yZH0JTGlrZSB8enVXfC4gIFtjb3VudF0gdXNlZCBhcyB3aXRoIHw6c3BlbGxnb29kfC4KCgpBZnRlciBhZGRpbmcgYSB3b3JkIHRvICdzcGVsbGZpbGUnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmRzIGl0cyBhc3NvY2lhdGVkCiIuc3BsIiBmaWxlIHdpbGwgYXV0b21hdGljYWxseSBiZSB1cGRhdGVkIGFuZCByZWxvYWRlZC4gIElmIHlvdSBjaGFuZ2UKJ3NwZWxsZmlsZScgbWFudWFsbHkgeW91IG5lZWQgdG8gdXNlIHRoZSB8Om1rc3BlbGx8IGNvbW1hbmQuICBUaGlzIHNlcXVlbmNlIG9mCmNvbW1hbmRzIG1vc3RseSB3b3JrcyB3ZWxsOiA+Cgk6ZWRpdCA8ZmlsZSBpbiAnc3BlbGxmaWxlJz4KPAkobWFrZSBjaGFuZ2VzIHRvIHRoZSBzcGVsbCBmaWxlKSA+Cgk6bWtzcGVsbCEgJQoKTW9yZSBkZXRhaWxzIGFib3V0IHRoZSAnc3BlbGxmaWxlJyBmb3JtYXQgYmVsb3cgfHNwZWxsLXdvcmRsaXN0LWZvcm1hdHwuCgoJCQkJCQkJKmludGVybmFsLXdvcmRsaXN0KgpUaGUgaW50ZXJuYWwgd29yZCBsaXN0IGlzIHVzZWQgZm9yIGFsbCBidWZmZXJzIHdoZXJlICdzcGVsbCcgaXMgc2V0LiAgSXQgaXMKbm90IHN0b3JlZCwgaXQgaXMgbG9zdCB3aGVuIHlvdSBleGl0IFZpbS4gIEl0IGlzIGFsc28gY2xlYXJlZCB3aGVuICdlbmNvZGluZycKaXMgc2V0LgoKCkZpbmRpbmcgc3VnZ2VzdGlvbnMgZm9yIGJhZCB3b3JkczoKCQkJCQkJCSp6PSoKej0JCQlGb3IgdGhlIHdvcmQgdW5kZXIvYWZ0ZXIgdGhlIGN1cnNvciBzdWdnZXN0IGNvcnJlY3RseQoJCQlzcGVsbGVkIHdvcmRzLiAgVGhpcyBhbHNvIHdvcmtzIHRvIGZpbmQgYWx0ZXJuYXRpdmVzCgkJCWZvciBhIHdvcmQgdGhhdCBpcyBub3QgaGlnaGxpZ2h0ZWQgYXMgYSBiYWQgd29yZCwKCQkJZS5nLiwgd2hlbiB0aGUgd29yZCBhZnRlciBpdCBpcyBiYWQuCgkJCUluIFZpc3VhbCBtb2RlIHRoZSBoaWdobGlnaHRlZCB0ZXh0IGlzIHRha2VuIGFzIHRoZQoJCQl3b3JkIHRvIGJlIHJlcGxhY2VkLgoJCQlUaGUgcmVzdWx0cyBhcmUgc29ydGVkIG9uIHNpbWlsYXJpdHkgdG8gdGhlIHdvcmQgYmVpbmcKCQkJcmVwbGFjZWQuCgkJCVRoaXMgbWF5IHRha2UgYSBsb25nIHRpbWUuICBIaXQgQ1RSTC1DIHdoZW4geW91IGdldAoJCQlib3JlZC4KCgkJCUlmIHRoZSBjb21tYW5kIGlzIHVzZWQgd2l0aG91dCBhIGNvdW50IHRoZQoJCQlhbHRlcm5hdGl2ZXMgYXJlIGxpc3RlZCBhbmQgeW91IGNhbiBlbnRlciB0aGUgbnVtYmVyCgkJCW9mIHlvdXIgY2hvaWNlIG9yIHByZXNzIDxFbnRlcj4gaWYgeW91IGRvbid0IHdhbnQgdG8KCQkJcmVwbGFjZS4gIFlvdSBjYW4gYWxzbyB1c2UgdGhlIG1vdXNlIHRvIGNsaWNrIG9uIHlvdXIKCQkJY2hvaWNlIChvbmx5IHdvcmtzIGlmIHRoZSBtb3VzZSBjYW4gYmUgdXNlZCBpbiBOb3JtYWwKCQkJbW9kZSBhbmQgd2hlbiB0aGVyZSBhcmUgbm8gbGluZSB3cmFwcykuICBDbGljayBvbiB0aGUKCQkJZmlyc3QgbGluZSAodGhlIGhlYWRlcikgdG8gY2FuY2VsLgoKCQkJVGhlIHN1Z2dlc3Rpb25zIGxpc3RlZCBub3JtYWxseSByZXBsYWNlIGEgaGlnaGxpZ2h0ZWQKCQkJYmFkIHdvcmQuICBTb21ldGltZXMgdGhleSBpbmNsdWRlIG90aGVyIHRleHQsIGluIHRoYXQKCQkJY2FzZSB0aGUgcmVwbGFjZWQgdGV4dCBpcyBhbHNvIGxpc3RlZCBhZnRlciBhICI8Ii4KCgkJCUlmIGEgY291bnQgaXMgdXNlZCB0aGF0IHN1Z2dlc3Rpb24gaXMgdXNlZCwgd2l0aG91dAoJCQlwcm9tcHRpbmcuICBGb3IgZXhhbXBsZSwgIjF6PSIgYWx3YXlzIHRha2VzIHRoZSBmaXJzdAoJCQlzdWdnZXN0aW9uLgoKCQkJSWYgJ3ZlcmJvc2UnIGlzIG5vbi16ZXJvIGEgc2NvcmUgd2lsbCBiZSBkaXNwbGF5ZWQKCQkJd2l0aCB0aGUgc3VnZ2VzdGlvbnMgdG8gaW5kaWNhdGUgdGhlIGxpa2VsaW5lc3MgdG8gdGhlCgkJCWJhZGx5IHNwZWxsZWQgd29yZCAodGhlIGhpZ2hlciB0aGUgc2NvcmUgdGhlIG1vcmUKCQkJZGlmZmVyZW50KS4KCQkJV2hlbiBhIHdvcmQgd2FzIHJlcGxhY2VkIHRoZSByZWRvIGNvbW1hbmQgIi4iIHdpbGwKCQkJcmVwZWF0IHRoZSB3b3JkIHJlcGxhY2VtZW50LiAgVGhpcyB3b3JrcyBsaWtlICJjaXciLAoJCQl0aGUgZ29vZCB3b3JkIGFuZCA8RXNjPi4gIFRoaXMgZG9lcyBOT1Qgd29yayBmb3IgVGhhaQoJCQlhbmQgb3RoZXIgbGFuZ3VhZ2VzIHdpdGhvdXQgc3BhY2VzIGJldHdlZW4gd29yZHMuCgoJCQkJCSo6c3BlbGxyKiAqOnNwZWxscmVwYWxsKiAqRTc1MiogKkU3NTMqCjpzcGVsbHJbZXBhbGxdCQlSZXBlYXQgdGhlIHJlcGxhY2VtZW50IGRvbmUgYnkgfHo9fCBmb3IgYWxsIG1hdGNoZXMKCQkJd2l0aCB0aGUgcmVwbGFjZWQgd29yZCBpbiB0aGUgY3VycmVudCB3aW5kb3cuCgpJbiBJbnNlcnQgbW9kZSwgd2hlbiB0aGUgY3Vyc29yIGlzIGFmdGVyIGEgYmFkbHkgc3BlbGxlZCB3b3JkLCB5b3UgY2FuIHVzZQpDVFJMLVggcyB0byBmaW5kIHN1Z2dlc3Rpb25zLiAgVGhpcyB3b3JrcyBsaWtlIEluc2VydCBtb2RlIGNvbXBsZXRpb24uICBVc2UKQ1RSTC1OIHRvIHVzZSB0aGUgbmV4dCBzdWdnZXN0aW9uLCBDVFJMLVAgdG8gZ28gYmFjay4gfGlfQ1RSTC1YX3N8CgpUaGUgJ3NwZWxsc3VnZ2VzdCcgb3B0aW9uIGluZmx1ZW5jZXMgaG93IHRoZSBsaXN0IG9mIHN1Z2dlc3Rpb25zIGlzIGdlbmVyYXRlZAphbmQgc29ydGVkLiAgU2VlIHwnc3BlbGxzdWdnZXN0J3wuCgpUaGUgJ3NwZWxsY2FwY2hlY2snIG9wdGlvbiBpcyB1c2VkIHRvIGNoZWNrIHRoZSBmaXJzdCB3b3JkIG9mIGEgc2VudGVuY2UKc3RhcnRzIHdpdGggYSBjYXBpdGFsLiAgVGhpcyBkb2Vzbid0IHdvcmsgZm9yIHRoZSBmaXJzdCB3b3JkIGluIHRoZSBmaWxlLgpXaGVuIHRoZXJlIGlzIGEgbGluZSBicmVhayByaWdodCBhZnRlciBhIHNlbnRlbmNlIHRoZSBoaWdobGlnaHRpbmcgb2YgdGhlIG5leHQKbGluZSBtYXkgYmUgcG9zdHBvbmVkLiAgVXNlIHxDVFJMLUx8IHdoZW4gbmVlZGVkLiAgQWxzbyBzZWUgfHNldC1zcGMtYXV0b3wgZm9yCmhvdyBpdCBjYW4gYmUgc2V0IGF1dG9tYXRpY2FsbHkgd2hlbiAnc3BlbGxsYW5nJyBpcyBzZXQuCgpWaW0gY291bnRzIHRoZSBudW1iZXIgb2YgdGltZXMgYSBnb29kIHdvcmQgaXMgZW5jb3VudGVyZWQuICBUaGlzIGlzIHVzZWQgdG8Kc29ydCB0aGUgc3VnZ2VzdGlvbnM6IHdvcmRzIHRoYXQgaGF2ZSBiZWVuIHNlZW4gYmVmb3JlIGdldCBhIHNtYWxsIGJvbnVzLAp3b3JkcyB0aGF0IGhhdmUgYmVlbiBzZWVuIG9mdGVuIGdldCBhIGJpZ2dlciBib251cy4gIFRoZSBDT01NT04gaXRlbSBpbiB0aGUKYWZmaXggZmlsZSBjYW4gYmUgdXNlZCB0byBkZWZpbmUgY29tbW9uIHdvcmRzLCBzbyB0aGF0IHRoaXMgbWVjaGFuaXNtIGFsc28Kd29ya3MgaW4gYSBuZXcgb3Igc2hvcnQgZmlsZSB8c3BlbGwtQ09NTU9OfC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBSZW1hcmtzIG9uIHNwZWxsIGNoZWNraW5nCQkJCSpzcGVsbC1yZW1hcmtzKgoKUEVSRk9STUFOQ0UKClZpbSBkb2VzIG9uLXRoZS1mbHkgc3BlbGwgY2hlY2tpbmcuICBUbyBtYWtlIHRoaXMgd29yayBmYXN0IHRoZSB3b3JkIGxpc3QgaXMKbG9hZGVkIGluIG1lbW9yeS4gIFRodXMgdGhpcyB1c2VzIGEgbG90IG9mIG1lbW9yeSAoMSBNYnl0ZSBvciBtb3JlKS4gIFRoZXJlCm1pZ2h0IGFsc28gYmUgYSBub3RpY2VhYmxlIGRlbGF5IHdoZW4gdGhlIHdvcmQgbGlzdCBpcyBsb2FkZWQsIHdoaWNoIGhhcHBlbnMKd2hlbiAnc3BlbGwnIGlzIHNldCBhbmQgd2hlbiAnc3BlbGxsYW5nJyBpcyBzZXQgd2hpbGUgJ3NwZWxsJyB3YXMgYWxyZWFkeSBzZXQuClRvIG1pbmltaXplIHRoZSBkZWxheSBlYWNoIHdvcmQgbGlzdCBpcyBvbmx5IGxvYWRlZCBvbmNlLCBpdCBpcyBub3QgZGVsZXRlZAp3aGVuICdzcGVsbGxhbmcnIGlzIG1hZGUgZW1wdHkgb3IgJ3NwZWxsJyBpcyByZXNldC4gIFdoZW4gJ2VuY29kaW5nJyBpcyBzZXQKYWxsIHRoZSB3b3JkIGxpc3RzIGFyZSByZWxvYWRlZCwgdGh1cyB5b3UgbWF5IG5vdGljZSBhIGRlbGF5IHRoZW4gdG9vLgoKClJFR0lPTlMKCkEgd29yZCBtYXkgYmUgc3BlbGxlZCBkaWZmZXJlbnRseSBpbiB2YXJpb3VzIHJlZ2lvbnMuICBGb3IgZXhhbXBsZSwgRW5nbGlzaApjb21lcyBpbiAoYXQgbGVhc3QpIHRoZXNlIHZhcmlhbnRzOgoKCWVuCQlhbGwgcmVnaW9ucwoJZW5fYXUJCUF1c3RyYWxpYQoJZW5fY2EJCUNhbmFkYQoJZW5fZ2IJCUdyZWF0IEJyaXRhaW4KCWVuX256CQlOZXcgWmVhbGFuZAoJZW5fdXMJCVVTQQoKV29yZHMgdGhhdCBhcmUgbm90IHVzZWQgaW4gb25lIHJlZ2lvbiBidXQgYXJlIHVzZWQgaW4gYW5vdGhlciByZWdpb24gYXJlCmhpZ2hsaWdodGVkIHdpdGggU3BlbGxMb2NhbCB8aGwtU3BlbGxMb2NhbHwuCgpBbHdheXMgdXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciB0aGUgbGFuZ3VhZ2UgYW5kIHJlZ2lvbiBuYW1lcy4KCldoZW4gYWRkaW5nIGEgd29yZCB3aXRoIHx6Z3wgb3IgYW5vdGhlciBjb21tYW5kIGl0J3MgYWx3YXlzIGFkZGVkIGZvciBhbGwKcmVnaW9ucy4gIFlvdSBjYW4gY2hhbmdlIHRoYXQgYnkgbWFudWFsbHkgZWRpdGluZyB0aGUgJ3NwZWxsZmlsZScuICBTZWUKfHNwZWxsLXdvcmRsaXN0LWZvcm1hdHwuICBOb3RlIHRoYXQgdGhlIHJlZ2lvbnMgYXMgc3BlY2lmaWVkIGluIHRoZSBmaWxlcyBpbgonc3BlbGxmaWxlJyBhcmUgb25seSB1c2VkIHdoZW4gYWxsIGVudHJpZXMgaW4gJ3NwZWxsbGFuZycgc3BlY2lmeSB0aGUgc2FtZQpyZWdpb24gKG5vdCBjb3VudGluZyBmaWxlcyBzcGVjaWZpZWQgYnkgdGhlaXIgLnNwbCBuYW1lKS4KCgkJCQkJCQkqc3BlbGwtZ2VybWFuKgpTcGVjaWZpYyBleGNlcHRpb246IEZvciBHZXJtYW4gdGhlc2Ugc3BlY2lhbCByZWdpb25zIGFyZSB1c2VkOgoJZGUJCWFsbCBHZXJtYW4gd29yZHMgYWNjZXB0ZWQKCWRlX2RlCQlvbGQgYW5kIG5ldyBzcGVsbGluZwoJZGVfMTkJCW9sZCBzcGVsbGluZwoJZGVfMjAJCW5ldyBzcGVsbGluZwoJZGVfYXQJCUF1c3RyaWEKCWRlX2NoCQlTd2l0emVybGFuZAoKCQkJCQkJCSpzcGVsbC1ydXNzaWFuKgpTcGVjaWZpYyBleGNlcHRpb246IEZvciBSdXNzaWFuIHRoZXNlIHNwZWNpYWwgcmVnaW9ucyBhcmUgdXNlZDoKCXJ1CQlhbGwgUnVzc2lhbiB3b3JkcyBhY2NlcHRlZAoJcnVfcnUJCSJJRSIgbGV0dGVyIHNwZWxsaW5nCglydV95bwkJIllPIiBsZXR0ZXIgc3BlbGxpbmcKCgkJCQkJCQkqc3BlbGwteWlkZGlzaCoKWWlkZGlzaCByZXF1aXJlcyB1c2luZyAidXRmLTgiIGVuY29kaW5nLCBiZWNhdXNlIG9mIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMKdXNlZC4gIElmIHlvdSBhcmUgdXNpbmcgbGF0aW4xIFZpbSB3aWxsIHVzZSB0cmFuc2xpdGVyYXRlZCAocm9tYW5pemVkKSBZaWRkaXNoCmluc3RlYWQuICBJZiB5b3Ugd2FudCB0byB1c2UgdHJhbnNsaXRlcmF0ZWQgWWlkZGlzaCB3aXRoIHV0Zi04IHVzZSAieWktdHIiLgpJbiBhIHRhYmxlOgoJJ2VuY29kaW5nJwknc3BlbGxsYW5nJwoJdXRmLTgJCXlpCQlZaWRkaXNoCglsYXRpbjEJCXlpCQl0cmFuc2xpdGVyYXRlZCBZaWRkaXNoCgl1dGYtOAkJeWktdHIJCXRyYW5zbGl0ZXJhdGVkIFlpZGRpc2gKCgpTUEVMTCBGSUxFUwkJCQkJCSpzcGVsbC1sb2FkKgoKVmltIHNlYXJjaGVzIGZvciBzcGVsbCBmaWxlcyBpbiB0aGUgInNwZWxsIiBzdWJkaXJlY3Rvcnkgb2YgdGhlIGRpcmVjdG9yaWVzIGluCidydW50aW1lcGF0aCcuICBUaGUgbmFtZSBpczogTEwuRUVFLnNwbCwgd2hlcmU6CglMTAl0aGUgbGFuZ3VhZ2UgbmFtZQoJRUVFCXRoZSB2YWx1ZSBvZiAnZW5jb2RpbmcnCgpUaGUgdmFsdWUgZm9yICJMTCIgY29tZXMgZnJvbSAnc3BlbGxsYW5nJywgYnV0IGV4Y2x1ZGVzIHRoZSByZWdpb24gbmFtZS4KRXhhbXBsZXM6Cgknc3BlbGxsYW5nJwlMTCB+Cgllbl91cwkJZW4KCWVuLXJhcmUJCWVuLXJhcmUKCW1lZGljYWxfY2EJbWVkaWNhbAoKT25seSB0aGUgZmlyc3QgZmlsZSBpcyBsb2FkZWQsIHRoZSBvbmUgdGhhdCBpcyBmaXJzdCBpbiAncnVudGltZXBhdGgnLiAgSWYKdGhpcyBzdWNjZWVkcyB0aGVuIGFkZGl0aW9uYWxseSBmaWxlcyB3aXRoIHRoZSBuYW1lIExMLkVFRS5hZGQuc3BsIGFyZSBsb2FkZWQuCkFsbCB0aGUgb25lcyB0aGF0IGFyZSBmb3VuZCBhcmUgdXNlZC4KCklmIG5vIHNwZWxsIGZpbGUgaXMgZm91bmQgdGhlIHxTcGVsbEZpbGVNaXNzaW5nfCBhdXRvY29tbWFuZCBldmVudCBpcwp0cmlnZ2VyZWQuICBUaGlzIG1heSB0cmlnZ2VyIHRoZSB8c3BlbGxmaWxlLnZpbXwgcGx1Z2luIHRvIG9mZmVyIHlvdQpkb3dubG9hZGluZyB0aGUgc3BlbGwgZmlsZS4KCkFkZGl0aW9uYWxseSwgdGhlIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIG5hbWVzIGluICdzcGVsbGZpbGUnIGFyZSBsb2FkZWQuICBUaGVzZQphcmUgdGhlIGZpbGVzIHRoYXQgfHpnfCBhbmQgfHp3fCBhZGQgZ29vZCBhbmQgd3Jvbmcgd29yZHMgdG8uCgpFeGNlcHRpb25zOgotIFZpbSB1c2VzICJsYXRpbjEiIHdoZW4gJ2VuY29kaW5nJyBpcyAiaXNvLTg4NTktMTUiLiAgVGhlIGV1cm8gc2lnbiBkb2Vzbid0CiAgbWF0dGVyIGZvciBzcGVsbGluZy4KLSBXaGVuIG5vIHNwZWxsIGZpbGUgZm9yICdlbmNvZGluZycgaXMgZm91bmQgImFzY2lpIiBpcyB0cmllZC4gIFRoaXMgb25seQogIHdvcmtzIGZvciBsYW5ndWFnZXMgd2hlcmUgbmVhcmx5IGFsbCB3b3JkcyBhcmUgQVNDSUksIHN1Y2ggYXMgRW5nbGlzaC4gIEl0CiAgaGVscHMgd2hlbiAnZW5jb2RpbmcnIGlzIG5vdCAibGF0aW4xIiwgc3VjaCBhcyBpc28tODg1OS0yLCBhbmQgRW5nbGlzaCB0ZXh0CiAgaXMgYmVpbmcgZWRpdGVkLiAgRm9yIHRoZSAiLmFkZCIgZmlsZXMgdGhlIHNhbWUgbmFtZSBhcyB0aGUgZm91bmQgbWFpbgogIHNwZWxsIGZpbGUgaXMgdXNlZC4KCkZvciBleGFtcGxlLCB3aXRoIHRoZXNlIHZhbHVlczoKCSdydW50aW1lcGF0aCcgaXMgIn4vLnZpbSwvdXNyL3NoYXJlL3ZpbTcwLH4vLnZpbS9hZnRlciIKCSdlbmNvZGluZycgICAgaXMgImlzby04ODU5LTIiCgknc3BlbGxsYW5nJyAgIGlzICJwbCIKClZpbSB3aWxsIGxvb2sgZm9yOgoxLiB+Ly52aW0vc3BlbGwvcGwuaXNvLTg4NTktMi5zcGwKMi4gL3Vzci9zaGFyZS92aW03MC9zcGVsbC9wbC5pc28tODg1OS0yLnNwbAozLiB+Ly52aW0vc3BlbGwvcGwuaXNvLTg4NTktMi5hZGQuc3BsCjQuIC91c3Ivc2hhcmUvdmltNzAvc3BlbGwvcGwuaXNvLTg4NTktMi5hZGQuc3BsCjUuIH4vLnZpbS9hZnRlci9zcGVsbC9wbC5pc28tODg1OS0yLmFkZC5zcGwKClRoaXMgYXNzdW1lcyAxLiBpcyBub3QgZm91bmQgYW5kIDIuIGlzIGZvdW5kLgoKSWYgJ2VuY29kaW5nJyBpcyAibGF0aW4xIiBWaW0gd2lsbCBsb29rIGZvcjoKMS4gfi8udmltL3NwZWxsL3BsLmxhdGluMS5zcGwKMi4gL3Vzci9zaGFyZS92aW03MC9zcGVsbC9wbC5sYXRpbjEuc3BsCjMuIH4vLnZpbS9hZnRlci9zcGVsbC9wbC5sYXRpbjEuc3BsCjQuIH4vLnZpbS9zcGVsbC9wbC5hc2NpaS5zcGwKNS4gL3Vzci9zaGFyZS92aW03MC9zcGVsbC9wbC5hc2NpaS5zcGwKNi4gfi8udmltL2FmdGVyL3NwZWxsL3BsLmFzY2lpLnNwbAoKVGhpcyBhc3N1bWVzIG5vbmUgb2YgdGhlbSBhcmUgZm91bmQgKFBvbGlzaCBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2hlbiBsZWF2aW5nCm91dCB0aGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMpLgoKU3BlbGxpbmcgZm9yIEVCQ0RJQyBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4KCkEgc3BlbGwgZmlsZSBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50ICdlbmNvZGluZycuICBTZWUKfHNwZWxsLW1rc3BlbGx8IGFib3V0IGhvdyB0byBjcmVhdGUgYSBzcGVsbCBmaWxlLiAgQ29udmVydGluZyBhIHNwZWxsIGZpbGUKd2l0aCAiaWNvbnYiIHdpbGwgTk9UIHdvcmshCgoJCQkJCQkgICAgKnNwZWxsLXN1Zy1maWxlKiAqRTc4MSoKSWYgdGhlcmUgaXMgYSBmaWxlIHdpdGggZXhhY3RseSB0aGUgc2FtZSBuYW1lIGFzIHRoZSAiLnNwbCIgZmlsZSBidXQgZW5kaW5nIGluCiIuc3VnIiwgdGhhdCBmaWxlIHdpbGwgYmUgdXNlZCBmb3IgZ2l2aW5nIGJldHRlciBzdWdnZXN0aW9ucy4gIEl0IGlzbid0IGxvYWRlZApiZWZvcmUgc3VnZ2VzdGlvbnMgYXJlIG1hZGUgdG8gcmVkdWNlIG1lbW9yeSB1c2UuCgoJCQkJICAgICpFNzU4KiAqRTc1OSogKkU3NzgqICpFNzc5KiAqRTc4MCogKkU3ODIqCldoZW4gbG9hZGluZyBhIHNwZWxsIGZpbGUgVmltIGNoZWNrcyB0aGF0IGl0IGlzIHByb3Blcmx5IGZvcm1hdHRlZC4gIElmIHlvdQpnZXQgYW4gZXJyb3IgdGhlIGZpbGUgbWF5IGJlIHRydW5jYXRlZCwgbW9kaWZpZWQgb3IgaW50ZW5kZWQgZm9yIGFub3RoZXIgVmltCnZlcnNpb24uCgoKU1BFTExGSUxFIENMRUFOVVAJCQkJCSpzcGVsbGZpbGUtY2xlYW51cCoKClRoZSB8end8IGNvbW1hbmQgdHVybnMgZXhpc3RpbmcgZW50cmllcyBpbiAnc3BlbGxmaWxlJyBpbnRvIGNvbW1lbnQgbGluZXMuClRoaXMgYXZvaWRzIGhhdmluZyB0byB3cml0ZSBhIG5ldyBmaWxlIGV2ZXJ5IHRpbWUsIGJ1dCByZXN1bHRzIGluIHRoZSBmaWxlCm9ubHkgZ2V0dGluZyBsb25nZXIsIG5ldmVyIHNob3J0ZXIuICBUbyBjbGVhbiB1cCB0aGUgY29tbWVudCBsaW5lcyBpbiBhbGwKIi5hZGQiIHNwZWxsIGZpbGVzIGRvIHRoaXM6ID4KCTpydW50aW1lIHNwZWxsL2NsZWFuYWRkLnZpbQoKVGhpcyBkZWxldGVzIGFsbCBjb21tZW50IGxpbmVzLCBleGNlcHQgdGhlIG9uZXMgdGhhdCBzdGFydCB3aXRoICIjIyIuICBVc2UKIiMjIiBsaW5lcyB0byBhZGQgY29tbWVudHMgdGhhdCB5b3Ugd2FudCB0byBrZWVwLgoKWW91IGNhbiBpbnZva2UgdGhpcyBzY3JpcHQgYXMgb2Z0ZW4gYXMgeW91IGxpa2UuICBBIHZhcmlhYmxlIGlzIHByb3ZpZGVkIHRvCnNraXAgdXBkYXRpbmcgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCByZWNlbnRseS4gIFNldCBpdCB0byB0aGUgbnVtYmVyIG9mCnNlY29uZHMgdGhhdCBoYXMgcGFzc2VkIHNpbmNlIGEgZmlsZSB3YXMgY2hhbmdlZCBiZWZvcmUgaXQgd2lsbCBiZSBjbGVhbmVkLgpGb3IgZXhhbXBsZSwgdG8gY2xlYW4gb25seSBmaWxlcyB0aGF0IHdlcmUgbm90IGNoYW5nZWQgaW4gdGhlIGxhc3QgaG91cjogPgogICAgICBsZXQgZzpzcGVsbF9jbGVhbl9saW1pdCA9IDYwICogNjAKVGhlIGRlZmF1bHQgaXMgb25lIHNlY29uZC4KCgpXT1JEUwoKVmltIHVzZXMgYSBmaXhlZCBtZXRob2QgdG8gcmVjb2duaXplIGEgd29yZC4gIFRoaXMgaXMgaW5kZXBlbmRlbnQgb2YKJ2lza2V5d29yZCcsIHNvIHRoYXQgaXQgYWxzbyB3b3JrcyBpbiBoZWxwIGZpbGVzIGFuZCBmb3IgbGFuZ3VhZ2VzIHRoYXQKaW5jbHVkZSBjaGFyYWN0ZXJzIGxpa2UgJy0nIGluICdpc2tleXdvcmQnLiAgVGhlIHdvcmQgY2hhcmFjdGVycyBkbyBkZXBlbmQgb24KJ2VuY29kaW5nJy4KClRoZSB0YWJsZSB3aXRoIHdvcmQgY2hhcmFjdGVycyBpcyBzdG9yZWQgaW4gdGhlIG1haW4gLnNwbCBmaWxlLiAgVGhlcmVmb3JlIGl0Cm1hdHRlcnMgd2hhdCB0aGUgY3VycmVudCBsb2NhbGUgaXMgd2hlbiBnZW5lcmF0aW5nIGl0ISAgQSAuYWRkLnNwbCBmaWxlIGRvZXMKbm90IGNvbnRhaW4gYSB3b3JkIHRhYmxlIHRob3VnaC4KCkZvciBhIHdvcmQgdGhhdCBzdGFydHMgd2l0aCBhIGRpZ2l0IHRoZSBkaWdpdCBpcyBpZ25vcmVkLCB1bmxlc3MgdGhlIHdvcmQgYXMgYQp3aG9sZSBpcyByZWNvZ25pemVkLiAgVGh1cyBpZiAiM0QiIGlzIGEgd29yZCBhbmQgIkQiIGlzIG5vdCB0aGVuICIzRCIgaXMKcmVjb2duaXplZCBhcyBhIHdvcmQsIGJ1dCBpZiAiM0QiIGlzIG5vdCBhIHdvcmQgdGhlbiBvbmx5IHRoZSAiRCIgaXMgbWFya2VkIGFzCmJhZC4gIEhleCBudW1iZXJzIGluIHRoZSBmb3JtIDB4MTJhYiBhbmQgMFgxMkFCIGFyZSByZWNvZ25pemVkLgoKCldPUkQgQ09NQklOQVRJT05TCgpJdCBpcyBwb3NzaWJsZSB0byBzcGVsbC1jaGVjayB3b3JkcyB0aGF0IGluY2x1ZGUgYSBzcGFjZS4gIFRoaXMgaXMgdXNlZCB0bwpyZWNvZ25pemUgd29yZHMgdGhhdCBhcmUgaW52YWxpZCB3aGVuIHVzZWQgYnkgdGhlbXNlbHZlcywgZS5nLiBmb3IgImV0IGFsLiIuCkl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gcmVjb2duaXplICJ0aGUgdGhlIiBhbmQgaGlnaGxpZ2h0IGl0LgoKVGhlIG51bWJlciBvZiBzcGFjZXMgaXMgaXJyZWxldmFudC4gIEluIG1vc3QgY2FzZXMgYSBsaW5lIGJyZWFrIG1heSBhbHNvCmFwcGVhci4gIEhvd2V2ZXIsIHRoaXMgbWFrZXMgaXQgZGlmZmljdWx0IHRvIGZpbmQgb3V0IHdoZXJlIHRvIHN0YXJ0IGNoZWNraW5nCmZvciBzcGVsbGluZyBtaXN0YWtlcy4gIFdoZW4geW91IG1ha2UgYSBjaGFuZ2UgdG8gb25lIGxpbmUgYW5kIG9ubHkgdGhhdCBsaW5lCmlzIHJlZHJhd24gVmltIHdvbid0IGxvb2sgaW4gdGhlIHByZXZpb3VzIGxpbmUsIHRodXMgd2hlbiAiZXQiIGlzIGF0IHRoZSBlbmQKb2YgdGhlIHByZXZpb3VzIGxpbmUgImFsLiIgd2lsbCBiZSBmbGFnZ2VkIGFzIGFuIGVycm9yLiAgQW5kIHdoZW4geW91IHR5cGUKInRoZTxDUj50aGUiIHRoZSBoaWdobGlnaHRpbmcgZG9lc24ndCBhcHBlYXIgdW50aWwgdGhlIGZpcnN0IGxpbmUgaXMgcmVkcmF3bi4KVXNlIHxDVFJMLUx8IHRvIHJlZHJhdyByaWdodCBhd2F5LiAgIltzIiB3aWxsIGFsc28gc3RvcCBhdCBhIHdvcmQgY29tYmluYXRpb24Kd2l0aCBhIGxpbmUgYnJlYWsuCgpXaGVuIGVuY291bnRlcmluZyBhIGxpbmUgYnJlYWsgVmltIHNraXBzIGNoYXJhY3RlcnMgc3VjaCBhcyAnKicsICc+JyBhbmQgJyInLApzbyB0aGF0IGNvbW1lbnRzIGluIEMsIHNoZWxsIGFuZCBWaW0gY29kZSBjYW4gYmUgc3BlbGwgY2hlY2tlZC4KCgpTWU5UQVggSElHSExJR0hUSU5HCQkJCQkqc3BlbGwtc3ludGF4KgoKRmlsZXMgdGhhdCB1c2Ugc3ludGF4IGhpZ2hsaWdodGluZyBjYW4gc3BlY2lmeSB3aGVyZSBzcGVsbCBjaGVja2luZyBzaG91bGQgYmUKZG9uZToKCjEuICBldmVyeXdoZXJlCQkJICAgZGVmYXVsdAoyLiAgaW4gc3BlY2lmaWMgaXRlbXMJCSAgIHVzZSAiY29udGFpbnM9QFNwZWxsIgozLiAgZXZlcnl3aGVyZSBidXQgc3BlY2lmaWMgaXRlbXMgIHVzZSAiY29udGFpbnM9QE5vU3BlbGwiCgpGb3IgdGhlIHNlY29uZCBtZXRob2QgYWRkaW5nIHRoZSBATm9TcGVsbCBjbHVzdGVyIHdpbGwgZGlzYWJsZSBzcGVsbCBjaGVja2luZwphZ2Fpbi4gIFRoaXMgY2FuIGJlIHVzZWQsIGZvciBleGFtcGxlLCB0byBhZGQgQFNwZWxsIHRvIHRoZSBjb21tZW50cyBvZiBhCnByb2dyYW0sIGFuZCBhZGQgQE5vU3BlbGwgZm9yIGl0ZW1zIHRoYXQgc2hvdWxkbid0IGJlIGNoZWNrZWQuCkFsc28gc2VlIHw6c3luLXNwZWxsfCBmb3IgdGV4dCB0aGF0IGlzIG5vdCBpbiBhIHN5bnRheCBpdGVtLgoKClZJTSBTQ1JJUFRTCgpJZiB5b3Ugd2FudCB0byB3cml0ZSBhIFZpbSBzY3JpcHQgdGhhdCBkb2VzIHNvbWV0aGluZyB3aXRoIHNwZWxsaW5nLCB5b3UgbWF5CmZpbmQgdGhlc2UgZnVuY3Rpb25zIHVzZWZ1bDoKCiAgICBzcGVsbGJhZHdvcmQoKQlmaW5kIGJhZGx5IHNwZWxsZWQgd29yZCBhdCB0aGUgY3Vyc29yCiAgICBzcGVsbHN1Z2dlc3QoKQlnZXQgbGlzdCBvZiBzcGVsbGluZyBzdWdnZXN0aW9ucwogICAgc291bmRmb2xkKCkJCWdldCB0aGUgc291bmQtYS1saWtlIHZlcnNpb24gb2YgYSB3b3JkCgoKU0VUVElORyAnc3BlbGxjYXBjaGVjaycgQVVUT01BVElDQUxMWQkJCSpzZXQtc3BjLWF1dG8qCgpBZnRlciB0aGUgJ3NwZWxsbGFuZycgb3B0aW9uIGhhcyBiZWVuIHNldCBzdWNjZXNzZnVsbHksIFZpbSB3aWxsIHNvdXJjZSB0aGUKZmlsZXMgInNwZWxsL0xBTkcudmltIiBpbiAncnVudGltZXBhdGgnLiAgIkxBTkciIGlzIHRoZSB2YWx1ZSBvZiAnc3BlbGxsYW5nJwp1cCB0byB0aGUgZmlyc3QgY29tbWEsIGRvdCBvciB1bmRlcnNjb3JlLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBzZXQgb3B0aW9ucwpzcGVjaWZpY2FsbHkgZm9yIHRoZSBsYW5ndWFnZSwgZXNwZWNpYWxseSAnc3BlbGxjYXBjaGVjaycuCgpUaGUgZGlzdHJpYnV0aW9uIGluY2x1ZGVzIGEgZmV3IG9mIHRoZXNlIGZpbGVzLiAgVXNlIHRoaXMgY29tbWFuZCB0byBzZWUgd2hhdAp0aGV5IGRvOiA+Cgk6bmV4dCAkVklNUlVOVElNRS9zcGVsbC8qLnZpbQoKTm90ZSB0aGF0IHRoZSBkZWZhdWx0IHNjcmlwdHMgZG9uJ3Qgc2V0ICdzcGVsbGNhcGNoZWNrJyBpZiBpdCB3YXMgY2hhbmdlZCBmcm9tCnRoZSBkZWZhdWx0IHZhbHVlLiAgVGhpcyBhc3N1bWVzIHRoZSB1c2VyIHByZWZlcnMgYW5vdGhlciB2YWx1ZSB0aGVuLgoKCkRPVUJMRSBTQ09SSU5HCQkJCQkJKnNwZWxsLWRvdWJsZS1zY29yaW5nKgoKVGhlICdzcGVsbHN1Z2dlc3QnIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzZWxlY3QgImRvdWJsZSIgc2NvcmluZy4gIFRoaXMKbWVjaGFuaXNtIGlzIGJhc2VkIG9uIHRoZSBwcmluY2lwbGUgdGhhdCB0aGVyZSBhcmUgdHdvIGtpbmRzIG9mIHNwZWxsaW5nCm1pc3Rha2VzOgoKMS4gWW91IGtub3cgaG93IHRvIHNwZWxsIHRoZSB3b3JkLCBidXQgbWlzdHlwZSBzb21ldGhpbmcuICBUaGlzIHJlc3VsdHMgaW4gYQogICBzbWFsbCBlZGl0aW5nIGRpc3RhbmNlIChjaGFyYWN0ZXIgc3dhcHBlZC9vbWl0dGVkL2luc2VydGVkKSBhbmQgcG9zc2libHkgYQogICB3b3JkIHRoYXQgc291bmRzIGNvbXBsZXRlbHkgZGlmZmVyZW50LgoKMi4gWW91IGRvbid0IGtub3cgaG93IHRvIHNwZWxsIHRoZSB3b3JkIGFuZCB0eXBlIHNvbWV0aGluZyB0aGF0IHNvdW5kcyByaWdodC4KICAgVGhlIGVkaXQgZGlzdGFuY2UgY2FuIGJlIGJpZyBidXQgdGhlIHdvcmQgaXMgc2ltaWxhciBhZnRlciBzb3VuZC1mb2xkaW5nLgoKU2luY2Ugc2NvcmVzIGZvciB0aGVzZSB0d28gbWlzdGFrZXMgd2lsbCBiZSB2ZXJ5IGRpZmZlcmVudCB3ZSB1c2UgYSBsaXN0CmZvciBlYWNoIGFuZCBtaXggdGhlbS4KClRoZSBzb3VuZC1mb2xkaW5nIGlzIHNsb3cgYW5kIHBlb3BsZSB0aGF0IGtub3cgdGhlIGxhbmd1YWdlIHdvbid0IG1ha2UgdGhlCnNlY29uZCBraW5kIG9mIG1pc3Rha2VzLiAgVGhlcmVmb3JlICdzcGVsbHN1Z2dlc3QnIGNhbiBiZSBzZXQgdG8gc2VsZWN0IHRoZQpwcmVmZXJyZWQgbWV0aG9kIGZvciBzY29yaW5nIHRoZSBzdWdnZXN0aW9ucy4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBHZW5lcmF0aW5nIGEgc3BlbGwgZmlsZQkJCQkqc3BlbGwtbWtzcGVsbCoKClZpbSB1c2VzIGEgYmluYXJ5IGZpbGUgZm9ybWF0IGZvciBzcGVsbGluZy4gIFRoaXMgZ3JlYXRseSBzcGVlZHMgdXAgbG9hZGluZwp0aGUgd29yZCBsaXN0IGFuZCBrZWVwcyBpdCBzbWFsbC4KCQkJCQkJICAgICouYWZmKiAqLmRpYyogKk15c3BlbGwqCllvdSBjYW4gY3JlYXRlIGEgVmltIHNwZWxsIGZpbGUgZnJvbSB0aGUgLmFmZiBhbmQgLmRpYyBmaWxlcyB0aGF0IE15c3BlbGwKdXNlcy4gIE15c3BlbGwgaXMgdXNlZCBieSBPcGVuT2ZmaWNlLm9yZyBhbmQgTW96aWxsYS4gIFlvdSBzaG91bGQgYmUgYWJsZSB0bwpmaW5kIHRoZW0gaGVyZToKCWh0dHA6Ly93aWtpLnNlcnZpY2VzLm9wZW5vZmZpY2Uub3JnL3dpa2kvRGljdGlvbmFyaWVzCllvdSBjYW4gYWxzbyB1c2UgYSBwbGFpbiB3b3JkIGxpc3QuICBUaGUgcmVzdWx0cyBhcmUgdGhlIHNhbWUsIHRoZSBjaG9pY2UKZGVwZW5kcyBvbiB3aGF0IHdvcmQgbGlzdHMgeW91IGNhbiBmaW5kLgoKSWYgeW91IGluc3RhbGwgQWFwIChmcm9tIHd3dy5hLWEtcC5vcmcpIHlvdSBjYW4gdXNlIHRoZSByZWNpcGVzIGluIHRoZQpydW50aW1lL3NwZWxsLz8/LyBkaXJlY3Rvcmllcy4gIEFhcCB3aWxsIHRha2UgY2FyZSBvZiBkb3dubG9hZGluZyB0aGUgZmlsZXMsCmFwcGx5IHBhdGNoZXMgbmVlZGVkIGZvciBWaW0gYW5kIGJ1aWxkIHRoZSAuc3BsIGZpbGUuCgpNYWtlIHN1cmUgeW91ciBjdXJyZW50IGxvY2FsZSBpcyBzZXQgcHJvcGVybHksIG90aGVyd2lzZSBWaW0gZG9lc24ndCBrbm93IHdoYXQKY2hhcmFjdGVycyBhcmUgdXBwZXIvbG93ZXIgY2FzZSBsZXR0ZXJzLiAgSWYgdGhlIGxvY2FsZSBpc24ndCBhdmFpbGFibGUgKGUuZy4sCndoZW4gdXNpbmcgYW4gTVMtV2luZG93cyBjb2RlcGFnZSBvbiBVbml4KSBhZGQgdGFibGVzIHRvIHRoZSAuYWZmIGZpbGUKfHNwZWxsLWFmZml4LWNoYXJzfC4gIElmIHRoZSAuYWZmIGZpbGUgZG9lc24ndCBkZWZpbmUgYSB0YWJsZSB0aGVuIHRoZSB3b3JkCnRhYmxlIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHNwZWxsaW5nIGlzIHVzZWQuICBJZiBzcGVsbGluZyBpcyBub3QgYWN0aXZlCnRoZW4gVmltIHdpbGwgdHJ5IHRvIGd1ZXNzLgoKCQkJCQkJCSo6bWtzcCogKjpta3NwZWxsKgo6bWtzcFtlbGxdWyFdIFstYXNjaWldIHtvdXRuYW1lfSB7aW5uYW1lfSAuLi4KCQkJR2VuZXJhdGUgYSBWaW0gc3BlbGwgZmlsZSBmcm9tIHdvcmQgbGlzdHMuICBFeGFtcGxlOiA+CgkJOm1rc3BlbGwgL3RtcC9ubCBubF9OTC53b3Jkcwo8CQkJCQkJCQkqRTc1MSoKCQkJV2hlbiB7b3V0bmFtZX0gZW5kcyBpbiAiLnNwbCIgaXQgaXMgdXNlZCBhcyB0aGUgb3V0cHV0CgkJCWZpbGUgbmFtZS4gIE90aGVyd2lzZSBpdCBzaG91bGQgYmUgYSBsYW5ndWFnZSBuYW1lLAoJCQlzdWNoIGFzICJlbiIsIHdpdGhvdXQgdGhlIHJlZ2lvbiBuYW1lLiAgVGhlIGZpbGUKCQkJd3JpdHRlbiB3aWxsIGJlICJ7b3V0bmFtZX0ue2VuY29kaW5nfS5zcGwiLCB3aGVyZQoJCQl7ZW5jb2Rpbmd9IGlzIHRoZSB2YWx1ZSBvZiB0aGUgJ2VuY29kaW5nJyBvcHRpb24uCgoJCQlXaGVuIHRoZSBvdXRwdXQgZmlsZSBhbHJlYWR5IGV4aXN0cyBbIV0gbXVzdCBiZSB1c2VkCgkJCXRvIG92ZXJ3cml0ZSBpdC4KCgkJCVdoZW4gdGhlIFstYXNjaWldIGFyZ3VtZW50IGlzIHByZXNlbnQsIHdvcmRzIHdpdGgKCQkJbm9uLWFzY2lpIGNoYXJhY3RlcnMgYXJlIHNraXBwZWQuICBUaGUgcmVzdWx0aW5nIGZpbGUKCQkJZW5kcyBpbiAiYXNjaWkuc3BsIi4KCgkJCVRoZSBpbnB1dCBjYW4gYmUgdGhlIE15c3BlbGwgZm9ybWF0IGZpbGVzIHtpbm5hbWV9LmFmZgoJCQlhbmQge2lubmFtZX0uZGljLiAgSWYge2lubmFtZX0uYWZmIGRvZXMgbm90IGV4aXN0IHRoZW4KCQkJe2lubmFtZX0gaXMgdXNlZCBhcyB0aGUgZmlsZSBuYW1lIG9mIGEgcGxhaW4gd29yZAoJCQlsaXN0LgoKCQkJTXVsdGlwbGUge2lubmFtZX0gYXJndW1lbnRzIGNhbiBiZSBnaXZlbiB0byBjb21iaW5lCgkJCXJlZ2lvbnMgaW50byBvbmUgVmltIHNwZWxsIGZpbGUuICBFeGFtcGxlOiA+CgkJOm1rc3BlbGwgfi8udmltL3NwZWxsL2VuIC90bXAvZW5fVVMgL3RtcC9lbl9DQSAvdG1wL2VuX0FVCjwJCQlUaGlzIGNvbWJpbmVzIHRoZSBFbmdsaXNoIHdvcmQgbGlzdHMgZm9yIFVTLCBDQSBhbmQgQVUKCQkJaW50byBvbmUgZW4uc3BsIGZpbGUuCgkJCVVwIHRvIGVpZ2h0IHJlZ2lvbnMgY2FuIGJlIGNvbWJpbmVkLiAqRTc1NCogKkU3NTUqCgkJCVRoZSBSRVAgYW5kIFNBTCBpdGVtcyBvZiB0aGUgZmlyc3QgLmFmZiBmaWxlIHdoZXJlCgkJCXRoZXkgYXBwZWFyIGFyZSB1c2VkLiB8c3BlbGwtUkVQfCB8c3BlbGwtU0FMfAoKCQkJVGhpcyBjb21tYW5kIHVzZXMgYSBsb3Qgb2YgbWVtb3J5LCByZXF1aXJlZCB0byBmaW5kCgkJCXRoZSBvcHRpbWFsIHdvcmQgdHJlZSAoUG9saXNoLCBJdGFsaWFuIGFuZCBIdW5nYXJpYW4KCQkJcmVxdWlyZSBzZXZlcmFsIGh1bmRyZWQgTWJ5dGUpLiAgVGhlIGZpbmFsIHJlc3VsdCB3aWxsCgkJCWJlIG11Y2ggc21hbGxlciwgYmVjYXVzZSBjb21wcmVzc2lvbiBpcyB1c2VkLiAgVG8KCQkJYXZvaWQgcnVubmluZyBvdXQgb2YgbWVtb3J5IGNvbXByZXNzaW9uIHdpbGwgYmUgZG9uZQoJCQlub3cgYW5kIHRoZW4uICBUaGlzIGNhbiBiZSB0dW5lZCB3aXRoIHRoZSAnbWtzcGVsbG1lbScKCQkJb3B0aW9uLgoKCQkJQWZ0ZXIgdGhlIHNwZWxsIGZpbGUgd2FzIHdyaXR0ZW4gYW5kIGl0IHdhcyBiZWluZyB1c2VkCgkJCWluIGEgYnVmZmVyIGl0IHdpbGwgYmUgcmVsb2FkZWQgYXV0b21hdGljYWxseS4KCjpta3NwW2VsbF0gWy1hc2NpaV0ge25hbWV9LntlbmN9LmFkZAoJCQlMaWtlICI6bWtzcGVsbCIgYWJvdmUsIHVzaW5nIHtuYW1lfS57ZW5jfS5hZGQgYXMgdGhlCgkJCWlucHV0IGZpbGUgYW5kIHByb2R1Y2luZyBhbiBvdXRwdXQgZmlsZSBpbiB0aGUgc2FtZQoJCQlkaXJlY3RvcnkgdGhhdCBoYXMgIi5zcGwiIGFwcGVuZGVkLgoKOm1rc3BbZWxsXSBbLWFzY2lpXSB7bmFtZX0KCQkJTGlrZSAiOm1rc3BlbGwiIGFib3ZlLCB1c2luZyB7bmFtZX0gYXMgdGhlIGlucHV0IGZpbGUKCQkJYW5kIHByb2R1Y2luZyBhbiBvdXRwdXQgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKCQkJdGhhdCBoYXMgIi57ZW5jfS5zcGwiIGFwcGVuZGVkLgoKVmltIHdpbGwgcmVwb3J0IHRoZSBudW1iZXIgb2YgZHVwbGljYXRlIHdvcmRzLiAgVGhpcyBtaWdodCBiZSBhIG1pc3Rha2UgaW4gdGhlCmxpc3Qgb2Ygd29yZHMuICBCdXQgc29tZXRpbWVzIGl0IGlzIHVzZWQgdG8gaGF2ZSBkaWZmZXJlbnQgcHJlZml4ZXMgYW5kCnN1ZmZpeGVzIGZvciB0aGUgc2FtZSBiYXNpYyB3b3JkIHRvIGF2b2lkIHRoZW0gY29tYmluaW5nIChlLmcuIEN6ZWNoIHVzZXMKdGhpcykuICBJZiB5b3Ugd2FudCBWaW0gdG8gcmVwb3J0IGFsbCBkdXBsaWNhdGUgd29yZHMgc2V0IHRoZSAndmVyYm9zZScKb3B0aW9uLgoKU2luY2UgeW91IG1pZ2h0IHdhbnQgdG8gY2hhbmdlIGEgTXlzcGVsbCB3b3JkIGxpc3QgZm9yIHVzZSB3aXRoIFZpbSB0aGUKZm9sbG93aW5nIHByb2NlZHVyZSBpcyByZWNvbW1lbmRlZDoKCjEuIE9idGFpbiB0aGUgeHhfWVkuYWZmIGFuZCB4eF9ZWS5kaWMgZmlsZXMgZnJvbSBNeXNwZWxsLgoyLiBNYWtlIGEgY29weSBvZiB0aGVzZSBmaWxlcyB0byB4eF9ZWS5vcmlnLmFmZiBhbmQgeHhfWVkub3JpZy5kaWMuCjMuIENoYW5nZSB0aGUgeHhfWVkuYWZmIGFuZCB4eF9ZWS5kaWMgZmlsZXMgdG8gcmVtb3ZlIGJhZCB3b3JkcywgYWRkIG1pc3NpbmcKICAgd29yZHMsIGRlZmluZSB3b3JkIGNoYXJhY3RlcnMgd2l0aCBGT0wvTE9XL1VQUCwgZXRjLiAgVGhlIGRpc3RyaWJ1dGVkCiAgICIqLmRpZmYiIGZpbGVzIGNhbiBiZSB1c2VkLgo0LiBTdGFydCBWaW0gd2l0aCB0aGUgcmlnaHQgbG9jYWxlIGFuZCB1c2UgfDpta3NwZWxsfCB0byBnZW5lcmF0ZSB0aGUgVmltCiAgIHNwZWxsIGZpbGUuCjUuIFRyeSBvdXQgdGhlIHNwZWxsIGZpbGUgd2l0aCAiOnNldCBzcGVsbCBzcGVsbGxhbmc9eHgiIGlmIHlvdSB3cm90ZSBpdCBpbgogICBhIHNwZWxsIGRpcmVjdG9yeSBpbiAncnVudGltZXBhdGgnLCBvciAiOnNldCBzcGVsbGxhbmc9eHguZW5jLnNwbCIgaWYgeW91CiAgIHdyb3RlIGl0IHNvbWV3aGVyZSBlbHNlLgoKV2hlbiB0aGUgTXlzcGVsbCBmaWxlcyBhcmUgdXBkYXRlZCB5b3UgY2FuIG1lcmdlIHRoZSBkaWZmZXJlbmNlczoKMS4gT2J0YWluIHRoZSBuZXcgTXlzcGVsbCBmaWxlcyBhcyB4eF9ZWS5uZXcuYWZmIGFuZCB4eF9VVS5uZXcuZGljLgoyLiBVc2UgVmltZGlmZiB0byBzZWUgd2hhdCBjaGFuZ2VkOiA+Cgl2aW1kaWZmIHh4X1lZLm9yaWcuZGljIHh4X1lZLm5ldy5kaWMKMy4gVGFrZSBvdmVyIHRoZSBjaGFuZ2VzIHlvdSBsaWtlIGluIHh4X1lZLmRpYy4KICAgWW91IG1heSBhbHNvIG5lZWQgdG8gY2hhbmdlIHh4X1lZLmFmZi4KNC4gUmVuYW1lIHh4X1lZLm5ldy5kaWMgdG8geHhfWVkub3JpZy5kaWMgYW5kIHh4X1lZLm5ldy5hZmYgdG8geHhfWVkubmV3LmFmZi4KCgpTUEVMTCBGSUxFIFZFUlNJT05TCQkJCQkqRTc3MCogKkU3NzEqICpFNzcyKgoKU3BlbGwgY2hlY2tpbmcgaXMgYSByZWxhdGl2ZWx5IG5ldyBmZWF0dXJlIGluIFZpbSwgdGh1cyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlCi5zcGwgZmlsZSBmb3JtYXQgd2lsbCBiZSBjaGFuZ2VkIHRvIHN1cHBvcnQgbW9yZSBsYW5ndWFnZXMuICBWaW0gd2lsbCBjaGVjawp0aGUgdmFsaWRpdHkgb2YgdGhlIHNwZWxsIGZpbGUgYW5kIHJlcG9ydCBhbnl0aGluZyB3cm9uZy4KCglFNzcxOiBPbGQgc3BlbGwgZmlsZSwgbmVlZHMgdG8gYmUgdXBkYXRlZCB+ClRoaXMgc3BlbGwgZmlsZSBpcyBvbGRlciB0aGFuIHlvdXIgVmltLiAgWW91IG5lZWQgdG8gdXBkYXRlIHRoZSAuc3BsIGZpbGUuCgoJRTc3MjogU3BlbGwgZmlsZSBpcyBmb3IgbmV3ZXIgdmVyc2lvbiBvZiBWaW0gfgpUaGlzIG1lYW5zIHRoZSBzcGVsbCBmaWxlIHdhcyBtYWRlIGZvciBhIGxhdGVyIHZlcnNpb24gb2YgVmltLiAgWW91IG5lZWQgdG8KdXBkYXRlIFZpbS4KCglFNzcwOiBVbnN1cHBvcnRlZCBzZWN0aW9uIGluIHNwZWxsIGZpbGUgfgpUaGlzIG1lYW5zIHRoZSBzcGVsbCBmaWxlIHdhcyBtYWRlIGZvciBhIGxhdGVyIHZlcnNpb24gb2YgVmltIGFuZCBjb250YWlucyBhCnNlY3Rpb24gdGhhdCBpcyByZXF1aXJlZCBmb3IgdGhlIHNwZWxsIGZpbGUgdG8gd29yay4gIEluIHRoaXMgY2FzZSBpdCdzCnByb2JhYmx5IGEgZ29vZCBpZGVhIHRvIHVwZ3JhZGUgeW91ciBWaW0uCgoKU1BFTEwgRklMRSBEVU1QCgpJZiBmb3Igc29tZSByZWFzb24geW91IHdhbnQgdG8gY2hlY2sgd2hhdCB3b3JkcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50bHkKdXNlZCBzcGVsbGluZyBmaWxlcywgdXNlIHRoaXMgY29tbWFuZDoKCgkJCQkJCQkqOnNwZWxsZHVtcCogKjpzcGVsbGQqCjpzcGVsbGRbdW1wXQkJT3BlbiBhIG5ldyB3aW5kb3cgYW5kIGZpbGwgaXQgd2l0aCBhbGwgY3VycmVudGx5IHZhbGlkCgkJCXdvcmRzLiAgQ29tcG91bmQgd29yZHMgYXJlIG5vdCBpbmNsdWRlZC4KCQkJTm90ZTogRm9yIHNvbWUgbGFuZ3VhZ2VzIHRoZSByZXN1bHQgbWF5IGJlIGVub3Jtb3VzLAoJCQljYXVzaW5nIFZpbSB0byBydW4gb3V0IG9mIG1lbW9yeS4KCjpzcGVsbGRbdW1wXSEJCUxpa2UgIjpzcGVsbGR1bXAiIGFuZCBpbmNsdWRlIHRoZSB3b3JkIGNvdW50LiAgVGhpcyBpcwoJCQl0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSB3b3JkIHdhcyBmb3VuZCB3aGlsZQoJCQl1cGRhdGluZyB0aGUgc2NyZWVuLiAgV29yZHMgdGhhdCBhcmUgaW4gQ09NTU9OIGl0ZW1zCgkJCWdldCBhIHN0YXJ0aW5nIGNvdW50IG9mIDEwLgoKVGhlIGZvcm1hdCBvZiB0aGUgd29yZCBsaXN0IGlzIHVzZWQgfHNwZWxsLXdvcmRsaXN0LWZvcm1hdHwuICBZb3Ugc2hvdWxkIGJlCmFibGUgdG8gcmVhZCBpdCB3aXRoICI6bWtzcGVsbCIgdG8gZ2VuZXJhdGUgb25lIC5zcGwgZmlsZSB0aGF0IGluY2x1ZGVzIGFsbAp0aGUgd29yZHMuCgpXaGVuIGFsbCBlbnRyaWVzIHRvICdzcGVsbGxhbmcnIHVzZSB0aGUgc2FtZSByZWdpb25zIG9yIG5vIHJlZ2lvbnMgYXQgYWxsIHRoZW4KdGhlIHJlZ2lvbiBpbmZvcm1hdGlvbiBpcyBpbmNsdWRlZCBpbiB0aGUgZHVtcGVkIHdvcmRzLiAgT3RoZXJ3aXNlIG9ubHkgd29yZHMKZm9yIHRoZSBjdXJyZW50IHJlZ2lvbiBhcmUgaW5jbHVkZWQgYW5kIG5vICIvcmVnaW9ucyIgbGluZSBpcyBnZW5lcmF0ZWQuCgpDb21tZW50IGxpbmVzIHdpdGggdGhlIG5hbWUgb2YgdGhlIC5zcGwgZmlsZSBhcmUgdXNlZCBhcyBhIGhlYWRlciBhYm92ZSB0aGUKd29yZHMgdGhhdCB3ZXJlIGdlbmVyYXRlZCBmcm9tIHRoYXQgLnNwbCBmaWxlLgoKClNQRUxMIEZJTEUgTUlTU0lORwkJKnNwZWxsLVNwZWxsRmlsZU1pc3NpbmcqICpzcGVsbGZpbGUudmltKgoKSWYgdGhlIHNwZWxsIGZpbGUgZm9yIHRoZSBsYW5ndWFnZSB5b3UgYXJlIHVzaW5nIGlzIG5vdCBhdmFpbGFibGUsIHlvdSB3aWxsCmdldCBhbiBlcnJvciBtZXNzYWdlLiAgQnV0IGlmIHRoZSAic3BlbGxmaWxlLnZpbSIgcGx1Z2luIGlzIGFjdGl2ZSBpdCB3aWxsCm9mZmVyIHlvdSB0byBkb3dubG9hZCB0aGUgc3BlbGwgZmlsZS4gIEp1c3QgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMsIGl0IHdpbGwKYXNrIHlvdSB3aGVyZSB0byB3cml0ZSB0aGUgZmlsZSAodGhlcmUgbXVzdCBiZSBhIHdyaXRhYmxlIGRpcmVjdG9yeSBpbgoncnVudGltZXBhdGgnIGZvciB0aGlzKS4KClRoZSBwbHVnaW4gaGFzIGEgZGVmYXVsdCBwbGFjZSB3aGVyZSB0byBsb29rIGZvciBzcGVsbCBmaWxlcywgb24gdGhlIFZpbSBmdHAKc2VydmVyLiAgSWYgeW91IHdhbnQgdG8gdXNlIGFub3RoZXIgbG9jYXRpb24gb3IgYW5vdGhlciBwcm90b2NvbCwgc2V0IHRoZQpnOnNwZWxsZmlsZV9VUkwgdmFyaWFibGUgdG8gdGhlIGRpcmVjdG9yeSB0aGF0IGhvbGRzIHRoZSBzcGVsbCBmaWxlcy4gIFRoZQp8bmV0cnd8IHBsdWdpbiBpcyB1c2VkIGZvciBnZXR0aW5nIHRoZSBmaWxlLCBsb29rIHRoZXJlIGZvciB0aGUgc3BlY2lmaWMKc3ludGF4IG9mIHRoZSBVUkwuICBFeGFtcGxlOiA+CglsZXQgZzpzcGVsbGZpbGVfVVJMID0gJ2h0dHA6Ly9mdHAudmltLm9yZy92aW0vcnVudGltZS9zcGVsbCcKWW91IG1heSBuZWVkIHRvIGVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMuCgpUaGUgcGx1Z2luIHdpbGwgb25seSBhc2sgYWJvdXQgZG93bmxvYWRpbmcgYSBsYW5ndWFnZSBvbmNlLiAgSWYgeW91IHdhbnQgdG8KdHJ5IGFnYWluIGFueXdheSByZXN0YXJ0IFZpbSwgb3Igc2V0IGc6c3BlbGxmaWxlX1VSTCB0byBhbm90aGVyIHZhbHVlIChlLmcuLApwcmVwZW5kIGEgc3BhY2UpLgoKVG8gYXZvaWQgdXNpbmcgdGhlICJzcGVsbGZpbGUudmltIiBwbHVnaW4gZG8gdGhpcyBpbiB5b3VyIHZpbXJjIGZpbGU6ID4KCglsZXQgbG9hZGVkX3NwZWxsZmlsZV9wbHVnaW4gPSAxCgpJbnN0ZWFkIG9mIHVzaW5nIHRoZSBwbHVnaW4geW91IGNhbiBkZWZpbmUgYSB8U3BlbGxGaWxlTWlzc2luZ3wgYXV0b2NvbW1hbmQgdG8KaGFuZGxlIHRoZSBtaXNzaW5nIGZpbGUgeW91cnNlbGYuICBZb3UgY2FuIHVzZSBpdCBsaWtlIHRoaXM6ID4KCgk6YXUgU3BlbGxGaWxlTWlzc2luZyAqIGNhbGwgRG93bmxvYWRfc3BlbGxfZmlsZShleHBhbmQoJzxhbWF0Y2g+JykpCgpUaHVzIHRoZSA8YW1hdGNoPiBpdGVtIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBsYW5ndWFnZS4gIEFub3RoZXIgaW1wb3J0YW50CnZhbHVlIGlzICdlbmNvZGluZycsIHNpbmNlIGV2ZXJ5IGVuY29kaW5nIGhhcyBpdHMgb3duIHNwZWxsIGZpbGUuICBXaXRoIHR3bwpleGNlcHRpb25zOgotIEZvciBJU08tODg1OS0xNSAobGF0aW45KSB0aGUgbmFtZSAibGF0aW4xIiBpcyB1c2VkICh0aGUgZW5jb2RpbmdzIG9ubHkKICBkaWZmZXIgaW4gY2hhcmFjdGVycyBub3QgdXNlZCBpbiBkaWN0aW9uYXJ5IHdvcmRzKS4KLSBUaGUgbmFtZSAiYXNjaWkiIG1heSBhbHNvIGJlIHVzZWQgZm9yIHNvbWUgbGFuZ3VhZ2VzIHdoZXJlIHRoZSB3b3JkcyB1c2UKICBvbmx5IEFTQ0lJIGxldHRlcnMgZm9yIG1vc3Qgb2YgdGhlIHdvcmRzLgoKVGhlIGRlZmF1bHQgInNwZWxsZmlsZS52aW0iIHBsdWdpbiB1c2VzIHRoaXMgYXV0b2NvbW1hbmQsIGlmIHlvdSBkZWZpbmUgeW91cgphdXRvY29tbWFuZCBhZnRlcndhcmRzIHlvdSBtYXkgd2FudCB0byB1c2UgIjphdSEgU3BlbGxGaWxlTWlzc2luZyIgdG8gb3ZlcnJ1bGUKaXQuICBJZiB5b3UgZGVmaW5lIHlvdXIgYXV0b2NvbW1hbmQgYmVmb3JlIHRoZSBwbHVnaW4gaXMgbG9hZGVkIGl0IHdpbGwgbm90aWNlCnRoaXMgYW5kIG5vdCBkbyBhbnl0aGluZy4KCQkJCQkJCSpFNzk3KgpOb3RlIHRoYXQgdGhlIFNwZWxsRmlsZU1pc3NpbmcgYXV0b2NvbW1hbmQgbXVzdCBub3QgY2hhbmdlIG9yIGRlc3Ryb3kgdGhlCmJ1ZmZlciB0aGUgdXNlciB3YXMgZWRpdGluZy4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBTcGVsbCBmaWxlIGZvcm1hdAkJCQkJKnNwZWxsLWZpbGUtZm9ybWF0KgoKVGhpcyBpcyB0aGUgZm9ybWF0IG9mIHRoZSBmaWxlcyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBwZXJzb24gd2hvIGNyZWF0ZXMgYW5kCm1haW50YWlucyBhIHdvcmQgbGlzdC4KCk5vdGUgdGhhdCB3ZSBhdm9pZCB0aGUgd29yZCAiZGljdGlvbmFyeSIgaGVyZS4gIFRoYXQgaXMgYmVjYXVzZSB0aGUgZ29hbCBvZgpzcGVsbCBjaGVja2luZyBkaWZmZXJzIGZyb20gd3JpdGluZyBhIGRpY3Rpb25hcnkgKGFzIGluIHRoZSBib29rKS4gIEZvcgpzcGVsbGluZyB3ZSBuZWVkIGEgbGlzdCBvZiB3b3JkcyB0aGF0IGFyZSBPSywgdGh1cyBzaG91bGQgbm90IGJlIGhpZ2hsaWdodGVkLgpQZXJzb24gYW5kIGNvbXBhbnkgbmFtZXMgd2lsbCBub3QgYXBwZWFyIGluIGEgZGljdGlvbmFyeSwgYnV0IGRvIGFwcGVhciBpbiBhCndvcmQgbGlzdC4gIEFuZCBzb21lIG9sZCB3b3JkcyBhcmUgcmFyZWx5IHVzZWQgd2hpbGUgdGhleSBhcmUgY29tbW9uCm1pc3NwZWxsaW5ncy4gIFRoZXNlIGRvIGFwcGVhciBpbiBhIGRpY3Rpb25hcnkgYnV0IG5vdCBpbiBhIHdvcmQgbGlzdC4KClRoZXJlIGFyZSB0d28gZm9ybWF0czogQSBzdHJhaWdodCBsaXN0IG9mIHdvcmRzIGFuZCBhIGxpc3QgdXNpbmcgYWZmaXgKY29tcHJlc3Npb24uICBUaGUgZmlsZXMgd2l0aCBhZmZpeCBjb21wcmVzc2lvbiBhcmUgdXNlZCBieSBNeXNwZWxsIChNb3ppbGxhCmFuZCBPcGVuT2ZmaWNlLm9yZykuICBUaGlzIHJlcXVpcmVzIHR3byBmaWxlcywgb25lIHdpdGggLmFmZiBhbmQgb25lIHdpdGggLmRpYwpleHRlbnNpb24uCgoKRk9STUFUIE9GIFNUUkFJR0hUIFdPUkQgTElTVAkJCQkqc3BlbGwtd29yZGxpc3QtZm9ybWF0KgoKVGhlIHdvcmRzIG11c3QgYXBwZWFyIG9uZSBwZXIgbGluZS4gIFRoYXQgaXMgYWxsIHRoYXQgaXMgcmVxdWlyZWQuCgpBZGRpdGlvbmFsbHkgdGhlIGZvbGxvd2luZyBpdGVtcyBhcmUgcmVjb2duaXplZDoKCi0gRW1wdHkgYW5kIGJsYW5rIGxpbmVzIGFyZSBpZ25vcmVkLgoKCSMgY29tbWVudCB+Ci0gTGluZXMgc3RhcnRpbmcgd2l0aCBhICMgYXJlIGlnbm9yZWQgKGNvbW1lbnQgbGluZXMpLgoKCS9lbmNvZGluZz11dGYtOCB+Ci0gQSBsaW5lIHN0YXJ0aW5nIHdpdGggIi9lbmNvZGluZz0iLCBiZWZvcmUgYW55IHdvcmQsIHNwZWNpZmllcyB0aGUgZW5jb2RpbmcKICBvZiB0aGUgZmlsZS4gIEFmdGVyIHRoZSBzZWNvbmQgJz0nIGNvbWVzIGFuIGVuY29kaW5nIG5hbWUuICBUaGlzIHRlbGxzIFZpbQogIHRvIHNldHVwIGNvbnZlcnNpb24gZnJvbSB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIHRvICdlbmNvZGluZycuICBUaHVzIHlvdSBjYW4KICB1c2Ugb25lIHdvcmQgbGlzdCBmb3Igc2V2ZXJhbCB0YXJnZXQgZW5jb2RpbmdzLgoKCS9yZWdpb25zPXVzY2EgfgotIEEgbGluZSBzdGFydGluZyB3aXRoICIvcmVnaW9ucz0iIHNwZWNpZmllcyB0aGUgcmVnaW9uIG5hbWVzIHRoYXQgYXJlCiAgc3VwcG9ydGVkLiAgRWFjaCByZWdpb24gbmFtZSBtdXN0IGJlIHR3byBBU0NJSSBsZXR0ZXJzLiAgVGhlIGZpcnN0IG9uZSBpcwogIHJlZ2lvbiAxLiAgVGh1cyAiL3JlZ2lvbnM9dXNjYSIgaGFzIHJlZ2lvbiAxICJ1cyIgYW5kIHJlZ2lvbiAyICJjYSIuCiAgSW4gYW4gYWRkaXRpb24gd29yZCBsaXN0IHRoZSByZWdpb24gbmFtZXMgc2hvdWxkIGJlIGVxdWFsIHRvIHRoZSBtYWluIHdvcmQKICBsaXN0IQoKLSBPdGhlciBsaW5lcyBzdGFydGluZyB3aXRoICcvJyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuICBUaGUgb25lcyB0aGF0CiAgYXJlIG5vdCByZWNvZ25pemVkIGFyZSBpZ25vcmVkLiAgWW91IGRvIGdldCBhIHdhcm5pbmcgbWVzc2FnZSwgc28gdGhhdCB5b3UKICBrbm93IHNvbWV0aGluZyB3b24ndCB3b3JrLgoKLSBBICIvIiBtYXkgZm9sbG93IHRoZSB3b3JkIHdpdGggdGhlIGZvbGxvd2luZyBpdGVtczoKICAgID0JCUNhc2UgbXVzdCBtYXRjaCBleGFjdGx5LgogICAgPwkJUmFyZSB3b3JkLgogICAgIQkJQmFkICh3cm9uZykgd29yZC4KICAgIGRpZ2l0CUEgcmVnaW9uIGluIHdoaWNoIHRoZSB3b3JkIGlzIHZhbGlkLiAgSWYgbm8gcmVnaW9ucyBhcmUKCQlzcGVjaWZpZWQgdGhlIHdvcmQgaXMgdmFsaWQgaW4gYWxsIHJlZ2lvbnMuCgpFeGFtcGxlOgoKCSMgVGhpcyBpcyBhbiBleGFtcGxlIHdvcmQgbGlzdAkJY29tbWVudAoJL2VuY29kaW5nPWxhdGluMQkJCWVuY29kaW5nIG9mIHRoZSBmaWxlCgkvcmVnaW9ucz11c2NhZ2IJCQkJcmVnaW9ucyAidXMiLCAiY2EiIGFuZCAiZ2IiCglleGFtcGxlCQkJCQl3b3JkIGZvciBhbGwgcmVnaW9ucwoJYmxhaC8xMgkJCQkJd29yZCBmb3IgcmVnaW9ucyAidXMiIGFuZCAiY2EiCgl2aW0vIQkJCQkJYmFkIHdvcmQKCUNhbXBiZWxsLz8zCQkJCXJhcmUgd29yZCBpbiByZWdpb24gMyAiZ2IiCgkncyBtb3JuaW5ncy89CQkJCWtlZXAtY2FzZSB3b3JkCgpOb3RlIHRoYXQgd2hlbiAiLz0iIGlzIHVzZWQgdGhlIHNhbWUgd29yZCB3aXRoIGFsbCB1cHBlci1jYXNlIGxldHRlcnMgaXMgbm90CmFjY2VwdGVkLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhIHdvcmQgd2l0aCBtaXhlZCBjYXNlIHRoYXQgaXMgYXV0b21hdGljYWxseQptYXJrZWQgYXMga2VlcC1jYXNlLCB0aG9zZSB3b3JkcyBtYXkgYXBwZWFyIGluIGFsbCB1cHBlci1jYXNlIGxldHRlcnMuCgoKRk9STUFUIFdJVEggLkFGRiBBTkQgLkRJQyBGSUxFUwkJCQkqYWZmLWRpYy1mb3JtYXQqCgpUaGVyZSBhcmUgdHdvIGZpbGVzOiB0aGUgYmFzaWMgd29yZCBsaXN0IGFuZCBhbiBhZmZpeCBmaWxlLiAgVGhlIGFmZml4IGZpbGUKc3BlY2lmaWVzIHNldHRpbmdzIGZvciB0aGUgbGFuZ3VhZ2UgYW5kIGNhbiBjb250YWluIGFmZml4ZXMuICBUaGUgYWZmaXhlcyBhcmUKdXNlZCB0byBtb2RpZnkgdGhlIGJhc2ljIHdvcmRzIHRvIGdldCB0aGUgZnVsbCB3b3JkIGxpc3QuICBUaGlzIHNpZ25pZmljYW50bHkKcmVkdWNlcyB0aGUgbnVtYmVyIG9mIHdvcmRzLCBlc3BlY2lhbGx5IGZvciBhIGxhbmd1YWdlIGxpa2UgUG9saXNoLiAgVGhpcyBpcwpjYWxsZWQgYWZmaXggY29tcHJlc3Npb24uCgpUaGUgYmFzaWMgd29yZCBsaXN0IGFuZCB0aGUgYWZmaXggZmlsZSBhcmUgY29tYmluZWQgd2l0aCB0aGUgIjpta3NwZWxsIgpjb21tYW5kIGFuZCByZXN1bHRzIGluIGEgYmluYXJ5IHNwZWxsIGZpbGUuICBBbGwgdGhlIHByZXByb2Nlc3NpbmcgaGFzIGJlZW4KZG9uZSwgdGh1cyB0aGlzIGZpbGUgbG9hZHMgZmFzdC4gIFRoZSBiaW5hcnkgc3BlbGwgZmlsZSBmb3JtYXQgaXMgZGVzY3JpYmVkIGluCnRoZSBzb3VyY2UgY29kZSAoc3JjL3NwZWxsLmMpLiAgQnV0IG9ubHkgZGV2ZWxvcGVycyBuZWVkIHRvIGtub3cgYWJvdXQgaXQuCgpUaGUgcHJlcHJvY2Vzc2luZyBhbHNvIGFsbG93cyB1cyB0byB0YWtlIHRoZSBNeXNwZWxsIGxhbmd1YWdlIGZpbGVzIGFuZCBtb2RpZnkKdGhlbSBiZWZvcmUgdGhlIFZpbSB3b3JkIGxpc3QgaXMgbWFkZS4gIFRoZSB0b29scyBmb3IgdGhpcyBjYW4gYmUgZm91bmQgaW4gdGhlCiJzcmMvc3BlbGwiIGRpcmVjdG9yeS4KClRoZSBmb3JtYXQgZm9yIHRoZSBhZmZpeCBhbmQgd29yZCBsaXN0IGZpbGVzIGlzIGJhc2VkIG9uIHdoYXQgTXlzcGVsbCB1c2VzCih0aGUgc3BlbGwgY2hlY2tlciBvZiBNb3ppbGxhIGFuZCBPcGVuT2ZmaWNlLm9yZykuICBBIGRlc2NyaXB0aW9uIGNhbiBiZSBmb3VuZApoZXJlOgoJaHR0cDovL2xpbmd1Y29tcG9uZW50Lm9wZW5vZmZpY2Uub3JnL2FmZml4LnJlYWRtZSB+Ck5vdGUgdGhhdCBhZmZpeGVzIGFyZSBjYXNlIHNlbnNpdGl2ZSwgdGhpcyBpc24ndCBvYnZpb3VzIGZyb20gdGhlIGRlc2NyaXB0aW9uLgoKVmltIHN1cHBvcnRzIHF1aXRlIGEgZmV3IGV4dHJhcy4gIFRoZXkgYXJlIGRlc2NyaWJlZCBiZWxvdyB8c3BlbGwtYWZmaXgtdmltfC4KQXR0ZW1wdHMgaGF2ZSBiZWVuIG1hZGUgdG8ga2VlcCB0aGlzIGNvbXBhdGlibGUgd2l0aCBvdGhlciBzcGVsbCBjaGVja2Vycywgc28KdGhhdCB0aGUgc2FtZSBmaWxlcyBjYW4gb2Z0ZW4gYmUgdXNlZC4gIE9uZSBvdGhlciBwcm9qZWN0IHRoYXQgb2ZmZXJzIG1vcmUKdGhhbiBNeXNwZWxsIGlzIEh1bnNwZWxsICggaHR0cDovL2h1bnNwZWxsLnNmLm5ldCApLgoKCldPUkQgTElTVCBGT1JNQVQJCQkJKnNwZWxsLWRpYy1mb3JtYXQqCgpBIHNob3J0IGV4YW1wbGUsIHdpdGggbGluZSBudW1iZXJzOgoKCTEJMTIzNCB+CgkyCWFhbiB+CgkzCUFscyB+Cgk0CUV0dGVuLUxldXIgfgoJNQlldCBhbC4gfgoJNgkncy1HcmF2ZW5oYWdlIH4KCTcJJ3MtR3JhdmVuaGFhZ3MgfgoJOAkjIHdvcmQgdGhhdCBkaWZmZXJzIGJldHdlZW4gcmVnaW9ucyB+Cgk5CWthZG8vMSB+CgkxMAljYWRlYXUvMiB+CgkxMQlUQ1AsSVAgfgoJMTIJL3RoZSBTIGFmZml4IG1heSBhZGQgYSAncycgfgoJMTMJYmVkZWwvUyB+CgpUaGUgZmlyc3QgbGluZSBjb250YWlucyB0aGUgbnVtYmVyIG9mIHdvcmRzLiAgVmltIGlnbm9yZXMgaXQsIGJ1dCB5b3UgZG8gZ2V0CmFuIGVycm9yIG1lc3NhZ2UgaWYgaXQncyBub3QgdGhlcmUuICAqRTc2MCoKCldoYXQgZm9sbG93cyBpcyBvbmUgd29yZCBwZXIgbGluZS4gIFdoaXRlIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUgaXMKaWdub3JlZCwgYWxsIG90aGVyIHdoaXRlIHNwYWNlIG1hdHRlcnMuICBUaGUgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIGluIHRoZQphZmZpeCBmaWxlIHxzcGVsbC1TRVR8LgoKQ29tbWVudCBsaW5lcyBzdGFydCB3aXRoICcjJyBvciAnLycuICBTZWUgdGhlIGV4YW1wbGUgbGluZXMgOCBhbmQgMTIuICBOb3RlCnRoYXQgcHV0dGluZyBhIGNvbW1lbnQgYWZ0ZXIgYSB3b3JkIGlzIE5PVCBhbGxvd2VkOgoKCQlzb21ld29yZCAgICMgY29tbWVudCB0aGF0IGNhdXNlcyBhbiBlcnJvciEgfgoKQWZ0ZXIgdGhlIHdvcmQgdGhlcmUgaXMgYW4gb3B0aW9uYWwgc2xhc2ggYW5kIGZsYWdzLiAgTW9zdCBvZiB0aGVzZSBmbGFncyBhcmUKbGV0dGVycyB0aGF0IGluZGljYXRlIHRoZSBhZmZpeGVzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCB0aGlzIHdvcmQuICBUaGVzZSBhcmUKc3BlY2lmaWVkIHdpdGggU0ZYIGFuZCBQRlggbGluZXMgaW4gdGhlIC5hZmYgZmlsZSwgc2VlIHxzcGVsbC1TRlh8IGFuZAp8c3BlbGwtUEZYfC4gIFZpbSBhbGxvd3MgdXNpbmcgb3RoZXIgZmxhZyB0eXBlcyB3aXRoIHRoZSBGTEFHIGl0ZW0gaW4gdGhlCmFmZml4IGZpbGUgfHNwZWxsLUZMQUd8LgoKV2hlbiB0aGUgd29yZCBvbmx5IGhhcyBsb3dlci1jYXNlIGxldHRlcnMgaXQgd2lsbCBhbHNvIG1hdGNoIHdpdGggdGhlIHdvcmQKc3RhcnRpbmcgd2l0aCBhbiB1cHBlci1jYXNlIGxldHRlci4KCldoZW4gdGhlIHdvcmQgaW5jbHVkZXMgYW4gdXBwZXItY2FzZSBsZXR0ZXIsIHRoaXMgbWVhbnMgdGhlIHVwcGVyLWNhc2UgbGV0dGVyCmlzIHJlcXVpcmVkIGF0IHRoaXMgcG9zaXRpb24uICBUaGUgc2FtZSB3b3JkIHdpdGggYSBsb3dlci1jYXNlIGxldHRlciBhdCB0aGlzCnBvc2l0aW9uIHdpbGwgbm90IG1hdGNoLiBXaGVuIHNvbWUgb2YgdGhlIG90aGVyIGxldHRlcnMgYXJlIHVwcGVyLWNhc2UgaXQgd2lsbApub3QgbWF0Y2ggZWl0aGVyLgoKVGhlIHdvcmQgd2l0aCBhbGwgdXBwZXItY2FzZSBjaGFyYWN0ZXJzIHdpbGwgYWx3YXlzIGJlIE9LLAoKCXdvcmQgbGlzdAltYXRjaGVzCQkJZG9lcyBub3QgbWF0Y2ggfgoJYWxzCQlhbHMgQWxzIEFMUwkJQUxzIEFsUyBhTHMgYUxTCglBbHMJCUFscyAgQUxTCQlhbHMgQUxzIEFsUyBhTHMgYUxTCglBTFMJCUFMUwkJCWFscyBBbHMgQUxzIEFsUyBhTHMgYUxTCglBbFMJCUFsUyBBTFMJCQlhbHMgQWxzIEFMcyBhTHMgYUxTCgpUaGUgS0VFUENBU0UgYWZmaXggSUQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmaWNhbGx5IG1hdGNoIGEgd29yZCB3aXRoIGlkZW50aWNhbApjYXNlIG9ubHksIHNlZSBiZWxvdyB8c3BlbGwtS0VFUENBU0V8LgoKTm90ZTogaW4gbGluZSA1IHRvIDcgbm9uLXdvcmQgY2hhcmFjdGVycyBhcmUgdXNlZC4gIFlvdSBjYW4gaW5jbHVkZSBhbnkKY2hhcmFjdGVyIGluIGEgd29yZC4gIFdoZW4gY2hlY2tpbmcgdGhlIHRleHQgYSB3b3JkIHN0aWxsIG9ubHkgbWF0Y2hlcyB3aGVuIGl0CmFwcGVhcnMgd2l0aCBhIG5vbi13b3JkIGNoYXJhY3RlciBiZWZvcmUgYW5kIGFmdGVyIGl0LiAgRm9yIE15c3BlbGwgYSB3b3JkCnN0YXJ0aW5nIHdpdGggYSBub24td29yZCBjaGFyYWN0ZXIgcHJvYmFibHkgd29uJ3Qgd29yay4KCkluIGxpbmUgMTIgdGhlIHdvcmQgIlRDUC9JUCIgaXMgZGVmaW5lZC4gIFNpbmNlIHRoZSBzbGFzaCBoYXMgYSBzcGVjaWFsCm1lYW5pbmcgdGhlIGNvbW1hIGlzIHVzZWQgaW5zdGVhZC4gIFRoaXMgaXMgZGVmaW5lZCB3aXRoIHRoZSBTTEFTSCBpdGVtIGluIHRoZQphZmZpeCBmaWxlLCBzZWUgfHNwZWxsLVNMQVNIfC4gIE5vdGUgdGhhdCB3aXRob3V0IHRoaXMgU0xBU0ggaXRlbSB0aGUgd29yZAp3aWxsIGJlICJUQ1AsSVAiLgoKCkFGRklYIEZJTEUgRk9STUFUCQkJKnNwZWxsLWFmZi1mb3JtYXQqICpzcGVsbC1hZmZpeC12aW0qCgoJCQkJCQkJKnNwZWxsLWFmZml4LWNvbW1lbnQqCkNvbW1lbnQgbGluZXMgaW4gdGhlIC5hZmYgZmlsZSBzdGFydCB3aXRoIGEgJyMnOgoKCSMgY29tbWVudCBsaW5lIH4KCldpdGggc29tZSBpdGVtcyBpdCdzIGFsc28gcG9zc2libGUgdG8gcHV0IGEgY29tbWVudCBhZnRlciBpdCwgYnV0IHRoaXMgaXNuJ3QKc3VwcG9ydGVkIGluIGdlbmVyYWwuCgoKRU5DT0RJTkcJCQkJCQkJKnNwZWxsLVNFVCoKClRoZSBhZmZpeCBmaWxlIGNhbiBiZSBpbiBhbnkgZW5jb2RpbmcgdGhhdCBpcyBzdXBwb3J0ZWQgYnkgImljb252Ii4gIEhvd2V2ZXIsCmluIHNvbWUgY2FzZXMgdGhlIGN1cnJlbnQgbG9jYWxlIHNob3VsZCBhbHNvIGJlIHNldCBwcm9wZXJseSBhdCB0aGUgdGltZQp8Om1rc3BlbGx8IGlzIGludm9rZWQuICBBZGRpbmcgRk9ML0xPVy9VUFAgbGluZXMgcmVtb3ZlcyB0aGlzIHJlcXVpcmVtZW50CnxzcGVsbC1GT0x8LgoKVGhlIGVuY29kaW5nIHNob3VsZCBiZSBzcGVjaWZpZWQgYmVmb3JlIGFueXRoaW5nIHdoZXJlIHRoZSBlbmNvZGluZyBtYXR0ZXJzLgpUaGUgZW5jb2RpbmcgYXBwbGllcyBib3RoIHRvIHRoZSBhZmZpeCBmaWxlIGFuZCB0aGUgZGljdGlvbmFyeSBmaWxlLiAgSXQgaXMKZG9uZSB3aXRoIGEgU0VUIGxpbmU6CgoJU0VUIHV0Zi04IH4KClRoZSBlbmNvZGluZyBjYW4gYmUgZGlmZmVyZW50IGZyb20gdGhlIHZhbHVlIG9mIHRoZSAnZW5jb2RpbmcnIG9wdGlvbiBhdCB0aGUKdGltZSAiOm1rc3BlbGwiIGlzIHVzZWQuICBWaW0gd2lsbCB0aGVuIGNvbnZlcnQgZXZlcnl0aGluZyB0byAnZW5jb2RpbmcnIGFuZApnZW5lcmF0ZSBhIHNwZWxsIGZpbGUgZm9yICdlbmNvZGluZycuICBJZiBzb21lIG9mIHRoZSB1c2VkIGNoYXJhY3RlcnMgdG8gbm90CmZpdCBpbiAnZW5jb2RpbmcnIHlvdSB3aWxsIGdldCBhbiBlcnJvciBtZXNzYWdlLgoJCQkJCQkJKnNwZWxsLWFmZml4LW1ieXRlKgpXaGVuIHVzaW5nIGEgbXVsdGktYnl0ZSBlbmNvZGluZyBpdCdzIHBvc3NpYmxlIHRvIHVzZSBtb3JlIGRpZmZlcmVudCBhZmZpeApmbGFncy4gIEJ1dCBNeXNwZWxsIGRvZXNuJ3Qgc3VwcG9ydCB0aGF0LCB0aHVzIHlvdSBtYXkgbm90IHdhbnQgdG8gdXNlIGl0CmFueXdheS4gIEZvciBjb21wYXRpYmlsaXR5IHVzZSBhbiA4LWJpdCBlbmNvZGluZy4KCgpJTkZPUk1BVElPTgoKVGhlc2UgZW50cmllcyBpbiB0aGUgYWZmaXggZmlsZSBjYW4gYmUgdXNlZCB0byBhZGQgaW5mb3JtYXRpb24gdG8gdGhlIHNwZWxsCmZpbGUuICBUaGVyZSBhcmUgbm8gcmVzdHJpY3Rpb25zIG9uIHRoZSBmb3JtYXQsIGJ1dCB0aGV5IHNob3VsZCBiZSBpbiB0aGUKcmlnaHQgZW5jb2RpbmcuCgoJCQkJKnNwZWxsLU5BTUUqICpzcGVsbC1WRVJTSU9OKiAqc3BlbGwtSE9NRSoKCQkJCSpzcGVsbC1BVVRIT1IqICpzcGVsbC1FTUFJTCogKnNwZWxsLUNPUFlSSUdIVCoKCU5BTUUJCU5hbWUgb2YgdGhlIGxhbmd1YWdlCglWRVJTSU9OCQkxLjAuMSAgd2l0aCBmaXhlcwoJSE9NRQkJaHR0cDovL3d3dy5teWhvbWUuZXUKCUFVVEhPUgkJSm9obiBEb2UKCUVNQUlMCQlqb2huIEFUIERvZSBET1QgbmV0CglDT1BZUklHSFQJTEdQTAoKVGhlc2UgZmllbGRzIGFyZSBwdXQgaW4gdGhlIC5zcGwgZmlsZSBhcy1pcy4gIFRoZSB8OnNwZWxsaW5mb3wgY29tbWFuZCBjYW4gYmUKdXNlZCB0byB2aWV3IHRoZSBpbmZvLgoKCQkJCQkJCSo6c3BlbGxpbmZvKiAqOnNwZWxsaSoKOnNwZWxsaVtuZm9dCQlEaXNwbGF5IHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWxsIGZpbGUocykgdXNlZCBmb3IKCQkJdGhlIGN1cnJlbnQgYnVmZmVyLgoKCkNIQVJBQ1RFUiBUQUJMRVMKCQkJCQkJCSpzcGVsbC1hZmZpeC1jaGFycyoKV2hlbiB1c2luZyBhbiA4LWJpdCBlbmNvZGluZyB0aGUgYWZmaXggZmlsZSBzaG91bGQgZGVmaW5lIHdoYXQgY2hhcmFjdGVycyBhcmUKd29yZCBjaGFyYWN0ZXJzLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBzeXN0ZW0gd2hlcmUgIjpta3NwZWxsIiBpcyB1c2VkIG1heSBub3QKc3VwcG9ydCBhIGxvY2FsZSB3aXRoIHRoaXMgZW5jb2RpbmcgYW5kIGlzYWxwaGEoKSB3b24ndCB3b3JrLiAgRm9yIGV4YW1wbGUKd2hlbiB1c2luZyAiY3AxMjUwIiBvbiBVbml4LgoJCQkJCQkqRTc2MSogKkU3NjIqICpzcGVsbC1GT0wqCgkJCQkJCSpzcGVsbC1MT1cqICpzcGVsbC1VUFAqClRocmVlIGxpbmVzIGluIHRoZSBhZmZpeCBmaWxlIGFyZSBuZWVkZWQuICBTaW1wbGlzdGljIGV4YW1wbGU6CgoJRk9MICDh6/EgfgoJTE9XICDh6/EgfgoJVVBQICDBy9EgfgoKQWxsIHRocmVlIGxpbmVzIG11c3QgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIG51bWJlciBvZiBjaGFyYWN0ZXJzLgoKVGhlICJGT0wiIGxpbmUgc3BlY2lmaWVzIHRoZSBjYXNlLWZvbGRlZCBjaGFyYWN0ZXJzLiAgVGhlc2UgYXJlIHVzZWQgdG8KY29tcGFyZSB3b3JkcyB3aGlsZSBpZ25vcmluZyBjYXNlLiAgRm9yIG1vc3QgZW5jb2RpbmdzIHRoaXMgaXMgaWRlbnRpY2FsIHRvCnRoZSBsb3dlciBjYXNlIGxpbmUuCgpUaGUgIkxPVyIgbGluZSBzcGVjaWZpZXMgdGhlIGNoYXJhY3RlcnMgaW4gbG93ZXItY2FzZS4gIE1vc3RseSBpdCdzIGVxdWFsIHRvCnRoZSAiRk9MIiBsaW5lLgoKVGhlICJVUFAiIGxpbmUgc3BlY2lmaWVzIHRoZSBjaGFyYWN0ZXJzIHdpdGggdXBwZXItY2FzZS4gIFRoYXQgaXMsIGEgY2hhcmFjdGVyCmlzIHVwcGVyLWNhc2Ugd2hlcmUgaXQncyBkaWZmZXJlbnQgZnJvbSB0aGUgY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluCiJGT0wiLgoKQW4gZXhjZXB0aW9uIGlzIG1hZGUgZm9yIHRoZSBHZXJtYW4gc2hhcnAgcyDfLiAgVGhlIHVwcGVyLWNhc2UgdmVyc2lvbiBpcwoiU1MiLiAgSW4gdGhlIEZPTC9MT1cvVVBQIGxpbmVzIGl0IHNob3VsZCBiZSBpbmNsdWRlZCwgc28gdGhhdCBpdCdzIHJlY29nbml6ZWQKYXMgYSB3b3JkIGNoYXJhY3RlciwgYnV0IHVzZSB0aGUg3yBjaGFyYWN0ZXIgaW4gYWxsIHRocmVlLgoKQVNDSUkgY2hhcmFjdGVycyBzaG91bGQgYmUgb21pdHRlZCwgVmltIGFsd2F5cyBoYW5kbGVzIHRoZXNlIGluIHRoZSBzYW1lIHdheS4KV2hlbiB0aGUgZW5jb2RpbmcgaXMgVVRGLTggbm8gd29yZCBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgc3BlY2lmaWVkLgoKCQkJCQkJCSpFNzYzKgpWaW0gYWxsb3dzIHlvdSB0byB1c2Ugc3BlbGwgY2hlY2tpbmcgZm9yIHNldmVyYWwgbGFuZ3VhZ2VzIGluIHRoZSBzYW1lIGZpbGUuCllvdSBjYW4gbGlzdCB0aGVtIGluIHRoZSAnc3BlbGxsYW5nJyBvcHRpb24uICBBcyBhIGNvbnNlcXVlbmNlIGFsbCBzcGVsbCBmaWxlcwpmb3IgdGhlIHNhbWUgZW5jb2RpbmcgbXVzdCB1c2UgdGhlIHNhbWUgd29yZCBjaGFyYWN0ZXJzLCBvdGhlcndpc2UgdGhleSBjYW4ndApiZSBjb21iaW5lZCB3aXRob3V0IGVycm9ycy4gIElmIHlvdSBnZXQgYSB3YXJuaW5nIHRoYXQgdGhlIHdvcmQgdGFibGVzIGRpZmZlcgp5b3UgbWF5IG5lZWQgdG8gZ2VuZXJhdGUgdGhlIC5zcGwgZmlsZSBhZ2FpbiB3aXRoIHw6bWtzcGVsbHwuICBDaGVjayB0aGUgRk9MLApMT1cgYW5kIFVQUCBsaW5lcyBpbiB0aGUgdXNlZCAuYWZmIGZpbGUuCgpUaGUgWFguYXNjaWkuc3BsIHNwZWxsIGZpbGUgZ2VuZXJhdGVkIHdpdGggdGhlICItYXNjaWkiIGFyZ3VtZW50IHdpbGwgbm90CmNvbnRhaW4gdGhlIHRhYmxlIHdpdGggY2hhcmFjdGVycywgc28gdGhhdCBpdCBjYW4gYmUgY29tYmluZSB3aXRoIHNwZWxsIGZpbGVzCmZvciBhbnkgZW5jb2RpbmcuICBUaGUgLmFkZC5zcGwgZmlsZXMgYWxzbyBkbyBub3QgY29udGFpbiB0aGUgdGFibGUuCgoKTUlELVdPUkQgQ0hBUkFDVEVSUwoJCQkJCQkJKnNwZWxsLW1pZHdvcmQqClNvbWUgY2hhcmFjdGVycyBhcmUgb25seSB0byBiZSBjb25zaWRlcmVkIHdvcmQgY2hhcmFjdGVycyBpZiB0aGV5IGFyZSB1c2VkIGluCmJldHdlZW4gdHdvIG9yZGluYXJ5IHdvcmQgY2hhcmFjdGVycy4gIEFuIGV4YW1wbGUgaXMgdGhlIHNpbmdsZSBxdW90ZTogSXQgaXMKb2Z0ZW4gdXNlZCB0byBwdXQgdGV4dCBpbiBxdW90ZXMsIHRodXMgaXQgY2FuJ3QgYmUgcmVjb2duaXplZCBhcyBhIHdvcmQKY2hhcmFjdGVyLCBidXQgd2hlbiBpdCBhcHBlYXJzIGluIGJldHdlZW4gd29yZCBjaGFyYWN0ZXJzIGl0IG11c3QgYmUgcGFydCBvZgp0aGUgd29yZC4gIFRoaXMgaXMgbmVlZGVkIHRvIGRldGVjdCBhIHNwZWxsaW5nIGVycm9yIHN1Y2ggYXMgdGhleSdhcmUuICBUaGF0CnNob3VsZCBiZSB0aGV5J3JlLCBidXQgc2luY2UgInRoZXkiIGFuZCAiYXJlIiBhcmUgd29yZHMgdGhlbXNlbHZlcyB0aGF0IHdvdWxkCmdvIHVubm90aWNlZC4KClRoZXNlIGNoYXJhY3RlcnMgYXJlIGRlZmluZWQgd2l0aCBNSURXT1JEIGluIHRoZSAuYWZmIGZpbGUuICBFeGFtcGxlOgoKCU1JRFdPUkQJJy0gfgoKCkZMQUcgVFlQRVMJCQkJCQkqc3BlbGwtRkxBRyoKCkZsYWdzIGFyZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGFmZml4ZXMgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIGEgd29yZCBhbmQgZm9yCm90aGVyIHByb3BlcnRpZXMgb2YgdGhlIHdvcmQuICBOb3JtYWxseSBzaW5nbGUtY2hhcmFjdGVyIGZsYWdzIGFyZSB1c2VkLiAgVGhpcwpsaW1pdHMgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBmbGFncywgZXNwZWNpYWxseSBmb3IgOC1iaXQgZW5jb2RpbmdzLiAgVGhlIEZMQUcKaXRlbSBjYW4gYmUgdXNlZCBpZiBtb3JlIGFmZml4ZXMgYXJlIHRvIGJlIHVzZWQuICBQb3NzaWJsZSB2YWx1ZXM6CgoJRkxBRyBsb25nCXVzZSB0d28tY2hhcmFjdGVyIGZsYWdzCglGTEFHIG51bQl1c2UgbnVtYmVycywgZnJvbSAxIHVwIHRvIDY1MDAwCglGTEFHIGNhcGxvbmcJdXNlIG9uZS1jaGFyYWN0ZXIgZmxhZ3Mgd2l0aG91dCBBLVogYW5kIHR3by1jaGFyYWN0ZXIKCQkJZmxhZ3MgdGhhdCBzdGFydCB3aXRoIEEtWgoKV2l0aCAiRkxBRyBudW0iIHRoZSBudW1iZXJzIGluIGEgbGlzdCBvZiBhZmZpeGVzIG5lZWQgdG8gYmUgc2VwYXJhdGVkIHdpdGggYQpjb21tYTogIjIzNCwyMTQzLDE0MzUiLiAgVGhpcyBtZXRob2QgaXMgaW5lZmZpY2llbnQsIGJ1dCB1c2VmdWwgaWYgdGhlIGZpbGUgaXMKZ2VuZXJhdGVkIHdpdGggYSBwcm9ncmFtLgoKV2hlbiB1c2luZyAiY2FwbG9uZyIgdGhlIHR3by1jaGFyYWN0ZXIgZmxhZ3MgYWxsIHN0YXJ0IHdpdGggYSBjYXBpdGFsOiAiQWEiLAoiQjEiLCAiQkIiLCBldGMuICBUaGlzIGlzIHVzZWZ1bCB0byB1c2Ugb25lLWNoYXJhY3RlciBmbGFncyBmb3IgdGhlIG1vc3QKY29tbW9uIGl0ZW1zIGFuZCB0d28tY2hhcmFjdGVyIGZsYWdzIGZvciB1bmNvbW1vbiBpdGVtcy4KCk5vdGU6IFdoZW4gdXNpbmcgdXRmLTggb25seSBjaGFyYWN0ZXJzIHVwIHRvIDY1MDAwIG1heSBiZSB1c2VkIGZvciBmbGFncy4KCgpBRkZJWEVTCgkJCQkJICAgICpzcGVsbC1QRlgqICpzcGVsbC1TRlgqClRoZSB1c3VhbCBQRlggKHByZWZpeCkgYW5kIFNGWCAoc3VmZml4KSBsaW5lcyBhcmUgc3VwcG9ydGVkIChzZWUgdGhlIE15c3BlbGwKZG9jdW1lbnRhdGlvbiBvciB0aGUgQXNwZWxsIG1hbnVhbDoKaHR0cDovL2FzcGVsbC5uZXQvbWFuLWh0bWwvQWZmaXgtQ29tcHJlc3Npb24uaHRtbCkuCgpTdW1tYXJ5OgoJU0ZYIEwgWSAyIH4KCVNGWCBMIDAgcmUgW154XSB+CglTRlggTCAwIHJvIHggfgoKVGhlIGZpcnN0IGxpbmUgaXMgYSBoZWFkZXIgYW5kIGhhcyBmb3VyIGZpZWxkczoKCVNGWCB7ZmxhZ30ge2NvbWJpbmV9IHtjb3VudH0KCntmbGFnfQkJVGhlIG5hbWUgdXNlZCBmb3IgdGhlIHN1ZmZpeC4gIE1vc3RseSBpdCdzIGEgc2luZ2xlIGxldHRlciwKCQlidXQgb3RoZXIgY2hhcmFjdGVycyBjYW4gYmUgdXNlZCwgc2VlIHxzcGVsbC1GTEFHfC4KCntjb21iaW5lfQlDYW4gYmUgJ1knIG9yICdOJy4gIFdoZW4gJ1knIHRoZW4gdGhlIHdvcmQgcGx1cyBzdWZmaXggY2FuCgkJYWxzbyBoYXZlIGEgcHJlZml4LiAgV2hlbiAnTicgdGhlbiBhIHByZWZpeCBpcyBub3QgYWxsb3dlZC4KCntjb3VudH0JCVRoZSBudW1iZXIgb2YgbGluZXMgZm9sbG93aW5nLiAgSWYgdGhpcyBpcyB3cm9uZyB5b3Ugd2lsbCBnZXQKCQlhbiBlcnJvciBtZXNzYWdlLgoKRm9yIFBGWCB0aGUgZmllbGRzIGFyZSBleGFjdGx5IHRoZSBzYW1lLgoKVGhlIGJhc2ljIGZvcm1hdCBmb3IgdGhlIGZvbGxvd2luZyBsaW5lcyBpczoKCVNGWCB7ZmxhZ30ge3N0cmlwfSB7YWRkfSB7Y29uZGl0aW9ufSB7ZXh0cmF9Cgp7ZmxhZ30JCU11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIHtmbGFnfSB1c2VkIGluIHRoZSBmaXJzdCBsaW5lLgoKe3N0cmlwfQkJQ2hhcmFjdGVycyByZW1vdmVkIGZyb20gdGhlIGJhc2ljIHdvcmQuICBUaGVyZSBpcyBubyBjaGVjayBpZgoJCXRoZSBjaGFyYWN0ZXJzIGFyZSBhY3R1YWxseSB0aGVyZSwgb25seSB0aGUgbGVuZ3RoIGlzIHVzZWQgKGluCgkJYnl0ZXMpLiAgVGhpcyBiZXR0ZXIgbWF0Y2ggdGhlIHtjb25kaXRpb259LCBvdGhlcndpc2Ugc3RyYW5nZQoJCXRoaW5ncyBtYXkgaGFwcGVuLiAgSWYgdGhlIHtzdHJpcH0gbGVuZ3RoIGlzIGVxdWFsIHRvIG9yCgkJbG9uZ2VyIHRoYW4gdGhlIGJhc2ljIHdvcmQgdGhlIHN1ZmZpeCB3b24ndCBiZSB1c2VkLgoJCVdoZW4ge3N0cmlwfSBpcyAwICh6ZXJvKSB0aGVuIG5vdGhpbmcgaXMgc3RyaXBwZWQuCgp7YWRkfQkJQ2hhcmFjdGVycyBhZGRlZCB0byB0aGUgYmFzaWMgd29yZCwgYWZ0ZXIgcmVtb3Zpbmcge3N0cmlwfS4KCQlPcHRpb25hbGx5IHRoZXJlIGlzIGEgJy8nIGZvbGxvd2VkIGJ5IGZsYWdzLiAgVGhlIGZsYWdzIGFwcGx5CgkJdG8gdGhlIHdvcmQgcGx1cyBhZmZpeC4gIFNlZSB8c3BlbGwtYWZmaXgtZmxhZ3N8Cgp7Y29uZGl0aW9ufQlBIHNpbXBsaXN0aWMgcGF0dGVybi4gIE9ubHkgd2hlbiB0aGlzIG1hdGNoZXMgd2l0aCBhIGJhc2ljCgkJd29yZCB3aWxsIHRoZSBzdWZmaXggYmUgdXNlZCBmb3IgdGhhdCB3b3JkLiAgVGhpcyBpcyBub3JtYWxseQoJCWZvciB1c2luZyBvbmUgc3VmZml4IGxldHRlciB3aXRoIGRpZmZlcmVudCB7YWRkfSBhbmQge3N0cmlwfQoJCWZpZWxkcyBmb3Igd29yZHMgd2l0aCBkaWZmZXJlbnQgZW5kaW5ncy4KCQlXaGVuIHtjb25kaXRpb259IGlzIGEgLiAoZG90KSB0aGVyZSBpcyBubyBjb25kaXRpb24uCgkJVGhlIHBhdHRlcm4gbWF5IGNvbnRhaW46CgkJLSBMaXRlcmFsIGNoYXJhY3RlcnMuCgkJLSBBIHNldCBvZiBjaGFyYWN0ZXJzIGluIFtdLiBbYWJjXSBtYXRjaGVzIGEsIGIgYW5kIGMuCgkJICBBIGRhc2ggaXMgYWxsb3dlZCBmb3IgYSByYW5nZSBbYS1jXSwgYnV0IHRoaXMgaXMKCQkgIFZpbS1zcGVjaWZpYy4KCQktIEEgc2V0IG9mIGNoYXJhY3RlcnMgdGhhdCBzdGFydHMgd2l0aCBhIF4sIG1lYW5pbmcgdGhlCgkJICBjb21wbGVtZW50IG9mIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVycy4gW15hYmNdIG1hdGNoZXMgYW55CgkJICBjaGFyYWN0ZXIgYnV0IGEsIGIgYW5kIGMuCgp7ZXh0cmF9CQlPcHRpb25hbCBleHRyYSB0ZXh0OgoJCSAgICAjIGNvbW1lbnQJCUNvbW1lbnQgaXMgaWdub3JlZAoJCSAgICAtCQkJSHVuc3BlbGwgdXNlcyB0aGlzLCBpZ25vcmVkCgpGb3IgUEZYIHRoZSBmaWVsZHMgYXJlIHRoZSBzYW1lLCBidXQgdGhlIHtzdHJpcH0sIHthZGR9IGFuZCB7Y29uZGl0aW9ufSBhcHBseQp0byB0aGUgc3RhcnQgb2YgdGhlIHdvcmQuCgpOb3RlOiBNeXNwZWxsIGlnbm9yZXMgYW55IGV4dHJhIHRleHQgYWZ0ZXIgdGhlIHJlbGV2YW50IGluZm8uICBWaW0gcmVxdWlyZXMKdGhpcyB0ZXh0IHRvIHN0YXJ0IHdpdGggYSAiIyIgc28gdGhhdCBtaXN0YWtlcyBkb24ndCBnbyB1bm5vdGljZWQuICBFeGFtcGxlOgoKCVNGWCBGIDAgaW4gICBbXmldbiAgICAgICMgU3Bpb24gPiBTcGlvbmluICB+CglTRlggRiAwIG5lbiAgaW4JCSMgQmF1ZXJpbiA+IEJhdWVyaW5uZW4gfgoKQXBwYXJlbnRseSBNeXNwZWxsIGFsbG93cyBhbiBhZmZpeCBuYW1lIHRvIGFwcGVhciBtb3JlIHRoYW4gb25jZS4gIFNpbmNlIHRoaXMKbWlnaHQgYWxzbyBiZSBhIG1pc3Rha2UsIFZpbSBjaGVja3MgZm9yIGFuIGV4dHJhICJTIi4gIFRoZSBhZmZpeCBmaWxlcyBmb3IKTXlzcGVsbCB0aGF0IHVzZSB0aGlzIGZlYXR1cmUgYXBwYXJlbnRseSBoYXZlIHRoaXMgZmxhZy4gIEV4YW1wbGU6CgoJU0ZYIGEgWSAxIFMgfgoJU0ZYIGEgMCBhbiAuIH4KCglTRlggYSBZIDIgUyB+CglTRlggYSAwIGVuIC4gfgoJU0ZYIGEgMCBvbiAuIH4KCgpBRkZJWCBGTEFHUwkJCQkJCSpzcGVsbC1hZmZpeC1mbGFncyoKClRoaXMgaXMgYSBmZWF0dXJlIHRoYXQgY29tZXMgZnJvbSBIdW5zcGVsbDogVGhlIGFmZml4IG1heSBzcGVjaWZ5IGZsYWdzLiAgVGhpcwp3b3JrcyBzaW1pbGFyIHRvIGZsYWdzIHNwZWNpZmllZCBvbiBhIGJhc2ljIHdvcmQuICBUaGUgZmxhZ3MgYXBwbHkgdG8gdGhlCmJhc2ljIHdvcmQgcGx1cyB0aGUgYWZmaXggKGJ1dCB0aGVyZSBhcmUgcmVzdHJpY3Rpb25zKS4gIEV4YW1wbGU6CgoJU0ZYIFMgWSAxIH4KCVNGWCBTIDAgcyAuIH4KCglTRlggQSBZIDEgfgoJU0ZYIEEgMCBhYmxlL1MgLiB+CgpXaGVuIHRoZSBkaWN0aW9uYXJ5IGZpbGUgY29udGFpbnMgImRyaW5rL0FTIiB0aGVuIHRoZXNlIHdvcmRzIGFyZSBwb3NzaWJsZToKCglkcmluawoJZHJpbmtzCQl1c2VzIFMgc3VmZml4Cglkcmlua2FibGUJdXNlcyBBIHN1ZmZpeAoJZHJpbmthYmxlcwl1c2VzIEEgc3VmZml4IGFuZCB0aGVuIFMgc3VmZml4CgpHZW5lcmFsbHkgdGhlIGZsYWdzIG9mIHRoZSBzdWZmaXggYXJlIGFkZGVkIHRvIHRoZSBmbGFncyBvZiB0aGUgYmFzaWMgd29yZCwKYm90aCBhcmUgdXNlZCBmb3IgdGhlIHdvcmQgcGx1cyBzdWZmaXguICBCdXQgdGhlIGZsYWdzIG9mIHRoZSBiYXNpYyB3b3JkIGFyZQpvbmx5IHVzZWQgb25jZSBmb3IgYWZmaXhlcywgZXhjZXB0IHRoYXQgYm90aCBvbmUgcHJlZml4IGFuZCBvbmUgc3VmZml4IGNhbiBiZQp1c2VkIHdoZW4gYm90aCBzdXBwb3J0IGNvbWJpbmluZy4KClNwZWNpZmljYWxseSwgdGhlIGFmZml4IGZsYWdzIGNhbiBiZSB1c2VkIGZvcjoKLSBTdWZmaXhlcyBvbiBzdWZmaXhlcywgYXMgaW4gdGhlIGV4YW1wbGUgYWJvdmUuICBUaGlzIHdvcmtzIG9uY2UsIHRodXMgeW91CiAgY2FuIGhhdmUgdHdvIHN1ZmZpeGVzIG9uIGEgd29yZCAocGx1cyBvbmUgcHJlZml4KS4KLSBNYWtpbmcgdGhlIHdvcmQgd2l0aCB0aGUgYWZmaXggcmFyZSwgYnkgdXNpbmcgdGhlIHxzcGVsbC1SQVJFfCBmbGFnLgotIEV4Y2x1ZGUgdGhlIHdvcmQgd2l0aCB0aGUgYWZmaXggZnJvbSBjb21wb3VuZGluZywgYnkgdXNpbmcgdGhlCiAgfHNwZWxsLUNPTVBPVU5ERk9SQklERkxBR3wgZmxhZy4KLSBBbGxvdyB0aGUgd29yZCB3aXRoIHRoZSBhZmZpeCB0byBiZSBwYXJ0IG9mIGEgY29tcG91bmQgd29yZCBvbiB0aGUgc2lkZSBvZgogIHRoZSBhZmZpeCB3aXRoIHRoZSB8c3BlbGwtQ09NUE9VTkRQRVJNSVRGTEFHfC4KLSBVc2UgdGhlIE5FRURDT01QT1VORCBmbGFnOiB3b3JkIHBsdXMgYWZmaXggY2FuIG9ubHkgYmUgdXNlZCBhcyBwYXJ0IG9mIGEKICBjb21wb3VuZCB3b3JkLiB8c3BlbGwtTkVFRENPTVBPVU5EfAotIENvbXBvdW5kIGZsYWdzOiB3b3JkIHBsdXMgYWZmaXggY2FuIGJlIHBhcnQgb2YgYSBjb21wb3VuZCB3b3JkIGF0IHRoZSBlbmQsCiAgbWlkZGxlLCBzdGFydCwgZXRjLiAgVGhlIGZsYWdzIGFyZSBjb21iaW5lZCB3aXRoIHRoZSBmbGFncyBvZiB0aGUgYmFzaWMKICB3b3JkLiAgfHNwZWxsLWNvbXBvdW5kfAotIE5FRURBRkZJWDogYW5vdGhlciBhZmZpeCBpcyBuZWVkZWQgdG8gbWFrZSBhIHZhbGlkIHdvcmQuCi0gQ0lSQ1VNRklYLCBhcyBleHBsYWluZWQganVzdCBiZWxvdy4KCgpDSVJDVU1GSVgJCQkJCQkqc3BlbGwtQ0lSQ1VNRklYKgoKVGhlIENJUkNVTUZJWCBmbGFnIG1lYW5zIGEgcHJlZml4IGFuZCBzdWZmaXggbXVzdCBiZSBhZGRlZCBhdCB0aGUgc2FtZSB0aW1lLgpJZiBhIHByZWZpeCBoYXMgdGhlIENJUkNVTUZJWCBmbGFnIHRoYW4gb25seSBzdWZmaXhlcyB3aXRoIHRoZSBDSVJDVU1GSVggZmxhZwpjYW4gYmUgYWRkZWQsIGFuZCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KQW4gYWx0ZXJuYXRpdmUgaXMgdG8gb25seSBzcGVjaWZ5IHRoZSBzdWZmaXgsIGFuZCBnaXZlIHRoZSB0aGF0IHN1ZmZpeCB0d28KZmxhZ3M6IFRoZSByZXF1aXJlZCBwcmVmaXggYW5kIHRoZSBORUVEQUZGSVggZmxhZy4gIHxzcGVsbC1ORUVEQUZGSVh8CgoKUEZYUE9TVFBPTkUJCQkJCQkqc3BlbGwtUEZYUE9TVFBPTkUqCgpXaGVuIGFuIGFmZml4IGZpbGUgaGFzIHZlcnkgbWFueSBwcmVmaXhlcyB0aGF0IGFwcGx5IHRvIG1hbnkgd29yZHMgaXQncyBub3QKcG9zc2libGUgdG8gYnVpbGQgdGhlIHdob2xlIHdvcmQgbGlzdCBpbiBtZW1vcnkuICBUaGlzIGFwcGxpZXMgdG8gSGVicmV3IChhCmxpc3Qgd2l0aCBhbGwgd29yZHMgaXMgb3ZlciBhIEdieXRlKS4gIEluIHRoYXQgY2FzZSBhcHBseWluZyBwcmVmaXhlcyBtdXN0IGJlCnBvc3Rwb25lZC4gIFRoaXMgbWFrZXMgc3BlbGwgY2hlY2tpbmcgc2xvd2VyLiAgSXQgaXMgaW5kaWNhdGVkIGJ5IHRoaXMga2V5d29yZAppbiB0aGUgLmFmZiBmaWxlOgoKCVBGWFBPU1RQT05FIH4KCk9ubHkgcHJlZml4ZXMgd2l0aG91dCBhIGNob3Agc3RyaW5nIGFuZCB3aXRob3V0IGZsYWdzIGNhbiBiZSBwb3N0cG9uZWQuClByZWZpeGVzIHdpdGggYSBjaG9wIHN0cmluZyBvciB3aXRoIGZsYWdzIHdpbGwgc3RpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHdvcmQKbGlzdC4gIEFuIGV4Y2VwdGlvbiBpZiB0aGUgY2hvcCBzdHJpbmcgaXMgb25lIGNoYXJhY3RlciBhbmQgZXF1YWwgdG8gdGhlIGxhc3QKY2hhcmFjdGVyIG9mIHRoZSBhZGRlZCBzdHJpbmcsIGJ1dCBpbiBsb3dlciBjYXNlLiAgVGh1cyB3aGVuIHRoZSBjaG9wIHN0cmluZwppcyB1c2VkIHRvIGFsbG93IHRoZSBmb2xsb3dpbmcgd29yZCB0byBzdGFydCB3aXRoIGFuIHVwcGVyIGNhc2UgbGV0dGVyLgoKCldPUkRTIFdJVEggQSBTTEFTSAkJCQkJKnNwZWxsLVNMQVNIKgoKVGhlIHNsYXNoIGlzIHVzZWQgaW4gdGhlIC5kaWMgZmlsZSB0byBzZXBhcmF0ZSB0aGUgYmFzaWMgd29yZCBmcm9tIHRoZSBhZmZpeApsZXR0ZXJzIGFuZCBvdGhlciBmbGFncy4gIFVuZm9ydHVuYXRlbHksIHRoaXMgbWVhbnMgeW91IGNhbm5vdCB1c2UgYSBzbGFzaCBpbgphIHdvcmQuICBUaHVzICJUQ1AvSVAiIGlzIG5vdCBhIHdvcmQgYnV0ICJUQ1Agd2l0aCB0aGUgZmxhZ3MgIklQIi4gIFRvIGluY2x1ZGUKYSBzbGFzaCBpbiB0aGUgd29yZCBwdXQgYSBiYWNrc2xhc2ggYmVmb3JlIGl0OiAiVENQXC9JUCIuICBJbiB0aGUgcmFyZSBjYXNlCnlvdSB3YW50IHRvIHVzZSBhIGJhY2tzbGFzaCBpbnNpZGUgYSB3b3JkIHlvdSBuZWVkIHRvIHVzZSB0d28gYmFja3NsYXNoZXMuCkFueSBvdGhlciB1c2Ugb2YgdGhlIGJhY2tzbGFzaCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIGV4cGFuc2lvbi4KCgpLRUVQLUNBU0UgV09SRFMJCQkJCQkqc3BlbGwtS0VFUENBU0UqCgpJbiB0aGUgYWZmaXggZmlsZSBhIEtFRVBDQVNFIGxpbmUgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBhZmZpeCBuYW1lIHVzZWQKZm9yIGtlZXAtY2FzZSB3b3Jkcy4gIEV4YW1wbGU6CgoJS0VFUENBU0UgPSB+CgpUaGlzIGZsYWcgaXMgbm90IHN1cHBvcnRlZCBieSBNeXNwZWxsLiAgSXQgaGFzIHRoZSBtZWFuaW5nIHRoYXQgY2FzZSBtYXR0ZXJzLgpUaGlzIGNhbiBiZSB1c2VkIGlmIHRoZSB3b3JkIGRvZXMgbm90IGhhdmUgdGhlIGZpcnN0IGxldHRlciBpbiB1cHBlciBjYXNlIGF0CnRoZSBzdGFydCBvZiBhIHNlbnRlbmNlLiAgRXhhbXBsZToKCiAgICB3b3JkIGxpc3QJICAgIG1hdGNoZXMJCSAgICBkb2VzIG5vdCBtYXRjaCB+CiAgICAncyBtb3JnZW5zLz0gICAgJ3MgbW9yZ2VucwkJICAgICdTIG1vcmdlbnMgJ3MgTW9yZ2VucyAnUyBNT1JHRU5TCiAgICAncyBNb3JnZW5zCSAgICAncyBNb3JnZW5zICdTIE1PUkdFTlMgICAnUyBtb3JnZW5zICdzIG1vcmdlbnMKClRoZSBmbGFnIGNhbiBhbHNvIGJlIHVzZWQgdG8gYXZvaWQgdGhhdCB0aGUgd29yZCBtYXRjaGVzIHdoZW4gaXQgaXMgaW4gYWxsCnVwcGVyLWNhc2UgbGV0dGVycy4KCgpSQVJFIFdPUkRTCQkJCQkJKnNwZWxsLVJBUkUqCgpJbiB0aGUgYWZmaXggZmlsZSBhIFJBUkUgbGluZSBjYW4gYmUgdXNlZCB0byBkZWZpbmUgdGhlIGFmZml4IG5hbWUgdXNlZCBmb3IKcmFyZSB3b3Jkcy4gIEV4YW1wbGU6CgoJUkFSRSA/IH4KClJhcmUgd29yZHMgYXJlIGhpZ2hsaWdodGVkIGRpZmZlcmVudGx5IGZyb20gYmFkIHdvcmRzLiAgVGhpcyBpcyB0byBiZSB1c2VkIGZvcgp3b3JkcyB0aGF0IGFyZSBjb3JyZWN0IGZvciB0aGUgbGFuZ3VhZ2UsIGJ1dCBhcmUgaGFyZGx5IGV2ZXIgdXNlZCBhbmQgY291bGQgYmUKYSB0eXBpbmcgbWlzdGFrZSBhbnl3YXkuICBXaGVuIHRoZSBzYW1lIHdvcmQgaXMgZm91bmQgYXMgZ29vZCBpdCB3b24ndCBiZQpoaWdobGlnaHRlZCBhcyByYXJlLgoKVGhpcyBmbGFnIGNhbiBhbHNvIGJlIHVzZWQgb24gYW4gYWZmaXgsIHNvIHRoYXQgYSBiYXNpYyB3b3JkIGlzIG5vdCByYXJlIGJ1dAp0aGUgYmFzaWMgd29yZCBwbHVzIGFmZml4IGlzIHJhcmUgfHNwZWxsLWFmZml4LWZsYWdzfC4gIEhvd2V2ZXIsIGlmIHRoZSB3b3JkCmFsc28gYXBwZWFycyBhcyBhIGdvb2Qgd29yZCBpbiBhbm90aGVyIHdheSAoZS5nLiwgaW4gYW5vdGhlciByZWdpb24pIGl0IHdvbid0CmJlIG1hcmtlZCBhcyByYXJlLgoKCkJBRCBXT1JEUwkJCQkJCSpzcGVsbC1CQUQqCgpJbiB0aGUgYWZmaXggZmlsZSBhIEJBRCBsaW5lIGNhbiBiZSB1c2VkIHRvIGRlZmluZSB0aGUgYWZmaXggbmFtZSB1c2VkIGZvcgpiYWQgd29yZHMuICBFeGFtcGxlOgoKCUJBRCAhIH4KClRoaXMgY2FuIGJlIHVzZWQgdG8gZXhjbHVkZSB3b3JkcyB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSBnb29kLiAgRm9yIGV4YW1wbGUKInRoZSB0aGUiIGluIHRoZSAuZGljIGZpbGU6CgoJdGhlIHRoZS8hIH4KCk9uY2UgYSB3b3JkIGhhcyBiZWVuIG1hcmtlZCBhcyBiYWQgaXQgd29uJ3QgYmUgdW5kb25lIGJ5IGVuY291bnRlcmluZyB0aGUgc2FtZQp3b3JkIGFzIGdvb2QuCgpUaGUgZmxhZyBhbHNvIGFwcGxpZXMgdG8gdGhlIHdvcmQgd2l0aCBhZmZpeGVzLCB0aHVzIHRoaXMgY2FuIGJlIHVzZWQgdG8gbWFyawphIHdob2xlIGJ1bmNoIG9mIHJlbGF0ZWQgd29yZHMgYXMgYmFkLgoKCQkJCQkJCSpzcGVsbC1ORUVEQUZGSVgqClRoZSBORUVEQUZGSVggZmxhZyBpcyB1c2VkIHRvIHJlcXVpcmUgdGhhdCBhIHdvcmQgaXMgdXNlZCB3aXRoIGFuIGFmZml4LiAgVGhlCndvcmQgaXRzZWxmIGlzIG5vdCBhIGdvb2Qgd29yZCAodW5sZXNzIHRoZXJlIGlzIGFuIGVtcHR5IGFmZml4KS4gIEV4YW1wbGU6CgoJTkVFREFGRklYICsgfgoKCkNPTVBPVU5EIFdPUkRTCQkJCQkJKnNwZWxsLWNvbXBvdW5kKgoKQSBjb21wb3VuZCB3b3JkIGlzIGEgbG9uZ2VyIHdvcmQgbWFkZSBieSBjb25jYXRlbmF0aW5nIHdvcmRzIHRoYXQgYXBwZWFyIGluCnRoZSAuZGljIGZpbGUuICBUbyBzcGVjaWZ5IHdoaWNoIHdvcmRzIG1heSBiZSBjb25jYXRlbmF0ZWQgYSBjaGFyYWN0ZXIgaXMKdXNlZC4gIFRoaXMgY2hhcmFjdGVyIGlzIHB1dCBpbiB0aGUgbGlzdCBvZiBhZmZpeGVzIGFmdGVyIHRoZSB3b3JkLiAgV2Ugd2lsbApjYWxsIHRoaXMgY2hhcmFjdGVyIGEgZmxhZyBoZXJlLiAgT2J2aW91c2x5IHRoZXNlIGZsYWdzIG11c3QgYmUgZGlmZmVyZW50IGZyb20KYW55IGFmZml4IElEcyB1c2VkLgoKCQkJCQkJCSpzcGVsbC1DT01QT1VOREZMQUcqClRoZSBNeXNwZWxsIGNvbXBhdGlibGUgbWV0aG9kIHVzZXMgb25lIGZsYWcsIHNwZWNpZmllZCB3aXRoIENPTVBPVU5ERkxBRy4gIEFsbAp3b3JkcyB3aXRoIHRoaXMgZmxhZyBjb21iaW5lIGluIGFueSBvcmRlci4gIFRoaXMgbWVhbnMgdGhlcmUgaXMgbm8gY29udHJvbApvdmVyIHdoaWNoIHdvcmQgY29tZXMgZmlyc3QuICBFeGFtcGxlOgoJQ09NUE9VTkRGTEFHIGMgfgoKCQkJCQkJCSpzcGVsbC1DT01QT1VORFJVTEUqCkEgbW9yZSBhZHZhbmNlZCBtZXRob2QgdG8gc3BlY2lmeSBob3cgY29tcG91bmQgd29yZHMgY2FuIGJlIGZvcm1lZCB1c2VzCm11bHRpcGxlIGl0ZW1zIHdpdGggbXVsdGlwbGUgZmxhZ3MuICBUaGlzIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggTXlzcGVsbCAzLjAuCkxldCdzIHN0YXJ0IHdpdGggYW4gZXhhbXBsZToKCUNPTVBPVU5EUlVMRSBjKyB+CglDT01QT1VORFJVTEUgc2UgfgoKVGhlIGZpcnN0IGxpbmUgZGVmaW5lcyB0aGF0IHdvcmRzIHdpdGggdGhlICJjIiBmbGFnIGNhbiBiZSBjb25jYXRlbmF0ZWQgaW4gYW55Cm9yZGVyLiAgVGhlIHNlY29uZCBsaW5lIGRlZmluZXMgY29tcG91bmQgd29yZHMgdGhhdCBhcmUgbWFkZSBvZiBvbmUgd29yZCB3aXRoCnRoZSAicyIgZmxhZyBhbmQgb25lIHdvcmQgd2l0aCB0aGUgImUiIGZsYWcuICBXaXRoIHRoaXMgZGljdGlvbmFyeToKCWJvcmsvYyB+Cglvbmlvbi9zIH4KCXNvdXAvZSB+CgpZb3UgY2FuIG1ha2UgdGhlc2Ugd29yZHM6Cglib3JrCglib3JrYm9yawoJYm9ya2Jvcmtib3JrCgkoZXRjLikKCW9uaW9uCglzb3VwCglvbmlvbnNvdXAKClRoZSBDT01QT1VORFJVTEUgaXRlbSBtYXkgYXBwZWFyIG11bHRpcGxlIHRpbWVzLiAgVGhlIGFyZ3VtZW50IGlzIG1hZGUgb3V0IG9mCm9uZSBvciBtb3JlIGdyb3Vwcywgd2hlcmUgZWFjaCBncm91cCBjYW4gYmU6CglvbmUgZmxhZwkJCWUuZy4sIGMKCWFsdGVybmF0ZSBmbGFncyBpbnNpZGUgW10JZS5nLiwgW2FiY10KT3B0aW9uYWxseSB0aGlzIG1heSBiZSBmb2xsb3dlZCBieToKCSoJdGhlIGdyb3VwIGFwcGVhcnMgemVybyBvciBtb3JlIHRpbWVzLCBlLmcuLCBzbSplCgkrCXRoZSBncm91cCBhcHBlYXJzIG9uZSBvciBtb3JlIHRpbWVzLCBlLmcuLCBjKwoKVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSByZWdleHAgcGF0dGVybiBzeW50YXggKGJ1dCBub3QgdGhlIHNhbWUhKS4gIEEgZmV3CmV4YW1wbGVzIHdpdGggdGhlIHNlcXVlbmNlIG9mIHdvcmQgZmxhZ3MgdGhleSByZXF1aXJlOgogICAgQ09NUE9VTkRSVUxFIHgrCSAgICB4IHh4IHh4eCBldGMuCiAgICBDT01QT1VORFJVTEUgeXoJICAgIHl6CiAgICBDT01QT1VORFJVTEUgeCt6CSAgICB4eiB4eHogeHh4eiBldGMuCiAgICBDT01QT1VORFJVTEUgeXgrCSAgICB5eCB5eHggeXh4eCBldGMuCgogICAgQ09NUE9VTkRSVUxFIFthYmNdeiAgICBheiBieiBjegogICAgQ09NUE9VTkRSVUxFIFthYmNdK3ogICBheiBhYXogYWJheiBieiBiYXogYmNieiBjeiBjYXogY2JheiBldGMuCiAgICBDT01QT1VORFJVTEUgYVt4eXpdKyAgIGF4IGF4eCBheHl6IGF5IGF5eCBheXp6IGF6IGF6eSBhenh5IGV0Yy4KICAgIENPTVBPVU5EUlVMRSBzbSplCSAgICBzZSBzbWUgc21tZSBzbW1tZSBldGMuCiAgICBDT01QT1VORFJVTEUgc1t4eXpdKmUgIHNlIHN4ZSBzeHllIHN4eXhlIHN5ZSBzeXplIHN6ZSBzenllIHN6eXhlICBldGMuCgpBIHNwZWNpZmljIGV4YW1wbGU6IEFsbG93IGEgY29tcG91bmQgdG8gYmUgbWFkZSBvZiB0d28gd29yZHMgYW5kIGEgZGFzaDoKCUluIHRoZSAuYWZmIGZpbGU6CgkgICAgQ09NUE9VTkRSVUxFIHNkZSB+CgkgICAgTkVFREFGRklYIHggfgoJICAgIENPTVBPVU5EV09SRE1BWCAzIH4KCSAgICBDT01QT1VORE1JTiAxIH4KCUluIHRoZSAuZGljIGZpbGU6CgkgICAgc3RhcnQvcyB+CgkgICAgZW5kL2UgfgoJICAgIC0veGQgfgoKVGhpcyBhbGxvd3MgZm9yIHRoZSB3b3JkICJzdGFydC1lbmQiLCBidXQgbm90ICJzdGFydGVuZCIuCgpBbiBhZGRpdGlvbmFsIGltcGxpZWQgcnVsZSBpcyB0aGF0LCB3aXRob3V0IGZ1cnRoZXIgZmxhZ3MsIGEgd29yZCB3aXRoIGEKcHJlZml4IGNhbm5vdCBiZSBjb21wb3VuZGVkIGFmdGVyIGFub3RoZXIgd29yZCwgYW5kIGEgd29yZCB3aXRoIGEgc3VmZml4CmNhbm5vdCBiZSBjb21wb3VuZGVkIHdpdGggYSBmb2xsb3dpbmcgd29yZC4gIFRodXMgdGhlIGFmZml4IGNhbm5vdCBhcHBlYXIKb24gdGhlIGluc2lkZSBvZiBhIGNvbXBvdW5kIHdvcmQuICBUaGlzIGNhbiBiZSBjaGFuZ2VkIHdpdGggdGhlCnxzcGVsbC1DT01QT1VORFBFUk1JVEZMQUd8LgoKCQkJCQkJCSpzcGVsbC1ORUVEQ09NUE9VTkQqClRoZSBORUVEQ09NUE9VTkQgZmxhZyBpcyB1c2VkIHRvIHJlcXVpcmUgdGhhdCBhIHdvcmQgaXMgdXNlZCBhcyBwYXJ0IG9mIGEKY29tcG91bmQgd29yZC4gIFRoZSB3b3JkIGl0c2VsZiBpcyBub3QgYSBnb29kIHdvcmQuICBFeGFtcGxlOgoKCU5FRURDT01QT1VORCAmIH4KCgkJCQkJCQkqc3BlbGwtQ09NUE9VTkRNSU4qClRoZSBtaW5pbWFsIGNoYXJhY3RlciBsZW5ndGggb2YgYSB3b3JkIHVzZWQgZm9yIGNvbXBvdW5kaW5nIGlzIHNwZWNpZmllZCB3aXRoCkNPTVBPVU5ETUlOLiAgRXhhbXBsZToKCUNPTVBPVU5ETUlOIDUgfgoKV2hlbiBvbWl0dGVkIHRoZXJlIGlzIG5vIG1pbmltYWwgbGVuZ3RoLiAgT2J2aW91c2x5IHlvdSBjb3VsZCBqdXN0IGxlYXZlIG91dAp0aGUgY29tcG91bmQgZmxhZyBmcm9tIHNob3J0IHdvcmRzIGluc3RlYWQsIHRoaXMgZmVhdHVyZSBpcyBwcmVzZW50IGZvcgpjb21wYXRpYmlsaXR5IHdpdGggTXlzcGVsbC4KCgkJCQkJCQkqc3BlbGwtQ09NUE9VTkRXT1JETUFYKgpUaGUgbWF4aW11bSBudW1iZXIgb2Ygd29yZHMgdGhhdCBjYW4gYmUgY29uY2F0ZW5hdGVkIGludG8gYSBjb21wb3VuZCB3b3JkIGlzCnNwZWNpZmllZCB3aXRoIENPTVBPVU5EV09SRE1BWC4gIEV4YW1wbGU6CglDT01QT1VORFdPUkRNQVggMyB+CgpXaGVuIG9taXR0ZWQgdGhlcmUgaXMgbm8gbWF4aW11bS4gIEl0IGFwcGxpZXMgdG8gYWxsIGNvbXBvdW5kIHdvcmRzLgoKVG8gc2V0IGEgbGltaXQgZm9yIHdvcmRzIHdpdGggc3BlY2lmaWMgZmxhZ3MgbWFrZSBzdXJlIHRoZSBpdGVtcyBpbgpDT01QT1VORFJVTEUgd2hlcmUgdGhleSBhcHBlYXIgZG9uJ3QgYWxsb3cgdG9vIG1hbnkgd29yZHMuCgoJCQkJCQkJKnNwZWxsLUNPTVBPVU5EU1lMTUFYKgpUaGUgbWF4aW11bSBudW1iZXIgb2Ygc3lsbGFibGVzIHRoYXQgYSBjb21wb3VuZCB3b3JkIG1heSBjb250YWluIGlzIHNwZWNpZmllZAp3aXRoIENPTVBPVU5EU1lMTUFYLiAgRXhhbXBsZToKCUNPTVBPVU5EU1lMTUFYIDYgfgoKVGhpcyBoYXMgbm8gZWZmZWN0IGlmIHRoZXJlIGlzIG5vIFNZTExBQkxFIGl0ZW0uICBXaXRob3V0IENPTVBPVU5EU1lMTUFYIHRoZXJlCmlzIG5vIGxpbWl0IG9uIHRoZSBudW1iZXIgb2Ygc3lsbGFibGVzLgoKSWYgYm90aCBDT01QT1VORFdPUkRNQVggYW5kIENPTVBPVU5EU1lMTUFYIGFyZSBkZWZpbmVkLCBhIGNvbXBvdW5kIHdvcmQgaXMKYWNjZXB0ZWQgaWYgaXQgZml0cyBvbmUgb2YgdGhlIGNyaXRlcmlhLCB0aHVzIGlzIGVpdGhlciBtYWRlIGZyb20gdXAgdG8KQ09NUE9VTkRXT1JETUFYIHdvcmRzIG9yIGNvbnRhaW5zIHVwIHRvIENPTVBPVU5EU1lMTUFYIHN5bGxhYmxlcy4KCgkJCQkJCSAgICAqc3BlbGwtQ09NUE9VTkRGT1JCSURGTEFHKgpUaGUgQ09NUE9VTkRGT1JCSURGTEFHIHNwZWNpZmllcyBhIGZsYWcgdGhhdCBjYW4gYmUgdXNlZCBvbiBhbiBhZmZpeC4gIEl0Cm1lYW5zIHRoYXQgdGhlIHdvcmQgcGx1cyBhZmZpeCBjYW5ub3QgYmUgdXNlZCBpbiBhIGNvbXBvdW5kIHdvcmQuICBFeGFtcGxlOgoJYWZmaXggZmlsZToKCQlDT01QT1VOREZMQUcgYyB+CgkJQ09NUE9VTkRGT1JCSURGTEFHIHggfgoJCVNGWCBhIFkgMiB+CgkJU0ZYIGEgMCBzICAgLiB+CgkJU0ZYIGEgMCBpemUveCAuIH4KCWRpY3Rpb25hcnk6CgkJd29yZC9jIH4KCQl1dGlsL2FjIH4KClRoaXMgYWxsb3dzIGZvciAid29yZHV0aWwiIGFuZCAid29yZHV0aWxzIiBidXQgbm90ICJ3b3JkdXRpbGl6ZSIuCk5vdGU6IHRoaXMgZG9lc24ndCB3b3JrIGZvciBwb3N0cG9uZWQgcHJlZml4ZXMgeWV0LgoKCQkJCQkJICAgICpzcGVsbC1DT01QT1VORFBFUk1JVEZMQUcqClRoZSBDT01QT1VORFBFUk1JVEZMQUcgc3BlY2lmaWVzIGEgZmxhZyB0aGF0IGNhbiBiZSB1c2VkIG9uIGFuIGFmZml4LiAgSXQKbWVhbnMgdGhhdCB0aGUgd29yZCBwbHVzIGFmZml4IGNhbiBhbHNvIGJlIHVzZWQgaW4gYSBjb21wb3VuZCB3b3JkIGluIGEgd2F5CndoZXJlIHRoZSBhZmZpeCBlbmRzIHVwIGhhbGZ3YXkgdGhlIHdvcmQuICBXaXRob3V0IHRoaXMgZmxhZyB0aGF0IGlzIG5vdAphbGxvd2VkLgpOb3RlOiB0aGlzIGRvZXNuJ3Qgd29yayBmb3IgcG9zdHBvbmVkIHByZWZpeGVzIHlldC4KCgkJCQkJCSAgICAqc3BlbGwtQ09NUE9VTkRST09UKgpUaGUgQ09NUE9VTkRST09UIGZsYWcgaXMgdXNlZCBmb3Igd29yZHMgaW4gdGhlIGRpY3Rpb25hcnkgdGhhdCBhcmUgYWxyZWFkeSBhCmNvbXBvdW5kLiAgVGhpcyBtZWFucyBpdCBjb3VudHMgZm9yIHR3byB3b3JkcyB3aGVuIGNoZWNraW5nIHRoZSBjb21wb3VuZGluZwpydWxlcy4gIENhbiBhbHNvIGJlIHVzZWQgZm9yIGFuIGFmZml4IHRvIGNvdW50IHRoZSBhZmZpeCBhcyBhIGNvbXBvdW5kaW5nCndvcmQuCgoJCQkJCQkJKnNwZWxsLVNZTExBQkxFKgpUaGUgU1lMTEFCTEUgaXRlbSBkZWZpbmVzIGNoYXJhY3RlcnMgb3IgY2hhcmFjdGVyIHNlcXVlbmNlcyB0aGF0IGFyZSB1c2VkIHRvCmNvdW50IHRoZSBudW1iZXIgb2Ygc3lsbGFibGVzIGluIGEgd29yZC4gIEV4YW1wbGU6CglTWUxMQUJMRSBh4WXpae1v8/b1dfr8+3kvYWEvYXUvZWEvZWUvZWkvaWUvb2Evb2Uvb28vb3UvdXUvdWkgfgoKQmVmb3JlIHRoZSBmaXJzdCBzbGFzaCBpcyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgY291bnRlZCBmb3Igb25lCnN5bGxhYmxlLCBhbHNvIHdoZW4gcmVwZWF0ZWQgYW5kIG1peGVkLCB1bnRpbCB0aGUgbmV4dCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QKaW4gdGhpcyBzZXQuICBBZnRlciB0aGUgc2xhc2ggY29tZSBzZXF1ZW5jZXMgb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBjb3VudGVkCmZvciBvbmUgc3lsbGFibGUuICBUaGVzZSBhcmUgcHJlZmVycmVkIG92ZXIgdXNpbmcgY2hhcmFjdGVycyBmcm9tIHRoZSBzZXQuCldpdGggdGhlIGV4YW1wbGUgImlkZWVlbiIgaGFzIHRocmVlIHN5bGxhYmxlcywgY291bnRlZCBieSAiaSIsICJlZSIgYW5kICJlIi4KCk9ubHkgY2FzZS1mb2xkZWQgbGV0dGVycyBuZWVkIHRvIGJlIGluY2x1ZGVkLgoKQW5vdGhlciB3YXkgdG8gcmVzdHJpY3QgY29tcG91bmRpbmcgd2FzIG1lbnRpb25lZCBhYm92ZTogQWRkaW5nIHRoZQp8c3BlbGwtQ09NUE9VTkRGT1JCSURGTEFHfCBmbGFnIHRvIGFuIGFmZml4IGNhdXNlcyBhbGwgd29yZHMgdGhhdCBhcmUgbWFkZQp3aXRoIHRoYXQgYWZmaXggbm90IGJlIGJlIHVzZWQgZm9yIGNvbXBvdW5kaW5nLgoKClVOTElNSVRFRCBDT01QT1VORElORwkJCQkJKnNwZWxsLU5PQlJFQUsqCgpGb3Igc29tZSBsYW5ndWFnZXMsIHN1Y2ggYXMgVGhhaSwgdGhlcmUgaXMgbm8gc3BhY2UgaW4gYmV0d2VlbiB3b3Jkcy4gIFRoaXMKbG9va3MgbGlrZSBhbGwgd29yZHMgYXJlIGNvbXBvdW5kZWQuICBUbyBzcGVjaWZ5IHRoaXMgdXNlIHRoZSBOT0JSRUFLIGl0ZW0gaW4KdGhlIGFmZml4IGZpbGUsIHdpdGhvdXQgYXJndW1lbnRzOgoJTk9CUkVBSyB+CgpWaW0gd2lsbCB0cnkgdG8gZmlndXJlIG91dCB3aGVyZSBvbmUgd29yZCBlbmRzIGFuZCBhIG5leHQgc3RhcnRzLiAgV2hlbiB0aGVyZQphcmUgc3BlbGxpbmcgbWlzdGFrZXMgdGhpcyBtYXkgbm90IGJlIHF1aXRlIHJpZ2h0LgoKCgkJCQkJCQkqc3BlbGwtQ09NTU9OKgpDb21tb24gd29yZHMgY2FuIGJlIHNwZWNpZmllZCB3aXRoIHRoZSBDT01NT04gaXRlbS4gIFRoaXMgd2lsbCBnaXZlIGJldHRlcgpzdWdnZXN0aW9ucyB3aGVuIGVkaXRpbmcgYSBzaG9ydCBmaWxlLiAgRXhhbXBsZToKCglDT01NT04gIHRoZSBvZiB0byBhbmQgYSBpbiBpcyBpdCB5b3UgdGhhdCBoZSB3YXMgZm9yIG9uIGFyZSB+CgpUaGUgd29yZHMgbXVzdCBiZSBzZXBhcmF0ZWQgYnkgd2hpdGUgc3BhY2UsIHVwIHRvIDI1IHBlciBsaW5lLgpXaGVuIG11bHRpcGxlIHJlZ2lvbnMgYXJlIHNwZWNpZmllZCBpbiBhICI6bWtzcGVsbCIgY29tbWFuZCB0aGUgY29tbW9uIHdvcmRzCmZvciBhbGwgcmVnaW9ucyBhcmUgY29tYmluZWQgYW5kIHVzZWQgZm9yIGFsbCByZWdpb25zLgoKCQkJCQkJCSpzcGVsbC1OT1NQTElUU1VHUyoKVGhpcyBpdGVtIGluZGljYXRlcyB0aGF0IHNwbGl0dGluZyBhIHdvcmQgdG8gbWFrZSBzdWdnZXN0aW9ucyBpcyBub3QgYSBnb29kCmlkZWEuICBTcGxpdC13b3JkIHN1Z2dlc3Rpb25zIHdpbGwgYXBwZWFyIG9ubHkgd2hlbiB0aGVyZSBhcmUgZmV3IHNpbWlsYXIKd29yZHMuCgoJTk9TUExJVFNVR1MgfgoKCQkJCQkJCSpzcGVsbC1OT1NVR0dFU1QqClRoZSBmbGFnIHNwZWNpZmllZCB3aXRoIE5PU1VHR0VTVCBjYW4gYmUgdXNlZCBmb3Igd29yZHMgdGhhdCB3aWxsIG5vdCBiZQpzdWdnZXN0ZWQuICBDYW4gYmUgdXNlZCBmb3Igb2JzY2VuZSB3b3Jkcy4KCglOT1NVR0dFU1QgJSB+CgoKUkVQTEFDRU1FTlRTCQkJCQkJKnNwZWxsLVJFUCoKCkluIHRoZSBhZmZpeCBmaWxlIFJFUCBpdGVtcyBjYW4gYmUgdXNlZCB0byBkZWZpbmUgY29tbW9uIG1pc3Rha2VzLiAgVGhpcyBpcwp1c2VkIHRvIG1ha2Ugc3BlbGxpbmcgc3VnZ2VzdGlvbnMuICBUaGUgaXRlbXMgZGVmaW5lIHRoZSAiZnJvbSIgdGV4dCBhbmQgdGhlCiJ0byIgcmVwbGFjZW1lbnQuICBFeGFtcGxlOgoKCVJFUCA0IH4KCVJFUCBmIHBoIH4KCVJFUCBwaCBmIH4KCVJFUCBrIGNoIH4KCVJFUCBjaCBrIH4KClRoZSBmaXJzdCBsaW5lIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIFJFUCBsaW5lcyBmb2xsb3dpbmcuICBWaW0gaWdub3JlcyB0aGUKbnVtYmVyLCBidXQgaXQgbXVzdCBiZSB0aGVyZSAoZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBNeXNwZWxsKS4KCkRvbid0IGluY2x1ZGUgc2ltcGxlIG9uZS1jaGFyYWN0ZXIgcmVwbGFjZW1lbnRzIG9yIHN3YXBzLiAgVmltIHdpbGwgdHJ5IHRoZXNlCmFueXdheS4gIFlvdSBjYW4gaW5jbHVkZSB3aG9sZSB3b3JkcyBpZiB5b3Ugd2FudCB0bywgYnV0IHlvdSBtaWdodCB3YW50IHRvIHVzZQp0aGUgImZpbGU6IiBpdGVtIGluICdzcGVsbHN1Z2dlc3QnIGluc3RlYWQuCgpZb3UgY2FuIGluY2x1ZGUgYSBzcGFjZSBieSB1c2luZyBhbiB1bmRlcnNjb3JlOgoKCVJFUCB0aGVfdGhlIHRoZSB+CgoKU0lNSUxBUiBDSEFSQUNURVJTCQkJCQkqc3BlbGwtTUFQKiAqRTc4MyoKCkluIHRoZSBhZmZpeCBmaWxlIE1BUCBpdGVtcyBjYW4gYmUgdXNlZCB0byBkZWZpbmUgbGV0dGVycyB0aGF0IGFyZSB2ZXJ5IG11Y2gKYWxpa2UuICBUaGlzIGlzIG1vc3RseSB1c2VkIGZvciBhIGxldHRlciB3aXRoIGRpZmZlcmVudCBhY2NlbnRzLiAgVGhpcyBpcyB1c2VkCnRvIHByZWZlciBzdWdnZXN0aW9ucyB3aXRoIHRoZXNlIGxldHRlcnMgc3Vic3RpdHV0ZWQuICBFeGFtcGxlOgoKCU1BUCAyIH4KCU1BUCBl6evq6CB+CglNQVAgdfz5+vsgfgoKVGhlIGZpcnN0IGxpbmUgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgTUFQIGxpbmVzIGZvbGxvd2luZy4gIFZpbSBpZ25vcmVzIHRoZQpudW1iZXIsIGJ1dCB0aGUgbGluZSBtdXN0IGJlIHRoZXJlLgoKRWFjaCBsZXR0ZXIgbXVzdCBhcHBlYXIgaW4gb25seSBvbmUgb2YgdGhlIE1BUCBpdGVtcy4gIEl0J3MgYSBiaXQgbW9yZQplZmZpY2llbnQgaWYgdGhlIGZpcnN0IGxldHRlciBpcyBBU0NJSSBvciBhdCBsZWFzdCBvbmUgd2l0aG91dCBhY2NlbnRzLgoKCi5TVUcgRklMRQkJCQkJCSpzcGVsbC1OT1NVR0ZJTEUqCgpXaGVuIHNvdW5kZm9sZGluZyBpcyBzcGVjaWZpZWQgaW4gdGhlIGFmZml4IGZpbGUgdGhlbiAiOm1rc3BlbGwiIHdpbGwgbm9ybWFsbHkKcHJvZHVjZSBhIC5zdWcgZmlsZSBuZXh0IHRvIHRoZSAuc3BsIGZpbGUuICBUaGlzIGZpbGUgaXMgdXNlZCB0byBmaW5kCnN1Z2dlc3Rpb25zIGJ5IHRoZWlyIHNvdW5kLWEtbGlrZSBmb3JtIHF1aWNrbHkuICBBdCB0aGUgY29zdCBvZiBhIGxvdCBvZgptZW1vcnkgKHRoZSBhbW91bnQgZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIHdvcmRzLCB8Om1rc3BlbGx8IHdpbGwgZGlzcGxheSBhbgplc3RpbWF0ZSB3aGVuIGl0J3MgZG9uZSkuCgpUbyBhdm9pZCBwcm9kdWNpbmcgYSAuc3VnIGZpbGUgdXNlIHRoaXMgaXRlbSBpbiB0aGUgYWZmaXggZmlsZToKCglOT1NVR0ZJTEUgfgoKVXNlcnMgY2FuIHNpbXBseSBvbWl0IHRoZSAuc3VnIGZpbGUgaWYgdGhleSBkb24ndCB3YW50IHRvIHVzZSBpdC4KCgpTT1VORC1BLUxJS0UJCQkJCQkqc3BlbGwtU0FMKgoKSW4gdGhlIGFmZml4IGZpbGUgU0FMIGl0ZW1zIGNhbiBiZSB1c2VkIHRvIGRlZmluZSB0aGUgc291bmRzLWEtbGlrZSBtZWNoYW5pc20KdG8gYmUgdXNlZC4gIFRoZSBtYWluIGl0ZW1zIGRlZmluZSB0aGUgImZyb20iIHRleHQgYW5kIHRoZSAidG8iIHJlcGxhY2VtZW50LgpTaW1wbGlzdGljIGV4YW1wbGU6CgoJU0FMIENJQQkJCSBYIH4KCVNBTCBDSAkJCSBYIH4KCVNBTCBDCQkJIEsgfgoJU0FMIEsJCQkgSyB+CgpUaGVyZSBhcmUgYSBmZXcgcnVsZXMgYW5kIHRoaXMgY2FuIGJlY29tZSBxdWl0ZSBjb21wbGljYXRlZC4gIEFuIGV4cGxhbmF0aW9uCmhvdyBpdCB3b3JrcyBjYW4gYmUgZm91bmQgaW4gdGhlIEFzcGVsbCBtYW51YWw6Cmh0dHA6Ly9hc3BlbGwubmV0L21hbi1odG1sL1Bob25ldGljLUNvZGUuaHRtbC4KClRoZXJlIGFyZSBhIGZldyBzcGVjaWFsIGl0ZW1zOgoKCVNBTCBmb2xsb3d1cAkJdHJ1ZSB+CglTQUwgY29sbGFwc2VfcmVzdWx0CXRydWUgfgoJU0FMIHJlbW92ZV9hY2NlbnRzCXRydWUgfgoKIjEiIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzICJ0cnVlIi4gIEFueSBvdGhlciB2YWx1ZSBtZWFucyAiZmFsc2UiLgoKClNJTVBMRSBTT1VOREZPTERJTkcJCQkJKnNwZWxsLVNPRk9GUk9NKiAqc3BlbGwtU09GT1RPKgoKVGhlIFNBTCBtZWNoYW5pc20gaXMgY29tcGxleCBhbmQgc2xvdy4gIEEgc2ltcGxlciBtZWNoYW5pc20gaXMgbWFwcGluZyBhbGwKY2hhcmFjdGVycyB0byBhbm90aGVyIGNoYXJhY3RlciwgbWFwcGluZyBzaW1pbGFyIHNvdW5kaW5nIGNoYXJhY3RlcnMgdG8gdGhlCnNhbWUgY2hhcmFjdGVyLiAgQXQgdGhlIHNhbWUgdGltZSB0aGlzIGRvZXMgY2FzZSBmb2xkaW5nLiAgWW91IGNhbiBub3QgaGF2ZQpib3RoIFNBTCBpdGVtcyBhbmQgc2ltcGxlIHNvdW5kZm9sZGluZy4KClRoZXJlIGFyZSB0d28gaXRlbXMgcmVxdWlyZWQ6IG9uZSB0byBzcGVjaWZ5IHRoZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIG1hcHBlZAphbmQgb25lIHRoYXQgc3BlY2lmaWVzIHRoZSBjaGFyYWN0ZXJzIHRoZXkgYXJlIG1hcHBlZCB0by4gIFRoZXkgbXVzdCBoYXZlCmV4YWN0bHkgdGhlIHNhbWUgbnVtYmVyIG9mIGNoYXJhY3RlcnMuICBFeGFtcGxlOgoKICAgIFNPRk9GUk9NIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogfgogICAgU09GT1RPICAgZWJjdGVmZ2hlamtsbm5lcGtyc3RldnZrZXNlYmN0ZWZnaGVqa2xubmVwa3JzdGV2dmtlcyB+CgpJbiB0aGUgZXhhbXBsZSBhbGwgdm93ZWxzIGFyZSBtYXBwZWQgdG8gdGhlIHNhbWUgY2hhcmFjdGVyICdlJy4gIEFub3RoZXIKbWV0aG9kIHdvdWxkIGJlIHRvIGxlYXZlIG91dCBhbGwgdm93ZWxzLiAgU29tZSBjaGFyYWN0ZXJzIHRoYXQgc291bmQgbmVhcmx5CnRoZSBzYW1lIGFuZCBhcmUgb2Z0ZW4gbWl4ZWQgdXAsIHN1Y2ggYXMgJ20nIGFuZCAnbicsIGFyZSBtYXBwZWQgdG8gdGhlIHNhbWUKY2hhcmFjdGVyLiAgRG9uJ3QgZG8gdGhpcyB0b28gbXVjaCwgYWxsIHdvcmRzIHdpbGwgc3RhcnQgbG9va2luZyBhbGlrZS4KCkNoYXJhY3RlcnMgdGhhdCBkbyBub3QgYXBwZWFyIGluIFNPRk9GUk9NIHdpbGwgYmUgbGVmdCBvdXQsIGV4Y2VwdCB0aGF0IGFsbAp3aGl0ZSBzcGFjZSBpcyByZXBsYWNlZCBieSBvbmUgc3BhY2UuICBTZXF1ZW5jZXMgb2YgdGhlIHNhbWUgY2hhcmFjdGVyIGluClNPRk9GUk9NIGFyZSByZXBsYWNlZCBieSBvbmUuCgpZb3UgY2FuIHVzZSB0aGUgfHNvdW5kZm9sZCgpfCBmdW5jdGlvbiB0byB0cnkgb3V0IHRoZSByZXN1bHRzLiAgT3Igc2V0IHRoZQondmVyYm9zZScgb3B0aW9uIHRvIHNlZSB0aGUgc2NvcmUgaW4gdGhlIG91dHB1dCBvZiB0aGUgfHo9fCBjb21tYW5kLgoKClVOU1VQUE9SVEVEIElURU1TCQkJCSpzcGVsbC1hZmZpeC1ub3Qtc3VwcG9ydGVkKgoKVGhlc2UgaXRlbXMgYXBwZWFyIGluIHRoZSBhZmZpeCBmaWxlIG9mIG90aGVyIHNwZWxsIGNoZWNrZXJzLiAgSW4gVmltIHRoZXkgYXJlCmlnbm9yZWQsIG5vdCBzdXBwb3J0ZWQgb3IgZGVmaW5lZCBpbiBhbm90aGVyIHdheS4KCkFDQ0VOVAkJKEh1bnNwZWxsKQkJCQkqc3BlbGwtQUNDRU5UKgoJCVVzZSBNQVAgaW5zdGVhZC4gfHNwZWxsLU1BUHwKCkNIRUNLQ09NUE9VTkRDQVNFICAoSHVuc3BlbGwpCQkJKnNwZWxsLUNIRUNLQ09NUE9VTkRDQVNFKgoJCURpc2FsbG93IHVwcGVyY2FzZSBsZXR0ZXJzIGF0IGNvbXBvdW5kIHdvcmQgYm91bmRhcmllcy4KCQlOb3Qgc3VwcG9ydGVkLgoKQ0hFQ0tDT01QT1VORERVUCAgKEh1bnNwZWxsKQkJCSpzcGVsbC1DSEVDS0NPTVBPVU5ERFVQKgoJCURpc2FsbG93IHVzaW5nIHRoZSBzYW1lIHdvcmQgdHdpY2UgaW4gYSBjb21wb3VuZC4gIE5vdAoJCXN1cHBvcnRlZC4KCkNIRUNLQ09NUE9VTkRSRVAgIChIdW5zcGVsbCkJCQkqc3BlbGwtQ0hFQ0tDT01QT1VORFJFUCoKCQlTb21ldGhpbmcgYWJvdXQgdXNpbmcgUkVQIGl0ZW1zIGFuZCBjb21wb3VuZCB3b3Jkcy4gIE5vdAoJCXN1cHBvcnRlZC4KCkNIRUNLQ09NUE9VTkRUUklQTEUgIChIdW5zcGVsbCkJCQkqc3BlbGwtQ0hFQ0tDT01QT1VORFRSSVBMRSoKCQlGb3JiaWQgdGhyZWUgaWRlbnRpY2FsIGNoYXJhY3RlcnMgd2hlbiBjb21wb3VuZGluZy4gIE5vdAoJCXN1cHBvcnRlZC4KCkNIRUNLQ09NUE9VTkRQQVRURVJOICAoSHVuc3BlbGwpCQkqc3BlbGwtQ0hFQ0tDT01QT1VORFBBVFRFUk4qCgkJRm9yYmlkIGNvbXBvdW5kaW5nIHdoZW4gcGF0dGVybnMgbWF0Y2guICBOb3Qgc3VwcG9ydGVkLgoKQ09NUExFWFBSRUZJWEVTICAoSHVuc3BlbGwpCQkJCSpzcGVsbC1DT01QTEVYUFJFRklYRVMqCgkJRW5hYmxlcyB1c2luZyB0d28gcHJlZml4ZXMuICBOb3Qgc3VwcG9ydGVkLgoKQ09NUE9VTkQJKEh1bnNwZWxsKQkJCQkqc3BlbGwtQ09NUE9VTkQqCgkJVGhpcyBpcyBvbmUgbGluZSB3aXRoIHRoZSBjb3VudCBvZiBDT01QT1VORCBpdGVtcywgZm9sbG93ZWQgYnkKCQl0aGF0IG1hbnkgQ09NUE9VTkQgbGluZXMgd2l0aCBhIHBhdHRlcm4uCgkJUmVtb3ZlIHRoZSBmaXJzdCBsaW5lIHdpdGggdGhlIGNvdW50IGFuZCByZW5hbWUgdGhlIG90aGVyCgkJaXRlbXMgdG8gQ09NUE9VTkRSVUxFIHxzcGVsbC1DT01QT1VORFJVTEV8CgpDT01QT1VOREZJUlNUCShIdW5zcGVsbCkJCQkJKnNwZWxsLUNPTVBPVU5ERklSU1QqCgkJVXNlIENPTVBPVU5EUlVMRSBpbnN0ZWFkLiB8c3BlbGwtQ09NUE9VTkRSVUxFfAoKQ09NUE9VTkRCRUdJTgkoSHVuc3BlbGwpCQkJCSpzcGVsbC1DT01QT1VOREJFR0lOKgoJCVVzZSBDT01QT1VORFJVTEUgaW5zdGVhZC4gfHNwZWxsLUNPTVBPVU5EUlVMRXwKCkNPTVBPVU5ERU5ECShIdW5zcGVsbCkJCQkJKnNwZWxsLUNPTVBPVU5ERU5EKgoJCVVzZSBDT01QT1VORFJVTEUgaW5zdGVhZC4gfHNwZWxsLUNPTVBPVU5EUlVMRXwKCkNPTVBPVU5ETUlERExFCShIdW5zcGVsbCkJCQkJKnNwZWxsLUNPTVBPVU5ETUlERExFKgoJCVVzZSBDT01QT1VORFJVTEUgaW5zdGVhZC4gfHNwZWxsLUNPTVBPVU5EUlVMRXwKCkNPTVBPVU5EU1lMTEFCTEUgIChIdW5zcGVsbCkJCQkqc3BlbGwtQ09NUE9VTkRTWUxMQUJMRSoKCQlVc2UgU1lMTEFCTEUgYW5kIENPTVBPVU5EU1lMTUFYIGluc3RlYWQuIHxzcGVsbC1TWUxMQUJMRXwKCQl8c3BlbGwtQ09NUE9VTkRTWUxNQVh8CgpGT1JCSURERU5XT1JECShIdW5zcGVsbCkJCQkJKnNwZWxsLUZPUkJJRERFTldPUkQqCgkJVXNlIEJBRCBpbnN0ZWFkLiB8c3BlbGwtQkFEfAoKTEFORwkJKEh1bnNwZWxsKQkJCQkqc3BlbGwtTEFORyoKCQlUaGlzIHNwZWNpZmllcyBsYW5ndWFnZS1zcGVjaWZpYyBiZWhhdmlvci4gIFRoaXMgYWN0dWFsbHkKCQltb3ZlcyBwYXJ0IG9mIHRoZSBsYW5ndWFnZSBrbm93bGVkZ2UgaW50byB0aGUgcHJvZ3JhbSwKCQl0aGVyZWZvcmUgVmltIGRvZXMgbm90IHN1cHBvcnQgaXQuICBFYWNoIGxhbmd1YWdlIHByb3BlcnR5CgkJbXVzdCBiZSBzcGVjaWZpZWQgc2VwYXJhdGVseS4KCkxFTU1BX1BSRVNFTlQJKEh1bnNwZWxsKQkJCQkqc3BlbGwtTEVNTUFfUFJFU0VOVCoKCQlPbmx5IG5lZWRlZCBmb3IgbW9ycGhvbG9naWNhbCBhbmFseXNpcy4KCk1BWE5HUkFNU1VHUwkoSHVuc3BlbGwpCQkJCSpzcGVsbC1NQVhOR1JBTVNVR1MqCgkJTm90IHN1cHBvcnRlZC4KCk9OTFlJTkNPTVBPVU5ECShIdW5zcGVsbCkJCQkJKnNwZWxsLU9OTFlJTkNPTVBPVU5EKgoJCVVzZSBORUVEQ09NUE9VTkQgaW5zdGVhZC4gfHNwZWxsLU5FRURDT01QT1VORHwKClBTRVVET1JPT1QJKEh1bnNwZWxsKQkJCQkqc3BlbGwtUFNFVURPUk9PVCoKCQlVc2UgTkVFREFGRklYIGluc3RlYWQuIHxzcGVsbC1ORUVEQUZGSVh8CgpTVUdTV0lUSERPVFMJKEh1bnNwZWxsKQkJCQkqc3BlbGwtU1VHU1dJVEhET1RTKgoJCUFkZHMgZG90cyB0byBzdWdnZXN0aW9ucy4gIFZpbSBkb2Vzbid0IG5lZWQgdGhpcy4KClNZTExBQkxFTlVNCShIdW5zcGVsbCkJCQkJKnNwZWxsLVNZTExBQkxFTlVNKgoJCU5vdCBzdXBwb3J0ZWQuCgpUUlkJCShNeXNwZWxsLCBIdW5zcGVsbCwgb3RoZXJzKQkJKnNwZWxsLVRSWSoKCQlWaW0gZG9lcyBub3QgdXNlIHRoZSBUUlkgaXRlbSwgaXQgaXMgaWdub3JlZC4gIEZvciBtYWtpbmcKCQlzdWdnZXN0aW9ucyB0aGUgYWN0dWFsIGNoYXJhY3RlcnMgaW4gdGhlIHdvcmRzIGFyZSB1c2VkLCB0aGF0CgkJaXMgbXVjaCBtb3JlIGVmZmljaWVudC4KCldPUkRDSEFSUwkoSHVuc3BlbGwpCQkJCSpzcGVsbC1XT1JEQ0hBUlMqCgkJVXNlZCB0byByZWNvZ25pemUgd29yZHMuICBWaW0gZG9lc24ndCBuZWVkIGl0LCBiZWNhdXNlIHRoZXJlCgkJaXMgbm8gbmVlZCB0byBzZXBhcmF0ZSB3b3JkcyBiZWZvcmUgY2hlY2tpbmcgdGhlbSAodXNpbmcgYQoJCXRyaWUgaW5zdGVhZCBvZiBhIGhhc2h0YWJsZSkuCgogdmltOnR3PTc4OnN3PTQ6dHM9ODpmdD1oZWxwOm5vcmw6Cg==