ZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUwLnBhdGNoIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAwMTNmZgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUwLnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK2RpZmYgLWFydU4gYS9DRkJhc2UuYyBiL0NGQmFzZS5jCistLS0gYS9DRkJhc2UuYwkyMDA5LTAyLTE5IDE2OjI1OjA2LjAwMDAwMDAwMCAtMDgwMAorKysrIGIvQ0ZCYXNlLmMJMjAxMC0xMC0wMSAxNDozMTozOC4yODY4MzA2NDUgLTA3MDAKK0BAIC0xMDYyLDQgKzEwNjIsMjAgQEAKKyAjZW5kaWYKKyAjZW5kaWYKKyAKKy0KKysjaWYgZGVmaW5lZChfX2FybV9fKQorK19fYXNtX18gKAorKyIudGV4dFxuIgorKyIJLmFsaWduIDJcbiIKKysjaWYgREVQTE9ZTUVOVF9UQVJHRVRfTUFDT1NYCisrIi5wcml2YXRlX2V4dGVybiBfX19IQUxUXG4iCisrIl9fX0hBTFQ6XG4iCisrI2VsaWYgREVQTE9ZTUVOVF9UQVJHRVRfTElOVVgKKysiLmdsb2JsIF9fSEFMVFxuIgorKyJfX0hBTFQ6XG4iCisrI2Vsc2UKKysiLmdsb2JsIF9fX0hBTFRcbiIKKysiX19fSEFMVDpcbiIKKysjZW5kaWYKKysiCWJrcHRcbiIKKyspOworKyNlbmRpZiAvKiBkZWZpbmVkKF9fYXJtX18pICovCitkaWZmIC1hcnVOIGEvQ0ZCYXNlLmggYi9DRkJhc2UuaAorLS0tIGEvQ0ZCYXNlLmgJMjAwOS0wMi0xOSAxNjoyNTowNi4wMDAwMDAwMDAgLTA4MDAKKysrKyBiL0NGQmFzZS5oCTIwMTAtMTAtMDEgMTQ6MzA6MjMuNzk5NjQ0MDczIC0wNzAwCitAQCAtNTAsNiArNTAsMTAgQEAKKyAgICAgI2RlZmluZSBfX0xJVFRMRV9FTkRJQU5fXyAxCisgI2VuZGlmCisgCisrI2lmIChkZWZpbmVkKF9fQVJNRUxfXykgJiYgIWRlZmluZWQoX19MSVRUTEVfRU5ESUFOX18pKQorKwkjZGVmaW5lIF9fTElUVExFX0VORElBTl9fIDEKKysjZW5kaWYKKysKKyAjaWYgIWRlZmluZWQoX19CSUdfRU5ESUFOX18pICYmICFkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQorICNlcnJvciBEbyBub3Qga25vdyB0aGUgZW5kaWFuZXNzIG9mIHRoaXMgYXJjaGl0ZWN0dXJlCisgI2VuZGlmCitkaWZmIC1hcnVOIGEvQ0ZJbnRlcm5hbC5oIGIvQ0ZJbnRlcm5hbC5oCistLS0gYS9DRkludGVybmFsLmgJMjAwOS0wMi0xOSAxNjoyNTowNi4wMDAwMDAwMDAgLTA4MDAKKysrKyBiL0NGSW50ZXJuYWwuaAkyMDEwLTEwLTAxIDE0OjA1OjQ4LjkyNjc5OTgyOSAtMDcwMAorQEAgLTEyMSw2ICsxMjEsOCBAQAorICAgICAjZWxzZQorICAgICAgICAgI2Vycm9yIENvbXBpbGVyIG5vdCBzdXBwb3J0ZWQKKyAgICAgI2VuZGlmCisrI2VsaWYgZGVmaW5lZChfX2FybV9fKQorKwkjZGVmaW5lIEhBTFQgYXNtIF9fdm9sYXRpbGVfXygiYmtwdCIpCisgI2VuZGlmCisgCisgI2lmIGRlZmluZWQoREVCVUcpCitkaWZmIC1hcnVOIGEvaW5jbHVkZS9BdmFpbGFiaWxpdHlNYWNyb3MuaCBiL2luY2x1ZGUvQXZhaWxhYmlsaXR5TWFjcm9zLmgKKy0tLSBhL2luY2x1ZGUvQXZhaWxhYmlsaXR5TWFjcm9zLmgJMjAwOS0wMi0wNCAxMDo0MjoxOS4wMDAwMDAwMDAgLTA4MDAKKysrKyBiL2luY2x1ZGUvQXZhaWxhYmlsaXR5TWFjcm9zLmgJMjAxMC0xMC0wMSAxNDowNzoxNC45OTk3ODAyOTMgLTA3MDAKK0BAIC04NCw3ICs4NCw3IEBACisgICAgICNpZmRlZiBfX0VOVklST05NRU5UX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEX18KKyAgICAgICAgICNkZWZpbmUgTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgX19FTlZJUk9OTUVOVF9NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRF9fCisgICAgICNlbHNlCistICAgICAgICAjaWYgX19wcGM2NF9fIHx8IF9faTM4Nl9fIHx8IF9feDg2XzY0X18KKysgICAgICAgICNpZiBfX3BwYzY0X18gfHwgX19pMzg2X18gfHwgX194ODZfNjRfXyB8fCBfX2FybV9fCisgICAgICAgICAgICAgI2RlZmluZSBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCBNQUNfT1NfWF9WRVJTSU9OXzEwXzQKKyAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgI2RlZmluZSBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCBNQUNfT1NfWF9WRVJTSU9OXzEwXzEKZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUxLnBhdGNoIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdkMTczYwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUxLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK2RpZmYgLWFydU4gYS9jb25maWd1cmUgYi9jb25maWd1cmUKKy0tLSBhL2NvbmZpZ3VyZQkyMDA5LTAzLTEwIDIzOjQ0OjM0LjAwMDAwMDAwMCAtMDcwMAorKysrIGIvY29uZmlndXJlCTIwMTAtMTAtMjAgMTM6MTI6MTkuMDAwMDAwMDAwIC0wNzAwCitAQCAtMTg1MjgsNiArMTg1MjgsOCBAQAorIAlmaQorIAorIAlVVUlEX3NhdmVkX2xpYnM9IiR7TElCU30iCisrCVVVSURfc2F2ZWRfbGRmbGFncz0iJHtMREZMQUdTfSIKKysJTERGTEFHUz0iJHtVVUlEX0xERkxBR1N9ICR7TERGTEFHU30iCisgCUxJQlM9IiIKKyAKKyAKK0BAIC0xODYwMyw4ICsxODYwNSwxMCBAQAorIAorIAorIAlVVUlEX0xJQlM9IiR7VVVJRF9MREZMQUdTfSAke0xJQlN9IgorKwlMREZMQUdTPSIke1VVSURfc2F2ZWRfbGRmbGFnc30iCisgCUxJQlM9IiR7VVVJRF9zYXZlZF9saWJzfSIKKyAJdW5zZXQgVVVJRF9zYXZlZF9saWJzCisrCXVuc2V0IFVVSURfc2F2ZWRfbGRmbGFncworIAorIGVsaWYgdGVzdCAieCR7VVVJRF9DT05GSUd9IiAhPSAieCI7IHRoZW4KKyAJVVVJRF9DUFBGTEFHUz0iYCR7VVVJRF9DT05GSUd9IC0tY2ZsYWdzYCIKZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUyLnBhdGNoIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYwZjRhNAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUyLnBhdGNoCkBAIC0wLDAgKzEsMTY2NCBAQAorZGlmZiAtYXJ1TiBhL2luY2x1ZGUvQXNzZXJ0TWFjcm9zLmggYi9pbmNsdWRlL0Fzc2VydE1hY3Jvcy5oCistLS0gYS9pbmNsdWRlL0Fzc2VydE1hY3Jvcy5oCTIwMDktMDItMDMgMjE6Mjg6MjYuMDAwMDAwMDAwIC0wODAwCisrKysgYi9pbmNsdWRlL0Fzc2VydE1hY3Jvcy5oCTIwMDktMDQtMTMgMTA6MDg6MjMuMDAwMDAwMDAwIC0wNzAwCitAQCAtMSwyNiArMSw1MSBAQAorIC8qCistICAgICBGaWxlOiAgICAgICBBc3NlcnRNYWNyb3MuaAorLSAKKy0gICAgIENvbnRhaW5zOiAgIFRoaXMgZmlsZSBkZWZpbmVzIHN0cnVjdHVyZWQgZXJyb3IgaGFuZGxpbmcgYW5kIGFzc2VydGlvbiBtYWNyb3MgZm9yCistICAgICAgICAgICAgICAgICBwcm9ncmFtbWluZyBpbiBDLiBPcmlnaW5hbGx5IHVzZWQgaW4gUXVpY2tEcmF3IEdYIGFuZCBsYXRlciBlbmhhbmNlZC4KKy0gICAgICAgICAgICAgICAgIFRoZXNlIG1hY3JvcyBhcmUgdXNlZCB0aHJvdWdob3V0IEFwcGxlJ3Mgc29mdHdhcmUuCistCistICAgICAgICAgICAgICAgICBTZWUgIkxpdmluZyBJbiBhbiBFeGNlcHRpb25hbCBXb3JsZCIgYnkgU2VhbiBQYXJlbnQKKy0gICAgICAgICAgICAgICAgIChkZXZlbG9wLCBUaGUgQXBwbGUgVGVjaG5pY2FsIEpvdXJuYWwsIElzc3VlIDExLCBBdWd1c3QvU2VwdGVtYmVyIDE5OTIpCistICAgICAgICAgICAgICAgICA8aHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vZGV2L3RlY2hzdXBwb3J0L2RldmVsb3AvaXNzdWUxMXRvYy5zaHRtbD4KKy0gICAgICAgICAgICAgICAgIGZvciB0aGUgbWV0aG9kb2xvZ3kgYmVoaW5kIHRoZXNlIGVycm9yIGhhbmRsaW5nIGFuZCBhc3NlcnRpb24gbWFjcm9zLgorLQorLSAgICAgQ29weXJpZ2h0OiAgqSAyMDAyIGJ5IEFwcGxlIENvbXB1dGVyLCBJbmMuLCBhbGwgcmlnaHRzIHJlc2VydmVkLgorLSAgCistICAgICBCdWdzPzogICAgICBGb3IgYnVnIHJlcG9ydHMsIGNvbnN1bHQgdGhlIGZvbGxvd2luZyBwYWdlIG9uCistICAgICAgICAgICAgICAgICB0aGUgV29ybGQgV2lkZSBXZWI6CisrICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDggYnkgQXBwbGUgSW5jLi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIEBBUFBMRV9MSUNFTlNFX0hFQURFUl9TVEFSVEAKKysgKiAKKysgKiBUaGlzIGZpbGUgY29udGFpbnMgT3JpZ2luYWwgQ29kZSBhbmQvb3IgTW9kaWZpY2F0aW9ucyBvZiBPcmlnaW5hbCBDb2RlCisrICogYXMgZGVmaW5lZCBpbiBhbmQgdGhhdCBhcmUgc3ViamVjdCB0byB0aGUgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlCisrICogVmVyc2lvbiAyLjAgKHRoZSAnTGljZW5zZScpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorKyAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gUGxlYXNlIG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysgKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2UuYXBwbGUuY29tL2Fwc2wvIGFuZCByZWFkIGl0IGJlZm9yZSB1c2luZyB0aGlzCisrICogZmlsZS4KKysgKiAKKysgKiBUaGUgT3JpZ2luYWwgQ29kZSBhbmQgYWxsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGFyZQorKyAqIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUgorKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5EIEFQUExFIEhFUkVCWSBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywKKysgKiBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisrICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFFVSUVUIEVOSk9ZTUVOVCBPUiBOT04tSU5GUklOR0VNRU5ULgorKyAqIFBsZWFzZSBzZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZAorKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKyAqIAorKyAqIEBBUFBMRV9MSUNFTlNFX0hFQURFUl9FTkRACisrICovCisrCisrCisrLyoKKysJRmlsZTogICAgICAgQXNzZXJ0TWFjcm9zLmgKKyAgCistICAgICAgICAgICAgICAgICAgICAgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vYnVncmVwb3J0ZXIvIAorKwlDb250YWluczogICBUaGlzIGZpbGUgZGVmaW5lcyBzdHJ1Y3R1cmVkIGVycm9yIGhhbmRsaW5nIGFuZCBhc3NlcnRpb24gbWFjcm9zIGZvcgorKwkJCQlwcm9ncmFtbWluZyBpbiBDLiBPcmlnaW5hbGx5IHVzZWQgaW4gUXVpY2tEcmF3IEdYIGFuZCBsYXRlciBlbmhhbmNlZC4KKysJCQkJVGhlc2UgbWFjcm9zIGFyZSB1c2VkIHRocm91Z2hvdXQgQXBwbGUncyBzb2Z0d2FyZS4KKysJCisrCQkJCU5ldyBjb2RlIG1heSBub3Qgd2FudCB0byBiZWdpbiBhZG9wdGluZyB0aGVzZSBtYWNyb3MgYW5kIGluc3RlYWQgdXNlCisrCQkJCWV4aXN0aW5nIGxhbmd1YWdlIGZ1bmN0aW9uYWxpdHkuCisrCQorKwkJCQlTZWUgIkxpdmluZyBJbiBhbiBFeGNlcHRpb25hbCBXb3JsZCIgYnkgU2VhbiBQYXJlbnQKKysJCQkJKGRldmVsb3AsIFRoZSBBcHBsZSBUZWNobmljYWwgSm91cm5hbCwgSXNzdWUgMTEsIEF1Z3VzdC9TZXB0ZW1iZXIgMTk5MikKKysJCQkJPGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2Rldi90ZWNoc3VwcG9ydC9kZXZlbG9wL2lzc3VlMTF0b2Muc2h0bWw+IG9yCisrCQkJCTxodHRwOi8vd3d3Lm1hY3RlY2guY29tL2FydGljbGVzL2RldmVsb3AvaXNzdWVfMTEvUGFyZW50X2ZpbmFsLmh0bWw+CisrCQkJCWZvciB0aGUgbWV0aG9kb2xvZ3kgYmVoaW5kIHRoZXNlIGVycm9yIGhhbmRsaW5nIGFuZCBhc3NlcnRpb24gbWFjcm9zLgorKwkKKysJQnVncz86ICAgICAgRm9yIGJ1ZyByZXBvcnRzLCBjb25zdWx0IHRoZSBmb2xsb3dpbmcgcGFnZSBvbgorKwkJCQl0aGUgV29ybGQgV2lkZSBXZWI6CisrCisrCSBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9idWdyZXBvcnRlci8gCisgKi8KKyAjaWZuZGVmIF9fQVNTRVJUTUFDUk9TX18KKyAjZGVmaW5lIF9fQVNTRVJUTUFDUk9TX18KKyAKKy0KKyAvKgorICAqICBNYWNybyBvdmVydmlldzoKKyAgKiAgCitAQCAtNjAsNiArODUsMjcgQEAKKyAgKiAgICAgIEJ5IGRlZmF1bHQsIGFsbCBtZXNzYWdlcyB3cml0ZSB0byBzdGRlcnIuICBJZiB5b3Ugd291bGQgbGlrZSB0byB3cml0ZSBhIGN1c3RvbQorICAqICAgICAgZXJyb3IgbWVzc2FnZSBmb3JtYXRlciwgZGVmaW5lZCBERUJVR19BU1NFUlRfTUVTU0FHRSB0byB5b3VyIGZ1bmN0aW9uIG5hbWUuCisgICoKKysgKiAgICAgIEVhY2ggaW5kaXZpZHVhbCBtYWNybyB3aWxsIG9ubHkgYmUgZGVmaW5lZCBpZiBpdCBpcyBub3QgYWxyZWFkeSBkZWZpbmVkLCBzbworKyAqICAgICAgeW91IGNhbiByZWRlZmluZSB0aGVpciBiZWhhdmlvciBzaW5nbHkgYnkgcHJvdmlkaW5nIHlvdXIgb3duIGRlZmluaXRpb24gYmVmb3JlCisrICogICAgICB0aGlzIGZpbGUgaXMgaW5jbHVkZWQuCisrICoKKysgKiAgICAgIElmIHlvdSBkZWZpbmUgX19BU1NFUlRNQUNST1NfXyBiZWZvcmUgdGhpcyBmaWxlIGlzIGluY2x1ZGVkLCB0aGVuIG5vdGhpbmcgaW4KKysgKiAgICAgIHRoaXMgZmlsZSB3aWxsIHRha2UgZWZmZWN0LgorKyAqCisrICogICAgICBQcmlvciB0byBNYWMgT1MgWCAxMC42IHRoZSBtYWNybyBuYW1lcyB1c2VkIGluIHRoaXMgZmlsZSBjb25mbGljdGVkIHdpdGggc29tZQorKyAqICAgICAgdXNlciBjb2RlLCBpbmNsdWRpbmcgbGlicmFyaWVzIGluIGJvb3N0IGFuZCB0aGUgcHJvcG9zZWQgQysrIHN0YW5kYXJkcyBlZmZvcnRzLAorKyAqICAgICAgYW5kIHRoZXJlIHdhcyBubyB3YXkgZm9yIGEgY2xpZW50IG9mIHRoaXMgaGVhZGVyIHRvIHJlc29sdmUgdGhpcyBjb25mbGljdC4gQmVjYXVzZQorKyAqICAgICAgb2YgdGhpcywgbW9zdCBvZiB0aGUgbWFjcm9zIGhhdmUgYmVlbiBjaGFuZ2VkIHNvIHRoYXQgdGhleSBhcmUgcHJlZml4ZWQgd2l0aCAKKysgKiAgICAgIF9fIGFuZCBjb250YWluIGF0IGxlYXN0IG9uZSBjYXBpdGFsIGxldHRlciwgd2hpY2ggc2hvdWxkIGFsbGV2aWF0ZSB0aGUgY3VycmVudAorKyAqICAgICAgYW5kIGZ1dHVyZSBjb25mbGljdHMuICBIb3dldmVyLCB0byBhbGxvdyBjdXJyZW50IHNvdXJjZXMgdG8gY29udGludWUgdG8gY29tcGlsZSwKKysgKiAgICAgIGNvbXBhdGliaWxpdHkgbWFjcm9zIGFyZSBkZWZpbmVkIGF0IHRoZSBlbmQgd2l0aCB0aGUgb2xkIG5hbWVzLiAgQSB0b3BzIHNjcmlwdCAKKysgKiAgICAgIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlIHdpbGwgY29udmVydCBhbGwgb2YgdGhlIG9sZCBtYWNybyBuYW1lcyB1c2VkIGluIGEgZGlyZWN0b3J5CisrICogICAgICB0byB0aGUgbmV3IG5hbWVzLiAgQ2xpZW50cyBhcmUgcmVjb21tZW5kZWQgdG8gbWlncmF0ZSBvdmVyIHRvIHRoZXNlIG5ldyBtYWNyb3MgYXMKKysgKiAgICAgIHRoZXkgdXBkYXRlIHRoZWlyIHNvdXJjZXMgYmVjYXVzZSBhIGZ1dHVyZSByZWxlYXNlIG9mIE1hYyBPUyBYIHdpbGwgcmVtb3ZlIHRoZQorKyAqICAgICAgb2xkIG1hY3JvIGRlZmluaXRpb25zICggd2l0aG91dCB0aGUgZG91YmxlLXVuZGVyc2NvcmUgcHJlZml4ICkuICBDbGllbnRzIHdobworKyAqICAgICAgd2FudCB0byBjb21waWxlIHdpdGhvdXQgdGhlIG9sZCBtYWNybyBkZWZpbml0aW9ucyBjYW4gZGVmaW5lIHRoZSBtYWNybworKyAqICAgICAgX19BU1NFUlRfTUFDUk9TX0RFRklORV9WRVJTSU9OU19XSVRIT1VUX1VOREVSU0NPUkVTIHRvIDAgYmVmb3JlIHRoaXMgZmlsZSBpcworKyAqICAgICAgaW5jbHVkZWQuCisgICovCisgCisgCitAQCAtMTY1LDkgKzIxMSw5IEBACisgICovCisgI2lmbmRlZiBERUJVR19BU1NFUlRfTUVTU0FHRQorICAgICNpZmRlZiBLRVJORUwKKy0gICAgICAjaW5jbHVkZSA8c3lzbG9nLmg+CisrICAgICAgI2luY2x1ZGUgPGxpYmtlcm4vbGlia2Vybi5oPgorICAgICAgICNkZWZpbmUgREVCVUdfQVNTRVJUX01FU1NBR0UobmFtZSwgYXNzZXJ0aW9uLCBsYWJlbCwgbWVzc2FnZSwgZmlsZSwgbGluZSwgdmFsdWUpIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzbG9nKExPR19FUlIsICJBc3NlcnRNYWNyb3M6ICVzLCAlcyBmaWxlOiAlcywgbGluZTogJWRcbiIsIGFzc2VydGlvbiwgKG1lc3NhZ2UhPTApID8gbWVzc2FnZSA6ICIiLCBmaWxlLCBsaW5lKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCAiQXNzZXJ0TWFjcm9zOiAlcywgJXMgZmlsZTogJXMsIGxpbmU6ICVkXG4iLCBhc3NlcnRpb24sIChtZXNzYWdlIT0wKSA/IG1lc3NhZ2UgOiAiIiwgZmlsZSwgbGluZSk7CisgICAgI2Vsc2UKKyAgICAgICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgICAgICAjZGVmaW5lIERFQlVHX0FTU0VSVF9NRVNTQUdFKG5hbWUsIGFzc2VydGlvbiwgbGFiZWwsIG1lc3NhZ2UsIGZpbGUsIGxpbmUsIHZhbHVlKSBcCitAQCAtMTgwLDcgKzIyNiw3IEBACisgCisgCisgLyoKKy0gKiAgZGVidWdfc3RyaW5nKG1lc3NhZ2UpCisrICogIF9fRGVidWdfU3RyaW5nKG1lc3NhZ2UpCisgICoKKyAgKiAgU3VtbWFyeToKKyAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogZG9lcyBub3RoaW5nIGFuZCBwcm9kdWNlcyBubyBjb2RlLgorQEAgLTE5MywyNiArMjM5LDI3IEBACisgICogICAgICBUaGUgQyBzdHJpbmcgdG8gZGlzcGxheS4KKyAgKgorICAqLworLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCistICAgI2RlZmluZSBkZWJ1Z19zdHJpbmcobWVzc2FnZSkKKy0jZWxzZQorLSAgICNkZWZpbmUgZGVidWdfc3RyaW5nKG1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorKyNpZm5kZWYgX19EZWJ1Z19TdHJpbmcKKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX0RlYnVnX1N0cmluZyhtZXNzYWdlKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fRGVidWdfU3RyaW5nKG1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2VuZGlmCisgI2VuZGlmCisgCistCisgLyoKKy0gKiAgY2hlY2soYXNzZXJ0aW9uKQorKyAqICBfX0NoZWNrKGFzc2VydGlvbikKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBkb2VzIG5vdGhpbmcgYW5kIHByb2R1Y2VzIG5vIGNvZGUuCitAQCAtMjI1LDMyICsyNzIsMjkgQEAKKyAgKiAgICBhc3NlcnRpb246CisgICogICAgICBUaGUgYXNzZXJ0aW9uIGV4cHJlc3Npb24uCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIGNoZWNrKGFzc2VydGlvbikKKy0jZWxzZQorLSAgICNkZWZpbmUgY2hlY2soYXNzZXJ0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjYXNzZXJ0aW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorKyNpZm5kZWYgX19DaGVjaworKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorKwkgICAjZGVmaW5lIF9fQ2hlY2soYXNzZXJ0aW9uKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fQ2hlY2soYXNzZXJ0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KCEoYXNzZXJ0aW9uKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgICNhc3NlcnRpb24sIDAsIDAsIF9fRklMRV9fLCBfX0xJTkVfXywgMCApOyAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbmRpZgorICNlbmRpZgorIAorLSNkZWZpbmUgbmNoZWNrKGFzc2VydGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gIGNoZWNrKCEoYXNzZXJ0aW9uKSkKKy0KKysjaWZuZGVmIF9fbkNoZWNrCisrCSNkZWZpbmUgX19uQ2hlY2soYXNzZXJ0aW9uKSAgX19DaGVjayghKGFzc2VydGlvbikpCisrI2VuZGlmCisgCisgLyoKKy0gKiAgY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkKKysgKiAgX19DaGVja19TdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGRvZXMgbm90aGluZyBhbmQgcHJvZHVjZXMgbm8gY29kZS4KK0BAIC0yNjYsMzIgKzMxMCwyOSBAQAorICAqICAgIG1lc3NhZ2U6CisgICogICAgICBUaGUgQyBzdHJpbmcgdG8gZGlzcGxheS4KKyAgKi8KKy0jaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorLSAgICNkZWZpbmUgY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkKKy0jZWxzZQorLSAgICNkZWZpbmUgY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjYXNzZXJ0aW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorKyNpZm5kZWYgX19DaGVja19TdHJpbmcKKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX0NoZWNrX1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19DaGVja19TdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoIShhc3NlcnRpb24pLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgI2Fzc2VydGlvbiwgMCwgbWVzc2FnZSwgX19GSUxFX18sIF9fTElORV9fLCAwICk7ICAgICAgICAgICAgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2VuZGlmCisgI2VuZGlmCisgCistI2RlZmluZSBuY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgY2hlY2tfc3RyaW5nKCEoYXNzZXJ0aW9uKSwgbWVzc2FnZSkKKy0KKysjaWZuZGVmIF9fbkNoZWNrX1N0cmluZworKwkjZGVmaW5lIF9fbkNoZWNrX1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpICBfX0NoZWNrX1N0cmluZyghKGFzc2VydGlvbiksIG1lc3NhZ2UpCisrI2VuZGlmCisgCisgLyoKKy0gKiAgY2hlY2tfbm9lcnIoZXJyb3JDb2RlKQorKyAqICBfX0NoZWNrX25vRXJyKGVycm9yQ29kZSkKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBkb2VzIG5vdGhpbmcgYW5kIHByb2R1Y2VzIG5vIGNvZGUuCitAQCAtMzA0LDMwICszNDUsMjYgQEAKKyAgKiAgICBlcnJvckNvZGU6CisgICogICAgICBUaGUgZXJyb3JDb2RlIGV4cHJlc3Npb24gdG8gY29tcGFyZSB3aXRoIDAuCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIGNoZWNrX25vZXJyKGVycm9yQ29kZSkKKy0jZWxzZQorLSAgICNkZWZpbmUgY2hlY2tfbm9lcnIoZXJyb3JDb2RlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpbnQgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAwICE9IGV2YWxPbmNlRXJyb3JDb2RlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Vycm9yQ29kZSAiID09IDAgIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBldmFsT25jZUVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKysjaWZuZGVmIF9fQ2hlY2tfbm9FcnIKKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX0NoZWNrX25vRXJyKGVycm9yQ29kZSkKKysJI2Vsc2UKKysJICAgI2RlZmluZSBfX0NoZWNrX25vRXJyKGVycm9yQ29kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGxvbmcgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KDAgIT0gZXZhbE9uY2VFcnJvckNvZGUsIDApICkgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgICNlcnJvckNvZGUgIiA9PSAwICIsIDAsIDAsIF9fRklMRV9fLCBfX0xJTkVfXywgZXZhbE9uY2VFcnJvckNvZGUgKTsgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2VuZGlmCisgI2VuZGlmCisgCistCisgLyoKKy0gKiAgY2hlY2tfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkKKysgKiAgX19DaGVja19ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGNoZWNrX25vZXJyX3N0cmluZygpIGRvZXMgbm90aGluZyBhbmQgcHJvZHVjZXMKK0BAIC0zNDQsMzAgKzM4MSwyNiBAQAorICAqICAgIG1lc3NhZ2U6CisgICogICAgICBUaGUgQyBzdHJpbmcgdG8gZGlzcGxheS4KKyAgKi8KKy0jaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorLSAgICNkZWZpbmUgY2hlY2tfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkKKy0jZWxzZQorLSAgICNkZWZpbmUgY2hlY2tfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpbnQgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAwICE9IGV2YWxPbmNlRXJyb3JDb2RlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Vycm9yQ29kZSAiID09IDAgIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBtZXNzYWdlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBldmFsT25jZUVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKysjaWZuZGVmIF9fQ2hlY2tfbm9FcnJfU3RyaW5nCisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19DaGVja19ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fQ2hlY2tfbm9FcnJfU3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgbG9uZyBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSBldmFsT25jZUVycm9yQ29kZSwgMCkgKSAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgI2Vycm9yQ29kZSAiID09IDAgIiwgMCwgbWVzc2FnZSwgX19GSUxFX18sIF9fTElORV9fLCBldmFsT25jZUVycm9yQ29kZSApOyBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZW5kaWYKKyAjZW5kaWYKKyAKKy0KKyAvKgorLSAqICB2ZXJpZnkoYXNzZXJ0aW9uKQorKyAqICBfX1ZlcmlmeShhc3NlcnRpb24pCisgICoKKyAgKiAgU3VtbWFyeToKKyAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogZXZhbHVhdGUgdGhlIGFzc2VydGlvbiBleHByZXNzaW9uLCBidXQgaWdub3JlCitAQCAtMzgxLDM4ICs0MTQsMzUgQEAKKyAgKiAgICBhc3NlcnRpb246CisgICogICAgICBUaGUgYXNzZXJ0aW9uIGV4cHJlc3Npb24uCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIHZlcmlmeShhc3NlcnRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2Vsc2UKKy0gICAjZGVmaW5lIHZlcmlmeShhc3NlcnRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Fzc2VydGlvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKysjaWZuZGVmIF9fVmVyaWZ5CisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19WZXJpZnkoYXNzZXJ0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2Vsc2UKKysJICAgI2RlZmluZSBfX1ZlcmlmeShhc3NlcnRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICAjYXNzZXJ0aW9uLCAwLCAwLCBfX0ZJTEVfXywgX19MSU5FX18sIDAgKTsgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZW5kaWYKKyAjZW5kaWYKKyAKKy0jZGVmaW5lIG52ZXJpZnkoYXNzZXJ0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICB2ZXJpZnkoIShhc3NlcnRpb24pKQorLQorKyNpZm5kZWYgX19uVmVyaWZ5CisrCSNkZWZpbmUgX19uVmVyaWZ5KGFzc2VydGlvbikJX19WZXJpZnkoIShhc3NlcnRpb24pKQorKyNlbmRpZgorIAorIC8qCistICogIHZlcmlmeV9zdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKQorKyAqICBfX1ZlcmlmeV9TdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGV2YWx1YXRlIHRoZSBhc3NlcnRpb24gZXhwcmVzc2lvbiwgYnV0IGlnbm9yZQorQEAgLTQyOSwzOCArNDU5LDM1IEBACisgICogICAgbWVzc2FnZToKKyAgKiAgICAgIFRoZSBDIHN0cmluZyB0byBkaXNwbGF5LgorICAqLworLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCistICAgI2RlZmluZSB2ZXJpZnlfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorLSNlbHNlCistICAgI2RlZmluZSB2ZXJpZnlfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNhc3NlcnRpb24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCisrI2lmbmRlZiBfX1ZlcmlmeV9TdHJpbmcKKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX1ZlcmlmeV9TdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fVmVyaWZ5X1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KCEoYXNzZXJ0aW9uKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgICNhc3NlcnRpb24sIDAsIG1lc3NhZ2UsIF9fRklMRV9fLCBfX0xJTkVfXywgMCApOyAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbmRpZgorICNlbmRpZgorIAorLSNkZWZpbmUgbnZlcmlmeV9zdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gIHZlcmlmeV9zdHJpbmcoIShhc3NlcnRpb24pLCBtZXNzYWdlKQorLQorKyNpZm5kZWYgX19uVmVyaWZ5X1N0cmluZworKwkjZGVmaW5lIF9fblZlcmlmeV9TdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKSAgX19WZXJpZnlfU3RyaW5nKCEoYXNzZXJ0aW9uKSwgbWVzc2FnZSkKKysjZW5kaWYKKyAKKyAvKgorLSAqICB2ZXJpZnlfbm9lcnIoZXJyb3JDb2RlKQorKyAqICBfX1ZlcmlmeV9ub0VycihlcnJvckNvZGUpCisgICoKKyAgKiAgU3VtbWFyeToKKyAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogZXZhbHVhdGUgdGhlIGVycm9yQ29kZSBleHByZXNzaW9uLCBidXQgaWdub3JlCitAQCAtNDc0LDM2ICs1MDEsMzIgQEAKKyAgKiAgICBlcnJvckNvZGU6CisgICogICAgICBUaGUgZXhwcmVzc2lvbiB0byBjb21wYXJlIHRvIDAuCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIHZlcmlmeV9ub2VycihlcnJvckNvZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2Vsc2UKKy0gICAjZGVmaW5lIHZlcmlmeV9ub2VycihlcnJvckNvZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaW50IGV2YWxPbmNlRXJyb3JDb2RlID0gKGVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggMCAhPSBldmFsT25jZUVycm9yQ29kZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNlcnJvckNvZGUgIiA9PSAwICIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgZXZhbE9uY2VFcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCisrI2lmbmRlZiBfX1ZlcmlmeV9ub0VycgorKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorKwkgICAjZGVmaW5lIF9fVmVyaWZ5X25vRXJyKGVycm9yQ29kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19WZXJpZnlfbm9FcnIoZXJyb3JDb2RlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBsb25nIGV2YWxPbmNlRXJyb3JDb2RlID0gKGVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IGV2YWxPbmNlRXJyb3JDb2RlLCAwKSApICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICAjZXJyb3JDb2RlICIgPT0gMCAiLCAwLCAwLCBfX0ZJTEVfXywgX19MSU5FX18sIGV2YWxPbmNlRXJyb3JDb2RlICk7IFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbmRpZgorICNlbmRpZgorIAorLQorIC8qCistICogIHZlcmlmeV9ub2Vycl9zdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKQorKyAqICBfX1ZlcmlmeV9ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGV2YWx1YXRlIHRoZSBlcnJvckNvZGUgZXhwcmVzc2lvbiwgYnV0IGlnbm9yZQorQEAgLTUyMCwzNiArNTQzLDcxIEBACisgICogICAgbWVzc2FnZToKKyAgKiAgICAgIFRoZSBDIHN0cmluZyB0byBkaXNwbGF5LgorICAqLworLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCistICAgI2RlZmluZSB2ZXJpZnlfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggMCAhPSAoZXJyb3JDb2RlKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorLSNlbHNlCistICAgI2RlZmluZSB2ZXJpZnlfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGludCBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoIDAgIT0gZXZhbE9uY2VFcnJvckNvZGUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjZXJyb3JDb2RlICIgPT0gMCAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIGV2YWxPbmNlRXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorKyNpZm5kZWYgX19WZXJpZnlfbm9FcnJfU3RyaW5nCisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19WZXJpZnlfbm9FcnJfU3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIDAgIT0gKGVycm9yQ29kZSkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2Vsc2UKKysJICAgI2RlZmluZSBfX1ZlcmlmeV9ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGxvbmcgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KDAgIT0gZXZhbE9uY2VFcnJvckNvZGUsIDApICkgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgICNlcnJvckNvZGUgIiA9PSAwICIsIDAsIG1lc3NhZ2UsIF9fRklMRV9fLCBfX0xJTkVfXywgZXZhbE9uY2VFcnJvckNvZGUgKTsgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2VuZGlmCisgI2VuZGlmCisgCisrLyoKKysgKiAgX19WZXJpZnlfbm9FcnJfQWN0aW9uKGVycm9yQ29kZSwgYWN0aW9uKQorKyAqCisrICogIFN1bW1hcnk6CisrICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGlmIHRoZSBlcnJvckNvZGUgZXhwcmVzc2lvbiBkb2VzIG5vdCBlcXVhbCAwIChub0VyciksCisrICogICAgZXhlY3V0ZSB0aGUgYWN0aW9uIHN0YXRlbWVudCBvciBjb21wb3VuZCBzdGF0ZW1lbnQgKGJsb2NrKS4KKysgKgorKyAqICAgIE5vbi1wcm9kdWN0aW9uIGJ1aWxkczogaWYgdGhlIGVycm9yQ29kZSBleHByZXNzaW9uIGRvZXMgbm90IGVxdWFsIDAgKG5vRXJyKSwKKysgKiAgICBjYWxsIERFQlVHX0FTU0VSVF9NRVNTQUdFIGFuZCB0aGVuIGV4ZWN1dGUgdGhlIGFjdGlvbiBzdGF0ZW1lbnQgb3IgY29tcG91bmQKKysgKiAgICBzdGF0ZW1lbnQgKGJsb2NrKS4KKysgKgorKyAqICBQYXJhbWV0ZXJzOgorKyAqCisrICogICAgZXJyb3JDb2RlOgorKyAqICAgICAgVGhlIGV4cHJlc3Npb24gdG8gY29tcGFyZSB0byAwLgorKyAqCisrICogICAgYWN0aW9uOgorKyAqICAgICAgVGhlIHN0YXRlbWVudCBvciBjb21wb3VuZCBzdGF0ZW1lbnQgKGJsb2NrKS4KKysgKi8KKysjaWZuZGVmIF9fVmVyaWZ5X25vRXJyX0FjdGlvbgorKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorKwkgICAjZGVmaW5lIF9fVmVyaWZ5X25vRXJyX0FjdGlvbihlcnJvckNvZGUsIGFjdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZWxzZSBkbyB7fSB3aGlsZSAoMCkKKysJI2Vsc2UKKysJICAgI2RlZmluZSBfX1ZlcmlmeV9ub0Vycl9BY3Rpb24oZXJyb3JDb2RlLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGxvbmcgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSBldmFsT25jZUVycm9yQ29kZSwgMCkgKSB7ICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgICNlcnJvckNvZGUgIiA9PSAwICIsIDAsIDAsIF9fRklMRV9fLCBfX0xJTkVfXywgMCApOyAgICAgICAgICAgIFwKKysJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBlbHNlIGRvIHt9IHdoaWxlICgwKQorKwkjZW5kaWYKKysjZW5kaWYKKyAKKyAvKgorLSAqICB2ZXJpZnlfYWN0aW9uKGFzc2VydGlvbiwgYWN0aW9uKQorKyAqICBfX1ZlcmlmeV9BY3Rpb24oYXNzZXJ0aW9uLCBhY3Rpb24pCisgICoKKyAgKiAgU3VtbWFyeToKKyAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogaWYgdGhlIGFzc2VydGlvbiBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBmYWxzZSwKK0BAIC01NjcsMzcgKzYyNSwyNyBAQAorICAqICAgIGFjdGlvbjoKKyAgKiAgICAgIFRoZSBzdGF0ZW1lbnQgb3IgY29tcG91bmQgc3RhdGVtZW50IChibG9jaykuCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIHZlcmlmeV9hY3Rpb24oYXNzZXJ0aW9uLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorLSNlbHNlCistICAgI2RlZmluZSB2ZXJpZnlfYWN0aW9uKGFzc2VydGlvbiwgYWN0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Fzc2VydGlvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgIHsgYWN0aW9uOyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICB9IHdoaWxlICggMCApCisrI2lmbmRlZiBfX1ZlcmlmeV9BY3Rpb24KKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX1ZlcmlmeV9BY3Rpb24oYXNzZXJ0aW9uLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCWFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGVsc2UgZG8ge30gd2hpbGUgKDApCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19WZXJpZnlfQWN0aW9uKGFzc2VydGlvbiwgYWN0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoIShhc3NlcnRpb24pLCAwKSApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICAjYXNzZXJ0aW9uLCAwLCAwLCBfX0ZJTEVfXywgX19MSU5FX18sIDAgKTsgICAgICAgICAgICAgICAgIFwKKysJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBlbHNlIGRvIHt9IHdoaWxlICgwKQorKwkjZW5kaWYKKyAjZW5kaWYKKyAKKy0KKyAvKgorLSAqICByZXF1aXJlKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpCisrICogIF9fUmVxdWlyZShhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGlmIHRoZSBhc3NlcnRpb24gZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gZmFsc2UsCitAQCAtNjE0LDQwICs2NjIsMzYgQEAKKyAgKiAgICBleGNlcHRpb25MYWJlbDoKKyAgKiAgICAgIFRoZSBsYWJlbC4KKyAgKi8KKy0jaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorLSAgICNkZWZpbmUgcmVxdWlyZShhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2Vsc2UKKy0gICAjZGVmaW5lIHJlcXVpcmUoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Fzc2VydGlvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNleGNlcHRpb25MYWJlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCisrI2lmbmRlZiBfX1JlcXVpcmUKKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX1JlcXVpcmUoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19SZXF1aXJlKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoIShhc3NlcnRpb24pLCAwKSApIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgICNhc3NlcnRpb24sICNleGNlcHRpb25MYWJlbCwgMCwgX19GSUxFX18sIF9fTElORV9fLCAgMCk7ICAgIFwKKysJCQkJICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2VuZGlmCisgI2VuZGlmCisgCistI2RlZmluZSBucmVxdWlyZShhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgcmVxdWlyZSghKGFzc2VydGlvbiksIGV4Y2VwdGlvbkxhYmVsKQorLQorKyNpZm5kZWYgX19uUmVxdWlyZQorKwkjZGVmaW5lIF9fblJlcXVpcmUoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkgIF9fUmVxdWlyZSghKGFzc2VydGlvbiksIGV4Y2VwdGlvbkxhYmVsKQorKyNlbmRpZgorIAorIC8qCistICogIHJlcXVpcmVfYWN0aW9uKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKysgKiAgX19SZXF1aXJlX0FjdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pCisgICoKKyAgKiAgU3VtbWFyeToKKyAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogaWYgdGhlIGFzc2VydGlvbiBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBmYWxzZSwKK0BAIC02NjksNDYgKzcxMyw0NCBAQAorICAqICAgIGFjdGlvbjoKKyAgKiAgICAgIFRoZSBzdGF0ZW1lbnQgb3IgY29tcG91bmQgc3RhdGVtZW50IChibG9jaykuCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIHJlcXVpcmVfYWN0aW9uKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorLSNlbHNlCistICAgI2RlZmluZSByZXF1aXJlX2FjdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNhc3NlcnRpb24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjZXhjZXB0aW9uTGFiZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorKyNpZm5kZWYgX19SZXF1aXJlX0FjdGlvbgorKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9BY3Rpb24oYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KCEoYXNzZXJ0aW9uKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2Vsc2UKKysJICAgI2RlZmluZSBfX1JlcXVpcmVfQWN0aW9uKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICAjYXNzZXJ0aW9uLCAjZXhjZXB0aW9uTGFiZWwsIDAsICAgX19GSUxFX18sIF9fTElORV9fLCAwKTsgICBcCisrCQkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbmRpZgorKyNlbmRpZgorKworKyNpZm5kZWYgX19uUmVxdWlyZV9BY3Rpb24KKysJI2RlZmluZSBfX25SZXF1aXJlX0FjdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgXAorKwlfX1JlcXVpcmVfQWN0aW9uKCEoYXNzZXJ0aW9uKSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKyAjZW5kaWYKKyAKKy0jZGVmaW5lIG5yZXF1aXJlX2FjdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgICBcCistICByZXF1aXJlX2FjdGlvbighKGFzc2VydGlvbiksIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pCistCistCisgLyoKKy0gKiAgcmVxdWlyZV9xdWlldChhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKQorKyAqICBfX1JlcXVpcmVfUXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIElmIHRoZSBhc3NlcnRpb24gZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gZmFsc2UsIGdvdG8gZXhjZXB0aW9uTGFiZWwuCitAQCAtNzIxLDIxICs3NjMsMjMgQEAKKyAgKiAgICBleGNlcHRpb25MYWJlbDoKKyAgKiAgICAgIFRoZSBsYWJlbC4KKyAgKi8KKy0jZGVmaW5lIHJlcXVpcmVfcXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICB9IHdoaWxlICggMCApCistCistI2RlZmluZSBucmVxdWlyZV9xdWlldChhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgcmVxdWlyZV9xdWlldCghKGFzc2VydGlvbiksIGV4Y2VwdGlvbkxhYmVsKQorKyNpZm5kZWYgX19SZXF1aXJlX1F1aWV0CisrCSNkZWZpbmUgX19SZXF1aXJlX1F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJICB9IHdoaWxlICggMCApCisrI2VuZGlmCisgCisrI2lmbmRlZiBfX25SZXF1aXJlX1F1aWV0CisrCSNkZWZpbmUgX19uUmVxdWlyZV9RdWlldChhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKSAgX19SZXF1aXJlX1F1aWV0KCEoYXNzZXJ0aW9uKSwgZXhjZXB0aW9uTGFiZWwpCisrI2VuZGlmCisgCisgLyoKKy0gKiAgcmVxdWlyZV9hY3Rpb25fcXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorKyAqICBfX1JlcXVpcmVfQWN0aW9uX1F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIElmIHRoZSBhc3NlcnRpb24gZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gZmFsc2UsIGV4ZWN1dGUgdGhlIGFjdGlvbgorQEAgLTc1MiwyNCArNzk2LDI3IEBACisgICogICAgYWN0aW9uOgorICAqICAgICAgVGhlIHN0YXRlbWVudCBvciBjb21wb3VuZCBzdGF0ZW1lbnQgKGJsb2NrKS4KKyAgKi8KKy0jZGVmaW5lIHJlcXVpcmVfYWN0aW9uX3F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgICAgICAgICAgICAgICBcCistICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICB9IHdoaWxlICggMCApCistCistI2RlZmluZSBucmVxdWlyZV9hY3Rpb25fcXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICAgICAgICAgXAorLSAgcmVxdWlyZV9hY3Rpb25fcXVpZXQoIShhc3NlcnRpb24pLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorLQorKyNpZm5kZWYgX19SZXF1aXJlX0FjdGlvbl9RdWlldAorKwkjZGVmaW5lIF9fUmVxdWlyZV9BY3Rpb25fUXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICAgICAgICBcCisrCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoIShhc3NlcnRpb24pLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCSAgfSB3aGlsZSAoIDAgKQorKyNlbmRpZgorKworKyNpZm5kZWYgX19uUmVxdWlyZV9BY3Rpb25fUXVpZXQKKysJI2RlZmluZSBfX25SZXF1aXJlX0FjdGlvbl9RdWlldChhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgICAgICBcCisrCQlfX1JlcXVpcmVfQWN0aW9uX1F1aWV0KCEoYXNzZXJ0aW9uKSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKysjZW5kaWYKKyAKKyAvKgorLSAqICByZXF1aXJlX3N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlKQorKyAqICBfX1JlcXVpcmVfU3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpCisgICoKKyAgKiAgU3VtbWFyeToKKyAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogaWYgdGhlIGFzc2VydGlvbiBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBmYWxzZSwKK0BAIC03ODksNDAgKzgzNiwzOCBAQAorICAqICAgIG1lc3NhZ2U6CisgICogICAgICBUaGUgQyBzdHJpbmcgdG8gZGlzcGxheS4KKyAgKi8KKy0jaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorLSAgICNkZWZpbmUgcmVxdWlyZV9zdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgbWVzc2FnZSkgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2Vsc2UKKy0gICAjZGVmaW5lIHJlcXVpcmVfc3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Fzc2VydGlvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNleGNlcHRpb25MYWJlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBtZXNzYWdlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCisrI2lmbmRlZiBfX1JlcXVpcmVfU3RyaW5nCisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX1N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlKSAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoIShhc3NlcnRpb24pLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgbWVzc2FnZSkgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KCEoYXNzZXJ0aW9uKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgICNhc3NlcnRpb24sICNleGNlcHRpb25MYWJlbCwgIG1lc3NhZ2UsICBfX0ZJTEVfXywgX19MSU5FX18sIDApOyBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbmRpZgorKyNlbmRpZgorKworKyNpZm5kZWYgX19uUmVxdWlyZV9TdHJpbmcKKysJI2RlZmluZSBfX25SZXF1aXJlX1N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBzdHJpbmcpICAgICAgICAgICAgICAgICAgXAorKwkJX19SZXF1aXJlX1N0cmluZyghKGFzc2VydGlvbiksIGV4Y2VwdGlvbkxhYmVsLCBzdHJpbmcpCisgI2VuZGlmCisgCistI2RlZmluZSBucmVxdWlyZV9zdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgc3RyaW5nKSAgICAgICAgICAgICAgICAgICAgXAorLSAgcmVxdWlyZV9zdHJpbmcoIShhc3NlcnRpb24pLCBleGNlcHRpb25MYWJlbCwgc3RyaW5nKQorLQorLQorIC8qCistICogIHJlcXVpcmVfYWN0aW9uX3N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpCisrICogIF9fUmVxdWlyZV9BY3Rpb25fU3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBpZiB0aGUgYXNzZXJ0aW9uIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGZhbHNlLAorQEAgLTg0Nyw0NiArODkyLDQ0IEBACisgICogICAgbWVzc2FnZToKKyAgKiAgICAgIFRoZSBDIHN0cmluZyB0byBkaXNwbGF5LgorICAqLworLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCistICAgI2RlZmluZSByZXF1aXJlX2FjdGlvbl9zdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKy0jZWxzZQorLSAgICNkZWZpbmUgcmVxdWlyZV9hY3Rpb25fc3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjYXNzZXJ0aW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2V4Y2VwdGlvbkxhYmVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKysjaWZuZGVmIF9fUmVxdWlyZV9BY3Rpb25fU3RyaW5nCisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX0FjdGlvbl9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX0FjdGlvbl9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICAjYXNzZXJ0aW9uLCAjZXhjZXB0aW9uTGFiZWwsICBtZXNzYWdlLCAgX19GSUxFX18sICBfX0xJTkVfXywgMCk7IFwKKysJCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2VuZGlmCisrI2VuZGlmCisrCisrI2lmbmRlZiBfX25SZXF1aXJlX0FjdGlvbl9TdHJpbmcKKysJI2RlZmluZSBfX25SZXF1aXJlX0FjdGlvbl9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSAgICBcCisrCQlfX1JlcXVpcmVfQWN0aW9uX1N0cmluZyghKGFzc2VydGlvbiksIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpCisgI2VuZGlmCisgCistI2RlZmluZSBucmVxdWlyZV9hY3Rpb25fc3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkgICAgXAorLSAgcmVxdWlyZV9hY3Rpb25fc3RyaW5nKCEoYXNzZXJ0aW9uKSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkKKy0KKy0KKyAvKgorLSAqICByZXF1aXJlX25vZXJyKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpCisrICogIF9fUmVxdWlyZV9ub0VycihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGlmIHRoZSBlcnJvckNvZGUgZXhwcmVzc2lvbiBkb2VzIG5vdCBlcXVhbCAwIChub0VyciksCitAQCAtOTAzLDM3ICs5NDYsMzQgQEAKKyAgKiAgICBleGNlcHRpb25MYWJlbDoKKyAgKiAgICAgIFRoZSBsYWJlbC4KKyAgKi8KKy0jaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorLSAgICNkZWZpbmUgcmVxdWlyZV9ub2VycihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoIDAgIT0gKGVycm9yQ29kZSkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2Vsc2UKKy0gICAjZGVmaW5lIHJlcXVpcmVfbm9lcnIoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaW50IGV2YWxPbmNlRXJyb3JDb2RlID0gKGVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggMCAhPSBldmFsT25jZUVycm9yQ29kZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNlcnJvckNvZGUgIiA9PSAwICIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjZXhjZXB0aW9uTGFiZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgZXZhbE9uY2VFcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorKyNpZm5kZWYgX19SZXF1aXJlX25vRXJyCisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX25vRXJyKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSAoZXJyb3JDb2RlKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9ub0VycihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgbG9uZyBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSBldmFsT25jZUVycm9yQ29kZSwgMCkgKSAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgI2Vycm9yQ29kZSAiID09IDAgIiwgICNleGNlcHRpb25MYWJlbCwgIDAsICBfX0ZJTEVfXywgX19MSU5FX18sIGV2YWxPbmNlRXJyb3JDb2RlKTsgXAorKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZW5kaWYKKyAjZW5kaWYKKyAKKyAvKgorLSAqICByZXF1aXJlX25vZXJyX2FjdGlvbihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pCisrICogIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb24oZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGlmIHRoZSBlcnJvckNvZGUgZXhwcmVzc2lvbiBkb2VzIG5vdCBlcXVhbCAwIChub0VyciksCitAQCAtOTU1LDQ0ICs5OTUsNDAgQEAKKyAgKiAgICBhY3Rpb246CisgICogICAgICBUaGUgc3RhdGVtZW50IG9yIGNvbXBvdW5kIHN0YXRlbWVudCAoYmxvY2spLgorICAqLworLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCistICAgI2RlZmluZSByZXF1aXJlX25vZXJyX2FjdGlvbihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggMCAhPSAoZXJyb3JDb2RlKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKy0jZWxzZQorLSAgICNkZWZpbmUgcmVxdWlyZV9ub2Vycl9hY3Rpb24oZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpbnQgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAwICE9IGV2YWxPbmNlRXJyb3JDb2RlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Vycm9yQ29kZSAiID09IDAgIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNleGNlcHRpb25MYWJlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBldmFsT25jZUVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCisrI2lmbmRlZiBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uCisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX25vRXJyX0FjdGlvbihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSAoZXJyb3JDb2RlKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb24oZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgbG9uZyBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSBldmFsT25jZUVycm9yQ29kZSwgMCkgKSAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgI2Vycm9yQ29kZSAiID09IDAgIiwgI2V4Y2VwdGlvbkxhYmVsLCAgMCwgIF9fRklMRV9fLCBfX0xJTkVfXywgIGV2YWxPbmNlRXJyb3JDb2RlKTsgXAorKwkJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZW5kaWYKKyAjZW5kaWYKKyAKKy0KKyAvKgorLSAqICByZXF1aXJlX25vZXJyX3F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpCisrICogIF9fUmVxdWlyZV9ub0Vycl9RdWlldChlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgSWYgdGhlIGVycm9yQ29kZSBleHByZXNzaW9uIGRvZXMgbm90IGVxdWFsIDAgKG5vRXJyKSwKK0BAIC0xMDA2LDE4ICsxMDQyLDE5IEBACisgICogICAgZXhjZXB0aW9uTGFiZWw6CisgICogICAgICBUaGUgbGFiZWwuCisgICovCistI2RlZmluZSByZXF1aXJlX25vZXJyX3F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgfSB3aGlsZSAoIDAgKQorLQorKyNpZm5kZWYgX19SZXF1aXJlX25vRXJyX1F1aWV0CisrCSNkZWZpbmUgX19SZXF1aXJlX25vRXJyX1F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgIFwKKysJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IChlcnJvckNvZGUpLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJICB9IHdoaWxlICggMCApCisrI2VuZGlmCisgCisgLyoKKy0gKiAgcmVxdWlyZV9ub2Vycl9hY3Rpb25fcXVpZXQoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorKyAqICBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uX1F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIElmIHRoZSBlcnJvckNvZGUgZXhwcmVzc2lvbiBkb2VzIG5vdCBlcXVhbCAwIChub0VyciksCitAQCAtMTAzNSwyMSArMTA3MiwyMiBAQAorICAqICAgIGFjdGlvbjoKKyAgKiAgICAgIFRoZSBzdGF0ZW1lbnQgb3IgY29tcG91bmQgc3RhdGVtZW50IChibG9jaykuCisgICovCistI2RlZmluZSByZXF1aXJlX25vZXJyX2FjdGlvbl9xdWlldChlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgXAorLSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgfSB3aGlsZSAoIDAgKQorLQorKyNpZm5kZWYgX19SZXF1aXJlX25vRXJyX0FjdGlvbl9RdWlldAorKwkjZGVmaW5lIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb25fUXVpZXQoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICBcCisrCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSAoZXJyb3JDb2RlKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCSAgfSB3aGlsZSAoIDAgKQorKyNlbmRpZgorIAorIC8qCistICogIHJlcXVpcmVfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpCisrICogIF9fUmVxdWlyZV9ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgbWVzc2FnZSkKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBpZiB0aGUgZXJyb3JDb2RlIGV4cHJlc3Npb24gZG9lcyBub3QgZXF1YWwgMCAobm9FcnIpLAorQEAgLTEwNjksMzggKzExMDcsMzQgQEAKKyAgKiAgICBtZXNzYWdlOgorICAqICAgICAgVGhlIEMgc3RyaW5nIHRvIGRpc3BsYXkuCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIHJlcXVpcmVfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorLSNlbHNlCistICAgI2RlZmluZSByZXF1aXJlX25vZXJyX3N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlKSAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGludCBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoIDAgIT0gZXZhbE9uY2VFcnJvckNvZGUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjZXJyb3JDb2RlICIgPT0gMCAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2V4Y2VwdGlvbkxhYmVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIGV2YWxPbmNlRXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKysjaWZuZGVmIF9fUmVxdWlyZV9ub0Vycl9TdHJpbmcKKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX1JlcXVpcmVfbm9FcnJfU3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IChlcnJvckNvZGUpLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX25vRXJyX1N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlKSAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBsb25nIGV2YWxPbmNlRXJyb3JDb2RlID0gKGVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IGV2YWxPbmNlRXJyb3JDb2RlLCAwKSApICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICAjZXJyb3JDb2RlICIgPT0gMCAiLCAgI2V4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlLCBfX0ZJTEVfXywgIF9fTElORV9fLCAgZXZhbE9uY2VFcnJvckNvZGUpOyBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbmRpZgorICNlbmRpZgorIAorLQorIC8qCistICogIHJlcXVpcmVfbm9lcnJfYWN0aW9uX3N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpCisrICogIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb25fU3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBpZiB0aGUgZXJyb3JDb2RlIGV4cHJlc3Npb24gZG9lcyBub3QgZXF1YWwgMCAobm9FcnIpLAorQEAgLTExMjUsNDEgKzExNTksMjcwIEBACisgICogICAgbWVzc2FnZToKKyAgKiAgICAgIFRoZSBDIHN0cmluZyB0byBkaXNwbGF5LgorICAqLworLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCistICAgI2RlZmluZSByZXF1aXJlX25vZXJyX2FjdGlvbl9zdHJpbmcoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKVwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoIDAgIT0gKGVycm9yQ29kZSkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2Vsc2UKKy0gICAjZGVmaW5lIHJlcXVpcmVfbm9lcnJfYWN0aW9uX3N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpbnQgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAwICE9IGV2YWxPbmNlRXJyb3JDb2RlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Vycm9yQ29kZSAiID09IDAgIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNleGNlcHRpb25MYWJlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBtZXNzYWdlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBldmFsT25jZUVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2VuZGlmCisrI2lmbmRlZiBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uX1N0cmluZworKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb25fU3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IChlcnJvckNvZGUpLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX25vRXJyX0FjdGlvbl9TdHJpbmcoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgbG9uZyBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSBldmFsT25jZUVycm9yQ29kZSwgMCkgKSAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgI2Vycm9yQ29kZSAiID09IDAgIiwgI2V4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlLCBfX0ZJTEVfXywgX19MSU5FX18sIGV2YWxPbmNlRXJyb3JDb2RlKTsgXAorKwkJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZW5kaWYKKysjZW5kaWYKKysKKysvKgorKyAqICBfX0NoZWNrX0NvbXBpbGVfVGltZShleHByKQorKyAqCisrICogIFN1bW1hcnk6CisrICogICAgYW55IGJ1aWxkOiBpZiB0aGUgZXhwcmVzc2lvbiBpcyBub3QgdHJ1ZSwgZ2VuZXJhdGVkIGEgY29tcGlsZSB0aW1lIGVycm9yLgorKyAqCisrICogIFBhcmFtZXRlcnM6CisrICoKKysgKiAgICBleHByOgorKyAqICAgICAgVGhlIGNvbXBpbGUgdGltZSBleHByZXNzaW9uIHRoYXQgc2hvdWxkIGV2YWx1YXRlIHRvIG5vbi16ZXJvLgorKyAqCisrICogIERpc2N1c3Npb246CisrICogICAgIFRoaXMgZGVjbGFyZXMgYW4gYXJyYXkgd2l0aCBhIHNpemUgdGhhdCBpcyBkZXRlcm1pbmVkIGJ5IGEgY29tcGlsZS10aW1lIGV4cHJlc3Npb24uCisrICogICAgIElmIGZhbHNlLCBpdCBkZWNsYXJlcyBhIG5lZ2F0aXZlbHkgc2l6ZWQgYXJyYXksIHdoaWNoIGdlbmVyYXRlcyBhIGNvbXBpbGUtdGltZSBlcnJvci4KKysgKgorKyAqIEV4YW1wbGVzOgorKyAqICAgICBfX0NoZWNrX0NvbXBpbGVfVGltZSggc2l6ZW9mKCBpbnQgKSA9PSA0ICk7CisrICogICAgIF9fQ2hlY2tfQ29tcGlsZV9UaW1lKCBvZmZzZXRvZiggTXlTdHJ1Y3QsIG15RmllbGQgKSA9PSA0ICk7CisrICogICAgIF9fQ2hlY2tfQ29tcGlsZV9UaW1lKCAoIGtNeUJ1ZmZlclNpemUgJSA1MTIgKSA9PSAwICk7CisrICoKKysgKiAgTm90ZTogVGhpcyBvbmx5IHdvcmtzIHdpdGggY29tcGlsZS10aW1lIGV4cHJlc3Npb25zLgorKyAqICBOb3RlOiBUaGlzIG9ubHkgd29ya3MgaW4gcGxhY2VzIHdoZXJlIGV4dGVybiBkZWNsYXJhdGlvbnMgYXJlIGFsbG93ZWQgKGUuZy4gZ2xvYmFsIHNjb3BlKS4KKysgKi8KKysjaWZuZGVmIF9fQ2hlY2tfQ29tcGlsZV9UaW1lCisrICAgICNpZmRlZiBfX0dOVUNfXyAKKysgICAgICAgICNkZWZpbmUgX19DaGVja19Db21waWxlX1RpbWUoIGV4cHIgKSAgICBcCisrICAgICAgICAgICAgZXh0ZXJuIGludCBjb21waWxlX3RpbWVfYXNzZXJ0X2ZhaWxlZFsgKCBleHByICkgPyAxIDogLTEgXSBfX2F0dHJpYnV0ZV9fKCAoIHVudXNlZCApICkKKysgICAgI2Vsc2UKKysgICAgICAgICNkZWZpbmUgX19DaGVja19Db21waWxlX1RpbWUoIGV4cHIgKSAgICBcCisrICAgICAgICAgICAgZXh0ZXJuIGludCBjb21waWxlX3RpbWVfYXNzZXJ0X2ZhaWxlZFsgKCBleHByICkgPyAxIDogLTEgXQorKyAgICAjZW5kaWYKKysjZW5kaWYKKysKKysvKgorKyAqCUZvciB0aW1lIGltbWVtb3JpYWwsIE1hYyBPUyBYIGhhcyBkZWZpbmVkIHZlcnNpb24gb2YgbW9zdCBvZiB0aGVzZSBtYWNyb3Mgd2l0aG91dCB0aGUgX18gcHJlZml4LCB3aGljaAorKyAqCWNvdWxkIGNvbGxpZGUgd2l0aCBzaW1pbGFybHkgbmFtZWQgZnVuY3Rpb25zIG9yIG1hY3JvcyBpbiB1c2VyIGNvZGUsIGluY2x1ZGluZyBuZXcgZnVuY3Rpb25hbGl0eSBpbgorKyAqCUJvb3N0IGFuZCB0aGUgQysrIHN0YW5kYXJkIGxpYnJhcnkuCisrICoKKysgKglBIGZ1dHVyZSByZWxlYXNlIG9mIE1hYyBPUyBYIHdpbGwgbm8gbG9uZ2VyIGRvIHRoaXMsIGFuZCB3aWxsIHJlcXVpcmUgdGhhdCBjbGllbnRzIG1vdmUgdG8gdGhlCisrICogIG5ldyBtYWNyb3MgYXMgZGVmaW5lZCBhYm92ZS4gIEhvd2V2ZXIsIGluIHRoZSBpbnRlcmltIGJvdGggdGhlIG5ldyBhbmQgb2xkIG1hY3JvcyB3aWxsIHdvcmssIHVubGVzcworKyAqICBjbGllbnRzIGRlZmluZSBhIG1hY3JvIF9fQVNTRVJUX01BQ1JPU19ERUZJTkVfVkVSU0lPTlNfV0lUSE9VVF9VTkRFUlNDT1JFUyBiZWZvcmUgdGhpcyBmaWxlIGlzIGluY2x1ZGVkCisrICogIGluIHRoZWlyIGNvbXBpbGF0aW9ucy4gIENsaWVudHMgd2hvIGRvIG5vdCB3YW50IHRoZSBvbGRlciBtYWNyb3MgZGVmaW5lZCBjYW4gYWNjb21wbGlzaCB0aGlzIGJ5IGFkZGluZworKyAqICAgICNkZWZpbmUgX19BU1NFUlRfTUFDUk9TX0RFRklORV9WRVJTSU9OU19XSVRIT1VUX1VOREVSU0NPUkVTIDAKKysgKiAgYXQgdGhlIHRvcCBvZiB0aGVpciBzb3VyY2VzLCBvciBteSBhZGRpbmcgLURfX0FTU0VSVF9NQUNST1NfREVGSU5FX1ZFUlNJT05TX1dJVEhPVVRfVU5ERVJTQ09SRVM9MCB0byB0aGUKKysgKiAgZ2NjIGNvbXBpbGF0aW9uIG9wdGlvbnMuCisrICoKKysgKiAgVG8gYWlkIHVzZXJzIG9mIHRoZXNlIG1hY3JvcyBpbiBjb252ZXJ0aW5nIHRoZWlyIHNvdXJjZXMsIHRoZSBmb2xsb3dpbmcgdG9wcyBzY3JpcHQgd2lsbCBjb252ZXJ0IHVzYWdlcworKyAqICBvZiB0aGUgb2xkIG1hY3JvcyBpbnRvIHRoZSBuZXcgZXF1aXZhbGVudHMuICBUbyBkbyBzbywgaW4gVGVybWluYWwgZ28gaW50byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlCisrICogIHNvdXJjZXMgdG8gYmUgY29udmVydGVkIGFuZCBydW4gdGhpcyBjb21tYW5kLgorKyAqCisrICAgIGZpbmQgLiAtbmFtZSAnKi5bY3xjY3xjcHxjcHB8bXxtbXxoXScgLXByaW50MCB8ICB4YXJncyAtMCB0b3BzIC12ZXJib3NlIFwKKysgICAgICByZXBsYWNlICJjaGVjayg8YiBhcmdzPikiIHdpdGggIl9fQ2hlY2soPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgImNoZWNrX25vZXJyKDxiIGFyZ3M+KSIgd2l0aCAiX19DaGVja19ub0Vycig8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAiY2hlY2tfbm9lcnJfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19DaGVja19ub0Vycl9TdHJpbmcoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgImNoZWNrX3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fQ2hlY2tfU3RyaW5nKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJyZXF1aXJlKDxiIGFyZ3M+KSIgd2l0aCAiX19SZXF1aXJlKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJyZXF1aXJlX2FjdGlvbig8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9BY3Rpb24oPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInJlcXVpcmVfYWN0aW9uX3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9BY3Rpb25fU3RyaW5nKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJyZXF1aXJlX25vZXJyKDxiIGFyZ3M+KSIgd2l0aCAiX19SZXF1aXJlX25vRXJyKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJyZXF1aXJlX25vZXJyX2FjdGlvbig8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9ub0Vycl9BY3Rpb24oPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInJlcXVpcmVfbm9lcnJfYWN0aW9uX3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9ub0Vycl9BY3Rpb25fU3RyaW5nKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJyZXF1aXJlX25vZXJyX3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9ub0Vycl9TdHJpbmcoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInJlcXVpcmVfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19SZXF1aXJlX1N0cmluZyg8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAidmVyaWZ5KDxiIGFyZ3M+KSIgd2l0aCAiX19WZXJpZnkoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInZlcmlmeV9hY3Rpb24oPGIgYXJncz4pIiB3aXRoICJfX1ZlcmlmeV9BY3Rpb24oPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInZlcmlmeV9ub2Vycig8YiBhcmdzPikiIHdpdGggIl9fVmVyaWZ5X25vRXJyKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJ2ZXJpZnlfbm9lcnJfYWN0aW9uKDxiIGFyZ3M+KSIgd2l0aCAiX19WZXJpZnlfbm9FcnJfQWN0aW9uKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJ2ZXJpZnlfbm9lcnJfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19WZXJpZnlfbm9FcnJfU3RyaW5nKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJ2ZXJpZnlfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19WZXJpZnlfU3RyaW5nKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJuY2hlY2soPGIgYXJncz4pIiB3aXRoICJfX25DaGVjayg8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAibmNoZWNrX3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fbkNoZWNrX1N0cmluZyg8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAibnJlcXVpcmUoPGIgYXJncz4pIiB3aXRoICJfX25SZXF1aXJlKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJucmVxdWlyZV9hY3Rpb24oPGIgYXJncz4pIiB3aXRoICJfX25SZXF1aXJlX0FjdGlvbig8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAibnJlcXVpcmVfYWN0aW9uX3F1aWV0KDxiIGFyZ3M+KSIgd2l0aCAiX19uUmVxdWlyZV9BY3Rpb25fUXVpZXQoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgIm5yZXF1aXJlX2FjdGlvbl9zdHJpbmcoPGIgYXJncz4pIiB3aXRoICJfX25SZXF1aXJlX0FjdGlvbl9TdHJpbmcoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgIm5yZXF1aXJlX3F1aWV0KDxiIGFyZ3M+KSIgd2l0aCAiX19uUmVxdWlyZV9RdWlldCg8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAibnJlcXVpcmVfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19uUmVxdWlyZV9TdHJpbmcoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgIm52ZXJpZnkoPGIgYXJncz4pIiB3aXRoICJfX25WZXJpZnkoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgIm52ZXJpZnlfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19uVmVyaWZ5X1N0cmluZyg8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAicmVxdWlyZV9hY3Rpb25fcXVpZXQoPGIgYXJncz4pIiB3aXRoICJfX1JlcXVpcmVfQWN0aW9uX1F1aWV0KDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJyZXF1aXJlX25vZXJyX2FjdGlvbl9xdWlldCg8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9ub0Vycl9BY3Rpb25fUXVpZXQoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInJlcXVpcmVfbm9lcnJfcXVpZXQoPGIgYXJncz4pIiB3aXRoICJfX1JlcXVpcmVfbm9FcnJfUXVpZXQoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInJlcXVpcmVfcXVpZXQoPGIgYXJncz4pIiB3aXRoICJfX1JlcXVpcmVfUXVpZXQoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgImNoZWNrX2NvbXBpbGVfdGltZSg8YiBhcmdzPikiIHdpdGggIl9fQ2hlY2tfQ29tcGlsZV9UaW1lKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJkZWJ1Z19zdHJpbmcoPGIgYXJncz4pIiB3aXRoICJfX0RlYnVnX1N0cmluZyg8YXJncz4pIgorKyAqCisrICovCisrCisrI2lmbmRlZiBfX0FTU0VSVF9NQUNST1NfREVGSU5FX1ZFUlNJT05TX1dJVEhPVVRfVU5ERVJTQ09SRVMKKysJLyogSWYgd2UgaGF2ZW4ndCBzZXQgdGhpcyB5ZXQsIGl0IGRlZmF1bHRzIHRvIG9uLiAgSW4gdGhlIG5leHQgcmVsZWFzZSwgdGhpcyB3aWxsIGRlZmF1bHQgdG8gb2ZmLiAqLworKwkjZGVmaW5lCV9fQVNTRVJUX01BQ1JPU19ERUZJTkVfVkVSU0lPTlNfV0lUSE9VVF9VTkRFUlNDT1JFUwkxCisrI2VuZGlmCisrCisrI2lmCV9fQVNTRVJUX01BQ1JPU19ERUZJTkVfVkVSU0lPTlNfV0lUSE9VVF9VTkRFUlNDT1JFUworKworKwkjaWZuZGVmIGNoZWNrCisrCSNkZWZpbmUgY2hlY2soYXNzZXJ0aW9uKSAgX19DaGVjayhhc3NlcnRpb24pCisrCSNlbmRpZgorKworKwkjaWZuZGVmIGNoZWNrX25vZXJyCisrCSNkZWZpbmUgY2hlY2tfbm9lcnIoZXJyb3JDb2RlKSAgX19DaGVja19ub0VycihlcnJvckNvZGUpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIGNoZWNrX25vZXJyX3N0cmluZworKwkJI2RlZmluZSBjaGVja19ub2Vycl9zdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKSAgX19DaGVja19ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiBjaGVja19zdHJpbmcKKysJCSNkZWZpbmUgY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgIF9fQ2hlY2tfU3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgcmVxdWlyZQorKwkJI2RlZmluZSByZXF1aXJlKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICBfX1JlcXVpcmUoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgcmVxdWlyZV9hY3Rpb24KKysJCSNkZWZpbmUgcmVxdWlyZV9hY3Rpb24oYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgX19SZXF1aXJlX0FjdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHJlcXVpcmVfYWN0aW9uX3N0cmluZworKwkJI2RlZmluZSByZXF1aXJlX2FjdGlvbl9zdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSAgX19SZXF1aXJlX0FjdGlvbl9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiByZXF1aXJlX25vZXJyCisrCQkjZGVmaW5lIHJlcXVpcmVfbm9lcnIoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCkgIF9fUmVxdWlyZV9ub0VycihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiByZXF1aXJlX25vZXJyX2FjdGlvbgorKwkJI2RlZmluZSByZXF1aXJlX25vZXJyX2FjdGlvbihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgcmVxdWlyZV9ub2Vycl9hY3Rpb25fc3RyaW5nCisrCQkjZGVmaW5lIHJlcXVpcmVfbm9lcnJfYWN0aW9uX3N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpICBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uX1N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHJlcXVpcmVfbm9lcnJfc3RyaW5nCisrCQkjZGVmaW5lIHJlcXVpcmVfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpICBfX1JlcXVpcmVfbm9FcnJfU3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHJlcXVpcmVfc3RyaW5nCisrCQkjZGVmaW5lIHJlcXVpcmVfc3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpICBfX1JlcXVpcmVfU3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHZlcmlmeQorKwkJI2RlZmluZSB2ZXJpZnkoYXNzZXJ0aW9uKSBfX1ZlcmlmeShhc3NlcnRpb24pCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHZlcmlmeV9hY3Rpb24KKysJCSNkZWZpbmUgdmVyaWZ5X2FjdGlvbihhc3NlcnRpb24sIGFjdGlvbikgIF9fVmVyaWZ5X0FjdGlvbihhc3NlcnRpb24sIGFjdGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgdmVyaWZ5X25vZXJyCisrCQkjZGVmaW5lIHZlcmlmeV9ub2VycihlcnJvckNvZGUpICBfX1ZlcmlmeV9ub0VycihlcnJvckNvZGUpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHZlcmlmeV9ub2Vycl9hY3Rpb24KKysJCSNkZWZpbmUgdmVyaWZ5X25vZXJyX2FjdGlvbihlcnJvckNvZGUsIGFjdGlvbikgIF9fVmVyaWZ5X25vRXJyX0FjdGlvbihlcnJvckNvZGUsIGFjdGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgdmVyaWZ5X25vZXJyX3N0cmluZworKwkJI2RlZmluZSB2ZXJpZnlfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgIF9fVmVyaWZ5X25vRXJyX1N0cmluZyhlcnJvckNvZGUsIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHZlcmlmeV9zdHJpbmcKKysJCSNkZWZpbmUgdmVyaWZ5X3N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpICBfX1ZlcmlmeV9TdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiBuY2hlY2sKKysJCSNkZWZpbmUgbmNoZWNrKGFzc2VydGlvbikgIF9fbkNoZWNrKGFzc2VydGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgbmNoZWNrX3N0cmluZworKwkJI2RlZmluZSBuY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgIF9fbkNoZWNrX1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIG5yZXF1aXJlCisrCQkjZGVmaW5lIG5yZXF1aXJlKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICBfX25SZXF1aXJlKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIG5yZXF1aXJlX2FjdGlvbgorKwkJI2RlZmluZSBucmVxdWlyZV9hY3Rpb24oYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgX19uUmVxdWlyZV9BY3Rpb24oYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiBucmVxdWlyZV9hY3Rpb25fcXVpZXQKKysJCSNkZWZpbmUgbnJlcXVpcmVfYWN0aW9uX3F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgIF9fblJlcXVpcmVfQWN0aW9uX1F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgbnJlcXVpcmVfYWN0aW9uX3N0cmluZworKwkJI2RlZmluZSBucmVxdWlyZV9hY3Rpb25fc3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkgIF9fblJlcXVpcmVfQWN0aW9uX1N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIG5yZXF1aXJlX3F1aWV0CisrCQkjZGVmaW5lIG5yZXF1aXJlX3F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICBfX25SZXF1aXJlX1F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIG5yZXF1aXJlX3N0cmluZworKwkJI2RlZmluZSBucmVxdWlyZV9zdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgc3RyaW5nKSAgX19uUmVxdWlyZV9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgc3RyaW5nKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiBudmVyaWZ5CisrCQkjZGVmaW5lIG52ZXJpZnkoYXNzZXJ0aW9uKSAgX19uVmVyaWZ5KGFzc2VydGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgbnZlcmlmeV9zdHJpbmcKKysJCSNkZWZpbmUgbnZlcmlmeV9zdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKSAgX19uVmVyaWZ5X1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHJlcXVpcmVfYWN0aW9uX3F1aWV0CisrCQkjZGVmaW5lIHJlcXVpcmVfYWN0aW9uX3F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgIF9fUmVxdWlyZV9BY3Rpb25fUXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiByZXF1aXJlX25vZXJyX2FjdGlvbl9xdWlldAorKwkJI2RlZmluZSByZXF1aXJlX25vZXJyX2FjdGlvbl9xdWlldChlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uX1F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgcmVxdWlyZV9ub2Vycl9xdWlldAorKwkJI2RlZmluZSByZXF1aXJlX25vZXJyX3F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpICBfX1JlcXVpcmVfbm9FcnJfUXVpZXQoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCkKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgcmVxdWlyZV9xdWlldAorKwkJI2RlZmluZSByZXF1aXJlX3F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICBfX1JlcXVpcmVfUXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgY2hlY2tfY29tcGlsZV90aW1lCisrCQkjZGVmaW5lIGNoZWNrX2NvbXBpbGVfdGltZSggZXhwciApICBfX0NoZWNrX0NvbXBpbGVfVGltZSggZXhwciApCisrCSNlbmRpZgorKworKwkjaWZuZGVmIGRlYnVnX3N0cmluZworKwkJI2RlZmluZSBkZWJ1Z19zdHJpbmcobWVzc2FnZSkgIF9fRGVidWdfU3RyaW5nKG1lc3NhZ2UpCisrCSNlbmRpZgorKwkKKysjZW5kaWYJLyogQVNTRVJUX01BQ1JPU19ERUZJTkVfVkVSU0lPTlNfV0lUSE9VVF9VTkRFUlNDT1JFUyAqLworIAorIAorICNlbmRpZiAvKiBfX0FTU0VSVE1BQ1JPU19fICovCistCmRpZmYgLS1naXQgYS9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01My5wYXRjaCBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNmMzN2YKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01My5wYXRjaApAQCAtMCwwICsxLDI2IEBACitkaWZmIC1hcnVOIGEvQ0ZCYXNlLmMgYi9DRkJhc2UuYworLS0tIGEvQ0ZCYXNlLmMJMjAxMS0wOC0xMCAxNjoyOTowNC44NDEwODM2MDIgLTA3MDAKKysrKyBiL0NGQmFzZS5jCTIwMTEtMDgtMTAgMTU6NDY6NDQuMDAwMDAwMDAwIC0wNzAwCitAQCAtNDQsNiArNDQsNyBAQAorICNpbmNsdWRlIDxtYWNoL21hY2guaD4KKyAjaW5jbHVkZSA8ZGxmY24uaD4KKyAjZWxpZiBERVBMT1lNRU5UX1RBUkdFVF9MSU5VWAorKyNpbmNsdWRlIDxtY2hlY2suaD4KKyAjaW5jbHVkZSA8cHRocmVhZC5oPgorICNlbGlmIERFUExPWU1FTlRfVEFSR0VUX1dJTkRPV1MKKyAjaW5jbHVkZSA8d2luZG93cy5oPgorQEAgLTI4MSw2ICsyODIsMTQgQEAKKyB9CisgCisgc3RhdGljIHZvaWQgX19DRkFsbG9jYXRvclN5c3RlbURlYWxsb2NhdGUodm9pZCAqcHRyLCB2b2lkICppbmZvKSB7CisrI2lmIGRlZmluZWQoREVCVUcpCisrICAgIGNvbnN0IGVudW0gbWNoZWNrX3N0YXR1cyBzdGF0dXMgPSBtcHJvYmUocHRyKTsKKysKKysgICAgQ0ZBc3NlcnQzKHN0YXR1cyA9PSBNQ0hFQ0tfT0sgfHwgc3RhdHVzID09IE1DSEVDS19ESVNBQkxFRCwKKysgICAgICAgICAgICAgIF9fa0NGTG9nQXNzZXJ0aW9uLCAiJXM6IHB0ciAlcCBzdGF0dXMgJWQiLAorKyAgICAgICAgICAgICAgX19QUkVUVFlfRlVOQ1RJT05fXywgcHRyLCBzdGF0dXMpOworKyNlbmRpZgorKworICAgICBmcmVlKHB0cik7CisgfQorICNlbmRpZgpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTQucGF0Y2ggYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjVhYjA1Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTQucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorZGlmZiAtYXJ1TiBhL0NGQmFzZS5jIGIvQ0ZCYXNlLmMKKy0tLSBhL0NGQmFzZS5jCTIwMTEtMDgtMTAgMTY6Mjk6MzUuNDU4MTc4NDkzIC0wNzAwCisrKysgYi9DRkJhc2UuYwkyMDExLTA4LTEwIDE2OjMxOjI3LjAwMDAwMDAwMCAtMDcwMAorQEAgLTI3MCw3ICsyNzAsNyBAQAorICAgICBtYWxsb2Nfem9uZV9mcmVlKChtYWxsb2Nfem9uZV90KilpbmZvLCBwdHIpOworIH0KKyAKKy0jZW5kaWYKKysjZW5kaWYgLyogREVQTE9ZTUVOVF9UQVJHRVRfTUFDT1NYICovCisgCisgI2lmIERFUExPWU1FTlRfVEFSR0VUX1dJTkRPV1MgfHwgREVQTE9ZTUVOVF9UQVJHRVRfTElOVVggfHwgREVQTE9ZTUVOVF9UQVJHRVRfRlJFRUJTRAorIHN0YXRpYyB2b2lkICpfX0NGQWxsb2NhdG9yU3lzdGVtQWxsb2NhdGUoQ0ZJbmRleCBzaXplLCBDRk9wdGlvbkZsYWdzIGhpbnQsIHZvaWQgKmluZm8pIHsKK0BAIC02ODUsNyArNjg1LDcgQEAKKyAJICAgIG1hbGxvY196b25lX2ZyZWUoKG1hbGxvY196b25lX3QgKilhbGxvY2F0b3IsIHB0cik7CisgCSAgICByZXR1cm4gTlVMTDsKKyAJfQorLSNlbmRpZgorKyNlbmRpZiAvKiBERVBMT1lNRU5UX1RBUkdFVF9NQUNPU1ggKi8KKyAJZGVhbGxvY2F0ZUZ1bmMgPSBfX0NGQWxsb2NhdG9yR2V0RGVhbGxvY2F0ZUZ1bmN0aW9uKCZhbGxvY2F0b3ItPl9jb250ZXh0KTsKKyAJaWYgKE5VTEwgIT0gZGVhbGxvY2F0ZUZ1bmMpIHsKKyAJICAgIElOVk9LRV9DQUxMQkFDSzIoZGVhbGxvY2F0ZUZ1bmMsIHB0ciwgYWxsb2NhdG9yLT5fY29udGV4dC5pbmZvKTsKK0BAIC03MjIsNyArNzIyLDcgQEAKKyAjZW5kaWYKKyAJcmV0dXJuIG1hbGxvY196b25lX2ZyZWUoKG1hbGxvY196b25lX3QgKilhbGxvY2F0b3IsIHB0cik7CisgICAgIH0KKy0jZW5kaWYKKysjZW5kaWYgLyogREVQTE9ZTUVOVF9UQVJHRVRfTUFDT1NYICovCisgICAgIGRlYWxsb2NhdGVGdW5jID0gX19DRkFsbG9jYXRvckdldERlYWxsb2NhdGVGdW5jdGlvbigmYWxsb2NhdG9yLT5fY29udGV4dCk7CisgICAgIGlmIChOVUxMICE9IHB0ciAmJiBOVUxMICE9IGRlYWxsb2NhdGVGdW5jKSB7CisgCUlOVk9LRV9DQUxMQkFDSzIoZGVhbGxvY2F0ZUZ1bmMsIHB0ciwgYWxsb2NhdG9yLT5fY29udGV4dC5pbmZvKTsKZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU1LnBhdGNoIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjZDM0MAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU1LnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK2RpZmYgLWFydU4gYS9DRlJ1bnRpbWUuYyBiL0NGUnVudGltZS5jCistLS0gYS9DRlJ1bnRpbWUuYwkyMDA5LTAyLTE5IDA4OjMyOjU0LjAwMDAwMDAwMCAtMDgwMAorKysrIGIvQ0ZSdW50aW1lLmMJMjAxMS0wOC0xMCAxNjozMjo0NC4wMDAwMDAwMDAgLTA3MDAKK0BAIC03MywxMSArNzMsNiBAQAorIENGX0lOTElORSBzaXplX3QgbWFsbG9jX3NpemUodm9pZCogbWVtYmxvY2spIHsKKyAgICAgcmV0dXJuIF9tc2l6ZShtZW1ibG9jayk7CisgfQorLSNlbGlmIERFUExPWU1FTlRfVEFSR0VUX0xJTlVYCistI2luY2x1ZGUgPG1hbGxvYy5oPgorLUNGX0lOTElORSBzaXplX3QgbWFsbG9jX3NpemUoY29uc3Qgdm9pZCAqbWVtYmxvY2spIHsKKy0gICAgcmV0dXJuIG1hbGxvY191c2FibGVfc2l6ZSgodm9pZCAqKW1lbWJsb2NrKTsKKy19CisgI2VuZGlmCisgCisgZXh0ZXJuIHZvaWQgX19IQUxUKHZvaWQpOworQEAgLTI2NCwxMiArMjU5LDIxIEBACisgICAgIGlmIChOVUxMID09IG1lbW9yeSkgeworIAlyZXR1cm4gTlVMTDsKKyAgICAgfQorLSNpZiBERVBMT1lNRU5UX1RBUkdFVF9XSU5ET1dTIHx8IERFUExPWU1FTlRfVEFSR0VUX0xJTlVYCisrI2lmIERFUExPWU1FTlRfVEFSR0VUX1dJTkRPV1MKKyAgICAgLy8gbWFsbG9jX3NpemUgd29uJ3Qgd29yayBpZiB0aGUgbWVtb3J5IGFkZHJlc3MgaGFzIGJlZW4gbW92ZWQKKyAgICAgLy8gKHN1Y2ggYXMgYSBjdXN0b20gYWxsb2NhdG9yIHRoYXQgYWRkcyBpdHMgb3duIG1ldGFkYXRhCisgICAgIC8vIChlLmcuIHVuZGVyL292ZXJmbG93IGd1YXJkIGRhdGEpLCBzbyBkb24ndCBhdHRlbXB0IHRvIGNhbGwgaXQKKyAgICAgLy8gb24gdGhlIGFsbG9jYXRpb24gcmV0dXJuLgorICAgICBzaXplX3QgbXNpemUgPSAodXNlc1N5c3RlbURlZmF1bHRBbGxvY2F0b3IpID8gbWFsbG9jX3NpemUobWVtb3J5KSA6IHNpemU7CisrI2VsaWYgREVQTE9ZTUVOVF9UQVJHRVRfTElOVVgKKysgICAgLy8gT24gTGludXgsIGFjcm9zcyB2YXJpb3VzIGFyY2hpdGVjdHVyZXMgYW5kIHZlcnNpb25zIG9mIHRoZSBHTlUKKysgICAgLy8gQyBMaWJyYXJ5LCBtYWxsb2NfdXNhYmxlX3NpemUgaGFzIGJlZW4gb2JzZXJ2ZWQgdG8gYXQgdGltZXMgcmV0dXJuCisrICAgIC8vIGluY29ycmVjdCB2YWx1ZXMuIFNpbmNlIHRoZSBpbnRyb3NwZWN0aW9uIHZhbHVlLWFkZCBpdCBwcm92aWRlcyB0bworKyAgICAvLyBDb3JlRm91bmRhdGlvbiBzZWVtcyB0byBiZSBvZiBsaW1pdGVkIHV0aWxpdHksIHdlIGVsaW1pbmF0ZSBpdCBhbmQKKysgICAgLy8gc2ltcHkgdXNlIHRoZSBjYWxsZXItcmVxdWVzdGVkIHNpemUuIEluIGFkZGl0aW9uLCBtZW1zZXR0aW5nIHRoaXMKKysgICAgLy8gc21hbGwgdGFpbCBibG9jayBoYXMgYWxzbyBiZWVuIGZvdW5kIHRvIGNhdXNlIGhlYXAgY29uc2lzdGVuY3kKKysgICAgLy8gcHJvYmxlbXMuCisrICAgIHNpemVfdCBtc2l6ZSA9IHNpemU7CisgI2Vsc2UKKyAgICAgc2l6ZV90IG1zaXplID0gbWFsbG9jX3NpemUobWVtb3J5KTsKKyAjZW5kaWYKK0BAIC0xMDk4LDYgKzExMDAsNyBAQAorIAl1c2VzU3lzdGVtRGVmYXVsdEFsbG9jYXRvciA9IChhbGxvY2F0b3IgPT0ga0NGQWxsb2NhdG9yU3lzdGVtRGVmYXVsdCk7CisgCisgCWlmIChfX0NGWm9tYmllTGV2ZWwgJiAoMSA8PCAwKSkgeworKyNpZiAhREVQTE9ZTUVOVF9UQVJHRVRfTElOVVgKKyAJICAgIHVpbnQ4X3QgKnB0ciA9ICh1aW50OF90ICopY2YgLSAodXNlc1N5c3RlbURlZmF1bHRBbGxvY2F0b3IgPyAwIDogc2l6ZW9mKENGQWxsb2NhdG9yUmVmKSk7CisgCSAgICBzaXplX3Qgc2l6ZSA9IG1hbGxvY19zaXplKHB0cik7CisgCSAgICB1aW50OF90IGJ5dGUgPSAweEZDOworQEAgLTExMDksNiArMTExMiw3IEBACisgCQlieXRlID0gKF9fQ0Zab21iaWVMZXZlbCA+PiA4KSAmIDB4RkY7CisgCSAgICB9CisgCSAgICBtZW1zZXQocHRyLCBieXRlLCBzaXplKTsKKysjZW5kaWYgLyogIURFUExPWU1FTlRfVEFSR0VUX0xJTlVYICovCisgCX0KKyAJaWYgKCEoX19DRlpvbWJpZUxldmVsICYgKDEgPDwgNCkpKSB7CisgCSAgICBDRkFsbG9jYXRvckRlYWxsb2NhdGUoYWxsb2NhdG9yLCAodWludDhfdCAqKWNmIC0gKHVzZXNTeXN0ZW1EZWZhdWx0QWxsb2NhdG9yID8gMCA6IHNpemVvZihDRkFsbG9jYXRvclJlZikpKTsKZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU2LnBhdGNoIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQwM2E2MwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU2LnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK2RpZmYgLWFydU4gYS9DRlNldC5jIGIvQ0ZTZXQuYworLS0tIGEvQ0ZTZXQuYwkyMDA5LTAyLTE5IDA4OjMyOjU0LjAwMDAwMDAwMCAtMDgwMAorKysrIGIvQ0ZTZXQuYwkyMDExLTA5LTA2IDE3OjA1OjI1LjAwMDAwMDAwMCAtMDcwMAorQEAgLTEwODksMTUgKzEwODksMTQgQEAKKyAgICAgaWYgKENGRGljdGlvbmFyeSkgQ0ZfT0JKQ19GVU5DRElTUEFUQ0gyKF9fa0NGSGFzaFR5cGVJRCwgdm9pZCwgaGMsICJfYXBwbHk6Y29udGV4dDoiLCBhcHBsaWVyLCBjb250ZXh0KTsKKyAgICAgaWYgKENGU2V0KSBDRl9PQkpDX0ZVTkNESVNQQVRDSDIoX19rQ0ZIYXNoVHlwZUlELCB2b2lkLCBoYywgIl9hcHBseVZhbHVlczpjb250ZXh0OiIsIGFwcGxpZXIsIGNvbnRleHQpOworICAgICBfX0NGR2VuZXJpY1ZhbGlkYXRlVHlwZShoYywgX19rQ0ZIYXNoVHlwZUlEKTsKKy0gICAgYW55X3QgKmtleXMgPSBoYy0+X2tleXM7CisgICAgIGZvciAoQ0ZJbmRleCBpZHggPSAwLCBuYnVja2V0cyA9IGhjLT5fYnVja2V0c051bTsgaWR4IDwgbmJ1Y2tldHM7IGlkeCsrKSB7CistICAgICAgICBpZiAoX19DRkhhc2hLZXlJc1ZhbHVlKGhjLCBrZXlzW2lkeF0pKSB7CisrICAgICAgICBpZiAoX19DRkhhc2hLZXlJc1ZhbHVlKGhjLCBoYy0+X2tleXNbaWR4XSkpIHsKKyAgICAgICAgICAgICBmb3IgKENGSW5kZXggY250ID0gX19DRkhhc2hHZXRPY2N1cnJlbmNlQ291bnQoaGMsIGlkeCk7IGNudC0tOykgeworICNpZiBDRkRpY3Rpb25hcnkKKy0gICAgICAgICAgICAgICAgSU5WT0tFX0NBTExCQUNLMyhhcHBsaWVyLCAoY29uc3RfYW55X3BvaW50ZXJfdClrZXlzW2lkeF0sIChjb25zdF9hbnlfcG9pbnRlcl90KWhjLT5fdmFsdWVzW2lkeF0sIGNvbnRleHQpOworKyAgICAgICAgICAgICAgICBJTlZPS0VfQ0FMTEJBQ0szKGFwcGxpZXIsIChjb25zdF9hbnlfcG9pbnRlcl90KWhjLT5fa2V5c1tpZHhdLCAoY29uc3RfYW55X3BvaW50ZXJfdCloYy0+X3ZhbHVlc1tpZHhdLCBjb250ZXh0KTsKKyAjZW5kaWYKKyAjaWYgQ0ZTZXQgfHwgQ0ZCYWcKKy0gICAgICAgICAgICAgICAgSU5WT0tFX0NBTExCQUNLMihhcHBsaWVyLCAoY29uc3RfYW55X3BvaW50ZXJfdClrZXlzW2lkeF0sIGNvbnRleHQpOworKyAgICAgICAgICAgICAgICBJTlZPS0VfQ0FMTEJBQ0syKGFwcGxpZXIsIChjb25zdF9hbnlfcG9pbnRlcl90KWhjLT5fa2V5c1tpZHhdLCBjb250ZXh0KTsKKyAjZW5kaWYKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CmRpZmYgLS1naXQgYS9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01Ny5wYXRjaCBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NGY1N2MKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01Ny5wYXRjaApAQCAtMCwwICsxLDMyIEBACitkaWZmIC1hcnVOIGEvQ0ZMb2NhbGUuYyBiL0NGTG9jYWxlLmMKKy0tLSBhL0NGTG9jYWxlLmMJMjAwOS0wMi0yMiAyMTo1NjowMC4wMDAwMDAwMDAgLTA4MDAKKysrKyBiL0NGTG9jYWxlLmMJMjAxMi0wNC0yMCAxMjoxNDowNy4wNjE2MDUxMDMgLTA3MDAKK0BAIC0yMjMsNiArMjIzLDE5IEBACisgICAgIFdpbmRvd3NMb2NhbGVzID0gQ0ZBcnJheUNyZWF0ZShrQ0ZBbGxvY2F0b3JTeXN0ZW1EZWZhdWx0LCAoY29uc3Qgdm9pZCoqKXNfV2luZG93c0luc3RhbGxlZExvY2FsZXMsIHNfbnVtX2luc3RhbGxlZF9sb2NhbGVzSSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7CisgICAgIHJldHVybiAoV2luZG93c0xvY2FsZXMpOworIH0KKysjZWxpZiBERVBMT1lNRU5UX1RBUkdFVF9MSU5VWAorK3N0YXRpYyBDRlN0cmluZ1JlZiBfX0NGTG9jYWxlQ29weVBPU0lYTG9jYWxlTmFtZSh2b2lkKQorK3sKKysgICAgY29uc3QgY2hhciAqcCA9IE5VTEw7CisrICAgIENGU3RyaW5nUmVmIGlkZW50aWZpZXIgPSBOVUxMOworKworKyAgICBwID0gZ2V0ZW52KCJMQ19BTEwiKTsKKysKKysgICAgaWYgKE5VTEwgPT0gcCkgcCA9IGdldGVudigiTEFORyIpOworKyAgICBpZiAoTlVMTCAhPSBwKSBpZGVudGlmaWVyID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwLCBrQ0ZTdHJpbmdFbmNvZGluZ0FTQ0lJKTsKKysKKysgICAgcmV0dXJuIChpZGVudGlmaWVyKTsKKyt9CisgI2VuZGlmIC8vIERFUExPWU1FTlRfVEFSR0VUX1dJTkRPV1MKKyAKKyBzdGF0aWMgQm9vbGVhbiBfX0NGTG9jYWxlRXF1YWwoQ0ZUeXBlUmVmIGNmMSwgQ0ZUeXBlUmVmIGNmMikgeworQEAgLTMzNSw2ICszNDgsOCBAQAorIAorICNpZmRlZiBERVBMT1lNRU5UX1RBUkdFVF9XSU5ET1dTCisgICAgIGlkZW50aWZpZXIgPSBfX0NGTG9jYWxlV2luZG93c0xDSURUb0lTT0xvY2FsZU5hbWUoTE9DQUxFX1VTRVJfREVGQVVMVCk7CisrI2VsaWYgREVQTE9ZTUVOVF9UQVJHRVRfTElOVVgKKysgICAgaWRlbnRpZmllciA9IF9fQ0ZMb2NhbGVDb3B5UE9TSVhMb2NhbGVOYW1lKCk7CisgI2VuZGlmIAorIAorICAgICBzdHJ1Y3QgX19DRkxvY2FsZSAqbG9jYWxlOwpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTgucGF0Y2ggYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01OC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjFmOWNlCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTgucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorZGlmZiAtYXJ1TiBhL0NGWE1MUHJlZmVyZW5jZXNEb21haW4uYyBiL0NGWE1MUHJlZmVyZW5jZXNEb21haW4uYworLS0tIGEvQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5jCTIwMDktMDItMTkgMDg6MzI6NTQuMDAwMDAwMDAwIC0wODAwCisrKysgYi9DRlhNTFByZWZlcmVuY2VzRG9tYWluLmMJMjAxMi0wNC0yNSAxMDozNTo1My4wMDAwMDAwMDAgLTA3MDAKK0BAIC0yMzgsOSArMjM4LDEwIEBACisgfQorIAorIAorLSNpZiBERVBMT1lNRU5UX1RBUkdFVF9NQUNPU1gKKysjaWYgREVQTE9ZTUVOVF9UQVJHRVRfTUFDT1NYIHx8IERFUExPWU1FTlRfVEFSR0VUX0xJTlVYCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN5cy9mY250bC5oPgorIAorIC8qIF9fQ0ZXcml0ZUJ5dGVzVG9GaWxlV2l0aEF0b21pY2l0eSBpcyBhICJzYWZlIHNhdmUiIGZhY2lsaXR5LiBXcml0ZSB0aGUgYnl0ZXMgdXNpbmcgdGhlIHNwZWNpZmllZCBtb2RlIG9uIHRoZSBmaWxlIHRvIHRoZSBwcm92aWRlZCBVUkwuIElmIHRoZSBhdG9taWMgZmxhZyBpcyB0cnVlLCB0cnkgdG8gZG8gaXQgaW4gYSBmYXNoaW9uIHRoYXQgd2lsbCBlbmFibGUgYSBzYWZlIHNhdmUuCisgICovCisgc3RhdGljIEJvb2xlYW4gX19DRldyaXRlQnl0ZXNUb0ZpbGVXaXRoQXRvbWljaXR5KENGVVJMUmVmIHVybCwgY29uc3Qgdm9pZCAqYnl0ZXMsIGludCBsZW5ndGgsIFNJbnQzMiBtb2RlLCBCb29sZWFuIGF0b21pYykgeworQEAgLTI2NCw2ICsyNjksNiBAQAorICAgICBpZiAoYXRvbWljKSB7CisgICAgICAgICBDRlVSTFJlZiBkaXIgPSBDRlVSTENyZWF0ZUNvcHlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50KGtDRkFsbG9jYXRvclN5c3RlbURlZmF1bHQsIHVybCk7CistICAgICAgICBDRlVSTFJlZiB0ZW1wRmlsZSA9IENGVVJMQ3JlYXRlQ29weUFwcGVuZGluZ1BhdGhDb21wb25lbnQoa0NGQWxsb2NhdG9yU3lzdGVtRGVmYXVsdCwgZGlyLCBDRlNUUigiY2YjWFhYWFgiKSwgZmFsc2UpOworKyAgICAgICAgQ0ZVUkxSZWYgdGVtcEZpbGUgPSBDRlVSTENyZWF0ZUNvcHlBcHBlbmRpbmdQYXRoQ29tcG9uZW50KGtDRkFsbG9jYXRvclN5c3RlbURlZmF1bHQsIGRpciwgQ0ZTVFIoImNmI1hYWFhYWCIpLCBmYWxzZSk7CisgICAgICAgICBDRlJlbGVhc2UoZGlyKTsKKyAgICAgICAgIGlmICghQ0ZVUkxHZXRGaWxlU3lzdGVtUmVwcmVzZW50YXRpb24odGVtcEZpbGUsIHRydWUsICh1aW50OF90ICopYXV4UGF0aCwgQ0ZNYXhQYXRoU2l6ZSkpIHsKKyAgICAgICAgICAgICBDRlJlbGVhc2UodGVtcEZpbGUpOworQEAgLTMzOSwxMiArMzQ2LDEyIEBACisgICAgICAgICBDRlJlbGVhc2UoYmluU3RyZWFtKTsKKyAgICAgICAgIGlmIChkYXRhKSB7CisgICAgICAgICAgICAgU0ludDMyIG1vZGU7CistI2lmIERFUExPWU1FTlRfVEFSR0VUX01BQ09TWAorKyNpZiBERVBMT1lNRU5UX1RBUkdFVF9NQUNPU1ggfHwgREVQTE9ZTUVOVF9UQVJHRVRfTElOVVgKKyAgICAgICAgICAgICBtb2RlID0gaXNXb3JsZFJlYWRhYmxlID8gU19JUlVTUnxTX0lXVVNSfFNfSVJHUlB8U19JUk9USCA6IFNfSVJVU1J8U19JV1VTUjsKKyAjZWxzZQorIAkgICAgbW9kZSA9IDA2NjY7CisgI2VuZGlmCistI2lmIERFUExPWU1FTlRfVEFSR0VUX01BQ09TWAorKyNpZiBERVBMT1lNRU5UX1RBUkdFVF9NQUNPU1ggfHwgREVQTE9ZTUVOVF9UQVJHRVRfTElOVVgKKyAgICAgICAgICAgICB7CS8vIFRyeSBxdWljayBhdG9taWMgd2F5IGZpcnN0LCB0aGVuIGZhbGxiYWNrIHRvIHNsb3dlciB3YXlzIGFuZCBlcnJvciBjYXNlcworICAgICAgICAgICAgICAgICBDRlN0cmluZ1JlZiBzY2hlbWUgPSBDRlVSTENvcHlTY2hlbWUodXJsKTsKKyAgICAgICAgICAgICAgICAgaWYgKCFzY2hlbWUpIHsKZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU5LnBhdGNoIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M3Mzg3NwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU5LnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK2RpZmYgLWFydU4gYS9DRlhNTFByZWZlcmVuY2VzRG9tYWluLmMgYi9DRlhNTFByZWZlcmVuY2VzRG9tYWluLmMKKy0tLSBhL0NGWE1MUHJlZmVyZW5jZXNEb21haW4uYwkyMDA5LTAyLTE5IDA4OjMyOjU0LjAwMDAwMDAwMCAtMDgwMAorKysrIGIvQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5jCTIwMTItMDQtMjUgMTA6MzU6NTMuMDAwMDAwMDAwIC0wNzAwCitAQCAtMjM5LDkgKzIzOSwxMyBAQAorIAorIAorICNpZiBERVBMT1lNRU5UX1RBUkdFVF9NQUNPU1ggfHwgREVQTE9ZTUVOVF9UQVJHRVRfTElOVVgKKysjaW5jbHVkZSA8Z3JwLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN5cy9mY250bC5oPgorIAorKyNkZWZpbmUgX19rQ0ZBZG1pbkdyb3VwTmFtZSAgICAgICAiYWRtaW4iCisrI2RlZmluZSBfX2tDRkFkbWluRmFsbGJhY2tHcm91cElEIDgwCisrCisgLyogX19DRldyaXRlQnl0ZXNUb0ZpbGVXaXRoQXRvbWljaXR5IGlzIGEgInNhZmUgc2F2ZSIgZmFjaWxpdHkuIFdyaXRlIHRoZSBieXRlcyB1c2luZyB0aGUgc3BlY2lmaWVkIG1vZGUgb24gdGhlIGZpbGUgdG8gdGhlIHByb3ZpZGVkIFVSTC4gSWYgdGhlIGF0b21pYyBmbGFnIGlzIHRydWUsIHRyeSB0byBkbyBpdCBpbiBhIGZhc2hpb24gdGhhdCB3aWxsIGVuYWJsZSBhIHNhZmUgc2F2ZS4KKyAgKi8KKyBzdGF0aWMgQm9vbGVhbiBfX0NGV3JpdGVCeXRlc1RvRmlsZVdpdGhBdG9taWNpdHkoQ0ZVUkxSZWYgdXJsLCBjb25zdCB2b2lkICpieXRlcywgaW50IGxlbmd0aCwgU0ludDMyIG1vZGUsIEJvb2xlYW4gYXRvbWljKSB7CitAQCAtMjY1LDggKzI3MCwxMCBAQAorICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICBtb2RlID0gMDY2NDsKKyAgICAgICAgICAgICBpZiAod3JpdGluZ0ZpbGVBc1Jvb3QgJiYgKDAgPT0gc3RybmNtcChjcGF0aCwgIi9MaWJyYXJ5L1ByZWZlcmVuY2VzIiwgMjApKSkgeworKyAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZ3JvdXAgKmdyZW50OworICAgICAgICAgICAgICAgICBvd25lciA9IGdldGV1aWQoKTsKKy0gICAgICAgICAgICAgICAgZ3JvdXAgPSA4MDsKKysgICAgICAgICAgICAgICAgZ3JlbnQgPSBnZXRncm5hbShfX2tDRkFkbWluR3JvdXBOYW1lKTsKKysgICAgICAgICAgICAgICAgZ3JvdXAgPSBncmVudCA/IGdyZW50LT5ncl9naWQgOiBfX2tDRkFkbWluRmFsbGJhY2tHcm91cElEOworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgfQpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjAucGF0Y2ggYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS02MC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjAxYWY0Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjAucGF0Y2gKQEAgLTAsMCArMSw5MyBAQAorZGlmZiAtYXJ1TiBhL0NGVW5pQ2hhci5jIGIvQ0ZVbmlDaGFyLmMKKy0tLSBhL0NGVW5pQ2hhci5jCTIwMDktMDItMTkgMTY6MjU6MDYuMDAwMDAwMDAwIC0wODAwCisrKysgYi9DRlVuaUNoYXIuYwkyMDE2LTA2LTAzIDE2OjQ1OjQ2LjcwNzA4MDQ5NiAtMDcwMAorQEAgLTY3LDcgKzY3LDcgQEAKKyAjaWYgREVQTE9ZTUVOVF9UQVJHRVRfTUFDT1NYCisgI2RlZmluZSBfX2tDRkNoYXJhY3RlclNldERpciAiL1N5c3RlbS9MaWJyYXJ5L0NvcmVTZXJ2aWNlcyIKKyAjZWxpZiBERVBMT1lNRU5UX1RBUkdFVF9MSU5VWCB8fCBERVBMT1lNRU5UX1RBUkdFVF9GUkVFQlNECistI2RlZmluZSBfX2tDRkNoYXJhY3RlclNldERpciAiL3Vzci9sb2NhbC9zaGFyZS9Db3JlRm91bmRhdGlvbiIKKysjZGVmaW5lIF9fa0NGQ2hhcmFjdGVyU2V0RGlyIF9fa0NGRGF0YURpciAiL0NvcmVGb3VuZGF0aW9uIgorICNlbGlmIERFUExPWU1FTlRfVEFSR0VUX1dJTkRPV1MKKyAjZGVmaW5lIF9fa0NGQ2hhcmFjdGVyU2V0RGlyICJcXFdpbmRvd3NcXENvcmVGb3VuZGF0aW9uIgorICNkZWZpbmUgTUFYUEFUSExFTiBNQVhfUEFUSAorQEAgLTEyOSw2ICsxMjksMjYgQEAKKyAgICAgc3RybGNweShjcGF0aCwgX0NGRExMUGF0aCgpLCBNQVhQQVRITEVOKTsKKyAjZWxzZQorICAgICBzdHJsY3B5KGNwYXRoLCBfX2tDRkNoYXJhY3RlclNldERpciwgTUFYUEFUSExFTik7CisrICAgIC8vIEZvciBub24tYWJzb2x1dGUgcGF0aHMsIHByZWZpeCB0aGVtIHdpdGggdGhlIHBhdGggdG8gdGhpcyBleGVjdXRhYmxlCisrICAgIGlmICgqY3BhdGggIT0gJy8nKSB7CisrICAgICAgICBpbnQgbGVuOworKyAgICAgICAgY2hhciAqbGFzdHNsYXNoOworKworKyAgICAgICAgbGVuID0gcmVhZGxpbmsoIi9wcm9jL3NlbGYvZXhlIiwgY3BhdGgsIE1BWFBBVEhMRU4pOworKyAgICAgICAgaWYgKGxlbiA8IDApIHsKKysgICAgICAgICAgICBjcGF0aFswXSA9ICdcMCc7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIGNwYXRoW2xlbl0gPSAnXDAnOworKyAgICAgICAgfQorKworKyAgICAgICAgLy8gV291bGQgaGF2ZSB1c2VkIGRpcm5hbWUoKSwgYnV0IGl0IHdhcyBiZWhhdmluZyBiYWRseSwgYW5kIHRoaXMgd29ya3MgaW4gcGxhY2UKKysgICAgICAgIGxhc3RzbGFzaCA9IHN0cnJjaHIoY3BhdGgsICcvJyk7CisrICAgICAgICBpZiAobGFzdHNsYXNoICE9IE5VTEwpIHsKKysgICAgICAgICAgICAqKGxhc3RzbGFzaCArIDEpID0gJ1wwJzsKKysgICAgICAgIH0KKysKKysgICAgICAgIHN0cmxjYXQoY3BhdGgsIF9fa0NGQ2hhcmFjdGVyU2V0RGlyLCBNQVhQQVRITEVOKTsKKysgICAgfQorICNlbmRpZgorIAorICNpZiBERVBMT1lNRU5UX1RBUkdFVF9XSU5ET1dTIHx8IDAKK2RpZmYgLWFydU4gYS9jb25maWd1cmUgYi9jb25maWd1cmUKKy0tLSBhL2NvbmZpZ3VyZQkyMDE2LTA2LTAzIDE2OjQzOjUyLjY1MTM4NzUyOCAtMDcwMAorKysrIGIvY29uZmlndXJlCTIwMTYtMDYtMDMgMTY6NDQ6MTkuODc1MzE0MjgxIC0wNzAwCitAQCAtMTMwNSw3ICsxMzA1LDcgQEAKKyAKKyAjIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZXMuCisgZm9yIGFjX3ZhciBpbglleGVjX3ByZWZpeCBwcmVmaXggYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhcm9vdGRpciBcCistCQlkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBpbmNsdWRlZGlyIFwKKysJCXN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBpbmNsdWRlZGlyIFwKKyAJCW9sZGluY2x1ZGVkaXIgZG9jZGlyIGluZm9kaXIgaHRtbGRpciBkdmlkaXIgcGRmZGlyIHBzZGlyIFwKKyAJCWxpYmRpciBsb2NhbGVkaXIgbWFuZGlyCisgZG8KK2RpZmYgLWFydU4gYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCistLS0gYS9NYWtlZmlsZS5hbQkyMDA5LTAzLTEwIDE2OjMxOjIxLjAwMDAwMDAwMCAtMDcwMAorKysrIGIvTWFrZWZpbGUuYW0JMjAxNi0wNi0wMyAxNjo0NDoxOS44NzkzMTQyNzAgLTA3MDAKK0BAIC0yNSw3ICsyNSw3IEBACisgIyBVbmljb2RlIGNoYXJhY3RlciBtYXBwaW5ncy4KKyAjCisgCistbGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YWRpcgk9ICR7ZGF0YWRpcn0vQ29yZVNlcnZpY2VzCisrbGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YWRpcgk9ICR7ZGF0YWRpcn0vQ29yZUZvdW5kYXRpb24vQ2hhcmFjdGVyU2V0cworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2xhX2RhdGFfREFUQQk9IENGQ2hhcmFjdGVyU2V0Qml0bWFwcy5iaXRtYXAJCVwKKyAJCQkJICBDRlVuaUNoYXJQcm9wZXJ0eURhdGFiYXNlLmRhdGEJXAorQEAgLTM1LDcgKzM1LDcgQEAKKyBDRl9DT01NT05fQ1BQRkxBR1MJCT0gJChBTV9DUFBGTEFHUykJCQlcCisgCQkJCSAgLURVX1NIT1dfRFJBRlRfQVBJPTEJCQlcCisgCQkJCSAgLURDRl9CVUlMRElOR19DRj0xCQkJXAorLQkJCQkgIC1EX19rQ0ZDaGFyYWN0ZXJTZXREaXI9XCIke2xpYkNvcmVGb3VuZGF0aW9uX2xhX2RhdGFkaXJ9XCIgXAorKwkJCQkgIC1EX19rQ0ZEYXRhRGlyPVwiJHtkYXRhZGlyfVwiIFwKKyAJCQkJICAtRE1BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQ9TUFDX09TX1hfVkVSU0lPTl8xMF81CVwKKyAJCQkJICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQkJXAorIAkJCQkgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlL21hY2hfc3VwcG9ydAorZGlmZiAtYXJ1TiBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KKy0tLSBhL01ha2VmaWxlLmluCTIwMDktMDMtMTAgMjM6NDQ6MzYuMDAwMDAwMDAwIC0wNzAwCisrKysgYi9NYWtlZmlsZS5pbgkyMDE2LTA2LTAzIDE2OjQ0OjE5Ljg3OTMxNDI3MCAtMDcwMAorQEAgLTUzNSw3ICs1MzUsNyBAQAorICMgRGVmaW5lIHdoZXJlIHdlIHdpbGwgaW5zdGFsbCBhbmQgd2hlcmUgQ29yZUZvdW5kYXRpb24gY2FuIGZpbmQgaXRzCisgIyBVbmljb2RlIGNoYXJhY3RlciBtYXBwaW5ncy4KKyAjCistbGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YWRpciA9ICR7ZGF0YWRpcn0vQ29yZVNlcnZpY2VzCisrbGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YWRpciA9ICR7ZGF0YWRpcn0vQ29yZUZvdW5kYXRpb24vQ2hhcmFjdGVyU2V0cworIGxpYkNvcmVGb3VuZGF0aW9uX2xhX2RhdGFfREFUQSA9IENGQ2hhcmFjdGVyU2V0Qml0bWFwcy5iaXRtYXAJCVwKKyAJCQkJICBDRlVuaUNoYXJQcm9wZXJ0eURhdGFiYXNlLmRhdGEJXAorIAkJCQkgIENGVW5pY29kZURhdGEtQi5tYXBwaW5nCQlcCitAQCAtNTQ0LDcgKzU0NCw3IEBACisgQ0ZfQ09NTU9OX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykJCQlcCisgCQkJCSAgLURVX1NIT1dfRFJBRlRfQVBJPTEJCQlcCisgCQkJCSAgLURDRl9CVUlMRElOR19DRj0xCQkJXAorLQkJCQkgIC1EX19rQ0ZDaGFyYWN0ZXJTZXREaXI9XCIke2xpYkNvcmVGb3VuZGF0aW9uX2xhX2RhdGFkaXJ9XCIgXAorKwkJCQkgIC1EX19rQ0ZEYXRhRGlyPVwiJHtkYXRhZGlyfVwiIFwKKyAJCQkJICAtRE1BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQ9TUFDX09TX1hfVkVSU0lPTl8xMF81CVwKKyAJCQkJICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQkJXAorIAkJCQkgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlL21hY2hfc3VwcG9ydApkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjEucGF0Y2ggYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS02MS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzI0YzM0Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjEucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtYXJ1TiBhL0NGVW5pQ2hhci5jIGIvQ0ZVbmlDaGFyLmMKKy0tLSBhL0NGVW5pQ2hhci5jCTIwMDktMDItMTkgMTY6MjU6MDYuMDAwMDAwMDAwIC0wODAwCisrKysgYi9DRlVuaUNoYXIuYwkyMDEyLTA0LTI1IDIyOjU4OjM4Ljk2ODAwNTYzNyAtMDcwMAorQEAgLTU3NCwxOCArNTc2LDEwIEBACisgCisgc3RhdGljIENGU3BpbkxvY2tfdCBfX0NGVW5pQ2hhck1hcHBpbmdUYWJsZUxvY2sgPSBDRlNwaW5Mb2NrSW5pdDsKKyAKKy0jaWYgX19DRl9CSUdfRU5ESUFOX18KKyAjaWYgVVNFX01BQ0hPX1NFR01FTlQKKyAjZGVmaW5lIE1BUFBJTkdfVEFCTEVfRklMRSAiX19kYXRhIgorICNlbHNlCistI2RlZmluZSBNQVBQSU5HX1RBQkxFX0ZJTEUgIkNGVW5pY29kZURhdGEtQi5tYXBwaW5nIgorLSNlbmRpZgorLSNlbHNlCistI2lmIFVTRV9NQUNIT19TRUdNRU5UCistI2RlZmluZSBNQVBQSU5HX1RBQkxFX0ZJTEUgIl9fZGF0YSIKKy0jZWxzZQorLSNkZWZpbmUgTUFQUElOR19UQUJMRV9GSUxFICJDRlVuaWNvZGVEYXRhLUwubWFwcGluZyIKKy0jZW5kaWYKKysjZGVmaW5lIE1BUFBJTkdfVEFCTEVfRklMRSAiQ0ZVbmljb2RlRGF0YS5tYXBwaW5nIgorICNlbmRpZgorIAorIF9fcHJpdmF0ZV9leHRlcm5fXyBjb25zdCB2b2lkICpDRlVuaUNoYXJHZXRNYXBwaW5nRGF0YSh1aW50MzJfdCB0eXBlKSB7CitkaWZmIC1hcnVOIGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjIucGF0Y2ggYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS02Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNThmNzdhCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjIucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorZGlmZiAtYXJ1TiBhL0NGVW5pQ2hhci5jIGIvQ0ZVbmlDaGFyLmMKKy0tLSBhL0NGVW5pQ2hhci5jCTIwMDktMDItMTkgMTY6MjU6MDYuMDAwMDAwMDAwIC0wODAwCisrKysgYi9DRlVuaUNoYXIuYwkyMDEyLTA0LTI1IDIyOjU4OjM4Ljk2ODAwNTYzNyAtMDcwMAorQEAgLTIyMSwxMCArMjIxLDEyIEBACisgCisgICAgIGludCBub19oYW5nX2ZkID0gb3BlbigiL2Rldi9hdXRvZnNfbm93YWl0IiwgMCk7CisgICAgIGlmICgoZmQgPSBvcGVuKGZpbGVOYW1lLCBPX1JET05MWSwgMCkpIDwgMCkgeworKyAgICBDRkxvZyhfX2tDRkxvZ0Fzc2VydGlvbiwgQ0ZTVFIoIiVzKCk6IGNvdWxkIG5vdCBvcGVuICVzIGZvciByZWFkLW9ubHkgYWNjZXNzLiIpLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBmaWxlTmFtZSk7CisgCWNsb3NlKG5vX2hhbmdfZmQpOworIAlyZXR1cm4gZmFsc2U7CisgICAgIH0KKyAgICAgaWYgKGZzdGF0KGZkLCAmc3RhdEJ1ZikgPCAwIHx8ICgqYnl0ZXMgPSBtbWFwKDAsIHN0YXRCdWYuc3Rfc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApKSA9PSAodm9pZCAqKS0xKSB7CisrICAgICAgICBDRkxvZyhfX2tDRkxvZ0Fzc2VydGlvbiwgQ0ZTVFIoIiVzKCk6IGNvdWxkIG5vdCBtYXAgJXMgZm9yIHJlYWQtb25seSBhY2Nlc3MuIiksIF9fUFJFVFRZX0ZVTkNUSU9OX18sIGZpbGVOYW1lKTsKKyAgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgfQpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS50YXIuZ3ogYi9vcGVuY2ZsaXRlLnRhci5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmY0ZmQwCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS50YXIuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS51cmwgYi9vcGVuY2ZsaXRlLnVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGE0OWRjCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS51cmwKQEAgLTAsMCArMSBAQAoraHR0cDovL2Rvd25sb2FkLnNvdXJjZWZvcmdlLm5ldC9vcGVuY2ZsaXRlL29wZW5jZmxpdGUtNDc2LjE3LjIudGFyLmd6CmRpZmYgLS1naXQgYS9vcGVuY2ZsaXRlLnZlcnNpb24gYi9vcGVuY2ZsaXRlLnZlcnNpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I2MDE3OAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUudmVyc2lvbgpAQCAtMCwwICsxIEBACis0NzYuMTcuMgo=