IwojIENvbmZpZyBmaWxlIGZvciBrdGVzdC5wbAojCiMgTm90ZSwgYWxsIHBhdGhzIG11c3QgYmUgYWJzb2x1dGUKIwoKIyBPcHRpb25zIHNldCBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIGFyZSBjb25zaWRlcmVkIHRvIGJlCiMgZGVmYXVsdCBvcHRpb25zLiBUaGVzZSBvcHRpb25zIGNhbiBiZSBvdmVycmlkZW4gYnkgdGVzdCBzcGVjaWZpYwojIG9wdGlvbnMsIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgojCiMgIExPR19GSUxFCiMgIENMRUFSX0xPRwojICBQT1dFUk9GRl9PTl9TVUNDRVNTCiMgIFJFQk9PVF9PTl9TVUNDRVNTCiMKIyBUZXN0IHNwZWNpZmljIG9wdGlvbnMgYXJlIHNldCBhZnRlciB0aGUgbGFiZWw6CiMKIyBURVNUX1NUQVJUCiMKIyBUaGUgb3B0aW9ucyBhZnRlciBhIFRFU1RfU1RBUlQgbGFiZWwgYXJlIHNwZWNpZmljIHRvIHRoYXQgdGVzdC4KIyBFYWNoIFRFU1RfU1RBUlQgbGFiZWwgd2lsbCBzZXQgdXAgYSBuZXcgdGVzdC4gSWYgeW91IHdhbnQgdG8KIyBwZXJmb3JtIGEgdGVzdCBtb3JlIHRoYW4gb25jZSwgeW91IGNhbiBhZGQgdGhlIElURVJBVEUgbGFiZWwKIyB0byBpdCBmb2xsb3dlZCBieSB0aGUgbnVtYmVyIG9mIHRpbWVzIHlvdSB3YW50IHRoYXQgdGVzdAojIHRvIGl0ZXJhdGUuIElmIHRoZSBJVEVSQVRFIGlzIGxlZnQgb2ZmLCB0aGUgdGVzdCB3aWxsIG9ubHkKIyBiZSBwZXJmb3JtZWQgb25jZS4KIwojIFRFU1RfU1RBUlQgSVRFUkFURSAxMAojCiMgWW91IGNhbiBza2lwIGEgdGVzdCBieSBhZGRpbmcgU0tJUCAoYmVmb3JlIG9yIGFmdGVyIHRoZSBJVEVSQVRFCiMgYW5kIG51bWJlcikKIwojIFRFU1RfU1RBUlQgU0tJUAojCiMgVEVTVF9TVEFSVCBTS0lQIElURVJBVEUgMTAKIwojIFRFU1RfU1RBUlQgSVRFUkFURSAxMCBTS0lQCiMKIyBUaGUgU0tJUCBsYWJlbCBjYXVzZXMgdGhlIG9wdGlvbnMgYW5kIHRoZSB0ZXN0IGl0c2VsZiB0byBiZSBpZ25vcmVkLgojIFRoaXMgaXMgdXNlZnVsIHRvIHNldCB1cCBzZXZlcmFsIGRpZmZlcmVudCB0ZXN0cyBpbiBvbmUgY29uZmlnIGZpbGUsIGFuZAojIG9ubHkgZW5hYmxpbmcgdGhlIG9uZXMgeW91IHdhbnQgdG8gdXNlIGZvciBhIGN1cnJlbnQgdGVzdCBydW4uCiMKIyBZb3UgY2FuIGFkZCBkZWZhdWx0IG9wdGlvbnMgYW55d2hlcmUgaW4gdGhlIGZpbGUgYXMgd2VsbAojIHdpdGggdGhlIERFRkFVTFRTIHRhZy4gVGhpcyBhbGxvd3MgeW91IHRvIGhhdmUgZGVmYXVsdCBvcHRpb25zCiMgYWZ0ZXIgdGhlIHRlc3Qgb3B0aW9ucyB0byBrZWVwIHRoZSB0ZXN0IG9wdGlvbnMgYXQgdGhlIHRvcAojIG9mIHRoZSBmaWxlLiBZb3UgY2FuIGV2ZW4gcGxhY2UgdGhlIERFRkFVTFRTIHRhZyBiZXR3ZWVuCiMgdGVzdCBjYXNlcyAoYnV0IG5vdCBpbiB0aGUgbWlkZGxlIG9mIGEgc2luZ2xlIHRlc3QgY2FzZSkKIwojIFRFU1RfU1RBUlQKIyBNSU5fQ09ORklHID0gL2hvbWUvdGVzdC9jb25maWctdGVzdDEKIwojIERFRkFVTFRTCiMgTUlOX0NPTkZJRyA9IC9ob21lL3Rlc3QvY29uZmlnLWRlZmF1bHQKIwojIFRFU1RfU1RBUlQgSVRFUkFURSAxMAojCiMgVGhlIGFib3ZlIHdpbGwgcnVuIHRoZSBmaXJzdCB0ZXN0IHdpdGggTUlOX0NPTkZJRyBzZXQgdG8KIyAvaG9tZS90ZXN0L2NvbmZpZy10ZXN0LTEuIFRoZW4gMTAgdGVzdHMgd2lsbCBiZSBleGVjdXRlZAojIHdpdGggTUlOX0NPTkZJRyB3aXRoIC9ob21lL3Rlc3QvY29uZmlnLWRlZmF1bHQuCiMKIyBZb3UgY2FuIGFsc28gZGlzYWJsZSBkZWZhdWx0cyB3aXRoIHRoZSBTS0lQIG9wdGlvbgojCiMgREVGQVVMVFMgU0tJUAojIE1JTl9DT05GSUcgPSAvaG9tZS90ZXN0L2NvbmZpZy11c2Utc29tZXRpbWVzCiMKIyBERUZBVUxUUwojIE1JTl9DT05GSUcgPSAvaG9tZS90ZXN0L2NvbmZpZy1tb3N0LXRpbWVzCiMKIyBUaGUgYWJvdmUgd2lsbCBpZ25vcmUgdGhlIGZpcnN0IE1JTl9DT05GSUcuIElmIHlvdSB3YW50IHRvCiMgdXNlIHRoZSBmaXJzdCBNSU5fQ09ORklHLCByZW1vdmUgdGhlIFNLSVAgZnJvbSB0aGUgZmlyc3QKIyBERUZBVUxUUyB0YWcgYW5kIGFkZCBpdCB0byB0aGUgc2Vjb25kLiBCZSBjYXJlZnVsLCBvcHRpb25zCiMgbWF5IG9ubHkgYmUgZGVjbGFyZWQgb25jZSBwZXIgdGVzdCBvciBkZWZhdWx0LiBJZiB5b3UgaGF2ZQojIHRoZSBzYW1lIG9wdGlvbiBuYW1lIHVuZGVyIHRoZSBzYW1lIHRlc3Qgb3IgYXMgZGVmYXVsdAojIGt0ZXN0IHdpbGwgZmFpbCB0byBleGVjdXRlLCBhbmQgbm8gdGVzdHMgd2lsbCBydW4uCiMKIwojCiMgQm90aCBURVNUX1NUQVJUIGFuZCBERUZBVUxUUyBzZWN0aW9ucyBjYW4gYWxzbyBoYXZlIHRoZSBJRiBrZXl3b3JkCiMgVGhlIHZhbHVlIGFmdGVyIHRoZSBJRiBtdXN0IGV2YWx1YXRlIGludG8gYSAwIG9yIG5vbiAwIHBvc2l0aXZlCiMgaW50ZWdlciwgYW5kIGNhbiB1c2UgdGhlIGNvbmZpZyB2YXJpYWJsZXMgKGV4cGxhaW5lZCBiZWxvdykuCiMKIyBERUZBVUxUUyBJRiAke0lTX1g4Nl8zMn0KIwojIFRoZSBhYm92ZSB3aWxsIHByb2Nlc3MgdGhlIERFRkFVTFRTIHNlY3Rpb24gaWYgdGhlIGNvbmZpZwojIHZhcmlhYmxlIElTX1g4Nl8zMiBldmFsdWF0ZXMgdG8gYSBub24gemVybyBwb3NpdGl2ZSBpbnRlZ2VyCiMgb3RoZXJ3aXNlIGlmIGl0IGV2YWx1YXRlcyB0byB6ZXJvLCBpdCB3aWxsIGFjdCB0aGUgc2FtZQojIGFzIGlmIHRoZSBTS0lQIGtleXdvcmQgd2FzIHVzZWQuCiMKIyBUaGUgRUxTRSBrZXl3b3JkIGNhbiBiZSB1c2VkIGRpcmVjdGx5IGFmdGVyIGEgc2VjdGlvbiB3aXRoCiMgYSBJRiBzdGF0ZW1lbnQuCiMKIyBURVNUX1NUQVJUIElGICR7UlVOX05FVF9URVNUU30KIyBCVUlMRF9UWVBFID0gdXNlY29uZmlnOiR7Q09ORklHX0RJUn0vY29uZmlnLW5ldHdvcmsKIwojIEVMU0UKIwojIEJVSUxEX1RZUEUgPSB1c2Vjb25maWc6JHtDT05GSUdfRElSfS9jb25maWctbm9ybWFsCiMKIwojIFRoZSBFTFNFIGtleXdvcmQgY2FuIGFsc28gY29udGFpbiBhbiBJRiBzdGF0ZW1lbnQgdG8gYWxsb3cgbXVsdGlwbGUKIyBpZiB0aGVuIGVsc2Ugc2VjdGlvbnMuIEJ1dCBhbGwgdGhlIHNlY3Rpb25zIG11c3QgYmUgZWl0aGVyCiMgREVGQVVMVCBvciBURVNUX1NUQVJULCB0aGV5IGNhbiBub3QgYmUgYSBtaXh0dXJlLgojCiMgVEVTVF9TVEFSVCBJRiAke1JVTl9ORVRfVEVTVFN9CiMgQlVJTERfVFlQRSA9IHVzZWNvbmZpZzoke0NPTkZJR19ESVJ9L2NvbmZpZy1uZXR3b3JrCiMKIyBFTFNFIElGICR7UlVOX0RJU0tfVEVTVFN9CiMgQlVJTERfVFlQRSA9IHVzZWNvbmZpZzoke0NPTkZJR19ESVJ9L2NvbmZpZy10ZXN0cwojCiMgRUxTRSBJRiAke1JVTl9DUFVfVEVTVFN9CiMgQlVJTERfVFlQRSA9IHVzZWNvbmZpZzoke0NPTkZJR19ESVJ9L2NvbmZpZy1jcHUKIwojIEVMU0UKIyBCVUlMRF9UWVBFID0gdXNlY29uZmlnOiR7Q09ORklHX0RJUn0vY29uZmlnLW5ldHdvcmsKIwojIFRoZSBpZiBzdGF0ZW1lbnQgbWF5IGFsc28gaGF2ZSBjb21wYXJpc29ucyB0aGF0IHdpbGwgYW5kIGZvcgojID09IGFuZCAhPSwgc3RyaW5ncyBtYXkgYmUgdXNlZCBmb3IgYm90aCBzaWRlcy4KIwojIEJPWF9UWVBFIDo9IHg4Nl8zMgojCiMgREVGQVVMVFMgSUYgJHtCT1hfVFlQRX0gPT0geDg2XzMyCiMgQlVJTERfVFlQRSA9IHVzZWNvbmZpZzoke0NPTkZJR19ESVJ9L2NvbmZpZy0zMgojIEVMU0UKIyBCVUlMRF9UWVBFID0gdXNlY29uZmlnOiR7Q09ORklHX0RJUn0vY29uZmlnLTY0CiMKIwojIElOQ0xVREUgZmlsZQojCiMgVGhlIElOQ0xVREUga2V5d29yZCBtYXkgYmUgdXNlZCBpbiBERUZBVUxUIHNlY3Rpb25zLiBUaGlzIHdpbGwKIyByZWFkIGFub3RoZXIgY29uZmlnIGZpbGUgYW5kIHByb2Nlc3MgdGhhdCBmaWxlIGFzIHdlbGwuIFRoZSBpbmNsdWRlZAojIGZpbGUgY2FuIGluY2x1ZGUgb3RoZXIgZmlsZXMsIGFkZCBuZXcgdGVzdCBjYXNlcyBvciBkZWZhdWx0CiMgc3RhdGVtZW50cy4gQ29uZmlnIHZhcmlhYmxlcyB3aWxsIGJlIHBhc3NlZCB0byB0aGVzZSBmaWxlcyBhbmQgY2hhbmdlcwojIHRvIGNvbmZpZyB2YXJpYWJsZXMgd2lsbCBiZSBzZWVuIGJ5IHRvcCBsZXZlbCBjb25maWcgZmlsZXMuIEluY2x1ZGluZwojIGEgZmlsZSBpcyBwcm9jZXNzZWQganVzdCBsaWtlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSB3YXMgY3V0IGFuZCBwYXN0ZWQKIyBpbnRvIHRoZSB0b3AgbGV2ZWwgZmlsZSwgZXhjZXB0LCB0aGF0IGluY2x1ZGUgZmlsZXMgdGhhdCBlbmQgd2l0aAojIFRFU1RfU1RBUlQgc2VjdGlvbnMgd2lsbCBoYXZlIHRoYXQgc2VjdGlvbiBlbmRlZCBhdCB0aGUgZW5kIG9mCiMgdGhlIGluY2x1ZGUgZmlsZS4gVGhhdCBpcywgYW4gaW5jbHVkZWQgZmlsZSBpcyBpbmNsdWRlZCBmb2xsb3dlZAojIGJ5IGFub3RoZXIgREVGQVVMVCBrZXl3b3JkLgojCiMgVW5saWtlIG90aGVyIGZpbGVzIHJlZmVyZW5jZWQgaW4gdGhpcyBjb25maWcsIHRoZSBmaWxlIHBhdGggZG9lcyBub3QgbmVlZAojIHRvIGJlIGFic29sdXRlLiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBzdGFydCB3aXRoICcvJywgdGhlbiB0aGUgZGlyZWN0b3J5CiMgdGhhdCB0aGUgY3VycmVudCBjb25maWcgZmlsZSB3YXMgbG9jYXRlZCBpbiBpcyB1c2VkLiBJZiBubyBjb25maWcgYnkgdGhlCiMgZ2l2ZW4gbmFtZSBpcyBmb3VuZCB0aGVyZSwgdGhlbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgc2VhcmNoZWQuCiMKIyBJTkNMVURFIG15ZmlsZQojIERFRkFVTFQKIwojIGlzIHRoZSBzYW1lIGFzOgojCiMgSU5DTFVERSBteWZpbGUKIwojIE5vdGUsIGlmIHRoZSBpbmNsdWRlIGZpbGUgZG9lcyBub3QgY29udGFpbiBhIGZ1bGwgcGF0aCwgdGhlIGZpbGUgaXMKIyBzZWFyY2hlZCBmaXJzdCBieSB0aGUgbG9jYXRpb24gb2YgdGhlIG9yaWdpbmFsIGluY2x1ZGUgZmlsZSwgYW5kIHRoZW4KIyBieSB0aGUgbG9jYXRpb24gdGhhdCBrdGVzdC5wbCB3YXMgZXhlY3V0ZWQgaW4uCiMKCiMjIyMgQ29uZmlnIHZhcmlhYmxlcyAjIyMjCiMKIyBUaGlzIGNvbmZpZyBmaWxlIGNhbiBhbHNvIGNvbnRhaW4gImNvbmZpZyB2YXJpYWJsZXMiLgojIFRoZXNlIGFyZSBhc3NpZ25lZCB3aXRoICI6PSIgaW5zdGVhZCBvZiB0aGUga3Rlc3Qgb3B0aW9uCiMgYXNzaWdtZW50ICI9Ii4KIwojIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4ga3Rlc3Qgb3B0aW9ucyBhbmQgY29uZmlnIHZhcmlhYmxlcwojIGlzIHRoYXQgY29uZmlnIHZhcmlhYmxlcyBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcywKIyB3aGVyZSBlYWNoIGluc3RhbmNlIHdpbGwgb3ZlcnJpZGUgdGhlIHByZXZpb3VzIGluc3RhbmNlLgojIEFuZCB0aGF0IHRoZXkgb25seSBsaXZlIGF0IHRpbWUgb2YgcHJvY2Vzc2luZyB0aGlzIGNvbmZpZy4KIwojIFRoZSBhZHZhbnRhZ2UgdG8gY29uZmlnIHZhcmlhYmxlcyBhcmUgdGhhdCB0aGV5IGNhbiBiZSB1c2VkCiMgYnkgYW55IG9wdGlvbiBvciBhbnkgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyB0byBkZWZpbmUgdGhpbmcKIyB0aGF0IHlvdSBtYXkgdXNlIG92ZXIgYW5kIG92ZXIgYWdhaW4gaW4gdGhlIG9wdGlvbnMuCiMKIyBGb3IgZXhhbXBsZToKIwojIFVTRVIgICAgICA6PSByb290CiMgVEFSR0VUICAgIDo9IG15Ym94CiMgVEVTVF9DQVNFIDo9IHNzaCAke1VTRVJ9QCR7VEFSR0VUfSAvcGF0aC90by9teS90ZXN0CiMKIyBURVNUX1NUQVJUCiMgTUlOX0NPTkZJRyA9IGNvbmZpZzEKIyBURVNUID0gJHtURVNUX0NBU0V9CiMKIyBURVNUX1NUQVJUCiMgTUlOX0NPTkZJRyA9IGNvbmZpZzIKIyBURVNUID0gJHtURVNUX0NBU0V9CiMKIyBURVNUX0NBU0UgOj0gc3NoICR7VVNFUn1AJHtUQVJHRVR9IC9wYXRoL3RvL215L3Rlc3QyCiMKIyBURVNUX1NUQVJUCiMgTUlOX0NPTkZJRyA9IGNvbmZpZzEKIyBURVNUID0gJHtURVNUX0NBU0V9CiMKIyBURVNUX1NUQVJUCiMgTUlOX0NPTkZJRyA9IGNvbmZpZzIKIyBURVNUID0gJHtURVNUX0NBU0V9CiMKIyBURVNUX0RJUiA6PSAvaG9tZS9tZS90ZXN0CiMKIyBCVUlMRF9ESVIgPSAke1RFU1RfRElSfS9saW51eC5naXQKIyBPVVRQVVRfRElSID0gJHtURVNUX0RJUn0vdGVzdAojCiMgTm90ZSwgdGhlIGNvbmZpZyB2YXJpYWJsZXMgYXJlIGV2YWx1YXRlZCBpbW1lZGlhdGVseSwgdGh1cwojIHVwZGF0aW5nIFRBUkdFVCBhZnRlciBURVNUX0NBU0UgaGFzIGJlZW4gYXNzaWduZWQgZG9lcyBub3RoaW5nCiMgdG8gVEVTVF9DQVNFLgojCiMgQXMgc2hvd24gaW4gdGhlIGV4YW1wbGUsIHRvIGV2YWx1YXRlIGEgY29uZmlnIHZhcmlhYmxlLCB5b3UKIyB1c2UgdGhlICR7WH0gY29udmVudGlvbi4gU2ltcGxlICRYIHdpbGwgbm90IHdvcmsuCiMKIyBJZiB0aGUgY29uZmlnIHZhcmlhYmxlIGRvZXMgbm90IGV4aXN0LCB0aGUgJHtYfSB3aWxsIG5vdAojIGJlIGV2YWx1YXRlZC4gVGh1czoKIwojIE1BS0VfQ01EID0gUEFUSD0vbXlwYXRoOiR7UEFUSH0gbWFrZQojCiMgSWYgUEFUSCBpcyBub3QgYSBjb25maWcgdmFyaWFibGUsIHRoZW4gdGhlICR7UEFUSH0gaW4KIyB0aGUgTUFLRV9DTUQgb3B0aW9uIHdpbGwgYmUgZXZhbHVhdGVkIGJ5IHRoZSBzaGVsbCB3aGVuCiMgdGhlIE1BS0VfQ01EIG9wdGlvbiBpcyBwYXNzZWQgaW50byBzaGVsbCBwcm9jZXNzaW5nLgoKIyMjIyBVc2luZyBvcHRpb25zIGluIG90aGVyIG9wdGlvbnMgIyMjIwojCiMgT3B0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBjb25maWcgZmlsZSBtYXkgYWxzbyBiZSB1c2VkCiMgYnkgb3RoZXIgb3B0aW9ucy4gQWxsIG9wdGlvbnMgYXJlIGV2YXVsYXRlZCBhdCB0aW1lIG9mCiMgdXNlIChleGNlcHQgdGhhdCBjb25maWcgdmFyaWFibGVzIGFyZSBldmFsdWF0ZWQgYXQgY29uZmlnCiMgcHJvY2Vzc2luZyB0aW1lKS4KIwojIElmIGFuIGt0ZXN0IG9wdGlvbiBpcyB1c2VkIHdpdGhpbiBhbm90aGVyIG9wdGlvbiwgaW5zdGVhZCBvZgojIHR5cGluZyBpdCBhZ2FpbiBpbiB0aGF0IG9wdGlvbiB5b3UgY2FuIHNpbXBseSB1c2UgdGhlIG9wdGlvbgojIGp1c3QgbGlrZSB5b3UgY2FuIGNvbmZpZyB2YXJpYWJsZXMuCiMKIyBNQUNISU5FID0gbXlib3gKIwojIFRFU1QgPSBzc2ggcm9vdEAke01BQ0hJTkV9IC9wYXRoL3RvL3Rlc3QKIwojIFRoZSBvcHRpb24gd2lsbCBiZSB1c2VkIHBlciB0ZXN0IGNhc2UuIFRodXM6CiMKIyBURVNUX1RZUEUgPSB0ZXN0CiMgVEVTVCA9IHNzaCByb290QHtNQUNISU5FfQojCiMgVEVTVF9TVEFSVAojIE1BQ0hJTkUgPSBib3gxCiMKIyBURVNUX1NUQVJUCiMgTUFDSElORSA9IGJveDIKIwojIEZvciBib3RoIHRlc3QgY2FzZXMsIE1BQ0hJTkUgd2lsbCBiZSBldmFsdWF0ZWQgYXQgdGhlIHRpbWUKIyBvZiB0aGUgdGVzdCBjYXNlLiBUaGUgZmlyc3QgdGVzdCB3aWxsIHJ1biBzc2ggcm9vdEBib3gxCiMgYW5kIHRoZSBzZWNvbmQgd2lsbCBydW4gc3NoIHJvb3RAYm94Mi4KCiMjIyMgTWFuZGF0b3J5IERlZmF1bHQgT3B0aW9ucyAjIyMjCgojIFRoZXNlIG9wdGlvbnMgbXVzdCBiZSBpbiB0aGUgZGVmYXVsdCBzZWN0aW9uLCBhbHRob3VnaCBtb3N0CiMgbWF5IGJlIG92ZXJyaWRkZW4gYnkgdGVzdCBvcHRpb25zLgoKIyBUaGUgbWFjaGluZSBob3N0bmFtZSB0aGF0IHlvdSB3aWxsIHRlc3QKI01BQ0hJTkUgPSB0YXJnZXQKCiMgVGhlIGJveCBpcyBleHBlY3RlZCB0byBoYXZlIHNzaCBvbiBub3JtYWwgYm9vdHVwLCBwcm92aWRlIHRoZSB1c2VyCiMgIChtb3N0IGxpa2VseSByb290LCBzaW5jZSB5b3UgbmVlZCBwcml2aWxlZ2VkIG9wZXJhdGlvbnMpCiNTU0hfVVNFUiA9IHJvb3QKCiMgVGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBMaW51eCBzb3VyY2UgY29kZQojQlVJTERfRElSID0gL2hvbWUvdGVzdC9saW51eC5naXQKCiMgVGhlIGRpcmVjdG9yeSB0aGF0IHRoZSBvYmplY3RzIHdpbGwgYmUgYnVpbHQKIyAoY2FuIG5vdCBiZSBzYW1lIGFzIEJVSUxEX0RJUikKI09VVFBVVF9ESVIgPSAvaG9tZS90ZXN0L2J1aWxkL3RhcmdldAoKIyBUaGUgbG9jYXRpb24gb2YgdGhlIGNvbXBpbGVkIGZpbGUgdG8gY29weSB0byB0aGUgdGFyZ2V0CiMgKHJlbGF0aXZlIHRvIE9VVFBVVF9ESVIpCiNCVUlMRF9UQVJHRVQgPSBhcmNoL3g4Ni9ib290L2J6SW1hZ2UKCiMgVGhlIHBsYWNlIHRvIHB1dCB5b3VyIGltYWdlIG9uIHRoZSB0ZXN0IG1hY2hpbmUKI1RBUkdFVF9JTUFHRSA9IC9ib290L3ZtbGludXotdGVzdAoKIyBBIHNjcmlwdCBvciBjb21tYW5kIHRvIHJlYm9vdCB0aGUgYm94CiMKIyBIZXJlIGlzIGEgZGlnaXRhbCBsb2dnZXJzIHBvd2VyIHN3aXRjaCBleGFtcGxlCiNQT1dFUl9DWUNMRSA9IHdnZXQgLS1uby1wcm94eSAtTyAvZGV2L251bGwgLXEgIC0tYXV0aC1uby1jaGFsbGVuZ2UgJ2h0dHA6Ly9hZG1pbjphZG1pbkBwb3dlci9vdXRsZXQ/NT1DQ0wnCiMKIyBIZXJlIGlzIGFuIGV4YW1wbGUgdG8gcmVib290IGEgdmlydHVhbCBib3ggb24gdGhlIGN1cnJlbnQgaG9zdAojIHdpdGggdGhlIG5hbWUgIkd1ZXN0Ii4KI1BPV0VSX0NZQ0xFID0gdmlyc2ggZGVzdHJveSBHdWVzdDsgc2xlZXAgNTsgdmlyc2ggc3RhcnQgR3Vlc3QKCiMgVGhlIHNjcmlwdCBvciBjb21tYW5kIHRoYXQgcmVhZHMgdGhlIGNvbnNvbGUKIwojICBJZiB5b3UgdXNlIHR0eXdhdGNoIHNlcnZlciwgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyB3b3VsZCB3b3JrLgojQ09OU09MRSA9IG5jIC1kIGxvY2FsaG9zdCAzMDAxCiMKIyBGb3IgYSB2aXJ0dWFsIG1hY2hpbmUgd2l0aCBndWVzdCBuYW1lICJHdWVzdCIuCiNDT05TT0xFID0gIHZpcnNoIGNvbnNvbGUgR3Vlc3QKCiMgUmVxdWlyZWQgdmVyc2lvbiBlbmRpbmcgdG8gZGlmZmVyZW50aWF0ZSB0aGUgdGVzdAojIGZyb20gb3RoZXIgbGludXggYnVpbGRzIG9uIHRoZSBzeXN0ZW0uCiNMT0NBTFZFUlNJT04gPSAtdGVzdAoKIyBUaGUgZ3J1YiB0aXRsZSBuYW1lIGZvciB0aGUgdGVzdCBrZXJuZWwgdG8gYm9vdAojIChPbmx5IG1hbmRhdG9yeSBpZiBSRUJPT1RfVFlQRSA9IGdydWIpCiMKIyBOb3RlLCBrdGVzdC5wbCB3aWxsIG5vdCB1cGRhdGUgdGhlIGdydWIgbWVudS5sc3QsIHlvdSBuZWVkIHRvCiMgbWFudWFsbHkgYWRkIGFuIG9wdGlvbiBmb3IgdGhlIHRlc3QuIGt0ZXN0LnBsIHdpbGwgc2VhcmNoCiMgdGhlIGdydWIgbWVudS5sc3QgZm9yIHRoaXMgb3B0aW9uIHRvIGZpbmQgd2hhdCBrZXJuZWwgdG8KIyByZWJvb3QgaW50by4KIwojIEZvciBleGFtcGxlLCBpZiBpbiB0aGUgL2Jvb3QvZ3J1Yi9tZW51LmxzdCB0aGUgdGVzdCBrZXJuZWwgdGl0bGUgaGFzOgojIHRpdGxlIFRlc3QgS2VybmVsCiMga2VybmVsIHZtbGludXotdGVzdAojR1JVQl9NRU5VID0gVGVzdCBLZXJuZWwKCiMgQSBzY3JpcHQgdG8gcmVib290IHRoZSB0YXJnZXQgaW50byB0aGUgdGVzdCBrZXJuZWwKIyAoT25seSBtYW5kYXRvcnkgaWYgUkVCT09UX1RZUEUgPSBzY3JpcHQpCiNSRUJPT1RfU0NSSVBUID0KCiMjIyMgT3B0aW9uYWwgQ29uZmlnIE9wdGlvbnMgKGFsbCBoYXZlIGRlZmF1bHRzKSAjIyMjCgojIFN0YXJ0IGEgdGVzdCBzZXR1cC4gSWYgeW91IGxlYXZlIHRoaXMgb2ZmLCBhbGwgb3B0aW9ucwojIHdpbGwgYmUgZGVmYXVsdCBhbmQgdGhlIHRlc3Qgd2lsbCBydW4gb25jZS4KIyBUaGlzIGlzIGEgbGFiZWwgYW5kIG5vdCByZWFsbHkgYW4gb3B0aW9uIChpdCB0YWtlcyBubyB2YWx1ZSkuCiMgWW91IGNhbiBhcHBlbmQgSVRFUkFURSBhbmQgYSBudW1iZXIgYWZ0ZXIgaXQgdG8gaXRlcmF0ZSB0aGUKIyB0ZXN0IGEgbnVtYmVyIG9mIHRpbWVzLCBvciBTS0lQIHRvIGlnbm9yZSB0aGlzIHRlc3QuCiMKI1RFU1RfU1RBUlQKI1RFU1RfU1RBUlQgSVRFUkFURSA1CiNURVNUX1NUQVJUIFNLSVAKCiMgSGF2ZSB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXMgZGVmYXVsdCBhZ2Fpbi4gVXNlZCBhZnRlciB0ZXN0cwojIGhhdmUgYWxyZWFkeSBiZWVuIGRlZmluZWQgYnkgVEVTVF9TVEFSVC4gT3B0aW9uYWxseSwgeW91IGNhbgojIGp1c3QgZGVmaW5lIGFsbCBkZWZhdWx0IG9wdGlvbnMgYmVmb3JlIHRoZSBmaXJzdCBURVNUX1NUQVJUCiMgYW5kIHlvdSBkbyBub3QgbmVlZCB0aGlzIG9wdGlvbi4KIwojIFRoaXMgaXMgYSBsYWJlbCBhbmQgbm90IHJlYWxseSBhbiBvcHRpb24gKGl0IHRha2VzIG5vIHZhbHVlKS4KIyBZb3UgY2FuIGFwcGVuZCBTS0lQIHRvIHRoaXMgbGFiZWwgYW5kIHRoZSBvcHRpb25zIHdpdGhpbiB0aGlzCiMgc2VjdGlvbiB3aWxsIGJlIGlnbm9yZWQuCiMKIyBERUZBVUxUUwojIERFRkFVTFRTIFNLSVAKCiMgVGhlIGRlZmF1bHQgdGVzdCB0eXBlIChkZWZhdWx0IHRlc3QpCiMgVGhlIHRlc3QgdHlwZXMgbWF5IGJlOgojICAgYnVpbGQgICAtIG9ubHkgYnVpbGQgdGhlIGtlcm5lbCwgZG8gbm90aGluZyBlbHNlCiMgICBpbnN0YWxsIC0gYnVpbGQgYW5kIGluc3RhbGwsIGJ1dCBkbyBub3RoaW5nIGVsc2UgKGRvZXMgbm90IHJlYm9vdCkKIyAgIGJvb3QgICAgLSBidWlsZCwgaW5zdGFsbCwgYW5kIGJvb3QgdGhlIGtlcm5lbAojICAgdGVzdCAgICAtIGJ1aWxkLCBib290IGFuZCBpZiBURVNUIGlzIHNldCwgcnVuIHRoZSB0ZXN0IHNjcmlwdAojICAgICAgICAgIChJZiBURVNUIGlzIG5vdCBzZXQsIGl0IGRlZmF1bHRzIGJhY2sgdG8gYm9vdCkKIyAgIGJpc2VjdCAtIFBlcmZvcm0gYSBiaXNlY3Qgb24gdGhlIGtlcm5lbCAoc2VlIEJJU0VDVF9UWVBFIGJlbG93KQojICAgcGF0Y2hjaGVjayAtIERvIGEgdGVzdCBvbiBhIHNlcmllcyBvZiBjb21taXRzIGluIGdpdCAoc2VlIFBBVENIQ0hFQ0sgYmVsb3cpCiNURVNUX1RZUEUgPSB0ZXN0CgojIFRlc3QgdG8gcnVuIGlmIHRoZXJlIGlzIGEgc3VjY2Vzc2Z1bCBib290IGFuZCBURVNUX1RZUEUgaXMgdGVzdC4KIyBNdXN0IGV4aXQgd2l0aCAwIG9uIHN1Y2Nlc3MgYW5kIG5vbiB6ZXJvIG9uIGVycm9yCiMgZGVmYXVsdCAodW5kZWZpbmVkKQojVEVTVCA9IHNzaCB1c2VyQG1hY2hpbmUgL3Jvb3QvcnVuX3Rlc3QKCiMgVGhlIGJ1aWxkIHR5cGUgaXMgYW55IG1ha2UgY29uZmlnIHR5cGUgb3Igc3BlY2lhbCBjb21tYW5kCiMgIChkZWZhdWx0IHJhbmRjb25maWcpCiMgICBub2J1aWxkIC0gc2tpcCB0aGUgY2xlYW4gYW5kIGJ1aWxkIHN0ZXAKIyAgIHVzZWNvbmZpZzovcGF0aC90by9jb25maWcgLSB1c2UgdGhlIGdpdmVuIGNvbmZpZyBhbmQgcnVuCiMgICAgICAgICAgICAgIG9sZGNvbmZpZyBvbiBpdC4KIyBUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGlmIFRFU1RfVFlQRSBpcyBwYXRjaGNoZWNrIG9yIGJpc2VjdAojQlVJTERfVFlQRSA9IHJhbmRjb25maWcKCiMgVGhlIG1ha2UgY29tbWFuZCAoZGVmYXVsdCBtYWtlKQojIElmIHlvdSBhcmUgYnVpbGRpbmcgYSAzMmJpdCB4ODYgb24gYSA2NCBiaXQgaG9zdAojTUFLRV9DTUQgPSBDQz1pMzg2LWdjYyBBUz1pMzg2LWFzIG1ha2UgQVJDSD1pMzg2CgojIEFueSBidWlsZCBvcHRpb25zIGZvciB0aGUgbWFrZSBvZiB0aGUga2VybmVsIChub3QgZm9yIG90aGVyIG1ha2VzLCBsaWtlIGNvbmZpZ3MpCiMgKGRlZmF1bHQgIiIpCiNCVUlMRF9PUFRJT05TID0gLWoyMAoKIyBJZiB5b3UgbmVlZCBhbiBpbml0cmQsIHlvdSBjYW4gYWRkIGEgc2NyaXB0IG9yIGNvZGUgaGVyZSB0byBpbnN0YWxsCiMgaXQuIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBLRVJORUxfVkVSU0lPTiB3aWxsIGJlIHNldCB0byB0aGUKIyBrZXJuZWwgdmVyc2lvbiB0aGF0IGlzIHVzZWQuIFJlbWVtYmVyIHRvIGFkZCB0aGUgaW5pdHJkIGxpbmUKIyB0byB5b3VyIGdydWIgbWVudS5sc3QgZmlsZS4KIwojIEhlcmUncyBhIGNvdXBsZSBvZiBleGFtcGxlcyB0byB1c2U6CiNQT1NUX0lOU1RBTEwgPSBzc2ggdXNlckB0YXJnZXQgL3NiaW4vbWtpbml0cmQgLS1hbGxvdy1taXNzaW5nIC1mIC9ib290L2luaXRyYW1mcy10ZXN0LmltZyAkS0VSTkVMX1ZFUlNJT04KIwojIG9yIG9uIHNvbWUgc3lzdGVtczoKI1BPU1RfSU5TVEFMTCA9IHNzaCB1c2VyQHRhcmdldCAvc2Jpbi9kcmFjdXQgLWYgL2Jvb3QvaW5pdHJhbWZzLXRlc3QuaW1nICRLRVJORUxfVkVSU0lPTgoKIyBJZiBmb3Igc29tZSByZWFzb24geW91IGp1c3Qgd2FudCB0byBib290IHRoZSBrZXJuZWwgYW5kIHlvdSBkbyBub3QKIyB3YW50IHRoZSB0ZXN0IHRvIGluc3RhbGwgYW55dGhpbmcgbmV3LiBGb3IgZXhhbXBsZSwgeW91IG1heSBqdXN0IHdhbnQKIyB0byBib290IHRlc3QgdGhlIHNhbWUga2VybmVsIG92ZXIgYW5kIG92ZXIgYW5kIGRvIG5vdCB3YW50IHRvIGdvIHRocm91Z2gKIyB0aGUgaGFzc2xlIG9mIGluc3RhbGxpbmcgYW55dGhpbmcsIHlvdSBjYW4gc2V0IHRoaXMgb3B0aW9uIHRvIDEKIyAoZGVmYXVsdCAwKQojTk9fSU5TVEFMTCA9IDEKCiMgSWYgdGhlcmUgaXMgYSBzY3JpcHQgdGhhdCB5b3UgcmVxdWlyZSB0byBydW4gYmVmb3JlIHRoZSBidWlsZCBpcyBkb25lCiMgeW91IGNhbiBzcGVjaWZ5IGl0IHdpdGggUFJFX0JVSUxELgojCiMgT25lIGV4YW1wbGUgbWF5IGJlIGlmIHlvdSBtdXN0IGFkZCBhIHRlbXBvcmFyeSBwYXRjaCB0byB0aGUgYnVpbGQgdG8KIyBmaXggYSB1bnJlbGF0ZWQgYnVnIHRvIHBlcmZvcm0gYSBwYXRjaGNoZWNrIHRlc3QuIFRoaXMgd2lsbCBhcHBseSB0aGUKIyBwYXRjaCBiZWZvcmUgZWFjaCBidWlsZCB0aGF0IGlzIG1hZGUuIFVzZSB0aGUgUE9TVF9CVUlMRCB0byBkbyBhIGdpdCByZXNldCAtLWhhcmQKIyB0byByZW1vdmUgdGhlIHBhdGNoLgojCiMgKGRlZmF1bHQgdW5kZWYpCiNQUkVfQlVJTEQgPSBjZCAke0JVSUxEX0RJUn0gJiYgcGF0Y2ggLXAxIDwgL3RtcC90ZW1wLnBhdGNoCgojIFRvIHNwZWNpZnkgaWYgdGhlIHRlc3Qgc2hvdWxkIGZhaWwgaWYgdGhlIFBSRV9CVUlMRCBmYWlscywKIyBQUkVfQlVJTERfRElFIG5lZWRzIHRvIGJlIHNldCB0byAxLiBPdGhlcndpc2UgdGhlIFBSRV9CVUlMRAojIHJlc3VsdCBpcyBpZ25vcmVkLgojIChkZWZhdWx0IDApCiMgUFJFX0JVSUxEX0RJRSA9IDEKCiMgSWYgdGhlcmUgaXMgYSBzY3JpcHQgdGhhdCBzaG91bGQgcnVuIGFmdGVyIHRoZSBidWlsZCBpcyBkb25lCiMgeW91IGNhbiBzcGVjaWZ5IGl0IHdpdGggUE9TVF9CVUlMRC4KIwojIEFzIHRoZSBleGFtcGxlIGluIFBSRV9CVUlMRCwgUE9TVF9CVUlMRCBjYW4gYmUgdXNlZCB0byByZXNldCBtb2RpZmljYXRpb25zCiMgbWFkZSBieSB0aGUgUFJFX0JVSUxELgojCiMgKGRlZmF1bHQgdW5kZWYpCiNQT1NUX0JVSUxEID0gY2QgJHtCVUlMRF9ESVJ9ICYmIGdpdCByZXNldCAtLWhhcmQKCiMgVG8gc3BlY2lmeSBpZiB0aGUgdGVzdCBzaG91bGQgZmFpbCBpZiB0aGUgUE9TVF9CVUlMRCBmYWlscywKIyBQT1NUX0JVSUxEX0RJRSBuZWVkcyB0byBiZSBzZXQgdG8gMS4gT3RoZXJ3aXNlIHRoZSBQT1NUX0JVSUxECiMgcmVzdWx0IGlzIGlnbm9yZWQuCiMgKGRlZmF1bHQgMCkKI1BPU1RfQlVJTERfRElFID0gMQoKIyBXYXkgdG8gcmVib290IHRoZSBib3ggdG8gdGhlIHRlc3Qga2VybmVsLgojIE9ubHkgdmFsaWQgb3B0aW9ucyBzbyBmYXIgYXJlICJncnViIiBhbmQgInNjcmlwdCIKIyAoZGVmYXVsdCBncnViKQojIElmIHlvdSBzcGVjaWZ5IGdydWIsIGl0IHdpbGwgYXNzdW1lIGdydWIgdmVyc2lvbiAxCiMgYW5kIHdpbGwgc2VhcmNoIGluIC9ib290L2dydWIvbWVudS5sc3QgZm9yIHRoZSB0aXRsZSAkR1JVQl9NRU5VCiMgYW5kIHNlbGVjdCB0aGF0IHRhcmdldCB0byByZWJvb3QgdG8gdGhlIGtlcm5lbC4gSWYgdGhpcyBpcyBub3QKIyB5b3VyIHNldHVwLCB0aGVuIHNwZWNpZnkgInNjcmlwdCIgYW5kIGhhdmUgYSBjb21tYW5kIG9yIHNjcmlwdAojIHNwZWNpZmllZCBpbiBSRUJPT1RfU0NSSVBUIHRvIGJvb3QgdG8gdGhlIHRhcmdldC4KIwojIFRoZSBlbnRyeSBpbiAvYm9vdC9ncnViL21lbnUubHN0IG11c3QgYmUgZW50ZXJlZCBpbiBtYW51YWxseS4KIyBUaGUgdGVzdCB3aWxsIG5vdCBtb2RpZnkgdGhhdCBmaWxlLgojUkVCT09UX1RZUEUgPSBncnViCgojIFRoZSBtaW4gY29uZmlnIHRoYXQgaXMgbmVlZGVkIHRvIGJ1aWxkIGZvciB0aGUgbWFjaGluZQojIEEgbmljZSB3YXkgdG8gY3JlYXRlIHRoaXMgaXMgd2l0aCB0aGUgZm9sbG93aW5nOgojCiMgICAkIHNzaCB0YXJnZXQKIyAgICQgbHNtb2QgPiBteW1vZHMKIyAgICQgc2NwIG15bW9kcyBob3N0Oi90bXAKIyAgICQgZXhpdAojICAgJCBjZCBsaW51eC5naXQKIyAgICQgcm0gLmNvbmZpZwojICAgJCBtYWtlIExTTU9EPW15bW9kcyBsb2NhbHllc2NvbmZpZwojICAgJCBncmVwICdeQ09ORklHJyAuY29uZmlnID4gL2hvbWUvdGVzdC9jb25maWctbWluCiMKIyBJZiB5b3Ugd2FudCBldmVuIGxlc3MgY29uZmlnczoKIwojICAgbG9nIGluIGRpcmVjdGx5IHRvIHRhcmdldCAoZG8gbm90IHNzaCkKIwojICAgJCBzdQojICAgIyBsc21vZCB8IGN1dCAtZCcgJyAtZjEgfCB4YXJncyBybW1vZAojCiMgICByZXBlYXQgdGhlIGFib3ZlIHNldmVyYWwgdGltZXMKIwojICAgIyBsc21vZCA+IG15bW9kcwojICAgIyByZWJvb3QKIwojIE1heSBuZWVkIHRvIHJlYm9vdCB0byBnZXQgeW91ciBuZXR3b3JrIGJhY2sgdG8gY29weSB0aGUgbXltb2RzCiMgdG8gdGhlIGhvc3QsIGFuZCB0aGVuIHJlbW92ZSB0aGUgcHJldmlvdXMgLmNvbmZpZyBhbmQgcnVuIHRoZQojIGxvY2FseWVzY29uZmlnIGFnYWluLiBUaGUgQ09ORklHX01JTiBnZW5lcmF0ZWQgbGlrZSB0aGlzIHdpbGwKIyBub3QgZ3VhcmFudGVlIG5ldHdvcmsgYWN0aXZpdHkgdG8gdGhlIGJveCBzbyB0aGUgVEVTVF9UWVBFIG9mCiMgdGVzdCBtYXkgZmFpbC4KIwojIFlvdSBtaWdodCBhbHNvIHdhbnQgdG8gc2V0OgojICAgQ09ORklHX0NNRExJTkU9Ijx5b3VyIG9wdGlvbnMgaGVyZT4iCiMgIHJhbmRjb25maWcgbWF5IHNldCB0aGUgYWJvdmUgYW5kIG92ZXJyaWRlIHlvdXIgcmVhbCBjb21tYW5kCiMgIGxpbmUgb3B0aW9ucy4KIyAoZGVmYXVsdCB1bmRlZmluZWQpCiNNSU5fQ09ORklHID0gL2hvbWUvdGVzdC9jb25maWctbWluCgojIFNvbWV0aW1lcyB0aGVyZSdzIG9wdGlvbnMgdGhhdCBqdXN0IGJyZWFrIHRoZSBib290IGFuZAojIHlvdSBkbyBub3QgY2FyZSBhYm91dC4gSGVyZSBhcmUgYSBmZXc6CiMgICAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIyAgU3RhZ2luZyBkcml2ZXJzIGFyZSBob3JyaWJsZSwgYW5kIGNhbiBicmVhayB0aGUgYnVpbGQuCiMgICAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKIyAgU0NTSV9ERUJVRyBtYXkgY2hhbmdlIHlvdXIgcm9vdCBwYXJ0aXRpb24KIyAgICMgQ09ORklHX0tHREJfU0VSSUFMX0NPTlNPTEUgaXMgbm90IHNldAojICBLR0RCIG1heSBjYXVzZSBvb3BzIHdhaXRpbmcgZm9yIGEgY29ubmVjdGlvbiB0aGF0J3Mgbm90IHRoZXJlLgojIFRoaXMgb3B0aW9uIHBvaW50cyB0byB0aGUgZmlsZSBjb250YWluaW5nIGNvbmZpZyBvcHRpb25zIHRoYXQgd2lsbCBiZSBwcmVwZW5kZWQKIyB0byB0aGUgTUlOX0NPTkZJRyAob3IgYmUgdGhlIE1JTl9DT05GSUcgaWYgaXQgaXMgbm90IHNldCkKIwojIE5vdGUsIGNvbmZpZyBvcHRpb25zIGluIE1JTl9DT05GSUcgd2lsbCBvdmVycmlkZSB0aGVzZSBvcHRpb25zLgojCiMgKGRlZmF1bHQgdW5kZWZpbmVkKQojQUREX0NPTkZJRyA9IC9ob21lL3Rlc3QvY29uZmlnLWJyb2tlbgoKIyBUaGUgbG9jYXRpb24gb24gdGhlIGhvc3Qgd2hlcmUgdG8gd3JpdGUgdGVtcCBmaWxlcwojIChkZWZhdWx0IC90bXAva3Rlc3QvJHtNQUNISU5FfSkKI1RNUF9ESVIgPSAvdG1wL2t0ZXN0LyR7TUFDSElORX0KCiMgT3B0aW9uYWwgbG9nIGZpbGUgdG8gd3JpdGUgdGhlIHN0YXR1cyAocmVjb21tZW5kZWQpCiMgIE5vdGUsIHRoaXMgaXMgYSBERUZBVUxUIHNlY3Rpb24gb25seSBvcHRpb24uCiMgKGRlZmF1bHQgdW5kZWZpbmVkKQojTE9HX0ZJTEUgPSAvaG9tZS90ZXN0L2xvZ2ZpbGVzL3RhcmdldC5sb2cKCiMgUmVtb3ZlIG9sZCBsb2dmaWxlIGlmIGl0IGV4aXN0cyBiZWZvcmUgc3RhcnRpbmcgYWxsIHRlc3RzLgojICBOb3RlLCB0aGlzIGlzIGEgREVGQVVMVCBzZWN0aW9uIG9ubHkgb3B0aW9uLgojIChkZWZhdWx0IDApCiNDTEVBUl9MT0cgPSAwCgojIExpbmUgdG8gZGVmaW5lIGEgc3VjY2Vzc2Z1bCBib290IHVwIGluIGNvbnNvbGUgb3V0cHV0LgojIFRoaXMgaXMgd2hhdCB0aGUgbGluZSBjb250YWlucywgbm90IHRoZSBlbnRpcmUgbGluZS4gSWYgeW91IG5lZWQKIyB0aGUgZW50aXJlIGxpbmUgdG8gbWF0Y2gsIHRoZW4gdXNlIHJlZ3VyYWwgZXhwcmVzc2lvbiBzeW50YXggbGlrZToKIyAgKGRvIG5vdCBhZGQgYW55IHF1b3RlcyBhcm91bmQgaXQpCiMKIyAgU1VDQ0VTU19MSU5FID0gXk15Qm94IExvZ2luOiQKIwojIChkZWZhdWx0ICJsb2dpbjoiKQojU1VDQ0VTU19MSU5FID0gbG9naW46CgojIFRvIHNwZWVkIHVwIGJldHdlZW4gcmVib290cywgZGVmaW5pbmcgYSBsaW5lIHRoYXQgdGhlCiMgZGVmYXVsdCBrZXJuZWwgcHJvZHVjZXMgdGhhdCByZXByZXNlbnRzIHRoYXQgdGhlIGRlZmF1bHQKIyBrZXJuZWwgaGFzIHN1Y2Nlc3NmdWxseSBib290ZWQgYW5kIGNhbiBiZSB1c2VkIHRvIHBhc3MKIyBhIG5ldyB0ZXN0IGtlcm5lbCB0byBpdC4gT3RoZXJ3aXNlIGt0ZXN0LnBsIHdpbGwgd2FpdCB0aWxsCiMgU0xFRVBfVElNRSB0byBjb250aW51ZS4KIyAoZGVmYXVsdCB1bmRlZmluZWQpCiNSRUJPT1RfU1VDQ0VTU19MSU5FID0gbG9naW46CgojIEluIGNhc2UgdGhlIGNvbnNvbGUgY29uc3RhbnRseSBmaWxscyB0aGUgc2NyZWVuLCBoYXZpbmcKIyBhIHNwZWNpZmllZCB0aW1lIHRvIHN0b3AgdGhlIHRlc3QgYWZ0ZXIgc3VjY2VzcyBpcyByZWNvbW1lbmRlZC4KIyAoaW4gc2Vjb25kcykKIyAoZGVmYXVsdCAxMCkKI1NUT1BfQUZURVJfU1VDQ0VTUyA9IDEwCgojIEluIGNhc2UgdGhlIGNvbnNvbGUgY29uc3RhbnRseSBmaWxscyB0aGUgc2NyZWVuLCBoYXZpbmcKIyBhIHNwZWNpZmllZCB0aW1lIHRvIHN0b3AgdGhlIHRlc3QgYWZ0ZXIgZmFpbHVyZSBpcyByZWNvbW1lbmRlZC4KIyAoaW4gc2Vjb25kcykKIyAoZGVmYXVsdCA2MCkKI1NUT1BfQUZURVJfRkFJTFVSRSA9IDYwCgojIEluIGNhc2UgdGhlIGNvbnNvbGUgY29uc3RhbnRseSBmaWxscyB0aGUgc2NyZWVuLCBoYXZpbmcKIyBhIHNwZWNpZmllZCB0aW1lIHRvIHN0b3AgdGhlIHRlc3QgaWYgaXQgbmV2ZXIgc3VjY2VlZHMgbm9yIGZhaWxzCiMgaXMgcmVjb21tZW5kZWQuCiMgTm90ZTogdGhpcyBpcyBpZ25vcmVkIGlmIGEgc3VjY2VzcyBvciBmYWlsdXJlIGlzIGRldGVjdGVkLgojIChpbiBzZWNvbmRzKQojIChkZWZhdWx0IDYwMCwgLTEgaXMgdG8gbmV2ZXIgc3RvcCkKI1NUT1BfVEVTVF9BRlRFUiA9IDYwMAoKIyBTdG9wIHRlc3RpbmcgaWYgYSBidWlsZCBmYWlscy4gSWYgc2V0LCB0aGUgc2NyaXB0IHdpbGwgZW5kIGlmCiMgYSBmYWlsdXJlIGlzIGRldGVjdGVkLCBvdGhlcndpc2UgaXQgd2lsbCBzYXZlIG9mZiB0aGUgLmNvbmZpZywKIyBkbWVzZyBhbmQgYm9vdGxvZyBpbiBhIGRpcmVjdG9yeSBjYWxsZWQKIyBNQUNISU5FLVRFU1RfVFlQRV9CVUlMRF9UWVBFLWZhaWwteXl5eW1tZGRoaG1tc3MKIyBpZiB0aGUgU1RPUkVfRkFJTFVSRVMgZGlyZWN0b3J5IGlzIHNldC4KIyAoZGVmYXVsdCAxKQojIE5vdGUsIGV2ZW4gaWYgdGhpcyBpcyBzZXQgdG8gemVybywgdGhlcmUgYXJlIHNvbWUgZXJyb3JzIHRoYXQgc3RpbGwKIyBzdG9wIHRoZSB0ZXN0cy4KI0RJRV9PTl9GQUlMVVJFID0gMQoKIyBEaXJlY3RvcnkgdG8gc3RvcmUgZmFpbHVyZSBkaXJlY3RvcmllcyBvbiBmYWlsdXJlLiBJZiB0aGlzIGlzIG5vdAojIHNldCwgRElFX09OX0ZBSUxVUkU9MCB3aWxsIG5vdCBzYXZlIG9mZiB0aGUgLmNvbmZpZywgZG1lc2cgYW5kCiMgYm9vdGxvZy4gVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiBESUVfT05fRkFJTFVSRSBpcyBub3Qgc2V0LgojIChkZWZhdWx0IHVuZGVmaW5lZCkKI1NUT1JFX0ZBSUxVUkVTID0gL2hvbWUvdGVzdC9mYWlsdXJlcwoKIyBCdWlsZCB3aXRob3V0IGRvaW5nIGEgbWFrZSBtcnByb3Blciwgb3IgcmVtb3ZpbmcgLmNvbmZpZwojIChkZWZhdWx0IDApCiNCVUlMRF9OT0NMRUFOID0gMAoKIyBBcyB0aGUgdGVzdCByZWFkcyB0aGUgY29uc29sZSwgYWZ0ZXIgaXQgaGl0cyB0aGUgU1VDQ0VTU19MSU5FCiMgdGhlIHRpbWUgaXQgd2FpdHMgZm9yIHRoZSBtb25pdG9yIHRvIHNldHRsZSBkb3duIGJldHdlZW4gcmVhZHMKIyBjYW4gdXN1YWxseSBiZSBsb3dlcmVkLgojIChpbiBzZWNvbmRzKSAoZGVmYXVsdCAxKQojQk9PVEVEX1RJTUVPVVQgPSAxCgojIFRoZSB0aW1lb3V0IGluIHNlY29uZHMgd2hlbiB3ZSBjb25zaWRlciB0aGUgYm94IGh1bmcgYWZ0ZXIKIyB0aGUgY29uc29sZSBzdG9wIHByb2R1Y2luZyBvdXRwdXQuIEJlIHN1cmUgdG8gbGVhdmUgZW5vdWdoCiMgdGltZSBoZXJlIHRvIGdldCBwYXNzIGEgcmVib290LiBTb21lIG1hY2hpbmVzIG1heSBub3QgcHJvZHVjZQojIGFueSBjb25zb2xlIG91dHB1dCBmb3IgYSBsb25nIHRpbWUgZHVyaW5nIGEgcmVib290LiBZb3UgZG8KIyBub3Qgd2FudCB0aGUgdGVzdCB0byBmYWlsIGp1c3QgYmVjYXVzZSB0aGUgc3lzdGVtIHdhcyBpbgojIHRoZSBwcm9jZXNzIG9mIHJlYm9vdGluZyB0byB0aGUgdGVzdCBrZXJuZWwuCiMgKGRlZmF1bHQgMTIwKQojVElNRU9VVCA9IDEyMAoKIyBJbiBiZXR3ZWVuIHRlc3RzLCBhIHJlYm9vdCBvZiB0aGUgYm94IG1heSBvY2N1ciwgYW5kIHRoaXMKIyBpcyB0aGUgdGltZSB0byB3YWl0IGZvciB0aGUgY29uc29sZSBhZnRlciBpdCBzdG9wcyBwcm9kdWNpbmcKIyBvdXRwdXQuIFNvbWUgbWFjaGluZXMgbWF5IG5vdCBwcm9kdWNlIGEgbGFyZ2UgbGFnIG9uIHJlYm9vdAojIHNvIHRoaXMgc2hvdWxkIGFjY29tbW9kYXRlIGl0LgojIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBhbmQgVElNRU9VVCwgaXMgdGhhdCBUSU1FT1VUIGhhcHBlbnMKIyB3aGVuIHJlYm9vdGluZyB0byB0aGUgdGVzdCBrZXJuZWwuIFRoaXMgc2xlZXAgdGltZSBoYXBwZW5zCiMgYWZ0ZXIgYSB0ZXN0IGhhcyBjb21wbGV0ZWQgYW5kIHdlIGFyZSBhYm91dCB0byBzdGFydCBydW5uaW5nCiMgYW5vdGhlciB0ZXN0LiBJZiBhIHJlYm9vdCB0byB0aGUgcmVsaWFibGUga2VybmVsIGhhcHBlbnMsCiMgd2Ugd2FpdCBTTEVFUF9USU1FIGZvciB0aGUgY29uc29sZSB0byBzdG9wIHByb2R1Y2luZyBvdXRwdXQKIyBiZWZvcmUgc3RhcnRpbmcgdGhlIG5leHQgdGVzdC4KIwojIFlvdSBjYW4gc3BlZWQgdXAgcmVib290IHRpbWVzIGV2ZW4gbW9yZSBieSBzZXR0aW5nIFJFQk9PVF9TVUNDRVNTX0xJTkUuCiMgKGRlZmF1bHQgNjApCiNTTEVFUF9USU1FID0gNjAKCiMgVGhlIHRpbWUgaW4gYmV0d2VlbiBiaXNlY3RzIHRvIHNsZWVwIChpbiBzZWNvbmRzKQojIChkZWZhdWx0IDYwKQojQklTRUNUX1NMRUVQX1RJTUUgPSA2MAoKIyBUaGUgdGltZSBpbiBiZXR3ZWVuIHBhdGNoIGNoZWNrcyB0byBzbGVlcCAoaW4gc2Vjb25kcykKIyAoZGVmYXVsdCA2MCkKI1BBVENIQ0hFQ0tfU0xFRVBfVElNRSA9IDYwCgojIFJlYm9vdCB0aGUgdGFyZ2V0IGJveCBvbiBlcnJvciAoZGVmYXVsdCAwKQojUkVCT09UX09OX0VSUk9SID0gMAoKIyBQb3dlciBvZmYgdGhlIHRhcmdldCBvbiBlcnJvciAoaWdub3JlZCBpZiBSRUJPT1RfT05fRVJST1IgaXMgc2V0KQojICBOb3RlLCB0aGlzIGlzIGEgREVGQVVMVCBzZWN0aW9uIG9ubHkgb3B0aW9uLgojIChkZWZhdWx0IDApCiNQT1dFUk9GRl9PTl9FUlJPUiA9IDAKCiMgUG93ZXIgb2ZmIHRoZSB0YXJnZXQgYWZ0ZXIgYWxsIHRlc3RzIGhhdmUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseQojICBOb3RlLCB0aGlzIGlzIGEgREVGQVVMVCBzZWN0aW9uIG9ubHkgb3B0aW9uLgojIChkZWZhdWx0IDApCiNQT1dFUk9GRl9PTl9TVUNDRVNTID0gMAoKIyBSZWJvb3QgdGhlIHRhcmdldCBhZnRlciBhbGwgdGVzdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IChkZWZhdWx0IDEpCiMgKGlnbm9yZWQgaWYgUE9XRVJPRkZfT05fU1VDQ0VTUyBpcyBzZXQpCiNSRUJPT1RfT05fU1VDQ0VTUyA9IDEKCiMgSW4gY2FzZSB0aGVyZSBhcmUgaXNzZXMgd2l0aCByZWJvb3RpbmcsIHlvdSBjYW4gc3BlY2lmeSB0aGlzCiMgdG8gYWx3YXlzIHBvd2VyY3ljbGUgYWZ0ZXIgdGhpcyBhbW91bnQgb2YgdGltZSBhZnRlciBjYWxsaW5nCiMgcmVib290LgojIE5vdGUsIFBPV0VSQ1lDTEVfQUZURVJfUkVCT09UID0gMCBkb2VzIE5PVCBkaXNhYmxlIGl0LiBJdCBqdXN0CiMgbWFrZXMgaXQgcG93ZXJjeWNsZSBpbW1lZGlhdGVseSBhZnRlciByZWJvb3RpbmcuIERvIG5vdCBkZWZpbmUKIyBpdCBpZiB5b3UgZG8gbm90IHdhbnQgaXQuCiMgKGRlZmF1bHQgdW5kZWZpbmVkKQojUE9XRVJDWUNMRV9BRlRFUl9SRUJPT1QgPSA1CgojIEluIGNhc2UgdGhlcmUncyBpc3NlcyB3aXRoIGhhbHRpbmcsIHlvdSBjYW4gc3BlY2lmeSB0aGlzCiMgdG8gYWx3YXlzIHBvd2Vyb2ZmIGFmdGVyIHRoaXMgYW1vdW50IG9mIHRpbWUgYWZ0ZXIgY2FsbGluZwojIGhhbHQuCiMgTm90ZSwgUE9XRVJPRkZfQUZURVJfSEFMVCA9IDAgZG9lcyBOT1QgZGlzYWJsZSBpdC4gSXQganVzdAojIG1ha2VzIGl0IHBvd2Vyb2ZmIGltbWVkaWF0ZWx5IGFmdGVyIGhhbHRpbmcuIERvIG5vdCBkZWZpbmUKIyBpdCBpZiB5b3UgZG8gbm90IHdhbnQgaXQuCiMgKGRlZmF1bHQgdW5kZWZpbmVkKQojUE9XRVJPRkZfQUZURVJfSEFMVCA9IDIwCgojIEEgc2NyaXB0IG9yIGNvbW1hbmQgdG8gcG93ZXIgb2ZmIHRoZSBib3ggKGRlZmF1bHQgdW5kZWZpbmVkKQojIE5lZWRlZCBmb3IgUE9XRVJPRkZfT05fRVJST1IgYW5kIFNVQ0NFU1MKIwojIEV4YW1wbGUgZm9yIGRpZ2l0YWwgbG9nZ2VycyBwb3dlciBzd2l0Y2g6CiNQT1dFUl9PRkYgPSB3Z2V0IC0tbm8tcHJveHkgLU8gL2Rldi9udWxsIC1xICAtLWF1dGgtbm8tY2hhbGxlbmdlICdodHRwOi8vYWRtaW46YWRtaW5AcG93ZXIvb3V0bGV0PzU9T0ZGJwojCiMgRXhhbXBsZSBmb3IgYSB2aXJ0dWFsIGd1ZXN0IGNhbGwgIkd1ZXN0Ii4KI1BPV0VSX09GRiA9IHZpcnNoIGRlc3Ryb3kgR3Vlc3QKCiMgVGhlIHdheSB0byBleGVjdXRlIGEgY29tbWFuZCBvbiB0aGUgdGFyZ2V0CiMgKGRlZmF1bHQgc3NoICRTU0hfVVNFUkAkTUFDSElORSAkU1NIX0NPTU1BTkQiOykKIyBUaGUgdmFyaWFibGVzIFNTSF9VU0VSLCBNQUNISU5FIGFuZCBTU0hfQ09NTUFORCBhcmUgZGVmaW5lZAojU1NIX0VYRUMgPSBzc2ggJFNTSF9VU0VSQCRNQUNISU5FICRTU0hfQ09NTUFORCI7CgojIFRoZSB3YXkgdG8gY29weSBhIGZpbGUgdG8gdGhlIHRhcmdldAojIChkZWZhdWx0IHNjcCAkU1JDX0ZJTEUgJFNTSF9VU0VSQCRNQUNISU5FOiREU1RfRklMRSkKIyBUaGUgdmFyaWFibGVzIFNTSF9VU0VSLCBNQUNISU5FLCBTUkNfRklMRSBhbmQgRFNUX0ZJTEUgYXJlIGRlZmluZWQuCiNTQ1BfVE9fVEFSR0VUID0gc2NwICRTUkNfRklMRSAkU1NIX1VTRVJAJE1BQ0hJTkU6JERTVF9GSUxFCgojIFRoZSBuaWNlIHdheSB0byByZWJvb3QgdGhlIHRhcmdldAojIChkZWZhdWx0IHNzaCAkU1NIX1VTRVJAJE1BQ0hJTkUgcmVib290KQojIFRoZSB2YXJpYWJsZXMgU1NIX1VTRVIgYW5kIE1BQ0hJTkUgYXJlIGRlZmluZWQuCiNSRUJPT1QgPSBzc2ggJFNTSF9VU0VSQCRNQUNISU5FIHJlYm9vdAoKIyBUaGUgd2F5IHRyaXBsZSBmYXVsdHMgYXJlIGRldGVjdGVkIGlzIGJ5IHRlc3RpbmcgdGhlIGtlcm5lbAojIGJhbm5lci4gSWYgdGhlIGtlcm5lbCBiYW5uZXIgZm9yIHRoZSBrZXJuZWwgd2UgYXJlIHRlc3RpbmcgaXMKIyBmb3VuZCwgYW5kIHRoZW4gbGF0ZXIgYSBrZXJuZWwgYmFubmVyIGZvciBhbm90aGVyIGtlcm5lbCB2ZXJzaW9uCiMgaXMgZm91bmQsIGl0IGlzIGNvbnNpZGVyZWQgdGhhdCB3ZSBlbmNvdW50ZXJlZCBhIHRyaXBsZSBmYXVsdCwKIyBhbmQgdGhlcmUgaXMgbm8gcGFuaWMgb3IgY2FsbGJhY2ssIGJ1dCBzaW1wbHkgYSByZWJvb3QuCiMgVG8gZGlzYWJsZSB0aGlzIChiZWNhdXNlIGl0IGRpZCBhIGZhbHNlIHBvc2l0aXZlKSBzZXQgdGhlIGZvbGxvd2luZwojIHRvIDAuCiMgKGRlZmF1bHQgMSkKI0RFVEVDVF9UUklQTEVfRkFVTFQgPSAwCgojIyMjIFBlciB0ZXN0IHJ1biBvcHRpb25zICMjIyMKIyBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIG9ubHkgYWxsb3dlZCBpbiBURVNUX1NUQVJUIHNlY3Rpb25zLgojIFRoZXkgYXJlIGlnbm9yZWQgaW4gdGhlIERFRkFVTFRTIHNlY3Rpb25zLgojCiMgQWxsIG9mIHRoZXNlIGFyZSBvcHRpb25hbCBhbmQgdW5kZWZpbmVkIGJ5IGRlZmF1bHQsIGFsdGhvdWdoCiMgIHNvbWUgb2YgdGhlc2Ugb3B0aW9ucyBhcmUgcmVxdWlyZWQgZm9yIFRFU1RfVFlQRSBvZiBwYXRjaGNoZWNrCiMgIGFuZCBiaXNlY3QuCiMKIwojIENIRUNLT1VUID0gYnJhbmNoCiMKIyAgSWYgdGhlIEJVSUxEX0RJUiBpcyBhIGdpdCByZXBvc2l0b3J5LCB0aGVuIHlvdSBjYW4gc2V0IHRoaXMgb3B0aW9uCiMgIHRvIGNoZWNrb3V0IHRoZSBnaXZlbiBicmFuY2ggYmVmb3JlIHJ1bm5pbmcgdGhlIFRFU1QuIElmIHlvdQojICBzcGVjaWZ5IHRoaXMgZm9yIHRoZSBmaXJzdCBydW4sIHRoYXQgYnJhbmNoIHdpbGwgYmUgdXNlZCBmb3IKIyAgYWxsIHByZWNlZGluZyB0ZXN0cyB1bnRpbCBhIG5ldyBDSEVDS09VVCBpcyBzZXQuCiMKIwojIFRFU1RfTkFNRSA9IG5hbWUKIwojICBJZiB5b3Ugd2FudCB0aGUgdGVzdCB0byBoYXZlIGEgbmFtZSB0aGF0IGlzIGRpc3BsYXllZCBpbgojICB0aGUgdGVzdCByZXN1bHQgYmFubmVyIGF0IHRoZSBlbmQgb2YgdGhlIHRlc3QsIHRoZW4gdXNlIHRoaXMKIyAgb3B0aW9uLiBUaGlzIGlzIHVzZWZ1bCB0byBzZWFyY2ggZm9yIHRoZSBSRVNVTFQga2V5d29yZCBhbmQKIyAgbm90IGhhdmUgdG8gdHJhbnNsYXRlIGEgdGVzdCBudW1iZXIgdG8gYSB0ZXN0IGluIHRoZSBjb25maWcuCiMKIyBGb3IgVEVTVF9UWVBFID0gcGF0Y2hjaGVjawojCiMgIFRoaXMgZXhwZWN0cyB0aGUgQlVJTERfRElSIHRvIGJlIGEgZ2l0IHJlcG9zaXRvcnksIGFuZAojICB3aWxsIGNoZWNrb3V0IHRoZSBQQVRDSENIRUNLX1NUQVJUIGNvbW1pdC4KIwojICBUaGUgb3B0aW9uIEJVSUxEX1RZUEUgd2lsbCBiZSBpZ25vcmVkLgojCiMgIFRoZSBNSU5fQ09ORklHIHdpbGwgYmUgdXNlZCBmb3IgYWxsIGJ1aWxkcyBvZiB0aGUgcGF0Y2hjaGVjay4gVGhlIGJ1aWxkIHR5cGUKIyAgdXNlZCBmb3IgcGF0Y2hjaGVjayBpcyBvbGRjb25maWcuCiMKIyAgUEFUQ0hDSEVDS19TVEFSVCBpcyByZXF1aXJlZCBhbmQgaXMgdGhlIGZpcnN0IHBhdGNoIHRvCiMgICB0ZXN0ICh0aGUgU0hBMSBvZiB0aGUgY29tbWl0KS4gWW91IG1heSBhbHNvIHNwZWNpZnkgYW55dGhpbmcKIyAgIHRoYXQgZ2l0IGNoZWNrb3V0IGFsbG93cyAoYnJhbmNoIG5hbWUsIHRhZ2UsIEhFQUR+MykuCiMKIyAgUEFUQ0hDSEVDS19FTkQgaXMgdGhlIGxhc3QgcGF0Y2ggdG8gY2hlY2sgKGRlZmF1bHQgSEVBRCkKIwojICBQQVRDSENIRUNLX1RZUEUgaXMgcmVxdWlyZWQgYW5kIGlzIHRoZSB0eXBlIG9mIHRlc3QgdG8gcnVuOgojICAgICAgYnVpbGQsIGJvb3QsIHRlc3QuCiMKIyAgIE5vdGUsIHRoZSBidWlsZCB0ZXN0IHdpbGwgbG9vayBmb3Igd2FybmluZ3MsIGlmIGEgd2FybmluZyBvY2N1cnJlZAojICAgICBpbiBhIGZpbGUgdGhhdCBhIGNvbW1pdCB0b3VjaGVzLCB0aGUgYnVpbGQgd2lsbCBmYWlsLCB1bmxlc3MKIyAgICAgSUdOT1JFX1dBUk5JTkdTIGlzIHNldCBmb3IgdGhlIGdpdmVuIGNvbW1pdCdzIHNoYTEKIwojICAgSUdOT1JFX1dBUk5JTkdTIGNhbiBiZSB1c2VkIHRvIGRpc2FibGUgdGhlIGZhaWx1cmUgb2YgcGF0Y2hjaGVjawojICAgICBvbiBhIHBhcnRpY3VsZXIgY29tbWl0IChTSEExKS4gWW91IGNhbiBhZGQgbW9yZSB0aGFuIG9uZSBjb21taXQKIyAgICAgYnkgYWRkaW5nIGEgbGlzdCBvZiBTSEExcyB0aGF0IGFyZSBzcGFjZSBkZWxpbWl0ZWQuCiMKIyAgIElmIEJVSUxEX05PQ0xFQU4gaXMgc2V0LCB0aGVuIG1ha2UgbXJwcm9wZXIgd2lsbCBub3QgYmUgcnVuIG9uCiMgICBhbnkgb2YgdGhlIGJ1aWxkcywganVzdCBsaWtlIGFsbCBvdGhlciBURVNUX1RZUEUgdGVzdHMuIEJ1dAojICAgd2hhdCBtYWtlcyBwYXRjaGNoZWNrIGRpZmZlcmVudCBmcm9tIHRoZSBvdGhlciB0ZXN0cywgaXMgaWYKIyAgIEJVSUxEX05PQ0xFQU4gaXMgbm90IHNldCwgb25seSB0aGUgZmlyc3QgYW5kIGxhc3QgcGF0Y2ggcnVuCiMgICBtYWtlIG1ycHJvcGVyLiBUaGlzIGhlbHBzIHNwZWVkIHVwIHRoZSB0ZXN0LgojCiMgRXhhbXBsZToKIyAgIFRFU1RfU1RBUlQKIyAgIFRFU1RfVFlQRSA9IHBhdGNoY2hlY2sKIyAgIENIRUNLT1VUID0gbXlicmFuY2gKIyAgIFBBVENIQ0hFQ0tfVFlQRSA9IGJvb3QKIyAgIFBBVENIQ0hFQ0tfU1RBUlQgPSA3NDdlOTRhZTNkMWI0YzliZjUzODBlNTY5ZjYxNGViOTA0MGI3OWU3CiMgICBQQVRDSENIRUNLX0VORCA9IEhFQUR+MgojICAgSUdOT1JFX1dBUk5JTkdTID0gNDJmOWM2YjY5YjU0OTQ2ZmZjMDUxNWY1N2QwMWRjN2Y1YzBlNDcxMiAwYzE3Y2EyYzcxODdmNDMxZDhmZmM3OWU4MWFkZGM3MzBmMzNkMTI4CiMKIwojCiMgRm9yIFRFU1RfVFlQRSA9IGJpc2VjdAojCiMgIFlvdSBjYW4gc3BlY2lmeSBhIGdpdCBiaXNlY3QgaWYgdGhlIEJVSUxEX0RJUiBpcyBhIGdpdCByZXBvc2l0b3J5LgojICBUaGUgTUlOX0NPTkZJRyB3aWxsIGJlIHVzZWQgZm9yIGFsbCBidWlsZHMgb2YgdGhlIGJpc2VjdC4gVGhlIGJ1aWxkIHR5cGUKIyAgdXNlZCBmb3IgYmlzZWN0aW5nIGlzIG9sZGNvbmZpZy4KIwojICBUaGUgb3B0aW9uIEJVSUxEX1RZUEUgd2lsbCBiZSBpZ25vcmVkLgojCiMgIEJJU0VDVF9UWVBFIGlzIHRoZSB0eXBlIG9mIHRlc3QgdG8gcGVyZm9ybToKIwlidWlsZAktIGJhZCBmYWlscyB0byBidWlsZAojCWJvb3QJLSBiYWQgYnVpbGRzIGJ1dCBmYWlscyB0byBib290CiMJdGVzdAktIGJhZCBib290cyBidXQgZmFpbHMgYSB0ZXN0CiMKIyBCSVNFQ1RfR09PRCBpcyB0aGUgY29tbWl0IChTSEExKSB0byBsYWJlbCBhcyBnb29kIChhY2NlcHRzIGFsbCBnaXQgZ29vZCBjb21taXQgdHlwZXMpCiMgQklTRUNUX0JBRCBpcyB0aGUgY29tbWl0IHRvIGxhYmVsIGFzIGJhZCAoYWNjZXB0cyBhbGwgZ2l0IGJhZCBjb21taXQgdHlwZXMpCiMKIyBUaGUgYWJvdmUgdGhyZWUgb3B0aW9ucyBhcmUgcmVxdWlyZWQgZm9yIGEgYmlzZWN0IG9wZXJhdGlvbi4KIwojIEJJU0VDVF9SRVBMQVkgPSAvcGF0aC90by9yZXBsYXkvZmlsZSAob3B0aW9uYWwsIGRlZmF1bHQgdW5kZWZpbmVkKQojCiMgICBJZiBhbiBvcGVyYXRpb24gZmFpbGVkIGluIHRoZSBiaXNlY3QgdGhhdCB3YXMgbm90IGV4cGVjdGVkIHRvCiMgICBmYWlsLiBUaGVuIHRoZSB0ZXN0IGVuZHMuIFRoZSBzdGF0ZSBvZiB0aGUgQlVJTERfRElSIHdpbGwgYmUKIyAgIGxlZnQgb2ZmIGF0IHdoZXJlIHRoZSBmYWlsdXJlIG9jY3VycmVkLiBZb3UgY2FuIGV4YW1pbmUgdGhlCiMgICByZWFzb24gZm9yIHRoZSBmYWlsdXJlLCBhbmQgcGVyaGFwcyBldmVuIGZpbmQgYSBnaXQgY29tbWl0CiMgICB0aGF0IHdvdWxkIHdvcmsgdG8gY29udGludWUgd2l0aC4gWW91IGNhbiBydW46CiMKIyAgIGdpdCBiaXNlY3QgbG9nID4gL3BhdGgvdG8vcmVwbGF5L2ZpbGUKIwojICAgVGhlIGFkZGluZzoKIwojICAgIEJJU0VDVF9SRVBMQVk9IC9wYXRoL3RvL3JlcGxheS9maWxlCiMKIyAgIEFuZCBydW5uaW5nIHRoZSB0ZXN0IGFnYWluLiBUaGUgdGVzdCB3aWxsIHBlcmZvcm0gdGhlIGluaXRpYWwKIyAgICBnaXQgYmlzZWN0IHN0YXJ0LCBnaXQgYmlzZWN0IGdvb2QsIGFuZCBnaXQgYmlzZWN0IGJhZCwgYW5kCiMgICAgdGhlbiBpdCB3aWxsIHJ1biBnaXQgYmlzZWN0IHJlcGxheSBvbiB0aGlzIGZpbGUsIGJlZm9yZQojICAgIGNvbnRpbnVpbmcgd2l0aCB0aGUgYmlzZWN0LgojCiMgQklTRUNUX1NUQVJUID0gY29tbWl0IChvcHRpb25hbCwgZGVmYXVsdCB1bmRlZmluZWQpCiMKIyAgIEFzIHdpdGggQklTRUNUX1JFUExBWSwgaWYgdGhlIHRlc3QgZmFpbGVkIG9uIGEgY29tbWl0IHRoYXQKIyAgIGp1c3QgaGFwcGVuIHRvIGhhdmUgYSBiYWQgY29tbWl0IGluIHRoZSBtaWRkbGUgb2YgdGhlIGJpc2VjdCwKIyAgIGFuZCB5b3UgbmVlZCB0byBza2lwIGl0LiBJZiBCSVNFQ1RfU1RBUlQgaXMgZGVmaW5lZCwgaXQKIyAgIHdpbGwgY2hlY2tvdXQgdGhhdCBjb21taXQgYWZ0ZXIgZG9pbmcgdGhlIGluaXRpYWwgZ2l0IGJpc2VjdCBzdGFydCwKIyAgIGdpdCBiaXNlY3QgZ29vZCwgZ2l0IGJpc2VjdCBiYWQsIGFuZCBydW5uaW5nIHRoZSBnaXQgYmlzZWN0IHJlcGxheQojICAgaWYgdGhlIEJJU0VDVF9SRVBMQVkgaXMgc2V0LgojCiMgQklTRUNUX1NLSVAgPSAxIChvcHRpb25hbCwgZGVmYXVsdCAwKQojCiMgICBJZiBCSVNFQ1RfVFlQRSBpcyBzZXQgdG8gdGVzdCBidXQgdGhlIGJ1aWxkIGZhaWxzLCBrdGVzdCB3aWxsCiMgICBzaW1wbHkgZmFpbCB0aGUgdGVzdCBhbmQgZW5kIHRoZWlyLiBZb3UgY291bGQgdXNlIEJJU0VDVF9SRVBMQVkKIyAgIGFuZCBCSVNFQ1RfU1RBUlQgdG8gcmVzdW1lIGFmdGVyIHlvdSBmb3VuZCBhIG5ldyBzdGFydGluZyBwb2ludCwKIyAgIG9yIHlvdSBjb3VsZCBzZXQgQklTRUNUX1NLSVAgdG8gMS4gSWYgQklTRUNUX1NLSVAgaXMgc2V0IHRvIDEsCiMgICB3aGVuIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBCSVNFQ1RfVFlQRSBmYWlscywga3Rlc3QucGwgd2lsbAojICAgcnVuICJnaXQgYmlzZWN0IHNraXAiIGFuZCB0cnkgYWdhaW4uCiMKIyBCSVNFQ1RfRklMRVMgPSA8cGF0aD4gKG9wdGlvbmFsLCBkZWZhdWx0IHVuZGVmaW5lZCkKIwojICAgVG8ganVzdCBydW4gdGhlIGdpdCBiaXNlY3Qgb24gYSBzcGVjaWZpYyBwYXRoLCBzZXQgQklTRUNUX0ZJTEVTLgojICAgRm9yIGV4YW1wbGU6CiMKIyAgICAgQklTRUNUX0ZJTEVTID0gYXJjaC94ODYga2VybmVsL3RpbWUKIwojICAgV2lsbCBydW4gdGhlIGJpc2VjdCB3aXRoICJnaXQgYmlzZWN0IHN0YXJ0IC0tIGFyY2gveDg2IGtlcm5lbC90aW1lIgojCiMgQklTRUNUX1JFVkVSU0UgPSAxIChvcHRpb25hbCwgZGVmYXVsdCAwKQojCiMgICBJbiB0aG9zZSBzdHJhbmdlIGluc3RhbmNlcyB3aGVyZSBpdCB3YXMgYnJva2VuIGZvcmV2ZXIKIyAgIGFuZCB5b3UgYXJlIHRyeWluZyB0byBmaW5kIHdoZXJlIGl0IHN0YXJ0ZWQgdG8gd29yayEKIyAgIFNldCBCSVNFQ1RfR09PRCB0byB0aGUgY29tbWl0IHRoYXQgd2FzIGxhc3Qga25vd24gdG8gZmFpbAojICAgU2V0IEJJU0VDVF9CQUQgdG8gdGhlIGNvbW1pdCB0aGF0IGlzIGtub3duIHRvIHN0YXJ0IHdvcmtpbmcuCiMgICBXaXRoIEJJU0VDVF9SRVZFUlNFID0gMSwgVGhlIHRlc3Qgd2lsbCBjb25zaWRlciBmYWlsdXJlcyBhcwojICAgZ29vZCwgYW5kIHN1Y2Nlc3MgYXMgYmFkLgojCiMgQklTRUNUX01BTlVBTCA9IDEgKG9wdGlvbmFsLCBkZWZhdWx0IDApCiMKIyAgIEluIGNhc2UgdGhlcmUncyBhIHByb2JsZW0gd2l0aCBhdXRvbWF0aW5nIHRoZSBiaXNlY3QgZm9yCiMgICB3aGF0ZXZlciByZWFzb24uIChDYW4ndCByZWJvb3QsIHdhbnQgdG8gaW5zcGVjdCBlYWNoIGl0ZXJhdGlvbikKIyAgIERvaW5nIGEgQklTRUNUX01BTlVBTCB3aWxsIGhhdmUgdGhlIHRlc3Qgd2FpdCBmb3IgeW91IHRvCiMgICB0ZWxsIGl0IGlmIHRoZSB0ZXN0IHBhc3NlZCBvciBmYWlsZWQgYWZ0ZXIgZWFjaCBpdGVyYXRpb24uCiMgICBUaGlzIGlzIGJhc2ljYWxsIHRoZSBzYW1lIGFzIHJ1bm5pbmcgZ2l0IGJpc2VjdCB5b3Vyc2VsZgojICAgYnV0IGt0ZXN0IHdpbGwgcmVidWlsZCBhbmQgaW5zdGFsbCB0aGUga2VybmVsIGZvciB5b3UuCiMKIyBCSVNFQ1RfQ0hFQ0sgPSAxIChvcHRpb25hbCwgZGVmYXVsdCAwKQojCiMgICBKdXN0IHRvIGJlIHN1cmUgdGhlIGdvb2QgaXMgZ29vZCBhbmQgYmFkIGlzIGJhZCwgc2V0dGluZwojICAgQklTRUNUX0NIRUNLIHRvIDEgd2lsbCBzdGFydCB0aGUgYmlzZWN0IGJ5IGZpcnN0IGNoZWNraW5nCiMgICBvdXQgQklTRUNUX0JBRCBhbmQgbWFrZXMgc3VyZSBpdCBmYWlscywgdGhlbiBpdCB3aWxsIGNoZWNrCiMgICBvdXQgQklTRUNUX0dPT0QgYW5kIG1ha2VzIHN1cmUgaXQgc3VjY2VlZHMgYmVmb3JlIHN0YXJ0aW5nCiMgICB0aGUgYmlzZWN0IChpdCB3b3JrcyBmb3IgQklTRUNUX1JFVkVSU0UgdG9vKS4KIwojICAgWW91IGNhbiBsaW1pdCB0aGUgdGVzdCB0byBqdXN0IGNoZWNrIEJJU0VDVF9HT09EIG9yCiMgICBCSVNFQ1RfQkFEIHdpdGggQklTRUNUX0NIRUNLID0gZ29vZCBvcgojICAgQklTRUNUX0NIRUNLID0gYmFkLCByZXNwZWN0aXZlbHkuCiMKIyBFeGFtcGxlOgojICAgVEVTVF9TVEFSVAojICAgVEVTVF9UWVBFID0gYmlzZWN0CiMgICBCSVNFQ1RfR09PRCA9IHYyLjYuMzYKIyAgIEJJU0VDVF9CQUQgPSBiNTE1MzE2M2VkNTgwZTAwYzY3YmRmZWNiMDJiMmUzODQzODE3YjNlCiMgICBCSVNFQ1RfVFlQRSA9IGJ1aWxkCiMgICBNSU5fQ09ORklHID0gL2hvbWUvdGVzdC9jb25maWctYmlzZWN0CiMKIwojCiMgRm9yIFRFU1RfVFlQRSA9IGNvbmZpZ19iaXNlY3QKIwojICBJbiB0aG9zZSBjYXNlcyB0aGF0IHlvdSBoYXZlIHR3byBkaWZmZXJlbnQgY29uZmlncy4gT25lIG9mIHRoZW0KIyAgd29yaywgdGhlIG90aGVyIGRvZXMgbm90LCBhbmQgeW91IGRvIG5vdCBrbm93IHdoYXQgY29uZmlnIGNhdXNlcwojICB0aGUgcHJvYmxlbS4KIyAgVGhlIFRFU1RfVFlQRSBjb25maWdfYmlzZWN0IHdpbGwgYmlzZWN0IHRoZSBiYWQgY29uZmlnIGxvb2tpbmcgZm9yCiMgIHdoYXQgY29uZmlnIGNhdXNlcyB0aGUgZmFpbHVyZS4KIwojICBUaGUgd2F5IGl0IHdvcmtzIGlzIHRoaXM6CiMKIyAgIEZpcnN0IGl0IGZpbmRzIGEgY29uZmlnIHRvIHdvcmsgd2l0aC4gU2luY2UgYSBkaWZmZXJlbnQgdmVyc2lvbiwgb3IKIyAgIE1JTl9DT05GSUcgbWF5IGNhdXNlIGRpZmZlcmVudCBkZXBlbmRlY2llcywgaXQgbXVzdCBydW4gdGhyb3VnaCB0aGlzCiMgICBwcmVwYXJhdGlvbi4KIwojICAgT3ZlcndyaXRlcyBhbnkgY29uZmlnIHNldCBpbiB0aGUgYmFkIGNvbmZpZyB3aXRoIGEgY29uZmlnIHNldCBpbgojICAgZWl0aGVyIHRoZSBNSU5fQ09ORklHIG9yIEFERF9DT05GSUcuIFRodXMsIG1ha2Ugc3VyZSB0aGVzZSBjb25maWdzCiMgICBhcmUgbWluaW1hbCBhbmQgZG8gbm90IGRpc2FibGUgY29uZmlncyB5b3Ugd2FudCB0byB0ZXN0OgojICAgKGllLiAgIyBDT05GSUdfRk9PIGlzIG5vdCBzZXQpLgojCiMgICBBbiBvbGRjb25maWcgaXMgcnVuIG9uIHRoZSBiYWQgY29uZmlnIGFuZCBhbnkgbmV3IGNvbmZpZyB0aGF0CiMgICBhcHBlYXJzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGNvbmZpZ3MgdG8gdGVzdC4KIwojICAgRmluYWxseSwgaXQgZ2VuZXJhdGVzIGEgY29uZmlnIHdpdGggdGhlIGFib3ZlIHJlc3VsdCBhbmQgcnVucyBpdAojICAgYWdhaW4gdGhyb3VnaCBtYWtlIG9sZGNvbmZpZyB0byBwcm9kdWNlIGEgY29uZmlnIHRoYXQgc2hvdWxkIGJlCiMgICBzYXRpc2ZpZWQgYnkga2NvbmZpZy4KIwojICAgVGhlbiBpdCBzdGFydHMgdGhlIGJpc2VjdC4KIwojICAgVGhlIGNvbmZpZ3MgdG8gdGVzdCBhcmUgY3V0IGluIGhhbGYuIElmIGFsbCB0aGUgY29uZmlncyBpbiB0aGlzCiMgICBoYWxmIGRlcGVuZCBvbiBhIGNvbmZpZyBpbiB0aGUgb3RoZXIgaGFsZiwgdGhlbiB0aGUgb3RoZXIgaGFsZgojICAgaXMgdGVzdGVkIGluc3RlYWQuIElmIG5vIGNvbmZpZ3MgYXJlIGVuYWJsZWQgYnkgZWl0aGVyIGhhbGYsIHRoZW4KIyAgIHRoaXMgbWVhbnMgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGV4aXN0cyBhbmQgdGhlIHRlc3QgZmFpbHMuCiMKIyAgIEEgY29uZmlnIGlzIGNyZWF0ZWQgd2l0aCB0aGUgdGVzdCBoYWxmLCBhbmQgdGhlIGJpc2VjdCB0ZXN0IGlzIHJ1bi4KIwojICAgSWYgdGhlIGJpc2VjdCBzdWNjZWVkcywgdGhlbiBhbGwgY29uZmlncyBpbiB0aGUgZ2VuZXJhdGVkIGNvbmZpZwojICAgYXJlIHJlbW92ZWQgZnJvbSB0aGUgY29uZmlncyB0byB0ZXN0IGFuZCBhZGRlZCB0byB0aGUgY29uZmlncyB0aGF0CiMgICB3aWxsIGJlIGVuYWJsZWQgZm9yIGFsbCBidWlsZHMgKHRoZXkgd2lsbCBiZSBlbmFibGVkLCBidXQgbm90IGJlIHBhcnQKIyAgIG9mIHRoZSBjb25maWdzIHRvIGV4YW1pbmUpLgojCiMgICBJZiB0aGUgYmlzZWN0IGZhaWxzLCB0aGVuIGFsbCB0ZXN0IGNvbmZpZ3MgdGhhdCB3ZXJlIG5vdCBlbmFibGVkIGJ5CiMgICB0aGUgY29uZmlnIGZpbGUgYXJlIHJlbW92ZWQgZnJvbSB0aGUgdGVzdC4gVGhlc2UgY29uZmlncyB3aWxsIG5vdAojICAgYmUgZW5hYmxlZCBpbiBmdXR1cmUgdGVzdHMuIFNpbmNlIGN1cnJlbnQgY29uZmlnIGZhaWxlZCwgd2UgY29uc2lkZXIKIyAgIHRoaXMgdG8gYmUgYSBzdWJzZXQgb2YgdGhlIGNvbmZpZyB0aGF0IHdlIHN0YXJ0ZWQgd2l0aC4KIwojICAgV2hlbiB3ZSBhcmUgZG93biB0byBvbmUgY29uZmlnLCBpdCBpcyBjb25zaWRlcmVkIHRoZSBiYWQgY29uZmlnLgojCiMgICBOb3RlLCB0aGUgY29uZmlnIGNob3NlbiBtYXkgbm90IGJlIHRoZSB0cnVlIGJhZCBjb25maWcuIER1ZSB0bwojICAgZGVwZW5kZW5jaWVzIGFuZCBzZWxlY3Rpb25zIG9mIHRoZSBrYnVpbGQgc3lzdGVtLCBtdWxpdHBsZQojICAgY29uZmlncyBtYXkgYmUgbmVlZGVkIHRvIGNhdXNlIGEgZmFpbHVyZS4gSWYgeW91IGRpc2FibGUgdGhlCiMgICBjb25maWcgdGhhdCB3YXMgZm91bmQgYW5kIHJlc3RhcnQgdGhlIHRlc3QsIGlmIHRoZSB0ZXN0IGZhaWxzCiMgICBhZ2FpbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gcmVydW4gdGhlIGNvbmZpZ19iaXNlY3Qgd2l0aCBhIG5ldwojICAgYmFkIGNvbmZpZyB3aXRob3V0IHRoZSBmb3VuZCBjb25maWcgZW5hYmxlZC4KIwojICBUaGUgb3B0aW9uIEJVSUxEX1RZUEUgd2lsbCBiZSBpZ25vcmVkLgojCiMgIENPTkZJR19CSVNFQ1RfVFlQRSBpcyB0aGUgdHlwZSBvZiB0ZXN0IHRvIHBlcmZvcm06CiMJYnVpbGQJLSBiYWQgZmFpbHMgdG8gYnVpbGQKIwlib290CS0gYmFkIGJ1aWxkcyBidXQgZmFpbHMgdG8gYm9vdAojCXRlc3QJLSBiYWQgYm9vdHMgYnV0IGZhaWxzIGEgdGVzdAojCiMgIENPTkZJR19CSVNFQ1QgaXMgdGhlIGNvbmZpZyB0aGF0IGZhaWxlZCB0byBib290CiMKIyAgSWYgQklTRUNUX01BTlVBTCBpcyBzZXQsIGl0IHdpbGwgcGF1c2UgYmV0d2VlbiBpdGVyYXRpb25zLgojICBUaGlzIGlzIHVzZWZ1bCB0byB1c2UganVzdCBrdGVzdC5wbCBqdXN0IGZvciB0aGUgY29uZmlnIGJpc2VjdC4KIyAgSWYgeW91IHNldCBpdCB0byBidWlsZCwgaXQgd2lsbCBydW4gdGhlIGJpc2VjdCBhbmQgeW91IGNhbgojICBjb250cm9sIHdoYXQgaGFwcGVucyBpbiBiZXR3ZWVuIGl0ZXJhdGlvbnMuIEl0IHdpbGwgYXNrIHlvdSBpZgojICB0aGUgdGVzdCBzdWNjZWVkZWQgb3Igbm90IGFuZCBjb250aW51ZSB0aGUgY29uZmlnIGJpc2VjdC4KIwojIENPTkZJR19CSVNFQ1RfR09PRCAob3B0aW9uYWwpCiMgIElmIHlvdSBoYXZlIGEgZ29vZCBjb25maWcgdG8gc3RhcnQgd2l0aCwgdGhlbiB5b3UKIyAgY2FuIHNwZWNpZnkgaXQgd2l0aCBDT05GSUdfQklTRUNUX0dPT0QuIE90aGVyd2lzZQojICB0aGUgTUlOX0NPTkZJRyBpcyB0aGUgYmFzZS4KIwojIEV4YW1wbGU6CiMgICBURVNUX1NUQVJUCiMgICBURVNUX1RZUEUgPSBjb25maWdfYmlzZWN0CiMgICBDT05GSUdfQklTRUNUX1RZUEUgPSBidWlsZAojICAgQ09ORklHX0JJU0VDVCA9IC9ob21lL3Rlc3Qvom9uZmlnLWJhZAojICAgTUlOX0NPTkZJRyA9IC9ob21lL3Rlc3QvY29uZmlnLW1pbgojICAgQklTRUNUX01BTlVBTCA9IDEKIwojCiMKIyBGb3IgVEVTVF9UWVBFID0gbWFrZV9taW5fY29uZmlnCiMKIyAgQWZ0ZXIgZG9pbmcgYSBtYWtlIGxvY2FseWVzY29uZmlnLCB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uIG1heQojICBub3QgYmUgdGhlIG1vc3QgdXNlZnVsIG1pbmltdW0gY29uZmlndXJhdGlvbi4gSGF2aW5nIGEgdHJ1ZSBtaW5pbXVtCiMgIGNvbmZpZyB0aGF0IHlvdSBjYW4gdXNlIGFnYWluc3Qgb3RoZXIgY29uZmlncyBpcyB2ZXJ5IHVzZWZ1bCBpZgojICBzb21lb25lIGVsc2UgaGFzIGEgY29uZmlnIHRoYXQgYnJlYWtzIG9uIHlvdXIgY29kZS4gQnkgb25seSBmb3JjaW5nCiMgIHRob3NlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHRydWx5IHJlcXVpcmVkIHRvIGJvb3QgeW91ciBtYWNoaW5lCiMgIHdpbGwgZ2l2ZSB5b3UgbGVzcyBvZiBhIGNoYW5jZSB0aGF0IG9uZSBvZiB5b3VyIHNldCBjb25maWd1cmF0aW9ucwojICB3aWxsIG1ha2UgdGhlIGJ1ZyBnbyBhd2F5LiBUaGlzIHdpbGwgZ2l2ZSB5b3UgYSBiZXR0ZXIgY2hhbmNlIHRvCiMgIGJlIGFibGUgdG8gcmVwcm9kdWNlIHRoZSByZXBvcnRlZCBidWcgbWF0Y2hpbmcgdGhlIGJyb2tlbiBjb25maWcuCiMKIyAgTm90ZSwgdGhpcyBkb2VzIHRha2Ugc29tZSB0aW1lLCBhbmQgbWF5IHJlcXVpcmUgeW91IHRvIHJ1biB0aGUKIyAgdGVzdCBvdmVyIG5pZ2h0LCBvciBwZXJoYXBzIG92ZXIgdGhlIHdlZWtlbmQuIEJ1dCBpdCBhbHNvIGFsbG93cwojICB5b3UgdG8gaW50ZXJydXB0IGl0LCBhbmQgZ2l2ZXMgeW91IHRoZSBjdXJyZW50IG1pbmltdW0gY29uZmlnCiMgIHRoYXQgd2FzIGZvdW5kIHRpbGwgdGhhdCB0aW1lLgojCiMgIE5vdGUsIHRoaXMgdGVzdCBhdXRvbWF0aWNhbGx5IGFzc3VtZXMgYSBCVUlMRF9UWVBFIG9mIG9sZGNvbmZpZwojICBhbmQgaXRzIHRlc3QgdHlwZSBhY3RzIGxpa2UgYm9vdC4KIyAgVE9ETzogYWRkIGEgdGVzdCB2ZXJzaW9uIHRoYXQgbWFrZXMgdGhlIGNvbmZpZyBkbyBtb3JlIHRoYW4ganVzdAojICAgYm9vdCwgbGlrZSBoYXZpbmcgbmV0d29yayBhY2Nlc3MuCiMKIyAgVG8gc2F2ZSB0aW1lLCB0aGUgdGVzdCBkb2VzIG5vdCBqdXN0IGdyYWIgYW55IG9wdGlvbiBhbmQgdGVzdAojICBpdC4gVGhlIEtjb25maWcgZmlsZXMgYXJlIGV4YW1pbmVkIHRvIGRldGVybWluZSB0aGUgZGVwZW5kZW5jaWVzCiMgIG9mIHRoZSBjb25maWdzLiBJZiBhIGNvbmZpZyBpcyBjaG9zZW4gdGhhdCBkZXBlbmRzIG9uIGFub3RoZXIKIyAgY29uZmlnLCB0aGF0IGNvbmZpZyB3aWxsIGJlIGNoZWNrZWQgZmlyc3QuIEJ5IGNoZWNraW5nIHRoZQojICBwYXJlbnRzIGZpcnN0LCB3ZSBjYW4gZWxpbWluYXRlIHdob2xlIGdyb3VwcyBvZiBjb25maWdzIHRoYXQKIyAgbWF5IGhhdmUgYmVlbiBlbmFibGVkLgojCiMgIEZvciBleGFtcGxlLCBpZiBhIFVTQiBkZXZpY2UgY29uZmlnIGlzIGNob3NlbiBhbmQgZGVwZW5kcyBvbiBDT05GSUdfVVNCLAojICB0aGUgQ09ORklHX1VTQiB3aWxsIGJlIHRlc3RlZCBiZWZvcmUgdGhlIGRldmljZS4gSWYgQ09ORklHX1VTQiBpcwojICBmb3VuZCBub3QgdG8gYmUgbmVlZGVkLCBpdCwgYXMgd2VsbCBhcyBhbGwgY29uZmlncyB0aGF0IGRlcGVuZCBvbgojICBpdCwgd2lsbCBiZSBkaXNhYmxlZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBjdXJyZW50IG1pbl9jb25maWcuCiMKIyAgT1VUUFVUX01JTl9DT05GSUcgaXMgdGhlIHBhdGggYW5kIGZpbGVuYW1lIG9mIHRoZSBmaWxlIHRoYXQgd2lsbAojICAgYmUgY3JlYXRlZCBmcm9tIHRoZSBNSU5fQ09ORklHLiBJZiB5b3UgaW50ZXJydXB0IHRoZSB0ZXN0LCBzZXQKIyAgIHRoaXMgZmlsZSBhcyB5b3VyIG5ldyBtaW4gY29uZmlnLCBhbmQgdXNlIGl0IHRvIGNvbnRpbnVlIHRoZSB0ZXN0LgojICAgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gZXhpc3Qgb24gc3RhcnQgb2YgdGVzdC4KIyAgIFRoaXMgZmlsZSBpcyBub3QgY3JlYXRlZCB1bnRpbCBhIGNvbmZpZyBpcyBmb3VuZCB0aGF0IGNhbiBiZSByZW1vdmVkLgojICAgSWYgdGhpcyBmaWxlIGV4aXN0cywgeW91IHdpbGwgYmUgcHJvbXB0ZWQgaWYgeW91IHdhbnQgdG8gdXNlIGl0CiMgICBhcyB0aGUgbWluX2NvbmZpZyAob3ZlcnJpZGluZyBNSU5fQ09ORklHKSBpZiBTVEFSVF9NSU5fQ09ORklHCiMgICBpcyBub3QgZGVmaW5lZC4KIyAgIChyZXF1aXJlZCBmaWVsZCkKIwojICBTVEFSVF9NSU5fQ09ORklHIGlzIHRoZSBjb25maWcgdG8gdXNlIHRvIHN0YXJ0IHRoZSB0ZXN0IHdpdGguCiMgICB5b3UgY2FuIHNldCB0aGlzIGFzIHRoZSBzYW1lIE9VVFBVVF9NSU5fQ09ORklHLCBidXQgaWYgeW91IGRvCiMgICB0aGUgT1VUUFVUX01JTl9DT05GSUcgZmlsZSBtdXN0IGV4aXN0LgojICAgKGRlZmF1bHQgTUlOX0NPTkZJRykKIwojICBJR05PUkVfQ09ORklHIGlzIHVzZWQgdG8gc3BlY2lmeSBhIGNvbmZpZyBmaWxlIHRoYXQgaGFzIGNvbmZpZ3MgdGhhdAojICAgeW91IGFscmVhZHkga25vdyBtdXN0IGJlIHNldC4gQ29uZmlncyBhcmUgd3JpdHRlbiBoZXJlIHRoYXQgaGF2ZQojICAgYmVlbiB0ZXN0ZWQgYW5kIHByb3ZlZCB0byBiZSByZXF1aXJlZC4gSXQgaXMgYmVzdCB0byBkZWZpbmUgdGhpcwojICAgZmlsZSBpZiB5b3UgaW50ZW5kIG9uIGludGVycnVwdGluZyB0aGUgdGVzdCBhbmQgcnVubmluZyBpdCB3aGVyZQojICAgaXQgbGVmdCBvZmYuIE5ldyBjb25maWdzIHRoYXQgaXQgZmluZHMgd2lsbCBiZSB3cml0dGVuIHRvIHRoaXMgZmlsZQojICAgYW5kIHdpbGwgbm90IGJlIHRlc3RlZCBhZ2FpbiBpbiBsYXRlciBydW5zLgojICAgKG9wdGlvbmFsKQojCiMgRXhhbXBsZToKIwojICBURVNUX1RZUEUgPSBtYWtlX21pbl9jb25maWcKIyAgT1VUUFVUX01JTl9DT05GSUcgPSAvcGF0aC90by9jb25maWctbmV3LW1pbgojICBTVEFSVF9NSU5fQ09ORklHID0gL3BhdGgvdG8vY29uZmlnLW1pbgojICBJR05PUkVfQ09ORklHID0gL3BhdGgvdG8vY29uZmlnLXRlc3RlZAojCg==