CSAgICAgICBSRUFETUUgZmlsZSBmb3IgbmV0LXNubXAgVmVyc2lvbjogNS42LjIKCkRJU0NMQUlNRVIKCiAgVGhlIEF1dGhvcnMgYXNzdW1lIG5vIHJlc3BvbnNpYmlsaXR5IGZvciBkYW1hZ2Ugb3IgbG9zcyBvZiBzeXN0ZW0KICBwZXJmb3JtYW5jZSBhcyBhIGRpcmVjdCBvciBpbmRpcmVjdCByZXN1bHQgb2YgdGhlIHVzZSBvZiB0aGlzCiAgc29mdHdhcmUuICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yCiAgaW1wbGllZCB3YXJyYW50eS4KClRBQkxFIE9GIENPTlRFTlRTCgogIERpc2NsYWltZXIKICBUYWJsZSBPZiBDb250ZW50cwogIEludHJvZHVjdGlvbgoqIFN1cHBvcnRlZCBBcmNoaXRlY3R1cmVzCiAgQXZhaWxhYmlsaXR5CiAgV2ViIFBhZ2UKKiBJbnN0YWxsYXRpb24KICBDb3B5aW5nIEFuZCBDb3B5cmlnaHRzCiogRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMKICBIZWxwaW5nIE91dAoqIENvZGUgVXBkYXRlIEFubm91bmNlbWVudHMKKiBNYWlsaW5nIExpc3RzCiAgQWdlbnQgRXh0ZW5zaWJpbGl0eQogIEV4YW1wbGUgQWdlbnQgQ29uZmlndXJhdGlvbiBhbmQgVXNhZ2UKICBDb25maWd1cmF0aW9uCiAgU3VibWl0dGluZyBCdWcgUmVwb3J0cwogIENsb3NpbmcKICBUaGFua3MKCiAgKiA9IFJlcXVpcmVkIFJlYWRpbmcuCgpJTlRST0RVQ1RJT04KCiAgVGhpcyBwYWNrYWdlIHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIHRoZSBDTVUgMi4xLjIuMSBzbm1wIGNvZGUuICBJdAogIGhhcyBiZWVuIGdyZWF0bHkgbW9kaWZpZWQsIHJlc3RydWN0dXJlZCwgZW5oYW5jZWQgYW5kIGZpeGVkLiAgSXQKICBoYXJkbHkgbG9va3MgdGhlIHNhbWUgYXMgYW55dGhpbmcgdGhhdCBDTVUgaGFzIGV2ZXIgcmVsZWFzZWQuICBJdAogIHdhcyByZW5hbWVkIGZyb20gY211LXNubXAgdG8gdWNkLXNubXAgaW4gMTk5NSBhbmQgbGF0ZXIgcmVuYW1lZCBmcm9tCiAgdWNkLXNubXAgdG8gbmV0LXNubXAgaW4gTm92ZW1iZXIgMjAwMC4KCiAgVGhpcyBSRUFETUUgZmlsZSBzZXJ2ZXMgYXMgYSBzdGFydGluZyBwbGFjZSB0byBsZWFybiBhYm91dCB0aGUKICBwYWNrYWdlLCBidXQgdmVyeSBsaXR0bGUgb2YgdGhlIGRvY3VtZW50YXRpb24gaXMgY29udGFpbmVkIHdpdGhpbgogIHRoaXMgZmlsZS4gIFRoZSBGQVEgaXMgYW4gZXhjZWxsZW50IHBsYWNlIHRvIHN0YXJ0IGFzIHdlbGwuCiAgQWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgYSBidW5jaCBvZiBSRUFETUUgZmlsZXMgZm9yIHNwZWNpZmljCiAgYXJjaGl0ZWN0dXJlcyBhbmQgc3BlY2lmaWMgZmVhdHVyZXMuICBZb3UgbWlnaHQgd2lzaCB0byBsb29rIGF0IHNvbWUKICBvZiB0aGVzZSBvdGhlciBmaWxlcyBhcyB3ZWxsLgoKU1VQUE9SVEVEIEFSQ0hJVEVDVFVSRVMKCiAgUGxlYXNlIHNlZSB0aGUgRkFRIGZvciB0aGlzIGluZm9ybWF0aW9uLgoKICBQbGVhc2UgbGV0IHVzIGtub3cgaWYgeW91IGNvbXBpbGUgaXQgb24gb3RoZXIgT1MgdmVyc2lvbnMgYW5kIGl0CiAgd29ya3MgZm9yIHlvdSBzbyB3ZSBjYW4gYWRkIHRoZW0gdG8gdGhlIGFib3ZlIGxpc3QuCgogIFBvcnRpbmc6ICBQbGVhc2UhIHJlYWQgdGhlIFBPUlRJTkcgZmlsZS4KCiAgQWxzbyBub3RlIHRoYXQgbWFueSBhcmNoaXRlY3R1cmUgaGF2ZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgUkVBRE1FCiAgZmlsZXMsIHNvIHlvdSBzaG91bGQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIG9uZSBhcHByb3ByaWF0ZSB0bwogIHlvdXIgcGxhdGZvcm0uCgpBVkFJTEFCSUxJVFkKCiAgRG93bmxvYWQ6CiAgICAtIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL2Rvd25sb2FkLwogICAgLSBmdHA6Ly9mdHAubmV0LXNubXAub3JnL3B1Yi9zb3VyY2Vmb3JnZS9uZXQtc25tcC8KICBXZWIgcGFnZToKICAgIC0gaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvCiAgUHJvamVjdCBXaWtpOgogICAgLSBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy93aWtpLwogIFNvdXJjZWZvcmdlIFByb2plY3QgcGFnZToKICAgIC0gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9uZXQtc25tcAogIE1pcnJvcnM6CiAgICAtIFVTOiAgICAgICAgZnRwOi8vZnRwLmZyZWVzbm1wLmNvbS9taXJyb3JzL25ldC1zbm1wLwoKICBUaGUgb2xkIHVjZC1zbm1wLnVjZGF2aXMuZWR1IHdlYiBzaXRlIGFuZCBmdHAgc2VydmVyIGlzIG5vdwogIG9mZmxpbmUgYW5kIHNob3VsZCBub3QgYmUgYWNjZXNzZWQgYW55IGxvbmdlci4KCldFQiBQQUdFUwoKICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy8KICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL25ldC1zbm1wCiAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvd2lraS8KCklOU1RBTExBVElPTgoKICBTZWUgdGhlIElOU1RBTEwgZmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgcGFja2FnZS4KCkNPUFlJTkcgQU5EIENPUFlSSUdIVFMKCiAgU2VlIHRoZSBDT1BZSU5HIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHBhY2thZ2UuCgpGUkVRVUVOVExZIEFTS0VEIFFVRVNUSU9OUwoKICBTZWUgdGhlIEZBUSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBwYWNrYWdlLgogIFRoaXMgaXMgYWxzbyBhdmFpbGFibGUgb24gdGhlIHByb2plY3QgV2lraSBhdAoKICAgICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy93aWtpL2luZGV4LnBocC9GQVEKCiAgc28gdGhhdCB0aGUgd2lkZXIgTmV0LVNOTVAgY29tbXVuaXR5IGNhbiBoZWxwIG1haW50YWluIGl0IQoKSEVMUElORyBPVVQKCiAgVGhpcyBpcyBhIHByb2plY3Qgd29ya2VkIG9uIGJ5IHBlb3BsZSBhcm91bmQgdGhlIG5ldC4gIFdlJ2QgbG92ZQogIHlvdXIgaGVscCwgYnV0IHBsZWFzZSByZWFkIHRoZSBQT1JUSU5HIGZpbGUgZmlyc3QuICBBbHNvLCBzdWJzY3JpYmUKICB0byB0aGUgbmV0LXNubXAtY29kZXJzIGxpc3QgZGVzY3JpYmVkIGJlbG93IGFuZCBtZW50aW9uIHdoYXQgeW91J3JlCiAgZ29pbmcgdG8gd29yayBvbiB0byBtYWtlIHN1cmUgbm8gb25lIGVsc2UgaXMgYWxyZWFkeSBkb2luZyBzbyEKICBZb3UnbGwgYWxzbyBuZWVkIHRvIGtlZXAgdXAgdG8gZGF0ZSB3aXRoIHRoZSBsYXRlc3QgY29kZSBzbmFwIHNob3QsCiAgd2hpY2ggY2FuIGJlIG9idGFpbmVkIGZyb20gQ1ZTIHVzaW5nIHRoZSBpbmZvcm1hdGlvbiBmb3VuZCBhdAogIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL2N2cy8uCgogIENvbnRyaWJ1dGlvbnMgdG8gdGhlIE5ldC1TTk1QIHNvdXJjZSBjb2RlIGluIGFueSBmb3JtIGFyZSBncmVhdGx5CiAgYXBwcmVjaWF0ZWQuICBXZSBleHBlY3QgdGhlIHBhcnRpZXMgcHJvdmlkaW5nIHN1Y2ggY29udHJpYnV0aW9ucyB0bwogIGhhdmUgdGhlIHJpZ2h0IHRvIGNvbnRyaWJ1dGUgdGhlbSB0byB0aGUgTmV0LVNOTVAgcHJvamVjdCBvciB0aGF0CiAgdGhlIHBhcnRpZXMgdGhhdCBkbyBoYXZlIHRoZSByaWdodCBoYXZlIGRpcmVjdGVkIHRoZSBwZXJzb24KICBzdWJtaXR0aW5nIHRoZSBjb250cmlidXRpb24gdG8gZG8gc28uICBJbiBhZGRpdGlvbiwgYWxsIGNvbnRyaWJ1dG9ycwogIG5lZWQgdG8gYmUgYXdhcmUgdGhhdCBpZiB0aGUgY29udHJpYnV0aW9uIGlzIGFjY2VwdGVkIGFuZAogIGluY29ycG9yYXRlZCBpbnRvIHRoZSBOZXQtU05NUCBwcm9qZWN0LCBpdCB3aWxsIGJlIHJlZGlzdHJpYnV0ZWQKICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGxpY2Vuc2UgYWdyZWVtZW50IHVzZWQgZm9yIHRoZSBlbnRpcmUgYm9keSBvZgogIHdvcmsgdGhhdCBjb21wcmlzZXMgdGhlIE5ldC1TTk1QIHByb2plY3QgKHNlZSB0aGUgQ09QWUlORyBmaWxlIGZvcgogIGRldGFpbHMpLiAgSWYgdGhpcyBsaWNlbnNlIGFncmVlbWVudCBldmVyIGNoYW5nZXMgdGhlIGNvbnRyaWJ1dGlvbgogIHdpbGwgY29udGludWUgdG8gYmUgcmVsZWFzZWQgdW5kZXIgYW55IG5ldyBsaWNlbnNlcyBhcyB3ZWxsLiAgVGhhbmsKICB5b3UsIGluIGFkdmFuY2UsIGZvciB5b3VyIGdyYWNpb3VzIGNvbnRyaWJ1dGlvbnMuCgpDT0RFIFVQREFURSBBTk5PVU5DRU1FTlRTCgogIFNlZSB0aGUgTkVXUyBmaWxlIGFuZCB0aGUgQ2hhbmdlTG9nIGZpbGUgZm9yIGRldGFpbHMgb24gd2hhdCBoYXMKICBjaGFuZ2VkIGJldHdlZW4gcmVsZWFzZXMuCgogIFdlIGhhdGUgYnJvYWRjYXN0aW5nIGFubm91bmNlIG1lc3NhZ2VzIHRvIG90aGVyIG1haWxpbmcgbGlzdHMgYW5kCiAgbmV3c2dyb3Vwcywgc28gdGhlcmUgaXMgYSBtYWlsaW5nIGxpc3Qgc2V0IHVwIHRvIGhhbmRsZSByZWxlYXNlCiAgYW5ub3VuY2VtZW50cy4gIEFueSB0aW1lIHdlIHB1dCBuZXcgc29mdHdhcmUgb3V0IGZvciBmdHAsIHdlJ2xsIG1haWwKICB0aGlzIGZhY3QgdG8gbmV0LXNubXAtYW5ub3VuY2VAbGlzdHMuc291cmNlZm9yZ2UubmV0LiAgU2VlIHRoZQogIE1BSUxJTkcgTElTVFMgc2VjdGlvbiBkZXNjcmliZWQgYmVsb3cgdG8gc2lnbiB1cCBmb3IgdGhlc2UKICBhbm5vdW5jZW1lbnRzLgoKICBXZSB3aWxsIHBvc3QgbmV3IGFubm91bmNlbWVudHMgb24gYSB2ZXJ5IGluZnJlcXVlbnQgYmFzaXMgdG8gdGhlCiAgb3RoZXIgY2hhbm5lbHMgKHRoZSBvdGhlciBzbm1wIG1haWxpbmcgbGlzdHMgYW5kIG5ld3Nncm91cHMgbGlrZQogIGNvbXAucHJvdG9jb2xzLnNubXApLCBidXQgb25seSBmb3IgbWFqb3IgY29kZSByZXZpc2lvbnMgYW5kIG5vdCBmb3IKICBidWctZml4IHBhdGNoZXMgb3Igc21hbGwgZmVhdHVyZSB1cGdyYWRlcy4KCk1BSUxJTkcgTElTVFMKCiAgVGhlIGxpc3RzOgoKICAgIEEgbnVtYmVyIG9mIG1haWxpbmcgbGlzdHMgaGF2ZSBiZWVuIGNyZWF0ZWQgZm9yIHN1cHBvcnQgb2YgdGhlIHByb2plY3Q6CiAgICBUaGUgbWFpbiBvbmVzIGFyZToKCiAgICAgIG5ldC1zbm1wLWFubm91bmNlQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAgLS0gRm9yIG9mZmljaWFsIGFubm91bmNlbWVudHMKICAgICAgbmV0LXNubXAtdXNlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICAgICAtLSBGb3IgdXNhZ2UgZGlzY3Vzc2lvbnMKICAgICAgbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAgICAtLSBGb3IgZGV2ZWxvcG1lbnQgZGlzY3Vzc2lvbnMKCiAgICBUaGUgLWNvZGVycyBsaXN0IGlzIGludGVuZGVkIGZvciBkaXNjdXNzaW9uIG9uIGRldmVsb3BtZW50IG9mIGNvZGUKICAgIHRoYXQgd2lsbCBiZSBzaGlwcGVkIGFzIHBhcnQgb2YgdGhlIHBhY2thZ2UuICBUaGUgLXVzZXJzIGxpc3QgaXMKICAgIGZvciBnZW5lcmFsIGRpc2N1c3Npb24gb24gY29uZmlndXJpbmcgYW5kIHVzaW5nIHRoZSBwYWNrYWdlLAogICAgaW5jbHVkaW5nIGlzc3VlcyB3aXRoIGNvZGluZyB1c2VyLWRldmVsb3BlZCBhcHBsaWNhdGlvbnMgKGNsaWVudHMsCiAgICBtYW5hZ2VycywgTUlCIG1vZHVsZXMsIGV0YykuCgogICAgUGxlYXNlIGRvICpOT1QqIHNlbmQgbWVzc2FnZXMgdG8gYm90aCAtdXNlcnMgYW5kIC1jb2RlcnMgbGlzdHMuCiAgICBUaGlzIGlzIGNvbXBsZXRlbHkgdW5uZWNlc3NhcnksIGFuZCBzaW1wbHkgc2VydmVzIHRvIGZ1cnRoZXIKICAgIG92ZXJsb2FkIChhbmQgYW5ub3kpIHRoZSBjb3JlIGRldmVsb3BtZW50IHRlYW0uICAgSWYgaW4gZG91YnQsCiAgICBqdXN0IHVzZSB0aGUgLXVzZXJzIGxpc3QuCgoKICAgIFRoZSBvdGhlciBsaXN0cyBvZiBwb3NzaWJsZSBpbnRlcmVzdCBhcmU6CgogICAgICBuZXQtc25tcC1jdnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICAgICAgIC0tIEZvciBjdnMgdXBkYXRlIGFubm91bmNlbWVudHMKICAgICAgbmV0LXNubXAtYnVnc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgICAgICAtLSBGb3IgQnVnIGRhdGFiYXNlIHVwZGF0ZSBhbm5vdW5jZW1lbnRzCiAgICAgIG5ldC1zbm1wLXBhdGNoZXNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICAgLS0gRm9yIFBhdGNoIGRhdGFiYXNlIHVwZGF0ZSBhbm5vdW5jZW1lbnRzCgogICAgUGxlYXNlIGRvIE5PVCBwb3N0IG1lc3NhZ2VzIHRvIHRoZXNlIGxpc3RzIChvciB0byB0aGUgYW5ub3VuY2UgbGlzdCBhYm92ZSkuCiAgICBCdWcgcmVwb3J0cyBhbmQgUGF0Y2hlcyBzaG91bGQgYmUgc3VibWl0dGVkIHZpYSB0aGUgU291cmNlIEZvcmdlIHRyYWNrZXIKICAgIHN5c3RlbS4gIFNlZSB0aGUgbWFpbiBwcm9qZWN0IHdlYiBwYWdlcyBmb3IgZGV0YWlscy4KCiAgICBUbyBzdWJzY3JpYmUgdG8gYW55IG9mIHRoZXNlIGxpc3RzLCBwbGVhc2Ugc2VlOgogIAogICAgICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9saXN0cy8KCgogIEFyY2hpdmVzOgogICAgVGhlIGFyY2hpdmVzIGZvciB0aGVzZSBtYWlsaW5nIGxpc3RzIGNhbiBiZSBmb3VuZCBieSBmb2xsb3dpbmcgbGlua3MgYXQKCiAgICAgIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL2xpc3RzLwoKQUdFTlQgRVhURU5TSUJJTElUWQoKICBUaGUgYWdlbnQgdGhhdCBjb21lcyB3aXRoIHRoaXMgcGFja2FnZSBpcyBleHRlbnNpYmxlIHRocm91Z2ggdXNlIG9mCiAgc2hlbGwgc2NyaXB0cyBhbmQgb3RoZXIgbWV0aG9kcy4gIFNlZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWwgcGFnZXMKICAobGlrZSBzbm1wZC5jb25mKSBhbmQgcnVuIHRoZSBzbm1wY29uZiBwZXJsIHNjcmlwdCBmb3IgZnVydGhlciBkZXRhaWxzLgoKICBZb3UgY2FuIGFsc28gZXh0ZW5kIHRoZSBhZ2VudCBieSB3cml0aW5nIEMgY29kZSBkaXJlY3RseS4gIFRoZSBhZ2VudAogIGlzIGV4dHJlbWVseSBtb2R1bGFyIGluIG5hdHVyZSBhbmQgeW91IG5lZWQgb25seSBjcmVhdGUgbmV3IGZpbGVzLAogIHJlLXJ1biBjb25maWd1cmUgYW5kIHJlLWNvbXBpbGUgKG9yIGxpbmsgYWdhaW5zdCBpdHMgbGlicmFyaWVzKS4gIE5vCiAgbW9kaWZpY2F0aW9uIG9mIHRoZSBkaXN0cmlidXRlZCBzb3VyY2UgZmlsZXMgYXJlIG5lY2Vzc2FyeS4gIFNlZSB0aGUKICBmb2xsb3dpbmcgZmlsZXMgZm9yIGRldGFpbHMgb24gaG93IHRvIGdvIGFib3V0IHRoaXM6CiAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvdHV0b3JpYWwtNS90b29sa2l0LywKICBhZ2VudC9taWJncm91cC9leGFtcGxlcy8qLmMKCiAgQWxzbywgc2VlIHRoZSBsb2NhbC9taWIyYyBwcm9ncmFtIGFuZCBpdHMgUkVBRE1FIGZpbGUgZm9yIGhlbHAgaW4KICB0dXJuaW5nIGEgdGV4dHVhbCBtaWIgZGVzY3JpcHRpb24gaW50byBhIEMgY29kZSB0ZW1wbGF0ZS4KCiAgV2Ugbm93IHN1cHBvcnQgQWdlbnRYIGZvciBzdWJhZ2VudCBleHRlbnNpYmlsaXR5LiAgVGhlIG5ldC1zbm1wCiAgYWdlbnQgY2FuIHJ1biBhcyBib3RoIGEgbWFzdGVyIGFnZW50IGFuZCBhIHN1YmFnZW50LiAgQWRkaXRpb25hbGx5LAogIGEgdG9vbGtpdCBpcyBwcm92aWRlZCB0aGF0IGVuYWJsZXMgdXNlcnMgb2YgaXQgdG8gZWFzaWx5IGVtYmVkIGEKICBhZ2VudHggY2xpZW50IGludG8gZXh0ZXJuYWwgYXBwbGljYXRpb25zLiAgU2VlIHRoZSB0dXRvcmlhbCBhdAogIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3R1dG9yaWFsLTUvdG9vbGtpdC8gZm9yIGFuIGV4YW1wbGUgb2YgaG93CiAgZ28gYWJvdXQgZG9pbmcgdGhpcy4KCkNPTkZJR1VSQVRJT04KCiAgU2VlIHRoZSBtYW4vc25tcC5jb25mLjUgbWFudWFsIHBhZ2UuCgogIEZvciB0aGUgYWdlbnQsIGFkZGl0aW9uYWxseSBzZWUgdGhlIG1hbi9zbm1wZC5jb25mLjUgbWFudWFsIHBhZ2UuCgogIEZvciB0aGUgc25tcHRyYXBkLCBzZWUgdGhlIG1hbi9zbm1wdHJhcGQuY29uZi41IG1hbnVhbCBwYWdlLgoKICBZb3UgY2FuIGFsc28gcnVuIHRoZSBzbm1wY29uZiBwZXJsIHNjcmlwdCB0byBoZWxwIHlvdSBjcmVhdGUgc29tZSBvZgogIHRoZXNlIGZpbGVzLgoKU1VCTUlUVElORyBCVUcgUkVQT1JUUwoKICBJbXBvcnRhbnQ6ICpQbGVhc2UqIGluY2x1ZGUgd2hhdCB2ZXJzaW9uIG9mIHRoZSBuZXQtc25tcCAob3IKICB1Y2Qtc25tcCkgcGFja2FnZSB5b3UgYXJlIHVzaW5nIGFuZCB3aGF0IGFyY2hpdGVjdHVyZShzKSB5b3UncmUKICB1c2luZywgYXMgd2VsbCBhcyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBleGFjdGx5IHdoYXQgaXMgd3JvbmcuCgogIFRvIHN1Ym1pdCBhIGJ1ZyByZXBvcnQsIHBsZWFzZSB1c2UgdGhlIHdlYiBpbnRlcmZhY2UgYXQKICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9idWdzLy4gIEl0IGlzIGEgZnVsbC1mbGVkZ2VkCiAgYnVnLXRyYWNraW5nIHN5c3RlbSB0aGF0IHdpbGwgYWxsb3cgeW91IHRvIHNlYXJjaCBmb3IgYWxyZWFkeQogIGV4aXN0aW5nIGJ1ZyByZXBvcnRzIGFzIHdlbGwgYXMgdHJhY2sgdGhlIHN0YXR1cyBvZiB5b3VyIHJlcG9ydCBhcwogIGl0IGlzIHByb2Nlc3NlZCBieSB0aGUgY29yZSBkZXZlbG9wZXJzLgoKICBJZiB5b3UgaW50ZW5kIHRvIHN1Ym1pdCBhIHBhdGNoIGFzIHdlbGwsIHBsZWFzZSByZWFkIHRoZSBQT1JUSU5HCiAgZmlsZSBiZWZvcmUgeW91IGRvIHNvIGFuZCB0aGVuIHN1Ym1pdCBpdCB0bwogIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3BhdGNoZXMvLgoKQ0xPU0lORwoKICBXZSBsb3ZlIHBhdGNoZXMuICBTZW5kIHNvbWUgdG8gdXMhICBCdXQgYmVmb3JlIHlvdSBkbywgcGxlYXNlIHNlZQogIHRoZSAnUE9SVElORycgZmlsZSBmb3IgaW5mb3JtYXRpb24gb24gaGVscGluZyB1cyBvdXQgd2l0aCB0aGUKICBwcm9jZXNzIG9mIGludGVncmF0aW5nIHlvdXIgcGF0Y2hlcyAocmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0cyBhIG5ldwogIGZlYXR1cmUgaW1wbGVtZW50YXRpb24gb3IgYSBuZXcgcG9ydCkuCgogIEFsc28sIFdlJ3JlIGludGVyZXN0ZWQgaWYgYW55b25lIGFjdHVhbGx5IHVzZXMvbGlrZXMvaGF0ZXMvd2hhdGV2ZXIKICB0aGlzIHBhY2thZ2UuLi4gIE1haWwgdXMgYSBub3RlIGFuZCBsZXQgdXMga25vdyB3aGF0IHlvdSB0aGluayBvZiBpdCEKCiAgSGF2ZSBmdW4gYW5kIG1heSBpdCBtYWtlIHlvdXIgbGlmZSBlYXNpZXIsCgogICAgVGhlIG5ldC1zbm1wIGRldmVsb3BlcnMKClRIQU5LUwoKICBUaGUgZm9sbG93aW5nIHBlb3BsZSBoYXZlIGNvbnRyaWJ1dGVkIHZhcmlvdXMgcGF0Y2hlcyBhbmQKICBpbXByb3ZlbWVudHMuICBUbyB0aGVtIHdlIG93ZSBvdXIgZGVlcGVzdCB0aGFua3MgKGFuZCB5b3UgZG8gdG9vISk6CgogICAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBTdGV2ZSBXYWxkYnVzc2VyIDx3YWxkYnVzc2VyQG5leHRiZWFjb24uY29tPgogICAgRGFuIEEuIERpY2tleSA8ZGRpY2tleUB0cmFuc2l0aW9uLmNvbT4KICAgIERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGNzYy5saXYuYWMudWs+CiAgICBHaW92YW5uaSBTLiBNYXJ6b3QgPGdtYXJ6b3RAbm9ydGVsbmV0d29ya3MuY29tPgogICAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBTaW1vbiBMZWluZW4gPHNpbW9uQGxpbW1hdC5zd2l0Y2guY2g+CiAgICBEYXZpZCBULiBQZXJraW5zIDxkcGVya2luc0Bkc3BlcmtpbnMuY29tPgogICAgTWlrZSBQZXJpayA8bWlrZXBAY3J0LmNvbT4KICAgIFNhbmphaSBOYXJhaW4gPG5hcmFpbkB0aHVtcGVyLmJlbGxjb3JlLmNvbT4KICAgIGZyYW5jdXNAbWV0c255LmRlbHBoaS5jb20KICAgIEdhcnkgUGFsbWVyIDxncGFsbWVyQGZyZWVic2Qub3JnPgogICAgTWFyYyBHLiBGb3VybmllciA8c2NyYXBweUBraS5uZXQ+CiAgICBHYXJ5IEEuIEhheXdhcmQgPGdhaEBiZWxsY29yZS5jb20+CiAgICBKZW5uaWZlciBCcmF5IDxqYnJheUBvcmlnaW4tYXQuY28udWs+CiAgICBQaGlsaXAgR3VlbnRoZXIgPGd1ZW50aGVyQGdhYy5lZHU+CiAgICBFbHd5biBCIERhdmllcyA8ZWRhdmllc0BvcmlnaW4tYXQuY28udWs+CiAgICBTaW1vbiBCdXJnZSA8c2ltb25iQHRlbHN0cmEuY29tLmF1PgogICAgRGF2aWQgUGF1bCBaaW1tZXJtYW4gPGRwekBhcHBsZS5jb20+CiAgICBBbGFuIEJhdGllIDxiYXRpZUBhYWh6LmpmLmludGVsLmNvbT4KICAgIE1pY2hhZWwgRG91Z2xhc3MgPG1pa2Vkb3VnQHRleGFzLm5ldD4KICAgIFRlZCBSdWxlIDxUZWRfUnVsZUBGTEVYVEVDSC5DTy5VSz4KICAgIENyYWlnIEJldmlucyA8Y3JhaWdiQGJpdGNvbS5uZXQuYXU+CiAgICBBcnRoZXIgSHl1biA8YXJ0aHVyQHBzaS5jb20+CiAgICBDcmlzdGlhbiBFc3RhbiA8Q3Jpc3RpYW4uRXN0YW5AbmV0LnV0Y2x1ai5ybz4KICAgIEV1Z2VuZSBQb2xvdm5pa292IDxldWdlbkByZC56Z2lrLnphcG9yaXpoemhlLnVhPgogICAgSmFrb2IgRWxsZXJzdGVkdCA8amFrb2JAZHluYXJjLnNlPgogICAgTWljaGFlbCBKLiBTbGlmY2FrIDxzbGlmQGJlbGxzb3V0aC5uZXQ+CiAgICBKb25hcyBPbHNzb24gPGpvbHNzb25AZXJ2LmVyaWNzc29uLnNlPgogICAgSmFtZXMgSC4gWW91bmcgPHN5c2poeUBnc3UuZWR1PgogICAgSmVmZiBKb2huc29uIDxqYmpAcmVkaGF0LmNvbT4KICAgIE1hcmtrdSBMYXVra2FuZW4gPG1hcmxhdWtrQHN0eWJiYS5udGMubm9raWEuY29tPgogICAgRGVyZWsgU2lta293aWFrIDxkZXJla3NAa2QtZGV2LmNvbT4KICAgIERhdmlkIEYuIE5ld21hbiA8ZG5ld21hbkBlcG5ldC5jb20+CiAgICBOaWNrIEFtYXRvIDxuYWFtYXRvQG1lcml0LmVkdT4KICAgIE1pa2UgQmFlciA8YmFlcm1AY2Fsd2ViLmNvbT4KICAgIFBhdHJpY2sgTGF3cmVuY2UgPHBqbGF3cmVuY2VAdWNkYXZpcy5lZHU+CiAgICBSdXNzIE11bmR5IDxtdW5keUB0aXNsYWJzLmNvbT4KICAgIE9sYWZ1ciBHdWRtdW5kc3NvbiA8b2d1ZEB0aXNsYWJzLmNvbT4KICAgIERhdmlkIFJlZWRlciA8ZHJlZWRlckB0aXNsYWJzLmNvbT4KICAgIEVkIExld2lzIDxsZXdpc0B0aXNsYWJzLmNvbT4KICAgIEJpbGwgQmFic29uIDx3YmFic29uQHRpc2xhYnMuY29tPgogICAgQ2hyaXMgU21pdGggPGNzbWl0aEBwbGF0Zm9ybS5jb20+CiAgICBNaWtlIE1pY2hhdWQgPG1pa2VtaWNoYXVkQGVhcnRobGluay5uZXQ+CiAgICBBbmR5IEhvb2QgPGFob29kQHdlc3RwYWMuY29tLmF1PgogICAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAZnJlZXNubXAuY29tPgogICAgQmVydCBEcmllaHVpcyA8ZHJpZWh1aXNAcGxheWJlaW5nLm9yZz4KICAgIEp1ZXJnZW4gU2Nob2Vud2FlbGRlciA8c2Nob2Vud0BpYnIuY3MudHUtYnMuZGU+CiAgICBGcmFuayBTdHJhdXNzIDxzdHJhdXNzQGlici5jcy50dS1icy5kZT4KICAgIFJhZ25hciBLavhyc3RhZCA8dWNkQHJhZ25hcmsudmVzdGRhdGEubm8+CiAgICBKb2NoZW4gS21pZXRzY2ggPGpvY2hlbi5rbWlldHNjaEB0dS1jbGF1c3RoYWwuZGU+CiAgICBKdW4taWNoaXJvIGl0b2p1biBIYWdpbm8gPGl0b2p1bkBpaWpsYWIubmV0PgogICAgSm9obiBMIFZpbGxhbG92b3MgPGpvaG4ubC52aWxsYWxvdm9zQGludGVsLmNvbT4KICAgIENocmlzdG9waCBNYW1taXR6c2NoIDxDaHJpc3RvcGguTWFtbWl0enNjaEB0dS1jbGF1c3RoYWwuZGU+CiAgICBBcm5lIE9lc2xlYm9lIDxBcm5lLk9lc2xlYm9lQGl0ZW0ubnRudS5ubz4KICAgIEplZmYgQ291cnMgPGplZmZAdWx0cmFkbnMuY29tPgogICAgS2FybCBTY2hpbGtlIDxrYXJsX3NjaGlsa2VAZWxpLm5ldD4KICAgIEpvaG4gTmF5bG9uIDxqYnBuQGNhbWJyaWRnZWJyb2FkYmFuZC5jb20+CiAgICBLZW4gSG9ybnN0ZWluIDxrZW5oQGNtZi5ucmwubmF2eS5taWw+CiAgICBNYXJ0aW4gT2xkZmllbGQgPG1AbWFpbC50Yz4KICAgIEhhcnJpZSBIYXpld2lua2VsIDxoYXJyaWVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgTWFyayBGZXJsYXR0ZSA8ZmVybGF0dGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgTWFydXMgTWVpc3NuZXIgPG1hcmN1c21laXNzbmVyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAgIFN0ZXBoYW4gV2VuemVyIDxzdGVwaGFud2VuemVsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAgIFJvbiBNZXZpc3NlbiA8cm9uLm1ldmlzc2VuQGVlZC5lcmljc3Nvbi5zZT4KICAgIFQuSi4gTWF0aGVyIDx0am1hdGhlckB0am1hdGhlci5jb20+CiAgICBDcmFpZyBTZXRlcmEgPHNldGVyYWp1bmtAY2hhcnRlci5uZXQ+CiAgICBLYXRzdWhpc2EgQUJFIDxhYmVrYXRzdUBjeXNvbHMuY29tPgogICAgQXhlbCBLaXR0ZW5iZXJnZXIgPEF4ZWwuS2l0dGVuYmVyZ2VyQG1heHhpby5jb20+CiAgICBKb2hhbm5lcyBTY2htaWR0LUZpc2NoZXIgPGpzZkBJbnRlckZhY2UtQUcuY29tPgogICAgSmVmZnJleSBXYXRzb24gPG5vc3Rhd0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBCcnVjZSBTaGF3IDxCcnVjZS5TaGF3QGdvdi5hYi5jYT4KICAgIFN0ZWZhbiBSYWRtYW4gPHNyYWRtYW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgU3RlcGhlbiBKLiBGcmllZGwgPHNqZnJpZWRsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAgIEFsZXggQnVyZ2VyIDxhbGV4X2JAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgQ2hyaXN0b3BoZSBWYXJvcXVpIDxleHQuZGV2b3RlYW0udmFyb3F1aUBzbmNmLmZyPgogICAgU3Jpa2FudGggUGluZGlwcm9saSA8c3JpcGluZGlwQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAgIEtldmluIEdyYWhhbSA8a2V2Z3JhaGFtN0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBYaWFvZmVuZyBMaW5nIDx4ZmxpbmdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgQnJhbmRvbiBLbml0dGVyIDxrbml0dGVyYkBibC4uLj4KICAgIEFuZHJldyBGaW5kbGF5IDxhbmRyZXcuZmluZGxheUBza2lsbHMtMXN0LmNvLnVrPgogICAgUm9uIFRhYm9yIDxydGFib3JAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgUGV0ZXIgV2FyYXNpbiA8ZHJnLXIzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAgIEJvYiBSb3dsYW5kcyA8cm9iZXJ0LnJvd2xhbmRzQHN1bi5jb20+CiAgICBQZXRlciBIaWNrcyA8UGV0ZXIuSGlja3NAUE9HR1MuQ08uVUs+CiAgICBBbmR5IFNtaXRoIDx3YXNtaXRoMzJAZWFydGhsaW5rLm5ldD4KICAgIE5pY2sgQmFya2FzIDxuYmFya2FzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAgIE5vYWggRnJpZWRtYW4gPGZyaWVkbWFuQHByZXAuYWkubWl0LmVkdT4KICAgIEdlZXJ0IERlIFBldXRlciA8Z2VlcnRAZGVwZXV0ZXIub3JnPgogICAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CiAgICBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c21laXNzbmVyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAgIEFuZHJldyBSdWNrZXIgSm9uZXMgPGFyam9uZXNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgRGFpLkguIDxkZy1mQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgVmxhZGlzbGF2IEJvZ2Rhbm92IDxzbGF2YV9yZWdAbnN5cy5ieT4KICAgIFBldGVyIE1hcnRpbiA8cG5tYXJ0aW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgVGhvbWFzIExhY2tleSA8dGVsYWNrZXlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgSm9lIEJ1ZWhsZXIgPGpidWVobGVyQHNwaXJlbnRjb20uY29tPgogICAgQW5kZXJzIFBlcnNzb24gPGFwZXJzc29uQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAgIFJvamVyIDxyb2plckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBCYXJ0IFZhbiBBc3NjaGUgPGJhcnQudmFuYXNzY2hlQGdtYWlsLmNvbT4KCiAgV2UndmUgcHJvYmFibHkgZm9yZ290dGVuIHBlb3BsZSBvbiB0aGlzIGxpc3QuICBMZXQgdXMga25vdyBpZiB5b3UndmUKICBjb250cmlidXRlZCBjb2RlIGFuZCB3ZSd2ZSBsZWZ0IHlvdSBvdXQuCg==