Lyogdmk6IHNldCBzdz00IHRzPTQ6ICovCi8qCiAqIE1pbmkga2JkX21vZGUgaW1wbGVtZW50YXRpb24gZm9yIGJ1c3lib3gKICoKICogQ29weXJpZ2h0IChDKSAyMDA3IExv72MgR3JlbmnpIDxsb2ljLmdyZW5pZUBnbWFpbC5jb20+CiAqICAgd3JpdHRlbiB1c2luZyBBbmRyaWVzIEJyb3V3ZXIgPGFlYkBjd2kubmw+J3Mga2JkX21vZGUgZnJvbQogKiAgIGNvbnNvbGUtdXRpbHMgdjAuMi4zLCBsaWNlbnNlZCB1bmRlciBHTlUgR1BMdjIKICoKICogTGljZW5zZWQgdW5kZXIgR1BMdjIgb3IgbGF0ZXIsIHNlZSBmaWxlIExJQ0VOU0UgaW4gdGhpcyB0YXJiYWxsIGZvciBkZXRhaWxzLgogKgogKi8KCiNpbmNsdWRlICJsaWJiYi5oIgojaW5jbHVkZSA8bGludXgva2QuaD4KCmludCBrYmRfbW9kZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgTUFJTl9FWFRFUk5BTExZX1ZJU0lCTEU7CmludCBrYmRfbW9kZV9tYWluKGludCBBVFRSSUJVVEVfVU5VU0VEIGFyZ2MsIGNoYXIgKiphcmd2KQp7CglpbnQgZmQ7Cgl1bnNpZ25lZCBvcHQ7CgllbnVtIHsKCQlTQ0FOQ09ERSA9ICgxPDwwKSwKCQlBU0NJSQkgPSAoMTw8MSksCgkJTUVESVVNUkFXPSAoMTw8MiksCgkJVU5JQ09ERQkgPSAoMTw8MykKCX07CglzdGF0aWMgY29uc3QgY2hhciBLRF94eHhbXSBBTElHTjEgPSAic2FrdSI7CglvcHQgPSBnZXRvcHQzMihhcmd2LCBLRF94eHgpOwoJZmQgPSBnZXRfY29uc29sZV9mZCgpOwovKglpZiAoZmQgPCAwKQoJCXJldHVybiBFWElUX0ZBSUxVUkU7CiovCglpZiAoIW9wdCkgeyAvKiBwcmludCBjdXJyZW50IHNldHRpbmcgKi8KCQljb25zdCBjaGFyICptb2RlID0gInVua25vd24iOwoJCWludCBtOwoKCQlpb2N0bChmZCwgS0RHS0JNT0RFLCAmbSk7CgkJaWYgKG0gPT0gS19SQVcpCgkJCW1vZGUgPSAicmF3IChzY2FuY29kZSkiOwoJCWVsc2UgaWYgKG0gPT0gS19YTEFURSkKCQkJbW9kZSA9ICJkZWZhdWx0IChBU0NJSSkiOwoJCWVsc2UgaWYgKG0gPT0gS19NRURJVU1SQVcpCgkJCW1vZGUgPSAibWVkaXVtcmF3IChrZXljb2RlKSI7CgkJZWxzZSBpZiAobSA9PSBLX1VOSUNPREUpCgkJCW1vZGUgPSAiVW5pY29kZSAoVVRGLTgpIjsKCQlwcmludGYoIlRoZSBrZXlib2FyZCBpcyBpbiAlcyBtb2RlXG4iLCBtb2RlKTsKCX0gZWxzZSB7CgkJb3B0ID0gb3B0ICYgVU5JQ09ERSA/IDMgOiBvcHQgPj4gMTsKCQl4aW9jdGwoZmQsIEtEU0tCTU9ERSwgJm9wdCk7Cgl9CgoJaWYgKEVOQUJMRV9GRUFUVVJFX0NMRUFOX1VQKQoJCWNsb3NlKGZkKTsKCXJldHVybiBFWElUX1NVQ0NFU1M7Cn0K