LyohLS0tLS0tLS0tLS0tLS0tLS0gVHlwZVNjcmlwdCBUaGlyZFBhcnR5Tm90aWNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGUgVHlwZVNjcmlwdCBzb2Z0d2FyZSBpbmNvcnBvcmF0ZXMgdGhpcmQgcGFydHkgbWF0ZXJpYWwgZnJvbSB0aGUgcHJvamVjdHMgbGlzdGVkIGJlbG93LiBUaGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGxpY2Vuc2UgdW5kZXIgd2hpY2ggTWljcm9zb2Z0IHJlY2VpdmVkIHN1Y2ggdGhpcmQgcGFydHkgbWF0ZXJpYWwgYXJlIHNldCBmb3J0aCBiZWxvdy4gTWljcm9zb2Z0IHJlc2VydmVzIGFsbCBvdGhlciByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkLCB3aGV0aGVyIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGhpcmQgUGFydHkgQ29kZSBDb21wb25lbnRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgotLS0tLS0tLS0tLS0tLS0tLS0tIERlZmluaXRlbHlUeXBlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLQpUaGlzIGZpbGUgaXMgYmFzZWQgb24gb3IgaW5jb3Jwb3JhdGVzIG1hdGVyaWFsIGZyb20gdGhlIHByb2plY3RzIGxpc3RlZCBiZWxvdyAoY29sbGVjdGl2ZWx5ICJUaGlyZCBQYXJ0eSBDb2RlIikuIE1pY3Jvc29mdCBpcyBub3QgdGhlIG9yaWdpbmFsIGF1dGhvciBvZiB0aGUgVGhpcmQgUGFydHkgQ29kZS4gVGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBsaWNlbnNlLCB1bmRlciB3aGljaCBNaWNyb3NvZnQgcmVjZWl2ZWQgc3VjaCBUaGlyZCBQYXJ0eSBDb2RlLCBhcmUgc2V0IGZvcnRoIGJlbG93LiBTdWNoIGxpY2Vuc2VzIGFuZCBub3RpY2VzIGFyZSBwcm92aWRlZCBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5LiBNaWNyb3NvZnQsIG5vdCB0aGUgdGhpcmQgcGFydHksIGxpY2Vuc2VzIHRoZSBUaGlyZCBQYXJ0eSBDb2RlIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgc2V0IGZvcnRoIGluIHRoZSBFVUxBIGZvciB0aGUgTWljcm9zb2Z0IFByb2R1Y3QuIE1pY3Jvc29mdCByZXNlcnZlcyBhbGwgb3RoZXIgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIGFncmVlbWVudCwgd2hldGhlciBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLgpEZWZpbml0ZWx5VHlwZWQKVGhpcyBwcm9qZWN0IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4gQ29weXJpZ2h0cyBhcmUgcmVzcGVjdGl2ZSBvZiBlYWNoIGNvbnRyaWJ1dG9yIGxpc3RlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggZGVmaW5pdGlvbiBmaWxlLiBQcm92aWRlZCBmb3IgSW5mb3JtYXRpb25hbCBQdXJwb3NlcyBPbmx5CgpNSVQgTGljZW5zZQpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICIiU29mdHdhcmUiIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgotLS0tLS0tLS0tLS0tLS0tLS0tIFVuaWNvZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0KVU5JQ09ERSwgSU5DLiBMSUNFTlNFIEFHUkVFTUVOVCAtIERBVEEgRklMRVMgQU5EIFNPRlRXQVJFCgpVbmljb2RlIERhdGEgRmlsZXMgaW5jbHVkZSBhbGwgZGF0YSBmaWxlcyB1bmRlciB0aGUgZGlyZWN0b3JpZXMKaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvLCBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvLApodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NsZHIvZGF0YS8sIGh0dHA6Ly9zb3VyY2UuaWN1LXByb2plY3Qub3JnL3JlcG9zL2ljdS8sIGFuZApodHRwOi8vd3d3LnVuaWNvZGUub3JnL3V0aWxpdHkvdHJhYy9icm93c2VyLy4KClVuaWNvZGUgRGF0YSBGaWxlcyBkbyBub3QgaW5jbHVkZSBQREYgb25saW5lIGNvZGUgY2hhcnRzIHVuZGVyIHRoZQpkaXJlY3RvcnkgaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvLgoKU29mdHdhcmUgaW5jbHVkZXMgYW55IHNvdXJjZSBjb2RlIHB1Ymxpc2hlZCBpbiB0aGUgVW5pY29kZSBTdGFuZGFyZApvciB1bmRlciB0aGUgZGlyZWN0b3JpZXMKaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvLCBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvLApodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NsZHIvZGF0YS8sIGh0dHA6Ly9zb3VyY2UuaWN1LXByb2plY3Qub3JnL3JlcG9zL2ljdS8sIGFuZApodHRwOi8vd3d3LnVuaWNvZGUub3JnL3V0aWxpdHkvdHJhYy9icm93c2VyLy4KCk5PVElDRSBUTyBVU0VSOiBDYXJlZnVsbHkgcmVhZCB0aGUgZm9sbG93aW5nIGxlZ2FsIGFncmVlbWVudC4KQlkgRE9XTkxPQURJTkcsIElOU1RBTExJTkcsIENPUFlJTkcgT1IgT1RIRVJXSVNFIFVTSU5HIFVOSUNPREUgSU5DLidTCkRBVEEgRklMRVMgKCJEQVRBIEZJTEVTIiksIEFORC9PUiBTT0ZUV0FSRSAoIlNPRlRXQVJFIiksCllPVSBVTkVRVUlWT0NBTExZIEFDQ0VQVCwgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZLCBBTEwgT0YgVEhFClRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5ULgpJRiBZT1UgRE8gTk9UIEFHUkVFLCBETyBOT1QgRE9XTkxPQUQsIElOU1RBTEwsIENPUFksIERJU1RSSUJVVEUgT1IgVVNFClRIRSBEQVRBIEZJTEVTIE9SIFNPRlRXQVJFLgoKQ09QWVJJR0hUIEFORCBQRVJNSVNTSU9OIE5PVElDRQoKQ29weXJpZ2h0IChjKSAxOTkxLTIwMTcgVW5pY29kZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpEaXN0cmlidXRlZCB1bmRlciB0aGUgVGVybXMgb2YgVXNlIGluIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvY29weXJpZ2h0Lmh0bWwuCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoZSBVbmljb2RlIGRhdGEgZmlsZXMgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKHRoZSAiRGF0YSBGaWxlcyIpIG9yIFVuaWNvZGUgc29mdHdhcmUgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKHRoZSAiU29mdHdhcmUiKSB0byBkZWFsIGluIHRoZSBEYXRhIEZpbGVzIG9yIFNvZnR3YXJlCndpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCmNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGFuZC9vciBzZWxsIGNvcGllcyBvZgp0aGUgRGF0YSBGaWxlcyBvciBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIERhdGEgRmlsZXMKb3IgU29mdHdhcmUgYXJlIGZ1cm5pc2hlZCB0byBkbyBzbywgcHJvdmlkZWQgdGhhdCBlaXRoZXIKKGEpIHRoaXMgY29weXJpZ2h0IGFuZCBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgd2l0aCBhbGwgY29waWVzCm9mIHRoZSBEYXRhIEZpbGVzIG9yIFNvZnR3YXJlLCBvcgooYikgdGhpcyBjb3B5cmlnaHQgYW5kIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhc3NvY2lhdGVkCkRvY3VtZW50YXRpb24uCgpUSEUgREFUQSBGSUxFUyBBTkQgU09GVFdBUkUgQVJFIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YKQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUKV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORApOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBIT0xERVJTIElOQ0xVREVEIElOIFRISVMKTk9USUNFIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBPUiBBTlkgU1BFQ0lBTCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMCkRBTUFHRVMsIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsCkRBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgpQRVJGT1JNQU5DRSBPRiBUSEUgREFUQSBGSUxFUyBPUiBTT0ZUV0FSRS4KCkV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIGEgY29weXJpZ2h0IGhvbGRlcgpzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwKdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoZXNlIERhdGEgRmlsZXMgb3IgU29mdHdhcmUgd2l0aG91dCBwcmlvcgp3cml0dGVuIGF1dGhvcml6YXRpb24gb2YgdGhlIGNvcHlyaWdodCBob2xkZXIuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi0tLS0tLS0tLS0tLS0tLS0tLS1Eb2N1bWVudCBPYmplY3QgTW9kZWwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpET00gCgpXM0MgTGljZW5zZQpUaGlzIHdvcmsgaXMgYmVpbmcgcHJvdmlkZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZS4KQnkgb2J0YWluaW5nIGFuZC9vciBjb3B5aW5nIHRoaXMgd29yaywgeW91ICh0aGUgbGljZW5zZWUpIGFncmVlIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwgYW5kIHdpbGwgY29tcGx5IHdpdGggdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KUGVybWlzc2lvbiB0byBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgd29yaywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiygZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBvciByb3lhbHR5IGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgCm9uIEFMTCBjb3BpZXMgb2YgdGhlIHdvcmsgb3IgcG9ydGlvbnMgdGhlcmVvZiwgaW5jbHVkaW5nIG1vZGlmaWNhdGlvbnM6CiogVGhlIGZ1bGwgdGV4dCBvZiB0aGlzIE5PVElDRSBpbiBhIGxvY2F0aW9uIHZpZXdhYmxlIHRvIHVzZXJzIG9mIHRoZSByZWRpc3RyaWJ1dGVkIG9yIGRlcml2YXRpdmUgd29yay4KKiBBbnkgcHJlLWV4aXN0aW5nIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBkaXNjbGFpbWVycywgbm90aWNlcywgb3IgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElmIG5vbmUgZXhpc3QsIHRoZSBXM0MgU29mdHdhcmUgYW5kIERvY3VtZW50IFNob3J0IE5vdGljZSBzaG91bGQgYmUgaW5jbHVkZWQuCiogTm90aWNlIG9mIGFueSBjaGFuZ2VzIG9yIG1vZGlmaWNhdGlvbnMsIHRocm91Z2ggYSBjb3B5cmlnaHQgc3RhdGVtZW50IG9uIHRoZSBuZXcgY29kZSBvciBkb2N1bWVudCBzdWNoIGFzICJUaGlzIHNvZnR3YXJlIG9yIGRvY3VtZW50IGluY2x1ZGVzIG1hdGVyaWFsIGNvcGllZCBmcm9tIG9yIGRlcml2ZWQgCmZyb20gW3RpdGxlIGFuZCBVUkkgb2YgdGhlIFczQyBkb2N1bWVudF0uIENvcHlyaWdodCCpIFtZRUFSXSBXM0OuIChNSVQsIEVSQ0lNLCBLZWlvLCBCZWloYW5nKS4iIApEaXNjbGFpbWVycwpUSElTIFdPUksgSVMgUFJPVklERUQgIkFTIElTLCIgQU5EIENPUFlSSUdIVCBIT0xERVJTIE1BS0UgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTywgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgCkZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBPUiBET0NVTUVOVCBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUEFURU5UUywgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMuCkNPUFlSSUdIVCBIT0xERVJTIFdJTEwgTk9UIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIEFOWSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5ULgpUaGUgbmFtZSBhbmQgdHJhZGVtYXJrcyBvZiBjb3B5cmlnaHQgaG9sZGVycyBtYXkgTk9UIGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gdGhlIHdvcmsgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAKVGl0bGUgdG8gY29weXJpZ2h0IGluIHRoaXMgd29yayB3aWxsIGF0IGFsbCB0aW1lcyByZW1haW4gd2l0aCBjb3B5cmlnaHQgaG9sZGVycy4KCi0tLS0tLS0tLQoKRE9NCkNvcHlyaWdodCCpIDIwMTggV0hBVFdHIChBcHBsZSwgR29vZ2xlLCBNb3ppbGxhLCBNaWNyb3NvZnQpLiBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgYSBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2U6IEF0dHJpYnV0aW9uIDQuMCBJbnRlcm5hdGlvbmFsIAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKQ3JlYXRpdmUgQ29tbW9ucyBDb3Jwb3JhdGlvbiAoIkNyZWF0aXZlIENvbW1vbnMiKSBpcyBub3QgYSBsYXcgZmlybSBhbmQgZG9lcyBub3QgcHJvdmlkZSBsZWdhbCBzZXJ2aWNlcyBvciBsZWdhbCBhZHZpY2UuIERpc3RyaWJ1dGlvbiBvZiBDcmVhdGl2ZSBDb21tb25zIHB1YmxpYyBsaWNlbnNlcyBkb2VzIG5vdCBjcmVhdGUgYSBsYXd5ZXItY2xpZW50IG9yIG90aGVyIHJlbGF0aW9uc2hpcC4gQ3JlYXRpdmUgQ29tbW9ucyBtYWtlcyBpdHMgbGljZW5zZXMgYW5kIHJlbGF0ZWQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIG9uIGFuICJhcy1pcyIgYmFzaXMuIENyZWF0aXZlIENvbW1vbnMgZ2l2ZXMgbm8gd2FycmFudGllcyByZWdhcmRpbmcgaXRzIGxpY2Vuc2VzLCBhbnkgbWF0ZXJpYWwgbGljZW5zZWQgdW5kZXIgdGhlaXIgdGVybXMgYW5kIGNvbmRpdGlvbnMsIG9yIGFueSByZWxhdGVkIGluZm9ybWF0aW9uLiBDcmVhdGl2ZSBDb21tb25zIGRpc2NsYWltcyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzIHJlc3VsdGluZyBmcm9tIHRoZWlyIHVzZSB0byB0aGUgZnVsbGVzdCBleHRlbnQgcG9zc2libGUuIFVzaW5nIENyZWF0aXZlIENvbW1vbnMgUHVibGljIExpY2Vuc2VzIENyZWF0aXZlIENvbW1vbnMgcHVibGljIGxpY2Vuc2VzIHByb3ZpZGUgYSBzdGFuZGFyZCBzZXQgb2YgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBjcmVhdG9ycyBhbmQgb3RoZXIgcmlnaHRzIGhvbGRlcnMgbWF5IHVzZSB0byBzaGFyZSBvcmlnaW5hbCB3b3JrcyBvZiBhdXRob3JzaGlwIGFuZCBvdGhlciBtYXRlcmlhbCBzdWJqZWN0IHRvIGNvcHlyaWdodCBhbmQgY2VydGFpbiBvdGhlciByaWdodHMgc3BlY2lmaWVkIGluIHRoZSBwdWJsaWMgbGljZW5zZSBiZWxvdy4gVGhlIGZvbGxvd2luZyBjb25zaWRlcmF0aW9ucyBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSwgYXJlIG5vdCBleGhhdXN0aXZlLCBhbmQgZG8gbm90IGZvcm0gcGFydCBvZiBvdXIgbGljZW5zZXMuIENvbnNpZGVyYXRpb25zIGZvciBsaWNlbnNvcnM6IE91ciBwdWJsaWMgbGljZW5zZXMgYXJlIGludGVuZGVkIGZvciB1c2UgYnkgdGhvc2UgYXV0aG9yaXplZCB0byBnaXZlIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgbWF0ZXJpYWwgaW4gd2F5cyBvdGhlcndpc2UgcmVzdHJpY3RlZCBieSBjb3B5cmlnaHQgYW5kIGNlcnRhaW4gb3RoZXIgcmlnaHRzLiBPdXIgbGljZW5zZXMgYXJlIGlycmV2b2NhYmxlLiBMaWNlbnNvcnMgc2hvdWxkIHJlYWQgYW5kIHVuZGVyc3RhbmQgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBsaWNlbnNlIHRoZXkgY2hvb3NlIGJlZm9yZSBhcHBseWluZyBpdC4gTGljZW5zb3JzIHNob3VsZCBhbHNvIHNlY3VyZSBhbGwgcmlnaHRzIG5lY2Vzc2FyeSBiZWZvcmUgYXBwbHlpbmcgb3VyIGxpY2Vuc2VzIHNvIHRoYXQgdGhlIHB1YmxpYyBjYW4gcmV1c2UgdGhlIG1hdGVyaWFsIGFzIGV4cGVjdGVkLiBMaWNlbnNvcnMgc2hvdWxkIGNsZWFybHkgbWFyayBhbnkgbWF0ZXJpYWwgbm90IHN1YmplY3QgdG8gdGhlIGxpY2Vuc2UuIFRoaXMgaW5jbHVkZXMgb3RoZXIgQ0MtIGxpY2Vuc2VkIG1hdGVyaWFsLCBvciBtYXRlcmlhbCB1c2VkIHVuZGVyIGFuIGV4Y2VwdGlvbiBvciBsaW1pdGF0aW9uIHRvIGNvcHlyaWdodC4gTW9yZSBjb25zaWRlcmF0aW9ucyBmb3IgbGljZW5zb3JzOgoKd2lraS5jcmVhdGl2ZWNvbW1vbnMub3JnL0NvbnNpZGVyYXRpb25zX2Zvcl9saWNlbnNvcnMgQ29uc2lkZXJhdGlvbnMgZm9yIHRoZSBwdWJsaWM6IEJ5IHVzaW5nIG9uZSBvZiBvdXIgcHVibGljIGxpY2Vuc2VzLCBhIGxpY2Vuc29yIGdyYW50cyB0aGUgcHVibGljIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBsaWNlbnNlZCBtYXRlcmlhbCB1bmRlciBzcGVjaWZpZWQgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElmIHRoZSBsaWNlbnNvcidzIHBlcm1pc3Npb24gaXMgbm90IG5lY2Vzc2FyeSBmb3IgYW55IHJlYXNvbi0tZm9yIGV4YW1wbGUsIGJlY2F1c2Ugb2YgYW55IGFwcGxpY2FibGUgZXhjZXB0aW9uIG9yIGxpbWl0YXRpb24gdG8gY29weXJpZ2h0LS10aGVuIHRoYXQgdXNlIGlzIG5vdCByZWd1bGF0ZWQgYnkgdGhlIGxpY2Vuc2UuIE91ciBsaWNlbnNlcyBncmFudCBvbmx5IHBlcm1pc3Npb25zIHVuZGVyIGNvcHlyaWdodCBhbmQgY2VydGFpbiBvdGhlciByaWdodHMgdGhhdCBhIGxpY2Vuc29yIGhhcyBhdXRob3JpdHkgdG8gZ3JhbnQuIFVzZSBvZiB0aGUgbGljZW5zZWQgbWF0ZXJpYWwgbWF5IHN0aWxsIGJlIHJlc3RyaWN0ZWQgZm9yIG90aGVyIHJlYXNvbnMsIGluY2x1ZGluZyBiZWNhdXNlIG90aGVycyBoYXZlIGNvcHlyaWdodCBvciBvdGhlciByaWdodHMgaW4gdGhlIG1hdGVyaWFsLiBBIGxpY2Vuc29yIG1heSBtYWtlIHNwZWNpYWwgcmVxdWVzdHMsIHN1Y2ggYXMgYXNraW5nIHRoYXQgYWxsIGNoYW5nZXMgYmUgbWFya2VkIG9yIGRlc2NyaWJlZC4gQWx0aG91Z2ggbm90IHJlcXVpcmVkIGJ5IG91ciBsaWNlbnNlcywgeW91IGFyZSBlbmNvdXJhZ2VkIHRvIHJlc3BlY3QgdGhvc2UgcmVxdWVzdHMgd2hlcmUgcmVhc29uYWJsZS4gTW9yZV9jb25zaWRlcmF0aW9ucyBmb3IgdGhlIHB1YmxpYzogd2lraS5jcmVhdGl2ZWNvbW1vbnMub3JnL0NvbnNpZGVyYXRpb25zX2Zvcl9saWNlbnNlZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gNC4wIEludGVybmF0aW9uYWwgUHVibGljIExpY2Vuc2UgQnkgZXhlcmNpc2luZyB0aGUgTGljZW5zZWQgUmlnaHRzIChkZWZpbmVkIGJlbG93KSwgWW91IGFjY2VwdCBhbmQgYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiA0LjAgSW50ZXJuYXRpb25hbCBQdWJsaWMgTGljZW5zZSAoIlB1YmxpYyBMaWNlbnNlIikuIFRvIHRoZSBleHRlbnQgdGhpcyBQdWJsaWMgTGljZW5zZSBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBjb250cmFjdCwgWW91IGFyZSBncmFudGVkIHRoZSBMaWNlbnNlZCBSaWdodHMgaW4gY29uc2lkZXJhdGlvbiBvZiBZb3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGFuZCB0aGUgTGljZW5zb3IgZ3JhbnRzIFlvdSBzdWNoIHJpZ2h0cyBpbiBjb25zaWRlcmF0aW9uIG9mIGJlbmVmaXRzIHRoZSBMaWNlbnNvciByZWNlaXZlcyBmcm9tIG1ha2luZyB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYXZhaWxhYmxlIHVuZGVyIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiBTZWN0aW9uIDEgLS0gRGVmaW5pdGlvbnMuIGEuIEFkYXB0ZWQgTWF0ZXJpYWwgbWVhbnMgbWF0ZXJpYWwgc3ViamVjdCB0byBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIHRoYXQgaXMgZGVyaXZlZCBmcm9tIG9yIGJhc2VkIHVwb24gdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGFuZCBpbiB3aGljaCB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgaXMgdHJhbnNsYXRlZCwgYWx0ZXJlZCwgYXJyYW5nZWQsIHRyYW5zZm9ybWVkLCBvciBvdGhlcndpc2UgbW9kaWZpZWQgaW4gYSBtYW5uZXIgcmVxdWlyaW5nIHBlcm1pc3Npb24gdW5kZXIgdGhlIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgaGVsZCBieSB0aGUgTGljZW5zb3IuIEZvciBwdXJwb3NlcyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLCB3aGVyZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgaXMgYSBtdXNpY2FsIHdvcmssIHBlcmZvcm1hbmNlLCBvciBzb3VuZCByZWNvcmRpbmcsIEFkYXB0ZWQgTWF0ZXJpYWwgaXMgYWx3YXlzIHByb2R1Y2VkIHdoZXJlIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBpcyBzeW5jaGVkIGluIHRpbWVkIHJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UuIGIuIEFkYXB0ZXIncyBMaWNlbnNlIG1lYW5zIHRoZSBsaWNlbnNlIFlvdSBhcHBseSB0byBZb3VyIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgaW4gWW91ciBjb250cmlidXRpb25zIHRvIEFkYXB0ZWQgTWF0ZXJpYWwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLiBjLiBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIG1lYW5zIGNvcHlyaWdodCBhbmQvb3Igc2ltaWxhciByaWdodHMgY2xvc2VseSByZWxhdGVkIHRvIGNvcHlyaWdodCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcGVyZm9ybWFuY2UsIGJyb2FkY2FzdCwgc291bmQgcmVjb3JkaW5nLCBhbmQgU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzLCB3aXRob3V0IHJlZ2FyZCB0byBob3cgdGhlIHJpZ2h0cyBhcmUgbGFiZWxlZCBvciBjYXRlZ29yaXplZC4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgUHVibGljIExpY2Vuc2UsIHRoZSByaWdodHMgc3BlY2lmaWVkIGluIFNlY3Rpb24gMihiKSgxKS0oMikgYXJlIG5vdCBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzLiBkLiBFZmZlY3RpdmUgVGVjaG5vbG9naWNhbCBNZWFzdXJlcyBtZWFucyB0aG9zZSBtZWFzdXJlcyB0aGF0LCBpbiB0aGUgYWJzZW5jZSBvZiBwcm9wZXIgYXV0aG9yaXR5LCBtYXkgbm90IGJlIGNpcmN1bXZlbnRlZCB1bmRlciBsYXdzIGZ1bGZpbGxpbmcgb2JsaWdhdGlvbnMgdW5kZXIgQXJ0aWNsZSAxMSBvZiB0aGUgV0lQTyBDb3B5cmlnaHQgVHJlYXR5IGFkb3B0ZWQgb24gRGVjZW1iZXIgMjAsIDE5OTYsIGFuZC9vciBzaW1pbGFyIGludGVybmF0aW9uYWwgYWdyZWVtZW50cy4gZS4gRXhjZXB0aW9ucyBhbmQgTGltaXRhdGlvbnMgbWVhbnMgZmFpciB1c2UsIGZhaXIgZGVhbGluZywgYW5kL29yIGFueSBvdGhlciBleGNlcHRpb24gb3IgbGltaXRhdGlvbiB0byBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIHRoYXQgYXBwbGllcyB0byBZb3VyIHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwuIGYuIExpY2Vuc2VkIE1hdGVyaWFsIG1lYW5zIHRoZSBhcnRpc3RpYyBvciBsaXRlcmFyeSB3b3JrLCBkYXRhYmFzZSwgb3Igb3RoZXIgbWF0ZXJpYWwgdG8gd2hpY2ggdGhlIExpY2Vuc29yIGFwcGxpZWQgdGhpcyBQdWJsaWMgTGljZW5zZS4gZy4gTGljZW5zZWQgUmlnaHRzIG1lYW5zIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3Ugc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSwgd2hpY2ggYXJlIGxpbWl0ZWQgdG8gYWxsIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgdGhhdCBhcHBseSB0byBZb3VyIHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIHRoYXQgdGhlIExpY2Vuc29yIGhhcyBhdXRob3JpdHkgdG8gbGljZW5zZS4gaC4gTGljZW5zb3IgbWVhbnMgdGhlIGluZGl2aWR1YWwocykgb3IgZW50aXR5KGllcykgZ3JhbnRpbmcgcmlnaHRzIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UuIGkuIFNoYXJlIG1lYW5zIHRvIHByb3ZpZGUgbWF0ZXJpYWwgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyB0aGF0IHJlcXVpcmVzIHBlcm1pc3Npb24gdW5kZXIgdGhlIExpY2Vuc2VkIFJpZ2h0cywgc3VjaCBhcyByZXByb2R1Y3Rpb24sIHB1YmxpYyBkaXNwbGF5LCBwdWJsaWMgcGVyZm9ybWFuY2UsIGRpc3RyaWJ1dGlvbiwgZGlzc2VtaW5hdGlvbiwgY29tbXVuaWNhdGlvbiwgb3IgaW1wb3J0YXRpb24sIGFuZCB0byBtYWtlIG1hdGVyaWFsIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluY2x1ZGluZyBpbiB3YXlzIHRoYXQgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlIG1hdGVyaWFsIGZyb20gYSBwbGFjZSBhbmQgYXQgYSB0aW1lIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbS4gai4gU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzIG1lYW5zIHJpZ2h0cyBvdGhlciB0aGFuIGNvcHlyaWdodCByZXN1bHRpbmcgZnJvbSBEaXJlY3RpdmUgOTYvOS9FQyBvZiB0aGUgRXVyb3BlYW4gUGFybGlhbWVudCBhbmQgb2YgdGhlIENvdW5jaWwgb2YgMTEgTWFyY2ggMTk5NiBvbiB0aGUgbGVnYWwgcHJvdGVjdGlvbiBvZiBkYXRhYmFzZXMsIGFzIGFtZW5kZWQgYW5kL29yIHN1Y2NlZWRlZCwgYXMgd2VsbCBhcyBvdGhlciBlc3NlbnRpYWxseSBlcXVpdmFsZW50IHJpZ2h0cyBhbnl3aGVyZSBpbiB0aGUgd29ybGQuIGsuIFlvdSBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyB0aGUgTGljZW5zZWQgUmlnaHRzIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UuIFlvdXIgaGFzIGEgY29ycmVzcG9uZGluZyBtZWFuaW5nLiBTZWN0aW9uIDIgLS0gU2NvcGUuIGEuIExpY2Vuc2UgZ3JhbnQuIDEuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgUHVibGljIExpY2Vuc2UsIHRoZSBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tc3VibGljZW5zYWJsZSwgbm9uLWV4Y2x1c2l2ZSwgaXJyZXZvY2FibGUgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgTGljZW5zZWQgUmlnaHRzIGluIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCB0bzogYS4gcmVwcm9kdWNlIGFuZCBTaGFyZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWwsIGluIHdob2xlIG9yIGluIHBhcnQ7IGFuZCBiLiBwcm9kdWNlLCByZXByb2R1Y2UsIGFuZCBTaGFyZSBBZGFwdGVkIE1hdGVyaWFsLiAyLiBFeGNlcHRpb25zIGFuZCBMaW1pdGF0aW9ucy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIEV4Y2VwdGlvbnMgYW5kIExpbWl0YXRpb25zIGFwcGx5IHRvIFlvdXIgdXNlLCB0aGlzIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IGFwcGx5LCBhbmQgWW91IGRvIG5vdCBuZWVkIHRvIGNvbXBseSB3aXRoIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gMy4gVGVybS4gVGhlIHRlcm0gb2YgdGhpcyBQdWJsaWMgTGljZW5zZSBpcyBzcGVjaWZpZWQgaW4gU2VjdGlvbiA2KGEpLiA0LiBNZWRpYSBhbmQgZm9ybWF0czsgdGVjaG5pY2FsIG1vZGlmaWNhdGlvbnMgYWxsb3dlZC4gVGhlIExpY2Vuc29yIGF1dGhvcml6ZXMgWW91IHRvIGV4ZXJjaXNlIHRoZSBMaWNlbnNlZCBSaWdodHMgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBjcmVhdGVkLCBhbmQgdG8gbWFrZSB0ZWNobmljYWwgbW9kaWZpY2F0aW9ucyBuZWNlc3NhcnkgdG8gZG8gc28uIFRoZSBMaWNlbnNvciB3YWl2ZXMgYW5kL29yIGFncmVlcyBub3QgdG8gYXNzZXJ0IGFueSByaWdodCBvciBhdXRob3JpdHkgdG8gZm9yYmlkIFlvdSBmcm9tIG1ha2luZyB0ZWNobmljYWwgbW9kaWZpY2F0aW9ucyBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIExpY2Vuc2VkIFJpZ2h0cywgaW5jbHVkaW5nIHRlY2huaWNhbCBtb2RpZmljYXRpb25zIG5lY2Vzc2FyeSB0byBjaXJjdW12ZW50IEVmZmVjdGl2ZSBUZWNobm9sb2dpY2FsIE1lYXN1cmVzLiBGb3IgcHVycG9zZXMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSwgc2ltcGx5IG1ha2luZyBtb2RpZmljYXRpb25zIGF1dGhvcml6ZWQgYnkgdGhpcyBTZWN0aW9uIDIoYSkgKDQpIG5ldmVyIHByb2R1Y2VzIEFkYXB0ZWQgTWF0ZXJpYWwuIDUuIERvd25zdHJlYW0gcmVjaXBpZW50cy4gYS4gT2ZmZXIgZnJvbSB0aGUgTGljZW5zb3IgLS0gTGljZW5zZWQgTWF0ZXJpYWwuIEV2ZXJ5IHJlY2lwaWVudCBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYXV0b21hdGljYWxseSByZWNlaXZlcyBhbiBvZmZlciBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSB0aGUgTGljZW5zZWQgUmlnaHRzIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLiBiLiBObyBkb3duc3RyZWFtIHJlc3RyaWN0aW9ucy4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCB0ZXJtcyBvciBjb25kaXRpb25zIG9uLCBvciBhcHBseSBhbnkgRWZmZWN0aXZlIFRlY2hub2xvZ2ljYWwgTWVhc3VyZXMgdG8sIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBpZiBkb2luZyBzbyByZXN0cmljdHMgZXhlcmNpc2Ugb2YgdGhlIExpY2Vuc2VkIFJpZ2h0cyBieSBhbnkgcmVjaXBpZW50IG9mIHRoZSBMaWNlbnNlZCBNYXRlcmlhbC4gNi4gTm8gZW5kb3JzZW1lbnQuIE5vdGhpbmcgaW4gdGhpcyBQdWJsaWMgTGljZW5zZSBjb25zdGl0dXRlcyBvciBtYXkgYmUgY29uc3RydWVkIGFzIHBlcm1pc3Npb24gdG8gYXNzZXJ0IG9yIGltcGx5IHRoYXQgWW91IGFyZSwgb3IgdGhhdCBZb3VyIHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgaXMsIGNvbm5lY3RlZCB3aXRoLCBvciBzcG9uc29yZWQsIGVuZG9yc2VkLCBvciBncmFudGVkIG9mZmljaWFsIHN0YXR1cyBieSwgdGhlIExpY2Vuc29yIG9yIG90aGVycyBkZXNpZ25hdGVkIHRvIHJlY2VpdmUgYXR0cmlidXRpb24gYXMgcHJvdmlkZWQgaW4gU2VjdGlvbiAzKGEpKDEpKEEpKGkpLiBiLiBPdGhlciByaWdodHMuIDEuIE1vcmFsIHJpZ2h0cywgc3VjaCBhcyB0aGUgcmlnaHQgb2YgaW50ZWdyaXR5LCBhcmUgbm90IGxpY2Vuc2VkIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UsIG5vciBhcmUgcHVibGljaXR5LCBwcml2YWN5LCBhbmQvb3Igb3RoZXIgc2ltaWxhciBwZXJzb25hbGl0eSByaWdodHM7IGhvd2V2ZXIsIHRvIHRoZSBleHRlbnQgcG9zc2libGUsIHRoZSBMaWNlbnNvciB3YWl2ZXMgYW5kL29yIGFncmVlcyBub3QgdG8gYXNzZXJ0IGFueSBzdWNoIHJpZ2h0cyBoZWxkIGJ5IHRoZSBMaWNlbnNvciB0byB0aGUgbGltaXRlZCBleHRlbnQgbmVjZXNzYXJ5IHRvIGFsbG93IFlvdSB0byBleGVyY2lzZSB0aGUgTGljZW5zZWQgUmlnaHRzLCBidXQgbm90IG90aGVyd2lzZS4gMi4gUGF0ZW50IGFuZCB0cmFkZW1hcmsgcmlnaHRzIGFyZSBub3QgbGljZW5zZWQgdW5kZXIgdGhpcyBQdWJsaWMgTGljZW5zZS4gMy4gVG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgdGhlIExpY2Vuc29yIHdhaXZlcyBhbnkgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgZnJvbSBZb3UgZm9yIHRoZSBleGVyY2lzZSBvZiB0aGUgTGljZW5zZWQgUmlnaHRzLCB3aGV0aGVyIGRpcmVjdGx5IG9yIHRocm91Z2ggYSBjb2xsZWN0aW5nIHNvY2lldHkgdW5kZXIgYW55IHZvbHVudGFyeSBvciB3YWl2YWJsZSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lLiBJbiBhbGwgb3RoZXIgY2FzZXMgdGhlIExpY2Vuc29yIGV4cHJlc3NseSByZXNlcnZlcyBhbnkgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcy4gU2VjdGlvbiAzIC0tIExpY2Vuc2UgQ29uZGl0aW9ucy4gWW91ciBleGVyY2lzZSBvZiB0aGUgTGljZW5zZWQgUmlnaHRzIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zLiBhLiBBdHRyaWJ1dGlvbi4gMS4gSWYgWW91IFNoYXJlIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCAoaW5jbHVkaW5nIGluIG1vZGlmaWVkIGZvcm0pLCBZb3UgbXVzdDogYS4gcmV0YWluIHRoZSBmb2xsb3dpbmcgaWYgaXQgaXMgc3VwcGxpZWQgYnkgdGhlIExpY2Vuc29yIHdpdGggdGhlIExpY2Vuc2VkIE1hdGVyaWFsOiBpLiBpZGVudGlmaWNhdGlvbiBvZiB0aGUgY3JlYXRvcihzKSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIGFueSBvdGhlcnMgZGVzaWduYXRlZCB0byByZWNlaXZlIGF0dHJpYnV0aW9uLCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXIgcmVxdWVzdGVkIGJ5IHRoZSBMaWNlbnNvciAoaW5jbHVkaW5nIGJ5IHBzZXVkb255bSBpZiBkZXNpZ25hdGVkKTsgaWkuIGEgY29weXJpZ2h0IG5vdGljZTsgaWlpLiBhIG5vdGljZSB0aGF0IHJlZmVycyB0byB0aGlzIFB1YmxpYyBMaWNlbnNlOyBpdi4gYSBub3RpY2UgdGhhdCByZWZlcnMgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllczsgdi4gYSBVUkkgb3IgaHlwZXJsaW5rIHRvIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGU7IGIuIGluZGljYXRlIGlmIFlvdSBtb2RpZmllZCB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIHJldGFpbiBhbiBpbmRpY2F0aW9uIG9mIGFueSBwcmV2aW91cyBtb2RpZmljYXRpb25zOyBhbmQgYy4gaW5kaWNhdGUgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlzIGxpY2Vuc2VkIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UsIGFuZCBpbmNsdWRlIHRoZSB0ZXh0IG9mLCBvciB0aGUgVVJJIG9yIGh5cGVybGluayB0bywgdGhpcyBQdWJsaWMgTGljZW5zZS4gMi4gWW91IG1heSBzYXRpc2Z5IHRoZSBjb25kaXRpb25zIGluIFNlY3Rpb24gMyhhKSgxKSBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXIgYmFzZWQgb24gdGhlIG1lZGl1bSwgbWVhbnMsIGFuZCBjb250ZXh0IGluIHdoaWNoIFlvdSBTaGFyZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWwuIEZvciBleGFtcGxlLCBpdCBtYXkgYmUgcmVhc29uYWJsZSB0byBzYXRpc2Z5IHRoZSBjb25kaXRpb25zIGJ5IHByb3ZpZGluZyBhIFVSSSBvciBoeXBlcmxpbmsgdG8gYSByZXNvdXJjZSB0aGF0IGluY2x1ZGVzIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi4gMy4gSWYgcmVxdWVzdGVkIGJ5IHRoZSBMaWNlbnNvciwgWW91IG11c3QgcmVtb3ZlIGFueSBvZiB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgYnkgU2VjdGlvbiAzKGEpKDEpKEEpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gNC4gSWYgWW91IFNoYXJlIEFkYXB0ZWQgTWF0ZXJpYWwgWW91IHByb2R1Y2UsIHRoZSBBZGFwdGVyJ3MgTGljZW5zZSBZb3UgYXBwbHkgbXVzdCBub3QgcHJldmVudCByZWNpcGllbnRzIG9mIHRoZSBBZGFwdGVkIE1hdGVyaWFsIGZyb20gY29tcGx5aW5nIHdpdGggdGhpcyBQdWJsaWMgTGljZW5zZS4gU2VjdGlvbiA0IC0tIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cy4gV2hlcmUgdGhlIExpY2Vuc2VkIFJpZ2h0cyBpbmNsdWRlIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cyB0aGF0IGFwcGx5IHRvIFlvdXIgdXNlIG9mIHRoZSBMaWNlbnNlZCBNYXRlcmlhbDogYS4gZm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFNlY3Rpb24gMihhKSgxKSBncmFudHMgWW91IHRoZSByaWdodCB0byBleHRyYWN0LCByZXVzZSwgcmVwcm9kdWNlLCBhbmQgU2hhcmUgYWxsIG9yIGEgc3Vic3RhbnRpYWwgcG9ydGlvbiBvZiB0aGUgY29udGVudHMgb2YgdGhlIGRhdGFiYXNlOyBiLiBpZiBZb3UgaW5jbHVkZSBhbGwgb3IgYSBzdWJzdGFudGlhbCBwb3J0aW9uIG9mIHRoZSBkYXRhYmFzZSBjb250ZW50cyBpbiBhIGRhdGFiYXNlIGluIHdoaWNoIFlvdSBoYXZlIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cywgdGhlbiB0aGUgZGF0YWJhc2UgaW4gd2hpY2ggWW91IGhhdmUgU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzIChidXQgbm90IGl0cyBpbmRpdmlkdWFsIGNvbnRlbnRzKSBpcyBBZGFwdGVkIE1hdGVyaWFsOyBhbmQgYy4gWW91IG11c3QgY29tcGx5IHdpdGggdGhlIGNvbmRpdGlvbnMgaW4gU2VjdGlvbiAzKGEpIGlmIFlvdSBTaGFyZSBhbGwgb3IgYSBzdWJzdGFudGlhbCBwb3J0aW9uIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgZGF0YWJhc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIFNlY3Rpb24gNCBzdXBwbGVtZW50cyBhbmQgZG9lcyBub3QgcmVwbGFjZSBZb3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2Ugd2hlcmUgdGhlIExpY2Vuc2VkIFJpZ2h0cyBpbmNsdWRlIG90aGVyIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMuIFNlY3Rpb24gNSAtLSBEaXNjbGFpbWVyIG9mIFdhcnJhbnRpZXMgYW5kIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBhLiBVTkxFU1MgT1RIRVJXSVNFIFNFUEFSQVRFTFkgVU5ERVJUQUtFTiBCWSBUSEUgTElDRU5TT1IsIFRPIFRIRSBFWFRFTlQgUE9TU0lCTEUsIFRIRSBMSUNFTlNPUiBPRkZFUlMgVEhFIExJQ0VOU0VEIE1BVEVSSUFMIEFTLUlTIEFORCBBUy1BVkFJTEFCTEUsIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBMSUNFTlNFRCBNQVRFUklBTCwgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlksIE9SIE9USEVSLiBUSElTIElOQ0xVREVTLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTi1JTkZSSU5HRU1FTlQsIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT1IgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIEtOT1dOIE9SIERJU0NPVkVSQUJMRS4gV0hFUkUgRElTQ0xBSU1FUlMgT0YgV0FSUkFOVElFUyBBUkUgTk9UIEFMTE9XRUQgSU4gRlVMTCBPUiBJTiBQQVJULCBUSElTIERJU0NMQUlNRVIgTUFZIE5PVCBBUFBMWSBUTyBZT1UuIGIuIFRPIFRIRSBFWFRFTlQgUE9TU0lCTEUsIElOIE5PIEVWRU5UIFdJTEwgVEhFIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSAoSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIE5FR0xJR0VOQ0UpIE9SIE9USEVSV0lTRSBGT1IgQU5ZIERJUkVDVCwgU1BFQ0lBTCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFLCBFWEVNUExBUlksIE9SIE9USEVSIExPU1NFUywgQ09TVFMsIEVYUEVOU0VTLCBPUiBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgUFVCTElDIExJQ0VOU0UgT1IgVVNFIE9GIFRIRSBMSUNFTlNFRCBNQVRFUklBTCwgRVZFTiBJRiBUSEUgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBMT1NTRVMsIENPU1RTLCBFWFBFTlNFUywgT1IgREFNQUdFUy4gV0hFUkUgQSBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBJUyBOT1QgQUxMT1dFRCBJTiBGVUxMIE9SIElOIFBBUlQsIFRISVMgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gYy4gVGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyBhbmQgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgcHJvdmlkZWQgYWJvdmUgc2hhbGwgYmUgaW50ZXJwcmV0ZWQgaW4gYSBtYW5uZXIgdGhhdCwgdG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgbW9zdCBjbG9zZWx5IGFwcHJveGltYXRlcyBhbiBhYnNvbHV0ZSBkaXNjbGFpbWVyIGFuZCB3YWl2ZXIgb2YgYWxsIGxpYWJpbGl0eS4gU2VjdGlvbiA2IC0tIFRlcm0gYW5kIFRlcm1pbmF0aW9uLiBhLiBUaGlzIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgZm9yIHRoZSB0ZXJtIG9mIHRoZSBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIGxpY2Vuc2VkIGhlcmUuIEhvd2V2ZXIsIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRoaXMgUHVibGljIExpY2Vuc2UsIHRoZW4gWW91ciByaWdodHMgdW5kZXIgdGhpcyBQdWJsaWMgTGljZW5zZSB0ZXJtaW5hdGUgYXV0b21hdGljYWxseS4gYi4gV2hlcmUgWW91ciByaWdodCB0byB1c2UgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGhhcyB0ZXJtaW5hdGVkIHVuZGVyIFNlY3Rpb24gNihhKSwgaXQgcmVpbnN0YXRlczogMS4gYXV0b21hdGljYWxseSBhcyBvZiB0aGUgZGF0ZSB0aGUgdmlvbGF0aW9uIGlzIGN1cmVkLCBwcm92aWRlZCBpdCBpcyBjdXJlZCB3aXRoaW4gMzAgZGF5cyBvZiBZb3VyIGRpc2NvdmVyeSBvZiB0aGUgdmlvbGF0aW9uOyBvciAyLiB1cG9uIGV4cHJlc3MgcmVpbnN0YXRlbWVudCBieSB0aGUgTGljZW5zb3IuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIFNlY3Rpb24gNihiKSBkb2VzIG5vdCBhZmZlY3QgYW55IHJpZ2h0IHRoZSBMaWNlbnNvciBtYXkgaGF2ZSB0byBzZWVrIHJlbWVkaWVzIGZvciBZb3VyIHZpb2xhdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZS4gYy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoZSBMaWNlbnNvciBtYXkgYWxzbyBvZmZlciB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgdW5kZXIgc2VwYXJhdGUgdGVybXMgb3IgY29uZGl0aW9ucyBvciBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYXQgYW55IHRpbWU7IGhvd2V2ZXIsIGRvaW5nIHNvIHdpbGwgbm90IHRlcm1pbmF0ZSB0aGlzIFB1YmxpYyBMaWNlbnNlLiBkLiBTZWN0aW9ucyAxLCA1LCA2LCA3LCBhbmQgOCBzdXJ2aXZlIHRlcm1pbmF0aW9uIG9mIHRoaXMgUHVibGljIExpY2Vuc2UuIFNlY3Rpb24gNyAtLSBPdGhlciBUZXJtcyBhbmQgQ29uZGl0aW9ucy4gYS4gVGhlIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgdGVybXMgb3IgY29uZGl0aW9ucyBjb21tdW5pY2F0ZWQgYnkgWW91IHVubGVzcyBleHByZXNzbHkgYWdyZWVkLiBiLiBBbnkgYXJyYW5nZW1lbnRzLCB1bmRlcnN0YW5kaW5ncywgb3IgYWdyZWVtZW50cyByZWdhcmRpbmcgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIG5vdCBzdGF0ZWQgaGVyZWluIGFyZSBzZXBhcmF0ZSBmcm9tIGFuZCBpbmRlcGVuZGVudCBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZS4gU2VjdGlvbiA4IC0tIEludGVycHJldGF0aW9uLiBhLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCwgYW5kIHNoYWxsIG5vdCBiZSBpbnRlcnByZXRlZCB0bywgcmVkdWNlLCBsaW1pdCwgcmVzdHJpY3QsIG9yIGltcG9zZSBjb25kaXRpb25zIG9uIGFueSB1c2Ugb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIHRoYXQgY291bGQgbGF3ZnVsbHkgYmUgbWFkZSB3aXRob3V0IHBlcm1pc3Npb24gdW5kZXIgdGhpcyBQdWJsaWMgTGljZW5zZS4gYi4gVG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgaWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlIGlzIGRlZW1lZCB1bmVuZm9yY2VhYmxlLCBpdCBzaGFsbCBiZSBhdXRvbWF0aWNhbGx5IHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gSWYgdGhlIHByb3Zpc2lvbiBjYW5ub3QgYmUgcmVmb3JtZWQsIGl0IHNoYWxsIGJlIHNldmVyZWQgZnJvbSB0aGlzIFB1YmxpYyBMaWNlbnNlIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluaW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLiBjLiBObyB0ZXJtIG9yIGNvbmRpdGlvbiBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlIHdpbGwgYmUgd2FpdmVkIGFuZCBubyBmYWlsdXJlIHRvIGNvbXBseSBjb25zZW50ZWQgdG8gdW5sZXNzIGV4cHJlc3NseSBhZ3JlZWQgdG8gYnkgdGhlIExpY2Vuc29yLiBkLiBOb3RoaW5nIGluIHRoaXMgUHVibGljIExpY2Vuc2UgY29uc3RpdHV0ZXMgb3IgbWF5IGJlIGludGVycHJldGVkIGFzIGEgbGltaXRhdGlvbiB1cG9uLCBvciB3YWl2ZXIgb2YsIGFueSBwcml2aWxlZ2VzIGFuZCBpbW11bml0aWVzIHRoYXQgYXBwbHkgdG8gdGhlIExpY2Vuc29yIG9yIFlvdSwgaW5jbHVkaW5nIGZyb20gdGhlIGxlZ2FsIHByb2Nlc3NlcyBvZiBhbnkganVyaXNkaWN0aW9uIG9yIGF1dGhvcml0eS4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byBpdHMgcHVibGljIGxpY2Vuc2VzLiBOb3R3aXRoc3RhbmRpbmcsIENyZWF0aXZlIENvbW1vbnMgbWF5IGVsZWN0IHRvIGFwcGx5IG9uZSBvZiBpdHMgcHVibGljIGxpY2Vuc2VzIHRvIG1hdGVyaWFsIGl0IHB1Ymxpc2hlcyBhbmQgaW4gdGhvc2UgaW5zdGFuY2VzIHdpbGwgYmUgY29uc2lkZXJlZCB0aGUgIkxpY2Vuc29yLiIgRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdGhhdCBtYXRlcmlhbCBpcyBzaGFyZWQgdW5kZXIgYSBDcmVhdGl2ZSBDb21tb25zIHB1YmxpYyBsaWNlbnNlIG9yIGFzIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgdGhlIENyZWF0aXZlIENvbW1vbnMgcG9saWNpZXMgcHVibGlzaGVkIGF0IGNyZWF0aXZlY29tbW9ucy5vcmcvcG9saWNpZXMsIENyZWF0aXZlIENvbW1vbnMgZG9lcyBub3QgYXV0aG9yaXplIHRoZSB1c2Ugb2YgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IG90aGVyIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCBpdHMgcHJpb3Igd3JpdHRlbiBjb25zZW50IGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBpbiBjb25uZWN0aW9uIHdpdGggYW55IHVuYXV0aG9yaXplZCBtb2RpZmljYXRpb25zIHRvIGFueSBvZiBpdHMgcHVibGljIGxpY2Vuc2VzIG9yIGFueSBvdGhlciBhcnJhbmdlbWVudHMsIHVuZGVyc3RhbmRpbmdzLCBvciBhZ3JlZW1lbnRzIGNvbmNlcm5pbmcgdXNlIG9mIGxpY2Vuc2VkIG1hdGVyaWFsLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyBwYXJhZ3JhcGggZG9lcyBub3QgZm9ybSBwYXJ0IG9mIHRoZSBwdWJsaWMgbGljZW5zZXMuIENyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBjcmVhdGl2ZWNvbW1vbnMub3JnLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS1XZWIgQmFja2dyb3VuZCBTeW5jaHJvbml6YXRpb24tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCldlYiBCYWNrZ3JvdW5kIFN5bmNocm9uaXphdGlvbiBTcGVjaWZpY2F0aW9uClBvcnRpb25zIG9mIHNwZWMgqSBieSBXM0MKClczQyBDb21tdW5pdHkgRmluYWwgU3BlY2lmaWNhdGlvbiBBZ3JlZW1lbnQgClRvIHNlY3VyZSBjb21taXRtZW50cyBmcm9tIHBhcnRpY2lwYW50cyBmb3IgdGhlIGZ1bGwgdGV4dCBvZiBhIENvbW11bml0eSBvciBCdXNpbmVzcyBHcm91cCBSZXBvcnQsIHRoZSBncm91cCBtYXkgY2FsbCBmb3Igdm9sdW50YXJ5IGNvbW1pdG1lbnRzIHRvIHRoZSBmb2xsb3dpbmcgdGVybXM7IGEgInN1bW1hcnkiIGlzIAphdmFpbGFibGUuIFNlZSBhbHNvIHRoZSByZWxhdGVkICJXM0MgQ29tbXVuaXR5IENvbnRyaWJ1dG9yIExpY2Vuc2UgQWdyZWVtZW50Ii4KMS4gVGhlIFB1cnBvc2Ugb2YgdGhpcyBBZ3JlZW1lbnQuClRoaXMgQWdyZWVtZW50IHNldHMgZm9ydGggdGhlIHRlcm1zIHVuZGVyIHdoaWNoIEkgbWFrZSBjZXJ0YWluIGNvcHlyaWdodCBhbmQgcGF0ZW50IHJpZ2h0cyBhdmFpbGFibGUgdG8geW91IGZvciB5b3VyIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTcGVjaWZpY2F0aW9uLiAKQW55IG90aGVyIGNhcGl0YWxpemVkIHRlcm1zIG5vdCBzcGVjaWZpY2FsbHkgZGVmaW5lZCBoZXJlaW4gaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIHRob3NlIHRlcm1zIGhhdmUgaW4gdGhlICJXM0MgUGF0ZW50IFBvbGljeSIsIGFuZCBpZiBub3QgZGVmaW5lZCB0aGVyZSwgaW4gdGhlICJXM0MgUHJvY2VzcyBEb2N1bWVudCIuCjIuIENvcHlyaWdodHMuIAoyLjEuIENvcHlyaWdodCBHcmFudC4gSSBncmFudCB0byB5b3UgYSBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgY29weXJpZ2h0IGxpY2Vuc2UsIHdpdGhvdXQgYW55IG9ibGlnYXRpb24gZm9yIGFjY291bnRpbmcgdG8gbWUsIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBkaXN0cmlidXRlLCBhbmQgaW1wbGVtZW50IHRoZSBTcGVjaWZpY2F0aW9uIHRvIHRoZSBmdWxsIGV4dGVudCBvZiBteSBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIFNwZWNpZmljYXRpb24uIAoyLjIuIEF0dHJpYnV0aW9uLiBBcyBhIGNvbmRpdGlvbiBvZiB0aGUgY29weXJpZ2h0IGdyYW50LCB5b3UgbXVzdCBpbmNsdWRlIGFuIGF0dHJpYnV0aW9uIHRvIHRoZSBTcGVjaWZpY2F0aW9uIGluIGFueSBkZXJpdmF0aXZlIHdvcmsgeW91IG1ha2UgYmFzZWQgb24gdGhlIFNwZWNpZmljYXRpb24uIFRoYXQgYXR0cmlidXRpb24gbXVzdCBpbmNsdWRlLCBhdCBtaW5pbXVtLCB0aGUgU3BlY2lmaWNhdGlvbiBuYW1lIGFuZCB2ZXJzaW9uIG51bWJlci4KMy4gUGF0ZW50cy4gCjMuMS4gUGF0ZW50IExpY2Vuc2luZyBDb21taXRtZW50LiBJIGFncmVlIHRvIGxpY2Vuc2UgbXkgRXNzZW50aWFsIENsYWltcyB1bmRlciB0aGUgVzNDIENvbW11bml0eSBSRiBMaWNlbnNpbmcgUmVxdWlyZW1lbnRzLiBUaGlzIHJlcXVpcmVtZW50IGluY2x1ZGVzIEVzc2VudGlhbCBDbGFpbXMgdGhhdCBJIG93biBhbmQgYW55IHRoYXQgSSBoYXZlIHRoZSByaWdodCB0byBsaWNlbnNlIHdpdGhvdXQgb2JsaWdhdGlvbiBvZiBwYXltZW50IG9yIG90aGVyIGNvbnNpZGVyYXRpb24gdG8gYW4gdW5yZWxhdGVkIHRoaXJkIHBhcnR5LiBXM0MgQ29tbXVuaXR5IFJGIExpY2Vuc2luZyBSZXF1aXJlbWVudHMgb2JsaWdhdGlvbnMgbWFkZSBjb25jZXJuaW5nIHRoZSBTcGVjaWZpY2F0aW9uIGFuZCBkZXNjcmliZWQgaW4gdGhpcyBwb2xpY3kgYXJlIGJpbmRpbmcgb24gbWUgZm9yIHRoZSBsaWZlIG9mIHRoZSBwYXRlbnRzIGluIHF1ZXN0aW9uIGFuZCBlbmN1bWJlciB0aGUgcGF0ZW50cyBjb250YWluaW5nIEVzc2VudGlhbCBDbGFpbXMsIHJlZ2FyZGxlc3Mgb2YgY2hhbmdlcyBpbiBwYXJ0aWNpcGF0aW9uIHN0YXR1cyBvciBXM0MgTWVtYmVyc2hpcC4gSSBhbHNvIGFncmVlIHRvIGxpY2Vuc2UgbXkgRXNzZW50aWFsIENsYWltcyB1bmRlciB0aGUgVzNDIENvbW11bml0eSBSRiBMaWNlbnNpbmcgUmVxdWlyZW1lbnRzIGluIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwZWNpZmljYXRpb24gc28gbG9uZyBhcyBhbGwgbm9ybWF0aXZlIHBvcnRpb25zIG9mIHRoZSBTcGVjaWZpY2F0aW9uIGFyZSBtYWludGFpbmVkIGFuZCB0aGF0IHRoaXMgbGljZW5zaW5nIGNvbW1pdG1lbnQgZG9lcyBub3QgZXh0ZW5kIHRvIGFueSBwb3J0aW9uIG9mIHRoZSBkZXJpdmF0aXZlIHdvcmsgdGhhdCB3YXMgbm90IGluY2x1ZGVkIGluIHRoZSBTcGVjaWZpY2F0aW9uLgozLjIuIE9wdGlvbmFsLCBBZGRpdGlvbmFsIFBhdGVudCBHcmFudC4gSW4gYWRkaXRpb24gdG8gdGhlIHByb3Zpc2lvbnMgb2YgU2VjdGlvbiAzLjEsIEkgbWF5IGFsc28sIGF0IG15IG9wdGlvbiwgbWFrZSBjZXJ0YWluIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaW5mcmluZ2VkIGJ5IGltcGxlbWVudGF0aW9ucyBvZiB0aGUgU3BlY2lmaWNhdGlvbiwgaW5jbHVkaW5nIEVzc2VudGlhbCBDbGFpbXMsIGF2YWlsYWJsZSBieSBwcm92aWRpbmcgdGhvc2UgdGVybXMgdmlhIHRoZSBXM0MgV2ViIHNpdGUuCjQuIE5vIE90aGVyIFJpZ2h0cy4gRXhjZXB0IGFzIHNwZWNpZmljYWxseSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQsIG5vIG90aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCBwYXRlbnQsIHRyYWRlbWFyaywgY29weXJpZ2h0LCBvciBvdGhlciBwcm9wZXJ0eSByaWdodHMgYXJlIGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBieSBpbXBsaWNhdGlvbiwgd2FpdmVyLCBvciBlc3RvcHBlbC4KNS4gQW50aXRydXN0IENvbXBsaWFuY2UuIEkgYWNrbm93bGVkZ2UgdGhhdCBJIG1heSBjb21wZXRlIHdpdGggb3RoZXIgcGFydGljaXBhbnRzLCB0aGF0IEkgYW0gdW5kZXIgbm8gb2JsaWdhdGlvbiB0byBpbXBsZW1lbnQgdGhlIFNwZWNpZmljYXRpb24sIHRoYXQgZWFjaCBwYXJ0aWNpcGFudCBpcyBmcmVlIHRvIGRldmVsb3AgY29tcGV0aW5nIHRlY2hub2xvZ2llcyBhbmQgc3RhbmRhcmRzLCBhbmQgdGhhdCBlYWNoIHBhcnR5IGlzIGZyZWUgdG8gbGljZW5zZSBpdHMgcGF0ZW50IHJpZ2h0cyB0byB0aGlyZCBwYXJ0aWVzLCBpbmNsdWRpbmcgZm9yIHRoZSBwdXJwb3NlIG9mIGVuYWJsaW5nIGNvbXBldGluZyB0ZWNobm9sb2dpZXMgYW5kIHN0YW5kYXJkcy4KNi4gTm9uLUNpcmN1bXZlbnRpb24uIEkgYWdyZWUgdGhhdCBJIHdpbGwgbm90IGludGVudGlvbmFsbHkgdGFrZSBvciB3aWxsZnVsbHkgYXNzaXN0IGFueSB0aGlyZCBwYXJ0eSB0byB0YWtlIGFueSBhY3Rpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGNpcmN1bXZlbnRpbmcgbXkgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuCjcuIFRyYW5zaXRpb24gdG8gVzNDIFJlY29tbWVuZGF0aW9uIFRyYWNrLiBUaGUgU3BlY2lmaWNhdGlvbiBkZXZlbG9wZWQgYnkgdGhlIFByb2plY3QgbWF5IHRyYW5zaXRpb24gdG8gdGhlIFczQyBSZWNvbW1lbmRhdGlvbiBUcmFjay4gVGhlIFczQyBUZWFtIGlzIHJlc3BvbnNpYmxlIGZvciBub3RpZnlpbmcgbWUgdGhhdCBhIENvcnJlc3BvbmRpbmcgV29ya2luZyBHcm91cCBoYXMgYmVlbiBjaGFydGVyZWQuIEkgaGF2ZSBubyBvYmxpZ2F0aW9uIHRvIGpvaW4gdGhlIENvcnJlc3BvbmRpbmcgV29ya2luZyBHcm91cC4gSWYgdGhlIFNwZWNpZmljYXRpb24gZGV2ZWxvcGVkIGJ5IHRoZSBQcm9qZWN0IHRyYW5zaXRpb25zIHRvIHRoZSBXM0MgUmVjb21tZW5kYXRpb24gVHJhY2ssIHRoZSBmb2xsb3dpbmcgdGVybXMgYXBwbHk6IAo3LjEuIElmIEkgam9pbiB0aGUgQ29ycmVzcG9uZGluZyBXb3JraW5nIEdyb3VwLiBJZiBJIGpvaW4gdGhlIENvcnJlc3BvbmRpbmcgV29ya2luZyBHcm91cCwgSSB3aWxsIGJlIHN1YmplY3QgdG8gYWxsIFczQyBydWxlcywgb2JsaWdhdGlvbnMsIGxpY2Vuc2luZyBjb21taXRtZW50cywgYW5kIHBvbGljaWVzIHRoYXQgZ292ZXJuIHRoYXQgQ29ycmVzcG9uZGluZyBXb3JraW5nIEdyb3VwLgo3LjIuIElmIEkgRG8gTm90IEpvaW4gdGhlIENvcnJlc3BvbmRpbmcgV29ya2luZyBHcm91cC4gCjcuMi4xLiBMaWNlbnNpbmcgT2JsaWdhdGlvbnMgdG8gUmVzdWx0aW5nIFNwZWNpZmljYXRpb24uIElmIEkgZG8gbm90IGpvaW4gdGhlIENvcnJlc3BvbmRpbmcgV29ya2luZyBHcm91cCwgSSBhZ3JlZSB0byBvZmZlciBwYXRlbnQgbGljZW5zZXMgYWNjb3JkaW5nIHRvIHRoZSBXM0MgUm95YWx0eS1GcmVlIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNSBvZiB0aGUgVzNDIFBhdGVudCBQb2xpY3kgZm9yIHRoZSBwb3J0aW9ucyBvZiB0aGUgU3BlY2lmaWNhdGlvbiBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIFJlY29tbWVuZGF0aW9uLiBUaGlzIGxpY2Vuc2luZyBjb21taXRtZW50IGRvZXMgbm90IGV4dGVuZCB0byBhbnkgcG9ydGlvbiBvZiBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUmVjb21tZW5kYXRpb24gdGhhdCB3YXMgbm90IGluY2x1ZGVkIGluIHRoZSBTcGVjaWZpY2F0aW9uLiBUaGlzIGxpY2Vuc2luZyBjb21taXRtZW50IG1heSBub3QgYmUgcmV2b2tlZCBidXQgbWF5IGJlIG1vZGlmaWVkIHRocm91Z2ggdGhlIGV4Y2x1c2lvbiBwcm9jZXNzIGRlZmluZWQgaW4gU2VjdGlvbiA0IG9mIHRoZSBXM0MgUGF0ZW50IFBvbGljeS4gSSBhbSBub3QgcmVxdWlyZWQgdG8gam9pbiB0aGUgQ29ycmVzcG9uZGluZyBXb3JraW5nIEdyb3VwIHRvIGV4Y2x1ZGUgcGF0ZW50cyBmcm9tIHRoZSBXM0MgUm95YWx0eS1GcmVlIGxpY2Vuc2luZyBjb21taXRtZW50LCBidXQgbXVzdCBvdGhlcndpc2UgZm9sbG93IHRoZSBub3JtYWwgZXhjbHVzaW9uIHByb2NlZHVyZXMgZGVmaW5lZCBieSB0aGUgVzNDIFBhdGVudCBQb2xpY3kuIFRoZSBXM0MgVGVhbSB3aWxsIG5vdGlmeSBtZSBvZiBhbnkgQ2FsbCBmb3IgRXhjbHVzaW9uIGluIHRoZSBDb3JyZXNwb25kaW5nIFdvcmtpbmcgR3JvdXAgYXMgc2V0IGZvcnRoIGluIFNlY3Rpb24gNC41IG9mIHRoZSBXM0MgUGF0ZW50IFBvbGljeS4KNy4yLjIuIE5vIERpc2Nsb3N1cmUgT2JsaWdhdGlvbi4gSWYgSSBkbyBub3Qgam9pbiB0aGUgQ29ycmVzcG9uZGluZyBXb3JraW5nIEdyb3VwLCBJIGhhdmUgbm8gcGF0ZW50IGRpc2Nsb3N1cmUgb2JsaWdhdGlvbnMgb3V0c2lkZSBvZiB0aG9zZSBzZXQgZm9ydGggaW4gU2VjdGlvbiA2IG9mIHRoZSBXM0MgUGF0ZW50IFBvbGljeS4KOC4gQ29uZmxpY3Qgb2YgSW50ZXJlc3QuIEkgd2lsbCBkaXNjbG9zZSBzaWduaWZpY2FudCByZWxhdGlvbnNoaXBzIHdoZW4gdGhvc2UgcmVsYXRpb25zaGlwcyBtaWdodCByZWFzb25hYmx5IGJlIHBlcmNlaXZlZCBhcyBjcmVhdGluZyBhIGNvbmZsaWN0IG9mIGludGVyZXN0IHdpdGggbXkgcm9sZS4gSSB3aWxsIG5vdGlmeSBXM0Mgb2YgYW55IGNoYW5nZSBpbiBteSBhZmZpbGlhdGlvbiB1c2luZyBXM0MtcHJvdmlkZWQgbWVjaGFuaXNtcy4KOS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVycy4gSSByZXByZXNlbnQgYW5kIHdhcnJhbnQgdGhhdCBJIGFtIGxlZ2FsbHkgZW50aXRsZWQgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBhbmQgcHJvbWlzZXMgc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LiBJTiBBTEwgT1RIRVIgUkVTUEVDVFMgVEhFIFNQRUNJRklDQVRJT04gSVMgUFJPVklERUQgk0FTIElTLpQgVGhlIGVudGlyZSByaXNrIGFzIHRvIGltcGxlbWVudGluZyBvciBvdGhlcndpc2UgdXNpbmcgdGhlIFNwZWNpZmljYXRpb24gaXMgYXNzdW1lZCBieSB0aGUgaW1wbGVtZW50ZXIgYW5kIHVzZXIuIEV4Y2VwdCBhcyBzdGF0ZWQgaGVyZWluLCBJIGV4cHJlc3NseSBkaXNjbGFpbSBhbnkgd2FycmFudGllcyAoZXhwcmVzcywgaW1wbGllZCwgb3Igb3RoZXJ3aXNlKSwgaW5jbHVkaW5nIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHksIG5vbi1pbmZyaW5nZW1lbnQsIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCBvciB0aXRsZSwgcmVsYXRlZCB0byB0aGUgU3BlY2lmaWNhdGlvbi4gSU4gTk8gRVZFTlQgV0lMTCBBTlkgUEFSVFkgQkUgTElBQkxFIFRPIEFOWSBPVEhFUiBQQVJUWSBGT1IgTE9TVCBQUk9GSVRTIE9SIEFOWSBGT1JNIE9GIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBGUk9NIEFOWSBDQVVTRVMgT0YgQUNUSU9OIE9GIEFOWSBLSU5EIFdJVEggUkVTUEVDVCBUTyBUSElTIEFHUkVFTUVOVCwgV0hFVEhFUiBCQVNFRCBPTiBCUkVBQ0ggT0YgQ09OVFJBQ1QsIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgT1IgT1RIRVJXSVNFLCBBTkQgV0hFVEhFUiBPUiBOT1QgVEhFIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiBBbGwgb2YgbXkgb2JsaWdhdGlvbnMgdW5kZXIgU2VjdGlvbiAzIHJlZ2FyZGluZyB0aGUgdHJhbnNmZXIsIHN1Y2Nlc3NvcnMgaW4gaW50ZXJlc3QsIG9yIGFzc2lnbm1lbnQgb2YgR3JhbnRlZCBDbGFpbXMgd2lsbCBiZSBzYXRpc2ZpZWQgaWYgSSBub3RpZnkgdGhlIHRyYW5zZmVyZWUgb3IgYXNzaWduZWUgb2YgYW55IHBhdGVudCB0aGF0IEkga25vdyBjb250YWlucyBHcmFudGVkIENsYWltcyBvZiB0aGUgb2JsaWdhdGlvbnMgdW5kZXIgU2VjdGlvbiAzLiBOb3RoaW5nIGluIHRoaXMgQWdyZWVtZW50IHJlcXVpcmVzIG1lIHRvIHVuZGVydGFrZSBhIHBhdGVudCBzZWFyY2guCjEwLiBEZWZpbml0aW9ucy4gCjEwLjEuIEFncmVlbWVudC4gk0FncmVlbWVudJQgbWVhbnMgdGhpcyBXM0MgQ29tbXVuaXR5IEZpbmFsIFNwZWNpZmljYXRpb24gQWdyZWVtZW50LgoxMC4yLiBDb3JyZXNwb25kaW5nIFdvcmtpbmcgR3JvdXAuIJNDb3JyZXNwb25kaW5nIFdvcmtpbmcgR3JvdXCUIGlzIGEgVzNDIFdvcmtpbmcgR3JvdXAgdGhhdCBpcyBjaGFydGVyZWQgdG8gZGV2ZWxvcCBhIFJlY29tbWVuZGF0aW9uLCBhcyBkZWZpbmVkIGluIHRoZSBXM0MgUHJvY2VzcyBEb2N1bWVudCwgdGhhdCB0YWtlcyB0aGUgU3BlY2lmaWNhdGlvbiBhcyBhbiBpbnB1dC4KMTAuMy4gRXNzZW50aWFsIENsYWltcy4gk0Vzc2VudGlhbCBDbGFpbXOUIHNoYWxsIG1lYW4gYWxsIGNsYWltcyBpbiBhbnkgcGF0ZW50IG9yIHBhdGVudCBhcHBsaWNhdGlvbiBpbiBhbnkganVyaXNkaWN0aW9uIGluIHRoZSB3b3JsZCB0aGF0IHdvdWxkIG5lY2Vzc2FyaWx5IGJlIGluZnJpbmdlZCBieSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3BlY2lmaWNhdGlvbi4gQSBjbGFpbSBpcyBuZWNlc3NhcmlseSBpbmZyaW5nZWQgaGVyZXVuZGVyIG9ubHkgd2hlbiBpdCBpcyBub3QgcG9zc2libGUgdG8gYXZvaWQgaW5mcmluZ2luZyBpdCBiZWNhdXNlIHRoZXJlIGlzIG5vIG5vbi1pbmZyaW5naW5nIGFsdGVybmF0aXZlIGZvciBpbXBsZW1lbnRpbmcgdGhlIG5vcm1hdGl2ZSBwb3J0aW9ucyBvZiB0aGUgU3BlY2lmaWNhdGlvbi4gRXhpc3RlbmNlIG9mIGEgbm9uLWluZnJpbmdpbmcgYWx0ZXJuYXRpdmUgc2hhbGwgYmUganVkZ2VkIGJhc2VkIG9uIHRoZSBzdGF0ZSBvZiB0aGUgYXJ0IGF0IHRoZSB0aW1lIG9mIHRoZSBwdWJsaWNhdGlvbiBvZiB0aGUgU3BlY2lmaWNhdGlvbi4gVGhlIGZvbGxvd2luZyBhcmUgZXhwcmVzc2x5IGV4Y2x1ZGVkIGZyb20gYW5kIHNoYWxsIG5vdCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBFc3NlbnRpYWwgQ2xhaW1zOiAKMTAuMy4xLiBhbnkgY2xhaW1zIG90aGVyIHRoYW4gYXMgc2V0IGZvcnRoIGFib3ZlIGV2ZW4gaWYgY29udGFpbmVkIGluIHRoZSBzYW1lIHBhdGVudCBhcyBFc3NlbnRpYWwgQ2xhaW1zOyBhbmQKMTAuMy4yLiBjbGFpbXMgd2hpY2ggd291bGQgYmUgaW5mcmluZ2VkIG9ubHkgYnk6IApwb3J0aW9ucyBvZiBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGFyZSBub3Qgc3BlY2lmaWVkIGluIHRoZSBub3JtYXRpdmUgcG9ydGlvbnMgb2YgdGhlIFNwZWNpZmljYXRpb24sIG9yCmVuYWJsaW5nIHRlY2hub2xvZ2llcyB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gbWFrZSBvciB1c2UgYW55IHByb2R1Y3Qgb3IgcG9ydGlvbiB0aGVyZW9mIHRoYXQgY29tcGxpZXMgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbiBhbmQgYXJlIG5vdCB0aGVtc2VsdmVzIGV4cHJlc3NseSBzZXQgZm9ydGggaW4gdGhlIFNwZWNpZmljYXRpb24gKGUuZy4sIHNlbWljb25kdWN0b3IgbWFudWZhY3R1cmluZyB0ZWNobm9sb2d5LCBjb21waWxlciB0ZWNobm9sb2d5LCBvYmplY3Qtb3JpZW50ZWQgdGVjaG5vbG9neSwgYmFzaWMgb3BlcmF0aW5nIHN5c3RlbSB0ZWNobm9sb2d5LCBhbmQgdGhlIGxpa2UpOyBvcgp0aGUgaW1wbGVtZW50YXRpb24gb2YgdGVjaG5vbG9neSBkZXZlbG9wZWQgZWxzZXdoZXJlIGFuZCBtZXJlbHkgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZSBpbiB0aGUgYm9keSBvZiB0aGUgU3BlY2lmaWNhdGlvbi4KMTAuMy4zLiBkZXNpZ24gcGF0ZW50cyBhbmQgZGVzaWduIHJlZ2lzdHJhdGlvbnMuCkZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIHRoZSBub3JtYXRpdmUgcG9ydGlvbnMgb2YgdGhlIFNwZWNpZmljYXRpb24gc2hhbGwgYmUgZGVlbWVkIHRvIGluY2x1ZGUgb25seSBhcmNoaXRlY3R1cmFsIGFuZCBpbnRlcm9wZXJhYmlsaXR5IHJlcXVpcmVtZW50cy4gT3B0aW9uYWwgZmVhdHVyZXMgaW4gdGhlIFJGQyAyMTE5IHNlbnNlIGFyZSBjb25zaWRlcmVkIG5vcm1hdGl2ZSB1bmxlc3MgdGhleSBhcmUgc3BlY2lmaWNhbGx5IGlkZW50aWZpZWQgYXMgaW5mb3JtYXRpdmUuIEltcGxlbWVudGF0aW9uIGV4YW1wbGVzIG9yIGFueSBvdGhlciBtYXRlcmlhbCB0aGF0IG1lcmVseSBpbGx1c3RyYXRlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIFNwZWNpZmljYXRpb24gYXJlIGluZm9ybWF0aXZlLCByYXRoZXIgdGhhbiBub3JtYXRpdmUuCjEwLjQuIEksIE1lLCBvciBNeS4gk0kslCCTbWUslCBvciCTbXmUIHJlZmVycyB0byB0aGUgc2lnbmF0b3J5LgoxMC41IFByb2plY3QuIJNQcm9qZWN0lCBtZWFucyB0aGUgVzNDIENvbW11bml0eSBHcm91cCBvciBCdXNpbmVzcyBHcm91cCBmb3Igd2hpY2ggSSBleGVjdXRlZCB0aGlzIEFncmVlbWVudC4KMTAuNi4gU3BlY2lmaWNhdGlvbi4gk1NwZWNpZmljYXRpb26UIG1lYW5zIHRoZSBTcGVjaWZpY2F0aW9uIGlkZW50aWZpZWQgYnkgdGhlIFByb2plY3QgYXMgdGhlIHRhcmdldCBvZiB0aGlzIGFncmVlbWVudCBpbiBhIGNhbGwgZm9yIEZpbmFsIFNwZWNpZmljYXRpb24gQ29tbWl0bWVudHMuIFczQyBzaGFsbCBwcm92aWRlIHRoZSBhdXRob3JpdGF0aXZlIG1lY2hhbmlzbXMgZm9yIHRoZSBpZGVudGlmaWNhdGlvbiBvZiB0aGlzIFNwZWNpZmljYXRpb24uCjEwLjcuIFczQyBDb21tdW5pdHkgUkYgTGljZW5zaW5nIFJlcXVpcmVtZW50cy4gk1czQyBDb21tdW5pdHkgUkYgTGljZW5zaW5nIFJlcXVpcmVtZW50c5QgbGljZW5zZSBzaGFsbCBtZWFuIGEgbm9uLWFzc2lnbmFibGUsIG5vbi1zdWJsaWNlbnNhYmxlIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHNlbGwsIGhhdmUgc29sZCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0LCBhbmQgZGlzdHJpYnV0ZSBhbmQgZGlzcG9zZSBvZiBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIFNwZWNpZmljYXRpb24gdGhhdDogCjEwLjcuMS4gc2hhbGwgYmUgYXZhaWxhYmxlIHRvIGFsbCwgd29ybGR3aWRlLCB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBXM0MgTWVtYmVyczsKMTAuNy4yLiBzaGFsbCBleHRlbmQgdG8gYWxsIEVzc2VudGlhbCBDbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSBtZTsKMTAuNy4zLiBtYXkgYmUgbGltaXRlZCB0byBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIFNwZWNpZmljYXRpb24sIGFuZCB0byB3aGF0IGlzIHJlcXVpcmVkIGJ5IHRoZSBTcGVjaWZpY2F0aW9uOwoxMC43LjQuIG1heSBiZSBjb25kaXRpb25lZCBvbiBhIGdyYW50IG9mIGEgcmVjaXByb2NhbCBSRiBsaWNlbnNlIChhcyBkZWZpbmVkIGluIHRoaXMgcG9saWN5KSB0byBhbGwgRXNzZW50aWFsIENsYWltcyBvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBsaWNlbnNlZS4gQSByZWNpcHJvY2FsIGxpY2Vuc2UgbWF5IGJlIHJlcXVpcmVkIHRvIGJlIGF2YWlsYWJsZSB0byBhbGwsIGFuZCBhIHJlY2lwcm9jYWwgbGljZW5zZSBtYXkgaXRzZWxmIGJlIGNvbmRpdGlvbmVkIG9uIGEgZnVydGhlciByZWNpcHJvY2FsIGxpY2Vuc2UgZnJvbSBhbGwuCjEwLjcuNS4gbWF5IG5vdCBiZSBjb25kaXRpb25lZCBvbiBwYXltZW50IG9mIHJveWFsdGllcywgZmVlcyBvciBvdGhlciBjb25zaWRlcmF0aW9uOwoxMC43LjYuIG1heSBiZSBzdXNwZW5kZWQgd2l0aCByZXNwZWN0IHRvIGFueSBsaWNlbnNlZSB3aGVuIGxpY2Vuc29yIGlzc3VlZCBieSBsaWNlbnNlZSBmb3IgaW5mcmluZ2VtZW50IG9mIGNsYWltcyBlc3NlbnRpYWwgdG8gaW1wbGVtZW50IHRoZSBTcGVjaWZpY2F0aW9uIG9yIGFueSBXM0MgUmVjb21tZW5kYXRpb247CjEwLjcuNy4gbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgY29uZGl0aW9ucyBvciByZXN0cmljdGlvbnMgb24gdGhlIHVzZSBvZiBhbnkgdGVjaG5vbG9neSwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgb3Igb3RoZXIgcmVzdHJpY3Rpb25zIG9uIGJlaGF2aW9yIG9mIHRoZSBsaWNlbnNlZSwgYnV0IG1heSBpbmNsdWRlIHJlYXNvbmFibGUsIGN1c3RvbWFyeSB0ZXJtcyByZWxhdGluZyB0byBvcGVyYXRpb24gb3IgbWFpbnRlbmFuY2Ugb2YgdGhlIGxpY2Vuc2UgcmVsYXRpb25zaGlwIHN1Y2ggYXMgdGhlIGZvbGxvd2luZzogY2hvaWNlIG9mIGxhdyBhbmQgZGlzcHV0ZSByZXNvbHV0aW9uOwoxMC43LjguIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIGFjY2VwdGVkIGJ5IGFuIGltcGxlbWVudGVyIHdobyBtYW5pZmVzdHMgYW4gaW50ZW50IG5vdCB0byBhY2NlcHQgdGhlIHRlcm1zIG9mIHRoZSBXM0MgQ29tbXVuaXR5IFJGIExpY2Vuc2luZyBSZXF1aXJlbWVudHMgbGljZW5zZSBhcyBvZmZlcmVkIGJ5IHRoZSBsaWNlbnNvci4KMTAuNy45LiBUaGUgUkYgbGljZW5zZSBjb25mb3JtaW5nIHRvIHRoZSByZXF1aXJlbWVudHMgaW4gdGhpcyBwb2xpY3kgc2hhbGwgYmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIGxpY2Vuc29yIGFzIGxvbmcgYXMgdGhlIFNwZWNpZmljYXRpb24gaXMgaW4gZWZmZWN0LiBUaGUgdGVybSBvZiBzdWNoIGxpY2Vuc2Ugc2hhbGwgYmUgZm9yIHRoZSBsaWZlIG9mIHRoZSBwYXRlbnRzIGluIHF1ZXN0aW9uLgpJIGFtIGVuY291cmFnZWQgdG8gcHJvdmlkZSBhIGNvbnRhY3QgZnJvbSB3aGljaCBsaWNlbnNpbmcgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGFuZCBvdGhlciByZWxldmFudCBsaWNlbnNpbmcgaW5mb3JtYXRpb24uIEFueSBzdWNoIGluZm9ybWF0aW9uIHdpbGwgYmUgbWFkZSBwdWJsaWNseSBhdmFpbGFibGUuIAoxMC44LiBZb3Ugb3IgWW91ci4gk1lvdSyUIJN5b3UslCBvciCTeW91cpQgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgd2hvIGV4ZXJjaXNlcyBjb3B5cmlnaHQgb3IgcGF0ZW50IHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQgYW55IHBlcnNvbiB0aGF0IHBlcnNvbiBvciBlbnRpdHkgY29udHJvbHMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgotLS0tLS0tLS0tLS0tLS0tLS0tIFdlYkdMIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkNvcHlyaWdodCAoYykgMjAxOCBUaGUgS2hyb25vcyBHcm91cCBJbmMuCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQpjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kL29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCiJNYXRlcmlhbHMiKSwgdG8gZGVhbCBpbiB0aGUgTWF0ZXJpYWxzIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgTWF0ZXJpYWxzLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgTWF0ZXJpYWxzIGFyZSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgTWF0ZXJpYWxzLgoKVEhFIE1BVEVSSUFMUyBBUkUgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKTUFURVJJQUxTIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIE1BVEVSSUFMUy4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgotLS0tLS0tLS0tLS0tIEVuZCBvZiBUaGlyZFBhcnR5Tm90aWNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgo=