Lyogdmk6IHNldCBzdz00IHRzPTQ6ICovCi8qIGRtZXNnLmMgLS0gUHJpbnQgb3V0IHRoZSBjb250ZW50cyBvZiB0aGUga2VybmVsIHJpbmcgYnVmZmVyCiAqIENyZWF0ZWQ6IFNhdCBPY3QgIDkgMTY6MTk6NDcgMTk5MwogKiBSZXZpc2VkOiBUaHUgT2N0IDI4IDIxOjUyOjE3IDE5OTMgYnkgZmFpdGhAY3MudW5jLmVkdQogKiBDb3B5cmlnaHQgMTk5MyBUaGVvZG9yZSBUcydvICh0eXRzb0BhdGhlbmEubWl0LmVkdSkKICogVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KICogTW9kaWZpY2F0aW9ucyBieSBSaWNrIFNsYWRrZXkgKGpyc0B3b3JsZC5zdGQuY29tKQogKiBMYXJnZXIgYnVmZmVyc2l6ZSAzIEp1bmUgMTk5OCBieSBOaWNvbGFpIExhbmdmZWxkdCwgYmFzZWQgb24gYSBwYXRjaAogKiBieSBQZWV0ZXIgSm9vdC4gIFRoaXMgd2FzIGFsc28gc3VnZ2VzdGVkIGJ5IEpvaG4gSHVkc29uLgogKiAxOTk5LTAyLTIyIEFya2FkaXVzeiBNabZraWV3aWN6IDxtaXNpZWtAbWlzaWVrLmV1Lm9yZz4KICogLSBhZGRlZCBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAogKgogKiBmcm9tIHV0aWwtbGludXggLS0gYWRhcHRlZCBmb3IgYnVzeWJveCBieSAKICogRXJpayBBbmRlcnNlbiA8YW5kZXJzZW5AY29kZXBvZXQub3JnPi4gSSByaXBwZWQgb3V0IE5hdGl2ZSBMYW5ndWFnZSAKICogU3VwcG9ydCwgcmVwbGFjZWQgZ2V0b3B0LCBhZGRlZCBzb21lIGdvdG9zIGZvciByZWR1bmRhbnQgc3R1ZmYuCiAqCiAqIEF1ZGl0ZWQgYW5kIGNsZWFuZWQgdXAgb24gNyBNYXJjaCAyMDAzIHRvIHJlZHVjZSBzaXplIG9mCiAqIGNoZWNrIGVycm9yIGhhbmRsaW5nIGJ5IEVyaWsgQW5kZXJzZW4gPGFuZGVyc2VuQGNvZGVwb2V0Lm9yZz4KICovCgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8Z2V0b3B0Lmg+CiNpbmNsdWRlIDxlcnJuby5oPgoKI2lmIF9fR05VX0xJQlJBUllfXyA8IDUKIyBpZmRlZiBfX2FscGhhX18KIyAgIGRlZmluZSBrbG9nY3RsIHN5c2xvZwojIGVuZGlmCiNlbHNlCiMgaW5jbHVkZSA8c3lzL2tsb2cuaD4KI2VuZGlmCgojaW5jbHVkZSAiYnVzeWJveC5oIgoKaW50IGRtZXNnX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQp7CgljaGFyICpidWY7CglpbnQgYnVmc2l6ZSA9IDgxOTY7CglpbnQgaSwgbjsKCWludCBsZXZlbCA9IDA7CglpbnQgbGFzdGM7CglpbnQgY21kID0gMzsKCgl3aGlsZSAoKGkgPSBnZXRvcHQoYXJnYywgYXJndiwgImNuOnM6IikpID4gMCkgewoJCXN3aXRjaCAoaSkgewoJCQljYXNlICdjJzoKCQkJCWNtZCA9IDQ7CgkJCQlicmVhazsKCQkJY2FzZSAnbic6CgkJCQljbWQgPSA4OwoJCQkJbGV2ZWwgPSBiYl94Z2V0bGFyZyhvcHRhcmcsIDEwLCAwLCAxMCk7CgkJCQlicmVhazsKCQkJY2FzZSAncyc6CgkJCQkvKiBJIHRoaW5rIGEgNTEyayBtYXgga2VybmVsIHJpbmcgYnVmZmVyIGlzIGJpZyBlbm91Z2ggZm9yCgkJCQkgKiBhbnlib2R5LCBhcyB0aGUgZGVmYXVsdCBpcyAxNmsuLi4gIENvdWxkIGJlIHdyb25nIHRob3VnaC4KCQkJCSAqIElmIHNvIEknbSBzdXJlIEknbGwgaGVhciBhYm91dCBpdCBieSB0aGUgZW5yYWdlZCBtYXNzZXMqLwoJCQkJYnVmc2l6ZSA9IGJiX3hnZXRsYXJnKG9wdGFyZywgMTAsIDQwOTYsIDUxMioxMDI0KTsKCQkJCWJyZWFrOwoJCQlkZWZhdWx0OgoJCQkJYmJfc2hvd191c2FnZSgpOwoJCX0KCX0KCglpZiAob3B0aW5kIDwgYXJnYykgewoJCWJiX3Nob3dfdXNhZ2UoKTsKCX0KCglpZiAoY21kID09IDgpIHsKCQlpZiAoa2xvZ2N0bChjbWQsIE5VTEwsIGxldmVsKSA8IDApCgkJCWdvdG8gZGllX3RoZV9kZWF0aDsKCQlnb3RvIGFsbF9kb25lOwoJfQoKCWJ1ZiA9IHhtYWxsb2MoYnVmc2l6ZSk7CglpZiAoKG4gPSBrbG9nY3RsKGNtZCwgYnVmLCBidWZzaXplKSkgPCAwKQoJCWdvdG8gZGllX3RoZV9kZWF0aDsKCglsYXN0YyA9ICdcbic7Cglmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CgkJaWYgKGxhc3RjID09ICdcbicgJiYgYnVmW2ldID09ICc8JykgewoJCQlpKys7CgkJCXdoaWxlIChidWZbaV0gPj0gJzAnICYmIGJ1ZltpXSA8PSAnOScpCgkJCQlpKys7CgkJCWlmIChidWZbaV0gPT0gJz4nKQoJCQkJaSsrOwoJCX0KCQlsYXN0YyA9IGJ1ZltpXTsKCQlwdXRjaGFyKGxhc3RjKTsKCX0KCWlmIChsYXN0YyAhPSAnXG4nKQoJCXB1dGNoYXIoJ1xuJyk7CmFsbF9kb25lOgojaWZkZWYgQ09ORklHX0ZFQVRVUkVfQ0xFQU5fVVAKCWlmIChidWYpIHsKCQlmcmVlKGJ1Zik7Cgl9CiNlbmRpZgoJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKZGllX3RoZV9kZWF0aDoKCWJiX3BlcnJvcl9ub21zZ19hbmRfZGllKCk7Cn0K