IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSwgMjAxOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAojIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMAojIAojIENvbnRyaWJ1dG9yczoKIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiMgICAgIEplc3BlciBTdGVlbiBN+GxsZXIgLSBhZGFwdGVkIGZyb20gb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5jb250ZW50IAojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIyMgUmVzb2x2ZXIgcHJvYmxlbXMKWFNMQ29yZVBsdWdpbl9iYWRJbml0aWFsaXphdGlvbkRhdGEgPSBJbnZhbGlkIGluaXRpYWxpemF0aW9uIGRhdGEgZm9yICJ7MH0iLgpYU0xDb3JlUGx1Z2luX3BhcnNlckNvbmZpZ3VyYXRpb24gPSBYU0wgcGFyc2VyIGNvbmZpZ3VyYXRpb24gZXJyb3IgZHVyaW5nIGNvbnRlbnQgZGVzY3JpcHRpb24uClhTTENvcmVQbHVnaW5fY29yZUVycm9yPUVycm9yIGxvZ2dlZCBmcm9tIFhTTCBjb3JlIHBsdWctaW5cOgojIFZhbGlkYXRpb24KWFNMVmFsaWRhdG9yXzE9WHBhdGggaXMgaW52YWxpZApYU0xWYWxpZGF0b3JfMTA9QSBzdHlsZXNoZWV0IG11c3Qgbm90IGltcG9ydCBpdHNlbGYKWFNMVmFsaWRhdG9yXzExPVRlbXBsYXRlIGNvbmZsaWN0cyB3aXRoIGFub3RoZXIgdGVtcGxhdGUgaW4gdGhpcyBzdHlsZXNoZWV0ClhTTFZhbGlkYXRvcl8xMj1UZW1wbGF0ZSBjb25mbGljdHMgd2l0aCBhbiBpbmNsdWRlZCB0ZW1wbGF0ZQpYU0xWYWxpZGF0b3JfMTM9SW5jbHVkZWQgdGVtcGxhdGVzIGNvbmZsaWN0IHdpdGggZWFjaCBvdGhlcgpYU0xWYWxpZGF0b3JfMTQ9TmFtZSBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQKWFNMVmFsaWRhdG9yXzIzPWhyZWYgYXR0cmlidXRlIGlzIHJlcXVpcmVkClhTTFZhbGlkYXRvcl8xNT1OYW1lIG11c3QgYmUgc3BlY2lmaWVkClhTTFZhbGlkYXRvcl8xNj1QYXJhbWV0ZXIgYWxyZWFkeSBkZWZpbmVkClhTTFZhbGlkYXRvcl8xOD1OYW1lZCB0ZW1wbGF0ZSB7MH0gaXMgbm90IGF2YWlsYWJsZQpYU0xWYWxpZGF0b3JfMj1JbmNsdWRlZCBzdHlsZXNoZWV0cyBmb3JtIGEgY2lyY3VsYXIgcmVmZXJlbmNlClhTTFZhbGlkYXRvcl8yMD1QYXJhbWV0ZXIgezB9IGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlClhTTFZhbGlkYXRvcl8yMj1QYXJhbWV0ZXIgezB9IGRvZXMgbm90IGV4aXN0ClhTTFZhbGlkYXRvcl8zPU1pc3NpbmcgcGFyYW1ldGVyOiB7MH0KWFNMVmFsaWRhdG9yXzQ9TWlzc2luZyBpbmNsdWRlOiAKWFNMVmFsaWRhdG9yXzY9QSBzdHlsZXNoZWV0IG11c3Qgbm90IGluY2x1ZGUgaXRzZWxmClhTTFZhbGlkYXRvcl84PU1pc3NpbmcgaW1wb3J0OiAK