Ly8gUmVzb3VyY2Ugc2NyaXB0IGZvciBQeXRob24gY29yZSBETEwuCi8vIEN1cnJlbnRseSBvbmx5IGhvbGRzIHZlcnNpb24gaW5mb3JtYXRpb24uCi8vCiNpbmNsdWRlICJ3aW52ZXIuaCIKCiNkZWZpbmUgTVNfV0lORE9XUwojaW5jbHVkZSAibW9kc3VwcG9ydC5oIgojaW5jbHVkZSAicGF0Y2hsZXZlbC5oIgoKLyogQWNyb3NzIHJlbGVhc2VzLCBjaGFuZ2U6CiAqICAgIE1TX0RMTF9JRCBpZiB0aGUgbWlub3IgdmVyc2lvbiBudW1iZXIgY2hhbmdlcy4KICogICAgUFlUSE9OX0RMTF9OQU1FIGRpdHRvLgogKiBNU19ETExfSUQgbXVzdCBtYXRjaCBQWV9WRVJTSU9OIGluIHRoZSBXaW5kb3dzIGluc3RhbGwgc2NyaXB0LgogKi8KI2RlZmluZSBNU19ETExfSUQgIjIuMyIKCiNpZm5kZWYgUFlUSE9OX0RMTF9OQU1FCiNkZWZpbmUgUFlUSE9OX0RMTF9OQU1FICJweXRob24yMy5kbGwiCiNlbmRpZgoKLyogTm90aGluZyBiZWxvdyB0aGlzIHNob3VsZCBuZWVkIHRvIGJlIGNoYW5nZWQgZXhjZXB0IGZvciBjb3B5cmlnaHQKICogbm90aWNlcywgY29tcGFueSBuYW1lLCBhbmQgRklFTEQzLiAgVW5mb3J0dW5hdGVseSwgYWxsIGF0dGVtcHRzCiAqIHRvIGdldCB0aGUgcmVzb3VyY2UgY29tcGlsZXIgdG8gZG8gYXJpdGhtZXRpYyBpbiBtYWNyb3MgaGF2ZQogKiBmYWlsZWQgbWlzZXJhYmx5IC0tIGl0IGdpdmVzIHN5bnRheCBlcnJvcnMsIGlnbm9yZXMgb3BlcmF0b3JzLAogKiBvciBkb2VzIHN0dWZmIHRoYXQncyBzaW1wbHkgYml6YXJyZS4KICovCgoKLyogVGhpcyBpcyB3aGF0IHdlJ2QgbGlrZSBGSUVMRDMgdG8gYmU6CiAqCiAqICNkZWZpbmUgRklFTEQzIChQWV9NSUNST19WRVJTSU9OKjEwMDAgKyBQWV9SRUxFQVNFX0xFVkVMKjEwICsgUFlfUkVMRUFTRV9TRVJJQUwpCiAqCiAqIGJ1dCB0aGF0IG5laXRoZXIgZ2l2ZXMgYW4gZXJyb3Igbm9yIGNvbWVzIGFueXdoZXJlIGNsb3NlIHRvIHdvcmtpbmcuICBUaGUKICogZm9sbG93aW5nIGNvbW1lbnQgYW5kICNkZWZpbmUgYXJlIG91dHB1dCBmcm9tIFBDYnVpbGRcZmllbGQzLnB5OgogKgogKiBGb3IgMi4zYTAsCiAqIFBZX01JQ1JPX1ZFUlNJT04gPSAwCiAqIFBZX1JFTEVBU0VfTEVWRUwgPSAnYWxwaGEnID0gMHhhCiAqIFBZX1JFTEVBU0VfU0VSSUFMID0gMQogKgogKiBhbmQgMCoxMDAwICsgMTAqMTAgKyAxID0gMTAxCiAqLwojZGVmaW5lIEZJRUxEMyAxMDEKCi8qIGUuZy4sIDIuMWEyCiAqIFBZX1ZFUlNJT04gY29tZXMgZnJvbSBwYXRjaGV2ZWwuaAogKi8KI2RlZmluZSBQWVRIT05fVkVSU0lPTiBQWV9WRVJTSU9OICJcMCIKCi8qIDY0LWJpdCB2ZXJzaW9uIG51bWJlciBhcyBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiA0IDE2LWJpdCBpbnRzICovCiNpZiBQWV9NSUNST19WRVJTSU9OID4gNjQKIyAgIGVycm9yICJQWV9NSUNST19WRVJTSU9OID4gNjQiCiNlbmRpZgojaWYgUFlfUkVMRUFTRV9MRVZFTCA+IDk5CiMgICBlcnJvciAiUFlfUkVMRUFTRV9MRVZFTCA+IDk5IgojZW5kaWYKI2lmIFBZX1JFTEVBU0VfU0VSSUFMID4gOQojICAgZXJyb3IgIlBZX1JFTEVBU0VfU0VSSUFMID4gOSIKI2VuZGlmCiNkZWZpbmUgUFlWRVJTSU9ONjQgUFlfTUFKT1JfVkVSU0lPTiwgUFlfTUlOT1JfVkVSU0lPTiwgRklFTEQzLCBQWVRIT05fQVBJX1ZFUlNJT04KCi8vIFN0cmluZyBUYWJsZXMKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIDEwMDAsICAgTVNfRExMX0lECkVORAoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8KLy8gVmVyc2lvbgovLwoKVlNfVkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPCiBGSUxFVkVSU0lPTiBQWVZFUlNJT042NAogUFJPRFVDVFZFUlNJT04gUFlWRVJTSU9ONjQKIEZJTEVGTEFHU01BU0sgMHgzZkwKI2lmZGVmIF9ERUJVRwogRklMRUZMQUdTIDB4MUwKI2Vsc2UKIEZJTEVGTEFHUyAweDBMCiNlbmRpZgogRklMRU9TIDB4NDAwMDRMCiBGSUxFVFlQRSAweDFMCiBGSUxFU1VCVFlQRSAweDBMCkJFR0lOCiAgICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCiAgICBCRUdJTgogICAgICAgIEJMT0NLICIwMDAwMDRiMCIKICAgICAgICBCRUdJTgogICAgICAgICAgICBWQUxVRSAiQ29tcGFueU5hbWUiLCAiUHl0aG9uTGFicyBhdCBab3BlIENvcnBvcmF0aW9uXDAiCiAgICAgICAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiUHl0aG9uIENvcmVcMCIKICAgICAgICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgUFlUSE9OX1ZFUlNJT04KICAgICAgICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJQeXRob24gRExMXDAiCiAgICAgICAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICJDb3B5cmlnaHQgqSAyMDAxLTIwMDMgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uIENvcHlyaWdodCCpIDIwMDAgQmVPcGVuLmNvbS4gQ29weXJpZ2h0IKkgMTk5NS0yMDAxIENOUkkuIENvcHlyaWdodCCpIDE5OTEtMTk5NSBTTUMuXDAiCiAgICAgICAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgUFlUSE9OX0RMTF9OQU1FICJcMCIKICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIlB5dGhvblwwIgogICAgICAgICAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCBQWVRIT05fVkVSU0lPTgogICAgICAgIEVORAogICAgRU5ECiAgICBCTE9DSyAiVmFyRmlsZUluZm8iCiAgICBCRUdJTgogICAgICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4MCwgMTIwMAogICAgRU5ECkVORAo=