ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8gICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfCAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CgpSRUFETUUKCiAgQ3VybCBpcyBhIGNvbW1hbmQgbGluZSB0b29sIGZvciB0cmFuc2ZlcmluZyBkYXRhIHNwZWNpZmllZCB3aXRoIFVSTAogIHN5bnRheC4gRmluZCBvdXQgaG93IHRvIHVzZSBDdXJsIGJ5IHJlYWRpbmcgdGhlIGN1cmwuMSBtYW4gcGFnZSBvciB0aGUKICBNQU5VQUwgZG9jdW1lbnQuIEZpbmQgb3V0IGhvdyB0byBpbnN0YWxsIEN1cmwgYnkgcmVhZGluZyB0aGUgSU5TVEFMTAogIGRvY3VtZW50LgoKICBsaWJjdXJsIGlzIGEgbGlicmFyeSB0aGF0IEN1cmwgaXMgdXNpbmcgdG8gZG8gaXRzIGpvYi4gSXQgaXMgcmVhZGlseQogIGF2YWlsYWJsZSB0byBiZSB1c2VkIGJ5IHlvdXIgc29mdHdhcmUuIFJlYWQgdGhlIGxpYmN1cmwuMyBtYW4gcGFnZSB0bwogIGZpbmQgb3V0IGhvdyEKCiAgWW91IGZpbmQgYW5zd2VycyB0byB0aGUgbW9zdCBmcmVxdWVudCBxdWVzdGlvbnMgd2UgZ2V0IGluIHRoZSBGQVEgZG9jdW1lbnQuCgogIFN0dWR5IHRoZSBMRUdBTCBmaWxlIGZvciBkaXN0cmlidXRpb24gdGVybXMgYW5kIHNpbWlsYXIuCgogIEFsd2F5cyB0cnkgdGhlIEN1cmwgd2ViIHNpdGUgZm9yIHRoZSBsYXRlc3QgbmV3czoKCiAgICAgICAgaHR0cDovL2N1cmwuaGF4eC5zZQoKICBUaGUgb2ZmaWNpYWwgZG93bmxvYWQgbWlycm9yIHNpdGVzIGFyZToKCiAgICAgICAgU3dlZGVuICAgIC0tIGZ0cDovL2Z0cC5zdW5ldC5zZS9wdWIvd3d3L3V0aWxpdGllcy9jdXJsLwogICAgICAgIEdlcm1hbnkgICAtLSBmdHA6Ly9mdHAuZnUtYmVybGluLmRlL3B1Yi91bml4L25ldHdvcmsvY3VybC8KCiAgVG8gZG93bmxvYWQgdGhlIHZlcnkgbGF0ZXN0IHNvdXJjZSBvZmYgdGhlIENWUyBzZXJ2ZXIgZG8gdGhpczoKCiAgICBjdnMgLWQgOnBzZXJ2ZXI6YW5vbnltb3VzQGN2cy5jdXJsLnNvdXJjZWZvcmdlLm5ldDovY3Zzcm9vdC9jdXJsIGxvZ2luCgogIChqdXN0IHByZXNzIGVudGVyIHdoZW4gYXNrZWQgZm9yIHBhc3N3b3JkKQoKICAgIGN2cyAtZCA6cHNlcnZlcjphbm9ueW1vdXNAY3ZzLmN1cmwuc291cmNlZm9yZ2UubmV0Oi9jdnNyb290L2N1cmwgY28gY3VybCAKCiAgKHlvdSdsbCBnZXQgYSBkaXJlY3RvcnkgbmFtZWQgY3VybCBjcmVhdGVkLCBmaWxsZWQgd2l0aCB0aGUgc291cmNlIGNvZGUpCgogICAgY3ZzIC1kIDpwc2VydmVyOmFub255bW91c0BjdnMuY3VybC5zb3VyY2Vmb3JnZS5uZXQ6L2N2c3Jvb3QvY3VybCBsb2dvdXQKICAgICAgICAKICAoeW91J3JlIG9mZiB0aGUgaG9vayEpCgogIEN1cmwgY29udGFpbnMgcGllY2VzIG9mIHNvdXJjZSBjb2RlIHRoYXQgaXMgQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5CiAgS3VuZ2xpZ2EgVGVrbmlza2EgSPZnc2tvbGFuLiBUaGlzIG5vdGljZSBpcyBpbmNsdWRlZCBoZXJlIHRvIGNvbXBseSB3aXRoIHRoZQogIGRpc3RyaWJ1dGlvbiB0ZXJtcy4K