LyogQm9vc3QgdGVzdC9idWdzLmhwcAogKiBIYW5kbGVzIG5hbWVzcGFjZSByZXNvbHV0aW9uIHF1aXJrcyBpbiBvbGRlciBjb21waWxlcnMgYW5kIGJyYWluZGVhZAogKiB3YXJuaW5ncyBbSGVydmUsIEp1bmUgM3JkIDIwMDNdCiAqCiAqIENvcHlyaWdodCAyMDAyLTIwMDMgSGVydukgQnL2bm5pbWFubgogKgogKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCiAqIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yCiAqIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQogKi8KCiNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgoKLy8gQm9ybGFuZCBjb21waWxlciBjb21wbGFpbnMgYWJvdXQgdW51c2VkIHZhcmlhYmxlcyBhIGJpdCBlYXNpbHkgYW5kCi8vIGluY29ycmVjdGx5CgojaWZkZWYgX19CT1JMQU5EQ19fCm5hbWVzcGFjZSBkZXRhaWwgewoKICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKGNvbnN0IFQmKSB7IH0KCiAgaW5saW5lIHZvaWQgaWdub3JlX3dhcm5pbmdzKCkgewojICAgaWZkZWYgQk9PU1RfTlVNRVJJQ19JTlRFUlZBTF9DT05TVEFOVFNfSFBQCiAgICB1c2luZyBuYW1lc3BhY2UgYm9vc3Q6Om51bWVyaWM6OmludGVydmFsX2xpYjo6Y29uc3RhbnRzOwogICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKCBwaV9mX2wgKTsKICAgIGlnbm9yZV91bnVzZWRfdmFyaWFibGVfd2FybmluZyggcGlfZl91ICk7CiAgICBpZ25vcmVfdW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcoIHBpX2RfbCApOwogICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKCBwaV9kX3UgKTsKIyAgIGVuZGlmCiAgfQoKfQojZW5kaWYKCi8vIFNvbWUgY29tcGlsZXJzIGFyZSBicm9rZW4gd2l0aCByZXNwZWN0IHRvIG5hbWUgcmVzb2x1dGlvbgoKI2lmIGRlZmluZWQoQk9PU1RfTk9fQVJHVU1FTlRfREVQRU5ERU5UX0xPT0tVUCkgfHwgZGVmaW5lZCggX19CT1JMQU5EQ19fKQoKdXNpbmcgbmFtZXNwYWNlIGJvb3N0Owp1c2luZyBuYW1lc3BhY2UgbnVtZXJpYzsKdXNpbmcgbmFtZXNwYWNlIGludGVydmFsX2xpYjsKCiNlbmRpZgo=