CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luZG93cyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tCgpUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgZmlsZXMgcmVxdWlyZWQgdG8gYnVpbGQgdGhpcyBzb2Z0d2FyZSBvbiB0aGUKbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm0uCgpBcyBhIHJ1bGUgb2YgdGh1bWIsIHRoZSByb290IG9mIHRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGZpbGVzIG5lZWRlZAp0byBidWlsZCB0aGUgbGlicmFyeSB1c2luZyB0aGUgY29tbWFuZC1saW5lIHRvb2xzLCB3aGlsZSB2YXJpb3VzCnN1YmRpcmVjdG9yaWVzIGNvbnRhaW4gcHJvamVjdCBmaWxlcyBmb3IgdmFyaW91cyBJREVzLgoKCiAgMS4gQnVpbGRpbmcgZnJvbSB0aGUgY29tbWFuZC1saW5lCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGlzIGlzIHRoZSBlYXNpZXN0LCBwcmVmZXJyZWQgYW5kIGN1cnJlbnRseSBzdXBwb3J0ZWQgbWV0aG9kLiAKCkluIG9yZGVyIHRvIGJ1aWxkIGZyb20gdGhlIGNvbW1hbmQtbGluZSB5b3UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdAp5b3VyIGNvbXBpbGVyIHdvcmtzIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gVGhpcyBpcyBub3QgYWx3YXlzIHRoZQpjYXNlLCBvZnRlbiB0aGUgcmVxdWlyZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBtaXNzaW5nLiBJZiB5b3UgYXJlCm5vdCBzdXJlLCB0ZXN0IGlmIHRoaXMgd29ya3MgZmlyc3QuIElmIGl0IGRvZXNuJ3QsIHlvdSB3aWxsIGZpcnN0IGhhdmUKdG8gY29uZmlndXJlIHlvdXIgY29tcGlsZXIgc3VpdGUgdG8gcnVuIGZyb20gdGhlIGNvbW1hbmQtbGluZSAtIHBsZWFzZQpyZWZlciB0byB5b3VyIGNvbXBpbGVyJ3MgZG9jdW1lbnRhdGlvbiByZWdhcmRpbmcgdGhhdC4KClRoZSBmaXJzdCB0aGluZyB5b3Ugd2FudCB0byBkbyBpcyBjb25maWd1cmUgdGhlIHNvdXJjZS4gWW91IGNhbiBoYXZlCnRoZSBjb25maWd1cmF0aW9uIHNjcmlwdCBkbyB0aGlzIGF1dG9tYXRpY2FsbHkgZm9yIHlvdS4gVGhlCmNvbmZpZ3VyYXRpb24gc2NyaXB0IGlzIHdyaXR0ZW4gaW4gSlNjcmlwdCwgYSBNaWNyb3NvZnQncwppbXBsZW1lbnRhdGlvbiBvZiB0aGUgRUNNQSBzY3JpcHRpbmcgbGFuZ3VhZ2UuIEFsbW9zdCBldmVyeSBXaW5kb3dzCm1hY2hpbmUgY2FuIGV4ZWN1dGUgdGhpcyB0aHJvdWdoIHRoZSBXaW5kb3dzIFNjcmlwdGluZyBIb3N0LiBJZiB5b3VyCnN5c3RlbSBsYWNrcyB0aGUgYWJpbGl0eSB0byBleGVjdXRlIEpTY3JpcHQgZm9yIHNvbWUgcmVhc29uLCB5b3UgbXVzdApwZXJmb3JtIHRoZSBjb25maWd1cmF0aW9uIG1hbnVhbGx5LgoKVGhlIHNlY29uZCBzdGVwIGlzIGNvbXBpbGluZyB0aGUgc291cmNlIGFuZCwgb3B0aW9uYWxseSwgaW5zdGFsbGluZyBpdAp0byB0aGUgbG9jYXRpb24gb2YgeW91ciBjaG9vc2luZy4KCgogIDEuMSBDb25maWd1cmluZyB0aGUgc291cmNlIGF1dG9tYXRpY2FsbHkKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGUgY29uZmlndXJhdGlvbiBzY3JpcHQgYWNjZXB0cyBudW1lcm91cyBvcHRpb25zLiBTb21lIG9mIHRoZXNlCmFmZmVjdCBmZWF0dXJlcyB3aGljaCB3aWxsIGJlIGF2YWlsYWJsZSBpbiB0aGUgY29tcGlsZWQgc29mdHdhcmUsCm90aGVycyBhZmZlY3QgdGhlIHdheSB0aGUgc29mdHdhcmUgaXMgYnVpbHQgYW5kIGluc3RhbGxlZC4gVG8gc2VlIGEKZnVsbCBsaXN0IG9mIG9wdGlvbnMgc3VwcG9ydGVkIGJ5IHRoZSBjb25maWd1cmF0aW9uIHNjcmlwdCwgcnVuCgogIGNzY3JpcHQgY29uZmlndXJlLmpzIGhlbHAKCmZyb20gdGhlIHdpbjMyIHN1YmRpcmVjdG9yeS4gVGhlIGNvbmZpZ3VyYXRpb24gc2NyaXB0IHdpbGwgcHJlc2VudCB5b3UKdGhlIG9wdGlvbnMgaXQgYWNjZXB0cyBhbmQgZ2l2ZSBhIGJpcmVmIGV4cGxhbmF0aW9uIG9mIHRoZXNlLiBJbiBldmVyeQpjYXNlIHlvdSB3aWxsIGhhdmUgdHdvIHNldHMgb2Ygb3B0aW9ucy4gVGhlIGZpcnN0IHNldCBpcyBzcGVjaWZpYyB0bwp0aGUgc29mdHdhcmUgeW91IGFyZSBidWlsZGluZyBhbmQgdGhlIHNlY29uZCBvbmUgaXMgc3BlY2lmaWMgdG8gdGhlCldpbmRvd3MgcG9ydC4KCk9uY2UgeW91IGhhdmUgZGVjaWRlZCB3aGljaCBvcHRpb25zIHN1aXQgeW91LCBydW4gdGhlIHNjcmlwdCB3aXRoIHRoYXQKb3B0aW9ucy4gSGVyZSBpcyBhbiBleGFtcGxlOgoKICBjc2NyaXB0IGNvbmZpZ3VyZS5qcyBwcmVmaXg9Yzpcb3B0IGluY2x1ZGU9Yzpcb3B0XGluY2x1ZGUgCiAgICBsaWI9Yzpcb3B0XGxpYiBkZWJ1Zz15ZXMKClRoZSBwcmV2aW91cyBleGFtcGxlIHdpbGwgY29uZmlndXJlIHRoZSBwcm9jZXNzIHRvIGluc3RhbGwgdGhlIGxpYnJhcnkKaW4gYzpcb3B0LCB1c2UgYzpcb3B0XGluY2x1ZGUgYW5kIGM6XG9wdFxsaWIgYXMgYWRkaXRpb25hbCBzZWFyY2gKcGF0aHMgZm9yIHRoZSBjb21waWxlciBhbmQgdGhlIGxpbmtlciBhbmQgYnVpbGQgZXhlY3V0YWJsZXMgd2l0aCBkZWJ1ZwpzeW1ib2xzLgoKTm90ZTogUGxlYXNlIGRvIG5vdCB1c2UgcGF0aCBuYW1lcyB3aGljaCBjb250YWluIHNwYWNlcy4gVGhpcyB3aWxsCmZhaWwuIEFsbG93aW5nIHRoaXMgd291bGQgcmVxdWlyZSBtZSB0byBwdXQgYWxtb3N0IGV2ZXJ5dGhpbmcgaW4gdGhlCk1ha2VmaWxlIGluIHF1b3RhcyBhbmQgdGhhdCBsb29rcyBxdWl0ZSB1Z2x5IHdpdGggbXkKc3ludGF4LWhpZ2hsaWdodGluZyBlbmdpbmUuIElmIHlvdSBhYnNvbHV0ZWx5IG11c3QgdXNlIHNwYWNlcyBpbiBwYXRocwpzZW5kIG1lIGFuIGVtYWlsIGFuZCB0ZWxsIG1lIHdoeS4gSWYgdGhlcmUgYXJlIGVub3VnaCBvZiB5b3Ugb3V0IHRoZXJlCndobyBuZWVkIHRoaXMsIG9yIGlmIGEgc2luZ2xlIG9uZSBoYXMgYSB2ZXJ5IGdvb2QgcmVhc29uLCBJIHdpbGwKbW9kaWZ5IHRoZSBNYWtlZmlsZSB0byBhbGxvdyBzcGFjZXMgaW4gcGF0aHMuCgoKICAxLjIgKE5vdCkgQ29uZmlndXJpbmcgdGhlIHNvdXJjZSBtYW51YWxseQogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGUgbWFudWFsIGNvbmZpZ3VyYXRpb24gaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgd291bGQKc3VnZ2VzdCByYXRoZXIgdG8gZ2V0IGEgSlNjcmlwdCBlbmdpbmUgYW5kIGxldCB0aGUgY29uZmlndXJlIHNjcmlwdCBkbwppdCBmb3IgeW91LiBUaGlzIHByb2Nlc3MgaW52b2x2ZXMgZWRpdGluZyB0aGUgYXByb3ByaWF0ZSBNYWtlZmlsZSB0bwpzdWl0IHlvdXIgbmVlZHMsIGFzIHdlbGwgYXMgbWFudWFsbHkgZ2VuZXJhdGluZyBjZXJ0YWluICouaCBmaWxlcyBmcm9tCnRoZWlyICouaC5pbiBzb3VyY2VzLgoKSWYgeW91IHJlYWxseSBoYXZlIG5vIGlkZWEgd2hhdCBJIGFtIHRhbGtpbmcgYWJvdXQgYW5kIGFzayB5b3Vyc2VsZgp3aGF0IGluIEdvZHMgbmFtZSBkbyBJIG1lYW4gd2l0aCAnKi5oIGZpbGVzIGFuZCB0aGVpciAqLmguaW4gc291cmNlcycsCnRoZW4geW91IHJlYWxseSBzaG91bGQgZG8gYW4gYXV0b21hdGljIGNvbmZpZ3VyYXRpb24uIFdoaWNoIGZpbGVzIG11c3QKYmUgZ2VuZXJhdGVkIGFuZCB3aGF0IG5lZWRzIHRvIGJlIGRvbmUgd2l0aCB0aGVpciBzb3VyY2VzIGluIG9yZGVyIHRvCmdlbmVyYXRlIHRoZW0gaXMgc29tZXRoaW5nIHBlb3BsZSB3aG8gaGF2ZSBidWlsdCB0aGlzIHNvZnR3YXJlIGJlZm9yZQphbGxyZWFkeSBrbm93LiBZb3Ugd2lsbCBub3QgZmluZCBhbnkgZXhwbGFuYXRpb25zIGZvciB0aGF0CmhlcmUuIFBsZWFzZSBjb25maWd1cmUgdGhlIHNvdXJjZSBtYW51YWxseSBvbmx5IGlmIHlvdSBhbGxyZWFkeSBrbm93CndoYXQgeW91IG11c3QgZG8uIE90aGVyd2lzZSwgeW91IGhhdmUgdGhlIGNob2ljZSBvZiBlaXRoZXIgZ2V0dGluZyBhCnByZWNvbXBpbGVkIGJpbmFyeSBkaXN0cmlidXRpb24sIG9yIHBlcmZvcm1pbmcgdGhlIGF1dG9tYXRpYwpjb25maWd1cmF0aW9uLgoKCiAgMS4zIENvbXBpbGluZwogIC0tLS0tLS0tLS0tLS0KCkFmdGVyIHRoZSBjb25maWd1cmF0aW9uIHN0YWdlIGhhcyBiZWVuIGNvbXBsZXRlZCwgeW91IHdhbnQgdG8gYnVpbGQKdGhlIHNvZnR3YXJlLiBZb3Ugd2lsbCBoYXZlIHRvIHVzZSB0aGUgbWFrZSB0b29sIHdoaWNoIGNvbWVzIHdpdGgKeW91ciBjb21waWxlci4gSWYgeW91LCBmb3IgZXhhbXBsZSwgY29uZmlndXJlZCB0aGUgc291cmNlIHRvIGJ1aWxkCndpdGggTWljcm9zb2Z0J3MgTVNWQyBjb21waWxlciwgeW91IHdvdWxkIHVzZSB0aGUgTk1BS0UgdXRpbGl0eS4gSWYK/W91IGNvbmZpZ3VyZWQgaXQgdG8gYnVpbGQgd2l0aCBHTlUgQyBjb21waWxlciwgbWluZ3cgZWRpdGlvbiwgeW91CndvdWxkIHVzZSB0aGUgR05VIG1ha2UuIEFzc3VtaW5nIHlvdSB1c2UgTVNWQywgdHlwZQoKICBubWFrZQoKaW4gdGhlIHdpbjMyIHN1YmRpcmVjdG9yeS4gV2hlbiB0aGUgYnVpbGRpbmcgY29tcGxldGVzLCB5b3Ugd2lsbCBmaW5kCnRoZSBleGVjdXRhYmxlIGZpbGVzIGluIHdpbjMyXGJpbmFyaWVzIGRpcmVjdG9yeS4KIApZb3UgY2FuIGluc3RhbGwgdGhlIHNvZnR3YXJlIGludG8gdGhlIGRpcmVjdG9yeSB5b3Ugc3BlY2lmaWVkIHRvIHRoZQpjb25maWd1cmUgc2NyaXB0IGR1cmluZyB0aGUgY29uZmlndXJlIHN0YWdlIGJ5IHR5cGluZwoKICBubWFrZSBpbnN0YWxsCgpUaGF0IHdvdWxkIGJlIGl0LCBlbmpveS4KCgogIDIuIEJ1aWxkaW5nIHdpdGggdGhlIElERQogID09PT09PT09PT09PT09PT09PT09PT09PQoKRWFjaCBzdXBwb3J0ZWQgSURFIGhhcyBpdHMgcHJvamVjdCBmaWxlcyBwbGFjZWQgaW4gYSBzdWJkaXJlY3Rvcnkgb2YKd2luMzIuIElmIHlvdSB1c2UgYSBwYXJ0aWN1bGFyIElERSwgeW91IHNob3VsZCBiZSBhYmxlIHRvCmluc3RpbmN0aXZlbHkgcmVjb2duaXNlIGl0cyBwcm9qZWN0IGZpbGVzLiBXaGVuIHlvdSBoYXZlIGZvdW5kIHlvdXIKZmF2b3VyaXRlcywgbG9hZCB0aGVtIGludG8gdGhlIElERSBhbmQgZG8gd2hhdGV2ZXIgeW91IHdvdWxkIGRvIHdpdGgKYW55IG90aGVyIHByb2plY3QgZmlsZXMuIElmIHlvdSBhcmUgYSBub3ZpY2UgYW5kIHB1enpsZWQgYWJvdXQgaG93IHRvCnVzZSBwYXJ0aWN1bGFyIHByb2plY3QgZmlsZXMgd2l0aCBhIHBhcnRpY3VsYXIgSURFLCBjaGVjayBmb3IgYSByZWFkbWUKZmlsZSBpbiB0aGF0IElERXMgc3ViZGlyZWN0b3J5LiBJIHdvbid0IGRpc2N1c3MgYW55IHBhcnRpY3VsYXIgSURFCmhlcmUsIGJlY2F1c2UgSSB3b3VsZCBsaWtlIHRvIGtlZXAgdGhpcyBkb2N1bWVudCBhcyBnZW5lcmFsIGFzCnBvc3NpYmxlLCBhbmQgdGhlcmUgaXMgYWxzbyBhIGNoYW5jZSB0aGF0IHN1cHBvcnQgZXhpc3RzIGZvciBJREVzCndoaWNoIEkgaGF2ZSBuZXZlciBzZWVuLgoKCk5vdmVtYmVyIDIwMDIsIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+Cgo=