Ci8vICAgdmltOnR3PTExMDp0cz00OgojaWZuZGVmIERIRl9ICiNkZWZpbmUgREhGX0gKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRklMRSAgIDoJREhGLkgKKgoqIERBVEUJOgkkRGF0ZTogMjAwNC8wNy8xOSAwODoxNjoxNCAkICAgJFJldmlzaW9uOiAxLjIgJAoqIE9yaWdpbmFsCToJMjAwNC8wNS8xNyAwNzozMzoxMyAgICBSZXZpc2lvbjogMS4yNSAgICAgIFRhZzogaGNmN190MjAwNDA2MDJfMDEKKiBPcmlnaW5hbAk6CTIwMDQvMDUvMTEgMDY6MDM6MTQgICAgUmV2aXNpb246IDEuMjQgICAgICBUYWc6IGhjZjdfdDdfMjAwNDA1MTNfMDEKKiBPcmlnaW5hbAk6CTIwMDQvMDQvMTUgMDk6MjQ6NDIgICAgUmV2aXNpb246IDEuMjIgICAgICBUYWc6IGhjZjdfdDdfMjAwNDA0MTVfMDEKKiBPcmlnaW5hbAk6CTIwMDQvMDQvMDkgMTQ6MzU6NTIgICAgUmV2aXNpb246IDEuMjEgICAgICBUYWc6IHQ3XzIwMDQwNDEzXzAxCiogT3JpZ2luYWwJOgkyMDA0LzA0LzAxIDE1OjMyOjU1ICAgIFJldmlzaW9uOiAxLjE4ICAgICAgVGFnOiB0N18yMDA0MDQwMV8wMQoqIE9yaWdpbmFsCToJMjAwNC8wMy8xMCAxNTozOToyOCAgICBSZXZpc2lvbjogMS4xNSAgICAgIFRhZzogdDIwMDQwMzEwXzAxCiogT3JpZ2luYWwJOgkyMDA0LzAzLzA0IDExOjAzOjM4ICAgIFJldmlzaW9uOiAxLjEzICAgICAgVGFnOiB0MjAwNDAzMDRfMDEKKiBPcmlnaW5hbAk6CTIwMDQvMDIvMjUgMTQ6MTQ6MzcgICAgUmV2aXNpb246IDEuMTEgICAgICBUYWc6IHQyMDA0MDMwMl8wMwoqIE9yaWdpbmFsCToJMjAwNC8wMi8yNCAxMzowMDoyOCAgICBSZXZpc2lvbjogMS4xMCAgICAgIFRhZzogdDIwMDQwMjI0XzAxCiogT3JpZ2luYWwJOgkyMDA0LzAyLzE5IDEwOjU3OjI4ICAgIFJldmlzaW9uOiAxLjggICAgICBUYWc6IHQyMDA0MDIxOV8wMQoqCiogQVVUSE9SIDoJSm9obiBNZWVydGVucwoqCQkJTmljbyBWYWxzdGVyCioKKiBTUEVDSUZJQ0FUSU9OOiAuLi4uLi4uLi4KKgoqIERFU0MgICA6CXN0cnVjdHVyZSBkZWZpbml0aW9ucyBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgdW5pdCBESEYuCioKKgkJCUN1c3RvbWl6YWJsZSB2aWEgSENGQ0ZHLkgsIHdoaWNoIGlzIGluY2x1ZGVkIGluZGlyZWN0bHkgdmlhIEhDRi5ICioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKgoqIFNPRlRXQVJFIExJQ0VOU0UKKgoqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAoqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCiogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgoqCiogQ09QWVJJR0hUIKkgMTk5NCAtIDE5OTUJYnkgQVQmVC4JCQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAoqIENPUFlSSUdIVCCpIDE5OTkgLSAyMDAwIGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMuCUFsbCBSaWdodHMgUmVzZXJ2ZWQKKiBDT1BZUklHSFQgqSAyMDAxIC0gMjAwNAlieSBBZ2VyZSBTeXN0ZW1zIEluYy4JQWxsIFJpZ2h0cyBSZXNlcnZlZAoqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCioKKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAoqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKgoqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCiogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKiAgICBkaXN0cmlidXRpb24uCioKKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCiogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCioKKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycwoqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQoqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoqCiogRGlzY2xhaW1lcgoqCiogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCiogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgoqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgoqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwoqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAoqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICiogREFNQUdFLgoqCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKI2lmZGVmIF9XSU4zMl9XQ0UKI2luY2x1ZGUgPHdpbmRlZi5oPgojZW5kaWYKCiNpbmNsdWRlICJoY2YuaCIgICAJCSAJLy8gaW5jbHVkZXMgSENGQ0ZHLkggdG9vCgojaWZkZWYgREhGX1VJTAojZGVmaW5lIEdFVF9JTkZPKCBwcCApICB1aWxfZ2V0X2luZm8oIChMVFZQKXBwICkKI2RlZmluZSBQVVRfSU5GTyggcHAgKSAgdWlsX3B1dF9pbmZvKCAoTFRWUClwcCApCiNlbHNlCiNkZWZpbmUgR0VUX0lORk8oIHBwICkgIGhjZl9nZXRfaW5mbyggaWZicCwgKExUVlApcHAgKQojZGVmaW5lIFBVVF9JTkZPKCBwcCApICBoY2ZfcHV0X2luZm8oIGlmYnAsIChMVFZQKXBwICkKI2VuZGlmCgoKLyotLS0tIERlZmluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwojZGVmaW5lIENPREVNQVNLCQkJCTB4MDAwMEZGRkZMICAgIAkvLyBDb2RlbWFzayBmb3IgcGx1ZyByZWNvcmRzCgovKi0tLS0gRXJyb3IgbnVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgojZGVmaW5lIERIRl9FUlJfSU5DT01QX0ZXCQkweDQwCS8vSW1hZ2Ugbm90IGNvbXBhdGlibGUgd2l0aCBOSUMKCi8qLS0tLSBUeXBlIGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLy8qIG5lZWRlZCBieSBkaGZfd3JhcC5jCi8vCnR5cGVkZWYgc3RydWN0IHsKCUxUVlAgCWx0dnA7CgloY2ZfMTYJbGVuOwp9IExUVl9JTkZPX1NUUlVDVCAsICpMVFZfSU5GT19TVFJVQ1RfUFRSOwoKCi8qCiAqIFR5cGU6IAlwbHVncmVjb3JkCiAqCiAqIEFic3RyYWN0OiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgUGx1ZyBEYXRhIFJlY29yZC4KICoKICogRGVzY3JpcHRpb246CiAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gb3ZlcmxheSB0aGUgcGx1ZyByZWNvcmRzIGluIHRoZSBmaXJtd2FyZSBtZW1vcnkgaW1hZ2UuCiAqLwoKdHlwZWRlZiBzdHJ1Y3QgewoJaGNmXzMyCWNvZGU7ICAgICAgCS8vIENvZGUgdG8gcGx1ZwoJaGNmXzMyCWFkZHI7ICAgICAgCS8vIEFkZHJlc3Mgd2l0aGluIHRoZSBtZW1vcnkgaW1hZ2UgdG8gcGx1ZyBpdCBpbgoJaGNmXzMyCWxlbjsgICAgICAgCS8vIFRoZSAjIG9mIGJ5dGVzIHdoaWNoIGFyZSBhdmFpbGFibGUgdG8gc3RvcmUgaXQKfSBwbHVncmVjb3JkOwoKLyoKICogVHlwZTogCXN0cmluZ3JlY29yZAogKgogKiBBYnN0cmFjdDogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIEZpcm13YXJlIGRlYnVnL2Fzc2VydCBzdHJpbmcKICoKICogRGVzY3JpcHRpb246CiAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gZ2V0IGFzc2VydCBhbmQgZGVidWcgb3V0cHV0cyBpbiB0aGUgZHJpdmVyIGFuZC9vciB1dGlsaXR5IHRvIGJlCiAqIGFibGUgdG8gZ2V0IG1vcmUgdmlzYWJpbGl0eSBvZiB0aGUgRlcuCiAqLwoKI2RlZmluZSBNQVhfREVCVUdTVFJJTkdTIAkJMTAyNAojZGVmaW5lIE1BWF9ERUJVR1NUUklOR19MRU4gCSAgODIKCnR5cGVkZWYgc3RydWN0IHsKCWhjZl8zMglpZDsKCWNoYXIgCXN0cltNQVhfREVCVUdTVFJJTkdfTEVOXTsKfSBzdHJpbmdyZWNvcmQ7CgovKgogKiBUeXBlOiAJZXhwb3J0cmVjb3JkCiAqCiAqIEFic3RyYWN0OiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgRmlybXdhcmUgZXhwb3J0IG9mIGEgdmFyaWFibGUKICoKICogRGVzY3JpcHRpb246CiAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gZ2V0IHRoZSBhZGRyZXNzIGFuZCBuYW1lIG9mIGEgRlcgdmFyaWFibGUuCiAqLwoKI2RlZmluZSBNQVhfREVCVUdFWFBPUlRTIAkJMjA0OAojZGVmaW5lIE1BWF9ERUJVR0VYUE9SVF9MRU4gCSAgMTIKCnR5cGVkZWYgc3RydWN0IHsKCWhjZl8zMglpZDsKCWNoYXIgCXN0cltNQVhfREVCVUdFWFBPUlRfTEVOXTsKfSBleHBvcnRyZWNvcmQ7CgovLyBPZmZzZXRzIGluIG1lbWltYWdlIGFycmF5IHBbXQojZGVmaW5lIEZXU1RSSU5HU19GVU5DVElPTgkJMAojZGVmaW5lIEZXRVhQT1JUU19GVU5DVElPTgkJMQoKLyoKICogVHlwZTogbWVtaW1hZ2UKICoKICogQWJzdHJhY3Q6IFRoZSAicm9vdCIgZGVzY3JpcHRpb24gb2YgYSBjb21wbGV0ZSBtZW1vcnkgaW1hZ2UKICoKICogRGVzY3JpcHRpb246CiAqIFRoaXMgdHlwZSByZXByZXNlbnRzIGFuIGVudGlyZSBtZW1vcnkgaW1hZ2UuIFRoZSBpbWFnZSBpcyBidWlsdCB1cCBvZiBzZXZlcmFsCiAqIHNlZ21lbnRzLiBUaGVzZSBzZWdtZW50cyBuZWVkIG5vdCBiZSBjb250aWd1b3VzIGFyZWFzIGluIG1lbW9yeSwgaW4gb3RoZXIgd29yZHMKICogdGhlIGltYWdlIG1heSBjb250YWluICdob2xlcycuCiAqCiAqIFRoZSAnY29kZXAnIGZpZWxkIHBvaW50cyB0byBhbiBhcnJheSBvZiBzZWdtZW50X2Rlc2NyaXB0b3Igc3RydWN0dXJlcy4KICogVGhlIGVuZCBvZiB0aGUgYXJyYXkgaXMgaW5kaWNhdGVkIGJ5IGEgc2VnbWVudF9kZXNjcmlwdG9yIG9mIHdoaWNoIGFsbCBmaWVsZHMgYXJlIHplcm8uCiAqIFRoZSAnZXhlY3V0aW9uJyBmaWVsZCBpcyBhIDMyLWJpdCBhZGRyZXNzIHJlcHJlc2VudGluZyB0aGUgZXhlY3V0aW9uIGFkZHJlc3MKICoJb2YgdGhlIGZpcm13YXJlIHdpdGhpbiB0aGUgbWVtb3J5IGltYWdlLiBUaGlzIGFkZHJlc3MgaXMgemVybyBpbiBjYXNlIG9mIG5vbi12b2xhdGlsZQogKgltZW1vcnkgZG93bmxvYWQuCiAqIFRoZSAnY29tcGF0JyBmaWVsZCBwb2ludHMgdG8gYW4gYXJyYXkgb2YgVE9ETwogKiAJVGhlIGVuZCBvZiB0aGUgYXJyYXkgaXMgaW5kaWNhdGVkIGJ5IGEgcGx1ZyByZWNvcmQgb2Ygd2hpY2ggYWxsIGZpZWxkcyBhcmUgemVyby4KICogVGhlICdpZGVudGl0eScgZmllbGQgcG9pbnRzIHRvIGFuIGFycmF5IG9mIFRPRE8KICogCVRoZSBlbmQgb2YgdGhlIGFycmF5IGlzIGluZGljYXRlZCBieSBhIHBsdWcgcmVjb3JkIG9mIHdoaWNoIGFsbCBmaWVsZHMgYXJlIHplcm8uCiAqIFRoZSBIZXJtZXMtSSBzcGVjaWZpYyAncGRhcGx1ZycgZmllbGQgcG9pbnRzIHRvIGFuIGFycmF5IG9mIFByb2R1Y3Rpb24gRGF0YSBQbHVnIHJlY29yZCBzdHJ1Y3R1cmVzLgogKiAJVGhlIGVuZCBvZiB0aGUgYXJyYXkgaXMgaW5kaWNhdGVkIGJ5IGEgcGx1ZyByZWNvcmQgb2Ygd2hpY2ggYWxsIGZpZWxkcyBhcmUgemVyby4KICogVGhlIEhlcm1lcy1JIHNwZWNpZmljICdwcmlwbHVnJyBmaWVsZCBwb2ludHMgdG8gYW4gYXJyYXkgb2YgUHJpbWFyeSBJbmZvcm1hdGlvbiBQbHVnIHJlY29yZCBzdHJ1Y3R1cmVzLgogKiAJVGhlIGVuZCBvZiB0aGUgYXJyYXkgaXMgaW5kaWNhdGVkIGJ5IGEgcGx1ZyByZWNvcmQgb2Ygd2hpY2ggYWxsIGZpZWxkcyBhcmUgemVyby4KICovCnR5cGVkZWYgc3RydWN0IHsKCWNoYXIJCQkJCXNpZ25hdHVyZVsxNCsxKzFdOwkvLyBzaWduYXR1cmUgKHNlZSBESEYuQykgKyBDL0xFLUJpbi9CRS1CaW4tZmxhZyArIGZvcm1hdCB2ZXJzaW9uCglDRkdfUFJPR19TVFJDVCBGQVIJCSpjb2RlcDsJCQkJLy8KCWhjZl8zMiAgICAgICAgICAgCSAJZXhlY3V0aW9uOyAgICAJCS8vIEV4ZWN1dGlvbiBhZGRyZXNzIG9mIHRoZSBmaXJtd2FyZQoJdm9pZCBGQVIgCQkgICAgICAJKnBsYWNlX2hvbGRlcl8xOwoJdm9pZCBGQVIgIAkJICAgICAJKnBsYWNlX2hvbGRlcl8yOwoJQ0ZHX1JBTkdFMjBfU1RSQ1QgRkFSICAJKmNvbXBhdDsgICAgICAJCS8vIFBvaW50ZXIgdG8gdGhlIGNvbXBhdGliaWxpdHkgaW5mbyByZWNvcmRzCglDRkdfSURFTlRJVFlfU1RSQ1QgRkFSIAkqaWRlbnRpdHk7ICAgIAkJLy8gUG9pbnRlciB0byB0aGUgaWRlbnRpdHkgaW5mbyByZWNvcmRzCgl2b2lkIEZBUgkJCQkqcFsyXTsJCQkJLyogKFVwIHRvIDkpIHBvaW50ZXJzIGZvciAoZnV0dXJlKSBleHBhbnNpb24KCQkJCQkJCQkJCQkJICogY3VycmVudGx5IGluIHVzZToKCQkJCQkJCQkJCQkJICogIC0gRi9XIHByaW50ZiBpbmZvcm1hdGlvbgoJCQkJCQkJCQkJCQkgKi8KfSBtZW1pbWFnZTsKCgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKgogKiBESEYgZnVuY3Rpb24gcHJvdG90eXBlcwogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgpFWFRFUk5fQyBpbnQgZGhmX2Rvd25sb2FkX2Z3KCB2b2lkICppZmJwLCBtZW1pbWFnZSAqZncgKTsJLy8JaWZicCwgaWdub3JlZCB3aGVuIHVzaW5nIHRoZSBVSUwKRVhURVJOX0MgaW50IGRoZl9kb3dubG9hZF9iaW5hcnkoIG1lbWltYWdlICpmdyApOwoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICoKICogRnVuY3Rpb25zIHRvIGJlIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIG9mIHRoZSBESEYgbW9kdWxlLgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgovLyBkZWZpbmVkIGluIERIRi5DOyBzZWUgdGhlcmUgZm9yIGNvbW1lbnRzCkVYVEVSTl9DIGhjZl8xNiAqZmluZF9yZWNvcmRfaW5fcGRhKCBoY2ZfMTYgKnBkYXAsIGhjZl8xNiBjb2RlICk7CgojZW5kaWYgIC8vIERIRl9ICgo=