Lyogdmk6IHNldCBzdz00IHRzPTQ6ICovCi8qIGRtZXNnLmMgLS0gUHJpbnQgb3V0IHRoZSBjb250ZW50cyBvZiB0aGUga2VybmVsIHJpbmcgYnVmZmVyCiAqIENyZWF0ZWQ6IFNhdCBPY3QgIDkgMTY6MTk6NDcgMTk5MwogKiBSZXZpc2VkOiBUaHUgT2N0IDI4IDIxOjUyOjE3IDE5OTMgYnkgZmFpdGhAY3MudW5jLmVkdQogKiBDb3B5cmlnaHQgMTk5MyBUaGVvZG9yZSBUcydvICh0eXRzb0BhdGhlbmEubWl0LmVkdSkKICogVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KICogTW9kaWZpY2F0aW9ucyBieSBSaWNrIFNsYWRrZXkgKGpyc0B3b3JsZC5zdGQuY29tKQogKiBMYXJnZXIgYnVmZmVyc2l6ZSAzIEp1bmUgMTk5OCBieSBOaWNvbGFpIExhbmdmZWxkdCwgYmFzZWQgb24gYSBwYXRjaAogKiBieSBQZWV0ZXIgSm9vdC4gIFRoaXMgd2FzIGFsc28gc3VnZ2VzdGVkIGJ5IEpvaG4gSHVkc29uLgogKiAxOTk5LTAyLTIyIEFya2FkaXVzeiBNabZraWV3aWN6IDxtaXNpZWtAbWlzaWVrLmV1Lm9yZz4KICogLSBhZGRlZCBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAogKgogKiBmcm9tIHV0aWwtbGludXggLS0gYWRhcHRlZCBmb3IgYnVzeWJveCBieSAKICogRXJpayBBbmRlcnNlbiA8YW5kZXJzZWVAZGViaWFuLm9yZz4uIEkgcmlwcGVkIG91dCBOYXRpdmUgTGFuZ3VhZ2UgCiAqIFN1cHBvcnQsIHJlcGxhY2VkIGdldG9wdCwgYWRkZWQgc29tZSBnb3RvcyBmb3IgcmVkdW5kYW50IHN0dWZmLgogKi8KCiNpbmNsdWRlICJpbnRlcm5hbC5oIgojaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CgojaWYgX19HTlVfTElCUkFSWV9fIDwgNQoKI2lmbmRlZiBfX2FscGhhX18KIyBkZWZpbmUgX19OUl9rbG9nY3RsIF9fTlJfc3lzbG9nCnN0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKGludCwga2xvZ2N0bCwgaW50LCB0eXBlLCBjaGFyICosIGIsIGludCwgbGVuKTsKI2Vsc2UJCQkJCQkJLyogX19hbHBoYV9fICovCiNkZWZpbmUga2xvZ2N0bCBzeXNsb2cKI2VuZGlmCgojZWxzZQojIGluY2x1ZGUgPHN5cy9rbG9nLmg+CiNlbmRpZgoKc3RhdGljIGNvbnN0IGNoYXIgZG1lc2dfdXNhZ2VbXSA9ICJkbWVzZyBbLWNdIFstbiBMRVZFTF0gWy1zIFNJWkVdXG4iCiNpZm5kZWYgQkJfRkVBVFVSRV9UUklWSUFMX0hFTFAKCSJcblByaW50cyBvciBjb250cm9scyB0aGUga2VybmVsIHJpbmcgYnVmZmVyXG5cbiIKCSJPcHRpb25zOlxuIgoJIlx0LWNcdFx0Q2xlYXJzIHRoZSByaW5nIGJ1ZmZlcidzIGNvbnRlbnRzIGFmdGVyIHByaW50aW5nXG4iCgkiXHQtbiBMRVZFTFx0U2V0cyBjb25zb2xlIGxvZ2dpbmcgbGV2ZWxcbiIKCSJcdC1zIFNJWkVcdFx0VXNlIGEgYnVmZmVyIG9mIHNpemUgU0laRVxuIgojZW5kaWYKCTsKCmludCBkbWVzZ19tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKewoJY2hhciAqYnVmOwoJaW50IGJ1ZnNpemUgPSA4MTk2OwoJaW50IGk7CglpbnQgbjsKCWludCBsZXZlbCA9IDA7CglpbnQgbGFzdGM7CglpbnQgY21kID0gMzsKCWludCBzdG9wRG9pbmdUaGF0OwoKCWFyZ2MtLTsKCWFyZ3YrKzsKCgkvKiBQYXJzZSBhbnkgb3B0aW9ucyAqLwoJd2hpbGUgKGFyZ2MgJiYgKiphcmd2ID09ICctJykgewoJCXN0b3BEb2luZ1RoYXQgPSBGQUxTRTsKCQl3aGlsZSAoc3RvcERvaW5nVGhhdCA9PSBGQUxTRSAmJiAqKysoKmFyZ3YpKSB7CgkJCXN3aXRjaCAoKiphcmd2KSB7CgkJCWNhc2UgJ2MnOgoJCQkJY21kID0gNDsKCQkJCWJyZWFrOwoJCQljYXNlICduJzoKCQkJCWNtZCA9IDg7CgkJCQlpZiAoLS1hcmdjID09IDApCgkJCQkJZ290byBlbmQ7CgkJCQlsZXZlbCA9IGF0b2koKigrK2FyZ3YpKTsKCQkJCWlmICgtLWFyZ2MgPiAwKQoJCQkJCSsrYXJndjsKCQkJCXN0b3BEb2luZ1RoYXQgPSBUUlVFOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ3MnOgoJCQkJaWYgKC0tYXJnYyA9PSAwKQoJCQkJCWdvdG8gZW5kOwoJCQkJYnVmc2l6ZSA9IGF0b2koKigrK2FyZ3YpKTsKCQkJCWlmICgtLWFyZ2MgPiAwKQoJCQkJCSsrYXJndjsKCQkJCXN0b3BEb2luZ1RoYXQgPSBUUlVFOwoJCQkJYnJlYWs7CgkJCWRlZmF1bHQ6CgkJCQlnb3RvIGVuZDsKCQkJfQoJCX0KCX0KCglpZiAoYXJnYyA+IDEpIHsKCQlnb3RvIGVuZDsKCX0KCglpZiAoY21kID09IDgpIHsKCQluID0ga2xvZ2N0bChjbWQsIE5VTEwsIGxldmVsKTsKCQlpZiAobiA8IDApIHsKCQkJZ290byBrbG9nY3RsX2Vycm9yOwoJCX0KCQlleGl0KFRSVUUpOwoJfQoKCWlmIChidWZzaXplIDwgNDA5NikKCQlidWZzaXplID0gNDA5NjsKCWJ1ZiA9IChjaGFyICopIHhtYWxsb2MoYnVmc2l6ZSk7CgluID0ga2xvZ2N0bChjbWQsIGJ1ZiwgYnVmc2l6ZSk7CglpZiAobiA8IDApIHsKCQlnb3RvIGtsb2djdGxfZXJyb3I7Cgl9CgoJbGFzdGMgPSAnXG4nOwoJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewoJCWlmICgoaSA9PSAwIHx8IGJ1ZltpIC0gMV0gPT0gJ1xuJykgJiYgYnVmW2ldID09ICc8JykgewoJCQlpKys7CgkJCXdoaWxlIChidWZbaV0gPj0gJzAnICYmIGJ1ZltpXSA8PSAnOScpCgkJCQlpKys7CgkJCWlmIChidWZbaV0gPT0gJz4nKQoJCQkJaSsrOwoJCX0KCQlsYXN0YyA9IGJ1ZltpXTsKCQlwdXRjaGFyKGxhc3RjKTsKCX0KCWlmIChsYXN0YyAhPSAnXG4nKQoJCXB1dGNoYXIoJ1xuJyk7CglleGl0KFRSVUUpOwogIGVuZDoKCXVzYWdlKGRtZXNnX3VzYWdlKTsKCWV4aXQoRkFMU0UpOwogIGtsb2djdGxfZXJyb3I6CglwZXJyb3IoImtsb2djdGwiKTsKCXJldHVybihGQUxTRSk7Cn0K