MjAwNS0wOS0wNSAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMi4zMwoKICAgICAgICAqIEFkZGVkIHR3byBuZXcgbWV0aG9kcyBpbiBSZWZlcmVuY2VNYW5hZ2VyIHRvIGZhY2lsaXRhdGUKICAgICAgICBMaW5rSW5kZXhQbHVnaW4uCgoyMDA1LTA5LTA0ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4yLjMyCiAgICAgICAgCiAgICAgICAgKiBBZGRlZCBwYXRjaCBmcm9tIEpvZXJnIEx1ZWRlY2tlciB0byBmaXggYSBwcm9ibGVtCiAgICAgICAgd2l0aCBwYWdlcyBkZWxldGVkIG5vdCBhZmZlY3RpbmcgUmVmTWdyLgoKICAgICAgICAqIEFkZGVkIGEgc21hbGwgbm90ZSB0byB0aGUgU2hvcnRVUkxDb25zdHJ1Y3RvcjogZG8gTk9UCiAgICAgICAgdXNlIHdpdGhvdXQgYmFzZVVSTC4KCiAgICAgICAgKiBGaXhlcyBCdWdBdHRhY2hGaWxlc0V2ZW5JZlBhZ2VEb2VzTm90RXhpc3QuICBJdCBpcwogICAgICAgIG5vIGxvbmdlciBwb3NzaWJsZSB0byB1cGxvYWQgYSBmaWxlIGlmIHRoZSBwYWdlIGRvZXMKICAgICAgICBub3QgZXhpc3QuCgogICAgICAgICogSW5zdGFsbC5qc3Agd2FzIFRvbWNhdC1zcGVjaWZpYy4gIEZpeGVzCiAgICAgICAgQnVnSW5zdGFsbC5qc3BEb2VzTm90Q29tcGlsZU9uV2ViTG9naWM4LjEuICBSZXBvcnRlZCBieQogICAgICAgIEpvYWNoaW1NYWVzLgoKICAgICAgICAqIEZpeGVkIEJ1Z0F0dGFjaG1lbnRXaXRoSGFzaENhbm5vdEJlVmlld2VkIGJ5IHJlcGxhY2luZwogICAgICAgIG5vdyBhbGwgaWxsZWdhbCBjaGFyYWN0ZXIgdmFsdWVzIGR1cmluZyB1cGxvYWQuCgoyMDA1LTA5LTAzICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4yLjMxCgogICAgICAgICogVW5kaWQgY2hhbmdlIGZvciAKICAgICAgICBCdWdTaG9ydFZpZXdVUkxDb25zdHJ1Y3RvckFuZFNob3J0VVJMQ29uc3RydWN0b3JQcm9ibGVtcyAtCiAgICAgICAgaXQgYXBwYXJlbnRseSBicm9rZSBxdWl0ZSBhIGxvdCBvZiBzdHVmZi4KCiAgICAgICAgKiBDaGFuZ2VkIHRvIE9TQ2FjaGUgMi4yLjEgdG8gcHJvdGVjdCBhZ2FpbnN0IGEgcHJldHR5CiAgICAgICAgbmFzdHkgbWVtb3J5IGxlYWsuCgoyMDA1LTA4LTI1ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiAyLjIuMzAKCiAgICAgICAgKiBBZGRlZCBnZW5lcmljIG51bGwgcHJvdGVjdGlvbiB0byBDYWNoaW5nUHJvdmlkZXIsIGFuZAogICAgICAgIGFsc28gcHJvdGVjdGVkIGFnYWluc3Qgc3B1cmlvdXMgaW5wdXQgaW4gUkNTRmlsZVByb3ZpZGVyCiAgICAgICAgYXMgYSBzdG9wZ2FwIG1lYXN1cmUgdG8gc29tZSBwcm9iYWJsZSBzY2FsaW5nIGlzc3Vlcy4KCiAgICAgICAgKiBJdCB3YXMgcG9zc2libGUgdG8gZ2V0IHRoZSBhdXRoZW50aWNhdGlvbiBtYXN0ZXIgcGFzc3dvcmQKICAgICAgICBieSBpbnNlcnRpbmcgc2ltcGx5IGl0IG9uIGEgcGFnZSBhcyBhIHZhcmlhYmxlLiAgT29wcy4KICAgICAgICBUaGUgbWFzdGVyIHBhc3N3b3JkIGlzIG5vdyBzYXZlZCB1bmRlciBhIGRpZmZlcmVudCBuYW1lCiAgICAgICAgKGpzcHdpa2ktcy5hdXRoLm1hc3RlclBhc3N3b3JkKSwgd2hpY2ggbWF5IGJyZWFrIGV4aXN0aW5nCiAgICAgICAgaW5zdGFsbGF0aW9ucy4gIEFsc28gYWRkZWQgYSBjaGVjayBpbiB0aGUgVmFyaWFibGVNYW5hZ2VyCiAgICAgICAgdG8gcHJldmVudCByZXBvcnRpbmcgb2YgdGhhdCB2YXJpYWJsZS4KICAgICAgICBSZXBvcnRlZCBieSBUcmV2b3IgWWFubi4KCjIwMDUtMDctMjYgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIDIuMi4yOQogICAgICAgIAogICAgICAgICogQnVnIGZpeDogQXR0YWNobWVudHMgbWlnaHQgZ2V0IGxvb3BpbmcgZm9yZXZlciwgaWYgdGhlIHBhZ2UgZGlkCiAgICAgICAgbm90IGV4aXN0LiAgRml4ZXMgCiAgICAgICAgQnVnSGFzQXR0YWNobWVudHNBbmRBdHRhY2htZW50c0l0ZXJhdG9yVGFnc1doZW5QYWdlRG9lc250RXhpc3QKCiAgICAgICAgKiBCdWcgZml4OiBZb3UgY2FuIG5vdyBzZXQgdGhlICdjaGVja2VkJyBhdHRyaWJ1dGUgb2YgY2hlY2tib3hlcwogCQlpbiBXaWtpRm9ybXMgd2l0aCB0aGUgcGFyYW1ldGVyICdjaGVja2VkPXRydWUnLiAgUmVwb3J0ZWQgYnkgSm9oblYuCgogICAgICAgICogQnVnIGZpeDogQnVnV3JvbmdSZWNvZ25pdGlvbk9mV2lraVdvcmRzLiAgQSBDYW1lbENhc2UKICAgICAgICBXaWtpV29yZCB3b3VsZCBub3QgYmUgZXNjYXBlZCBjb3JyZWN0bHksIGlmIHRoZSB3b3JkIHdvdWxkCiAgICAgICAgaGF2ZSB0d28gY2FwaXRhbCBsZXR0ZXJzLgoKICAgICAgICAqIEJ1ZyBmaXg6IEJ1Z1Nob3J0Vmlld1VSTENvbnN0cnVjdG9yQW5kU2hvcnRVUkxDb25zdHJ1Y3RvclByb2JsZW1zCiAgICAgICAgU2hvcnRWaWV3VVJMQ29uc3RydWN0b3IgZGlkIG5vdCBoYXZlIGEgZGVmYXVsdCBwcmVmaXguCiAgICAgICAgUmVwb3J0ZWQgYnkgT2xhZiBLb2NrLgoKMjAwNS0wNy0wMyAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogMi4yLjI4CgogICAgICAgICogQnVnIGZpeDogRG9pbmcgdHdvIGVtcHR5IHNlYXJjaGVzIGluIGEgcm93IHdvdWxkIGNhdXNlIHRoZQogICAgICAgIHNlYXJjaF9oaWdobGlnaHQuanMgdG8gbG9vcCBhbmQga2lsbCB0aGUgYnJvd3Nlci4KICAgICAgICBSZXBvcnRlZCBieSBIb2xnZXJIb2Zmc3TkdHRlLgogICAgICAgIAogICAgICAgICogQnVnIGZpeDogRW1wdHkgb3Igbm9uLUx1Y2VuZSBjb21wbGlhbnQgc2VhcmNoZXMgd291bGQgdGhyb3cKICAgICAgICBhIE51bGxQb2ludGVyRXhjZXB0aW9uLiBSZXBvcnRlZCBieSBIb2xnZXJIb2Zmc3TkdHRlLgogICAgICAgIEZpeGVzIEJ1Z1NlYXJjaEFsd2F5c1Rocm93c05QRS4KICAgICAgICAKICAgICAgICAqIEJ1ZyBmaXg6IEl0IHdhcyBpbXBvc3NpYmxlIHRvIHVzZSB0aGUgSW5zZXJ0UGFnZSBwbHVnaW4gdG8KICAgICAgICBpbnNlcnQgdGhlIHNhbWUgcGFnZSB0d2ljZSBvbiBhIHBhZ2UuICBSZXBvcnRlZCBieSBNdXJyYXkKICAgICAgICBBbHRoZWltIChJIHRoaW5rIC0gdGhpcyB3YXMgbm90IGVudGVyZWQgaW4gdGhlIGJ1ZyByZXBvcnRpbmcKICAgICAgICBzeXN0ZW0pLgogICAgICAgIAogICAgICAgICogVXBncmFkZWQgdG8gTHVjZW5lIDEuNC4zLgoKMjAwNS0wNi0yNCAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogMi4yLjI3CgogICAgICAgICogQmFja3BvcnRlZCBwYXRjaCBmcm9tIDIuMy4xOiBwYWdlcyB3ZXJlIG5vdCBwcm9wZXJseSBjbGVhbmVkCiAgICAgICAgaW4gUmVmZXJlbmNlTWFuYWdlciB3aGVuIHRoZXkgd2VyZSBkZWxldGVkLgogICAgICAgIAogICAgICAgICogQWRkZWQgUlNTIDIuMCBmZWVkcywgaW5jbHVkaW5nIHBvZGNhc3Rpbmcgc3VwcG9ydCB3aXRoIAogICAgICAgIDxlbmNsb3N1cmU+LiAgVGhpcyBjYXVzZWQgc29tZSBzbGlnaHQgQVBJIGNoYW5nZXMgKEkgaG9wZQogICAgICAgIG5vYm9keSB3YXMgcmVseWluZyBvbiB0aGVtKS4KCjIwMDUtMDYtMTkgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjIuMjYKCiAgICAgICAgKiBBZGRlZCBwYXJ0aWFsIGZpeCBmb3IgCiAgICAgICAgQnVnUmVhZGluZ09mVmFyaWFibGVOb3RXb3JraW5nRm9yT2xkZXJWZXJzaW9ucy4gIFRoaXMgaXMgYSBkZWVwCiAgICAgICAgYnVnLgoKICAgICAgICAqIEFkZGVkIHBhdGNoIGZyb20gSm9lcmcgTHVlZGVrZXIgdG8gZml4IAogICAgICAgIEJ1Z0RlbGV0ZUZhaWxzSWZQYWdlSGFzQXR0YWNobWVucy4KICAgICAgICAKICAgICAgICAqIFBhZ2VNYW5hZ2VyIGRpZG4ndCBjb3JyZWN0bHkgcmV0dXJuIHBhZ2UgdGV4dCBpZiB0aGUKICAgICAgICBwYWdlIHdhcyBleHRlcm5hbGx5IG1vZGlmaWVkIChJIGNhbid0IHVuZGVyc3RhbmQgaG93IHRoaXMKICAgICAgICBjb3VsZCd2ZSB3b3JrZWQgZWFybGllci4uLikgIFRoaXMga2lsbGVkIGFuIHVuaXQgdGVzdCBvciB0d28uCgogICAgICAgICogUmVuYW1lZCBtZXRob2RzIGluIFNlYXJjaCBBUEkgdG8gYmUgYSBiaXQgbW9yZSBjb25zaXN0ZW50LgogICAgICAgIFRoYW5rcyB0byBhamJhbmNrIGZvciB0aGUgc3VnZ2VzdGlvbi4KICAKICAgICAgICAqIFJlZmVyZW5jZU1hbmFnZXIgc2hvdWxkIG5vdyBub3RpY2UgZGVsZXRlZCBwYWdlcy4KICAgICAgICAKICAgICAgICAqIHJzcy5qc3Agbm93IHJldHVybnMgYSA0MDQsIGlmIHRoZSBSU1MgZ2VuZXJhdGlvbiBpcyBkaXNhYmxlZC4KICAgICAgICAKICAgICAgICAqIEJ1ZyBmaXg6IEJ1Z0FwcGxpY2F0aW9uTmFtZUJlR2FyYmxlZElmVGhlcmVBcmVDaGluZXNlQ2hhcmFjdGVyc0luSXQKICAgICAgICBJbnN0YWxsLmpzcCBpcyBub3cgc21hcnQgZW5vdWdoIHRvIG1hbmdsZSB0aGUgaW5wdXQgc28gdGhhdAogICAgICAgIGl0IGNhbiBiZSBwdXQgaW5zaWRlIGFuIExhdGluMSBwcm9wZXJ0aWVzIGZpbGUuICBUaGFua3MgdG8KICAgICAgICBEZW5nYmVyIGZvciB0aGUgZml4LgogICAgICAgIAogICAgICAgICogQnVnIGZpeDogQnVnUGFnZUFkZGVkVG9TZWFyY2hRdWV1ZU11bHRpcGxlVGltZXMuIFRoYW5rcyB0bwogICAgICAgIGFqYmFuY2suCgoyMDA1LTA2LTE2ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4yLjI1CiAgICAgICAgCiAgICAgICAgKiBCdWcgZml4OiBMdWNlbmVTZWFyY2hQcm92aWRlciBtaXNzcGVsbGVkIHRoZSBkZWZhdWx0CiAgICAgICAgc2VhcmNoIHByb3ZpZGVyIG5hbWUsIGNhdXNpbmcgZXhjZXB0aW9ucyBhdCBzdGFydHVwLi4uCgogICAgICAgICogQnVnIGZpeDogUGFnZSBuYW1lcyBhcmUgbm93IGFsc28gYWRkZWQgaW4gdGhlIEx1Y2VuZQogICAgICAgIGluZGV4IGluIHRoZWlyIGNhbm9uaWNhbCBmb3JtLCBub3QganVzdCBiZWF1dGlmaWVkIGZvcm0uCiAgICAgICAgU3VnZ2VzdGVkIGJ5IE1pY2hhZWwgU21pdGguCgogICAgICAgICogQnVnIGZpeDogdGhlcmUgd2VyZSBzb21lIGNvbmN1cnJlbmN5IGlzc3VlcyB3aGVuZXZlcgogICAgICAgIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBlbnRpcmUgbGlzdCBvZiBwYWdlcyAoY2F1c2luZyAKICAgICAgICBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9ucykuICBGaXhlZCBieSByZXR1cm5pbmcKICAgICAgICBhIGNsb25lIG9mIHRoZSBhcnJheSBpbiB0aGUgQ2FjaGluZ1Byb3ZpZGVyLgoKICAgICAgICAqIHYyLjIuMjQKCiAgICAgICAgKiBBZGRlZCBBcmVudC1KYW4gQmFuY2sncyBwYXRjaCB0byBzdXBwb3J0IGF0dGFjaG1lbnQKICAgICAgICBzZWFyY2hpbmcuICBJIGFsc28gY2hhbmdlZCB0aGUgU2VhcmNoUHJvdmlkZXIgQVBJIChpdCdzCiAgICAgICAgbm90IGJlZW4gcmVsZWFzZWQgaW4gYSBzdGFibGUgdmVyc2lvbikgc2xpZ2h0bHkgLSBubwogICAgICAgIG5lZWQgdG8gc2VuZCB0aGUgdGV4dCBhbGwgdGhlIHdheTsgbGV0IHRoZSBwcm92aWRlciB3b3JyeQogICAgICAgIGFib3V0IGl0LgoKICAgICAgICAqIEJhc2ljU2VhcmNoUHJvdmlkZXIgbm93IHNlYXJjaGVzIGF0dGFjaG1lbnQgbmFtZXMKICAgICAgICBhcyB3ZWxsLgoKICAgICAgICAqIEx1Y2VuZVNlYXJjaFByb3ZpZGVyIG5vdyBpbmRleGVzIGF0dGFjaG1lbnQgbmFtZXMgYW5kCiAgICAgICAgY2VydGFpbiB0ZXh0LWJhc2VkIGF0dGFjaG1lbnRzIGFzIHdlbGwuICBDdXJyZW50bHkgcGxhaW4KICAgICAgICB0ZXh0LCBYTUwsIC5pbmkgYW5kIEhUTUwgZmlsZXMgYXJlIGluZGV4ZWQuICBUaGlzIHdpbGwKICAgICAgICBjaGFuZ2UgdG8gYSBiZXR0ZXIgc3lzdGVtLCBvbmNlIHNvbWVvbmUgZmlndXJlcyBvdXQgaG93CiAgICAgICAgdG8gZG8gcHJvcGVyIEx1Y2VuZSBBbmFseXplcnMuCgoyMDA1LTA2LTE0ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4yLjIzCgogICAgICAgICogUXVpdGUgYSBsb3QgbW9yZSBXZWJEQVYgcmVmYWN0b3Jpbmc7IGl0IHdvcmtzIG5vdwogICAgICAgIGFnYWluLiAgU3RpbGwgaGF2aW5nIHByb2JsZW1zIHdpdGggVVRGLTggcGFnZSBuYW1lcy4uLgogICAgICAgIEhUTUwgZmV0Y2hpbmcgZG9lcyBub3Qgd29yayBhdCB0aGUgbW9tZW50IGVpdGhlci4KCjIwMDUtMDYtMTMgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjIuMjIKCiAgICAgICAgKiBCcm9rZSB0aGUgV2ViREFWIEFQSSBmb3Igbm93OyBJJ20gY2hhbmdpbmcgdG8gYSBuZXcKICAgICAgICBtb2RlbCB0byBtYWtlIGFkZGl0aW9ucyBlYXNpZXIuCgogICAgICAgICogQnVnIGZpeDogU2VhcmNoTWFuYWdlciBkaWRuJ3QgYmVoYXZlIG5pY2VseTsgdGhlcmUgd2FzCiAgICAgICAgYSBjaXJjdWxhciByZWZlcmVuY2UgYmV0d2VlbiBpdCBhbmQgUmVmZXJlbmNlTWFuYWdlci4KICAgICAgICBMdWNlbmVTZWFyY2hQcm92aWRlciBub3cgZG9lcyBub3Qgc3RhcnQgaW5kZXhpbmcgdW50aWwKICAgICAgICBQYWdlTWFuYWdlciBpcyBzdXJlbHkgdXAgYW5kIHJ1bm5pbmcuICBSZXBvcnRlZCBieQogICAgICAgIGFqYmFuY2suCgoyMDA1LTA2LTEyICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4yLjIxCgogICAgICAgICogRW5hYmxlZCBub3JtYWwgTHVjZW5lIHF1ZXJ5IGxhbmd1YWdlIGlmIHlvdSdyZSB1c2luZwogICAgICAgIHRoZSBMdWNlbmVTZWFyY2hQcm92aWRlci4gIFRoaXMsIGluY2lkZW50YWxseSwgYWxzbyBoZWxwcwogICAgICAgIGEgbG90IGlmIHlvdSdyZSB1c2luZyBhbnkgb3RoZXIgbGFuZ3VhZ2UgdGhhbiBFbmdsaXNoLCBzaW5jZQogICAgICAgIHdlIG5vdyB1c2UgdGhlIHNhbWUgQW5hbHl6ZXIgZm9yIHF1ZXJpZXMgdGhhbiBmb3IgcGFyc2luZwogICAgICAgICh3aGljaCB3b3VsZCBhY2NvdW50IHRvIHF1aXRlIGEgZmV3IHByb2JsZW1zIGluIHRoZSBwYXN0KS4KICAgICAgICBVbmZvcnR1bmF0ZWx5LCBJIGhhZCB0byBicmVhayBGYXN0U2VhcmNoIChkb2VzIGFueW9uZSB1c2UgaXQpPwoKICAgICAgICAqIE1vdmVkIHNlYXJjaGluZyBpbnRvIGNvbS5lY3lyZC5qc3B3aWtpLnNlYXJjaCBwYWNrYWdlLAogICAgICAgIHRoYW5rcyB0byBhbiBleGNlbGxlbnQgcGF0Y2ggZnJvbSBBcmVudC1KYW4gQmFuY2suCgoyMDA1LTA2LTA5ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4yLjIwLgoKICAgICAgICAqIFNtYWxsIGJ1ZyBmaXggdG8gUGx1Z2luVGFnOiBpdCBzaG91bGQgbm93IHdvcmsgb24gcGFnZQogICAgICAgIHJlZnJlc2hlcy4KCjIwMDUtMDYtMDggIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjIuMTkuCgogICAgICAgICogQnVnIGZpeDogQnVnUGx1Z2luVGFnTm90V3JpdGluZ091dHB1dAoKICAgICAgICAqIEJ1ZyBmaXg6IEJ1Z0pzcHdpa2kudGxkRW1wdHlUYWcKCiAgICAgICAgKiBCdWcgZml4OiBCdWdXaWtpVHJhbnNsYXRlVGFnU2hvdWxkVHJpbUxlYWRpbmdTcGFjZXNPZkZpcnN0U2VudGVuY2UKCjIwMDUtMDYtMDYgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIDIuMi4xOC4KCiAgICAgICAgKiBFYnUgYWRkZWQgYSBidWcgZml4IGZvciBvbGRhdXRoIChwbGVhc2Ugc3BlY2lmeSBoZXJlLi4uKQoKICAgICAgICAqIEZpeGVkIHR3byBidWdzIHdpdGggSW5zdGFsbC5qc3A6CiAgICAgICAgQnVnSW5zdGFsbC5qc3BEb2VzTm90SGFuZGxlV2luZG93c1BhdGhzV2VsbCBieSBhZGRpbmcgYSBzaW1wbGUKICAgICAgICB3aW5kb3dzIHBhdGggY29udmVydGVyIChzaG91bGQgd29yayBhbHNvIHdlbGwgd2l0aCBVTkMgcGF0aHMpLAogICAgICAgIGFuZCBCdWdJbnN0YWxsLmpzcERvZXNOb3RQcm92aWRlRGVmYXVsdEJhc2VVUkwgYnkgY29tbWVudGluZwogICAgICAgIG91dCB0aGUgYmFzZVVSTCBwYXJhbWV0ZXIgaW4ganNwd2lraS5wcm9wZXJ0aWVzLnRtcGwuCgoyMDA1LTA1LTE4ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiAyLjIuMTcKCiAgICAgICAgKiBUaGUgSFRNTCBmcmFnbWVudCBpZGVudGlmaWVycyBnZW5lcmF0ZWQgZm9yIGVhY2ggaGVhZGluZwogICAgICAgIGFyZSBub3cgWEhUTUwgY29tcGxpYW50IChubyBtb3JlIGVudGl0aWVzKS4gIFVuZm9ydHVuYXRlbHksCiAgICAgICAgdGhpcyBtYWtlcyB0aGVtIGxvb2sgbGlrZSBjcmFwLCBidXQgdGhpcyBtZXRob2Qgc2hvdWxkIHdvcmsKICAgICAgICBmb3IgQ0pLIGxhbmd1YWdlcyAodW5saWtlIGRyb3BwaW5nIG5vbi1VU0FTQ0lJKS4KICAgICAgICAKICAgICAgICAqIEJ1ZyBmaXg6IEhUTUwgZnJhZ21lbnQgaWRlbnRpZmllcnMgZGlkbid0IHdvcmsgb24gcGFnZXMKICAgICAgICB3aXRoIG5vbi1VU0FTQ0lJIG5hbWVzLgogICAgICAgIAogICAgICAgICogMi4yLjE2CgogICAgICAgICogTWFqb3IgZml4IHRvIElTTy04ODU5LTEgLSBpdCBkaWRuJ3Qgd29yayBhbG1vc3QgYXQgYWxsCiAgICAgICAgaWYgeW91IHVzZWQgYW55dGhpbmcgZWxzZSBidXQgdGhlIERlZmF1bHRVUkxDb25zdHJ1Y3RvciAtIAogICAgICAgIGVzcGVjaWFsbHkgYXR0YWNobWVudHMgZGlkbid0IHdvcmsuCgoyMDA1LTA1LTE4ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiAyLjIuMTUKICAgICAgICAKICAgICAgICAqIEJ1ZyBmaXg6IEJ1Z1JlZmVyZW5jZU1hbmFnZXJEb2VzTm90RmluZFNpbmd1bGFyUmVmZXJlbmNlcwogICAgICAgIHNob3VsZCBub3cgZmluYWxseSBiZSBmaXhlZC4KICAgICAgICAKICAgICAgICAqIEZpeCBvZiBhIGZpeCBvZiBhIGJ1ZyBmaXg6IFdlIG5vIGxvbmdlciBnZW5lcmF0ZSA8YSBuYW1lPSJmb28iPgogICAgICAgIHRhZ3MgZm9yIGhlYWRpbmdzIC0gaW5zdGVhZCwgd2UgZ2VuZXJhdGUgYW4gdW5pcXVlICJpZCIgZm9yCiAgICAgICAgZWFjaCBoZWFkaW5nLgogICAgICAgIAogICAgICAgICogQWRkZWQgIm92ZXJmbG93OiBhdXRvIiB0byA8cHJlPiB0YWdzIGluIGpzcHdpa2kuY3NzLi4uCiAgICAgICAgVGhhdCBtYWtlcyBidWcgcmVwb3J0cyBmYXIsIGZhciBtb3JlIHJlYWRhYmxlLgoKMjAwNS0wNS0xNSAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogMi4xLjE0CgogICAgICAgICogU29tZXdoZXJlIGFib3ZlIFBha2lzdGFuIG9yIEFmZ2hhbmlzdGFuLi4uCiAgICAgICAgCiAgICAgICAgKiBFZGl0b3JBcmVhIGhhcyBub3cgYW4gaWQ6ICJlZGl0b3JhcmVhIi4gIEl0IGFsc28gaGFzIG5vdwogICAgICAgIGEgY2xhc3MgImVkaXRvcmFyZWEiLCBzaW1wbHkgYmVjYXVzZSAidGV4dCIgd2FzIG5vdCByZWFsbHkKICAgICAgICB2ZXJ5IGRlc2NyaXB0aXZlLiAgVGhhbmtzIHRvLCBlcnIsIHNvbWVvbmUsIGZvciB0aGlzIC0KICAgICAgICBJIHNlZW0gdG8gaGF2ZSBiZWVuIHZlcnkgZWFnZXIgaW4gZGVsZXRpbmcgbXkgZW1haWwuLi4KICAgICAgICAKICAgICAgICAqIEJ1ZyBmaXg6IE5vIG1vcmUgREFWIE5QRXMgd2l0aCBjZXJ0YWluIHN5c3RlbXMuICBQYXRjaAogICAgICAgIHRoYW5rcyB0byBzb21lb25lIC0gc29ycnksIEkgZm9yZ290Li4uCiAgICAgICAgCiAgICAgICAgKiBCdWcgZml4OiBubyBsb25nZXIgdGhyb3dzIENvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24KICAgICAgICBpbiBjZXJ0YWluIGNvbmRpdGlvbnMgdXBvbiBzdGFydHVwLgogICAgICAgIAogICAgICAgICogQnVnIGZpeDogSW5zZXJ0UGFnZSBub3cgZGV0ZWN0cyBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCBpdAogICAgICAgIGlzIG5vIGxvbmdlciBwb3NzaWJsZSB0byBEb1MgYSB3aWtpIGJ5IGluY2x1ZGluZyBhIHBhZ2UgaW4KICAgICAgICBpdHNlbGYuCiAgICAgICAgCiAgICAgICAgKiBCdWcgZml4OiBPZGQgcGFnZXMgb2YgZm9ybWF0ICIvZm9vIiBhcmUgbm93IGNhdGNoZWQgYW5kIG5vCiAgICAgICAgbG9uZ2VyIHRocm93IGhvcnJlbmRvdXMgZXhjZXB0aW9ucy4KICAgICAgICAKICAgICAgICAqIEZpeCBvZiBhIGJ1ZyBmaXg6IFRoZSBjaGFuZ2VkIGhlYWRpbmcgYW5jaG9yIGdlbmVyYXRpb24gaW4KICAgICAgICAyLjIuMTMgY2F1c2VkIHBsZW50eSBvZiBncmllZiB0byBhIGxvdCBvZiBwZW9wbGUgd29ya2luZyB3aXRoCiAgICAgICAgQ1NTIC0gaW5zdGVhZCBvZiBhbiBlbXB0eSB0YWcgd2Ugbm93IGdlbmVyYXRlIGFuIGVtcHR5IHRhZwogICAgICAgIHBhaXIuIDxhIG5hbWU9ImZvbyI+PC9hPiBpbnN0ZWFkIG9mIDxhIG5hbWU9ImZvbyIvPi4gIEl0IHNlZW1zCiAgICAgICAgdGhhdCB0aGUgbGF0dGVyIGNvbmZ1c2VzIHF1aXRlIGEgZmV3IHBhcnNlcnMsIGV2ZW4gdGhvdWdoIGl0J3MKICAgICAgICB2YWxpZCBYSFRNTC4KCjIwMDUtMDUtMDYgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIDIuMi4xMwoKICAgICAgICAqIEJ1ZyBmaXg6IEVtcHR5IGxpbmtzIG5vIGxvbmdlciBnZW5lcmF0ZSB3YXJuaW5ncy4KICAgICAgICAKICAgICAgICAqIFRoZSBub24tZXhpc3RpbmcgcGFnZSBsaW5rcyBhcmUgbm93IGdlbmVyYXRlZCB3aXRob3V0IHRoZQogICAgICAgIGFubm95aW5nIHVuZGVybGluZSBhcyBhIHByb3BlciBoeXBlcmxpbmsuICBZb3UnbGwgcHJvYmFibHkKICAgICAgICB3YW50IHRvIGNvcHkgdGhlIGxpbmsgY29kZSBmcm9tIGpzcHdpa2kuY3NzLi4uCiAgICAgICAgCiAgICAgICAgKiBCdWcgZml4OiBIZWFkaW5ncyBub3cgZ2VuZXJhdGUgdGhlIGxpbmsgYW5jaG9yIGF0IHplcm8KICAgICAgICBsZW5ndGgsIHNvIHRoYXQgdGhleSBzaG91bGQgbm8gbG9uZ2VyIGNvbmZ1c2UgcGVvcGxlIHdobwogICAgICAgIHdyaXRlIENTUy4KCjIwMDUtMDUtMDUgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIDIuMi4xMgogICAgICAgIAogICAgICAgICogQnVnIGZpeDogRkNLIGVkaXRpbmcgbm93IGRpc2FibGVzIHBsdWdpbnMgYW5kIGZpbHRlcnMgCiAgICAgICAgcHJvcGVybHkuCiAgICAgICAgCiAgICAgICAgKiBCdWcgZml4OiBzZWFyY2ggaGlsaWdodGluZyBkaWRuJ3Qgd29yay4KCiAgICAgICAgKiBKU1BXaWtpIGlzIG5vdyBhIFdlYkRBViBDbGFzcy0xIHNlcnZlci4gIFRoZSBzdXBwb3J0IGlzIG5vdAogICAgICAgIHlldCBjb21wbGV0ZSwgbm9yIGFyZSB3ZSBjb21wbGV0ZWx5IENsYXNzLTEgY29tcGxpYW50LCBidXQKICAgICAgICB5b3UgY2FuIG5vdyBicm93c2UgeW91ciBKU1BXaWtpIHJlcG9zaXRvcnkgYnkgcG9pbnRpbmcgYXQgeW91cgogICAgICAgICRiYXNldXJsL2Rhdi8uICBBdHRhY2htZW50IHN1cHBvcnQgaXMgZm9ydGhjb21pbmcsIGFzIHNvb24KICAgICAgICBhcyBJIGZpZ3VyZSBvdXQgd2hhdCdzIHRoZSBiZXN0IGFwcHJvYWNoLiAgQXV0aG9yaW5nIHN1cHBvcnQKICAgICAgICB3aWxsIGFsc28gYmUgZW5hYmxlZCBzb29uLgogICAgICAgIAogICAgICAgIChUbyBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LCBjaGVjayBvdXQgdGhlIG5ldyB3ZWIueG1sKS4KCjIwMDUtMDUtMDIgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIDIuMi4xMS4KCiAgICAgICAgKiBJbmNvcnBvcmF0ZWQgdGhlIEZDSyBlZGl0b3IgZm9yIFdZU0lXWUcgZWRpdGluZywgYXMgd2VsbAogICAgICAgIGFzIHRoZSBYSFRNTCBpbXBvcnQgZnVuY3Rpb25hbGl0eSBmcm9tIFNlYmFzdGlhbiBCYWx0ZXMuCiAgICAgICAgVGhhbmtzIGhlYXBzIQogICAgICAgIAogICAgICAgIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmU6IHlvdSBuZWVkIHRvIHR1cm4gaXQgZXhwbGljaXRseQogICAgICAgIG9uIHdpdGggImpzcHdpa2kuZWRpdG9yPUZDSyIgaW4geW91ciBqc3B3aWtpLnByb3BlcnRpZXMsCiAgICAgICAgYW5kIGFsc28gdW5jb21tZW50IHRoZSA8c2NyaXB0PiB0YWcgaW4gRWRpdFRlbXBsYXRlLmpzcC4gIFRoZQogICAgICAgIGVkaXRvciBpcyBrbm93biB0byBmYWlsIG9yIGJlaGF2ZSByZWFsbHkgc3RyYW5nZWx5IG9uIG9jY2FzaW9uLAogICAgICAgIGFuZCBtYW55IG9mIHRoZSBmdW5jdGlvbmFsaXRpZXMgZG8gbm90IHNpbXBseSB3b3JrIChsaWtlCiAgICAgICAgaW1hZ2UgaW5zZXJ0aW9uKSwgc28gSSdtIGRpc2FibGluZyBxdWl0ZSBhIGxvdCBvZiB3b3JrIGZvciBub3cuCiAgICAgICAgQ2hlY2sgb3V0IHNjcmlwdHMvZmNrY29uZmlnLmpzIGFuZCBzY3JpcHRzL2Zja3N0eWxlcy54bWwgZm9yCiAgICAgICAgZXhhbXBsZXMuCiAgICAgICAgCiAgICAgICAgVGhlIFdZU0lXWUcgZWRpdG9yIHdpbGwgcmVtYWluIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIGZvciBub3cuCiAgICAgICAgCiAgICAgICAgWW91IG5lZWQgdG8gaW5zdGFsbCBGQ0tFZGl0b3IgeW91cnNlbGYgaW50byBzY3JpcHRzL2Zja2VkaXRvci4KCjIwMDUtMDQtMjkgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIDIuMi4xMC4KCiAgICAgICAgKiBBZGRlZCBwYXRjaCBmcm9tIFNlYmFzdGlhbiBCYWx0ZXMgdG8gZml4IGlzc3VlcyB3aXRoIHN0eWxlCiAgICAgICAgZW1iZWRkaW5nOiAlJShjb2xvcjpyZ2IoMSwyLDMpKSB3b3VsZCBub3Qgd29yay4KCjIwMDUtMDQtMjQgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjIuOS4KCiAgICAgICAgKiBBZGRlZCBtaXNzaW5nIGF0dHJpYnV0ZSBvZiBQYWdlRGF0ZTogZm9ybWF0IHRvIGpzcHdpa2kudGxkLgogICAgICAgIE9vcHMuLi4gVGhpcyBvbmUgaGFkIGJlZW4gbWlzc2luZyBmb3IgcXVpdGUgc29tZSB0aW1lLgogICAgICAgIAogICAgICAgICogQ2hhbmdlZCB0aGUgZGVmYXVsdCB0ZW1wbGF0ZSBzb21ld2hhdC4KCiAgICAgICAgKiBVbnVzZWRQYWdlc1BsdWdpbiBubyBsb25nZXIgaW5saW5lcyBpbWFnZXMuCgogICAgICAgICogdjIuMi44CgogICAgICAgICogQWRkZWQgJ2NsYXNzPSJib2R5IicgdG8gZGVmYXVsdCB0ZW1wbGF0ZSBib2R5LCBhcyBwZXIKICAgICAgICBCdWdDU1NDbGFzc0ZvclZpZXdUZW1wbGF0ZS5qc3BCb2R5VGFnCgogICAgICAgICogQWRkZWQgImxpbmsiIHRvIENvbW1lbnQuanNwOyB0aGlzIHNob3VsZCBiZSBhIGxvdAogICAgICAgIHNtYXJ0ZXIgbm93IGFib3V0IGlmIHlvdSB3YW50IHRvIHVzZSBjb21tZW50IGZ1bmN0aW9uYWxpdHkKICAgICAgICBmb3IgdGhlIHdlYmxvZy4KCiAgICAgICAgKiBIb3BlZnVsbHkgZml4ZWQgcHJldmlldyBpc3N1ZXMgd2l0aCBJRSBieSByZXdyaXRpbmcKICAgICAgICBQcmV2aWV3IGNvZGUgKGl0IG5vIGxvbmdlciByZWxpZXMgb24gamF2YXNjcmlwdDpiYWNrKCksIGJ1dAogICAgICAgIGl0IFBPU1RzIGJhY2sgdG8gRWRpdC5qc3ApLiAgRml4ZXMgCiAgICAgICAgQnVnVXNpbmdTU0xXaXRoTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlclY2U3BvaWxzUHJldmlld0Z1bmN0aW9uLgogICAgICAgIEhvcGVmdWxseS4KCiAgICAgICAgKiBBZGRlZCBFZGl0b3JBcmVhVGFnLgoKICAgICAgICAqIE9vcHMsICUlIHdvdWxkIHNvbWV0aW1lcyBlbmQgaW4gU3RhY2tFbXB0eUV4Y2VwdGlvbjsKICAgICAgICB0ZWFjaGVzIG1lIHRvIHJlYWQgamF2YWRvY3MuCgoyMDA1LTA0LTIzICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4yLjcKICAgICAgICAKICAgICAgICAqIEZpeGVkIG1hbnkgaXNzdWVzIHdpdGggfi1lc2NhcGluZy4gIEl0IHNob3VsZCBub3cgd29yayB3aXRoCiAgICAgICAgcHJhY3RpY2FsbHkgYWxsIFdpa2lNYXJrdXA7IHlvdSBzaG91bGQgYmUgYWJsZSB0byBlc2NhcGUKICAgICAgICBhbnl0aGluZy4gIEZpeGVzIEJ1ZyBCYWNrIFNsYXNoZXMgSW4gSHR0cCBTdHJpbmcgSW4gQSBGaWxlCiAgICAgICAgQ2F1c2VzIEZpbGUgTm90IFRvIExvYWQsIEJ1ZyBMaW5lIEJyZWFrcyBJbiBUaGUgTWlkZGxlIE9mIFRleHQuCgogICAgICAgICogRml4ZWQgc29tZSBpc3N1ZXMgd2l0aCAlJS1zdHlsZSBnZW5lcmF0aW9uOiBpdCBub3cgbG9va3MKICAgICAgICBhdCB0aGUgcmVzdCBvZiB0aGUgbGluZSwgYW5kIGlmIGl0IGNvbnRhaW5zIG1hdGVyaWFsLCBpdCB3aWxsCiAgICAgICAgZW1pdCBhIDxzcGFuPiBpbnN0ZWFkIG9mIGEgPGRpdj4uICBUaGlzIHNob3VsZCBtYWtlIGl0IAogICAgICAgIGludHVpdGl2ZWx5IHByZXR0eSBsb2dpY2FsLiAgVGhpcyBzaG91bGQgZml4IHF1aXRlIGEgbWFueQogICAgICAgIGNvbXBsYWludHMgcmVsYXRpbmcgdG8gc3R5bGVzLCBpbmNsdWRpbmcKICAgICAgICBCdWdMaW5lQnJlYWtzV2l0aENTU0Zvcm1hdGluZyAocGFydGlhbCksIEJ1Z0NTU0luVGFibGVzCgoyMDA1LTA0LTIyICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4yLjYuCgogICAgICAgICogQWRkZWQgU2hvcnRWaWV3VVJMQ29uc3RydWN0b3IgYW5kIG1vdmUgYWxsIAogICAgICAgIFVSTENvbnN0cnVjdG9ycyB0byB0aGUgdXJsLXBhY2thZ2UuICBUaGlzIG1ha2VzIGl0CiAgICAgICAgcG9zc2libGUgdG8gaGF2ZSBzaG9ydCBVUkxzICphbmQqIHByb3RlY3QgdGhlIGFjY2VzcwogICAgICAgIHRvIHBhcnRpY3VsYXIgSlNQcy4uLgoKMjAwNS0wNC0yMSAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMi41CgogICAgICAgICogWW91IGNhbiBub3cgY2hvb3NlIHdoaWNoIEx1Y2VuZSBhbmFseXplciB0byB1c2UKICAgICAgICB3aXRoICJqc3B3aWtpLmx1Y2VuZS5hbmFseXplciIuICBDaG9vc2UgaXQgYWNjb3JkaW5nCiAgICAgICAgdG8gdGhlIHByaW1hcnkgbGFuZ3VhZ2Ugb2YgdGhlIHdpa2kuCiAgICAgICAgCiAgICAgICAgKiBMdWNlbmUgY2FuIG5vdyByZWNvdmVyLCBpZiB0aGUgaW5kZXggd2FzIGxvY2tlZAogICAgICAgIHdoZW4gSlNQV2lraSB3YXMgc2h1dCBkb3duLgoKMjAwNS0wNC0yMCAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMi40LgogICAgICAgIAogICAgICAgICogQnVnIGZpeDogVGFibGVPZkNvbnRlbnRzIHBsdWdpbiBub3cgcHJvcGVybHkgY2FsY3VsYXRlcwogICAgICAgIHRoZSBwYWdlIHZhcmlhYmxlcy4KICAgICAgICAKICAgICAgICAqIEJ1ZyBmaXg6IERlbGV0ZWQgcGFnZXMgYXJlIG5vIGxvbmdlciBzaG93biBpbiB0aGUKICAgICAgICBSZWNlbnRDaGFuZ2VzIGxpc3RpbmdzLgoKICAgICAgICAqIHYyLjIuMwogICAgICAgIAogICAgICAgICogQWRkZWQgc29tZSBzYW5pdHkgY2hlY2tzIHRvIHRoZSBzdGFydHVwIGNvbmNlcm5pbmcKICAgICAgICB0aGUgd29yayBkaXJlY3RvcnkuCgoyMDA1LTA0LTE5ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4yLjIuCgogICAgICAgICogQ2FjaGluZ1Byb3ZpZGVyIGRvZXMgbm93IGEgYml0IG1vcmUgc2FuaXR5IGNoZWNrcwogICAgICAgIHdpdGggdGhlIEx1Y2VuZSBkaXJlY3Rvcnk7IHRoaXMgd2FzIGEgc291cmNlIG9mIGNvbmZ1c2lvbgogICAgICAgIGZvciBzb21lIHBlb3BsZS4gIEl0J3MgYWxzbyBtb3JlIHZlcmJvc2UuCgoyMDA1LTA0LTE4ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4yLjEuCgogICAgICAgICogQnVnIGZpeDogUlNTIGdlbmVyYXRpb24gbm8gbG9uZ2VyIGRvZXMgZG91YmxlIGVuY29kaW5nLgoKICAgICAgICAqIEJ1ZyBmaXg6IENhY2hpbmdQcm92aWRlciB3b3VsZCBub3Qgbm90aWNlIG5ldyBmaWxlcy4KCjIwMDUtMDQtMTcgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjIuMC1iZXRhLiAgWWF5ISAgSSBkb24ndCBrbm93IHdoZXRoZXIgdGhpcyB2ZXJzaW9uIGlzIHJlYWxseQogICAgICAgIHJpcGUsIGJ1dCB3ZSBqdXN0IEhBVkUgdG8gZ2V0IGl0IG91dCBhdCBzb21lIHBvaW50LgoKICAgICAgICAqIEZpeGVkIGEgc21hbGwgb2ZmLWJ5LW9uZSBlcnJvciBpbiBTcGFtRmlsdGVyLgoKMjAwNS0wNC0xNiAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xNjcKCiAgICAgICAgKiBFbmhhbmNlZCBTcGFtRmlsdGVyIHRvIGhhdmUgYSBsb2NhbCBiYW4gbGlzdC4gIEFsc28gYWRkZWQgdGhlCiAgICAgICAgYWJpbGl0eSB0byBkbyBlZGl0IGNob2tlIG1vbml0b3Jpbmc6IGFueSBob3N0IGRvaW5nIHRvbyBtYW55CiAgICAgICAgZWRpdHMvbWludXRlIHdpbGwgZ2V0IGFkZGVkIHRvIGJhbiBsaXN0LgoKMjAwNS0wNC0xNCAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xNjYKCiAgICAgICAgKiBSZW1vdmVkIGhlYWRlci5qc3AgZnJvbSBkZWZhdWx0IHRlbXBsYXRlIChpdCB3YXMgbm90IHVzZWQpCiAgICAgICAgCiAgICAgICAgKiBBZGRlZCAiUGFnZSBmZWVkIiBzZWN0aW9uIHRvIGRlZmF1bHQgdGVtcGxhdGUvaW5mby4KCiAgICAgICAgKiBGZWVkRGlzY292ZXJ5VGFnIG5vdyBzaG93cyBhbGwgcGFnZSBmZWVkcyBwcm9wZXJseS4KCiAgICAgICAgKiBQYWdlLXNwZWNpZmljIFJTUyBmZWVkcyBub3cgd29yayAoYWRkICZtb2RlPXdpa2kgdG8gdGhlIHJzcy5qc3AKICAgICAgICB1cmwpLgoKMjAwNS0wNC0xMSAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xNjUKCiAgICAgICAgKiBBZGRlZCBjbGFzc2VzL29zY2FjaGUucHJvcGVydGllcyAob3RoZXJ3aXNlIE9TQ2FjaGUgdGFncyB3b24ndAogICAgICAgIHdvcmspLgoKICAgICAgICAqIEFkZGVkIHRoZSBuZXcgUlNTIEdlbmVyYXRvci4gIEZpeGVzIEJ1Z1JTU0ZlZWRXcm9uZ0RDLgoKMjAwNS0wNC0xMCAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xNjQKICAgICAgICAKICAgICAgICAqIEZpeGVkIE5QRSBpbiBVc2VyUHJlZmVyZW5jZXMuanNwIHdoZW4gYXV0aCB3YXMgbm90IGJlaW5nIHVzZWQuCgogICAgICAgICogRGVmYXVsdCB0ZW1wbGF0ZSBub3cgaGFzICJub2luZGV4LG5vZm9sbG93IiBvbiBvbGQgdmVyc2lvbnMuCiAgICAgICAgVGhpcyBpcyBvbmUgd2F5IHRvIGNvbWJhdCBzcGFtLgoKICAgICAgICAqIFJlZmFjdG9yaW5nOiBSZW1vdmVkIGFsbCByZWZlcmVuY2VzIHRvIENhdGVnb3J5LCByZXBsYWNlZCB3aXRoCiAgICAgICAgTG9nZ2VyLiAgQWxzbyBjbGVhbmVkIGF3YXkgYSBudW1iZXIgb2YgY29tcGlsZXIgd2FybmluZ3MgaW4gdGVzdHMuCgogICAgICAgICogdjIuMS4xNjMKICAgICAgICAKICAgICAgICAqIEF0dGFjaG1lbnQgZGVsZXRpb24gd29ya3Mgbm93IGFzIHdlbGwuCgogICAgICAgICogQnJlYWRjcnVtYnNUYWcuRml4ZWRRdWV1ZSBpcyBub3cgc3RhdGljLiAgVGhpcyBzaG91bGQgaGVscCB3aXRoCiAgICAgICAgc29tZSBzZXJpYWxpemF0aW9uIGlzc3Vlcy4gIFJlcG9ydGVkIGJ5IG1hbnkgcGVvcGxlLCBmb3Jnb3R0ZW4gYnkKICAgICAgICBtZS4KCiAgICAgICAgKiBVVEYtOCBhdHRhY2htZW50IG5hbWVzIHdvdWxkIGZhaWwgKGFnYWluKS4gIFRoYW5rcyB0byBTdGVwaGFuCiAgICAgICAgU2NoaWVzc2xpbmcuCgoyMDA1LTA0LTA3ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjE2MgogICAgICAgIAogICAgICAgICogQnVnIGZpeDogTG9uZyB2YWx1ZXMgaW4gZmlsdGVyLnhtbCB3b3VsZCBjYXVzZSB0cnVuY2F0aW9uLgogICAgICAgIFBhdGNoIGZyb20gTWFyaW8uICBGaXhlcyBCdWdMYXJnZVZhbHVlc1RydW5jYXRlZEluRmlsdGVycy54bWwuCgogICAgICAgICogQnVnIGZpeDogRGVmYXVsdFVSTENvbnN0cnVjdG9yIHdvdWxkIGFwcGVuZCBib3RoICYgYW5kID8gdG8KICAgICAgICBwYXJhbWV0ZXJzLCBjYXVzaW5nIGNvbmZ1c2lvbi4gIFJlcG9ydGVkIGJ5IEpha2UgVm9nZWxhYXIuCgoyMDA1LTA0LTA2ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjE2MQoKICAgICAgICAqIFJlZmFjdG9yZWQgVHJhZGl0aW9uYWxEaWZmUHJvdmlkZXIgdG8gYmUgbW9yZSBKU1BXaWtpIGNvZGluZwogICAgICAgIGd1aWRlbGluZXMgY29tcGxpYW50LgoKICAgICAgICAqIEFkZGVkIGEgZnVuY3Rpb25hbCBDb250ZXh0dWFsRGlmZlByb3ZpZGVyICh0aGFua3MgdG8gSGVubmluZwogICAgICAgIFNjaG1pZWRlaGF1c2VuKS4KCiAgICAgICAgKiBDYWNoaW5nQXR0YWNobWVudFByb3ZpZGVyIG5vdyBlbXB0aWVzIHRoZSBjYWNoZSBpbiBjYXNlIHRoZQogICAgICAgIGF0dGFjaG1lbnQgaXMgZGVsZXRlZC4gIFJlcG9ydGVkIGJ5IFJhZ2hhdmFuIFNyaW5pdmFzYS4KCjIwMDUtMDQtMDUgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIEZpeGVkIEJ1Z0NvbW1lbnRCb3hTdHlsZS4KCiAgICAgICAgKiB2Mi4xLjE2MAogICAgICAgIAogICAgICAgICogUmVtb3ZlZCB0aGUgRXhwaXJlcy1oZWFkZXIgZnJvbSBBdHRhY2htZW50U2VydmxldCBmb3Igbm93OwogICAgICAgIGNoZWNraW5nIGlmIHRoYXQgaGVscHMgd2l0aCBCdWdTdGFsZUF0dGFjaG1lbnRzLgoKMjAwNS0wNC0wNCAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xNTkKICAgICAgICAKICAgICAgICAqIEFkZGVkIHNvbWUgcGF0Y2hlcyB0byB0ZXN0cyB0byBtYWtlIHN1cmUgdGhleSBhbGwgcnVuIG9uIHN5c3RlbXMKICAgICAgICB0aGF0IGRvbid0IHVzZSBMYXRpbjEgYXMgZGVmYXVsdC4uLiBDb250cmlidXRlZCBieSBIZW5uaW5nCiAgICAgICAgU2NobWllZGVoYXVzZW4uCiAgICAgICAgCiAgICAgICAgKiBUZXh0VXRpbC51cmxFbmNvZGUoKSAmIHVybERlY29kZSgpIG5vIGxvbmdlciBhc3N1bWUgdGhhdCB0aGUKICAgICAgICBwbGF0Zm9ybSBkZWZhdWx0IGVuY29kaW5nIGlzIExhdGluMS4gIENvbnRyaWJ1dGVkIGJ5IEhlbm5pbmcKICAgICAgICBTY2htaWVkZWhhdXNlbi4KCiAgICAgICAgKiBSZW1vdmVkIGRlcGVuZGFuY3kgb24gdGhlIGJtc2kgZGlmZmVyZW5jZSBwYWNrYWdlLCBhcyBpdCB3YXMgR1BMCiAgICAgICAgKG9vcHMpLiAgSSBkb24ndCBrbm93IGhvdyBJIG1pc3NlZCB0aGF0LCBidXQgdGhlIGRlcGVuZGVuY3kgaXMKICAgICAgICBnb25lIG5vdy4gIFJlcGxhY2VkIHdpdGggdGhlIEpha2FydGEgSlJDUy1kaWZmIHBhY2thZ2UuICBTdWdnZXN0ZWQKICAgICAgICBhbmQgY29udHJpYnV0ZWQgYnkgSGVubmluZyBTY2htaWVkZWhhdXNlbi4KICAgICAgICAKICAgICAgICAqIFJlbW92ZWQgRGlmZmVyZW5jZUVuZ2luZSBhbmQgbW92ZWQgdGhlIGVudGlyZSBkaWZmIGNvZGUgaW50byBpdHMKICAgICAgICBvd24gcGFja2FnZS4gIENvbnRyaWJ1dGVkIGJ5IEpvaG4gVm9sa2FyLgoKMjAwNS0wNC0wMyAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xNTgKCiAgICAgICAgKiBEZWxldGlvbiBvZiBlbnRpcmUgcGFnZXMgd29ya3Mgbm93LiAgTWFrZSBzdXJlIHlvdXIgRGVsZXRlLmpzcAogICAgICAgIGlzIHByb3RlY3RlZCEKCiAgICAgICAgKiBBZGRlZCBwYXNzd29yZCBwcm90ZWN0aW9uIHRvIEluc3RhbGwuanNwCgoyMDA1LTA0LTAyICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjE1NwoKICAgICAgICAqIEFkZGVkIHBhdGNoIGZyb20gSGVubmluZyBQLiBTY2htaWVkZWhhdXNlbiB0byBmaXggc29tZSBpc3N1ZXMKICAgICAgICB3aXRoIHRoZSBDYWNoaW5nUHJvdmlkZXIgbmVnQ2FjaGUuCgoyMDA1LTAzLTMxICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiBSZW1vdmVkIHNvbWUgZXh0cmEgaW1wb3J0cy4gIEdldHRpbmcgYmFjayB0byBzcGVlZCBpbgogICAgICAgIGRldmVsb3BtZW50Li4uCgoyMDA1LTAzLTExICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiBBZGRlZCBmYXZpY29uIGFuZCB0aGUgY29ycmVzcG9uZGluZyB0aGluZ3kgdG8gY29tbW9uaGVhZGVyLmpzcC4KICAgICAgICBJIGdvdCB0aXJlZCBvZiBzZWVpbmcgNDA0cyBmcm9tIGFsbCBzdHVwaWQgYnJvd3NlcnMuLi4KCjIwMDUtMDMtMDkgIEVyaWsgQnVubiA8ZWJ1QG1lbWVjcnkubmV0PgoKICAgICAgICAqIEFkZGVkIGVtcHR5IGFycmF5IGNoZWNrIHRvIEZpbGVVdGlsMTQuZ2V0VGhyb3dpbmdNZXRob2QoKQoKMjAwNS0wMy0wOSAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xNTYKCiAgICAgICAgKiBEaXNhYmxlZCBhbGwgYXV0aCB0ZXN0cy4gIEluIGZhY3QsIGZvciB0aGUgZmlyc3QgdGltZSwgYWxsIHRlc3RzCiAgICAgICAgbm93IHJ1biAob24gbXkgcGxhdGZvcm0sIHRoZXJlIGFyZSBzdGlsbCBzb21lIGNoYXIgY29kaW5nIGlzc3VlcwogICAgICAgIG9uIHNvbWUgb3RoZXJzLiAgU3R1cGlkIG1lLikKCiAgICAgICAgKiBBZGRlZCBwYWdlIGRlbGV0aW9uIHN1cHBvcnQgdG8gV2lraUVuZ2luZS4KCiAgICAgICAgKiBNYWpvciByZWZhY3RvcmluZyBvZiBib3RoIENhY2hpbmdQcm92aWRlciAoPXNwZWVkISkgYW5kCiAgICAgICAgVmVyc2lvbmluZ0ZpbGVQcm92aWRlcig9bm93IGFjdHVhbGx5IHN1cHBvcnRzIGRlbGV0aW5nIHZlcnNpb25zIG9mCiAgICAgICAgYSBwYWdlKS4KCjIwMDUtMDMtMDcgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIEZpeGVkIGlzc3VlcyB3aXRoIGEgbnVtYmVyIG9mIHRlc3RzLgogICAgICAgIAogICAgICAgICogQWRkZWQgdGhlICJTZWFyY2giIHBsdWdpbi4KICAgICAgICAKICAgICAgICAqIFNvbWUgYnVnIGZpeGVzIGFuZCBzYW5pdHkgY2hlY2tzIHRvIFJlZmVyZW5jZU1hbmFnZXIuCiAgICAgICAgCiAgICAgICAgKiBUdXJuZWQgb2ZmIG9sZCBhdXRoIGNvZGUgYnkgZGVmYXVsdC4gIFNldCB0aGUgcHJvcGVydHkKICAgICAgICAianNwd2lraS5hdXRoLnVzZU9sZEF1dGgiIHRvICJ0cnVlIiBpbiB5b3VyIGpzcHdpa2kucHJvcGVydGllcyBpZgogICAgICAgIHlvdSB3YW50IHRvIGtlZXAgdXNpbmcgaXQuCgoyMDA1LTAzLTA0ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjE1NQoKICAgICAgICAqIENvbnRpbnVlZCByZXdvcmtpbmcgb2YgQ2FjaGluZ1Byb3ZpZGVyIHRvIHByb3ZpZGUgYW4KICAgICAgICBvcHRpbWl6ZWQgcmVzdWx0LiAgVGhlcmUgYXJlIHBsZW50eSBvZiBuYXN0eSBkZXBlbmRlbmNpZXMKICAgICAgICB0aGVyZS4uLiBIb3dldmVyLCBJIGRpZCBnZXQgbW9zdCB0ZXN0cyB0byBydW4uCgoyMDA1LTAzLTAyICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjE1NAogICAgICAgIAogICAgICAgICogRml4ZWQgYSBidW5jaCBvZiB0ZXN0cyB0aGF0IHdlcmUgYnJva2VuIGJ5IDIuMS4xNTIuCiAgICAgICAgCiAgICAgICAgKiBSZXBvc2l0b3J5TW9kaWZpZWRFeGNlcHRpb24gbm93IGhhcyBhIG5ldyBjb25zdHJ1Y3RvcgogICAgICAgIHdpdGggdGhlIHBhZ2UgbmFtZSBhcyB3ZWxsLgoKICAgICAgICAqIE1BSk9SIGNoYW5nZSB0byBDYWNoaW5nUHJvdmlkZXI6IGl0IHdhcyBnZXR0aW5nIGEgYml0IHRvbwogICAgICAgIHVud2llbGR5IHRvIGRlYnVnLCBzbyBJIGNoYW5nZWQgaXQgdG8gY29tcGxldGVseSB1c2UgT1NDYWNoZS4KICAgICAgICBUaGlzIHNob3VsZCBob3BlZnVsbHkgaGVscCB0aGUgY2FjaGluZyBpc3N1ZXMgc29tZXdoYXQgKEkganVzdAogICAgICAgIGhvcGUgSSBkaWRuJ3QgZG8gYW55IG1ham9yIGRhbWFnZS4uLikKCiAgICAgICAgKiBXaWtpUGFnZSBpcyBub3cgQ29tcGFyYWJsZS4KCjIwMDUtMDMtMDEgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTUzCgogICAgICAgICogQWRkZWQgSW5zdGFsbC5qc3AgZm9yIGEgc2ltcGxlIGluc3RhbGxhdGlvbi4KCjIwMDUtMDItMjYgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTUyCgogICAgICAgICogQWJzdHJhY3RSZWZlcnJhbFBsdWdpbiBub3cgYWxzbyBzdXBwb3J0cyBwYXJhbWV0ZXJzIGxpa2UKICAgICAgICAiYmVmb3JlIiBhbmQgImFmdGVyIiwgc28geW91IGNhbiBoYXZlIG11Y2ggYmV0dGVyIGNvbnRyb2wgb3ZlcgogICAgICAgIHdoYXQgeW91IGRvLiAgVGhhbmtzIHRvIEZvc3RlciBTY2h1Y2tlciBmb3IgdGhlIHBhdGNoLgogICAgICAgIAogICAgICAgICogRml4ZWQgcGxlbnR5IG9mIGZhaWxpbmcgdGVzdHMgKGluY2x1ZGluZyB0aGUgYW5ub3lpbmcgIkNhbm5vdAogICAgICAgIHN0YXJ0IG1hbmFnZXJzOiBudWxsKS4gIEkgdGhpbmsgSSBraW5kYSBsaWtlIEVjbGlwc2UsIG5vdyB0aGF0IEknbQogICAgICAgIGdldHRpbmcgdXNlZCB0byBpdC4KCiAgICAgICAgKiBCdWcgZml4OiBXaGVuIHVzaW5nIElTTy04ODU5LTEsIGF0dGFjaG1lbnQgVVJMcyB3b3VsZCBzdGlsbAogICAgICAgIGNvbnRhaW4gdGhlICIlMkYiLiAgSlNQV2lraSBzaG91bGQgbm93IHdvcmsgbmljZWx5IHdoZW4gYSBwYWdlCiAgICAgICAgbmFtZSBjb250YWlucyBhIHNsYXNoLiAgRml4ZXMgQnVnVVJMRW5jb2RlckVuY29kZXNBbHNvRm9ySW1hZ2VzLgogICAgICAgIAogICAgICAgICogQnVnIGZpeDogQ2FjaGluZ1Byb3ZpZGVyIHdvdWxkIGxvc2UgbWV0YWRhdGEgb24gc2F2ZS4gUmVwb3J0ZWQKICAgICAgICBieSBBbmRyZXcgSmFxdWl0aC4KCjIwMDUtMDItMjIgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTUxCgogICAgICAgICogU2hvcnRVUkxDb25zdHJ1Y3RvciBub3cgd29ya3MgaW4gYWxsIGNhc2VzIGV4Y2VwdCBzcGVjaWFsIHBhZ2VzLgogICAgICAgIAogICAgICAgICogdjIuMS4xNTAKICAgICAgICAKICAgICAgICAqIFJTU0dlbmVyYXRvciBub3cgaGFzIGEgYml0IG1vcmUgdmVyYm9zZSBSU1MgZ2VuZXJhdGlvbiBmb3IKICAgICAgICBhdHRhY2htZW50cy4KICAgICAgICAKICAgICAgICAqIFdvcmtlZCBhIGJpdCBtb3JlIG9uIFNob3J0VVJMQ29uc3RydWN0b3IuICBOb3cgdGhlIGRpZmZlcmVudAogICAgICAgIG90aGVyIFVSTHMgd29yaywgYnV0IHRoZXJlIGFyZSBpc3N1ZXMgd2hlbiBnZW5lcmF0aW5nIHJlbGF0aXZlCiAgICAgICAgVVJMcy4KCjIwMDUtMDItMTkgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTQ5CgogICAgICAgICogTmV3IEVkaXRvcnRhZyBhbmQgY29ycmVzcG9uZGluZyBKU1AgcGFnZXMgbm93IGZpeAogICAgICAgIEJ1Z0NvbW1lbnRQcmV2aWV3RGVsZXRlc0FsbENvbW1lbnRzLgoKICAgICAgICAqIEVkaXRvclRhZyBub3cgaXMgbXVjaCBzbWFydGVyIHRoYW4gYmVmb3JlOiB5b3UgY2FuIGRvIHRoaW5ncwogICAgICAgIGxpa2UgcHV0IHlvdXIgb3duIGVkaXRpbmcgY29tbWFuZHMgaW5zaWRlIHRoZSBib2R5IC0gdGhlIEVkaXRvclRhZwogICAgICAgIGp1c3QgYWRkcyBhbGwgdGhlIHJlcXVpcmVkIHBpZWNlcy4KCjIwMDUtMDItMTUgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTQ4CiAgICAgICAgCiAgICAgICAgKiBPb3BzLCBkaWRuJ3QgcXVpdGUgZml4IHRoZSBwcm9ibGVtczsgdGhlIGV4dHJhIDxzY3JpcHQ+IHRhZwogICAgICAgIHR1cm5lZCBvdXQgdG8gYmUgdXNlZnVsIGFmdGVyIGFsbC4uLiBGaXhlcwogICAgICAgIEJ1Z0NhbnRGaW5kSlNQV0lLSV9NQUMuQ1NTLgogICAgICAgIAoyMDA1LTAyLTEzICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjE0NwoKICAgICAgICAqIEZpeGVkIHByb2JsZW0gd2l0aCBhbiBleHRyYSA8c2NyaXB0PiB0YWcgaW5zaWRlIGNzc2luY2x1ZGUuanMKCiAgICAgICAgKiBSZW1vdmVkIHNldmVyYWwgdW51c2VkIGltcG9ydHMgKHRlc3Rpbmcgb3V0IEVjbGlwc2UsIG5vdyB0aGF0IGl0CiAgICAgICAgc2VlbXMgdGhhdCBpdCBoYXMgcHJvcGVyIGVtYWNzLWxpa2UgaW5kZW50aW5nIC0gbm93IEkganVzdCBuZWVkIGEKICAgICAgICBDaGFuZ2VMb2ctcGx1Z2luLi4uCgoyMDA1LTAxLTMxICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjE0Ni4KCiAgICAgICAgKiBBZGRlZCBTaG9ydFVSTENvbnN0cnVjdG9yLCB0aG91Z2ggaXQgZG9lcyBub3Qgd29yay4uLiAgRXhjZXB0CiAgICAgICAgZm9yIFZJRVcuCgogICAgICAgICogQWRkZWQgQmFzZVVSTCB0YWcgKGp1c3QgdG8gbWFrZSB0aGluZ3MgYSBiaXQgZWFzaWVyIGZvciB0ZW1wbGF0ZQogICAgICAgIHdyaXRlcnMpLgoKMjAwNS0wMS0yOCAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xNDUuCgogICAgICAgICogY3JlYXRlQ29udGV4dCgpIG5vdyBwcmV2ZW50cyBub24td2lraW5hbWVzIHRvIGJlIGNyZWF0ZWQuICBUaGlzCiAgICAgICAgbWF5IGZpeCBhIGJ1bmNoIG9mIHBvdGVudGlhbCBwcm9ibGVtcy4KCiAgICAgICAgKiBGaWx0ZXJNYW5hZ2VyLmFkZFBhZ2VGaWx0ZXIoKSBub3cgZG9lcyBhIGJpdCBvZiBhIHNhbml0eSBjaGVjay4KCjIwMDUtMDEtMjYgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTQ0LgoKICAgICAgICAqIE9vcHMsIExpbmtUb1RhZyB1c2VkIGFjY2lkZW50YWxseSBBVFRBQ0ggaW5zdGVhZCBvZiBWSUVXLi4uCgoyMDA1LTAxLTI1ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjE0My4KCiAgICAgICAgKiBQaW5nV2VibG9nc0NvbUZpbHRlciBub3cgYWN0dWFsbHkgYWNjZXB0cyBhIHBhcmFtZXRlciB3aGVyZSB0bwogICAgICAgIHBpbmcuCgogICAgICAgICogQWxsIHRhZ3MgYW5kIGNvZGUgd2VyZSBtb3ZlZCB0byB0aGUgbmV3IHN0YW5kYXJkLgoKICAgICAgICAqIEhhZCBhIG1ham9yIHJldmVsYXRpb24gYW5kIG1vdmVkIHRoZSBVUkwgZ2VuZXJhdGlvbiBzdWJyb3V0aW5lcwogICAgICAgIGZyb20gV2lraUVuZ2luZSB0byBXaWtpQ29udGV4dC4gIFRoaXMgaGFkIHRvIGJlIGRvbmUgb3IgZWxzZSB0aGVyZQogICAgICAgIHdvdWxkIGJlIG5vIHdheSB0byBjaGFuZ2UgaG93IHRoZSBVUkxzIGFyZSBnZW5lcmF0ZWQgaW4gZGlmZmVyZW50CiAgICAgICAgY29udGV4dHMsIHN1Y2ggYXMgUlNTIGdlbmVyYXRpb24gb3IgWE1MLVJQQy4gIFRoaXMgYWxzbyBtZWFucwogICAgICAgIFdpa2lFbmdpbmUuZ2V0Vmlld1VSTCgpIGlzIG5vdyBkZXByZWNhdGVkIChwbGVhc2UgdXNlCiAgICAgICAgV2lraUNvbnRleHQuZ2V0Vmlld1VSTCgpLCBXaWtpQ29udGV4dC5nZXRVUkwoKSkgaW5zdGVhZC4KCiAgICAgICAgKiBBZGRlZCAzMDQgY2hlY2sgdG8gYXRvbS5qc3AgYXMgd2VsbC4KCjIwMDUtMDEtMjMgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTQyLgoKICAgICAgICAqIEFkZGVkIDMwNCBjaGVjayB0byByc3MuanNwCgogICAgICAgICogSW1wbGVtZW50ZWQgSWRlYUdldFdpa2lJbnN0YW5jZUJ5U2VydmxldENvbnRleHQgYnkgKEkgbG9zdCB0aGUKICAgICAgICBlbWFpbCwgc29ycnkpCgogICAgICAgICogdjIuMS4xNDEuCgogICAgICAgICogWW91IG1heSBub3cgc2V0IHRoZSBVUkxDb25zdHJ1Y3RvciBpbnN0YW5jZSBieSB1c2luZwogICAgICAgIGpzcHdpa2kudXJsQ29uc3RydWN0b3IgcGFyYW1ldGVyLgoKICAgICAgICAqIHJzcy5qc3AgaGFkIGEgdHlwbyBhbmQgd291bGQgbm90IGNvbXBpbGUsIG9vcHMuLi4KCiAgICAgICAgKiBBbG1vc3QgYWxsIGhhcmQtY29kZWQgcmVmZXJlbmNlcyB0byBVUkxzIGFyZSBub3cgaGFuZGxlZCBieSBhbgogICAgICAgIFVSTEdlbmVyYXRvciBpbnN0YW5jZS4KCiAgICAgICAgKiBBbGwgaW5zdGFuY2VzIG9mIFNlcnZsZXRSZXF1ZXN0LmdldFJlbW90ZUhvc3QoKSB3ZXJlIHJlcGxhY2VkCiAgICAgICAgd2l0aCBnZXRSZW1vdGVBZGRyKCkgLSB0aGlzIG1lYW5zIHRoYXQgeW91IG5vIGxvbmdlciBnZXQgdGhlIGhvc3QKICAgICAgICBuYW1lcyBpbiB0aGUgbG9ncy4gIE9uIHRoZSBvdGhlciBoYW5kLCB0aGlzIHNob3VsZCBiZSBhIGxvdCBmYXN0ZXIKICAgICAgICBpZiB5b3VyIGRucyBpcyBzbG93LgoKICAgICAgICAqIEJ1ZyBmaXg6IENvbnRleHQgdmFyaWFibGVzIHdlcmUgZXNzZW50aWFsbHkgaWdub3JlZCBpbgogICAgICAgIFZhcmlhYmxlTWFuYWdlci4KCjIwMDUtMDEtMjIgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTQwLgoKICAgICAgICAqIEpTUHdpa2kgbm93IHN1cHBvcnRzIHRoZSBHb29nbGUgaW5pdGlhdGl2ZSB3aWtpL2Jsb2cgc3BhbQogICAgICAgIHJlZHVjdGlvbiBieSB1c2luZyByZWw9Im5vZm9sbG93IiBmb3IgYW55IGxpbmtzIG91dHNpZGUgdGhlIHdpa2kuCiAgICAgICAgU2V0ICJqc3B3aWtpLnRyYW5zbGF0b3JSZWFkZXIudXNlUmVsTm9mb2xsb3ciIHRvICJ0cnVlIiB0byBlbmFibGUKICAgICAgICB0aGlzLgoKICAgICAgICAqIFRyYW5zbGF0b3JSZWFkZXIgbm93IGNvbXBsZXRlbHkgdXNlcyB0aGUgbmV3IFVSTCBnZW5lcmF0aW9uCiAgICAgICAgc2NoZW1lLgoKICAgICAgICAqIFJTUyBnZW5lcmF0aW9uIG5vdyB1c2VzIGFic29sdXRlIFVSTHMgcmVnYXJkbGVzcyBvZiB0aGUgc2V0dGluZwogICAgICAgIG9mIGpzcHdpa2kucmVmZXJlbmNlU3R5bGUuICBJdCBhbHNvIHVzZXMgdGhlIG5ldyBVUkwgZ2VuZXJhdGlvbgogICAgICAgIHNjaGVtZS4KCiAgICAgICAgKiBJbnNlcnRQYWdlIHBsdWdpbiBub3cgaGFzIGEgImRlZmF1bHQiIGF0dHJpYnV0ZS4KCjIwMDUtMDEtMTggIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTM5LgoKICAgICAgICAqIE9vcHM6IGZvcmdvdCB0byBzZXQgdGhlIHNlcnZsZXQtbWFwcGluZyB0byBjb25mb3JtIHRvIHRoZSBuZXcKICAgICAgICBVUkkgc2NoZW1lOiB0aGUgVVJMIHBhdHRlcm4gc2hvdWxkIGJlICIvYXR0YWNoLyoiLCBub3QKICAgICAgICAiL2F0dGFjaCIuLi4KCiAgICAgICAgKiB2Mi4xLjEzOC4KCiAgICAgICAgKiBGaXhlZCBCdWdFcnJvckluRGVmYXVsdEpzcHdpa2kuY3NzIChyZXBvcnRlZCBieSBQZXIpLgoKICAgICAgICAqIEFkZGVkIHBhdGNoIHRvIFJDU0ZpbGVQcm92aWRlciBhbmQgRmlsZVV0aWwgdG8gY2xvc2UgZG93biBhCiAgICAgICAgYnVuY2ggb2YgcHJvY2Vzc2VzIHRoYXQgc2hvdWxkIGZpeAogICAgICAgIEJ1Z1Rvb01hbnlGaWxlc09wZW5XaGVuVXNpbmdSQ1MuICBDb250cmlidXRlZCBieSBDbGFhcyBSdXNjaG1leWVyLgoKICAgICAgICAqIEFkZGVkIG5ldyBwYXJhbWV0ZXI6IGpzcHdpa2kucmVmZXJlbmNlU3R5bGUuICBUaGlzIG1heSBiZSBzZXQgdG8KICAgICAgICAiYWJzb2x1dGUiIG9yICJyZWxhdGl2ZSIsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHlvdSB3YW50IHRvIGhhdmUKICAgICAgICBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkxzLiAgSXQgZG9lcyBub3QgeWV0IHdvcmsgb24gZXZlcnkgbGluawogICAgICAgIGNvbnN0cnVjdCwgYnV0IGl0IHdpbGwuLi4gIFRoaXMgY2hhbmdlIGFsc28gaW50cm9kdWNlZCBhIG5ldwogICAgICAgIGludGVyZmFjZSwgVVJMQ29uc3RydWN0b3IsIHdoaWNoIHdpbGwgYmUgcGx1Z2luaXphYmxlIGxhdGVyIG9uLgogICAgICAgIEhvcGVmdWxseSBpdCBpcyB2ZXJzYXRpbGUgZW5vdWdoLCBidXQgc28gZmFyLCBwbGVhc2UgY29uc2lkZXIgaXQKICAgICAgICBpbnRlcm5hbC4gIFRoaXMgY2hhbmdlIG1heSBoYXZlIGJyb2tlbiBhIGxvdCBvZiB0aGluZ3MsIGJ1dCBpdAogICAgICAgIGRvZXMgcGF2ZSB3YXkgZm9yIHNob3J0IHVybHMuCgoyMDA1LTAxLTE1ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiBUYWJsZU9mQ29udGVudHMgLXBsdWdpbiBub3cgaGFzIGEgdGl0bGUgYXMgd2VsbC4uLgoKMjAwNS0wMS0xMSAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xMzcKCiAgICAgICAgKiBBZGRlZCBwYXJhbWV0ZXJzICJzdWJtaXQiLCAicHJldmlldyIgYW5kICJjYW5jZWwiIHRvIEVkaXRvclRhZwogICAgICAgIChzbyB5b3UgY2FuIGxvY2FsaXplIGl0KS4KCjIwMDUtMDEtMTAgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIEFkZGVkIHN0eWxlcyBmb3IgdGhlIFRhYmxlT2ZDb250ZW50cyBwbHVnaW4gaW4gdGhlIGRlZmF1bHQKICAgICAgICBqc3B3aWtpLmNzcy4KCiAgICAgICAgKiBBZGRlZCBhICJjZW50ZXIiIHN0eWxlIGluIHRoZSBkZWZhdWx0IGpzcHdpa2kuY3NzICh3aGljaCBpcwogICAgICAgIHNtYXJ0IGVub3VnaCB0byBjZW50ZXIgdGFibGVzIGFzIHdlbGwgb24gbW9zdCBicm93c2VycykuCgogICAgICAgICogdjIuMS4xMzYKCiAgICAgICAgKiBJbmZvQ29udGVudC5qc3Agbm8gbG9uZ2VyIHVzZXMgc2NyaXB0bGV0cyB0byBkZXRlcm1pbmUgcHJldmlvdXMKICAgICAgICBhbmQgbmV4dCB2ZXJzaW9uczsgaW5zdGVhZCwgdHdvIG5ldyB0YWdzICJQcmV2aW91c1ZlcnNpb25UYWciIGFuZAogICAgICAgICJOZXh0VmVyc2lvblRhZyIgaGF2ZSBiZWVuIGltcGxlbWVudGVkLiAgVGhpcyB3aWxsIG1ha2UgbWlncmF0aW9uCiAgICAgICAgYSBsb3QgZWFzaWVyIHdoZW4geW91IGNhbiBkZWxldGUgaW50ZXJtZWRpYXRlIHZlcnNpb25zIChvciBoZWxwIGEKICAgICAgICBsb3QgaWYgeW91IHdhbnQgdG8gZG8gYSBTdWJWZXJzaW9uUHJvdmlkZXIuLi4pICBUaGUgdGFncyBuZWVkIHRvCiAgICAgICAgYmUgaG9va2VkIHVwIHRvIHRoZSB2ZXJzaW9uIGhpc3RvcnkgYmVmb3JlIHRoZXkncmUgdXNlZnVsLAogICAgICAgIHRob3VnaC4uLgoKICAgICAgICAqIERpZmZMaW5rVGFnIG5vdyB1bmRlcnN0YW5kcyBhIG1hZ2ljYWwgdmVyc2lvbiBudW1iZXIgImN1cnJlbnQiCiAgICAgICAgdG8gcmVmZXIgdG8gdGhlIGN1cnJlbnQgdmVyc2lvbi4KCiAgICAgICAgKiBCdWcgZml4OiBCdWdJbmNsdWRlVGFnVXNlc0RlZmF1bHRUYWdPbmx5IHNob3VsZCBub3cgYmUgZml4ZWQKICAgICAgICB3aXRoIGEgZml4IHRvIHRoZSBDb250ZW50VGFnLgoKICAgICAgICAqIENoZWNrVmVyc2lvblRhZyBub3cgc3VwcG9ydHMgdHdvIGFkZGl0aW9uYWwgbW9kZXM6ICJub3RmaXJzdCIsCiAgICAgICAgYW5kICJmaXJzdCIuCgogICAgICAgICogQ2FjaGluZ1Byb3ZpZGVyIGNhY2hlIGNvbnNpc3RlbmN5IGNoZWNrcyBhcmUgbm93IGluIHNlY29uZHMsIG5vdAogICAgICAgIG1pbGxpc2Vjb25kcyAod2hpY2ggd2FzIGEgc3R1cGlkIGlkZWEgYW55d2F5KS4KCjIwMDUtMDEtMDggIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIEJ1Z1JlcG9ydEhhbmRsZXIgaWdub3JlcyBub3cgX2JvZHkgKG9vcHMpIDopCgogICAgICAgICogdjIuMS4xMzUKCiAgICAgICAgKiBTaG91bGQgZml4IHRoZSBzcHVyaW91cyBwcm9ibGVtIHBlb3BsZSBoYWQgdHJ5aW5nIHRvIGF0dGFjaAogICAgICAgIGZpbGVzIHdpdGggbm9uLWFzY2lpIG5hbWVzIHRvIHBhZ2VzIHRoYXQgYWxzbyBoYWQgbm9uLWFzY2lpIG5hbWVzLAogICAgICAgIGFrYQogICAgICAgIEJ1Z1Rocm93c0FuRXhjZXB0aW9uV2hlblRyeWluZ1RvQXR0YWNoQUZpbGVUb0FQYWdlV2l0aEFGYW5jeU5hbWVVVEY4LgoKICAgICAgICAqIEF0dGFjaG1lbnRTZXJ2bGV0IG5vdyByZXNwb25kcyB3aXRoIGVycm9yIGNvZGVzLgoKICAgICAgICAqIEF0dGFjaG1lbnQgdXJscyBhcmUgbm93IGluIHRoZSBmb3JtIC9hdHRhY2gvZm9vL2Jhci50eHQuICBUaGlzCiAgICAgICAgaGFzIHNldmVyYWwgYWR2YW50YWdlcywgbW9zdGx5IGJlY2F1c2UgYWxsIGZpbGVzIG5vdyBsb29rIGxpa2UKICAgICAgICB0aGV5IHdlcmUgc2VydmVkIG5hdGl2ZWx5LiAgTm90ZSB0aGF0IHRoZSB3ZWIueG1sIGZpbGUgaGFzIGNoYW5nZWQKICAgICAgICB0byByZWZsZWN0IHRoaXMuICBPZiBjb3Vyc2UsIHRoZSBvbGQgdXJscyBzdGlsbCB3b3JrLgoKICAgICAgICAqIE5lc3RlZCBsaXN0cyBub3cgZ2VuZXJhdGUgcHJvcGVyIFhIVE1MIGNvZGUuICBUaGlzIHJlbW92ZXMgYWxsCiAgICAgICAga25vd24gWEhUTUwgYnVncyAoYnV0IEknbSBzdXJlIHRoZXJlIGFyZSBzdGlsbCBzb21lKS4gIFRoZSBkZWZhdWx0CiAgICAgICAgVGV4dEZvcm1hdHRpbmdSdWxlcyBwYWdlIG5vdyB2YWxpZGF0ZXMuCgoyMDA1LTAxLTA3ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjEzNAoKICAgICAgICAqIFJlbW92ZWQgTG9naW5Cb3ggZnJvbSB0aGUgZGVmYXVsdCB0ZW1wbGF0ZSBpbiBhbnRpY2lwYXRpb24gb2YKICAgICAgICB0aGUgR3JlYXQgUmVvcmcuCgogICAgICAgICogVGFibGVPZkNvbnRlbnRzIHBsdWdpbiBubyBsb25nZXIgZ2V0cyBjb25mdXNlZCBpZiBhIGhlYWRpbmcKICAgICAgICBjb250YWlucyBIVE1MIGVzY2FwYWJsZSBjaGFyYWN0ZXJzLCBzdWNoIGFzIHF1b3RlcywgPC1zaWducyBvcgogICAgICAgIGFtcGVyc2FuZHMuCgogICAgICAgICogQWRkZWQgbmV3IHBhcmFtZXRlciB0byBUYWJsZU9mQ29udGVudHM6ICJ0aXRsZSIuCgogICAgICAgICogQWRkZWQgQ29udGVudFRhZyBmb3IgKnJlYWxseSogc2ltcGxlIHRlbXBsYXRpbmcuICBBbHNvIG1vZGlmaWVkCiAgICAgICAgV2lraVRlbXBsYXRlcyB0dXRvcmlhbCBhbmQgdGhlIGRlZmF1bHQgdGVtcGxhdGUuCgoyMDA1LTAxLTA2ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjEzMwoKICAgICAgICAqIEFkZGVkIGEgZml4IGZvciBCdWdOYW1lZEFuY2hvcnMgLSB0aGUgc2VjdGlvbiBhbmNob3JzIGFyZSBub3cKICAgICAgICBwcm9wZXJseSBoYW5kbGVkLCBpZiB0aGV5IGNvbnRhaW4gbm9uLVVTQVNDSUkgY2hhcmFjdGVycy4KCjIwMDUtMDEtMDUgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTMyLgoKICAgICAgICAqIE5vdyB0cmFuc21pdHMgdGhlIF9ib2R5IHBhcmFtZXRlciBmcm9tIEZvcm1PdXRwdXQgcGx1Z2luIHRvIHRoZQogICAgICAgIGFjdHVhbCBwbHVnaW4gdGFraW5nIGNhcmUgb2YgdGhlIGZvcm0gc3VibWlzc2lvbi4gIFN1Z2dlc3RlZCBieQogICAgICAgIEpvaG4gVm9sa2FyLgoKMjAwNS0wMS0wNCAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xMzEuCgogICAgICAgICogQWRkZWQgbW9yZSBpbnRlbGxpZ2VuY2Ugc28gdGhhdCA8cD4gdGFncyBkbyBub3QgZW5jbG9zZSBkaXZzLAogICAgICAgIGhycywgYW5kIHByZXMuICBUaGlzIG1ha2VzIG1hbnkgbW9yZSBwYWdlcyB2YWxpZGF0ZSBhcyBYSFRNTC4KICAgICAgICBVbmZvcnR1bmF0ZWx5LCBuZXN0ZWQgbGlzdHMgc3RpbGwgZmFpbCBYSFRNTCB2YWxpZGF0b3IgLSBhbmQgbWFueQogICAgICAgIGJyb3dzZXJzIHJlbmRlciB0aGVtIHdyb25nLCBpZiBpdCdzIGNvbXBsaWFudC4gIEFubm95aW5nLgoKMjAwNS0wMS0wMyAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xMzAuICAoSXQncyBhbWF6aW5nIHdoYXQgeW91IGNhbiBkbyB3aGVuIHlvdSdyZSBvbiBhIGxvbmcKICAgICAgICB0cmFpbiB0cmlwLi4uKQoKICAgICAgICAqIFJld3JvdGUgaGVhZGVyLmpzcCB0byBpbmNsdWRlIHByb3BlciBzY3JpcHRzLCBhbmQgcmVuYW1lZCBpdCB0bwogICAgICAgICJjb21tb25oZWFkZXIuanNwIi4KCiAgICAgICAgKiBNb3ZlZCB0aGUgZGVmYXVsdCBzY3JpcHRzIGZyb20gdGVtcGxhdGVzL2RlZmF1bHQgdG8gL3NjcmlwdHMuCiAgICAgICAgVGhpcyBhbGxvd3MgZWFzaWVyIGFjY2VzcyBmcm9tIGRpZmZlcmVudCB0ZW1wbGF0ZXMuCgogICAgICAgICogUlNTSW1hZ2VMaW5rVGFnIG5vdyBoYXMgcHJvcGVyIGFsdC10YWcuCgogICAgICAgICogVGhlIEluY2x1ZGVUYWcgbm93IGF0dGVtcHRzIHRvIGZpbmQgdGhlIGluY2x1ZGVkIHBhZ2UgZnJvbSB0aGUKICAgICAgICBkZWZhdWx0IHRlbXBsYXRlLCBpZiBpdCBjYW4ndCBmaW5kIGl0IGZyb20gdGhlIGN1cnJlbnQgdGVtcGxhdGUuCiAgICAgICAgVGhpcyBlc3NlbnRpYWxseSBhbGxvd3MgeW91IHRvIGp1c3QgY29weSB0aGUgIlZpZXdUZW1wbGF0ZS5qc3AiCiAgICAgICAgZmlsZSAoYW5kIHRoZSBDU1MgZmlsZXMpIGludG8gYSBuZXcgc3ViZGlyZWN0b3J5IGZvciByZWFsbHkgc2ltcGxlCiAgICAgICAgdGVtcGxhdGluZy4KCiAgICAgICAgKiBUaGUgZGVmYXVsdCB0ZW1wbGF0ZSBub3cgdmFsaWRhdGVzIGFzIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwuCiAgICAgICAgKFRob3VnaCB0aGVyZSBhcmUgc29tZSBwYWdlcyBvbiB3aGljaCB2YWxpZGF0aW9uIHN0aWxsIGZhaWxzLCBtb3N0CiAgICAgICAgbm90YWJseSBUZXh0Rm9ybWF0dGluZ1J1bGVzIC0gd2UncmUgd29ya2luZyBvbiBpdC4uLiA6KQoKICAgICAgICAqIFRyYW5zbGF0b3JSZWFkZXIgbm93IGVtaXRzIGEgbG90IG1vcmUgWEhUTUwtY29tcGF0aWJsZSBjb2RlLgogICAgICAgIFRoZSBwYXJhZ3JhcGggaGFuZGxpbmcgd2FzIGZhdWx0eSBvbiBtYW55IG9jY2FzaW9ucywgbW9zdGx5CiAgICAgICAgcmVzdWx0aW5nIGluIGJsb2NrLWxldmVsIGVsZW1lbnRzIHRvIGJlIHB1dCBpbnNpZGUgcGFyYWdyYXBocyAoYmlnCiAgICAgICAgbm8tbm8pLgoKICAgICAgICAqIFRlbXBsYXRlTWFuYWdlciBub3cgd29ya3MgKHNvcnRhKS4gIEFsbCBKU1AgZmlsZXMgbm93IHVzZSBpdCB0bwogICAgICAgIGZpZ3VyZSBvdXQgaG93IHRlbXBsYXRlcyB3b3JrLiAgVGhpcyBoYXMgdGhlIG5pY2Ugc2lkZSBlZmZlY3QgdGhhdAogICAgICAgIGlmIGEgdGVtcGxhdGUgZmlsZSBpcyBtaXNzaW5nLCBKU1BXaWtpIHdpbGwgdXNlIHRoZSBkZWZhdWx0CiAgICAgICAgdGVtcGxhdGUgZmlsZSBmb3IgdGhhdC4KCjIwMDUtMDEtMDIgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTI5LgoKICAgICAgICAqIEFkZGVkIEVkaXRvclRhZywgd2hpY2ggcmVwbGFjZXMgdGhlIGVudGlyZSA8dGV4dGFyZWE+IC10aGluZ3kKICAgICAgICBmcm9tIEVkaXRDb250ZXQuanNwLiAgSXQncyBzdGlsbCBhIGJpdCBza2VsZXRvbmlzaCwgYW5kIG5lZWRzCiAgICAgICAgdGhpbmdzIGxpa2UgbG9jYWxpemFiaWxpdHkgYW5kIHRoZSBhYmlsaXR5IHRvIGNoYW5nZSBob3cgdGhlCiAgICAgICAgdGV4dGFyZWEgbG9va3MsIGZvciBleGFtcGxlLgoKMjAwNC0xMi0zMSAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogQnVnIGZpeDogVGhlIGludGVybmFsIGNvbnRleHQgaXMgbm93IGNyZWF0ZWQgd2l0aCB0aGUgcHJvcGVyCiAgICAgICAgbmFtZSB3aGVuIHJlZmVycmluZyB0byB1c2luZyBwbHVyYWwgZm9ybXMuCgoyMDA0LTEyLTMxICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogQWRkZWQgYSBzbGlnaHQgZGVsYXkgdG8gTHVjZW5lIHVwZGF0ZSB0aHJlYWQgdG8gbWFrZSBzdXJlIGl0IGlzCiAgICAgICAgbm90IGNvbmZsaWN0aW5nIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN0YXJ0dXAuCgogICAgICAgICogTm93IGNvbXBpbGVzIHVuZGVyIEpESyAxLjUuMCAodGhlcmUncyBhbiBvZGQgZGVwZW5kZW5jeSBJIGRpZG4ndAogICAgICAgIGhhdmUgdGltZSB0byBsb29rIGF0LCBzbyBJIGhhZCB0byBhZGQgIi1zb3VyY2UgMS40IiB0byBidWlsZC54bWwpLgoKMjAwNC0xMi0yOSAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTI4CgogICAgICAgICogV2VibG9nUGx1Z2luIGlzIG5vdyBhbiBJbml0aWFsaXphYmxlUGx1Z2luLgoKICAgICAgICAqIEFkZGVkIHRoZSBJbml0aWFsaXphYmxlUGx1Z2luIGludGVyZmFjZSwgd2hpY2ggY2FuIGJlCiAgICAgICAgaW1wbGVtZW50ZWQgYnkgcGx1Z2lucyBpZiB0aGV5IHJlcXVpcmUgYW55IGNhbGxpbmcgZHVyaW5nIHN0YXJ0dXAuCiAgICAgICAgQnkgZGVmYXVsdCBwbHVnaW5zIGFyZSBub3QgY2FsbGVkIGR1cmluZyBKU1BXaWtpIGluaXQgdG8gbWFrZSBpdCBhCiAgICAgICAgYml0IGZhc3Rlci4KCjIwMDQtMTItMTIgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTI3CgogICAgICAgICogRml4ZWQgSW5kZXhQbHVnaW4gc28gdGhhdCBpdCBubyBsb25nZXIgb3ZlcmZsb3dzIHdpdGggbGFyZ2UgcGFnZQogICAgICAgIG5hbWVzLiAgQSBsb25nLXRpbWUgYW5ub3lhbmNlLCBidXQgc29tZXRoaW5nIGVhc3kgdG8gZG8gb24gYQogICAgICAgIGZsaWdodCB0byBUb2t5by4uLiA6LSkuICBJIGFsc28gYWRkZWQgc29tZSBuZXcgQ1NTIHRvIGhhbmRsZSBob3cKICAgICAgICBpdCBsb29rcyAoYW5kIG1hZGUgdGhlIHdob2xlIHRoaW5nIG91dHB1dCBwcm9wZXIgWEhUTUwgY29kZS4pCgogICAgICAgICogUmVjZW50Q2hhbmdlc1BsdWdpbiAoYW5kIGluY2lkZW50YWxseSwgYWxsIHJlZmVycmVyIHBsdWdpbnMgYXMKICAgICAgICB3ZWxsKSBub3cgaGVlZCBqc3B3aWtpLmJlYXV0aWZ5VGl0bGUuICBQYXRjaCBmcm9tIEZvc3RlciBTY2h1Y2tlcgogICAgICAgICh0aGFua3MhKQoKICAgICAgICAqIERvdWJsZXdob29wcywgZm9yZ290IHRvIGFkZCBhIHByb3BlciBpbXBvcnQgdG8gdGhlIEZvcm1PcGVuLAogICAgICAgIGNhdXNpbmcgYSBjb21waWxhdGlvbiBlcnJvci4gIEFyZyEgIFNvcnJ5LCBldmVyeW9uZSEKCjIwMDQtMTItMTAgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTI2CgogICAgICAgICogV2hvb3BzLCBGb3JtT3BlbiB3YXMgaW4gd3JvbmcgcGFja2FnZS4KCjIwMDQtMTItMDkgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTI1CgogICAgICAgICogQnVnIGZpeDogQWRkcmVzc2luZyBpbnNpZGUgZWRpdG9yIGlzIG5vdyBkb25lIHdpdGggbmFtZXMgaW5zdGVhZAogICAgICAgIG9mIG51bWJlcnMgKG9vcHMsIGEgcmVhbGx5LCByZWFsbHkgb2xkIGZpeG1lIDopLiAgVGhpcyBhbmQgdGhlCiAgICAgICAgb3RoZXIgb25lIHJlcG9ydGVkIChhbmQgcGF0Y2hlZCkgYnkgVWxpIEhlbGxlci4KCiAgICAgICAgKiBCdWcgZml4OiBKYXZhc2NyaXB0IGVycm9yIHdpdGggUHJldmlldy4KCjIwMDQtMTItMDEgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTI0CgogICAgICAgICogU29tZSBzaHVmZmxpbmcgb2YgYXV0aC1yZWxhdGVkIGNsYXNzZXMuLi4KCiAgICAgICAgKiBBZGRlZCBwcm90ZWN0aW9uIGFnYWluc3QgZmF1bHR5IGNvb2tpZXMgdGhhdCBjb3VsZCByZXN1bHQgaW4gYQogICAgICAgIG51bWJlciBvZiB3YXlzLiAgUmVwb3J0ZWQgYnkgbWFueSBwZW9wbGUuICBGaXhlcwogICAgICAgIEJ1Z1VzZXJQcm9maWxlRXJyb3JXaGVuUmV0cmlldmluZ0FDb29raWVXaXRoQW5FbXB0eVVzZXJuYW1lLgoKMjAwNC0xMS0yMyAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xMjMuCgogICAgICAgICogUkNTRmlsZVByb3ZpZGVyIHdvdWxkIHNvbWV0aW1lcyB0aHJvdyBhIE5QRS4gIEZpeGVkLgogICAgICAgIAogICAgICAgICogRml4ZWQgQnVnWFNTVnVsbmVyYWJpbGl0eUluU2VhcmNoLmpzcCBieSBtYWtpbmcgc3VyZSBTZWFyY2guanNwCiAgICAgICAgYXBwbGllcyBlbnRpdHkgcmVwbGFjZW1lbnQgYXQgdGhlIHByb3BlciBwbGFjZS4gIFJlcG9ydGVkIGJ5CiAgICAgICAgSmVyZW15IEJhZS4KCjIwMDQtMTEtMTggIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTIyLgoKICAgICAgICAqIEZpeGVkIHRoZSB3ZWIueG1sIHNlY3VyaXR5IGNvbnN0cmFpbnRzIHRvIHNvbWV0aGluZyBtb3JlIHVzZWZ1bC4KICAgICAgICBTdWdnZXN0ZWQgYnkgQW5kcmV3IEphcXVpdGguCgoyMDA0LTExLTE1ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjEyMS4KCiAgICAgICAgKiBGaXhlZCB0d28gaW5zdGFuY2VzIG9mICImIiBub3QgYmVpbmcgZW5jb2RlZCBwcm9wZXJseSBpbgogICAgICAgIENhbGVuZGFyVGFnLiAgRml4ZXMgYnVnICJCdWdBbXBlcnNhbmROb3RFbmNvZGVkUHJvcGVybHkiLgoKMjAwNC0xMS0xNCAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xMjAKCiAgICAgICAgKiBBZGRlZCBCdWdSZXBvcnRIYW5kbGVyLgoKICAgICAgICAqIEFkZGVkIHRoZSBXaWtpRm9ybXMgc3lzdGVtIGluIHRoZSBDVlMuICBJdCBoYXMgYmVlbiBzbGlnaHRseQogICAgICAgIGNoYW5nZWQgZnJvbSB0aGUgV2lraUZvcm1zIGFzIHN1Ym1pdHRlZCBieSBlYnUuICBEb2N1bWVudGF0aW9uIHRvCiAgICAgICAgZm9sbG93IChpdCdsbCBiZSBmYXN0ZXIgaWYgc29tZW9uZSB2b2x1bnRlZXJzIGl0IDopLgoKICAgICAgICAqIEl0J3Mgbm93IHBvc3NpYmxlIHRvIHVzZSBTRVQgdG8gY29weSB2YXJpYWJsZXMuCiAgICAgICAgW3tTRVQgdmFyMT0neyR2YXIyfSd9XS4gIFN1Z2dlc3RlZCBieSBSZWluaGFyZCBFbmdlbC4KCjIwMDQtMTEtMDkgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTE5CgogICAgICAgICogTm93IHNob3VsZCBjb21waWxlIG9uIEpESyAxLjUuICBUaGFua3MgdG8gRGFuIEpvaG5zb24uCgoyMDA0LTExLTA2ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjExOAoKICAgICAgICAqIEltcHJvdmVkIGF0dGFjaG1lbnQgZXJyb3IgaGFuZGxpbmcgKGNoZWNrIFVwbG9hZFRlbXBsYXRlLmpzcCkKCiAgICAgICAgKiBJdCBpcyBub3cgcG9zc2libGUgdG8gbGltaXQgdGhlIHNpemUgb2YgdGhlIGF0dGFjaG1lbnRzIHRoYXQgYXJlCiAgICAgICAgdXBsb2FkZWQgYnkgdXNpbmcgdGhlICJqc3B3aWtpLmF0dGFjaG1lbnRzLm1heHNpemUiIHByb3BlcnR5LgoKICAgICAgICAqIFRoZSBhdHRhY2htZW50IHNlcnZsZXQgbm93IHVzZXMgdGhlIHdvcmtkaXIgdG8gcHV0IHRlbXBvcmFyeQogICAgICAgIGZpbGVzIGluIGluc3RlYWQgb2YgdGhlIGphdmEuaW8udG1wZGlyLiAgVGhpcyBpcyB0byBmYWNpbGl0YXRlCiAgICAgICAgc29tZSBJU1BzIHdoaWNoIGRvIG5vdCBhbGxvdyB5b3UgdG8gYWNjZXNzIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KICAgICAgICBUaGFua3MgdG8gTWlrZSBMaXBwb2xkLgoKICAgICAgICAqIFJlbW92ZWQgZXh0cmEgcGFyYW1ldGVycyBmcm9tIGpzcHdpa2kudGxkIC0gSSB0aG91Z2h0IEkgaGFkIGRvbmUKICAgICAgICBpdCBzbyBJIGlnbm9yZWQgYnVnIHJlcG9ydHMgYWJvdXQgdGhpcy4gIE9vcHMuICBTb3JyeS4gICpzaGVlcGlzaAogICAgICAgIGdyaW4qLgoKMjAwNC0xMS0wMiAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xMTcKCiAgICAgICAgKiBQYXRjaCBmcm9tIFBhdWwgV2FnbGFuZCB0byBmaXggaXNzdWVzIHdpdGggTHVjZW5lIGFuZAogICAgICAgIENhY2hpbmdQcm92aWRlciAoaXQgd291bGQgbm90IG5vdGljZSBleHRlcm5hbCBtb2RpZmljYXRpb25zIG9mCiAgICAgICAgcGFnZXMpLiAgVGhhbmtzIQoKMjAwNC0xMC0yOCAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xMTYKCiAgICAgICAgKiBBZGRlZCBwYXRjaCB0byBmaXggV2lraURhdGFiYXNlIGluaXRpYWxpemF0aW9uIHByb2JsZW1zLiAgVGhhbmtzCiAgICAgICAgdG8gU3RlZmZlbiBTdHVuZHppZyEKCiAgICAgICAgKiBYTUxSUEMgYW5kIEluc2VydFBhZ2Ugbm93IGFsc28gY2hlY2sgZm9yIHBhZ2UgcGVybWlzc2lvbnMuCiAgICAgICAgU2luY2UgdGhlcmUgaXMgbm8gd2F5IHRvIGRvIFhNTC1SUEMgdXNlciBhdXRoIChhdCB0aGUgbW9tZW50KSwKICAgICAgICBYTUwtUlBDIGFsd2F5cyBhc3N1bWVzIHRoZSB1c2VyIGlzIGEgIkd1ZXN0Ii4KCjIwMDQtMTAtMTQgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTE1CgogICAgICAgICogTmFtZWRHcm91cCBub3cgd29ya3MuICBTb21lIHJlZmFjdG9yaW5nIG9mIExvZ2luLmpzcCB0byBtYWtlIGl0CiAgICAgICAgbW9yZSB1c2FibGUuCgoyMDA0LTEwLTEyICBFcmlrIEJ1bm4gIDxFcmlrLkJ1bm5AbWVtZWNyeS5uZXQ+CgogICAgICAgICogdjIuMS4xMTQKICAgICAgICAKICAgICAgICAqIFJlZmFjdG9yaW5nOiBhZGRlZCBnZXRJbnN0YW5jZShTZXJ2bGV0Q29uZmlnLFByb3BlcnRpZXMpIHRvCiAgICAgICAgcHJvdmlkZSBXaWtpRW5naW5lIHdpdGggZXh0ZXJuYWwgcHJvcGVydHkgc2V0LiBVc2VmdWwgbWFpbmx5IGluCiAgICAgICAgYWRtaW5pc3RyYXRpb24gb2YgbXVsdGlwbGUgd2ViYXBwcyB0aGF0IHVzZSBKU1BXaWtpLgoKMjAwNC0xMC0xMCAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xMTMKCiAgICAgICAgKiBCdWcgZml4OiAzMDQgY2hlY2sgaW4gQXR0YWNobWVudFNlcnZsZXQgd2FzIHdyb25nLiAgUmVwb3J0ZWQgYnkKICAgICAgICBZb2dlc2ggUGF0ZWwuCgoyMDA0LTEwLTA5ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjExMgoKICAgICAgICAqIERldmVsb3BlcnMgYmUgYXdhcmU6IEZpbHRlck1hbmFnZXIgbm93IHRocm93cyBhIGxvdCBtb3JlCiAgICAgICAgZXhjZXB0aW9ucy4uLiAgU28gZG9lcyBXaWtpRW5naW5lLnNhdmVUZXh0KCkuCgogICAgICAgICogVmFyaWFibGVNYW5hZ2VyIG5vdyBhbHNvIG91dHB1dHMgdmFyaWFibGVzIGZyb20gdGhlIEhUVFAgU2Vzc2lvbgogICAgICAgIGFuZCB0aGUgU2VydmxldCBSZXF1ZXN0IFBhcmFtZXRlcnMgKGFzc3VtaW5nIHRoZXkgYXJlIFN0cmluZ3MuKQoKICAgICAgICAqIFZhcmlhYmxlTWFuYWdlciBoYXMgbm93IGEgbmV3IHZhcmlhYmxlOiAkcGFnZWZpbHRlcnMsIHdoaWNoCiAgICAgICAgbGlzdHMgYWxsIHRoZSBmaWx0ZXJzIGN1cnJlbnRseSBpbiB1c2UuCgogICAgICAgICogQWRkZWQgRmlsdGVyRXhjZXB0aW9uIGFuZCBSZWRpcmVjdEV4Y2VwdGlvbi4gIEZpbHRlcnMgY2FuIG5vdwogICAgICAgIHRocm93IGEgUmVkaXJlY3RFeGNlcHRpb24gdXBvbiBwcmVTYXZlKCkgYW5kIHBvc3RTYXZlKCkgdG8gY2hhbmdlCiAgICAgICAgdGhlIHBsYWNlIHRvIHdoaWNoIHRoZSB1c2VyIGlzIHJlZGlyZWN0ZWQgYWZ0ZXIgYW4gZWRpdC4gIEFsc28KICAgICAgICBjaGFuZ2VkIHRoZSBQYWdlRmlsdGVyIGludGVyZmFjZSB0byBtYXRjaC4KCiAgICAgICAgKiBBZGRlZCBTcGFtRmlsdGVyCgoyMDA0LTA5LTI1ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjExMQoKICAgICAgICAqIEFkZGVkIFRhYmxlT2ZDb250ZW50cyBwbHVnaW4uCgogICAgICAgICogTm93IHJlY29nbml6ZXMgYWxsIG9mZmljaWFsIElBTkEgVVJJIHR5cGVzIGNvcnJlY3RseSBhcwogICAgICAgIGV4dGVybmFsIGxpbmtzLgoKMjAwNC0wOS0yNCAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xMTAKCiAgICAgICAgKiBBZGRlZCB0aGUgSlNQV2lraSBsb2dvIHRvIHRoZSBkZWZhdWx0IGRpc3RyaWJ1dGlvbi4KCiAgICAgICAgKiBSZXdvcmtlZCB0aGUgZGVmYXVsdCB0ZW1wbGF0ZSBhIGJpdCAtIHRoZXJlIHdlcmUgc29tZSBicmFpbmZhcnRzCiAgICAgICAgaW4gaXQsIGNhdXNpbmcgaXQgdG8gZmFpbCBvbiBtb3JlIHBpY2t5IGJyb3dzZXJzIGxpa2UgU2FmYXJpLgoKICAgICAgICAqIFJlZmVyZW5jZU1hbmFnZXIgc2VyaWFsaXphdGlvbiBpcyBub3cgc2xpZ2h0bHkgZmFzdGVyLgoKMjAwNC0wOS0xOSAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTA5CgogICAgICAgICogUkNTRmlsZVByb3ZpZGVyIG5vdyBzZXRzIHRoZSBzaXplcyB3aGVuIGFza2VkIGZvciBwYWdlIGhpc3RvcnksCiAgICAgICAgbWFraW5nIGl0IGEgbG90IGZhc3Rlci4KCiAgICAgICAgKiBNb3ZlZCBnZXQvc2V0U2l6ZSgpIHRvIFdpa2lQYWdlLgoKICAgICAgICAqIHYyLjEuMTA4CgogICAgICAgICogQ2FjaGluZ1Byb3ZpZGVyIG5vdyBhbHNvIGNhY2hlcyBwYWdlIGhpc3RvcnkuICBUaGlzIGhlbHBzIHRoZQogICAgICAgIGhpc3RvcnkgZ2VuZXJhdGlvbiBmcm9tIHRoZSByZWFsbHkgc2xvdyBwcm92aWRlcnMgbGlrZQogICAgICAgIFJDU1Byb3ZpZGVyLgoKICAgICAgICAqIFJlZmVyZW5jZU1hbmFnZXIgbm93IHNlcmlhbGl6ZXMgaXRzIHN0YXR1cyBvbiBkaXNrIGF0IGV2ZXJ5CiAgICAgICAgc2F2ZSwgYW5kIHJldHVybnMgaXQgYXQgc3RhcnR1cC4gIFRoaXMgcHJvdmlkZXMgKnNpZ25pZmljYW50KgogICAgICAgIHNwZWVkdXAgYXQgSlNQV2lraSBzdGFydC4KCjIwMDQtMDgtMzAgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTA3CgogICAgICAgICogT29mLi4uIEFwcGFyZW50bHkgamF2YS5uZXQuVVJMRW5jb2RlciAqZG9lcyogdXNlIHRoZSBkZWZhdWx0CiAgICAgICAgcGxhdGZvcm0gZW5jb2RpbmcuICBGaXhlZCBpdCB0byB1c2UgZWl0aGVyIFVURi04IG9yIElTTy04ODU5LTEgdG8KICAgICAgICBtYWtlIGFsbCBzY2FuZGljIHRlc3RzIGFsc28gcnVuIG9uIE9TWCAod2hpY2ggZGVmYXVsdHMgdG8gTWFjCiAgICAgICAgUm9tYW4sIGR1aCkuICBBbHNvIGZpeGVkIHRoZSB0ZXN0cyBzbyB0aGF0IHRoZXkgYXJlIG5vdyBmdWxsCiAgICAgICAgVVMtQVNDSUkgaW5zdGVhZCBvZiBMYXRpbi0xLgoKMjAwNC0wOC0wNSAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xMDYuCgogICAgICAgICogQWRkZWQgZG9jdW1lbnRhdGlvbiBmb3IgV2VibG9nUGx1Z2luIGFuZCBXZWJsb2dFbnRyeVBsdWdpbi4KCiAgICAgICAgKiBQbHVnaW5UYWcgbm93IGFsc28gYWNjZXB0cyBib2R5IGNvbnRlbnQsIHdoaWNoIGdldHMgdHJhbnNsYXRlZAogICAgICAgIHRvIHRoZSAiX2JvZHkiIGNvbnRlbnQgb2YgdGhlIHBsdWdpbi4gIFRoYW5rcyB0byBGb3N0ZXIgU2NodWNrZXIKICAgICAgICBmb3IgdGhlIGluaXRpYWwgY29kZS4KCjIwMDQtMDgtMDMgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMTA1CgogICAgICAgICogQWRkZWQgS2lsbGVyJ3MgcGF0Y2ggZm9yIEJhc2ljQXR0YWNobWVudFByb3ZpZGVyIC0gaXQgbm93CiAgICAgICAgYWN0dWFsbHkgZGVsZXRlcyBhdHRhY2htZW50cy4KCjIwMDQtMDctMTYgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjEwNAoKICAgICAgICAqIERlZmF1bHRQZXJtaXNzaW9ucyBub3cgaGFzIGEgdmFyaWFibGU6ICJkZWZhdWx0cGVybWlzc2lvbnMiLAogICAgICAgIHdoaWNoIGlzIHVzZWQgdG8gcmVhZCB0aGUgcGVybWlzc2lvbnMgaW4uICBUaGUgcGVybWlzc2lvbnMgb2YgdGhlCiAgICAgICAgYWN0dWFsIHBhZ2UgIkRlZmF1bHRQZXJtaXNzaW9ucyIsIGFuZCB0aGUgYWN0dWFsIGRlZmF1bHQKICAgICAgICBwZXJtaXNzaW9ucyBhcmUgbm93IHRodXMgc2VwYXJhdGUuICBTZWUgdGhlIERlZmF1bHRQZXJtaXNzaW9ucwogICAgICAgIHBhZ2UgaW4gdGhlIGRpc3RyaWJ1dGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCiAgICAgICAgKiBBZGRlZCBzZXQvZ2V0TG9naW5OYW1lKCkgdG8gVXNlclByb2ZpbGUuCgogICAgICAgICogQWRkZWQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHRocmVlIG5ldyB0YWdzLgoKMjAwNC0wNi0yNyAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xMDMKCiAgICAgICAgKiBNYWpvciBhZGRpdGlvbnMgdG8gRmluZENvbnRlbnQuanNwIC0gZ290IHJpZCBvZiBtb3N0IG9mIHRoZQogICAgICAgIHNjcmlwdGxldHMuICBBZGRlZCB0aHJlZSBuZXcgdGFncyB0byB0aGUgc291cCBhcyB3ZWxsLCBzbyB5b3UKICAgICAgICBjYW4gbm93IHdyaXRlIGFyb3VuZCB5b3VyIHNlYXJjaHN0dWZmIHdpdGggdGhvc2UuICBJdCBpcyByZW1vdGVseQogICAgICAgIHBvc3NpYmxlIHRoYXQgb2xkIHNlYXJjaCBjb2RlIGJyZWFrcyBub3cuCgogICAgICAgICogdjIuMS4xMDIKCiAgICAgICAgKiBBZGRlZCBlYnUncyBwYXRjaCBhZ2FpbnN0IE5QRXMgaW4gVXNlck1hbmFnZXIuCgoyMDA0LTA2LTEzICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjEwMQoKICAgICAgICAqIEFkZGVkICJkZWJ1ZyIgcGFyYW1ldGVyIHRvIGFsbCBwbHVnaW5zLiAgVGhpcyBpcyByZWNvZ25pemVkIGJ5CiAgICAgICAgdGhlIEpTUFdpa2kgZW5naW5lIGl0c2VsZiwgYW5kIGlmIHRoZSBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIGFzCiAgICAgICAgInRydWUiLCBKU1BXaWtpIHdpbGwgYXV0b21hdGljYWxseSBvdXRwdXQgYWxsIHBhcmFtZXRlcnMgYW5kIHRoZQogICAgICAgIHN0YWNrIHRyYWNlIHRvIHRoZSBwYWdlIGl0c2VsZiwgaWYgdGhlcmUgaXMgYW4gZXhjZXB0aW9uLgogICAgICAgIFN1Z2dlc3RlZCBieSBGb3N0ZXIgU2NodWNrZXIuCgoyMDA0LTA2LTEwICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xMDAKICAgICAgICAKICAgICAgICAqIEFsbCBXaWtpUHJvdmlkZXJzIG5vdyB0YWtlIFdpa2lFbmdpbmUgYXMgb25lIG9mIHRoZSBhcmd1bWVudHMgdG8KICAgICAgICB0aGUgY29uc3RydWN0b3IuICBJJ20gc29ycnksIGJ1dCB0aGlzIGRvZXMgYnJlYWsgYWxsIDNyZCBwYXJ0eQogICAgICAgIHByb3ZpZGVycy4uLiBUaGUgY2hhbmdlIGlzIHJlYWxseSBzaW1wbGUsIHRob3VnaDsgYW5kIGZvciBnb29kCiAgICAgICAgcmVhc29uLgoKICAgICAgICAqIEFkZGVkIG5ldyBwcm9wZXJ0eToganNwd2lraS53b3JrRGlyLiAgVGhpcyBpcyB1c2VkIGluIHRoZSBmdXR1cmUKICAgICAgICBmb3IgYWxsIGtpbmRzIG9mIGNhY2hpbmcgYW5kIG90aGVyIGV2ZW50cy4gIEF0IHRoZSBtb21lbnQsIG9ubHkKICAgICAgICBMdWNlbmUgdXNlcyBpdC4KCiAgICAgICAgKiBJbmNsdWRlZCBNYWhsZW4gTW9ycmlzJyBwYXRjaCBmb3IgQXBhY2hlIEx1Y2VuZSAtZW5hYmxlZCBzZWFyY2guCiAgICAgICAgSXQncyBGQUFBU1QuICBUaGFua3MhCgogICAgICAgICogQnVnIGZpeDogRGlyZWN0IFVSSXMgaW4gdGV4dCB3b3VsZCBjYXVzZSBhIGZhaWx1cmUsIGlmIHRoZXkKICAgICAgICBjb250YWluZWQgd2lraW1hcmt1cC4KCjIwMDQtMDYtMDMgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIENvcnJlY3RlZCBEVEQgVVJJIGluIHdlYi54bWwuICBUaGFua3MgdG8gTGFuY2UgQmFkZXIuCgoyMDA0LTA2LTAzICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQGVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjk5LgoKICAgICAgICAqIEZpeGVkIGEgbG9uZy1zdGFuZGluZyBwcm9ibGVtIHdpdGggaHlwZXJsaW5rcyBpbnNpZGUgaGVhZGVycwogICAgICAgIGNhdXNpbmcgc3RyYW5nZSBiZWhhdmlvdXIgd2l0aCBnZW5lcmF0ZWQgc2VjdGlvbiBuYW1lcy4gIFJlcG9ydGVkCiAgICAgICAgYnkgRm9zdGVyIFNjaHVja2VyLgoKMjAwNC0wNS0xNiAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBlY3lyZC5jb20+CgogICAgICAgICogdjIuMS45OC4KCiAgICAgICAgKiBSZW1vdmVkIGFsbCBIVE1MIGdlbmVyYXRpb24gZnJvbSBUcmFuc2xhdG9yUmVhZGVyIGludG8KICAgICAgICBIVE1MUmVuZGVyZXIsIGFuZCBhZGRlZCBUZXh0UmVuZGVyZXIuCgoyMDA0LTA1LTE0ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS45Ny4KCiAgICAgICAgKiBBZGRlZCBwcmVsaW1pbmFyeSBzdXBwb3J0IGZvciB0aGUgQXRvbSBibG9nIEFQSS4gIEl0IHN0aWxsIGRvZXMKICAgICAgICBub3QgeWV0IGNvbXBsZXRlbHkgd29yaywgaG93ZXZlci4KCjIwMDQtMDUtMTMgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiBEZW5vdW5jZSBwbHVnaW4gbm8gbG9uZ2VyIGZhaWxzIG9uIG51bGwgdXNlci1hZ2VudC4KCiAgICAgICAgKiB2Mi4xLjk2LgoKICAgICAgICAqIEFkZGVkIG5ldyBGZWVkRGlzY292ZXJ5VGFnLCBkZXByZWNhdGVkIFJTU0xpbmtUYWcuCgogICAgICAgICogQWRkZWQgYXRvbS5qc3AgdG8gc3VwcG9ydCB0aGUgMC4zIHZlcnNpb24gb2YgQXRvbS4gIFRoZSBBdG9tCiAgICAgICAgZmVlZCBhdHRlbXB0cyB0byBmaWd1cmUgb3V0IHRoZSBibG9nIG5hbWUgZnJvbSBhIHBhZ2UgdmFyaWFibGUKICAgICAgICBjYWxsZWQgImJsb2duYW1lIi4KCjIwMDQtMDUtMDMgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5AZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuOTUuCgogICAgICAgICogSW1wbGVtZW50ZWQgcmVzdCBvZiB0aGUgTWV0YVdlYmxvZ0FQSSByb3V0aW5lcy4gIFRoZXkgYXJlCiAgICAgICAgY29tcGxldGVseSB1bnRlc3RlZCB5ZXQuCgoyMDA0LTA0LTA5ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS45NC4KCiAgICAgICAgKiBOb3cgZGVmYXVsdCB0ZW1wbGF0ZSBsaW5rcyB0byBqc3B3aWtpLm9yZyBFZGl0UGFnZUhlbHAgaW4gY2FzZQogICAgICAgIHRoZSBwYWdlIGlzIG1pc3NpbmcuICBTdWdnZXN0ZWQgYnkgU2ViYXN0aWFuUGV0emVsYmVyZ2VyLgoKMjAwNC0wMy0zMSAgRXJpayBCdW5uICA8ZWJ1QHNwYW1pY2lkZS5iYXNlbi5uZXQ+CgogICAgICAgICogdjIuMS45MwogICAgICAgIAogICAgICAgICogTW9kaWZpZWQgVXNlck1hbmFnZXIsIFVzZXJEYXRhYmFzZSwgV2lraURhdGFiYXNlOiBVc2VyUHJvZmlsZQogICAgICAgIG9iamVjdHMgYXJlIG5vdyB1bHRpbWF0ZWx5IHByb2R1Y2VkIGJ5IHRoZSBVc2VyRGF0YWJhc2UgaW1wbGVtZW50YXRpb24uCiAgICAgICAgQnkgcGx1Z2dpbmcgaW4gYSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb24sIHlvdSBjYW4gZS5nLiBjb25zdHJ1Y3QgdXNlcnMKICAgICAgICBmcm9tIGEgZGF0YWJhc2UuCgoyMDA0LTAxLTIxICBFcmlrIEJ1bm4gIDxlYnVAc3BhbWljaWRlLmJhc2VuLm5ldD4KCgkqIHYyLjEuOTIKCgkqIE1vZGlmaWVkIGFsbCBJdGVyYXRvclRhZyBjbGFzc2VzIHRvIHVzZSBXaWtpQ29udGV4dC5jbG9uZSgpCglpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IG9uZS4gVGhpcyBwcmVzZXJ2ZXMgdGhlIGNvbnRleHQgaW5mby4KCjIwMDQtMDEtMTUgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjkxLgoKICAgICAgICAqIFBsdWdpbiBlcnJvcnMgYXJlIG5vdyBsb2dnZWQgYXMgSU5GTyBsZXZlbCBmb3IgY29udmluaWVuY2UuCiAgICAgICAgR2V0dGluZyBhIHppbGxpb24gZW1haWxzIGV2ZXJ5IHRpbWUgc29tZW9uZSBtaXN0eXBlcyBhIHBsdWdpbiBuYW1lCiAgICAgICAgaXMgTk9UIGdvb2QuCgoyMDA0LTAxLTEzICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS45MC4KCjIwMDQtMDEtMTIgIEVyaWsgQnVubiAgPGVidUBzcGFtaWNpZGUuYmFzZW4ubmV0PgoKCSogQWRkZWQgVXNlck1hbmFnZXIuZ2V0VXNlckRhdGFiYXNlKCksIGdldEF1dGhlbnRpY2F0b3IoKS4KCVRoZXNlIGFyZSB1c2VmdWwgZm9yIGV4dGVybmFsIHVzZXIgcHJvdmlkZXJzLgoKCSogQWRkZWQgV2lraUdyb3VwLmNsZWFyTWVtYmVycygpLiAKCjIwMDMtMTItMDQgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjg5LgoKICAgICAgICAqIE1hZGUgV2lraURhdGFiYXNlLmluaXREYXRhQmFzZSgpIGFuZCBXaWtpRGF0YWJhc2UudXBkYXRlR3JvdXAoKQogICAgICAgIHByb3RlY3RlZCBhdCBLaWxsZXIncyByZXF1ZXN0LiAKCjIwMDMtMTEtMjIgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjg4LgoKICAgICAgICAqIEltcGxlbWVudGVkIGEgY29tcGxldGVseSBuZXcgUGFnZUZpbHRlciBpbml0aWFsaXphdGlvbgogICAgICAgIHN5c3RlbS4gUGxlYXNlIHNlZSB0aGUgbmV3IFBhZ2VGaWx0ZXJzIHBhZ2UgaW4gdGhlIGRvY3VtZW50YXRpb24uCiAgICAgICAgTkI6IFRoZSBGaWx0ZXIgaW50ZXJmYWNlIGRpZCBub3QgY2hhbmdlLCBidXQgYW55IHNldHVwCiAgICAgICAgaW5zdHJ1Y3Rpb25zIGRpZC4KCjIwMDMtMTEtMDcgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjg3LgoKICAgICAgICAqIENoYW5nZWQgdGhlIGRlZmF1bHQgdGVtcGxhdGUgdG8gaGF2ZSBhIGJldHRlciBzdHJ1Y3R1cmUgdy8KICAgICAgICByZXNwZWN0IHRvIHRoZSBjc3NpbmNsdWRlLmpzIHNjcmlwdC4KCjIwMDMtMTEtMDYgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjg2LgoKICAgICAgICAqIEFkZGVkIHRoZSAic2VjdGlvbiIgcGFyYW1ldGVyIHRvIEluc2VydFBhZ2UgcGx1Z2luLiAgUmVxdWVzdGVkCiAgICAgICAgYnkgSm9obiBWb2xrYXIuCgoyMDAzLTEwLTIwICBFcmlrIEJ1bm4gIDxlYnVAc3BhbWljaWRlLmJhc2VuLm5ldD4KCiAgICAgICAgKiB2Mi4xLjg1CiAgICAgICAgCiAgICAgICAgKiBBZGRlZCBDcmVhdGVQZXJtaXNzaW9uLCBhbmQgc3VwcG9ydCBmb3IgaXQgaW4gV2lraVBlcm1pc3Npb24sCiAgICAgICAgRWRpdC5qc3AuCgogICAgICAgICogTW9kaWZpZWQgTG9naW4uanNwIGZ1bmN0aW9uYWxpdHkgc2xpZ2h0bHksIHRvIHN1cHBvcnQgYSAnbXNnJwogICAgICAgIGNvbnRleHQgdmFyaWFibGUgZm9yIGRpc3BsYXlpbmcgYSBmcmllbmRseSBtZXNzYWdlLiAoVGhpcyBjb3VsZAogICAgICAgIGJlIGNoYW5nZWQgdG8gaW5jbHVkZSBhIFdpa2lQYWdlLCBwZXJoYXBzLikKCjIwMDMtMTAtMTkgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjg0LgoKICAgICAgICAqIFJlbW92ZWQgdGhlIHVudXNlZCAiY29tbWVudCIgcGFyYW1ldGVyIGZyb20gRWRpdC5qc3AsIHNpbmNlIHdlCiAgICAgICAgbm93IGhhdmUgdGhlICJDb21tZW50LmpzcCIgZm9yIHRoYXQga2luZCBvZiBzdHVmZi4KCiAgICAgICAgKiBTYXZpbmcgZnJvbSBwcmV2aWV3IHBhZ2Ugd29ya3Mgbm93LiAgQWxzbywgYWRkZWQgYSBsaW5rIGZvcgogICAgICAgICJrZWVwIGVkaXRpbmciIGFuZCAiY2FuY2VsIiBzbyB0aGF0IGl0J3MgbW9yZSB1c2VyLWZyaWVuZGx5IG5vdy4KICAgICAgICBOb3RlIHRoYXQgdGhleSB0aGUgY29udGVudCBwcmV2aWV3ICJTYXZlIiBpcyBhIENTUyBoYWNrLCBhbmQgdGhlCiAgICAgICAgY29udGVudCBwcmV2aWV3ICJLZWVwIGVkaXRpbmciIGlzIGEgSmF2YXNjcmlwdCBoYWNrLCBzbyB0aGV5IG1pZ2h0CiAgICAgICAgbm90IGFsd2F5cyB3b3JrLiAgVGhlIG1vZGlmaWNhdGlvbnMgcmVxdWlyZWQgb25seSBjaGFuZ2VzIHRvIHRoZQogICAgICAgICJkZWZhdWx0IiB0ZW1wbGF0ZSwgc28gYW55b25lIHdobyBoYXMgdGhlaXIgb3duIHRlbXBsYXRlIG5lZWRzIHRvCiAgICAgICAgY2hlY2sgb3V0IGhvdyBpdCdzIGRvbmUuCgogICAgICAgICogdjIuMS44My4KCiAgICAgICAgKiBBbGwgcGx1Z2lucyB1c2Ugbm93IGxvZzRqIExvZ2dlciBpbnN0ZWFkIG9mIENhdGVnb3J5LgoKICAgICAgICAqIEFkZGVkIFdlYmxvZ0FyY2hpdmVQbHVnaW4uCgoyMDAzLTEwLTE1ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS44Mi4KCiAgICAgICAgKiBUZW50YXRpdmUgY2hhbmdlcyBpbiBDYWNoaW5nUHJvdmlkZXIgdG8gc29sdmUgdGhlICJleHRlcm5hbGx5CiAgICAgICAgbW9kaWZpZWQgcmVwb3NpdG9yeSItcHJvYmxlbS4KCiAgICAgICAgKiB2Mi4xLjgxLgoKICAgICAgICAqIFNvbWUgdGlueSByZWZhY3RvcmluZyBvZiB0aGUgVHJhbnNsYXRvclJlYWRlcjsgYWxzbyBlbmhhbmNlZAogICAgICAgIFdpa2lFbmdpbmUgamF2YWRvY3MgYSBiaXQuCgogICAgICAgICogU21hbGwgZml4IHRvIGRlYWwgd2l0aCBuYW1lZCBhbmNob3IgbGlua3MgKHRoZXkgYWNjaWRlbnRhbGx5CiAgICAgICAgZW5jb2RlZCB0aGUgJyMnIGFzIHdlbGwuKSAKCjIwMDMtMTAtMTQgIEVyaWsgQnVubiA8ZWJ1IGF0IGlraSBkb3QgZmk+CgogICAgICAgICogdjIuMS44MAoJIAkKICAgICAgICAqIE1vZGlmaWVkIFZhcmlhYmxlTWFuYWdlciBhbmQgVmFyaWFibGVUYWc6IHRoZXkgbm93IHNlYXJjaCBmb3IKICAgICAgICBwYWdlIG1ldGFkYXRhIGFmdGVyIGV2ZXJ5dGhpbmcgZWxzZSBmYWlscy4gVXNpbmcgdGhlIFt7U0VUCiAgICAgICAgZm9vPSJiYXIifV0gc3ludGF4IG9uIGEgV2lraVBhZ2UsIHlvdSBjYW4gZXhhbWluZSB0aGUgdmFyaWFibGUKICAgICAgICB3aXRoIFt7JGZvb31dIG9uIHRoZSBwYWdlLCBvciB1c2luZyB0aGUgVmFyaWFibGUgdGFnIGluIHlvdXIKICAgICAgICB0ZW1wbGF0ZXMuCgoyMDAzLTEwLTEzICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS43OS4KCiAgICAgICAgKiBJbmNvcnBvcmF0ZWQgbXVsdGlwbHkgbmVzdGVkIGxpc3QgcGF0Y2ggZnJvbSBNdXJyYXlHLiAgVGhhbmtzIQoKMjAwMy0xMC0xMCAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuNzguCgogICAgICAgICogSGVhZGluZ3Mgbm93IGdlbmVyYXRlIGEgbmFtZWQgYW5jaG9yLiAgVGhpcyBlbmFibGVzIHRoaW5ncyBsaWtlCiAgICAgICAgcGFnZSBjb250ZW50cy4gIFRoZSBjdXJyZW50IHNjaGVtZSBpcwogICAgICAgICcjc2VjdGlvbi08cGFnZW5hbWU+LTxoZWFkaW5nPicsIHdoZXJlIGJvdGggdGhlIDxwYWdlbmFtZT4gYW5kCiAgICAgICAgPGhlYWRpbmc+IGFyZSBXaWtpTmFtZXMuICBUaGUgV2lraU5hbWUgb2YgdGhlIGhlYWRpbmcgaXMgZG9uZSBpbgogICAgICAgIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIHdpdGggbm9ybWFsIFdpa2lQYWdlcy4gIEZvciBtb3JlCiAgICAgICAgaW5mb3JtYXRpb24sIHNlZSBOYW1lZEhlYWRpbmdzIGluIHRoZSBqc3B3aWtpX3NhbXBsZXBhZ2VzLnppcC4KICAgICAgICBTdWdnZXN0ZWQgYnkgUGF1bCBEb3duZXMuCgoyMDAzLTEwLTEwICAgRXJpayBCdW5uIDxlYnUgYXQgaWtpIGRvdCBmaT4KCiAgICAgICAgKiB2Mi4xLjc3CgogICAgICAgICogTW9kaWZpZWQgQ2FjaGluZ1Byb3ZpZGVyIHRvIG5vdGlmeSBlbmdpbmUgb2YgZXh0ZXJuYWwgY2hhbmdlcwogICAgICAgIHRvIHdpa2lwYWdlcy4gRml4ZWQgdGVzdHM7IGV4dGVybmFsIG1vZGlmaWNhdGlvbiB0ZXN0cyBzaG91bGQgbm93CiAgICAgICAgd29yay4KCjIwMDMtMTAtMDYgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjc2LgoKICAgICAgICAqIEltcGxlbWVudGVkIGRlbGV0ZVZlcnNpb24oKSBmb3IgVmVyc2lvbmluZ0ZpbGVQcm92aWRlci4KICAgICAgICBIb3dldmVyLCB0aGVyZSdzIHN0aWxsIGEgY3JpdGljYWwgYnVnIGluIGl0LgoKICAgICAgICAqIEFkZGVkIGJ1aWx0LWluIHByb3BlcnRpZXMgc28gdGhhdCBjZXJ0YWluIHNldHRpbmdzIGNhbiBhbHNvIGJlCiAgICAgICAgZmV0Y2hlZCBpbnRlcm5hbGx5LgoKICAgICAgICAqIEFkZGVkICJyZWRpcmVjdCIgY2FwYWNpdHk6IEFueSBwYWdlIGNhbiBjb250YWluIG5vdyBhIAogICAgICAgIFt7U0VUIHJlZGlyZWN0PWh0dHA6Ly9mb28uYmFyLmNvbX1dIGFuZCBhdXRvbWF0aWNhbGx5IGJlCiAgICAgICAgcmVkaXJlY3RlZCB0byBhbnl3aGVyZS4gIFRoaXMgZXNzZW50aWFsbHkgZHVwbGljYXRlcyB0aGUKICAgICAgICBmdW5jdGlvbmFsaXR5IG9mICJqc3B3aWtpLnNwZWNpYWxQYWdlIiAtc2V0dGluZywgYnV0IGluIGFuCiAgICAgICAgdXNlci1jb250cm9sbGFibGUgbWFubmVyLgoKICAgICAgICAqIEFkZGVkICJhbGlhcyIgY2FwYWNpdHk6IHlvdSBjYW4gbm93IHB1dCBhIFt7U0VUIGFsaWFzPVBhZ2VOYW1lfV0KICAgICAgICBvbiBhIHBhZ2UgYW5kIGl0IHdpbGwgYmUgcmVkaXJlY3RlZCBvbiB2aWV3IHRvIHNvbWUgb3RoZXIgcGFnZS4KCjIwMDMtMTAtMDEgIEVyaWsgQnVubiAgPGVidSBhdCBpa2kgZG90IGZpPgoKICAgICAgICAqIE1vZGlmaWVkIFdpa2lEYXRhYmFzZTogcmVtb3ZlZCBoYXJkLWNvZGluZyBvZiAnbWVtYmVycycgYXR0ciBuYW1lLAogICAgICAgIGZpeGVkIF9tZW1iZXJzIHRvIG1lbWJlcnMuCiAgICAgICAgCiAgICAgICAgKiBNb2RpZmllZCBBdXRob3JpemF0aW9uTWFuYWdlcjoganNwd2lraS5hdXRob3JpemVyIHByb3BlcnR5IG5vIGxvbmdlcgogICAgICAgIHJlcXVpcmVkLCB1c2VzIFBhZ2VBdXRob3JpemVyIGJ5IGRlZmF1bHQuCiAgICAgICAgCiAgICAgICAgKiBNb3ZlZCBQYWdlQXV0aG9yaXplciB0byBjb20uZWN5cmQuanNwd2lraS5hdXRoLm1vZHVsZXMuCgoyMDAzLTEwLTAxICBFcmlrIEJ1bm4gIDxlYnUgYXQgaWtpIGRvdCBmaT4KCiAgICAgICAgKiB2Mi4xLjc1CgogICAgICAgICogTW9kaWZpZWQgb3JkZXIgb2YgVXNlck1hbmFnZXIgYW5kIFJlZmVyZW5jZU1hbmFnZXIKICAgICAgICBpbml0IGluIFdpa2lFbmdpbmUuaW5pdGlhbGl6ZSgpLiBUaGlzIHdhcyByZWxldmFudCB0bwogICAgICAgIGN1c3RvbSBtYW5hZ2VyIGltcGxlbWVudGF0aW9ucy4KCiAgICAgICAgKiBNb2RpZmllZCBBdXRob3JpemF0aW9uTWFuYWdlciB0byBsb29rIGZvciBwcm9wZXJ0eQogICAgICAgIGpzcHdpa2kuYXV0aG9yaXplciBhbmQgbG9hZCBhIFdpa2lBdXRob3JpemVyIGR5bmFtaWNhbGx5LgoKMjAwMy0wOS0yOSAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuNzQuCgogICAgICAgICogQnVnIGZpeDogUkNTRmlsZVByb3ZpZGVyIHdvdWxkIGVycm9uZXVzbHkgcmVwb3J0IGZldGNoaW5nIGFzCiAgICAgICAgZmFpbGVkIGluIGNlcnRhaW4gcmFyZSBjb25kaXRpb25zLgoKICAgICAgICAqIFJlZmVyZW5jZU1hbmFnZXIgbm93IGtlZXBzIGl0cyBsaXN0cyBzb3J0ZWQuICBUaGlzIGhhcyB0aGUKICAgICAgICBlZmZlY3Qgb2YgaGF2aW5nIGJhY2tsaW5rIGxpc3RzIChyZWZlcnJlZC1ieSksIFVucmVmZXJlbmNlZCBwYWdlcywKICAgICAgICBldGMuICBzb3J0ZWQgYXMgd2VsbC4gIFJlcXVlc3RlZCBieSBKb2huIFZvbGthci4KCiAgICAgICAgKiBGaXhlZCBwcm9ibGVtIHdpdGggcGxhaW4gc3R5bGUgVVJJcyBub3QgYmVpbmcgdGVybWluYXRlZCBhdAogICAgICAgIEVPTC4KCjIwMDMtMDktMjggIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjczLgoKICAgICAgICAqIFJDU0ZpbGVQcm92aWRlciBhbmQgRmlsZVN5c3RlbVByb3ZpZGVyIG5vdyBzdXBwb3J0IHBhZ2UKICAgICAgICBkZWxldGlvbi4gIFRoZSB0b3AtbGV2ZWwgbWFuYWdlbWVudCBpbnRlcmZhY2UgaXMgc3RpbGwgbWlzc2luZywKICAgICAgICB0aG91Z2guCgoyMDAzLTA5LTI3ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS43Mi4KCiAgICAgICAgKiBBZGRlZCBUZW1wbGF0ZU1hbmFnZXIuCgogICAgICAgICogQWRtaW5pc3RyYXRvcnMgbm93IG5lZWQgdG8gYmUgYXV0aGVudGljYXRlZCAoZHVoKS4KCiAgICAgICAgKiBGaXhlZCBncm91cCBmb3JtYXRpb247IGl0IGlzIHN0aWxsIGEgYml0IGNsdW5reSBidXQgaXQgd29ya3Mgbm93LgoKMjAwMy0wOS0yMiAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIGFudCBqYXZhZG9jIG5vdyBjcmVhdGVzIHVzYWdlIGluZm9ybWF0aW9uIGFzIHdlbGwuCgoyMDAzLTA5LTE4ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS43MS4KCiAgICAgICAgKiBPb3BzLCB1c2luZyBjb250YWluZXItYmFzZWQgYXV0aGVudGljYXRpb24gZ290IHlvdSBpbiB3cm9uZwogICAgICAgIGdyb3Vwcy4gRml4ZWQuCgogICAgICAgICogQWRkZWQgcGVybWlzc2lvbiBjaGVja2luZyBmb3IgYXR0YWNobWVudHMgYXMgd2VsbC4gIE5ldwogICAgICAgIHBlcm1pc3Npb24gY2FsbGVkICJ1cGxvYWQiLgoKICAgICAgICAqIEF0dGFjaG1lbnQgaW1hZ2UgVVJMIG5vdyB1c2VzIGJhc2VVUkwuICBSZXBvcnRlZCBieSBOaWlsbyBOZXV2by4KCjIwMDMtMDktMTQgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjcwLgoKICAgICAgICAqIEFkZGVkIHZhcmlhYmxlICJyZXF1ZXN0Y29udGV4dCIuICBSZXF1ZXN0ZWQgYnkgRnJhbmNvaXMgUGFybGFudC4KCiAgICAgICAgKiBTbGlnaHQgY2hhbmdlcyB0byBhdXRoIGNvZGU7IGF1dGhlbnRpY2F0aW9uIHZpYSBjb29raWUgbm8gbG9uZ2VyCiAgICAgICAgY29uc2lkZXJlZCB0cnVzdHdvcnRoeSA9KS4gCgogICAgICAgICogRml4ZWQgc29tZSBmYWlsaW5nIGF1dGggdGVzdHMuCgogICAgICAgICogdjIuMS42OS4KCiAgICAgICAgKiBIb3BlZnVsbHkgZmluYWxseSBmaXhlZCBwcm9ibGVtcyB3aXRoIFJlZk1nciBhbmQgZW5nbGlzaAogICAgICAgIHBsdXJhbHMuIAoKMjAwMy0wOS0wOSAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuNjguCgogICAgICAgICogQWRkZWQgdGhlIHByaW50IHN0eWxlc2hlZXQgZnJvbSBQaGlsaXAgdmFuIEJvZ2FlcnQgdG8gdGhlCiAgICAgICAgZGVmYXVsdCB0ZW1wbGF0ZS4KCjIwMDMtMDktMDcgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjY3LgoKICAgICAgICAqIEZpeGVkIGFsc28gYSBjb3VwbGUgb2YgUmVmZXJlbmNlTWFuYWdlciBidWdzIHJlbGF0aW5nIHRvIHBsdXJhbAogICAgICAgIHBhZ2UgbmFtZXMuICBIb3dldmVyLCBhIGNvdXBsZSBvZiBzbWFsbCBwcm9ibGVtcyBzdGlsbCByZW1haW4uCgogICAgICAgICogQmFzaWNBdHRhY2htZW50UHJvdmlkZXIgbm8gbG9uZ2VyIGZhaWxzIGlmIHRoZXJlIGFyZSBleHRyYW5lb3VzCiAgICAgICAgZGlyZWN0b3JpZXMgaW4gdGhlIGF0dGFjaG1lbnQgcmVwb3NpdG9yeS4gIFJlcG9ydGVkIGJ5IHNvbWVvbmUKICAgICAgICB3aG9tIEkgY2FuJ3QgcmVjYWxsLi4uCgogICAgICAgICogRml4ZWQgYSBidW5jaCBvZiBmYWlsaW5nIHRlc3RzIHRvIGNvbmZvcm0gd2l0aCB0aGUgYWN0dWFsIGNvZGUKICAgICAgICBiYXNlLgoKICAgICAgICAqIHYyLjEuNjYuCgogICAgICAgICogV2VibG9nUGx1Z2luIG5vdyBkaXNwbGF5cyBhbGwgZW50cmllcywgaWYgcGFyYW1ldGVyICJkYXlzIiBpcwogICAgICAgIHNldCB0byAiYWxsIi4KCjIwMDMtMDktMDQgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjY1LgoKICAgICAgICAqIFdlYmxvZ1BsdWdpbiBub3cgYmVhdXRpZmllcyB0aGUgZW50cnkgYXV0aG9yIG5hbWUuCgoyMDAzLTA5LTAyICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS42NC4KCiAgICAgICAgKiBBZGRlZCB0d28gbmV3IHZhcmlhYmxlczogJGF0dGFjaG1lbnRQcm92aWRlciBhbmQKICAgICAgICAkYXR0YWNobWVudFByb3ZpZGVyRGVzY3JpcHRpb24gdG8gbWF0Y2ggdGhlIHBhZ2Vwcm92aWRlciBvbmVzLgogICAgICAgIAogICAgICAgICogRml4ZWQgcHJvYmxlbSB3aXRoIEFjbEltcGwgcmV0dXJuaW5nIGxhdGUgLSBpZiB3ZSB1c2UgaW1wbGllcygpCiAgICAgICAgd2UgbXVzdCByZXR1cm4gYXQgdGhlIGZpcnN0IG1hdGNoaW5nIGNoZWNrLgoKICAgICAgICAqIEFkZGVkIENhY2hpbmdBdHRhY2htZW50UHJvdmlkZXIuICBJdCBpcyBhY3RpdmF0ZWQgYnkgc2V0dGluZyB0aGUKICAgICAgICBqc3B3aWtpLnVzZVBhZ2VDYWNoZSBwcm9wZXJ0eSwgdGhlIHNhbWUgYXMgd2l0aCBDYWNoaW5nUHJvdmlkZXIuCiAgICAgICAgU3VnZ2VzdGVkIGJ5IE5paWxvIE5ldXZvLgoKMjAwMy0wOS0wMSAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuNjMuCgogICAgICAgICogQ2FjaGluZ1Byb3ZpZGVyIG5vdyBtYWtlcyBhbiBlZHVjYXRlZCBndWVzcyBhYm91dCBwYWdlCiAgICAgICAgZXhpc3RlbmNlLCB3aGljaCBzaG91bGQgc3BlZWQgdGhpbmdzIHVwIHF1aXRlIGEgbG90IG9uIHN5c3RlbXMKICAgICAgICB0aGF0IGhhdmUgc2xvd2VyIHByb3ZpZGVycy4gIFN1Z2dlc3RlZCBieSBOaWlsbyBOZXV2by4KCjIwMDMtMDgtMzEgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjYyLgoKICAgICAgICAqIHJzcy5qc3Agbm93IHN1cHBvcnRzIE9TQ2FjaGUuCgoyMDAzLTA4LTI5ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS42MS4KCiAgICAgICAgKiBBdHRhY2htZW50U2VydmxldCBub3cgY2hlY2tzIHRoZSBJZi1Nb2RpZmllZC1TaW5jZSAtaGVhZGVyIGZyb20KICAgICAgICB0aGUgYnJvd3NlciwgYW5kIHJldHVybnMgYSAzMDQgKEhUVFBfTk9UX01PRElGSUVEKSBpZiB0aGUKICAgICAgICBhdHRhY2htZW50IGhhcyBub3QgYmVlbiBtb2RpZmllZC4gIENvbnRyaWJ1dGVkIGJ5IEFpa28gTWFzdGJvb20uCgoyMDAzLTA4LTI2ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS42MC4KCiAgICAgICAgKiBFbmFibGVkIDxydGV4cHJ2YWx1ZT4gZm9yIGFsbCBDYWxlbmRhciBhdHRyaWJ1dGVzLiAgUmVxdWVzdGVkIGJ5CiAgICAgICAgRnJhbmNvaXNQYXJsYW50LgogICAgICAgIAoyMDAzLTA4LTI1ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS41OS4KCiAgICAgICAgKiBBZGRlZCB0aGUgY29uY2VwdCBvZiBhbiBhZG1pbmlzdHJhdG9yLiAgQ29kZSBleGlzdHMsIGJ1dCBpcwogICAgICAgIHN0aWxsIHN1YmplY3QgdG8gYnVncyBpbiB0aGUgZ3JvdXAgY29kZS4gIFVzZQogICAgICAgICJqc3B3aWtpLmF1dGguYWRtaW5pc3RyYXRvciIgdG8gc2V0IHRoZSBncm91cC91c2VybmFtZSB3aG8gaXMgdGhlCiAgICAgICAgYWRtaW5pc3RyYXRvcjsgZGVmYXVsdCBpcyAiQWRtaW5Hcm91cCIuCgogICAgICAgICogdjIuMS41OC4KCiAgICAgICAgKiBJbnNlcnRQYWdlIHBsdWdpbiBub3cgc3VwcG9ydHMgImNsYXNzIiBwYXJhbWV0ZXIuCgogICAgICAgICogV2VibG9nUGx1Z2luIG5vdyBhbHNvIHN1cHBvcnRzIHRoZSAicGFnZSIgcGFyYW1ldGVyLgoKMjAwMy0wOC0yNCAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuNTcuCgogICAgICAgICogRXJyb3IuanNwIG5vdyBzaG93cyB0aGUgcm9vdCBjYXVzZSBpbnN0ZWFkIG9mIHRoZSBKc3BFeGNlcHRpb24uCiAgICAgICAgVGhpcyBzaG91bGQgbWFrZSB0aGUgZXJyb3IgbWVzc2FnZXMgYSBiaXQgbW9yZSBjb21wcmVoZW5zaWJsZQogICAgICAgIHdpdGhvdXQgZGlwcGluZyBpbnRvIHRoZSBsb2cgZmlsZXMuCgogICAgICAgICogUGVybWlzc2lvblRhZyB3YXMgYW1lbmRlZCB0byB3b3JrIHdpdGggdGhlIG5ldyBwZXJtaXNzaW9uCiAgICAgICAgc3lzdGVtLiAKCiAgICAgICAgKiBBZGRlZCBEZWxldGUuanNwIGFuZCBhZGRlZCBwcmVsaW1pbmFyeSBzdXBwb3J0IHRvIHBhZ2UgcmVtb3ZhbC4KICAgICAgICBEb2Vzbid0IHdvcmsgeWV0LCB0aG91Z2guCgogICAgICAgICogQ2FjaGluZ1Byb3ZpZGVyIG5vdyBieXBhc3NlcyBpdHMgb3duIHNlYXJjaCBtZXRob2QsIGlmIHRoZQogICAgICAgIHByb3ZpZGVyIGltcGxlbWVudHMgdGhlIEZhc3RTZWFyY2ggaW50ZXJmYWNlLiAgVGhpcyBpbnRlcmZhY2UKICAgICAgICBkZWZpbmVzIG5vIG1ldGhvZHMuICBUaG9zZSBwcm92aWRlcnMgd2hlcmUgc2VhcmNoaW5nIGNhbiBiZSBkb25lCiAgICAgICAgdmVyeSBlZmZpY2llbnRseSBzaG91bGQgYmVuZWZpdCBhIGxvdCBmcm9tIHRoaXMuIFJlcXVlc3RlZCBieQogICAgICAgIFN1bGthIEhhcm8uCgoyMDAzLTA4LTE5ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS41Ni4KCiAgICAgICAgKiBGaXhlZCBhIHByb2JsZW0gd2hlcmUgc3BlY2lhbCBwYWdlcyAoU2VhcmNoLmpzcCwKICAgICAgICBVc2VyUHJlZmVyZW5jZXMuanNwKSBoYWQgYWx3YXlzICJNYWluIiBhcyB0aGVpciB0aXRsZS4KICAgICAgICBJbmNpZGVudGFsbHksIHRoZSBzb2x1dGlvbiBhbHNvIGFsbG93cyB5b3UgdG8gbG9jYWxpemUgdGhlIHNlYXJjaAogICAgICAgIGFuZCBwcmVmZXJlbmNlcyBwYWdlIG5hbWVzLiAgU2VlIGpzcHdpa2kucHJvcGVydGllcyBmb3IgbW9yZQogICAgICAgIGluZm9ybWF0aW9uLiAgUmVwb3J0ZWQgYnkgTmlpbG8gTmV1dm8uCgogICAgICAgICogdjIuMS41NS4KCiAgICAgICAgKiBSZWZlcmVuY2VNYW5hZ2VyIGlzIG5vdyBhIFBhZ2VGaWx0ZXIuCgoyMDAzLTA4LTEzICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS41NC4KCiAgICAgICAgKiBGaXhlZCAoaG9wZWZ1bGx5KSBwcm9ibGVtIHdpdGggSUUgNS4yMiBvbiBPU1gsIHdoaWNoIHdvdWxkCiAgICAgICAgdXBsb2FkIGEgZmlsZSB3aXRoIDB4MEQwQSBhZGRlZCB0byB0aGUgZnJvbnQgb2YgdGhlIGZpbGVuYW1lLgogICAgICAgIFJlcG9ydGVkIGJ5IFhpYWFuLgogICAgICAgIAoyMDAzLTA3LTE3ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS41My4KCiAgICAgICAgKiBBZGRlZCBWb3RlUGx1Z2luIGFzIGFuIGV4cGVyaW1lbnQuICBEb24ndCB1c2UgaXQgZm9yIGFueXRoaW5nCiAgICAgICAgcmVhbC4gCgoyMDAzLTA3LTE1ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS41MgogICAgICAgIAogICAgICAgICogSW50ZWdyYXRlZCB0aGUgT1NDYWNoZSBmcm9tIE9wZW5TeW1waG9ueSBncm91cC4gIEN1cnJlbnRseSB0aGUKICAgICAgICBvbmx5IG9uZSB0aGF0IHVzZXMgaXQgaXMgdGhlIENhY2hpbmdQcm92aWRlciwgYnV0IEknZCBleHBlY3QgdG8gZG8KICAgICAgICBtb3JlIHNvb24uCgoyMDAzLTA3LTA4ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS41MS4KCiAgICAgICAgKiBXZWJMb2dQbHVnaW4gbm93IGF0dGVtcHRzIHRvIGd1ZXNzIHRoZSBudW1iZXIgb2YgY29tbWVudHMgb24gdGhlCiAgICAgICAgY29tbWVudCBwYWdlLCBhbmQgZGlzcGxheXMgdGhlbSB3aXRoIHRoZSAiQ29tbWVudHM/IiB0ZXh0LiAgSXQKICAgICAgICBhbHNvIGFwcGVuZHMgdGhlIG51bWJlciBvZiBjb21tZW50cyB0byB0aGUgVVJMLCBzbyB0aGF0IHRoZSB1c2VyJ3MKICAgICAgICBicm93c2VyIHdvdWxkIHNob3cgdGhhdCB0aGUgbGluayBjb250ZW50cyBoYXZlIGNoYW5nZWQgc2luY2UgbGFzdAogICAgICAgIHZpc2l0LiAKCjIwMDMtMDctMDcgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjUwLgoKICAgICAgICAqIEluc2VydFBhZ2VUYWcgbm93IG9ubHkgY2FsbHMgcGFnZUV4aXN0cygpIE9SIGdldFBhZ2UoKSwKICAgICAgICBkZXBlbmRpbmcgb24gdGhlIHNpdHVhdGlvbi4gIFRoaXMgc2hvdWxkIHNwZWVkIHVwIHBlcmZvcm1hbmNlIGEKICAgICAgICBiaXQuICBSZXBvcnRlZCBieSBNYXJrIEdyaWZmaXRoLgoKICAgICAgICAqIEJ1ZyBmaXg6IENvbW1lbnQuanNwIHdvdWxkIHRyYW5zZm9ybSBIVE1MIGVudGl0aWVzIG9uZSB0aW1lIHRvbwogICAgICAgIG1hbnkgOi0pLgoKMjAwMy0wNy0wNiAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuNDkuCgogICAgICAgICogUGFnZVR5cGVUYWcgbm93IHJlY29nbml6ZXMgYWxzbyB3ZWJsb2cgZW50cmllcy4KCiAgICAgICAgKiB2Mi4xLjQ4LgoKICAgICAgICAqIEl0IGlzIG5vdyBwb3NzaWJsZSB0byBzZXQgdGhlIGNhY2hlIGNvbnNpc3RlbmN5IGNoZWNrcyBmb3IKICAgICAgICBDYWNoaW5nUHJvdmlkZXIuIAoKICAgICAgICAqIHYyLjEuNDcuCgogICAgICAgICogSXQgaXMgbm93IHBvc3NpYmxlIHRvIHNldCB0aGUgInJlbWVtYmVyIiAtZmxhZyB0byBDb21tZW50LmpzcCwKICAgICAgICB3aG8gd2lsbCB0aGVuIHdyaXRlIHRoZSBhdXRob3IgaW5mbyB0byBhIGNvb2tpZS4gIFRoZSBkZWZhdWx0CiAgICAgICAgdGVtcGxhdGUgc2hvd3MgeW91IGhvdy4KCjIwMDMtMDctMDUgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjQ2LgoKICAgICAgICAqIEFkZGVkIGNvbW1lbnQgZnVuY3Rpb25hbGl0eSBhbmQgQ29tbWVudExpbmtUYWcuCgogICAgICAgICogV2VibG9nUGx1Z2luIG5vdyBnZW5lcmF0ZXMgYSBzZXBhcmF0ZSA8ZGl2PiBhcm91bmQgdGhlIGVudHJ5CiAgICAgICAgaXRzZWxmLiAgVGhpcyBzaG91bGQgbWFrZSBpdCBhIGJpdCBlYXNpZXIgdG8gY3JlYXRlIHlvdXIgb3duCiAgICAgICAgbGF5b3V0cy4gIE5vdGUgdGhhdCB0aGUgQ1NTIGNsYXNzIG5hbWVzIHdlcmUgYWxzbyBjaGFuZ2VkIC0gY2hlY2sKICAgICAgICBvdXQgdGhlIGRlZmF1bHQgdGVtcGxhdGUganNwd2lraS5jc3MgdG8gc2VlIHRoZSBuZXcgbmFtZXMhICAoSSBhbQogICAgICAgIGJyYXZlbHkgY2hhbmdpbmcgdGhlbSBiZWNhdXNlIEkgYXNzdW1lIG5vYm9keSBlbHNlIGlzIHVzaW5nCiAgICAgICAgSlNQV2lraSBmb3IgYmxvZ2dpbmcgPSkuICBDb21tZW50cyBub3cgYWxzbyBvcGVuIGluIGEgc2VwYXJhdGUKICAgICAgICBmcmFtZS4KCiAgICAgICAgKiBTcGxpdCB0aGUgZGVmYXVsdCBFZGl0VGVtcGxhdGUgaW50byB0d28gcGFydHM6IEVkaXRDb250ZW50IGFuZAogICAgICAgIENvbW1lbnRDb250ZW50LCBzaW5jZSB0aGV5J3JlIHNsaWdodGx5IGRpZmZlcmVudC4gIFlvdSBtaWdodCB3YW50CiAgICAgICAgdG8gdGFrZSBhIGxvb2sgYXQgaXQsIHNpbmNlIHlvdSBtaWdodCB3YW50IHRvIHRha2Ugc29tZSBpZGVhcyBpbnRvCiAgICAgICAgeW91ciBvd24gdGVtcGxhdGUuCgogICAgICAgICogUmV3cm90ZSBwYXJ0cyBvZiB0aGUgYWNjZXNzIGNvbnRyb2wgc3lzdGVtIC0gZWFjaCBwZXJtaXNzaW9uIG5vdwogICAgICAgIGhhcyB0byBpbXBsZW1lbnQgaW1wbGllcygpLgoKICAgICAgICAqIEFkZGVkIENvbW1lbnRQZXJtaXNzaW9uLgoKICAgICAgICAqIHYyLjEuNDUuCgogICAgICAgICogQWRkZWQgc29tZSBuZXcgc2VhcmNoIGVuZ2luZXMgdG8gRGVub3VuY2UuCgogICAgICAgICogVXBncmFkZWQgdG8gbG9nNGogMS4yLjgsIGV2ZW4gdGhvdWdoIGl0IGlzIGFib3V0IHR3aWNlIHRoZSBzaXplCiAgICAgICAgb2YgMS4xLjMuICBUaGlzIHNob3VsZCBtYWtlIGxpZmUgZWFzaWVyIHRvIHBlb3BsZSB3aG8gYXJlIGRvaW5nCiAgICAgICAgZW1iZWRkaW5nIHdvcmssIGZvciBleGFtcGxlLiAgVHJhbnNpdGlvbiBmcm9tIENhdGVnb3J5IHRvIExvZ2dlcgogICAgICAgIGlzIGhhcHBlbmluZy4uLgoKMjAwMy0wNy0wMyAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIENoYW5nZWQgZGVmYXVsdCAiaGFzIHRoaXMgcGFnZSBiZWVuIGNoYW5nZWQiIC1jaGVjayBpbnRlcnZhbCBpbgogICAgICAgIENhY2hpbmdQcm92aWRlciB0byAzMCBzZWNvbmRzLCBiZWNhdXNlIHRoZXJlIHdlcmUgc29tZSBpc3N1ZXMgaW4KICAgICAgICBoaWdoLWxvYWQgc2l0dWF0aW9ucyB3aGVuIHVzaW5nIGEgc2hvcnRlciBpbnRlcnZhbC4gIEFsc28gcmVtb3ZlZAogICAgICAgIHNvbWUgbm9uLWZ1bmN0aW9uYWwgY29kZS4KCjIwMDMtMDctMDIgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjQ0LgoKICAgICAgICAqIEFkZGVkIHJlc3Qgb2YgdXNlcmdyb3VwIHN1cHBvcnQuICBXaGVlIQoKMjAwMy0wNi0yNyAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuNDMuCgogICAgICAgICogUnVkaW1lbnRhcnkgZ3JvdXAgc3VwcG9ydCBhZGRlZCBmb3IgdGhlIHRocmVlIGNvbnN0YW50IGdyb3VwczoKICAgICAgICBBbGwsIE5hbWVkIGFuZCBLbm93bi4gIE90aGVycyBzaG91bGQgd29yaywgdG9vLCBidXQgY3VycmVudGx5CiAgICAgICAgdGhlcmUgaXMgbm8gcHJvcGVyIHdheSB0byBhZGQgZ3JvdXBzLgoKMjAwMy0wNi0yNiAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuNDIuCgogICAgICAgICogQWRkZWQgcGF0Y2ggdG8gbGlzdCBhdHRhY2htZW50cyB0b28gd2hlbiBhc2tpbmcgZm9yIGxpbmtzIHVzaW5nCiAgICAgICAgdGhlIGxpc3RMaW5rcygpIG1ldGhvZCBmb3IgWE1MLVJQQy4gIFBhdGNoIGtpbmRseSBkb25hdGVkIGJ5CiAgICAgICAgQ2hyaXN0b3BoZXIgTGVuei4KCjIwMDMtMDYtMjQgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjQxLgoKICAgICAgICAqIE5vdyBwYXJzZXMgaHlwZXJsaW5rcyBjb3JyZWN0bHkgaWYgeW91IGhhdmUgZW5hYmxlZCBDYW1lbENhc2UuCgoyMDAzLTA2LTIzICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS40MC4KCiAgICAgICAgKiBBZGRlZCBEZW5vdW5jZSBwbHVnaW4uCgoyMDAzLTA2LTE0ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS4zOS4KCiAgICAgICAgKiBBZGRlZCBtYXhFbnRyaWVzIHBhcmFtZXRlciB0byB0aGUgV2VibG9nUGx1Z2luLgoKICAgICAgICAqIEF1dGhvciBuYW1lIGlzIG5vdyBzaG93biB3aXRoIHRoZSBibG9nIGVudHJ5LgoKICAgICAgICAqIEJ1ZyBmaXg6IHdlIGRpZG4ndCBzZXQgdGhlIGF1dGhvciBvbiBlZGl0LCBidXQgdXNlZCB0aGUgcHJldmlvdXMKICAgICAgICBhdXRob3IuICBPb3BzID0pLgoKMjAwMy0wNi0xMCAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMzguCgogICAgICAgICogQWRkZWQgJSUtY29tbWFuZHMgZm9yIHN0eWxlcy4gICUlY2xhc3NuYW1lIHdpbGwgdXNlIHRoZSBnaXZlbgogICAgICAgIGNsYXNzIGFzIGRlZmluZWQgaW4gdGhlIENTUyBmaWxlOyAlJSggQ1NTLWRhdGEgKSB3aWxsIHVzZSB0aGUKICAgICAgICBnaXZlbiBDU1Mgc3R5bGUuCgogICAgICAgICogdjIuMS4zNy4KCiAgICAgICAgKiBBZGRlZCAidGVtcGxhdGUiIC1wYXJhbWV0ZXIgdG8gTGlua1RvVGFnLCBzbyB5b3UgY2FuIG5vdwogICAgICAgIGdlbmVyYXRlIGxpbmtzIGRpcmVjdGx5IHVzaW5nIGEgdGVtcGxhdGUuCgogICAgICAgICogQWRkZWQgSW5zZXJ0UGFnZSBwbHVnaW4gZnJvbSBTY290dCBIdXJsYmVydC4gIFRoYW5rcywgU2NvdHQhCgoyMDAzLTA2LTA5ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS4zNi4KCiAgICAgICAgKiBBZGRlZCBwYXJhbWV0ZXIgImVudHJ5dGV4dCIgdG8gV2VibG9nRW50cnlQbHVnaW4uCgogICAgICAgICogQWRkZWQgIk5ld0Jsb2dFbnRyeS5qc3AiLCBzaW5jZSBvbiBhIG11bHRpLXVzZXIgd2VibG9nIHlvdSB3b3VsZAogICAgICAgIHZlcnkgZWFzaWx5IGdldCBjb25mbGljdHMgd2l0aCBwZW9wbGUgZWRpdGluZyB0aGUgc2FtZSBwYWdlLgogICAgICAgIEFsc28sIGlmIHlvdSBoYWQgYW4gb2xkIHZlcnNpb24gaW4gdGhlIGNhY2hlLCBjbGlja2luZyBvbiAiTmV3CiAgICAgICAgZW50cnkiIHdvdWxkIGNhdXNlIHRoZSBlbnRyeSB0byBnbyB0byBhbiBvbGQgZGF0ZS4KCjIwMDMtMDYtMDcgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjM1LgoKICAgICAgICAqIElmIENhbWVsQ2FzZSBsaW5rcyBoYXZlIGJlZW4gc2V0IG9uLCB0aGVuIHN0cmFpZ2h0IFVSTHMgYXJlIG5vdwogICAgICAgIGxpbmtlZCwgdG9vLiAgVGhpcyBtYWtlcyBKU1BXaWtpIGJlaGF2aW91ciBzaW1pbGFyIHRvIGFsbCBvdGhlcgogICAgICAgIFdpa2lFbmdpbmVzIHRoYXQgc3VwcG9ydCB0cmFkaXRpb25hbCBsaW5raW5nLgoKMjAwMy0wNi0wNSAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMzQuCgogICAgICAgICogSXQgaXMgbm93IHBvc3NpYmxlIHRvIGRlZmluZSB0aGUgbG9jYXRpb24gb2YgdGhlCiAgICAgICAganNwd2lraS5wcm9wZXJ0aWVzIGZpbGUgdGhyb3VnaCBhIHNlcnZsZXQgaW5pdCBwYXJhbWV0ZXIuICBTZWUKICAgICAgICBzYW1wbGVwYWdlcy56aXAgYW5kIHRoZSBwYWdlICJNdWx0aXBsZVdpa2lzIi4KCjIwMDMtMDYtMDQgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjMzLgoKICAgICAgICAqIFRoZSBwcm9wZXJ0eSBmaWxlIHdhcyBub3QgY2xvc2VkIGFmdGVyIGl0IHdhcyBvcGVuZWQuICBUaGlzCiAgICAgICAgdGVuZGVkIHRvIGNhdXNlIHNvbWUgcHJvYmxlbXMgd2l0aCBXZWJMb2dpYy4gIFJlcG9ydGVkIGJ5IE1hcmsKICAgICAgICBHcmlmZml0aC4gCgoyMDAzLTA2LTAzICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS4zMi4KCiAgICAgICAgKiBNb3ZlZCBhcm91bmQgc29tZSB0ZXN0cyBpbiB0aGVpciBwcm9wZXIgcGxhY2VzLgoKICAgICAgICAqIENoYW5nZWQgdGhlIGJ1aWxkIHN5c3RlbSBzb21ld2hhdDogVGhlcmUgaXMgbm93IGEKICAgICAgICAiYnVpbGQucHJvcGVydGllcyIgLWZpbGUgd2hpY2ggYWxsb3dzIHlvdSB0byBjdXN0b21pemUgdGhlCiAgICAgICAgY29tcGlsYXRpb24gc29tZXdoYXQuICBUaGlzIHNob3VsZCBoZWxwIHRob3NlIHRoYXQgYXJlIGRldmVsb3BpbmcKICAgICAgICBvbiBXaW5kb3dzLWJhc2VkIHN5c3RlbXMsIHNpbmNlIHBhdGhzIGNhbiBub3cgYmUgc2V0IHVwIGNvcnJlY3RseQogICAgICAgIGF1dG9tYXRpY2FsbHkuICBBcyBhbiBleGFtcGxlLCBJJ3ZlIGluY2x1ZGVkIGEKICAgICAgICBidWlsZC5wcm9wZXJ0aWVzLndpbiBmb3IgV2luZG93cy1tYWNoaW5lcywgYW5kIGJ1aWxkLnByb3BlcnRpZXMKICAgICAgICBmb3Igbm9uLVdpbmRvd3MgbWFjaGluZXMuICBTdWdnZXN0ZWQgYnkgb3JpZ2luYWxseSBieSBzb21lb25lCiAgICAgICAgd2hvc2UgbmFtZSBJIGNhbid0IHJlY2FsbCwgYW5kIEkgc2VlbSB0byBoYXZlIGxvc3QgdGhlIG1haWwgOi0vLgoKICAgICAgICAqIHYyLjEuMzEuCgogICAgICAgICogQWRkZWQgImV4aXN0cyIgLWF0dHJpYnV0ZSBiYWNrIHRvIFVzZXJDaGVja1RhZywgc2luY2UgaXQgc2VlbXMKICAgICAgICBwb2ludGxlc3MgdG8gYnJlYWsgZG93biBwZXJmZWN0bHkgZ29vZCB0ZW1wbGF0ZXMuICBIb3dldmVyLCBpdCdzCiAgICAgICAgdXNlIGlzIHN0cm9uZ2x5IGRlcHJlY2F0ZWQsIGFuZCBpdCBpcyBjb252ZXJ0ZWQgb24tdGhlLWZseSB0byBhbgogICAgICAgIGVxdWl2YWxlbnQgInN0YXR1cyIgLWF0dHJpYnV0ZS4KCiAgICAgICAgKiBNb3ZlZCBhbGwgZGVmYXVsdCB0ZW1wbGF0ZSBDU1MgZGVmaW5pdGlvbnMgdG8ganNwd2lraS5jc3MsIGFzCiAgICAgICAgcGVyIHRoZSBleGFtcGxlIGluIHRoZSBtcmcgdGVtcGxhdGUuICBIb3dldmVyLCB0aGUKICAgICAgICBicm93c2VyLXNwZWNpZmljIGZpbGVzIGhhdmUgYmVlbiBrZXB0IGFzIHdlbGwuIER1aC4gIEluIHJldHJvc3BlY3QKICAgICAgICBpdCBpcyBvYnZpb3VzIHRoYXQgeW91IGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgc3R5bGVzaGVldCBmaWxlIGRlZmluZWQKICAgICAgICBwZXIgcGFnZS4gOi0pCgoyMDAzLTA2LTAxICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS4zMC4KCiAgICAgICAgKiBDYWxlbmRhclRhZyBlbmhhbmNlZDogWW91IGNhbiBub3cgdXNlIG1vbnRodXJsZm9ybWF0IHBhcmFtZXRlcgogICAgICAgIHRvIGRldGVybWluZSB3aGVyZSB0aGUgbW9udGgtdGV4dCBzaG91bGQgZ28gdG8uICBVc2UgIiVkIiB3aXRoaW4KICAgICAgICB0aGlzIGluc3RhbmNlIHRvIGdldCB0aGUgbW9udGggbGVuZ3RoLgoKICAgICAgICAqIENhbGVuZGFyVGFnIGVuaGFuY2VkOiBZb3UgY2FuIG5vdyB1c2UgIiVwIiB0byBzaWduaWZ5IHRoZQogICAgICAgIGN1cnJlbnQgcGFnZSBuYW1lIGluIGFueSBvZiB0aGUgcGFyYW1ldGVycy4KCiAgICAgICAgKiB2Mi4xLjI5LgoKICAgICAgICAqIEFkZGVkIHRvIFdpa2lBdXRoZW50aWNhdG9yIGludGVyZmFjZTogSXQgaXMgbm93IHRoZW9yZXRpY2FsbHkKICAgICAgICBwb3NzaWJsZSB0byBjaGFuZ2UgcGFzc3dvcmRzIGFzIHdlbGwgKHRob3VnaCB0aGVyZSBpcyBubwogICAgICAgIHN1cHBvcnQgd2l0aGluIEpTUCBmb3IgdGhhdCkuCgogICAgICAgICogVXNlck1hbmFnZXIgbm93IGhhbmRsZXMgbG9naW5zL2xvZ291dHMgcHJvcGVybHkuICBXZSBub3cgaGF2ZQogICAgICAgIGZ1bGx5IGZ1bmN0aW9uYWwgbG9naW4vbG9nb3V0IGZ1bmN0aW9uYWxpdHkhCgogICAgICAgICogQ3JlYXRpbmcgYSBXaWtpQ29udGV4dCB3aXRoIFdpa2lFbmdpbmUuY3JlYXRlQ29udGV4dCgpIG5vdwogICAgICAgIGFjdHVhbGx5IHRocm93cyBhbiBleGNlcHRpb24gaWYgaXQgc2VlcyB0aGF0IFdpa2lFbmdpbmUgaGFzIG5vdAogICAgICAgIGJlZW4gY29uZmlndXJlZCBjb3JyZWN0bHkuICBUaGlzIGhvcGVmdWxseSByZW1vdmVzIGEgYnVuY2ggb2YKICAgICAgICBOdWxsUG9pbnRlckV4Y2VwdGlvbnMgYW5kIG90aGVyIG5hc3RpZXMgdGhhdCBvY2N1cnJlZCB3aGVuIHRoZQogICAgICAgIGpzcHdpa2kucHJvcGVydGllcyBmaWxlIHdhcyBub3QgY29ycmVjdC4KICAgICAgICAKICAgICAgICBVbmZvcnR1bmF0ZWx5IHRoZSBlcnJvciBtZXNzYWdlcyBhcmUgc3RpbGwgbm90IHZlcnkgaW5mb3JtYXRpdmUsCiAgICAgICAgYnV0IGFzIGxvbmcgYXMgd2UgY3JlYXRlIHRoZSBXaWtpRW5naW5lIGluIHRoZSBqc3BJbml0KCksIHRoZW4gd2UKICAgICAgICBoYXZlIHRvIGRvIGl0IGxpa2UgdGhpcy4uLiAgQW55IGV4Y2VwdGlvbnMgdGhyb3duIHRoZXJlIGdldAogICAgICAgIGlnbm9yZWQgYnkgVG9tY2F0LgoKICAgICAgICAqIERlcHJlY2F0ZWQgYXdheSBhIGJ1bmNoIG9mIG1ldGhvZHMgZnJvbSBXaWtpRW5naW5lLCBtb3N0IG5vdGFibHkKICAgICAgICBzYXZlVGV4dCggU3RyaW5nLCBTdHJpbmcgKS4gIEFsc28sIGZpbmRXaWtpQ2xhc3MoKSBpcyBnb25lIChtb3ZlZAogICAgICAgIHRvIENsYXNzVXRpbCkuCgogICAgICAgICogVmFyaWFibGVNYW5hZ2VyIG5vdyByZWNvZ25pemVzIHR3byBuZXcgdmFyaWFibGVzIChvciBjb25zdGFudHMsCiAgICAgICAgZGVwZW5kcyBvbiB5b3VyIHBvaW50IG9mIHZpZXcpOiAidXNlcm5hbWUiIGFuZCAibG9naW5zdGF0dXMiLgoKICAgICAgICAqIEFkZGVkIG5ldyBQcmlvcml0eUxpc3QgY2xhc3MuCgogICAgICAgICogQWRkZWQgbmV3ICJ1dGlsIiAtcGFja2FnZS4KCiAgICAgICAgKiBBZGRlZCBDbGFzc1V0aWwgY2xhc3Mgc28gdGhhdCBpdCBpcyBlYXNpZXIgdG8gaGFuZGxlIGNsYXNzCiAgICAgICAgaW5mb3JtYXRpb24uICBBbW9uZyBvdGhlciB0aGluZ3MsIHRoaXMgcmVwbGFjZXMKICAgICAgICBXaWtpRW5naW5lLmZpbmRXaWtpQ2xhc3MoKS4KCiAgICAgICAgKiBVc2VyQ2hlY2tUYWcgbW9kaWZpZWQ6IEl0IG5vdyBoYXMgYSBwYXJhbWV0ZXIgInN0YXR1cyIgaW5zdGVhZAogICAgICAgIG9mIHRoZSBvbGQgImV4aXN0cyIsIGFuZCBpdCBoYXMgYmVlbiBjb25zaWRlcmFibHkgZW5oYW5jZWQgaW4KICAgICAgICB1c2UuICBUaGUgb2xkICJleGlzdHM9dHJ1ZSIgaXMgbm93IHJlcGxhY2VkIHdpdGggInN0YXR1cz1rbm93biIsCiAgICAgICAgYW5kICJleGlzdHM9ZmFsc2UiIGlzICJzdGF0dXM9dW5rbm93biIuICBUaGVyZSBhcmUgYWxzbyBvdGhlcgogICAgICAgIG9wdGlvbnMgYXZhaWxhYmxlLgoKICAgICAgICAqIHYyLjEuMjguCgogICAgICAgICogTWVudGFsIG5vdGU6IHdoZW4geW91IHNheSAiY3ZzIGNvbW1pdCIsIHNlZSB3aGljaCBkaXJlY3RvcnkKICAgICAgICB5b3UncmUgaW4uCgogICAgICAgICogVGhlcmUgaXMgbm93IGEgZ2VuZXJhbCBzYXZpbmcvbG9hZGluZyBmaWx0ZXJpbmcKICAgICAgICBmdW5jdGlvbmFsaXR5LiBTZWUgdGhlIG5ldyAiZmlsdGVycyIgcGFja2FnZS4gIEl0IGRvZXMgbm90IHN0aWxsCiAgICAgICAgaGF2ZSBhbGwgb2YgdGhlIHVzYWJpbGl0eSB0aGF0IHdvdWxkIGJlIG5pY2UsIGJ1dCBpdCBzaG91bGQgYmUKICAgICAgICByZWFkeSBmb3IgdGVzdGluZy4KCjIwMDMtMDUtMzEgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjI3LgoKICAgICAgICAqIFVzZXJNYW5hZ2VyIHdhcyBzbGlnaHRseSBjb25mdXNlZCBhYm91dCB3aGF0IGtpbmQgb2YKICAgICAgICBhdXRoZW50aWNhdGlvbiBpcyBwcmVmZXJhYmxlIG92ZXIgd2hhdC4gIEZpeGVkIG5vdyBzbyB0aGF0IGlmIHlvdQogICAgICAgIGhhdmUgZG9uZSBjb250YWluZXItYmFzZWQgYXV0aGVudGljYXRpb24sIHlvdSB3aWxsIGFjdHVhbGx5IGJlCiAgICAgICAgbG9nZ2VkIGluIHdpdGggcHJvcGVyIHVzZXJuYW1lID0pLgoKICAgICAgICAqIHYyLjEuMjYuCgogICAgICAgICogQWRkZWQgUmVsZWFzZS5nZXRWZXJzaW9uU3RyaW5nKCkgZm9yIHRob3NlIHdobyBhcmUgYW5ub3llZCBhdAogICAgICAgIGhhdmluZyB0byByZWNvbXBpbGUgdGhlaXIgSlNQIHBhZ2VzIGVhY2ggdGltZSB0aGV5IGluc3RhbGwgYSBuZXcKICAgICAgICB2ZXJzaW9uIChsaWtlIG1lKS4KCiAgICAgICAgKiBNYWRlIHRoZSBkZWZhdWx0IHRlbXBsYXRlcyBhIGJpdCBtb3JlIFhIVE1MIGNvbXBsaWFudC4gIFRoZXJlCiAgICAgICAgYXJlIHN0aWxsIHNvbWUgb2RkaXRpZXMgbGVmdCwgdGhvdWdoLgoKICAgICAgICAqICJ7e3sgfX19IiBub3cgZW1pdCA8c3BhbiBzdHlsZT0iLi4uIj4gd2hlbiBpbmxpbmVkLiAgVGhpcyBhbGxvd3MKICAgICAgICB5b3UgdG8gd3JpdGUgaW5saW5lZCBjb2RlIHRoYXQgZG9lcyBub3QgZG8gYW55IHRyYW5zbGF0aW9uLgogICAgICAgIFRoYW5rcyB0byBMYXJzIFNjaG1pZHQtVGhpZW1lLgoKICAgICAgICAqIFBhcmFncmFwaCBnZW5lcmF0aW9uICh0aGUgaW5mYW1vdXMgPHA+IC10YWcpIGlzIG5vdyBYSFRNTAogICAgICAgIGNvbXBhdGlibGUuCgogICAgICAgICogQSBidW5jaCBvZiBYSFRNTCBjaGFuZ2VzLCB0aGFua3MgdG8gYW4gZXh0cmVtZWx5IGhpZ2gtcXVhbGl0eQogICAgICAgIHBhdGNoIGZyb20gTGFycyBTY2htaWR0LVRoaWVtZS4gIEEgbG90IG9mIHRoZSBwbHVnaW5zIGFuZCB0YWdzIG5vdwogICAgICAgIHdvcmsgYmV0dGVyLgoKICAgICAgICAqIHYyLjEuMjUuCgogICAgICAgICogQ2FjaGluZ1Byb3ZpZGVyIG5vdyBjYWNoZXMgc2F2ZWQgcGFnZSBtb2RpZmljYXRpb24gZGF0ZXMKICAgICAgICBjb3JyZWN0bHkuIAoKICAgICAgICAqIENhY2hpbmdQcm92aWRlciBjYW4gbm93IGFsc28gZGV0ZWN0IGRlbGV0ZWQgcGFnZXMsIGFuZCBzaWduYWxzCiAgICAgICAgUGFnZU1hbmFnZXIgY29ycmVjdGx5IGluIHRoaXMgY2FzZS4KCjIwMDMtMDUtMjkgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjI0LgoKICAgICAgICAqIENoZWNrTG9ja1RhZyB3b3VsZCBzb21ldGltZXMgdGhyb3cgYSBOdWxsUG9pbnRlckV4Y2VwdGlvbi4KICAgICAgICBSZXBvcnRlZCBieSBSb21lbyBEaXNjYS4gCgoyMDAzLTA1LTI2ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS4yMy4KCiAgICAgICAgKiBvdXQucG5nIGlzIG5vdyBjb3JyZWN0bHkgdHJhbnNwYXJlbnQsIHRoYW5rcyB0byBQYXVsIERvd25lcy4KCiAgICAgICAgKiBDYWNoaW5nUHJvdmlkZXIgY2FuIG5vdyBkZXRlY3QgaWYgdGhlIHBhZ2UgaGFzIGJlZW4gbW9kaWZpZWQKICAgICAgICBleHRlcm5hbGx5LgoKICAgICAgICAqIHJzcy5qc3AgaXMgbm93IGEgcGFydCBvZiB0aGUgbWFpbiBkaXN0cmlidXRpb24uICBJdCBpcyBob3dldmVyLAogICAgICAgIHZlcnkgd2VibG9nLXNwZWNpZmljIHJpZ2h0IG5vdywgYW5kIHNoYXJlcyBhIGJpdCB0b28gbXVjaCBjb2RlCiAgICAgICAgd2l0aCB0aGUgUlNTR2VuZXJhdG9yLgoKICAgICAgICAqIFJTUyBnZW5lcmF0b3Igbm93IG91dHB1dHMgdGhlIGRpZmZzIGFzIHdlbGwsIHNvIHlvdSBjYW4gc2VlIHdoYXQKICAgICAgICBhY3R1YWxseSBjaGFuZ2VkIGFuZCB3aGF0IGRpZCBub3QuCgoyMDAzLTA1LTIyICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS4yMi4KCiAgICAgICAgKiBSU1MgZ2VuZXJhdG9yIG5vdyBhbHNvIGRpc3BsYXlzIHdoZXRoZXIgdGhlIGZpbGUgdGhhdCB3YXMKICAgICAgICBjaGFuZ2VkIHdhcyBhIHdpa2lwYWdlIG9yIGFuIGF0dGFjaG1lbnQuCgogICAgICAgICogRml4ZWQgYXR0YWNobWVudCBVUkwgZ2VuZXJhdGlvbjogUlNTR2VuZXJhdG9yIHdvdWxkIGdlbmVyYXRlCiAgICAgICAgZmF1bHR5IFVSTHMsIGFuZCBwcmFjdGljYWxseSBubyByb3V0aW5lIGRpZCBVUkwgZW5jb2RpbmcuICBPb3BzLgogICAgICAgIFJlcG9ydGVkIGJ5IFN0ZWZhbiBSaXNzLiAKCjIwMDMtMDUtMjAgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjIxLgoKICAgICAgICAqIFByZXZpZXcuanNwIGRpZG4ndCBjb21waWxlLCBvb3BzLgoKICAgICAgICAqIEZpbGVTeXN0ZW1Qcm92aWRlciBub3cgc3RvcmVzIGF1dGhvciBpbmZvcm1hdGlvbiBhcyB3ZWxsLiAgVGhpcwogICAgICAgIGFkZHJlc3NlcyB0aGUgbW9zdC1vZnRlbiBoZWFyZCBGQVE6ICJXaHkgaXMgdGhlIGF1dGhvciBpbmZvcm1hdGlvbgogICAgICAgIG5vdCBzaG93bj8iLiAgVG8gZG8gdGhpcyBhbmQgbm90IGludGVyZmVyZSB3aXRoIFJDU0ZpbGVQcm92aWRlcgogICAgICAgIGFuZCBWZXJzaW9uaW5nRmlsZVByb3ZpZGVyLCBJIGNyZWF0ZWQgYSBuZXcgY2xhc3MsCiAgICAgICAgQWJzdHJhY3RGaWxlUHJvdmlkZXIgd2hpY2ggc3RvcmVzIG5vIG1ldGFkYXRhLCBidXQgYWxsIGZpbGUtYmFzZWQKICAgICAgICBwcm92aWRlcnMgbm93IGV4dGVuZCBmcm9tIGl0LgoKMjAwMy0wNS0xOSAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuMjAuCgogICAgICAgICogQXMgYW4gZXhhbXBsZSwgaXQgaXMgbm93IHBvc3NpYmxlIHRvIGRldGVybWluZSB0aGUgdGVtcGxhdGUgb24gYQogICAgICAgIHBlci1wYWdlIGJhc2lzIGJ5IHNldHRpbmcgc29tZXRoaW5nIGxpa2UgdGhpcyBvbiB0aGUgcGFnZToKICAgICAgICAKICAgICAgICBbe1NFVCBqc3B3aWtpLnRlbXBsYXRlRGlyPW15VGVtcGxhdGV9XQogICAgICAgIAogICAgICAgIEhvd2V2ZXIsIGF0IHRoZSBtb21lbnQgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgdGVtcGxhdGUgZGlyZWN0b3J5IGlzCiAgICAgICAgbm90IGNoZWNrZWQsIHNvIGl0IGlzIHBvc3NpYmxlIHRvIHJlZmVyIHRvIHRlbXBsYXRlcyB0aGF0IGRvIG5vdAogICAgICAgIGV4aXN0IGFuZCBnZXQgYW4gZW1wdHkgcGFnZSBpbiByZXR1cm4uCgogICAgICAgIEFsc28gQ2FtZWxDYXNlIGV4cGFuc2lvbiBjYW4gbm93IGJlIHR1cm5lZCBvZmYgb24gYSBwYWdlLWJ5LXBhZ2UKICAgICAgICBiYXNpcy4KICAgICAgICAKICAgICAgICAqIFRyYW5zbGF0b3JSZWFkZXIgbm93IHVuZGVyc3RhbmRzIHRoZSBTRVQgZGlyZWN0aXZlLiAgSXQgaXMgdGh1cwogICAgICAgIG5vdyBwb3NzaWJsZSB0byBzZXQgYXJiaXRyYXJ5IGF0dHJpYnV0ZXMgZm9yIHBhZ2VzIHdoaWNoIGdldAogICAgICAgIHN0b3JlZCBpbiB0aGUgV2lraVBhZ2UuCgoyMDAzLTA1LTE4ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xOS4KCiAgICAgICAgKiBQYWdlTWFuYWdlciBpcyBub3cgYmV0dGVyIHByb3RlY3RlZCBhZ2FpbnN0IG51bGwgcGFnZSBuYW1lcy4KCiAgICAgICAgKiBNYXNzIGNvbW1pdCBvZiBhdXRob3JpemF0aW9uIGNvZGUuCgoyMDAzLTA1LTEzICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xOC4KCiAgICAgICAgKiBXZWJsb2dQbHVnaW4gc2hvdWxkIGJlIG5vdyBxdWl0ZSBhIGxvdCBmYXN0ZXIgZGV0ZXJtaW5pbmcgd2hpY2gKICAgICAgICBwYWdlcyBhcmUgYmxvZyBlbnRyaWVzLiAgSSBoYWQgdG8gZG8gdGhpcyBiZWNhdXNlIG15IG93biB3ZWJsb2cKICAgICAgICB3YXMgZ2V0dGluZyB1bmJlYXJhYmx5IHNsb3cuCgogICAgICAgICogdjIuMS4xNy4KCiAgICAgICAgKiBPb3BzLCB3aWtpQ29udGV4dCB3YXMgYWNjaWRlbnRhbGx5IGNoYW5nZWQgdG8gcGFnZUNvbnRleHQgaW4KICAgICAgICBFZGl0LmpzcC4gIFJlcG9ydGVkIGJ5IEVyaWsgQnVubi4gCgoyMDAzLTA1LTExICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xNi4KCiAgICAgICAgKiBBZGRlZCBUZW1wbGF0ZURpciB0YWcsIHNvIHRoYXQgdGVtcGxhdGVzIGNhbiBub3cgZmlndXJlIG91dAogICAgICAgIHdoaWNoIHRlbXBsYXRlIHRoZXkgYmVsb25nIHRvLiAKCjIwMDMtMDUtMDkgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjE1LgoKICAgICAgICAqIFJlZHVjZWQgY29tbW9uIGNvZGUgaW4gbWFpbiBKU1AgZmlsZXMgYnkgY29tYmluaW5nIHRoZSBtb3N0CiAgICAgICAgY29tbW9ubHkgdXNlZCBtZXRob2RzIGludG8gV2lraUVuZ2luZS5jcmVhdGVDb250ZXh0KCkuCgoyMDAzLTA1LTA4ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xNC4KCiAgICAgICAgKiBBZGRlZCB0aGUgc2VhcmNoX2hpZ2hsaWdodCBzY3JpcHQgYXMgc3VnZ2VzdGVkIGJ5IFNhbnRpYWdvCiAgICAgICAgR2FsYS4gIEFmdGVyIGEgc2VhcmNoIHdoZW4geW91IGdvIHRvIGEgcGFnZSwgeW91IHdpbGwgc2VlIGFsbCBvZgogICAgICAgIHRoZSBzZWFyY2ggdGVybXMgaGlnaGxpZ2h0ZWQsIGFzIGRlZmluZWQgaW4gdGhlIENTUyBmaWxlLiAgSWYgeW91CiAgICAgICAgaGF2ZSB5b3VyIG93biB0ZW1wbGF0ZSwgYWRkIHRoZSBmb2xsb3dpbmcgdG8gdGhlIFZpZXdUZW1wbGF0ZS5qc3AKICAgICAgICBmaWxlOiAKICAgICAgICAKICAgICAgICA8c2NyaXB0IHNyYz0idGVtcGxhdGVzL2RlZmF1bHQvc2VhcmNoX2hpZ2hsaWdodC5qcyIKICAgICAgICB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0PgogICAgICAgIAogICAgICAgIEFuZCBkbyBub3QgZm9yZ2V0IHRvIGNvcHkgdGhlIHNlYXJjaF9oaWdobGlnaHQuanMgZmlsZSB0byB5b3VyCiAgICAgICAgdGVtcGxhdGUuCgoyMDAzLTA1LTA3ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xMy4KCiAgICAgICAgKiBSQ1NGaWxlUHJvdmlkZXIgbm8gbG9uZ2VyIHJlbGllcyBvbiBnYXJiYWdlIGNvbGxlY3Rpb24gdG8gY2xvc2UKICAgICAgICBQcm9jZXNzIHN0cmVhbXMuICBUaGlzIG1heSBoYXZlIHNvbWUgZWZmZWN0IG9uIHRoZSAibGVha2luZyBmaWxlCiAgICAgICAgaGFuZGxlcyIgcHJvYmxlbSBvbiBMaW51eC4gIFRlc3RpbmcuLi4KCjIwMDMtMDQtMTYgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjEyLgoKICAgICAgICAqIE5vdyBKU1AgcGFnZXMgYXJlIHByb3RlY3RlZCBhZ2FpbnN0IGVtcHR5IHBhZ2UgbmFtZXMuCgoyMDAzLTA0LTEzICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS4xMS4KCiAgICAgICAgKiBDaGVja2VkIGEgaHVnZSBhbW91bnQgb2YgYXV0aG9yaXphdGlvbiBjb2RlLCBtb3N0bHkgcmV3b3JrZWQKICAgICAgICBmcm9tIEpTUFdJS0lfQVVUSF9CUkFOQ0guICBTdGlsbCBtaXNzaW5nOiBhdXRoZW50aWNhdG9ycyAodGhhdCBpcywKICAgICAgICB0aGluZ3MgaW50ZXJmYWNlIHdpdGggVXNlck1hbmFnZXIgYW5kIG1hbmFnZSBwYXNzd29yZHMpIGFuZCBzb21lCiAgICAgICAgZmluZS1ncmFpbmVkbmVzcyBpbiBoYW5kbGluZyB0aGluZ3MuCgogICAgICAgICogRXJyb3IuanNwIGlzIG5vdyBhIGxvdCBtb3JlIHZlcmJvc2UgYWJvdXQgdGhlIGtpbmQgb2YgZXJyb3JzIGl0CiAgICAgICAgZmluZHMuIAoKICAgICAgICAqIHYyLjEuMTAuCgogICAgICAgICogQSBtYXNzIGltcG9ydCBvZiB0aGUgbW9yZSBzdGFibGUgcGFydHMgb2YgdGhlIG5ldyBhdXRoZW50aWNhdGlvbgogICAgICAgIHN5c3RlbS4gIE1vc3Qgbm90YWJseSwgdGhlcmUgYXJlIG5vdyBuZXcgcGFja2FnZXMgZm9yIGFjY2VzcwogICAgICAgIGNvbnRyb2wgbGlzdHMgKGNvbS5lY3lyZC5qc3B3aWtpLmFjbCkgYW5kIHBlcm1pc3Npb25zLiAgSG93ZXZlciwKICAgICAgICBub3RlIHRoYXQgbW9zdGx5IGV2ZXJ5dGhpbmcgZG9lcyBOT1Qgd29yayBub3cgLSBldmVuIHRlc3RzIGRvbid0CiAgICAgICAgY29tcGlsZSBiZWNhdXNlIG9mIHNvbWUgbWlzc2luZyBmaWxlcy4KCjIwMDMtMDQtMTIgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiBBIGZldyBmaXhlcyB0byBkZWZhdWx0IHRlbXBsYXRlIHRvIGJlIG1vcmUgWEhUTUwgY29tcGxpYW50LgoKICAgICAgICAqIHYyLjEuOS4KCiAgICAgICAgKiBDYWNoaW5nUHJvdmlkZXIgbm93IGFsc28gcHJvdmlkZXMgaW5mb3JtYXRpb24gb24gaG93IG1hbnkgcGFnZXMKICAgICAgICBhcmUgY3VycmVudGx5IGluIGNhY2hlIGFuZCBob3cgYmlnIHRoZXkgYXJlLgoKICAgICAgICAqIFRyYW5zbGF0b3JSZWFkZXIgbm93IG91dHB1dHMgYWxsIHRhZ3MgaW4gbG93ZXJjYXNlIHRvIGJlCiAgICAgICAgWEhUTUwtY29tcGxpYW50LiAKCjIwMDMtMDQtMTEgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjguCgogICAgICAgICogQ2hlY2tMb2NrVGFnIHdhcyBhIGJpdCBpbmNvbnNpc3RlbnQ6IGlmIHRoZSBwYWdlIHdhcyBsb2NrZWQgYnkKICAgICAgICB0aGUgY3VycmVudCB1c2VyLCBpdCB3b3VsZCBvZiBjb3Vyc2UgYWx3YXlzIGJlICJsb2NrZWQiLiAgVGhpcwogICAgICAgIG1lYW5zIHRoYXQgdGhlIHZhbHVlIG9mICJ1bmxvY2tlZCIgd2FzIGVzc2VudGlhbGx5IHVzZWxlc3MgZm9yCiAgICAgICAgRWRpdCBwYWdlcy4gIEkgYWRkZWQgYSBuZXcgdmFsdWUgZm9yICJtb2RlIjogIm93bmVkIi4gIFJlcG9ydGVkIGJ5CiAgICAgICAgUmFqZXNoIFJhaGVqYS4KCjIwMDMtMDQtMTAgIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiB2Mi4xLjcuCgogICAgICAgICogQWRkZWQgcHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgdGhlIE1ldGFXZWJsb2cgQVBJLiAgVGhlIGVuZHBvaW50CiAgICAgICAgaXMgdGhlIHNhbWUgZW5kcG9pbnQgdGhhdCBpcyB1c2VkIGJ5IHRoZSBub3JtYWwgd2lraSBSUEMgQVBJLgogICAgICAgIEN1cnJlbnRseSBvbmx5IG5ld1Bvc3QgYW5kIG5ld01lZGlhT2JqZWN0IGFyZSBzdXBwb3J0ZWQuCgoyMDAzLTA0LTA5ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogQWRkZWQgInN0eWxlIiwgImJvcmRlciIsIGFuZCAiY2xhc3MiIC1hdHRyaWJ1dGVzIHRvIHRoZSBJbWFnZQogICAgICAgIHBsdWdpbi4gIFN1Z2dlc3RlZCBieSBGb3N0ZXIgU2NodWNrZXIuCgogICAgICAgICogdjIuMS42LgoKMjAwMy0wNC0wOCAgRXJpayBCdW5uICA8RXJpay5CdW5uQG5vX3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIE1vZGlmaWVkIEZpbGVTeXN0ZW1Qcm92aWRlciwgQ2FjaGluZ1Byb3ZpZGVyOyBhZGRlZCAKICAgICAgICBTZWFyY2hNYXRjaGVyLiBDYWNoaW5nUHJvdmlkZXIgbm93IHVzZXMgY2FjaGVkIHBhZ2VzIHdoZW4KICAgICAgICBzZWFyY2hpbmcuIEJvdGggdGhlIGNhY2hlIGFuZCBTZWFyY2hNYXRjaGVyIGNhbiBzdGlsbCBiZSAKICAgICAgICBpbXByb3ZlZCBhIGxvdC4uLgoKMjAwMy0wNC0wNyAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuNS4KCiAgICAgICAgKiBBbGwgcGx1Z2lucyBzaG91bGQgbm93IGdlbmVyYXRlIHZhbGlkIFhIVE1MLgoKMjAwMy0wNC0wNiAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIHYyLjEuNC4KCiAgICAgICAgKiBBZGRlZCBJbWFnZSBwbHVnaW4sIHdoaWNoIGFsbG93cyBvbmUgdG8gaGF2ZSBtb3JlIGZpbmUgbGF5b3V0CiAgICAgICAgY29udHJvbCBvdmVyIGltYWdlcy4gIFN1Z2dlc3RlZCBieSBtYW55IHBlb3BsZSwgYnV0IHRoZSBjb2RlIGJhc2UKICAgICAgICBpcyBhbGwgbmV3LgoKICAgICAgICAqIFJlY2VudENoYW5nZXNQbHVnaW4gbm93IHVuZGVyc3RhbmRzIGFib3V0IGJhc2VVUkwgKG9vcHMpLiAgSXQgaXMKICAgICAgICBhbHNvIG5vdyBYSFRNTC1jb21wbGlhbnQuCgoyMDAzLTA0LTA0ICBKYW5uZSBKYWxrYW5lbiAgPEphbm5lLkphbGthbmVuQG5vc3BhbS5lY3lyZC5jb20+CgogICAgICAgICogdjIuMS4zLgoKICAgICAgICAqIFdlYkxvZ1BsdWdpbiBkaWQgbm90IGNoZWNrIGlmIGNvbW1lbnRzIHdlcmUgZGlzYWJsZWQuCgogICAgICAgICogQWRkZWQgdGhlIENhbGVuZGFyVGFnIHBhdGNoIGZvciBjaGFuZ2luZyBtb250aHMgZnJvbSBSb3lXLgoKMjAwMy0wNC0wMyAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIERlbW90ZWQgbG9nIG1lc3NhZ2VzIGluIEluY2x1ZGVUYWcgdG8gV0FSTiBsZXZlbCBmcm9tIEZBVEFMLiAgSXQKICAgICAgICBzZWVtcyB0aGF0IGluY2x1ZGluZyBjYW4gZmFpbCBvbiBzbyBtYW55IG9jY2FzaW9ucyB0aGF0IGl0IGRvZXMKICAgICAgICBub3QgbWFrZSBzZW5zIHRvIGNhbGwgdGhlbSBhcyBGQVRBTC4gIFJlcG9ydGVkIGJ5IEpvaG4gVm9sa2FyLgoKICAgICAgICAqIEFkZGVkIG5ldyBqc3B3aWtpLm9yZyBob21lIHBhZ2UgaW5mb3JtYXRpb24gdG8gZGlmZmVyZW50IGZpbGVzLgoKMjAwMy0wMy0yOSAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIElmIHRoZSB1c2VyIG5hbWUgd2FzIHJlY2VpdmVkIGZyb20gY29udGFpbmVyLCBKU1BXaWtpIHdvdWxkIGdldAogICAgICAgIGNvbmZ1c2VkIGlmIGl0IGNvbnRhaW5lZCBzcGFjZXMuICBSZXBvcnRlZCBieSBGb3N0ZXIgU2NodWNrZXIuCgogICAgICAgICogdjIuMS4yLgoKICAgICAgICAqIFRoZSBkZWZhdWx0IHRlbXBsYXRlIGlzIG5vdyBhIGJpdCBtb3JlIFhIVE1MLWNvbXBsaWFudCwgYnV0CiAgICAgICAgdGhlcmUgaXMgc3RpbGwgYSBsb25nIHdheSB0byBnby4gIFNsb3dseSwgc2xvd2x5Li4uCgogICAgICAgICogQ2hhbmdlZCB0aGUgZGVmYXVsdCB0ZW1wbGF0ZSB0byBoYXZlIGEgIkdvIHRvIHRvcCIgLWxpbmsgYXQgdGhlCiAgICAgICAgYm90dG9tIHRvIGVhc2UgbmF2aWdhdGlvbi4gIFN1Z2dlc3RlZCBieSBQYXVsIERvd25lcy4KCjIwMDMtMDMtMjggIEphbm5lIEphbGthbmVuICA8SmFubmUuSmFsa2FuZW5Abm9zcGFtLmVjeXJkLmNvbT4KCiAgICAgICAgKiAyLjEuMS4KCiAgICAgICAgKiBBZGRlZCBMaXN0TG9ja3NQbHVnaW4gdG8gdGhlIGRlZmF1bHQgU3lzdGVtSW5mbyBwYWdlLgoKICAgICAgICAqIEFkZGVkICJTYXZlIiBidXR0b24gdG8gUHJldmlldy4gIFRoYW5rcyB0byBNYXJrIEFuZGVyc29uIGZvciB0aGUKICAgICAgICBvcmlnaW5hbCBjb2RlLgoKMjAwMy0wMy0yNyAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIFJlbW92ZWQgYSBidW5jaCBvZiBleHRyYSBpbXBvcnRzIHRvIGNsZWFuIHVwIHRoZSBjb2RlIGEgYml0LgogICAgICAgIFRoYW5rcyB0byBKb2huIFZvbGthciBmb3IgcG9pbnRpbmcgdGhlc2Ugb3V0LgoKMjAwMy0wMy0yNSAgSmFubmUgSmFsa2FuZW4gIDxKYW5uZS5KYWxrYW5lbkBub3NwYW0uZWN5cmQuY29tPgoKICAgICAgICAqIEJyYW5jaGVkIG9mZiAyLjEuMCBkZXZlbG9wbWVudCBzZXJpZXMuCgo=