LyoKICogQ29weXJpZ2h0IKkgMjAwMyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICovCiNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KCiNpZiBIQVZFX1NUUklOR19ICiNpbmNsdWRlIDxzdHJpbmcuaD4KI2Vsc2UKI2luY2x1ZGUgPHN0cmluZ3MuaD4KI2VuZGlmCgojaW5jbHVkZSA8c3lzL3R5cGVzLmg+CgojaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaD4KCi8qIAogKiBDb3BpZXMgc3JjIHRvIHRoZSBkZXN0IGJ1ZmZlci4gVGhlIGNvcHkgd2lsbCBuZXZlciBvdmVyZmxvdyB0aGUgZGVzdCBidWZmZXIKICogYW5kIGRlc3Qgd2lsbCBhbHdheXMgYmUgbnVsbCB0ZXJtaW5hdGVkLCBsZW4gaXMgdGhlIHNpemUgb2YgdGhlIGRlc3QgYnVmZmVyLgogKgogKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHNyYyBidWZmZXIuCiAqLyAKc2l6ZV90IApzdHJsY3B5KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbikgCnsgCglzaXplX3Qgc3JjX2xlbiA9IHN0cmxlbihzcmMpOyAKCXNpemVfdCBuZXdfbGVuOyAKCglpZiAobGVuID09IDApIHsKCQlyZXR1cm4gKHNyY19sZW4pOwoJfQoKICAgICAgICBpZiAoc3JjX2xlbiA+PSBsZW4pIHsKCQluZXdfbGVuID0gbGVuIC0gMTsKCX0gZWxzZSB7CiAgICAgICAgICAgICAgICBuZXdfbGVuID0gc3JjX2xlbjsKCX0KCiAgICAgICAgbWVtY3B5KGRlc3QsIHNyYywgbmV3X2xlbik7IAoJZGVzdFtuZXdfbGVuXSA9ICdcMCc7IAoJcmV0dXJuIChzcmNfbGVuKTsgCn0K