ClJlbGVhc2UgTm90ZXM6Cj09PT09PT09PT09PT09CgpidWlsZDIxMywgMjAwOC0wNC0wMToKCi0gQWRkZWQgYSB3b3JrYXJvdW5kIGZvciBzZXJ2ZXJzIHRoYXQgdmlvbGF0ZSBSRkM0MjUzIHdoZW4gc2VuZGluZyB0aGUKICBTU0hfTVNHX1NFUlZJQ0VfQUNDRVBUIGFuZCB0aGUgU1NIX01TR19LRVhESF9SRVBMWSBtZXNzYWdlcy4KICBUaGFua3MgdG8gR29yZG9uIEJyb2Nrd2F5LgoKLSBGaXhlZCBlbmNvZGluZ3MgZm9yIGFsaWVuIHBsYXRmb3JtcyAoZS5nLiwgRUJDRElDIGJhc2VkKS4gVXNlICJJU08tODg1OS0xIiBpbgogIG1vc3QgcGxhY2VzIHdoZXJlIHdlIHVzZWQgdGhlIGRlZmF1bHQgcGxhdGZvcm0gZW5jb2Rpbmcgc28gZmFyLgoKLSBBUEkgY2hhbmdlOiBhdGltZSBhbmQgbXRpbWUgYXR0cmlidXRlcyBpbiBTRlRQdjNGaWxlQXR0cmlidXRlcyBhcmUgbm93CiAgb2YgdHlwZSBMb25nIChub3QgSW50ZWdlcikuIE1ha2VzIGl0IGVhc2llciB0byBwcm9wZXJseSBoYW5kbGUgdmFsdWVzID4gMl4zMS4KCi0gRml4ZWQgdGhlIGJsb3dmaXNoLWN0ciBjaXBoZXIsIGl0IGNvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQgKGEgdHlwbyB0aGF0CiAgZ290IGluIGR1cmluZyB0aGUgbW92ZSB0byB0aGUgdHJpbGVhZCBuYW1lc3BhY2UpLiBUaGFua3MgdG8gUm9lbG9mIEtlbXAuCgotIFN0aWxsIGluIHRoZSBxdWV1ZTogU1NIIHNlcnZlciBzdXBwb3J0LgoKYnVpbGQyMTIsIDIwMDgtMDMtMDM6CgotIEFkZGVkIHBvc3NpYmlsaXR5IHRvIGVuYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0IHdpdGhvdXQgcmVjb21waWxpbmcgdGhlIGxpYnJhcnkuCiAgU2VlIHRoZSBDb25uZWN0aW9uLmVuYWJsZURlYnVnZ2luZyguLi4pIG1ldGhvZCBhbmQgdGhlIERlYnVnTG9nZ2VyIGludGVyZmFjZS4KCi0gQWRkZWQgQ29ubmVjdGlvbi5waW5nKCkgYW5kIFNlc3Npb24ucGluZygpIG1ldGhvZHMgdG8gcGVyZm9ybSBlbmQtdG8tZW5kCiAgY29ubmVjdGlvbi9zZXNzaW9uIHRlc3RpbmcuIEluaXRpYWwgY29kZSBzdXBwbGllZCBieSBBbGV4YW5kZXIgS2l0YWV2LiBUaGFua3MhCgotIFNvbWUgYnVnZ3kgU0ZUUCBzZXJ2ZXJzIHNlbmQgdG9vIGJpZyBwYWNrZXRzIHdoZW4gd2UgaW5zdHJ1Y3QgdGhlbSB0byByZWFkCiAgZGlyZWN0b3J5IGVudHJpZXMuIFRoZXJlZm9yZSwgaW5jcmVhc2VkIHRoZSBwYWNrZXQgc2l6ZSBsaW1pdCBmb3IgYW5zd2VycwogIHRvIHRoZSBTU0hfRlhQX1JFQURESVIgcmVxdWVzdC4gVGhhbmtzIHRvIFJvc3MgUGVycnkuCiAgCi0gQ29taW5nIHNvb246IFNTSCBzZXJ2ZXIgc3VwcG9ydC4gCgpidWlsZDIxMSwgMjAwNy0xMC0yODoKCi0gVGhlIGxpYnJhcnkgaXMgbm93IGNhbGxlZCAiVHJpbGVhZCBTU0gtMiBmb3IgSmF2YSIuCiAgSXQgaXMgc3RpbGwgbWFpbnRhaW5lZCBieSBDaHJpc3RpYW4gUGxhdHRuZXIgKGNvLWZvdW5kZXIgb2YgVHJpbGVhZCkuCgotIFRoZSBwYWNrYWdlIGhhcyBiZWVuIG1vdmVkIHRvICJjb20udHJpbGVhZC5zc2gyIi4gVGhlcmVmb3JlLCBwbGVhc2UgbWFrZSBzdXJlCiAgdGhhdCB5b3UgdXNlICJpbXBvcnQgY29tLnRyaWxlYWQuc3NoMi4qIiBpbiB5b3VyIEphdmEgc291cmNlIGZpbGVzLgogIE90aGVyd2lzZSwgdGhlIGxpYnJhcnkgaXMgY29tcGxldGVseSBiYWNrd2FyZHMgY29tcGF0aWJsZS4KICAKLSBJZiB5b3UgaGF2ZSBxdWVzdGlvbnMsIHRoZW4gcGxlYXNlIGNvbnN1bHQgb3VyIG5ldyBmb3J1bSBhdCBodHRwOi8vd3d3LnRyaWxlYWQuY29tL3N1cHBvcnQuCgotIEFkZGVkIENvbm5lY3Rpb24uc2VuZElnbm9yZVBhY2tldCguLi4pIG1ldGhvZHMgd2hpY2ggYWxsb3cgdG8gc2VuZCBTU0hfTVNHX0lHTk9SRSBwYWNrZXRzLgogIFRoYW5rcyB0byBBbmRyZWkgVGNoaWpvdi4KCi0gQWRkZWQgc3VwcG9ydCBmb3IgdGhlICJub25lIiBhdXRoZW50aWNhdGlvbiBtZXRob2QuCgotIFJldmlzZWQgdGhlIFNIQS0xIGNvZGUuIEhpZ2hseSBvcHRpbWl6ZWQuIFNwZWVkIHNob3VsZCBiZSBtb3JlIHRoYW4gZG91YmxlZC4KCi0gQ2hhbmdlZCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZWN0IFJGQ3MgKGluc3RlYWQgb2YgdGhlIGRyYWZ0cykgaW4gdGhlIGphdmFkb2NzICh3aGVyZSBwb3NzaWJsZSkuCgotIEZpeGVkIHRoZSB3cml0ZSgpIG1ldGhvZCBpbiB0aGUgU0ZUUCBjb2RlLiBVbnNhdGlzZmlhYmxlIHByZWNvbmRpdGlvbnMgc3RvcHBlZCB0aGUgbWV0aG9kCiAgZnJvbSB3cml0aW5nIGFueSBieXRlcy4gQXMgc3RhdGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLCB0aGUgU0ZUUCBjb2RlIGlzIHN0aWxsIGV4cGVyaW1lbnRhbC4KICBUaGFua3MgdG8gQW5kcmVhcyBQdWVzY2hlbC4KCi0gVGhlICJzb2Z0d2FyZXZlcnNpb24iIHRva2VuIGZvciB0aGUgU1NIIHByb3RvY29sIHZlcnNpb24gZXhjaGFuZ2UgaGFzIGJlZW4gY2hhbmdlZAogIHRvICJUcmlsZWFkU1NIMkphdmFfWFhYIiwgd2hlcmUgWFhYIGlzIHRoZSBidWlsZCBudW1iZXIuCgotIEFkZGVkIGEgbmV3IGNyZWF0ZUxvY2FsUG9ydEZvcndhcmRlcihJbmV0U29ja2V0QWRkcmVzcyBhZGRyLCAuLi4pIG1ldGhvZCB3aGljaCBhbGxvd3MgdG8KICBzcGVjaWZ5IHRoZSBsb2NhbCBhZGRyZXNzIGFuZCBwb3J0IHRvIGJpbmQgdG8uIFRoYW5rcyB0byBBbmRyZWkgVGNoaWpvdi4KCi0gU2xpZ2h0bHkgdXBkYXRlZCB0aGUgRkFRLgoKYnVpbGQyMTAsIDIwMDYtMTAtMDY6CgotIEFkZGVkIEhUVFAgcHJveHkgc3VwcG9ydC4gU2VlIENvbm5lY3Rpb24uc2V0UHJveHlEYXRhKCkgYW5kIHRoZSBIVFRQUHJveHlEYXRhIGNsYXNzLgogIFRoYW5rcyB0byBKZWFuLVBpZXJyZSBTY2htaXQgZm9yIHByb3ZpZGluZyBleGFtcGxlIGNvZGUuCiAgCi0gQWRkZWQgYmFzaWMgc3VwcG9ydCBmb3IgU0ZUUCAodjMpLgogIAotIEJldGEgdXNlcnM6IHJlbW92ZWQgc3VwcG9ydCBmb3IgYXV0b21hdGljIHNwbGl0IG9mIGh1Z2UgcmVhZCB0cmFuc2ZlcnMgaW4gU0ZUUCwKICBhcyBpdCB3YXMgbm90IHBvc3NpYmxlIHRvIHJldHVybiBFT0YgaW4gYSBjbGVhbiB3YXkuIFRoZSB3cml0ZSBtZXRob2Qgc3RpbGwgc3BsaXRzIGh1Z2UKICB0cmFuc2ZlcnMgKGluIGJsb2NrcyBvZiAzMjc2OCBieXRlcykuIFRoYW5rcyB0byBaaG9uZyBMaS4KICAKLSBTQ1AgZW5oYW5jZW1lbnQuIEl0IGlzIG5vdyBwb3NzaWJsZSB0byBzcGVjaWZ5IGFuIGVtcHR5IHRhcmdldCBkaXJlY3RvcnkgbmFtZSB3aGVuIHNlbmRpbmcKICBmaWxlcy4gVGhpcyBpcyBhbmFsb2dvdXMgdG8gdXNpbmcgInNjcCBmaWxlIHVzZXJAaG9zdDoiICh0aGFua3MgdG8gQmVybmQgRWdnaW5rKS4KCi0gU0NQIGVuaGFuY2VtZW50LiBJdCBpcyBub3cgcG9zc2libGUgdG8gcmVjZWl2ZSBhIHJlbW90ZSBmaWxlIGFuZCBwaXBlIGl0IGRpcmVjdGx5IGludG8KICBhbiBPdXRwdXRTdHJlYW0uIFRoYW5rcyB0byBCZXJuZCBFZ2dpbmsuCgotIFNDUCBlbmhhbmNlbWVudC4gSXQgaXMgbm93IHBvc3NpYmxlIHRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgcmVtb3RlIGZpbGVuYW1lIHdoZW4gc2VuZGluZwogIGEgZmlsZS4gVGhhbmtzIHRvIFRob21hcyBUYXR6ZWwuCgotIEFkZGVkIG1vcmUgdmVyYm9zZSBlcnJvciBtZXNzYWdlcyBpbiBjYXNlIGEgY2hhbm5lbCBvcGVuIG9wZXJhdGlvbiBmYWlscyAoZS5nLiwgcmVzb3VyY2UKICBzaG9ydGFnZSBvbiB0aGUgc2VydmVyKS4gUmVsYXRlZCB0byB0aGlzLCBhZGRlZCBhIGNvbW1lbnQgdG8gdGhlIEZBUSByZWdhcmRpbmcgdGhlIGxpbWl0YXRpb24KICBvbiB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgc2Vzc2lvbnMgcGVyIGNvbm5lY3Rpb24gaW4gT3BlblNTSC4gVGhhbmtzIHRvIFJvbiBXYXJzaGF3c2t5LgoKLSBBZGRlZCBhIGZlYXR1cmUgKENvbm5lY3Rpb25Nb25pdG9yKSB0byBnZXQgbm90aWZpZWQgd2hlbiBhIGNvbm5lY3Rpb24gYnJlYWtzLgogIFRoYW5rcyB0byBEYW5pZWwgUml0eiAoQWxjYXRlbCkuCgotIEl0IGlzIG5vdyBwb3NzaWJsZSB0byBvdmVycmlkZSB0aGUgdXNlZCBTZWN1cmVSYW5kb20gaW5zdGFuY2UgKENvbm5lY3Rpb24uc2V0U2VjdXJlUmFuZG9tKCkpLgoKLSBBZGRlZCBnZXR0ZXJzIGZvciB0aGUgc2VydmVyJ3MgaG9zdG5hbWUgYW5kIHBvcnQgdG8gdGhlIENvbm5lY3Rpb24gY2xhc3MuCgotIEFkZGVkIGV4YW1wbGVzIGZvciBIVFRQIHByb3h5IHVzYWdlIGFzIHdlbGwgYXMgbG9jYWwvcmVtb3RlIHBvcnQgZm9yd2FyZGluZy4KCi0gQWRkZWQgc3VwcG9ydCBmb3IgU1NIX01TR19LRVhfREhfR0VYX1JFUVVFU1RfT0xEIGluIHRoZSBESEdleFBhcmFtZXRlcnMgY2xhc3MgKHRoZXJlCiAgaXMgYSBuZXcsIGFkZGl0aW9uYWwgY29uc3RydWN0b3IpLiBQbGVhc2UgY2hlY2sgdGhlIEphdmFkb2MgZm9yIERIR2V4UGFyYW1ldGVycy4KCi0gQ2xhcmlmaWVkIGluIHRoZSBqYXZhZG9jIHRoZSBpc3N1ZSBvZiByZS11c2luZyBDb25uZWN0aW9uIG9iamVjdHMuIENoYW5nZWQgdGhlIGV4Y2VwdGlvbgogIG1lc3NhZ2UgaW4gY2FzZSBjb25uZWN0KCkgaXMgaW52b2tlZCBvbiBhbiBhbHJlYWR5IGNvbm5lY3RlZCBjb25uZWN0aW9uLgoKLSBBZGRlZCBhbiBlbnRyeSB0byB0aGUgRkFRIHJlZ2FyZGluZyBwdW1waW5nIGRhdGEgaW50byByZW1vdGUgZmlsZXMuCiAgVGhhbmtzIHRvIERhbmllbCBTY2h3YWdlci4KCi0gQ2hhbmdlZCBKRGlhbG9nLnNob3coKSB0byBKRGlhbG9nLnNldFZpc2libGUodHJ1ZSkgaW4gdGhlIFN3aW5nU2hlbGwgZXhhbXBsZS4KICBUaGUgc2hvdygpIG1ldGhvZCBpcyBkZXByZWNhdGVkIGluIEphdmEgNS4wLiBUaGFua3MgdG8gQ2FybG8gRGFwb3IuCgotIEZpeGVkIHRoZSBiZWhhdmlvciBvZiB0aGUgbG9jYWwgcG9ydCBmb3J3YXJkZXIgY29kZS4gVHJ5aW5nIHRvIGxpc3RlbiBvbiBhbiBhbHJlYWR5IGJvdW5kIHBvcnQKICB3aWxsIG5vdCBmYWlsIHNpbGVudGx5IGFueW1vcmUuIEFsc28sIHRoZSBhY2NlcHQgdGhyZWFkIHdpbGwgY29udGludWUgYWNjZXB0aW5nIGNvbm5lY3Rpb25zCiAgZXZlbiBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIHdpdGggdGhlIGVzdGFibGlzaG1lbnQgb2YgdGhlIHVuZGVybHlpbmcgc3NoLWZvcndhcmRpbmcgb2YgYQogIHByZXZpb3VzIGluY29taW5nIGNvbm5lY3Rpb24gKGUuZy4sIG9uZSB0cmllZCB0byBlc3RhYmxpc2ggYSBmb3J3YXJkaW5nIHRvIGEgcmVtb3RlIHBvcnQgdGhhdAogIGlzIG5vdCBpbiBzdGF0ZSBvcGVuICh5ZXQpKS4gVGhhbmtzIHRvIENsYXVkaW8gTmllZGVyIChJbm9kZXMsIFN3aXR6ZXJsYW5kKSBhbmQKICBEYW5pZWwgUml0eiAoQWxjYXRlbCkgZm9yIHBvaW50aW5nIHRoaXMgb3V0LgogIE5vdGU6IHRoZSBpbnRlcmZhY2UgZm9yIG1hbmFnaW5nIHBvcnQgZm9yd2FyZGluZ3MgbmVlZHMgdG8gYmUgZnVydGhlciBpbXByb3ZlZC4KCi0gVHJpZWQgdG8gaW1wbGVtZW50IGEgd29ya2Fyb3VuZCBmb3IgdGhlIFN1biBKVk0gYnVnIDUwOTIwNjMuIENoYW5nZWQgSW5ldEFkZHJlc3MuZ2V0QnlBZGRyZXNzKGJ5dGVbXSkKICBpbiB0aGUgIlRyYW5zcG9ydE1hbmFnZXIucGFyc2VJUHY0QWRkcmVzcyIgbWV0aG9kICh3aGljaCBhbHJlYWR5IGlzIGEgd29ya2Fyb3VuZCBmb3IgSkRLJ3MgdGhhdAogIHVzZSB0aGUgcmVzb2x2ZXIgZm9yIGRvdHRlZCBJUCBhZGRyZXNzZXMsIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgNTA5MjA2MyBidWcpIHRvCiAgSW5ldEFkZHJlc3MuZ2V0QnlBZGRyZXNzKFN0cmluZywgYnl0ZVtdKS4gVGhhbmtzIHRvIEFsYWluIFBoaWxpcGluLgoKLSBGaXhlZCBhIGJ1ZyBpbiBLbm93bkhvc3RzLmFkZEhvc3RrZXlUb0ZpbGUuIEhvc3RuYW1lcyB3ZXJlIGNvbnZlcnRlZCB0byBsb3dlcmNhc2Ugd2hpY2ggaXMKICBub3QgZ29vZCBpbiBjYXNlIG9mIGhhc2hlZCBob3N0bmFtZXMgKGl0IGxlYWRzIHRvIGEgZGlmZmVyZW50IEJBU0U2NCBlbmNvZGluZyBhbmQgdGhlcmVmb3JlCiAgaGFzaGVzIHdvbid0IG1hdGNoKS4gVGhhbmtzIHRvIFt1bmtub3duXS4KCi0gRml4ZWQgYSB0eXBvIGluIHRoZSBTQ1AgY2xpZW50ICh0YWcgZm9yIG1vZGlmaWNhdGlvbiB0aW1lcyBpcyAnVCcgYW5kIG5vdCAnUCcpLgogIFRoYW5rcyB0byBBbmRyZWFzIFNhaGxiYWNoLgoKLSBTdHVwaWQgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnQgaW4gdGhlIExvZ2dlciwgaXQgZGlkIHVubmVjZXNzYXJ5IGNhbGxzIHRvIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpLgoKLSBUaGUgTElDRU5DRS50eHQgZmlsZSBpcyBub3cgYWxzbyBpbmNsdWRlZCBpbiB0aGUgcHJlLWNvbXBpbGVkIGphci4gT2YgY291cnNlLCByZWRpc3RyaWJ1dGlvbnMgaW4KICBiaW5hcnkgZm9ybSBtdXN0ICpzdGlsbCogaW5jbHVkZSB0aGUgY29udGVudHMgb2YgTElDRU5DRS50eHQgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyCiAgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAKLSBTbWFsbCBjbGVhbnVwcyBpbiB0aGUgVHJhbnNwb3J0TWFuYWdlciBjb2RlLgoKYnVpbGQyMDksIDIwMDYtMDItMTQ6CgotIEEgbWFqb3IgcmVsZWFzZSwgbWFueSBuZXcgZmVhdHVyZXMuIFRoYW5rcyB0byBhbGwgd2hvIHN1cHBvcnRlZCBtZSB3aXRoIGZlZWRiYWNrIQoKLSBBZGRlZCByZW1vdGUgcG9ydCBmb3J3YXJkaW5nIHN1cHBvcnQuCiAgUGxlYXNlIGNvbnN1bHQgdGhlIGRvY3MgZm9yIENvbm5lY3Rpb24ucmVxdWVzdFJlbW90ZVBvcnRGb3J3YXJkaW5nKCkuCgotIEFkZGVkIFgxMSBmb3J3YXJkaW5nIHN1cHBvcnQuIFBsZWFzZSBjb25zdWx0IFNlc3Npb24ucmVxdWVzdFgxMUZvcndhcmRpbmcoKS4KICBYMTEgc3VwcG9ydCBpcyBiYXNlZCBvbiBqb2ludCB3b3JrIHdpdGggU2ltb24gSGFydGwgKHNpbW9uLmhhcnRsIChhdCkgZ214Lm5ldCkuIFRoYW5rcywgU2ltb24hCgotIFRoZSBTQ1BDbGllbnQgY29uc3RydWN0b3IgaXMgbm93IHB1YmxpYy4gVGhlIGZhY3RvcnkgbWV0aG9kIGlzIHN0aWxsIHRoZXJlIChpbiB0aGUgQ29ubmVjdGlvbgogIGNsYXNzKSwgaG93ZXZlciwgaXQgd2lsbCBwcm9iYWJseSBiZSBtYXJrZWQgYXMgZGVwcmVjYXRlZCBhbmQgZXZlbnR1YWxseSBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuCgotIEFkZGVkIHN0YXJ0U3ViU3lzdGVtKCkgbWV0aG9kIHRvIHRoZSBTZXNzaW9uIGNsYXNzLiBOb3cgaXQgaXMgcG9zc2libGUgdG8gaW1wbGVtZW50IHN1YnN5c3RlbXMsCiAgZS5nLiwgc2Z0cCwgb3V0c2lkZSBvZiB0aGUgbGlicmFyeS4KCi0gRm9yIGFkdmFuY2VkIHVzZXJzOiB0aGVyZSBpcyBub3cgYSBtdWNoIGJldHRlciBjb25kaXRpb24gd2FpdCBpbnRlcmZhY2UgaW4gdGhlIFNlc3Npb24gY2xhc3MuCiAgSXQgaXMgbm93IGFsc28gcG9zc2libGUgdG8gd2FpdCBmb3IgdGhlIGFycml2YWwgb2YgImV4aXQtc3RhdHVzIiBhbmQgImV4aXQtc2lnbmFsIi4KICBUaGUgU2Vzc2lvbi53YWl0VW50aWxEYXRhQXZhaWxhYmxlKCkgbWV0aG9kIHN0aWxsIHdvcmtzLCBidXQgaXMgbWFya2VkIGFzIGRlcHJlY2F0ZWQuCgogIFVzZXJzIHRoYXQgdXNlZCB0aGUgYmV0YSB2ZXJzaW9uLCBwbGVhc2UgYmUgYXdhcmUgb2YgdGhlIGZvbGxvd2luZyBjaGFuZ2U6IGNhbGxpbmcgdGhlIGNsb3NlKCkKICBtZXRob2Qgb24gYSBTZXNzaW9uIG9iamVjdCB3aWxsIGltbWVkaWF0ZWxseSByYWlzZSB0aGUgQ2hhbm5lbENvbmRpdGlvbi5DTE9TRUQvRU9GIGNvbmRpdGlvbnMKICBvbiB0aGUgdW5kZXJseWluZyBjaGFubmVsIC0gZXZlbiB0aG91Z2ggdGhlIHJlbW90ZSBzaWRlIG1heSBub3QgaGF2ZSB5ZXQgcmVzcG9uZGVkIHdpdGggYQogIFNTSF9NU0dfQ0hBTk5FTF9DTE9TRSBtZXNzYWdlIChob3dldmVyLCBpbiB0aGUgYmFja2dyb3VuZCB0aGUgbGlicmFyeSBzdGlsbCBleHBlY3RzIHRoZSBzZXJ2ZXIKICB0byBzZW5kIHRoZSBTU0hfTVNHX0NIQU5ORUxfQ0xPU0UgbWVzc2FnZSkuIFNlZSBiZWxvdyBmb3IgYW4gZXhwbGFuYXRpb24uCgotIFRoZSBiZWhhdmlvciBvZiBTZXNzaW9uLmNsb3NlKCkgaGFzIGNoYW5nZWQuIElmIHlvdSAqa2lsbCogYSBTZXNzaW9uIChpLmUuLCBjYWxsIFNlc3Npb24uY2xvc2UoKQogIGJlZm9yZSBFT0YgKG9yIENMT1NFKSBoYXMgYmVlbiBzZW50IGJ5IHRoZSByZW1vdGUgc2lkZSksIHRoZW4gaW1tZWRpYXRlbGx5IEVPRiB3aWxsIChsb2NhbGx5KQogIGJlIHJhaXNlZCBmb3IgYm90aCBzdGRvdXQgYW5kIHN0ZGVyci4gRnVydGhlciBpbmNvbWluZyBkYXRhIChmb3IgdGhhdCBwYXJ0aWN1bGFyIFNlc3Npb24pIHdpbGwKICBiZSBpZ25vcmVkLiBIb3dldmVyLCByZW1vdGUgZGF0YSB0aGF0IGFycml2ZWQgYmVmb3JlIHdlIHNlbnQgb3VyIFNTSF9NU0dfQ0hBTk5FTF9DTE9TRSBtZXNzYWdlCiAgaXMgc3RpbGwgYXZhaWxhYmxlICh5b3UgY2FuIHRoaW5rIG9mIGhhdmluZyBhcHBlbmRlZCB0aGUgRU9GIG1hcmtlciB0byB0aGUgZW5kIG9mIHRoZSBsb2NhbAogIGluY29taW5nIHN0ZG91dCBhbmQgc3RkZXJyIHF1ZXVlcykuCiAgCiAgVGhlIHJlYXNvbiB0byBkbyB0aGlzIGlzIHNpbXBseSBiZWNhdXNlIHNvbWUgU1NIIHNlcnZlcnMgZG8gc29tZXRpbWVzIG5vdCByZXBseSB0byBvdXIKICBTU0hfTVNHX0NIQU5ORUxfQ0xPU0UgbWVzc2FnZSAoZXZlbnQgdGhvdWdoIHRoZXkgc2hvdWxkKS4gQXMgYSBjb25zZXF1ZW5jZSwgYSBsb2NhbCByZWFkZXIgbWF5CiAgd2FpdCBmb3JldmVyIGZvciB0aGUgcmVtb3RlIFNTSF9NU0dfQ0hBTk5FTF9FT0Ygb3IgU1NIX01TR19DSEFOTkVMX0NMT1NFIG1lc3NhZ2VzIHRvIGFycml2ZS4KICBJZiB5b3UgYXJlIGludGVyZXN0ZWQsIHRoZW4geW91IGNhbiB0cnkgdG8gcmVwcm9kdWNlIHRoZSBwcm9ibGVtOiBFeGVjdXRlIHNvbWV0aGluZyBsaWtlCiAgInRhaWwgLWYgL2Rldi9udWxsIiAod2hpY2ggc2hvdWxkIGRvIG5vdGhpbmcgZm9yZXZlcikgYW5kIHRoZW4gY29uY3VycmVudGx5IGNsb3NlIHRoZSBTZXNzaW9uCiAgKGVuYWJsZSBkZWJ1ZyBtb2RlIHRvIHNlZSB0aGUgU1NIIHBhY2tldHMgb24gdGhlIHdpcmUpIHRvIGNoZWNrIGhvdyBzdGFuZGFyZCBjb21wbGlhbnQgeW91ciBzZXJ2ZXIKICBpbXBsZW1lbnRhdGlvbiBpcykuIFRoYW5rcyB0byBDcmlzdGlhbm8gU2FkdW4uCgotIFRoZSBTZXNzaW9uIGNvZGUgZG9lcyBub3QgYW55bW9yZSBtYWtlIHVzZSBvZiB0aGUgc3luY2hyb25pemVkIGF0dHJpYnV0ZSBmb3IgYW55IG9mIGl0cyBtZXRob2RzLgogIFRoaXMgaGFzIHRoZSBhZHZhbnRhZ2UgdGhhdCBhIGNhbGwgdG8gU2Vzc2lvbi5jbG9zZSgpIHdpbGwgbmV2ZXIgYnkgYmxvY2tlZCBieSBjb25jdXJyZW50CiAgY2FsbHMgdG8gdGhlIFNlc3Npb24gb2JqZWN0LiBIb3dldmVyLCBub3RlIHRoYXQgaW4gdGhlIHdvcnN0IGNhc2UgdGhlIGNhbGwgbWF5IHN0aWxsIGJsb2NrIHVudGlsCiAgd2UgY2FuIHNlbmQgb3VyIFNTSF9NU0dfQ0hBTk5FTF9DTE9TRSBvdmVyIHRoZSBUQ1AgY29ubmVjdGlvbi4KCi0gVGhlIFNDUCBjbGllbnQgY2FuIG5vdyBhbHNvIGJlIHVzZWQgdG8gZGlyZWN0bHkgaW5qZWN0IHRoZSBjb250ZW50cyBvZiBhIGdpdmVuIGJ5dGUgYXJyYXkKICBpbnRvIGEgcmVtb3RlIGZpbGUgKHRoYW5rcyB0byBEaWV0ZXIgQmFpZXIgZm9yIHN1Z2dlc3RpbmcgdGhpcykuCgotIEFkZGVkIHN1cHBvcnQgZm9yIHNwZWNpZnlpbmcgdGltZW91dHMgZm9yIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4KICBUaGFua3MgdG8gUm9iIEhhc3NlbGJhdW0gYW5kIEJlbiBYWVouCgotIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50OiB3ZSB1c2Ugb25seSBhIHNpbmdsZSBTZWN1cmVSYW5kb20gb2JqZWN0IHBlciBjb25uZWN0aW9uCiAgKHVudGlsIG5vdyB0aGVyZSB3ZXJlIG11bHRpcGxlIGluc3RhbmNlcykuCgotIEZpeGVkIHRoZSBTd2luZ3NoZWxsIGV4YW1wbGUgcHJvZ3JhbSwgaXQgZGlkIG5vdCByZWFkIGluIHRoZSBrbm93bl9ob3N0cyBmaWxlIG9uIHN0YXJ0dXAuCiAgKHRoYW5rcyB0byBBc2h3YW5pIEt1bWFyKS4KCi0gVGhlcmUgd2FzIGEgdHlwbyBpbiB0aGUgQ0JDTW9kZSBjbGFzcyAoc3Jjb2ZmIHdhcyBpZ25vcmVkKSwgaG93ZXZlciBzaW5jZSB3ZSBhbHdheXMgcGFzcwogIGEgemVybyBvZmZzZXQgdGhlIGJ1ZyBkaWQgbm90IHNob3cgdXAgKHRoYW5rcyB0byBBbGV4IFBha2hvbW92KS4KCi0gV2hpbGUgaW1wbGVtZW50aW5nIFgxMSBzdXBwb3J0LCBmb3VuZCBhIHN0cmFuZ2UgWDExIGJ1ZyBpbiBPcGVuU1NIIChyZXBvcnRlZCwgb3BlbnNzaCBidWcgMTA3NikuCiAgMTIuMTAuMjAwNTogaGFzIGJlZW4gZml4ZWQgZm9yIE9wZW5TU0ggNC4zIGJ5IHRoZSBPcGVuU1NIIGNyb3dkLgoKLSBDaGFuZ2VkIHRoZSBTaW5nbGVUaHJlYWRTdGRvdXRTdGRlcnIgZXhhbXBsZSBzbyB0aGF0IGl0IHVzZXMgdGhlIG5ldyBjb25kaXRpb24gd2FpdCBpbnRlcmZhY2UuCgotIEVmZmljaWVudGx5IGhhbmRsZSBJUHY0IGFkZHJlc3NlcyAod2hlbiBjcmVhdGluZyB0aGUgdW5kZXJseWluZyBzb2NrZXQpLCB0aGVyZSB3YXMgYSByZXBvcnQKICB0aGF0IHNvbWUgSkRLJ3MgdHJ5IHRvIGxvb2t1cCBkb3R0ZWQgYWRkcmVzc2VzIHdpdGggdGhlIHJlc29sdmVyLgogICh0aGFua3MgdG8gQWxleGFuZGVyIEtpdGFldikuCgotIEFkZGVkIHNldFRDUE5vRGVsYXkoKSBtZXRob2QgdG8gdGhlIENvbm5lY3Rpb24gY2xhc3MuCgotIEltcHJvdmVkIGhhbmRsaW5nIG9mIHVuc3VwcG9ydGVkIGdsb2JhbC9jaGFubmVsIHJlcXVlc3RzIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlci4KCi0gVGhlIEtFWCBjb2RlIGlzIG5vdyBtb3JlIHJvYnVzdC4gQWxzbywgdGhlIFNlcnZlckhvc3RLZXlWZXJpZmllciBjYWxsYmFjayAoaWYgc3BlY2lmaWVkKSB3aWxsIGJlIGNhbGxlZAogIGJlZm9yZSBkb2luZyBhbnkgREggY2FsY3VsYXRpb24uCgotIE1ham9yIGNsZWFudXAgKGkuZS4sIHJld3JpdGUpIG9mIHRoZSBTU0ggY2hhbm5lbCBjb2RlLgoKLSBDbGVhbnVwIHVwIFNlc3Npb24gY2xhc3MsIHJlbW92ZWQgdW5uZWNlc3NhcnkgSU9FeGNlcHRpb25zLgoKLSBJbXBsZW1lbnRlZCAyXjMyLTEgY29uZm9ybWFuY2UgZm9yIGNoYW5uZWwgd2luZG93cy4KCi0gSSBnb3Qgc2V2ZXJhbCB0aW1lcyBxdWVzdGlvbnMgYnkgZS1tYWlsIGZyb20gcGVvcGxlIHRoYXQgaGF2ZSBwcm9ibGVtcyB3aXRoICJwdXR0eSIga2V5cy4KICBBZGRlZCBhbiBlbnRyeSB0byB0aGUgRkFRLgoKLSBBZGRlZCBhbiBlbnRyeSB0byB0aGUgRkFRIHJlZ2FyZGluZyBob3cgdG8gaGFuZGxlIHNlcnZlcnMgd2l0aCBkaXNhYmxlZCBwYXNzd29yZCBhdXRoZW50aWNhdGlvbgogICh0aGFua3MgdG8gTmljb2xhcyBSYW91bCkuCgotIFVwY29taW5nOiBTRlRQIHN1cHBvcnQgKGluIHRoZSBtZWFudGltZSBhbG1vc3QgYSBydW5uaW5nIGdhZykuCgotIENoYW5nZWQgdGhlIG5hbWUgZnJvbSAiR2FueW1lZCBTU0gyIiB0byAiR2FueW1lZCBTU0gtMiIuIFdpbGwgdGhpcyBpbXByb3ZlIHRoZSBHKipnbGUgcmFua2luZz8gPSkKCi0gTGF0ZXN0IGphdmFkb2MgaXMgbm93IGFsc28gb25saW5lLgoKCmJ1aWxkMjA4LCAyMDA1LTA4LTI0OgoKLSBBZGRlZCBzdXBwb3J0IGZvciBSU0EgcHJpdmF0ZSBrZXlzIChQRU0gZm9ybWF0KSwgYWxzbyByZXZpc2VkIGNvZGUgZm9yIFJTQSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uLgoKLSBFeHRlbmRlZCBzdXBwb3J0IGZvciBlbmNyeXB0ZWQgUEVNIGZpbGVzLgogIFN1cHBvcnRlZCBlbmNyeXB0aW9uczogREVTLUNCQywgREVTLUVERTMtQ0JDLCBBRVMtMTI4LUNCQywgQUVTLTE5Mi1DQkMgYW5kIEFFUy0yNTYtQ0JDLgogIAotIEFkZGVkIHJhdGhlciBjb21wbGV0ZSBzdXBwb3J0IGZvciBrbm93bl9ob3N0cyBmaWxlcyAoaW4gS25vd25Ib3N0cy5qYXZhKS4KICBUaGUgcGFyc2VyIGlzIGFibGUgdG8gdW5kZXJzdGFuZCB0aGUgc2FtZSBwc2V1ZG8tcmVnZXggKCosPywhKSBzeW50YXggYXMgT3BlblNTSCBjbGllbnRzLgogIFRoZSBjbGFzcyBpbmNsdWRlcyBzdXBwb3J0IGZvciBob3N0a2V5IGNvbXBhcmlzb24gYXMgd2VsbCBhcyBmdW5jdGlvbmFsaXR5IHRvIGFkZCBhY2NlcHRlZCBrZXlzCiAgdG8gYSBrbm93bl9ob3N0cyBmaWxlLiBPbmUgY2FuIGFsc28gY3JlYXRlIE9wZW5TU0ggY29tcGF0aWJsZSBmaW5nZXJwcmludHMgKEhleCBhbmQgQnViYmxlYmFiYmxlKS4KICBIYXNoZWQgaG9zdG5hbWUgZW50cmllcyBhcmUgdW5kZXJzdG9vZCBhbmQgY2FuIGFsc28gYmUgZ2VuZXJhdGVkLgogIAotIFJlc3RydWN0dXJlZCB0aGUgZXhhbXBsZXMgc2VjdGlvbiwgYWRkZWQgbW9yZSBleGFtcGxlcy4gVGhlIGV4YW1wbGVzIHNob3VsZCBjb3ZlciBtb3N0IGlzc3Vlcy4KICBUaGVyZSBpcyBhbHNvIGEgX3ZlcnlfIGJhc2ljIHRlcm1pbmFsIGVtdWxhdG9yLCBzZWUgU3dpbmdTaGVsbC5qYXZhLgoKLSBJdCBpcyBub3cgcG9zc2libGUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc2VydmVyIGhvc3RrZXkgYWxnb3JpdGhtIG9yZGVyIChmb3IgdGhlIGtleSBleGNoYW5nZSkKICB3aXRoIHRoZSBDb25uZWN0aW9uLnNldFNlcnZlckhvc3RLZXlBbGdvcml0aG1zIG1ldGhvZC4gVGhpcyBtYWtlcyBzZW5zZSBpbiBjb21iaW5hdGlvbiB3aXRoCiAga25vd25faG9zdHMgc3VwcG9ydCAoZS5nLiwgaWYgeW91IGFscmVhZHkga25vdyB0aGUgc2VydmVyJ3MgcHVibGljIHNzaC1kc3Mga2V5LCB0aGVuCiAgeW91IHByb2JhYmx5IHByZWZlciB0aGUgInNzaC1kc3MiIG92ZXIgdGhlICJzc2gtcnNhIiBhbGdvcml0aG0pLgogIFRoZSB1c2VkIHNlcnZlciBob3N0a2V5IGFsZ29yaXRobSBpcyBub3cgYWxzbyByZWZsZWN0ZWQgaW4gQ29ubmVjdGlvbkluZm8uCgotIFRoZSBkZWZhdWx0IHNlcnZlciBob3N0a2V5IGFsZ29yaXRobSBvcmRlciBpcyBub3cgInNzaC1yc2EiLCAic3NoLWRzcyIuCgotIEltcG9ydGFudDogcmV2aXNlZCBJbnB1dC0gYW5kIE91dHB1dFN0cmVhbSBjb2RlLCBldmVyeXRoaW5nIGlzIG5vdyB1bmJ1ZmZlcmVkCiAgKGxlc3MgbWVtb3J5IGNvbnN1bXB0aW9uLCBtb3JlIGRpcmVjdCBpbnRlcmZhY2UsIHNlZSBhbHNvIFN0cmVhbUdvYmJsZXIgY2xhc3MgYW5kIHRoZSBGQVEpLgoKLSBBZGRlZCBTdHJlYW1Hb2JibGVyIGhlbHBlciBjbGFzcy4KCi0gTWV0aG9kIHZlcmlmeVNlcnZlckhvc3RLZXkoKSBpbiB0aGUgU2VydmVySG9zdEtleVZlcmlmaWVyIG1heSBub3cgdGhyb3cgZXhjZXB0aW9ucwogIChhbiBhbHRlcm5hdGl2ZSB0byByZXR1cm5pbmcgImZhbHNlIikuCgotIEFsbCBiYWNrZ3JvdW5kIHRocmVhZHMgKHRoZSBwZXItY29ubmVjdGlvbiByZWNlaXZlIHRocmVhZCBhcyB3ZWxsIGFzIGFsbCB0aHJlYWRzCiAgdXNlZCBpbiBmb3J3YXJkZXJzIGFuZCBTdHJlYW1Hb2JibGVycykgbm93IHVzZSBzZXREYWVtb24odHJ1ZSkgb24gc3RhcnR1cC4KCi0gQWRkZWQgImRpZmZpZS1oZWxsbWFuLWdyb3VwMTQtc2hhMSIgc3VwcG9ydCB0byB0aGUga2V5IGV4Y2hhbmdlIGNvZGUuCgotIEFkZGVkIGNoYWluZWQgSU9FeGNlcHRpb25zIHdoZXJlIGFwcGxpY2FibGUgKElPRXhjZXB0aW9uIGluaXRpYWxpemF0aW9uIHdpdGggaW5pdENhdXNlKCkpLgoKLSBDbGVhbmVkIHVwIHBhY2tldCBidWlsZGluZyBjb2RlLCByZW1vdmVkIHVubmVjZXNzYXJ5IHNlcnZlci1zaWRlIG1ldGhvZHMuCgotIENsZWFuZWQgdXAgamF2YWRvYyBvZiBTQ1BDbGllbnQ6IHJlcGxhY2VkIHVtYXNrIHdpdGggbW9kZS4KCi0gRml4ZWQgYSBidWcgaW4gdGhlIHNlcnZlciBpZGVudGlmaWNhdGlvbiBzdHJpbmcgcGFyc2VyLiBUaGlzIGFjdHVhbGx5IHByZXZlbnRlZCBhIHN1Y2Nlc3NmdWwKICBrZXkgZXhjaGFuZ2Ugd2l0aCBzb21lIHNzaCBzZXJ2ZXJzICh0aGUgc2VydmVyJ3Mgc2lnbmF0dXJlIHdhcyByZWplY3RlZCkuCiAgVGhhbmtzIHRvIEFsZXggTW9sb2Nobmlrb3YgZm9yIHRoZSBpbml0aWFsIGJ1ZyByZXBvcnQgYW5kIGZvciBoZWxwaW5nIGluIHRyYWNraW5nIGRvd24gdGhlIGlzc3VlLgoKLSBGaXhlZCBhIGJ1ZmZlciByZS1hbGxvY2F0aW9uIGJ1ZyBpbiB0aGUgYmV0YSB2ZXJzaW9uIG9mIHRoZSBTdHJlYW1Hb2JibGVyIGNsYXNzCiAgKHRoYW5rcyB0byBNYXJjIExpam91cikuCgotIEZpeGVkIGZsYXdlZCBVSU5UNjQgc3VwcG9ydCAodGhhbmtzIHRvIEJvYiBTaW1vbnMpLgoKLSBGaXhlZCBhIGJ1ZyBpbiB0aGUgYnVpbGQgc2NyaXB0IG9mIHRoZSBiZXRhIGJ1aWxkcyAoc2Z0cCBiZXRhIGRpcmVjdG9yeSB3YXMgbm90IGNvbXBsZXRlbHkgcmVtb3ZlZCkKICAodGhhbmtzIHRvIFJpY2hhcmQgSGFzaCkuCgotIFVzZSB6ZXJvIGJhc2VkIHBhZGRpbmcgZm9yIHVuZW5jcnlwdGVkIHRyYWZmaWMuCgotIENoYW5nZWQgYWdhaW4gdGhlIGNsaWVudCBpZGVudGlmaWNhdGlvbiBzdHJpbmcgKHRoZSBvbmUgcHJlc2VudGVkIHRvIHRoZSBzZXJ2ZXIpLgoKLSBDcmVhdGVkIGEgRkFRLCBhdmFpbGFibGUgb24gdGhlIHdlYnNpdGUgYW5kIGluIHRoZSBkaXN0cmlidXRpb24uCiAgCi0gUmV2aXNlZCBqYXZhZG9jIGNvbW1lbnRzLiBBbHNvLCB0aGUgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24gaXMgbm93IGxvY2F0ZWQgaW4gdGhlIHN1YmRpcmVjdG9yeQogICJqYXZhZG9jIiBpbnN0ZWFkIG9mICJkb2MiIChpbiB0aGUgZGlzdHJpYnV0aW9uKS4KCi0gQWRkZWQgUkVBRE1FLnR4dCB0byB0aGUgZGlzdHJpYnV0aW9uLgoKCmJ1aWxkMjA3LCAyMDA1LTA3LTIxOgoKLSBBZGRlZCAiS2V5Ym9hcmQgSW50ZXJhY3RpdmUiIGF1dGhlbnRpY2F0aW9uIG1ldGhvZDoKICBhdXRoZW50aWNhdGVXaXRoS2V5Ym9hcmRJbnRlcmFjdGl2ZSgpIGluIENvbm5lY3Rpb24uamF2YSwKICBhbHNvIGhhdmUgYSBsb29rIGF0IEludGVyYWN0aXZlQ2FsbGJhY2suamF2YS4KCi0gRXh0ZW5kZWQgYXV0aGVudGljYXRpb24gaW50ZXJmYWNlIGluIENvbm5lY3Rpb24uamF2YSAoYmFja3dhcmRzIGNvbXBhdGlibGUpLgogIE5ldyBmdW5jdGlvbmFsaXR5OiBnZXRSZW1haW5pbmdBdXRoTWV0aG9kcygpLCBpc0F1dGhNZXRob2RBdmFpbGFibGUoKSwKICBpc0F1dGhlbnRpY2F0aW9uQ29tcGxldGUoKSBhbmQgaXNBdXRoZW50aWNhdGlvblBhcnRpYWxTdWNjZXNzKCkuCgotIFVzaW5nIGFuIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIgbGVhZHMgbm93IHRvIGFuIGV4Y2VwdGlvbgogIChpbnN0ZWFkIG9mIHJldHVybmluZyAiZmFsc2UiKS4gVXNlIGlzQXV0aE1ldGhvZEF2YWlsYWJsZSgpIGlmIHlvdSB3YW50IHRvIGNoZWNrCiAgZm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YgYW4gYXV0aGVudGljYXRpb24gbWV0aG9kLgoKLSBGaXhlZCBhIGJ1ZyBpbiBTQ1BDbGllbnQgd2hpY2ggc29tZXRpbWVzIGxlYWQgdG8gZmFpbGVkIGRvd25sb2Fkcy4KCi0gSW1wcm92ZWQgY2hhbm5lbCB3aW5kb3cgaGFuZGxpbmcuCgotIFJlbW92ZWQgYm9ndXMgKENWUykgdmVyc2lvbiBzdHJpbmcgZnJvbSBDb25uZWN0aW9uLmphdmEKCi0gQ2hhbmdlZCBjbGllbnQgaWRlbnRpZmljYXRpb24gc3RyaW5nIHRvICJHYW55bWVkX2J1aWxkWFhYIi4KCi0gQ2hhbmdlZCB0aGUgamFyIGZpbGUgbmFtaW5nIHNjaGVtZSAoZ2FueW1lZC1zc2gyLWJ1aWxkWFhYLmphcikuCgotIFN0YXJ0ZWQgYWRkaW5nIGxvZ2dpbmcgc3VwcG9ydCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIChjdXJyZW50bHkgb25seSBmb3IgZGV2ZWxvcG1lbnQpLgoKLSBDbGVhbnVwIG9mIGphdmFkb2MgYW5kIGNvbW1lbnRzIGF0IHNldmVyYWwgcGxhY2VzLgoKLSBSZXZlcnNlZCBvcmRlciBvZiBlbnRyaWVzIGluIEhJU1RPUlkuVFhUCgoKYnVpbGQyMDYsIDIwMDUtMDctMDQ6CgotIEZpeGVkIHNtYWxsIHJlc291cmNlIGlzc3VlIHdpdGggU0NQICh0aGFua3MgdG8gTWljaGHrbCBHaXJhdWQpLgoKLSBBZGRlZCBMb2NhbFN0cmVhbUZvcndhcmRlci4KCi0gQWRkZWQgSElTVE9SWS5UWFQKCgpidWlsZDIwNSwgMjAwNS0wNi0yNzoKCi0gSW5pdGlhbCByZWxlYXNlLgoK