Lyogdmk6IHNldCBzdz00IHRzPTQ6ICovCi8qIGRtZXNnLmMgLS0gUHJpbnQgb3V0IHRoZSBjb250ZW50cyBvZiB0aGUga2VybmVsIHJpbmcgYnVmZmVyCiAqIENyZWF0ZWQ6IFNhdCBPY3QgIDkgMTY6MTk6NDcgMTk5MwogKiBSZXZpc2VkOiBUaHUgT2N0IDI4IDIxOjUyOjE3IDE5OTMgYnkgZmFpdGhAY3MudW5jLmVkdQogKiBDb3B5cmlnaHQgMTk5MyBUaGVvZG9yZSBUcydvICh0eXRzb0BhdGhlbmEubWl0LmVkdSkKICogVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KICogTW9kaWZpY2F0aW9ucyBieSBSaWNrIFNsYWRrZXkgKGpyc0B3b3JsZC5zdGQuY29tKQogKiBMYXJnZXIgYnVmZmVyc2l6ZSAzIEp1bmUgMTk5OCBieSBOaWNvbGFpIExhbmdmZWxkdCwgYmFzZWQgb24gYSBwYXRjaAogKiBieSBQZWV0ZXIgSm9vdC4gIFRoaXMgd2FzIGFsc28gc3VnZ2VzdGVkIGJ5IEpvaG4gSHVkc29uLgogKiAxOTk5LTAyLTIyIEFya2FkaXVzeiBNabZraWV3aWN6IDxtaXNpZWtAbWlzaWVrLmV1Lm9yZz4KICogLSBhZGRlZCBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAogKgogKiBmcm9tIHV0aWwtbGludXggLS0gYWRhcHRlZCBmb3IgYnVzeWJveCBieSAKICogRXJpayBBbmRlcnNlbiA8YW5kZXJzZWVAZGViaWFuLm9yZz4uIEkgcmlwcGVkIG91dCBOYXRpdmUgTGFuZ3VhZ2UgCiAqIFN1cHBvcnQsIHJlcGxhY2VkIGdldG9wdCwgYWRkZWQgc29tZSBnb3RvcyBmb3IgcmVkdW5kYW50IHN0dWZmLgogKgogKiBBdWRpdGVkIGFuZCBjbGVhbmVkIHVwIG9uIDcgTWFyY2ggMjAwMyB0byByZWR1Y2Ugc2l6ZSBvZgogKiBjaGVjayBlcnJvciBoYW5kbGluZyBieSBFcmlrIEFuZGVyc2VuIDxhbmRlcnNlZUBkZWJpYW4ub3JnPgogKi8KCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxnZXRvcHQuaD4KI2luY2x1ZGUgPGVycm5vLmg+CgojaWYgX19HTlVfTElCUkFSWV9fIDwgNQojIGlmZGVmIF9fYWxwaGFfXwojICAgZGVmaW5lIGtsb2djdGwgc3lzbG9nCiMgZW5kaWYKI2Vsc2UKIyBpbmNsdWRlIDxzeXMva2xvZy5oPgojZW5kaWYKCiNpbmNsdWRlICJidXN5Ym94LmgiCgppbnQgZG1lc2dfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsKCWNoYXIgKmJ1ZjsKCWludCBidWZzaXplID0gODE5NjsKCWludCBpLCBuOwoJaW50IGxldmVsID0gMDsKCWludCBsYXN0YzsKCWludCBjbWQgPSAzOwoKCXdoaWxlICgoaSA9IGdldG9wdChhcmdjLCBhcmd2LCAiY246czoiKSkgPiAwKSB7CgkJc3dpdGNoIChpKSB7CgkJCWNhc2UgJ2MnOgoJCQkJY21kID0gNDsKCQkJCWJyZWFrOwoJCQljYXNlICduJzoKCQkJCWNtZCA9IDg7CgkJCQlsZXZlbCA9IGJiX3hnZXRsYXJnKG9wdGFyZywgMTAsIDAsIDEwKTsKCQkJCWJyZWFrOwoJCQljYXNlICdzJzoKCQkJCS8qIEkgdGhpbmsgYSA1MTJrIG1heCBrZXJuZWwgcmluZyBidWZmZXIgaXMgYmlnIGVub3VnaCBmb3IKCQkJCSAqIGFueWJvZHksIGFzIHRoZSBkZWZhdWx0IGlzIDE2ay4uLiAgQ291bGQgYmUgd3JvbmcgdGhvdWdoLgoJCQkJICogSWYgc28gSSdtIHN1cmUgSSdsbCBoZWFyIGFib3V0IGl0IGJ5IHRoZSBlbnJhZ2VkIG1hc3NlcyovCgkJCQlidWZzaXplID0gYmJfeGdldGxhcmcob3B0YXJnLCAxMCwgNDA5NiwgNTEyKjEwMjQpOwoJCQkJYnJlYWs7CgkJCWRlZmF1bHQ6CgkJCQliYl9zaG93X3VzYWdlKCk7CgkJfQoJfQoKCWlmIChvcHRpbmQgPCBhcmdjKSB7CgkJYmJfc2hvd191c2FnZSgpOwoJfQoKCWlmIChjbWQgPT0gOCkgewoJCWlmIChrbG9nY3RsKGNtZCwgTlVMTCwgbGV2ZWwpIDwgMCkKCQkJZ290byBkaWVfdGhlX2RlYXRoOwoJCWdvdG8gYWxsX2RvbmU7Cgl9CgoJYnVmID0geG1hbGxvYyhidWZzaXplKTsKCWlmICgobiA9IGtsb2djdGwoY21kLCBidWYsIGJ1ZnNpemUpKSA8IDApCgkJZ290byBkaWVfdGhlX2RlYXRoOwoKCWxhc3RjID0gJ1xuJzsKCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKCQlpZiAobGFzdGMgPT0gJ1xuJyAmJiBidWZbaV0gPT0gJzwnKSB7CgkJCWkrKzsKCQkJd2hpbGUgKGJ1ZltpXSA+PSAnMCcgJiYgYnVmW2ldIDw9ICc5JykKCQkJCWkrKzsKCQkJaWYgKGJ1ZltpXSA9PSAnPicpCgkJCQlpKys7CgkJfQoJCWxhc3RjID0gYnVmW2ldOwoJCXB1dGNoYXIobGFzdGMpOwoJfQoJaWYgKGxhc3RjICE9ICdcbicpCgkJcHV0Y2hhcignXG4nKTsKYWxsX2RvbmU6CiNpZmRlZiBDT05GSUdfRkVBVFVSRV9DTEVBTl9VUAoJaWYgKGJ1ZikgewoJCWZyZWUoYnVmKTsKCX0KI2VuZGlmCglyZXR1cm4gRVhJVF9TVUNDRVNTOwpkaWVfdGhlX2RlYXRoOgoJYmJfcGVycm9yX25vbXNnX2FuZF9kaWUoKTsKfQo=