CkkuIEluY2x1ZGVkIFNvZnR3YXJlCgpUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGF0ClRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSAyLjAuCgoKSUkuIFVzZWQgU29mdHdhcmUKClRoaXMgcHJvZHVjdCB1c2VzIHNvZnR3YXJlIGRldmVsb3BlZCBhdApqc1RyZWUgKGh0dHA6Ly9qc3RyZWUuY29tLykuCkNvcHlyaWdodCAoYykgMjAwOSBJdmFuIEJvemhhbm92ICh2YWthdGEuY29tKQpMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKQoKVGhpcyBwcm9kdWN0IHVzZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGF0CkNyeXB0b0pTIChodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzLykuCkNvcHlyaWdodCCpIDIwMDmWMjAxMiBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkxpY2Vuc2VkIHVuZGVyIE5ldyBCU0QgTGljZW5zZQoKVGhpcyBwcm9kdWN0IHVzZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGF0CkpTT04uanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9kb3VnbGFzY3JvY2tmb3JkL0pTT04tanMpLgpBdmFpbGFibGUgYXMgUHVibGljIERvbWFpbiBjb2RlCgpJSUkuIExpY2Vuc2UgU3VtbWFyeQotIEFwYWNoZSBMaWNlbnNlIDIuMAotIFRoZSBNSVQgTGljZW5zZQotIE5ldyBCU0QgTGljZW5zZQotIFB1YmxpYyBEb21haW4K