ZGlmZiAtLWdpdCBhL0xJQ0VOU0UudHh0IGIvTElDRU5TRS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MWVlYjkuLjAwMDAwMDAKLS0tIGEvTElDRU5TRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKLSAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KLQotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCi0KLSAgIDEuIERlZmluaXRpb25zLgotCi0gICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAotICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCi0KLSAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5Ci0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKLSAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KLSAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCi0gICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKLSAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCi0gICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKLSAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCi0KLSAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKLSAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCi0KLSAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAotICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgotICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KLQotICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKLSAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKLSAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKLSAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KLQotICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKLSAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKLSAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawotICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KLQotICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAotICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQotICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucwotICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKLSAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgotICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAotICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KLQotICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKLSAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKLSAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQotICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgotICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCi0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKLSAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKLSAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCi0gICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAotICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKLSAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAotICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKLSAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgotCi0gICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCi0gICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KLQotICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCi0gICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKLSAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCi0KLSAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAotICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKLSAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAotICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCi0gICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQotICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKLSAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKLSAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91Ci0gICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQotICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yawotICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKLSAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKLSAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQotICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgotCi0gICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQotICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0Ci0gICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQotICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLSAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCi0gICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKLQotICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwotICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAotCi0gICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKLSAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCi0gICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKLSAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCi0gICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAotCi0gICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKLSAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0Ci0gICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCi0gICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90Ci0gICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCi0gICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKLSAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCi0gICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCi0gICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAotICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwotICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKLSAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgotICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCi0gICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCi0gICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCi0gICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgotCi0gICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKLSAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKLSAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAotICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCi0gICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgotCi0gICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCi0gICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKLSAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KLSAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKLSAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCi0gICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCi0KLSAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKLSAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKLSAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQotICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCi0KLSAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgotICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAotICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKLSAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCi0gICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCi0gICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKLSAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQotICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgotCi0gICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKLSAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAotICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKLSAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCi0gICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCi0gICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKLSAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKLSAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKLSAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCi0gICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCi0gICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCi0KLSAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKLSAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCi0gICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAotICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKLSAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5Ci0gICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgotICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAotICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5Ci0gICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCi0gICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KLQotICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCi0KLSAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KLQotICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKLSAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKLSAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCi0gICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQotICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCi0gICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCi0gICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKLSAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KLQotICAgQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJdCi0KLSAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9OT1RJQ0UudHh0IGIvTk9USUNFLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU3NWM3YS4uMDAwMDAwMAotLS0gYS9OT1RJQ0UudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1BcGFjaGUgTWF2ZW4tU0NNCi1Db3B5cmlnaHQgMjAwMy0yMDA2IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbgotCi1UaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGF0Ci1UaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1hcGkvcG9tLnhtbCBiL21hdmVuLXNjbS1hcGkvcG9tLnhtbAppbmRleCBmN2Y2MDFkLi4xZDA0YjBmIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tYXBpL3BvbS54bWwKKysrIGIvbWF2ZW4tc2NtLWFwaS9wb20ueG1sCkBAIC0xLDQgKzEsNiBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IS0tCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8IS0tCiAgIH4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQogICB+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogICB+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCkBAIC0xOCwyMCArMjAsMjMgQEAKICAgLS0+CiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKICAgPHBhcmVudD4KLSAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY208L2FydGlmYWN0SWQ+CiAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+Ci0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwogICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tYXBpPC9hcnRpZmFjdElkPgorCiAgIDxuYW1lPk1hdmVuIFNDTSBBUEk8L25hbWU+Ci0gIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KKyAgPGRlc2NyaXB0aW9uPlRoZSBTQ00gQVBJIHByb3ZpZGVzIG1lY2hhbmlzbXMgdG8gbWFuYWdlIGFsbCBTQ00gdG9vbHMuPC9kZXNjcmlwdGlvbj4KKwogICA8ZGVwZW5kZW5jaWVzPgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjMuOC4yPC92ZXJzaW9uPgogICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgogICAgIDwvZGVwZW5kZW5jeT4KICAgPC9kZXBlbmRlbmNpZXM+CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vQWJzdHJhY3RTY21WZXJzaW9uLmphdmEgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vQWJzdHJhY3RTY21WZXJzaW9uLmphdmEKaW5kZXggOWRkZDhlMy4uODdhMTQxNCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL0Fic3RyYWN0U2NtVmVyc2lvbi5qYXZhCisrKyBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9BYnN0cmFjdFNjbVZlcnNpb24uamF2YQpAQCAtMjgsMTYgKzI4LDIxIEBACiB7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKIAorICAgIC8qKgorICAgICAqIEBwYXJhbSBuYW1lIGNvdWxkIGJlIG51bGwKKyAgICAgKi8KICAgICBwdWJsaWMgQWJzdHJhY3RTY21WZXJzaW9uKCBTdHJpbmcgbmFtZSApCiAgICAgewogICAgICAgICBzZXROYW1lKCBuYW1lICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKCBTdHJpbmcgbmFtZSApCiAgICAgewogICAgICAgICBpZiAoIG5hbWUgIT0gbnVsbCApCkBAIC00Nyw5ICs1Miw3IEBACiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiB0aGUgdmVyc2lvbiBuYW1lCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiBnZXROYW1lKCk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vQ2hhbmdlU2V0LmphdmEgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vQ2hhbmdlU2V0LmphdmEKaW5kZXggZTcxNzY2ZS4uYjhhNGMyYiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL0NoYW5nZVNldC5qYXZhCisrKyBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9DaGFuZ2VTZXQuamF2YQpAQCAtMzc0LDkgKzM3NCw3IEBACiAgICAgICAgIHJldHVybiBUSU1FX0ZPUk1BVC5mb3JtYXQoIGdldERhdGUoKSApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gUmV0dXJucyBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNoYW5nZXNldAotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCiAgICAgewogICAgICAgICBTdHJpbmcgcmVzdWx0ID0gYXV0aG9yICsgIlxuIiArIGRhdGUgKyAiXG4iOwpAQCAtNDQyLDkgKzQ0MCw3IEBACiAgICAgICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoIE9iamVjdCBvYmogKQogICAgIHsKICAgICAgICAgaWYgKCBvYmogaW5zdGFuY2VvZiBDaGFuZ2VTZXQgKQpAQCAtNDYwLDYgKzQ1NiwxOCBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KKyAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkKKyAgICB7CisgICAgICAgIGZpbmFsIGludCBwcmltZSA9IDMxOworICAgICAgICBpbnQgcmVzdWx0ID0gMTsKKyAgICAgICAgcmVzdWx0ID0gcHJpbWUgKiByZXN1bHQgKyAoICggYXV0aG9yID09IG51bGwgKSA/IDAgOiBhdXRob3IuaGFzaENvZGUoKSApOworICAgICAgICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArICggKCBjb21tZW50ID09IG51bGwgKSA/IDAgOiBjb21tZW50Lmhhc2hDb2RlKCkgKTsKKyAgICAgICAgcmVzdWx0ID0gcHJpbWUgKiByZXN1bHQgKyAoICggZGF0ZSA9PSBudWxsICkgPyAwIDogZGF0ZS5oYXNoQ29kZSgpICk7CisgICAgICAgIHJlc3VsdCA9IHByaW1lICogcmVzdWx0ICsgKCAoIGZpbGVzID09IG51bGwgKSA/IDAgOiBmaWxlcy5oYXNoQ29kZSgpICk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogcmVtb3ZlIGEgPGNvZGU+XV0+PC9jb2RlPiBmcm9tIGNvbW1lbnRzIChyZXBsYWNlIGl0IHdpdGggPGNvZGU+XSBdID48L2NvZGU+KS4KICAgICAgKgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL0NvbW1hbmRQYXJhbWV0ZXIuamF2YSBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9Db21tYW5kUGFyYW1ldGVyLmphdmEKaW5kZXggNTVjMWVmNy4uNDg4N2VhNSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL0NvbW1hbmRQYXJhbWV0ZXIuamF2YQorKysgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vQ29tbWFuZFBhcmFtZXRlci5qYXZhCkBAIC0yNSw0MSArMjUsNDEgQEAKICAqLwogcHVibGljIGNsYXNzIENvbW1hbmRQYXJhbWV0ZXIKIHsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIENvbW1hbmRQYXJhbWV0ZXIgQklOQVJZID0gbmV3IENvbW1hbmRQYXJhbWV0ZXIoICJiaW5hcnkiICk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBDb21tYW5kUGFyYW1ldGVyIEJJTkFSWSA9IG5ldyBDb21tYW5kUGFyYW1ldGVyKCAiYmluYXJ5IiApOwogCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBDb21tYW5kUGFyYW1ldGVyIFJFQ1VSU0lWRSA9IG5ldyBDb21tYW5kUGFyYW1ldGVyKCAicmVjdXJzaXZlIiApOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ29tbWFuZFBhcmFtZXRlciBSRUNVUlNJVkUgPSBuZXcgQ29tbWFuZFBhcmFtZXRlciggInJlY3Vyc2l2ZSIgKTsKIAotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29tbWFuZFBhcmFtZXRlciBNRVNTQUdFID0gbmV3IENvbW1hbmRQYXJhbWV0ZXIoICJtZXNzYWdlIiApOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ29tbWFuZFBhcmFtZXRlciBNRVNTQUdFID0gbmV3IENvbW1hbmRQYXJhbWV0ZXIoICJtZXNzYWdlIiApOwogCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBDb21tYW5kUGFyYW1ldGVyIEJSQU5DSF9OQU1FID0gbmV3IENvbW1hbmRQYXJhbWV0ZXIoICJicmFuY2hOYW1lIiApOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ29tbWFuZFBhcmFtZXRlciBCUkFOQ0hfTkFNRSA9IG5ldyBDb21tYW5kUGFyYW1ldGVyKCAiYnJhbmNoTmFtZSIgKTsKIAotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29tbWFuZFBhcmFtZXRlciBTVEFSVF9EQVRFID0gbmV3IENvbW1hbmRQYXJhbWV0ZXIoICJzdGFydERhdGUiICk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBDb21tYW5kUGFyYW1ldGVyIFNUQVJUX0RBVEUgPSBuZXcgQ29tbWFuZFBhcmFtZXRlciggInN0YXJ0RGF0ZSIgKTsKIAotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29tbWFuZFBhcmFtZXRlciBFTkRfREFURSA9IG5ldyBDb21tYW5kUGFyYW1ldGVyKCAiZW5kRGF0ZSIgKTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENvbW1hbmRQYXJhbWV0ZXIgRU5EX0RBVEUgPSBuZXcgQ29tbWFuZFBhcmFtZXRlciggImVuZERhdGUiICk7CiAKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIENvbW1hbmRQYXJhbWV0ZXIgTlVNX0RBWVMgPSBuZXcgQ29tbWFuZFBhcmFtZXRlciggIm51bURheXMiICk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBDb21tYW5kUGFyYW1ldGVyIE5VTV9EQVlTID0gbmV3IENvbW1hbmRQYXJhbWV0ZXIoICJudW1EYXlzIiApOwogCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBDb21tYW5kUGFyYW1ldGVyIEJSQU5DSCA9IG5ldyBDb21tYW5kUGFyYW1ldGVyKCAiYnJhbmNoIiApOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ29tbWFuZFBhcmFtZXRlciBCUkFOQ0ggPSBuZXcgQ29tbWFuZFBhcmFtZXRlciggImJyYW5jaCIgKTsKIAotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29tbWFuZFBhcmFtZXRlciBTVEFSVF9TQ01fVkVSU0lPTiA9IG5ldyBDb21tYW5kUGFyYW1ldGVyKCAic3RhcnRTY21WZXJzaW9uIiApOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ29tbWFuZFBhcmFtZXRlciBTVEFSVF9TQ01fVkVSU0lPTiA9IG5ldyBDb21tYW5kUGFyYW1ldGVyKCAic3RhcnRTY21WZXJzaW9uIiApOwogCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBDb21tYW5kUGFyYW1ldGVyIEVORF9TQ01fVkVSU0lPTiA9IG5ldyBDb21tYW5kUGFyYW1ldGVyKCAiZW5kU2NtVmVyc2lvbiIgKTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENvbW1hbmRQYXJhbWV0ZXIgRU5EX1NDTV9WRVJTSU9OID0gbmV3IENvbW1hbmRQYXJhbWV0ZXIoICJlbmRTY21WZXJzaW9uIiApOwogCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBDb21tYW5kUGFyYW1ldGVyIENIQU5HRUxPR19EQVRFX1BBVFRFUk4gPSBuZXcgQ29tbWFuZFBhcmFtZXRlciggImNoYW5nZWxvZ0RhdGVQYXR0ZXJuIiApOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ29tbWFuZFBhcmFtZXRlciBDSEFOR0VMT0dfREFURV9QQVRURVJOID0gbmV3IENvbW1hbmRQYXJhbWV0ZXIoICJjaGFuZ2Vsb2dEYXRlUGF0dGVybiIgKTsKIAotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29tbWFuZFBhcmFtZXRlciBTQ01fVkVSU0lPTiA9IG5ldyBDb21tYW5kUGFyYW1ldGVyKCAic2NtVmVyc2lvbiIgKTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENvbW1hbmRQYXJhbWV0ZXIgU0NNX1ZFUlNJT04gPSBuZXcgQ29tbWFuZFBhcmFtZXRlciggInNjbVZlcnNpb24iICk7CiAKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIENvbW1hbmRQYXJhbWV0ZXIgVEFHX05BTUUgPSBuZXcgQ29tbWFuZFBhcmFtZXRlciggInRhZ05hbWUiICk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBDb21tYW5kUGFyYW1ldGVyIFRBR19OQU1FID0gbmV3IENvbW1hbmRQYXJhbWV0ZXIoICJ0YWdOYW1lIiApOwogCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBDb21tYW5kUGFyYW1ldGVyIEZJTEUgPSBuZXcgQ29tbWFuZFBhcmFtZXRlciggImZpbGUiICk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBDb21tYW5kUGFyYW1ldGVyIEZJTEUgPSBuZXcgQ29tbWFuZFBhcmFtZXRlciggImZpbGUiICk7CiAKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIENvbW1hbmRQYXJhbWV0ZXIgRklMRVMgPSBuZXcgQ29tbWFuZFBhcmFtZXRlciggImZpbGVzIiApOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ29tbWFuZFBhcmFtZXRlciBGSUxFUyA9IG5ldyBDb21tYW5kUGFyYW1ldGVyKCAiZmlsZXMiICk7CiAKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIENvbW1hbmRQYXJhbWV0ZXIgT1VUUFVUX0ZJTEUgPSBuZXcgQ29tbWFuZFBhcmFtZXRlciggIm91dHB1dEZpbGUiICk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBDb21tYW5kUGFyYW1ldGVyIE9VVFBVVF9GSUxFID0gbmV3IENvbW1hbmRQYXJhbWV0ZXIoICJvdXRwdXRGaWxlIiApOwogCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBDb21tYW5kUGFyYW1ldGVyIE9VVFBVVF9ESVJFQ1RPUlkgPSBuZXcgQ29tbWFuZFBhcmFtZXRlciggIm91dHB1dERpcmVjdG9yeSIgKTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENvbW1hbmRQYXJhbWV0ZXIgT1VUUFVUX0RJUkVDVE9SWSA9IG5ldyBDb21tYW5kUGFyYW1ldGVyKCAib3V0cHV0RGlyZWN0b3J5IiApOwogCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBDb21tYW5kUGFyYW1ldGVyIFJVTl9DSEFOR0VMT0dfV0lUSF9VUERBVEUgPQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ29tbWFuZFBhcmFtZXRlciBSVU5fQ0hBTkdFTE9HX1dJVEhfVVBEQVRFID0KICAgICAgICAgbmV3IENvbW1hbmRQYXJhbWV0ZXIoICJydW5fY2hhbmdlbG9nX3dpdGhfdXBkYXRlIiApOwogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vQ29tbWFuZFBhcmFtZXRlcnMuamF2YSBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9Db21tYW5kUGFyYW1ldGVycy5qYXZhCmluZGV4IDJhMTZlNWUuLmY3MTVkZGQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9Db21tYW5kUGFyYW1ldGVycy5qYXZhCisrKyBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9Db21tYW5kUGFyYW1ldGVycy5qYXZhCkBAIC0xMTIsNiArMTEyLDcgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlcgogICAgICAqIEByZXR1cm4gVGhlIHBhcmFtZXRlciB2YWx1ZSBhcyBhIGludAorICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgVGhlIGRlZmF1bHRWYWx1ZQogICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIHRoZSB2YWx1ZSBpcyBpbiB0aGUgd3JvbmcgdHlwZQogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0SW50KCBDb21tYW5kUGFyYW1ldGVyIHBhcmFtZXRlciwgaW50IGRlZmF1bHRWYWx1ZSApCkBAIC0xNjEsNiArMTYyLDcgQEAKICAgICAgKiBSZXR1cm4gdGhlIHBhcmFtZXRlciB2YWx1ZSBhcyBTdHJpbmcgb3IgdGhlIGRlZmF1bHQgdmFsdWUgaWYgaXQgZG9lc24ndCBleGlzdC4KICAgICAgKgogICAgICAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlcgorICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgVGhlIGRlZmF1bHRWYWx1ZQogICAgICAqIEByZXR1cm4gVGhlIHBhcmFtZXRlciB2YWx1ZSBhcyBhIERhdGUKICAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiB0aGUgdmFsdWUgaXMgaW4gdGhlIHdyb25nIHR5cGUKICAgICAgKi8KQEAgLTI0OCwxMiArMjUwLDI0IEBACiAgICAgLy8gRmlsZVtdCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqCisgICAgICogQHBhcmFtIHBhcmFtZXRlciBub3QgbnVsbAorICAgICAqIEByZXR1cm4gYW4gYXJyYXkgb2YgZmlsZXMKKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKKyAgICAgKi8KICAgICBwdWJsaWMgRmlsZVtdIGdldEZpbGVBcnJheSggQ29tbWFuZFBhcmFtZXRlciBwYXJhbWV0ZXIgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gKEZpbGVbXSkgZ2V0T2JqZWN0KCBGaWxlW10uY2xhc3MsIHBhcmFtZXRlciApOwogICAgIH0KIAorICAgIC8qKgorICAgICAqCisgICAgICogQHBhcmFtIHBhcmFtZXRlciBub3QgbnVsbAorICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgY291bGQgYmUgbnVsbAorICAgICAqIEByZXR1cm4gYW4gYXJyYXkgb2YgZmlsZXMKKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKKyAgICAgKi8KICAgICBwdWJsaWMgRmlsZVtdIGdldEZpbGVBcnJheSggQ29tbWFuZFBhcmFtZXRlciBwYXJhbWV0ZXIsIEZpbGVbXSBkZWZhdWx0VmFsdWUgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtMjkwLDYgKzMwNCw3IEBACiAgICAgICoKICAgICAgKiBAcGFyYW0gY2xhenogICAgIFRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXIgdmFsdWUKICAgICAgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXIKKyAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIFRoZSBkZWZhdWx0VmFsdWUKICAgICAgKiBAcmV0dXJuIFRoZSBwYXJhbWV0ZXIgdmFsdWUKICAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiB0aGUgZGVmYXVsdFZhbHVlIGlzIGluIHRoZSB3cm9uZyB0eXBlCiAgICAgICovCkBAIC0zMDUsOCArMzIwLDggQEAKIAogICAgICAgICBpZiAoIGNsYXp6ICE9IG51bGwgJiYgIWNsYXp6LmlzQXNzaWduYWJsZUZyb20oIG9iamVjdC5nZXRDbGFzcygpICkgKQogICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgU2NtRXhjZXB0aW9uKCAiV3JvbmcgcGFyYW1ldGVyIHR5cGUgZm9yICciICsgcGFyYW1ldGVyLmdldE5hbWUoKSArICIuICIgKyAiRXhwZWN0ZWQ6ICIgKwotICAgICAgICAgICAgICAgIGNsYXp6LmdldE5hbWUoKSArICIsIGdvdDogIiArIG9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKSApOworICAgICAgICAgICAgdGhyb3cgbmV3IFNjbUV4Y2VwdGlvbiggIldyb25nIHBhcmFtZXRlciB0eXBlIGZvciAnIiArIHBhcmFtZXRlci5nZXROYW1lKCkgKyAiLiAiICsgIkV4cGVjdGVkOiAiCisgICAgICAgICAgICAgICAgKyBjbGF6ei5nZXROYW1lKCkgKyAiLCBnb3Q6ICIgKyBvYmplY3QuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBvYmplY3Q7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vTm9TdWNoQ29tbWFuZFNjbUV4Y2VwdGlvbi5qYXZhIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL05vU3VjaENvbW1hbmRTY21FeGNlcHRpb24uamF2YQppbmRleCBiMWY0MmU3Li40OTA2YmUzIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vTm9TdWNoQ29tbWFuZFNjbUV4Y2VwdGlvbi5qYXZhCisrKyBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9Ob1N1Y2hDb21tYW5kU2NtRXhjZXB0aW9uLmphdmEKQEAgLTI2LDYgKzI2LDkgQEAKIHB1YmxpYyBjbGFzcyBOb1N1Y2hDb21tYW5kU2NtRXhjZXB0aW9uCiAgICAgZXh0ZW5kcyBTY21FeGNlcHRpb24KIHsKKworICAgIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA1Nzg5NjU3NTU0NjY0NzAzMjIxTDsKKwogICAgIHByaXZhdGUgU3RyaW5nIGNvbW1hbmROYW1lOwogCiAgICAgcHVibGljIE5vU3VjaENvbW1hbmRTY21FeGNlcHRpb24oIFN0cmluZyBjb21tYW5kTmFtZSApCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vU2NtQnJhbmNoLmphdmEgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vU2NtQnJhbmNoLmphdmEKaW5kZXggYjUwZDkzZi4uZmVhMGRjNSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL1NjbUJyYW5jaC5qYXZhCisrKyBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9TY21CcmFuY2guamF2YQpAQCAtMjYsMTEgKzI2LDE1IEBACiBwdWJsaWMgY2xhc3MgU2NtQnJhbmNoCiAgICAgZXh0ZW5kcyBBYnN0cmFjdFNjbVZlcnNpb24KIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpCiAgICAgewogICAgICAgICByZXR1cm4gIkJyYW5jaCI7CiAgICAgfQogCisgICAgLyoqCisgICAgICogQHBhcmFtIG5hbWUgdGhlIGJyYW5jaCBuYW1lCisgICAgICovCiAgICAgcHVibGljIFNjbUJyYW5jaCggU3RyaW5nIG5hbWUgKQogICAgIHsKICAgICAgICAgc3VwZXIoIG5hbWUgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9TY21FeGNlcHRpb24uamF2YSBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9TY21FeGNlcHRpb24uamF2YQppbmRleCBiMzM2MmVkLi5lOTVhYWZkIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vU2NtRXhjZXB0aW9uLmphdmEKKysrIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL1NjbUV4Y2VwdGlvbi5qYXZhCkBAIC0yNiw4ICsyNiwxMCBAQAogcHVibGljIGNsYXNzIFNjbUV4Y2VwdGlvbgogICAgIGV4dGVuZHMgRXhjZXB0aW9uCiB7CisgICAgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDUwNDE5NjU1NjkxNTQzODUzMjNMOworCiAgICAgLyoqCi0gICAgICogQHBhcmFtIG1lc3NhZ2UKKyAgICAgKiBAcGFyYW0gbWVzc2FnZSB0aGUgbWVzc2FnZSBjb3VsZCBiZSBudWxsCiAgICAgICovCiAgICAgcHVibGljIFNjbUV4Y2VwdGlvbiggU3RyaW5nIG1lc3NhZ2UgKQogICAgIHsKQEAgLTM1LDggKzM3LDggQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0gbWVzc2FnZQotICAgICAqIEBwYXJhbSBjYXVzZQorICAgICAqIEBwYXJhbSBtZXNzYWdlIHRoZSBtZXNzYWdlIGNvdWxkIGJlIG51bGwKKyAgICAgKiBAcGFyYW0gY2F1c2UgdGhlIGNhdXNlIGNvdWxkIGJlIG51bGwKICAgICAgKi8KICAgICBwdWJsaWMgU2NtRXhjZXB0aW9uKCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGNhdXNlICkKICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vU2NtRmlsZS5qYXZhIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL1NjbUZpbGUuamF2YQppbmRleCA1NWVjMmUzLi4wZjQ4ODkyIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vU2NtRmlsZS5qYXZhCisrKyBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9TY21GaWxlLmphdmEKQEAgLTYxLDYgKzYxLDcgQEAKICAgICAvLyBDb21wYXJhYmxlIEltcGxlbWVudGF0aW9uCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgaW50IGNvbXBhcmVUbyggT2JqZWN0IG90aGVyICkKICAgICB7CiAgICAgICAgIHJldHVybiAoIChTY21GaWxlKSBvdGhlciApLmdldFBhdGgoKS5jb21wYXJlVG8oIHBhdGggKTsKQEAgLTcwLDYgKzcxLDcgQEAKICAgICAvLyBPYmplY3Qgb3ZlcnJpZGVzCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoIE9iamVjdCBvdGhlciApCiAgICAgewogICAgICAgICBpZiAoICEoIG90aGVyIGluc3RhbmNlb2YgU2NtRmlsZSApICkKQEAgLTgwLDExICs4MiwxMyBAQAogICAgICAgICByZXR1cm4gKCAoU2NtRmlsZSkgb3RoZXIgKS5nZXRQYXRoKCkuZXF1YWxzKCBwYXRoICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBwYXRoLmhhc2hDb2RlKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiAiWyIgKyBwYXRoICsgIjoiICsgc3RhdHVzICsgIl0iOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL1NjbUZpbGVTZXQuamF2YSBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9TY21GaWxlU2V0LmphdmEKaW5kZXggM2Y2MjliNC4uNmYxMTkwYiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL1NjbUZpbGVTZXQuamF2YQorKysgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vU2NtRmlsZVNldC5qYXZhCkBAIC03NCw3ICs3NCw3IEBACiAgICAgICogQHBhcmFtIGluY2x1ZGVzIEFudCBwYXR0ZXJuIGZvciBmaWxlcyB0byBpbmNsdWRlCiAgICAgICogQHBhcmFtIGV4Y2x1ZGVzIEFudCBwYXR0ZXJuIGZvciBmaWxlcyB0byBleGNsdWRlLAogICAgICAqICAgICAgICAgICAgICAgICBpZiBudWxsIERFRkFVTFRfRVhDTFVERVMgaXMgdXNlZCwgZWxzZSBERUZBVUxUX0VYQ0xVREVTIGlzIGFkZGVkLgotICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIHB1YmxpYyBTY21GaWxlU2V0KCBGaWxlIGJhc2VkaXIsIFN0cmluZyBpbmNsdWRlcywgU3RyaW5nIGV4Y2x1ZGVzICkKICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCkBAIC05OCw3ICs5OCw3IEBACiAgICAgICoKICAgICAgKiBAcGFyYW0gYmFzZWRpciAgZGlyZWN0b3J5IGZpbGVzIGFyZSByZWxhdGl2ZSB0bwogICAgICAqIEBwYXJhbSBpbmNsdWRlcyBBbnQgcGF0dGVybiBmb3IgZmlsZXMgdG8gaW5jbHVkZQotICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIGlmIGFueQogICAgICAqIEBzaW5jZSAxLjAKICAgICAgKi8KICAgICBwdWJsaWMgU2NtRmlsZVNldCggRmlsZSBiYXNlZGlyLCBTdHJpbmcgaW5jbHVkZXMgKQpAQCAtMTcyLDYgKzE3Miw3IEBACiAgICAgICAgIHJldHVybiB0aGlzLmZpbGVzOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCiAgICAgewogICAgICAgICByZXR1cm4gImJhc2VkaXIgPSAiICsgYmFzZWRpciArICI7IGZpbGVzID0gIiArIGZpbGVzOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL1NjbUZpbGVTdGF0dXMuamF2YSBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9TY21GaWxlU3RhdHVzLmphdmEKaW5kZXggMTI4NDJhNS4uNGRlYWM2YiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL1NjbUZpbGVTdGF0dXMuamF2YQorKysgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vU2NtRmlsZVN0YXR1cy5qYXZhCkBAIC0zNywxNCArMzcsMTQgQEAKICAgICAvKioKICAgICAgKiBGaWxlIGlzIGFkZGVkIHRvIHRoZSB3b3JraW5nIHRyZWUgYW5kIGRvZXMgbm90IHlldCBleGlzdCBpbiB0aGUgcmVwb3NpdG9yeQogICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU2NtRmlsZVN0YXR1cyBBRERFRCA9IG5ldyBTY21GaWxlU3RhdHVzKCAiYWRkZWQiICk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY21GaWxlU3RhdHVzIEFEREVEID0gbmV3IFNjbUZpbGVTdGF0dXMoICJhZGRlZCIgKTsKIAogICAgIC8qKgogICAgICAqIEZpbGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSB3b3JraW5nIHRyZWUgdGh1cyBub3QgcmV2aXNpb25lZCBhbnltb3JlLjxicj4KICAgICAgKiBUaGUgZmlsZSBpcyBzdGlsbCBwcmVzZW50IGluIHRoZSByZXBvc2l0b3J5Ljxicj4KICAgICAgKiBUaGUgZmlsZSBjb3VsZCBiZSBkZWxldGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZGVwZW5kaW5nIG9uIHRoZSBwcm92aWRlci4KICAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFNjbUZpbGVTdGF0dXMgREVMRVRFRCA9IG5ldyBTY21GaWxlU3RhdHVzKCAiZGVsZXRlZCIgKTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjbUZpbGVTdGF0dXMgREVMRVRFRCA9IG5ldyBTY21GaWxlU3RhdHVzKCAiZGVsZXRlZCIgKTsKIAogICAgIC8qKgogICAgICAqIFRoZSBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkIGluIHRoZSB3b3JraW5nIHRyZWUuCkBAIC01OSwyOSArNTksMjkgQEAKICAgICAvKioKICAgICAgKiBGaWxlIGZyb20gd29ya2luZyB0cmVlIGlzIGNoZWNrZWQgaW50byB0aGUgcmVwb3NpdG9yeQogICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU2NtRmlsZVN0YXR1cyBDSEVDS0VEX0lOID0gbmV3IFNjbUZpbGVTdGF0dXMoICJjaGVja2VkLWluIiApOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NtRmlsZVN0YXR1cyBDSEVDS0VEX0lOID0gbmV3IFNjbUZpbGVTdGF0dXMoICJjaGVja2VkLWluIiApOwogCiAgICAgLyoqCiAgICAgICogRmlsZSBpcyBjaGVja2VkIG91dCBmcm9tIHRoZSByZXBvc2l0b3J5IGFuZCBpbnRvIHRoZSB3b3JraW5nIHRyZWUKICAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFNjbUZpbGVTdGF0dXMgQ0hFQ0tFRF9PVVQgPSBuZXcgU2NtRmlsZVN0YXR1cyggImNoZWNrZWQtb3V0IiApOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NtRmlsZVN0YXR1cyBDSEVDS0VEX09VVCA9IG5ldyBTY21GaWxlU3RhdHVzKCAiY2hlY2tlZC1vdXQiICk7CiAKICAgICAvKioKICAgICAgKiBUaGUgZmlsZSBpbiB0aGUgd29ya2luZyB0cmVlIGhhcyBkaWZmZXJlbmNlcyB0byB0aGUgb25lIGluIHJlcG9zaXRvcnkgdGhhdAogICAgICAqIGNvbmZsaWN0cyBpZS4gaXQgY2Fubm90IGF1dG9tYXRpY2FsbHkgYmUgbWVyZ2VkLgogICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU2NtRmlsZVN0YXR1cyBDT05GTElDVCA9IG5ldyBTY21GaWxlU3RhdHVzKCAiY29uZmxpY3QiICk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY21GaWxlU3RhdHVzIENPTkZMSUNUID0gbmV3IFNjbUZpbGVTdGF0dXMoICJjb25mbGljdCIgKTsKIAogICAgIC8qKgogICAgICAqIFRoZSBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUgaGFzIGJlZW4gdXBkYXRlZCB3aXRoIGNoYW5nZXMgZnJvbSB0aGUgcmVwb3NpdG9yeS4KICAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFNjbUZpbGVTdGF0dXMgUEFUQ0hFRCA9IG5ldyBTY21GaWxlU3RhdHVzKCAicGF0Y2hlZCIgKTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjbUZpbGVTdGF0dXMgUEFUQ0hFRCA9IG5ldyBTY21GaWxlU3RhdHVzKCAicGF0Y2hlZCIgKTsKIAogICAgIC8qKgogICAgICAqIFRoZSBmaWxlIGlzIGFkZGVkLCByZW1vdmVkIG9yIHVwZGF0ZWQgZnJvbSB0aGUgcmVwb3NpdG9yeSwgdGh1cyBpdHMKICAgICAgKiB1cC10by1kYXRlIHdpdGggdGhlIHZlcnNpb24gaW4gdGhlIHJlcG9zaXRvcnkuIFNlZSBhbHNvIGlzVXBkYXRlKCkKICAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFNjbUZpbGVTdGF0dXMgVVBEQVRFRCA9IG5ldyBTY21GaWxlU3RhdHVzKCAidXBkYXRlZCIgKTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjbUZpbGVTdGF0dXMgVVBEQVRFRCA9IG5ldyBTY21GaWxlU3RhdHVzKCAidXBkYXRlZCIgKTsKIAogICAgIC8qKgogICAgICAqIFRoZSBmaWxlIGlzIHBhcnQgb2YgYSB0YWcuCkBAIC0xMDgsNiArMTA4LDcgQEAKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CkBAIC0xNDgsNiArMTQ5LDggQEAKICAgICAgKiB0aGF0IHRoZSB3b3JraW5nIHRyZWUgaGFzIGNoYW5nZWQuPGJyPgogICAgICAqIEFuIHVwZGF0ZSBpbmRpY2F0ZXMgdGhlIG9wcG9zaXRlLCB0aGF0IHRoZSByZXBvc2l0b3J5IHdhcyBjaGFuZ2VkIGNvbXBhcmVkIHRvCiAgICAgICogdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhhdCBpdCBpcyBub3cgc3luY2hyb25pemVkIHVubGVzcyB0aGVyZSBhcmUgY29uZmxpY3RzLgorICAgICAqCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBzdGF0dXMgaXMgY29uZmxpY3QsIHVwZGF0ZWQgb3IgcGF0Y2hlZC4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1VwZGF0ZSgpCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL1NjbVJlc3VsdC5qYXZhIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL1NjbVJlc3VsdC5qYXZhCmluZGV4IDA2ZWZkMWYuLjVlYzlhZWIgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9TY21SZXN1bHQuamF2YQorKysgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vU2NtUmVzdWx0LmphdmEKQEAgLTM4LDYgKzM4LDggQEAKICAgICAgKiA8cC8+CiAgICAgICogVHlwaWNhbGx5IHVzZWQgZnJvbSBkZXJpdmVkIGNsYXNzZXMgd2hlbiB3cmFwcGluZyBhIFNjbVJlc3VsdAogICAgICAqIGludG8gYSBzcGVjaWZpYyB0eXBlIGVnLiBBZGRTY21SZXN1bHQKKyAgICAgKgorICAgICAqIEBwYXJhbSBzY21SZXN1bHQgbm90IG51bGwKICAgICAgKi8KICAgICBwdWJsaWMgU2NtUmVzdWx0KCBTY21SZXN1bHQgc2NtUmVzdWx0ICkKICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vU2NtUmV2aXNpb24uamF2YSBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9TY21SZXZpc2lvbi5qYXZhCmluZGV4IGI0MjkxMDUuLjFkMTRhZWEgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9TY21SZXZpc2lvbi5qYXZhCisrKyBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9TY21SZXZpc2lvbi5qYXZhCkBAIC0yNiw2ICsyNiw3IEBACiBwdWJsaWMgY2xhc3MgU2NtUmV2aXNpb24KICAgICBleHRlbmRzIEFic3RyYWN0U2NtVmVyc2lvbgogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRUeXBlKCkKICAgICB7CiAgICAgICAgIHJldHVybiAiUmV2aXNpb24iOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL1NjbVRhZy5qYXZhIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL1NjbVRhZy5qYXZhCmluZGV4IDYxMDhlMGEuLjEwZTUwNzggMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9TY21UYWcuamF2YQorKysgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vU2NtVGFnLmphdmEKQEAgLTI2LDExICsyNiwxNSBAQAogcHVibGljIGNsYXNzIFNjbVRhZwogICAgIGV4dGVuZHMgU2NtQnJhbmNoCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuICJUYWciOwogICAgIH0KIAorICAgIC8qKgorICAgICAqIEBwYXJhbSBuYW1lIG5vdCBudWxsCisgICAgICovCiAgICAgcHVibGljIFNjbVRhZyggU3RyaW5nIG5hbWUgKQogICAgIHsKICAgICAgICAgc3VwZXIoIG5hbWUgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9TY21WZXJzaW9uLmphdmEgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vU2NtVmVyc2lvbi5qYXZhCmluZGV4IDk0N2YwZGQuLjQ3Y2I0NTMgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9TY21WZXJzaW9uLmphdmEKKysrIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL1NjbVZlcnNpb24uamF2YQpAQCAtMjUsOSArMjUsMTggQEAKICAqLwogcHVibGljIGludGVyZmFjZSBTY21WZXJzaW9uCiB7CisgICAgLyoqCisgICAgICogQHJldHVybiB0aGUgVmVyc2lvbiB0dHlwZSBsaWtlIGJyYW5jaAorICAgICAqLwogICAgIFN0cmluZyBnZXRUeXBlKCk7CiAKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHRoZSBWZXJzaW9uIG5hbWUKKyAgICAgKi8KICAgICBTdHJpbmcgZ2V0TmFtZSgpOwogCisgICAgLyoqCisgICAgICogQHBhcmFtIG5hbWUgbmV3IFZlcnNpb24gbmFtZSBjb3VsZCBiZSBudWxsCisgICAgICovCiAgICAgdm9pZCBzZXROYW1lKCBTdHJpbmcgbmFtZSApOwogfQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvQWJzdHJhY3RDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC9BYnN0cmFjdENvbW1hbmQuamF2YQppbmRleCBiMzkzNmFkLi42MmQwNjE3IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC9BYnN0cmFjdENvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC9BYnN0cmFjdENvbW1hbmQuamF2YQpAQCAtNDAsNiArNDAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgZmluYWwgU2NtUmVzdWx0IGV4ZWN1dGUoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtNjMsMTcgKzY0LDEzIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuQ29tbWFuZCNnZXRMb2dnZXIoKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIGZpbmFsIFNjbUxvZ2dlciBnZXRMb2dnZXIoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGxvZ2dlcjsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuQ29tbWFuZCNzZXRMb2dnZXIob3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlcikKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldExvZ2dlciggU2NtTG9nZ2VyIGxvZ2dlciApCiAgICAgewogICAgICAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL0NvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL0NvbW1hbmQuamF2YQppbmRleCBkZDhmM2MwLi5lZGUwNTBiIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC9Db21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvQ29tbWFuZC5qYXZhCkBAIC0zMywxMiArMzMsMjYgQEAKICAqLwogcHVibGljIGludGVyZmFjZSBDb21tYW5kCiB7CisgICAgLyoqIFBsZXh1cyBjb21wb25lbnQga2V5ICovCiAgICAgU3RyaW5nIFJPTEUgPSBDb21tYW5kLmNsYXNzLmdldE5hbWUoKTsKIAorICAgIC8qKgorICAgICAqIEBwYXJhbSByZXBvc2l0b3J5IG5vdCBudWxsCisgICAgICogQHBhcmFtIGZpbGVTZXQgbm90IG51bGwKKyAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBjb3VsZCBiZSBudWxsCisgICAgICogQHJldHVybiB0aGUgcmVzdWx0IG9iamVjdAorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQorICAgICAqLwogICAgIFNjbVJlc3VsdCBleGVjdXRlKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKIAorICAgIC8qKgorICAgICAqIEBwYXJhbSBsb2dnZXIgbm90IG51bGwKKyAgICAgKi8KICAgICB2b2lkIHNldExvZ2dlciggU2NtTG9nZ2VyIGxvZ2dlciApOwogCisgICAgLyoqCisgICAgICogQHJldHVybiB0aGUgY3VycmVudCBsb2dnZXIKKyAgICAgKi8KICAgICBTY21Mb2dnZXIgZ2V0TG9nZ2VyKCk7CiB9CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC9hZGQvQWJzdHJhY3RBZGRDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC9hZGQvQWJzdHJhY3RBZGRDb21tYW5kLmphdmEKaW5kZXggOTc5OGJjOC4uZDYzMzgyOSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvYWRkL0Fic3RyYWN0QWRkQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL2FkZC9BYnN0cmFjdEFkZENvbW1hbmQuamF2YQpAQCAtMzgsNiArMzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlLCBib29sZWFuIGJpbmFyeSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTY21SZXN1bHQgZXhlY3V0ZUNvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL2JyYW5jaC9BYnN0cmFjdEJyYW5jaENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL2JyYW5jaC9BYnN0cmFjdEJyYW5jaENvbW1hbmQuamF2YQppbmRleCBjOGZkZjNjLi4xNjQ2YzAwIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC9icmFuY2gvQWJzdHJhY3RCcmFuY2hDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvYnJhbmNoL0Fic3RyYWN0QnJhbmNoQ29tbWFuZC5qYXZhCkBAIC0zOSw2ICszOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGJyYW5jaE5hbWUsIFN0cmluZyBtZXNzYWdlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFNjbVJlc3VsdCBleGVjdXRlQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvY2hhbmdlbG9nL0Fic3RyYWN0Q2hhbmdlTG9nQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvY2hhbmdlbG9nL0Fic3RyYWN0Q2hhbmdlTG9nQ29tbWFuZC5qYXZhCmluZGV4IDM4NGU3MTUuLmMzMDJkMzggMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL2NoYW5nZWxvZy9BYnN0cmFjdENoYW5nZUxvZ0NvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC9jaGFuZ2Vsb2cvQWJzdHJhY3RDaGFuZ2VMb2dDb21tYW5kLmphdmEKQEAgLTUzLDYgKzUzLDcgQEAKICAgICAgICAgdGhyb3cgbmV3IFNjbUV4Y2VwdGlvbiggIlVuc3VwcG9ydGVkIG1ldGhvZCBmb3IgdGhpcyBwcm92aWRlci4iICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU2NtUmVzdWx0IGV4ZWN1dGVDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC04OSw5ICs5MCwxMCBAQAogCiAgICAgICAgICAgICBpZiAoIG51bURheXMgPiAwICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGFydERhdGUgPSBuZXcgRGF0ZSggU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSAobG9uZykgbnVtRGF5cyAqIDI0ICogNjAgKiA2MCAqIDEwMDAgKTsKKyAgICAgICAgICAgICAgICBpbnQgZGF5ID0gMjQgKiA2MCAqIDYwICogMTAwMDsKKyAgICAgICAgICAgICAgICBzdGFydERhdGUgPSBuZXcgRGF0ZSggU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSAobG9uZykgbnVtRGF5cyAqIGRheSApOwogCi0gICAgICAgICAgICAgICAgZW5kRGF0ZSA9IG5ldyBEYXRlKCBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSArIChsb25nKSAxICogMjQgKiA2MCAqIDYwICogMTAwMCApOworICAgICAgICAgICAgICAgIGVuZERhdGUgPSBuZXcgRGF0ZSggU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKyAobG9uZykgZGF5ICk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmICggZW5kRGF0ZSA9PSBudWxsICkKICAgICAgICAgICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL2NoZWNraW4vQWJzdHJhY3RDaGVja0luQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvY2hlY2tpbi9BYnN0cmFjdENoZWNrSW5Db21tYW5kLmphdmEKaW5kZXggZDNkZTczMy4uYjIyMmVjMCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvY2hlY2tpbi9BYnN0cmFjdENoZWNrSW5Db21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvY2hlY2tpbi9BYnN0cmFjdENoZWNrSW5Db21tYW5kLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdENoZWNrSW5Db21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdENvbW1hbmQKIHsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOQU1FID0gImNoZWNrLWluIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FID0gImNoZWNrLWluIjsKIAogICAgIHByb3RlY3RlZCBhYnN0cmFjdCBDaGVja0luU2NtUmVzdWx0IGV4ZWN1dGVDaGVja0luQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlLCBTY21WZXJzaW9uIHNjbVZlcnNpb24gKQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvY2hlY2tvdXQvQWJzdHJhY3RDaGVja091dENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL2NoZWNrb3V0L0Fic3RyYWN0Q2hlY2tPdXRDb21tYW5kLmphdmEKaW5kZXggZWVmMmIyYy4uODdkN2M4OCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvY2hlY2tvdXQvQWJzdHJhY3RDaGVja091dENvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC9jaGVja291dC9BYnN0cmFjdENoZWNrT3V0Q29tbWFuZC5qYXZhCkBAIC00MCw2ICs0MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbVZlcnNpb24gc2NtVmVyc2lvbiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTY21SZXN1bHQgZXhlY3V0ZUNvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL2RpZmYvQWJzdHJhY3REaWZmQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvZGlmZi9BYnN0cmFjdERpZmZDb21tYW5kLmphdmEKaW5kZXggMTQ2NTMwMC4uMDdkYjNmOSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvZGlmZi9BYnN0cmFjdERpZmZDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvZGlmZi9BYnN0cmFjdERpZmZDb21tYW5kLmphdmEKQEAgLTQ1LDYgKzQ1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbVZlcnNpb24gc3RhcnRSZXZpc2lvbiwgU2NtVmVyc2lvbiBlbmRSZXZpc2lvbiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTY21SZXN1bHQgZXhlY3V0ZUNvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL2VkaXQvQWJzdHJhY3RFZGl0Q29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvZWRpdC9BYnN0cmFjdEVkaXRDb21tYW5kLmphdmEKaW5kZXggM2M3MzJhOC4uY2NmY2JlYiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvZWRpdC9BYnN0cmFjdEVkaXRDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvZWRpdC9BYnN0cmFjdEVkaXRDb21tYW5kLmphdmEKQEAgLTI3LDExICsyNywxMiBAQAogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeTsKIAogLyoqCi0gKgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RFZGl0Q29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU2NtUmVzdWx0IGV4ZWN1dGVDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC9lZGl0L0VkaXRTY21SZXN1bHQuamF2YSBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL2VkaXQvRWRpdFNjbVJlc3VsdC5qYXZhCmluZGV4IGMyYzkwNDYuLmI0YTc1MmEgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL2VkaXQvRWRpdFNjbVJlc3VsdC5qYXZhCisrKyBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL2VkaXQvRWRpdFNjbVJlc3VsdC5qYXZhCkBAIC0yMyw2ICsyMyw5IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAorLyoqCisgKiBAdmVyc2lvbiAkSWQkCisgKi8KIHB1YmxpYyBjbGFzcyBFZGl0U2NtUmVzdWx0CiAgICAgZXh0ZW5kcyBTY21SZXN1bHQKIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL2V4cG9ydC9BYnN0cmFjdEV4cG9ydENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL2V4cG9ydC9BYnN0cmFjdEV4cG9ydENvbW1hbmQuamF2YQppbmRleCA5MTBjMjBkLi4wMmFiOTc4IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC9leHBvcnQvQWJzdHJhY3RFeHBvcnRDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvZXhwb3J0L0Fic3RyYWN0RXhwb3J0Q29tbWFuZC5qYXZhCkBAIC0zOSw2ICszOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiBzY21WZXJzaW9uLCBTdHJpbmcgb3V0cHV0RGlyZWN0b3J5ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFNjbVJlc3VsdCBleGVjdXRlQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvbGlzdC9BYnN0cmFjdExpc3RDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC9saXN0L0Fic3RyYWN0TGlzdENvbW1hbmQuamF2YQppbmRleCBiNmZmMGJhLi4wNzhjN2RiIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC9saXN0L0Fic3RyYWN0TGlzdENvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC9saXN0L0Fic3RyYWN0TGlzdENvbW1hbmQuamF2YQpAQCAtNDgsNiArNDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiByZWN1cnNpdmUsIFNjbVZlcnNpb24gc2NtVmVyc2lvbiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTY21SZXN1bHQgZXhlY3V0ZUNvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL2xpc3QvTGlzdFNjbVJlc3VsdC5qYXZhIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvbGlzdC9MaXN0U2NtUmVzdWx0LmphdmEKaW5kZXggMjg1N2Y3Ni4uMWYxNmRiYSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvbGlzdC9MaXN0U2NtUmVzdWx0LmphdmEKKysrIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvbGlzdC9MaXN0U2NtUmVzdWx0LmphdmEKQEAgLTIwLDEzICsyMCwxMyBAQAogICovCiAKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21SZXN1bHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXI7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiAvKioKLSAqIFJlc3VsdCBvZiB7QGxpbmsgU2NtUHJvdmlkZXIjbGlzdH0gb3BlcmF0aW9uCisgKiBSZXN1bHQgb2Yge0BsaW5rIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyI2xpc3Qob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LAorICogb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCwgYm9vbGVhbiwgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVmVyc2lvbil9IG9wZXJhdGlvbgogICoKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOmNhcmxvc0BhcGFjaGUub3JnIj5DYXJsb3MgU2FuY2hlejwvYT4KICAqIEB2ZXJzaW9uICRJZCQKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL2xvZ2luL0Fic3RyYWN0TG9naW5Db21tYW5kLmphdmEgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC9sb2dpbi9BYnN0cmFjdExvZ2luQ29tbWFuZC5qYXZhCmluZGV4IGU0NDhkNzQuLmUxN2NlZTQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL2xvZ2luL0Fic3RyYWN0TG9naW5Db21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvbG9naW4vQWJzdHJhY3RMb2dpbkNvbW1hbmQuamF2YQpAQCAtMzcsOSArMzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC5BYnN0cmFjdENvbW1hbmQjZXhlY3V0ZUNvbW1hbmQob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU2NtUmVzdWx0IGV4ZWN1dGVDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC9yZW1vdmUvQWJzdHJhY3RSZW1vdmVDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC9yZW1vdmUvQWJzdHJhY3RSZW1vdmVDb21tYW5kLmphdmEKaW5kZXggNjlkN2I1OS4uMjEyNDNiYiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvcmVtb3ZlL0Fic3RyYWN0UmVtb3ZlQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL3JlbW92ZS9BYnN0cmFjdFJlbW92ZUNvbW1hbmQuamF2YQpAQCAtMzksNiArMzksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFNjbVJlc3VsdCBleGVjdXRlQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvc3RhdHVzL0Fic3RyYWN0U3RhdHVzQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvc3RhdHVzL0Fic3RyYWN0U3RhdHVzQ29tbWFuZC5qYXZhCmluZGV4IGNkMTNiOWEuLmY4YjZiYjQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL3N0YXR1cy9BYnN0cmFjdFN0YXR1c0NvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC9zdGF0dXMvQWJzdHJhY3RTdGF0dXNDb21tYW5kLmphdmEKQEAgLTM2LDYgKzM2LDcgQEAKICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgU3RhdHVzU2NtUmVzdWx0IGV4ZWN1dGVTdGF0dXNDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFNjbVJlc3VsdCBleGVjdXRlQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvdGFnL0Fic3RyYWN0VGFnQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvdGFnL0Fic3RyYWN0VGFnQ29tbWFuZC5qYXZhCmluZGV4IDU4NjcxNTkuLmIxNTUxNjIgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL3RhZy9BYnN0cmFjdFRhZ0NvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC90YWcvQWJzdHJhY3RUYWdDb21tYW5kLmphdmEKQEAgLTM5LDEzICszOSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0YWdOYW1lLCBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTY21SZXN1bHQgZXhlY3V0ZUNvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIFN0cmluZyB0YWdOYW1lID0gcGFyYW1ldGVycy5nZXRTdHJpbmcoIENvbW1hbmRQYXJhbWV0ZXIuVEFHX05BTUUgKTsKIAotICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IHBhcmFtZXRlcnMuZ2V0U3RyaW5nKCBDb21tYW5kUGFyYW1ldGVyLk1FU1NBR0UsICJbbWF2ZW4tc2NtXSBjb3B5IGZvciB0YWcgIiArIHRhZ05hbWUpOworICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IHBhcmFtZXRlcnMuZ2V0U3RyaW5nKCBDb21tYW5kUGFyYW1ldGVyLk1FU1NBR0UsICJbbWF2ZW4tc2NtXSBjb3B5IGZvciB0YWcgIiArIHRhZ05hbWUgKTsKIAogICAgICAgICByZXR1cm4gZXhlY3V0ZVRhZ0NvbW1hbmQoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHRhZ05hbWUsIG1lc3NhZ2UgKTsKICAgICB9CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC91bmVkaXQvQWJzdHJhY3RVbkVkaXRDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC91bmVkaXQvQWJzdHJhY3RVbkVkaXRDb21tYW5kLmphdmEKaW5kZXggYTJlMTY5OC4uN2QzNjBiYiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvdW5lZGl0L0Fic3RyYWN0VW5FZGl0Q29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL3VuZWRpdC9BYnN0cmFjdFVuRWRpdENvbW1hbmQuamF2YQpAQCAtMjcsMTEgKzI3LDEyIEBACiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5OwogCiAvKioKLSAqCisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFVuRWRpdENvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0Q29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFNjbVJlc3VsdCBleGVjdXRlQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvdW5lZGl0L1VuRWRpdFNjbVJlc3VsdC5qYXZhIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvdW5lZGl0L1VuRWRpdFNjbVJlc3VsdC5qYXZhCmluZGV4IDc5OGVkMTEuLjYzNjk0MDUgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL3VuZWRpdC9VbkVkaXRTY21SZXN1bHQuamF2YQorKysgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC91bmVkaXQvVW5FZGl0U2NtUmVzdWx0LmphdmEKQEAgLTIzLDYgKzIzLDkgQEAKIAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCisvKioKKyAqIEB2ZXJzaW9uICRJZCQKKyAqLwogcHVibGljIGNsYXNzIFVuRWRpdFNjbVJlc3VsdAogICAgIGV4dGVuZHMgU2NtUmVzdWx0CiB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC91cGRhdGUvQWJzdHJhY3RVcGRhdGVDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY29tbWFuZC91cGRhdGUvQWJzdHJhY3RVcGRhdGVDb21tYW5kLmphdmEKaW5kZXggODZlYzVhZi4uZDg2ZTlkZiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NvbW1hbmQvdXBkYXRlL0Fic3RyYWN0VXBkYXRlQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jb21tYW5kL3VwZGF0ZS9BYnN0cmFjdFVwZGF0ZUNvbW1hbmQuamF2YQpAQCAtNTAsNiArNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbVZlcnNpb24gc2NtVmVyc2lvbiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTY21SZXN1bHQgZXhlY3V0ZUNvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9sb2cvRGVmYXVsdExvZy5qYXZhIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2xvZy9EZWZhdWx0TG9nLmphdmEKaW5kZXggYTYyODhiMS4uYWRkMTI2YiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2xvZy9EZWZhdWx0TG9nLmphdmEKKysrIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2xvZy9EZWZhdWx0TG9nLmphdmEKQEAgLTI3LDEzMiArMjcsOTkgQEAKICAgICBpbXBsZW1lbnRzIFNjbUxvZ2dlcgogewogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyI2lzRGVidWdFbmFibGVkKCkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzRGVidWdFbmFibGVkKCkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXIjZGVidWcoamF2YS5sYW5nLlN0cmluZykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGRlYnVnKCBTdHJpbmcgY29udGVudCApCiAgICAgewogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciNkZWJ1ZyhqYXZhLmxhbmcuU3RyaW5nLGphdmEubGFuZy5UaHJvd2FibGUpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBkZWJ1ZyggU3RyaW5nIGNvbnRlbnQsIFRocm93YWJsZSBlcnJvciApCiAgICAgewogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciNkZWJ1ZyhqYXZhLmxhbmcuVGhyb3dhYmxlKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgZGVidWcoIFRocm93YWJsZSBlcnJvciApCiAgICAgewogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciNpc0luZm9FbmFibGVkKCkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzSW5mb0VuYWJsZWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyI2luZm8oamF2YS5sYW5nLlN0cmluZykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGluZm8oIFN0cmluZyBjb250ZW50ICkKICAgICB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggY29udGVudCApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciNpbmZvKGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLlRocm93YWJsZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGluZm8oIFN0cmluZyBjb250ZW50LCBUaHJvd2FibGUgZXJyb3IgKQogICAgIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBjb250ZW50ICk7CiAgICAgICAgIGVycm9yLnByaW50U3RhY2tUcmFjZSgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciNpbmZvKGphdmEubGFuZy5UaHJvd2FibGUpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBpbmZvKCBUaHJvd2FibGUgZXJyb3IgKQogICAgIHsKICAgICAgICAgZXJyb3IucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyI2lzV2FybkVuYWJsZWQoKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNXYXJuRW5hYmxlZCgpCiAgICAgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXIjd2FybihqYXZhLmxhbmcuU3RyaW5nKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgd2FybiggU3RyaW5nIGNvbnRlbnQgKQogICAgIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBjb250ZW50ICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyI3dhcm4oamF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuVGhyb3dhYmxlKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgd2FybiggU3RyaW5nIGNvbnRlbnQsIFRocm93YWJsZSBlcnJvciApCiAgICAgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIGNvbnRlbnQgKTsKICAgICAgICAgZXJyb3IucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyI3dhcm4oamF2YS5sYW5nLlRocm93YWJsZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIHdhcm4oIFRocm93YWJsZSBlcnJvciApCiAgICAgewogICAgICAgICBlcnJvci5wcmludFN0YWNrVHJhY2UoKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXIjaXNFcnJvckVuYWJsZWQoKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNFcnJvckVuYWJsZWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyI2Vycm9yKGphdmEubGFuZy5TdHJpbmcpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBlcnJvciggU3RyaW5nIGNvbnRlbnQgKQogICAgIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludCggIltFUlJPUl0gIiArIGNvbnRlbnQgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXIjZXJyb3IoamF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuVGhyb3dhYmxlKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgZXJyb3IoIFN0cmluZyBjb250ZW50LCBUaHJvd2FibGUgZXJyb3IgKQogICAgIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiW0VSUk9SXSAiICsgY29udGVudCApOwogICAgICAgICBlcnJvci5wcmludFN0YWNrVHJhY2UoKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXIjZXJyb3IoamF2YS5sYW5nLlRocm93YWJsZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGVycm9yKCBUaHJvd2FibGUgZXJyb3IgKQogICAgIHsKICAgICAgICAgZXJyb3IucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgfQotCiB9CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vbG9nL1NjbUxvZ0Rpc3BhdGNoZXIuamF2YSBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9sb2cvU2NtTG9nRGlzcGF0Y2hlci5qYXZhCmluZGV4IDY2YzQxMDAuLmQ2M2E1NjYgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9sb2cvU2NtTG9nRGlzcGF0Y2hlci5qYXZhCisrKyBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9sb2cvU2NtTG9nRGlzcGF0Y2hlci5qYXZhCkBAIC0zNyw5ICszNyw3IEBACiAgICAgICAgIGxpc3RlbmVycy5hZGQoIGxvZ2dlciApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciNkZWJ1ZyhqYXZhLmxhbmcuU3RyaW5nLGphdmEubGFuZy5UaHJvd2FibGUpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBkZWJ1ZyggU3RyaW5nIGNvbnRlbnQsIFRocm93YWJsZSBlcnJvciApCiAgICAgewogICAgICAgICBmb3IgKCBJdGVyYXRvciBpID0gbGlzdGVuZXJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCkBAIC01MCw5ICs0OCw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXIjZGVidWcoamF2YS5sYW5nLlN0cmluZykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGRlYnVnKCBTdHJpbmcgY29udGVudCApCiAgICAgewogICAgICAgICBmb3IgKCBJdGVyYXRvciBpID0gbGlzdGVuZXJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCkBAIC02Myw5ICs1OSw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXIjZGVidWcoamF2YS5sYW5nLlRocm93YWJsZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGRlYnVnKCBUaHJvd2FibGUgZXJyb3IgKQogICAgIHsKICAgICAgICAgZm9yICggSXRlcmF0b3IgaSA9IGxpc3RlbmVycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQpAQCAtNzYsOSArNzAsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyI2Vycm9yKGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLlRocm93YWJsZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGVycm9yKCBTdHJpbmcgY29udGVudCwgVGhyb3dhYmxlIGVycm9yICkKICAgICB7CiAgICAgICAgIGZvciAoIEl0ZXJhdG9yIGkgPSBsaXN0ZW5lcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKQEAgLTg5LDkgKzgxLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciNlcnJvcihqYXZhLmxhbmcuU3RyaW5nKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgZXJyb3IoIFN0cmluZyBjb250ZW50ICkKICAgICB7CiAgICAgICAgIGZvciAoIEl0ZXJhdG9yIGkgPSBsaXN0ZW5lcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKQEAgLTEwMiw5ICs5Miw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXIjZXJyb3IoamF2YS5sYW5nLlRocm93YWJsZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGVycm9yKCBUaHJvd2FibGUgZXJyb3IgKQogICAgIHsKICAgICAgICAgZm9yICggSXRlcmF0b3IgaSA9IGxpc3RlbmVycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQpAQCAtMTE1LDkgKzEwMyw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXIjaW5mbyhqYXZhLmxhbmcuU3RyaW5nLGphdmEubGFuZy5UaHJvd2FibGUpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBpbmZvKCBTdHJpbmcgY29udGVudCwgVGhyb3dhYmxlIGVycm9yICkKICAgICB7CiAgICAgICAgIGZvciAoIEl0ZXJhdG9yIGkgPSBsaXN0ZW5lcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKQEAgLTEyOCw5ICsxMTQsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyI2luZm8oamF2YS5sYW5nLlN0cmluZykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGluZm8oIFN0cmluZyBjb250ZW50ICkKICAgICB7CiAgICAgICAgIGZvciAoIEl0ZXJhdG9yIGkgPSBsaXN0ZW5lcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKQEAgLTE0MSw5ICsxMjUsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyI2luZm8oamF2YS5sYW5nLlRocm93YWJsZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGluZm8oIFRocm93YWJsZSBlcnJvciApCiAgICAgewogICAgICAgICBmb3IgKCBJdGVyYXRvciBpID0gbGlzdGVuZXJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCkBAIC0xNTQsOSArMTM2LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciNpc0RlYnVnRW5hYmxlZCgpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0RlYnVnRW5hYmxlZCgpCiAgICAgewogICAgICAgICBmb3IgKCBJdGVyYXRvciBpID0gbGlzdGVuZXJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCkBAIC0xNzIsOSArMTUyLDcgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciNpc0Vycm9yRW5hYmxlZCgpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0Vycm9yRW5hYmxlZCgpCiAgICAgewogICAgICAgICBmb3IgKCBJdGVyYXRvciBpID0gbGlzdGVuZXJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCkBAIC0xOTAsOSArMTY4LDcgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciNpc0luZm9FbmFibGVkKCkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzSW5mb0VuYWJsZWQoKQogICAgIHsKICAgICAgICAgZm9yICggSXRlcmF0b3IgaSA9IGxpc3RlbmVycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQpAQCAtMjA4LDkgKzE4NCw3IEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXIjaXNXYXJuRW5hYmxlZCgpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1dhcm5FbmFibGVkKCkKICAgICB7CiAgICAgICAgIGZvciAoIEl0ZXJhdG9yIGkgPSBsaXN0ZW5lcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKQEAgLTIyNiw5ICsyMDAsNyBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyI3dhcm4oamF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuVGhyb3dhYmxlKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgd2FybiggU3RyaW5nIGNvbnRlbnQsIFRocm93YWJsZSBlcnJvciApCiAgICAgewogICAgICAgICBmb3IgKCBJdGVyYXRvciBpID0gbGlzdGVuZXJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCkBAIC0yMzksOSArMjExLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciN3YXJuKGphdmEubGFuZy5TdHJpbmcpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCB3YXJuKCBTdHJpbmcgY29udGVudCApCiAgICAgewogICAgICAgICBmb3IgKCBJdGVyYXRvciBpID0gbGlzdGVuZXJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCkBAIC0yNTIsOSArMjIyLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciN3YXJuKGphdmEubGFuZy5UaHJvd2FibGUpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCB3YXJuKCBUaHJvd2FibGUgZXJyb3IgKQogICAgIHsKICAgICAgICAgZm9yICggSXRlcmF0b3IgaSA9IGxpc3RlbmVycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQpAQCAtMjY0LDUgKzIzMiw0IEBACiAgICAgICAgICAgICBsb2dnZXIud2FybiggZXJyb3IgKTsKICAgICAgICAgfQogICAgIH0KLQogfQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL21hbmFnZXIvQWJzdHJhY3RTY21NYW5hZ2VyLmphdmEgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vbWFuYWdlci9BYnN0cmFjdFNjbU1hbmFnZXIuamF2YQppbmRleCBkMzFiZmM4Li5jNzNlM2M5IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vbWFuYWdlci9BYnN0cmFjdFNjbU1hbmFnZXIuamF2YQorKysgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vbWFuYWdlci9BYnN0cmFjdFNjbU1hbmFnZXIuamF2YQpAQCAtOTksNiArOTksNyBAQAogICAgIC8vIFNjbU1hbmFnZXIgSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTY21Qcm92aWRlciBnZXRQcm92aWRlckJ5VXJsKCBTdHJpbmcgc2NtVXJsICkKICAgICAgICAgdGhyb3dzIFNjbVJlcG9zaXRvcnlFeGNlcHRpb24sIE5vU3VjaFNjbVByb3ZpZGVyRXhjZXB0aW9uCiAgICAgewpAQCAtMTEyLDExICsxMTMsMTMgQEAKICAgICAgICAgcmV0dXJuIGdldFByb3ZpZGVyQnlUeXBlKCBwcm92aWRlclR5cGUgKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIHNldFNjbVByb3ZpZGVySW1wbGVtZW50YXRpb24oIFN0cmluZyBwcm92aWRlclR5cGUsIFN0cmluZyBwcm92aWRlckltcGxlbWVudGF0aW9uICkKICAgICB7CiAgICAgICAgIHVzZXJQcm92aWRlclR5cGVzLnB1dCggcHJvdmlkZXJUeXBlLCBwcm92aWRlckltcGxlbWVudGF0aW9uICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU2NtUHJvdmlkZXIgZ2V0UHJvdmlkZXJCeVR5cGUoIFN0cmluZyBwcm92aWRlclR5cGUgKQogICAgICAgICB0aHJvd3MgTm9TdWNoU2NtUHJvdmlkZXJFeGNlcHRpb24KICAgICB7CkBAIC0xNTgsNiArMTYxLDcgQEAKICAgICAgICAgcmV0dXJuIHNjbVByb3ZpZGVyOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFNjbVByb3ZpZGVyIGdldFByb3ZpZGVyQnlSZXBvc2l0b3J5KCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnkgKQogICAgICAgICB0aHJvd3MgTm9TdWNoU2NtUHJvdmlkZXJFeGNlcHRpb24KICAgICB7CkBAIC0xNjgsNiArMTcyLDcgQEAKICAgICAvLyBSZXBvc2l0b3J5CiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU2NtUmVwb3NpdG9yeSBtYWtlU2NtUmVwb3NpdG9yeSggU3RyaW5nIHNjbVVybCApCiAgICAgICAgIHRocm93cyBTY21SZXBvc2l0b3J5RXhjZXB0aW9uLCBOb1N1Y2hTY21Qcm92aWRlckV4Y2VwdGlvbgogICAgIHsKQEAgLTI0Niw2ICsyNTEsNyBAQAogICAgICAgICByZXR1cm4gc2NtVXJsOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFNjbVJlcG9zaXRvcnkgbWFrZVByb3ZpZGVyU2NtUmVwb3NpdG9yeSggU3RyaW5nIHByb3ZpZGVyVHlwZSwgRmlsZSBwYXRoICkKICAgICAgICAgdGhyb3dzIFNjbVJlcG9zaXRvcnlFeGNlcHRpb24sIFVua25vd25SZXBvc2l0b3J5U3RydWN0dXJlLCBOb1N1Y2hTY21Qcm92aWRlckV4Y2VwdGlvbgogICAgIHsKQEAgLTI2MSw2ICsyNjcsNyBAQAogICAgICAgICByZXR1cm4gbmV3IFNjbVJlcG9zaXRvcnkoIHByb3ZpZGVyVHlwZSwgcHJvdmlkZXJSZXBvc2l0b3J5ICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgTGlzdCB2YWxpZGF0ZVNjbVJlcG9zaXRvcnkoIFN0cmluZyBzY21VcmwgKQogICAgIHsKICAgICAgICAgTGlzdCBtZXNzYWdlcyA9IG5ldyBBcnJheUxpc3QoKTsKQEAgLTI5Nyw0NSArMzA0LDM1IEBACiAgICAgICAgIHJldHVybiBtZXNzYWdlczsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEFkZFNjbVJlc3VsdCBhZGQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS5hZGQoIHJlcG9zaXRvcnksIGZpbGVTZXQgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEFkZFNjbVJlc3VsdCBhZGQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3ZpZGVyQnlSZXBvc2l0b3J5KCByZXBvc2l0b3J5ICkuYWRkKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBtZXNzYWdlICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBCcmFuY2hTY21SZXN1bHQgYnJhbmNoKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIGJyYW5jaE5hbWUgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm92aWRlckJ5UmVwb3NpdG9yeSggcmVwb3NpdG9yeSApLmJyYW5jaCggcmVwb3NpdG9yeSwgZmlsZVNldCwgYnJhbmNoTmFtZSApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQnJhbmNoU2NtUmVzdWx0IGJyYW5jaCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyBicmFuY2hOYW1lLCBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3ZpZGVyQnlSZXBvc2l0b3J5KCByZXBvc2l0b3J5ICkuYnJhbmNoKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBicmFuY2hOYW1lLCBtZXNzYWdlICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGFuZ2VMb2dTY21SZXN1bHQgY2hhbmdlTG9nKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgRGF0ZSBzdGFydERhdGUsIERhdGUgZW5kRGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bURheXMsIFNjbUJyYW5jaCBicmFuY2ggKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC0zNDQsOSArMzQxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hhbmdlTG9nU2NtUmVzdWx0IGNoYW5nZUxvZyggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIERhdGUgc3RhcnREYXRlLCBEYXRlIGVuZERhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1EYXlzLCBTY21CcmFuY2ggYnJhbmNoLCBTdHJpbmcgZGF0ZVBhdHRlcm4gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC0zNTUsOSArMzUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCwgZGF0ZVBhdHRlcm4gKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoYW5nZUxvZ1NjbVJlc3VsdCBjaGFuZ2VMb2coIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHN0YXJ0VmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiBlbmRWZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtMzY1LDkgKzM1OCw3IEBACiAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3ZpZGVyQnlSZXBvc2l0b3J5KCByZXBvc2l0b3J5ICkuY2hhbmdlTG9nKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBzdGFydFZlcnNpb24sIGVuZFZlcnNpb24gKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoYW5nZUxvZ1NjbVJlc3VsdCBjaGFuZ2VMb2coIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHN0YXJ0UmV2aXNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbVZlcnNpb24gZW5kUmV2aXNpb24sIFN0cmluZyBkYXRlUGF0dGVybiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTM3Niw1NCArMzY3LDQyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlUGF0dGVybiApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hlY2tJblNjbVJlc3VsdCBjaGVja0luKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIG1lc3NhZ2UgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm92aWRlckJ5UmVwb3NpdG9yeSggcmVwb3NpdG9yeSApLmNoZWNrSW4oIHJlcG9zaXRvcnksIGZpbGVTZXQsIG1lc3NhZ2UgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoZWNrSW5TY21SZXN1bHQgY2hlY2tJbiggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gcmV2aXNpb24sIFN0cmluZyBtZXNzYWdlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS5jaGVja0luKCByZXBvc2l0b3J5LCBmaWxlU2V0LCByZXZpc2lvbiwgbWVzc2FnZSApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hlY2tPdXRTY21SZXN1bHQgY2hlY2tPdXQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS5jaGVja091dCggcmVwb3NpdG9yeSwgZmlsZVNldCApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hlY2tPdXRTY21SZXN1bHQgY2hlY2tPdXQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm92aWRlckJ5UmVwb3NpdG9yeSggcmVwb3NpdG9yeSApLmNoZWNrT3V0KCByZXBvc2l0b3J5LCBmaWxlU2V0LCB2ZXJzaW9uICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGVja091dFNjbVJlc3VsdCBjaGVja091dCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIGJvb2xlYW4gcmVjdXJzaXZlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS5jaGVja091dCggcmVwb3NpdG9yeSwgZmlsZVNldCwgcmVjdXJzaXZlICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGVja091dFNjbVJlc3VsdCBjaGVja091dCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gcmVjdXJzaXZlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtNDMxLDkgKzQxMCw3IEBACiAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3ZpZGVyQnlSZXBvc2l0b3J5KCByZXBvc2l0b3J5ICkuY2hlY2tPdXQoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHZlcnNpb24sIHJlY3Vyc2l2ZSApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgRGlmZlNjbVJlc3VsdCBkaWZmKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiBzdGFydFZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiBlbmRWZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtNDQxLDM2ICs0MTgsMjggQEAKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS5kaWZmKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBzdGFydFZlcnNpb24sIGVuZFZlcnNpb24gKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEVkaXRTY21SZXN1bHQgZWRpdCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm92aWRlckJ5UmVwb3NpdG9yeSggcmVwb3NpdG9yeSApLmVkaXQoIHJlcG9zaXRvcnksIGZpbGVTZXQgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEV4cG9ydFNjbVJlc3VsdCBleHBvcnQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS5leHBvcnQoIHJlcG9zaXRvcnksIGZpbGVTZXQgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEV4cG9ydFNjbVJlc3VsdCBleHBvcnQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm92aWRlckJ5UmVwb3NpdG9yeSggcmVwb3NpdG9yeSApLmV4cG9ydCggcmVwb3NpdG9yeSwgZmlsZVNldCwgdmVyc2lvbiApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgRXhwb3J0U2NtUmVzdWx0IGV4cG9ydCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyBvdXRwdXREaXJlY3RvcnkgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtNDc4LDkgKzQ0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXREaXJlY3RvcnkgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEV4cG9ydFNjbVJlc3VsdCBleHBvcnQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBvdXRwdXREaXJlY3RvcnkgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC00ODgsOTAgKzQ1NSw3MCBAQAogICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm92aWRlckJ5UmVwb3NpdG9yeSggcmVwb3NpdG9yeSApLmV4cG9ydCggcmVwb3NpdG9yeSwgZmlsZVNldCwgdmVyc2lvbiwgb3V0cHV0RGlyZWN0b3J5ICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBMaXN0U2NtUmVzdWx0IGxpc3QoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBib29sZWFuIHJlY3Vyc2l2ZSwgU2NtVmVyc2lvbiB2ZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS5saXN0KCByZXBvc2l0b3J5LCBmaWxlU2V0LCByZWN1cnNpdmUsIHZlcnNpb24gKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFJlbW92ZVNjbVJlc3VsdCByZW1vdmUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3ZpZGVyQnlSZXBvc2l0b3J5KCByZXBvc2l0b3J5ICkucmVtb3ZlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBtZXNzYWdlICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTdGF0dXNTY21SZXN1bHQgc3RhdHVzKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3ZpZGVyQnlSZXBvc2l0b3J5KCByZXBvc2l0b3J5ICkuc3RhdHVzKCByZXBvc2l0b3J5LCBmaWxlU2V0ICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBUYWdTY21SZXN1bHQgdGFnKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZ05hbWUgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm92aWRlckJ5UmVwb3NpdG9yeSggcmVwb3NpdG9yeSApLnRhZyggcmVwb3NpdG9yeSwgZmlsZVNldCwgdGFnTmFtZSApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgVGFnU2NtUmVzdWx0IHRhZyggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyB0YWdOYW1lLCBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3ZpZGVyQnlSZXBvc2l0b3J5KCByZXBvc2l0b3J5ICkudGFnKCByZXBvc2l0b3J5LCBmaWxlU2V0LCB0YWdOYW1lLCBtZXNzYWdlICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBVbkVkaXRTY21SZXN1bHQgdW5lZGl0KCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3ZpZGVyQnlSZXBvc2l0b3J5KCByZXBvc2l0b3J5ICkudW5lZGl0KCByZXBvc2l0b3J5LCBmaWxlU2V0ICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3ZpZGVyQnlSZXBvc2l0b3J5KCByZXBvc2l0b3J5ICkudXBkYXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0ICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiB2ZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS51cGRhdGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHZlcnNpb24gKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBib29sZWFuIHJ1bkNoYW5nZWxvZyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3ZpZGVyQnlSZXBvc2l0b3J5KCByZXBvc2l0b3J5ICkudXBkYXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBydW5DaGFuZ2Vsb2cgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gcnVuQ2hhbmdlbG9nICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtNTc5LDE4ICs1MjYsMTQgQEAKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS51cGRhdGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHZlcnNpb24sIHJ1bkNoYW5nZWxvZyApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyBkYXRlUGF0dGVybiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3ZpZGVyQnlSZXBvc2l0b3J5KCByZXBvc2l0b3J5ICkudXBkYXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCAoU2NtVmVyc2lvbikgbnVsbCwgZGF0ZVBhdHRlcm4gKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRlUGF0dGVybiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTU5OCwyNyArNTQxLDIxIEBACiAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3ZpZGVyQnlSZXBvc2l0b3J5KCByZXBvc2l0b3J5ICkudXBkYXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCB2ZXJzaW9uLCBkYXRlUGF0dGVybiApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIERhdGUgbGFzdFVwZGF0ZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3ZpZGVyQnlSZXBvc2l0b3J5KCByZXBvc2l0b3J5ICkudXBkYXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCAoU2NtVmVyc2lvbikgbnVsbCwgbGFzdFVwZGF0ZSApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gdmVyc2lvbiwgRGF0ZSBsYXN0VXBkYXRlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS51cGRhdGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHZlcnNpb24sIGxhc3RVcGRhdGUgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBEYXRlIGxhc3RVcGRhdGUsIFN0cmluZyBkYXRlUGF0dGVybiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC02MjYsOSArNTYzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVQYXR0ZXJuICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiB2ZXJzaW9uLCBEYXRlIGxhc3RVcGRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRlUGF0dGVybiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9tYW5hZ2VyL0Jhc2ljU2NtTWFuYWdlci5qYXZhIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL21hbmFnZXIvQmFzaWNTY21NYW5hZ2VyLmphdmEKaW5kZXggYWE1ZGQxNi4uZWNjNGQzYyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL21hbmFnZXIvQmFzaWNTY21NYW5hZ2VyLmphdmEKKysrIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL21hbmFnZXIvQmFzaWNTY21NYW5hZ2VyLmphdmEKQEAgLTI5LDYgKzI5LDcgQEAKIHB1YmxpYyBjbGFzcyBCYXNpY1NjbU1hbmFnZXIKICAgICBleHRlbmRzIEFic3RyYWN0U2NtTWFuYWdlcgogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFNjbUxvZ2dlciBnZXRTY21Mb2dnZXIoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBEZWZhdWx0TG9nKCk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vbWFuYWdlci9Ob1N1Y2hTY21Qcm92aWRlckV4Y2VwdGlvbi5qYXZhIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL21hbmFnZXIvTm9TdWNoU2NtUHJvdmlkZXJFeGNlcHRpb24uamF2YQppbmRleCA1MmQ3Y2FkLi4zNWVmN2E0IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vbWFuYWdlci9Ob1N1Y2hTY21Qcm92aWRlckV4Y2VwdGlvbi5qYXZhCisrKyBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9tYW5hZ2VyL05vU3VjaFNjbVByb3ZpZGVyRXhjZXB0aW9uLmphdmEKQEAgLTI5LDYgKzI5LDggQEAKIHB1YmxpYyBjbGFzcyBOb1N1Y2hTY21Qcm92aWRlckV4Y2VwdGlvbgogICAgIGV4dGVuZHMgU2NtRXhjZXB0aW9uCiB7CisgICAgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDQ3NzA2NDUxODUyMTQ0OTYzMjNMOworCiAgICAgcHJpdmF0ZSBTdHJpbmcgcHJvdmlkZXJOYW1lOwogCiAgICAgcHVibGljIE5vU3VjaFNjbVByb3ZpZGVyRXhjZXB0aW9uKCBTdHJpbmcgcHJvdmlkZXJOYW1lICkKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9tYW5hZ2VyL1NjbU1hbmFnZXIuamF2YSBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9tYW5hZ2VyL1NjbU1hbmFnZXIuamF2YQppbmRleCA3N2M3ZmU5Li4xNWMwZTU2IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vbWFuYWdlci9TY21NYW5hZ2VyLmphdmEKKysrIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL21hbmFnZXIvU2NtTWFuYWdlci5qYXZhCkBAIC0xMTMsNyArMTEzLDggQEAKICAgICAgKiBTZXQgdGhlIHByb3ZpZGVyIGltcGxlbWVudGF0aW9uCiAgICAgICoKICAgICAgKiBAcGFyYW0gcHJvdmlkZXJUeXBlICAgICAgICAgICBUaGUgcHJvdmlkZXIgdHlwZSwgZWcuIDxjb2RlPmN2czwvY29kZT4KLSAgICAgKiBAcGFyYW0gcHJvdmlkZXJJbXBsZW1lbnRhdGlvbiBUaGUgcHJvdmlkZXIgaW1wbGVtZW50YXRpb24gKHRoZSByb2xlLWhpbnQgb2YgdGhlIHByb3ZpZGVyKSwgZWcuIDxjb2RlPmN2czwvY29kZT4sIDxjb2RlPmN2c19uYXRpdmU8L2NvZGU+CisgICAgICogQHBhcmFtIHByb3ZpZGVySW1wbGVtZW50YXRpb24gVGhlIHByb3ZpZGVyIGltcGxlbWVudGF0aW9uICh0aGUgcm9sZS1oaW50IG9mIHRoZSBwcm92aWRlciksCisgICAgICogZWcuIDxjb2RlPmN2czwvY29kZT4sIDxjb2RlPmN2c19uYXRpdmU8L2NvZGU+CiAgICAgICovCiAgICAgdm9pZCBzZXRTY21Qcm92aWRlckltcGxlbWVudGF0aW9uKCBTdHJpbmcgcHJvdmlkZXJUeXBlLCBTdHJpbmcgcHJvdmlkZXJJbXBsZW1lbnRhdGlvbiApOwogCkBAIC0xMzYsNyArMTM3LDcgQEAKICAgICAgKiBAcGFyYW0gZmlsZVNldCAgICB0aGUgZmlsZXMgdG8gYmUgYWRkZWQKICAgICAgKiBAcGFyYW0gbWVzc2FnZSAgICBhIHN0cmluZyB0aGF0IGlzIGEgY29tbWVudCBvbiB0aGUgbmV3IGFkZGVkIGZpbGUKICAgICAgKiBAcmV0dXJuIGFuIHtAbGluayBBZGRTY21SZXN1bHR9IHRoYXQgY29udGFpbnMgdGhlIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBBZGRTY21SZXN1bHQgYWRkKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIG1lc3NhZ2UgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwpAQCAtMTQ5LDcgKzE1MCw3IEBACiAgICAgICogICAgICAgICAgICAgICAgICAgZnJvbSB0aGUge0BsaW5rIG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQjZ2V0QmFzZWRpcigpfSBkb3dud2FyZHMuCiAgICAgICogQHBhcmFtIGJyYW5jaE5hbWUgdGhlIGJyYW5jaCBuYW1lIHRvIGFwcGx5IHRvIHRoZSBmaWxlcwogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIEJyYW5jaFNjbVJlc3VsdCBicmFuY2goIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgYnJhbmNoTmFtZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CkBAIC0xNjMsNyArMTY0LDcgQEAKICAgICAgKiBAcGFyYW0gYnJhbmNoTmFtZSB0aGUgYnJhbmNoIG5hbWUgdG8gYXBwbHkgdG8gdGhlIGZpbGVzCiAgICAgICogQHBhcmFtIG1lc3NhZ2UgICAgdGhlIGNvbW1pdCBtZXNzYWdlIHVzZWQgZm9yIHRoZSB0YWcgY3JlYXRpb24KICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBCcmFuY2hTY21SZXN1bHQgYnJhbmNoKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIGJyYW5jaE5hbWUsIFN0cmluZyBtZXNzYWdlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTE4MCw3ICsxODEsNyBAQAogICAgICAqIEBwYXJhbSBudW1EYXlzICAgIHRoZSBudW1iZXIgZGF5cyBiZWZvcmUgdGhlIGN1cnJlbnQgdGltZSBpZiBzdGFydGRhdGUgYW5kIGVuZGRhdGUgYXJlIG51bGwKICAgICAgKiBAcGFyYW0gYnJhbmNoICAgICB0aGUgYnJhbmNoL3RhZwogICAgICAqIEByZXR1cm4gVGhlIFNDTSByZXN1bHQgb2YgdGhlIGNoYW5nZWxvZyBjb21tYW5kCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBDaGFuZ2VMb2dTY21SZXN1bHQgY2hhbmdlTG9nKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgRGF0ZSBzdGFydERhdGUsIERhdGUgZW5kRGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtRGF5cywgU2NtQnJhbmNoIGJyYW5jaCApCkBAIC0xOTksNyArMjAwLDcgQEAKICAgICAgKiBAcGFyYW0gYnJhbmNoICAgICAgdGhlIGJyYW5jaC90YWcKICAgICAgKiBAcGFyYW0gZGF0ZVBhdHRlcm4gdGhlIGRhdGUgcGF0dGVybiB1c2UgaW4gY2hhbmdlbG9nIG91dHB1dCByZXR1cm5lZCBieSBzY20gdG9vbAogICAgICAqIEByZXR1cm4gVGhlIFNDTSByZXN1bHQgb2YgdGhlIGNoYW5nZWxvZyBjb21tYW5kCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBDaGFuZ2VMb2dTY21SZXN1bHQgY2hhbmdlTG9nKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgRGF0ZSBzdGFydERhdGUsIERhdGUgZW5kRGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtRGF5cywgU2NtQnJhbmNoIGJyYW5jaCwgU3RyaW5nIGRhdGVQYXR0ZXJuICkKQEAgLTIxNSw3ICsyMTYsNyBAQAogICAgICAqIEBwYXJhbSBzdGFydFZlcnNpb24gdGhlIHN0YXJ0IGJyYW5jaC90YWcvcmV2aXNpb24KICAgICAgKiBAcGFyYW0gZW5kVmVyc2lvbiAgIHRoZSBlbmQgYnJhbmNoL3RhZy9yZXZpc2lvbgogICAgICAqIEByZXR1cm4gVGhlIFNDTSByZXN1bHQgb2YgdGhlIGNoYW5nZWxvZyBjb21tYW5kCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBDaGFuZ2VMb2dTY21SZXN1bHQgY2hhbmdlTG9nKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiBzdGFydFZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiBlbmRWZXJzaW9uICkKQEAgLTIzMiw3ICsyMzMsNyBAQAogICAgICAqIEBwYXJhbSBlbmRSZXZpc2lvbiAgIHRoZSBlbmQgcmV2aXNpb24KICAgICAgKiBAcGFyYW0gZGF0ZVBhdHRlcm4gICB0aGUgZGF0ZSBwYXR0ZXJuIHVzZSBpbiBjaGFuZ2Vsb2cgb3V0cHV0IHJldHVybmVkIGJ5IHNjbSB0b29sCiAgICAgICogQHJldHVybgotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgQ2hhbmdlTG9nU2NtUmVzdWx0IGNoYW5nZUxvZyggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gc3RhcnRSZXZpc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIGVuZFJldmlzaW9uLCBTdHJpbmcgZGF0ZVBhdHRlcm4gKQpAQCAtMjUwLDcgKzI1MSw3IEBACiAgICAgICogQHBhcmFtIGZpbGVTZXQgICAgdGhlIGZpbGVzIHRvIGNoZWNrIGluIChzb21ldGltZXMgY2FsbGVkIGNvbW1pdCkKICAgICAgKiBAcGFyYW0gbWVzc2FnZSAgICBhIHN0cmluZyB0aGF0IGlzIGEgY29tbWVudCBvbiB0aGUgY2hhbmdlcyB0aGF0IHdoZXJlIGRvbmUKICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBDaGVja0luU2NtUmVzdWx0IGNoZWNrSW4oIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CkBAIC0yNjgsNyArMjY5LDcgQEAKICAgICAgKiBAcGFyYW0gcmV2aXNpb24gICBicmFuY2gvdGFnL3JldmlzaW9uCiAgICAgICogQHBhcmFtIG1lc3NhZ2UgICAgYSBzdHJpbmcgdGhhdCBpcyBhIGNvbW1lbnQgb24gdGhlIGNoYW5nZXMgdGhhdCB3aGVyZSBkb25lCiAgICAgICogQHJldHVybgotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgQ2hlY2tJblNjbVJlc3VsdCBjaGVja0luKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiByZXZpc2lvbiwgU3RyaW5nIG1lc3NhZ2UgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwpAQCAtMjc5LDcgKzI4MCw3IEBACiAgICAgICogQHBhcmFtIHJlcG9zaXRvcnkgdGhlIHNvdXJjZSBjb250cm9sIHN5c3RlbQogICAgICAqIEBwYXJhbSBmaWxlU2V0ICAgIHRoZSBmaWxlcyBhcmUgY29waWVkIHRvIHRoZSB7QGxpbmsgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCNnZXRCYXNlZGlyKCl9IGxvY2F0aW9uCiAgICAgICogQHJldHVybgotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgQ2hlY2tPdXRTY21SZXN1bHQgY2hlY2tPdXQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTI5MSw3ICsyOTIsNyBAQAogICAgICAqIEBwYXJhbSBmaWxlU2V0ICAgIHRoZSBmaWxlcyBhcmUgY29waWVkIHRvIHRoZSB7QGxpbmsgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCNnZXRCYXNlZGlyKCl9IGxvY2F0aW9uCiAgICAgICogQHBhcmFtIHZlcnNpb24gICAgZ2V0IHRoZSB2ZXJzaW9uIGRlZmluZWQgYnkgdGhlIHJldmlzaW9uLCBicmFuY2ggb3IgdGFnCiAgICAgICogQHJldHVybgotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgQ2hlY2tPdXRTY21SZXN1bHQgY2hlY2tPdXQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwpAQCAtMzAzLDcgKzMwNCw3IEBACiAgICAgICogQHBhcmFtIHNjbUZpbGVTZXQgICAgdGhlIGZpbGVzIGFyZSBjb3BpZWQgdG8gdGhlIHtAbGluayBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0I2dldEJhc2VkaXIoKX0gbG9jYXRpb24KICAgICAgKiBAcGFyYW0gcmVjdXJzaXZlICAgICB3aGV0aGVyIHRvIGNoZWNrIG91dCByZWN1cnNpdmVseQogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIENoZWNrT3V0U2NtUmVzdWx0IGNoZWNrT3V0KCBTY21SZXBvc2l0b3J5IHNjbVJlcG9zaXRvcnksIFNjbUZpbGVTZXQgc2NtRmlsZVNldCwgYm9vbGVhbiByZWN1cnNpdmUgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwpAQCAtMzE2LDcgKzMxNyw3IEBACiAgICAgICogQHBhcmFtIHZlcnNpb24gICAgICAgZ2V0IHRoZSB2ZXJzaW9uIGRlZmluZWQgYnkgdGhlIHJldmlzaW9uLCBicmFuY2ggb3IgdGFnCiAgICAgICogQHBhcmFtIHJlY3Vyc2l2ZSAgICAgd2hldGhlciB0byBjaGVjayBvdXQgcmVjdXJzaXZlbHkKICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBDaGVja091dFNjbVJlc3VsdCBjaGVja091dCggU2NtUmVwb3NpdG9yeSBzY21SZXBvc2l0b3J5LCBTY21GaWxlU2V0IHNjbUZpbGVTZXQsIFNjbVZlcnNpb24gdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiByZWN1cnNpdmUgKQpAQCAtMzMwLDcgKzMzMSw3IEBACiAgICAgICogQHBhcmFtIHN0YXJ0VmVyc2lvbiAgdGhlIHN0YXJ0IGJyYW5jaC90YWcvcmV2aXNpb24KICAgICAgKiBAcGFyYW0gZW5kVmVyc2lvbiAgICB0aGUgZW5kIGJyYW5jaC90YWcvcmV2aXNpb24KICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBEaWZmU2NtUmVzdWx0IGRpZmYoIFNjbVJlcG9zaXRvcnkgc2NtUmVwb3NpdG9yeSwgU2NtRmlsZVNldCBzY21GaWxlU2V0LCBTY21WZXJzaW9uIHN0YXJ0VmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIFNjbVZlcnNpb24gZW5kVmVyc2lvbiApCkBAIC0zNDQsNyArMzQ1LDcgQEAKICAgICAgKiBAcGFyYW0gcmVwb3NpdG9yeSB0aGUgc291cmNlIGNvbnRyb2wgc3lzdGVtCiAgICAgICogQHBhcmFtIGZpbGVTZXQgICAgdGhlIGZpbGVzIHRvIG1ha2UgZWRpdGFibGUKICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBFZGl0U2NtUmVzdWx0IGVkaXQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTM1NSw3ICszNTYsNyBAQAogICAgICAqIEBwYXJhbSByZXBvc2l0b3J5IHRoZSBzb3VyY2UgY29udHJvbCBzeXN0ZW0KICAgICAgKiBAcGFyYW0gZmlsZVNldCAgICB0aGUgZmlsZXMgYXJlIGNvcGllZCB0byB0aGUge0BsaW5rIG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQjZ2V0QmFzZWRpcigpfSBsb2NhdGlvbgogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIEV4cG9ydFNjbVJlc3VsdCBleHBvcnQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTM2Nyw3ICszNjgsNyBAQAogICAgICAqIEBwYXJhbSBmaWxlU2V0ICAgIHRoZSBmaWxlcyBhcmUgY29waWVkIHRvIHRoZSB7QGxpbmsgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCNnZXRCYXNlZGlyKCl9IGxvY2F0aW9uCiAgICAgICogQHBhcmFtIHZlcnNpb24gICAgZ2V0IHRoZSB2ZXJzaW9uIGRlZmluZWQgYnkgdGhlIGJyYW5jaC90YWcvcmV2aXNpb24KICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBFeHBvcnRTY21SZXN1bHQgZXhwb3J0KCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiB2ZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTM3OSw3ICszODAsNyBAQAogICAgICAqIEBwYXJhbSBmaWxlU2V0ICAgICAgICAgdGhlIGZpbGVzIGFyZSBjb3BpZWQgdG8gdGhlIHtAbGluayBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0I2dldEJhc2VkaXIoKX0gbG9jYXRpb24KICAgICAgKiBAcGFyYW0gb3V0cHV0RGlyZWN0b3J5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGV4cG9ydCB3aWxsIGJlIHN0b3JlZAogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIEV4cG9ydFNjbVJlc3VsdCBleHBvcnQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgb3V0cHV0RGlyZWN0b3J5ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTM5Miw3ICszOTMsNyBAQAogICAgICAqIEBwYXJhbSB2ZXJzaW9uICAgICAgICAgZ2V0IHRoZSB2ZXJzaW9uIGRlZmluZWQgYnkgdGhlIGJyYW5jaC90YWcvcmV2aXNpb24KICAgICAgKiBAcGFyYW0gb3V0cHV0RGlyZWN0b3J5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGV4cG9ydCB3aWxsIGJlIHN0b3JlZAogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIEV4cG9ydFNjbVJlc3VsdCBleHBvcnQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24sIFN0cmluZyBvdXRwdXREaXJlY3RvcnkgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwpAQCAtNDE2LDcgKzQxNyw3IEBACiAgICAgICogQHBhcmFtIGZpbGVTZXQgICAgdGhlIGZpbGVzIHRvIGJlIHJlbW92ZWQKICAgICAgKiBAcGFyYW0gbWVzc2FnZQogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIFJlbW92ZVNjbVJlc3VsdCByZW1vdmUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CkBAIC00MjksNyArNDMwLDcgQEAKICAgICAgKiBAcGFyYW0gZmlsZVNldCAgICB0aGUgZmlsZXMgdG8ga25vdyB0aGUgc3RhdHVzIGFib3V0LiBJbXBsZW1lbnRhdGlvbnMgY2FuIGFsc28gZ2l2ZSB0aGUgY2hhbmdlcwogICAgICAqICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHtAbGluayBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0I2dldEJhc2VkaXIoKX0gZG93bndhcmRzLgogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIFN0YXR1c1NjbVJlc3VsdCBzdGF0dXMoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTQ0Miw3ICs0NDMsNyBAQAogICAgICAqICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHtAbGluayBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0I2dldEJhc2VkaXIoKX0gZG93bndhcmRzLgogICAgICAqIEBwYXJhbSB0YWdOYW1lICAgIHRoZSB0YWcgbmFtZSB0byBhcHBseSB0byB0aGUgZmlsZXMKICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBUYWdTY21SZXN1bHQgdGFnKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZ05hbWUgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwpAQCAtNDU2LDE5ICs0NTcsMjAgQEAKICAgICAgKiBAcGFyYW0gdGFnTmFtZSAgICB0aGUgdGFnIG5hbWUgdG8gYXBwbHkgdG8gdGhlIGZpbGVzCiAgICAgICogQHBhcmFtIG1lc3NhZ2UgICAgdGhlIGNvbW1pdCBtZXNzYWdlIHVzZWQgZm9yIHRoZSB0YWcgY3JlYXRpb24KICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBUYWdTY21SZXN1bHQgdGFnKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZ05hbWUsIFN0cmluZyBtZXNzYWdlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKIAogICAgIC8qKgotICAgICAqIE1ha2UgYSBmaWxlIG5vIGxvbmdlciBlZGl0YWJsZS4gVGhpcyBpcyB0aGUgY29udGVycGFydCBvZiB7QGxpbmsgI2VkaXQob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQpfS4KKyAgICAgKiBNYWtlIGEgZmlsZSBubyBsb25nZXIgZWRpdGFibGUuIFRoaXMgaXMgdGhlIGNvbnRlcnBhcnQgb2YKKyAgICAgKiB7QGxpbmsgI2VkaXQob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQpfS4KICAgICAgKiBJdCBtYWtlcyB0aGUgZmlsZSByZWFkLW9ubHkgYWdhaW4uCiAgICAgICoKICAgICAgKiBAcGFyYW0gcmVwb3NpdG9yeSB0aGUgc291cmNlIGNvbnRyb2wgc3lzdGVtCiAgICAgICogQHBhcmFtIGZpbGVTZXQgICAgdGhlIGZpbGVzIHRvIG1ha2UgdW5lZGl0YWJsZQogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIFVuRWRpdFNjbVJlc3VsdCB1bmVkaXQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTQ3OSw3ICs0ODEsNyBAQAogICAgICAqIEBwYXJhbSByZXBvc2l0b3J5IHRoZSBzb3VyY2UgY29udHJvbCBzeXN0ZW0KICAgICAgKiBAcGFyYW0gZmlsZVNldCAgICBsb2NhdGlvbiBvZiB5b3VyIGxvY2FsIGNvcHkKICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CkBAIC00OTEsNyArNDkzLDcgQEAKICAgICAgKiBAcGFyYW0gZmlsZVNldCAgICBsb2NhdGlvbiBvZiB5b3VyIGxvY2FsIGNvcHkKICAgICAgKiBAcGFyYW0gdmVyc2lvbiAgICB1c2UgdGhlIHZlcnNpb24gZGVmaW5lZCBieSB0aGUgYnJhbmNoL3RhZy9yZXZpc2lvbgogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwpAQCAtNTAzLDcgKzUwNSw3IEBACiAgICAgICogQHBhcmFtIGZpbGVTZXQgICAgICBsb2NhdGlvbiBvZiB5b3VyIGxvY2FsIGNvcHkKICAgICAgKiBAcGFyYW0gcnVuQ2hhbmdlbG9nIFJ1biB0aGUgY2hhbmdlbG9nIGNvbW1hbmQgYWZ0ZXIgdGhlIHVwZGF0ZQogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBib29sZWFuIHJ1bkNoYW5nZWxvZyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CkBAIC01MTYsNyArNTE4LDcgQEAKICAgICAgKiBAcGFyYW0gdmVyc2lvbiAgICAgIHVzZSB0aGUgdmVyc2lvbiBkZWZpbmVkIGJ5IHRoZSBicmFuY2gvdGFnL3JldmlzaW9uCiAgICAgICogQHBhcmFtIHJ1bkNoYW5nZWxvZyBSdW4gdGhlIGNoYW5nZWxvZyBjb21tYW5kIGFmdGVyIHRoZSB1cGRhdGUKICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiB2ZXJzaW9uLCBib29sZWFuIHJ1bkNoYW5nZWxvZyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CkBAIC01MjgsNyArNTMwLDcgQEAKICAgICAgKiBAcGFyYW0gZmlsZVNldCAgICAgbG9jYXRpb24gb2YgeW91ciBsb2NhbCBjb3B5CiAgICAgICogQHBhcmFtIGRhdGVQYXR0ZXJuIHRoZSBkYXRlIHBhdHRlcm4gdXNlIGluIGNoYW5nZWxvZyBvdXRwdXQgcmV0dXJuZWQgYnkgc2NtIHRvb2wKICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIGRhdGVQYXR0ZXJuICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTU0MSw3ICs1NDMsNyBAQAogICAgICAqIEBwYXJhbSB2ZXJzaW9uICAgICB1c2UgdGhlIHZlcnNpb24gZGVmaW5lZCBieSB0aGUgYnJhbmNoL3RhZy9yZXZpc2lvbgogICAgICAqIEBwYXJhbSBkYXRlUGF0dGVybiB0aGUgZGF0ZSBwYXR0ZXJuIHVzZSBpbiBjaGFuZ2Vsb2cgb3V0cHV0IHJldHVybmVkIGJ5IHNjbSB0b29sCiAgICAgICogQHJldHVybgotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gdmVyc2lvbiwgU3RyaW5nIGRhdGVQYXR0ZXJuICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTU1Myw3ICs1NTUsNyBAQAogICAgICAqIEBwYXJhbSBmaWxlU2V0ICAgIGxvY2F0aW9uIG9mIHlvdXIgbG9jYWwgY29weQogICAgICAqIEBwYXJhbSBsYXN0VXBkYXRlCiAgICAgICogQHJldHVybgotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIERhdGUgbGFzdFVwZGF0ZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CkBAIC01NjYsNyArNTY4LDcgQEAKICAgICAgKiBAcGFyYW0gdmVyc2lvbiAgICB1c2UgdGhlIHZlcnNpb24gZGVmaW5lZCBieSB0aGUgYnJhbmNoL3RhZy9yZXZpc2lvbgogICAgICAqIEBwYXJhbSBsYXN0VXBkYXRlCiAgICAgICogQHJldHVybgotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gdmVyc2lvbiwgRGF0ZSBsYXN0VXBkYXRlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTU3OSw3ICs1ODEsNyBAQAogICAgICAqIEBwYXJhbSBsYXN0VXBkYXRlICBEYXRlIG9mIGxhc3QgdXBkYXRlCiAgICAgICogQHBhcmFtIGRhdGVQYXR0ZXJuIHRoZSBkYXRlIHBhdHRlcm4gdXNlIGluIGNoYW5nZWxvZyBvdXRwdXQgcmV0dXJuZWQgYnkgc2NtIHRvb2wKICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgRGF0ZSBsYXN0VXBkYXRlLCBTdHJpbmcgZGF0ZVBhdHRlcm4gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwpAQCAtNTkzLDcgKzU5NSw3IEBACiAgICAgICogQHBhcmFtIGxhc3RVcGRhdGUgIERhdGUgb2YgbGFzdCB1cGRhdGUKICAgICAgKiBAcGFyYW0gZGF0ZVBhdHRlcm4gdGhlIGRhdGUgcGF0dGVybiB1c2UgaW4gY2hhbmdlbG9nIG91dHB1dCByZXR1cm5lZCBieSBzY20gdG9vbAogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24sIERhdGUgbGFzdFVwZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0ZVBhdHRlcm4gKQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL0Fic3RyYWN0U2NtUHJvdmlkZXIuamF2YSBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9BYnN0cmFjdFNjbVByb3ZpZGVyLmphdmEKaW5kZXggN2NkYmJhZi4uOWIxNmNiZCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL0Fic3RyYWN0U2NtUHJvdmlkZXIuamF2YQorKysgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvQWJzdHJhY3RTY21Qcm92aWRlci5qYXZhCkBAIC02OCwyOSArNjgsMjcgQEAKICAgICAvLwogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21TcGVjaWZpY0ZpbGVuYW1lKCkKICAgICB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXIjc2FuaXRpemVUYWdOYW1lKGphdmEubGFuZy5TdHJpbmcpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIHNhbml0aXplVGFnTmFtZSggU3RyaW5nIHRhZyApCiAgICAgewogICAgICAgICAvKiBieSBkZWZhdWx0LCB3ZSBhc3N1bWUgYWxsIHRhZ3MgYXJlIHZhbGlkLiAqLwogICAgICAgICByZXR1cm4gdGFnOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXIjdmFsaWRhdGVUYWdOYW1lKGphdmEubGFuZy5TdHJpbmcpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVRhZ05hbWUoIFN0cmluZyB0YWcgKQogICAgIHsKICAgICAgICAgLyogYnkgZGVmYXVsdCwgd2UgYXNzdW1lIGFsbCB0YWdzIGFyZSB2YWxpZC4gKi8KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgTGlzdCB2YWxpZGF0ZVNjbVVybCggU3RyaW5nIHNjbVNwZWNpZmljVXJsLCBjaGFyIGRlbGltaXRlciApCiAgICAgewogICAgICAgICBMaXN0IG1lc3NhZ2VzID0gbmV3IEFycmF5TGlzdCgpOwpAQCAtMTA3LDYgKzEwNSw3IEBACiAgICAgICAgIHJldHVybiBtZXNzYWdlczsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBib29sZWFuIHJlcXVpcmVzRWRpdE1vZGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTE2LDE5ICsxMTUsMTQgQEAKICAgICAvLyBTY20gSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyI2FkZChvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBBZGRTY21SZXN1bHQgYWRkKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBhZGQoIHJlcG9zaXRvcnksIGZpbGVTZXQsIChTdHJpbmcpIG51bGwgKTsKICAgICB9CiAKLQotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXIjYWRkKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LFN0cmluZykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBBZGRTY21SZXN1bHQgYWRkKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIG1lc3NhZ2UgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtMTUxLDE4ICsxNDUsMTQgQEAKICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaENvbW1hbmRTY21FeGNlcHRpb24oICJhZGQiICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciNicmFuY2gob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsamF2YS5sYW5nLlN0cmluZykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBCcmFuY2hTY21SZXN1bHQgYnJhbmNoKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIGJyYW5jaE5hbWUgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gYnJhbmNoKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBicmFuY2hOYW1lLCBudWxsICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciNicmFuY2gob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsamF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuU3RyaW5nKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEJyYW5jaFNjbVJlc3VsdCBicmFuY2goIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgYnJhbmNoTmFtZSwgU3RyaW5nIG1lc3NhZ2UgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtMTg3LDggKzE3Nyw3IEBACiAgICAgICAgIHRocm93IG5ldyBOb1N1Y2hDb21tYW5kU2NtRXhjZXB0aW9uKCAiYnJhbmNoIiApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXIjY2hhbmdlTG9nKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LGphdmEudXRpbC5EYXRlLGphdmEudXRpbC5EYXRlLGludCxqYXZhLmxhbmcuU3RyaW5nKQorICAgIC8qKiB7QGluaGVyaXREb2N9CiAgICAgICogQGRlcHJlY2F0ZWQKICAgICAgKi8KICAgICBwdWJsaWMgQ2hhbmdlTG9nU2NtUmVzdWx0IGNoYW5nZUxvZyggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIERhdGUgc3RhcnREYXRlLCBEYXRlIGVuZERhdGUsCkBAIC0xOTksNyArMTg4LDcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyI2NoYW5nZUxvZyhvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxqYXZhLnV0aWwuRGF0ZSxqYXZhLnV0aWwuRGF0ZSxpbnQsamF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuU3RyaW5nKQorICAgICAqIHtAaW5oZXJpdERvY30KICAgICAgKiBAZGVwcmVjYXRlZAogICAgICAqLwogICAgIHB1YmxpYyBDaGFuZ2VMb2dTY21SZXN1bHQgY2hhbmdlTG9nKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgRGF0ZSBzdGFydERhdGUsIERhdGUgZW5kRGF0ZSwKQEAgLTIxNiw5ICsyMDUsNyBAQAogCiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciNjaGFuZ2VMb2cob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsamF2YS51dGlsLkRhdGUsamF2YS51dGlsLkRhdGUsaW50LFNjbUJyYW5jaCkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGFuZ2VMb2dTY21SZXN1bHQgY2hhbmdlTG9nKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgRGF0ZSBzdGFydERhdGUsIERhdGUgZW5kRGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bURheXMsIFNjbUJyYW5jaCBicmFuY2ggKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC0yMjYsOSArMjEzLDcgQEAKICAgICAgICAgcmV0dXJuIGNoYW5nZUxvZyggcmVwb3NpdG9yeSwgZmlsZVNldCwgc3RhcnREYXRlLCBlbmREYXRlLCBudW1EYXlzLCBicmFuY2gsIG51bGwgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyI2NoYW5nZUxvZyhvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxqYXZhLnV0aWwuRGF0ZSxqYXZhLnV0aWwuRGF0ZSxpbnQsU2NtQnJhbmNoLFN0cmluZykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGFuZ2VMb2dTY21SZXN1bHQgY2hhbmdlTG9nKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgRGF0ZSBzdGFydERhdGUsIERhdGUgZW5kRGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bURheXMsIFNjbUJyYW5jaCBicmFuY2gsIFN0cmluZyBkYXRlUGF0dGVybiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTI1MCw4ICsyMzUsOCBAQAogICAgICAgICByZXR1cm4gY2hhbmdlbG9nKCByZXBvc2l0b3J5LmdldFByb3ZpZGVyUmVwb3NpdG9yeSgpLCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciNjaGFuZ2VMb2cob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsamF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuU3RyaW5nKQorCisgICAgLyoqIHtAaW5oZXJpdERvY30KICAgICAgKiBAZGVwcmVjYXRlZAogICAgICAqLwogICAgIHB1YmxpYyBDaGFuZ2VMb2dTY21SZXN1bHQgY2hhbmdlTG9nKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHN0YXJ0VGFnLCBTdHJpbmcgZW5kVGFnICkKQEAgLTI2MCw4ICsyNDUsNyBAQAogICAgICAgICByZXR1cm4gY2hhbmdlTG9nKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBzdGFydFRhZywgZW5kVGFnLCBudWxsICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciNjaGFuZ2VMb2cob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsamF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuU3RyaW5nLGphdmEubGFuZy5TdHJpbmcpCisgICAgLyoqIHtAaW5oZXJpdERvY30KICAgICAgKiBAZGVwcmVjYXRlZAogICAgICAqLwogICAgIHB1YmxpYyBDaGFuZ2VMb2dTY21SZXN1bHQgY2hhbmdlTG9nKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHN0YXJ0VGFnLCBTdHJpbmcgZW5kVGFnLApAQCAtMjg0LDkgKzI2OCw3IEBACiAgICAgICAgIHJldHVybiBjaGFuZ2VMb2coIHJlcG9zaXRvcnksIGZpbGVTZXQsIHN0YXJ0UmV2aXNpb24sIGVuZFJldmlzaW9uLCBudWxsICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciNjaGFuZ2VMb2cob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsU2NtVmVyc2lvbixTY21WZXJzaW9uKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoYW5nZUxvZ1NjbVJlc3VsdCBjaGFuZ2VMb2coIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHN0YXJ0VmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiBlbmRWZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtMjk0LDkgKzI3Niw3IEBACiAgICAgICAgIHJldHVybiBjaGFuZ2VMb2coIHJlcG9zaXRvcnksIGZpbGVTZXQsIHN0YXJ0VmVyc2lvbiwgZW5kVmVyc2lvbiwgbnVsbCApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXIjY2hhbmdlTG9nKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LFNjbVZlcnNpb24sU2NtVmVyc2lvbixqYXZhLmxhbmcuU3RyaW5nKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoYW5nZUxvZ1NjbVJlc3VsdCBjaGFuZ2VMb2coIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHN0YXJ0VmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiBlbmRWZXJzaW9uLCBTdHJpbmcgZGF0ZVBhdHRlcm4gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC0zMjEsOCArMzAxLDggQEAKICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaENvbW1hbmRTY21FeGNlcHRpb24oICJjaGFuZ2Vsb2ciICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciNjaGVja0luKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLlN0cmluZykKKworICAgIC8qKiB7QGluaGVyaXREb2N9CiAgICAgICogQGRlcHJlY2F0ZWQKICAgICAgKi8KICAgICBwdWJsaWMgQ2hlY2tJblNjbVJlc3VsdCBjaGVja0luKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZywgU3RyaW5nIG1lc3NhZ2UgKQpAQCAtMzM4LDE4ICszMTgsMTQgQEAKICAgICAgICAgcmV0dXJuIGNoZWNrSW4oIHJlcG9zaXRvcnksIGZpbGVTZXQsIHNjbVZlcnNpb24sIG1lc3NhZ2UgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyI2NoZWNrSW4ob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsamF2YS5sYW5nLlN0cmluZykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGVja0luU2NtUmVzdWx0IGNoZWNrSW4oIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBjaGVja0luKCByZXBvc2l0b3J5LCBmaWxlU2V0LCAoU2NtVmVyc2lvbikgbnVsbCwgbWVzc2FnZSApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXIjY2hlY2tJbihvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxTY21WZXJzaW9uLGphdmEubGFuZy5TdHJpbmcpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hlY2tJblNjbVJlc3VsdCBjaGVja0luKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiBzY21WZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtMzcyLDggKzM0OCw4IEBACiAgICAgICAgIHRocm93IG5ldyBOb1N1Y2hDb21tYW5kU2NtRXhjZXB0aW9uKCAiY2hlY2tpbiIgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyI2NoZWNrT3V0KG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LGphdmEubGFuZy5TdHJpbmcpCisKKyAgICAvKioge0Bpbmhlcml0RG9jfQogICAgICAqIEBkZXByZWNhdGVkCiAgICAgICovCiAgICAgcHVibGljIENoZWNrT3V0U2NtUmVzdWx0IGNoZWNrT3V0KCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZyApCkBAIC0zODIsOCArMzU4LDcgQEAKICAgICAgICAgcmV0dXJuIGNoZWNrT3V0KCByZXBvc2l0b3J5LCBmaWxlU2V0LCB0YWcsIHRydWUgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyI2NoZWNrT3V0KG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LGphdmEubGFuZy5TdHJpbmcsYm9vbGVhbikKKyAgICAvKioge0Bpbmhlcml0RG9jfQogICAgICAqIEBkZXByZWNhdGVkCiAgICAgICovCiAgICAgcHVibGljIENoZWNrT3V0U2NtUmVzdWx0IGNoZWNrT3V0KCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZywgYm9vbGVhbiByZWN1cnNpdmUgKQpAQCAtMzk5LDM2ICszNzQsMjggQEAKICAgICAgICAgcmV0dXJuIGNoZWNrT3V0KCByZXBvc2l0b3J5LCBmaWxlU2V0LCBzY21WZXJzaW9uLCByZWN1cnNpdmUgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyI2NoZWNrT3V0KG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0KQotICAgICAqLworICAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGVja091dFNjbVJlc3VsdCBjaGVja091dCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gY2hlY2tPdXQoIHJlcG9zaXRvcnksIGZpbGVTZXQsIChTY21WZXJzaW9uKSBudWxsLCB0cnVlICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciNjaGVja091dChvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxTY21WZXJzaW9uKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoZWNrT3V0U2NtUmVzdWx0IGNoZWNrT3V0KCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiBzY21WZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIGNoZWNrT3V0KCByZXBvc2l0b3J5LCBmaWxlU2V0LCBzY21WZXJzaW9uLCB0cnVlICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciNjaGVja091dChvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxib29sZWFuKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoZWNrT3V0U2NtUmVzdWx0IGNoZWNrT3V0KCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgYm9vbGVhbiByZWN1cnNpdmUgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gY2hlY2tPdXQoIHJlcG9zaXRvcnksIGZpbGVTZXQsIChTY21WZXJzaW9uKSBudWxsLCByZWN1cnNpdmUgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyI2NoZWNrT3V0KG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LGphdmEubGFuZy5TdHJpbmcsYm9vbGVhbikKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGVja091dFNjbVJlc3VsdCBjaGVja091dCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gc2NtVmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gcmVjdXJzaXZlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtNDUxLDggKzQxOCw3IEBACiAgICAgICAgIHRocm93IG5ldyBOb1N1Y2hDb21tYW5kU2NtRXhjZXB0aW9uKCAiY2hlY2tvdXQiICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciNkaWZmKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLlN0cmluZykKKyAgICAvKioge0Bpbmhlcml0RG9jfQogICAgICAqIEBkZXByZWNhdGVkCiAgICAgICovCiAgICAgcHVibGljIERpZmZTY21SZXN1bHQgZGlmZiggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyBzdGFydFJldmlzaW9uLCBTdHJpbmcgZW5kUmV2aXNpb24gKQpAQCAtNDc0LDkgKzQ0MCw3IEBACiAgICAgICAgIHJldHVybiBkaWZmKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBzdGFydFZlcnNpb24sIGVuZFZlcnNpb24gKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyI2RpZmYob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsU2NtVmVyc2lvbixTY21WZXJzaW9uKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIERpZmZTY21SZXN1bHQgZGlmZiggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gc3RhcnRWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbVZlcnNpb24gZW5kVmVyc2lvbiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTQ5OCw5ICs0NjIsNyBAQAogICAgICAgICB0aHJvdyBuZXcgTm9TdWNoQ29tbWFuZFNjbUV4Y2VwdGlvbiggImRpZmYiICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciNlZGl0KG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0KQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEVkaXRTY21SZXN1bHQgZWRpdCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtNTE5LDggKzQ4MSw3IEBACiAgICAgICAgIHJldHVybiBuZXcgRWRpdFNjbVJlc3VsdCggIiIsIG51bGwsIG51bGwsIHRydWUgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyI2V4cG9ydChvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxqYXZhLmxhbmcuU3RyaW5nKQorICAgIC8qKiB7QGluaGVyaXREb2N9CiAgICAgICogQGRlcHJlY2F0ZWQKICAgICAgKi8KICAgICBwdWJsaWMgRXhwb3J0U2NtUmVzdWx0IGV4cG9ydCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyB0YWcgKQpAQCAtNTI5LDggKzQ5MCw3IEBACiAgICAgICAgIHJldHVybiBleHBvcnQoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHRhZywgbnVsbCApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXIjZXhwb3J0KG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LGphdmEubGFuZy5TdHJpbmcsU3RyaW5nKQorICAgIC8qKiB7QGluaGVyaXREb2N9CiAgICAgICogQGRlcHJlY2F0ZWQKICAgICAgKi8KICAgICBwdWJsaWMgRXhwb3J0U2NtUmVzdWx0IGV4cG9ydCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyB0YWcsIFN0cmluZyBvdXRwdXREaXJlY3RvcnkgKQpAQCAtNTQ2LDI3ICs1MDYsMjEgQEAKICAgICAgICAgcmV0dXJuIGV4cG9ydCggcmVwb3NpdG9yeSwgZmlsZVNldCwgc2NtVmVyc2lvbiwgb3V0cHV0RGlyZWN0b3J5ICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciNleHBvcnQob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgRXhwb3J0U2NtUmVzdWx0IGV4cG9ydCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gZXhwb3J0KCByZXBvc2l0b3J5LCBmaWxlU2V0LCAoU2NtVmVyc2lvbikgbnVsbCwgbnVsbCApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXIjZXhwb3J0KG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LFNjbVZlcnNpb24pCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgRXhwb3J0U2NtUmVzdWx0IGV4cG9ydCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gc2NtVmVyc2lvbiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBleHBvcnQoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHNjbVZlcnNpb24sIG51bGwgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyI2V4cG9ydChvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxTY21WZXJzaW9uLFN0cmluZykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBFeHBvcnRTY21SZXN1bHQgZXhwb3J0KCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiBzY21WZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgb3V0cHV0RGlyZWN0b3J5ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtNTg5LDkgKzU0Myw3IEBACiAgICAgICAgIHRocm93IG5ldyBOb1N1Y2hDb21tYW5kU2NtRXhjZXB0aW9uKCAiZXhwb3J0IiApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXIjbGlzdChvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxib29sZWFuLFN0cmluZykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBMaXN0U2NtUmVzdWx0IGxpc3QoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBib29sZWFuIHJlY3Vyc2l2ZSwgU3RyaW5nIHRhZyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC02MDUsOSArNTU3LDcgQEAKICAgICAgICAgcmV0dXJuIGxpc3QoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHJlY3Vyc2l2ZSwgc2NtVmVyc2lvbiApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXIjbGlzdChvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxib29sZWFuLG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVZlcnNpb24pCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgTGlzdFNjbVJlc3VsdCBsaXN0KCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgYm9vbGVhbiByZWN1cnNpdmUsIFNjbVZlcnNpb24gc2NtVmVyc2lvbiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC02MzMsNyArNTgzLDcgQEAKICAgICAgKiBAcGFyYW0gcGFyYW1ldGVycwogICAgICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkKICAgICAgKiBAdGhyb3dzIE5vU3VjaENvbW1hbmRTY21FeGNlcHRpb24gdW5sZXNzIG92ZXJyaWRlbiBieSBzdWJjbGFzcwotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgcHJvdGVjdGVkIExpc3RTY21SZXN1bHQgbGlzdCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTY1OCw5ICs2MDgsNyBAQAogICAgICAgICByZXR1cm4gbmV3IExvZ2luU2NtUmVzdWx0KCBudWxsLCBudWxsLCBudWxsLCB0cnVlICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciNyZW1vdmUob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsamF2YS5sYW5nLlN0cmluZykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBSZW1vdmVTY21SZXN1bHQgcmVtb3ZlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIG1lc3NhZ2UgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtNjgwLDkgKzYyOCw3IEBACiAgICAgICAgIHRocm93IG5ldyBOb1N1Y2hDb21tYW5kU2NtRXhjZXB0aW9uKCAicmVtb3ZlIiApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXIjc3RhdHVzKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0KQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0YXR1c1NjbVJlc3VsdCBzdGF0dXMoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKQEAgLTcwMCwxOCArNjQ2LDE0IEBACiAgICAgICAgIHRocm93IG5ldyBOb1N1Y2hDb21tYW5kU2NtRXhjZXB0aW9uKCAic3RhdHVzIiApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXIjdGFnKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LGphdmEubGFuZy5TdHJpbmcpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgVGFnU2NtUmVzdWx0IHRhZyggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyB0YWdOYW1lICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRhZyggcmVwb3NpdG9yeSwgZmlsZVNldCwgdGFnTmFtZSwgbnVsbCApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXIjdGFnKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLlN0cmluZykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBUYWdTY21SZXN1bHQgdGFnKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZ05hbWUsIFN0cmluZyBtZXNzYWdlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKQEAgLTczNSw5ICs2NzcsNyBAQAogICAgICAgICB0aHJvdyBuZXcgTm9TdWNoQ29tbWFuZFNjbUV4Y2VwdGlvbiggInRhZyIgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyI3VuZWRpdChvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBVbkVkaXRTY21SZXN1bHQgdW5lZGl0KCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC03NTcsOCArNjk3LDcgQEAKICAgICAgICAgcmV0dXJuIG5ldyBVbkVkaXRTY21SZXN1bHQoICIiLCBudWxsLCBudWxsLCB0cnVlICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciN1cGRhdGUob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsamF2YS5sYW5nLlN0cmluZykKKyAgICAvKioge0Bpbmhlcml0RG9jfQogICAgICAqIEBkZXByZWNhdGVkCiAgICAgICovCiAgICAgcHVibGljIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgdGFnICkKQEAgLTc2Nyw4ICs3MDYsNyBAQAogICAgICAgICByZXR1cm4gdXBkYXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCB0YWcsIHRydWUgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyI3VwZGF0ZShvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxqYXZhLmxhbmcuU3RyaW5nLGJvb2xlYW4pCisgICAgLyoqIHtAaW5oZXJpdERvY30KICAgICAgKiBAZGVwcmVjYXRlZAogICAgICAqLwogICAgIHB1YmxpYyBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZywgYm9vbGVhbiBydW5DaGFuZ2Vsb2cgKQpAQCAtNzc3LDM2ICs3MTUsMjggQEAKICAgICAgICAgcmV0dXJuIHVwZGF0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgdGFnLCAiIiwgcnVuQ2hhbmdlbG9nICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciN1cGRhdGUob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gdXBkYXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCAoU2NtVmVyc2lvbikgbnVsbCwgdHJ1ZSApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXIjdXBkYXRlKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LFNjbVZlcnNpb24pCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gc2NtVmVyc2lvbiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiB1cGRhdGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHNjbVZlcnNpb24sIHRydWUgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyI3VwZGF0ZShvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxib29sZWFuKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBib29sZWFuIHJ1bkNoYW5nZWxvZyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiB1cGRhdGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIChTY21WZXJzaW9uKSBudWxsLCAiIiwgcnVuQ2hhbmdlbG9nICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciN1cGRhdGUob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsU2NtVmVyc2lvbixib29sZWFuKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHNjbVZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gcnVuQ2hhbmdlbG9nICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtODE0LDggKzc0NCw3IEBACiAgICAgICAgIHJldHVybiB1cGRhdGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHNjbVZlcnNpb24sICIiLCBydW5DaGFuZ2Vsb2cgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyI3VwZGF0ZShvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxqYXZhLmxhbmcuU3RyaW5nLGphdmEubGFuZy5TdHJpbmcpCisgICAgLyoqIHtAaW5oZXJpdERvY30KICAgICAgKiBAZGVwcmVjYXRlZAogICAgICAqLwogICAgIHB1YmxpYyBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZywgU3RyaW5nIGRhdGVQYXR0ZXJuICkKQEAgLTgyNCw5ICs3NTMsNyBAQAogICAgICAgICByZXR1cm4gdXBkYXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCB0YWcsIGRhdGVQYXR0ZXJuLCB0cnVlICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciN1cGRhdGUob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsU2NtVmVyc2lvbixqYXZhLmxhbmcuU3RyaW5nKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHNjbVZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRlUGF0dGVybiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTg2OCw4ICs3OTUsNyBAQAogICAgICAgICByZXR1cm4gdXBkYXRlKCByZXBvc2l0b3J5LmdldFByb3ZpZGVyUmVwb3NpdG9yeSgpLCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciN1cGRhdGUob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsamF2YS5sYW5nLlN0cmluZyxqYXZhLnV0aWwuRGF0ZSkKKyAgICAvKioge0Bpbmhlcml0RG9jfQogICAgICAqIEBkZXByZWNhdGVkCiAgICAgICovCiAgICAgcHVibGljIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgdGFnLCBEYXRlIGxhc3RVcGRhdGUgKQpAQCAtODc4LDE4ICs4MDQsMTQgQEAKICAgICAgICAgcmV0dXJuIHVwZGF0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgdGFnLCBsYXN0VXBkYXRlLCBudWxsICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciN1cGRhdGUob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsU2NtVmVyc2lvbixqYXZhLnV0aWwuRGF0ZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiBzY21WZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlIGxhc3RVcGRhdGUgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gdXBkYXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBzY21WZXJzaW9uLCBsYXN0VXBkYXRlLCBudWxsICk7CiAgICAgfQotCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciN1cGRhdGUob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsamF2YS5sYW5nLlN0cmluZyxqYXZhLnV0aWwuRGF0ZSxqYXZhLmxhbmcuU3RyaW5nKQorICAgIC8qKiB7QGluaGVyaXREb2N9CiAgICAgICogQGRlcHJlY2F0ZWQKICAgICAgKi8KICAgICBwdWJsaWMgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyB0YWcsIERhdGUgbGFzdFVwZGF0ZSwKQEAgLTkwNiw5ICs4MjgsNyBAQAogICAgICAgICByZXR1cm4gdXBkYXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBzY21CcmFuY2gsIGxhc3RVcGRhdGUsIGRhdGVQYXR0ZXJuICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlciN1cGRhdGUob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsU2NtVmVyc2lvbixqYXZhLnV0aWwuRGF0ZSxqYXZhLmxhbmcuU3RyaW5nKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHNjbVZlcnNpb24sIERhdGUgbGFzdFVwZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGVQYXR0ZXJuICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtOTQyLDkgKzg2Miw3IEBACiAgICAgLy8KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyI2FkZExpc3RlbmVyKG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXIpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lciggU2NtTG9nZ2VyIGxvZ2dlciApCiAgICAgewogICAgICAgICBsb2dEaXNwYXRjaGVyLmFkZExpc3RlbmVyKCBsb2dnZXIgKTsKQEAgLTk1NSw5ICs4NzMsNyBAQAogICAgICAgICByZXR1cm4gbG9nRGlzcGF0Y2hlcjsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyI21ha2VQcm92aWRlclNjbVJlcG9zaXRvcnkoamF2YS5pby5GaWxlKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSBtYWtlUHJvdmlkZXJTY21SZXBvc2l0b3J5KCBGaWxlIHBhdGggKQogICAgICAgICB0aHJvd3MgU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbiwgVW5rbm93blJlcG9zaXRvcnlTdHJ1Y3R1cmUKICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvU2NtUHJvdmlkZXIuamF2YSBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9TY21Qcm92aWRlci5qYXZhCmluZGV4IGQyM2NhZjkuLmQzZmY1NDYgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9TY21Qcm92aWRlci5qYXZhCisrKyBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9TY21Qcm92aWRlci5qYXZhCkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgKiBAcGFyYW0gcmVwb3NpdG9yeSB0aGUgc291cmNlIGNvbnRyb2wgc3lzdGVtCiAgICAgICogQHBhcmFtIGZpbGVTZXQgICAgdGhlIGZpbGVzIHRvIGJlIGFkZGVkCiAgICAgICogQHJldHVybiBhbiB7QGxpbmsgQWRkU2NtUmVzdWx0fSB0aGF0IGNvbnRhaW5zIHRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBhZGRlZAotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgQWRkU2NtUmVzdWx0IGFkZCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwpAQCAtMTIxLDcgKzEyMSw3IEBACiAgICAgICogQHBhcmFtIGZpbGVTZXQgICAgdGhlIGZpbGVzIHRvIGJlIGFkZGVkCiAgICAgICogQHBhcmFtIG1lc3NhZ2UgICAgYSBzdHJpbmcgdGhhdCBpcyBhIGNvbW1lbnQgb24gdGhlIG5ldyBhZGRlZCBmaWxlCiAgICAgICogQHJldHVybiBhbiB7QGxpbmsgQWRkU2NtUmVzdWx0fSB0aGF0IGNvbnRhaW5zIHRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBhZGRlZAotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgQWRkU2NtUmVzdWx0IGFkZCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyBtZXNzYWdlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTEzNCw3ICsxMzQsNyBAQAogICAgICAqICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHtAbGluayBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0I2dldEJhc2VkaXIoKX0gZG93bndhcmRzLgogICAgICAqIEBwYXJhbSBicmFuY2hOYW1lIHRoZSBicmFuY2ggbmFtZSB0byBhcHBseSB0byB0aGUgZmlsZXMKICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBCcmFuY2hTY21SZXN1bHQgYnJhbmNoKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIGJyYW5jaE5hbWUgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAgICAgICogQHBhcmFtIGJyYW5jaE5hbWUgdGhlIGJyYW5jaCBuYW1lIHRvIGFwcGx5IHRvIHRoZSBmaWxlcwogICAgICAqIEBwYXJhbSBtZXNzYWdlICAgIHRoZSBjb21taXQgbWVzc2FnZSB1c2VkIGZvciB0aGUgdGFnIGNyZWF0aW9uCiAgICAgICogQHJldHVybgotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgQnJhbmNoU2NtUmVzdWx0IGJyYW5jaCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyBicmFuY2hOYW1lLCBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CkBAIC0xNjUsOCArMTY1LDkgQEAKICAgICAgKiBAcGFyYW0gbnVtRGF5cyAgICB0aGUgbnVtYmVyIGRheXMgYmVmb3JlIHRoZSBjdXJyZW50IHRpbWUgaWYgc3RhcnRkYXRlIGFuZCBlbmRkYXRlIGFyZSBudWxsCiAgICAgICogQHBhcmFtIGJyYW5jaCAgICAgdGhlIGJyYW5jaC90YWcgbmFtZQogICAgICAqIEByZXR1cm4gVGhlIFNDTSByZXN1bHQgb2YgdGhlIGNoYW5nZWxvZyBjb21tYW5kCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KLSAgICAgKiBAZGVwcmVjYXRlZCB5b3UgbXVzdCB1c2Uge0BsaW5rIFNjbVByb3ZpZGVyI2NoYW5nZUxvZyhvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxqYXZhLnV0aWwuRGF0ZSxqYXZhLnV0aWwuRGF0ZSxpbnQsb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtQnJhbmNoKX0KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKKyAgICAgKiBAZGVwcmVjYXRlZCB5b3UgbXVzdCB1c2Uge0BsaW5rIFNjbVByb3ZpZGVyI2NoYW5nZUxvZyhvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksCisgICAgICogb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxqYXZhLnV0aWwuRGF0ZSxqYXZhLnV0aWwuRGF0ZSxpbnQsb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtQnJhbmNoKX0KICAgICAgKi8KICAgICBDaGFuZ2VMb2dTY21SZXN1bHQgY2hhbmdlTG9nKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgRGF0ZSBzdGFydERhdGUsIERhdGUgZW5kRGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtRGF5cywgU3RyaW5nIGJyYW5jaCApCkBAIC0xODQsNyArMTg1LDcgQEAKICAgICAgKiBAcGFyYW0gbnVtRGF5cyAgICB0aGUgbnVtYmVyIGRheXMgYmVmb3JlIHRoZSBjdXJyZW50IHRpbWUgaWYgc3RhcnRkYXRlIGFuZCBlbmRkYXRlIGFyZSBudWxsCiAgICAgICogQHBhcmFtIGJyYW5jaCAgICAgdGhlIGJyYW5jaC90YWcKICAgICAgKiBAcmV0dXJuIFRoZSBTQ00gcmVzdWx0IG9mIHRoZSBjaGFuZ2Vsb2cgY29tbWFuZAotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgQ2hhbmdlTG9nU2NtUmVzdWx0IGNoYW5nZUxvZyggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIERhdGUgc3RhcnREYXRlLCBEYXRlIGVuZERhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bURheXMsIFNjbUJyYW5jaCBicmFuY2ggKQpAQCAtMjAzLDggKzIwNCw5IEBACiAgICAgICogQHBhcmFtIGJyYW5jaCAgICAgIHRoZSBicmFuY2gvdGFnIG5hbWUKICAgICAgKiBAcGFyYW0gZGF0ZVBhdHRlcm4gdGhlIGRhdGUgcGF0dGVybiB1c2UgaW4gY2hhbmdlbG9nIG91dHB1dCByZXR1cm5lZCBieSBzY20gdG9vbAogICAgICAqIEByZXR1cm4gVGhlIFNDTSByZXN1bHQgb2YgdGhlIGNoYW5nZWxvZyBjb21tYW5kCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KLSAgICAgKiBAZGVwcmVjYXRlZCB5b3UgbXVzdCB1c2Uge0BsaW5rIFNjbVByb3ZpZGVyI2NoYW5nZUxvZyhvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxqYXZhLnV0aWwuRGF0ZSxqYXZhLnV0aWwuRGF0ZSxpbnQsb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtQnJhbmNoLFN0cmluZyl9CisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CisgICAgICogQGRlcHJlY2F0ZWQgeW91IG11c3QgdXNlIHtAbGluayBTY21Qcm92aWRlciNjaGFuZ2VMb2cob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LAorICAgICAqIG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsamF2YS51dGlsLkRhdGUsamF2YS51dGlsLkRhdGUsaW50LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUJyYW5jaCxTdHJpbmcpfQogICAgICAqLwogICAgIENoYW5nZUxvZ1NjbVJlc3VsdCBjaGFuZ2VMb2coIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBEYXRlIHN0YXJ0RGF0ZSwgRGF0ZSBlbmREYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1EYXlzLCBTdHJpbmcgYnJhbmNoLCBTdHJpbmcgZGF0ZVBhdHRlcm4gKQpAQCAtMjIzLDcgKzIyNSw3IEBACiAgICAgICogQHBhcmFtIGJyYW5jaCAgICAgIHRoZSBicmFuY2gvdGFnCiAgICAgICogQHBhcmFtIGRhdGVQYXR0ZXJuIHRoZSBkYXRlIHBhdHRlcm4gdXNlIGluIGNoYW5nZWxvZyBvdXRwdXQgcmV0dXJuZWQgYnkgc2NtIHRvb2wKICAgICAgKiBAcmV0dXJuIFRoZSBTQ00gcmVzdWx0IG9mIHRoZSBjaGFuZ2Vsb2cgY29tbWFuZAotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgQ2hhbmdlTG9nU2NtUmVzdWx0IGNoYW5nZUxvZyggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIERhdGUgc3RhcnREYXRlLCBEYXRlIGVuZERhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bURheXMsIFNjbUJyYW5jaCBicmFuY2gsIFN0cmluZyBkYXRlUGF0dGVybiApCkBAIC0yMzksOCArMjQxLDkgQEAKICAgICAgKiBAcGFyYW0gc3RhcnRUYWcgICB0aGUgc3RhcnQgdGFnCiAgICAgICogQHBhcmFtIGVuZFRhZyAgICAgdGhlIGVuZCB0YWcKICAgICAgKiBAcmV0dXJuIFRoZSBTQ00gcmVzdWx0IG9mIHRoZSBjaGFuZ2Vsb2cgY29tbWFuZAotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCi0gICAgICogQGRlcHJlY2F0ZWQgeW91IG11c3QgdXNlIHtAbGluayBTY21Qcm92aWRlciNjaGFuZ2VMb2cob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVmVyc2lvbixvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21WZXJzaW9uKX0KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKKyAgICAgKiBAZGVwcmVjYXRlZCB5b3UgbXVzdCB1c2Uge0BsaW5rIFNjbVByb3ZpZGVyI2NoYW5nZUxvZyhvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksCisgICAgICogb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21WZXJzaW9uLG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVZlcnNpb24pfQogICAgICAqLwogICAgIENoYW5nZUxvZ1NjbVJlc3VsdCBjaGFuZ2VMb2coIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgc3RhcnRUYWcsIFN0cmluZyBlbmRUYWcgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwpAQCAtMjU1LDcgKzI1OCw3IEBACiAgICAgICogQHBhcmFtIHN0YXJ0VmVyc2lvbiB0aGUgc3RhcnQgYnJhbmNoL3RhZy9yZXZpc2lvbgogICAgICAqIEBwYXJhbSBlbmRWZXJzaW9uICAgdGhlIGVuZCBicmFuY2gvdGFnL3JldmlzaW9uCiAgICAgICogQHJldHVybiBUaGUgU0NNIHJlc3VsdCBvZiB0aGUgY2hhbmdlbG9nIGNvbW1hbmQKLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIENoYW5nZUxvZ1NjbVJlc3VsdCBjaGFuZ2VMb2coIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHN0YXJ0VmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIGVuZFZlcnNpb24gKQpAQCAtMjcyLDggKzI3NSw5IEBACiAgICAgICogQHBhcmFtIGVuZFRhZyAgICAgIHRoZSBlbmQgdGFnCiAgICAgICogQHBhcmFtIGRhdGVQYXR0ZXJuIHRoZSBkYXRlIHBhdHRlcm4gdXNlIGluIGNoYW5nZWxvZyBvdXRwdXQgcmV0dXJuZWQgYnkgc2NtIHRvb2wKICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KLSAgICAgKiBAZGVwcmVjYXRlZCB5b3UgbXVzdCB1c2Uge0BsaW5rIFNjbVByb3ZpZGVyI2NoYW5nZUxvZyhvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21WZXJzaW9uLG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVZlcnNpb24sU3RyaW5nKX0KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKKyAgICAgKiBAZGVwcmVjYXRlZCB5b3UgbXVzdCB1c2Uge0BsaW5rIFNjbVByb3ZpZGVyI2NoYW5nZUxvZyhvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksCisgICAgICogb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21WZXJzaW9uLG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVZlcnNpb24sU3RyaW5nKX0KICAgICAgKi8KICAgICBDaGFuZ2VMb2dTY21SZXN1bHQgY2hhbmdlTG9nKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHN0YXJ0VGFnLCBTdHJpbmcgZW5kVGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRlUGF0dGVybiApCkBAIC0yOTAsNyArMjk0LDcgQEAKICAgICAgKiBAcGFyYW0gZW5kUmV2aXNpb24gICB0aGUgZW5kIHJldmlzaW9uCiAgICAgICogQHBhcmFtIGRhdGVQYXR0ZXJuICAgdGhlIGRhdGUgcGF0dGVybiB1c2UgaW4gY2hhbmdlbG9nIG91dHB1dCByZXR1cm5lZCBieSBzY20gdG9vbAogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIENoYW5nZUxvZ1NjbVJlc3VsdCBjaGFuZ2VMb2coIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHN0YXJ0UmV2aXNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiBlbmRSZXZpc2lvbiwgU3RyaW5nIGRhdGVQYXR0ZXJuICkKQEAgLTMwOSw4ICszMTMsOSBAQAogICAgICAqIEBwYXJhbSB0YWcgICAgICAgIHRhZyBvciByZXZpc2lvbgogICAgICAqIEBwYXJhbSBtZXNzYWdlICAgIGEgc3RyaW5nIHRoYXQgaXMgYSBjb21tZW50IG9uIHRoZSBjaGFuZ2VzIHRoYXQgd2hlcmUgZG9uZQogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgotICAgICAqIEBkZXByZWNhdGVkIHlvdSBtdXN0IHVzZSB7QGxpbmsgU2NtUHJvdmlkZXIjY2hlY2tJbihvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21WZXJzaW9uLFN0cmluZyl9CisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CisgICAgICogQGRlcHJlY2F0ZWQgeW91IG11c3QgdXNlIHtAbGluayBTY21Qcm92aWRlciNjaGVja0luKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSwKKyAgICAgKiBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVZlcnNpb24sU3RyaW5nKX0KICAgICAgKi8KICAgICBDaGVja0luU2NtUmVzdWx0IGNoZWNrSW4oIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgdGFnLCBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CkBAIC0zMjcsNyArMzMyLDcgQEAKICAgICAgKiBAcGFyYW0gZmlsZVNldCAgICB0aGUgZmlsZXMgdG8gY2hlY2sgaW4gKHNvbWV0aW1lcyBjYWxsZWQgY29tbWl0KQogICAgICAqIEBwYXJhbSBtZXNzYWdlICAgIGEgc3RyaW5nIHRoYXQgaXMgYSBjb21tZW50IG9uIHRoZSBjaGFuZ2VzIHRoYXQgd2hlcmUgZG9uZQogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIENoZWNrSW5TY21SZXN1bHQgY2hlY2tJbiggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyBtZXNzYWdlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTM0NSw3ICszNTAsNyBAQAogICAgICAqIEBwYXJhbSByZXZpc2lvbiAgIGJyYW5jaC90YWcvcmV2aXNpb24KICAgICAgKiBAcGFyYW0gbWVzc2FnZSAgICBhIHN0cmluZyB0aGF0IGlzIGEgY29tbWVudCBvbiB0aGUgY2hhbmdlcyB0aGF0IHdoZXJlIGRvbmUKICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBDaGVja0luU2NtUmVzdWx0IGNoZWNrSW4oIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHJldmlzaW9uLCBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CkBAIC0zNTcsOCArMzYyLDkgQEAKICAgICAgKiBAcGFyYW0gZmlsZVNldCAgICB0aGUgZmlsZXMgYXJlIGNvcGllZCB0byB0aGUge0BsaW5rIG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQjZ2V0QmFzZWRpcigpfSBsb2NhdGlvbgogICAgICAqIEBwYXJhbSB0YWcgICAgICAgIGdldCB0aGUgdmVyc2lvbiBkZWZpbmVkIGJ5IHRoZSB0YWcKICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KLSAgICAgKiBAZGVwcmVjYXRlZCB5b3UgbXVzdCB1c2Uge0BsaW5rIFNjbVByb3ZpZGVyI2NoZWNrT3V0KG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVZlcnNpb24pfQorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQorICAgICAqIEBkZXByZWNhdGVkIHlvdSBtdXN0IHVzZSB7QGxpbmsgU2NtUHJvdmlkZXIjY2hlY2tPdXQob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LAorICAgICAqIG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVmVyc2lvbil9CiAgICAgICovCiAgICAgQ2hlY2tPdXRTY21SZXN1bHQgY2hlY2tPdXQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgdGFnICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTM2OSw3ICszNzUsNyBAQAogICAgICAqIEBwYXJhbSByZXBvc2l0b3J5IHRoZSBzb3VyY2UgY29udHJvbCBzeXN0ZW0KICAgICAgKiBAcGFyYW0gZmlsZVNldCAgICB0aGUgZmlsZXMgYXJlIGNvcGllZCB0byB0aGUge0BsaW5rIG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQjZ2V0QmFzZWRpcigpfSBsb2NhdGlvbgogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIENoZWNrT3V0U2NtUmVzdWx0IGNoZWNrT3V0KCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CkBAIC0zODEsNyArMzg3LDcgQEAKICAgICAgKiBAcGFyYW0gZmlsZVNldCAgICB0aGUgZmlsZXMgYXJlIGNvcGllZCB0byB0aGUge0BsaW5rIG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQjZ2V0QmFzZWRpcigpfSBsb2NhdGlvbgogICAgICAqIEBwYXJhbSB2ZXJzaW9uICAgIGdldCB0aGUgdmVyc2lvbiBkZWZpbmVkIGJ5IHRoZSByZXZpc2lvbiwgYnJhbmNoIG9yIHRhZwogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIENoZWNrT3V0U2NtUmVzdWx0IGNoZWNrT3V0KCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiB2ZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTM5NCw4ICs0MDAsOSBAQAogICAgICAqIEBwYXJhbSB0YWcgICAgICAgICAgIHRhZyBvciByZXZpc2lvbgogICAgICAqIEBwYXJhbSByZWN1cnNpdmUgICAgIHdoZXRoZXIgdG8gY2hlY2sgb3V0IHJlY3Vyc2l2ZWx5CiAgICAgICogQHJldHVybgotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCi0gICAgICogQGRlcHJlY2F0ZWQgeW91IG11c3QgdXNlIHtAbGluayBTY21Qcm92aWRlciNjaGVja091dChvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21WZXJzaW9uLGJvb2xlYW4pfQorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQorICAgICAqIEBkZXByZWNhdGVkIHlvdSBtdXN0IHVzZSB7QGxpbmsgU2NtUHJvdmlkZXIjY2hlY2tPdXQob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LAorICAgICAqIG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVmVyc2lvbixib29sZWFuKX0KICAgICAgKi8KICAgICBDaGVja091dFNjbVJlc3VsdCBjaGVja091dCggU2NtUmVwb3NpdG9yeSBzY21SZXBvc2l0b3J5LCBTY21GaWxlU2V0IHNjbUZpbGVTZXQsIFN0cmluZyB0YWcsIGJvb2xlYW4gcmVjdXJzaXZlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTQwNyw3ICs0MTQsNyBAQAogICAgICAqIEBwYXJhbSBzY21GaWxlU2V0ICAgIHRoZSBmaWxlcyBhcmUgY29waWVkIHRvIHRoZSB7QGxpbmsgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCNnZXRCYXNlZGlyKCl9IGxvY2F0aW9uCiAgICAgICogQHBhcmFtIHJlY3Vyc2l2ZSAgICAgd2hldGhlciB0byBjaGVjayBvdXQgcmVjdXJzaXZlbHkKICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBDaGVja091dFNjbVJlc3VsdCBjaGVja091dCggU2NtUmVwb3NpdG9yeSBzY21SZXBvc2l0b3J5LCBTY21GaWxlU2V0IHNjbUZpbGVTZXQsIGJvb2xlYW4gcmVjdXJzaXZlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTQyMCw3ICs0MjcsNyBAQAogICAgICAqIEBwYXJhbSB2ZXJzaW9uICAgICAgIGdldCB0aGUgdmVyc2lvbiBkZWZpbmVkIGJ5IHRoZSByZXZpc2lvbiwgYnJhbmNoIG9yIHRhZwogICAgICAqIEBwYXJhbSByZWN1cnNpdmUgICAgIHdoZXRoZXIgdG8gY2hlY2sgb3V0IHJlY3Vyc2l2ZWx5CiAgICAgICogQHJldHVybgotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgQ2hlY2tPdXRTY21SZXN1bHQgY2hlY2tPdXQoIFNjbVJlcG9zaXRvcnkgc2NtUmVwb3NpdG9yeSwgU2NtRmlsZVNldCBzY21GaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gcmVjdXJzaXZlICkKQEAgLTQzNCw4ICs0NDEsOSBAQAogICAgICAqIEBwYXJhbSBzdGFydFJldmlzaW9uIHRoZSBzdGFydCByZXZpc2lvbgogICAgICAqIEBwYXJhbSBlbmRSZXZpc2lvbiAgIHRoZSBlbmQgcmV2aXNpb24KICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KLSAgICAgKiBAZGVwcmVjYXRlZCB5b3UgbXVzdCB1c2Uge0BsaW5rIFNjbVByb3ZpZGVyI2RpZmYob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVmVyc2lvbixvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21WZXJzaW9uKX0KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKKyAgICAgKiBAZGVwcmVjYXRlZCB5b3UgbXVzdCB1c2Uge0BsaW5rIFNjbVByb3ZpZGVyI2RpZmYob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LAorICAgICAqIG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVmVyc2lvbixvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21WZXJzaW9uKX0KICAgICAgKi8KICAgICBEaWZmU2NtUmVzdWx0IGRpZmYoIFNjbVJlcG9zaXRvcnkgc2NtUmVwb3NpdG9yeSwgU2NtRmlsZVNldCBzY21GaWxlU2V0LCBTdHJpbmcgc3RhcnRSZXZpc2lvbiwgU3RyaW5nIGVuZFJldmlzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTQ0OCw3ICs0NTYsNyBAQAogICAgICAqIEBwYXJhbSBzdGFydFZlcnNpb24gIHRoZSBzdGFydCBicmFuY2gvdGFnL3JldmlzaW9uCiAgICAgICogQHBhcmFtIGVuZFZlcnNpb24gICAgdGhlIGVuZCBicmFuY2gvdGFnL3JldmlzaW9uCiAgICAgICogQHJldHVybgotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgRGlmZlNjbVJlc3VsdCBkaWZmKCBTY21SZXBvc2l0b3J5IHNjbVJlcG9zaXRvcnksIFNjbUZpbGVTZXQgc2NtRmlsZVNldCwgU2NtVmVyc2lvbiBzdGFydFZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIGVuZFZlcnNpb24gKQpAQCAtNDYxLDggKzQ2OSw5IEBACiAgICAgICogQHBhcmFtIGZpbGVTZXQgICAgdGhlIGZpbGVzIGFyZSBjb3BpZWQgdG8gdGhlIHtAbGluayBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0I2dldEJhc2VkaXIoKX0gbG9jYXRpb24KICAgICAgKiBAcGFyYW0gdGFnICAgICAgICBnZXQgdGhlIHZlcnNpb24gZGVmaW5lZCBieSB0aGUgdGFnCiAgICAgICogQHJldHVybgotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCi0gICAgICogQGRlcHJlY2F0ZWQgeW91IG11c3QgdXNlIHtAbGluayBTY21Qcm92aWRlciNleHBvcnQob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVmVyc2lvbil9CisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CisgICAgICogQGRlcHJlY2F0ZWQgeW91IG11c3QgdXNlIHtAbGluayBTY21Qcm92aWRlciNleHBvcnQob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LAorICAgICAqIG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVmVyc2lvbil9CiAgICAgICovCiAgICAgRXhwb3J0U2NtUmVzdWx0IGV4cG9ydCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyB0YWcgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwpAQCAtNDczLDcgKzQ4Miw3IEBACiAgICAgICogQHBhcmFtIHJlcG9zaXRvcnkgdGhlIHNvdXJjZSBjb250cm9sIHN5c3RlbQogICAgICAqIEBwYXJhbSBmaWxlU2V0ICAgIHRoZSBmaWxlcyBhcmUgY29waWVkIHRvIHRoZSB7QGxpbmsgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCNnZXRCYXNlZGlyKCl9IGxvY2F0aW9uCiAgICAgICogQHJldHVybgotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgRXhwb3J0U2NtUmVzdWx0IGV4cG9ydCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwpAQCAtNDg1LDcgKzQ5NCw3IEBACiAgICAgICogQHBhcmFtIGZpbGVTZXQgICAgdGhlIGZpbGVzIGFyZSBjb3BpZWQgdG8gdGhlIHtAbGluayBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0I2dldEJhc2VkaXIoKX0gbG9jYXRpb24KICAgICAgKiBAcGFyYW0gdmVyc2lvbiAgICBnZXQgdGhlIHZlcnNpb24gZGVmaW5lZCBieSB0aGUgYnJhbmNoL3RhZy9yZXZpc2lvbgogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIEV4cG9ydFNjbVJlc3VsdCBleHBvcnQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwpAQCAtNDk4LDggKzUwNyw5IEBACiAgICAgICogQHBhcmFtIHRhZyAgICAgICAgICAgICBnZXQgdGhlIHZlcnNpb24gZGVmaW5lZCBieSB0aGUgdGFnCiAgICAgICogQHBhcmFtIG91dHB1dERpcmVjdG9yeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBleHBvcnQgd2lsbCBiZSBzdG9yZWQKICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KLSAgICAgKiBAZGVwcmVjYXRlZCB5b3UgbXVzdCB1c2Uge0BsaW5rIFNjbVByb3ZpZGVyI2V4cG9ydChvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21WZXJzaW9uLFN0cmluZyl9CisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CisgICAgICogQGRlcHJlY2F0ZWQgeW91IG11c3QgdXNlIHtAbGluayBTY21Qcm92aWRlciNleHBvcnQob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LAorICAgICAqIG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVmVyc2lvbixTdHJpbmcpfQogICAgICAqLwogICAgIEV4cG9ydFNjbVJlc3VsdCBleHBvcnQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgdGFnLCBTdHJpbmcgb3V0cHV0RGlyZWN0b3J5ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTUxMiw3ICs1MjIsNyBAQAogICAgICAqIEBwYXJhbSB2ZXJzaW9uICAgICAgICAgZ2V0IHRoZSB2ZXJzaW9uIGRlZmluZWQgYnkgdGhlIGJyYW5jaC90YWcvcmV2aXNpb24KICAgICAgKiBAcGFyYW0gb3V0cHV0RGlyZWN0b3J5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGV4cG9ydCB3aWxsIGJlIHN0b3JlZAogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIEV4cG9ydFNjbVJlc3VsdCBleHBvcnQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24sIFN0cmluZyBvdXRwdXREaXJlY3RvcnkgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwpAQCAtNTI0LDcgKzUzNCw3IEBACiAgICAgICogQHBhcmFtIGZpbGVTZXQgICAgdGhlIGZpbGVzIHRvIGJlIHJlbW92ZWQKICAgICAgKiBAcGFyYW0gbWVzc2FnZQogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIFJlbW92ZVNjbVJlc3VsdCByZW1vdmUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CkBAIC01MzcsNyArNTQ3LDcgQEAKICAgICAgKiBAcGFyYW0gZmlsZVNldCAgICB0aGUgZmlsZXMgdG8ga25vdyB0aGUgc3RhdHVzIGFib3V0LiBJbXBsZW1lbnRhdGlvbnMgY2FuIGFsc28gZ2l2ZSB0aGUgY2hhbmdlcwogICAgICAqICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHtAbGluayBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0I2dldEJhc2VkaXIoKX0gZG93bndhcmRzLgogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIFN0YXR1c1NjbVJlc3VsdCBzdGF0dXMoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTU1MCw3ICs1NjAsNyBAQAogICAgICAqICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHtAbGluayBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0I2dldEJhc2VkaXIoKX0gZG93bndhcmRzLgogICAgICAqIEBwYXJhbSB0YWdOYW1lICAgIHRoZSB0YWcgbmFtZSB0byBhcHBseSB0byB0aGUgZmlsZXMKICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBUYWdTY21SZXN1bHQgdGFnKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZ05hbWUgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwpAQCAtNTY0LDcgKzU3NCw3IEBACiAgICAgICogQHBhcmFtIHRhZ05hbWUgICAgdGhlIHRhZyBuYW1lIHRvIGFwcGx5IHRvIHRoZSBmaWxlcwogICAgICAqIEBwYXJhbSBtZXNzYWdlICAgIHRoZSBjb21taXQgbWVzc2FnZSB1c2VkIGZvciB0aGUgdGFnIGNyZWF0aW9uCiAgICAgICogQHJldHVybgotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgVGFnU2NtUmVzdWx0IHRhZyggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyB0YWdOYW1lLCBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CkBAIC01NzUsNyArNTg1LDcgQEAKICAgICAgKiBAcGFyYW0gcmVwb3NpdG9yeSB0aGUgc291cmNlIGNvbnRyb2wgc3lzdGVtCiAgICAgICogQHBhcmFtIGZpbGVTZXQgICAgbG9jYXRpb24gb2YgeW91ciBsb2NhbCBjb3B5CiAgICAgICogQHJldHVybgotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwpAQCAtNTg3LDggKzU5Nyw5IEBACiAgICAgICogQHBhcmFtIGZpbGVTZXQgICAgbG9jYXRpb24gb2YgeW91ciBsb2NhbCBjb3B5CiAgICAgICogQHBhcmFtIHRhZyAgICAgICAgdXNlIHRoZSB2ZXJzaW9uIGRlZmluZWQgYnkgdGhlIHRhZwogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgotICAgICAqIEBkZXByZWNhdGVkIHlvdSBtdXN0IHVzZSB7QGxpbmsgU2NtUHJvdmlkZXIjdXBkYXRlKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVZlcnNpb24pfQorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQorICAgICAqIEBkZXByZWNhdGVkIHlvdSBtdXN0IHVzZSB7QGxpbmsgU2NtUHJvdmlkZXIjdXBkYXRlKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSwKKyAgICAgKiBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVZlcnNpb24pfQogICAgICAqLwogICAgIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgdGFnICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTYwMCw3ICs2MTEsNyBAQAogICAgICAqIEBwYXJhbSBmaWxlU2V0ICAgIGxvY2F0aW9uIG9mIHlvdXIgbG9jYWwgY29weQogICAgICAqIEBwYXJhbSB2ZXJzaW9uICAgIHVzZSB0aGUgdmVyc2lvbiBkZWZpbmVkIGJ5IHRoZSBicmFuY2gvdGFnL3JldmlzaW9uCiAgICAgICogQHJldHVybgotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gdmVyc2lvbiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CkBAIC02MTMsOCArNjI0LDkgQEAKICAgICAgKiBAcGFyYW0gdGFnICAgICAgICAgIHVzZSB0aGUgdmVyc2lvbiBkZWZpbmVkIGJ5IHRoZSB0YWcKICAgICAgKiBAcGFyYW0gcnVuQ2hhbmdlbG9nIFJ1biB0aGUgY2hhbmdlbG9nIGNvbW1hbmQgYWZ0ZXIgdGhlIHVwZGF0ZQogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgotICAgICAqIEBkZXByZWNhdGVkIHlvdSBtdXN0IHVzZSB7QGxpbmsgU2NtUHJvdmlkZXIjdXBkYXRlKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVZlcnNpb24sYm9vbGVhbil9CisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CisgICAgICogQGRlcHJlY2F0ZWQgeW91IG11c3QgdXNlIHtAbGluayBTY21Qcm92aWRlciN1cGRhdGUob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LAorICAgICAqIG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVmVyc2lvbixib29sZWFuKX0KICAgICAgKi8KICAgICBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZywgYm9vbGVhbiBydW5DaGFuZ2Vsb2cgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwpAQCAtNjI2LDcgKzYzOCw3IEBACiAgICAgICogQHBhcmFtIGZpbGVTZXQgICAgICBsb2NhdGlvbiBvZiB5b3VyIGxvY2FsIGNvcHkKICAgICAgKiBAcGFyYW0gcnVuQ2hhbmdlbG9nIFJ1biB0aGUgY2hhbmdlbG9nIGNvbW1hbmQgYWZ0ZXIgdGhlIHVwZGF0ZQogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBib29sZWFuIHJ1bkNoYW5nZWxvZyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CkBAIC02MzksNyArNjUxLDcgQEAKICAgICAgKiBAcGFyYW0gdmVyc2lvbiAgICAgIHVzZSB0aGUgdmVyc2lvbiBkZWZpbmVkIGJ5IHRoZSBicmFuY2gvdGFnL3JldmlzaW9uCiAgICAgICogQHBhcmFtIHJ1bkNoYW5nZWxvZyBSdW4gdGhlIGNoYW5nZWxvZyBjb21tYW5kIGFmdGVyIHRoZSB1cGRhdGUKICAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTY21FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiB2ZXJzaW9uLCBib29sZWFuIHJ1bkNoYW5nZWxvZyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CkBAIC02NTIsOCArNjY0LDkgQEAKICAgICAgKiBAcGFyYW0gdGFnICAgICAgICAgdXNlIHRoZSB2ZXJzaW9uIGRlZmluZWQgYnkgdGhlIHRhZwogICAgICAqIEBwYXJhbSBkYXRlUGF0dGVybiB0aGUgZGF0ZSBwYXR0ZXJuIHVzZSBpbiBjaGFuZ2Vsb2cgb3V0cHV0IHJldHVybmVkIGJ5IHNjbSB0b29sCiAgICAgICogQHJldHVybgotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCi0gICAgICogQGRlcHJlY2F0ZWQgeW91IG11c3QgdXNlIHtAbGluayBTY21Qcm92aWRlciN1cGRhdGUob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVmVyc2lvbixTdHJpbmcpfQorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQorICAgICAqIEBkZXByZWNhdGVkIHlvdSBtdXN0IHVzZSB7QGxpbmsgU2NtUHJvdmlkZXIjdXBkYXRlKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSwKKyAgICAgKiBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVZlcnNpb24sU3RyaW5nKX0KICAgICAgKi8KICAgICBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZywgU3RyaW5nIGRhdGVQYXR0ZXJuICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTY2Niw3ICs2NzksNyBAQAogICAgICAqIEBwYXJhbSB2ZXJzaW9uICAgICB1c2UgdGhlIHZlcnNpb24gZGVmaW5lZCBieSB0aGUgYnJhbmNoL3RhZy9yZXZpc2lvbgogICAgICAqIEBwYXJhbSBkYXRlUGF0dGVybiB0aGUgZGF0ZSBwYXR0ZXJuIHVzZSBpbiBjaGFuZ2Vsb2cgb3V0cHV0IHJldHVybmVkIGJ5IHNjbSB0b29sCiAgICAgICogQHJldHVybgotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gdmVyc2lvbiwgU3RyaW5nIGRhdGVQYXR0ZXJuICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTY3OSw4ICs2OTIsOSBAQAogICAgICAqIEBwYXJhbSB0YWcgICAgICAgIHVzZSB0aGUgdmVyc2lvbiBkZWZpbmVkIGJ5IHRoZSB0YWcKICAgICAgKiBAcGFyYW0gbGFzdFVwZGF0ZQogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgotICAgICAqIEBkZXByZWNhdGVkIHlvdSBtdXN0IHVzZSB7QGxpbmsgU2NtUHJvdmlkZXIjdXBkYXRlKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVZlcnNpb24samF2YS51dGlsLkRhdGUpfQorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQorICAgICAqIEBkZXByZWNhdGVkIHlvdSBtdXN0IHVzZSB7QGxpbmsgU2NtUHJvdmlkZXIjdXBkYXRlKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSwKKyAgICAgKiBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVZlcnNpb24samF2YS51dGlsLkRhdGUpfQogICAgICAqLwogICAgIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgdGFnLCBEYXRlIGxhc3RVcGRhdGUgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwpAQCAtNjkzLDcgKzcwNyw3IEBACiAgICAgICogQHBhcmFtIHZlcnNpb24gICAgdXNlIHRoZSB2ZXJzaW9uIGRlZmluZWQgYnkgdGhlIGJyYW5jaC90YWcvcmV2aXNpb24KICAgICAgKiBAcGFyYW0gbGFzdFVwZGF0ZQogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24sIERhdGUgbGFzdFVwZGF0ZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb247CkBAIC03MDcsOCArNzIxLDkgQEAKICAgICAgKiBAcGFyYW0gbGFzdFVwZGF0ZSAgRGF0ZSBvZiBsYXN0IHVwZGF0ZQogICAgICAqIEBwYXJhbSBkYXRlUGF0dGVybiB0aGUgZGF0ZSBwYXR0ZXJuIHVzZSBpbiBjaGFuZ2Vsb2cgb3V0cHV0IHJldHVybmVkIGJ5IHNjbSB0b29sCiAgICAgICogQHJldHVybgotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCi0gICAgICogQGRlcHJlY2F0ZWQgeW91IG11c3QgdXNlIHtAbGluayBTY21Qcm92aWRlciN1cGRhdGUob3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVmVyc2lvbixqYXZhLnV0aWwuRGF0ZSxTdHJpbmcpfQorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQorICAgICAqIEBkZXByZWNhdGVkIHlvdSBtdXN0IHVzZSB7QGxpbmsgU2NtUHJvdmlkZXIjdXBkYXRlKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeSwKKyAgICAgKiBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVZlcnNpb24samF2YS51dGlsLkRhdGUsU3RyaW5nKX0KICAgICAgKi8KICAgICBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZywgRGF0ZSBsYXN0VXBkYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRlUGF0dGVybiApCkBAIC03MjMsNyArNzM4LDcgQEAKICAgICAgKiBAcGFyYW0gbGFzdFVwZGF0ZSAgRGF0ZSBvZiBsYXN0IHVwZGF0ZQogICAgICAqIEBwYXJhbSBkYXRlUGF0dGVybiB0aGUgZGF0ZSBwYXR0ZXJuIHVzZSBpbiBjaGFuZ2Vsb2cgb3V0cHV0IHJldHVybmVkIGJ5IHNjbSB0b29sCiAgICAgICogQHJldHVybgotICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgICogQHRocm93cyBTY21FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gdmVyc2lvbiwgRGF0ZSBsYXN0VXBkYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRlUGF0dGVybiApCkBAIC03MzcsMTkgKzc1MiwyMCBAQAogICAgICAqIEBwYXJhbSByZXBvc2l0b3J5IHRoZSBzb3VyY2UgY29udHJvbCBzeXN0ZW0KICAgICAgKiBAcGFyYW0gZmlsZVNldCAgICB0aGUgZmlsZXMgdG8gbWFrZSBlZGl0YWJsZQogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIEVkaXRTY21SZXN1bHQgZWRpdCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwogCiAgICAgLyoqCi0gICAgICogTWFrZSBhIGZpbGUgbm8gbG9uZ2VyIGVkaXRhYmxlLiBUaGlzIGlzIHRoZSBjb250ZXJwYXJ0IG9mIHtAbGluayAjZWRpdChvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCl9LgorICAgICAqIE1ha2UgYSBmaWxlIG5vIGxvbmdlciBlZGl0YWJsZS4gVGhpcyBpcyB0aGUgY29udGVycGFydCBvZiB7QGxpbmsgI2VkaXQoCisgICAgICogb3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQpfS4KICAgICAgKiBJdCBtYWtlcyB0aGUgZmlsZSByZWFkLW9ubHkgYWdhaW4uCiAgICAgICoKICAgICAgKiBAcGFyYW0gcmVwb3NpdG9yeSB0aGUgc291cmNlIGNvbnRyb2wgc3lzdGVtCiAgICAgICogQHBhcmFtIGZpbGVTZXQgICAgdGhlIGZpbGVzIHRvIG1ha2UgdW5lZGl0YWJsZQogICAgICAqIEByZXR1cm4KLSAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uIGlmIGFueQogICAgICAqLwogICAgIFVuRWRpdFNjbVJlc3VsdCB1bmVkaXQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTc2Miw3ICs3NzgsOCBAQAogICAgICAqIEBwYXJhbSByZWN1cnNpdmUgIGRlc2NlbmQgcmVjdXJzaXZlbHkKICAgICAgKiBAcGFyYW0gdGFnICAgICAgICB1c2UgdGhlIHZlcnNpb24gZGVmaW5lZCBieSB0aGUgdGFnCiAgICAgICogQHJldHVybiB0aGUgbGlzdCBvZiBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeQotICAgICAqIEBkZXByZWNhdGVkIHlvdSBtdXN0IHVzZSB7QGxpbmsgU2NtUHJvdmlkZXIjbGlzdChvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxib29sZWFuLG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVZlcnNpb24pfQorICAgICAqIEBkZXByZWNhdGVkIHlvdSBtdXN0IHVzZSB7QGxpbmsgU2NtUHJvdmlkZXIjbGlzdChvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnksCisgICAgICogb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxib29sZWFuLG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVZlcnNpb24pfQogICAgICAqLwogICAgIExpc3RTY21SZXN1bHQgbGlzdCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIGJvb2xlYW4gcmVjdXJzaXZlLCBTdHJpbmcgdGFnICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKQEAgLTc3NSw2ICs3OTIsNyBAQAogICAgICAqIEBwYXJhbSByZWN1cnNpdmUgIGRlc2NlbmQgcmVjdXJzaXZlbHkKICAgICAgKiBAcGFyYW0gdmVyc2lvbiAgICB1c2UgdGhlIHZlcnNpb24gZGVmaW5lZCBieSB0aGUgYnJhbmNoL3RhZy9yZXZpc2lvbgogICAgICAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkKKyAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbiBpZiBhbnkKICAgICAgKi8KICAgICBMaXN0U2NtUmVzdWx0IGxpc3QoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBib29sZWFuIHJlY3Vyc2l2ZSwgU2NtVmVyc2lvbiB2ZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9TY21VcmxVdGlscy5qYXZhIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL1NjbVVybFV0aWxzLmphdmEKaW5kZXggNGRiZTUwNi4uMDU2MDk5ZiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL1NjbVVybFV0aWxzLmphdmEKKysrIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL1NjbVVybFV0aWxzLmphdmEKQEAgLTM2LDggKzM2LDkgQEAKICAqLwogcHVibGljIGFic3RyYWN0IGNsYXNzIFNjbVVybFV0aWxzCiB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIElMTEVHQUxfU0NNX1VSTCA9ICJUaGUgc2NtIHVybCBtdXN0IGJlIG9uIHRoZSBmb3JtICIgKwotICAgICAgICAiJ3NjbTo8c2NtIHByb3ZpZGVyPjxkZWxpbWl0ZXI+PHByb3ZpZGVyIHNwZWNpZmljIHBhcnQ+JyAiICsgIndoZXJlIDxkZWxpbWl0ZXI+IGNhbiBiZSBlaXRoZXIgJzonIG9yICd8Jy4iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTExFR0FMX1NDTV9VUkwgPQorICAgICAgICAiVGhlIHNjbSB1cmwgbXVzdCBiZSBvbiB0aGUgZm9ybSAnc2NtOjxzY20gcHJvdmlkZXI+PGRlbGltaXRlcj48cHJvdmlkZXIgc3BlY2lmaWMgcGFydD4nICIKKyAgICAgICAgICAgICsgIndoZXJlIDxkZWxpbWl0ZXI+IGNhbiBiZSBlaXRoZXIgJzonIG9yICd8Jy4iOwogCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBkZWxpbWl0ZXIgdXNlZCBpbiB0aGUgc2NtIHVybC4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9yZXBvc2l0b3J5L1NjbVJlcG9zaXRvcnkuamF2YSBiL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9yZXBvc2l0b3J5L1NjbVJlcG9zaXRvcnkuamF2YQppbmRleCBlNWEzMTc0Li42ODJjYTUzIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcmVwb3NpdG9yeS9TY21SZXBvc2l0b3J5LmphdmEKKysrIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3JlcG9zaXRvcnkvU2NtUmVwb3NpdG9yeS5qYXZhCkBAIC01NywxMCArNTcsMTAgQEAKICAgICAgICAgcmV0dXJuIHByb3ZpZGVyUmVwb3NpdG9yeTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHByb3ZpZGVyLnRvU3RyaW5nKCkgKyAiOiIgKyBwcm92aWRlclJlcG9zaXRvcnkudG9TdHJpbmcoKTsKICAgICB9Ci0KIH0KIApkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3JlcG9zaXRvcnkvU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbi5qYXZhIGIvbWF2ZW4tc2NtLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3JlcG9zaXRvcnkvU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbi5qYXZhCmluZGV4IDVmYTIxY2IuLmE0MjAzMGUgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9yZXBvc2l0b3J5L1NjbVJlcG9zaXRvcnlFeGNlcHRpb24uamF2YQorKysgYi9tYXZlbi1zY20tYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcmVwb3NpdG9yeS9TY21SZXBvc2l0b3J5RXhjZXB0aW9uLmphdmEKQEAgLTMxLDYgKzMxLDggQEAKIHB1YmxpYyBjbGFzcyBTY21SZXBvc2l0b3J5RXhjZXB0aW9uCiAgICAgZXh0ZW5kcyBTY21FeGNlcHRpb24KIHsKKyAgICBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTIxOTE1NDk3NzQ3MjIyMTI0OTJMOworCiAgICAgcHJpdmF0ZSBMaXN0IHZhbGlkYXRpb25NZXNzYWdlcyA9IENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7CiAKICAgICBwdWJsaWMgU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbiggU3RyaW5nIG1zZyApCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tYXBpL3NyYy9zaXRlL3NpdGUueG1sIGIvbWF2ZW4tc2NtLWFwaS9zcmMvc2l0ZS9zaXRlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGNiMTc4Ci0tLSAvZGV2L251bGwKKysrIGIvbWF2ZW4tc2NtLWFwaS9zcmMvc2l0ZS9zaXRlLnhtbApAQCAtMCwwICsxLDMyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+CisKKzwhLS0KKyAgfiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgIH4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgIH4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgfiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIH4gdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICB+ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgfiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICB+IHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgIH4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIH4gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIH4gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICB+IHVuZGVyIHRoZSBMaWNlbnNlLgorICAtLT4KKworPHByb2plY3QgbmFtZT0iTWF2ZW4gU0NNIEFQSSI+CisgIDxib2R5PgorICAgIDxtZW51IHJlZj0icGFyZW50IiAvPgorCisgICAgPG1lbnUgbmFtZT0iT3ZlcnZpZXciPgorICAgICAgPGl0ZW0gbmFtZT0iSW50cm9kdWN0aW9uIiBocmVmPSJpbmRleC5odG1sIi8+CisgICAgPC9tZW51PgorCisgICAgPG1lbnUgcmVmPSJyZXBvcnRzIiBpbmhlcml0PSJib3R0b20iIC8+CisgIDwvYm9keT4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1jbGllbnQvaW5zdGFsbC5zaCBiL21hdmVuLXNjbS1jbGllbnQvaW5zdGFsbC5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVkY2YxMC4uMDAwMDAwMAotLS0gYS9tYXZlbi1zY20tY2xpZW50L2luc3RhbGwuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jIS9iaW4vYmFzaAotCi1zY3JpcHRzPWBscyBzcmMvbWFpbi9iYXNoL21hdmVuLXNjbS0qYAotCi1kZXN0PSRIT01FL2JpbjIKLQotZWNobyAiSW5zdGFsbGluZyBzY3JpcHRzIHRvICckZGVzdCcuIgotCi1pZiBbICEgLXggJGRlc3QgXQotdGhlbgotICBlY2hvICJEZXN0aW5hdGlvbiBkaXJlY3RvcnkgJyRkZXN0JyBkb2Vzbid0IGV4aXN0ISIgMT4mMgotCi0gIGV4aXQgMQotZmkKLQotZm9yIHNjcmlwdCBpbiAkc2NyaXB0cwotZG8KLSAgY3AgJHNjcmlwdCAkZGVzdC8kc2NyaXB0Ci0gIGNobW9kICt4ICRIT01FL2Jpbi8kc2NyaXB0Ci1kb25lCi0KLWVjaG8gIkluc3RhbGxhdGlvbiBkb25lLiIKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1jbGllbnQvcG9tLnhtbCBiL21hdmVuLXNjbS1jbGllbnQvcG9tLnhtbAppbmRleCA0YmNjOTg0Li5hYjM4YzljIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tY2xpZW50L3BvbS54bWwKKysrIGIvbWF2ZW4tc2NtLWNsaWVudC9wb20ueG1sCkBAIC0xLDQgKzEsNiBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IS0tCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8IS0tCiAgIH4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQogICB+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogICB+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCkBAIC0xOCwyNyArMjAsMzAgQEAKICAgLS0+CiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKICAgPHBhcmVudD4KLSAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY208L2FydGlmYWN0SWQ+CiAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+Ci0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwogICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tY2xpZW50PC9hcnRpZmFjdElkPgorCiAgIDxuYW1lPk1hdmVuIFNDTSBDbGllbnQ8L25hbWU+Ci0gIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KKyAgPGRlc2NyaXB0aW9uPlNDTSBDbGllbnQgaXMgYSBzaW1wbGUgU0NNIGNvbW1hbmQgbGluZSB0b29sLjwvZGVzY3JpcHRpb24+CisKICAgPGRlcGVuZGVuY2llcz4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLW1hbmFnZXItcGxleHVzPC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KLSAgICAKKwogICAgIDwhLS0gcHJvdmlkZXJzIGRlY2xhcmF0aW9uIC0tPgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItYWNjdXJldjwvYXJ0aWZhY3RJZD4KLSAgICA8L2RlcGVuZGVuY3k+ICAgICAKKyAgICA8L2RlcGVuZGVuY3k+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1iYXphYXI8L2FydGlmYWN0SWQ+CkBAIC04Nyw2ICs5Miw1MCBAQAogICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItdnNzPC9hcnRpZmFjdElkPgogICAgIDwvZGVwZW5kZW5jeT4KLSAgICA8IS0tIGVuZCBwcm92aWRlcnMgZGVjbGFyYXRpb24gLS0+IAorICAgIDwhLS0gZW5kIHByb3ZpZGVycyBkZWNsYXJhdGlvbiAtLT4KICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgPGJ1aWxkPgorICAgIDxwbHVnaW5zPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLnBsZXh1czwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+cGxleHVzLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgIDxpZD5tZXJnZTwvaWQ+CisgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgPGRlc2NyaXB0b3JzPgorICAgICAgICAgICAgICAgIDxkZXNjcmlwdG9yPnNyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9wbGV4dXMvY29tcG9uZW50cy54bWw8L2Rlc2NyaXB0b3I+CisgICAgICAgICAgICAgIDwvZGVzY3JpcHRvcnM+CisgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtcmVzb3VyY2VzPC9waGFzZT4KKyAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgPGdvYWw+bWVyZ2UtZGVzY3JpcHRvcnM8L2dvYWw+CisgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICA8L3BsdWdpbj4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFzc2VtYmx5LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4yLWJldGEtMjwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPGRlc2NyaXB0b3JJZD5qYXItd2l0aC1kZXBlbmRlbmNpZXM8L2Rlc2NyaXB0b3JJZD4KKyAgICAgICAgICA8ZmluYWxOYW1lPm1hdmVuLXNjbS1jbGllbnQtJHtwcm9qZWN0LnZlcnNpb259PC9maW5hbE5hbWU+CisgICAgICAgICAgPGFyY2hpdmU+CisgICAgICAgICAgICA8bWFuaWZlc3RFbnRyaWVzPgorICAgICAgICAgICAgICA8TWFpbi1DbGFzcz5vcmcuYXBhY2hlLm1hdmVuLnNjbS5jbGllbnQuY2xpLk1hdmVuU2NtQ2xpPC9NYWluLUNsYXNzPgorICAgICAgICAgICAgPC9tYW5pZmVzdEVudHJpZXM+CisgICAgICAgICAgPC9hcmNoaXZlPgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICA8cGhhc2U+cGFja2FnZTwvcGhhc2U+CisgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgIDxnb2FsPnNpbmdsZTwvZ29hbD4KKyAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgPC9idWlsZD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jbGllbnQvY2xpL01hdmVuU2NtQ2xpLmphdmEgYi9tYXZlbi1zY20tY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vY2xpZW50L2NsaS9NYXZlblNjbUNsaS5qYXZhCmluZGV4IGI5MGY5ZGQuLjcwYmEwM2YgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9jbGllbnQvY2xpL01hdmVuU2NtQ2xpLmphdmEKKysrIGIvbWF2ZW4tc2NtLWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL2NsaWVudC9jbGkvTWF2ZW5TY21DbGkuamF2YQpAQCAtMTA4LDcgKzEwOCw4IEBACiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oCiAgICAgICAgICAgICAgICAgIlVzYWdlOiBtYXZlbi1zY20tY2xpZW50IDxjb21tYW5kPiA8d29ya2luZyBkaXJlY3Rvcnk+IDxzY20gdXJsPiBbPHNjbVZlcnNpb24+IFs8c2NtVmVyc2lvblR5cGU+XV0iICk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oICJzY21WZXJzaW9uIGlzIGEgYnJhbmNoIG5hbWUvdGFnIG5hbWUvcmV2aXNpb24gbnVtYmVyLiIgKTsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggInNjbVZlcnNpb25UeXBlIGNhbiBiZSAnYnJhbmNoJywgJ3RhZycsICdyZXZpc2lvbicuIFRoZSBkZWZhdWx0IHZhbHVlIGlzICdyZXZpc2lvbicuIiApOworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAic2NtVmVyc2lvblR5cGUgY2FuIGJlICdicmFuY2gnLCAndGFnJywgJ3JldmlzaW9uJy4gIgorICAgICAgICAgICAgICAgICsgIlRoZSBkZWZhdWx0IHZhbHVlIGlzICdyZXZpc2lvbicuIiApOwogCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTIyMSw3ICsyMjIsOCBAQAogICAgIHsKICAgICAgICAgaWYgKCB3b3JraW5nRGlyZWN0b3J5LmV4aXN0cygpICkKICAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3Q6ICciICsgd29ya2luZ0RpcmVjdG9yeS5nZXRBYnNvbHV0ZVBhdGgoKSArICInLiIgKTsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggIlRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0OiAnIiArIHdvcmtpbmdEaXJlY3RvcnkuZ2V0QWJzb2x1dGVQYXRoKCkKKyAgICAgICAgICAgICAgICArICInLiIgKTsKIAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNjAsMTQgKzI2MiwxNiBAQAogICAgIHsKICAgICAgICAgaWYgKCAhd29ya2luZ0RpcmVjdG9yeS5leGlzdHMoKSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggIlRoZSB3b3JraW5nIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0OiAnIiArIHdvcmtpbmdEaXJlY3RvcnkuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiJy4iICk7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oICJUaGUgd29ya2luZyBkaXJlY3RvcnkgZG9lc24ndCBleGlzdDogJyIgKyB3b3JraW5nRGlyZWN0b3J5LmdldEFic29sdXRlUGF0aCgpCisgICAgICAgICAgICAgICAgKyAiJy4iICk7CiAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gIiI7CiAKLSAgICAgICAgQ2hlY2tJblNjbVJlc3VsdCByZXN1bHQgPSBzY21NYW5hZ2VyLmNoZWNrSW4oIHNjbVJlcG9zaXRvcnksIG5ldyBTY21GaWxlU2V0KCB3b3JraW5nRGlyZWN0b3J5ICksIHZlcnNpb24sIG1lc3NhZ2UgKTsKKyAgICAgICAgQ2hlY2tJblNjbVJlc3VsdCByZXN1bHQgPQorICAgICAgICAgICAgc2NtTWFuYWdlci5jaGVja0luKCBzY21SZXBvc2l0b3J5LCBuZXcgU2NtRmlsZVNldCggd29ya2luZ0RpcmVjdG9yeSApLCB2ZXJzaW9uLCBtZXNzYWdlICk7CiAKICAgICAgICAgaWYgKCAhcmVzdWx0LmlzU3VjY2VzcygpICkKICAgICAgICAgewpAQCAtMjkzLDcgKzI5Nyw4IEBACiAgICAgewogICAgICAgICBpZiAoICF3b3JraW5nRGlyZWN0b3J5LmV4aXN0cygpICkKICAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3Q6ICciICsgd29ya2luZ0RpcmVjdG9yeS5nZXRBYnNvbHV0ZVBhdGgoKSArICInLiIgKTsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggIlRoZSB3b3JraW5nIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0OiAnIiArIHdvcmtpbmdEaXJlY3RvcnkuZ2V0QWJzb2x1dGVQYXRoKCkKKyAgICAgICAgICAgICAgICArICInLiIgKTsKIAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9wbGV4dXMvY29tcG9uZW50cy54bWwgYi9tYXZlbi1zY20tY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9wbGV4dXMvY29tcG9uZW50cy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFkOTEwYwotLS0gL2Rldi9udWxsCisrKyBiL21hdmVuLXNjbS1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3BsZXh1cy9jb21wb25lbnRzLnhtbApAQCAtMCwwICsxLDEwMyBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK29yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK3JlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK3RvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK3dpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCitzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorCis8Y29tcG9uZW50LXNldD4KKyAgPGNvbXBvbmVudHM+CisgICAgPGNvbXBvbmVudD4KKyAgICAgIDxyb2xlPm9yZy5hcGFjaGUubWF2ZW4uc2NtLm1hbmFnZXIuU2NtTWFuYWdlcjwvcm9sZT4KKyAgICAgIDxpbXBsZW1lbnRhdGlvbj5vcmcuYXBhY2hlLm1hdmVuLnNjbS5tYW5hZ2VyLnBsZXh1cy5EZWZhdWx0U2NtTWFuYWdlcjwvaW1wbGVtZW50YXRpb24+CisgICAgICA8cmVxdWlyZW1lbnRzPgorICAgICAgICA8cmVxdWlyZW1lbnQ+CisgICAgICAgICAgPHJvbGU+b3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXI8L3JvbGU+CisgICAgICAgICAgPGZpZWxkLW5hbWU+c2NtUHJvdmlkZXJzPC9maWVsZC1uYW1lPgorICAgICAgICA8L3JlcXVpcmVtZW50PgorICAgICAgPC9yZXF1aXJlbWVudHM+CisgICAgPC9jb21wb25lbnQ+CisKKyAgICA8Y29tcG9uZW50PgorICAgICAgPHJvbGU+b3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXI8L3JvbGU+CisgICAgICA8cm9sZS1oaW50PmFjY3VyZXY8L3JvbGUtaGludD4KKyAgICAgIDxpbXBsZW1lbnRhdGlvbj5vcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5hY2N1cmV2LkFjY3VSZXZTY21Qcm92aWRlcjwvaW1wbGVtZW50YXRpb24+CisgICAgICA8ZGVzY3JpcHRpb24+SW1wbGVtZW50YXRpb24gb2YgQWNjdXJldiBpbnRlZ3JhdGlvbiB3aXRoIE1hdmVuIFNDTTwvZGVzY3JpcHRpb24+CisgICAgPC9jb21wb25lbnQ+CisgICAgPGNvbXBvbmVudD4KKyAgICAgIDxyb2xlPm9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyPC9yb2xlPgorICAgICAgPHJvbGUtaGludD5iYXphYXI8L3JvbGUtaGludD4KKyAgICAgIDxpbXBsZW1lbnRhdGlvbj5vcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5iYXphYXIuQmF6YWFyU2NtUHJvdmlkZXI8L2ltcGxlbWVudGF0aW9uPgorICAgICAgPGRlc2NyaXB0aW9uPkJhemFhciBORyBodHRwOi8vYmF6YWFyLXZjcy48L2Rlc2NyaXB0aW9uPgorICAgIDwvY29tcG9uZW50PgorICAgIDxjb21wb25lbnQ+CisgICAgICA8cm9sZT5vcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlcjwvcm9sZT4KKyAgICAgIDxyb2xlLWhpbnQ+Y2xlYXJjYXNlPC9yb2xlLWhpbnQ+CisgICAgICA8aW1wbGVtZW50YXRpb24+b3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuY2xlYXJjYXNlLkNsZWFyQ2FzZVNjbVByb3ZpZGVyPC9pbXBsZW1lbnRhdGlvbj4KKyAgICA8L2NvbXBvbmVudD4KKyAgICA8Y29tcG9uZW50PgorICAgICAgPHJvbGU+b3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXI8L3JvbGU+CisgICAgICA8cm9sZS1oaW50PmhnPC9yb2xlLWhpbnQ+CisgICAgICA8aW1wbGVtZW50YXRpb24+b3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuSGdTY21Qcm92aWRlcjwvaW1wbGVtZW50YXRpb24+CisgICAgICA8ZGVzY3JpcHRpb24+TWVyY3VyaWFsIChIRykgaXMgYSBkZWNlbnRyYWxpemVkIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtLjwvZGVzY3JpcHRpb24+CisgICAgPC9jb21wb25lbnQ+CisgICAgPGNvbXBvbmVudD4KKyAgICAgIDxyb2xlPm9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyPC9yb2xlPgorICAgICAgPHJvbGUtaGludD5sb2NhbDwvcm9sZS1oaW50PgorICAgICAgPGltcGxlbWVudGF0aW9uPm9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmxvY2FsLkxvY2FsU2NtUHJvdmlkZXI8L2ltcGxlbWVudGF0aW9uPgorICAgIDwvY29tcG9uZW50PgorICAgIDxjb21wb25lbnQ+CisgICAgICA8cm9sZT5vcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlcjwvcm9sZT4KKyAgICAgIDxyb2xlLWhpbnQ+cGVyZm9yY2U8L3JvbGUtaGludD4KKyAgICAgIDxpbXBsZW1lbnRhdGlvbj5vcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5wZXJmb3JjZS5QZXJmb3JjZVNjbVByb3ZpZGVyPC9pbXBsZW1lbnRhdGlvbj4KKyAgICA8L2NvbXBvbmVudD4KKyAgICA8Y29tcG9uZW50PgorICAgICAgPHJvbGU+b3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXI8L3JvbGU+CisgICAgICA8cm9sZS1oaW50PmN2c19uYXRpdmU8L3JvbGUtaGludD4KKyAgICAgIDxpbXBsZW1lbnRhdGlvbj5vcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5jdnNsaWIuY3ZzZXhlLkN2c0V4ZVNjbVByb3ZpZGVyPC9pbXBsZW1lbnRhdGlvbj4KKyAgICA8L2NvbXBvbmVudD4KKyAgICA8Y29tcG9uZW50PgorICAgICAgPHJvbGU+b3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXI8L3JvbGU+CisgICAgICA8cm9sZS1oaW50PmN2czwvcm9sZS1oaW50PgorICAgICAgPGltcGxlbWVudGF0aW9uPm9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmN2c2xpYi5jdnNqYXZhLkN2c0phdmFTY21Qcm92aWRlcjwvaW1wbGVtZW50YXRpb24+CisgICAgPC9jb21wb25lbnQ+CisgICAgPGNvbXBvbmVudD4KKyAgICAgIDxyb2xlPm9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyPC9yb2xlPgorICAgICAgPHJvbGUtaGludD5naXQ8L3JvbGUtaGludD4KKyAgICAgIDxpbXBsZW1lbnRhdGlvbj5vcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5naXQuZ2l0ZXhlLkdpdEV4ZVNjbVByb3ZpZGVyPC9pbXBsZW1lbnRhdGlvbj4KKyAgICA8L2NvbXBvbmVudD4KKyAgICA8Y29tcG9uZW50PgorICAgICAgPHJvbGU+b3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXI8L3JvbGU+CisgICAgICA8cm9sZS1oaW50PnN2bjwvcm9sZS1oaW50PgorICAgICAgPGltcGxlbWVudGF0aW9uPm9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLnN2bi5zdm5leGUuU3ZuRXhlU2NtUHJvdmlkZXI8L2ltcGxlbWVudGF0aW9uPgorICAgIDwvY29tcG9uZW50PgorICAgIDxjb21wb25lbnQ+CisgICAgICA8cm9sZT5vcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlcjwvcm9sZT4KKyAgICAgIDxyb2xlLWhpbnQ+c3RhcnRlYW08L3JvbGUtaGludD4KKyAgICAgIDxpbXBsZW1lbnRhdGlvbj5vcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5zdGFydGVhbS5TdGFydGVhbVNjbVByb3ZpZGVyPC9pbXBsZW1lbnRhdGlvbj4KKyAgICA8L2NvbXBvbmVudD4KKyAgICA8Y29tcG9uZW50PgorICAgICAgPHJvbGU+b3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXI8L3JvbGU+CisgICAgICA8cm9sZS1oaW50PnN5bmVyZ3k8L3JvbGUtaGludD4KKyAgICAgIDxpbXBsZW1lbnRhdGlvbj5vcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5zeW5lcmd5LlN5bmVyZ3lTY21Qcm92aWRlcjwvaW1wbGVtZW50YXRpb24+CisgICAgPC9jb21wb25lbnQ+CisgICAgPGNvbXBvbmVudD4KKyAgICAgIDxyb2xlPm9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyPC9yb2xlPgorICAgICAgPHJvbGUtaGludD52c3M8L3JvbGUtaGludD4KKyAgICAgIDxpbXBsZW1lbnRhdGlvbj5vcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci52c3MuVnNzU2NtUHJvdmlkZXI8L2ltcGxlbWVudGF0aW9uPgorICAgIDwvY29tcG9uZW50PgorICA8L2NvbXBvbmVudHM+Cis8L2NvbXBvbmVudC1zZXQ+CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tY2xpZW50L3NyYy9zaXRlL2FwdC9pbmRleC5hcHQgYi9tYXZlbi1zY20tY2xpZW50L3NyYy9zaXRlL2FwdC9pbmRleC5hcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI1YTljNAotLS0gL2Rldi9udWxsCisrKyBiL21hdmVuLXNjbS1jbGllbnQvc3JjL3NpdGUvYXB0L2luZGV4LmFwdApAQCAtMCwwICsxLDU2IEBACisgLS0tLS0tCisgSW50cm9kdWN0aW9uCisgLS0tLS0tCisgVmluY2VudCBTaXZldG9uCisgLS0tLS0tCisgMjAwOC0wOC0xNAorIC0tLS0tLQorCit+fiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCit+fiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK35+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCit+fiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit+fiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCit+fiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit+fiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cit+fgorfn4gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKK35+Cit+fiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCit+fiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorfn4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCit+fiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK35+IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK35+IHVuZGVyIHRoZSBMaWNlbnNlLgorCit+fiBOT1RFOiBGb3IgaGVscCB3aXRoIHRoZSBzeW50YXggb2YgdGhpcyBmaWxlLCBzZWU6Cit+fiBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9kb3hpYS9yZWZlcmVuY2VzL2FwdC1mb3JtYXQuaHRtbAorCitNYXZlbiBTQ00gQ2xpZW50CisKKyBUaGUgTWF2ZW4gU0NNIGNsaWVudCBpcyBhIHNpbXBsZSBTQ00gY29tbWFuZCBsaW5lIHRvb2wuCisKKyogVXNhZ2UKKworKy0tLS0tKworIyBqYXZhIC1qYXIgdGFyZ2V0XG1hdmVuLXNjbS1jbGllbnQtMS4xLWphci13aXRoLWRlcGVuZGVuY2llcy5qYXIKK1VzYWdlOiBtYXZlbi1zY20tY2xpZW50IDxjb21tYW5kPiA8d29ya2luZyBkaXJlY3Rvcnk+IDxzY20gdXJsPiBbPHNjbVZlcnNpb24+IFs8c2NtVmVyc2lvblR5cGU+XV0KK3NjbVZlcnNpb24gaXMgYSBicmFuY2ggbmFtZS90YWcgbmFtZS9yZXZpc2lvbiBudW1iZXIuCitzY21WZXJzaW9uVHlwZSBjYW4gYmUgJ2JyYW5jaCcsICd0YWcnLCAncmV2aXNpb24nLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAncmV2aXNpb24nLgorKy0tLS0tKworCisqIEV4YW1wbGUKKworKy0tLS0tKworIyBqYXZhIC1qYXIgdGFyZ2V0XG1hdmVuLXNjbS1jbGllbnQtMS4xLWphci13aXRoLWRlcGVuZGVuY2llcy5qYXIgY2hlY2tvdXQgYzpcdGVtcFxtYXZlbi1zY20tY2xpZW50IHNjbTpzdm46aHR0cDovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi9tYXZlbi9zY20vdHJ1bmsvbWF2ZW4tc2NtLWNsaWVudAorW0lORk9dIEV4ZWN1dGluZzogY21kLmV4ZSAvWCAvQyAic3ZuIC0tbm9uLWludGVyYWN0aXZlIGNoZWNrb3V0IGh0dHA6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvbWF2ZW4vc2NtL3RydW5rL21hdmVuLXNjbS1jbGllbnQgbWF2ZW4tc2NtLWNsaWVudCIKK1tJTkZPXSBXb3JraW5nIGRpcmVjdG9yeTogYzpcdGVtcAorQ2hlY2tlZCBvdXQgdGhlc2UgZmlsZXM6CisgbWF2ZW4tc2NtLWNsaWVudFxzcmNcbWFpblxqYXZhXG9yZ1xhcGFjaGVcbWF2ZW5cc2NtXGNsaWVudFxjbGlcTWF2ZW5TY21DbGkuamF2YQorIG1hdmVuLXNjbS1jbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzXE1FVEEtSU5GXHBsZXh1c1xjb21wb25lbnRzLnhtbAorIG1hdmVuLXNjbS1jbGllbnRcc3JjXG1haW5cYmFzaFxtYXZlbi1zY20tdXBkYXRlCisgbWF2ZW4tc2NtLWNsaWVudFxzcmNcbWFpblxiYXNoXG1hdmVuLXNjbS1jaGVja2luCisgbWF2ZW4tc2NtLWNsaWVudFxzcmNcbWFpblxiYXNoXG1hdmVuLXNjbS1jaGVja291dAorIG1hdmVuLXNjbS1jbGllbnRcc3JjXHNpdGVcc2l0ZS54bWwKKyBtYXZlbi1zY20tY2xpZW50XHBvbS54bWwKKystLS0tLSsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1jbGllbnQvc3JjL3NpdGUvc2l0ZS54bWwgYi9tYXZlbi1zY20tY2xpZW50L3NyYy9zaXRlL3NpdGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZWI4YjgKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi1zY20tY2xpZW50L3NyYy9zaXRlL3NpdGUueG1sCkBAIC0wLDAgKzEsMzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz4KKworPCEtLQorICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICB+IHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgfiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgIH4gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB+IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgfgorICB+ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIH4KKyAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgIH4gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgfiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgfiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgfiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgIH4gdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorCis8cHJvamVjdCBuYW1lPSJNYXZlbiBTQ00gQ2xpZW50Ij4KKyAgPGJvZHk+CisgICAgPG1lbnUgcmVmPSJwYXJlbnQiIC8+CisKKyAgICA8bWVudSBuYW1lPSJPdmVydmlldyI+CisgICAgICA8aXRlbSBuYW1lPSJJbnRyb2R1Y3Rpb24iIGhyZWY9ImluZGV4Lmh0bWwiLz4KKyAgICA8L21lbnU+CisKKyAgICA8bWVudSByZWY9InJlcG9ydHMiIGluaGVyaXQ9ImJvdHRvbSIgLz4KKyAgPC9ib2R5PgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLW1hbmFnZXJzL21hdmVuLXNjbS1tYW5hZ2VyLXBsZXh1cy9wb20ueG1sIGIvbWF2ZW4tc2NtLW1hbmFnZXJzL21hdmVuLXNjbS1tYW5hZ2VyLXBsZXh1cy9wb20ueG1sCmluZGV4IDliM2U5OWMuLjkzNDczOTAgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1tYW5hZ2Vycy9tYXZlbi1zY20tbWFuYWdlci1wbGV4dXMvcG9tLnhtbAorKysgYi9tYXZlbi1zY20tbWFuYWdlcnMvbWF2ZW4tc2NtLW1hbmFnZXItcGxleHVzL3BvbS54bWwKQEAgLTEsNCArMSw2IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhLS0KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzwhLS0KICAgfiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiAgIH4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCiAgIH4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KQEAgLTE4LDMyICsyMCwzNSBAQAogICAtLT4KIAogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+CisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwogICA8cGFyZW50PgotICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1tYW5hZ2VyczwvYXJ0aWZhY3RJZD4KICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tbWFuYWdlcnM8L2FydGlmYWN0SWQ+CiAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgogICA8L3BhcmVudD4KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1tYW5hZ2VyLXBsZXh1czwvYXJ0aWZhY3RJZD4KKwogICA8bmFtZT5NYXZlbiBTQ00gTWFuYWdlciBmb3IgUGxleHVzPC9uYW1lPgotICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CisgIDxkZXNjcmlwdGlvbj5TQ00gUGxleHVzIGNvbXBvbmVudC48L2Rlc2NyaXB0aW9uPgorCiAgIDxkZXBlbmRlbmNpZXM+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMucGxleHVzPC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+cGxleHVzLWNvbnRhaW5lci1kZWZhdWx0PC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+MS4wLWFscGhhLTk8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tYXBpPC9hcnRpZmFjdElkPgotICAgIDwvZGVwZW5kZW5jeT4gICAgCisgICAgPC9kZXBlbmRlbmN5PgogICA8L2RlcGVuZGVuY2llcz4KKwogICA8YnVpbGQ+CiAgICAgPHBsdWdpbnM+CiAgICAgICA8cGx1Z2luPgogICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMucGxleHVzPC9ncm91cElkPgogICAgICAgICA8YXJ0aWZhY3RJZD5wbGV4dXMtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4xLjMuNDwvdmVyc2lvbj4KICAgICAgICAgPGV4ZWN1dGlvbnM+CiAgICAgICAgICAgPGV4ZWN1dGlvbj4KICAgICAgICAgICAgIDxnb2Fscz4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1tYW5hZ2Vycy9tYXZlbi1zY20tbWFuYWdlci1wbGV4dXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9tYW5hZ2VyL3BsZXh1cy9EZWZhdWx0U2NtTWFuYWdlci5qYXZhIGIvbWF2ZW4tc2NtLW1hbmFnZXJzL21hdmVuLXNjbS1tYW5hZ2VyLXBsZXh1cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL21hbmFnZXIvcGxleHVzL0RlZmF1bHRTY21NYW5hZ2VyLmphdmEKaW5kZXggYzExNGY1Yy4uYmZhYWM1ZSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLW1hbmFnZXJzL21hdmVuLXNjbS1tYW5hZ2VyLXBsZXh1cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL21hbmFnZXIvcGxleHVzL0RlZmF1bHRTY21NYW5hZ2VyLmphdmEKKysrIGIvbWF2ZW4tc2NtLW1hbmFnZXJzL21hdmVuLXNjbS1tYW5hZ2VyLXBsZXh1cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL21hbmFnZXIvcGxleHVzL0RlZmF1bHRTY21NYW5hZ2VyLmphdmEKQEAgLTg5LDYgKzg5LDcgQEAKICAgICAvLyBDb21wb25lbnQgTGlmZWN5Y2xlCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKCkKICAgICB7CiAgICAgICAgIGlmICggc2NtUHJvdmlkZXJzID09IG51bGwgKQpAQCAtMTA0LDYgKzEwNSw3IEBACiAgICAgICAgIHNldFNjbVByb3ZpZGVycyggc2NtUHJvdmlkZXJzICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU2NtTG9nZ2VyIGdldFNjbUxvZ2dlcigpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IFBsZXh1c0xvZ2dlciggZ2V0TG9nZ2VyKCkgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1tYW5hZ2Vycy9tYXZlbi1zY20tbWFuYWdlci1wbGV4dXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9tYW5hZ2VyL3BsZXh1cy9QbGV4dXNMb2dnZXIuamF2YSBiL21hdmVuLXNjbS1tYW5hZ2Vycy9tYXZlbi1zY20tbWFuYWdlci1wbGV4dXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9tYW5hZ2VyL3BsZXh1cy9QbGV4dXNMb2dnZXIuamF2YQppbmRleCAxNjM1YmVmLi4xMDYxZmU5IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tbWFuYWdlcnMvbWF2ZW4tc2NtLW1hbmFnZXItcGxleHVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vbWFuYWdlci9wbGV4dXMvUGxleHVzTG9nZ2VyLmphdmEKKysrIGIvbWF2ZW4tc2NtLW1hbmFnZXJzL21hdmVuLXNjbS1tYW5hZ2VyLXBsZXh1cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL21hbmFnZXIvcGxleHVzL1BsZXh1c0xvZ2dlci5qYXZhCkBAIC0zNiwxMzIgKzM2LDk5IEBACiAgICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciNpc0RlYnVnRW5hYmxlZCgpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0RlYnVnRW5hYmxlZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbG9nZ2VyLmlzRGVidWdFbmFibGVkKCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyI2RlYnVnKGphdmEubGFuZy5TdHJpbmcpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBkZWJ1ZyggU3RyaW5nIGNvbnRlbnQgKQogICAgIHsKICAgICAgICAgbG9nZ2VyLmRlYnVnKCBjb250ZW50ICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyI2RlYnVnKGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLlRocm93YWJsZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGRlYnVnKCBTdHJpbmcgY29udGVudCwgVGhyb3dhYmxlIGVycm9yICkKICAgICB7CiAgICAgICAgIGxvZ2dlci5kZWJ1ZyggY29udGVudCwgZXJyb3IgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXIjZGVidWcoamF2YS5sYW5nLlRocm93YWJsZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGRlYnVnKCBUaHJvd2FibGUgZXJyb3IgKQogICAgIHsKICAgICAgICAgbG9nZ2VyLmRlYnVnKCAiIiwgZXJyb3IgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXIjaXNJbmZvRW5hYmxlZCgpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0luZm9FbmFibGVkKCkKICAgICB7CiAgICAgICAgIHJldHVybiBsb2dnZXIuaXNJbmZvRW5hYmxlZCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciNpbmZvKGphdmEubGFuZy5TdHJpbmcpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBpbmZvKCBTdHJpbmcgY29udGVudCApCiAgICAgewogICAgICAgICBsb2dnZXIuaW5mbyggY29udGVudCApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciNpbmZvKGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLlRocm93YWJsZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGluZm8oIFN0cmluZyBjb250ZW50LCBUaHJvd2FibGUgZXJyb3IgKQogICAgIHsKICAgICAgICAgbG9nZ2VyLmluZm8oIGNvbnRlbnQsIGVycm9yICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyI2luZm8oamF2YS5sYW5nLlRocm93YWJsZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGluZm8oIFRocm93YWJsZSBlcnJvciApCiAgICAgewogICAgICAgICBsb2dnZXIuaW5mbyggIiIsIGVycm9yICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyI2lzV2FybkVuYWJsZWQoKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNXYXJuRW5hYmxlZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbG9nZ2VyLmlzV2FybkVuYWJsZWQoKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXIjd2FybihqYXZhLmxhbmcuU3RyaW5nKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgd2FybiggU3RyaW5nIGNvbnRlbnQgKQogICAgIHsKICAgICAgICAgbG9nZ2VyLndhcm4oIGNvbnRlbnQgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXIjd2FybihqYXZhLmxhbmcuU3RyaW5nLGphdmEubGFuZy5UaHJvd2FibGUpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCB3YXJuKCBTdHJpbmcgY29udGVudCwgVGhyb3dhYmxlIGVycm9yICkKICAgICB7CiAgICAgICAgIGxvZ2dlci53YXJuKCBjb250ZW50LCBlcnJvciApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciN3YXJuKGphdmEubGFuZy5UaHJvd2FibGUpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCB3YXJuKCBUaHJvd2FibGUgZXJyb3IgKQogICAgIHsKICAgICAgICAgbG9nZ2VyLndhcm4oICIiLCBlcnJvciApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciNpc0Vycm9yRW5hYmxlZCgpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0Vycm9yRW5hYmxlZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbG9nZ2VyLmlzRXJyb3JFbmFibGVkKCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyI2Vycm9yKGphdmEubGFuZy5TdHJpbmcpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBlcnJvciggU3RyaW5nIGNvbnRlbnQgKQogICAgIHsKICAgICAgICAgbG9nZ2VyLmVycm9yKCBjb250ZW50ICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyI2Vycm9yKGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLlRocm93YWJsZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGVycm9yKCBTdHJpbmcgY29udGVudCwgVGhyb3dhYmxlIGVycm9yICkKICAgICB7CiAgICAgICAgIGxvZ2dlci5lcnJvciggY29udGVudCwgZXJyb3IgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXIjZXJyb3IoamF2YS5sYW5nLlRocm93YWJsZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGVycm9yKCBUaHJvd2FibGUgZXJyb3IgKQogICAgIHsKICAgICAgICAgbG9nZ2VyLmVycm9yKCAiIiwgZXJyb3IgKTsKICAgICB9Ci0KIH0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1tYW5hZ2Vycy9tYXZlbi1zY20tbWFuYWdlci1wbGV4dXMvc3JjL3NpdGUvc2l0ZS54bWwgYi9tYXZlbi1zY20tbWFuYWdlcnMvbWF2ZW4tc2NtLW1hbmFnZXItcGxleHVzL3NyYy9zaXRlL3NpdGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYjVkYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi1zY20tbWFuYWdlcnMvbWF2ZW4tc2NtLW1hbmFnZXItcGxleHVzL3NyYy9zaXRlL3NpdGUueG1sCkBAIC0wLDAgKzEsMzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz4KKworPCEtLQorICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICB+IHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgfiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgIH4gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB+IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgfgorICB+ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIH4KKyAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgIH4gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgfiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgfiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgfiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgIH4gdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorCis8cHJvamVjdCBuYW1lPSJNYXZlbiBTQ00gUGxleHVzIE1hbmFnZXIiPgorICA8Ym9keT4KKyAgICA8bWVudSByZWY9InBhcmVudCIgLz4KKworICAgIDxtZW51IG5hbWU9Ik92ZXJ2aWV3Ij4KKyAgICAgIDxpdGVtIG5hbWU9IkludHJvZHVjdGlvbiIgaHJlZj0iaW5kZXguaHRtbCIvPgorICAgIDwvbWVudT4KKworICAgIDxtZW51IHJlZj0icmVwb3J0cyIgaW5oZXJpdD0iYm90dG9tIiAvPgorICA8L2JvZHk+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tbWFuYWdlcnMvcG9tLnhtbCBiL21hdmVuLXNjbS1tYW5hZ2Vycy9wb20ueG1sCmluZGV4IDY3NTljYzcuLjkxMTBiNDQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1tYW5hZ2Vycy9wb20ueG1sCisrKyBiL21hdmVuLXNjbS1tYW5hZ2Vycy9wb20ueG1sCkBAIC0xOCwyNiArMTgsMjEgQEAKICAgLS0+CiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKICAgPHBhcmVudD4KICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY208L2FydGlmYWN0SWQ+CiAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CiAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgogICA8L3BhcmVudD4KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1tYW5hZ2VyczwvYXJ0aWZhY3RJZD4KICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKwogICA8bmFtZT5NYXZlbiBTQ00gTWFuYWdlcnM8L25hbWU+Ci0gIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KKyAgPGRlc2NyaXB0aW9uPlBhcmVudCBmb3IgU0NNIE1hbmFnZXJzLjwvZGVzY3JpcHRpb24+CisKICAgPG1vZHVsZXM+CiAgICAgPG1vZHVsZT5tYXZlbi1zY20tbWFuYWdlci1wbGV4dXM8L21vZHVsZT4KICAgPC9tb2R1bGVzPgotICA8ZGVwZW5kZW5jeU1hbmFnZW1lbnQ+Ci0gICAgPGRlcGVuZGVuY2llcz4KLSAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLWFwaTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgotICAgICAgPC9kZXBlbmRlbmN5PgotICAgIDwvZGVwZW5kZW5jaWVzPiAgCi0gIDwvZGVwZW5kZW5jeU1hbmFnZW1lbnQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tbWFuYWdlcnMvc3JjL3NpdGUvc2l0ZS54bWwgYi9tYXZlbi1zY20tbWFuYWdlcnMvc3JjL3NpdGUvc2l0ZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg1OGJjMwotLS0gL2Rldi9udWxsCisrKyBiL21hdmVuLXNjbS1tYW5hZ2Vycy9zcmMvc2l0ZS9zaXRlLnhtbApAQCAtMCwwICsxLDM0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+CisKKzwhLS0KKyAgfiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgIH4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgIH4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgfiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIH4gdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICB+ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgfiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICB+IHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgIH4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIH4gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIH4gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICB+IHVuZGVyIHRoZSBMaWNlbnNlLgorICAtLT4KKworPHByb2plY3QgbmFtZT0iTWF2ZW4gU0NNIE1hbmFnZXJzIj4KKyAgPGJvZHk+CisgICAgPG1lbnUgcmVmPSJwYXJlbnQiIC8+CisKKyAgICA8bWVudSBuYW1lPSJPdmVydmlldyI+CisgICAgICA8aXRlbSBuYW1lPSJJbnRyb2R1Y3Rpb24iIGhyZWY9ImluZGV4Lmh0bWwiLz4KKyAgICA8L21lbnU+CisKKyAgICA8bWVudSByZWY9Im1vZHVsZXMiIC8+CisKKyAgICA8bWVudSByZWY9InJlcG9ydHMiIGluaGVyaXQ9ImJvdHRvbSIgLz4KKyAgPC9ib2R5PgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXBsdWdpbi9wb20ueG1sIGIvbWF2ZW4tc2NtLXBsdWdpbi9wb20ueG1sCmluZGV4IGM4ZjFhOGUuLmUzNzgyODIgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wbHVnaW4vcG9tLnhtbAorKysgYi9tYXZlbi1zY20tcGx1Z2luL3BvbS54bWwKQEAgLTEsNCArMSw2IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhLS0KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzwhLS0KICAgfiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiAgIH4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCiAgIH4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KQEAgLTE4LDQ3ICsyMCwzMyBAQAogICAtLT4KIAogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+Ci0gIDxwYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtPC9hcnRpZmFjdElkPgotICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgotICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KLSAgPC9wYXJlbnQ+CiAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICA8cGFyZW50PgorICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5tYXZlbi1wbHVnaW5zPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjExPC92ZXJzaW9uPgorICA8L3BhcmVudD4KKwogICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CiAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gIDxwYWNrYWdpbmc+bWF2ZW4tcGx1Z2luPC9wYWNrYWdpbmc+Ci0gIDxuYW1lPk1hdmVuIFNDTSBQbHVnaW48L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj5NYXZlbiBQbHVnaW4gdGhhdCBhbGxvd3MgYWNjZXNzaW5nIGRpZmZlcmVudCBTQ01zPC9kZXNjcmlwdGlvbj4KICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgorICA8cGFja2FnaW5nPm1hdmVuLXBsdWdpbjwvcGFja2FnaW5nPgorCisgIDxuYW1lPk1hdmVuIFNDTSBQbHVnaW48L25hbWU+CisgIDxkZXNjcmlwdGlvbj5NYXZlbiBQbHVnaW4gdGhhdCBhbGxvd3MgYWNjZXNzaW5nIGRpZmZlcmVudCBTQ01zLjwvZGVzY3JpcHRpb24+CisKICAgPHByZXJlcXVpc2l0ZXM+CiAgICAgPG1hdmVuPjIuMC42PC9tYXZlbj4KICAgPC9wcmVyZXF1aXNpdGVzPgotICA8cmVwb3J0aW5nPgotICAgIDxwbHVnaW5zPgotICAgICAgPHBsdWdpbj4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1wbHVnaW4tcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjM8L3ZlcnNpb24+Ci0gICAgICA8L3BsdWdpbj4KLSAgICAgIDxwbHVnaW4+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tanhyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgIDwvcGx1Z2luPgotICAgICAgPHBsdWdpbj4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qYXZhZG9jLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgIDwvcGx1Z2luPgotICAgIDwvcGx1Z2lucz4KLSAgPC9yZXBvcnRpbmc+Ci0gIDxidWlsZD4KLSAgICA8ZXh0ZW5zaW9ucz4KLSAgICAgIDxleHRlbnNpb24+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ud2Fnb248L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPndhZ29uLXNzaC1leHRlcm5hbDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+MS4wLWJldGEtMjwvdmVyc2lvbj4KLSAgICAgIDwvZXh0ZW5zaW9uPgotICAgIDwvZXh0ZW5zaW9ucz4KLSAgPC9idWlsZD4KKworICA8ZGlzdHJpYnV0aW9uTWFuYWdlbWVudD4KKyAgICA8c2l0ZT4KKyAgICAgIDxpZD5hcGFjaGUud2Vic2l0ZTwvaWQ+CisgICAgICA8dXJsPnNjcDovL3Blb3BsZS5hcGFjaGUub3JnL3d3dy9tYXZlbi5hcGFjaGUub3JnL3NjbS9tYXZlbi1zY20tcGx1Z2luPC91cmw+CisgICAgPC9zaXRlPgorICA8L2Rpc3RyaWJ1dGlvbk1hbmFnZW1lbnQ+CisKICAgPGRlcGVuZGVuY2llcz4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW48L2dyb3VwSWQ+CkBAIC03OCw2MyArNjYsNDIgQEAKICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLW1hbmFnZXItcGxleHVzPC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KLSAgICAKKwogICAgIDwhLS0gcHJvdmlkZXJzIGRlY2xhcmF0aW9uIC0tPgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+Ci0gICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItYWNjdXJldjwvYXJ0aWZhY3RJZD4KLSAgICA8L2RlcGVuZGVuY3k+ICAgICAKLSAgICA8ZGVwZW5kZW5jeT4KLSAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgotICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhcjwvYXJ0aWZhY3RJZD4KLSAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPGRlcGVuZGVuY3k+Ci0gICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2U8L2FydGlmYWN0SWQ+Ci0gICAgPC9kZXBlbmRlbmN5PgotICAgIDxkZXBlbmRlbmN5PgotICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+Ci0gICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlPC9hcnRpZmFjdElkPgotICAgIDwvZGVwZW5kZW5jeT4KLSAgICA8ZGVwZW5kZW5jeT4KLSAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgotICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmE8L2FydGlmYWN0SWQ+Ci0gICAgPC9kZXBlbmRlbmN5PgotICAgIDxkZXBlbmRlbmN5PgotICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+Ci0gICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlPC9hcnRpZmFjdElkPgotICAgIDwvZGVwZW5kZW5jeT4KLSAgICA8ZGVwZW5kZW5jeT4KLSAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgotICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLWhnPC9hcnRpZmFjdElkPgorICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVycy1zdGFuZGFyZDwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KKyAgICAgIDx0eXBlPnBvbTwvdHlwZT4KICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1sb2NhbDwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KICAgICA8L2RlcGVuZGVuY3k+CisgICAgPCEtLSBUaGlzIGlzIHVzZWQgZGlyZWN0bHkgYnkgdGhlIG1vam8gLS0+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZTwvYXJ0aWZhY3RJZD4KLSAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPGRlcGVuZGVuY3k+Ci0gICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbTwvYXJ0aWZhY3RJZD4KLSAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPGRlcGVuZGVuY3k+Ci0gICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1zdm5leGU8L2FydGlmYWN0SWQ+Ci0gICAgPC9kZXBlbmRlbmN5PgotICAgIDxkZXBlbmRlbmN5PgotICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+Ci0gICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneTwvYXJ0aWZhY3RJZD4KLSAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPGRlcGVuZGVuY3k+Ci0gICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci12c3M8L2FydGlmYWN0SWQ+CisgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnM8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICAgIDwhLS0gZW5kIHByb3ZpZGVycyBkZWNsYXJhdGlvbiAtLT4KLSAgICAKKworICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLnBsZXh1czwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPnBsZXh1cy11dGlsczwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPjEuNS42PC92ZXJzaW9uPgorICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDwhLS0gVGVzdCAtLT4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4zLjguMjwvdmVyc2lvbj4KKyAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+ICAgCiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbi10ZXN0aW5nPC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tcGx1Z2luLXRlc3RpbmctaGFybmVzczwvYXJ0aWZhY3RJZD4KQEAgLTE0OCwxMCArMTE1LDI0OSBAQAogICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgogICAgIDwvZGVwZW5kZW5jeT4KICAgPC9kZXBlbmRlbmNpZXM+Ci0gIDxkaXN0cmlidXRpb25NYW5hZ2VtZW50PgotICAgIDxzaXRlPgotICAgICAgPGlkPmFwYWNoZS53ZWJzaXRlPC9pZD4KLSAgICAgIDx1cmw+c2NwZXhlOi8vcGVvcGxlLmFwYWNoZS5vcmcvd3d3L21hdmVuLmFwYWNoZS5vcmcvc2NtL3BsdWdpbnM8L3VybD4KLSAgICA8L3NpdGU+Ci0gIDwvZGlzdHJpYnV0aW9uTWFuYWdlbWVudD4KKworICA8YnVpbGQ+CisgICAgPGV4dGVuc2lvbnM+CisgICAgICA8ZXh0ZW5zaW9uPgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLndhZ29uPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD53YWdvbi1zc2gtZXh0ZXJuYWw8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjEuMC1iZXRhLTI8L3ZlcnNpb24+CisgICAgICA8L2V4dGVuc2lvbj4KKyAgICA8L2V4dGVuc2lvbnM+CisgICAgPHBsdWdpbk1hbmFnZW1lbnQ+CisgICAgICA8cGx1Z2lucz4KKyAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tcmVsZWFzZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgPHZlcnNpb24+Mi4wLWJldGEtNzwvdmVyc2lvbj4KKyAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDx0YWdCYXNlPmh0dHBzOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL21hdmVuL3NjbS90YWdzPC90YWdCYXNlPgorICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNpdGUtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgIDx2ZXJzaW9uPjIuMC1iZXRhLTc8L3ZlcnNpb24+CisgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8c3RhZ2luZ1NpdGVVUkw+c2NwOi8vcGVvcGxlLmFwYWNoZS5vcmcvd3d3L21hdmVuLmFwYWNoZS5vcmcvc2NtL21hdmVuLXNjbS1wbHVnaW4tJHtwcm9qZWN0LnZlcnNpb259PC9zdGFnaW5nU2l0ZVVSTD4KKyAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgIDwvcGx1Z2luPgorICAgICAgPC9wbHVnaW5zPgorICAgIDwvcGx1Z2luTWFuYWdlbWVudD4KKyAgPC9idWlsZD4KKyAgCisgIDxwcm9maWxlcz4KKyAgICA8cHJvZmlsZT4KKyAgICAgIDxpZD5yZXBvcnRpbmc8L2lkPgorICAgICAgPHJlcG9ydGluZz4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNoYW5nZXMtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wPC92ZXJzaW9uPgorICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgIDwhLS0gRm9yIEpJUkEtcmVwb3J0IC0tPgorICAgICAgICAgICAgICA8Y29sdW1uTmFtZXM+VHlwZSxLZXksU3VtbWFyeSxBc3NpZ25lZSxTdGF0dXMsUmVzb2x1dGlvbixGaXggVmVyc2lvbjwvY29sdW1uTmFtZXM+CisgICAgICAgICAgICAgIDxvbmx5Q3VycmVudFZlcnNpb24+dHJ1ZTwvb25seUN1cnJlbnRWZXJzaW9uPgorICAgICAgICAgICAgICA8cmVzb2x1dGlvbklkcz5DbG9zZWQ8L3Jlc29sdXRpb25JZHM+CisgICAgICAgICAgICAgIDxzb3J0Q29sdW1uTmFtZXM+VHlwZSxLZXk8L3NvcnRDb2x1bW5OYW1lcz4KKyAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDxyZXBvcnRTZXRzPgorICAgICAgICAgICAgICA8cmVwb3J0U2V0PgorICAgICAgICAgICAgICAgIDxyZXBvcnRzPgorICAgICAgICAgICAgICAgICAgPHJlcG9ydD5qaXJhLXJlcG9ydDwvcmVwb3J0PgorICAgICAgICAgICAgICAgIDwvcmVwb3J0cz4KKyAgICAgICAgICAgICAgPC9yZXBvcnRTZXQ+CisgICAgICAgICAgICA8L3JlcG9ydFNldHM+CisgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXBsdWdpbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjQuMjwvdmVyc2lvbj4KKyAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICA8IS0tIFRPRE86IHJlbW92ZSB3aGVuIG1hdmVuLXBsdWdpbnMgcGFyZW50IHBvbSAxMiBpcyByZWxlYXNlZCAtLT4KKyAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamF2YWRvYy1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgPHRhZ2xldHM+CisgICAgICAgICAgICAgICAgPHRhZ2xldD4KKyAgICAgICAgICAgICAgICAgIDx0YWdsZXRDbGFzcz5vcmcuYXBhY2hlLm1hdmVuLnRvb2xzLnBsdWdpbi5qYXZhZG9jLk1vam9BZ2dyZWdhdG9yVHlwZVRhZ2xldDwvdGFnbGV0Q2xhc3M+CisgICAgICAgICAgICAgICAgICA8dGFnbGV0QXJ0aWZhY3Q+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luLXRvb2xzPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1wbHVnaW4tdG9vbHMtamF2YWRvYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi40LjI8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICA8L3RhZ2xldEFydGlmYWN0PgorICAgICAgICAgICAgICAgIDwvdGFnbGV0PgorICAgICAgICAgICAgICAgIDx0YWdsZXQ+CisgICAgICAgICAgICAgICAgICA8dGFnbGV0Q2xhc3M+b3JnLmFwYWNoZS5tYXZlbi50b29scy5wbHVnaW4uamF2YWRvYy5Nb2pvQ29tcG9uZW50RmllbGRUYWdsZXQ8L3RhZ2xldENsYXNzPgorICAgICAgICAgICAgICAgICAgPHRhZ2xldEFydGlmYWN0PgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbi10b29sczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tcGx1Z2luLXRvb2xzLWphdmFkb2M8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuNC4yPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgPC90YWdsZXRBcnRpZmFjdD4KKyAgICAgICAgICAgICAgICA8L3RhZ2xldD4KKyAgICAgICAgICAgICAgICA8dGFnbGV0PgorICAgICAgICAgICAgICAgICAgPHRhZ2xldENsYXNzPm9yZy5hcGFjaGUubWF2ZW4udG9vbHMucGx1Z2luLmphdmFkb2MuTW9qb0NvbmZpZ3VyYXRvclR5cGVUYWdsZXQ8L3RhZ2xldENsYXNzPgorICAgICAgICAgICAgICAgICAgPHRhZ2xldEFydGlmYWN0PgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbi10b29sczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tcGx1Z2luLXRvb2xzLWphdmFkb2M8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuNC4yPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgPC90YWdsZXRBcnRpZmFjdD4KKyAgICAgICAgICAgICAgICA8L3RhZ2xldD4KKyAgICAgICAgICAgICAgICA8dGFnbGV0PgorICAgICAgICAgICAgICAgICAgPHRhZ2xldENsYXNzPm9yZy5hcGFjaGUubWF2ZW4udG9vbHMucGx1Z2luLmphdmFkb2MuTW9qb0V4ZWN1dGVUeXBlVGFnbGV0PC90YWdsZXRDbGFzcz4KKyAgICAgICAgICAgICAgICAgIDx0YWdsZXRBcnRpZmFjdD4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW4tdG9vbHM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXBsdWdpbi10b29scy1qYXZhZG9jPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjQuMjwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgIDwvdGFnbGV0QXJ0aWZhY3Q+CisgICAgICAgICAgICAgICAgPC90YWdsZXQ+CisgICAgICAgICAgICAgICAgPHRhZ2xldD4KKyAgICAgICAgICAgICAgICAgIDx0YWdsZXRDbGFzcz5vcmcuYXBhY2hlLm1hdmVuLnRvb2xzLnBsdWdpbi5qYXZhZG9jLk1vam9FeGVjdXRpb25TdHJhdGVneVR5cGVUYWdsZXQ8L3RhZ2xldENsYXNzPgorICAgICAgICAgICAgICAgICAgPHRhZ2xldEFydGlmYWN0PgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbi10b29sczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tcGx1Z2luLXRvb2xzLWphdmFkb2M8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuNC4yPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgPC90YWdsZXRBcnRpZmFjdD4KKyAgICAgICAgICAgICAgICA8L3RhZ2xldD4KKyAgICAgICAgICAgICAgICA8dGFnbGV0PgorICAgICAgICAgICAgICAgICAgPHRhZ2xldENsYXNzPm9yZy5hcGFjaGUubWF2ZW4udG9vbHMucGx1Z2luLmphdmFkb2MuTW9qb0dvYWxUeXBlVGFnbGV0PC90YWdsZXRDbGFzcz4KKyAgICAgICAgICAgICAgICAgIDx0YWdsZXRBcnRpZmFjdD4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW4tdG9vbHM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXBsdWdpbi10b29scy1qYXZhZG9jPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjQuMjwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgIDwvdGFnbGV0QXJ0aWZhY3Q+CisgICAgICAgICAgICAgICAgPC90YWdsZXQ+CisgICAgICAgICAgICAgICAgPHRhZ2xldD4KKyAgICAgICAgICAgICAgICAgIDx0YWdsZXRDbGFzcz5vcmcuYXBhY2hlLm1hdmVuLnRvb2xzLnBsdWdpbi5qYXZhZG9jLk1vam9Jbmhlcml0QnlEZWZhdWx0VHlwZVRhZ2xldDwvdGFnbGV0Q2xhc3M+CisgICAgICAgICAgICAgICAgICA8dGFnbGV0QXJ0aWZhY3Q+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luLXRvb2xzPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1wbHVnaW4tdG9vbHMtamF2YWRvYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi40LjI8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICA8L3RhZ2xldEFydGlmYWN0PgorICAgICAgICAgICAgICAgIDwvdGFnbGV0PgorICAgICAgICAgICAgICAgIDx0YWdsZXQ+CisgICAgICAgICAgICAgICAgICA8dGFnbGV0Q2xhc3M+b3JnLmFwYWNoZS5tYXZlbi50b29scy5wbHVnaW4uamF2YWRvYy5Nb2pvSW5zdGFudGlhdGlvblN0cmF0ZWd5VHlwZVRhZ2xldDwvdGFnbGV0Q2xhc3M+CisgICAgICAgICAgICAgICAgICA8dGFnbGV0QXJ0aWZhY3Q+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luLXRvb2xzPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1wbHVnaW4tdG9vbHMtamF2YWRvYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi40LjI8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICA8L3RhZ2xldEFydGlmYWN0PgorICAgICAgICAgICAgICAgIDwvdGFnbGV0PgorICAgICAgICAgICAgICAgIDx0YWdsZXQ+CisgICAgICAgICAgICAgICAgICA8dGFnbGV0Q2xhc3M+b3JnLmFwYWNoZS5tYXZlbi50b29scy5wbHVnaW4uamF2YWRvYy5Nb2pvUGFyYW1ldGVyRmllbGRUYWdsZXQ8L3RhZ2xldENsYXNzPgorICAgICAgICAgICAgICAgICAgPHRhZ2xldEFydGlmYWN0PgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbi10b29sczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tcGx1Z2luLXRvb2xzLWphdmFkb2M8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuNC4yPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgPC90YWdsZXRBcnRpZmFjdD4KKyAgICAgICAgICAgICAgICA8L3RhZ2xldD4KKyAgICAgICAgICAgICAgICA8dGFnbGV0PgorICAgICAgICAgICAgICAgICAgPHRhZ2xldENsYXNzPm9yZy5hcGFjaGUubWF2ZW4udG9vbHMucGx1Z2luLmphdmFkb2MuTW9qb1BoYXNlVHlwZVRhZ2xldDwvdGFnbGV0Q2xhc3M+CisgICAgICAgICAgICAgICAgICA8dGFnbGV0QXJ0aWZhY3Q+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luLXRvb2xzPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1wbHVnaW4tdG9vbHMtamF2YWRvYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi40LjI8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICA8L3RhZ2xldEFydGlmYWN0PgorICAgICAgICAgICAgICAgIDwvdGFnbGV0PgorICAgICAgICAgICAgICAgIDx0YWdsZXQ+CisgICAgICAgICAgICAgICAgICA8dGFnbGV0Q2xhc3M+b3JnLmFwYWNoZS5tYXZlbi50b29scy5wbHVnaW4uamF2YWRvYy5Nb2pvUmVhZE9ubHlGaWVsZFRhZ2xldDwvdGFnbGV0Q2xhc3M+CisgICAgICAgICAgICAgICAgICA8dGFnbGV0QXJ0aWZhY3Q+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luLXRvb2xzPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1wbHVnaW4tdG9vbHMtamF2YWRvYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi40LjI8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICA8L3RhZ2xldEFydGlmYWN0PgorICAgICAgICAgICAgICAgIDwvdGFnbGV0PgorICAgICAgICAgICAgICAgIDx0YWdsZXQ+CisgICAgICAgICAgICAgICAgICA8dGFnbGV0Q2xhc3M+b3JnLmFwYWNoZS5tYXZlbi50b29scy5wbHVnaW4uamF2YWRvYy5Nb2pvUmVxdWlyZWRGaWVsZFRhZ2xldDwvdGFnbGV0Q2xhc3M+CisgICAgICAgICAgICAgICAgICA8dGFnbGV0QXJ0aWZhY3Q+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luLXRvb2xzPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1wbHVnaW4tdG9vbHMtamF2YWRvYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi40LjI8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICA8L3RhZ2xldEFydGlmYWN0PgorICAgICAgICAgICAgICAgIDwvdGFnbGV0PgorICAgICAgICAgICAgICAgIDx0YWdsZXQ+CisgICAgICAgICAgICAgICAgICA8dGFnbGV0Q2xhc3M+b3JnLmFwYWNoZS5tYXZlbi50b29scy5wbHVnaW4uamF2YWRvYy5Nb2pvUmVxdWlyZXNEZXBlbmRlbmN5UmVzb2x1dGlvblR5cGVUYWdsZXQ8L3RhZ2xldENsYXNzPgorICAgICAgICAgICAgICAgICAgPHRhZ2xldEFydGlmYWN0PgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbi10b29sczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tcGx1Z2luLXRvb2xzLWphdmFkb2M8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuNC4yPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgPC90YWdsZXRBcnRpZmFjdD4KKyAgICAgICAgICAgICAgICA8L3RhZ2xldD4KKyAgICAgICAgICAgICAgICA8dGFnbGV0PgorICAgICAgICAgICAgICAgICAgPHRhZ2xldENsYXNzPm9yZy5hcGFjaGUubWF2ZW4udG9vbHMucGx1Z2luLmphdmFkb2MuTW9qb1JlcXVpcmVzRGlyZWN0SW52b2NhdGlvblR5cGVUYWdsZXQ8L3RhZ2xldENsYXNzPgorICAgICAgICAgICAgICAgICAgPHRhZ2xldEFydGlmYWN0PgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbi10b29sczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tcGx1Z2luLXRvb2xzLWphdmFkb2M8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuNC4yPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgPC90YWdsZXRBcnRpZmFjdD4KKyAgICAgICAgICAgICAgICA8L3RhZ2xldD4KKyAgICAgICAgICAgICAgICA8dGFnbGV0PgorICAgICAgICAgICAgICAgICAgPHRhZ2xldENsYXNzPm9yZy5hcGFjaGUubWF2ZW4udG9vbHMucGx1Z2luLmphdmFkb2MuTW9qb1JlcXVpcmVzT25MaW5lVHlwZVRhZ2xldDwvdGFnbGV0Q2xhc3M+CisgICAgICAgICAgICAgICAgICA8dGFnbGV0QXJ0aWZhY3Q+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luLXRvb2xzPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1wbHVnaW4tdG9vbHMtamF2YWRvYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi40LjI8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICA8L3RhZ2xldEFydGlmYWN0PgorICAgICAgICAgICAgICAgIDwvdGFnbGV0PgorICAgICAgICAgICAgICAgIDx0YWdsZXQ+CisgICAgICAgICAgICAgICAgICA8dGFnbGV0Q2xhc3M+b3JnLmFwYWNoZS5tYXZlbi50b29scy5wbHVnaW4uamF2YWRvYy5Nb2pvUmVxdWlyZXNQcm9qZWN0VHlwZVRhZ2xldDwvdGFnbGV0Q2xhc3M+CisgICAgICAgICAgICAgICAgICA8dGFnbGV0QXJ0aWZhY3Q+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luLXRvb2xzPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1wbHVnaW4tdG9vbHMtamF2YWRvYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi40LjI8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICA8L3RhZ2xldEFydGlmYWN0PgorICAgICAgICAgICAgICAgIDwvdGFnbGV0PgorICAgICAgICAgICAgICAgIDx0YWdsZXQ+CisgICAgICAgICAgICAgICAgICA8dGFnbGV0Q2xhc3M+b3JnLmFwYWNoZS5tYXZlbi50b29scy5wbHVnaW4uamF2YWRvYy5Nb2pvUmVxdWlyZXNSZXBvcnRzVHlwZVRhZ2xldDwvdGFnbGV0Q2xhc3M+CisgICAgICAgICAgICAgICAgICA8dGFnbGV0QXJ0aWZhY3Q+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luLXRvb2xzPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1wbHVnaW4tdG9vbHMtamF2YWRvYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi40LjI8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICA8L3RhZ2xldEFydGlmYWN0PgorICAgICAgICAgICAgICAgIDwvdGFnbGV0PgorCisgICAgICAgICAgICAgICAgPHRhZ2xldD4KKyAgICAgICAgICAgICAgICAgIDx0YWdsZXRDbGFzcz5vcmcuY29kZWhhdXMucGxleHVzLmphdmFkb2MuUGxleHVzQ29tcG9uZW50VGFnbGV0PC90YWdsZXRDbGFzcz4KKyAgICAgICAgICAgICAgICAgIDx0YWdsZXRBcnRpZmFjdD4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLnBsZXh1czwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+cGxleHVzLWphdmFkb2M8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMDwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgIDwvdGFnbGV0QXJ0aWZhY3Q+CisgICAgICAgICAgICAgICAgPC90YWdsZXQ+CisgICAgICAgICAgICAgICAgPHRhZ2xldD4KKyAgICAgICAgICAgICAgICAgIDx0YWdsZXRDbGFzcz5vcmcuY29kZWhhdXMucGxleHVzLmphdmFkb2MuUGxleHVzQ29uZmlndXJhdGlvblRhZ2xldDwvdGFnbGV0Q2xhc3M+CisgICAgICAgICAgICAgICAgICA8dGFnbGV0QXJ0aWZhY3Q+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5wbGV4dXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnBsZXh1cy1qYXZhZG9jPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjA8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICA8L3RhZ2xldEFydGlmYWN0PgorICAgICAgICAgICAgICAgIDwvdGFnbGV0PgorICAgICAgICAgICAgICAgIDx0YWdsZXQ+CisgICAgICAgICAgICAgICAgICA8dGFnbGV0Q2xhc3M+b3JnLmNvZGVoYXVzLnBsZXh1cy5qYXZhZG9jLlBsZXh1c1JlcXVpcmVtZW50VGFnbGV0PC90YWdsZXRDbGFzcz4KKyAgICAgICAgICAgICAgICAgIDx0YWdsZXRBcnRpZmFjdD4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLnBsZXh1czwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+cGxleHVzLWphdmFkb2M8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMDwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgIDwvdGFnbGV0QXJ0aWZhY3Q+CisgICAgICAgICAgICAgICAgPC90YWdsZXQ+CisgICAgICAgICAgICAgIDwvdGFnbGV0cz4KKyAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tcGx1Z2luLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuNC4yPC92ZXJzaW9uPgorICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgICA8L3JlcG9ydGluZz4KKyAgICA8L3Byb2ZpbGU+CisgIDwvcHJvZmlsZXM+CisKKyAgPHNjbT4KKyAgICA8Y29ubmVjdGlvbj5zY206c3ZuOmh0dHA6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvbWF2ZW4vc2NtL3RhZ3MvbWF2ZW4tc2NtLTEuMTwvY29ubmVjdGlvbj4KKyAgICA8ZGV2ZWxvcGVyQ29ubmVjdGlvbj5zY206c3ZuOmh0dHBzOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL21hdmVuL3NjbS90YWdzL21hdmVuLXNjbS0xLjE8L2RldmVsb3BlckNvbm5lY3Rpb24+CisgICAgPHVybD5odHRwOi8vc3ZuLmFwYWNoZS5vcmcvdmlld2N2cy5jZ2kvbWF2ZW4vc2NtL3RhZ3MvbWF2ZW4tc2NtLTEuMTwvdXJsPgorICA8L3NjbT4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vQWJzdHJhY3RTY21Nb2pvLmphdmEgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0Fic3RyYWN0U2NtTW9qby5qYXZhCmluZGV4IDczOWNhZGYuLjJlNDg0ZjAgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vQWJzdHJhY3RTY21Nb2pvLmphdmEKKysrIGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9BYnN0cmFjdFNjbU1vam8uamF2YQpAQCAtMTY2LDYgKzE2Niw3IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSBNYXAgcHJvdmlkZXJJbXBsZW1lbnRhdGlvbnM7CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKQogICAgICAgICB0aHJvd3MgTW9qb0V4ZWN1dGlvbkV4Y2VwdGlvbgogICAgIHsKQEAgLTE5MCw4ICsxOTEsOSBAQAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFN0cmluZyBwcm92aWRlclR5cGUgPSAoU3RyaW5nKSBpLm5leHQoKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgcHJvdmlkZXJJbXBsZW1lbnRhdGlvbiA9IChTdHJpbmcpIHByb3ZpZGVySW1wbGVtZW50YXRpb25zLmdldCggcHJvdmlkZXJUeXBlICk7Ci0gICAgICAgICAgICAgICAgZ2V0TG9nKCkuaW5mbyggIkNoYW5nZSB0aGUgZGVmYXVsdCAnIiArIHByb3ZpZGVyVHlwZSArICInIHByb3ZpZGVyIGltcGxlbWVudGF0aW9uIHRvICciICsKLSAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJJbXBsZW1lbnRhdGlvbiArICInLiIgKTsKKyAgICAgICAgICAgICAgICBnZXRMb2coKS5pbmZvKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGFuZ2UgdGhlIGRlZmF1bHQgJyIgKyBwcm92aWRlclR5cGUgKyAiJyBwcm92aWRlciBpbXBsZW1lbnRhdGlvbiB0byAnIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHByb3ZpZGVySW1wbGVtZW50YXRpb24gKyAiJy4iICk7CiAgICAgICAgICAgICAgICAgZ2V0U2NtTWFuYWdlcigpLnNldFNjbVByb3ZpZGVySW1wbGVtZW50YXRpb24oIHByb3ZpZGVyVHlwZSwgcHJvdmlkZXJJbXBsZW1lbnRhdGlvbiApOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zNDAsNyArMzQyLDcgQEAKICAgICAvKioKICAgICAgKiBMb2FkIHVzZXJuYW1lIHBhc3N3b3JkIGZyb20gc2V0dGluZ3MgaWYgdXNlciBoYXMgbm90IHNldCB0aGVtIGluIEpWTSBwcm9wZXJ0aWVzCiAgICAgICoKLSAgICAgKiBAcGFyYW0gcmVwbworICAgICAqIEBwYXJhbSByZXBvIG5vdCBudWxsCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGxvYWRJbmZvc0Zyb21TZXR0aW5ncyggU2NtUHJvdmlkZXJSZXBvc2l0b3J5V2l0aEhvc3QgcmVwbyApCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9BZGRNb2pvLmphdmEgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0FkZE1vam8uamF2YQppbmRleCBlZDM2ZWE5Li5hYWExZDNiIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0FkZE1vam8uamF2YQorKysgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0FkZE1vam8uamF2YQpAQCAtMjcsMTQgKzI3LDE3IEBACiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIAogLyoqCisgKiBBZGQgYSBmaWxlIHNldCB0byB0aGUgcHJvamVjdC4KKyAqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Imp1bGllbi5oZW5yeUBjYXBnZW1pbmkuY29tIj5KdWxpZW4gSGVucnk8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKiBAZ29hbCBhZGQKICAqIEBhZ2dyZWdhdG9yCi0gKiBAZGVzY3JpcHRpb24gQWRkIGEgZmlsZXMgdG8gdGhlIHByb2plY3QKICAqLwogcHVibGljIGNsYXNzIEFkZE1vam8KICAgICBleHRlbmRzIEFic3RyYWN0U2NtTW9qbwogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpCiAgICAgICAgIHRocm93cyBNb2pvRXhlY3V0aW9uRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9Cb290c3RyYXBNb2pvLmphdmEgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0Jvb3RzdHJhcE1vam8uamF2YQppbmRleCA2ODJlODA4Li41ZTAxNzMzIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0Jvb3RzdHJhcE1vam8uamF2YQorKysgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0Jvb3RzdHJhcE1vam8uamF2YQpAQCAtMjcsMTEgKzI3LDcgQEAKIGltcG9ydCBvcmcuY29kZWhhdXMucGxleHVzLnV0aWwuY2xpLkRlZmF1bHRDb25zdW1lcjsKIGltcG9ydCBvcmcuY29kZWhhdXMucGxleHVzLnV0aWwuY2xpLlN0cmVhbUNvbnN1bWVyOwogCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKIGltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CiAKIC8qKgogICogUHVsbCB0aGUgcHJvamVjdCBzb3VyY2UgZnJvbSB0aGUgY29uZmlndXJlZCBzY20gYW5kIGV4ZWN1dGUgdGhlIGNvbmZpZ3VyZWQgZ29hbHMuCkBAIC0zOSw3ICszNSw2IEBACiAgKiBAYXV0aG9yIDxhIGhyZWY9ImRhbnRyYW5AZ21haWwuY29tIj5EYW4gVC4gVHJhbjwvYT4KICAqIEB2ZXJzaW9uICRJZCQKICAqIEBnb2FsIGJvb3RzdHJhcAotICogQGRlc2NyaXB0aW9uIEJvb3N0cmFwIGEgcHJvamVjdAogICogQHJlcXVpcmVzUHJvamVjdCBmYWxzZQogICovCiBwdWJsaWMgY2xhc3MgQm9vdHN0cmFwTW9qbwpAQCAtNzEsNiArNjYsNyBAQAogICAgICAqLwogICAgIHByaXZhdGUgU3RyaW5nIGdvYWxzRGlyZWN0b3J5OwogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBleGVjdXRlKCkKICAgICAgICAgdGhyb3dzIE1vam9FeGVjdXRpb25FeGNlcHRpb24KICAgICB7CkBAIC03OCwzMiArNzQsMjkgQEAKIAogICAgICAgICBpZiAoIHRoaXMuZ2V0Q2hlY2tvdXRSZXN1bHQoKSAhPSBudWxsICkKICAgICAgICAgewotICAgICAgICAJcnVuR29hbHMoIHRoaXMuZ2V0Q2hlY2tvdXRSZXN1bHQoKS5nZXRSZWxhdGl2ZVBhdGhQcm9qZWN0RGlyZWN0b3J5KCkgKTsKKyAgICAgICAgICAgIHJ1bkdvYWxzKCB0aGlzLmdldENoZWNrb3V0UmVzdWx0KCkuZ2V0UmVsYXRpdmVQYXRoUHJvamVjdERpcmVjdG9yeSgpICk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKICAgICAgKiBAcGFyYW0gcmVsYXRpdmVQYXRoUHJvamVjdERpcmVjdG9yeSB0aGUgcHJvamVjdCBkaXJlY3RvcnkncyBwYXRoIHJlbGF0aXZlIHRvIHRoZSBjaGVja291dAogICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeTsgb3IgIiIgaWYgdGhleSBhcmUgdGhlIHNhbWUKKyAgICAgKiBAdGhyb3dzIE1vam9FeGVjdXRpb25FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHJ1bkdvYWxzKCBTdHJpbmcgcmVsYXRpdmVQYXRoUHJvamVjdERpcmVjdG9yeSApCiAgICAgICAgIHRocm93cyBNb2pvRXhlY3V0aW9uRXhjZXB0aW9uCiAgICAgewogICAgICAgICBDb21tYW5kbGluZSBjbCA9IG5ldyBDb21tYW5kbGluZSgpOwotCiAgICAgICAgIHRyeQogICAgICAgICB7Ci0gICAgICAgICAgICBhZGRTeXN0ZW1FbnZpcm9ubWVudCggY2wgKTsKKyAgICAgICAgICAgIGNsLmFkZFN5c3RlbUVudmlyb25tZW50KCk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKCBFeGNlcHRpb24gZSApCiAgICAgICAgIHsKICAgICAgICAgICAgIHRocm93IG5ldyBNb2pvRXhlY3V0aW9uRXhjZXB0aW9uKCAiQ2FuJ3QgYWRkIHN5c3RlbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gbXZuIGNvbW1hbmQgbGluZS4iLCBlICk7CiAgICAgICAgIH0KLQogICAgICAgICBjbC5hZGRFbnZpcm9ubWVudCggIk1BVkVOX1RFUk1JTkFURV9DTUQiLCAib24iICk7Ci0KICAgICAgICAgY2wuc2V0RXhlY3V0YWJsZSggIm12biIgKTsKLQogICAgICAgICBjbC5zZXRXb3JraW5nRGlyZWN0b3J5KCBkZXRlcm1pbmVXb3JraW5nRGlyZWN0b3J5UGF0aCggdGhpcy5nZXRDaGVja291dERpcmVjdG9yeSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoUHJvamVjdERpcmVjdG9yeSwgZ29hbHNEaXJlY3RvcnkgKSApOwogCkBAIC0xMTMsMTMgKzEwNiwxMyBAQAogCiAgICAgICAgICAgICBmb3IgKCBpbnQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyArK2kgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIHRva2Vuc1tpXSApOworICAgICAgICAgICAgICAgIGNsLmNyZWF0ZUFyZygpLnNldFZhbHVlKCB0b2tlbnNbaV0gKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICggISBTdHJpbmdVdGlscy5pc0VtcHR5KCB0aGlzLnByb2ZpbGVzICkgKQogICAgICAgICB7Ci0gICAgICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAiLVAiICsgdGhpcy5wcm9maWxlcyApOworICAgICAgICAgICAgY2wuY3JlYXRlQXJnKCkuc2V0VmFsdWUoICItUCIgKyB0aGlzLnByb2ZpbGVzICk7CiAgICAgICAgIH0KIAogICAgICAgICBTdHJlYW1Db25zdW1lciBjb25zdW1lciA9IG5ldyBEZWZhdWx0Q29uc3VtZXIoKTsKQEAgLTE0MCw5ICsxMzMsOSBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIERldGVybWluZXMgdGhlIHBhdGggb2YgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiBCeSBkZWZhdWx0LCB0aGlzIGlzIHRoZSBjaGVja291dCBkaXJlY3RvcnkuIEZvciBzb21lIFNDTXMsIHRoZSBwcm9qZWN0IHJvb3QgZGlyZWN0b3J5Ci0gICAgICogaXMgbm90IHRoZSBjaGVja291dCBkaXJlY3RvcnkgaXRzZWxmLCBidXQgYSBTQ00tc3BlY2lmaWMgc3ViZGlyZWN0b3J5LiBUaGUgYnVpbGQgY2FuIGZ1cnRoZXJtb3JlIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaW4gYQotICAgICAqIHN1YmRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QgZGlyZWN0b3J5LCBpbiBjYXNlCisgICAgICogRGV0ZXJtaW5lcyB0aGUgcGF0aCBvZiB0aGUgd29ya2luZyBkaXJlY3RvcnkuIEJ5IGRlZmF1bHQsIHRoaXMgaXMgdGhlIGNoZWNrb3V0IGRpcmVjdG9yeS4gRm9yIHNvbWUgU0NNcywKKyAgICAgKiB0aGUgcHJvamVjdCByb290IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNoZWNrb3V0IGRpcmVjdG9yeSBpdHNlbGYsIGJ1dCBhIFNDTS1zcGVjaWZpYyBzdWJkaXJlY3RvcnkuIFRoZQorICAgICAqIGJ1aWxkIGNhbiBmdXJ0aGVybW9yZSBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGluIGEgc3ViZGlyZWN0b3J5IG9mIHRoaXMgcHJvamVjdCBkaXJlY3RvcnksIGluIGNhc2UuCiAgICAgICoKICAgICAgKiBAcGFyYW0gY2hlY2tvdXREaXJlY3RvcnkKICAgICAgKiBAcGFyYW0gcmVsYXRpdmVQYXRoUHJvamVjdERpcmVjdG9yeQpAQCAtMTY2LDczICsxNTksNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gcHJvamVjdERpcmVjdG9yeS5nZXRQYXRoKCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEZpbGUoIHByb2plY3REaXJlY3RvcnksIGdvYWxzRGlyZWN0b3J5ICkuZ2V0UGF0aCgpOwotICAgICAgICB9Ci0gICAgfQogCi0gICAgLyoqCi0gICAgICogQWRkIHN5c3RlbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLSAgICAgKiBNb3ZlZCB0byBwbGV4dXMtdXRpbHMgMS4wLjUKLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgYWRkU3lzdGVtRW52aXJvbm1lbnQoIENvbW1hbmRsaW5lIGNsICkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgUHJvcGVydGllcyBlbnZWYXJzID0gZ2V0U3lzdGVtRW52VmFycygpOwotCi0gICAgICAgIGZvciAoIEl0ZXJhdG9yIGkgPSBlbnZWYXJzLmtleVNldCgpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBrZXkgPSAoU3RyaW5nKSBpLm5leHQoKTsKLQotICAgICAgICAgICAgY2wuYWRkRW52aXJvbm1lbnQoIGtleSwgZW52VmFycy5nZXRQcm9wZXJ0eSgga2V5ICkgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgUHJvcGVydGllcyBnZXRTeXN0ZW1FbnZWYXJzKCkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgUHJvY2VzcyBwID0gbnVsbDsKLQotICAgICAgICBQcm9wZXJ0aWVzIGVudlZhcnMgPSBuZXcgUHJvcGVydGllcygpOwotCi0gICAgICAgIFJ1bnRpbWUgciA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpOwotCi0gICAgICAgIFN0cmluZyBvcyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSggIm9zLm5hbWUiICkudG9Mb3dlckNhc2UoKTsKLQotICAgICAgICAvL0lmIHRoaXMgaXMgd2luZG93cyBzZXQgdGhlIHNoZWxsIHRvIGNvbW1hbmQuY29tIG9yIGNtZC5leGUgd2l0aCBjb3JyZWN0IGFyZ3VtZW50cy4KLSAgICAgICAgaWYgKCBvcy5pbmRleE9mKCAid2luZG93cyIgKSAhPSAtMSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICggb3MuaW5kZXhPZiggIjk1IiApICE9IC0xIHx8IG9zLmluZGV4T2YoICI5OCIgKSAhPSAtMSB8fCBvcy5pbmRleE9mKCAiTWUiICkgIT0gLTEgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHAgPSByLmV4ZWMoICJjb21tYW5kLmNvbSAvYyBzZXQiICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcCA9IHIuZXhlYyggImNtZC5leGUgL2Mgc2V0IiApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcCA9IHIuZXhlYyggImVudiIgKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoIHAuZ2V0SW5wdXRTdHJlYW0oKSApICk7Ci0KLSAgICAgICAgU3RyaW5nIGxpbmU7Ci0KLSAgICAgICAgd2hpbGUgKCAoIGxpbmUgPSBici5yZWFkTGluZSgpICkgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpZHggPSBsaW5lLmluZGV4T2YoICc9JyApOwotCi0gICAgICAgICAgICBTdHJpbmcga2V5ID0gbGluZS5zdWJzdHJpbmcoIDAsIGlkeCApOwotCi0gICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBsaW5lLnN1YnN0cmluZyggaWR4ICsgMSApOwotCi0gICAgICAgICAgICBlbnZWYXJzLnNldFByb3BlcnR5KCBrZXksIHZhbHVlICk7Ci0gICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIGtleSArICIgPSAiICsgdmFsdWUgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBlbnZWYXJzOworICAgICAgICByZXR1cm4gbmV3IEZpbGUoIHByb2plY3REaXJlY3RvcnksIGdvYWxzRGlyZWN0b3J5ICkuZ2V0UGF0aCgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vQnJhbmNoTW9qby5qYXZhIGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9CcmFuY2hNb2pvLmphdmEKaW5kZXggYmFmNTQ4Ny4uOTlmZTFhNiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9CcmFuY2hNb2pvLmphdmEKKysrIGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9CcmFuY2hNb2pvLmphdmEKQEAgLTMzLDE2ICszMywxNiBAQAogICogQGF1dGhvciA8YSBocmVmPSJldmVuaXNzZUBhcGFjaGUub3JnIj5FbW1hbnVlbCBWZW5pc3NlPC9hPgogICogQHZlcnNpb24gJElkJAogICogQGdvYWwgYnJhbmNoCi0gKiBAZGVzY3JpcHRpb24gQnJhbmNoIHRoZSBwcm9qZWN0CiAgKiBAYWdncmVnYXRvcgogICovCiBwdWJsaWMgY2xhc3MgQnJhbmNoTW9qbwogICAgIGV4dGVuZHMgQWJzdHJhY3RTY21Nb2pvCiB7CiAgICAgLyoqCi0gICAgICogVGFnIG5hbWUuCisgICAgICogVGhlIGJyYW5jaCBuYW1lLgogICAgICAqCiAgICAgICogQHBhcmFtZXRlciBleHByZXNzaW9uPSIke2JyYW5jaH0iCisgICAgICogQHJlcXVpcmVkCiAgICAgICovCiAgICAgcHJpdmF0ZSBTdHJpbmcgYnJhbmNoOwogCkBAIC01Myw2ICs1Myw3IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSBTdHJpbmcgbWVzc2FnZTsKIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpCiAgICAgICAgIHRocm93cyBNb2pvRXhlY3V0aW9uRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9DaGFuZ2VMb2dNb2pvLmphdmEgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0NoYW5nZUxvZ01vam8uamF2YQppbmRleCAxNjg2Y2YzLi42NGY1NmViIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0NoYW5nZUxvZ01vam8uamF2YQorKysgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0NoYW5nZUxvZ01vam8uamF2YQpAQCAtODksNiArODksNyBAQAogICAgICAqLwogICAgIHByaXZhdGUgU3RyaW5nIHNjbVZlcnNpb247CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKQogICAgICAgICB0aHJvd3MgTW9qb0V4ZWN1dGlvbkV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vQ2hlY2tpbk1vam8uamF2YSBiL21hdmVuLXNjbS1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vQ2hlY2tpbk1vam8uamF2YQppbmRleCBhOTYyYmJhLi41YzhmODc4IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0NoZWNraW5Nb2pvLmphdmEKKysrIGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9DaGVja2luTW9qby5qYXZhCkBAIC0zMiw3ICszMiw2IEBACiAgKiBAYXV0aG9yIDxhIGhyZWY9ImV2ZW5pc3NlQGFwYWNoZS5vcmciPkVtbWFudWVsIFZlbmlzc2U8L2E+CiAgKiBAdmVyc2lvbiAkSWQkCiAgKiBAZ29hbCBjaGVja2luCi0gKiBAZGVzY3JpcHRpb24gY2hlY2tpbiB0aGUgcHJvamVjdAogICogQGFnZ3JlZ2F0b3IKICAqLwogcHVibGljIGNsYXNzIENoZWNraW5Nb2pvCkBAIC02Niw2ICs2NSw3IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSBTdHJpbmcgc2NtVmVyc2lvbjsKIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpCiAgICAgICAgIHRocm93cyBNb2pvRXhlY3V0aW9uRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9DaGVja291dE1vam8uamF2YSBiL21hdmVuLXNjbS1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vQ2hlY2tvdXRNb2pvLmphdmEKaW5kZXggMzY5MjAxNi4uZjIzNTRlOCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9DaGVja291dE1vam8uamF2YQorKysgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0NoZWNrb3V0TW9qby5qYXZhCkBAIC0zNSw3ICszNSw2IEBACiAgKiBAYXV0aG9yIDxhIGhyZWY9ImV2ZW5pc3NlQGFwYWNoZS5vcmciPkVtbWFudWVsIFZlbmlzc2U8L2E+CiAgKiBAdmVyc2lvbiAkSWQkCiAgKiBAZ29hbCBjaGVja291dAotICogQGRlc2NyaXB0aW9uIENoZWNrIG91dCBhIHByb2plY3QKICAqIEByZXF1aXJlc1Byb2plY3QgZmFsc2UKICAqLwogcHVibGljIGNsYXNzIENoZWNrb3V0TW9qbwpAQCAtNzMsNyArNzIsOCBAQAogICAgICAqIGFsbG93IGV4dGVuZGVkIG1vam8gKGllIEJvb3RTdHJhcCApIHRvIHNlZSBjaGVja291dCByZXN1bHQKICAgICAgKi8KICAgICBwcml2YXRlIENoZWNrT3V0U2NtUmVzdWx0IGNoZWNrb3V0UmVzdWx0OwotICAgIAorCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBleGVjdXRlKCkKICAgICAgICAgdGhyb3dzIE1vam9FeGVjdXRpb25FeGNlcHRpb24KICAgICB7CkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgIGNoZWNrb3V0UmVzdWx0ID0gbnVsbDsKICAgICAgICAgaWYgKCAhZ2V0Q2hlY2tvdXREaXJlY3RvcnkoKS5pc0RpcmVjdG9yeSgpIHx8ICF0aGlzLnNraXBDaGVja291dElmRXhpc3RzICkKICAgICAgICAgewotICAgICAgICAJY2hlY2tvdXRSZXN1bHQgPSBjaGVja291dCgpOworICAgICAgICAgICAgY2hlY2tvdXRSZXN1bHQgPSBjaGVja291dCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByb3RlY3RlZCBDaGVja091dFNjbVJlc3VsdCBnZXRDaGVja291dFJlc3VsdCgpIAorICAgIHByb3RlY3RlZCBDaGVja091dFNjbVJlc3VsdCBnZXRDaGVja291dFJlc3VsdCgpCiAgICAgewogICAgICAgICByZXR1cm4gY2hlY2tvdXRSZXN1bHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9EZWZhdWx0TG9nLmphdmEgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0RlZmF1bHRMb2cuamF2YQppbmRleCBjOGVlNjZjLi5hZDcxNDM4IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0RlZmF1bHRMb2cuamF2YQorKysgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0RlZmF1bHRMb2cuamF2YQpAQCAtMzYsMTI5ICszNiw5NyBAQAogICAgICAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXIjaXNEZWJ1Z0VuYWJsZWQoKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNEZWJ1Z0VuYWJsZWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGxvZ2dlci5pc0RlYnVnRW5hYmxlZCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciNkZWJ1ZyhqYXZhLmxhbmcuU3RyaW5nKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgZGVidWcoIFN0cmluZyBjb250ZW50ICkKICAgICB7CiAgICAgICAgIGxvZ2dlci5kZWJ1ZyggY29udGVudCApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciNkZWJ1ZyhqYXZhLmxhbmcuU3RyaW5nLGphdmEubGFuZy5UaHJvd2FibGUpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBkZWJ1ZyggU3RyaW5nIGNvbnRlbnQsIFRocm93YWJsZSBlcnJvciApCiAgICAgewogICAgICAgICBsb2dnZXIuZGVidWcoIGNvbnRlbnQsIGVycm9yICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyI2RlYnVnKGphdmEubGFuZy5UaHJvd2FibGUpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBkZWJ1ZyggVGhyb3dhYmxlIGVycm9yICkKICAgICB7CiAgICAgICAgIGxvZ2dlci5kZWJ1ZyggZXJyb3IgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXIjaXNJbmZvRW5hYmxlZCgpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0luZm9FbmFibGVkKCkKICAgICB7CiAgICAgICAgIHJldHVybiBsb2dnZXIuaXNJbmZvRW5hYmxlZCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciNpbmZvKGphdmEubGFuZy5TdHJpbmcpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBpbmZvKCBTdHJpbmcgY29udGVudCApCiAgICAgewogICAgICAgICBsb2dnZXIuaW5mbyggY29udGVudCApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciNpbmZvKGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLlRocm93YWJsZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGluZm8oIFN0cmluZyBjb250ZW50LCBUaHJvd2FibGUgZXJyb3IgKQogICAgIHsKICAgICAgICAgbG9nZ2VyLmluZm8oIGNvbnRlbnQsIGVycm9yICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyI2luZm8oamF2YS5sYW5nLlRocm93YWJsZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGluZm8oIFRocm93YWJsZSBlcnJvciApCiAgICAgewogICAgICAgICBsb2dnZXIuaW5mbyggZXJyb3IgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXIjaXNXYXJuRW5hYmxlZCgpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1dhcm5FbmFibGVkKCkKICAgICB7CiAgICAgICAgIHJldHVybiBsb2dnZXIuaXNXYXJuRW5hYmxlZCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciN3YXJuKGphdmEubGFuZy5TdHJpbmcpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCB3YXJuKCBTdHJpbmcgY29udGVudCApCiAgICAgewogICAgICAgICBsb2dnZXIud2FybiggY29udGVudCApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciN3YXJuKGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLlRocm93YWJsZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIHdhcm4oIFN0cmluZyBjb250ZW50LCBUaHJvd2FibGUgZXJyb3IgKQogICAgIHsKICAgICAgICAgbG9nZ2VyLndhcm4oIGNvbnRlbnQsIGVycm9yICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyI3dhcm4oamF2YS5sYW5nLlRocm93YWJsZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIHdhcm4oIFRocm93YWJsZSBlcnJvciApCiAgICAgewogICAgICAgICBsb2dnZXIud2FybiggZXJyb3IgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXIjaXNFcnJvckVuYWJsZWQoKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNFcnJvckVuYWJsZWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGxvZ2dlci5pc0Vycm9yRW5hYmxlZCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciNlcnJvcihqYXZhLmxhbmcuU3RyaW5nKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgZXJyb3IoIFN0cmluZyBjb250ZW50ICkKICAgICB7CiAgICAgICAgIGxvZ2dlci5lcnJvciggY29udGVudCApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLlNjbUxvZ2dlciNlcnJvcihqYXZhLmxhbmcuU3RyaW5nLGphdmEubGFuZy5UaHJvd2FibGUpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBlcnJvciggU3RyaW5nIGNvbnRlbnQsIFRocm93YWJsZSBlcnJvciApCiAgICAgewogICAgICAgICBsb2dnZXIuZXJyb3IoIGNvbnRlbnQsIGVycm9yICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyI2Vycm9yKGphdmEubGFuZy5UaHJvd2FibGUpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBlcnJvciggVGhyb3dhYmxlIGVycm9yICkKICAgICB7CiAgICAgICAgIGxvZ2dlci5lcnJvciggZXJyb3IgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vRGlmZk1vam8uamF2YSBiL21hdmVuLXNjbS1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vRGlmZk1vam8uamF2YQppbmRleCBiYjFkNWY3Li4zZTUwYWEzIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0RpZmZNb2pvLmphdmEKKysrIGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9EaWZmTW9qby5qYXZhCkBAIC0zNCw3ICszNCw2IEBACiAgKiBAYXV0aG9yIDxhIGhyZWY9ImV2ZW5pc3NlQGFwYWNoZS5vcmciPkVtbWFudWVsIFZlbmlzc2U8L2E+CiAgKiBAdmVyc2lvbiAkSWQkCiAgKiBAZ29hbCBkaWZmCi0gKiBAZGVzY3JpcHRpb24gQ3JlYXRlIGEgZGlmZgogICogQGFnZ3JlZ2F0b3IKICAqLwogcHVibGljIGNsYXNzIERpZmZNb2pvCkBAIC03Niw2ICs3NSw3IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSBGaWxlIG91dHB1dEZpbGU7CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKQogICAgICAgICB0aHJvd3MgTW9qb0V4ZWN1dGlvbkV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vRWRpdE1vam8uamF2YSBiL21hdmVuLXNjbS1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vRWRpdE1vam8uamF2YQppbmRleCA1ZmVhNTRmLi5hZjQ3ZTM0IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0VkaXRNb2pvLmphdmEKKysrIGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9FZGl0TW9qby5qYXZhCkBAIC0zNyw2ICszNyw3IEBACiBwdWJsaWMgY2xhc3MgRWRpdE1vam8KICAgICBleHRlbmRzIEFic3RyYWN0U2NtTW9qbwogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpCiAgICAgICAgIHRocm93cyBNb2pvRXhlY3V0aW9uRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9FeHBvcnRNb2pvLmphdmEgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0V4cG9ydE1vam8uamF2YQppbmRleCA2YjY5OTJhLi5hOWM1Y2Q3IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0V4cG9ydE1vam8uamF2YQorKysgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0V4cG9ydE1vam8uamF2YQpAQCAtMzYsNyArMzYsNiBAQAogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86ZXZlbmlzc2VAYXBhY2hlLm9yZyI+RW1tYW51ZWwgVmVuaXNzZTwvYT4KICAqIEB2ZXJzaW9uICRJZCQKICAqIEBnb2FsIGV4cG9ydAotICogQGRlc2NyaXB0aW9uIEV4cG9ydCBhIHByb2plY3QKICAqIEByZXF1aXJlc1Byb2plY3QgZmFsc2UKICAqLwogcHVibGljIGNsYXNzIEV4cG9ydE1vam8KQEAgLTY0LDYgKzYzLDcgQEAKICAgICAgKi8KICAgICBwcml2YXRlIFN0cmluZyBleHBvcnREaXJlY3Rvcnk7CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKQogICAgICAgICB0aHJvd3MgTW9qb0V4ZWN1dGlvbkV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vTGlzdE1vam8uamF2YSBiL21hdmVuLXNjbS1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vTGlzdE1vam8uamF2YQppbmRleCA2ZjkzYmViLi5lNDcwNDQyIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0xpc3RNb2pvLmphdmEKKysrIGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9MaXN0TW9qby5qYXZhCkBAIC0xLDE2ICsxLDUgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS5tYXZlbi5zY20ucGx1Z2luOwogCi1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5wbHVnaW4uTW9qb0V4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZTsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0OwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQubGlzdC5MaXN0U2NtUmVzdWx0OwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQogLyoKICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpAQCAtMzAsMTMgKzE5LDIzIEBACiAgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5wbHVnaW4uTW9qb0V4ZWN1dGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21FeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZTsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0OworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQubGlzdC5MaXN0U2NtUmVzdWx0OworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeTsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKKwogLyoqCiAgKiBHZXQgdGhlIGxpc3Qgb2YgcHJvamVjdCBmaWxlcy4KICAqCiAgKiBAYXV0aG9yIDxhIGhyZWY9ImV2ZW5pc3NlQGFwYWNoZS5vcmciPkVtbWFudWVsIFZlbmlzc2U8L2E+CiAgKiBAdmVyc2lvbiAkSWQkCiAgKiBAZ29hbCBsaXN0Ci0gKiBAZGVzY3JpcHRpb24gTGlzdCBmaWxlcyBpbiBwcm9qZWN0CiAgKiBAYWdncmVnYXRvcgogICovCiBwdWJsaWMgY2xhc3MgTGlzdE1vam8KQEAgLTYzLDYgKzYyLDcgQEAKICAgICAgKi8KICAgICBwcml2YXRlIGJvb2xlYW4gcmVjdXJzaXZlID0gdHJ1ZTsKIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpCiAgICAgICAgIHRocm93cyBNb2pvRXhlY3V0aW9uRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9TdGF0dXNNb2pvLmphdmEgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL1N0YXR1c01vam8uamF2YQppbmRleCBkZDA4MTU1Li5lNjI5MjY3IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL1N0YXR1c01vam8uamF2YQorKysgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL1N0YXR1c01vam8uamF2YQpAQCAtMzYsMTIgKzM2LDEyIEBACiAgKiBAYXV0aG9yIDxhIGhyZWY9ImV2ZW5pc3NlQGFwYWNoZS5vcmciPkVtbWFudWVsIFZlbmlzc2U8L2E+CiAgKiBAdmVyc2lvbiAkSWQkCiAgKiBAZ29hbCBzdGF0dXMKLSAqIEBkZXNjcmlwdGlvbiBQcm9qZWN0IHN0YXR1cwogICogQGFnZ3JlZ2F0b3IKICAqLwogcHVibGljIGNsYXNzIFN0YXR1c01vam8KICAgICBleHRlbmRzIEFic3RyYWN0U2NtTW9qbwogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpCiAgICAgICAgIHRocm93cyBNb2pvRXhlY3V0aW9uRXhjZXB0aW9uCiAgICAgewpAQCAtNzEsOCArNzEsOSBAQAogICAgICAgICAgICAgICAgIFNjbUZpbGUgZmlsZSA9IChTY21GaWxlKSBpdGVyLm5leHQoKTsKIAogICAgICAgICAgICAgICAgIC8vIHJpZ2h0IGFsaWduIGFsbCBvZiB0aGUgc3RhdHVzZXMKLSAgICAgICAgICAgICAgICBnZXRMb2coKS5pbmZvKCBTdHJpbmdVdGlscy5sZWZ0UGFkKCBmaWxlLmdldFN0YXR1cygpLnRvU3RyaW5nKCksIG1heExlbiApICsgIiBzdGF0dXMgZm9yICIgKwotICAgICAgICAgICAgICAgICAgICBnZXRSZWxhdGl2ZVBhdGgoIGJhc2VEaXIsIGZpbGUuZ2V0UGF0aCgpICkgKTsKKyAgICAgICAgICAgICAgICBnZXRMb2coKS5pbmZvKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1V0aWxzLmxlZnRQYWQoIGZpbGUuZ2V0U3RhdHVzKCkudG9TdHJpbmcoKSwgbWF4TGVuICkgKyAiIHN0YXR1cyBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGdldFJlbGF0aXZlUGF0aCggYmFzZURpciwgZmlsZS5nZXRQYXRoKCkgKSApOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGNhdGNoICggSU9FeGNlcHRpb24gZSApCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL1RhZ01vam8uamF2YSBiL21hdmVuLXNjbS1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vVGFnTW9qby5qYXZhCmluZGV4IDA5OWEwZTYuLmM2NzQ2YWEgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vVGFnTW9qby5qYXZhCisrKyBiL21hdmVuLXNjbS1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vVGFnTW9qby5qYXZhCkBAIC0zNywxNSArMzcsMTUgQEAKICAqIEB2ZXJzaW9uICRJZCQKICAqIEBnb2FsIHRhZwogICogQGFnZ3JlZ2F0b3IKLSAqIEBkZXNjcmlwdGlvbiBUYWcgdGhlIHByb2plY3QKICAqLwogcHVibGljIGNsYXNzIFRhZ01vam8KICAgICBleHRlbmRzIEFic3RyYWN0U2NtTW9qbwogewogICAgIC8qKgotICAgICAqIFRhZyBuYW1lLgorICAgICAqIFRoZSB0YWcgbmFtZS4KICAgICAgKgogICAgICAqIEBwYXJhbWV0ZXIgZXhwcmVzc2lvbj0iJHt0YWd9IgorICAgICAqIEByZXF1aXJlZAogICAgICAqLwogICAgIHByaXZhdGUgU3RyaW5nIHRhZzsKIApAQCAtODQsNiArODQsNyBAQAogICAgICAqLwogICAgIHByaXZhdGUgU3RyaW5nIHRpbWVzdGFtcFByZWZpeDsKIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpCiAgICAgICAgIHRocm93cyBNb2pvRXhlY3V0aW9uRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9VbkVkaXRNb2pvLmphdmEgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL1VuRWRpdE1vam8uamF2YQppbmRleCA0ZTQ3OGE4Li5kYTM4NDI1IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL1VuRWRpdE1vam8uamF2YQorKysgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL1VuRWRpdE1vam8uamF2YQpAQCAtMzcsNiArMzcsNyBAQAogcHVibGljIGNsYXNzIFVuRWRpdE1vam8KICAgICBleHRlbmRzIEFic3RyYWN0U2NtTW9qbwogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpCiAgICAgICAgIHRocm93cyBNb2pvRXhlY3V0aW9uRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9VcGRhdGVNb2pvLmphdmEgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL1VwZGF0ZU1vam8uamF2YQppbmRleCBlNjlmMzNlLi4xNjU5NmE5IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL1VwZGF0ZU1vam8uamF2YQorKysgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL1VwZGF0ZU1vam8uamF2YQpAQCAtMzUsNyArMzUsNiBAQAogICogQHZlcnNpb24gJElkJAogICogQGdvYWwgdXBkYXRlCiAgKiBAYWdncmVnYXRvcgotICogQGRlc2NyaXB0aW9uIFVwZGF0ZSB0aGUgcHJvamVjdAogICovCiBwdWJsaWMgY2xhc3MgVXBkYXRlTW9qbwogICAgIGV4dGVuZHMgQWJzdHJhY3RTY21Nb2pvCkBAIC03Nyw2ICs3Niw3IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSBib29sZWFuIHJ1bkNoYW5nZWxvZyA9IGZhbHNlOwogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBleGVjdXRlKCkKICAgICAgICAgdGhyb3dzIE1vam9FeGVjdXRpb25FeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL1VwZGF0ZVN1YnByb2plY3RzTW9qby5qYXZhIGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9VcGRhdGVTdWJwcm9qZWN0c01vam8uamF2YQppbmRleCAwM2I0ZDZhLi5mMTg0NGUwIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL1VwZGF0ZVN1YnByb2plY3RzTW9qby5qYXZhCisrKyBiL21hdmVuLXNjbS1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vVXBkYXRlU3VicHJvamVjdHNNb2pvLmphdmEKQEAgLTEsMTQgKzEsNSBAQAogcGFja2FnZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wbHVnaW47CiAKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbi5Nb2pvRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4ucHJvamVjdC5NYXZlblByb2plY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQudXBkYXRlLlVwZGF0ZVNjbVJlc3VsdDsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLnVwZGF0ZS5VcGRhdGVTY21SZXN1bHRXaXRoUmV2aXNpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQogLyoKICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpAQCAtMjgsOSArMTksMjEgQEAKICAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbi5Nb2pvRXhlY3V0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4ucHJvamVjdC5NYXZlblByb2plY3Q7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQudXBkYXRlLlVwZGF0ZVNjbVJlc3VsdDsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLnVwZGF0ZS5VcGRhdGVTY21SZXN1bHRXaXRoUmV2aXNpb247CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5TY21SZXBvc2l0b3J5OworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKwogLyoqCisgKiBVcGRhdGVzIGFsbCBwcm9qZWN0cyBpbiBhIG11bHRpIHByb2plY3QgYnVpbGQuIFRoaXMgaXMgdXNlZnVsIGZvciB1c2VycyB3aG8gaGF2ZSBhZG9wdGVkIHRoZSBmbGF0IHByb2plY3Qgc3RydWN0dXJlCisgKiB3aGVyZSB0aGUgYWdncmVnYXRvciBwcm9qZWN0IGlzIGEgc2libGluZyBvZiB0aGUgc3ViIHByb2plY3RzIHJhdGhlciB0aGFuIHNpdHRpbmcgaW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCisgKgogICogQGdvYWwgdXBkYXRlLXN1YnByb2plY3RzCi0gKiBAZGVzY3JpcHRpb24gVXBkYXRlcyBhbGwgcHJvamVjdHMgaW4gYSBtdWx0aSBwcm9qZWN0IGJ1aWxkLiBUaGlzIGlzIHVzZWZ1bCBmb3IgdXNlcnMgd2hvIGhhdmUgYWRvcHRlZCB0aGUgZmxhdCBwcm9qZWN0IHN0cnVjdHVyZSB3aGVyZSB0aGUgYWdncmVnYXRvciBwcm9qZWN0IGlzIGEgc2libGluZyBvZiB0aGUgc3ViIHByb2plY3RzIHJhdGhlciB0aGFuIHNpdHRpbmcgaW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBVcGRhdGVTdWJwcm9qZWN0c01vam8KICAgICBleHRlbmRzIEFic3RyYWN0U2NtTW9qbwpAQCAtNjUsNiArNjgsNyBAQAogICAgICAqLwogICAgIHByaXZhdGUgTWF2ZW5Qcm9qZWN0IHByb2plY3Q7CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKQogICAgICAgICB0aHJvd3MgTW9qb0V4ZWN1dGlvbkV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vVmFsaWRhdGVNb2pvLmphdmEgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL1ZhbGlkYXRlTW9qby5qYXZhCmluZGV4IDY1ZDdlZWMuLjQzMGNiZjkgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vVmFsaWRhdGVNb2pvLmphdmEKKysrIGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9WYWxpZGF0ZU1vam8uamF2YQpAQCAtNTAsNiArNTAsNyBAQAogICAgICAqLwogICAgIHByaXZhdGUgU3RyaW5nIHNjbURldmVsb3BlckNvbm5lY3Rpb247CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKQogICAgICAgICB0aHJvd3MgTW9qb0V4ZWN1dGlvbkV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wbHVnaW4vc3JjL3NpdGUvYXB0L2V4YW1wbGVzL2Jvb3RzdHJhcHBpbmctd2l0aC1wb20uYXB0IGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvc2l0ZS9hcHQvZXhhbXBsZXMvYm9vdHN0cmFwcGluZy13aXRoLXBvbS5hcHQKaW5kZXggM2Q0NWJiOS4uZTAyYWVhMSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvc2l0ZS9hcHQvZXhhbXBsZXMvYm9vdHN0cmFwcGluZy13aXRoLXBvbS5hcHQKKysrIGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvc2l0ZS9hcHQvZXhhbXBsZXMvYm9vdHN0cmFwcGluZy13aXRoLXBvbS5hcHQKQEAgLTMsMjAgKzMsNDAgQEAKICAtLS0tLS0KICBQZXRlIE1hcnZpbiBLaW5nCiAgLS0tLS0tCi0gMjAgSnVseSAyMDA2CisgMjAwOC0wOC0xMwogIC0tLS0tLQotIAorCit+fiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCit+fiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK35+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCit+fiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit+fiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCit+fiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit+fiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cit+fgorfn4gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKK35+Cit+fiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCit+fiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorfn4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCit+fiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK35+IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK35+IHVuZGVyIHRoZSBMaWNlbnNlLgorCit+fiBOT1RFOiBGb3IgaGVscCB3aXRoIHRoZSBzeW50YXggb2YgdGhpcyBmaWxlLCBzZWU6Cit+fiBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9kb3hpYS9yZWZlcmVuY2VzL2FwdC1mb3JtYXQuaHRtbAorCiBCb290c3RyYXBwaW5nIGEgUHJvamVjdCBVc2luZyBhIFBPTQogCiAgVXNpbmcgdGhlIDw8PHNjbTpib290c3RyYXA+Pj4gYSBwcm9qZWN0IGNhbiBiZSBidWlsZCBmcm9tIGEgZnJlc2ggY29weSBvZiB0aGUgc291cmNlIGluIHRoZSBzY20gcmVwb3NpdG9yeS4KICBUaGlzIGlzIGEgY29udmVuaWVudCB3YXkgdG8gZGlzdHJpYnV0ZSBhIHByb2plY3QgYmVjYXVzZSB0aGUgYm9vdHN0cmFwIHBvbSBjYW4gYmUgZ2l2ZW4gdG8gYSBkZXZlbG9wZXIgdG8gZ2VuZXJhdGUKLSB0aGUgbWF2ZW4gYnVpbGQgZW52aXJvbm1lbnQgZm9yIHRoZSBwcm9qZWN0LiAKLSAKLSBUaGUgPDw8cG9tLnhtbD4+PiBzaG91bGQgY29udGFpbiBhIHNjbSBjb25maWd1cmF0aW9uIGZvciB0aGUgYm9vdHN0cmFwIHRvIHdvcmsuIAotIAorIHRoZSBtYXZlbiBidWlsZCBlbnZpcm9ubWVudCBmb3IgdGhlIHByb2plY3QuCisKKyBUaGUgPDw8cG9tLnhtbD4+PiBzaG91bGQgY29udGFpbiBhIHNjbSBjb25maWd1cmF0aW9uIGZvciB0aGUgYm9vdHN0cmFwIHRvIHdvcmsuCisKICstLS0tLS0tLS0tLSsKIDxwcm9qZWN0PgotICBbLi4uXQorICAuLi4KICAgPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4KICAgPHZlcnNpb24+MS4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8bmFtZT5TQ00gU2FtcGxlIFByb2plY3Q8L25hbWU+CkBAIC0yNiw5ICs0Niw5IEBACiAgICAgPGRldmVsb3BlckNvbm5lY3Rpb24+c2NtOnN2bjpodHRwczovL3NvbWVyZXBvc2l0b3J5LmNvbS9zdm5fcmVwby90cnVuazwvZGV2ZWxvcGVyQ29ubmVjdGlvbj4KICAgICA8dXJsPmh0dHA6Ly9zb21lcmVwb3NpdG9yeS5jb20vdmlldy5jdnM8L3VybD4KICAgPHNjbT4KLSAgWy4uLl0KKyAgLi4uCiAgIDxidWlsZD4KLSAgICBbLi4uXQorICAgIC4uLgogICAgIDxwbHVnaW5zPgogICAgICAgPHBsdWdpbj4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgpAQCAtMzksMzIgKzU5LDMzIEBACiAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgIDwvcGx1Z2luPgogICAgIDwvcGx1Z2lucz4KLSAgICBbLi4uXQorICAgIC4uLgogICA8L2J1aWxkPgotICBbLi4uXQorICAuLi4KIDwvcHJvamVjdD4KLSstLS0tLS0tLS0tLSsgIAorKy0tLS0tLS0tLS0tKwogCi0gQXNzdW1pbmcgdGhlIHNjbSBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGNvbmZpZ3VyZWQgaW4gdGhlIDw8PHBvbS54bWw+Pj4sIGJvb3RzdHJhcHBpbmcgY2FuIGJlIGludm9rZWQgYnkgCi0gCisgQXNzdW1pbmcgdGhlIHNjbSBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGNvbmZpZ3VyZWQgaW4gdGhlIDw8PHBvbS54bWw+Pj4sIGJvb3RzdHJhcHBpbmcgY2FuIGJlIGludm9rZWQgYnkKKwogKy0tLS0tLS0tLSsKICAgIG12biBzY206Ym9vdHN0cmFwCi0rLS0tLS0tLS0tKyAKKystLS0tLS0tLS0rCiAKLSBCeSBkZWZhdWx0IHRoZSBzY20gcGx1Z2luIHdpbGwgZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIHRoZSB0cnVuayBhbmQgZ2VuZXJhdGUgaXQgdW5kZXIgPDw8dGFyZ2V0L2NoZWNrb3V0Pj4+IGFuZCBleGVjdXRlIAotIHRoZSBjb25maWd1cmVkIGdvYWxzIGluIGl0LiAKLSAgCisgQnkgZGVmYXVsdCB0aGUgc2NtIHBsdWdpbiB3aWxsIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbSB0aGUgdHJ1bmsgYW5kIGdlbmVyYXRlIGl0IHVuZGVyIDw8PHRhcmdldC9jaGVja291dD4+PiBhbmQgZXhlY3V0ZQorIHRoZSBjb25maWd1cmVkIGdvYWxzIGluIGl0LgorCiBDb25maWd1cmluZyBBdXRoZW50aWNhdGlvbgogCiAgTW9zdCBwdWJsaWMgcmVwb3NpdG9yaWVzIHJlcXVpcmVzIGRldmVsb3BlcnMgdG8gYXV0aGVudGljYXRlIGZpcnN0IGJlZm9yZSB0aGV5IGNhbiBwdWxsIHRoZSBzb3VyY2UgZnJvbSB0aGUgcmVwb3NpdG9yeS4KICBGb3IgcmVwb3NpdG9yeSByZXF1aXJpbmcgYXV0aGVudGljYXRpb24sIHRoZSBzY20gcGx1Z2luIG5lZWRzIHRvIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIDw8PHBvbS54bWw+Pj4KLSAKLSAqIHNwZWNpZnlpbmcgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBmb3Igc3ZuIGFuZCBzdGFydGVhbSAKLSAKLSstLS0tLS0tLS0tLSsgICAKLSAgWy4uLl0KKworICogc3BlY2lmeWluZyB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZvciBzdm4gYW5kIHN0YXJ0ZWFtCisKKystLS0tLS0tLS0tLSsKKzxwcm9qZWN0PgorICAuLi4KICAgPGJ1aWxkPgotICAgIFsuLi5dCisgICAgLi4uCiAgICAgPHBsdWdpbnM+CiAgICAgICA8cGx1Z2luPgogICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CkBAIC03Niw3ICs5Nyw4IEBACiAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgIDwvcGx1Z2luPgogICAgIDwvcGx1Z2lucz4KLSAgICBbLi4uXQorICAgIC4uLgogICA8L2J1aWxkPgotICBbLi4uXQotKy0tLS0tLS0tLS0tKyAgCisgIC4uLgorPC9wcm9qZWN0PgorKy0tLS0tLS0tLS0tKwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvc2l0ZS9hcHQvZXhhbXBsZXMvc2NtLWFkdmFuY2UtZmVhdHVyZXMuYXB0IGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvc2l0ZS9hcHQvZXhhbXBsZXMvc2NtLWFkdmFuY2UtZmVhdHVyZXMuYXB0CmluZGV4IDVhOTIxNjAuLjdlYTljNWEgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wbHVnaW4vc3JjL3NpdGUvYXB0L2V4YW1wbGVzL3NjbS1hZHZhbmNlLWZlYXR1cmVzLmFwdAorKysgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9zaXRlL2FwdC9leGFtcGxlcy9zY20tYWR2YW5jZS1mZWF0dXJlcy5hcHQKQEAgLTMsMTUgKzMsMzYgQEAKICAtLS0tLS0KICBQZXRlIE1hcnZpbiBLaW5nCiAgLS0tLS0tCi0gMjAgSnVseSAyMDA2Ci0gLS0tLS0tIAotIAorIDIwMDgtMDgtMTMKKyAtLS0tLS0KKworfn4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorfn4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCit+fiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorfn4gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorfn4gdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorfn4gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorfn4gd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorfn4KK35+ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCit+fgorfn4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorfn4gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KK35+ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorfn4gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCit+fiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit+fiB1bmRlciB0aGUgTGljZW5zZS4KKworfn4gTk9URTogRm9yIGhlbHAgd2l0aCB0aGUgc3ludGF4IG9mIHRoaXMgZmlsZSwgc2VlOgorfn4gaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvZG94aWEvcmVmZXJlbmNlcy9hcHQtZm9ybWF0Lmh0bWwKKwogT3RoZXIgU0NNIENvbW1hbmRzCiAKICBUaGUgc2NtIHBsdWdpbiByZXF1aXJlcyB0aGUgc2NtIHRvIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIDw8PHBvbS54bWw+Pj4uCi0gCisKICstLS0tLS0tLS0rCi0gIFsuLi5dCis8cHJvamVjdD4KKyAgLi4uCiAgIDxwYWNrYWdpbmc+amFyPC9wYWNrYWdpbmc+CiAgIDx2ZXJzaW9uPjEuMC1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPG5hbWU+U0NNIFNhbXBsZSBQcm9qZWN0PC9uYW1lPgpAQCAtMjEsMTYgKzQyLDE4IEBACiAgICAgPGRldmVsb3BlckNvbm5lY3Rpb24+c2NtOnN2bjpodHRwczovL3NvbWVyZXBvc2l0b3J5LmNvbS9zdm5fcmVwby90cnVuazwvZGV2ZWxvcGVyQ29ubmVjdGlvbj4KICAgICA8dXJsPmh0dHA6Ly9zb21lcmVwb3NpdG9yeS5jb20vdmlldy5jdnM8L3VybD4KICAgPC9zY20+Ci0gIFsuLi5dCisgIC4uLgorPC9wcm9qZWN0PgogKy0tLS0tLS0tLSsKIAogIElmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBzY20gcHJvdmlkZXIgaW1wbGVtZW50YXRpb24sIGZvciBleGVtcGxlIHlvdSB3YW50IHRvIHVzZSB0aGUgbmF0aXZlIGN2cwogIGluc3RlYWQgb2YgdGhlIHB1cmUgamF2YSBpbXBsZW1lbnRhdGlvbiwgeW91IG11c3QgY29uZmlndXJlIHlvdXIgcGx1Z2luIGxpa2UgdGhhdDoKIAogKy0tLS0tLS0tLS0tKwotICBbLi4uXQorPHByb2plY3Q+CisgIC4uLgogICA8YnVpbGQ+Ci0gICAgWy4uLl0KKyAgICAuLi4KICAgICA8cGx1Z2lucz4KICAgICAgIDxwbHVnaW4+CiAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KQEAgLTQxLDIzICs2NCwyNSBAQAogICAgICAgICAgIDwvcHJvdmlkZXJJbXBsZW1lbnRhdGlvbnM+CiAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgIDwvcGx1Z2luPgotICAgICAgWy4uLl0KKyAgICAgIC4uLgogICAgIDwvcGx1Z2lucwotICAgIFsuLi5dCisgICAgLi4uCiAgIDwvYnVpbGQ+Ci0gIFsuLi5dCi0rLS0tLS0tLS0tLS0rICAKKyAgLi4uCis8L3Byb2plY3Q+CisrLS0tLS0tLS0tLS0rCiAKICBPbmNlIHRoZSBzY20gaGFzIGJlZW4gY29uZmlndXJlZCwgc2NtIG9wZXJhdGlvbnMgY2FuIGJlIHBlcmZvcm1lZC4KLSAgCisKICogY2hhbmdlbG9nIC0gZGlzcGxheXMgdGhlIHByb2plY3QgY29tbWl0IGNoYW5nZXMgZm9yIGVhY2ggcmV2aXNpb25zCiAKICAgICA8PDxwb20ueG1sPj4+IGNvbmZpZ3VyYXRpb24gOgotICAgIAorCiArLS0tLS0tLS0tLS0rCi0gIFsuLi5dCis8cHJvamVjdD4KKyAgLi4uCiAgIDxidWlsZD4KLSAgICBbLi4uXQorICAgIC4uLgogICAgIDxwbHVnaW5zPgogICAgICAgPHBsdWdpbj4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgpAQCAtNjgsMzQgKzkzLDM2IEBACiAgICAgICAgICAgPGVuZERhdGU+WVlZWS1NTS1ERDwvZW5kRGF0ZT4KICAgICAgICAgPC9jb25maWd1cmF0aW9uPgogICAgICAgPC9wbHVnaW4+Ci0gICAgICBbLi4uXQorICAgICAgLi4uCiAgICAgPC9wbHVnaW5zCi0gICAgWy4uLl0KKyAgICAuLi4KICAgPC9idWlsZD4KLSAgWy4uLl0KLSstLS0tLS0tLS0tLSsgIAotICAgIAorICAuLi4KKzwvcHJvamVjdD4KKystLS0tLS0tLS0tLSsKKwogICAgIENvbW1hbmQgOgotICAgICAgCisKICstLS0tLS0tLS0rCiAgIG12biBzY206Y2hhbmdlbG9nCi0rLS0tLS0tLS0tKyAgCi0gICAgCisrLS0tLS0tLS0tKworCiAgICAgb3IgeW91IGNhbiBzcGVjaWZ5IHRoZSBzdGFydERhdGUgYW5kIGVuZERhdGUgb24gdGhlIGNvbW1hbmRsaW5lCi0gICAgCisKICstLS0tLS0tLS0rCiAgIG12biAtRHN0YXJ0RGF0ZT1ZWVlZLU1NLUREIC1EZW5kRGF0ZT1ZWVlZLU1NLUREIHNjbTpjaGFuZ2Vsb2cKLSstLS0tLS0tLS0rICAKLSAgICAgIAotICAKKystLS0tLS0tLS0rCisKKwogKiBkaWZmCiAKICAgICA8PDxwb20ueG1sPj4+IGNvbmZpZ3VyYXRpb24gOgotICAgIAorCiArLS0tLS0tLS0tLS0rCi0gIFsuLi5dCis8cHJvamVjdD4KKyAgLi4uCiAgIDxidWlsZD4KLSAgICBbLi4uXQorICAgIC4uLgogICAgIDxwbHVnaW5zPgogICAgICAgPHBsdWdpbj4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgpAQCAtMTAzLDUyICsxMzAsNTQgQEAKICAgICAgICAgPHZlcnNpb24+MS4wPC92ZXJzaW9uPgogICAgICAgICA8Y29uZmlndXJhdGlvbj4KICAgICAgICAgICA8c3RhcnRSZXZpc2lvbj5jb25uZWN0aW9uPC9zdGFydFJldmlzaW9uPgotICAgICAgICAgIDxlbmRSZXZpc2lvbj5jb25uZWN0aW9uPC9lbmRSZXZpc2lvbj4gICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgPGVuZFJldmlzaW9uPmNvbm5lY3Rpb248L2VuZFJldmlzaW9uPgogICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICA8L3BsdWdpbj4KLSAgICAgIFsuLi5dCisgICAgICAuLi4KICAgICA8L3BsdWdpbnMKLSAgICBbLi4uXQorICAgIC4uLgogICA8L2J1aWxkPgotICBbLi4uXQotKy0tLS0tLS0tLS0tKyAgCisgIC4uLgorPC9wcm9qZWN0PgorKy0tLS0tLS0tLS0tKwogCiAgICAgQ29tbWFuZCA6Ci0gICAgICAgIAorCiArLS0tLS0tLS0tKwogICAgbXZuIHNjbTpkaWZmCi0rLS0tLS0tLS0tKyAgCi0gICAgCisrLS0tLS0tLS0tKworCiAgICAgb3IgeW91IGNhbiBzcGVjaWZ5IHRoZSBzdGFydFJldmlzaW9uIGFuZCBlbmRSZXZpc2lvbiBpbiB0aGUgY29tbWFuZCBsaW5lCi0gICAgCisKICstLS0tLS0tLS0rCiAgICBtdm4gLURzdGFydFJldmlzaW9uPTxyZXZpc2lvbj4gLURlbmRSZXZpc2lvbj08cmV2aXNpb24+IHNjbTpkaWZmCi0rLS0tLS0tLS0tKyAgCi0gICAgICAgIAorKy0tLS0tLS0tLSsKKwogKiBlZGl0IC0gc2V0IHRoZSBlZGl0IHN0YXR1cyBvZiB0aGUgZmlsZSwgbG9ja2luZyB0aGUgcHJvamVjdCBzb3VyY2VzIGlmIHN1cHBvcnRlZC4KIAogICAgIENvbW1hbmQgOgotICAgICAgICAKKwogKy0tLS0tLS0tLSsKICAgbXZuIHNjbTplZGl0Ci0rLS0tLS0tLS0tKyAgCi0gICAgCisrLS0tLS0tLS0tKworCiAqIHN0YXR1cyAtIGRpc3BsYXlzIHRoZSBtb2RpZmllZCBmaWxlcyBpbiB0aGUgcHJvamVjdC4KIAogICAgIENvbW1hbmQgOgotICAgICAgICAKKwogKy0tLS0tLS0tLSsKICAgIG12biBzY206c3RhdHVzCi0rLS0tLS0tLS0tKyAgCi0gICAgCisrLS0tLS0tLS0tKworCiAqIHRhZwogCiAgICAgPDw8cG9tLnhtbD4+PiBjb25maWd1cmF0aW9uIDoKLSAgICAKKwogKy0tLS0tLS0tLS0tKwotICBbLi4uXQorPHByb2plY3Q+CisgIC4uLgogICA8YnVpbGQ+Ci0gICAgWy4uLl0KKyAgICAuLi4KICAgICA8cGx1Z2lucz4KICAgICAgIDxwbHVnaW4+CiAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KQEAgLTE1OCw0NCArMTg3LDQ1IEBACiAgICAgICAgICAgPHRhZz50YWcgbmFtZTwvdGFnPgogICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICA8L3BsdWdpbj4KLSAgICAgIFsuLi5dCisgICAgICAuLi4KICAgICA8L3BsdWdpbnMKLSAgICBbLi4uXQorICAgIC4uLgogICA8L2J1aWxkPgotICBbLi4uXQotKy0tLS0tLS0tLS0tKyAgCisgIC4uLgorPC9wcm9qZWN0PgorKy0tLS0tLS0tLS0tKwogCiAgICAgQ29tbWFuZCA6Ci0gICAgICAgIAorCiArLS0tLS0tLS0tKwogICAgbXZuIHNjbTp0YWcKLSstLS0tLS0tLS0rICAgIAorKy0tLS0tLS0tLSsKIAogICAgICBvciB5b3UgY2FuIHNwZWNpZnkgdGhlIHRhZyBuYW1lIGluIHRoZSBjb21tYW5kIGxpbmUKLSAgICAgCisKICstLS0tLS0tLS0rCiAgICBtdm4gLUR0YWc9Ijx0YWcgbmFtZT4iIHNjbTp0YWcKLSstLS0tLS0tLS0rICAgIAotICAgICAgIAorKy0tLS0tLS0tLSsKKwogKiB1bmVkaXQgLSB1bnNldCB0aGUgZWRpdCBzdGF0dXMgb2YgdGhlIHByb2plY3Qgc291cmNlcyBhbmQgdW5sb2NraW5nIGl0IGlmIHN1cHBvcnRlZC4KIAogICAgIENvbW1hbmQgOgotICAgICAgICAKKwogKy0tLS0tLS0tLSsKICAgIG12biBzY206dW5lZGl0Ci0rLS0tLS0tLS0tKyAgICAKLSAgIAorKy0tLS0tLS0tLSsKKwogKiB2YWxpZGF0ZSAtIGNoZWNrIGlmIHRoZSBzY20gdXJscyBjb25maWd1cmVkIGluIHRoZSA8PDxwb20ueG1sPj4+IGlzIHZhbGlkLgogCiAgICAgQ29tbWFuZCA6Ci0gICAgICAgCisKICstLS0tLS0tLS0rCiAgICBtdm4gc2NtOnZhbGlkYXRlCi0rLS0tLS0tLS0tKyAgCi0gIAorKy0tLS0tLS0tLSsKKwogICAgIG9yIHBhc3NpbmcgdGhlIHNjbUNvbm5lY3Rpb24gb3IvYW5kIHRoZSBkZXZlbG9wZXJDb25uZWN0aW9uIGluIHRoZSBjb21tYW5kIGxpbmUKLSAgICAKKwogKy0tLS0tLS0tLSsKICAgIG12biAtRHNjbUNvbm5lY3Rpb249IjxzY20gdXJsPiIgLURzY21EZXZlbG9wZXJDb25uZWN0aW9uPSI8c2NtIHVybD4iIHNjbTp2YWxpZGF0ZQotKy0tLS0tLS0tLSsgIAotICAgIAorKy0tLS0tLS0tLSsKKwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvc2l0ZS9hcHQvaW5kZXguYXB0IGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvc2l0ZS9hcHQvaW5kZXguYXB0CmluZGV4IDg5NjJiYmIuLmUyMWFlZTIgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wbHVnaW4vc3JjL3NpdGUvYXB0L2luZGV4LmFwdAorKysgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy9zaXRlL2FwdC9pbmRleC5hcHQKQEAgLTMsNDkgKzMsODMgQEAKICAtLS0tLS0KICBQZXRlIE1hcnZpbiBLaW5nCiAgLS0tLS0tCi0gMTggSnVseSAyMDA2CisgMjAwOC0wOC0xMwogIC0tLS0tLQotIAorCit+fiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCit+fiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK35+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCit+fiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit+fiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCit+fiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit+fiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cit+fgorfn4gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKK35+Cit+fiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCit+fiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorfn4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCit+fiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK35+IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK35+IHVuZGVyIHRoZSBMaWNlbnNlLgorCit+fiBOT1RFOiBGb3IgaGVscCB3aXRoIHRoZSBzeW50YXggb2YgdGhpcyBmaWxlLCBzZWU6Cit+fiBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9kb3hpYS9yZWZlcmVuY2VzL2FwdC1mb3JtYXQuaHRtbAorCiBNYXZlbiBTQ00gUGx1Z2luCiAKICBUaGUgU0NNIFBsdWdpbiBvZmZlcnMgdmVuZG9yIGluZGVwZW5kZW50IGFjY2VzcyB0byBjb21tb24gc2NtIGNvbW1hbmRzIGJ5IG9mZmVyaW5nIGEgc2V0CiAgb2YgY29tbWFuZCBtYXBwaW5ncyBmb3IgdGhlIGNvbmZpZ3VyZWQgc2NtLiBFYWNoIGNvbW1hbmQgaXMgaW1wbGVtZW50ZWQgYXMgYSBnb2FsLgotIAorCiAqIEdvYWxzIE92ZXJ2aWV3CiAKLSAqIHt7e2FkZC1tb2pvLmh0bWx9c2NtOmFkZH19IC0gY29tbWFuZCB0byBhZGQgZmlsZSAKLSAKLSAqIHt7e2Jvb3RzdHJhcC1tb2pvLmh0bWx9c2NtOmJvb3RzdHJhcH19IC0gY29tbWFuZCB0byBjaGVja291dCBhbmQgYnVpbGQgYSBwcm9qZWN0IAorVGhlIFNDTSBQbHVnaW4gaGFzIDE2IGdvYWxzOgorCisgKiB7e3ticmFuY2gtbW9qby5odG1sfXNjbTpicmFuY2h9fSAtIGJyYW5jaCB0aGUgcHJvamVjdAorCisgKiB7e3t2YWxpZGF0ZS1tb2pvLmh0bWx9c2NtOnZhbGlkYXRlfX0gLSB2YWxpZGF0ZSB0aGUgc2NtIGluZm9ybWF0aW9uIGluIHRoZSBwb20KKworICoge3t7YWRkLW1vam8uaHRtbH1zY206YWRkfX0gLSBjb21tYW5kIHRvIGFkZCBmaWxlCisKKyAqIHt7e3VuZWRpdC1tb2pvLmh0bWx9c2NtOnVuZWRpdH19IC0gY29tbWFuZCB0byBzdG9wIGVkaXRpbmcgdGhlIHdvcmtpbmcgY29weQorCisgKiB7e3tleHBvcnQtbW9qby5odG1sfXNjbTpleHBvcnR9fSAtIGNvbW1hbmQgdG8gZ2V0IGEgZnJlc2ggZXhwb3J0ZWQgY29weQorCisgKiB7e3tib290c3RyYXAtbW9qby5odG1sfXNjbTpib290c3RyYXB9fSAtIGNvbW1hbmQgdG8gY2hlY2tvdXQgYW5kIGJ1aWxkIGEgcHJvamVjdAogCiAgKiB7e3tjaGFuZ2Vsb2ctbW9qby5odG1sfXNjbTpjaGFuZ2Vsb2d9fSAtIGNvbW1hbmQgdG8gc2hvdyB0aGUgc291cmNlIGNvZGUgcmV2aXNpb25zCi0gCisKKyAqIHt7e2xpc3QtbW9qby5odG1sfXNjbTpsaXN0fX0gLSBjb21tYW5kIGZvciBnZXQgdGhlIGxpc3Qgb2YgcHJvamVjdCBmaWxlcworCiAgKiB7e3tjaGVja2luLW1vam8uaHRtbH1zY206Y2hlY2tpbn19IC0gY29tbWFuZCBmb3IgY29tbWl0aW5nIGNoYW5nZXMKLSAKKwogICoge3t7Y2hlY2tvdXQtbW9qby5odG1sfXNjbTpjaGVja291dH19IC0gY29tbWFuZCBmb3IgZ2V0dGluZyB0aGUgc291cmNlIGNvZGUKLSAKLSAqIHt7e2RpZmYtbW9qby5odG1sfXNjbTpkaWZmfX0gLSBjb21tYW5kIGZvciBzaG93aW5nIHRoZSBkaWZmZXJlbmNlIG9mIHRoZSB3b3JraW5nIGNvcHkgd2l0aCB0aGUgcmVtb3RlIG9uZQotIAotICoge3t7ZWRpdC1tb2pvLmh0bWx9c2NtOmVkaXR9fSAtIGNvbW1hbmQgZm9yIHN0YXJ0aW5nIGVkaXQgb24gdGhlIHdvcmtpbmcgY29weQotIAorCiAgKiB7e3tzdGF0dXMtbW9qby5odG1sfXNjbTpzdGF0dXN9fSAtIGNvbW1hbmQgZm9yIHNob3dpbmcgdGhlIHNjbSBzdGF0dXMgb2YgdGhlIHdvcmtpbmcgY29weQotIAotICoge3t7dGFnLW1vam8uaHRtbH1zY206dGFnfX0gLSBjb21tYW5kIGZvciB0YWdnaW5nIGEgY2VydGFpbiByZXZpc2lvbgotIAotICoge3t7dW5lZGl0LW1vam8uaHRtbH1zY206dW5lZGl0fX0gLSBjb21tYW5kIHRvIHN0b3AgZWRpdGluZyB0aGUgd29ya2luZyBjb3B5Ci0gCisKICAqIHt7e3VwZGF0ZS1tb2pvLmh0bWx9c2NtOnVwZGF0ZX19IC0gY29tbWFuZCBmb3IgdXBkYXRpbmcgdGhlIHdvcmtpbmcgY29weSB3aXRoIHRoZSBsYXRlc3QgY2hhbmdlcwotIAotICoge3t7dmFsaWRhdGUtbW9qby5odG1sfXNjbTp2YWxpZGF0ZX19IC0gdmFsaWRhdGVzIHRoZSBzY20gaW5mb3JtYXRpb24gaW4gdGhlIHBvbQotIAorCisgKiB7e3tkaWZmLW1vam8uaHRtbH1zY206ZGlmZn19IC0gY29tbWFuZCBmb3Igc2hvd2luZyB0aGUgZGlmZmVyZW5jZSBvZiB0aGUgd29ya2luZyBjb3B5IHdpdGggdGhlIHJlbW90ZSBvbmUKKworICoge3t7dXBkYXRlLXN1YnByb2plY3RzLW1vam8uaHRtbH1zY206dXBkYXRlLXN1YnByb2plY3RzfX0gLSBjb21tYW5kIGZvciB1cGRhdGluZyBhbGwgcHJvamVjdHMgaW4gYSBtdWx0aSBwcm9qZWN0IGJ1aWxkCisKKyAqIHt7e2VkaXQtbW9qby5odG1sfXNjbTplZGl0fX0gLSBjb21tYW5kIGZvciBzdGFydGluZyBlZGl0IG9uIHRoZSB3b3JraW5nIGNvcHkKKworICoge3t7dGFnLW1vam8uaHRtbH1zY206dGFnfX0gLSBjb21tYW5kIGZvciB0YWdnaW5nIGEgY2VydGFpbiByZXZpc2lvbgorCisgW10KKwogKiBVc2FnZQogCi0gIEluc3RydWN0aW9ucyBvbiBob3cgdG8gdXNlIHRoZSBTQ00gUGx1Z2luIGNhbiBiZSBmb3VuZCB7e3t1c2FnZS5odG1sfWhlcmV9fS4gCi0gCisgIEluc3RydWN0aW9ucyBvbiBob3cgdG8gdXNlIHRoZSBTQ00gUGx1Z2luIGNhbiBiZSBmb3VuZCB7e3t1c2FnZS5odG1sfWhlcmV9fS4KKwogKiBFeGFtcGxlcwogCiAgIFRvIHByb3ZpZGUgeW91IHdpdGggYmV0dGVyIHVuZGVyc3RhbmRpbmcgb24gc29tZSB1c2FnZXMgb2YgdGhlIE1hdmVuIFNDTSBQbHVnaW4sCiAgIHlvdSBjYW4gdGFrZSBhIGxvb2sgaW50byB0aGUgZm9sbG93aW5nIGV4YW1wbGVzOgogCi0ge3t7ZXhhbXBsZXMvYm9vdHN0cmFwcGluZy13aXRoLXBvbS5odG1sfUJvb3RzdHJhcHBpbmcgdXNpbmcgYSBQT00gZmlsZX19Ci0gCi0ge3t7ZXhhbXBsZXMvc2NtLWFkdmFuY2UtZmVhdHVyZXMuaHRtbH1PdGhlciBhZHZhbmNlZCBzY20gY29tbWFuZHN9fQorICoge3t7ZXhhbXBsZXMvYm9vdHN0cmFwcGluZy13aXRoLXBvbS5odG1sfUJvb3RzdHJhcHBpbmcgdXNpbmcgYSBQT00gZmlsZX19CisKKyAqIHt7e2V4YW1wbGVzL3NjbS1hZHZhbmNlLWZlYXR1cmVzLmh0bWx9T3RoZXIgYWR2YW5jZWQgc2NtIGNvbW1hbmRzfX0KKworIFtdCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcGx1Z2luL3NyYy9zaXRlL2FwdC9pbnRyb2R1Y3Rpb24uYXB0IGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvc2l0ZS9hcHQvaW50cm9kdWN0aW9uLmFwdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS9tYXZlbi1zY20tcGx1Z2luL3NyYy9zaXRlL2FwdC9pbnRyb2R1Y3Rpb24uYXB0CisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wbHVnaW4vc3JjL3NpdGUvYXB0L3VzYWdlLmFwdCBiL21hdmVuLXNjbS1wbHVnaW4vc3JjL3NpdGUvYXB0L3VzYWdlLmFwdAppbmRleCBmMDY3ZmZmLi4xNDQ5NGU3IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcGx1Z2luL3NyYy9zaXRlL2FwdC91c2FnZS5hcHQKKysrIGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvc2l0ZS9hcHQvdXNhZ2UuYXB0CkBAIC0zLDI4ICszLDUxIEBACiAgLS0tLS0tCiAgUGV0ZSBNYXJ2aW4gS2luZwogIC0tLS0tLQotIDE4IEp1bHkgMjAwNgorIDIwMDgtMDgtMTMKICAtLS0tLS0KLSAKKworfn4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorfn4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCit+fiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorfn4gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorfn4gdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorfn4gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorfn4gd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorfn4KK35+ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCit+fgorfn4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorfn4gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KK35+ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorfn4gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCit+fiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit+fiB1bmRlciB0aGUgTGljZW5zZS4KKworfn4gTk9URTogRm9yIGhlbHAgd2l0aCB0aGUgc3ludGF4IG9mIHRoaXMgZmlsZSwgc2VlOgorfn4gaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvZG94aWEvcmVmZXJlbmNlcy9hcHQtZm9ybWF0Lmh0bWwKKwogVXNhZ2UKIAotIFRoZSBzY20gcGx1Z2luIG1hcHMgYSBsb3Qgb2YgY29tbWFuZHMgdG8gYSB2YXJpZXR5IG9mIHNjbSBpbXBsZW1lbnRhdGlvbnMuIEJ1dCB0aGVyZSBhcmUgb25seSAyIGZyZXF1ZW50bHkgCisgVGhlIHNjbSBwbHVnaW4gbWFwcyBhIGxvdCBvZiBjb21tYW5kcyB0byBhIHZhcmlldHkgb2Ygc2NtIGltcGxlbWVudGF0aW9ucy4gQnV0IHRoZXJlIGFyZSBvbmx5IDIgZnJlcXVlbnRseQogIHVzZWQgY29tbWFuZHM6Ci0gIAotICAgKiBjaGVja2luIC0gY29tbWl0IHRoZSBjaGFuZ2VzIHRvIHRoZSByZW1vdGUgcmVwb3NpdG9yeSAoIHNjbSBzZXJ2ZXIgKS4KLSAgCi0gICAqIHVwZGF0ZSAtIHVwZGF0ZXMgdGhlIGxvY2FsIHdvcmtpbmcgY29weSB3aXRoIHRoZSBvbmUgZnJvbSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgKCBzY20gc2VydmVyICkuCi0gICAKLUNvbmZpZ3VyaW5nIFNDTSAKKworICAqIGNoZWNraW4gLSBjb21taXQgdGhlIGNoYW5nZXMgdG8gdGhlIHJlbW90ZSByZXBvc2l0b3J5ICggc2NtIHNlcnZlciApLgorCisgICogdXBkYXRlIC0gdXBkYXRlcyB0aGUgbG9jYWwgd29ya2luZyBjb3B5IHdpdGggdGhlIG9uZSBmcm9tIHRoZSByZW1vdGUgcmVwb3NpdG9yeSAoIHNjbSBzZXJ2ZXIgKS4KKworICBbXQorCitDb25maWd1cmluZyBTQ00KIAogIEVhY2ggc2NtIGhhcyBhIGRpZmZlcmVudCBjb21tYW5kIGxpbmUgaW52b2NhdGlvbiB0byBjb21taXQgdGhlIG1vZGlmaWVkIHNvdXJjZXMuIFVzaW5nIG1hdmVuIHRoaXMgcHJvY2VzcyBpcwogIHNpbXBsaWZpZWQgYnkgcHJvdmlkaW5nIGEgdW5pZm9ybSB3YXkgdG8gZG8gdGhpcyBieSBsZXR0aW5nIG1hdmVuIGhhbmRsZSB0aGUgY29tbWFuZCBsaW5lIHRyYW5zbGF0aW9uIHRvIHBlcmZvcm0KICB0aGUgc2NtIHRhc2suCiAKICBUbyBjb25maWd1cmUgdGhlIHNjbSBzdXBwb3J0IGZvciBtYXZlbiB5b3UgbmVlZCB0aGUgc2NtIGNvbmZpZ3VyYXRpb24gaW4geW91ciA8PDxwb20ueG1sPj4+LgotIAorCiArLS0tLS0tLS0tKwotICBbLi4uXQorPHByb2plY3Q+CisgIC4uLgogICA8cGFja2FnaW5nPmphcjwvcGFja2FnaW5nPgogICA8dmVyc2lvbj4xLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDxuYW1lPlNDTSBTYW1wbGUgUHJvamVjdDwvbmFtZT4KQEAgLTM0LDQ0ICs1Nyw0NiBAQAogICAgIDxkZXZlbG9wZXJDb25uZWN0aW9uPnNjbTpzdm46aHR0cHM6Ly9zb21lcmVwb3NpdG9yeS5jb20vc3ZuX3JlcG8vdHJ1bms8L2RldmVsb3BlckNvbm5lY3Rpb24+CiAgICAgPHVybD5odHRwOi8vc29tZXJlcG9zaXRvcnkuY29tL3ZpZXcuY3ZzPC91cmw+CiAgIDwvc2NtPgotICBbLi4uXQorICAuLi4KKzwvcHJvamVjdD4KICstLS0tLS0tLS0rCi0gCisKICBNYXZlbiB3aWxsIHVzZSB0aGUgaW5mb3JtYXRpb24gZW1iZWRkZWQgaW4gdGhlIHNjbSBjb25maWd1cmF0aW9uIHRvIGRldGVybWluZSB0aGUgY29tbWFuZCBtYXBwaW5nIGZvciB0aGUgc2NtIGNvbW1hbmQuCiAgVGhlIHNjbSBjb25maWd1cmF0aW9uIHVybCBpcyBjb21wb3NlZCBvZiBkaWZmZXJlbnQgaW5mb3JtYXRpb24gdGhhdCBkZWZpbmVzIHRoZSBtYXBwaW5nOgotIAorCiArLS0tLS0tKwogICAgc2NtOnN2bjpodHRwOi8vc29tZXJlcG9zaXRvcnkuY29tL3N2bl9yZXBvL3RydW5rCiAgICA8c2VydmljZSBuYW1lPjo8c2NtIGltcGxlbWVudGF0aW9uPjo8cmVwb3NpdG9yeSB1cmw+CiArLS0tLS0tKwotIAorCiAgIENoZWNrIHRoZSB7e3todHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9zY20vc2Ntcy1vdmVydmlldy5odG1sfW1hdmVuIHNjbSBsaXN0fX0gZm9yIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBTQ01zLgotICAKKwogQ29tbWl0dGluZyBhbmQgdXBkYXRpbmcgY2hhbmdlcyB0aHJvdWdoIE1hdmVuCiAKLSBBc3N1bWluZyB0aGF0IFNDTSBoYXMgYmVlbiBjb25maWd1cmVkIGluIHRoZSA8PDxwb20ueG1sPj4+IGFuZCB0aGUgcHJvamVjdCBkaXJlY3RvcnkgaXMgbWFuYWdlZCBieSBhIFNDTSwgaW52b2tpbmcgCisgQXNzdW1pbmcgdGhhdCBTQ00gaGFzIGJlZW4gY29uZmlndXJlZCBpbiB0aGUgPDw8cG9tLnhtbD4+PiBhbmQgdGhlIHByb2plY3QgZGlyZWN0b3J5IGlzIG1hbmFnZWQgYnkgYSBTQ00sIGludm9raW5nCiAgdGhlIGNoZWNraW4gZ29hbCBpbiB0aGUgc2NtIHdpbGwgc3RhcnQgdGhlIGNvbW1pdCBwcm9jZXNzIGZvciBhbGwgY29uZmlndXJlZCBzb3VyY2VzIGluIHlvdXIgPDw8cG9tLnhtbD4+Pi4KLSAKKwogIDw8VGhlIGZpbGVzIHNob3VsZCBiZSBhZGRlZCBiZWZvcmVoYW5kIGJ5IGFuIGV4dGVybmFsIHNjbSBjbGllbnQuPj4KLSAKLSstLS0tLSsgCisKKystLS0tLSsKICAgbXZuIC1EbWVzc2FnZT0iPGNvbW1pdF9sb2dfaGVyZT4iIHNjbTpjaGVja2luCi0rLS0tLS0rICAgICAgCi0gCi0gZm9yIHVwZGF0ZSAKLSAKLSstLS0tLSsgCisrLS0tLS0rCisKKyBmb3IgdXBkYXRlCisKKystLS0tLSsKICAgbXZuIHNjbTp1cGRhdGUKLSstLS0tLSsgICAgICAKKystLS0tLSsKIAogU3BlY2lmeWluZyB0aGUgc2NtIGNvbm5lY3Rpb24gdG8gdXNlCiAKICBUaGVyZSB0d28gcG9zc2libGUgc2NtIGNvbm5lY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgaW4gdGhlIDw8PHBvbS54bWw+Pj4sIGNvbm5lY3Rpb24gYW5kIGRldmVsb3BlckNvbm5lY3Rpb24uCi0gCisKICAqIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbgotIAorCiArLS0tLS0tLS0tLS0rCi0gIFsuLi5dCis8cHJvamVjdD4KKyAgLi4uCiAgIDxidWlsZD4KICAgICBbLi4uXQogICAgIDxwbHVnaW5zPgpAQCAtODMsMTkgKzEwOCwyMSBAQAogICAgICAgICAgIDxjb25uZWN0aW9uVHlwZT5jb25uZWN0aW9uPC9jb25uZWN0aW9uVHlwZT4KICAgICAgICAgPC9jb25maWd1cmF0aW9uPgogICAgICAgPC9wbHVnaW4+Ci0gICAgICBbLi4uXQorICAgICAgLi4uCiAgICAgPC9wbHVnaW5zCi0gICAgWy4uLl0KKyAgICAuLi4KICAgPC9idWlsZD4KLSAgWy4uLl0KLSstLS0tLS0tLS0tLSsgIAorICAuLi4KKzwvcHJvamVjdD4KKystLS0tLS0tLS0tLSsKIAogICogZGV2ZWxvcGVyQ29ubmVjdGlvbiBjb25maWd1cmF0aW9uCi0gCisKICstLS0tLS0tLS0tLSsKLSAgWy4uLl0KKzxwcm9qZWN0PgorICAuLi4KICAgPGJ1aWxkPgotICAgIFsuLi5dCisgICAgLi4uCiAgICAgPHBsdWdpbnM+CiAgICAgICA8cGx1Z2luPgogICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CkBAIC0xMDUsMTUgKzEzMiwxNiBAQAogICAgICAgICAgIDxjb25uZWN0aW9uVHlwZT5kZXZlbG9wZXJDb25uZWN0aW9uPC9jb25uZWN0aW9uVHlwZT4KICAgICAgICAgPC9jb25maWd1cmF0aW9uPgogICAgICAgPC9wbHVnaW4+Ci0gICAgICBbLi4uXQorICAgICAgLi4uCiAgICAgPC9wbHVnaW5zCi0gICAgWy4uLl0KKyAgICAuLi4KICAgPC9idWlsZD4KLSAgWy4uLl0KLSstLS0tLS0tLS0tLSsgICAKLSAKLSAKKyAgLi4uCis8L3Byb2plY3Q+CisrLS0tLS0tLS0tLS0rCisKIFJlbGF0ZWQgTGlua3MKIAotICAge3t7aHR0cDovL2RvY3MuY29kZWhhdXMub3JnL2Rpc3BsYXkvU0NNL1NDTStNYXRyaXh9U0NNIFBsdWdpbiBNYXRyaXh9fSAKLSAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisgICoge3t7aHR0cDovL2RvY3MuY29kZWhhdXMub3JnL2Rpc3BsYXkvU0NNL1NDTStNYXRyaXh9U0NNIFBsdWdpbiBNYXRyaXh9fQorCisgIFtdCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcGx1Z2luL3NyYy9zaXRlL3NpdGUueG1sIGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvc2l0ZS9zaXRlLnhtbAppbmRleCAxZjM5ODRhLi43ODg2NTczIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcGx1Z2luL3NyYy9zaXRlL3NpdGUueG1sCisrKyBiL21hdmVuLXNjbS1wbHVnaW4vc3JjL3NpdGUvc2l0ZS54bWwKQEAgLTE5LDU5ICsxOSwyMyBAQAogICAtLT4KIAogPHByb2plY3Q+Ci0gIDxza2luPgotICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2tpbnM8L2dyb3VwSWQ+Ci0gICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3R5bHVzLXNraW48L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+MS4wLjE8L3ZlcnNpb24+Ci0gIDwvc2tpbj4KLSAgPGJhbm5lckxlZnQ+Ci0gICAgPG5hbWU+TWF2ZW48L25hbWU+Ci0gICAgPHNyYz5odHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvaW1hZ2VzL2FwYWNoZS1tYXZlbi1wcm9qZWN0LTIucG5nPC9zcmM+Ci0gICAgPGhyZWY+aHR0cDovL21hdmVuLmFwYWNoZS5vcmcvPC9ocmVmPgotICA8L2Jhbm5lckxlZnQ+Ci0gIDxiYW5uZXJSaWdodD4KLSAgICA8c3JjPmh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9pbWFnZXMvbWF2ZW4tbG9nby0yLmdpZjwvc3JjPgotICA8L2Jhbm5lclJpZ2h0PgogICA8Ym9keT4KLSAgICA8bGlua3M+Ci0gICAgICA8aXRlbSBuYW1lPSJBcGFjaGUiIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iLz4KLSAgICAgIDxpdGVtIG5hbWU9Ik1hdmVuIDEueCIgaHJlZj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tMS54Ii8+Ci0gICAgICA8aXRlbSBuYW1lPSJNYXZlbiAyLngiIGhyZWY9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnLyIvPgotICAgICAgPGl0ZW0gbmFtZT0iU0NNIiBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9zY20iLz4KLSAgICAgIDxpdGVtIG5hbWU9IldhZ29uIiBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy93YWdvbiIvPgotICAgICAgPGl0ZW0gbmFtZT0iSlhSIiBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9qeHIiLz4KLSAgICAgIDxpdGVtIG5hbWU9IkRveGlhIiBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9kb3hpYSIvPgotICAgIDwvbGlua3M+CiAgICAgPG1lbnUgbmFtZT0iT3ZlcnZpZXciPgogICAgICAgPGl0ZW0gbmFtZT0iSW50cm9kdWN0aW9uIiBocmVmPSJpbmRleC5odG1sIi8+CiAgICAgICA8aXRlbSBuYW1lPSJHb2FscyIgaHJlZj0icGx1Z2luLWluZm8uaHRtbCIvPgogICAgICAgPGl0ZW0gbmFtZT0iVXNhZ2UiIGhyZWY9InVzYWdlLmh0bWwiLz4KICAgICAgIDwhLS0gaXRlbSBuYW1lPSJGQVEiIGhyZWY9ImZhcS5odG1sIiAvIC0tPgorICAgICAgPGl0ZW0gbmFtZT0iUmVsZWFzZSBOb3RlcyIgaHJlZj0iamlyYS1yZXBvcnQuaHRtbCIvPgogICAgIDwvbWVudT4KKwogICAgIDxtZW51IG5hbWU9IkV4YW1wbGVzIj4KICAgICAgIDxpdGVtIG5hbWU9IkJvb3RzdHJhcHBpbmcgYSBQcm9qZWN0IFVzaW5nIGEgUE9NIiBocmVmPSJleGFtcGxlcy9ib290c3RyYXBwaW5nLXdpdGgtcG9tLmh0bWwiLz4KICAgICAgIDxpdGVtIG5hbWU9Ik90aGVyIFNDTSBDb21tYW5kcyIgaHJlZj0iZXhhbXBsZXMvc2NtLWFkdmFuY2UtZmVhdHVyZXMuaHRtbCIvPgogICAgIDwvbWVudT4KKwogICAgIDxtZW51IG5hbWU9IlF1aWNrIExpbmtzIj4KICAgICAgIDxpdGVtIG5hbWU9Ik1hdmVuIFNDTSBIb21lIiBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9zY20vIi8+Ci0gICAgICA8aXRlbSBuYW1lPSJNYXZlbiBTQ00gUGx1Z2luIiBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9zY20vcGx1Z2lucy9pbmRleC5odG1sIi8+CiAgICAgICA8aXRlbSBuYW1lPSJTQ00gVVJMIEZvcm1hdCIgaHJlZj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvc2NtL3NjbS11cmwtZm9ybWF0Lmh0bWwiLz4KLSAgICAgIDxpdGVtIG5hbWU9IlN1cHBvcnRlZCBTQ01zIiBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9zY20vc2Ntcy1vdmVydmlldy5odG1sIj4KLSAgICAgICAgPGl0ZW0gbmFtZT0iQmF6YWFyIiBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9zY20vYmF6YWFyLmh0bWwiLz4KLSAgICAgICAgPGl0ZW0gbmFtZT0iQ2xlYXJjYXNlIiBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9zY20vY2xlYXJjYXNlLmh0bWwiLz4KLSAgICAgICAgPGl0ZW0gbmFtZT0iQ00gU3luZXJneSIgaHJlZj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvc2NtL3N5bmVyZ3kuaHRtbCIvPgotICAgICAgICA8aXRlbSBuYW1lPSJDVlMiIGhyZWY9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3NjbS9jdnMuaHRtbCIvPgotICAgICAgICA8aXRlbSBuYW1lPSJMb2NhbCIgaHJlZj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvc2NtL2xvY2FsLmh0bWwiLz4KLSAgICAgICAgPGl0ZW0gbmFtZT0iUGVyZm9yY2UiIGhyZWY9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3NjbS9wZXJmb3JjZS5odG1sIi8+Ci0gICAgICAgIDxpdGVtIG5hbWU9IlN0YXJUZWFtIiBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9zY20vc3RhcnRlYW0uaHRtbCIvPgotICAgICAgICA8aXRlbSBuYW1lPSJTdWJ2ZXJzaW9uIiBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9zY20vc3VidmVyc2lvbi5odG1sIi8+Ci0gICAgICAgIDxpdGVtIG5hbWU9IlZpc3VhbCBTb3VyY2UgU2FmZSIgaHJlZj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvc2NtL3Zzcy5odG1sIi8+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBuYW1lPSJHdWlkZXMiIGhyZWY9Ii9ndWlkZS9pbmRleC5odG1sIiBjb2xsYXBzZT0idHJ1ZSI+Ci0gICAgICAgIDxpdGVtIG5hbWU9IkhvdyB0byB1c2UgTWF2ZW4tU0NNIGluIG15IGFwcGxpY2F0aW9uIiBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9zY20vZ3VpZGUvdXNhZ2UuaHRtbCIvPgotICAgICAgICA8aXRlbSBuYW1lPSJIb3cgdG8gd3JpdGUgYSBuZXcgU0NNIHByb3ZpZGVyIiBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9zY20vZ3VpZGUvbmV3X3Byb3ZpZGVyLmh0bWwiLz4KLSAgICAgIDwvaXRlbT4KLSAgICAgIDxpdGVtIG5hbWU9IlNDTSBwcm92aWRlcnMgTWF0cml4IiBocmVmPSJodHRwOi8vZG9jcy5jb2RlaGF1cy5vcmcvZGlzcGxheS9TQ00vU0NNK01hdHJpeCIvPgogICAgIDwvbWVudT4KIAogICAgIDxtZW51IHJlZj0icmVwb3J0cyIvPgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9CcmFuY2hNb2pvVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9CcmFuY2hNb2pvVGVzdC5qYXZhCmluZGV4IDNmZDU2M2UuLmU0ZmIwYmMgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wbHVnaW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vQnJhbmNoTW9qb1Rlc3QuamF2YQorKysgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0JyYW5jaE1vam9UZXN0LmphdmEKQEAgLTIwLDYgKzIwLDcgQEAKICAqLwogCiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5wbHVnaW4udGVzdGluZy5BYnN0cmFjdE1vam9UZXN0Q2FzZTsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21UZXN0Q2FzZTsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5zdm4uU3ZuU2NtVGVzdFV0aWxzOwogaW1wb3J0IG9yZy5jb2RlaGF1cy5wbGV4dXMudXRpbC5GaWxlVXRpbHM7CiBpbXBvcnQgb3JnLmNvZGVoYXVzLnBsZXh1cy51dGlsLlN0cmluZ1V0aWxzOwpAQCAtNTAsNiArNTEsMTMgQEAKIAogICAgICAgICBGaWxlVXRpbHMuZm9yY2VEZWxldGUoIHJlcG9zaXRvcnkgKTsKIAorICAgICAgICBpZiAoICFTY21UZXN0Q2FzZS5pc1N5c3RlbUNtZCggU3ZuU2NtVGVzdFV0aWxzLlNWTkFETUlOX0NPTU1BTkRfTElORSApICkKKyAgICAgICAgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiJyIgKyBTdm5TY21UZXN0VXRpbHMuU1ZOQURNSU5fQ09NTUFORF9MSU5FCisgICAgICAgICAgICAgICAgKyAiJyBpcyBub3QgYSBzeXN0ZW0gY29tbWFuZC4gSWdub3JlZCBzZXRVcC4iICk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBTdm5TY21UZXN0VXRpbHMuaW5pdGlhbGl6ZVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKTsKIAogICAgICAgICBDaGVja291dE1vam8gY2hlY2tvdXRNb2pvID0gKENoZWNrb3V0TW9qbykgbG9va3VwTW9qbyggImNoZWNrb3V0IiwgZ2V0VGVzdEZpbGUoCkBAIC02OSw2ICs3NywxMyBAQAogICAgIHB1YmxpYyB2b2lkIHRlc3RCcmFuY2goKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgeworICAgICAgICBpZiAoICFTY21UZXN0Q2FzZS5pc1N5c3RlbUNtZCggU3ZuU2NtVGVzdFV0aWxzLlNWTl9DT01NQU5EX0xJTkUgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggIiciICsgU3ZuU2NtVGVzdFV0aWxzLlNWTl9DT01NQU5EX0xJTkUKKyAgICAgICAgICAgICAgICArICInIGlzIG5vdCBhIHN5c3RlbSBjb21tYW5kLiBJZ25vcmVkICIgKyBnZXROYW1lKCkgKyAiLiIgKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIEJyYW5jaE1vam8gbW9qbyA9CiAgICAgICAgICAgICAoQnJhbmNoTW9qbykgbG9va3VwTW9qbyggImJyYW5jaCIsIGdldFRlc3RGaWxlKCAic3JjL3Rlc3QvcmVzb3VyY2VzL21vam9zL2JyYW5jaC9icmFuY2gueG1sIiApICk7CiAgICAgICAgIG1vam8uc2V0V29ya2luZ0RpcmVjdG9yeSggY2hlY2tvdXREaXIgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wbHVnaW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vQ2hhbmdlTG9nTW9qb1Rlc3QuamF2YSBiL21hdmVuLXNjbS1wbHVnaW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vQ2hhbmdlTG9nTW9qb1Rlc3QuamF2YQppbmRleCBlM2Y1YjdjLi5hOGYwOThkIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcGx1Z2luL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL0NoYW5nZUxvZ01vam9UZXN0LmphdmEKKysrIGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9DaGFuZ2VMb2dNb2pvVGVzdC5qYXZhCkBAIC0yMSw2ICsyMSw3IEBACiAKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbi5Nb2pvRXhlY3V0aW9uRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luLnRlc3RpbmcuQWJzdHJhY3RNb2pvVGVzdENhc2U7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVGVzdENhc2U7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuc3ZuLlN2blNjbVRlc3RVdGlsczsKIGltcG9ydCBvcmcuY29kZWhhdXMucGxleHVzLnV0aWwuRmlsZVV0aWxzOwogaW1wb3J0IG9yZy5jb2RlaGF1cy5wbGV4dXMudXRpbC5TdHJpbmdVdGlsczsKQEAgLTQ1LDEyICs0NiwyNiBAQAogCiAgICAgICAgIEZpbGVVdGlscy5mb3JjZURlbGV0ZSggcmVwb3NpdG9yeSApOwogCisgICAgICAgIGlmICggIVNjbVRlc3RDYXNlLmlzU3lzdGVtQ21kKCBTdm5TY21UZXN0VXRpbHMuU1ZOQURNSU5fQ09NTUFORF9MSU5FICkgKQorICAgICAgICB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oICInIiArIFN2blNjbVRlc3RVdGlscy5TVk5BRE1JTl9DT01NQU5EX0xJTkUKKyAgICAgICAgICAgICAgICArICInIGlzIG5vdCBhIHN5c3RlbSBjb21tYW5kLiBJZ25vcmVkIHNldFVwLiIgKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIFN2blNjbVRlc3RVdGlscy5pbml0aWFsaXplUmVwb3NpdG9yeSggcmVwb3NpdG9yeSApOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RDaGFuZ2VMb2coKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgeworICAgICAgICBpZiAoICFTY21UZXN0Q2FzZS5pc1N5c3RlbUNtZCggU3ZuU2NtVGVzdFV0aWxzLlNWTl9DT01NQU5EX0xJTkUgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggIiciICsgU3ZuU2NtVGVzdFV0aWxzLlNWTl9DT01NQU5EX0xJTkUKKyAgICAgICAgICAgICAgICArICInIGlzIG5vdCBhIHN5c3RlbSBjb21tYW5kLiBJZ25vcmVkICIgKyBnZXROYW1lKCkgKyAiLiIgKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIENoYW5nZUxvZ01vam8gbW9qbyA9IChDaGFuZ2VMb2dNb2pvKSBsb29rdXBNb2pvKCAiY2hhbmdlbG9nIiwgZ2V0VGVzdEZpbGUoCiAgICAgICAgICAgICAic3JjL3Rlc3QvcmVzb3VyY2VzL21vam9zL2NoYW5nZWxvZy9jaGFuZ2Vsb2cueG1sIiApICk7CiAKQEAgLTY3LDYgKzgyLDEzIEBACiAgICAgcHVibGljIHZvaWQgdGVzdENoYW5nZUxvZ1dpdGhQYXJhbWV0ZXJzKCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKKyAgICAgICAgaWYgKCAhU2NtVGVzdENhc2UuaXNTeXN0ZW1DbWQoIFN2blNjbVRlc3RVdGlscy5TVk5fQ09NTUFORF9MSU5FICkgKQorICAgICAgICB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oICInIiArIFN2blNjbVRlc3RVdGlscy5TVk5fQ09NTUFORF9MSU5FCisgICAgICAgICAgICAgICAgKyAiJyBpcyBub3QgYSBzeXN0ZW0gY29tbWFuZC4gSWdub3JlZCAiICsgZ2V0TmFtZSgpICsgIi4iICk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBDaGFuZ2VMb2dNb2pvIG1vam8gPSAoQ2hhbmdlTG9nTW9qbykgbG9va3VwTW9qbyggImNoYW5nZWxvZyIsIGdldFRlc3RGaWxlKAogICAgICAgICAgICAgInNyYy90ZXN0L3Jlc291cmNlcy9tb2pvcy9jaGFuZ2Vsb2cvY2hhbmdlbG9nV2l0aFBhcmFtZXRlcnMueG1sIiApICk7CiAKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wbHVnaW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vQ2hlY2tvdXRNb2pvVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9DaGVja291dE1vam9UZXN0LmphdmEKaW5kZXggODQ3Mzc2MC4uYjA5ZWUwMSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9DaGVja291dE1vam9UZXN0LmphdmEKKysrIGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9DaGVja291dE1vam9UZXN0LmphdmEKQEAgLTIxLDYgKzIxLDcgQEAKIAogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luLk1vam9FeGVjdXRpb25FeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5wbHVnaW4udGVzdGluZy5BYnN0cmFjdE1vam9UZXN0Q2FzZTsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21UZXN0Q2FzZTsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5zdm4uU3ZuU2NtVGVzdFV0aWxzOwogaW1wb3J0IG9yZy5jb2RlaGF1cy5wbGV4dXMudXRpbC5GaWxlVXRpbHM7CiBpbXBvcnQgb3JnLmNvZGVoYXVzLnBsZXh1cy51dGlsLlN0cmluZ1V0aWxzOwpAQCAtNjgsNiArNjksMTMgQEAKICAgICBwdWJsaWMgdm9pZCB0ZXN0U2tpcENoZWNrb3V0V2l0aENvbm5lY3Rpb25VcmwoKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgeworICAgICAgICBpZiAoICFTY21UZXN0Q2FzZS5pc1N5c3RlbUNtZCggU3ZuU2NtVGVzdFV0aWxzLlNWTkFETUlOX0NPTU1BTkRfTElORSApICkKKyAgICAgICAgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiJyIgKyBTdm5TY21UZXN0VXRpbHMuU1ZOQURNSU5fQ09NTUFORF9MSU5FCisgICAgICAgICAgICAgICAgKyAiJyBpcyBub3QgYSBzeXN0ZW0gY29tbWFuZC4gSWdub3JlZCAiICsgZ2V0TmFtZSgpICsgIi4iICk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBTdm5TY21UZXN0VXRpbHMuaW5pdGlhbGl6ZVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKTsKIAogICAgICAgICBDaGVja291dE1vam8gbW9qbyA9IChDaGVja291dE1vam8pIGxvb2t1cE1vam8oICJjaGVja291dCIsIGdldFRlc3RGaWxlKApkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9TdGF0dXNNb2pvVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9TdGF0dXNNb2pvVGVzdC5qYXZhCmluZGV4IGMxMTIzZjIuLjdlOTdmMGEgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wbHVnaW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vU3RhdHVzTW9qb1Rlc3QuamF2YQorKysgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL1N0YXR1c01vam9UZXN0LmphdmEKQEAgLTIwLDYgKzIwLDggQEAKICAqLwogCiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5wbHVnaW4udGVzdGluZy5BYnN0cmFjdE1vam9UZXN0Q2FzZTsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21UZXN0Q2FzZTsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5zdm4uU3ZuU2NtVGVzdFV0aWxzOwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwogCkBAIC0zMyw2ICszNSwxMyBAQAogICAgIHB1YmxpYyB2b2lkIHRlc3RTdGF0dXNNb2pvKCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKKyAgICAgICAgaWYgKCAhU2NtVGVzdENhc2UuaXNTeXN0ZW1DbWQoIFN2blNjbVRlc3RVdGlscy5TVk5fQ09NTUFORF9MSU5FICkgKQorICAgICAgICB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oICInIiArIFN2blNjbVRlc3RVdGlscy5TVk5fQ09NTUFORF9MSU5FCisgICAgICAgICAgICAgICAgKyAiJyBpcyBub3QgYSBzeXN0ZW0gY29tbWFuZC4gSWdub3JlZCAiICsgZ2V0TmFtZSgpICsgIi4iICk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBTdGF0dXNNb2pvIG1vam8gPQogICAgICAgICAgICAgKFN0YXR1c01vam8pIGxvb2t1cE1vam8oICJzdGF0dXMiLCBnZXRUZXN0RmlsZSggInNyYy90ZXN0L3Jlc291cmNlcy9tb2pvcy9zdGF0dXMvc3RhdHVzLnhtbCIgKSApOwogCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcGx1Z2luL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL1RhZ01vam9UZXN0LmphdmEgYi9tYXZlbi1zY20tcGx1Z2luL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL1RhZ01vam9UZXN0LmphdmEKaW5kZXggMzRjMzgwMS4uODBmZGI5YyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9UYWdNb2pvVGVzdC5qYXZhCisrKyBiL21hdmVuLXNjbS1wbHVnaW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vVGFnTW9qb1Rlc3QuamF2YQpAQCAtMjAsNiArMjAsNyBAQAogICovCiAKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbi50ZXN0aW5nLkFic3RyYWN0TW9qb1Rlc3RDYXNlOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVRlc3RDYXNlOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLnN2bi5Tdm5TY21UZXN0VXRpbHM7CiBpbXBvcnQgb3JnLmNvZGVoYXVzLnBsZXh1cy51dGlsLkZpbGVVdGlsczsKIGltcG9ydCBvcmcuY29kZWhhdXMucGxleHVzLnV0aWwuU3RyaW5nVXRpbHM7CkBAIC01MCw2ICs1MSwxMyBAQAogCiAgICAgICAgIEZpbGVVdGlscy5mb3JjZURlbGV0ZSggcmVwb3NpdG9yeSApOwogCisgICAgICAgIGlmICggIVNjbVRlc3RDYXNlLmlzU3lzdGVtQ21kKCBTdm5TY21UZXN0VXRpbHMuU1ZOQURNSU5fQ09NTUFORF9MSU5FICkgKQorICAgICAgICB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oICInIiArIFN2blNjbVRlc3RVdGlscy5TVk5BRE1JTl9DT01NQU5EX0xJTkUKKyAgICAgICAgICAgICAgICArICInIGlzIG5vdCBhIHN5c3RlbSBjb21tYW5kLiBJZ25vcmVkIHNldFVwLiIgKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIFN2blNjbVRlc3RVdGlscy5pbml0aWFsaXplUmVwb3NpdG9yeSggcmVwb3NpdG9yeSApOwogCiAgICAgICAgIENoZWNrb3V0TW9qbyBjaGVja291dE1vam8gPSAoQ2hlY2tvdXRNb2pvKSBsb29rdXBNb2pvKCAiY2hlY2tvdXQiLCBnZXRUZXN0RmlsZSgKQEAgLTY5LDYgKzc3LDEzIEBACiAgICAgcHVibGljIHZvaWQgdGVzdFRhZygpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CisgICAgICAgIGlmICggIVNjbVRlc3RDYXNlLmlzU3lzdGVtQ21kKCBTdm5TY21UZXN0VXRpbHMuU1ZOQURNSU5fQ09NTUFORF9MSU5FICkgKQorICAgICAgICB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oICInIiArIFN2blNjbVRlc3RVdGlscy5TVk5BRE1JTl9DT01NQU5EX0xJTkUKKyAgICAgICAgICAgICAgICArICInIGlzIG5vdCBhIHN5c3RlbSBjb21tYW5kLiBJZ25vcmVkICIgKyBnZXROYW1lKCkgKyAiLiIgKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIFRhZ01vam8gbW9qbyA9IChUYWdNb2pvKSBsb29rdXBNb2pvKCAidGFnIiwgZ2V0VGVzdEZpbGUoICJzcmMvdGVzdC9yZXNvdXJjZXMvbW9qb3MvdGFnL3RhZy54bWwiICkgKTsKICAgICAgICAgbW9qby5zZXRXb3JraW5nRGlyZWN0b3J5KCBjaGVja291dERpciApOwogCkBAIC03OSw2ICs5NCwxMyBAQAogCiAgICAgICAgIG1vam8uZXhlY3V0ZSgpOwogCisgICAgICAgIGlmICggIVNjbVRlc3RDYXNlLmlzU3lzdGVtQ21kKCBTdm5TY21UZXN0VXRpbHMuU1ZOX0NPTU1BTkRfTElORSApICkKKyAgICAgICAgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiJyIgKyBTdm5TY21UZXN0VXRpbHMuU1ZOX0NPTU1BTkRfTElORQorICAgICAgICAgICAgICAgICsgIicgaXMgbm90IGEgc3lzdGVtIGNvbW1hbmQuIElnbm9yZWQgIiArIGdldE5hbWUoKSArICIuIiApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgQ2hlY2tvdXRNb2pvIGNoZWNrb3V0TW9qbyA9CiAgICAgICAgICAgICAoQ2hlY2tvdXRNb2pvKSBsb29rdXBNb2pvKCAiY2hlY2tvdXQiLCBnZXRUZXN0RmlsZSggInNyYy90ZXN0L3Jlc291cmNlcy9tb2pvcy90YWcvY2hlY2tvdXQueG1sIiApICk7CiAgICAgICAgIGNoZWNrb3V0TW9qby5zZXRXb3JraW5nRGlyZWN0b3J5KCBuZXcgRmlsZSggZ2V0QmFzZWRpcigpICkgKTsKQEAgLTEwMyw2ICsxMjUsMTMgQEAKICAgICBwdWJsaWMgdm9pZCB0ZXN0VGFnV2l0aFRpbWVzdGFtcCgpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CisgICAgICAgIGlmICggIVNjbVRlc3RDYXNlLmlzU3lzdGVtQ21kKCBTdm5TY21UZXN0VXRpbHMuU1ZOX0NPTU1BTkRfTElORSApICkKKyAgICAgICAgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiJyIgKyBTdm5TY21UZXN0VXRpbHMuU1ZOX0NPTU1BTkRfTElORQorICAgICAgICAgICAgICAgICsgIicgaXMgbm90IGEgc3lzdGVtIGNvbW1hbmQuIElnbm9yZWQgIiArIGdldE5hbWUoKSArICIuIiApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgVGFnTW9qbyBtb2pvID0KICAgICAgICAgICAgIChUYWdNb2pvKSBsb29rdXBNb2pvKCAidGFnIiwgZ2V0VGVzdEZpbGUoICJzcmMvdGVzdC9yZXNvdXJjZXMvbW9qb3MvdGFnL3RhZ1dpdGhUaW1lc3RhbXAueG1sIiApICk7CiAgICAgICAgIG1vam8uc2V0V29ya2luZ0RpcmVjdG9yeSggY2hlY2tvdXREaXIgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wbHVnaW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vVXBkYXRlTW9qb1Rlc3QuamF2YSBiL21hdmVuLXNjbS1wbHVnaW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wbHVnaW4vVXBkYXRlTW9qb1Rlc3QuamF2YQppbmRleCBjZjRmY2U4Li4yNWNhNTgzIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcGx1Z2luL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcGx1Z2luL1VwZGF0ZU1vam9UZXN0LmphdmEKKysrIGIvbWF2ZW4tc2NtLXBsdWdpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3BsdWdpbi9VcGRhdGVNb2pvVGVzdC5qYXZhCkBAIC0yMCw2ICsyMCw3IEBACiAgKi8KIAogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luLnRlc3RpbmcuQWJzdHJhY3RNb2pvVGVzdENhc2U7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVGVzdENhc2U7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuc3ZuLlN2blNjbVRlc3RVdGlsczsKIGltcG9ydCBvcmcuY29kZWhhdXMucGxleHVzLnV0aWwuRmlsZVV0aWxzOwogaW1wb3J0IG9yZy5jb2RlaGF1cy5wbGV4dXMudXRpbC5TdHJpbmdVdGlsczsKQEAgLTUyLDYgKzUzLDEzIEBACiAgICAgcHVibGljIHZvaWQgdGVzdFNraXBDaGVja291dFdpdGhDb25uZWN0aW9uVXJsKCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKKyAgICAgICAgaWYgKCAhU2NtVGVzdENhc2UuaXNTeXN0ZW1DbWQoIFN2blNjbVRlc3RVdGlscy5TVk5BRE1JTl9DT01NQU5EX0xJTkUgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggIiciICsgU3ZuU2NtVGVzdFV0aWxzLlNWTkFETUlOX0NPTU1BTkRfTElORQorICAgICAgICAgICAgICAgICsgIicgaXMgbm90IGEgc3lzdGVtIGNvbW1hbmQuIElnbm9yZWQgIiArIGdldE5hbWUoKSArICIuIiApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgU3ZuU2NtVGVzdFV0aWxzLmluaXRpYWxpemVSZXBvc2l0b3J5KCByZXBvc2l0b3J5ICk7CiAKICAgICAgICAgQ2hlY2tvdXRNb2pvIGNoZWNrb3V0TW9qbyA9IChDaGVja291dE1vam8pIGxvb2t1cE1vam8oICJjaGVja291dCIsIGdldFRlc3RGaWxlKApkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYWNjdXJldi9wb20ueG1sIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYWNjdXJldi9wb20ueG1sCmluZGV4IDkwYmViY2IuLjdlODJjMTcgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXYvcG9tLnhtbAorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1hY2N1cmV2L3BvbS54bWwKQEAgLTEsNCArMSw1IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCiA8IS0tCiAgIH4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQogICB+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpAQCAtMTcsNDMgKzE4LDU0IEBACiAgIH4gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwogICB+IHVuZGVyIHRoZSBMaWNlbnNlLgogICAtLT4KKwogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+CiAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwogICA8cGFyZW50PgotICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlcnM8L2FydGlmYWN0SWQ+CiAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyczwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgorCiAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1hY2N1cmV2PC9hcnRpZmFjdElkPgorCiAgIDxuYW1lPk1hdmVuIFNDTSBBY2N1UmV2IFByb3ZpZGVyPC9uYW1lPgotICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+Ci0gIAorICA8ZGVzY3JpcHRpb24+U0NNIFByb3ZpZGVyIGltcGxlbWVudGF0aW9uIGZvciBBY2N1UmV2IChodHRwOi8vd3d3LmFjY3VyZXYuY29tLykuPC9kZXNjcmlwdGlvbj4KKworICA8cHJvcGVydGllcz4KKyAgICA8dGVzdC5hY2N1cmV2LnVzZXJuYW1lPnRlc3Q8L3Rlc3QuYWNjdXJldi51c2VybmFtZT4KKyAgICA8dGVzdC5hY2N1cmV2LnBhc3N3b3JkIC8+CisgICAgPHRlc3QuYWNjdXJldi5ob3N0PmxvY2FsaG9zdDwvdGVzdC5hY2N1cmV2Lmhvc3Q+CisgICAgPHRlc3QuYWNjdXJldi5wb3J0PjUwNTA8L3Rlc3QuYWNjdXJldi5wb3J0PgorICAgIDx0ZXN0LmFjY3VyZXYuZGVwb3Q+VGVzdERlcG90PC90ZXN0LmFjY3VyZXYuZGVwb3Q+CisgICAgPHRlc3QuYWNjdXJldi5zdHJlYW0+VGVzdFN0cmVhbTwvdGVzdC5hY2N1cmV2LnN0cmVhbT4KKyAgPC9wcm9wZXJ0aWVzPgorCiAgIDxkZXBlbmRlbmNpZXM+CiAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+My44LjE8L3ZlcnNpb24+Ci0gICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgPC9kZXBlbmRlbmN5PgotICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tYXBpPC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgorICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDwhLS0gVGVzdCAtLT4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CiAgICAgPC9kZXBlbmRlbmN5PgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tdGVzdDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KICAgICA8L2RlcGVuZGVuY3k+CiAgIDwvZGVwZW5kZW5jaWVzPgotICAKKwogICA8YnVpbGQ+CiAgICAgPHBsdWdpbnM+CiAgICAgICA8cGx1Z2luPgogICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMucGxleHVzPC9ncm91cElkPgogICAgICAgICA8YXJ0aWZhY3RJZD5wbGV4dXMtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4xLjMuNDwvdmVyc2lvbj4KICAgICAgICAgPGV4ZWN1dGlvbnM+CiAgICAgICAgICAgPGV4ZWN1dGlvbj4KICAgICAgICAgICAgIDxnb2Fscz4KQEAgLTczLDE2ICs4NSw3IEBACiAgICAgICA8L3BsdWdpbj4KICAgICA8L3BsdWdpbnM+CiAgIDwvYnVpbGQ+Ci0gIAotICA8cHJvcGVydGllcz4KLSAgICA8dGVzdC5hY2N1cmV2LnVzZXJuYW1lPnRlc3Q8L3Rlc3QuYWNjdXJldi51c2VybmFtZT4KLSAgICA8dGVzdC5hY2N1cmV2LnBhc3N3b3JkIC8+Ci0gICAgPHRlc3QuYWNjdXJldi5ob3N0PmxvY2FsaG9zdDwvdGVzdC5hY2N1cmV2Lmhvc3Q+Ci0gICAgPHRlc3QuYWNjdXJldi5wb3J0PjUwNTA8L3Rlc3QuYWNjdXJldi5wb3J0PgotICAgIDx0ZXN0LmFjY3VyZXYuZGVwb3Q+VGVzdERlcG90PC90ZXN0LmFjY3VyZXYuZGVwb3Q+Ci0gICAgPHRlc3QuYWNjdXJldi5zdHJlYW0+VGVzdFN0cmVhbTwvdGVzdC5hY2N1cmV2LnN0cmVhbT4KLSAgPC9wcm9wZXJ0aWVzPiAgIAotICAKKwogICA8cHJvZmlsZXM+CiAgICAgPHByb2ZpbGU+CiAgICAgICA8aWQ+VGNrVGVzdHM8L2lkPgpAQCAtMTMxLDYgKzEzNCw1IEBACiAgICAgICAgIDwvcGx1Z2lucz4KICAgICAgIDwvYnVpbGQ+CiAgICAgPC9wcm9maWxlPgotICA8L3Byb2ZpbGVzPiAgCi0gICAgCisgIDwvcHJvZmlsZXM+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1hY2N1cmV2L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYWNjdXJldi9BY2N1UmV2U2NtUHJvdmlkZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXYvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9hY2N1cmV2L0FjY3VSZXZTY21Qcm92aWRlci5qYXZhCmluZGV4IGNlMzVhYTIuLmQ4ZDcyNTcgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXYvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9hY2N1cmV2L0FjY3VSZXZTY21Qcm92aWRlci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXYvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9hY2N1cmV2L0FjY3VSZXZTY21Qcm92aWRlci5qYXZhCkBAIC0xLDE5ICsxLDIyIEBACiBwYWNrYWdlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmFjY3VyZXY7CiAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOCBBY2N1UmV2IEluYy4KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAgKgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzOwpAQCAtMzgsMjg0ICs0MSwzMjkgQEAKIC8qKgogICogSW1wbGVtZW50YXRpb24gb2YgQWNjdXJldiBpbnRlZ3JhdGlvbiB3aXRoIE1hdmVuIFNDTQogICoKKyAqIEB2ZXJzaW9uICRJZCQKICAqIEBwbGV4dXMuY29tcG9uZW50IHJvbGU9Im9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyIiByb2xlLWhpbnQ9ImFjY3VyZXYiCiAgKi8KLXB1YmxpYyBjbGFzcyBBY2N1UmV2U2NtUHJvdmlkZXIgZXh0ZW5kcyBBYnN0cmFjdFNjbVByb3ZpZGVyIHsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBhY2N1cmV2RXhlY3V0YWJsZTsKK3B1YmxpYyBjbGFzcyBBY2N1UmV2U2NtUHJvdmlkZXIKKyAgICBleHRlbmRzIEFic3RyYWN0U2NtUHJvdmlkZXIKK3sKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBhY2N1cmV2RXhlY3V0YWJsZTsKIAotCXByaXZhdGUgQWNjdVJldkFkZENvbW1hbmQgYWRkQ29tbWFuZDsKLQlwcml2YXRlIEFjY3VSZXZMb2dpbkNvbW1hbmQgbG9naW5Db21tYW5kOwotCXByaXZhdGUgQmFzZUFjY3VSZXZDaGVja091dENvbW1hbmRbXSBjaGVja091dENvbW1hbmRzOwotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDSEVDS09VVF9NRVRIT0RfUEFSQU1fTkFNRSA9ICJjaGVja291dE1ldGhvZCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENIRUNLT1VUX01FVEhPRF9TWVNfUFJPUEVSVFkgPSAiYWNjdXJldi5jaGVja291dC5tZXRob2QiOworICAgIHByaXZhdGUgQWNjdVJldkFkZENvbW1hbmQgYWRkQ29tbWFuZDsKIAotCXB1YmxpYyBBY2N1UmV2U2NtUHJvdmlkZXIoKSB7Ci0JCWJvb2xlYW4gaXNXaW5kb3dzID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcy5uYW1lIikudG9Mb3dlckNhc2UoKQotCQkJCS5pbmRleE9mKCJ3aW5kb3dzIikgIT0gLTE7Ci0JCXRoaXMuYWNjdXJldkV4ZWN1dGFibGUgPSByZXNvbHZlQWNjdXJldkV4ZWN1dGFibGUoaXNXaW5kb3dzKTsKLQl9CisgICAgcHJpdmF0ZSBBY2N1UmV2TG9naW5Db21tYW5kIGxvZ2luQ29tbWFuZDsKIAotCS8qKgotCSAqIEBzZWUgQWJzdHJhY3RTY21Qcm92aWRlciNnZXRTY21UeXBlKCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFNjbVR5cGUoKSB7Ci0JCXJldHVybiAiYWNjdXJldiI7Ci0JfQorICAgIHByaXZhdGUgQmFzZUFjY3VSZXZDaGVja091dENvbW1hbmRbXSBjaGVja091dENvbW1hbmRzOwogCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRBY2N1cmV2RXhlY3V0YWJsZSgpIHsKLQkJcmV0dXJuIHRoaXMuYWNjdXJldkV4ZWN1dGFibGU7Ci0JfQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDSEVDS09VVF9NRVRIT0RfUEFSQU1fTkFNRSA9ICJjaGVja291dE1ldGhvZCI7CiAKLQkvKioKLQkgKiBAc2VlIEFic3RyYWN0U2NtUHJvdmlkZXIjbWFrZVByb3ZpZGVyU2NtUmVwb3NpdG9yeShTdHJpbmcsIGNoYXIpCi0JICovCi0JcHVibGljIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSBtYWtlUHJvdmlkZXJTY21SZXBvc2l0b3J5KFN0cmluZyBzY21TcGVjaWZpY1VybCwgY2hhciBkZWxpbWl0ZXIpCi0JCQl0aHJvd3MgU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbiB7Ci0JCUFjY3VSZXZTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwID0gbmV3IEFjY3VSZXZTY21Qcm92aWRlclJlcG9zaXRvcnkoKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0hFQ0tPVVRfTUVUSE9EX1NZU19QUk9QRVJUWSA9ICJhY2N1cmV2LmNoZWNrb3V0Lm1ldGhvZCI7CiAKLQkJaW50IGF0U2lnbklkeCA9IHNjbVNwZWNpZmljVXJsLmluZGV4T2YoJ0AnKTsKLQkJaWYgKGF0U2lnbklkeCAhPSAtMSkgewotCQkJLy9Vc2VyLCBwYXNzd29yZCwgaG9zdCBhbmQgcG9ydCBhcmUgc3BlY2lmaWVkCi0JCQlTdHJpbmcgYmVmb3JlQXQgPSBzY21TcGVjaWZpY1VybC5zdWJzdHJpbmcoMCwgYXRTaWduSWR4KTsKLQkJCVN0cmluZyBhZnRlckF0ID0gc2NtU3BlY2lmaWNVcmwuc3Vic3RyaW5nKGF0U2lnbklkeCArIDEpOworICAgIHB1YmxpYyBBY2N1UmV2U2NtUHJvdmlkZXIoKQorICAgIHsKKyAgICAgICAgYm9vbGVhbiBpc1dpbmRvd3MgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoICJvcy5uYW1lIiApLnRvTG93ZXJDYXNlKCkuaW5kZXhPZiggIndpbmRvd3MiICkgIT0gLTE7CisgICAgICAgIHRoaXMuYWNjdXJldkV4ZWN1dGFibGUgPSByZXNvbHZlQWNjdXJldkV4ZWN1dGFibGUoIGlzV2luZG93cyApOworICAgIH0KIAotCQkJTGlua2VkTGlzdCBwYXJ0cyA9IHNwbGl0U3RyaW5nKGJlZm9yZUF0LCBkZWxpbWl0ZXIsIHRydWUpOwotCQkJaWYgKHBhcnRzLmlzRW1wdHkoKSkgewotCQkJCXRocm93IG5ldyBTY21SZXBvc2l0b3J5RXhjZXB0aW9uKCJVc2VybmFtZSBpcyByZXF1aXJlZCIpOwotCQkJfQotCQkJcmVwLnNldFVzZXIoKFN0cmluZykgcGFydHMucmVtb3ZlRmlyc3QoKSk7Ci0JCQlpZiAoIXBhcnRzLmlzRW1wdHkoKSkgewotCQkJCXJlcC5zZXRQYXNzd29yZCgoU3RyaW5nKSBwYXJ0cy5yZW1vdmVGaXJzdCgpKTsKLQkJCX0KLQkJCWludCBob3N0RW5kSWR4ID0gYWZ0ZXJBdC5pbmRleE9mKGRlbGltaXRlcik7Ci0JCQlpZiAoaG9zdEVuZElkeCA9PSAtMSkgewotCQkJCXRocm93IG5ldyBTY21SZXBvc2l0b3J5RXhjZXB0aW9uKCJJbnZhbGlkIFNDTSBVUkwiKTsKLQkJCX0KLQkJCVN0cmluZyBob3N0ID0gYWZ0ZXJBdC5zdWJzdHJpbmcoMCwgaG9zdEVuZElkeCk7Ci0JCQlyZXAuc2V0SG9zdChob3N0KTsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2NtVHlwZSgpCisgICAgeworICAgICAgICByZXR1cm4gImFjY3VyZXYiOworICAgIH0KIAotCQkJaW50IGlkeCA9IGFmdGVyQXQuaW5kZXhPZihkZWxpbWl0ZXIsIGhvc3RFbmRJZHggKyAxKTsKLQkJCWlmIChpZHggPT0gLTEpIHsKLQkJCQl0aHJvdyBuZXcgU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbigiSW52YWxpZCBTQ00gVVJMIik7Ci0JCQl9Ci0JCQlTdHJpbmcgZWl0aGVyUG9ydE9yTmV4dFRva2VuID0gYWZ0ZXJBdC5zdWJzdHJpbmcoaG9zdEVuZElkeCArIDEsIGlkeCk7Ci0JCQl0cnkgewotCQkJCXJlcC5zZXRQb3J0KEludGVnZXIucGFyc2VJbnQoZWl0aGVyUG9ydE9yTmV4dFRva2VuKSk7Ci0JCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotCQkJCWlkeCA9IGhvc3RFbmRJZHg7Ci0JCQl9Ci0JCQlzY21TcGVjaWZpY1VybCA9IGFmdGVyQXQuc3Vic3RyaW5nKGlkeCArIDEpOwotCQl9Ci0JCWludCBwYXJhbVN0YXJ0SWR4ID0gc2NtU3BlY2lmaWNVcmwuaW5kZXhPZignPycpOwotCQlpZiAocGFyYW1TdGFydElkeCAhPSAtMSkgewotCQkJU3RyaW5nIHBhcmFtcyA9IHNjbVNwZWNpZmljVXJsLnN1YnN0cmluZyhwYXJhbVN0YXJ0SWR4ICsgMSk7Ci0JCQlzY21TcGVjaWZpY1VybCA9IHNjbVNwZWNpZmljVXJsLnN1YnN0cmluZygwLCBwYXJhbVN0YXJ0SWR4KTsKLQkJCXByb2Nlc3NQYXJhbXMocGFyYW1zLCByZXApOworICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QWNjdXJldkV4ZWN1dGFibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYWNjdXJldkV4ZWN1dGFibGU7CisgICAgfQogCi0JCX0KLQkJcHJvY2Vzc0RlcG90U3RyZWFtQW5kV29ya3NwYWNlKHNjbVNwZWNpZmljVXJsLCBkZWxpbWl0ZXIsIHJlcCk7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KKyAgICBwdWJsaWMgU2NtUHJvdmlkZXJSZXBvc2l0b3J5IG1ha2VQcm92aWRlclNjbVJlcG9zaXRvcnkoIFN0cmluZyBzY21TcGVjaWZpY1VybCwgY2hhciBkZWxpbWl0ZXIgKQorICAgICAgICB0aHJvd3MgU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgQWNjdVJldlNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXAgPSBuZXcgQWNjdVJldlNjbVByb3ZpZGVyUmVwb3NpdG9yeSgpOwogCi0JCVN0cmluZyBjaGVja291dE1ldGhvZFBhcmFtID0gKFN0cmluZykgcmVwLmdldFBhcmFtcygpLmdldChDSEVDS09VVF9NRVRIT0RfUEFSQU1fTkFNRSk7Ci0JCWlmIChTdHJpbmdVdGlscy5pc05vdEVtcHR5KGNoZWNrb3V0TWV0aG9kUGFyYW0pKSB7Ci0JCQkvL1NldCBjaGVja291dCBtZXRob2QgZnJvbSB0aGUgU0NNIFVSTCBwYXJhbWV0ZXIKLQkJCXJlcC5zZXRDaGVja291dE1ldGhvZChjaGVja291dE1ldGhvZFBhcmFtLnRyaW0oKSk7Ci0JCX0KLQkJaWYgKHJlcC5nZXRDaGVja291dE1ldGhvZCgpID09IG51bGwpIHsKLQkJCS8vR2V0IGZyb20gc3lzdGVtIHByb3BlcnR5IG9yIHVzZSAicG9wIiBieSBkZWZhdWx0Ci0JCQlyZXAuc2V0Q2hlY2tvdXRNZXRob2QoU3lzdGVtLmdldFByb3BlcnR5KENIRUNLT1VUX01FVEhPRF9TWVNfUFJPUEVSVFksICJwb3AiKSk7Ci0JCX0KLQkJaWYgKGdldExvZ2dlcigpLmlzRGVidWdFbmFibGVkKCkpIHsKLQkJCWdldExvZ2dlcigpLmRlYnVnKCJSZXBvc2l0b3J5IGNyZWF0ZWQ6ICIgKyByZXAudG9TdHJpbmcoKSk7Ci0JCX0KLQkJcmV0dXJuIHJlcDsKLQl9CisgICAgICAgIGludCBhdFNpZ25JZHggPSBzY21TcGVjaWZpY1VybC5pbmRleE9mKCAnQCcgKTsKKyAgICAgICAgaWYgKCBhdFNpZ25JZHggIT0gLTEgKQorICAgICAgICB7CisgICAgICAgICAgICAvL1VzZXIsIHBhc3N3b3JkLCBob3N0IGFuZCBwb3J0IGFyZSBzcGVjaWZpZWQKKyAgICAgICAgICAgIFN0cmluZyBiZWZvcmVBdCA9IHNjbVNwZWNpZmljVXJsLnN1YnN0cmluZyggMCwgYXRTaWduSWR4ICk7CisgICAgICAgICAgICBTdHJpbmcgYWZ0ZXJBdCA9IHNjbVNwZWNpZmljVXJsLnN1YnN0cmluZyggYXRTaWduSWR4ICsgMSApOwogCi0JcHJpdmF0ZSB2b2lkIHByb2Nlc3NQYXJhbXMoU3RyaW5nIHBhcmFtcywgQWNjdVJldlNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXApIHsKLQkJLy9QYXJzZSBwYXJhbXMKLQkJU3RyaW5nW10gcGFyYW1LZXlWYWx1ZVBhaXJzID0gU3RyaW5nVXRpbHMuc3BsaXQocGFyYW1zLCAiJiIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtS2V5VmFsdWVQYWlycy5sZW5ndGg7IGkrKykgewotCQkJU3RyaW5nIGtleVZhbHVlUGFpciA9IHBhcmFtS2V5VmFsdWVQYWlyc1tpXTsKLQkJCWludCBkZWxpbWl0ZXJJZHggPSBrZXlWYWx1ZVBhaXIuaW5kZXhPZignPScpOwotCQkJaWYgKGRlbGltaXRlcklkeCA9PSAtMSkgewotCQkJCWdldExvZ2dlcigpLndhcm4oIkludmFsaWQgcGFyYW1ldGVyIFwiIiArIGtleVZhbHVlUGFpciArICJcIiBhdCBwb3NpdGlvbiAiICsgaSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlTdHJpbmcga2V5ID0ga2V5VmFsdWVQYWlyLnN1YnN0cmluZygwLCBkZWxpbWl0ZXJJZHgpOwotCQkJU3RyaW5nIHZhbHVlID0ga2V5VmFsdWVQYWlyLnN1YnN0cmluZyhkZWxpbWl0ZXJJZHggKyAxKTsKLQkJCS8vU3RvcmUgcGFyYW1ldGVyCi0JCQlyZXAuZ2V0UGFyYW1zKCkucHV0KGtleSwgdmFsdWUpOwotCQl9Ci0JfQorICAgICAgICAgICAgTGlua2VkTGlzdCBwYXJ0cyA9IHNwbGl0U3RyaW5nKCBiZWZvcmVBdCwgZGVsaW1pdGVyLCB0cnVlICk7CisgICAgICAgICAgICBpZiAoIHBhcnRzLmlzRW1wdHkoKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNjbVJlcG9zaXRvcnlFeGNlcHRpb24oICJVc2VybmFtZSBpcyByZXF1aXJlZCIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlcC5zZXRVc2VyKCAoU3RyaW5nKSBwYXJ0cy5yZW1vdmVGaXJzdCgpICk7CisgICAgICAgICAgICBpZiAoICFwYXJ0cy5pc0VtcHR5KCkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlcC5zZXRQYXNzd29yZCggKFN0cmluZykgcGFydHMucmVtb3ZlRmlyc3QoKSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGhvc3RFbmRJZHggPSBhZnRlckF0LmluZGV4T2YoIGRlbGltaXRlciApOworICAgICAgICAgICAgaWYgKCBob3N0RW5kSWR4ID09IC0xICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbiggIkludmFsaWQgU0NNIFVSTCIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZyBob3N0ID0gYWZ0ZXJBdC5zdWJzdHJpbmcoIDAsIGhvc3RFbmRJZHggKTsKKyAgICAgICAgICAgIHJlcC5zZXRIb3N0KCBob3N0ICk7CiAKKyAgICAgICAgICAgIGludCBpZHggPSBhZnRlckF0LmluZGV4T2YoIGRlbGltaXRlciwgaG9zdEVuZElkeCArIDEgKTsKKyAgICAgICAgICAgIGlmICggaWR4ID09IC0xICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbiggIkludmFsaWQgU0NNIFVSTCIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZyBlaXRoZXJQb3J0T3JOZXh0VG9rZW4gPSBhZnRlckF0LnN1YnN0cmluZyggaG9zdEVuZElkeCArIDEsIGlkeCApOworICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVwLnNldFBvcnQoIEludGVnZXIucGFyc2VJbnQoIGVpdGhlclBvcnRPck5leHRUb2tlbiApICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZHggPSBob3N0RW5kSWR4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2NtU3BlY2lmaWNVcmwgPSBhZnRlckF0LnN1YnN0cmluZyggaWR4ICsgMSApOworICAgICAgICB9CisgICAgICAgIGludCBwYXJhbVN0YXJ0SWR4ID0gc2NtU3BlY2lmaWNVcmwuaW5kZXhPZiggJz8nICk7CisgICAgICAgIGlmICggcGFyYW1TdGFydElkeCAhPSAtMSApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZyBwYXJhbXMgPSBzY21TcGVjaWZpY1VybC5zdWJzdHJpbmcoIHBhcmFtU3RhcnRJZHggKyAxICk7CisgICAgICAgICAgICBzY21TcGVjaWZpY1VybCA9IHNjbVNwZWNpZmljVXJsLnN1YnN0cmluZyggMCwgcGFyYW1TdGFydElkeCApOworICAgICAgICAgICAgcHJvY2Vzc1BhcmFtcyggcGFyYW1zLCByZXAgKTsKIAotCS8qKgotCSAqIEBzZWUgQWJzdHJhY3RTY21Qcm92aWRlciNsb2dpbihTY21Qcm92aWRlclJlcG9zaXRvcnksIFNjbUZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzKQotCSAqLwotCXByb3RlY3RlZCBMb2dpblNjbVJlc3VsdCBsb2dpbihTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzKQotCQkJdGhyb3dzIFNjbUV4Y2VwdGlvbiB7Ci0JCWlmIChudWxsID09IHRoaXMubG9naW5Db21tYW5kKSB7IC8vTGF6eSBjb21tYW5kIGluc3RhbnRpYXRpb24KLQkJCXRoaXMubG9naW5Db21tYW5kID0gbmV3IEFjY3VSZXZMb2dpbkNvbW1hbmQodGhpcy5hY2N1cmV2RXhlY3V0YWJsZSk7Ci0JCQl0aGlzLmxvZ2luQ29tbWFuZC5zZXRMb2dnZXIoZ2V0TG9nZ2VyKCkpOwotCQl9Ci0JCXJldHVybiAoTG9naW5TY21SZXN1bHQpIHRoaXMubG9naW5Db21tYW5kLmV4ZWN1dGUocmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyk7Ci0JfQorICAgICAgICB9CisgICAgICAgIHByb2Nlc3NEZXBvdFN0cmVhbUFuZFdvcmtzcGFjZSggc2NtU3BlY2lmaWNVcmwsIGRlbGltaXRlciwgcmVwICk7CiAKLQkvKioKLQkgKiBAc2VlIEFic3RyYWN0U2NtUHJvdmlkZXIjY2hlY2tvdXQoU2NtUHJvdmlkZXJSZXBvc2l0b3J5LCBTY21GaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycykKLQkgKi8KLQlwcm90ZWN0ZWQgQ2hlY2tPdXRTY21SZXN1bHQgY2hlY2tvdXQoU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKLQkJCQkJCQkJCQkgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycykgdGhyb3dzIFNjbUV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyBjaGVja291dE1ldGhvZFBhcmFtID0gKFN0cmluZykgcmVwLmdldFBhcmFtcygpLmdldCggQ0hFQ0tPVVRfTUVUSE9EX1BBUkFNX05BTUUgKTsKKyAgICAgICAgaWYgKCBTdHJpbmdVdGlscy5pc05vdEVtcHR5KCBjaGVja291dE1ldGhvZFBhcmFtICkgKQorICAgICAgICB7CisgICAgICAgICAgICAvL1NldCBjaGVja291dCBtZXRob2QgZnJvbSB0aGUgU0NNIFVSTCBwYXJhbWV0ZXIKKyAgICAgICAgICAgIHJlcC5zZXRDaGVja291dE1ldGhvZCggY2hlY2tvdXRNZXRob2RQYXJhbS50cmltKCkgKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIHJlcC5nZXRDaGVja291dE1ldGhvZCgpID09IG51bGwgKQorICAgICAgICB7CisgICAgICAgICAgICAvL0dldCBmcm9tIHN5c3RlbSBwcm9wZXJ0eSBvciB1c2UgInBvcCIgYnkgZGVmYXVsdAorICAgICAgICAgICAgcmVwLnNldENoZWNrb3V0TWV0aG9kKCBTeXN0ZW0uZ2V0UHJvcGVydHkoIENIRUNLT1VUX01FVEhPRF9TWVNfUFJPUEVSVFksICJwb3AiICkgKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGdldExvZ2dlcigpLmlzRGVidWdFbmFibGVkKCkgKQorICAgICAgICB7CisgICAgICAgICAgICBnZXRMb2dnZXIoKS5kZWJ1ZyggIlJlcG9zaXRvcnkgY3JlYXRlZDogIiArIHJlcC50b1N0cmluZygpICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlcDsKKyAgICB9CiAKLQkJQWNjdVJldlNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXAgPSAoQWNjdVJldlNjbVByb3ZpZGVyUmVwb3NpdG9yeSkgcmVwb3NpdG9yeTsKLQkJZ2V0TG9nZ2VyKCkuZGVidWcoImFjY3VyZXYuY2hlY2tvdXQubWV0aG9kID0gIiArIHJlcC5nZXRDaGVja291dE1ldGhvZCgpKTsKLQkJQmFzZUFjY3VSZXZDaGVja091dENvbW1hbmRbXSBjaGVja091dENtZHMgPSBnZXRDaGVja291dENvbW1hbmRzKCk7Ci0JCS8vRmluZCBjaGVjay1vdXQgY29tbWFuZCB0aGF0IHN1cHBvcnRzIHNwZWNpZmllZCBtZXRob2QKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjaGVja091dENtZHMubGVuZ3RoOyBpKyspIHsKLQkJCUJhc2VBY2N1UmV2Q2hlY2tPdXRDb21tYW5kIGNoZWNrT3V0Q29tbWFuZCA9IGNoZWNrT3V0Q21kc1tpXTsKLQkJCWlmIChjaGVja091dENvbW1hbmQuZ2V0TWV0aG9kTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UocmVwLmdldENoZWNrb3V0TWV0aG9kKCkpKSB7Ci0JCQkJcmV0dXJuIChDaGVja091dFNjbVJlc3VsdCkgY2hlY2tPdXRDb21tYW5kLmV4ZWN1dGUocmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyk7Ci0JCQl9Ci0JCX0KLQkJdGhyb3cgbmV3IFNjbVJlcG9zaXRvcnlFeGNlcHRpb24oImFjY3VyZXYuY2hlY2tvdXQubWV0aG9kPSIgKyByZXAuZ2V0Q2hlY2tvdXRNZXRob2QoKSArICIgaXMgbm90IHN1cHBvcnRlZCIpOwotCX0KKyAgICBwcml2YXRlIHZvaWQgcHJvY2Vzc1BhcmFtcyggU3RyaW5nIHBhcmFtcywgQWNjdVJldlNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXAgKQorICAgIHsKKyAgICAgICAgLy9QYXJzZSBwYXJhbXMKKyAgICAgICAgU3RyaW5nW10gcGFyYW1LZXlWYWx1ZVBhaXJzID0gU3RyaW5nVXRpbHMuc3BsaXQoIHBhcmFtcywgIiYiICk7CisgICAgICAgIGZvciAoIGludCBpID0gMDsgaSA8IHBhcmFtS2V5VmFsdWVQYWlycy5sZW5ndGg7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZyBrZXlWYWx1ZVBhaXIgPSBwYXJhbUtleVZhbHVlUGFpcnNbaV07CisgICAgICAgICAgICBpbnQgZGVsaW1pdGVySWR4ID0ga2V5VmFsdWVQYWlyLmluZGV4T2YoICc9JyApOworICAgICAgICAgICAgaWYgKCBkZWxpbWl0ZXJJZHggPT0gLTEgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndhcm4oICJJbnZhbGlkIHBhcmFtZXRlciBcIiIgKyBrZXlWYWx1ZVBhaXIgKyAiXCIgYXQgcG9zaXRpb24gIiArIGkgKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBrZXlWYWx1ZVBhaXIuc3Vic3RyaW5nKCAwLCBkZWxpbWl0ZXJJZHggKTsKKyAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGtleVZhbHVlUGFpci5zdWJzdHJpbmcoIGRlbGltaXRlcklkeCArIDEgKTsKKyAgICAgICAgICAgIC8vU3RvcmUgcGFyYW1ldGVyCisgICAgICAgICAgICByZXAuZ2V0UGFyYW1zKCkucHV0KCBrZXksIHZhbHVlICk7CisgICAgICAgIH0KKyAgICB9CiAKLQlwcm90ZWN0ZWQgQWRkU2NtUmVzdWx0IGFkZChTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzKSB0aHJvd3MgU2NtRXhjZXB0aW9uIHsKLQkJLy9MYXp5IGNvbW1hbmQgY3JlYXRpb24KLQkJaWYgKG51bGwgPT0gYWRkQ29tbWFuZCkgewotCQkJYWRkQ29tbWFuZCA9IG5ldyBBY2N1UmV2QWRkQ29tbWFuZCh0aGlzLmFjY3VyZXZFeGVjdXRhYmxlKTsKLQkJCWFkZENvbW1hbmQuc2V0TG9nZ2VyKGdldExvZ2dlcigpKTsKLQkJfQotCQlyZXR1cm4gKEFkZFNjbVJlc3VsdCkgYWRkQ29tbWFuZC5leGVjdXRlKHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMpOwotCX0KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLworICAgIHByb3RlY3RlZCBMb2dpblNjbVJlc3VsdCBsb2dpbiggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCisgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KKyAgICB7CisgICAgICAgIGlmICggbnVsbCA9PSB0aGlzLmxvZ2luQ29tbWFuZCApCisgICAgICAgIHsgLy9MYXp5IGNvbW1hbmQgaW5zdGFudGlhdGlvbgorICAgICAgICAgICAgdGhpcy5sb2dpbkNvbW1hbmQgPSBuZXcgQWNjdVJldkxvZ2luQ29tbWFuZCggdGhpcy5hY2N1cmV2RXhlY3V0YWJsZSApOworICAgICAgICAgICAgdGhpcy5sb2dpbkNvbW1hbmQuc2V0TG9nZ2VyKCBnZXRMb2dnZXIoKSApOworICAgICAgICB9CisgICAgICAgIHJldHVybiAoTG9naW5TY21SZXN1bHQpIHRoaXMubG9naW5Db21tYW5kLmV4ZWN1dGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKKyAgICB9CiAKLQlwcml2YXRlIEJhc2VBY2N1UmV2Q2hlY2tPdXRDb21tYW5kW10gZ2V0Q2hlY2tvdXRDb21tYW5kcygpIHsKLQkJaWYgKG51bGwgPT0gdGhpcy5jaGVja091dENvbW1hbmRzKSB7IC8vTGF6eSBjb21tYW5kIGluc3RhbnRpYXRpb24KLQkJCXRoaXMuY2hlY2tPdXRDb21tYW5kcyA9IGJ1aWxkQ2hlY2tPdXRDb21tYW5kcygpOwotCQl9Ci0JCXJldHVybiB0aGlzLmNoZWNrT3V0Q29tbWFuZHM7Ci0JfQorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCisgICAgcHJvdGVjdGVkIENoZWNrT3V0U2NtUmVzdWx0IGNoZWNrb3V0KCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCisgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KKyAgICB7CiAKLQlwcm90ZWN0ZWQgQmFzZUFjY3VSZXZDaGVja091dENvbW1hbmRbXSBidWlsZENoZWNrT3V0Q29tbWFuZHMoKSB7Ci0JCUJhc2VBY2N1UmV2Q2hlY2tPdXRDb21tYW5kW10gY29tbWFuZHMgPSB7Ci0JCQkJbmV3IEFjY3VSZXZDaGVja091dFVzaW5nUG9wQ29tbWFuZCh0aGlzLmFjY3VyZXZFeGVjdXRhYmxlKSwKLQkJCQluZXcgQWNjdVJldkNoZWNrT3V0V29ya3NwYWNlQ29tbWFuZCh0aGlzLmFjY3VyZXZFeGVjdXRhYmxlKQotCQl9OwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbW1hbmRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlCYXNlQWNjdVJldkNoZWNrT3V0Q29tbWFuZCBjb21tYW5kID0gY29tbWFuZHNbaV07Ci0JCQljb21tYW5kLnNldExvZ2dlcihnZXRMb2dnZXIoKSk7Ci0JCX0KLQkJcmV0dXJuIGNvbW1hbmRzOwotCX0KKyAgICAgICAgQWNjdVJldlNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXAgPSAoQWNjdVJldlNjbVByb3ZpZGVyUmVwb3NpdG9yeSkgcmVwb3NpdG9yeTsKKyAgICAgICAgZ2V0TG9nZ2VyKCkuZGVidWcoICJhY2N1cmV2LmNoZWNrb3V0Lm1ldGhvZCA9ICIgKyByZXAuZ2V0Q2hlY2tvdXRNZXRob2QoKSApOworICAgICAgICBCYXNlQWNjdVJldkNoZWNrT3V0Q29tbWFuZFtdIGNoZWNrT3V0Q21kcyA9IGdldENoZWNrb3V0Q29tbWFuZHMoKTsKKyAgICAgICAgLy9GaW5kIGNoZWNrLW91dCBjb21tYW5kIHRoYXQgc3VwcG9ydHMgc3BlY2lmaWVkIG1ldGhvZAorICAgICAgICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBjaGVja091dENtZHMubGVuZ3RoOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICBCYXNlQWNjdVJldkNoZWNrT3V0Q29tbWFuZCBjaGVja091dENvbW1hbmQgPSBjaGVja091dENtZHNbaV07CisgICAgICAgICAgICBpZiAoIGNoZWNrT3V0Q29tbWFuZC5nZXRNZXRob2ROYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSggcmVwLmdldENoZWNrb3V0TWV0aG9kKCkgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChDaGVja091dFNjbVJlc3VsdCkgY2hlY2tPdXRDb21tYW5kLmV4ZWN1dGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aHJvdyBuZXcgU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbiggImFjY3VyZXYuY2hlY2tvdXQubWV0aG9kPSIgKyByZXAuZ2V0Q2hlY2tvdXRNZXRob2QoKSArICIgaXMgbm90IHN1cHBvcnRlZCIgKTsKKyAgICB9CiAKLQkvKioKLQkgKiBBcHBlbmQgaG9zdCAoLUgpIHBhcmFtZXRlciB0byB0aGUgcGFyYW1zIGxpc3QgaWYgdGhlIHJlcG9zaXRvcnkgaGFzIHRoaXMgaW5mb3JtYXRpb24KLQkgKgotCSAqIEBwYXJhbSByZXBvc2l0b3J5IEFjY3VSZXZTY21Qcm92aWRlclJlcG9zaXRvcnkKLQkgKiBAcGFyYW0gcGFyYW1zCSBQYXJhbWV0ZXJzCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGFwcGVuZEhvc3RUb1BhcmFtc0lmTmVlZGVkKEFjY3VSZXZTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgTGlzdCBwYXJhbXMpIHsKLQkJaWYgKHJlcG9zaXRvcnkuZ2V0SG9zdCgpICE9IG51bGwpIHsKLQkJCXBhcmFtcy5hZGQoIi1IIik7Ci0JCQlwYXJhbXMuYWRkKHJlcG9zaXRvcnkuZ2V0SG9zdCgpICsgIjoiICsgU3RyaW5nLnZhbHVlT2YocmVwb3NpdG9yeS5nZXRQb3J0KCkpKTsKLQkJfQotCX0KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLworICAgIHByb3RlY3RlZCBBZGRTY21SZXN1bHQgYWRkKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKKyAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgLy9MYXp5IGNvbW1hbmQgY3JlYXRpb24KKyAgICAgICAgaWYgKCBudWxsID09IGFkZENvbW1hbmQgKQorICAgICAgICB7CisgICAgICAgICAgICBhZGRDb21tYW5kID0gbmV3IEFjY3VSZXZBZGRDb21tYW5kKCB0aGlzLmFjY3VyZXZFeGVjdXRhYmxlICk7CisgICAgICAgICAgICBhZGRDb21tYW5kLnNldExvZ2dlciggZ2V0TG9nZ2VyKCkgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKEFkZFNjbVJlc3VsdCkgYWRkQ29tbWFuZC5leGVjdXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CisgICAgfQogCi0JLyoqCi0JICogUmVzb2x2ZXMgYWNjdXJldiBleGVjdXRhYmxlCi0JICoKLQkgKiBAcGFyYW0gd2luZG93cyBJcyBPUyBpcyB3aW5kb3dzCi0JICogQHJldHVybiBBY2N1UmV2IGV4ZWN1dGFibGUKLQkgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBJZiB0aGUgZXhlY3V0YWJsZSBjYW5ub3QgYmUgcmVzb2x2ZWQKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgcmVzb2x2ZUFjY3VyZXZFeGVjdXRhYmxlKGJvb2xlYW4gd2luZG93cykgewotCQlTdHJpbmcgZXhlY3V0YWJsZSA9ICJhY2N1cmV2IjsKLQkJLy9BcHBlbmQgIi5leGUiIHN1ZmZpeCBpZiB0aGUgT1MgaXMgV2luZG93cwotCQlpZiAod2luZG93cykgewotCQkJZXhlY3V0YWJsZSArPSAiLmV4ZSI7Ci0JCX0KLQkJLy9HcmFiIGV4ZXVjdXRhYmxlIGZyb20gc3lzdGVtIHZhcmlhYmxlIGlmIHNwZWNpZmllZAotCQlTdHJpbmcgYWNjdXJldkV4ZWN1dGFibGUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImFjY3VyZXZFeGVjdXRhYmxlIik7Ci0JCWlmIChhY2N1cmV2RXhlY3V0YWJsZSAhPSBudWxsKSB7Ci0JCQlleGVjdXRhYmxlID0gYWNjdXJldkV4ZWN1dGFibGU7Ci0JCX0KLQkJcmV0dXJuIGV4ZWN1dGFibGU7Ci0JfQorICAgIHByaXZhdGUgQmFzZUFjY3VSZXZDaGVja091dENvbW1hbmRbXSBnZXRDaGVja291dENvbW1hbmRzKCkKKyAgICB7CisgICAgICAgIGlmICggbnVsbCA9PSB0aGlzLmNoZWNrT3V0Q29tbWFuZHMgKQorICAgICAgICB7IC8vTGF6eSBjb21tYW5kIGluc3RhbnRpYXRpb24KKyAgICAgICAgICAgIHRoaXMuY2hlY2tPdXRDb21tYW5kcyA9IGJ1aWxkQ2hlY2tPdXRDb21tYW5kcygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLmNoZWNrT3V0Q29tbWFuZHM7CisgICAgfQogCi0JLyoqCi0JICogU3BsaXQgdGhlIGdpdmVuIHN0cmluZyB3aXRoIHNlcGFyYXRvciBjaGFyCi0JICoKLQkgKiBAcGFyYW0gc3RyaW5nCQlTdHJpbmcgdG8gYmUgc3BsaXR0ZWQKLQkgKiBAcGFyYW0gc2VwYXJhdG9yQ2hhciBzZXBhcmF0b3IgY2hhcgotCSAqIEBwYXJhbSBibGFua0lzTnVsbCAgIElmIHRoZSBwYXJhbWV0ZXIgaXMgdHJ1ZSB0aGVuIGlmIHRoZSBzdWJzdHJpbmcgaXMgYmxhbmsgdGhlbiBpdCB3aWxsIGJlIGNvbnNpZGVyZWQgYXMgbnVsbAotCSAqIEByZXR1cm4gTGlua2VkIGxpc3Qgd2hpY2ggY29udGFpbnMgc3RyaW5ncwotCSAqLwotCXByaXZhdGUgc3RhdGljIExpbmtlZExpc3Qgc3BsaXRTdHJpbmcoU3RyaW5nIHN0cmluZywgY2hhciBzZXBhcmF0b3JDaGFyLCBib29sZWFuIGJsYW5rSXNOdWxsKSB7Ci0JCUxpbmtlZExpc3QgcGFydHMgPSBuZXcgTGlua2VkTGlzdCgpOwotCQlpbnQgZnJvbUlkeCA9IDA7Ci0JCWZvciAoaW50IGlkeDsgKGlkeCA9IHN0cmluZy5pbmRleE9mKHNlcGFyYXRvckNoYXIsIGZyb21JZHgpKSAhPSAtMTsgZnJvbUlkeCA9ICsraWR4KSB7Ci0JCQlwYXJ0cy5hZGQoZ2V0U3Vic3RyaW5nKHN0cmluZywgZnJvbUlkeCwgaWR4LCBibGFua0lzTnVsbCkpOwotCQl9Ci0JCS8vQWRkIGxhc3QgdG9rZW4KLQkJcGFydHMuYWRkKGdldFN1YnN0cmluZyhzdHJpbmcsIGZyb21JZHgsIHN0cmluZy5sZW5ndGgoKSwgYmxhbmtJc051bGwpKTsKLQkJcmV0dXJuIHBhcnRzOwotCX0KKyAgICBwcm90ZWN0ZWQgQmFzZUFjY3VSZXZDaGVja091dENvbW1hbmRbXSBidWlsZENoZWNrT3V0Q29tbWFuZHMoKQorICAgIHsKKyAgICAgICAgQmFzZUFjY3VSZXZDaGVja091dENvbW1hbmRbXSBjb21tYW5kcyA9IHsKKyAgICAgICAgICAgIG5ldyBBY2N1UmV2Q2hlY2tPdXRVc2luZ1BvcENvbW1hbmQoIHRoaXMuYWNjdXJldkV4ZWN1dGFibGUgKSwKKyAgICAgICAgICAgIG5ldyBBY2N1UmV2Q2hlY2tPdXRXb3Jrc3BhY2VDb21tYW5kKCB0aGlzLmFjY3VyZXZFeGVjdXRhYmxlICkgfTsKKyAgICAgICAgZm9yICggaW50IGkgPSAwOyBpIDwgY29tbWFuZHMubGVuZ3RoOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICBCYXNlQWNjdVJldkNoZWNrT3V0Q29tbWFuZCBjb21tYW5kID0gY29tbWFuZHNbaV07CisgICAgICAgICAgICBjb21tYW5kLnNldExvZ2dlciggZ2V0TG9nZ2VyKCkgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY29tbWFuZHM7CisgICAgfQogCi0JLyoqCi0JICogR2V0IHN1YnN0cmluZyBmcm9tIHN0cmluZwotCSAqCi0JICogQHBhcmFtIHN0cmluZwkgIHNvdXJjZSBzdHJpbmcKLQkgKiBAcGFyYW0gZnJvbUlkeAkgZnJvbSBpbmRleAotCSAqIEBwYXJhbSB0b0lkeAkgICB0byBpbmRleAotCSAqIEBwYXJhbSBibGFua0lzTnVsbCBJZiB0aGUgcGFyYW1ldGVyIGlzIHRydWUgdGhlbiBpZiB0aGUgc3Vic3RyaW5nIGlzIGJsYW5rIHRoZW4gbnVsbCB3aWxsIGJlIHJldHVybmVkCi0JICogQHJldHVybiBTdWJzdHJpbmcgb3IgdGhlIG51bGwgaWYgdGhlIHN1YnN0cmluZyBpcyBlbXB0eSBhbmQgdGhlIGJsYW5rSXNOdWxsIHBhcmFtZXRlciBpcyB0cnVlCi0JICogQHNlZSBTdHJpbmcjc3Vic3RyaW5nKGludCxpbnQpCi0JICogQHNlZSBTdHJpbmdVdGlscyNpc0JsYW5rKFN0cmluZykKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3Vic3RyaW5nKFN0cmluZyBzdHJpbmcsIGludCBmcm9tSWR4LCBpbnQgdG9JZHgsIGJvb2xlYW4gYmxhbmtJc051bGwpIHsKLQkJU3RyaW5nIHN1YnN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmcoZnJvbUlkeCwgdG9JZHgpOwotCQlyZXR1cm4gKGJsYW5rSXNOdWxsICYmIFN0cmluZ1V0aWxzLmlzRW1wdHkoc3Vic3RyaW5nKSkgPyBudWxsIDogc3Vic3RyaW5nOwotCX0KKyAgICAvKioKKyAgICAgKiBBcHBlbmQgaG9zdCAoLUgpIHBhcmFtZXRlciB0byB0aGUgcGFyYW1zIGxpc3QgaWYgdGhlIHJlcG9zaXRvcnkgaGFzIHRoaXMgaW5mb3JtYXRpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSByZXBvc2l0b3J5IEFjY3VSZXZTY21Qcm92aWRlclJlcG9zaXRvcnkKKyAgICAgKiBAcGFyYW0gcGFyYW1zICAgICBQYXJhbWV0ZXJzCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGFwcGVuZEhvc3RUb1BhcmFtc0lmTmVlZGVkKCBBY2N1UmV2U2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIExpc3QgcGFyYW1zICkKKyAgICB7CisgICAgICAgIGlmICggcmVwb3NpdG9yeS5nZXRIb3N0KCkgIT0gbnVsbCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcmFtcy5hZGQoICItSCIgKTsKKyAgICAgICAgICAgIHBhcmFtcy5hZGQoIHJlcG9zaXRvcnkuZ2V0SG9zdCgpICsgIjoiICsgU3RyaW5nLnZhbHVlT2YoIHJlcG9zaXRvcnkuZ2V0UG9ydCgpICkgKTsKKyAgICAgICAgfQorICAgIH0KIAotCS8qKgotCSAqIFByb2Nlc3MgZGVwb3QsIHN0cmVhbSBhbmQgd29ya3NwYWNlIGZyb20gdGhlIGdpdmVuIHN0cmluZwotCSAqCi0JICogQHBhcmFtIGRlcG90U3RyZWFtV29ya3NwYWNlIFN0cmluZyB0aGF0IGNvbnRhaW5zIGRlcG90LCBzdHJlYW0gYW5kIHdvcmtzcGFjZSBuYW1lIGluZm9ybWF0aW9uCi0JICogQHBhcmFtIGRlbGltZXRlcgkJCURlbGltZXRlciBjaGFyCi0JICogQHBhcmFtIHJlcFJlZgkJCSAgIEFjY3VSZXZTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVmZXJlbmNlIHdoZXJlIHRoZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHN0b3JlZAotCSAqIEB0aHJvd3MgU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbiBJZiB0aGVyZSB3YXMgYSB2YWxpZGF0aW9uIGVycm9yIHdoaWxlIHByb2Nlc3NpbmcgdGhlIFVSTAotCSAqLwotCXByaXZhdGUgdm9pZCBwcm9jZXNzRGVwb3RTdHJlYW1BbmRXb3Jrc3BhY2UoZmluYWwgU3RyaW5nIGRlcG90U3RyZWFtV29ya3NwYWNlLAotCQkJCQkJCQkJCQkJZmluYWwgY2hhciBkZWxpbWV0ZXIsCi0JCQkJCQkJCQkJCQlmaW5hbCBBY2N1UmV2U2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcFJlZikKLQkJCXRocm93cyBTY21SZXBvc2l0b3J5RXhjZXB0aW9uIHsKLQkJTGlua2VkTGlzdCBwYXJ0cyA9IHNwbGl0U3RyaW5nKGRlcG90U3RyZWFtV29ya3NwYWNlLCBkZWxpbWV0ZXIsIHRydWUpOwotCQlpZiAocGFydHMuc2l6ZSgpIDwgMikgewotCQkJdGhyb3cgbmV3IFNjbVJlcG9zaXRvcnlFeGNlcHRpb24oIkludmFsaWQgc2NtVXJsLiBEZXBvdCBhbmQgc3RyZWFtIG5hbWVzIGFyZSByZXF1aXJlZCIpOwotCQl9Ci0JCS8vU2V0IGRlcG90Ci0JCVN0cmluZyBkZXBvdCA9IChTdHJpbmcpIHBhcnRzLnJlbW92ZUZpcnN0KCk7Ci0JCWlmIChudWxsID09IGRlcG90KSB0aHJvdyBuZXcgU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbigiRGVwb3QgbmFtZSBpcyBtaXNzaW5nIik7Ci0JCXJlcFJlZi5zZXREZXBvdChkZXBvdCk7CisgICAgLyoqCisgICAgICogUmVzb2x2ZXMgYWNjdXJldiBleGVjdXRhYmxlCisgICAgICoKKyAgICAgKiBAcGFyYW0gd2luZG93cyBJcyBPUyBpcyB3aW5kb3dzCisgICAgICogQHJldHVybiBBY2N1UmV2IGV4ZWN1dGFibGUKKyAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBJZiB0aGUgZXhlY3V0YWJsZSBjYW5ub3QgYmUgcmVzb2x2ZWQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcmVzb2x2ZUFjY3VyZXZFeGVjdXRhYmxlKCBib29sZWFuIHdpbmRvd3MgKQorICAgIHsKKyAgICAgICAgU3RyaW5nIGV4ZWN1dGFibGUgPSAiYWNjdXJldiI7CisgICAgICAgIC8vQXBwZW5kICIuZXhlIiBzdWZmaXggaWYgdGhlIE9TIGlzIFdpbmRvd3MKKyAgICAgICAgaWYgKCB3aW5kb3dzICkKKyAgICAgICAgeworICAgICAgICAgICAgZXhlY3V0YWJsZSArPSAiLmV4ZSI7CisgICAgICAgIH0KKyAgICAgICAgLy9HcmFiIGV4ZXVjdXRhYmxlIGZyb20gc3lzdGVtIHZhcmlhYmxlIGlmIHNwZWNpZmllZAorICAgICAgICBTdHJpbmcgYWNjdXJldkV4ZWN1dGFibGUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoICJhY2N1cmV2RXhlY3V0YWJsZSIgKTsKKyAgICAgICAgaWYgKCBhY2N1cmV2RXhlY3V0YWJsZSAhPSBudWxsICkKKyAgICAgICAgeworICAgICAgICAgICAgZXhlY3V0YWJsZSA9IGFjY3VyZXZFeGVjdXRhYmxlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBleGVjdXRhYmxlOworICAgIH0KIAotCQkvL1NldCBzdHJlYW0KLQkJU3RyaW5nIHN0cmVhbU5hbWUgPSAoU3RyaW5nKSBwYXJ0cy5yZW1vdmVGaXJzdCgpOwotCQlpZiAobnVsbCA9PSBzdHJlYW1OYW1lKSB0aHJvdyBuZXcgU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbigiU3RyZWFtIG5hbWUgaXMgbWlzc2luZyIpOwotCQlyZXBSZWYuc2V0U3RyZWFtTmFtZShzdHJlYW1OYW1lKTsKKyAgICAvKioKKyAgICAgKiBTcGxpdCB0aGUgZ2l2ZW4gc3RyaW5nIHdpdGggc2VwYXJhdG9yIGNoYXIKKyAgICAgKgorICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgIFN0cmluZyB0byBiZSBzcGxpdHRlZAorICAgICAqIEBwYXJhbSBzZXBhcmF0b3JDaGFyIHNlcGFyYXRvciBjaGFyCisgICAgICogQHBhcmFtIGJsYW5rSXNOdWxsICAgSWYgdGhlIHBhcmFtZXRlciBpcyB0cnVlIHRoZW4gaWYgdGhlIHN1YnN0cmluZyBpcyBibGFuayB0aGVuIGl0IHdpbGwgYmUgY29uc2lkZXJlZCBhcyBudWxsCisgICAgICogQHJldHVybiBMaW5rZWQgbGlzdCB3aGljaCBjb250YWlucyBzdHJpbmdzCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgTGlua2VkTGlzdCBzcGxpdFN0cmluZyggU3RyaW5nIHN0cmluZywgY2hhciBzZXBhcmF0b3JDaGFyLCBib29sZWFuIGJsYW5rSXNOdWxsICkKKyAgICB7CisgICAgICAgIExpbmtlZExpc3QgcGFydHMgPSBuZXcgTGlua2VkTGlzdCgpOworICAgICAgICBpbnQgZnJvbUlkeCA9IDA7CisgICAgICAgIGZvciAoIGludCBpZHg7ICggaWR4ID0gc3RyaW5nLmluZGV4T2YoIHNlcGFyYXRvckNoYXIsIGZyb21JZHggKSApICE9IC0xOyBmcm9tSWR4ID0gKytpZHggKQorICAgICAgICB7CisgICAgICAgICAgICBwYXJ0cy5hZGQoIGdldFN1YnN0cmluZyggc3RyaW5nLCBmcm9tSWR4LCBpZHgsIGJsYW5rSXNOdWxsICkgKTsKKyAgICAgICAgfQorICAgICAgICAvL0FkZCBsYXN0IHRva2VuCisgICAgICAgIHBhcnRzLmFkZCggZ2V0U3Vic3RyaW5nKCBzdHJpbmcsIGZyb21JZHgsIHN0cmluZy5sZW5ndGgoKSwgYmxhbmtJc051bGwgKSApOworICAgICAgICByZXR1cm4gcGFydHM7CisgICAgfQogCi0JCS8vU2V0IHdvcmtzcGFjZSBpZiBzcGVjaWZpZWQKLQkJaWYgKCFwYXJ0cy5pc0VtcHR5KCkpIHsKLQkJCXJlcFJlZi5zZXRXb3Jrc3BhY2VOYW1lKChTdHJpbmcpIHBhcnRzLnJlbW92ZUZpcnN0KCkpOwotCQl9CisgICAgLyoqCisgICAgICogR2V0IHN1YnN0cmluZyBmcm9tIHN0cmluZworICAgICAqCisgICAgICogQHBhcmFtIHN0cmluZyAgICAgIHNvdXJjZSBzdHJpbmcKKyAgICAgKiBAcGFyYW0gZnJvbUlkeCAgICAgZnJvbSBpbmRleAorICAgICAqIEBwYXJhbSB0b0lkeCAgICAgICB0byBpbmRleAorICAgICAqIEBwYXJhbSBibGFua0lzTnVsbCBJZiB0aGUgcGFyYW1ldGVyIGlzIHRydWUgdGhlbiBpZiB0aGUgc3Vic3RyaW5nIGlzIGJsYW5rIHRoZW4gbnVsbCB3aWxsIGJlIHJldHVybmVkCisgICAgICogQHJldHVybiBTdWJzdHJpbmcgb3IgdGhlIG51bGwgaWYgdGhlIHN1YnN0cmluZyBpcyBlbXB0eSBhbmQgdGhlIGJsYW5rSXNOdWxsIHBhcmFtZXRlciBpcyB0cnVlCisgICAgICogQHNlZSBTdHJpbmcjc3Vic3RyaW5nKGludCxpbnQpCisgICAgICogQHNlZSBTdHJpbmdVdGlscyNpc0JsYW5rKFN0cmluZykKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3Vic3RyaW5nKCBTdHJpbmcgc3RyaW5nLCBpbnQgZnJvbUlkeCwgaW50IHRvSWR4LCBib29sZWFuIGJsYW5rSXNOdWxsICkKKyAgICB7CisgICAgICAgIFN0cmluZyBzdWJzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nKCBmcm9tSWR4LCB0b0lkeCApOworICAgICAgICByZXR1cm4gKCBibGFua0lzTnVsbCAmJiBTdHJpbmdVdGlscy5pc0VtcHR5KCBzdWJzdHJpbmcgKSApID8gbnVsbCA6IHN1YnN0cmluZzsKKyAgICB9CiAKLQkJaWYgKCFwYXJ0cy5pc0VtcHR5KCkpIHsKLQkJCXRocm93IG5ldyBTY21SZXBvc2l0b3J5RXhjZXB0aW9uKCJJbnZhbGlkIHdvcmtzcGFjZSBhc3Nvc2lhdGlvbiBwYXRoOiAiICsKLQkJCQkJZGVwb3RTdHJlYW1Xb3Jrc3BhY2UgKyAiLiBTaG91bGQgYmUgaW4gZm9ybWF0IFwiPGRlcG90PiIgKyBkZWxpbWV0ZXIgKwotCQkJCQkiPHN0cmVhbT4iICsgZGVsaW1ldGVyICsgIjx3b3Jrc3BhY2U+XCIiKTsKLQkJfQotCQlpZiAocmVwUmVmLmdldFdvcmtzcGFjZU5hbWUoKSA9PSBudWxsKSB7Ci0JCQkvL1RPRE8gVXNlICdhY2N1cmV2IHNob3cgd3NwYWNlcycgdG8gcmVzb2x2ZSB0aGUgd29ya3NwYWNlIG5hbWUgYnkgdGhlIHdvcmtzcGFjZSBwYXRoCi0JCX0KLQl9CisgICAgLyoqCisgICAgICogUHJvY2VzcyBkZXBvdCwgc3RyZWFtIGFuZCB3b3Jrc3BhY2UgZnJvbSB0aGUgZ2l2ZW4gc3RyaW5nCisgICAgICoKKyAgICAgKiBAcGFyYW0gZGVwb3RTdHJlYW1Xb3Jrc3BhY2UgU3RyaW5nIHRoYXQgY29udGFpbnMgZGVwb3QsIHN0cmVhbSBhbmQgd29ya3NwYWNlIG5hbWUgaW5mb3JtYXRpb24KKyAgICAgKiBAcGFyYW0gZGVsaW1ldGVyICAgICAgICAgICAgRGVsaW1ldGVyIGNoYXIKKyAgICAgKiBAcGFyYW0gcmVwUmVmICAgICAgICAgICAgICAgQWNjdVJldlNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZWZlcmVuY2Ugd2hlcmUgdGhlIGluZm9ybWF0aW9uIHdpbGwgYmUgc3RvcmVkCisgICAgICogQHRocm93cyBTY21SZXBvc2l0b3J5RXhjZXB0aW9uIElmIHRoZXJlIHdhcyBhIHZhbGlkYXRpb24gZXJyb3Igd2hpbGUgcHJvY2Vzc2luZyB0aGUgVVJMCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NEZXBvdFN0cmVhbUFuZFdvcmtzcGFjZSggZmluYWwgU3RyaW5nIGRlcG90U3RyZWFtV29ya3NwYWNlLCBmaW5hbCBjaGFyIGRlbGltZXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBBY2N1UmV2U2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcFJlZiApCisgICAgICAgIHRocm93cyBTY21SZXBvc2l0b3J5RXhjZXB0aW9uCisgICAgeworICAgICAgICBMaW5rZWRMaXN0IHBhcnRzID0gc3BsaXRTdHJpbmcoIGRlcG90U3RyZWFtV29ya3NwYWNlLCBkZWxpbWV0ZXIsIHRydWUgKTsKKyAgICAgICAgaWYgKCBwYXJ0cy5zaXplKCkgPCAyICkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IFNjbVJlcG9zaXRvcnlFeGNlcHRpb24oICJJbnZhbGlkIHNjbVVybC4gRGVwb3QgYW5kIHN0cmVhbSBuYW1lcyBhcmUgcmVxdWlyZWQiICk7CisgICAgICAgIH0KKyAgICAgICAgLy9TZXQgZGVwb3QKKyAgICAgICAgU3RyaW5nIGRlcG90ID0gKFN0cmluZykgcGFydHMucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgaWYgKCBudWxsID09IGRlcG90ICkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IFNjbVJlcG9zaXRvcnlFeGNlcHRpb24oICJEZXBvdCBuYW1lIGlzIG1pc3NpbmciICk7CisgICAgICAgIH0KKyAgICAgICAgcmVwUmVmLnNldERlcG90KCBkZXBvdCApOworCisgICAgICAgIC8vU2V0IHN0cmVhbQorICAgICAgICBTdHJpbmcgc3RyZWFtTmFtZSA9IChTdHJpbmcpIHBhcnRzLnJlbW92ZUZpcnN0KCk7CisgICAgICAgIGlmICggbnVsbCA9PSBzdHJlYW1OYW1lICkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IFNjbVJlcG9zaXRvcnlFeGNlcHRpb24oICJTdHJlYW0gbmFtZSBpcyBtaXNzaW5nIiApOworICAgICAgICB9CisgICAgICAgIHJlcFJlZi5zZXRTdHJlYW1OYW1lKCBzdHJlYW1OYW1lICk7CisKKyAgICAgICAgLy9TZXQgd29ya3NwYWNlIGlmIHNwZWNpZmllZAorICAgICAgICBpZiAoICFwYXJ0cy5pc0VtcHR5KCkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXBSZWYuc2V0V29ya3NwYWNlTmFtZSggKFN0cmluZykgcGFydHMucmVtb3ZlRmlyc3QoKSApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAhcGFydHMuaXNFbXB0eSgpICkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IFNjbVJlcG9zaXRvcnlFeGNlcHRpb24oICJJbnZhbGlkIHdvcmtzcGFjZSBhc3Nvc2lhdGlvbiBwYXRoOiAiICsgZGVwb3RTdHJlYW1Xb3Jrc3BhY2UKKyAgICAgICAgICAgICAgICArICIuIFNob3VsZCBiZSBpbiBmb3JtYXQgXCI8ZGVwb3Q+IiArIGRlbGltZXRlciArICI8c3RyZWFtPiIgKyBkZWxpbWV0ZXIgKyAiPHdvcmtzcGFjZT5cIiIgKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIHJlcFJlZi5nZXRXb3Jrc3BhY2VOYW1lKCkgPT0gbnVsbCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vVE9ETyBVc2UgJ2FjY3VyZXYgc2hvdyB3c3BhY2VzJyB0byByZXNvbHZlIHRoZSB3b3Jrc3BhY2UgbmFtZSBieSB0aGUgd29ya3NwYWNlIHBhdGgKKyAgICAgICAgfQorICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYWNjdXJldi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2FjY3VyZXYvQWNjdVJldlNjbVByb3ZpZGVyUmVwb3NpdG9yeS5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYWNjdXJldi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2FjY3VyZXYvQWNjdVJldlNjbVByb3ZpZGVyUmVwb3NpdG9yeS5qYXZhCmluZGV4IGQ1NjViZTkuLjA4MWQzOWIgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXYvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9hY2N1cmV2L0FjY3VSZXZTY21Qcm92aWRlclJlcG9zaXRvcnkuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1hY2N1cmV2L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYWNjdXJldi9BY2N1UmV2U2NtUHJvdmlkZXJSZXBvc2l0b3J5LmphdmEKQEAgLTEsMTkgKzEsMjIgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuYWNjdXJldjsKIAogLyoKLSAqIENvcHlyaWdodCAyMDA4IEFjY3VSZXYgSW5jLgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5OwpAQCAtMjEsODggKzI0LDEwNCBAQAogaW1wb3J0IGphdmEudXRpbC5NYXA7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiAKLXB1YmxpYyBjbGFzcyBBY2N1UmV2U2NtUHJvdmlkZXJSZXBvc2l0b3J5IGV4dGVuZHMgU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1BPUlQgPSA1MDUwOworLyoqCisgKiBAdmVyc2lvbiAkSWQkCisgKi8KK3B1YmxpYyBjbGFzcyBBY2N1UmV2U2NtUHJvdmlkZXJSZXBvc2l0b3J5CisgICAgZXh0ZW5kcyBTY21Qcm92aWRlclJlcG9zaXRvcnkKK3sKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1BPUlQgPSA1MDUwOwogCi0JcHJpdmF0ZSBTdHJpbmcgZGVwb3Q7CisgICAgcHJpdmF0ZSBTdHJpbmcgZGVwb3Q7CiAKLQlwcml2YXRlIFN0cmluZyBzdHJlYW1OYW1lOworICAgIHByaXZhdGUgU3RyaW5nIHN0cmVhbU5hbWU7CiAKLQlwcml2YXRlIFN0cmluZyB3b3Jrc3BhY2VOYW1lOworICAgIHByaXZhdGUgU3RyaW5nIHdvcmtzcGFjZU5hbWU7CiAKLQlwcml2YXRlIFN0cmluZyBob3N0OworICAgIHByaXZhdGUgU3RyaW5nIGhvc3Q7CiAKLQlwcml2YXRlIGludCBwb3J0ID0gREVGQVVMVF9QT1JUOworICAgIHByaXZhdGUgaW50IHBvcnQgPSBERUZBVUxUX1BPUlQ7CiAKLQlwcml2YXRlIFN0cmluZyBjaGVja291dE1ldGhvZDsKKyAgICBwcml2YXRlIFN0cmluZyBjaGVja291dE1ldGhvZDsKIAotCXByaXZhdGUgTWFwIHBhcmFtcyA9IG5ldyBIYXNoTWFwKCk7CisgICAgcHJpdmF0ZSBNYXAgcGFyYW1zID0gbmV3IEhhc2hNYXAoKTsKIAotCXB1YmxpYyBTdHJpbmcgZ2V0RGVwb3QoKSB7Ci0JCXJldHVybiBkZXBvdDsKLQl9CisgICAgcHVibGljIFN0cmluZyBnZXREZXBvdCgpCisgICAgeworICAgICAgICByZXR1cm4gZGVwb3Q7CisgICAgfQogCi0JcHVibGljIHZvaWQgc2V0RGVwb3QoU3RyaW5nIGRlcG90KSB7Ci0JCXRoaXMuZGVwb3QgPSBkZXBvdDsKLQl9CisgICAgcHVibGljIHZvaWQgc2V0RGVwb3QoIFN0cmluZyBkZXBvdCApCisgICAgeworICAgICAgICB0aGlzLmRlcG90ID0gZGVwb3Q7CisgICAgfQogCi0JcHVibGljIFN0cmluZyBnZXRTdHJlYW1OYW1lKCkgewotCQlyZXR1cm4gc3RyZWFtTmFtZTsKLQl9CisgICAgcHVibGljIFN0cmluZyBnZXRTdHJlYW1OYW1lKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdHJlYW1OYW1lOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHNldFN0cmVhbU5hbWUoU3RyaW5nIHN0cmVhbU5hbWUpIHsKLQkJdGhpcy5zdHJlYW1OYW1lID0gc3RyZWFtTmFtZTsKLQl9CisgICAgcHVibGljIHZvaWQgc2V0U3RyZWFtTmFtZSggU3RyaW5nIHN0cmVhbU5hbWUgKQorICAgIHsKKyAgICAgICAgdGhpcy5zdHJlYW1OYW1lID0gc3RyZWFtTmFtZTsKKyAgICB9CiAKLQlwdWJsaWMgU3RyaW5nIGdldFdvcmtzcGFjZU5hbWUoKSB7Ci0JCXJldHVybiB3b3Jrc3BhY2VOYW1lOwotCX0KKyAgICBwdWJsaWMgU3RyaW5nIGdldFdvcmtzcGFjZU5hbWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHdvcmtzcGFjZU5hbWU7CisgICAgfQogCi0JcHVibGljIHZvaWQgc2V0V29ya3NwYWNlTmFtZShTdHJpbmcgd29ya3NwYWNlTmFtZSkgewotCQl0aGlzLndvcmtzcGFjZU5hbWUgPSB3b3Jrc3BhY2VOYW1lOwotCX0KKyAgICBwdWJsaWMgdm9pZCBzZXRXb3Jrc3BhY2VOYW1lKCBTdHJpbmcgd29ya3NwYWNlTmFtZSApCisgICAgeworICAgICAgICB0aGlzLndvcmtzcGFjZU5hbWUgPSB3b3Jrc3BhY2VOYW1lOworICAgIH0KIAotCXB1YmxpYyBTdHJpbmcgZ2V0SG9zdCgpIHsKLQkJcmV0dXJuIGhvc3Q7Ci0JfQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0SG9zdCgpCisgICAgeworICAgICAgICByZXR1cm4gaG9zdDsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBzZXRIb3N0KFN0cmluZyBob3N0KSB7Ci0JCXRoaXMuaG9zdCA9IGhvc3Q7Ci0JfQorICAgIHB1YmxpYyB2b2lkIHNldEhvc3QoIFN0cmluZyBob3N0ICkKKyAgICB7CisgICAgICAgIHRoaXMuaG9zdCA9IGhvc3Q7CisgICAgfQogCi0JcHVibGljIGludCBnZXRQb3J0KCkgewotCQlyZXR1cm4gcG9ydDsKLQl9CisgICAgcHVibGljIGludCBnZXRQb3J0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBwb3J0OworICAgIH0KIAotCXB1YmxpYyB2b2lkIHNldFBvcnQoaW50IHBvcnQpIHsKLQkJdGhpcy5wb3J0ID0gcG9ydDsKLQl9CisgICAgcHVibGljIHZvaWQgc2V0UG9ydCggaW50IHBvcnQgKQorICAgIHsKKyAgICAgICAgdGhpcy5wb3J0ID0gcG9ydDsKKyAgICB9CiAKLQlwdWJsaWMgU3RyaW5nIGdldENoZWNrb3V0TWV0aG9kKCkgewotCQlyZXR1cm4gY2hlY2tvdXRNZXRob2Q7Ci0JfQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2hlY2tvdXRNZXRob2QoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNoZWNrb3V0TWV0aG9kOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHNldENoZWNrb3V0TWV0aG9kKFN0cmluZyBjaGVja291dE1ldGhvZCkgewotCQl0aGlzLmNoZWNrb3V0TWV0aG9kID0gY2hlY2tvdXRNZXRob2Q7Ci0JfQorICAgIHB1YmxpYyB2b2lkIHNldENoZWNrb3V0TWV0aG9kKCBTdHJpbmcgY2hlY2tvdXRNZXRob2QgKQorICAgIHsKKyAgICAgICAgdGhpcy5jaGVja291dE1ldGhvZCA9IGNoZWNrb3V0TWV0aG9kOworICAgIH0KIAotCXB1YmxpYyBNYXAgZ2V0UGFyYW1zKCkgewotCQlyZXR1cm4gcGFyYW1zOwotCX0KKyAgICBwdWJsaWMgTWFwIGdldFBhcmFtcygpCisgICAgeworICAgICAgICByZXR1cm4gcGFyYW1zOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHNldFBhcmFtcyhNYXAgcGFyYW1zKSB7Ci0JCXRoaXMucGFyYW1zID0gcGFyYW1zOwotCX0KKyAgICBwdWJsaWMgdm9pZCBzZXRQYXJhbXMoIE1hcCBwYXJhbXMgKQorICAgIHsKKyAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7CisgICAgfQogCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJcmV0dXJuIG5ldyBTdHJpbmdCdWZmZXIoKQotCQkJCS5hcHBlbmQoImhvc3Q6IikuYXBwZW5kKHRoaXMuaG9zdCkKLQkJCQkuYXBwZW5kKCIsIHBvcnQ6IikuYXBwZW5kKHRoaXMucG9ydCkKLQkJCQkuYXBwZW5kKCIsIGRlcG90OiIpLmFwcGVuZCh0aGlzLmRlcG90KQotCQkJCS5hcHBlbmQoIiwgc3RyZWFtTmFtZToiKS5hcHBlbmQodGhpcy5zdHJlYW1OYW1lKQotCQkJCS5hcHBlbmQoIiwgd29ya3NwYWNlTmFtZToiKS5hcHBlbmQodGhpcy53b3Jrc3BhY2VOYW1lKQotCQkJCS5hcHBlbmQoIiwgY2hlY2tvdXRNZXRob2Q6IikuYXBwZW5kKHRoaXMuY2hlY2tvdXRNZXRob2QpCi0JCQkJLmFwcGVuZCgiLCBwYXJhbXM6IikuYXBwZW5kKHRoaXMucGFyYW1zKQotCQkJCS50b1N0cmluZygpOwotCX0KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdCdWZmZXIoKS5hcHBlbmQoICJob3N0OiIgKS5hcHBlbmQoIHRoaXMuaG9zdCApLmFwcGVuZCggIiwgcG9ydDoiICkuYXBwZW5kKCB0aGlzLnBvcnQgKQorICAgICAgICAgICAgLmFwcGVuZCggIiwgZGVwb3Q6IiApLmFwcGVuZCggdGhpcy5kZXBvdCApLmFwcGVuZCggIiwgc3RyZWFtTmFtZToiICkuYXBwZW5kKCB0aGlzLnN0cmVhbU5hbWUgKQorICAgICAgICAgICAgLmFwcGVuZCggIiwgd29ya3NwYWNlTmFtZToiICkuYXBwZW5kKCB0aGlzLndvcmtzcGFjZU5hbWUgKS5hcHBlbmQoICIsIGNoZWNrb3V0TWV0aG9kOiIgKQorICAgICAgICAgICAgLmFwcGVuZCggdGhpcy5jaGVja291dE1ldGhvZCApLmFwcGVuZCggIiwgcGFyYW1zOiIgKS5hcHBlbmQoIHRoaXMucGFyYW1zICkudG9TdHJpbmcoKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1hY2N1cmV2L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYWNjdXJldi9jb21tYW5kcy9hZGQvQWNjdVJldkFkZENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXYvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9hY2N1cmV2L2NvbW1hbmRzL2FkZC9BY2N1UmV2QWRkQ29tbWFuZC5qYXZhCmluZGV4IGZhZDUyZDkuLmM1NzM2ODggMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXYvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9hY2N1cmV2L2NvbW1hbmRzL2FkZC9BY2N1UmV2QWRkQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXYvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9hY2N1cmV2L2NvbW1hbmRzL2FkZC9BY2N1UmV2QWRkQ29tbWFuZC5qYXZhCkBAIC0xLDE5ICsxLDIyIEBACiBwYWNrYWdlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmFjY3VyZXYuY29tbWFuZHMuYWRkOwogCiAvKgotICogQ29weXJpZ2h0IDIwMDggQWNjdVJldiBJbmMuCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLmFkZC5BYnN0cmFjdEFkZENvbW1hbmQ7CkBAIC0zMywyMCArMzYsMjQgQEAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLmlvLkZpbGU7CiAKKy8qKgorICogQHZlcnNpb24gJElkJAorICovCiBwdWJsaWMgY2xhc3MgQWNjdVJldkFkZENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdEFkZENvbW1hbmQKIHsKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBfYWNjdXJldkV4ZWN1dGFibGU7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgYWNjdXJldkV4ZWN1dGFibGU7CiAKLSAgICBwdWJsaWMgQWNjdVJldkFkZENvbW1hbmQoIFN0cmluZyBhY2N1cmV2RXhlY3V0YWJsZSApCisgICAgcHVibGljIEFjY3VSZXZBZGRDb21tYW5kKCBTdHJpbmcgYWNjdXJldkV4ZWMgKQogICAgIHsKLSAgICAgICAgX2FjY3VyZXZFeGVjdXRhYmxlID0gYWNjdXJldkV4ZWN1dGFibGU7CisgICAgICAgIGFjY3VyZXZFeGVjdXRhYmxlID0gYWNjdXJldkV4ZWM7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU2NtUmVzdWx0IGV4ZWN1dGVBZGRDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlLCBib29sZWFuIGJpbmFyeSApIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIENvbW1hbmRsaW5lIGNsID0gbmV3IENvbW1hbmRsaW5lKCk7Ci0gICAgICAgIGNsLnNldEV4ZWN1dGFibGUoIF9hY2N1cmV2RXhlY3V0YWJsZSApOworICAgICAgICBjbC5zZXRFeGVjdXRhYmxlKCBhY2N1cmV2RXhlY3V0YWJsZSApOwogICAgICAgICBjbC5zZXRXb3JraW5nRGlyZWN0b3J5KCBmaWxlU2V0LmdldEJhc2VkaXIoKS5nZXRQYXRoKCkgKTsKICAgICAgICAgY2wuYWRkQXJndW1lbnRzKCBuZXcgU3RyaW5nW117ImFkZCJ9ICk7CiAgICAgICAgIEFycmF5TGlzdCBwYXJhbXMgPSBuZXcgQXJyYXlMaXN0KCk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1hY2N1cmV2L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYWNjdXJldi9jb21tYW5kcy9hZGQvQWRkQ29tbWFuZFN0cmVhbUNvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1hY2N1cmV2L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYWNjdXJldi9jb21tYW5kcy9hZGQvQWRkQ29tbWFuZFN0cmVhbUNvbnN1bWVyLmphdmEKaW5kZXggZDQxZmVkNS4uZTU2OGNjNyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYWNjdXJldi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2FjY3VyZXYvY29tbWFuZHMvYWRkL0FkZENvbW1hbmRTdHJlYW1Db25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXYvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9hY2N1cmV2L2NvbW1hbmRzL2FkZC9BZGRDb21tYW5kU3RyZWFtQ29uc3VtZXIuamF2YQpAQCAtMSwxOSArMSwyMiBAQAogcGFja2FnZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5hY2N1cmV2LmNvbW1hbmRzLmFkZDsKIAogLyoKLSAqIENvcHlyaWdodCAyMDA4IEFjY3VSZXYgSW5jLgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCiBpbXBvcnQgb3JnLmNvZGVoYXVzLnBsZXh1cy51dGlsLmNsaS5TdHJlYW1Db25zdW1lcjsKQEAgLTIyLDEyICsyNSwxOCBAQAogaW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOwogaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwogCi0vKiogU3RyZWFtIGNvbnN1bWVyIGZvciBjb2xsZWN0aW5nIGZpbGVzIHRoYXQgd2VyZSBhZGRlZCB3aXRoIHRoZSBhZGQgY29tbWFuZCAqLwotY2xhc3MgQWRkQ29tbWFuZFN0cmVhbUNvbnN1bWVyIGltcGxlbWVudHMgU3RyZWFtQ29uc3VtZXIKKy8qKgorICogU3RyZWFtIGNvbnN1bWVyIGZvciBjb2xsZWN0aW5nIGZpbGVzIHRoYXQgd2VyZSBhZGRlZCB3aXRoIHRoZSBhZGQgY29tbWFuZAorICoKKyAqIEB2ZXJzaW9uICRJZCQKKyAqLworY2xhc3MgQWRkQ29tbWFuZFN0cmVhbUNvbnN1bWVyCisgICAgaW1wbGVtZW50cyBTdHJlYW1Db25zdW1lcgogewotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFBhdHRlcm4gcGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZSggIkFkZGVkIGFuZCBrZXB0IGVsZW1lbnRcXHMqKC4qKSIgKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBQYXR0ZXJuIFBBVFRFUk4gPSBQYXR0ZXJuLmNvbXBpbGUoICJBZGRlZCBhbmQga2VwdCBlbGVtZW50XFxzKiguKikiICk7CiAKICAgICBwcml2YXRlIGZpbmFsIFN0cmVhbUNvbnN1bWVyIHN0ZG91dDsKKwogICAgIHByaXZhdGUgZmluYWwgTGlzdCBmaWxlc0FkZGVkOwogCiAgICAgLyoqCkBAIC00MCwxNSArNDksMTYgQEAKICAgICAgICAgdGhpcy5maWxlc0FkZGVkID0gZmlsZXNBZGRlZDsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBzdGRvdXQuY29uc3VtZUxpbmUoIGxpbmUgKTsKIAotICAgICAgICBNYXRjaGVyIG0gPSBwYXR0ZXJuLm1hdGNoZXIoIGxpbmUgKTsKKyAgICAgICAgTWF0Y2hlciBtID0gUEFUVEVSTi5tYXRjaGVyKCBsaW5lICk7CiAgICAgICAgIGlmICggbS5tYXRjaGVzKCkgKQogICAgICAgICB7CiAgICAgICAgICAgICBTdHJpbmcgZWxlbWVudCA9IG0uZ3JvdXAoIDEgKTsKICAgICAgICAgICAgIHRoaXMuZmlsZXNBZGRlZC5hZGQoIGVsZW1lbnQgKTsKICAgICAgICAgfQotCX0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1hY2N1cmV2L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYWNjdXJldi9jb21tYW5kcy9jaGVja291dC9BY2N1UmV2Q2hlY2tPdXRVc2luZ1BvcENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXYvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9hY2N1cmV2L2NvbW1hbmRzL2NoZWNrb3V0L0FjY3VSZXZDaGVja091dFVzaW5nUG9wQ29tbWFuZC5qYXZhCmluZGV4IGEwOGQxODAuLjY5ODk2MTggMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXYvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9hY2N1cmV2L2NvbW1hbmRzL2NoZWNrb3V0L0FjY3VSZXZDaGVja091dFVzaW5nUG9wQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXYvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9hY2N1cmV2L2NvbW1hbmRzL2NoZWNrb3V0L0FjY3VSZXZDaGVja091dFVzaW5nUG9wQ29tbWFuZC5qYXZhCkBAIC0xLDE5ICsxLDIyIEBACiBwYWNrYWdlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmFjY3VyZXYuY29tbWFuZHMuY2hlY2tvdXQ7CiAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOCBBY2N1UmV2IEluYy4KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAgKgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUV4Y2VwdGlvbjsKQEAgLTM2LDcgKzM5LDEyIEBACiBpbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47CiBpbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7CiAKLXB1YmxpYyBjbGFzcyBBY2N1UmV2Q2hlY2tPdXRVc2luZ1BvcENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdENoZWNrT3V0Q29tbWFuZCBpbXBsZW1lbnRzIEJhc2VBY2N1UmV2Q2hlY2tPdXRDb21tYW5kCisvKioKKyAqIEB2ZXJzaW9uICRJZCQKKyAqLworcHVibGljIGNsYXNzIEFjY3VSZXZDaGVja091dFVzaW5nUG9wQ29tbWFuZAorICAgIGV4dGVuZHMgQWJzdHJhY3RDaGVja091dENvbW1hbmQKKyAgICBpbXBsZW1lbnRzIEJhc2VBY2N1UmV2Q2hlY2tPdXRDb21tYW5kCiB7CiAgICAgcHJpdmF0ZSBTdHJpbmcgYWNjdVJldkV4ZWN1dGFibGU7CiAKQEAgLTQ1LDEzICs1MywxNiBAQAogICAgICAgICB0aGlzLmFjY3VSZXZFeGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWV0aG9kTmFtZSgpCiAgICAgewogICAgICAgICByZXR1cm4gInBvcCI7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hlY2tPdXRTY21SZXN1bHQgZXhlY3V0ZUNoZWNrT3V0Q29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiB2ZXJzaW9uICkgdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHZlcnNpb24gKQorICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICB0cnkKICAgICAgICAgewpAQCAtODcsMTMgKzk4LDE0IEBACiAgICAgICAgICAgICAvL0NoZWNrIGlmIHRoZSB1cGRhdGUgY29tbWFuZCBzdWNjZXNzZWVkCiAgICAgICAgICAgICBpZiAoIGV4aXRDb2RlICE9IDAgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2hlY2tPdXRTY21SZXN1bHQoIHBvcENvbW1hbmRsaW5lLnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICJUaGUgQWNjdVJldiBjb21tYW5kIGZhaWxlZCIsIHN0ZG91dC5nZXRPdXRwdXQoKSwgZmFsc2UgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENoZWNrT3V0U2NtUmVzdWx0KCBwb3BDb21tYW5kbGluZS50b1N0cmluZygpLCAiVGhlIEFjY3VSZXYgY29tbWFuZCBmYWlsZWQiLCBzdGRvdXQKKyAgICAgICAgICAgICAgICAgICAgLmdldE91dHB1dCgpLCBmYWxzZSApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCBnZXRMb2dnZXIoKS5pc0luZm9FbmFibGVkKCkgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLmluZm8oICJDaGVja2VkIG91dCBzdHJlYW0gXCIiICsgYWNjdXJldlJlcG9zaXRvcnkuZ2V0U3RyZWFtTmFtZSgpICsKLSAgICAgICAgICAgICAgICAgICAgIlwiIGNvbnRlbnRzIHRvIGZvbGRlciAiICsgZmlsZVNldC5nZXRCYXNlZGlyKCkgKTsKKyAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS5pbmZvKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGVja2VkIG91dCBzdHJlYW0gXCIiICsgYWNjdXJldlJlcG9zaXRvcnkuZ2V0U3RyZWFtTmFtZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIlwiIGNvbnRlbnRzIHRvIGZvbGRlciAiICsgZmlsZVNldC5nZXRCYXNlZGlyKCkgKTsKICAgICAgICAgICAgICAgICAvL1RPRE8gbm90aWZ5IHVzZXIgdGhhdCB0aGUgY2hlY2tlZCBmaWxlcyBhcmUgbm90IGluIHdvcmtzcGFjZSBhbmQgbm8gY2hhbmdlcyBjYW4gYmUgcHJvcGFnYXRlZCB0byBTQ00KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBuZXcgQ2hlY2tPdXRTY21SZXN1bHQoIHBvcENvbW1hbmRsaW5lLnRvU3RyaW5nKCksIGNoZWNrZWRGaWxlcyApOwpAQCAtMTA0LDggKzExNiw4IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcm90ZWN0ZWQgQ29tbWFuZGxpbmUgY3JlYXRlUG9wU3RyZWFtQ29tbWFuZCggQWNjdVJldlNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gdmVyc2lvbiApCisgICAgcHJvdGVjdGVkIENvbW1hbmRsaW5lIGNyZWF0ZVBvcFN0cmVhbUNvbW1hbmQoIEFjY3VSZXZTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgIHsKICAgICAgICAgLy9UT0RPIEltcGxlbWVudCBzdXBwb3J0IG9mIGZpbGVTZXQsIHZlcnNpb24gaWYgYXBwbHlhYmxlCiAgICAgICAgIENvbW1hbmRsaW5lIGNvbW1hbmRsaW5lID0gbmV3IENvbW1hbmRsaW5lKCk7CkBAIC0xMTgsOSArMTMwLDkgQEAKICAgICAgICAgLy9TZXQgY29tbWFuZCBwYXJhbWV0ZXJzCiAgICAgICAgIGNvbW1hbmRsaW5lLmFkZEFyZ3VtZW50cyggKFN0cmluZ1tdKSBwYXJhbXMudG9BcnJheSggbmV3IFN0cmluZ1twYXJhbXMuc2l6ZSgpXSApICk7CiAgICAgICAgIC8vQXBwZW5kIGNvbW1hbmQgcGFyYW1ldGVycwotICAgICAgICBjb21tYW5kbGluZS5hZGRBcmd1bWVudHMoIG5ldyBTdHJpbmdbXXsKLSAgICAgICAgICAgICItdiIsIHJlcG9zaXRvcnkuZ2V0U3RyZWFtTmFtZSgpLCAvL25hbWUgb2YgdGhlIHN0cmVhbQotICAgICAgICAgICAgIi1MIiwgZmlsZVNldC5nZXRCYXNlZGlyKCkuZ2V0QWJzb2x1dGVQYXRoKCksIC8vaW50byBmb2xkZXIKKyAgICAgICAgY29tbWFuZGxpbmUuYWRkQXJndW1lbnRzKCBuZXcgU3RyaW5nW10geyAiLXYiLCByZXBvc2l0b3J5LmdldFN0cmVhbU5hbWUoKSwgLy9uYW1lIG9mIHRoZSBzdHJlYW0KKyAgICAgICAgICAgICItTCIsCisgICAgICAgICAgICBmaWxlU2V0LmdldEJhc2VkaXIoKS5nZXRBYnNvbHV0ZVBhdGgoKSwgLy9pbnRvIGZvbGRlcgogICAgICAgICAgICAgIi1SIiAvL2dldCBmaWxlcyByZWN1cnNpdmVseQogICAgICAgICB9ICk7CiAgICAgICAgIExpc3QgZmlsZVNldEFyZ3VtZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXYvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9hY2N1cmV2L2NvbW1hbmRzL2NoZWNrb3V0L0FjY3VSZXZDaGVja091dFdvcmtzcGFjZUNvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXYvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9hY2N1cmV2L2NvbW1hbmRzL2NoZWNrb3V0L0FjY3VSZXZDaGVja091dFdvcmtzcGFjZUNvbW1hbmQuamF2YQppbmRleCA1YWFlMzU3Li4xMGY4Y2Q1IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1hY2N1cmV2L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYWNjdXJldi9jb21tYW5kcy9jaGVja291dC9BY2N1UmV2Q2hlY2tPdXRXb3Jrc3BhY2VDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYWNjdXJldi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2FjY3VyZXYvY29tbWFuZHMvY2hlY2tvdXQvQWNjdVJldkNoZWNrT3V0V29ya3NwYWNlQ29tbWFuZC5qYXZhCkBAIC0xLDE5ICsxLDIyIEBACiBwYWNrYWdlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmFjY3VyZXYuY29tbWFuZHMuY2hlY2tvdXQ7CiAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOCBBY2N1UmV2IEluYy4KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAgKgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUV4Y2VwdGlvbjsKQEAgLTM0LDcgKzM3LDEyIEBACiBpbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7CiBpbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47CiAKLXB1YmxpYyBjbGFzcyBBY2N1UmV2Q2hlY2tPdXRXb3Jrc3BhY2VDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3RDaGVja091dENvbW1hbmQgaW1wbGVtZW50cyBCYXNlQWNjdVJldkNoZWNrT3V0Q29tbWFuZAorLyoqCisgKiBAdmVyc2lvbiAkSWQkCisgKi8KK3B1YmxpYyBjbGFzcyBBY2N1UmV2Q2hlY2tPdXRXb3Jrc3BhY2VDb21tYW5kCisgICAgZXh0ZW5kcyBBYnN0cmFjdENoZWNrT3V0Q29tbWFuZAorICAgIGltcGxlbWVudHMgQmFzZUFjY3VSZXZDaGVja091dENvbW1hbmQKIHsKICAgICBwcml2YXRlIFN0cmluZyBhY2N1UmV2RXhlY3V0YWJsZTsKIApAQCAtNDMsMTMgKzUxLDE2IEBACiAgICAgICAgIHRoaXMuYWNjdVJldkV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRNZXRob2ROYW1lKCkKICAgICB7CiAgICAgICAgIHJldHVybiAibWt3cyI7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hlY2tPdXRTY21SZXN1bHQgZXhlY3V0ZUNoZWNrT3V0Q29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiB2ZXJzaW9uICkgdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHZlcnNpb24gKQorICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICB0cnkKICAgICAgICAgewpAQCAtNzAsOCArODEsOCBAQAogICAgICAgICAgICAgaWYgKCBleGl0Q29kZSAhPSAwICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENoZWNrT3V0U2NtUmVzdWx0KCBtYWtlQ29tbWFuZGxpbmUudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgIlRoZSBBY2N1UmV2IGNvbW1hbmQgZmFpbGVkLiBDYW5ub3QgY3JlYXRlIHdvcmtzcGFjZTogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQuZ2V0T3V0cHV0KCksIHN0ZG91dC5nZXRPdXRwdXQoKSwgZmFsc2UgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIEFjY3VSZXYgY29tbWFuZCBmYWlsZWQuIENhbm5vdCBjcmVhdGUgd29ya3NwYWNlOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3Rkb3V0LmdldE91dHB1dCgpLCBzdGRvdXQuZ2V0T3V0cHV0KCksIGZhbHNlICk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvL1VwZGF0ZSB0aGUgd29ya3NwYWNlCiAgICAgICAgICAgICBDb21tYW5kbGluZSB1cGRhdGVDb21tYW5kbGluZSA9IGNyZWF0ZVVwZGF0ZVdvcmtzcGFjZUNvbW1hbmQoIGFjY3VyZXZSZXBvc2l0b3J5LCBmaWxlU2V0LCB2ZXJzaW9uICk7CkBAIC05NywxMCArMTA4LDExIEBACiAgICAgICAgICAgICBpZiAoIGV4aXRDb2RlICE9IDAgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2hlY2tPdXRTY21SZXN1bHQoIHVwZGF0ZUNvbW1hbmRsaW5lLnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICJUaGUgQWNjdVJldiBjb21tYW5kIGZhaWxlZC4gQ2Fubm90IHVwZGF0ZSB3b3Jrc3BhY2UiLCBzdGRvdXQuZ2V0T3V0cHV0KCksIGZhbHNlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBBY2N1UmV2IGNvbW1hbmQgZmFpbGVkLiBDYW5ub3QgdXBkYXRlIHdvcmtzcGFjZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LmdldE91dHB1dCgpLCBmYWxzZSApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGVja091dFNjbVJlc3VsdCggbWFrZUNvbW1hbmRsaW5lLnRvU3RyaW5nKCkgKyAiICYgIiArIHVwZGF0ZUNvbW1hbmRsaW5lLnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgY2hlY2tlZEZpbGVzICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkRmlsZXMgKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoIENvbW1hbmRMaW5lRXhjZXB0aW9uIGUgKQogICAgICAgICB7CkBAIC0xMDgsOCArMTIwLDggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByb3RlY3RlZCBDb21tYW5kbGluZSBjcmVhdGVVcGRhdGVXb3Jrc3BhY2VDb21tYW5kKCBBY2N1UmV2U2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiB2ZXJzaW9uICkKKyAgICBwcm90ZWN0ZWQgQ29tbWFuZGxpbmUgY3JlYXRlVXBkYXRlV29ya3NwYWNlQ29tbWFuZCggQWNjdVJldlNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbVZlcnNpb24gdmVyc2lvbiApCiAgICAgewogICAgICAgICAvL1RPRE8gSW1wbGVtZW50IHN1cHBvcnQgb2YgZmlsZVNldCwgdmVyc2lvbiBpZiBhcHBseWFibGUKICAgICAgICAgQ29tbWFuZGxpbmUgY29tbWFuZGxpbmUgPSBuZXcgQ29tbWFuZGxpbmUoKTsKQEAgLTEyNywyNCArMTM5LDI2IEBACiAgICAgICAgIHJldHVybiBjb21tYW5kbGluZTsKICAgICB9CiAKLSAgICBwcm90ZWN0ZWQgQ29tbWFuZGxpbmUgY3JlYXRlTWFrZVdvcmtzcGFjZUNvbW1hbmRMaW5lKCBBY2N1UmV2U2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24gKQorICAgIHByb3RlY3RlZCBDb21tYW5kbGluZSBjcmVhdGVNYWtlV29ya3NwYWNlQ29tbWFuZExpbmUoIEFjY3VSZXZTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbVZlcnNpb24gdmVyc2lvbiApCiAgICAgewogICAgICAgICAvL1RPRE8gSW1wbGVtZW50IHN1cHBvcnQgb2YgZmlsZVNldCwgdmVyc2lvbiBpZiBhcHBseWFibGUKICAgICAgICAgQ29tbWFuZGxpbmUgY21kID0gbmV3IENvbW1hbmRsaW5lKCk7CiAgICAgICAgIGNtZC5zZXRFeGVjdXRhYmxlKCB0aGlzLmFjY3VSZXZFeGVjdXRhYmxlICk7CiAgICAgICAgIC8vQXBwZW5kIGNvbW1hbmQgbmFtZQotICAgICAgICBjbWQuYWRkQXJndW1lbnRzKCBuZXcgU3RyaW5nW117Im1rd3MifSApOworICAgICAgICBjbWQuYWRkQXJndW1lbnRzKCBuZXcgU3RyaW5nW10geyAibWt3cyIgfSApOwogICAgICAgICAvL0FwcGVuZCBob3N0IHBhcmFtIGlmIG5lZWRlZAogICAgICAgICBMaXN0IHBhcmFtcyA9IG5ldyBBcnJheUxpc3QoKTsKICAgICAgICAgQWNjdVJldlNjbVByb3ZpZGVyLmFwcGVuZEhvc3RUb1BhcmFtc0lmTmVlZGVkKCByZXBvc2l0b3J5LCBwYXJhbXMgKTsKICAgICAgICAgY21kLmFkZEFyZ3VtZW50cyggKFN0cmluZ1tdKSBwYXJhbXMudG9BcnJheSggbmV3IFN0cmluZ1twYXJhbXMuc2l6ZSgpXSApICk7CiAgICAgICAgIC8vQXBwZW5kIGNvbW1hbmQgYXJndW1lbnRzCi0gICAgICAgIGNtZC5hZGRBcmd1bWVudHMoIG5ldyBTdHJpbmdbXXsKLSAgICAgICAgICAgICItdyIsIHJlcG9zaXRvcnkuZ2V0V29ya3NwYWNlTmFtZSgpLAotICAgICAgICAgICAgIi1iIiwgcmVwb3NpdG9yeS5nZXRTdHJlYW1OYW1lKCksCi0gICAgICAgICAgICAiLWwiLCBmaWxlU2V0LmdldEJhc2VkaXIoKS5nZXRBYnNvbHV0ZVBhdGgoKQotICAgICAgICB9ICk7CisgICAgICAgIGNtZC5hZGRBcmd1bWVudHMoIG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAiLXciLAorICAgICAgICAgICAgcmVwb3NpdG9yeS5nZXRXb3Jrc3BhY2VOYW1lKCksCisgICAgICAgICAgICAiLWIiLAorICAgICAgICAgICAgcmVwb3NpdG9yeS5nZXRTdHJlYW1OYW1lKCksCisgICAgICAgICAgICAiLWwiLAorICAgICAgICAgICAgZmlsZVNldC5nZXRCYXNlZGlyKCkuZ2V0QWJzb2x1dGVQYXRoKCkgfSApOwogICAgICAgICByZXR1cm4gY21kOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXYvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9hY2N1cmV2L2NvbW1hbmRzL2NoZWNrb3V0L0Jhc2VBY2N1UmV2Q2hlY2tPdXRDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1hY2N1cmV2L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYWNjdXJldi9jb21tYW5kcy9jaGVja291dC9CYXNlQWNjdVJldkNoZWNrT3V0Q29tbWFuZC5qYXZhCmluZGV4IDk0ZGNkNTkuLmQwNzBkNjYgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXYvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9hY2N1cmV2L2NvbW1hbmRzL2NoZWNrb3V0L0Jhc2VBY2N1UmV2Q2hlY2tPdXRDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYWNjdXJldi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2FjY3VyZXYvY29tbWFuZHMvY2hlY2tvdXQvQmFzZUFjY3VSZXZDaGVja091dENvbW1hbmQuamF2YQpAQCAtMSwyMyArMSwyOSBAQAogcGFja2FnZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5hY2N1cmV2LmNvbW1hbmRzLmNoZWNrb3V0OwogCiAvKgotICogQ29weXJpZ2h0IDIwMDggQWNjdVJldiBJbmMuCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLkNvbW1hbmQ7CiAKKy8qKgorICogQHZlcnNpb24gJElkJAorICovCiBwdWJsaWMgaW50ZXJmYWNlIEJhc2VBY2N1UmV2Q2hlY2tPdXRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZAogewogICAgIFN0cmluZyBnZXRNZXRob2ROYW1lKCk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1hY2N1cmV2L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYWNjdXJldi9jb21tYW5kcy9sb2dpbi9BY2N1UmV2TG9naW5Db21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1hY2N1cmV2L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYWNjdXJldi9jb21tYW5kcy9sb2dpbi9BY2N1UmV2TG9naW5Db21tYW5kLmphdmEKaW5kZXggNjU1OWYxYi4uMTFhYmNiMyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYWNjdXJldi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2FjY3VyZXYvY29tbWFuZHMvbG9naW4vQWNjdVJldkxvZ2luQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXYvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9hY2N1cmV2L2NvbW1hbmRzL2xvZ2luL0FjY3VSZXZMb2dpbkNvbW1hbmQuamF2YQpAQCAtMSwxOSArMSwyMiBAQAogcGFja2FnZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5hY2N1cmV2LmNvbW1hbmRzLmxvZ2luOwogCiAvKgotICogQ29weXJpZ2h0IDIwMDggQWNjdVJldiBJbmMuCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwpAQCAtMzEsNiArMzQsOSBAQAogaW1wb3J0IG9yZy5jb2RlaGF1cy5wbGV4dXMudXRpbC5jbGkuQ29tbWFuZExpbmVVdGlsczsKIGltcG9ydCBvcmcuY29kZWhhdXMucGxleHVzLnV0aWwuY2xpLkNvbW1hbmRsaW5lOwogCisvKioKKyAqIEB2ZXJzaW9uICRJZCQKKyAqLwogcHVibGljIGNsYXNzIEFjY3VSZXZMb2dpbkNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdExvZ2luQ29tbWFuZAogewogICAgIHByaXZhdGUgU3RyaW5nIGV4ZWN1dGFibGU7CkBAIC00MCw2ICs0Niw3IEBACiAgICAgICAgIHRoaXMuZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgTG9naW5TY21SZXN1bHQgZXhlY3V0ZUxvZ2luQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC05Niw1ICsxMDMsNSBAQAogICAgICAgICAvL1NldCBhcmd1bWVudHMgdG8gY29tbWFuZCBsaW5lCiAgICAgICAgIGNsLmFkZEFyZ3VtZW50cyggKFN0cmluZ1tdKSBwYXJhbXMudG9BcnJheSggbmV3IFN0cmluZ1twYXJhbXMuc2l6ZSgpXSApICk7CiAgICAgICAgIHJldHVybiBjbDsKLQl9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYWNjdXJldi9zcmMvc2l0ZS9zaXRlLnhtbCBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXYvc3JjL3NpdGUvc2l0ZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ4NTBjZAotLS0gL2Rldi9udWxsCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXYvc3JjL3NpdGUvc2l0ZS54bWwKQEAgLTAsMCArMSwzMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PgorCis8IS0tCisgIH4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICB+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICB+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgIH4gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICB+IHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgfiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgIH4gd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgfiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICB+ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICB+IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICB+IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgfiB1bmRlciB0aGUgTGljZW5zZS4KKyAgLS0+CisKKzxwcm9qZWN0IG5hbWU9Ik1hdmVuIFNDTSBBY2N1cmV2IFByb3ZpZGVyIj4KKyAgPGJvZHk+CisgICAgPG1lbnUgcmVmPSJwYXJlbnQiIC8+CisKKyAgICA8bWVudSBuYW1lPSJPdmVydmlldyI+CisgICAgICA8aXRlbSBuYW1lPSJJbnRyb2R1Y3Rpb24iIGhyZWY9ImluZGV4Lmh0bWwiLz4KKyAgICA8L21lbnU+CisKKyAgICA8bWVudSByZWY9InJlcG9ydHMiIGluaGVyaXQ9ImJvdHRvbSIgLz4KKyAgPC9ib2R5PgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYWNjdXJldi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2FjY3VyZXYvQWNjdXJldlNjbVByb3ZpZGVyVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYWNjdXJldi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2FjY3VyZXYvQWNjdXJldlNjbVByb3ZpZGVyVGVzdC5qYXZhCmluZGV4IDU3YjRjMWEuLjQ4ZDU2ODggMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXYvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9hY2N1cmV2L0FjY3VyZXZTY21Qcm92aWRlclRlc3QuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1hY2N1cmV2L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYWNjdXJldi9BY2N1cmV2U2NtUHJvdmlkZXJUZXN0LmphdmEKQEAgLTEsMTkgKzEsMjIgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuYWNjdXJldjsKIAogLyoKLSAqIENvcHlyaWdodCAyMDA4IEFjY3VSZXYgSW5jLgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCiBpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYWNjdXJldi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2FjY3VyZXYvY29tbWFuZHMvY2hlY2tvdXQvQWNjdVJldlNjbVRja1Rlc3RDYXNlLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1hY2N1cmV2L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYWNjdXJldi9jb21tYW5kcy9jaGVja291dC9BY2N1UmV2U2NtVGNrVGVzdENhc2UuamF2YQppbmRleCA0NGJlMDJiLi41YTgwZWE5IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1hY2N1cmV2L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYWNjdXJldi9jb21tYW5kcy9jaGVja291dC9BY2N1UmV2U2NtVGNrVGVzdENhc2UuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1hY2N1cmV2L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYWNjdXJldi9jb21tYW5kcy9jaGVja291dC9BY2N1UmV2U2NtVGNrVGVzdENhc2UuamF2YQpAQCAtMSwxOSArMSwyMiBAQAogcGFja2FnZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5hY2N1cmV2LmNvbW1hbmRzLmNoZWNrb3V0OwogCiAvKgotICogQ29weXJpZ2h0IDIwMDggQWNjdVJldiBJbmMuCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKIGltcG9ydCBqYXZhLmlvLkZpbGU7CkBAIC04MiwyNiArODUsMjYgQEAKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2NtVXJsKCBTdHJpbmcgd29ya3NwYWNlTmFtZSwgU3RyaW5nIGNoZWNrb3V0TWV0aG9kICkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLSAgICAJLy8gcmV0dXJuIFN0cmluZ1V0aWxzLmpvaW4oIG5ldyBTdHJpbmdbXXsKLSAgICAJLy8gICAgICAgICAgICAic2NtIiwgImFjY3VyZXYiLCB1c2VybmFtZSwgcGFzc3dvcmQgKyAiQCIgKyBob3N0LCBTdHJpbmcudmFsdWVPZiggcG9ydCApLCBkZXBvdCwgc3RyZWFtLCB3b3Jrc3BhY2VOYW1lCi0gICAgCS8vICAgICAgICB9LCAnOicgKSArICI/Y2hlY2tvdXRNZXRob2Q9IiArIGNoZWNrb3V0TWV0aG9kOwotICAgIAlyZXR1cm4gbmV3IFN0cmluZ0J1ZmZlcigic2NtOmFjY3VyZXY6IikgLy8KLQkJCQkuYXBwZW5kKHVzZXJuYW1lKSAvLwotCQkJCS5hcHBlbmQoJzonKSAvLwotCQkJCS5hcHBlbmQocGFzc3dvcmQpIC8vCi0JCQkJLmFwcGVuZCgnQCcpIC8vCi0JCQkJLmFwcGVuZChob3N0KSAvLwotCQkJCS5hcHBlbmQoJzonKSAvLwotCQkJCS5hcHBlbmQoU3RyaW5nLnZhbHVlT2YocG9ydCkpIC8vCi0JCQkJLmFwcGVuZCgnOicpIC8vCi0JCQkJLmFwcGVuZChkZXBvdCkgLy8KLQkJCQkuYXBwZW5kKCc6JykgLy8KLQkJCQkuYXBwZW5kKHN0cmVhbSkgLy8KLQkJCQkuYXBwZW5kKCc6JykgLy8KLQkJCQkuYXBwZW5kKHdvcmtzcGFjZU5hbWUpIC8vCi0JCQkJLmFwcGVuZCgiP2NoZWNrb3V0TWV0aG9kPSIpIC8vCi0JCQkJLmFwcGVuZChjaGVja291dE1ldGhvZCkgLy8KLQkJCQkudG9TdHJpbmcoKTsKKyAgICAgICAgLy8gcmV0dXJuIFN0cmluZ1V0aWxzLmpvaW4oIG5ldyBTdHJpbmdbXXsKKyAgICAgICAgLy8gICAgICAgICAgICAic2NtIiwgImFjY3VyZXYiLCB1c2VybmFtZSwgcGFzc3dvcmQgKyAiQCIgKyBob3N0LCBTdHJpbmcudmFsdWVPZiggcG9ydCApLCBkZXBvdCwgc3RyZWFtLCB3b3Jrc3BhY2VOYW1lCisgICAgICAgIC8vICAgICAgICB9LCAnOicgKSArICI/Y2hlY2tvdXRNZXRob2Q9IiArIGNoZWNrb3V0TWV0aG9kOworICAgICAgICByZXR1cm4gbmV3IFN0cmluZ0J1ZmZlcigic2NtOmFjY3VyZXY6IikgLy8KKyAgICAgICAgICAgICAgICAuYXBwZW5kKHVzZXJuYW1lKSAvLworICAgICAgICAgICAgICAgIC5hcHBlbmQoJzonKSAvLworICAgICAgICAgICAgICAgIC5hcHBlbmQocGFzc3dvcmQpIC8vCisgICAgICAgICAgICAgICAgLmFwcGVuZCgnQCcpIC8vCisgICAgICAgICAgICAgICAgLmFwcGVuZChob3N0KSAvLworICAgICAgICAgICAgICAgIC5hcHBlbmQoJzonKSAvLworICAgICAgICAgICAgICAgIC5hcHBlbmQoU3RyaW5nLnZhbHVlT2YocG9ydCkpIC8vCisgICAgICAgICAgICAgICAgLmFwcGVuZCgnOicpIC8vCisgICAgICAgICAgICAgICAgLmFwcGVuZChkZXBvdCkgLy8KKyAgICAgICAgICAgICAgICAuYXBwZW5kKCc6JykgLy8KKyAgICAgICAgICAgICAgICAuYXBwZW5kKHN0cmVhbSkgLy8KKyAgICAgICAgICAgICAgICAuYXBwZW5kKCc6JykgLy8KKyAgICAgICAgICAgICAgICAuYXBwZW5kKHdvcmtzcGFjZU5hbWUpIC8vCisgICAgICAgICAgICAgICAgLmFwcGVuZCgiP2NoZWNrb3V0TWV0aG9kPSIpIC8vCisgICAgICAgICAgICAgICAgLmFwcGVuZChjaGVja291dE1ldGhvZCkgLy8KKyAgICAgICAgICAgICAgICAudG9TdHJpbmcoKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldFNjbVVybCgpIHRocm93cyBFeGNlcHRpb24KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9wb20ueG1sIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3BvbS54bWwKaW5kZXggZWRiODA5ZC4uMjA4MjYyYyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3BvbS54bWwKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3BvbS54bWwKQEAgLTEsNCArMSw2IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhLS0KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzwhLS0KICAgfiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiAgIH4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCiAgIH4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KQEAgLTE4LDIxICsyMCwyNiBAQAogICAtLT4KIAogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+CisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwogICA8cGFyZW50PgotICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlcnM8L2FydGlmYWN0SWQ+CiAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyczwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgotICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhcjwvYXJ0aWZhY3RJZD4KKwogICA8bmFtZT5NYXZlbiBTQ00gQmF6YWFyIFByb3ZpZGVyPC9uYW1lPgotICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CisgIDxkZXNjcmlwdGlvbj5TQ00gUHJvdmlkZXIgaW1wbGVtZW50YXRpb24gZm9yIEJhemFhciAoaHR0cDovL2JhemFhci12Y3Mub3JnLykuPC9kZXNjcmlwdGlvbj4KKwogICA8ZGVwZW5kZW5jaWVzPgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+cmVnZXhwPC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+cmVnZXhwPC9hcnRpZmFjdElkPgogICAgIDwvZGVwZW5kZW5jeT4KICAgPC9kZXBlbmRlbmNpZXM+CisKICAgPGJ1aWxkPgogICAgIDxwbHVnaW5zPgogICAgICAgPHBsdWdpbj4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9CYXphYXJDb25maWcuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9CYXphYXJDb25maWcuamF2YQppbmRleCA2ZGZmMWJmLi40ZWZjYmU0IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvQmF6YWFyQ29uZmlnLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL0JhemFhckNvbmZpZy5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTdGF0dXM7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ubG9nLkRlZmF1bHRMb2c7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuYmF6YWFyLmNvbW1hbmQuQmF6YWFyQ29tbWFuZDsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5iYXphYXIuY29tbWFuZC5CYXphYXJDb25zdGFudHM7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuYmF6YWFyLmNvbW1hbmQuQmF6YWFyQ29uc3VtZXI7CiBpbXBvcnQgb3JnLmNvZGVoYXVzLnBsZXh1cy51dGlsLmNsaS5Db21tYW5kbGluZTsKIApAQCAtMzMsNyArMzMsOCBAQAogLyoqCiAgKiBDaGVjayBiYXphYXIgaW5zdGFsbGF0aW9uLgogICoKLSAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRvcmJqb3JuQHNtb3JncmF2Lm9yZyI+VG9yYmr4cm4gRWlrbGkgU234cmdyYXY8L2E+CisgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0b3Jiam9ybkBzbW9yZ3Jhdi5vcmciPlRvcmJq77+9cm4gRWlrbGkgU23vv71yZ3JhdjwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEJhemFhckNvbmZpZwogewpAQCAtMTI3LDcgKzEyOCw3IEBACiAgICAgcHVibGljIHN0YXRpYyBWZXJzaW9uQ29uc3VtZXIgZ2V0QmF6YWFyVmVyc2lvbiggRmlsZSB3b3JraW5nRGlyICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKLSAgICAgICAgU3RyaW5nW10gdmVyc2lvbkNtZCA9IG5ldyBTdHJpbmdbXXtCYXphYXJDb21tYW5kLlZFUlNJT059OworICAgICAgICBTdHJpbmdbXSB2ZXJzaW9uQ21kID0gbmV3IFN0cmluZ1tde0JhemFhckNvbnN0YW50cy5WRVJTSU9OfTsKICAgICAgICAgVmVyc2lvbkNvbnN1bWVyIGNvbnN1bWVyID0gbmV3IFZlcnNpb25Db25zdW1lciggQkFaQUFSX1ZFUlNJT05fVEFHICk7CiAgICAgICAgIENvbW1hbmRsaW5lIGNtZCA9IEJhemFhclV0aWxzLmJ1aWxkQ21kKCB3b3JraW5nRGlyLCB2ZXJzaW9uQ21kICk7CiAKQEAgLTE4MCwyNSArMTgxLDI1IEBACiAgICAgICAgIGV4dGVuZHMgQmF6YWFyQ29uc3VtZXIKICAgICB7CiAKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgUGF0dGVybiBWRVJTSU9OX1BBVFRFUk4gPSBQYXR0ZXJuLmNvbXBpbGUoICJbXFxkXSsuP1tcXGRdKiIgKTsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUGF0dGVybiBWRVJTSU9OX1BBVFRFUk4gPSBQYXR0ZXJuLmNvbXBpbGUoICJbXFxkXSsuP1tcXGRdKiIgKTsKIAotICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyB2ZXJzaW9uX3RhZzsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdmVyc2lvblRhZzsKIAogICAgICAgICBwcml2YXRlIFN0cmluZyB2ZXJzaW9uU3RyID0gIk5BIjsKIAogICAgICAgICBwcml2YXRlIGZsb2F0IHZlcnNpb24gPSAtMTsKIAotICAgICAgICBWZXJzaW9uQ29uc3VtZXIoIFN0cmluZyB2ZXJzaW9uX3RhZyApCisgICAgICAgIFZlcnNpb25Db25zdW1lciggU3RyaW5nIGFWZXJzaW9uVGFnICkKICAgICAgICAgewogICAgICAgICAgICAgc3VwZXIoIG5ldyBEZWZhdWx0TG9nKCkgKTsKLSAgICAgICAgICAgIHRoaXMudmVyc2lvbl90YWcgPSB2ZXJzaW9uX3RhZzsKKyAgICAgICAgICAgIHRoaXMudmVyc2lvblRhZyA9IGFWZXJzaW9uVGFnOwogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIHZvaWQgZG9Db25zdW1lKCBTY21GaWxlU3RhdHVzIHN0YXR1cywgU3RyaW5nIGxpbmUgKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIGxpbmUuc3RhcnRzV2l0aCggdmVyc2lvbl90YWcgKSApCisgICAgICAgICAgICBpZiAoIGxpbmUuc3RhcnRzV2l0aCggdmVyc2lvblRhZyApICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZXJzaW9uU3RyID0gbGluZS5zdWJzdHJpbmcoIHZlcnNpb25fdGFnLmxlbmd0aCgpICk7CisgICAgICAgICAgICAgICAgdmVyc2lvblN0ciA9IGxpbmUuc3Vic3RyaW5nKCB2ZXJzaW9uVGFnLmxlbmd0aCgpICk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMjY2LDExICsyNjcsMTEgQEAKICAgICB7CiAgICAgICAgIGJvb2xlYW4gYnpyT2sgPSBiYXphYXJWZXJzaW9uLmlzVmVyc2lvbk9rKCBCQVpBQVJfUkVRICk7CiAgICAgICAgIGJvb2xlYW4gcHlPayA9IHB5dGhvblZlcnNpb24uaXNWZXJzaW9uT2soIFBZVEhPTl9SRVEgKTsKLSAgICAgICAgcmV0dXJuICJcbiAgWW91ciBCYXphYXIgaW5zdGFsbGF0aW9uIHNlZW1zIHRvIGJlICIgKyBnZXRJbnN0YWxsZWRTdHIoKSArICJcbiAgICBQeXRob24gdmVyc2lvbjogIiArCi0gICAgICAgICAgICBweXRob25WZXJzaW9uLmdldFZlcnNpb24oKSArICggcHlPayA/ICIgKE9LKSIgOiAiIChNYXkgYmUgSU5WQUxJRCkiICkgKyAiXG4gICAgQmF6YWFyIHZlcnNpb246ICIgKwotICAgICAgICAgICAgYmF6YWFyVmVyc2lvbi5nZXRWZXJzaW9uKCkgKyAoIGJ6ck9rID8gIiAoT0spIiA6ICIgKE1heSBiZSBJTlZBTElEKSIgKSArICJcbiAgICBQYXJhbWlrbyBpbnN0YWxsZWQ6ICIgKwotICAgICAgICAgICAgcGFyYW1pa28gKyAiIChGb3IgcmVtb3RlIGFjY2VzcyBlZy4gc2Z0cCkgIiArICJcbiAgICBjQ3J5cHQgaW5zdGFsbGVkOiAiICsgY0NyeXB0ICsKLSAgICAgICAgICAgICIgKEZvciByZW1vdGUgYWNjZXNzIGVnLiBzZnRwKSAiICsgIlxuICAgIGNFbGVtZW50VHJlZSBpbnN0YWxsZWQ6ICIgKyBjRWxlbWVudFRyZWUgKyAiIChOb3QgbWFuZGF0b3J5KSAiICsKLSAgICAgICAgICAgICJcbiI7CisgICAgICAgIHJldHVybiAiXG4gIFlvdXIgQmF6YWFyIGluc3RhbGxhdGlvbiBzZWVtcyB0byBiZSAiICsgZ2V0SW5zdGFsbGVkU3RyKCkgKyAiXG4gICAgUHl0aG9uIHZlcnNpb246ICIKKyAgICAgICAgICAgICsgcHl0aG9uVmVyc2lvbi5nZXRWZXJzaW9uKCkgKyAoIHB5T2sgPyAiIChPSykiIDogIiAoTWF5IGJlIElOVkFMSUQpIiApICsgIlxuICAgIEJhemFhciB2ZXJzaW9uOiAiCisgICAgICAgICAgICArIGJhemFhclZlcnNpb24uZ2V0VmVyc2lvbigpICsgKCBienJPayA/ICIgKE9LKSIgOiAiIChNYXkgYmUgSU5WQUxJRCkiICkgKyAiXG4gICAgUGFyYW1pa28gaW5zdGFsbGVkOiAiCisgICAgICAgICAgICArIHBhcmFtaWtvICsgIiAoRm9yIHJlbW90ZSBhY2Nlc3MgZWcuIHNmdHApICIgKyAiXG4gICAgY0NyeXB0IGluc3RhbGxlZDogIiArIGNDcnlwdAorICAgICAgICAgICAgKyAiIChGb3IgcmVtb3RlIGFjY2VzcyBlZy4gc2Z0cCkgIiArICJcbiAgICBjRWxlbWVudFRyZWUgaW5zdGFsbGVkOiAiICsgY0VsZW1lbnRUcmVlICsgIiAoTm90IG1hbmRhdG9yeSkgIgorICAgICAgICAgICAgKyAiXG4iOwogICAgIH0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvQmF6YWFyU2NtUHJvdmlkZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9CYXphYXJTY21Qcm92aWRlci5qYXZhCmluZGV4IDQ0YmE0MjguLmFhZTRlZTMgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9CYXphYXJTY21Qcm92aWRlci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9CYXphYXJTY21Qcm92aWRlci5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC51cGRhdGUuVXBkYXRlU2NtUmVzdWx0OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmJhemFhci5jb21tYW5kLkJhemFhckNvbW1hbmQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuYmF6YWFyLmNvbW1hbmQuQmF6YWFyQ29uc3RhbnRzOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmJhemFhci5jb21tYW5kLmFkZC5CYXphYXJBZGRDb21tYW5kOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmJhemFhci5jb21tYW5kLmNoYW5nZWxvZy5CYXphYXJDaGFuZ2VMb2dDb21tYW5kOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmJhemFhci5jb21tYW5kLmNoZWNraW4uQmF6YWFyQ2hlY2tJbkNvbW1hbmQ7CkBAIC01MywyNiArNTMsMjcgQEAKIC8qKgogICogQmF6YWFyIE5HIGh0dHA6Ly9iYXphYXItdmNzLm9yZy8gaXMgYSBkZWNlbnRyYWxpemVkIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtLiA8YnI+CiAgKgotICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86dG9yYmpvcm5Ac21vcmdyYXYub3JnIj5Ub3JiavhybiBFaWtsaSBTbfhyZ3JhdjwvYT4KKyAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRvcmJqb3JuQHNtb3JncmF2Lm9yZyI+VG9yYmrvv71ybiBFaWtsaSBTbe+/vXJncmF2PC9hPgorICogQHZlcnNpb24gJElkJAogICogQHBsZXh1cy5jb21wb25lbnQgcm9sZT0ib3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXIiIHJvbGUtaGludD0iYmF6YWFyIgogICovCiBwdWJsaWMgY2xhc3MgQmF6YWFyU2NtUHJvdmlkZXIKICAgICBleHRlbmRzIEFic3RyYWN0U2NtUHJvdmlkZXIKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2NtU3BlY2lmaWNGaWxlbmFtZSgpCiAgICAgewogICAgICAgICByZXR1cm4gIi5ienIiOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSBtYWtlUHJvdmlkZXJTY21SZXBvc2l0b3J5KCBTdHJpbmcgc2NtU3BlY2lmaWNVcmwsIGNoYXIgZGVsaW1pdGVyICkKICAgICAgICAgdGhyb3dzIFNjbVJlcG9zaXRvcnlFeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgQmF6YWFyU2NtUHJvdmlkZXJSZXBvc2l0b3J5KCBzY21TcGVjaWZpY1VybCApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciNtYWtlUHJvdmlkZXJTY21SZXBvc2l0b3J5KGphdmEuaW8uRmlsZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTY21Qcm92aWRlclJlcG9zaXRvcnkgbWFrZVByb3ZpZGVyU2NtUmVwb3NpdG9yeSggRmlsZSBwYXRoICkKICAgICAgICAgdGhyb3dzIFNjbVJlcG9zaXRvcnlFeGNlcHRpb24sIFVua25vd25SZXBvc2l0b3J5U3RydWN0dXJlCiAgICAgewpAQCAtOTEsMTIgKzkyLDEzIEBACiAgICAgICAgIHJldHVybiBtYWtlUHJvdmlkZXJTY21SZXBvc2l0b3J5KCAiZmlsZTovLy8iICsgcGF0aC5nZXRBYnNvbHV0ZVBhdGgoKSwgJzonICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgTGlzdCB2YWxpZGF0ZVNjbVVybCggU3RyaW5nIHNjbVNwZWNpZmljVXJsLCBjaGFyIGRlbGltaXRlciApCiAgICAgewogCiAgICAgICAgIExpc3QgZXJyb3JNZXNzYWdlcyA9IG5ldyBBcnJheUxpc3QoKTsKIAotICAgICAgICBTdHJpbmdbXSBjaGVja0NtZCA9IG5ldyBTdHJpbmdbXXtCYXphYXJDb21tYW5kLkNIRUNLLCBzY21TcGVjaWZpY1VybH07CisgICAgICAgIFN0cmluZ1tdIGNoZWNrQ21kID0gbmV3IFN0cmluZ1tde0JhemFhckNvbnN0YW50cy5DSEVDSywgc2NtU3BlY2lmaWNVcmx9OwogICAgICAgICBTY21SZXN1bHQgcmVzdWx0OwogICAgICAgICB0cnkKICAgICAgICAgewpAQCAtMTE2LDE0ICsxMTgsMTMgQEAKICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZXM7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNjbVR5cGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuICJiYXphYXIiOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciNhZGQob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQWRkU2NtUmVzdWx0IGFkZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC0xMzQsOSArMTM1LDcgQEAKICAgICAgICAgcmV0dXJuIChBZGRTY21SZXN1bHQpIGNvbW1hbmQuZXhlY3V0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciNjaGFuZ2Vsb2cob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hhbmdlTG9nU2NtUmVzdWx0IGNoYW5nZWxvZyggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTE0OCw5ICsxNDcsNyBAQAogICAgICAgICByZXR1cm4gKENoYW5nZUxvZ1NjbVJlc3VsdCkgY29tbWFuZC5leGVjdXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI2NoZWNraW4ob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hlY2tJblNjbVJlc3VsdCBjaGVja2luKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC0xNjIsOSArMTU5LDcgQEAKICAgICAgICAgcmV0dXJuIChDaGVja0luU2NtUmVzdWx0KSBjb21tYW5kLmV4ZWN1dGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjY2hlY2tvdXQob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hlY2tPdXRTY21SZXN1bHQgY2hlY2tvdXQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtMTc2LDkgKzE3MSw3IEBACiAgICAgICAgIHJldHVybiAoQ2hlY2tPdXRTY21SZXN1bHQpIGNvbW1hbmQuZXhlY3V0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciNkaWZmKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIERpZmZTY21SZXN1bHQgZGlmZiggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC0xODksOSArMTgyLDcgQEAKICAgICAgICAgcmV0dXJuIChEaWZmU2NtUmVzdWx0KSBjb21tYW5kLmV4ZWN1dGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjcmVtb3ZlKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFJlbW92ZVNjbVJlc3VsdCByZW1vdmUoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtMjAyLDkgKzE5Myw3IEBACiAgICAgICAgIHJldHVybiAoUmVtb3ZlU2NtUmVzdWx0KSBjb21tYW5kLmV4ZWN1dGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjc3RhdHVzKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0YXR1c1NjbVJlc3VsdCBzdGF0dXMoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtMjE1LDkgKzIwNCw3IEBACiAgICAgICAgIHJldHVybiAoU3RhdHVzU2NtUmVzdWx0KSBjb21tYW5kLmV4ZWN1dGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjdXBkYXRlKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL0JhemFhclV0aWxzLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvQmF6YWFyVXRpbHMuamF2YQppbmRleCA3ZWZlMTQ4Li44NTM1MDg1IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvQmF6YWFyVXRpbHMuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvQmF6YWFyVXRpbHMuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVJlc3VsdDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuRGVmYXVsdExvZzsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuU2NtTG9nZ2VyOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmJhemFhci5jb21tYW5kLkJhemFhckNvbW1hbmQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuYmF6YWFyLmNvbW1hbmQuQmF6YWFyQ29uc3RhbnRzOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmJhemFhci5jb21tYW5kLkJhemFhckNvbnN1bWVyOwogaW1wb3J0IG9yZy5jb2RlaGF1cy5wbGV4dXMudXRpbC5jbGkuQ29tbWFuZExpbmVFeGNlcHRpb247CiBpbXBvcnQgb3JnLmNvZGVoYXVzLnBsZXh1cy51dGlsLmNsaS5Db21tYW5kTGluZVV0aWxzOwpAQCAtNDAsMzEgKzQwLDMyIEBACiAvKioKICAqIENvbW1vbiBjb2RlIGZvciBleGVjdXRpbmcgYmF6YWFyIGNvbW1hbmRzLgogICoKLSAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRvcmJqb3JuQHNtb3JncmF2Lm9yZyI+VG9yYmr4cm4gRWlrbGkgU234cmdyYXY8L2E+CisgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0b3Jiam9ybkBzbW9yZ3Jhdi5vcmciPlRvcmJq77+9cm4gRWlrbGkgU23vv71yZ3JhdjwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEJhemFhclV0aWxzCiB7CiAgICAgLyoqCiAgICAgICogTWFwIGJldHdlZW4gY29tbWFuZCBhbmQgaXRzIHZhbGlkIGV4aXQgY29kZXMKICAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXAgZXhpdENvZGVNYXAgPSBuZXcgSGFzaE1hcCgpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE1hcCBFWElUQ09ERU1BUCA9IG5ldyBIYXNoTWFwKCk7CiAKICAgICAvKioKICAgICAgKiBEZWZhdWx0IGV4aXQgY29kZXMgZm9yIGVudHJpZXMgbm90IGluIGV4aXRDb2RlTWFwCiAgICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTGlzdCBkZWZhdWx0RXhpdENvZGVzID0gbmV3IEFycmF5TGlzdCgpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExpc3QgREVGQVVMVEVFWElUQ09ERVMgPSBuZXcgQXJyYXlMaXN0KCk7CiAKICAgICAvKiogU2V0dXAgZXhpdCBjb2RlcyovCiAgICAgc3RhdGljCiAgICAgewotICAgICAgICBkZWZhdWx0RXhpdENvZGVzLmFkZCggbmV3IEludGVnZXIoIDAgKSApOworICAgICAgICBERUZBVUxURUVYSVRDT0RFUy5hZGQoIG5ldyBJbnRlZ2VyKCAwICkgKTsKIAogICAgICAgICAvL0RpZmYgaXMgZGlmZmVyZW50CiAgICAgICAgIExpc3QgZGlmZkV4aXRDb2RlcyA9IG5ldyBBcnJheUxpc3QoKTsKICAgICAgICAgZGlmZkV4aXRDb2Rlcy5hZGQoIG5ldyBJbnRlZ2VyKCAwICkgKTsgLy9ObyBkaWZmZXJlbmNlCiAgICAgICAgIGRpZmZFeGl0Q29kZXMuYWRkKCBuZXcgSW50ZWdlciggMSApICk7IC8vQ29uZmxpY3RzIGluIG1lcmdlLWxpa2Ugb3IgY2hhbmdlcyBpbiBkaWZmLWxpa2UKICAgICAgICAgZGlmZkV4aXRDb2Rlcy5hZGQoIG5ldyBJbnRlZ2VyKCAyICkgKTsgLy9VbnJlcHJlc2VudGFibGUgZGlmZiBjaGFuZ2VzCi0gICAgICAgIGV4aXRDb2RlTWFwLnB1dCggQmF6YWFyQ29tbWFuZC5ESUZGX0NNRCwgZGlmZkV4aXRDb2RlcyApOworICAgICAgICBFWElUQ09ERU1BUC5wdXQoIEJhemFhckNvbnN0YW50cy5ESUZGX0NNRCwgZGlmZkV4aXRDb2RlcyApOwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgU2NtUmVzdWx0IGV4ZWN1dGUoIEJhemFhckNvbnN1bWVyIGNvbnN1bWVyLCBTY21Mb2dnZXIgbG9nZ2VyLCBGaWxlIHdvcmtpbmdEaXIsIFN0cmluZ1tdIGNtZEFuZEFyZ3MgKQpAQCAtODAsMTAgKzgxLDEwIEBACiAgICAgICAgICAgICBpbnQgZXhpdENvZGUgPSBleGVjdXRlQ21kKCBjb25zdW1lciwgY21kICk7CiAKICAgICAgICAgICAgIC8vUmV0dXJuIHJlc3VsdAotICAgICAgICAgICAgTGlzdCBleGl0Q29kZXMgPSBkZWZhdWx0RXhpdENvZGVzOwotICAgICAgICAgICAgaWYgKCBleGl0Q29kZU1hcC5jb250YWluc0tleSggY21kQW5kQXJnc1swXSApICkKKyAgICAgICAgICAgIExpc3QgZXhpdENvZGVzID0gREVGQVVMVEVFWElUQ09ERVM7CisgICAgICAgICAgICBpZiAoIEVYSVRDT0RFTUFQLmNvbnRhaW5zS2V5KCBjbWRBbmRBcmdzWzBdICkgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGV4aXRDb2RlcyA9IChMaXN0KSBleGl0Q29kZU1hcC5nZXQoIGNtZEFuZEFyZ3NbMF0gKTsKKyAgICAgICAgICAgICAgICBleGl0Q29kZXMgPSAoTGlzdCkgRVhJVENPREVNQVAuZ2V0KCBjbWRBbmRBcmdzWzBdICk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBleGl0Q29kZXMuY29udGFpbnMoIG5ldyBJbnRlZ2VyKCBleGl0Q29kZSApICk7CiAKQEAgLTkyLDkgKzkzLDkgQEAKICAgICAgICAgICAgIGlmICggIXN1Y2Nlc3MgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIEJhemFhckNvbmZpZyBjb25maWcgPSBuZXcgQmF6YWFyQ29uZmlnKCB3b3JraW5nRGlyICk7Ci0gICAgICAgICAgICAgICAgcHJvdmlkZXJNc2cgPSAiXG5FWEVDVVRJT04gRkFJTEVEIiArICJcbiAgRXhlY3V0aW9uIG9mIGNtZCA6ICIgKyBjbWRBbmRBcmdzWzBdICsKLSAgICAgICAgICAgICAgICAgICAgIiBmYWlsZWQgd2l0aCBleGl0IGNvZGU6ICIgKyBleGl0Q29kZSArICIuIiArICJcbiAgV29ya2luZyBkaXJlY3Rvcnkgd2FzOiAiICsgIlxuICAgICIgKwotICAgICAgICAgICAgICAgICAgICB3b3JraW5nRGlyLmdldEFic29sdXRlUGF0aCgpICsgY29uZmlnLnRvU3RyaW5nKCB3b3JraW5nRGlyICkgKyAiXG4iOworICAgICAgICAgICAgICAgIHByb3ZpZGVyTXNnID0gIlxuRVhFQ1VUSU9OIEZBSUxFRCIgKyAiXG4gIEV4ZWN1dGlvbiBvZiBjbWQgOiAiICsgY21kQW5kQXJnc1swXQorICAgICAgICAgICAgICAgICAgICArICIgZmFpbGVkIHdpdGggZXhpdCBjb2RlOiAiICsgZXhpdENvZGUgKyAiLiIgKyAiXG4gIFdvcmtpbmcgZGlyZWN0b3J5IHdhczogIiArICJcbiAgICAiCisgICAgICAgICAgICAgICAgICAgICsgd29ya2luZ0Rpci5nZXRBYnNvbHV0ZVBhdGgoKSArIGNvbmZpZy50b1N0cmluZyggd29ya2luZ0RpciApICsgIlxuIjsKICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIHByb3ZpZGVyTXNnICk7CiAgICAgICAgICAgICB9CiAKQEAgLTEwMiw4ICsxMDMsOSBAQAogICAgICAgICB9CiAgICAgICAgIGNhdGNoICggU2NtRXhjZXB0aW9uIHNlICkKICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIG1zZyA9ICJFWEVDVVRJT04gRkFJTEVEIiArCi0gICAgICAgICAgICAgICAgIlxuICBFeGVjdXRpb24gZmFpbGVkIGJlZm9yZSBpbnZva2luZyB0aGUgQmF6YWFyIGNvbW1hbmQuIExhc3QgZXhjZXB0aW9uOiIgKyAiXG4gICAgIiArIHNlLmdldE1lc3NhZ2UoKTsKKyAgICAgICAgICAgIFN0cmluZyBtc2cgPQorICAgICAgICAgICAgICAgICJFWEVDVVRJT04gRkFJTEVEXG4gIEV4ZWN1dGlvbiBmYWlsZWQgYmVmb3JlIGludm9raW5nIHRoZSBCYXphYXIgY29tbWFuZC4gTGFzdCBleGNlcHRpb246IgorICAgICAgICAgICAgICAgICAgICArICJcbiAgICAiICsgc2UuZ2V0TWVzc2FnZSgpOwogCiAgICAgICAgICAgICAvL0FkZCBuZXN0ZWQgY2F1c2UgaWYgYW55CiAgICAgICAgICAgICBpZiAoIHNlLmdldENhdXNlKCkgIT0gbnVsbCApCkBAIC0xMjEsNyArMTIzLDcgQEAKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgQ29tbWFuZGxpbmUgY21kID0gbmV3IENvbW1hbmRsaW5lKCk7Ci0gICAgICAgIGNtZC5zZXRFeGVjdXRhYmxlKCBCYXphYXJDb21tYW5kLkVYRUMgKTsKKyAgICAgICAgY21kLnNldEV4ZWN1dGFibGUoIEJhemFhckNvbnN0YW50cy5FWEVDICk7CiAgICAgICAgIGNtZC5zZXRXb3JraW5nRGlyZWN0b3J5KCB3b3JraW5nRGlyLmdldEFic29sdXRlUGF0aCgpICk7CiAgICAgICAgIGNtZC5hZGRBcmd1bWVudHMoIGNtZEFuZEFyZ3MgKTsKIApAQCAtMTgxLDcgKzE4Myw3IEBACiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAKLSAgICAgICAgU3RyaW5nW10gcmV2Q21kID0gbmV3IFN0cmluZ1tde0JhemFhckNvbW1hbmQuUkVWTk9fQ01EfTsKKyAgICAgICAgU3RyaW5nW10gcmV2Q21kID0gbmV3IFN0cmluZ1tde0JhemFhckNvbnN0YW50cy5SRVZOT19DTUR9OwogICAgICAgICBCYXphYXJSZXZOb0NvbnN1bWVyIGNvbnN1bWVyID0gbmV3IEJhemFhclJldk5vQ29uc3VtZXIoIGxvZ2dlciApOwogICAgICAgICBCYXphYXJVdGlscy5leGVjdXRlKCBjb25zdW1lciwgbG9nZ2VyLCB3b3JraW5nRGlyLCByZXZDbWQgKTsKIApkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvQmF6YWFyQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvQmF6YWFyQ29uc3RhbnRzLmphdmEKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvQmF6YWFyQ29tbWFuZC5qYXZhCnJlbmFtZSB0byBtYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9CYXphYXJDb25zdGFudHMuamF2YQppbmRleCA5M2M3Njk5Li40ZDIxODRiIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9CYXphYXJDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvQmF6YWFyQ29uc3RhbnRzLmphdmEKQEAgLTE5LDcgKzE5LDYgQEAKICAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLkNvbW1hbmQ7CiAKIC8qKgogICogQXZhaWxhYmxlL1VzZWQgYmF6YWFyIGNvbW1hbmRzLgpAQCAtMjcsMTAgKzI2LDEwIEBACiAgKiBUaGVzZSBjb21tYW5kcyBkb2VzIG5vdCBuZWNlc3NhcmlseSBjb3JyZXNwb25kIHRvIHRoZSBTQ00gQVBJLgogICogRWcuICJjaGVjayBpbiIgaXMgdHJhbnNsYXRlZCB0byBiZSAiY29tbWl0IiBhbmQgInB1c2giLgogICoKLSAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRvcmJqb3JuQHNtb3JncmF2Lm9yZyI+VG9yYmr4cm4gRWlrbGkgU234cmdyYXY8L2E+CisgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0b3Jiam9ybkBzbW9yZ3Jhdi5vcmciPlRvcmJq77+9cm4gRWlrbGkgU23vv71yZ3JhdjwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwotcHVibGljIGludGVyZmFjZSBCYXphYXJDb21tYW5kCi0gICAgZXh0ZW5kcyBDb21tYW5kCitwdWJsaWMgY2xhc3MgQmF6YWFyQ29uc3RhbnRzCiB7CiAgICAgLyoqCiAgICAgICogRXhlY3V0YWJsZSBmb3IgQmF6YWFyCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9CYXphYXJDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvQmF6YWFyQ29uc3VtZXIuamF2YQppbmRleCAwOTZhY2MxLi5mOGU2ODg1IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9CYXphYXJDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9jb21tYW5kL0JhemFhckNvbnN1bWVyLmphdmEKQEAgLTM1LDcgKzM1LDggQEAKICAqIE1vcmUgc3BlY2lmaWM6IGxvZyBsaW5lIGVhY2ggbGluZSBpZiBkZWJ1ZyBpcyBlbmFibGVkLCBnZXQgZmlsZSBzdGF0dXMKICAqIGFuZCBkZXRlY3Qgd2FybmluZ3MgZnJvbSBiYXphYXIKICAqCi0gKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0b3Jiam9ybkBzbW9yZ3Jhdi5vcmciPlRvcmJq+HJuIEVpa2xpIFNt+HJncmF2PC9hPgorICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86dG9yYmpvcm5Ac21vcmdyYXYub3JnIj5Ub3Jiau+/vXJuIEVpa2xpIFNt77+9cmdyYXY8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBCYXphYXJDb25zdW1lcgogICAgIGV4dGVuZHMgQWJzdHJhY3RDb25zdW1lcgpAQCAtNDQsMTIgKzQ1LDEyIEBACiAgICAgLyoqCiAgICAgICogQSBsaXN0IG9mIGtub3duIGtleXdvcmRzIGZyb20gYmF6YWFyCiAgICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFwIGlkZW50aWZpZXJzID0gbmV3IEhhc2hNYXAoKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXAgSURFTlRJRklFUlMgPSBuZXcgSGFzaE1hcCgpOwogCiAgICAgLyoqCiAgICAgICogQSBsaXN0IG9mIGtub3duIG1lc3NhZ2UgcHJlZml4ZXMgZnJvbSBiYXphYXIKICAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXAgbWVzc2FnZXMgPSBuZXcgSGFzaE1hcCgpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE1hcCBNRVNTQUdFUyA9IG5ldyBIYXNoTWFwKCk7CiAKICAgICAvKioKICAgICAgKiBOdW1iZXIgb2YgbGluZXMgdG8ga2VlcCBmcm9tIFN0ZC5FcnIKQEAgLTY1LDE0ICs2NiwxNCBAQAogCiAgICAgc3RhdGljCiAgICAgewotICAgICAgICBpZGVudGlmaWVycy5wdXQoICJhZGRlZCIsIFNjbUZpbGVTdGF0dXMuQURERUQgKTsKLSAgICAgICAgaWRlbnRpZmllcnMucHV0KCAidW5rbm93biIsIFNjbUZpbGVTdGF0dXMuVU5LTk9XTiApOwotICAgICAgICBpZGVudGlmaWVycy5wdXQoICJtb2RpZmllZCIsIFNjbUZpbGVTdGF0dXMuTU9ESUZJRUQgKTsKLSAgICAgICAgaWRlbnRpZmllcnMucHV0KCAicmVtb3ZlZCIsIFNjbUZpbGVTdGF0dXMuREVMRVRFRCApOwotICAgICAgICBpZGVudGlmaWVycy5wdXQoICJyZW5hbWVkIiwgU2NtRmlsZVN0YXR1cy5NT0RJRklFRCApOwotICAgICAgICBtZXNzYWdlcy5wdXQoICJienI6IFdBUk5JTkc6IiwgIldBUk5JTkciICk7Ci0gICAgICAgIG1lc3NhZ2VzLnB1dCggImJ6cjogRVJST1I6IiwgIkVSUk9SIiApOwotICAgICAgICBtZXNzYWdlcy5wdXQoICInYnpyJyAiLCAiRVJST1IiICk7IC8vIGJ6ciBpc24ndCBmb3VuZCBpbiB3aW5kb3dzIHBhdGgKKyAgICAgICAgSURFTlRJRklFUlMucHV0KCAiYWRkZWQiLCBTY21GaWxlU3RhdHVzLkFEREVEICk7CisgICAgICAgIElERU5USUZJRVJTLnB1dCggInVua25vd24iLCBTY21GaWxlU3RhdHVzLlVOS05PV04gKTsKKyAgICAgICAgSURFTlRJRklFUlMucHV0KCAibW9kaWZpZWQiLCBTY21GaWxlU3RhdHVzLk1PRElGSUVEICk7CisgICAgICAgIElERU5USUZJRVJTLnB1dCggInJlbW92ZWQiLCBTY21GaWxlU3RhdHVzLkRFTEVURUQgKTsKKyAgICAgICAgSURFTlRJRklFUlMucHV0KCAicmVuYW1lZCIsIFNjbUZpbGVTdGF0dXMuTU9ESUZJRUQgKTsKKyAgICAgICAgTUVTU0FHRVMucHV0KCAiYnpyOiBXQVJOSU5HOiIsICJXQVJOSU5HIiApOworICAgICAgICBNRVNTQUdFUy5wdXQoICJienI6IEVSUk9SOiIsICJFUlJPUiIgKTsKKyAgICAgICAgTUVTU0FHRVMucHV0KCAiJ2J6cicgIiwgIkVSUk9SIiApOyAvLyBienIgaXNuJ3QgZm91bmQgaW4gd2luZG93cyBwYXRoCiAgICAgfQogCiAgICAgcHVibGljIEJhemFhckNvbnN1bWVyKCBTY21Mb2dnZXIgbG9nZ2VyICkKQEAgLTg1LDYgKzg2LDcgQEAKICAgICAgICAgLy9vdmVycmlkZSB0aGlzCiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgZ2V0TG9nZ2VyKCkuZGVidWcoIGxpbmUgKTsKQEAgLTEwOSw3ICsxMTEsNyBAQAogICAgICAgICAgICAgdHJpbW1lZExpbmUgPSB0cmltbWVkTGluZS50cmltKCk7IC8vb25lIG9yIG1vcmUgc3BhY2VzCiAgICAgICAgIH0KIAotICAgICAgICBTY21GaWxlU3RhdHVzIHN0YXR1cyA9IHN0YXR1c1N0ciAhPSBudWxsID8gKCAoU2NtRmlsZVN0YXR1cykgaWRlbnRpZmllcnMuZ2V0KCBzdGF0dXNTdHIuaW50ZXJuKCkgKSApIDogbnVsbDsKKyAgICAgICAgU2NtRmlsZVN0YXR1cyBzdGF0dXMgPSBzdGF0dXNTdHIgIT0gbnVsbCA/ICggKFNjbUZpbGVTdGF0dXMpIElERU5USUZJRVJTLmdldCggc3RhdHVzU3RyLmludGVybigpICkgKSA6IG51bGw7CiAgICAgICAgIGRvQ29uc3VtZSggc3RhdHVzLCB0cmltbWVkTGluZSApOwogICAgIH0KIApAQCAtMTMxLDcgKzEzMyw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcHJvY2Vzc0lucHV0Rm9yS25vd25JZGVudGlmaWVycyggU3RyaW5nIGxpbmUgKQogICAgIHsKLSAgICAgICAgZm9yICggSXRlcmF0b3IgaXQgPSBpZGVudGlmaWVycy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkKKyAgICAgICAgZm9yICggSXRlcmF0b3IgaXQgPSBJREVOVElGSUVSUy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkKICAgICAgICAgewogICAgICAgICAgICAgU3RyaW5nIGlkID0gKFN0cmluZykgaXQubmV4dCgpOwogICAgICAgICAgICAgaWYgKCBsaW5lLnN0YXJ0c1dpdGgoIGlkICkgKQpAQCAtMTQ0LDcgKzE0Niw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0lucHV0Rm9yS25vd25NZXNzYWdlcyggU3RyaW5nIGxpbmUgKQogICAgIHsKLSAgICAgICAgZm9yICggSXRlcmF0b3IgaXQgPSBtZXNzYWdlcy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkKKyAgICAgICAgZm9yICggSXRlcmF0b3IgaXQgPSBNRVNTQUdFUy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkKICAgICAgICAgewogICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IChTdHJpbmcpIGl0Lm5leHQoKTsKICAgICAgICAgICAgIGlmICggbGluZS5zdGFydHNXaXRoKCBwcmVmaXggKSApCkBAIC0xNTUsNyArMTU3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgc3RkZXJyLnJlbW92ZSggMCApOyAvL1JvdGF0ZSBsaXN0CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gbGluZS5zdWJzdHJpbmcoIHByZWZpeC5sZW5ndGgoKSApOwotICAgICAgICAgICAgICAgIGlmICggbWVzc2FnZXMuZ2V0KCBwcmVmaXggKS5lcXVhbHMoICJXQVJOSU5HIiApICkKKyAgICAgICAgICAgICAgICBpZiAoIE1FU1NBR0VTLmdldCggcHJlZml4ICkuZXF1YWxzKCAiV0FSTklORyIgKSApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53YXJuKCBtZXNzYWdlICk7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvYWRkL0JhemFhckFkZENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9jb21tYW5kL2FkZC9CYXphYXJBZGRDb21tYW5kLmphdmEKaW5kZXggOGI3MDAyNi4uNTBhYjA1MyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvYWRkL0JhemFhckFkZENvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9hZGQvQmF6YWFyQWRkQ29tbWFuZC5qYXZhCkBAIC0xOSwzMSArMTksMzQgQEAKICAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21FeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21SZXN1bHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC5Db21tYW5kOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuYWRkLkFic3RyYWN0QWRkQ29tbWFuZDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLmFkZC5BZGRTY21SZXN1bHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmJhemFhci5CYXphYXJVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5iYXphYXIuY29tbWFuZC5CYXphYXJDb21tYW5kOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmJhemFhci5jb21tYW5kLkJhemFhckNvbnN0YW50czsKIAogLyoqCiAgKiBBZGQgbm8gcmVjdXJzaXZlLgogICoKLSAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRvcmJqb3JuQHNtb3JncmF2Lm9yZyI+VG9yYmr4cm4gRWlrbGkgU234cmdyYXY8L2E+CisgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0b3Jiam9ybkBzbW9yZ3Jhdi5vcmciPlRvcmJq77+9cm4gRWlrbGkgU23vv71yZ3JhdjwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEJhemFhckFkZENvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0QWRkQ29tbWFuZAotICAgIGltcGxlbWVudHMgQmF6YWFyQ29tbWFuZAorICAgIGltcGxlbWVudHMgQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFNjbVJlc3VsdCBleGVjdXRlQWRkQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBiaW5hcnkgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewotICAgICAgICBTdHJpbmdbXSBhZGRDbWQgPSBuZXcgU3RyaW5nW117QUREX0NNRCwgTk9fUkVDVVJTRV9PUFRJT059OworICAgICAgICBTdHJpbmdbXSBhZGRDbWQgPSBuZXcgU3RyaW5nW117QmF6YWFyQ29uc3RhbnRzLkFERF9DTUQsIEJhemFhckNvbnN0YW50cy5OT19SRUNVUlNFX09QVElPTn07CiAgICAgICAgIGFkZENtZCA9IEJhemFhclV0aWxzLmV4cGFuZENvbW1hbmRMaW5lKCBhZGRDbWQsIGZpbGVTZXQgKTsKIAogICAgICAgICBGaWxlIHdvcmtpbmdEaXIgPSBmaWxlU2V0LmdldEJhc2VkaXIoKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9jb21tYW5kL2FkZC9CYXphYXJBZGRDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvYWRkL0JhemFhckFkZENvbnN1bWVyLmphdmEKaW5kZXggYzg0YjkzMS4uZDdkODc4OCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvYWRkL0JhemFhckFkZENvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvYWRkL0JhemFhckFkZENvbnN1bWVyLmphdmEKQEAgLTI5LDcgKzI5LDggQEAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogLyoqCi0gKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0b3Jiam9ybkBzbW9yZ3Jhdi5vcmciPlRvcmJq+HJuIEVpa2xpIFNt+HJncmF2PC9hPgorICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86dG9yYmpvcm5Ac21vcmdyYXYub3JnIj5Ub3Jiau+/vXJuIEVpa2xpIFNt77+9cmdyYXY8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBCYXphYXJBZGRDb25zdW1lcgogICAgIGV4dGVuZHMgQmF6YWFyQ29uc3VtZXIKQEAgLTQ0LDYgKzQ1LDcgQEAKICAgICAgICAgdGhpcy53b3JraW5nRGlyID0gd29ya2luZ0RpcjsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGRvQ29uc3VtZSggU2NtRmlsZVN0YXR1cyBzdGF0dXMsIFN0cmluZyB0cmltbWVkTGluZSApCiAgICAgewogICAgICAgICBpZiAoIHN0YXR1cyAhPSBudWxsICYmIHN0YXR1cyA9PSBTY21GaWxlU3RhdHVzLkFEREVEICkKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9jb21tYW5kL2NoYW5nZWxvZy9CYXphYXJDaGFuZ2VMb2dDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9jaGFuZ2Vsb2cvQmF6YWFyQ2hhbmdlTG9nQ29tbWFuZC5qYXZhCmluZGV4IDEzMmE4NjMuLjA1ZWRlNjggMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9jb21tYW5kL2NoYW5nZWxvZy9CYXphYXJDaGFuZ2VMb2dDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvY2hhbmdlbG9nL0JhemFhckNoYW5nZUxvZ0NvbW1hbmQuamF2YQpAQCAtMjQsMTIgKzI0LDEzIEBACiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21SZXN1bHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtQnJhbmNoOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuQ29tbWFuZDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLmNoYW5nZWxvZy5BYnN0cmFjdENoYW5nZUxvZ0NvbW1hbmQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC5jaGFuZ2Vsb2cuQ2hhbmdlTG9nU2NtUmVzdWx0OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuY2hhbmdlbG9nLkNoYW5nZUxvZ1NldDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuYmF6YWFyLkJhemFhclV0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmJhemFhci5jb21tYW5kLkJhemFhckNvbW1hbmQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuYmF6YWFyLmNvbW1hbmQuQmF6YWFyQ29uc3RhbnRzOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKQEAgLTM3LDE4ICszOCwyMCBAQAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiAvKioKLSAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRvcmJqb3JuQHNtb3JncmF2Lm9yZyI+VG9yYmr4cm4gRWlrbGkgU234cmdyYXY8L2E+CisgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0b3Jiam9ybkBzbW9yZ3Jhdi5vcmciPlRvcmJq77+9cm4gRWlrbGkgU23vv71yZ3JhdjwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEJhemFhckNoYW5nZUxvZ0NvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0Q2hhbmdlTG9nQ29tbWFuZAotICAgIGltcGxlbWVudHMgQmF6YWFyQ29tbWFuZAorICAgIGltcGxlbWVudHMgQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENoYW5nZUxvZ1NjbVJlc3VsdCBleGVjdXRlQ2hhbmdlTG9nQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlIHN0YXJ0RGF0ZSwgRGF0ZSBlbmREYXRlLCBTY21CcmFuY2ggYnJhbmNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRlUGF0dGVybiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7Ci0gICAgICAgIFN0cmluZ1tdIGNtZCA9IG5ldyBTdHJpbmdbXXtMT0dfQ01ELCBWRVJCT1NFX09QVElPTn07CisgICAgICAgIFN0cmluZ1tdIGNtZCA9IG5ldyBTdHJpbmdbXXtCYXphYXJDb25zdGFudHMuTE9HX0NNRCwgQmF6YWFyQ29uc3RhbnRzLlZFUkJPU0VfT1BUSU9OfTsKICAgICAgICAgQmF6YWFyQ2hhbmdlTG9nQ29uc3VtZXIgY29uc3VtZXIgPSBuZXcgQmF6YWFyQ2hhbmdlTG9nQ29uc3VtZXIoIGdldExvZ2dlcigpLCBkYXRlUGF0dGVybiApOwogICAgICAgICBTY21SZXN1bHQgcmVzdWx0ID0gQmF6YWFyVXRpbHMuZXhlY3V0ZSggY29uc3VtZXIsIGdldExvZ2dlcigpLCBmaWxlU2V0LmdldEJhc2VkaXIoKSwgY21kICk7CiAKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9jb21tYW5kL2NoYW5nZWxvZy9CYXphYXJDaGFuZ2VMb2dDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvY2hhbmdlbG9nL0JhemFhckNoYW5nZUxvZ0NvbnN1bWVyLmphdmEKaW5kZXggYzAwY2Y0Ni4uNWM0NGQxZCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvY2hhbmdlbG9nL0JhemFhckNoYW5nZUxvZ0NvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvY2hhbmdlbG9nL0JhemFhckNoYW5nZUxvZ0NvbnN1bWVyLmphdmEKQEAgLTMwLDcgKzMwLDggQEAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogLyoqCi0gKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0b3Jiam9ybkBzbW9yZ3Jhdi5vcmciPlRvcmJq+HJuIEVpa2xpIFNt+HJncmF2PC9hPgorICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86dG9yYmpvcm5Ac21vcmdyYXYub3JnIj5Ub3Jiau+/vXJuIEVpa2xpIFNt77+9cmdyYXY8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBCYXphYXJDaGFuZ2VMb2dDb25zdW1lcgogICAgIGV4dGVuZHMgQmF6YWFyQ29uc3VtZXIKQEAgLTgzLDYgKzg0LDcgQEAKICAgICAgICAgcmV0dXJuIGxvZ0VudHJpZXM7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBkb0NvbnN1bWUoIFNjbUZpbGVTdGF0dXMgc3RhdHVzLCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBTdHJpbmcgdG1wTGluZSA9IGxpbmU7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9jaGVja2luL0JhemFhckNoZWNrSW5Db21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9jaGVja2luL0JhemFhckNoZWNrSW5Db21tYW5kLmphdmEKaW5kZXggYWE3MmZlMS4uOGZlMDliNiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvY2hlY2tpbi9CYXphYXJDaGVja0luQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9jb21tYW5kL2NoZWNraW4vQmF6YWFyQ2hlY2tJbkNvbW1hbmQuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuc3RhdHVzLlN0YXR1c1NjbVJlc3VsdDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuYmF6YWFyLkJhemFhclV0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmJhemFhci5jb21tYW5kLkJhemFhckNvbW1hbmQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuYmF6YWFyLmNvbW1hbmQuQmF6YWFyQ29uc3RhbnRzOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmJhemFhci5jb21tYW5kLkJhemFhckNvbnN1bWVyOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmJhemFhci5jb21tYW5kLnN0YXR1cy5CYXphYXJTdGF0dXNDb21tYW5kOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmJhemFhci5yZXBvc2l0b3J5LkJhemFhclNjbVByb3ZpZGVyUmVwb3NpdG9yeTsKQEAgLTQyLDEyICs0MiwxMyBAQAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiAvKioKLSAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRvcmJqb3JuQHNtb3JncmF2Lm9yZyI+VG9yYmr4cm4gRWlrbGkgU234cmdyYXY8L2E+CisgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0b3Jiam9ybkBzbW9yZ3Jhdi5vcmciPlRvcmJq77+9cm4gRWlrbGkgU23vv71yZ3JhdjwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEJhemFhckNoZWNrSW5Db21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdENoZWNrSW5Db21tYW5kCiB7Ci0KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDaGVja0luU2NtUmVzdWx0IGV4ZWN1dGVDaGVja0luQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC03MCw4ICs3MSw4IEBACiAgICAgICAgICAgICBmb3IgKCBJdGVyYXRvciBpdCA9IHN0YXR1c0ZpbGVzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTsgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFNjbUZpbGUgZmlsZSA9IChTY21GaWxlKSBpdC5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCBmaWxlLmdldFN0YXR1cygpID09IFNjbUZpbGVTdGF0dXMuQURERUQgfHwgZmlsZS5nZXRTdGF0dXMoKSA9PSBTY21GaWxlU3RhdHVzLkRFTEVURUQgfHwKLSAgICAgICAgICAgICAgICAgICAgZmlsZS5nZXRTdGF0dXMoKSA9PSBTY21GaWxlU3RhdHVzLk1PRElGSUVEICkKKyAgICAgICAgICAgICAgICBpZiAoIGZpbGUuZ2V0U3RhdHVzKCkgPT0gU2NtRmlsZVN0YXR1cy5BRERFRCB8fCBmaWxlLmdldFN0YXR1cygpID09IFNjbUZpbGVTdGF0dXMuREVMRVRFRAorICAgICAgICAgICAgICAgICAgICB8fCBmaWxlLmdldFN0YXR1cygpID09IFNjbUZpbGVTdGF0dXMuTU9ESUZJRUQgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgY29tbWl0ZWRGaWxlcy5hZGQoIG5ldyBTY21GaWxlKCBmaWxlLmdldFBhdGgoKSwgU2NtRmlsZVN0YXR1cy5DSEVDS0VEX0lOICkgKTsKICAgICAgICAgICAgICAgICB9CkBAIC04Nyw3ICs4OCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvLyBDb21taXQgdG8gbG9jYWwgYnJhbmNoCi0gICAgICAgIFN0cmluZ1tdIGNvbW1pdENtZCA9IG5ldyBTdHJpbmdbXXtCYXphYXJDb21tYW5kLkNPTU1JVF9DTUQsIEJhemFhckNvbW1hbmQuTUVTU0FHRV9PUFRJT04sIG1lc3NhZ2V9OworICAgICAgICBTdHJpbmdbXSBjb21taXRDbWQgPSBuZXcgU3RyaW5nW117QmF6YWFyQ29uc3RhbnRzLkNPTU1JVF9DTUQsIEJhemFhckNvbnN0YW50cy5NRVNTQUdFX09QVElPTiwgbWVzc2FnZX07CiAgICAgICAgIGNvbW1pdENtZCA9IEJhemFhclV0aWxzLmV4cGFuZENvbW1hbmRMaW5lKCBjb21taXRDbWQsIGZpbGVTZXQgKTsKICAgICAgICAgU2NtUmVzdWx0IHJlc3VsdCA9CiAgICAgICAgICAgICBCYXphYXJVdGlscy5leGVjdXRlKCBuZXcgQmF6YWFyQ29uc3VtZXIoIGdldExvZ2dlcigpICksIGdldExvZ2dlcigpLCBmaWxlU2V0LmdldEJhc2VkaXIoKSwgY29tbWl0Q21kICk7CkBAIC05Niw5ICs5Nyw5IEBACiAgICAgICAgIEJhemFhclNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5ID0gKEJhemFhclNjbVByb3ZpZGVyUmVwb3NpdG9yeSkgcmVwbzsKICAgICAgICAgaWYgKCAhcmVwb3NpdG9yeS5nZXRVUkkoKS5lcXVhbHMoIGZpbGVTZXQuZ2V0QmFzZWRpcigpLmdldEFic29sdXRlUGF0aCgpICkgKQogICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmdbXSBwdXNoX2NtZCA9IG5ldyBTdHJpbmdbXXtCYXphYXJDb21tYW5kLlBVU0hfQ01ELCByZXBvc2l0b3J5LmdldFVSSSgpfTsKKyAgICAgICAgICAgIFN0cmluZ1tdIHB1c2hDbWQgPSBuZXcgU3RyaW5nW10geyBCYXphYXJDb25zdGFudHMuUFVTSF9DTUQsIHJlcG9zaXRvcnkuZ2V0VVJJKCkgfTsKICAgICAgICAgICAgIHJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgQmF6YWFyVXRpbHMuZXhlY3V0ZSggbmV3IEJhemFhckNvbnN1bWVyKCBnZXRMb2dnZXIoKSApLCBnZXRMb2dnZXIoKSwgZmlsZVNldC5nZXRCYXNlZGlyKCksIHB1c2hfY21kICk7CisgICAgICAgICAgICAgICAgQmF6YWFyVXRpbHMuZXhlY3V0ZSggbmV3IEJhemFhckNvbnN1bWVyKCBnZXRMb2dnZXIoKSApLCBnZXRMb2dnZXIoKSwgZmlsZVNldC5nZXRCYXNlZGlyKCksIHB1c2hDbWQgKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBuZXcgQ2hlY2tJblNjbVJlc3VsdCggY29tbWl0ZWRGaWxlcywgcmVzdWx0ICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9jaGVja291dC9CYXphYXJDaGVja091dENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9jb21tYW5kL2NoZWNrb3V0L0JhemFhckNoZWNrT3V0Q29tbWFuZC5qYXZhCmluZGV4IDFkZTcyZmMuLjc5NTFiNmEgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9jb21tYW5kL2NoZWNrb3V0L0JhemFhckNoZWNrT3V0Q29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9jb21tYW5kL2NoZWNrb3V0L0JhemFhckNoZWNrT3V0Q29tbWFuZC5qYXZhCkBAIC0yMywxMSArMjMsMTIgQEAKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVJlc3VsdDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21WZXJzaW9uOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuQ29tbWFuZDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLmNoZWNrb3V0LkFic3RyYWN0Q2hlY2tPdXRDb21tYW5kOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuY2hlY2tvdXQuQ2hlY2tPdXRTY21SZXN1bHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmJhemFhci5CYXphYXJVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5iYXphYXIuY29tbWFuZC5CYXphYXJDb21tYW5kOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmJhemFhci5jb21tYW5kLkJhemFhckNvbnN0YW50czsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5iYXphYXIuY29tbWFuZC5CYXphYXJDb25zdW1lcjsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5iYXphYXIucmVwb3NpdG9yeS5CYXphYXJTY21Qcm92aWRlclJlcG9zaXRvcnk7CiBpbXBvcnQgb3JnLmNvZGVoYXVzLnBsZXh1cy51dGlsLkZpbGVVdGlsczsKQEAgLTM3LDEzICszOCwxNCBAQAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiAKIC8qKgotICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86dG9yYmpvcm5Ac21vcmdyYXYub3JnIj5Ub3JiavhybiBFaWtsaSBTbfhyZ3JhdjwvYT4KKyAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRvcmJqb3JuQHNtb3JncmF2Lm9yZyI+VG9yYmrvv71ybiBFaWtsaSBTbe+/vXJncmF2PC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgQmF6YWFyQ2hlY2tPdXRDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdENoZWNrT3V0Q29tbWFuZAotICAgIGltcGxlbWVudHMgQmF6YWFyQ29tbWFuZAorICAgIGltcGxlbWVudHMgQ29tbWFuZAogewotCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hlY2tPdXRTY21SZXN1bHQgZXhlY3V0ZUNoZWNrT3V0Q29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiB2ZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtNjksMTQgKzcxLDE0IEBACiAgICAgICAgIH0KIAogICAgICAgICAvLyBEbyB0aGUgYWN0dWFsIGNoZWNrb3V0Ci0gICAgICAgIFN0cmluZ1tdIGNoZWNrb3V0X2NtZCA9IG5ldyBTdHJpbmdbXXtCUkFOQ0hfQ01ELCB1cmwsIGNoZWNrb3V0RGlyLmdldEFic29sdXRlUGF0aCgpfTsKLSAgICAgICAgQmF6YWFyQ29uc3VtZXIgY2hlY2tvdXRfY29uc3VtZXIgPSBuZXcgQmF6YWFyQ29uc3VtZXIoIGdldExvZ2dlcigpICk7Ci0gICAgICAgIEJhemFhclV0aWxzLmV4ZWN1dGUoIGNoZWNrb3V0X2NvbnN1bWVyLCBnZXRMb2dnZXIoKSwgY2hlY2tvdXREaXIuZ2V0UGFyZW50RmlsZSgpLCBjaGVja291dF9jbWQgKTsKKyAgICAgICAgU3RyaW5nW10gY2hlY2tvdXRDbWQgPSBuZXcgU3RyaW5nW117QmF6YWFyQ29uc3RhbnRzLkJSQU5DSF9DTUQsIHVybCwgY2hlY2tvdXREaXIuZ2V0QWJzb2x1dGVQYXRoKCl9OworICAgICAgICBCYXphYXJDb25zdW1lciBjaGVja291dENvbnN1bWVyID0gbmV3IEJhemFhckNvbnN1bWVyKCBnZXRMb2dnZXIoKSApOworICAgICAgICBCYXphYXJVdGlscy5leGVjdXRlKCBjaGVja291dENvbnN1bWVyLCBnZXRMb2dnZXIoKSwgY2hlY2tvdXREaXIuZ2V0UGFyZW50RmlsZSgpLCBjaGVja291dENtZCApOwogCiAgICAgICAgIC8vIERvIGludmVudG9yeSB0byBmaW5kIGxpc3Qgb2YgY2hlY2tlZG91dCBmaWxlcwotICAgICAgICBTdHJpbmdbXSBpbnZlbnRvcnlfY21kID0gbmV3IFN0cmluZ1tde0lOVkVOVE9SWV9DTUR9OworICAgICAgICBTdHJpbmdbXSBpbnZlbnRvcnlDbWQgPSBuZXcgU3RyaW5nW117QmF6YWFyQ29uc3RhbnRzLklOVkVOVE9SWV9DTUR9OwogICAgICAgICBCYXphYXJDaGVja091dENvbnN1bWVyIGNvbnN1bWVyID0gbmV3IEJhemFhckNoZWNrT3V0Q29uc3VtZXIoIGdldExvZ2dlcigpLCBjaGVja291dERpciApOwotICAgICAgICBTY21SZXN1bHQgcmVzdWx0ID0gQmF6YWFyVXRpbHMuZXhlY3V0ZSggY29uc3VtZXIsIGdldExvZ2dlcigpLCBjaGVja291dERpciwgaW52ZW50b3J5X2NtZCApOworICAgICAgICBTY21SZXN1bHQgcmVzdWx0ID0gQmF6YWFyVXRpbHMuZXhlY3V0ZSggY29uc3VtZXIsIGdldExvZ2dlcigpLCBjaGVja291dERpciwgaW52ZW50b3J5Q21kICk7CiAKICAgICAgICAgcmV0dXJuIG5ldyBDaGVja091dFNjbVJlc3VsdCggY29uc3VtZXIuZ2V0Q2hlY2tlZE91dEZpbGVzKCksIHJlc3VsdCApOwogICAgIH0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9jb21tYW5kL2NoZWNrb3V0L0JhemFhckNoZWNrT3V0Q29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9jb21tYW5kL2NoZWNrb3V0L0JhemFhckNoZWNrT3V0Q29uc3VtZXIuamF2YQppbmRleCBiZjRmYWQ1Li5lZjJkMjhkIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9jaGVja291dC9CYXphYXJDaGVja091dENvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvY2hlY2tvdXQvQmF6YWFyQ2hlY2tPdXRDb25zdW1lci5qYXZhCkBAIC0yOSw3ICsyOSw4IEBACiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIC8qKgotICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86dG9yYmpvcm5Ac21vcmdyYXYub3JnIj5Ub3JiavhybiBFaWtsaSBTbfhyZ3JhdjwvYT4KKyAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRvcmJqb3JuQHNtb3JncmF2Lm9yZyI+VG9yYmrvv71ybiBFaWtsaSBTbe+/vXJncmF2PC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgQmF6YWFyQ2hlY2tPdXRDb25zdW1lcgogICAgIGV4dGVuZHMgQmF6YWFyQ29uc3VtZXIKQEAgLTQ1LDYgKzQ2LDcgQEAKICAgICAgICAgdGhpcy53b3JraW5nRGlyZWN0b3J5ID0gd29ya2luZ0RpcmVjdG9yeTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGRvQ29uc3VtZSggU2NtRmlsZVN0YXR1cyBzdGF0dXMsIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKCB3b3JraW5nRGlyZWN0b3J5LCBsaW5lICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9kaWZmL0JhemFhckRpZmZDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9kaWZmL0JhemFhckRpZmZDb21tYW5kLmphdmEKaW5kZXggZjIxNGY0Mi4uY2UyM2E2NiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvZGlmZi9CYXphYXJEaWZmQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9jb21tYW5kL2RpZmYvQmF6YWFyRGlmZkNvbW1hbmQuamF2YQpAQCAtMjMsMjEgKzIzLDIzIEBACiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21SZXN1bHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVmVyc2lvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLkNvbW1hbmQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC5kaWZmLkFic3RyYWN0RGlmZkNvbW1hbmQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC5kaWZmLkRpZmZTY21SZXN1bHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmJhemFhci5CYXphYXJVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5iYXphYXIuY29tbWFuZC5CYXphYXJDb21tYW5kOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmJhemFhci5jb21tYW5kLkJhemFhckNvbnN0YW50czsKIGltcG9ydCBvcmcuY29kZWhhdXMucGxleHVzLnV0aWwuU3RyaW5nVXRpbHM7CiAKIC8qKgotICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86dG9yYmpvcm5Ac21vcmdyYXYub3JnIj5Ub3JiavhybiBFaWtsaSBTbfhyZ3JhdjwvYT4KKyAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRvcmJqb3JuQHNtb3JncmF2Lm9yZyI+VG9yYmrvv71ybiBFaWtsaSBTbe+/vXJncmF2PC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgQmF6YWFyRGlmZkNvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0RGlmZkNvbW1hbmQKLSAgICBpbXBsZW1lbnRzIEJhemFhckNvbW1hbmQKKyAgICBpbXBsZW1lbnRzIENvbW1hbmQKIHsKLQorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIERpZmZTY21SZXN1bHQgZXhlY3V0ZURpZmZDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiBzdGFydFJldmlzaW9uLCBTY21WZXJzaW9uIGVuZFJldmlzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtNTEsMTEgKzUzLDExIEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV2QXJnICs9ICIuLiIgKyBlbmRSZXZpc2lvbi5nZXROYW1lKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBkaWZmQ21kID0gbmV3IFN0cmluZ1tde0RJRkZfQ01ELCBSRVZJU0lPTl9PUFRJT04sIHJldkFyZ307CisgICAgICAgICAgICBkaWZmQ21kID0gbmV3IFN0cmluZ1tde0JhemFhckNvbnN0YW50cy5ESUZGX0NNRCwgQmF6YWFyQ29uc3RhbnRzLlJFVklTSU9OX09QVElPTiwgcmV2QXJnfTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIGRpZmZDbWQgPSBuZXcgU3RyaW5nW117RElGRl9DTUR9OworICAgICAgICAgICAgZGlmZkNtZCA9IG5ldyBTdHJpbmdbXXtCYXphYXJDb25zdGFudHMuRElGRl9DTUR9OwogICAgICAgICB9CiAKICAgICAgICAgZGlmZkNtZCA9IEJhemFhclV0aWxzLmV4cGFuZENvbW1hbmRMaW5lKCBkaWZmQ21kLCBmaWxlU2V0ICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9kaWZmL0JhemFhckRpZmZDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvZGlmZi9CYXphYXJEaWZmQ29uc3VtZXIuamF2YQppbmRleCA0MGJjNDU4Li4xYzgyMTQ5IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9kaWZmL0JhemFhckRpZmZDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9jb21tYW5kL2RpZmYvQmF6YWFyRGlmZkNvbnN1bWVyLmphdmEKQEAgLTMxLDMxICszMSwzMiBAQAogaW1wb3J0IGphdmEudXRpbC5NYXA7CiAKIC8qKgotICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86dG9yYmpvcm5Ac21vcmdyYXYub3JnIj5Ub3JiavhybiBFaWtsaSBTbfhyZ3JhdjwvYT4KKyAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRvcmJqb3JuQHNtb3JncmF2Lm9yZyI+VG9yYmrvv71ybiBFaWtsaSBTbe+/vXJncmF2PC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgQmF6YWFyRGlmZkNvbnN1bWVyCiAgICAgZXh0ZW5kcyBCYXphYXJDb25zdW1lcgogewogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIE1PRElGSUVEX0ZJTEVfVE9LRU4gPSAiPT09IG1vZGlmaWVkIGZpbGUgIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9ESUZJRURfRklMRV9UT0tFTiA9ICI9PT0gbW9kaWZpZWQgZmlsZSAiOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEFEREVEX0ZJTEVfVE9LRU4gPSAiPT09IGFkZGVkIGZpbGUgIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQURERURfRklMRV9UT0tFTiA9ICI9PT0gYWRkZWQgZmlsZSAiOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIERFTEVURURfRklMRV9UT0tFTiA9ICI9PT0gZGVsZXRlZCBmaWxlICI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFTEVURURfRklMRV9UT0tFTiA9ICI9PT0gZGVsZXRlZCBmaWxlICI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTk9fTkVXTElORV9UT0tFTiA9ICJcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9fTkVXTElORV9UT0tFTiA9ICJcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlIjsKIAotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBGUk9NX0ZJTEVfVE9LRU4gPSAiLS0tIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRlJPTV9GSUxFX1RPS0VOID0gIi0tLSI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgVE9fRklMRV9UT0tFTiA9ICIrKysiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUT19GSUxFX1RPS0VOID0gIisrKyI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgQURERURfTElORV9UT0tFTiA9ICIrIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQURERURfTElORV9UT0tFTiA9ICIrIjsKIAotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBSRU1PVkVEX0xJTkVfVE9LRU4gPSAiLSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTU9WRURfTElORV9UT0tFTiA9ICItIjsKIAotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBVTkNIQU5HRURfTElORV9UT0tFTiA9ICIgIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVU5DSEFOR0VEX0xJTkVfVE9LRU4gPSAiICI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkFOR0VfVE9LRU4gPSAiQEAiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSQU5HRV9UT0tFTiA9ICJAQCI7CiAKICAgICBwcml2YXRlIFNjbUxvZ2dlciBsb2dnZXI7CiAKQEAgLTc4LDYgKzc5LDcgQEAKICAgICAgICAgdGhpcy53b3JraW5nRGlyZWN0b3J5ID0gd29ya2luZ0RpcmVjdG9yeTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGRvQ29uc3VtZSggU2NtRmlsZVN0YXR1cyBzdGF0dXMsIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIFN0cmluZyB0bXBMaW5lID0gbmV3IFN0cmluZyggbGluZSApOwpAQCAtMTA5LDkgKzExMSw5IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIGlnbm9yZSAodG8gYXZvaWQgY29uZmxpY3RzIHdpdGggYWRkIGFuZCByZW1vdmUgdG9rZW5zKQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCBsaW5lLnN0YXJ0c1dpdGgoIEFEREVEX0xJTkVfVE9LRU4gKSB8fCBsaW5lLnN0YXJ0c1dpdGgoIFJFTU9WRURfTElORV9UT0tFTiApIHx8Ci0gICAgICAgICAgICBsaW5lLnN0YXJ0c1dpdGgoIFVOQ0hBTkdFRF9MSU5FX1RPS0VOICkgfHwgbGluZS5zdGFydHNXaXRoKCBSQU5HRV9UT0tFTiApIHx8Ci0gICAgICAgICAgICBsaW5lLnN0YXJ0c1dpdGgoIE5PX05FV0xJTkVfVE9LRU4gKSApCisgICAgICAgIGVsc2UgaWYgKCBsaW5lLnN0YXJ0c1dpdGgoIEFEREVEX0xJTkVfVE9LRU4gKSB8fCBsaW5lLnN0YXJ0c1dpdGgoIFJFTU9WRURfTElORV9UT0tFTiApCisgICAgICAgICAgICB8fCBsaW5lLnN0YXJ0c1dpdGgoIFVOQ0hBTkdFRF9MSU5FX1RPS0VOICkgfHwgbGluZS5zdGFydHNXaXRoKCBSQU5HRV9UT0tFTiApCisgICAgICAgICAgICB8fCBsaW5lLnN0YXJ0c1dpdGgoIE5PX05FV0xJTkVfVE9LRU4gKSApCiAgICAgICAgIHsKICAgICAgICAgICAgIGN1cnJlbnREaWZmZXJlbmNlLmFwcGVuZCggbGluZSApLmFwcGVuZCggIlxuIiApOwogICAgICAgICB9CkBAIC0xNDgsNiArMTUwLDggQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBAcGFyYW0gc3RhdHVzCisgICAgICogQHBhcmFtIHRtcExpbmUKICAgICAgKiBAcmV0dXJuIFRydWUgaWYgdG1wTGluZSB3YXMgYSB2YWxpZCBmaWxlIGFuZCB0aHVzIGFkZGVkIHRvIHRoZSBjaGFuZ2VzZXQKICAgICAgKi8KICAgICBwcml2YXRlIGJvb2xlYW4gYWRkQ2hhbmdlZEZpbGUoIFNjbUZpbGVTdGF0dXMgc3RhdHVzLCBTdHJpbmcgdG1wTGluZSApCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9yZW1vdmUvQmF6YWFyUmVtb3ZlQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvcmVtb3ZlL0JhemFhclJlbW92ZUNvbW1hbmQuamF2YQppbmRleCBiODBkYmM1Li44NWQ0NDk2IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9yZW1vdmUvQmF6YWFyUmVtb3ZlQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9jb21tYW5kL3JlbW92ZS9CYXphYXJSZW1vdmVDb21tYW5kLmphdmEKQEAgLTE5LDI5ICsxOSwzMiBAQAogICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAoraW1wb3J0IGphdmEuaW8uRmlsZTsKKwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVJlc3VsdDsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLkNvbW1hbmQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC5yZW1vdmUuQWJzdHJhY3RSZW1vdmVDb21tYW5kOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQucmVtb3ZlLlJlbW92ZVNjbVJlc3VsdDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuYmF6YWFyLkJhemFhclV0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmJhemFhci5jb21tYW5kLkJhemFhckNvbW1hbmQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuYmF6YWFyLmNvbW1hbmQuQmF6YWFyQ29uc3RhbnRzOwogCiAvKioKLSAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRvcmJqb3JuQHNtb3JncmF2Lm9yZyI+VG9yYmr4cm4gRWlrbGkgU234cmdyYXY8L2E+CisgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0b3Jiam9ybkBzbW9yZ3Jhdi5vcmciPlRvcmJq77+9cm4gRWlrbGkgU23vv71yZ3JhdjwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEJhemFhclJlbW92ZUNvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0UmVtb3ZlQ29tbWFuZAotICAgIGltcGxlbWVudHMgQmF6YWFyQ29tbWFuZAorICAgIGltcGxlbWVudHMgQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFNjbVJlc3VsdCBleGVjdXRlUmVtb3ZlQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIG1lc3NhZ2UgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogCi0gICAgICAgIFN0cmluZ1tdIGNvbW1hbmQgPSBuZXcgU3RyaW5nW117UkVNT1ZFX0NNRH07CisgICAgICAgIFN0cmluZ1tdIGNvbW1hbmQgPSBuZXcgU3RyaW5nW10geyBCYXphYXJDb25zdGFudHMuUkVNT1ZFX0NNRCB9OwogICAgICAgICBCYXphYXJVdGlscy5leHBhbmRDb21tYW5kTGluZSggY29tbWFuZCwgZmlsZVNldCApOwogCiAgICAgICAgIEZpbGUgd29ya2luZ0RpciA9IGZpbGVTZXQuZ2V0QmFzZWRpcigpOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvcmVtb3ZlL0JhemFhclJlbW92ZUNvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9yZW1vdmUvQmF6YWFyUmVtb3ZlQ29uc3VtZXIuamF2YQppbmRleCA0Y2NjNGY1Li5kYjc0ZjFiIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9yZW1vdmUvQmF6YWFyUmVtb3ZlQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9yZW1vdmUvQmF6YWFyUmVtb3ZlQ29uc3VtZXIuamF2YQpAQCAtMjksNyArMjksOCBAQAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiAvKioKLSAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRvcmJqb3JuQHNtb3JncmF2Lm9yZyI+VG9yYmr4cm4gRWlrbGkgU234cmdyYXY8L2E+CisgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0b3Jiam9ybkBzbW9yZ3Jhdi5vcmciPlRvcmJq77+9cm4gRWlrbGkgU23vv71yZ3JhdjwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEJhemFhclJlbW92ZUNvbnN1bWVyCiAgICAgZXh0ZW5kcyBCYXphYXJDb25zdW1lcgpAQCAtNDQsNiArNDUsNyBAQAogICAgICAgICB0aGlzLndvcmtpbmdEaXIgPSB3b3JraW5nRGlyOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgZG9Db25zdW1lKCBTY21GaWxlU3RhdHVzIHN0YXR1cywgU3RyaW5nIHRyaW1tZWRMaW5lICkKICAgICB7CiAgICAgICAgIGlmICggc3RhdHVzICE9IG51bGwgJiYgc3RhdHVzID09IFNjbUZpbGVTdGF0dXMuREVMRVRFRCApCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9zdGF0dXMvQmF6YWFyU3RhdHVzQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvc3RhdHVzL0JhemFhclN0YXR1c0NvbW1hbmQuamF2YQppbmRleCA4ZmU5OWFhLi5mYmIwMDg5IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC9zdGF0dXMvQmF6YWFyU3RhdHVzQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9jb21tYW5kL3N0YXR1cy9CYXphYXJTdGF0dXNDb21tYW5kLmphdmEKQEAgLTIyLDIwICsyMiwyMiBAQAogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVJlc3VsdDsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLkNvbW1hbmQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC5zdGF0dXMuQWJzdHJhY3RTdGF0dXNDb21tYW5kOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuc3RhdHVzLlN0YXR1c1NjbVJlc3VsdDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuYmF6YWFyLkJhemFhclV0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmJhemFhci5jb21tYW5kLkJhemFhckNvbW1hbmQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuYmF6YWFyLmNvbW1hbmQuQmF6YWFyQ29uc3RhbnRzOwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwogCiAvKioKLSAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRvcmJqb3JuQHNtb3JncmF2Lm9yZyI+VG9yYmr4cm4gRWlrbGkgU234cmdyYXY8L2E+CisgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0b3Jiam9ybkBzbW9yZ3Jhdi5vcmciPlRvcmJq77+9cm4gRWlrbGkgU23vv71yZ3JhdjwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEJhemFhclN0YXR1c0NvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0U3RhdHVzQ29tbWFuZAotICAgIGltcGxlbWVudHMgQmF6YWFyQ29tbWFuZAorICAgIGltcGxlbWVudHMgQ29tbWFuZAogewogCiAgICAgcHVibGljIEJhemFhclN0YXR1c0NvbW1hbmQoKQpAQCAtNDMsMTMgKzQ1LDE0IEBACiAgICAgICAgIHN1cGVyKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RhdHVzU2NtUmVzdWx0IGV4ZWN1dGVTdGF0dXNDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKIAogICAgICAgICBGaWxlIHdvcmtpbmdEaXIgPSBmaWxlU2V0LmdldEJhc2VkaXIoKTsKICAgICAgICAgQmF6YWFyU3RhdHVzQ29uc3VtZXIgY29uc3VtZXIgPSBuZXcgQmF6YWFyU3RhdHVzQ29uc3VtZXIoIGdldExvZ2dlcigpLCB3b3JraW5nRGlyICk7Ci0gICAgICAgIFN0cmluZ1tdIHN0YXR1c0NtZCA9IG5ldyBTdHJpbmdbXXtTVEFUVVNfQ01EfTsKKyAgICAgICAgU3RyaW5nW10gc3RhdHVzQ21kID0gbmV3IFN0cmluZ1tdIHsgQmF6YWFyQ29uc3RhbnRzLlNUQVRVU19DTUQgfTsKICAgICAgICAgU2NtUmVzdWx0IHJlc3VsdCA9IEJhemFhclV0aWxzLmV4ZWN1dGUoIGNvbnN1bWVyLCBnZXRMb2dnZXIoKSwgd29ya2luZ0Rpciwgc3RhdHVzQ21kICk7CiAKICAgICAgICAgcmV0dXJuIG5ldyBTdGF0dXNTY21SZXN1bHQoIGNvbnN1bWVyLmdldFN0YXR1cygpLCByZXN1bHQgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9jb21tYW5kL3N0YXR1cy9CYXphYXJTdGF0dXNDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvc3RhdHVzL0JhemFhclN0YXR1c0NvbnN1bWVyLmphdmEKaW5kZXggMzdlMjg5Ni4uOTMwNzg3NiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvc3RhdHVzL0JhemFhclN0YXR1c0NvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvc3RhdHVzL0JhemFhclN0YXR1c0NvbnN1bWVyLmphdmEKQEAgLTI5LDcgKzI5LDggQEAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogLyoqCi0gKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0b3Jiam9ybkBzbW9yZ3Jhdi5vcmciPlRvcmJq+HJuIEVpa2xpIFNt+HJncmF2PC9hPgorICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86dG9yYmpvcm5Ac21vcmdyYXYub3JnIj5Ub3Jiau+/vXJuIEVpa2xpIFNt77+9cmdyYXY8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIGNsYXNzIEJhemFhclN0YXR1c0NvbnN1bWVyCiAgICAgZXh0ZW5kcyBCYXphYXJDb25zdW1lcgpAQCAtNDksNiArNTAsNyBAQAogICAgICAgICB0aGlzLndvcmtpbmdEaXIgPSB3b3JraW5nRGlyOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgZG9Db25zdW1lKCBTY21GaWxlU3RhdHVzIHN0YXR1cywgU3RyaW5nIHRyaW1tZWRMaW5lICkKICAgICB7CiAgICAgICAgIGlmICggc3RhdHVzICE9IG51bGwgKQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvdXBkYXRlL0JhemFhclVwZGF0ZUNvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9jb21tYW5kL3VwZGF0ZS9CYXphYXJVcGRhdGVDb21tYW5kLmphdmEKaW5kZXggNGU1MzFmZC4uNDc3NzljOSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL2NvbW1hbmQvdXBkYXRlL0JhemFhclVwZGF0ZUNvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvY29tbWFuZC91cGRhdGUvQmF6YWFyVXBkYXRlQ29tbWFuZC5qYXZhCkBAIC0yNSwxMyArMjUsMTQgQEAKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU3RhdHVzOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVJlc3VsdDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21WZXJzaW9uOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuQ29tbWFuZDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLmNoYW5nZWxvZy5DaGFuZ2VMb2dDb21tYW5kOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQudXBkYXRlLkFic3RyYWN0VXBkYXRlQ29tbWFuZDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLnVwZGF0ZS5VcGRhdGVTY21SZXN1bHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC51cGRhdGUuVXBkYXRlU2NtUmVzdWx0V2l0aFJldmlzaW9uOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5iYXphYXIuQmF6YWFyVXRpbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuYmF6YWFyLmNvbW1hbmQuQmF6YWFyQ29tbWFuZDsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5iYXphYXIuY29tbWFuZC5CYXphYXJDb25zdGFudHM7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuYmF6YWFyLmNvbW1hbmQuQmF6YWFyQ29uc3VtZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuYmF6YWFyLmNvbW1hbmQuY2hhbmdlbG9nLkJhemFhckNoYW5nZUxvZ0NvbW1hbmQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuYmF6YWFyLmNvbW1hbmQuZGlmZi5CYXphYXJEaWZmQ29uc3VtZXI7CkBAIC00NCwxMyArNDUsMTUgQEAKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogCiAvKioKLSAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRvcmJqb3JuQHNtb3JncmF2Lm9yZyI+VG9yYmr4cm4gRWlrbGkgU234cmdyYXY8L2E+CisgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0b3Jiam9ybkBzbW9yZ3Jhdi5vcmciPlRvcmJq77+9cm4gRWlrbGkgU23vv71yZ3JhdjwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEJhemFhclVwZGF0ZUNvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0VXBkYXRlQ29tbWFuZAotICAgIGltcGxlbWVudHMgQmF6YWFyQ29tbWFuZAorICAgIGltcGxlbWVudHMgQ29tbWFuZAogewogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgVXBkYXRlU2NtUmVzdWx0IGV4ZWN1dGVVcGRhdGVDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtNjMsOSArNjYsOSBAQAogICAgICAgICBGaWxlIHdvcmtpbmdEaXIgPSBmaWxlU2V0LmdldEJhc2VkaXIoKTsKIAogICAgICAgICAvLyBVcGRhdGUgYnJhbmNoCi0gICAgICAgIFN0cmluZ1tdIHVwZGF0ZV9jbWQgPSBuZXcgU3RyaW5nW117QmF6YWFyQ29tbWFuZC5QVUxMX0NNRH07Ci0gICAgICAgIFNjbVJlc3VsdCB1cGRhdGVSZXN1bHQgPQotICAgICAgICAgICAgQmF6YWFyVXRpbHMuZXhlY3V0ZSggbmV3IEJhemFhckNvbnN1bWVyKCBnZXRMb2dnZXIoKSApLCBnZXRMb2dnZXIoKSwgd29ya2luZ0RpciwgdXBkYXRlX2NtZCApOworICAgICAgICBTdHJpbmdbXSB1cGRhdGVDbWQgPSBuZXcgU3RyaW5nW10geyBCYXphYXJDb25zdGFudHMuUFVMTF9DTUQgfTsKKyAgICAgICAgU2NtUmVzdWx0IHVwZGF0ZVJlc3VsdCA9IEJhemFhclV0aWxzLmV4ZWN1dGUoIG5ldyBCYXphYXJDb25zdW1lciggZ2V0TG9nZ2VyKCkgKSwgZ2V0TG9nZ2VyKCksIHdvcmtpbmdEaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDbWQgKTsKIAogICAgICAgICBpZiAoICF1cGRhdGVSZXN1bHQuaXNTdWNjZXNzKCkgKQogICAgICAgICB7CkBAIC03NSw3ICs3OCw4IEBACiAgICAgICAgIC8vIEZpbmQgY2hhbmdlcyBmcm9tIGxhc3QgcmV2aXNpb24KICAgICAgICAgaW50IGN1cnJlbnRSZXZpc2lvbiA9IEJhemFhclV0aWxzLmdldEN1cnJlbnRSZXZpc2lvbk51bWJlciggZ2V0TG9nZ2VyKCksIHdvcmtpbmdEaXIgKTsKICAgICAgICAgaW50IHByZXZpb3VzUmV2aXNpb24gPSBjdXJyZW50UmV2aXNpb24gLSAxOwotICAgICAgICBTdHJpbmdbXSBkaWZmQ21kID0gbmV3IFN0cmluZ1tde0RJRkZfQ01ELCBSRVZJU0lPTl9PUFRJT04sICIiICsgcHJldmlvdXNSZXZpc2lvbn07CisgICAgICAgIFN0cmluZ1tdIGRpZmZDbWQgPQorICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgQmF6YWFyQ29uc3RhbnRzLkRJRkZfQ01ELCBCYXphYXJDb25zdGFudHMuUkVWSVNJT05fT1BUSU9OLCAiIiArIHByZXZpb3VzUmV2aXNpb24gfTsKICAgICAgICAgQmF6YWFyRGlmZkNvbnN1bWVyIGRpZmZDb25zdW1lciA9IG5ldyBCYXphYXJEaWZmQ29uc3VtZXIoIGdldExvZ2dlcigpLCB3b3JraW5nRGlyICk7CiAgICAgICAgIFNjbVJlc3VsdCBkaWZmUmVzdWx0ID0gQmF6YWFyVXRpbHMuZXhlY3V0ZSggZGlmZkNvbnN1bWVyLCBnZXRMb2dnZXIoKSwgd29ya2luZ0RpciwgZGlmZkNtZCApOwogCkBAIC0xMDEsNiArMTA1LDcgQEAKICAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVTY21SZXN1bHRXaXRoUmV2aXNpb24oIHVwZGF0ZWRGaWxlcywgY2hhbmdlcywgU3RyaW5nLnZhbHVlT2YoIGN1cnJlbnRSZXZpc2lvbiApLCBkaWZmUmVzdWx0ICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hhbmdlTG9nQ29tbWFuZCBnZXRDaGFuZ2VMb2dDb21tYW5kKCkKICAgICB7CiAgICAgICAgIEJhemFhckNoYW5nZUxvZ0NvbW1hbmQgY29tbWFuZCA9IG5ldyBCYXphYXJDaGFuZ2VMb2dDb21tYW5kKCk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvcmVwb3NpdG9yeS9CYXphYXJTY21Qcm92aWRlclJlcG9zaXRvcnkuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9yZXBvc2l0b3J5L0JhemFhclNjbVByb3ZpZGVyUmVwb3NpdG9yeS5qYXZhCmluZGV4IGQ5MmIzZjYuLmU5OWFkYWUgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9yZXBvc2l0b3J5L0JhemFhclNjbVByb3ZpZGVyUmVwb3NpdG9yeS5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9yZXBvc2l0b3J5L0JhemFhclNjbVByb3ZpZGVyUmVwb3NpdG9yeS5qYXZhCkBAIC0yNSw3ICsyNSw4IEBACiBpbXBvcnQgamF2YS5pby5GaWxlOwogCiAvKioKLSAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRvcmJqb3JuQHNtb3JncmF2Lm9yZyI+VG9yYmr4cm4gRWlrbGkgU234cmdyYXY8L2E+CisgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0b3Jiam9ybkBzbW9yZ3Jhdi5vcmciPlRvcmJq77+9cm4gRWlrbGkgU23vv71yZ3JhdjwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEJhemFhclNjbVByb3ZpZGVyUmVwb3NpdG9yeQogICAgIGV4dGVuZHMgU2NtUHJvdmlkZXJSZXBvc2l0b3J5V2l0aEhvc3QKQEAgLTY2LDggKzY3LDggQEAKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBwcm90b2NvbCArICggbmVlZHNBdXRoZW50aWNhdGlvbigpID8gYWRkVXNlcigpICsgYWRkUGFzc3dvcmQoKSArIGFkZEF0KCkgOiAiIiApICsgYWRkSG9zdCgpICsKLSAgICAgICAgICAgICAgICBhZGRQb3J0KCkgKyBhZGRQYXRoKCk7CisgICAgICAgICAgICByZXR1cm4gcHJvdG9jb2wgKyAoIG5lZWRzQXV0aGVudGljYXRpb24oKSA/IGFkZFVzZXIoKSArIGFkZFBhc3N3b3JkKCkgKyBhZGRBdCgpIDogIiIgKSArIGFkZEhvc3QoKQorICAgICAgICAgICAgICAgICsgYWRkUG9ydCgpICsgYWRkUGF0aCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDYsOCArMTA3LDggQEAKIAogICAgICAgICBpZiAoIG1zZyAhPSBudWxsICkKICAgICAgICAgewotICAgICAgICAgICAgbXNnID0gIlNvbWV0aGluZyBjb3VsZCBiZSB3cm9uZyBhYm91dCB0aGUgcmVwb3NpdG9yeSBVUkw6ICIgKyBvcmdVcmwgKyAiXG5SZWFzb246ICIgKyBtc2cgKwotICAgICAgICAgICAgICAgICJcbkNoZWNrIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3NjbSBmb3IgdXNhZ2UgYW5kIGhpbnRzLiI7CisgICAgICAgICAgICBtc2cgPSAiU29tZXRoaW5nIGNvdWxkIGJlIHdyb25nIGFib3V0IHRoZSByZXBvc2l0b3J5IFVSTDogIiArIG9yZ1VybCArICJcblJlYXNvbjogIiArIG1zZworICAgICAgICAgICAgICAgICsgIlxuQ2hlY2sgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvc2NtIGZvciB1c2FnZSBhbmQgaGludHMuIjsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbXNnOwogICAgIH0KQEAgLTE2NiwzNSArMTY3LDI5IEBACiAgICAgewogICAgICAgICBpZiAoICFGSUxFLmVxdWFscyggcHJvdG9jb2wgKSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZ1tdIHNwbGl0ID0gdXJsLnNwbGl0KCAiOiIgKTsKLSAgICAgICAgICAgIGlmICggc3BsaXQubGVuZ3RoID09IDIgKQorICAgICAgICAgICAgaW50IGluZGV4U2xhc2ggPSB1cmwuaW5kZXhPZiggIi8iICk7CisKKyAgICAgICAgICAgIFN0cmluZyBob3N0UG9ydCA9IHVybDsKKyAgICAgICAgICAgIGlmICggaW5kZXhTbGFzaCA+IDAgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNldEhvc3QoIHNwbGl0WzBdICk7Ci0gICAgICAgICAgICAgICAgdXJsID0gdXJsLnN1YnN0cmluZyggc3BsaXRbMF0ubGVuZ3RoKCkgKyAxICk7Ci0gICAgICAgICAgICAgICAgc3BsaXQgPSBzcGxpdFsxXS5zcGxpdCggIi8iICk7Ci0gICAgICAgICAgICAgICAgaWYgKCBzcGxpdC5sZW5ndGggPT0gMiApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKCBzcGxpdFswXS5sZW5ndGgoKSApOwotICAgICAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0UG9ydCggSW50ZWdlci52YWx1ZU9mKCBzcGxpdFswXSApLmludFZhbHVlKCkgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjYXRjaCAoIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLy9JZ25vcmUgLSBlcnJvciB3aWxsIG1hbmlmZXN0IGl0c2VsZiBsYXRlci4KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBob3N0UG9ydCA9IHVybC5zdWJzdHJpbmcoIDAsIGluZGV4U2xhc2ggKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50IGluZGV4Q29sb24gPSBob3N0UG9ydC5pbmRleE9mKCAiOiIgKTsKKyAgICAgICAgICAgIGlmICggaW5kZXhDb2xvbiA+IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNldEhvc3QoIGhvc3RQb3J0LnN1YnN0cmluZyggMCwgaW5kZXhDb2xvbiApICk7CisgICAgICAgICAgICAgICAgdXJsID0gU3RyaW5nVXRpbHMucmVwbGFjZSggdXJsLCBnZXRIb3N0KCksICIiICk7CisgICAgICAgICAgICAgICAgc2V0UG9ydCggSW50ZWdlci5wYXJzZUludCggaG9zdFBvcnQuc3Vic3RyaW5nKCBpbmRleENvbG9uICsgMSApICkgKTsKKyAgICAgICAgICAgICAgICB1cmwgPSBTdHJpbmdVdGlscy5yZXBsYWNlKCB1cmwsICI6IiArIGdldFBvcnQoKSwgIiIgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzcGxpdCA9IHVybC5zcGxpdCggIi8iICk7Ci0gICAgICAgICAgICAgICAgaWYgKCBzcGxpdC5sZW5ndGggPiAxICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoIHNwbGl0WzBdLmxlbmd0aCgpICk7Ci0gICAgICAgICAgICAgICAgICAgIHNldEhvc3QoIHNwbGl0WzBdICk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNldEhvc3QoIGhvc3RQb3J0ICk7CisgICAgICAgICAgICAgICAgdXJsID0gU3RyaW5nVXRpbHMucmVwbGFjZSggdXJsLCBnZXRIb3N0KCksICIiICk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICByZXR1cm4gdXJsOwogICAgIH0KIApAQCAtMjgxLDkgKzI3NiwxMSBAQAogICAgICAgICByZXR1cm4gU0ZUUC5lcXVhbHMoIHByb3RvY29sICkgfHwgRlRQLmVxdWFscyggcHJvdG9jb2wgKSB8fCBIVFRQUy5lcXVhbHMoIHByb3RvY29sICkgfHwgQUZUUC5lcXVhbHMoIHByb3RvY29sICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAiQmF6YWFyIFJlcG9zaXRvcnkgSW50ZXJwcmV0ZWQgZnJvbTogIiArIG9yZ1VybCArICI6XG5Qcm90b2NvbDogIiArIHByb3RvY29sICsgIlxuSG9zdDogIiArIGdldEhvc3QoKSArCi0gICAgICAgICAgICAiXG5Qb3J0OiAiICsgZ2V0UG9ydCgpICsgIlxuVXNlcm5hbWU6ICIgKyBnZXRVc2VyKCkgKyAiXG5QYXNzd29yZDogIiArIGdldFBhc3N3b3JkKCkgKyAiXG5QYXRoOiAiICsgcGF0aDsKKyAgICAgICAgcmV0dXJuICJCYXphYXIgUmVwb3NpdG9yeSBJbnRlcnByZXRlZCBmcm9tOiAiICsgb3JnVXJsICsgIjpcblByb3RvY29sOiAiICsgcHJvdG9jb2wgKyAiXG5Ib3N0OiAiCisgICAgICAgICAgICArIGdldEhvc3QoKSArICJcblBvcnQ6ICIgKyBnZXRQb3J0KCkgKyAiXG5Vc2VybmFtZTogIiArIGdldFVzZXIoKSArICJcblBhc3N3b3JkOiAiICsgZ2V0UGFzc3dvcmQoKQorICAgICAgICAgICAgKyAiXG5QYXRoOiAiICsgcGF0aDsKICAgICB9CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9zaXRlL3NpdGUueG1sIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy9zaXRlL3NpdGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyM2Q1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL3NpdGUvc2l0ZS54bWwKQEAgLTAsMCArMSwzMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PgorCis8IS0tCisgIH4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICB+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICB+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgIH4gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICB+IHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgfiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgIH4gd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgfiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICB+ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICB+IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICB+IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgfiB1bmRlciB0aGUgTGljZW5zZS4KKyAgLS0+CisKKzxwcm9qZWN0IG5hbWU9Ik1hdmVuIFNDTSBCYXp6YXIgUHJvdmlkZXIiPgorICA8Ym9keT4KKyAgICA8bWVudSByZWY9InBhcmVudCIgLz4KKworICAgIDxtZW51IG5hbWU9Ik92ZXJ2aWV3Ij4KKyAgICAgIDxpdGVtIG5hbWU9IkludHJvZHVjdGlvbiIgaHJlZj0iaW5kZXguaHRtbCIvPgorICAgIDwvbWVudT4KKworICAgIDxtZW51IHJlZj0icmVwb3J0cyIgaW5oZXJpdD0iYm90dG9tIiAvPgorICA8L2JvZHk+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvQmF6YWFyUmVwb1V0aWxzLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvQmF6YWFyUmVwb1V0aWxzLmphdmEKaW5kZXggZDUyN2RiOC4uYmY1ZjU2YiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL0JhemFhclJlcG9VdGlscy5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9CYXphYXJSZXBvVXRpbHMuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogCiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21SZXN1bHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuYmF6YWFyLmNvbW1hbmQuQmF6YWFyQ29tbWFuZDsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5iYXphYXIuY29tbWFuZC5CYXphYXJDb25zdGFudHM7CiBpbXBvcnQgb3JnLmNvZGVoYXVzLnBsZXh1cy5QbGV4dXNUZXN0Q2FzZTsKIGltcG9ydCBvcmcuY29kZWhhdXMucGxleHVzLnV0aWwuRmlsZVV0aWxzOwogCkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvLyBJbml0IHJlcG9zaXRvcnkKLSAgICAgICAgU3RyaW5nW10gaW5pdF9jbWQgPSBuZXcgU3RyaW5nW117QmF6YWFyQ29tbWFuZC5JTklUX0NNRH07CisgICAgICAgIFN0cmluZ1tdIGluaXRfY21kID0gbmV3IFN0cmluZ1tde0JhemFhckNvbnN0YW50cy5JTklUX0NNRH07CiAgICAgICAgIEJhemFhclV0aWxzLmV4ZWN1dGUoIFdPUktJTkdfRElSLCBpbml0X2NtZCApOwogCiAgICAgICAgIC8vIENyZWF0ZSBhbmQgYWRkIGZpbGVzIHRvIHJlcG9zaXRvcnkKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgLy9BZGQgdG8gcmVwb3NpdG9yeQotICAgICAgICBTdHJpbmdbXSBhZGRfY21kID0gbmV3IFN0cmluZ1tdIHsgQmF6YWFyQ29tbWFuZC5BRERfQ01EIH07CisgICAgICAgIFN0cmluZ1tdIGFkZF9jbWQgPSBuZXcgU3RyaW5nW10geyBCYXphYXJDb25zdGFudHMuQUREX0NNRCB9OwogICAgICAgICBTY21GaWxlU2V0IGZpbGVzVG9BZGQgPSBuZXcgU2NtRmlsZVNldCggbmV3IEZpbGUoICIiICksIGZpbGVzICk7CiAgICAgICAgIGFkZF9jbWQgPSBCYXphYXJVdGlscy5leHBhbmRDb21tYW5kTGluZSggYWRkX2NtZCwgZmlsZXNUb0FkZCApOwogICAgICAgICBTY21SZXN1bHQgcmVzdWx0ID0gQmF6YWFyVXRpbHMuZXhlY3V0ZSggV09SS0lOR19ESVIsIGFkZF9jbWQgKTsKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgLy8gQ29tbWl0IHRoZSBpbml0aWFsIHJlcG9zaXRvcnkKLSAgICAgICAgU3RyaW5nW10gY29tbWl0X2NtZCA9IG5ldyBTdHJpbmdbXXtCYXphYXJDb21tYW5kLkNPTU1JVF9DTUQsIEJhemFhckNvbW1hbmQuTUVTU0FHRV9PUFRJT04sIENPTU1JVF9NRVNTQUdFfTsKKyAgICAgICAgU3RyaW5nW10gY29tbWl0X2NtZCA9IG5ldyBTdHJpbmdbXXtCYXphYXJDb25zdGFudHMuQ09NTUlUX0NNRCwgQmF6YWFyQ29uc3RhbnRzLk1FU1NBR0VfT1BUSU9OLCBDT01NSVRfTUVTU0FHRX07CiAgICAgICAgIHJlc3VsdCA9IEJhemFhclV0aWxzLmV4ZWN1dGUoIFdPUktJTkdfRElSLCBjb21taXRfY21kICk7CiAgICAgICAgIGlmICggIXJlc3VsdC5pc1N1Y2Nlc3MoKSApCiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9yZXBvc2l0b3J5L0JhemFhclNjbVByb3ZpZGVyUmVwb3NpdG9yeVRlc3QuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2JhemFhci9yZXBvc2l0b3J5L0JhemFhclNjbVByb3ZpZGVyUmVwb3NpdG9yeVRlc3QuamF2YQppbmRleCAwMzk3ZjA4Li42MzJlZjZkIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1iYXphYXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9iYXphYXIvcmVwb3NpdG9yeS9CYXphYXJTY21Qcm92aWRlclJlcG9zaXRvcnlUZXN0LmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvYmF6YWFyL3JlcG9zaXRvcnkvQmF6YWFyU2NtUHJvdmlkZXJSZXBvc2l0b3J5VGVzdC5qYXZhCkBAIC0xMTUsNCArMTE1LDI0IEBACiAgICAgICAgIGFzc2VydEVxdWFscyggImh0dHA6Ly93d3cubXlob3N0LmNvbTo4MS9kZXYvbWF2ZW4iLCByZXBvLmdldFVSSSgpICk7CiAgICAgICAgIGFzc2VydE51bGwoIHJlcG8udmFsaWRhdGVVUkkoKSApOwogICAgIH0KKworICAgIC8qKgorICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCisgICAgICovCisgICAgcHVibGljIHZvaWQgdGVzdFBhcnNlSG9zdEFuZFBvcnQoKQorICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCisgICAgeworICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC8iOworICAgICAgICBCYXphYXJTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbyA9IG5ldyBCYXphYXJTY21Qcm92aWRlclJlcG9zaXRvcnkoIHVybCApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmVwby5nZXRVUkkoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyggcmVwby5nZXRVUkkoKSwgdXJsICk7CisKKyAgICAgICAgdXJsID0gImh0dHA6Ly9sb2NhbGhvc3QvIjsKKyAgICAgICAgcmVwbyA9IG5ldyBCYXphYXJTY21Qcm92aWRlclJlcG9zaXRvcnkoIHVybCApOworICAgICAgICBhc3NlcnRFcXVhbHMoIHJlcG8uZ2V0VVJJKCksIHVybCApOworCisgICAgICAgIHVybCA9ICJodHRwOi8vd3d3Lm15aG9zdC5jb206ODEvZGV2L21hdmVuIjsKKyAgICAgICAgcmVwbyA9IG5ldyBCYXphYXJTY21Qcm92aWRlclJlcG9zaXRvcnkoIHVybCApOworICAgICAgICBhc3NlcnRFcXVhbHMoIHJlcG8uZ2V0VVJJKCksIHVybCApOworICAgIH0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2UvTElDRU5TRS50eHQgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2UvTElDRU5TRS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NDU2OTUuLjAwMDAwMDAKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL0xJQ0VOU0UudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKLSAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KLQotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCi0KLSAgIDEuIERlZmluaXRpb25zLgotCi0gICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAotICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCi0KLSAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5Ci0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKLSAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KLSAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCi0gICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKLSAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCi0gICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKLSAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCi0KLSAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKLSAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCi0KLSAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAotICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgotICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KLQotICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKLSAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKLSAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKLSAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KLQotICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKLSAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKLSAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawotICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KLQotICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAotICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQotICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucwotICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKLSAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgotICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAotICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KLQotICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKLSAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKLSAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQotICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgotICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCi0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKLSAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKLSAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCi0gICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAotICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKLSAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAotICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKLSAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgotCi0gICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCi0gICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KLQotICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCi0gICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKLSAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCi0KLSAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAotICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKLSAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAotICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCi0gICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQotICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKLSAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKLSAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91Ci0gICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQotICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yawotICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKLSAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKLSAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQotICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgotCi0gICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQotICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0Ci0gICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQotICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLSAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCi0gICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKLQotICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwotICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAotCi0gICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKLSAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCi0gICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKLSAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCi0gICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAotCi0gICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKLSAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0Ci0gICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCi0gICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90Ci0gICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCi0gICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKLSAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCi0gICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCi0gICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAotICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwotICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKLSAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgotICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCi0gICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCi0gICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCi0gICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgotCi0gICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKLSAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKLSAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAotICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCi0gICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgotCi0gICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCi0gICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKLSAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KLSAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKLSAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCi0gICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCi0KLSAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKLSAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKLSAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQotICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCi0KLSAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgotICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAotICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKLSAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCi0gICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCi0gICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKLSAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQotICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgotCi0gICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKLSAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAotICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKLSAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCi0gICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCi0gICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKLSAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKLSAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKLSAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCi0gICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCi0gICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCi0KLSAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKLSAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCi0gICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAotICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKLSAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5Ci0gICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgotICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAotICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5Ci0gICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCi0gICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KLQotICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCi0KLSAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KLQotICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKLSAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKLSAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCi0gICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQotICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCi0gICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCi0gICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKLSAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KLQotICAgQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJdCi0KLSAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2UvTk9USUNFLnR4dCBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9OT1RJQ0UudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjU5ODA1Li4wMDAwMDAwCi0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9OT1RJQ0UudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1UaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5Ci1UaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL2NoZWNrc3R5bGUtbGljZW5zZS50eHQgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2UvY2hlY2tzdHlsZS1saWNlbnNlLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUyNmY3ZC4uMDAwMDAwMAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2UvY2hlY2tzdHlsZS1saWNlbnNlLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IDIwMDMtMjAwNCBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3BvbS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2UvcG9tLnhtbAppbmRleCBkNWZmNjUxLi5iMTA2ZjYyIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2UvcG9tLnhtbAorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2UvcG9tLnhtbApAQCAtMSw0ICsxLDYgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCEtLQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPCEtLQogICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKICAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKICAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpAQCAtMTgsMTUgKzIwLDE5IEBACiAgIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxwYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyczwvYXJ0aWZhY3RJZD4KICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXJzPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+Ci0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwogICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlPC9hcnRpZmFjdElkPgorCiAgIDxuYW1lPk1hdmVuIFNDTSBDbGVhcmNhc2UgUHJvdmlkZXI8L25hbWU+Ci0gIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KKyAgPGRlc2NyaXB0aW9uPlNDTSBQcm92aWRlciBpbXBsZW1lbnRhdGlvbiBmb3IgQ2xlYXJjYXNlIChodHRwOi8vd3d3LTMwNi5pYm0uY29tL3NvZnR3YXJlL2F3ZHRvb2xzL2NsZWFyY2FzZS8pLjwvZGVzY3JpcHRpb24+CisKICAgPGJ1aWxkPgogICAgIDxwbHVnaW5zPgogICAgICAgPHBsdWdpbj4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9DbGVhckNhc2VTY21Qcm92aWRlci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL0NsZWFyQ2FzZVNjbVByb3ZpZGVyLmphdmEKaW5kZXggYmYzNTUzMy4uYzVmN2ExMCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL0NsZWFyQ2FzZVNjbVByb3ZpZGVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL0NsZWFyQ2FzZVNjbVByb3ZpZGVyLmphdmEKQEAgLTYyLDI3ICs2MiwyOSBAQAogICAgICAqLwogICAgIHByaXZhdGUgU2V0dGluZ3Mgc2V0dGluZ3M7CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTY21Qcm92aWRlclJlcG9zaXRvcnkgbWFrZVByb3ZpZGVyU2NtUmVwb3NpdG9yeSggU3RyaW5nIHNjbVNwZWNpZmljVXJsLCBjaGFyIGRlbGltaXRlciApCiAgICAgICAgIHRocm93cyBTY21SZXBvc2l0b3J5RXhjZXB0aW9uCiAgICAgewogICAgICAgICBzZXR0aW5ncyA9IENsZWFyQ2FzZVV0aWwuZ2V0U2V0dGluZ3MoKTsKLSAgICAgICAgcmV0dXJuIG5ldyBDbGVhckNhc2VTY21Qcm92aWRlclJlcG9zaXRvcnkoIGdldExvZ2dlcigpLCBzY21TcGVjaWZpY1VybCwgc2V0dGluZ3MpOworICAgICAgICByZXR1cm4gbmV3IENsZWFyQ2FzZVNjbVByb3ZpZGVyUmVwb3NpdG9yeSggZ2V0TG9nZ2VyKCksIHNjbVNwZWNpZmljVXJsLCBzZXR0aW5ncyApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21UeXBlKCkKICAgICB7CiAgICAgICAgIHJldHVybiAiY2xlYXJjYXNlIjsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBib29sZWFuIHJlcXVpcmVzRWRpdE1vZGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI2NoYW5nZWxvZyhvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KLSAgICBwdWJsaWMgQ2hhbmdlTG9nU2NtUmVzdWx0IGNoYW5nZWxvZyggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KKyAgICBwdWJsaWMgQ2hhbmdlTG9nU2NtUmVzdWx0IGNoYW5nZWxvZyggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIENsZWFyQ2FzZUNoYW5nZUxvZ0NvbW1hbmQgY29tbWFuZCA9IG5ldyBDbGVhckNhc2VDaGFuZ2VMb2dDb21tYW5kKCk7CkBAIC05MiwxMCArOTQsOSBAQAogICAgICAgICByZXR1cm4gKENoYW5nZUxvZ1NjbVJlc3VsdCkgY29tbWFuZC5leGVjdXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI2NoZWNraW4ob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCi0gICAgcHVibGljIENoZWNrSW5TY21SZXN1bHQgY2hlY2tpbiggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KKyAgICBwdWJsaWMgQ2hlY2tJblNjbVJlc3VsdCBjaGVja2luKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICBDbGVhckNhc2VDaGVja0luQ29tbWFuZCBjb21tYW5kID0gbmV3IENsZWFyQ2FzZUNoZWNrSW5Db21tYW5kKCk7CkBAIC0xMDUsMjEgKzEwNiwyMiBAQAogICAgICAgICByZXR1cm4gKENoZWNrSW5TY21SZXN1bHQpIGNvbW1hbmQuZXhlY3V0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciNjaGVja291dChvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KLSAgICBwdWJsaWMgQ2hlY2tPdXRTY21SZXN1bHQgY2hlY2tvdXQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCisgICAgcHVibGljIENoZWNrT3V0U2NtUmVzdWx0IGNoZWNrb3V0KCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIENsZWFyQ2FzZUNoZWNrT3V0Q29tbWFuZCBjb21tYW5kID0gbmV3IENsZWFyQ2FzZUNoZWNrT3V0Q29tbWFuZCgpOwogCiAgICAgICAgIGNvbW1hbmQuc2V0TG9nZ2VyKCBnZXRMb2dnZXIoKSApOwotICAgICAgICBjb21tYW5kLnNldFNldHRpbmdzKHNldHRpbmdzKTsKKyAgICAgICAgY29tbWFuZC5zZXRTZXR0aW5ncyggc2V0dGluZ3MgKTsKIAogICAgICAgICByZXR1cm4gKENoZWNrT3V0U2NtUmVzdWx0KSBjb21tYW5kLmV4ZWN1dGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKLSAgICBwcm90ZWN0ZWQgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KKyAgICBwcm90ZWN0ZWQgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIENsZWFyQ2FzZVVwZGF0ZUNvbW1hbmQgY29tbWFuZCA9IG5ldyBDbGVhckNhc2VVcGRhdGVDb21tYW5kKCk7CkBAIC0xMjksOSArMTMxLDcgQEAKICAgICAgICAgcmV0dXJuIChVcGRhdGVTY21SZXN1bHQpIGNvbW1hbmQuZXhlY3V0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciN0YWcob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgVGFnU2NtUmVzdWx0IHRhZyggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC0xNDIsNyArMTQyLDkgQEAKICAgICAgICAgcmV0dXJuIChUYWdTY21SZXN1bHQpIGNvbW1hbmQuZXhlY3V0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAotICAgIHByb3RlY3RlZCBTdGF0dXNTY21SZXN1bHQgc3RhdHVzKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLworICAgIHByb3RlY3RlZCBTdGF0dXNTY21SZXN1bHQgc3RhdHVzKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgQ2xlYXJDYXNlU3RhdHVzQ29tbWFuZCBjb21tYW5kID0gbmV3IENsZWFyQ2FzZVN0YXR1c0NvbW1hbmQoKTsKQEAgLTE1Miw3ICsxNTQsOSBAQAogICAgICAgICByZXR1cm4gKFN0YXR1c1NjbVJlc3VsdCkgY29tbWFuZC5leGVjdXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgcHJvdGVjdGVkIEVkaXRTY21SZXN1bHQgZWRpdCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KKyAgICBwcm90ZWN0ZWQgRWRpdFNjbVJlc3VsdCBlZGl0KCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICBDbGVhckNhc2VFZGl0Q29tbWFuZCBjb21tYW5kID0gbmV3IENsZWFyQ2FzZUVkaXRDb21tYW5kKCk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9hZGQvQ2xlYXJDYXNlQWRkQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvYWRkL0NsZWFyQ2FzZUFkZENvbW1hbmQuamF2YQppbmRleCBhY2MxMmYxLi40Yzc1MTQxIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9hZGQvQ2xlYXJDYXNlQWRkQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL2FkZC9DbGVhckNhc2VBZGRDb21tYW5kLmphdmEKQEAgLTM1LDExICszNSwxMyBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOndpbS5kZWJsYXV3ZUBnbWFpbC5jb20iPldpbSBEZWJsYXV3ZTwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIENsZWFyQ2FzZUFkZENvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0QWRkQ29tbWFuZAogICAgIGltcGxlbWVudHMgQ2xlYXJDYXNlQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFNjbVJlc3VsdCBleGVjdXRlQWRkQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHNjbVByb3ZpZGVyUmVwb3NpdG9yeSwgU2NtRmlsZVNldCBzY21GaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdHJpbmcsIGJvb2xlYW4gYiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTU4LDggKzYwLDEwIEBACiAgICAgICAgICAgICAvLyBGaXJzdCB3ZSBuZWVkIHRvICdjaGVjayBvdXQnIHRoZSBjdXJyZW50IGRpcmVjdG9yeQogICAgICAgICAgICAgQ29tbWFuZGxpbmUgY2hlY2tvdXRDdXJyZW50RGlyQ29tbWFuZExpbmUgPQogICAgICAgICAgICAgICAgIENsZWFyQ2FzZUVkaXRDb21tYW5kLmNyZWF0ZUNoZWNrb3V0Q3VycmVudERpckNvbW1hbmRMaW5lKCBzY21GaWxlU2V0ICk7Ci0gICAgICAgICAgICBnZXRMb2dnZXIoKS5kZWJ1ZyggIkV4ZWN1dGluZzogIiArIGNoZWNrb3V0Q3VycmVudERpckNvbW1hbmRMaW5lLmdldFdvcmtpbmdEaXJlY3RvcnkoKS5nZXRBYnNvbHV0ZVBhdGgoKSArCi0gICAgICAgICAgICAgICAgIj4+IiArIGNoZWNrb3V0Q3VycmVudERpckNvbW1hbmRMaW5lLnRvU3RyaW5nKCkgKTsKKyAgICAgICAgICAgIGdldExvZ2dlcigpLmRlYnVnKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeGVjdXRpbmc6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjaGVja291dEN1cnJlbnREaXJDb21tYW5kTGluZS5nZXRXb3JraW5nRGlyZWN0b3J5KCkuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiPj4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY2hlY2tvdXRDdXJyZW50RGlyQ29tbWFuZExpbmUudG9TdHJpbmcoKSApOwogICAgICAgICAgICAgZXhpdENvZGUgPSBDb21tYW5kTGluZVV0aWxzLmV4ZWN1dGVDb21tYW5kTGluZSggY2hlY2tvdXRDdXJyZW50RGlyQ29tbWFuZExpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lcigpLCBzdGRlcnIgKTsKIApAQCAtNzQsOSArNzgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgLy8gVGhlbiB3ZSBjaGVjayBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgYWdhaW4uCiAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRsaW5lIGNoZWNraW5DdXJyZW50RGlyQ29tbWFuZExpbmUgPQogICAgICAgICAgICAgICAgICAgICAgICAgQ2xlYXJDYXNlRWRpdENvbW1hbmQuY3JlYXRlQ2hlY2tpbkN1cnJlbnREaXJDb21tYW5kTGluZSggc2NtRmlsZVNldCApOwotICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS5kZWJ1ZyggIkV4ZWN1dGluZzogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGVja2luQ3VycmVudERpckNvbW1hbmRMaW5lLmdldFdvcmtpbmdEaXJlY3RvcnkoKS5nZXRBYnNvbHV0ZVBhdGgoKSArICI+PiIgKwotICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tpbkN1cnJlbnREaXJDb21tYW5kTGluZS50b1N0cmluZygpICk7CisgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLmRlYnVnKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4ZWN1dGluZzogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY2hlY2tpbkN1cnJlbnREaXJDb21tYW5kTGluZS5nZXRXb3JraW5nRGlyZWN0b3J5KCkuZ2V0QWJzb2x1dGVQYXRoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICI+PiIgKyBjaGVja2luQ3VycmVudERpckNvbW1hbmRMaW5lLnRvU3RyaW5nKCkgKTsKICAgICAgICAgICAgICAgICAgICAgZXhpdENvZGUgPSBDb21tYW5kTGluZVV0aWxzLmV4ZWN1dGVDb21tYW5kTGluZSggY2hlY2tpbkN1cnJlbnREaXJDb21tYW5kTGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENvbW1hbmRMaW5lVXRpbHMuU3RyaW5nU3RyZWFtQ29uc3VtZXIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9hZGQvQ2xlYXJDYXNlQWRkQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL2FkZC9DbGVhckNhc2VBZGRDb25zdW1lci5qYXZhCmluZGV4IDAxZWU0Y2MuLjdmZTcxOTkgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL2FkZC9DbGVhckNhc2VBZGRDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL2FkZC9DbGVhckNhc2VBZGRDb25zdW1lci5qYXZhCkBAIC0yOSw2ICsyOSw3IEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86d2ltLmRlYmxhdXdlQGdtYWlsLmNvbSI+V2ltIERlYmxhdXdlPC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgQ2xlYXJDYXNlQWRkQ29uc3VtZXIKICAgICBpbXBsZW1lbnRzIFN0cmVhbUNvbnN1bWVyCkBAIC01MCw2ICs1MSw3IEBACiAgICAgLy8gU3RyZWFtIENvbnN1bWVyIEltcGxlbWVudGF0aW9uCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgbG9nZ2VyLmRlYnVnKCBsaW5lICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9jaGFuZ2Vsb2cvQ2xlYXJDYXNlQ2hhbmdlTG9nQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvY2hhbmdlbG9nL0NsZWFyQ2FzZUNoYW5nZUxvZ0NvbW1hbmQuamF2YQppbmRleCBhZTQzMTYyLi4yMGE1NjM0IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9jaGFuZ2Vsb2cvQ2xlYXJDYXNlQ2hhbmdlTG9nQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL2NoYW5nZWxvZy9DbGVhckNhc2VDaGFuZ2VMb2dDb21tYW5kLmphdmEKQEAgLTU0LDYgKzU0LDcgQEAKICAgICAvLyBBYnN0cmFjdENoYW5nZUxvZ0NvbW1hbmQgSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDaGFuZ2VMb2dTY21SZXN1bHQgZXhlY3V0ZUNoYW5nZUxvZ0NvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZSBzdGFydERhdGUsIERhdGUgZW5kRGF0ZSwgU2NtQnJhbmNoIGJyYW5jaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0ZVBhdHRlcm4gKQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvY2hhbmdlbG9nL0NsZWFyQ2FzZUNoYW5nZUxvZ0NvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9jaGFuZ2Vsb2cvQ2xlYXJDYXNlQ2hhbmdlTG9nQ29uc3VtZXIuamF2YQppbmRleCA1OWJlOGNiLi5kNzEwMDdkIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9jaGFuZ2Vsb2cvQ2xlYXJDYXNlQ2hhbmdlTG9nQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9jaGFuZ2Vsb2cvQ2xlYXJDYXNlQ2hhbmdlTG9nQ29uc3VtZXIuamF2YQpAQCAtMTA4LDYgKzEwOCw3IEBACiAgICAgLy8gU3RyZWFtQ29uc3VtZXIgSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBzd2l0Y2ggKCBnZXRTdGF0dXMoKSApCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9jaGVja2luL0NsZWFyQ2FzZUNoZWNrSW5Db21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9jaGVja2luL0NsZWFyQ2FzZUNoZWNrSW5Db21tYW5kLmphdmEKaW5kZXggNjNlNjMyNi4uNWUyMDNhOSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvY2hlY2tpbi9DbGVhckNhc2VDaGVja0luQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL2NoZWNraW4vQ2xlYXJDYXNlQ2hlY2tJbkNvbW1hbmQuamF2YQpAQCAtMzQsNiArMzQsNyBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOndpbS5kZWJsYXV3ZUBnbWFpbC5jb20iPldpbSBEZWJsYXV3ZTwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIENsZWFyQ2FzZUNoZWNrSW5Db21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdENoZWNrSW5Db21tYW5kCkBAIC00Myw2ICs0NCw3IEBACiAgICAgLy8gQWJzdHJhY3RDaGVja091dENvbW1hbmQgSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDaGVja0luU2NtUmVzdWx0IGV4ZWN1dGVDaGVja0luQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHNjbVByb3ZpZGVyUmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UsIFNjbVZlcnNpb24gdmVyc2lvbiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL2NoZWNraW4vQ2xlYXJDYXNlQ2hlY2tJbkNvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9jaGVja2luL0NsZWFyQ2FzZUNoZWNrSW5Db25zdW1lci5qYXZhCmluZGV4IDJkOGNkMDYuLjQ1MWY5MzYgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL2NoZWNraW4vQ2xlYXJDYXNlQ2hlY2tJbkNvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvY2hlY2tpbi9DbGVhckNhc2VDaGVja0luQ29uc3VtZXIuamF2YQpAQCAtMjksNiArMjksNyBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRyeWd2aXNAaW5hbW8ubm8iPlRyeWd2ZSBMYXVnc3Qmb3NsYXNoO2w8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBDbGVhckNhc2VDaGVja0luQ29uc3VtZXIKICAgICBpbXBsZW1lbnRzIFN0cmVhbUNvbnN1bWVyCkBAIC01MCw2ICs1MSw3IEBACiAgICAgLy8gU3RyZWFtIENvbnN1bWVyIEltcGxlbWVudGF0aW9uCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgbG9nZ2VyLmRlYnVnKCBsaW5lICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9jaGVja291dC9DbGVhckNhc2VDaGVja091dENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL2NoZWNrb3V0L0NsZWFyQ2FzZUNoZWNrT3V0Q29tbWFuZC5qYXZhCmluZGV4IDk2YzUyOTguLjZlZjQ4MjQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL2NoZWNrb3V0L0NsZWFyQ2FzZUNoZWNrT3V0Q29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL2NoZWNrb3V0L0NsZWFyQ2FzZUNoZWNrT3V0Q29tbWFuZC5qYXZhCkBAIC00Myw2ICs0Myw3IEBACiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOndpbS5kZWJsYXV3ZUBnbWFpbC5jb20iPldpbSBEZWJsYXV3ZTwvYT4KICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOmZyZWRlcmljLm11cmFAbGFwb3N0ZS5uZXQiPkZyZWRlcmljIE11cmE8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBDbGVhckNhc2VDaGVja091dENvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0Q2hlY2tPdXRDb21tYW5kCkBAIC01NCw2ICs1NSw3IEBACiAgICAgLy8gQWJzdHJhY3RDaGVja091dENvbW1hbmQgSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDaGVja091dFNjbVJlc3VsdCBleGVjdXRlQ2hlY2tPdXRDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC04MCwxNCArODIsMTYgQEAKIAogICAgICAgICB0cnkKICAgICAgICAgewotICAgICAgICAgICAgLy8gU2luY2UgY2xlYXJjYXNlIG9ubHkgd2FudHMgdG8gY2hlY2tvdXQgdG8gYSBub24tZXhpc3RlbnQgZGlyZWN0b3J5LCBmaXJzdCBkZWxldGUgdGhlIHdvcmtpbmcgZGlyIGlmIGl0IGFscmVhZHkgZXhpc3RzCisgICAgICAgICAgICAvLyBTaW5jZSBjbGVhcmNhc2Ugb25seSB3YW50cyB0byBjaGVja291dCB0byBhIG5vbi1leGlzdGVudCBkaXJlY3RvcnksIGZpcnN0IGRlbGV0ZSB0aGUgd29ya2luZyBkaXIKKyAgICAgICAgICAgIC8vIGlmIGl0IGFscmVhZHkgZXhpc3RzCiAgICAgICAgICAgICBGaWxlVXRpbHMuZGVsZXRlRGlyZWN0b3J5KCB3b3JraW5nRGlyZWN0b3J5ICk7CiAgICAgICAgICAgICAvLyBGaXJzdCBjcmVhdGUgdGhlIHZpZXcKICAgICAgICAgICAgIFN0cmluZyB2aWV3TmFtZSA9IGdldFVuaXF1ZVZpZXdOYW1lKCByZXBvLCB3b3JraW5nRGlyZWN0b3J5LmdldEFic29sdXRlUGF0aCgpICk7Ci0gICAgICAgICAgICBTdHJpbmcgc3RyZWFtSWRlbnRpZmllciA9IGdldFN0cmVhbUlkZW50aWZpZXIocmVwby5nZXRTdHJlYW1OYW1lKCksIHJlcG8uZ2V0Vm9iTmFtZSgpKTsKKyAgICAgICAgICAgIFN0cmluZyBzdHJlYW1JZGVudGlmaWVyID0gZ2V0U3RyZWFtSWRlbnRpZmllciggcmVwby5nZXRTdHJlYW1OYW1lKCksIHJlcG8uZ2V0Vm9iTmFtZSgpICk7CiAgICAgICAgICAgICBjbCA9IGNyZWF0ZUNyZWF0ZVZpZXdDb21tYW5kTGluZSggd29ya2luZ0RpcmVjdG9yeSwgdmlld05hbWUsIHN0cmVhbUlkZW50aWZpZXIgKTsKICAgICAgICAgICAgIGdldExvZ2dlcigpLmluZm8oICJFeGVjdXRpbmc6ICIgKyBjbC5nZXRXb3JraW5nRGlyZWN0b3J5KCkuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiPj4iICsgY2wudG9TdHJpbmcoKSApOwotICAgICAgICAgICAgZXhpdENvZGUgPSBDb21tYW5kTGluZVV0aWxzLmV4ZWN1dGVDb21tYW5kTGluZSggY2wsIG5ldyBDb21tYW5kTGluZVV0aWxzLlN0cmluZ1N0cmVhbUNvbnN1bWVyKCksIHN0ZGVyciApOworICAgICAgICAgICAgZXhpdENvZGUgPQorICAgICAgICAgICAgICAgIENvbW1hbmRMaW5lVXRpbHMuZXhlY3V0ZUNvbW1hbmRMaW5lKCBjbCwgbmV3IENvbW1hbmRMaW5lVXRpbHMuU3RyaW5nU3RyZWFtQ29uc3VtZXIoKSwgc3RkZXJyICk7CiAKICAgICAgICAgICAgIGlmICggZXhpdENvZGUgPT0gMCApCiAgICAgICAgICAgICB7CkBAIC0xMjEsNyArMTI1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBjaGVja2luZyBvdXQgZnJvbSBDbGVhckNhc2UsIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIG9mIHRoZQogICAgICAgICAgICAgICAgICAgICAvLyBTQ00gc3lzdGVtIGlzIHJlcGVhdGVkIHdpdGhpbiB0aGUgY2hlY2tvdXQgZGlyZWN0b3J5LiBFLmcuIGlmIHlvdSBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIHByb2plY3QgIm15L3Byb2plY3QiIHRvICIvc29tZS9kaXIiLCB0aGUgcHJvamVjdCBzb3VyY2VzIGFyZSBhY3R1YWxseSBjaGVja2VkIG91dAotICAgICAgICAgICAgICAgICAgICAvLyB0byAibXkvcHJvamVjdC9zb21lL2RpciIuICAKKyAgICAgICAgICAgICAgICAgICAgLy8gdG8gIm15L3Byb2plY3Qvc29tZS9kaXIiLgogICAgICAgICAgICAgICAgICAgICBwcm9qZWN0RGlyZWN0b3J5ID0gcmVwby5nZXRMb2FkRGlyZWN0b3J5KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIHN0cmlwIG9mZiBsZWFkaW5nIC8gdG8gbWFrZSB0aGUgcGF0aCByZWxhdGl2ZQogICAgICAgICAgICAgICAgICAgICBpZiAoIHByb2plY3REaXJlY3Rvcnkuc3RhcnRzV2l0aCggIi8iICkgKQpAQCAtMTY1LDYgKzE2OSw3IEBACiAgICAgICogQHBhcmFtIGNvbmZpZ1NwZWNDb250ZW50cyBUaGUgY29udGVudHMgZm9yIHRoZSBmaWxlCiAgICAgICogQHBhcmFtIHZpZXdOYW1lICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgdmlldzsgdXNlZCB0byBkZXRlcm1pbmUgYW4gYXBwcm9wcmlhdGUgZmlsZQogICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZQorICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24KICAgICAgKi8KICAgICBwcm90ZWN0ZWQgRmlsZSB3cml0ZVRlbXBvcmFyeUNvbmZpZ1NwZWNGaWxlKCBTdHJpbmcgY29uZmlnU3BlY0NvbnRlbnRzLCBTdHJpbmcgdmlld05hbWUgKQogICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KQEAgLTI0MSw3ICsyNDYsNyBAQAogLy8gICAgICAgIHJldHVybiBjb21tYW5kOwogLy8gICAgfQogCi0gICAgcHJvdGVjdGVkIENvbW1hbmRsaW5lIGNyZWF0ZUNyZWF0ZVZpZXdDb21tYW5kTGluZSggRmlsZSB3b3JraW5nRGlyZWN0b3J5LCBTdHJpbmcgdmlld05hbWUsIFN0cmluZyBzdHJlYW1JZGVudGlmaWVyKQorICAgIHByb3RlY3RlZCBDb21tYW5kbGluZSBjcmVhdGVDcmVhdGVWaWV3Q29tbWFuZExpbmUoIEZpbGUgd29ya2luZ0RpcmVjdG9yeSwgU3RyaW5nIHZpZXdOYW1lLCBTdHJpbmcgc3RyZWFtSWRlbnRpZmllciApCiAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgogICAgIHsKICAgICAgICAgQ29tbWFuZGxpbmUgY29tbWFuZCA9IG5ldyBDb21tYW5kbGluZSgpOwpAQCAtMjU1LDEzICsyNjAsMTMgQEAKICAgICAgICAgY29tbWFuZC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAiLXNuYXBzaG90IiApOwogICAgICAgICBjb21tYW5kLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoICItdGFnIiApOwogICAgICAgICBjb21tYW5kLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIHZpZXdOYW1lICk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNDbGVhckNhc2VVQ00oKSkKKworICAgICAgICBpZiAoIGlzQ2xlYXJDYXNlVUNNKCkgKQogICAgICAgICB7CiAgICAgICAgICAgICBjb21tYW5kLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoICItc3RyZWFtIiApOwogICAgICAgICAgICAgY29tbWFuZC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCBzdHJlYW1JZGVudGlmaWVyICk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKCAhaXNDbGVhckNhc2VMVCgpICkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCB1c2VWV1MoKSApCkBAIC0yODIsMTAgKzI4NywxMiBAQAogICAgICAqIEBwYXJhbSB2b2JOYW1lCiAgICAgICogQHJldHVybiB0aGUgZm9ybWF0dGVkIHN0cmVhbSBpZGVudGlmaWVyIGlmIHRoZSB0d28gcGFyYW1ldGVyIGFyZSBub3QgbnVsbAogICAgICAqLwotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3RyZWFtSWRlbnRpZmllcihTdHJpbmcgc3RyZWFtTmFtZSwgU3RyaW5nIHZvYk5hbWUpCisgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTdHJlYW1JZGVudGlmaWVyKCBTdHJpbmcgc3RyZWFtTmFtZSwgU3RyaW5nIHZvYk5hbWUgKQogICAgIHsKLSAgICAgICAgaWYgKHN0cmVhbU5hbWUgPT0gbnVsbCB8fCB2b2JOYW1lID09IG51bGwpCisgICAgICAgIGlmICggc3RyZWFtTmFtZSA9PSBudWxsIHx8IHZvYk5hbWUgPT0gbnVsbCApCisgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CiAgICAgICAgIHJldHVybiAic3RyZWFtOiIgKyBzdHJlYW1OYW1lICsgIkAiICsgdm9iTmFtZTsKICAgICB9CiAKQEAgLTM1MCwxNCArMzU3LDE0IEBACiAKICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0NsZWFyQ2FzZUxUKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBDbGVhckNhc2VTY21Qcm92aWRlclJlcG9zaXRvcnkuQ0xFQVJDQVNFX0xULmVxdWFscyhzZXR0aW5ncy5nZXRDbGVhcmNhc2VUeXBlKCkpOworICAgICAgICByZXR1cm4gQ2xlYXJDYXNlU2NtUHJvdmlkZXJSZXBvc2l0b3J5LkNMRUFSQ0FTRV9MVC5lcXVhbHMoIHNldHRpbmdzLmdldENsZWFyY2FzZVR5cGUoKSApOwogICAgIH0KIAogICAgIHByb3RlY3RlZCBib29sZWFuIGlzQ2xlYXJDYXNlVUNNKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBDbGVhckNhc2VTY21Qcm92aWRlclJlcG9zaXRvcnkuQ0xFQVJDQVNFX1VDTS5lcXVhbHMoc2V0dGluZ3MuZ2V0Q2xlYXJjYXNlVHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIENsZWFyQ2FzZVNjbVByb3ZpZGVyUmVwb3NpdG9yeS5DTEVBUkNBU0VfVUNNLmVxdWFscyggc2V0dGluZ3MuZ2V0Q2xlYXJjYXNlVHlwZSgpICk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHNldHRpbmcgcHJvcGVydHkgJ3VzZVZXUycKICAgICAgKi8KQEAgLTM4OCw3ICszOTUsOCBAQAogICAgICAgICByZXR1cm4gdXNlcm5hbWU7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc2V0U2V0dGluZ3MoU2V0dGluZ3Mgc2V0dGluZ3MpIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRTZXR0aW5ncyggU2V0dGluZ3Mgc2V0dGluZ3MgKQorICAgIHsKICAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL2NoZWNrb3V0L0NsZWFyQ2FzZUNoZWNrT3V0Q29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL2NoZWNrb3V0L0NsZWFyQ2FzZUNoZWNrT3V0Q29uc3VtZXIuamF2YQppbmRleCAyN2MzODQxLi4zMzE5ODg2IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9jaGVja291dC9DbGVhckNhc2VDaGVja091dENvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvY2hlY2tvdXQvQ2xlYXJDYXNlQ2hlY2tPdXRDb25zdW1lci5qYXZhCkBAIC0yOSw2ICsyOSw3IEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86d2ltLmRlYmxhdXdlQGdtYWlsLmNvbSI+V2ltIERlYmxhdXdlPC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgQ2xlYXJDYXNlQ2hlY2tPdXRDb25zdW1lcgogICAgIGltcGxlbWVudHMgU3RyZWFtQ29uc3VtZXIKQEAgLTUwLDYgKzUxLDcgQEAKICAgICAvLyBTdHJlYW0gQ29uc3VtZXIgSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBjaGVja2VkT3V0RmlsZXMuYWRkKCBuZXcgU2NtRmlsZSggbGluZSwgU2NtRmlsZVN0YXR1cy5DSEVDS0VEX09VVCApICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9lZGl0L0NsZWFyQ2FzZUVkaXRDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9lZGl0L0NsZWFyQ2FzZUVkaXRDb21tYW5kLmphdmEKaW5kZXggMGMzNjY2ZS4uYjNkMmQ1YyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvZWRpdC9DbGVhckNhc2VFZGl0Q29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL2VkaXQvQ2xlYXJDYXNlRWRpdENvbW1hbmQuamF2YQpAQCAtMzUsMTEgKzM1LDEzIEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86d2ltLmRlYmxhdXdlQGdtYWlsLmNvbSI+V2ltIERlYmxhdXdlPC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgQ2xlYXJDYXNlRWRpdENvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0RWRpdENvbW1hbmQKICAgICBpbXBsZW1lbnRzIENsZWFyQ2FzZUNvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTY21SZXN1bHQgZXhlY3V0ZUVkaXRDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL2VkaXQvQ2xlYXJDYXNlRWRpdENvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9lZGl0L0NsZWFyQ2FzZUVkaXRDb25zdW1lci5qYXZhCmluZGV4IGM1Mjg0ZTYuLmZiZGI0MTcgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL2VkaXQvQ2xlYXJDYXNlRWRpdENvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvZWRpdC9DbGVhckNhc2VFZGl0Q29uc3VtZXIuamF2YQpAQCAtMjksNiArMjksNyBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOndpbS5kZWJsYXV3ZUBnbWFpbC5jb20iPldpbSBEZWJsYXV3ZTwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIENsZWFyQ2FzZUVkaXRDb25zdW1lcgogICAgIGltcGxlbWVudHMgU3RyZWFtQ29uc3VtZXIKQEAgLTUwLDYgKzUxLDcgQEAKICAgICAvLyBTdHJlYW0gQ29uc3VtZXIgSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBsb2dnZXIuZGVidWcoIGxpbmUgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL3JlbW92ZS9DbGVhckNhc2VSZW1vdmVDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9yZW1vdmUvQ2xlYXJDYXNlUmVtb3ZlQ29tbWFuZC5qYXZhCmluZGV4IGQxYjUxNWQuLjM2MzE2MGQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL3JlbW92ZS9DbGVhckNhc2VSZW1vdmVDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvcmVtb3ZlL0NsZWFyQ2FzZVJlbW92ZUNvbW1hbmQuamF2YQpAQCAtMzYsMTEgKzM2LDEzIEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86d2ltLmRlYmxhdXdlQGdtYWlsLmNvbSI+V2ltIERlYmxhdXdlPC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgQ2xlYXJDYXNlUmVtb3ZlQ29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RSZW1vdmVDb21tYW5kCiAgICAgaW1wbGVtZW50cyBDbGVhckNhc2VDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU2NtUmVzdWx0IGV4ZWN1dGVSZW1vdmVDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgc2NtUHJvdmlkZXJSZXBvc2l0b3J5LCBTY21GaWxlU2V0IHNjbUZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0cmluZyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTU4LDEwICs2MCwxMyBAQAogICAgICAgICAgICAgLy8gRmlyc3Qgd2UgbmVlZCB0byAnY2hlY2sgb3V0JyB0aGUgY3VycmVudCBkaXJlY3RvcnkKICAgICAgICAgICAgIENvbW1hbmRsaW5lIGNoZWNrb3V0Q3VycmVudERpckNvbW1hbmRMaW5lID0KICAgICAgICAgICAgICAgICBDbGVhckNhc2VFZGl0Q29tbWFuZC5jcmVhdGVDaGVja291dEN1cnJlbnREaXJDb21tYW5kTGluZSggc2NtRmlsZVNldCApOwotICAgICAgICAgICAgZ2V0TG9nZ2VyKCkuZGVidWcoICJFeGVjdXRpbmc6ICIgKyBjaGVja291dEN1cnJlbnREaXJDb21tYW5kTGluZS5nZXRXb3JraW5nRGlyZWN0b3J5KCkuZ2V0QWJzb2x1dGVQYXRoKCkgKwotICAgICAgICAgICAgICAgICI+PiIgKyBjaGVja291dEN1cnJlbnREaXJDb21tYW5kTGluZS50b1N0cmluZygpICk7Ci0gICAgICAgICAgICBleGl0Q29kZSA9IENvbW1hbmRMaW5lVXRpbHMuZXhlY3V0ZUNvbW1hbmRMaW5lKCBjaGVja291dEN1cnJlbnREaXJDb21tYW5kTGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDb21tYW5kTGluZVV0aWxzLlN0cmluZ1N0cmVhbUNvbnN1bWVyKCksIHN0ZGVyciApOworICAgICAgICAgICAgZ2V0TG9nZ2VyKCkuZGVidWcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4ZWN1dGluZzogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGNoZWNrb3V0Q3VycmVudERpckNvbW1hbmRMaW5lLmdldFdvcmtpbmdEaXJlY3RvcnkoKS5nZXRBYnNvbHV0ZVBhdGgoKSArICI+PiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjaGVja291dEN1cnJlbnREaXJDb21tYW5kTGluZS50b1N0cmluZygpICk7CisgICAgICAgICAgICBleGl0Q29kZSA9CisgICAgICAgICAgICAgICAgQ29tbWFuZExpbmVVdGlscy5leGVjdXRlQ29tbWFuZExpbmUoIGNoZWNrb3V0Q3VycmVudERpckNvbW1hbmRMaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lcigpLCBzdGRlcnIgKTsKIAogICAgICAgICAgICAgaWYgKCBleGl0Q29kZSA9PSAwICkKICAgICAgICAgICAgIHsKQEAgLTc0LDkgKzc5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgIC8vIFRoZW4gd2UgY2hlY2sgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFnYWluLgogICAgICAgICAgICAgICAgICAgICBDb21tYW5kbGluZSBjaGVja2luQ3VycmVudERpckNvbW1hbmRMaW5lID0KICAgICAgICAgICAgICAgICAgICAgICAgIENsZWFyQ2FzZUVkaXRDb21tYW5kLmNyZWF0ZUNoZWNraW5DdXJyZW50RGlyQ29tbWFuZExpbmUoIHNjbUZpbGVTZXQgKTsKLSAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkuZGVidWcoICJFeGVjdXRpbmc6ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tpbkN1cnJlbnREaXJDb21tYW5kTGluZS5nZXRXb3JraW5nRGlyZWN0b3J5KCkuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiPj4iICsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNraW5DdXJyZW50RGlyQ29tbWFuZExpbmUudG9TdHJpbmcoKSApOworICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS5kZWJ1ZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeGVjdXRpbmc6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGNoZWNraW5DdXJyZW50RGlyQ29tbWFuZExpbmUuZ2V0V29ya2luZ0RpcmVjdG9yeSgpLmdldEFic29sdXRlUGF0aCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiPj4iICsgY2hlY2tpbkN1cnJlbnREaXJDb21tYW5kTGluZS50b1N0cmluZygpICk7CiAgICAgICAgICAgICAgICAgICAgIGV4aXRDb2RlID0gQ29tbWFuZExpbmVVdGlscy5leGVjdXRlQ29tbWFuZExpbmUoIGNoZWNraW5DdXJyZW50RGlyQ29tbWFuZExpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDb21tYW5kTGluZVV0aWxzLlN0cmluZ1N0cmVhbUNvbnN1bWVyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVyciApOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvcmVtb3ZlL0NsZWFyQ2FzZVJlbW92ZUNvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9yZW1vdmUvQ2xlYXJDYXNlUmVtb3ZlQ29uc3VtZXIuamF2YQppbmRleCAzYzU3NTNkLi41ZDI2MDE0IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9yZW1vdmUvQ2xlYXJDYXNlUmVtb3ZlQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9yZW1vdmUvQ2xlYXJDYXNlUmVtb3ZlQ29uc3VtZXIuamF2YQpAQCAtMjksNiArMjksNyBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOndpbS5kZWJsYXV3ZUBnbWFpbC5jb20iPldpbSBEZWJsYXV3ZTwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIENsZWFyQ2FzZVJlbW92ZUNvbnN1bWVyCiAgICAgaW1wbGVtZW50cyBTdHJlYW1Db25zdW1lcgpAQCAtNTAsNiArNTEsNyBAQAogICAgIC8vIFN0cmVhbSBDb25zdW1lciBJbXBsZW1lbnRhdGlvbgogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgY29uc3VtZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIGxvZ2dlci5kZWJ1ZyggbGluZSApOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvc3RhdHVzL0NsZWFyQ2FzZVN0YXR1c0NvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL3N0YXR1cy9DbGVhckNhc2VTdGF0dXNDb21tYW5kLmphdmEKaW5kZXggODNmNzVkYy4uNmI4YThkMSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvc3RhdHVzL0NsZWFyQ2FzZVN0YXR1c0NvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9zdGF0dXMvQ2xlYXJDYXNlU3RhdHVzQ29tbWFuZC5qYXZhCkBAIC0zMywxMSArMzMsMTMgQEAKIAogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp3aW0uZGVibGF1d2VAZ21haWwuY29tIj5XaW0gRGVibGF1d2U8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBDbGVhckNhc2VTdGF0dXNDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdFN0YXR1c0NvbW1hbmQKICAgICBpbXBsZW1lbnRzIENsZWFyQ2FzZUNvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTdGF0dXNTY21SZXN1bHQgZXhlY3V0ZVN0YXR1c0NvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSBzY21Qcm92aWRlclJlcG9zaXRvcnksIFNjbUZpbGVTZXQgc2NtRmlsZVNldCApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC04Myw3ICs4NSw3IEBACiAgICAgICAgIGNvbW1hbmQuc2V0RXhlY3V0YWJsZSggImNsZWFydG9vbCIgKTsKIAogICAgICAgICBjb21tYW5kLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoICJsc2NoZWNrb3V0IiApOwotICAgICAgICBjb21tYW5kLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoICItY3ZpZXciKTsKKyAgICAgICAgY29tbWFuZC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAiLWN2aWV3IiApOwogICAgICAgICBjb21tYW5kLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoICItciIgKTsKICAgICAgICAgY29tbWFuZC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAiLWZtdCIgKTsKICAgICAgICAgY29tbWFuZC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAiJW5cXG4iICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC9zdGF0dXMvQ2xlYXJDYXNlU3RhdHVzQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL3N0YXR1cy9DbGVhckNhc2VTdGF0dXNDb25zdW1lci5qYXZhCmluZGV4IDU3ZWI1MDIuLmQ4NzQ4ODMgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL3N0YXR1cy9DbGVhckNhc2VTdGF0dXNDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL3N0YXR1cy9DbGVhckNhc2VTdGF0dXNDb25zdW1lci5qYXZhCkBAIC0zMCw2ICszMCw3IEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86d2ltLmRlYmxhdXdlQGdtYWlsLmNvbSI+V2ltIERlYmxhdXdlPC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgQ2xlYXJDYXNlU3RhdHVzQ29uc3VtZXIKICAgICBpbXBsZW1lbnRzIFN0cmVhbUNvbnN1bWVyCkBAIC01NCw2ICs1NSw3IEBACiAgICAgLy8gU3RyZWFtIENvbnN1bWVyIEltcGxlbWVudGF0aW9uCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgbG9nZ2VyLmRlYnVnKCBsaW5lICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC90YWcvQ2xlYXJDYXNlVGFnQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvdGFnL0NsZWFyQ2FzZVRhZ0NvbW1hbmQuamF2YQppbmRleCAxOTY1YjA1Li4wN2MzNDM5IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC90YWcvQ2xlYXJDYXNlVGFnQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL3RhZy9DbGVhckNhc2VUYWdDb21tYW5kLmphdmEKQEAgLTM1LDEyICszNSwxMyBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOndpbS5kZWJsYXV3ZUBnbWFpbC5jb20iPldpbSBEZWJsYXV3ZTwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIENsZWFyQ2FzZVRhZ0NvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0VGFnQ29tbWFuZAogICAgIGltcGxlbWVudHMgQ2xlYXJDYXNlQ29tbWFuZAogewotCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU2NtUmVzdWx0IGV4ZWN1dGVUYWdDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgc2NtUHJvdmlkZXJSZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyB0YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC01OCw4ICs1OSw5IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIGdldExvZ2dlcigpLmRlYnVnKCAiQ3JlYXRpbmcgbGFiZWw6ICIgKyB0YWcgKTsKICAgICAgICAgICAgIENvbW1hbmRsaW5lIG5ld0xhYmVsQ29tbWFuZExpbmUgPSBjcmVhdGVOZXdMYWJlbENvbW1hbmRMaW5lKCBmaWxlU2V0LCB0YWcgKTsKLSAgICAgICAgICAgIGdldExvZ2dlcigpLmRlYnVnKCAiRXhlY3V0aW5nOiAiICsgbmV3TGFiZWxDb21tYW5kTGluZS5nZXRXb3JraW5nRGlyZWN0b3J5KCkuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiPj4iICsKLSAgICAgICAgICAgICAgICBuZXdMYWJlbENvbW1hbmRMaW5lLnRvU3RyaW5nKCkgKTsKKyAgICAgICAgICAgIGdldExvZ2dlcigpLmRlYnVnKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeGVjdXRpbmc6ICIgKyBuZXdMYWJlbENvbW1hbmRMaW5lLmdldFdvcmtpbmdEaXJlY3RvcnkoKS5nZXRBYnNvbHV0ZVBhdGgoKSArICI+PiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBuZXdMYWJlbENvbW1hbmRMaW5lLnRvU3RyaW5nKCkgKTsKICAgICAgICAgICAgIGV4aXRDb2RlID0gQ29tbWFuZExpbmVVdGlscy5leGVjdXRlQ29tbWFuZExpbmUoIG5ld0xhYmVsQ29tbWFuZExpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lcigpLCBzdGRlcnIgKTsKIApkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvdGFnL0NsZWFyQ2FzZVRhZ0NvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC90YWcvQ2xlYXJDYXNlVGFnQ29uc3VtZXIuamF2YQppbmRleCBjZjc5MWE0Li5hMGM1YjhlIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC90YWcvQ2xlYXJDYXNlVGFnQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC90YWcvQ2xlYXJDYXNlVGFnQ29uc3VtZXIuamF2YQpAQCAtMjksNiArMjksNyBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRyeWd2aXNAaW5hbW8ubm8iPlRyeWd2ZSBMYXVnc3Qmb3NsYXNoO2w8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBDbGVhckNhc2VUYWdDb25zdW1lcgogICAgIGltcGxlbWVudHMgU3RyZWFtQ29uc3VtZXIKQEAgLTUwLDYgKzUxLDcgQEAKICAgICAvLyBTdHJlYW0gQ29uc3VtZXIgSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBsb2dnZXIuZGVidWcoIGxpbmUgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL3VuZWRpdC9DbGVhckNhc2VVbkVkaXRDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC91bmVkaXQvQ2xlYXJDYXNlVW5FZGl0Q29tbWFuZC5qYXZhCmluZGV4IDYyOTk5ZDQuLjVkMzI4MzAgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL3VuZWRpdC9DbGVhckNhc2VVbkVkaXRDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvdW5lZGl0L0NsZWFyQ2FzZVVuRWRpdENvbW1hbmQuamF2YQpAQCAtMzUsMTEgKzM1LDEzIEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86d2ltLmRlYmxhdXdlQGdtYWlsLmNvbSI+V2ltIERlYmxhdXdlPC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgQ2xlYXJDYXNlVW5FZGl0Q29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RVbkVkaXRDb21tYW5kCiAgICAgaW1wbGVtZW50cyBDbGVhckNhc2VDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU2NtUmVzdWx0IGV4ZWN1dGVVbkVkaXRDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL3VuZWRpdC9DbGVhckNhc2VVbkVkaXRDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvdW5lZGl0L0NsZWFyQ2FzZVVuRWRpdENvbnN1bWVyLmphdmEKaW5kZXggYTMwZTAxNC4uNmM2NDU4OCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvdW5lZGl0L0NsZWFyQ2FzZVVuRWRpdENvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvdW5lZGl0L0NsZWFyQ2FzZVVuRWRpdENvbnN1bWVyLmphdmEKQEAgLTI5LDYgKzI5LDcgQEAKIAogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp3aW0uZGVibGF1d2VAZ21haWwuY29tIj5XaW0gRGVibGF1d2U8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBDbGVhckNhc2VVbkVkaXRDb25zdW1lcgogICAgIGltcGxlbWVudHMgU3RyZWFtQ29uc3VtZXIKQEAgLTUwLDYgKzUxLDcgQEAKICAgICAvLyBTdHJlYW0gQ29uc3VtZXIgSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBsb2dnZXIuZGVidWcoIGxpbmUgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL3VwZGF0ZS9DbGVhckNhc2VVcGRhdGVDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvY29tbWFuZC91cGRhdGUvQ2xlYXJDYXNlVXBkYXRlQ29tbWFuZC5qYXZhCmluZGV4IDc5Njc4ZTcuLmZjODg4ZTkgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL3VwZGF0ZS9DbGVhckNhc2VVcGRhdGVDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvdXBkYXRlL0NsZWFyQ2FzZVVwZGF0ZUNvbW1hbmQuamF2YQpAQCAtMzYsMTEgKzM2LDEzIEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86d2ltLmRlYmxhdXdlQGdtYWlsLmNvbSI+V2ltIERlYmxhdXdlPC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgQ2xlYXJDYXNlVXBkYXRlQ29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RVcGRhdGVDb21tYW5kCiAgICAgaW1wbGVtZW50cyBDbGVhckNhc2VDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgVXBkYXRlU2NtUmVzdWx0IGV4ZWN1dGVVcGRhdGVDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbVZlcnNpb24gdmVyc2lvbiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTcyLDYgKzc0LDcgQEAKICAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVTY21SZXN1bHQoIGNsLnRvU3RyaW5nKCksIGNvbnN1bWVyLmdldFVwZGF0ZWRGaWxlcygpICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hhbmdlTG9nQ29tbWFuZCBnZXRDaGFuZ2VMb2dDb21tYW5kKCkKICAgICB7CiAgICAgICAgIENsZWFyQ2FzZUNoYW5nZUxvZ0NvbW1hbmQgY2hhbmdlTG9nQ21kID0gbmV3IENsZWFyQ2FzZUNoYW5nZUxvZ0NvbW1hbmQoKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9jb21tYW5kL3VwZGF0ZS9DbGVhckNhc2VVcGRhdGVDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvdXBkYXRlL0NsZWFyQ2FzZVVwZGF0ZUNvbnN1bWVyLmphdmEKaW5kZXggYjVmY2JhZS4uYjRkNDhkYyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvdXBkYXRlL0NsZWFyQ2FzZVVwZGF0ZUNvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL2NvbW1hbmQvdXBkYXRlL0NsZWFyQ2FzZVVwZGF0ZUNvbnN1bWVyLmphdmEKQEAgLTI5LDYgKzI5LDcgQEAKIAogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp3aW0uZGVibGF1d2VAZ21haWwuY29tIj5XaW0gRGVibGF1d2U8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBDbGVhckNhc2VVcGRhdGVDb25zdW1lcgogICAgIGltcGxlbWVudHMgU3RyZWFtQ29uc3VtZXIKQEAgLTUwLDYgKzUxLDcgQEAKICAgICAvLyBTdHJlYW0gQ29uc3VtZXIgSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBsb2dnZXIuZGVidWcoIGxpbmUgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS9yZXBvc2l0b3J5L0NsZWFyQ2FzZVNjbVByb3ZpZGVyUmVwb3NpdG9yeS5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL3JlcG9zaXRvcnkvQ2xlYXJDYXNlU2NtUHJvdmlkZXJSZXBvc2l0b3J5LmphdmEKaW5kZXggNTlhZTAzOC4uMjMyNTJiYiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL3JlcG9zaXRvcnkvQ2xlYXJDYXNlU2NtUHJvdmlkZXJSZXBvc2l0b3J5LmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL3JlcG9zaXRvcnkvQ2xlYXJDYXNlU2NtUHJvdmlkZXJSZXBvc2l0b3J5LmphdmEKQEAgLTM3LDEwICszNywxMCBAQAogICogUHJvdmlkZXIgUmVwb3NpdG9yeSBmb3IgQ2xlYXJDYXNlIChzdGFuZGFyZCwgTFQsIFVDTSkKICAqIDxwIC8+CiAgKiBVcmwgZm9ybWF0IGZvciBDbGVhckNhc2UgYW5kIENsZWFyQ2FzZUxUIDogPGJyIC8+Ci0gKiBbdmlld19uYW1lXTpbY29uZmlnc3BlY10gb3IgW3ZpZXdfbmFtZV18W2NvbmZpZ3NwZWNdIAorICogW3ZpZXdfbmFtZV06W2NvbmZpZ3NwZWNdIG9yIFt2aWV3X25hbWVdfFtjb25maWdzcGVjXQogICogPHAgLz4KICAqIFVybCBmb3JtYXQgZm9yIENsZWFyQ2FzZVVDTSA6IDxiciAvPgotICogW3ZpZXdfbmFtZV18W2NvbmZpZ3NwZWNdfFt2b2JfbmFtZV18W3N0cmVhbV9uYW1lXSBvciBbdmlld19uYW1lXTpbY29uZmlnc3BlY106W3ZvYl9uYW1lXTpbc3RyZWFtX25hbWVdICAKKyAqIFt2aWV3X25hbWVdfFtjb25maWdzcGVjXXxbdm9iX25hbWVdfFtzdHJlYW1fbmFtZV0gb3IgW3ZpZXdfbmFtZV06W2NvbmZpZ3NwZWNdOlt2b2JfbmFtZV06W3N0cmVhbV9uYW1lXQogICogPHAgLz4KICAqIFtjb25maWdzcGVjXSBjYW4gYmUgdXNlZCBpbiB0d28gZGlmZmVyZW50IHdheXM6CiAgKiA8dWw+CkBAIC04MywxMiArODMsMTIgQEAKICAgICAgKiBEZXNjcmliZSB0aGUgdm9iIGNvbnRhaW5pbmcgdGhlIHN0cmVhbS4gT25seSB1c2VkIHdpdGggQ2xlYXJDYXNlVUNNCiAgICAgICovCiAgICAgcHJpdmF0ZSBTdHJpbmcgdm9iTmFtZTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFByb3ZpZGVyIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKICAgICAgKi8KICAgICBwcml2YXRlIFNldHRpbmdzIHNldHRpbmdzOwotICAgIAorCiAgICAgLyoqCiAgICAgICogRGVmaW5lIHRoZSBmbGFnIHVzZWQgaW4gdGhlIGNsZWFyY2FzZS1zZXR0aW5ncy54bWwgd2hlbiB1c2luZyBDbGVhckNhc2VMVAogICAgICAqLwpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgICogRGVmaW5lIHRoZSBkZWZhdWx0IHZhbHVlIGZyb20gdGhlIGNsZWFyY2FzZS1zZXR0aW5ncy54bWwgd2hlbiB1c2luZyBDbGVhckNhc2UKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDTEVBUkNBU0VfREVGQVVMVCA9IG51bGw7Ci0gICAgCisKICAgICBwdWJsaWMgQ2xlYXJDYXNlU2NtUHJvdmlkZXJSZXBvc2l0b3J5KCBTY21Mb2dnZXIgbG9nZ2VyLCBTdHJpbmcgdXJsLCBTZXR0aW5ncyBzZXR0aW5ncyApCiAgICAgICAgIHRocm93cyBTY21SZXBvc2l0b3J5RXhjZXB0aW9uCiAgICAgewpAQCAtMTQ2LDEyICsxNDYsMTYgQEAKICAgICAgICAgdGhyb3dzIFVua25vd25Ib3N0RXhjZXB0aW9uLCBVUklTeW50YXhFeGNlcHRpb24sIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgU3RyaW5nIGNvbmZpZ1NwZWNTdHJpbmcgPSBudWxsOwotICAgICAgICAKLSAgICAgICAgaWYgKENMRUFSQ0FTRV9VQ00uZXF1YWxzKHNldHRpbmdzLmdldENsZWFyY2FzZVR5cGUoKSkpCi0gICAgICAgICAgICBjb25maWdTcGVjU3RyaW5nID0gZmlsbFVDTVByb3BlcnRpZXModG9rZW5pemVyKTsKKworICAgICAgICBpZiAoIENMRUFSQ0FTRV9VQ00uZXF1YWxzKCBzZXR0aW5ncy5nZXRDbGVhcmNhc2VUeXBlKCkgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbmZpZ1NwZWNTdHJpbmcgPSBmaWxsVUNNUHJvcGVydGllcyggdG9rZW5pemVyICk7CisgICAgICAgIH0KICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29uZmlnU3BlY1N0cmluZyA9IGZpbGxEZWZhdWx0UHJvcGVydGllcyh0b2tlbml6ZXIpOwotICAgICAgICAKKyAgICAgICAgeworICAgICAgICAgICAgY29uZmlnU3BlY1N0cmluZyA9IGZpbGxEZWZhdWx0UHJvcGVydGllcyggdG9rZW5pemVyICk7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoICFjb25maWdTcGVjU3RyaW5nLnN0YXJ0c1dpdGgoICJsb2FkICIgKSApCiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbmZpZ1NwZWMgPSBjcmVhdGVDb25maWdTcGVjRmlsZSggY29uZmlnU3BlY1N0cmluZyApOwpAQCAtMTY1LDM1ICsxNjksNDAgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgU3RyaW5nIGZpbGxEZWZhdWx0UHJvcGVydGllcyhTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyKSB0aHJvd3MgVW5rbm93bkhvc3RFeGNlcHRpb24gCisgICAgcHJpdmF0ZSBTdHJpbmcgZmlsbERlZmF1bHRQcm9wZXJ0aWVzKCBTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyICkKKyAgICAgICAgdGhyb3dzIFVua25vd25Ib3N0RXhjZXB0aW9uCiAgICAgewotICAgICAgICBpbnQgdG9rZW5OdW1iZXIgPSB0b2tlbml6ZXIuY291bnRUb2tlbnMoKTsgIAorICAgICAgICBpbnQgdG9rZW5OdW1iZXIgPSB0b2tlbml6ZXIuY291bnRUb2tlbnMoKTsKICAgICAgICAgU3RyaW5nIGNvbmZpZ1NwZWNTdHJpbmc7CiAgICAgICAgIGlmICggdG9rZW5OdW1iZXIgPT0gMSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vTm8gdmlldyBuYW1lIHdhcyBnaXZlbgorICAgICAgICAgICAgLy8gTm8gdmlldyBuYW1lIHdhcyBnaXZlbgogICAgICAgICAgICAgdmlld05hbWUgPSBnZXREZWZhdWx0Vmlld05hbWUoKTsKICAgICAgICAgICAgIGNvbmZpZ1NwZWNTdHJpbmcgPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBjb25maWdTcGVjU3RyaW5nID0gY2hlY2tWaWV3TmFtZSh0b2tlbml6ZXIpOwotICAgICAgICAgICAgY2hlY2tVbmV4cGVjdGVkUGFyYW1ldGVyKHRva2VuaXplciwgdG9rZW5OdW1iZXIsIDIpOworICAgICAgICAgICAgY29uZmlnU3BlY1N0cmluZyA9IGNoZWNrVmlld05hbWUoIHRva2VuaXplciApOworICAgICAgICAgICAgY2hlY2tVbmV4cGVjdGVkUGFyYW1ldGVyKCB0b2tlbml6ZXIsIHRva2VuTnVtYmVyLCAyICk7CiAgICAgICAgIH0KICAgICAgICAgbG9nZ2VyLmRlYnVnKCAidmlld05hbWUgPSAnIiArIHZpZXdOYW1lICsgIicgOyBjb25maWdTcGVjID0gJyIgKyBjb25maWdTcGVjU3RyaW5nICsgIiciICk7CiAgICAgICAgIHJldHVybiBjb25maWdTcGVjU3RyaW5nOwogICAgIH0KIAotICAgIHByaXZhdGUgU3RyaW5nIGZpbGxVQ01Qcm9wZXJ0aWVzKFN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIpIHRocm93cyBVbmtub3duSG9zdEV4Y2VwdGlvbiwgTWFsZm9ybWVkVVJMRXhjZXB0aW9uIAorICAgIHByaXZhdGUgU3RyaW5nIGZpbGxVQ01Qcm9wZXJ0aWVzKCBTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyICkKKyAgICAgICAgdGhyb3dzIFVua25vd25Ib3N0RXhjZXB0aW9uLCBNYWxmb3JtZWRVUkxFeGNlcHRpb24KICAgICB7CiAgICAgICAgIGludCB0b2tlbk51bWJlciA9IHRva2VuaXplci5jb3VudFRva2VucygpOwogICAgICAgICBpZiAoIHRva2VuTnVtYmVyIDw9IDIgKQotICAgICAgICAgICAgdGhyb3cgbmV3IE1hbGZvcm1lZFVSTEV4Y2VwdGlvbigiQ2xlYXJDYXNlVUNNIG5lZWQgbW9yZSBwYXJhbWV0ZXJzLiBFeHBlY3RlZCB1cmwgZm9ybWF0IDogW3ZpZXdfbmFtZV18W2NvbmZpZ3NwZWNdfFt2b2JfbmFtZV18W3N0cmVhbV9uYW1lXSIpOwotICAgICAgICAKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiggIkNsZWFyQ2FzZVVDTSBuZWVkIG1vcmUgcGFyYW1ldGVycy4gRXhwZWN0ZWQgdXJsIGZvcm1hdCA6ICIKKyAgICAgICAgICAgICAgICArICJbdmlld19uYW1lXXxbY29uZmlnc3BlY118W3ZvYl9uYW1lXXxbc3RyZWFtX25hbWVdIiApOworICAgICAgICB9CisKICAgICAgICAgU3RyaW5nIGNvbmZpZ1NwZWNTdHJpbmc7CiAgICAgICAgIGlmICggdG9rZW5OdW1iZXIgPT0gMyApCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vTm8gdmlldyBuYW1lIHdhcyBnaXZlbgorICAgICAgICAgICAgLy8gTm8gdmlldyBuYW1lIHdhcyBnaXZlbgogICAgICAgICAgICAgdmlld05hbWUgPSBnZXREZWZhdWx0Vmlld05hbWUoKTsKICAgICAgICAgICAgIGNvbmZpZ1NwZWNTdHJpbmcgPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CiAgICAgICAgICAgICB2b2JOYW1lID0gdG9rZW5pemVyLm5leHRUb2tlbigpOwpAQCAtMjAxLDE2ICsyMTAsMTggQEAKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbmZpZ1NwZWNTdHJpbmcgPSBjaGVja1ZpZXdOYW1lKHRva2VuaXplcik7CisgICAgICAgICAgICBjb25maWdTcGVjU3RyaW5nID0gY2hlY2tWaWV3TmFtZSggdG9rZW5pemVyICk7CiAgICAgICAgICAgICB2b2JOYW1lID0gdG9rZW5pemVyLm5leHRUb2tlbigpOwotICAgICAgICAgICAgc3RyZWFtTmFtZSA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsgICAgICAgCi0gICAgICAgICAgICBjaGVja1VuZXhwZWN0ZWRQYXJhbWV0ZXIodG9rZW5pemVyLCB0b2tlbk51bWJlciwgNCk7CisgICAgICAgICAgICBzdHJlYW1OYW1lID0gdG9rZW5pemVyLm5leHRUb2tlbigpOworICAgICAgICAgICAgY2hlY2tVbmV4cGVjdGVkUGFyYW1ldGVyKCB0b2tlbml6ZXIsIHRva2VuTnVtYmVyLCA0ICk7CiAgICAgICAgIH0KLSAgICAgICAgbG9nZ2VyLmluZm8oICJ2aWV3TmFtZSA9ICciICsgdmlld05hbWUgKyAiJyA7IGNvbmZpZ1NwZWMgPSAnIiArIGNvbmZpZ1NwZWNTdHJpbmcgKyAiJyA7IHZvYk5hbWUgPSAnIiArIHZvYk5hbWUgKyAiJyA7IHN0cmVhbU5hbWUgPSAnIiArIHN0cmVhbU5hbWUgKyAiJyIgKTsKKyAgICAgICAgbG9nZ2VyLmluZm8oICJ2aWV3TmFtZSA9ICciICsgdmlld05hbWUgKyAiJyA7IGNvbmZpZ1NwZWMgPSAnIiArIGNvbmZpZ1NwZWNTdHJpbmcgKyAiJyA7IHZvYk5hbWUgPSAnIgorICAgICAgICAgICAgKyB2b2JOYW1lICsgIicgOyBzdHJlYW1OYW1lID0gJyIgKyBzdHJlYW1OYW1lICsgIiciICk7CiAgICAgICAgIHJldHVybiBjb25maWdTcGVjU3RyaW5nOwogICAgIH0KIAotICAgIHByaXZhdGUgU3RyaW5nIGNoZWNrVmlld05hbWUoU3RyaW5nVG9rZW5pemVyIHRva2VuaXplcikgdGhyb3dzIFVua25vd25Ib3N0RXhjZXB0aW9uIAorICAgIHByaXZhdGUgU3RyaW5nIGNoZWNrVmlld05hbWUoIFN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgKQorICAgICAgICB0aHJvd3MgVW5rbm93bkhvc3RFeGNlcHRpb24KICAgICB7CiAgICAgICAgIHZpZXdOYW1lID0gdG9rZW5pemVyLm5leHRUb2tlbigpOwogICAgICAgICBpZiAoIHZpZXdOYW1lLmxlbmd0aCgpID4gMCApCkBAIC0yMjQsMTUgKzIzNSwxNSBAQAogICAgICAgICByZXR1cm4gdG9rZW5pemVyLm5leHRUb2tlbigpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBjaGVja1VuZXhwZWN0ZWRQYXJhbWV0ZXIoU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciwgaW50IHRva2VuTnVtYmVyLCBpbnQgbWF4VG9rZW5OdW1iZXIpIAorICAgIHByaXZhdGUgdm9pZCBjaGVja1VuZXhwZWN0ZWRQYXJhbWV0ZXIoIFN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIsIGludCB0b2tlbk51bWJlciwgaW50IG1heFRva2VuTnVtYmVyICkKICAgICB7Ci0gICAgICAgIGlmICh0b2tlbk51bWJlciA+IG1heFRva2VuTnVtYmVyKQorICAgICAgICBpZiAoIHRva2VuTnVtYmVyID4gbWF4VG9rZW5OdW1iZXIgKQogICAgICAgICB7CiAgICAgICAgICAgICBTdHJpbmcgdW5leHBlY3RlZFRva2VuID0gdG9rZW5pemVyLm5leHRUb2tlbigpOwotICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlRoZSBTQ00gVVJMIGNvbnRhaW5zIHVudXNlZCBwYXJhbWV0ZXIgOiAiICsgdW5leHBlY3RlZFRva2VuKTsKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCAiVGhlIFNDTSBVUkwgY29udGFpbnMgdW51c2VkIHBhcmFtZXRlciA6ICIgKyB1bmV4cGVjdGVkVG9rZW4gKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgRmlsZSBjcmVhdGVDb25maWdTcGVjRmlsZSggU3RyaW5nIHNwZWMgKQogICAgICAgICB0aHJvd3MgVVJJU3ludGF4RXhjZXB0aW9uLCBNYWxmb3JtZWRVUkxFeGNlcHRpb24KICAgICB7CkBAIC0zMjQsMTEgKzMzNSwxMyBAQAogICAgICAgICByZXR1cm4gbG9hZERpcmVjdG9yeTsKICAgICB9CiAKLSAgICBwdWJsaWMgU3RyaW5nIGdldFN0cmVhbU5hbWUoKSB7CisgICAgcHVibGljIFN0cmluZyBnZXRTdHJlYW1OYW1lKCkKKyAgICB7CiAgICAgICAgIHJldHVybiBzdHJlYW1OYW1lOwogICAgIH0KIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Vm9iTmFtZSgpIHsKKyAgICBwdWJsaWMgU3RyaW5nIGdldFZvYk5hbWUoKQorICAgIHsKICAgICAgICAgcmV0dXJuIHZvYk5hbWU7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL3V0aWwvQ2xlYXJDYXNlVXRpbC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY2xlYXJjYXNlL3V0aWwvQ2xlYXJDYXNlVXRpbC5qYXZhCmluZGV4IGVmNTE5YTguLjk2Y2JkMGMgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2NsZWFyY2FzZS91dGlsL0NsZWFyQ2FzZVV0aWwuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jbGVhcmNhc2UvdXRpbC9DbGVhckNhc2VVdGlsLmphdmEKQEAgLTYzLDkgKzYzLDExIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXRjaCAoIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlICkKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBub3AKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhdGNoICggSU9FeGNlcHRpb24gZSApCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gbm9wCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXRjaCAoIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gZSApCiAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL3NpdGUvc2l0ZS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2Uvc3JjL3NpdGUvc2l0ZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNjNGJlNgotLS0gL2Rldi9udWxsCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWNsZWFyY2FzZS9zcmMvc2l0ZS9zaXRlLnhtbApAQCAtMCwwICsxLDMyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+CisKKzwhLS0KKyAgfiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgIH4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgIH4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgfiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIH4gdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICB+ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgfiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICB+IHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgIH4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIH4gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIH4gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICB+IHVuZGVyIHRoZSBMaWNlbnNlLgorICAtLT4KKworPHByb2plY3QgbmFtZT0iTWF2ZW4gU0NNIENsZWFyY2FzZSBQcm92aWRlciI+CisgIDxib2R5PgorICAgIDxtZW51IHJlZj0icGFyZW50IiAvPgorCisgICAgPG1lbnUgbmFtZT0iT3ZlcnZpZXciPgorICAgICAgPGl0ZW0gbmFtZT0iSW50cm9kdWN0aW9uIiBocmVmPSJpbmRleC5odG1sIi8+CisgICAgPC9tZW51PgorCisgICAgPG1lbnUgcmVmPSJyZXBvcnRzIiBpbmhlcml0PSJib3R0b20iIC8+CisgIDwvYm9keT4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3BvbS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9wb20ueG1sCmluZGV4IDEwNGNiMWEuLjQ5MzgyZTQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3BvbS54bWwKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvcG9tLnhtbApAQCAtMSw0ICsxLDYgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCEtLQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPCEtLQogICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKICAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKICAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpAQCAtMTgsMjEgKzIwLDI0IEBACiAgIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxwYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyczwvYXJ0aWZhY3RJZD4KICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXJzPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+Ci0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotCTxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1oZzwvYXJ0aWZhY3RJZD4KLQk8bmFtZT5NYXZlbiBTQ00gTWVyY3VyaWFsIChIZykgUHJvdmlkZXI8L25hbWU+Ci0JPHZlcnNpb24+MS4xPC92ZXJzaW9uPgorCisgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1oZzwvYXJ0aWZhY3RJZD4KKworICA8bmFtZT5NYXZlbiBTQ00gTWVyY3VyaWFsIChIZykgUHJvdmlkZXI8L25hbWU+CisgIDxkZXNjcmlwdGlvbj5TQ00gUHJvdmlkZXIgaW1wbGVtZW50YXRpb24gZm9yIE1lcmN1cmlhbCBIZyAoaHR0cDovL3d3dy5zZWxlbmljLmNvbS9tZXJjdXJpYWwvd2lraS8pLjwvZGVzY3JpcHRpb24+CiAKICAgPGNvbnRyaWJ1dG9ycz4KLQkJPGNvbnRyaWJ1dG9yPgotCQkgPG5hbWU+VGh1cm5lciBSdXBlcnQ8L25hbWU+Ci0JCSA8ZW1haWw+dGh1cm5lci5ydXBlcnRAeW1vbm8ubmV0PC9lbWFpbD4KLQkJPC9jb250cmlidXRvcj4KKyAgICA8Y29udHJpYnV0b3I+CisgICAgIDxuYW1lPlRodXJuZXIgUnVwZXJ0PC9uYW1lPgorICAgICA8ZW1haWw+dGh1cm5lci5ydXBlcnRAeW1vbm8ubmV0PC9lbWFpbD4KKyAgICA8L2NvbnRyaWJ1dG9yPgogICAgIDxjb250cmlidXRvcj4KICAgICAgIDxuYW1lPkFsYWluIEhvYW5nPC9uYW1lPgogICAgICAgPGVtYWlsPmhvYW5nYUBhbHVtLnJwaS5lZHU8L2VtYWlsPgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9IZ0NvbmZpZy5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9IZ0NvbmZpZy5qYXZhCmluZGV4IDIxNjk0ZjYuLjhhNWY4MjMgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvSGdDb25maWcuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL0hnQ29uZmlnLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21FeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVN0YXR1czsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5sb2cuRGVmYXVsdExvZzsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5jb21tYW5kLkhnQ29tbWFuZDsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5jb21tYW5kLkhnQ29tbWFuZENvbnN0YW50czsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5jb21tYW5kLkhnQ29uc3VtZXI7CiBpbXBvcnQgb3JnLmNvZGVoYXVzLnBsZXh1cy51dGlsLmNsaS5Db21tYW5kbGluZTsKIApAQCAtMzMsMTEgKzMzLDEyIEBACiAgKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86dGh1cm5lci5ydXBlcnRAeW1vbm8ubmV0Ij50aHVybmVyIHJ1cGVydDwvYT4KICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnJ5YW5AZGFya3NsZWVwLmNvbSI+cnlhbiBkYXVtPC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgSGdDb25maWcKIHsKICAgICAvL01pbmltdW0gdmVyc2lvbiBmb3IgdGhlIEhnIFNDTQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBIR19SRVEgPSAiMC45LjIiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIR19SRVEgPSAiMC45LjIiOwogCiAgICAgLy8gVGhlIHN0cmluZyB3aGljaCBpbmRpY2F0ZXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgTWVyY3VyaWFsIGxpbmUKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEdfVkVSU0lPTl9UQUcgPSAiZXJjdXJpYWwgRGlzdHJpYnV0ZWQgU0NNICh2ZXJzaW9uICI7CkBAIC04Miw3ICs4Myw3IEBACiAgICAgcHVibGljIHN0YXRpYyBIZ1ZlcnNpb25Db25zdW1lciBnZXRIZ1ZlcnNpb24oIEZpbGUgd29ya2luZ0RpciApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7Ci0gICAgICAgIFN0cmluZ1tdIHZlcnNpb25DbWQgPSBuZXcgU3RyaW5nW117SGdDb21tYW5kLlZFUlNJT059OworICAgICAgICBTdHJpbmdbXSB2ZXJzaW9uQ21kID0gbmV3IFN0cmluZ1tde0hnQ29tbWFuZENvbnN0YW50cy5WRVJTSU9OfTsKICAgICAgICAgSGdWZXJzaW9uQ29uc3VtZXIgY29uc3VtZXIgPSBuZXcgSGdWZXJzaW9uQ29uc3VtZXIoIEhHX1ZFUlNJT05fVEFHICk7CiAgICAgICAgIENvbW1hbmRsaW5lIGNtZCA9IEhnVXRpbHMuYnVpbGRDbWQoIHdvcmtpbmdEaXIsIHZlcnNpb25DbWQgKTsKIApAQCAtMTAyLDkgKzEwMyw5IEBACiAgICAgICogQHBhcmFtIHZlcnNpb24yCiAgICAgICogQHJldHVybiB0cnVlIGlmIHZlcnNpb24yIGlzIGdyZWF0ZXIgdGhhbiB2ZXJzaW9uMQogICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gQ29tcGFyZVZlcnNpb24oIFN0cmluZyB2ZXJzaW9uMSwgU3RyaW5nIHZlcnNpb24yICkKKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGNvbXBhcmVWZXJzaW9uKCBTdHJpbmcgdmVyc2lvbjEsIFN0cmluZyB2ZXJzaW9uMiApCiAgICAgewotICAgICAgICBpbnQgbDEsIGwyLCBpOworICAgICAgICBpbnQgbDEsIGwyOwogICAgICAgICBTdHJpbmcgdjEsIHYyOwogCiAgICAgICAgIHYxID0gdmVyc2lvbjE7CkBAIC0xNDIsMTcgKzE0MywxNyBAQAogCiAgICAgICAgIHByaXZhdGUgU3RyaW5nIHZlcnNpb25TdHIgPSAiTkEiOwogCi0gICAgICAgIHByaXZhdGUgU3RyaW5nIHZlcnNpb25fdGFnOworICAgICAgICBwcml2YXRlIFN0cmluZyB2ZXJzaW9uVGFnOwogCi0gICAgICAgIEhnVmVyc2lvbkNvbnN1bWVyKCBTdHJpbmcgdmVyc2lvbl90YWcgKQorICAgICAgICBIZ1ZlcnNpb25Db25zdW1lciggU3RyaW5nIHZlcnNpb25UYWcgKQogICAgICAgICB7CiAgICAgICAgICAgICBzdXBlciggbmV3IERlZmF1bHRMb2coKSApOwotICAgICAgICAgICAgdGhpcy52ZXJzaW9uX3RhZyA9IHZlcnNpb25fdGFnOworICAgICAgICAgICAgdGhpcy52ZXJzaW9uVGFnID0gdmVyc2lvblRhZzsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyB2b2lkIGRvQ29uc3VtZSggU2NtRmlsZVN0YXR1cyBzdGF0dXMsIFN0cmluZyBsaW5lICkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCBsaW5lLnN0YXJ0c1dpdGgoIHZlcnNpb25fdGFnICkgKQorICAgICAgICAgICAgaWYgKCBsaW5lLnN0YXJ0c1dpdGgoIHZlcnNpb25UYWcgKSApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgU3RyaW5nW10gZWxlbWVudHMgPSBsaW5lLnNwbGl0KCAiICIgKTsKICAgICAgICAgICAgICAgICB2ZXJzaW9uU3RyID0gZWxlbWVudHNbZWxlbWVudHMubGVuZ3RoIC0gMV0uc3BsaXQoICJcXCkiIClbMF07CkBAIC0xNjgsNyArMTY5LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgLy8gYnVpbGQgb25lIG51bWJlciBvdXQgb2YgdGhlIHdob2xlIHZlcnNpb24gIwogCi0gICAgICAgICAgICByZXR1cm4gQ29tcGFyZVZlcnNpb24oIHZlcnNpb24sIHZlcnNpb25TdHIgKTsKKyAgICAgICAgICAgIHJldHVybiBjb21wYXJlVmVyc2lvbiggdmVyc2lvbiwgdmVyc2lvblN0ciApOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xODQsNyArMTg1LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCBGaWxlIHdvcmtpbmdEaXIgKQogICAgIHsKICAgICAgICAgYm9vbGVhbiBoZ09rID0gaGdWZXJzaW9uLmlzVmVyc2lvbk9rKCBIR19SRVEgKTsKLSAgICAgICAgcmV0dXJuICJcbiAgWW91ciBIZyBpbnN0YWxsYXRpb24gc2VlbXMgdG8gYmUgIiArIGdldEluc3RhbGxlZFN0cigpICsgIlxuICAgIEhnIHZlcnNpb246ICIgKwotICAgICAgICAgICAgaGdWZXJzaW9uLmdldFZlcnNpb24oKSArICggaGdPayA/ICIgKE9LKSIgOiAiIChNYXkgYmUgSU5WQUxJRCkiICkgKyAiXG4iOworICAgICAgICByZXR1cm4gIlxuICBZb3VyIEhnIGluc3RhbGxhdGlvbiBzZWVtcyB0byBiZSAiICsgZ2V0SW5zdGFsbGVkU3RyKCkgKyAiXG4gICAgSGcgdmVyc2lvbjogIgorICAgICAgICAgICAgKyBoZ1ZlcnNpb24uZ2V0VmVyc2lvbigpICsgKCBoZ09rID8gIiAoT0spIiA6ICIgKE1heSBiZSBJTlZBTElEKSIgKSArICJcbiI7CiAgICAgfQogfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvSGdTY21Qcm92aWRlci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9IZ1NjbVByb3ZpZGVyLmphdmEKaW5kZXggNjE5YjVhMS4uMzgzYjk0NyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9IZ1NjbVByb3ZpZGVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9IZ1NjbVByb3ZpZGVyLmphdmEKQEAgLTE5LDYgKzE5LDEwIEBACiAgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVyczsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21FeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldDsKQEAgLTI5LDExICszMywxMCBAQAogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuZGlmZi5EaWZmU2NtUmVzdWx0OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQucmVtb3ZlLlJlbW92ZVNjbVJlc3VsdDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLnN0YXR1cy5TdGF0dXNTY21SZXN1bHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC51cGRhdGUuVXBkYXRlU2NtUmVzdWx0OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQudGFnLlRhZ1NjbVJlc3VsdDsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLnVwZGF0ZS5VcGRhdGVTY21SZXN1bHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlcjsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC50YWcuSGdUYWdDb21tYW5kOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmhnLmNvbW1hbmQuYWRkLkhnQWRkQ29tbWFuZDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5jb21tYW5kLmNoYW5nZWxvZy5IZ0NoYW5nZUxvZ0NvbW1hbmQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5jaGVja2luLkhnQ2hlY2tJbkNvbW1hbmQ7CkBAIC00MSwyNiArNDQsMjUgQEAKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5jb21tYW5kLmRpZmYuSGdEaWZmQ29tbWFuZDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5jb21tYW5kLnJlbW92ZS5IZ1JlbW92ZUNvbW1hbmQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5zdGF0dXMuSGdTdGF0dXNDb21tYW5kOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmhnLmNvbW1hbmQudGFnLkhnVGFnQ29tbWFuZDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5jb21tYW5kLnVwZGF0ZS5IZ1VwZGF0ZUNvbW1hbmQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcucmVwb3NpdG9yeS5IZ1NjbVByb3ZpZGVyUmVwb3NpdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5yZXBvc2l0b3J5LlNjbVJlcG9zaXRvcnlFeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucmVwb3NpdG9yeS5Vbmtub3duUmVwb3NpdG9yeVN0cnVjdHVyZTsKIAotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCiAvKioKICAqIE1lcmN1cmlhbCAoSEcpIGlzIGEgZGVjZW50cmFsaXplZCByZXZpc2lvbiBjb250cm9sIHN5c3RlbS4KICAqIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2VsZW5pYy5jb20vbWVyY3VyaWFsIj5odHRwOi8vd3d3LnNlbGVuaWMuY29tL21lcmN1cmlhbDwvYT4KICAqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0aHVybmVyLnJ1cGVydEB5bW9uby5uZXQiPnRodXJuZXIgcnVwZXJ0PC9hPgorICogQHZlcnNpb24gJElkJAogICogQHBsZXh1cy5jb21wb25lbnQgcm9sZT0ib3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXIiCiAgKiByb2xlLWhpbnQ9ImhnIgogICovCiBwdWJsaWMgY2xhc3MgSGdTY21Qcm92aWRlcgogICAgIGV4dGVuZHMgQWJzdHJhY3RTY21Qcm92aWRlcgogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21TcGVjaWZpY0ZpbGVuYW1lKCkKICAgICB7CiAgICAgICAgIHJldHVybiAiLmhnIjsKQEAgLTY4LDI1ICs3MCwyNCBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgSGdVcmxQYXJzZXJSZXN1bHQKICAgICB7Ci0gICAgICAgIExpc3QgbWVzc2FnZXMgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgICAgIHByaXZhdGUgTGlzdCBtZXNzYWdlcyA9IG5ldyBBcnJheUxpc3QoKTsKIAotICAgICAgICBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeTsKKyAgICAgICAgcHJpdmF0ZSBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeTsKICAgICB9CiAKLQorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSBtYWtlUHJvdmlkZXJTY21SZXBvc2l0b3J5KCBTdHJpbmcgc2NtU3BlY2lmaWNVcmwsIGNoYXIgZGVsaW1pdGVyICkKLSAgICAgICAgICAgIHRocm93cyBTY21SZXBvc2l0b3J5RXhjZXB0aW9uCisgICAgICAgIHRocm93cyBTY21SZXBvc2l0b3J5RXhjZXB0aW9uCisgICAgeworICAgICAgICBIZ1VybFBhcnNlclJlc3VsdCByZXN1bHQgPSBwYXJzZVNjbVVybCggc2NtU3BlY2lmaWNVcmwgKTsKKworICAgICAgICBpZiAoIHJlc3VsdC5tZXNzYWdlcy5zaXplKCkgPiAwICkKICAgICAgICAgewotICAgICAgICAgICAgSGdVcmxQYXJzZXJSZXN1bHQgcmVzdWx0ID0gcGFyc2VTY21VcmwoIHNjbVNwZWNpZmljVXJsICk7Ci0KLSAgICAgICAgICAgIGlmICggcmVzdWx0Lm1lc3NhZ2VzLnNpemUoKSA+IDAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY21SZXBvc2l0b3J5RXhjZXB0aW9uKCAiVGhlIHNjbSB1cmwgaXMgaW52YWxpZC4iLCByZXN1bHQubWVzc2FnZXMgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZXBvc2l0b3J5OworICAgICAgICAgICAgdGhyb3cgbmV3IFNjbVJlcG9zaXRvcnlFeGNlcHRpb24oICJUaGUgc2NtIHVybCBpcyBpbnZhbGlkLiIsIHJlc3VsdC5tZXNzYWdlcyApOwogICAgICAgICB9CiAKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5yZXBvc2l0b3J5OworICAgIH0KIAogICAgIHByaXZhdGUgSGdVcmxQYXJzZXJSZXN1bHQgcGFyc2VTY21VcmwoIFN0cmluZyBzY21TcGVjaWZpY1VybCApCiAgICAgewpAQCAtMTI0LDEyICsxMjUsMTcgQEAKIAogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0cnkgeworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICB7CiAKLSAgICAgICAgICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZSh1cmwpOworICAgICAgICAgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKCB1cmwgKTsKIAotICAgICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoICggVGhyb3dhYmxlIGUgKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlcy5hZGQoICJUaGUgZmlsZW5hbWUgcHJvdmlkZWQgaXMgbm90IHZhbGlkIiApOwogCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE0Miw5ICsxNDgsNyBAQAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciNtYWtlUHJvdmlkZXJTY21SZXBvc2l0b3J5KGphdmEuaW8uRmlsZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTY21Qcm92aWRlclJlcG9zaXRvcnkgbWFrZVByb3ZpZGVyU2NtUmVwb3NpdG9yeSggRmlsZSBwYXRoICkKICAgICAgICAgdGhyb3dzIFNjbVJlcG9zaXRvcnlFeGNlcHRpb24sIFVua25vd25SZXBvc2l0b3J5U3RydWN0dXJlCiAgICAgewpAQCAtMTYzLDE0ICsxNjcsNyBAQAogICAgICAgICByZXR1cm4gbWFrZVByb3ZpZGVyU2NtUmVwb3NpdG9yeSggcGF0aC5nZXRBYnNvbHV0ZVBhdGgoKSwgJzonICk7CiAgICAgfQogCi0gICAgCi0gICAgLyoqCi0gICAgICogVmFsaWRhdGUgdGhlIHNjbSB1cmwuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc2NtU3BlY2lmaWNVcmwgVGhlIFNDTSB1cmwKLSAgICAgKiBAcGFyYW0gZGVsaW1pdGVyICAgICAgVGhlIGRlbGltaXRlciB1c2VkIGluIHRoZSBTQ00gdXJsCi0gICAgICogQHJldHVybiBSZXR1cm5zIGEgbGlzdCBvZiBtZXNzYWdlcyBpZiB0aGUgdmFsaWRhdGlvbiBmYWlsZWQKLSAgICAgKi8gCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgTGlzdCB2YWxpZGF0ZVNjbVVybCggU3RyaW5nIHNjbVNwZWNpZmljVXJsLCBjaGFyIGRlbGltaXRlciApCiAgICAgewogICAgICAgICBIZ1VybFBhcnNlclJlc3VsdCByZXN1bHQgPSBwYXJzZVNjbVVybCggc2NtU3BlY2lmaWNVcmwgKTsKQEAgLTE3OCwxNCArMTc1LDEzIEBACiAgICAgICAgIHJldHVybiByZXN1bHQubWVzc2FnZXM7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNjbVR5cGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuICJoZyI7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI2FkZChvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBBZGRTY21SZXN1bHQgYWRkKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKQEAgLTE5Niw5ICsxOTIsNyBAQAogICAgICAgICByZXR1cm4gKEFkZFNjbVJlc3VsdCkgY29tbWFuZC5leGVjdXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI2NoYW5nZWxvZyhvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGFuZ2VMb2dTY21SZXN1bHQgY2hhbmdlbG9nKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtMjEwLDkgKzIwNCw3IEBACiAgICAgICAgIHJldHVybiAoQ2hhbmdlTG9nU2NtUmVzdWx0KSBjb21tYW5kLmV4ZWN1dGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjY2hlY2tpbihvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGVja0luU2NtUmVzdWx0IGNoZWNraW4oIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTIyNCw5ICsyMTYsNyBAQAogICAgICAgICByZXR1cm4gKENoZWNrSW5TY21SZXN1bHQpIGNvbW1hbmQuZXhlY3V0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciNjaGVja291dChvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGVja091dFNjbVJlc3VsdCBjaGVja291dCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC0yMzgsMTEgKzIyOCw4IEBACiAgICAgICAgIHJldHVybiAoQ2hlY2tPdXRTY21SZXN1bHQpIGNvbW1hbmQuZXhlY3V0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciNjaGVja291dChvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KLSAgICBwdWJsaWMgVGFnU2NtUmVzdWx0IHRhZyggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCisgICAgcHVibGljIFRhZ1NjbVJlc3VsdCB0YWcoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICBIZ1RhZ0NvbW1hbmQgY29tbWFuZCA9IG5ldyBIZ1RhZ0NvbW1hbmQoKTsKQEAgLTI1MiwxMCArMjM5LDcgQEAKICAgICAgICAgcmV0dXJuIChUYWdTY21SZXN1bHQpIGNvbW1hbmQuZXhlY3V0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAotCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI2RpZmYob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgRGlmZlNjbVJlc3VsdCBkaWZmKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKQEAgLTI2NiwxMCArMjUwLDkgQEAKICAgICAgICAgcmV0dXJuIChEaWZmU2NtUmVzdWx0KSBjb21tYW5kLmV4ZWN1dGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjcmVtb3ZlKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLwotICAgIHB1YmxpYyBSZW1vdmVTY21SZXN1bHQgcmVtb3ZlKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLworICAgIHB1YmxpYyBSZW1vdmVTY21SZXN1bHQgcmVtb3ZlKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgSGdSZW1vdmVDb21tYW5kIGNvbW1hbmQgPSBuZXcgSGdSZW1vdmVDb21tYW5kKCk7CkBAIC0yNzksMTAgKzI2Miw5IEBACiAgICAgICAgIHJldHVybiAoUmVtb3ZlU2NtUmVzdWx0KSBjb21tYW5kLmV4ZWN1dGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjc3RhdHVzKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLwotICAgIHB1YmxpYyBTdGF0dXNTY21SZXN1bHQgc3RhdHVzKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLworICAgIHB1YmxpYyBTdGF0dXNTY21SZXN1bHQgc3RhdHVzKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgSGdTdGF0dXNDb21tYW5kIGNvbW1hbmQgPSBuZXcgSGdTdGF0dXNDb21tYW5kKCk7CkBAIC0yOTIsMTAgKzI3NCw5IEBACiAgICAgICAgIHJldHVybiAoU3RhdHVzU2NtUmVzdWx0KSBjb21tYW5kLmV4ZWN1dGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjdXBkYXRlKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLwotICAgIHB1YmxpYyBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLworICAgIHB1YmxpYyBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgSGdVcGRhdGVDb21tYW5kIGNvbW1hbmQgPSBuZXcgSGdVcGRhdGVDb21tYW5kKCk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL0hnVXRpbHMuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvSGdVdGlscy5qYXZhCmluZGV4IDg3YmIxMjEuLjMzZDAzNmEgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvSGdVdGlscy5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvSGdVdGlscy5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtUmVzdWx0OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5EZWZhdWx0TG9nOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5IZ0NvbW1hbmQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5IZ0NvbW1hbmRDb25zdGFudHM7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5IZ0NvbnN1bWVyOwogaW1wb3J0IG9yZy5jb2RlaGF1cy5wbGV4dXMudXRpbC5jbGkuQ29tbWFuZExpbmVFeGNlcHRpb247CiBpbXBvcnQgb3JnLmNvZGVoYXVzLnBsZXh1cy51dGlsLmNsaS5Db21tYW5kTGluZVV0aWxzOwpAQCAtNDIsMzAgKzQyLDMxIEBACiAgKiBDb21tb24gY29kZSBmb3IgZXhlY3V0aW5nIGhnIGNvbW1hbmRzLgogICoKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRodXJuZXIucnVwZXJ0QHltb25vLm5ldCI+dGh1cm5lciBydXBlcnQ8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBIZ1V0aWxzCiB7CiAgICAgLyoqCiAgICAgICogTWFwIGJldHdlZW4gY29tbWFuZCBhbmQgaXRzIHZhbGlkIGV4aXQgY29kZXMKICAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXAgZXhpdENvZGVNYXAgPSBuZXcgSGFzaE1hcCgpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE1hcCBFWElUX0NPREVfTUFQID0gbmV3IEhhc2hNYXAoKTsKIAogICAgIC8qKgogICAgICAqIERlZmF1bHQgZXhpdCBjb2RlcyBmb3IgZW50cmllcyBub3QgaW4gZXhpdENvZGVNYXAKICAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMaXN0IGRlZmF1bHRFeGl0Q29kZXMgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTGlzdCBERUZBVUxUX0VYSVRfQ09ERVMgPSBuZXcgQXJyYXlMaXN0KCk7CiAKICAgICAvKiogU2V0dXAgZXhpdCBjb2RlcyovCiAgICAgc3RhdGljCiAgICAgewotICAgICAgICBkZWZhdWx0RXhpdENvZGVzLmFkZCggbmV3IEludGVnZXIoIDAgKSApOworICAgICAgICBERUZBVUxUX0VYSVRfQ09ERVMuYWRkKCBuZXcgSW50ZWdlciggMCApICk7CiAKICAgICAgICAgLy9EaWZmIGlzIGRpZmZlcmVudAogICAgICAgICBMaXN0IGRpZmZFeGl0Q29kZXMgPSBuZXcgQXJyYXlMaXN0KCk7CiAgICAgICAgIGRpZmZFeGl0Q29kZXMuYWRkKCBuZXcgSW50ZWdlciggMCApICk7IC8vTm8gZGlmZmVyZW5jZQogICAgICAgICBkaWZmRXhpdENvZGVzLmFkZCggbmV3IEludGVnZXIoIDEgKSApOyAvL0NvbmZsaWN0cyBpbiBtZXJnZS1saWtlIG9yIGNoYW5nZXMgaW4gZGlmZi1saWtlCiAgICAgICAgIGRpZmZFeGl0Q29kZXMuYWRkKCBuZXcgSW50ZWdlciggMiApICk7IC8vVW5yZXByZXNlbnRhYmxlIGRpZmYgY2hhbmdlcwotICAgICAgICBleGl0Q29kZU1hcC5wdXQoIEhnQ29tbWFuZC5ESUZGX0NNRCwgZGlmZkV4aXRDb2RlcyApOworICAgICAgICBFWElUX0NPREVfTUFQLnB1dCggSGdDb21tYW5kQ29uc3RhbnRzLkRJRkZfQ01ELCBkaWZmRXhpdENvZGVzICk7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyBTY21SZXN1bHQgZXhlY3V0ZSggSGdDb25zdW1lciBjb25zdW1lciwgU2NtTG9nZ2VyIGxvZ2dlciwgRmlsZSB3b3JraW5nRGlyLCBTdHJpbmdbXSBjbWRBbmRBcmdzICkKQEAgLTgxLDEwICs4MiwxMCBAQAogICAgICAgICAgICAgaW50IGV4aXRDb2RlID0gZXhlY3V0ZUNtZCggY29uc3VtZXIsIGNtZCApOwogCiAgICAgICAgICAgICAvL1JldHVybiByZXN1bHQKLSAgICAgICAgICAgIExpc3QgZXhpdENvZGVzID0gZGVmYXVsdEV4aXRDb2RlczsKLSAgICAgICAgICAgIGlmICggZXhpdENvZGVNYXAuY29udGFpbnNLZXkoIGNtZEFuZEFyZ3NbMF0gKSApCisgICAgICAgICAgICBMaXN0IGV4aXRDb2RlcyA9IERFRkFVTFRfRVhJVF9DT0RFUzsKKyAgICAgICAgICAgIGlmICggRVhJVF9DT0RFX01BUC5jb250YWluc0tleSggY21kQW5kQXJnc1swXSApICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBleGl0Q29kZXMgPSAoTGlzdCkgZXhpdENvZGVNYXAuZ2V0KCBjbWRBbmRBcmdzWzBdICk7CisgICAgICAgICAgICAgICAgZXhpdENvZGVzID0gKExpc3QpIEVYSVRfQ09ERV9NQVAuZ2V0KCBjbWRBbmRBcmdzWzBdICk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBleGl0Q29kZXMuY29udGFpbnMoIG5ldyBJbnRlZ2VyKCBleGl0Q29kZSApICk7CiAKQEAgLTkzLDkgKzk0LDEwIEBACiAgICAgICAgICAgICBpZiAoICFzdWNjZXNzICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBIZ0NvbmZpZyBjb25maWcgPSBuZXcgSGdDb25maWcoIHdvcmtpbmdEaXIgKTsKLSAgICAgICAgICAgICAgICBwcm92aWRlck1zZyA9ICJcbkVYRUNVVElPTiBGQUlMRUQiICsgIlxuICBFeGVjdXRpb24gb2YgY21kIDogIiArIGNtZEFuZEFyZ3NbMF0gKwotICAgICAgICAgICAgICAgICAgICAiIGZhaWxlZCB3aXRoIGV4aXQgY29kZTogIiArIGV4aXRDb2RlICsgIi4iICsgIlxuICBXb3JraW5nIGRpcmVjdG9yeSB3YXM6ICIgKyAiXG4gICAgIiArCi0gICAgICAgICAgICAgICAgICAgIHdvcmtpbmdEaXIuZ2V0QWJzb2x1dGVQYXRoKCkgKyBjb25maWcudG9TdHJpbmcoIHdvcmtpbmdEaXIgKSArICJcbiI7CisgICAgICAgICAgICAgICAgcHJvdmlkZXJNc2cgPQorICAgICAgICAgICAgICAgICAgICAiXG5FWEVDVVRJT04gRkFJTEVEIiArICJcbiAgRXhlY3V0aW9uIG9mIGNtZCA6ICIgKyBjbWRBbmRBcmdzWzBdICsgIiBmYWlsZWQgd2l0aCBleGl0IGNvZGU6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgZXhpdENvZGUgKyAiLiIgKyAiXG4gIFdvcmtpbmcgZGlyZWN0b3J5IHdhczogIiArICJcbiAgICAiICsgd29ya2luZ0Rpci5nZXRBYnNvbHV0ZVBhdGgoKQorICAgICAgICAgICAgICAgICAgICAgICAgKyBjb25maWcudG9TdHJpbmcoIHdvcmtpbmdEaXIgKSArICJcbiI7CiAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCBwcm92aWRlck1zZyApOwogICAgICAgICAgICAgfQogCkBAIC0xMDMsOCArMTA1LDkgQEAKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoIFNjbUV4Y2VwdGlvbiBzZSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBtc2cgPSAiRVhFQ1VUSU9OIEZBSUxFRCIgKyAiXG4gIEV4ZWN1dGlvbiBmYWlsZWQgYmVmb3JlIGludm9raW5nIHRoZSBIZyBjb21tYW5kLiBMYXN0IGV4Y2VwdGlvbjoiICsKLSAgICAgICAgICAgICAgICAiXG4gICAgIiArIHNlLmdldE1lc3NhZ2UoKTsKKyAgICAgICAgICAgIFN0cmluZyBtc2cgPQorICAgICAgICAgICAgICAgICJFWEVDVVRJT04gRkFJTEVEIiArICJcbiAgRXhlY3V0aW9uIGZhaWxlZCBiZWZvcmUgaW52b2tpbmcgdGhlIEhnIGNvbW1hbmQuIExhc3QgZXhjZXB0aW9uOiIKKyAgICAgICAgICAgICAgICAgICAgKyAiXG4gICAgIiArIHNlLmdldE1lc3NhZ2UoKTsKIAogICAgICAgICAgICAgLy9BZGQgbmVzdGVkIGNhdXNlIGlmIGFueQogICAgICAgICAgICAgaWYgKCBzZS5nZXRDYXVzZSgpICE9IG51bGwgKQpAQCAtMTIyLDcgKzEyNSw3IEBACiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIENvbW1hbmRsaW5lIGNtZCA9IG5ldyBDb21tYW5kbGluZSgpOwotICAgICAgICBjbWQuc2V0RXhlY3V0YWJsZSggSGdDb21tYW5kLkVYRUMgKTsKKyAgICAgICAgY21kLnNldEV4ZWN1dGFibGUoIEhnQ29tbWFuZENvbnN0YW50cy5FWEVDICk7CiAgICAgICAgIGNtZC5zZXRXb3JraW5nRGlyZWN0b3J5KCB3b3JraW5nRGlyLmdldEFic29sdXRlUGF0aCgpICk7CiAgICAgICAgIGNtZC5hZGRBcmd1bWVudHMoIGNtZEFuZEFyZ3MgKTsKIApAQCAtMTg1LDcgKzE4OCw3IEBACiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAKLSAgICAgICAgU3RyaW5nW10gcmV2Q21kID0gbmV3IFN0cmluZ1tde0hnQ29tbWFuZC5SRVZOT19DTUR9OworICAgICAgICBTdHJpbmdbXSByZXZDbWQgPSBuZXcgU3RyaW5nW117SGdDb21tYW5kQ29uc3RhbnRzLlJFVk5PX0NNRH07CiAgICAgICAgIEhnUmV2Tm9Db25zdW1lciBjb25zdW1lciA9IG5ldyBIZ1Jldk5vQ29uc3VtZXIoIGxvZ2dlciApOwogICAgICAgICBIZ1V0aWxzLmV4ZWN1dGUoIGNvbnN1bWVyLCBsb2dnZXIsIHdvcmtpbmdEaXIsIHJldkNtZCApOwogCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvSGdDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvSGdDb21tYW5kQ29uc3RhbnRzLmphdmEKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL0hnQ29tbWFuZC5qYXZhCnJlbmFtZSB0byBtYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvSGdDb21tYW5kQ29uc3RhbnRzLmphdmEKaW5kZXggYmZjMmJiYy4uN2I0ZjRkNiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL0hnQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9IZ0NvbW1hbmRDb25zdGFudHMuamF2YQpAQCAtMTksNyArMTksNiBAQAogICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuQ29tbWFuZDsKIAogLyoqCiAgKiBBdmFpbGFibGUvVXNlZCBoZyBjb21tYW5kcy4KQEAgLTI4LDkgKzI3LDkgQEAKICAqIEVnLiAiY2hlY2sgaW4iIGlzIHRyYW5zbGF0ZWQgdG8gYmUgImNvbW1pdCIgYW5kICJwdXNoIi4KICAqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0aHVybmVyLnJ1cGVydEB5bW9uby5uZXQiPnRodXJuZXIgcnVwZXJ0PC9hPgorICogQHZlcnNpb24gJElkJAogICovCi1wdWJsaWMgaW50ZXJmYWNlIEhnQ29tbWFuZAotICAgIGV4dGVuZHMgQ29tbWFuZAorcHVibGljIGNsYXNzIEhnQ29tbWFuZENvbnN0YW50cwogewogICAgIC8qKgogICAgICAqIEV4ZWN1dGFibGUgZm9yIEhnCkBAIC0xMTYsNSArMTE1LDYgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWRVJTSU9OID0gInZlcnNpb24iOwogCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0hFQ0sgPSAiY2hlY2siOwotICAgIFN0cmluZyBBTExfT1BUSU9OID0gIi1BIjsKKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBTExfT1BUSU9OID0gIi1BIjsKIH0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9IZ0NvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvSGdDb25zdW1lci5qYXZhCmluZGV4IDEzYjc4OGEuLmQxMmYxNjAgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9IZ0NvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL0hnQ29uc3VtZXIuamF2YQpAQCAtMzYsNiArMzYsNyBAQAogICogYW5kIGRldGVjdCB3YXJuaW5ncyBmcm9tIGhnCiAgKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86dGh1cm5lci5ydXBlcnRAeW1vbm8ubmV0Ij50aHVybmVyIHJ1cGVydDwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEhnQ29uc3VtZXIKICAgICBleHRlbmRzIEFic3RyYWN0Q29uc3VtZXIKQEAgLTQ0LDEyICs0NSwxMiBAQAogICAgIC8qKgogICAgICAqIEEgbGlzdCBvZiBrbm93biBrZXl3b3JkcyBmcm9tIGhnCiAgICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFwIGlkZW50aWZpZXJzID0gbmV3IEhhc2hNYXAoKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXAgSURFTlRJRklFUlMgPSBuZXcgSGFzaE1hcCgpOwogCiAgICAgLyoqCiAgICAgICogQSBsaXN0IG9mIGtub3duIG1lc3NhZ2UgcHJlZml4ZXMgZnJvbSBoZwogICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE1hcCBtZXNzYWdlcyA9IG5ldyBIYXNoTWFwKCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFwIE1FU1NBR0VTID0gbmV3IEhhc2hNYXAoKTsKIAogICAgIC8qKgogICAgICAqIE51bWJlciBvZiBsaW5lcyB0byBrZWVwIGZyb20gU3RkLkVycgpAQCAtNjcsMjUgKzY4LDI1IEBACiAgICAgewogICAgICAgICAvKiogU3RhdHVzZXMgZnJvbSBoZyBhZGQKICAgICAgICAgICovCi0gICAgICAgIGlkZW50aWZpZXJzLnB1dCggImFkZGluZyIsIFNjbUZpbGVTdGF0dXMuQURERUQgKTsKLSAgICAgICAgaWRlbnRpZmllcnMucHV0KCAidW5rbm93biIsIFNjbUZpbGVTdGF0dXMuVU5LTk9XTiApOwotICAgICAgICBpZGVudGlmaWVycy5wdXQoICJtb2RpZmllZCIsIFNjbUZpbGVTdGF0dXMuTU9ESUZJRUQgKTsKLSAgICAgICAgaWRlbnRpZmllcnMucHV0KCAicmVtb3ZlZCIsIFNjbUZpbGVTdGF0dXMuREVMRVRFRCApOwotICAgICAgICBpZGVudGlmaWVycy5wdXQoICJyZW5hbWVkIiwgU2NtRmlsZVN0YXR1cy5NT0RJRklFRCApOworICAgICAgICBJREVOVElGSUVSUy5wdXQoICJhZGRpbmciLCBTY21GaWxlU3RhdHVzLkFEREVEICk7CisgICAgICAgIElERU5USUZJRVJTLnB1dCggInVua25vd24iLCBTY21GaWxlU3RhdHVzLlVOS05PV04gKTsKKyAgICAgICAgSURFTlRJRklFUlMucHV0KCAibW9kaWZpZWQiLCBTY21GaWxlU3RhdHVzLk1PRElGSUVEICk7CisgICAgICAgIElERU5USUZJRVJTLnB1dCggInJlbW92ZWQiLCBTY21GaWxlU3RhdHVzLkRFTEVURUQgKTsKKyAgICAgICAgSURFTlRJRklFUlMucHV0KCAicmVuYW1lZCIsIFNjbUZpbGVTdGF0dXMuTU9ESUZJRUQgKTsKIAogICAgICAgICAvKiogU3RhdHVzZXMgZnJvbSBoZyBzdGF0dXM7CiAgICAgICAgICAqLwotICAgICAgICBpZGVudGlmaWVycy5wdXQoICJBIiwgU2NtRmlsZVN0YXR1cy5BRERFRCApOwotICAgICAgICBpZGVudGlmaWVycy5wdXQoICI/IiwgU2NtRmlsZVN0YXR1cy5VTktOT1dOICk7Ci0gICAgICAgIGlkZW50aWZpZXJzLnB1dCggIk0iLCBTY21GaWxlU3RhdHVzLk1PRElGSUVEICk7Ci0gICAgICAgIGlkZW50aWZpZXJzLnB1dCggIlIiLCBTY21GaWxlU3RhdHVzLkRFTEVURUQgKTsKLSAgICAgICAgaWRlbnRpZmllcnMucHV0KCAiQyIsIFNjbUZpbGVTdGF0dXMuQ0hFQ0tFRF9JTiApOwotICAgICAgICBpZGVudGlmaWVycy5wdXQoICIhIiwgU2NtRmlsZVN0YXR1cy5NSVNTSU5HICk7Ci0gICAgICAgIGlkZW50aWZpZXJzLnB1dCggIkkiLCBTY21GaWxlU3RhdHVzLlVOS05PV04gKTsgLy8gbm90IHByZWNpc2VseSB0aGUgc2FtZSwgYnV0IGkgdGhpbmsgc2VtYW50aWNzIHdvcms/IC0gcndkCisgICAgICAgIElERU5USUZJRVJTLnB1dCggIkEiLCBTY21GaWxlU3RhdHVzLkFEREVEICk7CisgICAgICAgIElERU5USUZJRVJTLnB1dCggIj8iLCBTY21GaWxlU3RhdHVzLlVOS05PV04gKTsKKyAgICAgICAgSURFTlRJRklFUlMucHV0KCAiTSIsIFNjbUZpbGVTdGF0dXMuTU9ESUZJRUQgKTsKKyAgICAgICAgSURFTlRJRklFUlMucHV0KCAiUiIsIFNjbUZpbGVTdGF0dXMuREVMRVRFRCApOworICAgICAgICBJREVOVElGSUVSUy5wdXQoICJDIiwgU2NtRmlsZVN0YXR1cy5DSEVDS0VEX0lOICk7CisgICAgICAgIElERU5USUZJRVJTLnB1dCggIiEiLCBTY21GaWxlU3RhdHVzLk1JU1NJTkcgKTsKKyAgICAgICAgSURFTlRJRklFUlMucHV0KCAiSSIsIFNjbUZpbGVTdGF0dXMuVU5LTk9XTiApOyAvLyBub3QgcHJlY2lzZWx5IHRoZSBzYW1lLCBidXQgaSB0aGluayBzZW1hbnRpY3Mgd29yaz8gLSByd2QKIAotICAgICAgICBtZXNzYWdlcy5wdXQoICJoZzogV0FSTklORzoiLCAiV0FSTklORyIgKTsKLSAgICAgICAgbWVzc2FnZXMucHV0KCAiaGc6IEVSUk9SOiIsICJFUlJPUiIgKTsKLSAgICAgICAgbWVzc2FnZXMucHV0KCAiJ2hnJyAiLCAiRVJST1IiICk7IC8vIGhnIGlzbid0IGZvdW5kIGluIHdpbmRvd3MgcGF0aAorICAgICAgICBNRVNTQUdFUy5wdXQoICJoZzogV0FSTklORzoiLCAiV0FSTklORyIgKTsKKyAgICAgICAgTUVTU0FHRVMucHV0KCAiaGc6IEVSUk9SOiIsICJFUlJPUiIgKTsKKyAgICAgICAgTUVTU0FHRVMucHV0KCAiJ2hnJyAiLCAiRVJST1IiICk7IC8vIGhnIGlzbid0IGZvdW5kIGluIHdpbmRvd3MgcGF0aAogICAgIH0KIAogICAgIHB1YmxpYyBIZ0NvbnN1bWVyKCBTY21Mb2dnZXIgbG9nZ2VyICkKQEAgLTk4LDYgKzk5LDcgQEAKICAgICAgICAgLy9vdmVycmlkZSB0aGlzCiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgZ2V0TG9nZ2VyKCkuZGVidWcoIGxpbmUgKTsKQEAgLTEyMiw3ICsxMjQsNyBAQAogICAgICAgICAgICAgdHJpbW1lZExpbmUgPSB0cmltbWVkTGluZS50cmltKCk7IC8vb25lIG9yIG1vcmUgc3BhY2VzCiAgICAgICAgIH0KIAotICAgICAgICBTY21GaWxlU3RhdHVzIHN0YXR1cyA9IHN0YXR1c1N0ciAhPSBudWxsID8gKCAoU2NtRmlsZVN0YXR1cykgaWRlbnRpZmllcnMuZ2V0KCBzdGF0dXNTdHIuaW50ZXJuKCkgKSApIDogbnVsbDsKKyAgICAgICAgU2NtRmlsZVN0YXR1cyBzdGF0dXMgPSBzdGF0dXNTdHIgIT0gbnVsbCA/ICggKFNjbUZpbGVTdGF0dXMpIElERU5USUZJRVJTLmdldCggc3RhdHVzU3RyLmludGVybigpICkgKSA6IG51bGw7CiAgICAgICAgIGRvQ29uc3VtZSggc3RhdHVzLCB0cmltbWVkTGluZSApOwogICAgIH0KIApAQCAtMTQ0LDcgKzE0Niw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcHJvY2Vzc0lucHV0Rm9yS25vd25JZGVudGlmaWVycyggU3RyaW5nIGxpbmUgKQogICAgIHsKLSAgICAgICAgZm9yICggSXRlcmF0b3IgaXQgPSBpZGVudGlmaWVycy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkKKyAgICAgICAgZm9yICggSXRlcmF0b3IgaXQgPSBJREVOVElGSUVSUy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkKICAgICAgICAgewogICAgICAgICAgICAgU3RyaW5nIGlkID0gKFN0cmluZykgaXQubmV4dCgpOwogICAgICAgICAgICAgaWYgKCBsaW5lLnN0YXJ0c1dpdGgoIGlkICkgKQpAQCAtMTU3LDcgKzE1OSw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0lucHV0Rm9yS25vd25NZXNzYWdlcyggU3RyaW5nIGxpbmUgKQogICAgIHsKLSAgICAgICAgZm9yICggSXRlcmF0b3IgaXQgPSBtZXNzYWdlcy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkKKyAgICAgICAgZm9yICggSXRlcmF0b3IgaXQgPSBNRVNTQUdFUy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkKICAgICAgICAgewogICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IChTdHJpbmcpIGl0Lm5leHQoKTsKICAgICAgICAgICAgIGlmICggbGluZS5zdGFydHNXaXRoKCBwcmVmaXggKSApCkBAIC0xNjgsNyArMTcwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgc3RkZXJyLnJlbW92ZSggMCApOyAvL1JvdGF0ZSBsaXN0CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gbGluZS5zdWJzdHJpbmcoIHByZWZpeC5sZW5ndGgoKSApOwotICAgICAgICAgICAgICAgIGlmICggbWVzc2FnZXMuZ2V0KCBwcmVmaXggKS5lcXVhbHMoICJXQVJOSU5HIiApICkKKyAgICAgICAgICAgICAgICBpZiAoIE1FU1NBR0VTLmdldCggcHJlZml4ICkuZXF1YWxzKCAiV0FSTklORyIgKSApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53YXJuKCBtZXNzYWdlICk7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL2FkZC9IZ0FkZENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9hZGQvSGdBZGRDb21tYW5kLmphdmEKaW5kZXggZWQ3OGZjYS4uZThiODMxMiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL2FkZC9IZ0FkZENvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvYWRkL0hnQWRkQ29tbWFuZC5qYXZhCkBAIC0xOSwzMyArMTksMzYgQEAKICAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtUmVzdWx0OworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuQ29tbWFuZDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLmFkZC5BYnN0cmFjdEFkZENvbW1hbmQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC5hZGQuQWRkU2NtUmVzdWx0OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5IZ1V0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmhnLmNvbW1hbmQuSGdDb21tYW5kOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5jb21tYW5kLkhnQ29tbWFuZENvbnN0YW50czsKIAogLyoqCiAgKiBBZGQgbm8gcmVjdXJzaXZlLgogICoKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRodXJuZXIucnVwZXJ0QHltb25vLm5ldCI+dGh1cm5lciBydXBlcnQ8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBIZ0FkZENvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0QWRkQ29tbWFuZAotICAgIGltcGxlbWVudHMgSGdDb21tYW5kCisgICAgaW1wbGVtZW50cyBDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU2NtUmVzdWx0IGV4ZWN1dGVBZGRDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGJpbmFyeSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIC8vU3RyaW5nW10gYWRkQ21kID0gbmV3IFN0cmluZ1tdIHsgQUREX0NNRCwgTk9fUkVDVVJTRV9PUFRJT04gfTsKLSAgICAgICAgU3RyaW5nW10gYWRkQ21kID0gbmV3IFN0cmluZ1tde0FERF9DTUQsIFZFUkJPU0VfT1BUSU9OfTsKKyAgICAgICAgU3RyaW5nW10gYWRkQ21kID0gbmV3IFN0cmluZ1tdIHsgSGdDb21tYW5kQ29uc3RhbnRzLkFERF9DTUQsIEhnQ29tbWFuZENvbnN0YW50cy5WRVJCT1NFX09QVElPTiB9OwogICAgICAgICBhZGRDbWQgPSBIZ1V0aWxzLmV4cGFuZENvbW1hbmRMaW5lKCBhZGRDbWQsIGZpbGVTZXQgKTsKIAogICAgICAgICBGaWxlIHdvcmtpbmdEaXIgPSBmaWxlU2V0LmdldEJhc2VkaXIoKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9hZGQvSGdBZGRDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL2FkZC9IZ0FkZENvbnN1bWVyLmphdmEKaW5kZXggNGY2ZDZkMC4uMzRlYTVmMCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL2FkZC9IZ0FkZENvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL2FkZC9IZ0FkZENvbnN1bWVyLmphdmEKQEAgLTMwLDYgKzMwLDcgQEAKIAogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0aHVybmVyLnJ1cGVydEB5bW9uby5uZXQiPnRodXJuZXIgcnVwZXJ0PC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgSGdBZGRDb25zdW1lcgogICAgIGV4dGVuZHMgSGdDb25zdW1lcgpAQCAtNDQsNiArNDUsNyBAQAogICAgICAgICB0aGlzLndvcmtpbmdEaXIgPSB3b3JraW5nRGlyOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgZG9Db25zdW1lKCBTY21GaWxlU3RhdHVzIHN0YXR1cywgU3RyaW5nIHRyaW1tZWRMaW5lICkKICAgICB7CiAgICAgICAgIGlmICggc3RhdHVzICE9IG51bGwgJiYgc3RhdHVzID09IFNjbUZpbGVTdGF0dXMuQURERUQgKQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL2NoYW5nZWxvZy9IZ0NoYW5nZUxvZ0NvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9jaGFuZ2Vsb2cvSGdDaGFuZ2VMb2dDb21tYW5kLmphdmEKaW5kZXggOTA0Y2U2Ny4uNTYxM2VjOCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL2NoYW5nZWxvZy9IZ0NoYW5nZUxvZ0NvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvY2hhbmdlbG9nL0hnQ2hhbmdlTG9nQ29tbWFuZC5qYXZhCkBAIC0yNCwxMiArMjQsMTMgQEAKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21FeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21SZXN1bHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC5Db21tYW5kOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuY2hhbmdlbG9nLkFic3RyYWN0Q2hhbmdlTG9nQ29tbWFuZDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLmNoYW5nZWxvZy5DaGFuZ2VMb2dTY21SZXN1bHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC5jaGFuZ2Vsb2cuQ2hhbmdlTG9nU2V0OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5IZ1V0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmhnLmNvbW1hbmQuSGdDb21tYW5kOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmhnLmNvbW1hbmQuSGdDb21tYW5kQ29uc3RhbnRzOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKQEAgLTM4LDI1ICszOSwyNiBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRodXJuZXIucnVwZXJ0QHltb25vLm5ldCI+dGh1cm5lciBydXBlcnQ8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBIZ0NoYW5nZUxvZ0NvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0Q2hhbmdlTG9nQ29tbWFuZAotICAgIGltcGxlbWVudHMgSGdDb21tYW5kCisgICAgaW1wbGVtZW50cyBDb21tYW5kCiB7Ci0KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDaGFuZ2VMb2dTY21SZXN1bHQgZXhlY3V0ZUNoYW5nZUxvZ0NvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSBzY21Qcm92aWRlclJlcG9zaXRvcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtRmlsZVNldCBmaWxlU2V0LCBEYXRlIHN0YXJ0RGF0ZSwgRGF0ZSBlbmREYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbUJyYW5jaCBicmFuY2gsIFN0cmluZyBkYXRlUGF0dGVybiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7Ci0gICAgICAgIFN0cmluZ1tdIGNtZCA9IG5ldyBTdHJpbmdbXXtMT0dfQ01ELCBWRVJCT1NFX09QVElPTn07CisgICAgICAgIFN0cmluZ1tdIGNtZCA9IG5ldyBTdHJpbmdbXSB7IEhnQ29tbWFuZENvbnN0YW50cy5MT0dfQ01ELCBIZ0NvbW1hbmRDb25zdGFudHMuVkVSQk9TRV9PUFRJT04gfTsKICAgICAgICAgSGdDaGFuZ2VMb2dDb25zdW1lciBjb25zdW1lciA9IG5ldyBIZ0NoYW5nZUxvZ0NvbnN1bWVyKCBnZXRMb2dnZXIoKSwgZGF0ZVBhdHRlcm4gKTsKICAgICAgICAgU2NtUmVzdWx0IHJlc3VsdCA9IEhnVXRpbHMuZXhlY3V0ZSggY29uc3VtZXIsIGdldExvZ2dlcigpLCBmaWxlU2V0LmdldEJhc2VkaXIoKSwgY21kICk7CiAKICAgICAgICAgTGlzdCBsb2dFbnRyaWVzID0gY29uc3VtZXIuZ2V0TW9kaWZpY2F0aW9ucygpOwogICAgICAgICBMaXN0IGluUmFuZ2VBbmRWYWxpZCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgc3RhcnREYXRlID0gc3RhcnREYXRlID09IG51bGwgPyBuZXcgRGF0ZSggMCApIDogc3RhcnREYXRlOy8vRnJvbSAxLiBKYW4gMTk3MAotICAgICAgICBlbmREYXRlID0gZW5kRGF0ZSA9PSBudWxsID8gbmV3IERhdGUoKSA6IGVuZERhdGU7Ly9VcHRvIG5vdworICAgICAgICBzdGFydERhdGUgPSBzdGFydERhdGUgPT0gbnVsbCA/IG5ldyBEYXRlKCAwICkgOiBzdGFydERhdGU7IC8vIEZyb20gMS4gSmFuIDE5NzAKKyAgICAgICAgZW5kRGF0ZSA9IGVuZERhdGUgPT0gbnVsbCA/IG5ldyBEYXRlKCkgOiBlbmREYXRlOyAvLyBVcHRvIG5vdwogCiAgICAgICAgIGZvciAoIEl0ZXJhdG9yIGl0ID0gbG9nRW50cmllcy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL2NoYW5nZWxvZy9IZ0NoYW5nZUxvZ0NvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvY2hhbmdlbG9nL0hnQ2hhbmdlTG9nQ29uc3VtZXIuamF2YQppbmRleCBhZTUyMTk0Li5mYjQwY2Q1IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvY2hhbmdlbG9nL0hnQ2hhbmdlTG9nQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvY2hhbmdlbG9nL0hnQ2hhbmdlTG9nQ29uc3VtZXIuamF2YQpAQCAtMzIsNiArMzIsNyBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRodXJuZXIucnVwZXJ0QHltb25vLm5ldCI+dGh1cm5lciBydXBlcnQ8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBIZ0NoYW5nZUxvZ0NvbnN1bWVyCiAgICAgZXh0ZW5kcyBIZ0NvbnN1bWVyCkBAIC04Nyw2ICs4OCw3IEBACiAgICAgICAgIHJldHVybiBsb2dFbnRyaWVzOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgY29uc3VtZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7CiAKQEAgLTk1LDYgKzk3LDcgQEAKICAgICAgICAgZG9Db25zdW1lKCBudWxsLCBsaW5lICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBkb0NvbnN1bWUoIFNjbUZpbGVTdGF0dXMgc3RhdHVzLCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBTdHJpbmcgdG1wTGluZSA9IGxpbmU7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvY2hlY2tpbi9IZ0NoZWNrSW5Db21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvY2hlY2tpbi9IZ0NoZWNrSW5Db21tYW5kLmphdmEKaW5kZXggYmI3MGY3Yy4uN2IxNWRlNiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL2NoZWNraW4vSGdDaGVja0luQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9jaGVja2luL0hnQ2hlY2tJbkNvbW1hbmQuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuc3RhdHVzLlN0YXR1c1NjbVJlc3VsdDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuSGdVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5jb21tYW5kLkhnQ29tbWFuZDsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5jb21tYW5kLkhnQ29tbWFuZENvbnN0YW50czsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5jb21tYW5kLkhnQ29uc3VtZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5zdGF0dXMuSGdTdGF0dXNDb21tYW5kOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmhnLnJlcG9zaXRvcnkuSGdTY21Qcm92aWRlclJlcG9zaXRvcnk7CkBAIC00MywxMSArNDMsMTIgQEAKIAogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0aHVybmVyLnJ1cGVydEB5bW9uby5uZXQiPnRodXJuZXIgcnVwZXJ0PC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgSGdDaGVja0luQ29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RDaGVja0luQ29tbWFuZAogewotCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hlY2tJblNjbVJlc3VsdCBleGVjdXRlQ2hlY2tJbkNvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvLCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyBtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiB0YWcgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC02OSw4ICs3MCw4IEBACiAgICAgICAgICAgICBmb3IgKCBJdGVyYXRvciBpdCA9IHN0YXR1c0ZpbGVzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTsgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFNjbUZpbGUgZmlsZSA9IChTY21GaWxlKSBpdC5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCBmaWxlLmdldFN0YXR1cygpID09IFNjbUZpbGVTdGF0dXMuQURERUQgfHwgZmlsZS5nZXRTdGF0dXMoKSA9PSBTY21GaWxlU3RhdHVzLkRFTEVURUQgfHwKLSAgICAgICAgICAgICAgICAgICAgZmlsZS5nZXRTdGF0dXMoKSA9PSBTY21GaWxlU3RhdHVzLk1PRElGSUVEICkKKyAgICAgICAgICAgICAgICBpZiAoIGZpbGUuZ2V0U3RhdHVzKCkgPT0gU2NtRmlsZVN0YXR1cy5BRERFRCB8fCBmaWxlLmdldFN0YXR1cygpID09IFNjbUZpbGVTdGF0dXMuREVMRVRFRAorICAgICAgICAgICAgICAgICAgICB8fCBmaWxlLmdldFN0YXR1cygpID09IFNjbUZpbGVTdGF0dXMuTU9ESUZJRUQgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgY29tbWl0ZWRGaWxlcy5hZGQoIG5ldyBTY21GaWxlKCBmaWxlLmdldFBhdGgoKSwgU2NtRmlsZVN0YXR1cy5DSEVDS0VEX0lOICkgKTsKICAgICAgICAgICAgICAgICB9CkBAIC04Niw3ICs4Nyw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvLyBDb21taXQgdG8gbG9jYWwgYnJhbmNoCi0gICAgICAgIFN0cmluZ1tdIGNvbW1pdENtZCA9IG5ldyBTdHJpbmdbXXtIZ0NvbW1hbmQuQ09NTUlUX0NNRCwgSGdDb21tYW5kLk1FU1NBR0VfT1BUSU9OLCBtZXNzYWdlfTsKKyAgICAgICAgU3RyaW5nW10gY29tbWl0Q21kID0gbmV3IFN0cmluZ1tde0hnQ29tbWFuZENvbnN0YW50cy5DT01NSVRfQ01ELCBIZ0NvbW1hbmRDb25zdGFudHMuTUVTU0FHRV9PUFRJT04sIG1lc3NhZ2V9OwogICAgICAgICBjb21taXRDbWQgPSBIZ1V0aWxzLmV4cGFuZENvbW1hbmRMaW5lKCBjb21taXRDbWQsIGZpbGVTZXQgKTsKICAgICAgICAgU2NtUmVzdWx0IHJlc3VsdCA9CiAgICAgICAgICAgICBIZ1V0aWxzLmV4ZWN1dGUoIG5ldyBIZ0NvbnN1bWVyKCBnZXRMb2dnZXIoKSApLCBnZXRMb2dnZXIoKSwgZmlsZVNldC5nZXRCYXNlZGlyKCksIGNvbW1pdENtZCApOwpAQCAtOTUsOCArOTYsOCBAQAogICAgICAgICBIZ1NjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5ID0gKEhnU2NtUHJvdmlkZXJSZXBvc2l0b3J5KSByZXBvOwogICAgICAgICBpZiAoICFyZXBvc2l0b3J5LmdldFVSSSgpLmVxdWFscyggZmlsZVNldC5nZXRCYXNlZGlyKCkuZ2V0QWJzb2x1dGVQYXRoKCkgKSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZ1tdIHB1c2hfY21kID0gbmV3IFN0cmluZ1tde0hnQ29tbWFuZC5QVVNIX0NNRCwgcmVwb3NpdG9yeS5nZXRVUkkoKX07Ci0gICAgICAgICAgICByZXN1bHQgPSBIZ1V0aWxzLmV4ZWN1dGUoIG5ldyBIZ0NvbnN1bWVyKCBnZXRMb2dnZXIoKSApLCBnZXRMb2dnZXIoKSwgZmlsZVNldC5nZXRCYXNlZGlyKCksIHB1c2hfY21kICk7CisgICAgICAgICAgICBTdHJpbmdbXSBwdXNoQ21kID0gbmV3IFN0cmluZ1tde0hnQ29tbWFuZENvbnN0YW50cy5QVVNIX0NNRCwgcmVwb3NpdG9yeS5nZXRVUkkoKX07CisgICAgICAgICAgICByZXN1bHQgPSBIZ1V0aWxzLmV4ZWN1dGUoIG5ldyBIZ0NvbnN1bWVyKCBnZXRMb2dnZXIoKSApLCBnZXRMb2dnZXIoKSwgZmlsZVNldC5nZXRCYXNlZGlyKCksIHB1c2hDbWQgKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBuZXcgQ2hlY2tJblNjbVJlc3VsdCggY29tbWl0ZWRGaWxlcywgcmVzdWx0ICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvY2hlY2tvdXQvSGdDaGVja091dENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9jaGVja291dC9IZ0NoZWNrT3V0Q29tbWFuZC5qYXZhCmluZGV4IGRlYmVmMjIuLjllNjI5ZTYgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9jaGVja291dC9IZ0NoZWNrT3V0Q29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9jaGVja291dC9IZ0NoZWNrT3V0Q29tbWFuZC5qYXZhCkBAIC0yMywxMSArMjMsMTIgQEAKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVJlc3VsdDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21WZXJzaW9uOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuQ29tbWFuZDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLmNoZWNrb3V0LkFic3RyYWN0Q2hlY2tPdXRDb21tYW5kOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuY2hlY2tvdXQuQ2hlY2tPdXRTY21SZXN1bHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmhnLkhnVXRpbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5IZ0NvbW1hbmQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5IZ0NvbW1hbmRDb25zdGFudHM7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5IZ0NvbnN1bWVyOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmhnLnJlcG9zaXRvcnkuSGdTY21Qcm92aWRlclJlcG9zaXRvcnk7CiBpbXBvcnQgb3JnLmNvZGVoYXVzLnBsZXh1cy51dGlsLkZpbGVVdGlsczsKQEAgLTM4LDEzICszOSwxMyBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRodXJuZXIucnVwZXJ0QHltb25vLm5ldCI+dGh1cm5lciBydXBlcnQ8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBIZ0NoZWNrT3V0Q29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RDaGVja091dENvbW1hbmQKLSAgICBpbXBsZW1lbnRzIEhnQ29tbWFuZAorICAgIGltcGxlbWVudHMgQ29tbWFuZAogewotCi0KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDaGVja091dFNjbVJlc3VsdCBleGVjdXRlQ2hlY2tPdXRDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHNjbVZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC02NCwxNiArNjUsMTkgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8vIERvIHRoZSBhY3R1YWwgY2hlY2tvdXQKLSAgICAgICAgU3RyaW5nW10gY2hlY2tvdXRfY21kID0gbmV3IFN0cmluZ1tde0JSQU5DSF9DTUQsIFJFVklTSU9OX09QVElPTiwKLSAgICAgICAgICAgIHNjbVZlcnNpb24gIT0gbnVsbCAmJiAhU3RyaW5nVXRpbHMuaXNFbXB0eSggc2NtVmVyc2lvbi5nZXROYW1lKCkgKSA/IHNjbVZlcnNpb24uZ2V0TmFtZSgpIDogInRpcCIsIHVybCwKLSAgICAgICAgICAgIGNoZWNrb3V0RGlyLmdldEFic29sdXRlUGF0aCgpfTsKLSAgICAgICAgSGdDb25zdW1lciBjaGVja291dF9jb25zdW1lciA9IG5ldyBIZ0NvbnN1bWVyKCBnZXRMb2dnZXIoKSApOwotICAgICAgICBIZ1V0aWxzLmV4ZWN1dGUoIGNoZWNrb3V0X2NvbnN1bWVyLCBnZXRMb2dnZXIoKSwgY2hlY2tvdXREaXIuZ2V0UGFyZW50RmlsZSgpLCBjaGVja291dF9jbWQgKTsKKyAgICAgICAgU3RyaW5nW10gY2hlY2tvdXRDbWQgPSBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgSGdDb21tYW5kQ29uc3RhbnRzLkJSQU5DSF9DTUQsCisgICAgICAgICAgICBIZ0NvbW1hbmRDb25zdGFudHMuUkVWSVNJT05fT1BUSU9OLAorICAgICAgICAgICAgc2NtVmVyc2lvbiAhPSBudWxsICYmICFTdHJpbmdVdGlscy5pc0VtcHR5KCBzY21WZXJzaW9uLmdldE5hbWUoKSApID8gc2NtVmVyc2lvbi5nZXROYW1lKCkgOiAidGlwIiwKKyAgICAgICAgICAgIHVybCwKKyAgICAgICAgICAgIGNoZWNrb3V0RGlyLmdldEFic29sdXRlUGF0aCgpIH07CisgICAgICAgIEhnQ29uc3VtZXIgY2hlY2tvdXRDb25zdW1lciA9IG5ldyBIZ0NvbnN1bWVyKCBnZXRMb2dnZXIoKSApOworICAgICAgICBIZ1V0aWxzLmV4ZWN1dGUoIGNoZWNrb3V0Q29uc3VtZXIsIGdldExvZ2dlcigpLCBjaGVja291dERpci5nZXRQYXJlbnRGaWxlKCksIGNoZWNrb3V0Q21kICk7CiAKICAgICAgICAgLy8gRG8gaW52ZW50b3J5IHRvIGZpbmQgbGlzdCBvZiBjaGVja2Vkb3V0IGZpbGVzCi0gICAgICAgIFN0cmluZ1tdIGludmVudG9yeV9jbWQgPSBuZXcgU3RyaW5nW117SU5WRU5UT1JZX0NNRH07CisgICAgICAgIFN0cmluZ1tdIGludmVudG9yeUNtZCA9IG5ldyBTdHJpbmdbXSB7IEhnQ29tbWFuZENvbnN0YW50cy5JTlZFTlRPUllfQ01EIH07CiAgICAgICAgIEhnQ2hlY2tPdXRDb25zdW1lciBjb25zdW1lciA9IG5ldyBIZ0NoZWNrT3V0Q29uc3VtZXIoIGdldExvZ2dlcigpLCBjaGVja291dERpciApOwotICAgICAgICBTY21SZXN1bHQgcmVzdWx0ID0gSGdVdGlscy5leGVjdXRlKCBjb25zdW1lciwgZ2V0TG9nZ2VyKCksIGNoZWNrb3V0RGlyLCBpbnZlbnRvcnlfY21kICk7CisgICAgICAgIFNjbVJlc3VsdCByZXN1bHQgPSBIZ1V0aWxzLmV4ZWN1dGUoIGNvbnN1bWVyLCBnZXRMb2dnZXIoKSwgY2hlY2tvdXREaXIsIGludmVudG9yeUNtZCApOwogCiAgICAgICAgIHJldHVybiBuZXcgQ2hlY2tPdXRTY21SZXN1bHQoIGNvbnN1bWVyLmdldENoZWNrZWRPdXRGaWxlcygpLCByZXN1bHQgKTsKICAgICB9CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvY2hlY2tvdXQvSGdDaGVja091dENvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvY2hlY2tvdXQvSGdDaGVja091dENvbnN1bWVyLmphdmEKaW5kZXggM2U4MWI0MS4uODljOWY5MCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL2NoZWNrb3V0L0hnQ2hlY2tPdXRDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9jaGVja291dC9IZ0NoZWNrT3V0Q29uc3VtZXIuamF2YQpAQCAtMzAsNiArMzAsNyBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRodXJuZXIucnVwZXJ0QHltb25vLm5ldCI+dGh1cm5lciBydXBlcnQ8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBIZ0NoZWNrT3V0Q29uc3VtZXIKICAgICBleHRlbmRzIEhnQ29uc3VtZXIKQEAgLTQ1LDYgKzQ2LDcgQEAKICAgICAgICAgdGhpcy53b3JraW5nRGlyZWN0b3J5ID0gd29ya2luZ0RpcmVjdG9yeTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGRvQ29uc3VtZSggU2NtRmlsZVN0YXR1cyBzdGF0dXMsIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKCB3b3JraW5nRGlyZWN0b3J5LCBsaW5lICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvZGlmZi9IZ0RpZmZDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvZGlmZi9IZ0RpZmZDb21tYW5kLmphdmEKaW5kZXggZGFiYTgwZC4uYTQwZDFiMiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL2RpZmYvSGdEaWZmQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9kaWZmL0hnRGlmZkNvbW1hbmQuamF2YQpAQCAtMSw0MCArMSw0NSBAQAogcGFja2FnZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5jb21tYW5kLmRpZmY7CiAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwMS0yMDA2IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAgKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVJlc3VsdDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21WZXJzaW9uOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuQ29tbWFuZDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLmRpZmYuQWJzdHJhY3REaWZmQ29tbWFuZDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLmRpZmYuRGlmZlNjbVJlc3VsdDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuSGdVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5jb21tYW5kLkhnQ29tbWFuZDsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5jb21tYW5kLkhnQ29tbWFuZENvbnN0YW50czsKIGltcG9ydCBvcmcuY29kZWhhdXMucGxleHVzLnV0aWwuU3RyaW5nVXRpbHM7CiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86dGh1cm5lci5ydXBlcnRAeW1vbm8ubmV0Ij50aHVybmVyIHJ1cGVydDwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEhnRGlmZkNvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0RGlmZkNvbW1hbmQKLSAgICBpbXBsZW1lbnRzIEhnQ29tbWFuZAorICAgIGltcGxlbWVudHMgQ29tbWFuZAogewotCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgRGlmZlNjbVJlc3VsdCBleGVjdXRlRGlmZkNvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvLCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHN0YXJ0UmV2aXNpb24sIFNjbVZlcnNpb24gZW5kUmV2aXNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC00NywxMSArNTIsMTEgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXZBcmcgKz0gIi4uIiArIGVuZFJldmlzaW9uOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZGlmZkNtZCA9IG5ldyBTdHJpbmdbXXtESUZGX0NNRCwgUkVWSVNJT05fT1BUSU9OLCByZXZBcmd9OworICAgICAgICAgICAgZGlmZkNtZCA9IG5ldyBTdHJpbmdbXSB7IEhnQ29tbWFuZENvbnN0YW50cy5ESUZGX0NNRCwgSGdDb21tYW5kQ29uc3RhbnRzLlJFVklTSU9OX09QVElPTiwgcmV2QXJnIH07CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBkaWZmQ21kID0gbmV3IFN0cmluZ1tde0RJRkZfQ01EfTsKKyAgICAgICAgICAgIGRpZmZDbWQgPSBuZXcgU3RyaW5nW10geyBIZ0NvbW1hbmRDb25zdGFudHMuRElGRl9DTUQgfTsKICAgICAgICAgfQogCiAgICAgICAgIGRpZmZDbWQgPSBIZ1V0aWxzLmV4cGFuZENvbW1hbmRMaW5lKCBkaWZmQ21kLCBmaWxlU2V0ICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvZGlmZi9IZ0RpZmZDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL2RpZmYvSGdEaWZmQ29uc3VtZXIuamF2YQppbmRleCA5MTc1ODA5Li44ODRkMDI0IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvZGlmZi9IZ0RpZmZDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9kaWZmL0hnRGlmZkNvbnN1bWVyLmphdmEKQEAgLTMyLDMyICszMiwzMyBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRodXJuZXIucnVwZXJ0QHltb25vLm5ldCI+dGh1cm5lciBydXBlcnQ8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBIZ0RpZmZDb25zdW1lcgogICAgIGV4dGVuZHMgSGdDb25zdW1lcgogewogCi0gICAgLy8gcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIE1PRElGSUVEX0ZJTEVfVE9LRU4gPSAiPT09IG1vZGlmaWVkIGZpbGUgIjsKKyAgICAvLyBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9ESUZJRURfRklMRV9UT0tFTiA9ICI9PT0gbW9kaWZpZWQgZmlsZSAiOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIElOREVYX1RPS0VOID0gImRpZmYgLXIgIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5ERVhfVE9LRU4gPSAiZGlmZiAtciAiOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEZJTEVfU0VQQVJBVE9SX1RPS0VOID0gIj09PSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZJTEVfU0VQQVJBVE9SX1RPS0VOID0gIj09PSI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgU1RBUlRfUkVWSVNJT05fVE9LRU4gPSAiLS0tIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RBUlRfUkVWSVNJT05fVE9LRU4gPSAiLS0tIjsKIAotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBFTkRfUkVWSVNJT05fVE9LRU4gPSAiKysrIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5EX1JFVklTSU9OX1RPS0VOID0gIisrKyI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgQURERURfTElORV9UT0tFTiA9ICIrIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQURERURfTElORV9UT0tFTiA9ICIrIjsKIAotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBSRU1PVkVEX0xJTkVfVE9LRU4gPSAiLSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTU9WRURfTElORV9UT0tFTiA9ICItIjsKIAotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBVTkNIQU5HRURfTElORV9UT0tFTiA9ICIgIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVU5DSEFOR0VEX0xJTkVfVE9LRU4gPSAiICI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgQ0hBTkdFX1NFUEFSQVRPUl9UT0tFTiA9ICJAQCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENIQU5HRV9TRVBBUkFUT1JfVE9LRU4gPSAiQEAiOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIE5PX05FV0xJTkVfVE9LRU4gPSAiXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PX05FV0xJTkVfVE9LRU4gPSAiXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZSI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgSEFTSF9JRF9MRU4gPSAxMjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSEFTSF9JRF9MRU4gPSAxMjsKIAogICAgIHByaXZhdGUgU2NtTG9nZ2VyIGxvZ2dlcjsKIApAQCAtODUsNiArODYsNyBAQAogICAgIC8vIFN0cmVhbUNvbnN1bWVyIEltcGxlbWVudGF0aW9uCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgaWYgKCBsaW5lLnN0YXJ0c1dpdGgoIElOREVYX1RPS0VOICkgKQpAQCAtMTI1LDkgKzEyNyw5IEBACiAgICAgICAgICAgICAvLyBza2lwLCB0aG91Z2ggY291bGQgcGFyc2UgdG8gdmVyaWZ5IGZpbGVuYW1lLCBlbmQgcmV2aXNpb24KICAgICAgICAgICAgIHBhdGNoLmFwcGVuZCggbGluZSApLmFwcGVuZCggIlxuIiApOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCBsaW5lLnN0YXJ0c1dpdGgoIEFEREVEX0xJTkVfVE9LRU4gKSB8fCBsaW5lLnN0YXJ0c1dpdGgoIFJFTU9WRURfTElORV9UT0tFTiApIHx8Ci0gICAgICAgICAgICBsaW5lLnN0YXJ0c1dpdGgoIFVOQ0hBTkdFRF9MSU5FX1RPS0VOICkgfHwgbGluZS5zdGFydHNXaXRoKCBDSEFOR0VfU0VQQVJBVE9SX1RPS0VOICkgfHwKLSAgICAgICAgICAgIGxpbmUuZXF1YWxzKCBOT19ORVdMSU5FX1RPS0VOICkgKQorICAgICAgICBlbHNlIGlmICggbGluZS5zdGFydHNXaXRoKCBBRERFRF9MSU5FX1RPS0VOICkgfHwgbGluZS5zdGFydHNXaXRoKCBSRU1PVkVEX0xJTkVfVE9LRU4gKQorICAgICAgICAgICAgfHwgbGluZS5zdGFydHNXaXRoKCBVTkNIQU5HRURfTElORV9UT0tFTiApIHx8IGxpbmUuc3RhcnRzV2l0aCggQ0hBTkdFX1NFUEFSQVRPUl9UT0tFTiApCisgICAgICAgICAgICB8fCBsaW5lLmVxdWFscyggTk9fTkVXTElORV9UT0tFTiApICkKICAgICAgICAgewogICAgICAgICAgICAgLy8gYWRkIHRvIGJ1ZmZlcgogICAgICAgICAgICAgY3VycmVudERpZmZlcmVuY2UuYXBwZW5kKCBsaW5lICkuYXBwZW5kKCAiXG4iICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvaW52ZW50b3J5L0hnTGlzdENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9pbnZlbnRvcnkvSGdMaXN0Q29tbWFuZC5qYXZhCmluZGV4IDliNmVkYTQuLjM4ODExOGIgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9pbnZlbnRvcnkvSGdMaXN0Q29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9pbnZlbnRvcnkvSGdMaXN0Q29tbWFuZC5qYXZhCkBAIC0xLDE0ICsxLDUgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5pbnZlbnRvcnk7CiAKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5jb21tYW5kLkhnQ29tbWFuZDsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5IZ1V0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLmxpc3QuQWJzdHJhY3RMaXN0Q29tbWFuZDsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLmxpc3QuTGlzdFNjbVJlc3VsdDsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS4qOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotCiAvKgogICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQogICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCkBAIC0yOCw0MyArMTksNjcgQEAKICAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21FeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldDsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21SZXN1bHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVmVyc2lvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC5saXN0LkFic3RyYWN0TGlzdENvbW1hbmQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC5saXN0Lkxpc3RTY21SZXN1bHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmhnLkhnVXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5IZ0NvbW1hbmRDb25zdGFudHM7CisKIC8qKgogICogR2V0IGEgbGlzdCBvZiBhbGwgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkKLSAqIAorICoKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnJ5YW5AZGFya3NsZWVwLmNvbSI+cnlhbiBkYXVtPC9hPgorICogQHZlcnNpb24gJElkJAogICovCi1wdWJsaWMgY2xhc3MgSGdMaXN0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0TGlzdENvbW1hbmQKLSAgICAgICAgaW1wbGVtZW50cyBIZ0NvbW1hbmQgCitwdWJsaWMgY2xhc3MgSGdMaXN0Q29tbWFuZAorICAgIGV4dGVuZHMgQWJzdHJhY3RMaXN0Q29tbWFuZAorICAgIGltcGxlbWVudHMgQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCisgICAgcHJvdGVjdGVkIExpc3RTY21SZXN1bHQgZXhlY3V0ZUxpc3RDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiByZWN1cnNpdmUsIFNjbVZlcnNpb24gc2NtVmVyc2lvbiApCisgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KKyAgICB7CiAKLSAgICBwcm90ZWN0ZWQgTGlzdFNjbVJlc3VsdCBleGVjdXRlTGlzdENvbW1hbmQoU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgYm9vbGVhbiByZWN1cnNpdmUsIFNjbVZlcnNpb24gc2NtVmVyc2lvbikgdGhyb3dzIFNjbUV4Y2VwdGlvbiB7Ci0KLSAgICAgICAgaWYgKCBmaWxlU2V0LmdldEZpbGVzKCkubGVuZ3RoICE9IDAgKQorICAgICAgICBpZiAoIGZpbGVTZXQuZ2V0RmlsZUxpc3QoKS5zaXplKCkgIT0gMCApCiAgICAgICAgIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTY21FeGNlcHRpb24oICJUaGlzIHByb3ZpZGVyIGRvZXNuJ3Qgc3VwcG9ydCBsaXN0aW5nIHN1YnNldHMgb2YgYSBkaXJlY3RvcnkiICk7CiAgICAgICAgIH0KICAgICAgICAgLy8KICAgICAgICAgRmlsZSB3b3JraW5nRGlyID0gZmlsZVNldC5nZXRCYXNlZGlyKCk7CiAKLSAgICAgICAgIC8vIGJ1aWxkIHRoZSBjb21tYW5kCi0gICAgICAgIFN0cmluZ1tdIGxpc3RDbWQgPSBuZXcgU3RyaW5nW117U1RBVFVTX0NNRCwgQUxMX09QVElPTn07CisgICAgICAgIC8vIGJ1aWxkIHRoZSBjb21tYW5kCisgICAgICAgIFN0cmluZ1tdIGxpc3RDbWQgPSBuZXcgU3RyaW5nW10geyBIZ0NvbW1hbmRDb25zdGFudHMuU1RBVFVTX0NNRCwgSGdDb21tYW5kQ29uc3RhbnRzLkFMTF9PUFRJT04gfTsKIAogICAgICAgICAvLyBrZWVwIHRoZSBjb21tYW5kIGFib3V0IGluIHN0cmluZyBmb3JtIGZvciByZXBvcnRpbmcKICAgICAgICAgU3RyaW5nQnVmZmVyIGNtZCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0Q21kLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGZvciAoIGludCBpID0gMDsgaSA8IGxpc3RDbWQubGVuZ3RoOyBpKysgKQorICAgICAgICB7CiAgICAgICAgICAgICBTdHJpbmcgcyA9IGxpc3RDbWRbaV07Ci0gICAgICAgICAgICBjbWQuYXBwZW5kKHMpOwotICAgICAgICAgICAgaWYgKGkgPCBsaXN0Q21kLmxlbmd0aCAtIDEpCi0gICAgICAgICAgICAgICAgY21kLmFwcGVuZCgiICIpOworICAgICAgICAgICAgY21kLmFwcGVuZCggcyApOworICAgICAgICAgICAgaWYgKCBpIDwgbGlzdENtZC5sZW5ndGggLSAxICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjbWQuYXBwZW5kKCAiICIgKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIEhnTGlzdENvbnN1bWVyIGNvbnN1bWVyID0gbmV3IEhnTGlzdENvbnN1bWVyKCBnZXRMb2dnZXIoKSApOwogCi0gICAgICAgIFNjbVJlc3VsdCByZXN1bHQgPSBIZ1V0aWxzLmV4ZWN1dGUoIGNvbnN1bWVyLCBnZXRMb2dnZXIoKSwgd29ya2luZ0RpciwgbGlzdENtZCk7CisgICAgICAgIFNjbVJlc3VsdCByZXN1bHQgPSBIZ1V0aWxzLmV4ZWN1dGUoIGNvbnN1bWVyLCBnZXRMb2dnZXIoKSwgd29ya2luZ0RpciwgbGlzdENtZCApOwogCi0gICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgTGlzdFNjbVJlc3VsdChjb25zdW1lci5nZXRGaWxlcygpLCByZXN1bHQpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoIHJlc3VsdC5pc1N1Y2Nlc3MoKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTGlzdFNjbVJlc3VsdCggY29uc3VtZXIuZ2V0RmlsZXMoKSwgcmVzdWx0ICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2NtRXhjZXB0aW9uKCAiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNvbW1hbmQgIiArIGNtZC50b1N0cmluZygpICk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvaW52ZW50b3J5L0hnTGlzdENvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvaW52ZW50b3J5L0hnTGlzdENvbnN1bWVyLmphdmEKaW5kZXggODEyNWE2MC4uZjBmY2FmNiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL2ludmVudG9yeS9IZ0xpc3RDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9pbnZlbnRvcnkvSGdMaXN0Q29uc3VtZXIuamF2YQpAQCAtMSwxMyArMSw1IEBACiBwYWNrYWdlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmhnLmNvbW1hbmQuaW52ZW50b3J5OwogCi1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5IZ0NvbnN1bWVyOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVN0YXR1czsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQogLyoKICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpAQCAtMjcsMTIgKzE5LDIzIEBACiAgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5IZ0NvbnN1bWVyOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVN0YXR1czsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKwogLyoqCiAgKiBHZXQgYSBsaXN0IG9mIGFsbCBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeQogICoKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnJ5YW5AZGFya3NsZWVwLmNvbSI+cnlhbiBkYXVtPC9hPgorICogQHZlcnNpb24gJElkJAogICovCi1wdWJsaWMgY2xhc3MgSGdMaXN0Q29uc3VtZXIgZXh0ZW5kcyBIZ0NvbnN1bWVyIHsKK3B1YmxpYyBjbGFzcyBIZ0xpc3RDb25zdW1lcgorICAgIGV4dGVuZHMgSGdDb25zdW1lcgorewogCiAgICAgcHJpdmF0ZSBMaXN0IGZpbGVzID0gbmV3IEFycmF5TGlzdCgpOwogCkBAIC00MSwxMiArNDQsMTQgQEAKICAgICAgICAgc3VwZXIoIGxvZ2dlciApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgZG9Db25zdW1lKCBTY21GaWxlU3RhdHVzIHN0YXR1cywgU3RyaW5nIHRyaW1tZWRMaW5lICkKICAgICB7Ci0gICAgICAgIGZpbGVzLmFkZChuZXcgU2NtRmlsZSh0cmltbWVkTGluZSwgc3RhdHVzKSk7CisgICAgICAgIGZpbGVzLmFkZCggbmV3IFNjbUZpbGUoIHRyaW1tZWRMaW5lLCBzdGF0dXMgKSApOwogICAgIH0KIAotICAgIHB1YmxpYyBMaXN0IGdldEZpbGVzKCkgeworICAgIHB1YmxpYyBMaXN0IGdldEZpbGVzKCkKKyAgICB7CiAgICAgICAgIHJldHVybiBmaWxlczsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvcmVtb3ZlL0hnUmVtb3ZlQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL3JlbW92ZS9IZ1JlbW92ZUNvbW1hbmQuamF2YQppbmRleCBhYWViZGUwLi5kZDY1NTA3IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvcmVtb3ZlL0hnUmVtb3ZlQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9yZW1vdmUvSGdSZW1vdmVDb21tYW5kLmphdmEKQEAgLTIyLDI2ICsyMiwyOSBAQAogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVJlc3VsdDsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLkNvbW1hbmQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC5yZW1vdmUuQWJzdHJhY3RSZW1vdmVDb21tYW5kOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQucmVtb3ZlLlJlbW92ZVNjbVJlc3VsdDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuSGdVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5jb21tYW5kLkhnQ29tbWFuZDsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5jb21tYW5kLkhnQ29tbWFuZENvbnN0YW50czsKIAogaW1wb3J0IGphdmEuaW8uRmlsZTsKIAogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0aHVybmVyLnJ1cGVydEB5bW9uby5uZXQiPnRodXJuZXIgcnVwZXJ0PC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgSGdSZW1vdmVDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdFJlbW92ZUNvbW1hbmQKLSAgICBpbXBsZW1lbnRzIEhnQ29tbWFuZAorICAgIGltcGxlbWVudHMgQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFNjbVJlc3VsdCBleGVjdXRlUmVtb3ZlQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIG1lc3NhZ2UgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogCi0gICAgICAgIFN0cmluZ1tdIGNvbW1hbmQgPSBuZXcgU3RyaW5nW117UkVNT1ZFX0NNRH07CisgICAgICAgIFN0cmluZ1tdIGNvbW1hbmQgPSBuZXcgU3RyaW5nW10geyBIZ0NvbW1hbmRDb25zdGFudHMuUkVNT1ZFX0NNRCB9OwogICAgICAgICBIZ1V0aWxzLmV4cGFuZENvbW1hbmRMaW5lKCBjb21tYW5kLCBmaWxlU2V0ICk7CiAKICAgICAgICAgRmlsZSB3b3JraW5nRGlyID0gZmlsZVNldC5nZXRCYXNlZGlyKCk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvcmVtb3ZlL0hnUmVtb3ZlQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9yZW1vdmUvSGdSZW1vdmVDb25zdW1lci5qYXZhCmluZGV4IDY4MDI4ZWMuLjYwOTgyNDUgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9yZW1vdmUvSGdSZW1vdmVDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9yZW1vdmUvSGdSZW1vdmVDb25zdW1lci5qYXZhCkBAIC0zMCw2ICszMCw3IEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86dGh1cm5lci5ydXBlcnRAeW1vbm8ubmV0Ij50aHVybmVyIHJ1cGVydDwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEhnUmVtb3ZlQ29uc3VtZXIKICAgICBleHRlbmRzIEhnQ29uc3VtZXIKQEAgLTQ0LDYgKzQ1LDcgQEAKICAgICAgICAgdGhpcy53b3JraW5nRGlyID0gd29ya2luZ0RpcjsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGRvQ29uc3VtZSggU2NtRmlsZVN0YXR1cyBzdGF0dXMsIFN0cmluZyB0cmltbWVkTGluZSApCiAgICAgewogICAgICAgICBpZiAoIHN0YXR1cyAhPSBudWxsICYmIHN0YXR1cyA9PSBTY21GaWxlU3RhdHVzLkRFTEVURUQgKQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL3N0YXR1cy9IZ1N0YXR1c0NvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9zdGF0dXMvSGdTdGF0dXNDb21tYW5kLmphdmEKaW5kZXggYWVlZmZjYy4uMmVmMWYwZiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL3N0YXR1cy9IZ1N0YXR1c0NvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvc3RhdHVzL0hnU3RhdHVzQ29tbWFuZC5qYXZhCkBAIC0xOSwyMyArMTksMjYgQEAKICAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21FeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21SZXN1bHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC5Db21tYW5kOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuc3RhdHVzLkFic3RyYWN0U3RhdHVzQ29tbWFuZDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLnN0YXR1cy5TdGF0dXNTY21SZXN1bHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmhnLkhnVXRpbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5IZ0NvbW1hbmQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5IZ0NvbW1hbmRDb25zdGFudHM7CiAKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLS8qKgorLyoKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnRodXJuZXIucnVwZXJ0QHltb25vLm5ldCI+dGh1cm5lciBydXBlcnQ8L2E+CisgKiAKKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEhnU3RhdHVzQ29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RTdGF0dXNDb21tYW5kCi0gICAgaW1wbGVtZW50cyBIZ0NvbW1hbmQKKyAgICBpbXBsZW1lbnRzIENvbW1hbmQKIHsKIAogICAgIHB1YmxpYyBIZ1N0YXR1c0NvbW1hbmQoKQpAQCAtNDMsMTMgKzQ2LDE0IEBACiAgICAgICAgIHN1cGVyKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RhdHVzU2NtUmVzdWx0IGV4ZWN1dGVTdGF0dXNDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKIAogICAgICAgICBGaWxlIHdvcmtpbmdEaXIgPSBmaWxlU2V0LmdldEJhc2VkaXIoKTsKICAgICAgICAgSGdTdGF0dXNDb25zdW1lciBjb25zdW1lciA9IG5ldyBIZ1N0YXR1c0NvbnN1bWVyKCBnZXRMb2dnZXIoKSwgd29ya2luZ0RpciApOwotICAgICAgICBTdHJpbmdbXSBzdGF0dXNDbWQgPSBuZXcgU3RyaW5nW117U1RBVFVTX0NNRH07CisgICAgICAgIFN0cmluZ1tdIHN0YXR1c0NtZCA9IG5ldyBTdHJpbmdbXSB7IEhnQ29tbWFuZENvbnN0YW50cy5TVEFUVVNfQ01EIH07CiAgICAgICAgIFNjbVJlc3VsdCByZXN1bHQgPSBIZ1V0aWxzLmV4ZWN1dGUoIGNvbnN1bWVyLCBnZXRMb2dnZXIoKSwgd29ya2luZ0Rpciwgc3RhdHVzQ21kICk7CiAKICAgICAgICAgcmV0dXJuIG5ldyBTdGF0dXNTY21SZXN1bHQoIGNvbnN1bWVyLmdldFN0YXR1cygpLCByZXN1bHQgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC9zdGF0dXMvSGdTdGF0dXNDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL3N0YXR1cy9IZ1N0YXR1c0NvbnN1bWVyLmphdmEKaW5kZXggNTIzMjYyZS4uMGVmYWJkOSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL3N0YXR1cy9IZ1N0YXR1c0NvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL3N0YXR1cy9IZ1N0YXR1c0NvbnN1bWVyLmphdmEKQEAgLTMwLDYgKzMwLDcgQEAKIAogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0aHVybmVyLnJ1cGVydEB5bW9uby5uZXQiPnRodXJuZXIgcnVwZXJ0PC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBjbGFzcyBIZ1N0YXR1c0NvbnN1bWVyCiAgICAgZXh0ZW5kcyBIZ0NvbnN1bWVyCkBAIC0zOCwxMyArMzksMTMgQEAKIAogICAgIHByaXZhdGUgZmluYWwgRmlsZSB3b3JraW5nRGlyOwogCi0KICAgICBIZ1N0YXR1c0NvbnN1bWVyKCBTY21Mb2dnZXIgbG9nZ2VyLCBGaWxlIHdvcmtpbmdEaXIgKQogICAgIHsKICAgICAgICAgc3VwZXIoIGxvZ2dlciApOwogICAgICAgICB0aGlzLndvcmtpbmdEaXIgPSB3b3JraW5nRGlyOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgZG9Db25zdW1lKCBTY21GaWxlU3RhdHVzIHN0YXR1cywgU3RyaW5nIHRyaW1tZWRMaW5lICkKICAgICB7CiAgICAgICAgIC8vT25seSBpbmNsdWRlIHJlYWwgZmlsZXMgKG5vdCBkaXJlY3RvcmllcykKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC90YWcvSGdUYWdDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvdGFnL0hnVGFnQ29tbWFuZC5qYXZhCmluZGV4IDEyOGQxNWEuLjk0ODIwOTkgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC90YWcvSGdUYWdDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL3RhZy9IZ1RhZ0NvbW1hbmQuamF2YQpAQCAtMTksMzMgKzE5LDQyIEBACiAgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uKjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21FeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZTsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0OworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTdGF0dXM7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtUmVzdWx0OworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuQ29tbWFuZDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLnRhZy5BYnN0cmFjdFRhZ0NvbW1hbmQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC50YWcuVGFnU2NtUmVzdWx0OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5IZ1V0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmhnLnJlcG9zaXRvcnkuSGdTY21Qcm92aWRlclJlcG9zaXRvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5IZ0NvbW1hbmQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5IZ0NvbW1hbmRDb25zdGFudHM7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5IZ0NvbnN1bWVyOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmhnLmNvbW1hbmQuaW52ZW50b3J5LkhnTGlzdENvbnN1bWVyOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmhnLnJlcG9zaXRvcnkuSGdTY21Qcm92aWRlclJlcG9zaXRvcnk7CiBpbXBvcnQgb3JnLmNvZGVoYXVzLnBsZXh1cy51dGlsLlN0cmluZ1V0aWxzOwogCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCiAvKioKICAqIFRhZwogICoKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnJ5YW5AZGFya3NsZWVwLmNvbSI+cnlhbiBkYXVtPC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgSGdUYWdDb21tYW5kCi0gICAgICAgIGV4dGVuZHMgQWJzdHJhY3RUYWdDb21tYW5kCi0gICAgICAgIGltcGxlbWVudHMgSGdDb21tYW5kCisgICAgZXh0ZW5kcyBBYnN0cmFjdFRhZ0NvbW1hbmQKKyAgICBpbXBsZW1lbnRzIENvbW1hbmQKIHsKLQotICAgIHByb3RlY3RlZCBTY21SZXN1bHQgZXhlY3V0ZVRhZ0NvbW1hbmQoU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHNjbVByb3ZpZGVyUmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgdGFnLCBTdHJpbmcgbWVzc2FnZSkgdGhyb3dzIFNjbUV4Y2VwdGlvbiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KKyAgICBwcm90ZWN0ZWQgU2NtUmVzdWx0IGV4ZWN1dGVUYWdDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgc2NtUHJvdmlkZXJSZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgKQorICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCisgICAgewogCiAgICAgICAgIGlmICggdGFnID09IG51bGwgfHwgU3RyaW5nVXRpbHMuaXNFbXB0eSggdGFnLnRyaW0oKSApICkKICAgICAgICAgewpAQCAtNTksNTYgKzY4LDY3IEBACiAKICAgICAgICAgRmlsZSB3b3JraW5nRGlyID0gZmlsZVNldC5nZXRCYXNlZGlyKCk7CiAKLQogICAgICAgICAvLyBidWlsZCB0aGUgY29tbWFuZAotICAgICAgICBTdHJpbmdbXSB0YWdDbWQgPSBuZXcgU3RyaW5nW117VEFHX0NNRCwgTUVTU0FHRV9PUFRJT04sIG1lc3NhZ2UsIHRhZyB9OworICAgICAgICBTdHJpbmdbXSB0YWdDbWQgPSBuZXcgU3RyaW5nW10geyBIZ0NvbW1hbmRDb25zdGFudHMuVEFHX0NNRCwgSGdDb21tYW5kQ29uc3RhbnRzLk1FU1NBR0VfT1BUSU9OLCBtZXNzYWdlLCB0YWcgfTsKIAogICAgICAgICAvLyBrZWVwIHRoZSBjb21tYW5kIGFib3V0IGluIHN0cmluZyBmb3JtIGZvciByZXBvcnRpbmcKLSAgICAgICAgU3RyaW5nQnVmZmVyIGNtZCA9IGpvaW5DbWQodGFnQ21kKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGNtZCA9IGpvaW5DbWQoIHRhZ0NtZCApOwogCiAgICAgICAgIEhnVGFnQ29uc3VtZXIgY29uc3VtZXIgPSBuZXcgSGdUYWdDb25zdW1lciggZ2V0TG9nZ2VyKCkgKTsKLSAgICAgICAgU2NtUmVzdWx0IHJlc3VsdCA9IEhnVXRpbHMuZXhlY3V0ZSggY29uc3VtZXIsIGdldExvZ2dlcigpLCB3b3JraW5nRGlyLCB0YWdDbWQpOworICAgICAgICBTY21SZXN1bHQgcmVzdWx0ID0gSGdVdGlscy5leGVjdXRlKCBjb25zdW1lciwgZ2V0TG9nZ2VyKCksIHdvcmtpbmdEaXIsIHRhZ0NtZCApOwogICAgICAgICBIZ1NjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5ID0gKEhnU2NtUHJvdmlkZXJSZXBvc2l0b3J5KSBzY21Qcm92aWRlclJlcG9zaXRvcnk7Ci0gICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkpIHsKKyAgICAgICAgaWYgKCByZXN1bHQuaXNTdWNjZXNzKCkgKQorICAgICAgICB7CiAgICAgICAgICAgICAvLyBub3cgcHVzaAogICAgICAgICAgICAgLy8gUHVzaCB0byBwYXJlbnQgYnJhbmNoIGlmIGFueQogICAgICAgICAgICAgaWYgKCAhcmVwb3NpdG9yeS5nZXRVUkkoKS5lcXVhbHMoIGZpbGVTZXQuZ2V0QmFzZWRpcigpLmdldEFic29sdXRlUGF0aCgpICkgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZ1tdIHB1c2hfY21kID0gbmV3IFN0cmluZ1tde0hnQ29tbWFuZC5QVVNIX0NNRCwgcmVwb3NpdG9yeS5nZXRVUkkoKX07Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gSGdVdGlscy5leGVjdXRlKCBuZXcgSGdDb25zdW1lciggZ2V0TG9nZ2VyKCkgKSwgZ2V0TG9nZ2VyKCksIGZpbGVTZXQuZ2V0QmFzZWRpcigpLCBwdXNoX2NtZCApOworICAgICAgICAgICAgICAgIFN0cmluZ1tdIHB1c2hDbWQgPSBuZXcgU3RyaW5nW10geyBIZ0NvbW1hbmRDb25zdGFudHMuUFVTSF9DTUQsIHJlcG9zaXRvcnkuZ2V0VVJJKCkgfTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBIZ1V0aWxzLmV4ZWN1dGUoIG5ldyBIZ0NvbnN1bWVyKCBnZXRMb2dnZXIoKSApLCBnZXRMb2dnZXIoKSwgZmlsZVNldC5nZXRCYXNlZGlyKCksIHB1c2hDbWQgKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTY21FeGNlcHRpb24oICJFcnJvciB3aGlsZSBleGVjdXRpbmcgY29tbWFuZCAiICsgY21kLnRvU3RyaW5nKCkgKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIGRvIGFuIGludmVudG9yeSB0byByZXR1cm4gdGhlIGZpbGVzIHRhZ2dlZCAoYWxsIG9mIHRoZW0pCi0gICAgICAgIFN0cmluZ1tdIGxpc3RfY21kID0gbmV3IFN0cmluZ1tde0hnQ29tbWFuZC5JTlZFTlRPUllfQ01EfTsKLSAgICAgICAgSGdMaXN0Q29uc3VtZXIgbGlzdGNvbnN1bWVyID0gbmV3IEhnTGlzdENvbnN1bWVyKGdldExvZ2dlcigpKTsKLSAgICAgICAgcmVzdWx0ID0gIEhnVXRpbHMuZXhlY3V0ZShsaXN0Y29uc3VtZXIsIGdldExvZ2dlcigpLCBmaWxlU2V0LmdldEJhc2VkaXIoKSwgbGlzdF9jbWQpOwotICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpKSB7CisgICAgICAgIFN0cmluZ1tdIGxpc3RDbWQgPSBuZXcgU3RyaW5nW10geyBIZ0NvbW1hbmRDb25zdGFudHMuSU5WRU5UT1JZX0NNRCB9OworICAgICAgICBIZ0xpc3RDb25zdW1lciBsaXN0Y29uc3VtZXIgPSBuZXcgSGdMaXN0Q29uc3VtZXIoIGdldExvZ2dlcigpICk7CisgICAgICAgIHJlc3VsdCA9IEhnVXRpbHMuZXhlY3V0ZSggbGlzdGNvbnN1bWVyLCBnZXRMb2dnZXIoKSwgZmlsZVNldC5nZXRCYXNlZGlyKCksIGxpc3RDbWQgKTsKKyAgICAgICAgaWYgKCByZXN1bHQuaXNTdWNjZXNzKCkgKQorICAgICAgICB7CiAgICAgICAgICAgICBMaXN0IGZpbGVzID0gbGlzdGNvbnN1bWVyLmdldEZpbGVzKCk7CiAgICAgICAgICAgICBBcnJheUxpc3QgZmlsZUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CiAgICAgICAgICAgICBmb3IgKCBJdGVyYXRvciBpID0gZmlsZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBTY21GaWxlIGYgPSAoU2NtRmlsZSkgaS5uZXh0KCk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIWYuZ2V0UGF0aCgpLmVuZHNXaXRoKCIuaGd0YWdzIikpCisgICAgICAgICAgICAgICAgaWYgKCAhZi5nZXRQYXRoKCkuZW5kc1dpdGgoICIuaGd0YWdzIiApICkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGZpbGVMaXN0LmFkZCggbmV3IFNjbUZpbGUoIGYuZ2V0UGF0aCgpLCBTY21GaWxlU3RhdHVzLlRBR0dFRCApICk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gbmV3IFRhZ1NjbVJlc3VsdChmaWxlTGlzdCwgcmVzdWx0KTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgVGFnU2NtUmVzdWx0KCBmaWxlTGlzdCwgcmVzdWx0ICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2NtRXhjZXB0aW9uKCAiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNvbW1hbmQgIiArIGNtZC50b1N0cmluZygpICk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBqb2luQ21kKFN0cmluZ1tdIGNtZCkgeworICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIGpvaW5DbWQoIFN0cmluZ1tdIGNtZCApCisgICAgewogICAgICAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNtZC5sZW5ndGg7IGkrKykgeworICAgICAgICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBjbWQubGVuZ3RoOyBpKysgKQorICAgICAgICB7CiAgICAgICAgICAgICBTdHJpbmcgcyA9IGNtZFtpXTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocyk7Ci0gICAgICAgICAgICBpZiAoaSA8IGNtZC5sZW5ndGggLSAxKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIiAiKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIHMgKTsKKyAgICAgICAgICAgIGlmICggaSA8IGNtZC5sZW5ndGggLSAxICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCAiICIgKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC90YWcvSGdUYWdDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL3RhZy9IZ1RhZ0NvbnN1bWVyLmphdmEKaW5kZXggYmVkNDAwYy4uN2Q2YmU1OSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL3RhZy9IZ1RhZ0NvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL3RhZy9IZ1RhZ0NvbnN1bWVyLmphdmEKQEAgLTI1LDYgKzI1LDcgQEAKIAogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpyeWFuQGRhcmtzbGVlcC5jb20iPnJ5YW4gZGF1bTwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEhnVGFnQ29uc3VtZXIKICAgICAgICAgZXh0ZW5kcyBIZ0NvbnN1bWVyCkBAIC0zNCw4ICszNSw4IEBACiAgICAgICAgIHN1cGVyKCBsb2dnZXIgKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGRvQ29uc3VtZSggU2NtRmlsZVN0YXR1cyBzdGF0dXMsIFN0cmluZyB0cmltbWVkTGluZSApCi0gICAgeyAgICAgICAKKyAgICB7CiAgICAgfQotCiB9CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvdXBkYXRlL0hnVXBkYXRlQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9jb21tYW5kL3VwZGF0ZS9IZ1VwZGF0ZUNvbW1hbmQuamF2YQppbmRleCA0NmE4NGE5Li5jNGIyZGJhIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL2NvbW1hbmQvdXBkYXRlL0hnVXBkYXRlQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvY29tbWFuZC91cGRhdGUvSGdVcGRhdGVDb21tYW5kLmphdmEKQEAgLTE5LDQ3ICsxOSw1MSBAQAogICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVN0YXR1czsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21SZXN1bHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVmVyc2lvbjsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLmNoYW5nZWxvZy5DaGFuZ2VMb2dDb21tYW5kOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQudXBkYXRlLkFic3RyYWN0VXBkYXRlQ29tbWFuZDsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLnVwZGF0ZS5VcGRhdGVTY21SZXN1bHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC51cGRhdGUuVXBkYXRlU2NtUmVzdWx0V2l0aFJldmlzaW9uOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5IZ1V0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmhnLmNvbW1hbmQuSGdDb21tYW5kOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmhnLmNvbW1hbmQuSGdDb25zdW1lcjsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5jb21tYW5kLmNoYW5nZWxvZy5IZ0NoYW5nZUxvZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5kaWZmLkhnRGlmZkNvbnN1bWVyOwotaW1wb3J0IG9yZy5jb2RlaGF1cy5wbGV4dXMudXRpbC5TdHJpbmdVdGlsczsKLQogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogCitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGU7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldDsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU3RhdHVzOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbVJlc3VsdDsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21WZXJzaW9uOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLmNoYW5nZWxvZy5DaGFuZ2VMb2dDb21tYW5kOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQudXBkYXRlLkFic3RyYWN0VXBkYXRlQ29tbWFuZDsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLnVwZGF0ZS5VcGRhdGVTY21SZXN1bHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC51cGRhdGUuVXBkYXRlU2NtUmVzdWx0V2l0aFJldmlzaW9uOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5IZ1V0aWxzOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmhnLmNvbW1hbmQuSGdDb21tYW5kQ29uc3RhbnRzOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmhnLmNvbW1hbmQuSGdDb25zdW1lcjsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5oZy5jb21tYW5kLmNoYW5nZWxvZy5IZ0NoYW5nZUxvZ0NvbW1hbmQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5kaWZmLkhnRGlmZkNvbnN1bWVyOworaW1wb3J0IG9yZy5jb2RlaGF1cy5wbGV4dXMudXRpbC5TdHJpbmdVdGlsczsKKwogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0aHVybmVyLnJ1cGVydEB5bW9uby5uZXQiPnRodXJuZXIgcnVwZXJ0PC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgSGdVcGRhdGVDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdFVwZGF0ZUNvbW1hbmQKLSAgICBpbXBsZW1lbnRzIEhnQ29tbWFuZAorICAgIGltcGxlbWVudHMgQ29tbWFuZAogewotCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgVXBkYXRlU2NtUmVzdWx0IGV4ZWN1dGVVcGRhdGVDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHRhZyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIEZpbGUgd29ya2luZ0RpciA9IGZpbGVTZXQuZ2V0QmFzZWRpcigpOwogCiAgICAgICAgIC8vIFVwZGF0ZSBicmFuY2gKLSAgICAgICAgU3RyaW5nW10gdXBkYXRlX2NtZCA9IG5ldyBTdHJpbmdbXXtIZ0NvbW1hbmQuUFVMTF9DTUQsIFJFVklTSU9OX09QVElPTiwKLSAgICAgICAgICAgIHRhZyAhPSBudWxsICYmICFTdHJpbmdVdGlscy5pc0VtcHR5KCB0YWcuZ2V0TmFtZSgpICkgPyB0YWcuZ2V0TmFtZSgpIDogInRpcCJ9OwotICAgICAgICBTY21SZXN1bHQgdXBkYXRlUmVzdWx0ID0gSGdVdGlscy5leGVjdXRlKCBuZXcgSGdDb25zdW1lciggZ2V0TG9nZ2VyKCkgKSwgZ2V0TG9nZ2VyKCksIHdvcmtpbmdEaXIsIHVwZGF0ZV9jbWQgKTsKKyAgICAgICAgU3RyaW5nW10gdXBkYXRlQ21kID0gbmV3IFN0cmluZ1tdIHsKKyAgICAgICAgICAgIEhnQ29tbWFuZENvbnN0YW50cy5QVUxMX0NNRCwKKyAgICAgICAgICAgIEhnQ29tbWFuZENvbnN0YW50cy5SRVZJU0lPTl9PUFRJT04sCisgICAgICAgICAgICB0YWcgIT0gbnVsbCAmJiAhU3RyaW5nVXRpbHMuaXNFbXB0eSggdGFnLmdldE5hbWUoKSApID8gdGFnLmdldE5hbWUoKSA6ICJ0aXAiIH07CisgICAgICAgIFNjbVJlc3VsdCB1cGRhdGVSZXN1bHQgPSBIZ1V0aWxzLmV4ZWN1dGUoIG5ldyBIZ0NvbnN1bWVyKCBnZXRMb2dnZXIoKSApLCBnZXRMb2dnZXIoKSwgd29ya2luZ0RpciwgdXBkYXRlQ21kICk7CiAKICAgICAgICAgaWYgKCAhdXBkYXRlUmVzdWx0LmlzU3VjY2VzcygpICkKICAgICAgICAgewpAQCAtNjksNyArNzMsMTAgQEAKICAgICAgICAgLy8gRmluZCBjaGFuZ2VzIGZyb20gbGFzdCByZXZpc2lvbgogICAgICAgICBpbnQgY3VycmVudFJldmlzaW9uID0gSGdVdGlscy5nZXRDdXJyZW50UmV2aXNpb25OdW1iZXIoIGdldExvZ2dlcigpLCB3b3JraW5nRGlyICk7CiAgICAgICAgIGludCBwcmV2aW91c1JldmlzaW9uID0gY3VycmVudFJldmlzaW9uIC0gMTsKLSAgICAgICAgU3RyaW5nW10gZGlmZkNtZCA9IG5ldyBTdHJpbmdbXXtESUZGX0NNRCwgUkVWSVNJT05fT1BUSU9OLCAiIiArIHByZXZpb3VzUmV2aXNpb259OworICAgICAgICBTdHJpbmdbXSBkaWZmQ21kID0gbmV3IFN0cmluZ1tdIHsKKyAgICAgICAgICAgIEhnQ29tbWFuZENvbnN0YW50cy5ESUZGX0NNRCwKKyAgICAgICAgICAgIEhnQ29tbWFuZENvbnN0YW50cy5SRVZJU0lPTl9PUFRJT04sCisgICAgICAgICAgICAiIiArIHByZXZpb3VzUmV2aXNpb24gfTsKICAgICAgICAgSGdEaWZmQ29uc3VtZXIgZGlmZkNvbnN1bWVyID0gbmV3IEhnRGlmZkNvbnN1bWVyKCBnZXRMb2dnZXIoKSwgd29ya2luZ0RpciApOwogICAgICAgICBTY21SZXN1bHQgZGlmZlJlc3VsdCA9IEhnVXRpbHMuZXhlY3V0ZSggZGlmZkNvbnN1bWVyLCBnZXRMb2dnZXIoKSwgd29ya2luZ0RpciwgZGlmZkNtZCApOwogCkBAIC05NSw3ICsxMDIsNiBAQAogICAgICAgICByZXR1cm4gbmV3IFVwZGF0ZVNjbVJlc3VsdFdpdGhSZXZpc2lvbiggdXBkYXRlZEZpbGVzLCBjaGFuZ2VzLCBTdHJpbmcudmFsdWVPZiggY3VycmVudFJldmlzaW9uICksIGRpZmZSZXN1bHQgKTsKICAgICB9CiAKLQogICAgIHByb3RlY3RlZCBDaGFuZ2VMb2dDb21tYW5kIGdldENoYW5nZUxvZ0NvbW1hbmQoKQogICAgIHsKICAgICAgICAgSGdDaGFuZ2VMb2dDb21tYW5kIGNvbW1hbmQgPSBuZXcgSGdDaGFuZ2VMb2dDb21tYW5kKCk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL3JlcG9zaXRvcnkvSGdTY21Qcm92aWRlclJlcG9zaXRvcnkuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvcmVwb3NpdG9yeS9IZ1NjbVByb3ZpZGVyUmVwb3NpdG9yeS5qYXZhCmluZGV4IGNlMzkwZjIuLmM4MGVhYTcgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvcmVwb3NpdG9yeS9IZ1NjbVByb3ZpZGVyUmVwb3NpdG9yeS5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvcmVwb3NpdG9yeS9IZ1NjbVByb3ZpZGVyUmVwb3NpdG9yeS5qYXZhCkBAIC0yNiw2ICsyNiw3IEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86dGh1cm5lci5ydXBlcnRAeW1vbm8ubmV0Ij50aHVybmVyIHJ1cGVydDwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEhnU2NtUHJvdmlkZXJSZXBvc2l0b3J5CiAgICAgZXh0ZW5kcyBTY21Qcm92aWRlclJlcG9zaXRvcnlXaXRoSG9zdApAQCAtNTgsOCArNTksOCBAQAogCiAgICAgcHVibGljIFN0cmluZyBnZXRVUkkoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHByb3RvY29sICsgKCBuZWVkc0F1dGhlbnRpY2F0aW9uKCkgPyBhZGRVc2VyKCkgKyBhZGRQYXNzd29yZCgpICsgYWRkQXQoKSA6ICIiICkgKyBhZGRIb3N0KCkgKyBhZGRQb3J0KCkgKwotICAgICAgICAgICAgYWRkUGF0aCgpOworICAgICAgICByZXR1cm4gcHJvdG9jb2wgKyAoIG5lZWRzQXV0aGVudGljYXRpb24oKSA/IGFkZFVzZXIoKSArIGFkZFBhc3N3b3JkKCkgKyBhZGRBdCgpIDogIiIgKSArIGFkZEhvc3QoKQorICAgICAgICAgICAgKyBhZGRQb3J0KCkgKyBhZGRQYXRoKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC05Myw4ICs5NCw5IEBACiAKICAgICAgICAgaWYgKCBtc2cgIT0gbnVsbCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1zZyA9ICJTb21ldGhpbmcgY291bGQgYmUgd3JvbmcgYWJvdXQgdGhlIHJlcG9zaXRvcnkgVVJMOiAiICsgb3JnVXJsICsgIlxuUmVhc29uOiAiICsgbXNnICsKLSAgICAgICAgICAgICAgICAiXG5DaGVjayBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9zY20gZm9yIHVzYWdlIGFuZCBoaW50cy4iOworICAgICAgICAgICAgbXNnID0KKyAgICAgICAgICAgICAgICAiU29tZXRoaW5nIGNvdWxkIGJlIHdyb25nIGFib3V0IHRoZSByZXBvc2l0b3J5IFVSTDogIiArIG9yZ1VybCArICJcblJlYXNvbjogIiArIG1zZworICAgICAgICAgICAgICAgICAgICArICJcbkNoZWNrIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3NjbSBmb3IgdXNhZ2UgYW5kIGhpbnRzLiI7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1zZzsKICAgICB9CkBAIC0xNDIsMzUgKzE0NCwyOSBAQAogICAgIHsKICAgICAgICAgaWYgKCBwcm90b2NvbCAhPSBGSUxFICkKICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nW10gc3BsaXQgPSB1cmwuc3BsaXQoICI6IiApOwotICAgICAgICAgICAgaWYgKCBzcGxpdC5sZW5ndGggPT0gMiApCisgICAgICAgICAgICBpbnQgaW5kZXhTbGFzaCA9IHVybC5pbmRleE9mKCAiLyIgKTsKKworICAgICAgICAgICAgU3RyaW5nIGhvc3RQb3J0ID0gdXJsOworICAgICAgICAgICAgaWYgKCBpbmRleFNsYXNoID4gMCApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2V0SG9zdCggc3BsaXRbMF0gKTsKLSAgICAgICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKCBzcGxpdFswXS5sZW5ndGgoKSArIDEgKTsKLSAgICAgICAgICAgICAgICBzcGxpdCA9IHNwbGl0WzFdLnNwbGl0KCAiLyIgKTsKLSAgICAgICAgICAgICAgICBpZiAoIHNwbGl0Lmxlbmd0aCA9PSAyICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoIHNwbGl0WzBdLmxlbmd0aCgpICk7Ci0gICAgICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRQb3J0KCBJbnRlZ2VyLnZhbHVlT2YoIHNwbGl0WzBdICkuaW50VmFsdWUoKSApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhdGNoICggTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL0lnbm9yZSAtIGVycm9yIHdpbGwgbWFuaWZlc3QgaXRzZWxmIGxhdGVyLgotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGhvc3RQb3J0ID0gdXJsLnN1YnN0cmluZyggMCwgaW5kZXhTbGFzaCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnQgaW5kZXhDb2xvbiA9IGhvc3RQb3J0LmluZGV4T2YoICI6IiApOworICAgICAgICAgICAgaWYgKCBpbmRleENvbG9uID4gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2V0SG9zdCggaG9zdFBvcnQuc3Vic3RyaW5nKCAwLCBpbmRleENvbG9uICkgKTsKKyAgICAgICAgICAgICAgICB1cmwgPSBTdHJpbmdVdGlscy5yZXBsYWNlKCB1cmwsIGdldEhvc3QoKSwgIiIgKTsKKyAgICAgICAgICAgICAgICBzZXRQb3J0KCBJbnRlZ2VyLnBhcnNlSW50KCBob3N0UG9ydC5zdWJzdHJpbmcoIGluZGV4Q29sb24gKyAxICkgKSApOworICAgICAgICAgICAgICAgIHVybCA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoIHVybCwgIjoiICsgZ2V0UG9ydCgpLCAiIiApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNwbGl0ID0gdXJsLnNwbGl0KCAiLyIgKTsKLSAgICAgICAgICAgICAgICBpZiAoIHNwbGl0Lmxlbmd0aCA+IDEgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnN1YnN0cmluZyggc3BsaXRbMF0ubGVuZ3RoKCkgKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0SG9zdCggc3BsaXRbMF0gKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0SG9zdCggaG9zdFBvcnQgKTsKKyAgICAgICAgICAgICAgICB1cmwgPSBTdHJpbmdVdGlscy5yZXBsYWNlKCB1cmwsIGdldEhvc3QoKSwgIiIgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIHJldHVybiB1cmw7CiAgICAgfQogCkBAIC0yNTQsOSArMjUwLDExIEBACiAgICAgICAgIHJldHVybiBwcm90b2NvbCA9PSBTRlRQIHx8IHByb3RvY29sID09IEZUUCB8fCBwcm90b2NvbCA9PSBIVFRQUyB8fCBwcm90b2NvbCA9PSBBRlRQOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCiAgICAgewotICAgICAgICByZXR1cm4gIkhnIFJlcG9zaXRvcnkgSW50ZXJwcmV0ZWQgZnJvbTogIiArIG9yZ1VybCArICI6XG5Qcm90b2NvbDogIiArIHByb3RvY29sICsgIlxuSG9zdDogIiArIGdldEhvc3QoKSArCi0gICAgICAgICAgICAiXG5Qb3J0OiAiICsgZ2V0UG9ydCgpICsgIlxuVXNlcm5hbWU6ICIgKyBnZXRVc2VyKCkgKyAiXG5QYXNzd29yZDogIiArIGdldFBhc3N3b3JkKCkgKyAiXG5QYXRoOiAiICsgcGF0aDsKKyAgICAgICAgcmV0dXJuICJIZyBSZXBvc2l0b3J5IEludGVycHJldGVkIGZyb206ICIgKyBvcmdVcmwgKyAiOlxuUHJvdG9jb2w6ICIgKyBwcm90b2NvbCArICJcbkhvc3Q6ICIgKyBnZXRIb3N0KCkKKyAgICAgICAgICAgICsgIlxuUG9ydDogIiArIGdldFBvcnQoKSArICJcblVzZXJuYW1lOiAiICsgZ2V0VXNlcigpICsgIlxuUGFzc3dvcmQ6ICIgKyBnZXRQYXNzd29yZCgpICsgIlxuUGF0aDogIgorICAgICAgICAgICAgKyBwYXRoOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9zaXRlL3NpdGUueG1sIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL3NpdGUvc2l0ZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA2YjBjNAotLS0gL2Rldi9udWxsCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy9zaXRlL3NpdGUueG1sCkBAIC0wLDAgKzEsMzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz4KKworPCEtLQorICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICB+IHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgfiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgIH4gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB+IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgfgorICB+ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIH4KKyAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgIH4gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgfiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgfiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgfiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgIH4gdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorCis8cHJvamVjdCBuYW1lPSJNYXZlbiBTQ00gSEcgUHJvdmlkZXIiPgorICA8Ym9keT4KKyAgICA8bWVudSByZWY9InBhcmVudCIgLz4KKworICAgIDxtZW51IG5hbWU9Ik92ZXJ2aWV3Ij4KKyAgICAgIDxpdGVtIG5hbWU9IkludHJvZHVjdGlvbiIgaHJlZj0iaW5kZXguaHRtbCIvPgorICAgIDwvbWVudT4KKworICAgIDxtZW51IHJlZj0icmVwb3J0cyIgaW5oZXJpdD0iYm90dG9tIiAvPgorICA8L2JvZHk+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL0hnUmVwb1V0aWxzLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL0hnUmVwb1V0aWxzLmphdmEKaW5kZXggZTY2YzM3Yi4uNzBkZTM3MiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9IZ1JlcG9VdGlscy5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvSGdSZXBvVXRpbHMuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogCiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21SZXN1bHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5IZ0NvbW1hbmQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuaGcuY29tbWFuZC5IZ0NvbW1hbmRDb25zdGFudHM7CiBpbXBvcnQgb3JnLmNvZGVoYXVzLnBsZXh1cy5QbGV4dXNUZXN0Q2FzZTsKIGltcG9ydCBvcmcuY29kZWhhdXMucGxleHVzLnV0aWwuRmlsZVV0aWxzOwogCkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvLyBJbml0IHJlcG9zaXRvcnkKLSAgICAgICAgU3RyaW5nW10gaW5pdF9jbWQgPSBuZXcgU3RyaW5nW117SGdDb21tYW5kLklOSVRfQ01EfTsKKyAgICAgICAgU3RyaW5nW10gaW5pdF9jbWQgPSBuZXcgU3RyaW5nW117SGdDb21tYW5kQ29uc3RhbnRzLklOSVRfQ01EfTsKICAgICAgICAgSGdVdGlscy5leGVjdXRlKCBXT1JLSU5HX0RJUiwgaW5pdF9jbWQgKTsKIAogICAgICAgICAvLyBDcmVhdGUgYW5kIGFkZCBmaWxlcyB0byByZXBvc2l0b3J5CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8vQWRkIHRvIHJlcG9zaXRvcnkKLSAgICAgICAgU3RyaW5nW10gYWRkX2NtZCA9IG5ldyBTdHJpbmdbXXtIZ0NvbW1hbmQuQUREX0NNRH07CisgICAgICAgIFN0cmluZ1tdIGFkZF9jbWQgPSBuZXcgU3RyaW5nW117SGdDb21tYW5kQ29uc3RhbnRzLkFERF9DTUR9OwogICAgICAgICBTY21GaWxlU2V0IGZpbGVzVG9BZGQgPSBuZXcgU2NtRmlsZVNldCggbmV3IEZpbGUoICIiICksIGZpbGVzICk7CiAgICAgICAgIGFkZF9jbWQgPSBIZ1V0aWxzLmV4cGFuZENvbW1hbmRMaW5lKCBhZGRfY21kLCBmaWxlc1RvQWRkICk7CiAgICAgICAgIFNjbVJlc3VsdCByZXN1bHQgPSBIZ1V0aWxzLmV4ZWN1dGUoIFdPUktJTkdfRElSLCBhZGRfY21kICk7CkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8vIENvbW1pdCB0aGUgaW5pdGlhbCByZXBvc2l0b3J5Ci0gICAgICAgIFN0cmluZ1tdIGNvbW1pdF9jbWQgPSBuZXcgU3RyaW5nW117SGdDb21tYW5kLkNPTU1JVF9DTUQsIEhnQ29tbWFuZC5NRVNTQUdFX09QVElPTiwgQ09NTUlUX01FU1NBR0V9OworICAgICAgICBTdHJpbmdbXSBjb21taXRfY21kID0gbmV3IFN0cmluZ1tde0hnQ29tbWFuZENvbnN0YW50cy5DT01NSVRfQ01ELCBIZ0NvbW1hbmRDb25zdGFudHMuTUVTU0FHRV9PUFRJT04sIENPTU1JVF9NRVNTQUdFfTsKICAgICAgICAgcmVzdWx0ID0gSGdVdGlscy5leGVjdXRlKCBXT1JLSU5HX0RJUiwgY29tbWl0X2NtZCApOwogICAgICAgICBpZiAoICFyZXN1bHQuaXNTdWNjZXNzKCkgKQogICAgICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL3JlcG9zaXRvcnkvSGdTY21Qcm92aWRlclJlcG9zaXRvcnlUZXN0LmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1oZy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2hnL3JlcG9zaXRvcnkvSGdTY21Qcm92aWRlclJlcG9zaXRvcnlUZXN0LmphdmEKaW5kZXggZWNjZDMxMC4uZjViNWNjMiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItaGcvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9oZy9yZXBvc2l0b3J5L0hnU2NtUHJvdmlkZXJSZXBvc2l0b3J5VGVzdC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWhnL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvaGcvcmVwb3NpdG9yeS9IZ1NjbVByb3ZpZGVyUmVwb3NpdG9yeVRlc3QuamF2YQpAQCAtNjMsMTkgKzYzLDE5IEBACiAgICAgICAgIFN0cmluZyB1cmwgPSAic3NoOi8vdXNlcm5hbWU6cGFzc3dvcmRAbXlob3N0LmNvbS9+L2Rldi9tYXZlbiI7CiAgICAgICAgIEhnU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8gPSBuZXcgSGdTY21Qcm92aWRlclJlcG9zaXRvcnkoIHVybCApOwogICAgICAgICBhc3NlcnRFcXVhbHMoIHVybCwgcmVwby5nZXRVUkkoKSApOwotICAgICAgICAvL2Fzc2VydE51bGwoIHJlcG8udmFsaWRhdGVVUkkoKSApOworICAgICAgICBhc3NlcnROdWxsKCByZXBvLnZhbGlkYXRlVVJJKCkgKTsKIAogICAgICAgICAvLzIuIFRlc3Qgd2l0aCBhYnNvbHV0ZSBwYXRoCiAgICAgICAgIHVybCA9ICJzc2g6Ly91c2VybmFtZTpwYXNzd29yZEBteWhvc3QuY29tL2hvbWUvdXNlcm5hbWUvZGV2L21hdmVuIjsKICAgICAgICAgcmVwbyA9IG5ldyBIZ1NjbVByb3ZpZGVyUmVwb3NpdG9yeSggdXJsICk7CiAgICAgICAgIGFzc2VydEVxdWFscyggdXJsLCByZXBvLmdldFVSSSgpICk7Ci0gICAgICAgIC8vYXNzZXJ0TnVsbCggcmVwby52YWxpZGF0ZVVSSSgpICk7CisgICAgICAgIGFzc2VydE51bGwoIHJlcG8udmFsaWRhdGVVUkkoKSApOwogCiAgICAgICAgIC8vMy4gVGVzdCB3aXRoIHBhc3N3b3JkbGVzcyAoUHVibGljLWtleSBhdXRoKQogICAgICAgICBTdHJpbmcgaW5jb21wbGV0ZVVybCA9ICJzc2g6Ly91c2VybmFtZUBteWhvc3QuY29tL2hvbWUvdXNlcm5hbWUvZGV2L21hdmVuIjsKICAgICAgICAgcmVwbyA9IG5ldyBIZ1NjbVByb3ZpZGVyUmVwb3NpdG9yeSggaW5jb21wbGV0ZVVybCApOwotICAgICAgICBhc3NlcnRFcXVhbHMoIGluY29tcGxldGVVcmwsIHJlcG8uZ2V0VVJJKCkgKTsgLy9UCi0gICAgICAgIC8vYXNzZXJ0TnVsbCggcmVwby52YWxpZGF0ZVVSSSgpICk7CisgICAgICAgIGFzc2VydEVxdWFscyggaW5jb21wbGV0ZVVybCwgcmVwby5nZXRVUkkoKSApOworICAgICAgICBhc3NlcnROdWxsKCByZXBvLnZhbGlkYXRlVVJJKCkgKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0SFRUUFJlcG8oKQpAQCAtODQsMjQgKzg0LDQ1IEBACiAgICAgICAgIC8vMS4gVGVzdCB3aXRoIHJlbGF0aXYgcGF0aAogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly93d3cubXlob3N0LmNvbS9+dXNlcm5hbWUvZGV2L21hdmVuIjsKICAgICAgICAgSGdTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbyA9IG5ldyBIZ1NjbVByb3ZpZGVyUmVwb3NpdG9yeSggdXJsICk7Ci0gICAgICAgIC8vYXNzZXJ0RXF1YWxzKCB1cmwsIHJlcG8uZ2V0VVJJKCkgKTsKLSAgICAgICAgLy9hc3NlcnROdWxsKCByZXBvLnZhbGlkYXRlVVJJKCkgKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCB1cmwsIHJlcG8uZ2V0VVJJKCkgKTsKKyAgICAgICAgYXNzZXJ0TnVsbCggcmVwby52YWxpZGF0ZVVSSSgpICk7CiAKICAgICAgICAgLy8yLiBUZXN0IHdpdGggYWJzb2x1dGUgcGF0aAogICAgICAgICB1cmwgPSAiaHR0cDovL3d3dy5teWhvc3QuY29tL2Rldi9tYXZlbiI7CiAgICAgICAgIHJlcG8gPSBuZXcgSGdTY21Qcm92aWRlclJlcG9zaXRvcnkoIHVybCApOwogICAgICAgICBhc3NlcnRFcXVhbHMoIHVybCwgcmVwby5nZXRVUkkoKSApOwotICAgICAgICAvL2Fzc2VydE51bGwoIHJlcG8udmFsaWRhdGVVUkkoKSApOworICAgICAgICBhc3NlcnROdWxsKCByZXBvLnZhbGlkYXRlVVJJKCkgKTsKIAogICAgICAgICAvLzMuIFRlc3Qgd2l0aCB1bmVzc2VzYXJ5IGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uCiAgICAgICAgIHJlcG8uc2V0UGFzc3dvcmQoICJQYXNzd29yZCIgKTsKICAgICAgICAgcmVwby5zZXRVc2VyKCAiVXNlciIgKTsKICAgICAgICAgcmVwby5zZXRQYXNzcGhyYXNlKCAiUGFzc3BocmFzZSIgKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCAiaHR0cDovL3d3dy5teWhvc3QuY29tL2Rldi9tYXZlbiIsIHJlcG8uZ2V0VVJJKCkgKTsKLSAgICAgICAgLy9hc3NlcnROdWxsKCByZXBvLnZhbGlkYXRlVVJJKCkgKTsKKyAgICAgICAgYXNzZXJ0TnVsbCggcmVwby52YWxpZGF0ZVVSSSgpICk7CiAgICAgICAgIHJlcG8uc2V0UG9ydCggODEgKTsKLSAgICAgICAgLy9hc3NlcnRFcXVhbHMoICJodHRwOi8vd3d3Lm15aG9zdC5jb206ODEvZGV2L21hdmVuIiwgcmVwby5nZXRVUkkoKSApOwotICAgICAgICAvL2Fzc2VydE51bGwoIHJlcG8udmFsaWRhdGVVUkkoKSApOworICAgICAgICBhc3NlcnRFcXVhbHMoICJodHRwOi8vd3d3Lm15aG9zdC5jb206ODEvZGV2L21hdmVuIiwgcmVwby5nZXRVUkkoKSApOworICAgICAgICBhc3NlcnROdWxsKCByZXBvLnZhbGlkYXRlVVJJKCkgKTsKICAgICAgICAgYXNzZXJ0VHJ1ZSggdHJ1ZSApOwogICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgU0NNLTM5MQorICAgICAqCisgICAgICogQHRocm93cyBFeGNlcHRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VIb3N0QW5kUG9ydCgpCisgICAgICAgIHRocm93cyBFeGNlcHRpb24KKyAgICB7CisgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovL2xvY2FsaG9zdDo4MDAwLyI7CisgICAgICAgIEhnU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8gPSBuZXcgSGdTY21Qcm92aWRlclJlcG9zaXRvcnkoIHVybCApOworICAgICAgICBhc3NlcnRFcXVhbHMoIHJlcG8uZ2V0VVJJKCksIHVybCApOworCisgICAgICAgIHVybCA9ICJodHRwOi8vbG9jYWxob3N0LyI7CisgICAgICAgIHJlcG8gPSBuZXcgSGdTY21Qcm92aWRlclJlcG9zaXRvcnkoIHVybCApOworICAgICAgICBhc3NlcnRFcXVhbHMoIHJlcG8uZ2V0VVJJKCksIHVybCApOworCisgICAgICAgIHVybCA9ICJodHRwOi8vd3d3Lm15aG9zdC5jb206ODEvZGV2L21hdmVuIjsKKyAgICAgICAgcmVwbyA9IG5ldyBIZ1NjbVByb3ZpZGVyUmVwb3NpdG9yeSggdXJsICk7CisgICAgICAgIGFzc2VydEVxdWFscyggcmVwby5nZXRVUkkoKSwgdXJsICk7CisgICAgfQogfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3BvbS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1sb2NhbC9wb20ueG1sCmluZGV4IDcxNjE3NzUuLmM2ZDE5MWUgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3BvbS54bWwKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItbG9jYWwvcG9tLnhtbApAQCAtMSw0ICsxLDYgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCEtLQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPCEtLQogICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKICAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKICAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpAQCAtMTgsMTUgKzIwLDE5IEBACiAgIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxwYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyczwvYXJ0aWZhY3RJZD4KICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXJzPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+Ci0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwogICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItbG9jYWw8L2FydGlmYWN0SWQ+CisKICAgPG5hbWU+TWF2ZW4gU0NNIExvY2FsIFByb3ZpZGVyPC9uYW1lPgotICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CisgIDxkZXNjcmlwdGlvbj5TQ00gUHJvdmlkZXIgaW1wbGVtZW50YXRpb24gZm9yIExvY2FsLjwvZGVzY3JpcHRpb24+CisKICAgPGJ1aWxkPgogICAgIDxwbHVnaW5zPgogICAgICAgPHBsdWdpbj4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvTG9jYWxTY21Qcm92aWRlci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItbG9jYWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9sb2NhbC9Mb2NhbFNjbVByb3ZpZGVyLmphdmEKaW5kZXggNDNhZDg5Yy4uNGJiNzhhMiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItbG9jYWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9sb2NhbC9Mb2NhbFNjbVByb3ZpZGVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItbG9jYWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9sb2NhbC9Mb2NhbFNjbVByb3ZpZGVyLmphdmEKQEAgLTUxLDExICs1MSwxMyBAQAogcHVibGljIGNsYXNzIExvY2FsU2NtUHJvdmlkZXIKICAgICBleHRlbmRzIEFic3RyYWN0U2NtUHJvdmlkZXIKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2NtVHlwZSgpCiAgICAgewogICAgICAgICByZXR1cm4gImxvY2FsIjsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTY21Qcm92aWRlclJlcG9zaXRvcnkgbWFrZVByb3ZpZGVyU2NtUmVwb3NpdG9yeSggU3RyaW5nIHNjbVNwZWNpZmljVXJsLCBjaGFyIGRlbGltaXRlciApCiAgICAgICAgIHRocm93cyBTY21SZXBvc2l0b3J5RXhjZXB0aW9uCiAgICAgewpAQCAtNjMsOSArNjUsOCBAQAogCiAgICAgICAgIGlmICggdG9rZW5zLmxlbmd0aCAhPSAyICkKICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IFNjbVJlcG9zaXRvcnlFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgIlRoZSBjb25uZWN0aW9uIHN0cmluZyBkaWRuJ3QgY29udGFpbiB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIHRva2Vucy4gRXhwZWN0ZWQgMiB0b2tlbnMgYnV0IGdvdCAiICsKLSAgICAgICAgICAgICAgICAgICAgdG9rZW5zLmxlbmd0aCArICIgdG9rZW5zLiIgKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTY21SZXBvc2l0b3J5RXhjZXB0aW9uKCAiVGhlIGNvbm5lY3Rpb24gc3RyaW5nIGRpZG4ndCBjb250YWluIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgdG9rZW5zLiAiCisgICAgICAgICAgICAgICAgKyAiRXhwZWN0ZWQgMiB0b2tlbnMgYnV0IGdvdCAiICsgdG9rZW5zLmxlbmd0aCArICIgdG9rZW5zLiIgKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzNCw5ICsxMzUsNyBAQAogICAgICAgICByZXR1cm4gbW9kdWxlOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciNhZGQob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQWRkU2NtUmVzdWx0IGFkZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC0xNDcsNiArMTQ2LDcgQEAKICAgICAgICAgcmV0dXJuIChBZGRTY21SZXN1bHQpIGNvbW1hbmQuZXhlY3V0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENoYW5nZUxvZ1NjbVJlc3VsdCBjaGFuZ2Vsb2coIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC0xNTgsOSArMTU4LDcgQEAKICAgICAgICAgcmV0dXJuIChDaGFuZ2VMb2dTY21SZXN1bHQpIGNvbW1hbmQuZXhlY3V0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciNjaGVja2luKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoZWNrSW5TY21SZXN1bHQgY2hlY2tpbiggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtMTcyLDkgKzE3MCw3IEBACiAgICAgICAgIHJldHVybiAoQ2hlY2tJblNjbVJlc3VsdCkgY29tbWFuZC5leGVjdXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI2NoZWNrb3V0KG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoZWNrT3V0U2NtUmVzdWx0IGNoZWNrb3V0KCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTE4NiwxOCArMTgyLDcgQEAKICAgICAgICAgcmV0dXJuIChDaGVja091dFNjbVJlc3VsdCkgY29tbWFuZC5leGVjdXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogTGlzdCBlYWNoIGVsZW1lbnQgKGZpbGVzIGFuZCBkaXJlY3Rvcmllcykgb2YgPEI+ZmlsZVNldDwvQj4gYXMgdGhleSBleGlzdCBpbiB0aGUgcmVwb3NpdG9yeS4KLSAgICAgKgotICAgICAqIEBwYXJhbSByZXBvc2l0b3J5IHRoZSBzb3VyY2UgY29udHJvbCBzeXN0ZW0KLSAgICAgKiBAcGFyYW0gZmlsZVNldCAgICB0aGUgZmlsZXMgdG8gbGlzdAotICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzCi0gICAgICogQHJldHVybiBUaGUgbGlzdCBvZiBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeQotICAgICAqIEB0aHJvd3Mgb3JnLmFwYWNoZS5tYXZlbi5zY20uTm9TdWNoQ29tbWFuZFNjbUV4Y2VwdGlvbgotICAgICAqICAgICAgICAgIHVubGVzcyBvdmVycmlkZW4gYnkgc3ViY2xhc3MKLSAgICAgKiBAdGhyb3dzIG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUV4Y2VwdGlvbgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgTGlzdFNjbVJlc3VsdCBsaXN0KCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKQEAgLTIwOCw5ICsxOTMsNyBAQAogICAgICAgICByZXR1cm4gKExpc3RTY21SZXN1bHQpIGNvbW1hbmQuZXhlY3V0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciN1cGRhdGUob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1sb2NhbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2xvY2FsL2NvbW1hbmQvYWRkL0xvY2FsQWRkQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItbG9jYWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9sb2NhbC9jb21tYW5kL2FkZC9Mb2NhbEFkZENvbW1hbmQuamF2YQppbmRleCBhNWE0OWY5Li5iZTVlNmI1IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1sb2NhbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2xvY2FsL2NvbW1hbmQvYWRkL0xvY2FsQWRkQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvY29tbWFuZC9hZGQvTG9jYWxBZGRDb21tYW5kLmphdmEKQEAgLTQyLDYgKzQyLDcgQEAKICAgICBleHRlbmRzIEFic3RyYWN0QWRkQ29tbWFuZAogICAgIGltcGxlbWVudHMgTG9jYWxDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU2NtUmVzdWx0IGV4ZWN1dGVBZGRDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGJpbmFyeSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvY29tbWFuZC9jaGFuZ2Vsb2cvTG9jYWxDaGFuZ2VMb2dDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1sb2NhbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2xvY2FsL2NvbW1hbmQvY2hhbmdlbG9nL0xvY2FsQ2hhbmdlTG9nQ29tbWFuZC5qYXZhCmluZGV4IGM3ODczYmEuLjU3YzlhZWQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvY29tbWFuZC9jaGFuZ2Vsb2cvTG9jYWxDaGFuZ2VMb2dDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItbG9jYWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9sb2NhbC9jb21tYW5kL2NoYW5nZWxvZy9Mb2NhbENoYW5nZUxvZ0NvbW1hbmQuamF2YQpAQCAtNDYsNiArNDYsNyBAQAogcHVibGljIGNsYXNzIExvY2FsQ2hhbmdlTG9nQ29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RDaGFuZ2VMb2dDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hhbmdlTG9nU2NtUmVzdWx0IGV4ZWN1dGVDaGFuZ2VMb2dDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGUgc3RhcnREYXRlLCBEYXRlIGVuZERhdGUsIFNjbUJyYW5jaCBicmFuY2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGVQYXR0ZXJuICkKQEAgLTEyOSw2ICsxMzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbmREYXRlLmFmdGVyKCBtb2RpZmllZERhdGUgKSB8fCBlbmREYXRlLmVxdWFscyggbW9kaWZpZWREYXRlICkgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3AKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvY29tbWFuZC9jaGVja2luL0xvY2FsQ2hlY2tJbkNvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvY29tbWFuZC9jaGVja2luL0xvY2FsQ2hlY2tJbkNvbW1hbmQuamF2YQppbmRleCBjZmNjOWE4Li4xNGNhNDliIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1sb2NhbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2xvY2FsL2NvbW1hbmQvY2hlY2tpbi9Mb2NhbENoZWNrSW5Db21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItbG9jYWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9sb2NhbC9jb21tYW5kL2NoZWNraW4vTG9jYWxDaGVja0luQ29tbWFuZC5qYXZhCkBAIC00Nyw2ICs0Nyw3IEBACiAgICAgZXh0ZW5kcyBBYnN0cmFjdENoZWNrSW5Db21tYW5kCiAgICAgaW1wbGVtZW50cyBMb2NhbENvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDaGVja0luU2NtUmVzdWx0IGV4ZWN1dGVDaGVja0luQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1sb2NhbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2xvY2FsL2NvbW1hbmQvY2hlY2tvdXQvTG9jYWxDaGVja091dENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvY29tbWFuZC9jaGVja291dC9Mb2NhbENoZWNrT3V0Q29tbWFuZC5qYXZhCmluZGV4IGExNzFjOTkuLmIxNjFmNzcgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvY29tbWFuZC9jaGVja291dC9Mb2NhbENoZWNrT3V0Q29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvY29tbWFuZC9jaGVja291dC9Mb2NhbENoZWNrT3V0Q29tbWFuZC5qYXZhCkBAIC00Nyw2ICs0Nyw3IEBACiAgICAgZXh0ZW5kcyBBYnN0cmFjdENoZWNrT3V0Q29tbWFuZAogICAgIGltcGxlbWVudHMgTG9jYWxDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hlY2tPdXRTY21SZXN1bHQgZXhlY3V0ZUNoZWNrT3V0Q29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiB2ZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItbG9jYWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9sb2NhbC9jb21tYW5kL2xpc3QvTG9jYWxMaXN0Q29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItbG9jYWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9sb2NhbC9jb21tYW5kL2xpc3QvTG9jYWxMaXN0Q29tbWFuZC5qYXZhCmluZGV4IDk3YTRjNDQuLjEyMmViNTUgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvY29tbWFuZC9saXN0L0xvY2FsTGlzdENvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1sb2NhbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2xvY2FsL2NvbW1hbmQvbGlzdC9Mb2NhbExpc3RDb21tYW5kLmphdmEKQEAgLTQyLDE2ICs0Miw3IEBACiBwdWJsaWMgY2xhc3MgTG9jYWxMaXN0Q29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RMaXN0Q29tbWFuZAogewotICAgIC8qKgotICAgICAqIExpc3QgY29udGVudHMgb2YgdGhlIHJlbW90ZSByZXBvc2l0b3J5Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVwbyAgICAgIHdoYXQgdG8gbGlzdAotICAgICAqIEBwYXJhbSBmaWxlU2V0ICAgdGhlIGZpbGVzIHRvIGxpc3QKLSAgICAgKiBAcGFyYW0gcmVjdXJzaXZlIHdoZXRoZXIgbGlzdCBzaG91bGQgcmV0dXJuIHN1YmZvbGRlciBsaXN0aW5nCi0gICAgICogQHJldHVybiB0aGUgbGlzdCBvZiBmaWxlcwotICAgICAqIEB0aHJvd3Mgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRXhjZXB0aW9uCi0gICAgICoKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBMaXN0U2NtUmVzdWx0IGV4ZWN1dGVMaXN0Q29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwgYm9vbGVhbiByZWN1cnNpdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1sb2NhbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2xvY2FsL2NvbW1hbmQvbGlzdC9Mb2NhbExpc3RTY21SZXN1bHQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvY29tbWFuZC9saXN0L0xvY2FsTGlzdFNjbVJlc3VsdC5qYXZhCmluZGV4IDcyMjI3YTMuLjY4MjFkNzMgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvY29tbWFuZC9saXN0L0xvY2FsTGlzdFNjbVJlc3VsdC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvY29tbWFuZC9saXN0L0xvY2FsTGlzdFNjbVJlc3VsdC5qYXZhCkBAIC0xLDUgKzEsMjQgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIubG9jYWwuY29tbWFuZC5saXN0OwogCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQubGlzdC5MaXN0U2NtUmVzdWx0OwogCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CkBAIC0xMyw2ICszMiw2IEBACiB7CiAgICAgcHVibGljIExvY2FsTGlzdFNjbVJlc3VsdCggU3RyaW5nIGNvbW1hbmRMaW5lLCBMaXN0IGZpbGVzICkKICAgICB7Ci0gICAgICAgIHN1cGVyKCBjb21tYW5kTGluZSwgZmlsZXMpOworICAgICAgICBzdXBlciggY29tbWFuZExpbmUsIGZpbGVzICk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItbG9jYWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9sb2NhbC9jb21tYW5kL3VwZGF0ZS9Mb2NhbFVwZGF0ZUNvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvY29tbWFuZC91cGRhdGUvTG9jYWxVcGRhdGVDb21tYW5kLmphdmEKaW5kZXggN2I0YmY4OC4uMDdkYWFhZCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItbG9jYWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9sb2NhbC9jb21tYW5kL3VwZGF0ZS9Mb2NhbFVwZGF0ZUNvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1sb2NhbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2xvY2FsL2NvbW1hbmQvdXBkYXRlL0xvY2FsVXBkYXRlQ29tbWFuZC5qYXZhCkBAIC00OSw2ICs0OSw3IEBACiAgICAgZXh0ZW5kcyBBYnN0cmFjdFVwZGF0ZUNvbW1hbmQKICAgICBpbXBsZW1lbnRzIExvY2FsQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFVwZGF0ZVNjbVJlc3VsdCBleGVjdXRlVXBkYXRlQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiB2ZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKQEAgLTg1LDggKzg2LDggQEAKIAogICAgICAgICBpZiAoICFiYXNlRGVzdGluYXRpb24uZXhpc3RzKCkgJiYgIWJhc2VEZXN0aW5hdGlvbi5pc0RpcmVjdG9yeSgpICkKICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IFNjbUV4Y2VwdGlvbiggIlRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgaXNuJ3QgYSBkaXJlY3Rvcnkgb3IgZG9lc24ndCBleGlzdCAoIiArCi0gICAgICAgICAgICAgICAgYmFzZURlc3RpbmF0aW9uLmdldEFic29sdXRlUGF0aCgpICsgIikuIiApOworICAgICAgICAgICAgdGhyb3cgbmV3IFNjbUV4Y2VwdGlvbiggIlRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgaXNuJ3QgYSBkaXJlY3Rvcnkgb3IgZG9lc24ndCBleGlzdCAoIgorICAgICAgICAgICAgICAgICsgYmFzZURlc3RpbmF0aW9uLmdldEFic29sdXRlUGF0aCgpICsgIikuIiApOwogICAgICAgICB9CiAKICAgICAgICAgTGlzdCB1cGRhdGVkRmlsZXM7CkBAIC0xOTksOSArMjAwLDcgQEAKICAgICAgICAgcmV0dXJuIHVwZGF0ZWRGaWxlczsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQudXBkYXRlLkFic3RyYWN0VXBkYXRlQ29tbWFuZCNnZXRDaGFuZ2VMb2dDb21tYW5kKCkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDaGFuZ2VMb2dDb21tYW5kIGdldENoYW5nZUxvZ0NvbW1hbmQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBMb2NhbENoYW5nZUxvZ0NvbW1hbmQoKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvbWV0YWRhdGEvTG9jYWxTY21NZXRhZGF0YVV0aWxzLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1sb2NhbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2xvY2FsL21ldGFkYXRhL0xvY2FsU2NtTWV0YWRhdGFVdGlscy5qYXZhCmluZGV4IGRiNjNkYTAuLjE0ZTFhN2QgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvbWV0YWRhdGEvTG9jYWxTY21NZXRhZGF0YVV0aWxzLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItbG9jYWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9sb2NhbC9tZXRhZGF0YS9Mb2NhbFNjbU1ldGFkYXRhVXRpbHMuamF2YQpAQCAtNTYsNiArNTYsMTAgQEAKIAogICAgIC8qKgogICAgICAqIEJ1aWxkcyBMb2NhbFNjbU1ldGFkYXRhIGJhc2VkIG9uIGNvbnRlbnRzIG9mIHJlcG9zaXRvcnkKKyAgICAgKgorICAgICAqIEBwYXJhbSByZXBvc2l0b3J5CisgICAgICogQHJldHVybgorICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgcHVibGljIExvY2FsU2NtTWV0YWRhdGEgYnVpbGRNZXRhZGF0YSggRmlsZSByZXBvc2l0b3J5ICkKICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCkBAIC02OCw2ICs3MiwxMCBAQAogCiAgICAgLyoqCiAgICAgICogV3JpdGVzIG1ldGFkYXRhIGZpbGUKKyAgICAgKgorICAgICAqIEBwYXJhbSBkZXN0aW5hdGlvbkRpcgorICAgICAqIEBwYXJhbSBtZXRhZGF0YQorICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgYW55CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgd3JpdGVNZXRhZGF0YSggRmlsZSBkZXN0aW5hdGlvbkRpciwgTG9jYWxTY21NZXRhZGF0YSBtZXRhZGF0YSApCiAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItbG9jYWwvc3JjL3NpdGUvc2l0ZS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1sb2NhbC9zcmMvc2l0ZS9zaXRlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTI3YWUzCi0tLSAvZGV2L251bGwKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItbG9jYWwvc3JjL3NpdGUvc2l0ZS54bWwKQEAgLTAsMCArMSwzMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PgorCis8IS0tCisgIH4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICB+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICB+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgIH4gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICB+IHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgfiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgIH4gd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgfiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICB+ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICB+IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICB+IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgfiB1bmRlciB0aGUgTGljZW5zZS4KKyAgLS0+CisKKzxwcm9qZWN0IG5hbWU9Ik1hdmVuIFNDTSBMb2NhbCBQcm92aWRlciI+CisgIDxib2R5PgorICAgIDxtZW51IHJlZj0icGFyZW50IiAvPgorCisgICAgPG1lbnUgbmFtZT0iT3ZlcnZpZXciPgorICAgICAgPGl0ZW0gbmFtZT0iSW50cm9kdWN0aW9uIiBocmVmPSJpbmRleC5odG1sIi8+CisgICAgPC9tZW51PgorCisgICAgPG1lbnUgcmVmPSJyZXBvcnRzIiBpbmhlcml0PSJib3R0b20iIC8+CisgIDwvYm9keT4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvY29tbWFuZC9jaGVja2luL0xvY2FsQ2hlY2tJbkNvbW1hbmRUY2tUZXN0LmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1sb2NhbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2xvY2FsL2NvbW1hbmQvY2hlY2tpbi9Mb2NhbENoZWNrSW5Db21tYW5kVGNrVGVzdC5qYXZhCmluZGV4IGE2MjE2MmMuLjc0MjU4MzggMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvY29tbWFuZC9jaGVja2luL0xvY2FsQ2hlY2tJbkNvbW1hbmRUY2tUZXN0LmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItbG9jYWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9sb2NhbC9jb21tYW5kL2NoZWNraW4vTG9jYWxDaGVja0luQ29tbWFuZFRja1Rlc3QuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogcHVibGljIGNsYXNzIExvY2FsQ2hlY2tJbkNvbW1hbmRUY2tUZXN0CiAgICAgZXh0ZW5kcyBDaGVja0luQ29tbWFuZFRja1Rlc3QKIHsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgbW9kdWxlTmFtZSA9ICJjaGVja2luLXRjayI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIG1vZHVsZU5hbWUgPSAiY2hlY2tpbi10Y2siOwogCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21VcmwoKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1sb2NhbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2xvY2FsL2NvbW1hbmQvdXBkYXRlL0xvY2FsVXBkYXRlQ29tbWFuZFRja1Rlc3QuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvY29tbWFuZC91cGRhdGUvTG9jYWxVcGRhdGVDb21tYW5kVGNrVGVzdC5qYXZhCmluZGV4IGU1MDk3NWMuLjk0MDExOWIgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvY29tbWFuZC91cGRhdGUvTG9jYWxVcGRhdGVDb21tYW5kVGNrVGVzdC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWxvY2FsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvbG9jYWwvY29tbWFuZC91cGRhdGUvTG9jYWxVcGRhdGVDb21tYW5kVGNrVGVzdC5qYXZhCkBAIC00Nyw3ICs0Nyw3IEBACiBwdWJsaWMgY2xhc3MgTG9jYWxVcGRhdGVDb21tYW5kVGNrVGVzdAogICAgIGV4dGVuZHMgVXBkYXRlQ29tbWFuZFRja1Rlc3QKIHsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgbW9kdWxlTmFtZSA9ICJ1cGRhdGUtdGNrIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgbW9kdWxlTmFtZSA9ICJ1cGRhdGUtdGNrIjsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2NtVXJsKCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2UvTElDRU5TRS50eHQgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9MSUNFTlNFLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY0NTY5NS4uMDAwMDAwMAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9MSUNFTlNFLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0Ci0gICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCi0KLSAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgotCi0gICAxLiBEZWZpbml0aW9ucy4KLQotICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKLSAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgotCi0gICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQotICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgotCi0gICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCi0gICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCi0gICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAotICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCi0gICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgotICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCi0gICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgotCi0gICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0gICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgotCi0gICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKLSAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KLSAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCi0KLSAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCi0gICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0Ci0gICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCi0gICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCi0KLSAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCi0gICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCi0gICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKLSAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCi0KLSAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKLSAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKLSAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKLSAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCi0gICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KLSAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKLSAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCi0KLSAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCi0gICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCi0gICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKLSAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKLSAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgotICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCi0gICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50Ci0gICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bwotICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKLSAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCi0gICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKLSAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCi0gICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKLQotICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKLSAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAotICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCi0KLSAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAotICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKLSAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAotICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCi0gICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgotCi0gICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKLSAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKLSAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAotICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKLSAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCi0gICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCi0gICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQotICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKLSAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKLSAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0Ci0gICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCi0gICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKLSAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KLQotICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKLSAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAotICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKLSAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi0gICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgotICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCi0KLSAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKLSAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKLQotICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCi0gICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAotICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCi0gICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgotICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKLQotICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCi0gICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAotICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAotICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAotICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQotICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCi0gICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgotICAgICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAotICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKLSAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKLSAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCi0gICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KLSAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQotICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAotICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAotICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KLQotICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCi0gICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCi0gICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKLSAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAotICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KLQotICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAotICAgICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCi0gICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCi0gICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5Ci0gICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAotICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgotCi0gICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCi0gICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCi0gICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKLSAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgotCi0gICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKLSAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKLSAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCi0gICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucwotICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQotICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCi0gICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKLSAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KLQotICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCi0gICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKLSAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5Ci0gICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQotICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAotICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCi0gICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCi0gICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCi0gICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAotICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgotICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgotCi0gICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCi0gICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAotICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKLSAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCi0gICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQotICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKLSAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKLSAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQotICAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgotICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCi0KLSAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUwotCi0gICBBUFBFTkRJWDogSG93IHRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmsuCi0KLSAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCi0gICAgICBib2lsZXJwbGF0ZSBub3RpY2UsIHdpdGggdGhlIGZpZWxkcyBlbmNsb3NlZCBieSBicmFja2V0cyAiW10iCi0gICAgICByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLiAoRG9uJ3QgaW5jbHVkZQotICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKLSAgICAgIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYQotICAgICAgZmlsZSBvciBjbGFzcyBuYW1lIGFuZCBkZXNjcmlwdGlvbiBvZiBwdXJwb3NlIGJlIGluY2x1ZGVkIG9uIHRoZQotICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCi0gICAgICBpZGVudGlmaWNhdGlvbiB3aXRoaW4gdGhpcmQtcGFydHkgYXJjaGl2ZXMuCi0KLSAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQotCi0gICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2UvTk9USUNFLnR4dCBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL05PVElDRS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNTk4MDUuLjAwMDAwMDAKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2UvTk9USUNFLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieQotVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL2NoZWNrc3R5bGUtbGljZW5zZS50eHQgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9jaGVja3N0eWxlLWxpY2Vuc2UudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTI2ZjdkLi4wMDAwMDAwCi0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL2NoZWNrc3R5bGUtbGljZW5zZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAyMDAzLTIwMDQgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3BvbS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9wb20ueG1sCmluZGV4IGY3MGYxYTguLmNjNjY0NWYgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3BvbS54bWwKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2UvcG9tLnhtbApAQCAtMSw0ICsxLDYgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCEtLQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPCEtLQogICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKICAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKICAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpAQCAtMTgsMTUgKzIwLDE5IEBACiAgIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxwYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyczwvYXJ0aWZhY3RJZD4KICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXJzPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+Ci0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwogICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2U8L2FydGlmYWN0SWQ+CisKICAgPG5hbWU+TWF2ZW4gU0NNIFBlcmZvcmNlIFByb3ZpZGVyPC9uYW1lPgotICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CisgIDxkZXNjcmlwdGlvbj5TQ00gUHJvdmlkZXIgaW1wbGVtZW50YXRpb24gZm9yIFBlcmZvcmNlIChodHRwOi8vd3d3LnBlcmZvcmNlLmNvbS8pLjwvZGVzY3JpcHRpb24+CisKICAgPGRlcGVuZGVuY2llcz4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPnJlZ2V4cDwvZ3JvdXBJZD4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvUGVyZm9yY2VTY21Qcm92aWRlci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9QZXJmb3JjZVNjbVByb3ZpZGVyLmphdmEKaW5kZXggNWYyMzYxNS4uMzIxNGVlNyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9QZXJmb3JjZVNjbVByb3ZpZGVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9QZXJmb3JjZVNjbVByb3ZpZGVyLmphdmEKQEAgLTEyOSw4ICsxMjksOCBAQAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIGhvc3QgIT0gbnVsbCApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2FybiggIlVzZXJuYW1lIGFzIHBhcnQgb2YgcGF0aCBpcyBkZXByZWNhdGVkLCB0aGUgbmV3IGZvcm1hdCBpcyAiICsKLSAgICAgICAgICAgICAgICAgICAgInNjbTpwZXJmb3JjZTpbdXNlcm5hbWVAXWhvc3Q6cG9ydDpwYXRoX3RvX3JlcG9zaXRvcnkiICk7CisgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2FybiggIlVzZXJuYW1lIGFzIHBhcnQgb2YgcGF0aCBpcyBkZXByZWNhdGVkLCB0aGUgbmV3IGZvcm1hdCBpcyAiCisgICAgICAgICAgICAgICAgICAgICsgInNjbTpwZXJmb3JjZTpbdXNlcm5hbWVAXWhvc3Q6cG9ydDpwYXRoX3RvX3JlcG9zaXRvcnkiICk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHVzZXIgPSBwYXRoLnN1YnN0cmluZyggMCwgcGF0aC5pbmRleE9mKCAiQCIgKSApOwpAQCAtMTQ1LDkgKzE0NSw3IEBACiAgICAgICAgIHJldHVybiAicGVyZm9yY2UiOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciNjaGFuZ2Vsb2cob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hhbmdlTG9nU2NtUmVzdWx0IGNoYW5nZWxvZyggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTMwMCw2ICsyOTgsOSBAQAogICAgICAqIC8vZGVwb3QvZm9vL2JhciAtPiAvL2RlcG90L2Zvby9iYXIvLi4uCiAgICAgICogLy9kZXBvdC9mb28vYmFyLyAtPiAvL2RlcG90L2Zvby9iYXIvLi4uCiAgICAgICogLy9kZXBvdC9mb28vYmFyLy4uLiAtPiAvL2RlcG90L2Zvby9iYXIvLi4uCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmVwb1BhdGgKKyAgICAgKiBAcmV0dXJuCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Q2Fub25pY2FsUmVwb1BhdGgoIFN0cmluZyByZXBvUGF0aCApCiAgICAgewpAQCAtMzE5LDExICszMjAsMTEgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBORVdMSU5FID0gIlxyXG4iOwogCi0gICAgLyogCisgICAgLyoKICAgICAgKiBDbGllbnRzcGVjIG5hbWUgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgc3lzdGVtIHByb3BlcnR5IGJlbG93LiAgSSBkb24ndAogICAgICAqIGtub3cgb2YgYW55IHdheSBmb3IgdGhpcyBjb2RlIHRvIGdldCBhY2Nlc3MgdG8gbWF2ZW4ncyBzZXR0aW5ncy54bWwgc28gdGhpcwogICAgICAqIGlzIHRoZSBiZXN0IEkgY2FuIGRvLgotICAgICAqIAorICAgICAqCiAgICAgICogU2FtcGxlIGNsaWVudHNwZWM6CiAKICAgICAgQ2xpZW50OiBtcGVyaGFtLW1pa2VwZXJoYW0tZHQtbWF2ZW4KQEAgLTQ2MCw5ICs0NjEsOSBAQAogICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyggIkFjdHVhbCBQT00gbG9jYXRpb246ICIgKyBsb2MgKTsKICAgICAgICAgICAgICAgICBpZiAoICFyZXBvLmdldFBhdGgoKS5lcXVhbHMoIGxvYyApICkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKCAiVGhlIFNDTSBsb2NhdGlvbiBpbiB5b3VyIHBvbS54bWwgKCIgKyByZXBvLmdldFBhdGgoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAiKSBpcyBub3QgZXF1YWwgdG8gdGhlIGRlcG90IGxvY2F0aW9uICgiICsgbG9jICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIpLiAgVGhpcyBoYXBwZW5zIGZyZXF1ZW50bHkgd2l0aCBicmFuY2hlcy4gICIgKyAiSWdub3JpbmcgdGhlIFNDTSBsb2NhdGlvbi4iICk7CisgICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKCAiVGhlIFNDTSBsb2NhdGlvbiBpbiB5b3VyIHBvbS54bWwgKCIgKyByZXBvLmdldFBhdGgoKQorICAgICAgICAgICAgICAgICAgICAgICAgKyAiKSBpcyBub3QgZXF1YWwgdG8gdGhlIGRlcG90IGxvY2F0aW9uICgiICsgbG9jCisgICAgICAgICAgICAgICAgICAgICAgICArICIpLiAgVGhpcyBoYXBwZW5zIGZyZXF1ZW50bHkgd2l0aCBicmFuY2hlcy4gICIgKyAiSWdub3JpbmcgdGhlIFNDTSBsb2NhdGlvbi4iICk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvUGVyZm9yY2VJbmZvQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL1BlcmZvcmNlSW5mb0NvbW1hbmQuamF2YQppbmRleCBhMjI4OWMxLi4yN2QxOWI1IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvUGVyZm9yY2VJbmZvQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9QZXJmb3JjZUluZm9Db21tYW5kLmphdmEKQEAgLTU4LDYgKzU4LDcgQEAKICAqIGNvbW1hbmQgbGluZSBjcmVhdGlvbi4KICAqCiAgKiBAYXV0aG9yIG1wZXJoYW0KKyAqIEB2ZXJzaW9uICRJZDogJAogICovCiBwdWJsaWMgY2xhc3MgUGVyZm9yY2VJbmZvQ29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RDb21tYW5kCkBAIC0xMDAsNiArMTAxLDcgQEAKICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbjsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTY21SZXN1bHQgZXhlY3V0ZUNvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvLCBTY21GaWxlU2V0IHNjbUZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgY29tbWFuZFBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC0xMjUsMTkgKzEyNywxOSBAQAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCBsaW5lLmluZGV4T2YoICJDbGllbnQgdW5rbm93bi4iICkgPT0gLTEgKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIAl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCAiVW5leHBlY3RlZCByZXN1bHRzIGZyb20gJ3A0IGluZm8nIGNvbW1hbmQ6ICIgKyBsaW5lICk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCAiVW5leHBlY3RlZCByZXN1bHRzIGZyb20gJ3A0IGluZm8nIGNvbW1hbmQ6ICIgKyBsaW5lICk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIAlnZXRMb2dnZXIoKS5kZWJ1ZyggIkNhbm5vdCBmaW5kIGNsaWVudC4iKTsKLSAgICAgICAgICAgICAgICAgICAgCWVudHJpZXMucHV0KCAiQ2xpZW50IHJvb3QiLCAiIiApOworICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkuZGVidWcoICJDYW5ub3QgZmluZCBjbGllbnQuIiApOworICAgICAgICAgICAgICAgICAgICAgICAgZW50cmllcy5wdXQoICJDbGllbnQgcm9vdCIsICIiICk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIAlTdHJpbmcga2V5ID0gbGluZS5zdWJzdHJpbmcoIDAsIGlkeCApOwotICAgICAgICAgICAgICAgIAlTdHJpbmcgdmFsdWUgPSBsaW5lLnN1YnN0cmluZyggaWR4ICsgMSApLnRyaW0oKTsKLSAgICAgICAgICAgICAgICAJZW50cmllcy5wdXQoIGtleSwgdmFsdWUgKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGtleSA9IGxpbmUuc3Vic3RyaW5nKCAwLCBpZHggKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gbGluZS5zdWJzdHJpbmcoIGlkeCArIDEgKS50cmltKCk7CisgICAgICAgICAgICAgICAgICAgIGVudHJpZXMucHV0KCBrZXksIHZhbHVlICk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvUGVyZm9yY2VWZXJiTWFwcGVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvUGVyZm9yY2VWZXJiTWFwcGVyLmphdmEKaW5kZXggNDU2ZmYzYy4uYzlmMjgxMyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL1BlcmZvcmNlVmVyYk1hcHBlci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9QZXJmb3JjZVZlcmJNYXBwZXIuamF2YQpAQCAtMzAsMjcgKzMwLDI3IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBQZXJmb3JjZVZlcmJNYXBwZXIKIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXAgVkVSQiA9IG5ldyBIYXNoTWFwKCk7CiAKICAgICBzdGF0aWMKICAgICB7CiAgICAgICAgIC8vIFBlcmZvcmNlIHVzZXMgZGlmZmVyZW50IHRlbnNlcyBzb21ldGltZXMgc28gd2UgbmVlZCB0byBtYXAKICAgICAgICAgLy8gdGhlIGRpZmZlcmVudCB0ZW5zZXMgdG8gdGhlIHNhbWUgc3RhdHVzLgotICAgICAgICBtYXAucHV0KCAiYWRkIiwgU2NtRmlsZVN0YXR1cy5BRERFRCApOwotICAgICAgICBtYXAucHV0KCAiYWRkZWQiLCBTY21GaWxlU3RhdHVzLkFEREVEICk7Ci0gICAgICAgIG1hcC5wdXQoICJkZWxldGUiLCBTY21GaWxlU3RhdHVzLkRFTEVURUQgKTsKLSAgICAgICAgbWFwLnB1dCggImRlbGV0ZWQiLCBTY21GaWxlU3RhdHVzLkRFTEVURUQgKTsKLSAgICAgICAgbWFwLnB1dCggImVkaXQiLCBTY21GaWxlU3RhdHVzLk1PRElGSUVEICk7Ci0gICAgICAgIG1hcC5wdXQoICJlZGl0ZWQiLCBTY21GaWxlU3RhdHVzLk1PRElGSUVEICk7Ci0gICAgICAgIG1hcC5wdXQoICJ1cGRhdGluZyIsIFNjbUZpbGVTdGF0dXMuVVBEQVRFRCApOwotICAgICAgICBtYXAucHV0KCAidXBkYXRlZCIsIFNjbUZpbGVTdGF0dXMuVVBEQVRFRCApOworICAgICAgICBWRVJCLnB1dCggImFkZCIsIFNjbUZpbGVTdGF0dXMuQURERUQgKTsKKyAgICAgICAgVkVSQi5wdXQoICJhZGRlZCIsIFNjbUZpbGVTdGF0dXMuQURERUQgKTsKKyAgICAgICAgVkVSQi5wdXQoICJkZWxldGUiLCBTY21GaWxlU3RhdHVzLkRFTEVURUQgKTsKKyAgICAgICAgVkVSQi5wdXQoICJkZWxldGVkIiwgU2NtRmlsZVN0YXR1cy5ERUxFVEVEICk7CisgICAgICAgIFZFUkIucHV0KCAiZWRpdCIsIFNjbUZpbGVTdGF0dXMuTU9ESUZJRUQgKTsKKyAgICAgICAgVkVSQi5wdXQoICJlZGl0ZWQiLCBTY21GaWxlU3RhdHVzLk1PRElGSUVEICk7CisgICAgICAgIFZFUkIucHV0KCAidXBkYXRpbmciLCBTY21GaWxlU3RhdHVzLlVQREFURUQgKTsKKyAgICAgICAgVkVSQi5wdXQoICJ1cGRhdGVkIiwgU2NtRmlsZVN0YXR1cy5VUERBVEVEICk7CiAgICAgICAgIC8vIFVOS05PV04gbWVhbnMgd2UganVzdCBpZ25vcmUgdGhpcyB2ZXJiCi0gICAgICAgIG1hcC5wdXQoICJyZWZyZXNoaW5nIiwgU2NtRmlsZVN0YXR1cy5VTktOT1dOICk7CisgICAgICAgIFZFUkIucHV0KCAicmVmcmVzaGluZyIsIFNjbUZpbGVTdGF0dXMuVU5LTk9XTiApOwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgU2NtRmlsZVN0YXR1cyB0b1N0YXR1cyggU3RyaW5nIHZlcmIgKQogICAgIHsKLSAgICAgICAgU2NtRmlsZVN0YXR1cyBzdGF0ID0gKFNjbUZpbGVTdGF0dXMpIG1hcC5nZXQoIHZlcmIgKTsKKyAgICAgICAgU2NtRmlsZVN0YXR1cyBzdGF0ID0gKFNjbUZpbGVTdGF0dXMpIFZFUkIuZ2V0KCB2ZXJiICk7CiAgICAgICAgIGlmICggc3RhdCA9PSBudWxsICkKICAgICAgICAgewogICAgICAgICAgICAgLy8gWFhYIHRlc3Rpbmcgb25seQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL1BlcmZvcmNlV2hlcmVDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvUGVyZm9yY2VXaGVyZUNvbW1hbmQuamF2YQppbmRleCAyMzQ5MWRjLi4yMmNjOWJjIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvUGVyZm9yY2VXaGVyZUNvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvUGVyZm9yY2VXaGVyZUNvbW1hbmQuamF2YQpAQCAtMzcsMTAgKzM3LDEyIEBACiAgKiA8cC8+CiAgKiA8cHJlPgogICogcDQgd2hlcmUgcG9tLnhtbAotICogLy9kZXBvdC9tb2R1bGVzL2ZhYnJpYy90cnVuay9wb20ueG1sIC8vbWlrZXBlcmhhbS1kdC9kZXBvdC9tb2R1bGVzL2ZhYnJpYy90cnVuay9wb20ueG1sIGQ6XHBlcmZvcmNlXGRlcG90XG1vZHVsZXNcZmFicmljXHRydW5rXHBvbS54bWwKKyAqIC8vZGVwb3QvbW9kdWxlcy9mYWJyaWMvdHJ1bmsvcG9tLnhtbCAvL21pa2VwZXJoYW0tZHQvZGVwb3QvbW9kdWxlcy9mYWJyaWMvdHJ1bmsvcG9tLnhtbAorICogZDpccGVyZm9yY2VcZGVwb3RcbW9kdWxlc1xmYWJyaWNcdHJ1bmtccG9tLnhtbAogICogPC9wcmU+CiAgKgogICogQGF1dGhvciBtcGVyaGFtCisgKiBAdmVyc2lvbiAkSWQ6ICQKICAqLwogcHVibGljIGNsYXNzIFBlcmZvcmNlV2hlcmVDb21tYW5kCiB7CkBAIC0xMDIsNyArMTA0LDcgQEAKICAgICAgICAgICAgICAgICBwYXRoID0gbGluZS5zdWJzdHJpbmcoIDAsIGxpbmUubGFzdEluZGV4T2YoICIvLyIgKSAtIDEgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIENoZWNrIGZvciBlcnJvcnMKLSAgICAgICAgICAgIHdoaWxlKCAoIGxpbmUgPSBickVyci5yZWFkTGluZSgpICkgIT0gbnVsbCApCisgICAgICAgICAgICB3aGlsZSAoICggbGluZSA9IGJyRXJyLnJlYWRMaW5lKCkgKSAhPSBudWxsICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAoIGxpbmUuaW5kZXhPZiggIm5vdCBpbiBjbGllbnQgdmlldyIgKSAhPSAtMSApCiAgICAgICAgICAgICAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL2FkZC9QZXJmb3JjZUFkZENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9hZGQvUGVyZm9yY2VBZGRDb21tYW5kLmphdmEKaW5kZXggNTFlNGJmNi4uOWVjMWNjMCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL2FkZC9QZXJmb3JjZUFkZENvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvYWRkL1BlcmZvcmNlQWRkQ29tbWFuZC5qYXZhCkBAIC00Nyw2ICs0Nyw3IEBACiAgICAgaW1wbGVtZW50cyBQZXJmb3JjZUNvbW1hbmQKIHsKIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFNjbVJlc3VsdCBleGVjdXRlQWRkQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZXMsIFN0cmluZyBtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gYmluYXJ5ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL2FkZC9QZXJmb3JjZUFkZENvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvYWRkL1BlcmZvcmNlQWRkQ29uc3VtZXIuamF2YQppbmRleCAwMjIxNjQ3Li40YWMyNDhiIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvYWRkL1BlcmZvcmNlQWRkQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvYWRkL1BlcmZvcmNlQWRkQ29uc3VtZXIuamF2YQpAQCAtNjAsNiArNjAsNyBAQAogICAgICAgICByZXR1cm4gYWRkaXRpb25zOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgY29uc3VtZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIGlmICggbGluZS5zdGFydHNXaXRoKCAiLi4uICIgKSApCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvY2hhbmdlbG9nL1BlcmZvcmNlQ2hhbmdlTG9nQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL2NoYW5nZWxvZy9QZXJmb3JjZUNoYW5nZUxvZ0NvbW1hbmQuamF2YQppbmRleCAyZDc2MzRmLi5jOGFkOWE0IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvY2hhbmdlbG9nL1BlcmZvcmNlQ2hhbmdlTG9nQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9jaGFuZ2Vsb2cvUGVyZm9yY2VDaGFuZ2VMb2dDb21tYW5kLmphdmEKQEAgLTQ4LDYgKzQ4LDcgQEAKICAgICBpbXBsZW1lbnRzIFBlcmZvcmNlQ29tbWFuZAogewogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hhbmdlTG9nU2NtUmVzdWx0IGV4ZWN1dGVDaGFuZ2VMb2dDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGUgc3RhcnREYXRlLCBEYXRlIGVuZERhdGUsIFNjbUJyYW5jaCBicmFuY2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGVQYXR0ZXJuICkKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9jaGFuZ2Vsb2cvUGVyZm9yY2VDaGFuZ2VMb2dDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL2NoYW5nZWxvZy9QZXJmb3JjZUNoYW5nZUxvZ0NvbnN1bWVyLmphdmEKaW5kZXggOGY1NDFhZi4uZGMyZjAxNSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL2NoYW5nZWxvZy9QZXJmb3JjZUNoYW5nZUxvZ0NvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL2NoYW5nZWxvZy9QZXJmb3JjZUNoYW5nZUxvZ0NvbnN1bWVyLmphdmEKQEAgLTEwMSw3ICsxMDEsNyBAQAogCiAgICAgcHJpdmF0ZSBTdHJpbmcgdXNlckRhdGVQYXR0ZXJuOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHBhdHRlcm4gPSAiXlxcLlxcLlxcLiAjKFxcZCspICIgKyAvLyByZXZpc2lvbiBudW1iZXIKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFUVEVSTiA9ICJeXFwuXFwuXFwuICMoXFxkKykgIiArIC8vIHJldmlzaW9uIG51bWJlcgogICAgICAgICAiY2hhbmdlIChcXGQrKSAuKiAiICsgLy8gY2hhbmdlbGlzdCBudW1iZXIKICAgICAgICAgIm9uICguKikgIiArIC8vIGRhdGUKICAgICAgICAgImJ5ICguKilAIjsgLy8gYXV0aG9yCkBAIC0xMTgsNyArMTE4LDcgQEAKIAogICAgICAgICB0cnkKICAgICAgICAgewotICAgICAgICAgICAgcmV2aXNpb25SZWdleHAgPSBuZXcgUkUoIHBhdHRlcm4gKTsKKyAgICAgICAgICAgIHJldmlzaW9uUmVnZXhwID0gbmV3IFJFKCBQQVRURVJOICk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKCBSRVN5bnRheEV4Y2VwdGlvbiBpZ25vcmVkICkKICAgICAgICAgewpAQCAtMTM5LDYgKzEzOSw3IEBACiAgICAgLy8gU3RyZWFtQ29uc3VtZXIgSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBzd2l0Y2ggKCBzdGF0dXMgKQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL2NoZWNraW4vUGVyZm9yY2VDaGVja0luQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL2NoZWNraW4vUGVyZm9yY2VDaGVja0luQ29tbWFuZC5qYXZhCmluZGV4IDkxMjE4OTcuLjJlY2E1YTcgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9jaGVja2luL1BlcmZvcmNlQ2hlY2tJbkNvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvY2hlY2tpbi9QZXJmb3JjZUNoZWNrSW5Db21tYW5kLmphdmEKQEAgLTUwLDcgKzUwLDcgQEAKICAgICBleHRlbmRzIEFic3RyYWN0Q2hlY2tJbkNvbW1hbmQKICAgICBpbXBsZW1lbnRzIFBlcmZvcmNlQ29tbWFuZAogewotCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hlY2tJblNjbVJlc3VsdCBleGVjdXRlQ2hlY2tJbkNvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvLCBTY21GaWxlU2V0IGZpbGVzLCBTdHJpbmcgbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbVZlcnNpb24gdmVyc2lvbiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9jaGVja2luL1BlcmZvcmNlQ2hlY2tJbkNvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvY2hlY2tpbi9QZXJmb3JjZUNoZWNrSW5Db25zdW1lci5qYXZhCmluZGV4IDUzMTUzMDYuLjM5ZGVlMWUgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9jaGVja2luL1BlcmZvcmNlQ2hlY2tJbkNvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL2NoZWNraW4vUGVyZm9yY2VDaGVja0luQ29uc3VtZXIuamF2YQpAQCAtODksMTAgKzg5LDExIEBACiAgICAgICogLy9kZXBvdC9tb2R1bGVzL2NvcmRvYmEvcnVudGltZS1lYXIvRm9vLmphdmEjMiBTdWJtaXQgdmFsaWRhdGlvbiBmYWlsZWQgLS0KICAgICAgKiBmaXggcHJvYmxlbXMgdGhlbiB1c2UgJ3A0IHN1Ym1pdCAtYyA4MDgzNycuICdjaGVja3N0eWxlJyB2YWxpZGF0aW9uCiAgICAgICogZmFpbGVkOgotICAgICAqIAorICAgICAqCiAgICAgICogZGVwb3QvbW9kdWxlcy9jb3Jkb2JhL3J1bnRpbWUtZWFyL0Zvby5qYXZhOjM6MTogR290IGFuIGV4Y2VwdGlvbiAtCiAgICAgICogZXhwZWN0aW5nIEVPRiwgZm91bmQgJ30nCiAgICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgaWYgKCBsaW5lLnN0YXJ0c1dpdGgoICIuLi4gIiApICkKQEAgLTE0Nyw2ICsxNDgsNyBAQAogICAgICAgICAgICAgY2FzZSBTVEFURV9FUlJPUjoKICAgICAgICAgICAgICAgICBlcnJvciggbGluZSApOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL2NoZWNrb3V0L1BlcmZvcmNlQ2hlY2tPdXRDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvY2hlY2tvdXQvUGVyZm9yY2VDaGVja091dENvbW1hbmQuamF2YQppbmRleCA0MDJkYWE0Li5lZTMzMjgwIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvY2hlY2tvdXQvUGVyZm9yY2VDaGVja091dENvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvY2hlY2tvdXQvUGVyZm9yY2VDaGVja091dENvbW1hbmQuamF2YQpAQCAtNTksNiArNTksOCBAQAogICAgICAqIDEpIEEgY2xpZW50c3BlYyB3aWxsIGJlIGNyZWF0ZWQgb3IgdXBkYXRlZCB3aGljaCBob2xkcyBhIHRlbXBvcmFyeQogICAgICAqIG1hcHBpbmcgZnJvbSB0aGUgcmVwbyBwYXRoIHRvIHRoZSB0YXJnZXQgZGlyZWN0b3J5LgogICAgICAqIDIpIFRoaXMgY2xpZW50c3BlYyBpcyBzeW5jJ2QgdG8gcHVsbCBhbGwgdGhlIGZpbGVzIG9udG8gdGhlIGNsaWVudAorICAgICAqCisgICAgICoge0Bpbmhlcml0RG9jfQogICAgICAqLwogICAgIHByb3RlY3RlZCBDaGVja091dFNjbVJlc3VsdCBleGVjdXRlQ2hlY2tPdXRDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiB2ZXJzaW9uICkKQEAgLTY5LDcgKzcxLDcgQEAKIAogICAgICAgICBhY3R1YWxMb2NhdGlvbiA9IFBlcmZvcmNlU2NtUHJvdmlkZXIuZ2V0UmVwb1BhdGgoIGdldExvZ2dlcigpLCBwcmVwbywgZmlsZXMuZ2V0QmFzZWRpcigpICk7CiAKLSAgICAgICAgU3RyaW5nIHNwZWNuYW1lID0gUGVyZm9yY2VTY21Qcm92aWRlci5nZXRDbGllbnRzcGVjTmFtZShnZXRMb2dnZXIoKSwgcHJlcG8sIHdvcmtpbmdEaXJlY3RvcnkgKTsKKyAgICAgICAgU3RyaW5nIHNwZWNuYW1lID0gUGVyZm9yY2VTY21Qcm92aWRlci5nZXRDbGllbnRzcGVjTmFtZSggZ2V0TG9nZ2VyKCksIHByZXBvLCB3b3JraW5nRGlyZWN0b3J5ICk7CiAgICAgICAgIFBlcmZvcmNlQ2hlY2tPdXRDb25zdW1lciBjb25zdW1lciA9IG5ldyBQZXJmb3JjZUNoZWNrT3V0Q29uc3VtZXIoIHNwZWNuYW1lLCBhY3R1YWxMb2NhdGlvbiApOwogICAgICAgICBnZXRMb2dnZXIoKS5pbmZvKCAiQ2hlY2tvdXQgd29ya2luZyBkaXJlY3Rvcnk6ICIgKyB3b3JraW5nRGlyZWN0b3J5ICk7CiAgICAgICAgIENvbW1hbmRsaW5lIGNsID0gbnVsbDsKQEAgLTc4LDcgKzgwLDcgQEAKICAgICAgICAgdHJ5CiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIEFoaGgsIGdsb3Jpb3VzIFBlcmZvcmNlLiAgQ3JlYXRlIGFuZCB1cGRhdGUgb2YgY2xpZW50c3BlY3MgaXMgdGhlIGV4YWN0Ci0gICAgICAgICAgICAvLyBzYW1lIG9wZXJhdGlvbiBzbyB3ZSBkb24ndCBuZWVkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIHR3byBtb2Rlcy4gCisgICAgICAgICAgICAvLyBzYW1lIG9wZXJhdGlvbiBzbyB3ZSBkb24ndCBuZWVkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIHR3byBtb2Rlcy4KICAgICAgICAgICAgIGNsID0gUGVyZm9yY2VTY21Qcm92aWRlci5jcmVhdGVQNENvbW1hbmQoIHByZXBvLCB3b3JraW5nRGlyZWN0b3J5ICk7CiAgICAgICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAiY2xpZW50IiApOwogICAgICAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggIi1pIiApOwpAQCAtODgsNyArOTAsNyBAQAogICAgICAgICAgICAgLy8gV3JpdGUgY2xpZW50c3BlYyB0byBTVERJTgogICAgICAgICAgICAgT3V0cHV0U3RyZWFtIG91dCA9IHByb2MuZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBEYXRhT3V0cHV0U3RyZWFtIGRvcyA9IG5ldyBEYXRhT3V0cHV0U3RyZWFtKCBvdXQgKTsKLSAgICAgICAgICAgIFN0cmluZyBjbGllbnQgPSBQZXJmb3JjZVNjbVByb3ZpZGVyLmNyZWF0ZUNsaWVudHNwZWMoZ2V0TG9nZ2VyKCksIHByZXBvLCB3b3JraW5nRGlyZWN0b3J5LCBhY3R1YWxMb2NhdGlvbiApOworICAgICAgICAgICAgU3RyaW5nIGNsaWVudCA9IFBlcmZvcmNlU2NtUHJvdmlkZXIuY3JlYXRlQ2xpZW50c3BlYyggZ2V0TG9nZ2VyKCksIHByZXBvLCB3b3JraW5nRGlyZWN0b3J5LCBhY3R1YWxMb2NhdGlvbiApOwogICAgICAgICAgICAgZ2V0TG9nZ2VyKCkuZGVidWcoICJVcGRhdGluZyBjbGllbnRzcGVjOlxuIiArIGNsaWVudCApOwogICAgICAgICAgICAgZG9zLndyaXRlKCBjbGllbnQuZ2V0Qnl0ZXMoKSApOwogICAgICAgICAgICAgZG9zLmNsb3NlKCk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvY2hlY2tvdXQvUGVyZm9yY2VDaGVja091dENvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvY2hlY2tvdXQvUGVyZm9yY2VDaGVja091dENvbnN1bWVyLmphdmEKaW5kZXggNmY3ZTU1Yi4uNTRhMTk1OSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL2NoZWNrb3V0L1BlcmZvcmNlQ2hlY2tPdXRDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9jaGVja291dC9QZXJmb3JjZUNoZWNrT3V0Q29uc3VtZXIuamF2YQpAQCAtODIsMTAgKzgyLDEyIEBACiAgICAgLyoKICAgICAgKiBJbnZhbGlkIGNoYW5nZWxpc3QvY2xpZW50L2xhYmVsL2RhdGUgJ0Bzb21lbGFiZWwnLgogICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgY29uc3VtZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7Ci0gICAgICAgIGlmICggY3VycmVudFN0YXRlID09IFNUQVRFX0NMSUVOVFNQRUMgJiYgKCBsaW5lLnN0YXJ0c1dpdGgoICJDbGllbnQgIiArIHNwZWNuYW1lICsgIiBzYXZlZC4iICkgfHwKLSAgICAgICAgICAgIGxpbmUuc3RhcnRzV2l0aCggIkNsaWVudCAiICsgc3BlY25hbWUgKyAiIG5vdCBjaGFuZ2VkLiIgKSApICkKKyAgICAgICAgaWYgKCBjdXJyZW50U3RhdGUgPT0gU1RBVEVfQ0xJRU5UU1BFQworICAgICAgICAgICAgJiYgKCBsaW5lLnN0YXJ0c1dpdGgoICJDbGllbnQgIiArIHNwZWNuYW1lICsgIiBzYXZlZC4iICkgfHwgbGluZS5zdGFydHNXaXRoKCAiQ2xpZW50ICIgKyBzcGVjbmFtZQorICAgICAgICAgICAgICAgICsgIiBub3QgY2hhbmdlZC4iICkgKSApCiAgICAgICAgIHsKICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFNUQVRFX05PUk1BTDsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9kaWZmL1BlcmZvcmNlRGlmZkNvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9kaWZmL1BlcmZvcmNlRGlmZkNvbW1hbmQuamF2YQppbmRleCA0MjNlNDk2Li4yM2M2MjM3IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvZGlmZi9QZXJmb3JjZURpZmZDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL2RpZmYvUGVyZm9yY2VEaWZmQ29tbWFuZC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgZXh0ZW5kcyBBYnN0cmFjdERpZmZDb21tYW5kCiAgICAgaW1wbGVtZW50cyBQZXJmb3JjZUNvbW1hbmQKIHsKLQorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIERpZmZTY21SZXN1bHQgZXhlY3V0ZURpZmZDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlcywgU2NtVmVyc2lvbiBzdGFydFJldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbVZlcnNpb24gZW5kUmV2ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL2RpZmYvUGVyZm9yY2VEaWZmQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9kaWZmL1BlcmZvcmNlRGlmZkNvbnN1bWVyLmphdmEKaW5kZXggMmFmMTljMC4uM2EyMjFjYyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL2RpZmYvUGVyZm9yY2VEaWZmQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvZGlmZi9QZXJmb3JjZURpZmZDb25zdW1lci5qYXZhCkBAIC0zOSwxMiArMzksMTMgQEAKICAgICAvKgogICAgICAqIEkgZG9uJ3Qgc2VlIGFueSBlYXN5IHdheSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFuIGVycm9yIGFuZAogICAgICAqIG5vcm1hbCBkaWZmIG91dHB1dC4gIEkgc2VlIHR3byBwb3NzaWJpbGl0aWVzOgotICAgICAqIAorICAgICAqCiAgICAgICogMSkgVXNlIHRoZSBwNCBnbG9iYWwgIi1zIiBwYXJhbWV0ZXIKICAgICAgKiAyKSBDaGVjayBmb3IgYSBub24temVybyBjb2RlIHJldHVybmVkIGJ5IHRoZSBwNCBwcm9jZXNzCi0gICAgICogCisgICAgICoKICAgICAgKiBXZSdsbCBkbyB0aGUgbGF0dGVyIGFzIGl0J3Mgc2ltcGxlciB0byBpbXBsZW1lbnQuCiAgICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgb3V0cHV0LnByaW50bG4oIGxpbmUgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9lZGl0L1BlcmZvcmNlRWRpdENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9lZGl0L1BlcmZvcmNlRWRpdENvbW1hbmQuamF2YQppbmRleCA4NzczN2NmLi4yYjE0MzVjIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvZWRpdC9QZXJmb3JjZUVkaXRDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL2VkaXQvUGVyZm9yY2VFZGl0Q29tbWFuZC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgZXh0ZW5kcyBBYnN0cmFjdEVkaXRDb21tYW5kCiAgICAgaW1wbGVtZW50cyBQZXJmb3JjZUNvbW1hbmQKIHsKLQorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFNjbVJlc3VsdCBleGVjdXRlRWRpdENvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvLCBTY21GaWxlU2V0IGZpbGVzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKQEAgLTgxLDEwICs4MSwxMyBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmKGNvbnN1bWVyLmlzU3VjY2VzcygpKSB7CisgICAgICAgIGlmICggY29uc3VtZXIuaXNTdWNjZXNzKCkgKQorICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbmV3IEVkaXRTY21SZXN1bHQoIGNsLnRvU3RyaW5nKCksIGNvbnN1bWVyLmdldEVkaXRzKCkgKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRWRpdFNjbVJlc3VsdCggY2wudG9TdHJpbmcoKSwgIlVuYWJsZSB0byBlZGl0IGZpbGUocykiLCBjb25zdW1lci5nZXRFcnJvck1lc3NhZ2UoKSwgZmFsc2UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBFZGl0U2NtUmVzdWx0KCBjbC50b1N0cmluZygpLCAiVW5hYmxlIHRvIGVkaXQgZmlsZShzKSIsIGNvbnN1bWVyLmdldEVycm9yTWVzc2FnZSgpLCBmYWxzZSApOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvZWRpdC9QZXJmb3JjZUVkaXRDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL2VkaXQvUGVyZm9yY2VFZGl0Q29uc3VtZXIuamF2YQppbmRleCBlMjRjNDg3Li4xZjIzMTUyIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvZWRpdC9QZXJmb3JjZUVkaXRDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9lZGl0L1BlcmZvcmNlRWRpdENvbnN1bWVyLmphdmEKQEAgLTY0LDYgKzY0LDcgQEAKICAgICAgICAgcmV0dXJuIGVkaXRzOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgY29uc3VtZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIGlmICggbGluZS5zdGFydHNXaXRoKCAiLi4uICIgKSApCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvbG9naW4vUGVyZm9yY2VMb2dpbkNvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9sb2dpbi9QZXJmb3JjZUxvZ2luQ29tbWFuZC5qYXZhCmluZGV4IDUzMWIyYWUuLjNhOGNlYTkgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9sb2dpbi9QZXJmb3JjZUxvZ2luQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9sb2dpbi9QZXJmb3JjZUxvZ2luQ29tbWFuZC5qYXZhCkBAIC0xOSw2ICsxOSwxMiBAQAogICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAoraW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5EYXRhT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CisKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVyczsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21FeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldDsKQEAgLTI4LDExICszNCw5IEBACiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIucGVyZm9yY2UuUGVyZm9yY2VTY21Qcm92aWRlcjsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5wZXJmb3JjZS5jb21tYW5kLlBlcmZvcmNlQ29tbWFuZDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5wZXJmb3JjZS5yZXBvc2l0b3J5LlBlcmZvcmNlU2NtUHJvdmlkZXJSZXBvc2l0b3J5OwotaW1wb3J0IG9yZy5jb2RlaGF1cy5wbGV4dXMudXRpbC5jbGkuQ29tbWFuZGxpbmU7Ci1pbXBvcnQgb3JnLmNvZGVoYXVzLnBsZXh1cy51dGlsLmNsaS5Db21tYW5kTGluZUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuY29kZWhhdXMucGxleHVzLnV0aWwuU3RyaW5nVXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgb3JnLmNvZGVoYXVzLnBsZXh1cy51dGlsLmNsaS5Db21tYW5kTGluZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuY29kZWhhdXMucGxleHVzLnV0aWwuY2xpLkNvbW1hbmRsaW5lOwogCiAvKioKICAqIEBhdXRob3IgTWlrZSBQZXJoYW0KQEAgLTQzLDcgKzQ3LDcgQEAKICAgICBleHRlbmRzIEFic3RyYWN0TG9naW5Db21tYW5kCiAgICAgaW1wbGVtZW50cyBQZXJmb3JjZUNvbW1hbmQKIHsKLQorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIExvZ2luU2NtUmVzdWx0IGV4ZWN1dGVMb2dpbkNvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvLCBTY21GaWxlU2V0IGZpbGVzLCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbXMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtNTQsOCArNTgsOSBAQAogICAgICAgICB7CiAgICAgICAgICAgICBQcm9jZXNzIHByb2MgPSBjbC5leGVjdXRlKCk7CiAgICAgICAgICAgICBEYXRhT3V0cHV0U3RyZWFtIGRvcyA9IG5ldyBEYXRhT3V0cHV0U3RyZWFtKCBwcm9jLmdldE91dHB1dFN0cmVhbSgpICk7Ci0gICAgICAgICAgICBpZihTdHJpbmdVdGlscy5pc0VtcHR5KHJlcG8uZ2V0UGFzc3dvcmQoKSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2NtRXhjZXB0aW9uKCJwYXNzd29yZCBpcyByZXF1aXJlZCBmb3IgdGhlIHBlcmZvcmNlIHNjbSBwbHVnaW4uIik7CisgICAgICAgICAgICBpZiAoIFN0cmluZ1V0aWxzLmlzRW1wdHkoIHJlcG8uZ2V0UGFzc3dvcmQoKSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2NtRXhjZXB0aW9uKCAicGFzc3dvcmQgaXMgcmVxdWlyZWQgZm9yIHRoZSBwZXJmb3JjZSBzY20gcGx1Z2luLiIgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRvcy53cml0ZVVURiggcmVwby5nZXRQYXNzd29yZCgpICk7CiAgICAgICAgICAgICBkb3MuY2xvc2UoKTsKQEAgLTc3LDE1ICs4MiwxNSBAQAogICAgICAgICB9CiAgICAgICAgIGNhdGNoICggQ29tbWFuZExpbmVFeGNlcHRpb24gZSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBTY21FeGNlcHRpb24oIiIsIGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFNjbUV4Y2VwdGlvbiggIiIsIGUgKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoIElPRXhjZXB0aW9uIGUgKQogICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgU2NtRXhjZXB0aW9uKCIiLCBlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTY21FeGNlcHRpb24oICIiLCBlICk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gbmV3IExvZ2luU2NtUmVzdWx0KCBjbC50b1N0cmluZygpLCBjb25zdW1lci5pc1N1Y2Nlc3MoKSA/ICJMb2dpbiBzdWNjZXNzZnVsIiA6ICJMb2dpbiBmYWlsZWQiLCBjb25zdW1lcgotICAgICAgICAgICAgLmdldE91dHB1dCgpLCBjb25zdW1lci5pc1N1Y2Nlc3MoKSApOworICAgICAgICByZXR1cm4gbmV3IExvZ2luU2NtUmVzdWx0KCBjbC50b1N0cmluZygpLCBjb25zdW1lci5pc1N1Y2Nlc3MoKSA/ICJMb2dpbiBzdWNjZXNzZnVsIiA6ICJMb2dpbiBmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXIuZ2V0T3V0cHV0KCksIGNvbnN1bWVyLmlzU3VjY2VzcygpICk7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyBDb21tYW5kbGluZSBjcmVhdGVDb21tYW5kTGluZSggUGVyZm9yY2VTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgRmlsZSB3b3JraW5nRGlyICkKQEAgLTkzLDcgKzk4LDggQEAKICAgICAgICAgQ29tbWFuZGxpbmUgY29tbWFuZCA9IFBlcmZvcmNlU2NtUHJvdmlkZXIuY3JlYXRlUDRDb21tYW5kKCByZXBvLCB3b3JraW5nRGlyICk7CiAKICAgICAgICAgY29tbWFuZC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAibG9naW4iICk7Ci0gICAgICAgIGlmKCFTdHJpbmdVdGlscy5pc0VtcHR5KHJlcG8uZ2V0VXNlcigpKSkgeworICAgICAgICBpZiAoICFTdHJpbmdVdGlscy5pc0VtcHR5KCByZXBvLmdldFVzZXIoKSApICkKKyAgICAgICAgewogICAgICAgICAgICAgY29tbWFuZC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCByZXBvLmdldFVzZXIoKSApOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb21tYW5kOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL2xvZ2luL1BlcmZvcmNlTG9naW5Db25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL2xvZ2luL1BlcmZvcmNlTG9naW5Db25zdW1lci5qYXZhCmluZGV4IDFjNjk2OGMuLmI3ZGI4YmMgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9sb2dpbi9QZXJmb3JjZUxvZ2luQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvbG9naW4vUGVyZm9yY2VMb2dpbkNvbnN1bWVyLmphdmEKQEAgLTQxLDYgKzQxLDcgQEAKIAogICAgIHByaXZhdGUgaW50IGN1cnJlbnRTdGF0ZSA9IFNUQVRFX0xPR0lOOwogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgaWYgKCBsaW5lLnN0YXJ0c1dpdGgoICJFbnRlciBwYXNzd29yZDoiICkgKQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL3JlbW92ZS9QZXJmb3JjZVJlbW92ZUNvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9yZW1vdmUvUGVyZm9yY2VSZW1vdmVDb21tYW5kLmphdmEKaW5kZXggNTFlN2M5YS4uZDQyNWY4MyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL3JlbW92ZS9QZXJmb3JjZVJlbW92ZUNvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvcmVtb3ZlL1BlcmZvcmNlUmVtb3ZlQ29tbWFuZC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgZXh0ZW5kcyBBYnN0cmFjdFJlbW92ZUNvbW1hbmQKICAgICBpbXBsZW1lbnRzIFBlcmZvcmNlQ29tbWFuZAogewotCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU2NtUmVzdWx0IGV4ZWN1dGVSZW1vdmVDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlcywgU3RyaW5nIG1lc3NhZ2UgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL3JlbW92ZS9QZXJmb3JjZVJlbW92ZUNvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvcmVtb3ZlL1BlcmZvcmNlUmVtb3ZlQ29uc3VtZXIuamF2YQppbmRleCAyNDdlYmM3Li40NDQ4MTczIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvcmVtb3ZlL1BlcmZvcmNlUmVtb3ZlQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvcmVtb3ZlL1BlcmZvcmNlUmVtb3ZlQ29uc3VtZXIuamF2YQpAQCAtNjMsNiArNjMsNyBAQAogICAgICAgICByZXR1cm4gcmVtb3ZhbHM7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgaWYgKCBsaW5lLnN0YXJ0c1dpdGgoICIuLi4gIiApICkKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9zdGF0dXMvUGVyZm9yY2VTdGF0dXNDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvc3RhdHVzL1BlcmZvcmNlU3RhdHVzQ29tbWFuZC5qYXZhCmluZGV4IDEzMjg2YmYuLjU0YmJlZDQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9zdGF0dXMvUGVyZm9yY2VTdGF0dXNDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL3N0YXR1cy9QZXJmb3JjZVN0YXR1c0NvbW1hbmQuamF2YQpAQCAtNTIsNiArNTIsNyBAQAogewogICAgIHByaXZhdGUgU3RyaW5nIGFjdHVhbExvY2F0aW9uOwogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU3RhdHVzU2NtUmVzdWx0IGV4ZWN1dGVTdGF0dXNDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlcyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvc3RhdHVzL1BlcmZvcmNlU3RhdHVzQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9zdGF0dXMvUGVyZm9yY2VTdGF0dXNDb25zdW1lci5qYXZhCmluZGV4IGFhZDZmNTQuLmFjZGVlMjQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9zdGF0dXMvUGVyZm9yY2VTdGF0dXNDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC9zdGF0dXMvUGVyZm9yY2VTdGF0dXNDb25zdW1lci5qYXZhCkBAIC00MiwxMSArNDIsMTIgQEAKIAogICAgIHByaXZhdGUgTGlzdCBkZXBvdGZpbGVzID0gbmV3IEFycmF5TGlzdCgpOwogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgaWYgKCBsaW5lLmluZGV4T2YoICJub3Qgb3BlbmVkIiApICE9IC0xICkKICAgICAgICAgewotICAgICAgICAgICAgLy8gVXNlciBoYXMgbm8gZmlsZXMgb3BlbiBhdCBhbGwsIGp1c3QgcmV0dXJuIAorICAgICAgICAgICAgLy8gVXNlciBoYXMgbm8gZmlsZXMgb3BlbiBhdCBhbGwsIGp1c3QgcmV0dXJuCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgc3dpdGNoICggY3VycmVudFN0YXRlICkKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC90YWcvUGVyZm9yY2VUYWdDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvdGFnL1BlcmZvcmNlVGFnQ29tbWFuZC5qYXZhCmluZGV4IDYzMTk0NWIuLjM2NzAzODMgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC90YWcvUGVyZm9yY2VUYWdDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL3RhZy9QZXJmb3JjZVRhZ0NvbW1hbmQuamF2YQpAQCAtNTEsNiArNTEsNyBAQAogewogICAgIHByaXZhdGUgU3RyaW5nIGFjdHVhbFJlcG9Mb2NhdGlvbiA9IG51bGw7CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTY21SZXN1bHQgZXhlY3V0ZVRhZ0NvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvLCBTY21GaWxlU2V0IGZpbGVzLCBTdHJpbmcgdGFnLCBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC0xNzksNyArMTgwLDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVXTElORSA9ICJcclxuIjsKIAogICAgIC8qCi0gICAgICogTGFiZWw6IGZvby1sYWJlbCAKKyAgICAgKiBMYWJlbDogZm9vLWxhYmVsCiAgICAgICogVmlldzogLy9kZXBvdC9wYXRoL3RvL3JlcG9zLy4uLgogICAgICAqIE93bmVyOiBtcGVyaGFtCiAgICAgICovCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvdGFnL1BlcmZvcmNlVGFnQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC90YWcvUGVyZm9yY2VUYWdDb25zdW1lci5qYXZhCmluZGV4IGNlZWVjMjQuLmU2MjU4ZDEgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC90YWcvUGVyZm9yY2VUYWdDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC90YWcvUGVyZm9yY2VUYWdDb25zdW1lci5qYXZhCkBAIC04OSw2ICs4OSw3IEBACiAgICAgICogLy9kZXBvdC9tb2R1bGVzL2NvcmRvYmEvcnVudGltZS1lYXIvcG9tLnhtbCM0IC0gYWRkZWQKICAgICAgKiAvL2RlcG90L21vZHVsZXMvY29yZG9iYS9ydW50aW1lLWVhci8ucnVudGltZSMxIC0gYWRkZWQKICAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBzd2l0Y2ggKCBjdXJyZW50U3RhdGUgKQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL3VuZWRpdC9QZXJmb3JjZVVuRWRpdENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC91bmVkaXQvUGVyZm9yY2VVbkVkaXRDb21tYW5kLmphdmEKaW5kZXggNDY5NjI4Mi4uMzVjM2I2MiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL3VuZWRpdC9QZXJmb3JjZVVuRWRpdENvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvdW5lZGl0L1BlcmZvcmNlVW5FZGl0Q29tbWFuZC5qYXZhCkBAIC00Nyw2ICs0Nyw3IEBACiAgICAgaW1wbGVtZW50cyBQZXJmb3JjZUNvbW1hbmQKIHsKIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFNjbVJlc3VsdCBleGVjdXRlVW5FZGl0Q29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZXMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL3VuZWRpdC9QZXJmb3JjZVVuRWRpdENvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvdW5lZGl0L1BlcmZvcmNlVW5FZGl0Q29uc3VtZXIuamF2YQppbmRleCA2ZTA4MjM1Li5jYjE3ZDVmIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvdW5lZGl0L1BlcmZvcmNlVW5FZGl0Q29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvdW5lZGl0L1BlcmZvcmNlVW5FZGl0Q29uc3VtZXIuamF2YQpAQCAtNjYsNiArNjYsNyBAQAogICAgICAgICByZXR1cm4gZWRpdHM7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgaWYgKCBjdXJyZW50U3RhdGUgIT0gU1RBVEVfRVJST1IgJiYgcmV2aXNpb25SZWdleHAubWF0Y2goIGxpbmUgKSApCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvdXBkYXRlL1BlcmZvcmNlVXBkYXRlQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItcGVyZm9yY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9wZXJmb3JjZS9jb21tYW5kL3VwZGF0ZS9QZXJmb3JjZVVwZGF0ZUNvbW1hbmQuamF2YQppbmRleCBmOTQzM2RhLi5jOWEzNjc2IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3BlcmZvcmNlL2NvbW1hbmQvdXBkYXRlL1BlcmZvcmNlVXBkYXRlQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvcGVyZm9yY2UvY29tbWFuZC91cGRhdGUvUGVyZm9yY2VVcGRhdGVDb21tYW5kLmphdmEKQEAgLTQzLDYgKzQzLDcgQEAKICAgICBpbXBsZW1lbnRzIFBlcmZvcmNlQ29tbWFuZAogewogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgVXBkYXRlU2NtUmVzdWx0IGV4ZWN1dGVVcGRhdGVDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHNjbVZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC02NSw2ICs2Niw3IEBACiAgICAgICAgIHJldHVybiBuZXcgVXBkYXRlU2NtUmVzdWx0KCBjb3NyLmdldENvbW1hbmRMaW5lKCksIGNvc3IuZ2V0Q2hlY2tlZE91dEZpbGVzKCkgKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDaGFuZ2VMb2dDb21tYW5kIGdldENoYW5nZUxvZ0NvbW1hbmQoKQogICAgIHsKICAgICAgICAgUGVyZm9yY2VDaGFuZ2VMb2dDb21tYW5kIGNvbW1hbmQgPSBuZXcgUGVyZm9yY2VDaGFuZ2VMb2dDb21tYW5kKCk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvc2l0ZS9zaXRlLnhtbCBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlL3NyYy9zaXRlL3NpdGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5Mzg4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZS9zcmMvc2l0ZS9zaXRlLnhtbApAQCAtMCwwICsxLDMyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+CisKKzwhLS0KKyAgfiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgIH4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgIH4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgfiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIH4gdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICB+ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgfiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICB+IHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgIH4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIH4gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIH4gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICB+IHVuZGVyIHRoZSBMaWNlbnNlLgorICAtLT4KKworPHByb2plY3QgbmFtZT0iTWF2ZW4gU0NNIFBlcmZvcmNlIFByb3ZpZGVyIj4KKyAgPGJvZHk+CisgICAgPG1lbnUgcmVmPSJwYXJlbnQiIC8+CisKKyAgICA8bWVudSBuYW1lPSJPdmVydmlldyI+CisgICAgICA8aXRlbSBuYW1lPSJJbnRyb2R1Y3Rpb24iIGhyZWY9ImluZGV4Lmh0bWwiLz4KKyAgICA8L21lbnU+CisKKyAgICA8bWVudSByZWY9InJlcG9ydHMiIGluaGVyaXQ9ImJvdHRvbSIgLz4KKyAgPC9ib2R5PgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vTElDRU5TRS50eHQgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9MSUNFTlNFLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY0NTY5NS4uMDAwMDAwMAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9MSUNFTlNFLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0Ci0gICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCi0KLSAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgotCi0gICAxLiBEZWZpbml0aW9ucy4KLQotICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKLSAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgotCi0gICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQotICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgotCi0gICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCi0gICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCi0gICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAotICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCi0gICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgotICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCi0gICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgotCi0gICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0gICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgotCi0gICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKLSAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KLSAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCi0KLSAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCi0gICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0Ci0gICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCi0gICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCi0KLSAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCi0gICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCi0gICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKLSAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCi0KLSAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKLSAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKLSAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKLSAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCi0gICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KLSAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKLSAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCi0KLSAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCi0gICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCi0gICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKLSAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKLSAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgotICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCi0gICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50Ci0gICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bwotICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKLSAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCi0gICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKLSAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCi0gICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKLQotICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKLSAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAotICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCi0KLSAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAotICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKLSAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAotICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCi0gICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgotCi0gICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKLSAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKLSAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAotICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKLSAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCi0gICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCi0gICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQotICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKLSAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKLSAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0Ci0gICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCi0gICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKLSAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KLQotICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKLSAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAotICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKLSAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi0gICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgotICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCi0KLSAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKLSAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKLQotICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCi0gICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAotICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCi0gICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgotICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKLQotICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCi0gICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAotICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAotICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAotICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQotICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCi0gICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgotICAgICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAotICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKLSAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKLSAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCi0gICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KLSAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQotICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAotICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAotICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KLQotICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCi0gICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCi0gICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKLSAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAotICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KLQotICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAotICAgICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCi0gICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCi0gICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5Ci0gICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAotICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgotCi0gICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCi0gICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCi0gICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKLSAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgotCi0gICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKLSAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKLSAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCi0gICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucwotICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQotICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCi0gICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKLSAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KLQotICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCi0gICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKLSAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5Ci0gICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQotICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAotICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCi0gICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCi0gICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCi0gICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAotICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgotICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgotCi0gICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCi0gICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAotICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKLSAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCi0gICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQotICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKLSAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKLSAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQotICAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgotICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCi0KLSAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUwotCi0gICBBUFBFTkRJWDogSG93IHRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmsuCi0KLSAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCi0gICAgICBib2lsZXJwbGF0ZSBub3RpY2UsIHdpdGggdGhlIGZpZWxkcyBlbmNsb3NlZCBieSBicmFja2V0cyAiW10iCi0gICAgICByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLiAoRG9uJ3QgaW5jbHVkZQotICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKLSAgICAgIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYQotICAgICAgZmlsZSBvciBjbGFzcyBuYW1lIGFuZCBkZXNjcmlwdGlvbiBvZiBwdXJwb3NlIGJlIGluY2x1ZGVkIG9uIHRoZQotICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCi0gICAgICBpZGVudGlmaWNhdGlvbiB3aXRoaW4gdGhpcmQtcGFydHkgYXJjaGl2ZXMuCi0KLSAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQotCi0gICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vTk9USUNFLnR4dCBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL05PVElDRS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNTk4MDUuLjAwMDAwMDAKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vTk9USUNFLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieQotVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3BvbS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9wb20ueG1sCmluZGV4IGJmN2I3ZmYuLjY3NmEwMWEgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3BvbS54bWwKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vcG9tLnhtbApAQCAtMSw0ICsxLDYgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCEtLQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPCEtLQogICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKICAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKICAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpAQCAtMTgsMTUgKzIwLDE4IEBACiAgIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxwYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyczwvYXJ0aWZhY3RJZD4KICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXJzPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+Ci0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwogICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW08L2FydGlmYWN0SWQ+CisKICAgPG5hbWU+TWF2ZW4gU0NNIFN0YXJ0ZWFtIFByb3ZpZGVyPC9uYW1lPgotICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CisgIDxkZXNjcmlwdGlvbj5TQ00gUHJvdmlkZXIgaW1wbGVtZW50YXRpb24gZm9yIFN0YXJ0ZWFtIChodHRwOi8vd3d3LmJvcmxhbmQuY29tL3VzL3Byb2R1Y3RzL3N0YXJ0ZWFtL2luZGV4Lmh0bWwpLjwvZGVzY3JpcHRpb24+CiAKICAgPGJ1aWxkPgogICAgIDxwbHVnaW5zPgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9TdGFydGVhbVNjbVByb3ZpZGVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL1N0YXJ0ZWFtU2NtUHJvdmlkZXIuamF2YQppbmRleCA5ZjdkYzFiLi5kYzBjNWIzIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL1N0YXJ0ZWFtU2NtUHJvdmlkZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL1N0YXJ0ZWFtU2NtUHJvdmlkZXIuamF2YQpAQCAtNjksNiArNjksNyBAQAogICAgIC8vIFNjbVByb3ZpZGVyIEltcGxlbWVudGF0aW9uCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU2NtUHJvdmlkZXJSZXBvc2l0b3J5IG1ha2VQcm92aWRlclNjbVJlcG9zaXRvcnkoIFN0cmluZyBzY21TcGVjaWZpY1VybCwgY2hhciBkZWxpbWl0ZXIgKQogICAgICAgICB0aHJvd3MgU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbgogICAgIHsKQEAgLTE1Niw5ICsxNTcsNyBAQAogICAgICAgICByZXR1cm4gInN0YXJ0ZWFtIjsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjYWRkKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEFkZFNjbVJlc3VsdCBhZGQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtMTcxLDkgKzE3MCw3IEBACiAgICAgICAgIHJldHVybiAoQWRkU2NtUmVzdWx0KSBjb21tYW5kLmV4ZWN1dGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjY2hhbmdlbG9nKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoYW5nZUxvZ1NjbVJlc3VsdCBjaGFuZ2Vsb2coIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC0xODcsOSArMTg0LDcgQEAKICAgICAgICAgcmV0dXJuIChDaGFuZ2VMb2dTY21SZXN1bHQpIGNvbW1hbmQuZXhlY3V0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciNjaGVja2luKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoZWNrSW5TY21SZXN1bHQgY2hlY2tpbiggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtMjAzLDkgKzE5OCw3IEBACiAgICAgICAgIHJldHVybiAoQ2hlY2tJblNjbVJlc3VsdCkgY29tbWFuZC5leGVjdXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI2NoZWNrb3V0KG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoZWNrT3V0U2NtUmVzdWx0IGNoZWNrb3V0KCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTIxOSw5ICsyMTIsNyBAQAogICAgICAgICByZXR1cm4gKENoZWNrT3V0U2NtUmVzdWx0KSBjb21tYW5kLmV4ZWN1dGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjZGlmZihvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBEaWZmU2NtUmVzdWx0IGRpZmYoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtMjM0LDkgKzIyNSw3IEBACiAgICAgICAgIHJldHVybiAoRGlmZlNjbVJlc3VsdCkgY29tbWFuZC5leGVjdXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI3N0YXR1cyhvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTdGF0dXNTY21SZXN1bHQgc3RhdHVzKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKQEAgLTI0OSw5ICsyMzgsNyBAQAogICAgICAgICByZXR1cm4gKFN0YXR1c1NjbVJlc3VsdCkgY29tbWFuZC5leGVjdXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI3RhZyhvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBUYWdTY21SZXN1bHQgdGFnKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKQEAgLTI2NCw5ICsyNTEsNyBAQAogICAgICAgICByZXR1cm4gKFRhZ1NjbVJlc3VsdCkgY29tbWFuZC5leGVjdXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI3VwZGF0ZShvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKQEAgLTI3OSw2ICsyNjQsNyBAQAogICAgICAgICByZXR1cm4gKFVwZGF0ZVNjbVJlc3VsdCkgY29tbWFuZC5leGVjdXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgRWRpdFNjbVJlc3VsdCBlZGl0KCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKQEAgLTI5MSw2ICsyNzcsNyBAQAogICAgICAgICByZXR1cm4gKEVkaXRTY21SZXN1bHQpIGNvbW1hbmQuZXhlY3V0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFVuRWRpdFNjbVJlc3VsdCB1bmVkaXQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC0zMDQsOSArMjkxLDcgQEAKICAgICAgICAgcmV0dXJuIChVbkVkaXRTY21SZXN1bHQpIGNvbW1hbmQuZXhlY3V0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciNyZW1vdmUob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgUmVtb3ZlU2NtUmVzdWx0IHJlbW92ZSggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvYWRkL1N0YXJ0ZWFtQWRkQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL2FkZC9TdGFydGVhbUFkZENvbW1hbmQuamF2YQppbmRleCBiZThhYTUwLi5iNDM1YWU0IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvYWRkL1N0YXJ0ZWFtQWRkQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC9hZGQvU3RhcnRlYW1BZGRDb21tYW5kLmphdmEKQEAgLTQzLDYgKzQzLDcgQEAKICAgICBleHRlbmRzIEFic3RyYWN0QWRkQ29tbWFuZAogICAgIGltcGxlbWVudHMgU3RhcnRlYW1Db21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU2NtUmVzdWx0IGV4ZWN1dGVBZGRDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGJpbmFyeSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTg0LDcgKzg1LDcgQEAKICAgICBzdGF0aWMgQ29tbWFuZGxpbmUgY3JlYXRlQ29tbWFuZExpbmUoIFN0YXJ0ZWFtU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgc2NtRmlsZVNldCwgU3RyaW5nIGlzc3VlICkKICAgICB7CiAgICAgICAgIExpc3QgYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKCBpc3N1ZSAhPSBudWxsICYmIGlzc3VlLmxlbmd0aCgpICE9IDAgKQogICAgICAgICB7CiAgICAgICAgICAgICBhcmdzLmFkZCggIi1jciIgKTsKQEAgLTkyLDcgKzkzLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIFN0YXJ0ZWFtQ29tbWFuZExpbmVVdGlscy5hZGRFT0xPcHRpb24oIGFyZ3MgKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICByZXR1cm4gU3RhcnRlYW1Db21tYW5kTGluZVV0aWxzLmNyZWF0ZVN0YXJ0ZWFtQ29tbWFuZExpbmUoICJhZGQiLCBhcmdzLCBzY21GaWxlU2V0LCByZXBvICk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL2FkZC9TdGFydGVhbUFkZENvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvYWRkL1N0YXJ0ZWFtQWRkQ29uc3VtZXIuamF2YQppbmRleCBlY2Q0NjAzLi5mMTRhM2I4IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvYWRkL1N0YXJ0ZWFtQWRkQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvYWRkL1N0YXJ0ZWFtQWRkQ29uc3VtZXIuamF2YQpAQCAtNjksNiArNjksNyBAQAogICAgICAgICB0aGlzLndvcmtpbmdEaXJlY3RvcnkgPSBiYXNlZGlyLmdldFBhdGgoKS5yZXBsYWNlKCAnXFwnLCAnLycgKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBsb2dnZXIuZGVidWcoIGxpbmUgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC9jaGFuZ2Vsb2cvU3RhcnRlYW1DaGFuZ2VMb2dDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvY2hhbmdlbG9nL1N0YXJ0ZWFtQ2hhbmdlTG9nQ29tbWFuZC5qYXZhCmluZGV4IGI5ZDYxNDIuLjk4OTQyNDcgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC9jaGFuZ2Vsb2cvU3RhcnRlYW1DaGFuZ2VMb2dDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL2NoYW5nZWxvZy9TdGFydGVhbUNoYW5nZUxvZ0NvbW1hbmQuamF2YQpAQCAtNDgsMTMgKzQ4LDE0IEBACiAgICAgLy8gQWJzdHJhY3RDaGFuZ2VMb2dDb21tYW5kIEltcGxlbWVudGF0aW9uCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hhbmdlTG9nU2NtUmVzdWx0IGV4ZWN1dGVDaGFuZ2VMb2dDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGUgc3RhcnREYXRlLCBEYXRlIGVuZERhdGUsIFNjbUJyYW5jaCBicmFuY2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGVQYXR0ZXJuICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKIAotICAgICAgICBpZiAoIGJyYW5jaCAhPSBudWxsIHx8IFN0cmluZ1V0aWxzLmlzTm90RW1wdHkoIChicmFuY2g9PW51bGwpP251bGw6YnJhbmNoLmdldE5hbWUoKSApICkKKyAgICAgICAgaWYgKCBicmFuY2ggIT0gbnVsbCB8fCBTdHJpbmdVdGlscy5pc05vdEVtcHR5KCAoIGJyYW5jaCA9PSBudWxsICkgPyBudWxsIDogYnJhbmNoLmdldE5hbWUoKSApICkKICAgICAgICAgewogICAgICAgICAgICAgdGhpcy5nZXRMb2dnZXIoKS53YXJuKCAiVGhpcyBwcm92aWRlciBkb2Vzbid0IHN1cHBvcnQgY2hhbmdlbG9nIHdpdGggb24gYSBnaXZlbiBicmFuY2guIiApOwogICAgICAgICB9CkBAIC0xMDEsMTUgKzEwMiwxNSBAQAogICAgICAgICByZXR1cm4gU3RhcnRlYW1Db21tYW5kTGluZVV0aWxzLmNyZWF0ZVN0YXJ0ZWFtQ29tbWFuZExpbmUoICJoaXN0IiwgbnVsbCwgd29ya2luZ0RpcmVjdG9yeSwgcmVwbyApOwogCiAgICAgICAgIC8qKgotICAgICAgICAgKiB1bmZvcnR1bmF0ZWx5IHRoZSBiZWxvdyBvcHRpb24gb25seSBnaXZlcyB0aGUgaGlzdCBmcm9tIHZpZXcgY3JlYXRpb24gZGF0ZSB0byAKLSAgICAgICAgICogdGhlIHNwZWNpZmllZCBkYXRlLiAgV2hhdCBnb29kIGlzIHRoYXQ/Pz8/PyAKKyAgICAgICAgICogdW5mb3J0dW5hdGVseSB0aGUgYmVsb3cgb3B0aW9uIG9ubHkgZ2l2ZXMgdGhlIGhpc3QgZnJvbSB2aWV3IGNyZWF0aW9uIGRhdGUgdG8KKyAgICAgICAgICogdGhlIHNwZWNpZmllZCBkYXRlLiAgV2hhdCBnb29kIGlzIHRoYXQ/Pz8/PwogICAgICAgICAgKi8KIAogICAgICAgICAvKgogICAgICAgICBpZiAoIHN0YXJ0RGF0ZSAhPSBudWxsICkKICAgICAgICAgewogICAgICAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBsb2NhbEZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAiLWNmZ2QiICk7CiAKICAgICAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIGxvY2FsRm9ybWF0LmZvcm1hdCggc3RhcnREYXRlICkudG9TdHJpbmcoKSApOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL2NoYW5nZWxvZy9TdGFydGVhbUNoYW5nZUxvZ0NvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvY2hhbmdlbG9nL1N0YXJ0ZWFtQ2hhbmdlTG9nQ29uc3VtZXIuamF2YQppbmRleCAzZmYxNGMyLi41Zjg0YTMyIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvY2hhbmdlbG9nL1N0YXJ0ZWFtQ2hhbmdlTG9nQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvY2hhbmdlbG9nL1N0YXJ0ZWFtQ2hhbmdlTG9nQ29uc3VtZXIuamF2YQpAQCAtMTczLDYgKzE3Myw3IEBACiAgICAgLy8gU3RyZWFtQ29uc3VtZXIgSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBnZXRMb2dnZXIoKS5kZWJ1ZyggbGluZSApOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL2NoZWNraW4vU3RhcnRlYW1DaGVja0luQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL2NoZWNraW4vU3RhcnRlYW1DaGVja0luQ29tbWFuZC5qYXZhCmluZGV4IGE5ZTUxZWEuLjFkYWE5MTYgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC9jaGVja2luL1N0YXJ0ZWFtQ2hlY2tJbkNvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvY2hlY2tpbi9TdGFydGVhbUNoZWNrSW5Db21tYW5kLmphdmEKQEAgLTQ4LDYgKzQ4LDcgQEAKICAgICAvLyBBYnN0cmFjdENoZWNrSW5Db21tYW5kIEltcGxlbWVudGF0aW9uCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hlY2tJblNjbVJlc3VsdCBleGVjdXRlQ2hlY2tJbkNvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvLCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyBtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiB2ZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL2NoZWNraW4vU3RhcnRlYW1DaGVja0luQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC9jaGVja2luL1N0YXJ0ZWFtQ2hlY2tJbkNvbnN1bWVyLmphdmEKaW5kZXggZWU0YjBhYi4uYzEwN2ZjZiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL2NoZWNraW4vU3RhcnRlYW1DaGVja0luQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvY2hlY2tpbi9TdGFydGVhbUNoZWNrSW5Db25zdW1lci5qYXZhCkBAIC03Miw2ICs3Miw3IEBACiAgICAgICAgIHRoaXMud29ya2luZ0RpcmVjdG9yeSA9IGJhc2VkaXIuZ2V0UGF0aCgpLnJlcGxhY2UoICdcXCcsICcvJyApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgY29uc3VtZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIGxvZ2dlci5kZWJ1ZyggbGluZSApOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL2NoZWNrb3V0L1N0YXJ0ZWFtQ2hlY2tPdXRDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvY2hlY2tvdXQvU3RhcnRlYW1DaGVja091dENvbW1hbmQuamF2YQppbmRleCA0ZGY4MzlkLi45ZWZhNWU1IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvY2hlY2tvdXQvU3RhcnRlYW1DaGVja091dENvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvY2hlY2tvdXQvU3RhcnRlYW1DaGVja091dENvbW1hbmQuamF2YQpAQCAtNDgsNiArNDgsNyBAQAogICAgIC8vIEFic3RyYWN0Q2hlY2tPdXRDb21tYW5kIEltcGxlbWVudGF0aW9uCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hlY2tPdXRTY21SZXN1bHQgZXhlY3V0ZUNoZWNrT3V0Q29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiB2ZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL2NoZWNrb3V0L1N0YXJ0ZWFtQ2hlY2tPdXRDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL2NoZWNrb3V0L1N0YXJ0ZWFtQ2hlY2tPdXRDb25zdW1lci5qYXZhCmluZGV4IGJkMjljZjEuLjVmOTI4ZDEgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC9jaGVja291dC9TdGFydGVhbUNoZWNrT3V0Q29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvY2hlY2tvdXQvU3RhcnRlYW1DaGVja091dENvbnN1bWVyLmphdmEKQEAgLTY2LDYgKzY2LDcgQEAKICAgICAgICAgdGhpcy53b3JraW5nRGlyZWN0b3J5ID0gd29ya2luZ0RpcmVjdG9yeS5nZXRQYXRoKCkucmVwbGFjZSggJ1xcJywgJy8nICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgbG9nZ2VyLmRlYnVnKCBsaW5lICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvZGlmZi9TdGFydGVhbURpZmZDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvZGlmZi9TdGFydGVhbURpZmZDb21tYW5kLmphdmEKaW5kZXggM2U3YjMxOC4uYjEyZmNjYiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL2RpZmYvU3RhcnRlYW1EaWZmQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC9kaWZmL1N0YXJ0ZWFtRGlmZkNvbW1hbmQuamF2YQpAQCAtNDYsNiArNDYsOCBAQAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBBYnN0cmFjdERpZmZDb21tYW5kIEltcGxlbWVudGF0aW9uCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgRGlmZlNjbVJlc3VsdCBleGVjdXRlRGlmZkNvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvLCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gc3RhcnRWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiBlbmRWZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL2RpZmYvU3RhcnRlYW1EaWZmQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC9kaWZmL1N0YXJ0ZWFtRGlmZkNvbnN1bWVyLmphdmEKaW5kZXggYmJkMjkzMS4uODFhYmQ0ZSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL2RpZmYvU3RhcnRlYW1EaWZmQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvZGlmZi9TdGFydGVhbURpZmZDb25zdW1lci5qYXZhCkBAIC0zNywxOSArMzcsMTkgQEAKIHB1YmxpYyBjbGFzcyBTdGFydGVhbURpZmZDb25zdW1lcgogICAgIGltcGxlbWVudHMgU3RyZWFtQ29uc3VtZXIKIHsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgV09SS0lOR19ESVJfVE9LRU4gPSAiKHdvcmtpbmcgZGlyOiAiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXT1JLSU5HX0RJUl9UT0tFTiA9ICIod29ya2luZyBkaXI6ICI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgUEFUQ0hfU0VQQVJBVE9SX1RPS0VOID0gIi0tLS0tLS0tLS0tLS0tIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFUQ0hfU0VQQVJBVE9SX1RPS0VOID0gIi0tLS0tLS0tLS0tLS0tIjsKIAotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBSRVZJU0lPTl9UT0tFTiA9ICIgUmV2aXNpb246ICI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFVklTSU9OX1RPS0VOID0gIiBSZXZpc2lvbjogIjsKIAotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBPTkRJU0tfVE9LRU4gPSAiIChvbiBkaXNrKSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE9ORElTS19UT0tFTiA9ICIgKG9uIGRpc2spIjsKIAotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBBRERFRF9MSU5FX1RPS0VOID0gIisiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBRERFRF9MSU5FX1RPS0VOID0gIisiOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTU9WRURfTElORV9UT0tFTiA9ICItIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVNT1ZFRF9MSU5FX1RPS0VOID0gIi0iOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFVOQ0hBTkdFRF9MSU5FX1RPS0VOID0gIiAiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVTkNIQU5HRURfTElORV9UT0tFTiA9ICIgIjsKIAogICAgIHByaXZhdGUgU2NtTG9nZ2VyIGxvZ2dlcjsKIApAQCAtODIsNiArODIsNyBAQAogICAgIC8vIFN0cmVhbUNvbnN1bWVyIEltcGxlbWVudGF0aW9uCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgaW50IHBvcyA9IDA7CkBAIC0xNTQsOCArMTU1LDggQEAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICggbGluZS5zdGFydHNXaXRoKCBBRERFRF9MSU5FX1RPS0VOICkgfHwgbGluZS5zdGFydHNXaXRoKCBSRU1PVkVEX0xJTkVfVE9LRU4gKSB8fAotICAgICAgICAgICAgbGluZS5zdGFydHNXaXRoKCBVTkNIQU5HRURfTElORV9UT0tFTiApICkKKyAgICAgICAgaWYgKCBsaW5lLnN0YXJ0c1dpdGgoIEFEREVEX0xJTkVfVE9LRU4gKSB8fCBsaW5lLnN0YXJ0c1dpdGgoIFJFTU9WRURfTElORV9UT0tFTiApCisgICAgICAgICAgICB8fCBsaW5lLnN0YXJ0c1dpdGgoIFVOQ0hBTkdFRF9MSU5FX1RPS0VOICkgKQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBhZGQgdG8gYnVmZmVyCiAgICAgICAgICAgICBjdXJyZW50RGlmZmVyZW5jZS5hcHBlbmQoIGxpbmUgKS5hcHBlbmQoICJcbiIgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC9lZGl0L1N0YXJ0ZWFtRWRpdENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC9lZGl0L1N0YXJ0ZWFtRWRpdENvbW1hbmQuamF2YQppbmRleCA4N2JmMTU1Li4yNjM2Nzg0IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvZWRpdC9TdGFydGVhbUVkaXRDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL2VkaXQvU3RhcnRlYW1FZGl0Q29tbWFuZC5qYXZhCkBAIC00Nyw2ICs0Nyw3IEBACiAgICAgLy8gQWJzdHJhY3RFZGl0Q29tbWFuZCBJbXBsZW1lbnRhdGlvbgogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFNjbVJlc3VsdCBleGVjdXRlRWRpdENvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvLCBTY21GaWxlU2V0IGZpbGVTZXQgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL2VkaXQvU3RhcnRlYW1FZGl0Q29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC9lZGl0L1N0YXJ0ZWFtRWRpdENvbnN1bWVyLmphdmEKaW5kZXggZTA5NGRjMy4uYzFkNzVmMyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL2VkaXQvU3RhcnRlYW1FZGl0Q29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvZWRpdC9TdGFydGVhbUVkaXRDb25zdW1lci5qYXZhCkBAIC02Myw2ICs2Myw3IEBACiAgICAgICAgIHRoaXMud29ya2luZ0RpcmVjdG9yeSA9IGJhc2VkaXIuZ2V0UGF0aCgpLnJlcGxhY2UoICdcXCcsICcvJyApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgY29uc3VtZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIGxvZ2dlci5kZWJ1ZyggbGluZSApOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL3JlbW92ZS9TdGFydGVhbVJlbW92ZUNvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC9yZW1vdmUvU3RhcnRlYW1SZW1vdmVDb21tYW5kLmphdmEKaW5kZXggN2JmYWY4ZS4uY2Y0YjFjNiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL3JlbW92ZS9TdGFydGVhbVJlbW92ZUNvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvcmVtb3ZlL1N0YXJ0ZWFtUmVtb3ZlQ29tbWFuZC5qYXZhCkBAIC00Myw2ICs0Myw3IEBACiAgICAgZXh0ZW5kcyBBYnN0cmFjdFJlbW92ZUNvbW1hbmQKICAgICBpbXBsZW1lbnRzIFN0YXJ0ZWFtQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFNjbVJlc3VsdCBleGVjdXRlUmVtb3ZlQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIG1lc3NhZ2UgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL3JlbW92ZS9TdGFydGVhbVJlbW92ZUNvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvcmVtb3ZlL1N0YXJ0ZWFtUmVtb3ZlQ29uc3VtZXIuamF2YQppbmRleCBhMzdkZDFjLi5mZTU0YjBlIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvcmVtb3ZlL1N0YXJ0ZWFtUmVtb3ZlQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvcmVtb3ZlL1N0YXJ0ZWFtUmVtb3ZlQ29uc3VtZXIuamF2YQpAQCAtNjksNiArNjksNyBAQAogICAgICAgICB0aGlzLndvcmtpbmdEaXJlY3RvcnkgPSBiYXNlZGlyLmdldFBhdGgoKS5yZXBsYWNlKCAnXFwnLCAnLycgKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBsb2dnZXIuZGVidWcoIGxpbmUgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC9zdGF0dXMvU3RhcnRlYW1TdGF0dXNDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvc3RhdHVzL1N0YXJ0ZWFtU3RhdHVzQ29tbWFuZC5qYXZhCmluZGV4IGY2NGRhNzEuLmQ1NTY5YTggMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC9zdGF0dXMvU3RhcnRlYW1TdGF0dXNDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL3N0YXR1cy9TdGFydGVhbVN0YXR1c0NvbW1hbmQuamF2YQpAQCAtNDIsNiArNDIsNyBAQAogICAgIC8vIEFic3RyYWN0U3RhdHVzQ29tbWFuZCBJbXBsZW1lbnRhdGlvbgogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFN0YXR1c1NjbVJlc3VsdCBleGVjdXRlU3RhdHVzQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvc3RhdHVzL1N0YXJ0ZWFtU3RhdHVzQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC9zdGF0dXMvU3RhcnRlYW1TdGF0dXNDb25zdW1lci5qYXZhCmluZGV4IDEzZWMwOTAuLjgzNDUwMDggMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC9zdGF0dXMvU3RhcnRlYW1TdGF0dXNDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC9zdGF0dXMvU3RhcnRlYW1TdGF0dXNDb25zdW1lci5qYXZhCkBAIC04MCw2ICs4MCw3IEBACiAgICAgICAgIHRoaXMud29ya2luZ0RpcmVjdG9yeSA9IGJhc2VkaXIuZ2V0UGF0aCgpLnJlcGxhY2UoICdcXCcsICcvJyApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgY29uc3VtZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIGxvZ2dlci5kZWJ1ZyggbGluZSApOwpAQCAtMTUwLDcgKzE1MSw3IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoIHN0YXR1cy5lcXVhbHMoIENVUlJFTlRfTUFSS0VSICkgKQogICAgICAgICB7Ci0gICAgICAgICAgICAvL2lnbm9yZSAgIAorICAgICAgICAgICAgLy9pZ25vcmUKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC90YWcvU3RhcnRlYW1UYWdDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvdGFnL1N0YXJ0ZWFtVGFnQ29tbWFuZC5qYXZhCmluZGV4IDhhMTNjYTkuLjJmYmRiZDcgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC90YWcvU3RhcnRlYW1UYWdDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL3RhZy9TdGFydGVhbVRhZ0NvbW1hbmQuamF2YQpAQCAtNDUsNiArNDUsNyBAQAogICAgIC8vIEFic3RyYWN0VGFnQ29tbWFuZCBJbXBsZW1lbnRhdGlvbgogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFNjbVJlc3VsdCBleGVjdXRlVGFnQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZywgU3RyaW5nIG1lc3NhZ2UgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL3RhZy9TdGFydGVhbVRhZ0NvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvdGFnL1N0YXJ0ZWFtVGFnQ29uc3VtZXIuamF2YQppbmRleCA2MDUyNGE1Li41N2ZlYjk0IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvdGFnL1N0YXJ0ZWFtVGFnQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvdGFnL1N0YXJ0ZWFtVGFnQ29uc3VtZXIuamF2YQpAQCAtNDEsNiArNDEsNyBAQAogICAgICAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBsb2dnZXIuaW5mbyggbGluZSApOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL3VuZWRpdC9TdGFydGVhbVVuRWRpdENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC91bmVkaXQvU3RhcnRlYW1VbkVkaXRDb21tYW5kLmphdmEKaW5kZXggMzcxYTQ2Ny4uODliNTBjMyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL3VuZWRpdC9TdGFydGVhbVVuRWRpdENvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvdW5lZGl0L1N0YXJ0ZWFtVW5FZGl0Q29tbWFuZC5qYXZhCkBAIC00Nyw2ICs0Nyw3IEBACiAgICAgLy8gQWJzdHJhY3RFZGl0Q29tbWFuZCBJbXBsZW1lbnRhdGlvbgogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFNjbVJlc3VsdCBleGVjdXRlVW5FZGl0Q29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvdW5lZGl0L1N0YXJ0ZWFtVW5FZGl0Q29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC91bmVkaXQvU3RhcnRlYW1VbkVkaXRDb25zdW1lci5qYXZhCmluZGV4IDExY2E2ZjYuLjM0NDUyZDEgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC91bmVkaXQvU3RhcnRlYW1VbkVkaXRDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC91bmVkaXQvU3RhcnRlYW1VbkVkaXRDb25zdW1lci5qYXZhCkBAIC02Myw2ICs2Myw3IEBACiAgICAgICAgIHRoaXMud29ya2luZ0RpcmVjdG9yeSA9IGJhc2VkaXIuZ2V0UGF0aCgpLnJlcGxhY2UoICdcXCcsICcvJyApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgY29uc3VtZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIGxvZ2dlci5kZWJ1ZyggbGluZSApOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL3VwZGF0ZS9TdGFydGVhbVVwZGF0ZUNvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vY29tbWFuZC91cGRhdGUvU3RhcnRlYW1VcGRhdGVDb21tYW5kLmphdmEKaW5kZXggZGY0NThlZC4uYWVkNzIyZCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS9jb21tYW5kL3VwZGF0ZS9TdGFydGVhbVVwZGF0ZUNvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL2NvbW1hbmQvdXBkYXRlL1N0YXJ0ZWFtVXBkYXRlQ29tbWFuZC5qYXZhCkBAIC01Myw2ICs1Myw3IEBACiAgICAgLy8gQWJzdHJhY3RVcGRhdGVDb21tYW5kIEltcGxlbWVudGF0aW9uCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgVXBkYXRlU2NtUmVzdWx0IGV4ZWN1dGVVcGRhdGVDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtMTM2LDkgKzEzNyw3IEBACiAgICAgICAgIHJldHVybiBTdGFydGVhbUNvbW1hbmRMaW5lVXRpbHMuY3JlYXRlU3RhcnRlYW1Db21tYW5kTGluZSggImNvIiwgYXJncywgZmlsZVNldCwgcmVwbyApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC51cGRhdGUuQWJzdHJhY3RVcGRhdGVDb21tYW5kI2dldENoYW5nZUxvZ0NvbW1hbmQoKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENoYW5nZUxvZ0NvbW1hbmQgZ2V0Q2hhbmdlTG9nQ29tbWFuZCgpCiAgICAgewogICAgICAgICBTdGFydGVhbUNoYW5nZUxvZ0NvbW1hbmQgY29tbWFuZCA9IG5ldyBTdGFydGVhbUNoYW5nZUxvZ0NvbW1hbmQoKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vdXRpbC9TdGFydGVhbVV0aWwuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3RhcnRlYW0vdXRpbC9TdGFydGVhbVV0aWwuamF2YQppbmRleCA4MTk2OGM2Li5hMjkxZGUyIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N0YXJ0ZWFtL3V0aWwvU3RhcnRlYW1VdGlsLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdGFydGVhbS91dGlsL1N0YXJ0ZWFtVXRpbC5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86ZGFudHJhbkBhcGFjaGUub3JnIj5EYW4gVC4gVHJhbjwvYT4KLSAqIEB2ZXJzaW9uICRJZCQKKyAqIEB2ZXJzaW9uICRJZDogJAogICovCiBwdWJsaWMgY2xhc3MgU3RhcnRlYW1VdGlsCiB7CkBAIC01MiwxNSArNTIsMTcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhdGNoICggRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUgKQogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIG5vcAogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2F0Y2ggKCBJT0V4Y2VwdGlvbiBlICkKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBub3AKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhdGNoICggWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiBlICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IHNldHRpbmdzRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSArICIgaXNuJ3Qgd2VsbCBmb3JtZWQuIFNLSVBQRUQuIiArIGUuZ2V0TWVzc2FnZSgpOwogCi0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBtZXNzYWdlICk7CisgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCBtZXNzYWdlICk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL3NpdGUvc2l0ZS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbS9zcmMvc2l0ZS9zaXRlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjQyMjcxCi0tLSAvZGV2L251bGwKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3RhcnRlYW0vc3JjL3NpdGUvc2l0ZS54bWwKQEAgLTAsMCArMSwzMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PgorCis8IS0tCisgIH4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICB+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICB+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgIH4gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICB+IHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgfiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgIH4gd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgfiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICB+ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICB+IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICB+IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgfiB1bmRlciB0aGUgTGljZW5zZS4KKyAgLS0+CisKKzxwcm9qZWN0IG5hbWU9Ik1hdmVuIFNDTSBTdGFydGVhbSBQcm92aWRlciI+CisgIDxib2R5PgorICAgIDxtZW51IHJlZj0icGFyZW50IiAvPgorCisgICAgPG1lbnUgbmFtZT0iT3ZlcnZpZXciPgorICAgICAgPGl0ZW0gbmFtZT0iSW50cm9kdWN0aW9uIiBocmVmPSJpbmRleC5odG1sIi8+CisgICAgPC9tZW51PgorCisgICAgPG1lbnUgcmVmPSJyZXBvcnRzIiBpbmhlcml0PSJib3R0b20iIC8+CisgIDwvYm9keT4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvTElDRU5TRS50eHQgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L0xJQ0VOU0UudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2E0MmUyLi4wMDAwMDAwCi0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvTElDRU5TRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAotICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLwotCi0gICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KLQotICAgMS4gRGVmaW5pdGlvbnMuCi0KLSAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCi0gICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KLQotICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KLQotICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAotICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgotICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKLSAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQotICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKLSAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQotICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KLQotICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KLQotICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCi0gICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCi0gICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgotCi0gICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAotICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAotICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAotICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgotCi0gICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgotICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQotICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCi0gICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgotCi0gICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0Ci0gICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCi0gICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCi0gICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcwotICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCi0gICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCi0gICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgotCi0gICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZwotICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucwotICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5Ci0gICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCi0gICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgotICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAotICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KLSAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCi0gICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQotICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0Ci0gICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQotICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCi0KLSAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0gICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKLSAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgotCi0gICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKLSAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKLSAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQotICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KLQotICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCi0gICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKLSAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCi0gICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgotICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQotICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKLSAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCi0gICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCi0gICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAotICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcwotICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCi0gICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCi0KLSAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCi0gICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKLSAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91Ci0gICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKLSAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAotCi0gICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCi0gICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCi0KLSAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcwotICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKLSAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAotICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKLSAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCi0KLSAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cwotICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKLSAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKLSAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKLSAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKLSAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAotICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKLSAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKLSAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCi0gICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCi0gICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAotICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCi0gICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKLSAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKLSAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKLSAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAotICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgotICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCi0gICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKLSAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCi0KLSAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKLSAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawotICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgotICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQotICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKLSAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KLQotICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQotICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAotICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCi0gICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KLQotICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCi0gICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCi0gICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKLSAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKLSAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQotICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55Ci0gICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCi0KLSAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAotICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCi0gICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQotICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKLSAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKLSAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQotICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQotICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAotICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKLSAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKLSAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KLQotICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZwotICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKLSAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCi0gICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcwotICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKLSAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCi0gICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCi0gICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKLSAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KLSAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgotCi0gICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKLQotICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLgotCi0gICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZwotICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIgotICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKLSAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCi0gICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEKLSAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKLSAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgotICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgotCi0gICBDb3B5cmlnaHQgMjAwNiBMYSBQb3N0ZQotCi0gICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9OT1RJQ0UudHh0IGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9OT1RJQ0UudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjU5ODA1Li4wMDAwMDAwCi0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvTk9USUNFLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieQotVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvcG9tLnhtbCBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvcG9tLnhtbAppbmRleCA3ZjY4YTRkLi5mNjZmN2QxIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3BvbS54bWwKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9wb20ueG1sCkBAIC0xLDQgKzEsNiBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IS0tCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8IS0tCiAgIH4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQogICB+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogICB+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCkBAIC0xOSwxNSArMjEsMTcgQEAKIAogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+CiAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwogICA8cGFyZW50PgotICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlcnM8L2FydGlmYWN0SWQ+CiAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyczwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgotICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KKwogICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneTwvYXJ0aWZhY3RJZD4KKwogICA8bmFtZT5NYXZlbiBTQ00gU3luZXJneSBQcm92aWRlcjwvbmFtZT4KLSAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgorICA8ZGVzY3JpcHRpb24+U0NNIFByb3ZpZGVyIGltcGxlbWVudGF0aW9uIGZvciBTeW5lcmd5IChodHRwOi8vd3d3LnRlbGVsb2dpYy5jb20vY29ycC9wcm9kdWN0cy9zeW5lcmd5L2luZGV4LmNmbSkuPC9kZXNjcmlwdGlvbj4KIAogICA8YnVpbGQ+CiAgICAgPHBsdWdpbnM+CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9TeW5lcmd5U2NtUHJvdmlkZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L1N5bmVyZ3lTY21Qcm92aWRlci5qYXZhCmluZGV4IGRmOTg3OTkuLjU2NDhhNzYgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L1N5bmVyZ3lTY21Qcm92aWRlci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L1N5bmVyZ3lTY21Qcm92aWRlci5qYXZhCkBAIC01NCwzMiArNTQsMzIgQEAKICAgICBleHRlbmRzIEFic3RyYWN0U2NtUHJvdmlkZXIKIHsKIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSBtYWtlUHJvdmlkZXJTY21SZXBvc2l0b3J5KCBTdHJpbmcgc2NtU3BlY2lmaWNVcmwsIGNoYXIgZGVsaW1pdGVyICkKICAgICAgICAgdGhyb3dzIFNjbVJlcG9zaXRvcnlFeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgU3luZXJneVNjbVByb3ZpZGVyUmVwb3NpdG9yeSggc2NtU3BlY2lmaWNVcmwgKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2NtVHlwZSgpCiAgICAgewogICAgICAgICByZXR1cm4gInN5bmVyZ3kiOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIGJvb2xlYW4gcmVxdWlyZXNFZGl0TW9kZSgpCiAgICAgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2NtU3BlY2lmaWNGaWxlbmFtZSgpCiAgICAgewogICAgICAgICByZXR1cm4gIl9jY213YWlkLmluZiI7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI2FkZChvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksCi0gICAgICpvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LAotICAgICAqb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQWRkU2NtUmVzdWx0IGFkZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC05MCwxMSArOTAsNyBAQAogICAgICAgICByZXR1cm4gKEFkZFNjbVJlc3VsdCkgY29tbWFuZC5leGVjdXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI3JlbW92ZShvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksCi0gICAgICpvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LAotICAgICAqb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgUmVtb3ZlU2NtUmVzdWx0IHJlbW92ZSggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC0xMDUsMTEgKzEwMSw3IEBACiAgICAgICAgIHJldHVybiAoUmVtb3ZlU2NtUmVzdWx0KSBjb21tYW5kLmV4ZWN1dGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjY2hhbmdlbG9nKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSwKLSAgICAgKm9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsCi0gICAgICpvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGFuZ2VMb2dTY21SZXN1bHQgY2hhbmdlbG9nKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtMTIxLDExICsxMTMsNyBAQAogICAgICAgICByZXR1cm4gKENoYW5nZUxvZ1NjbVJlc3VsdCkgY29tbWFuZC5leGVjdXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI2NoZWNraW4ob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LAotICAgICAqb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCwKLSAgICAgKm9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoZWNrSW5TY21SZXN1bHQgY2hlY2tpbiggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtMTM3LDExICsxMjUsNyBAQAogICAgICAgICByZXR1cm4gKENoZWNrSW5TY21SZXN1bHQpIGNvbW1hbmQuZXhlY3V0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciNjaGVja291dChvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksCi0gICAgICpvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LAotICAgICAqb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hlY2tPdXRTY21SZXN1bHQgY2hlY2tvdXQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtMTUzLDYgKzEzNyw3IEBACiAgICAgICAgIHJldHVybiAoQ2hlY2tPdXRTY21SZXN1bHQpIGNvbW1hbmQuZXhlY3V0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEVkaXRTY21SZXN1bHQgZWRpdCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC0xNjMsNiArMTQ4LDcgQEAKICAgICAgICAgcmV0dXJuIChFZGl0U2NtUmVzdWx0KSBjb21tYW5kLmV4ZWN1dGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKQEAgLTE3MywxMSArMTU5LDcgQEAKICAgICAgICAgcmV0dXJuIChVcGRhdGVTY21SZXN1bHQpIGNvbW1hbmQuZXhlY3V0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciN0YWcob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LAotICAgICAqb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCwKLSAgICAgKm9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFRhZ1NjbVJlc3VsdCB0YWcoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtMTg4LDYgKzE3MCw3IEBACiAgICAgICAgIHJldHVybiAoVGFnU2NtUmVzdWx0KSBjb21tYW5kLmV4ZWN1dGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTdGF0dXNTY21SZXN1bHQgc3RhdHVzKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbW1hbmQvU3luZXJneUNvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbW1hbmQvU3luZXJneUNvbW1hbmQuamF2YQppbmRleCAzNWI5MWM3Li41M2RkNDI5IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb21tYW5kL1N5bmVyZ3lDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29tbWFuZC9TeW5lcmd5Q29tbWFuZC5qYXZhCkBAIC0yMSw2ICsyMSw3IEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86anVsaWVuLmhlbnJ5QGNhcGdlbWluaS5jb20iPkp1bGllbiBIZW5yeTwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGludGVyZmFjZSBTeW5lcmd5Q29tbWFuZAogewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29tbWFuZC9hZGQvU3luZXJneUFkZENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbW1hbmQvYWRkL1N5bmVyZ3lBZGRDb21tYW5kLmphdmEKaW5kZXggYzA4ZGMxYS4uYTg4YjI0OCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29tbWFuZC9hZGQvU3luZXJneUFkZENvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb21tYW5kL2FkZC9TeW5lcmd5QWRkQ29tbWFuZC5qYXZhCkBAIC0zNiwxMSArMzYsMTMgQEAKIAogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpqdWxpZW4uaGVucnlAY2FwZ2VtaW5pLmNvbSI+SnVsaWVuIEhlbnJ5PC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgU3luZXJneUFkZENvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0QWRkQ29tbWFuZAogICAgIGltcGxlbWVudHMgU3luZXJneUNvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTY21SZXN1bHQgZXhlY3V0ZUFkZENvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyBtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gYmluYXJ5ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtNTUsMTkgKzU3LDE5IEBACiAgICAgICAgICAgICBtZXNzYWdlID0gIk1hdmVuIFNDTSBTeW5lcmd5IHByb3ZpZGVyOiBhZGRpbmcgZmlsZShzKSB0byBwcm9qZWN0ICIgKyByZXBvLmdldFByb2plY3RTcGVjKCk7CiAgICAgICAgIH0KIAotICAgICAgICBTdHJpbmcgQ0NNX0FERFIgPSBTeW5lcmd5VXRpbC5zdGFydCggZ2V0TG9nZ2VyKCksIHJlcG8uZ2V0VXNlcigpLCByZXBvLmdldFBhc3N3b3JkKCksIG51bGwgKTsKKyAgICAgICAgU3RyaW5nIGNjbUFkZHIgPSBTeW5lcmd5VXRpbC5zdGFydCggZ2V0TG9nZ2VyKCksIHJlcG8uZ2V0VXNlcigpLCByZXBvLmdldFBhc3N3b3JkKCksIG51bGwgKTsKIAogICAgICAgICB0cnkKICAgICAgICAgewotICAgICAgICAgICAgaW50IHRhc2tOdW0gPSBTeW5lcmd5VXRpbC5jcmVhdGVUYXNrKCBnZXRMb2dnZXIoKSwgbWVzc2FnZSwgcmVwby5nZXRQcm9qZWN0UmVsZWFzZSgpLCB0cnVlLCBDQ01fQUREUiApOwotICAgICAgICAgICAgU3RyaW5nIHByb2plY3Rfc3BlYyA9Ci0gICAgICAgICAgICAgICAgU3luZXJneVV0aWwuZ2V0V29ya2luZ1Byb2plY3QoIGdldExvZ2dlcigpLCByZXBvLmdldFByb2plY3RTcGVjKCksIHJlcG8uZ2V0VXNlcigpLCBDQ01fQUREUiApOwotICAgICAgICAgICAgaWYgKCBwcm9qZWN0X3NwZWMgPT0gbnVsbCApCisgICAgICAgICAgICBpbnQgdGFza051bSA9IFN5bmVyZ3lVdGlsLmNyZWF0ZVRhc2soIGdldExvZ2dlcigpLCBtZXNzYWdlLCByZXBvLmdldFByb2plY3RSZWxlYXNlKCksIHRydWUsIGNjbUFkZHIgKTsKKyAgICAgICAgICAgIFN0cmluZyBwcm9qZWN0U3BlYyA9CisgICAgICAgICAgICAgICAgU3luZXJneVV0aWwuZ2V0V29ya2luZ1Byb2plY3QoIGdldExvZ2dlcigpLCByZXBvLmdldFByb2plY3RTcGVjKCksIHJlcG8uZ2V0VXNlcigpLCBjY21BZGRyICk7CisgICAgICAgICAgICBpZiAoIHByb2plY3RTcGVjID09IG51bGwgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY21FeGNlcHRpb24oICJZb3Ugc2hvdWxkIGNoZWNrb3V0IHByb2plY3QgZmlyc3QiICk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBGaWxlIFdBUGF0aCA9IFN5bmVyZ3lVdGlsLmdldFdvcmtBcmVhKCBnZXRMb2dnZXIoKSwgcHJvamVjdF9zcGVjLCBDQ01fQUREUiApOwotICAgICAgICAgICAgRmlsZSBkZXN0UGF0aCA9IG5ldyBGaWxlKCBXQVBhdGgsIHJlcG8uZ2V0UHJvamVjdE5hbWUoKSApOworICAgICAgICAgICAgRmlsZSB3YVBhdGggPSBTeW5lcmd5VXRpbC5nZXRXb3JrQXJlYSggZ2V0TG9nZ2VyKCksIHByb2plY3RTcGVjLCBjY21BZGRyICk7CisgICAgICAgICAgICBGaWxlIGRlc3RQYXRoID0gbmV3IEZpbGUoIHdhUGF0aCwgcmVwby5nZXRQcm9qZWN0TmFtZSgpICk7CiAgICAgICAgICAgICBmb3IgKCBJdGVyYXRvciBpID0gZmlsZVNldC5nZXRGaWxlTGlzdCgpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgRmlsZSBmID0gKEZpbGUpIGkubmV4dCgpOwpAQCAtODUsMTQgKzg3LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2NtRXhjZXB0aW9uKCAiVW5hYmxlIHRvIGNvcHkgZmlsZSBpbiBXb3JrIEFyZWEiLCBlICk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgU3luZXJneVV0aWwuY3JlYXRlKCBnZXRMb2dnZXIoKSwgZGVzdCwgbWVzc2FnZSwgQ0NNX0FERFIgKTsKKyAgICAgICAgICAgICAgICBTeW5lcmd5VXRpbC5jcmVhdGUoIGdldExvZ2dlcigpLCBkZXN0LCBtZXNzYWdlLCBjY21BZGRyICk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTeW5lcmd5VXRpbC5jaGVja2luVGFzayggZ2V0TG9nZ2VyKCksIHRhc2tOdW0sIG1lc3NhZ2UsIENDTV9BRERSICk7CisgICAgICAgICAgICBTeW5lcmd5VXRpbC5jaGVja2luVGFzayggZ2V0TG9nZ2VyKCksIHRhc2tOdW0sIG1lc3NhZ2UsIGNjbUFkZHIgKTsKIAogICAgICAgICB9CiAgICAgICAgIGZpbmFsbHkKICAgICAgICAgewotICAgICAgICAgICAgU3luZXJneVV0aWwuc3RvcCggZ2V0TG9nZ2VyKCksIENDTV9BRERSICk7CisgICAgICAgICAgICBTeW5lcmd5VXRpbC5zdG9wKCBnZXRMb2dnZXIoKSwgY2NtQWRkciApOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIG5ldyBBZGRTY21SZXN1bHQoICIiLCBmaWxlU2V0LmdldEZpbGVMaXN0KCkgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbW1hbmQvY2hhbmdlbG9nL1N5bmVyZ3lDaGFuZ2VMb2dDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb21tYW5kL2NoYW5nZWxvZy9TeW5lcmd5Q2hhbmdlTG9nQ29tbWFuZC5qYXZhCmluZGV4IGM3YThkMTIuLjIxZTYwNTYgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbW1hbmQvY2hhbmdlbG9nL1N5bmVyZ3lDaGFuZ2VMb2dDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29tbWFuZC9jaGFuZ2Vsb2cvU3luZXJneUNoYW5nZUxvZ0NvbW1hbmQuamF2YQpAQCAtMzksMTIgKzM5LDE0IEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86anVsaWVuLmhlbnJ5QGNhcGdlbWluaS5jb20iPkp1bGllbiBIZW5yeTwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIFN5bmVyZ3lDaGFuZ2VMb2dDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdENoYW5nZUxvZ0NvbW1hbmQKICAgICBpbXBsZW1lbnRzIFN5bmVyZ3lDb21tYW5kCiB7CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDaGFuZ2VMb2dTY21SZXN1bHQgZXhlY3V0ZUNoYW5nZUxvZ0NvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZSBzdGFydERhdGUsIERhdGUgZW5kRGF0ZSwgU2NtQnJhbmNoIGJyYW5jaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0ZVBhdHRlcm4gKQpAQCAtNTQsMTkgKzU2LDE5IEBACiAgICAgICAgIFN5bmVyZ3lTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbyA9IChTeW5lcmd5U2NtUHJvdmlkZXJSZXBvc2l0b3J5KSByZXBvc2l0b3J5OwogICAgICAgICBnZXRMb2dnZXIoKS5kZWJ1ZyggImJhc2VkaXI6ICIgKyBmaWxlU2V0LmdldEJhc2VkaXIoKSApOwogCi0gICAgICAgIFN0cmluZyBDQ01fQUREUiA9IFN5bmVyZ3lVdGlsLnN0YXJ0KCBnZXRMb2dnZXIoKSwgcmVwby5nZXRVc2VyKCksIHJlcG8uZ2V0UGFzc3dvcmQoKSwgbnVsbCApOworICAgICAgICBTdHJpbmcgY2NtQWRkciA9IFN5bmVyZ3lVdGlsLnN0YXJ0KCBnZXRMb2dnZXIoKSwgcmVwby5nZXRVc2VyKCksIHJlcG8uZ2V0UGFzc3dvcmQoKSwgbnVsbCApOwogCiAgICAgICAgIExpc3QgY3NMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwogCiAgICAgICAgIHRyeQogICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcHJvamVjdF9zcGVjID0KLSAgICAgICAgICAgICAgICBTeW5lcmd5VXRpbC5nZXRXb3JraW5nUHJvamVjdCggZ2V0TG9nZ2VyKCksIHJlcG8uZ2V0UHJvamVjdFNwZWMoKSwgcmVwby5nZXRVc2VyKCksIENDTV9BRERSICk7Ci0gICAgICAgICAgICBpZiAoIHByb2plY3Rfc3BlYyA9PSBudWxsICkKKyAgICAgICAgICAgIFN0cmluZyBwcm9qZWN0U3BlYyA9CisgICAgICAgICAgICAgICAgU3luZXJneVV0aWwuZ2V0V29ya2luZ1Byb2plY3QoIGdldExvZ2dlcigpLCByZXBvLmdldFByb2plY3RTcGVjKCksIHJlcG8uZ2V0VXNlcigpLCBjY21BZGRyICk7CisgICAgICAgICAgICBpZiAoIHByb2plY3RTcGVjID09IG51bGwgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY21FeGNlcHRpb24oICJZb3Ugc2hvdWxkIGNoZWNrb3V0IHByb2plY3QgZmlyc3QiICk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBMaXN0IHRhc2tzID0gU3luZXJneVV0aWwuZ2V0Q29tcGxldGVkVGFza3MoIGdldExvZ2dlcigpLCBwcm9qZWN0X3NwZWMsIHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgQ0NNX0FERFIgKTsKKyAgICAgICAgICAgIExpc3QgdGFza3MgPSBTeW5lcmd5VXRpbC5nZXRDb21wbGV0ZWRUYXNrcyggZ2V0TG9nZ2VyKCksIHByb2plY3RTcGVjLCBzdGFydERhdGUsIGVuZERhdGUsIGNjbUFkZHIgKTsKICAgICAgICAgICAgIGZvciAoIEl0ZXJhdG9yIGkgPSB0YXNrcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIENoYW5nZVNldCBjcyA9IG5ldyBDaGFuZ2VTZXQoKTsKQEAgLTc0LDEzICs3NiwxMyBAQAogICAgICAgICAgICAgICAgIGNzLnNldEF1dGhvciggdC5nZXRVc2VybmFtZSgpICk7CiAgICAgICAgICAgICAgICAgY3Muc2V0Q29tbWVudCggIlRhc2sgIiArIHQuZ2V0TnVtYmVyKCkgKyAiOiAiICsgdC5nZXRDb21tZW50KCkgKTsKICAgICAgICAgICAgICAgICBjcy5zZXREYXRlKCB0LmdldE1vZGlmaWVkVGltZSgpICk7Ci0gICAgICAgICAgICAgICAgY3Muc2V0RmlsZXMoIFN5bmVyZ3lVdGlsLmdldE1vZGlmaWVkT2JqZWN0cyggZ2V0TG9nZ2VyKCksIHQuZ2V0TnVtYmVyKCksIENDTV9BRERSICkgKTsKKyAgICAgICAgICAgICAgICBjcy5zZXRGaWxlcyggU3luZXJneVV0aWwuZ2V0TW9kaWZpZWRPYmplY3RzKCBnZXRMb2dnZXIoKSwgdC5nZXROdW1iZXIoKSwgY2NtQWRkciApICk7CiAgICAgICAgICAgICAgICAgY3NMaXN0LmFkZCggY3MgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmaW5hbGx5CiAgICAgICAgIHsKLSAgICAgICAgICAgIFN5bmVyZ3lVdGlsLnN0b3AoIGdldExvZ2dlcigpLCBDQ01fQUREUiApOworICAgICAgICAgICAgU3luZXJneVV0aWwuc3RvcCggZ2V0TG9nZ2VyKCksIGNjbUFkZHIgKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBuZXcgQ2hhbmdlTG9nU2NtUmVzdWx0KCAiY2NtIHF1ZXJ5IC4uLiIsIG5ldyBDaGFuZ2VMb2dTZXQoIGNzTGlzdCwgc3RhcnREYXRlLCBlbmREYXRlICkgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbW1hbmQvY2hlY2tpbi9TeW5lcmd5Q2hlY2tJbkNvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbW1hbmQvY2hlY2tpbi9TeW5lcmd5Q2hlY2tJbkNvbW1hbmQuamF2YQppbmRleCBkNjhmNjI5Li5lYjIxYTYwIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb21tYW5kL2NoZWNraW4vU3luZXJneUNoZWNrSW5Db21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29tbWFuZC9jaGVja2luL1N5bmVyZ3lDaGVja0luQ29tbWFuZC5qYXZhCkBAIC0zMSwxMiArMzEsMTQgQEAKIAogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpqdWxpZW4uaGVucnlAY2FwZ2VtaW5pLmNvbSI+SnVsaWVuIEhlbnJ5PC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgU3luZXJneUNoZWNrSW5Db21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdENoZWNrSW5Db21tYW5kCiAgICAgaW1wbGVtZW50cyBTeW5lcmd5Q29tbWFuZAogewogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hlY2tJblNjbVJlc3VsdCBleGVjdXRlQ2hlY2tJbkNvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSwgU2NtVmVyc2lvbiB2ZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtNDUsMTUgKzQ3LDE1IEBACiAgICAgICAgIFN5bmVyZ3lTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbyA9IChTeW5lcmd5U2NtUHJvdmlkZXJSZXBvc2l0b3J5KSByZXBvc2l0b3J5OwogICAgICAgICBnZXRMb2dnZXIoKS5kZWJ1ZyggImJhc2VkaXI6ICIgKyBmaWxlU2V0LmdldEJhc2VkaXIoKSApOwogCi0gICAgICAgIFN0cmluZyBDQ01fQUREUiA9IFN5bmVyZ3lVdGlsLnN0YXJ0KCBnZXRMb2dnZXIoKSwgcmVwby5nZXRVc2VyKCksIHJlcG8uZ2V0UGFzc3dvcmQoKSwgbnVsbCApOworICAgICAgICBTdHJpbmcgY2NtQWRkciA9IFN5bmVyZ3lVdGlsLnN0YXJ0KCBnZXRMb2dnZXIoKSwgcmVwby5nZXRVc2VyKCksIHJlcG8uZ2V0UGFzc3dvcmQoKSwgbnVsbCApOwogCiAgICAgICAgIHRyeQogICAgICAgICB7Ci0gICAgICAgICAgICBTeW5lcmd5VXRpbC5jaGVja2luRGVmYXVsdFRhc2soIGdldExvZ2dlcigpLCBtZXNzYWdlLCBDQ01fQUREUiApOworICAgICAgICAgICAgU3luZXJneVV0aWwuY2hlY2tpbkRlZmF1bHRUYXNrKCBnZXRMb2dnZXIoKSwgbWVzc2FnZSwgY2NtQWRkciApOwogICAgICAgICB9CiAgICAgICAgIGZpbmFsbHkKICAgICAgICAgewotICAgICAgICAgICAgU3luZXJneVV0aWwuc3RvcCggZ2V0TG9nZ2VyKCksIENDTV9BRERSICk7CisgICAgICAgICAgICBTeW5lcmd5VXRpbC5zdG9wKCBnZXRMb2dnZXIoKSwgY2NtQWRkciApOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIG5ldyBDaGVja0luU2NtUmVzdWx0KCAiY2NtIGNoZWNraW4iLCBmaWxlU2V0LmdldEZpbGVMaXN0KCkgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbW1hbmQvY2hlY2tvdXQvU3luZXJneUNoZWNrT3V0Q29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29tbWFuZC9jaGVja291dC9TeW5lcmd5Q2hlY2tPdXRDb21tYW5kLmphdmEKaW5kZXggNjM2NTIzZC4uZjA5N2FmMCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29tbWFuZC9jaGVja291dC9TeW5lcmd5Q2hlY2tPdXRDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29tbWFuZC9jaGVja291dC9TeW5lcmd5Q2hlY2tPdXRDb21tYW5kLmphdmEKQEAgLTM3LDEyICszNywxNCBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOmp1bGllbi5oZW5yeUBjYXBnZW1pbmkuY29tIj5KdWxpZW4gSGVucnk8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBTeW5lcmd5Q2hlY2tPdXRDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdENoZWNrT3V0Q29tbWFuZAogICAgIGltcGxlbWVudHMgU3luZXJneUNvbW1hbmQKIHsKIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENoZWNrT3V0U2NtUmVzdWx0IGV4ZWN1dGVDaGVja091dENvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbVZlcnNpb24gdmVyc2lvbiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTU1LDM5ICs1NywzOSBAQAogICAgICAgICBTeW5lcmd5U2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8gPSAoU3luZXJneVNjbVByb3ZpZGVyUmVwb3NpdG9yeSkgcmVwb3NpdG9yeTsKICAgICAgICAgZ2V0TG9nZ2VyKCkuZGVidWcoICJiYXNlZGlyOiAiICsgZmlsZVNldC5nZXRCYXNlZGlyKCkgKTsKIAotICAgICAgICBTdHJpbmcgQ0NNX0FERFIgPSBTeW5lcmd5VXRpbC5zdGFydCggZ2V0TG9nZ2VyKCksIHJlcG8uZ2V0VXNlcigpLCByZXBvLmdldFBhc3N3b3JkKCksIG51bGwgKTsKKyAgICAgICAgU3RyaW5nIGNjbUFkZHIgPSBTeW5lcmd5VXRpbC5zdGFydCggZ2V0TG9nZ2VyKCksIHJlcG8uZ2V0VXNlcigpLCByZXBvLmdldFBhc3N3b3JkKCksIG51bGwgKTsKIAotICAgICAgICBGaWxlIFdBUGF0aDsKKyAgICAgICAgRmlsZSB3YVBhdGg7CiAgICAgICAgIHRyeQogICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcHJvamVjdF9zcGVjID0KLSAgICAgICAgICAgICAgICBTeW5lcmd5VXRpbC5nZXRXb3JraW5nUHJvamVjdCggZ2V0TG9nZ2VyKCksIHJlcG8uZ2V0UHJvamVjdFNwZWMoKSwgcmVwby5nZXRVc2VyKCksIENDTV9BRERSICk7Ci0gICAgICAgICAgICBpZiAoIHByb2plY3Rfc3BlYyAhPSBudWxsICkKKyAgICAgICAgICAgIFN0cmluZyBwcm9qZWN0U3BlYyA9CisgICAgICAgICAgICAgICAgU3luZXJneVV0aWwuZ2V0V29ya2luZ1Byb2plY3QoIGdldExvZ2dlcigpLCByZXBvLmdldFByb2plY3RTcGVjKCksIHJlcG8uZ2V0VXNlcigpLCBjY21BZGRyICk7CisgICAgICAgICAgICBpZiAoIHByb2plY3RTcGVjICE9IG51bGwgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLmluZm8oICJBIHdvcmtpbmcgcHJvamVjdCBhbHJlYWR5IGV4aXN0cyBbIiArIHByb2plY3Rfc3BlYyArICJdLiIgKTsKLSAgICAgICAgICAgICAgICBTeW5lcmd5VXRpbC5zeW5jaHJvbml6ZSggZ2V0TG9nZ2VyKCksIHByb2plY3Rfc3BlYywgQ0NNX0FERFIgKTsKKyAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS5pbmZvKCAiQSB3b3JraW5nIHByb2plY3QgYWxyZWFkeSBleGlzdHMgWyIgKyBwcm9qZWN0U3BlYyArICJdLiIgKTsKKyAgICAgICAgICAgICAgICBTeW5lcmd5VXRpbC5zeW5jaHJvbml6ZSggZ2V0TG9nZ2VyKCksIHByb2plY3RTcGVjLCBjY21BZGRyICk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3luZXJneVV0aWwuY2hlY2tvdXRQcm9qZWN0KCBnZXRMb2dnZXIoKSwgbnVsbCwgcmVwby5nZXRQcm9qZWN0U3BlYygpLCB2ZXJzaW9uLCByZXBvLmdldFByb2plY3RQdXJwb3NlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvLmdldFByb2plY3RSZWxlYXNlKCksIENDTV9BRERSICk7Ci0gICAgICAgICAgICAgICAgcHJvamVjdF9zcGVjID0KLSAgICAgICAgICAgICAgICAgICAgU3luZXJneVV0aWwuZ2V0V29ya2luZ1Byb2plY3QoIGdldExvZ2dlcigpLCByZXBvLmdldFByb2plY3RTcGVjKCksIHJlcG8uZ2V0VXNlcigpLCBDQ01fQUREUiApOwotICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLmluZm8oICJBIG5ldyB3b3JraW5nIHByb2plY3QgWyIgKyBwcm9qZWN0X3NwZWMgKyAiXSB3YXMgY3JlYXRlZC4iICk7CisgICAgICAgICAgICAgICAgU3luZXJneVV0aWwuY2hlY2tvdXRQcm9qZWN0KCBnZXRMb2dnZXIoKSwgbnVsbCwgcmVwby5nZXRQcm9qZWN0U3BlYygpLCB2ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwby5nZXRQcm9qZWN0UHVycG9zZSgpLCByZXBvLmdldFByb2plY3RSZWxlYXNlKCksIGNjbUFkZHIgKTsKKyAgICAgICAgICAgICAgICBwcm9qZWN0U3BlYyA9CisgICAgICAgICAgICAgICAgICAgIFN5bmVyZ3lVdGlsLmdldFdvcmtpbmdQcm9qZWN0KCBnZXRMb2dnZXIoKSwgcmVwby5nZXRQcm9qZWN0U3BlYygpLCByZXBvLmdldFVzZXIoKSwgY2NtQWRkciApOworICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLmluZm8oICJBIG5ldyB3b3JraW5nIHByb2plY3QgWyIgKyBwcm9qZWN0U3BlYyArICJdIHdhcyBjcmVhdGVkLiIgKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN5bmVyZ3lVdGlsLnJlY29uZmlndXJlKCBnZXRMb2dnZXIoKSwgcHJvamVjdF9zcGVjLCBDQ01fQUREUiApOwotICAgICAgICAgICAgV0FQYXRoID0gU3luZXJneVV0aWwuZ2V0V29ya0FyZWEoIGdldExvZ2dlcigpLCBwcm9qZWN0X3NwZWMsIENDTV9BRERSICk7CisgICAgICAgICAgICBTeW5lcmd5VXRpbC5yZWNvbmZpZ3VyZSggZ2V0TG9nZ2VyKCksIHByb2plY3RTcGVjLCBjY21BZGRyICk7CisgICAgICAgICAgICB3YVBhdGggPSBTeW5lcmd5VXRpbC5nZXRXb3JrQXJlYSggZ2V0TG9nZ2VyKCksIHByb2plY3RTcGVjLCBjY21BZGRyICk7CiAKICAgICAgICAgfQogICAgICAgICBmaW5hbGx5CiAgICAgICAgIHsKLSAgICAgICAgICAgIFN5bmVyZ3lVdGlsLnN0b3AoIGdldExvZ2dlcigpLCBDQ01fQUREUiApOworICAgICAgICAgICAgU3luZXJneVV0aWwuc3RvcCggZ2V0TG9nZ2VyKCksIGNjbUFkZHIgKTsKICAgICAgICAgfQogCi0gICAgICAgIEZpbGUgc291cmNlID0gbmV3IEZpbGUoIFdBUGF0aCwgcmVwby5nZXRQcm9qZWN0TmFtZSgpICk7CisgICAgICAgIEZpbGUgc291cmNlID0gbmV3IEZpbGUoIHdhUGF0aCwgcmVwby5nZXRQcm9qZWN0TmFtZSgpICk7CiAKLSAgICAgICAgZ2V0TG9nZ2VyKCkuaW5mbyggIldlIHdpbGwgbm93IGNvcHkgZmlsZXMgZnJvbSBTeW5lcmd5IFdvcmsgQXJlYSBbIiArIHNvdXJjZSArICJdIHRvIGV4cGVjdGVkIGZvbGRlciBbIiArCi0gICAgICAgICAgICBmaWxlU2V0LmdldEJhc2VkaXIoKSArICJdIiApOworICAgICAgICBnZXRMb2dnZXIoKS5pbmZvKCAiV2Ugd2lsbCBub3cgY29weSBmaWxlcyBmcm9tIFN5bmVyZ3kgV29yayBBcmVhIFsiICsgc291cmNlICsgIl0gdG8gZXhwZWN0ZWQgZm9sZGVyIFsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGZpbGVTZXQuZ2V0QmFzZWRpcigpICsgIl0iICk7CiAKICAgICAgICAgLy8gTW92ZSBmaWxlcyB0byB0aGUgZXhwZWN0ZWQgZm9sZGVyCiAgICAgICAgIHRyeQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29tbWFuZC9lZGl0L1N5bmVyZ3lFZGl0Q29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29tbWFuZC9lZGl0L1N5bmVyZ3lFZGl0Q29tbWFuZC5qYXZhCmluZGV4IGY0MTUzYTguLmQxOGFjNzkgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbW1hbmQvZWRpdC9TeW5lcmd5RWRpdENvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb21tYW5kL2VkaXQvU3luZXJneUVkaXRDb21tYW5kLmphdmEKQEAgLTM4LDExICszOCwxMyBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOmp1bGllbi5oZW5yeUBjYXBnZW1pbmkuY29tIj5KdWxpZW4gSGVucnk8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBTeW5lcmd5RWRpdENvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0RWRpdENvbW1hbmQKICAgICBpbXBsZW1lbnRzIFN5bmVyZ3lDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU2NtUmVzdWx0IGV4ZWN1dGVFZGl0Q29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC01MSwyMCArNTMsMjAgQEAKICAgICAgICAgU3luZXJneVNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvID0gKFN5bmVyZ3lTY21Qcm92aWRlclJlcG9zaXRvcnkpIHJlcG9zaXRvcnk7CiAgICAgICAgIGdldExvZ2dlcigpLmRlYnVnKCAiYmFzZWRpcjogIiArIGZpbGVTZXQuZ2V0QmFzZWRpcigpICk7CiAKLSAgICAgICAgU3RyaW5nIENDTV9BRERSID0gU3luZXJneVV0aWwuc3RhcnQoIGdldExvZ2dlcigpLCByZXBvLmdldFVzZXIoKSwgcmVwby5nZXRQYXNzd29yZCgpLCBudWxsICk7CisgICAgICAgIFN0cmluZyBjY21BZGRyID0gU3luZXJneVV0aWwuc3RhcnQoIGdldExvZ2dlcigpLCByZXBvLmdldFVzZXIoKSwgcmVwby5nZXRQYXNzd29yZCgpLCBudWxsICk7CiAKICAgICAgICAgdHJ5CiAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBwcm9qZWN0X3NwZWMgPQotICAgICAgICAgICAgICAgIFN5bmVyZ3lVdGlsLmdldFdvcmtpbmdQcm9qZWN0KCBnZXRMb2dnZXIoKSwgcmVwby5nZXRQcm9qZWN0U3BlYygpLCByZXBvLmdldFVzZXIoKSwgQ0NNX0FERFIgKTsKLSAgICAgICAgICAgIEZpbGUgV0FQYXRoID0gU3luZXJneVV0aWwuZ2V0V29ya0FyZWEoIGdldExvZ2dlcigpLCBwcm9qZWN0X3NwZWMsIENDTV9BRERSICk7Ci0gICAgICAgICAgICBGaWxlIHNvdXJjZVBhdGggPSBuZXcgRmlsZSggV0FQYXRoLCByZXBvLmdldFByb2plY3ROYW1lKCkgKTsKLSAgICAgICAgICAgIGlmICggcHJvamVjdF9zcGVjID09IG51bGwgKQorICAgICAgICAgICAgU3RyaW5nIHByb2plY3RTcGVjID0KKyAgICAgICAgICAgICAgICBTeW5lcmd5VXRpbC5nZXRXb3JraW5nUHJvamVjdCggZ2V0TG9nZ2VyKCksIHJlcG8uZ2V0UHJvamVjdFNwZWMoKSwgcmVwby5nZXRVc2VyKCksIGNjbUFkZHIgKTsKKyAgICAgICAgICAgIEZpbGUgd2FQYXRoID0gU3luZXJneVV0aWwuZ2V0V29ya0FyZWEoIGdldExvZ2dlcigpLCBwcm9qZWN0U3BlYywgY2NtQWRkciApOworICAgICAgICAgICAgRmlsZSBzb3VyY2VQYXRoID0gbmV3IEZpbGUoIHdhUGF0aCwgcmVwby5nZXRQcm9qZWN0TmFtZSgpICk7CisgICAgICAgICAgICBpZiAoIHByb2plY3RTcGVjID09IG51bGwgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY21FeGNlcHRpb24oICJZb3Ugc2hvdWxkIGNoZWNrb3V0IHByb2plY3QgZmlyc3QiICk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgdGFza051bSA9IFN5bmVyZ3lVdGlsLmNyZWF0ZVRhc2soIGdldExvZ2dlcigpLCAiTWF2ZW4gU0NNIFN5bmVyZ3kgcHJvdmlkZXI6IGVkaXQgY29tbWFuZCBmb3IgcHJvamVjdCAiICsKLSAgICAgICAgICAgICAgICByZXBvLmdldFByb2plY3RTcGVjKCksIHJlcG8uZ2V0UHJvamVjdFJlbGVhc2UoKSwgdHJ1ZSwgQ0NNX0FERFIgKTsKKyAgICAgICAgICAgIGludCB0YXNrTnVtID0gU3luZXJneVV0aWwuY3JlYXRlVGFzayggZ2V0TG9nZ2VyKCksICJNYXZlbiBTQ00gU3luZXJneSBwcm92aWRlcjogZWRpdCBjb21tYW5kIGZvciBwcm9qZWN0ICIKKyAgICAgICAgICAgICAgICArIHJlcG8uZ2V0UHJvamVjdFNwZWMoKSwgcmVwby5nZXRQcm9qZWN0UmVsZWFzZSgpLCB0cnVlLCBjY21BZGRyICk7CiAgICAgICAgICAgICBnZXRMb2dnZXIoKS5pbmZvKCAiVGFzayAiICsgdGFza051bSArICIgd2FzIGNyZWF0ZWQgdG8gcGVyZm9ybSBjaGVja291dC4iICk7CiAgICAgICAgICAgICBmb3IgKCBJdGVyYXRvciBpID0gZmlsZVNldC5nZXRGaWxlTGlzdCgpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCiAgICAgICAgICAgICB7CkBAIC03Myw3ICs3NSw3IEBACiAgICAgICAgICAgICAgICAgRmlsZSBzb3VyY2UgPSBuZXcgRmlsZSggc291cmNlUGF0aCwgU3luZXJneVV0aWwucmVtb3ZlUHJlZml4KCBmaWxlU2V0LmdldEJhc2VkaXIoKSwgZiApICk7CiAgICAgICAgICAgICAgICAgTGlzdCBsaXN0ID0gbmV3IExpbmtlZExpc3QoKTsKICAgICAgICAgICAgICAgICBsaXN0LmFkZCggc291cmNlICk7Ci0gICAgICAgICAgICAgICAgU3luZXJneVV0aWwuY2hlY2tvdXRGaWxlcyggZ2V0TG9nZ2VyKCksIGxpc3QsIENDTV9BRERSICk7CisgICAgICAgICAgICAgICAgU3luZXJneVV0aWwuY2hlY2tvdXRGaWxlcyggZ2V0TG9nZ2VyKCksIGxpc3QsIGNjbUFkZHIgKTsKICAgICAgICAgICAgICAgICBpZiAoICFzb3VyY2UuZXF1YWxzKCBkZXN0ICkgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkuZGVidWcoICJDb3B5IGZpbGUgWyIgKyBzb3VyY2UgKyAiXSB0byBleHBlY3RlZCBmb2xkZXIgWyIgKyBkZXN0ICsgIl0uIiApOwpAQCAtOTAsNyArOTIsNyBAQAogICAgICAgICB9CiAgICAgICAgIGZpbmFsbHkKICAgICAgICAgewotICAgICAgICAgICAgU3luZXJneVV0aWwuc3RvcCggZ2V0TG9nZ2VyKCksIENDTV9BRERSICk7CisgICAgICAgICAgICBTeW5lcmd5VXRpbC5zdG9wKCBnZXRMb2dnZXIoKSwgY2NtQWRkciApOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIG5ldyBFZGl0U2NtUmVzdWx0KCAiIiwgZmlsZVNldC5nZXRGaWxlTGlzdCgpICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb21tYW5kL3JlbW92ZS9TeW5lcmd5UmVtb3ZlQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29tbWFuZC9yZW1vdmUvU3luZXJneVJlbW92ZUNvbW1hbmQuamF2YQppbmRleCA2OWY1ODBhLi4xZjgxZTlmIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb21tYW5kL3JlbW92ZS9TeW5lcmd5UmVtb3ZlQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbW1hbmQvcmVtb3ZlL1N5bmVyZ3lSZW1vdmVDb21tYW5kLmphdmEKQEAgLTM1LDExICszNSwxMyBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOmp1bGllbi5oZW5yeUBjYXBnZW1pbmkuY29tIj5KdWxpZW4gSGVucnk8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBTeW5lcmd5UmVtb3ZlQ29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RSZW1vdmVDb21tYW5kCiAgICAgaW1wbGVtZW50cyBTeW5lcmd5Q29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFNjbVJlc3VsdCBleGVjdXRlUmVtb3ZlQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIG1lc3NhZ2UgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtNDgsMjQgKzUwLDI0IEBACiAgICAgICAgIFN5bmVyZ3lTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbyA9IChTeW5lcmd5U2NtUHJvdmlkZXJSZXBvc2l0b3J5KSByZXBvc2l0b3J5OwogICAgICAgICBnZXRMb2dnZXIoKS5kZWJ1ZyggImJhc2VkaXI6ICIgKyBmaWxlU2V0LmdldEJhc2VkaXIoKSApOwogCi0gICAgICAgIFN0cmluZyBDQ01fQUREUiA9IFN5bmVyZ3lVdGlsLnN0YXJ0KCBnZXRMb2dnZXIoKSwgcmVwby5nZXRVc2VyKCksIHJlcG8uZ2V0UGFzc3dvcmQoKSwgbnVsbCApOworICAgICAgICBTdHJpbmcgY2NtQWRkciA9IFN5bmVyZ3lVdGlsLnN0YXJ0KCBnZXRMb2dnZXIoKSwgcmVwby5nZXRVc2VyKCksIHJlcG8uZ2V0UGFzc3dvcmQoKSwgbnVsbCApOwogCiAgICAgICAgIHRyeQogICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcHJvamVjdF9zcGVjID0KLSAgICAgICAgICAgICAgICBTeW5lcmd5VXRpbC5nZXRXb3JraW5nUHJvamVjdCggZ2V0TG9nZ2VyKCksIHJlcG8uZ2V0UHJvamVjdFNwZWMoKSwgcmVwby5nZXRVc2VyKCksIENDTV9BRERSICk7Ci0gICAgICAgICAgICBpZiAoIHByb2plY3Rfc3BlYyA9PSBudWxsICkKKyAgICAgICAgICAgIFN0cmluZyBwcm9qZWN0U3BlYyA9CisgICAgICAgICAgICAgICAgU3luZXJneVV0aWwuZ2V0V29ya2luZ1Byb2plY3QoIGdldExvZ2dlcigpLCByZXBvLmdldFByb2plY3RTcGVjKCksIHJlcG8uZ2V0VXNlcigpLCBjY21BZGRyICk7CisgICAgICAgICAgICBpZiAoIHByb2plY3RTcGVjID09IG51bGwgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY21FeGNlcHRpb24oICJZb3Ugc2hvdWxkIGNoZWNrb3V0IHByb2plY3QgZmlyc3QiICk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBGaWxlIFdBUGF0aCA9IFN5bmVyZ3lVdGlsLmdldFdvcmtBcmVhKCBnZXRMb2dnZXIoKSwgcHJvamVjdF9zcGVjLCBDQ01fQUREUiApOwotICAgICAgICAgICAgRmlsZSBkZXN0UGF0aCA9IG5ldyBGaWxlKCBXQVBhdGgsIHJlcG8uZ2V0UHJvamVjdE5hbWUoKSApOworICAgICAgICAgICAgRmlsZSB3YVBhdGggPSBTeW5lcmd5VXRpbC5nZXRXb3JrQXJlYSggZ2V0TG9nZ2VyKCksIHByb2plY3RTcGVjLCBjY21BZGRyICk7CisgICAgICAgICAgICBGaWxlIGRlc3RQYXRoID0gbmV3IEZpbGUoIHdhUGF0aCwgcmVwby5nZXRQcm9qZWN0TmFtZSgpICk7CiAgICAgICAgICAgICBmb3IgKCBJdGVyYXRvciBpID0gZmlsZVNldC5nZXRGaWxlTGlzdCgpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgU2NtRmlsZSBmID0gKFNjbUZpbGUpIGkubmV4dCgpOwogICAgICAgICAgICAgICAgIEZpbGUgc291cmNlID0gbmV3IEZpbGUoIGZpbGVTZXQuZ2V0QmFzZWRpcigpLCBmLmdldFBhdGgoKSApOwogICAgICAgICAgICAgICAgIEZpbGUgZGVzdCA9IG5ldyBGaWxlKCBkZXN0UGF0aCwgZi5nZXRQYXRoKCkgKTsKLSAgICAgICAgICAgICAgICBTeW5lcmd5VXRpbC5kZWxldGUoIGdldExvZ2dlcigpLCBkZXN0LCBDQ01fQUREUiwgZmFsc2UgKTsKKyAgICAgICAgICAgICAgICBTeW5lcmd5VXRpbC5kZWxldGUoIGdldExvZ2dlcigpLCBkZXN0LCBjY21BZGRyLCBmYWxzZSApOwogICAgICAgICAgICAgICAgIGlmICggIXNvdXJjZS5lcXVhbHMoIGRlc3QgKSApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS5kZWJ1ZyggIkRlbGV0ZSBmaWxlIFsiICsgc291cmNlICsgIl0uIiApOwpAQCAtNzUsNyArNzcsNyBAQAogICAgICAgICB9CiAgICAgICAgIGZpbmFsbHkKICAgICAgICAgewotICAgICAgICAgICAgU3luZXJneVV0aWwuc3RvcCggZ2V0TG9nZ2VyKCksIENDTV9BRERSICk7CisgICAgICAgICAgICBTeW5lcmd5VXRpbC5zdG9wKCBnZXRMb2dnZXIoKSwgY2NtQWRkciApOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIG5ldyBTdGF0dXNTY21SZXN1bHQoICIiLCBmaWxlU2V0LmdldEZpbGVMaXN0KCkgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbW1hbmQvc3RhdHVzL1N5bmVyZ3lTdGF0dXNDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb21tYW5kL3N0YXR1cy9TeW5lcmd5U3RhdHVzQ29tbWFuZC5qYXZhCmluZGV4IGNmOTA4YzIuLjUyZWU5MWMgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbW1hbmQvc3RhdHVzL1N5bmVyZ3lTdGF0dXNDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29tbWFuZC9zdGF0dXMvU3luZXJneVN0YXR1c0NvbW1hbmQuamF2YQpAQCAtMzYsMTEgKzM2LDEzIEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86anVsaWVuLmhlbnJ5QGNhcGdlbWluaS5jb20iPkp1bGllbiBIZW5yeTwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIFN5bmVyZ3lTdGF0dXNDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdFN0YXR1c0NvbW1hbmQKICAgICBpbXBsZW1lbnRzIFN5bmVyZ3lDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU3RhdHVzU2NtUmVzdWx0IGV4ZWN1dGVTdGF0dXNDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKQEAgLTQ5LDE2ICs1MSwxNiBAQAogICAgICAgICBTeW5lcmd5U2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8gPSAoU3luZXJneVNjbVByb3ZpZGVyUmVwb3NpdG9yeSkgcmVwb3NpdG9yeTsKICAgICAgICAgZ2V0TG9nZ2VyKCkuZGVidWcoICJiYXNlZGlyOiAiICsgZmlsZVNldC5nZXRCYXNlZGlyKCkgKTsKIAotICAgICAgICBTdHJpbmcgQ0NNX0FERFIgPSBTeW5lcmd5VXRpbC5zdGFydCggZ2V0TG9nZ2VyKCksIHJlcG8uZ2V0VXNlcigpLCByZXBvLmdldFBhc3N3b3JkKCksIG51bGwgKTsKKyAgICAgICAgU3RyaW5nIGNjbUFkZHIgPSBTeW5lcmd5VXRpbC5zdGFydCggZ2V0TG9nZ2VyKCksIHJlcG8uZ2V0VXNlcigpLCByZXBvLmdldFBhc3N3b3JkKCksIG51bGwgKTsKIAogICAgICAgICBMaXN0IGw7CiAgICAgICAgIHRyeQogICAgICAgICB7Ci0gICAgICAgICAgICBsID0gU3luZXJneVV0aWwuZ2V0V29ya2luZ0ZpbGVzKCBnZXRMb2dnZXIoKSwgcmVwby5nZXRQcm9qZWN0U3BlYygpLCByZXBvLmdldFByb2plY3RSZWxlYXNlKCksIENDTV9BRERSICk7CisgICAgICAgICAgICBsID0gU3luZXJneVV0aWwuZ2V0V29ya2luZ0ZpbGVzKCBnZXRMb2dnZXIoKSwgcmVwby5nZXRQcm9qZWN0U3BlYygpLCByZXBvLmdldFByb2plY3RSZWxlYXNlKCksIGNjbUFkZHIgKTsKICAgICAgICAgfQogICAgICAgICBmaW5hbGx5CiAgICAgICAgIHsKLSAgICAgICAgICAgIFN5bmVyZ3lVdGlsLnN0b3AoIGdldExvZ2dlcigpLCBDQ01fQUREUiApOworICAgICAgICAgICAgU3luZXJneVV0aWwuc3RvcCggZ2V0TG9nZ2VyKCksIGNjbUFkZHIgKTsKICAgICAgICAgfQogCiAgICAgICAgIExpc3QgcmVzdWx0ID0gbmV3IExpbmtlZExpc3QoKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbW1hbmQvdGFnL1N5bmVyZ3lUYWdDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb21tYW5kL3RhZy9TeW5lcmd5VGFnQ29tbWFuZC5qYXZhCmluZGV4IDcwNzAwMjEuLjhmZmJmMjQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbW1hbmQvdGFnL1N5bmVyZ3lUYWdDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29tbWFuZC90YWcvU3luZXJneVRhZ0NvbW1hbmQuamF2YQpAQCAtMzIsMTIgKzMyLDEzIEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86anVsaWVuLmhlbnJ5QGNhcGdlbWluaS5jb20iPkp1bGllbiBIZW5yeTwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIFN5bmVyZ3lUYWdDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdFRhZ0NvbW1hbmQKICAgICBpbXBsZW1lbnRzIFN5bmVyZ3lDb21tYW5kCiB7Ci0KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTY21SZXN1bHQgZXhlY3V0ZVRhZ0NvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyB0YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC00NywxNiArNDgsMTYgQEAKICAgICAgICAgU3luZXJneVNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvID0gKFN5bmVyZ3lTY21Qcm92aWRlclJlcG9zaXRvcnkpIHJlcG9zaXRvcnk7CiAgICAgICAgIGdldExvZ2dlcigpLmRlYnVnKCAiYmFzZWRpcjogIiArIGZpbGVTZXQuZ2V0QmFzZWRpcigpICk7CiAKLSAgICAgICAgU3RyaW5nIENDTV9BRERSID0gU3luZXJneVV0aWwuc3RhcnQoIGdldExvZ2dlcigpLCByZXBvLmdldFVzZXIoKSwgcmVwby5nZXRQYXNzd29yZCgpLCBTeW5lcmd5Um9sZS5CVUlMRF9NR1IgKTsKKyAgICAgICAgU3RyaW5nIGNjbUFkZHIgPSBTeW5lcmd5VXRpbC5zdGFydCggZ2V0TG9nZ2VyKCksIHJlcG8uZ2V0VXNlcigpLCByZXBvLmdldFBhc3N3b3JkKCksIFN5bmVyZ3lSb2xlLkJVSUxEX01HUiApOwogCiAgICAgICAgIHRyeQogICAgICAgICB7CiAgICAgICAgICAgICBTeW5lcmd5VXRpbC5jcmVhdGVCYXNlbGluZSggZ2V0TG9nZ2VyKCksIHJlcG8uZ2V0UHJvamVjdFNwZWMoKSwgdGFnLCByZXBvLmdldFByb2plY3RSZWxlYXNlKCksIHJlcG8KLSAgICAgICAgICAgICAgICAuZ2V0UHJvamVjdFB1cnBvc2UoKSwgQ0NNX0FERFIgKTsKKyAgICAgICAgICAgICAgICAuZ2V0UHJvamVjdFB1cnBvc2UoKSwgY2NtQWRkciApOwogICAgICAgICB9CiAgICAgICAgIGZpbmFsbHkKICAgICAgICAgewotICAgICAgICAgICAgU3luZXJneVV0aWwuc3RvcCggZ2V0TG9nZ2VyKCksIENDTV9BRERSICk7CisgICAgICAgICAgICBTeW5lcmd5VXRpbC5zdG9wKCBnZXRMb2dnZXIoKSwgY2NtQWRkciApOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIG5ldyBUYWdTY21SZXN1bHQoICIiLCBmaWxlU2V0LmdldEZpbGVMaXN0KCkgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbW1hbmQvdW5lZGl0L1N5bmVyZ3lVbkVkaXRDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb21tYW5kL3VuZWRpdC9TeW5lcmd5VW5FZGl0Q29tbWFuZC5qYXZhCmluZGV4IDY4NjlmMjQuLjBhMTBiYWIgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbW1hbmQvdW5lZGl0L1N5bmVyZ3lVbkVkaXRDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29tbWFuZC91bmVkaXQvU3luZXJneVVuRWRpdENvbW1hbmQuamF2YQpAQCAtMzcsMTEgKzM3LDEzIEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86anVsaWVuLmhlbnJ5QGNhcGdlbWluaS5jb20iPkp1bGllbiBIZW5yeTwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIFN5bmVyZ3lVbkVkaXRDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdFVuRWRpdENvbW1hbmQKICAgICBpbXBsZW1lbnRzIFN5bmVyZ3lDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU2NtUmVzdWx0IGV4ZWN1dGVVbkVkaXRDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKQEAgLTUwLDI0ICs1MiwyNCBAQAogICAgICAgICBTeW5lcmd5U2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8gPSAoU3luZXJneVNjbVByb3ZpZGVyUmVwb3NpdG9yeSkgcmVwb3NpdG9yeTsKICAgICAgICAgZ2V0TG9nZ2VyKCkuZGVidWcoICJiYXNlZGlyOiAiICsgZmlsZVNldC5nZXRCYXNlZGlyKCkgKTsKIAotICAgICAgICBTdHJpbmcgQ0NNX0FERFIgPSBTeW5lcmd5VXRpbC5zdGFydCggZ2V0TG9nZ2VyKCksIHJlcG8uZ2V0VXNlcigpLCByZXBvLmdldFBhc3N3b3JkKCksIG51bGwgKTsKKyAgICAgICAgU3RyaW5nIGNjbUFkZHIgPSBTeW5lcmd5VXRpbC5zdGFydCggZ2V0TG9nZ2VyKCksIHJlcG8uZ2V0VXNlcigpLCByZXBvLmdldFBhc3N3b3JkKCksIG51bGwgKTsKIAogICAgICAgICB0cnkKICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHByb2plY3Rfc3BlYyA9Ci0gICAgICAgICAgICAgICAgU3luZXJneVV0aWwuZ2V0V29ya2luZ1Byb2plY3QoIGdldExvZ2dlcigpLCByZXBvLmdldFByb2plY3RTcGVjKCksIHJlcG8uZ2V0VXNlcigpLCBDQ01fQUREUiApOwotICAgICAgICAgICAgaWYgKCBwcm9qZWN0X3NwZWMgPT0gbnVsbCApCisgICAgICAgICAgICBTdHJpbmcgcHJvamVjdFNwZWMgPQorICAgICAgICAgICAgICAgIFN5bmVyZ3lVdGlsLmdldFdvcmtpbmdQcm9qZWN0KCBnZXRMb2dnZXIoKSwgcmVwby5nZXRQcm9qZWN0U3BlYygpLCByZXBvLmdldFVzZXIoKSwgY2NtQWRkciApOworICAgICAgICAgICAgaWYgKCBwcm9qZWN0U3BlYyA9PSBudWxsICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2NtRXhjZXB0aW9uKCAiWW91IHNob3VsZCBjaGVja291dCBwcm9qZWN0IGZpcnN0IiApOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgRmlsZSBXQVBhdGggPSBTeW5lcmd5VXRpbC5nZXRXb3JrQXJlYSggZ2V0TG9nZ2VyKCksIHByb2plY3Rfc3BlYywgQ0NNX0FERFIgKTsKLSAgICAgICAgICAgIEZpbGUgZGVzdFBhdGggPSBuZXcgRmlsZSggV0FQYXRoLCByZXBvLmdldFByb2plY3ROYW1lKCkgKTsKKyAgICAgICAgICAgIEZpbGUgd2FQYXRoID0gU3luZXJneVV0aWwuZ2V0V29ya0FyZWEoIGdldExvZ2dlcigpLCBwcm9qZWN0U3BlYywgY2NtQWRkciApOworICAgICAgICAgICAgRmlsZSBkZXN0UGF0aCA9IG5ldyBGaWxlKCB3YVBhdGgsIHJlcG8uZ2V0UHJvamVjdE5hbWUoKSApOwogICAgICAgICAgICAgZm9yICggSXRlcmF0b3IgaSA9IGZpbGVTZXQuZ2V0RmlsZUxpc3QoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFNjbUZpbGUgZiA9IChTY21GaWxlKSBpLm5leHQoKTsKICAgICAgICAgICAgICAgICBGaWxlIHNvdXJjZSA9IG5ldyBGaWxlKCBmaWxlU2V0LmdldEJhc2VkaXIoKSwgZi5nZXRQYXRoKCkgKTsKICAgICAgICAgICAgICAgICBGaWxlIGRlc3QgPSBuZXcgRmlsZSggZGVzdFBhdGgsIGYuZ2V0UGF0aCgpICk7Ci0gICAgICAgICAgICAgICAgU3luZXJneVV0aWwuZGVsZXRlKCBnZXRMb2dnZXIoKSwgZGVzdCwgQ0NNX0FERFIsIHRydWUgKTsKKyAgICAgICAgICAgICAgICBTeW5lcmd5VXRpbC5kZWxldGUoIGdldExvZ2dlcigpLCBkZXN0LCBjY21BZGRyLCB0cnVlICk7CiAgICAgICAgICAgICAgICAgaWYgKCAhc291cmNlLmVxdWFscyggZGVzdCApICkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLmRlYnVnKCAiQ29weSBmaWxlIFsiICsgZGVzdCArICJdIHRvIFsiICsgc291cmNlICsgIl0uIiApOwpAQCAtODQsNyArODYsNyBAQAogICAgICAgICB9CiAgICAgICAgIGZpbmFsbHkKICAgICAgICAgewotICAgICAgICAgICAgU3luZXJneVV0aWwuc3RvcCggZ2V0TG9nZ2VyKCksIENDTV9BRERSICk7CisgICAgICAgICAgICBTeW5lcmd5VXRpbC5zdG9wKCBnZXRMb2dnZXIoKSwgY2NtQWRkciApOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIG5ldyBVbkVkaXRTY21SZXN1bHQoICIiLCBmaWxlU2V0LmdldEZpbGVMaXN0KCkgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbW1hbmQvdXBkYXRlL1N5bmVyZ3lVcGRhdGVDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb21tYW5kL3VwZGF0ZS9TeW5lcmd5VXBkYXRlQ29tbWFuZC5qYXZhCmluZGV4IGNkOGYwOTAuLmYxMzhiOWMgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbW1hbmQvdXBkYXRlL1N5bmVyZ3lVcGRhdGVDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29tbWFuZC91cGRhdGUvU3luZXJneVVwZGF0ZUNvbW1hbmQuamF2YQpAQCAtNDEsMTEgKzQxLDEzIEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86anVsaWVuLmhlbnJ5QGNhcGdlbWluaS5jb20iPkp1bGllbiBIZW5yeTwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIFN5bmVyZ3lVcGRhdGVDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdFVwZGF0ZUNvbW1hbmQKICAgICBpbXBsZW1lbnRzIFN5bmVyZ3lDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgVXBkYXRlU2NtUmVzdWx0IGV4ZWN1dGVVcGRhdGVDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbVZlcnNpb24gdmVyc2lvbiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTU0LDMxICs1NiwzMSBAQAogICAgICAgICBTeW5lcmd5U2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8gPSAoU3luZXJneVNjbVByb3ZpZGVyUmVwb3NpdG9yeSkgcmVwb3NpdG9yeTsKICAgICAgICAgZ2V0TG9nZ2VyKCkuZGVidWcoICJiYXNlZGlyOiAiICsgZmlsZVNldC5nZXRCYXNlZGlyKCkgKTsKIAotICAgICAgICBTdHJpbmcgQ0NNX0FERFIgPSBTeW5lcmd5VXRpbC5zdGFydCggZ2V0TG9nZ2VyKCksIHJlcG8uZ2V0VXNlcigpLCByZXBvLmdldFBhc3N3b3JkKCksIG51bGwgKTsKKyAgICAgICAgU3RyaW5nIGNjbUFkZHIgPSBTeW5lcmd5VXRpbC5zdGFydCggZ2V0TG9nZ2VyKCksIHJlcG8uZ2V0VXNlcigpLCByZXBvLmdldFBhc3N3b3JkKCksIG51bGwgKTsKIAotICAgICAgICBGaWxlIFdBUGF0aDsKKyAgICAgICAgRmlsZSB3YVBhdGg7CiAgICAgICAgIHRyeQogICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcHJvamVjdF9zcGVjID0KLSAgICAgICAgICAgICAgICBTeW5lcmd5VXRpbC5nZXRXb3JraW5nUHJvamVjdCggZ2V0TG9nZ2VyKCksIHJlcG8uZ2V0UHJvamVjdFNwZWMoKSwgcmVwby5nZXRVc2VyKCksIENDTV9BRERSICk7Ci0gICAgICAgICAgICBTeW5lcmd5VXRpbC5yZWNvbmZpZ3VyZVByb3BlcnRpZXMoIGdldExvZ2dlcigpLCBwcm9qZWN0X3NwZWMsIENDTV9BRERSICk7Ci0gICAgICAgICAgICBTeW5lcmd5VXRpbC5yZWNvbmZpZ3VyZSggZ2V0TG9nZ2VyKCksIHByb2plY3Rfc3BlYywgQ0NNX0FERFIgKTsKKyAgICAgICAgICAgIFN0cmluZyBwcm9qZWN0U3BlYyA9CisgICAgICAgICAgICAgICAgU3luZXJneVV0aWwuZ2V0V29ya2luZ1Byb2plY3QoIGdldExvZ2dlcigpLCByZXBvLmdldFByb2plY3RTcGVjKCksIHJlcG8uZ2V0VXNlcigpLCBjY21BZGRyICk7CisgICAgICAgICAgICBTeW5lcmd5VXRpbC5yZWNvbmZpZ3VyZVByb3BlcnRpZXMoIGdldExvZ2dlcigpLCBwcm9qZWN0U3BlYywgY2NtQWRkciApOworICAgICAgICAgICAgU3luZXJneVV0aWwucmVjb25maWd1cmUoIGdldExvZ2dlcigpLCBwcm9qZWN0U3BlYywgY2NtQWRkciApOwogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBnZXQgV0EgcGF0aAotICAgICAgICAgICAgV0FQYXRoID0gU3luZXJneVV0aWwuZ2V0V29ya0FyZWEoIGdldExvZ2dlcigpLCBwcm9qZWN0X3NwZWMsIENDTV9BRERSICk7CisgICAgICAgICAgICB3YVBhdGggPSBTeW5lcmd5VXRpbC5nZXRXb3JrQXJlYSggZ2V0TG9nZ2VyKCksIHByb2plY3RTcGVjLCBjY21BZGRyICk7CiAgICAgICAgIH0KICAgICAgICAgZmluYWxseQogICAgICAgICB7Ci0gICAgICAgICAgICBTeW5lcmd5VXRpbC5zdG9wKCBnZXRMb2dnZXIoKSwgQ0NNX0FERFIgKTsKKyAgICAgICAgICAgIFN5bmVyZ3lVdGlsLnN0b3AoIGdldExvZ2dlcigpLCBjY21BZGRyICk7CiAgICAgICAgIH0KIAotICAgICAgICBGaWxlIHNvdXJjZSA9IG5ldyBGaWxlKCBXQVBhdGgsIHJlcG8uZ2V0UHJvamVjdE5hbWUoKSApOworICAgICAgICBGaWxlIHNvdXJjZSA9IG5ldyBGaWxlKCB3YVBhdGgsIHJlcG8uZ2V0UHJvamVjdE5hbWUoKSApOwogCiAgICAgICAgIC8vIE1vdmUgZmlsZSBmcm9tIHdvcmsgYXJlYSB0byBleHBlY3RlZCBkaXIgaWYgbm90IHRoZSBzYW1lCiAgICAgICAgIExpc3QgbW9kaWZpY2F0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKICAgICAgICAgaWYgKCAhc291cmNlLmVxdWFscyggZmlsZVNldC5nZXRCYXNlZGlyKCkgKSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdldExvZ2dlcigpLmluZm8oICJXZSB3aWxsIGNvcHkgbW9kaWZpZWQgZmlsZXMgZnJvbSBTeW5lcmd5IFdvcmsgQXJlYSBbIiArIHNvdXJjZSArCi0gICAgICAgICAgICAgICAgIl0gdG8gZXhwZWN0ZWQgZm9sZGVyIFsiICsgZmlsZVNldC5nZXRCYXNlZGlyKCkgKyAiXSIgKTsKKyAgICAgICAgICAgIGdldExvZ2dlcigpLmluZm8oICJXZSB3aWxsIGNvcHkgbW9kaWZpZWQgZmlsZXMgZnJvbSBTeW5lcmd5IFdvcmsgQXJlYSBbIiArIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIl0gdG8gZXhwZWN0ZWQgZm9sZGVyIFsiICsgZmlsZVNldC5nZXRCYXNlZGlyKCkgKyAiXSIgKTsKICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvcHlEaXJlY3RvcnlTdHJ1Y3R1cmUoIHNvdXJjZSwgZmlsZVNldC5nZXRCYXNlZGlyKCksIG1vZGlmaWNhdGlvbnMgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbnN1bWVyL1N5bmVyZ3lDcmVhdGVUYXNrQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbnN1bWVyL1N5bmVyZ3lDcmVhdGVUYXNrQ29uc3VtZXIuamF2YQppbmRleCAwMTI3NTkwLi5iYzA5OGMwIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb25zdW1lci9TeW5lcmd5Q3JlYXRlVGFza0NvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29uc3VtZXIvU3luZXJneUNyZWF0ZVRhc2tDb25zdW1lci5qYXZhCkBAIC0yNCw2ICsyNCw3IEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJqdWxpZW4uaGVucnlAY2FwZ2VtaW5pLmNvbSI+SnVsaWVuIEhlbnJ5PC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgU3luZXJneUNyZWF0ZVRhc2tDb25zdW1lcgogICAgIGV4dGVuZHMgQWJzdHJhY3RDb25zdW1lcgpAQCAtNDgsNyArNDksNyBAQAogICAgICAqIFRhc2sgNzAgY3JlYXRlZC4gPGJyLz4gVGhlIGRlZmF1bHQgdGFzayBpcyBzZXQgdG86IDxici8+IDcwOiBNYXZlbiBTQ00KICAgICAgKiBTeW5lcmd5IHByb3ZpZGVyOiBhZGRpbmcgZmlsZShzKSB0byBwcm9qZWN0IFRlc3RNYXZlbn4xCiAgICAgICoKLSAgICAgKiBAc2VlIG9yZy5jb2RlaGF1cy5wbGV4dXMudXRpbC5jbGkuU3RyZWFtQ29uc3VtZXIjY29uc3VtZUxpbmUoamF2YS5sYW5nLlN0cmluZykKKyAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29uc3VtZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb25zdW1lci9TeW5lcmd5R2V0Q29tcGxldGVkVGFza3NDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29uc3VtZXIvU3luZXJneUdldENvbXBsZXRlZFRhc2tzQ29uc3VtZXIuamF2YQppbmRleCA0MjExZWIyLi5lYTlhMTBkIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb25zdW1lci9TeW5lcmd5R2V0Q29tcGxldGVkVGFza3NDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbnN1bWVyL1N5bmVyZ3lHZXRDb21wbGV0ZWRUYXNrc0NvbnN1bWVyLmphdmEKQEAgLTM1LDYgKzM1LDcgQEAKICAqIE1haW5seSBpbnNwaXJlZCBmcm9tIENydWlzZUNvbnRyb2wKICAqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Imp1bGllbi5oZW5yeUBjYXBnZW1pbmkuY29tIj5KdWxpZW4gSGVucnk8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBTeW5lcmd5R2V0Q29tcGxldGVkVGFza3NDb25zdW1lcgogICAgIGV4dGVuZHMgQWJzdHJhY3RDb25zdW1lcgpAQCAtNTAsOCArNTEsOCBAQAogCiAgICAgcHJpdmF0ZSBTdHJpbmcgY291bnRyeSA9ICJVUyI7CiAKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBPVVRQVVRfRk9STUFUID0gIiVkaXNwbGF5bmFtZSIgKyBTeW5lcmd5VXRpbC5TRVBBUkFUT1IgKyAiJW93bmVyIiArIFN5bmVyZ3lVdGlsLlNFUEFSQVRPUiArCi0gICAgICAgICIlY29tcGxldGlvbl9kYXRlIiArIFN5bmVyZ3lVdGlsLlNFUEFSQVRPUiArICIldGFza19zeW5vcHNpcyIgKyBTeW5lcmd5VXRpbC5TRVBBUkFUT1I7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1VUUFVUX0ZPUk1BVCA9ICIlZGlzcGxheW5hbWUiICsgU3luZXJneVV0aWwuU0VQQVJBVE9SICsgIiVvd25lciIKKyAgICAgICAgKyBTeW5lcmd5VXRpbC5TRVBBUkFUT1IgKyAiJWNvbXBsZXRpb25fZGF0ZSIgKyBTeW5lcmd5VXRpbC5TRVBBUkFUT1IgKyAiJXRhc2tfc3lub3BzaXMiICsgU3luZXJneVV0aWwuU0VQQVJBVE9SOwogCiAgICAgcHJpdmF0ZSBMaXN0IGVudHJpZXMgPSBuZXcgQXJyYXlMaXN0KCk7CiAKQEAgLTg2LDYgKzg3LDcgQEAKICAgICAgICAgbG9nZ2VyLmRlYnVnKCAiY291bnRyeSA9ICIgKyB0aGlzLmNvdW50cnkgKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBnZXRMb2dnZXIoKS5kZWJ1ZyggIkNvbnN1bWU6ICIgKyBsaW5lICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb25zdW1lci9TeW5lcmd5R2V0VGFza09iamVjdHNDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29uc3VtZXIvU3luZXJneUdldFRhc2tPYmplY3RzQ29uc3VtZXIuamF2YQppbmRleCAxNTkwMDkyLi45MGNkNTJjIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb25zdW1lci9TeW5lcmd5R2V0VGFza09iamVjdHNDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbnN1bWVyL1N5bmVyZ3lHZXRUYXNrT2JqZWN0c0NvbnN1bWVyLmphdmEKQEAgLTMyLDYgKzMyLDcgQEAKICAqIE1haW5seSBpbnNwaXJlZCBmcm9tIENydWlzZUNvbnRyb2wKICAqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Imp1bGllbi5oZW5yeUBjYXBnZW1pbmkuY29tIj5KdWxpZW4gSGVucnk8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBTeW5lcmd5R2V0VGFza09iamVjdHNDb25zdW1lcgogICAgIGV4dGVuZHMgQWJzdHJhY3RDb25zdW1lcgpAQCAtMzksNyArNDAsNyBAQAogCiAgICAgcHJpdmF0ZSBMaXN0IGVudHJpZXMgPSBuZXcgQXJyYXlMaXN0KCk7CiAKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBPVVRQVVRfRk9STUFUID0gIiVuYW1lIiArIFN5bmVyZ3lVdGlsLlNFUEFSQVRPUiArIC8vIDAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPVVRQVVRfRk9STUFUID0gIiVuYW1lIiArIFN5bmVyZ3lVdGlsLlNFUEFSQVRPUiArIC8vIDAKICAgICAgICAgIiV2ZXJzaW9uIiArIFN5bmVyZ3lVdGlsLlNFUEFSQVRPUjsKIAogICAgIC8qKgpAQCAtNTUsNiArNTYsNyBAQAogICAgICAgICBzdXBlciggbG9nZ2VyICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgZ2V0TG9nZ2VyKCkuZGVidWcoICJDb25zdW1lOiAiICsgbGluZSApOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29uc3VtZXIvU3luZXJneUdldFdvcmtpbmdGaWxlc0NvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb25zdW1lci9TeW5lcmd5R2V0V29ya2luZ0ZpbGVzQ29uc3VtZXIuamF2YQppbmRleCA5YmM4MTY2Li44YTNjNTlmIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb25zdW1lci9TeW5lcmd5R2V0V29ya2luZ0ZpbGVzQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb25zdW1lci9TeW5lcmd5R2V0V29ya2luZ0ZpbGVzQ29uc3VtZXIuamF2YQpAQCAtMjcsNiArMjcsNyBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOmp1bGllbi5oZW5yeUBjYXBnZW1pbmkuY29tIj5KdWxpZW4gSGVucnk8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBTeW5lcmd5R2V0V29ya2luZ0ZpbGVzQ29uc3VtZXIKICAgICBpbXBsZW1lbnRzIFN0cmVhbUNvbnN1bWVyCkBAIC0zNSwxMyArMzYsMTQgQEAKIAogICAgIHByaXZhdGUgTGlzdCBmaWxlcyA9IG5ldyBBcnJheUxpc3QoKTsKIAotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE9VVFBVVF9GT1JNQVQgPSAiJW5hbWUiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9VVFBVVF9GT1JNQVQgPSAiJW5hbWUiOwogCiAgICAgcHVibGljIFN5bmVyZ3lHZXRXb3JraW5nRmlsZXNDb25zdW1lciggU2NtTG9nZ2VyIGxvZ2dlciApCiAgICAgewogICAgICAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBsb2dnZXIuZGVidWcoIGxpbmUgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbnN1bWVyL1N5bmVyZ3lHZXRXb3JraW5nUHJvamVjdENvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb25zdW1lci9TeW5lcmd5R2V0V29ya2luZ1Byb2plY3RDb25zdW1lci5qYXZhCmluZGV4IDllMTU5MDMuLjM0NzYyYTAgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbnN1bWVyL1N5bmVyZ3lHZXRXb3JraW5nUHJvamVjdENvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29uc3VtZXIvU3luZXJneUdldFdvcmtpbmdQcm9qZWN0Q29uc3VtZXIuamF2YQpAQCAtMzAsMzAgKzMwLDMyIEBACiAgKiA8L3ByZT4KICAqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpqdWxpZW4uaGVucnlAY2FwZ2VtaW5pLmNvbSI+SnVsaWVuIEhlbnJ5PC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgU3luZXJneUdldFdvcmtpbmdQcm9qZWN0Q29uc3VtZXIKICAgICBpbXBsZW1lbnRzIFN0cmVhbUNvbnN1bWVyCiB7CiAgICAgcHJpdmF0ZSBTY21Mb2dnZXIgbG9nZ2VyOwogCi0gICAgcHJpdmF0ZSBTdHJpbmcgcHJvamVjdF9zcGVjOworICAgIHByaXZhdGUgU3RyaW5nIHByb2plY3RTcGVjOwogCiAgICAgcHVibGljIFN5bmVyZ3lHZXRXb3JraW5nUHJvamVjdENvbnN1bWVyKCBTY21Mb2dnZXIgbG9nZ2VyICkKICAgICB7CiAgICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgY29uc3VtZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIGxvZ2dlci5kZWJ1ZyggbGluZSApOwogICAgICAgICBpZiAoICFsaW5lLnRyaW0oKS5lcXVhbHMoICIiICkgKQogICAgICAgICB7Ci0gICAgICAgICAgICBwcm9qZWN0X3NwZWMgPSBsaW5lLnRyaW0oKTsKKyAgICAgICAgICAgIHByb2plY3RTcGVjID0gbGluZS50cmltKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldFByb2plY3RTcGVjKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBwcm9qZWN0X3NwZWM7CisgICAgICAgIHJldHVybiBwcm9qZWN0U3BlYzsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb25zdW1lci9TeW5lcmd5V29ya2FyZWFDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvY29uc3VtZXIvU3luZXJneVdvcmthcmVhQ29uc3VtZXIuamF2YQppbmRleCBlZThhMWU4Li4yMjk1ODViIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS9jb25zdW1lci9TeW5lcmd5V29ya2FyZWFDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L2NvbnN1bWVyL1N5bmVyZ3lXb3JrYXJlYUNvbnN1bWVyLmphdmEKQEAgLTMyLDYgKzMyLDcgQEAKICAqIDwvcHJlPgogICoKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOmp1bGllbi5oZW5yeUBjYXBnZW1pbmkuY29tIj5KdWxpZW4gSGVucnk8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBTeW5lcmd5V29ya2FyZWFDb25zdW1lcgogICAgIGltcGxlbWVudHMgU3RyZWFtQ29uc3VtZXIKQEAgLTU5LDYgKzYwLDggQEAKICAgICAgKiA8cHJlPgogICAgICAqICAgICAgICAgICAgRDpcY21zeW5lcmd5XGNjbV93YVxMQVBPU1RFXEJHWkJGWkgmdGlsZGU7MQogICAgICAqICAgICAgICAgICAgJmx0O3ByZSZndDsKKyAgICAgKgorICAgICAqIHtAaW5oZXJpdERvY30KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L3JlcG9zaXRvcnkvU3luZXJneVNjbVByb3ZpZGVyUmVwb3NpdG9yeS5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvcmVwb3NpdG9yeS9TeW5lcmd5U2NtUHJvdmlkZXJSZXBvc2l0b3J5LmphdmEKaW5kZXggMTQ3ZDhhNS4uYTA1ODM3YSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvcmVwb3NpdG9yeS9TeW5lcmd5U2NtUHJvdmlkZXJSZXBvc2l0b3J5LmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvcmVwb3NpdG9yeS9TeW5lcmd5U2NtUHJvdmlkZXJSZXBvc2l0b3J5LmphdmEKQEAgLTI5LDIwICsyOSwyMSBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOmp1bGllbi5oZW5yeUBjYXBnZW1pbmkuY29tIj5KdWxpZW4gSGVucnk8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBTeW5lcmd5U2NtUHJvdmlkZXJSZXBvc2l0b3J5CiAgICAgZXh0ZW5kcyBTY21Qcm92aWRlclJlcG9zaXRvcnkKIHsKIAotICAgIHByaXZhdGUgU3RyaW5nIHByb2plY3Rfc3BlYzsKKyAgICBwcml2YXRlIFN0cmluZyBwcm9qZWN0U3BlYzsKIAotICAgIHByaXZhdGUgU3RyaW5nIHByb2plY3RfbmFtZTsKKyAgICBwcml2YXRlIFN0cmluZyBwcm9qZWN0TmFtZTsKIAotICAgIHByaXZhdGUgU3RyaW5nIHByb2plY3RfdmVyc2lvbjsKKyAgICBwcml2YXRlIFN0cmluZyBwcm9qZWN0VmVyc2lvbjsKIAotICAgIHByaXZhdGUgU3RyaW5nIHByb2plY3RfcmVsZWFzZTsKKyAgICBwcml2YXRlIFN0cmluZyBwcm9qZWN0UmVsZWFzZTsKIAotICAgIHByaXZhdGUgU3RyaW5nIHByb2plY3RfcHVycG9zZTsKKyAgICBwcml2YXRlIFN0cmluZyBwcm9qZWN0UHVycG9zZTsKIAogICAgIHByaXZhdGUgU3RyaW5nIGRlbGltaXRlcjsKIApAQCAtNTMsNyArNTQsNiBAQAogICAgIHB1YmxpYyBTeW5lcmd5U2NtUHJvdmlkZXJSZXBvc2l0b3J5KCBTdHJpbmcgdXJsICkKICAgICAgICAgdGhyb3dzIFNjbVJlcG9zaXRvcnlFeGNlcHRpb24KICAgICB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkRFQlVHIiApOwogICAgICAgICB0cnkKICAgICAgICAgewogICAgICAgICAgICAgcGFyc2VVcmwoIHVybCApOwpAQCAtOTIsMTMgKzkyLDEzIEBACiAgICAgewogICAgICAgICBpZiAoIHRva2VuaXplci5jb3VudFRva2VucygpID09IDUgKQogICAgICAgICB7Ci0gICAgICAgICAgICBwcm9qZWN0X25hbWUgPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CisgICAgICAgICAgICBwcm9qZWN0TmFtZSA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKICAgICAgICAgICAgIGRlbGltaXRlciA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgIHByb2plY3RfdmVyc2lvbiA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgIHByb2plY3RfcmVsZWFzZSA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgIHByb2plY3RfcHVycG9zZSA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgIHByb2plY3RWZXJzaW9uID0gdG9rZW5pemVyLm5leHRUb2tlbigpOworICAgICAgICAgICAgcHJvamVjdFJlbGVhc2UgPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CisgICAgICAgICAgICBwcm9qZWN0UHVycG9zZSA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKIAotICAgICAgICAgICAgcHJvamVjdF9zcGVjID0gcHJvamVjdF9uYW1lICsgZGVsaW1pdGVyICsgcHJvamVjdF92ZXJzaW9uOworICAgICAgICAgICAgcHJvamVjdFNwZWMgPSBwcm9qZWN0TmFtZSArIGRlbGltaXRlciArIHByb2plY3RWZXJzaW9uOwogCiAgICAgICAgIH0KICAgICAgICAgZWxzZQpAQCAtMTA5LDE3ICsxMDksMTcgQEAKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvamVjdFNwZWMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHByb2plY3Rfc3BlYzsKKyAgICAgICAgcmV0dXJuIHByb2plY3RTcGVjOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvamVjdE5hbWUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHByb2plY3RfbmFtZTsKKyAgICAgICAgcmV0dXJuIHByb2plY3ROYW1lOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvamVjdFZlcnNpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHByb2plY3RfdmVyc2lvbjsKKyAgICAgICAgcmV0dXJuIHByb2plY3RWZXJzaW9uOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTI3LDcgKzEyNyw3IEBACiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRQcm9qZWN0UHVycG9zZSgpCiAgICAgewotICAgICAgICByZXR1cm4gcHJvamVjdF9wdXJwb3NlOworICAgICAgICByZXR1cm4gcHJvamVjdFB1cnBvc2U7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xMzUsNyArMTM1LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFByb2plY3RSZWxlYXNlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBwcm9qZWN0X3JlbGVhc2U7CisgICAgICAgIHJldHVybiBwcm9qZWN0UmVsZWFzZTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L3V0aWwvU3luZXJneUNDTS5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvdXRpbC9TeW5lcmd5Q0NNLmphdmEKaW5kZXggMTVkNTQwYS4uNGYwYWYzOSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvdXRpbC9TeW5lcmd5Q0NNLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvdXRpbC9TeW5lcmd5Q0NNLmphdmEKQEAgLTM2LDYgKzM2LDcgQEAKICAqIFRoaXMgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB0byBleGVjdXRlIFN5bmVyZ3kgY2NtIGNvbW1hbmQgbGluZS4KICAqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpqdWxpZW4uaGVucnlAY2FwZ2VtaW5pLmNvbSI+SnVsaWVuIEhlbnJ5PC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgU3luZXJneUNDTQogewpAQCAtNzksMTcgKzgwLDE3IEBACiAgICAgICoKICAgICAgKiBAcGFyYW0gdGFza051bWJlciBUYXNrIG51bWJlci4KICAgICAgKiBAcGFyYW0gZm9ybWF0ICAgICBPdXRwdXQgZm9ybWF0LgotICAgICAqIEBwYXJhbSBDQ01fQUREUgorICAgICAqIEBwYXJhbSBjY21BZGRyCiAgICAgICogQHJldHVybiB0aGUgY29tbWFuZGwgaW5lLgogICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBDb21tYW5kbGluZSBzaG93VGFza09iamVjdHMoIGludCB0YXNrTnVtYmVyLCBTdHJpbmcgZm9ybWF0LCBTdHJpbmcgQ0NNX0FERFIgKQorICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgc2hvd1Rhc2tPYmplY3RzKCBpbnQgdGFza051bWJlciwgU3RyaW5nIGZvcm1hdCwgU3RyaW5nIGNjbUFkZHIgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIENNIFN5bmVyZ3kgY29tbWFuZAogICAgICAgICBDb21tYW5kbGluZSBjbCA9IG5ldyBDb21tYW5kbGluZSgpOwogCi0gICAgICAgIGNvbmZpZ3VyZUVudmlyb25tZW50KCBjbCwgQ0NNX0FERFIgKTsKKyAgICAgICAgY29uZmlndXJlRW52aXJvbm1lbnQoIGNsLCBjY21BZGRyICk7CiAKICAgICAgICAgY2wuc2V0RXhlY3V0YWJsZSggQ0NNICk7CiAKQEAgLTExNCwxOCArMTE1LDE4IEBACiAgICAgICoKICAgICAgKiBAcGFyYW0gcXVlcnkgICAgcXVlcnkuCiAgICAgICogQHBhcmFtIGZvcm1hdCAgIE91dHB1dCBmb3JtYXQKLSAgICAgKiBAcGFyYW0gQ0NNX0FERFIKKyAgICAgKiBAcGFyYW0gY2NtQWRkcgogICAgICAqIEByZXR1cm4gdGhlIGNvbW1hbmQgbGluZS4KICAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgcXVlcnkoIFN0cmluZyBxdWVyeSwgU3RyaW5nIGZvcm1hdCwgU3RyaW5nIENDTV9BRERSICkKKyAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIHF1ZXJ5KCBTdHJpbmcgcXVlcnksIFN0cmluZyBmb3JtYXQsIFN0cmluZyBjY21BZGRyICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKIAogICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIENNIFN5bmVyZ3kgY29tbWFuZAogICAgICAgICBDb21tYW5kbGluZSBjbCA9IG5ldyBDb21tYW5kbGluZSgpOwogCi0gICAgICAgIGNvbmZpZ3VyZUVudmlyb25tZW50KCBjbCwgQ0NNX0FERFIgKTsKKyAgICAgICAgY29uZmlndXJlRW52aXJvbm1lbnQoIGNsLCBjY21BZGRyICk7CiAKICAgICAgICAgY2wuc2V0RXhlY3V0YWJsZSggQ0NNICk7CiAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIFFVRVJZICk7CkBAIC0xNTEsMTcgKzE1MiwxNyBAQAogICAgICAqIEBwYXJhbSBuYW1lICAgICAgICBOYW1lIG9mIHRoZSBiYXNlbGluZQogICAgICAqIEBwYXJhbSByZWxlYXNlICAgICB0aGUgcmVsZWFzZS4KICAgICAgKiBAcGFyYW0gcHVycG9zZSAgICAgdGhlIHB1cnBvc2UuCi0gICAgICogQHBhcmFtIENDTV9BRERSCisgICAgICogQHBhcmFtIGNjbUFkZHIKICAgICAgKiBAcmV0dXJuIHRoZSBjb21tYW5kIGxpbmUuCiAgICAgICogQHRocm93cyBTY21FeGNlcHRpb24KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIGNyZWF0ZUJhc2VsaW5lKCBTdHJpbmcgcHJvamVjdFNwZWMsIFN0cmluZyBuYW1lLCBTdHJpbmcgcmVsZWFzZSwgU3RyaW5nIHB1cnBvc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIENDTV9BRERSICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY2NtQWRkciApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIENvbW1hbmRsaW5lIGNsID0gbmV3IENvbW1hbmRsaW5lKCk7CiAKLSAgICAgICAgY29uZmlndXJlRW52aXJvbm1lbnQoIGNsLCBDQ01fQUREUiApOworICAgICAgICBjb25maWd1cmVFbnZpcm9ubWVudCggY2wsIGNjbUFkZHIgKTsKIAogICAgICAgICBjbC5zZXRFeGVjdXRhYmxlKCBDQ00gKTsKICAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggQkFTRUxJTkUgKTsKQEAgLTE4NywxNiArMTg4LDE2IEBACiAgICAgICoKICAgICAgKiBAcGFyYW0gZmlsZXMgICAgZmlsZXNldC4KICAgICAgKiBAcGFyYW0gbWVzc2FnZSAgbWVzc2FnZSBsb2csIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgKiBAcGFyYW0gQ0NNX0FERFIKKyAgICAgKiBAcGFyYW0gY2NtQWRkcgogICAgICAqIEByZXR1cm4gdGhlIGNvbW1hbmQgbGluZS4KICAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgY3JlYXRlKCBMaXN0IGZpbGVzLCBTdHJpbmcgbWVzc2FnZSwgU3RyaW5nIENDTV9BRERSICkKKyAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIGNyZWF0ZSggTGlzdCBmaWxlcywgU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyBjY21BZGRyICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBuZXcgQ29tbWFuZGxpbmUoKTsKIAotICAgICAgICBjb25maWd1cmVFbnZpcm9ubWVudCggY2wsIENDTV9BRERSICk7CisgICAgICAgIGNvbmZpZ3VyZUVudmlyb25tZW50KCBjbCwgY2NtQWRkciApOwogCiAgICAgICAgIGNsLnNldEV4ZWN1dGFibGUoIENDTSApOwogICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCBDUkVBVEUgKTsKQEAgLTIzMywxNiArMjM0LDE2IEBACiAgICAgICogQHBhcmFtIHN5bm9wc2lzICAgIHN5bm9wc2lzLgogICAgICAqIEBwYXJhbSByZWxlYXNlICAgICByZWxlYXNlLgogICAgICAqIEBwYXJhbSBkZWZhdWx0VGFzayBkZWZhdWx0LgotICAgICAqIEBwYXJhbSBDQ01fQUREUgorICAgICAqIEBwYXJhbSBjY21BZGRyCiAgICAgICogQHJldHVybiB0aGUgY29tbWFuZCBsaW5lLgogICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBDb21tYW5kbGluZSBjcmVhdGVUYXNrKCBTdHJpbmcgc3lub3BzaXMsIFN0cmluZyByZWxlYXNlLCBib29sZWFuIGRlZmF1bHRUYXNrLCBTdHJpbmcgQ0NNX0FERFIgKQorICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgY3JlYXRlVGFzayggU3RyaW5nIHN5bm9wc2lzLCBTdHJpbmcgcmVsZWFzZSwgYm9vbGVhbiBkZWZhdWx0VGFzaywgU3RyaW5nIGNjbUFkZHIgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICBDb21tYW5kbGluZSBjbCA9IG5ldyBDb21tYW5kbGluZSgpOwogCi0gICAgICAgIGNvbmZpZ3VyZUVudmlyb25tZW50KCBjbCwgQ0NNX0FERFIgKTsKKyAgICAgICAgY29uZmlndXJlRW52aXJvbm1lbnQoIGNsLCBjY21BZGRyICk7CiAKICAgICAgICAgY2wuc2V0RXhlY3V0YWJsZSggQ0NNICk7CiAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIFRBU0sgKTsKQEAgLTI3NCwyNSArMjc1LDI1IEBACiAgICAgLyoqCiAgICAgICogQ3JlYXRlIGNvbW1hbmQgbGluZSBmb3IgY2hlY2tpbiBhIHRhc2sKICAgICAgKgotICAgICAqIEBwYXJhbSB0YXNrX3NwZWNzIHRhc2tfc3BlY3Mgb3IgZGVmYXVsdAorICAgICAqIEBwYXJhbSB0YXNrU3BlY3MgdGFza19zcGVjcyBvciBkZWZhdWx0CiAgICAgICogQHBhcmFtIGNvbW1lbnQgICAgY29tbWVudC4KLSAgICAgKiBAcGFyYW0gQ0NNX0FERFIKKyAgICAgKiBAcGFyYW0gY2NtQWRkcgogICAgICAqIEByZXR1cm4KICAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgY2hlY2tpblRhc2soIFN0cmluZyB0YXNrX3NwZWNzLCBTdHJpbmcgY29tbWVudCwgU3RyaW5nIENDTV9BRERSICkKKyAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIGNoZWNraW5UYXNrKCBTdHJpbmcgdGFza1NwZWNzLCBTdHJpbmcgY29tbWVudCwgU3RyaW5nIGNjbUFkZHIgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICBDb21tYW5kbGluZSBjbCA9IG5ldyBDb21tYW5kbGluZSgpOwogCi0gICAgICAgIGNvbmZpZ3VyZUVudmlyb25tZW50KCBjbCwgQ0NNX0FERFIgKTsKKyAgICAgICAgY29uZmlndXJlRW52aXJvbm1lbnQoIGNsLCBjY21BZGRyICk7CiAKICAgICAgICAgY2wuc2V0RXhlY3V0YWJsZSggQ0NNICk7CiAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIFRBU0sgKTsKIAogICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAiLWNoZWNraW4iICk7CiAKLSAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggdGFza19zcGVjcyApOworICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCB0YXNrU3BlY3MgKTsKIAogICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAiLWNvbW1lbnQiICk7CiAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIGNvbW1lbnQgKTsKQEAgLTMwNSwxNyArMzA2LDE3IEBACiAgICAgICogQ3JlYXRlIGNvbW1hbmQgbGluZSBmb3IgZGVsZXRpbmcgZmlsZShzKS4KICAgICAgKgogICAgICAqIEBwYXJhbSBmaWxlcyAgICBmaWxlc2V0LgotICAgICAqIEBwYXJhbSBDQ01fQUREUgorICAgICAqIEBwYXJhbSBjY21BZGRyCiAgICAgICogQHBhcmFtIHJlcGxhY2UgIHJlcGxhY2Ugd2l0aCBwcmV2aW91cyB2ZXJzaW9uIG9mIGZpbGUgPwogICAgICAqIEByZXR1cm4KICAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgZGVsZXRlKCBMaXN0IGZpbGVzLCBTdHJpbmcgQ0NNX0FERFIsIGJvb2xlYW4gcmVwbGFjZSApCisgICAgcHVibGljIHN0YXRpYyBDb21tYW5kbGluZSBkZWxldGUoIExpc3QgZmlsZXMsIFN0cmluZyBjY21BZGRyLCBib29sZWFuIHJlcGxhY2UgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICBDb21tYW5kbGluZSBjbCA9IG5ldyBDb21tYW5kbGluZSgpOwogCi0gICAgICAgIGNvbmZpZ3VyZUVudmlyb25tZW50KCBjbCwgQ0NNX0FERFIgKTsKKyAgICAgICAgY29uZmlndXJlRW52aXJvbm1lbnQoIGNsLCBjY21BZGRyICk7CiAKICAgICAgICAgY2wuc2V0RXhlY3V0YWJsZSggQ0NNICk7CiAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIERFTEVURSApOwpAQCAtMzQ1LDI3ICszNDYsMjcgQEAKICAgICAvKioKICAgICAgKiBDcmVhdGUgY29tbWFuZGxpbmUgdG8gcmVjb25maWd1cmUgYSBwcm9qZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtIHByb2plY3Rfc3BlYwotICAgICAqIEBwYXJhbSBDQ01fQUREUgorICAgICAqIEBwYXJhbSBwcm9qZWN0U3BlYworICAgICAqIEBwYXJhbSBjY21BZGRyCiAgICAgICogQHJldHVybiB0aGUgY29tbWFuZCBsaW5lLgogICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBDb21tYW5kbGluZSByZWNvbmZpZ3VyZSggU3RyaW5nIHByb2plY3Rfc3BlYywgU3RyaW5nIENDTV9BRERSICkKKyAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIHJlY29uZmlndXJlKCBTdHJpbmcgcHJvamVjdFNwZWMsIFN0cmluZyBjY21BZGRyICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBuZXcgQ29tbWFuZGxpbmUoKTsKIAotICAgICAgICBjb25maWd1cmVFbnZpcm9ubWVudCggY2wsIENDTV9BRERSICk7CisgICAgICAgIGNvbmZpZ3VyZUVudmlyb25tZW50KCBjbCwgY2NtQWRkciApOwogCiAgICAgICAgIGNsLnNldEV4ZWN1dGFibGUoIENDTSApOwogICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCBSRUNPTkZJR1VSRSApOwogCiAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoICItcmVjdXJzZSIgKTsKIAotICAgICAgICBpZiAoIHByb2plY3Rfc3BlYyAhPSBudWxsICkKKyAgICAgICAgaWYgKCBwcm9qZWN0U3BlYyAhPSBudWxsICkKICAgICAgICAgewogICAgICAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggIi1wIiApOwotICAgICAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggcHJvamVjdF9zcGVjICk7CisgICAgICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCBwcm9qZWN0U3BlYyApOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGNsOwpAQCAtMzc1LDIzICszNzYsMjMgQEAKICAgICAvKioKICAgICAgKiBDcmVhdGUgY29tbWFuZGxpbmUgdG8gcmVjb25maWd1cmUgcHJvcGVydGllcyBvZiBhIHByb2plY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gcHJvamVjdF9zcGVjCi0gICAgICogQHBhcmFtIENDTV9BRERSCisgICAgICogQHBhcmFtIHByb2plY3RTcGVjCisgICAgICogQHBhcmFtIGNjbUFkZHIKICAgICAgKiBAcmV0dXJuCiAgICAgICogQHRocm93cyBTY21FeGNlcHRpb24KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIHJlY29uZmlndXJlUHJvcGVydGllcyggU3RyaW5nIHByb2plY3Rfc3BlYywgU3RyaW5nIENDTV9BRERSICkKKyAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIHJlY29uZmlndXJlUHJvcGVydGllcyggU3RyaW5nIHByb2plY3RTcGVjLCBTdHJpbmcgY2NtQWRkciApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIENvbW1hbmRsaW5lIGNsID0gbmV3IENvbW1hbmRsaW5lKCk7CiAKLSAgICAgICAgY29uZmlndXJlRW52aXJvbm1lbnQoIGNsLCBDQ01fQUREUiApOworICAgICAgICBjb25maWd1cmVFbnZpcm9ubWVudCggY2wsIGNjbUFkZHIgKTsKIAogICAgICAgICBjbC5zZXRFeGVjdXRhYmxlKCBDQ00gKTsKICAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggUkVDT05GSUdVUkVfUFJPUEVSVElFUyApOwogCiAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoICItcmVmcmVzaCIgKTsKLSAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggcHJvamVjdF9zcGVjICk7CisgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIHByb2plY3RTcGVjICk7CiAKICAgICAgICAgcmV0dXJuIGNsOwogCkBAIC00MDAsMTcgKzQwMSwxNyBAQAogICAgIC8qKgogICAgICAqIENyZWF0ZSBjb21tYW5kIGxpbmUgdG8gcmVjb25jaWxlIGEgcHJvamVjdCB3aXRoIHV3YSBvcHRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0gcHJvamVjdF9zcGVjCi0gICAgICogQHBhcmFtIENDTV9BRERSCisgICAgICogQHBhcmFtIHByb2plY3RTcGVjCisgICAgICogQHBhcmFtIGNjbUFkZHIKICAgICAgKiBAcmV0dXJuCiAgICAgICogQHRocm93cyBTY21FeGNlcHRpb24KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIHJlY29uY2lsZVV3YSggU3RyaW5nIHByb2plY3Rfc3BlYywgU3RyaW5nIENDTV9BRERSICkKKyAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIHJlY29uY2lsZVV3YSggU3RyaW5nIHByb2plY3RTcGVjLCBTdHJpbmcgY2NtQWRkciApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIENvbW1hbmRsaW5lIGNsID0gbmV3IENvbW1hbmRsaW5lKCk7CiAKLSAgICAgICAgY29uZmlndXJlRW52aXJvbm1lbnQoIGNsLCBDQ01fQUREUiApOworICAgICAgICBjb25maWd1cmVFbnZpcm9ubWVudCggY2wsIGNjbUFkZHIgKTsKIAogICAgICAgICBjbC5zZXRFeGVjdXRhYmxlKCBDQ00gKTsKICAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggUkVDT05DSUxFICk7CkBAIC00MTgsMTAgKzQxOSwxMCBAQAogICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAiLXIiICk7CiAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoICItdXdhIiApOyAvLyBVcGRhdGUgd2EgZnJvbSBkYXRhYmFzZQogCi0gICAgICAgIGlmICggcHJvamVjdF9zcGVjICE9IG51bGwgKQorICAgICAgICBpZiAoIHByb2plY3RTcGVjICE9IG51bGwgKQogICAgICAgICB7CiAgICAgICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAiLXAiICk7Ci0gICAgICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCBwcm9qZWN0X3NwZWMgKTsKKyAgICAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIHByb2plY3RTcGVjICk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gY2w7CkBAIC00MzEsMTcgKzQzMiwxNyBAQAogICAgIC8qKgogICAgICAqIENyZWF0ZSBjb21tYW5kIGxpbmUgdG8gcmVjb25jaWxlIGEgcHJvamVjdCB3aXRoIHVkYiBvcHRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0gcHJvamVjdF9zcGVjCi0gICAgICogQHBhcmFtIENDTV9BRERSCisgICAgICogQHBhcmFtIHByb2plY3RTcGVjCisgICAgICogQHBhcmFtIGNjbUFkZHIKICAgICAgKiBAcmV0dXJuCiAgICAgICogQHRocm93cyBTY21FeGNlcHRpb24KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIHJlY29uY2lsZVVkYiggU3RyaW5nIHByb2plY3Rfc3BlYywgU3RyaW5nIENDTV9BRERSICkKKyAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIHJlY29uY2lsZVVkYiggU3RyaW5nIHByb2plY3RTcGVjLCBTdHJpbmcgY2NtQWRkciApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIENvbW1hbmRsaW5lIGNsID0gbmV3IENvbW1hbmRsaW5lKCk7CiAKLSAgICAgICAgY29uZmlndXJlRW52aXJvbm1lbnQoIGNsLCBDQ01fQUREUiApOworICAgICAgICBjb25maWd1cmVFbnZpcm9ubWVudCggY2wsIGNjbUFkZHIgKTsKIAogICAgICAgICBjbC5zZXRFeGVjdXRhYmxlKCBDQ00gKTsKICAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggUkVDT05DSUxFICk7CkBAIC00NDksMTAgKzQ1MCwxMCBAQAogICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAiLXIiICk7CiAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoICItdWRiIiApOyAvLyBVcGRhdGUgZGF0YWJhc2UgZnJvbSB3YQogCi0gICAgICAgIGlmICggcHJvamVjdF9zcGVjICE9IG51bGwgKQorICAgICAgICBpZiAoIHByb2plY3RTcGVjICE9IG51bGwgKQogICAgICAgICB7CiAgICAgICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAiLXAiICk7Ci0gICAgICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCBwcm9qZWN0X3NwZWMgKTsKKyAgICAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIHByb2plY3RTcGVjICk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gY2w7CkBAIC00NjQsMTYgKzQ2NSwxNiBAQAogICAgICAqCiAgICAgICogQHBhcmFtIGRpcmVjdG9yeQogICAgICAqIEBwYXJhbSBmb3JtYXQgICAgT3V0cHV0IGZvcm1hdC4KLSAgICAgKiBAcGFyYW0gQ0NNX0FERFIKKyAgICAgKiBAcGFyYW0gY2NtQWRkcgogICAgICAqIEByZXR1cm4KICAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgZGlyKCBGaWxlIGRpcmVjdG9yeSwgU3RyaW5nIGZvcm1hdCwgU3RyaW5nIENDTV9BRERSICkKKyAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIGRpciggRmlsZSBkaXJlY3RvcnksIFN0cmluZyBmb3JtYXQsIFN0cmluZyBjY21BZGRyICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBuZXcgQ29tbWFuZGxpbmUoKTsKIAotICAgICAgICBjb25maWd1cmVFbnZpcm9ubWVudCggY2wsIENDTV9BRERSICk7CisgICAgICAgIGNvbmZpZ3VyZUVudmlyb25tZW50KCBjbCwgY2NtQWRkciApOwogCiAgICAgICAgIHRyeQogICAgICAgICB7CkBAIC01MDMsMTYgKzUwNCwxNiBAQAogICAgICAqIENyZWF0ZSBjb21tYW5kbGluZSB0byBjaGVja291dCBhIGZpbGVzZXQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gZmlsZXMgICAgZmlsZXNldC4KLSAgICAgKiBAcGFyYW0gQ0NNX0FERFIKKyAgICAgKiBAcGFyYW0gY2NtQWRkcgogICAgICAqIEByZXR1cm4gdGhlIGNvbW1hbmQgbGluZS4KICAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgY2hlY2tvdXRGaWxlcyggTGlzdCBmaWxlcywgU3RyaW5nIENDTV9BRERSICkKKyAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIGNoZWNrb3V0RmlsZXMoIExpc3QgZmlsZXMsIFN0cmluZyBjY21BZGRyICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBuZXcgQ29tbWFuZGxpbmUoKTsKIAotICAgICAgICBjb25maWd1cmVFbnZpcm9ubWVudCggY2wsIENDTV9BRERSICk7CisgICAgICAgIGNvbmZpZ3VyZUVudmlyb25tZW50KCBjbCwgY2NtQWRkciApOwogCiAgICAgICAgIGNsLnNldEV4ZWN1dGFibGUoIENDTSApOwogICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCBDTyApOwpAQCAtNTM3LDIwICs1MzgsMjAgQEAKICAgICAgKiBDcmVhdGUgY29tbWFuZGxpbmUgdG8gY2hlY2tvdXQgYSBwcm9qZWN0CiAgICAgICoKICAgICAgKiBAcGFyYW0gZGlyZWN0b3J5ICAgIHRhcmdldCBXQSwgb3IgbnVsbCBpZiB1c2luZyBkZWZhdWx0IGRpcmVjdG9yeQotICAgICAqIEBwYXJhbSBwcm9qZWN0X3NwZWMKKyAgICAgKiBAcGFyYW0gcHJvamVjdFNwZWMKICAgICAgKiBAcGFyYW0gdmVyc2lvbiAgICAgIG5ldyB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0LCBvciBudWxsIGlmIHVzaW5nIGRlZmF1bHQgU3luZXJneQogICAgICAqICAgICAgICAgICAgICAgICAgICAgbWVjYW5pc20KLSAgICAgKiBAcGFyYW0gQ0NNX0FERFIKKyAgICAgKiBAcGFyYW0gY2NtQWRkcgogICAgICAqIEByZXR1cm4KICAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgY2hlY2tvdXRQcm9qZWN0KCBGaWxlIGRpcmVjdG9yeSwgU3RyaW5nIHByb2plY3Rfc3BlYywgU2NtVmVyc2lvbiB2ZXJzaW9uLCBTdHJpbmcgcHVycG9zZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlbGVhc2UsIFN0cmluZyBDQ01fQUREUiApCisgICAgcHVibGljIHN0YXRpYyBDb21tYW5kbGluZSBjaGVja291dFByb2plY3QoIEZpbGUgZGlyZWN0b3J5LCBTdHJpbmcgcHJvamVjdFNwZWMsIFNjbVZlcnNpb24gdmVyc2lvbiwgU3RyaW5nIHB1cnBvc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZWxlYXNlLCBTdHJpbmcgY2NtQWRkciApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIENvbW1hbmRsaW5lIGNsID0gbmV3IENvbW1hbmRsaW5lKCk7CiAKLSAgICAgICAgY29uZmlndXJlRW52aXJvbm1lbnQoIGNsLCBDQ01fQUREUiApOworICAgICAgICBjb25maWd1cmVFbnZpcm9ubWVudCggY2wsIGNjbUFkZHIgKTsKIAogICAgICAgICBjbC5zZXRFeGVjdXRhYmxlKCBDQ00gKTsKICAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggQ08gKTsKQEAgLTU4OCw3ICs1ODksNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoICItcCIgKTsKLSAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggcHJvamVjdF9zcGVjICk7CisgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIHByb2plY3RTcGVjICk7CiAKICAgICAgICAgcmV0dXJuIGNsOwogICAgIH0KQEAgLTU5NiwxOCArNTk3LDE4IEBACiAgICAgLyoqCiAgICAgICogQ3JlYXRlIGNvbW1hbmRsaW5lIHRvIGNoZWNraW4gYSBwcm9qZWN0CiAgICAgICoKLSAgICAgKiBAcGFyYW0gcHJvamVjdF9zcGVjCisgICAgICogQHBhcmFtIHByb2plY3RTcGVjCiAgICAgICogQHBhcmFtIGNvbW1lbnQKLSAgICAgKiBAcGFyYW0gQ0NNX0FERFIKKyAgICAgKiBAcGFyYW0gY2NtQWRkcgogICAgICAqIEByZXR1cm4KICAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgY2hlY2tpblByb2plY3QoIFN0cmluZyBwcm9qZWN0X3NwZWMsIFN0cmluZyBjb21tZW50LCBTdHJpbmcgQ0NNX0FERFIgKQorICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgY2hlY2tpblByb2plY3QoIFN0cmluZyBwcm9qZWN0U3BlYywgU3RyaW5nIGNvbW1lbnQsIFN0cmluZyBjY21BZGRyICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBuZXcgQ29tbWFuZGxpbmUoKTsKIAotICAgICAgICBjb25maWd1cmVFbnZpcm9ubWVudCggY2wsIENDTV9BRERSICk7CisgICAgICAgIGNvbmZpZ3VyZUVudmlyb25tZW50KCBjbCwgY2NtQWRkciApOwogCiAgICAgICAgIGNsLnNldEV4ZWN1dGFibGUoIENDTSApOwogICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCBDSSApOwpAQCAtNjE3LDcgKzYxOCw3IEBACiAgICAgICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCBjb21tZW50ICk7CiAgICAgICAgIH0KICAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggIi1wIiApOwotICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCBwcm9qZWN0X3NwZWMgKTsKKyAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggcHJvamVjdFNwZWMgKTsKIAogICAgICAgICByZXR1cm4gY2w7CiAgICAgfQpAQCAtNjI3LDE2ICs2MjgsMTYgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSBmaWxlcyAgICBmaWxlc2V0LgogICAgICAqIEBwYXJhbSBjb21tZW50Ci0gICAgICogQHBhcmFtIENDTV9BRERSCisgICAgICogQHBhcmFtIGNjbUFkZHIKICAgICAgKiBAcmV0dXJuCiAgICAgICogQHRocm93cyBTY21FeGNlcHRpb24KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIGNoZWNraW5GaWxlcyggTGlzdCBmaWxlcywgU3RyaW5nIGNvbW1lbnQsIFN0cmluZyBDQ01fQUREUiApCisgICAgcHVibGljIHN0YXRpYyBDb21tYW5kbGluZSBjaGVja2luRmlsZXMoIExpc3QgZmlsZXMsIFN0cmluZyBjb21tZW50LCBTdHJpbmcgY2NtQWRkciApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIENvbW1hbmRsaW5lIGNsID0gbmV3IENvbW1hbmRsaW5lKCk7CiAKLSAgICAgICAgY29uZmlndXJlRW52aXJvbm1lbnQoIGNsLCBDQ01fQUREUiApOworICAgICAgICBjb25maWd1cmVFbnZpcm9ubWVudCggY2wsIGNjbUFkZHIgKTsKIAogICAgICAgICBjbC5zZXRFeGVjdXRhYmxlKCBDQ00gKTsKICAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggQ0kgKTsKQEAgLTY2NywyMyArNjY4LDIzIEBACiAgICAgLyoqCiAgICAgICogQ3JlYXRlIGNvbW1hbmRsaW5lIHRvIHN5bmNocm9uaXplIGEgcHJvamVjdAogICAgICAqCi0gICAgICogQHBhcmFtIHByb2plY3Rfc3BlYwotICAgICAqIEBwYXJhbSBDQ01fQUREUgorICAgICAqIEBwYXJhbSBwcm9qZWN0U3BlYworICAgICAqIEBwYXJhbSBjY21BZGRyCiAgICAgICogQHJldHVybgogICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBDb21tYW5kbGluZSBzeW5jaHJvbml6ZSggU3RyaW5nIHByb2plY3Rfc3BlYywgU3RyaW5nIENDTV9BRERSICkKKyAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIHN5bmNocm9uaXplKCBTdHJpbmcgcHJvamVjdFNwZWMsIFN0cmluZyBjY21BZGRyICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBuZXcgQ29tbWFuZGxpbmUoKTsKIAotICAgICAgICBjb25maWd1cmVFbnZpcm9ubWVudCggY2wsIENDTV9BRERSICk7CisgICAgICAgIGNvbmZpZ3VyZUVudmlyb25tZW50KCBjbCwgY2NtQWRkciApOwogCiAgICAgICAgIGNsLnNldEV4ZWN1dGFibGUoIENDTSApOwogICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCBTWU5DICk7CiAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoICItciIgKTsgLy8gUmVjdXJzaXZlCiAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoICItcCIgKTsKLSAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggcHJvamVjdF9zcGVjICk7CisgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIHByb2plY3RTcGVjICk7CiAKICAgICAgICAgcmV0dXJuIGNsOwogICAgIH0KQEAgLTY5MSwyMiArNjkyLDIyIEBACiAgICAgLyoqCiAgICAgICogQ3JlYXRlIGNvbW1hbmRsaW5lIHRvIGdldCB3b3JrYXJlYSBpbmZvcm1hdGlvbnMgZm9yIGEgZ2l2ZW4gcHJvamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbSBwcm9qZWN0X3NwZWMKLSAgICAgKiBAcGFyYW0gQ0NNX0FERFIKKyAgICAgKiBAcGFyYW0gcHJvamVjdFNwZWMKKyAgICAgKiBAcGFyYW0gY2NtQWRkcgogICAgICAqIEByZXR1cm4KICAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgc2hvd1dvcmtBcmVhKCBTdHJpbmcgcHJvamVjdF9zcGVjLCBTdHJpbmcgQ0NNX0FERFIgKQorICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgc2hvd1dvcmtBcmVhKCBTdHJpbmcgcHJvamVjdFNwZWMsIFN0cmluZyBjY21BZGRyICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBuZXcgQ29tbWFuZGxpbmUoKTsKIAotICAgICAgICBjb25maWd1cmVFbnZpcm9ubWVudCggY2wsIENDTV9BRERSICk7CisgICAgICAgIGNvbmZpZ3VyZUVudmlyb25tZW50KCBjbCwgY2NtQWRkciApOwogCiAgICAgICAgIGNsLnNldEV4ZWN1dGFibGUoIENDTSApOwogICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCBXQSApOwogICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAiLXNob3ciICk7Ci0gICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIHByb2plY3Rfc3BlYyApOworICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCBwcm9qZWN0U3BlYyApOwogCiAgICAgICAgIHJldHVybiBjbDsKICAgICB9CkBAIC03MTQsMTYgKzcxNSwxNiBAQAogICAgIC8qKgogICAgICAqIENyZWF0ZSBjb21tYW5kbGluZSB0byBzdG9wIGEgU3luZXJneSBzZXNzaW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0gQ0NNX0FERFIKKyAgICAgKiBAcGFyYW0gY2NtQWRkcgogICAgICAqIEByZXR1cm4KICAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgc3RvcCggU3RyaW5nIENDTV9BRERSICkKKyAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIHN0b3AoIFN0cmluZyBjY21BZGRyICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBuZXcgQ29tbWFuZGxpbmUoKTsKIAotICAgICAgICBjb25maWd1cmVFbnZpcm9ubWVudCggY2wsIENDTV9BRERSICk7CisgICAgICAgIGNvbmZpZ3VyZUVudmlyb25tZW50KCBjbCwgY2NtQWRkciApOwogCiAgICAgICAgIGNsLnNldEV4ZWN1dGFibGUoIENDTSApOwogICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCBTVE9QICk7CkBAIC03MzUsMTAgKzczNiwxMCBAQAogICAgICAqIENvbmZpZ3VyZSBhIGNvbW1hbmRsaW5lIHRvIHVzZSBlbnZpcm9uZW1lbnQgdmFyaWFibGVzICgkUEFUSCkKICAgICAgKgogICAgICAqIEBwYXJhbSBjbAotICAgICAqIEBwYXJhbSBDQ01fQUREUgorICAgICAqIEBwYXJhbSBjY21BZGRyCiAgICAgICogQHRocm93cyBTY21FeGNlcHRpb24KICAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNvbmZpZ3VyZUVudmlyb25tZW50KCBDb21tYW5kbGluZSBjbCwgU3RyaW5nIENDTV9BRERSICkKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNvbmZpZ3VyZUVudmlyb25tZW50KCBDb21tYW5kbGluZSBjbCwgU3RyaW5nIGNjbUFkZHIgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICAvLyBXZSBuZWVkIFBBVEggdG8gYmUgc2V0IGZvciB1c2luZyBDQ00KQEAgLTc1MCw3ICs3NTEsNyBAQAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFN0cmluZyBrZXkgPSAoU3RyaW5nKSBpLm5leHQoKTsKIAotICAgICAgICAgICAgICAgIGlmICggIWtleS50b1VwcGVyQ2FzZSgpLmVxdWFscyggIkNDTV9BRERSIiApICkKKyAgICAgICAgICAgICAgICBpZiAoICFrZXkuZXF1YWxzSWdub3JlQ2FzZSggIkNDTV9BRERSIiApICkKICAgICAgICAgICAgICAgICB7CiAKICAgICAgICAgICAgICAgICAgICAgY2wuYWRkRW52aXJvbm1lbnQoIGtleSwgZW52VmFycy5nZXRQcm9wZXJ0eSgga2V5ICkgKTsKQEAgLTc2Myw3ICs3NjQsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFNjbUV4Y2VwdGlvbiggIkZhaWwgdG8gYWRkIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUuIiwgZTEgKTsKIAogICAgICAgICB9Ci0gICAgICAgIGNsLmFkZEVudmlyb25tZW50KCAiQ0NNX0FERFIiLCBDQ01fQUREUiApOworICAgICAgICBjbC5hZGRFbnZpcm9ubWVudCggIkNDTV9BRERSIiwgY2NtQWRkciApOwogCiAgICAgfQogCkBAIC04MDUsMTIgKzgwNiwxMiBAQAogICAgICAqIEByZXR1cm4KICAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgZGVsaW1pdGVyKCBTdHJpbmcgQ0NNX0FERFIgKQorICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgZGVsaW1pdGVyKCBTdHJpbmcgY2NtQWRkciApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIENvbW1hbmRsaW5lIGNsID0gbmV3IENvbW1hbmRsaW5lKCk7CiAKLSAgICAgICAgY29uZmlndXJlRW52aXJvbm1lbnQoIGNsLCBDQ01fQUREUiApOworICAgICAgICBjb25maWd1cmVFbnZpcm9ubWVudCggY2wsIGNjbUFkZHIgKTsKIAogICAgICAgICBjbC5zZXRFeGVjdXRhYmxlKCBDQ00gKTsKICAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggREVMSU1JVEVSICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS91dGlsL1N5bmVyZ3lSb2xlLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS91dGlsL1N5bmVyZ3lSb2xlLmphdmEKaW5kZXggNDViM2VjOS4uNzMyYjM2NSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvdXRpbC9TeW5lcmd5Um9sZS5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L3V0aWwvU3luZXJneVJvbGUuamF2YQpAQCAtMjMsNiArMjMsNyBAQAogICogVGhpcyBjbGFzcyBjb250YWlucyB0aGUgZGlmZmVyZW50IFN5bmVyZ3kgcm9sZXMgYXZhaWxhYmxlLgogICoKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOmp1bGllbi5oZW5yeUBjYXBnZW1pbmkuY29tIj5KdWxpZW4gSGVucnk8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBTeW5lcmd5Um9sZQogewpAQCAtMzgsNiArMzksNyBAQAogICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiB2YWx1ZTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L3V0aWwvU3luZXJneVRhc2suamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L3V0aWwvU3luZXJneVRhc2suamF2YQppbmRleCAzZDVkNzFhLi4yN2ZiNmZlIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS91dGlsL1N5bmVyZ3lUYXNrLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvdXRpbC9TeW5lcmd5VGFzay5qYXZhCkBAIC0yNSw2ICsyNSw3IEBACiAgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHRoZSBkaWZmZXJlbnQgU3luZXJneSByb2xlcyBhdmFpbGFibGUuCiAgKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86anVsaWVuLmhlbnJ5QGNhcGdlbWluaS5jb20iPkp1bGllbiBIZW5yeTwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIFN5bmVyZ3lUYXNrCiB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS91dGlsL1N5bmVyZ3lVdGlsLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3luZXJneS91dGlsL1N5bmVyZ3lVdGlsLmphdmEKaW5kZXggNmI5YzUyNC4uZjkwZTlkMiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N5bmVyZ3kvdXRpbC9TeW5lcmd5VXRpbC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zeW5lcmd5L3V0aWwvU3luZXJneVV0aWwuamF2YQpAQCAtNDYsNiArNDYsNyBAQAogICogVGhpcyBjbGFzcyBjb250YWlucyBmdW5jdGlvbmFsIG1ldGhvZHNmb3IgU3luZXJneS4KICAqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpqdWxpZW4uaGVucnlAY2FwZ2VtaW5pLmNvbSI+SnVsaWVuIEhlbnJ5PC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgU3luZXJneVV0aWwKIHsKQEAgLTg4LDE4ICs4OSwxOSBAQAogICAgICAqIEdldCBhIHdvcmtpbmcgcHJvamVjdCB3aG9zZSBwcmVkZWNlc3NvciBpcyBnaXZlbi4KICAgICAgKgogICAgICAqIEBwYXJhbSBsb2dnZXIgICAgICAgYSBsb2dnZXIuCi0gICAgICogQHBhcmFtIHByb2plY3Rfc3BlYyBwcmVkZWNlc3NvciAocHJlcCBwcm9qZWN0KQorICAgICAqIEBwYXJhbSBwcm9qZWN0U3BlYyBwcmVkZWNlc3NvciAocHJlcCBwcm9qZWN0KQogICAgICAqIEBwYXJhbSB1c2VybmFtZSAgICAgb3duZXIgb2Ygd29ya2luZyBwcm9qZWN0CiAgICAgICogQHBhcmFtIGNjbUFkZHIgICAgICBTeW5lcmd5IHNlc3Npb24gSUQuCi0gICAgICogQHJldHVybiBwcm9qZWN0X3NwZWMgb2YgdGhlIHdvcmtpbmcgY2hlY2tvdXQsIG9yIG51bGwgaWYgbm9uZQorICAgICAqIEByZXR1cm4gcHJvamVjdFNwZWMgb2YgdGhlIHdvcmtpbmcgY2hlY2tvdXQsIG9yIG51bGwgaWYgbm9uZQogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdvcmtpbmdQcm9qZWN0KCBTY21Mb2dnZXIgbG9nZ2VyLCBTdHJpbmcgcHJvamVjdF9zcGVjLCBTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBjY21BZGRyICkKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXb3JraW5nUHJvamVjdCggU2NtTG9nZ2VyIGxvZ2dlciwgU3RyaW5nIHByb2plY3RTcGVjLCBTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBjY21BZGRyICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgbG9nZ2VyLmRlYnVnKCAiU3luZXJneSA6IEVudGVyaW5nIGdldFdvcmtpbmdQcm9qZWN0IG1ldGhvZCIgKTsKIAotICAgICAgICBTdHJpbmcgcXVlcnkgPSAib3duZXI9JyIgKyB1c2VybmFtZSArICInIGFuZCBzdGF0dXM9J3dvcmtpbmcnIGFuZCB0eXBlPSdwcm9qZWN0JyBhbmQgaGFzX3ByZWRlY2Vzc29yKCciICsKLSAgICAgICAgICAgIHByb2plY3Rfc3BlYyArICI6cHJvamVjdDoxJykiOworICAgICAgICBTdHJpbmcgcXVlcnkgPQorICAgICAgICAgICAgIm93bmVyPSciICsgdXNlcm5hbWUgKyAiJyBhbmQgc3RhdHVzPSd3b3JraW5nJyBhbmQgdHlwZT0ncHJvamVjdCcgYW5kIGhhc19wcmVkZWNlc3NvcignIiArIHByb2plY3RTcGVjCisgICAgICAgICAgICAgICAgKyAiOnByb2plY3Q6MScpIjsKIAogICAgICAgICBDb21tYW5kbGluZSBjbCA9IFN5bmVyZ3lDQ00ucXVlcnkoIHF1ZXJ5LCAiJWRpc3BsYXluYW1lIiwgY2NtQWRkciApOwogCkBAIC0xMTcsMTcgKzExOSwxNyBAQAogICAgICAqIEdldCB3b3JraW5nIGZpbGUocykgaW4gYSBnaXZlbiBwcm9qZWN0LgogICAgICAqCiAgICAgICogQHBhcmFtIGxvZ2dlciAgICAgICBhIGxvZ2dlci4KLSAgICAgKiBAcGFyYW0gcHJvamVjdF9zcGVjIChwcm9qZWN0KQorICAgICAqIEBwYXJhbSBwcm9qZWN0U3BlYyAocHJvamVjdCkKICAgICAgKiBAcGFyYW0gcmVsZWFzZSAgICAgIHJlbGVhc2UKICAgICAgKiBAcGFyYW0gY2NtQWRkciAgICAgIFN5bmVyZ3kgc2Vzc2lvbiBJRC4KICAgICAgKiBAcmV0dXJuIGxpc3Qgb2Ygd29ya2luZyBmaWxlcy4KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIExpc3QgZ2V0V29ya2luZ0ZpbGVzKCBTY21Mb2dnZXIgbG9nZ2VyLCBTdHJpbmcgcHJvamVjdF9zcGVjLCBTdHJpbmcgcmVsZWFzZSwgU3RyaW5nIGNjbUFkZHIgKQorICAgIHB1YmxpYyBzdGF0aWMgTGlzdCBnZXRXb3JraW5nRmlsZXMoIFNjbUxvZ2dlciBsb2dnZXIsIFN0cmluZyBwcm9qZWN0U3BlYywgU3RyaW5nIHJlbGVhc2UsIFN0cmluZyBjY21BZGRyICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgbG9nZ2VyLmRlYnVnKCAiU3luZXJneSA6IEVudGVyaW5nIGdldFdvcmtpbmdGaWxlcyBtZXRob2QiICk7CiAKLSAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gInN0YXR1cz0nd29ya2luZycgYW5kIHJlbGVhc2U9JyIgKyByZWxlYXNlICsgIicgYW5kIGlzX21lbWJlcl9vZignIiArIHByb2plY3Rfc3BlYyArICInKSI7CisgICAgICAgIFN0cmluZyBxdWVyeSA9ICJzdGF0dXM9J3dvcmtpbmcnIGFuZCByZWxlYXNlPSciICsgcmVsZWFzZSArICInIGFuZCBpc19tZW1iZXJfb2YoJyIgKyBwcm9qZWN0U3BlYyArICInKSI7CiAKICAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBTeW5lcmd5Q0NNLnF1ZXJ5KCBxdWVyeSwgU3luZXJneUdldFdvcmtpbmdGaWxlc0NvbnN1bWVyLk9VVFBVVF9GT1JNQVQsIGNjbUFkZHIgKTsKIApAQCAtMTc1LDcgKzE3Nyw3IEBACiAgICAgICogc3RhcnREYXRlIGFuZCBiZWZvcmUgZW5kRGF0ZS4KICAgICAgKgogICAgICAqIEBwYXJhbSBsb2dnZXIgICAgICBhIGxvZ2dlci4KLSAgICAgKiBAcGFyYW0gcHJvamVjdFNwZWMgcHJvamVjdF9zcGVjLgorICAgICAqIEBwYXJhbSBwcm9qZWN0U3BlYyBwcm9qZWN0U3BlYy4KICAgICAgKiBAcGFyYW0gc3RhcnREYXRlICAgc3RhcnQgZGF0ZS4KICAgICAgKiBAcGFyYW0gZW5kRGF0ZSAgICAgZW5kIGRhdGUuCiAgICAgICogQHBhcmFtIGNjbUFkZHIgICAgIFN5bmVyZ3kgc2Vzc2lvbiBJRC4KQEAgLTIxOSw3ICsyMjEsNyBAQAogICAgICAqIENyZWF0ZSBhIGJhc2VsaW5lLgogICAgICAqCiAgICAgICogQHBhcmFtIGxvZ2dlciAgICAgIGEgbG9nZ2VyLgotICAgICAqIEBwYXJhbSBwcm9qZWN0U3BlYyB0aGUgcHJvamVjdF9zcGVjLgorICAgICAqIEBwYXJhbSBwcm9qZWN0U3BlYyB0aGUgcHJvamVjdFNwZWMuCiAgICAgICogQHBhcmFtIG5hbWUgICAgICAgIG5hbWUgb2YgdGhlIGJhc2VsaW5lLgogICAgICAqIEBwYXJhbSByZWxlYXNlICAgICB0aGUgcmVsZWFzZS4KICAgICAgKiBAcGFyYW0gcHVycG9zZSAgICAgdGhlIHB1cnBvc2UuCkBAIC0zNjksMTUgKzM3MSwxNSBAQAogICAgICAqIFJlY29uZmlndXJlIGEgcHJvamVjdC4KICAgICAgKgogICAgICAqIEBwYXJhbSBsb2dnZXIgICAgICAgYSBsb2dnZXIuCi0gICAgICogQHBhcmFtIHByb2plY3Rfc3BlYyBwcm9qZWN0X3NwZWMgKGkuZS4gbXlQcm9qZWN0fjEpLgorICAgICAqIEBwYXJhbSBwcm9qZWN0U3BlYyBwcm9qZWN0U3BlYyAoaS5lLiBteVByb2plY3R+MSkuCiAgICAgICogQHBhcmFtIGNjbUFkZHIgICAgICB1c2VkIHRvIHJ1biBpbiBtdWx0aS1zZXNzaW9uLgogICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHJlY29uZmlndXJlKCBTY21Mb2dnZXIgbG9nZ2VyLCBTdHJpbmcgcHJvamVjdF9zcGVjLCBTdHJpbmcgY2NtQWRkciApCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHJlY29uZmlndXJlKCBTY21Mb2dnZXIgbG9nZ2VyLCBTdHJpbmcgcHJvamVjdFNwZWMsIFN0cmluZyBjY21BZGRyICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgbG9nZ2VyLmRlYnVnKCAiU3luZXJneSA6IEVudGVyaW5nIHJlY29uZmlndXJlIG1ldGhvZCIgKTsKLSAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBTeW5lcmd5Q0NNLnJlY29uZmlndXJlKCBwcm9qZWN0X3NwZWMsIGNjbUFkZHIgKTsKKyAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBTeW5lcmd5Q0NNLnJlY29uZmlndXJlKCBwcm9qZWN0U3BlYywgY2NtQWRkciApOwogCiAgICAgICAgIENvbW1hbmRMaW5lVXRpbHMuU3RyaW5nU3RyZWFtQ29uc3VtZXIgc3RkZXJyID0gbmV3IENvbW1hbmRMaW5lVXRpbHMuU3RyaW5nU3RyZWFtQ29uc3VtZXIoKTsKICAgICAgICAgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lciBzdGRvdXQgPSBuZXcgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lcigpOwpAQCAtMzg5LDE1ICszOTEsMTUgQEAKICAgICAgKiBSZWNvbmZpZ3VyZSBwcm9wZXJ0aWVzIG9mIGEgcHJvamVjdC4KICAgICAgKgogICAgICAqIEBwYXJhbSBsb2dnZXIgICAgICAgYSBsb2dnZXIuCi0gICAgICogQHBhcmFtIHByb2plY3Rfc3BlYyBwcm9qZWN0X3NwZWMgKGkuZS4gbXlQcm9qZWN0fjEpLgorICAgICAqIEBwYXJhbSBwcm9qZWN0U3BlYyBwcm9qZWN0U3BlYyAoaS5lLiBteVByb2plY3R+MSkuCiAgICAgICogQHBhcmFtIGNjbUFkZHIgICAgICB1c2VkIHRvIHJ1biBpbiBtdWx0aS1zZXNzaW9uLgogICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHJlY29uZmlndXJlUHJvcGVydGllcyggU2NtTG9nZ2VyIGxvZ2dlciwgU3RyaW5nIHByb2plY3Rfc3BlYywgU3RyaW5nIGNjbUFkZHIgKQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZWNvbmZpZ3VyZVByb3BlcnRpZXMoIFNjbUxvZ2dlciBsb2dnZXIsIFN0cmluZyBwcm9qZWN0U3BlYywgU3RyaW5nIGNjbUFkZHIgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICBsb2dnZXIuZGVidWcoICJTeW5lcmd5IDogRW50ZXJpbmcgcmVjb25maWd1cmVQcm9wZXJ0aWVzIG1ldGhvZCIgKTsKLSAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBTeW5lcmd5Q0NNLnJlY29uZmlndXJlUHJvcGVydGllcyggcHJvamVjdF9zcGVjLCBjY21BZGRyICk7CisgICAgICAgIENvbW1hbmRsaW5lIGNsID0gU3luZXJneUNDTS5yZWNvbmZpZ3VyZVByb3BlcnRpZXMoIHByb2plY3RTcGVjLCBjY21BZGRyICk7CiAKICAgICAgICAgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lciBzdGRlcnIgPSBuZXcgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lcigpOwogICAgICAgICBDb21tYW5kTGluZVV0aWxzLlN0cmluZ1N0cmVhbUNvbnN1bWVyIHN0ZG91dCA9IG5ldyBDb21tYW5kTGluZVV0aWxzLlN0cmluZ1N0cmVhbUNvbnN1bWVyKCk7CkBAIC00MDksMTUgKzQxMSwxNSBAQAogICAgICAqIFJlY29uY2lsZSBhIHByb2plY3Qgd2l0aCAtdXdhIG9wdGlvbi4KICAgICAgKgogICAgICAqIEBwYXJhbSBsb2dnZXIgICAgICAgYSBsb2dnZXIuCi0gICAgICogQHBhcmFtIHByb2plY3Rfc3BlYyBwcm9qZWN0X3NwZWMgKGkuZS4gbXlQcm9qZWN0fjEpLgorICAgICAqIEBwYXJhbSBwcm9qZWN0U3BlYyBwcm9qZWN0U3BlYyAoaS5lLiBteVByb2plY3R+MSkuCiAgICAgICogQHBhcmFtIGNjbUFkZHIgICAgICB1c2VkIHRvIHJ1biBpbiBtdWx0aS1zZXNzaW9uLgogICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHJlY29uY2lsZVV3YSggU2NtTG9nZ2VyIGxvZ2dlciwgU3RyaW5nIHByb2plY3Rfc3BlYywgU3RyaW5nIGNjbUFkZHIgKQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZWNvbmNpbGVVd2EoIFNjbUxvZ2dlciBsb2dnZXIsIFN0cmluZyBwcm9qZWN0U3BlYywgU3RyaW5nIGNjbUFkZHIgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICBsb2dnZXIuZGVidWcoICJTeW5lcmd5IDogRW50ZXJpbmcgcmVjb25jaWxlVXdhIG1ldGhvZCIgKTsKLSAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBTeW5lcmd5Q0NNLnJlY29uY2lsZVV3YSggcHJvamVjdF9zcGVjLCBjY21BZGRyICk7CisgICAgICAgIENvbW1hbmRsaW5lIGNsID0gU3luZXJneUNDTS5yZWNvbmNpbGVVd2EoIHByb2plY3RTcGVjLCBjY21BZGRyICk7CiAKICAgICAgICAgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lciBzdGRlcnIgPSBuZXcgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lcigpOwogICAgICAgICBDb21tYW5kTGluZVV0aWxzLlN0cmluZ1N0cmVhbUNvbnN1bWVyIHN0ZG91dCA9IG5ldyBDb21tYW5kTGluZVV0aWxzLlN0cmluZ1N0cmVhbUNvbnN1bWVyKCk7CkBAIC00MjksMTUgKzQzMSwxNSBAQAogICAgICAqIFJlY29uY2lsZSBhIHByb2plY3Qgd2l0aCAtdWRiIG9wdGlvbi4KICAgICAgKgogICAgICAqIEBwYXJhbSBsb2dnZXIgICAgICAgYSBsb2dnZXIuCi0gICAgICogQHBhcmFtIHByb2plY3Rfc3BlYyBwcm9qZWN0X3NwZWMgKGkuZS4gbXlQcm9qZWN0fjEpLgorICAgICAqIEBwYXJhbSBwcm9qZWN0U3BlYyBwcm9qZWN0U3BlYyAoaS5lLiBteVByb2plY3R+MSkuCiAgICAgICogQHBhcmFtIGNjbUFkZHIgICAgICB1c2VkIHRvIHJ1biBpbiBtdWx0aS1zZXNzaW9uLgogICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHJlY29uY2lsZVVkYiggU2NtTG9nZ2VyIGxvZ2dlciwgU3RyaW5nIHByb2plY3Rfc3BlYywgU3RyaW5nIGNjbUFkZHIgKQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZWNvbmNpbGVVZGIoIFNjbUxvZ2dlciBsb2dnZXIsIFN0cmluZyBwcm9qZWN0U3BlYywgU3RyaW5nIGNjbUFkZHIgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICBsb2dnZXIuZGVidWcoICJTeW5lcmd5IDogRW50ZXJpbmcgcmVjb25jaWxlVWRiIG1ldGhvZCIgKTsKLSAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBTeW5lcmd5Q0NNLnJlY29uY2lsZVVkYiggcHJvamVjdF9zcGVjLCBjY21BZGRyICk7CisgICAgICAgIENvbW1hbmRsaW5lIGNsID0gU3luZXJneUNDTS5yZWNvbmNpbGVVZGIoIHByb2plY3RTcGVjLCBjY21BZGRyICk7CiAKICAgICAgICAgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lciBzdGRlcnIgPSBuZXcgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lcigpOwogICAgICAgICBDb21tYW5kTGluZVV0aWxzLlN0cmluZ1N0cmVhbUNvbnN1bWVyIHN0ZG91dCA9IG5ldyBDb21tYW5kTGluZVV0aWxzLlN0cmluZ1N0cmVhbUNvbnN1bWVyKCk7CkBAIC00NzEsMTggKzQ3MywxOCBAQAogICAgICAqCiAgICAgICogQHBhcmFtIGxvZ2dlciAgICAgICBhIGxvZ2dlci4KICAgICAgKiBAcGFyYW0gZGlyZWN0b3J5ICAgIG5ldyBwcm9qZWN0IHdvcmsgYXJlYSwgb3IgbnVsbCBpZiB5b3Ugd2FudCB0byB1c2UgZGVmYXVsdCB3YS4KLSAgICAgKiBAcGFyYW0gcHJvamVjdF9zcGVjIHByb2plY3Rfc3BlYyAoaS5lLiBteVByb2plY3R+MSkuCisgICAgICogQHBhcmFtIHByb2plY3RTcGVjIHByb2plY3RTcGVjIChpLmUuIG15UHJvamVjdH4xKS4KICAgICAgKiBAcGFyYW0gY2NtQWRkciAgICAgIHVzZWQgdG8gcnVuIGluIG11bHRpLXNlc3Npb24uCiAgICAgICogQHJldHVybiBjaGVja291dCBkaXJlY3RvcnkgKGRpcmVjdG9yeSArIG5ldyBwcm9qZWN0IHNwZWMpCiAgICAgICogQHRocm93cyBTY21FeGNlcHRpb24KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgY2hlY2tvdXRQcm9qZWN0KCBTY21Mb2dnZXIgbG9nZ2VyLCBGaWxlIGRpcmVjdG9yeSwgU3RyaW5nIHByb2plY3Rfc3BlYywgU2NtVmVyc2lvbiB2ZXJzaW9uLAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBjaGVja291dFByb2plY3QoIFNjbUxvZ2dlciBsb2dnZXIsIEZpbGUgZGlyZWN0b3J5LCBTdHJpbmcgcHJvamVjdFNwZWMsIFNjbVZlcnNpb24gdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHVycG9zZSwgU3RyaW5nIHJlbGVhc2UsIFN0cmluZyBjY21BZGRyICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgbG9nZ2VyLmRlYnVnKCAiU3luZXJneSA6IEVudGVyaW5nIGNoZWNrb3V0UHJvamVjdCBwcm9qZWN0IG1ldGhvZCIgKTsKIAotICAgICAgICBDb21tYW5kbGluZSBjbCA9IFN5bmVyZ3lDQ00uY2hlY2tvdXRQcm9qZWN0KCBkaXJlY3RvcnksIHByb2plY3Rfc3BlYywgdmVyc2lvbiwgcHVycG9zZSwgcmVsZWFzZSwgY2NtQWRkciApOworICAgICAgICBDb21tYW5kbGluZSBjbCA9IFN5bmVyZ3lDQ00uY2hlY2tvdXRQcm9qZWN0KCBkaXJlY3RvcnksIHByb2plY3RTcGVjLCB2ZXJzaW9uLCBwdXJwb3NlLCByZWxlYXNlLCBjY21BZGRyICk7CiAKICAgICAgICAgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lciBzdGRlcnIgPSBuZXcgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lcigpOwogICAgICAgICBDb21tYW5kTGluZVV0aWxzLlN0cmluZ1N0cmVhbUNvbnN1bWVyIHN0ZG91dCA9IG5ldyBDb21tYW5kTGluZVV0aWxzLlN0cmluZ1N0cmVhbUNvbnN1bWVyKCk7CkBAIC00OTUsMTggKzQ5NywxOCBAQAogICAgICAqIENoZWNraW4gYSBnaXZlbiBwcm9qZWN0LgogICAgICAqCiAgICAgICogQHBhcmFtIGxvZ2dlciAgICAgICBhIGxvZ2dlci4KLSAgICAgKiBAcGFyYW0gcHJvamVjdF9zcGVjIHByb2plY3Rfc3BlYyAoaS5lLiBteVByb2plY3R+MSkuCisgICAgICogQHBhcmFtIHByb2plY3RTcGVjIHByb2plY3RTcGVjIChpLmUuIG15UHJvamVjdH4xKS4KICAgICAgKiBAcGFyYW0gY29tbWVudCAgICAgIG1lc3NhZ2UuCiAgICAgICogQHBhcmFtIGNjbUFkZHIgICAgICB1c2VkIHRvIHJ1biBpbiBtdWx0aS1zZXNzaW9uLgogICAgICAqIEByZXR1cm4gY2hlY2tvdXQgZGlyZWN0b3J5IChkaXJlY3RvcnkgKyBuZXcgcHJvamVjdCBzcGVjKQogICAgICAqIEB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGNoZWNraW5Qcm9qZWN0KCBTY21Mb2dnZXIgbG9nZ2VyLCBTdHJpbmcgcHJvamVjdF9zcGVjLCBTdHJpbmcgY29tbWVudCwgU3RyaW5nIGNjbUFkZHIgKQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBjaGVja2luUHJvamVjdCggU2NtTG9nZ2VyIGxvZ2dlciwgU3RyaW5nIHByb2plY3RTcGVjLCBTdHJpbmcgY29tbWVudCwgU3RyaW5nIGNjbUFkZHIgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICBsb2dnZXIuZGVidWcoICJTeW5lcmd5IDogRW50ZXJpbmcgY2hlY2tpblByb2plY3QgcHJvamVjdCBtZXRob2QiICk7CiAKLSAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBTeW5lcmd5Q0NNLmNoZWNraW5Qcm9qZWN0KCBwcm9qZWN0X3NwZWMsIGNvbW1lbnQsIGNjbUFkZHIgKTsKKyAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBTeW5lcmd5Q0NNLmNoZWNraW5Qcm9qZWN0KCBwcm9qZWN0U3BlYywgY29tbWVudCwgY2NtQWRkciApOwogCiAgICAgICAgIENvbW1hbmRMaW5lVXRpbHMuU3RyaW5nU3RyZWFtQ29uc3VtZXIgc3RkZXJyID0gbmV3IENvbW1hbmRMaW5lVXRpbHMuU3RyaW5nU3RyZWFtQ29uc3VtZXIoKTsKICAgICAgICAgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lciBzdGRvdXQgPSBuZXcgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lcigpOwpAQCAtNTQxLDE2ICs1NDMsMTYgQEAKICAgICAgKiBTeW5jaHJvbml6ZSBhIGdpdmVuIHByb2plY3QuCiAgICAgICoKICAgICAgKiBAcGFyYW0gbG9nZ2VyICAgICAgIGEgbG9nZ2VyLgotICAgICAqIEBwYXJhbSBwcm9qZWN0X3NwZWMgcHJvamVjdF9zcGVjIChpLmUuIG15UHJvamVjdH4xKS4KKyAgICAgKiBAcGFyYW0gcHJvamVjdFNwZWMgcHJvamVjdFNwZWMgKGkuZS4gbXlQcm9qZWN0fjEpLgogICAgICAqIEBwYXJhbSBjY21BZGRyICAgICAgdXNlZCB0byBydW4gaW4gbXVsdGktc2Vzc2lvbi4KICAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzeW5jaHJvbml6ZSggU2NtTG9nZ2VyIGxvZ2dlciwgU3RyaW5nIHByb2plY3Rfc3BlYywgU3RyaW5nIGNjbUFkZHIgKQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzeW5jaHJvbml6ZSggU2NtTG9nZ2VyIGxvZ2dlciwgU3RyaW5nIHByb2plY3RTcGVjLCBTdHJpbmcgY2NtQWRkciApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIGxvZ2dlci5kZWJ1ZyggIlN5bmVyZ3kgOiBFbnRlcmluZyBzeW5jaHJvbml6ZSBtZXRob2QiICk7CiAKLSAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBTeW5lcmd5Q0NNLnN5bmNocm9uaXplKCBwcm9qZWN0X3NwZWMsIGNjbUFkZHIgKTsKKyAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBTeW5lcmd5Q0NNLnN5bmNocm9uaXplKCBwcm9qZWN0U3BlYywgY2NtQWRkciApOwogCiAgICAgICAgIENvbW1hbmRMaW5lVXRpbHMuU3RyaW5nU3RyZWFtQ29uc3VtZXIgc3RkZXJyID0gbmV3IENvbW1hbmRMaW5lVXRpbHMuU3RyaW5nU3RyZWFtQ29uc3VtZXIoKTsKICAgICAgICAgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lciBzdGRvdXQgPSBuZXcgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lcigpOwpAQCAtNTYyLDE2ICs1NjQsMTYgQEAKICAgICAgKiBHZXQgdGhlIHdvcmsgYXJlYSBvZiBhIGdpdmVuIHByb2plY3QuCiAgICAgICoKICAgICAgKiBAcGFyYW0gbG9nZ2VyICAgICAgIGEgbG9nZ2VyLgotICAgICAqIEBwYXJhbSBwcm9qZWN0X3NwZWMgcHJvamVjdF9zcGVjIChpLmUuIG15UHJvamVjdH4xKS4KKyAgICAgKiBAcGFyYW0gcHJvamVjdFNwZWMgcHJvamVjdFNwZWMgKGkuZS4gbXlQcm9qZWN0fjEpLgogICAgICAqIEBwYXJhbSBjY21BZGRyICAgICAgdXNlZCB0byBydW4gaW4gbXVsdGktc2Vzc2lvbi4KICAgICAgKiBAdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgRmlsZSBnZXRXb3JrQXJlYSggU2NtTG9nZ2VyIGxvZ2dlciwgU3RyaW5nIHByb2plY3Rfc3BlYywgU3RyaW5nIGNjbUFkZHIgKQorICAgIHB1YmxpYyBzdGF0aWMgRmlsZSBnZXRXb3JrQXJlYSggU2NtTG9nZ2VyIGxvZ2dlciwgU3RyaW5nIHByb2plY3RTcGVjLCBTdHJpbmcgY2NtQWRkciApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIGxvZ2dlci5kZWJ1ZyggIlN5bmVyZ3kgOiBFbnRlcmluZyBnZXRXb3JrQXJlYSBtZXRob2QiICk7CiAKLSAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBTeW5lcmd5Q0NNLnNob3dXb3JrQXJlYSggcHJvamVjdF9zcGVjLCBjY21BZGRyICk7CisgICAgICAgIENvbW1hbmRsaW5lIGNsID0gU3luZXJneUNDTS5zaG93V29ya0FyZWEoIHByb2plY3RTcGVjLCBjY21BZGRyICk7CiAKICAgICAgICAgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lciBzdGRlcnIgPSBuZXcgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lcigpOwogICAgICAgICBTeW5lcmd5V29ya2FyZWFDb25zdW1lciBzdGRvdXQgPSBuZXcgU3luZXJneVdvcmthcmVhQ29uc3VtZXIoIGxvZ2dlciApOwpAQCAtNzAwLDEzICs3MDIsMTMgQEAKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCBzdGRvdXQgaW5zdGFuY2VvZiBTdHJpbmdTdHJlYW1Db25zdW1lciApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNjbUV4Y2VwdGlvbiggIkNvbW1hbmRlbGluZSA9ICIgKyBjbC50b1N0cmluZygpICsgIlxuU1RET1VUID0gIiArCi0gICAgICAgICAgICAgICAgICAgICggKFN0cmluZ1N0cmVhbUNvbnN1bWVyKSBzdGRvdXQgKS5nZXRPdXRwdXQoKSArICJcblNUREVSUiA9ICIgKyBzdGRlcnIuZ2V0T3V0cHV0KCkgKyAiXG4iICk7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNjbUV4Y2VwdGlvbiggIkNvbW1hbmRlbGluZSA9ICIgKyBjbC50b1N0cmluZygpICsgIlxuU1RET1VUID0gIgorICAgICAgICAgICAgICAgICAgICArICggKFN0cmluZ1N0cmVhbUNvbnN1bWVyKSBzdGRvdXQgKS5nZXRPdXRwdXQoKSArICJcblNUREVSUiA9ICIgKyBzdGRlcnIuZ2V0T3V0cHV0KCkgKyAiXG4iICk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNjbUV4Y2VwdGlvbiggIkNvbW1hbmRlbGluZSA9ICIgKyBjbC50b1N0cmluZygpICsgIlxuU1RET1VUID0gdW5hdmFpbGFibGUiICsgIlxuU1RERVJSID0gIiArCi0gICAgICAgICAgICAgICAgICAgIHN0ZGVyci5nZXRPdXRwdXQoKSArICJcbiIgKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2NtRXhjZXB0aW9uKCAiQ29tbWFuZGVsaW5lID0gIiArIGNsLnRvU3RyaW5nKCkgKyAiXG5TVERPVVQgPSB1bmF2YWlsYWJsZSIgKyAiXG5TVERFUlIgPSAiCisgICAgICAgICAgICAgICAgICAgICsgc3RkZXJyLmdldE91dHB1dCgpICsgIlxuIiApOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3kvc3JjL3NpdGUvc2l0ZS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9zaXRlL3NpdGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3Y2FlMjMKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5L3NyYy9zaXRlL3NpdGUueG1sCkBAIC0wLDAgKzEsMzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz4KKworPCEtLQorICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICB+IHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgfiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgIH4gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB+IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgfgorICB+ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIH4KKyAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgIH4gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgfiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgfiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgfiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgIH4gdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorCis8cHJvamVjdCBuYW1lPSJNYXZlbiBTQ00gU3luZXJneSBQcm92aWRlciI+CisgIDxib2R5PgorICAgIDxtZW51IHJlZj0icGFyZW50IiAvPgorCisgICAgPG1lbnUgbmFtZT0iT3ZlcnZpZXciPgorICAgICAgPGl0ZW0gbmFtZT0iSW50cm9kdWN0aW9uIiBocmVmPSJpbmRleC5odG1sIi8+CisgICAgPC9tZW51PgorCisgICAgPG1lbnUgcmVmPSJyZXBvcnRzIiBpbmhlcml0PSJib3R0b20iIC8+CisgIDwvYm9keT4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9wb20ueG1sIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3BvbS54bWwKaW5kZXggNTdlNjdjNC4uMjFlNWI1MyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3BvbS54bWwKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3BvbS54bWwKQEAgLTEsNCArMSw2IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhLS0KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzwhLS0KICAgfiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiAgIH4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCiAgIH4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KQEAgLTE4LDE1ICsyMCwxOSBAQAogICAtLT4KIAogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+CisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwogICA8cGFyZW50PgotICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlcnM8L2FydGlmYWN0SWQ+CiAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyczwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgotICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLXZzczwvYXJ0aWZhY3RJZD4KKwogICA8bmFtZT5NYXZlbiBTQ00gVmlzdWFsIFNvdXJjZSBTYWZlIFByb3ZpZGVyPC9uYW1lPgotICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CisgIDxkZXNjcmlwdGlvbj5TQ00gUHJvdmlkZXIgaW1wbGVtZW50YXRpb24gZm9yIFZTUyAoaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy92c3R1ZGlvL2FhNzAwOTA3LmFzcHgpLjwvZGVzY3JpcHRpb24+CisKICAgPGJ1aWxkPgogICAgIDxwbHVnaW5zPgogICAgICAgPHBsdWdpbj4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9Wc3NTY21Qcm92aWRlci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL1Zzc1NjbVByb3ZpZGVyLmphdmEKaW5kZXggYzMxOWViYy4uN2U4ZGQ4MCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL1Zzc1NjbVByb3ZpZGVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL1Zzc1NjbVByb3ZpZGVyLmphdmEKQEAgLTQzLDcgKzQzLDYgQEAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86Z2VvcmdlQG5lb2dyaWQuY29tLmJyIj5HZW9yZ2UgR2FzdGFsZGk8L2E+CiAgKiBAdmVyc2lvbiAkSWQkCi0gKiBAbGluayBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL2d1aWRlcy9odG1sL3ZzdHNrdXNlX2NvbW1hbmRfbGluZV9jb21tYW5kc19hbmRfb3B0aW9ucy5hc3AKICAqIEBwbGV4dXMuY29tcG9uZW50IHJvbGU9Im9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyIiByb2xlLWhpbnQ9InZzcyIKICAqLwogcHVibGljIGNsYXNzIFZzc1NjbVByb3ZpZGVyCkBAIC01NiwxMSArNTUsMTMgQEAKICAgICAvLyBTY21Qcm92aWRlciBJbXBsZW1lbnRhdGlvbgogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21TcGVjaWZpY0ZpbGVuYW1lKCkKICAgICB7CiAgICAgICAgIHJldHVybiAidnNzdmVyLnNjYyI7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU2NtUHJvdmlkZXJSZXBvc2l0b3J5IG1ha2VQcm92aWRlclNjbVJlcG9zaXRvcnkoIFN0cmluZyBzY21TcGVjaWZpY1VybCwgY2hhciBkZWxpbWl0ZXIgKQogICAgICAgICB0aHJvd3MgU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbgogICAgIHsKQEAgLTEwOCwxNiArMTA5LDEzIEBACiAgICAgICAgIHJldHVybiBuZXcgVnNzU2NtUHJvdmlkZXJSZXBvc2l0b3J5KCB1c2VyLCBwYXNzd29yZCwgdnNzRGlyLCBwcm9qZWN0ICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNjbVR5cGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuICJ2c3MiOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciNhZGQob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LAotICAgICAqb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCwKLSAgICAgKm9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEFkZFNjbVJlc3VsdCBhZGQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtMTI4LDExICsxMjYsNiBAQAogICAgICAgICByZXR1cm4gKEFkZFNjbVJlc3VsdCkgY29tbWFuZC5leGVjdXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI2NoZWNraW4ob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LAotICAgICAqb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCwKLSAgICAgKm9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLwogICAgIC8qCiAgICAgIHB1YmxpYyBDaGVja0luU2NtUmVzdWx0IGNoZWNraW4oIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC0xNDYsMTEgKzEzOSw3IEBACiAgICAgIH0KICAgICAgKi8KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciNjaGVja291dChvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksCi0gICAgICpvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LAotICAgICAqb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hlY2tPdXRTY21SZXN1bHQgY2hlY2tvdXQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtMTYyLDExICsxNTEsNyBAQAogICAgICAgICByZXR1cm4gKENoZWNrT3V0U2NtUmVzdWx0KSBjb21tYW5kLmV4ZWN1dGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjY2hhbmdlbG9nKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSwKLSAgICAgKm9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsCi0gICAgICpvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGFuZ2VMb2dTY21SZXN1bHQgY2hhbmdlbG9nKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtMTc4LDExICsxNjMsNiBAQAogICAgICAgICByZXR1cm4gKENoYW5nZUxvZ1NjbVJlc3VsdCkgY29tbWFuZC5leGVjdXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI3RhZyhvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksCi0gICAgICpvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LAotICAgICAqb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCiAgICAgLyoKICAgICAgcHVibGljIFRhZ1NjbVJlc3VsdCB0YWcoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC0xOTYsMTEgKzE3Niw3IEBACiAgICAgIH0KICAgICAgKi8KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciN1cGRhdGUob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LAotICAgICAqb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCwKLSAgICAgKm9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtMjExLDExICsxODcsNyBAQAogICAgICAgICByZXR1cm4gKFVwZGF0ZVNjbVJlc3VsdCkgY29tbWFuZC5leGVjdXRlKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI3N0YXR1cyhvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksCi0gICAgICpvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LAotICAgICAqb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RhdHVzU2NtUmVzdWx0IHN0YXR1cyggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC0yMjYsMTEgKzE5OCw3IEBACiAgICAgICAgIHJldHVybiAoU3RhdHVzU2NtUmVzdWx0KSBjb21tYW5kLmV4ZWN1dGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjZWRpdChvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksCi0gICAgICpvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LAotICAgICAqb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgRWRpdFNjbVJlc3VsdCBlZGl0KCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKQEAgLTI0MSwxMyArMjA5LDkgQEAKICAgICAgICAgcmV0dXJuIChFZGl0U2NtUmVzdWx0KSBjb21tYW5kLmV4ZWN1dGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjdW5lZGl0KG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSwKLSAgICAgKm9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsCi0gICAgICpvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KICAgICAvKgotICAgIHB1YmxpYyBVbkVkaXRTY21SZXN1bHQgdW5lZGl0KCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKKyAgICBwdWJsaWMgVW5FZGl0U2NtUmVzdWx0IHVuZWRpdCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIFZzc1VuRWRpdENvbW1hbmQgY29tbWFuZCA9IG5ldyBWc3NVbkVkaXRDb21tYW5kKCk7CkBAIC0yNTgsMTMgKzIyMiw5IEBACiAgICAgfQogICAgICovCiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjcmVtb3ZlKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSwKLSAgICAgKm9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsCi0gICAgICpvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KICAgICAvKgotICAgICBwcm90ZWN0ZWQgUmVtb3ZlU2NtUmVzdWx0IHJlbW92ZSggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCisgICAgIHByb3RlY3RlZCBSZW1vdmVTY21SZXN1bHQgcmVtb3ZlKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICAgewogICAgICBWc3NSZW1vdmVDb21tYW5kIGNvbW1hbmQgPSBuZXcgVnNzUmVtb3ZlQ29tbWFuZCgpOwpAQCAtMjc1LDUgKzIzNSw0IEBACiAgICAgIC5nZXRQcm92aWRlclJlcG9zaXRvcnkoKSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgICB9CiAgICAgICovCi0KIH0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy9Wc3NDb21tYW5kTGluZVV0aWxzLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci12c3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci92c3MvY29tbWFuZHMvVnNzQ29tbWFuZExpbmVVdGlscy5qYXZhCmluZGV4IDE4NmExMTIuLmQ3MmJlYTUgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy9Wc3NDb21tYW5kTGluZVV0aWxzLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL2NvbW1hbmRzL1Zzc0NvbW1hbmRMaW5lVXRpbHMuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgVnNzQ29tbWFuZExpbmVVdGlscwotICAgIGltcGxlbWVudHMgVnNzQ29uc3RhbnRzICAvLyBGSVhNRSBleHRlbmQgQ29tbWFuZExpbmVVdGlscworICAgIC8vIEZJWE1FIGV4dGVuZCBDb21tYW5kTGluZVV0aWxzCiB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgRmlsZSBzY21Db25mRGlyID0gbmV3IEZpbGUoIFN5c3RlbS5nZXRQcm9wZXJ0eSggInVzZXIuaG9tZSIgKSwgIi5zY20iICk7CiAKQEAgLTExOSwxNSArMTE5LDE3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXRjaCAoIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlICkKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBub3AKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhdGNoICggSU9FeGNlcHRpb24gZSApCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gbm9wCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXRjaCAoIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gZSApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBzZXR0aW5nc0ZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiIGlzbid0IHdlbGwgZm9ybWVkLiBTS0lQUEVELiIgKyBlLmdldE1lc3NhZ2UoKTsKIAotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggbWVzc2FnZSApOworICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggbWVzc2FnZSApOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTE1OSwxMSArMTYxLDExIEBACiAgICAgICAgIFN0cmluZyBzc0RpciA9ICIiOwogICAgICAgICBpZiAoIFZzc0NvbW1hbmRMaW5lVXRpbHMuZ2V0U2V0dGluZ3MoKSAhPSBudWxsICkKICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIF9zc0RpciA9IFZzc0NvbW1hbmRMaW5lVXRpbHMuZ2V0U2V0dGluZ3MoKS5nZXRWc3NEaXJlY3RvcnkoKTsKKyAgICAgICAgICAgIFN0cmluZyBzc0RpcjIgPSBWc3NDb21tYW5kTGluZVV0aWxzLmdldFNldHRpbmdzKCkuZ2V0VnNzRGlyZWN0b3J5KCk7CiAKLSAgICAgICAgICAgIGlmICggX3NzRGlyICE9IG51bGwgKQorICAgICAgICAgICAgaWYgKCBzc0RpcjIgIT0gbnVsbCApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3NEaXIgPSBTdHJpbmdVdGlscy5yZXBsYWNlKCBfc3NEaXIsICJcXCIsICIvIiApOworICAgICAgICAgICAgICAgIHNzRGlyID0gU3RyaW5nVXRpbHMucmVwbGFjZSggc3NEaXIyLCAiXFwiLCAiLyIgKTsKIAogICAgICAgICAgICAgICAgIGlmICggIXNzRGlyLmVuZHNXaXRoKCAiLyIgKSApCiAgICAgICAgICAgICAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL2NvbW1hbmRzL1Zzc0NvbnN0YW50cy5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL2NvbW1hbmRzL1Zzc0NvbnN0YW50cy5qYXZhCmluZGV4IGMwOWVjNDIuLjI0MTNmOGQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy9Wc3NDb25zdGFudHMuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci12c3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci92c3MvY29tbWFuZHMvVnNzQ29uc3RhbnRzLmphdmEKQEAgLTIxLDE3MiArMjEsMTc0IEBACiAKIC8qKgogICogSG9sZHMgYWxsIHRoZSBjb25zdGFudHMgZm9yIHRoZSBWU1MgdGFza3MuCisgKgorICogQHZlcnNpb24gJElkJAogICovCi1wdWJsaWMgaW50ZXJmYWNlIFZzc0NvbnN0YW50cworcHVibGljIGNsYXNzIFZzc0NvbnN0YW50cwogewogICAgIC8qKgogICAgICAqIENvbnN0YW50IGZvciB0aGUgdGhpbmcgdG8gZXhlY3V0ZQogICAgICAqLwotICAgIFN0cmluZyBTU19FWEUgPSAic3MiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNTX0VYRSA9ICJzcyI7CiAKICAgICAvKioKICAgICAgKiBEb2xsYXIgU2lnaCB0byBwcmVmaXggdGhlIHByb2plY3QgcGF0aAogICAgICAqLwotICAgIFN0cmluZyBQUk9KRUNUX1BSRUZJWCA9ICIkIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX1BSRUZJWCA9ICIkIjsKIAogICAgIC8qKgogICAgICAqIFRoZSAnQ1AnIGNvbW1hbmQKICAgICAgKi8KLSAgICBTdHJpbmcgQ09NTUFORF9DUCA9ICJDUCI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NTUFORF9DUCA9ICJDUCI7CiAKICAgICAvKioKICAgICAgKiBUaGUgJ0FkZCcgY29tbWFuZAogICAgICAqLwotICAgIFN0cmluZyBDT01NQU5EX0FERCA9ICJBZGQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTU1BTkRfQUREID0gIkFkZCI7CiAKICAgICAvKioKICAgICAgKiBUaGUgJ0dldCcgY29tbWFuZAogICAgICAqLwotICAgIFN0cmluZyBDT01NQU5EX0dFVCA9ICJHZXQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTU1BTkRfR0VUID0gIkdldCI7CiAKICAgICAvKioKICAgICAgKiBUaGUgJ0NoZWNrb3V0JyBjb21tYW5kCiAgICAgICovCi0gICAgU3RyaW5nIENPTU1BTkRfQ0hFQ0tPVVQgPSAiQ2hlY2tvdXQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTU1BTkRfQ0hFQ0tPVVQgPSAiQ2hlY2tvdXQiOwogCiAgICAgLyoqCiAgICAgICogVGhlICdDaGVja2luJyBjb21tYW5kCiAgICAgICovCi0gICAgU3RyaW5nIENPTU1BTkRfQ0hFQ0tJTiA9ICJDaGVja2luIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT01NQU5EX0NIRUNLSU4gPSAiQ2hlY2tpbiI7CiAKICAgICAvKioKICAgICAgKiBUaGUgJ0xhYmVsJyBjb21tYW5kCiAgICAgICovCi0gICAgU3RyaW5nIENPTU1BTkRfTEFCRUwgPSAiTGFiZWwiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTU1BTkRfTEFCRUwgPSAiTGFiZWwiOwogCiAgICAgLyoqCiAgICAgICogVGhlICdIaXN0b3J5JyBjb21tYW5kCiAgICAgICovCi0gICAgU3RyaW5nIENPTU1BTkRfSElTVE9SWSA9ICJIaXN0b3J5IjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT01NQU5EX0hJU1RPUlkgPSAiSGlzdG9yeSI7CiAKICAgICAvKioKICAgICAgKiBUaGUgJ0NyZWF0ZScgY29tbWFuZAogICAgICAqLwotICAgIFN0cmluZyBDT01NQU5EX0NSRUFURSA9ICJDcmVhdGUiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTU1BTkRfQ1JFQVRFID0gIkNyZWF0ZSI7CiAKICAgICAvKioKICAgICAgKiBUaGUgJ1N0YXR1cycgY29tbWFuZAogICAgICAqLwotICAgIFN0cmluZyBDT01NQU5EX0RJRkYgPSAiRGlmZiI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NTUFORF9ESUZGID0gIkRpZmYiOwogCiAgICAgLyoqCiAgICAgICogVGhlICdTdGF0dXMnIGNvbW1hbmQKICAgICAgKi8KLSAgICBTdHJpbmcgQ09NTUFORF9TVEFUVVMgPSAiU3RhdHVzIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT01NQU5EX1NUQVRVUyA9ICJTdGF0dXMiOwogCiAgICAgLyoqCiAgICAgICogVGhlIGJyaWVmIHN0eWxlIGZsYWcKICAgICAgKi8KLSAgICBTdHJpbmcgU1RZTEVfQlJJRUYgPSAiYnJpZWYiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUWUxFX0JSSUVGID0gImJyaWVmIjsKIAogICAgIC8qKgogICAgICAqIFRoZSBjb2RlZGlmZiBzdHlsZSBmbGFnCiAgICAgICovCi0gICAgU3RyaW5nIFNUWUxFX0NPREVESUZGID0gImNvZGVkaWZmIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVFlMRV9DT0RFRElGRiA9ICJjb2RlZGlmZiI7CiAKICAgICAvKioKICAgICAgKiBUaGUgbm9maWxlIHN0eWxlIGZsYWcKICAgICAgKi8KLSAgICBTdHJpbmcgU1RZTEVfTk9GSUxFID0gIm5vZmlsZSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RZTEVfTk9GSUxFID0gIm5vZmlsZSI7CiAKICAgICAvKioKICAgICAgKiBUaGUgZGVmYXVsdCBzdHlsZSBmbGFnCiAgICAgICovCi0gICAgU3RyaW5nIFNUWUxFX0RFRkFVTFQgPSAiZGVmYXVsdCI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RZTEVfREVGQVVMVCA9ICJkZWZhdWx0IjsKIAogICAgIC8qKgogICAgICAqIFRoZSB0ZXh0IGZvciAgY3VycmVudCAoZGVmYXVsdCkgdGltZXN0YW1wCiAgICAgICovCi0gICAgU3RyaW5nIFRJTUVfQ1VSUkVOVCA9ICJjdXJyZW50IjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUSU1FX0NVUlJFTlQgPSAiY3VycmVudCI7CiAKICAgICAvKioKICAgICAgKiBUaGUgdGV4dCBmb3IgIG1vZGlmaWVkIHRpbWVzdGFtcAogICAgICAqLwotICAgIFN0cmluZyBUSU1FX01PRElGSUVEID0gIm1vZGlmaWVkIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUSU1FX01PRElGSUVEID0gIm1vZGlmaWVkIjsKIAogICAgIC8qKgogICAgICAqIFRoZSB0ZXh0IGZvciAgdXBkYXRlZCB0aW1lc3RhbXAKICAgICAgKi8KLSAgICBTdHJpbmcgVElNRV9VUERBVEVEID0gInVwZGF0ZWQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRJTUVfVVBEQVRFRCA9ICJ1cGRhdGVkIjsKIAogICAgIC8qKgogICAgICAqIFRoZSB0ZXh0IGZvciByZXBsYWNpbmcgd3JpdGFibGUgZmlsZXMKICAgICAgKi8KLSAgICBTdHJpbmcgV1JJVEFCTEVfUkVQTEFDRSA9ICJyZXBsYWNlIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXUklUQUJMRV9SRVBMQUNFID0gInJlcGxhY2UiOwogCiAgICAgLyoqCiAgICAgICogVGhlIHRleHQgZm9yIHNraXBpbmcgd3JpdGFibGUgZmlsZXMKICAgICAgKi8KLSAgICBTdHJpbmcgV1JJVEFCTEVfU0tJUCA9ICJza2lwIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXUklUQUJMRV9TS0lQID0gInNraXAiOwogCiAgICAgLyoqCiAgICAgICogVGhlIHRleHQgZm9yIGZhaWxpbmcgb24gd3JpdGFibGUgZmlsZXMKICAgICAgKi8KLSAgICBTdHJpbmcgV1JJVEFCTEVfRkFJTCA9ICJmYWlsIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXUklUQUJMRV9GQUlMID0gImZhaWwiOwogCi0gICAgU3RyaW5nIEZMQUdfTE9HSU4gPSAiLVkiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZMQUdfTE9HSU4gPSAiLVkiOwogCi0gICAgU3RyaW5nIEZMQUdfT1ZFUlJJREVfV09SS0lOR19ESVIgPSAiLUdMIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGTEFHX09WRVJSSURFX1dPUktJTkdfRElSID0gIi1HTCI7CiAKLSAgICBTdHJpbmcgRkxBR19BVVRPUkVTUE9OU0VfREVGID0gIi1JLSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkxBR19BVVRPUkVTUE9OU0VfREVGID0gIi1JLSI7CiAKLSAgICBTdHJpbmcgRkxBR19BVVRPUkVTUE9OU0VfWUVTID0gIi1JLVkiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZMQUdfQVVUT1JFU1BPTlNFX1lFUyA9ICItSS1ZIjsKIAotICAgIFN0cmluZyBGTEFHX0FVVE9SRVNQT05TRV9OTyA9ICItSS1OIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGTEFHX0FVVE9SRVNQT05TRV9OTyA9ICItSS1OIjsKIAotICAgIFN0cmluZyBGTEFHX1JFQ1VSU0lPTiA9ICItUiI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkxBR19SRUNVUlNJT04gPSAiLVIiOwogCi0gICAgU3RyaW5nIEZMQUdfVkVSU0lPTiA9ICItViI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkxBR19WRVJTSU9OID0gIi1WIjsKIAotICAgIFN0cmluZyBGTEFHX1ZFUlNJT05fREFURSA9ICItVmQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZMQUdfVkVSU0lPTl9EQVRFID0gIi1WZCI7CiAKLSAgICBTdHJpbmcgRkxBR19WRVJTSU9OX0xBQkVMID0gIi1WTCI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkxBR19WRVJTSU9OX0xBQkVMID0gIi1WTCI7CiAKLSAgICBTdHJpbmcgRkxBR19XUklUQUJMRSA9ICItVyI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkxBR19XUklUQUJMRSA9ICItVyI7CiAKLSAgICBTdHJpbmcgVkFMVUVfTk8gPSAiLU4iOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX05PID0gIi1OIjsKIAotICAgIFN0cmluZyBWQUxVRV9ZRVMgPSAiLVkiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX1lFUyA9ICItWSI7CiAKLSAgICBTdHJpbmcgRkxBR19RVUlFVCA9ICItTy0iOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZMQUdfUVVJRVQgPSAiLU8tIjsKIAotICAgIFN0cmluZyBGTEFHX0NPTU1FTlQgPSAiLUMiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZMQUdfQ09NTUVOVCA9ICItQyI7CiAKLSAgICBTdHJpbmcgRkxBR19MQUJFTCA9ICItTCI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkxBR19MQUJFTCA9ICItTCI7CiAKLSAgICBTdHJpbmcgVkFMVUVfRlJPTURBVEUgPSAifmQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX0ZST01EQVRFID0gIn5kIjsKIAotICAgIFN0cmluZyBWQUxVRV9GUk9NTEFCRUwgPSAifkwiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX0ZST01MQUJFTCA9ICJ+TCI7CiAKLSAgICBTdHJpbmcgRkxBR19PVVRQVVQgPSAiLU8iOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZMQUdfT1VUUFVUID0gIi1PIjsKIAotICAgIFN0cmluZyBGTEFHX1VTRVIgPSAiLVUiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZMQUdfVVNFUiA9ICItVSI7CiAKLSAgICBTdHJpbmcgRkxBR19OT19GSUxFID0gIi1GLSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkxBR19OT19GSUxFID0gIi1GLSI7CiAKLSAgICBTdHJpbmcgRkxBR19CUklFRiA9ICItQiI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkxBR19CUklFRiA9ICItQiI7CiAKLSAgICBTdHJpbmcgRkxBR19DT0RFRElGRiA9ICItRCI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkxBR19DT0RFRElGRiA9ICItRCI7CiAKLSAgICBTdHJpbmcgRkxBR19GSUxFVElNRV9ERUYgPSAiLUdUQyI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkxBR19GSUxFVElNRV9ERUYgPSAiLUdUQyI7CiAKLSAgICBTdHJpbmcgRkxBR19GSUxFVElNRV9NT0RJRklFRCA9ICItR1RNIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGTEFHX0ZJTEVUSU1FX01PRElGSUVEID0gIi1HVE0iOwogCi0gICAgU3RyaW5nIEZMQUdfRklMRVRJTUVfVVBEQVRFRCA9ICItR1RVIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGTEFHX0ZJTEVUSU1FX1VQREFURUQgPSAiLUdUVSI7CiAKLSAgICBTdHJpbmcgRkxBR19SRVBMQUNFX1dSSVRBQkxFID0gIi1HV1IiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZMQUdfUkVQTEFDRV9XUklUQUJMRSA9ICItR1dSIjsKIAotICAgIFN0cmluZyBGTEFHX1NLSVBfV1JJVEFCTEUgPSAiLUdXUyI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkxBR19TS0lQX1dSSVRBQkxFID0gIi1HV1MiOwogCi0gICAgU3RyaW5nIEZMQUdfTk9fR0VUID0gIi1HLSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkxBR19OT19HRVQgPSAiLUctIjsKIH0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy9Wc3NQYXJhbWV0ZXJDb250ZXh0LmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci12c3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci92c3MvY29tbWFuZHMvVnNzUGFyYW1ldGVyQ29udGV4dC5qYXZhCmluZGV4IGUwZDUwZTkuLjA1NjRkYTYgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy9Wc3NQYXJhbWV0ZXJDb250ZXh0LmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL2NvbW1hbmRzL1Zzc1BhcmFtZXRlckNvbnRleHQuamF2YQpAQCAtMzUsNyArMzUsNiBAQAogICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgVnNzUGFyYW1ldGVyQ29udGV4dAotICAgIGltcGxlbWVudHMgVnNzQ29uc3RhbnRzCiB7CiAKICAgICBwcml2YXRlIFN0cmluZyB2c3NQYXRoID0gbnVsbDsKQEAgLTExNSw3ICsxMTQsNyBAQAogICAgICAgICBhdXRvUmVzcG9uc2UgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoICJtYXZlbi5zY20uYXV0b1Jlc3BvbnNlIiApOwogICAgICAgICB0aGlzLnNzRGlyID0gcmVwby5nZXRWc3NkaXIoKTsKICAgICAgICAgdGhpcy51c2VyID0gcmVwby5nZXRVc2VyKCk7Ci0vLwkJdGhpcy52c3NMb2dpbiA9IHRoaXMudXNlciArIChyZXBvcy5nZXRQYXNzd29yZCgpID09IG51bGwgPyAiIiA6ICIsIityZXBvcy5nZXRQYXNzd29yZCgpKTsKKy8vICAgICAgICB0aGlzLnZzc0xvZ2luID0gdGhpcy51c2VyICsgKHJlcG9zLmdldFBhc3N3b3JkKCkgPT0gbnVsbCA/ICIiIDogIiwiK3JlcG9zLmdldFBhc3N3b3JkKCkpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTI1LDcgKzEyNCw3IEBACiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRHZXRMb2NhbENvcHkoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICggIWdldExvY2FsQ29weSApID8gRkxBR19OT19HRVQgOiAiIjsKKyAgICAgICAgcmV0dXJuICggIWdldExvY2FsQ29weSApID8gVnNzQ29uc3RhbnRzLkZMQUdfTk9fR0VUIDogIiI7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xODgsOSArMTg3LDkgQEAKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1zZyA9ICJEaXJlY3RvcnkgIiArIGxvY2FsUGF0aCArICIgY3JlYXRpb24gd2FzIG5vdCAiICsgInN1Y2Nlc3NmdWwgZm9yIGFuIHVua25vd24gcmVhc29uIjsKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNjbUV4Y2VwdGlvbiggbXNnICk7CiAgICAgICAgICAgICAgICAgfQotLy8JCQkJZ2V0TG9nZ2VyKCkuaW5mbygiQ3JlYXRlZCBkaXI6ICIgKyBkaXIuZ2V0QWJzb2x1dGVQYXRoKCkpOworLy8gICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkuaW5mbygiQ3JlYXRlZCBkaXI6ICIgKyBkaXIuZ2V0QWJzb2x1dGVQYXRoKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGNsUGF0aCA9IEZMQUdfT1ZFUlJJREVfV09SS0lOR19ESVIgKyBsb2NhbFBhdGg7CisgICAgICAgICAgICBsY2xQYXRoID0gVnNzQ29uc3RhbnRzLkZMQUdfT1ZFUlJJREVfV09SS0lOR19ESVIgKyBsb2NhbFBhdGg7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGxjbFBhdGg7CiAgICAgfQpAQCAtMjA1LDcgKzIwNCw3IEBACiAgICAgICAgIFN0cmluZyBzaG9ydExhYmVsID0gIiI7CiAgICAgICAgIGlmICggbGFiZWwgIT0gbnVsbCAmJiBsYWJlbC5sZW5ndGgoKSA+IDAgKQogICAgICAgICB7Ci0gICAgICAgICAgICBzaG9ydExhYmVsID0gRkxBR19MQUJFTCArIGdldFNob3J0TGFiZWwoKTsKKyAgICAgICAgICAgIHNob3J0TGFiZWwgPSBWc3NDb25zdGFudHMuRkxBR19MQUJFTCArIGdldFNob3J0TGFiZWwoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc2hvcnRMYWJlbDsKICAgICB9CkBAIC0yMjEsMTEgKzIyMCwxMSBAQAogICAgICAgICBTdHJpbmcgdmVyc2lvbkRhdGVMYWJlbCA9ICIiOwogICAgICAgICBpZiAoIHZlcnNpb24gIT0gbnVsbCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZlcnNpb25EYXRlTGFiZWwgPSBGTEFHX1ZFUlNJT04gKyB2ZXJzaW9uOworICAgICAgICAgICAgdmVyc2lvbkRhdGVMYWJlbCA9IFZzc0NvbnN0YW50cy5GTEFHX1ZFUlNJT04gKyB2ZXJzaW9uOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKCBkYXRlICE9IG51bGwgKQogICAgICAgICB7Ci0gICAgICAgICAgICB2ZXJzaW9uRGF0ZUxhYmVsID0gRkxBR19WRVJTSU9OX0RBVEUgKyBkYXRlOworICAgICAgICAgICAgdmVyc2lvbkRhdGVMYWJlbCA9IFZzc0NvbnN0YW50cy5GTEFHX1ZFUlNJT05fREFURSArIGRhdGU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CkBAIC0yMzQsNyArMjMzLDcgQEAKICAgICAgICAgICAgIFN0cmluZyBzaG9ydExhYmVsID0gZ2V0U2hvcnRMYWJlbCgpOwogICAgICAgICAgICAgaWYgKCBzaG9ydExhYmVsICE9IG51bGwgJiYgIXNob3J0TGFiZWwuZXF1YWxzKCAiIiApICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZXJzaW9uRGF0ZUxhYmVsID0gRkxBR19WRVJTSU9OX0xBQkVMICsgc2hvcnRMYWJlbDsKKyAgICAgICAgICAgICAgICB2ZXJzaW9uRGF0ZUxhYmVsID0gVnNzQ29uc3RhbnRzLkZMQUdfVkVSU0lPTl9MQUJFTCArIHNob3J0TGFiZWw7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHZlcnNpb25EYXRlTGFiZWw7CkBAIC0yNDcsNyArMjQ2LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFZlcnNpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZlcnNpb24gIT0gbnVsbCA/IEZMQUdfVkVSU0lPTiArIHZlcnNpb24gOiAiIjsKKyAgICAgICAgcmV0dXJuIHZlcnNpb24gIT0gbnVsbCA/IFZzc0NvbnN0YW50cy5GTEFHX1ZFUlNJT04gKyB2ZXJzaW9uIDogIiI7CiAgICAgfQogCiAgICAgLyoqCkBAIC0yNjIsOSArMjYxLDkgQEAKICAgICAgICAgaWYgKCBsYWJlbCAhPSBudWxsICYmIGxhYmVsLmxlbmd0aCgpID4gMzEgKQogICAgICAgICB7CiAgICAgICAgICAgICBzaG9ydExhYmVsID0gdGhpcy5sYWJlbC5zdWJzdHJpbmcoIDAsIDMwICk7Ci0vLwkJCWdldExvZ2dlcigpLndhcm4oCi0vLwkJCQkJIkxhYmVsIGlzIGxvbmdlciB0aGFuIDMxIGNoYXJhY3RlcnMsIHRydW5jYXRlZCB0bzogIgotLy8JCQkJCQkJKyBzaG9ydExhYmVsKTsKKy8vICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2FybigKKy8vICAgICAgICAgICAgICAgICAgICAiTGFiZWwgaXMgbG9uZ2VyIHRoYW4gMzEgY2hhcmFjdGVycywgdHJ1bmNhdGVkIHRvOiAiCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNob3J0TGFiZWwpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewpAQCAtMjkwLDcgKzI4OSw3IEBACiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRSZWN1cnNpdmUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHJlY3Vyc2l2ZSA/IEZMQUdfUkVDVVJTSU9OIDogIiI7CisgICAgICAgIHJldHVybiByZWN1cnNpdmUgPyBWc3NDb25zdGFudHMuRkxBR19SRUNVUlNJT04gOiAiIjsKICAgICB9CiAKICAgICAvKioKQEAgLTMwMCw3ICsyOTksNyBAQAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGFibGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHdyaXRhYmxlID8gRkxBR19XUklUQUJMRSA6ICIiOworICAgICAgICByZXR1cm4gd3JpdGFibGUgPyBWc3NDb25zdGFudHMuRkxBR19XUklUQUJMRSA6ICIiOwogICAgIH0KIAogICAgIC8qKgpAQCAtMzEwLDcgKzMwOSw3IEBACiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRRdWlldCgpCiAgICAgewotICAgICAgICByZXR1cm4gcXVpZXQgPyBGTEFHX1FVSUVUIDogIiI7CisgICAgICAgIHJldHVybiBxdWlldCA/IFZzc0NvbnN0YW50cy5GTEFHX1FVSUVUIDogIiI7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBnZXRWZXJzaW9uTGFiZWwoKQpAQCAtMzI0LDQwICszMjMsNDAgQEAKICAgICAgICAgICAgIGlmICggZnJvbUxhYmVsLmxlbmd0aCgpID4gMzEgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGZyb21MYWJlbCA9IGZyb21MYWJlbC5zdWJzdHJpbmcoIDAsIDMwICk7Ci0vLwkJCQlnZXRMb2dnZXIoKS53YXJuKAotLy8JCQkJCQkiRnJvbUxhYmVsIGlzIGxvbmdlciB0aGFuIDMxIGNoYXJhY3RlcnMsIHRydW5jYXRlZCB0bzogIgotLy8JCQkJCQkJCSsgZnJvbUxhYmVsKTsKKy8vICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndhcm4oCisvLyAgICAgICAgICAgICAgICAgICAgICAgICJGcm9tTGFiZWwgaXMgbG9uZ2VyIHRoYW4gMzEgY2hhcmFjdGVycywgdHJ1bmNhdGVkIHRvOiAiCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBmcm9tTGFiZWwpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCB0b0xhYmVsLmxlbmd0aCgpID4gMzEgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRvTGFiZWwgPSB0b0xhYmVsLnN1YnN0cmluZyggMCwgMzAgKTsKLS8vCQkJCWdldExvZ2dlcigpLndhcm4oCi0vLwkJCQkJCSJUb0xhYmVsIGlzIGxvbmdlciB0aGFuIDMxIGNoYXJhY3RlcnMsIHRydW5jYXRlZCB0bzogIgotLy8JCQkJCQkJCSsgdG9MYWJlbCk7CisvLyAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53YXJuKAorLy8gICAgICAgICAgICAgICAgICAgICAgICAiVG9MYWJlbCBpcyBsb25nZXIgdGhhbiAzMSBjaGFyYWN0ZXJzLCB0cnVuY2F0ZWQgdG86ICIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHRvTGFiZWwpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEZMQUdfVkVSU0lPTl9MQUJFTCArIHRvTGFiZWwgKyBWQUxVRV9GUk9NTEFCRUwgKyBmcm9tTGFiZWw7CisgICAgICAgICAgICByZXR1cm4gVnNzQ29uc3RhbnRzLkZMQUdfVkVSU0lPTl9MQUJFTCArIHRvTGFiZWwgKyBWc3NDb25zdGFudHMuVkFMVUVfRlJPTUxBQkVMICsgZnJvbUxhYmVsOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKCBmcm9tTGFiZWwgIT0gbnVsbCApCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICggZnJvbUxhYmVsLmxlbmd0aCgpID4gMzEgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGZyb21MYWJlbCA9IGZyb21MYWJlbC5zdWJzdHJpbmcoIDAsIDMwICk7Ci0vLwkJCQlnZXRMb2dnZXIoKS53YXJuKAotLy8JCQkJCQkiRnJvbUxhYmVsIGlzIGxvbmdlciB0aGFuIDMxIGNoYXJhY3RlcnMsIHRydW5jYXRlZCB0bzogIgotLy8JCQkJCQkJCSsgZnJvbUxhYmVsKTsKKy8vICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndhcm4oCisvLyAgICAgICAgICAgICAgICAgICAgICAgICJGcm9tTGFiZWwgaXMgbG9uZ2VyIHRoYW4gMzEgY2hhcmFjdGVycywgdHJ1bmNhdGVkIHRvOiAiCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBmcm9tTGFiZWwpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEZMQUdfVkVSU0lPTiArIFZBTFVFX0ZST01MQUJFTCArIGZyb21MYWJlbDsKKyAgICAgICAgICAgIHJldHVybiBWc3NDb25zdGFudHMuRkxBR19WRVJTSU9OICsgVnNzQ29uc3RhbnRzLlZBTFVFX0ZST01MQUJFTCArIGZyb21MYWJlbDsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICggdG9MYWJlbC5sZW5ndGgoKSA+IDMxICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0b0xhYmVsID0gdG9MYWJlbC5zdWJzdHJpbmcoIDAsIDMwICk7Ci0vLwkJCQlnZXRMb2dnZXIoKS53YXJuKAotLy8JCQkJCQkiVG9MYWJlbCBpcyBsb25nZXIgdGhhbiAzMSBjaGFyYWN0ZXJzLCB0cnVuY2F0ZWQgdG86ICIKLS8vCQkJCQkJCQkrIHRvTGFiZWwpOworLy8gICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2FybigKKy8vICAgICAgICAgICAgICAgICAgICAgICAgIlRvTGFiZWwgaXMgbG9uZ2VyIHRoYW4gMzEgY2hhcmFjdGVycywgdHJ1bmNhdGVkIHRvOiAiCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0b0xhYmVsKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBGTEFHX1ZFUlNJT05fTEFCRUwgKyB0b0xhYmVsOworICAgICAgICAgICAgcmV0dXJuIFZzc0NvbnN0YW50cy5GTEFHX1ZFUlNJT05fTEFCRUwgKyB0b0xhYmVsOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNjgsNyArMzY3LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXIoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHVzZXIgIT0gbnVsbCA/IEZMQUdfVVNFUiArIHVzZXIgOiAiIjsKKyAgICAgICAgcmV0dXJuIHVzZXIgIT0gbnVsbCA/IFZzc0NvbnN0YW50cy5GTEFHX1VTRVIgKyB1c2VyIDogIiI7CiAgICAgfQogCiAgICAgLyoqCkBAIC0zNzgsNyArMzc3LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENvbW1lbnQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbW1lbnQgIT0gbnVsbCA/IEZMQUdfQ09NTUVOVCArIGNvbW1lbnQgOiBGTEFHX0NPTU1FTlQgKyAiLSI7CisgICAgICAgIHJldHVybiBjb21tZW50ICE9IG51bGwgPyBWc3NDb25zdGFudHMuRkxBR19DT01NRU5UICsgY29tbWVudCA6IFZzc0NvbnN0YW50cy5GTEFHX0NPTU1FTlQgKyAiLSI7CiAgICAgfQogCiAgICAgLyoqCkBAIC0zODksNyArMzg4LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldExvZ2luKCkKICAgICB7Ci0gICAgICAgIHJldHVybiB2c3NMb2dpbiAhPSBudWxsID8gKCBGTEFHX0xPR0lOICsgdnNzTG9naW4gKSA6ICIiOworICAgICAgICByZXR1cm4gdnNzTG9naW4gIT0gbnVsbCA/ICggVnNzQ29uc3RhbnRzLkZMQUdfTE9HSU4gKyB2c3NMb2dpbiApIDogIiI7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MDEsMTkgKzQwMCwxOSBAQAogICAgIHsKICAgICAgICAgaWYgKCBhdXRvUmVzcG9uc2UgPT0gbnVsbCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBGTEFHX0FVVE9SRVNQT05TRV9ERUY7CisgICAgICAgICAgICByZXR1cm4gVnNzQ29uc3RhbnRzLkZMQUdfQVVUT1JFU1BPTlNFX0RFRjsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmICggYXV0b1Jlc3BvbnNlLmVxdWFsc0lnbm9yZUNhc2UoICJZIiApICkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEZMQUdfQVVUT1JFU1BPTlNFX1lFUzsKKyAgICAgICAgICAgIHJldHVybiBWc3NDb25zdGFudHMuRkxBR19BVVRPUkVTUE9OU0VfWUVTOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKCBhdXRvUmVzcG9uc2UuZXF1YWxzSWdub3JlQ2FzZSggIk4iICkgKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRkxBR19BVVRPUkVTUE9OU0VfTk87CisgICAgICAgICAgICByZXR1cm4gVnNzQ29uc3RhbnRzLkZMQUdfQVVUT1JFU1BPTlNFX05POwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEZMQUdfQVVUT1JFU1BPTlNFX0RFRjsKKyAgICAgICAgICAgIHJldHVybiBWc3NDb25zdGFudHMuRkxBR19BVVRPUkVTUE9OU0VfREVGOwogICAgICAgICB9CiAgICAgfQogCkBAIC00MjYsOSArNDI1LDkgQEAKICAgICB7CiAgICAgICAgIGlmICggc3NEaXIgPT0gbnVsbCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTU19FWEU7CisgICAgICAgICAgICByZXR1cm4gVnNzQ29uc3RhbnRzLlNTX0VYRTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gc3NEaXIuZW5kc1dpdGgoIEZpbGUuc2VwYXJhdG9yICkgPyBzc0RpciArIFNTX0VYRSA6IHNzRGlyICsgRmlsZS5zZXBhcmF0b3IgKyBTU19FWEU7CisgICAgICAgIHJldHVybiBzc0Rpci5lbmRzV2l0aCggRmlsZS5zZXBhcmF0b3IgKSA/IHNzRGlyICsgVnNzQ29uc3RhbnRzLlNTX0VYRSA6IHNzRGlyICsgRmlsZS5zZXBhcmF0b3IgKyBWc3NDb25zdGFudHMuU1NfRVhFOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VnNzUGF0aCgpCkBAIC00NTIsMTMgKzQ1MSwxMyBAQAogICAgICAgICB9CiAgICAgICAgIGlmICggZnJvbURhdGUgIT0gbnVsbCAmJiB0b0RhdGUgIT0gbnVsbCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBGTEFHX1ZFUlNJT05fREFURSArIHRvRGF0ZSArIFZBTFVFX0ZST01EQVRFICsgZnJvbURhdGU7CisgICAgICAgICAgICByZXR1cm4gVnNzQ29uc3RhbnRzLkZMQUdfVkVSU0lPTl9EQVRFICsgdG9EYXRlICsgVnNzQ29uc3RhbnRzLlZBTFVFX0ZST01EQVRFICsgZnJvbURhdGU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoIHRvRGF0ZSAhPSBudWxsICYmIG51bURheXMgIT0gSW50ZWdlci5NSU5fVkFMVUUgKQogICAgICAgICB7CiAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRkxBR19WRVJTSU9OX0RBVEUgKyB0b0RhdGUgKyBWQUxVRV9GUk9NREFURSArIGNhbGNEYXRlKCB0b0RhdGUsIG51bURheXMgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVnNzQ29uc3RhbnRzLkZMQUdfVkVSU0lPTl9EQVRFICsgdG9EYXRlICsgVnNzQ29uc3RhbnRzLlZBTFVFX0ZST01EQVRFICsgY2FsY0RhdGUoIHRvRGF0ZSwgbnVtRGF5cyApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2F0Y2ggKCBQYXJzZUV4Y2VwdGlvbiBleCApCiAgICAgICAgICAgICB7CkBAIC00NzAsNyArNDY5LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZMQUdfVkVSU0lPTl9EQVRFICsgY2FsY0RhdGUoIGZyb21EYXRlLCBudW1EYXlzICkgKyBWQUxVRV9GUk9NREFURSArIGZyb21EYXRlOworICAgICAgICAgICAgICAgIHJldHVybiBWc3NDb25zdGFudHMuRkxBR19WRVJTSU9OX0RBVEUgKyBjYWxjRGF0ZSggZnJvbURhdGUsIG51bURheXMgKSArIFZzc0NvbnN0YW50cy5WQUxVRV9GUk9NREFURSArIGZyb21EYXRlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2F0Y2ggKCBQYXJzZUV4Y2VwdGlvbiBleCApCiAgICAgICAgICAgICB7CkBAIC00ODAsNyArNDc5LDcgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmcm9tRGF0ZSAhPSBudWxsID8gRkxBR19WRVJTSU9OICsgVkFMVUVfRlJPTURBVEUgKyBmcm9tRGF0ZSA6IEZMQUdfVkVSU0lPTl9EQVRFICsgdG9EYXRlOworICAgICAgICAgICAgcmV0dXJuIGZyb21EYXRlICE9IG51bGwgPyBWc3NDb25zdGFudHMuRkxBR19WRVJTSU9OICsgVnNzQ29uc3RhbnRzLlZBTFVFX0ZST01EQVRFICsgZnJvbURhdGUgOiBWc3NDb25zdGFudHMuRkxBR19WRVJTSU9OX0RBVEUgKyB0b0RhdGU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ5MSw3ICs0OTAsNyBAQAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0T3V0cHV0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvdXRwdXRGaWxlTmFtZSAhPSBudWxsID8gRkxBR19PVVRQVVQgKyBvdXRwdXRGaWxlTmFtZSA6ICIiOworICAgICAgICByZXR1cm4gb3V0cHV0RmlsZU5hbWUgIT0gbnVsbCA/IFZzc0NvbnN0YW50cy5GTEFHX09VVFBVVCArIG91dHB1dEZpbGVOYW1lIDogIiI7CiAgICAgfQogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci12c3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci92c3MvY29tbWFuZHMvYWRkL1Zzc0FkZENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy9hZGQvVnNzQWRkQ29tbWFuZC5qYXZhCmluZGV4IDAzNTJhNGMuLjhmOTJlMzIgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy9hZGQvVnNzQWRkQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy9hZGQvVnNzQWRkQ29tbWFuZC5qYXZhCkBAIC0zOSw2ICszOSw3IEBACiBwdWJsaWMgY2xhc3MgVnNzQWRkQ29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RBZGRDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU2NtUmVzdWx0IGV4ZWN1dGVBZGRDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGJpbmFyeSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy9hZGQvVnNzQWRkQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy9hZGQvVnNzQWRkQ29uc3VtZXIuamF2YQppbmRleCBhYjAzZmM3Li44MDdhOGRkIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci12c3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci92c3MvY29tbWFuZHMvYWRkL1Zzc0FkZENvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL2NvbW1hbmRzL2FkZC9Wc3NBZGRDb25zdW1lci5qYXZhCkBAIC01MSw2ICs1MSw3IEBACiAgICAgLy8gU3RyZWFtQ29uc3VtZXIgSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBpZiAoIGxpbmUubGVuZ3RoKCkgPD0gMyApCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci12c3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci92c3MvY29tbWFuZHMvY2hhbmdlbG9nL1Zzc0NoYW5nZUxvZ0NvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci12c3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci92c3MvY29tbWFuZHMvY2hhbmdlbG9nL1Zzc0NoYW5nZUxvZ0NvbnN1bWVyLmphdmEKaW5kZXggN2NjMTYwYi4uMDVjNjFiNSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL2NvbW1hbmRzL2NoYW5nZWxvZy9Wc3NDaGFuZ2VMb2dDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy9jaGFuZ2Vsb2cvVnNzQ2hhbmdlTG9nQ29uc3VtZXIuamF2YQpAQCAtODYsNyArODYsNyBAQAogICAgIC8qKgogICAgICAqIE1hcmtzIHN0YXJ0IG9mIGZpbGUgZGF0YQogICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBTVEFSVF9GSUxFX1BBVEggPSAiJC8iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFSVF9GSUxFX1BBVEggPSAiJC8iOwogCiAgICAgLyoqCiAgICAgICogTWFya3Mgc3RhcnQgb2YgcmV2aXNpb24KQEAgLTEzMyw2ICsxMzMsNyBAQAogICAgICAgICByZXR1cm4gbmV3IEFycmF5TGlzdCggZW50cmllcy52YWx1ZXMoKSApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgY29uc3VtZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoIGdldExpbmVTdGF0dXMoIGxpbmUgKSApCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci12c3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci92c3MvY29tbWFuZHMvY2hhbmdlbG9nL1Zzc0hpc3RvcnlDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci12c3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci92c3MvY29tbWFuZHMvY2hhbmdlbG9nL1Zzc0hpc3RvcnlDb21tYW5kLmphdmEKaW5kZXggOTkzOGFjOS4uZjUxMmY3YSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL2NvbW1hbmRzL2NoYW5nZWxvZy9Wc3NIaXN0b3J5Q29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy9jaGFuZ2Vsb2cvVnNzSGlzdG9yeUNvbW1hbmQuamF2YQpAQCAtNDMsNiArNDMsNyBAQAogcHVibGljIGNsYXNzIFZzc0hpc3RvcnlDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdENoYW5nZUxvZ0NvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDaGFuZ2VMb2dTY21SZXN1bHQgZXhlY3V0ZUNoYW5nZUxvZ0NvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZSBzdGFydERhdGUsIERhdGUgZW5kRGF0ZSwgU2NtQnJhbmNoIGJyYW5jaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0ZVBhdHRlcm4gKQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL2NvbW1hbmRzL2NoZWNrb3V0L1Zzc0NoZWNrT3V0Q29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL2NvbW1hbmRzL2NoZWNrb3V0L1Zzc0NoZWNrT3V0Q29tbWFuZC5qYXZhCmluZGV4IDljNzg0NDcuLjg5NWJhOWQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy9jaGVja291dC9Wc3NDaGVja091dENvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci12c3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci92c3MvY29tbWFuZHMvY2hlY2tvdXQvVnNzQ2hlY2tPdXRDb21tYW5kLmphdmEKQEAgLTM5LDYgKzM5LDcgQEAKICAgICBleHRlbmRzIEFic3RyYWN0Q2hlY2tPdXRDb21tYW5kCiB7CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDaGVja091dFNjbVJlc3VsdCBleGVjdXRlQ2hlY2tPdXRDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci12c3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci92c3MvY29tbWFuZHMvY2hlY2tvdXQvVnNzQ2hlY2tPdXRDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL2NvbW1hbmRzL2NoZWNrb3V0L1Zzc0NoZWNrT3V0Q29uc3VtZXIuamF2YQppbmRleCAzNjE0MTU2Li40ZjRkYmIxIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci12c3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci92c3MvY29tbWFuZHMvY2hlY2tvdXQvVnNzQ2hlY2tPdXRDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy9jaGVja291dC9Wc3NDaGVja091dENvbnN1bWVyLmphdmEKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAvKioKICAgICAgKiBNYXJrcyBzdGFydCBvZiBmaWxlIGRhdGEKICAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgU1RBUlRfRklMRV9QQVRIID0gIiQvIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RBUlRfRklMRV9QQVRIID0gIiQvIjsKIAogICAgIC8qKgogICAgICAqIE1hcmtzIGdldHRpbmcgYSBuZXcgRmlsZQpAQCAtMTA2LDYgKzEwNiw3IEBACiAgICAgICAgIHRoaXMucmVwbyA9IHJlcG87CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgZ2V0TG9nZ2VyKCkuZGVidWcoIGxpbmUgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy9lZGl0L1Zzc0VkaXRDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci12c3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci92c3MvY29tbWFuZHMvZWRpdC9Wc3NFZGl0Q29tbWFuZC5qYXZhCmluZGV4IDFlYjRjMDQuLjhiYjllYTkgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy9lZGl0L1Zzc0VkaXRDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL2NvbW1hbmRzL2VkaXQvVnNzRWRpdENvbW1hbmQuamF2YQpAQCAtNDEsNiArNDEsNyBAQAogICAgIGV4dGVuZHMgQWJzdHJhY3RFZGl0Q29tbWFuZAogewogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU2NtUmVzdWx0IGV4ZWN1dGVFZGl0Q29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC0xMTksNyArMTIwLDcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQuY2hlY2tvdXQuQWJzdHJhY3RDaGVja091dENvbW1hbmQjZ2V0Q2hhbmdlTG9nQ29tbWFuZCgpCisgICAgICogQHJldHVybgogICAgICAqLwogICAgIHByb3RlY3RlZCBDaGFuZ2VMb2dDb21tYW5kIGdldENoYW5nZUxvZ0NvbW1hbmQoKQogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy9lZGl0L1Zzc0VkaXRDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL2NvbW1hbmRzL2VkaXQvVnNzRWRpdENvbnN1bWVyLmphdmEKaW5kZXggMzBlYzliYi4uNDE2NzI2OSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL2NvbW1hbmRzL2VkaXQvVnNzRWRpdENvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL2NvbW1hbmRzL2VkaXQvVnNzRWRpdENvbnN1bWVyLmphdmEKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAvKioKICAgICAgKiBNYXJrcyBzdGFydCBvZiBmaWxlIGRhdGEKICAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgU1RBUlRfRklMRV9QQVRIID0gIiQvIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RBUlRfRklMRV9QQVRIID0gIiQvIjsKIAogICAgIC8qKgogICAgICAqIE1hcmtzIGdldHRpbmcgYSBuZXcgRmlsZQpAQCAtMTA2LDYgKzEwNiw3IEBACiAgICAgICAgIHRoaXMucmVwbyA9IHJlcG87CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgZ2V0TG9nZ2VyKCkuZGVidWcoIGxpbmUgKTsKQEAgLTE1MSw3ICsxNTIsOCBAQAogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBwcm9jZXNzUmVwbGFjZUZpbGUoIFN0cmluZyBsaW5lICkKICAgICB7Ci0vLyAgICAgICAgdXBkYXRlZEZpbGVzLmFkZCggbmV3IFNjbUZpbGUoIGN1cnJlbnRQYXRoICsgIi8iICsgbGluZS5zdWJzdHJpbmcoU1RBUlRfQ1VSUkVOVExZX0NIRUNLRURfT1VULmxlbmd0aCgpKSwgU2NtRmlsZVN0YXR1cy5VUERBVEVEICkgKTsKKy8vICAgICAgICB1cGRhdGVkRmlsZXMuYWRkKCBuZXcgU2NtRmlsZSggY3VycmVudFBhdGggKyAiLyIgKyBsaW5lLnN1YnN0cmluZyhTVEFSVF9DVVJSRU5UTFlfQ0hFQ0tFRF9PVVQubGVuZ3RoKCkpLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFNjbUZpbGVTdGF0dXMuVVBEQVRFRCApICk7CiAgICAgICAgIGdldExvZ2dlcigpLmluZm8oCiAgICAgICAgICAgICBTVEFSVF9DVVJSRU5UTFlfQ0hFQ0tFRF9PVVQgKyBjdXJyZW50UGF0aCArICIvIiArIGxpbmUuc3Vic3RyaW5nKCBTVEFSVF9DVVJSRU5UTFlfQ0hFQ0tFRF9PVVQubGVuZ3RoKCkgKSApOwogICAgIH0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy9zdGF0dXMvVnNzU3RhdHVzQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL2NvbW1hbmRzL3N0YXR1cy9Wc3NTdGF0dXNDb21tYW5kLmphdmEKaW5kZXggZjU2N2UwZi4uNTExMDZmMCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL2NvbW1hbmRzL3N0YXR1cy9Wc3NTdGF0dXNDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL2NvbW1hbmRzL3N0YXR1cy9Wc3NTdGF0dXNDb21tYW5kLmphdmEKQEAgLTM5LDYgKzM5LDcgQEAKIHB1YmxpYyBjbGFzcyBWc3NTdGF0dXNDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdFN0YXR1c0NvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTdGF0dXNTY21SZXN1bHQgZXhlY3V0ZVN0YXR1c0NvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtMTE5LDcgKzEyMCw3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLnVwZGF0ZS5BYnN0cmFjdFVwZGF0ZUNvbW1hbmQjZ2V0Q2hhbmdlTG9nQ29tbWFuZCgpCisgICAgICogQHJldHVybgogICAgICAqLwogICAgIHByb3RlY3RlZCBDaGFuZ2VMb2dDb21tYW5kIGdldENoYW5nZUxvZ0NvbW1hbmQoKQogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy9zdGF0dXMvVnNzU3RhdHVzQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy9zdGF0dXMvVnNzU3RhdHVzQ29uc3VtZXIuamF2YQppbmRleCA0OGFkNjQyLi4zZTlkNWRhIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci12c3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci92c3MvY29tbWFuZHMvc3RhdHVzL1Zzc1N0YXR1c0NvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL2NvbW1hbmRzL3N0YXR1cy9Wc3NTdGF0dXNDb25zdW1lci5qYXZhCkBAIC0xMTQsNiArMTE0LDcgQEAKICAgICAgICAgdGhpcy5maWxlU2V0ID0gZmlsZVNldDsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci12c3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci92c3MvY29tbWFuZHMvdXBkYXRlL1Zzc1VwZGF0ZUNvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy91cGRhdGUvVnNzVXBkYXRlQ29tbWFuZC5qYXZhCmluZGV4IGNmYzlkNDUuLmZmNWNmYTUgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy91cGRhdGUvVnNzVXBkYXRlQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy91cGRhdGUvVnNzVXBkYXRlQ29tbWFuZC5qYXZhCkBAIC0xLDIzICsxLDI0IEBACiBwYWNrYWdlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLnZzcy5jb21tYW5kcy51cGRhdGU7CiAKIC8qCi0qIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0qIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0qIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0qIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSoKLSogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0qCi0qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0qIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0qIHVuZGVyIHRoZSBMaWNlbnNlLgotKi8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKIAogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0OwpAQCAtNDEsNiArNDIsNyBAQAogICAgIGV4dGVuZHMgQWJzdHJhY3RVcGRhdGVDb21tYW5kCiB7CiAgICAgLy8gVE9ETyBoYW5kbGUgZGVsZXRlZCBmaWxlcyBmcm9tIFZTUworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFVwZGF0ZVNjbVJlc3VsdCBleGVjdXRlVXBkYXRlQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC0xMTcsOSArMTE5LDkgQEAKICAgICAgICAgLy9JZ25vcmU6IERvIG5vdCBhc2sgZm9yIGlucHV0IHVuZGVyIGFueSBjaXJjdW1zdGFuY2VzLgogICAgICAgICBjb21tYW5kLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIFZzc0NvbnN0YW50cy5GTEFHX0FVVE9SRVNQT05TRV9ERUYgKTsKIAotICAgICAgICAvLyBGSVhNRSBVcGRhdGUgY29tbWFuZCBvbmx5IHdvcmtzIGlmIHRoZXJlIGlzIG5vIGZpbGUgY2hlY2tlZCBvdXQgCi0gICAgICAgIC8vIG9yIG5vIGZpbGUgaXMgZGlydHkgbG9jYWxseS4gSXQncyBiZXR0ZXIgdGhhbiBvdmVyd3JpdGluZyAKLSAgICAgICAgLy8gY2hlY2tlZCBvdXQgZmlsZXMgCisgICAgICAgIC8vIEZJWE1FIFVwZGF0ZSBjb21tYW5kIG9ubHkgd29ya3MgaWYgdGhlcmUgaXMgbm8gZmlsZSBjaGVja2VkIG91dAorICAgICAgICAvLyBvciBubyBmaWxlIGlzIGRpcnR5IGxvY2FsbHkuIEl0J3MgYmV0dGVyIHRoYW4gb3ZlcndyaXRpbmcKKyAgICAgICAgLy8gY2hlY2tlZCBvdXQgZmlsZXMKICAgICAgICAgLy9JZ25vcmU6IERvIG5vdCB0b3VjaCBsb2NhbCB3cml0YWJsZSBmaWxlcy4KICAgICAgICAgY29tbWFuZC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCBWc3NDb25zdGFudHMuRkxBR19TS0lQX1dSSVRBQkxFICk7CiAvLyAgICAgICAgY29tbWFuZC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCBWc3NDb25zdGFudHMuRkxBR19SRVBMQUNFX1dSSVRBQkxFICk7CkBAIC0xMzAsOSArMTMyLDcgQEAKICAgICAgICAgcmV0dXJuIGNvbW1hbmQ7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLnVwZGF0ZS5BYnN0cmFjdFVwZGF0ZUNvbW1hbmQjZ2V0Q2hhbmdlTG9nQ29tbWFuZCgpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hhbmdlTG9nQ29tbWFuZCBnZXRDaGFuZ2VMb2dDb21tYW5kKCkKICAgICB7CiAgICAgICAgIFZzc0hpc3RvcnlDb21tYW5kIGNvbW1hbmQgPSBuZXcgVnNzSGlzdG9yeUNvbW1hbmQoKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy91cGRhdGUvVnNzVXBkYXRlQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3Zzcy9jb21tYW5kcy91cGRhdGUvVnNzVXBkYXRlQ29uc3VtZXIuamF2YQppbmRleCBhMTcxNDAwLi40MTY5MDc0IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci12c3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci92c3MvY29tbWFuZHMvdXBkYXRlL1Zzc1VwZGF0ZUNvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItdnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvdnNzL2NvbW1hbmRzL3VwZGF0ZS9Wc3NVcGRhdGVDb25zdW1lci5qYXZhCkBAIC03Miw3ICs3Miw3IEBACiAgICAgLyoqCiAgICAgICogTWFya3Mgc3RhcnQgb2YgZmlsZSBkYXRhCiAgICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFNUQVJUX0ZJTEVfUEFUSCA9ICIkLyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNUQVJUX0ZJTEVfUEFUSCA9ICIkLyI7CiAKICAgICAvKioKICAgICAgKiBNYXJrcyBnZXR0aW5nIGEgbmV3IEZpbGUKQEAgLTEwNiw2ICsxMDYsNyBAQAogICAgICAgICB0aGlzLnJlcG8gPSByZXBvOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgY29uc3VtZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIGdldExvZ2dlcigpLmRlYnVnKCBsaW5lICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci12c3Mvc3JjL3NpdGUvc2l0ZS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlci12c3Mvc3JjL3NpdGUvc2l0ZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdhNjNiNQotLS0gL2Rldi9udWxsCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLXZzcy9zcmMvc2l0ZS9zaXRlLnhtbApAQCAtMCwwICsxLDMyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+CisKKzwhLS0KKyAgfiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgIH4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgIH4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgfiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIH4gdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICB+ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgfiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICB+IHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgIH4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIH4gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIH4gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICB+IHVuZGVyIHRoZSBMaWNlbnNlLgorICAtLT4KKworPHByb2plY3QgbmFtZT0iTWF2ZW4gU0NNIFZTUyBQcm92aWRlciI+CisgIDxib2R5PgorICAgIDxtZW51IHJlZj0icGFyZW50IiAvPgorCisgICAgPG1lbnUgbmFtZT0iT3ZlcnZpZXciPgorICAgICAgPGl0ZW0gbmFtZT0iSW50cm9kdWN0aW9uIiBocmVmPSJpbmRleC5odG1sIi8+CisgICAgPC9tZW51PgorCisgICAgPG1lbnUgcmVmPSJyZXBvcnRzIiBpbmhlcml0PSJib3R0b20iIC8+CisgIDwvYm9keT4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3BvbS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9wb20ueG1sCmluZGV4IGUyOWU5ODEuLjJhY2IxYWMgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3BvbS54bWwKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvcG9tLnhtbApAQCAtMSw0ICsxLDYgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCEtLQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPCEtLQogICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKICAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKICAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpAQCAtMTgsMTUgKzIwLDI3IEBACiAgIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxwYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVycy1jdnM8L2FydGlmYWN0SWQ+CiAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVycy1jdnM8L2FydGlmYWN0SWQ+CiAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgogICA8L3BhcmVudD4KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9uczwvYXJ0aWZhY3RJZD4KKwogICA8bmFtZT5NYXZlbiBTQ00gQ1ZTIFByb3ZpZGVyIC0gQ29tbW9uIGxpYnJhcnk8L25hbWU+Ci0gIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KKyAgPGRlc2NyaXB0aW9uPkNvbW1vbiBsaWJyYXJ5IGZvciBTQ00gQ1ZTIFByb3ZpZGVyLjwvZGVzY3JpcHRpb24+CisKKyAgPGRlcGVuZGVuY2llcz4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLWN2c3Rlc3Q8L2FydGlmYWN0SWQ+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorICA8L2RlcGVuZGVuY2llcz4KKwogICA8YnVpbGQ+CiAgICAgPHBsdWdpbnM+CiAgICAgICA8cGx1Z2luPgpAQCAtNDgsMTIgKzYyLDQgQEAKICAgICAgIDwvcGx1Z2luPgogICAgIDwvcGx1Z2lucz4KICAgPC9idWlsZD4KLSAgPGRlcGVuZGVuY2llcz4KLSAgICA8ZGVwZW5kZW5jeT4KLSAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgotICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLWN2c3Rlc3Q8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+Ci0gICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgPC9kZXBlbmRlbmN5PgotICA8L2RlcGVuZGVuY2llcz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL0Fic3RyYWN0Q3ZzU2NtUHJvdmlkZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL0Fic3RyYWN0Q3ZzU2NtUHJvdmlkZXIuamF2YQppbmRleCAwYTg3Nzk3Li5hYTI3NDQxIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9BYnN0cmFjdEN2c1NjbVByb3ZpZGVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvQWJzdHJhY3RDdnNTY21Qcm92aWRlci5qYXZhCkBAIC02MCwzNSArNjAsMzkgQEAKICAgICBleHRlbmRzIEFic3RyYWN0U2NtUHJvdmlkZXIKIHsKICAgICAvKiogKi8KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBUUkFOU1BPUlRfTE9DQUwgPSAibG9jYWwiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQU5TUE9SVF9MT0NBTCA9ICJsb2NhbCI7CiAKICAgICAvKiogKi8KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBUUkFOU1BPUlRfUFNFUlZFUiA9ICJwc2VydmVyIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFOU1BPUlRfUFNFUlZFUiA9ICJwc2VydmVyIjsKIAogICAgIC8qKiAqLwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFRSQU5TUE9SVF9MU0VSVkVSID0gImxzZXJ2ZXIiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQU5TUE9SVF9MU0VSVkVSID0gImxzZXJ2ZXIiOwogCiAgICAgLyoqICovCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgVFJBTlNQT1JUX0VYVCA9ICJleHQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQU5TUE9SVF9FWFQgPSAiZXh0IjsKIAogICAgIC8qKiAqLwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFRSQU5TUE9SVF9TU1BJID0gInNzcGkiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQU5TUE9SVF9TU1BJID0gInNzcGkiOwogCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqCisgICAgICogSW50ZXJuYWwgY2xhc3MKKyAgICAgKi8KICAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTY21VcmxQYXJzZXJSZXN1bHQKICAgICB7Ci0gICAgICAgIExpc3QgbWVzc2FnZXMgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgICAgIHByaXZhdGUgTGlzdCBtZXNzYWdlcyA9IG5ldyBBcnJheUxpc3QoKTsKIAotICAgICAgICBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeTsKKyAgICAgICAgcHJpdmF0ZSBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeTsKICAgICB9CiAKICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgLy8gU2NtUHJvdmlkZXIgSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2NtU3BlY2lmaWNGaWxlbmFtZSgpCiAgICAgewogICAgICAgICByZXR1cm4gIkNWUyI7CkBAIC0xMDMsMTEgKzEwNyw3IEBACiAgICAgKiBmb3IgZXhhbXBsZSBieSBzdGFydGluZyB3aXRoIGAuJywgcmF0aGVyIHRoYW4gYmVpbmcgbmFtZWQgYW5hbG9nb3VzbHkKICAgICAqIHRvIEJBU0UgYW5kIEhFQUQsIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIGFjdHVhbCB0YWcgbmFtZXMuIgogICAgICovCi0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjc2FuaXRpemVUYWdOYW1lKGphdmEubGFuZy5TdHJpbmcpCi0gICAgKi8KLQorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBzYW5pdGl6ZVRhZ05hbWUoIFN0cmluZyBhcmcwICkKICAgICB7CiAgICAgICAgIGlmICggdmFsaWRhdGVUYWdOYW1lKCBhcmcwICkgKQpAQCAtMTI2LDE0ICsxMjYsMTMgQEAKICAgICAgICAgcmV0dXJuIGFyZzAucmVwbGFjZUFsbCggIlteQS1aYS16MC05Xy1dIiwgIl8iICk7CiAgICAgfQogCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI3ZhbGlkYXRlVGFnTmFtZShqYXZhLmxhbmcuU3RyaW5nKQotICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVRhZ05hbWUoIFN0cmluZyBhcmcwICkKICAgICB7CiAgICAgICAgIHJldHVybiAoIGFyZzAubWF0Y2hlcyggIltBLVphLXpdW0EtWmEtejAtOV8tXSoiICkgJiYgIWFyZzAuZXF1YWxzKCAiSEVBRCIgKSAmJiAhYXJnMC5lcXVhbHMoICJCQVNFIiApICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU2NtUHJvdmlkZXJSZXBvc2l0b3J5IG1ha2VQcm92aWRlclNjbVJlcG9zaXRvcnkoIFN0cmluZyBzY21TcGVjaWZpY1VybCwgY2hhciBkZWxpbWl0ZXIgKQogICAgICAgICB0aHJvd3MgU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbgogICAgIHsKQEAgLTE0Nyw5ICsxNDYsNyBAQAogICAgICAgICByZXR1cm4gcmVzdWx0LnJlcG9zaXRvcnk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI21ha2VQcm92aWRlclNjbVJlcG9zaXRvcnkoamF2YS5pby5GaWxlKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSBtYWtlUHJvdmlkZXJTY21SZXBvc2l0b3J5KCBGaWxlIHBhdGggKQogICAgICAgICB0aHJvd3MgU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbiwgVW5rbm93blJlcG9zaXRvcnlTdHJ1Y3R1cmUKICAgICB7CkBAIC0xOTMsNiArMTkwLDcgQEAKICAgICAgICAgcmV0dXJuIG1ha2VQcm92aWRlclNjbVJlcG9zaXRvcnkoIGN2c1Jvb3QgKyAiOiIgKyBtb2R1bGUsICc6JyApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIExpc3QgdmFsaWRhdGVTY21VcmwoIFN0cmluZyBzY21TcGVjaWZpY1VybCwgY2hhciBkZWxpbWl0ZXIgKQogICAgIHsKICAgICAgICAgU2NtVXJsUGFyc2VyUmVzdWx0IHJlc3VsdCA9IHBhcnNlU2NtVXJsKCBzY21TcGVjaWZpY1VybCwgZGVsaW1pdGVyICk7CkBAIC0yMDAsNiArMTk4LDcgQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdC5tZXNzYWdlczsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2NtVHlwZSgpCiAgICAgewogICAgICAgICByZXR1cm4gImN2cyI7CkBAIC0yMzEsOCArMjMwLDggQEAKICAgICAgICAgICAgIC8vIHVzZSB0aGUgbG9jYWwgcmVwb3NpdG9yeSBkaXJlY3RvcnkgZWcuICcvaG9tZS9jdnNwdWJsaWMnCiAgICAgICAgICAgICBjdnNyb290ID0gdG9rZW5zWzFdOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCB0cmFuc3BvcnQuZXF1YWxzSWdub3JlQ2FzZSggVFJBTlNQT1JUX1BTRVJWRVIgKSB8fCB0cmFuc3BvcnQuZXF1YWxzSWdub3JlQ2FzZSggVFJBTlNQT1JUX0xTRVJWRVIgKSB8fAotICAgICAgICAgICAgdHJhbnNwb3J0LmVxdWFsc0lnbm9yZUNhc2UoIFRSQU5TUE9SVF9FWFQgKSB8fCB0cmFuc3BvcnQuZXF1YWxzSWdub3JlQ2FzZSggVFJBTlNQT1JUX1NTUEkgKSApCisgICAgICAgIGVsc2UgaWYgKCB0cmFuc3BvcnQuZXF1YWxzSWdub3JlQ2FzZSggVFJBTlNQT1JUX1BTRVJWRVIgKSB8fCB0cmFuc3BvcnQuZXF1YWxzSWdub3JlQ2FzZSggVFJBTlNQT1JUX0xTRVJWRVIgKQorICAgICAgICAgICAgfHwgdHJhbnNwb3J0LmVxdWFsc0lnbm9yZUNhc2UoIFRSQU5TUE9SVF9FWFQgKSB8fCB0cmFuc3BvcnQuZXF1YWxzSWdub3JlQ2FzZSggVFJBTlNQT1JUX1NTUEkgKSApCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICggdG9rZW5zLmxlbmd0aCAhPSA0ICYmIHRyYW5zcG9ydC5lcXVhbHNJZ25vcmVDYXNlKCBUUkFOU1BPUlRfRVhUICkgKQogICAgICAgICAgICAgewpAQCAtNDQxLDE0ICs0NDAsMTQgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gbm8gcG9ydCBzcGVjaWZpZWQKLSAgICAgICAgICAgIGlmICggdG9rZW5zLmxlbmd0aCA9PSA0ICkgCisgICAgICAgICAgICBpZiAoIHRva2Vucy5sZW5ndGggPT0gNCApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcGF0aCA9IHRva2Vuc1syXTsKICAgICAgICAgICAgICAgICBtb2R1bGUgPSB0b2tlbnNbM107CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAJLy8gZ2V0dGluZyBwb3J0CisgICAgICAgICAgICAgICAgLy8gZ2V0dGluZyBwb3J0CiAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBwb3J0ID0gbmV3IEludGVnZXIoIHRva2Vuc1syXSApLmludFZhbHVlKCk7CkBAIC00NjYsNyArNDY1LDcgQEAKIAogICAgICAgICAgICAgLy8gY3Zzcm9vdCBmb3JtYXQgaXMgOnNzcGk6aG9zdDpwYXRoCiAgICAgICAgICAgICBjdnNyb290ID0gIjoiICsgdHJhbnNwb3J0ICsgIjoiICsgaG9zdCArICI6IjsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoIHBvcnQgIT0gLTEgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGN2c3Jvb3QgKz0gcG9ydDsKQEAgLTU3NSwyNyArNTc0LDIxIEBACiAKICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgQ29tbWFuZCBnZXRVcGRhdGVDb21tYW5kKCk7CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjYWRkKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEFkZFNjbVJlc3VsdCBhZGQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gKEFkZFNjbVJlc3VsdCkgZXhlY3V0ZUNvbW1hbmQoIGdldEFkZENvbW1hbmQoKSwgcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciN0YWcob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQnJhbmNoU2NtUmVzdWx0IGJyYW5jaCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiAoQnJhbmNoU2NtUmVzdWx0KSBleGVjdXRlQ29tbWFuZCggZ2V0QnJhbmNoQ29tbWFuZCgpLCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI2NoYW5nZWxvZyhvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGFuZ2VMb2dTY21SZXN1bHQgY2hhbmdlbG9nKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtNjAzLDkgKzU5Niw3IEBACiAgICAgICAgIHJldHVybiAoQ2hhbmdlTG9nU2NtUmVzdWx0KSBleGVjdXRlQ29tbWFuZCggZ2V0Q2hhbmdlTG9nQ29tbWFuZCgpLCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI2NoZWNraW4ob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hlY2tJblNjbVJlc3VsdCBjaGVja2luKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC02MTMsOSArNjA0LDcgQEAKICAgICAgICAgcmV0dXJuIChDaGVja0luU2NtUmVzdWx0KSBleGVjdXRlQ29tbWFuZCggZ2V0Q2hlY2tJbkNvbW1hbmQoKSwgcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciNjaGVja291dChvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGVja091dFNjbVJlc3VsdCBjaGVja291dCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC02MjMsMTggKzYxMiwxNCBAQAogICAgICAgICByZXR1cm4gKENoZWNrT3V0U2NtUmVzdWx0KSBleGVjdXRlQ29tbWFuZCggZ2V0Q2hlY2tPdXRDb21tYW5kKCksIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjZGlmZihvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBEaWZmU2NtUmVzdWx0IGRpZmYoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gKERpZmZTY21SZXN1bHQpIGV4ZWN1dGVDb21tYW5kKCBnZXREaWZmQ29tbWFuZCgpLCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI2V4cG9ydChvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBFeHBvcnRTY21SZXN1bHQgZXhwb3J0KCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtNjQyLDU0ICs2MjcsNDIgQEAKICAgICAgICAgcmV0dXJuIChFeHBvcnRTY21SZXN1bHQpIGV4ZWN1dGVDb21tYW5kKCBnZXRFeHBvcnRDb21tYW5kKCksIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjbG9naW4ob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgTG9naW5TY21SZXN1bHQgbG9naW4oIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gKExvZ2luU2NtUmVzdWx0KSBleGVjdXRlQ29tbWFuZCggZ2V0TG9naW5Db21tYW5kKCksIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjcmVtb3ZlKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFJlbW92ZVNjbVJlc3VsdCByZW1vdmUoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gKFJlbW92ZVNjbVJlc3VsdCkgZXhlY3V0ZUNvbW1hbmQoIGdldFJlbW92ZUNvbW1hbmQoKSwgcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciNzdGF0dXMob3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQsb3JnLmFwYWNoZS5tYXZlbi5zY20uQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RhdHVzU2NtUmVzdWx0IHN0YXR1cyggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiAoU3RhdHVzU2NtUmVzdWx0KSBleGVjdXRlQ29tbWFuZCggZ2V0U3RhdHVzQ29tbWFuZCgpLCByZXBvc2l0b3J5LCBmaWxlU2V0LCBwYXJhbWV0ZXJzICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5BYnN0cmFjdFNjbVByb3ZpZGVyI3RhZyhvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5TY21Qcm92aWRlclJlcG9zaXRvcnksb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZVNldCxvcmcuYXBhY2hlLm1hdmVuLnNjbS5Db21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBUYWdTY21SZXN1bHQgdGFnKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIChUYWdTY21SZXN1bHQpIGV4ZWN1dGVDb21tYW5kKCBnZXRUYWdDb21tYW5kKCksIHJlcG9zaXRvcnksIGZpbGVTZXQsIHBhcmFtZXRlcnMgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjdXBkYXRlKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gKFVwZGF0ZVNjbVJlc3VsdCkgZXhlY3V0ZUNvbW1hbmQoIGdldFVwZGF0ZUNvbW1hbmQoKSwgcmVwb3NpdG9yeSwgZmlsZVNldCwgcGFyYW1ldGVycyApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciNsaXN0KG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIExpc3RTY21SZXN1bHQgbGlzdCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2FkZC9BYnN0cmFjdEN2c0FkZENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvYWRkL0Fic3RyYWN0Q3ZzQWRkQ29tbWFuZC5qYXZhCmluZGV4IGI0NWFlOTEuLmY5ZDc0YzcgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvYWRkL0Fic3RyYWN0Q3ZzQWRkQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvYWRkL0Fic3RyYWN0Q3ZzQWRkQ29tbWFuZC5qYXZhCkBAIC00NSw2ICs0NSw3IEBACiAgICAgZXh0ZW5kcyBBYnN0cmFjdEFkZENvbW1hbmQKICAgICBpbXBsZW1lbnRzIEN2c0NvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTY21SZXN1bHQgZXhlY3V0ZUFkZENvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvLCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyBtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gYmluYXJ5ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9icmFuY2gvQWJzdHJhY3RDdnNCcmFuY2hDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2JyYW5jaC9BYnN0cmFjdEN2c0JyYW5jaENvbW1hbmQuamF2YQppbmRleCA3ODMzNGY1Li4xMDFhMjEyIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2JyYW5jaC9BYnN0cmFjdEN2c0JyYW5jaENvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2JyYW5jaC9BYnN0cmFjdEN2c0JyYW5jaENvbW1hbmQuamF2YQpAQCAtMzgsNiArMzgsNyBAQAogICAgIGV4dGVuZHMgQWJzdHJhY3RCcmFuY2hDb21tYW5kCiAgICAgaW1wbGVtZW50cyBDdnNDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU2NtUmVzdWx0IGV4ZWN1dGVCcmFuY2hDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgYnJhbmNoTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvY2hhbmdlbG9nL0Fic3RyYWN0Q3ZzQ2hhbmdlTG9nQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9jaGFuZ2Vsb2cvQWJzdHJhY3RDdnNDaGFuZ2VMb2dDb21tYW5kLmphdmEKaW5kZXggOWFkNGRkZC4uMzIyYmJhYSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9jaGFuZ2Vsb2cvQWJzdHJhY3RDdnNDaGFuZ2VMb2dDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9jaGFuZ2Vsb2cvQWJzdHJhY3RDdnNDaGFuZ2VMb2dDb21tYW5kLmphdmEKQEAgLTQ1LDYgKzQ1LDcgQEAKICAgICBleHRlbmRzIEFic3RyYWN0Q2hhbmdlTG9nQ29tbWFuZAogICAgIGltcGxlbWVudHMgQ3ZzQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENoYW5nZUxvZ1NjbVJlc3VsdCBleGVjdXRlQ2hhbmdlTG9nQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHN0YXJ0VmVyc2lvbiwgU2NtVmVyc2lvbiBlbmRWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRlUGF0dGVybiApCkBAIC01Myw2ICs1NCw3IEBACiAgICAgICAgIHJldHVybiBleGVjdXRlQ2hhbmdlTG9nQ29tbWFuZCggcmVwbywgZmlsZVNldCwgbnVsbCwgbnVsbCwgbnVsbCwgc3RhcnRWZXJzaW9uLCBlbmRWZXJzaW9uLCBkYXRlUGF0dGVybiApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENoYW5nZUxvZ1NjbVJlc3VsdCBleGVjdXRlQ2hhbmdlTG9nQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlIHN0YXJ0RGF0ZSwgRGF0ZSBlbmREYXRlLCBTY21CcmFuY2ggYnJhbmNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRlUGF0dGVybiApCkBAIC05Nyw4ICs5OSw4IEBACiAKICAgICAgICAgaWYgKCBzdGFydFZlcnNpb24gIT0gbnVsbCAmJiBTdHJpbmdVdGlscy5pc05vdEVtcHR5KCBzdGFydFZlcnNpb24uZ2V0TmFtZSgpICkgKQogICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcGFyYW0gPSAiLXIiICsgc3RhcnRWZXJzaW9uLmdldE5hbWUoKSArICI6OiIgKwotICAgICAgICAgICAgICAgICggZW5kVmVyc2lvbiAhPSBudWxsICYmIFN0cmluZ1V0aWxzLmlzTm90RW1wdHkoIGVuZFZlcnNpb24uZ2V0TmFtZSgpICkgPyBlbmRWZXJzaW9uLmdldE5hbWUoKSA6ICIiICk7CisgICAgICAgICAgICBTdHJpbmcgcGFyYW0gPSAiLXIiICsgc3RhcnRWZXJzaW9uLmdldE5hbWUoKSArICI6IgorICAgICAgICAgICAgICAgICsgKCBlbmRWZXJzaW9uICE9IG51bGwgJiYgU3RyaW5nVXRpbHMuaXNOb3RFbXB0eSggZW5kVmVyc2lvbi5nZXROYW1lKCkgKSA/IGVuZFZlcnNpb24uZ2V0TmFtZSgpIDogIiIgKTsKIAogICAgICAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggcGFyYW0gKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9jaGFuZ2Vsb2cvQ3ZzQ2hhbmdlTG9nQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvY2hhbmdlbG9nL0N2c0NoYW5nZUxvZ0NvbnN1bWVyLmphdmEKaW5kZXggMDcyMTA1OS4uMTkxMTFjNCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9jaGFuZ2Vsb2cvQ3ZzQ2hhbmdlTG9nQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2NoYW5nZWxvZy9DdnNDaGFuZ2VMb2dDb25zdW1lci5qYXZhCkBAIC0xNTIsMTQgKzE1MiwxNSBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGFyZUVxdWFsKCBDaGFuZ2VTZXQgc2V0MSwgQ2hhbmdlU2V0IHNldDIgKQogICAgIHsKLSAgICAgICAgaWYgKCBzZXQxLmdldEF1dGhvcigpLmVxdWFscyggc2V0Mi5nZXRBdXRob3IoKSApICYmIHNldDEuZ2V0Q29tbWVudCgpLmVxdWFscyggc2V0Mi5nZXRDb21tZW50KCkgKSAmJgotICAgICAgICAgICAgc2V0MS5nZXREYXRlKCkuZXF1YWxzKCBzZXQyLmdldERhdGUoKSApICkKKyAgICAgICAgaWYgKCBzZXQxLmdldEF1dGhvcigpLmVxdWFscyggc2V0Mi5nZXRBdXRob3IoKSApICYmIHNldDEuZ2V0Q29tbWVudCgpLmVxdWFscyggc2V0Mi5nZXRDb21tZW50KCkgKQorICAgICAgICAgICAgJiYgc2V0MS5nZXREYXRlKCkuZXF1YWxzKCBzZXQyLmdldERhdGUoKSApICkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgY29uc3VtZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIGdldExvZ2dlcigpLmRlYnVnKCBsaW5lICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2NoZWNraW4vQWJzdHJhY3RDdnNDaGVja0luQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9jaGVja2luL0Fic3RyYWN0Q3ZzQ2hlY2tJbkNvbW1hbmQuamF2YQppbmRleCBjY2Q4MzY4Li42MTk5ODIwIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2NoZWNraW4vQWJzdHJhY3RDdnNDaGVja0luQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvY2hlY2tpbi9BYnN0cmFjdEN2c0NoZWNrSW5Db21tYW5kLmphdmEKQEAgLTQ0LDYgKzQ0LDcgQEAKICAgICBleHRlbmRzIEFic3RyYWN0Q2hlY2tJbkNvbW1hbmQKICAgICBpbXBsZW1lbnRzIEN2c0NvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDaGVja0luU2NtUmVzdWx0IGV4ZWN1dGVDaGVja0luQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2NoZWNraW4vQ3ZzQ2hlY2tJbkNvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2NoZWNraW4vQ3ZzQ2hlY2tJbkNvbnN1bWVyLmphdmEKaW5kZXggZjdlZTAyZS4uMWJkZTQ3NiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9jaGVja2luL0N2c0NoZWNrSW5Db25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvY2hlY2tpbi9DdnNDaGVja0luQ29uc3VtZXIuamF2YQpAQCAtNTEsNiArNTEsNyBAQAogICAgIC8vIFN0cmVhbUNvbnN1bWVyIEltcGxlbWVudGF0aW9uCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgLyoKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvY2hlY2tvdXQvQWJzdHJhY3RDdnNDaGVja091dENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvY2hlY2tvdXQvQWJzdHJhY3RDdnNDaGVja091dENvbW1hbmQuamF2YQppbmRleCAxYmIyNjkxLi4wNGQwZDllIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2NoZWNrb3V0L0Fic3RyYWN0Q3ZzQ2hlY2tPdXRDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9jaGVja291dC9BYnN0cmFjdEN2c0NoZWNrT3V0Q29tbWFuZC5qYXZhCkBAIC00Myw2ICs0Myw3IEBACiAgICAgZXh0ZW5kcyBBYnN0cmFjdENoZWNrT3V0Q29tbWFuZAogICAgIGltcGxlbWVudHMgQ3ZzQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENoZWNrT3V0U2NtUmVzdWx0IGV4ZWN1dGVDaGVja091dENvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvLCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbVZlcnNpb24gdmVyc2lvbiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvY2hlY2tvdXQvQ3ZzQ2hlY2tPdXRDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9jaGVja291dC9DdnNDaGVja091dENvbnN1bWVyLmphdmEKaW5kZXggZmJlNjMyMC4uYWEwNDk5ZiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9jaGVja291dC9DdnNDaGVja091dENvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9jaGVja291dC9DdnNDaGVja091dENvbnN1bWVyLmphdmEKQEAgLTQ0LDYgKzQ0LDcgQEAKICAgICAgICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgbG9nZ2VyLmRlYnVnKCBsaW5lICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2RpZmYvQWJzdHJhY3RDdnNEaWZmQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9kaWZmL0Fic3RyYWN0Q3ZzRGlmZkNvbW1hbmQuamF2YQppbmRleCAzMTAwOWZjLi5jOTEyZmJmIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2RpZmYvQWJzdHJhY3RDdnNEaWZmQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvZGlmZi9BYnN0cmFjdEN2c0RpZmZDb21tYW5kLmphdmEKQEAgLTM5LDYgKzM5LDcgQEAKICAgICBleHRlbmRzIEFic3RyYWN0RGlmZkNvbW1hbmQKICAgICBpbXBsZW1lbnRzIEN2c0NvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBEaWZmU2NtUmVzdWx0IGV4ZWN1dGVEaWZmQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbVZlcnNpb24gc3RhcnRSZXZpc2lvbiwgU2NtVmVyc2lvbiBlbmRSZXZpc2lvbiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvZGlmZi9DdnNEaWZmQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvZGlmZi9DdnNEaWZmQ29uc3VtZXIuamF2YQppbmRleCA0NmFmMGU0Li5jNzIyZGM2IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2RpZmYvQ3ZzRGlmZkNvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9kaWZmL0N2c0RpZmZDb25zdW1lci5qYXZhCkBAIC00MSwzNiArNDEsMzcgQEAKICAgICAvLwogICAgIC8vIEluZGV4OiBwbHVnaW4uamVsbHkKICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgLy8gUkNTIGZpbGU6IC9ob21lL2N2cy9tYXZlbi1zY20vbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9wbGV4dXMvY29tcG9uZW50cy54bWwsdgorICAgIC8vIFJDUyBmaWxlOiAvaG9tZS9jdnMvbWF2ZW4tc2NtL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy8KKyAgICAvLyAgICAgICAgICAgc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3BsZXh1cy9jb21wb25lbnRzLnhtbCx2CiAgICAgLy8gcmV0cmlldmluZyByZXZpc2lvbiAxLjIKICAgICAvLyBkaWZmIC11IC1yMS4yIGNvbXBvbmVudHMueG1sCiAgICAgLy8gLS0tIHBsdWdpbi5qZWxseSAgICAgICAgKHJldmlzaW9uIDEyNDc5OSkKICAgICAvLyArKysgcGx1Z2luLmplbGx5ICAgICAgICAod29ya2luZyBjb3B5KQogICAgIC8vCiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkNTX1RPS0VOID0gIlJDUyBmaWxlOiAiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSQ1NfVE9LRU4gPSAiUkNTIGZpbGU6ICI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVUUklFVklOR19UT0tFTiA9ICJyZXRyaWV2aW5nIHJldmlzaW9uICI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFVFJJRVZJTkdfVE9LRU4gPSAicmV0cmlldmluZyByZXZpc2lvbiAiOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIERJRkZfVE9LRU4gPSAiZGlmZiAiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBESUZGX1RPS0VOID0gImRpZmYgIjsKIAotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBJTkRFWF9UT0tFTiA9ICJJbmRleDogIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5ERVhfVE9LRU4gPSAiSW5kZXg6ICI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgRklMRV9TRVBBUkFUT1JfVE9LRU4gPSAiPT09IjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRV9TRVBBUkFUT1JfVE9LRU4gPSAiPT09IjsKIAotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBTVEFSVF9SRVZJU0lPTl9UT0tFTiA9ICItLS0iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFSVF9SRVZJU0lPTl9UT0tFTiA9ICItLS0iOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEVORF9SRVZJU0lPTl9UT0tFTiA9ICIrKysiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTkRfUkVWSVNJT05fVE9LRU4gPSAiKysrIjsKIAotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBBRERFRF9MSU5FX1RPS0VOID0gIisiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBRERFRF9MSU5FX1RPS0VOID0gIisiOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTU9WRURfTElORV9UT0tFTiA9ICItIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVNT1ZFRF9MSU5FX1RPS0VOID0gIi0iOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFVOQ0hBTkdFRF9MSU5FX1RPS0VOID0gIiAiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVTkNIQU5HRURfTElORV9UT0tFTiA9ICIgIjsKIAotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBDSEFOR0VfU0VQQVJBVE9SX1RPS0VOID0gIkBAIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0hBTkdFX1NFUEFSQVRPUl9UT0tFTiA9ICJAQCI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTk9fTkVXTElORV9UT0tFTiA9ICJcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9fTkVXTElORV9UT0tFTiA9ICJcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlIjsKIAogICAgIHByaXZhdGUgU2NtTG9nZ2VyIGxvZ2dlcjsKIApAQCAtOTcsNiArOTgsNyBAQAogICAgIC8vIFN0cmVhbUNvbnN1bWVyIEltcGxlbWVudGF0aW9uCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgbG9nZ2VyLmRlYnVnKCBsaW5lICk7CkBAIC0xNTEsOSArMTUzLDkgQEAKICAgICAgICAgewogICAgICAgICAgICAgLy8gc2tpcCwgdGhvdWdoIGNvdWxkIHBhcnNlIHRvIHZlcmlmeSBjb21tYW5kCiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIGxpbmUuc3RhcnRzV2l0aCggQURERURfTElORV9UT0tFTiApIHx8IGxpbmUuc3RhcnRzV2l0aCggUkVNT1ZFRF9MSU5FX1RPS0VOICkgfHwKLSAgICAgICAgICAgIGxpbmUuc3RhcnRzV2l0aCggVU5DSEFOR0VEX0xJTkVfVE9LRU4gKSB8fCBsaW5lLnN0YXJ0c1dpdGgoIENIQU5HRV9TRVBBUkFUT1JfVE9LRU4gKSB8fAotICAgICAgICAgICAgbGluZS5lcXVhbHMoIE5PX05FV0xJTkVfVE9LRU4gKSApCisgICAgICAgIGVsc2UgaWYgKCBsaW5lLnN0YXJ0c1dpdGgoIEFEREVEX0xJTkVfVE9LRU4gKSB8fCBsaW5lLnN0YXJ0c1dpdGgoIFJFTU9WRURfTElORV9UT0tFTiApCisgICAgICAgICAgICB8fCBsaW5lLnN0YXJ0c1dpdGgoIFVOQ0hBTkdFRF9MSU5FX1RPS0VOICkgfHwgbGluZS5zdGFydHNXaXRoKCBDSEFOR0VfU0VQQVJBVE9SX1RPS0VOICkKKyAgICAgICAgICAgIHx8IGxpbmUuZXF1YWxzKCBOT19ORVdMSU5FX1RPS0VOICkgKQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBhZGQgdG8gYnVmZmVyCiAgICAgICAgICAgICBjdXJyZW50RGlmZmVyZW5jZS5hcHBlbmQoIGxpbmUgKS5hcHBlbmQoICJcbiIgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvZXhwb3J0L0Fic3RyYWN0Q3ZzRXhwb3J0Q29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9leHBvcnQvQWJzdHJhY3RDdnNFeHBvcnRDb21tYW5kLmphdmEKaW5kZXggYzM3Y2NhNS4uOGQ4MGNmYiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9leHBvcnQvQWJzdHJhY3RDdnNFeHBvcnRDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9leHBvcnQvQWJzdHJhY3RDdnNFeHBvcnRDb21tYW5kLmphdmEKQEAgLTM3LDYgKzM3LDcgQEAKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEN2c0V4cG9ydENvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0RXhwb3J0Q29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIEV4cG9ydFNjbVJlc3VsdCBleGVjdXRlRXhwb3J0Q29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiB2ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBvdXRwdXREaXJlY3RvcnkgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2xpc3QvQWJzdHJhY3RDdnNMaXN0Q29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9saXN0L0Fic3RyYWN0Q3ZzTGlzdENvbW1hbmQuamF2YQppbmRleCAyZWIzNzRmLi4xYTgyODg5IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2xpc3QvQWJzdHJhY3RDdnNMaXN0Q29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvbGlzdC9BYnN0cmFjdEN2c0xpc3RDb21tYW5kLmphdmEKQEAgLTE5LDYgKzE5LDkgQEAKICAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVmVyc2lvbjsKQEAgLTMzLDExICszNiwxMyBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOmtlbm5leUBhcGFjaGUub3JnIj5LZW5uZXkgV2VzdGVyaG9mPC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDdnNMaXN0Q29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RMaXN0Q29tbWFuZAogICAgIGltcGxlbWVudHMgQ3ZzQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIExpc3RTY21SZXN1bHQgZXhlY3V0ZUxpc3RDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0LCBib29sZWFuIHJlY3Vyc2l2ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbVZlcnNpb24gdmVyc2lvbiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTUzLDEyICs1OCwyNCBAQAogICAgICAgICB9CiAKICAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggIi1kIiApOworICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAiLWUiICk7IC8vIHN6YWt1c292OiB0byBmaXggIlVua25vd24gZmlsZSBzdGF0dXMiIHByb2JsZW0KIAogICAgICAgICBpZiAoIHJlY3Vyc2l2ZSApCiAgICAgICAgIHsKICAgICAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoICItUiIgKTsKICAgICAgICAgfQogCisgICAgICAgIGZvciAoIEl0ZXJhdG9yIGl0ID0gZmlsZVNldC5nZXRGaWxlTGlzdCgpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTsgKQorICAgICAgICB7CisgICAgICAgICAgICBGaWxlIHRhcmdldCA9IChGaWxlKSBpdC5uZXh0KCk7CisgICAgICAgICAgICBTdHJpbmcgcGF0aCA9IHRhcmdldC5nZXRQYXRoKCk7CisgICAgICAgICAgICBpZiAoIHBhdGguc3RhcnRzV2l0aCggIlxcIiApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoIDEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIHBhdGggKTsKKyAgICAgICAgfQorCiAgICAgICAgIGdldExvZ2dlcigpLmluZm8oICJFeGVjdXRpbmc6ICIgKyBjbCApOwogICAgICAgICBnZXRMb2dnZXIoKS5pbmZvKCAiV29ya2luZyBkaXJlY3Rvcnk6ICIgKyBjbC5nZXRXb3JraW5nRGlyZWN0b3J5KCkuZ2V0QWJzb2x1dGVQYXRoKCkgKTsKIApkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9saXN0L0N2c0xpc3RDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9saXN0L0N2c0xpc3RDb25zdW1lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyOTFiMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2xpc3QvQ3ZzTGlzdENvbnN1bWVyLmphdmEKQEAgLTAsMCArMSw5MyBAQAorcGFja2FnZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5jdnNsaWIuY29tbWFuZC5saXN0OworCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZTsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU3RhdHVzOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXI7CitpbXBvcnQgb3JnLmNvZGVoYXVzLnBsZXh1cy51dGlsLlN0cmluZ1V0aWxzOworaW1wb3J0IG9yZy5jb2RlaGF1cy5wbGV4dXMudXRpbC5jbGkuU3RyZWFtQ29uc3VtZXI7CisKKy8qKgorICogUGFyc2VzIENWUy9FbnRyaWVzIGZvcm1hdCwgZm9yIGV4YW1wbGUsIGxpa2UKKyAqCisgKiA8cHJlPgorICogL2NoZWNrb3V0bGlzdC8xLjkvV2VkIEphbiAyNiAxOTowODowNiAyMDA1Ly1ra3YvCisgKiAvY29tbWl0aW5mby8xLjEwL1R1ZSBKYW4gMTEgMDE6MjU6MzQgMjAwNS8ta2t2LworICogL2NvbmZpZy8xLjE1L1N1biBKYW4gMjMgMDI6MTU6NTcgMjAwNS8ta2t2LworICogRC9kaXJlY3RvcnkxLy8vLworICogRC9kaXJlY3RvcnkyLy8vLworICogPC9wcmU+CisgKgorICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86c3pha3Vzb3ZAZW1kZXYucnUiPlNlcmdleSBaYWt1c292PC9hPjogaW1wbGVtZW50ZWQgdG8gZml4ICJVbmtub3duIGZpbGUgc3RhdHVzIiBwcm9ibGVtCisgKiBAdmVyc2lvbiAkSWQkCisgKi8KK3B1YmxpYyBjbGFzcyBDdnNMaXN0Q29uc3VtZXIKKyAgICBpbXBsZW1lbnRzIFN0cmVhbUNvbnN1bWVyCit7CisgICAgcHJpdmF0ZSBTY21Mb2dnZXIgbV9sb2dnZXI7CisKKyAgICBwcml2YXRlIExpc3QgbV9lbnRyaWVzOworCisgICAgLyoqCisgICAgICogQHBhcmFtIGxvZ2dlciBpcyBhIGxvZ2dlcgorICAgICAqLworICAgIHB1YmxpYyBDdnNMaXN0Q29uc3VtZXIoIFNjbUxvZ2dlciBsb2dnZXIgKQorICAgIHsKKyAgICAgICAgbV9sb2dnZXIgPSBsb2dnZXI7CisgICAgICAgIG1fZW50cmllcyA9IG5ldyBMaW5rZWRMaXN0KCk7CisgICAgfQorCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KKyAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGlfbGluZSApCisgICAgeworICAgICAgICBpZiAoIG1fbG9nZ2VyLmlzRGVidWdFbmFibGVkKCkgKQorICAgICAgICB7CisgICAgICAgICAgICBtX2xvZ2dlci5kZWJ1ZyggaV9saW5lICk7CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmdbXSBwYXJhbXMgPSBpX2xpbmUuc3BsaXQoICIvIiApOworICAgICAgICBpZiAoIHBhcmFtcy5sZW5ndGggPCAyICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCBTdHJpbmdVdGlscy5pc05vdEVtcHR5KCBpX2xpbmUgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCBtX2xvZ2dlci5pc1dhcm5FbmFibGVkKCkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbV9sb2dnZXIud2FybiggIlVuYWJsZSB0byBwYXJzZSBpdCBhcyBDVlMvRW50cmllcyBmb3JtYXQ6ICIgKyBpX2xpbmUgKyAiLiIgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtX2VudHJpZXMuYWRkKCBuZXcgU2NtRmlsZSggcGFyYW1zWzFdLCBTY21GaWxlU3RhdHVzLlVOS05PV04gKSApOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiBQYXJzZSByZXN1bHQKKyAgICAgKi8KKyAgICBwdWJsaWMgTGlzdCBnZXRFbnRyaWVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VudHJpZXM7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9sb2dpbi9DdnNMb2dpbkNvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvbG9naW4vQ3ZzTG9naW5Db21tYW5kLmphdmEKaW5kZXggZTY4Yjk3NS4uNDFmZGJiNSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9sb2dpbi9DdnNMb2dpbkNvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2xvZ2luL0N2c0xvZ2luQ29tbWFuZC5qYXZhCkBAIC0zNyw5ICszNyw3IEBACiBwdWJsaWMgY2xhc3MgQ3ZzTG9naW5Db21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdExvZ2luQ29tbWFuZAogewotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC5sb2dpbi5BYnN0cmFjdExvZ2luQ29tbWFuZCNleGVjdXRlTG9naW5Db21tYW5kKG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeSxvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0LG9yZy5hcGFjaGUubWF2ZW4uc2NtLkNvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIExvZ2luU2NtUmVzdWx0IGV4ZWN1dGVMb2dpbkNvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2xvZ2luL0N2c1Bhc3MuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvbG9naW4vQ3ZzUGFzcy5qYXZhCmluZGV4IDkyZTBmZDQuLmNkYWVmZmMgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvbG9naW4vQ3ZzUGFzcy5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvbG9naW4vQ3ZzUGFzcy5qYXZhCkBAIC0xMzMsOCArMTMzLDggQEAKIAogICAgICAgICAgICAgaWYgKCBwYXNzd29yZCA9PSBudWxsICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2NtRXhjZXB0aW9uKCAicGFzc3dvcmQgaXMgcmVxdWlyZWQuIFlvdSBtdXN0IHJ1biBhICdjdnMgLWQgIiArIGN2c1Jvb3QgKwotICAgICAgICAgICAgICAgICAgICAiIGxvZ2luJyBmaXJzdCBvciBwcm92aWRlIGl0IGluIHRoZSBjb25uZWN0aW9uIHVybC4iICk7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNjbUV4Y2VwdGlvbiggInBhc3N3b3JkIGlzIHJlcXVpcmVkLiBZb3UgbXVzdCBydW4gYSAnY3ZzIC1kICIgKyBjdnNSb290CisgICAgICAgICAgICAgICAgICAgICsgIiBsb2dpbicgZmlyc3Qgb3IgcHJvdmlkZSBpdCBpbiB0aGUgY29ubmVjdGlvbiB1cmwuIiApOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvL2xvZ2dlci5kZWJ1ZyggInBhc3N3b3JkOiAiICsgcGFzc3dvcmQgKTsKQEAgLTE2Nyw3ICsxNjcsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbWFuZ2xlKCBTdHJpbmcgcGFzc3dvcmQgKQorICAgIHByaXZhdGUgU3RyaW5nIG1hbmdsZSggU3RyaW5nIHBhc3N3b3JkICkKICAgICB7CiAgICAgICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgIGZvciAoIGludCBpID0gMDsgaSA8IHBhc3N3b3JkLmxlbmd0aCgpOyBpKysgKQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9yZW1vdmUvQWJzdHJhY3RDdnNSZW1vdmVDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL3JlbW92ZS9BYnN0cmFjdEN2c1JlbW92ZUNvbW1hbmQuamF2YQppbmRleCAwNGIzMTQ5Li5mODU1NzE4IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL3JlbW92ZS9BYnN0cmFjdEN2c1JlbW92ZUNvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL3JlbW92ZS9BYnN0cmFjdEN2c1JlbW92ZUNvbW1hbmQuamF2YQpAQCAtNDUsNiArNDUsNyBAQAogICAgIGV4dGVuZHMgQWJzdHJhY3RSZW1vdmVDb21tYW5kCiAgICAgaW1wbGVtZW50cyBDdnNDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU2NtUmVzdWx0IGV4ZWN1dGVSZW1vdmVDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL3N0YXR1cy9BYnN0cmFjdEN2c1N0YXR1c0NvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvc3RhdHVzL0Fic3RyYWN0Q3ZzU3RhdHVzQ29tbWFuZC5qYXZhCmluZGV4IDMxMzU1ZDkuLjg3MjdhYTAgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvc3RhdHVzL0Fic3RyYWN0Q3ZzU3RhdHVzQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvc3RhdHVzL0Fic3RyYWN0Q3ZzU3RhdHVzQ29tbWFuZC5qYXZhCkBAIC0zNyw2ICszNyw3IEBACiAgICAgZXh0ZW5kcyBBYnN0cmFjdFN0YXR1c0NvbW1hbmQKICAgICBpbXBsZW1lbnRzIEN2c0NvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTdGF0dXNTY21SZXN1bHQgZXhlY3V0ZVN0YXR1c0NvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvLCBTY21GaWxlU2V0IGZpbGVTZXQgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9zdGF0dXMvQ3ZzU3RhdHVzQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvc3RhdHVzL0N2c1N0YXR1c0NvbnN1bWVyLmphdmEKaW5kZXggOWVmZTk2NS4uYzA4OGUyYSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9zdGF0dXMvQ3ZzU3RhdHVzQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL3N0YXR1cy9DdnNTdGF0dXNDb25zdW1lci5qYXZhCkBAIC01Nyw2ICs1Nyw3IEBACiAgICAgLy8gU3RyZWFtQ29uc3VtZXIgSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBsb2dnZXIuZGVidWcoIGxpbmUgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvdGFnL0Fic3RyYWN0Q3ZzVGFnQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC90YWcvQWJzdHJhY3RDdnNUYWdDb21tYW5kLmphdmEKaW5kZXggMWUyNTI1NS4uYjllMzNiNCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC90YWcvQWJzdHJhY3RDdnNUYWdDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC90YWcvQWJzdHJhY3RDdnNUYWdDb21tYW5kLmphdmEKQEAgLTM5LDYgKzM5LDcgQEAKICAgICBleHRlbmRzIEFic3RyYWN0VGFnQ29tbWFuZAogICAgIGltcGxlbWVudHMgQ3ZzQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFNjbVJlc3VsdCBleGVjdXRlVGFnQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZywgU3RyaW5nIG1lc3NhZ2UgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC90YWcvQ3ZzVGFnQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvdGFnL0N2c1RhZ0NvbnN1bWVyLmphdmEKaW5kZXggMDcyNGMwYi4uZDE3YzdmYiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC90YWcvQ3ZzVGFnQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL3RhZy9DdnNUYWdDb25zdW1lci5qYXZhCkBAIC00NCw2ICs0NCw3IEBACiAgICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgY29uc3VtZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIGxvZ2dlci5kZWJ1ZyggbGluZSApOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC91cGRhdGUvQWJzdHJhY3RDdnNVcGRhdGVDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL3VwZGF0ZS9BYnN0cmFjdEN2c1VwZGF0ZUNvbW1hbmQuamF2YQppbmRleCA3N2Q5OWQ1Li45MmY1OWU2IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL3VwZGF0ZS9BYnN0cmFjdEN2c1VwZGF0ZUNvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL3VwZGF0ZS9BYnN0cmFjdEN2c1VwZGF0ZUNvbW1hbmQuamF2YQpAQCAtNDAsNiArNDAsNyBAQAogICAgIGV4dGVuZHMgQWJzdHJhY3RVcGRhdGVDb21tYW5kCiAgICAgaW1wbGVtZW50cyBDdnNDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgVXBkYXRlU2NtUmVzdWx0IGV4ZWN1dGVVcGRhdGVDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC91cGRhdGUvQ3ZzVXBkYXRlQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvdXBkYXRlL0N2c1VwZGF0ZUNvbnN1bWVyLmphdmEKaW5kZXggMDQxNGJlNS4uNWM0MzlmYyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC91cGRhdGUvQ3ZzVXBkYXRlQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL3VwZGF0ZS9DdnNVcGRhdGVDb25zdW1lci5qYXZhCkBAIC00NCw2ICs0NCw3IEBACiAgICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgY29uc3VtZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIGxvZ2dlci5kZWJ1ZyggbGluZSApOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvcmVwb3NpdG9yeS9DdnNTY21Qcm92aWRlclJlcG9zaXRvcnkuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL3JlcG9zaXRvcnkvQ3ZzU2NtUHJvdmlkZXJSZXBvc2l0b3J5LmphdmEKaW5kZXggNGFlOGI2My4uOTY3MmM4MyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvcmVwb3NpdG9yeS9DdnNTY21Qcm92aWRlclJlcG9zaXRvcnkuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9yZXBvc2l0b3J5L0N2c1NjbVByb3ZpZGVyUmVwb3NpdG9yeS5qYXZhCkBAIC05OCwyMSArOTgsMjEgQEAKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEN2c1Jvb3RGb3JDdnNQYXNzKCkKICAgICB7Ci0gICAgICAgIGlmICggZ2V0VXNlcigpICE9IG51bGwgKQorICAgICAgICBTdHJpbmcgcmVzdWx0OworICAgICAgICBTdHJpbmcgdHJhbnNwb3J0ID0gZ2V0VHJhbnNwb3J0KCk7CisgICAgICAgIGlmICggQWJzdHJhY3RDdnNTY21Qcm92aWRlci5UUkFOU1BPUlRfTE9DQUwuZXF1YWxzKCB0cmFuc3BvcnQgKSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnZXRDdnNSb290V2l0aENvcnJlY3RVc2VyKCBnZXRVc2VyKCkgKTsKKyAgICAgICAgICAgIHJlc3VsdCA9ICI6IiArIHRyYW5zcG9ydCArICI6IiArIGN2c3Jvb3Q7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIGdldFVzZXIoKSAhPSBudWxsICkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gZ2V0Q3ZzUm9vdFdpdGhDb3JyZWN0VXNlciggZ2V0VXNlcigpICk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIEFic3RyYWN0Q3ZzU2NtUHJvdmlkZXIuVFJBTlNQT1JUX0xPQ0FMLmVxdWFscyggZ2V0VHJhbnNwb3J0KCkgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGN2c3Jvb3Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIlVzZXJuYW1lIGlzbid0IGRlZmluZWQuIiApOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIlVzZXJuYW1lIGlzbid0IGRlZmluZWQuIiApOwogICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xNjksNiArMTY5LDcgQEAKICAgICAgICAgcmV0dXJuIGN2c3Jvb3Q7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKQEAgLTE3Nyw5ICsxNzgsNiBAQAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIEFic3RyYWN0Q3ZzU2NtUHJvdmlkZXIuVFJBTlNQT1JUX0xPQ0FMLmVxdWFscyggZ2V0VHJhbnNwb3J0KCkgKSApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCAiOiIgKTsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIGdldFRyYW5zcG9ydCgpICk7Ci0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCAiOiIgKTsKICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIGdldEN2c1Jvb3QoKSApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvdXRpbC9DdnNVdGlsLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi91dGlsL0N2c1V0aWwuamF2YQppbmRleCA3MDFkN2Q5Li5hZjBhOThmIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi91dGlsL0N2c1V0aWwuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi91dGlsL0N2c1V0aWwuamF2YQpAQCAtNTIsMTUgKzUyLDE3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXRjaCAoIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlICkKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBza2lwIGVycm9yIAogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2F0Y2ggKCBJT0V4Y2VwdGlvbiBlICkKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBza2lwIGVycm9yCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXRjaCAoIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gZSApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBzZXR0aW5nc0ZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiIGlzbid0IHdlbGwgZm9ybWVkLiBTS0lQUEVELiIgKyBlLmdldE1lc3NhZ2UoKTsKIAotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggbWVzc2FnZSApOworICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggbWVzc2FnZSApOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9zaXRlL3NpdGUueG1sIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnMvc3JjL3NpdGUvc2l0ZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RmNTQ4MwotLS0gL2Rldi9udWxsCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy9zaXRlL3NpdGUueG1sCkBAIC0wLDAgKzEsMzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz4KKworPCEtLQorICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICB+IHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgfiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgIH4gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB+IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgfgorICB+ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIH4KKyAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgIH4gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgfiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgfiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgfiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgIH4gdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorCis8cHJvamVjdCBuYW1lPSJNYXZlbiBTQ00gQ1ZTIENvbW1vbnMiPgorICA8Ym9keT4KKyAgICA8bWVudSByZWY9InBhcmVudCIgLz4KKworICAgIDxtZW51IG5hbWU9Ik92ZXJ2aWV3Ij4KKyAgICAgIDxpdGVtIG5hbWU9IkludHJvZHVjdGlvbiIgaHJlZj0iaW5kZXguaHRtbCIvPgorICAgIDwvbWVudT4KKworICAgIDxtZW51IHJlZj0icmVwb3J0cyIgaW5oZXJpdD0iYm90dG9tIiAvPgorICA8L2JvZHk+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9ucy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9yZXBvc2l0b3J5L0N2c1NjbVByb3ZpZGVyUmVwb3NpdG9yeVRlc3QuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL3JlcG9zaXRvcnkvQ3ZzU2NtUHJvdmlkZXJSZXBvc2l0b3J5VGVzdC5qYXZhCmluZGV4IGVhZTAzZjAuLmVmNWU4OTAgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL3JlcG9zaXRvcnkvQ3ZzU2NtUHJvdmlkZXJSZXBvc2l0b3J5VGVzdC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2cy1jb21tb25zL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL3JlcG9zaXRvcnkvQ3ZzU2NtUHJvdmlkZXJSZXBvc2l0b3J5VGVzdC5qYXZhCkBAIC0yNTUsNyArMjU1LDIyIEBACiAKICAgICAgICAgYXNzZXJ0RXF1YWxzKCAiL2hvbWUvY3ZzcHVibGljIiwgcmVwby5nZXRQYXRoKCkgKTsKIAotICAgICAgICBhc3NlcnRFcXVhbHMoICIvaG9tZS9jdnNwdWJsaWMiLCByZXBvLmdldEN2c1Jvb3QoKSApOworICAgICAgICBhc3NlcnRFcXVhbHMoICI6bG9jYWw6L2hvbWUvY3ZzcHVibGljIiwgcmVwby5nZXRDdnNSb290KCkgKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IFNDTS0zODcKKyAgICAgKgorICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCisgICAgICovCisgICAgcHVibGljIHZvaWQgdGVzdEdldEN2c1Jvb3RGb3JDdnNQYXNzKCkKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgU3RyaW5nIHVybCA9ICJzY206Y3ZzfGxvY2FsfGM6L2N2c3Jvb3R8dGVzdCI7CisKKyAgICAgICAgU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5ID0gc2NtTWFuYWdlci5tYWtlU2NtUmVwb3NpdG9yeSggdXJsICk7CisgICAgICAgIEN2c1NjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvID0gKEN2c1NjbVByb3ZpZGVyUmVwb3NpdG9yeSkgcmVwb3NpdG9yeS5nZXRQcm92aWRlclJlcG9zaXRvcnkoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCAiOmxvY2FsOmM6L2N2c3Jvb3QiLCByZXBvLmdldEN2c1Jvb3RGb3JDdnNQYXNzKCkgKTsKICAgICB9CiAKICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNleGUvcG9tLnhtbCBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9wb20ueG1sCmluZGV4IGEwZGY3YjIuLjkxNzIzMTIgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9wb20ueG1sCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9wb20ueG1sCkBAIC0xLDQgKzEsNiBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IS0tCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8IS0tCiAgIH4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQogICB+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogICB+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCkBAIC0xOCwyNiArMjAsMzAgQEAKICAgLS0+CiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKICAgPHBhcmVudD4KLSAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXJzLWN2czwvYXJ0aWZhY3RJZD4KICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXJzLWN2czwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgotICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZTwvYXJ0aWZhY3RJZD4KKwogICA8bmFtZT5NYXZlbiBTQ00gQ1ZTIFByb3ZpZGVyIC0gQ1ZTIEV4ZWN1dGFibGUgSW1wbC48L25hbWU+Ci0gIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KKyAgPGRlc2NyaXB0aW9uPkV4ZWN1dGFibGUgaW1wbGVtZW50YXRpb24gZm9yIFNDTSBDVlMgUHJvdmlkZXIuPC9kZXNjcmlwdGlvbj4KKwogICA8ZGVwZW5kZW5jaWVzPgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+Ci0gICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItY3ZzdGVzdDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KLSAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9uczwvYXJ0aWZhY3RJZD4KICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8IS0tIFRlc3QgLS0+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9uczwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KKyAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0PC9hcnRpZmFjdElkPgorICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgogICAgIDwvZGVwZW5kZW5jeT4KICAgPC9kZXBlbmRlbmNpZXM+CiAKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNleGUvQ3ZzRXhlU2NtUHJvdmlkZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNleGUvQ3ZzRXhlU2NtUHJvdmlkZXIuamF2YQppbmRleCA1YjQzNzkzLi4zZTAyYzk3IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzZXhlL0N2c0V4ZVNjbVByb3ZpZGVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2V4ZS9DdnNFeGVTY21Qcm92aWRlci5qYXZhCkBAIC00Myw2NiArNDMsNzkgQEAKIHB1YmxpYyBjbGFzcyBDdnNFeGVTY21Qcm92aWRlcgogICAgIGV4dGVuZHMgQWJzdHJhY3RDdnNTY21Qcm92aWRlcgogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENvbW1hbmQgZ2V0QWRkQ29tbWFuZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IEN2c0V4ZUFkZENvbW1hbmQoKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDb21tYW5kIGdldEJyYW5jaENvbW1hbmQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBDdnNFeGVCcmFuY2hDb21tYW5kKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ29tbWFuZCBnZXRDaGFuZ2VMb2dDb21tYW5kKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgQ3ZzRXhlQ2hhbmdlTG9nQ29tbWFuZCgpOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENvbW1hbmQgZ2V0Q2hlY2tJbkNvbW1hbmQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBDdnNFeGVDaGVja0luQ29tbWFuZCgpOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENvbW1hbmQgZ2V0Q2hlY2tPdXRDb21tYW5kKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgQ3ZzRXhlQ2hlY2tPdXRDb21tYW5kKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ29tbWFuZCBnZXREaWZmQ29tbWFuZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IEN2c0V4ZURpZmZDb21tYW5kKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ29tbWFuZCBnZXRFeHBvcnRDb21tYW5kKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgQ3ZzRXhlRXhwb3J0Q29tbWFuZCgpOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENvbW1hbmQgZ2V0TGlzdENvbW1hbmQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBDdnNFeGVMaXN0Q29tbWFuZCgpOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENvbW1hbmQgZ2V0TG9naW5Db21tYW5kKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgQ3ZzTG9naW5Db21tYW5kKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ29tbWFuZCBnZXRSZW1vdmVDb21tYW5kKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgQ3ZzRXhlUmVtb3ZlQ29tbWFuZCgpOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENvbW1hbmQgZ2V0U3RhdHVzQ29tbWFuZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IEN2c0V4ZVN0YXR1c0NvbW1hbmQoKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDb21tYW5kIGdldFRhZ0NvbW1hbmQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBDdnNFeGVUYWdDb21tYW5kKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ29tbWFuZCBnZXRVcGRhdGVDb21tYW5kKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgQ3ZzRXhlVXBkYXRlQ29tbWFuZCgpOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2V4ZS9jb21tYW5kL2FkZC9DdnNFeGVBZGRDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzZXhlL2NvbW1hbmQvYWRkL0N2c0V4ZUFkZENvbW1hbmQuamF2YQppbmRleCBhNDVkZGZjLi5hY2M1YzVjIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzZXhlL2NvbW1hbmQvYWRkL0N2c0V4ZUFkZENvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzZXhlL2NvbW1hbmQvYWRkL0N2c0V4ZUFkZENvbW1hbmQuamF2YQpAQCAtMzUsNiArMzUsNyBAQAogcHVibGljIGNsYXNzIEN2c0V4ZUFkZENvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0Q3ZzQWRkQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIEFkZFNjbVJlc3VsdCBleGVjdXRlQ3ZzQ29tbWFuZCggQ29tbWFuZGxpbmUgY2wsIExpc3QgYWRkZWRGaWxlcyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzZXhlL2NvbW1hbmQvYnJhbmNoL0N2c0V4ZUJyYW5jaENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNleGUvY29tbWFuZC9icmFuY2gvQ3ZzRXhlQnJhbmNoQ29tbWFuZC5qYXZhCmluZGV4IDRkMDk4Y2UuLjQ2MWEyMTkgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNleGUvY29tbWFuZC9icmFuY2gvQ3ZzRXhlQnJhbmNoQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNleGUvY29tbWFuZC9icmFuY2gvQ3ZzRXhlQnJhbmNoQ29tbWFuZC5qYXZhCkBAIC0zNCw2ICszNCw3IEBACiBwdWJsaWMgY2xhc3MgQ3ZzRXhlQnJhbmNoQ29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RDdnNCcmFuY2hDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQnJhbmNoU2NtUmVzdWx0IGV4ZWN1dGVDdnNDb21tYW5kKCBDb21tYW5kbGluZSBjbCApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzZXhlL2NvbW1hbmQvY2hhbmdlbG9nL0N2c0V4ZUNoYW5nZUxvZ0NvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNleGUvY29tbWFuZC9jaGFuZ2Vsb2cvQ3ZzRXhlQ2hhbmdlTG9nQ29tbWFuZC5qYXZhCmluZGV4IDVlMGUyZDYuLjZlZmQzZTMgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNleGUvY29tbWFuZC9jaGFuZ2Vsb2cvQ3ZzRXhlQ2hhbmdlTG9nQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNleGUvY29tbWFuZC9jaGFuZ2Vsb2cvQ3ZzRXhlQ2hhbmdlTG9nQ29tbWFuZC5qYXZhCkBAIC0zOCw2ICszOCw3IEBACiBwdWJsaWMgY2xhc3MgQ3ZzRXhlQ2hhbmdlTG9nQ29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RDdnNDaGFuZ2VMb2dDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hhbmdlTG9nU2NtUmVzdWx0IGV4ZWN1dGVDdnNDb21tYW5kKCBDb21tYW5kbGluZSBjbCwgRGF0ZSBzdGFydERhdGUsIERhdGUgZW5kRGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHN0YXJ0VmVyc2lvbiwgU2NtVmVyc2lvbiBlbmRWZXJzaW9uLCBTdHJpbmcgZGF0ZVBhdHRlcm4gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzZXhlL2NvbW1hbmQvY2hlY2tpbi9DdnNFeGVDaGVja0luQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2V4ZS9jb21tYW5kL2NoZWNraW4vQ3ZzRXhlQ2hlY2tJbkNvbW1hbmQuamF2YQppbmRleCBhN2YwNzEzLi4zOTgzNWRiIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzZXhlL2NvbW1hbmQvY2hlY2tpbi9DdnNFeGVDaGVja0luQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNleGUvY29tbWFuZC9jaGVja2luL0N2c0V4ZUNoZWNrSW5Db21tYW5kLmphdmEKQEAgLTM5LDYgKzM5LDcgQEAKIHB1YmxpYyBjbGFzcyBDdnNFeGVDaGVja0luQ29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RDdnNDaGVja0luQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENoZWNrSW5TY21SZXN1bHQgZXhlY3V0ZUN2c0NvbW1hbmQoIENvbW1hbmRsaW5lIGNsLCBDdnNTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZSBtZXNzYWdlRmlsZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNleGUvY29tbWFuZC9jaGVja291dC9DdnNFeGVDaGVja091dENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNleGUvY29tbWFuZC9jaGVja291dC9DdnNFeGVDaGVja091dENvbW1hbmQuamF2YQppbmRleCBlM2JhMDlmLi42ZjAyY2I1IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzZXhlL2NvbW1hbmQvY2hlY2tvdXQvQ3ZzRXhlQ2hlY2tPdXRDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2V4ZS9jb21tYW5kL2NoZWNrb3V0L0N2c0V4ZUNoZWNrT3V0Q29tbWFuZC5qYXZhCkBAIC0zNCw2ICszNCw3IEBACiBwdWJsaWMgY2xhc3MgQ3ZzRXhlQ2hlY2tPdXRDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdEN2c0NoZWNrT3V0Q29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENoZWNrT3V0U2NtUmVzdWx0IGV4ZWN1dGVDdnNDb21tYW5kKCBDb21tYW5kbGluZSBjbCApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzZXhlL2NvbW1hbmQvZGlmZi9DdnNFeGVEaWZmQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2V4ZS9jb21tYW5kL2RpZmYvQ3ZzRXhlRGlmZkNvbW1hbmQuamF2YQppbmRleCAyMmI5OWRiLi45NGQ0OTkxIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzZXhlL2NvbW1hbmQvZGlmZi9DdnNFeGVEaWZmQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNleGUvY29tbWFuZC9kaWZmL0N2c0V4ZURpZmZDb21tYW5kLmphdmEKQEAgLTM0LDYgKzM0LDcgQEAKIHB1YmxpYyBjbGFzcyBDdnNFeGVEaWZmQ29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RDdnNEaWZmQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIERpZmZTY21SZXN1bHQgZXhlY3V0ZUN2c0NvbW1hbmQoIENvbW1hbmRsaW5lIGNsICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNleGUvY29tbWFuZC9leHBvcnQvQ3ZzRXhlRXhwb3J0Q29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2V4ZS9jb21tYW5kL2V4cG9ydC9DdnNFeGVFeHBvcnRDb21tYW5kLmphdmEKaW5kZXggMzNjOWFjNi4uN2U3ZjdiMiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2V4ZS9jb21tYW5kL2V4cG9ydC9DdnNFeGVFeHBvcnRDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2V4ZS9jb21tYW5kL2V4cG9ydC9DdnNFeGVFeHBvcnRDb21tYW5kLmphdmEKQEAgLTM0LDYgKzM0LDcgQEAKIHB1YmxpYyBjbGFzcyBDdnNFeGVFeHBvcnRDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdEN2c0V4cG9ydENvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBFeHBvcnRTY21SZXN1bHQgZXhlY3V0ZUN2c0NvbW1hbmQoIENvbW1hbmRsaW5lIGNsICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNleGUvY29tbWFuZC9saXN0L0N2c0V4ZUxpc3RDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzZXhlL2NvbW1hbmQvbGlzdC9DdnNFeGVMaXN0Q29tbWFuZC5qYXZhCmluZGV4IGZiOTU4NTAuLjE5ODhlZTcgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNleGUvY29tbWFuZC9saXN0L0N2c0V4ZUxpc3RDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2V4ZS9jb21tYW5kL2xpc3QvQ3ZzRXhlTGlzdENvbW1hbmQuamF2YQpAQCAtMzQsNiArMzQsNyBAQAogcHVibGljIGNsYXNzIEN2c0V4ZUxpc3RDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdEN2c0xpc3RDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgTGlzdFNjbVJlc3VsdCBleGVjdXRlQ3ZzQ29tbWFuZCggQ29tbWFuZGxpbmUgY2wgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2V4ZS9jb21tYW5kL3JlbW92ZS9DdnNFeGVSZW1vdmVDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzZXhlL2NvbW1hbmQvcmVtb3ZlL0N2c0V4ZVJlbW92ZUNvbW1hbmQuamF2YQppbmRleCBhNmZhYjdlLi42NDk5NWUyIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzZXhlL2NvbW1hbmQvcmVtb3ZlL0N2c0V4ZVJlbW92ZUNvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzZXhlL2NvbW1hbmQvcmVtb3ZlL0N2c0V4ZVJlbW92ZUNvbW1hbmQuamF2YQpAQCAtMzUsNiArMzUsNyBAQAogcHVibGljIGNsYXNzIEN2c0V4ZVJlbW92ZUNvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0Q3ZzUmVtb3ZlQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFJlbW92ZVNjbVJlc3VsdCBleGVjdXRlQ3ZzQ29tbWFuZCggQ29tbWFuZGxpbmUgY2wsIExpc3QgcmVtb3ZlZEZpbGVzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNleGUvY29tbWFuZC9zdGF0dXMvQ3ZzRXhlU3RhdHVzQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2V4ZS9jb21tYW5kL3N0YXR1cy9DdnNFeGVTdGF0dXNDb21tYW5kLmphdmEKaW5kZXggZGRmOTBhMS4uODA3NDRhOSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2V4ZS9jb21tYW5kL3N0YXR1cy9DdnNFeGVTdGF0dXNDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2V4ZS9jb21tYW5kL3N0YXR1cy9DdnNFeGVTdGF0dXNDb21tYW5kLmphdmEKQEAgLTM0LDYgKzM0LDcgQEAKIHB1YmxpYyBjbGFzcyBDdnNFeGVTdGF0dXNDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdEN2c1N0YXR1c0NvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTdGF0dXNTY21SZXN1bHQgZXhlY3V0ZUN2c0NvbW1hbmQoIENvbW1hbmRsaW5lIGNsICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNleGUvY29tbWFuZC90YWcvQ3ZzRXhlVGFnQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2V4ZS9jb21tYW5kL3RhZy9DdnNFeGVUYWdDb21tYW5kLmphdmEKaW5kZXggZDcxYmVlNC4uNmIwZDc3YiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2V4ZS9jb21tYW5kL3RhZy9DdnNFeGVUYWdDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2V4ZS9jb21tYW5kL3RhZy9DdnNFeGVUYWdDb21tYW5kLmphdmEKQEAgLTM0LDYgKzM0LDcgQEAKIHB1YmxpYyBjbGFzcyBDdnNFeGVUYWdDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdEN2c1RhZ0NvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBUYWdTY21SZXN1bHQgZXhlY3V0ZUN2c0NvbW1hbmQoIENvbW1hbmRsaW5lIGNsICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNleGUvY29tbWFuZC91cGRhdGUvQ3ZzRXhlVXBkYXRlQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2V4ZS9jb21tYW5kL3VwZGF0ZS9DdnNFeGVVcGRhdGVDb21tYW5kLmphdmEKaW5kZXggYjEzZjZjMC4uNmZhODhhOCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2V4ZS9jb21tYW5kL3VwZGF0ZS9DdnNFeGVVcGRhdGVDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2V4ZS9jb21tYW5kL3VwZGF0ZS9DdnNFeGVVcGRhdGVDb21tYW5kLmphdmEKQEAgLTM2LDYgKzM2LDcgQEAKIHB1YmxpYyBjbGFzcyBDdnNFeGVVcGRhdGVDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdEN2c1VwZGF0ZUNvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBVcGRhdGVTY21SZXN1bHQgZXhlY3V0ZUN2c0NvbW1hbmQoIENvbW1hbmRsaW5lIGNsICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9zcmMvc2l0ZS9zaXRlLnhtbCBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZS9zcmMvc2l0ZS9zaXRlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDA4MDU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlL3NyYy9zaXRlL3NpdGUueG1sCkBAIC0wLDAgKzEsMzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz4KKworPCEtLQorICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICB+IHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgfiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgIH4gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB+IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgfgorICB+ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIH4KKyAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgIH4gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgfiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgfiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgfiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgIH4gdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorCis8cHJvamVjdCBuYW1lPSJNYXZlbiBTQ00gQ1ZTIEV4ZWN1dGFibGUiPgorICA8Ym9keT4KKyAgICA8bWVudSByZWY9InBhcmVudCIgLz4KKworICAgIDxtZW51IG5hbWU9Ik92ZXJ2aWV3Ij4KKyAgICAgIDxpdGVtIG5hbWU9IkludHJvZHVjdGlvbiIgaHJlZj0iaW5kZXguaHRtbCIvPgorICAgIDwvbWVudT4KKworICAgIDxtZW51IHJlZj0icmVwb3J0cyIgaW5oZXJpdD0iYm90dG9tIiAvPgorICA8L2JvZHk+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3BvbS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3BvbS54bWwKaW5kZXggZDBkMTg1YS4uY2JlZmRiNiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9wb20ueG1sCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvcG9tLnhtbApAQCAtMSw0ICsxLDYgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCEtLQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPCEtLQogICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKICAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKICAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpAQCAtMTgsMjAgKzIwLDIzIEBACiAgIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxwYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVycy1jdnM8L2FydGlmYWN0SWQ+CiAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVycy1jdnM8L2FydGlmYWN0SWQ+CiAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgogICA8L3BhcmVudD4KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhPC9hcnRpZmFjdElkPgorCiAgIDxuYW1lPk1hdmVuIFNDTSBDVlMgUHJvdmlkZXIgLSBDVlMgSmF2YSBJbXBsLjwvbmFtZT4KLSAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgorICA8ZGVzY3JpcHRpb24+SmF2YSBpbXBsZW1lbnRhdGlvbiBmb3IgU0NNIENWUyBQcm92aWRlci48L2Rlc2NyaXB0aW9uPgorCiAgIDxkZXBlbmRlbmNpZXM+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9uczwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcubmV0YmVhbnMubGliPC9ncm91cElkPgpAQCAtNDMsNiArNDgsOCBAQAogICAgICAgPGFydGlmYWN0SWQ+Z2FueW1lZC1zc2gyPC9hcnRpZmFjdElkPgogICAgICAgPHZlcnNpb24+YnVpbGQyMTA8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPCEtLSBUZXN0IC0tPgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItY3ZzdGVzdDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9DdnNKYXZhU2NtUHJvdmlkZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9DdnNKYXZhU2NtUHJvdmlkZXIuamF2YQppbmRleCAwYWQ1NGVjLi42MDllYzUzIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvQ3ZzSmF2YVNjbVByb3ZpZGVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNqYXZhL0N2c0phdmFTY21Qcm92aWRlci5qYXZhCkBAIC00Myw2NiArNDMsNzkgQEAKIHB1YmxpYyBjbGFzcyBDdnNKYXZhU2NtUHJvdmlkZXIKICAgICBleHRlbmRzIEFic3RyYWN0Q3ZzU2NtUHJvdmlkZXIKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDb21tYW5kIGdldEFkZENvbW1hbmQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBDdnNKYXZhQWRkQ29tbWFuZCgpOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENvbW1hbmQgZ2V0QnJhbmNoQ29tbWFuZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IEN2c0phdmFCcmFuY2hDb21tYW5kKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ29tbWFuZCBnZXRDaGFuZ2VMb2dDb21tYW5kKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgQ3ZzSmF2YUNoYW5nZUxvZ0NvbW1hbmQoKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDb21tYW5kIGdldENoZWNrSW5Db21tYW5kKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgQ3ZzSmF2YUNoZWNrSW5Db21tYW5kKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ29tbWFuZCBnZXRDaGVja091dENvbW1hbmQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBDdnNKYXZhQ2hlY2tPdXRDb21tYW5kKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ29tbWFuZCBnZXREaWZmQ29tbWFuZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IEN2c0phdmFEaWZmQ29tbWFuZCgpOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENvbW1hbmQgZ2V0RXhwb3J0Q29tbWFuZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IEN2c0phdmFFeHBvcnRDb21tYW5kKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ29tbWFuZCBnZXRMaXN0Q29tbWFuZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IEN2c0phdmFMaXN0Q29tbWFuZCgpOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENvbW1hbmQgZ2V0TG9naW5Db21tYW5kKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgQ3ZzSmF2YUxvZ2luQ29tbWFuZCgpOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENvbW1hbmQgZ2V0UmVtb3ZlQ29tbWFuZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IEN2c0phdmFSZW1vdmVDb21tYW5kKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ29tbWFuZCBnZXRTdGF0dXNDb21tYW5kKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgQ3ZzSmF2YVN0YXR1c0NvbW1hbmQoKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDb21tYW5kIGdldFRhZ0NvbW1hbmQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBDdnNKYXZhVGFnQ29tbWFuZCgpOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENvbW1hbmQgZ2V0VXBkYXRlQ29tbWFuZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IEN2c0phdmFVcGRhdGVDb21tYW5kKCk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvY29tbWFuZC9hZGQvQ3ZzSmF2YUFkZENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9jb21tYW5kL2FkZC9DdnNKYXZhQWRkQ29tbWFuZC5qYXZhCmluZGV4IGM1Y2U3MTAuLjg3ZDFlZTkgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9jb21tYW5kL2FkZC9DdnNKYXZhQWRkQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9jb21tYW5kL2FkZC9DdnNKYXZhQWRkQ29tbWFuZC5qYXZhCkBAIC0zNSw2ICszNSw3IEBACiBwdWJsaWMgY2xhc3MgQ3ZzSmF2YUFkZENvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0Q3ZzQWRkQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIEFkZFNjbVJlc3VsdCBleGVjdXRlQ3ZzQ29tbWFuZCggQ29tbWFuZGxpbmUgY2wsIExpc3QgYWRkZWRGaWxlcyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvY29tbWFuZC9icmFuY2gvQ3ZzSmF2YUJyYW5jaENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9jb21tYW5kL2JyYW5jaC9DdnNKYXZhQnJhbmNoQ29tbWFuZC5qYXZhCmluZGV4IDcyYTYxMTIuLmI2MGVjNzkgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9jb21tYW5kL2JyYW5jaC9DdnNKYXZhQnJhbmNoQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9jb21tYW5kL2JyYW5jaC9DdnNKYXZhQnJhbmNoQ29tbWFuZC5qYXZhCkBAIC0zOCw2ICszOCw3IEBACiBwdWJsaWMgY2xhc3MgQ3ZzSmF2YUJyYW5jaENvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0Q3ZzQnJhbmNoQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIEJyYW5jaFNjbVJlc3VsdCBleGVjdXRlQ3ZzQ29tbWFuZCggQ29tbWFuZGxpbmUgY2wgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNqYXZhL2NvbW1hbmQvY2hhbmdlbG9nL0N2c0phdmFDaGFuZ2VMb2dDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvY29tbWFuZC9jaGFuZ2Vsb2cvQ3ZzSmF2YUNoYW5nZUxvZ0NvbW1hbmQuamF2YQppbmRleCAzZDNiMWE0Li4xZGI3MzJiIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvY29tbWFuZC9jaGFuZ2Vsb2cvQ3ZzSmF2YUNoYW5nZUxvZ0NvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvY29tbWFuZC9jaGFuZ2Vsb2cvQ3ZzSmF2YUNoYW5nZUxvZ0NvbW1hbmQuamF2YQpAQCAtNDEsNiArNDEsNyBAQAogcHVibGljIGNsYXNzIEN2c0phdmFDaGFuZ2VMb2dDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdEN2c0NoYW5nZUxvZ0NvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDaGFuZ2VMb2dTY21SZXN1bHQgZXhlY3V0ZUN2c0NvbW1hbmQoIENvbW1hbmRsaW5lIGNsLCBEYXRlIHN0YXJ0RGF0ZSwgRGF0ZSBlbmREYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbVZlcnNpb24gc3RhcnRWZXJzaW9uLCBTY21WZXJzaW9uIGVuZFZlcnNpb24sIFN0cmluZyBkYXRlUGF0dGVybiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9jb21tYW5kL2NoZWNraW4vQ3ZzSmF2YUNoZWNrSW5Db21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvY29tbWFuZC9jaGVja2luL0N2c0phdmFDaGVja0luQ29tbWFuZC5qYXZhCmluZGV4IGRkNGUyNDAuLmFjMzYyYTcgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9jb21tYW5kL2NoZWNraW4vQ3ZzSmF2YUNoZWNrSW5Db21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNqYXZhL2NvbW1hbmQvY2hlY2tpbi9DdnNKYXZhQ2hlY2tJbkNvbW1hbmQuamF2YQpAQCAtNDIsNiArNDIsNyBAQAogcHVibGljIGNsYXNzIEN2c0phdmFDaGVja0luQ29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RDdnNDaGVja0luQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENoZWNrSW5TY21SZXN1bHQgZXhlY3V0ZUN2c0NvbW1hbmQoIENvbW1hbmRsaW5lIGNsLCBDdnNTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZSBtZXNzYWdlRmlsZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9jb21tYW5kL2NoZWNrb3V0L0N2c0phdmFDaGVja091dENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9jb21tYW5kL2NoZWNrb3V0L0N2c0phdmFDaGVja091dENvbW1hbmQuamF2YQppbmRleCBmZDQzNWVhLi4yODEyODMxIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvY29tbWFuZC9jaGVja291dC9DdnNKYXZhQ2hlY2tPdXRDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNqYXZhL2NvbW1hbmQvY2hlY2tvdXQvQ3ZzSmF2YUNoZWNrT3V0Q29tbWFuZC5qYXZhCkBAIC0zOCw2ICszOCw3IEBACiBwdWJsaWMgY2xhc3MgQ3ZzSmF2YUNoZWNrT3V0Q29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RDdnNDaGVja091dENvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDaGVja091dFNjbVJlc3VsdCBleGVjdXRlQ3ZzQ29tbWFuZCggQ29tbWFuZGxpbmUgY2wgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNqYXZhL2NvbW1hbmQvZGlmZi9DdnNKYXZhRGlmZkNvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9jb21tYW5kL2RpZmYvQ3ZzSmF2YURpZmZDb21tYW5kLmphdmEKaW5kZXggNDI2YTVhNS4uMTQ3ZWZkMiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNqYXZhL2NvbW1hbmQvZGlmZi9DdnNKYXZhRGlmZkNvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvY29tbWFuZC9kaWZmL0N2c0phdmFEaWZmQ29tbWFuZC5qYXZhCkBAIC0zOCw2ICszOCw3IEBACiBwdWJsaWMgY2xhc3MgQ3ZzSmF2YURpZmZDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdEN2c0RpZmZDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgRGlmZlNjbVJlc3VsdCBleGVjdXRlQ3ZzQ29tbWFuZCggQ29tbWFuZGxpbmUgY2wgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNqYXZhL2NvbW1hbmQvZXhwb3J0L0N2c0phdmFFeHBvcnRDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvY29tbWFuZC9leHBvcnQvQ3ZzSmF2YUV4cG9ydENvbW1hbmQuamF2YQppbmRleCAzOGU5NDYzLi5jZGUzMzc4IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvY29tbWFuZC9leHBvcnQvQ3ZzSmF2YUV4cG9ydENvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvY29tbWFuZC9leHBvcnQvQ3ZzSmF2YUV4cG9ydENvbW1hbmQuamF2YQpAQCAtMzgsNiArMzgsNyBAQAogcHVibGljIGNsYXNzIEN2c0phdmFFeHBvcnRDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdEN2c0V4cG9ydENvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBFeHBvcnRTY21SZXN1bHQgZXhlY3V0ZUN2c0NvbW1hbmQoIENvbW1hbmRsaW5lIGNsICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9jb21tYW5kL2xpc3QvQ3ZzSmF2YUxpc3RDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvY29tbWFuZC9saXN0L0N2c0phdmFMaXN0Q29tbWFuZC5qYXZhCmluZGV4IDI5ZGVmNTYuLjM0MmM2ZTIgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9jb21tYW5kL2xpc3QvQ3ZzSmF2YUxpc3RDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNqYXZhL2NvbW1hbmQvbGlzdC9DdnNKYXZhTGlzdENvbW1hbmQuamF2YQpAQCAtMTksMTggKzE5LDE4IEBACiAgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQubGlzdC5MaXN0U2NtUmVzdWx0OwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmN2c2xpYi5jb21tYW5kLmxpc3QuQWJzdHJhY3RDdnNMaXN0Q29tbWFuZDsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5jdnNsaWIuY29tbWFuZC5zdGF0dXMuQ3ZzU3RhdHVzQ29uc3VtZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuY3ZzbGliLmN2c2phdmEudXRpbC5DdnNDb25uZWN0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmN2c2xpYi5jdnNqYXZhLnV0aWwuQ3ZzTG9nTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmNvZGVoYXVzLnBsZXh1cy51dGlsLmNsaS5Db21tYW5kbGluZTsKLQogaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CiBpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwogCitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQubGlzdC5MaXN0U2NtUmVzdWx0OworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmN2c2xpYi5jb21tYW5kLmxpc3QuQWJzdHJhY3RDdnNMaXN0Q29tbWFuZDsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5jdnNsaWIuY29tbWFuZC5saXN0LkN2c0xpc3RDb25zdW1lcjsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5jdnNsaWIuY3ZzamF2YS51dGlsLkN2c0Nvbm5lY3Rpb247CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuY3ZzbGliLmN2c2phdmEudXRpbC5DdnNMb2dMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuY29kZWhhdXMucGxleHVzLnV0aWwuY2xpLkNvbW1hbmRsaW5lOworCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOmV2ZW5pc3NlQGFwYWNoZS5vcmciPkVtbWFudWVsIFZlbmlzc2U8L2E+CiAgKiBAdmVyc2lvbiAkSWQkCkBAIC0zOCwxMiArMzgsMTMgQEAKIHB1YmxpYyBjbGFzcyBDdnNKYXZhTGlzdENvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0Q3ZzTGlzdENvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBMaXN0U2NtUmVzdWx0IGV4ZWN1dGVDdnNDb21tYW5kKCBDb21tYW5kbGluZSBjbCApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIEN2c0xvZ0xpc3RlbmVyIGxvZ0xpc3RlbmVyID0gbmV3IEN2c0xvZ0xpc3RlbmVyKCk7CiAKLSAgICAgICAgQ3ZzU3RhdHVzQ29uc3VtZXIgY29uc3VtZXIgPSBuZXcgQ3ZzU3RhdHVzQ29uc3VtZXIoIGdldExvZ2dlcigpLCBjbC5nZXRXb3JraW5nRGlyZWN0b3J5KCkgKTsKKyAgICAgICAgQ3ZzTGlzdENvbnN1bWVyIGNvbnN1bWVyID0gbmV3IEN2c0xpc3RDb25zdW1lciggZ2V0TG9nZ2VyKCkgKTsKIAogICAgICAgICB0cnkKICAgICAgICAgewpAQCAtNzMsNiArNzQsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSApOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIG5ldyBMaXN0U2NtUmVzdWx0KCBjbC50b1N0cmluZygpLCBjb25zdW1lci5nZXRDaGFuZ2VkRmlsZXMoKSApOworICAgICAgICByZXR1cm4gbmV3IExpc3RTY21SZXN1bHQoIGNsLnRvU3RyaW5nKCksIGNvbnN1bWVyLmdldEVudHJpZXMoKSApOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9jb21tYW5kL2xvZ2luL0N2c0phdmFMb2dpbkNvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9jb21tYW5kL2xvZ2luL0N2c0phdmFMb2dpbkNvbW1hbmQuamF2YQppbmRleCAxNGFmOWEzLi5mZmI4OGZmIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvY29tbWFuZC9sb2dpbi9DdnNKYXZhTG9naW5Db21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNqYXZhL2NvbW1hbmQvbG9naW4vQ3ZzSmF2YUxvZ2luQ29tbWFuZC5qYXZhCkBAIC0yOSw2ICsyOSw3IEBACiBwdWJsaWMgY2xhc3MgQ3ZzSmF2YUxvZ2luQ29tbWFuZAogICAgIGV4dGVuZHMgQ3ZzTG9naW5Db21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0N2c05UKCkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9jb21tYW5kL3JlbW92ZS9DdnNKYXZhUmVtb3ZlQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNqYXZhL2NvbW1hbmQvcmVtb3ZlL0N2c0phdmFSZW1vdmVDb21tYW5kLmphdmEKaW5kZXggMmUyNmYzMy4uZTJiYjExZiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNqYXZhL2NvbW1hbmQvcmVtb3ZlL0N2c0phdmFSZW1vdmVDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNqYXZhL2NvbW1hbmQvcmVtb3ZlL0N2c0phdmFSZW1vdmVDb21tYW5kLmphdmEKQEAgLTM4LDYgKzM4LDcgQEAKIHB1YmxpYyBjbGFzcyBDdnNKYXZhUmVtb3ZlQ29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RDdnNSZW1vdmVDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgUmVtb3ZlU2NtUmVzdWx0IGV4ZWN1dGVDdnNDb21tYW5kKCBDb21tYW5kbGluZSBjbCwgTGlzdCByZW1vdmVkRmlsZXMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNqYXZhL2NvbW1hbmQvc3RhdHVzL0N2c0phdmFTdGF0dXNDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvY29tbWFuZC9zdGF0dXMvQ3ZzSmF2YVN0YXR1c0NvbW1hbmQuamF2YQppbmRleCBhODEwNTI0Li45OGZlMDExIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvY29tbWFuZC9zdGF0dXMvQ3ZzSmF2YVN0YXR1c0NvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvY29tbWFuZC9zdGF0dXMvQ3ZzSmF2YVN0YXR1c0NvbW1hbmQuamF2YQpAQCAtMzgsNiArMzgsNyBAQAogcHVibGljIGNsYXNzIEN2c0phdmFTdGF0dXNDb21tYW5kCiAgICAgZXh0ZW5kcyBBYnN0cmFjdEN2c1N0YXR1c0NvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTdGF0dXNTY21SZXN1bHQgZXhlY3V0ZUN2c0NvbW1hbmQoIENvbW1hbmRsaW5lIGNsICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9jb21tYW5kL3RhZy9DdnNKYXZhVGFnQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNqYXZhL2NvbW1hbmQvdGFnL0N2c0phdmFUYWdDb21tYW5kLmphdmEKaW5kZXggODkwMThiMS4uMzlkNjI5OCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNqYXZhL2NvbW1hbmQvdGFnL0N2c0phdmFUYWdDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNqYXZhL2NvbW1hbmQvdGFnL0N2c0phdmFUYWdDb21tYW5kLmphdmEKQEAgLTM4LDYgKzM4LDcgQEAKIHB1YmxpYyBjbGFzcyBDdnNKYXZhVGFnQ29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RDdnNUYWdDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgVGFnU2NtUmVzdWx0IGV4ZWN1dGVDdnNDb21tYW5kKCBDb21tYW5kbGluZSBjbCApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvY29tbWFuZC91cGRhdGUvQ3ZzSmF2YVVwZGF0ZUNvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9jb21tYW5kL3VwZGF0ZS9DdnNKYXZhVXBkYXRlQ29tbWFuZC5qYXZhCmluZGV4IDJjOGU3ZmMuLmJiNmIyNDggMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9jb21tYW5kL3VwZGF0ZS9DdnNKYXZhVXBkYXRlQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS9jb21tYW5kL3VwZGF0ZS9DdnNKYXZhVXBkYXRlQ29tbWFuZC5qYXZhCkBAIC00MCw2ICs0MCw3IEBACiBwdWJsaWMgY2xhc3MgQ3ZzSmF2YVVwZGF0ZUNvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0Q3ZzVXBkYXRlQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFVwZGF0ZVNjbVJlc3VsdCBleGVjdXRlQ3ZzQ29tbWFuZCggQ29tbWFuZGxpbmUgY2wgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNqYXZhL3V0aWwvQ3ZzQ29ubmVjdGlvbi5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNqYXZhL3V0aWwvQ3ZzQ29ubmVjdGlvbi5qYXZhCmluZGV4IDMzYWYyZWYuLjJjNGZjMTkgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS91dGlsL0N2c0Nvbm5lY3Rpb24uamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvdXRpbC9DdnNDb25uZWN0aW9uLmphdmEKQEAgLTQ4LDYgKzQ4LDcgQEAKICAqIEEgQ3ZzIGNvbm5lY3Rpb24gdGhhdCBzaW11bGF0ZXMgYSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlLgogICoKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOmVwdWdoQHVwc3RhdGUuY29tIj5FcmljIFB1Z2g8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBDdnNDb25uZWN0aW9uCiB7CkBAIC0xMTMsMjUgKzExNCwyNiBAQAogICAgICAqIENyZWF0ZXMgdGhlIGNvbm5lY3Rpb24gYW5kIHRoZSBjbGllbnQgYW5kIGNvbm5lY3RzLgogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBjb25uZWN0KCBDVlNSb290IHJvb3QsIFN0cmluZyBwYXNzd29yZCApCi0gICAgICAgIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24sIEF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uLCBDb21tYW5kQWJvcnRlZEV4Y2VwdGlvbgorICAgICAgICB0aHJvd3MgQXV0aGVudGljYXRpb25FeGNlcHRpb24sIENvbW1hbmRBYm9ydGVkRXhjZXB0aW9uCiAgICAgewogICAgICAgICBpZiAoIENWU1Jvb3QuTUVUSE9EX0VYVC5lcXVhbHMoIHJvb3QuZ2V0TWV0aG9kKCkgKSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBjdnNfcnNoID0gU3lzdGVtLmdldFByb3BlcnR5KCAibWF2ZW4uc2NtLmN2cy5qYXZhLmN2c19yc2giICk7Ci0gICAgICAgICAgICBpZiAoIGN2c19yc2ggPT0gbnVsbCApCisgICAgICAgICAgICBTdHJpbmcgY3ZzUnNoID0gU3lzdGVtLmdldFByb3BlcnR5KCAibWF2ZW4uc2NtLmN2cy5qYXZhLmN2c19yc2giICk7CisgICAgICAgICAgICBpZiAoIGN2c1JzaCA9PSBudWxsICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGN2c19yc2ggPSBDb21tYW5kTGluZVV0aWxzLmdldFN5c3RlbUVudlZhcnMoKS5nZXRQcm9wZXJ0eSggIkNWU19SU0giICk7CisgICAgICAgICAgICAgICAgICAgIGN2c1JzaCA9IENvbW1hbmRMaW5lVXRpbHMuZ2V0U3lzdGVtRW52VmFycygpLmdldFByb3BlcnR5KCAiQ1ZTX1JTSCIgKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2F0Y2ggKCBJT0V4Y2VwdGlvbiBlICkKICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIHdlIGFzc3VtZSBzZWFyY2hpbmcgZW52IHZhciBjYW4ndCBmYWlsCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIGN2c19yc2ggIT0gbnVsbCApCisgICAgICAgICAgICBpZiAoIGN2c1JzaCAhPSBudWxsICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIGN2c19yc2guaW5kZXhPZiggJyAnICkgPCAwICkKKyAgICAgICAgICAgICAgICBpZiAoIGN2c1JzaC5pbmRleE9mKCAnICcgKSA8IDAgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgLy9jdnNfcnNoIHNob3VsZCBiZSAncnNoJyBvciAnc3NoJwogICAgICAgICAgICAgICAgICAgICAvL0NvbXBsZXRlIHRoZSBjb21tYW5kIHRvIHVzZQpAQCAtMTQxLDEwICsxNDMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KCAidXNlci5uYW1lIiApOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgY3ZzX3JzaCArPSAiICIgKyB1c2VybmFtZSArICJAIiArIHJvb3QuZ2V0SG9zdE5hbWUoKSArICIgY3ZzIHNlcnZlciI7CisgICAgICAgICAgICAgICAgICAgIGN2c1JzaCArPSAiICIgKyB1c2VybmFtZSArICJAIiArIHJvb3QuZ2V0SG9zdE5hbWUoKSArICIgY3ZzIHNlcnZlciI7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgQWJzdHJhY3RDb25uZWN0aW9uIGNvbm4gPSBuZXcgb3JnLm5ldGJlYW5zLmxpYi5jdnNjbGllbnQuY29ubmVjdGlvbi5FeHRDb25uZWN0aW9uKCBjdnNfcnNoICk7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RDb25uZWN0aW9uIGNvbm4gPSBuZXcgb3JnLm5ldGJlYW5zLmxpYi5jdnNjbGllbnQuY29ubmVjdGlvbi5FeHRDb25uZWN0aW9uKCBjdnNSc2ggKTsKICAgICAgICAgICAgICAgICBjb25uLnNldFJlcG9zaXRvcnkoIHJvb3QuZ2V0UmVwb3NpdG9yeSgpICk7CiAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiA9IGNvbm47CiAgICAgICAgICAgICB9CkBAIC00MjMsOSArNDI1LDkgQEAKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlICkKICAgICAgICAgewotICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCAiSW5jb3JyZWN0IGZvcm1hdCBmb3IgQ1ZTUm9vdDogIiArIGN2c1Jvb3QgKyAiXG5UaGUgY29ycmVjdCBmb3JtYXQgaXM6ICIgKwotICAgICAgICAgICAgICAgICJbOm1ldGhvZDpdW1t1c2VyXVs6cGFzc3dvcmRdQF1baG9zdG5hbWU6W3BvcnRdXS9wYXRoL3RvL3JlcG9zaXRvcnkiICsKLSAgICAgICAgICAgICAgICAiXG53aGVyZSBcIm1ldGhvZFwiIGlzIHBzZXJ2ZXIuIiApOworICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCAiSW5jb3JyZWN0IGZvcm1hdCBmb3IgQ1ZTUm9vdDogIiArIGN2c1Jvb3QgKyAiXG5UaGUgY29ycmVjdCBmb3JtYXQgaXM6ICIKKyAgICAgICAgICAgICAgICArICJbOm1ldGhvZDpdW1t1c2VyXVs6cGFzc3dvcmRdQF1baG9zdG5hbWU6W3BvcnRdXS9wYXRoL3RvL3JlcG9zaXRvcnkiCisgICAgICAgICAgICAgICAgKyAiXG53aGVyZSBcIm1ldGhvZFwiIGlzIHBzZXJ2ZXIuIiApOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS91dGlsL0N2c0xvZ0xpc3RlbmVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvdXRpbC9DdnNMb2dMaXN0ZW5lci5qYXZhCmluZGV4IDM3MTQxOGUuLjJlZDJiNzQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS91dGlsL0N2c0xvZ0xpc3RlbmVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNqYXZhL3V0aWwvQ3ZzTG9nTGlzdGVuZXIuamF2YQpAQCAtMjUsMzIgKzI1LDM1IEBACiAvKioKICAqIEEgYmFzaWMgaW1wbGVtZW50YXRpb24gb2YgYSBDVlMgbGlzdGVuZXIuIEl0IG1lcmVseSBzYXZlcyB1cAogICogaW50byBTdHJpbmdCdWZmZXJzIHRoZSBzdGRvdXQgYW5kIHN0ZGVyciBwcmludHN0cmVhbXMuCi0gKiAKKyAqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzplcHVnaEB1cHN0YXRlLmNvbSI+RXJpYyBQdWdoPC9hPgorICogQHZlcnNpb24gJElkJAogICovCi1wdWJsaWMgY2xhc3MgQ3ZzTG9nTGlzdGVuZXIgZXh0ZW5kcyBDVlNBZGFwdGVyCitwdWJsaWMgY2xhc3MgQ3ZzTG9nTGlzdGVuZXIKKyAgICBleHRlbmRzIENWU0FkYXB0ZXIKIHsKICAgICBwcml2YXRlIGZpbmFsIFN0cmluZ0J1ZmZlciB0YWdnZWRMaW5lID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCiAgICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgc3Rkb3V0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCiAgICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgc3RkZXJyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogCiAgICAgLyoqCi0JICogQ2FsbGVkIHdoZW4gdGhlIHNlcnZlciB3YW50cyB0byBzZW5kIGEgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQgdG8gdGhlCi0JICogdXNlci4gVGhlIG1lc3NhZ2UgaXMgb25seSBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMgYW5kIGNsaWVudHMgY2FuCi0JICogY2hvb3NlIHRvIGlnbm9yZSB0aGVzZSBtZXNzYWdlcyBpZiB0aGV5IHdpc2guCi0JICogCi0JICogQHBhcmFtIGUgdGhlIGV2ZW50Ci0JICovCi0gICAgcHVibGljIHZvaWQgbWVzc2FnZVNlbnQoTWVzc2FnZUV2ZW50IGUpCisgICAgICogQ2FsbGVkIHdoZW4gdGhlIHNlcnZlciB3YW50cyB0byBzZW5kIGEgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQgdG8gdGhlCisgICAgICogdXNlci4gVGhlIG1lc3NhZ2UgaXMgb25seSBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMgYW5kIGNsaWVudHMgY2FuCisgICAgICogY2hvb3NlIHRvIGlnbm9yZSB0aGVzZSBtZXNzYWdlcyBpZiB0aGV5IHdpc2guCisgICAgICoKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICovCisgICAgcHVibGljIHZvaWQgbWVzc2FnZVNlbnQoIE1lc3NhZ2VFdmVudCBlICkKICAgICB7CiAgICAgICAgIFN0cmluZyBsaW5lID0gZS5nZXRNZXNzYWdlKCk7CiAgICAgICAgIFN0cmluZ0J1ZmZlciBzdHJlYW0gPSBlLmlzRXJyb3IoKSA/IHN0ZGVyciA6IHN0ZG91dDsKIAotICAgICAgICBpZiAoZS5pc1RhZ2dlZCgpKQorICAgICAgICBpZiAoIGUuaXNUYWdnZWQoKSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0KLSAgICAgICAgICAgICAgICBNZXNzYWdlRXZlbnQucGFyc2VUYWdnZWRNZXNzYWdlKHRhZ2dlZExpbmUsIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgIGlmIChtZXNzYWdlICE9IG51bGwpCisgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IE1lc3NhZ2VFdmVudC5wYXJzZVRhZ2dlZE1lc3NhZ2UoIHRhZ2dlZExpbmUsIGUuZ2V0TWVzc2FnZSgpICk7CisgICAgICAgICAgICBpZiAoIG1lc3NhZ2UgIT0gbnVsbCApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy9zdHJlYW0ucHJpbnRsbihtZXNzYWdlKTsKICAgICAgICAgICAgICAgICBzdHJlYW0uYXBwZW5kKCBtZXNzYWdlICkuYXBwZW5kKCAiXG4iICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvdXRpbC9FeHRDb25uZWN0aW9uLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2N2c2phdmEvdXRpbC9FeHRDb25uZWN0aW9uLmphdmEKaW5kZXggMzk0Yzk2My4uM2YxMmZhNiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jdnNqYXZhL3V0aWwvRXh0Q29ubmVjdGlvbi5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY3ZzamF2YS91dGlsL0V4dENvbm5lY3Rpb24uamF2YQpAQCAtODYsNiArODYsNyBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBvcGVuKCkKICAgICAgICAgdGhyb3dzIEF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uLCBDb21tYW5kQWJvcnRlZEV4Y2VwdGlvbgogICAgIHsKQEAgLTE2Myw2ICsxNjQsNyBAQAogICAgICAgICBzZXRPdXRwdXRTdHJlYW0oIG5ldyBMb2dnZWREYXRhT3V0cHV0U3RyZWFtKCBzZXNzaW9uLmdldFN0ZGluKCkgKSApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgdmVyaWZ5KCkKICAgICAgICAgdGhyb3dzIEF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uCiAgICAgewpAQCAtMjI1LDI4ICsyMjcsMzMgQEAKICAgICAgICAgc2V0T3V0cHV0U3RyZWFtKCBudWxsICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpCiAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgogICAgIHsKICAgICAgICAgY2xvc2VDb25uZWN0aW9uKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc09wZW4oKQogICAgIHsKICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24gIT0gbnVsbDsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBpbnQgZ2V0UG9ydCgpCiAgICAgewogICAgICAgICByZXR1cm4gcG9ydDsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIG1vZGlmeUlucHV0U3RyZWFtKCBDb25uZWN0aW9uTW9kaWZpZXIgbW9kaWZpZXIgKQogICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KICAgICB7CiAgICAgICAgIG1vZGlmaWVyLm1vZGlmeUlucHV0U3RyZWFtKCBnZXRJbnB1dFN0cmVhbSgpICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBtb2RpZnlPdXRwdXRTdHJlYW0oIENvbm5lY3Rpb25Nb2RpZmllciBtb2RpZmllciApCiAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmEvc3JjL3NpdGUvc2l0ZS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9zaXRlL3NpdGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZjg4NTgKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhL3NyYy9zaXRlL3NpdGUueG1sCkBAIC0wLDAgKzEsMzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz4KKworPCEtLQorICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICB+IHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgfiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgIH4gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB+IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgfgorICB+ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIH4KKyAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgIH4gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgfiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgfiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgfiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgIH4gdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorCis8cHJvamVjdCBuYW1lPSJNYXZlbiBTQ00gQ1ZTIEphdmEiPgorICA8Ym9keT4KKyAgICA8bWVudSByZWY9InBhcmVudCIgLz4KKworICAgIDxtZW51IG5hbWU9Ik92ZXJ2aWV3Ij4KKyAgICAgIDxpdGVtIG5hbWU9IkludHJvZHVjdGlvbiIgaHJlZj0iaW5kZXguaHRtbCIvPgorICAgIDwvbWVudT4KKworICAgIDxtZW51IHJlZj0icmVwb3J0cyIgaW5oZXJpdD0iYm90dG9tIiAvPgorICA8L2JvZHk+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3BvbS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3BvbS54bWwKaW5kZXggZTQ0YWFiNC4uMDZmNzY2ZCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzdGVzdC9wb20ueG1sCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c3Rlc3QvcG9tLnhtbApAQCAtMSw0ICsxLDYgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCEtLQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPCEtLQogICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKICAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKICAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpAQCAtMTgsMjAgKzIwLDIzIEBACiAgIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxwYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVycy1jdnM8L2FydGlmYWN0SWQ+CiAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVycy1jdnM8L2FydGlmYWN0SWQ+CiAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgogICA8L3BhcmVudD4KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0PC9hcnRpZmFjdElkPgorCiAgIDxuYW1lPk1hdmVuIFNDTSBDVlMgUHJvdmlkZXIgVENLIHRlc3RzPC9uYW1lPgotICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CisgIDxkZXNjcmlwdGlvbj5UZXN0cyBsaWJyYXJ5IGZvciB0aGUgU0NNIENWUyBQcm92aWRlci48L2Rlc2NyaXB0aW9uPgorCiAgIDxkZXBlbmRlbmNpZXM+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS10ZXN0PC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgPC9kZXBlbmRlbmNpZXM+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL0Fic3RyYWN0Q3ZzU2NtVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9BYnN0cmFjdEN2c1NjbVRlc3QuamF2YQppbmRleCA3NjJmNGI5Li41NWNjMGU4IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL0Fic3RyYWN0Q3ZzU2NtVGVzdC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c3Rlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvQWJzdHJhY3RDdnNTY21UZXN0LmphdmEKQEAgLTMyLDYgKzMyLDcgQEAKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEN2c1NjbVRlc3QKICAgICBleHRlbmRzIFNjbVRlc3RDYXNlCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBzZXRVcCgpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL0N2c1NjbVRlc3RVdGlscy5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9DdnNTY21UZXN0VXRpbHMuamF2YQppbmRleCBlZWEzNDM5Li4zYjg0NDZlIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL0N2c1NjbVRlc3RVdGlscy5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c3Rlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvQ3ZzU2NtVGVzdFV0aWxzLmphdmEKQEAgLTMzLDYgKzMzLDkgQEAKICAqLwogcHVibGljIGZpbmFsIGNsYXNzIEN2c1NjbVRlc3RVdGlscwogeworICAgIC8qKiAnY3ZzJyBjb21tYW5kIGxpbmUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDVlNfQ09NTUFORF9MSU5FID0gImN2cyI7CisKICAgICBwcml2YXRlIEN2c1NjbVRlc3RVdGlscygpCiAgICAgewogICAgIH0KQEAgLTQ1LDcgKzQ4LDcgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgZXhlY3V0ZUNWUyggRmlsZSB3b3JraW5nRGlyZWN0b3J5LCBTdHJpbmcgYXJndW1lbnRzICkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLSAgICAgICAgU2NtVGVzdENhc2UuZXhlY3V0ZSggd29ya2luZ0RpcmVjdG9yeSwgImN2cyIsIGFyZ3VtZW50cyApOworICAgICAgICBTY21UZXN0Q2FzZS5leGVjdXRlKCB3b3JraW5nRGlyZWN0b3J5LCBDVlNfQ09NTUFORF9MSU5FLCBhcmd1bWVudHMgKTsKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgaW5pdFJlcG8oIEZpbGUgcmVwb3NpdG9yeSwgRmlsZSB3b3JraW5nRGlyZWN0b3J5LCBGaWxlIGFzc2VydGlvbkRpcmVjdG9yeSApCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvYnJhbmNoL0N2c0JyYW5jaENvbW1hbmRUY2tUZXN0LmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvYnJhbmNoL0N2c0JyYW5jaENvbW1hbmRUY2tUZXN0LmphdmEKaW5kZXggZmFkOGJjNy4uMTZjMjA1OCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2JyYW5jaC9DdnNCcmFuY2hDb21tYW5kVGNrVGVzdC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c3Rlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9icmFuY2gvQ3ZzQnJhbmNoQ29tbWFuZFRja1Rlc3QuamF2YQpAQCAtMzEsMTYgKzMxLDE5IEBACiBwdWJsaWMgY2xhc3MgQ3ZzQnJhbmNoQ29tbWFuZFRja1Rlc3QKICAgICBleHRlbmRzIEJyYW5jaENvbW1hbmRUY2tUZXN0CiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNjbVVybCgpCiAgICAgewogICAgICAgICByZXR1cm4gQ3ZzU2NtVGVzdFV0aWxzLmdldFNjbVVybCggZ2V0UmVwb3NpdG9yeVJvb3QoKSwgZ2V0TW9kdWxlKCkgKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0TW9kdWxlKCkKICAgICB7CiAgICAgICAgIHJldHVybiAidGVzdC1yZXBvL21vZHVsZSI7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBpbml0UmVwbygpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvY2hhbmdlbG9nL0N2c0NoYW5nZUxvZ0NvbW1hbmRUZXN0LmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvY2hhbmdlbG9nL0N2c0NoYW5nZUxvZ0NvbW1hbmRUZXN0LmphdmEKaW5kZXggZWZhZjUzMC4uZGJhMTcyZiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2NoYW5nZWxvZy9DdnNDaGFuZ2VMb2dDb21tYW5kVGVzdC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c3Rlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9jaGFuZ2Vsb2cvQ3ZzQ2hhbmdlTG9nQ29tbWFuZFRlc3QuamF2YQpAQCAtMzUsNiArMzUsNyBAQAogcHVibGljIGNsYXNzIEN2c0NoYW5nZUxvZ0NvbW1hbmRUZXN0CiAgICAgZXh0ZW5kcyBBYnN0cmFjdEN2c1NjbVRlc3QKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0TW9kdWxlKCkKICAgICB7CiAgICAgICAgIHJldHVybiAidGVzdC1yZXBvL2NoYW5nZWxvZyI7CkBAIC03Myw2ICs3NCwxMyBAQAogICAgIHByaXZhdGUgdm9pZCB0ZXN0Q2hhbmdlTG9nKCBEYXRlIHN0YXJ0RGF0ZSwgRGF0ZSBlbmREYXRlLCBpbnQgY2hhbmdlTG9nU2l6ZSwgU3RyaW5nIGJyYW5jaCApCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CisgICAgICAgIGlmICggIWlzU3lzdGVtQ21kKCBDdnNTY21UZXN0VXRpbHMuQ1ZTX0NPTU1BTkRfTElORSApICkKKyAgICAgICAgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiJyIgKyBDdnNTY21UZXN0VXRpbHMuQ1ZTX0NPTU1BTkRfTElORSArICInIGlzIG5vdCBhIHN5c3RlbSBjb21tYW5kLiBJZ25vcmVkICIKKyAgICAgICAgICAgICAgICArIGdldE5hbWUoKSArICIuIiApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgU2NtTWFuYWdlciBzY21NYW5hZ2VyID0gZ2V0U2NtTWFuYWdlcigpOwogCiAgICAgICAgIEN2c1NjbVRlc3RVdGlscy5leGVjdXRlQ1ZTKCBnZXRXb3JraW5nRGlyZWN0b3J5KCksCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvY2hlY2tpbi9DdnNDaGVja0luQ29tbWFuZFRja1Rlc3QuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c3Rlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9jaGVja2luL0N2c0NoZWNrSW5Db21tYW5kVGNrVGVzdC5qYXZhCmluZGV4IGFlZGVkZjUuLmQxZWJiMzEgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c3Rlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9jaGVja2luL0N2c0NoZWNrSW5Db21tYW5kVGNrVGVzdC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c3Rlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9jaGVja2luL0N2c0NoZWNrSW5Db21tYW5kVGNrVGVzdC5qYXZhCkBAIC0yOSwxNiArMjksMTkgQEAKIHB1YmxpYyBjbGFzcyBDdnNDaGVja0luQ29tbWFuZFRja1Rlc3QKICAgICBleHRlbmRzIENoZWNrSW5Db21tYW5kVGNrVGVzdAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21VcmwoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEN2c1NjbVRlc3RVdGlscy5nZXRTY21VcmwoIGdldFJlcG9zaXRvcnlSb290KCksIGdldE1vZHVsZSgpICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldE1vZHVsZSgpCiAgICAgewogICAgICAgICByZXR1cm4gInRlc3QtcmVwby9tb2R1bGUiOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgaW5pdFJlcG8oKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2NoZWNrb3V0L0N2c0NoZWNrT3V0Q29tbWFuZFRja1Rlc3QuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c3Rlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9jaGVja291dC9DdnNDaGVja091dENvbW1hbmRUY2tUZXN0LmphdmEKaW5kZXggMGE3OTJjNC4uZjAyNzYzYiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2NoZWNrb3V0L0N2c0NoZWNrT3V0Q29tbWFuZFRja1Rlc3QuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvY2hlY2tvdXQvQ3ZzQ2hlY2tPdXRDb21tYW5kVGNrVGVzdC5qYXZhCkBAIC0yOSwxNiArMjksMTkgQEAKIHB1YmxpYyBjbGFzcyBDdnNDaGVja091dENvbW1hbmRUY2tUZXN0CiAgICAgZXh0ZW5kcyBDaGVja091dENvbW1hbmRUY2tUZXN0CiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNjbVVybCgpCiAgICAgewogICAgICAgICByZXR1cm4gQ3ZzU2NtVGVzdFV0aWxzLmdldFNjbVVybCggZ2V0UmVwb3NpdG9yeVJvb3QoKSwgZ2V0TW9kdWxlKCkgKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0TW9kdWxlKCkKICAgICB7CiAgICAgICAgIHJldHVybiAidGVzdC1yZXBvL21vZHVsZSI7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBpbml0UmVwbygpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvY2hlY2tvdXQvQ3ZzQ2hlY2tvdXRDb21tYW5kVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL2NoZWNrb3V0L0N2c0NoZWNrb3V0Q29tbWFuZFRlc3QuamF2YQppbmRleCA5ZThmNDIyLi4wY2QzY2M2IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvY2hlY2tvdXQvQ3ZzQ2hlY2tvdXRDb21tYW5kVGVzdC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c3Rlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9jaGVja291dC9DdnNDaGVja291dENvbW1hbmRUZXN0LmphdmEKQEAgLTI0LDYgKzI0LDcgQEAKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLmNoZWNrb3V0LkNoZWNrT3V0U2NtUmVzdWx0OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLm1hbmFnZXIuU2NtTWFuYWdlcjsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5jdnNsaWIuQWJzdHJhY3RDdnNTY21UZXN0OworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmN2c2xpYi5DdnNTY21UZXN0VXRpbHM7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CkBAIC0zNiw2ICszNyw3IEBACiBwdWJsaWMgY2xhc3MgQ3ZzQ2hlY2tvdXRDb21tYW5kVGVzdAogICAgIGV4dGVuZHMgQWJzdHJhY3RDdnNTY21UZXN0CiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldE1vZHVsZSgpCiAgICAgewogICAgICAgICByZXR1cm4gInRlc3QtcmVwby9jaGVja291dCI7CkBAIC00Nyw2ICs0OSwxMyBAQAogICAgIHB1YmxpYyB2b2lkIHRlc3RDaGVja091dFdpdGhvdXRUYWcoKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgeworICAgICAgICBpZiAoICFpc1N5c3RlbUNtZCggQ3ZzU2NtVGVzdFV0aWxzLkNWU19DT01NQU5EX0xJTkUgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggIiciICsgQ3ZzU2NtVGVzdFV0aWxzLkNWU19DT01NQU5EX0xJTkUgKyAiJyBpcyBub3QgYSBzeXN0ZW0gY29tbWFuZC4gSWdub3JlZCAiCisgICAgICAgICAgICAgICAgKyBnZXROYW1lKCkgKyAiLiIgKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIFNjbU1hbmFnZXIgc2NtTWFuYWdlciA9IGdldFNjbU1hbmFnZXIoKTsKIAogICAgICAgICBDaGVja091dFNjbVJlc3VsdCByZXN1bHQgPSBzY21NYW5hZ2VyLmNoZWNrT3V0KCBnZXRTY21SZXBvc2l0b3J5KCksIGdldFNjbUZpbGVTZXQoKSApOwpAQCAtNzUsNiArODQsMTMgQEAKICAgICBwdWJsaWMgdm9pZCB0ZXN0Q2hlY2tPdXRXaXRoVGFnKCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKKyAgICAgICAgaWYgKCAhaXNTeXN0ZW1DbWQoIEN2c1NjbVRlc3RVdGlscy5DVlNfQ09NTUFORF9MSU5FICkgKQorICAgICAgICB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oICInIiArIEN2c1NjbVRlc3RVdGlscy5DVlNfQ09NTUFORF9MSU5FICsgIicgaXMgbm90IGEgc3lzdGVtIGNvbW1hbmQuIElnbm9yZWQgIgorICAgICAgICAgICAgICAgICsgZ2V0TmFtZSgpICsgIi4iICk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBTY21NYW5hZ2VyIHNjbU1hbmFnZXIgPSBnZXRTY21NYW5hZ2VyKCk7CiAKICAgICAgICAgQ2hlY2tPdXRTY21SZXN1bHQgcmVzdWx0ID0gc2NtTWFuYWdlci5nZXRQcm92aWRlckJ5UmVwb3NpdG9yeSggZ2V0U2NtUmVwb3NpdG9yeSgpICkuY2hlY2tPdXQoCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvZGlmZi9DdnNEaWZmQ29tbWFuZFRja1Rlc3QuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c3Rlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9kaWZmL0N2c0RpZmZDb21tYW5kVGNrVGVzdC5qYXZhCmluZGV4IDI4ZDhiM2UuLmRjZGQ2YTQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c3Rlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9kaWZmL0N2c0RpZmZDb21tYW5kVGNrVGVzdC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c3Rlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9kaWZmL0N2c0RpZmZDb21tYW5kVGNrVGVzdC5qYXZhCkBAIC0yOSwxNiArMjksMTkgQEAKIHB1YmxpYyBjbGFzcyBDdnNEaWZmQ29tbWFuZFRja1Rlc3QKICAgICBleHRlbmRzIERpZmZDb21tYW5kVGNrVGVzdAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21VcmwoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEN2c1NjbVRlc3RVdGlscy5nZXRTY21VcmwoIGdldFJlcG9zaXRvcnlSb290KCksIGdldE1vZHVsZSgpICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldE1vZHVsZSgpCiAgICAgewogICAgICAgICByZXR1cm4gInRlc3QtcmVwby9tb2R1bGUiOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgaW5pdFJlcG8oKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL3N0YXR1cy9DdnNTdGF0dXNDb21tYW5kVGNrVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL3N0YXR1cy9DdnNTdGF0dXNDb21tYW5kVGNrVGVzdC5qYXZhCmluZGV4IGIxMjYzMjkuLjZhZGVlNWMgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c3Rlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC9zdGF0dXMvQ3ZzU3RhdHVzQ29tbWFuZFRja1Rlc3QuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvc3RhdHVzL0N2c1N0YXR1c0NvbW1hbmRUY2tUZXN0LmphdmEKQEAgLTI5LDE2ICsyOSwxOSBAQAogcHVibGljIGNsYXNzIEN2c1N0YXR1c0NvbW1hbmRUY2tUZXN0CiAgICAgZXh0ZW5kcyBTdGF0dXNDb21tYW5kVGNrVGVzdAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21VcmwoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEN2c1NjbVRlc3RVdGlscy5nZXRTY21VcmwoIGdldFJlcG9zaXRvcnlSb290KCksIGdldE1vZHVsZSgpICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldE1vZHVsZSgpCiAgICAgewogICAgICAgICByZXR1cm4gInRlc3QtcmVwby9tb2R1bGUiOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgaW5pdFJlcG8oKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL3RhZy9DdnNUYWdDb21tYW5kVGNrVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL3RhZy9DdnNUYWdDb21tYW5kVGNrVGVzdC5qYXZhCmluZGV4IGFjOTk5NTQuLjIyZGY4OGYgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c3Rlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC90YWcvQ3ZzVGFnQ29tbWFuZFRja1Rlc3QuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvdGFnL0N2c1RhZ0NvbW1hbmRUY2tUZXN0LmphdmEKQEAgLTMxLDE2ICszMSwxOSBAQAogcHVibGljIGNsYXNzIEN2c1RhZ0NvbW1hbmRUY2tUZXN0CiAgICAgZXh0ZW5kcyBUYWdDb21tYW5kVGNrVGVzdAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21VcmwoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEN2c1NjbVRlc3RVdGlscy5nZXRTY21VcmwoIGdldFJlcG9zaXRvcnlSb290KCksIGdldE1vZHVsZSgpICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldE1vZHVsZSgpCiAgICAgewogICAgICAgICByZXR1cm4gInRlc3QtcmVwby9tb2R1bGUiOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgaW5pdFJlcG8oKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL3VwZGF0ZS9DdnNVcGRhdGVDb21tYW5kVGNrVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL3VwZGF0ZS9DdnNVcGRhdGVDb21tYW5kVGNrVGVzdC5qYXZhCmluZGV4IGRlYTYzYTYuLmRlMDQ3YjggMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c3Rlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC91cGRhdGUvQ3ZzVXBkYXRlQ29tbWFuZFRja1Rlc3QuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvdXBkYXRlL0N2c1VwZGF0ZUNvbW1hbmRUY2tUZXN0LmphdmEKQEAgLTI5LDE2ICsyOSwxOSBAQAogcHVibGljIGNsYXNzIEN2c1VwZGF0ZUNvbW1hbmRUY2tUZXN0CiAgICAgZXh0ZW5kcyBVcGRhdGVDb21tYW5kVGNrVGVzdAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21VcmwoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEN2c1NjbVRlc3RVdGlscy5nZXRTY21VcmwoIGdldFJlcG9zaXRvcnlSb290KCksIGdldE1vZHVsZSgpICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldE1vZHVsZSgpCiAgICAgewogICAgICAgICByZXR1cm4gInRlc3QtcmVwby9tb2R1bGUiOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgaW5pdFJlcG8oKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL3VwZGF0ZS9DdnNVcGRhdGVDb21tYW5kVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9tYXZlbi1zY20tcHJvdmlkZXItY3ZzdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2N2c2xpYi9jb21tYW5kL3VwZGF0ZS9DdnNVcGRhdGVDb21tYW5kVGVzdC5qYXZhCmluZGV4IDY5ZWE0ODcuLjQyMzkzMjEgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c3Rlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9jdnNsaWIvY29tbWFuZC91cGRhdGUvQ3ZzVXBkYXRlQ29tbWFuZFRlc3QuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvY3ZzbGliL2NvbW1hbmQvdXBkYXRlL0N2c1VwZGF0ZUNvbW1hbmRUZXN0LmphdmEKQEAgLTQ2LDYgKzQ2LDcgQEAKIAogICAgIHByaXZhdGUgRmlsZSBhc3NlcnRpb25EaXJlY3Rvcnk7CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIHNldFVwKCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKQEAgLTYwLDYgKzYxLDcgQEAKICAgICAgICAgQ3ZzU2NtVGVzdFV0aWxzLmluaXRSZXBvKCByZXBvc2l0b3J5LCB3b3JraW5nRGlyZWN0b3J5LCBhc3NlcnRpb25EaXJlY3RvcnkgKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0TW9kdWxlKCkKICAgICB7CiAgICAgICAgIHJldHVybiAidGVzdC1yZXBvL3VwZGF0ZSI7CkBAIC03MSw2ICs3MywxMyBAQAogICAgIHB1YmxpYyB2b2lkIHRlc3RDdnNVcGRhdGUoKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgeworICAgICAgICBpZiAoICFpc1N5c3RlbUNtZCggQ3ZzU2NtVGVzdFV0aWxzLkNWU19DT01NQU5EX0xJTkUgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggIiciICsgQ3ZzU2NtVGVzdFV0aWxzLkNWU19DT01NQU5EX0xJTkUgKyAiJyBpcyBub3QgYSBzeXN0ZW0gY29tbWFuZC4gSWdub3JlZCAiCisgICAgICAgICAgICAgICAgKyBnZXROYW1lKCkgKyAiLiIgKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIFNjbU1hbmFnZXIgc2NtTWFuYWdlciA9IGdldFNjbU1hbmFnZXIoKTsKIAogICAgICAgICBTdHJpbmcgc2NtVXJsID0gQ3ZzU2NtVGVzdFV0aWxzLmdldFNjbVVybCggcmVwb3NpdG9yeSwgZ2V0TW9kdWxlKCkgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvbWF2ZW4tc2NtLXByb3ZpZGVyLWN2c3Rlc3Qvc3JjL3NpdGUvc2l0ZS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3NyYy9zaXRlL3NpdGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MDBhNWIKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL21hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0L3NyYy9zaXRlL3NpdGUueG1sCkBAIC0wLDAgKzEsMzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz4KKworPCEtLQorICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICB+IHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgfiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgIH4gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB+IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgfgorICB+ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIH4KKyAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgIH4gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgfiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgfiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgfiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgIH4gdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorCis8cHJvamVjdCBuYW1lPSJNYXZlbiBTQ00gQ1ZTIFRlc3QiPgorICA8Ym9keT4KKyAgICA8bWVudSByZWY9InBhcmVudCIgLz4KKworICAgIDxtZW51IG5hbWU9Ik92ZXJ2aWV3Ij4KKyAgICAgIDxpdGVtIG5hbWU9IkludHJvZHVjdGlvbiIgaHJlZj0iaW5kZXguaHRtbCIvPgorICAgIDwvbWVudT4KKworICAgIDxtZW51IHJlZj0icmVwb3J0cyIgaW5oZXJpdD0iYm90dG9tIiAvPgorICA8L2JvZHk+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL3BvbS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL3BvbS54bWwKaW5kZXggMjg2MTUwYy4uYjk4YjAwYiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWN2cy9wb20ueG1sCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvcG9tLnhtbApAQCAtMSw0ICsxLDYgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCEtLQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPCEtLQogICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKICAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKICAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpAQCAtMTgsMTYgKzIwLDIwIEBACiAgIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxwYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyczwvYXJ0aWZhY3RJZD4KICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXJzPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+Ci0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwogICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXJzLWN2czwvYXJ0aWZhY3RJZD4KICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKwogICA8bmFtZT5NYXZlbiBTQ00gQ1ZTIFByb3ZpZGVyIC0gUGFyZW50PC9uYW1lPgotICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CisgIDxkZXNjcmlwdGlvbj5TQ00gUHJvdmlkZXIgaW1wbGVtZW50YXRpb24gZm9yIENWUyAoaHR0cDovL3d3dy5ub25nbnUub3JnL2N2cy8pLjwvZGVzY3JpcHRpb24+CisKICAgPG1vZHVsZXM+CiAgICAgPG1vZHVsZT5tYXZlbi1zY20tcHJvdmlkZXItY3ZzLWNvbW1vbnM8L21vZHVsZT4KICAgICA8bW9kdWxlPm1hdmVuLXNjbS1wcm92aWRlci1jdnNleGU8L21vZHVsZT4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1jdnMvc3JjL3NpdGUvc2l0ZS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL3NyYy9zaXRlL3NpdGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZmYxZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtY3ZzL3NyYy9zaXRlL3NpdGUueG1sCkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz4KKworPCEtLQorICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICB+IHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgfiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgIH4gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB+IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgfgorICB+ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIH4KKyAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgIH4gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgfiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgfiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgfiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgIH4gdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorCis8cHJvamVjdCBuYW1lPSJNYXZlbiBTQ00gQ1ZTIFByb3ZpZGVyIj4KKyAgPGJvZHk+CisgICAgPG1lbnUgcmVmPSJwYXJlbnQiIC8+CisKKyAgICA8bWVudSBuYW1lPSJPdmVydmlldyI+CisgICAgICA8aXRlbSBuYW1lPSJJbnRyb2R1Y3Rpb24iIGhyZWY9ImluZGV4Lmh0bWwiLz4KKyAgICA8L21lbnU+CisKKyAgICA8bWVudSByZWY9Im1vZHVsZXMiIC8+CisKKyAgICA8bWVudSByZWY9InJlcG9ydHMiIGluaGVyaXQ9ImJvdHRvbSIgLz4KKyAgPC9ib2R5PgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0LWNvbW1vbnMvcG9tLnhtbCBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdC1jb21tb25zL3BvbS54bWwKaW5kZXggNDkyMzM3Mi4uMDk4NjlmNCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0LWNvbW1vbnMvcG9tLnhtbAorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXQtY29tbW9ucy9wb20ueG1sCkBAIC0xLDQgKzEsNiBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IS0tCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8IS0tCiAgIH4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQogICB+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogICB+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCkBAIC0xOCwyMSArMjAsMjYgQEAKICAgLS0+CiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKICAgPHBhcmVudD4KLSAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXJzLWdpdDwvYXJ0aWZhY3RJZD4KICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXJzLWdpdDwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgotICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLWdpdC1jb21tb25zPC9hcnRpZmFjdElkPgotICA8bmFtZT5NYXZlbiBTQ00gZ2l0IFByb3ZpZGVyIC0gQ29tbW9uIGxpYnJhcnk8L25hbWU+Ci0gIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KKworICA8bmFtZT5NYXZlbiBTQ00gR2l0IFByb3ZpZGVyIC0gQ29tbW9uIGxpYnJhcnk8L25hbWU+CisgIDxkZXNjcmlwdGlvbj5Db21tb24gbGlicmFyeSBmb3IgU0NNIEdpdCBQcm92aWRlci48L2Rlc2NyaXB0aW9uPgorCiAgIDxkZXBlbmRlbmNpZXM+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5yZWdleHA8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5yZWdleHA8L2FydGlmYWN0SWQ+CiAgICAgPC9kZXBlbmRlbmN5PgogICA8L2RlcGVuZGVuY2llcz4KKwogICA8YnVpbGQ+CiAgICAgPHBsdWdpbnM+CiAgICAgICA8cGx1Z2luPgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0LWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvQWJzdHJhY3RHaXRTY21Qcm92aWRlci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0LWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvQWJzdHJhY3RHaXRTY21Qcm92aWRlci5qYXZhCmluZGV4IDU5OThlNWYuLjI3MDRhZDMgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdC1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L0Fic3RyYWN0R2l0U2NtUHJvdmlkZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXQtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9BYnN0cmFjdEdpdFNjbVByb3ZpZGVyLmphdmEKQEAgLTQ5LDcgKzQ5LDcgQEAKIAogLyoqCiAgKiBTQ00gUHJvdmlkZXIgZm9yIGdpdAotICogCisgKgogICoKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOmV2ZW5pc3NlQGFwYWNoZS5vcmciPkVtbWFudWVsIFZlbmlzc2U8L2E+CiAgKiBAdmVyc2lvbiAkSWQkCkBAIC02MiwyMiArNjIsMjcgQEAKICAgICAvLwogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorICAgIC8qKgorICAgICAqIEludGVybmFsIGNsYXNzCisgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2NtVXJsUGFyc2VyUmVzdWx0CiAgICAgewotICAgICAgICBMaXN0IG1lc3NhZ2VzID0gbmV3IEFycmF5TGlzdCgpOworICAgICAgICBwcml2YXRlIExpc3QgbWVzc2FnZXMgPSBuZXcgQXJyYXlMaXN0KCk7CiAKLSAgICAgICAgU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnk7CisgICAgICAgIHByaXZhdGUgU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnk7CiAgICAgfQogCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIFNjbVByb3ZpZGVyIEltcGxlbWVudGF0aW9uCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNjbVNwZWNpZmljRmlsZW5hbWUoKQogICAgIHsKICAgICAgICAgcmV0dXJuICIuZ2l0IjsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTY21Qcm92aWRlclJlcG9zaXRvcnkgbWFrZVByb3ZpZGVyU2NtUmVwb3NpdG9yeSggU3RyaW5nIHNjbVNwZWNpZmljVXJsLCBjaGFyIGRlbGltaXRlciApCiAgICAgICAgIHRocm93cyBTY21SZXBvc2l0b3J5RXhjZXB0aW9uCiAgICAgewpAQCAtOTEsMTAgKzk2LDcgQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZXBvc2l0b3J5OwogICAgIH0KIAotICAgIC8qKgotICAgICAqIFRoaXMgY3JlYXRlcyBhIGxvY2FsIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSBmb3IgdGhlIGdpdmVuIHBhdGgKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLkFic3RyYWN0U2NtUHJvdmlkZXIjbWFrZVByb3ZpZGVyU2NtUmVwb3NpdG9yeShqYXZhLmlvLkZpbGUpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU2NtUHJvdmlkZXJSZXBvc2l0b3J5IG1ha2VQcm92aWRlclNjbVJlcG9zaXRvcnkoIEZpbGUgcGF0aCApCiAgICAgICAgIHRocm93cyBTY21SZXBvc2l0b3J5RXhjZXB0aW9uLCBVbmtub3duUmVwb3NpdG9yeVN0cnVjdHVyZQogICAgIHsKQEAgLTEyNyw2ICsxMjksNyBAQAogICAgIHByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0UmVwb3NpdG9yeVVSTCggRmlsZSBwYXRoICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbjsKIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIExpc3QgdmFsaWRhdGVTY21VcmwoIFN0cmluZyBzY21TcGVjaWZpY1VybCwgY2hhciBkZWxpbWl0ZXIgKQogICAgIHsKICAgICAgICAgTGlzdCBtZXNzYWdlcyA9IG5ldyBBcnJheUxpc3QoKTsKQEAgLTE0MSw2ICsxNDQsNyBAQAogICAgICAgICByZXR1cm4gbWVzc2FnZXM7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNjbVR5cGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuICJnaXQiOwpAQCAtMjIzLDkgKzIyNyw3IEBACiAKICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgR2l0Q29tbWFuZCBnZXRBZGRDb21tYW5kKCk7CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIEFic3RyYWN0U2NtUHJvdmlkZXIjYWRkKFNjbVByb3ZpZGVyUmVwb3NpdG9yeSxTY21GaWxlU2V0LENvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEFkZFNjbVJlc3VsdCBhZGQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtMjM0LDkgKzIzNiw3IEBACiAKICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgR2l0Q29tbWFuZCBnZXRCcmFuY2hDb21tYW5kKCk7CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIEFic3RyYWN0U2NtUHJvdmlkZXIjYnJhbmNoKFNjbVByb3ZpZGVyUmVwb3NpdG9yeSxTY21GaWxlU2V0LENvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIEJyYW5jaFNjbVJlc3VsdCBicmFuY2goIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC0yNDYsOSArMjQ2LDcgQEAKIAogICAgIHByb3RlY3RlZCBhYnN0cmFjdCBHaXRDb21tYW5kIGdldENoYW5nZUxvZ0NvbW1hbmQoKTsKIAotICAgIC8qKgotICAgICAqIEBzZWUgQWJzdHJhY3RTY21Qcm92aWRlciNjaGFuZ2Vsb2coU2NtUHJvdmlkZXJSZXBvc2l0b3J5LFNjbUZpbGVTZXQsQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hhbmdlTG9nU2NtUmVzdWx0IGNoYW5nZWxvZyggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTI1OCw5ICsyNTYsNyBAQAogCiAgICAgcHJvdGVjdGVkIGFic3RyYWN0IEdpdENvbW1hbmQgZ2V0Q2hlY2tJbkNvbW1hbmQoKTsKIAotICAgIC8qKgotICAgICAqIEBzZWUgQWJzdHJhY3RTY21Qcm92aWRlciNjaGVja2luKFNjbVByb3ZpZGVyUmVwb3NpdG9yeSxTY21GaWxlU2V0LENvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoZWNrSW5TY21SZXN1bHQgY2hlY2tpbiggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtMjcwLDkgKzI2Niw3IEBACiAKICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgR2l0Q29tbWFuZCBnZXRDaGVja091dENvbW1hbmQoKTsKIAotICAgIC8qKgotICAgICAqIEBzZWUgQWJzdHJhY3RTY21Qcm92aWRlciNjaGVja291dChTY21Qcm92aWRlclJlcG9zaXRvcnksU2NtRmlsZVNldCxDb21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGVja091dFNjbVJlc3VsdCBjaGVja291dCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC0yODIsOSArMjc2LDcgQEAKIAogICAgIHByb3RlY3RlZCBhYnN0cmFjdCBHaXRDb21tYW5kIGdldERpZmZDb21tYW5kKCk7CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIEFic3RyYWN0U2NtUHJvdmlkZXIjZGlmZihTY21Qcm92aWRlclJlcG9zaXRvcnksU2NtRmlsZVNldCxDb21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBEaWZmU2NtUmVzdWx0IGRpZmYoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtMjkzLDYgKzI4NSw3IEBACiAKICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgR2l0Q29tbWFuZCBnZXRFeHBvcnRDb21tYW5kKCk7CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBFeHBvcnRTY21SZXN1bHQgZXhwb3J0KCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtMzAyLDkgKzI5NSw3IEBACiAKICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgR2l0Q29tbWFuZCBnZXRSZW1vdmVDb21tYW5kKCk7CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIEFic3RyYWN0U2NtUHJvdmlkZXIjcmVtb3ZlKFNjbVByb3ZpZGVyUmVwb3NpdG9yeSxTY21GaWxlU2V0LENvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFJlbW92ZVNjbVJlc3VsdCByZW1vdmUoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtMzEzLDkgKzMwNCw3IEBACiAKICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgR2l0Q29tbWFuZCBnZXRTdGF0dXNDb21tYW5kKCk7CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIEFic3RyYWN0U2NtUHJvdmlkZXIjc3RhdHVzKFNjbVByb3ZpZGVyUmVwb3NpdG9yeSxTY21GaWxlU2V0LENvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0YXR1c1NjbVJlc3VsdCBzdGF0dXMoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtMzI0LDkgKzMxMyw3IEBACiAKICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgR2l0Q29tbWFuZCBnZXRUYWdDb21tYW5kKCk7CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIEFic3RyYWN0U2NtUHJvdmlkZXIjdGFnKFNjbVByb3ZpZGVyUmVwb3NpdG9yeSxTY21GaWxlU2V0LENvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFRhZ1NjbVJlc3VsdCB0YWcoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtMzM1LDkgKzMyMiw3IEBACiAKICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgR2l0Q29tbWFuZCBnZXRVcGRhdGVDb21tYW5kKCk7CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIEFic3RyYWN0U2NtUHJvdmlkZXIjdXBkYXRlKFNjbVByb3ZpZGVyUmVwb3NpdG9yeSxTY21GaWxlU2V0LENvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtMzU1LDkgKzM0MCw3IEBACiAKICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgR2l0Q29tbWFuZCBnZXRMaXN0Q29tbWFuZCgpOwogCi0gICAgLyoqCi0gICAgICogQHNlZSBBYnN0cmFjdFNjbVByb3ZpZGVyI2xpc3QoU2NtUHJvdmlkZXJSZXBvc2l0b3J5LFNjbUZpbGVTZXQsQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgTGlzdFNjbVJlc3VsdCBsaXN0KCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdC1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L0dpdENoYW5nZVNldC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0LWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvR2l0Q2hhbmdlU2V0LmphdmEKaW5kZXggNmVlYTljNi4uYjhiNmQ0YSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0LWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvR2l0Q2hhbmdlU2V0LmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0LWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvR2l0Q2hhbmdlU2V0LmphdmEKQEAgLTQxLDE2ICs0MSwzMCBAQAogICAgICAgICBzdXBlcigpOwogICAgIH0KIAotICAgIHB1YmxpYyBHaXRDaGFuZ2VTZXQoIFN0cmluZyBzdHJEYXRlLCBTdHJpbmcgdXNlckRhdGVQYXR0ZXJuLCBTdHJpbmcgY29tbWVudCwgU3RyaW5nIGF1dGhvciwgTGlzdC8qPENoYW5nZUZpbGU+Ki8gZmlsZXMgKQorICAgIC8qKgorICAgICAqIEBwYXJhbSBzdHJEYXRlCisgICAgICogQHBhcmFtIHVzZXJEYXRlUGF0dGVybgorICAgICAqIEBwYXJhbSBjb21tZW50CisgICAgICogQHBhcmFtIGF1dGhvcgorICAgICAqIEBwYXJhbSBmaWxlcyBMaXN0IG9mIHtAbGluayBDaGFuZ2VGaWxlfQorICAgICAqLworICAgIHB1YmxpYyBHaXRDaGFuZ2VTZXQoIFN0cmluZyBzdHJEYXRlLCBTdHJpbmcgdXNlckRhdGVQYXR0ZXJuLCBTdHJpbmcgY29tbWVudCwgU3RyaW5nIGF1dGhvciwgTGlzdCBmaWxlcyApCiAgICAgewogICAgICAgICBzdXBlciggc3RyRGF0ZSwgdXNlckRhdGVQYXR0ZXJuLCBjb21tZW50LCBhdXRob3IsIGZpbGVzICk7CiAgICAgfQogCi0gICAgcHVibGljIEdpdENoYW5nZVNldCggRGF0ZSBkYXRlLCBTdHJpbmcgY29tbWVudCwgU3RyaW5nIGF1dGhvciwgTGlzdC8qPENoYW5nZUZpbGU+Ki8gZmlsZXMgKQorICAgIC8qKgorICAgICAqIEBwYXJhbSBkYXRlCisgICAgICogQHBhcmFtIGNvbW1lbnQKKyAgICAgKiBAcGFyYW0gYXV0aG9yCisgICAgICogQHBhcmFtIGZpbGVzIExpc3Qgb2Yge0BsaW5rIENoYW5nZUZpbGV9CisgICAgICovCisgICAgcHVibGljIEdpdENoYW5nZVNldCggRGF0ZSBkYXRlLCBTdHJpbmcgY29tbWVudCwgU3RyaW5nIGF1dGhvciwgTGlzdCBmaWxlcyApCiAgICAgewogICAgICAgICBzdXBlciggZGF0ZSwgY29tbWVudCwgYXV0aG9yLCBmaWxlcyApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIGJvb2xlYW4gY29udGFpbnNGaWxlbmFtZSggU3RyaW5nIGZpbGVuYW1lLCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSApCiAgICAgewogICAgICAgICBHaXRTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbyA9IChHaXRTY21Qcm92aWRlclJlcG9zaXRvcnkpIHJlcG9zaXRvcnk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXQtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9HaXRDb21tYW5kVXRpbHMuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdC1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L0dpdENvbW1hbmRVdGlscy5qYXZhCmluZGV4IDhkNGZmNDMuLmQ5OGFkMzkgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdC1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L0dpdENvbW1hbmRVdGlscy5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdC1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L0dpdENvbW1hbmRVdGlscy5qYXZhCkBAIC01NCw3ICs1NCw3IEBACiAKICAgICAgICAgY2wuc2V0V29ya2luZ0RpcmVjdG9yeSggZmlsZVNldC5nZXRCYXNlZGlyKCkuZ2V0QWJzb2x1dGVQYXRoKCkgKTsKIAotICAgICAgICBpZiAoIHNldHRpbmdzLmdldFRyYWNlR2l0Q29tbWFuZCgpICE9IG51bGwpCisgICAgICAgIGlmICggc2V0dGluZ3MuZ2V0VHJhY2VHaXRDb21tYW5kKCkgIT0gbnVsbCApCiAgICAgICAgIHsKICAgICAgICAgICAgIGNsLmFkZEVudmlyb25tZW50KCAiR0lUX1RSQUNFIiwgc2V0dGluZ3MuZ2V0VHJhY2VHaXRDb21tYW5kKCkgKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0LWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvY29tbWFuZC9kaWZmL0dpdERpZmZDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0LWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvY29tbWFuZC9kaWZmL0dpdERpZmZDb25zdW1lci5qYXZhCmluZGV4IGI1ZjJiMzUuLjdlM2RjN2IgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdC1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2NvbW1hbmQvZGlmZi9HaXREaWZmQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXQtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9jb21tYW5kL2RpZmYvR2l0RGlmZkNvbnN1bWVyLmphdmEKQEAgLTM1LDQ3ICszNSw0OCBAQAogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpicmV0dEBhcGFjaGUub3JnIj5CcmV0dCBQb3J0ZXI8L2E+CiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpzdHJ1YmVyZ0B5YWhvby5kZSI+TWFyayBTdHJ1YmVyZzwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEdpdERpZmZDb25zdW1lcgogICAgIGltcGxlbWVudHMgU3RyZWFtQ29uc3VtZXIKIHsKLQkvLyBkaWZmIC0tZ2l0IGEvcmVhZG1lLnR4dCBiL3JlYWRtZS50eHQKLQkvLyBpbmRleCBmZWExNjExLi45ZTEzMWNmIDEwMDY0NAotCS8vIC0tLSBhL3JlYWRtZS50eHQKLQkvLyArKysgYi9yZWFkbWUudHh0Ci0JLy8gQEAgLTEgKzEgQEAKLQkvLyAtL3JlYWRtZS50eHQKLQkvLyBcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKLQkvLyArbmV3IHZlcnNpb24gb2YgL3JlYWRtZS50eHQKKyAgICAvLyBkaWZmIC0tZ2l0IGEvcmVhZG1lLnR4dCBiL3JlYWRtZS50eHQKKyAgICAvLyBpbmRleCBmZWExNjExLi45ZTEzMWNmIDEwMDY0NAorICAgIC8vIC0tLSBhL3JlYWRtZS50eHQKKyAgICAvLyArKysgYi9yZWFkbWUudHh0CisgICAgLy8gQEAgLTEgKzEgQEAKKyAgICAvLyAtL3JlYWRtZS50eHQKKyAgICAvLyBcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyAgICAvLyArbmV3IHZlcnNpb24gb2YgL3JlYWRtZS50eHQKIAogCi0JLyoqCi0JICogcGF0ZXJuIG1hdGNoZXMgdGhlIGluZGV4IGxpbmUgb2YgdGhlIGRpZmYgY29tcGFyaXNvbgotCSAqIHBhcmVuLjEgbWF0Y2hlcyB0aGUgZmlyc3QgZmlsZQotCSAqIHBhcmVuLjIgbWF0Y2hlcyB0aGUgMm5kIGZpbGUKLQkgKi8KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgRElGRl9GSUxFU19QQVRURVJOID0gIl5kaWZmIC0tZ2l0XFxzYS8oLiopXFxzYi8oLiopIjsKKyAgICAvKioKKyAgICAgKiBwYXRlcm4gbWF0Y2hlcyB0aGUgaW5kZXggbGluZSBvZiB0aGUgZGlmZiBjb21wYXJpc29uCisgICAgICogcGFyZW4uMSBtYXRjaGVzIHRoZSBmaXJzdCBmaWxlCisgICAgICogcGFyZW4uMiBtYXRjaGVzIHRoZSAybmQgZmlsZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBESUZGX0ZJTEVTX1BBVFRFUk4gPSAiXmRpZmYgLS1naXRcXHNhLyguKilcXHNiLyguKikiOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFNUQVJUX1JFVklTSU9OX1RPS0VOID0gIi0tLSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNUQVJUX1JFVklTSU9OX1RPS0VOID0gIi0tLSI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgRU5EX1JFVklTSU9OX1RPS0VOID0gIisrKyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVORF9SRVZJU0lPTl9UT0tFTiA9ICIrKysiOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEFEREVEX0xJTkVfVE9LRU4gPSAiKyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFEREVEX0xJTkVfVE9LRU4gPSAiKyI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVNT1ZFRF9MSU5FX1RPS0VOID0gIi0iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRU1PVkVEX0xJTkVfVE9LRU4gPSAiLSI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgVU5DSEFOR0VEX0xJTkVfVE9LRU4gPSAiICI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVOQ0hBTkdFRF9MSU5FX1RPS0VOID0gIiAiOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIENIQU5HRV9TRVBBUkFUT1JfVE9LRU4gPSAiQEAiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDSEFOR0VfU0VQQVJBVE9SX1RPS0VOID0gIkBAIjsKIAotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBOT19ORVdMSU5FX1RPS0VOID0gIlxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT19ORVdMSU5FX1RPS0VOID0gIlxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUiOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIElOREVYX0xJTkVfVE9LRU4gPSAiaW5kZXggIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5ERVhfTElORV9UT0tFTiA9ICJpbmRleCAiOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIE5FV19GSUxFX01PREVfVE9LRU4gPSAibmV3IGZpbGUgbW9kZSAiOwotICAgIAotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBERUxFVEVEX0ZJTEVfTU9ERV9UT0tFTiA9ICJkZWxldGVkIGZpbGUgbW9kZSAiOwotICAgICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBORVdfRklMRV9NT0RFX1RPS0VOID0gIm5ldyBmaWxlIG1vZGUgIjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUxFVEVEX0ZJTEVfTU9ERV9UT0tFTiA9ICJkZWxldGVkIGZpbGUgbW9kZSAiOworCiAgICAgcHJpdmF0ZSBTY21Mb2dnZXIgbG9nZ2VyOwogCiAgICAgcHJpdmF0ZSBTdHJpbmcgY3VycmVudEZpbGU7CkBAIC0xMDIsMTQgKzEwMywxNCBAQAogICAgICAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjsKICAgICAgICAgdHJ5CiAgICAgICAgIHsKLSAgICAgICAgCWZpbGVzUmVnZXhwID0gbmV3IFJFKCBESUZGX0ZJTEVTX1BBVFRFUk4gKTsKKyAgICAgICAgICAgIGZpbGVzUmVnZXhwID0gbmV3IFJFKCBESUZGX0ZJTEVTX1BBVFRFUk4gKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoIFJFU3ludGF4RXhjZXB0aW9uIGV4ICkKICAgICAgICAgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgIklOVEVSTkFMIEVSUk9SOiBDb3VsZCBub3QgY3JlYXRlIHJlZ2V4cCB0byBwYXJzZSBnaXQgbG9nIGZpbGUuIFRoaXMgc2hvdWxkbid0IGhhcHBlbi4gU29tZXRoaW5nIGlzIHByb2JhYmx5IHdyb25nIHdpdGggdGhlIG9ybyBpbnN0YWxsYXRpb24uIiwKLSAgICAgICAgICAgICAgICBleCApOwotICAgICAgICB9ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU5URVJOQUwgRVJST1I6IENvdWxkIG5vdCBjcmVhdGUgcmVnZXhwIHRvIHBhcnNlIGdpdCBsb2cgZmlsZS4gU29tZXRoaW5nIGlzIHByb2JhYmx5IHdyb25nIHdpdGggdGhlIG9ybyBpbnN0YWxsYXRpb24uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleCApOworICAgICAgICB9CiAKICAgICB9CiAKQEAgLTExNywxMiArMTE4LDEzIEBACiAgICAgLy8gU3RyZWFtQ29uc3VtZXIgSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewotICAgICAgICBpZiAoIGZpbGVzUmVnZXhwLm1hdGNoKGxpbmUpICkKKyAgICAgICAgaWYgKCBmaWxlc1JlZ2V4cC5tYXRjaCggbGluZSApICkKICAgICAgICAgewogICAgICAgICAgICAgLy8gc3RhcnQgYSBuZXcgZmlsZQotICAgICAgICAgICAgY3VycmVudEZpbGUgPSBmaWxlc1JlZ2V4cC5nZXRQYXJlbigxKTsKKyAgICAgICAgICAgIGN1cnJlbnRGaWxlID0gZmlsZXNSZWdleHAuZ2V0UGFyZW4oIDEgKTsKIAogICAgICAgICAgICAgY2hhbmdlZEZpbGVzLmFkZCggbmV3IFNjbUZpbGUoIGN1cnJlbnRGaWxlLCBTY21GaWxlU3RhdHVzLk1PRElGSUVEICkgKTsKIApAQCAtMTQ2LDggKzE0OCw3IEBACiAgICAgICAgICAgICAvLyBza2lwLCB0aG91Z2ggY291bGQgcGFyc2UgdG8gdmVyaWZ5IHN0YXJ0IHJldmlzaW9uIGFuZCBlbmQgcmV2aXNpb24KICAgICAgICAgICAgIHBhdGNoLmFwcGVuZCggbGluZSApLmFwcGVuZCggIlxuIiApOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCBsaW5lLnN0YXJ0c1dpdGgoIE5FV19GSUxFX01PREVfVE9LRU4gKSB8fCAKLSAgICAgICAgCQkgIGxpbmUuc3RhcnRzV2l0aCggREVMRVRFRF9GSUxFX01PREVfVE9LRU4gKSkKKyAgICAgICAgZWxzZSBpZiAoIGxpbmUuc3RhcnRzV2l0aCggTkVXX0ZJTEVfTU9ERV9UT0tFTiApIHx8IGxpbmUuc3RhcnRzV2l0aCggREVMRVRFRF9GSUxFX01PREVfVE9LRU4gKSApCiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIHNraXAsIHRob3VnaCBjb3VsZCBwYXJzZSB0byB2ZXJpZnkgZmlsZSBtb2RlCiAgICAgICAgICAgICBwYXRjaC5hcHBlbmQoIGxpbmUgKS5hcHBlbmQoICJcbiIgKTsKQEAgLTE2Miw5ICsxNjMsOSBAQAogICAgICAgICAgICAgLy8gc2tpcCwgdGhvdWdoIGNvdWxkIHBhcnNlIHRvIHZlcmlmeSBmaWxlbmFtZSwgZW5kIHJldmlzaW9uCiAgICAgICAgICAgICBwYXRjaC5hcHBlbmQoIGxpbmUgKS5hcHBlbmQoICJcbiIgKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICggbGluZS5zdGFydHNXaXRoKCBBRERFRF9MSU5FX1RPS0VOICkgfHwgbGluZS5zdGFydHNXaXRoKCBSRU1PVkVEX0xJTkVfVE9LRU4gKSB8fAotICAgICAgICAgICAgbGluZS5zdGFydHNXaXRoKCBVTkNIQU5HRURfTElORV9UT0tFTiApIHx8IGxpbmUuc3RhcnRzV2l0aCggQ0hBTkdFX1NFUEFSQVRPUl9UT0tFTiApIHx8Ci0gICAgICAgICAgICBsaW5lLmVxdWFscyggTk9fTkVXTElORV9UT0tFTiApICkKKyAgICAgICAgZWxzZSBpZiAoIGxpbmUuc3RhcnRzV2l0aCggQURERURfTElORV9UT0tFTiApIHx8IGxpbmUuc3RhcnRzV2l0aCggUkVNT1ZFRF9MSU5FX1RPS0VOICkKKyAgICAgICAgICAgIHx8IGxpbmUuc3RhcnRzV2l0aCggVU5DSEFOR0VEX0xJTkVfVE9LRU4gKSB8fCBsaW5lLnN0YXJ0c1dpdGgoIENIQU5HRV9TRVBBUkFUT1JfVE9LRU4gKQorICAgICAgICAgICAgfHwgbGluZS5lcXVhbHMoIE5PX05FV0xJTkVfVE9LRU4gKSApCiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIGFkZCB0byBidWZmZXIKICAgICAgICAgICAgIGN1cnJlbnREaWZmZXJlbmNlLmFwcGVuZCggbGluZSApLmFwcGVuZCggIlxuIiApOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0LWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvY29tbWFuZC9pbmZvL0dpdEluZm9JdGVtLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXQtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9jb21tYW5kL2luZm8vR2l0SW5mb0l0ZW0uamF2YQppbmRleCBiMTY1OGM0Li41YzBiYWNlIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXQtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9jb21tYW5kL2luZm8vR2l0SW5mb0l0ZW0uamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXQtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9jb21tYW5kL2luZm8vR2l0SW5mb0l0ZW0uamF2YQpAQCAtMjEsOCArMjEsNyBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOmtlbm5leUBhcGFjaGUub3JnIj5LZW5uZXkgV2VzdGVyaG9mPC9hPgotICogICAgICAgICA8cC8+Ci0gKiAgICAgICAgICRJZCQKKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEdpdEluZm9JdGVtCiB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXQtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9jb21tYW5kL2luZm8vR2l0SW5mb1NjbVJlc3VsdC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0LWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvY29tbWFuZC9pbmZvL0dpdEluZm9TY21SZXN1bHQuamF2YQppbmRleCBjYzhkNTQ0Li5kNjI0OWMwIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXQtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9jb21tYW5kL2luZm8vR2l0SW5mb1NjbVJlc3VsdC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdC1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2NvbW1hbmQvaW5mby9HaXRJbmZvU2NtUmVzdWx0LmphdmEKQEAgLTI2LDggKzI2LDcgQEAKIAogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzprZW5uZXlAYXBhY2hlLm9yZyI+S2VubmV5IFdlc3RlcmhvZjwvYT4KLSAqICAgICAgICAgPHAvPgotICogICAgICAgICAkSWQkCisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBHaXRJbmZvU2NtUmVzdWx0CiAgICAgZXh0ZW5kcyBTY21SZXN1bHQKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdC1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L3JlcG9zaXRvcnkvR2l0U2NtUHJvdmlkZXJSZXBvc2l0b3J5LmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXQtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9yZXBvc2l0b3J5L0dpdFNjbVByb3ZpZGVyUmVwb3NpdG9yeS5qYXZhCmluZGV4IDk3MTNlNzEuLmFhNzc0NmYgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdC1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L3JlcG9zaXRvcnkvR2l0U2NtUHJvdmlkZXJSZXBvc2l0b3J5LmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0LWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvcmVwb3NpdG9yeS9HaXRTY21Qcm92aWRlclJlcG9zaXRvcnkuamF2YQpAQCAtMzIsMjkgKzMyLDI5IEBACiAgICAgLyoqICovCiAgICAgcHJpdmF0ZSBTdHJpbmcgdXJsOwogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIHRoZSBwcm90b2NvbCB0byB1c2UKICAgICAgKi8KICAgICBwcml2YXRlIFN0cmluZyBwcm90b2NvbDsKIAogICAgIC8qKiB1c2UgbG9jYWwgZmlsZSBhcyB0cmFuc3BvcnQqLwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1RPQ09MX0ZJTEUgPSAiZmlsZSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPVE9DT0xfRklMRSA9ICJmaWxlIjsKIAogICAgIC8qKiB1c2UgZ2l0cyBpbnRlcm5hbCBwcm90b2NvbCAqLwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1RPQ09MX0dJVCA9ICJnaXQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1RPQ09MX0dJVCA9ICJnaXQiOwogCiAgICAgLyoqIHVzZSBzZWN1cmUgc2hlbGwgcHJvdG9jb2wgKi8KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9UT0NPTF9TU0ggPSAic3NoIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9UT0NPTF9TU0ggPSAic3NoIjsKIAogICAgIC8qKiB1c2UgdGhlIHN0YW5kYXJkIHBvcnQgODAgaHR0cCBwcm90b2NvbCAqLwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1RPQ09MX0hUVFAgPSAiaHR0cCI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPVE9DT0xfSFRUUCA9ICJodHRwIjsKIAogICAgIC8qKiB1c2UgdGhlIHN0YW5kYXJkIHBvcnQgNDQzIGh0dHBzIHByb3RvY29sICovCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPVE9DT0xfSFRUUFMgPSAiaHR0cHMiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1RPQ09MX0hUVFBTID0gImh0dHBzIjsKIAogICAgIC8qKiB1c2UgcnN5bmMgZm9yIHJldHJpZXZpbmcgdGhlIGRhdGEKICAgICAgKiBUT0RPIGltcGxlbWVudCEgKi8KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9UT0NPTF9SU1lOQyA9ICJyc3luYyI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPVE9DT0xfUlNZTkMgPSAicnN5bmMiOwogCiAKICAgICBwdWJsaWMgR2l0U2NtUHJvdmlkZXJSZXBvc2l0b3J5KCBTdHJpbmcgdXJsICkKQEAgLTEyMyw3ICsxMjMsOCBAQAogCiAgICAgICAgIFN0cmluZyB1cmxQYXRoID0gdXJsLnN1YnN0cmluZyggZ2V0UHJvdG9jb2woKS5sZW5ndGgoKSApOwogCi0gICAgICAgIGlmICggdXJsUGF0aC5zdGFydHNXaXRoKCAiOi8vIiApICkgeworICAgICAgICBpZiAoIHVybFBhdGguc3RhcnRzV2l0aCggIjovLyIgKSApCisgICAgICAgIHsKICAgICAgICAgICAgIHVybFBhdGggPSB1cmxQYXRoLnN1YnN0cmluZyggMyApOwogICAgICAgICB9CiAgICAgICAgIGludCBpbmRleEF0ID0gdXJsUGF0aC5pbmRleE9mKCAiQCIgKTsKQEAgLTE0MywyOSArMTQ0LDI5IEBACiAKICAgICAgICAgICAgIHVybFBhdGggPSB1cmxQYXRoLnN1YnN0cmluZyggaW5kZXhBdCArIDEgKTsKIAotICAgICAgICAgICAgaWYgKCBQUk9UT0NPTF9TU0guZXF1YWxzKCBnZXRQcm90b2NvbCgpICkgKSAKKyAgICAgICAgICAgIGlmICggUFJPVE9DT0xfU1NILmVxdWFscyggZ2V0UHJvdG9jb2woKSApICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgdXJsU2IgPSBuZXcgU3RyaW5nQnVmZmVyKCBnZXRQcm90b2NvbCgpICk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICB1cmxTYi5hcHBlbmQoICI6Ly8iICk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCBnZXRVc2VyKCkgIT0gbnVsbCApIAorCisgICAgICAgICAgICAgICAgaWYgKCBnZXRVc2VyKCkgIT0gbnVsbCApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgdXJsU2IuYXBwZW5kKCBnZXRVc2VyKCkgKTsKLSAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICBpZiAoIGdldFBhc3N3b3JkKCkgIT0gbnVsbCApCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsU2IuYXBwZW5kKCAnOicgKS5hcHBlbmQoIGdldFBhc3N3b3JkKCkgKTsKICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICB1cmxTYi5hcHBlbmQoICdAJyApOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIHVybFNiLmFwcGVuZCggdXJsUGF0aCApOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgdGhpcy51cmwgPSB1cmxTYi50b1N0cmluZygpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0aGlzLnVybCA9IGdldFByb3RvY29sKCkgKyAiOi8vIiArIHVybFBhdGg7CiAgICAgICAgICAgICB9CkBAIC0xOTcsMTUgKzE5OCwxMSBAQAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHNldEhvc3QoIGhvc3RQb3J0ICk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQSBTY21Qcm92aWRlclJlcG9zaXRvcnkgbGlrZSB0aGlzIGJ1dCB3aXRoIHRoZSBwYXJlbnQgdXJsIChzdHJpcHBpbmcgdGhlIGxhc3QgZGlyZWN0b3J5KQotICAgICAqCi0gICAgICogQHJldHVybiB0aGUgcGFyZW50IHJlcG9zaXRvcnkgb3IgPGNvZGU+bnVsbDwvbnVsbD4gaWYgdGhpcyBpcyB0aGUgdG9wIGxldmVsIHJlcG9zaXRvcnkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTY21Qcm92aWRlclJlcG9zaXRvcnkgZ2V0UGFyZW50KCkKICAgICB7CiAgICAgICAgIFN0cmluZyBuZXdVcmwgPSBnZXRVcmwoKS5zdWJzdHJpbmcoIGdldFByb3RvY29sKCkubGVuZ3RoKCkgKTsKQEAgLTIzMSw5ICsyMjgsNyBAQAogICAgICAgICByZXR1cm4gbmV3IEdpdFNjbVByb3ZpZGVyUmVwb3NpdG9yeSggZ2V0UHJvdG9jb2woKSArIG5ld1VybCwgZ2V0VXNlcigpLCBnZXRQYXNzd29yZCgpICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogR2V0IHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIGFuY2VzdG9yIHRvIHRoaXMgcmVwb3NpdG9yeQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRSZWxhdGl2ZVBhdGgoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSBhbmNlc3RvciApCiAgICAgewogICAgICAgICBpZiAoIGFuY2VzdG9yIGluc3RhbmNlb2YgR2l0U2NtUHJvdmlkZXJSZXBvc2l0b3J5ICkKQEAgLTI1MCw2ICsyNDUsNyBAQAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdldFVybCgpOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0LWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvdXRpbC9HaXRVdGlsLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXQtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC91dGlsL0dpdFV0aWwuamF2YQppbmRleCA0ZjVmNDYzLi5mY2YxN2FhIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXQtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC91dGlsL0dpdFV0aWwuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXQtY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC91dGlsL0dpdFV0aWwuamF2YQpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gc2V0dGluZ3NGaWxlLmdldEFic29sdXRlUGF0aCgpICsgIiBpc24ndCB3ZWxsIGZvcm1lZC4gU0tJUFBFRC4iICsgZS5nZXRNZXNzYWdlKCk7CiAKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIG1lc3NhZ2UgKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIG1lc3NhZ2UgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXQtY29tbW9ucy9zcmMvc2l0ZS9zaXRlLnhtbCBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdC1jb21tb25zL3NyYy9zaXRlL3NpdGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ODAyNGYKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXQtY29tbW9ucy9zcmMvc2l0ZS9zaXRlLnhtbApAQCAtMCwwICsxLDMyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+CisKKzwhLS0KKyAgfiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgIH4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgIH4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgfiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIH4gdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICB+ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgfiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICB+IHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgIH4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIH4gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIH4gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICB+IHVuZGVyIHRoZSBMaWNlbnNlLgorICAtLT4KKworPHByb2plY3QgbmFtZT0iTWF2ZW4gU0NNIEdpdCBDb21tb25zIj4KKyAgPGJvZHk+CisgICAgPG1lbnUgcmVmPSJwYXJlbnQiIC8+CisKKyAgICA8bWVudSBuYW1lPSJPdmVydmlldyI+CisgICAgICA8aXRlbSBuYW1lPSJJbnRyb2R1Y3Rpb24iIGhyZWY9ImluZGV4Lmh0bWwiLz4KKyAgICA8L21lbnU+CisKKyAgICA8bWVudSByZWY9InJlcG9ydHMiIGluaGVyaXQ9ImJvdHRvbSIgLz4KKyAgPC9ib2R5PgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3BvbS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvcG9tLnhtbAppbmRleCA1OGUxOGY4Li45NWU4ZTEzIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvcG9tLnhtbAorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvcG9tLnhtbApAQCAtMSw0ICsxLDYgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCEtLQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPCEtLQogICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKICAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKICAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpAQCAtMTgsMzEgKzIwLDM1IEBACiAgIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxwYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVycy1naXQ8L2FydGlmYWN0SWQ+CiAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVycy1naXQ8L2FydGlmYWN0SWQ+CiAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgogICA8L3BhcmVudD4KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1naXRleGU8L2FydGlmYWN0SWQ+Ci0gIDxuYW1lPk1hdmVuIFNDTSBnaXQgUHJvdmlkZXIgLSBnaXQgRXhlY3V0YWJsZSBJbXBsLjwvbmFtZT4KLSAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgorCisgIDxuYW1lPk1hdmVuIFNDTSBHaXQgUHJvdmlkZXIgLSBHaXQgRXhlY3V0YWJsZSBJbXBsLjwvbmFtZT4KKyAgPGRlc2NyaXB0aW9uPkV4ZWN1dGFibGUgaW1wbGVtZW50YXRpb24gZm9yIFNDTSBHaXQgUHJvdmlkZXIuPC9kZXNjcmlwdGlvbj4KKwogICA8ZGVwZW5kZW5jaWVzPgogICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+cmVnZXhwPC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+cmVnZXhwPC9hcnRpZmFjdElkPgorICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDwhLS0gVGVzdCAtLT4KKyAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLWdpdC1jb21tb25zPC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLWdpdHRlc3Q8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CiAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CiAgICAgPC9kZXBlbmRlbmN5PgotICAgIDxkZXBlbmRlbmN5PgotICAgICAgPGdyb3VwSWQ+cmVnZXhwPC9ncm91cElkPgotICAgICAgPGFydGlmYWN0SWQ+cmVnZXhwPC9hcnRpZmFjdElkPgotICAgIDwvZGVwZW5kZW5jeT4KICAgPC9kZXBlbmRlbmNpZXM+CiAKICAgPGJ1aWxkPgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9HaXRFeGVTY21Qcm92aWRlci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9HaXRFeGVTY21Qcm92aWRlci5qYXZhCmluZGV4IDc3NDlmMzAuLmM3OWMzMGQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvR2l0RXhlU2NtUHJvdmlkZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL0dpdEV4ZVNjbVByb3ZpZGVyLmphdmEKQEAgLTQ3LDc0ICs0Nyw4NSBAQAogcHVibGljIGNsYXNzIEdpdEV4ZVNjbVByb3ZpZGVyCiAgICAgZXh0ZW5kcyBBYnN0cmFjdEdpdFNjbVByb3ZpZGVyCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgR2l0Q29tbWFuZCBnZXRBZGRDb21tYW5kKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgR2l0QWRkQ29tbWFuZCgpOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIEdpdENvbW1hbmQgZ2V0QnJhbmNoQ29tbWFuZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IEdpdEJyYW5jaENvbW1hbmQoKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBHaXRDb21tYW5kIGdldENoYW5nZUxvZ0NvbW1hbmQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBHaXRDaGFuZ2VMb2dDb21tYW5kKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgR2l0Q29tbWFuZCBnZXRDaGVja0luQ29tbWFuZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IEdpdENoZWNrSW5Db21tYW5kKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgR2l0Q29tbWFuZCBnZXRDaGVja091dENvbW1hbmQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBHaXRDaGVja091dENvbW1hbmQoKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBHaXRDb21tYW5kIGdldERpZmZDb21tYW5kKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgR2l0RGlmZkNvbW1hbmQoKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBHaXRDb21tYW5kIGdldEV4cG9ydENvbW1hbmQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG51bGw7IC8vWCBUT0RPCiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgR2l0Q29tbWFuZCBnZXRSZW1vdmVDb21tYW5kKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgR2l0UmVtb3ZlQ29tbWFuZCgpOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIEdpdENvbW1hbmQgZ2V0U3RhdHVzQ29tbWFuZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IEdpdFN0YXR1c0NvbW1hbmQoKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBHaXRDb21tYW5kIGdldFRhZ0NvbW1hbmQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBHaXRUYWdDb21tYW5kKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgR2l0Q29tbWFuZCBnZXRVcGRhdGVDb21tYW5kKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgR2l0VXBkYXRlQ29tbWFuZCgpOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIEdpdENvbW1hbmQgZ2V0TGlzdENvbW1hbmQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG51bGw7IC8vWCBUT0RPCiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgR2l0Q29tbWFuZCBnZXRJbmZvQ29tbWFuZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbnVsbDsgLy9YIFRPRE8KICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBJbXBsZW1lbnRzIHJldHJpZXZpbmcgdGhlIHJlcG9zaXRvcnkgdXJsIGZvciBhIGNlcnRhaW4gcGF0aCB1c2luZyB0aGUgJ2dpdCBpbmZvJyBjb21tYW5kLgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRSZXBvc2l0b3J5VVJMKCBGaWxlIHBhdGggKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtMTI0LDggKzEzNSw4IEBACiAKICAgICAgICAgaWYgKCByZXN1bHQuZ2V0SW5mb0l0ZW1zKCkuc2l6ZSgpICE9IDEgKQogICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbiggIkNhbm5vdCBmaW5kIFVSTDogIiArCi0gICAgICAgICAgICAgICAgKCByZXN1bHQuZ2V0SW5mb0l0ZW1zKCkuc2l6ZSgpID09IDAgPyAibm8iIDogIm11bHRpcGxlIiApICsgIiBpdGVtcyByZXR1cm5lZCBieSB0aGUgaW5mbyBjb21tYW5kIiApOworICAgICAgICAgICAgdGhyb3cgbmV3IFNjbVJlcG9zaXRvcnlFeGNlcHRpb24oICJDYW5ub3QgZmluZCBVUkw6ICIKKyAgICAgICAgICAgICAgICArICggcmVzdWx0LmdldEluZm9JdGVtcygpLnNpemUoKSA9PSAwID8gIm5vIiA6ICJtdWx0aXBsZSIgKSArICIgaXRlbXMgcmV0dXJuZWQgYnkgdGhlIGluZm8gY29tbWFuZCIgKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiAoIChHaXRJbmZvSXRlbSkgcmVzdWx0LmdldEluZm9JdGVtcygpLmdldCggMCApICkuZ2V0VVJMKCk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvQWJzdHJhY3RGaWxlQ2hlY2tpbmdDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL0Fic3RyYWN0RmlsZUNoZWNraW5nQ29uc3VtZXIuamF2YQppbmRleCAwZGU3MGI5Li4xYmIyYTJlIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvQWJzdHJhY3RGaWxlQ2hlY2tpbmdDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC9BYnN0cmFjdEZpbGVDaGVja2luZ0NvbnN1bWVyLmphdmEKQEAgLTMwLDYgKzMwLDcgQEAKIAogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzprZW5uZXlAYXBhY2hlLm9yZyI+S2VubmV5IFdlc3RlcmhvZjwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0RmlsZUNoZWNraW5nQ29uc3VtZXIKICAgICBpbXBsZW1lbnRzIFN0cmVhbUNvbnN1bWVyCkBAIC01MCw2ICs1MSw3IEBACiAgICAgICAgIHRoaXMud29ya2luZ0RpcmVjdG9yeSA9IHdvcmtpbmdEaXJlY3Rvcnk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgZmluYWwgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgaWYgKCBsaW5lLmxlbmd0aCgpIDw9IDMgKQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL0dpdENvbW1hbmRMaW5lVXRpbHMuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC9HaXRDb21tYW5kTGluZVV0aWxzLmphdmEKaW5kZXggN2ZlZWVjZC4uZjBkOWVkNiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL0dpdENvbW1hbmRMaW5lVXRpbHMuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvR2l0Q29tbWFuZExpbmVVdGlscy5qYXZhCkBAIC0zNSw2ICszNSw3IEBACiAgKgogICogQGF1dGhvciBCcmV0dCBQb3J0ZXIKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnN0cnViZXJnQHlhaG9vLmRlIj5NYXJrIFN0cnViZXJnPC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgR2l0Q29tbWFuZExpbmVVdGlscwogewpAQCAtNDksMTggKzUwLDE4IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIEZpbGUgZiA9IChGaWxlKSBpLm5leHQoKTsKICAgICAgICAgICAgIFN0cmluZyByZWxhdGl2ZUZpbGUgPSBmLmdldFBhdGgoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCBmLmdldEFic29sdXRlUGF0aCgpLnN0YXJ0c1dpdGgoIGNsLmdldFdvcmtpbmdEaXJlY3RvcnkoKS5nZXRBYnNvbHV0ZVBhdGgoKSApKQorCisgICAgICAgICAgICBpZiAoIGYuZ2V0QWJzb2x1dGVQYXRoKCkuc3RhcnRzV2l0aCggY2wuZ2V0V29ya2luZ0RpcmVjdG9yeSgpLmdldEFic29sdXRlUGF0aCgpICkgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8vIHNvIHdlIGNhbiBvbWl0IHRoZSBzdGFydGluZyBjaGFyYWN0ZXJzCiAgICAgICAgICAgICAgICAgcmVsYXRpdmVGaWxlID0gcmVsYXRpdmVGaWxlLnN1YnN0cmluZyggY2wuZ2V0V29ya2luZ0RpcmVjdG9yeSgpLmdldEFic29sdXRlUGF0aCgpLmxlbmd0aCgpICk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAoIHJlbGF0aXZlRmlsZS5zdGFydHNXaXRoKCBGaWxlLnNlcGFyYXRvciApICkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlRmlsZSA9IHJlbGF0aXZlRmlsZS5zdWJzdHJpbmcoIEZpbGUuc2VwYXJhdG9yLmxlbmd0aCgpICk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIG5vIHNldEZpbGUoKSBzaW5jZSB0aGlzIHNjcmV3cyB1cCB0aGUgd29ya2luZyBkaXJlY3RvcnkhCiAgICAgICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCByZWxhdGl2ZUZpbGUgKTsKICAgICAgICAgfQpAQCAtNjksMTUgKzcwLDE1IEBACiAKICAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIGdldEJhc2VHaXRDb21tYW5kTGluZSggRmlsZSB3b3JraW5nRGlyZWN0b3J5LCBTdHJpbmcgY29tbWFuZCApCiAgICAgewotICAgICAgICBpZiAoIGNvbW1hbmQgPT0gbnVsbCB8fCBjb21tYW5kLmxlbmd0aCgpID09IDApIAorICAgICAgICBpZiAoIGNvbW1hbmQgPT0gbnVsbCB8fCBjb21tYW5kLmxlbmd0aCgpID09IDAgKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBDb21tYW5kbGluZSBjbCA9IG5ldyBDb21tYW5kbGluZSgpOwogCiAgICAgICAgIGNsLnNldEV4ZWN1dGFibGUoICJnaXQiICk7Ci0gICAgICAgIAorCiAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIGNvbW1hbmQgKTsKIAogICAgICAgICBjbC5zZXRXb3JraW5nRGlyZWN0b3J5KCB3b3JraW5nRGlyZWN0b3J5LmdldEFic29sdXRlUGF0aCgpICk7CkBAIC05Miw3ICs5Myw3IEBACiAgICAgICAgIGxvZ2dlci5pbmZvKCAiRXhlY3V0aW5nOiAiICsgY2wgKTsKICAgICAgICAgbG9nZ2VyLmluZm8oICJXb3JraW5nIGRpcmVjdG9yeTogIiArIGNsLmdldFdvcmtpbmdEaXJlY3RvcnkoKS5nZXRBYnNvbHV0ZVBhdGgoKSApOwogCi0gICAgCWludCBleGl0Q29kZTsKKyAgICAgICAgaW50IGV4aXRDb2RlOwogICAgICAgICB0cnkKICAgICAgICAgewogICAgICAgICAgICAgZXhpdENvZGUgPSBDb21tYW5kTGluZVV0aWxzLmV4ZWN1dGVDb21tYW5kTGluZSggY2wsIGNvbnN1bWVyLCBzdGRlcnIgKTsKQEAgLTExMiw3ICsxMTMsNyBAQAogICAgICAgICBsb2dnZXIuaW5mbyggIkV4ZWN1dGluZzogIiArIGNsICk7CiAgICAgICAgIGxvZ2dlci5pbmZvKCAiV29ya2luZyBkaXJlY3Rvcnk6ICIgKyBjbC5nZXRXb3JraW5nRGlyZWN0b3J5KCkuZ2V0QWJzb2x1dGVQYXRoKCkgKTsKIAotICAgIAlpbnQgZXhpdENvZGU7CisgICAgICAgIGludCBleGl0Q29kZTsKICAgICAgICAgdHJ5CiAgICAgICAgIHsKICAgICAgICAgICAgIGV4aXRDb2RlID0gQ29tbWFuZExpbmVVdGlscy5leGVjdXRlQ29tbWFuZExpbmUoIGNsLCBzdGRvdXQsIHN0ZGVyciApOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL2FkZC9HaXRBZGRDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvYWRkL0dpdEFkZENvbW1hbmQuamF2YQppbmRleCAwZGNhZWM5Li5jODBjNTJlIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvYWRkL0dpdEFkZENvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvYWRkL0dpdEFkZENvbW1hbmQuamF2YQpAQCAtNDEsMTUgKzQxLDE5IEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86c3RydWJlcmdAeWFob28uZGUiPk1hcmsgU3RydWJlcmc8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KLXB1YmxpYyBjbGFzcyBHaXRBZGRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3RBZGRDb21tYW5kIGltcGxlbWVudHMgR2l0Q29tbWFuZAorcHVibGljIGNsYXNzIEdpdEFkZENvbW1hbmQKKyAgICBleHRlbmRzIEFic3RyYWN0QWRkQ29tbWFuZAorICAgIGltcGxlbWVudHMgR2l0Q29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFNjbVJlc3VsdCBleGVjdXRlQWRkQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBiaW5hcnkgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICBHaXRTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSA9IChHaXRTY21Qcm92aWRlclJlcG9zaXRvcnkpIHJlcG87Ci0gICAgICAgIAorCiAgICAgICAgIGlmICggZmlsZVNldC5nZXRGaWxlTGlzdCgpLmlzRW1wdHkoKSApCiAgICAgICAgIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTY21FeGNlcHRpb24oICJZb3UgbXVzdCBwcm92aWRlIGF0IGxlYXN0IG9uZSBmaWxlL2RpcmVjdG9yeSB0byBhZGQiICk7CkBAIC02NywxMiArNzEsMTIgQEAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG5ldyBBZGRTY21SZXN1bHQoIGNsLnRvU3RyaW5nKCksICJUaGUgZ2l0LWFkZCBjb21tYW5kIGZhaWxlZC4iLCBzdGRlcnIuZ2V0T3V0cHV0KCksIGZhbHNlICk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gZ2l0LWFkZCBkb2Vzbid0IHNob3cgc2luZ2xlIGZpbGVzLCBidXQgb25seSBzdW1tYXJ5IDovCiAgICAgICAgIC8vIHNvIHdlIG11c3QgcnVuIGdpdC1zdGF0dXMgYW5kIGNvbnN1bWUgdGhlIG91dHB1dAogICAgICAgICAvLyBib3Jyb3cgYSBmZXcgdGhpbmdzIGZyb20gdGhlIGdpdC1zdGF0dXMgY29tbWFuZAogICAgICAgICBDb21tYW5kbGluZSBjbFN0YXR1cyA9IEdpdFN0YXR1c0NvbW1hbmQuY3JlYXRlQ29tbWFuZExpbmUoIHJlcG9zaXRvcnksIGZpbGVTZXQgKTsKLSAgICAgICAgCisKICAgICAgICAgR2l0U3RhdHVzQ29uc3VtZXIgc3RhdHVzQ29uc3VtZXIgPSBuZXcgR2l0U3RhdHVzQ29uc3VtZXIoIGdldExvZ2dlcigpLCBmaWxlU2V0LmdldEJhc2VkaXIoKSApOwogICAgICAgICBleGl0Q29kZSA9IEdpdENvbW1hbmRMaW5lVXRpbHMuZXhlY3V0ZSggY2xTdGF0dXMsIHN0YXR1c0NvbnN1bWVyLCBzdGRlcnIsIGdldExvZ2dlcigpICk7CiAgICAgICAgIGlmICggZXhpdENvZGUgIT0gMCApCkBAIC04MiwyNiArODYsMjYgQEAKICAgICAgICAgfQogCiAgICAgICAgIExpc3QgY2hhbmdlZEZpbGVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAKKwogICAgICAgICAvLyByZXdyaXRlIGFsbCBkZXRlY3RlZCBmaWxlcyB0byBub3cgaGF2ZSBzdGF0dXMgJ2NoZWNrZWRfaW4nCiAgICAgICAgIGZvciAoIEl0ZXJhdG9yIGl0ID0gc3RhdHVzQ29uc3VtZXIuZ2V0Q2hhbmdlZEZpbGVzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOyApCiAgICAgICAgIHsKICAgICAgICAgICAgIFNjbUZpbGUgc2NtZmlsZSA9IChTY21GaWxlKSBpdC5uZXh0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gaWYgYSBzcGVjaWZpYyBmaWxlU2V0IGlzIGdpdmVuLCB3ZSBoYXZlIHRvIGNoZWNrIGlmIHRoZSBmaWxlIGlzIHJlYWxseSB0cmFja2VkCiAgICAgICAgICAgICBmb3IgKCBJdGVyYXRvciBpdGZsID0gZmlsZVNldC5nZXRGaWxlTGlzdCgpLml0ZXJhdG9yKCk7IGl0ZmwuaGFzTmV4dCgpOyApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgRmlsZSBmID0gKEZpbGUpIGl0ZmwubmV4dCgpOwotICAgICAgICAgICAgICAgIGlmICggZi50b1N0cmluZygpLmVxdWFscyggc2NtZmlsZS5nZXRQYXRoKCkgKSkgCisgICAgICAgICAgICAgICAgaWYgKCBmLnRvU3RyaW5nKCkuZXF1YWxzKCBzY21maWxlLmdldFBhdGgoKSApICkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYW5nZWRGaWxlcy5hZGQoIHNjbWZpbGUgKTsgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZEZpbGVzLmFkZCggc2NtZmlsZSApOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5ldyBBZGRTY21SZXN1bHQoIGNsLnRvU3RyaW5nKCksIGNoYW5nZWRGaWxlcyApOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgY3JlYXRlQ29tbWFuZExpbmUoIEZpbGUgd29ya2luZ0RpcmVjdG9yeSwgTGlzdC8qRmlsZSovIGZpbGVzICkKKyAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIGNyZWF0ZUNvbW1hbmRMaW5lKCBGaWxlIHdvcmtpbmdEaXJlY3RvcnksIExpc3QvKkZpbGUqL2ZpbGVzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBHaXRDb21tYW5kTGluZVV0aWxzLmdldEJhc2VHaXRDb21tYW5kTGluZSggd29ya2luZ0RpcmVjdG9yeSwgImFkZCIgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC9icmFuY2gvR2l0QnJhbmNoQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL2JyYW5jaC9HaXRCcmFuY2hDb21tYW5kLmphdmEKaW5kZXggMDU1MDFmYi4uNWVkMjI5ZiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL2JyYW5jaC9HaXRCcmFuY2hDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL2JyYW5jaC9HaXRCcmFuY2hDb21tYW5kLmphdmEKQEAgLTM5LDExICszOSwxNCBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnN0cnViZXJnQHlhaG9vLmRlIj5NYXJrIFN0cnViZXJnPC9hPgorICogQHZlcnNpb24gJElkJAogICovCi1wdWJsaWMgY2xhc3MgR2l0QnJhbmNoQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0QnJhbmNoQ29tbWFuZCBpbXBsZW1lbnRzIEdpdENvbW1hbmQKK3B1YmxpYyBjbGFzcyBHaXRCcmFuY2hDb21tYW5kCisgICAgZXh0ZW5kcyBBYnN0cmFjdEJyYW5jaENvbW1hbmQKKyAgICBpbXBsZW1lbnRzIEdpdENvbW1hbmQKIHsKLSAgICBwdWJsaWMgU2NtUmVzdWx0IGV4ZWN1dGVCcmFuY2hDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgYnJhbmNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlICkKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLworICAgIHB1YmxpYyBTY21SZXN1bHQgZXhlY3V0ZUJyYW5jaENvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvLCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyBicmFuY2gsIFN0cmluZyBtZXNzYWdlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgaWYgKCBicmFuY2ggPT0gbnVsbCB8fCBTdHJpbmdVdGlscy5pc0VtcHR5KCBicmFuY2gudHJpbSgpICkgKQpAQCAtNjksMTAgKzcyLDEwIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBuZXcgQnJhbmNoU2NtUmVzdWx0KCBjbC50b1N0cmluZygpLCAiVGhlIGdpdC1icmFuY2ggY29tbWFuZCBmYWlsZWQuIiwgc3RkZXJyLmdldE91dHB1dCgpLCBmYWxzZSApOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGFuZCBub3cgcHVzaCB0aGUgYnJhbmNoIHRvIHRoZSBvcmlnaW4gcmVwb3NpdG9yeQogICAgICAgICBDb21tYW5kbGluZSBjbFB1c2ggPSBjcmVhdGVQdXNoQ29tbWFuZExpbmUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIGJyYW5jaCApOwotICAgICAgICAKKwogICAgICAgICBleGl0Q29kZSA9IEdpdENvbW1hbmRMaW5lVXRpbHMuZXhlY3V0ZSggY2xQdXNoLCBzdGRvdXQsIHN0ZGVyciwgZ2V0TG9nZ2VyKCkgKTsKICAgICAgICAgaWYgKCBleGl0Q29kZSAhPSAwICkKICAgICAgICAgewpAQCAtODAsMTYgKzgzLDE1IEBACiAgICAgICAgIH0KIAogICAgICAgICAvLyBhcyBsYXN0IGFjdGlvbiB3ZSBzZWFyY2ggZm9yIHRoZSBicmFuY2hlZCBmaWxlcwotICAgICAgICBHaXRMaXN0Q29uc3VtZXIgbGlzdENvbnN1bWVyID0gbmV3IEdpdExpc3RDb25zdW1lciggZ2V0TG9nZ2VyKCkKLSAgICAgICAgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGZpbGVTZXQuZ2V0QmFzZWRpcigpCi0gICAgICAgIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBTY21GaWxlU3RhdHVzLlRBR0dFRCk7CisgICAgICAgIEdpdExpc3RDb25zdW1lciBsaXN0Q29uc3VtZXIgPSBuZXcgR2l0TGlzdENvbnN1bWVyKCBnZXRMb2dnZXIoKSwgZmlsZVNldC5nZXRCYXNlZGlyKCksIFNjbUZpbGVTdGF0dXMuVEFHR0VEICk7CiAKICAgICAgICAgQ29tbWFuZGxpbmUgY2xMaXN0ID0gR2l0TGlzdENvbW1hbmQuY3JlYXRlQ29tbWFuZExpbmUoIHJlcG9zaXRvcnksIGZpbGVTZXQuZ2V0QmFzZWRpcigpICk7Ci0gICAgICAgIAorCiAgICAgICAgIGV4aXRDb2RlID0gR2l0Q29tbWFuZExpbmVVdGlscy5leGVjdXRlKCBjbExpc3QsIGxpc3RDb25zdW1lciwgc3RkZXJyLCBnZXRMb2dnZXIoKSApOwogICAgICAgICBpZiAoIGV4aXRDb2RlICE9IDAgKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEJyYW5jaFNjbVJlc3VsdCggY2xMaXN0LnRvU3RyaW5nKCksICJUaGUgZ2l0LWxzLWZpbGVzIGNvbW1hbmQgZmFpbGVkLiIsIHN0ZGVyci5nZXRPdXRwdXQoKSwgZmFsc2UgKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQnJhbmNoU2NtUmVzdWx0KCBjbExpc3QudG9TdHJpbmcoKSwgIlRoZSBnaXQtbHMtZmlsZXMgY29tbWFuZCBmYWlsZWQuIiwgc3RkZXJyLmdldE91dHB1dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlICk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gbmV3IEJyYW5jaFNjbVJlc3VsdCggY2wudG9TdHJpbmcoKSwgbGlzdENvbnN1bWVyLmdldExpc3RlZEZpbGVzKCkgKTsKQEAgLTEwOCwxNyArMTEwLDE3IEBACiAKICAgICAgICAgcmV0dXJuIGNsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgY3JlYXRlUHVzaENvbW1hbmRMaW5lKCBHaXRTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYnJhbmNoICkKLQl0aHJvd3MgU2NtRXhjZXB0aW9uCi0JewotCQlDb21tYW5kbGluZSBjbCA9IEdpdENvbW1hbmRMaW5lVXRpbHMuZ2V0QmFzZUdpdENvbW1hbmRMaW5lKCBmaWxlU2V0LmdldEJhc2VkaXIoKSwgInB1c2giKTsKLQkJCi0JCWNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoICJvcmlnaW4iICk7Ci0JCWNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIGJyYW5jaCApOwotCQkKLQkJcmV0dXJuIGNsOwotCX0KKyAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBHaXRDb21tYW5kTGluZVV0aWxzLmdldEJhc2VHaXRDb21tYW5kTGluZSggZmlsZVNldC5nZXRCYXNlZGlyKCksICJwdXNoIiApOworCisgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoICJvcmlnaW4iICk7CisgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIGJyYW5jaCApOworCisgICAgICAgIHJldHVybiBjbDsKKyAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC9jaGFuZ2Vsb2cvR2l0Q2hhbmdlTG9nQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL2NoYW5nZWxvZy9HaXRDaGFuZ2VMb2dDb21tYW5kLmphdmEKaW5kZXggN2ZhNjA2Mi4uMjhkODJhNCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL2NoYW5nZWxvZy9HaXRDaGFuZ2VMb2dDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL2NoYW5nZWxvZy9HaXRDaGFuZ2VMb2dDb21tYW5kLmphdmEKQEAgLTQ3LDggKzQ3LDkgQEAKICAgICBleHRlbmRzIEFic3RyYWN0Q2hhbmdlTG9nQ29tbWFuZAogICAgIGltcGxlbWVudHMgR2l0Q29tbWFuZAogewotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBEQVRFX0ZPUk1BVCA9ICJ5eXl5LU1NLWRkIEhIOm1tOnNzIFoiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRFX0ZPUk1BVCA9ICJ5eXl5LU1NLWRkIEhIOm1tOnNzIFoiOwogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hhbmdlTG9nU2NtUmVzdWx0IGV4ZWN1dGVDaGFuZ2VMb2dDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbVZlcnNpb24gc3RhcnRWZXJzaW9uLCBTY21WZXJzaW9uIGVuZFZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGVQYXR0ZXJuICkKQEAgLTU3LDYgKzU4LDcgQEAKICAgICAgICAgcmV0dXJuIGV4ZWN1dGVDaGFuZ2VMb2dDb21tYW5kKCByZXBvLCBmaWxlU2V0LCBudWxsLCBudWxsLCBudWxsLCBkYXRlUGF0dGVybiwgc3RhcnRWZXJzaW9uLCBlbmRWZXJzaW9uICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hhbmdlTG9nU2NtUmVzdWx0IGV4ZWN1dGVDaGFuZ2VMb2dDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGUgc3RhcnREYXRlLCBEYXRlIGVuZERhdGUsIFNjbUJyYW5jaCBicmFuY2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGVQYXR0ZXJuICkKQEAgLTEwMiwyMSArMTA0LDIzIEBACiAgICAgewogICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGRhdGVGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCggREFURV9GT1JNQVQgKTsKICAgICAgICAgZGF0ZUZvcm1hdC5zZXRUaW1lWm9uZSggVGltZVpvbmUuZ2V0VGltZVpvbmUoICJHTVQiICkgKTsKLSAgICAgICAgCisKICAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBHaXRDb21tYW5kTGluZVV0aWxzLmdldEJhc2VHaXRDb21tYW5kTGluZSggd29ya2luZ0RpcmVjdG9yeSwgImxvZyIgKTsKIAotICAgICAgICBpZiAoIHN0YXJ0VmVyc2lvbiAhPSBudWxsICkgeworICAgICAgICBpZiAoIHN0YXJ0VmVyc2lvbiAhPSBudWxsICkKKyAgICAgICAgewogICAgICAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggIi0tc2luY2U9IiArIFN0cmluZ1V0aWxzLmVzY2FwZSggc3RhcnRWZXJzaW9uLmdldE5hbWUoKSApICk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSAKKyAgICAgICAgZWxzZQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIHN0YXJ0RGF0ZSAhPSBudWxsICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAiLS1zaW5jZT0iICsgU3RyaW5nVXRpbHMuZXNjYXBlKCBkYXRlRm9ybWF0LmZvcm1hdCggc3RhcnREYXRlICkgKSApOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIGVuZFZlcnNpb24gIT0gbnVsbCApIHsKKworICAgICAgICBpZiAoIGVuZFZlcnNpb24gIT0gbnVsbCApCisgICAgICAgIHsKICAgICAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoICItLXVudGlsPSIgKyBTdHJpbmdVdGlscy5lc2NhcGUoIGVuZFZlcnNpb24uZ2V0TmFtZSgpICkgKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC0xMjYsOSArMTMwLDkgQEAKICAgICAgICAgICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAiLS11bnRpbD0iICsgU3RyaW5nVXRpbHMuZXNjYXBlKCBkYXRlRm9ybWF0LmZvcm1hdCggZW5kRGF0ZSApICkgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAiLS1kYXRlPWlzbyIgKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNsOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC9jaGFuZ2Vsb2cvR2l0Q2hhbmdlTG9nQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC9jaGFuZ2Vsb2cvR2l0Q2hhbmdlTG9nQ29uc3VtZXIuamF2YQppbmRleCBjOWI1MGFkLi40MGQ5YmNiIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvY2hhbmdlbG9nL0dpdENoYW5nZUxvZ0NvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL2NoYW5nZWxvZy9HaXRDaGFuZ2VMb2dDb25zdW1lci5qYXZhCkBAIC0zMyw2ICszMyw3IEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86c3RydWJlcmdAeWFob28uZGUiPk1hcmsgU3RydWJlcmc8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBHaXRDaGFuZ2VMb2dDb25zdW1lcgogICAgIGV4dGVuZHMgQWJzdHJhY3RDb25zdW1lcgpAQCAtNTIsMTIgKzUzLDEyIEBACiAgICAgICogU3RhdGUgbWFjaGluZSBjb25zdGFudDogZXhwZWN0aW5nIGF1dGhvciBpbmZvcm1hdGlvbgogICAgICAqLwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFUVVNfR0VUX0FVVEhPUiA9IDI7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTdGF0ZSBtYWNoaW5lIGNvbnN0YW50OiBleHBlY3RpbmcgZGF0ZSBpbmZvcm1hdGlvbgogICAgICAqLwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFUVVNfR0VUX0RBVEUgPSAzOwotICAgIAorCiAgICAgLyoqCiAgICAgICogU3RhdGUgbWFjaGluZSBjb25zdGFudDogZXhwZWN0aW5nIGZpbGUgaW5mb3JtYXRpb24KICAgICAgKi8KQEAgLTY4LDcgKzY5LDYgQEAKICAgICAgKi8KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVFVTX0dFVF9DT01NRU5UID0gNTsKIAotICAgIAogICAgIC8qKgogICAgICAqIFRoZSBwYXR0ZXJuIHVzZWQgdG8gbWF0Y2ggZ2l0IGhlYWRlciBsaW5lcwogICAgICAqLwpAQCAtODcsOSArODcsOSBAQAogICAgIC8qKgogICAgICAqIFRoZSBwYXR0ZXJuIHVzZWQgdG8gbWF0Y2ggZ2l0IGZpbGUgbGluZXMKICAgICAgKi8KLS8vWCAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRV9QQVRURVJOID0gIl46XFxkKiBcXGQqIFs6eGRpZ2l0Ol0qXFwuKiBbOnhkaWdpdDpdKlxcLiogKFs6dXBwZXI6XSkgKC4qKSI7CisgICAgLy9YICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFX1BBVFRFUk4gPSAiXjpcXGQqIFxcZCogWzp4ZGlnaXQ6XSpcXC4qIFs6eGRpZ2l0Ol0qXFwuKiAoWzp1cHBlcjpdKSAoLiopIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRV9QQVRURVJOID0gIl46XFxkKiBcXGQqIFs6eGRpZ2l0Ol0qXFwuKiBbOnhkaWdpdDpdKlxcLiogKFs6dXBwZXI6XSlcXHQoLiopIjsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEN1cnJlbnQgc3RhdHVzIG9mIHRoZSBwYXJzZXIKICAgICAgKi8KQEAgLTEyNCwxOCArMTI0LDE3IEBACiAgICAgICogVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIG1hdGNoIGF1dGhvciBsaW5lcwogICAgICAqLwogICAgIHByaXZhdGUgUkUgYXV0aG9yUmVnZXhwOwotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIG1hdGNoIGRhdGUgbGluZXMKICAgICAgKi8KICAgICBwcml2YXRlIFJFIGRhdGVSZWdleHA7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGUgcmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gbWF0Y2ggZmlsZSBsaW5lcwogICAgICAqLwogICAgIHByaXZhdGUgUkUgZmlsZVJlZ2V4cDsKLSAgICAKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIHVzZXJEYXRlRm9ybWF0OwogCiAgICAgLyoqCkBAIC0xNTEsMjIgKzE1MCwyMiBAQAogICAgICAgICB7CiAgICAgICAgICAgICBoZWFkZXJSZWdleHAgPSBuZXcgUkUoIEhFQURFUl9QQVRURVJOICk7CiAgICAgICAgICAgICBhdXRob3JSZWdleHAgPSBuZXcgUkUoIEFVVEhPUl9QQVRURVJOICk7Ci0gICAgICAgICAgICBkYXRlUmVnZXhwICAgPSBuZXcgUkUoIERBVEVfUEFUVEVSTiAgICk7Ci0gICAgICAgICAgICBmaWxlUmVnZXhwICAgPSBuZXcgUkUoIEZJTEVfUEFUVEVSTiAgICk7CisgICAgICAgICAgICBkYXRlUmVnZXhwID0gbmV3IFJFKCBEQVRFX1BBVFRFUk4gKTsKKyAgICAgICAgICAgIGZpbGVSZWdleHAgPSBuZXcgUkUoIEZJTEVfUEFUVEVSTiApOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoICggUkVTeW50YXhFeGNlcHRpb24gZXggKQogICAgICAgICB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiSU5URVJOQUwgRVJST1I6IENvdWxkIG5vdCBjcmVhdGUgcmVnZXhwIHRvIHBhcnNlIGdpdCBsb2cgZmlsZS4gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLiBTb21ldGhpbmcgaXMgcHJvYmFibHkgd3Jvbmcgd2l0aCB0aGUgb3JvIGluc3RhbGxhdGlvbi4iLAotICAgICAgICAgICAgICAgIGV4ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklOVEVSTkFMIEVSUk9SOiBDb3VsZCBub3QgY3JlYXRlIHJlZ2V4cCB0byBwYXJzZSBnaXQgbG9nIGZpbGUuIFRoaXMgc2hvdWxkbid0IGhhcHBlbi4gU29tZXRoaW5nIGlzIHByb2JhYmx5IHdyb25nIHdpdGggdGhlIG9ybyBpbnN0YWxsYXRpb24uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleCApOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIExpc3QgZ2V0TW9kaWZpY2F0aW9ucygpCiAgICAgewotICAgICAgICAvLyB0aGlzIGlzIG5lZWRlZCBzaW5jZSB0aGUgcHJvY2Vzc0ZpbGUgZG9lcyBub3QgYWx3YXlzIGdldCBhIHRoZSBlbmQtc2VxdWVuY2UgY29ycmVjdGx5LiAKKyAgICAgICAgLy8gdGhpcyBpcyBuZWVkZWQgc2luY2UgdGhlIHByb2Nlc3NGaWxlIGRvZXMgbm90IGFsd2F5cyBnZXQgYSB0aGUgZW5kLXNlcXVlbmNlIGNvcnJlY3RseS4KICAgICAgICAgcHJvY2Vzc0dldEZpbGUoICIiICk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBlbnRyaWVzOwogICAgIH0KIApAQCAtMTc0LDYgKzE3Myw3IEBACiAgICAgLy8gU3RyZWFtQ29uc3VtZXIgSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBzd2l0Y2ggKCBzdGF0dXMgKQpAQCAtMTk3LDggKzE5Nyw2IEBACiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiggIlVua25vd24gc3RhdGU6ICIgKyBzdGF0dXMgKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICAgIAogCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vCkBAIC0yMjMsNyArMjIxLDcgQEAKICAgICAgICAgY3VycmVudFJldmlzaW9uID0gaGVhZGVyUmVnZXhwLmdldFBhcmVuKCAxICk7CiAKICAgICAgICAgY3VycmVudENoYW5nZSA9IG5ldyBHaXRDaGFuZ2VTZXQoKTsKLSAgICAgICAgCisKICAgICAgICAgc3RhdHVzID0gU1RBVFVTX0dFVF9BVVRIT1I7CiAgICAgfQogCkBAIC0yNDAsOSArMjM4LDkgQEAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBTdHJpbmcgYXV0aG9yID0gYXV0aG9yUmVnZXhwLmdldFBhcmVuKCAxICk7Ci0gICAgICAgIAorCiAgICAgICAgIGN1cnJlbnRDaGFuZ2Uuc2V0QXV0aG9yKCBhdXRob3IgKTsKLSAgICAgICAgCisKICAgICAgICAgc3RhdHVzID0gU1RBVFVTX0dFVF9EQVRFOwogICAgIH0KIApAQCAtMjU4LDEzICsyNTYsMTMgQEAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBkYXRlc3RyaW5nID0gZGF0ZVJlZ2V4cC5nZXRQYXJlbiggMSApOwotICAgICAgCi0gICAgICAgIERhdGUgZGF0ZSA9IHBhcnNlRGF0ZSggZGF0ZXN0cmluZy50cmltKCkgLCB1c2VyRGF0ZUZvcm1hdCwgR0lUX1RJTUVTVEFNUF9QQVRURVJOLCBsb2NhbGUgKTsKLSAgICAgICAgCisKKyAgICAgICAgRGF0ZSBkYXRlID0gcGFyc2VEYXRlKCBkYXRlc3RyaW5nLnRyaW0oKSwgdXNlckRhdGVGb3JtYXQsIEdJVF9USU1FU1RBTVBfUEFUVEVSTiwgbG9jYWxlICk7CisKICAgICAgICAgY3VycmVudENoYW5nZS5zZXREYXRlKCBkYXRlICk7Ci0gICAgICAgIAorCiAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19HRVRfQ09NTUVOVDsKICAgICB9CiAKQEAgLTI3OCw3ICsyNzYsNyBAQAogICAgIHsKICAgICAgICAgaWYgKCBsaW5lLmxlbmd0aCgpIDwgNCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjdXJyZW50Q29tbWVudCA9PSBudWxsKQorICAgICAgICAgICAgaWYgKCBjdXJyZW50Q29tbWVudCA9PSBudWxsICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBjdXJyZW50Q29tbWVudCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAgICAgIH0KQEAgLTI4OCwxMiArMjg2LDEzIEBACiAgICAgICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX0dFVF9GSUxFOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgCisgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCBjdXJyZW50Q29tbWVudC5sZW5ndGgoKSA+IDAgKSB7CisgICAgICAgICAgICBpZiAoIGN1cnJlbnRDb21tZW50Lmxlbmd0aCgpID4gMCApCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY3VycmVudENvbW1lbnQuYXBwZW5kKCAnXG4nICk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgY3VycmVudENvbW1lbnQuYXBwZW5kKCBsaW5lLnN1YnN0cmluZyggNCApICk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTQsOSArMzEzLDkgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBlbnRyaWVzLmFkZCggY3VycmVudENoYW5nZSApOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHJlc2V0Q2hhbmdlTG9nKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX0dFVF9IRUFERVI7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQpAQCAtMzI3LDE1ICszMjYsMTYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIFN0cmluZyBhY3Rpb24gPSBmaWxlUmVnZXhwLmdldFBhcmVuKCAxICk7CiAgICAgICAgICAgICAvLyBhY3Rpb24gaXMgY3VycmVudGx5IG5vdCB1c2VkCi0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBmaWxlUmVnZXhwLmdldFBhcmVuKCAyICk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgY3VycmVudENoYW5nZS5hZGRGaWxlKCBuZXcgQ2hhbmdlRmlsZSggbmFtZSwgY3VycmVudFJldmlzaW9uICkgKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCByZXNldENoYW5nZUxvZygpIHsKLSAgICAJY3VycmVudENvbW1lbnQgPSBudWxsOwotICAgIAljdXJyZW50Q2hhbmdlID0gbnVsbDsKKyAgICBwcml2YXRlIHZvaWQgcmVzZXRDaGFuZ2VMb2coKQorICAgIHsKKyAgICAgICAgY3VycmVudENvbW1lbnQgPSBudWxsOworICAgICAgICBjdXJyZW50Q2hhbmdlID0gbnVsbDsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvY2hlY2tpbi9HaXRDaGVja0luQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL2NoZWNraW4vR2l0Q2hlY2tJbkNvbW1hbmQuamF2YQppbmRleCBjNTQ5NzcwLi44NGJiMTk4IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvY2hlY2tpbi9HaXRDaGVja0luQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC9jaGVja2luL0dpdENoZWNrSW5Db21tYW5kLmphdmEKQEAgLTQ2LDE0ICs0NiwxOCBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnN0cnViZXJnQHlhaG9vLmRlIj5NYXJrIFN0cnViZXJnPC9hPgorICogQHZlcnNpb24gJElkJAogICovCi1wdWJsaWMgY2xhc3MgR2l0Q2hlY2tJbkNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdENoZWNrSW5Db21tYW5kIGltcGxlbWVudHMgR2l0Q29tbWFuZAorcHVibGljIGNsYXNzIEdpdENoZWNrSW5Db21tYW5kCisgICAgZXh0ZW5kcyBBYnN0cmFjdENoZWNrSW5Db21tYW5kCisgICAgaW1wbGVtZW50cyBHaXRDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hlY2tJblNjbVJlc3VsdCBleGVjdXRlQ2hlY2tJbkNvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvLCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyBtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiB2ZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKLSAgICAJR2l0U2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnkgPSAoR2l0U2NtUHJvdmlkZXJSZXBvc2l0b3J5KSByZXBvOworICAgICAgICBHaXRTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSA9IChHaXRTY21Qcm92aWRlclJlcG9zaXRvcnkpIHJlcG87CiAKICAgICAgICAgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lciBzdGRlcnIgPSBuZXcgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lcigpOwogICAgICAgICBDb21tYW5kTGluZVV0aWxzLlN0cmluZ1N0cmVhbUNvbnN1bWVyIHN0ZG91dCA9IG5ldyBDb21tYW5kTGluZVV0aWxzLlN0cmluZ1N0cmVhbUNvbnN1bWVyKCk7CkBAIC02Nyw4ICs3MSw4IEBACiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKCBJT0V4Y2VwdGlvbiBleCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ2hlY2tJblNjbVJlc3VsdCggbnVsbCwgIkVycm9yIHdoaWxlIG1ha2luZyBhIHRlbXBvcmFyeSBmaWxlIGZvciB0aGUgY29tbWl0IG1lc3NhZ2U6ICIgKwotICAgICAgICAgICAgICAgIGV4LmdldE1lc3NhZ2UoKSwgbnVsbCwgZmFsc2UgKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2hlY2tJblNjbVJlc3VsdCggbnVsbCwgIkVycm9yIHdoaWxlIG1ha2luZyBhIHRlbXBvcmFyeSBmaWxlIGZvciB0aGUgY29tbWl0IG1lc3NhZ2U6ICIKKyAgICAgICAgICAgICAgICArIGV4LmdldE1lc3NhZ2UoKSwgbnVsbCwgZmFsc2UgKTsKICAgICAgICAgfQogCiAgICAgICAgIHRyeQpAQCAtNzksMjEgKzgzLDIyIEBACiAgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIHdpbGwgdXNlICdnaXQtY29tbWl0IC1hJyBsYXRlcgogCiAgICAgICAgICAgICAgICAgQ29tbWFuZGxpbmUgY2xBZGQgPSBHaXRBZGRDb21tYW5kLmNyZWF0ZUNvbW1hbmRMaW5lKCBmaWxlU2V0LmdldEJhc2VkaXIoKSwgZmlsZVNldC5nZXRGaWxlTGlzdCgpICk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBleGl0Q29kZSA9IEdpdENvbW1hbmRMaW5lVXRpbHMuZXhlY3V0ZSggY2xBZGQsIHN0ZG91dCwgc3RkZXJyLCBnZXRMb2dnZXIoKSApOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgaWYgKCBleGl0Q29kZSAhPSAwICkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2hlY2tJblNjbVJlc3VsdCggY2xBZGQudG9TdHJpbmcoKSwgIlRoZSBnaXQtYWRkIGNvbW1hbmQgZmFpbGVkLiIsIHN0ZGVyci5nZXRPdXRwdXQoKSwgZmFsc2UgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGVja0luU2NtUmVzdWx0KCBjbEFkZC50b1N0cmluZygpLCAiVGhlIGdpdC1hZGQgY29tbWFuZCBmYWlsZWQuIiwgc3RkZXJyLmdldE91dHB1dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlICk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gZ2l0LWNvbW1pdCBkb2Vzbid0IHNob3cgc2luZ2xlIGZpbGVzLCBidXQgb25seSBzdW1tYXJ5IDovCiAgICAgICAgICAgICAvLyBzbyB3ZSBtdXN0IHJ1biBnaXQtc3RhdHVzIGFuZCBjb25zdW1lIHRoZSBvdXRwdXQKICAgICAgICAgICAgIC8vIGJvcnJvdyBhIGZldyB0aGluZ3MgZnJvbSB0aGUgZ2l0LXN0YXR1cyBjb21tYW5kCiAgICAgICAgICAgICBDb21tYW5kbGluZSBjbFN0YXR1cyA9IEdpdFN0YXR1c0NvbW1hbmQuY3JlYXRlQ29tbWFuZExpbmUoIHJlcG9zaXRvcnksIGZpbGVTZXQgKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBHaXRTdGF0dXNDb25zdW1lciBzdGF0dXNDb25zdW1lciA9IG5ldyBHaXRTdGF0dXNDb25zdW1lciggZ2V0TG9nZ2VyKCksIGZpbGVTZXQuZ2V0QmFzZWRpcigpICk7CiAgICAgICAgICAgICBleGl0Q29kZSA9IEdpdENvbW1hbmRMaW5lVXRpbHMuZXhlY3V0ZSggY2xTdGF0dXMsIHN0YXR1c0NvbnN1bWVyLCBzdGRlcnIsIGdldExvZ2dlcigpICk7CiAgICAgICAgICAgICBpZiAoIGV4aXRDb2RlICE9IDAgKQpAQCAtMTAxLDQ5ICsxMDYsNTEgQEAKICAgICAgICAgICAgICAgICAvLyBnaXQtc3RhdHVzIHJldHVybnMgbm9uLXplcm8gaWYgbm90aGluZyB0byBkbwogICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLmluZm8oICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQgKHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaykiICk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgCUNvbW1hbmRsaW5lIGNsQ29tbWl0ID0gY3JlYXRlQ29tbWl0Q29tbWFuZExpbmUocmVwb3NpdG9yeSwgZmlsZVNldCwgbWVzc2FnZUZpbGUpOwotICAgICAgICAJCisKKyAgICAgICAgICAgIENvbW1hbmRsaW5lIGNsQ29tbWl0ID0gY3JlYXRlQ29tbWl0Q29tbWFuZExpbmUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIG1lc3NhZ2VGaWxlICk7CisKICAgICAgICAgICAgIGV4aXRDb2RlID0gR2l0Q29tbWFuZExpbmVVdGlscy5leGVjdXRlKCBjbENvbW1pdCwgc3Rkb3V0LCBzdGRlcnIsIGdldExvZ2dlcigpICk7Ci0JICAgICAgICBpZiAoIGV4aXRDb2RlICE9IDAgKQotCSAgICAgICAgewotCSAgICAgICAgICAgIHJldHVybiBuZXcgQ2hlY2tJblNjbVJlc3VsdCggY2xDb21taXQudG9TdHJpbmcoKSwgIlRoZSBnaXQtY29tbWl0IGNvbW1hbmQgZmFpbGVkLiIsIHN0ZGVyci5nZXRPdXRwdXQoKSwgZmFsc2UgKTsKLQkgICAgICAgIH0KLQkgICAgICAgIAotCSAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBjcmVhdGVQdXNoQ29tbWFuZExpbmUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHZlcnNpb24gKTsKLQkKKyAgICAgICAgICAgIGlmICggZXhpdENvZGUgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGVja0luU2NtUmVzdWx0KCBjbENvbW1pdC50b1N0cmluZygpLCAiVGhlIGdpdC1jb21taXQgY29tbWFuZCBmYWlsZWQuIiwgc3RkZXJyLmdldE91dHB1dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBjcmVhdGVQdXNoQ29tbWFuZExpbmUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHZlcnNpb24gKTsKKwogICAgICAgICAgICAgZXhpdENvZGUgPSBHaXRDb21tYW5kTGluZVV0aWxzLmV4ZWN1dGUoIGNsLCBzdGRvdXQsIHN0ZGVyciwgZ2V0TG9nZ2VyKCkgKTsKLQkgICAgICAgIGlmICggZXhpdENvZGUgIT0gMCApCi0JICAgICAgICB7Ci0JICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGVja0luU2NtUmVzdWx0KCBjbC50b1N0cmluZygpLCAiVGhlIGdpdC1wdXNoIGNvbW1hbmQgZmFpbGVkLiIsIHN0ZGVyci5nZXRPdXRwdXQoKSwgZmFsc2UgKTsKLQkgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggZXhpdENvZGUgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGVja0luU2NtUmVzdWx0KCBjbC50b1N0cmluZygpLCAiVGhlIGdpdC1wdXNoIGNvbW1hbmQgZmFpbGVkLiIsIHN0ZGVyci5nZXRPdXRwdXQoKSwgZmFsc2UgKTsKKyAgICAgICAgICAgIH0KIAotCSAgICAgICAgTGlzdCBjaGVja2VkSW5GaWxlcyA9IG5ldyBBcnJheUxpc3QoIHN0YXR1c0NvbnN1bWVyLmdldENoYW5nZWRGaWxlcygpLnNpemUoKSApOwotCSAgICAgICAgCi0JICAgICAgICAvLyByZXdyaXRlIGFsbCBkZXRlY3RlZCBmaWxlcyB0byBub3cgaGF2ZSBzdGF0dXMgJ2NoZWNrZWRfaW4nCi0JICAgICAgICBmb3IgKCBJdGVyYXRvciBpdCA9IHN0YXR1c0NvbnN1bWVyLmdldENoYW5nZWRGaWxlcygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTsgKQotCSAgICAgICAgewotCSAgICAgICAgICAgIFNjbUZpbGUgc2NtZmlsZSA9IG5ldyBTY21GaWxlKCAoKFNjbUZpbGUpIGl0Lm5leHQoKSkuZ2V0UGF0aCgpLCBTY21GaWxlU3RhdHVzLkNIRUNLRURfSU4gKTsKLQkgICAgICAgICAgICAKLQkgICAgICAgICAgICBpZiAoIGZpbGVTZXQuZ2V0RmlsZUxpc3QoKS5pc0VtcHR5KCkgKSB7Ci0JICAgICAgICAgICAgICAgIGNoZWNrZWRJbkZpbGVzLmFkZCggc2NtZmlsZSApOwkgICAgICAgICAgICAgICAgCi0JICAgICAgICAgICAgfQotCSAgICAgICAgICAgIGVsc2UKLQkgICAgICAgICAgICB7Ci0JICAgICAgICAgICAgICAgIC8vIGlmIGEgc3BlY2lmaWMgZmlsZVNldCBpcyBnaXZlbiwgd2UgaGF2ZSB0byBjaGVjayBpZiB0aGUgZmlsZSBpcyByZWFsbHkgdHJhY2tlZAotCSAgICAgICAgICAgICAgICBmb3IgKCBJdGVyYXRvciBpdGZsID0gZmlsZVNldC5nZXRGaWxlTGlzdCgpLml0ZXJhdG9yKCk7IGl0ZmwuaGFzTmV4dCgpOyApCi0JICAgICAgICAgICAgICAgIHsKLQkgICAgICAgICAgICAgICAgICAgIEZpbGUgZiA9IChGaWxlKSBpdGZsLm5leHQoKTsKLQkgICAgICAgICAgICAgICAgICAgIGlmICggZi50b1N0cmluZygpLmVxdWFscyggc2NtZmlsZS5nZXRQYXRoKCkgKSkgCi0JICAgICAgICAgICAgICAgICAgICB7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZEluRmlsZXMuYWRkKCBzY21maWxlICk7ICAgICAgICAgICAgICAgICAgCi0JICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBMaXN0IGNoZWNrZWRJbkZpbGVzID0gbmV3IEFycmF5TGlzdCggc3RhdHVzQ29uc3VtZXIuZ2V0Q2hhbmdlZEZpbGVzKCkuc2l6ZSgpICk7CiAKLQkgICAgICAgICAgICAgICAgfQotCSAgICAgICAgICAgIH0KLQkgICAgICAgIH0KLQkgICAgICAgIAotCSAgICAgICAgcmV0dXJuIG5ldyBDaGVja0luU2NtUmVzdWx0KCBjbC50b1N0cmluZygpLCBjaGVja2VkSW5GaWxlcyApOworICAgICAgICAgICAgLy8gcmV3cml0ZSBhbGwgZGV0ZWN0ZWQgZmlsZXMgdG8gbm93IGhhdmUgc3RhdHVzICdjaGVja2VkX2luJworICAgICAgICAgICAgZm9yICggSXRlcmF0b3IgaXQgPSBzdGF0dXNDb25zdW1lci5nZXRDaGFuZ2VkRmlsZXMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTY21GaWxlIHNjbWZpbGUgPSBuZXcgU2NtRmlsZSggKCAoU2NtRmlsZSkgaXQubmV4dCgpICkuZ2V0UGF0aCgpLCBTY21GaWxlU3RhdHVzLkNIRUNLRURfSU4gKTsKKworICAgICAgICAgICAgICAgIGlmICggZmlsZVNldC5nZXRGaWxlTGlzdCgpLmlzRW1wdHkoKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjaGVja2VkSW5GaWxlcy5hZGQoIHNjbWZpbGUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgYSBzcGVjaWZpYyBmaWxlU2V0IGlzIGdpdmVuLCB3ZSBoYXZlIHRvIGNoZWNrIGlmIHRoZSBmaWxlIGlzIHJlYWxseSB0cmFja2VkCisgICAgICAgICAgICAgICAgICAgIGZvciAoIEl0ZXJhdG9yIGl0ZmwgPSBmaWxlU2V0LmdldEZpbGVMaXN0KCkuaXRlcmF0b3IoKTsgaXRmbC5oYXNOZXh0KCk7ICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRmlsZSBmID0gKEZpbGUpIGl0ZmwubmV4dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmLnRvU3RyaW5nKCkuZXF1YWxzKCBzY21maWxlLmdldFBhdGgoKSApICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkSW5GaWxlcy5hZGQoIHNjbWZpbGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbmV3IENoZWNrSW5TY21SZXN1bHQoIGNsLnRvU3RyaW5nKCksIGNoZWNrZWRJbkZpbGVzICk7CiAgICAgICAgIH0KICAgICAgICAgZmluYWxseQogICAgICAgICB7CkBAIC0xNjQsMTYgKzE3MSwxNiBAQAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgY3JlYXRlUHVzaENvbW1hbmRMaW5lKCBHaXRTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAotICAgIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHZlcnNpb24gKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewotICAgICAgICBDb21tYW5kbGluZSBjbCA9IEdpdENvbW1hbmRMaW5lVXRpbHMuZ2V0QmFzZUdpdENvbW1hbmRMaW5lKCBmaWxlU2V0LmdldEJhc2VkaXIoKSwgInB1c2giKTsKKyAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBHaXRDb21tYW5kTGluZVV0aWxzLmdldEJhc2VHaXRDb21tYW5kTGluZSggZmlsZVNldC5nZXRCYXNlZGlyKCksICJwdXNoIiApOwogCiAgICAgICAgIC8vWCBUT0RPIGhhbmRsZSB2ZXJzaW9uCi0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIGNyZWF0ZUNvbW1pdENvbW1hbmRMaW5lKCBHaXRTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGUgbWVzc2FnZUZpbGUgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC0xOTMsNyArMjAwLDcgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIHNwZWNpZnkgZXhhY3RseSB3aGljaCBmaWxlcyB0byBjb21taXQgCisgICAgICAgICAgICAvLyBzcGVjaWZ5IGV4YWN0bHkgd2hpY2ggZmlsZXMgdG8gY29tbWl0CiAgICAgICAgICAgICBHaXRDb21tYW5kTGluZVV0aWxzLmFkZFRhcmdldCggY2wsIGZpbGVTZXQuZ2V0RmlsZUxpc3QoKSApOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC9jaGVja291dC9HaXRDaGVja091dENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC9jaGVja291dC9HaXRDaGVja091dENvbW1hbmQuamF2YQppbmRleCA2MDQ3ZDIxLi5lNDMyNTBkIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvY2hlY2tvdXQvR2l0Q2hlY2tPdXRDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL2NoZWNrb3V0L0dpdENoZWNrT3V0Q29tbWFuZC5qYXZhCkBAIC00MCwxNSArNDAsMTkgQEAKIAogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpzdHJ1YmVyZ0B5YWhvby5kZSI+TWFyayBTdHJ1YmVyZzwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwotcHVibGljIGNsYXNzIEdpdENoZWNrT3V0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0Q2hlY2tPdXRDb21tYW5kIGltcGxlbWVudHMgR2l0Q29tbWFuZAorcHVibGljIGNsYXNzIEdpdENoZWNrT3V0Q29tbWFuZAorICAgIGV4dGVuZHMgQWJzdHJhY3RDaGVja091dENvbW1hbmQKKyAgICBpbXBsZW1lbnRzIEdpdENvbW1hbmQKIHsKICAgICAvKioKICAgICAgKiBGb3IgZ2l0LCB0aGUgZ2l2ZW4gcmVwb3NpdG9yeSBpcyBhIHJlbW90ZSBvbmUuCiAgICAgICogV2UgaGF2ZSB0byBjbG9uZSBpdCBmaXJzdCBpZiB0aGUgd29ya2luZyBkaXJlY3RvcnkgZG9lcyBub3QgY29udGFpbiBhIGdpdCByZXBvIHlldCwKICAgICAgKiBvdGhlcndpc2Ugd2UgaGF2ZSB0byBnaXQtcHVsbCBpdC4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIFRPRE8gV2UgY3VycmVudGx5IGFzc3VtZSBhICcuZ2l0JyBkaXJlY3RvcnksIHNvIHRoaXMgZG9lcyBub3Qgd29yayBmb3IgLS1iYXJlIHJlcG9zCisgICAgICoge0Bpbmhlcml0RG9jfQogICAgICAqLwogICAgIHByb3RlY3RlZCBDaGVja091dFNjbVJlc3VsdCBleGVjdXRlQ2hlY2tPdXRDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHZlcnNpb24gKQpAQCAtNTYsOCArNjAsOCBAQAogICAgIHsKICAgICAgICAgR2l0U2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnkgPSAoR2l0U2NtUHJvdmlkZXJSZXBvc2l0b3J5KSByZXBvOwogCi0gICAgICAgIGlmICggR2l0U2NtUHJvdmlkZXJSZXBvc2l0b3J5LlBST1RPQ09MX0ZJTEUuZXF1YWxzKCByZXBvc2l0b3J5LmdldFByb3RvY29sKCkgKSAmJgotICAgICAgICAgICAgIHJlcG9zaXRvcnkuZ2V0VXJsKCkuaW5kZXhPZiggZmlsZVNldC5nZXRCYXNlZGlyKCkuZ2V0UGF0aCgpICkgPj0gMCApIAorICAgICAgICBpZiAoIEdpdFNjbVByb3ZpZGVyUmVwb3NpdG9yeS5QUk9UT0NPTF9GSUxFLmVxdWFscyggcmVwb3NpdG9yeS5nZXRQcm90b2NvbCgpICkKKyAgICAgICAgICAgICYmIHJlcG9zaXRvcnkuZ2V0VXJsKCkuaW5kZXhPZiggZmlsZVNldC5nZXRCYXNlZGlyKCkuZ2V0UGF0aCgpICkgPj0gMCApCiAgICAgICAgIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTY21FeGNlcHRpb24oICJyZW1vdGUgcmVwb3NpdG9yeSBtdXN0IG5vdCBiZSB0aGUgd29ya2luZyBkaXJlY3RvcnkiICk7CiAgICAgICAgIH0KQEAgLTY2LDQwICs3MCwzOSBAQAogCiAgICAgICAgIENvbW1hbmRMaW5lVXRpbHMuU3RyaW5nU3RyZWFtQ29uc3VtZXIgc3Rkb3V0ID0gbmV3IENvbW1hbmRMaW5lVXRpbHMuU3RyaW5nU3RyZWFtQ29uc3VtZXIoKTsKICAgICAgICAgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lciBzdGRlcnIgPSBuZXcgQ29tbWFuZExpbmVVdGlscy5TdHJpbmdTdHJlYW1Db25zdW1lcigpOwotICAgICAgICAKIAotICAgICAgICBpZiAoICFmaWxlU2V0LmdldEJhc2VkaXIoKS5leGlzdHMoKSB8fCAKLSAgICAgICAgICAgICAhKCBuZXcgRmlsZSggZmlsZVNldC5nZXRCYXNlZGlyKCksICIuZ2l0IiApLmV4aXN0cygpICkgKQorICAgICAgICBpZiAoICFmaWxlU2V0LmdldEJhc2VkaXIoKS5leGlzdHMoKSB8fCAhKCBuZXcgRmlsZSggZmlsZVNldC5nZXRCYXNlZGlyKCksICIuZ2l0IiApLmV4aXN0cygpICkgKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIGZpbGVTZXQuZ2V0QmFzZWRpcigpLmV4aXN0cygpICkgCisgICAgICAgICAgICBpZiAoIGZpbGVTZXQuZ2V0QmFzZWRpcigpLmV4aXN0cygpICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAvLyBnaXQgcmVmdXNlcyB0byBjbG9uZSBvdGhlcndpc2UKICAgICAgICAgICAgICAgICBmaWxlU2V0LmdldEJhc2VkaXIoKS5kZWxldGUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBubyBnaXQgcmVwbyBzZWVtcyB0byBleGlzdCwgbGV0J3MgY2xvbmUgdGhlIG9yaWdpbmFsIHJlcG8KICAgICAgICAgICAgIENvbW1hbmRsaW5lIGNsQ2xvbmUgPSBjcmVhdGVDbG9uZUNvbW1hbmQoIHJlcG9zaXRvcnksIGZpbGVTZXQuZ2V0QmFzZWRpcigpICk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZXhpdENvZGUgPSBHaXRDb21tYW5kTGluZVV0aWxzLmV4ZWN1dGUoIGNsQ2xvbmUsIHN0ZG91dCwgc3RkZXJyLCBnZXRMb2dnZXIoKSApOwogICAgICAgICAgICAgaWYgKCBleGl0Q29kZSAhPSAwICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENoZWNrT3V0U2NtUmVzdWx0KCBjbENsb25lLnRvU3RyaW5nKCksICJUaGUgZ2l0LWNsb25lIGNvbW1hbmQgZmFpbGVkLiIsIHN0ZGVyci5nZXRPdXRwdXQoKSwgZmFsc2UgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENoZWNrT3V0U2NtUmVzdWx0KCBjbENsb25lLnRvU3RyaW5nKCksICJUaGUgZ2l0LWNsb25lIGNvbW1hbmQgZmFpbGVkLiIsIHN0ZGVyci5nZXRPdXRwdXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSApOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCBmaWxlU2V0LmdldEJhc2VkaXIoKS5leGlzdHMoKSAmJiAKLSAgICAgICAgICAgICBuZXcgRmlsZSggZmlsZVNldC5nZXRCYXNlZGlyKCksICIuZ2l0IiApLmV4aXN0cygpICkgCisgICAgICAgIGlmICggZmlsZVNldC5nZXRCYXNlZGlyKCkuZXhpc3RzKCkgJiYgbmV3IEZpbGUoIGZpbGVTZXQuZ2V0QmFzZWRpcigpLCAiLmdpdCIgKS5leGlzdHMoKSApCiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIGdpdCByZXBvIGV4aXN0cywgc28gd2UgbXVzdCBnaXQtcHVsbCB0aGUgY2hhbmdlcwogICAgICAgICAgICAgQ29tbWFuZGxpbmUgY2xQdWxsID0gY3JlYXRlUHVsbENvbW1hbmQoIHJlcG9zaXRvcnksIGZpbGVTZXQuZ2V0QmFzZWRpcigpLCB2ZXJzaW9uICk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZXhpdENvZGUgPSBHaXRDb21tYW5kTGluZVV0aWxzLmV4ZWN1dGUoIGNsUHVsbCwgc3Rkb3V0LCBzdGRlcnIsIGdldExvZ2dlcigpICk7CiAgICAgICAgICAgICBpZiAoIGV4aXRDb2RlICE9IDAgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2hlY2tPdXRTY21SZXN1bHQoIGNsUHVsbC50b1N0cmluZygpLCAiVGhlIGdpdC1wdWxsIGNvbW1hbmQgZmFpbGVkLiIsIHN0ZGVyci5nZXRPdXRwdXQoKSwgZmFsc2UgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENoZWNrT3V0U2NtUmVzdWx0KCBjbFB1bGwudG9TdHJpbmcoKSwgIlRoZSBnaXQtcHVsbCBjb21tYW5kIGZhaWxlZC4iLCBzdGRlcnIuZ2V0T3V0cHV0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBhbmQgbm93IGxldHMgZG8gdGhlIGdpdC1jaGVja291dCBpdHNlbGYKICAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBjcmVhdGVDb21tYW5kTGluZSggcmVwb3NpdG9yeSwgZmlsZVNldC5nZXRCYXNlZGlyKCksIHZlcnNpb24gKTsKIApAQCAtMTEwLDE2ICsxMTMsMTUgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8vIGFuZCBub3cgc2VhcmNoIGZvciB0aGUgZmlsZXMKLSAgICAgICAgR2l0TGlzdENvbnN1bWVyIGxpc3RDb25zdW1lciA9IG5ldyBHaXRMaXN0Q29uc3VtZXIoIGdldExvZ2dlcigpCi0gICAgICAgIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBmaWxlU2V0LmdldEJhc2VkaXIoKQotICAgICAgICAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgU2NtRmlsZVN0YXR1cy5DSEVDS0VEX0lOKTsKKyAgICAgICAgR2l0TGlzdENvbnN1bWVyIGxpc3RDb25zdW1lciA9IG5ldyBHaXRMaXN0Q29uc3VtZXIoIGdldExvZ2dlcigpLCBmaWxlU2V0LmdldEJhc2VkaXIoKSwgU2NtRmlsZVN0YXR1cy5DSEVDS0VEX0lOICk7CiAKICAgICAgICAgQ29tbWFuZGxpbmUgY2xMaXN0ID0gR2l0TGlzdENvbW1hbmQuY3JlYXRlQ29tbWFuZExpbmUoIHJlcG9zaXRvcnksIGZpbGVTZXQuZ2V0QmFzZWRpcigpICk7Ci0gICAgICAgIAorCiAgICAgICAgIGV4aXRDb2RlID0gR2l0Q29tbWFuZExpbmVVdGlscy5leGVjdXRlKCBjbExpc3QsIGxpc3RDb25zdW1lciwgc3RkZXJyLCBnZXRMb2dnZXIoKSApOwogICAgICAgICBpZiAoIGV4aXRDb2RlICE9IDAgKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENoZWNrT3V0U2NtUmVzdWx0KCBjbExpc3QudG9TdHJpbmcoKSwgIlRoZSBnaXQtbHMtZmlsZXMgY29tbWFuZCBmYWlsZWQuIiwgc3RkZXJyLmdldE91dHB1dCgpLCBmYWxzZSApOworICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGVja091dFNjbVJlc3VsdCggY2xMaXN0LnRvU3RyaW5nKCksICJUaGUgZ2l0LWxzLWZpbGVzIGNvbW1hbmQgZmFpbGVkLiIsIHN0ZGVyci5nZXRPdXRwdXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlICk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gbmV3IENoZWNrT3V0U2NtUmVzdWx0KCBjbC50b1N0cmluZygpLCBsaXN0Q29uc3VtZXIuZ2V0TGlzdGVkRmlsZXMoKSApOwpAQCAtMTM0LDcgKzEzNiw2IEBACiAgICAgewogICAgICAgICBDb21tYW5kbGluZSBjbCA9IEdpdENvbW1hbmRMaW5lVXRpbHMuZ2V0QmFzZUdpdENvbW1hbmRMaW5lKCB3b3JraW5nRGlyZWN0b3J5LCAiY2hlY2tvdXQiICk7CiAKLSAgICAgICAgCiAgICAgICAgIGlmICggdmVyc2lvbiAhPSBudWxsICYmIFN0cmluZ1V0aWxzLmlzTm90RW1wdHkoIHZlcnNpb24uZ2V0TmFtZSgpICkgKQogICAgICAgICB7CiAgICAgICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCB2ZXJzaW9uLmdldE5hbWUoKSApOwpAQCAtMTQyLDQ2ICsxNDMsNDcgQEAKIAogICAgICAgICByZXR1cm4gY2w7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogY3JlYXRlIGEgZ2l0LWNsb25lIHJlcG9zaXRvcnkgY29tbWFuZCAKKyAgICAgKiBjcmVhdGUgYSBnaXQtY2xvbmUgcmVwb3NpdG9yeSBjb21tYW5kCiAgICAgICovCiAgICAgcHJpdmF0ZSBDb21tYW5kbGluZSBjcmVhdGVDbG9uZUNvbW1hbmQoIEdpdFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBGaWxlIHdvcmtpbmdEaXJlY3RvcnkgKQogICAgIHsKICAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBHaXRDb21tYW5kTGluZVV0aWxzLmdldEJhc2VHaXRDb21tYW5kTGluZSggd29ya2luZ0RpcmVjdG9yeS5nZXRQYXJlbnRGaWxlKCksICJjbG9uZSIgKTsKLSAgICAgICAgCisKICAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggcmVwb3NpdG9yeS5nZXRVcmwoKSApOwotICAgICAgICAKKwogICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldEZpbGUoIHdvcmtpbmdEaXJlY3RvcnkgKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIGNyZWF0ZSBhIGdpdC1wdWxsIHJlcG9zaXRvcnkgY29tbWFuZCAKKyAgICAgKiBjcmVhdGUgYSBnaXQtcHVsbCByZXBvc2l0b3J5IGNvbW1hbmQKICAgICAgKi8KICAgICBwcml2YXRlIENvbW1hbmRsaW5lIGNyZWF0ZVB1bGxDb21tYW5kKCBHaXRTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgRmlsZSB3b3JraW5nRGlyZWN0b3J5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbVZlcnNpb24gdmVyc2lvbiApCiAgICAgewogICAgICAgICBDb21tYW5kbGluZSBjbCA9IEdpdENvbW1hbmRMaW5lVXRpbHMuZ2V0QmFzZUdpdENvbW1hbmRMaW5lKCB3b3JraW5nRGlyZWN0b3J5LCAicHVsbCIgKTsKLSAgICAgICAgCisKICAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggcmVwb3NpdG9yeS5nZXRVcmwoKSApOwotICAgICAgICAKKwogICAgICAgICBpZiAoIHZlcnNpb24gIT0gbnVsbCAmJiBTdHJpbmdVdGlscy5pc05vdEVtcHR5KCB2ZXJzaW9uLmdldE5hbWUoKSApICkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCB2ZXJzaW9uIGluc3RhbmNlb2YgU2NtVGFnICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgIAljbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAidGFnIiApOwotICAgICAgICAgICAgCWNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIHZlcnNpb24uZ2V0TmFtZSgpICk7CisgICAgICAgICAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggInRhZyIgKTsKKyAgICAgICAgICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCB2ZXJzaW9uLmdldE5hbWUoKSApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgCWNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIHZlcnNpb24uZ2V0TmFtZSgpICsgIjoiICsgdmVyc2lvbi5nZXROYW1lKCkgKTsKKyAgICAgICAgICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCB2ZXJzaW9uLmdldE5hbWUoKSArICI6IiArIHZlcnNpb24uZ2V0TmFtZSgpICk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgIAljbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAibWFzdGVyIiApOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoICJtYXN0ZXIiICk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNsOwotICAgIH0gICAgCisgICAgfQogfQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL2RpZmYvR2l0RGlmZkNvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC9kaWZmL0dpdERpZmZDb21tYW5kLmphdmEKaW5kZXggNDBmMDQwYi4uMzJjYWU1ZCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL2RpZmYvR2l0RGlmZkNvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvZGlmZi9HaXREaWZmQ29tbWFuZC5qYXZhCkBAIC0zNiwxMSArMzYsMTUgQEAKIAogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpzdHJ1YmVyZ0B5YWhvby5kZSI+TWFyayBTdHJ1YmVyZzwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwotcHVibGljIGNsYXNzIEdpdERpZmZDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REaWZmQ29tbWFuZCBpbXBsZW1lbnRzIEdpdENvbW1hbmQKK3B1YmxpYyBjbGFzcyBHaXREaWZmQ29tbWFuZAorICAgIGV4dGVuZHMgQWJzdHJhY3REaWZmQ29tbWFuZAorICAgIGltcGxlbWVudHMgR2l0Q29tbWFuZAogewotICAgIHByb3RlY3RlZCBEaWZmU2NtUmVzdWx0IGV4ZWN1dGVEaWZmQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiBzdGFydFZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIGVuZFZlcnNpb24gKQorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCisgICAgcHJvdGVjdGVkIERpZmZTY21SZXN1bHQgZXhlY3V0ZURpZmZDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiBzdGFydFZlcnNpb24sIFNjbVZlcnNpb24gZW5kVmVyc2lvbiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIEdpdERpZmZDb25zdW1lciBjb25zdW1lciA9IG5ldyBHaXREaWZmQ29uc3VtZXIoIGdldExvZ2dlcigpLCBmaWxlU2V0LmdldEJhc2VkaXIoKSApOwpAQCAtNTIsNyArNTYsOCBAQAogICAgICAgICBleGl0Q29kZSA9IEdpdENvbW1hbmRMaW5lVXRpbHMuZXhlY3V0ZSggY2xEaWZmMkluZGV4LCBjb25zdW1lciwgc3RkZXJyLCBnZXRMb2dnZXIoKSApOwogICAgICAgICBpZiAoIGV4aXRDb2RlICE9IDAgKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IERpZmZTY21SZXN1bHQoIGNsRGlmZjJJbmRleC50b1N0cmluZygpLCAiVGhlIGdpdC1kaWZmIGNvbW1hbmQgZmFpbGVkLiIsIHN0ZGVyci5nZXRPdXRwdXQoKSwgZmFsc2UgKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgRGlmZlNjbVJlc3VsdCggY2xEaWZmMkluZGV4LnRvU3RyaW5nKCksICJUaGUgZ2l0LWRpZmYgY29tbWFuZCBmYWlsZWQuIiwgc3RkZXJyLmdldE91dHB1dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSApOwogICAgICAgICB9CiAKICAgICAgICAgQ29tbWFuZGxpbmUgY2xEaWZmMkhlYWQgPSBjcmVhdGVDb21tYW5kTGluZSggZmlsZVNldC5nZXRCYXNlZGlyKCksIHN0YXJ0VmVyc2lvbiwgZW5kVmVyc2lvbiwgdHJ1ZSApOwpAQCAtNzQsMTIgKzc5LDE0IEBACiAgICAgLyoqCiAgICAgICogQHBhcmFtIGNhY2hlZCBpZiA8Y29kZT50cnVlPC9jb2RlPiBkaWZmIHRoZSBpbmRleCB0byB0aGUgaGVhZCwgZWxzZSBkaWZmIHRoZSB0cmVlIHRvIHRoZSBpbmRleAogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgY3JlYXRlQ29tbWFuZExpbmUoIEZpbGUgd29ya2luZ0RpcmVjdG9yeSwgU2NtVmVyc2lvbiBzdGFydFZlcnNpb24sIFNjbVZlcnNpb24gZW5kVmVyc2lvbiwgYm9vbGVhbiBjYWNoZWQgKQorICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgY3JlYXRlQ29tbWFuZExpbmUoIEZpbGUgd29ya2luZ0RpcmVjdG9yeSwgU2NtVmVyc2lvbiBzdGFydFZlcnNpb24sIFNjbVZlcnNpb24gZW5kVmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGNhY2hlZCApCiAgICAgewogICAgICAgICBDb21tYW5kbGluZSBjbCA9IEdpdENvbW1hbmRMaW5lVXRpbHMuZ2V0QmFzZUdpdENvbW1hbmRMaW5lKCB3b3JraW5nRGlyZWN0b3J5LCAiZGlmZiIgKTsKIAotICAgICAgICBpZiAoIGNhY2hlZCApIHsKLSAgICAgICAgCWNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoICItLWNhY2hlZCIgKTsKKyAgICAgICAgaWYgKCBjYWNoZWQgKQorICAgICAgICB7CisgICAgICAgICAgICBjbC5jcmVhdGVBcmd1bWVudCgpLnNldFZhbHVlKCAiLS1jYWNoZWQiICk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIHN0YXJ0VmVyc2lvbiAhPSBudWxsICYmIFN0cmluZ1V0aWxzLmlzTm90RW1wdHkoIHN0YXJ0VmVyc2lvbi5nZXROYW1lKCkgKSApCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvbGlzdC9HaXRMaXN0Q29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL2xpc3QvR2l0TGlzdENvbW1hbmQuamF2YQppbmRleCAyMGY2NWM5Li44MmEzNzAwIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvbGlzdC9HaXRMaXN0Q29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC9saXN0L0dpdExpc3RDb21tYW5kLmphdmEKQEAgLTI5LDcgKzI5LDYgQEAKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5naXQuY29tbWFuZC5HaXRDb21tYW5kOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmdpdC5yZXBvc2l0b3J5LkdpdFNjbVByb3ZpZGVyUmVwb3NpdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5naXQuZ2l0ZXhlLmNvbW1hbmQuR2l0Q29tbWFuZExpbmVVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5naXQuZ2l0ZXhlLmNvbW1hbmQubGlzdC5HaXRMaXN0Q29uc3VtZXI7CiBpbXBvcnQgb3JnLmNvZGVoYXVzLnBsZXh1cy51dGlsLmNsaS5Db21tYW5kTGluZVV0aWxzOwogaW1wb3J0IG9yZy5jb2RlaGF1cy5wbGV4dXMudXRpbC5jbGkuQ29tbWFuZGxpbmU7CiAKQEAgLTM3LDE4ICszNiwyMSBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnN0cnViZXJnQHlhaG9vLmRlIj5NYXJrIFN0cnViZXJnPC9hPgorICogQHZlcnNpb24gJElkJAogICovCi1wdWJsaWMgY2xhc3MgR2l0TGlzdENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdExpc3RDb21tYW5kIGltcGxlbWVudHMgR2l0Q29tbWFuZAorcHVibGljIGNsYXNzIEdpdExpc3RDb21tYW5kCisgICAgZXh0ZW5kcyBBYnN0cmFjdExpc3RDb21tYW5kCisgICAgaW1wbGVtZW50cyBHaXRDb21tYW5kCiB7Ci0KLSAgICBwcm90ZWN0ZWQgTGlzdFNjbVJlc3VsdCBleGVjdXRlTGlzdENvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvLCBTY21GaWxlU2V0IGZpbGVTZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHJlY3Vyc2l2ZSwgU2NtVmVyc2lvbiBzY21WZXJzaW9uICkKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLworICAgIHByb3RlY3RlZCBMaXN0U2NtUmVzdWx0IGV4ZWN1dGVMaXN0Q29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwgYm9vbGVhbiByZWN1cnNpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHNjbVZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICBHaXRTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSA9IChHaXRTY21Qcm92aWRlclJlcG9zaXRvcnkpIHJlcG87CiAKLSAgICAgICAgaWYgKCBHaXRTY21Qcm92aWRlclJlcG9zaXRvcnkuUFJPVE9DT0xfRklMRS5lcXVhbHMoIHJlcG9zaXRvcnkuZ2V0UHJvdG9jb2woKSApICYmCi0gICAgICAgICAgICAgcmVwb3NpdG9yeS5nZXRVcmwoKS5pbmRleE9mKCBmaWxlU2V0LmdldEJhc2VkaXIoKS5nZXRQYXRoKCkgKSA+PSAwICkgCisgICAgICAgIGlmICggR2l0U2NtUHJvdmlkZXJSZXBvc2l0b3J5LlBST1RPQ09MX0ZJTEUuZXF1YWxzKCByZXBvc2l0b3J5LmdldFByb3RvY29sKCkgKQorICAgICAgICAgICAgJiYgcmVwb3NpdG9yeS5nZXRVcmwoKS5pbmRleE9mKCBmaWxlU2V0LmdldEJhc2VkaXIoKS5nZXRQYXRoKCkgKSA+PSAwICkKICAgICAgICAgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNjbUV4Y2VwdGlvbiggInJlbW90ZSByZXBvc2l0b3J5IG11c3Qgbm90IGJlIHRoZSB3b3JraW5nIGRpcmVjdG9yeSIgKTsKICAgICAgICAgfQpAQCAtNTYsMTAgKzU4LDkgQEAKICAgICAgICAgaW50IGV4aXRDb2RlOwogCiAgICAgICAgIENvbW1hbmRMaW5lVXRpbHMuU3RyaW5nU3RyZWFtQ29uc3VtZXIgc3RkZXJyID0gbmV3IENvbW1hbmRMaW5lVXRpbHMuU3RyaW5nU3RyZWFtQ29uc3VtZXIoKTsKLSAgICAgICAgR2l0TGlzdENvbnN1bWVyIGNvbnN1bWVyID0gbmV3IEdpdExpc3RDb25zdW1lciggZ2V0TG9nZ2VyKCkKLSAgICAgICAgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgZmlsZVNldC5nZXRCYXNlZGlyKCkuZ2V0UGFyZW50RmlsZSgpCi0gICAgICAgIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIFNjbUZpbGVTdGF0dXMuQ0hFQ0tFRF9JTiApOwotICAgICAgICAKKyAgICAgICAgR2l0TGlzdENvbnN1bWVyIGNvbnN1bWVyID0gbmV3IEdpdExpc3RDb25zdW1lciggZ2V0TG9nZ2VyKCksIGZpbGVTZXQuZ2V0QmFzZWRpcigpLmdldFBhcmVudEZpbGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtRmlsZVN0YXR1cy5DSEVDS0VEX0lOICk7CisKICAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBjcmVhdGVDb21tYW5kTGluZSggcmVwb3NpdG9yeSwgZmlsZVNldC5nZXRCYXNlZGlyKCkgKTsKIAogICAgICAgICBleGl0Q29kZSA9IEdpdENvbW1hbmRMaW5lVXRpbHMuZXhlY3V0ZSggY2wsIGNvbnN1bWVyLCBzdGRlcnIsIGdldExvZ2dlcigpICk7CkBAIC03OCw4ICs3OSw4IEBACiAgICAgcHVibGljIHN0YXRpYyBDb21tYW5kbGluZSBjcmVhdGVDb21tYW5kTGluZSggR2l0U2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIEZpbGUgd29ya2luZ0RpcmVjdG9yeSApCiAgICAgewogICAgICAgICBDb21tYW5kbGluZSBjbCA9IEdpdENvbW1hbmRMaW5lVXRpbHMuZ2V0QmFzZUdpdENvbW1hbmRMaW5lKCB3b3JraW5nRGlyZWN0b3J5LCAibHMtZmlsZXMiICk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjbDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC9saXN0L0dpdExpc3RDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL2xpc3QvR2l0TGlzdENvbnN1bWVyLmphdmEKaW5kZXggMjA2MGU1OC4uYjUyZTA4OCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL2xpc3QvR2l0TGlzdENvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL2xpc3QvR2l0TGlzdENvbnN1bWVyLmphdmEKQEAgLTI5LDI0ICsyOSwyNiBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnN0cnViZXJnQHlhaG9vLmRlIj5NYXJrIFN0cnViZXJnPC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgR2l0TGlzdENvbnN1bWVyCiAgICAgZXh0ZW5kcyBBYnN0cmFjdEZpbGVDaGVja2luZ0NvbnN1bWVyCiB7Ci0JcHJpdmF0ZSBTY21GaWxlU3RhdHVzIGZpbGVTdGF0dXM7IAorICAgIHByaXZhdGUgU2NtRmlsZVN0YXR1cyBmaWxlU3RhdHVzOwogCi0JLyoqCi0JICogQHBhcmFtIGxvZ2dlcgotCSAqIEBwYXJhbSB3b3JraW5nRGlyZWN0b3J5Ci0JICogQHBhcmFtIGZpbGVTdGF0dXMgd2lsbCBiZSB1c2VkIGZvciBlYWNoIGZpbGUgZm91bmQKLQkgKi8KKyAgICAvKioKKyAgICAgKiBAcGFyYW0gbG9nZ2VyCisgICAgICogQHBhcmFtIHdvcmtpbmdEaXJlY3RvcnkKKyAgICAgKiBAcGFyYW0gZmlsZVN0YXR1cyB3aWxsIGJlIHVzZWQgZm9yIGVhY2ggZmlsZSBmb3VuZAorICAgICAqLwogICAgIHB1YmxpYyBHaXRMaXN0Q29uc3VtZXIoIFNjbUxvZ2dlciBsb2dnZXIsIEZpbGUgd29ya2luZ0RpcmVjdG9yeSwgU2NtRmlsZVN0YXR1cyBmaWxlU3RhdHVzICkKICAgICB7CiAgICAgICAgIHN1cGVyKCBsb2dnZXIsIHdvcmtpbmdEaXJlY3RvcnkgKTsKLSAgICAgICAgCisKICAgICAgICAgdGhpcy5maWxlU3RhdHVzID0gZmlsZVN0YXR1czsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCB2b2lkIHBhcnNlTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgU3RyaW5nIGZpbGUgPSBsaW5lOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL3JlbW92ZS9HaXRSZW1vdmVDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvcmVtb3ZlL0dpdFJlbW92ZUNvbW1hbmQuamF2YQppbmRleCA4ZTI2M2I4Li5hYjBhOTQxIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvcmVtb3ZlL0dpdFJlbW92ZUNvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvcmVtb3ZlL0dpdFJlbW92ZUNvbW1hbmQuamF2YQpAQCAtMzYsOSArMzYsMTEgQEAKIAogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpzdHJ1YmVyZ0B5YWhvby5kZSI+TWFyayBTdHJ1YmVyZzwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEdpdFJlbW92ZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdFJlbW92ZUNvbW1hbmQgaW1wbGVtZW50cyBHaXRDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU2NtUmVzdWx0IGV4ZWN1dGVSZW1vdmVDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC01MCw3ICs1Miw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBDb21tYW5kbGluZSBjbCA9IGNyZWF0ZUNvbW1hbmRMaW5lKCBmaWxlU2V0LmdldEJhc2VkaXIoKSwgZmlsZVNldC5nZXRGaWxlTGlzdCgpICk7Ci0gICAgICAgIAorCiAgICAgICAgIEdpdFJlbW92ZUNvbnN1bWVyIGNvbnN1bWVyID0gbmV3IEdpdFJlbW92ZUNvbnN1bWVyKCBnZXRMb2dnZXIoKSApOwogCiAgICAgICAgIENvbW1hbmRMaW5lVXRpbHMuU3RyaW5nU3RyZWFtQ29uc3VtZXIgc3RkZXJyID0gbmV3IENvbW1hbmRMaW5lVXRpbHMuU3RyaW5nU3RyZWFtQ29uc3VtZXIoKTsKQEAgLTY4LDEyICs3MCwxMiBAQAogCiAgICAgcHVibGljIHN0YXRpYyBDb21tYW5kbGluZSBjcmVhdGVDb21tYW5kTGluZSggRmlsZSB3b3JraW5nRGlyZWN0b3J5LCBMaXN0LypGaWxlKi8gZmlsZXMgKQogICAgIHRocm93cyBTY21FeGNlcHRpb24KLQl7Ci0JICAgIENvbW1hbmRsaW5lIGNsID0gR2l0Q29tbWFuZExpbmVVdGlscy5nZXRCYXNlR2l0Q29tbWFuZExpbmUoIHdvcmtpbmdEaXJlY3RvcnksICJybSIgKTsKLQkKLQkgICAgR2l0Q29tbWFuZExpbmVVdGlscy5hZGRUYXJnZXQoIGNsLCBmaWxlcyApOwotCQotCSAgICByZXR1cm4gY2w7Ci0JfQorICAgIHsKKyAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBHaXRDb21tYW5kTGluZVV0aWxzLmdldEJhc2VHaXRDb21tYW5kTGluZSggd29ya2luZ0RpcmVjdG9yeSwgInJtIiApOworCisgICAgICAgIEdpdENvbW1hbmRMaW5lVXRpbHMuYWRkVGFyZ2V0KCBjbCwgZmlsZXMgKTsKKworICAgICAgICByZXR1cm4gY2w7CisgICAgfQogCiB9CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvcmVtb3ZlL0dpdFJlbW92ZUNvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvcmVtb3ZlL0dpdFJlbW92ZUNvbnN1bWVyLmphdmEKaW5kZXggMzFjMTAwOC4uMjRiZTY5ZCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL3JlbW92ZS9HaXRSZW1vdmVDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC9yZW1vdmUvR2l0UmVtb3ZlQ29uc3VtZXIuamF2YQpAQCAtMzEsNiArMzEsNyBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnN0cnViZXJnQHlhaG9vLmRlIj5NYXJrIFN0cnViZXJnPC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgR2l0UmVtb3ZlQ29uc3VtZXIgaW1wbGVtZW50cyBTdHJlYW1Db25zdW1lcgogewpAQCAtNjQsMTMgKzY1LDE0IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAiSU5URVJOQUwgRVJST1I6IENvdWxkIG5vdCBjcmVhdGUgcmVnZXhwIHRvIHBhcnNlIGdpdCBsb2cgZmlsZS4gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLiBTb21ldGhpbmcgaXMgcHJvYmFibHkgd3Jvbmcgd2l0aCB0aGUgb3JvIGluc3RhbGxhdGlvbi4iLAogICAgICAgICAgICAgICAgIGV4ICk7Ci0gICAgICAgIH0gICAgICAgIAorICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIFN0cmVhbUNvbnN1bWVyIEltcGxlbWVudGF0aW9uCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgaWYgKCBsaW5lLmxlbmd0aCgpIDw9IDIgKQpAQCAtNzgsOSArODAsOSBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCByZW1vdmVkUmVnZXhwLm1hdGNoKCBsaW5lICkgKSAKKyAgICAgICAgaWYgKCByZW1vdmVkUmVnZXhwLm1hdGNoKCBsaW5lICkgKQogICAgICAgICB7Ci0gICAgICAgIAlTdHJpbmcgZmlsZSA9IHJlbW92ZWRSZWdleHAuZ2V0UGFyZW4oIDEgKTsKKyAgICAgICAgICAgIFN0cmluZyBmaWxlID0gcmVtb3ZlZFJlZ2V4cC5nZXRQYXJlbiggMSApOwogICAgICAgICAgICAgcmVtb3ZlZEZpbGVzLmFkZCggbmV3IFNjbUZpbGUoIGZpbGUsIFNjbUZpbGVTdGF0dXMuREVMRVRFRCApICk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL3N0YXR1cy9HaXRTdGF0dXNDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvc3RhdHVzL0dpdFN0YXR1c0NvbW1hbmQuamF2YQppbmRleCA3YzRjMjg2Li5hZTYxMTY1IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvc3RhdHVzL0dpdFN0YXR1c0NvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvc3RhdHVzL0dpdFN0YXR1c0NvbW1hbmQuamF2YQpAQCAtMzgsNiArMzgsNyBAQAogICAgIGV4dGVuZHMgQWJzdHJhY3RTdGF0dXNDb21tYW5kCiAgICAgaW1wbGVtZW50cyBHaXRDb21tYW5kCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU3RhdHVzU2NtUmVzdWx0IGV4ZWN1dGVTdGF0dXNDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC9zdGF0dXMvR2l0U3RhdHVzQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC9zdGF0dXMvR2l0U3RhdHVzQ29uc3VtZXIuamF2YQppbmRleCA0Y2QxN2FiLi41ODBlOTlmIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvc3RhdHVzL0dpdFN0YXR1c0NvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL3N0YXR1cy9HaXRTdGF0dXNDb25zdW1lci5qYXZhCkBAIC0zMyw2ICszMyw3IEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86c3RydWJlcmdAeWFob28uZGUiPk1hcmsgU3RydWJlcmc8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBHaXRTdGF0dXNDb25zdW1lcgogICAgIGltcGxlbWVudHMgU3RyZWFtQ29uc3VtZXIKQEAgLTQ2LDEyICs0NywxMiBAQAogICAgICAqIFRoZSBwYXR0ZXJuIHVzZWQgdG8gbWF0Y2ggbW9kaWZpZWQgZmlsZSBsaW5lcwogICAgICAqLwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RJRklFRF9QQVRURVJOID0gIl4jXFxzKm1vZGlmaWVkOlxccyooLiopIjsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoZSBwYXR0ZXJuIHVzZWQgdG8gbWF0Y2ggZGVsZXRlZCBmaWxlIGxpbmVzCiAgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFTEVURURfUEFUVEVSTiA9ICJeI1xccypkZWxldGVkOlxccyooLiopIjsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEBzZWUgI0FEREVEX1BBVFRFUk4KICAgICAgKi8KQEAgLTYxLDEyICs2MiwxMiBAQAogICAgICAqIEBzZWUgI01PRElGSUVEX1BBVFRFUk4KICAgICAgKi8KICAgICBwcml2YXRlIFJFIG1vZGlmaWVkUmVnZXhwOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQHNlZSAjREVMRVRFRF9QQVRURVJOCiAgICAgICovCiAgICAgcHJpdmF0ZSBSRSBkZWxldGVkUmVnZXhwOwotICAgIAorCiAgICAgcHJpdmF0ZSBTY21Mb2dnZXIgbG9nZ2VyOwogCiAgICAgcHJpdmF0ZSBGaWxlIHdvcmtpbmdEaXJlY3Rvcnk7CkBAIC04MSw3ICs4Miw3IEBACiAgICAgewogICAgICAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjsKICAgICAgICAgdGhpcy53b3JraW5nRGlyZWN0b3J5ID0gd29ya2luZ0RpcmVjdG9yeTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5CiAgICAgICAgIHsKICAgICAgICAgICAgIGFkZGVkUmVnZXhwICAgID0gbmV3IFJFKCBBRERFRF9QQVRURVJOICAgICk7CkBAIC05MywxMyArOTQsMTQgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICJJTlRFUk5BTCBFUlJPUjogQ291bGQgbm90IGNyZWF0ZSByZWdleHAgdG8gcGFyc2UgZ2l0IGxvZyBmaWxlLiBUaGlzIHNob3VsZG4ndCBoYXBwZW4uIFNvbWV0aGluZyBpcyBwcm9iYWJseSB3cm9uZyB3aXRoIHRoZSBvcm8gaW5zdGFsbGF0aW9uLiIsCiAgICAgICAgICAgICAgICAgZXggKTsKLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0KICAgICB9CiAKICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgLy8gU3RyZWFtQ29uc3VtZXIgSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBsb2dnZXIuZGVidWcoIGxpbmUgKTsKQEAgLTEwNywyNyArMTA5LDI3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTY21GaWxlU3RhdHVzIHN0YXR1cyA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBmaWxlID0gbnVsbDsKIAotICAgICAgICBpZiAoIGFkZGVkUmVnZXhwLm1hdGNoKCBsaW5lICkgKSAKKyAgICAgICAgaWYgKCBhZGRlZFJlZ2V4cC5tYXRjaCggbGluZSApICkKICAgICAgICAgewogICAgICAgICAgICAgc3RhdHVzID0gU2NtRmlsZVN0YXR1cy5BRERFRDsKICAgICAgICAgICAgIGZpbGUgPSBhZGRlZFJlZ2V4cC5nZXRQYXJlbiggMSApOwotICAgICAgICB9IAotICAgICAgICBlbHNlIGlmICggbW9kaWZpZWRSZWdleHAubWF0Y2goIGxpbmUgKSApIAorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBtb2RpZmllZFJlZ2V4cC5tYXRjaCggbGluZSApICkKICAgICAgICAgewogICAgICAgICAgICAgc3RhdHVzID0gU2NtRmlsZVN0YXR1cy5NT0RJRklFRDsKICAgICAgICAgICAgIGZpbGUgPSBtb2RpZmllZFJlZ2V4cC5nZXRQYXJlbiggMSApOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCBkZWxldGVkUmVnZXhwLm1hdGNoKCBsaW5lICkgKSAKKyAgICAgICAgZWxzZSBpZiAoIGRlbGV0ZWRSZWdleHAubWF0Y2goIGxpbmUgKSApCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0YXR1cyA9IFNjbUZpbGVTdGF0dXMuREVMRVRFRDsKICAgICAgICAgICAgIGZpbGUgPSBkZWxldGVkUmVnZXhwLmdldFBhcmVuKCAxICk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gSWYgdGhlIGZpbGUgaXNuJ3QgYSBmaWxlOyBkb24ndCBhZGQgaXQuCiAgICAgICAgIGlmICggZmlsZSAhPSBudWxsICkKICAgICAgICAgewpAQCAtMTM1LDExICsxMzcsMTEgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgY2hhbmdlZEZpbGVzLmFkZCggbmV3IFNjbUZpbGUoIGZpbGUsIHN0YXR1cyApICk7CiAgICAgICAgIH0KIAotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyBMaXN0IGdldENoYW5nZWRGaWxlcygpCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvdGFnL0dpdFRhZ0NvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC90YWcvR2l0VGFnQ29tbWFuZC5qYXZhCmluZGV4IDQyNDJiM2QuLjM5YjRmYjcgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC90YWcvR2l0VGFnQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC90YWcvR2l0VGFnQ29tbWFuZC5qYXZhCkBAIC00Miw5ICs0MiwxMyBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnN0cnViZXJnQHlhaG9vLmRlIj5NYXJrIFN0cnViZXJnPC9hPgorICogQHZlcnNpb24gJElkJAogICovCi1wdWJsaWMgY2xhc3MgR2l0VGFnQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0VGFnQ29tbWFuZCBpbXBsZW1lbnRzIEdpdENvbW1hbmQKK3B1YmxpYyBjbGFzcyBHaXRUYWdDb21tYW5kCisgICAgZXh0ZW5kcyBBYnN0cmFjdFRhZ0NvbW1hbmQKKyAgICBpbXBsZW1lbnRzIEdpdENvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTY21SZXN1bHQgZXhlY3V0ZVRhZ0NvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvLCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyB0YWcsIFN0cmluZyBtZXNzYWdlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKQEAgLTY4LDEyICs3MiwxMCBAQAogICAgICAgICB9CiAgICAgICAgIGNhdGNoICggSU9FeGNlcHRpb24gZXggKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFRhZ1NjbVJlc3VsdCggbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3Igd2hpbGUgbWFraW5nIGEgdGVtcG9yYXJ5IGZpbGUgZm9yIHRoZSBjb21taXQgbWVzc2FnZTogIiArIGV4LmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBmYWxzZSApOworICAgICAgICAgICAgcmV0dXJuIG5ldyBUYWdTY21SZXN1bHQoIG51bGwsICJFcnJvciB3aGlsZSBtYWtpbmcgYSB0ZW1wb3JhcnkgZmlsZSBmb3IgdGhlIGNvbW1pdCBtZXNzYWdlOiAiCisgICAgICAgICAgICAgICAgKyBleC5nZXRNZXNzYWdlKCksIG51bGwsIGZhbHNlICk7CiAgICAgICAgIH0KIAotCiAgICAgICAgIHRyeQogICAgICAgICB7CiAgICAgICAgICAgICBDb21tYW5kTGluZVV0aWxzLlN0cmluZ1N0cmVhbUNvbnN1bWVyIHN0ZG91dCA9IG5ldyBDb21tYW5kTGluZVV0aWxzLlN0cmluZ1N0cmVhbUNvbnN1bWVyKCk7CkBAIC05MSw3ICs5Myw3IEBACiAKICAgICAgICAgICAgIC8vIGFuZCBub3cgcHVzaCB0aGUgdGFnIHRvIHRoZSBvcmlnaW4gcmVwb3NpdG9yeQogICAgICAgICAgICAgQ29tbWFuZGxpbmUgY2xQdXNoID0gY3JlYXRlUHVzaENvbW1hbmRMaW5lKCByZXBvc2l0b3J5LCBmaWxlU2V0LCB0YWcgKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBleGl0Q29kZSA9IEdpdENvbW1hbmRMaW5lVXRpbHMuZXhlY3V0ZSggY2xQdXNoLCBzdGRvdXQsIHN0ZGVyciwgZ2V0TG9nZ2VyKCkgKTsKICAgICAgICAgICAgIGlmICggZXhpdENvZGUgIT0gMCApCiAgICAgICAgICAgICB7CkBAIC05OSwxNiArMTAxLDE1IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIHBsdXMgc2VhcmNoIGZvciB0aGUgdGFnZ2VkIGZpbGVzCi0gICAgICAgICAgICBHaXRMaXN0Q29uc3VtZXIgbGlzdENvbnN1bWVyID0gbmV3IEdpdExpc3RDb25zdW1lciggZ2V0TG9nZ2VyKCkKLSAgICAgICAgICAgIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBmaWxlU2V0LmdldEJhc2VkaXIoKQotICAgICAgICAgICAgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIFNjbUZpbGVTdGF0dXMuVEFHR0VEICk7CisgICAgICAgICAgICBHaXRMaXN0Q29uc3VtZXIgbGlzdENvbnN1bWVyID0gbmV3IEdpdExpc3RDb25zdW1lciggZ2V0TG9nZ2VyKCksIGZpbGVTZXQuZ2V0QmFzZWRpcigpLCBTY21GaWxlU3RhdHVzLlRBR0dFRCApOwogCiAgICAgICAgICAgICBDb21tYW5kbGluZSBjbExpc3QgPSBHaXRMaXN0Q29tbWFuZC5jcmVhdGVDb21tYW5kTGluZSggcmVwb3NpdG9yeSwgZmlsZVNldC5nZXRCYXNlZGlyKCkgKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBleGl0Q29kZSA9IEdpdENvbW1hbmRMaW5lVXRpbHMuZXhlY3V0ZSggY2xMaXN0LCBsaXN0Q29uc3VtZXIsIHN0ZGVyciwgZ2V0TG9nZ2VyKCkgKTsKICAgICAgICAgICAgIGlmICggZXhpdENvZGUgIT0gMCApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGVja091dFNjbVJlc3VsdCggY2xMaXN0LnRvU3RyaW5nKCksICJUaGUgZ2l0LWxzLWZpbGVzIGNvbW1hbmQgZmFpbGVkLiIsIHN0ZGVyci5nZXRPdXRwdXQoKSwgZmFsc2UgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENoZWNrT3V0U2NtUmVzdWx0KCBjbExpc3QudG9TdHJpbmcoKSwgIlRoZSBnaXQtbHMtZmlsZXMgY29tbWFuZCBmYWlsZWQuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnIuZ2V0T3V0cHV0KCksIGZhbHNlICk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBuZXcgVGFnU2NtUmVzdWx0KCBjbFRhZy50b1N0cmluZygpLCBsaXN0Q29uc3VtZXIuZ2V0TGlzdGVkRmlsZXMoKSApOwpAQCAtMTMxLDggKzEzMiw4IEBACiAgICAgLy8KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIGNyZWF0ZUNvbW1hbmRMaW5lKCBHaXRTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgRmlsZSB3b3JraW5nRGlyZWN0b3J5LCBTdHJpbmcgdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGUgbWVzc2FnZUZpbGUgKQorICAgIHB1YmxpYyBzdGF0aWMgQ29tbWFuZGxpbmUgY3JlYXRlQ29tbWFuZExpbmUoIEdpdFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBGaWxlIHdvcmtpbmdEaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRhZywgRmlsZSBtZXNzYWdlRmlsZSApCiAgICAgewogICAgICAgICBDb21tYW5kbGluZSBjbCA9IEdpdENvbW1hbmRMaW5lVXRpbHMuZ2V0QmFzZUdpdENvbW1hbmRMaW5lKCB3b3JraW5nRGlyZWN0b3J5LCAidGFnIiApOwogCkBAIC0xNDUsMTYgKzE0NiwxNSBAQAogICAgICAgICByZXR1cm4gY2w7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBDb21tYW5kbGluZSBjcmVhdGVQdXNoQ29tbWFuZExpbmUoIEdpdFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0YWcgKQotICAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KLSAgICAgIHsKLSAgICAgICAgICBDb21tYW5kbGluZSBjbCA9IEdpdENvbW1hbmRMaW5lVXRpbHMuZ2V0QmFzZUdpdENvbW1hbmRMaW5lKCBmaWxlU2V0LmdldEJhc2VkaXIoKSwgInB1c2giKTsKKyAgICBwdWJsaWMgc3RhdGljIENvbW1hbmRsaW5lIGNyZWF0ZVB1c2hDb21tYW5kTGluZSggR2l0U2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZyApCisgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KKyAgICB7CisgICAgICAgIENvbW1hbmRsaW5lIGNsID0gR2l0Q29tbWFuZExpbmVVdGlscy5nZXRCYXNlR2l0Q29tbWFuZExpbmUoIGZpbGVTZXQuZ2V0QmFzZWRpcigpLCAicHVzaCIgKTsKIAotICAgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoICJvcmlnaW4iICk7Ci0gICAgICAgICAgY2wuY3JlYXRlQXJndW1lbnQoKS5zZXRWYWx1ZSggdGFnICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgcmV0dXJuIGNsOwotICAgICAgfQotICAgICAgCisgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoICJvcmlnaW4iICk7CisgICAgICAgIGNsLmNyZWF0ZUFyZ3VtZW50KCkuc2V0VmFsdWUoIHRhZyApOworCisgICAgICAgIHJldHVybiBjbDsKKyAgICB9CisKIH0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC91cGRhdGUvR2l0VXBkYXRlQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL3VwZGF0ZS9HaXRVcGRhdGVDb21tYW5kLmphdmEKaW5kZXggZThjNTFmNi4uZmEzMTdkOCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL3VwZGF0ZS9HaXRVcGRhdGVDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL3VwZGF0ZS9HaXRVcGRhdGVDb21tYW5kLmphdmEKQEAgLTEsMjEgKzEsNSBAQAogcGFja2FnZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5naXQuZ2l0ZXhlLmNvbW1hbmQudXBkYXRlOwogCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVmVyc2lvbjsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLmNoYW5nZWxvZy5DaGFuZ2VMb2dDb21tYW5kOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQudXBkYXRlLkFic3RyYWN0VXBkYXRlQ29tbWFuZDsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLnVwZGF0ZS5VcGRhdGVTY21SZXN1bHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC51cGRhdGUuVXBkYXRlU2NtUmVzdWx0V2l0aFJldmlzaW9uOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5naXQuY29tbWFuZC5HaXRDb21tYW5kOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmdpdC5naXRleGUuY29tbWFuZC5HaXRDb21tYW5kTGluZVV0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmdpdC5yZXBvc2l0b3J5LkdpdFNjbVByb3ZpZGVyUmVwb3NpdG9yeTsKLWltcG9ydCBvcmcuY29kZWhhdXMucGxleHVzLnV0aWwuY2xpLkNvbW1hbmRMaW5lVXRpbHM7Ci1pbXBvcnQgb3JnLmNvZGVoYXVzLnBsZXh1cy51dGlsLmNsaS5Db21tYW5kbGluZTsKLQogLyoKICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpAQCAtMzUsMzMgKzE5LDQ4IEBACiAgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTZXQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVmVyc2lvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLmNoYW5nZWxvZy5DaGFuZ2VMb2dDb21tYW5kOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmNvbW1hbmQudXBkYXRlLkFic3RyYWN0VXBkYXRlQ29tbWFuZDsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLnVwZGF0ZS5VcGRhdGVTY21SZXN1bHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uY29tbWFuZC51cGRhdGUuVXBkYXRlU2NtUmVzdWx0V2l0aFJldmlzaW9uOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLlNjbVByb3ZpZGVyUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5wcm92aWRlci5naXQuY29tbWFuZC5HaXRDb21tYW5kOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmdpdC5naXRleGUuY29tbWFuZC5HaXRDb21tYW5kTGluZVV0aWxzOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmdpdC5yZXBvc2l0b3J5LkdpdFNjbVByb3ZpZGVyUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuY29kZWhhdXMucGxleHVzLnV0aWwuY2xpLkNvbW1hbmRMaW5lVXRpbHM7CitpbXBvcnQgb3JnLmNvZGVoYXVzLnBsZXh1cy51dGlsLmNsaS5Db21tYW5kbGluZTsKKwogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpvbGFteUBhcGFjaGUub3JnIj5vbGFteTwvYT4KLSAqIEBzaW5jZSAxMCBhb8O7dCAyMDA4CisgKiBAc2luY2UgMTAgYXVndXN0IDIwMDgKICAqIEB2ZXJzaW9uICRJZCQKICAqLwotcHVibGljIGNsYXNzIEdpdFVwZGF0ZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdFVwZGF0ZUNvbW1hbmQgaW1wbGVtZW50cyBHaXRDb21tYW5kCitwdWJsaWMgY2xhc3MgR2l0VXBkYXRlQ29tbWFuZAorICAgIGV4dGVuZHMgQWJzdHJhY3RVcGRhdGVDb21tYW5kCisgICAgaW1wbGVtZW50cyBHaXRDb21tYW5kCiB7Ci0KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBVcGRhdGVTY21SZXN1bHQgZXhlY3V0ZVVwZGF0ZUNvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvLCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiBzY21WZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgR2l0U2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnkgPSAoR2l0U2NtUHJvdmlkZXJSZXBvc2l0b3J5KSByZXBvOwogCi0gICAgICAgIGlmICggR2l0U2NtUHJvdmlkZXJSZXBvc2l0b3J5LlBST1RPQ09MX0ZJTEUuZXF1YWxzKCByZXBvc2l0b3J5LmdldFByb3RvY29sKCkgKSAmJgotICAgICAgICAgICAgIHJlcG9zaXRvcnkuZ2V0VXJsKCkuaW5kZXhPZiggZmlsZVNldC5nZXRCYXNlZGlyKCkuZ2V0UGF0aCgpICkgPj0gMCApIAorICAgICAgICBpZiAoIEdpdFNjbVByb3ZpZGVyUmVwb3NpdG9yeS5QUk9UT0NPTF9GSUxFLmVxdWFscyggcmVwb3NpdG9yeS5nZXRQcm90b2NvbCgpICkKKyAgICAgICAgICAgICYmIHJlcG9zaXRvcnkuZ2V0VXJsKCkuaW5kZXhPZiggZmlsZVNldC5nZXRCYXNlZGlyKCkuZ2V0UGF0aCgpICkgPj0gMCApCiAgICAgICAgIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTY21FeGNlcHRpb24oICJyZW1vdGUgcmVwb3NpdG9yeSBtdXN0IG5vdCBiZSB0aGUgd29ya2luZyBkaXJlY3RvcnkiICk7CiAgICAgICAgIH0KIAogICAgICAgICBpbnQgZXhpdENvZGU7CiAKLSAgICAgICAgR2l0VXBkYXRlQ29tbWFuZENvbnN1bWVyIGNvbnN1bWVyID0gbmV3IEdpdFVwZGF0ZUNvbW1hbmRDb25zdW1lciggZ2V0TG9nZ2VyKCksIGZpbGVTZXQKLSAgICAgICAgICAgIC5nZXRCYXNlZGlyKCkgKTsKLSAgICAgICAgCisgICAgICAgIEdpdFVwZGF0ZUNvbW1hbmRDb25zdW1lciBjb25zdW1lciA9IG5ldyBHaXRVcGRhdGVDb21tYW5kQ29uc3VtZXIoIGdldExvZ2dlcigpLCBmaWxlU2V0LmdldEJhc2VkaXIoKSApOworCiAgICAgICAgIENvbW1hbmRMaW5lVXRpbHMuU3RyaW5nU3RyZWFtQ29uc3VtZXIgc3RkZXJyID0gbmV3IENvbW1hbmRMaW5lVXRpbHMuU3RyaW5nU3RyZWFtQ29uc3VtZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgQ29tbWFuZGxpbmUgY2wgPSBHaXRDb21tYW5kTGluZVV0aWxzLmdldEJhc2VHaXRDb21tYW5kTGluZSggZmlsZVNldC5nZXRCYXNlZGlyKCksICJwdWxsIiApOwogICAgICAgICBjbC5jcmVhdGVBcmcoKS5zZXRMaW5lKCAib3JpZ2luIiApOwogICAgICAgICBjbC5jcmVhdGVBcmcoKS5zZXRMaW5lKCAibWFzdGVyIiApOwpAQCAtNjksMTcgKzY4LDE2IEBACiAgICAgICAgIGlmICggZXhpdENvZGUgIT0gMCApCiAgICAgICAgIHsKICAgICAgICAgICAgIGdldExvZ2dlcigpLndhcm4oICJmYWlsZWQgdG8gdXBkYXRlIGdpdCwgcmV0dXJuIGNvZGUgIiArIGV4aXRDb2RlICk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFVwZGF0ZVNjbVJlc3VsdCggY2wudG9TdHJpbmcoKSwgIlRoZSBnaXQtcHVsbCBvcmlnaW4gbWFzdGVyIGNvbW1hbmQgZmFpbGVkLiIsIHN0ZGVyci5nZXRPdXRwdXQoKSwgZmFsc2UgKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgVXBkYXRlU2NtUmVzdWx0KCBjbC50b1N0cmluZygpLCAiVGhlIGdpdC1wdWxsIG9yaWdpbiBtYXN0ZXIgY29tbWFuZCBmYWlsZWQuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnIuZ2V0T3V0cHV0KCksIGZhbHNlICk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVTY21SZXN1bHRXaXRoUmV2aXNpb24oIGNsLnRvU3RyaW5nKCksIGNvbnN1bWVyLmdldFVwZGF0ZWRGaWxlcygpLCBudWxsICk7ICAgICAgICAKKyAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVTY21SZXN1bHRXaXRoUmV2aXNpb24oIGNsLnRvU3RyaW5nKCksIGNvbnN1bWVyLmdldFVwZGF0ZWRGaWxlcygpLCBudWxsICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hhbmdlTG9nQ29tbWFuZCBnZXRDaGFuZ2VMb2dDb21tYW5kKCkKICAgICB7CiAgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotCi0gICAgCi0KIH0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC91cGRhdGUvR2l0VXBkYXRlQ29tbWFuZENvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvZ2l0ZXhlL2NvbW1hbmQvdXBkYXRlL0dpdFVwZGF0ZUNvbW1hbmRDb25zdW1lci5qYXZhCmluZGV4IGMzYjBiNWMuLjQxOGU1ZjQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9naXRleGUvY29tbWFuZC91cGRhdGUvR2l0VXBkYXRlQ29tbWFuZENvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2dpdGV4ZS9jb21tYW5kL3VwZGF0ZS9HaXRVcGRhdGVDb21tYW5kQ29uc3VtZXIuamF2YQpAQCAtMSwxNyArMSw1IEBACiBwYWNrYWdlIG9yZy5hcGFjaGUubWF2ZW4uc2NtLnByb3ZpZGVyLmdpdC5naXRleGUuY29tbWFuZC51cGRhdGU7CiAKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZTsKLWltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU3RhdHVzOwotaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20udXRpbC5BYnN0cmFjdENvbnN1bWVyOwotaW1wb3J0IG9yZy5jb2RlaGF1cy5wbGV4dXMudXRpbC5TdHJpbmdVdGlsczsKLQogLyoKICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpAQCAtMzEsNiArMTksMTggQEAKICAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZTsKK2ltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU3RhdHVzOworaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLmxvZy5TY21Mb2dnZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20udXRpbC5BYnN0cmFjdENvbnN1bWVyOworaW1wb3J0IG9yZy5jb2RlaGF1cy5wbGV4dXMudXRpbC5TdHJpbmdVdGlsczsKKwogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpvbGFteUBhcGFjaGUub3JnIj5vbGFteTwvYT4KICAqIEB2ZXJzaW9uICRJZCQKQEAgLTM4LDcgKzM4LDcgQEAKIHB1YmxpYyBjbGFzcyBHaXRVcGRhdGVDb21tYW5kQ29uc3VtZXIKICAgICBleHRlbmRzIEFic3RyYWN0Q29uc3VtZXIKIHsKLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiB1cGRhdGluZ0ZvdW5kOwogCiAgICAgcHJpdmF0ZSBib29sZWFuIHN1bW1hcnlGb3VuZDsKQEAgLTUwLDYgKzUwLDcgQEAKICAgICAgICAgc3VwZXIoIGxvZ2dlciApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgY29uc3VtZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIGdldExvZ2dlcigpLmRlYnVnKCAiR2l0VXBkYXRlQ29tbWFuZENvbnN1bWVyIGNvbnN1bWVMaW5lIDogIiArIGxpbmUgKTsKQEAgLTc0LDcgKzc1LDcgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoIHVwZGF0aW5nRm91bmQgJiYgIXN1bW1hcnlGb3VuZCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIHRlc3QgZm9ybWF0IDogcG9tLnhtbFx1MjE5MFttIHwgICAgCisgICAgICAgICAgICAvLyB0ZXN0IGZvcm1hdCA6IHBvbS54bWxcdTIxOTBbbSB8CiAgICAgICAgICAgICBpbnQgaW5kZXggPSBsaW5lLmluZGV4T2YoICJcdTIxOTBbIiApOwogCiAgICAgICAgICAgICBpZiAoIGluZGV4ID49IDAgKQpAQCAtMTMwLDUgKzEzMSw1IEBACiAgICAgewogICAgICAgICBnZXRMb2dnZXIoKS5kZWJ1ZyggIiB1cGRhdGVkRmlsZXMgc2l6ZSAiICsgc2NtRmlsZXMuc2l6ZSgpICk7CiAgICAgICAgIHJldHVybiBuZXcgQXJyYXlMaXN0KCBzY21GaWxlcy52YWx1ZXMoKSApOwotICAgIH0gICAgCisgICAgfQogfQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9zaXRlL3NpdGUueG1sIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlL3NyYy9zaXRlL3NpdGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYmNhZDAKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXRleGUvc3JjL3NpdGUvc2l0ZS54bWwKQEAgLTAsMCArMSwzMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PgorCis8IS0tCisgIH4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICB+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICB+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgIH4gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICB+IHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgfiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgIH4gd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgfiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICB+ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICB+IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICB+IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgfiB1bmRlciB0aGUgTGljZW5zZS4KKyAgLS0+CisKKzxwcm9qZWN0IG5hbWU9Ik1hdmVuIFNDTSBHaXQgRXhlY3V0YWJsZSI+CisgIDxib2R5PgorICAgIDxtZW51IHJlZj0icGFyZW50IiAvPgorCisgICAgPG1lbnUgbmFtZT0iT3ZlcnZpZXciPgorICAgICAgPGl0ZW0gbmFtZT0iSW50cm9kdWN0aW9uIiBocmVmPSJpbmRleC5odG1sIi8+CisgICAgPC9tZW51PgorCisgICAgPG1lbnUgcmVmPSJyZXBvcnRzIiBpbmhlcml0PSJib3R0b20iIC8+CisgIDwvYm9keT4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdHRlc3QvcG9tLnhtbCBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdHRlc3QvcG9tLnhtbAppbmRleCA2NTAyMWQ3Li4zZjM2YzNiIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXR0ZXN0L3BvbS54bWwKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0dGVzdC9wb20ueG1sCkBAIC0xLDQgKzEsNiBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IS0tCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8IS0tCiAgIH4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQogICB+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogICB+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCkBAIC0xOCwyMCArMjAsMjMgQEAKICAgLS0+CiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKICAgPHBhcmVudD4KLSAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXJzLWdpdDwvYXJ0aWZhY3RJZD4KICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXJzLWdpdDwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgotICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLWdpdHRlc3Q8L2FydGlmYWN0SWQ+CisKICAgPG5hbWU+TWF2ZW4gU0NNIGdpdCBQcm92aWRlciBUQ0sgVGVzdHM8L25hbWU+Ci0gIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KKyAgPGRlc2NyaXB0aW9uPlRlc3RzIGxpYnJhcnkgZm9yIFNDTSBHaXQgUHJvdmlkZXIuPC9kZXNjcmlwdGlvbj4KKwogICA8ZGVwZW5kZW5jaWVzPgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tdGVzdDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KICAgICA8L2RlcGVuZGVuY3k+CiAgIDwvZGVwZW5kZW5jaWVzPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0dGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9jb21tYW5kL2JyYW5jaC9HaXRCcmFuY2hDb21tYW5kVGNrVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0dGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9jb21tYW5kL2JyYW5jaC9HaXRCcmFuY2hDb21tYW5kVGNrVGVzdC5qYXZhCmluZGV4IDExZTQ5NjAuLmY5Y2FlYzggMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdHRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvY29tbWFuZC9icmFuY2gvR2l0QnJhbmNoQ29tbWFuZFRja1Rlc3QuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXR0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2NvbW1hbmQvYnJhbmNoL0dpdEJyYW5jaENvbW1hbmRUY2tUZXN0LmphdmEKQEAgLTI0LDE2ICsyNCwxOSBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnN0cnViZXJnQHlhaG9vLmRlIj5NYXJrIFN0cnViZXJnPC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgR2l0QnJhbmNoQ29tbWFuZFRja1Rlc3QKICAgICBleHRlbmRzIEJyYW5jaENvbW1hbmRUY2tUZXN0CiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNjbVVybCgpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBHaXRTY21UZXN0VXRpbHMuZ2V0U2NtVXJsKCBnZXRSZXBvc2l0b3J5Um9vdCgpICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBpbml0UmVwbygpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXR0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2NvbW1hbmQvY2hlY2tpbi9HaXRDaGVja0luQ29tbWFuZFRja1Rlc3QuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdHRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvY29tbWFuZC9jaGVja2luL0dpdENoZWNrSW5Db21tYW5kVGNrVGVzdC5qYXZhCmluZGV4IGEyY2I2YzcuLjc1NTBlNTAgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdHRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvY29tbWFuZC9jaGVja2luL0dpdENoZWNrSW5Db21tYW5kVGNrVGVzdC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdHRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvY29tbWFuZC9jaGVja2luL0dpdENoZWNrSW5Db21tYW5kVGNrVGVzdC5qYXZhCkBAIC0yNCwxNiArMjQsMTkgQEAKIAogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpzdHJ1YmVyZ0B5YWhvby5kZSI+TWFyayBTdHJ1YmVyZzwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEdpdENoZWNrSW5Db21tYW5kVGNrVGVzdAogICAgIGV4dGVuZHMgQ2hlY2tJbkNvbW1hbmRUY2tUZXN0CiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNjbVVybCgpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBHaXRTY21UZXN0VXRpbHMuZ2V0U2NtVXJsKCBnZXRSZXBvc2l0b3J5Um9vdCgpICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBpbml0UmVwbygpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXR0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2NvbW1hbmQvY2hlY2tvdXQvR2l0Q2hlY2tPdXRDb21tYW5kVGNrVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0dGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9jb21tYW5kL2NoZWNrb3V0L0dpdENoZWNrT3V0Q29tbWFuZFRja1Rlc3QuamF2YQppbmRleCBjMzk4Yzg0Li4yNzQ5M2U3IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXR0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2NvbW1hbmQvY2hlY2tvdXQvR2l0Q2hlY2tPdXRDb21tYW5kVGNrVGVzdC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdHRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvY29tbWFuZC9jaGVja291dC9HaXRDaGVja091dENvbW1hbmRUY2tUZXN0LmphdmEKQEAgLTI0LDE2ICsyNCwxOSBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnN0cnViZXJnQHlhaG9vLmRlIj5NYXJrIFN0cnViZXJnPC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgR2l0Q2hlY2tPdXRDb21tYW5kVGNrVGVzdAogICAgIGV4dGVuZHMgQ2hlY2tPdXRDb21tYW5kVGNrVGVzdAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21VcmwoKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gR2l0U2NtVGVzdFV0aWxzLmdldFNjbVVybCggZ2V0UmVwb3NpdG9yeVJvb3QoKSApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgaW5pdFJlcG8oKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0dGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9jb21tYW5kL2RpZmYvR2l0RGlmZkNvbW1hbmRUY2tUZXN0LmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXR0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2NvbW1hbmQvZGlmZi9HaXREaWZmQ29tbWFuZFRja1Rlc3QuamF2YQppbmRleCAyOTU2OGU2Li43ZmJhZDYyIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXR0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2NvbW1hbmQvZGlmZi9HaXREaWZmQ29tbWFuZFRja1Rlc3QuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXR0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2NvbW1hbmQvZGlmZi9HaXREaWZmQ29tbWFuZFRja1Rlc3QuamF2YQpAQCAtMjQsMTYgKzI0LDE5IEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86c3RydWJlcmdAeWFob28uZGUiPk1hcmsgU3RydWJlcmc8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBHaXREaWZmQ29tbWFuZFRja1Rlc3QKICAgICBleHRlbmRzIERpZmZDb21tYW5kVGNrVGVzdAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21VcmwoKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gR2l0U2NtVGVzdFV0aWxzLmdldFNjbVVybCggZ2V0UmVwb3NpdG9yeVJvb3QoKSApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgaW5pdFJlcG8oKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0dGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9jb21tYW5kL2xpc3QvR2l0TGlzdENvbW1hbmRUY2tUZXN0LmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXR0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2NvbW1hbmQvbGlzdC9HaXRMaXN0Q29tbWFuZFRja1Rlc3QuamF2YQppbmRleCBlNmQwOTE2Li4zZTQ2Y2NkIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXR0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2NvbW1hbmQvbGlzdC9HaXRMaXN0Q29tbWFuZFRja1Rlc3QuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXR0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2NvbW1hbmQvbGlzdC9HaXRMaXN0Q29tbWFuZFRja1Rlc3QuamF2YQpAQCAtMjQsMTYgKzI0LDE5IEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86c3RydWJlcmdAeWFob28uZGUiPk1hcmsgU3RydWJlcmc8L2E+CisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBHaXRMaXN0Q29tbWFuZFRja1Rlc3QKICAgICBleHRlbmRzIExpc3RDb21tYW5kVGNrVGVzdAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21VcmwoKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gR2l0U2NtVGVzdFV0aWxzLmdldFNjbVVybCggZ2V0UmVwb3NpdG9yeVJvb3QoKSApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgaW5pdFJlcG8oKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0dGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9jb21tYW5kL3N0YXR1cy9HaXRTdGF0dXNDb21tYW5kVGNrVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0dGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9jb21tYW5kL3N0YXR1cy9HaXRTdGF0dXNDb21tYW5kVGNrVGVzdC5qYXZhCmluZGV4IDI1NjA4ODUuLmQ2MjM4ZGQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdHRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvY29tbWFuZC9zdGF0dXMvR2l0U3RhdHVzQ29tbWFuZFRja1Rlc3QuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXR0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2NvbW1hbmQvc3RhdHVzL0dpdFN0YXR1c0NvbW1hbmRUY2tUZXN0LmphdmEKQEAgLTI0LDE3ICsyNCwxOSBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnN0cnViZXJnQHlhaG9vLmRlIj5NYXJrIFN0cnViZXJnPC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgR2l0U3RhdHVzQ29tbWFuZFRja1Rlc3QKICAgICBleHRlbmRzIFN0YXR1c0NvbW1hbmRUY2tUZXN0CiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNjbVVybCgpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBHaXRTY21UZXN0VXRpbHMuZ2V0U2NtVXJsKCBnZXRSZXBvc2l0b3J5Um9vdCgpICk7CiAgICAgfQogCi0KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGluaXRSZXBvKCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdHRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvY29tbWFuZC90YWcvR2l0VGFnQ29tbWFuZFRja1Rlc3QuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdHRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvY29tbWFuZC90YWcvR2l0VGFnQ29tbWFuZFRja1Rlc3QuamF2YQppbmRleCAxYmJmZDgyLi42MzY3MTQ2IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXR0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2NvbW1hbmQvdGFnL0dpdFRhZ0NvbW1hbmRUY2tUZXN0LmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0dGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9jb21tYW5kL3RhZy9HaXRUYWdDb21tYW5kVGNrVGVzdC5qYXZhCkBAIC0yNCwxNiArMjQsMTkgQEAKIAogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpzdHJ1YmVyZ0B5YWhvby5kZSI+TWFyayBTdHJ1YmVyZzwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGNsYXNzIEdpdFRhZ0NvbW1hbmRUY2tUZXN0CiAgICAgZXh0ZW5kcyBUYWdDb21tYW5kVGNrVGVzdAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21VcmwoKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gR2l0U2NtVGVzdFV0aWxzLmdldFNjbVVybCggZ2V0UmVwb3NpdG9yeVJvb3QoKSApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgaW5pdFJlcG8oKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0dGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9jb21tYW5kL3VwZGF0ZS9HaXRVcGRhdGVDb21tYW5kVGNrVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0dGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL2dpdC9jb21tYW5kL3VwZGF0ZS9HaXRVcGRhdGVDb21tYW5kVGNrVGVzdC5qYXZhCmluZGV4IDBmOTMwMmYuLjIyZjlmZDEgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvbWF2ZW4tc2NtLXByb3ZpZGVyLWdpdHRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9naXQvY29tbWFuZC91cGRhdGUvR2l0VXBkYXRlQ29tbWFuZFRja1Rlc3QuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXR0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvZ2l0L2NvbW1hbmQvdXBkYXRlL0dpdFVwZGF0ZUNvbW1hbmRUY2tUZXN0LmphdmEKQEAgLTI0LDE2ICsyNCwxOSBAQAogCiAvKioKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnN0cnViZXJnQHlhaG9vLmRlIj5NYXJrIFN0cnViZXJnPC9hPgorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgR2l0VXBkYXRlQ29tbWFuZFRja1Rlc3QKICAgICBleHRlbmRzIFVwZGF0ZUNvbW1hbmRUY2tUZXN0CiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNjbVVybCgpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBHaXRTY21UZXN0VXRpbHMuZ2V0U2NtVXJsKCBnZXRSZXBvc2l0b3J5Um9vdCgpICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBpbml0UmVwbygpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L21hdmVuLXNjbS1wcm92aWRlci1naXR0ZXN0L3NyYy9zaXRlL3NpdGUueG1sIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0dGVzdC9zcmMvc2l0ZS9zaXRlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmZjY2RjCi0tLSAvZGV2L251bGwKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9tYXZlbi1zY20tcHJvdmlkZXItZ2l0dGVzdC9zcmMvc2l0ZS9zaXRlLnhtbApAQCAtMCwwICsxLDMyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+CisKKzwhLS0KKyAgfiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgIH4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgIH4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgfiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIH4gdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICB+ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgfiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICB+IHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgIH4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIH4gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIH4gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICB+IHVuZGVyIHRoZSBMaWNlbnNlLgorICAtLT4KKworPHByb2plY3QgbmFtZT0iTWF2ZW4gU0NNIEdpdCBUZXN0Ij4KKyAgPGJvZHk+CisgICAgPG1lbnUgcmVmPSJwYXJlbnQiIC8+CisKKyAgICA8bWVudSBuYW1lPSJPdmVydmlldyI+CisgICAgICA8aXRlbSBuYW1lPSJJbnRyb2R1Y3Rpb24iIGhyZWY9ImluZGV4Lmh0bWwiLz4KKyAgICA8L21lbnU+CisKKyAgICA8bWVudSByZWY9InJlcG9ydHMiIGluaGVyaXQ9ImJvdHRvbSIgLz4KKyAgPC9ib2R5PgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9wb20ueG1sIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9wb20ueG1sCmluZGV4IDU4MDA2NDYuLjExYjg4YmYgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvcG9tLnhtbAorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtZ2l0L3BvbS54bWwKQEAgLTEsNCArMSw2IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhLS0KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzwhLS0KICAgfiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiAgIH4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCiAgIH4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KQEAgLTE4LDE2ICsyMCwyMCBAQAogICAtLT4KIAogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+CisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwogICA8cGFyZW50PgogICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlcnM8L2FydGlmYWN0SWQ+CiAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CiAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgogICA8L3BhcmVudD4KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlcnMtZ2l0PC9hcnRpZmFjdElkPgogICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgotICA8bmFtZT5NYXZlbiBTQ00gZ2l0IFByb3ZpZGVyIC0gUGFyZW50PC9uYW1lPgotICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CisKKyAgPG5hbWU+TWF2ZW4gU0NNIEdpdCBQcm92aWRlciAtIFBhcmVudDwvbmFtZT4KKyAgPGRlc2NyaXB0aW9uPlNDTSBQcm92aWRlciBpbXBsZW1lbnRhdGlvbiBmb3IgR2l0IChodHRwOi8vZ2l0Lm9yLmN6LykuPC9kZXNjcmlwdGlvbj4KKwogICA8bW9kdWxlcz4KICAgICA8bW9kdWxlPm1hdmVuLXNjbS1wcm92aWRlci1naXQtY29tbW9uczwvbW9kdWxlPgogICAgIDxtb2R1bGU+bWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZTwvbW9kdWxlPgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLWdpdC9zcmMvc2l0ZS9zaXRlLnhtbCBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvc3JjL3NpdGUvc2l0ZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkY2QzYQotLS0gL2Rldi9udWxsCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1naXQvc3JjL3NpdGUvc2l0ZS54bWwKQEAgLTAsMCArMSwzNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PgorCis8IS0tCisgIH4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICB+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICB+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgIH4gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICB+IHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgfiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgIH4gd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgfiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICB+ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICB+IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICB+IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgfiB1bmRlciB0aGUgTGljZW5zZS4KKyAgLS0+CisKKzxwcm9qZWN0IG5hbWU9Ik1hdmVuIFNDTSBHaXQgUHJvdmlkZXIiPgorICA8Ym9keT4KKyAgICA8bWVudSByZWY9InBhcmVudCIgLz4KKworICAgIDxtZW51IG5hbWU9Ik92ZXJ2aWV3Ij4KKyAgICAgIDxpdGVtIG5hbWU9IkludHJvZHVjdGlvbiIgaHJlZj0iaW5kZXguaHRtbCIvPgorICAgIDwvbWVudT4KKworICAgIDxtZW51IHJlZj0ibW9kdWxlcyIgLz4KKworICAgIDxtZW51IHJlZj0icmVwb3J0cyIgaW5oZXJpdD0iYm90dG9tIiAvPgorICA8L2JvZHk+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3RhbmRhcmQvcG9tLnhtbCBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdGFuZGFyZC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYWYwNDYKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3RhbmRhcmQvcG9tLnhtbApAQCAtMCwwICsxLDk4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8IS0tCisgIH4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICB+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICB+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgIH4gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICB+IHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgfiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgIH4gd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIH4KKyAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgIH4gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgfiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgfiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgfiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgIH4gdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorCis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgIDxwYXJlbnQ+CisgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyczwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CisgIDwvcGFyZW50PgorCisgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlcnMtc3RhbmRhcmQ8L2FydGlmYWN0SWQ+CisgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CisKKyAgPG5hbWU+TWF2ZW4gU0NNIFN0YW5kYXJkIFByb3ZpZGVyczwvbmFtZT4KKworICA8ZGVwZW5kZW5jaWVzPgorICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItYWNjdXJldjwvYXJ0aWZhY3RJZD4KKyAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+ICAgICAKKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhcjwvYXJ0aWZhY3RJZD4KKyAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+CisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1jbGVhcmNhc2U8L2FydGlmYWN0SWQ+CisgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlPC9hcnRpZmFjdElkPgorICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2phdmE8L2FydGlmYWN0SWQ+CisgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlPC9hcnRpZmFjdElkPgorICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLWhnPC9hcnRpZmFjdElkPgorICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlPC9hcnRpZmFjdElkPgorICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtPC9hcnRpZmFjdElkPgorICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZTwvYXJ0aWZhY3RJZD4KKyAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+CisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1zeW5lcmd5PC9hcnRpZmFjdElkPgorICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLXZzczwvYXJ0aWZhY3RJZD4KKyAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+CisgIDwvZGVwZW5kZW5jaWVzPgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnMvcG9tLnhtbCBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bi1jb21tb25zL3BvbS54bWwKaW5kZXggNjgyYTI3MS4uNTgzYTcyMCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnMvcG9tLnhtbAorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm4tY29tbW9ucy9wb20ueG1sCkBAIC0xLDQgKzEsNiBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IS0tCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8IS0tCiAgIH4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQogICB+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogICB+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCkBAIC0xOCwxNSArMjAsMTkgQEAKICAgLS0+CiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKICAgPHBhcmVudD4KLSAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXJzLXN2bjwvYXJ0aWZhY3RJZD4KICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXJzLXN2bjwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgotICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLXN2bi1jb21tb25zPC9hcnRpZmFjdElkPgorCiAgIDxuYW1lPk1hdmVuIFNDTSBTdWJ2ZXJzaW9uIFByb3ZpZGVyIC0gQ29tbW9uIGxpYnJhcnk8L25hbWU+Ci0gIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KKyAgPGRlc2NyaXB0aW9uPkNvbW1vbiBsaWJyYXJ5IGZvciBTQ00gU1ZOIFByb3ZpZGVyLjwvZGVzY3JpcHRpb24+CisKICAgPGJ1aWxkPgogICAgIDxwbHVnaW5zPgogICAgICAgPHBsdWdpbj4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bi1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL0Fic3RyYWN0U3ZuU2NtUHJvdmlkZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bi1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL0Fic3RyYWN0U3ZuU2NtUHJvdmlkZXIuamF2YQppbmRleCBiNDUxMThjLi42OTU4YmEwIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm4tY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9BYnN0cmFjdFN2blNjbVByb3ZpZGVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vQWJzdHJhY3RTdm5TY21Qcm92aWRlci5qYXZhCkBAIC02NCwyMCArNjQsMjIgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFNjbVVybFBhcnNlclJlc3VsdAogICAgIHsKLSAgICAgICAgTGlzdCBtZXNzYWdlcyA9IG5ldyBBcnJheUxpc3QoKTsKKyAgICAgICAgcHJpdmF0ZSBMaXN0IG1lc3NhZ2VzID0gbmV3IEFycmF5TGlzdCgpOwogCi0gICAgICAgIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5OworICAgICAgICBwcml2YXRlIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5OwogICAgIH0KIAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBTY21Qcm92aWRlciBJbXBsZW1lbnRhdGlvbgogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21TcGVjaWZpY0ZpbGVuYW1lKCkKICAgICB7CiAgICAgICAgIHJldHVybiAiLnN2biI7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU2NtUHJvdmlkZXJSZXBvc2l0b3J5IG1ha2VQcm92aWRlclNjbVJlcG9zaXRvcnkoIFN0cmluZyBzY21TcGVjaWZpY1VybCwgY2hhciBkZWxpbWl0ZXIgKQogICAgICAgICB0aHJvd3MgU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbgogICAgIHsKQEAgLTkxLDkgKzkzLDcgQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZXBvc2l0b3J5OwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuQWJzdHJhY3RTY21Qcm92aWRlciNtYWtlUHJvdmlkZXJTY21SZXBvc2l0b3J5KGphdmEuaW8uRmlsZSkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTY21Qcm92aWRlclJlcG9zaXRvcnkgbWFrZVByb3ZpZGVyU2NtUmVwb3NpdG9yeSggRmlsZSBwYXRoICkKICAgICAgICAgdGhyb3dzIFNjbVJlcG9zaXRvcnlFeGNlcHRpb24sIFVua25vd25SZXBvc2l0b3J5U3RydWN0dXJlCiAgICAgewpAQCAtMTI2LDYgKzEyNiw3IEBACiAgICAgcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRSZXBvc2l0b3J5VVJMKCBGaWxlIHBhdGggKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uOwogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgTGlzdCB2YWxpZGF0ZVNjbVVybCggU3RyaW5nIHNjbVNwZWNpZmljVXJsLCBjaGFyIGRlbGltaXRlciApCiAgICAgewogICAgICAgICBMaXN0IG1lc3NhZ2VzID0gbmV3IEFycmF5TGlzdCgpOwpAQCAtMTQwLDYgKzE0MSw3IEBACiAgICAgICAgIHJldHVybiBtZXNzYWdlczsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2NtVHlwZSgpCiAgICAgewogICAgICAgICByZXR1cm4gInN2biI7CkBAIC0yNDEsOSArMjQzLDcgQEAKIAogICAgIHByb3RlY3RlZCBhYnN0cmFjdCBTdm5Db21tYW5kIGdldEFkZENvbW1hbmQoKTsKIAotICAgIC8qKgotICAgICAqIEBzZWUgQWJzdHJhY3RTY21Qcm92aWRlciNhZGQoU2NtUHJvdmlkZXJSZXBvc2l0b3J5LFNjbUZpbGVTZXQsQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQWRkU2NtUmVzdWx0IGFkZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC0yNTIsOSArMjUyLDcgQEAKIAogICAgIHByb3RlY3RlZCBhYnN0cmFjdCBTdm5Db21tYW5kIGdldEJyYW5jaENvbW1hbmQoKTsKIAotICAgIC8qKgotICAgICAqIEBzZWUgQWJzdHJhY3RTY21Qcm92aWRlciNicmFuY2goU2NtUHJvdmlkZXJSZXBvc2l0b3J5LFNjbUZpbGVTZXQsQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQnJhbmNoU2NtUmVzdWx0IGJyYW5jaCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTI2NCw5ICsyNjIsNyBAQAogCiAgICAgcHJvdGVjdGVkIGFic3RyYWN0IFN2bkNvbW1hbmQgZ2V0Q2hhbmdlTG9nQ29tbWFuZCgpOwogCi0gICAgLyoqCi0gICAgICogQHNlZSBBYnN0cmFjdFNjbVByb3ZpZGVyI2NoYW5nZWxvZyhTY21Qcm92aWRlclJlcG9zaXRvcnksU2NtRmlsZVNldCxDb21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGFuZ2VMb2dTY21SZXN1bHQgY2hhbmdlbG9nKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtMjc2LDkgKzI3Miw3IEBACiAKICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgU3ZuQ29tbWFuZCBnZXRDaGVja0luQ29tbWFuZCgpOwogCi0gICAgLyoqCi0gICAgICogQHNlZSBBYnN0cmFjdFNjbVByb3ZpZGVyI2NoZWNraW4oU2NtUHJvdmlkZXJSZXBvc2l0b3J5LFNjbUZpbGVTZXQsQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hlY2tJblNjbVJlc3VsdCBjaGVja2luKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC0yODgsOSArMjgyLDcgQEAKIAogICAgIHByb3RlY3RlZCBhYnN0cmFjdCBTdm5Db21tYW5kIGdldENoZWNrT3V0Q29tbWFuZCgpOwogCi0gICAgLyoqCi0gICAgICogQHNlZSBBYnN0cmFjdFNjbVByb3ZpZGVyI2NoZWNrb3V0KFNjbVByb3ZpZGVyUmVwb3NpdG9yeSxTY21GaWxlU2V0LENvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoZWNrT3V0U2NtUmVzdWx0IGNoZWNrb3V0KCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTMwMCw5ICsyOTIsNyBAQAogCiAgICAgcHJvdGVjdGVkIGFic3RyYWN0IFN2bkNvbW1hbmQgZ2V0RGlmZkNvbW1hbmQoKTsKIAotICAgIC8qKgotICAgICAqIEBzZWUgQWJzdHJhY3RTY21Qcm92aWRlciNkaWZmKFNjbVByb3ZpZGVyUmVwb3NpdG9yeSxTY21GaWxlU2V0LENvbW1hbmRQYXJhbWV0ZXJzKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIERpZmZTY21SZXN1bHQgZGlmZiggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC0zMTEsNiArMzAxLDcgQEAKIAogICAgIHByb3RlY3RlZCBhYnN0cmFjdCBTdm5Db21tYW5kIGdldEV4cG9ydENvbW1hbmQoKTsKIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIEV4cG9ydFNjbVJlc3VsdCBleHBvcnQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC0zMjAsOSArMzExLDcgQEAKIAogICAgIHByb3RlY3RlZCBhYnN0cmFjdCBTdm5Db21tYW5kIGdldFJlbW92ZUNvbW1hbmQoKTsKIAotICAgIC8qKgotICAgICAqIEBzZWUgQWJzdHJhY3RTY21Qcm92aWRlciNyZW1vdmUoU2NtUHJvdmlkZXJSZXBvc2l0b3J5LFNjbUZpbGVTZXQsQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgUmVtb3ZlU2NtUmVzdWx0IHJlbW92ZSggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC0zMzEsOSArMzIwLDcgQEAKIAogICAgIHByb3RlY3RlZCBhYnN0cmFjdCBTdm5Db21tYW5kIGdldFN0YXR1c0NvbW1hbmQoKTsKIAotICAgIC8qKgotICAgICAqIEBzZWUgQWJzdHJhY3RTY21Qcm92aWRlciNzdGF0dXMoU2NtUHJvdmlkZXJSZXBvc2l0b3J5LFNjbUZpbGVTZXQsQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RhdHVzU2NtUmVzdWx0IHN0YXR1cyggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC0zNDIsOSArMzI5LDcgQEAKIAogICAgIHByb3RlY3RlZCBhYnN0cmFjdCBTdm5Db21tYW5kIGdldFRhZ0NvbW1hbmQoKTsKIAotICAgIC8qKgotICAgICAqIEBzZWUgQWJzdHJhY3RTY21Qcm92aWRlciN0YWcoU2NtUHJvdmlkZXJSZXBvc2l0b3J5LFNjbUZpbGVTZXQsQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgVGFnU2NtUmVzdWx0IHRhZyggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC0zNTMsOSArMzM4LDcgQEAKIAogICAgIHByb3RlY3RlZCBhYnN0cmFjdCBTdm5Db21tYW5kIGdldFVwZGF0ZUNvbW1hbmQoKTsKIAotICAgIC8qKgotICAgICAqIEBzZWUgQWJzdHJhY3RTY21Qcm92aWRlciN1cGRhdGUoU2NtUHJvdmlkZXJSZXBvc2l0b3J5LFNjbUZpbGVTZXQsQ29tbWFuZFBhcmFtZXRlcnMpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgQ29tbWFuZFBhcmFtZXRlcnMgcGFyYW1ldGVycyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CkBAIC0zNzMsOSArMzU2LDcgQEAKIAogICAgIHByb3RlY3RlZCBhYnN0cmFjdCBTdm5Db21tYW5kIGdldExpc3RDb21tYW5kKCk7CiAKLSAgICAvKioKLSAgICAgKiBAc2VlIEFic3RyYWN0U2NtUHJvdmlkZXIjbGlzdChTY21Qcm92aWRlclJlcG9zaXRvcnksU2NtRmlsZVNldCxDb21tYW5kUGFyYW1ldGVycykKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBMaXN0U2NtUmVzdWx0IGxpc3QoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vU3ZuQ2hhbmdlU2V0LmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm4tY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9Tdm5DaGFuZ2VTZXQuamF2YQppbmRleCBiMzdjYzNjLi5jMzY3OWU5IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm4tY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9Tdm5DaGFuZ2VTZXQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm4tY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9Tdm5DaGFuZ2VTZXQuamF2YQpAQCAtNDEsNyArNDEsOCBAQAogICAgICAgICBzdXBlcigpOwogICAgIH0KIAotICAgIHB1YmxpYyBTdm5DaGFuZ2VTZXQoIFN0cmluZyBzdHJEYXRlLCBTdHJpbmcgdXNlckRhdGVQYXR0ZXJuLCBTdHJpbmcgY29tbWVudCwgU3RyaW5nIGF1dGhvciwgTGlzdC8qPENoYW5nZUZpbGU+Ki8gZmlsZXMgKQorICAgIHB1YmxpYyBTdm5DaGFuZ2VTZXQoIFN0cmluZyBzdHJEYXRlLCBTdHJpbmcgdXNlckRhdGVQYXR0ZXJuLCBTdHJpbmcgY29tbWVudCwgU3RyaW5nIGF1dGhvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0Lyo8Q2hhbmdlRmlsZT4qL2ZpbGVzICkKICAgICB7CiAgICAgICAgIHN1cGVyKCBzdHJEYXRlLCB1c2VyRGF0ZVBhdHRlcm4sIGNvbW1lbnQsIGF1dGhvciwgZmlsZXMgKTsKICAgICB9CkBAIC01MSw2ICs1Miw3IEBACiAgICAgICAgIHN1cGVyKCBkYXRlLCBjb21tZW50LCBhdXRob3IsIGZpbGVzICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgYm9vbGVhbiBjb250YWluc0ZpbGVuYW1lKCBTdHJpbmcgZmlsZW5hbWUsIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5ICkKICAgICB7CiAgICAgICAgIFN2blNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvID0gKFN2blNjbVByb3ZpZGVyUmVwb3NpdG9yeSkgcmVwb3NpdG9yeTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bi1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL1N2blRhZ0JyYW5jaFV0aWxzLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm4tY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9Tdm5UYWdCcmFuY2hVdGlscy5qYXZhCmluZGV4IDY2YjBiN2QuLmRjNmVhNTIgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bi1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL1N2blRhZ0JyYW5jaFV0aWxzLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vU3ZuVGFnQnJhbmNoVXRpbHMuamF2YQpAQCAtMjUsMTggKzI1LDIxIEBACiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ucHJvdmlkZXIuc3ZuLnJlcG9zaXRvcnkuU3ZuU2NtUHJvdmlkZXJSZXBvc2l0b3J5OwogaW1wb3J0IG9yZy5jb2RlaGF1cy5wbGV4dXMudXRpbC5TdHJpbmdVdGlsczsKIAorLyoqCisgKiBAdmVyc2lvbiAkSWQkCisgKi8KIHB1YmxpYyBjbGFzcyBTdm5UYWdCcmFuY2hVdGlscwogewogCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmdbXSBSRVZJU0lPTl9TUEVDSUZJRVJTID0gbmV3IFN0cmluZ1tdeyJIRUFEIiwgIkJBU0UiLCAiQ09NTUlUVEVEIiwgIlBSRVYifTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFJFVklTSU9OX1NQRUNJRklFUlMgPSBuZXcgU3RyaW5nW117IkhFQUQiLCAiQkFTRSIsICJDT01NSVRURUQiLCAiUFJFViJ9OwogCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgU1ZOX1RSVU5LID0gInRydW5rIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVk5fVFJVTksgPSAidHJ1bmsiOwogCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgU1ZOX0JSQU5DSEVTID0gImJyYW5jaGVzIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVk5fQlJBTkNIRVMgPSAiYnJhbmNoZXMiOwogCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgU1ZOX1RBR1MgPSAidGFncyI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1ZOX1RBR1MgPSAidGFncyI7CiAKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZ1tdIFNWTl9CQVNFX0RJUlMgPSBuZXcgU3RyaW5nW117U1ZOX1RSVU5LLCBTVk5fQlJBTkNIRVMsIFNWTl9UQUdTfTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFNWTl9CQVNFX0RJUlMgPSBuZXcgU3RyaW5nW117U1ZOX1RSVU5LLCBTVk5fQlJBTkNIRVMsIFNWTl9UQUdTfTsKIAogICAgIC8qKgogICAgICAqIFNpbXBsZSBoZWxwZXIgZnVuY3Rpb24gdG8gY29uY2F0ZW5hdGUgdHdvIHBhdGhzIHRvZ2V0aGVyIHdpdGggYSAiLyIuCkBAIC0yMDcsMTcgKzIxMCwxOSBAQAogICAgICAgICBpZiAoIHJlcG9zaXRvcnlVcmwuaW5kZXhPZiggIj8iICkgPj0gMCApCiAgICAgICAgIHsKICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nID0gcmVwb3NpdG9yeVVybC5zdWJzdHJpbmcoIHJlcG9zaXRvcnlVcmwuaW5kZXhPZiggIj8iICkgKTsKKyAgICAgICAgICAgIC8vIGlmIHJlcG9zaXRvcnlVcmwgY29udGFpbnMgYSBxdWVyeSBzdHJpbmcsIHJlbW92ZSBpdCBmcm9tIHJlcG9zaXRvcnlVcmxSb290OyB3aWxsIGJlIHJlLWFwcGVuZGVkIGxhdGVyCisgICAgICAgICAgICBwcm9qZWN0Um9vdCA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoIHByb2plY3RSb290LCBxdWVyeVN0cmluZywgIiIgKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICggYnJhbmNoVGFnTmFtZS5pbmRleE9mKCAiOi8vIiApID49IDAgKQogICAgICAgICB7Ci0gICAgICAgICAgICAvLyBicmFuY2gvdGFnIGlzIGFscmVhZHkgYW4gYWJzb2x1dGUgdXJsIHNvIGp1c3QgcmV0dXJuIGl0LiAKKyAgICAgICAgICAgIC8vIGJyYW5jaC90YWcgaXMgYWxyZWFkeSBhbiBhYnNvbHV0ZSB1cmwgc28ganVzdCByZXR1cm4gaXQuCiAgICAgICAgICAgICByZXR1cm4gYnJhbmNoVGFnTmFtZTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFVzZXIgaGFzIGEgdGFnQmFzZSBzcGVjaWZpZWQgc28ganVzdCByZXR1cm4gdGhlIG5hbWUgYXBwZW5kZWQgdG8gdGhlIHRhZ0Jhc2UKLSAgICAgICAgaWYgKCBTdHJpbmdVdGlscy5pc05vdEVtcHR5KCB0YWdCYXNlICkgJiYgIXRhZ0Jhc2UuZXF1YWxzKCByZXNvbHZlVGFnQmFzZSggcmVwb3NpdG9yeVVybCApICkgJiYKLSAgICAgICAgICAgICF0YWdCYXNlLmVxdWFscyggcmVzb2x2ZUJyYW5jaEJhc2UoIHJlcG9zaXRvcnlVcmwgKSApICkKKyAgICAgICAgaWYgKCBTdHJpbmdVdGlscy5pc05vdEVtcHR5KCB0YWdCYXNlICkgJiYgIXRhZ0Jhc2UuZXF1YWxzKCByZXNvbHZlVGFnQmFzZSggcmVwb3NpdG9yeVVybCApICkKKyAgICAgICAgICAgICYmICF0YWdCYXNlLmVxdWFscyggcmVzb2x2ZUJyYW5jaEJhc2UoIHJlcG9zaXRvcnlVcmwgKSApICkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGFwcGVuZFBhdGgoIHRhZ0Jhc2UsIGJyYW5jaFRhZ05hbWUgKTsKICAgICAgICAgfQpAQCAtMjM1LDcgKzI0MCw3IEBACiAgICAgICAgIHJldHVybiBhZGRTdWZmaXgoIGFwcGVuZFBhdGgoIGFwcGVuZFBhdGgoIHByb2plY3RSb290LCBzdWJkaXIgKSwgYnJhbmNoVGFnTmFtZSApLCBxdWVyeVN0cmluZyApOwogICAgIH0KIAotICAgIC8qIEhlbHBlciBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIGNoZWNraW5nIGZvciB7QGxpbmsgI2lzUmV2aXNpb25TcGVjaWZpZXJ9IAorICAgIC8qIEhlbHBlciBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIGNoZWNraW5nIGZvciB7QGxpbmsgI2lzUmV2aXNpb25TcGVjaWZpZXJ9CiAgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBjaGVja1JldmlzaW9uQXJnKCBTdHJpbmcgYXJnICkKICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm4tY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9jb21tYW5kL2RpZmYvU3ZuRGlmZkNvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm4tY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9jb21tYW5kL2RpZmYvU3ZuRGlmZkNvbnN1bWVyLmphdmEKaW5kZXggNTI3NzMzOS4uZjkwODQ4MCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vY29tbWFuZC9kaWZmL1N2bkRpZmZDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bi1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL2NvbW1hbmQvZGlmZi9Tdm5EaWZmQ29uc3VtZXIuamF2YQpAQCAtNDQsMjMgKzQ0LDIzIEBACiAgICAgLy8gKysrIHBsdWdpbi5qZWxseSAgICAgICAgKHdvcmtpbmcgY29weSkKICAgICAvLwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIElOREVYX1RPS0VOID0gIkluZGV4OiAiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTkRFWF9UT0tFTiA9ICJJbmRleDogIjsKIAotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBGSUxFX1NFUEFSQVRPUl9UT0tFTiA9ICI9PT0iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFX1NFUEFSQVRPUl9UT0tFTiA9ICI9PT0iOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFNUQVJUX1JFVklTSU9OX1RPS0VOID0gIi0tLSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNUQVJUX1JFVklTSU9OX1RPS0VOID0gIi0tLSI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgRU5EX1JFVklTSU9OX1RPS0VOID0gIisrKyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVORF9SRVZJU0lPTl9UT0tFTiA9ICIrKysiOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEFEREVEX0xJTkVfVE9LRU4gPSAiKyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFEREVEX0xJTkVfVE9LRU4gPSAiKyI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVNT1ZFRF9MSU5FX1RPS0VOID0gIi0iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRU1PVkVEX0xJTkVfVE9LRU4gPSAiLSI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgVU5DSEFOR0VEX0xJTkVfVE9LRU4gPSAiICI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVOQ0hBTkdFRF9MSU5FX1RPS0VOID0gIiAiOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIENIQU5HRV9TRVBBUkFUT1JfVE9LRU4gPSAiQEAiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDSEFOR0VfU0VQQVJBVE9SX1RPS0VOID0gIkBAIjsKIAotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBOT19ORVdMSU5FX1RPS0VOID0gIlxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT19ORVdMSU5FX1RPS0VOID0gIlxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUiOwogCiAgICAgcHJpdmF0ZSBTY21Mb2dnZXIgbG9nZ2VyOwogCkBAIC04Nyw2ICs4Nyw3IEBACiAgICAgLy8gU3RyZWFtQ29uc3VtZXIgSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgbGluZSApCiAgICAgewogICAgICAgICBpZiAoIGxpbmUuc3RhcnRzV2l0aCggSU5ERVhfVE9LRU4gKSApCkBAIC0xMjcsOSArMTI4LDkgQEAKICAgICAgICAgICAgIC8vIHNraXAsIHRob3VnaCBjb3VsZCBwYXJzZSB0byB2ZXJpZnkgZmlsZW5hbWUsIGVuZCByZXZpc2lvbgogICAgICAgICAgICAgcGF0Y2guYXBwZW5kKCBsaW5lICkuYXBwZW5kKCAiXG4iICk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIGxpbmUuc3RhcnRzV2l0aCggQURERURfTElORV9UT0tFTiApIHx8IGxpbmUuc3RhcnRzV2l0aCggUkVNT1ZFRF9MSU5FX1RPS0VOICkgfHwKLSAgICAgICAgICAgIGxpbmUuc3RhcnRzV2l0aCggVU5DSEFOR0VEX0xJTkVfVE9LRU4gKSB8fCBsaW5lLnN0YXJ0c1dpdGgoIENIQU5HRV9TRVBBUkFUT1JfVE9LRU4gKSB8fAotICAgICAgICAgICAgbGluZS5lcXVhbHMoIE5PX05FV0xJTkVfVE9LRU4gKSApCisgICAgICAgIGVsc2UgaWYgKCBsaW5lLnN0YXJ0c1dpdGgoIEFEREVEX0xJTkVfVE9LRU4gKSB8fCBsaW5lLnN0YXJ0c1dpdGgoIFJFTU9WRURfTElORV9UT0tFTiApCisgICAgICAgICAgICB8fCBsaW5lLnN0YXJ0c1dpdGgoIFVOQ0hBTkdFRF9MSU5FX1RPS0VOICkgfHwgbGluZS5zdGFydHNXaXRoKCBDSEFOR0VfU0VQQVJBVE9SX1RPS0VOICkKKyAgICAgICAgICAgIHx8IGxpbmUuZXF1YWxzKCBOT19ORVdMSU5FX1RPS0VOICkgKQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBhZGQgdG8gYnVmZmVyCiAgICAgICAgICAgICBjdXJyZW50RGlmZmVyZW5jZS5hcHBlbmQoIGxpbmUgKS5hcHBlbmQoICJcbiIgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bi1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL2NvbW1hbmQvaW5mby9Tdm5JbmZvSXRlbS5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vY29tbWFuZC9pbmZvL1N2bkluZm9JdGVtLmphdmEKaW5kZXggZDBkYmM3ZC4uMzJkMjVkMiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vY29tbWFuZC9pbmZvL1N2bkluZm9JdGVtLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vY29tbWFuZC9pbmZvL1N2bkluZm9JdGVtLmphdmEKQEAgLTIxLDggKzIxLDcgQEAKIAogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzprZW5uZXlAYXBhY2hlLm9yZyI+S2VubmV5IFdlc3RlcmhvZjwvYT4KLSAqICAgICAgICAgPHAvPgotICogICAgICAgICAkSWQkCisgKiBAdmVyc2lvbiAkSWQkCiAgKi8KIHB1YmxpYyBjbGFzcyBTdm5JbmZvSXRlbQogewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vY29tbWFuZC9pbmZvL1N2bkluZm9TY21SZXN1bHQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bi1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL2NvbW1hbmQvaW5mby9Tdm5JbmZvU2NtUmVzdWx0LmphdmEKaW5kZXggNjgwYjBmZS4uM2E2OWUzOSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vY29tbWFuZC9pbmZvL1N2bkluZm9TY21SZXN1bHQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm4tY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9jb21tYW5kL2luZm8vU3ZuSW5mb1NjbVJlc3VsdC5qYXZhCkBAIC0yNiw4ICsyNiw3IEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86a2VubmV5QGFwYWNoZS5vcmciPktlbm5leSBXZXN0ZXJob2Y8L2E+Ci0gKiAgICAgICAgIDxwLz4KLSAqICAgICAgICAgJElkJAorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgU3ZuSW5mb1NjbVJlc3VsdAogICAgIGV4dGVuZHMgU2NtUmVzdWx0CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm4tY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9yZXBvc2l0b3J5L1N2blNjbVByb3ZpZGVyUmVwb3NpdG9yeS5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vcmVwb3NpdG9yeS9Tdm5TY21Qcm92aWRlclJlcG9zaXRvcnkuamF2YQppbmRleCAyMjcxOWMwLi5hNDA5ODQyIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm4tY29tbW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9yZXBvc2l0b3J5L1N2blNjbVByb3ZpZGVyUmVwb3NpdG9yeS5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bi1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3JlcG9zaXRvcnkvU3ZuU2NtUHJvdmlkZXJSZXBvc2l0b3J5LmphdmEKQEAgLTIwOCwxMSArMjA4LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qKgotICAgICAqIEEgU2NtUHJvdmlkZXJSZXBvc2l0b3J5IGxpa2UgdGhpcyBidXQgd2l0aCB0aGUgcGFyZW50IHVybCAoc3RyaXBwaW5nIHRoZSBsYXN0IGRpcmVjdG9yeSkKLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIHBhcmVudCByZXBvc2l0b3J5IG9yIDxjb2RlPm51bGw8L251bGw+IGlmIHRoaXMgaXMgdGhlIHRvcCBsZXZlbCByZXBvc2l0b3J5Ci0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU2NtUHJvdmlkZXJSZXBvc2l0b3J5IGdldFBhcmVudCgpCiAgICAgewogICAgICAgICBTdHJpbmcgbmV3VXJsID0gZ2V0VXJsKCkuc3Vic3RyaW5nKCBnZXRQcm90b2NvbCgpLmxlbmd0aCgpICk7CkBAIC0yMzgsOSArMjM0LDcgQEAKICAgICAgICAgcmV0dXJuIG5ldyBTdm5TY21Qcm92aWRlclJlcG9zaXRvcnkoIGdldFByb3RvY29sKCkgKyBuZXdVcmwsIGdldFVzZXIoKSwgZ2V0UGFzc3dvcmQoKSApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEdldCB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBhbmNlc3RvciB0byB0aGlzIHJlcG9zaXRvcnkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UmVsYXRpdmVQYXRoKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgYW5jZXN0b3IgKQogICAgIHsKICAgICAgICAgaWYgKCBhbmNlc3RvciBpbnN0YW5jZW9mIFN2blNjbVByb3ZpZGVyUmVwb3NpdG9yeSApCkBAIC0yNTcsNiArMjUxLDcgQEAKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiBnZXRVcmwoKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bi1jb21tb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3V0aWwvU3ZuVXRpbC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vdXRpbC9Tdm5VdGlsLmphdmEKaW5kZXggMTNmZjQxZC4uNzY0MGViNyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vdXRpbC9Tdm5VdGlsLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vdXRpbC9Tdm5VdGlsLmphdmEKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IHNldHRpbmdzRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSArICIgaXNuJ3Qgd2VsbCBmb3JtZWQuIFNLSVBQRUQuIiArIGUuZ2V0TWVzc2FnZSgpOwogCi0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBtZXNzYWdlICk7CisgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCBtZXNzYWdlICk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnMvc3JjL3NpdGUvc2l0ZS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm4tY29tbW9ucy9zcmMvc2l0ZS9zaXRlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODNiMWM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnMvc3JjL3NpdGUvc2l0ZS54bWwKQEAgLTAsMCArMSwzMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PgorCis8IS0tCisgIH4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICB+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICB+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgIH4gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICB+IHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgfiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgIH4gd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgfiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICB+ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICB+IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICB+IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgfiB1bmRlciB0aGUgTGljZW5zZS4KKyAgLS0+CisKKzxwcm9qZWN0IG5hbWU9Ik1hdmVuIFNDTSBTVk4gQ29tbW9ucyI+CisgIDxib2R5PgorICAgIDxtZW51IHJlZj0icGFyZW50IiAvPgorCisgICAgPG1lbnUgbmFtZT0iT3ZlcnZpZXciPgorICAgICAgPGl0ZW0gbmFtZT0iSW50cm9kdWN0aW9uIiBocmVmPSJpbmRleC5odG1sIi8+CisgICAgPC9tZW51PgorCisgICAgPG1lbnUgcmVmPSJyZXBvcnRzIiBpbmhlcml0PSJib3R0b20iIC8+CisgIDwvYm9keT4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bi1jb21tb25zL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL1N2blRhZ0JyYW5jaFV0aWxzVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vU3ZuVGFnQnJhbmNoVXRpbHNUZXN0LmphdmEKaW5kZXggOWQzOTEyMy4uZWZkYjhkYyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vU3ZuVGFnQnJhbmNoVXRpbHNUZXN0LmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vU3ZuVGFnQnJhbmNoVXRpbHNUZXN0LmphdmEKQEAgLTI4Miw2ICsyODIsMjIgQEAKIAogICAgIH0KIAorICAgIC8qKgorICAgICAqIFRlc3QgU0NNLTM3OQorICAgICAqCisgICAgICogQHRocm93cyBFeGNlcHRpb24gaWYgYW55CisgICAgICovCisgICAgcHVibGljIHZvaWQgdGVzdFJlc29sdmVVcmxXaXRoUXVlcnkoKQorICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCisgICAgeworICAgICAgICBTdHJpbmcgdXJsID0gImh0dHBzOi8vbXlzZXJ2ZXIvcGx1Z2lucy9zY21zdm4vdmlld2N2cy5waHAvcG9tL3RydW5rP3Jvb3Q9bXlwcm9qIjsKKworICAgICAgICBTdm5TY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbyA9IG5ldyBTdm5TY21Qcm92aWRlclJlcG9zaXRvcnkoIHVybCApOworCisgICAgICAgIGFzc2VydEVxdWFscyggImh0dHBzOi8vbXlzZXJ2ZXIvcGx1Z2lucy9zY21zdm4vdmlld2N2cy5waHAvcG9tL3RydW5rL3RhZ3MvbXl0YWctMT9yb290PW15cHJvaiIsCisgICAgICAgICAgICAgICAgICAgICAgU3ZuVGFnQnJhbmNoVXRpbHMucmVzb2x2ZVRhZ1VybCggcmVwbywgbmV3IFNjbVRhZyggIm15dGFnLTEiICkgKSApOworICAgIH0KKwogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLwogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9wb20ueG1sIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3BvbS54bWwKaW5kZXggZWQ4MDg3My4uZWVjMzk2ZCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3BvbS54bWwKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3BvbS54bWwKQEAgLTEsNCArMSw2IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhLS0KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzwhLS0KICAgfiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiAgIH4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCiAgIH4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KQEAgLTE4LDMxICsyMCwzNSBAQAogICAtLT4KIAogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+CisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwogICA8cGFyZW50PgotICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlcnMtc3ZuPC9hcnRpZmFjdElkPgogICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlcnMtc3ZuPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+Ci0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwogICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlPC9hcnRpZmFjdElkPgorCiAgIDxuYW1lPk1hdmVuIFNDTSBTdWJ2ZXJzaW9uIFByb3ZpZGVyIC0gU1ZOIEV4ZWN1dGFibGUgSW1wbC48L25hbWU+Ci0gIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KKyAgPGRlc2NyaXB0aW9uPkV4ZWN1dGFibGUgbGlicmFyeSBmb3IgU0NNIFNWTiBQcm92aWRlci48L2Rlc2NyaXB0aW9uPgorCiAgIDxkZXBlbmRlbmNpZXM+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1zdm4tY29tbW9uczwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KLSAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPGRlcGVuZGVuY3k+Ci0gICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1zdm50ZXN0PC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgotICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPnJlZ2V4cDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPnJlZ2V4cDwvYXJ0aWZhY3RJZD4KICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8IS0tIFRlc3QgLS0+CisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1zdm50ZXN0PC9hcnRpZmFjdElkPgorICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KICAgPC9kZXBlbmRlbmNpZXM+CiAKICAgPGJ1aWxkPgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9Tdm5FeGVTY21Qcm92aWRlci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9Tdm5FeGVTY21Qcm92aWRlci5qYXZhCmluZGV4IGUyNDNlOTguLjdlOGFiZTYgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvU3ZuRXhlU2NtUHJvdmlkZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL1N2bkV4ZVNjbVByb3ZpZGVyLmphdmEKQEAgLTUwLDYxICs1MCw3MyBAQAogcHVibGljIGNsYXNzIFN2bkV4ZVNjbVByb3ZpZGVyCiAgICAgZXh0ZW5kcyBBYnN0cmFjdFN2blNjbVByb3ZpZGVyCiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU3ZuQ29tbWFuZCBnZXRBZGRDb21tYW5kKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgU3ZuQWRkQ29tbWFuZCgpOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFN2bkNvbW1hbmQgZ2V0QnJhbmNoQ29tbWFuZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IFN2bkJyYW5jaENvbW1hbmQoKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTdm5Db21tYW5kIGdldENoYW5nZUxvZ0NvbW1hbmQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBTdm5DaGFuZ2VMb2dDb21tYW5kKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU3ZuQ29tbWFuZCBnZXRDaGVja0luQ29tbWFuZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IFN2bkNoZWNrSW5Db21tYW5kKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU3ZuQ29tbWFuZCBnZXRDaGVja091dENvbW1hbmQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBTdm5DaGVja091dENvbW1hbmQoKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTdm5Db21tYW5kIGdldERpZmZDb21tYW5kKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgU3ZuRGlmZkNvbW1hbmQoKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTdm5Db21tYW5kIGdldEV4cG9ydENvbW1hbmQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBTdm5FeGVFeHBvcnRDb21tYW5kKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU3ZuQ29tbWFuZCBnZXRSZW1vdmVDb21tYW5kKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgU3ZuUmVtb3ZlQ29tbWFuZCgpOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFN2bkNvbW1hbmQgZ2V0U3RhdHVzQ29tbWFuZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IFN2blN0YXR1c0NvbW1hbmQoKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTdm5Db21tYW5kIGdldFRhZ0NvbW1hbmQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBTdm5UYWdDb21tYW5kKCk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU3ZuQ29tbWFuZCBnZXRVcGRhdGVDb21tYW5kKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgU3ZuVXBkYXRlQ29tbWFuZCgpOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFN2bkNvbW1hbmQgZ2V0TGlzdENvbW1hbmQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBTdm5MaXN0Q29tbWFuZCgpOwpAQCAtMTE1LDkgKzEyNyw3IEBACiAgICAgICAgIHJldHVybiBuZXcgU3ZuSW5mb0NvbW1hbmQoKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBJbXBsZW1lbnRzIHJldHJpZXZpbmcgdGhlIHJlcG9zaXRvcnkgdXJsIGZvciBhIGNlcnRhaW4gcGF0aCB1c2luZyB0aGUgJ3N2biBpbmZvJyBjb21tYW5kLgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRSZXBvc2l0b3J5VVJMKCBGaWxlIHBhdGggKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpAQCAtMTI3LDggKzEzNyw4IEBACiAKICAgICAgICAgaWYgKCByZXN1bHQuZ2V0SW5mb0l0ZW1zKCkuc2l6ZSgpICE9IDEgKQogICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbiggIkNhbm5vdCBmaW5kIFVSTDogIiArCi0gICAgICAgICAgICAgICAgKCByZXN1bHQuZ2V0SW5mb0l0ZW1zKCkuc2l6ZSgpID09IDAgPyAibm8iIDogIm11bHRpcGxlIiApICsgIiBpdGVtcyByZXR1cm5lZCBieSB0aGUgaW5mbyBjb21tYW5kIiApOworICAgICAgICAgICAgdGhyb3cgbmV3IFNjbVJlcG9zaXRvcnlFeGNlcHRpb24oICJDYW5ub3QgZmluZCBVUkw6ICIKKyAgICAgICAgICAgICAgICArICggcmVzdWx0LmdldEluZm9JdGVtcygpLnNpemUoKSA9PSAwID8gIm5vIiA6ICJtdWx0aXBsZSIgKSArICIgaXRlbXMgcmV0dXJuZWQgYnkgdGhlIGluZm8gY29tbWFuZCIgKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiAoIChTdm5JbmZvSXRlbSkgcmVzdWx0LmdldEluZm9JdGVtcygpLmdldCggMCApICkuZ2V0VVJMKCk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvQWJzdHJhY3RGaWxlQ2hlY2tpbmdDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL0Fic3RyYWN0RmlsZUNoZWNraW5nQ29uc3VtZXIuamF2YQppbmRleCA0YTdiZGU5Li5jNDk2NDBjIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvQWJzdHJhY3RGaWxlQ2hlY2tpbmdDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9BYnN0cmFjdEZpbGVDaGVja2luZ0NvbnN1bWVyLmphdmEKQEAgLTMxLDYgKzMxLDcgQEAKIAogLyoqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzprZW5uZXlAYXBhY2hlLm9yZyI+S2VubmV5IFdlc3RlcmhvZjwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0RmlsZUNoZWNraW5nQ29uc3VtZXIKICAgICBpbXBsZW1lbnRzIFN0cmVhbUNvbnN1bWVyCkBAIC01MSw2ICs1Miw3IEBACiAgICAgICAgIHRoaXMud29ya2luZ0RpcmVjdG9yeSA9IHdvcmtpbmdEaXJlY3Rvcnk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgZmluYWwgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgaWYgKCBsaW5lLmxlbmd0aCgpIDw9IDMgKQpAQCAtNzMsNyArNzUsOCBAQAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFNjbUZpbGUgZmlsZSA9IChTY21GaWxlKSBpdC5uZXh0KCk7CiAKLSAgICAgICAgICAgICAgICBpZiAoICFmaWxlLmdldFN0YXR1cygpLmVxdWFscyggU2NtRmlsZVN0YXR1cy5ERUxFVEVEICkgJiYgIW5ldyBGaWxlKCB3b3JraW5nRGlyZWN0b3J5LCBmaWxlLmdldFBhdGgoKSApLmlzRmlsZSgpICkKKyAgICAgICAgICAgICAgICBpZiAoICFmaWxlLmdldFN0YXR1cygpLmVxdWFscyggU2NtRmlsZVN0YXR1cy5ERUxFVEVEICkKKyAgICAgICAgICAgICAgICAgICAgJiYgIW5ldyBGaWxlKCB3b3JraW5nRGlyZWN0b3J5LCBmaWxlLmdldFBhdGgoKSApLmlzRmlsZSgpICkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGl0LnJlbW92ZSgpOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9Tdm5Db21tYW5kTGluZVV0aWxzLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvU3ZuQ29tbWFuZExpbmVVdGlscy5qYXZhCmluZGV4IGNlYjViN2MuLmI1NGFlNjUgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9Tdm5Db21tYW5kTGluZVV0aWxzLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL1N2bkNvbW1hbmRMaW5lVXRpbHMuamF2YQpAQCAtMTQ2LDggKzE0Niw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRMaW5lVXRpbHMuU3RyaW5nU3RyZWFtQ29uc3VtZXIgc3RkZXJyLCBTY21Mb2dnZXIgbG9nZ2VyICkKICAgICAgICAgdGhyb3dzIENvbW1hbmRMaW5lRXhjZXB0aW9uCiAgICAgewotICAgICAgICBpZiAoIGV4aXRDb2RlICE9IDAgJiYgc3RkZXJyLmdldE91dHB1dCgpICE9IG51bGwgJiYgc3RkZXJyLmdldE91dHB1dCgpLmluZGV4T2YoICInc3ZuIGNsZWFudXAnIiApID4gMCAmJgotICAgICAgICAgICAgc3RkZXJyLmdldE91dHB1dCgpLmluZGV4T2YoICInc3ZuIGhlbHAgY2xlYW51cCciICkgPiAwICkKKyAgICAgICAgaWYgKCBleGl0Q29kZSAhPSAwICYmIHN0ZGVyci5nZXRPdXRwdXQoKSAhPSBudWxsICYmIHN0ZGVyci5nZXRPdXRwdXQoKS5pbmRleE9mKCAiJ3N2biBjbGVhbnVwJyIgKSA+IDAKKyAgICAgICAgICAgICYmIHN0ZGVyci5nZXRPdXRwdXQoKS5pbmRleE9mKCAiJ3N2biBoZWxwIGNsZWFudXAnIiApID4gMCApCiAgICAgICAgIHsKICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCAiU3ZuIGNvbW1hbmQgZmFpbGVkIGR1ZSB0byBzb21lIGxvY2tzIGluIHdvcmtpbmcgY29weS4gV2UgdHJ5IHRvIHJ1biBhICdzdm4gY2xlYW51cCcuIiApOwogCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvYWRkL1N2bkFkZENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9hZGQvU3ZuQWRkQ29tbWFuZC5qYXZhCmluZGV4IDA2NzQ1MTIuLmIwOWMxMjkgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9hZGQvU3ZuQWRkQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9hZGQvU3ZuQWRkQ29tbWFuZC5qYXZhCkBAIC00Myw2ICs0Myw3IEBACiAgICAgZXh0ZW5kcyBBYnN0cmFjdEFkZENvbW1hbmQKICAgICBpbXBsZW1lbnRzIFN2bkNvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBTY21SZXN1bHQgZXhlY3V0ZUFkZENvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyBtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gYmluYXJ5ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL2FkZC9Tdm5BZGRDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL2FkZC9Tdm5BZGRDb25zdW1lci5qYXZhCmluZGV4IDUxYTMzNzguLjM5YjlkMGIgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9hZGQvU3ZuQWRkQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvYWRkL1N2bkFkZENvbnN1bWVyLmphdmEKQEAgLTUxLDYgKzUxLDcgQEAKICAgICAvLyBTdHJlYW1Db25zdW1lciBJbXBsZW1lbnRhdGlvbgogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgY29uc3VtZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIGlmICggbGluZS5sZW5ndGgoKSA8PSAzICkKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9icmFuY2gvU3ZuQnJhbmNoQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL2JyYW5jaC9Tdm5CcmFuY2hDb21tYW5kLmphdmEKaW5kZXggNTZjZWM2Ny4uY2Y4ODM0MSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL2JyYW5jaC9Tdm5CcmFuY2hDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL2JyYW5jaC9Tdm5CcmFuY2hDb21tYW5kLmphdmEKQEAgLTU0LDYgKzU0LDcgQEAKICAgICBleHRlbmRzIEFic3RyYWN0QnJhbmNoQ29tbWFuZAogICAgIGltcGxlbWVudHMgU3ZuQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFNjbVJlc3VsdCBleGVjdXRlQnJhbmNoQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIGJyYW5jaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTc4LDggKzc5LDggQEAKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoIElPRXhjZXB0aW9uIGV4ICkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBCcmFuY2hTY21SZXN1bHQoIG51bGwsICJFcnJvciB3aGlsZSBtYWtpbmcgYSB0ZW1wb3JhcnkgZmlsZSBmb3IgdGhlIGNvbW1pdCBtZXNzYWdlOiAiICsKLSAgICAgICAgICAgICAgICBleC5nZXRNZXNzYWdlKCksIG51bGwsIGZhbHNlICk7CisgICAgICAgICAgICByZXR1cm4gbmV3IEJyYW5jaFNjbVJlc3VsdCggbnVsbCwgIkVycm9yIHdoaWxlIG1ha2luZyBhIHRlbXBvcmFyeSBmaWxlIGZvciB0aGUgY29tbWl0IG1lc3NhZ2U6ICIKKyAgICAgICAgICAgICAgICArIGV4LmdldE1lc3NhZ2UoKSwgbnVsbCwgZmFsc2UgKTsKICAgICAgICAgfQogCiAgICAgICAgIENvbW1hbmRsaW5lIGNsID0gY3JlYXRlQ29tbWFuZExpbmUoIHJlcG9zaXRvcnksIGZpbGVTZXQuZ2V0QmFzZWRpcigpLCBicmFuY2gsIG1lc3NhZ2VGaWxlICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvY2hhbmdlbG9nL1N2bkNoYW5nZUxvZ0NvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9jaGFuZ2Vsb2cvU3ZuQ2hhbmdlTG9nQ29tbWFuZC5qYXZhCmluZGV4IDIyMGFlMjUuLjVjMGQ1NjQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9jaGFuZ2Vsb2cvU3ZuQ2hhbmdlTG9nQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9jaGFuZ2Vsb2cvU3ZuQ2hhbmdlTG9nQ29tbWFuZC5qYXZhCkBAIC01MCw4ICs1MCw5IEBACiAgICAgZXh0ZW5kcyBBYnN0cmFjdENoYW5nZUxvZ0NvbW1hbmQKICAgICBpbXBsZW1lbnRzIFN2bkNvbW1hbmQKIHsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgREFURV9GT1JNQVQgPSAieXl5eS1NTS1kZCBISDptbTpzcyBaIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFURV9GT1JNQVQgPSAieXl5eS1NTS1kZCBISDptbTpzcyBaIjsKIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENoYW5nZUxvZ1NjbVJlc3VsdCBleGVjdXRlQ2hhbmdlTG9nQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHN0YXJ0VmVyc2lvbiwgU2NtVmVyc2lvbiBlbmRWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRlUGF0dGVybiApCkBAIC02MCw2ICs2MSw3IEBACiAgICAgICAgIHJldHVybiBleGVjdXRlQ2hhbmdlTG9nQ29tbWFuZCggcmVwbywgZmlsZVNldCwgbnVsbCwgbnVsbCwgbnVsbCwgZGF0ZVBhdHRlcm4sIHN0YXJ0VmVyc2lvbiwgZW5kVmVyc2lvbiApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIENoYW5nZUxvZ1NjbVJlc3VsdCBleGVjdXRlQ2hhbmdlTG9nQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlIHN0YXJ0RGF0ZSwgRGF0ZSBlbmREYXRlLCBTY21CcmFuY2ggYnJhbmNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRlUGF0dGVybiApCkBAIC0xNjQsNyArMTY2LDcgQEAKIAogICAgICAgICBpZiAoIGJyYW5jaCAhPSBudWxsICYmIFN0cmluZ1V0aWxzLmlzTm90RW1wdHkoIGJyYW5jaC5nZXROYW1lKCkgKSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEJ5IHNwZWNpZnlpbmcgYSBicmFuY2ggYW5kIHRoaXMgcmVwb3NpdG9yeSB1cmwgYmVsb3csIHN1YnZlcnNpb24gc2hvdWxkIHNob3cgCisgICAgICAgICAgICAvLyBCeSBzcGVjaWZ5aW5nIGEgYnJhbmNoIGFuZCB0aGlzIHJlcG9zaXRvcnkgdXJsIGJlbG93LCBzdWJ2ZXJzaW9uIHNob3VsZCBzaG93CiAgICAgICAgICAgICAvLyB0aGUgY2hhbmdlbG9nIG9mIHRoYXQgYnJhbmNoLCBidXQgbGltaXQgaXQgdG8gcGF0aHMgdGhhdCBhbHNvIG9jY3VyIGluIHRoaXMgcmVwb3NpdG9yeS4KICAgICAgICAgICAgIGlmICggYnJhbmNoIGluc3RhbmNlb2YgU2NtVGFnICkKICAgICAgICAgICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9jaGFuZ2Vsb2cvU3ZuQ2hhbmdlTG9nQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9jaGFuZ2Vsb2cvU3ZuQ2hhbmdlTG9nQ29uc3VtZXIuamF2YQppbmRleCBhY2FiMzJjLi44N2ZkYzhjIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvY2hhbmdlbG9nL1N2bkNoYW5nZUxvZ0NvbnN1bWVyLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL2NoYW5nZWxvZy9Tdm5DaGFuZ2VMb2dDb25zdW1lci5qYXZhCkBAIC04MSwxMyArODEsMTMgQEAKICAgICAvKioKICAgICAgKiBUaGUgcGF0dGVybiB1c2VkIHRvIG1hdGNoIHN2biBoZWFkZXIgbGluZXMKICAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgcGF0dGVybiA9ICJecmV2IChcXGQrKTpcXHMrIiArIC8vIHJldmlzaW9uIG51bWJlcgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQQVRURVJOID0gIl5yZXYgKFxcZCspOlxccysiICsgLy8gcmV2aXNpb24gbnVtYmVyCiAgICAgICAgICIoXFx3KylcXHMrXFx8XFxzKyIgKyAvLyBhdXRob3IgdXNlcm5hbWUKICAgICAgICAgIihcXGQrLVxcZCstXFxkKyAiICsgLy8gZGF0ZSAyMDAyLTA4LTI0CiAgICAgICAgICJcXGQrOlxcZCs6XFxkKykgIiArIC8vIHRpbWUgMTY6MDE6MDAKICAgICAgICAgIihbXFwtK10pKFxcZFxcZCkoXFxkXFxkKSI7IC8vIGdtdCBvZmZzZXQgLTA0MDAKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBwYXR0ZXJuMiA9ICJecihcXGQrKVxccytcXHxcXHMrIiArICAgICAgICAgIC8vIHJldmlzaW9uIG51bWJlcgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQQVRURVJOMiA9ICJecihcXGQrKVxccytcXHxcXHMrIiArICAgICAgICAgIC8vIHJldmlzaW9uIG51bWJlcgogICAgICAgICAiKFxcKFxcUytcXHMrXFxTK1xcKXxcXFMrKVxccytcXHxcXHMrIiArIC8vIGF1dGhvciB1c2VybmFtZQogICAgICAgICAiKFxcZCstXFxkKy1cXGQrICIgKyAgICAgICAgICAgICAvLyBkYXRlIDIwMDItMDgtMjQKICAgICAgICAgIlxcZCs6XFxkKzpcXGQrKSAiICsgICAgICAgICAgICAgLy8gdGltZSAxNjowMTowMApAQCAtMTM4LDE0ICsxMzgsMTQgQEAKIAogICAgICAgICB0cnkKICAgICAgICAgewotICAgICAgICAgICAgaGVhZGVyUmVnZXhwID0gbmV3IFJFKCBwYXR0ZXJuICk7Ci0gICAgICAgICAgICBoZWFkZXJSZWdleHAyID0gbmV3IFJFKCBwYXR0ZXJuMiApOworICAgICAgICAgICAgaGVhZGVyUmVnZXhwID0gbmV3IFJFKCBQQVRURVJOICk7CisgICAgICAgICAgICBoZWFkZXJSZWdleHAyID0gbmV3IFJFKCBQQVRURVJOMiApOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoICggUkVTeW50YXhFeGNlcHRpb24gZXggKQogICAgICAgICB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiSU5URVJOQUwgRVJST1I6IENvdWxkIG5vdCBjcmVhdGUgcmVnZXhwIHRvIHBhcnNlIHN2biBsb2cgZmlsZS4gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLiBTb21ldGhpbmcgaXMgcHJvYmFibHkgd3Jvbmcgd2l0aCB0aGUgb3JvIGluc3RhbGxhdGlvbi4iLAotICAgICAgICAgICAgICAgIGV4ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklOVEVSTkFMIEVSUk9SOiBDb3VsZCBub3QgY3JlYXRlIHJlZ2V4cCB0byBwYXJzZSBzdm4gbG9nIGZpbGUuIFRoaXMgc2hvdWxkbid0IGhhcHBlbi4gU29tZXRoaW5nIGlzIHByb2JhYmx5IHdyb25nIHdpdGggdGhlIG9ybyBpbnN0YWxsYXRpb24uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleCApOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNTgsNiArMTU4LDcgQEAKICAgICAvLyBTdHJlYW1Db25zdW1lciBJbXBsZW1lbnRhdGlvbgogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgY29uc3VtZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIGdldExvZ2dlcigpLmRlYnVnKCBsaW5lICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvY2hlY2tpbi9Tdm5DaGVja0luQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL2NoZWNraW4vU3ZuQ2hlY2tJbkNvbW1hbmQuamF2YQppbmRleCBmZGY2YzgxLi5jY2VkNDU3IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvY2hlY2tpbi9Tdm5DaGVja0luQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9jaGVja2luL1N2bkNoZWNrSW5Db21tYW5kLmphdmEKQEAgLTQ1LDYgKzQ1LDcgQEAKICAgICBleHRlbmRzIEFic3RyYWN0Q2hlY2tJbkNvbW1hbmQKICAgICBpbXBsZW1lbnRzIFN2bkNvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDaGVja0luU2NtUmVzdWx0IGV4ZWN1dGVDaGVja0luQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC02Miw4ICs2Myw4IEBACiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKCBJT0V4Y2VwdGlvbiBleCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ2hlY2tJblNjbVJlc3VsdCggbnVsbCwgIkVycm9yIHdoaWxlIG1ha2luZyBhIHRlbXBvcmFyeSBmaWxlIGZvciB0aGUgY29tbWl0IG1lc3NhZ2U6ICIgKwotICAgICAgICAgICAgICAgIGV4LmdldE1lc3NhZ2UoKSwgbnVsbCwgZmFsc2UgKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2hlY2tJblNjbVJlc3VsdCggbnVsbCwgIkVycm9yIHdoaWxlIG1ha2luZyBhIHRlbXBvcmFyeSBmaWxlIGZvciB0aGUgY29tbWl0IG1lc3NhZ2U6ICIKKyAgICAgICAgICAgICAgICArIGV4LmdldE1lc3NhZ2UoKSwgbnVsbCwgZmFsc2UgKTsKICAgICAgICAgfQogCiAgICAgICAgIENvbW1hbmRsaW5lIGNsID0gY3JlYXRlQ29tbWFuZExpbmUoIChTdm5TY21Qcm92aWRlclJlcG9zaXRvcnkpIHJlcG8sIGZpbGVTZXQsIG1lc3NhZ2VGaWxlICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvY2hlY2tpbi9Tdm5DaGVja0luQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9jaGVja2luL1N2bkNoZWNrSW5Db25zdW1lci5qYXZhCmluZGV4IDZmYjM5MTQuLjk2ZWZkOTMgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9jaGVja2luL1N2bkNoZWNrSW5Db25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9jaGVja2luL1N2bkNoZWNrSW5Db25zdW1lci5qYXZhCkBAIC0zNCwxNyArMzQsMTcgQEAKIHB1YmxpYyBjbGFzcyBTdm5DaGVja0luQ29uc3VtZXIKICAgICBleHRlbmRzIEFic3RyYWN0RmlsZUNoZWNraW5nQ29uc3VtZXIKIHsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgU0VORElOR19UT0tFTiA9ICJTZW5kaW5nICAgICAgICAiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRU5ESU5HX1RPS0VOID0gIlNlbmRpbmcgICAgICAgICI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgQURESU5HX1RPS0VOID0gIkFkZGluZyAgICAgICAgICI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFERElOR19UT0tFTiA9ICJBZGRpbmcgICAgICAgICAiOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEFERElOR19CSU5fVE9LRU4gPSAiQWRkaW5nICAoYmluKSAgIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQURESU5HX0JJTl9UT0tFTiA9ICJBZGRpbmcgIChiaW4pICAiOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIERFTEVUSU5HX1RPS0VOID0gIkRlbGV0aW5nICAgICAgICI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFTEVUSU5HX1RPS0VOID0gIkRlbGV0aW5nICAgICAgICI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgVFJBTlNNSVRUSU5HX1RPS0VOID0gIlRyYW5zbWl0dGluZyBmaWxlIGRhdGEiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFOU01JVFRJTkdfVE9LRU4gPSAiVHJhbnNtaXR0aW5nIGZpbGUgZGF0YSI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgQ09NTUlUVEVEX1JFVklTSU9OX1RPS0VOID0gIkNvbW1pdHRlZCByZXZpc2lvbiI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTU1JVFRFRF9SRVZJU0lPTl9UT0tFTiA9ICJDb21taXR0ZWQgcmV2aXNpb24iOwogCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vCkBAIC01OSw2ICs1OSw3IEBACiAgICAgLy8gU3RyZWFtQ29uc3VtZXIgSW1wbGVtZW50YXRpb24KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCB2b2lkIHBhcnNlTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgU3RyaW5nIGZpbGU7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvY2hlY2tvdXQvU3ZuQ2hlY2tPdXRDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvY2hlY2tvdXQvU3ZuQ2hlY2tPdXRDb21tYW5kLmphdmEKaW5kZXggZDcwMzA1Zi4uODk3NTNkMCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL2NoZWNrb3V0L1N2bkNoZWNrT3V0Q29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9jaGVja291dC9Tdm5DaGVja091dENvbW1hbmQuamF2YQpAQCAtNDgsNiArNDgsNyBAQAogICAgIGV4dGVuZHMgQWJzdHJhY3RDaGVja091dENvbW1hbmQKICAgICBpbXBsZW1lbnRzIFN2bkNvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBDaGVja091dFNjbVJlc3VsdCBleGVjdXRlQ2hlY2tPdXRDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwbywgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvY2hlY2tvdXQvU3ZuQ2hlY2tPdXRDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL2NoZWNrb3V0L1N2bkNoZWNrT3V0Q29uc3VtZXIuamF2YQppbmRleCBkMmNhZDEzLi42ZDFiYWRkIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvY2hlY2tvdXQvU3ZuQ2hlY2tPdXRDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9jaGVja291dC9Tdm5DaGVja091dENvbnN1bWVyLmphdmEKQEAgLTM0LDEzICszNCwxNCBAQAogcHVibGljIGNsYXNzIFN2bkNoZWNrT3V0Q29uc3VtZXIKICAgICBleHRlbmRzIEFic3RyYWN0RmlsZUNoZWNraW5nQ29uc3VtZXIKIHsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgQ0hFQ0tFRF9PVVRfUkVWSVNJT05fVE9LRU4gPSAiQ2hlY2tlZCBvdXQgcmV2aXNpb24iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDSEVDS0VEX09VVF9SRVZJU0lPTl9UT0tFTiA9ICJDaGVja2VkIG91dCByZXZpc2lvbiI7CiAKICAgICBwdWJsaWMgU3ZuQ2hlY2tPdXRDb25zdW1lciggU2NtTG9nZ2VyIGxvZ2dlciwgRmlsZSB3b3JraW5nRGlyZWN0b3J5ICkKICAgICB7CiAgICAgICAgIHN1cGVyKCBsb2dnZXIsIHdvcmtpbmdEaXJlY3RvcnkgKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCB2b2lkIHBhcnNlTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgU3RyaW5nIHN0YXR1c1N0cmluZyA9IGxpbmUuc3Vic3RyaW5nKCAwLCAxICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvZGlmZi9Tdm5EaWZmQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL2RpZmYvU3ZuRGlmZkNvbW1hbmQuamF2YQppbmRleCAyNWU0NjVhLi43MGYwMjQyIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvZGlmZi9Tdm5EaWZmQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9kaWZmL1N2bkRpZmZDb21tYW5kLmphdmEKQEAgLTQ0LDYgKzQ0LDcgQEAKICAgICBleHRlbmRzIEFic3RyYWN0RGlmZkNvbW1hbmQKICAgICBpbXBsZW1lbnRzIFN2bkNvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBEaWZmU2NtUmVzdWx0IGV4ZWN1dGVEaWZmQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiBzdGFydFZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIGVuZFZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvZXhwb3J0L1N2bkV4ZUV4cG9ydENvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9leHBvcnQvU3ZuRXhlRXhwb3J0Q29tbWFuZC5qYXZhCmluZGV4IDAwNmY0NzAuLjdmMDVjNjQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9leHBvcnQvU3ZuRXhlRXhwb3J0Q29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9leHBvcnQvU3ZuRXhlRXhwb3J0Q29tbWFuZC5qYXZhCkBAIC00OSw4ICs0OSw4IEBACiBwdWJsaWMgY2xhc3MgU3ZuRXhlRXhwb3J0Q29tbWFuZAogICAgIGV4dGVuZHMgQWJzdHJhY3RFeHBvcnRDb21tYW5kCiAgICAgaW1wbGVtZW50cyBTdm5Db21tYW5kCi0KIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHByb3RlY3RlZCBFeHBvcnRTY21SZXN1bHQgZXhlY3V0ZUV4cG9ydENvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvLCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgb3V0cHV0RGlyZWN0b3J5ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL2luZm8vU3ZuSW5mb0NvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9pbmZvL1N2bkluZm9Db21tYW5kLmphdmEKaW5kZXggMjA1ODRmNy4uNTFkNDRhYyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL2luZm8vU3ZuSW5mb0NvbW1hbmQuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvaW5mby9Tdm5JbmZvQ29tbWFuZC5qYXZhCkBAIC0zOSw4ICszOSw3IEBACiAKIC8qKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86a2VubmV5QGFwYWNoZS5vcmciPktlbm5leSBXZXN0ZXJob2Y8L2E+Ci0gKiAgICAgICAgIDxwLz4KLSAqICAgICAgICAgJElkJAorICogQHZlcnNpb24gJElkJAogICovCiBwdWJsaWMgY2xhc3MgU3ZuSW5mb0NvbW1hbmQKICAgICBleHRlbmRzIEFic3RyYWN0Q29tbWFuZApAQCAtNDgsNiArNDcsNyBAQAogewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEZpbGUgVE1QX0RJUiA9IG5ldyBGaWxlKCBTeXN0ZW0uZ2V0UHJvcGVydHkoICJqYXZhLmlvLnRtcGRpciIgKSApOwogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgU2NtUmVzdWx0IGV4ZWN1dGVDb21tYW5kKCBTY21Qcm92aWRlclJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvaW5mby9Tdm5JbmZvQ29uc3VtZXIuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9pbmZvL1N2bkluZm9Db25zdW1lci5qYXZhCmluZGV4IDdmYzU1YzguLjMwY2M2MTMgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9pbmZvL1N2bkluZm9Db25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9pbmZvL1N2bkluZm9Db25zdW1lci5qYXZhCkBAIC0zNiw2ICszNiw3IEBACiAKICAgICBwcml2YXRlIFN2bkluZm9JdGVtIGN1cnJlbnRJdGVtID0gbmV3IFN2bkluZm9JdGVtKCk7CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnN1bWVMaW5lKCBTdHJpbmcgcyApCiAgICAgewogICAgICAgICBpZiAoIHMuZXF1YWxzKCAiIiApICkKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9saXN0L1N2bkxpc3RDb21tYW5kLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvbGlzdC9Tdm5MaXN0Q29tbWFuZC5qYXZhCmluZGV4IGY2ZDY1MDYuLmUxYmMzYTYgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9saXN0L1N2bkxpc3RDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL2xpc3QvU3ZuTGlzdENvbW1hbmQuamF2YQpAQCAtNDksNiArNDksNyBAQAogewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEZpbGUgVE1QX0RJUiA9IG5ldyBGaWxlKCBTeXN0ZW0uZ2V0UHJvcGVydHkoICJqYXZhLmlvLnRtcGRpciIgKSApOwogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgTGlzdFNjbVJlc3VsdCBleGVjdXRlTGlzdENvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIGJvb2xlYW4gcmVjdXJzaXZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiB2ZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL2xpc3QvU3ZuTGlzdENvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvbGlzdC9Tdm5MaXN0Q29uc3VtZXIuamF2YQppbmRleCAzNjUzNGQzLi4xMmNiMmUxIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvbGlzdC9Tdm5MaXN0Q29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvbGlzdC9Tdm5MaXN0Q29uc3VtZXIuamF2YQpAQCAtMzksNiArMzksNyBAQAogICAgIC8vIFN0cmVhbUNvbnN1bWVyIEltcGxlbWVudGF0aW9uCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgZmlsZXMuYWRkKCBuZXcgU2NtRmlsZSggbGluZSwgU2NtRmlsZVN0YXR1cy5DSEVDS0VEX0lOICkgKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9yZW1vdmUvU3ZuUmVtb3ZlQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL3JlbW92ZS9Tdm5SZW1vdmVDb21tYW5kLmphdmEKaW5kZXggZmFkMTY1Mi4uY2NhNmVhMiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL3JlbW92ZS9Tdm5SZW1vdmVDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL3JlbW92ZS9Tdm5SZW1vdmVDb21tYW5kLmphdmEKQEAgLTQzLDYgKzQzLDcgQEAKICAgICBleHRlbmRzIEFic3RyYWN0UmVtb3ZlQ29tbWFuZAogICAgIGltcGxlbWVudHMgU3ZuQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFNjbVJlc3VsdCBleGVjdXRlUmVtb3ZlQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIG1lc3NhZ2UgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL3JlbW92ZS9Tdm5SZW1vdmVDb25zdW1lci5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL3JlbW92ZS9Tdm5SZW1vdmVDb25zdW1lci5qYXZhCmluZGV4IDU3ZGY0NjEuLmM1ZjFhOWIgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9yZW1vdmUvU3ZuUmVtb3ZlQ29uc3VtZXIuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvcmVtb3ZlL1N2blJlbW92ZUNvbnN1bWVyLmphdmEKQEAgLTUxLDYgKzUxLDcgQEAKICAgICAvLyBTdHJlYW1Db25zdW1lciBJbXBsZW1lbnRhdGlvbgogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgY29uc3VtZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIGlmICggbGluZS5sZW5ndGgoKSA8PSAzICkKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9zdGF0dXMvU3ZuU3RhdHVzQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL3N0YXR1cy9Tdm5TdGF0dXNDb21tYW5kLmphdmEKaW5kZXggMzNkZTZhNy4uYjNiMGVmYyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL3N0YXR1cy9Tdm5TdGF0dXNDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL3N0YXR1cy9Tdm5TdGF0dXNDb21tYW5kLmphdmEKQEAgLTM5LDYgKzM5LDcgQEAKICAgICBleHRlbmRzIEFic3RyYWN0U3RhdHVzQ29tbWFuZAogICAgIGltcGxlbWVudHMgU3ZuQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFN0YXR1c1NjbVJlc3VsdCBleGVjdXRlU3RhdHVzQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvc3RhdHVzL1N2blN0YXR1c0NvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvc3RhdHVzL1N2blN0YXR1c0NvbnN1bWVyLmphdmEKaW5kZXggMmM0ZjVjOC4uYTE2ZDE1NSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL3N0YXR1cy9Tdm5TdGF0dXNDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC9zdGF0dXMvU3ZuU3RhdHVzQ29uc3VtZXIuamF2YQpAQCAtNTcsNiArNTcsNyBAQAogICAgIC8vIFN0cmVhbUNvbnN1bWVyIEltcGxlbWVudGF0aW9uCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBjb25zdW1lTGluZSggU3RyaW5nIGxpbmUgKQogICAgIHsKICAgICAgICAgbG9nZ2VyLmRlYnVnKCBsaW5lICk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvdGFnL1N2blRhZ0NvbW1hbmQuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC90YWcvU3ZuVGFnQ29tbWFuZC5qYXZhCmluZGV4IGI0ZDAwMTAuLmVhZGNlNzMgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC90YWcvU3ZuVGFnQ29tbWFuZC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC90YWcvU3ZuVGFnQ29tbWFuZC5qYXZhCkBAIC01NCw2ICs1NCw3IEBACiAgICAgZXh0ZW5kcyBBYnN0cmFjdFRhZ0NvbW1hbmQKICAgICBpbXBsZW1lbnRzIFN2bkNvbW1hbmQKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTY21SZXN1bHQgZXhlY3V0ZVRhZ0NvbW1hbmQoIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSByZXBvLCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyB0YWcsIFN0cmluZyBtZXNzYWdlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC91cGRhdGUvU3ZuVXBkYXRlQ29tbWFuZC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL3VwZGF0ZS9Tdm5VcGRhdGVDb21tYW5kLmphdmEKaW5kZXggNjBiNzBhMS4uNzBlMzg0OSAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL3VwZGF0ZS9Tdm5VcGRhdGVDb21tYW5kLmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL3VwZGF0ZS9Tdm5VcGRhdGVDb21tYW5kLmphdmEKQEAgLTUxLDYgKzUxLDcgQEAKICAgICBleHRlbmRzIEFic3RyYWN0VXBkYXRlQ29tbWFuZAogICAgIGltcGxlbWVudHMgU3ZuQ29tbWFuZAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIFVwZGF0ZVNjbVJlc3VsdCBleGVjdXRlVXBkYXRlQ29tbWFuZCggU2NtUHJvdmlkZXJSZXBvc2l0b3J5IHJlcG8sIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiB2ZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKQEAgLTE0Myw5ICsxNDQsNyBAQAogICAgICAgICByZXR1cm4gY2w7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLnVwZGF0ZS5BYnN0cmFjdFVwZGF0ZUNvbW1hbmQjZ2V0Q2hhbmdlTG9nQ29tbWFuZCgpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgQ2hhbmdlTG9nQ29tbWFuZCBnZXRDaGFuZ2VMb2dDb21tYW5kKCkKICAgICB7CiAgICAgICAgIFN2bkNoYW5nZUxvZ0NvbW1hbmQgY29tbWFuZCA9IG5ldyBTdm5DaGFuZ2VMb2dDb21tYW5kKCk7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvdXBkYXRlL1N2blVwZGF0ZUNvbnN1bWVyLmphdmEgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm5leGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vc3ZuZXhlL2NvbW1hbmQvdXBkYXRlL1N2blVwZGF0ZUNvbnN1bWVyLmphdmEKaW5kZXggN2RmNDc0Ni4uMzI1YjU3MiAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL3N2bmV4ZS9jb21tYW5kL3VwZGF0ZS9Tdm5VcGRhdGVDb25zdW1lci5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9zdm5leGUvY29tbWFuZC91cGRhdGUvU3ZuVXBkYXRlQ29uc3VtZXIuamF2YQpAQCAtNTUsNiArNTUsNyBAQAogICAgIC8vIFN0cmVhbUNvbnN1bWVyIEltcGxlbWVudGF0aW9uCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBwYXJzZUxpbmUoIFN0cmluZyBsaW5lICkKICAgICB7CiAgICAgICAgIGxpbmUgPSBsaW5lLnRyaW0oKTsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvc2l0ZS9zaXRlLnhtbCBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZS9zcmMvc2l0ZS9zaXRlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGVmZTNhCi0tLSAvZGV2L251bGwKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlL3NyYy9zaXRlL3NpdGUueG1sCkBAIC0wLDAgKzEsMzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz4KKworPCEtLQorICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICB+IHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgfiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgIH4gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB+IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgfgorICB+ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIH4KKyAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgIH4gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgfiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgfiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgfiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgIH4gdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorCis8cHJvamVjdCBuYW1lPSJNYXZlbiBTQ00gU1ZOIEV4ZWN1dGFibGUiPgorICA8Ym9keT4KKyAgICA8bWVudSByZWY9InBhcmVudCIgLz4KKworICAgIDxtZW51IG5hbWU9Ik92ZXJ2aWV3Ij4KKyAgICAgIDxpdGVtIG5hbWU9IkludHJvZHVjdGlvbiIgaHJlZj0iaW5kZXguaHRtbCIvPgorICAgIDwvbWVudT4KKworICAgIDxtZW51IHJlZj0icmVwb3J0cyIgaW5oZXJpdD0iYm90dG9tIiAvPgorICA8L2JvZHk+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm50ZXN0L3BvbS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm50ZXN0L3BvbS54bWwKaW5kZXggODhkNWI3Zi4uODI2NzhhOCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZudGVzdC9wb20ueG1sCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bnRlc3QvcG9tLnhtbApAQCAtMSw0ICsxLDYgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCEtLQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPCEtLQogICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKICAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKICAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpAQCAtMTgsMjAgKzIwLDIzIEBACiAgIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxwYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVycy1zdm48L2FydGlmYWN0SWQ+CiAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVycy1zdm48L2FydGlmYWN0SWQ+CiAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgogICA8L3BhcmVudD4KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1zdm50ZXN0PC9hcnRpZmFjdElkPgorCiAgIDxuYW1lPk1hdmVuIFNDTSBTdWJ2ZXJzaW9uIFByb3ZpZGVyIFRDSyBUZXN0czwvbmFtZT4KLSAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgorICA8ZGVzY3JpcHRpb24+VGVzdHMgbGlicmFyeSBmb3IgU0NNIFNWTiBQcm92aWRlci48L2Rlc2NyaXB0aW9uPgorCiAgIDxkZXBlbmRlbmNpZXM+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS10ZXN0PC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgPC9kZXBlbmRlbmNpZXM+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm50ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL1N2blNjbVRlc3RVdGlscy5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZudGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9Tdm5TY21UZXN0VXRpbHMuamF2YQppbmRleCAzYmM3NDIxLi43ZWQ4MDMyIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm50ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL1N2blNjbVRlc3RVdGlscy5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bnRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vU3ZuU2NtVGVzdFV0aWxzLmphdmEKQEAgLTM3LDYgKzM3LDEyIEBACiAgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBTdm5TY21UZXN0VXRpbHMKIHsKKyAgICAvKiogJ3N2bicgY29tbWFuZCBsaW5lICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1ZOX0NPTU1BTkRfTElORSA9ICJzdm4iOworCisgICAgLyoqICdzdm5hZG1pbicgY29tbWFuZCBsaW5lICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1ZOQURNSU5fQ09NTUFORF9MSU5FID0gInN2bmFkbWluIjsKKwogICAgIHByaXZhdGUgU3ZuU2NtVGVzdFV0aWxzKCkKICAgICB7CiAgICAgfQpAQCAtNTIsNyArNTgsNyBAQAogICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggIkNvdWxkIG5vdCBtYWtlIHJlcG9zaXRvcnkgcm9vdCBkaXJlY3Rvcnk6ICIgKyByZXBvc2l0b3J5Um9vdC5nZXRBYnNvbHV0ZVBhdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlSb290Lm1rZGlycygpICk7CiAKLSAgICAgICAgU2NtVGVzdENhc2UuZXhlY3V0ZSggcmVwb3NpdG9yeVJvb3QuZ2V0UGFyZW50RmlsZSgpLCAic3ZuYWRtaW4iLCAiY3JlYXRlICIgKyByZXBvc2l0b3J5Um9vdC5nZXROYW1lKCkgKTsKKyAgICAgICAgU2NtVGVzdENhc2UuZXhlY3V0ZSggcmVwb3NpdG9yeVJvb3QuZ2V0UGFyZW50RmlsZSgpLCBTVk5BRE1JTl9DT01NQU5EX0xJTkUsICJjcmVhdGUgIiArIHJlcG9zaXRvcnlSb290LmdldE5hbWUoKSApOwogCiAgICAgICAgIGxvYWRTdm5EdW1wKCByZXBvc2l0b3J5Um9vdCwKICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdm5TY21UZXN0VXRpbHMoKS5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbSggInRjay90Y2suZHVtcCIgKSApOwpAQCAtNjksNyArNzUsNyBAQAogICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggIkNvdWxkIG5vdCBtYWtlIHJlcG9zaXRvcnkgcm9vdCBkaXJlY3Rvcnk6ICIgKyByZXBvc2l0b3J5Um9vdC5nZXRBYnNvbHV0ZVBhdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlSb290Lm1rZGlycygpICk7CiAKLSAgICAgICAgU2NtVGVzdENhc2UuZXhlY3V0ZSggcmVwb3NpdG9yeVJvb3QuZ2V0UGFyZW50RmlsZSgpLCAic3ZuYWRtaW4iLCAiY3JlYXRlICIgKyByZXBvc2l0b3J5Um9vdC5nZXROYW1lKCkgKTsKKyAgICAgICAgU2NtVGVzdENhc2UuZXhlY3V0ZSggcmVwb3NpdG9yeVJvb3QuZ2V0UGFyZW50RmlsZSgpLCBTVk5BRE1JTl9DT01NQU5EX0xJTkUsICJjcmVhdGUgIiArIHJlcG9zaXRvcnlSb290LmdldE5hbWUoKSApOwogCiAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCAiVGhlIGR1bXAgZmlsZSBkb2Vzbid0IGV4aXN0OiAiICsgZHVtcC5nZXRBYnNvbHV0ZVBhdGgoKSwgZHVtcC5leGlzdHMoKSApOwogCkBAIC04MSw3ICs4Nyw3IEBACiAgICAgewogICAgICAgICBDb21tYW5kbGluZSBjbCA9IG5ldyBDb21tYW5kbGluZSgpOwogCi0gICAgICAgIGNsLnNldEV4ZWN1dGFibGUoICJzdm5hZG1pbiIgKTsKKyAgICAgICAgY2wuc2V0RXhlY3V0YWJsZSggU1ZOQURNSU5fQ09NTUFORF9MSU5FICk7CiAKICAgICAgICAgY2wuc2V0V29ya2luZ0RpcmVjdG9yeSggcmVwb3NpdG9yeVJvb3QuZ2V0UGFyZW50RmlsZSgpLmdldEFic29sdXRlUGF0aCgpICk7CiAKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bnRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vY29tbWFuZC9icmFuY2gvU3ZuQnJhbmNoQ29tbWFuZFRja1Rlc3QuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bnRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vY29tbWFuZC9icmFuY2gvU3ZuQnJhbmNoQ29tbWFuZFRja1Rlc3QuamF2YQppbmRleCAzYmYxN2RjLi43ZWU2NDA1IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm50ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL2NvbW1hbmQvYnJhbmNoL1N2bkJyYW5jaENvbW1hbmRUY2tUZXN0LmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZudGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9jb21tYW5kL2JyYW5jaC9Tdm5CcmFuY2hDb21tYW5kVGNrVGVzdC5qYXZhCkBAIC0zMywxMiArMzMsMTQgQEAKIHB1YmxpYyBjbGFzcyBTdm5CcmFuY2hDb21tYW5kVGNrVGVzdAogICAgIGV4dGVuZHMgQnJhbmNoQ29tbWFuZFRja1Rlc3QKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2NtVXJsKCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIFN2blNjbVRlc3RVdGlscy5nZXRTY21VcmwoIG5ldyBGaWxlKCBnZXRSZXBvc2l0b3J5Um9vdCgpLCAidHJ1bmsiICkgKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGluaXRSZXBvKCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bnRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vY29tbWFuZC9jaGVja2luL1N2bkNoZWNrSW5Db21tYW5kVGNrVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZudGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9jb21tYW5kL2NoZWNraW4vU3ZuQ2hlY2tJbkNvbW1hbmRUY2tUZXN0LmphdmEKaW5kZXggNDZmNzk5MS4uMzNkNjczMCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZudGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9jb21tYW5kL2NoZWNraW4vU3ZuQ2hlY2tJbkNvbW1hbmRUY2tUZXN0LmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZudGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9jb21tYW5kL2NoZWNraW4vU3ZuQ2hlY2tJbkNvbW1hbmRUY2tUZXN0LmphdmEKQEAgLTMxLDEyICszMSwxNCBAQAogcHVibGljIGNsYXNzIFN2bkNoZWNrSW5Db21tYW5kVGNrVGVzdAogICAgIGV4dGVuZHMgQ2hlY2tJbkNvbW1hbmRUY2tUZXN0CiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNjbVVybCgpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBTdm5TY21UZXN0VXRpbHMuZ2V0U2NtVXJsKCBuZXcgRmlsZSggZ2V0UmVwb3NpdG9yeVJvb3QoKSwgInRydW5rIiApICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBpbml0UmVwbygpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm50ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL2NvbW1hbmQvY2hlY2tvdXQvU3ZuQ2hlY2tPdXRDb21tYW5kVGNrVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZudGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9jb21tYW5kL2NoZWNrb3V0L1N2bkNoZWNrT3V0Q29tbWFuZFRja1Rlc3QuamF2YQppbmRleCA1MzM4ZDBmLi43NjY1MTJiIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm50ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL2NvbW1hbmQvY2hlY2tvdXQvU3ZuQ2hlY2tPdXRDb21tYW5kVGNrVGVzdC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bnRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vY29tbWFuZC9jaGVja291dC9Tdm5DaGVja091dENvbW1hbmRUY2tUZXN0LmphdmEKQEAgLTMxLDEyICszMSwxNCBAQAogcHVibGljIGNsYXNzIFN2bkNoZWNrT3V0Q29tbWFuZFRja1Rlc3QKICAgICBleHRlbmRzIENoZWNrT3V0Q29tbWFuZFRja1Rlc3QKIHsKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2NtVXJsKCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIFN2blNjbVRlc3RVdGlscy5nZXRTY21VcmwoIG5ldyBGaWxlKCBnZXRSZXBvc2l0b3J5Um9vdCgpLCAidHJ1bmsiICkgKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIGluaXRSZXBvKCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bnRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vY29tbWFuZC9kaWZmL1N2bkRpZmZDb21tYW5kVGNrVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZudGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9jb21tYW5kL2RpZmYvU3ZuRGlmZkNvbW1hbmRUY2tUZXN0LmphdmEKaW5kZXggMzcwZWYzYS4uMzk5NzU3ZCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZudGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9jb21tYW5kL2RpZmYvU3ZuRGlmZkNvbW1hbmRUY2tUZXN0LmphdmEKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZudGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9jb21tYW5kL2RpZmYvU3ZuRGlmZkNvbW1hbmRUY2tUZXN0LmphdmEKQEAgLTMxLDEyICszMSwxNCBAQAogcHVibGljIGNsYXNzIFN2bkRpZmZDb21tYW5kVGNrVGVzdAogICAgIGV4dGVuZHMgRGlmZkNvbW1hbmRUY2tUZXN0CiB7CisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNjbVVybCgpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBTdm5TY21UZXN0VXRpbHMuZ2V0U2NtVXJsKCBuZXcgRmlsZSggZ2V0UmVwb3NpdG9yeVJvb3QoKSwgInRydW5rIiApICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBpbml0UmVwbygpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm50ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL2NvbW1hbmQvbGlzdC9Tdm5MaXN0Q29tbWFuZFRja1Rlc3QuamF2YSBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bnRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vY29tbWFuZC9saXN0L1N2bkxpc3RDb21tYW5kVGNrVGVzdC5qYXZhCmluZGV4IDVjODhjYjUuLjA5MGMwZjIgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bnRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vY29tbWFuZC9saXN0L1N2bkxpc3RDb21tYW5kVGNrVGVzdC5qYXZhCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bnRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vY29tbWFuZC9saXN0L1N2bkxpc3RDb21tYW5kVGNrVGVzdC5qYXZhCkBAIC0zMywxMiArMzMsMTQgQEAKIHB1YmxpYyBjbGFzcyBTdm5MaXN0Q29tbWFuZFRja1Rlc3QKICAgICBleHRlbmRzIExpc3RDb21tYW5kVGNrVGVzdAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21VcmwoKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gU3ZuU2NtVGVzdFV0aWxzLmdldFNjbVVybCggbmV3IEZpbGUoIGdldFJlcG9zaXRvcnlSb290KCksICJ0cnVuayIgKSApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgaW5pdFJlcG8oKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZudGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9jb21tYW5kL3N0YXR1cy9Tdm5TdGF0dXNDb21tYW5kVGNrVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZudGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9jb21tYW5kL3N0YXR1cy9Tdm5TdGF0dXNDb21tYW5kVGNrVGVzdC5qYXZhCmluZGV4IDA3MzlmM2YuLjE4ODZjZjYgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bnRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vY29tbWFuZC9zdGF0dXMvU3ZuU3RhdHVzQ29tbWFuZFRja1Rlc3QuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm50ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL2NvbW1hbmQvc3RhdHVzL1N2blN0YXR1c0NvbW1hbmRUY2tUZXN0LmphdmEKQEAgLTMxLDEyICszMSwxNCBAQAogcHVibGljIGNsYXNzIFN2blN0YXR1c0NvbW1hbmRUY2tUZXN0CiAgICAgZXh0ZW5kcyBTdGF0dXNDb21tYW5kVGNrVGVzdAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21VcmwoKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gU3ZuU2NtVGVzdFV0aWxzLmdldFNjbVVybCggbmV3IEZpbGUoIGdldFJlcG9zaXRvcnlSb290KCksICJ0cnVuayIgKSApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgaW5pdFJlcG8oKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZudGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9jb21tYW5kL3RhZy9Tdm5UYWdDb21tYW5kVGNrVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZudGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9jb21tYW5kL3RhZy9Tdm5UYWdDb21tYW5kVGNrVGVzdC5qYXZhCmluZGV4IGUxZDU3MzAuLmU5NTAyZGIgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bnRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vY29tbWFuZC90YWcvU3ZuVGFnQ29tbWFuZFRja1Rlc3QuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm50ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL2NvbW1hbmQvdGFnL1N2blRhZ0NvbW1hbmRUY2tUZXN0LmphdmEKQEAgLTMzLDEyICszMywxNCBAQAogcHVibGljIGNsYXNzIFN2blRhZ0NvbW1hbmRUY2tUZXN0CiAgICAgZXh0ZW5kcyBUYWdDb21tYW5kVGNrVGVzdAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21VcmwoKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gU3ZuU2NtVGVzdFV0aWxzLmdldFNjbVVybCggbmV3IEZpbGUoIGdldFJlcG9zaXRvcnlSb290KCksICJ0cnVuayIgKSApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgaW5pdFJlcG8oKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZudGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9jb21tYW5kL3VwZGF0ZS9Tdm5VcGRhdGVDb21tYW5kVGNrVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZudGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL3N2bi9jb21tYW5kL3VwZGF0ZS9Tdm5VcGRhdGVDb21tYW5kVGNrVGVzdC5qYXZhCmluZGV4IDk2MDI4ZWIuLjMwMWZjZmYgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bnRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9zdm4vY29tbWFuZC91cGRhdGUvU3ZuVXBkYXRlQ29tbWFuZFRja1Rlc3QuamF2YQorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL21hdmVuLXNjbS1wcm92aWRlci1zdm50ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvc3ZuL2NvbW1hbmQvdXBkYXRlL1N2blVwZGF0ZUNvbW1hbmRUY2tUZXN0LmphdmEKQEAgLTMxLDEyICszMSwxNCBAQAogcHVibGljIGNsYXNzIFN2blVwZGF0ZUNvbW1hbmRUY2tUZXN0CiAgICAgZXh0ZW5kcyBVcGRhdGVDb21tYW5kVGNrVGVzdAogeworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21VcmwoKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gU3ZuU2NtVGVzdFV0aWxzLmdldFNjbVVybCggbmV3IEZpbGUoIGdldFJlcG9zaXRvcnlSb290KCksICJ0cnVuayIgKSApOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIHZvaWQgaW5pdFJlcG8oKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9tYXZlbi1zY20tcHJvdmlkZXItc3ZudGVzdC9zcmMvc2l0ZS9zaXRlLnhtbCBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bnRlc3Qvc3JjL3NpdGUvc2l0ZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRkMzQyNwotLS0gL2Rldi9udWxsCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vbWF2ZW4tc2NtLXByb3ZpZGVyLXN2bnRlc3Qvc3JjL3NpdGUvc2l0ZS54bWwKQEAgLTAsMCArMSwzMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PgorCis8IS0tCisgIH4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICB+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICB+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgIH4gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICB+IHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgfiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgIH4gd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgfiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICB+ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICB+IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICB+IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgfiB1bmRlciB0aGUgTGljZW5zZS4KKyAgLS0+CisKKzxwcm9qZWN0IG5hbWU9Ik1hdmVuIFNDTSBTVk4gVGVzdHMiPgorICA8Ym9keT4KKyAgICA8bWVudSByZWY9InBhcmVudCIgLz4KKworICAgIDxtZW51IG5hbWU9Ik92ZXJ2aWV3Ij4KKyAgICAgIDxpdGVtIG5hbWU9IkludHJvZHVjdGlvbiIgaHJlZj0iaW5kZXguaHRtbCIvPgorICAgIDwvbWVudT4KKworICAgIDxtZW51IHJlZj0icmVwb3J0cyIgaW5oZXJpdD0iYm90dG9tIiAvPgorICA8L2JvZHk+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL3BvbS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL3BvbS54bWwKaW5kZXggNjIwYTMxNy4uMWM4NTNiNCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9wb20ueG1sCisrKyBiL21hdmVuLXNjbS1wcm92aWRlcnMvbWF2ZW4tc2NtLXByb3ZpZGVycy1zdm4vcG9tLnhtbApAQCAtMSw0ICsxLDYgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCEtLQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPCEtLQogICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKICAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKICAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpAQCAtMTgsMTYgKzIwLDIwIEBACiAgIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxwYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyczwvYXJ0aWZhY3RJZD4KICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXJzPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+Ci0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwogICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXJzLXN2bjwvYXJ0aWZhY3RJZD4KICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKwogICA8bmFtZT5NYXZlbiBTQ00gU3VidmVyc2lvbiBQcm92aWRlciAtIFBhcmVudDwvbmFtZT4KLSAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgorICA8ZGVzY3JpcHRpb24+U0NNIFByb3ZpZGVyIGltcGxlbWVudGF0aW9uIGZvciBTVk4gKGh0dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jpcy5vcmcvKS48L2Rlc2NyaXB0aW9uPgorCiAgIDxtb2R1bGVzPgogICAgIDxtb2R1bGU+bWF2ZW4tc2NtLXByb3ZpZGVyLXN2bi1jb21tb25zPC9tb2R1bGU+CiAgICAgPG1vZHVsZT5tYXZlbi1zY20tcHJvdmlkZXItc3ZuZXhlPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tcHJvdmlkZXJzL21hdmVuLXNjbS1wcm92aWRlcnMtc3ZuL3NyYy9zaXRlL3NpdGUueG1sIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9zcmMvc2l0ZS9zaXRlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjc0ODcxCi0tLSAvZGV2L251bGwKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9tYXZlbi1zY20tcHJvdmlkZXJzLXN2bi9zcmMvc2l0ZS9zaXRlLnhtbApAQCAtMCwwICsxLDM0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+CisKKzwhLS0KKyAgfiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgIH4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgIH4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgfiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIH4gdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICB+ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgfiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICB+IHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgIH4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIH4gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIH4gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICB+IHVuZGVyIHRoZSBMaWNlbnNlLgorICAtLT4KKworPHByb2plY3QgbmFtZT0iTWF2ZW4gU0NNIFNWTiBQcm92aWRlciI+CisgIDxib2R5PgorICAgIDxtZW51IHJlZj0icGFyZW50IiAvPgorCisgICAgPG1lbnUgbmFtZT0iT3ZlcnZpZXciPgorICAgICAgPGl0ZW0gbmFtZT0iSW50cm9kdWN0aW9uIiBocmVmPSJpbmRleC5odG1sIi8+CisgICAgPC9tZW51PgorCisgICAgPG1lbnUgcmVmPSJtb2R1bGVzIiAvPgorCisgICAgPG1lbnUgcmVmPSJyZXBvcnRzIiBpbmhlcml0PSJib3R0b20iIC8+CisgIDwvYm9keT4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvcG9tLnhtbCBiL21hdmVuLXNjbS1wcm92aWRlcnMvcG9tLnhtbAppbmRleCA2Nzk2MTc5Li5lOTQyNTBjIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tcHJvdmlkZXJzL3BvbS54bWwKKysrIGIvbWF2ZW4tc2NtLXByb3ZpZGVycy9wb20ueG1sCkBAIC0xLDQgKzEsNiBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IS0tCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8IS0tCiAgIH4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQogICB+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogICB+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCkBAIC0xOCwxNiArMjAsMjAgQEAKICAgLS0+CiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKICAgPHBhcmVudD4KICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY208L2FydGlmYWN0SWQ+CiAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CiAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgogICA8L3BhcmVudD4KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCiAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlcnM8L2FydGlmYWN0SWQ+CiAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CisKICAgPG5hbWU+TWF2ZW4gU0NNIFByb3ZpZGVyczwvbmFtZT4KLSAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgorICA8ZGVzY3JpcHRpb24+UGFyZW50IGZvciBhbGwgU0NNIHByb3ZpZGVycyBzdXBwb3J0ZWQuPC9kZXNjcmlwdGlvbj4KKwogICA8bW9kdWxlcz4KICAgICA8bW9kdWxlPm1hdmVuLXNjbS1wcm92aWRlci1hY2N1cmV2PC9tb2R1bGU+CiAgICAgPG1vZHVsZT5tYXZlbi1zY20tcHJvdmlkZXItYmF6YWFyPC9tb2R1bGU+CkBAIC0zNywyMCArNDMsMjMgQEAKICAgICA8bW9kdWxlPm1hdmVuLXNjbS1wcm92aWRlcnMtZ2l0PC9tb2R1bGU+CiAgICAgPG1vZHVsZT5tYXZlbi1zY20tcHJvdmlkZXItbG9jYWw8L21vZHVsZT4KICAgICA8bW9kdWxlPm1hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZTwvbW9kdWxlPgorICAgIDxtb2R1bGU+bWF2ZW4tc2NtLXByb3ZpZGVycy1zdGFuZGFyZDwvbW9kdWxlPgogICAgIDxtb2R1bGU+bWF2ZW4tc2NtLXByb3ZpZGVyLXN0YXJ0ZWFtPC9tb2R1bGU+CiAgICAgPG1vZHVsZT5tYXZlbi1zY20tcHJvdmlkZXJzLXN2bjwvbW9kdWxlPgogICAgIDxtb2R1bGU+bWF2ZW4tc2NtLXByb3ZpZGVyLXN5bmVyZ3k8L21vZHVsZT4KICAgICA8bW9kdWxlPm1hdmVuLXNjbS1wcm92aWRlci12c3M8L21vZHVsZT4KICAgPC9tb2R1bGVzPgorCiAgIDxkZXBlbmRlbmN5TWFuYWdlbWVudD4KICAgICA8ZGVwZW5kZW5jaWVzPgogICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgIDxncm91cElkPnJlZ2V4cDwvZ3JvdXBJZD4KICAgICAgICAgPGFydGlmYWN0SWQ+cmVnZXhwPC9hcnRpZmFjdElkPgogICAgICAgICA8dmVyc2lvbj4xLjM8L3ZlcnNpb24+Ci0gICAgICA8L2RlcGVuZGVuY3k+ICAgIAorICAgICAgPC9kZXBlbmRlbmN5PgogICAgIDwvZGVwZW5kZW5jaWVzPgogICA8L2RlcGVuZGVuY3lNYW5hZ2VtZW50PgorCiAgIDxkZXBlbmRlbmNpZXM+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KQEAgLTU5LDEwICs2OCwxMCBAQAogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tdGVzdDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KICAgICA8L2RlcGVuZGVuY3k+CiAgIDwvZGVwZW5kZW5jaWVzPgorCiAgIDxwcm9maWxlcz4KICAgICA8cHJvZmlsZT4KICAgICAgIDxpZD5kZWZhdWx0PC9pZD4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1wcm92aWRlcnMvc3JjL3NpdGUvc2l0ZS54bWwgYi9tYXZlbi1zY20tcHJvdmlkZXJzL3NyYy9zaXRlL3NpdGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYTZkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi1zY20tcHJvdmlkZXJzL3NyYy9zaXRlL3NpdGUueG1sCkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz4KKworPCEtLQorICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICB+IHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgfiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgIH4gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB+IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgfgorICB+ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIH4KKyAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgIH4gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgfiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgfiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgfiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgIH4gdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorCis8cHJvamVjdCBuYW1lPSJNYXZlbiBTQ00gUHJvdmlkZXJzIj4KKyAgPGJvZHk+CisgICAgPG1lbnUgcmVmPSJwYXJlbnQiIC8+CisKKyAgICA8bWVudSBuYW1lPSJPdmVydmlldyI+CisgICAgICA8aXRlbSBuYW1lPSJJbnRyb2R1Y3Rpb24iIGhyZWY9ImluZGV4Lmh0bWwiLz4KKyAgICA8L21lbnU+CisKKyAgICA8bWVudSByZWY9Im1vZHVsZXMiIC8+CisKKyAgICA8bWVudSByZWY9InJlcG9ydHMiIGluaGVyaXQ9ImJvdHRvbSIgLz4KKyAgPC9ib2R5PgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXNpdGUvcG9tLnhtbCBiL21hdmVuLXNjbS1zaXRlL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNmRkNWIuLjAwMDAwMDAKLS0tIGEvbWF2ZW4tc2NtLXNpdGUvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCEtLQotICB+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAgfiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAgfiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICB+IHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAgfiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gIH4gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICB+IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAgfgotICB+IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICB+Ci0gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICB+IHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gIH4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gIH4gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gIH4gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICB+IHVuZGVyIHRoZSBMaWNlbnNlLgotICAtLT4KLQotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+Ci0gIDxwYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtPC9hcnRpZmFjdElkPgotICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgotICAgIDx2ZXJzaW9uPjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KLSAgPC9wYXJlbnQ+Ci0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXNpdGU8L2FydGlmYWN0SWQ+Ci0gIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+Ci0gIDxuYW1lPk1hdmVuIFNDTTwvbmFtZT4KLSAgPHVybD5odHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9zY208L3VybD4KLSAgPGluY2VwdGlvblllYXI+MjAwMTwvaW5jZXB0aW9uWWVhcj4KLSAgPGRpc3RyaWJ1dGlvbk1hbmFnZW1lbnQ+Ci0gICAgPHNpdGU+Ci0gICAgICA8aWQ+YXBhY2hlLndlYnNpdGU8L2lkPgotICAgICAgPHVybD5zY3BleGU6Ly9wZW9wbGUuYXBhY2hlLm9yZy93d3cvbWF2ZW4uYXBhY2hlLm9yZy9zY208L3VybD4KLSAgICA8L3NpdGU+Ci0gIDwvZGlzdHJpYnV0aW9uTWFuYWdlbWVudD4KLQotICA8YnVpbGQ+Ci0gICAgPGV4dGVuc2lvbnM+Ci0gICAgICA8ZXh0ZW5zaW9uPgotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLndhZ29uPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD53YWdvbi1zc2gtZXh0ZXJuYWw8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjEuMC1hbHBoYS01PC92ZXJzaW9uPgotICAgICAgPC9leHRlbnNpb24+Ci0gICAgPC9leHRlbnNpb25zPgotICA8L2J1aWxkPgotCi0gIDxyZXBvcnRpbmc+Ci0gICAgPGV4Y2x1ZGVEZWZhdWx0cz50cnVlPC9leGNsdWRlRGVmYXVsdHM+Ci0gICAgPCEtLSBUT0RPOiBkaXNhYmxlIGRlcGVuZGVuY2llcyAtLT4KLSAgICA8cGx1Z2lucz4KLSAgICAgIDxwbHVnaW4+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tcHJvamVjdC1pbmZvLXJlcG9ydHMtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICA8Y2hlY2tvdXREaXJlY3RvcnlOYW1lPm1hdmVuLXNjbTwvY2hlY2tvdXREaXJlY3RvcnlOYW1lPgotICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICA8L3BsdWdpbj4KLSAgICA8L3BsdWdpbnM+Ci0gIDwvcmVwb3J0aW5nPgotCi0gIDwhLS0gcmVwZWF0ZWQgaGVyZSBzbyB0aGF0IG1hdmVuLXNpdGUgaXMgbm90IGFwcGVuZGVkIC0tPgotICA8c2NtPgotICAgIDxjb25uZWN0aW9uPnNjbTpzdm46aHR0cDovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi9tYXZlbi9zY20vdHJ1bmsvPC9jb25uZWN0aW9uPgotICAgIDxkZXZlbG9wZXJDb25uZWN0aW9uPnNjbTpzdm46aHR0cHM6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvbWF2ZW4vc2NtL3RydW5rLzwvZGV2ZWxvcGVyQ29ubmVjdGlvbj4KLSAgICA8dXJsPmh0dHA6Ly9zdm4uYXBhY2hlLm9yZy92aWV3Y3ZzLmNnaS9tYXZlbi9zY20vdHJ1bmsvPC91cmw+Ci0gIDwvc2NtPgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L2FjY3VyZXYuYXB0IGIvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L2FjY3VyZXYuYXB0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2Y0MjNkLi4wMDAwMDAwCi0tLSBhL21hdmVuLXNjbS1zaXRlL3NyYy9zaXRlL2FwdC9hY2N1cmV2LmFwdAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSAtLS0tLS0KLSBTQ00gSW1wbGVtZW50YXRpb246IEFjY3VyZXYKLSAtLS0tLS0KLSBPbGl2aWVyIExhbXkKLSAtLS0tLS0KLSAyMDA4LTA4LTEwCi0gLS0tLS0tCi0KLVNDTSBJbXBsZW1lbnRhdGlvbjogQWNjdXJldgotCi0qIEdlbmVyYWwgSW5mbwotCi0gICAgTGluayA6IHt7aHR0cDovL3d3dy5hY2N1cmV2LmNvbS8vfX0KLQotICAgIExpY2Vuc2UgOiBDb21tZXJjaWFsCi0KLSogU0NNIFVybAotCi0gICAgVE8gQ09NUExFVEUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tc2l0ZS9zcmMvc2l0ZS9hcHQvYmF6YWFyLmFwdCBiL21hdmVuLXNjbS1zaXRlL3NyYy9zaXRlL2FwdC9iYXphYXIuYXB0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGE5MGY5Li4wMDAwMDAwCi0tLSBhL21hdmVuLXNjbS1zaXRlL3NyYy9zaXRlL2FwdC9iYXphYXIuYXB0CisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotIC0tLS0tLQotIFNDTSBJbXBsZW1lbnRhdGlvbjogQmF6YWFyCi0gLS0tLS0tCi0gVG9yYmr4cm4gRWlrbGkgU234cmdyYXYKLSAtLS0tLS0KLSAxIEZlYnJ1YXJ5IDIwMDYKLSAtLS0tLS0KLQotU0NNIEltcGxlbWVudGF0aW9uOiBCYXphYXIKLQotKiBHZW5lcmFsIEluZm8KLQotICAgIExpbmsgOiB7e2h0dHA6Ly9iYXphYXItdmNzLm9yZy99fQotCi0gICAgTGljZW5zZSA6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0KLSAgICAiQmF6YWFyLU5HIGlzIGEgZGVjZW50cmFsaXplZCByZXZpc2lvbiBjb250cm9sIHN5c3RlbSBkZXNpZ25lZCB0byBiZSBlYXN5IGZvciBkZXZlbG9wZXJzCi0gICAgYW5kIGVuZCB1c2VycyBhbGlrZS4gRGVjZW50cmFsaXplZCByZXZpc2lvbiBjb250cm9sIHN5c3RlbXMgZ2l2ZSBwZW9wbGUgdGhlIGFiaWxpdHkgdG8gd29yawotICAgIG92ZXIgdGhlIGludGVybmV0IHVzaW5nIHRoZSBiYXphYXIgZGV2ZWxvcG1lbnQgbW9kZWwuIFdoZW4geW91IHVzZSBCYXphYXItTkcsIHlvdSBjYW4gY29tbWl0Ci0gICAgdG8geW91ciBvd24gYnJhbmNoZXMgb2YgeW91ciBmYXZvcml0ZSBmcmVlIHNvZnR3YXJlIHByb2plY3RzIHdpdGhvdXQgbmVlZGluZyBzcGVjaWFsIHBlcm1pc3Npb24uIgotCi0gICAgVGhlIHByb3ZpZGVyIHN1cHBvcnRzIEJhemFhciBmcm9tIHZlcnNpb24gMC43LCB0aG91Z2ggaW1wb3J0YW50IGZlYXR1cmVzIGxpa2Ugc2Z0cCB0cmFuc3BvcnQgd2hlcmUKLSAgICBub3QgaW5jbHVkZWQgYmVmb3JlIHZlcnNpb24gMC44LgotCi0qIFNDTSBVcmwKLQotICAgIFBhdGggb3IgdXJsIHRvIHRoZSBicmFuY2ggbG9jYXRpb24uCi0gICAgU3VwcG9ydGVkIHByb3RvY29sczogRlRQLCBTRlRQLCBBRlRQLCBIVFRQLCBIVFRQUyBhbmQgRklMRS4KLQotLS0tLS0tLQotc2NtOmJhemFhcjp1cmxfdG9fcmVwb3NpdG9yeQotLS0tLS0tLQotCi0qIEV4YW1wbGVzCi0KLS0tLS0tLS0KLXNjbTpiYXphYXI6aHR0cDovL2hvc3QvdjMgKHJlYWQgb25seSkKLXNjbTpiYXphYXI6c2Z0cDovL3VzZXJuYW1lOnBhc3N3b3JkQGhvc3Qvfi9kZXYvcHJvamVjdC92MyAocmVsYXRpdiBwYXRoKQotc2NtOmJhemFhcjpzZnRwOi8vaG9zdDpwb3J0L2hvbWUvc21vcmdyYXYvZGV2L3Byb2plY3QvdjMgKGFic29sdXRlIHBhdGggd2l0aG91dCBleHBsaWNpdCB1c2VybmFtZSkKLXNjbTpiYXphYXI6ZmlsZTovL0M6L2Rldi9wcm9qZWN0L3YzICh3aW5kb3dzIGRyaXZlKQotc2NtOmJhemFhcjpmaWxlOi8vL2hvbWUvc21vcmdyYXYvZGV2L3Byb2plY3QvdjMgKGxpbnV4IGRyaXZlKQotLS0tLS0tLQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L2dpdC5hcHQgYi9tYXZlbi1zY20tc2l0ZS9zcmMvc2l0ZS9hcHQvZ2l0LmFwdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdiYTZkMy4uMDAwMDAwMAotLS0gYS9tYXZlbi1zY20tc2l0ZS9zcmMvc2l0ZS9hcHQvZ2l0LmFwdAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLSAtLS0tLS0KLSBTQ00gSW1wbGVtZW50YXRpb246IEdpdAotIC0tLS0tLQotIE9saXZpZXIgTGFteQotIC0tLS0tLQotIDIwMDgtMDgtMTAKLSAtLS0tLS0KLQotU0NNIEltcGxlbWVudGF0aW9uOiBHaXQKLQotKiBHZW5lcmFsIEluZm8KLQotICAgIExpbmsgOiB7e2h0dHA6Ly9naXQtc2NtLmNvbS99fQotCi0gICAgTGljZW5zZSA6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyCi0KLSogU0NNIFVybAotCi0gICAgRm9yIGFsbCBVUkxzIGJlbG93LCB3ZSB1c2UgYSBjb2xvbiAoOikgYXMgc2VwYXJhdG9yLiBJZiB5b3UgdXNlIGEgY29sb24gZm9yIG9uZSBvZiB0aGUgdmFyaWFibGVzIChlLmcuIGEgd2luZG93cyBwYXRoKSwgdGhlbiB1c2UgYSBwaXBlICh8KSBhcyBzZXBhcmF0b3IuCi0KLS0tLS0tLS0KLXNjbTpnaXQ6Z2l0Oi8vc2VydmVyX25hbWVbOnBvcnRdL3BhdGhfdG9fcmVwb3NpdG9yeQotc2NtOmdpdDpodHRwOi8vc2VydmVyX25hbWVbOnBvcnRdL3BhdGhfdG9fcmVwb3NpdG9yeQotc2NtOmdpdDpodHRwczovL3NlcnZlcl9uYW1lWzpwb3J0XS9wYXRoX3RvX3JlcG9zaXRvcnkKLXNjbTpnaXQ6c3NoOi8vc2VydmVyX25hbWVbOnBvcnRdL3BhdGhfdG9fcmVwb3NpdG9yeQotc2NtOmdpdDpmaWxlOi8vW2hvc3RuYW1lXS9wYXRoX3RvX3JlcG9zaXRvcnkKLS0tLS0tLS0KLQotKiBFeGFtcGxlcwotCi0tLS0tLS0tCi1zY206Z2l0OmdpdDovL2dpdGh1Yi5jb20vcGF0aF90b19yZXBvc2l0b3J5Ci1zY206Z2l0Omh0dHA6Ly9naXRodWIuY29tL3BhdGhfdG9fcmVwb3NpdG9yeQotc2NtOmdpdDpodHRwczovL2dpdGh1Yi5jb20vcGF0aF90b19yZXBvc2l0b3J5Ci1zY206Z2l0OnNzaDovL2dpdGh1Yi5jb20vcGF0aF90b19yZXBvc2l0b3J5Ci1zY206Z2l0OmZpbGU6Ly9sb2NhbGhvc3QvcGF0aF90b19yZXBvc2l0b3J5Ci0tLS0tLS0tCi0KLSogUHJvdmlkZXIgQ29uZmlndXJhdGlvbgotCi0gIFRoZSBwcm92aWRlciBjb25maWd1cmF0aW9uIGlzIGRlZmluZWQgaW4gJHt1c2VyLmhvbWV9Ly5zY20vZ2l0LXNldHRpbmdzLnhtbC4KLQotLS0tLS0tLQotPGdpdC1zZXR0aW5ncz4KLSAgPCEtLSB3aWxsIGhhZCB0aGUgb3B0aW9uIC0tbm8tdmVyaWZ5IHRvIHRoZSBjb21taXQgY29tbWFuZCBjYW4gYmUgaGVscGZ1bGwgdG8gaWdub3JlIHRyYWlsaW5nIHNwYWNlcyBpc3N1ZXMgd2l0aCBjeWd3aW4gYW5kIHRoZSByZWxlYXNlIHBsdWdpbiAtLT4KLSAgPGNvbW1pdE5vVmVyaWZ5PmZhbHNlPC9jb21taXROb1ZlcmlmeT4KLTwvZ2l0LXNldHRpbmdzPgotLS0tLS0tLQotCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tc2l0ZS9zcmMvc2l0ZS9hcHQvZ3VpZGUvaW5kZXguYXB0IGIvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L2d1aWRlL2luZGV4LmFwdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUzOWE4ZS4uMDAwMDAwMAotLS0gYS9tYXZlbi1zY20tc2l0ZS9zcmMvc2l0ZS9hcHQvZ3VpZGUvaW5kZXguYXB0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotIC0tLS0tLQotIEd1aWRlcwotIC0tLS0tLQotIE1hdmVuIFRlYW0KLSAtLS0tLS0KLSAxMiBNYXJjaCAyMDA3Ci0gLS0tLS0tCi0KLUd1aWRlcwotCi0qIHt7e3VzYWdlLmh0bWx9SG93IHRvIHVzZSBNYXZlbi1TQ00gaW4gbXkgYXBwbGljYXRpb24/fX0KLQotICBUaGlzIHt7e3VzYWdlLmh0bWx9ZG9jdW1lbnR9fSBkZXNjcmliZSBBUEkgdXNhZ2UgZm9yIGEgU0NNIGNsaWVudC4KLQotKiB7e3tuZXdfcHJvdmlkZXIuaHRtbH1Ib3cgdG8gd3JpdGUgYSBuZXcgU0NNIHByb3ZpZGVyP319Ci0KLSAgVGhpcyB7e3tuZXdfcHJvdmlkZXIuaHRtbH1kb2N1bWVudH19IGRlc2NyaWJlIHN0ZXAgYnkgc3RlcCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYSBuZXcgU0NNIHByb3Zpc2VyLgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L2luZGV4LmFwdCBiL21hdmVuLXNjbS1zaXRlL3NyYy9zaXRlL2FwdC9pbmRleC5hcHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNjFmYTkuLjAwMDAwMDAKLS0tIGEvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L2luZGV4LmFwdAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSAtLS0tLS0KLSBIb21lCi0gLS0tLS0tCi0gV2ltIERlYmxhdXdlCi0gLS0tLS0tCi0gMSBEZWNlbWJlciAyMDA1Ci0gLS0tLS0tCi0KLU1hdmVuIFNDTQotCi0gIE1hdmVuIFNDTSBzdXBwb3J0cyBNYXZlbiAyLnggcGx1Z2lucyAoZS5nLgotICB7e3todHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9wbHVnaW5zL21hdmVuLXJlbGVhc2UtcGx1Z2luL31tYXZlbi1yZWxlYXNlLXBsdWdpbn19KQotICBhbmQgb3RoZXIgdG9vbHMgKGUuZy4ge3t7aHR0cDovL2NvbnRpbnV1bS5hcGFjaGUub3JnL31Db250aW51dW19fSkKLSAgYnkgcHJvdmlkaW5nIHRoZW0gd2l0aCBhIGNvbW1vbiBBUEkgZm9yIGRvaW5nIFNDTSBvcGVyYXRpb25zLiBZb3UgY2FuIGxvb2sgYXQKLSAge3t7c2Ntcy1vdmVydmlldy5odG1sfXRoZSBsaXN0IG9mIFNDTSdzfX0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcKLSAgTWF2ZW4gU0NNIHdpdGggeW91ciBmYXZvcml0ZSBTQ00gdG9vbC4KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1zaXRlL3NyYy9zaXRlL2FwdC9sb2NhbC5hcHQgYi9tYXZlbi1zY20tc2l0ZS9zcmMvc2l0ZS9hcHQvbG9jYWwuYXB0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2EyYzM3Li4wMDAwMDAwCi0tLSBhL21hdmVuLXNjbS1zaXRlL3NyYy9zaXRlL2FwdC9sb2NhbC5hcHQKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0gLS0tLS0tCi0gU0NNIEltcGxlbWVudGF0aW9uOiBGaWxlIFN5c3RlbQotIC0tLS0tLQotIFdpbSBEZWJsYXV3ZQotIC0tLS0tLQotIDEgRGVjZW1iZXIgMjAwNQotIC0tLS0tLQotCi1TQ00gSW1wbGVtZW50YXRpb246IEZpbGUgU3lzdGVtCi0KLSogR2VuZXJhbCBJbmZvCi0KLSAgICBMaW5rIDogLQotCi0gICAgTGljZW5zZSA6IC0KLQotKiBTQ00gVXJsCi0KLSAgICBGb3IgYWxsIFVSTHMgYmVsb3csIHdlIHVzZSBhIGNvbG9uICg6KSBhcyBzZXBhcmF0b3IuIElmIHlvdSB1c2UgYSBjb2xvbiBmb3Igb25lIG9mIHRoZSB2YXJpYWJsZXMgKGUuZy4gYSB3aW5kb3dzIHBhdGgpLCB0aGVuIHVzZSBhIHBpcGUgKHwpIGFzIHNlcGFyYXRvci4KLQotLS0tLS0tLQotc2NtOmxvY2FsPGRlbGltaXRlcj5wYXRoX3RvX3JlcG9zaXRvcnk8ZGVsaW1pdGVyPm1vZHVsZV9uYW1lCi0tLS0tLS0tCi0KLSAgICA8cGF0aF90b19yZXBvc2l0b3J5PjogVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggdG8gdGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgeW91ciBwb20ueG1sCi0gICAgCi0gICAgPG1vZHVsZV9uYW1lPjogVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHlvdXIgcG9tLnhtbAotCi0KLSogRXhhbXBsZXMKLQotLS0tLS0tLQotc2NtOmxvY2FsOi91c3IvbW9kdWxlczpteV9tb2R1bGUKLXNjbTpsb2NhbHxDOi9qYXZhcHJvamVjdHN8bXlfbW9kdWxlCi0tLS0tLS0tCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tc2l0ZS9zcmMvc2l0ZS9hcHQvbWVyY3VyaWFsLmFwdCBiL21hdmVuLXNjbS1zaXRlL3NyYy9zaXRlL2FwdC9tZXJjdXJpYWwuYXB0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmY4ZTVhLi4wMDAwMDAwCi0tLSBhL21hdmVuLXNjbS1zaXRlL3NyYy9zaXRlL2FwdC9tZXJjdXJpYWwuYXB0CisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotIC0tLS0tLQotIFNDTSBJbXBsZW1lbnRhdGlvbjogTWVyY3VyaWFsIChoZykKLSAtLS0tLS0KLSBSeWFuIERhdW0KLSAtLS0tLS0KLSAxMiBBcHJpbCAyMDA3Ci0gLS0tLS0tCi0KLVNDTSBJbXBsZW1lbnRhdGlvbjogTWVyY3VyaWFsCi0KLSogR2VuZXJhbCBJbmZvCi0KLSAgICBMaW5rIDoge3todHRwOi8vd3d3LnNlbGVuaWMuY29tL21lcmN1cmlhbC93aWtpL319Ci0KLSAgICBMaWNlbnNlIDogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLQotICAgICJNZXJjdXJpYWw6IGEgZmFzdCwgbGlnaHR3ZWlnaHQgU291cmNlIENvbnRyb2wgTWFuYWdlbWVudCBzeXN0ZW0gZGVzaWduZWQgZm9yIGVmZmljaWVudCBoYW5kbGluZyBvZiB2ZXJ5IGxhcmdlIGRpc3RyaWJ1dGVkIHByb2plY3RzLiIKLQotICAgIFRoaXMgcHJvdmlkZXIgc3VwcG9ydHMgdmVyc2lvbiAwLjkuMiBhbmQgZ3JlYXRlciBvZiBNZXJjdXJpYWwuCi0KLSogU0NNIFVybAotCi0gICAgUGF0aCBvciB1cmwgdG8gdGhlIGJyYW5jaCBsb2NhdGlvbi4KLSAgICBTdXBwb3J0ZWQgcHJvdG9jb2xzOiBIVFRQLCBIVFRQUywgRklMRSwgYW5kIGxvY2FsIHBhdGguCi0KLS0tLS0tLS0KLXNjbTpoZzp1cmxfdG9fcmVwb3NpdG9yeS9sb2NhbF9yZXBvc2l0b3J5X2RpcmVjdG9yeQotLS0tLS0tLQotCi0qIEV4YW1wbGVzCi0KLS0tLS0tLS0KLXNjbTpoZzpodHRwOi8vaG9zdC92Mwotc2NtOmhnOmZpbGU6Ly9DOi9kZXYvcHJvamVjdC92MyAod2luZG93cyBkcml2ZSkKLXNjbTpoZzpmaWxlOi8vL2hvbWUvc21vcmdyYXYvZGV2L3Byb2plY3QvdjMgKGxpbnV4IGRyaXZlKQotc2NtOmhnOi9ob21lL3Ntb3JncmF2L2Rldi9wcm9qZWN0L3YzIChsb2NhbCBkaXJlY3RvcnkpCi0tLS0tLS0tCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tc2l0ZS9zcmMvc2l0ZS9hcHQvc2NtLXVybC1mb3JtYXQuYXB0IGIvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L3NjbS11cmwtZm9ybWF0LmFwdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQzOGMxMi4uMDAwMDAwMAotLS0gYS9tYXZlbi1zY20tc2l0ZS9zcmMvc2l0ZS9hcHQvc2NtLXVybC1mb3JtYXQuYXB0CisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIC0tLS0tLQotIFNDTSBVUkwgZm9ybWF0Ci0gLS0tLS0tCi0gRW1tYW51ZWwgVmVuaXNzZQotIC0tLS0tLQotIDI4IEp1bmUgMjAwNQotIC0tLS0tLQotCi1TQ00gVVJMIEZvcm1hdAotCi0qIFNDTSBVcmwKLQotICBUaGUgZ2VuZXJhbCBmb3JtYXQgZm9yIGEgU0NNIFVybCBpcwotCi0tLS0tLS0tCi1zY206PHNjbV9wcm92aWRlcj48ZGVsaW1pdGVyPjxwcm92aWRlcl9zcGVjaWZpY19wYXJ0PgotLS0tLS0tLQotCi0gIEFzIGRlbGltaXRlciB5b3UgY2FuIHVzZSBlaXRoZXIgY29sb24gJzonIG9yLCBpZiB5b3UgdXNlIGEgY29sb24gZm9yIG9uZQotICBvZiB0aGUgdmFyaWFibGVzIChlLmcuIGEgd2luZG93cyBwYXRoKSwgeW91IGNhbiB1c2UgYSBwaXBlICd8Jy4KLQotICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb3ZpZGVyIHNwZWNpZmljIHBhcnQsIHNlZSB0aGUgYXBwcm9wcmlhdGUKLSAge3t7c2Ntcy1vdmVydmlldy5odG1sfVNDTSBpbXBsZW1lbnRhdGlvbn19LgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L3NjbXMtb3ZlcnZpZXcuYXB0IGIvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L3NjbXMtb3ZlcnZpZXcuYXB0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjllNDY4Li4wMDAwMDAwCi0tLSBhL21hdmVuLXNjbS1zaXRlL3NyYy9zaXRlL2FwdC9zY21zLW92ZXJ2aWV3LmFwdAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLSAtLS0tLS0KLSBPdmVydmlldyBvZiBTQ00ncwotIC0tLS0tLQotIFdpbSBEZWJsYXV3ZQotIC0tLS0tLQotIDEgRGVjZW1iZXIgMjAwNQotIC0tLS0tLQotCi1PdmVydmlldyBvZiBTQ00ncwotCi0gIE1hdmVuIFNDTSBzdXBwb3J0cyBtYW55IFNDTSdzLiBUaGlzIGlzIGEgbGlzdCBvZiBhbGwgY3VycmVudGx5IGtub3duIFNDTSdzOgotCi0qIEZ1bGx5IGltcGxlbWVudGVkIFNDTSdzCi0KLSAgKiB7e3tiYXphYXIuaHRtbH1CYXphYXJ9fQotCi0gICoge3t7Y3ZzLmh0bWx9Q1ZTfX0KLQotICAqIHt7e21lcmN1cmlhbC5odG1sfU1lcmN1cmlhbH19Ci0KLSAgKiB7e3twZXJmb3JjZS5odG1sfVBlcmZvcmNlfX0KLQotICAqIHt7e3N0YXJ0ZWFtLmh0bWx9U3RhclRlYW19fQotCi0gICoge3t7c3VidmVyc2lvbi5odG1sfVN1YnZlcnNpb259fQotCi0gICoge3t7c3luZXJneS5odG1sfUNNIFN5bmVyZ3l9fQotCi0qIFBhcnRpYWxseSBpbXBsZW1lbnRlZCBTQ00ncwotCi0gICoge3t7YWNjdXJldi5odG1sfUFjY3VyZXZ9fQotCi0gICoge3t7Y2xlYXJjYXNlLmh0bWx9Q2xlYXJDYXNlfX0KLSAgCi0gICoge3t7Z2l0Lmh0bWx9R2l0fX0KLQotICAqIHt7e2xvY2FsLmh0bWx9RmlsZSBzeXN0ZW19fQotCi0gICoge3t7dnNzLmh0bWx9VmlzdWFsIFNvdXJjZSBTYWZlfX0KLQotKiBOb3QgaW1wbGVtZW50ZWQgU0NNJ3MKLQotICAgIFRoaXMgaXMgYSBsaXN0IG9mIGFsbCB0aGUga25vd24gU0NNJ3MgdGhhdCBhcmUgbm90IGltcGxlbWVudGVkIGN1cnJlbnRseS4KLQotICAqIEFlZ2lzCi0KLSAgKiBBcmNoCi0KLSAgKiBCaXRLZWVwZXIKLQotICAqIENsZWFyQ2FzZSBNdWx0aXNpdGUKLQotICAqIENvZGUgQ28tb3AKLQotICAqIERhcmNzCi0KLSAgKiBNb25vdG9uZQotCi0gICogT3BlbkNNCi0KLSAgKiBQdXJlQ00KLQotICAqIFNlcmVuYSBQVkNTIC8gRGltZW5zaW9uCi0KLSAgKiBTdGFydGVhbSBFbnRlcnByaXNlCi0KLSAgKiBTdmsKLQotICAqIFZlc3RhCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tc2l0ZS9zcmMvc2l0ZS9hcHQvc2NtdG9vbHMuYXB0IGIvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L3NjbXRvb2xzLmFwdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQzNmFiNC4uMDAwMDAwMAotLS0gYS9tYXZlbi1zY20tc2l0ZS9zcmMvc2l0ZS9hcHQvc2NtdG9vbHMuYXB0CisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLSAtLS0tLS0KLSBTQ00gdG9vbHMKLSAtLS0tLS0KLSBFbW1hbnVlbCBWZW5pc3NlCi0gLS0tLS0tCi0KLUFjY3VyZXYKLQotICAgIExpbmsgOiB7e2h0dHA6Ly93d3cuYWNjdXJldi5jb20vfX0KLQotICAgIExpY2Vuc2UgOiBDb21tZXJjaWFsCi0KLUFlZ2lzCi0KLSAgICBMaW5rIDoge3todHRwOi8vYWVnaXMuc291cmNlZm9yZ2UubmV0L319Ci0KLSAgICBMaWNlbnNlIDogR1BMCi0KLUFyY2gKLQotICAgIExpbmsgOiB7e2h0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nbnUtYXJjaC99fQotCi0gICAgTGljZW5zZSA6IEdQTAotCi1CaXRLZWVwZXIKLQotICAgIExpbmsgOiB7e2h0dHA6Ly93d3cuYml0a2VlcGVyLmNvbS99fQotCi0gICAgTGljZW5zZSA6IENvbW1lcmNpYWwKLQotQmF6YWFyCi0KLSAgICBMaW5rIDoge3todHRwOi8vYmF6YWFyLmNhbm9uaWNhbC5jb20vfX0KLQotICAgIExpY2Vuc2UgOiBHUEwKLQotICAgIFN0YXR1cyA6IDw8U3RhcnRlZD4+Ci0KLUNsZWFyY2FzZQotCi0gICAgTGluayA6IHt7aHR0cDovL3d3dy0zMDYuaWJtLmNvbS9zb2Z0d2FyZS9hd2R0b29scy9jbGVhcmNhc2UvfX0KLQotICAgIExpY2Vuc2UgOiBDb21tZXJjaWFsCi0KLSAgICBTdGF0dXMgOiA8PFN0YXJ0ZWQ+PgotCi1DbGVhcmNhc2UgTXVsdGlzaXRlCi0KLSAgICBMaW5rIDoge3todHRwOi8vd3d3LTMwNi5pYm0uY29tL3NvZnR3YXJlL2F3ZHRvb2xzL2NsZWFyY2FzZS9tdWx0aXNpdGUvfX0KLQotICAgIExpY2Vuc2UgOiBDb21tZXJjaWFsCi0KLUNNIFN5bmVyZ3kKLQotICAgIExpbmsgOiB7e2h0dHA6Ly93d3cudGVsZWxvZ2ljLmNvbS9wcm9kdWN0cy9zeW5lcmd5L319Ci0KLSAgICBMaWNlbnNlIDogQ29tbWVyY2lhbAotCi0gICAgU3RhdHVzIDogPDxTdGFydGVkPj4KLQotQ29kZSBDby1vcAotCi0gICAgTGluayA6IHt7aHR0cDovL3d3dy5yZWxpc29mdC5jb20vY29fb3AvfX0KLQotICAgIExpY2Vuc2UgOiBDb21tZXJjaWFsCi0KLUNWUwotCi0gICAgTGluayA6IHt7aHR0cHM6Ly93d3cuY3ZzaG9tZS5vcmcvfX0KLQotICAgIExpY2Vuc2UgOiBHUEwKLQotKiBJbXBsZW1lbnRhdGlvbiAxIDogY29tbWFuZCBsaW5lCi0KLSAgICBTdGF0dXMgOiA8PFN0YXJ0ZWQ+PgotCi0qIEltcGxlbWVudGF0aW9uIDIgOiBwdXJlIGphdmEgd2l0aCBjdnNsaWIKLQotICAgIFN0YXR1cyA6IDw8U3RhcnRlZD4+Ci0KLURhcmNzCi0KLSAgICBMaW5rIDoge3todHRwOi8vYWJyaWRnZWdhbWUub3JnL2RhcmNzL319Ci0KLSAgICBMaWNlbnNlIDogR1BMCi0KLUZpbGUgc3lzdGVtCi0KLSAgICBMaW5rIDogTm9uZQotCi0gICAgTGljZW5zZSA6IE5vbmUKLQotICAgIFN0YXR1cyA6IDw8U3RhcnRlZD4+Ci0KLU1lcmN1cmlhbAotCi0gICAgTGluayA6IHt7aHR0cDovL3d3dy5zZWxlbmljLmNvbS9tZXJjdXJpYWwvd2lraS99fQotCi0gICAgTGljZW5zZSA6IEdQTAotCi0gICAgU3RhdHVzIDogPDxTdGFydGVkPj4KLQotTW9ub3RvbmUKLQotICAgIExpbmsgOiB7e2h0dHA6Ly93d3cudmVuZ2UubmV0L21vbm90b25lL319Ci0KLSAgICBMaWNlbnNlIDogR1BMCi0KLU9wZW5DTQotCi0gICAgTGluayA6IHt7aHR0cDovL3d3dy5vcGVuY20ub3JnL319Ci0KLSAgICBMaWNlbnNlIDogR1BMCi0KLVBlcmZvcmNlCi0KLSAgICBMaW5rIDoge3todHRwOi8vd3d3LnBlcmZvcmNlLmNvbS99fQotCi0gICAgTGljZW5zZSA6IENvbW1lcmNpYWwKLQotICAgIEl0IGlzIGxpY2Vuc2VkIGF0IG5vIGNoYXJnZSBmb3IgdXNlIG9uIG9wZW4gc291cmNlIHByb2plY3RzLgotCi0gICAgU3RhdHVzIDogPDxTdGFydGVkPj4KLQotUHVyZUNNCi0KLSAgICBMaW5rIDoge3todHRwOi8vd3d3LnB1cmVjbS5jb20vfX0KLQotICAgIExpY2Vuc2UgOiBDb21tZXJjaWFsCi0KLVNlcmVuYSBQVkNTIC8gRGltZW5zaW9uCi0KLSAgICBMaW5rIDoge3todHRwOi8vd3d3LnNlcmVuYS5jb20vUHJvZHVjdHMvZGltZW5zaW9ucy9ob21lLmFzcH19IHt7aHR0cDovL3d3dy5zeW5lcmdleC5jb20vc29sdXRpb25zL3B2Y3MvZGVmYXVsdC5hc3B9fQotCi0gICAgTGljZW5zZSA6IENvbW1lcmNpYWwKLQotU3RhcnRlYW0KLQotICAgIExpbmsgOiB7e2h0dHA6Ly93d3cuYm9ybGFuZC5jb20vdXMvcHJvZHVjdHMvc3RhcnRlYW0vaW5kZXguaHRtbH19Ci0KLSAgICBMaWNlbnNlIDogQ29tbWVyY2lhbAotCi0gICAgU3RhdHVzIDogPDxTdGFydGVkPj4KLQotU3RhcnRlYW0gRW50ZXJwcmlzZQotCi0gICAgTGluayA6IHt7aHR0cDovL3d3dy5ib3JsYW5kLmNvbS91cy9wcm9kdWN0cy9zdGFydGVhbS9pbmRleC5odG1sfX0KLQotICAgIExpY2Vuc2UgOiBDb21tZXJjaWFsCi0KLVN1YnZlcnNpb24KLQotICAgIExpbmsgOiB7e2h0dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jpcy5vcmcvfX0KLQotICAgIExpY2Vuc2UgOiBDb2xsYWJOZXQvVGlncmlzLm9yZyBBcGFjaGUtc3R5bGUgbGljZW5zZQotCi0qIEltcGxlbWVudGF0aW9uIDEgOiBjb21tYW5kIGxpbmUKLQotICAgIFN0YXR1cyA6IDw8U3RhcnRlZD4+Ci0KLSogSW1wbGVtZW50YXRpb24gMiA6IHB1cmUgamF2YSB3aXRoIHt7e2h0dHA6Ly90bWF0ZS5vcmcvc3ZuL31qYXZhc3ZufX0KLQotU3ZrCi0KLSAgICBMaW5rIDoge3todHRwOi8vc3ZrLmVsaXh1cy5vcmcvfX0KLQotICAgIExpY2Vuc2UgOiA/Pz8KLQotVmVzdGEKLQotICAgIExpbmsgOiB7e2h0dHA6Ly93d3cudmVzdGFzeXMub3JnL319Ci0KLSAgICBMaWNlbnNlIDogTEdQTAotCi1WaXN1YWwgU291cmNlIFNhZmUKLQotICAgIExpbmsgOiB7e2h0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vc3NhZmUvfX0KLQotICAgIExpY2Vuc2UgOiBDb21tZXJjaWFsCi0KLSAgICBTdGF0dXMgOiA8PFN0YXJ0ZWQ+PgotCi0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1zaXRlL3NyYy9zaXRlL2FwdC92c3MuYXB0IGIvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L3Zzcy5hcHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyY2Q3MGEuLjAwMDAwMDAKLS0tIGEvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L3Zzcy5hcHQKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0gLS0tLS0tCi0gU0NNIEltcGxlbWVudGF0aW9uOiBWaXN1YWwgU291cmNlIFNhZmUKLSAtLS0tLS0KLSBXaW0gRGVibGF1d2UKLSAtLS0tLS0KLSAxIERlY2VtYmVyIDIwMDUKLSAtLS0tLS0KLQotU0NNIEltcGxlbWVudGF0aW9uOiBWaXN1YWwgU291cmNlIFNhZmUKLQotKiBHZW5lcmFsIEluZm8KLQotICAgIExpbmsgOiB7e2h0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vc3NhZmUvfX0KLQotICAgIExpY2Vuc2UgOiBDb21tZXJjaWFsCi0KLSogU0NNIFVybAotCi0gICAgQmVjYXVzZSBhIGNvbG9uIGlzIHVzZWQgZm9yIG9uZSBvZiB0aGUgdmFyaWFibGVzIChhIHdpbmRvd3MgcGF0aCksIGEgcGlwZSAofCkgaXMgdXNlZCBhcyB0aGUgZGVsaW1pdGVyLgotCi0gICAgVGhlIGdlbmVyYWwgZm9ybWF0IGZvciBhIFZTUyBTQ00gVXJsIGlzCi0KLS0tLS0tLS0KLXNjbTp2c3N8cGF0aF90b19yZXBvc2l0b3J5fC9tb2R1bGVfbmFtZQotLS0tLS0tLQotCi0gICAgVGhlIHRoaXJkIHZhcmlhYmxlIGlzIHRoZSBwYXRoIHRvIHRoZSBWaXN1YWwgU291cmNlIFNhZmUgcmVwb3NpdG9yeSAod2hlcmUgc3Jjc2FmZS5pbmkgcmVzaWRlcykuCi0KLSAgICBOb3RlIHRoYXQgYSBmb3J3YXJkIHNsYXNoIGlzIG5lY2Vzc2FyeSBiZWZvcmUgdGhlIG1vZHVsZSBuYW1lIGluIHRoZSBmaW5hbCB2YXJpYWJsZS4KLQotKiBFeGFtcGxlcwotCi0tLS0tLS0tCi1zY206dnNzfEM6XFByb2dyYW0gRmlsZXNcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW9cVlNTfC9Tb21lUHJvamVjdAotLS0tLS0tLQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXRlc3QvcG9tLnhtbCBiL21hdmVuLXNjbS10ZXN0L3BvbS54bWwKaW5kZXggOWFlZmM5OC4uZjRjMjZjMCAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXRlc3QvcG9tLnhtbAorKysgYi9tYXZlbi1zY20tdGVzdC9wb20ueG1sCkBAIC0xLDQgKzEsNiBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IS0tCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8IS0tCiAgIH4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQogICB+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogICB+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCkBAIC0xOCwxNSArMjAsMTkgQEAKICAgLS0+CiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKICAgPHBhcmVudD4KLSAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY208L2FydGlmYWN0SWQ+CiAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+Ci0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwogICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tdGVzdDwvYXJ0aWZhY3RJZD4KKwogICA8bmFtZT5NYXZlbiBTQ00gVGVzdDwvbmFtZT4KLSAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgorICA8ZGVzY3JpcHRpb24+VGVzdHMgbGlicmFyeSB0byB0ZXN0IGFsbCBTQ00gUHJvdmlkZXIgaW1wbGVtZW50YXRpb25zLjwvZGVzY3JpcHRpb24+CisKICAgPGRlcGVuZGVuY2llcz4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9TY21UY2tUZXN0Q2FzZS5qYXZhIGIvbWF2ZW4tc2NtLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9TY21UY2tUZXN0Q2FzZS5qYXZhCmluZGV4IDJjNTgyYzcuLjY5ZGM4MzAgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vU2NtVGNrVGVzdENhc2UuamF2YQorKysgYi9tYXZlbi1zY20tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL1NjbVRja1Rlc3RDYXNlLmphdmEKQEAgLTQyLDYgKzQyLDcgQEAKICAqIDwvcD4KICAqCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzp0b3Jiam9ybkBzbW9yZ3Jhdi5vcmciPlRvcmJq77+9cm4gRWlrbGkgU23vv71yZ3JhdjwvYT4KKyAqIEB2ZXJzaW9uICRJZCQKICAqLwogcHVibGljIGFic3RyYWN0IGNsYXNzIFNjbVRja1Rlc3RDYXNlCiAgICAgZXh0ZW5kcyBTY21UZXN0Q2FzZQpAQCAtODYsNiArODcsNyBAQAogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGluaXRSZXBvKCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbjsKIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewpAQCAtMTUxLDcgKzE1Myw3IEBACiAKICAgICAgICAgTGlzdCBhZGRlZEZpbGVzID0gcmVzdWx0LmdldEFkZGVkRmlsZXMoKTsKIAotICAgICAgICBpZiAoIG5ldyBGaWxlKCB3b3JraW5nRGlyZWN0b3J5LCBmaWxlLmdldFBhdGgoKSkuaXNGaWxlKCkgKQorICAgICAgICBpZiAoIG5ldyBGaWxlKCB3b3JraW5nRGlyZWN0b3J5LCBmaWxlLmdldFBhdGgoKSApLmlzRmlsZSgpICkKICAgICAgICAgewogICAgICAgICAgICAgLy8gRG9uJ3QgY2hlY2sgZGlyZWN0b3J5IGFkZCBiZWNhdXNlIHNvbWUgU0NNIHRvb2xzIGlnbm9yZSBpdAogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCAiRXhwZWN0ZWQgMSBmaWxlIGluIHRoZSBhZGRlZCBmaWxlcyBsaXN0ICIgKyBhZGRlZEZpbGVzLCAxLCBhZGRlZEZpbGVzLnNpemUoKSApOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9TY21UZXN0Q2FzZS5qYXZhIGIvbWF2ZW4tc2NtLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9TY21UZXN0Q2FzZS5qYXZhCmluZGV4IDdmNDc1OTMuLjE1N2UwNzcgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vU2NtVGVzdENhc2UuamF2YQorKysgYi9tYXZlbi1zY20tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL1NjbVRlc3RDYXNlLmphdmEKQEAgLTIwNiw2ICsyMDYsMTYgQEAKICAgICAgICAgU2NtVGVzdENhc2UuZGVidWdFeGVjdXRlID0gZGVidWdFeGVjdXRlOwogICAgIH0KIAorICAgIC8qKgorICAgICAqIEV4ZWN1dGUgdGhlIGNvbW1hbmQgbGluZQorICAgICAqCisgICAgICogQHBhcmFtIHdvcmtpbmdEaXJlY3Rvcnkgbm90IG51bGwKKyAgICAgKiBAcGFyYW0gZXhlY3V0YWJsZSBub3QgbnVsbCwgc2hvdWxkIGJlIGEgc3lzdGVtIGNvbW1hbmQKKyAgICAgKiBAcGFyYW0gYXJndW1lbnRzIG5vdCBudWxsCisgICAgICogQHRocm93cyBFeGNlcHRpb24gaWYgYW55CisgICAgICogQHNlZSBDb21tYW5kTGluZVV0aWxzI2V4ZWN1dGVDb21tYW5kTGluZShDb21tYW5kbGluZSwgb3JnLmNvZGVoYXVzLnBsZXh1cy51dGlsLmNsaS5TdHJlYW1Db25zdW1lciwKKyAgICAgKiBvcmcuY29kZWhhdXMucGxleHVzLnV0aWwuY2xpLlN0cmVhbUNvbnN1bWVyKQorICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBleGVjdXRlKCBGaWxlIHdvcmtpbmdEaXJlY3RvcnksIFN0cmluZyBleGVjdXRhYmxlLCBTdHJpbmcgYXJndW1lbnRzICkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKQEAgLTMxNiw0ICszMjYsMjMgQEAKICAgICAgICAgfQogICAgICAgICBhc3NlcnRFcXVhbHMoIGNsLnRvU3RyaW5nKCksIGFjdHVhbENvbW1hbmQudG9TdHJpbmcoKSApOwogICAgIH0KKworICAgIC8qKgorICAgICAqCisgICAgICogQHBhcmFtIGNtZCB0aGUgZXhlY3V0YWJsZSB0byBydW4sIG5vdCBudWxsLgorICAgICAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTeXN0ZW1DbWQoIFN0cmluZyBjbWQgKQorICAgIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIFJ1bnRpbWUuZ2V0UnVudGltZSgpLmV4ZWMoIGNtZCApOworCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoIElPRXhjZXB0aW9uIGUgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL21hbmFnZXIvU2NtTWFuYWdlclN0dWIuamF2YSBiL21hdmVuLXNjbS10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vbWFuYWdlci9TY21NYW5hZ2VyU3R1Yi5qYXZhCmluZGV4IGQ5MjM2ZjcuLjUyODZmZGEgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vbWFuYWdlci9TY21NYW5hZ2VyU3R1Yi5qYXZhCisrKyBiL21hdmVuLXNjbS10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vbWFuYWdlci9TY21NYW5hZ2VyU3R1Yi5qYXZhCkBAIC01MCw3ICs1MCw4IEBACiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIC8qKgotICogU3R1YiBpbXBsZW1lbnRhdGlvbiBvZiBTY21NYW5hZ2VyIGZvciB1bml0IHRlc3RpbmcgcHVycG9zZXMuIEl0IGFsbG93cyBzZXR0aW5nIHRoZSBleHBlY3RlZCByZXN1bHRzIHRoYXQgdGhlIGRpZmZlcmVudCBtZXRob2RzIHdpbGwgcmV0dXJuLgorICogU3R1YiBpbXBsZW1lbnRhdGlvbiBvZiBTY21NYW5hZ2VyIGZvciB1bml0IHRlc3RpbmcgcHVycG9zZXMuIAorICogSXQgYWxsb3dzIHNldHRpbmcgdGhlIGV4cGVjdGVkIHJlc3VsdHMgdGhhdCB0aGUgZGlmZmVyZW50IG1ldGhvZHMgd2lsbCByZXR1cm4uCiAgKiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IFN0dWJzIG9uIDxhIGhyZWY9Imh0dHA6Ly9tYXJ0aW5mb3dsZXIuY29tL2JsaWtpL1Rlc3REb3VibGUuaHRtbCI+TWFydGluIEZvd2xlcidzIFRlc3REb3VibGU8L2E+CiAgKgogICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86Y2FybG9zQGFwYWNoZS5vcmciPkNhcmxvcyBTYW5jaGV6PC9hPgpAQCAtODYsMTEgKzg3LDEzIEBACiAgICAgICAgIHJldHVybiBzY21Qcm92aWRlcjsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIHNldFNjbVByb3ZpZGVyKCBTdHJpbmcgcHJvdmlkZXJUeXBlLCBTY21Qcm92aWRlciBwcm92aWRlciApCiAgICAgewogICAgICAgICBzZXRTY21Qcm92aWRlciggcHJvdmlkZXIgKTsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIHNldFNjbVByb3ZpZGVySW1wbGVtZW50YXRpb24oIFN0cmluZyBwcm92aWRlclR5cGUsIFN0cmluZyBwcm92aWRlckltcGxlbWVudGF0aW9uICkKICAgICB7CiAgICAgICAgIC8vRG8gbm90aGluZyB0aGVyZQpAQCAtMTI2LDE4ICsxMjksMTQgQEAKICAgICAgICAgcmV0dXJuIG1lc3NhZ2VzOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gZ2V0U2NtUmVwb3NpdG9yeSgpCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU2NtUmVwb3NpdG9yeSBtYWtlU2NtUmVwb3NpdG9yeSggU3RyaW5nIHNjbVVybCApCiAgICAgICAgIHRocm93cyBTY21SZXBvc2l0b3J5RXhjZXB0aW9uLCBOb1N1Y2hTY21Qcm92aWRlckV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIGdldFNjbVJlcG9zaXRvcnkoKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIGdldFNjbVJlcG9zaXRvcnkoKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFNjbVJlcG9zaXRvcnkgbWFrZVByb3ZpZGVyU2NtUmVwb3NpdG9yeSggU3RyaW5nIHByb3ZpZGVyVHlwZSwgRmlsZSBwYXRoICkKICAgICAgICAgdGhyb3dzIFNjbVJlcG9zaXRvcnlFeGNlcHRpb24sIFVua25vd25SZXBvc2l0b3J5U3RydWN0dXJlLCBOb1N1Y2hTY21Qcm92aWRlckV4Y2VwdGlvbgogICAgIHsKQEAgLTE1NSw3MiArMTU0LDU2IEBACiAgICAgICAgIHJldHVybiBnZXRNZXNzYWdlcygpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gZ2V0U2NtUHJvdmlkZXIoKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFNjbVByb3ZpZGVyIGdldFByb3ZpZGVyQnlVcmwoIFN0cmluZyBzY21VcmwgKQogICAgICAgICB0aHJvd3MgU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbiwgTm9TdWNoU2NtUHJvdmlkZXJFeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBnZXRTY21Qcm92aWRlcigpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gZ2V0U2NtUHJvdmlkZXIoKQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFNjbVByb3ZpZGVyIGdldFByb3ZpZGVyQnlUeXBlKCBTdHJpbmcgcHJvdmlkZXJUeXBlICkKICAgICAgICAgdGhyb3dzIE5vU3VjaFNjbVByb3ZpZGVyRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gZ2V0U2NtUHJvdmlkZXIoKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIGdldFNjbVByb3ZpZGVyKCkKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTY21Qcm92aWRlciBnZXRQcm92aWRlckJ5UmVwb3NpdG9yeSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5ICkKICAgICAgICAgdGhyb3dzIE5vU3VjaFNjbVByb3ZpZGVyRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gZ2V0U2NtUHJvdmlkZXIoKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEFkZFNjbVJlc3VsdCBhZGQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS5hZGQoIHJlcG9zaXRvcnksIGZpbGVTZXQgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEFkZFNjbVJlc3VsdCBhZGQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3ZpZGVyQnlSZXBvc2l0b3J5KCByZXBvc2l0b3J5ICkuYWRkKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBtZXNzYWdlICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBCcmFuY2hTY21SZXN1bHQgYnJhbmNoKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIGJyYW5jaE5hbWUgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm92aWRlckJ5UmVwb3NpdG9yeSggcmVwb3NpdG9yeSApLmJyYW5jaCggcmVwb3NpdG9yeSwgZmlsZVNldCwgYnJhbmNoTmFtZSApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQnJhbmNoU2NtUmVzdWx0IGJyYW5jaCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyBicmFuY2hOYW1lLCBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3ZpZGVyQnlSZXBvc2l0b3J5KCByZXBvc2l0b3J5ICkuYnJhbmNoKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBicmFuY2hOYW1lLCBtZXNzYWdlICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGFuZ2VMb2dTY21SZXN1bHQgY2hhbmdlTG9nKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgRGF0ZSBzdGFydERhdGUsIERhdGUgZW5kRGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bURheXMsIFNjbUJyYW5jaCBicmFuY2ggKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC0yMjksOSArMjEyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hhbmdlTG9nU2NtUmVzdWx0IGNoYW5nZUxvZyggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIERhdGUgc3RhcnREYXRlLCBEYXRlIGVuZERhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1EYXlzLCBTY21CcmFuY2ggYnJhbmNoLCBTdHJpbmcgZGF0ZVBhdHRlcm4gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC0yNDAsOSArMjIxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCwgZGF0ZVBhdHRlcm4gKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoYW5nZUxvZ1NjbVJlc3VsdCBjaGFuZ2VMb2coIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHN0YXJ0VmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiBlbmRWZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtMjUwLDkgKzIyOSw3IEBACiAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3ZpZGVyQnlSZXBvc2l0b3J5KCByZXBvc2l0b3J5ICkuY2hhbmdlTG9nKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBzdGFydFZlcnNpb24sIGVuZFZlcnNpb24gKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoYW5nZUxvZ1NjbVJlc3VsdCBjaGFuZ2VMb2coIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHN0YXJ0UmV2aXNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjbVZlcnNpb24gZW5kUmV2aXNpb24sIFN0cmluZyBkYXRlUGF0dGVybiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTI2MSw1NCArMjM4LDQyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlUGF0dGVybiApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hlY2tJblNjbVJlc3VsdCBjaGVja0luKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIG1lc3NhZ2UgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm92aWRlckJ5UmVwb3NpdG9yeSggcmVwb3NpdG9yeSApLmNoZWNrSW4oIHJlcG9zaXRvcnksIGZpbGVTZXQsIG1lc3NhZ2UgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoZWNrSW5TY21SZXN1bHQgY2hlY2tJbiggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gcmV2aXNpb24sIFN0cmluZyBtZXNzYWdlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS5jaGVja0luKCByZXBvc2l0b3J5LCBmaWxlU2V0LCByZXZpc2lvbiwgbWVzc2FnZSApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hlY2tPdXRTY21SZXN1bHQgY2hlY2tPdXQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS5jaGVja091dCggcmVwb3NpdG9yeSwgZmlsZVNldCApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hlY2tPdXRTY21SZXN1bHQgY2hlY2tPdXQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm92aWRlckJ5UmVwb3NpdG9yeSggcmVwb3NpdG9yeSApLmNoZWNrT3V0KCByZXBvc2l0b3J5LCBmaWxlU2V0LCB2ZXJzaW9uICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGVja091dFNjbVJlc3VsdCBjaGVja091dCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIGJvb2xlYW4gcmVjdXJzaXZlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS5jaGVja091dCggcmVwb3NpdG9yeSwgZmlsZVNldCwgcmVjdXJzaXZlICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGVja091dFNjbVJlc3VsdCBjaGVja091dCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gcmVjdXJzaXZlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtMzE2LDkgKzI4MSw3IEBACiAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3ZpZGVyQnlSZXBvc2l0b3J5KCByZXBvc2l0b3J5ICkuY2hlY2tPdXQoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHZlcnNpb24sIHJlY3Vyc2l2ZSApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgRGlmZlNjbVJlc3VsdCBkaWZmKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiBzdGFydFZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiBlbmRWZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtMzI2LDQ1ICsyODksMzUgQEAKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS5kaWZmKCByZXBvc2l0b3J5LCBmaWxlU2V0LCBzdGFydFZlcnNpb24sIGVuZFZlcnNpb24gKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEVkaXRTY21SZXN1bHQgZWRpdCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm92aWRlckJ5UmVwb3NpdG9yeSggcmVwb3NpdG9yeSApLmVkaXQoIHJlcG9zaXRvcnksIGZpbGVTZXQgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEV4cG9ydFNjbVJlc3VsdCBleHBvcnQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS5leHBvcnQoIHJlcG9zaXRvcnksIGZpbGVTZXQgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEV4cG9ydFNjbVJlc3VsdCBleHBvcnQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm92aWRlckJ5UmVwb3NpdG9yeSggcmVwb3NpdG9yeSApLmV4cG9ydCggcmVwb3NpdG9yeSwgZmlsZVNldCwgdmVyc2lvbiApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgRXhwb3J0U2NtUmVzdWx0IGV4cG9ydCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyBvdXRwdXREaXJlY3RvcnkgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5leHBvcnQoIHJlcG9zaXRvcnksIGZpbGVTZXQsIG91dHB1dERpcmVjdG9yeSApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgRXhwb3J0U2NtUmVzdWx0IGV4cG9ydCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG91dHB1dERpcmVjdG9yeSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTM3Miw5MCArMzI1LDcwIEBACiAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3ZpZGVyQnlSZXBvc2l0b3J5KCByZXBvc2l0b3J5ICkuZXhwb3J0KCByZXBvc2l0b3J5LCBmaWxlU2V0LCB2ZXJzaW9uLCBvdXRwdXREaXJlY3RvcnkgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIExpc3RTY21SZXN1bHQgbGlzdCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIGJvb2xlYW4gcmVjdXJzaXZlLCBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm92aWRlckJ5UmVwb3NpdG9yeSggcmVwb3NpdG9yeSApLmxpc3QoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHJlY3Vyc2l2ZSwgdmVyc2lvbiApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgUmVtb3ZlU2NtUmVzdWx0IHJlbW92ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyBtZXNzYWdlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS5yZW1vdmUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIG1lc3NhZ2UgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0YXR1c1NjbVJlc3VsdCBzdGF0dXMoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS5zdGF0dXMoIHJlcG9zaXRvcnksIGZpbGVTZXQgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFRhZ1NjbVJlc3VsdCB0YWcoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgdGFnTmFtZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3ZpZGVyQnlSZXBvc2l0b3J5KCByZXBvc2l0b3J5ICkudGFnKCByZXBvc2l0b3J5LCBmaWxlU2V0LCB0YWdOYW1lICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBUYWdTY21SZXN1bHQgdGFnKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZ05hbWUsIFN0cmluZyBtZXNzYWdlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS50YWcoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHRhZ05hbWUsIG1lc3NhZ2UgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFVuRWRpdFNjbVJlc3VsdCB1bmVkaXQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS51bmVkaXQoIHJlcG9zaXRvcnksIGZpbGVTZXQgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS51cGRhdGUoIHJlcG9zaXRvcnksIGZpbGVTZXQgKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm92aWRlckJ5UmVwb3NpdG9yeSggcmVwb3NpdG9yeSApLnVwZGF0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgdmVyc2lvbiApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIGJvb2xlYW4gcnVuQ2hhbmdlbG9nICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS51cGRhdGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHJ1bkNoYW5nZWxvZyApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBydW5DaGFuZ2Vsb2cgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC00NjMsMTggKzM5NiwxNCBAQAogICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm92aWRlckJ5UmVwb3NpdG9yeSggcmVwb3NpdG9yeSApLnVwZGF0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgdmVyc2lvbiwgcnVuQ2hhbmdlbG9nICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIGRhdGVQYXR0ZXJuICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS51cGRhdGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIChTY21WZXJzaW9uKSBudWxsLCBkYXRlUGF0dGVybiApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGVQYXR0ZXJuICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtNDgyLDI3ICs0MTEsMjEgQEAKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS51cGRhdGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIHZlcnNpb24sIGRhdGVQYXR0ZXJuICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgRGF0ZSBsYXN0VXBkYXRlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvdmlkZXJCeVJlcG9zaXRvcnkoIHJlcG9zaXRvcnkgKS51cGRhdGUoIHJlcG9zaXRvcnksIGZpbGVTZXQsIChTY21WZXJzaW9uKSBudWxsLCBsYXN0VXBkYXRlICk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiB2ZXJzaW9uLCBEYXRlIGxhc3RVcGRhdGUgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm92aWRlckJ5UmVwb3NpdG9yeSggcmVwb3NpdG9yeSApLnVwZGF0ZSggcmVwb3NpdG9yeSwgZmlsZVNldCwgdmVyc2lvbiwgbGFzdFVwZGF0ZSApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIERhdGUgbGFzdFVwZGF0ZSwgU3RyaW5nIGRhdGVQYXR0ZXJuICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKQEAgLTUxMCw5ICs0MzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZVBhdHRlcm4gKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24sIERhdGUgbGFzdFVwZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGVQYXR0ZXJuICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9TY21Qcm92aWRlclJlcG9zaXRvcnlTdHViLmphdmEgYi9tYXZlbi1zY20tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL1NjbVByb3ZpZGVyUmVwb3NpdG9yeVN0dWIuamF2YQppbmRleCBiMDI3NmEwLi5jY2Q3ZjQyIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL1NjbVByb3ZpZGVyUmVwb3NpdG9yeVN0dWIuamF2YQorKysgYi9tYXZlbi1zY20tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL1NjbVByb3ZpZGVyUmVwb3NpdG9yeVN0dWIuamF2YQpAQCAtMzksMTEgKzM5LDEzIEBACiAgICAgewogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNQZXJzaXN0Q2hlY2tvdXQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHBlcnNpc3RDaGVja291dDsKICAgICB9CiAKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyB2b2lkIHNldFBlcnNpc3RDaGVja291dCggYm9vbGVhbiBwZXJzaXN0Q2hlY2tvdXQgKQogICAgIHsKICAgICAgICAgdGhpcy5wZXJzaXN0Q2hlY2tvdXQgPSBwZXJzaXN0Q2hlY2tvdXQ7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL1NjbVByb3ZpZGVyU3R1Yi5qYXZhIGIvbWF2ZW4tc2NtLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS9wcm92aWRlci9TY21Qcm92aWRlclN0dWIuamF2YQppbmRleCA4N2Y0ZTFmLi4wYWEwMjIwIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Byb3ZpZGVyL1NjbVByb3ZpZGVyU3R1Yi5qYXZhCisrKyBiL21hdmVuLXNjbS10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vcHJvdmlkZXIvU2NtUHJvdmlkZXJTdHViLmphdmEKQEAgLTQ5LDcgKzQ5LDggQEAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogLyoqCi0gKiBTdHViIGltcGxlbWVudGF0aW9uIG9mIFNjbVByb3ZpZGVyIGZvciB1bml0IHRlc3RpbmcgcHVycG9zZXMuIEl0IGFsbG93cyBzZXR0aW5nIHRoZSBleHBlY3RlZCByZXN1bHRzIHRoYXQgdGhlIGRpZmZlcmVudCBtZXRob2RzIHdpbGwgcmV0dXJuLgorICogU3R1YiBpbXBsZW1lbnRhdGlvbiBvZiBTY21Qcm92aWRlciBmb3IgdW5pdCB0ZXN0aW5nIHB1cnBvc2VzLiAKKyAqIEl0IGFsbG93cyBzZXR0aW5nIHRoZSBleHBlY3RlZCByZXN1bHRzIHRoYXQgdGhlIGRpZmZlcmVudCBtZXRob2RzIHdpbGwgcmV0dXJuLgogICogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCBTdHVicyBvbiA8YSBocmVmPSJodHRwOi8vbWFydGluZm93bGVyLmNvbS9ibGlraS9UZXN0RG91YmxlLmh0bWwiPk1hcnRpbiBGb3dsZXIncyBUZXN0RG91YmxlPC9hPgogICoKICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOmNhcmxvc0BhcGFjaGUub3JnIj5DYXJsb3MgU2FuY2hlejwvYT4KQEAgLTExOCwxNiArMTE5LDE5IEBACiAgICAgICAgIHNldFVwZGF0ZVNjbVJlc3VsdCggbmV3IFVwZGF0ZVNjbVJlc3VsdCggIiIsICIiLCAiIiwgdHJ1ZSApICk7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RyaW5nIHNhbml0aXplVGFnTmFtZSggU3RyaW5nIHRhZyApCiAgICAgewogICAgICAgICByZXR1cm4gdGFnOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVUYWdOYW1lKCBTdHJpbmcgdGFnICkKICAgICB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21UeXBlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBzY21UeXBlOwpAQCAtMTM4LDYgKzE0Miw3IEBACiAgICAgICAgIHRoaXMuc2NtU3BlY2lmaWNGaWxlbmFtZSA9IHNjbVNwZWNpZmljRmlsZW5hbWU7CiAgICAgfQogCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lciggU2NtTG9nZ2VyIGxvZ2dlciApCiAgICAgewogICAgICAgICBsb2dnZXJzLmFkZCggbG9nZ2VyICk7CkBAIC0yODgsNzkgKzI5Myw2MSBAQAogICAgICAgICByZXR1cm4gbGlzdFNjbVJlc3VsdDsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHNjbVByb3ZpZGVyUmVwb3NpdG9yeSBhbHdheXMKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBTY21Qcm92aWRlclJlcG9zaXRvcnkgbWFrZVByb3ZpZGVyU2NtUmVwb3NpdG9yeSggU3RyaW5nIHNjbVNwZWNpZmljVXJsLCBjaGFyIGRlbGltaXRlciApCiAgICAgICAgIHRocm93cyBTY21SZXBvc2l0b3J5RXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gc2NtUHJvdmlkZXJSZXBvc2l0b3J5OwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gc2NtUHJvdmlkZXJSZXBvc2l0b3J5IGFsd2F5cwotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFNjbVByb3ZpZGVyUmVwb3NpdG9yeSBtYWtlUHJvdmlkZXJTY21SZXBvc2l0b3J5KCBGaWxlIHBhdGggKQogICAgICAgICB0aHJvd3MgU2NtUmVwb3NpdG9yeUV4Y2VwdGlvbiwgVW5rbm93blJlcG9zaXRvcnlTdHJ1Y3R1cmUKICAgICB7CiAgICAgICAgIHJldHVybiBzY21Qcm92aWRlclJlcG9zaXRvcnk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBlcnJvcnMgYWx3YXlzCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgTGlzdCB2YWxpZGF0ZVNjbVVybCggU3RyaW5nIHNjbVNwZWNpZmljVXJsLCBjaGFyIGRlbGltaXRlciApCiAgICAgewogICAgICAgICByZXR1cm4gZXJyb3JzOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gc2NtU3BlY2lmaWNGaWxlbmFtZQotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTY21TcGVjaWZpY0ZpbGVuYW1lKCkKICAgICB7CiAgICAgICAgIHJldHVybiBzY21TcGVjaWZpY0ZpbGVuYW1lOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gZ2V0QWRkU2NtUmVzdWx0KCkgYWx3YXlzCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQWRkU2NtUmVzdWx0IGFkZCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gZ2V0QWRkU2NtUmVzdWx0KCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBnZXRBZGRTY21SZXN1bHQoKSBhbHdheXMKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBBZGRTY21SZXN1bHQgYWRkKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIG1lc3NhZ2UgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gZ2V0QWRkU2NtUmVzdWx0KCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBnZXRCcmFuY2hTY21SZXN1bHQoKSBhbHdheXMKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBCcmFuY2hTY21SZXN1bHQgYnJhbmNoKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIGJyYW5jaE5hbWUgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gZ2V0QnJhbmNoU2NtUmVzdWx0KCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBnZXRCcmFuY2hTY21SZXN1bHQoKSBhbHdheXMKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBCcmFuY2hTY21SZXN1bHQgYnJhbmNoKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIGJyYW5jaE5hbWUsIFN0cmluZyBtZXNzYWdlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIGdldEJyYW5jaFNjbVJlc3VsdCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gZ2V0Q2hhbmdlTG9nU2NtUmVzdWx0KCkgYWx3YXlzCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hhbmdlTG9nU2NtUmVzdWx0IGNoYW5nZUxvZyggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIERhdGUgc3RhcnREYXRlLCBEYXRlIGVuZERhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1EYXlzLCBTdHJpbmcgYnJhbmNoICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtMzY4LDkgKzM1NSw3IEBACiAgICAgICAgIHJldHVybiBnZXRDaGFuZ2VMb2dTY21SZXN1bHQoKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIGdldENoYW5nZUxvZ1NjbVJlc3VsdCgpIGFsd2F5cwotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoYW5nZUxvZ1NjbVJlc3VsdCBjaGFuZ2VMb2coIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBEYXRlIHN0YXJ0RGF0ZSwgRGF0ZSBlbmREYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtRGF5cywgU3RyaW5nIGJyYW5jaCwgU3RyaW5nIGRhdGVQYXR0ZXJuICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtMzc4LDE4ICszNjMsMTQgQEAKICAgICAgICAgcmV0dXJuIGdldENoYW5nZUxvZ1NjbVJlc3VsdCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gZ2V0Q2hhbmdlTG9nU2NtUmVzdWx0KCkgYWx3YXlzCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hhbmdlTG9nU2NtUmVzdWx0IGNoYW5nZUxvZyggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyBzdGFydFRhZywgU3RyaW5nIGVuZFRhZyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBnZXRDaGFuZ2VMb2dTY21SZXN1bHQoKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIGdldENoYW5nZUxvZ1NjbVJlc3VsdCgpIGFsd2F5cwotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoYW5nZUxvZ1NjbVJlc3VsdCBjaGFuZ2VMb2coIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgc3RhcnRUYWcsIFN0cmluZyBlbmRUYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRlUGF0dGVybiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTM5Nyw5ICszNzgsNyBAQAogICAgICAgICByZXR1cm4gZ2V0Q2hhbmdlTG9nU2NtUmVzdWx0KCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBnZXRDaGFuZ2VMb2dTY21SZXN1bHQoKSBhbHdheXMKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGFuZ2VMb2dTY21SZXN1bHQgY2hhbmdlTG9nKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgRGF0ZSBzdGFydERhdGUsIERhdGUgZW5kRGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bURheXMsIFNjbUJyYW5jaCBicmFuY2ggKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC00MDcsOSArMzg2LDcgQEAKICAgICAgICAgcmV0dXJuIGdldENoYW5nZUxvZ1NjbVJlc3VsdCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gZ2V0Q2hhbmdlTG9nU2NtUmVzdWx0KCkgYWx3YXlzCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hhbmdlTG9nU2NtUmVzdWx0IGNoYW5nZUxvZyggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIERhdGUgc3RhcnREYXRlLCBEYXRlIGVuZERhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1EYXlzLCBTY21CcmFuY2ggYnJhbmNoLCBTdHJpbmcgZGF0ZVBhdHRlcm4gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC00MTcsOSArMzk0LDcgQEAKICAgICAgICAgcmV0dXJuIGdldENoYW5nZUxvZ1NjbVJlc3VsdCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gZ2V0Q2hhbmdlTG9nU2NtUmVzdWx0KCkgYWx3YXlzCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hhbmdlTG9nU2NtUmVzdWx0IGNoYW5nZUxvZyggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gc3RhcnRWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY21WZXJzaW9uIGVuZFZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC00MjcsOSArNDAyLDcgQEAKICAgICAgICAgcmV0dXJuIGdldENoYW5nZUxvZ1NjbVJlc3VsdCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gZ2V0Q2hhbmdlTG9nU2NtUmVzdWx0KCkgYWx3YXlzCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hhbmdlTG9nU2NtUmVzdWx0IGNoYW5nZUxvZyggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gc3RhcnRSZXZpc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiBlbmRSZXZpc2lvbiwgU3RyaW5nIGRhdGVQYXR0ZXJuICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtNDM3LDMzICs0MTAsMjggQEAKICAgICAgICAgcmV0dXJuIGdldENoYW5nZUxvZ1NjbVJlc3VsdCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gZ2V0Q2hlY2tJblNjbVJlc3VsdCgpIGFsd2F5cwotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoZWNrSW5TY21SZXN1bHQgY2hlY2tJbiggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyB0YWcsIFN0cmluZyBtZXNzYWdlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIGdldENoZWNrSW5TY21SZXN1bHQoKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIGdldENoZWNrSW5TY21SZXN1bHQoKSBhbHdheXMKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGVja0luU2NtUmVzdWx0IGNoZWNrSW4oIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBnZXRDaGVja0luU2NtUmVzdWx0KCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBnZXRDaGVja0luU2NtUmVzdWx0KCkgYWx3YXlzCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hlY2tJblNjbVJlc3VsdCBjaGVja0luKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiByZXZpc2lvbiwgU3RyaW5nIG1lc3NhZ2UgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gZ2V0Q2hlY2tJblNjbVJlc3VsdCgpOwogICAgIH0KIAorICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoZWNrT3V0U2NtUmVzdWx0IGNoZWNrT3V0KCBTY21SZXBvc2l0b3J5IHNjbVJlcG9zaXRvcnksIFNjbUZpbGVTZXQgc2NtRmlsZVNldCwgU3RyaW5nIHRhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gcmVjdXJzaXZlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtNDcxLDQ1ICs0MzksMzUgQEAKICAgICAgICAgcmV0dXJuIGdldENoZWNrT3V0U2NtUmVzdWx0KCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBnZXRDaGVja091dFNjbVJlc3VsdCgpIGFsd2F5cwotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIENoZWNrT3V0U2NtUmVzdWx0IGNoZWNrT3V0KCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBnZXRDaGVja091dFNjbVJlc3VsdCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gZ2V0Q2hlY2tPdXRTY21SZXN1bHQoKSBhbHdheXMKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGVja091dFNjbVJlc3VsdCBjaGVja091dCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gZ2V0Q2hlY2tPdXRTY21SZXN1bHQoKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIGdldENoZWNrT3V0U2NtUmVzdWx0KCkgYWx3YXlzCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hlY2tPdXRTY21SZXN1bHQgY2hlY2tPdXQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gZ2V0Q2hlY2tPdXRTY21SZXN1bHQoKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIGdldENoZWNrT3V0U2NtUmVzdWx0KCkgYWx3YXlzCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgQ2hlY2tPdXRTY21SZXN1bHQgY2hlY2tPdXQoIFNjbVJlcG9zaXRvcnkgc2NtUmVwb3NpdG9yeSwgU2NtRmlsZVNldCBzY21GaWxlU2V0LCBib29sZWFuIHJlY3Vyc2l2ZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBnZXRDaGVja091dFNjbVJlc3VsdCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gZ2V0Q2hlY2tPdXRTY21SZXN1bHQoKSBhbHdheXMKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBDaGVja091dFNjbVJlc3VsdCBjaGVja091dCggU2NtUmVwb3NpdG9yeSBzY21SZXBvc2l0b3J5LCBTY21GaWxlU2V0IHNjbUZpbGVTZXQsIFNjbVZlcnNpb24gdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gcmVjdXJzaXZlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtNTE3LDE4ICs0NzUsMTQgQEAKICAgICAgICAgcmV0dXJuIGdldENoZWNrT3V0U2NtUmVzdWx0KCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBnZXREaWZmU2NtUmVzdWx0KCkgYWx3YXlzCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgRGlmZlNjbVJlc3VsdCBkaWZmKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHN0YXJ0UmV2aXNpb24sIFN0cmluZyBlbmRSZXZpc2lvbiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBnZXREaWZmU2NtUmVzdWx0KCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBnZXREaWZmU2NtUmVzdWx0KCkgYWx3YXlzCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgRGlmZlNjbVJlc3VsdCBkaWZmKCBTY21SZXBvc2l0b3J5IHNjbVJlcG9zaXRvcnksIFNjbUZpbGVTZXQgc2NtRmlsZVNldCwgU2NtVmVyc2lvbiBzdGFydFZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NtVmVyc2lvbiBlbmRWZXJzaW9uICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgpAQCAtNTQ2LDU0ICs1MDAsNDIgQEAKICAgICAgICAgcmV0dXJuIGdldFVwZGF0ZVNjbVJlc3VsdCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gZ2V0RWRpdFNjbVJlc3VsdCgpIGFsd2F5cwotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEVkaXRTY21SZXN1bHQgZWRpdCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gZ2V0RWRpdFNjbVJlc3VsdCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gZ2V0RXhwb3J0U2NtUmVzdWx0KCkgYWx3YXlzCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgRXhwb3J0U2NtUmVzdWx0IGV4cG9ydCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyB0YWcgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gZ2V0RXhwb3J0U2NtUmVzdWx0KCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBnZXRFeHBvcnRTY21SZXN1bHQoKSBhbHdheXMKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBFeHBvcnRTY21SZXN1bHQgZXhwb3J0KCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZywgU3RyaW5nIG91dHB1dERpcmVjdG9yeSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBnZXRFeHBvcnRTY21SZXN1bHQoKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIGdldEV4cG9ydFNjbVJlc3VsdCgpIGFsd2F5cwotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEV4cG9ydFNjbVJlc3VsdCBleHBvcnQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0ICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIGdldEV4cG9ydFNjbVJlc3VsdCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gZ2V0RXhwb3J0U2NtUmVzdWx0KCkgYWx3YXlzCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgRXhwb3J0U2NtUmVzdWx0IGV4cG9ydCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFNjbVZlcnNpb24gdmVyc2lvbiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBnZXRFeHBvcnRTY21SZXN1bHQoKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIGdldEV4cG9ydFNjbVJlc3VsdCgpIGFsd2F5cwotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIEV4cG9ydFNjbVJlc3VsdCBleHBvcnQoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBvdXRwdXREaXJlY3RvcnkgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC02MDEsOTkgKzU0Myw3NyBAQAogICAgICAgICByZXR1cm4gZ2V0RXhwb3J0U2NtUmVzdWx0KCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7QGxpbmsgI2dldExpc3RTY21SZXN1bHQoKX0gYWx3YXlzCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgTGlzdFNjbVJlc3VsdCBsaXN0KCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgYm9vbGVhbiByZWN1cnNpdmUsIFN0cmluZyB0YWcgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gZ2V0TGlzdFNjbVJlc3VsdCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4ge0BsaW5rICNnZXRMaXN0U2NtUmVzdWx0KCl9IGFsd2F5cwotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIExpc3RTY21SZXN1bHQgbGlzdCggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIGJvb2xlYW4gcmVjdXJzaXZlLCBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gZ2V0TGlzdFNjbVJlc3VsdCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gZ2V0UmVtb3ZlU2NtUmVzdWx0KCkgYWx3YXlzCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgUmVtb3ZlU2NtUmVzdWx0IHJlbW92ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyBtZXNzYWdlICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIGdldFJlbW92ZVNjbVJlc3VsdCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gZ2V0U3RhdHVzU2NtUmVzdWx0KCkgYWx3YXlzCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgU3RhdHVzU2NtUmVzdWx0IHN0YXR1cyggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gZ2V0U3RhdHVzU2NtUmVzdWx0KCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBnZXRUYWdTY21SZXN1bHQoKSBhbHdheXMKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBUYWdTY21SZXN1bHQgdGFnKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBnZXRUYWdTY21SZXN1bHQoKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIGdldFRhZ1NjbVJlc3VsdCgpIGFsd2F5cwotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFRhZ1NjbVJlc3VsdCB0YWcoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgdGFnLCBTdHJpbmcgbWVzc2FnZSApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBnZXRUYWdTY21SZXN1bHQoKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIGdldFVwZGF0ZVNjbVJlc3VsdCgpIGFsd2F5cwotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgdGFnICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIGdldFVwZGF0ZVNjbVJlc3VsdCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gZ2V0VXBkYXRlU2NtUmVzdWx0KCkgYWx3YXlzCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyB0YWcsIGJvb2xlYW4gcnVuQ2hhbmdlbG9nICkKICAgICAgICAgdGhyb3dzIFNjbUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIGdldFVwZGF0ZVNjbVJlc3VsdCgpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEByZXR1cm4gZ2V0VXBkYXRlU2NtUmVzdWx0KCkgYWx3YXlzCi0gICAgICovCisgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBwdWJsaWMgVXBkYXRlU2NtUmVzdWx0IHVwZGF0ZSggU2NtUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTY21GaWxlU2V0IGZpbGVTZXQsIFN0cmluZyB0YWcsIFN0cmluZyBkYXRlUGF0dGVybiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBnZXRVcGRhdGVTY21SZXN1bHQoKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIGdldFVwZGF0ZVNjbVJlc3VsdCgpIGFsd2F5cwotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTdHJpbmcgdGFnLCBEYXRlIGxhc3RVcGRhdGUgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gZ2V0VXBkYXRlU2NtUmVzdWx0KCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBnZXRVcGRhdGVTY21SZXN1bHQoKSBhbHdheXMKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU3RyaW5nIHRhZywgRGF0ZSBsYXN0VXBkYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0ZVBhdHRlcm4gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC03MDEsMzYgKzYyMSwyOCBAQAogICAgICAgICByZXR1cm4gZ2V0VXBkYXRlU2NtUmVzdWx0KCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBnZXRVcGRhdGVTY21SZXN1bHQoKSBhbHdheXMKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHJldHVybiBnZXRVcGRhdGVTY21SZXN1bHQoKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIGdldFVwZGF0ZVNjbVJlc3VsdCgpIGFsd2F5cwotICAgICAqLworICAgIC8qKiB7QGluaGVyaXREb2N9ICovCiAgICAgcHVibGljIFVwZGF0ZVNjbVJlc3VsdCB1cGRhdGUoIFNjbVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU2NtRmlsZVNldCBmaWxlU2V0LCBTY21WZXJzaW9uIHZlcnNpb24gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gZ2V0VXBkYXRlU2NtUmVzdWx0KCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBnZXRVcGRhdGVTY21SZXN1bHQoKSBhbHdheXMKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgYm9vbGVhbiBydW5DaGFuZ2Vsb2cgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gZ2V0VXBkYXRlU2NtUmVzdWx0KCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBnZXRVcGRhdGVTY21SZXN1bHQoKSBhbHdheXMKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiB2ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHJ1bkNoYW5nZWxvZyApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTczOCw5ICs2NTAsNyBAQAogICAgICAgICByZXR1cm4gZ2V0VXBkYXRlU2NtUmVzdWx0KCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBnZXRVcGRhdGVTY21SZXN1bHQoKSBhbHdheXMKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiB2ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0ZVBhdHRlcm4gKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCkBAIC03NDgsMTggKzY1OCwxNCBAQAogICAgICAgICByZXR1cm4gZ2V0VXBkYXRlU2NtUmVzdWx0KCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBnZXRVcGRhdGVTY21SZXN1bHQoKSBhbHdheXMKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiB2ZXJzaW9uLCBEYXRlIGxhc3RVcGRhdGUgKQogICAgICAgICB0aHJvd3MgU2NtRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gZ2V0VXBkYXRlU2NtUmVzdWx0KCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBnZXRVcGRhdGVTY21SZXN1bHQoKSBhbHdheXMKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBVcGRhdGVTY21SZXN1bHQgdXBkYXRlKCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCwgU2NtVmVyc2lvbiB2ZXJzaW9uLCBEYXRlIGxhc3RVcGRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRlUGF0dGVybiApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KQEAgLTc2Nyw5ICs2NzMsNyBAQAogICAgICAgICByZXR1cm4gZ2V0VXBkYXRlU2NtUmVzdWx0KCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBnZXRVbkVkaXRTY21SZXN1bHQoKSBhbHdheXMKLSAgICAgKi8KKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIHB1YmxpYyBVbkVkaXRTY21SZXN1bHQgdW5lZGl0KCBTY21SZXBvc2l0b3J5IHJlcG9zaXRvcnksIFNjbUZpbGVTZXQgZmlsZVNldCApCiAgICAgICAgIHRocm93cyBTY21FeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Rjay9jb21tYW5kL2NoYW5nZWxvZy9DaGFuZ2VMb2dDb21tYW5kVGNrVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS90Y2svY29tbWFuZC9jaGFuZ2Vsb2cvQ2hhbmdlTG9nQ29tbWFuZFRja1Rlc3QuamF2YQppbmRleCA5YjczMTdlLi42OGZmMTQ0IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Rjay9jb21tYW5kL2NoYW5nZWxvZy9DaGFuZ2VMb2dDb21tYW5kVGNrVGVzdC5qYXZhCisrKyBiL21hdmVuLXNjbS10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vdGNrL2NvbW1hbmQvY2hhbmdlbG9nL0NoYW5nZUxvZ0NvbW1hbmRUY2tUZXN0LmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBDaGFuZ2VMb2dDb21tYW5kVGNrVGVzdAogICAgIGV4dGVuZHMgU2NtVGNrVGVzdENhc2UKIHsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgQ09NTUlUX01TRyA9ICJTZWNvbmQgY2hhbmdlbG9nIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NTUlUX01TRyA9ICJTZWNvbmQgY2hhbmdlbG9nIjsKIAogICAgIHB1YmxpYyB2b2lkIHRlc3RDaGFuZ2VMb2dDb21tYW5kKCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgpAQCAtNzYsNyArNzYsOCBAQAogCiAgICAgICAgIC8vTm93IG9ubHkgcmV0cmlldmUgdGhlIGNoYW5nZWxvZyBhZnRlciB0aW1lQmVmb3JlU2Vjb25kQ2hhbmdlTG9nCiAgICAgICAgIERhdGUgY3VycmVudFRpbWUgPSBuZXcgRGF0ZSgpOwotICAgICAgICByZXN1bHQgPSBwcm92aWRlci5jaGFuZ2VMb2coIGdldFNjbVJlcG9zaXRvcnkoKSwgZmlsZVNldCwgdGltZUJlZm9yZVNlY29uZCwgY3VycmVudFRpbWUsIDAsICIiICk7CisgICAgICAgIHJlc3VsdCA9IHByb3ZpZGVyCisgICAgICAgICAgICAuY2hhbmdlTG9nKCBnZXRTY21SZXBvc2l0b3J5KCksIGZpbGVTZXQsIHRpbWVCZWZvcmVTZWNvbmQsIGN1cnJlbnRUaW1lLCAwLCBuZXcgU2NtQnJhbmNoKCAiIiApICk7CiAKICAgICAgICAgLy9UaG9yb3VnaCBhc3NlcnQgb2YgdGhlIGxhc3QgcmVzdWx0CiAgICAgICAgIGFzc2VydFRydWUoIHJlc3VsdC5pc1N1Y2Nlc3MoKSApOwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS90Y2svY29tbWFuZC9saXN0L0xpc3RDb21tYW5kVGNrVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS90Y2svY29tbWFuZC9saXN0L0xpc3RDb21tYW5kVGNrVGVzdC5qYXZhCmluZGV4IDQ4NzI4ODcuLjgxMDM5ZjkgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vdGNrL2NvbW1hbmQvbGlzdC9MaXN0Q29tbWFuZFRja1Rlc3QuamF2YQorKysgYi9tYXZlbi1zY20tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Rjay9jb21tYW5kL2xpc3QvTGlzdENvbW1hbmRUY2tUZXN0LmphdmEKQEAgLTc2LDggKzc2LDggQEAKIAogICAgICAgICBMaXN0U2NtUmVzdWx0IHJlc3VsdCA9IHByb3ZpZGVyLmxpc3QoIGdldFNjbVJlcG9zaXRvcnkoKSwgZmlsZVNldCwgcmVjdXJzaXZlLCAoU2NtVmVyc2lvbikgbnVsbCApOwogCi0gICAgICAgIGFzc2VydFRydWUoICJTQ00gY29tbWFuZCBmYWlsZWQ6ICIgKyByZXN1bHQuZ2V0Q29tbWFuZExpbmUoKSArICIgOiAiICsgcmVzdWx0LmdldFByb3ZpZGVyTWVzc2FnZSgpICsKLSAgICAgICAgICAgICggcmVzdWx0LmdldENvbW1hbmRPdXRwdXQoKSA9PSBudWxsID8gIiIgOiAiOiAiICsgcmVzdWx0LmdldENvbW1hbmRPdXRwdXQoKSApLCByZXN1bHQuaXNTdWNjZXNzKCkgKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZSggIlNDTSBjb21tYW5kIGZhaWxlZDogIiArIHJlc3VsdC5nZXRDb21tYW5kTGluZSgpICsgIiA6ICIgKyByZXN1bHQuZ2V0UHJvdmlkZXJNZXNzYWdlKCkKKyAgICAgICAgICAgICsgKCByZXN1bHQuZ2V0Q29tbWFuZE91dHB1dCgpID09IG51bGwgPyAiIiA6ICI6ICIgKyByZXN1bHQuZ2V0Q29tbWFuZE91dHB1dCgpICksIHJlc3VsdC5pc1N1Y2Nlc3MoKSApOwogCiAgICAgICAgIHJldHVybiByZXN1bHQuZ2V0RmlsZXMoKTsKICAgICB9CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Rjay9jb21tYW5kL3VwZGF0ZS9VcGRhdGVDb21tYW5kVGNrVGVzdC5qYXZhIGIvbWF2ZW4tc2NtLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3NjbS90Y2svY29tbWFuZC91cGRhdGUvVXBkYXRlQ29tbWFuZFRja1Rlc3QuamF2YQppbmRleCA2YTc0OTBmLi44ZGEyNWRiIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vc2NtL3Rjay9jb21tYW5kL3VwZGF0ZS9VcGRhdGVDb21tYW5kVGNrVGVzdC5qYXZhCisrKyBiL21hdmVuLXNjbS10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9zY20vdGNrL2NvbW1hbmQvdXBkYXRlL1VwZGF0ZUNvbW1hbmRUY2tUZXN0LmphdmEKQEAgLTE5LDI1ICsxOSwyNCBAQAogICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAoraW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7CisKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5DaGFuZ2VTZXQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtRmlsZTsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5TY21GaWxlU2V0OwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLlNjbUZpbGVTdGF0dXM7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVGNrVGVzdENhc2U7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20uU2NtVmVyc2lvbjsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLmNoZWNraW4uQ2hlY2tJblNjbVJlc3VsdDsKIGltcG9ydCBvcmcuYXBhY2hlLm1hdmVuLnNjbS5jb21tYW5kLnVwZGF0ZS5VcGRhdGVTY21SZXN1bHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5tYXZlbi5zY20ubWFuYWdlci5TY21NYW5hZ2VyOwogaW1wb3J0IG9yZy5hcGFjaGUubWF2ZW4uc2NtLnJlcG9zaXRvcnkuU2NtUmVwb3NpdG9yeTsKIGltcG9ydCBvcmcuY29kZWhhdXMucGxleHVzLnV0aWwuU3RyaW5nVXRpbHM7CiAKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotCiAvKioKICAqIFRoaXMgdGVzdCB0ZXN0cyB0aGUgdXBkYXRlIGNvbW1hbmQuCiAgKiA8cC8+CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tdGVzdC9zcmMvc2l0ZS9zaXRlLnhtbCBiL21hdmVuLXNjbS10ZXN0L3NyYy9zaXRlL3NpdGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZmRiYzUKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi1zY20tdGVzdC9zcmMvc2l0ZS9zaXRlLnhtbApAQCAtMCwwICsxLDM0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+CisKKzwhLS0KKyAgfiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgIH4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgIH4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgfiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIH4gdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICB+ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgfiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICB+IHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgIH4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIH4gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIH4gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICB+IHVuZGVyIHRoZSBMaWNlbnNlLgorICAtLT4KKworPHByb2plY3QgbmFtZT0iTWF2ZW4gU0NNIFRlc3RzIj4KKyAgPGJvZHk+CisgICAgPG1lbnUgcmVmPSJwYXJlbnQiIC8+CisKKyAgICA8bWVudSBuYW1lPSJPdmVydmlldyI+CisgICAgICA8aXRlbSBuYW1lPSJJbnRyb2R1Y3Rpb24iIGhyZWY9ImluZGV4Lmh0bWwiLz4KKyAgICA8L21lbnU+CisKKyAgICA8bWVudSByZWY9Im1vZHVsZXMiIC8+CisKKyAgICA8bWVudSByZWY9InJlcG9ydHMiIGluaGVyaXQ9ImJvdHRvbSIgLz4KKyAgPC9ib2R5PgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvcG9tLnhtbCBiL3BvbS54bWwKaW5kZXggNTZiYjEyNS4uODBmYjZiMCAxMDA2NDQKLS0tIGEvcG9tLnhtbAorKysgYi9wb20ueG1sCkBAIC0xLDQgKzEsNiBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IS0tCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8IS0tCiAgIH4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQogICB+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogICB+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCkBAIC0xOCwyMyArMjAsMjUgQEAKICAgLS0+CiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuPC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm1hdmVuLXBhcmVudDwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj44PC92ZXJzaW9uPgogICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tL21hdmVuL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KICAgPC9wYXJlbnQ+Ci0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwogICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtPC9hcnRpZmFjdElkPgotICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgotICA8bmFtZT5NYXZlbiBTQ008L25hbWU+CiAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KLSAgPGlzc3VlTWFuYWdlbWVudD4KLSAgICA8c3lzdGVtPmppcmE8L3N5c3RlbT4KLSAgICA8dXJsPmh0dHA6Ly9qaXJhLmNvZGVoYXVzLm9yZy9icm93c2UvU0NNPC91cmw+Ci0gIDwvaXNzdWVNYW5hZ2VtZW50PgorICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgorCisgIDxuYW1lPk1hdmVuIFNDTTwvbmFtZT4KKyAgPGRlc2NyaXB0aW9uPk1hdmVuIFNDTSBwcm92aWRlcyBhIGNvbW1vbiBBUEkgZm9yIGRvaW5nIFNDTSBvcGVyYXRpb25zLjwvZGVzY3JpcHRpb24+CisgIDx1cmw+aHR0cDovL21hdmVuLmFwYWNoZS5vcmcvc2NtLzwvdXJsPgogICA8aW5jZXB0aW9uWWVhcj4yMDAzPC9pbmNlcHRpb25ZZWFyPgorCiAgIDxtYWlsaW5nTGlzdHM+CiAgICAgPG1haWxpbmdMaXN0PgogICAgICAgPG5hbWU+U0NNIERldmVsb3BlciBMaXN0PC9uYW1lPgpAQCAtNjksNTIgKzczLDQwIEBACiAgICAgICA8L290aGVyQXJjaGl2ZXM+CiAgICAgPC9tYWlsaW5nTGlzdD4KICAgPC9tYWlsaW5nTGlzdHM+Ci0gIDxzY20+Ci0gICAgPGNvbm5lY3Rpb24+c2NtOnN2bjpodHRwczovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi9tYXZlbi9zY20vdGFncy9tYXZlbi1zY20tMS4xPC9jb25uZWN0aW9uPgotICAgIDxkZXZlbG9wZXJDb25uZWN0aW9uPnNjbTpzdm46aHR0cHM6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvbWF2ZW4vc2NtL3RhZ3MvbWF2ZW4tc2NtLTEuMTwvZGV2ZWxvcGVyQ29ubmVjdGlvbj4KLSAgICA8dXJsPnNjbTpzdm46aHR0cHM6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvbWF2ZW4vc2NtL3RhZ3MvbWF2ZW4tc2NtLTEuMTwvdXJsPgotICA8L3NjbT4KKwogICA8cHJlcmVxdWlzaXRlcz4KICAgICA8bWF2ZW4+Mi4wLjY8L21hdmVuPgogICA8L3ByZXJlcXVpc2l0ZXM+Ci0gIDxidWlsZD4KLSAgICA8cGx1Z2luTWFuYWdlbWVudD4KLSAgICAgIDxwbHVnaW5zPgotICAgICAgICA8cGx1Z2luPgotICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXJlbGVhc2UtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgPHRhZ0Jhc2U+aHR0cHM6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvbWF2ZW4vc2NtL3RhZ3M8L3RhZ0Jhc2U+Ci0gICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgPCEtLSByZW1vdmUgd2hlbiB1cGdyYWRpbmcgdG8gcmVsZWFzZWQgcGFyZW4gOSAtLT4KLSAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2l0ZS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgPHZlcnNpb24+Mi4wLWJldGEtNzwvdmVyc2lvbj4KLSAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLnBsZXh1czwvZ3JvdXBJZD4KLSAgICAgICAgICA8YXJ0aWZhY3RJZD5wbGV4dXMtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgIDx2ZXJzaW9uPjEuMy40PC92ZXJzaW9uPgotICAgICAgICA8L3BsdWdpbj4KLSAgICAgIDwvcGx1Z2lucz4KLSAgICA8L3BsdWdpbk1hbmFnZW1lbnQ+Ci0gIDwvYnVpbGQ+CisKICAgPG1vZHVsZXM+Ci0gIAogICAgIDxtb2R1bGU+bWF2ZW4tc2NtLWFwaTwvbW9kdWxlPgogICAgIDxtb2R1bGU+bWF2ZW4tc2NtLW1hbmFnZXJzPC9tb2R1bGU+CiAgICAgPG1vZHVsZT5tYXZlbi1zY20tdGVzdDwvbW9kdWxlPgogICAgIDxtb2R1bGU+bWF2ZW4tc2NtLXByb3ZpZGVyczwvbW9kdWxlPgogICAgIDxtb2R1bGU+bWF2ZW4tc2NtLWNsaWVudDwvbW9kdWxlPgotICAgIDxtb2R1bGU+bWF2ZW4tc2NtLXBsdWdpbjwvbW9kdWxlPiAgICAKLSAgICAKKyAgICA8bW9kdWxlPm1hdmVuLXNjbS1wbHVnaW48L21vZHVsZT4KICAgPC9tb2R1bGVzPgorCisgIDxzY20+CisgICAgPGNvbm5lY3Rpb24+c2NtOnN2bjpodHRwczovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi9tYXZlbi9zY20vdGFncy9tYXZlbi1zY20tMS4xPC9jb25uZWN0aW9uPgorICAgIDxkZXZlbG9wZXJDb25uZWN0aW9uPnNjbTpzdm46aHR0cHM6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvbWF2ZW4vc2NtL3RhZ3MvbWF2ZW4tc2NtLTEuMTwvZGV2ZWxvcGVyQ29ubmVjdGlvbj4KKyAgICA8dXJsPnNjbTpzdm46aHR0cHM6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvbWF2ZW4vc2NtL3RhZ3MvbWF2ZW4tc2NtLTEuMTwvdXJsPgorICA8L3NjbT4KKyAgPGlzc3VlTWFuYWdlbWVudD4KKyAgICA8c3lzdGVtPmppcmE8L3N5c3RlbT4KKyAgICA8dXJsPmh0dHA6Ly9qaXJhLmNvZGVoYXVzLm9yZy9icm93c2UvU0NNPC91cmw+CisgIDwvaXNzdWVNYW5hZ2VtZW50PgorICA8ZGlzdHJpYnV0aW9uTWFuYWdlbWVudD4KKyAgICA8c2l0ZT4KKyAgICAgIDxpZD5hcGFjaGUud2Vic2l0ZTwvaWQ+CisgICAgICA8dXJsPnNjcDovL3Blb3BsZS5hcGFjaGUub3JnL3d3dy9tYXZlbi5hcGFjaGUub3JnL3NjbS88L3VybD4KKyAgICA8L3NpdGU+CisgIDwvZGlzdHJpYnV0aW9uTWFuYWdlbWVudD4KKwogICA8ZGVwZW5kZW5jaWVzPgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLnBsZXh1czwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPnBsZXh1cy11dGlsczwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjEuNS42PC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgPC9kZXBlbmRlbmNpZXM+CiAKQEAgLTEzMSw5MyArMTIzLDQwOSBAQAogICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CiAgICAgICA8L2RlcGVuZGVuY3k+CiAKLSAgICA8IS0tIHByb3ZpZGVycyBkZWNsYXJhdGlvbiAtLT4KLSAgICA8ZGVwZW5kZW5jeT4KLSAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgotICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXY8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+Ci0gICAgPC9kZXBlbmRlbmN5PiAgICAgCi0gICAgPGRlcGVuZGVuY3k+Ci0gICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1iYXphYXI8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+Ci0gICAgPC9kZXBlbmRlbmN5PgotICAgIDxkZXBlbmRlbmN5PgotICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+Ci0gICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlPC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgotICAgIDwvZGVwZW5kZW5jeT4KLSAgICA8ZGVwZW5kZW5jeT4KLSAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgotICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLWN2c2V4ZTwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KLSAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPGRlcGVuZGVuY3k+Ci0gICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhPC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgotICAgIDwvZGVwZW5kZW5jeT4KLSAgICA8ZGVwZW5kZW5jeT4KLSAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgotICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLWdpdGV4ZTwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KLSAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPGRlcGVuZGVuY3k+Ci0gICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1oZzwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KLSAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPGRlcGVuZGVuY3k+Ci0gICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1sb2NhbDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KLSAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPGRlcGVuZGVuY3k+Ci0gICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1wZXJmb3JjZTwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KLSAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPGRlcGVuZGVuY3k+Ci0gICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbTwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KLSAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPGRlcGVuZGVuY3k+Ci0gICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1zdm5leGU8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+Ci0gICAgPC9kZXBlbmRlbmN5PgotICAgIDxkZXBlbmRlbmN5PgotICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+Ci0gICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneTwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KLSAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPGRlcGVuZGVuY3k+Ci0gICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci12c3M8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+Ci0gICAgPC9kZXBlbmRlbmN5PgotICAgIDwhLS0gZW5kIHByb3ZpZGVycyBkZWNsYXJhdGlvbiAtLT4gICAgICAKLSAgICAgIAotICAgIDwvZGVwZW5kZW5jaWVzPiAgCi0gICAgICAgICAgCisgICAgICA8IS0tIHByb3ZpZGVycyBkZWNsYXJhdGlvbiAtLT4KKyAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLWFjY3VyZXY8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KKyAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLWJhemFhcjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgorICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItY2xlYXJjYXNlPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CisgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1jdnMtY29tbW9uczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgorICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItY3ZzZXhlPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CisgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1jdnNqYXZhPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CisgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1naXQtY29tbW9uczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgorICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItZ2l0ZXhlPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CisgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1oZzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgorICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItbG9jYWw8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KKyAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLXBlcmZvcmNlPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CisgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1zdGFydGVhbTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgorICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItc3ZuLWNvbW1vbnM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KKyAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNjbTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXByb3ZpZGVyLXN2bmV4ZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgorICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItc3luZXJneTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgorICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2NtPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHJvdmlkZXItdnNzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CisgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICA8IS0tIGVuZCBwcm92aWRlcnMgZGVjbGFyYXRpb24gLS0+CisKKyAgICAgIDwhLS0gUGxleHVzIC0tPgorICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5wbGV4dXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnBsZXh1cy1jb250YWluZXItZGVmYXVsdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+MS4wLWFscGhhLTk8L3ZlcnNpb24+CisgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLnBsZXh1czwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+cGxleHVzLXV0aWxzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4xLjUuNjwvdmVyc2lvbj4KKyAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgPCEtLSBUZXN0IC0tPgorICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My44LjI8L3ZlcnNpb24+CisgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1zdm50ZXN0PC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CisgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS10ZXN0PC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CisgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1jdnN0ZXN0PC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CisgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5zY208L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNjbS1wcm92aWRlci1naXR0ZXN0PC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CisgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+CiAgIDwvZGVwZW5kZW5jeU1hbmFnZW1lbnQ+Ci0gIAotICA8ZGlzdHJpYnV0aW9uTWFuYWdlbWVudD4KLSAgICA8c2l0ZT4KLSAgICAgIDxpZD5hcGFjaGUud2Vic2l0ZTwvaWQ+Ci0gICAgICA8dXJsPnNjcDovL3Blb3BsZS5hcGFjaGUub3JnL3d3dy9tYXZlbi5hcGFjaGUub3JnL3NjbS9wcm9qZWN0cy88L3VybD4KLSAgICA8L3NpdGU+Ci0gIDwvZGlzdHJpYnV0aW9uTWFuYWdlbWVudD4KKworICA8YnVpbGQ+CisgICAgPHBsdWdpbk1hbmFnZW1lbnQ+CisgICAgICA8cGx1Z2lucz4KKyAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tcmVsZWFzZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgPHZlcnNpb24+Mi4wLWJldGEtNzwvdmVyc2lvbj4KKyAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDx0YWdCYXNlPmh0dHBzOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL21hdmVuL3NjbS90YWdzPC90YWdCYXNlPgorICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDwhLS0gVE9ETzogcmVtb3ZlIHdoZW4gbWF2ZW4gcGFyZW50IHBvbSA5IGlzIHJlbGVhc2VkIC0tPgorICAgICAgICA8cGx1Z2luPgorICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zaXRlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICA8dmVyc2lvbj4yLjAtYmV0YS03PC92ZXJzaW9uPgorICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPHN0YWdpbmdTaXRlVVJMPnNjcDovL3Blb3BsZS5hcGFjaGUub3JnL3d3dy9tYXZlbi5hcGFjaGUub3JnL3NjbS8ke3Byb2plY3QuYXJ0aWZhY3RJZH0tJHtwcm9qZWN0LnZlcnNpb259PC9zdGFnaW5nU2l0ZVVSTD4KKyAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8cGx1Z2luPgorICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5wbGV4dXM8L2dyb3VwSWQ+CisgICAgICAgICAgPGFydGlmYWN0SWQ+cGxleHVzLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICA8dmVyc2lvbj4xLjMuODwvdmVyc2lvbj4KKyAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNsZWFuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICA8dmVyc2lvbj4yLjI8L3ZlcnNpb24+CisgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8cGx1Z2luPgorICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgPHZlcnNpb24+Mi4wLjI8L3ZlcnNpb24+CisgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8c291cmNlPjEuNDwvc291cmNlPgorICAgICAgICAgICAgPHRhcmdldD4xLjQ8L3RhcmdldD4KKyAgICAgICAgICAgIDxlbmNvZGluZz4ke3Byb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmd9PC9lbmNvZGluZz4KKyAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8cGx1Z2luPgorICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1kZXBsb3ktcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgIDx2ZXJzaW9uPjIuMzwvdmVyc2lvbj4KKyAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWdwZy1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgPHZlcnNpb24+MS4wLWFscGhhLTQ8L3ZlcnNpb24+CisgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8cGx1Z2luPgorICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1pbnN0YWxsLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICA8dmVyc2lvbj4yLjI8L3ZlcnNpb24+CisgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8cGx1Z2luPgorICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qYXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgIDx2ZXJzaW9uPjIuMjwvdmVyc2lvbj4KKyAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDxhcmNoaXZlPgorICAgICAgICAgICAgICA8bWFuaWZlc3Q+CisgICAgICAgICAgICAgICAgPGFkZERlZmF1bHRTcGVjaWZpY2F0aW9uRW50cmllcz50cnVlPC9hZGREZWZhdWx0U3BlY2lmaWNhdGlvbkVudHJpZXM+CisgICAgICAgICAgICAgICAgPGFkZERlZmF1bHRJbXBsZW1lbnRhdGlvbkVudHJpZXM+dHJ1ZTwvYWRkRGVmYXVsdEltcGxlbWVudGF0aW9uRW50cmllcz4KKyAgICAgICAgICAgICAgPC9tYW5pZmVzdD4KKyAgICAgICAgICAgIDwvYXJjaGl2ZT4KKyAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8cGx1Z2luPgorICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qYXZhZG9jLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICA8dmVyc2lvbj4yLjQ8L3ZlcnNpb24+CisgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8cGx1Z2luPgorICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1wbHVnaW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgIDx2ZXJzaW9uPjIuNC4yPC92ZXJzaW9uPgorICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc291cmNlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICA8dmVyc2lvbj4yLjAuNDwvdmVyc2lvbj4KKyAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXN1cmVmaXJlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICA8dmVyc2lvbj4yLjQuMzwvdmVyc2lvbj4KKyAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+CisgICAgICAgICAgPGFydGlmYWN0SWQ+Y2xpcnItbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgIDx2ZXJzaW9uPjIuMi4yPC92ZXJzaW9uPgorICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMubW9kZWxsbzwvZ3JvdXBJZD4KKyAgICAgICAgICA8YXJ0aWZhY3RJZD5tb2RlbGxvLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICA8dmVyc2lvbj4xLjAtYWxwaGEtMjE8L3ZlcnNpb24+CisgICAgICAgIDwvcGx1Z2luPgorICAgICAgPC9wbHVnaW5zPgorICAgIDwvcGx1Z2luTWFuYWdlbWVudD4KKworICAgIDwhLS0gVE9ETzogcmVtb3ZlIHdoZW4gbWF2ZW4gcGFyZW50IHBvbSA5IGlzIHJlbGVhc2VkIC0tPgorICAgIDxwbHVnaW5zPgorICAgICAgPCEtLSBXZSB3YW50IHRvIHBhY2thZ2UgdXAgbGljZW5zZSByZXNvdXJjZXMgaW4gdGhlIEpBUnMgcHJvZHVjZWQgLS0+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXJlbW90ZS1yZXNvdXJjZXMtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICA8Z29hbD5wcm9jZXNzPC9nb2FsPgorICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICA8cmVzb3VyY2VCdW5kbGVzPgorICAgICAgICAgICAgICAgIDxyZXNvdXJjZUJ1bmRsZT5vcmcuYXBhY2hlOmFwYWNoZS1qYXItcmVzb3VyY2UtYnVuZGxlOjEuMzwvcmVzb3VyY2VCdW5kbGU+CisgICAgICAgICAgICAgIDwvcmVzb3VyY2VCdW5kbGVzPgorICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgIDwvYnVpbGQ+CisKICAgPHJlcG9ydGluZz4KICAgICA8cGx1Z2lucz4KICAgICAgIDxwbHVnaW4+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tanhyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgPGFnZ3JlZ2F0ZT50cnVlPC9hZ2dyZWdhdGU+Ci0gICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tcHJvamVjdC1pbmZvLXJlcG9ydHMtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4yLjE8L3ZlcnNpb24+CiAgICAgICA8L3BsdWdpbj4KICAgICA8L3BsdWdpbnM+CiAgIDwvcmVwb3J0aW5nPgorCisgIDwhLS0gVE9ETzogcmVtb3ZlIHdoZW4gbWF2ZW4gcGFyZW50IHBvbSA5IGlzIHJlbGVhc2VkIC0tPgorICA8cHJvZmlsZXM+CisgICAgPHByb2ZpbGU+CisgICAgICA8aWQ+cmVwb3J0aW5nPC9pZD4KKyAgICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5tb2pvPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29iZXJ0dXJhLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDxwaGFzZT5jbGVhbjwvcGhhc2U+CisgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgPGdvYWw+Y2xlYW48L2dvYWw+CisgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDwvcGx1Z2lucz4KKyAgICAgIDwvYnVpbGQ+CisgICAgICA8cmVwb3J0aW5nPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tcHJvamVjdC1pbmZvLXJlcG9ydHMtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4xPC92ZXJzaW9uPgorICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zdXJlZmlyZS1yZXBvcnQtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi40LjM8L3ZlcnNpb24+CisgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNoZWNrc3R5bGUtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4yPC92ZXJzaW9uPgorICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgIDxjb25maWdMb2NhdGlvbj5odHRwOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL21hdmVuL3BsdWdpbnMvdHJ1bmsvbWF2ZW4tY2hlY2tzdHlsZS1wbHVnaW4vc3JjL21haW4vcmVzb3VyY2VzL2NvbmZpZy9tYXZlbl9jaGVja3MueG1sPC9jb25maWdMb2NhdGlvbj4KKyAgICAgICAgICAgICAgPGhlYWRlckxvY2F0aW9uPmh0dHA6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvbWF2ZW4vcGx1Z2lucy90cnVuay9tYXZlbi1jaGVja3N0eWxlLXBsdWdpbi9zcmMvbWFpbi9yZXNvdXJjZXMvY29uZmlnL21hdmVuLWhlYWRlci50eHQ8L2hlYWRlckxvY2F0aW9uPgorICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1wbWQtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi40PC92ZXJzaW9uPgorICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgIDxleGNsdWRlUm9vdHM+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGVSb290PiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L2dlbmVyYXRlZC1zb3VyY2VzL21vZGVsbG88L2V4Y2x1ZGVSb290PgorICAgICAgICAgICAgICAgIDxleGNsdWRlUm9vdD4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9nZW5lcmF0ZWQtc291cmNlcy9wbHVnaW48L2V4Y2x1ZGVSb290PgorICAgICAgICAgICAgICA8L2V4Y2x1ZGVSb290cz4KKyAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb2JlcnR1cmEtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4yPC92ZXJzaW9uPgorICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMubW9qbzwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnRhZ2xpc3QtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4yPC92ZXJzaW9uPgorICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qeHItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4xPC92ZXJzaW9uPgorICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgIDxpbnB1dEVuY29kaW5nPiR7cHJvamVjdC5idWlsZC5zb3VyY2VFbmNvZGluZ308L2lucHV0RW5jb2Rpbmc+CisgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWphdmFkb2MtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi40PC92ZXJzaW9uPgorICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgIDxlbmNvZGluZz4ke3Byb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmd9PC9lbmNvZGluZz4KKyAgICAgICAgICAgICAgPGxpbmtzPgorICAgICAgICAgICAgICAgIDxsaW5rPmh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaTwvbGluaz4KKyAgICAgICAgICAgICAgICA8bGluaz5odHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpPC9saW5rPgorICAgICAgICAgICAgICAgIDxsaW5rPmh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjUuMC9kb2NzL2FwaTwvbGluaz4KKyAgICAgICAgICAgICAgICA8bGluaz5odHRwOi8vY29tbW9ucy5hcGFjaGUub3JnL2NvbGxlY3Rpb25zL2FwaWRvY3MtQ09MTEVDVElPTlNfM18wLzwvbGluaz4KKyAgICAgICAgICAgICAgICA8bGluaz5odHRwOi8vY29tbW9ucy5hcGFjaGUub3JnL2RiY3AvYXBpZG9jcy88L2xpbms+CisgICAgICAgICAgICAgICAgPGxpbms+aHR0cDovL2NvbW1vbnMuYXBhY2hlLm9yZy9maWxldXBsb2FkL2FwaWRvY3MvPC9saW5rPgorICAgICAgICAgICAgICAgIDxsaW5rPmh0dHA6Ly9jb21tb25zLmFwYWNoZS5vcmcvaHR0cGNsaWVudC9hcGlkb2NzLzwvbGluaz4KKyAgICAgICAgICAgICAgICA8bGluaz5odHRwOi8vY29tbW9ucy5hcGFjaGUub3JnL2xvZ2dpbmcvYXBpZG9jcy88L2xpbms+CisgICAgICAgICAgICAgICAgPGxpbms+aHR0cDovL2NvbW1vbnMuYXBhY2hlLm9yZy9wb29sL2FwaWRvY3MvPC9saW5rPgorICAgICAgICAgICAgICAgIDxsaW5rPmh0dHA6Ly9qdW5pdC5zb3VyY2Vmb3JnZS5uZXQvamF2YWRvYy88L2xpbms+CisgICAgICAgICAgICAgICAgPGxpbms+aHR0cDovL2xvZ2dpbmcuYXBhY2hlLm9yZy9sb2c0ai8xLjIvYXBpZG9jcy88L2xpbms+CisgICAgICAgICAgICAgICAgPGxpbms+aHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9yZWdleHAvYXBpZG9jcy88L2xpbms+CisgICAgICAgICAgICAgICAgPGxpbms+aHR0cDovL3ZlbG9jaXR5LmFwYWNoZS5vcmcvZW5naW5lL3JlbGVhc2VzL3ZlbG9jaXR5LTEuNS9hcGlkb2NzLzwvbGluaz4KKyAgICAgICAgICAgICAgPC9saW5rcz4KKyAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jbGlyci1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjIuMjwvdmVyc2lvbj4KKyAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgICAgPC9yZXBvcnRpbmc+CisgICAgPC9wcm9maWxlPgorCisgICAgPHByb2ZpbGU+CisgICAgICA8aWQ+cmVwb3J0aW5nLWFnZ3JlZ2F0ZTwvaWQ+CisgICAgICA8bW9kdWxlcyAvPgorICAgICAgPCEtLSBUbyBnZW5lcmF0ZSBhZ2dyZWdhdGUgcmVwb3J0cyAtLT4KKyAgICAgIDwhLS0gVG8gZGVwbG95IGJvdGggYWdncmVnYXRlIHJlcG9ydHMgZm9yIHRvcC1sZXZlbCBwcm9qZWN0IGFuZCBzdGFuZGFsb25lIHJlcG9ydHMgZm9yIG1vZHVsZXMsIGNhbGwKKyAgICAgICAgICAgbXZuIHNpdGUgLVByZXBvcnRpbmcKKyAgICAgICAgICAgbXZuIHNpdGU6ZGVwbG95CisgICAgICAgICAgIG12biBzaXRlIC1QcmVwb3J0aW5nLWFnZ3JlZ2F0ZQorICAgICAgICAgICBtdm4gLU4gc2l0ZTpkZXBsb3kKKyAgICAgIC0tPgorICAgICAgPHJlcG9ydGluZz4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWp4ci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjE8L3ZlcnNpb24+CisgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgPGFnZ3JlZ2F0ZT50cnVlPC9hZ2dyZWdhdGU+CisgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWphdmFkb2MtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi40PC92ZXJzaW9uPgorICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgIDxsaW5rcz4KKyAgICAgICAgICAgICAgICA8bGluaz5odHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGk8L2xpbms+CisgICAgICAgICAgICAgICAgPGxpbms+aHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaTwvbGluaz4KKyAgICAgICAgICAgICAgICA8bGluaz5odHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS41LjAvZG9jcy9hcGk8L2xpbms+CisgICAgICAgICAgICAgICAgPGxpbms+aHR0cDovL2NvbW1vbnMuYXBhY2hlLm9yZy9jb2xsZWN0aW9ucy9hcGlkb2NzLUNPTExFQ1RJT05TXzNfMC88L2xpbms+CisgICAgICAgICAgICAgICAgPGxpbms+aHR0cDovL2NvbW1vbnMuYXBhY2hlLm9yZy9kYmNwL2FwaWRvY3MvPC9saW5rPgorICAgICAgICAgICAgICAgIDxsaW5rPmh0dHA6Ly9jb21tb25zLmFwYWNoZS5vcmcvZmlsZXVwbG9hZC9hcGlkb2NzLzwvbGluaz4KKyAgICAgICAgICAgICAgICA8bGluaz5odHRwOi8vY29tbW9ucy5hcGFjaGUub3JnL2h0dHBjbGllbnQvYXBpZG9jcy88L2xpbms+CisgICAgICAgICAgICAgICAgPGxpbms+aHR0cDovL2NvbW1vbnMuYXBhY2hlLm9yZy9sb2dnaW5nL2FwaWRvY3MvPC9saW5rPgorICAgICAgICAgICAgICAgIDxsaW5rPmh0dHA6Ly9jb21tb25zLmFwYWNoZS5vcmcvcG9vbC9hcGlkb2NzLzwvbGluaz4KKyAgICAgICAgICAgICAgICA8bGluaz5odHRwOi8vanVuaXQuc291cmNlZm9yZ2UubmV0L2phdmFkb2MvPC9saW5rPgorICAgICAgICAgICAgICAgIDxsaW5rPmh0dHA6Ly9sb2dnaW5nLmFwYWNoZS5vcmcvbG9nNGovMS4yL2FwaWRvY3MvPC9saW5rPgorICAgICAgICAgICAgICAgIDxsaW5rPmh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvcmVnZXhwL2FwaWRvY3MvPC9saW5rPgorICAgICAgICAgICAgICAgIDxsaW5rPmh0dHA6Ly92ZWxvY2l0eS5hcGFjaGUub3JnL2VuZ2luZS9yZWxlYXNlcy92ZWxvY2l0eS0xLjUvYXBpZG9jcy88L2xpbms+CisgICAgICAgICAgICAgIDwvbGlua3M+CisgICAgICAgICAgICAgIDxhZ2dyZWdhdGU+dHJ1ZTwvYWdncmVnYXRlPgorICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgICA8L3JlcG9ydGluZz4KKyAgICA8L3Byb2ZpbGU+CisgIDwvcHJvZmlsZXM+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zcmMvc2l0ZS9hcHQvYWNjdXJldi5hcHQgYi9zcmMvc2l0ZS9hcHQvYWNjdXJldi5hcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI3NTczNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zaXRlL2FwdC9hY2N1cmV2LmFwdApAQCAtMCwwICsxLDQxIEBACisgLS0tLS0tCisgU0NNIEltcGxlbWVudGF0aW9uOiBBY2N1cmV2CisgLS0tLS0tCisgT2xpdmllciBMYW15CisgLS0tLS0tCisgMjAwOC0wOC0xMAorIC0tLS0tLQorCit+fiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCit+fiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK35+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCit+fiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit+fiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCit+fiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit+fiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cit+fgorfn4gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKK35+Cit+fiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCit+fiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorfn4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCit+fiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK35+IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK35+IHVuZGVyIHRoZSBMaWNlbnNlLgorCit+fiBOT1RFOiBGb3IgaGVscCB3aXRoIHRoZSBzeW50YXggb2YgdGhpcyBmaWxlLCBzZWU6Cit+fiBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9kb3hpYS9yZWZlcmVuY2VzL2FwdC1mb3JtYXQuaHRtbAorCitTQ00gSW1wbGVtZW50YXRpb246IEFjY3VyZXYKKworKiBHZW5lcmFsIEluZm8KKworICAgIExpbmsgOiB7e2h0dHA6Ly93d3cuYWNjdXJldi5jb20vL319CisKKyAgICBMaWNlbnNlIDogQ29tbWVyY2lhbAorCisqIFNDTSBVcmwKKworLS0tLS0tLQorc2NtOmFjY3VyZXY6c2VydmVyOnBvcnQvZGVwb3QvbXlfYXBwLworLS0tLS0tLQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9zaXRlL2FwdC9iYXphYXIuYXB0IGIvc3JjL3NpdGUvYXB0L2JhemFhci5hcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk5NGFlNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zaXRlL2FwdC9iYXphYXIuYXB0CkBAIC0wLDAgKzEsNjIgQEAKKyAtLS0tLS0KKyBTQ00gSW1wbGVtZW50YXRpb246IEJhemFhcgorIC0tLS0tLQorIFRvcmJq77+9cm4gRWlrbGkgU23vv71yZ3JhdgorIC0tLS0tLQorIDIwMDYtMDItMDEKKyAtLS0tLS0KKworfn4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorfn4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCit+fiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorfn4gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorfn4gdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorfn4gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorfn4gd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorfn4KK35+ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCit+fgorfn4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorfn4gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KK35+ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorfn4gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCit+fiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit+fiB1bmRlciB0aGUgTGljZW5zZS4KKworfn4gTk9URTogRm9yIGhlbHAgd2l0aCB0aGUgc3ludGF4IG9mIHRoaXMgZmlsZSwgc2VlOgorfn4gaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvZG94aWEvcmVmZXJlbmNlcy9hcHQtZm9ybWF0Lmh0bWwKKworU0NNIEltcGxlbWVudGF0aW9uOiBCYXphYXIKKworKiBHZW5lcmFsIEluZm8KKworICAgIExpbmsgOiB7e2h0dHA6Ly9iYXphYXItdmNzLm9yZy99fQorCisgICAgTGljZW5zZSA6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisKKyAgICAiQmF6YWFyLU5HIGlzIGEgZGVjZW50cmFsaXplZCByZXZpc2lvbiBjb250cm9sIHN5c3RlbSBkZXNpZ25lZCB0byBiZSBlYXN5IGZvciBkZXZlbG9wZXJzCisgICAgYW5kIGVuZCB1c2VycyBhbGlrZS4gRGVjZW50cmFsaXplZCByZXZpc2lvbiBjb250cm9sIHN5c3RlbXMgZ2l2ZSBwZW9wbGUgdGhlIGFiaWxpdHkgdG8gd29yaworICAgIG92ZXIgdGhlIGludGVybmV0IHVzaW5nIHRoZSBiYXphYXIgZGV2ZWxvcG1lbnQgbW9kZWwuIFdoZW4geW91IHVzZSBCYXphYXItTkcsIHlvdSBjYW4gY29tbWl0CisgICAgdG8geW91ciBvd24gYnJhbmNoZXMgb2YgeW91ciBmYXZvcml0ZSBmcmVlIHNvZnR3YXJlIHByb2plY3RzIHdpdGhvdXQgbmVlZGluZyBzcGVjaWFsIHBlcm1pc3Npb24uIgorCisgICAgVGhlIHByb3ZpZGVyIHN1cHBvcnRzIEJhemFhciBmcm9tIHZlcnNpb24gMC43LCB0aG91Z2ggaW1wb3J0YW50IGZlYXR1cmVzIGxpa2Ugc2Z0cCB0cmFuc3BvcnQgd2hlcmUKKyAgICBub3QgaW5jbHVkZWQgYmVmb3JlIHZlcnNpb24gMC44LgorCisqIFNDTSBVcmwKKworICAgIFBhdGggb3IgdXJsIHRvIHRoZSBicmFuY2ggbG9jYXRpb24uCisgICAgU3VwcG9ydGVkIHByb3RvY29sczogRlRQLCBTRlRQLCBBRlRQLCBIVFRQLCBIVFRQUyBhbmQgRklMRS4KKworLS0tLS0tLQorc2NtOmJhemFhcjp1cmxfdG9fcmVwb3NpdG9yeQorLS0tLS0tLQorCisqIEV4YW1wbGVzCisKKy0tLS0tLS0KK3NjbTpiYXphYXI6aHR0cDovL2hvc3QvdjMgKHJlYWQgb25seSkKK3NjbTpiYXphYXI6c2Z0cDovL3VzZXJuYW1lOnBhc3N3b3JkQGhvc3Qvfi9kZXYvcHJvamVjdC92MyAocmVsYXRpdiBwYXRoKQorc2NtOmJhemFhcjpzZnRwOi8vaG9zdDpwb3J0L2hvbWUvc21vcmdyYXYvZGV2L3Byb2plY3QvdjMgKGFic29sdXRlIHBhdGggd2l0aG91dCBleHBsaWNpdCB1c2VybmFtZSkKK3NjbTpiYXphYXI6ZmlsZTovL0M6L2Rldi9wcm9qZWN0L3YzICh3aW5kb3dzIGRyaXZlKQorc2NtOmJhemFhcjpmaWxlOi8vL2hvbWUvc21vcmdyYXYvZGV2L3Byb2plY3QvdjMgKGxpbnV4IGRyaXZlKQorLS0tLS0tLQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L2NsZWFyY2FzZS5hcHQgYi9zcmMvc2l0ZS9hcHQvY2xlYXJjYXNlLmFwdApzaW1pbGFyaXR5IGluZGV4IDg4JQpyZW5hbWUgZnJvbSBtYXZlbi1zY20tc2l0ZS9zcmMvc2l0ZS9hcHQvY2xlYXJjYXNlLmFwdApyZW5hbWUgdG8gc3JjL3NpdGUvYXB0L2NsZWFyY2FzZS5hcHQKaW5kZXggN2YxNTdmNy4uYzc1ZmRmNyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L2NsZWFyY2FzZS5hcHQKKysrIGIvc3JjL3NpdGUvYXB0L2NsZWFyY2FzZS5hcHQKQEAgLTMsOSArMywyOSBAQAogIC0tLS0tLQogIFdpbSBEZWJsYXV3ZSwgQXJuZSBEZWdlbnJpbmcKICAtLS0tLS0KLSAxIERlY2VtYmVyIDIwMDUsIGxhc3QgdXBkYXRlIG9uIDIyIE1hcmNoIDIwMDcKKyAyMDA3LTAzLTIyCiAgLS0tLS0tCiAKK35+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK35+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorfn4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK35+IHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK35+IHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKK35+ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK35+IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK35+Cit+fiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorfn4KK35+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK35+IHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCit+fiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK35+IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorfn4gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworfn4gdW5kZXIgdGhlIExpY2Vuc2UuCisKK35+IE5PVEU6IEZvciBoZWxwIHdpdGggdGhlIHN5bnRheCBvZiB0aGlzIGZpbGUsIHNlZToKK35+IGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL2RveGlhL3JlZmVyZW5jZXMvYXB0LWZvcm1hdC5odG1sCisKIFNDTSBJbXBsZW1lbnRhdGlvbjogQ2xlYXJDYXNlCiAKICogR2VuZXJhbCBJbmZvCkBAIC03Miw3ICs5Miw3IEBACiAqKiBBdXRvLWdlbmVyYXRlZCBjb25maWcgc3BlYwogCiAgICAgRm9yIG1hbnkgdXNlcnMgb2YgYSBiYXNlIENsZWFyQ2FzZSBTQ00gaW5zdGFsbGF0aW9uLCBhdXRvLWdlbmVyYXRlZCBjb25maWcgc3BlY3MgYXJlIG1vcmUgY29udmVuaWVudCB0aGFuIHVzZXItc3VwcGxpZWQKLSAgICBjb25maWcgc3BlY3MuIEluc3RlYWQgb2YgYmVpbmcgZm9yY2VkIHRvIHByb3ZpZGUgYSBjb25maWcgc3BlYyBmaWxlIGF0IGFuIGV4dGVybmFsIGxvY2F0aW9uLCB0aGUgU0NNIFVSTCBjb250YWlucyAKKyAgICBjb25maWcgc3BlY3MuIEluc3RlYWQgb2YgYmVpbmcgZm9yY2VkIHRvIHByb3ZpZGUgYSBjb25maWcgc3BlYyBmaWxlIGF0IGFuIGV4dGVybmFsIGxvY2F0aW9uLCB0aGUgU0NNIFVSTCBjb250YWlucwogICAgIGFsbCBpbmZvcm1hdGlvbiB0aGF0IGlzIG5lZWRlZCB0byBjaGVjayBvdXQgdGhlIGNvZGUuIFNwZWNpZnkgb25lIGxvYWQgcnVsZSBmb3IgdGhlIHByb2plY3QgeW91IHdhbnQgdG8gY2hlY2sgb3V0IHdpdGhpbiB0aGUKICAgICBTQ00gVVJMLCBhcyBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGVzOgogCkBAIC0xNjAsNyArMTgwLDcgQEAKIAogKiogQ2xlYXJDYXNlIFR5cGUKIAotICAgIEJ5IGRlZmF1bHQsIHRoZSBDbGVhckNhc2UgU0NNIHByb3ZpZGVyIHVzZXMgY29tbWFuZHMgYXBwcm9wcmlhdGUgZm9yIHRoZSBmdWxsIENsZWFyQ2FzZSB2ZXJzaW9uLiBJZiB5b3UgYXJlIHVzaW5nIENsZWFyQ2FzZSBMVCBvciAKKyAgICBCeSBkZWZhdWx0LCB0aGUgQ2xlYXJDYXNlIFNDTSBwcm92aWRlciB1c2VzIGNvbW1hbmRzIGFwcHJvcHJpYXRlIGZvciB0aGUgZnVsbCBDbGVhckNhc2UgdmVyc2lvbi4gSWYgeW91IGFyZSB1c2luZyBDbGVhckNhc2UgTFQgb3IKICAgICBDbGVhckNhc2UgVUNNIGluc3RlYWQsIHlvdSBtdXN0IHNwZWNpZnkgdGhpcyBmYWN0IGluIHRoZSBjbGVhcmNhc2Utc2V0dGluZ3MueG1sIGZpbGUuCiAKIC0tLS0tLS0KZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1zaXRlL3NyYy9zaXRlL2FwdC9jdnMuYXB0IGIvc3JjL3NpdGUvYXB0L2N2cy5hcHQKc2ltaWxhcml0eSBpbmRleCA4MCUKcmVuYW1lIGZyb20gbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L2N2cy5hcHQKcmVuYW1lIHRvIHNyYy9zaXRlL2FwdC9jdnMuYXB0CmluZGV4IDM0MzYwMTEuLmFjMDQ5MDQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1zaXRlL3NyYy9zaXRlL2FwdC9jdnMuYXB0CisrKyBiL3NyYy9zaXRlL2FwdC9jdnMuYXB0CkBAIC0zLDkgKzMsMjkgQEAKICAtLS0tLS0KICBXaW0gRGVibGF1d2UKICAtLS0tLS0KLSAxIERlY2VtYmVyIDIwMDUKKyAyMDA1LTEyLTAxCiAgLS0tLS0tCiAKK35+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK35+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorfn4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK35+IHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK35+IHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKK35+ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK35+IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK35+Cit+fiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorfn4KK35+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK35+IHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCit+fiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK35+IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorfn4gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworfn4gdW5kZXIgdGhlIExpY2Vuc2UuCisKK35+IE5PVEU6IEZvciBoZWxwIHdpdGggdGhlIHN5bnRheCBvZiB0aGlzIGZpbGUsIHNlZToKK35+IGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL2RveGlhL3JlZmVyZW5jZXMvYXB0LWZvcm1hdC5odG1sCisKIFNDTSBJbXBsZW1lbnRhdGlvbjogQ1ZTCiAKICogR2VuZXJhbCBJbmZvCkBAIC0zMyw3ICs1Myw3IEBACiAKICAgKiBwc2VydmVyLCBjb25uZWN0aW5nIHRvIGEgcGFzc3dvcmQtYXV0aGVudGljYXRpbmcgc2VydmVyCiAKLSAgKiBzc3BpLCBzZWN1cmUgYXV0aGVudGljYXRpb24gKGxlc3Mgc3VwcG9ydGVkIGJ5IGNsaWVudHMgYW5kIHNlcnZlcnMsIG1heSByZXF1aXJlIHVzaW5nIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgZm9yIG1vcmUgZGV0YWlscyBzZWUgIkhvdyB0byBjaG9vc2UgdGhlIENWUyBwcm92aWRlciBpbXBsZW1lbnRhdGlvbiIpIAorICAqIHNzcGksIHNlY3VyZSBhdXRoZW50aWNhdGlvbiAobGVzcyBzdXBwb3J0ZWQgYnkgY2xpZW50cyBhbmQgc2VydmVycywgbWF5IHJlcXVpcmUgdXNpbmcgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBmb3IgbW9yZSBkZXRhaWxzIHNlZSAiSG93IHRvIGNob29zZSB0aGUgQ1ZTIHByb3ZpZGVyIGltcGxlbWVudGF0aW9uIikKIAogICAqIGV4dCwgY29ubmVjdGluZyB0byBhIHNlcnZlciB1c2luZyBhbiBleHRlcm5hbCByc2ggcHJvZ3JhbQogCmRpZmYgLS1naXQgYS9zcmMvc2l0ZS9hcHQvZ2l0LmFwdCBiL3NyYy9zaXRlL2FwdC9naXQuYXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMmFlZmMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc2l0ZS9hcHQvZ2l0LmFwdApAQCAtMCwwICsxLDY5IEBACisgLS0tLS0tCisgU0NNIEltcGxlbWVudGF0aW9uOiBHaXQKKyAtLS0tLS0KKyBPbGl2aWVyIExhbXkKKyAtLS0tLS0KKyAyMDA4LTA4LTEwCisgLS0tLS0tCisKK35+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK35+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorfn4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK35+IHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK35+IHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKK35+ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK35+IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK35+Cit+fiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorfn4KK35+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK35+IHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCit+fiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK35+IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorfn4gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworfn4gdW5kZXIgdGhlIExpY2Vuc2UuCisKK35+IE5PVEU6IEZvciBoZWxwIHdpdGggdGhlIHN5bnRheCBvZiB0aGlzIGZpbGUsIHNlZToKK35+IGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL2RveGlhL3JlZmVyZW5jZXMvYXB0LWZvcm1hdC5odG1sCisKK1NDTSBJbXBsZW1lbnRhdGlvbjogR2l0CisKKyogR2VuZXJhbCBJbmZvCisKKyAgICBMaW5rIDoge3todHRwOi8vZ2l0LXNjbS5jb20vfX0KKworICAgIExpY2Vuc2UgOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MgorCisqIFNDTSBVcmwKKworICAgIEZvciBhbGwgVVJMcyBiZWxvdywgd2UgdXNlIGEgY29sb24gKDopIGFzIHNlcGFyYXRvci4gSWYgeW91IHVzZSBhIGNvbG9uIGZvciBvbmUgb2YgdGhlIHZhcmlhYmxlcyAoZS5nLiBhIHdpbmRvd3MgcGF0aCksIHRoZW4gdXNlIGEgcGlwZSAofCkgYXMgc2VwYXJhdG9yLgorCistLS0tLS0tCitzY206Z2l0OmdpdDovL3NlcnZlcl9uYW1lWzpwb3J0XS9wYXRoX3RvX3JlcG9zaXRvcnkKK3NjbTpnaXQ6aHR0cDovL3NlcnZlcl9uYW1lWzpwb3J0XS9wYXRoX3RvX3JlcG9zaXRvcnkKK3NjbTpnaXQ6aHR0cHM6Ly9zZXJ2ZXJfbmFtZVs6cG9ydF0vcGF0aF90b19yZXBvc2l0b3J5CitzY206Z2l0OnNzaDovL3NlcnZlcl9uYW1lWzpwb3J0XS9wYXRoX3RvX3JlcG9zaXRvcnkKK3NjbTpnaXQ6ZmlsZTovL1tob3N0bmFtZV0vcGF0aF90b19yZXBvc2l0b3J5CistLS0tLS0tCisKKyogRXhhbXBsZXMKKworLS0tLS0tLQorc2NtOmdpdDpnaXQ6Ly9naXRodWIuY29tL3BhdGhfdG9fcmVwb3NpdG9yeQorc2NtOmdpdDpodHRwOi8vZ2l0aHViLmNvbS9wYXRoX3RvX3JlcG9zaXRvcnkKK3NjbTpnaXQ6aHR0cHM6Ly9naXRodWIuY29tL3BhdGhfdG9fcmVwb3NpdG9yeQorc2NtOmdpdDpzc2g6Ly9naXRodWIuY29tL3BhdGhfdG9fcmVwb3NpdG9yeQorc2NtOmdpdDpmaWxlOi8vbG9jYWxob3N0L3BhdGhfdG9fcmVwb3NpdG9yeQorLS0tLS0tLQorCisqIFByb3ZpZGVyIENvbmZpZ3VyYXRpb24KKworICBUaGUgcHJvdmlkZXIgY29uZmlndXJhdGlvbiBpcyBkZWZpbmVkIGluICR7dXNlci5ob21lfS8uc2NtL2dpdC1zZXR0aW5ncy54bWwuCisKKy0tLS0tLS0KKzxnaXQtc2V0dGluZ3M+CisgIDwhLS0gd2lsbCBoYWQgdGhlIG9wdGlvbiAtLW5vLXZlcmlmeSB0byB0aGUgY29tbWl0IGNvbW1hbmQgY2FuIGJlIGhlbHBmdWxsIHRvIGlnbm9yZSB0cmFpbGluZyBzcGFjZXMgaXNzdWVzIHdpdGggY3lnd2luIGFuZCB0aGUgcmVsZWFzZSBwbHVnaW4gLS0+CisgIDxjb21taXROb1ZlcmlmeT5mYWxzZTwvY29tbWl0Tm9WZXJpZnk+Cis8L2dpdC1zZXR0aW5ncz4KKy0tLS0tLS0KKwpkaWZmIC0tZ2l0IGEvc3JjL3NpdGUvYXB0L2d1aWRlL2luZGV4LmFwdCBiL3NyYy9zaXRlL2FwdC9ndWlkZS9pbmRleC5hcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU2MmFiNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zaXRlL2FwdC9ndWlkZS9pbmRleC5hcHQKQEAgLTAsMCArMSwzNyBAQAorIC0tLS0tLQorIEd1aWRlcworIC0tLS0tLQorIE1hdmVuIFRlYW0KKyAtLS0tLS0KKyAyMDA3LTAzLTEyCisgLS0tLS0tCisKK35+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK35+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorfn4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK35+IHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK35+IHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKK35+ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK35+IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK35+Cit+fiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorfn4KK35+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK35+IHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCit+fiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK35+IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorfn4gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworfn4gdW5kZXIgdGhlIExpY2Vuc2UuCisKK35+IE5PVEU6IEZvciBoZWxwIHdpdGggdGhlIHN5bnRheCBvZiB0aGlzIGZpbGUsIHNlZToKK35+IGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL2RveGlhL3JlZmVyZW5jZXMvYXB0LWZvcm1hdC5odG1sCisKK0d1aWRlcworCisqIHt7e3VzYWdlLmh0bWx9SG93IHRvIHVzZSBNYXZlbi1TQ00gaW4gbXkgYXBwbGljYXRpb24/fX0KKworICBUaGlzIHt7e3VzYWdlLmh0bWx9ZG9jdW1lbnR9fSBkZXNjcmliZSBBUEkgdXNhZ2UgZm9yIGEgU0NNIGNsaWVudC4KKworKiB7e3tuZXdfcHJvdmlkZXIuaHRtbH1Ib3cgdG8gd3JpdGUgYSBuZXcgU0NNIHByb3ZpZGVyP319CisKKyAgVGhpcyB7e3tuZXdfcHJvdmlkZXIuaHRtbH1kb2N1bWVudH19IGRlc2NyaWJlIHN0ZXAgYnkgc3RlcCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYSBuZXcgU0NNIHByb3Zpc2VyLgpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L2d1aWRlL25ld19wcm92aWRlci5hcHQgYi9zcmMvc2l0ZS9hcHQvZ3VpZGUvbmV3X3Byb3ZpZGVyLmFwdApzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSBtYXZlbi1zY20tc2l0ZS9zcmMvc2l0ZS9hcHQvZ3VpZGUvbmV3X3Byb3ZpZGVyLmFwdApyZW5hbWUgdG8gc3JjL3NpdGUvYXB0L2d1aWRlL25ld19wcm92aWRlci5hcHQKaW5kZXggODQxYjk5MC4uZDU1Yzk1YyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L2d1aWRlL25ld19wcm92aWRlci5hcHQKKysrIGIvc3JjL3NpdGUvYXB0L2d1aWRlL25ld19wcm92aWRlci5hcHQKQEAgLTMsOSArMywyOSBAQAogIC0tLS0tLQogIE1hdmVuIFRlYW0KICAtLS0tLS0KLSAyNyBNYXJjaCAyMDA3CisgMjAwNy0wMy0yNwogIC0tLS0tLQogCit+fiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCit+fiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK35+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCit+fiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit+fiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCit+fiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit+fiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cit+fgorfn4gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKK35+Cit+fiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCit+fiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorfn4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCit+fiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK35+IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK35+IHVuZGVyIHRoZSBMaWNlbnNlLgorCit+fiBOT1RFOiBGb3IgaGVscCB3aXRoIHRoZSBzeW50YXggb2YgdGhpcyBmaWxlLCBzZWU6Cit+fiBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9kb3hpYS9yZWZlcmVuY2VzL2FwdC1mb3JtYXQuaHRtbAorCiBIb3cgdG8gd3JpdGUgYSBuZXcgU0NNIHByb3ZpZGVyPwogCiAqIFdoYXQgYXJlIHRoZSBzdGVwcyB0byB3cml0ZSBhIG5ldyBNYXZlbi1TQ00gcHJvdmlkZXI/CmRpZmYgLS1naXQgYS9tYXZlbi1zY20tc2l0ZS9zcmMvc2l0ZS9hcHQvZ3VpZGUvdXNhZ2UuYXB0IGIvc3JjL3NpdGUvYXB0L2d1aWRlL3VzYWdlLmFwdApzaW1pbGFyaXR5IGluZGV4IDg0JQpyZW5hbWUgZnJvbSBtYXZlbi1zY20tc2l0ZS9zcmMvc2l0ZS9hcHQvZ3VpZGUvdXNhZ2UuYXB0CnJlbmFtZSB0byBzcmMvc2l0ZS9hcHQvZ3VpZGUvdXNhZ2UuYXB0CmluZGV4IDFlZGFmN2EuLmI5Yjg5NmIgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1zaXRlL3NyYy9zaXRlL2FwdC9ndWlkZS91c2FnZS5hcHQKKysrIGIvc3JjL3NpdGUvYXB0L2d1aWRlL3VzYWdlLmFwdApAQCAtMyw5ICszLDI5IEBACiAgLS0tLS0tCiAgTWF2ZW4gVGVhbQogIC0tLS0tLQotIDI2IE1hcmNoIDIwMDcKKyAyMDA3LTAzLTI2CiAgLS0tLS0tCiAKK35+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK35+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorfn4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK35+IHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK35+IHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKK35+ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK35+IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK35+Cit+fiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorfn4KK35+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK35+IHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCit+fiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK35+IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorfn4gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworfn4gdW5kZXIgdGhlIExpY2Vuc2UuCisKK35+IE5PVEU6IEZvciBoZWxwIHdpdGggdGhlIHN5bnRheCBvZiB0aGlzIGZpbGUsIHNlZToKK35+IGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL2RveGlhL3JlZmVyZW5jZXMvYXB0LWZvcm1hdC5odG1sCisKIEhvdyB0byB1c2UgTWF2ZW4tU0NNIGluIG15IGFwcGxpY2F0aW9uPwogCiAqIENyZWF0ZSBhbiBTQ00gTWFuYWdlcgpkaWZmIC0tZ2l0IGEvc3JjL3NpdGUvYXB0L2luZGV4LmFwdCBiL3NyYy9zaXRlL2FwdC9pbmRleC5hcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBjYjIzZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zaXRlL2FwdC9pbmRleC5hcHQKQEAgLTAsMCArMSwzNiBAQAorIC0tLS0tLQorIEhvbWUKKyAtLS0tLS0KKyBXaW0gRGVibGF1d2UKKyAtLS0tLS0KKyAyMDA1LTEyLTAxCisgLS0tLS0tCisKK35+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK35+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorfn4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK35+IHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK35+IHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKK35+ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK35+IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK35+Cit+fiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorfn4KK35+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK35+IHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCit+fiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK35+IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorfn4gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworfn4gdW5kZXIgdGhlIExpY2Vuc2UuCisKK35+IE5PVEU6IEZvciBoZWxwIHdpdGggdGhlIHN5bnRheCBvZiB0aGlzIGZpbGUsIHNlZToKK35+IGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL2RveGlhL3JlZmVyZW5jZXMvYXB0LWZvcm1hdC5odG1sCisKK01hdmVuIFNDTQorCisgIE1hdmVuIFNDTSBzdXBwb3J0cyBNYXZlbiAyLnggcGx1Z2lucyAoZS5nLgorICB7e3todHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9wbHVnaW5zL21hdmVuLXJlbGVhc2UtcGx1Z2luL31tYXZlbi1yZWxlYXNlLXBsdWdpbn19KQorICBhbmQgb3RoZXIgdG9vbHMgKGUuZy4ge3t7aHR0cDovL2NvbnRpbnV1bS5hcGFjaGUub3JnL31Db250aW51dW19fSkKKyAgYnkgcHJvdmlkaW5nIHRoZW0gd2l0aCBhIGNvbW1vbiBBUEkgZm9yIGRvaW5nIFNDTSBvcGVyYXRpb25zLiBZb3UgY2FuIGxvb2sgYXQKKyAge3t7c2Ntcy1vdmVydmlldy5odG1sfXRoZSBsaXN0IG9mIFNDTSdzfX0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcKKyAgTWF2ZW4gU0NNIHdpdGggeW91ciBmYXZvcml0ZSBTQ00gdG9vbC4KZGlmZiAtLWdpdCBhL3NyYy9zaXRlL2FwdC9sb2NhbC5hcHQgYi9zcmMvc2l0ZS9hcHQvbG9jYWwuYXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOGNhZTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc2l0ZS9hcHQvbG9jYWwuYXB0CkBAIC0wLDAgKzEsNTUgQEAKKyAtLS0tLS0KKyBTQ00gSW1wbGVtZW50YXRpb246IEZpbGUgU3lzdGVtCisgLS0tLS0tCisgV2ltIERlYmxhdXdlCisgLS0tLS0tCisgMjAwNS0xMi0wMQorIC0tLS0tLQorCit+fiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCit+fiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK35+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCit+fiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit+fiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCit+fiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit+fiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cit+fgorfn4gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKK35+Cit+fiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCit+fiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorfn4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCit+fiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK35+IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK35+IHVuZGVyIHRoZSBMaWNlbnNlLgorCit+fiBOT1RFOiBGb3IgaGVscCB3aXRoIHRoZSBzeW50YXggb2YgdGhpcyBmaWxlLCBzZWU6Cit+fiBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9kb3hpYS9yZWZlcmVuY2VzL2FwdC1mb3JtYXQuaHRtbAorCitTQ00gSW1wbGVtZW50YXRpb246IEZpbGUgU3lzdGVtCisKKyogR2VuZXJhbCBJbmZvCisKKyAgICBMaW5rIDogLQorCisgICAgTGljZW5zZSA6IC0KKworKiBTQ00gVXJsCisKKyAgICBGb3IgYWxsIFVSTHMgYmVsb3csIHdlIHVzZSBhIGNvbG9uICg6KSBhcyBzZXBhcmF0b3IuIElmIHlvdSB1c2UgYSBjb2xvbiBmb3Igb25lIG9mIHRoZSB2YXJpYWJsZXMgKGUuZy4gYSB3aW5kb3dzIHBhdGgpLCB0aGVuIHVzZSBhIHBpcGUgKHwpIGFzIHNlcGFyYXRvci4KKworLS0tLS0tLQorc2NtOmxvY2FsPGRlbGltaXRlcj5wYXRoX3RvX3JlcG9zaXRvcnk8ZGVsaW1pdGVyPm1vZHVsZV9uYW1lCistLS0tLS0tCisKKyAgICA8cGF0aF90b19yZXBvc2l0b3J5PjogVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggdG8gdGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgeW91ciBwb20ueG1sCisKKyAgICA8bW9kdWxlX25hbWU+OiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgeW91ciBwb20ueG1sCisKKworKiBFeGFtcGxlcworCistLS0tLS0tCitzY206bG9jYWw6L3Vzci9tb2R1bGVzOm15X21vZHVsZQorc2NtOmxvY2FsfEM6L2phdmFwcm9qZWN0c3xteV9tb2R1bGUKKy0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9zaXRlL2FwdC9tZXJjdXJpYWwuYXB0IGIvc3JjL3NpdGUvYXB0L21lcmN1cmlhbC5hcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlkYTU2YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zaXRlL2FwdC9tZXJjdXJpYWwuYXB0CkBAIC0wLDAgKzEsNTcgQEAKKyAtLS0tLS0KKyBTQ00gSW1wbGVtZW50YXRpb246IE1lcmN1cmlhbCAoaGcpCisgLS0tLS0tCisgUnlhbiBEYXVtCisgLS0tLS0tCisgMjAwNy0wNC0xMgorIC0tLS0tLQorCit+fiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCit+fiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK35+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCit+fiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit+fiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCit+fiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit+fiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cit+fgorfn4gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKK35+Cit+fiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCit+fiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorfn4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCit+fiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK35+IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK35+IHVuZGVyIHRoZSBMaWNlbnNlLgorCit+fiBOT1RFOiBGb3IgaGVscCB3aXRoIHRoZSBzeW50YXggb2YgdGhpcyBmaWxlLCBzZWU6Cit+fiBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9kb3hpYS9yZWZlcmVuY2VzL2FwdC1mb3JtYXQuaHRtbAorCitTQ00gSW1wbGVtZW50YXRpb246IE1lcmN1cmlhbAorCisqIEdlbmVyYWwgSW5mbworCisgICAgTGluayA6IHt7aHR0cDovL3d3dy5zZWxlbmljLmNvbS9tZXJjdXJpYWwvd2lraS99fQorCisgICAgTGljZW5zZSA6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisKKyAgICAiTWVyY3VyaWFsOiBhIGZhc3QsIGxpZ2h0d2VpZ2h0IFNvdXJjZSBDb250cm9sIE1hbmFnZW1lbnQgc3lzdGVtIGRlc2lnbmVkIGZvciBlZmZpY2llbnQgaGFuZGxpbmcgb2YgdmVyeSBsYXJnZSBkaXN0cmlidXRlZCBwcm9qZWN0cy4iCisKKyAgICBUaGlzIHByb3ZpZGVyIHN1cHBvcnRzIHZlcnNpb24gMC45LjIgYW5kIGdyZWF0ZXIgb2YgTWVyY3VyaWFsLgorCisqIFNDTSBVcmwKKworICAgIFBhdGggb3IgdXJsIHRvIHRoZSBicmFuY2ggbG9jYXRpb24uCisgICAgU3VwcG9ydGVkIHByb3RvY29sczogSFRUUCwgSFRUUFMsIEZJTEUsIGFuZCBsb2NhbCBwYXRoLgorCistLS0tLS0tCitzY206aGc6dXJsX3RvX3JlcG9zaXRvcnkvbG9jYWxfcmVwb3NpdG9yeV9kaXJlY3RvcnkKKy0tLS0tLS0KKworKiBFeGFtcGxlcworCistLS0tLS0tCitzY206aGc6aHR0cDovL2hvc3QvdjMKK3NjbTpoZzpmaWxlOi8vQzovZGV2L3Byb2plY3QvdjMgKHdpbmRvd3MgZHJpdmUpCitzY206aGc6ZmlsZTovLy9ob21lL3Ntb3JncmF2L2Rldi9wcm9qZWN0L3YzIChsaW51eCBkcml2ZSkKK3NjbTpoZzovaG9tZS9zbW9yZ3Jhdi9kZXYvcHJvamVjdC92MyAobG9jYWwgZGlyZWN0b3J5KQorLS0tLS0tLQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L3BlcmZvcmNlLmFwdCBiL3NyYy9zaXRlL2FwdC9wZXJmb3JjZS5hcHQKc2ltaWxhcml0eSBpbmRleCA2MiUKcmVuYW1lIGZyb20gbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L3BlcmZvcmNlLmFwdApyZW5hbWUgdG8gc3JjL3NpdGUvYXB0L3BlcmZvcmNlLmFwdAppbmRleCA1MDUwNmRjLi45MDhhMTA5IDEwMDY0NAotLS0gYS9tYXZlbi1zY20tc2l0ZS9zcmMvc2l0ZS9hcHQvcGVyZm9yY2UuYXB0CisrKyBiL3NyYy9zaXRlL2FwdC9wZXJmb3JjZS5hcHQKQEAgLTMsOSArMywyOSBAQAogIC0tLS0tLQogIFdpbSBEZWJsYXV3ZQogIC0tLS0tLQotIDEgRGVjZW1iZXIgMjAwNQorIDIwMDUtMTItMDEKICAtLS0tLS0KIAorfn4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorfn4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCit+fiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorfn4gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorfn4gdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorfn4gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorfn4gd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorfn4KK35+ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCit+fgorfn4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorfn4gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KK35+ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorfn4gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCit+fiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit+fiB1bmRlciB0aGUgTGljZW5zZS4KKworfn4gTk9URTogRm9yIGhlbHAgd2l0aCB0aGUgc3ludGF4IG9mIHRoaXMgZmlsZSwgc2VlOgorfn4gaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvZG94aWEvcmVmZXJlbmNlcy9hcHQtZm9ybWF0Lmh0bWwKKwogU0NNIEltcGxlbWVudGF0aW9uOiBQZXJmb3JjZQogCiAqIEdlbmVyYWwgSW5mbwpAQCAtMzIsNyArNTIsNyBAQAogCiAqIEFzc29jaWF0aW5nIEpvYnMgd2l0aCBjaGVja2luIGNoYW5nZWxpc3QKICAgICBNYW55IFBlcmZvcmNlIGluc3RhbGxhdGlvbiBoYXZlIGEgJ3JlcXVpcmUgam9iJyBydWxlL3RyaWdnZXIgdHVybmVkIG9uLgotICAgIFRvIGFsbG93IGNoZWNraW4gd2hlbiBzdWNoIGEgcnVsZSBpcyBkZWZpbmVkLCB0aGUgc3lzdGVtIHByb3BlcnR5IG1hdmVuLnNjbS5qb2JzIAorICAgIFRvIGFsbG93IGNoZWNraW4gd2hlbiBzdWNoIGEgcnVsZSBpcyBkZWZpbmVkLCB0aGUgc3lzdGVtIHByb3BlcnR5IG1hdmVuLnNjbS5qb2JzCiAgICAgY2FuIGJlIHNldCB0byBzcGVjaWZ5IGEgam9iIHRoYXQgd2lsbCBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIGNoYW5nZWxpc3Qgb24gY2hlY2tpbi4KICAgICBIYW5kbGluZyBvZiBtdWx0aXBsZSBqb2JzIGlzIGN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQuCiAgICAgU2FtcGxlOiAtRG1hdmVuLnNjbS5qb2JzPUpPQjEyMzQKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1zaXRlL3NyYy9zaXRlL2FwdC9zY20tY29tbWFuZHMuYXB0IGIvc3JjL3NpdGUvYXB0L3NjbS1jb21tYW5kcy5hcHQKc2ltaWxhcml0eSBpbmRleCA2NCUKcmVuYW1lIGZyb20gbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L3NjbS1jb21tYW5kcy5hcHQKcmVuYW1lIHRvIHNyYy9zaXRlL2FwdC9zY20tY29tbWFuZHMuYXB0CmluZGV4IDEwNTI0ZjEuLjJmNTc3NzQgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1zaXRlL3NyYy9zaXRlL2FwdC9zY20tY29tbWFuZHMuYXB0CisrKyBiL3NyYy9zaXRlL2FwdC9zY20tY29tbWFuZHMuYXB0CkBAIC0zLDkgKzMsMjkgQEAKICAtLS0tLS0KICBXaW0gRGVibGF1d2UKICAtLS0tLS0KLSAxIERlY2VtYmVyIDIwMDUKKyAyMDA1LTEyLTAxCiAgLS0tLS0tCiAKK35+IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK35+IG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorfn4gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK35+IHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK35+IHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKK35+ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK35+IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK35+Cit+fiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorfn4KK35+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK35+IHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCit+fiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK35+IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorfn4gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworfn4gdW5kZXIgdGhlIExpY2Vuc2UuCisKK35+IE5PVEU6IEZvciBoZWxwIHdpdGggdGhlIHN5bnRheCBvZiB0aGlzIGZpbGUsIHNlZToKK35+IGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL2RveGlhL3JlZmVyZW5jZXMvYXB0LWZvcm1hdC5odG1sCisKIE1hdmVuIFNDTSBDb21tYW5kcwogCiAgIE1hdmVuIFNDTSB1c2VzIGEgZXhwb3NlcyBhIGZpeGVkIHNldCBvZiBjb21tYW5kcyBmb3IgaXQgdXNlcnMuIFRoZSBwcm92aWRlcnMgZm9yIGVhY2ggU0NNIG11c3QgaW1wbGVtZW50cyB0aG9zZSBjb21tYW5kcyB0aHJvdWdoCmRpZmYgLS1naXQgYS9zcmMvc2l0ZS9hcHQvc2NtLXVybC1mb3JtYXQuYXB0IGIvc3JjL3NpdGUvYXB0L3NjbS11cmwtZm9ybWF0LmFwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODY2OWViCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3NpdGUvYXB0L3NjbS11cmwtZm9ybWF0LmFwdApAQCAtMCwwICsxLDQzIEBACisgLS0tLS0tCisgU0NNIFVSTCBmb3JtYXQKKyAtLS0tLS0KKyBFbW1hbnVlbCBWZW5pc3NlCisgLS0tLS0tCisgMjAwNS0wNi0wNQorIC0tLS0tLQorCit+fiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCit+fiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK35+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCit+fiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit+fiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCit+fiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit+fiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cit+fgorfn4gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKK35+Cit+fiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCit+fiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorfn4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCit+fiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK35+IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK35+IHVuZGVyIHRoZSBMaWNlbnNlLgorCit+fiBOT1RFOiBGb3IgaGVscCB3aXRoIHRoZSBzeW50YXggb2YgdGhpcyBmaWxlLCBzZWU6Cit+fiBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9kb3hpYS9yZWZlcmVuY2VzL2FwdC1mb3JtYXQuaHRtbAorCitTQ00gVVJMIEZvcm1hdAorCisqIFNDTSBVcmwKKworICBUaGUgZ2VuZXJhbCBmb3JtYXQgZm9yIGEgU0NNIFVybCBpcworCistLS0tLS0tCitzY206PHNjbV9wcm92aWRlcj48ZGVsaW1pdGVyPjxwcm92aWRlcl9zcGVjaWZpY19wYXJ0PgorLS0tLS0tLQorCisgIEFzIGRlbGltaXRlciB5b3UgY2FuIHVzZSBlaXRoZXIgY29sb24gJzonIG9yLCBpZiB5b3UgdXNlIGEgY29sb24gZm9yIG9uZQorICBvZiB0aGUgdmFyaWFibGVzIChlLmcuIGEgd2luZG93cyBwYXRoKSwgeW91IGNhbiB1c2UgYSBwaXBlICd8Jy4KKworICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb3ZpZGVyIHNwZWNpZmljIHBhcnQsIHNlZSB0aGUgYXBwcm9wcmlhdGUKKyAge3t7c2Ntcy1vdmVydmlldy5odG1sfVNDTSBpbXBsZW1lbnRhdGlvbn19LgpkaWZmIC0tZ2l0IGEvc3JjL3NpdGUvYXB0L3NjbXMtb3ZlcnZpZXcuYXB0IGIvc3JjL3NpdGUvYXB0L3NjbXMtb3ZlcnZpZXcuYXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYzM4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc2l0ZS9hcHQvc2Ntcy1vdmVydmlldy5hcHQKQEAgLTAsMCArMSw4OSBAQAorIC0tLS0tLQorIE92ZXJ2aWV3IG9mIFNDTSdzCisgLS0tLS0tCisgV2ltIERlYmxhdXdlCisgLS0tLS0tCisgMjAwNS0xMi0wMQorIC0tLS0tLQorCit+fiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCit+fiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK35+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCit+fiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit+fiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCit+fiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit+fiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cit+fgorfn4gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKK35+Cit+fiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCit+fiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorfn4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCit+fiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK35+IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK35+IHVuZGVyIHRoZSBMaWNlbnNlLgorCit+fiBOT1RFOiBGb3IgaGVscCB3aXRoIHRoZSBzeW50YXggb2YgdGhpcyBmaWxlLCBzZWU6Cit+fiBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9kb3hpYS9yZWZlcmVuY2VzL2FwdC1mb3JtYXQuaHRtbAorCitPdmVydmlldyBvZiBTQ00ncworCisgIE1hdmVuIFNDTSBzdXBwb3J0cyBtYW55IFNDTSdzLiBUaGlzIGlzIGEgbGlzdCBvZiBhbGwgY3VycmVudGx5IGtub3duIFNDTSdzOgorCisqIEZ1bGx5IGltcGxlbWVudGVkIFNDTSdzCisKKyAgKiB7e3tiYXphYXIuaHRtbH1CYXphYXJ9fQorCisgICoge3t7Y3ZzLmh0bWx9Q1ZTfX0KKworICAqIHt7e21lcmN1cmlhbC5odG1sfU1lcmN1cmlhbH19CisKKyAgKiB7e3twZXJmb3JjZS5odG1sfVBlcmZvcmNlfX0KKworICAqIHt7e3N0YXJ0ZWFtLmh0bWx9U3RhclRlYW19fQorCisgICoge3t7c3VidmVyc2lvbi5odG1sfVN1YnZlcnNpb259fQorCisgICoge3t7c3luZXJneS5odG1sfUNNIFN5bmVyZ3l9fQorCisqIFBhcnRpYWxseSBpbXBsZW1lbnRlZCBTQ00ncworCisgICoge3t7YWNjdXJldi5odG1sfUFjY3VyZXZ9fQorCisgICoge3t7Y2xlYXJjYXNlLmh0bWx9Q2xlYXJDYXNlfX0KKworICAqIHt7e2dpdC5odG1sfUdpdH19CisKKyAgKiB7e3tsb2NhbC5odG1sfUZpbGUgc3lzdGVtfX0KKworICAqIHt7e3Zzcy5odG1sfVZpc3VhbCBTb3VyY2UgU2FmZX19CisKKyogTm90IGltcGxlbWVudGVkIFNDTSdzCisKKyAgICBUaGlzIGlzIGEgbGlzdCBvZiBhbGwgdGhlIGtub3duIFNDTSdzIHRoYXQgYXJlIG5vdCBpbXBsZW1lbnRlZCBjdXJyZW50bHkuCisKKyAgKiBBZWdpcworCisgICogQXJjaAorCisgICogQml0S2VlcGVyCisKKyAgKiBDbGVhckNhc2UgTXVsdGlzaXRlCisKKyAgKiBDb2RlIENvLW9wCisKKyAgKiBEYXJjcworCisgICogTW9ub3RvbmUKKworICAqIE9wZW5DTQorCisgICogUHVyZUNNCisKKyAgKiBTZXJlbmEgUFZDUyAvIERpbWVuc2lvbgorCisgICogU3RhcnRlYW0gRW50ZXJwcmlzZQorCisgICogU3ZrCisKKyAgKiBWZXN0YQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L3N0YXJ0ZWFtLmFwdCBiL3NyYy9zaXRlL2FwdC9zdGFydGVhbS5hcHQKc2ltaWxhcml0eSBpbmRleCA3MSUKcmVuYW1lIGZyb20gbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L3N0YXJ0ZWFtLmFwdApyZW5hbWUgdG8gc3JjL3NpdGUvYXB0L3N0YXJ0ZWFtLmFwdAppbmRleCBlYmM2ZDlmLi4yZWRlMzNkIDEwMDY0NAotLS0gYS9tYXZlbi1zY20tc2l0ZS9zcmMvc2l0ZS9hcHQvc3RhcnRlYW0uYXB0CisrKyBiL3NyYy9zaXRlL2FwdC9zdGFydGVhbS5hcHQKQEAgLTMsOSArMywyOSBAQAogIC0tLS0tLQogIFdpbSBEZWJsYXV3ZQogIC0tLS0tLQotIDEgRGVjZW1iZXIgMjAwNQorIDIwMDUtMTItMDEKICAtLS0tLS0KIAorfn4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorfn4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCit+fiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorfn4gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorfn4gdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorfn4gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorfn4gd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorfn4KK35+ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCit+fgorfn4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorfn4gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KK35+ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorfn4gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCit+fiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit+fiB1bmRlciB0aGUgTGljZW5zZS4KKworfn4gTk9URTogRm9yIGhlbHAgd2l0aCB0aGUgc3ludGF4IG9mIHRoaXMgZmlsZSwgc2VlOgorfn4gaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvZG94aWEvcmVmZXJlbmNlcy9hcHQtZm9ybWF0Lmh0bWwKKwogU0NNIEltcGxlbWVudGF0aW9uOiBTdGFyVGVhbQogCiAqIEdlbmVyYWwgSW5mbwpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L3N1YnZlcnNpb24uYXB0IGIvc3JjL3NpdGUvYXB0L3N1YnZlcnNpb24uYXB0CnNpbWlsYXJpdHkgaW5kZXggNjUlCnJlbmFtZSBmcm9tIG1hdmVuLXNjbS1zaXRlL3NyYy9zaXRlL2FwdC9zdWJ2ZXJzaW9uLmFwdApyZW5hbWUgdG8gc3JjL3NpdGUvYXB0L3N1YnZlcnNpb24uYXB0CmluZGV4IGI3MzhhOGYuLjE5Y2Q0NzAgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1zaXRlL3NyYy9zaXRlL2FwdC9zdWJ2ZXJzaW9uLmFwdAorKysgYi9zcmMvc2l0ZS9hcHQvc3VidmVyc2lvbi5hcHQKQEAgLTMsOSArMywyOSBAQAogIC0tLS0tLQogIFdpbSBEZWJsYXV3ZQogIC0tLS0tLQotIDEgRGVjZW1iZXIgMjAwNQorIDIwMDUtMTItMDEKICAtLS0tLS0KIAorfn4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorfn4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCit+fiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorfn4gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorfn4gdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorfn4gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorfn4gd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorfn4KK35+ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCit+fgorfn4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorfn4gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KK35+ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorfn4gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCit+fiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit+fiB1bmRlciB0aGUgTGljZW5zZS4KKworfn4gTk9URTogRm9yIGhlbHAgd2l0aCB0aGUgc3ludGF4IG9mIHRoaXMgZmlsZSwgc2VlOgorfn4gaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvZG94aWEvcmVmZXJlbmNlcy9hcHQtZm9ybWF0Lmh0bWwKKwogU0NNIEltcGxlbWVudGF0aW9uOiBTdWJ2ZXJzaW9uCiAKICogR2VuZXJhbCBJbmZvCmRpZmYgLS1naXQgYS9tYXZlbi1zY20tc2l0ZS9zcmMvc2l0ZS9hcHQvc3luZXJneS5hcHQgYi9zcmMvc2l0ZS9hcHQvc3luZXJneS5hcHQKc2ltaWxhcml0eSBpbmRleCA4MiUKcmVuYW1lIGZyb20gbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L3N5bmVyZ3kuYXB0CnJlbmFtZSB0byBzcmMvc2l0ZS9hcHQvc3luZXJneS5hcHQKaW5kZXggY2JjNmJhOC4uZmMzYmIyMyAxMDA2NDQKLS0tIGEvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvYXB0L3N5bmVyZ3kuYXB0CisrKyBiL3NyYy9zaXRlL2FwdC9zeW5lcmd5LmFwdApAQCAtMyw5ICszLDI5IEBACiAgLS0tLS0tCiAgSnVsaWVuIEhlbnJ5IChDYXBnZW1pbmkpICYgTGEgUG9zdGUKICAtLS0tLS0KLSBPY3RvYmVyLCAyMyAyMDA2CisgMjAwNi0xMC0yMwogIC0tLS0tLQogCit+fiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCit+fiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK35+IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCit+fiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit+fiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCit+fiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit+fiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cit+fgorfn4gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKK35+Cit+fiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCit+fiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorfn4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCit+fiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK35+IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK35+IHVuZGVyIHRoZSBMaWNlbnNlLgorCit+fiBOT1RFOiBGb3IgaGVscCB3aXRoIHRoZSBzeW50YXggb2YgdGhpcyBmaWxlLCBzZWU6Cit+fiBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9kb3hpYS9yZWZlcmVuY2VzL2FwdC1mb3JtYXQuaHRtbAorCiBTQ00gSW1wbGVtZW50YXRpb246IENNL1N5bmVyZ3kKIAogKiBHZW5lcmFsIEluZm8KZGlmZiAtLWdpdCBhL3NyYy9zaXRlL2FwdC92c3MuYXB0IGIvc3JjL3NpdGUvYXB0L3Zzcy5hcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFlNDIyNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zaXRlL2FwdC92c3MuYXB0CkBAIC0wLDAgKzEsNTUgQEAKKyAtLS0tLS0KKyBTQ00gSW1wbGVtZW50YXRpb246IFZpc3VhbCBTb3VyY2UgU2FmZQorIC0tLS0tLQorIFdpbSBEZWJsYXV3ZQorIC0tLS0tLQorIDIwMDUtMTItMDEKKyAtLS0tLS0KKworfn4gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorfn4gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCit+fiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorfn4gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorfn4gdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorfn4gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorfn4gd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorfn4KK35+ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCit+fgorfn4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorfn4gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KK35+ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorfn4gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCit+fiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit+fiB1bmRlciB0aGUgTGljZW5zZS4KKworfn4gTk9URTogRm9yIGhlbHAgd2l0aCB0aGUgc3ludGF4IG9mIHRoaXMgZmlsZSwgc2VlOgorfn4gaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvZG94aWEvcmVmZXJlbmNlcy9hcHQtZm9ybWF0Lmh0bWwKKworU0NNIEltcGxlbWVudGF0aW9uOiBWaXN1YWwgU291cmNlIFNhZmUKKworKiBHZW5lcmFsIEluZm8KKworICAgIExpbmsgOiB7e2h0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vc3NhZmUvfX0KKworICAgIExpY2Vuc2UgOiBDb21tZXJjaWFsCisKKyogU0NNIFVybAorCisgICAgQmVjYXVzZSBhIGNvbG9uIGlzIHVzZWQgZm9yIG9uZSBvZiB0aGUgdmFyaWFibGVzIChhIHdpbmRvd3MgcGF0aCksIGEgcGlwZSAofCkgaXMgdXNlZCBhcyB0aGUgZGVsaW1pdGVyLgorCisgICAgVGhlIGdlbmVyYWwgZm9ybWF0IGZvciBhIFZTUyBTQ00gVXJsIGlzCisKKy0tLS0tLS0KK3NjbTp2c3N8cGF0aF90b19yZXBvc2l0b3J5fC9tb2R1bGVfbmFtZQorLS0tLS0tLQorCisgICAgVGhlIHRoaXJkIHZhcmlhYmxlIGlzIHRoZSBwYXRoIHRvIHRoZSBWaXN1YWwgU291cmNlIFNhZmUgcmVwb3NpdG9yeSAod2hlcmUgc3Jjc2FmZS5pbmkgcmVzaWRlcykuCisKKyAgICBOb3RlIHRoYXQgYSBmb3J3YXJkIHNsYXNoIGlzIG5lY2Vzc2FyeSBiZWZvcmUgdGhlIG1vZHVsZSBuYW1lIGluIHRoZSBmaW5hbCB2YXJpYWJsZS4KKworKiBFeGFtcGxlcworCistLS0tLS0tCitzY206dnNzfEM6XFByb2dyYW0gRmlsZXNcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW9cVlNTfC9Tb21lUHJvamVjdAorLS0tLS0tLQpkaWZmIC0tZ2l0IGEvbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvcmVzb3VyY2VzL2Nzcy9zaXRlLmNzcyBiL3NyYy9zaXRlL3Jlc291cmNlcy9jc3Mvc2l0ZS5jc3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1hdmVuLXNjbS1zaXRlL3NyYy9zaXRlL3Jlc291cmNlcy9jc3Mvc2l0ZS5jc3MKcmVuYW1lIHRvIHNyYy9zaXRlL3Jlc291cmNlcy9jc3Mvc2l0ZS5jc3MKZGlmZiAtLWdpdCBhL3NyYy9zaXRlL3Jlc291cmNlcy9pbWFnZXMvY2hlY2suZ2lmIGIvc3JjL3NpdGUvcmVzb3VyY2VzL2ltYWdlcy9jaGVjay5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhiYjk5OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zaXRlL3Jlc291cmNlcy9pbWFnZXMvY2hlY2suZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9zaXRlL3Jlc291cmNlcy9pbWFnZXMvZXJyb3IuZ2lmIGIvc3JjL3NpdGUvcmVzb3VyY2VzL2ltYWdlcy9lcnJvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ2OGE4YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zaXRlL3Jlc291cmNlcy9pbWFnZXMvZXJyb3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9zaXRlL3Jlc291cmNlcy9pbWFnZXMvZm9yYmlkZGVuLmdpZiBiL3NyYy9zaXRlL3Jlc291cmNlcy9pbWFnZXMvZm9yYmlkZGVuLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFjZGVjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3NpdGUvcmVzb3VyY2VzL2ltYWdlcy9mb3JiaWRkZW4uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21hdmVuLXNjbS1zaXRlL3NyYy9zaXRlL3NpdGUueG1sIGIvc3JjL3NpdGUvc2l0ZS54bWwKc2ltaWxhcml0eSBpbmRleCA4MyUKcmVuYW1lIGZyb20gbWF2ZW4tc2NtLXNpdGUvc3JjL3NpdGUvc2l0ZS54bWwKcmVuYW1lIHRvIHNyYy9zaXRlL3NpdGUueG1sCmluZGV4IDIwZTRlODEuLmY4N2NiZWIgMTAwNjQ0Ci0tLSBhL21hdmVuLXNjbS1zaXRlL3NyYy9zaXRlL3NpdGUueG1sCisrKyBiL3NyYy9zaXRlL3NpdGUueG1sCkBAIC0xOSwxMCArMTksNiBAQAogICAtLT4KIAogPHByb2plY3Q+Ci0gIDxza2luPgotICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uc2tpbnM8L2dyb3VwSWQ+Ci0gICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3R5bHVzLXNraW48L2FydGlmYWN0SWQ+Ci0gIDwvc2tpbj4KICAgPGJhbm5lckxlZnQ+CiAgICAgPG5hbWU+TWF2ZW48L25hbWU+CiAgICAgPHNyYz5odHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvaW1hZ2VzL2FwYWNoZS1tYXZlbi1wcm9qZWN0LTIucG5nPC9zcmM+CkBAIC0zMSw3ICsyNywyNiBAQAogICA8YmFubmVyUmlnaHQ+CiAgICAgPHNyYz5odHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvaW1hZ2VzL21hdmVuLWxvZ28tMi5naWY8L3NyYz4KICAgPC9iYW5uZXJSaWdodD4KKworICA8c2tpbj4KKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnNraW5zPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPm1hdmVuLXN0eWx1cy1za2luPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjEuMC4xPC92ZXJzaW9uPgorICA8L3NraW4+CisKKyAgPHB1Ymxpc2hEYXRlIGZvcm1hdD0ieXl5eS1NTS1kZCIgcG9zaXRpb249ImxlZnQiIC8+CisgIDx2ZXJzaW9uIHBvc2l0aW9uPSJsZWZ0IiAvPgorCiAgIDxib2R5PgorICAgIDxoZWFkPgorICAgICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly93d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vdXJjaGluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgPC9zY3JpcHQ+CisgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIF91YWNjdCA9ICJVQS0xNDA4NzktMSI7CisgICAgICAgIHVyY2hpblRyYWNrZXIoKTsKKyAgICAgIDwvc2NyaXB0PgorICAgIDwvaGVhZD4KKwogICAgIDxsaW5rcz4KICAgICAgIDxpdGVtIG5hbWU9IkFwYWNoZSIgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnLyIvPgogICAgICAgPGl0ZW0gbmFtZT0iTWF2ZW4gMS54IiBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi0xLngiLz4KQEAgLTQxLDE1ICs1NiwxNyBAQAogICAgICAgPGl0ZW0gbmFtZT0iSlhSIiBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9qeHIiLz4KICAgICAgIDxpdGVtIG5hbWU9IkRveGlhIiBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9kb3hpYSIvPgogICAgIDwvbGlua3M+CisKKyAgICA8bWVudSByZWY9Im1vZHVsZXMiIC8+CisKICAgICA8bWVudSBuYW1lPSJRdWljayBMaW5rcyI+CiAgICAgICA8aXRlbSBuYW1lPSJIb21lIiBocmVmPSIvaW5kZXguaHRtbCIvPgotICAgICAgPGl0ZW0gbmFtZT0iTWF2ZW4gU0NNIFBsdWdpbiIgaHJlZj0iL3BsdWdpbnMvaW5kZXguaHRtbCIvPgotICAgICAgPGl0ZW0gbmFtZT0iSmF2YWRvYyIgaHJlZj0iL3Byb2plY3RzL2FwaWRvY3MvaW5kZXguaHRtbCIvPgorICAgICAgPGl0ZW0gbmFtZT0iSmF2YWRvYyIgaHJlZj0iL2FwaWRvY3MvaW5kZXguaHRtbCIvPgogICAgICAgPGl0ZW0gbmFtZT0iU0NNIFVSTCBGb3JtYXQiIGhyZWY9Ii9zY20tdXJsLWZvcm1hdC5odG1sIi8+CiAgICAgICA8aXRlbSBuYW1lPSJTdXBwb3J0ZWQgU0NNcyIgaHJlZj0iL3NjbXMtb3ZlcnZpZXcuaHRtbCIgY29sbGFwc2U9InRydWUiPgogICAgICAgICA8aXRlbSBuYW1lPSJBY2N1cmV2IiBocmVmPSIvYWNjdXJldi5odG1sIi8+CiAgICAgICAgIDxpdGVtIG5hbWU9IkJhemFhciIgaHJlZj0iL2JhemFhci5odG1sIi8+Ci0gICAgICAgIDxpdGVtIG5hbWU9Ik1lcmN1cmlhbCIgaHJlZj0iL21lcmN1cmlhbC5odG1sIi8+ICAgICAgICAgICAgICAgICAgCisgICAgICAgIDxpdGVtIG5hbWU9Ik1lcmN1cmlhbCIgaHJlZj0iL21lcmN1cmlhbC5odG1sIi8+CiAgICAgICAgIDxpdGVtIG5hbWU9IkNsZWFyY2FzZSIgaHJlZj0iL2NsZWFyY2FzZS5odG1sIi8+CiAgICAgICAgIDxpdGVtIG5hbWU9IkNNIFN5bmVyZ3kiIGhyZWY9Ii9zeW5lcmd5Lmh0bWwiLz4KICAgICAgICAgPGl0ZW0gbmFtZT0iQ1ZTIiBocmVmPSIvY3ZzLmh0bWwiLz4KQEAgLTY0LDcgKzgxLDcgQEAKICAgICAgICAgPGl0ZW0gbmFtZT0iSG93IHRvIHVzZSBNYXZlbi1TQ00gaW4gbXkgYXBwbGljYXRpb24iIGhyZWY9Ii9ndWlkZS91c2FnZS5odG1sIi8+CiAgICAgICAgIDxpdGVtIG5hbWU9IkhvdyB0byB3cml0ZSBhIG5ldyBTQ00gcHJvdmlkZXIiIGhyZWY9Ii9ndWlkZS9uZXdfcHJvdmlkZXIuaHRtbCIvPgogICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gbmFtZT0iU0NNIHByb3ZpZGVycyBNYXRyaXgiIGhyZWY9Imh0dHA6Ly9kb2NzLmNvZGVoYXVzLm9yZy9kaXNwbGF5L1NDTS9TQ00rTWF0cml4Ii8+CisgICAgICA8aXRlbSBuYW1lPSJTQ00gUHJvdmlkZXJzIE1hdHJpeCIgaHJlZj0iL21hdHJpeC5odG1sIi8+CiAgICAgPC9tZW51PgogCiAgICAgPG1lbnUgcmVmPSJyZXBvcnRzIi8+CmRpZmYgLS1naXQgYS9zcmMvc2l0ZS94ZG9jL21hdHJpeC54bWwgYi9zcmMvc2l0ZS94ZG9jL21hdHJpeC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFmY2Y4NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zaXRlL3hkb2MvbWF0cml4LnhtbApAQCAtMCwwICsxLDY4NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KKworPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK3NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK0tJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKworPGRvY3VtZW50PgorICA8cHJvcGVydGllcz4KKyAgICA8dGl0bGU+TWF2ZW4gU0NNIFByb3ZpZGVycyBNYXRyaXg8L3RpdGxlPgorICAgIDxhdXRob3IgZW1haWw9InZzaXZldG9uQGFwYWNoZS5vcmciPlZpbmNlbnQgU2l2ZXRvbjwvYXV0aG9yPgorICA8L3Byb3BlcnRpZXM+CisKKyAgPGJvZHk+CisgICAgPHNlY3Rpb24gbmFtZT0iTWF2ZW4gU0NNIFByb3ZpZGVycyBNYXRyaXgiPgorICAgICAgPHA+VGhpcyBtYXRyaXggcHJlc2VudHMgYWxsIFNDTSBwcm92aWRlcnMgYWN1dGFsbHkgc3VwcG9ydGVkIGJ5IHRoZSBNYXZlbiBTQ00gcHJvamVjdC48L3A+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGg+IFNDTSA8L3RoPgorICAgICAgICAgICAgPHRoPiBhZGQgPC90aD4KKyAgICAgICAgICAgIDx0aD4gYnJhbmNoIDwvdGg+CisgICAgICAgICAgICA8dGg+IGNoYW5nZWxvZyA8L3RoPgorICAgICAgICAgICAgPHRoPiBjaGVja2luIDwvdGg+CisgICAgICAgICAgICA8dGg+IGNoZWNrb3V0IDwvdGg+CisgICAgICAgICAgICA8dGg+IGRpZmYgPC90aD4KKyAgICAgICAgICAgIDx0aD4gZWRpdCA8L3RoPgorICAgICAgICAgICAgPHRoPiBleHBvcnQgPC90aD4KKyAgICAgICAgICAgIDx0aD4gbGlzdCA8L3RoPgorICAgICAgICAgICAgPHRoPiBsb2dpbiA8L3RoPgorICAgICAgICAgICAgPHRoPiByZW1vdmUgPC90aD4KKyAgICAgICAgICAgIDx0aD4gc3RhdHVzIDwvdGg+CisgICAgICAgICAgICA8dGg+IHRhZyA8L3RoPgorICAgICAgICAgICAgPHRoPiB1bmVkaXQgPC90aD4KKyAgICAgICAgICAgIDx0aD4gdXBkYXRlIDwvdGg+CisgICAgICAgICAgICA8dGg+IFB1cmUgSmF2YSA8L3RoPgorICAgICAgICAgIDwvdHI+CisgICAgICAgICAgPHRyPgorICAgICAgICAgICAgPHRkPiBCYXphYXIgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9lcnJvci5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2ZvcmJpZGRlbi5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZXJyb3IuZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2Vycm9yLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9mb3JiaWRkZW4uZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZXJyb3IuZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2ZvcmJpZGRlbi5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2Vycm9yLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPC90cj4KKyAgICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGQ+IENsZWFyY2FzZSA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2Vycm9yLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9lcnJvci5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2Vycm9yLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9lcnJvci5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZm9yYmlkZGVuLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2Vycm9yLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPC90cj4KKyAgICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGQ+IENNIFN5bmVyZ3kgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9lcnJvci5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZXJyb3IuZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9lcnJvci5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZXJyb3IuZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2Vycm9yLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2Vycm9yLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPC90cj4KKyAgICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGQ+IENWUyA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZXJyb3IuZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2Vycm9yLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZXJyb3IuZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8L3RyPgorICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0ZD4gQ1ZTIChQdXJlIEphdmEgY2xpZW50KSA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZXJyb3IuZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2Vycm9yLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8L3RyPgorICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0ZD4gR0lUIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9mb3JiaWRkZW4uZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2ZvcmJpZGRlbi5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2ZvcmJpZGRlbi5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZm9yYmlkZGVuLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZXJyb3IuZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8L3RyPgorICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0ZD4gTG9jYWwgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9lcnJvci5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZXJyb3IuZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2Vycm9yLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9lcnJvci5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZXJyb3IuZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2ZvcmJpZGRlbi5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZXJyb3IuZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2Vycm9yLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9lcnJvci5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZXJyb3IuZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgIDwvdHI+CisgICAgICAgICAgPHRyPgorICAgICAgICAgICAgPHRkPiBNZXJjdXJpYWwgKGhnKSA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2Vycm9yLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZm9yYmlkZGVuLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9lcnJvci5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZXJyb3IuZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2ZvcmJpZGRlbi5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9lcnJvci5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZm9yYmlkZGVuLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZXJyb3IuZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8L3RyPgorICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0ZD4gTWljcm9zb2Z0IFZTUyA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2Vycm9yLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZXJyb3IuZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9lcnJvci5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2Vycm9yLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9lcnJvci5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZm9yYmlkZGVuLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9lcnJvci5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2Vycm9yLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9lcnJvci5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2Vycm9yLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPC90cj4KKyAgICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGQ+IFBlcmZvcmNlIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZXJyb3IuZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZXJyb3IuZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2Vycm9yLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9mb3JiaWRkZW4uZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZXJyb3IuZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8L3RyPgorICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0ZD4gU3RhcnRlYW0gPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9lcnJvci5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9lcnJvci5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZXJyb3IuZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2ZvcmJpZGRlbi5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9lcnJvci5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgIDwvdHI+CisgICAgICAgICAgPHRyPgorICAgICAgICAgICAgPHRkPiBTdWJ2ZXJzaW9uIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9mb3JiaWRkZW4uZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvZm9yYmlkZGVuLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iLi9pbWFnZXMvY2hlY2suZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9mb3JiaWRkZW4uZ2lmIiAvPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vaW1hZ2VzL2NoZWNrLmdpZiIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL2ltYWdlcy9lcnJvci5naWYiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgIDwvdHI+CisgICAgICAgIDwvdGJvZHk+CisgICAgICA8L3RhYmxlPgorCisgICAgICA8cD5LZXlzOgorICAgICAgICA8dWw+CisgICAgICAgICAgPGxpPjxpbWcgc3JjPSIuL2ltYWdlcy9jaGVjay5naWYiIC8+OiBGdW5jdGlvbmFsPC9saT4KKyAgICAgICAgICA8bGk+PGltZyBzcmM9Ii4vaW1hZ2VzL2ZvcmJpZGRlbi5naWYiIC8+OiBEb2Vzbid0IGV4aXN0IGluIFNDTSB0b29sPC9saT4KKyAgICAgICAgICA8bGk+PGltZyBzcmM9Ii4vaW1hZ2VzL2Vycm9yLmdpZiIgLz46IE5vdCBpbXBsZW1lbnRlZDwvbGk+CisgICAgICAgIDwvdWw+CisgICAgICA8L3A+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gbmFtZT0iUmVsYXRlZCBMaW5rcyI+CisgICAgICA8dWw+CisgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZG9jcy5jb2RlaGF1cy5vcmcvZGlzcGxheS9TQ00vU0NNK01hdHJpeCI+V2lraSBvZiBNYXZlbiBTQ00gTWF0cml4PC9hPjwvbGk+CisgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbXBhcmlzb25fb2ZfcmV2aXNpb25fY29udHJvbF9zb2Z0d2FyZSI+Q29tcGFyaXNvbiBvZiByZXZpc2lvbiBjb250cm9sIHNvZnR3YXJlPC9hPjwvbGk+CisgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NvdXJjZV9Db2RlX01hbmFnZW1lbnQjQ29tbW9uX3ZvY2FidWxhcnkiPlNDTSBDb21tb24gdm9jYWJ1bGFyeTwvYT48L2xpPgorICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5jbWNyb3Nzcm9hZHMuY29tL2NnaS1iaW4vY213aWtpL3ZpZXcvQ00vIj5DTSBXaWtpPC9hPjwvbGk+CisgICAgICA8L3VsPgorICAgIDwvc2VjdGlvbj4KKyAgPC9ib2R5PgorPC9kb2N1bWVudD4K