LyogY2hhcnF1ZXVlLmgKICoKICogQ29weXJpZ2h0IKkgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAogKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKICogZGV0YWlscy4KICovCgojaWZuZGVmIF9fQ0hBUlFVRVVFX0hfXwojZGVmaW5lIF9fQ0hBUlFVRVVFX0hfXwoKI2luY2x1ZGUgInVuaWtsb2cuaCIKI2luY2x1ZGUgInRpbXNrbW9kLmgiCgovKiBDSEFSUVVFVUUgaXMgYW4gb3BhcXVlIHN0cnVjdHVyZSB0byB1c2Vycy4KICogRmllbGRzIGFyZSBkZWNsYXJlZCBvbmx5IGluIHRoZSBpbXBsZW1lbnRhdGlvbiAuYyBmaWxlcy4KICovCnR5cGVkZWYgc3RydWN0IENIQVJRVUVVRV9UYWcgQ0hBUlFVRVVFOwoKQ0hBUlFVRVVFICp2aXNvcl9jaGFycXVldWVfY3JlYXRlKHVsb25nIG5zbG90cyk7CnZvaWQgdmlzb3JfY2hhcnF1ZXVlX2VucXVldWUoQ0hBUlFVRVVFICpjaGFycXVldWUsIHVuc2lnbmVkIGNoYXIgYyk7CmludCBjaGFycXVldWVfZGVxdWV1ZShDSEFSUVVFVUUgKmNoYXJxdWV1ZSk7CmludCB2aXNvcl9jaGFycXVldWVfZGVxdWV1ZV9uKENIQVJRVUVVRSAqY2hhcnF1ZXVlLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBuKTsKQk9PTCB2aXNvcl9jaGFycXVldWVfaXNfZW1wdHkoQ0hBUlFVRVVFICpjaGFycXVldWUpOwp2b2lkIHZpc29yX2NoYXJxdWV1ZV9kZXN0cm95KENIQVJRVUVVRSAqY2hhcnF1ZXVlKTsKCiNlbmRpZgoK