LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rKioKKip8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KioKKip8IENvcHlyaWdodCAxOTk4LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4gLSBodHRwOi8vd3d3LnRpLmNvbS8gICAgICAgICB8KioKKip8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KioKKip8IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgICB8KioKKip8IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gICAgICAgICB8KioKKip8IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KioKKip8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KioKKip8ICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KioKKip8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KioKKip8IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgICB8KioKKip8IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsICAgICAgICB8KioKKip8IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiB8KioKKip8IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgICB8KioKKip8IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KioKKip8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KioKKiorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rKioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLyogTW9kdWxlOiAgICAgIFRJX0FkYXB0ZXJBcGlDLkgqLwovKiovCi8qIFB1cnBvc2U6ICAgICBUaGlzIG1vZHVsZSBjb250YWlucyAiQyIgaW50ZXJmYWNlIGZvciBUSSBXTEFOIFV0aWxpdHkgQWRhcHRlci4qLwovKiovCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwojaWZuZGVmIF9USV9BREFQVEVSX0FQSV9ICiNkZWZpbmUgX1RJX0FEQVBURVJfQVBJX0gKCiNpbmNsdWRlICJwYXJhbU91dC5oIgojaW5jbHVkZSAicm9hbWluZ01uZ3JUeXBlcy5oIgojaW5jbHVkZSAidGl3bG5pZi5oIgojaW5jbHVkZSAiVElfSVBDX0FwaS5oIgoKCiNpbmNsdWRlICJUSV9BZGFwdGVyUU9TLmgiCiNpbmNsdWRlICJUSV9BZGFwdGVyR1dTSS5oIgojaW5jbHVkZSAiVElfQWRhcHRlclNFQy5oIgojaW5jbHVkZSAiVElfQWRhcHRlclNHLmgiCiNpbmNsdWRlICJUSV9BZGFwdGVyUE0uaCIKCiNpZmRlZiBFWENfTU9EVUxFX0lOQ0xVREVECiAgICAjaW5jbHVkZSAiVElfQWRhcHRlckVYQy5oIgogICAgI2RlZmluZSBFWENfU1VQUE9SVF9IICAgIEFEQVBURVJfRVhDCiNlbHNlCiAgICAjZGVmaW5lIEVYQ19TVVBQT1JUX0gKI2VuZGlmIC8qRVhDX01PRFVMRV9JTkNMVURFRCovCgojaWZkZWYgVElfREJHICAgICAKI2luY2x1ZGUgIlRJX0FkYXB0ZXJEQkcuaCIKI2VuZGlmLyogVElfREJHKi8KCgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJDIiB7CiNlbmRpZgoKICAgIAovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9BZGFwdGVySW5pdAogICAgRGVzYzogICBDcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIFV0aWxpdHkgQWRhcHRlciBvYmplY3QKICAgIFBhcmFtczogcHN6RGV2aWNlTmFtZSAtIFBvaW50ZXIgdG8gYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgY29udGFpbnMgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgc3BlY2lmaWMgV0xBTiBkZXZpY2UsIElmIHRoaXMgcGFyYW1ldGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBOVUxMLCBUSV9BZGFwdGVySW5pdCgpIHJldHVybnMgYSBoYW5kbGUgdG8gdGhlIGFkYXB0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCB0aGF0IHdpbGwgd29yayB3aXRoIGZpcnN0IGZvdW5kZWQgV0xBTiBkZXZpY2UuCiAgICAKICAgIFJldHVybjogSWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgaGFuZGxlIHRvIHRoZSAKICAgICAgICAgICAgc3BlY2lmaWVkIEFkYXB0ZXIuIElmIHRoZSBmdW5jdGlvbiBmYWlscywgdGhlIHJldHVybiB2YWx1ZSBpcyBOVUxMLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgIFRJX0hBTkRMRSAgIFRJX0FkYXB0ZXJJbml0ICAgICAgICAgICAgICAodGlDSEFSKiAgICBwc3pEZXZpY2VOYW1lICk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9BZGFwdGVyRGVpbml0CiAgICBEZXNjOiAgIFRoaXMgZnVuY3Rpb24gZGVzdHJveXMgdGhlIFV0aWxpdHkgQWRhcHRlciBvYmplY3QuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgIHRpSU5UMzIgICAgIFRJX0FkYXB0ZXJEZWluaXQgICAgICAgICAgICAoVElfSEFORExFICBoQWRhcHRlciAgICAgICk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9HZXRBcGlWZXJzaW9uCiAgICBEZXNjOiAgIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBBUEkgdmVyc2lvbiBpbmZvcm1hdGlvbi4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgdGlJTlQzMiAgICAgVElfR2V0QXBpVmVyc2lvbiAgICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCB0aVVJTlQzMiogcHVBcGlWZXJzaW9uKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9HZXREcml2ZXJWZXJzaW9uCiAgICBEZXNjOiAgIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBkcml2ZXIgYW5kIGZpcm13YXJlIHZlcnNpb24gaW5mb3JtYXRpb24uIAogICAgICAgICAgICBQZHJ2VmVyc2lvbiBwb2ludHMgdG8gYSBUSVdMTl9WRVJTSU9OIHN0cnVjdHVyZSwgd2hpY2ggaXMgZGVmaW5lZCBpbgogICAgICAgICAgICB0aXdsbmlmLmguCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHBkcnZWZXJzaW9uIC0gQSBwb2ludGVyIHRvIFRJV0xOX1ZFUlNJT05fRVggc3RydWN0dXJlLgogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX0dldERyaXZlclZlcnNpb24gICAgICAoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElXTE5fVkVSU0lPTl9FWCogcGRydlZlcnNpb24gKTsgCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfR2V0Q3VycmVudEFkZHJlc3MKICAgIERlc2M6ICAgVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIE1BQyBBZGRyZXNzIG9mIHRoZSB3aXJlbGVzcyBjYXJkLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBwQ3VycmVudEFkZHIgLSBBIHBvaW50ZXIgdG8gT1NfODAyXzExX01BQ19BRERSRVNTIHRoYXQgY29udGFpbnMgdGhlIAogICAgICAgICAgICAgICAgICAgICAgICAgICBNQUMgQWRkcmVzcy4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9HZXRDdXJyZW50QWRkcmVzcyAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9TXzgwMl8xMV9NQUNfQUREUkVTUyogcEN1cnJlbnRBZGRyKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfR2V0RHJpdmVyQ2FwYWJpbGl0aWVzCiAgICBEZXNjOiAgIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBkcml2ZXIgY2FwYWJpbGl0aWVzIGxpc3QuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHBEcnZDYXBhYmlsaXRpZXMgLSBBIHBvaW50ZXIgdG8gYSBPU184MDJfMTFfRFJJVkVSX0NBUEFCSUxJVElFUyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIHRoZSBXaUxpbmuZIDQuMCBkcml2ZXIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXRpZXMuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfR2V0RHJpdmVyQ2FwYWJpbGl0aWVzKFRJX0hBTkRMRSAgaEFkYXB0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1NfODAyXzExX0RSSVZFUl9DQVBBQklMSVRJRVMqIHBEcnZDYXBhYmlsaXRpZXMpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfU2V0QlNTSUQKICAgIERlc2M6ICAgU3BlY2lmeSB0aGUgQlNTSUQgdG8gY29ubmVjdC4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgcEFkZHJCU1NJRCAtIEEgcG9pbnRlciB0byBhbiBPU184MDJfMTFfTUFDX0FERFJFU1Mgc3RydWN0dXJlLgogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX1NldEJTU0lEICAgICAgICAgICAgICAgICAoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1NfODAyXzExX01BQ19BRERSRVNTICpwQWRkckJTU0lEKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX0dldEJTU0lECiAgICBEZXNjOiAgIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBCU1NJRCBvZiB0aGUgY3VycmVudCBjb25uZWN0aW9uCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHBBZGRyQlNTSUQgLSBBIHBvaW50ZXIgdG8gYW4gT1NfODAyXzExX01BQ19BRERSRVNTIHN0cnVjdHVyZS4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9HZXRCU1NJRCAgICAgICAgICAgICAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9TXzgwMl8xMV9NQUNfQUREUkVTUyAqcEFkZHJCU1NJRCk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9HZXRCU1NJRExpc3QKICAgIERlc2M6ICAgVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIEJTU0lEIGxpc3QgZnJvbSB0aGUgZHJpdmVyIGFmdGVyIGEgc2NhbgogICAgICAgICAgICBvcGVyYXRpb24gY29tcGxldGVzLiBwcEJTU0lEbGlzdCBwb2ludHMgdG8gYW4gT1NfODAyXzExX0JTU0lEX0xJU1RfRVgKICAgICAgICAgICAgc3RydWN0dXJlLCB3aGljaCBpcyBkZWZpbmVkIGluIG9zRG90MTEuaC4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgcEFkZHJCU1NJRCAtIEEgcG9pbnRlciB0byBhbiBPU184MDJfMTFfQlNTSURfTElTVCBzdHJ1Y3R1cmUuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfR2V0QlNTSURMaXN0ICAgICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPU184MDJfMTFfQlNTSURfTElTVF9FWCoqIHBwQlNTSURsaXN0ICk7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX0dldEZ1bGxCU1NJRExpc3QKICAgIERlc2M6ICAgVGhpcyBmdW5jdGlvbiBpcyBhbG1vc3QgdGhlIHNhbWUgYXMgVElfU2V0QlNTSURMaXN0LCB0aGUgb25seSAKICAgICAgICAgICAgZGlmZmVyZW5jZSBpcyB0aGF0IGlzIHJldHJpZXZlcyBtb3JlIGluZm9ybWF0aW9uIHRoYW4gVElfU2V0QlNTSURMaXN0LgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBwcEJTU0lEbGlzdCAtIEEgcG9pbnRlciB0byBhbiBPU184MDJfMTFfQlNTSURfTElTVCBzdHJ1Y3R1cmUuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfR2V0RnVsbEJTU0lETGlzdCAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPU184MDJfMTFfQlNTSURfTElTVF9FWCoqIHBwQlNTSURsaXN0ICk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9HZXRTZWxlY3RlZEJTU0lESW5mbwogICAgRGVzYzogICBSZXRyaWV2ZXMgdGhlIEJTU0lEIGluZm9ybWF0aW9uIGZyb20gdGhlIGRyaXZlciBhZnRlciBhIHNjYW4gb3BlcmF0aW9uCiAgICAgICAgICAgIGNvbXBsZXRlcyBhbmQgc2VsZWN0IHdhcyBwZXJmb3JtZWQuIFRoZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgaXMgCiAgICAgICAgICAgIHB1Ymxpc2hlZCBpbiBPU184MDJfMTFfQlNTSURfRVggZm9ybWF0IChzZWUgVElfR2V0QlNTSURMaXN0KCkgY29tbWFuZCkuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHBTZWxlY3RlZEJTU0lESW5mbyAtIEEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSB0byBiZSBmaWxsZWQgd2l0aCB0aGUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkIEJTU0lEIGluZm9ybWF0aW9uLgogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX0dldFNlbGVjdGVkQlNTSURJbmZvICAgICAoVElfSEFORExFIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPU184MDJfMTFfQlNTSURfRVggICpwU2VsZWN0ZWRCU1NJREluZm8pOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfR2V0UHJpbWFyeUJTU0lESW5mbwogICAgRGVzYzogICBSZXRyaWV2ZXMgdGhlIHByaW1hcnkgQlNTSUQgaW5mb3JtYXRpb24gZnJvbSB0aGUgZHJpdmVyLCBpLmUuIHRoZSBCU1NJRAogICAgICAgICAgICAgICAgVGhlIFNUQSBpcyBjdXJyZW50bHkgY29ubmVjdGVkIHRvLiBUaGUgaW5mb3JtYXRpb24gc3RydWN0dXJlIGlzIAogICAgICAgICAgICBwdWJsaXNoZWQgaW4gT1NfODAyXzExX0JTU0lEX0VYIGZvcm1hdCAoc2VlIFRJX0dldEJTU0lETGlzdCgpIGNvbW1hbmQpLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBwU2VsZWN0ZWRCU1NJREluZm8gLSBBIHBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUgdG8gYmUgZmlsbGVkIHdpdGggdGhlIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBCU1NJRCBpbmZvcm1hdGlvbi4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9HZXRQcmltYXJ5QlNTSURJbmZvICAgICAgKFRJX0hBTkRMRSBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1NfODAyXzExX0JTU0lEX0VYICAqcFNlbGVjdGVkQlNTSURJbmZvKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1NldERlc2lyZWRDaGFubmVsCiAgICBEZXNjOiAgIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZGVzaXJlZCBvcGVyYXRpbmcgY2hhbm5lbC4gdURlc2lyZWRDaGFubmVsIAogICAgICAgICAgICBwb2ludHMgdG8gYSBjaGFubmVsIG51bWJlciwgd2hpY2ggY2FuIHJhbmdlIGZyb20gMSB0byAxNCwgCiAgICAgICAgICAgIDM2LDQwLDQ0LDQ4LDUyLDU2LDYwLDY0IGRlcGVuZGVkIGZyb20gbW9kZS4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgdURlc2lyZWRDaGFubmVsIC0gQSBwb2ludGVyIHRvIGEgdGlVSU5UMzIgdGhhdCBjb250YWlucyB0aGUgY2hhbm5lbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfU2V0RGVzaXJlZENoYW5uZWwgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aVVJTlQzMiAgIHVEZXNpcmVkQ2hhbm5lbCk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9HZXREZXNpcmVkQ2hhbm5lbAogICAgRGVzYzogICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgZGVzaXJlZCBvcGVyYXRpbmcgY2hhbm5lbC4gCiAgICAgICAgICAgIHB1RGVzaXJlZENoYW5uZWwgcG9pbnRzIHRvIGEgY2hhbm5lbCBudW1iZXIsIHdoaWNoIGNhbiByYW5nZSBmcm9tIAogICAgICAgICAgICAxIHRvIDE0LCAzNiw0MCw0NCw0OCw1Miw1Niw2MCw2NCBkZXBlbmRlZCBvbiBtb2RlIChhL2IvZykuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHB1RGVzaXJlZENoYW5uZWwgLSBBIHBvaW50ZXIgdG8gYSB0aVVJTlQzMiB0aGF0IGNvbnRhaW5zIHRoZSBjaGFubmVsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfR2V0RGVzaXJlZENoYW5uZWwgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aVVJTlQzMiogIHB1RGVzaXJlZENoYW5uZWwpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfR2V0Q3VycmVudENoYW5uZWwKICAgIERlc2M6ICAgVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIGN1cnJlbnQgb3BlcmF0aW5nIGNoYW5uZWwuIAogICAgICAgICAgICBwdURlc2lyZWRDaGFubmVsIHBvaW50cyB0byBhIGNoYW5uZWwgbnVtYmVyLCB3aGljaCBjYW4gcmFuZ2UgZnJvbSAKICAgICAgICAgICAgMSB0byAxNCwgMzYsNDAsNDQsNDgsNTIsNTYsNjAsNjQgZGVwZW5kZWQgb24gbW9kZSAoYS9iL2cpLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBwdUN1cnJlbnRDaGFubmVsIC0gQSBwb2ludGVyIHRvIGEgdGlVSU5UMzIgdGhhdCBjb250YWlucyB0aGUgY3VycmVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbCBudW1iZXIuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfR2V0Q3VycmVudENoYW5uZWwgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aVVJTlQzMiogIHB1Q3VycmVudENoYW5uZWwpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfR2V0RGVzaXJlZFJhdGUKICAgIERlc2M6ICAgVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIGRlc2lyZWQgdHJhbnNtaXNzaW9uIHJhdGUgZm9yIHRoZSBhZGFwdGVyLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBwdURlc2lyZWRSYXRlIC0gQSBwb2ludGVyIHRvIGEgdGlVSU5UMzIgdGhhdCBjb250YWlucyB0aGUgZGVzaXJlZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbiByYXRlCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfR2V0RGVzaXJlZFJhdGUgICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aVVJTlQzMiogIHB1RGVzaXJlZFJhdGUpOwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9HZXRDdXJyZW50UmF0ZQogICAgRGVzYzogICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgY3VycmVudCB0cmFuc21pc3Npb24gcmF0ZSBmb3IgdGhlIAogICAgICAgICAgICBhZGFwdGVyLiBUaGUgYWRhcHRlciBtYXkgY2hhbmdlIHRoZSBkZXNpcmVkIHJhdGUgaWYgdXNpbmcgQVVUTyByYXRlLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBwdUN1cnJlbnRSYXRlIC0gQSBwb2ludGVyIHRvIGEgdGlVSU5UMzIgdGhhdCBjb250YWlucyB0aGUgY3VycmVudCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbiByYXRlCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfR2V0Q3VycmVudFJhdGUgICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aVVJTlQzMiogIHB1Q3VycmVudFJhdGUpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfU2V0RnJhZ21lbnRUaHJlc2hvbGQKICAgIERlc2M6ICAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBjdXJyZW50IGZyYWdtZW50YXRpb24gdGhyZXNob2xkLgogICAgICAgICAgICBPbmx5IHBhY2tldHMgdGhhdCBhcmUgZ3JlYXRlciB0aGFuIHRoZSBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCBhcmUKICAgICAgICAgICAgZnJhZ21lbnRlZC4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgdUZyYWdtZW50VGhyZXNob2xkIC0gYSBwb2ludGVyIHRvIGEgdGlVSU5UMzIgdGhhdCBjb250YWlucyB0aGUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50YXRpb24gdGhyZXNob2xkIGluIGJ5dGVzLgogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX1NldEZyYWdtZW50VGhyZXNob2xkICAgICAoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlVSU5UMzIgICB1RnJhZ21lbnRUaHJlc2hvbGQgKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX0dldEZyYWdtZW50VGhyZXNob2xkCiAgICBEZXNjOiAgIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBjdXJyZW50IGZyYWdtZW50YXRpb24gdGhyZXNob2xkLgogICAgICAgICAgICBPbmx5IHBhY2tldHMgdGhhdCBhcmUgZ3JlYXRlciB0aGFuIHRoZSBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCAKICAgICAgICAgICAgYXJlIGZyYWdtZW50ZWQuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHVGcmFnbWVudFRocmVzaG9sZCAtIEEgcG9pbnRlciB0byBhIHRpVUlOVDMyIHRoYXQgY29udGFpbnMgdGhlIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCBpbiBieXRlcy4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9HZXRGcmFnbWVudFRocmVzaG9sZCAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpVUlOVDMyKiAgcHVGcmFnbWVudFRocmVzaG9sZCk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9TZXRCU1NUeXBlCiAgICBEZXNjOiAgIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgbmV0d29yayBtb2RlLCBlaXRoZXIgSW5mcmFzdHJ1Y3R1cmUgb3IgQWQgSG9jLgogICAgICAgICAgICB1QlNTVHlwZSBwb2ludHMgdG8gYW4gT1NfODAyXzExX05FVFdPUktfTU9ERSBlbnVtLCB3aGljaCBpcyBkZWZpbmVkIGluCiAgICAgICAgICAgIG9zRG90MTEuaC4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgdUJTU1R5cGUgLSBQb2ludHMgdG8gdGhlIG5ldHdvcmsgbW9kZSAoT1NfODAyXzExX05FVFdPUktfTU9ERSBlbnVtKToKICAgICAgICAgICAgICAgICAgICAgICBvczgwMl8xMUlCU1MgLSBmb3IgQWQgSG9jIG1vZGUuCiAgICAgICAgICAgICAgICAgICAgICAgb3M4MDJfMTFJbmZyYXN0cnVjdHVyZSAtIGZvciBpbmZyYXN0cnVjdHVyZSBtb2RlLgogICAgICAgICAgICAgICAgICAgICAgIG9zODAyXzExQXV0b1Vua25vd24gLSBmb3IgYXV0b21hdGljIG1vZGUgaW4gd2hpY2ggdGhlIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyIGNhbiBzd2l0Y2ggYmV0d2VlbiBBZCBIb2MgYW5kIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZyYXN0cnVjdHVyZSBtb2RlcyBhcyByZXF1aXJlZC4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9TZXRCU1NUeXBlICAgICAgICAgICAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9TXzgwMl8xMV9ORVRXT1JLX01PREUgIHVCU1NUeXBlICk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9HZXRCU1NUeXBlCiAgICBEZXNjOiAgIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBuZXR3b3JrIG1vZGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSAKICAgICAgICAgICAgVElfU2V0QlNTSUQoKS4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgcHVCU1NUeXBlIC0gQSBwb2ludGVyIHRvIHRoZSBuZXR3b3JrIG1vZGUgKE9TXzgwMl8xMV9ORVRXT1JLX01PREUgZW51bSk6CiAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBUSV9TZXRCU1NUeXBlLgogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX0dldEJTU1R5cGUgICAgICAgICAgICAgICAoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1NfODAyXzExX05FVFdPUktfTU9ERSogcHVCU1NUeXBlKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfU2V0QmVhY29uRmlsdGVyRGVzaXJlZFN0YXRlCiAgICBEZXNjOiAgIAogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICB1QmVhY29uRmlsdGVyTW9kZSAtIAogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX1NldEJlYWNvbkZpbHRlckRlc2lyZWRTdGF0ZShUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9TXzgwMl8xMV9CRUFDT05fRklMVEVSX01PREUgdUJlYWNvbkZpbHRlck1vZGUgKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX0dldEJlYWNvbkZpbHRlckRlc2lyZWRTdGF0ZQogICAgRGVzYzogICAKICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgdUJlYWNvbkZpbHRlck1vZGUgLSAKICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9HZXRCZWFjb25GaWx0ZXJEZXNpcmVkU3RhdGUoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aVVJTlQ4KiB1QmVhY29uRmlsdGVyTW9kZSApOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfU2V0UlRTVGhyZXNob2xkCiAgICBEZXNjOiAgIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgY3VycmVudCBSVFMgKFJlcXVlc3QgdG8gU2VuZCkgdGhyZXNob2xkLgogICAgICAgICAgICBUaGUgdmFsdWUgc3BlY2lmaWVzIHRoZSBwYWNrZXQgc2l6ZSwgaW4gYnl0ZXMsIGJleW9uZCB3aGljaCB0aGUgV0xBTgogICAgICAgICAgICBpbnZva2VzIGl0cyBSVFMvQ1RTIG1lY2hhbmlzbS4gUGFja2V0cyB0aGF0IGV4Y2VlZCB0aGUgc3BlY2lmaWVkIFJUUwogICAgICAgICAgICB0aHJlc2hvbGQgdHJpZ2dlciB0aGUgUlRTL0NUUyBtZWNoYW5pc20uIFRoZSBOSUMgdHJhbnNtaXRzIHNtYWxsZXIKICAgICAgICAgICAgcGFja2V0cyB3aXRob3V0IFJUUy9DVFMuCiAgICAgICAgICAgIEFuIFJUUyB0aHJlc2hvbGQgdmFsdWUgb2YgMCBpbmRpY2F0ZXMgdGhhdCB0aGUgTklDIHNob3VsZCB0cmFuc21pdCBhbGwKICAgICAgICAgICAgcGFja2V0cyB3aXRoIFJUUy9DVFMuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHVSVFNUaHJlc2hvbGQgLSBDb250YWlucyB0aGUgUlRTIFRocmVzaG9sZCBpbiBieXRlcy4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9TZXRSVFNUaHJlc2hvbGQgICAgICAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpVUlOVDMyICAgdVJUU1RocmVzaG9sZCAgKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX0dldFJUU1RocmVzaG9sZAogICAgRGVzYzogICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgY3VycmVudCBSVFMgKFJlcXVlc3QgdG8gU2VuZCkgdGhyZXNob2xkLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBwdVJUU1RocmVzaG9sZCAtIEEgcG9pbnRlciB0byBhIHRpVUlOVDMyIHRoYXQgY29udGFpbnMgdGhlIFJUUyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlc2hvbGQgaW4gYnl0ZXMuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfR2V0UlRTVGhyZXNob2xkICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aVVJTlQzMiogIHB1UlRTVGhyZXNob2xkICk7ICAKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1NldFNob3J0UHJlYW1ibGUKICAgIERlc2M6ICAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBjdXJyZW50IHByZWFtYmxlIGxlbmd0aC4gCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICB1U2hvcnRQcmVhbWJsZSAtIEluZGljYXRlcyB0aGUgcHJlYW1ibGUgbGVuZ3RoLiBBIHZhbHVlIG9mIDAgc3BlY2lmaWVzIGxvbmcgCiAgICAgICAgICAgICAgICAgICAgIHByZWFtYmxlcyBhbmQgYSB2YWx1ZSBvZiAxIHNwZWNpZmllcyBzaG9ydCBwcmVhbWJsZXMuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfU2V0U2hvcnRQcmVhbWJsZSAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aVVJTlQzMiAgIHVTaG9ydFByZWFtYmxlICk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9HZXRTaG9ydFByZWFtYmxlCiAgICBEZXNjOiAgIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBjdXJyZW50IHByZWFtYmxlIGxlbmd0aC4gQSB2YWx1ZSBvZiAwIAogICAgICAgICAgICAoemVybykgaW4gcHVTaG9ydFByZWFtYmxlIHNwZWNpZmllcyBsb25nIHByZWFtYmxlcyBhbmQgYSB2YWx1ZSBvZiAKICAgICAgICAgICAgMSAob25lKSBzcGVjaWZpZXMgc2hvcnQgcHJlYW1ibGVzLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBwdVNob3J0UHJlYW1ibGUgLSBBIHBvaW50ZXIgdG8gYSB0aVVJTlQzMiB0aGF0IGluZGljYXRlcyB0aGUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWFtYmxlIGxlbmd0aC4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9HZXRTaG9ydFByZWFtYmxlICAgICAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpVUlOVDMyKiAgcHVTaG9ydFByZWFtYmxlKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9TZXRTU0lECiAgICBEZXNjOiAgIFRoaXMgZnVuY3Rpb24gc2V0cyBkZXNpcmVkIFNTSUQuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHBTU0lEbmFtZSAtIFBvaW50ZXIgdG8gYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgY29udGFpbnMgYSAKICAgICAgICAgICAgICAgICAgICAgICAgZGVzaXJlZCBTU0lECiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfU2V0U1NJRCAgICAgICAgICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aVVJTlQ4KiAgIHBTU0lEbmFtZSAgICk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9HZXREZXNpcmVkU1NJRAogICAgRGVzYzogICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgZGVzaXJlZCBTU0lELgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBwU1NJRCAtIFBvaW50ZXIgdG8gYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgY29udGFpbnMgYSBkZXNpcmVkCiAgICAgICAgICAgICAgICAgICAgU1NJRC4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9HZXREZXNpcmVkU1NJRCAgICAgICAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9TXzgwMl8xMV9TU0lEKiBwU1NJRCAgKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX0dldEN1cnJlbnRTU0lECiAgICBEZXNjOiAgIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBjdXJyZW50IFNTSUQuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHBTU0lEIC0gUG9pbnRlciB0byBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBjb250YWlucyBhIGN1cnJlbnQKICAgICAgICAgICAgICAgICAgICBTU0lELgogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX0dldEN1cnJlbnRTU0lEICAgICAgICAgICAoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1NfODAyXzExX1NTSUQqIHBTU0lEICAgKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX0dldFN0YXRpc3RpY3MKICAgIERlc2M6ICAgVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgZHJpdmVyIHN0YXRpc3RpY3MuIHBTdGF0aXN0aWNzIHBvaW50cyB0byBhIAogICAgICAgICAgICBUSVdMTl9TVEFUSVNUSUNTIHN0cnVjdHVyZSwgd2hpY2ggaXMgZGVmaW5lZCBpbiB0aXdsbmlmLmguIFRoZSAKICAgICAgICAgICAgT1NfODAyXzExKiB0eXBlcyBhcmUgZGVmaW5lZCBpbiBvc0RvdDExLmguCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHBTdGF0aXN0aWNzIC0gQSBwb2ludGVyIHRvIGEgVElXTE5fU1RBVElTVElDUyBzdHJ1Y3R1cmUuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfR2V0U3RhdGlzdGljcyAgICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSVdMTl9TVEFUSVNUSUNTKiBwU3RhdGlzdGljcyApOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfR2V0VHhTdGF0aXN0aWNzCiAgICBEZXNjOiAgIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIGRyaXZlciBzdGF0aXN0aWNzLiBwU3RhdGlzdGljcyBwb2ludHMgdG8gYQogICAgICAgICAgICBUSVdMTl9UWF9TVEFUSVNUSUNTIHN0cnVjdHVyZSwgd2hpY2ggaXMgZGVmaW5lZCBpbiB0aXdsbmlmLmguIFRoZSAKICAgICAgICAgICAgT1NfODAyXzExKiB0eXBlcyBhcmUgZGVmaW5lZCBpbiBvc0RvdDExLmguIFRoZSBUSVdMTl9UWF9TVEFUSVNUSUNTCiAgICAgICAgICAgIHN0cnVjdHVyZSBpbmNsdWRlcyB0aGUgc3RydWN0dXJlIHR4RGF0YUNvdW50ZXJzX3QuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHBUeFN0YXRpc3RpY3MgLSBBIHBvaW50ZXIgdG8gYSBUSVdMTl9UWF9TVEFUSVNUSUNTIHN0cnVjdHVyZS4KICAgICAgICAgICAgY2xlYXJTdGF0c0ZsYWcgLSBJbmRpY2F0aW9uIHdoZXRoZXIgdG8gY2xlYXIgdGhlIHN0YXRpc3RpYyBjb3VudGVycwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwb24gcmVhZC4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9HZXRUeFN0YXRpc3RpY3MgICAgICAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJV0xOX1RYX1NUQVRJU1RJQ1MqIHBUeFN0YXRpc3RpY3MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQzMiBjbGVhclN0YXRzRmxhZyApOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKTmFtZTogICBUSV9FbmFibGVEaXNhYmxlUnhEYXRhRmlsdGVycwpEZXNjOiAgIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgUnggRGF0YSBGaWx0ZXIgZmVhdHVyZS4KClBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICBlbmFibGUgLSAwIHRvIGRpc2FibGUgdGhlIGZlYXR1cmUsIGFueSBvdGhlciB2YWx1ZSB0byBlbmFibGUKUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfRW5hYmxlRGlzYWJsZVJ4RGF0YUZpbHRlcnMoVElfSEFORExFIGhBZGFwdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aUJPT0wgZW5hYmxlZCk7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKTmFtZTogICBUSV9BZGRSeERhdGFGaWx0ZXIKRGVzYzogICBUaGlzIGZ1bmN0aW9uIGFkZHMgdGhlIGdpdmVuIGZpbHRlciB0byB0aGUgV0xBTiBkcml2ZXIncyBsaXN0IG9mCmRhdGEgZmlsdGVycy4KClBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KcFJlcXVlc3QgLSBBIHBvaW50ZXIgdG8gdGhlIGRhdGEgZmlsdGVyIHJlcXVlc3QuClJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MsIFJYX0ZJTFRFUl9BTFJFQURZX0VYSVNUUyBpZiBmaWx0ZXIKICAgICAgICBhbHJlYWR5IGV4aXN0cy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfQWRkUnhEYXRhRmlsdGVyICAgICAgICAgIChUSV9IQU5ETEUgaEFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElXTEFOX0RBVEFfRklMVEVSX1JFUVVFU1QgKiBwUmVxdWVzdCk7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKTmFtZTogICBUSV9HZXRSeERhdGFGaWx0ZXJzU3RhdGlzdGljcwpEZXNjOiAgIFRoaXMgZnVuY3Rpb24gYWRkcyB0aGUgZ2l2ZW4gZmlsdGVyIHRvIHRoZSBXTEFOIGRyaXZlcidzIGxpc3Qgb2YKICAgICAgICBkYXRhIGZpbHRlcnMuCgpQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgcFJlcXVlc3QgLSBBIHBvaW50ZXIgdG8gdGhlIGRhdGEgZmlsdGVyIHJlcXVlc3QuClJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX0dldFJ4RGF0YUZpbHRlcnNTdGF0aXN0aWNzKFRJX0hBTkRMRSBoQWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElXTEFOX0RBVEFfRklMVEVSX1NUQVRJU1RJQ1MgKiBwU3RhdGlzdGljcyk7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKTmFtZTogICBUSV9HZXRQb3dlckNvbnN1bXB0aW9uU3RhdGlzdGljcwpEZXNjOiAgIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBwb3dlciBjb25zdW1wdGlvbiBzdGF0aXN0aWN0cyBmcm9tIHRoZSBGVy4KClBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICBwU3RhdGlzdGljcyAtIEEgcG9pbnRlciB0byB0aGUgc3RhdGlzdGljcyBkYXRhIHN0cnVjdHVyZS4KUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfR2V0UG93ZXJDb25zdW1wdGlvblN0YXRpc3RpY3MoVElfSEFORExFIGhBZGFwdGVyLCBQb3dlckNvbnN1bXB0aW9uVGltZVN0YXRfdCAqIHBTdGF0aXN0aWNzKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKTmFtZTogICBUSV9SZW1vdmVSeERhdGFGaWx0ZXIKRGVzYzogICBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYSBwcmV2aW91c2x5IGFkZGVkIGZpbHRlciB3aXRoIHRoZSBnaXZlbgogICAgICAgIGRldGFpbHMgZnJvbSB0aGUgV0xBTiBkcml2ZXIncyBsaXN0IG9mIGRhdGEgZmlsdGVycy4gTm90ZSB0aGF0IHRoZQogICAgICAgIHJlcXVlc3QgbXVzdCBiZSBpZGVudGljYWwgdG8gdGhlIG9uZSBnaXZlbiB3aGVuIHRoZSBmaWx0ZXIgd2FzIGFkZGVkLgoKUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgIHBSZXF1ZXN0IC0gQSBwb2ludGVyIHRvIHRoZSBkYXRhIGZpbHRlciByZXF1ZXN0LgpSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLCBSWF9GSUxURVJfRE9FU19OT1RfRVhJU1QgaWYgZmlsdGVyCiAgICAgICAgZG9lc24ndCBleGlzdC4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfUmVtb3ZlUnhEYXRhRmlsdGVyICAgICAgICAgIChUSV9IQU5ETEUgaEFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElXTEFOX0RBVEFfRklMVEVSX1JFUVVFU1QgKiBwUmVxdWVzdCk7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfU2V0U3VwcG9ydGVkUmF0ZXMKICAgIERlc2M6ICAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSB0cmFuc21pc3Npb24gcmF0ZXMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIuCiAgICAgICAgICAgIFRoaXMgaXMgdGhlIGxpc3Qgb2YgYmFzaWMgYW5kIHN1cHBvcnRlZCByYXRlcy4gQmFzaWMgcmF0ZXMgaGF2ZSBNU0IKICAgICAgICAgICAgc2V0IHRvIDEgKG9uZSkuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHBTdXBwb3J0ZWRSYXRlc0xzdCAtIEEgcG9pbnRlciB0byBhIGJ1ZmZlciB0aGF0IGNvbnRhaW5zIGxpc3Qgb2YgcmF0ZXMuCiAgICAgICAgICAgIHVCdWZMZW5ndGggLSBDb250YWlucyBhIHNpemUgb2YgYnVmZmVyLgogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX1NldFN1cHBvcnRlZFJhdGVzICAgICAgICAoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlVSU5UOCogICBwU3VwcG9ydGVkUmF0ZXNMc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpVUlOVDMyICB1QnVmTGVuZ3RoICk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9HZXRTdXBwb3J0ZWRSYXRlcwogICAgRGVzYzogICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgdHJhbnNtaXNzaW9uIHJhdGVzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBwU3VwcG9ydGVkUmF0ZXNMc3QgLSBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdGhhdCBjb250YWlucyBsaXN0IG9mIHJhdGVzLgogICAgICAgICAgICB1QnVmTGVuZ3RoIC0gQ29udGFpbnMgYSBzaXplIG9mIGJ1ZmZlcgogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX0dldFN1cHBvcnRlZFJhdGVzICAgICAgICAoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlVSU5UOCogICBwU3VwcG9ydGVkUmF0ZXNMc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpVUlOVDMyICB1QnVmTGVuZ3RoICk7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfU2V0SUJTU1Byb3RlY3Rpb24KICAgIERlc2M6ICAgU2V0cyB0aGUgODAyLjExZyBleHRlbmRlZCByYXRlIHByb3RlY3Rpb24gKEVSUCkgY29uZmlndXJhdGlvbiBvZiAKICAgICAgICAgICAgdGhlIGRyaXZlci4gQ29uZmlndXJhdGlvbiBvZiBFUlAgaXMgb25seSBwb3NzaWJsZSB3aGVuIHRoZSBhZGFwdGVyIAogICAgICAgICAgICBpcyBvcGVyYXRpbmcgaW4gQWQgSG9jIG1vZGUuIEluIGluZnJhc3RydWN0dXJlIG1vZGUsIHRoZSBkcml2ZXIgdXNlcwogICAgICAgICAgICB0aGUgRVJQIG1ldGhvZCBzdXBwb3J0ZWQgYnkgdGhlIEFQLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICB1UHJvdGVjdGlvbiAtIEluZGljYXRlcyB0aGUgODAyLjExZyBwcm90ZWN0aW9ucy4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICBOb3RlOiAgIFRoaXMgZnVuY3Rpb24gc3VwcG9ydGVkIG9ubHkgb24gV2lMaW5rmSA0LjAgLSBiYXNlZCBkZXNpZ25zLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfU2V0SUJTU1Byb3RlY3Rpb24gICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aVVJTlQzMiAgdVByb3RlY3Rpb24gKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX0dldElCU1NQcm90ZWN0aW9uCiAgICBEZXNjOiAgIFJldHVybnMgdGhlIDgwMi4xMWcgZXh0ZW5kZWQgcmF0ZSBwcm90ZWN0aW9uIChFUlApIGNvbmZpZ3VyYXRpb24gb2YgCiAgICAgICAgICAgIHRoZSBkcml2ZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBUSV9TZXRJQlNTUHJvdGVjdGlvbigpLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBwdVByb3RlY3Rpb24gLSBBIHBvaW50ZXIgdG8gYSB0aVVJTlQzMiB0aGF0IGluZGljYXRlcyB0aGUgODAyLjExZwogICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0aW9ucy4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9HZXRJQlNTUHJvdGVjdGlvbiAgICAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpVUlOVDMyKiBwdVByb3RlY3Rpb24pOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfR2V0RHJpdmVyU3RhdGUKICAgIERlc2M6ICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgZHJpdmVyJ3Mgc3RhdGUuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHB1RHJpdmVyU3RhdGUgLSBBIHBvaW50ZXIgdG8gYSBkcml2ZXJTdGF0ZV9lIHRoYXQgaW5kaWNhdGVzIHRoZSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlciBzdGF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERSSVZFUl9TVEFURV9JRExFID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERSSVZFUl9TVEFURV9TQ0FOTklORyA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUklWRVJfU1RBVEVfU0VMRUNUSU5HID0gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERSSVZFUl9TVEFURV9DT05ORUNUSU5HID0gMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERSSVZFUl9TVEFURV9DT05ORUNURUQgPSA0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJJVkVSX1NUQVRFX0RJU0NPTk5FQ1RFRCA9IDUsCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfR2V0RHJpdmVyU3RhdGUgICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyU3RhdGVfZSogcHVEcml2ZXJTdGF0ZSApOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfU2V0U2hvcnRTbG90CiAgICBEZXNjOiAgIFNldHMgdGhlIDgwMi4xMWcgc2xvdCB0aW1lLiAKICAgICAgICAgICAgQSB2YWx1ZSBvZiAwICh6ZXJvKSBpbiB1U2hvcnRTbG90IGluZGljYXRlcyBhIGxvbmcgc2xvdCB0aW1lICgyMCB1U2VjKSAKICAgICAgICAgICAgQSB2YWx1ZSBvZiAxIChvbmUpIGluIHVTaG9ydFNsb3QgaW5kaWNhdGVzIGEgc2hvcnQgc2xvdCB0aW1lICg5IHVTZWMpLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICB1U2hvcnRTbG90IC0gSW5kaWNhdGVzIHRoZSA4MDIuMTFnIHNsb3QgdGltZS4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICBOb3RlOiBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRlZCBvbmx5IG9uIFdpTGlua5kgNC4wIC0gYmFzZWQgZGVzaWducy4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX1NldFNob3J0U2xvdCAgICAgICAgICAgICAoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlVSU5UMzIgIHVTaG9ydFNsb3QgICk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9HZXRTaG9ydFNsb3QKICAgIERlc2M6ICAgUmV0dXJucyB0aGUgODAyLjExZyBzbG90IHRpbWUuIFJlZmVyIHRvIFRJX1NldFNob3J0U2xvdC4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgcHVTaG9ydFNsb3QgLSBwb2ludGVyIHRvIGEgdGlVSU5UMzIgdGhhdCBpbmRpY2F0ZXMgdGhlIDgwMi4xMWcgc2xvdAogICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfR2V0U2hvcnRTbG90ICAgICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aVVJTlQzMiogcHVTaG9ydFNsb3QgKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1NldFR4UG93ZXJEYm0KICAgIERlc2M6ICAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBtYXhpbXVtIHN0YXRpb24gdHJhbnNtaXQgcG93ZXIgaW4gRGJtLiBUaGUgc3RhdGlvbiAKICAgICAgICAgICAgYWxzbyB0YWtlcyBpbnRvIGNvbnNpZGVyYXRpb24gdHdvIGFkZGl0aW9uYWwgcG93ZXIgbGV2ZWwgc2V0dGluZ3MgCiAgICAgICAgICAgIEFQLUlFIGFuZCBDaGlwIElELiBUaGUgZmluYWwgc2V0dGluZyBpcyB0aGUgbWluaW11bSBvZiBhbW9uZyB0aGVzZQogICAgICAgICAgICB0aHJlZSBzZXR0aW5ncy4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgdVR4UG93ZXIgLSBDb250YWlucyBhIHN0YXRpb24gcG93ZXIgbGV2ZWwKICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9TZXRUeFBvd2VyRGJtICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aVVJTlQ4ICB1VHhQb3dlcik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9HZXRUeFBvd2VyTGV2ZWwKICAgIERlc2M6ICAgUmV0cmlldmUgdGhlIGN1cnJlbnQgc3RhdGlvbiBwb3dlciBsZXZlbCB0YWJsZS4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgcHVUeFBvd2VyIC0gQSBwb2ludGVyIHRvIGEgdGlDSEFSIHRoYXQgY29udGFpbnMgdGhlIHN0YXRpb24gcG93ZXIgCiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsIHRhYmxlLgogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX0dldFR4UG93ZXJMZXZlbCAgICAgICAgICAoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlDSEFSKiBwdVR4UG93ZXIpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfR2V0VHhQb3dlckRibQogICAgRGVzYzogICBSZXRyaWV2ZSB0aGUgY3VycmVudCBUeCBQb3dlciBpbiBEYm0vMTAgdmFsdWUuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHB1VHhQb3dlciAtIEEgcG9pbnRlciB0byBhIHRpQ0hBUiB0aGF0IGNvbnRhaW5zIHRoZSBzdGF0aW9uIFRYIHBvd2VyCiAgICAgICAgICAgICAgICAgICAgICAgIGluIERibSB2YWx1ZS4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9HZXRUeFBvd2VyRGJtICAgICAgICAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpQ0hBUiogcHVUeFBvd2VyKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX0dldFN1cHBvcnRlZE5ldHdvcmtUeXBlcwogICAgRGVzYzogICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgc3VwcG9ydGVkIG5ldHdvcmsgdHlwZXMuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHBOZXRUeXBlTHN0IC0gUG9pbnRlciB0byB0aGUgYnVmZmVyIHRoYXQgY29udGFpbnMgbGlzdCBvZiBzdXBwb3J0ZWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29yayB0eXBlcy4KICAgICAgICAgICAgdU1heE5ldFR5cGVzIC0gTWF4aW11bSBudW1iZXIgb2YgdHlwZXMgdGhhdCB3aWxsIGNvbnRhaW5zIGluIHRoZSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIHBOZXRUeXBlTHN0LgogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX0dldFN1cHBvcnRlZE5ldHdvcmtUeXBlcyAoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1NfODAyXzExX05FVFdPUktfVFlQRSogcE5ldFR5cGVMc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpVUlOVDMyIHVNYXhOZXRUeXBlcyk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9TZXROZXR3b3JrVHlwZUluVXNlCiAgICBEZXNjOiAgIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgbmV0d29yayB0eXBlLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICB1TmV0VHlwZSAtIENvbnRhaW5zIG5ldHdvcmsgdHlwZToKICAgICAgICAgICAgICAgICAgICAgICAgb3M4MDJfMTFGSCwKICAgICAgICAgICAgICAgICAgICAgICAgb3M4MDJfMTFEUywKICAgICAgICAgICAgICAgICAgICAgICAgb3M4MDJfMTFPRkRNNSwKICAgICAgICAgICAgICAgICAgICAgICAgb3M4MDJfMTFPRkRNMjQsCiAgICAgICAgICAgICAgICAgICAgICAgIG9zODAyXzExT0ZETTI0X0FORF81IAogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX1NldE5ldHdvcmtUeXBlSW5Vc2UgICAgICAoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1NfODAyXzExX05FVFdPUktfVFlQRSAgIHVOZXRUeXBlICApOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfR2V0TmV0d29ya1R5cGVJblVzZQogICAgRGVzYzogICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgY3VycmVudCBuZXR3b3JrIHR5cGUgaW4gdXNlLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBwdU5ldFR5cGUgLSBQb2ludGVyIHRvIHRoZSBidWZmZXIgdGhhdCBjb250YWlucyB2YWx1ZSBvZiBuZXR3b3JrIHR5cGUuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfR2V0TmV0d29ya1R5cGVJblVzZSAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPU184MDJfMTFfTkVUV09SS19UWVBFKiAgcHVOZXRUeXBlICk7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfR2V0TnVtYmVyT2ZBbnRlbm5hcwogICAgRGVzYzogICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIGFudGVubmFzLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBwdU51bWJlck9mQW50ZW5uYXMgLSAKICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9HZXROdW1iZXJPZkFudGVubmFzICAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpVUlOVDMyKiAgcHVOdW1iZXJPZkFudGVubmFzICAgICk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9TZXRBbnRlbm5hRGl2ZXJzaXR5UGFyYW1zCiAgICBEZXNjOiAgIFRoaXMgZnVuY3Rpb24gc2V0cyB2YXJpb3VzIGFudGVubmEgZGl2ZXJzaXR5IHBhcmFtZXRlcnMuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHBBbnRlbm5hRGl2ZXJzaXR5T3B0aW9ucyAtIFBvaW50ZXIgdG8gYW50ZW5uYSBkaXZlcnNpdHkgcGFyYW1ldGVycyAKICAgICAgICAgICAgICAgICAgc3RydWN0dXJlIGhvbGRpbmcgcmVxdWlyZWQgcGFyYW1ldGVyczoKICAgICAgICAgICAgICAgICAgZW5hYmxlUnhEaXZlcnNpdHkgLSBzcGVjaWZpZXMgd2hldGhlciBhbnRlbm5hIGRpdmVyc2l0eSBzaG91bGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBlbmFibGVzIGZvciByZWNlcHRpb24uCiAgICAgICAgICAgICAgICAgIHJ4U2VsZWN0ZWRBbnRlbm5hIC0gc3BlY2lmaWVzIHdoaWNoIGFudGVubmEgdG8gdXNlIGZvciByZWNlcHRpb24uCiAgICAgICAgICAgICAgICAgIGVuYWJsZVR4RGl2ZXJzaXR5IC0gc3BlY2lmaWVzIHdoZXRoZXIgYW50ZW5uYSBkaXZlcnNpdHkgc2hvdWxkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGVuYWJsZXMgZm9yIHRyYW5zbWlzc2lvbi4KICAgICAgICAgICAgICAgICAgdHhTZWxlY3RlZEFudGVubmEgLSBzcGVjaWZpZXMgd2hpY2ggYW50ZW5uYSB0byB1c2UgZm9yIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbi4KICAgICAgICAgICAgICAgICAgcnhUeFNoYXJlZEFudHMgICAgLSBzcGVjaWZpZXMgd2hldGhlciB0byBzaGFyZSByZWNlcHRpb24gYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNtaXNzaW9uIGFudGVubmFzLgogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX1NldEFudGVubmFEaXZlcnNpdHlQYXJhbXMoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFRJV0xBTl9BTlRfRElWRVJTSVRZIHBBbnRlbm5hRGl2ZXJzaXR5T3B0aW9ucyk7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfR2V0UmVnRG9tYWluVGFibGUKICAgIERlc2M6ICAgVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHJlZ3VsYXJpdHkgZG9tYWluIHRhYmxlLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBwUmVnRG9tYWluVGFibGUgLSBQb2ludGVyIHRvIFRJV0xBTl9SRUdET01BSU5TIHN0cnVjdHVyZSB3aGljaCBpbmNsdWRlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWd1bGF0b3J5IGRvbWFpbnMgdGFibGUgYW5kIGl0cyBzaXplLgogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX0dldFJlZ0RvbWFpblRhYmxlKFRJX0hBTkRMRSAgaEFkYXB0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSVdMTl9SRUdET01BSU5TKiBwUmVnRG9tYWluVGFibGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX0VuYWJsZURpc2FibGVfODAyXzExZAogICAgRGVzYzogICBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIDgwMi4xMWQgcHJvdG9jb2wuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIGVuYWJsZURpc2FibGVfODAyXzExZCAtIEVuYWJsZSBvciBEaXNhYmxlIHZhbHVlCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfRW5hYmxlRGlzYWJsZV84MDJfMTFkICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aVVJTlQ4IGVuYWJsZURpc2FibGVfODAyXzExZCk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9HZXRfODAyXzExZAogICAgRGVzYzogICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB3aGV0aGVyIHRoZSA4MDIuMTFkIHByb3RvY29sIGluIGVuYWJsZWQgb3IgCiAgICAgICAgICAgIGRpc2FibGVkLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBlbmFibGVEaXNhYmxlXzgwMl8xMWQgLSBBIHBvaW50ZXIgdG8gYSB0aVVJTlQ4IHdoaWNoIHJldHVybnMgYW4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBvciBEaXNhYmxlIHZhbHVlLgogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX0dldF84MDJfMTFkICAgICAgICAgICAgICAoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlVSU5UOCAqZW5hYmxlRGlzYWJsZV84MDJfMTFkKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX0VuYWJsZURpc2FibGVfODAyXzExaAogICAgRGVzYzogICBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIDgwMi4xMWggcHJvdG9jb2wuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIGVuYWJsZURpc2FibGVfODAyXzExaCAtIEVuYWJsZSBvciBEaXNhYmxlIHZhbHVlCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfRW5hYmxlRGlzYWJsZV84MDJfMTFoICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aVVJTlQ4IGVuYWJsZURpc2FibGVfODAyXzExaCk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9HZXRfODAyXzExaAogICAgRGVzYzogICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB3aGV0aGVyIHRoZSA4MDIuMTFoIHByb3RvY29sIGluIGVuYWJsZWQgb3IKICAgICAgICAgICAgZGlzYWJsZWQuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIGVuYWJsZURpc2FibGVfODAyXzExaCAtIEEgcG9pbnRlciB0byBhIHRpVUlOVDggd2hpY2ggcmV0dXJucyBhbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIG9yIERpc2FibGUgdmFsdWUuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfR2V0XzgwMl8xMWggICAgICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aVVJTlQ4ICplbmFibGVEaXNhYmxlXzgwMl8xMWgpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfU2V0X2NvdW50cnlJZUZvcjJfNF9HaHoKICAgIERlc2M6ICAgCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIGNvdW50cnlJZSAtIAogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX1NldF9jb3VudHJ5SWVGb3IyXzRfR2h6ICAoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeV90IGNvdW50cnlJZSk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9HZXRfY291bnRyeUllRm9yMl80X0doegogICAgRGVzYzogICAKICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgY291bnRyeVN0cmluZyAtIAogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX0dldF9jb3VudHJ5SWVGb3IyXzRfR2h6ICAoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlVSU5UOCAqKmNvdW50cnlTdHJpbmcpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfU2V0X2NvdW50cnlJZUZvcjVfR2h6CiAgICBEZXNjOiAgIAogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBjb3VudHJ5SWUgLSAKICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9TZXRfY291bnRyeUllRm9yNV9HaHogICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cnlfdCBjb3VudHJ5SWUpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfR2V0X2NvdW50cnlJZUZvcjVfR2h6CiAgICBEZXNjOiAgIAogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBjb3VudHJ5U3RyaW5nIC0gCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfR2V0X2NvdW50cnlJZUZvcjVfR2h6ICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aVVJTlQ4ICoqY291bnRyeVN0cmluZyk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9TZXRfbWluTWF4RGZzQ2hhbm5lbHMKICAgIERlc2M6ICAgCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIERGU19DaGFubmVsUmFuZ2UgLSBNaW5pbXVtIGFuZCBtYXhpbXVtIGNhaG5uZWwgbnVtYmVycyBmb3Igd2hpY2ggCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERlMgaXMgdXNlZAogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX1NldF9taW5NYXhEZnNDaGFubmVscyAgICAoVElfSEFORExFICBoQWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERlNfQ2hhbm5lbFJhbmdlX3QgREZTX0NoYW5uZWxSYW5nZSk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9HZXRfbWluTWF4RGZzQ2hhbm5lbHMKICAgIERlc2M6ICAgCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIERGU19DaGFubmVsUmFuZ2UgLSBNaW5pbXVtIGFuZCBtYXhpbXVtIGNhaG5uZWwgbnVtYmVycyBmb3Igd2hpY2ggCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERlMgaXMgdXNlZAogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX0dldF9taW5NYXhEZnNDaGFubmVscyAgICAoVElfSEFORExFICBoQWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERlNfQ2hhbm5lbFJhbmdlX3QgKkRGU19DaGFubmVsUmFuZ2UpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfU3RhcnQKICAgIERlc2M6ICAgVGhpcyBjb21tYW5kIHN0YXJ0cyB0aGUgZHJpdmVyIG9wZXJhdGlvbi4gVGhlIGRyaXZlciB3aWxsIHN0YXJ0IAogICAgICAgICAgICBzY2FubmluZyBhbmQgd2lsbCB0cnkgdG8gY29ubmVjdCBhY2NvcmRpbmcgdG8gaXRzIGNvbmZpZ3VyYXRpb24uCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgTm90ZTogICBVc2VkIGZvciBMaW51eCBvbmx5LgoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgdGlJTlQzMiAgICAgVElfU3RhcnQgICAgICAgICAgICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1N0b3AKICAgIERlc2M6ICAgVGhpcyBjb21tYW5kIGJsb2NrcyB0aGUgZHJpdmVyJ3MgQVBJIGFuZCB0dXJucyBvZmYgdGhlIFdpTGlua5kgNC4wIAogICAgICAgICAgICBIVy4gVGhlIGRyaXZlciB3aWxsIGJlIGtlcHQgbG9hZGVkIGFuZCB3aWxsIGtlZXAgaXRzIGNvbmZpZ3VyYXRpb24KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICBOb3RlOiAgIFVzZWQgZm9yIExpbnV4IG9ubHkuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgdGlJTlQzMiAgICAgVElfU3RvcCAgICAgICAgICAgICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1N0YXJ0U00KICAgIERlc2M6ICAgVGhpcyBjb21tYW5kIHN0YXJ0cyB0aGUgU3VwcGxpY2FudCBNYW5hZ2VyIG1vZHVsZSBvcGVyYXRpb24uCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgIHRpSU5UMzIgICAgIFRJX1N0YXJ0U00gICAgICAgICAgICAgICAgICAoVElfSEFORExFICBoQWRhcHRlcik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9TdG9wU00KICAgIERlc2M6ICAgVGhpcyBjb21tYW5kIHN0b3BzIHRoZSBzdXBwbGljYW50IG1hbmFnZXIgb3BlcmF0aW9uLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICB0aUlOVDMyICAgICBUSV9TdG9wU00gICAgICAgICAgICAgICAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfR2V0UlNTSQogICAgRGVzYzogICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGN1cnJlbnQgUlNTSS4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgcFJTU0kgLSBUaGUgY3VycmVudCBSU1NJIGxldmVsLgogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX0dldFJTU0kgICAgICAgICAgICAgICAgICAoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlJTlQzMiogcFJTU0kpOyAKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX0dldFNOUgogICAgRGVzYzogICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGN1cnJlbnQgU05SLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBwU05SIC0gVGhlIGN1cnJlbnQgU05SIGxldmVsLgogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX0dldFNOUiAgICAgICAgICAgICAgICAgICAoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlVSU5UMzIqIHBTTlIpOyAKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX0Rpc2Fzc29jaWF0ZQogICAgRGVzYzogICBUaGlzIGNvbW1hbmQgc2V0cyBKdW5rIFNTSUQgdG8gdGhlIERyaXZlci4gSXQgbWFrZXMgdGhlIFdpTGlua5kgNC4wCiAgICAgICAgICAgIHRvIGRpc2Fzc29jaWF0ZSBhbnkgY3VycmVudCBBUCBhbmQgdG8gcmV0dXJuIHRvIGlkbGUgc3RhdGUuIFRoZSAKICAgICAgICAgICAgRHJpdmVyIGRvZXMgbm90IGF0dGVtcHQgdG8gY29ubmVjdCB0byBhbnkgb3RoZXIgQVAgdW50aWwgYSB2YWxpZCAKICAgICAgICAgICAgU1NJRCBpcyBzZXQuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgIHRpSU5UMzIgICAgIFRJX0Rpc2Fzc29jaWF0ZSAgICAgICAgICAgICAoVElfSEFORExFICBoQWRhcHRlcik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1JlZ2lzdGVyRXZlbnQKICAgIERlc2M6ICAgVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBkcml2ZXIgZXZlbnQsIHdoaWNoIHdpbGwgdHJpZ2dlciB0aGUgCiAgICAgICAgICAgIHNwZWNpZmllZCBjYWxsYmFjayBmdW5jdGlvbi4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgcEV2ZW50UGFyYW1zIC0gSW5mb3JtYXRpb24gYWJvdXQgdGhlIGV2ZW50IHRvIHdoaWNoIHlvdSBhcmUgcmVnaXN0ZXJpbmcuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfUmVnaXN0ZXJFdmVudCAgICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUENfRVZFTlRfUEFSQU1TKiAgICAgcEV2ZW50UGFyYW1zICk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9VblJlZ2lzdGVyRXZlbnQKICAgIERlc2M6ICAgVGhpcyBmdW5jdGlvbiB1bi1yZWdpc3RlcnMgYSBkcml2ZXIgZXZlbnQuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHBFdmVudFBhcmFtcyAtIEluZm9ybWF0aW9uIGFib3V0IHRoZSBldmVudCB0byB3aGljaCB5b3UgYXJlIAogICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlcmluZy4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9VblJlZ2lzdGVyRXZlbnQgICAgICAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQQ19FVkVOVF9QQVJBTVMqICAgICBwRXZlbnRQYXJhbXMgKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1N0YXJ0U2NhbgogICAgRGVzYzogICBTdGFydHMgYSBzY2FuIG9wZXJhdGlvbi4gVGhlIHVzZXIgY2FuIGRlZmluZSB0aGUgc2NhbiBwYXJhbWV0ZXJzLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBwU2NhblBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcmVxdWVzdGVkIHNjYW4uCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgTm90ZTogICB1cCB0byAxNiBzY2FubmVkIGNoYW5uZWxzLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfU3RhcnRTY2FuICAgICAgICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuX1BhcmFtc190ICpwU2NhblBhcmFtcyk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9TdG9wU2NhbgogICAgRGVzYzogICBTZW5kIGEgY29tbWFuZCB0byB0aGUgV2lMaW5rmSA0LjAgZHJpdmVyIHRvIHRlcm1pbmF0ZSB0aGUgc2NhbiBwcm9jZXNzLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICB0aUlOVDMyICAgICBUSV9TdG9wU2NhbiAgICAgICAgICAgICAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIpOwogICAgCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1NldFNjYW5Qb2xpY3kKICAgIERlc2M6ICAgU2VuZHMgYSBjb21tYW5kIGJ1ZmZlciB0byB0aGUgZHJpdmVyIHNjYW4gbWFuYWdlciBsb2dpYy4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgYnVmZmVyIC0gQSBwb2ludGVyIHRvIHRoZSBidWZmZXIgaG9sZGluZyB0aGUgc2NhbiBwb2xpY3kuCiAgICAgICAgICAgIGJ1ZmZlckxlbmd0aCAtIFRoZSBsZW5ndGggb2YgdGhlIGFib3ZlIGJ1ZmZlci4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9TZXRTY2FuUG9saWN5ICAgICAgICAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQ4KiBidWZmZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQxNiBidWZmZXJMZW5ndGgpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfR2V0U2NhbkJzc0xpc3QKICAgIERlc2M6ICAgUmV0cmlldmVzIHRoZSBzY2FuIG1hbmFnZXIgdHJhY2tpbmcgQlNTIGxpc3QuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIAogICAgICAgICAgICBiZSB1c2VkIGZvciBkZWJ1ZyBwdXJwb3NlcyBvbmx5LgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBic3NMaXN0IC0gQSBwb2ludGVyIHRvIGEgYnVmZmVyIGluIHdoaWNoIHRoZSBCU1MgbGlzdCB3aWxsIGJlIHN0b3JlZC4gICAgICAgICAgICAgICAgICAgICAgCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfR2V0U2NhbkJzc0xpc3QgICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBic3NMaXN0X3QqIGJzc0xpc3QpOwoKCgoKCgogICAgLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1dMQU5fSXNEcml2ZXJSdW4gCiAgICBEZXNjOiAgIFRoaXMgY29tbWFuZCByZXR1cm5zIHRoZSBkcml2ZXIgc3RhdHVzLCBydW5uaW5nIG9yIElkbGUuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHBiU3RhdHVzIC0gVGhlIERyaXZlciBzdGF0dXMsIHJ1bm5pbmcgb3IgSURMRS4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9XTEFOX0lzRHJpdmVyUnVuICAgICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlCT09MKiBwYlN0YXR1cyk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9TZXQ0WFN0YXRlICAgCiAgICBEZXNjOiAgIFRoaXMgY29tbWFuZCBzZXRzIHRoZSA0WCBzdGF0ZS4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgYlN0YXR1cyAtIFRSVUUtNFggZW5hYmxlZCwgRkFMU0UgliBkaXNhYmxlZC4uCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgTm90ZTogICBOT1QgU1VQUE9SVEVEICEhIQogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfU2V0NFhTdGF0ZSAgICAgICAgICAgICAgICAgICAoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpQk9PTCBiU3RhdHVzKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX0dldDRYU3RhdGUgICAKICAgIERlc2M6ICAgVGhpcyBjb21tYW5kIHJldHVybnMgNFggc3RhdHVzLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBwYlN0YXR1cyAtIC4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9HZXQ0WFN0YXRlICAgICAgICAgICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlCT09MKiBwYlN0YXR1cyk7CgogCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1NldEV4dFJhdGVzSUUgICAgCiAgICBEZXNjOiAgIFRoaXMgY29tbWFuZCBzZXRzIHRoZSBEcmFmdCBudW1iZXIuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHVFeHRSYXRlc0lFIC0gVGhlIERyYWZ0IG51bWJlcjogNSBvciBlYXJsaWVyLCA2IG9yIGxhdGVyLi4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9TZXRFeHRSYXRlc0lFICAgICAgICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlVSU5UMzIgdUV4dFJhdGVzSUUpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfR2V0RXh0UmF0ZXNJRSAgICAKICAgIERlc2M6ICAgVGhpcyBjb21tYW5kIHJldHVybnMgdGhlIERyYWZ0IG51bWJlci4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgcHVFeHRSYXRlc0lFIC0gVGhlIERyYWZ0IG51bWJlcjogNSBvciBlYXJsaWVyLCA2IG9yIGxhdGVyLi4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9HZXRFeHRSYXRlc0lFICAgICAgICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlVSU5UMzIqIHB1RXh0UmF0ZXNJRSk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9TZXRFYXJseVdha2V1cE1vZGUgICAgCiAgICBEZXNjOiAgIFRoaXMgY29tbWFuZCBzZXRzIHRoZSBFYXJseSBXYWtldXAgbW9kZS4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgdUVhcmx5V2FrZXVwIC0gVGhlIGVhcmx5IFdha2V1cCAgbW9kZTogMCAtIGRpc2FibGVkLCAxIC0gZW5hYmxlZAogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgICBUSV9TZXRFYXJseVdha2V1cE1vZGUgICAgICAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aVVJTlQ4IHVFYXJseVdha2V1cCk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9HZXRFYXJseVdha2V1cE1vZGUgICAgCiAgICBEZXNjOiAgIFRoaXMgY29tbWFuZCByZXR1cm5zIHRoZSBFYXJseSBXYWtldXAgbW9kZS4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgdUVhcmx5V2FrZXVwIC0gVGhlIGVhcmx5IFdha2V1cCAgbW9kZTogMCAtIGRpc2FibGVkLCAxIC0gZW5hYmxlZAogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgICBUSV9HZXRFYXJseVdha2V1cE1vZGUgICAgICAgICAoVElfSEFORExFICBoQWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpVUlOVDgqIHVFYXJseVdha2V1cCk7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfU2V0Um9hbWluZ0NvbmZpZ3VyYXRpb24gIAogICAgRGVzYzogICBUaGUgVElfU2V0Um9hbWluZ0NvbmZpZ3VyYXRpb24oKSBmdW5jdGlvbiBzZW5kcyBhIGNvbW1hbmQgYnVmZmVyIHRvIAogICAgICAgICAgICB0aGUgZHJpdmVyIHJvYW1pbmcgbWFuYWdlciBsb2dpYy4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgYnVmZmVyIC0gVGhlIGNvbW1hbmQgYnVmZmVyLgogICAgICAgICAgICBidWZmZXJMZW5ndGggLSBUaGUgcm9hbSBjb21tYW5kIGJ1ZmZlciBsZW5ndGggKGJ5dGVzKS4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9TZXRSb2FtaW5nQ29uZmlndXJhdGlvbiAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVDgqIGJ1ZmZlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQxNiBidWZmZXJMZW5ndGgpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfR2V0Um9hbWluZ0NvbmZpZ3VyYXRpb24gIAogICAgRGVzYzogICBUaGUgVElfU2V0Um9hbWluZ0NvbmZpZ3VyYXRpb24oKSBmdW5jdGlvbiBzZW5kcyBhIGNvbW1hbmQgYnVmZmVyIHRvIAogICAgICAgICAgICB0aGUgZHJpdmVyIHJvYW1pbmcgbWFuYWdlciBsb2dpYy4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgYnVmZmVyIC0gVGhlIGNvbW1hbmQgYnVmZmVyLgogICAgICAgICAgICBidWZmZXJMZW5ndGggLSBUaGUgcm9hbSBjb21tYW5kIGJ1ZmZlciBsZW5ndGggKGJ5dGVzKS4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9HZXRSb2FtaW5nQ29uZmlndXJhdGlvbiAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVDgqIGJ1ZmZlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQxNiBidWZmZXJMZW5ndGgpOwoKCgoKLyogUExUICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1BMVF9SZWFkUmVnaXN0ZXIgCiAgICBEZXNjOiAgIFRoaXMgY29tbWFuZCByZWFkcyBhIGZpcm13YXJlIHJlZ2lzdGVyIHZhbHVlLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICB1UmVnaXN0ZXJBZGRyICAtIFJlZ2lzdGVyIGFkZHJlc3MuCiAgICAgICAgICAgIHB1UmVnaXN0ZXJEYXRhIC0gUG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgZGF0YS4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgdGlJTlQzMiAgICAgVElfUExUX1JlYWRSZWdpc3RlciAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVDMyIHVSZWdpc3RlckFkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVJTlQzMiBwdVJlZ2lzdGVyRGF0YSApOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfUExUX1dyaXRlUmVnaXN0ZXIgICAgCiAgICBEZXNjOiAgIFRoaXMgY29tbWFuZCB3cml0ZXMgYSBmaXJtd2FyZSByZWdpc3RlciB2YWx1ZS4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgdVJlZ2lzdGVyQWRkciAtIFJlZ2lzdGVyIGFkZHJlc3MuCiAgICAgICAgICAgIHVSZWdpc3RlckRhdGEgLSByZWdpc3RlciBkYXRhLgogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICB0aUlOVDMyICAgICBUSV9QTFRfV3JpdGVSZWdpc3RlciAgICAoVElfSEFORExFICBoQWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMzIgdVJlZ2lzdGVyQWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMzIgdVJlZ2lzdGVyRGF0YSApOwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9QTFRfUnhQZXJTdGFydCAgIAogICAgRGVzYzogICBTdGFydCBvciByZXN1bWUgdGhlIFBFUiBtZWFzdXJlbWVudC4gCiAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBwdXQgdGhlIGRldmljZSBpbiBwcm9taXNjdW91cyBtb2RlLCBhbmQgcmVzdW1lIGNvdW50ZXJzIHVwZGF0ZS4gCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgIHRpSU5UMzIgICAgIFRJX1BMVF9SeFBlclN0YXJ0ICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1BMVF9SeFBlclN0b3AgICAgCiAgICBEZXNjOiAgIFN0b3AgUnggUEVSIG1lYXN1cmVtZW50cy4gCiAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gc3RvcCBjb3VudGVycyB1cGRhdGUgYW5kIG1ha2UgaXQgaXMgc2FmZSB0byByZWFkIHRoZSBQRVIgdGVzdCByZXN1bHQuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgIHRpSU5UMzIgICAgIFRJX1BMVF9SeFBlclN0b3AgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1BMVF9SeFBlckNsZWFyICAgCiAgICBEZXNjOiAgIENsZWFyIHRoZSBSeCBQRVIgdGVzdCByZXN1bHRzLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICB0aUlOVDMyICAgICBUSV9QTFRfUnhQZXJDbGVhciAgICAgICAoVElfSEFORExFICBoQWRhcHRlcik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9QTFRfUnhQZXJHZXRSZXN1bHRzICAKICAgIERlc2M6ICAgR2V0IHRoZSBsYXN0IFJ4IFBFUiB0ZXN0IHJlc3VsdHMuCiAgICAgICAgICAgIFRoZSBSWCBQRVIgdGVzdCBpcyBjb25kdWN0ZWQgaW4gb3JkZXIgdG8gZXZhbHVhdGUgdGhlIFBFUiBvZiByZWNlaXZlZCBwYWNrZXRzIGFuZCBpcyBiYXNpY2FsbHkgZG9uZSBieSBtZWFzdXJpbmcgdGhlIHJhdGlvIGJldHdlZW4gdGhlIGFtb3VudCBvZiBwYWNrZXRzIHJlY2VpdmVkIHdpdGggRkNTIGVycm9ycyBhbmQgdGhlIHRvdGFsIGFtb3VudCBvZiBwYWNrZXRzIHJlY2VpdmVkIGF0IGEgY2VydGFpbiBwZXJpb2Qgb2YgdGltZS4KICAgICAgICAgICAgWW91IGNhbiBTdGFydCBhbmQgU3RvcCB0aGUgZnJhbWUgYWNjdW11bGF0aW9uIHNldmVyYWwgdGltZXMsIGFuZCByZWFkIHRoZSB0b3RhbCBmcmFtZSBjb3VudCBhZnRlciB0aGUgbGFzdCBTdG9wIGNvbW1hbmQuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHBQbHRSeFBlciAtIFRoZSBQTFQgUEVSIHJlc3VsdHMuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgIHRpSU5UMzIgICAgIFRJX1BMVF9SeFBlckdldFJlc3VsdHMgIChUSV9IQU5ETEUgIGhBZGFwdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsdFJ4UGVyX3QqIHBQbHRSeFBlciApOwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9QTFRfVHhDVyAKICAgIERlc2M6ICAgR2VuZXJhdGUgY2FycmllciB3YXZlIGluIGEgc3BlY2lmaWMgY2hhbm5lbCBhbmQgYmFuZC4uCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHBQbHRUeENXIC0gIFRoZSBDYXJyaWVyIHdhdmUgY2hhbm5lbCBhbmQgYmFuZC4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgdGlJTlQzMiAgICAgVElfUExUX1R4Q1cgICAgICAgICAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdENtZENoYW5uZWxCYW5kX3QqIHBQbHRUeENXKTsKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfUExUX1R4Q29udGl1ZXMgICAKICAgIERlc2M6ICAgQ29udGludW91cyB0cmFuc21pdCBzZXJpZXMgb2YgbnVtYmVycyB3aXRoIGEgdmFsaWQgTUFDIGhlYWRlciAoCiAgICAgICAgICAgICJDQUZFIEJBQkUiICYgIkRFQUQgQkVFRiIgYXMgTUFDIGFkZHJlc3MpLiBIb3dldmVyIHRoZXJlIGlzIG5vIDgwMi4xMSBhaXIgYWNjZXNzIGNvbXBsaWFuY2UuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHBQbHRUeENvbnRpbnVlcyAtICBJbmZybWF0aW9uIGFib3V0IGNvbnRpbnVlc3MgdHJhbnNtaXRpb24uCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgIHRpSU5UMzIgICAgIFRJX1BMVF9UeENvbnRpdWVzICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsdFR4Q29udGludWVzX3QqIHBQbHRUeENvbnRpbnVlcyk7Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1BMVF9UeFN0b3AgICAKICAgIERlc2M6ICAgU3RvcCBwYWNrZXQgdHJhbnNtaXNzaW9uIGluaXRpYXRlZCBieSB0aGUgVElfUExUX1R4Q1coKSBhbmQgVElfUExUX1R4Q29udGl1ZXMoKSBmdW5jdGlvbnMuCiAgICBQYXJhbXM6IGhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgIHRpSU5UMzIgICAgIFRJX1BMVF9UeFN0b3AgICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1BMVF9SZWFkTUlCICAKICAgIERlc2M6ICAgUmVhZHMgYSBQTFQgTUlCLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBwTWliIC0gSG9sZHMgdGhlIE1JQiBzdHJ1Y3R1cmUuCiAgICBSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgIHRpSU5UMzIgICAgIFRJX1BMVF9SZWFkTUlCICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBMVF9NSUJfdCogcE1pYik7Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1BMVF9Xcml0ZU1JQiAKICAgIERlc2M6ICAgV3JpdGVzIGEgUExUIE1JQi4KICAgIFBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgcE1pYiAtIEhvbGRzIHRoZSBNSUIgc3RydWN0dXJlLgogICAgUmV0dXJuOiBUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICB0aUlOVDMyICAgICBUSV9QTFRfV3JpdGVNSUIgICAgICAgICAoVElfSEFORExFICBoQWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTFRfTUlCX3QqIHBNaWIpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgVFggQ2FsaWJyYXRpb24gZnVuY3Rpb25zCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgIE5hbWU6ICAgVElfUExUX1R4Q2FsR2FpbkdldAkKICAgIERlc2M6CVJldHJpZXZlcyB0aGUgVFggY2hhaW4gZ2FpbiBzZXR0aW5ncy4KICAgIFBhcmFtczoJaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgICAgICAgICAgcFBMVEdhaW5HZXQgLSBIb2xkcyB0aGUgcmV0dXJuIGdhaW4gcmVzdWx0cy4KICAgIFJldHVybjoJVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCgkKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoJdGlJTlQzMgkJVElfUExUX1R4Q2FsR2FpbkdldAkJKFRJX0hBTkRMRSAgaEFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGx0R2FpbkdldF90KiBwUExUR2FpbkdldCk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9QTFRfVHhDYWxHYWluQWRqdXN0CQogICAgRGVzYzoJQ2hhbmdlcyB0aGUgVFggY2hhaW4gZ2FpbiBzZXR0aW5ncy4KICAgICAgICAgICAgVmFsdWUgaXMgcHJvdmlkZWQgaW4gMC4yNSBkQiBzdGVwcy4gKGUuZy4gMHhmZSBpcyAtMC41ZEIgOyAweDEwIGlzICs0IGRCKQogICAgUGFyYW1zOgloQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICB1VHhHYWluQ2hhbmdlIC0gdGhlIFRYIGdhaW4gY2hhbmdlIGZyb20gY3VycmVudCB2YWx1ZSBpbiAyJ3MgY29tcGxlbWVudC4KCQkJCVZhbHVlIGlzIGRlZmluZWQgaW4gc3RlcHMgb2YgMC4yNWRCLgogICAgUmV0dXJuOglUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KCQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgl0aUlOVDMyCQlUSV9QTFRfVHhDYWxHYWluQWRqdXN0CShUSV9IQU5ETEUgIGhBZGFwdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpSU5UMzIgICB1VHhHYWluQ2hhbmdlKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1BMVF9UeENhbFN0YXJ0CQogICAgRGVzYzoJVGhpcyBQTFQgZnVuY3Rpb24gaGFuZGxlcyBhbGwgdGhlIGFjdGl2aXRpZXMgcmVxdWlyZWQgYmVmb3JlIGluaXRpYXRpbmcgdGhlIFRYIGNhbGlicmF0aW9uIHByb2NlZHVyZS4KICAgICAgICAgICAgQXMgcGFydCBvZiBpdCBhY3Rpdml0aWVzIGl0IHNob3VsZCBtYWtlIHN1cmUgdGhhdCBDTFBDIGlzIGRpc2FibGVkIGFuZCB0aGUgZ2FpbiBjb250cm9sIGxvb3AgaXMgb3Blbi4gICAgICAgICAgICAKICAgIFBhcmFtczoJaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KCQkJcFBMVFR4Q2FsIC0gQmFuZCwgQ2hhbm5lbCwgUmVmZXJlbmNlIFR4IHBvd2VyLgogICAgUmV0dXJuOglUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KCQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgl0aUlOVDMyCQlUSV9QTFRfVHhDYWxTdGFydAkoVElfSEFORExFICBoQWRhcHRlciwKCQkJCQkJCQkJIFBsdFR4Q2FsaWJyYXRpb25SZXF1ZXN0X3QqIHBQTFRUeENhbCk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9QTFRfVHhDYWxTdG9wCQogICAgRGVzYzoJVGhpcyBQTFQgZnVuY3Rpb24gaXMgYSBjbGVhbnVwIGZ1bmN0aW9ucyBmb3IgdGhlIHJhZGlvIHRvIGJlIGFibGUgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uCiAgICAgICAgICAgIEFzIHBhcnQgb2YgaXRzIGFjdGl2aXRpZXMgaXQgc2hvdWxkIHB1dCB0aGUgQ0xQQyBtb2RlIGJhY2sgaW50byBvcGVyYXRpb24uICAgICAgICAgICAgCiAgICBQYXJhbXM6CWhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICBSZXR1cm46CVRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgoJCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCXRpSU5UMzIJCVRJX1BMVF9UeENhbFN0b3AJKFRJX0hBTkRMRSAgaEFkYXB0ZXIpOwogICAgCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1BMVF9UeENhbFN0b3AJCiAgICBEZXNjOglUaGlzIFBMVCBmdW5jdGlvbiBwcm92aWRlcyB0aGUgYWxsIGluZm9ybWF0aW9uIHJlcXVpcmVkIGJ5IHRoZSB1cHBlciAKICAgICAgICAgICAgZHJpdmVyIGluIG9yZGVyIHRvIHVwZGF0ZSB0aGUgTlZTIGltYWdlLiBJdCByZWNlaXZlZCBhIHBhcmFtZXRlciAKICAgICAgICAgICAgZGVmaW5pbmcgdGhlIHR5cGUgb2YgdXBkYXRlIGluZm9ybWF0aW9uIHJlcXVpcmVkIGFuZCBwcm92aWRlcyBhbiBhcnJheSAKICAgICAgICAgICAgb2YgZWxlbWVudHMgZGVmaW5pbmcgdGhlIGRhdGEgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgTlZTIGltYWdlIGFuZCAKICAgICAgICAgICAgdGhlIGJ5dGUgb2Zmc2V0IGluIHdoaWNoIHRoZXkgc2hvdWxkIGJlIHdyaXR0ZW4uICAgICAgICAgICAgCiAgICBQYXJhbXM6CWhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHBQTFRfTlZTVXBkYXRlQnVmZmVyIC0gVGhlIGRhdGEgdG8gYmUgdXBkYXRlZCBpbiB0aGUgTlZTIGZpbGUuCiAgICBSZXR1cm46CVRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgoJCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCXRpSU5UMzIJCVRJX1BMVF9SeFR4Q2FsTlZTVXBkYXRlQnVmZmVyCShUSV9IQU5ETEUgIGhBZGFwdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbHROdnNSZXN1bHRzQnVmZmVyX3QqIHBQTFRfTlZTVXBkYXRlQnVmZmVyKTsKCiAgICAKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfUExUX1R4Q2FsR2FpbkFkanVzdAkKICAgIERlc2M6CVRoaXMgUExUIGZ1bmN0aW9uIHBlcmZvcm0gYSBSU1NJIG1lYXN1cmVtZW50IG9uIHRoZSBzZWxlY3RlZCBjaGFubmVsLCAKICAgICAgICAgICAgYW5kIHJldHVybnMgdGhlIGRhdGEgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgTlZTIGltYWdlIGFuZCAKICAgICAgICAgICAgdGhlIGJ5dGUgb2Zmc2V0IGluIHdoaWNoIHRoZXkgc2hvdWxkIGJlIHdyaXR0ZW4uIAogICAgUGFyYW1zOgloQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBwUGx0UnhDYWxpYnJhdGlvbl90IC0gVGhlIGlucHV0IGFuZCBvdXRwdXQgcGFyYW1ldHJzIG5lZWRlZCBmb3IgdGhlIFJYIGNhbGlicmF0aW9uLgogICAgUmV0dXJuOglUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KCQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgl0aUlOVDMyCQlUSV9QTFRfUnhDYWwoVElfSEFORExFICBoQWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbHRSeENhbGlicmF0aW9uUmVxdWVzdF90KiBwUGx0UnhDYWxpYnJhdGlvbl90KTsgCgogICAgCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1BMVF9SYWRpb1R1bmUgCiAgICBEZXNjOiAgIEdlbmVyYXRlIGNhcnJpZXIgd2F2ZSBpbiBhIHNwZWNpZmljIGNoYW5uZWwgYW5kIGJhbmQuLgogICAgUGFyYW1zOiBoQWRhcHRlciAtIFRoZSBBZGFwdGVyIGhhbmRsZSByZXR1cm5lZCBieSBUSV9BZGFwdGVySW5pdCgpLgogICAgICAgICAgICBUZXN0Q21kQ2hhbm5lbEJhbmRfdCAtICBUaGUgY2hhbm5lbCBhbmQgYmFuZC4KICAgIFJldHVybjogVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgdGlJTlQzMiAgICAgVElfUExUX1JhZGlvVHVuZSAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RDbWRDaGFubmVsQmFuZF90KiBwQ2hhbm5lbEJhbmQpOwoKI2lmZGVmIF9XSU5ET1dTCiNlbmRpZiAKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgpOYW1lOiAgIFRJX1BMVF9UeFBvd2VyUmVmIApEZXNjOiAgIFNldCBUeCBwb3dlciByZWZlcmVuY2UuClBhcmFtczogaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KdVR4UG93ZXIgLSAgVHggcG93ZXIgaW4gRGJtLzEwLgpSZXR1cm46IFRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoJdGlJTlQzMiAgICAgVElfUExUX1R4UG93ZXJSZWYJCSAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIsCgkJCQkJCQkJCQkJIHRpVUlOVDMyIHVUeFBvd2VyKTsKCgkKCiNpZmRlZiBUSV9EQkcKI2lmZGVmIERSSVZFUl9QUk9GSUxJTkcKICAgIHRpSU5UMzIgICAgIFRJX1Byb2ZpbGVSZXBvcnQgICAgICAgICAgICAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIpOwogICAgdGlJTlQzMiAgICAgVElfQ3B1RXN0aW1hdG9yQ29tbWFuZCAgICAgICAgICAoVElfSEFORExFICBoQWRhcHRlciwgdGlVSU5UOCB1VHlwZSwgdGlVSU5UMzIgdURhdGEpOwojZW5kaWYKI2VuZGlmCgogICAgdGlJTlQzMiAgICAgVElfT3Blbl9FQVBPTF9JbnRlcmZhY2UgICAgICAgICggVElfSEFORExFICBoQWRhcHRlcik7CiAgICB0aUlOVDMyICAgICBUSV9DbG9zZV9FQVBPTF9JbnRlcmZhY2UgICAgICAgKCBUSV9IQU5ETEUgIGhBZGFwdGVyKTsKICAgIHRpSU5UMzIgICAgIFRJX1NlbmRfRUFQT0xfUGFja2V0ICAgICAgICAgICAoIFRJX0hBTkRMRSAgaEFkYXB0ZXIsIHRpVk9JRCogcERhdGEsIHRpVUlOVDMyIHVTaXplICk7CiAgICB0aUlOVDMyICAgICBUSV9HZXRBc3NvY2lhdGlvbkluZm8gICAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIsIE9TXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTioqIHBwSW5mbyApOwoKICAgIHRpSU5UMzIgICAgIFRJX0FkZEtleSAgICAgICAgICAgICAgICAgICAoVElfSEFORExFICBoQWRhcHRlciwgT1NfODAyXzExX0tFWSogICAgICAgIHBLZXkgICAgKTsKICAgIHRpSU5UMzIgICAgIFRJX1JlbW92ZUtleSAgICAgICAgICAgICAgICAoVElfSEFORExFICBoQWRhcHRlciwgT1NfODAyXzExX1JFTU9WRV9LRVkqIHBSZW1vdmVLZXkpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIEFkZCBzdXBwb3J0IGZvciBFWEMgQVBJIGZ1bmN0aW9ucwoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogIEVYQ19TVVBQT1JUX0gKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKI2lmZGVmIF9fY3BsdXNwbHVzCn0KI2VuZGlmCgp0aUJPT0wgVElfQ2hlY2tBZGFwdGVyT2JqZWN0KHZvaWQgKnBPYmopOwoKI2VuZGlmIC8qIF9USV9BREFQVEVSX0FQSV9IKi8KCg==