PCEtLQokUG9zdGdyZVNRTDogcGdzcWwvZG9jL3NyYy9zZ21sL3JlZi9ncmFudC5zZ21sLHYgMS42MiAyMDA2LzA5LzE2IDAwOjMwOjE4IG1vbWppYW4gRXhwICQKUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCi0tPgoKPHJlZmVudHJ5IGlkPSJTUUwtR1JBTlQiPgogPHJlZm1ldGE+CiAgPHJlZmVudHJ5dGl0bGUgaWQ9InNxbC1ncmFudC10aXRsZSI+R1JBTlQ8L3JlZmVudHJ5dGl0bGU+CiAgPHJlZm1pc2NpbmZvPlNRTCAtIExhbmd1YWdlIFN0YXRlbWVudHM8L3JlZm1pc2NpbmZvPgogPC9yZWZtZXRhPgoKIDxyZWZuYW1lZGl2PgogIDxyZWZuYW1lPkdSQU5UPC9yZWZuYW1lPgogIDxyZWZwdXJwb3NlPmRlZmluZSBhY2Nlc3MgcHJpdmlsZWdlczwvcmVmcHVycG9zZT4KIDwvcmVmbmFtZWRpdj4KCiA8aW5kZXh0ZXJtIHpvbmU9InNxbC1ncmFudCI+CiAgPHByaW1hcnk+R1JBTlQ8L3ByaW1hcnk+CiA8L2luZGV4dGVybT4KCiA8cmVmc3lub3BzaXNkaXY+CjxzeW5vcHNpcz4KR1JBTlQgeyB7IFNFTEVDVCB8IElOU0VSVCB8IFVQREFURSB8IERFTEVURSB8IFJFRkVSRU5DRVMgfCBUUklHR0VSIH0KICAgIFssLi4uXSB8IEFMTCBbIFBSSVZJTEVHRVMgXSB9CiAgICBPTiBbIFRBQkxFIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnRhYmxlbmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLl0KICAgIFRPIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnVzZXJuYW1lPC9yZXBsYWNlYWJsZT4gfCBHUk9VUCA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+Z3JvdXBuYW1lPC9yZXBsYWNlYWJsZT4gfCBQVUJMSUMgfSBbLCAuLi5dIFsgV0lUSCBHUkFOVCBPUFRJT04gXQoKR1JBTlQgeyB7IFVTQUdFIHwgU0VMRUNUIHwgVVBEQVRFIH0KICAgIFssLi4uXSB8IEFMTCBbIFBSSVZJTEVHRVMgXSB9CiAgICBPTiBTRVFVRU5DRSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+c2VxdWVuY2VuYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uXQogICAgVE8geyA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+dXNlcm5hbWU8L3JlcGxhY2VhYmxlPiB8IEdST1VQIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5ncm91cG5hbWU8L3JlcGxhY2VhYmxlPiB8IFBVQkxJQyB9IFssIC4uLl0gWyBXSVRIIEdSQU5UIE9QVElPTiBdCgpHUkFOVCB7IHsgQ1JFQVRFIHwgQ09OTkVDVCB8IFRFTVBPUkFSWSB8IFRFTVAgfSBbLC4uLl0gfCBBTEwgWyBQUklWSUxFR0VTIF0gfQogICAgT04gREFUQUJBU0UgPHJlcGxhY2VhYmxlPmRibmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLl0KICAgIFRPIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnVzZXJuYW1lPC9yZXBsYWNlYWJsZT4gfCBHUk9VUCA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+Z3JvdXBuYW1lPC9yZXBsYWNlYWJsZT4gfCBQVUJMSUMgfSBbLCAuLi5dIFsgV0lUSCBHUkFOVCBPUFRJT04gXQoKR1JBTlQgeyBFWEVDVVRFIHwgQUxMIFsgUFJJVklMRUdFUyBdIH0KICAgIE9OIEZVTkNUSU9OIDxyZXBsYWNlYWJsZT5mdW5jbmFtZTwvcmVwbGFjZWFibGU+ICggWyBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5hcmdtb2RlPC9yZXBsYWNlYWJsZT4gXSBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5hcmduYW1lPC9yZXBsYWNlYWJsZT4gXSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+YXJndHlwZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gXSApIFssIC4uLl0KICAgIFRPIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnVzZXJuYW1lPC9yZXBsYWNlYWJsZT4gfCBHUk9VUCA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+Z3JvdXBuYW1lPC9yZXBsYWNlYWJsZT4gfCBQVUJMSUMgfSBbLCAuLi5dIFsgV0lUSCBHUkFOVCBPUFRJT04gXQoKR1JBTlQgeyBVU0FHRSB8IEFMTCBbIFBSSVZJTEVHRVMgXSB9CiAgICBPTiBMQU5HVUFHRSA8cmVwbGFjZWFibGU+bGFuZ25hbWU8L3JlcGxhY2VhYmxlPiBbLCAuLi5dCiAgICBUTyB7IDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj51c2VybmFtZTwvcmVwbGFjZWFibGU+IHwgR1JPVVAgPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPmdyb3VwbmFtZTwvcmVwbGFjZWFibGU+IHwgUFVCTElDIH0gWywgLi4uXSBbIFdJVEggR1JBTlQgT1BUSU9OIF0KCkdSQU5UIHsgeyBDUkVBVEUgfCBVU0FHRSB9IFssLi4uXSB8IEFMTCBbIFBSSVZJTEVHRVMgXSB9CiAgICBPTiBTQ0hFTUEgPHJlcGxhY2VhYmxlPnNjaGVtYW5hbWU8L3JlcGxhY2VhYmxlPiBbLCAuLi5dCiAgICBUTyB7IDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj51c2VybmFtZTwvcmVwbGFjZWFibGU+IHwgR1JPVVAgPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPmdyb3VwbmFtZTwvcmVwbGFjZWFibGU+IHwgUFVCTElDIH0gWywgLi4uXSBbIFdJVEggR1JBTlQgT1BUSU9OIF0KCkdSQU5UIHsgQ1JFQVRFIHwgQUxMIFsgUFJJVklMRUdFUyBdIH0KICAgIE9OIFRBQkxFU1BBQ0UgPHJlcGxhY2VhYmxlPnRhYmxlc3BhY2VuYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uXQogICAgVE8geyA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+dXNlcm5hbWU8L3JlcGxhY2VhYmxlPiB8IEdST1VQIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5ncm91cG5hbWU8L3JlcGxhY2VhYmxlPiB8IFBVQkxJQyB9IFssIC4uLl0gWyBXSVRIIEdSQU5UIE9QVElPTiBdCgpHUkFOVCA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+cm9sZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gVE8gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnVzZXJuYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uXSBbIFdJVEggQURNSU4gT1BUSU9OIF0KCkdSQU5UIHsgU0VMRUNUIHwgSU5TRVJUIHwgQUxMIFtQUklWSUxFR0VTXSB9IAqgoKCgT04gUFJPVE9DT0wgPHJlcGxhY2VhYmxlPnByb3RvY29sbmFtZTwvcmVwbGFjZWFibGU+IAqgoKCgVE8gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnVzZXJuYW1lPC9yZXBsYWNlYWJsZT4KCjwvc3lub3BzaXM+CiA8L3JlZnN5bm9wc2lzZGl2PgoKIDxyZWZzZWN0MSBpZD0ic3FsLWdyYW50LWRlc2NyaXB0aW9uIj4KICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgoKICA8cGFyYT4KICAgVGhlIDxjb21tYW5kPkdSQU5UPC9jb21tYW5kPiBjb21tYW5kIGhhcyB0d28gYmFzaWMgdmFyaWFudHM6IG9uZQogICB0aGF0IGdyYW50cyBwcml2aWxlZ2VzIG9uIGEgZGF0YWJhc2Ugb2JqZWN0ICh0YWJsZSwgdmlldywgc2VxdWVuY2UsCiAgIGRhdGFiYXNlLCBmdW5jdGlvbiwgcHJvY2VkdXJhbCBsYW5ndWFnZSwgc2NoZW1hLCBvciB0YWJsZXNwYWNlKSwKICAgYW5kIG9uZSB0aGF0IGdyYW50cyBtZW1iZXJzaGlwIGluIGEgcm9sZS4gIFRoZXNlIHZhcmlhbnRzIGFyZQogICBzaW1pbGFyIGluIG1hbnkgd2F5cywgYnV0IHRoZXkgYXJlIGRpZmZlcmVudCBlbm91Z2ggdG8gYmUgZGVzY3JpYmVkCiAgIHNlcGFyYXRlbHkuCiAgPC9wYXJhPgoKICA8cGFyYT4KICAgQXMgb2YgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiA4LjEsIHRoZSBjb25jZXB0cyBvZiB1c2VycyBhbmQKICAgZ3JvdXBzIGhhdmUgYmVlbiB1bmlmaWVkIGludG8gYSBzaW5nbGUga2luZCBvZiBlbnRpdHkgY2FsbGVkIGEgcm9sZS4KICAgSXQgaXMgdGhlcmVmb3JlIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gdXNlIHRoZSBrZXl3b3JkIDxsaXRlcmFsPkdST1VQPC9saXRlcmFsPgogICB0byBpZGVudGlmeSB3aGV0aGVyIGEgZ3JhbnRlZSBpcyBhIHVzZXIgb3IgYSBncm91cC4gIDxsaXRlcmFsPkdST1VQPC9saXRlcmFsPgogICBpcyBzdGlsbCBhbGxvd2VkIGluIHRoZSBjb21tYW5kLCBidXQgaXQgaXMgYSBub2lzZSB3b3JkLgogIDwvcGFyYT4KCiA8cmVmc2VjdDIgaWQ9InNxbC1ncmFudC1kZXNjcmlwdGlvbi1vYmplY3RzIj4KICA8dGl0bGU+R1JBTlQgb24gRGF0YWJhc2UgT2JqZWN0czwvdGl0bGU+CgogIDxwYXJhPgogICBUaGlzIHZhcmlhbnQgb2YgdGhlIDxjb21tYW5kPkdSQU5UPC9jb21tYW5kPiBjb21tYW5kIGdpdmVzIHNwZWNpZmljCiAgIHByaXZpbGVnZXMgb24gYSBkYXRhYmFzZSBvYmplY3QgdG8KICAgb25lIG9yIG1vcmUgcm9sZXMuICBUaGVzZSBwcml2aWxlZ2VzIGFyZSBhZGRlZAogICB0byB0aG9zZSBhbHJlYWR5IGdyYW50ZWQsIGlmIGFueS4KICA8L3BhcmE+CgogIDxwYXJhPgogICBUaGUga2V5IHdvcmQgPGxpdGVyYWw+UFVCTElDPC9saXRlcmFsPiBpbmRpY2F0ZXMgdGhhdCB0aGUKICAgcHJpdmlsZWdlcyBhcmUgdG8gYmUgZ3JhbnRlZCB0byBhbGwgcm9sZXMsIGluY2x1ZGluZyB0aG9zZSB0aGF0IG1heQogICBiZSBjcmVhdGVkIGxhdGVyLiAgPGxpdGVyYWw+UFVCTElDPC9saXRlcmFsPiBtYXkgYmUgdGhvdWdodCBvZiBhcyBhbgogICBpbXBsaWNpdGx5IGRlZmluZWQgZ3JvdXAgdGhhdCBhbHdheXMgaW5jbHVkZXMgYWxsIHJvbGVzLgogICBBbnkgcGFydGljdWxhciByb2xlIHdpbGwgaGF2ZSB0aGUgc3VtCiAgIG9mIHByaXZpbGVnZXMgZ3JhbnRlZCBkaXJlY3RseSB0byBpdCwgcHJpdmlsZWdlcyBncmFudGVkIHRvIGFueSByb2xlIGl0CiAgIGlzIHByZXNlbnRseSBhIG1lbWJlciBvZiwgYW5kIHByaXZpbGVnZXMgZ3JhbnRlZCB0bwogICA8bGl0ZXJhbD5QVUJMSUM8L2xpdGVyYWw+LgogIDwvcGFyYT4KCiAgPHBhcmE+CiAgIElmIDxsaXRlcmFsPldJVEggR1JBTlQgT1BUSU9OPC9saXRlcmFsPiBpcyBzcGVjaWZpZWQsIHRoZSByZWNpcGllbnQKICAgb2YgdGhlIHByaXZpbGVnZSBtYXkgaW4gdHVybiBncmFudCBpdCB0byBvdGhlcnMuICBXaXRob3V0IGEgZ3JhbnQKICAgb3B0aW9uLCB0aGUgcmVjaXBpZW50IGNhbm5vdCBkbyB0aGF0LiAgR3JhbnQgb3B0aW9ucyBjYW5ub3QgYmUgZ3JhbnRlZAogICB0byA8bGl0ZXJhbD5QVUJMSUM8L2xpdGVyYWw+LgogIDwvcGFyYT4KCiAgPHBhcmE+CiAgIFRoZXJlIGlzIG5vIG5lZWQgdG8gZ3JhbnQgcHJpdmlsZWdlcyB0byB0aGUgb3duZXIgb2YgYW4gb2JqZWN0CiAgICh1c3VhbGx5IHRoZSB1c2VyIHRoYXQgY3JlYXRlZCBpdCksCiAgIGFzIHRoZSBvd25lciBoYXMgYWxsIHByaXZpbGVnZXMgYnkgZGVmYXVsdC4gIChUaGUgb3duZXIgY291bGQsCiAgIGhvd2V2ZXIsIGNob29zZSB0byByZXZva2Ugc29tZSBvZiBoaXMgb3duIHByaXZpbGVnZXMgZm9yIHNhZmV0eS4pCiAgIFRoZSByaWdodCB0byBkcm9wIGFuIG9iamVjdCwgb3IgdG8gYWx0ZXIgaXRzIGRlZmluaXRpb24gaW4gYW55IHdheSBpcwogICBub3QgZGVzY3JpYmVkIGJ5IGEgZ3JhbnRhYmxlIHByaXZpbGVnZTsgaXQgaXMgaW5oZXJlbnQgaW4gdGhlIG93bmVyLAogICBhbmQgY2Fubm90IGJlIGdyYW50ZWQgb3IgcmV2b2tlZC4gIFRoZSBvd25lciBpbXBsaWNpdGx5IGhhcyBhbGwgZ3JhbnQKICAgb3B0aW9ucyBmb3IgdGhlIG9iamVjdCwgdG9vLgogIDwvcGFyYT4KCiAgPHBhcmE+CiAgIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBvYmplY3QsIHRoZSBpbml0aWFsIGRlZmF1bHQgcHJpdmlsZWdlcyBtYXkKICAgaW5jbHVkZSBncmFudGluZyBzb21lIHByaXZpbGVnZXMgdG8gPGxpdGVyYWw+UFVCTElDPC9saXRlcmFsPi4KICAgVGhlIGRlZmF1bHQgaXMgbm8gcHVibGljIGFjY2VzcyBmb3IgdGFibGVzLCBzY2hlbWFzLCBhbmQgdGFibGVzcGFjZXM7CiAgIDxsaXRlcmFsPkNPTk5FQ1Q8L2xpdGVyYWw+IHByaXZpbGVnZSBhbmQgPGxpdGVyYWw+VEVNUDwvbGl0ZXJhbD4gdGFibGUgY3JlYXRpb24gcHJpdmlsZWdlCiAgIGZvciBkYXRhYmFzZXM7CiAgIDxsaXRlcmFsPkVYRUNVVEU8L2xpdGVyYWw+IHByaXZpbGVnZSBmb3IgZnVuY3Rpb25zOyBhbmQKICAgPGxpdGVyYWw+VVNBR0U8L2xpdGVyYWw+IHByaXZpbGVnZSBmb3IgbGFuZ3VhZ2VzLgogICBUaGUgb2JqZWN0IG93bmVyIG1heSBvZiBjb3Vyc2UgcmV2b2tlIHRoZXNlIHByaXZpbGVnZXMuICAoRm9yIG1heGltdW0KICAgc2VjdXJpdHksIGlzc3VlIHRoZSA8Y29tbWFuZD5SRVZPS0U8L2NvbW1hbmQ+IGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQKICAgY3JlYXRlcyB0aGUgb2JqZWN0OyB0aGVuIHRoZXJlIGlzIG5vIHdpbmRvdyBpbiB3aGljaCBhbm90aGVyIHVzZXIKICAgbWF5IHVzZSB0aGUgb2JqZWN0LikKICA8L3BhcmE+CgogIDxwYXJhPgogICBUaGUgcG9zc2libGUgcHJpdmlsZWdlcyBhcmU6CgogICA8dmFyaWFibGVsaXN0PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICA8dGVybT5TRUxFQ1Q8L3Rlcm0+CiAgICAgPGxpc3RpdGVtPgogICAgICA8cGFyYT4KICAgICAgIEFsbG93cyA8eHJlZiBsaW5rZW5kPSJzcWwtc2VsZWN0IiBlbmR0ZXJtPSJzcWwtc2VsZWN0LXRpdGxlIj4gZnJvbQogICAgICAgYW55IGNvbHVtbiBvZiB0aGUgc3BlY2lmaWVkIHRhYmxlLCB2aWV3LCBvciBzZXF1ZW5jZS4KICAgICAgIEFsc28gYWxsb3dzIHRoZSB1c2Ugb2YKICAgICAgIDx4cmVmIGxpbmtlbmQ9InNxbC1jb3B5IiBlbmR0ZXJtPSJzcWwtY29weS10aXRsZSI+IFRPLgogICAgICAgVGhpcyBwcml2aWxlZ2UgaXMgYWxzbyBuZWVkZWQgdG8gcmVmZXJlbmNlIGV4aXN0aW5nIGNvbHVtbiB2YWx1ZXMgaW4KICAgICAgIDx4cmVmIGxpbmtlbmQ9InNxbC11cGRhdGUiIGVuZHRlcm09InNxbC11cGRhdGUtdGl0bGUiPiBvcgogICAgICAgPHhyZWYgbGlua2VuZD0ic3FsLWRlbGV0ZSIgZW5kdGVybT0ic3FsLWRlbGV0ZS10aXRsZSI+LgogICAgICAgRm9yIHNlcXVlbmNlcywgdGhpcyBwcml2aWxlZ2UgYWxzbyBhbGxvd3MgdGhlIHVzZSBvZiB0aGUKICAgICAgIDxmdW5jdGlvbj5jdXJydmFsPC9mdW5jdGlvbj4gZnVuY3Rpb24uCiAgICAgIDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CgogICAgPHZhcmxpc3RlbnRyeT4KICAgICA8dGVybT5JTlNFUlQ8L3Rlcm0+CiAgICAgPGxpc3RpdGVtPgogICAgICA8cGFyYT4KICAgICAgIEFsbG93cyA8eHJlZiBsaW5rZW5kPSJzcWwtaW5zZXJ0IiBlbmR0ZXJtPSJzcWwtaW5zZXJ0LXRpdGxlIj4gb2YgYSBuZXcKICAgICAgIHJvdyBpbnRvIHRoZSBzcGVjaWZpZWQgdGFibGUuCiAgICAgICBBbHNvIGFsbG93cyA8eHJlZiBsaW5rZW5kPSJzcWwtY29weSIgZW5kdGVybT0ic3FsLWNvcHktdGl0bGUiPiBGUk9NLgogICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgoKICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgPHRlcm0+VVBEQVRFPC90ZXJtPgogICAgIDxsaXN0aXRlbT4KICAgICAgPHBhcmE+CiAgICAgICBBbGxvd3MgPHhyZWYgbGlua2VuZD0ic3FsLXVwZGF0ZSIgZW5kdGVybT0ic3FsLXVwZGF0ZS10aXRsZSI+IG9mIGFueQogICAgICAgY29sdW1uIG9mIHRoZSBzcGVjaWZpZWQgdGFibGUuCiAgICAgICAoSW4gcHJhY3RpY2UsIGFueSBub250cml2aWFsIDxjb21tYW5kPlVQREFURTwvY29tbWFuZD4gY29tbWFuZCB3aWxsIHJlcXVpcmUKICAgICAgIDxsaXRlcmFsPlNFTEVDVDwvbGl0ZXJhbD4gcHJpdmlsZWdlIGFzIHdlbGwsIHNpbmNlIGl0IG11c3QgcmVmZXJlbmNlIHRhYmxlCiAgICAgICBjb2x1bW5zIHRvIGRldGVybWluZSB3aGljaCByb3dzIHRvIHVwZGF0ZSwgYW5kL29yIHRvIGNvbXB1dGUgbmV3CiAgICAgICB2YWx1ZXMgZm9yIGNvbHVtbnMuKQogICAgICAgPGxpdGVyYWw+U0VMRUNUIC4uLiBGT1IgVVBEQVRFPC9saXRlcmFsPgogICAgICAgYW5kIDxsaXRlcmFsPlNFTEVDVCAuLi4gRk9SIFNIQVJFPC9saXRlcmFsPgogICAgICAgYWxzbyByZXF1aXJlIHRoaXMgcHJpdmlsZWdlLCBpbiBhZGRpdGlvbiB0byB0aGUKICAgICAgIDxsaXRlcmFsPlNFTEVDVDwvbGl0ZXJhbD4gcHJpdmlsZWdlLiAgRm9yIHNlcXVlbmNlcywgdGhpcwogICAgICAgcHJpdmlsZWdlIGFsbG93cyB0aGUgdXNlIG9mIHRoZSA8ZnVuY3Rpb24+bmV4dHZhbDwvZnVuY3Rpb24+IGFuZAogICAgICAgPGZ1bmN0aW9uPnNldHZhbDwvZnVuY3Rpb24+IGZ1bmN0aW9ucy4KICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KCiAgICA8dmFybGlzdGVudHJ5PgogICAgIDx0ZXJtPkRFTEVURTwvdGVybT4KICAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgogICAgICAgQWxsb3dzIDx4cmVmIGxpbmtlbmQ9InNxbC1kZWxldGUiIGVuZHRlcm09InNxbC1kZWxldGUtdGl0bGUiPiBvZiBhIHJvdwogICAgICAgZnJvbSB0aGUgc3BlY2lmaWVkIHRhYmxlLgogICAgICAgKEluIHByYWN0aWNlLCBhbnkgbm9udHJpdmlhbCA8Y29tbWFuZD5ERUxFVEU8L2NvbW1hbmQ+IGNvbW1hbmQgd2lsbCByZXF1aXJlCiAgICAgICA8bGl0ZXJhbD5TRUxFQ1Q8L2xpdGVyYWw+IHByaXZpbGVnZSBhcyB3ZWxsLCBzaW5jZSBpdCBtdXN0IHJlZmVyZW5jZSB0YWJsZQogICAgICAgY29sdW1ucyB0byBkZXRlcm1pbmUgd2hpY2ggcm93cyB0byBkZWxldGUuKQogICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgoKICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgPHRlcm0+UkVGRVJFTkNFUzwvdGVybT4KICAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgogICAgICAgVG8gY3JlYXRlIGEgZm9yZWlnbiBrZXkgY29uc3RyYWludCwgaXQgaXMKICAgICAgIG5lY2Vzc2FyeSB0byBoYXZlIHRoaXMgcHJpdmlsZWdlIG9uIGJvdGggdGhlIHJlZmVyZW5jaW5nIGFuZAogICAgICAgcmVmZXJlbmNlZCB0YWJsZXMuCiAgICAgIDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CgogICAgPHZhcmxpc3RlbnRyeT4KICAgICA8dGVybT5UUklHR0VSPC90ZXJtPgogICAgIDxsaXN0aXRlbT4KICAgICAgPHBhcmE+CiAgICAgICBBbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGEgdHJpZ2dlciBvbiB0aGUgc3BlY2lmaWVkIHRhYmxlLiAgKFNlZSB0aGUKICAgICAgIDx4cmVmIGxpbmtlbmQ9InNxbC1jcmVhdGV0cmlnZ2VyIiBlbmR0ZXJtPSJzcWwtY3JlYXRldHJpZ2dlci10aXRsZSI+IHN0YXRlbWVudC4pCiAgICAgIDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CgogICAgPHZhcmxpc3RlbnRyeT4KICAgICA8dGVybT5DUkVBVEU8L3Rlcm0+CiAgICAgPGxpc3RpdGVtPgogICAgICA8cGFyYT4KICAgICAgIEZvciBkYXRhYmFzZXMsIGFsbG93cyBuZXcgc2NoZW1hcyB0byBiZSBjcmVhdGVkIHdpdGhpbiB0aGUgZGF0YWJhc2UuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICBGb3Igc2NoZW1hcywgYWxsb3dzIG5ldyBvYmplY3RzIHRvIGJlIGNyZWF0ZWQgd2l0aGluIHRoZSBzY2hlbWEuCiAgICAgICBUbyByZW5hbWUgYW4gZXhpc3Rpbmcgb2JqZWN0LCB5b3UgbXVzdCBvd24gdGhlIG9iamVjdCA8ZW1waGFzaXM+YW5kPC9lbXBoYXNpcz4KICAgICAgIGhhdmUgdGhpcyBwcml2aWxlZ2UgZm9yIHRoZSBjb250YWluaW5nIHNjaGVtYS4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgIEZvciB0YWJsZXNwYWNlcywgYWxsb3dzIHRhYmxlcyBhbmQgaW5kZXhlcyB0byBiZSBjcmVhdGVkIHdpdGhpbiB0aGUKICAgICAgIHRhYmxlc3BhY2UsIGFuZCBhbGxvd3MgZGF0YWJhc2VzIHRvIGJlIGNyZWF0ZWQgdGhhdCBoYXZlIHRoZSB0YWJsZXNwYWNlCiAgICAgICBhcyB0aGVpciBkZWZhdWx0IHRhYmxlc3BhY2UuICAoTm90ZSB0aGF0IHJldm9raW5nIHRoaXMgcHJpdmlsZWdlCiAgICAgICB3aWxsIG5vdCBhbHRlciB0aGUgcGxhY2VtZW50IG9mIGV4aXN0aW5nIG9iamVjdHMuKQogICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgoKICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgPHRlcm0+Q09OTkVDVDwvdGVybT4KICAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgogICAgICAgQWxsb3dzIHRoZSB1c2VyIHRvIGNvbm5lY3QgdG8gdGhlIHNwZWNpZmllZCBkYXRhYmFzZS4gIFRoaXMKICAgICAgIHByaXZpbGVnZSBpcyBjaGVja2VkIGF0IGNvbm5lY3Rpb24gc3RhcnR1cCAoaW4gYWRkaXRpb24gdG8gY2hlY2tpbmcKICAgICAgIGFueSByZXN0cmljdGlvbnMgaW1wb3NlZCBieSA8ZmlsZW5hbWU+cGdfaGJhLmNvbmY8L2ZpbGVuYW1lPikuCiAgICAgIDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CgogICAgPHZhcmxpc3RlbnRyeT4KICAgICA8dGVybT5URU1QT1JBUlk8L3Rlcm0+CiAgICAgPHRlcm0+VEVNUDwvdGVybT4KICAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgogICAgICAgQWxsb3dzIHRlbXBvcmFyeSB0YWJsZXMgdG8gYmUgY3JlYXRlZCB3aGlsZSB1c2luZyB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlLgogICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgoKICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgPHRlcm0+RVhFQ1VURTwvdGVybT4KICAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgogICAgICAgQWxsb3dzIHRoZSB1c2Ugb2YgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBhbmQgdGhlIHVzZSBvZiBhbnkKICAgICAgIG9wZXJhdG9ycyB0aGF0IGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2YgdGhlIGZ1bmN0aW9uLiAgVGhpcyBpcwogICAgICAgdGhlIG9ubHkgdHlwZSBvZiBwcml2aWxlZ2UgdGhhdCBpcyBhcHBsaWNhYmxlIHRvIGZ1bmN0aW9ucy4KICAgICAgIChUaGlzIHN5bnRheCB3b3JrcyBmb3IgYWdncmVnYXRlIGZ1bmN0aW9ucywgYXMgd2VsbC4pCiAgICAgIDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CgogICAgPHZhcmxpc3RlbnRyeT4KICAgICA8dGVybT5VU0FHRTwvdGVybT4KICAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgogICAgICAgRm9yIHByb2NlZHVyYWwgbGFuZ3VhZ2VzLCBhbGxvd3MgdGhlIHVzZSBvZiB0aGUgc3BlY2lmaWVkIGxhbmd1YWdlIGZvcgogICAgICAgdGhlIGNyZWF0aW9uIG9mIGZ1bmN0aW9ucyBpbiB0aGF0IGxhbmd1YWdlLiAgVGhpcyBpcyB0aGUgb25seSB0eXBlCiAgICAgICBvZiBwcml2aWxlZ2UgdGhhdCBpcyBhcHBsaWNhYmxlIHRvIHByb2NlZHVyYWwgbGFuZ3VhZ2VzLgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgRm9yIHNjaGVtYXMsIGFsbG93cyBhY2Nlc3MgdG8gb2JqZWN0cyBjb250YWluZWQgaW4gdGhlIHNwZWNpZmllZAogICAgICAgc2NoZW1hIChhc3N1bWluZyB0aGF0IHRoZSBvYmplY3RzJyBvd24gcHJpdmlsZWdlIHJlcXVpcmVtZW50cyBhcmUKICAgICAgIGFsc28gbWV0KS4gIEVzc2VudGlhbGx5IHRoaXMgYWxsb3dzIHRoZSBncmFudGVlIHRvIDxxdW90ZT5sb29rIHVwPC9xdW90ZT4KICAgICAgIG9iamVjdHMgd2l0aGluIHRoZSBzY2hlbWEuICBXaXRob3V0IHRoaXMgcGVybWlzc2lvbiwgaXQgaXMgc3RpbGwKICAgICAgIHBvc3NpYmxlIHRvIHNlZSB0aGUgb2JqZWN0IG5hbWVzLCBlLmcuIGJ5IHF1ZXJ5aW5nIHRoZSBzeXN0ZW0gdGFibGVzLgogICAgICAgQWxzbywgYWZ0ZXIgcmV2b2tpbmcgdGhpcyBwZXJtaXNzaW9uLCBleGlzdGluZyBiYWNrZW5kcyBtaWdodCBoYXZlCiAgICAgICBzdGF0ZW1lbnRzIHRoYXQgaGF2ZSBwcmV2aW91c2x5IHBlcmZvcm1lZCB0aGlzIGxvb2t1cCwgc28gdGhpcyBpcyBub3QKICAgICAgIGEgY29tcGxldGVseSBzZWN1cmUgd2F5IHRvIHByZXZlbnQgb2JqZWN0IGFjY2Vzcy4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgIEZvciBzZXF1ZW5jZXMsIHRoaXMgcHJpdmlsZWdlIGFsbG93cyB0aGUgdXNlIG9mIHRoZQogICAgICAgPGZ1bmN0aW9uPmN1cnJ2YWw8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPm5leHR2YWw8L2Z1bmN0aW9uPiBmdW5jdGlvbnMuCiAgICAgIDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CgogICAgPHZhcmxpc3RlbnRyeT4KICAgICA8dGVybT5BTEwgUFJJVklMRUdFUzwvdGVybT4KICAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgogICAgICAgR3JhbnQgYWxsIG9mIHRoZSBhdmFpbGFibGUgcHJpdmlsZWdlcyBhdCBvbmNlLgogICAgICAgVGhlIDxsaXRlcmFsPlBSSVZJTEVHRVM8L2xpdGVyYWw+IGtleSB3b3JkIGlzIG9wdGlvbmFsIGluCiAgICAgICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+LCB0aG91Z2ggaXQgaXMgcmVxdWlyZWQgYnkKICAgICAgIHN0cmljdCBTUUwuCiAgICAgIDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgIDwvdmFyaWFibGVsaXN0PgoKICAgVGhlIHByaXZpbGVnZXMgcmVxdWlyZWQgYnkgb3RoZXIgY29tbWFuZHMgYXJlIGxpc3RlZCBvbiB0aGUKICAgcmVmZXJlbmNlIHBhZ2Ugb2YgdGhlIHJlc3BlY3RpdmUgY29tbWFuZC4KICA8L3BhcmE+CiA8L3JlZnNlY3QyPgoKIDxyZWZzZWN0MiBpZD0ic3FsLWdyYW50LWRlc2NyaXB0aW9uLXJvbGVzIj4KICA8dGl0bGU+R1JBTlQgb24gUm9sZXM8L3RpdGxlPgoKICA8cGFyYT4KICAgVGhpcyB2YXJpYW50IG9mIHRoZSA8Y29tbWFuZD5HUkFOVDwvY29tbWFuZD4gY29tbWFuZCBncmFudHMgbWVtYmVyc2hpcAogICBpbiBhIHJvbGUgdG8gb25lIG9yIG1vcmUgb3RoZXIgcm9sZXMuICBNZW1iZXJzaGlwIGluIGEgcm9sZSBpcyBzaWduaWZpY2FudAogICBiZWNhdXNlIGl0IGNvbnZleXMgdGhlIHByaXZpbGVnZXMgZ3JhbnRlZCB0byBhIHJvbGUgdG8gZWFjaCBvZiBpdHMKICAgbWVtYmVycy4KICA8L3BhcmE+CgogIDxwYXJhPgogICBJZiA8bGl0ZXJhbD5XSVRIIEFETUlOIE9QVElPTjwvbGl0ZXJhbD4gaXMgc3BlY2lmaWVkLCB0aGUgbWVtYmVyIG1heQogICBpbiB0dXJuIGdyYW50IG1lbWJlcnNoaXAgaW4gdGhlIHJvbGUgdG8gb3RoZXJzLCBhbmQgcmV2b2tlIG1lbWJlcnNoaXAKICAgaW4gdGhlIHJvbGUgYXMgd2VsbC4gIFdpdGhvdXQgdGhlIGFkbWluIG9wdGlvbiwgb3JkaW5hcnkgdXNlcnMgY2Fubm90IGRvCiAgIHRoYXQuICBIb3dldmVyLAogICBkYXRhYmFzZSBzdXBlcnVzZXJzIGNhbiBncmFudCBvciByZXZva2UgbWVtYmVyc2hpcCBpbiBhbnkgcm9sZSB0byBhbnlvbmUuCiAgIFJvbGVzIGhhdmluZyA8bGl0ZXJhbD5DUkVBVEVST0xFPC9saXRlcmFsPiBwcml2aWxlZ2UgY2FuIGdyYW50IG9yIHJldm9rZQogICBtZW1iZXJzaGlwIGluIGFueSByb2xlIHRoYXQgaXMgbm90IGEgc3VwZXJ1c2VyLgogIDwvcGFyYT4KCiAgPHBhcmE+CiAgIFVubGlrZSB0aGUgY2FzZSB3aXRoIHByaXZpbGVnZXMsIG1lbWJlcnNoaXAgaW4gYSByb2xlIGNhbm5vdCBiZSBncmFudGVkCiAgIHRvIDxsaXRlcmFsPlBVQkxJQzwvbGl0ZXJhbD4uICBOb3RlIGFsc28gdGhhdCB0aGlzIGZvcm0gb2YgdGhlIGNvbW1hbmQgZG9lcyBub3QKICAgYWxsb3cgdGhlIG5vaXNlIHdvcmQgPGxpdGVyYWw+R1JPVVA8L2xpdGVyYWw+LgogIDwvcGFyYT4KIDwvcmVmc2VjdDI+CgogPHJlZnNlY3QyIGlkPSJzcWwtZ3JhbnQtZGVzY3JpcHRpb24tcHJvdG9jb2xzIj4KIDx0aXRsZT5HcmFudCBvbiBQcm90b2NvbHM8L3RpdGxlPgoKIDxwYXJhPgogQWZ0ZXIgY3JlYXRpbmcgYSBjdXN0b20gcHJvdG9jb2wsIHNwZWNpZnkgQ1JFQVRFIFRSVVNURUQgUFJPVE9DT0wgdG8gYmUgYWJsZSAKIHRvIGFsbG93aW5nIGFueSB1c2VyIGJlc2lkZXMgdGhlIG93bmVyIHRvIGFjY2VzcyBpdC4gSWYgdGhlIHByb3RvY29sIGlzIG5vdCAKIHRydXN0ZWQsIHlvdSBjYW5ub3QgZ2l2ZSBhbnkgb3RoZXIgdXNlciBwZXJtaXNzaW9uIHRvIHVzZSBpdCB0byByZWFkIG9yIHdyaXRlIGRhdGEuIAogQWZ0ZXIgYSBUUlVTVEVEIHByb3RvY29sIGlzIGNyZWF0ZWQsIHlvdSBjYW4gc3BlY2lmeSB3aGljaCBvdGhlciB1c2VycyBjYW4gCiBhY2Nlc3MgaXQgd2l0aCB0aGUgR1JBTlQgY29tbWFuZC4gCiA8L3BhcmE+CgogPHBhcmE+CiAgVG8gYWxsb3cgYSB1c2VyIHRvIGNyZWF0ZSBhIHJlYWRhYmxlIGV4dGVybmFsIHRhYmxlIHdpdGggYSB0cnVzdGVkIHByb3RvY29sCiA8L3BhcmE+CgogPHBhcmE+IAogIEdSQU5UIFNFTEVDVCBPTiBQUk9UT0NPTCBwcm90b2NvbG5hbWUgVE8gdXNlcm5hbWUKIDwvcGFyYT4KCiA8cGFyYT4KICBUbyBhbGxvdyBhIHVzZXIgdG8gY3JlYXRlIGEgd3JpdGFibGUgZXh0ZXJuYWwgdGFibGUgd2l0aCBhIHRydXN0ZWQgcHJvdG9jb2wKIDwvcGFyYT4KCiA8cGFyYT4KICBHUkFOVCBJTlNFUlQgT04gUFJPVE9DT0wgcHJvdG9jb2xuYW1lIFRPIHVzZXJuYW1lCiA8L3BhcmE+CgogPHBhcmE+CiBUbyBhbGxvdyBhIHVzZXIgdG8gY3JlYXRlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlIGV4dGVybmFsIHRhYmxlIHdpdGggYSB0cnVzdGVkIHByb3RvY29sCiA8L3BhcmE+CgogPHBhcmE+CiBHUkFOVCBBTEwgT04gUFJPVE9DT0wgcHJvdG9jb2xuYW1lIFRPIHVzZXJuYW1lCiA8L3BhcmE+CgogPC9yZWZzZWN0Mj4KIDwvcmVmc2VjdDE+CgoKIDxyZWZzZWN0MSBpZD0iU1FMLUdSQU5ULW5vdGVzIj4KICA8dGl0bGU+Tm90ZXM8L3RpdGxlPgoKICAgPHBhcmE+CiAgICBUaGUgPHhyZWYgbGlua2VuZD0ic3FsLXJldm9rZSIgZW5kdGVybT0ic3FsLXJldm9rZS10aXRsZSI+IGNvbW1hbmQgaXMgdXNlZAogICAgdG8gcmV2b2tlIGFjY2VzcyBwcml2aWxlZ2VzLgogICA8L3BhcmE+CgogICA8cGFyYT4KICAgIFdoZW4gYSBub24tb3duZXIgb2YgYW4gb2JqZWN0IGF0dGVtcHRzIHRvIDxjb21tYW5kPkdSQU5UPC9jb21tYW5kPiBwcml2aWxlZ2VzCiAgICBvbiB0aGUgb2JqZWN0LCB0aGUgY29tbWFuZCB3aWxsIGZhaWwgb3V0cmlnaHQgaWYgdGhlIHVzZXIgaGFzIG5vCiAgICBwcml2aWxlZ2VzIHdoYXRzb2V2ZXIgb24gdGhlIG9iamVjdC4gIEFzIGxvbmcgYXMgc29tZSBwcml2aWxlZ2UgaXMKICAgIGF2YWlsYWJsZSwgdGhlIGNvbW1hbmQgd2lsbCBwcm9jZWVkLCBidXQgaXQgd2lsbCBncmFudCBvbmx5IHRob3NlCiAgICBwcml2aWxlZ2VzIGZvciB3aGljaCB0aGUgdXNlciBoYXMgZ3JhbnQgb3B0aW9ucy4gIFRoZSA8Y29tbWFuZD5HUkFOVCBBTEwKICAgIFBSSVZJTEVHRVM8L2NvbW1hbmQ+IGZvcm1zIHdpbGwgaXNzdWUgYSB3YXJuaW5nIG1lc3NhZ2UgaWYgbm8gZ3JhbnQgb3B0aW9ucyBhcmUKICAgIGhlbGQsIHdoaWxlIHRoZSBvdGhlciBmb3JtcyB3aWxsIGlzc3VlIGEgd2FybmluZyBpZiBncmFudCBvcHRpb25zIGZvcgogICAgYW55IG9mIHRoZSBwcml2aWxlZ2VzIHNwZWNpZmljYWxseSBuYW1lZCBpbiB0aGUgY29tbWFuZCBhcmUgbm90IGhlbGQuCiAgICAoSW4gcHJpbmNpcGxlIHRoZXNlIHN0YXRlbWVudHMgYXBwbHkgdG8gdGhlIG9iamVjdCBvd25lciBhcyB3ZWxsLCBidXQKICAgIHNpbmNlIHRoZSBvd25lciBpcyBhbHdheXMgdHJlYXRlZCBhcyBob2xkaW5nIGFsbCBncmFudCBvcHRpb25zLCB0aGUKICAgIGNhc2VzIGNhbiBuZXZlciBvY2N1ci4pCiAgIDwvcGFyYT4KCiAgIDxwYXJhPgogICAgSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgZGF0YWJhc2Ugc3VwZXJ1c2VycyBjYW4gYWNjZXNzCiAgICBhbGwgb2JqZWN0cyByZWdhcmRsZXNzIG9mIG9iamVjdCBwcml2aWxlZ2Ugc2V0dGluZ3MuICBUaGlzCiAgICBpcyBjb21wYXJhYmxlIHRvIHRoZSByaWdodHMgb2YgPGxpdGVyYWw+cm9vdDwvbGl0ZXJhbD4gaW4gYSBVbml4IHN5c3RlbS4KICAgIEFzIHdpdGggPGxpdGVyYWw+cm9vdDwvbGl0ZXJhbD4sIGl0J3MgdW53aXNlIHRvIG9wZXJhdGUgYXMgYSBzdXBlcnVzZXIKICAgIGV4Y2VwdCB3aGVuIGFic29sdXRlbHkgbmVjZXNzYXJ5LgogICA8L3BhcmE+CgogICA8cGFyYT4KICAgIElmIGEgc3VwZXJ1c2VyIGNob29zZXMgdG8gaXNzdWUgYSA8Y29tbWFuZD5HUkFOVDwvY29tbWFuZD4gb3IgPGNvbW1hbmQ+UkVWT0tFPC9jb21tYW5kPgogICAgY29tbWFuZCwgdGhlIGNvbW1hbmQgaXMgcGVyZm9ybWVkIGFzIHRob3VnaCBpdCB3ZXJlIGlzc3VlZCBieSB0aGUKICAgIG93bmVyIG9mIHRoZSBhZmZlY3RlZCBvYmplY3QuICBJbiBwYXJ0aWN1bGFyLCBwcml2aWxlZ2VzIGdyYW50ZWQgdmlhCiAgICBzdWNoIGEgY29tbWFuZCB3aWxsIGFwcGVhciB0byBoYXZlIGJlZW4gZ3JhbnRlZCBieSB0aGUgb2JqZWN0IG93bmVyLgogICAgKEZvciByb2xlIG1lbWJlcnNoaXAsIHRoZSBtZW1iZXJzaGlwIGFwcGVhcnMgdG8gaGF2ZSBiZWVuIGdyYW50ZWQKICAgIGJ5IHRoZSBjb250YWluaW5nIHJvbGUgaXRzZWxmLikKICAgPC9wYXJhPgoKICAgPHBhcmE+CiAgICA8Y29tbWFuZD5HUkFOVDwvY29tbWFuZD4gYW5kIDxjb21tYW5kPlJFVk9LRTwvY29tbWFuZD4gY2FuIGFsc28gYmUgZG9uZSBieSBhIHJvbGUKICAgIHRoYXQgaXMgbm90IHRoZSBvd25lciBvZiB0aGUgYWZmZWN0ZWQgb2JqZWN0LCBidXQgaXMgYSBtZW1iZXIgb2YgdGhlIHJvbGUKICAgIHRoYXQgb3ducyB0aGUgb2JqZWN0LCBvciBpcyBhIG1lbWJlciBvZiBhIHJvbGUgdGhhdCBob2xkcyBwcml2aWxlZ2VzCiAgICA8bGl0ZXJhbD5XSVRIIEdSQU5UIE9QVElPTjwvbGl0ZXJhbD4gb24gdGhlIG9iamVjdC4gIEluIHRoaXMgY2FzZSB0aGUKICAgIHByaXZpbGVnZXMgd2lsbCBiZSByZWNvcmRlZCBhcyBoYXZpbmcgYmVlbiBncmFudGVkIGJ5IHRoZSByb2xlIHRoYXQKICAgIGFjdHVhbGx5IG93bnMgdGhlIG9iamVjdCBvciBob2xkcyB0aGUgcHJpdmlsZWdlcwogICAgPGxpdGVyYWw+V0lUSCBHUkFOVCBPUFRJT048L2xpdGVyYWw+LiAgRm9yIGV4YW1wbGUsIGlmIHRhYmxlCiAgICA8bGl0ZXJhbD50MTwvbGl0ZXJhbD4gaXMgb3duZWQgYnkgcm9sZSA8bGl0ZXJhbD5nMTwvbGl0ZXJhbD4sIG9mIHdoaWNoIHJvbGUKICAgIDxsaXRlcmFsPnUxPC9saXRlcmFsPiBpcyBhIG1lbWJlciwgdGhlbiA8bGl0ZXJhbD51MTwvbGl0ZXJhbD4gY2FuIGdyYW50IHByaXZpbGVnZXMKICAgIG9uIDxsaXRlcmFsPnQxPC9saXRlcmFsPiB0byA8bGl0ZXJhbD51MjwvbGl0ZXJhbD4sIGJ1dCB0aG9zZSBwcml2aWxlZ2VzIHdpbGwgYXBwZWFyCiAgICB0byBoYXZlIGJlZW4gZ3JhbnRlZCBkaXJlY3RseSBieSA8bGl0ZXJhbD5nMTwvbGl0ZXJhbD4uICBBbnkgb3RoZXIgbWVtYmVyCiAgICBvZiByb2xlIDxsaXRlcmFsPmcxPC9saXRlcmFsPiBjb3VsZCByZXZva2UgdGhlbSBsYXRlci4KICAgPC9wYXJhPgoKICAgPHBhcmE+CiAgICBJZiB0aGUgcm9sZSBleGVjdXRpbmcgPGNvbW1hbmQ+R1JBTlQ8L2NvbW1hbmQ+IGhvbGRzIHRoZSByZXF1aXJlZCBwcml2aWxlZ2VzCiAgICBpbmRpcmVjdGx5IHZpYSBtb3JlIHRoYW4gb25lIHJvbGUgbWVtYmVyc2hpcCBwYXRoLCBpdCBpcyB1bnNwZWNpZmllZAogICAgd2hpY2ggY29udGFpbmluZyByb2xlIHdpbGwgYmUgcmVjb3JkZWQgYXMgaGF2aW5nIGRvbmUgdGhlIGdyYW50LiAgSW4gc3VjaAogICAgY2FzZXMgaXQgaXMgYmVzdCBwcmFjdGljZSB0byB1c2UgPGNvbW1hbmQ+U0VUIFJPTEU8L2NvbW1hbmQ+IHRvIGJlY29tZSB0aGUKICAgIHNwZWNpZmljIHJvbGUgeW91IHdhbnQgdG8gZG8gdGhlIDxjb21tYW5kPkdSQU5UPC9jb21tYW5kPiBhcy4KICAgPC9wYXJhPgoKICAgPHBhcmE+CiAgICBHcmFudGluZyBwZXJtaXNzaW9uIG9uIGEgdGFibGUgZG9lcyBub3QgYXV0b21hdGljYWxseSBleHRlbmQgCiAgICBwZXJtaXNzaW9ucyB0byBhbnkgc2VxdWVuY2VzIHVzZWQgYnkgdGhlIHRhYmxlLCBpbmNsdWRpbmcgCiAgICBzZXF1ZW5jZXMgdGllZCB0byA8dHlwZT5TRVJJQUw8L3R5cGU+IGNvbHVtbnMuICBQZXJtaXNzaW9ucyBvbiAKICAgIHNlcXVlbmNlIG11c3QgYmUgc2V0IHNlcGFyYXRlbHkuCiAgIDwvcGFyYT4KCiAgIDxwYXJhPgogICAgQ3VycmVudGx5LCA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRvZXMgbm90IHN1cHBvcnQKICAgIGdyYW50aW5nIG9yIHJldm9raW5nIHByaXZpbGVnZXMgZm9yIGluZGl2aWR1YWwgY29sdW1ucyBvZiBhIHRhYmxlLgogICAgT25lIHBvc3NpYmxlIHdvcmthcm91bmQgaXMgdG8gY3JlYXRlIGEgdmlldyBoYXZpbmcganVzdCB0aGUgZGVzaXJlZAogICAgY29sdW1ucyBhbmQgdGhlbiBncmFudCBwcml2aWxlZ2VzIHRvIHRoYXQgdmlldy4KICAgPC9wYXJhPgoKICAgPHBhcmE+CiAgICBVc2UgPHhyZWYgbGlua2VuZD0iYXBwLXBzcWwiPidzIDxjb21tYW5kPlx6PC9jb21tYW5kPiBjb21tYW5kCiAgICB0byBvYnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgZXhpc3RpbmcgcHJpdmlsZWdlcywgZm9yIGV4YW1wbGU6Cjxwcm9ncmFtbGlzdGluZz4KPSZndDsgXHogbXl0YWJsZQoKICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXNzIHByaXZpbGVnZXMgZm9yIGRhdGFiYXNlICJsdXNpdGFuaWEiCiBTY2hlbWEgfCAgTmFtZSAgIHwgVHlwZSAgfCAgICAgICAgICAgICAgICAgICAgIEFjY2VzcyBwcml2aWxlZ2VzCi0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBwdWJsaWMgfCBteXRhYmxlIHwgdGFibGUgfCB7bWlyaWFtPWFyd2R4dC9taXJpYW0sPXIvbWlyaWFtLCJncm91cCB0b2Rvcz1hcncvbWlyaWFtIn0KKDEgcm93KQo8L3Byb2dyYW1saXN0aW5nPgogICAgVGhlIGVudHJpZXMgc2hvd24gYnkgPGNvbW1hbmQ+XHo8L2NvbW1hbmQ+IGFyZSBpbnRlcnByZXRlZCB0aHVzOgo8cHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgICAgPXh4eHggLS0gcHJpdmlsZWdlcyBncmFudGVkIHRvIFBVQkxJQwogICAgICAgICB1bmFtZT14eHh4IC0tIHByaXZpbGVnZXMgZ3JhbnRlZCB0byBhIHVzZXIKICAgZ3JvdXAgZ25hbWU9eHh4eCAtLSBwcml2aWxlZ2VzIGdyYW50ZWQgdG8gYSBncm91cAoKICAgICAgICAgICAgICAgICAgciAtLSBTRUxFQ1QgKCJyZWFkIikKICAgICAgICAgICAgICAgICAgdyAtLSBVUERBVEUgKCJ3cml0ZSIpCiAgICAgICAgICAgICAgICAgIGEgLS0gSU5TRVJUICgiYXBwZW5kIikKICAgICAgICAgICAgICAgICAgZCAtLSBERUxFVEUKICAgICAgICAgICAgICAgICAgeCAtLSBSRUZFUkVOQ0VTCiAgICAgICAgICAgICAgICAgIHQgLS0gVFJJR0dFUgogICAgICAgICAgICAgICAgICBYIC0tIEVYRUNVVEUKICAgICAgICAgICAgICAgICAgVSAtLSBVU0FHRQogICAgICAgICAgICAgICAgICBDIC0tIENSRUFURQogICAgICAgICAgICAgICAgICBjIC0tIENPTk5FQ1QKICAgICAgICAgICAgICAgICAgVCAtLSBURU1QT1JBUlkKICAgICAgICAgICAgIGFyd2R4dCAtLSBBTEwgUFJJVklMRUdFUyAoZm9yIHRhYmxlcykKICAgICAgICAgICAgICAgICAgKiAtLSBncmFudCBvcHRpb24gZm9yIHByZWNlZGluZyBwcml2aWxlZ2UKCiAgICAgICAgICAgICAgL3l5eXkgLS0gdXNlciB3aG8gZ3JhbnRlZCB0aGlzIHByaXZpbGVnZQo8L3Byb2dyYW1saXN0aW5nPgoKICAgIFRoZSBhYm92ZSBleGFtcGxlIGRpc3BsYXkgd291bGQgYmUgc2VlbiBieSB1c2VyIDxsaXRlcmFsPm1pcmlhbTwvbGl0ZXJhbD4gYWZ0ZXIKICAgIGNyZWF0aW5nIHRhYmxlIDxsaXRlcmFsPm15dGFibGU8L2xpdGVyYWw+IGFuZCBkb2luZwoKPHByb2dyYW1saXN0aW5nPgpHUkFOVCBTRUxFQ1QgT04gbXl0YWJsZSBUTyBQVUJMSUM7CkdSQU5UIFNFTEVDVCwgVVBEQVRFLCBJTlNFUlQgT04gbXl0YWJsZSBUTyBHUk9VUCB0b2RvczsKPC9wcm9ncmFtbGlzdGluZz4KICAgPC9wYXJhPgoKICAgPHBhcmE+CiAgIElmIHRoZSA8cXVvdGU+QWNjZXNzIHByaXZpbGVnZXM8L3F1b3RlPiBjb2x1bW4gaXMgZW1wdHkgZm9yIGEgZ2l2ZW4gb2JqZWN0LAppdCBtZWFucyB0aGUgb2JqZWN0IGhhcyBkZWZhdWx0IHByaXZpbGVnZXMgKHRoYXQgaXMsIGl0cyBwcml2aWxlZ2VzIGNvbHVtbgppcyBudWxsKS4gIERlZmF1bHQgcHJpdmlsZWdlcyBhbHdheXMgaW5jbHVkZSBhbGwgcHJpdmlsZWdlcyBmb3IgdGhlIG93bmVyLAphbmQgbWF5IGluY2x1ZGUgc29tZSBwcml2aWxlZ2VzIGZvciA8bGl0ZXJhbD5QVUJMSUM8L2xpdGVyYWw+IGRlcGVuZGluZyBvbiB0aGUKb2JqZWN0IHR5cGUsIGFzIGV4cGxhaW5lZCBhYm92ZS4gIFRoZSBmaXJzdCA8Y29tbWFuZD5HUkFOVDwvY29tbWFuZD4gb3IKPGNvbW1hbmQ+UkVWT0tFPC9jb21tYW5kPiBvbiBhbiBvYmplY3QKd2lsbCBpbnN0YW50aWF0ZSB0aGUgZGVmYXVsdCBwcml2aWxlZ2VzIChwcm9kdWNpbmcsIGZvciBleGFtcGxlLAo8bGl0ZXJhbD57bWlyaWFtPWFyd2R4dC9taXJpYW19PC9saXRlcmFsPikgYW5kIHRoZW4gbW9kaWZ5IHRoZW0gcGVyIHRoZQpzcGVjaWZpZWQgcmVxdWVzdC4KICAgPC9wYXJhPgoKICAgPHBhcmE+CiAgICBOb3RpY2UgdGhhdCB0aGUgb3duZXIncyBpbXBsaWNpdCBncmFudCBvcHRpb25zIGFyZSBub3QgbWFya2VkIGluIHRoZQogICAgYWNjZXNzIHByaXZpbGVnZXMgZGlzcGxheS4gIEEgPGxpdGVyYWw+KjwvbGl0ZXJhbD4gd2lsbCBhcHBlYXIgb25seSB3aGVuCiAgICBncmFudCBvcHRpb25zIGhhdmUgYmVlbiBleHBsaWNpdGx5IGdyYW50ZWQgdG8gc29tZW9uZS4KICAgPC9wYXJhPgogPC9yZWZzZWN0MT4KCiA8cmVmc2VjdDEgaWQ9InNxbC1ncmFudC1leGFtcGxlcyI+CiAgPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KCiAgPHBhcmE+CiAgIEdyYW50IGluc2VydCBwcml2aWxlZ2UgdG8gYWxsIHVzZXJzIG9uIHRhYmxlIDxsaXRlcmFsPmZpbG1zPC9saXRlcmFsPjoKCjxwcm9ncmFtbGlzdGluZz4KR1JBTlQgSU5TRVJUIE9OIGZpbG1zIFRPIFBVQkxJQzsKPC9wcm9ncmFtbGlzdGluZz4KICA8L3BhcmE+CgogIDxwYXJhPgogICBHcmFudCBhbGwgYXZhaWxhYmxlIHByaXZpbGVnZXMgdG8gdXNlciA8bGl0ZXJhbD5tYW51ZWw8L2xpdGVyYWw+IG9uIHZpZXcKICAgPGxpdGVyYWw+a2luZHM8L2xpdGVyYWw+OgoKPHByb2dyYW1saXN0aW5nPgpHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiBraW5kcyBUTyBtYW51ZWw7CjwvcHJvZ3JhbWxpc3Rpbmc+CgogICBOb3RlIHRoYXQgd2hpbGUgdGhlIGFib3ZlIHdpbGwgaW5kZWVkIGdyYW50IGFsbCBwcml2aWxlZ2VzIGlmIGV4ZWN1dGVkIGJ5IGEKICAgc3VwZXJ1c2VyIG9yIHRoZSBvd25lciBvZiA8bGl0ZXJhbD5raW5kczwvbGl0ZXJhbD4sIHdoZW4gZXhlY3V0ZWQgYnkgc29tZW9uZQogICBlbHNlIGl0IHdpbGwgb25seSBncmFudCB0aG9zZSBwZXJtaXNzaW9ucyBmb3Igd2hpY2ggdGhlIHNvbWVvbmUgZWxzZSBoYXMKICAgZ3JhbnQgb3B0aW9ucy4KICA8L3BhcmE+CgogIDxwYXJhPgogICBHcmFudCBtZW1iZXJzaGlwIGluIHJvbGUgPGxpdGVyYWw+YWRtaW5zPC9saXRlcmFsPiB0byB1c2VyIDxsaXRlcmFsPmpvZTwvbGl0ZXJhbD46Cgo8cHJvZ3JhbWxpc3Rpbmc+CkdSQU5UIGFkbWlucyBUTyBqb2U7CjwvcHJvZ3JhbWxpc3Rpbmc+CiAgPC9wYXJhPgogPC9yZWZzZWN0MT4KCiA8cmVmc2VjdDEgaWQ9InNxbC1ncmFudC1jb21wYXRpYmlsaXR5Ij4KICA8dGl0bGU+Q29tcGF0aWJpbGl0eTwvdGl0bGU+CgogICA8cGFyYT4KICAgIEFjY29yZGluZyB0byB0aGUgU1FMIHN0YW5kYXJkLCB0aGUgPGxpdGVyYWw+UFJJVklMRUdFUzwvbGl0ZXJhbD4KICAgIGtleSB3b3JkIGluIDxsaXRlcmFsPkFMTCBQUklWSUxFR0VTPC9saXRlcmFsPiBpcyByZXF1aXJlZC4gIFRoZQogICAgU1FMIHN0YW5kYXJkIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyB0aGUgcHJpdmlsZWdlcyBvbiBtb3JlIHRoYW4KICAgIG9uZSBvYmplY3QgcGVyIGNvbW1hbmQuCiAgIDwvcGFyYT4KCiAgIDxwYXJhPgogICAgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBhbGxvd3MgYW4gb2JqZWN0IG93bmVyIHRvIHJldm9rZSBoaXMKICAgIG93biBvcmRpbmFyeSBwcml2aWxlZ2VzOiBmb3IgZXhhbXBsZSwgYSB0YWJsZSBvd25lciBjYW4gbWFrZSB0aGUgdGFibGUKICAgIHJlYWQtb25seSB0byBoaW1zZWxmIGJ5IHJldm9raW5nIGhpcyBvd24gSU5TRVJULCBVUERBVEUsIGFuZCBERUxFVEUKICAgIHByaXZpbGVnZXMuICBUaGlzIGlzIG5vdCBwb3NzaWJsZSBhY2NvcmRpbmcgdG8gdGhlIFNRTCBzdGFuZGFyZC4gIFRoZQogICAgcmVhc29uIGlzIHRoYXQgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiB0cmVhdHMgdGhlIG93bmVyJ3MKICAgIHByaXZpbGVnZXMgYXMgaGF2aW5nIGJlZW4gZ3JhbnRlZCBieSB0aGUgb3duZXIgdG8gaGltc2VsZjsgdGhlcmVmb3JlIGhlCiAgICBjYW4gcmV2b2tlIHRoZW0gdG9vLiAgSW4gdGhlIFNRTCBzdGFuZGFyZCwgdGhlIG93bmVyJ3MgcHJpdmlsZWdlcyBhcmUKICAgIGdyYW50ZWQgYnkgYW4gYXNzdW1lZCBlbnRpdHkgPHF1b3RlPl9TWVNURU08L3F1b3RlPi4gIE5vdCBiZWluZwogICAgPHF1b3RlPl9TWVNURU08L3F1b3RlPiwgdGhlIG93bmVyIGNhbm5vdCByZXZva2UgdGhlc2UgcmlnaHRzLgogICA8L3BhcmE+CgogICA8cGFyYT4KICAgIFRoZSBTUUwgc3RhbmRhcmQgYWxsb3dzIHNldHRpbmcgcHJpdmlsZWdlcyBmb3IgaW5kaXZpZHVhbCBjb2x1bW5zCiAgICB3aXRoaW4gYSB0YWJsZToKCjxzeW5vcHNpcz4KR1JBTlQgPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnByaXZpbGVnZXM8L3JlcGxhY2VhYmxlPgogICAgT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnRhYmxlPC9yZXBsYWNlYWJsZT4gWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5jb2x1bW48L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgXSBbLCAuLi5dCiAgICBUTyB7IFBVQkxJQyB8IDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj51c2VybmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gfSBbIFdJVEggR1JBTlQgT1BUSU9OIF0KPC9zeW5vcHNpcz4KICAgPC9wYXJhPgoKICAgPHBhcmE+CiAgICBUaGUgU1FMIHN0YW5kYXJkIHByb3ZpZGVzIGZvciBhIDxsaXRlcmFsPlVTQUdFPC9saXRlcmFsPiBwcml2aWxlZ2UKICAgIG9uIG90aGVyIGtpbmRzIG9mIG9iamVjdHM6IGNoYXJhY3RlciBzZXRzLCBjb2xsYXRpb25zLAogICAgdHJhbnNsYXRpb25zLCBkb21haW5zLgogICA8L3BhcmE+CgogICA8cGFyYT4KICAgIFByaXZpbGVnZXMgb24gZGF0YWJhc2VzLCB0YWJsZXNwYWNlcywgc2NoZW1hcywgYW5kIGxhbmd1YWdlcyBhcmUKICAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZXh0ZW5zaW9ucy4KICAgPC9wYXJhPgogPC9yZWZzZWN0MT4KCgogPHJlZnNlY3QxPgogIDx0aXRsZT5TZWUgQWxzbzwvdGl0bGU+CgogIDxzaW1wYXJhPgogICA8eHJlZiBsaW5rZW5kPSJzcWwtcmV2b2tlIiBlbmR0ZXJtPSJzcWwtcmV2b2tlLXRpdGxlIj4KICA8L3NpbXBhcmE+CiA8L3JlZnNlY3QxPgoKPC9yZWZlbnRyeT4K