ICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBGaWxlVXBsb2FkIDEuNCBSRUxFQVNFIE5PVEVTCgpUaGUgQXBhY2hlIENvbW1vbnMgRmlsZVVwbG9hZCB0ZWFtIGlzIHBsZWFzZWQgdG8gYW5ub3VuY2UgdGhlIHJlbGVhc2Ugb2YgQXBhY2hlIENvbW1vbnMgRmlsZVVwbG9hZCAxLjQuCgpUaGUgQXBhY2hlIENvbW1vbnMgRmlsZVVwbG9hZCBjb21wb25lbnQgcHJvdmlkZXMgYSBzaW1wbGUgeWV0IGZsZXhpYmxlIG1lYW5zIG9mCmFkZGluZyBzdXBwb3J0IGZvciBtdWx0aXBhcnQgZmlsZSB1cGxvYWQgZnVuY3Rpb25hbGl0eSB0byBzZXJ2bGV0cyBhbmQgd2ViCmFwcGxpY2F0aW9ucy4gVmVyc2lvbiAxLjMgb253YXJkcyByZXF1aXJlcyBKYXZhIDYgb3IgbGF0ZXIuCgpObyBjbGllbnQgY29kZSBjaGFuZ2VzIGFyZSByZXF1aXJlZCB0byBtaWdyYXRlIGZyb20gdmVyc2lvbiAxLjMuMCB0byAxLjMuMS4KCgoxLjQgUmVsZWFzZQoKQ2hhbmdlcyBpbiB2ZXJzaW9uIDEuNCBpbmNsdWRlOgoKTmV3IGZlYXR1cmVzOgpvICAgICAgICAgICAgICAgICAgU2l0ZTogYWRkZWQgc2VjdXJpdHkgcmVwb3J0CgpGaXhlZCBCdWdzOgpvIEZJTEVVUExPQUQtMjUyOiAgRGlza0ZpbGVJdGVtI3dyaXRlKCkgY291bGQgbG9zZSBvcmlnaW5hbCBJTyBleGNlcHRpb24KbyBGSUxFVVBMT0FELTI1ODogIERpc2tGaWxlSXRlbSNnZXRTdG9yZUxvY2F0aW9uKCkgd3JvbmdseSByZXR1cm5lZCBhIEZpbGUgb2JqZWN0IGZvciBpdGVtcyBzdG9yZWQgaW4gbWVtb3J5Cm8gRklMRVVQTE9BRC0yNDI6ICBGaWxlVXBsb2FkQmFzZSAtIHNob3VsZCBub3Qgc2lsZW50bHkgY2F0Y2ggYW5kIGlnbm9yZSBhbGwgVGhyb3dhYmxlcwpvIEZJTEVVUExPQUQtMjU3OiAgRml4IEphdmFkb2MgMS44LjAgZXJyb3JzCm8gRklMRVVQTE9BRC0yMzQ6ICBGaXggc2VjdGlvbiAiUmVzb3VyY2UgY2xlYW51cCIgb2YgdGhlIHVzZXIgZ3VpZGUKbyBGSUxFVVBMT0FELTIzNzogIEZpeCBzdHJlYW1pbmcgZXhhbXBsZTogdXNlIEZpbGVJdGVtLmdldElucHV0U3RyZWFtKCkgaW5zdGVhZCBvZiBvcGVuU3RyZWFtKCkKbyBGSUxFVVBMT0FELTI0ODogIERpc2tGaWxlSXRlbSBtaWdodCBzdXBwcmVzcyBjcml0aWNhbCBJT0V4Y2VwdGlvbnMgb24gcmVuYW1lIC0gdXNlIEZpbGVVdGlsLm1vdmUgaW5zdGVhZApvIEZJTEVVUExPQUQtMjUxOiAgRGlza0ZpbGVJdGVtI2dldFRlbXBGaWxlKCkgaXMgYnJva2VuCm8gRklMRVVQTE9BRC0yNTA6ICBGaWxlVXBsb2FkQmFzZSAtIHBvdGVudGlhbCByZXNvdXJjZSBsZWFrIC0gSW5wdXRTdHJlYW0gbm90IGNsb3NlZCBvbiBleGNlcHRpb24KbyBGSUxFVVBMT0FELTI0NDogIERpc2tGaWxlSXRlbS5yZWFkT2JqZWN0IGZhaWxzIHRvIGNsb3NlIEZpbGVJbnB1dFN0cmVhbQpvIEZJTEVVUExPQUQtMjQ1OiAgRGlza0ZpbGVJdGVtLmdldCgpIG1heSBub3QgZnVsbHkgcmVhZCB0aGUgZGF0YQoKQ2hhbmdlczoKbyBGSUxFVVBMT0FELTI5MjogIERvbid0IGNyZWF0ZSB1bi1uZWVkZWQgcmVzb3VyY2VzIGluIEZpbGVVcGxvYWRCYXNlLmphdmEKbyBGSUxFVVBMT0FELTI4MjogIFVwdmVyc2lvbiBjb21wbGllci5zb3VyY2UsIGNvbXBpbGVyLnRhcmdldCB0byAxLjYKbyBGSUxFVVBMT0FELTI0NjogIEZpbGVVcGxvYWQgc2hvdWxkIHVzZSBJT1V0aWxzLmNsb3NlUXVpZXRseSB3aGVyZSByZWxldmFudApvIEZJTEVVUExPQUQtMjQzOiAgTWFrZSBzb21lIE11bHRpcGFydFN0cmVhbSBwcml2YXRlIGZpZWxkcyBmaW5hbCBUaGFua3MgdG8gVmlsbGUgU2t5dHTkLgoKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBGaWxlVXBsb2FkLCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQXBhY2hlIENvbW1vbnMgRmlsZVVwbG9hZCB3ZWJzaXRlOgoKaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtZmlsZXVwbG9hZC8KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBGaWxlVXBsb2FkIDEuMy4zIFJFTEVBU0UgTk9URVMKClRoZSBBcGFjaGUgQ29tbW9ucyBGaWxlVXBsb2FkIHRlYW0gaXMgcGxlYXNlZCB0byBhbm5vdW5jZSB0aGUgcmVsZWFzZSBvZiBBcGFjaGUgQ29tbW9ucyBGaWxlVXBsb2FkIDEuMy4zLgoKVGhlIEFwYWNoZSBDb21tb25zIEZpbGVVcGxvYWQgY29tcG9uZW50IHByb3ZpZGVzIGEgc2ltcGxlIHlldCBmbGV4aWJsZSBtZWFucyBvZgphZGRpbmcgc3VwcG9ydCBmb3IgbXVsdGlwYXJ0IGZpbGUgdXBsb2FkIGZ1bmN0aW9uYWxpdHkgdG8gc2VydmxldHMgYW5kIHdlYgphcHBsaWNhdGlvbnMuIFZlcnNpb24gMS4zIG9ud2FyZHMgcmVxdWlyZXMgSmF2YSA1IG9yIGxhdGVyLgoKTm8gY2xpZW50IGNvZGUgY2hhbmdlcyBhcmUgcmVxdWlyZWQgdG8gbWlncmF0ZSBmcm9tIHZlcnNpb24gMS4zLjAsIDEuMy4xLCBvciAxLjMuMiwgdG8gMS4zLjMKCkNoYW5nZXMgaW4gdmVyc2lvbiAxLjMuMyBpbmNsdWRlOgoKbyBGSUxFVVBMT0FELTI3OTogIERpc2tGaWxlSXRlbSBjYW4gbm8gbG9uZ2VyIGJlIGRlc2VyaWFsaXplZCwgdW5sZXNzIGEgcGFydGljdWxhciBzeXN0ZW0gcHJvcGVydHkgaXMgc2V0LgoKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBGaWxlVXBsb2FkLCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQXBhY2hlIENvbW1vbnMgRmlsZVVwbG9hZCB3ZWJzaXRlOgoKaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtZmlsZXVwbG9hZC8KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKTm8gY2xpZW50IGNvZGUgY2hhbmdlcyBhcmUgcmVxdWlyZWQgdG8gbWlncmF0ZSBmcm9tIHZlcnNpb24gMS4zLjEgdG8gMS4zLjIuCgpDaGFuZ2VzIGluIHZlcnNpb24gMS4zLjIgaW5jbHVkZToKCm8gRklMRVVQTE9BRC0yNzI6ICBQZXJmb3JtYW5jZSBJbXByb3ZlbWVudCBpbiBNdWx0aXBhcnRTdHJlYW0uIFByZXZlbnRzIGEgRG9TIChDVkUtMjAxNi0zMDkyKQoKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBGaWxlVXBsb2FkLCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQXBhY2hlIENvbW1vbnMgRmlsZVVwbG9hZCB3ZWJzaXRlOgoKaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtZmlsZXVwbG9hZC8KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBGaWxlVXBsb2FkIDEuMy4xIFJFTEVBU0UgTk9URVMKClRoZSBBcGFjaGUgQ29tbW9ucyBGaWxlVXBsb2FkIHRlYW0gaXMgcGxlYXNlZCB0byBhbm5vdW5jZSB0aGUgcmVsZWFzZSBvZiBBcGFjaGUgQ29tbW9ucyBGaWxlVXBsb2FkIDEuMy4xLgoKVGhlIEFwYWNoZSBDb21tb25zIEZpbGVVcGxvYWQgY29tcG9uZW50IHByb3ZpZGVzIGEgc2ltcGxlIHlldCBmbGV4aWJsZSBtZWFucyBvZgphZGRpbmcgc3VwcG9ydCBmb3IgbXVsdGlwYXJ0IGZpbGUgdXBsb2FkIGZ1bmN0aW9uYWxpdHkgdG8gc2VydmxldHMgYW5kIHdlYgphcHBsaWNhdGlvbnMuIFZlcnNpb24gMS4zIG9ud2FyZHMgcmVxdWlyZXMgSmF2YSA1IG9yIGxhdGVyLgoKTm8gY2xpZW50IGNvZGUgY2hhbmdlcyBhcmUgcmVxdWlyZWQgdG8gbWlncmF0ZSBmcm9tIHZlcnNpb24gMS4zLjAgdG8gMS4zLjEuCgoKVGhpcyBpcyBhIHNlY3VyaXR5IGFuZCBtYWludGVuYW5jZSByZWxlYXNlIHRoYXQgaW5jbHVkZXMgYW4gaW1wb3J0YW50IHNlY3VyaXR5CmZpeCBhcyB3ZWxsIGFzIGEgc21hbGwgbnVtYmVyIG9mIGJ1Z2ZpeGVzLgoKQ2hhbmdlcyBpbiB2ZXJzaW9uIDEuMy4xIGluY2x1ZGU6CgoKRml4ZWQgQnVnczoKbyAgICAgICAgICAgICAgICAgIFNFQ1VSSVRZIC0gQ1ZFLTIwMTQtMDA1MC4gU3BlY2lhbGx5IGNyYWZ0ZWQgaW5wdXQgY2FuIHRyaWdnZXIgYSBEb1MgaWYgdGhlCiAgICAgICAgICAgICAgICAgICBidWZmZXIgdXNlZCBieSB0aGUgTXVsdGlwYXJ0U3RyZWFtIGlzIG5vdCBiaWcgZW5vdWdoLiBXaGVuIGNvbnN0cnVjdGluZwogICAgICAgICAgICAgICAgICAgTXVsdGlwYXJ0U3RyZWFtIGVuZm9yY2UgdGhlIHJlcXVpcmVtZW50cyBmb3IgYnVmZmVyIHNpemUgYnkgdGhyb3dpbmcgYW4KICAgICAgICAgICAgICAgICAgIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgcmVxdWVzdGVkIGJ1ZmZlciBzaXplIGlzIHRvbyBzbWFsbC4gVGhpcwogICAgICAgICAgICAgICAgICAgcHJldmVudHMgdGhlIERvUy4KbyAgICAgICAgICAgICAgICAgIFdoZW4gZGVzZXJpYWxpemluZyBEaXNrRmlsZUl0ZW1zIGVuc3VyZSB0aGF0IHRoZSByZXBvc2l0b3J5IGxvY2F0aW9uLCBpZgogICAgICAgICAgICAgICAgICAgYW55LCBpcyBhIHZhbGlkIG9uZS4gVGhhbmtzIHRvIEFydW4gQmFidSBOZWVsaWNhdHR1LgpvICAgICAgICAgICAgICAgICAgQ29ycmVjdCBleGFtcGxlIGluIHVzYWdlIGRvY3VtZW50YXRpb24gc28gaXQgY29tcGlsZXMuCgoKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBGaWxlVXBsb2FkLCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQXBhY2hlIENvbW1vbnMgRmlsZVVwbG9hZCB3ZWJzaXRlOgoKaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtZmlsZXVwbG9hZC8KCg==