IyBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuICBTZWUKIyB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cwojIHRoYXQgbWF5IGFwcGx5OgojCiMgUG9ydGlvbnMgQ29weXJpZ2h0IKkgMjAwMyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMgVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQojIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiMKCiMKIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgojCkFDX0lOSVQoW05ldC1TTk1QXSwgWzUuNS4yXSwgW25ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXRdKQpBQ19QUkVSRVEoWzIuNjNdKQpBQ19DT05GSUdfU1JDRElSKFthZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmNdKQpBQ19SRVZJU0lPTihbJFJldmlzaW9uJF0pCgpBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCkFDX0NPTkZJR19IRUFERVIoaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCkKCkFDX01TR19DQUNIRV9JTklUKCkKCiMKIyBzYXZlIHRoZSBjb25maWd1cmUgYXJndW1lbnRzCiMKQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfQ09ORklHVVJFX09QVElPTlMsIiRhY19jb25maWd1cmVfYXJncyIsCiAgW2NvbmZpZ3VyZSBvcHRpb25zIHNwZWNpZmllZF0pCkNPTkZJR1VSRV9PUFRJT05TPSJcIiRhY19jb25maWd1cmVfYXJnc1wiIgpBQ19TVUJTVChDT05GSUdVUkVfT1BUSU9OUykKCiMjCiMjIFJlY29tbWVuZGVkIHN0cnVjdHVyZToKIyMKIyAgICAgaW5mb3JtYXRpb24gb24gdGhlIHBhY2thZ2UKIyAgICAgY2hlY2tzIGZvciBwcm9ncmFtcwojICAgICBjaGVja3MgZm9yIGxpYnJhcmllcwojICAgICBjaGVja3MgZm9yIGhlYWRlciBmaWxlcwojICAgICBjaGVja3MgZm9yIHR5cGVzCiMgICAgIGNoZWNrcyBmb3Igc3RydWN0dXJlcwojICAgICBjaGVja3MgZm9yIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcwojICAgICBjaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zCiMgICAgIGNoZWNrcyBmb3Igc3lzdGVtIHNlcnZpY2VzCgptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZV0pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9nc10pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BhdGhzXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnNdKQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9pcHY2X3R5cGVzXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMxXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnRdKQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzFdKQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfbGliczJdKQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbl0pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMl0pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3R5cGVzXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MzXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9uc10pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVyc10pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNF0pCgojCiMgZGVmaW5lIHRoZSBhZ2VudCBsaWJyYXJpZXMgdmFyaWFibGVzCiMKQUNfU1VCU1QoTE1JQkxJQlMpCkFDX1NVQlNUKEFHRU5UTElCUykKQUNfU1VCU1QoT1RIRVJBR0VOVExJQk9CSlMpCkFDX1NVQlNUKE9USEVSQUdFTlRMSUJMT0JKUykKCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X21hbnVhbF0pCgpBQ19TVUJTVChETExJQlMpCgpBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlOk1ha2VmaWxlLnRvcDpNYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlc10pCkFDX0NPTkZJR19GSUxFUyhbc25tcGxpYi9NYWtlZmlsZTpNYWtlZmlsZS50b3A6c25tcGxpYi9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczpzbm1wbGliL01ha2VmaWxlLmRlcGVuZF0pCkFDX0NPTkZJR19GSUxFUyhbYXBwcy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YXBwcy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphcHBzL01ha2VmaWxlLmRlcGVuZF0pCkFDX0NPTkZJR19GSUxFUyhbYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZF0pCkFDX0NPTkZJR19GSUxFUyhbYWdlbnQvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFnZW50L01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L01ha2VmaWxlLmRlcGVuZF0pCkFDX0NPTkZJR19GSUxFUyhbYWdlbnQvaGVscGVycy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZF0pCkFDX0NPTkZJR19GSUxFUyhbYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFnZW50L21pYmdyb3VwL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZF0pCkFDX0NPTkZJR19GSUxFUyhbbG9jYWwvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmxvY2FsL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzXSkKQUNfQ09ORklHX0ZJTEVTKFt0ZXN0aW5nL01ha2VmaWxlOk1ha2VmaWxlLnRvcDp0ZXN0aW5nL01ha2VmaWxlLmluXSkKQUNfQ09ORklHX0ZJTEVTKFttYW4vTWFrZWZpbGU6TWFrZWZpbGUudG9wOm1hbi9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlc10pCkFDX0NPTkZJR19GSUxFUyhbbWlicy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bWlicy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlc10pCkFDX0NPTkZJR19GSUxFUyhbbmV0LXNubXAtY29uZmlnOm5ldC1zbm1wLWNvbmZpZy5pbl0sCgkJW2NobW9kICt4IG5ldC1zbm1wLWNvbmZpZ10pCkFDX0NPTkZJR19GSUxFUyhbbmV0LXNubXAtY3JlYXRlLXYzLXVzZXI6bmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuaW5dLAoJCVtjaG1vZCAreCBuZXQtc25tcC1jcmVhdGUtdjMtdXNlcl0pCgpBQ19DT05GSUdfQ09NTUFORFMoW2RlZmF1bHRdLCBlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLWgpCgojCiMgcHJvdGVjdCBQQUNLQUdFXyogdmFyaWFibGVzCiMKQUhfVkVSQkFUSU0oW1BBQ0tBR0VfQlVHUkVQT1JUXSxbLyogRGVmaW5lIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBhY2thZ2Ugc2hvdWxkIGJlIHNlbnQuICovCiNpZm5kZWYgUEFDS0FHRV9CVUdSRVBPUlQKI3VuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCiNlbmRpZl0pCkFIX1ZFUkJBVElNKFtQQUNLQUdFX05BTUVdLFsvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCiNpZm5kZWYgUEFDS0FHRV9OQU1FCiN1bmRlZiBQQUNLQUdFX05BTUUKI2VuZGlmXSkKQUhfVkVSQkFUSU0oW1BBQ0tBR0VfU1RSSU5HXSxbLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwojaWZuZGVmIFBBQ0tBR0VfU1RSSU5HCiN1bmRlZiBQQUNLQUdFX1NUUklORwojZW5kaWZdKQpBSF9WRVJCQVRJTShbUEFDS0FHRV9UQVJOQU1FXSxbLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLwojaWZuZGVmIFBBQ0tBR0VfVEFSTkFNRQojdW5kZWYgUEFDS0FHRV9UQVJOQU1FCiNlbmRpZl0pCkFIX1ZFUkJBVElNKFtQQUNLQUdFX1ZFUlNJT05dLFsvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwojaWZuZGVmIFBBQ0tBR0VfVkVSU0lPTgojdW5kZWYgUEFDS0FHRV9WRVJTSU9OCiNlbmRpZl0pCgpBQ19PVVRQVVQKCkFDX01TR19DQUNIRV9ESVNQTEFZKCkKIyBMb2NhbCBWYXJpYWJsZXM6CiMgbW9kZTogQXV0b2NvbmYKIyBjb21tZW50LXN0YXJ0OiAiIyIKIyBFbmQ6Cg==