ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCA4MWZjMDcyLi4xYjM2YjQxIDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0yLDExICsyLDMyIEBACiBDaGFuZ2VzIHNpbmNlIFUtQm9vdCAwLjIuMjoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorKiBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDEyIE1hciAyMDAzOgorICAtIDE2LzMyIE1CIGFuZCA1MC84MCBNSHogc3VwcG9ydCB3aXRoIGF1dG8tZGV0ZWN0aW9uIGZvciBJUDg2MAorICAtIEVUSDA1IGFuZCBCRURCVUcgc3VwcG9ydCBmb3IgQ1U4MjQKKyAgLSBhZGRlZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBDUEM0NQorICAtIG5ldyBCT09UUk9NL0ZMQVNIMCBhbmQgRE9DIGJhc2UgZm9yIFBNODI2CisKKyogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxMiBNYXIgMjAwMzoKKyAgRml4IHRoZSBjaHBhcnQgY29tbWFuZCBvbiBpbm5va29tIGJvYXJkCisKKyogTmFtZSBjbGVhbnVwOgorICBtdiBpbmNsdWRlL2FzbS1pMzg2L3BwY2Jvb3QtaTM4Ni5oIGluY2x1ZGUvYXNtLWkzODYvdS1ib290LWkzODYuaAorICBzL1BQQ0Jvb3QvVS1Cb290LyBpbiBzb21lIGZpbGVzCisgIHMvcEltYWdlL3VJbWFnZS8gIGluIHNvbWUgZmlsZXMKKworKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxNSBKYW4gMjAwMzoKKyAgRml4ICcnIGNvbW1hbmQgbGluZSBxdW90aW5nCisKKyogUGF0Y2ggYnkgVGhlIExFT1ggdGVhbSwgMTkgSmFuIDIwMDM6CisgIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBFTFBUODYwIGJvYXJkCisgIC0gYWRkIHN1cHBvcnQgZm9yIERhbGxhcyBkczE2NHggUlRDCisKICogUGF0Y2hlcyBieSBEYXZpZCBN/GxsZXIsIDMxIEphbiAyMDAzOgogICAtIG1pbmltYWwgc2V0dXAgZm9yIENhcmRCdXMgYnJpZGdlcwogICAtIGFkZCBFRVBST00gcmVhZC93cml0ZSBzdXBwb3J0IGluIHRoZSBDUzg5MDAgZHJpdmVyCiAgIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBidWlsdGluIEkyQyBjb250cm9sbGVyIGluIHRoZSBTYW1zdW5nIHMzYzI0eDAgY2hpcHMKLSAgLSBhZGQgc3VwcG9ydCBmb3IgIE1QTCdzIFZDTUE5IChTYW1zdW5nIHMzYzI0MTAgYmFzZWQpIGJvYXJkCisgIC0gYWRkIHN1cHBvcnQgZm9yIE1QTCdzIFZDTUE5IChTYW1zdW5nIHMzYzI0MTAgYmFzZWQpIGJvYXJkCiAKICogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDQgRmViIDIwMDM6CiAgIGFkZCBzdXBwb3J0IGZvciBSVEMgRFMxMzA3CmRpZmYgLS1naXQgYS9DUkVESVRTIGIvQ1JFRElUUwppbmRleCA3N2U2MDllLi45NzYwNDRiIDEwMDY0NAotLS0gYS9DUkVESVRTCisrKyBiL0NSRURJVFMKQEAgLTE2Niw2ICsxNjYsMTEgQEAKIEU6IHRob21hc0Bjb3JlbGF0dXMuY29tCiBEOiBTdXBwb3J0IGZvciBHVEggYm9hcmQ7IGxvdHMgb2YgUENNQ0lBIGZpeGVzCiAKK046IFRoZSBMRU9YIHRlYW0KK0U6IHRlYW1AbGVveC5vcmcKK0Q6IFN1cHBvcnQgZm9yIExFT1ggYm9hcmRzLCBEUzE2NHggUlRDCitXOiBodHRwOi8vd3d3Lmxlb3gub3JnCisKIE46IFJheW1vbmQgTG8KIEU6IGxvQHJvdXRlZnJlZS5jb20KIEQ6IFN1cHBvcnQgZm9yIERPUyBwYXJ0aXRpb25zCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGE2NzNjZGMuLjI5MmEyOTAgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xMzcsNiArMTM3LDEwIEBACiAKIAlHVEgJCQlNUEM4NjAKIAorVGhlIExFT1ggdGVhbSA8dGVhbUBsZW94Lm9yZz4KKworCUVMUFQ4NjAJCQlNUEM4NjBUCisKIEVyYW4gTWFuIDxlcmFuQG5iYXNlLmNvLmlsPgogCiAJRVZCNjQyNjBfNzUwQ1gJCU1QQzc1MENYCmRpZmYgLS1naXQgYS9NQUtFQUxMIGIvTUFLRUFMTAppbmRleCA0NWU0NGU3Li4zN2Q2YzczIDEwMDY0NAotLS0gYS9NQUtFQUxMCisrKyBiL01BS0VBTEwKQEAgLTE2LDE4ICsxNiwxOCBAQAogCiBMSVNUXzh4eD0iCVwKIAlBRFM4NjAJCUFNWDg2MAkJYzJtb24JCUNDTQkJXAotCWNvZ2VudF9tcGM4eHgJRVNURUVNMTkyRQlFVFgwOTQJCUZBRFM4MjMJCVwKLQlGQURTODUwU0FSCUZBRFM4NjBUCUZMQUdBRE0JCUZQUzg1MEwJCVwKLQlHRU44NjBUCQlHRU5JRVRWCQlHVEgJCWhlcm1lcwkJXAotCUlBRDIxMAkJSUNVODYyXzEwME1IeglJUDg2MAkJSVZNTDI0CQlcCi0JSVZNTDI0XzEyOAlJVk1MMjRfMjU2CUlWTVM4CQlJVk1TOF8xMjgJXAotCUlWTVM4XzI1NglLVVA0SyAgICAgICAgICAgTEFOVEVDCSAgICAgICAgbHdtb24gICAJXAotCU1CWAkJTUJYODYwVAkJTUhQQwkJTVZTMQkJXAotCU5FVFZJQQkJTlg4MjMJCXBjdV9lCQlSMzYwTVBJCQlcCi0JUlBYQ2xhc3NpYwlSUFhsaXRlCQlSUnZpc2lvbglTTTg1MAkJXAotCVNQRDgyM1RTCVNYTkk4NTVUCVRPUDg2MAkJVFFNODIzTAkJXAotCVRRTTgyM0xfTENECVRRTTg1MEwJCVRRTTg1NUwJCVRRTTg2MEwJCVwKLQlUUU04NjBMX0ZFQwlUVFRlY2gJCXYzNwkJCQlcCisJY29nZW50X21wYzh4eAlFU1RFRU0xOTJFCUVUWDA5NAkJRUxQVDg2MAkJXAorCUZBRFM4MjMJCUZBRFM4NTBTQVIJRkFEUzg2MFQJRkxBR0FETQkJXAorCUZQUzg1MEwJCUdFTjg2MFQJCUdFTklFVFYJCUdUSAkJXAorCWhlcm1lcwkJSUFEMjEwCQlJQ1U4NjJfMTAwTUh6CUlQODYwCQlcCisJSVZNTDI0CQlJVk1MMjRfMTI4CUlWTUwyNF8yNTYJSVZNUzgJCVwKKwlJVk1TOF8xMjgJSVZNUzhfMjU2CUtVUDRLICAgICAgICAgICBMQU5URUMJICAgICAgICBcCisJbHdtb24gICAJTUJYCQlNQlg4NjBUCQlNSFBDCQlcCisJTVZTMQkJTkVUVklBCQlOWDgyMwkJcGN1X2UJCVwKKwlSMzYwTVBJCQlSUFhDbGFzc2ljCVJQWGxpdGUJCVJSdmlzaW9uCVwKKwlTTTg1MAkJU1BEODIzVFMJU1hOSTg1NVQJVE9QODYwCQlcCisJVFFNODIzTAkJVFFNODIzTF9MQ0QJVFFNODUwTAkJVFFNODU1TAkJXAorCVRRTTg2MEwJCVRRTTg2MExfRkVDCVRUVGVjaAkJdjM3CQlcCiAiCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTQ4LDkgKzQ4LDkgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogTElTVF84MjR4PSIJXAotCUJNVwkJQ1U4MjQJCU1PVVNTRQkJTVVTRU5LSQkJXAotCU9YQwkJUE42MgkJU2FuZHBvaW50ODI0MAlTYW5kcG9pbnQ4MjQ1CVwKLQl1dHg4MjQ1CQkJCQkJCQlcCisJQk1XCQlDUEM0NQkJQ1U4MjQJCU1PVVNTRQkJXAorCU1VU0VOS0kJCU9YQwkJUE42MgkJU2FuZHBvaW50ODI0MAlcCisJU2FuZHBvaW50ODI0NQl1dHg4MjQ1CQkJCQkJXAogIgogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGU3N2E3NDcuLjZlNmE0NGQgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC01MywyMSArNTMsNiBAQAogaWZlcSAoJChIT1NUQVJDSCkscHBjKQogQ1JPU1NfQ09NUElMRSA9CiBlbHNlCi0jIyAgI2lmZXEgKCQoQ1BVKSxtcGM4eHgpCi0jIyAgQ1JPU1NfQ09NUElMRSA9IHBwY184eHgtCi0jIyAgI2VuZGlmCi0jIyAgI2lmZXEgKCQoQ1BVKSxwcGM0eHgpCi0jIyAgI0NST1NTX0NPTVBJTEUgPSBwcGNfNHh4LQotIyMgICNlbmRpZgotIyMgICNpZmVxICgkKENQVSksbXBjODI0eCkKLSMjICAjQ1JPU1NfQ09NUElMRSA9IHBwY184Mnh4LQotIyMgICNlbmRpZgotIyMgICNpZmVxICgkKENQVSksbXBjODI2MCkKLSMjICAjQ1JPU1NfQ09NUElMRSA9IHBwY184Mnh4LQotIyMgICNlbmRpZgotIyMgICNpZmVxICgkKENQVSksNzR4eF83eHgpCi0jIyAgI0NST1NTX0NPTVBJTEUgPSBwcGNfNzR4eC0pCi0jIyAgI2VuZGlmCiBpZmVxICgkKEFSQ0gpLHBwYykKIENST1NTX0NPTVBJTEUgPSBwcGNfOHh4LQogZW5kaWYKQEAgLTIwMiw2ICsxODcsOSBAQAogY29nZW50X21wYzh4eF9jb25maWc6CXVuY29uZmlnCiAJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IGNvZ2VudAogCitFTFBUODYwX2NvbmZpZzoJCXVuY29uZmlnCisJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IGVscHQ4NjAgTEVPWAorCiBFU1RFRU0xOTJFX2NvbmZpZzoJdW5jb25maWcKIAlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggZXN0ZWVtMTkyZQogCkBAIC00NTcsOSArNDQ1LDI0IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBNUEM4MjR4IFN5c3RlbXMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3h0cmFjdF84Mnh4ID0gJChzdWJzdCBfUk9NQk9PVCwsJChzdWJzdCBfTDIsLCQoc3Vic3QgXzI2Nk1IeiwsJChzdWJzdCBfMzAwTUh6LCwkKHN1YnN0IF9jb25maWcsLCQxKSkpKSkKKwogQk1XX2NvbmZpZzogdW5jb25maWcKIAlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjR4IGJtdwogCitDUEM0NV9jb25maWcJXAorQ1BDNDVfUk9NQk9PVF9jb25maWc6CXVuY29uZmlnCisJQC4vbWtjb25maWcgJChjYWxsIHh0cmFjdF84Mnh4LCRAKSBwcGMgbXBjODI0eCBjcGM0NQorCUBjZCAuL2luY2x1ZGUgOwkJCQlcCisJaWYgWyAiJChmaW5kc3RyaW5nIF9ST01CT09UXywkQCkiIF0gOyB0aGVuIFwKKwkJZWNobyAiQ09ORklHX0JPT1RfUk9NID0geSIgPj4gY29uZmlnLm1rIDsgXAorCQllY2hvICIuLi4gYm9vdGluZyBmcm9tIDgtYml0IGZsYXNoIiA7IFwKKwllbHNlIFwKKwkJZWNobyAiQ09ORklHX0JPT1RfUk9NID0gbiIgPj4gY29uZmlnLm1rIDsgXAorCQllY2hvICIuLi4gYm9vdGluZyBmcm9tIDY0LWJpdCBmbGFzaCIgOyBcCisJZmk7IFwKKwllY2hvICJleHBvcnQgQ09ORklHX0JPT1RfUk9NIiA+PiBjb25maWcubWs7CisKIENVODI0X2NvbmZpZzogdW5jb25maWcKIAlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjR4IGN1ODI0CiAKQEAgLTQ4Nyw3ICs0OTAsNiBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgTVBDODI2MCBTeXN0ZW1zCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi14dHJhY3RfODJ4eCA9ICQoc3Vic3QgX1JPTUJPT1QsLCQoc3Vic3QgX0wyLCwkKHN1YnN0IF8yNjZNSHosLCQoc3Vic3QgXzMwME1IeiwsJChzdWJzdCBfY29uZmlnLCwkMSkpKSkpCiAKIGNvZ2VudF9tcGM4MjYwX2NvbmZpZzoJdW5jb25maWcKIAlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjYwIGNvZ2VudApkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDA1MzlkNDIuLmQ3MGQyYWYgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTE0NSw2ICsxNDUsOCBAQAogLSBjcHUvbXBjODI2MAlGaWxlcyBzcGVjaWZpYyB0byBNb3Rvcm9sYSBNUEM4MjYwIENQVQogLSBjcHUvcHBjNHh4CUZpbGVzIHNwZWNpZmljIHRvIElCTQkgICA0eHgJICAgQ1BVcwogCistIGJvYXJkL0xFT1gvICAgRmlsZXMgc3BlY2lmaWMgdG8gYm9hcmRzIG1hbnVmYWN0dXJlZCBieSBUaGUgTEVPWCB0ZWFtCistIGJvYXJkL0xFT1gvZWxwdDg2MAlGaWxlcyBzcGVjaWZpYyB0byBFTFBUODYwIGJvYXJkcwogLSBib2FyZC9SUFhDbGFzc2ljCiAJCUZpbGVzIHNwZWNpZmljIHRvIFJQWENsYXNzaWMgYm9hcmRzCiAtIGJvYXJkL1JQWGxpdGUJRmlsZXMgc3BlY2lmaWMgdG8gUlBYbGl0ZSAgICBib2FyZHMKQEAgLTMzOCw3ICszNDAsNyBAQAogCQlDT05GSUdfR1RILCAgICAgICAgQ09ORklHX1JQWENsYXNzaWMsIENPTkZJR19yc2Rwcm90bywKIAkJQ09ORklHX0lBRDIxMCwgICAgIENPTkZJR19SUFhsaXRlLCAgICBDT05GSUdfc2JjODI2MCwKIAkJQ09ORklHX0VCT05ZLCAgICAgIENPTkZJR19zYWNzbmcsICAgICBDT05GSUdfRlBTODYwTCwKLQkJQ09ORklHX1YzNworCQlDT05GSUdfVjM3LCAgICAgICAgQ09ORklHX0VMUFQ4NjAKIAogCQlBUk0gYmFzZWQgYm9hcmRzOgogCQktLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjI2LDYgKzYyOCw3IEBACiAJCUNPTkZJR19SVENfTUMxNDY4MTgJLSB1c2UgTUMxNDY4MTggUlRDCiAJCUNPTkZJR19SVENfRFMxMzA3CS0gdXNlIE1heGltLCBJbmMuIERTMTMwNyBSVEMKIAkJQ09ORklHX1JUQ19EUzEzMzcJLSB1c2UgTWF4aW0sIEluYy4gRFMxMzM3IFJUQworCQlDT05GSUdfUlRDX0RTMTY0eAktIHVzZSBEYWxsYXMgRFMxNjR4IFJUQwogCiAtIFRpbWVzdGFtcCBTdXBwb3J0OgogCkBAIC0xNzE2LDYgKzE3MTksNyBAQAogICAgIEZQUzg1MExfY29uZmlnCSAgU2FuZHBvaW50ODI0MF9jb25maWcJc2JjODI2MF9jb25maWcKICAgICBHRU5JRVRWX2NvbmZpZwkgIFRRTTgyM0xfY29uZmlnCVBJUDQwNV9jb25maWcKICAgICBHRU44NjBUX2NvbmZpZwkgIEVCT05ZX2NvbmZpZwkJRlBTODYwTF9jb25maWcKKyAgICBFTFBUODYwX2NvbmZpZwogCiBOb3RlOiBmb3Igc29tZSBib2FyZCBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gbmFtZXMgbWF5IGV4aXN0OyBjaGVjayAgaWYKICAgICAgIGFkZGl0aW9uYWwgIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBib2FyZCB2ZW5kb3I7IGZvcgpkaWZmIC0tZ2l0IGEvYm9hcmQvTEVPWC9lbHB0ODYwL01ha2VmaWxlIGIvYm9hcmQvTEVPWC9lbHB0ODYwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiY2E3NjUKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9MRU9YL2VscHQ4NjAvTWFrZWZpbGUKQEAgLTAsMCArMSw0NyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzCisjIFRoZSBMRU9YIHRlYW0gPHRlYW1AbGVveC5vcmc+LCBodHRwOi8vd3d3Lmxlb3gub3JnCisjCisjIExFT1gub3JnIGlzIGFib3V0IHRoZSBkZXZlbG9wbWVudCBvZiBmcmVlIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSByZXNvdXJjZXMKKyMgICBmb3Igc3lzdGVtIG9uIGNoaXAuCisjCisjIERlc2NyaXB0aW9uOiBVLUJvb3QgcG9ydCBvbiB0aGUgTEVPWCdzIEVMUFQ4NjAgQ1BVIGJvYXJkCisjIH5+fn5+fn5+fn5+CisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9IGxpYiQoQk9BUkQpLmEKKworT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubworCiskKExJQik6CS5kZXBlbmQgJChPQkpTKQorCSQoQVIpIGNydiAkQCAkXgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKKwkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorCitzaW5jbHVkZSAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL0xFT1gvZWxwdDg2MC9SRUFETUUuTEVPWCBiL2JvYXJkL0xFT1gvZWxwdDg2MC9SRUFETUUuTEVPWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWNlOTdiCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvTEVPWC9lbHB0ODYwL1JFQURNRS5MRU9YCkBAIC0wLDAgKzEsNDI0IEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgICAgICAgVS1Cb290IHBvcnQgb24gdGhlIExFT1gncyBFTFBUODYwIENQVSBib2FyZAorICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTEVPWC5vcmcgaXMgYWJvdXQgdGhlIGRldmVsb3BtZW50IG9mIGZyZWUgaGFyZHdhcmUgYW5kIHNvZnR3YXJlIHJlc291cmNlcworICAgICAgICAgZm9yIHN5c3RlbSBvbiBjaGlwLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiwgY29udGFjdCBUaGUgTEVPWCB0ZWFtIDx0ZWFtQGxlb3gub3JnPgorCitSZWZlcmVuY2VzOgorfn5+fn5+fn5+fgorICAgIDEpIEdldCB0aGUgbGFzdCBzdGFibGUgcmVsZWFzZSBmcm9tIGRlbnguZGU6CisgICAgICAgICAgIG8gZnRwOi8vZnRwLmRlbnguZGUvcHViL3UtYm9vdC91LWJvb3QtMC4yLjAudGFyLmJ6MgorICAgIDIpIEdldCB0aGUgY3VycmVudCBDVlMgc25hcHNob3Q6CisgICAgICAgICAgIG8gY3ZzIC1kOnBzZXJ2ZXI6YW5vbnltb3VzQGN2cy51LWJvb3Quc291cmNlZm9yZ2UubmV0Oi9jdnNyb290L3UtYm9vdCBsb2dpbgorICAgICAgICAgICBvIGN2cyAtejYgLWQ6cHNlcnZlcjphbm9ueW1vdXNAY3ZzLnUtYm9vdC5zb3VyY2Vmb3JnZS5uZXQ6L2N2c3Jvb3QvdS1ib290IGNvIC1QIHUtYm9vdAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgRUxQVDg2MCBDUFUgYm9hcmQgaGFzIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6CisKK1Byb2Nlc3NvcjoJLSBNUEM4NjBUIEAgNTBNSHoKKwkJLSBQb3dlclBDIENvcmUKKwkJLSA2NSBNSVBTCisJCS0gQ2FjaGVzOiBELT40S0IsIEktPjRLQgorCQktIENQTTogNCBTQ0NzLCAyIFNNQ3MKKwkJLSBFdGhlcm5ldCAxMC8xMDAKKwkJLSBTUEksIEkyQywgUENNQ0lBLCBQYXJhbGxlbAorCitDUFUgYm9hcmQ6CS0gRFJBTTogICAxNiBNQgorCQktIEZMQVNIOiA1MTIgS0IgKyAoMiAqIDQgTUIpCisJCS0gTlZSQU06IDEyOCBLQgorCQktIDEgU2VyaWFsIGxpbmsKKwkJLSAyIEV0aGVybmV0IDEwIEJhc2VUIENoYW5uZWxzCisKK09uIHBvd2VyLXVwIHRoZSBwcm9jZXNzb3IganVtcHMgdG8gdGhlIGFkZHJlc3Mgb2YgMHgwMjAwMDEwMAorCitUaHVzLCBVLUJvb3QgaXMgY29uZmlndXJlZCB0byByZXNpZGUgaW4gZmxhc2ggc3RhcnRpbmcgYXQgdGhlIGFkZHJlc3Mgb2YKKzB4MDIwMDEwMDAuICBUaGUgZW52aXJvbm1lbnQgc3BhY2UgaXMgbG9jYXRlZCBpbiBOVlJBTSBzZXBhcmF0ZWx5IGZyb20KK1UtQm9vdCwgYXQgdGhlIGFkZHJlc3Mgb2YgMHgwMzAwMDAwMC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICAgICAgICAgICAgICAgICAgVS1Cb290IHRlc3QgcmVzdWx0cworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE9wZXJhdGlvbiBvbiB0aGUgc2VyaWFsIGNvbnNvbGUgKFNNQzEpCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworVS1Cb290IDAuMi4yIChKYW4gMTkgMjAwMyAtIDExOjA4OjM5KQorCitDUFU6ICAgWFBDODYweHhaUG5uQiBhdCA1MCBNSHo6IDQga0IgSS1DYWNoZSA0IGtCIEQtQ2FjaGUgRkVDIHByZXNlbnQKKyAgICAgICAgICoqKiBXYXJuaW5nOiBDUFUgQ29yZSBoYXMgU2lsaWNvbiBCdWdzIC0tIENoZWNrIHRoZSBFcnJhdGEgKioqCitCb2FyZDogIyMjIE5vIEhXIElEIC0gYXNzdW1pbmcgRUxQVDg2MAorRFJBTTogIDE2IE1CCitGTEFTSDogNTEyIGtCCitJbjogICAgc2VyaWFsCitPdXQ6ICAgc2VyaWFsCitFcnI6ICAgc2VyaWFsCitOZXQ6ICAgU0NDIEVUSEVSTkVUCisKK1R5cGUgInJ1biBuZnNib290IiB0byBtb3VudCByb290IGZpbGVzeXN0ZW0gb3ZlciBORlMKKworSGl0IGFueSBrZXkgdG8gc3RvcCBhdXRvYm9vdDogIDAKK0xFT1hfZWxwdDg2MDogaGVscAorYXNrZW52ICAtIGdldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBzdGRpbgorYXV0b3NjciAtIHJ1biBzY3JpcHQgZnJvbSBtZW1vcnkKK2Jhc2UgICAgLSBwcmludCBvciBzZXQgYWRkcmVzcyBvZmZzZXQKK2JkaW5mbyAgLSBwcmludCBCb2FyZCBJbmZvIHN0cnVjdHVyZQorYm9vdG0gICAtIGJvb3QgYXBwbGljYXRpb24gaW1hZ2UgZnJvbSBtZW1vcnkKK2Jvb3RwICAgLSBib290IGltYWdlIHZpYSBuZXR3b3JrIHVzaW5nIEJvb3RQL1RGVFAgcHJvdG9jb2wKK2Jvb3RkICAgLSBib290IGRlZmF1bHQsIGkuZS4sIHJ1biAnYm9vdGNtZCcKK2NtcCAgICAgLSBtZW1vcnkgY29tcGFyZQorY29uaW5mbyAtIHByaW50IGNvbnNvbGUgZGV2aWNlcyBhbmQgaW5mb3JtYXRpb25zCitjcCAgICAgIC0gbWVtb3J5IGNvcHkKK2NyYzMyICAgLSBjaGVja3N1bSBjYWxjdWxhdGlvbgorZWNobyAgICAtIGVjaG8gYXJncyB0byBjb25zb2xlCitlcmFzZSAgIC0gZXJhc2UgRkxBU0ggbWVtb3J5CitmbGluZm8gIC0gcHJpbnQgRkxBU0ggbWVtb3J5IGluZm9ybWF0aW9uCitnbyAgICAgIC0gc3RhcnQgYXBwbGljYXRpb24gYXQgYWRkcmVzcyAnYWRkcicKK2hlbHAgICAgLSBwcmludCBvbmxpbmUgaGVscAoraW1pbmZvICAtIHByaW50IGhlYWRlciBpbmZvcm1hdGlvbiBmb3IgYXBwbGljYXRpb24gaW1hZ2UKK2xvYWRiICAgLSBsb2FkIGJpbmFyeSBmaWxlIG92ZXIgc2VyaWFsIGxpbmUgKGtlcm1pdCBtb2RlKQorbG9hZHMgICAtIGxvYWQgUy1SZWNvcmQgZmlsZSBvdmVyIHNlcmlhbCBsaW5lCitsb29wICAgIC0gaW5maW5pdGUgbG9vcCBvbiBhZGRyZXNzIHJhbmdlCittZCAgICAgIC0gbWVtb3J5IGRpc3BsYXkKK21tICAgICAgLSBtZW1vcnkgbW9kaWZ5IChhdXRvLWluY3JlbWVudGluZykKK210ZXN0ICAgLSBzaW1wbGUgUkFNIHRlc3QKK213ICAgICAgLSBtZW1vcnkgd3JpdGUgKGZpbGwpCitubSAgICAgIC0gbWVtb3J5IG1vZGlmeSAoY29uc3RhbnQgYWRkcmVzcykKK3ByaW50ZW52LSBwcmludCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKK3Byb3RlY3QgLSBlbmFibGUgb3IgZGlzYWJsZSBGTEFTSCB3cml0ZSBwcm90ZWN0aW9uCityYXJwYm9vdC0gYm9vdCBpbWFnZSB2aWEgbmV0d29yayB1c2luZyBSQVJQL1RGVFAgcHJvdG9jb2wKK3Jlc2V0ICAgLSBQZXJmb3JtIFJFU0VUIG9mIHRoZSBDUFUKK3J1biAgICAgLSBydW4gY29tbWFuZHMgaW4gYW4gZW52aXJvbm1lbnQgdmFyaWFibGUKK3NhdmVlbnYgLSBzYXZlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBwZXJzaXN0ZW50IHN0b3JhZ2UKK3NldGVudiAgLSBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzCitzbGVlcCAgIC0gZGVsYXkgZXhlY3V0aW9uIGZvciBzb21lIHRpbWUKK3RmdHBib290LSBib290IGltYWdlIHZpYSBuZXR3b3JrIHVzaW5nIFRGVFAgcHJvdG9jb2wKKyAgICAgICAgICAgICAgIGFuZCBlbnYgdmFyaWFibGVzIGlwYWRkciBhbmQgc2VydmVyaXAKK3ZlcnNpb24gLSBwcmludCBtb25pdG9yIHZlcnNpb24KKz8gICAgICAgLSBhbGlhcyBmb3IgJ2hlbHAnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEVudmlyb25tZW50IFZhcmlhYmxlcyAoQ0ZHX0VOVl9JU19JTl9OVlJBTSkKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitMRU9YX2VscHQ4NjA6IHByaW50ZW52Citib290ZGVsYXk9NQorbG9hZHNfZWNobz0xCitiYXVkcmF0ZT05NjAwCitzdGRpbj1zZXJpYWwKK3N0ZG91dD1zZXJpYWwKK3N0ZGVycj1zZXJpYWwKK2V0aGFkZHI9MDA6MDM6Y2E6MDA6NjQ6ZGYKK2lwYWRkcj0xOTIuMTY4LjAuMzAKK25ldG1hc2s9MjU1LjI1NS4yNTUuMAorc2VydmVyaXA9MTkyLjE2OC4wLjEKK25mc3NlcnZlcmlwPTE5Mi4xNjguMC4xCitwcmVib290PWVjaG87ZWNobyBUeXBlICJydW4gbmZzYm9vdCIgdG8gbW91bnQgcm9vdCBmaWxlc3lzdGVtIG92ZXIgTkZTO2VjaG8KK2dhdGV3YXlpcD0xOTIuMTY4LjAuMQorcmFtYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L3JhbSBydworcm9vdGFyZ3M9c2V0ZW52IHJvb3RwYXRoIC90ZnRwLyQoaXBhZGRyKQorbmZzYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyBuZnNyb290PSQobmZzc2VydmVyaXApOiQocm9vdHBhdGgpCithZGRpcD1zZXRlbnYgYm9vdGFyZ3MgJChib290YXJncykgaXA9JChpcGFkZHIpOiQobmZzc2VydmVyaXApOiQoZ2F0ZXdheWlwKTokKG5ldG1hc2spOiQoaG9zdG5hbWUpOmV0aDA6CityYW1ib290PXRmdHAgNDAwMDAwIC9ob21lL2xlb3gvcE11bHRpO3J1biByYW1hcmdzO2Jvb3RtCituZnNib290PXRmdHAgNDAwMDAwIC9ob21lL2xlb3gvdUltYWdlO3J1biByb290YXJncztydW4gbmZzYXJncztydW4gYWRkaXA7Ym9vdG0KK2Jvb3RjbWQ9cnVuIHJhbWJvb3QKK2Nsb2Nrc19pbl9taHo9MQorCitFbnZpcm9ubWVudCBzaXplOiA3MzAvMTYzODAgYnl0ZXMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRmxhc2ggTWVtb3J5IEluZm9ybWF0aW9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworTEVPWF9lbHB0ODYwOiBmbGluZm8KKworQmFuayAjIDE6IEFNRCBBTTI5RjA0MCAgICg0IE1iaXRzKQorICBTaXplOiA1MTIgS0IgaW4gOCBTZWN0b3JzCisgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6CisgICAgMDIwMDAwMDAgKFJPKSAwMjAxMDAwMCAoUk8pIDAyMDIwMDAwIChSTykgMDIwMzAwMDAgKFJPKSAwMjA0MDAwMCAgICAgCisgICAgMDIwNTAwMDAgICAgICAwMjA2MDAwMCAgICAgIDAyMDcwMDAwICAgICAKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQm9hcmQgSW5mb3JtYXRpb24gU3RydWN0dXJlCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworTEVPWF9lbHB0ODYwOiBiZGluZm8KK21lbXN0YXJ0ICAgID0gMHgwMDAwMDAwMAorbWVtc2l6ZSAgICAgPSAweDAxMDAwMDAwCitmbGFzaHN0YXJ0ICA9IDB4MDIwMDAwMDAKK2ZsYXNoc2l6ZSAgID0gMHgwMDA4MDAwMAorZmxhc2hvZmZzZXQgPSAweDAwMDMwMDAwCitzcmFtc3RhcnQgICA9IDB4MDAwMDAwMDAKK3NyYW1zaXplICAgID0gMHgwMDAwMDAwMAoraW1tcl9iYXNlICAgPSAweEZGMDAwMDAwCitib290ZmxhZ3MgICA9IDB4MDAwMDAwMDEKK2ludGZyZXEgICAgID0gICAgIDUwIE1IegorYnVzZnJlcSAgICAgPSAgICAgNTAgTUh6CitldGhhZGRyICAgICA9IDAwOjAzOmNhOjAwOjY0OmRmCitJUCBhZGRyICAgICA9IDE5Mi4xNjguMC4zMAorYmF1ZHJhdGUgICAgPSAgIDk2MDAgYnBzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEltYWdlIERvd25sb2FkIGFuZCBydW4gb3ZlciBzZXJpYWwgcG9ydAorIyAgICBoZWxsb193b3JsZCAoUy1SZWNvcmQgaW1hZ2UpCisjICAgID09PT4gMSkgRW50ZXIgImxvYWRzIiBjb21tYW5kIGludG8gVS1Cb290IG1vbml0b3IKKyMgICAgPT09PiAyKSBGcm9tIFRlcmFUZXJtJ3MgYmFyIG1lbnUsIFNlbGVjdCAnRmlsZS9TZW5kIGZpbGUuLi4nCisjICAgICAgICAgICAgVGhlbiBzZWxlY3QgJ2hlbGxvX3dvcmxkLnNyZWMnIHdpdGggdGhlIGZpbGUgYnJvd3NlcgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1UtQm9vdCAwLjIuMiAoSmFuIDE5IDIwMDMgLSAxMTowODozOSkKKworQ1BVOiAgIFhQQzg2MHh4WlBubkIgYXQgNTAgTUh6OiA0IGtCIEktQ2FjaGUgNCBrQiBELUNhY2hlIEZFQyBwcmVzZW50CisgICAgICAgICAqKiogV2FybmluZzogQ1BVIENvcmUgaGFzIFNpbGljb24gQnVncyAtLSBDaGVjayB0aGUgRXJyYXRhICoqKgorQm9hcmQ6ICMjIyBObyBIVyBJRCAtIGFzc3VtaW5nIEVMUFQ4NjAKK0RSQU06ICAxNiBNQgorRkxBU0g6IDUxMiBrQgorSW46ICAgIHNlcmlhbAorT3V0OiAgIHNlcmlhbAorRXJyOiAgIHNlcmlhbAorTmV0OiAgIFNDQyBFVEhFUk5FVAorCitUeXBlICJydW4gbmZzYm9vdCIgdG8gbW91bnQgcm9vdCBmaWxlc3lzdGVtIG92ZXIgTkZTCisKK0hpdCBhbnkga2V5IHRvIHN0b3AgYXV0b2Jvb3Q6ICAwCitMRU9YX2VscHQ4NjA6IGxvYWRzCisjIyBSZWFkeSBmb3IgUy1SZWNvcmQgZG93bmxvYWQgLi4uCitTODA0MDQwMDA0RjMwNTAxNTQwMDA1MDE3MDk5MDUwMTRDMDAwNTAxMzg4RAorIyMgRmlyc3QgTG9hZCBBZGRyID0gMHgwMDA0MDAwMAorIyMgTGFzdCAgTG9hZCBBZGRyID0gMHgwMDA1MDE4QgorIyMgVG90YWwgU2l6ZSAgICAgID0gMHgwMDAxMDE4QyA9IDY1OTMyIEJ5dGVzCisjIyBTdGFydCBBZGRyICAgICAgPSAweDAwMDQwMDA0CitMRU9YX2VscHQ4NjA6IGdvIDQwMDA0IFRoaXMgaXMgYSB0ZXN0ICEhIQorIyMgU3RhcnRpbmcgYXBwbGljYXRpb24gYXQgMHgwMDA0MDAwNCAuLi4KK0hlbGxvIFdvcmxkCithcmdjID0gNgorYXJndlswXSA9ICI0MDAwNCIKK2FyZ3ZbMV0gPSAiVGhpcyIKK2FyZ3ZbMl0gPSAiaXMiCithcmd2WzNdID0gImEiCithcmd2WzRdID0gInRlc3QiCithcmd2WzVdID0gIiEhISIKK2FyZ3ZbNl0gPSAiPE5VTEw+IgorSGl0IGFueSBrZXkgdG8gZXhpdCAuLi4KKworIyMgQXBwbGljYXRpb24gdGVybWluYXRlZCwgcmMgPSAweDAKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSW1hZ2UgZG93bmxvYWQgYW5kIHJ1biBvdmVyIGV0aGVybmV0IGludGVyZmFjZQorIyAgICBMaW51eC0yLjQuNCAodUltYWdlKSArIFJvb3QgZmlsZXN5c3RlbSBtb3VudGVkIG92ZXIgTkZTCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworVS1Cb290IDAuMi4yIChKYW4gMTkgMjAwMyAtIDExOjA4OjM5KQorCitDUFU6ICAgWFBDODYweHhaUG5uQiBhdCA1MCBNSHo6IDQga0IgSS1DYWNoZSA0IGtCIEQtQ2FjaGUgRkVDIHByZXNlbnQKKyAgICAgICAgICoqKiBXYXJuaW5nOiBDUFUgQ29yZSBoYXMgU2lsaWNvbiBCdWdzIC0tIENoZWNrIHRoZSBFcnJhdGEgKioqCitCb2FyZDogIyMjIE5vIEhXIElEIC0gYXNzdW1pbmcgRUxQVDg2MAorRFJBTTogIDE2IE1CCitGTEFTSDogNTEyIGtCCitJbjogICAgc2VyaWFsCitPdXQ6ICAgc2VyaWFsCitFcnI6ICAgc2VyaWFsCitOZXQ6ICAgU0NDIEVUSEVSTkVUCisKK1R5cGUgInJ1biBuZnNib290IiB0byBtb3VudCByb290IGZpbGVzeXN0ZW0gb3ZlciBORlMKKworSGl0IGFueSBrZXkgdG8gc3RvcCBhdXRvYm9vdDogIDAKK0xFT1hfZWxwdDg2MDogcnVuIG5mc2Jvb3QKK0FSUCBicm9hZGNhc3QgMQorVEZUUCBmcm9tIHNlcnZlciAxOTIuMTY4LjAuMTsgb3VyIElQIGFkZHJlc3MgaXMgMTkyLjE2OC4wLjMwCitGaWxlbmFtZSAnL2hvbWUvbGVveC91SW1hZ2UnLgorTG9hZCBhZGRyZXNzOiAweDQwMDAwMAorTG9hZGluZzogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitkb25lCitCeXRlcyB0cmFuc2ZlcnJlZCA9IDQ3NzI5NCAoNzQ4NmUgaGV4KQorIyMgQm9vdGluZyBpbWFnZSBhdCAwMDQwMDAwMCAuLi4KKyAgIEltYWdlIE5hbWU6ICAgTGludXgtMi40LjQKKyAgIEltYWdlIFR5cGU6ICAgUG93ZXJQQyBMaW51eCBLZXJuZWwgSW1hZ2UgKGd6aXAgY29tcHJlc3NlZCkKKyAgIERhdGEgU2l6ZTogICAgNDc3MjMwIEJ5dGVzID0gNDY2IGtCID0gMCBNQgorICAgTG9hZCBBZGRyZXNzOiAwMDAwMDAwMAorICAgRW50cnkgUG9pbnQ6ICAwMDAwMDAwMAorICAgVmVyaWZ5aW5nIENoZWNrc3VtIC4uLiBPSworICAgVW5jb21wcmVzc2luZyBLZXJuZWwgSW1hZ2UgLi4uIE9LCitMaW51eCB2ZXJzaW9uIDIuNC40LXJ0aGFsNSAobGVveEBwNWFrNjY1MCkgKGdjYyB2ZXJzaW9uIDIuOTUuMyAyMDAxMDMxNSAocmVsZWFzZS9Nb250YVZpc3RhKSkgIzEgV2VkIEp1bCAzIDEwOjIzOjUzIENFU1QgMjAwMgorT24gbm9kZSAwIHRvdGFscGFnZXM6IDQwOTYKK3pvbmUoMCk6IDQwOTYgcGFnZXMuCit6b25lKDEpOiAwIHBhZ2VzLgorem9uZSgyKTogMCBwYWdlcy4KK0tlcm5lbCBjb21tYW5kIGxpbmU6IHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD0xOTIuMTY4LjAuMTovdGZ0cC8xOTIuMTY4LjAuMzAgaXA9MTkyLjE2OC4wLjMwOjE5Mi4xNjguMC4xOjE5Mi4xNjguMC4xOjI1NS4yNTUuMjU1LjA6OmV0aDA6CitydHNjaGVkIHZlcnNpb24gPDIwMDEwNjE4LjEwNTAuMjQ+CitEZWNyZW1lbnRlciBGcmVxdWVuY3k6IDMxMjUwMDAKK1dhcm5pbmc6IHJlYWwgdGltZSBjbG9jayBzZWVtcyBzdHVjayEKK0NhbGlicmF0aW5nIGRlbGF5IGxvb3AuLi4gNDkuNzYgQm9nb01JUFMKK01lbW9yeTogMTQ3MjBrIGF2YWlsYWJsZSAoOTI4ayBrZXJuZWwgY29kZSwgMzg0ayBkYXRhLCA0NGsgaW5pdCwgMGsgaGlnaG1lbSkKK0RlbnRyeS1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6IDIwNDggKG9yZGVyOiAyLCAxNjM4NCBieXRlcykKK0J1ZmZlci1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6IDEwMjQgKG9yZGVyOiAwLCA0MDk2IGJ5dGVzKQorUGFnZS1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6IDQwOTYgKG9yZGVyOiAyLCAxNjM4NCBieXRlcykKK0lub2RlLWNhY2hlIGhhc2ggdGFibGUgZW50cmllczogMTAyNCAob3JkZXI6IDEsIDgxOTIgYnl0ZXMpCitQT1NJWCBjb25mb3JtYW5jZSB0ZXN0aW5nIGJ5IFVOSUZJWAorTGludXggTkVUNC4wIGZvciBMaW51eCAyLjQKK0Jhc2VkIHVwb24gU3dhbnNlYSBVbml2ZXJzaXR5IENvbXB1dGVyIFNvY2lldHkgTkVUMy4wMzkKK1N0YXJ0aW5nIGtzd2FwZCB2MS44CitDUE0gVUFSVCBkcml2ZXIgdmVyc2lvbiAwLjAzCit0dHlTMCBvbiBTTUMxIGF0IDB4MDI4MCwgQlJHMQorYmxvY2s6IHF1ZXVlZCBzZWN0b3JzIG1heC9sb3cgOTcwMWtCLzMyMzNrQiwgNjQgc2xvdHMgcGVyIHF1ZXVlCitSQU1ESVNLIGRyaXZlciBpbml0aWFsaXplZDogMTYgUkFNIGRpc2tzIG9mIDQwOTZLIHNpemUgMTAyNCBibG9ja3NpemUKK2V0aDA6IENQTSBFTkVUIFZlcnNpb24gMC4yIG9uIFNDQzEsIDAwOjAzOmNhOjAwOjY0OmRmCitORVQ0OiBMaW51eCBUQ1AvSVAgMS4wIGZvciBORVQ0LjAKK0lQIFByb3RvY29sczogSUNNUCwgVURQLCBUQ1AKK0lQOiByb3V0aW5nIGNhY2hlIGhhc2ggdGFibGUgb2YgNTEyIGJ1Y2tldHMsIDRLYnl0ZXMKK1RDUDogSGFzaCB0YWJsZXMgY29uZmlndXJlZCAoZXN0YWJsaXNoZWQgMTAyNCBiaW5kIDEwMjQpCitORVQ0OiBVbml4IGRvbWFpbiBzb2NrZXRzIDEuMC9TTVAgZm9yIExpbnV4IE5FVDQuMC4KK0xvb2tpbmcgdXAgcG9ydCBvZiBSUEMgMTAwMDAzLzIgb24gMTkyLjE2OC4wLjEKK0xvb2tpbmcgdXAgcG9ydCBvZiBSUEMgMTAwMDA1LzIgb24gMTkyLjE2OC4wLjEKK1ZGUzogTW91bnRlZCByb290IChuZnMgZmlsZXN5c3RlbSkuCitGcmVlaW5nIHVudXNlZCBrZXJuZWwgbWVtb3J5OiA0NGsgaW5pdAorSU5JVDogdmVyc2lvbiAyLjc4IGJvb3RpbmcKKyAgICAgICAgICAgICAgICBXZWxjb21lIHRvIERFTlggRW1iZWRkZWQgTGludXggRW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICBQcmVzcyAnSScgdG8gZW50ZXIgaW50ZXJhY3RpdmUgc3RhcnR1cC4KK01vdW50aW5nIHByb2MgZmlsZXN5c3RlbTogIFsgIE9LICBdCitDb25maWd1cmluZyBrZXJuZWwgcGFyYW1ldGVyczogIFsgIE9LICBdCitDYW5ub3QgYWNjZXNzIHRoZSBIYXJkd2FyZSBDbG9jayB2aWEgYW55IGtub3duIG1ldGhvZC4KK1VzZSB0aGUgLS1kZWJ1ZyBvcHRpb24gdG8gc2VlIHRoZSBkZXRhaWxzIG9mIG91ciBzZWFyY2ggZm9yIGFuIGFjY2VzcyBtZXRob2QuCitTZXR0aW5nIGNsb2NrIDogV2VkIERlYyAzMSAxOTowMDoxMSBFU1QgMTk2OSBbICBPSyAgXQorQWN0aXZhdGluZyBzd2FwIHBhcnRpdGlvbnM6ICBbICBPSyAgXQorU2V0dGluZyBob3N0bmFtZSAxOTIuMTY4LjAuMzA6ICBbICBPSyAgXQorRmluZGluZyBtb2R1bGUgZGVwZW5kZW5jaWVzOgorWyAgT0sgIF0KK0NoZWNraW5nIGZpbGVzeXN0ZW1zCitDaGVja2luZyBhbGwgZmlsZSBzeXN0ZW1zLgorWyAgT0sgIF0KK01vdW50aW5nIGxvY2FsIGZpbGVzeXN0ZW1zOiAgWyAgT0sgIF0KK0VuYWJsaW5nIHN3YXAgc3BhY2U6ICBbICBPSyAgXQorSU5JVDogRW50ZXJpbmcgcnVubGV2ZWw6IDMKK0VudGVyaW5nIG5vbi1pbnRlcmFjdGl2ZSBzdGFydHVwCitTdGFydGluZyBzeXN0ZW0gbG9nZ2VyOiBbICBPSyAgXQorU3RhcnRpbmcga2VybmVsIGxvZ2dlcjogWyAgT0sgIF0KK1N0YXJ0aW5nIHhpbmV0ZDogWyAgT0sgIF0KKworMTkyIGxvZ2luOiByb290CitMYXN0IGxvZ2luOiBXZWQgRGVjIDMxIDE5OjAwOjQxIG9uIHR0eVMwCitiYXNoLTIuMDQjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEltYWdlIGRvd25sb2FkIGFuZCBydW4gb3ZlciBldGhlcm5ldCBpbnRlcmZhY2UKKyMgICAgTGludXgtMi40LjQgKyBSb290IGZpbGVzeXN0ZW0gbW91bnRlZCBmcm9tIFJBTSAocE11bHRpKQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1UtQm9vdCAwLjIuMiAoSmFuIDE5IDIwMDMgLSAxMTowODozOSkKKworQ1BVOiAgIFhQQzg2MHh4WlBubkIgYXQgNTAgTUh6OiA0IGtCIEktQ2FjaGUgNCBrQiBELUNhY2hlIEZFQyBwcmVzZW50CisgICAgICAgICAqKiogV2FybmluZzogQ1BVIENvcmUgaGFzIFNpbGljb24gQnVncyAtLSBDaGVjayB0aGUgRXJyYXRhICoqKgorQm9hcmQ6ICMjIyBObyBIVyBJRCAtIGFzc3VtaW5nIEVMUFQ4NjAKK0RSQU06ICAxNiBNQgorRkxBU0g6IDUxMiBrQgorSW46ICAgIHNlcmlhbAorT3V0OiAgIHNlcmlhbAorRXJyOiAgIHNlcmlhbAorTmV0OiAgIFNDQyBFVEhFUk5FVAorCitUeXBlICJydW4gbmZzYm9vdCIgdG8gbW91bnQgcm9vdCBmaWxlc3lzdGVtIG92ZXIgTkZTCisKK0hpdCBhbnkga2V5IHRvIHN0b3AgYXV0b2Jvb3Q6ICAwCitMRU9YX2VscHQ4NjA6IHJ1biByYW1ib290CitBUlAgYnJvYWRjYXN0IDEKK1RGVFAgZnJvbSBzZXJ2ZXIgMTkyLjE2OC4wLjE7IG91ciBJUCBhZGRyZXNzIGlzIDE5Mi4xNjguMC4zMAorRmlsZW5hbWUgJy9ob21lL2xlb3gvcE11bHRpJy4KK0xvYWQgYWRkcmVzczogMHg0MDAwMDAKK0xvYWRpbmc6ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2RvbmUKK0J5dGVzIHRyYW5zZmVycmVkID0gMTk0NzgxNiAoMWRiOGE4IGhleCkKKyMjIEJvb3RpbmcgaW1hZ2UgYXQgMDA0MDAwMDAgLi4uCisgICBJbWFnZSBOYW1lOiAgIGxpbnV4LTIuNC40LTIwMDItMDMtMjEgTXVsdGlib290CisgICBJbWFnZSBUeXBlOiAgIFBvd2VyUEMgTGludXggTXVsdGktRmlsZSBJbWFnZSAoZ3ppcCBjb21wcmVzc2VkKQorICAgRGF0YSBTaXplOiAgICAxOTQ3NzUyIEJ5dGVzID0gMTkwMiBrQiA9IDEgTUIKKyAgIExvYWQgQWRkcmVzczogMDAwMDAwMDAKKyAgIEVudHJ5IFBvaW50OiAgMDAwMDAwMDAKKyAgIENvbnRlbnRzOgorICAgSW1hZ2UgMDogICA0NzcyMzAgQnl0ZXMgPSA0NjYga0IgPSAwIE1CCisgICBJbWFnZSAxOiAgMTQ3MDUwOCBCeXRlcyA9IDE0MzYga0IgPSAxIE1CCisgICBWZXJpZnlpbmcgQ2hlY2tzdW0gLi4uIE9LCisgICBVbmNvbXByZXNzaW5nIE11bHRpLUZpbGUgSW1hZ2UgLi4uIE9LCisgICBMb2FkaW5nIFJhbWRpc2sgdG8gMDBlNDQwMDAsIGVuZCAwMGZhYjAyYyAuLi4gT0sKK0xpbnV4IHZlcnNpb24gMi40LjQtcnRoYWw1IChsZW94QHA1YWs2NjUwKSAoZ2NjIHZlcnNpb24gMi45NS4zIDIwMDEwMzE1IChyZWxlYXNlL01vbnRhVmlzdGEpKSAjMSBXZWQgSnVsIDMgMTA6MjM6NTMgQ0VTVCAyMDAyCitPbiBub2RlIDAgdG90YWxwYWdlczogNDA5Ngorem9uZSgwKTogNDA5NiBwYWdlcy4KK3pvbmUoMSk6IDAgcGFnZXMuCit6b25lKDIpOiAwIHBhZ2VzLgorS2VybmVsIGNvbW1hbmQgbGluZTogcm9vdD0vZGV2L3JhbSBydworcnRzY2hlZCB2ZXJzaW9uIDwyMDAxMDYxOC4xMDUwLjI0PgorRGVjcmVtZW50ZXIgRnJlcXVlbmN5OiAzMTI1MDAwCitXYXJuaW5nOiByZWFsIHRpbWUgY2xvY2sgc2VlbXMgc3R1Y2shCitDYWxpYnJhdGluZyBkZWxheSBsb29wLi4uIDQ5Ljc2IEJvZ29NSVBTCitNZW1vcnk6IDEzMjgwayBhdmFpbGFibGUgKDkyOGsga2VybmVsIGNvZGUsIDM4NGsgZGF0YSwgNDRrIGluaXQsIDBrIGhpZ2htZW0pCitEZW50cnktY2FjaGUgaGFzaCB0YWJsZSBlbnRyaWVzOiAyMDQ4IChvcmRlcjogMiwgMTYzODQgYnl0ZXMpCitCdWZmZXItY2FjaGUgaGFzaCB0YWJsZSBlbnRyaWVzOiAxMDI0IChvcmRlcjogMCwgNDA5NiBieXRlcykKK1BhZ2UtY2FjaGUgaGFzaCB0YWJsZSBlbnRyaWVzOiA0MDk2IChvcmRlcjogMiwgMTYzODQgYnl0ZXMpCitJbm9kZS1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6IDEwMjQgKG9yZGVyOiAxLCA4MTkyIGJ5dGVzKQorUE9TSVggY29uZm9ybWFuY2UgdGVzdGluZyBieSBVTklGSVgKK0xpbnV4IE5FVDQuMCBmb3IgTGludXggMi40CitCYXNlZCB1cG9uIFN3YW5zZWEgVW5pdmVyc2l0eSBDb21wdXRlciBTb2NpZXR5IE5FVDMuMDM5CitTdGFydGluZyBrc3dhcGQgdjEuOAorQ1BNIFVBUlQgZHJpdmVyIHZlcnNpb24gMC4wMwordHR5UzAgb24gU01DMSBhdCAweDAyODAsIEJSRzEKK2Jsb2NrOiBxdWV1ZWQgc2VjdG9ycyBtYXgvbG93IDg3NDFrQi8yOTEza0IsIDY0IHNsb3RzIHBlciBxdWV1ZQorUkFNRElTSyBkcml2ZXIgaW5pdGlhbGl6ZWQ6IDE2IFJBTSBkaXNrcyBvZiA0MDk2SyBzaXplIDEwMjQgYmxvY2tzaXplCitldGgwOiBDUE0gRU5FVCBWZXJzaW9uIDAuMiBvbiBTQ0MxLCAwMDowMzpjYTowMDo2NDpkZgorUkFNRElTSzogQ29tcHJlc3NlZCBpbWFnZSBmb3VuZCBhdCBibG9jayAwCitGcmVlaW5nIGluaXRyZCBtZW1vcnk6IDE0MzZrIGZyZWVkCitORVQ0OiBMaW51eCBUQ1AvSVAgMS4wIGZvciBORVQ0LjAKK0lQIFByb3RvY29sczogSUNNUCwgVURQLCBUQ1AKK0lQOiByb3V0aW5nIGNhY2hlIGhhc2ggdGFibGUgb2YgNTEyIGJ1Y2tldHMsIDRLYnl0ZXMKK1RDUDogSGFzaCB0YWJsZXMgY29uZmlndXJlZCAoZXN0YWJsaXNoZWQgMTAyNCBiaW5kIDEwMjQpCitJUC1Db25maWc6IEluY29tcGxldGUgbmV0d29yayBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorTkVUNDogVW5peCBkb21haW4gc29ja2V0cyAxLjAvU01QIGZvciBMaW51eCBORVQ0LjAuCitWRlM6IE1vdW50ZWQgcm9vdCAoZXh0MiBmaWxlc3lzdGVtKS4KK0ZyZWVpbmcgdW51c2VkIGtlcm5lbCBtZW1vcnk6IDQ0ayBpbukKK2luaXQgc3RhcnRlZDogIEJ1c3lCb3ggdjAuNjAuMiAoMjAwMi4wNy4wMS0xMjowNiswMDAwKSBtdWx0aS1jYWxsIENvbmZpZ3VyaW5nIGhvc3RuYW1lCitDb25maWd1cmluZyBsby4uLgorQ29uZmlndXJpbmcgZXRoMC4uLgorQ29uZmlndXJpbmcgR2F0ZXdheS4uLgorCitQbGVhc2UgcHJlc3MgRW50ZXIgdG8gYWN0aXZhdGUgdGhpcyBjb25zb2xlLgorCitFTFBUODYwIGxvZ2luOiByb290CitQYXNzd29yZDoKK1dlbGNvbWUgdG8gTGludXgtMi40LjQgZm9yIEVMUFQgQ1BVIGJvYXJkIChNUEM4NjBUIEAgNTBNSHopCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhODg4OGIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkODg4ODg4Yi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDhQIllQIlk4OAorICAgICBfICAgICAgXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOHxvfHxvfDg4CisgICAgfCB8ICAgIHxffCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4JyAgICAuODgKKyAgICB8IHwgICAgIF8gX19fXyAgXyAgIF8gIF8gIF8gICAgICAgICAgICAgIDhgLl8uJyBZOC4KKyAgICB8IHwgICAgfCB8ICBfIFx8IHwgfCB8XCBcLyAvICAgICAgICAgICAgZC8gICAgICBgOGIuCisgICAgfCB8X19fIHwgfCB8IHwgfCB8X3wgfC8gICAgXCAgICAgICAgICAuZFAgICAuICAgICBZOGIuCisgICAgfF9fX19ffHxffF98IHxffFxfX19ffFxfL1xfLyAgICAgICAgIGQ4OicgICAiICAgYDo6ODhiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ4IiAgICAgICAgICAgYFk4OGIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo4UCAgICAgJyAgICAgICA6ODg4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOGEuICAgIDogICAgICBfYTg4UAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuXy8iWWFhXyA6ICAgIC58IDg4UHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCAgICBZUCIgICAgICBgfCA4UCAgYC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyAgICAgXC5fX19fXy5kfCAgICAuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgLS0uLl9fKTg4ODg4OFBgLl8uJworbG9naW5bMjFdOiByb290IGxvZ2luICBvbiBgdHR5UzAnCisKKworCitCdXN5Qm94IHYwLjYwLjMgKDIwMDIuMDcuMjAtMTA6MzkrMDAwMCkgQnVpbHQtaW4gc2hlbGwgKGFzaCkKK0VudGVyICdoZWxwJyBmb3IgYSBsaXN0IG9mIGJ1aWx0LWluIGNvbW1hbmRzLgorCityb290QEVMUFQ4NjA6fiAjCmRpZmYgLS1naXQgYS9ib2FyZC9MRU9YL2VscHQ4NjAvY29uZmlnLm1rIGIvYm9hcmQvTEVPWC9lbHB0ODYwL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWZjMzYwCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvTEVPWC9lbHB0ODYwL2NvbmZpZy5tawpAQCAtMCwwICsxLDM2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMKKyMgVGhlIExFT1ggdGVhbSA8dGVhbUBsZW94Lm9yZz4sIGh0dHA6Ly93d3cubGVveC5vcmcKKyMKKyMgTEVPWC5vcmcgaXMgYWJvdXQgdGhlIGRldmVsb3BtZW50IG9mIGZyZWUgaGFyZHdhcmUgYW5kIHNvZnR3YXJlIHJlc291cmNlcworIyAgIGZvciBzeXN0ZW0gb24gY2hpcC4KKyMKKyMgRGVzY3JpcHRpb246IFUtQm9vdCBwb3J0IG9uIHRoZSBMRU9YJ3MgRUxQVDg2MCBDUFUgYm9hcmQKKyMgfn5+fn5+fn5+fn4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIEVMUFQ4NjAgYm9hcmQKKyMKKworVEVYVF9CQVNFID0gMHgwMjAwMDAwMAorI1RFWFRfQkFTRSA9IDB4MDBGQjAwMDAKZGlmZiAtLWdpdCBhL2JvYXJkL0xFT1gvZWxwdDg2MC9lbHB0ODYwLmMgYi9ib2FyZC9MRU9YL2VscHQ4NjAvZWxwdDg2MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NjQ1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9MRU9YL2VscHQ4NjAvZWxwdDg2MC5jCkBAIC0wLDAgKzEsMzk5IEBACisvKgorKio9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoqCisqKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMKKyoqIFRoZSBMRU9YIHRlYW0gPHRlYW1AbGVveC5vcmc+LCBodHRwOi8vd3d3Lmxlb3gub3JnCisqKgorKiogTEVPWC5vcmcgaXMgYWJvdXQgdGhlIGRldmVsb3BtZW50IG9mIGZyZWUgaGFyZHdhcmUgYW5kIHNvZnR3YXJlIHJlc291cmNlcworKiogICBmb3Igc3lzdGVtIG9uIGNoaXAuCisqKgorKiogRGVzY3JpcHRpb246IFUtQm9vdCBwb3J0IG9uIHRoZSBMRU9YJ3MgRUxQVDg2MCBDUFUgYm9hcmQKKyoqIH5+fn5+fn5+fn5+CisqKgorKio9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoqCisqKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisqKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworKiogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyoqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKioKKyoqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKiogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyoqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyoqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisqKgorKiogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyoqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisqKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorKiogTUEgMDIxMTEtMTMwNyBVU0EKKyoqCisqKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworLyoKKyoqIE5vdGUgMTogSW4gdGhpcyBmaWxlLCB5b3UgaGF2ZSB0byBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKiogLS0tLS0tCisqKiAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgIGJvYXJkX3ByZV9pbml0KHZvaWQpCisqKiAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgIGNoZWNrYm9hcmQodm9pZCkKKyoqICAgICAgICAgICAgICBsb25nIGludCAgICAgICAgaW5pdGRyYW0oaW50IGJvYXJkX3R5cGUpCisqKiBjYWxsZWQgZnJvbSAnYm9hcmRfaW5pdF9mKCknIGludG8gJ2NvbW1vbi9ib2FyZC5jJworKioKKyoqICAgICAgICAgICAgICB2b2lkICAgICAgICAgICAgcmVzZXRfcGh5KHZvaWQpCisqKiBjYWxsZWQgZnJvbSAnYm9hcmRfaW5pdF9yKCknIGludG8gJ2NvbW1vbi9ib2FyZC5jJworKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG1wYzh4eC5oPgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBsb25nIGludCBkcmFtX3NpemUgKGxvbmcgaW50LCBsb25nIGludCAqLCBsb25nIGludCk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZQlfTk9UX1VTRURfCTB4RkZGRkZGRkYKKworY29uc3QgdWludCBpbml0X3NkcmFtX3RhYmxlW10gPQoreworICAvKgorICAgKiBTaW5nbGUgUmVhZC4gKE9mZnNldCAwIGluIFVQTUEgUkFNKQorICAgKi8KKyAgMHgwRkZDQ0MwNCwgMHhGRkZGRkMwNCwgMHgwRkZDM0MwNCwgMHhGRkZGRkMwNCwKKyAgMHhGRkZGRkMwNCwgLyogbGFzdCAqLworICAvKgorICAgKiBTRFJBTSBJbml0aWFsaXphdGlvbiAob2Zmc2V0IDUgaW4gVVBNQSBSQU0pCisgICAqCisgICAqIFRoaXMgaXMgbm8gVVBNIGVudHJ5IHBvaW50LiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb24gdXNlcworICAgKiB0aGUgcmVtYWluaW5nIHNwYWNlIHRvIGVzdGFibGlzaCBhbiBpbml0aWFsaXphdGlvbgorICAgKiBzZXF1ZW5jZSwgd2hpY2ggaXMgZXhlY3V0ZWQgYnkgYSBSVU4gY29tbWFuZC4KKyAgICoKKyAgICovCisgIDB4RkZGRkZDMDQsIDB4RkZGRkZDMDQsIDB4MEZGQzNDMDQsICAvKiBsYXN0ICovCisgIC8qCisgICAqIEJ1cnN0IFJlYWQuIChPZmZzZXQgOCBpbiBVUE1BIFJBTSkKKyAgICovCisgIDB4RkZGRkZDMDQsIDB4RkZGRkZDMDQsIDB4RkZGRkZDMDQsIDB4RkZGRkZDMDQsCisgIDB4MEZGQzNDMDQsIDB4RkZGRkZDMDQsIDB4RkZGRkZDMDQsIDB4RkZGRkZDMDQsCisgIDB4RkZGRkZDMDQsIDB4MEZGQzNDMDQsIDB4RkZGRkZDMDQsIDB4RkZGRkZDMDQsCisgIDB4RkZGRkZDMDQsIDB4RkZGRkZDMDQsIDB4MEZGQzNDMDQsIDB4RkZGRkZDMDQsIC8qIGxhc3QgKi8KKyAgLyoKKyAgICogU2luZ2xlIFdyaXRlLiAoT2Zmc2V0IDE4IGluIFVQTUEgUkFNKQorICAgKi8KKyAgMHhGRkZGRkMwNCwgMHhGRkZGRkMwNCwgMHhGRkZGRkMwNCwgMHgwRkZDM0MwNCwKKyAgMHhGRkZGRkMwNCwgMHhGRkZGRkMwNCwgMHgwRkZGRkMwNCwgMHhGRkZGRkMwNCwgLyogbGFzdCAqLworICAvKgorICAgKiBCdXJzdCBXcml0ZS4gKE9mZnNldCAyMCBpbiBVUE1BIFJBTSkKKyAgICovCisgIDB4MEZGQzNDMDQsIDB4RkZGRkZDMDQsIDB4RkZGRkZDMDQsIDB4RkZGRkZDMDQsCisgIDB4RkZGRkZDMDQsIDB4MEZGQzNDMDQsIDB4RkZGRkZDMDQsIDB4RkZGRkZDMDQsCisgIDB4RkZGRkZDMDQsIDB4RkZGRkZDMDQsIDB4RkZGRkZDMzQsIDB4MEZBQzBDMzQsCisgIDB4RkZGRkZDMDUsIDB4RkZGRkZDMDQsIDB4MEZGQ0ZDMDQsIDB4RkZGRkZDMDUsIC8qIGxhc3QgKi8KK307CisKK2NvbnN0IHVpbnQgc2RyYW1fdGFibGVbXSA9Cit7CisgIC8qCisgICAqIFNpbmdsZSBSZWFkLiAoT2Zmc2V0IDAgaW4gVVBNQSBSQU0pCisgICAqLworICAweDBGMEZGQzI0LCAweDBGMENGQzA0LCAweEZGMEZGQzA0LCAweDAwQUYzQzA0LCAKKyAgMHhGRjBGRkMwMCwgLyogbGFzdCAqLworICAvKgorICAgKiBTRFJBTSBJbml0aWFsaXphdGlvbiAob2Zmc2V0IDUgaW4gVVBNQSBSQU0pCisgICAqCisgICAqIFRoaXMgaXMgbm8gVVBNIGVudHJ5IHBvaW50LiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb24gdXNlcworICAgKiB0aGUgcmVtYWluaW5nIHNwYWNlIHRvIGVzdGFibGlzaCBhbiBpbml0aWFsaXphdGlvbgorICAgKiBzZXF1ZW5jZSwgd2hpY2ggaXMgZXhlY3V0ZWQgYnkgYSBSVU4gY29tbWFuZC4KKyAgICoKKyAgICovCisgIDB4MEZGQ0NDMDQsIDB4RkZBRkZDMDUsIDB4RkZBRkZDMDUsIC8qIGxhc3QgKi8KKyAgLyoKKyAgICogQnVyc3QgUmVhZC4gKE9mZnNldCA4IGluIFVQTUEgUkFNKQorICAgKi8KKyAgMHgwRjBGRkMyNCwgMHgwRjBDRkMwNCwgMHhGRjBGRkMwNCwgMHgwMEFGM0MwNCwgCisgIDB4RjAwRkZDMDAsIDB4RjAwRkZDMDAsIDB4RjAwRkZDMDAsIDB4RkYwRkZDMDAsCisgIDB4MEZGQ0NDMDQsIDB4RkZBRkZDMDUsIDB4RkZBRkZDMDQsIDB4RkZBRkZDMDQsIAorICAweEZGQUZGQzA0LCAweEZGQUZGQzA0LCAweEZGQUZGQzA0LCAweEZGQUZGQzA0LCAvKiBsYXN0ICovCisgIC8qCisgICAqIFNpbmdsZSBXcml0ZS4gKE9mZnNldCAxOCBpbiBVUE1BIFJBTSkKKyAgICovCisgIDB4MEYwRkZDMjQsIDB4MEYwQ0ZDMDQsIDB4RkYwRkZDMDQsIDB4MDBBRjBDMDAsIAorICAweEZGMEZGQzA0LCAweDBGRkNDQzA0LCAweEZGQUZGQzA1LCAvKiBsYXN0ICovCisgIF9OT1RfVVNFRF8sIAorICAvKgorICAgKiBCdXJzdCBXcml0ZS4gKE9mZnNldCAyMCBpbiBVUE1BIFJBTSkKKyAgICovCisgIDB4MEYwRkZDMjQsIDB4MEYwQ0ZDMDQsIDB4RkYwRkZDMDAsIDB4MDBBRjBDMDAsIAorICAweEYwMEZGQzAwLCAweEYwMEZGQzAwLCAweEYwMEZGQzA0LCAweDBGRkNDQzA0LCAKKyAgMHhGRkFGRkMwNCwgMHhGRkFGRkMwNSwgMHhGRkFGRkMwNCwgMHhGRkFGRkMwNCwgCisgIDB4RkZBRkZDMDQsIDB4RkZBRkZDMDQsIDB4RkZBRkZDMDQsIDB4RkZBRkZDMDQsIC8qIGxhc3QgKi8KKyAgLyoKKyAgICogUmVmcmVzaCAgKE9mZnNldCAzMCBpbiBVUE1BIFJBTSkKKyAgICovCisgIDB4MEZGQzNDMDQsIDB4RkZGRkZDMDQsIDB4RkZGRkZDMDQsIDB4RkZGRkZDMDQsIAorICAweEZGRkZGQzA1LCAweEZGRkZGQzA0LCAweEZGRkZGQzA1LCBfTk9UX1VTRURfLCAKKyAgMHhGRkFGRkMwNCwgMHhGRkFGRkMwNCwgMHhGRkFGRkMwNCwgMHhGRkFGRkMwNCwgLyogbGFzdCAqLworICAvKgorICAgKiBFeGNlcHRpb24uIChPZmZzZXQgM2MgaW4gVVBNQSBSQU0pCisgICAqLworICAweDBGRkZGQzM0LCAweDBGQUMwQzM0LCAweEZGRkZGQzA1LCAweEZGQUZGQzA0LCAvKiBsYXN0ICovCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQ0ZHX1BDNCAgICAweDA4MDAKKworI2RlZmluZSBDRkdfRFMxICAgIENGR19QQzQKKworLyoKKyAqIFZlcnkgZWFybHkgYm9hcmQgaW5pdCBjb2RlIChmcGdhIGJvb3QsIGV0Yy4pCisgKi8KK2ludAorYm9hcmRfcHJlX2luaXQgKHZvaWQpCit7CisgIHZvbGF0aWxlIGltbWFwX3QgKmltbXIgPSAoaW1tYXBfdCAqKSBDRkdfSU1NUjsKKworICAvKiAKKyAgICogTGlnaHQgdXAgdGhlIHJlZCBsZWQgb24gRUxQVDg2MCBwY2IgKERTMSkgKFBDREFUKSAKKyAgICovCisgIGltbXItPmltX2lvcG9ydC5pb3BfcGNkYXQgJj0gfkNGR19EUzE7ICAgLyogUENEQVQgKERTMSA9IDApICAgICAgICAgICAgICAgICovCisgIGltbXItPmltX2lvcG9ydC5pb3BfcGNwYXIgJj0gfkNGR19EUzE7ICAgLyogUENQQVIgKDA9Z2VuZXJhbCBwdXJwb3NlIEkvTykgICovCisgIGltbXItPmltX2lvcG9ydC5pb3BfcGNkaXIgfD0gIENGR19EUzE7ICAgLyogUENESVIgKEkvTzogMD1pbnB1dCwgMT1vdXRwdXQpICovCisKKyAgcmV0dXJuICggMCApOyAgICAvKiBzdWNjZXNzICovCit9CisKKy8qCisgKiBDaGVjayBCb2FyZCBJZGVudGl0eToKKyAqCisgKiBUZXN0IEVMUFQ4NjAgSUQgc3RyaW5nCisgKgorICogUmV0dXJuIDEgaWYgbm8gc2Vjb25kIERSQU0gYmFuaywgb3RoZXJ3aXNlIHJldHVybnMgMAorICovCisKK2ludCAKK2NoZWNrYm9hcmQgKHZvaWQpCit7CisgICAgdW5zaWduZWQgY2hhciAqcyA9IGdldGVudigic2VyaWFsIyIpOworCisgICAgaWYgKCAhcyB8fCBzdHJuY21wKHMsICJFTFBUODYwIiwgNykgKQorICAgICAgcHJpbnRmICgiIyMjIE5vIEhXIElEIC0gYXNzdW1pbmcgRUxQVDg2MFxuIik7CisgICAgCisgICAgcmV0dXJuICggMCApOyAgICAvKiBzdWNjZXNzICovCit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworbG9uZyBpbnQgCitpbml0ZHJhbSAoaW50IGJvYXJkX3R5cGUpCit7CisgICAgdm9sYXRpbGUgaW1tYXBfdCAgICAgKmltbWFwICA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisgICAgdm9sYXRpbGUgbWVtY3RsOHh4X3QgKm1lbWN0bCA9ICZpbW1hcC0+aW1fbWVtY3RsOworICAgIGxvbmcgaW50ICAgICAgICAgICAgICBzaXplOCwgc2l6ZTk7CisgICAgbG9uZyBpbnQgICAgICAgICAgICAgIHNpemVfYjAgPSAwOworCisgICAgLyoKKyAgICAgKiBUaGlzIHNlcXVlbmNlIGluaXRpYWxpemVzIFNEUkFNIGNoaXBzIG9uIEVMUFQ4NjAgYm9hcmQKKyAgICAgKi8KKyAgICB1cG1jb25maWcoVVBNQSwgKHVpbnQgKilpbml0X3NkcmFtX3RhYmxlLCAKKwkgICAgICBzaXplb2YoaW5pdF9zZHJhbV90YWJsZSkvc2l6ZW9mKHVpbnQpKTsKKworICAgIG1lbWN0bC0+bWVtY19tcHRwciA9IDB4MDIwMDsKKyAgICBtZW1jdGwtPm1lbWNfbWFtciAgPSAweDE4MDAyMTExOworCisgICAgbWVtY3RsLT5tZW1jX21hciAgID0gMHgwMDAwMDA4ODsKKyAgICBtZW1jdGwtPm1lbWNfbWNyICAgPSAweDgwMDAyMDAwOwkvKiBDUzE6IFNEUkFNIGJhbmsgMCAqLworCisgICAgdXBtY29uZmlnKFVQTUEsICh1aW50ICopc2RyYW1fdGFibGUsIAorCSAgICAgIHNpemVvZihzZHJhbV90YWJsZSkvc2l6ZW9mKHVpbnQpKTsKKworICAgIC8qCisgICAgICogUHJlbGltaW5hcnkgcHJlc2NhbGVyIGZvciByZWZyZXNoIChkZXBlbmRzIG9uIG51bWJlciBvZgorICAgICAqIGJhbmtzKTogVGhpcyB2YWx1ZSBpcyBzZWxlY3RlZCBmb3IgZm91ciBjeWNsZXMgZXZlcnkgNjIuNCB1cworICAgICAqIHdpdGggdHdvIFNEUkFNIGJhbmtzIG9yIGZvdXIgY3ljbGVzIGV2ZXJ5IDMxLjIgdXMgd2l0aCBvbmUKKyAgICAgKiBiYW5rLiBJdCB3aWxsIGJlIGFkanVzdGVkIGFmdGVyIG1lbW9yeSBzaXppbmcuCisgICAgICovCisgICAgbWVtY3RsLT5tZW1jX21wdHByID0gQ0ZHX01QVFBSXzJCS184SzsKKworICAgIC8qCisgICAgICogVGhlIGZvbGxvd2luZyB2YWx1ZSBpcyB1c2VkIGFzIGFuIGFkZHJlc3MgKGkuZS4gb3Bjb2RlKSBmb3IKKyAgICAgKiB0aGUgTE9BRCBNT0RFIFJFR0lTVEVSIENPTU1BTkQgZHVyaW5nIFNEUkFNIGluaXRpYWxpc2F0aW9uLiBJZgorICAgICAqIHRoZSBwb3J0IHNpemUgaXMgMzJiaXQgdGhlIFNEUkFNIGRvZXMgTk9UICJzZWUiIHRoZSBsb3dlciB0d28KKyAgICAgKiBhZGRyZXNzIGxpbmVzLCBpLmUuIG1hcj0weDAwMDAwMDg4IC0+IG9wY29kZT0weDAwMDAwMDIyIGZvcgorICAgICAqIE1JQ1JPTiBTRFJBTXM6CisgICAgICogLT4gICAgMCAwMCAwMTAgMCAwMTAKKyAgICAgKiAgICAgICB8ICB8ICAgfCB8ICAgKy0gQnVyc3QgTGVuZ3RoID0gNAorICAgICAqICAgICAgIHwgIHwgICB8ICstLS0tLSBCdXJzdCBUeXBlICAgPSBTZXF1ZW50aWFsCisgICAgICogICAgICAgfCAgfCAgICstLS0tLS0tIENBUyBMYXRlbmN5ICA9IDIKKyAgICAgKiAgICAgICB8ICArLS0tLS0tLS0tLS0gT3BlcmF0aW5nIE1vZGUgPSBTdGFuZGFyZAorICAgICAqICAgICAgICstLS0tLS0tLS0tLS0tLSBXcml0ZSBCdXJzdCBNb2RlID0gUHJvZ3JhbW1lZCBCdXJzdCBMZW5ndGgKKyAgICAgKi8KKyAgICBtZW1jdGwtPm1lbWNfbWFyICAgPSAweDAwMDAwMDg4OworCisgICAgLyoKKyAgICAgKiBNYXAgY29udHJvbGxlciBiYW5rcyAyIGFuZCAzIHRvIHRoZSBTRFJBTSBiYW5rcyAyIGFuZCAzIGF0CisgICAgICogcHJlbGltaW5hcnkgYWRkcmVzc2VzIC0gdGhlc2UgaGF2ZSB0byBiZSBtb2RpZmllZCBhZnRlciB0aGUKKyAgICAgKiBTRFJBTSBzaXplIGhhcyBiZWVuIGRldGVybWluZWQuCisgICAgICovCisgICAgbWVtY3RsLT5tZW1jX29yMSAgID0gQ0ZHX09SMV9QUkVMSU07CisgICAgbWVtY3RsLT5tZW1jX2JyMSAgID0gQ0ZHX0JSMV9QUkVMSU07CisKKyAgICBtZW1jdGwtPm1lbWNfbWFtciAgPSBDRkdfTUFNUl84Q09MICYgKH4oTUFNUl9QVEFFKSk7IC8qIG5vIHJlZnJlc2ggeWV0ICovCisKKyAgICB1ZGVsYXkgKDIwMCk7CisKKyAgICAvKiBwZXJmb3JtIFNEUkFNIGluaXRpYWxpenNhdGlvbiBzZXF1ZW5jZSAqLworCisgICAgbWVtY3RsLT5tZW1jX21jciAgID0gMHg4MDAwMjEwNTsJLyogQ1MxOiBTRFJBTSBiYW5rIDAgKi8KKyAgICB1ZGVsYXkgKDEpOworICAgIG1lbWN0bC0+bWVtY19tY3IgICA9IDB4ODAwMDIyMzA7CS8qIENTMTogU0RSQU0gYmFuayAwIC0gZXhlY3V0ZSB0d2ljZSAqLworICAgIHVkZWxheSAoMSk7CisKKyAgICBtZW1jdGwtPm1lbWNfbWFtciB8PSBNQU1SX1BUQUU7CS8qIGVuYWJsZSByZWZyZXNoICovCisKKyAgICB1ZGVsYXkgKDEwMDApOworCisgICAgLyoKKyAgICAgKiBDaGVjayBCYW5rIDAgTWVtb3J5IFNpemUgZm9yIHJlLWNvbmZpZ3VyYXRpb24KKyAgICAgKgorICAgICAqIHRyeSA4IGNvbHVtbiBtb2RlCisgICAgICovCisgICAgc2l6ZTggPSBkcmFtX3NpemUgKENGR19NQU1SXzhDT0wsIAorCQkgICAgICAgKHVsb25nICopIFNEUkFNX0JBU0UxX1BSRUxJTSwgCisJCSAgICAgICBTRFJBTV9NQVhfU0laRSk7CisKKyAgICB1ZGVsYXkgKDEwMDApOworCisgICAgLyoKKyAgICAgKiB0cnkgOSBjb2x1bW4gbW9kZQorICAgICAqLworICAgIHNpemU5ID0gZHJhbV9zaXplIChDRkdfTUFNUl85Q09MLCAKKwkJICAgICAgICh1bG9uZyAqKSBTRFJBTV9CQVNFMV9QUkVMSU0sIAorCQkgICAgICAgU0RSQU1fTUFYX1NJWkUpOworCisgICAgaWYgKCBzaXplOCA8IHNpemU5ICkgICAgLyogbGVhdmUgY29uZmlndXJhdGlvbiBhdCA5IGNvbHVtbnMJKi8KKyAgICAgIHsKKwlzaXplX2IwID0gc2l6ZTk7CisJLyogZGVidWcgKCJTRFJBTSBCYW5rIDAgaW4gOSBjb2x1bW4gbW9kZTogJWxkIE1CXG4iLCBzaXplID4+IDIwKTsgKi8KKyAgICAgIH0gCisgICAgZWxzZSAgICAgICAgICAgICAgICAgIC8qIGJhY2sgdG8gOCBjb2x1bW5zCQkJKi8KKyAgICAgIHsKKwlzaXplX2IwID0gc2l6ZTg7CisJbWVtY3RsLT5tZW1jX21hbXIgPSBDRkdfTUFNUl84Q09MOworCXVkZWxheSAoNTAwKTsKKwkvKiBkZWJ1ZyAoIlNEUkFNIEJhbmsgMCBpbiA4IGNvbHVtbiBtb2RlOiAlbGQgTUJcbiIsIHNpemUgPj4gMjApOyAqLworICAgICAgfQorICAgIAorICAgIHVkZWxheSAoMTAwMCk7CisKKyAgICAvKgorICAgICAqIEFkanVzdCByZWZyZXNoIHJhdGUgZGVwZW5kaW5nIG9uIFNEUkFNIHR5cGUsIGJvdGggYmFua3MKKyAgICAgKiBGb3IgdHlwZXMgPiAxMjggTUJpdCBsZWF2ZSBpdCBhdCB0aGUgY3VycmVudCAoZmFzdCkgcmF0ZQorICAgICAqLworICAgIGlmICggc2l6ZV9iMCA8IDB4MDIwMDAwMDAgKSAKKyAgICAgIHsKKwkvKiByZWR1Y2UgdG8gMTUuNiB1cyAoNjIuNCB1cyAvIHF1YWQpICovCisJbWVtY3RsLT5tZW1jX21wdHByID0gQ0ZHX01QVFBSXzJCS180SzsKKwl1ZGVsYXkgKDEwMDApOworICAgICAgfQorCisgICAgLyoKKyAgICAgKiBGaW5hbCBtYXBwaW5nOiBtYXAgYmlnZ2VyIGJhbmsgZmlyc3QKKyAgICAgKi8KKyAgICBtZW1jdGwtPm1lbWNfb3IxID0gKCgtc2l6ZV9iMCkgJiAweEZGRkYwMDAwKSB8IENGR19PUl9USU1JTkdfU0RSQU07CisgICAgbWVtY3RsLT5tZW1jX2JyMSA9IChDRkdfU0RSQU1fQkFTRSAmIEJSX0JBX01TSykgfCBCUl9NU19VUE1BIHwgQlJfVjsKKworICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgcmVnOworICAgICAgCisgICAgICAvKiBhZGp1c3QgcmVmcmVzaCByYXRlIGRlcGVuZGluZyBvbiBTRFJBTSB0eXBlLCBvbmUgYmFuayAqLworICAgICAgcmVnID0gbWVtY3RsLT5tZW1jX21wdHByOworICAgICAgcmVnID4+PSAxOwkvKiByZWR1Y2UgdG8gQ0ZHX01QVFBSXzFCS184SyAvIF80SyAqLworICAgICAgbWVtY3RsLT5tZW1jX21wdHByID0gcmVnOworICAgIH0KKworICAgIHVkZWxheSgxMDAwMCk7CisgICAgCisgICAgcmV0dXJuIChzaXplX2IwKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogQ2hlY2sgbWVtb3J5IHJhbmdlIGZvciB2YWxpZCBSQU0uIEEgc2ltcGxlIG1lbW9yeSB0ZXN0IGRldGVybWluZXMKKyAqIHRoZSBhY3R1YWxseSBhdmFpbGFibGUgUkFNIHNpemUgYmV0d2VlbiBhZGRyZXNzZXMgYGJhc2UnIGFuZAorICogYGJhc2UgKyBtYXhzaXplJy4gU29tZSAobm90IGFsbCkgaGFyZHdhcmUgZXJyb3JzIGFyZSBkZXRlY3RlZDoKKyAqIC0gc2hvcnQgYmV0d2VlbiBhZGRyZXNzIGxpbmVzCisgKiAtIHNob3J0IGJldHdlZW4gZGF0YSBsaW5lcworICovCisKK3N0YXRpYyBsb25nIGludCAKK2RyYW1fc2l6ZSAobG9uZyBpbnQgICBtYW1yX3ZhbHVlLCAKKwkgICBsb25nIGludCAgKmJhc2UsIAorCSAgIGxvbmcgaW50ICAgbWF4c2l6ZSkKK3sKKyAgdm9sYXRpbGUgaW1tYXBfdCAgICAgKmltbWFwICA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisgIHZvbGF0aWxlIG1lbWN0bDh4eF90ICptZW1jdGwgPSAmaW1tYXAtPmltX21lbWN0bDsKKyAgdm9sYXRpbGUgbG9uZyBpbnQgICAgKmFkZHI7CisgIHVsb25nICAgICAgICAgICAgICAgICBjbnQsIHZhbDsKKyAgdWxvbmcgICAgICAgICAgICAgICAgIHNhdmVbMzJdOyAgICAvKiB0byBtYWtlIHRlc3Qgbm9uLWRlc3RydWN0aXZlICovCisgIHVuc2lnbmVkIGNoYXIgICAgICAgICBpID0gMDsKKyAgCisgIG1lbWN0bC0+bWVtY19tYW1yID0gbWFtcl92YWx1ZTsKKyAgCisgIGZvciAoY250ID0gbWF4c2l6ZS9zaXplb2YobG9uZyk7IGNudCA+IDA7IGNudCA+Pj0gMSkgCisgICAgeworICAgICAgYWRkciA9IGJhc2UgKyBjbnQ7ICAgIC8qIHBvaW50ZXIgYXJpdGghICovCisgICAgICAKKyAgICAgIHNhdmVbaSsrXSA9ICphZGRyOworICAgICAgKmFkZHIgICAgID0gfmNudDsKKyAgICB9CisgIAorICAvKiB3cml0ZSAwIHRvIGJhc2UgYWRkcmVzcyAqLworICBhZGRyICAgID0gYmFzZTsKKyAgc2F2ZVtpXSA9ICphZGRyOworICAqYWRkciAgID0gMDsKKyAgCisgIC8qIGNoZWNrIGF0IGJhc2UgYWRkcmVzcyAqLworICBpZiAoICh2YWwgPSAqYWRkcikgIT0gMCApIAorICAgIHsKKyAgICAgICphZGRyID0gc2F2ZVtpXTsKKworICAgICAgcmV0dXJuICgwKTsKKyAgICB9CisgIAorICBmb3IgKGNudCA9IDE7IGNudCA8PSBtYXhzaXplL3NpemVvZihsb25nKTsgY250IDw8PSAxKSAKKyAgICB7CisgICAgICBhZGRyID0gYmFzZSArIGNudDsgICAgLyogcG9pbnRlciBhcml0aCEgKi8KKyAgICAgIAorICAgICAgdmFsICAgPSAqYWRkcjsKKyAgICAgICphZGRyID0gc2F2ZVstLWldOworICAgICAgCisgICAgICBpZiAoIHZhbCAhPSAofmNudCkgKSAKKwl7CisJICByZXR1cm4gKGNudCAqIHNpemVvZihsb25nKSk7CisJfQorICAgIH0KKworICByZXR1cm4gKG1heHNpemUpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQ0ZHX1BBMSAgICAgMHg0MDAwCisjZGVmaW5lIENGR19QQTIgICAgIDB4MjAwMAorCisjZGVmaW5lIENGR19MQktzICAgIChDRkdfUEEyIHwgQ0ZHX1BBMSkKKwordm9pZAorcmVzZXRfcGh5ICh2b2lkKQoreworICB2b2xhdGlsZSBpbW1hcF90ICppbW1yID0gKGltbWFwX3QgKikgQ0ZHX0lNTVI7CisgIAorICAvKgorICAgKiBFbnN1cmUgTEJLIExYVDkwMSBldGhlcm5ldCAxICYgMiA9IDAgLi4uIGZvciBub3JtYWwgbG9vcGJhY2sgaW4gZWZmZWN0CisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vIEFVSSBsb29wYmFjaworICAgKi8KKyAgaW1tci0+aW1faW9wb3J0LmlvcF9wYWRhdCAmPSB+Q0ZHX0xCS3M7ICAvKiBQQURBVCAoTEJLIGV0aCAxJjIgPSAwKSAgICAgICAgKi8KKyAgaW1tci0+aW1faW9wb3J0LmlvcF9wYXBhciAmPSB+Q0ZHX0xCS3M7ICAvKiBQQVBBUiAoMD1nZW5lcmFsIHB1cnBvc2UgSS9PKSAgKi8KKyAgaW1tci0+aW1faW9wb3J0LmlvcF9wYWRpciB8PSAgQ0ZHX0xCS3M7ICAvKiBQQURJUiAoSS9POiAwPWlucHV0LCAxPW91dHB1dCkgKi8KK30KZGlmZiAtLWdpdCBhL2JvYXJkL0xFT1gvZWxwdDg2MC9mbGFzaC5jIGIvYm9hcmQvTEVPWC9lbHB0ODYwL2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyMzhlMQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL0xFT1gvZWxwdDg2MC9mbGFzaC5jCkBAIC0wLDAgKzEsNjE1IEBACisvKgorKio9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoqCisqKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMKKyoqIFRoZSBMRU9YIHRlYW0gPHRlYW1AbGVveC5vcmc+LCBodHRwOi8vd3d3Lmxlb3gub3JnCisqKgorKiogTEVPWC5vcmcgaXMgYWJvdXQgdGhlIGRldmVsb3BtZW50IG9mIGZyZWUgaGFyZHdhcmUgYW5kIHNvZnR3YXJlIHJlc291cmNlcworKiogICBmb3Igc3lzdGVtIG9uIGNoaXAuCisqKgorKiogRGVzY3JpcHRpb246IFUtQm9vdCBwb3J0IG9uIHRoZSBMRU9YJ3MgRUxQVDg2MCBDUFUgYm9hcmQKKyoqIH5+fn5+fn5+fn5+CisqKgorKio9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoqCisqKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisqKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworKiogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyoqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKioKKyoqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKiogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyoqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyoqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisqKgorKiogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyoqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisqKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorKiogTUEgMDIxMTEtMTMwNyBVU0EKKyoqCisqKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworLyoKKyoqIE5vdGUgMTogSW4gdGhpcyBmaWxlLCB5b3UgaGF2ZSB0byBwcm92aWRlIHRoZSBmb2xsb3dpbmcgdmFyaWFibGU6CisqKiAtLS0tLS0KKyoqICAgICAgICAgICAgICBmbGFzaF9pbmZvX3QgICAgZmxhc2hfaW5mb1tDRkdfTUFYX0ZMQVNIX0JBTktTXQorKiogJ2ZsYXNoX2luZm9fdCcgc3RydWN0dXJlIGlzIGRlZmluZWQgaW50byAnaW5jbHVkZS9mbGFzaC5oJworKiogYW5kIGRlZmluZWQgYXMgZXh0ZXJuIGludG8gJ2NvbW1vbi9jbWRfZmxhc2guYycKKyoqCisqKiBOb3RlIDI6IEluIHRoaXMgZmlsZSwgeW91IGhhdmUgdG8gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKyoqIC0tLS0tLQorKiogICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgICBmbGFzaF9pbml0KHZvaWQpCisqKiBjYWxsZWQgZnJvbSAnYm9hcmRfaW5pdF9yKCknIGludG8gJ2NvbW1vbi9ib2FyZC5jJworKioKKyoqICAgICAgICAgICAgICB2b2lkICAgICAgICAgICAgZmxhc2hfcHJpbnRfaW5mbyhmbGFzaF9pbmZvX3QgKmluZm8pCisqKiBjYWxsZWQgZnJvbSAnZG9fZmxpbmZvKCknIGludG8gJ2NvbW1vbi9jbWRfZmxhc2guYycKKyoqCisqKiAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgIGZsYXNoX2VyYXNlKGZsYXNoX2luZm9fdCAqaW5mbywKKyoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICBzX2ZpcnN0LAorKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgIHNfbGFzdCkKKyoqIGNhbGxlZCBmcm9tICdkb19mbGVyYXNlKCknICYgJ2ZsYXNoX3NlY3RfZXJhc2UoKScgaW50byAnY29tbW9uL2NtZF9mbGFzaC5jJworKioKKyoqICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICppbmZvLAorKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y2hhciAgICAgICAgKnNyYywKKyoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxvbmcgICAgICAgICBhZGRyLAorKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bG9uZyAgICAgICAgIGNudCkKKyoqIGNhbGxlZCBmcm9tICdmbGFzaF93cml0ZSgpJyBpbnRvICdjb21tb24vY21kX2ZsYXNoLmMnCisqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bXBjOHh4Lmg+CisKKworI2lmbmRlZglDRkdfRU5WX0FERFIKKyMgIGRlZmluZSBDRkdfRU5WX0FERFIJKENGR19GTEFTSF9CQVNFICsgQ0ZHX0VOVl9PRkZTRVQpCisjZW5kaWYKKworZmxhc2hfaW5mb190CWZsYXNoX2luZm9bQ0ZHX01BWF9GTEFTSF9CQU5LU107IC8qIGluZm8gZm9yIEZMQVNIIGNoaXBzICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEludGVybmFsIEZ1bmN0aW9ucworICovCitzdGF0aWMgdm9pZCAgIGZsYXNoX2dldF9vZmZzZXRzICh1bG9uZyBiYXNlLCBmbGFzaF9pbmZvX3QgKmluZm8pOworc3RhdGljIHVsb25nICBmbGFzaF9nZXRfc2l6ZSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqYWRkciwgZmxhc2hfaW5mb190ICppbmZvKTsKKworc3RhdGljIGludCB3cml0ZV93b3JkIChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGRlc3QsIHVsb25nIGRhdGEpOworc3RhdGljIGludCB3cml0ZV9ieXRlIChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGRlc3QsIHVjaGFyIGRhdGEpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwordW5zaWduZWQgbG9uZyAKK2ZsYXNoX2luaXQgKHZvaWQpCit7CisgIHZvbGF0aWxlIGltbWFwX3QgICAgICppbW1hcCAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworICB2b2xhdGlsZSBtZW1jdGw4eHhfdCAqbWVtY3RsID0gJmltbWFwLT5pbV9tZW1jdGw7CisgIHVuc2lnbmVkIGxvbmcgICAgICAgICBzaXplX2IwOworICBpbnQgaTsKKyAgCisgIC8qIEluaXQ6IG5vIEZMQVNIZXMga25vd24gKi8KKyAgZm9yIChpPTA7IGk8Q0ZHX01BWF9GTEFTSF9CQU5LUzsgKytpKSAKKyAgICB7CisgICAgICBmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKKyAgICB9CisgIAorICAvKiBTdGF0aWMgRkxBU0ggQmFuayBjb25maWd1cmF0aW9uIGhlcmUgLSBGSVhNRSBYWFggKi8KKyAgCisgIHNpemVfYjAgPSBmbGFzaF9nZXRfc2l6ZSAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilGTEFTSF9CQVNFMF9QUkVMSU0sIAorCQkJICAgICZmbGFzaF9pbmZvWzBdKTsKKyAgCisgIGlmICggZmxhc2hfaW5mb1swXS5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOICkgCisgICAgeworICAgICAgcHJpbnRmICgiIyMgVW5rbm93biBGTEFTSCBvbiBCYW5rIDAgLSBTaXplID0gMHglMDhseCA9ICVsZCBNQlxuIiwKKwkgICAgICBzaXplX2IwLCBzaXplX2IwPDwyMCk7CisgICAgfQorICAKKyAgLyogUmVtYXAgRkxBU0ggYWNjb3JkaW5nIHRvIHJlYWwgc2l6ZSAqLworICBtZW1jdGwtPm1lbWNfb3IwID0gQ0ZHX09SX1RJTUlOR19GTEFTSCB8ICgtc2l6ZV9iMCAmIE9SX0FNX01TSyk7CisgIG1lbWN0bC0+bWVtY19icjAgPSAoQ0ZHX0ZMQVNIX0JBU0UgJiBCUl9CQV9NU0spIHwgQlJfTVNfR1BDTSB8IEJSX1BTXzggfCBCUl9WOworICAKKyAgLyogUmUtZG8gc2l6aW5nIHRvIGdldCBmdWxsIGNvcnJlY3QgaW5mbyAqLworICBzaXplX2IwID0gZmxhc2hfZ2V0X3NpemUgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQ0ZHX0ZMQVNIX0JBU0UsIAorCQkJICAgICZmbGFzaF9pbmZvWzBdKTsKKyAgCisgIGZsYXNoX2dldF9vZmZzZXRzIChDRkdfRkxBU0hfQkFTRSwgJmZsYXNoX2luZm9bMF0pOworICAKKyNpZiBDRkdfTU9OSVRPUl9CQVNFID49IENGR19GTEFTSF9CQVNFCisgIC8qIG1vbml0b3IgcHJvdGVjdGlvbiBPTiBieSBkZWZhdWx0ICovCisgIGZsYXNoX3Byb3RlY3QgKEZMQUdfUFJPVEVDVF9TRVQsCisJCSBDRkdfTU9OSVRPUl9CQVNFLAorCQkgQ0ZHX01PTklUT1JfQkFTRSArIENGR19NT05JVE9SX0xFTi0xLAorCQkgJmZsYXNoX2luZm9bMF0pOworI2VuZGlmCisgIAorI2lmZGVmCUNGR19FTlZfSVNfSU5fRkxBU0gKKyAgLyogRU5WIHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLworICBmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCisJCUNGR19FTlZfQUREUiwKKwkJQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TSVpFLTEsCisJCSZmbGFzaF9pbmZvWzBdKTsKKyNlbmRpZgorCisgIGZsYXNoX2luZm9bMF0uc2l6ZSA9IHNpemVfYjA7CisgIAorICByZXR1cm4gKHNpemVfYjApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkIAorZmxhc2hfZ2V0X29mZnNldHMgKHVsb25nICAgICAgICAgIGJhc2UsIAorCQkgICBmbGFzaF9pbmZvX3QgICppbmZvKQoreworICBpbnQgaTsKKworI2RlZmluZSBTRUNUT1JfNjRLQiAgICAweDAwMDEwMDAwCisKKyAgLyogc2V0IHVwIHNlY3RvciBzdGFydCBhZHJlc3MgdGFibGUgKi8KKyAgZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSAKKyAgICB7CisgICAgICBpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoaSAqIFNFQ1RPUl82NEtCKTsKKyAgICB9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZCAKK2ZsYXNoX3ByaW50X2luZm8gKGZsYXNoX2luZm9fdCAqaW5mbykKK3sKKyAgaW50IGk7CisgIAorICBpZiAoIGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04gKSAKKyAgICB7CisgICAgICBwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7CisgICAgICByZXR1cm47CisgICAgfQorCisgIHN3aXRjaCAoIGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0sgKSAKKyAgICB7CisgICAgY2FzZSBGTEFTSF9NQU5fQU1EOglwcmludGYgKCJBTUQgIik7CQlicmVhazsKKyAgICBjYXNlIEZMQVNIX01BTl9GVUo6CXByaW50ZiAoIkZVSklUU1UgIik7CQlicmVhazsKKyAgICBjYXNlIEZMQVNIX01BTl9TVE06IHByaW50ZiAoIlNUTSAoVGhvbXNvbikgIik7ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoJCXByaW50ZiAoIlVua25vd24gVmVuZG9yICIpOwlicmVhazsKKyAgICB9CisgIAorICBzd2l0Y2ggKCBpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLICkgCisgICAgeworICAgIGNhc2UgRkxBU0hfQU0wNDA6ICAgcHJpbnRmICgiQU0yOUYwNDAgICAoNCBNYml0cylcbiIpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoJICAgICAgICBwcmludGYgKCJVbmtub3duIENoaXAgVHlwZVxuIik7CisgICAgICBicmVhazsKKyAgICB9CisgIAorICBwcmludGYgKCIgIFNpemU6ICVsZCBLQiBpbiAlZCBTZWN0b3JzXG4iLCAKKwkgIGluZm8tPnNpemUgPj4gMTAsIGluZm8tPnNlY3Rvcl9jb3VudCk7CisgIAorICBwcmludGYgKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7CisgIGZvciAoaT0wOyBpPGluZm8tPnNlY3Rvcl9jb3VudDsgKytpKSAKKyAgICB7CisgICAgICBpZiAoKGkgJSA1KSA9PSAwKQorCXByaW50ZiAoIlxuICAgIik7CisgICAgICBwcmludGYgKCIgJTA4bFglcyIsCisJICAgICAgaW5mby0+c3RhcnRbaV0sCisJICAgICAgaW5mby0+cHJvdGVjdFtpXSA/ICIgKFJPKSIgOiAiICAgICAiCisJICAgICAgKTsKKyAgICB9CisgIHByaW50ZiAoIlxuIik7CisKKyAgcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY29kZSBjYW5ub3QgYmUgcnVuIGZyb20gRkxBU0ghCisgKi8KKworc3RhdGljIHVsb25nIAorZmxhc2hfZ2V0X3NpemUgKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmFkZHIsIAorICAgICAgICAgICAgICAgIGZsYXNoX2luZm9fdCAgICAgICAgICAgKmluZm8pCit7CisgIHNob3J0IGk7CisgIHVjaGFyIHZhbHVlOworICB1bG9uZyBiYXNlID0gKHVsb25nKWFkZHI7CisKKyAgLyogV3JpdGUgYXV0byBzZWxlY3QgY29tbWFuZDogcmVhZCBNYW51ZmFjdHVyZXIgSUQgKi8KKyAgYWRkclsweDA1NTVdID0gMHhBQTsKKyAgYWRkclsweDAyQUFdID0gMHg1NTsKKyAgYWRkclsweDA1NTVdID0gMHg5MDsKKyAgCisgIHZhbHVlID0gYWRkclswXTsKKworICBzd2l0Y2ggKCB2YWx1ZSApIAorICAgIHsKKyAgICAgIC8qICAgIGNhc2UgQU1EX01BTlVGQUNUOiAqLworICAgIGNhc2UgMHgwMToKKyAgICAgIGluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0FNRDsKKyAgICAgIGJyZWFrOworICAgICAgLyogICAgY2FzZSBGVUpfTUFOVUZBQ1Q6ICovCisgICAgY2FzZSAweDA0OgorICAgICAgaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fRlVKOworICAgICAgYnJlYWs7CisgICAgICAvKiAgICBjYXNlIFNUTV9NQU5VRkFDVDogKi8KKyAgICBjYXNlIDB4MjA6CisgICAgICBpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9TVE07CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CisgICAgICBpbmZvLT5zZWN0b3JfY291bnQgPSAwOworICAgICAgaW5mby0+c2l6ZSA9IDA7CisgICAgICByZXR1cm4gKDApOwkJCS8qIG5vIG9yIHVua25vd24gZmxhc2gJKi8KKyAgICB9CisgIAorICB2YWx1ZSA9IGFkZHJbMV07CQkJLyogZGV2aWNlIElECQkqLworICAKKyAgc3dpdGNoICggdmFsdWUgKSAKKyAgICB7CisgICAgY2FzZSBTVE1fSURfRjA0MEI6CisgICAgY2FzZSBBTURfSURfRjA0MEI6CisgICAgICBpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTA0MDsgICAgLyogNCBNYml0cyA9IDUxMmsgKiA4ICAqLworICAgICAgaW5mby0+c2VjdG9yX2NvdW50ID0gODsKKyAgICAgIGluZm8tPnNpemUgPSAweDAwMDgwMDAwOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworICAgICAgcmV0dXJuICgwKTsJCQkvKiA9PiBubyBvciB1bmtub3duIGZsYXNoICovCisgICAgfQorCisgIC8qIHNldCB1cCBzZWN0b3Igc3RhcnQgYWRyZXNzIHRhYmxlICovCisgIGZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgCisgICAgeworICAgICAgaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiAweDAwMDEwMDAwKTsKKyAgICB9CisgIAorICAvKiBjaGVjayBmb3IgcHJvdGVjdGVkIHNlY3RvcnMgKi8KKyAgZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSAKKyAgICB7CisgICAgICAvKiByZWFkIHNlY3RvciBwcm90ZWN0aW9uIGF0IHNlY3RvciBhZGRyZXNzLCAoQTcgLi4gQTApID0gMHgwMiAqLworICAgICAgLyogRDAgPSAxIGlmIHByb3RlY3RlZCAqLworICAgICAgYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKGluZm8tPnN0YXJ0W2ldKTsKKyAgICAgIGluZm8tPnByb3RlY3RbaV0gPSBhZGRyWzJdICYgMTsKKyAgICB9CisKKyAgLyoKKyAgICogUHJldmVudCB3cml0ZXMgdG8gdW5pbml0aWFsaXplZCBGTEFTSC4KKyAgICovCisgIGlmICggaW5mby0+Zmxhc2hfaWQgIT0gRkxBU0hfVU5LTk9XTiApIAorICAgIHsKKyAgICAgIGFkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKWluZm8tPnN0YXJ0WzBdOworICAgICAgCisgICAgICAqYWRkciA9IDB4RjA7CS8qIHJlc2V0IGJhbmsgKi8KKyAgICB9CisgIAorICByZXR1cm4gKGluZm8tPnNpemUpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitpbnQKK2ZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgICppbmZvLCAKKwkgICAgIGludCAgICAgICAgICAgIHNfZmlyc3QsIAorCSAgICAgaW50ICAgICAgICAgICAgc19sYXN0KQoreworICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICphZGRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoaW5mby0+c3RhcnRbMF0pOworICBpbnQgZmxhZywgcHJvdCwgc2VjdCwgbF9zZWN0OworICB1bG9uZyBzdGFydCwgbm93LCBsYXN0OworICAKKyAgaWYgKCAoc19maXJzdCA8IDApIHx8IChzX2ZpcnN0ID4gc19sYXN0KSApIAorICAgIHsKKyAgICAgIGlmICggaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTiApIAorCXsKKwkgIHByaW50ZiAoIi0gbWlzc2luZ1xuIik7CisJfSAKKyAgICAgIGVsc2UgCisJeworCSAgcHJpbnRmICgiLSBubyBzZWN0b3JzIHRvIGVyYXNlXG4iKTsKKwl9CisgICAgICByZXR1cm4gKCAxICk7CisgICAgfQorCisgIGlmICggKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHx8CisgICAgICAgKGluZm8tPmZsYXNoX2lkID4gRkxBU0hfQU1EX0NPTVApICkgCisgICAgeworICAgICAgcHJpbnRmICgiQ2FuJ3QgZXJhc2UgdW5rbm93biBmbGFzaCB0eXBlICUwOGx4IC0gYWJvcnRlZFxuIiwKKwkgICAgICBpbmZvLT5mbGFzaF9pZCk7CisgICAgICByZXR1cm4gKCAxICk7CisgICAgfQorICAKKyAgcHJvdCA9IDA7CisgIGZvciAoc2VjdD1zX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7ICsrc2VjdCkgCisgICAgeworICAgICAgaWYgKCBpbmZvLT5wcm90ZWN0W3NlY3RdICkgCisJeworCSAgcHJvdCsrOworCX0KKyAgICB9CisgIAorICBpZiAoIHByb3QgKSAKKyAgICB7CisgICAgICBwcmludGYgKCItIFdhcm5pbmc6ICVkIHByb3RlY3RlZCBzZWN0b3JzIHdpbGwgbm90IGJlIGVyYXNlZCFcbiIsIHByb3QpOworICAgIH0gCisgIGVsc2UgCisgICAgeworICAgICAgcHJpbnRmICgiXG4iKTsKKyAgICB9CisgIAorICBsX3NlY3QgPSAtMTsKKyAgCisgIC8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLworICBmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CisgIAorICBhZGRyWzB4MDU1NV0gPSAweEFBOworICBhZGRyWzB4MDJBQV0gPSAweDU1OworICBhZGRyWzB4MDU1NV0gPSAweDgwOworICBhZGRyWzB4MDU1NV0gPSAweEFBOworICBhZGRyWzB4MDJBQV0gPSAweDU1OworICAKKyAgLyogU3RhcnQgZXJhc2Ugb24gdW5wcm90ZWN0ZWQgc2VjdG9ycyAqLworICBmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7IHNlY3QrKykgCisgICAgeworICAgICAgaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gPT0gMCkgICAgLyogbm90IHByb3RlY3RlZCAqLworCXsKKwkgIGFkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShpbmZvLT5zdGFydFtzZWN0XSk7CisJICBhZGRyWzBdID0gMHgzMDsKKwkgIGxfc2VjdCA9IHNlY3Q7CisJfQorICAgIH0KKyAgCisgIC8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLworICBpZiAoIGZsYWcgKQorICAgIGVuYWJsZV9pbnRlcnJ1cHRzKCk7CisgIAorICAvKiB3YWl0IGF0IGxlYXN0IDgwdXMgLSBsZXQncyB3YWl0IDEgbXMgKi8KKyAgdWRlbGF5ICgxMDAwKTsKKyAgCisgIC8qCisgICAqIFdlIHdhaXQgZm9yIHRoZSBsYXN0IHRyaWdnZXJlZCBzZWN0b3IKKyAgICovCisgIGlmICggbF9zZWN0IDwgMCApCisgICAgZ290byBET05FOworICAKKyAgc3RhcnQgPSBnZXRfdGltZXIgKDApOworICBsYXN0ICA9IHN0YXJ0OworICBhZGRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoaW5mby0+c3RhcnRbbF9zZWN0XSk7CisgIHdoaWxlICggKGFkZHJbMF0gJiAweDgwKSAhPSAweDgwICkgCisgICAgeworICAgICAgaWYgKCAobm93ID0gZ2V0X3RpbWVyKHN0YXJ0KSkgPiBDRkdfRkxBU0hfRVJBU0VfVE9VVCApIAorCXsKKwkgIHByaW50ZiAoIlRpbWVvdXRcbiIpOworCSAgcmV0dXJuICggMSApOworCX0KKyAgICAgIC8qIHNob3cgdGhhdCB3ZSdyZSB3YWl0aW5nICovCisgICAgICBpZiAoIChub3cgLSBsYXN0KSA+IDEwMDAgKSAgICAgLyogZXZlcnkgc2Vjb25kICovCisJeworCSAgcHV0YyAoJy4nKTsKKwkgIGxhc3QgPSBub3c7CisJfQorICAgIH0KKyAgCitET05FOgorICAvKiByZXNldCB0byByZWFkIG1vZGUgKi8KKyAgYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopaW5mby0+c3RhcnRbMF07CisgIGFkZHJbMF0gPSAweEYwOwkvKiByZXNldCBiYW5rICovCisgIAorICBwcmludGYgKCIgZG9uZVxuIik7CisgIAorICByZXR1cm4gKCAwICk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvcHkgbWVtb3J5IHRvIGZsYXNoLCByZXR1cm5zOgorICogMCAtIE9LCisgKiAxIC0gd3JpdGUgdGltZW91dAorICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKKyAqLworCitpbnQgCit3cml0ZV9idWZmIChmbGFzaF9pbmZvX3QgICppbmZvLCAKKwkgICAgdWNoYXIgICAgICAgICAqc3JjLCAKKwkgICAgdWxvbmcgICAgICAgICAgYWRkciwgCisJICAgIHVsb25nICAgICAgICAgIGNudCkKK3sKKyAgdWxvbmcgY3AsIHdwLCBkYXRhOworICB1Y2hhciBiZGF0YTsKKyAgaW50IGksIGwsIHJjOworCisgIGlmICggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spID09IEZMQVNIX0FNMDQwICkKKyAgICB7CisgICAgICAvKiBXaWR0aCBvZiB0aGUgZGF0YSBidXM6IDggYml0cyAqLworCisgICAgICB3cCA9IGFkZHI7CisgICAgICAKKyAgICAgIHdoaWxlICggY250ICkKKwl7CisJICBiZGF0YSA9ICpzcmMrKzsKKwkgIAorCSAgaWYgKCAocmMgPSB3cml0ZV9ieXRlKGluZm8sIHdwLCBiZGF0YSkpICE9IDAgKQorCSAgICB7CisJICAgICAgcmV0dXJuIChyYyk7CisJICAgIH0KKwkgIAorCSAgKyt3cDsKKwkgIC0tY250OworCX0KKworICAgICAgcmV0dXJuICggMCApOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFdpZHRoIG9mIHRoZSBkYXRhIGJ1czogMzIgYml0cyAqLworCisgICAgICB3cCA9IChhZGRyICYgfjMpOwkvKiBnZXQgbG93ZXIgd29yZCBhbGlnbmVkIGFkZHJlc3MgKi8KKyAgICAgIAorICAgICAgLyoKKyAgICAgICAqIGhhbmRsZSB1bmFsaWduZWQgc3RhcnQgYnl0ZXMKKyAgICAgICAqLworICAgICAgaWYgKCAobCA9IGFkZHIgLSB3cCkgIT0gMCApIAorCXsKKwkgIGRhdGEgPSAwOworCSAgZm9yIChpPTAsIGNwPXdwOyBpPGw7ICsraSwgKytjcCkgCisJICAgIHsKKwkgICAgICBkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKKwkgICAgfQorCSAgZm9yICg7IGk8NCAmJiBjbnQ+MDsgKytpKSAKKwkgICAgeworCSAgICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwkgICAgICAtLWNudDsKKwkgICAgICArK2NwOworCSAgICB9CisJICBmb3IgKDsgY250PT0wICYmIGk8NDsgKytpLCArK2NwKSAKKwkgICAgeworCSAgICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOworCSAgICB9CisJICAKKwkgIGlmICggKHJjID0gd3JpdGVfd29yZChpbmZvLCB3cCwgZGF0YSkpICE9IDAgKSAKKwkgICAgeworCSAgICAgIHJldHVybiAocmMpOworCSAgICB9CisJICB3cCArPSA0OworCX0KKyAgICAgIAorICAgICAgLyoKKyAgICAgICAqIGhhbmRsZSB3b3JkIGFsaWduZWQgcGFydAorICAgICAgICovCisgICAgICB3aGlsZSAoIGNudCA+PSA0ICkgCisJeworCSAgZGF0YSA9IDA7CisJICBmb3IgKGk9MDsgaTw0OyArK2kpIAorCSAgICB7CisJICAgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOworCSAgICB9CisJICBpZiAoIChyYyA9IHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKSAhPSAwICkgCisJICAgIHsKKwkgICAgICByZXR1cm4gKHJjKTsKKwkgICAgfQorCSAgd3AgICs9IDQ7CisJICBjbnQgLT0gNDsKKwl9CisgICAgICAKKyAgICAgIGlmICggY250ID09IDAgKSAKKwl7CisJICByZXR1cm4gKDApOworCX0KKyAgICAgIAorICAgICAgLyoKKyAgICAgICAqIGhhbmRsZSB1bmFsaWduZWQgdGFpbCBieXRlcworICAgICAgICovCisgICAgICBkYXRhID0gMDsKKyAgICAgIGZvciAoaT0wLCBjcD13cDsgaTw0ICYmIGNudD4wOyArK2ksICsrY3ApIAorCXsKKwkgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwkgIC0tY250OworCX0KKyAgICAgIGZvciAoOyBpPDQ7ICsraSwgKytjcCkgCisJeworCSAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7CisJfQorICAgICAgCisgICAgICByZXR1cm4gKHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKTsKKyAgICB9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFdyaXRlIGEgd29yZCB0byBGbGFzaCwgcmV0dXJuczoKKyAqIDAgLSBPSworICogMSAtIHdyaXRlIHRpbWVvdXQKKyAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCisgKi8KK3N0YXRpYyBpbnQgCit3cml0ZV93b3JkIChmbGFzaF9pbmZvX3QgICppbmZvLCAKKwkgICAgdWxvbmcgICAgICAgICAgZGVzdCwgCisJICAgIHVsb25nICAgICAgICAgIGRhdGEpCit7CisgIHZ1X2xvbmcgKmFkZHIgPSAodnVfbG9uZyopKGluZm8tPnN0YXJ0WzBdKTsKKyAgdWxvbmcgc3RhcnQ7CisgIGludCBmbGFnOworICAKKyAgLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCisgIGlmICggKCooKHZ1X2xvbmcgKilkZXN0KSAmIGRhdGEpICE9IGRhdGEgKSAKKyAgICB7CisgICAgICByZXR1cm4gKDIpOworICAgIH0KKyAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCisgIGZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKKyAgCisgIGFkZHJbMHgwNTU1XSA9IDB4MDBBQTAwQUE7CisgIGFkZHJbMHgwMkFBXSA9IDB4MDA1NTAwNTU7CisgIGFkZHJbMHgwNTU1XSA9IDB4MDBBMDAwQTA7CisgIAorICAqKCh2dV9sb25nICopZGVzdCkgPSBkYXRhOworICAKKyAgLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCisgIGlmICggZmxhZyApCisgICAgZW5hYmxlX2ludGVycnVwdHMoKTsKKworICAvKiBkYXRhIHBvbGxpbmcgZm9yIEQ3ICovCisgIHN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKKyAgd2hpbGUgKCAoKigodnVfbG9uZyAqKWRlc3QpICYgMHgwMDgwMDA4MCkgIT0gKGRhdGEgJiAweDAwODAwMDgwKSApIAorICAgIHsKKyAgICAgIGlmICggZ2V0X3RpbWVyKHN0YXJ0KSA+IENGR19GTEFTSF9XUklURV9UT1VUICkgCisJeworCSAgcmV0dXJuICgxKTsKKwl9CisgICAgfQorCisgIHJldHVybiAoMCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFdyaXRlIGEgYnl0ZSB0byBGbGFzaCwgcmV0dXJuczoKKyAqIDAgLSBPSworICogMSAtIHdyaXRlIHRpbWVvdXQKKyAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCisgKi8KK3N0YXRpYyBpbnQgCit3cml0ZV9ieXRlIChmbGFzaF9pbmZvX3QgICppbmZvLCAKKwkgICAgdWxvbmcgICAgICAgICAgZGVzdCwgCisJICAgIHVjaGFyICAgICAgICAgIGRhdGEpCit7CisgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmFkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShpbmZvLT5zdGFydFswXSk7CisgIHVsb25nICBzdGFydDsKKyAgaW50ICAgIGZsYWc7CisgIAorICAvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KKyAgaWYgKCAoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKWRlc3QpICYgZGF0YSkgIT0gZGF0YSApIAorICAgIHsKKyAgICAgIHJldHVybiAoMik7CisgICAgfQorICAvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KKyAgZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOworICAKKyAgYWRkclsweDA1NTVdID0gMHhBQTsKKyAgYWRkclsweDAyQUFdID0gMHg1NTsKKyAgYWRkclsweDA1NTVdID0gMHhBMDsKKyAgCisgICooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilkZXN0KSA9IGRhdGE7CisgIAorICAvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KKyAgaWYgKCBmbGFnICkKKyAgICBlbmFibGVfaW50ZXJydXB0cygpOworCisgIC8qIGRhdGEgcG9sbGluZyBmb3IgRDcgKi8KKyAgc3RhcnQgPSBnZXRfdGltZXIgKDApOworICB3aGlsZSAoICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopZGVzdCkgJiAweDgwKSAhPSAoZGF0YSAmIDB4ODApICkgCisgICAgeworICAgICAgaWYgKCBnZXRfdGltZXIoc3RhcnQpID4gQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQgKSAKKwl7CisJICByZXR1cm4gKDEpOworCX0KKyAgICB9CisKKyAgcmV0dXJuICgwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCmRpZmYgLS1naXQgYS9ib2FyZC9MRU9YL2VscHQ4NjAvdS1ib290LmxkcyBiL2JvYXJkL0xFT1gvZWxwdDg2MC91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3OTQ1ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9MRU9YL2VscHQ4NjAvdS1ib290LmxkcwpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyoqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqKgorKiogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzCisqKiBUaGUgTEVPWCB0ZWFtIDx0ZWFtQGxlb3gub3JnPiwgaHR0cDovL3d3dy5sZW94Lm9yZworKioKKyoqIExFT1gub3JnIGlzIGFib3V0IHRoZSBkZXZlbG9wbWVudCBvZiBmcmVlIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSByZXNvdXJjZXMKKyoqICAgZm9yIHN5c3RlbSBvbiBjaGlwLgorKioKKyoqIERlc2NyaXB0aW9uOiBVLUJvb3QgcG9ydCBvbiB0aGUgTEVPWCdzIEVMUFQ4NjAgQ1BVIGJvYXJkCisqKiB+fn5+fn5+fn5+fgorKioKKyoqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqKgorKiogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKiogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyoqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisqKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyoqCisqKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyoqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisqKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisqKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKioKKyoqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKiogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyoqIE1BIDAyMTExLTEzMDcgVVNBCisqKgorKio9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisKK09VVFBVVF9BUkNIKHBvd2VycGMpCitTRUFSQ0hfRElSKC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xvY2FsL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9wb3dlcnBjLWFueS1lbGYvbGliKTsKKy8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/CisgICBfX0RZTkFNSUMgPSAwOyAgICAqLworU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSArIFNJWkVPRl9IRUFERVJTOworICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KKyAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9CisgIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9CisgIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9CisgIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KKyAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkgCX0KKyAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQorICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKSAJfQorICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkgCX0KKyAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKSAJfQorICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KKyAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQorICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9CisgIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9CisgIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KKyAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KKyAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9CisgIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KKyAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9CisgIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KKyAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KKyAgLnBsdCA6IHsgKigucGx0KSB9CisgIC50ZXh0ICAgICAgOgorICB7CisgICAgLyogV0FSTklORyAtIHRoZSBmb2xsb3dpbmcgaXMgaGFuZC1vcHRpbWl6ZWQgdG8gZml0IHdpdGhpbgkqLworICAgIC8qIHRoZSBzZWN0b3IgbGF5b3V0IG9mIG91ciBmbGFzaCBjaGlwcyEJWFhYIEZJWE1FIFhYWAkqLworCisgICAgY3B1L21wYzh4eC9zdGFydC5vCQkJKC50ZXh0KQorICAgIGNvbW1vbi9kbG1hbGxvYy5vCQkJKC50ZXh0KQorICAgIGxpYl9wcGMvcHBjc3RyaW5nLm8JCQkoLnRleHQpCisgICAgbGliX2dlbmVyaWMvdnNwcmludGYubwkJKC50ZXh0KQorICAgIGxpYl9nZW5lcmljL2NyYzMyLm8JCQkoLnRleHQpCisgICAgbGliX2dlbmVyaWMvemxpYi5vCQkJKC50ZXh0KQorICAgIGxpYl9nZW5lcmljL3N0cmluZy5vCQkoLnRleHQpCisgICAgbGliX3BwYy9jYWNoZS5vCQkJKC50ZXh0KQorICAgIGxpYl9wcGMvZXh0YWJsZS5vCQkJKC50ZXh0KQorICAgIGxpYl9wcGMvdGltZS5vCQkJKC50ZXh0KQorICAgIGxpYl9wcGMvdGlja3MubwkJCSgudGV4dCkKKworICAgIC4gPSBlbnZfb2Zmc2V0OworICAgIGNvbW1vbi9lbnZpcm9ubWVudC5vCQkoLnRleHQpCisKKyAgICAqKC50ZXh0KQorICAgICooLmZpeHVwKQorICAgICooLmdvdDEpCisgIH0KKyAgX2V0ZXh0ID0gLjsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICA6CisgIHsKKyAgICAqKC5yb2RhdGEpCisgICAgKigucm9kYXRhMSkKKyAgfQorICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCisgIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KKyAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQorCisgIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLworICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKKyAgX2Vyb3RleHQgPSAuOworICBQUk9WSURFIChlcm90ZXh0ID0gLik7CisgIC5yZWxvYyAgIDoKKyAgeworICAgICooLmdvdCkKKyAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICooLmdvdDIpCisgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgKiguZml4dXApCisgIH0KKyAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOworICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOworCisgIC5kYXRhICAgIDoKKyAgeworICAgICooLmRhdGEpCisgICAgKiguZGF0YTEpCisgICAgKiguc2RhdGEpCisgICAgKiguc2RhdGEyKQorICAgICooLmR5bmFtaWMpCisgICAgQ09OU1RSVUNUT1JTCisgIH0KKyAgX2VkYXRhICA9ICAuOworICBQUk9WSURFIChlZGF0YSA9IC4pOworCisgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CisgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQorICBfX3N0b3BfX19leF90YWJsZSA9IC47CisKKyAgLiA9IEFMSUdOKDI1Nik7CisgIF9faW5pdF9iZWdpbiA9IC47CisgIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQorICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KKyAgLiA9IEFMSUdOKDI1Nik7CisgIF9faW5pdF9lbmQgPSAuOworCisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgLmJzcyAgICAgICA6CisgIHsKKyAgICooLnNic3MpICooLnNjb21tb24pCisgICAqKC5keW5ic3MpCisgICAqKC5ic3MpCisgICAqKENPTU1PTikKKyAgfQorICBfZW5kID0gLiA7CisgIFBST1ZJREUgKGVuZCA9IC4pOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTEVPWC9lbHB0ODYwL3UtYm9vdC5sZHMuZGVidWcgYi9ib2FyZC9MRU9YL2VscHQ4NjAvdS1ib290Lmxkcy5kZWJ1ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODEyMzVmCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvTEVPWC9lbHB0ODYwL3UtYm9vdC5sZHMuZGVidWcKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisqKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKioKKyoqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMworKiogVGhlIExFT1ggdGVhbSA8dGVhbUBsZW94Lm9yZz4sIGh0dHA6Ly93d3cubGVveC5vcmcKKyoqCisqKiBMRU9YLm9yZyBpcyBhYm91dCB0aGUgZGV2ZWxvcG1lbnQgb2YgZnJlZSBoYXJkd2FyZSBhbmQgc29mdHdhcmUgcmVzb3VyY2VzCisqKiAgIGZvciBzeXN0ZW0gb24gY2hpcC4KKyoqCisqKiBEZXNjcmlwdGlvbjogVS1Cb290IHBvcnQgb24gdGhlIExFT1gncyBFTFBUODYwIENQVSBib2FyZAorKiogfn5+fn5+fn5+fn4KKyoqCisqKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKioKKyoqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyoqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisqKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorKiogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisqKgorKiogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisqKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKiogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKiogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyoqCisqKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKiogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyoqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisqKiBNQSAwMjExMS0xMzA3IFVTQQorKioKKyoqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworCitPVVRQVVRfQVJDSChwb3dlcnBjKQorU0VBUkNIX0RJUigvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvcG93ZXJwYy1hbnktZWxmL2xpYik7CisvKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPworICAgX19EWU5BTUlDID0gMDsgICAgKi8KK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKKyAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9CisgIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQorICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQorICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQorICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9CisgIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpIAl9CisgIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KKyAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkgCX0KKyAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpIAl9CisgIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkgCX0KKyAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9CisgIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KKyAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQorICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQorICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9CisgIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9CisgIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQorICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9CisgIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQorICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9CisgIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9CisgIC5wbHQgOiB7ICooLnBsdCkgfQorICAudGV4dCAgICAgIDoKKyAgeworICAgIC8qIFdBUk5JTkcgLSB0aGUgZm9sbG93aW5nIGlzIGhhbmQtb3B0aW1pemVkIHRvIGZpdCB3aXRoaW4JKi8KKyAgICAvKiB0aGUgc2VjdG9yIGxheW91dCBvZiBvdXIgZmxhc2ggY2hpcHMhCVhYWCBGSVhNRSBYWFgJKi8KKworICAgIGNwdS9tcGM4eHgvc3RhcnQubwkJKC50ZXh0KQorICAgIGNvbW1vbi9kbG1hbGxvYy5vCQkoLnRleHQpCisgICAgbGliX2dlbmVyaWMvdnNwcmludGYubwkoLnRleHQpCisgICAgbGliX2dlbmVyaWMvY3JjMzIubwkJKC50ZXh0KQorCisgICAgLiA9IGVudl9vZmZzZXQ7CisgICAgY29tbW9uL2Vudmlyb25tZW50Lm8JKC50ZXh0KQorCisgICAgKigudGV4dCkKKyAgICAqKC5maXh1cCkKKyAgICAqKC5nb3QxKQorICB9CisgIF9ldGV4dCA9IC47CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgOgorICB7CisgICAgKigucm9kYXRhKQorICAgICooLnJvZGF0YTEpCisgIH0KKyAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAorICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9CisgIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KKworICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KKyAgLiA9ICguICsgMHgwRkZGKSAmIDB4RkZGRkYwMDA7CisgIF9lcm90ZXh0ID0gLjsKKyAgUFJPVklERSAoZXJvdGV4dCA9IC4pOworICAucmVsb2MgICA6CisgIHsKKyAgICAqKC5nb3QpCisgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAqKC5nb3QyKQorICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICooLmZpeHVwKQorICB9CisgIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKKyAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKKworICAuZGF0YSAgICA6CisgIHsKKyAgICAqKC5kYXRhKQorICAgICooLmRhdGExKQorICAgICooLnNkYXRhKQorICAgICooLnNkYXRhMikKKyAgICAqKC5keW5hbWljKQorICAgIENPTlNUUlVDVE9SUworICB9CisgIF9lZGF0YSAgPSAgLjsKKyAgUFJPVklERSAoZWRhdGEgPSAuKTsKKworICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOworICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KKyAgX19zdG9wX19fZXhfdGFibGUgPSAuOworCisgIC4gPSBBTElHTig0MDk2KTsKKyAgX19pbml0X2JlZ2luID0gLjsKKyAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9CisgIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQorICAuID0gQUxJR04oNDA5Nik7CisgIF9faW5pdF9lbmQgPSAuOworCisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgLmJzcyAgICAgICA6CisgIHsKKyAgICooLnNic3MpICooLnNjb21tb24pCisgICAqKC5keW5ic3MpCisgICAqKC5ic3MpCisgICAqKENPTU1PTikKKyAgfQorICBfZW5kID0gLiA7CisgIFBST1ZJREUgKGVuZCA9IC4pOworfQorCmRpZmYgLS1naXQgYS9ib2FyZC9jcGM0NS9NYWtlZmlsZSBiL2JvYXJkL2NwYzQ1L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNjZlMzIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9jcGM0NS9NYWtlZmlsZQpAQCAtMCwwICsxLDQwIEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMS0yMDAzCisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSBsaWIkKEJPQVJEKS5hCisKK09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gcGx4OTAzMC5vCisKKyQoTElCKToJLmRlcGVuZCAkKE9CSlMpCisJJChBUikgY3J2ICRAICReCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQorCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisKK3NpbmNsdWRlIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvY3BjNDUvY29uZmlnLm1rIGIvYm9hcmQvY3BjNDUvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmOWQ5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9jcGM0NS9jb25maWcubWsKQEAgLTAsMCArMSwzNiBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwMworIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCisjCisjIENQQzQ1IGJvYXJkCisjCisKKworaWZlcSAoJChDT05GSUdfQk9PVF9ST00pLHkpCisJVEVYVF9CQVNFIDo9IDB4RkZGMDAwMDAKKwlQTEFURk9STV9DUFBGTEFHUyArPSAtRENPTkZJR19CT09UX1JPTQorZWxzZQorCVRFWFRfQkFTRSA6PSAweEZGRjAwMDAwCitlbmRpZgorCitQTEFURk9STV9DUFBGTEFHUyArPSAtRFRFWFRfQkFTRT0kKFRFWFRfQkFTRSkgLUkkKFRPUERJUikKZGlmZiAtLWdpdCBhL2JvYXJkL2NwYzQ1L2NwYzQ1LmMgYi9ib2FyZC9jcGM0NS9jcGM0NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMDY3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9jcGM0NS9jcGM0NS5jCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAxCisgKiBSb2IgVGF5bG9yLCBGbHlpbmcgUGlnIFN5c3RlbXMuIHJvYnRAZmx5aW5ncGlnLmNvbS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bXBjODI0eC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxwY2kuaD4KKworaW50IHN5c0NvbnRyb2xEaXNwbGF5KGludCBkaWdpdCwgdWNoYXIgYXNjaWlfY29kZSk7CQkJCitleHRlcm4gdm9pZCBQbHg5MDMwSW5pdCh2b2lkKTsKKworCS8qIFdlIGhhdmUgdG8gY2xlYXIgdGhlIGluaXRpYWwgZGF0YSBhcmVhIGhlcmUuIENvdWxkbid0IGhhdmUgZG9uZSBpdAorCSAqIGVhcmxpZXIgYmVjYXVzZSBEUkFNIGhhZCBub3QgYmVlbiBpbml0aWFsaXplZC4KKwkgKi8KK2ludCBib2FyZF9wcmVfaW5pdCh2b2lkKQoreworCisJLyogZW5hYmxlIERVQUwgVUFSVCBNb2RlIG9uIENQQzQ1ICovCisJKih1Y2hhciopRFVBUlRfRENSIHw9IDB4MTsJLyogc2V0IERDTSBiaXQgKi8KKworCXJldHVybiAwOworfQorCitpbnQgY2hlY2tib2FyZCh2b2lkKQoreworLyoKKwljaGFyICByZXZpc2lvbiA9IEJPQVJEX1JFVjsKKyovCisJdWxvbmcgYnVzZnJlcSAgPSBnZXRfYnVzX2ZyZXEoMCk7CisJY2hhciAgYnVmWzMyXTsKKworCXByaW50ZigiQ1BDNDUgIik7CisvKgorCXByaW50ZigiUmV2aXNpb24gJWQgIiwgcmV2aXNpb24pOworKi8KKwlwcmludGYoIkxvY2FsIEJ1cyBhdCAlcyBNSHpcbiIsIHN0cm1oeihidWYsIGJ1c2ZyZXEpKTsKKworCXJldHVybiAwOworfQorCitsb25nIGludCBpbml0ZHJhbShpbnQgYm9hcmRfdHlwZSkKK3sKKwlpbnQgICAgICAgICAgICAgIGksIGNudDsKKwl2b2xhdGlsZSB1Y2hhciAqIGJhc2UgICAgICA9IENGR19TRFJBTV9CQVNFOworCXZvbGF0aWxlIHVsb25nICogYWRkcjsKKwl1bG9uZyAgICAgICAgICAgIHNhdmVbMzJdOworCXVsb25nICAgICAgICAgICAgdmFsLCByZXQgID0gMDsKKworCWZvciAoaT0wLCBjbnQ9KENGR19NQVhfUkFNX1NJWkUgLyBzaXplb2YobG9uZykpID4+IDE7IGNudCA+IDA7IGNudCA+Pj0gMSkgeworCisJCWFkZHIgPSAodm9sYXRpbGUgdWxvbmcgKiliYXNlICsgY250OworCQlzYXZlW2krK10gPSAqYWRkcjsKKwkJKmFkZHIgPSB+Y250OworCX0KKworCWFkZHIgPSAodm9sYXRpbGUgdWxvbmcgKiliYXNlOworCXNhdmVbaV0gPSAqYWRkcjsKKwkqYWRkciA9IDA7CisKKwlpZiAoKmFkZHIgIT0gMCkgeworCQkqYWRkciA9IHNhdmVbaV07CisJCWdvdG8gRG9uZTsKKwl9CisKKwlmb3IgKGNudCA9IDE7IGNudCA8PSBDRkdfTUFYX1JBTV9TSVpFIC8gc2l6ZW9mKGxvbmcpOyBjbnQgPDw9IDEpIHsKKwkJYWRkciA9ICh2b2xhdGlsZSB1bG9uZyAqKWJhc2UgKyBjbnQ7CisJCXZhbCA9ICphZGRyOworCQkqYWRkciA9IHNhdmVbLS1pXTsKKwkJaWYgKHZhbCAhPSB+Y250KSB7CisJCQl1bG9uZyBuZXdfYmFuazBfZW5kID0gY250ICogc2l6ZW9mKGxvbmcpIC0gMTsKKwkJCXVsb25nIG1lYXIxICA9IG1wYzgyNHhfbXBjMTA3X2dldHJlZyhNRUFSMSk7CisJCQl1bG9uZyBlbWVhcjEgPSBtcGM4MjR4X21wYzEwN19nZXRyZWcoRU1FQVIxKTsKKwkJCW1lYXIxID0gIChtZWFyMSAgJiAweEZGRkZGRjAwKSB8CisJCQkgICgobmV3X2JhbmswX2VuZCAmIE1JQ1JfQUREUl9NQVNLKSA+PiBNSUNSX0FERFJfU0hJRlQpOworCQkJZW1lYXIxID0gKGVtZWFyMSAmIDB4RkZGRkZGMDApIHwKKwkJCSAgKChuZXdfYmFuazBfZW5kICYgTUlDUl9BRERSX01BU0spID4+IE1JQ1JfRUFERFJfU0hJRlQpOworCQkJbXBjODI0eF9tcGMxMDdfc2V0cmVnKE1FQVIxLCAgbWVhcjEpOworCQkJbXBjODI0eF9tcGMxMDdfc2V0cmVnKEVNRUFSMSwgZW1lYXIxKTsKKworCQkJcmV0ID0gY250ICogc2l6ZW9mKGxvbmcpOworCQkJZ290byBEb25lOworCQl9CisJfQorCisJcmV0ID0gQ0ZHX01BWF9SQU1fU0laRTsKK0RvbmU6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEluaXRpYWxpemUgUENJIERldmljZXMsIHJlcG9ydCBkZXZpY2VzIGZvdW5kLgorICovCisjaWZuZGVmIENPTkZJR19QQ0lfUE5QCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2NvbmZpZ190YWJsZSBwY2lfc2FuZHBvaW50X2NvbmZpZ190YWJsZVtdID0geworCXsgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMHgwZiwgUENJX0FOWV9JRCwKKwkgIHBjaV9jZmdmdW5jX2NvbmZpZ19kZXZpY2UsIHsgUENJX0VORVQwX0lPQUREUiwKKwkJCQkgICAgICAgUENJX0VORVQwX01FTUFERFIsCisJCQkJICAgICAgIFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUiB9fSwKKwl7IH0KK307CisjZW5kaWYKKworCitzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgaG9zZSA9IHsKKyNpZm5kZWYgQ09ORklHX1BDSV9QTlAKKwljb25maWdfdGFibGU6IHBjaV9zYW5kcG9pbnRfY29uZmlnX3RhYmxlLAorI2VuZGlmCit9OworCit2b2lkIHBjaV9pbml0X2JvYXJkKHZvaWQpCit7CisJcGNpX21wYzgyNHhfaW5pdCgmaG9zZSk7CisKKwkvKiBpbml0IFBDSV90b19MT0NBTCBCdXMgQlJJREdFICovCisJUGx4OTAzMEluaXQoKTsKKworCXN5c0NvbnRyb2xEaXNwbGF5KDAsJyAnKTsKKwlzeXNDb250cm9sRGlzcGxheSgxLCdDJyk7CisJc3lzQ29udHJvbERpc3BsYXkoMiwnUCcpOworCXN5c0NvbnRyb2xEaXNwbGF5KDMsJ0MnKTsKKwlzeXNDb250cm9sRGlzcGxheSg0LCcgJyk7CisJc3lzQ29udHJvbERpc3BsYXkoNSwnNCcpOworCXN5c0NvbnRyb2xEaXNwbGF5KDYsJzUnKTsKKwlzeXNDb250cm9sRGlzcGxheSg3LCcgJyk7CisKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIHN5c0NvbnRyb2xEaXNwbGF5IC0gY29udHJvbHMgb25lIG9mIHRoZSBBbHBoYW51bS4gRGlzcGxheSBkaWdpdHMuCisqCisqIFRoaXMgcm91dGluZSB3aWxsIHdyaXRlIGFuIEFTQ0lJIGNoYXJhY3RlciB0byB0aGUgZGlzcGxheSBkaWdpdCByZXF1ZXN0ZWQuCisqCisqIFNFRSBBTFNPOgorKgorKiBSRVRVUk5TOiBOQQorKi8KKworaW50IHN5c0NvbnRyb2xEaXNwbGF5CisgICAgKAorICAgIGludCBkaWdpdCwgCQkJLyogbnVtYmVyIG9mIGRpZ2l0IDAuLjcgKi8KKyAgICB1Y2hhciBhc2NpaV9jb2RlCQkvKiBBU0NJSSBjb2RlICovCisgICAgKQoreworCWlmICgoZGlnaXQgPCAwKSB8fCAoZGlnaXQgPiA3KSkKKwkJcmV0dXJuICgtMSk7CisKKwkqKCh2b2xhdGlsZSB1Y2hhciopKERJU1BfQ0hSX1JBTSArIGRpZ2l0KSkgPSBhc2NpaV9jb2RlOworCisJcmV0dXJuICgwKTsKK30KKwpkaWZmIC0tZ2l0IGEvYm9hcmQvY3BjNDUvZmxhc2guYyBiL2JvYXJkL2NwYzQ1L2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU4MWI5YzMzCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvY3BjNDUvZmxhc2guYwpAQCAtMCwwICsxLDQ5MyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMS0yMDAzCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxtcGM4MjR4Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisjaWYgZGVmaW5lZChDRkdfRU5WX0lTX0lOX0ZMQVNIKQorIyBpZm5kZWYgIENGR19FTlZfQUREUgorIyAgZGVmaW5lIENGR19FTlZfQUREUgkoQ0ZHX0ZMQVNIX0JBU0UgKyBDRkdfRU5WX09GRlNFVCkKKyMgZW5kaWYKKyMgaWZuZGVmICBDRkdfRU5WX1NJWkUKKyMgIGRlZmluZSBDRkdfRU5WX1NJWkUJQ0ZHX0VOVl9TRUNUX1NJWkUKKyMgZW5kaWYKKyMgaWZuZGVmICBDRkdfRU5WX1NFQ1RfU0laRQorIyAgZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFICBDRkdfRU5WX1NJWkUKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIEZMQVNIX0JBTktfU0laRSAweDgwMDAwMAorI2RlZmluZSBNQUlOX1NFQ1RfU0laRSAgMHg0MDAwMAorI2RlZmluZSBQQVJBTV9TRUNUX1NJWkUgMHg4MDAwCisKK2ZsYXNoX2luZm9fdCAgICBmbGFzaF9pbmZvW0NGR19NQVhfRkxBU0hfQkFOS1NdOworCitzdGF0aWMgaW50IHdyaXRlX2RhdGEgKGZsYXNoX2luZm9fdCAqaW5mbywgdWxvbmcgZGVzdCwgdWxvbmcgKmRhdGEpOworc3RhdGljIHZvaWQgd3JpdGVfdmlhX2ZwdSh2dV9sb25nICphZGRyLCB1bG9uZyAqZGF0YSk7CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGdldF9tc3Iodm9pZCk7CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9tc3IodW5zaWduZWQgbG9uZyBtc3IpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjdW5kZWYJREVCVUdfRkxBU0gKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmIERFQlVHX0ZMQVNICisjZGVmaW5lIERFQlVHRihmbXQsYXJncy4uLikgcHJpbnRmKGZtdCAsIyNhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREVCVUdGKGZtdCxhcmdzLi4uKQorI2VuZGlmCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCit1bnNpZ25lZCBsb25nIGZsYXNoX2luaXQodm9pZCkKK3sKKyAgICBpbnQgaSwgajsKKyAgICB1bG9uZyBzaXplID0gMDsKKyAgICB1Y2hhciB0ZW1wQ2hhcjsKKworICAgLyogRW5hYmxlIGZsYXNoIHdyaXRlcyBvbiBDUEM0NSAqLworCisgICAgdGVtcENoYXIgPSBCT0FSRF9DVFJMOworCisgICAgdGVtcENoYXIgfD0gKEJfQ1RSTF9GV1BUXzEgfCBCX0NUUkxfRldSRV8xKTsKKworICAgIHRlbXBDaGFyICY9IH4oQl9DVFJMX0ZXUFRfMCB8IEJfQ1RSTF9GV1JFXzApOworCisgICAgQk9BUkRfQ1RSTCA9IHRlbXBDaGFyOworCisKKyAgICBmb3IgKGkgPSAwOyBpIDwgQ0ZHX01BWF9GTEFTSF9CQU5LUzsgaSsrKSB7CisgICAgCXZ1X2xvbmcgKmFkZHIgPSAodnVfbG9uZyAqKShDRkdfRkxBU0hfQkFTRSArIGkgKiBGTEFTSF9CQU5LX1NJWkUpOworCisJYWRkclswXSA9IDB4MDA5MDAwOTA7CisKKwlERUJVR0YgKCJGbGFzaCBiYW5rICMgJWQ6XG4iCisJCSJcdE1hbnVmLiBJRCBAIDB4JTA4bFg6IDB4JTA4bFhcbiIKKwkJIlx0RGV2aWNlIElEIEAgMHglMDhsWDogMHglMDhsWFxuIiwKKwkJaSwKKwkJKHVsb25nKSgmYWRkclswXSksIGFkZHJbMF0sCisJCSh1bG9uZykoJmFkZHJbMl0pLCBhZGRyWzJdKTsKKworCisJaWYgKChhZGRyWzBdID09IGFkZHJbMV0pICYmIChhZGRyWzBdID09IElOVEVMX01BTlVGQUNUKSAmJgorCSAgICAoYWRkclsyXSA9PSBhZGRyWzNdKSAmJiAoYWRkclsyXSA9PSBJTlRFTF9JRF8yOEYxNjBGM1QpKQorCXsKKworCSAgICBmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID0gKEZMQVNIX01BTl9JTlRFTCAmIEZMQVNIX1ZFTkRNQVNLKSB8CisJICAgIAkJCSAgICAgKElOVEVMX0lEXzI4RjE2MEYzVCAmIEZMQVNIX1RZUEVNQVNLKTsKKworCX0gZWxzZSB7CisJICAgIGZsYXNoX2luZm9baV0uZmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCSAgICBhZGRyWzBdID0gMHhGRkZGRkZGRjsKKwkgICAgZ290byBEb25lOworCX0KKworCURFQlVHRiAoImZsYXNoX2lkID0gMHglMDhsWFxuIiwgZmxhc2hfaW5mb1tpXS5mbGFzaF9pZCk7CisKKwlhZGRyWzBdID0gMHhGRkZGRkZGRjsKKworCWZsYXNoX2luZm9baV0uc2l6ZSA9IEZMQVNIX0JBTktfU0laRTsKKwlmbGFzaF9pbmZvW2ldLnNlY3Rvcl9jb3VudCA9IENGR19NQVhfRkxBU0hfU0VDVDsKKwltZW1zZXQoZmxhc2hfaW5mb1tpXS5wcm90ZWN0LCAwLCBDRkdfTUFYX0ZMQVNIX1NFQ1QpOworCWZvciAoaiA9IDA7IGogPCBmbGFzaF9pbmZvW2ldLnNlY3Rvcl9jb3VudDsgaisrKSB7CisJCWlmIChqID4gMzApIHsKKwkJCWZsYXNoX2luZm9baV0uc3RhcnRbal0gPSBDRkdfRkxBU0hfQkFTRSArCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgaSAqIEZMQVNIX0JBTktfU0laRSArCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgKE1BSU5fU0VDVF9TSVpFICogMzEpICsgKGogLSAzMSkgKiBQQVJBTV9TRUNUX1NJWkU7CisJCX0gZWxzZSB7CisJCQlmbGFzaF9pbmZvW2ldLnN0YXJ0W2pdID0gQ0ZHX0ZMQVNIX0JBU0UgKworCQkJICAgICAgICAgICAgICAgICAgICAgICAgIGkgKiBGTEFTSF9CQU5LX1NJWkUgKworCQkJICAgICAgICAgICAgICAgICAgICAgICAgIGogKiBNQUlOX1NFQ1RfU0laRTsKKwkJfQorCX0KKwlzaXplICs9IGZsYXNoX2luZm9baV0uc2l6ZTsKKyAgICB9CisKKyAgICAvKiBQcm90ZWN0IG1vbml0b3IgYW5kIGVudmlyb25tZW50IHNlY3RvcnMKKyAgICAgKi8KKyNpZiBDRkdfTU9OSVRPUl9CQVNFID49IENGR19GTEFTSF9CQVNFCisjaWYgQ0ZHX01PTklUT1JfQkFTRSA+PSBDRkdfRkxBU0hfQkFTRSArIEZMQVNIX0JBTktfU0laRQorICAgIGZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKKyAgICAgICAgICAgICAgQ0ZHX01PTklUT1JfQkFTRSwKKyAgICAgICAgICAgICAgQ0ZHX01PTklUT1JfQkFTRSArIENGR19NT05JVE9SX0xFTiAtIDEsCisgICAgICAgICAgICAgICZmbGFzaF9pbmZvWzFdKTsKKyNlbHNlCisgICAgZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAorICAgICAgICAgICAgICBDRkdfTU9OSVRPUl9CQVNFLAorICAgICAgICAgICAgICBDRkdfTU9OSVRPUl9CQVNFICsgQ0ZHX01PTklUT1JfTEVOIC0gMSwKKyAgICAgICAgICAgICAgJmZsYXNoX2luZm9bMF0pOworI2VuZGlmCisjZW5kaWYKKworI2lmIChDRkdfRU5WX0lTX0lOX0ZMQVNIID09IDEpICYmIGRlZmluZWQoQ0ZHX0VOVl9BRERSKQorI2lmIENGR19FTlZfQUREUiA+PSBDRkdfRkxBU0hfQkFTRSArIEZMQVNIX0JBTktfU0laRQorICAgIGZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKKyAgICAgICAgICAgICAgQ0ZHX0VOVl9BRERSLAorICAgICAgICAgICAgICBDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NJWkUgLSAxLAorICAgICAgICAgICAgICAmZmxhc2hfaW5mb1sxXSk7CisjZWxzZQorICAgIGZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKKyAgICAgICAgICAgICAgQ0ZHX0VOVl9BRERSLAorICAgICAgICAgICAgICBDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NJWkUgLSAxLAorICAgICAgICAgICAgICAmZmxhc2hfaW5mb1swXSk7CisjZW5kaWYKKyNlbmRpZgorCitEb25lOgorICAgIHJldHVybiBzaXplOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQgZmxhc2hfcHJpbnRfaW5mbyAoZmxhc2hfaW5mb190ICogaW5mbykKK3sKKwlpbnQgaTsKKworCXN3aXRjaCAoKGkgPSBpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSkgeworCWNhc2UgKEZMQVNIX01BTl9JTlRFTCAmIEZMQVNIX1ZFTkRNQVNLKToKKwkJcHJpbnRmICgiSW50ZWw6ICIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYgKCJVbmtub3duIFZlbmRvciAweCUwNHggIiwgaSk7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoKGkgPSBpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSkgeworCWNhc2UgKElOVEVMX0lEXzI4RjE2MEYzVCAmIEZMQVNIX1RZUEVNQVNLKToKKwkJcHJpbnRmICgiMjhGMTYwRjNUICgxNk1iaXQpXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmICgiVW5rbm93biBDaGlwIFR5cGUgMHglMDR4XG4iLCBpKTsKKwkJZ290byBEb25lOworCQlicmVhazsKKwl9CisKKwlwcmludGYgKCIgIFNpemU6ICVsZCBNQiBpbiAlZCBTZWN0b3JzXG4iLAorCQkJaW5mby0+c2l6ZSA+PiAyMCwgaW5mby0+c2VjdG9yX2NvdW50KTsKKworCXByaW50ZiAoIiAgU2VjdG9yIFN0YXJ0IEFkZHJlc3NlczoiKTsKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKKwkJaWYgKChpICUgNSkgPT0gMCkgeworCQkJcHJpbnRmICgiXG4gICAiKTsKKwkJfQorCQlwcmludGYgKCIgJTA4bFglcyIsIGluZm8tPnN0YXJ0W2ldLAorCQkJCWluZm8tPnByb3RlY3RbaV0gPyAiIChSTykiIDogIiAgICAgIik7CisJfQorCXByaW50ZiAoIlxuIik7CisKK0RvbmU6CisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworaW50CWZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKmluZm8sIGludCBzX2ZpcnN0LCBpbnQgc19sYXN0KQoreworCWludCBmbGFnLCBwcm90LCBzZWN0OworCXVsb25nIHN0YXJ0LCBub3csIGxhc3Q7CisKKwlERUJVR0YgKCJFcmFzZSBmbGFzaCBiYW5rICVkIHNlY3QgJWQgLi4uICVkXG4iLAorCQlpbmZvIC0gJmZsYXNoX2luZm9bMF0sIHNfZmlyc3QsIHNfbGFzdCk7CisKKwlpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpIHsKKwkJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKKwkJCXByaW50ZiAoIi0gbWlzc2luZ1xuIik7CisJCX0gZWxzZSB7CisJCQlwcmludGYgKCItIG5vIHNlY3RvcnMgdG8gZXJhc2VcbiIpOworCQl9CisJCXJldHVybiAxOworCX0KKworCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgIT0KKwkgICAgKEZMQVNIX01BTl9JTlRFTCAmIEZMQVNIX1ZFTkRNQVNLKSkgeworCQlwcmludGYgKCJDYW4gZXJhc2Ugb25seSBJbnRlbCBmbGFzaCB0eXBlcyAtIGFib3J0ZWRcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwcm90ID0gMDsKKwlmb3IgKHNlY3Q9c19maXJzdDsgc2VjdDw9c19sYXN0OyArK3NlY3QpIHsKKwkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pIHsKKwkJCXByb3QrKzsKKwkJfQorCX0KKworCWlmIChwcm90KSB7CisJCXByaW50ZiAoIi0gV2FybmluZzogJWQgcHJvdGVjdGVkIHNlY3RvcnMgd2lsbCBub3QgYmUgZXJhc2VkIVxuIiwKKwkJCXByb3QpOworCX0gZWxzZSB7CisJCXByaW50ZiAoIlxuIik7CisJfQorCisJc3RhcnQgPSBnZXRfdGltZXIgKDApOworCWxhc3QgID0gc3RhcnQ7CisJLyogU3RhcnQgZXJhc2Ugb24gdW5wcm90ZWN0ZWQgc2VjdG9ycyAqLworCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3Q8PXNfbGFzdDsgc2VjdCsrKSB7CisJCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdID09IDApIHsJLyogbm90IHByb3RlY3RlZCAqLworCQkJdnVfbG9uZyAqYWRkciA9ICh2dV9sb25nICopKGluZm8tPnN0YXJ0W3NlY3RdKTsKKworCQkJREVCVUdGICgiRXJhc2Ugc2VjdCAlZCBAIDB4JTA4bFhcbiIsCisJCQkJc2VjdCwgKHVsb25nKWFkZHIpOworCisJCQkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0CisJCQkgKiBoZXJlLgorCQkJICovCisJCQlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwkJCWFkZHJbMF0gPSAweDAwNTAwMDUwOwkvKiBjbGVhciBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJCWFkZHJbMF0gPSAweDAwMjAwMDIwOwkvKiBlcmFzZSBzZXR1cCAqLworCQkJYWRkclswXSA9IDB4MDBEMDAwRDA7CS8qIGVyYXNlIGNvbmZpcm0gKi8KKworCQkJYWRkclsxXSA9IDB4MDA1MDAwNTA7CS8qIGNsZWFyIHN0YXR1cyByZWdpc3RlciAqLworCQkJYWRkclsxXSA9IDB4MDAyMDAwMjA7CS8qIGVyYXNlIHNldHVwICovCisJCQlhZGRyWzFdID0gMHgwMEQwMDBEMDsJLyogZXJhc2UgY29uZmlybSAqLworCisJCQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KKwkJCWlmIChmbGFnKQorCQkJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwkJCS8qIHdhaXQgYXQgbGVhc3QgODB1cyAtIGxldCdzIHdhaXQgMSBtcyAqLworCQkJdWRlbGF5ICgxMDAwKTsKKworCQkJd2hpbGUgKCgoYWRkclswXSAmIDB4MDA4MDAwODApICE9IDB4MDA4MDAwODApIHx8CisJCQkgICAgICAgKChhZGRyWzFdICYgMHgwMDgwMDA4MCkgIT0gMHgwMDgwMDA4MCkgKSB7CisJCQkJaWYgKChub3c9Z2V0X3RpbWVyKHN0YXJ0KSkgPgorCQkJCSAgICAgICAgICAgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQpIHsKKwkJCQkJcHJpbnRmICgiVGltZW91dFxuIik7CisJCQkJCWFkZHJbMF0gPSAweDAwQjAwMEIwOyAvKiBzdXNwZW5kIGVyYXNlICovCisJCQkJCWFkZHJbMF0gPSAweDAwRkYwMEZGOyAvKiB0byByZWFkIG1vZGUgICovCisJCQkJCXJldHVybiAxOworCQkJCX0KKworCQkJCS8qIHNob3cgdGhhdCB3ZSdyZSB3YWl0aW5nICovCisJCQkJaWYgKChub3cgLSBsYXN0KSA+IDEwMDApIHsgIC8qIGV2ZXJ5IHNlY29uZCAgKi8KKwkJCQkJcHV0YyAoJy4nKTsKKwkJCQkJbGFzdCA9IG5vdzsKKwkJCQl9CisJCQl9CisKKwkJCWFkZHJbMF0gPSAweDAwRkYwMEZGOworCQl9CisJfQorCXByaW50ZiAoIiBkb25lXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29weSBtZW1vcnkgdG8gZmxhc2gsIHJldHVybnM6CisgKiAwIC0gT0sKKyAqIDEgLSB3cml0ZSB0aW1lb3V0CisgKiAyIC0gRmxhc2ggbm90IGVyYXNlZAorICogNCAtIEZsYXNoIG5vdCBpZGVudGlmaWVkCisgKi8KKworI2RlZmluZQlGTEFTSF9XSURUSAk4CS8qIGZsYXNoIGJ1cyB3aWR0aCBpbiBieXRlcyAqLworCitpbnQgd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICppbmZvLCB1Y2hhciAqc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpCit7CisJdWxvbmcgd3AsIGNwLCBtc3I7CisJaW50IGwsIHJjLCBpOworCXVsb25nIGRhdGFbMl07CisJdWxvbmcgKmRhdGFoID0gJmRhdGFbMF07CisJdWxvbmcgKmRhdGFsID0gJmRhdGFbMV07CisKKwlERUJVR0YgKCJGbGFzaCB3cml0ZV9idWZmOiBAIDB4JTA4bHgsIHNyYyAweCUwOGx4IGxlbiAlbGRcbiIsCisJCWFkZHIsICh1bG9uZylzcmMsIGNudCk7CisKKwlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCQlyZXR1cm4gNDsKKwl9CisKKwltc3IgPSBnZXRfbXNyKCk7CisJc2V0X21zcihtc3IgfCBNU1JfRlApOworCisJd3AgPSAoYWRkciAmIH4oRkxBU0hfV0lEVEgtMSkpOwkvKiBnZXQgbG93ZXIgYWxpZ25lZCBhZGRyZXNzICovCisKKwkvKgorCSAqIGhhbmRsZSB1bmFsaWduZWQgc3RhcnQgYnl0ZXMKKwkgKi8KKwlpZiAoKGwgPSBhZGRyIC0gd3ApICE9IDApIHsKKwkJKmRhdGFoID0gKmRhdGFsID0gMDsKKworCQlmb3IgKGkgPSAwLCBjcCA9IHdwOyBpIDwgbDsgaSsrLCBjcCsrKSB7CisJCQlpZiAoaSA+PSA0KSB7CisJCQkJKmRhdGFoID0gKCpkYXRhaCA8PCA4KSB8CisJCQkJICAgICAgICAgICAgICAgICgoKmRhdGFsICYgMHhGRjAwMDAwMCkgPj4gMjQpOworCQkJfQorCisJCQkqZGF0YWwgPSAoKmRhdGFsIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7CisJCX0KKwkJZm9yICg7IGkgPCBGTEFTSF9XSURUSCAmJiBjbnQgPiAwOyArK2kpIHsKKwkJCWNoYXIgdG1wOworCisJCQl0bXAgPSAqc3JjOworCisJCQlzcmMrKzsKKworCQkJaWYgKGkgPj0gNCkgeworCQkJCSpkYXRhaCA9ICgqZGF0YWggPDwgOCkgfAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgKCgqZGF0YWwgJiAweEZGMDAwMDAwKSA+PiAyNCk7CisJCQl9CisKKwkJCSpkYXRhbCA9ICgqZGF0YWwgPDwgOCkgfCB0bXA7CisKKwkJCS0tY250OyArK2NwOworCQl9CisKKwkJZm9yICg7IGNudCA9PSAwICYmIGkgPCBGTEFTSF9XSURUSDsgKytpLCArK2NwKSB7CisJCQlpZiAoaSA+PSA0KSB7CisJCQkJKmRhdGFoID0gKCpkYXRhaCA8PCA4KSB8CisJCQkJICAgICAgICAgICAgICAgICgoKmRhdGFsICYgMHhGRjAwMDAwMCkgPj4gMjQpOworCQkJfQorCisJCQkqZGF0YWwgPSAoKmRhdGFoIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7CisJCX0KKworCQlpZiAoKHJjID0gd3JpdGVfZGF0YShpbmZvLCB3cCwgZGF0YSkpICE9IDApIHsKKwkJCXNldF9tc3IobXNyKTsKKwkJCXJldHVybiAocmMpOworCQl9CisKKwkJd3AgKz0gRkxBU0hfV0lEVEg7CisJfQorCisJLyoKKwkgKiBoYW5kbGUgRkxBU0hfV0lEVEggYWxpZ25lZCBwYXJ0CisJICovCisJd2hpbGUgKGNudCA+PSBGTEFTSF9XSURUSCkgeworCQkqZGF0YWggPSAqKHVsb25nICopc3JjOworCQkqZGF0YWwgPSAqKHVsb25nICopKHNyYyArIDQpOworCQlpZiAoKHJjID0gd3JpdGVfZGF0YShpbmZvLCB3cCwgZGF0YSkpICE9IDApIHsKKwkJCXNldF9tc3IobXNyKTsKKwkJCXJldHVybiAocmMpOworCQl9CisJCXdwICArPSBGTEFTSF9XSURUSDsKKwkJY250IC09IEZMQVNIX1dJRFRIOworCQlzcmMgKz0gRkxBU0hfV0lEVEg7CisJfQorCisJaWYgKGNudCA9PSAwKSB7CisJCXNldF9tc3IobXNyKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwkvKgorCSAqIGhhbmRsZSB1bmFsaWduZWQgdGFpbCBieXRlcworCSAqLworCSpkYXRhaCA9ICpkYXRhbCA9IDA7CisJZm9yIChpID0gMCwgY3AgPSB3cDsgaSA8IEZMQVNIX1dJRFRIICYmIGNudCA+IDA7ICsraSwgKytjcCkgeworCQljaGFyIHRtcDsKKworICAgICAgCQl0bXAgPSAqc3JjOworCisJCXNyYysrOworCisJCWlmIChpID49IDQpIHsKKwkJCSpkYXRhaCA9ICgqZGF0YWggPDwgOCkgfCAoKCpkYXRhbCAmIDB4RkYwMDAwMDApID4+IDI0KTsKKwkJfQorCisJCSpkYXRhbCA9ICgqZGF0YWwgPDwgOCkgfCB0bXA7CisKKwkJLS1jbnQ7CisJfQorCisJZm9yICg7IGkgPCBGTEFTSF9XSURUSDsgKytpLCArK2NwKSB7CisJCWlmIChpID49IDQpIHsKKwkJCSpkYXRhaCA9ICgqZGF0YWggPDwgOCkgfCAoKCpkYXRhbCAmIDB4RkYwMDAwMDApID4+IDI0KTsKKwkJfQorCisJCSpkYXRhbCA9ICgqZGF0YWwgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKKwl9CisKKwlyYyA9IHdyaXRlX2RhdGEoaW5mbywgd3AsIGRhdGEpOworCXNldF9tc3IobXNyKTsKKworCXJldHVybiAocmMpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBXcml0ZSBhIHdvcmQgdG8gRmxhc2gsIHJldHVybnM6CisgKiAwIC0gT0sKKyAqIDEgLSB3cml0ZSB0aW1lb3V0CisgKiAyIC0gRmxhc2ggbm90IGVyYXNlZAorICovCitzdGF0aWMgaW50IHdyaXRlX2RhdGEgKGZsYXNoX2luZm9fdCAqaW5mbywgdWxvbmcgZGVzdCwgdWxvbmcgKmRhdGEpCit7CisJdnVfbG9uZyAqYWRkciA9ICh2dV9sb25nICopZGVzdDsKKwl1bG9uZyBzdGFydDsKKwlpbnQgZmxhZzsKKworCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLworCWlmICgoKGFkZHJbMF0gJiBkYXRhWzBdKSAhPSBkYXRhWzBdKSB8fAorCSAgICAoKGFkZHJbMV0gJiBkYXRhWzFdKSAhPSBkYXRhWzFdKSApIHsKKwkJcmV0dXJuICgyKTsKKwl9CisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCisJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOworCisJYWRkclswXSA9IDB4MDA0MDAwNDA7CQkvKiB3cml0ZSBzZXR1cCAqLworCXdyaXRlX3ZpYV9mcHUoYWRkciwgZGF0YSk7CisKKwkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoZmxhZykKKwkJZW5hYmxlX2ludGVycnVwdHMoKTsKKworCXN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKKworCXdoaWxlICgoKGFkZHJbMF0gJiAweDAwODAwMDgwKSAhPSAweDAwODAwMDgwKSB8fAorCSAgICAgICAoKGFkZHJbMV0gJiAweDAwODAwMDgwKSAhPSAweDAwODAwMDgwKSApIHsKKwkJaWYgKGdldF90aW1lcihzdGFydCkgPiBDRkdfRkxBU0hfV1JJVEVfVE9VVCkgeworCQkJYWRkclswXSA9IDB4MDBGRjAwRkY7CS8qIHJlc3RvcmUgcmVhZCBtb2RlICovCisJCQlyZXR1cm4gKDEpOworCQl9CisJfQorCisJYWRkclswXSA9IDB4MDBGRjAwRkY7CS8qIHJlc3RvcmUgcmVhZCBtb2RlICovCisKKwlyZXR1cm4gKDApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkIHdyaXRlX3ZpYV9mcHUodnVfbG9uZyAqYWRkciwgdWxvbmcgKmRhdGEpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZmQgIDEsIDAoJTApIiA6IDogInIiIChkYXRhKSk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdGZkIDEsIDAoJTApIiA6IDogInIiIChhZGRyKSk7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZ2V0X21zcih2b2lkKQoreworICAgIHVuc2lnbmVkIGxvbmcgbXNyOworCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtZm1zciAlMCIgOiAiPXIiIChtc3IpIDopOworICAgIHJldHVybiBtc3I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X21zcih1bnNpZ25lZCBsb25nIG1zcikKK3sKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm10bXNyICUwIiA6IDogInIiIChtc3IpKTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2NwYzQ1L3BseDkwMzAuYyBiL2JvYXJkL2NwYzQ1L3BseDkwMzAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzM3YmQyCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvY3BjNDUvcGx4OTAzMC5jCkBAIC0wLDAgKzEsMTc0IEBACisvKiBQbHg5MDMwLmMgLSBzeXN0ZW0gY29uZmlndXJhdGlvbiBtb2R1bGUgZm9yIFBMWDkwMzAgUENJIHRvIExvY2FsIEJ1cyBCcmlkZ2UgKi8KKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDItMjAwMworICogSm9zZWYgV2FnbmVyLCBNaWNyb1N5cyBHbWJILCB3YWduZXJAbWljcm9zeXMuZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogICBEYXRlICAgICAgIE1vZGlmaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkKKyAqIC0tLS0tLS0gICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgIC0tLQorICogMzBzZXAwMiAgICAgIGNvbnZlcnRlZCBmcm9tIFZ4V29ya3MgdG8gTElOVVggICAgICAgICAgICAgICAgICAgd2EKKyovCisKKworLyoKK0RFU0NSSVBUSU9OCisKK1RoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gbW9kdWxlIGZvciB0aGUgUExYOTAzMCBQQ0kgdG8gTG9jYWwgQnVzIEJyaWRnZS4KK0l0IGNvbmZpZ3VyZXMgdGhlIENoaXAgc2VsZWN0IGxpbmVzIGZvciBTUkFNIChDUzApLCBTVDE2QzU1MiAoQ1MxLENTMiksIERpc3BsYXkgYW5kIGxvY2FsCityZWdpc3RlcnMgKENTMykgb24gQ1BDNDUuCisqLworCisvKiBpbmNsdWRlcyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8bmV0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8cGNpLmg+CisKKy8qIGltcG9ydHMgKi8KKworCisvKiBkZWZpbmVzICovCisjZGVmaW5lCVBMWDkwMzBfVkVORE9SX0lECTB4MTBCNQorI2RlZmluZQlQTFg5MDMwX0RFVklDRV9JRAkweDkwMzAKKworI3VuZGVmIFBMWF9ERUJVRworCisvKiBQTFg5MDMwIHJlZ2lzdGVyIG9mZnNldHMgICovCisjZGVmaW5lCVA5MDMwX0xBUzBSUgkweDAwCisjZGVmaW5lCVA5MDMwX0xBUzFSUiAJMHgwNAorI2RlZmluZQlQOTAzMF9MQVMyUlIJMHgwOAorI2RlZmluZQlQOTAzMF9MQVMzUlIJMHgwYworI2RlZmluZQlQOTAzMF9FUk9NUlIJMHgxMAorI2RlZmluZQlQOTAzMF9MQVMwQkEJMHgxNAorI2RlZmluZQlQOTAzMF9MQVMxQkEJMHgxOAorI2RlZmluZQlQOTAzMF9MQVMyQkEJMHgxYworI2RlZmluZQlQOTAzMF9MQVMzQkEJMHgyMAorI2RlZmluZQlQOTAzMF9FUk9NQkEJMHgyNAorI2RlZmluZQlQOTAzMF9MQVMwQlJECTB4MjgKKyNkZWZpbmUJUDkwMzBfTEFTMUJSRAkweDJjCisjZGVmaW5lCVA5MDMwX0xBUzJCUkQJMHgzMAorI2RlZmluZQlQOTAzMF9MQVMzQlJECTB4MzQKKyNkZWZpbmUJUDkwMzBfRVJPTUJSRAkweDM4CisjZGVmaW5lCVA5MDMwX0NTMEJBU0UJMHgzQworI2RlZmluZQlQOTAzMF9DUzFCQVNFCTB4NDAKKyNkZWZpbmUJUDkwMzBfQ1MyQkFTRQkweDQ0CisjZGVmaW5lCVA5MDMwX0NTM0JBU0UJMHg0OAorI2RlZmluZQlQOTAzMF9JTlRDU1IgCTB4NGMKKyNkZWZpbmUJUDkwMzBfQ05UUkwgIAkweDUwCisjZGVmaW5lCVA5MDMwX0dQSU9DCTB4NTQKKworLyogdHlwZWRlZnMgKi8KKworCisvKiBsb2NhbHMgKi8KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN1cHBvcnRlZFtdID0geworCXsgUExYOTAzMF9WRU5ET1JfSUQsIFBMWDkwMzBfREVWSUNFX0lEIH0sCisJeyB9Cit9OworCisvKiBmb3J3YXJkIGRlY2xhcmF0aW9ucyAqLwordm9pZCBzeXNPdXRMb25nKHVsb25nIGFkZHJlc3MsIHVsb25nIHZhbHVlKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIFBseDkwMzBJbml0IC0gaW5pdCBDUzAuLkNTMyBmb3IgQ1BDNDUKKyoKKyoKKyogUkVUVVJOUzogTi9BCisqLworCit2b2lkIFBseDkwMzBJbml0ICh2b2lkKQoreworICAgIHBjaV9kZXZfdCAgIGRldm5vOworICAgIHVsb25nCW1lbWJhc2VDc3I7CSAgLyogYmFzZSBhZGRyZXNzIG9mIGRldmljZSBtZW1vcnkgc3BhY2UgKi8KKyAgICBpbnQJCWlkeCA9IDA7CSAgLyogZ2VuZXJhbCBpbmRleCAqLworCisKKyAgICAvKiBmaW5kIHBseDkwMzAgZGV2aWNlICovCisKKyAgICBpZiAoKGRldm5vID0gcGNpX2ZpbmRfZGV2aWNlcyhzdXBwb3J0ZWQsIGlkeCsrKSkgPCAwKQorICAgIHsKKwlwcmludGYoIk5vIFBMWDkwMzAgZGV2aWNlIGZvdW5kICEhXG4iKTsKKwlyZXR1cm47CisgICAgfQorCisKKyNpZmRlZiBQTFhfREVCVUcKKwlwcmludGYoIlBMWCA5MDMwIGRldmljZSBmb3VuZCAhIGRldm5vID0gMHgleFxuIixkZXZubyk7CisjZW5kaWYKKworCW1lbWJhc2VDc3IgICA9IFBDSV9QTFg5MDMwX01FTUFERFI7CisKKwkvKiBzZXQgYmFzZSBhZGRyZXNzICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZubywgUENJX0JBU0VfQUREUkVTU18wLCBtZW1iYXNlQ3NyKTsKKworCS8qIGVuYWJsZSBtYXBwZWQgbWVtb3J5IGFuZCBJTyBhZGRyZXNzZXMgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldm5vLAorCQkJICAgICAgIFBDSV9DT01NQU5ELAorCQkJICAgICAgIFBDSV9DT01NQU5EX01FTU9SWSB8CisJCQkgICAgICAgUENJX0NPTU1BTkRfTUFTVEVSKTsKKworCisJLyogY29uZmlndXJlIEdCSU9DICovCisJc3lzT3V0TG9uZygobWVtYmFzZUNzciArIFA5MDMwX0dQSU9DKSwgICAweDAwMDAwRkMwKTsJCS8qIENTMi9DUzMgZW5hYmxlICovCisKKwkvKiBjb25maWd1cmUgQ1MwIChTUkFNKSAqLworCXN5c091dExvbmcoKG1lbWJhc2VDc3IgKyBQOTAzMF9MQVMwQkEpLCAgMHgwMDAwMDAwMSk7CQkvKiBlbmFibGUgc3BhY2UgYmFzZSAqLworCXN5c091dExvbmcoKG1lbWJhc2VDc3IgKyBQOTAzMF9MQVMwUlIpLCAgMHgwRkUwMDAwMCk7CQkvKiAyIE1CeXRlICovCisJc3lzT3V0TG9uZygobWVtYmFzZUNzciArIFA5MDMwX0xBUzBCUkQpLCAweDUxOTI4OTAwKTsJCS8qIDQgd2FpdCBzdGF0ZXMgKi8KKwlzeXNPdXRMb25nKChtZW1iYXNlQ3NyICsgUDkwMzBfQ1MwQkFTRSksIDB4MDAxMDAwMDEpOwkJLyogZW5hYmxlIDIgTUJ5dGUgKi8JCisJLyogcmVtYXAgQ1MwIChTUkFNKSAqLworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2bm8sIFBDSV9CQVNFX0FERFJFU1NfMiwgU1JBTV9CQVNFKTsKKworCS8qIGNvbmZpZ3VyZSBDUzEgKFNUMTY1NTIgLyBDSEFOIEEpICovCisJc3lzT3V0TG9uZygobWVtYmFzZUNzciArIFA5MDMwX0xBUzFCQSksICAweDAwNDAwMDAxKTsJCS8qIGVuYWJsZSBzcGFjZSBiYXNlICovCisJc3lzT3V0TG9uZygobWVtYmFzZUNzciArIFA5MDMwX0xBUzFSUiksICAweDBGRkZGRjAwKTsJCS8qIDI1NiBieXRlICovCisJc3lzT3V0TG9uZygobWVtYmFzZUNzciArIFA5MDMwX0xBUzFCUkQpLCAweDU1MTIyOTAwKTsJCS8qIDQgd2FpdCBzdGF0ZXMgKi8KKwlzeXNPdXRMb25nKChtZW1iYXNlQ3NyICsgUDkwMzBfQ1MxQkFTRSksIDB4MDA0MDAwODEpOwkJLyogZW5hYmxlIDI1NiBCeXRlICovCQorCS8qIHJlbWFwIENTMSAoU1QxNjU1MiAvIENIQU4gQSkgKi8KKwkvKiByZW1hcCBDUzEgKFNUMTY1NTIgLyBDSEFOIEEpICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZubywgUENJX0JBU0VfQUREUkVTU18zLCBTVDE2NTUyX0FfQkFTRSk7CisKKwkvKiBjb25maWd1cmUgQ1MyIChTVDE2NTUyIC8gQ0hBTiBCKSAqLworCXN5c091dExvbmcoKG1lbWJhc2VDc3IgKyBQOTAzMF9MQVMyQkEpLCAgMHgwMDgwMDAwMSk7CQkvKiBlbmFibGUgc3BhY2UgYmFzZSAqLworCXN5c091dExvbmcoKG1lbWJhc2VDc3IgKyBQOTAzMF9MQVMyUlIpLCAgMHgwRkZGRkYwMCk7CQkvKiAyNTYgYnl0ZSAqLworCXN5c091dExvbmcoKG1lbWJhc2VDc3IgKyBQOTAzMF9MQVMyQlJEKSwgMHg1NTEyMjkwMCk7CQkvKiA0IHdhaXQgc3RhdGVzICovCisJc3lzT3V0TG9uZygobWVtYmFzZUNzciArIFA5MDMwX0NTMkJBU0UpLCAweDAwODAwMDgxKTsJCS8qIGVuYWJsZSAyNTYgQnl0ZSAqLwkKKwkvKiByZW1hcCBDUzIgKFNUMTY1NTIgLyBDSEFOIEIpICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZubywgUENJX0JBU0VfQUREUkVTU180LCBTVDE2NTUyX0JfQkFTRSk7CisKKwkvKiBjb25maWd1cmUgQ1MzIChCQ1NSKSAqLworCXN5c091dExvbmcoKG1lbWJhc2VDc3IgKyBQOTAzMF9MQVMzQkEpLCAgMHgwMEMwMDAwMSk7CQkvKiBlbmFibGUgc3BhY2UgYmFzZSAqLworCXN5c091dExvbmcoKG1lbWJhc2VDc3IgKyBQOTAzMF9MQVMzUlIpLCAgMHgwRkZGRkYwMCk7CQkvKiAyNTYgYnl0ZSAqLworCXN5c091dExvbmcoKG1lbWJhc2VDc3IgKyBQOTAzMF9MQVMzQlJEKSwgMHg1NTM1N0E4MCk7CQkvKiA5IHdhaXQgc3RhdGVzICovCisJc3lzT3V0TG9uZygobWVtYmFzZUNzciArIFA5MDMwX0NTM0JBU0UpLCAweDAwQzAwMDgxKTsJCS8qIGVuYWJsZSAyNTYgQnl0ZSAqLwkKKwkvKiByZW1hcCBDUzMgKERJU1BMQVkgYW5kIEJDU1IpICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZubywgUENJX0JBU0VfQUREUkVTU181LCBCQ1NSX0JBU0UpOworfQorCit2b2lkIHN5c091dExvbmcodWxvbmcgYWRkcmVzcywgdWxvbmcgdmFsdWUpCit7CisJKih1bG9uZyopYWRkcmVzcyA9IGNwdV90b19sZTMyKHZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvYm9hcmQvY3BjNDUvdS1ib290LmxkcyBiL2JvYXJkL2NwYzQ1L3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjExYWMwYQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2NwYzQ1L3UtYm9vdC5sZHMKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDEtMjAwMworICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfQVJDSChwb3dlcnBjKQorU0VBUkNIX0RJUigvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvcG93ZXJwYy1hbnktZWxmL2xpYik7CisvKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPworICAgX19EWU5BTUlDID0gMDsgICAgKi8KK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKKyAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9CisgIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQorICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQorICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQorICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9CisgIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpIAl9CisgIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KKyAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkgCX0KKyAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpIAl9CisgIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkgCX0KKyAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9CisgIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KKyAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQorICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQorICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9CisgIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9CisgIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQorICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9CisgIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQorICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9CisgIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9CisgIC5wbHQgOiB7ICooLnBsdCkgfQorICAudGV4dCAgICAgIDoKKyAgeworICAgIGNwdS9tcGM4MjR4L3N0YXJ0Lm8JKC50ZXh0KQorICAgIGxpYl9wcGMvYm9hcmQubyAoLnRleHQpCisgICAgbGliX3BwYy9wcGNzdHJpbmcubwkoLnRleHQpCisgICAgbGliX2dlbmVyaWMvdnNwcmludGYubwkoLnRleHQpCisgICAgbGliX2dlbmVyaWMvY3JjMzIubwkJKC50ZXh0KQorICAgIGxpYl9nZW5lcmljL3psaWIubwkJKC50ZXh0KQorCisJCS4gPSBERUZJTkVEKGVudl9vZmZzZXQpID8gZW52X29mZnNldCA6IC47CisgICAgY29tbW9uL2Vudmlyb25tZW50Lm8gKC50ZXh0KQorCisJCSooLnRleHQpCisKKyAgICAqKC5maXh1cCkKKyAgICAqKC5nb3QxKQorICAgIC4gPSBBTElHTigxNik7CisgICAgKigucm9kYXRhKQorICAgICooLnJvZGF0YTEpCisgIH0KKyAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAorICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9CisgIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KKworICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KKyAgLiA9ICguICsgMHgwRkZGKSAmIDB4RkZGRkYwMDA7CisgIF9lcm90ZXh0ID0gLjsKKyAgUFJPVklERSAoZXJvdGV4dCA9IC4pOworICAucmVsb2MgICA6CisgIHsKKyAgICAqKC5nb3QpCisgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAqKC5nb3QyKQorICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICooLmZpeHVwKQorICB9CisgIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+IDI7CisgIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXykgPj4gMjsKKworICAuZGF0YSAgICA6CisgIHsKKyAgICAqKC5kYXRhKQorICAgICooLmRhdGExKQorICAgICooLnNkYXRhKQorICAgICooLnNkYXRhMikKKyAgICAqKC5keW5hbWljKQorICAgIENPTlNUUlVDVE9SUworICB9CisgIF9lZGF0YSAgPSAgLjsKKyAgUFJPVklERSAoZWRhdGEgPSAuKTsKKworICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOworICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KKyAgX19zdG9wX19fZXhfdGFibGUgPSAuOworCisgIC4gPSBBTElHTig0MDk2KTsKKyAgX19pbml0X2JlZ2luID0gLjsKKyAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9CisgIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQorICAuID0gQUxJR04oNDA5Nik7CisgIF9faW5pdF9lbmQgPSAuOworCisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgLmJzcyAgICAgICA6CisgIHsKKyAgICooLnNic3MpICooLnNjb21tb24pCisgICAqKC5keW5ic3MpCisgICAqKC5ic3MpCisgICAqKENPTU1PTikKKyAgfQorCisgIF9lbmQgPSAuIDsKKyAgUFJPVklERSAoZW5kID0gLik7Cit9CisKZGlmZiAtLWdpdCBhL2JvYXJkL2N1ODI0L2N1ODI0LmMgYi9ib2FyZC9jdTgyNC9jdTgyNC5jCmluZGV4IGE3YzU4M2MuLmY5NjBjZTUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2N1ODI0L2N1ODI0LmMKKysrIGIvYm9hcmQvY3U4MjQvY3U4MjQuYwpAQCAtOTgsMTEgKzk4LDExIEBACiAgKi8KICNpZm5kZWYgQ09ORklHX1BDSV9QTlAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2NvbmZpZ190YWJsZSBwY2lfc2FuZHBvaW50X2NvbmZpZ190YWJsZVtdID0gewotCXsgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKLQkgIFBDSV9CVVMoQ0ZHX0VUSF9ERVZfRk4pLCBQQ0lfREVWKENGR19FVEhfREVWX0ZOKSwgUENJX0ZVTkMoQ0ZHX0VUSF9ERVZfRk4pLAotCSAgcGNpX2NmZ2Z1bmNfY29uZmlnX2RldmljZSwgeyBDRkdfRVRIX0lPQkFTRSwKLQkJCQkgICAgICAgMCwKLQkJCQkgICAgICAgUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NQVNURVIgfX0sCisJeyBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAweDBmLCBQQ0lfQU5ZX0lELAorCSAgcGNpX2NmZ2Z1bmNfY29uZmlnX2RldmljZSwgeyBQQ0lfRU5FVDBfSU9BRERSLAorCQkJCSAgICAgICBQQ0lfRU5FVDBfTUVNQUREUiwKKwkJCQkgICAgICAgUENJX0NPTU1BTkRfTUVNT1JZIHwgUENJX0NPTU1BTkRfTUFTVEVSIH19LAorCiAJeyB9CiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9lbWsvdG9wODYwL2NvbmZpZy5tayBiL2JvYXJkL2Vtay90b3A4NjAvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OTE3YTEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9lbWsvdG9wODYwL2NvbmZpZy5tawpAQCAtMCwwICsxLDI0IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMworIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitURVhUX0JBU0UgPSAweDgwMDAwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9pbm5va29tL2ZsYXNoLmMgYi9ib2FyZC9pbm5va29tL2ZsYXNoLmMKaW5kZXggNTUwNWJiNS4uYjU2NzA3ZCAxMDA2NDQKLS0tIGEvYm9hcmQvaW5ub2tvbS9mbGFzaC5jCisrKyBiL2JvYXJkL2lubm9rb20vZmxhc2guYwpAQCAtODYsODEgKzg2LDc5IEBACiAgKi8KIAogc3RhdGljIHN0cnVjdCBwYXJ0X2luZm8gcGFydDsKK3N0YXRpYyBpbnQgY3VycmVudF9wYXJ0ID0gLTE7CiAKICNpZmRlZiBDT05GSUdfTVREX0lOTk9LT01fMTZNQgogI2lmZGVmIENPTkZJR19NVERfSU5OT0tPTV82NE1CCiAjZXJyb3IgUGxlYXNlIGRlZmluZSBvbmx5IG9uZSBDT05GSUdfTVREX0lOTk9LT01fWFhNQiBvcHRpb24uCiAjZW5kaWYKIHN0cnVjdCBwYXJ0X2luZm8qIGpmZnMyX3BhcnRfaW5mbyhpbnQgcGFydF9udW0pIHsKKwl2b2lkICpqZmZzMl9wcml2X3NhdmVkID0gcGFydC5qZmZzMl9wcml2OwogCiAJUFJJTlRLMigiamZmczJfcGFydF9pbmZvOiBwYXJ0X251bT0laVxuIixwYXJ0X251bSk7CiAKKwlpZiAoY3VycmVudF9wYXJ0ID09IHBhcnRfbnVtKQorCQlyZXR1cm4gJnBhcnQ7CisKIAkvKiB1LWJvb3QgcGFydGl0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAJaWYocGFydF9udW09PTApewotCQlpZihwYXJ0LnVzcl9wcml2PT0odm9pZCopMSkgcmV0dXJuICZwYXJ0OwotCiAJCW1lbXNldCgmcGFydCwgMCwgc2l6ZW9mKHBhcnQpKTsKLQorCQkKIAkJcGFydC5vZmZzZXQ9KGNoYXIqKTB4MDAwMDAwMDA7CiAJCXBhcnQuc2l6ZT0yNTYqMTAyNDsKLQorCQkKIAkJLyogTWFyayB0aGUgc3RydWN0IGFzIHJlYWR5ICovCi0JCXBhcnQudXNyX3ByaXY9KHZvaWQqKTE7CisJCWN1cnJlbnRfcGFydCA9IHBhcnRfbnVtOwogCiAJCVBSSU5USygicGFydC5vZmZzZXQgPSAweCUwOHhcbiIsKHVuc2lnbmVkIGludClwYXJ0Lm9mZnNldCk7CiAJCVBSSU5USygicGFydC5zaXplICAgPSAweCUwOHhcbiIsKHVuc2lnbmVkIGludClwYXJ0LnNpemUpOwotCQlyZXR1cm4gJnBhcnQ7CiAJfQogCiAJLyogcHJpbWFyeSBPUytmaXJtd2FyZSBwYXJ0aXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCWlmKHBhcnRfbnVtPT0xKXsKLQkJaWYocGFydC51c3JfcHJpdj09KHZvaWQqKTEpIHJldHVybiAmcGFydDsKLQogCQltZW1zZXQoJnBhcnQsIDAsIHNpemVvZihwYXJ0KSk7Ci0KKwkJCiAJCXBhcnQub2Zmc2V0PShjaGFyKikweDAwMDQwMDAwOwogCQlwYXJ0LnNpemU9NzY4KjEwMjQ7Ci0KKwkJCiAJCS8qIE1hcmsgdGhlIHN0cnVjdCBhcyByZWFkeSAqLwotCQlwYXJ0LnVzcl9wcml2PSh2b2lkKikxOworCQljdXJyZW50X3BhcnQgPSBwYXJ0X251bTsKIAogCQlQUklOVEsoInBhcnQub2Zmc2V0ID0gMHglMDh4XG4iLCh1bnNpZ25lZCBpbnQpcGFydC5vZmZzZXQpOwogCQlQUklOVEsoInBhcnQuc2l6ZSAgID0gMHglMDh4XG4iLCh1bnNpZ25lZCBpbnQpcGFydC5zaXplKTsKLQkJcmV0dXJuICZwYXJ0OwogCX0KLQorCQogCS8qIHNlY29uZGFyeSBPUytmaXJtd2FyZSBwYXJ0aXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAlpZihwYXJ0X251bT09Mil7Ci0JCWlmKHBhcnQudXNyX3ByaXY9PSh2b2lkKikxKSByZXR1cm4gJnBhcnQ7Ci0KIAkJbWVtc2V0KCZwYXJ0LCAwLCBzaXplb2YocGFydCkpOwotCisJCQogCQlwYXJ0Lm9mZnNldD0oY2hhciopMHgwMDEwMDAwMDsKIAkJcGFydC5zaXplPTgqMTAyNCoxMDI0OwotCisJCQogCQkvKiBNYXJrIHRoZSBzdHJ1Y3QgYXMgcmVhZHkgKi8KLQkJcGFydC51c3JfcHJpdj0odm9pZCopMTsKKwkJY3VycmVudF9wYXJ0ID0gcGFydF9udW07CiAKIAkJUFJJTlRLKCJwYXJ0Lm9mZnNldCA9IDB4JTA4eFxuIiwodW5zaWduZWQgaW50KXBhcnQub2Zmc2V0KTsKIAkJUFJJTlRLKCJwYXJ0LnNpemUgICA9IDB4JTA4eFxuIiwodW5zaWduZWQgaW50KXBhcnQuc2l6ZSk7Ci0JCXJldHVybiAmcGFydDsKIAl9CiAKIAkvKiBkYXRhIHBhcnRpdGlvbiAqLwogCWlmKHBhcnRfbnVtPT0zKXsKLQkJaWYocGFydC51c3JfcHJpdj09KHZvaWQqKTEpIHJldHVybiAmcGFydDsKLQogCQltZW1zZXQoJnBhcnQsIDAsIHNpemVvZihwYXJ0KSk7Ci0KKwkJCiAJCXBhcnQub2Zmc2V0PShjaGFyKikweDAwOTAwMDAwOwogCQlwYXJ0LnNpemU9NyoxMDI0KjEwMjQ7Ci0KKwkJCiAJCS8qIE1hcmsgdGhlIHN0cnVjdCBhcyByZWFkeSAqLwotCQlwYXJ0LnVzcl9wcml2PSh2b2lkKikxOworCQljdXJyZW50X3BhcnQgPSBwYXJ0X251bTsKIAogCQlQUklOVEsoInBhcnQub2Zmc2V0ID0gMHglMDh4XG4iLCh1bnNpZ25lZCBpbnQpcGFydC5vZmZzZXQpOwogCQlQUklOVEsoInBhcnQuc2l6ZSAgID0gMHglMDh4XG4iLCh1bnNpZ25lZCBpbnQpcGFydC5zaXplKTsKLQorCX0KKwkKKwlpZiAoY3VycmVudF9wYXJ0ID09IHBhcnRfbnVtKSB7CisJCXBhcnQudXNyX3ByaXYgPSAmY3VycmVudF9wYXJ0OworCQlwYXJ0LmpmZnMyX3ByaXYgPSBqZmZzMl9wcml2X3NhdmVkOwogCQlyZXR1cm4gJnBhcnQ7CiAJfQogCkBAIC0xNzQsNzUgKzE3Miw3MiBAQAogI2Vycm9yIFBsZWFzZSBkZWZpbmUgb25seSBvbmUgQ09ORklHX01URF9JTk5PS09NX1hYTUIgb3B0aW9uLgogI2VuZGlmCiBzdHJ1Y3QgcGFydF9pbmZvKiBqZmZzMl9wYXJ0X2luZm8oaW50IHBhcnRfbnVtKSB7CisJdm9pZCAqamZmczJfcHJpdl9zYXZlZCA9IHBhcnQuamZmczJfcHJpdjsKIAogCVBSSU5USzIoImpmZnMyX3BhcnRfaW5mbzogcGFydF9udW09JWlcbiIscGFydF9udW0pOwogCisJaWYgKGN1cnJlbnRfcGFydCA9PSBwYXJ0X251bSkKKwkJcmV0dXJuICZwYXJ0OworCiAJLyogdS1ib290IHBhcnRpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCWlmKHBhcnRfbnVtPT0wKXsKLQkJaWYocGFydC51c3JfcHJpdj09KHZvaWQqKTEpIHJldHVybiAmcGFydDsKLQogCQltZW1zZXQoJnBhcnQsIDAsIHNpemVvZihwYXJ0KSk7Ci0KKwkJCiAJCXBhcnQub2Zmc2V0PShjaGFyKikweDAwMDAwMDAwOwogCQlwYXJ0LnNpemU9MjU2KjEwMjQ7Ci0KKwkJCiAJCS8qIE1hcmsgdGhlIHN0cnVjdCBhcyByZWFkeSAqLwotCQlwYXJ0LnVzcl9wcml2PSh2b2lkKikxOworCQljdXJyZW50X3BhcnQgPSBwYXJ0X251bTsKIAogCQlQUklOVEsoInBhcnQub2Zmc2V0ID0gMHglMDh4XG4iLCh1bnNpZ25lZCBpbnQpcGFydC5vZmZzZXQpOwogCQlQUklOVEsoInBhcnQuc2l6ZSAgID0gMHglMDh4XG4iLCh1bnNpZ25lZCBpbnQpcGFydC5zaXplKTsKLQkJcmV0dXJuICZwYXJ0OwogCX0KIAogCS8qIHByaW1hcnkgT1MrZmlybXdhcmUgcGFydGl0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAlpZihwYXJ0X251bT09MSl7Ci0JCWlmKHBhcnQudXNyX3ByaXY9PSh2b2lkKikxKSByZXR1cm4gJnBhcnQ7Ci0KIAkJbWVtc2V0KCZwYXJ0LCAwLCBzaXplb2YocGFydCkpOwotCisJCQogCQlwYXJ0Lm9mZnNldD0oY2hhciopMHgwMDA0MDAwMDsKIAkJcGFydC5zaXplPTE2KjEwMjQqMTAyNC0xMjgqMTAyNDsKLQorCQkKIAkJLyogTWFyayB0aGUgc3RydWN0IGFzIHJlYWR5ICovCi0JCXBhcnQudXNyX3ByaXY9KHZvaWQqKTE7CisJCWN1cnJlbnRfcGFydCA9IHBhcnRfbnVtOwogCiAJCVBSSU5USygicGFydC5vZmZzZXQgPSAweCUwOHhcbiIsKHVuc2lnbmVkIGludClwYXJ0Lm9mZnNldCk7CiAJCVBSSU5USygicGFydC5zaXplICAgPSAweCUwOHhcbiIsKHVuc2lnbmVkIGludClwYXJ0LnNpemUpOwotCQlyZXR1cm4gJnBhcnQ7CiAJfQotCisJCiAJLyogc2Vjb25kYXJ5IE9TK2Zpcm13YXJlIHBhcnRpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCWlmKHBhcnRfbnVtPT0yKXsKLQkJaWYocGFydC51c3JfcHJpdj09KHZvaWQqKTEpIHJldHVybiAmcGFydDsKLQogCQltZW1zZXQoJnBhcnQsIDAsIHNpemVvZihwYXJ0KSk7Ci0KKwkJCiAJCXBhcnQub2Zmc2V0PShjaGFyKikweDAxMDIwMDAwOwogCQlwYXJ0LnNpemU9MTYqMTAyNCoxMDI0LTEyOCoxMDI0OwotCisJCQogCQkvKiBNYXJrIHRoZSBzdHJ1Y3QgYXMgcmVhZHkgKi8KLQkJcGFydC51c3JfcHJpdj0odm9pZCopMTsKKwkJY3VycmVudF9wYXJ0ID0gcGFydF9udW07CiAKIAkJUFJJTlRLKCJwYXJ0Lm9mZnNldCA9IDB4JTA4eFxuIiwodW5zaWduZWQgaW50KXBhcnQub2Zmc2V0KTsKIAkJUFJJTlRLKCJwYXJ0LnNpemUgICA9IDB4JTA4eFxuIiwodW5zaWduZWQgaW50KXBhcnQuc2l6ZSk7Ci0JCXJldHVybiAmcGFydDsKIAl9CiAKIAkvKiBkYXRhIHBhcnRpdGlvbiAqLwogCWlmKHBhcnRfbnVtPT0zKXsKLQkJaWYocGFydC51c3JfcHJpdj09KHZvaWQqKTEpIHJldHVybiAmcGFydDsKLQogCQltZW1zZXQoJnBhcnQsIDAsIHNpemVvZihwYXJ0KSk7Ci0KKwkJCiAJCXBhcnQub2Zmc2V0PShjaGFyKikweDAyMDAwMDAwOwogCQlwYXJ0LnNpemU9MzIqMTAyNCoxMDI0OwotCisJCQogCQkvKiBNYXJrIHRoZSBzdHJ1Y3QgYXMgcmVhZHkgKi8KLQkJcGFydC51c3JfcHJpdj0odm9pZCopMTsKKwkJY3VycmVudF9wYXJ0ID0gcGFydF9udW07CiAKIAkJUFJJTlRLKCJwYXJ0Lm9mZnNldCA9IDB4JTA4eFxuIiwodW5zaWduZWQgaW50KXBhcnQub2Zmc2V0KTsKIAkJUFJJTlRLKCJwYXJ0LnNpemUgICA9IDB4JTA4eFxuIiwodW5zaWduZWQgaW50KXBhcnQuc2l6ZSk7Ci0KKwl9CisJCisJaWYgKGN1cnJlbnRfcGFydCA9PSBwYXJ0X251bSkgeworCQlwYXJ0LnVzcl9wcml2ID0gJmN1cnJlbnRfcGFydDsKKwkJcGFydC5qZmZzMl9wcml2ID0gamZmczJfcHJpdl9zYXZlZDsKIAkJcmV0dXJuICZwYXJ0OwogCX0KIApAQCAtMzM2LDEzICszMzEsMTMgQEAKIAkJCQlyZXR1cm47CiAJCX0KIAotCQlwcmludGYoIiAgU2l6ZTogJWxkIE1CIGluICVkIFNlY3RvcnNcbiIsCisJCXByaW50ZigiICBTaXplOiAlbGQgTUIgaW4gJWQgU2VjdG9yc1xuIiwgCiAJCQlpbmZvLT5zaXplID4+IDIwLCBpbmZvLT5zZWN0b3JfY291bnQpOwogCiAJCXByaW50ZigiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOwogCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKIAkJCWlmICgoaSAlIDUpID09IDApIHByaW50ZiAoIlxuICAgIik7Ci0KKwkgICAgICAgIAogCQkJcHJpbnRmICgiICUwOGxYJXMiLCBpbmZvLT5zdGFydFtpXSwKIAkJCQlpbmZvLT5wcm90ZWN0W2ldID8gIiAoUk8pIiA6ICIgICAgICIpOwogCQl9CkBAIC0zNzEsNyArMzY2LDcgQEAKIAogCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgIT0gKElOVEVMX01BTlVGQUNUICYgRkxBU0hfVkVORE1BU0spKQogCQlyZXR1cm4gRVJSX1VOS05PV05fRkxBU0hfVkVORE9SOwotCisJCiAJcHJvdCA9IDA7CiAJZm9yIChzZWN0PXNfZmlyc3Q7IHNlY3Q8PXNfbGFzdDsgKytzZWN0KSB7CiAJCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKSBwcm90Kys7CkBAIC00MjEsMTMgKzQxNiwxMyBAQAogCQkJCQlnb3RvIG91dGFoZXJlOwogCQkJCX0KIAkJCX0KLQorCQkJCiAJCQlQUklOVEsoImNsZWFyaW5nIHN0YXR1cyByZWdpc3RlclxuIik7Ci0JCQkqYWRkciA9IDB4MDA1MDsKKwkJCSphZGRyID0gMHgwMDUwOyAKIAkJCVBSSU5USygicmVzZXR0aW5nIHRvIHJlYWQgbW9kZSIpOwotCQkJKmFkZHIgPSAweDAwRkY7CisJCQkqYWRkciA9IDB4MDBGRjsgCiAJCX0KLQorCQkKIAkJcHJpbnRmKCJvay5cbiIpOwogCX0KIApkaWZmIC0tZ2l0IGEvYm9hcmQvaXA4NjAvaXA4NjAuYyBiL2JvYXJkL2lwODYwL2lwODYwLmMKaW5kZXggMTFmMzMyNy4uYTIwYzIxMSAxMDA2NDQKLS0tIGEvYm9hcmQvaXA4NjAvaXA4NjAuYworKysgYi9ib2FyZC9pcDg2MC9pcDg2MC5jCkBAIC0yOCw3ICsyOCw4IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBsb25nIGludCBkcmFtX3NpemUgKGxvbmcgaW50LCBsb25nIGludCAqLCBsb25nIGludCk7Ci0KK3Vuc2lnbmVkIGxvbmcgaXA4NjBfZ2V0X2RyYW1fc2l6ZSh2b2lkKTsKK3Vuc2lnbmVkIGxvbmcgaXA4NjBfZ2V0X2Nsa19mcmVxICh2b2lkKTsKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2RlZmluZQlfTk9UX1VTRURfCTB4RkZGRkZGRkYKQEAgLTgyLDggKzgzLDIyIEBACiAJX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKIH07CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworaW50IGJvYXJkX3ByZV9pbml0KHZvaWQpCit7CisgICAgdm9sYXRpbGUgaW1tYXBfdCAgICAgKmltbWFwICA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisgICAgdm9sYXRpbGUgbWVtY3RsOHh4X3QgKm1lbWN0bCA9ICZpbW1hcC0+aW1fbWVtY3RsOworCisvKiBpbml0IEJDU1IgY2hpcHNlbGVjdCBsaW5lIGZvciBpcDg2MF9nZXRfY2xrX2ZyZXEoKSBhbmQgaXA4NjBfZ2V0X2RyYW1fc2l6ZSgpICovCisgICAgbWVtY3RsLT5tZW1jX29yNCA9IENGR19PUjQ7CisgICAgbWVtY3RsLT5tZW1jX2JyNCA9IENGR19CUjQ7CisKKyAgICByZXR1cm4gMDsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCiAgKiBDaGVjayBCb2FyZCBJZGVudGl0eToKQEAgLTEyNyw2ICsxNDIsNyBAQAogCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKikgQ0ZHX0lNTVI7CiAJdm9sYXRpbGUgbWVtY3RsOHh4X3QgKm1lbWN0bCA9ICZpbW1hcC0+aW1fbWVtY3RsOwogCWxvbmcgaW50IHNpemU7CisJdWxvbmcgcmVmcmVzaF92YWw7CiAKIAl1cG1jb25maWcgKFVQTUEsICh1aW50ICopIHNkcmFtX3RhYmxlLAogCQkJICAgc2l6ZW9mIChzZHJhbV90YWJsZSkgLyBzaXplb2YgKHVpbnQpKTsKQEAgLTEzNCw3ICsxNTAsMTcgQEAKIAkvKgogCSAqIFByZWxpbWluYXJ5IHByZXNjYWxlciBmb3IgcmVmcmVzaAogCSAqLwotCW1lbWN0bC0+bWVtY19tcHRwciA9IDB4MDQwMDsKKwlpZiAoaXA4NjBfZ2V0X2Nsa19mcmVxKCkgPT0gNTAwMDAwMDApCisJeworCQltZW1jdGwtPm1lbWNfbXB0cHIgPSAweDA0MDA7CisJCXJlZnJlc2hfdmFsID0gMHhDMzAwMDAwMDsKKwl9CisJZWxzZQorCXsKKwkJbWVtY3RsLT5tZW1jX21wdHByID0gMHgwMjAwOworCQlyZWZyZXNoX3ZhbCA9IDB4OUMwMDAwMDA7CisJfQorCiAKIAltZW1jdGwtPm1lbWNfbWFyID0gMHgwMDAwMDA4ODsKIApAQCAtMTUxLDE4ICsxNzcsMjIgQEAKIAogCS8qIHBlcmZvcm0gU0RSQU0gaW5pdGlhbGl6c2F0aW9uIHNlcXVlbmNlICovCiAKLQltZW1jdGwtPm1lbWNfbWFtciA9IDB4QzM4MDQxMTQ7Ci0JbWVtY3RsLT5tZW1jX21jciA9IDB4ODAwMDQxMDU7CS8qIHJ1biBwcmVjaGFyZ2UgcGF0dGVybiBmcm9tIGxvYyA1ICovCi0JdWRlbGF5ICgxKTsKLQltZW1jdGwtPm1lbWNfbWFtciA9IDB4QzM4MDQxMTg7Ci0JbWVtY3RsLT5tZW1jX21jciA9IDB4ODAwMDQxMzA7CS8qIHJ1biByZWZyZXNoIHBhdHRlcm4gOCB0aW1lcyAqLworCW1lbWN0bC0+bWVtY19tYW1yID0gMHgwMDgwNDExNCB8IHJlZnJlc2hfdmFsOworCW1lbWN0bC0+bWVtY19tY3IgID0gMHg4MDAwNDEwNTsJLyogcnVuIHByZWNoYXJnZSBwYXR0ZXJuIGZyb20gbG9jIDUgKi8KKwl1ZGVsYXkoMSk7CisJbWVtY3RsLT5tZW1jX21hbXIgPSAweDAwODA0MTE4IHwgcmVmcmVzaF92YWw7CisJbWVtY3RsLT5tZW1jX21jciAgPSAweDgwMDA0MTMwOwkvKiBydW4gcmVmcmVzaCBwYXR0ZXJuIDggdGltZXMgKi8KKwogCiAJdWRlbGF5ICgxMDAwKTsKIAogCS8qCiAJICogQ2hlY2sgU0RSQU0gTWVtb3J5IFNpemUKIAkgKi8KLQlzaXplID0gZHJhbV9zaXplIChDRkdfTUFNUiwgKHVsb25nICopIFNEUkFNX0JBU0UsIFNEUkFNX01BWF9TSVpFKTsKKwlpZiAoaXA4NjBfZ2V0X2RyYW1fc2l6ZSgpID09IDE2KQorCQlzaXplID0gZHJhbV9zaXplIChyZWZyZXNoX3ZhbCB8IDB4MDA4MDQxMTQsICh1bG9uZyAqKVNEUkFNX0JBU0UsIFNEUkFNX01BWF9TSVpFKTsKKwllbHNlCisJCXNpemUgPSBkcmFtX3NpemUgKHJlZnJlc2hfdmFsIHwgMHgwMDkwNjExNCwgKHVsb25nICopU0RSQU1fQkFTRSwgU0RSQU1fTUFYX1NJWkUpOwogCiAJdWRlbGF5ICgxMDAwKTsKIApAQCAtMjkxLDMgKzMyMSw2OCBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3Vuc2lnbmVkIGxvbmcgaXA4NjBfZ2V0X2Nsa19mcmVxKHZvaWQpCit7CisJdm9sYXRpbGUgaXA4NjBfYmNzcl90CSpiY3NyICAgPSAoaXA4NjBfYmNzcl90ICopQkNTUl9CQVNFOworCXVsb25nIHRlbXA7CisJdWNoYXIgc3lzY2xrOworCisJaWYgKChiY3NyLT5iZF9zdGF0dXMgJiAweDgwKSA9PSAweDgwKQkvKiBiZF9yZXYgdmFsaWQgPyAqLworCQlzeXNjbGsgPSAoYmNzci0+YmRfcmV2ICYgMHgxOCkgPj4gMzsKKwllbHNlCisJCXN5c2NsayA9IDB4MDA7CisKKwlzd2l0Y2ggKHN5c2NsaykKKwl7CisJCWNhc2UgMHgwMDoKKwkJCXRlbXAgPSA1MDAwMDAwMDsKKwkJCWJyZWFrOworCisJCWNhc2UgMHgwMToKKwkJCXRlbXAgPSA4MDAwMDAwMDsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQl0ZW1wID0gNTAwMDAwMDA7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gKHRlbXApOworCit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit1bnNpZ25lZCBsb25nIGlwODYwX2dldF9kcmFtX3NpemUodm9pZCkKK3sKKwl2b2xhdGlsZSBpcDg2MF9iY3NyX3QJKmJjc3IgICA9IChpcDg2MF9iY3NyX3QgKilCQ1NSX0JBU0U7CisJdWxvbmcgdGVtcDsKKwl1Y2hhciBkcmFtX3NpemU7CisKKwlpZiAoKGJjc3ItPmJkX3N0YXR1cyAmIDB4ODApID09IDB4ODApCS8qIGJkX3JldiB2YWxpZCA/ICovCisJCWRyYW1fc2l6ZSA9IChiY3NyLT5iZF9yZXYgJiAweEUwKSA+PiA1OworCWVsc2UKKwkJZHJhbV9zaXplID0gMHgwMDsJLyogZGVmYXVsdCBpcyAxNiBNQiAqLworCisJc3dpdGNoIChkcmFtX3NpemUpCisJeworCQljYXNlIDB4MDA6CisJCQl0ZW1wID0gMTY7CisJCQlicmVhazsKKworCQljYXNlIDB4MDE6CisJCQl0ZW1wID0gMzI7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJdGVtcCA9IDE2OworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuICh0ZW1wKTsKKworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9ib2FyZC9wbTgyNi9jb25maWcubWsgYi9ib2FyZC9wbTgyNi9jb25maWcubWsKaW5kZXggODUwMmUzZi4uZDJhYjRmZSAxMDA2NDQKLS0tIGEvYm9hcmQvcG04MjYvY29uZmlnLm1rCisrKyBiL2JvYXJkL3BtODI2L2NvbmZpZy5tawpAQCAtMzMsMTAgKzMzLDEwIEBACiAjCiAKIGlmZXEgKCQoQ09ORklHX0JPT1RfUk9NKSx5KQotCVRFWFRfQkFTRSA6PSAweDYwMDAwMDAwCisJVEVYVF9CQVNFIDo9IDB4RkY4MDAwMDAKIAlQTEFURk9STV9DUFBGTEFHUyArPSAtRENPTkZJR19CT09UX1JPTQogZWxzZQotCVRFWFRfQkFTRSA6PSAweDQwMDAwMDAwCisJVEVYVF9CQVNFIDo9IDB4RkYwMDAwMDAKIGVuZGlmCiAKIFBMQVRGT1JNX0NQUEZMQUdTICs9IC1EVEVYVF9CQVNFPSQoVEVYVF9CQVNFKSAtSSQoVE9QRElSKQpkaWZmIC0tZ2l0IGEvYm9hcmQvdHJhYi9mbGFzaC5jIGIvYm9hcmQvdHJhYi9mbGFzaC5jCmluZGV4IGQ4NmM0YmYuLjI3YzJhNWIgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RyYWIvZmxhc2guYworKysgYi9ib2FyZC90cmFiL2ZsYXNoLmMKQEAgLTE4NSw5ICsxODUsMTIgQEAKIAkJcmV0dXJuIEVSUl9JTlZBTDsKIAl9CiAKLQlpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spICE9Ci0JCShGTEFTSF9NQU5fQU1EICYgRkxBU0hfVkVORE1BU0spKSB7Ci0JCXJldHVybiBFUlJfVU5LTk9XTl9GTEFTSF9WRU5ET1I7CisJc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSB7CisJY2FzZSAoRkxBU0hfTUFOX0FNRCAmIEZMQVNIX1ZFTkRNQVNLKToJYnJlYWs7CS8qIE9LICovCisJY2FzZSAoRkxBU0hfTUFOX0ZVSiAmIEZMQVNIX1ZFTkRNQVNLKToJYnJlYWs7CS8qIE9LICovCisJZGVmYXVsdDoKKwkJZGVidWcgKCIjIyBmbGFzaF9lcmFzZTogdW5rbm93biBtYW51ZmFjdHVyZXJcbiIpOworCQlyZXR1cm4gKEVSUl9VTktOT1dOX0ZMQVNIX1ZFTkRPUik7CiAJfQogCiAJcHJvdCA9IDA7CmRpZmYgLS1naXQgYS9ib2FyZC90cmFiL3ZmZC5jIGIvYm9hcmQvdHJhYi92ZmQuYwppbmRleCA1ZTYwMWVmLi44OTRlMzE1IDEwMDY0NAotLS0gYS9ib2FyZC90cmFiL3ZmZC5jCisrKyBiL2JvYXJkL3RyYWIvdmZkLmMKQEAgLTU1LDcgKzU1LDggQEAKICNkZWZpbmUgQkxBVQkweDBDCiAjZGVmaW5lIFZJT0xFVFQJMFgwRAogCi11bG9uZwlmcmFtZV9idWZfc2l6ZTsKKy8qIE1BR0lDICovCisjZGVmaW5lCUZSQU1FX0JVRl9TSVpFCSgoMjU2KjQqNTYpLzgpCiAjZGVmaW5lIGZyYW1lX2J1Zl9vZmZzIDQKIAogLyogU3VwcG9ydGVkIFZGRCBUeXBlcyAqLwpAQCAtNzUsMTkgKzc2LDEzIEBACiAJdWxvbmcgYWRyLCBncmlkX2N5Y2xlOwogCXVuc2lnbmVkIGludCBiaXQsIGRpc3BsYXk7CiAJdW5zaWduZWQgY2hhciB0ZW1wLCBiaXRfbnI7Ci0JdWxvbmcgdmFsOwogCiAJLyoKIAkgKiBjbGVhciBmcmFtZSBidWZmZXIgKGxvZ2ljYWwgY2xlYXIgPT4gc2V0IHRvICJibGFjayIpCiAJICovCi0JaWYgKGdkLT52ZmRfaW52X2RhdGEgPT0gMCkKLQkJdmFsID0gMDsKLQllbHNlCi0JCXZhbCA9IH4wOwotCi0JZm9yIChhZHIgPSBnZC0+ZmJfYmFzZTsgYWRyIDw9IChnZC0+ZmJfYmFzZSs3MTY4KTsgYWRyICs9IDQpIHsKLQkJKCoodm9sYXRpbGUgdWxvbmcqKShhZHIpKSA9IHZhbDsKLQl9CisJbWVtc2V0ICgodm9pZCAqKShnZC0+ZmJfYmFzZSksCisJCWdkLT52ZmRfaW52X2RhdGEgPyAweEZGIDogMCwKKwkJRlJBTUVfQlVGX1NJWkUpOwogCiAJc3dpdGNoIChnZC0+dmZkX3R5cGUpIHsKIAljYXNlIFZGRF9UWVBFX1QxMTlDOgpAQCAtOTcsOCArOTIsOCBAQAogCQkJICAgICAoZ3JpZF9jeWNsZSArIDIwMCkgKiA0ICsKIAkJCSAgICAgZnJhbWVfYnVmX29mZnMgKyBkaXNwbGF5OwogIAkJCS8qIHdyYXAgYXJyb3VuZCBpZiBvZmZzZXQgKHNlZSBtYW51YWwgUzNDMjQwMCkgKi8KLQkJCWlmIChiaXQ+PWZyYW1lX2J1Zl9zaXplKjgpCi0JCQkJYml0ID0gYml0IC0gKGZyYW1lX2J1Zl9zaXplICogOCk7CisJCQlpZiAoYml0Pj1GUkFNRV9CVUZfU0laRSo4KQorCQkJCWJpdCA9IGJpdCAtIChGUkFNRV9CVUZfU0laRSAqIDgpOwogCQkJYWRyID0gZ2QtPmZiX2Jhc2UgKyAoYml0LzMyKSAqIDQgKyAoMyAtIChiaXQlMzIpIC8gOCk7CiAJCQliaXRfbnIgPSBiaXQgJSA4OwogCQkJYml0X25yID0gKGJpdF9uciA+IDMpID8gYml0X25yLTQgOiBiaXRfbnIrNDsKQEAgLTExNCw4ICsxMDksOCBAQAogCQkJZWxzZQogCQkJCWJpdCA9IGdyaWRfY3ljbGUqMjU2KjQrMjAwKjQrZnJhbWVfYnVmX29mZnMrZGlzcGxheS00OyAJLyogZ3JpZCBuci4gMCAqLwogCQkJLyogd3JhcCBhcnJvdW5kIGlmIG9mZnNldCAoc2VlIG1hbnVhbCBTM0MyNDAwKSAqLwotCQkJaWYgKGJpdD49ZnJhbWVfYnVmX3NpemUqOCkKLQkJCQliaXQgPSBiaXQtKGZyYW1lX2J1Zl9zaXplKjgpOworCQkJaWYgKGJpdD49RlJBTUVfQlVGX1NJWkUqOCkKKwkJCQliaXQgPSBiaXQtKEZSQU1FX0JVRl9TSVpFKjgpOwogCQkJYWRyID0gZ2QtPmZiX2Jhc2UrKGJpdC8zMikqNCsoMy0oYml0JTMyKS84KTsKIAkJCWJpdF9uciA9IGJpdCU4OwogCQkJYml0X25yID0gKGJpdF9ucj4zKT9iaXRfbnItNDpiaXRfbnIrNDsKQEAgLTEzNSw4ICsxMzAsOCBAQAogCQkJICAgICAoMjUzIC0gZ3JpZF9jeWNsZSkgKiA0ICsKIAkJCSAgICAgZnJhbWVfYnVmX29mZnMgKyBkaXNwbGF5OwogCQkJLyogd3JhcCBhcnJvdW5kIGlmIG9mZnNldCAoc2VlIG1hbnVhbCBTM0MyNDAwKSAqLwotCQkJaWYgKGJpdD49ZnJhbWVfYnVmX3NpemUqOCkKLQkJCQliaXQgPSBiaXQgLSAoZnJhbWVfYnVmX3NpemUgKiA4KTsKKwkJCWlmIChiaXQ+PUZSQU1FX0JVRl9TSVpFKjgpCisJCQkJYml0ID0gYml0IC0gKEZSQU1FX0JVRl9TSVpFICogOCk7CiAJCQlhZHIgPSBnZC0+ZmJfYmFzZSArIChiaXQvMzIpICogNCArICgzIC0gKGJpdCUzMikgLyA4KTsKIAkJCWJpdF9uciA9IGJpdCAlIDg7CiAJCQliaXRfbnIgPSAoYml0X25yID4gMykgPyBiaXRfbnItNCA6IGJpdF9ucis0OwpAQCAtMTUxLDggKzE0Niw4IEBACiAJCQkJYml0ID0gZ3JpZF9jeWNsZSoyNTYqNCsoMjUyLWdyaWRfY3ljbGUpKjQrZnJhbWVfYnVmX29mZnMrZGlzcGxheTsKIAogCQkJLyogd3JhcCBhcnJvdW5kIGlmIG9mZnNldCAoc2VlIG1hbnVhbCBTM0MyNDAwKSAqLwotCQkJaWYgKGJpdD49ZnJhbWVfYnVmX3NpemUqOCkKLQkJCQliaXQgPSBiaXQtKGZyYW1lX2J1Zl9zaXplKjgpOworCQkJaWYgKGJpdD49RlJBTUVfQlVGX1NJWkUqOCkKKwkJCQliaXQgPSBiaXQtKEZSQU1FX0JVRl9TSVpFKjgpOwogCQkJYWRyID0gZ2QtPmZiX2Jhc2UrKGJpdC8zMikqNCsoMy0oYml0JTMyKS84KTsKIAkJCWJpdF9uciA9IGJpdCU4OwogCQkJYml0X25yID0gKGJpdF9ucj4zKT9iaXRfbnItNDpiaXRfbnIrNDsKQEAgLTI2Myw4ICsyNTgsOCBAQAogCQkJCSAgKiB3cmFwIGFycm91bmQgaWYgb2Zmc2V0CiAJCQkJICAqIChzZWUgbWFudWFsIFMzQzI0MDApCiAJCQkJICAqLwotCQkJCWlmIChwaXhlbD49ZnJhbWVfYnVmX3NpemUqOCkKLQkJCQkJcGl4ZWwgPSBwaXhlbC0oZnJhbWVfYnVmX3NpemUqOCk7CisJCQkJaWYgKHBpeGVsPj1GUkFNRV9CVUZfU0laRSo4KQorCQkJCQlwaXhlbCA9IHBpeGVsLShGUkFNRV9CVUZfU0laRSo4KTsKIAkJCQlhZHIgICAgPSBnZC0+ZmJfYmFzZSsocGl4ZWwvMzIpKjQrKDMtKHBpeGVsJTMyKS84KTsKIAkJCQliaXRfbnIgPSBwaXhlbCU4OwogCQkJCWJpdF9uciA9IChiaXRfbnI+Myk/Yml0X25yLTQ6Yml0X25yKzQ7CkBAIC00NjYsNyArNDYxLDcgQEAKIAkvKiBmcmFtZSBidWZmZXIgc3RhcnRhZHIgKi8KIAlyTENEU0FERFIxID0gZ2QtPmZiX2Jhc2UgPj4gMTsKICAJLyogZnJhbWUgYnVmZmVyIGVuZGFkciAqLwotCXJMQ0RTQUREUjIgPSAoZ2QtPmZiX2Jhc2UgKyBmcmFtZV9idWZfc2l6ZSkgPj4gMTsKKwlyTENEU0FERFIyID0gKGdkLT5mYl9iYXNlICsgRlJBTUVfQlVGX1NJWkUpID4+IDE7CiAJckxDRFNBRERSMyA9ICgoMjU2LzQpKTsKIAogCWRlYnVnICgiTENEU0FERFIxOiAlbFhcbiIsIHJMQ0RTQUREUjEpOwpAQCAtNDkwLDExICs0ODUsOCBAQAogewogCXVsb25nIHNpemU7CiAKLQkvKiBNQUdJQyAqLwotCWZyYW1lX2J1Zl9zaXplID0gKDI1Nio0KjU2KS84OwotCiAJLyogUm91bmQgdXAgdG8gbmVhcmVzdCBmdWxsIHBhZ2UgKi8KLQlzaXplID0gKGZyYW1lX2J1Zl9zaXplICsgKFBBR0VfU0laRSAtIDEpKSAmIH4oUEFHRV9TSVpFIC0gMSk7CisJc2l6ZSA9IChGUkFNRV9CVUZfU0laRSArIChQQUdFX1NJWkUgLSAxKSkgJiB+KFBBR0VfU0laRSAtIDEpOwogCiAJZGVidWcgKCJSZXNlcnZpbmcgJWxkayBmb3IgVkZEIEZyYW1lYnVmZmVyIGF0OiAlMDhseFxuIiwgc2l6ZT4+MTAsIGFkZHIpOwogCmRpZmYgLS1naXQgYS9ib2FyZC92MzcvZmxhc2guYyBiL2JvYXJkL3YzNy9mbGFzaC5jCmluZGV4IDRkZTBlMTQuLmNiMGU2NzYgMTAwNjQ0Ci0tLSBhL2JvYXJkL3YzNy9mbGFzaC5jCisrKyBiL2JvYXJkL3YzNy9mbGFzaC5jCkBAIC0yMyw3ICsyMyw3IEBACiAKIC8qCiAgKiBZb28uIEpvbmdob29uLCBJUG9uZSwgeW9vdGhAaXBvbmUuY28ua3IKLSAqIFBQQ2Jvb3QgcG9ydCBvbiBSUFhsaXRlIGJvYXJkCisgKiBVLUJvb3QgcG9ydCBvbiBSUFhsaXRlIGJvYXJkCiAgKgogICogU29tZSBvZiBmbGFzaCBjb250cm9sIHdvcmRzIGFyZSBtb2RpZmllZC4gKGZyb20gMngxNmJpdCBkZXZpY2UKICAqIHRvIDR4OGJpdCBkZXZpY2UpCmRpZmYgLS1naXQgYS9ib2FyZC92MzcvdjM3LmMgYi9ib2FyZC92MzcvdjM3LmMKaW5kZXggNzY0YWZmNy4uZjQ2M2FmOCAxMDA2NDQKLS0tIGEvYm9hcmQvdjM3L3YzNy5jCisrKyBiL2JvYXJkL3YzNy92MzcuYwpAQCAtMjMsNyArMjMsNyBAQAogCiAvKgogICogWW9vLiBKb25naG9vbiwgSVBvbmUsIHlvb3RoQGlwb25lLmNvLmtyCi0gKiBQUENib290IHBvcnQgb24gUlBYbGl0ZSBib2FyZAorICogVS1Cb290IHBvcnQgb24gUlBYbGl0ZSBib2FyZAogICoKICAqIERSQU0gcmVsYXRlZCBVUE1BIHJlZ2lzdGVyIHZhbHVlcyBhcmUgbW9kaWZpZWQuCiAgKiBTZWUgUlBYTGl0ZSBlbmdpbmVlcmluZyBub3RlIDogNTBNSHovNjBucyAtIFVQTSBSQU0gV09SRFMKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfZmRvcy5jIGIvY29tbW9uL2NtZF9mZG9zLmMKaW5kZXggNzYzZjQxOC4uNGI0MTFiMyAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9mZG9zLmMKKysrIGIvY29tbW9uL2NtZF9mZG9zLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAogICAgIC8qIHByZS1zZXQgQm9vdCBmaWxlIG5hbWUgKi8KICAgICBpZiAoKG5hbWUgPSBnZXRlbnYoImJvb3RmaWxlIikpID09IE5VTEwpIHsKLSAgICAgICAgbmFtZSA9ICJwSW1hZ2UiOworICAgICAgICBuYW1lID0gInVJbWFnZSI7CiAgICAgfQogCiAgICAgc3dpdGNoIChhcmdjKSB7CmRpZmYgLS1naXQgYS9jb21tb24vY21kX2pmZnMyLmMgYi9jb21tb24vY21kX2pmZnMyLmMKaW5kZXggZmMxZDljNC4uOGRmODA2MSAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9qZmZzMi5jCisrKyBiL2NvbW1vbi9jbWRfamZmczIuYwpAQCAtODMsNyArODMsNyBAQAogaW50CiBkb19qZmZzMl9mc2xvYWQoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7Ci0JY2hhciAqZmlsZW5hbWUgPSAicEltYWdlIjsKKwljaGFyICpmaWxlbmFtZSA9ICJ1SW1hZ2UiOwogCXVsb25nIG9mZnNldCA9IENGR19MT0FEX0FERFI7CiAJaW50IHNpemU7CiAJc3RydWN0IHBhcnRfaW5mbyAqcGFydDsKZGlmZiAtLWdpdCBhL2NvbW1vbi9tYWluLmMgYi9jb21tb24vbWFpbi5jCmluZGV4IDQwMWVmY2YuLjllZTMyYTUgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9tYWluLmMKKysrIGIvY29tbW9uL21haW4uYwpAQCAtNjQwLDggKzY0MCw2IEBACiAJICAgIGNhc2UgMDoJCQkvKiBXYWl0aW5nIGZvciAodW5lc2NhcGVkKSAkCSovCiAJCWlmICgoYyA9PSAnXCcnKSAmJiAocHJldiAhPSAnXFwnKSkgewogCQkJc3RhdGUgPSAzOwotCQkJaWYgKGlucHV0Y250KQotCQkJCWlucHV0Y250LS07CiAJCQlicmVhazsKIAkJfQogCQlpZiAoKGMgPT0gJyQnKSAmJiAocHJldiAhPSAnXFwnKSkgewpAQCAtNjk0LDggKzY5Miw2IEBACiAJICAgIGNhc2UgMzoJCQkvKiBXYWl0aW5nIGZvciAnCSovCiAJCWlmICgoYyA9PSAnXCcnKSAmJiAocHJldiAhPSAnXFwnKSkgewogCQkJc3RhdGUgPSAwOwotCQkJaWYgKGlucHV0Y250KQotCQkJCWlucHV0Y250LS07CiAJCX0gZWxzZSB7CiAJCQkqKG91dHB1dCsrKSA9IGM7CiAJCQlvdXRwdXRjbnQtLTsKZGlmZiAtLWdpdCBhL2NwdS9tcGM4eHgvY3B1X2luaXQuYyBiL2NwdS9tcGM4eHgvY3B1X2luaXQuYwppbmRleCBjMGVlNWRlLi40YmQ5MWY5IDEwMDY0NAotLS0gYS9jcHUvbXBjOHh4L2NwdV9pbml0LmMKKysrIGIvY3B1L21wYzh4eC9jcHVfaW5pdC5jCkBAIC00Miw4ICs0Miw4IEBACiB7CiAjaWZuZGVmIENPTkZJR19NQlgKIAl2b2xhdGlsZSBtZW1jdGw4eHhfdCAqbWVtY3RsID0gJmltbXItPmltX21lbWN0bDsKLQl1bG9uZyByZWc7CiAjZW5kaWYKKwl1bG9uZyByZWc7CiAKIAkvKiBTWVBDUiAtIGNvbnRhaW5zIHdhdGNoZG9nIGNvbnRyb2wgKDExLTkpICovCiAKZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUtaTM4NiBiL2RvYy9SRUFETUUtaTM4NgppbmRleCA5OWIzZTE5Li44NjJmM2Y3IDEwMDY0NAotLS0gYS9kb2MvUkVBRE1FLWkzODYKKysrIGIvZG9jL1JFQURNRS1pMzg2CkBAIC0xLDQgKzEsNCBAQAotVGhpcyBpcyBteSBhdHRlbXB0IHRvIHBvcnQgUFBDQm9vdCB0byB0aGUgaTM4NiBwbGF0Zm9ybS4gVGhpcworVGhpcyBpcyBteSBhdHRlbXB0IHRvIHBvcnQgVS1Cb290IHRvIHRoZSBpMzg2IHBsYXRmb3JtLiBUaGlzCiB3b3JrIHdhcyBzcG9uc29yZWQgYnkgbXkgZW1wbHllciwgT21pY3JvbiBDZXRpIEFCLiBodHRwOi8vd3d3Lm9taWNyb24uc2UKIAogSXQgaXMgY3VycmVudGx5IGNhcGFibGUgb2YgYm9vdGluZyBhIGxpbnV4IGJ6SW1hZ2UgZnJvbSBmbGFzaCBvbgpAQCAtMjgsMTMgKzI4LDEzIEBACiAKIAogMikgUHJvZ3JhbSBpdCBpbiB0byB0aGUgQ0RQIGZsYXNoYmFuayB3aXRoIHJlbW9uCi0gICBwcGNib290LmJpbiBzaG91bGQgYmUgcHJvZ3JhbW1lZCBhdHQgb2Zmc2V0IDB4N2UwMDAgYW5kIHRoZSBrZXJuZWwgYXQKKyAgIHUtYm9vdC5iaW4gc2hvdWxkIGJlIHByb2dyYW1tZWQgYXR0IG9mZnNldCAweDdlMDAwIGFuZCB0aGUga2VybmVsIGF0CiAgICBvZmZzZXQgMC4gSWYgeW91IHdhbnQgdG8gdXNlIGEgamZmczIgcm9vdCBmaWxlIHN5c3RlbSAobm90IGluY2x1ZGVkIGhlcmUpLCAKICAgIGl0IHNob3VsZCBiZSAgcHJvZ3JhbW1lZCB0byBvZmZzZXQgMHgxMDAwMDAuCiAgICAKICAgIHJlbW9uPiB6CiAgICByZW1vbj4geWkKLSAgIHJlbW9uPiBucyBwcGNib290LmJpbiA3ZTAwMDAKKyAgIHJlbW9uPiBucyB1LWJvb3QuYmluIDdlMDAwMAogICAgcmVtb24+IG5zIGJ6SW1hZ2UgMAogICAgcmVtb24+IG5zIGltYWdlLmpmZnMyIDEwMDAwMAogCkBAIC00Myw3ICs0Myw3IEBACiAgICByZW1vbj4gegogICAgcmVtb24+IGcKIAotNCkgUFBDYm9vdCBzaG91bGQgb3V0cHV0IHNvbWUgbWVzc2FnZSBhbmQgYSBwcm9tcHQgb24gdGhlIHRlcm1pbmFsLCB0bworNCkgVS1Cb290IHNob3VsZCBvdXRwdXQgc29tZSBtZXNzYWdlIGFuZCBhIHByb21wdCBvbiB0aGUgdGVybWluYWwsIHRvCiAgICBzdGFydCB0aGUga2VybmVsIGlzc3VlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKICAgIAogICAgQk9PVD4gYm9vdG0KZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUuSVBIQVNFNDUzOSBiL2RvYy9SRUFETUUuSVBIQVNFNDUzOQppbmRleCBkM2RiMzhlLi45MzAyZmY1IDEwMDY0NAotLS0gYS9kb2MvUkVBRE1FLklQSEFTRTQ1MzkKKysrIGIvZG9jL1JFQURNRS5JUEhBU0U0NTM5CkBAIC0zMzIsMTAgKzMzMiwxMCBAQAogCSQgbWFrZSBJUEhBU0U0NTM5X2NvbmZpZwogCSQgbWFrZSBvbGRjb25maWcKIAkkIG1ha2UgZGVwCi0JJCBtYWtlIHBJbWFnZQotCSQgY3AgLXAgYXJjaC9wcGMvbWJ4Ym9vdC9wSW1hZ2UgL3RmdHBib290CisJJCBtYWtlIHVJbWFnZQorCSQgY3AgLXAgYXJjaC9wcGMvbWJ4Ym9vdC91SW1hZ2UgL3RmdHBib290CiAKLQlMb2FkIHBJbWFnZSB2aWEgdGZ0cCBhbmQgYm9vdCBpdC4KKwlMb2FkIHVJbWFnZSB2aWEgdGZ0cCBhbmQgYm9vdCBpdC4KIAogCiBGbGFzaCBvcmdhbmlzYXRpb246CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3BwY2Jvb3QtaTM4Ni5oIGIvaW5jbHVkZS9hc20taTM4Ni91LWJvb3QtaTM4Ni5oCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWkzODYvcHBjYm9vdC1pMzg2LmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWkzODYvdS1ib290LWkzODYuaAppbmRleCA3MDQ1MjZlLi42ZTVlMDU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3BwY2Jvb3QtaTM4Ni5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdS1ib290LWkzODYuaApAQCAtMjEsOCArMjEsOCBAQAogICogTUEgMDIxMTEtMTMwNyBVU0EKICAqLwogCi0jaWZuZGVmIF9QUENCT09UX0kzODZfSF8KLSNkZWZpbmUgX1BQQ0JPT1RfSTM4Nl9IXwkxCisjaWZuZGVmIF9VX0JPT1RfSTM4Nl9IXworI2RlZmluZSBfVV9CT09UX0kzODZfSF8JMQogCiAvKiBmb3IgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMsIHNlZSBzdGFydC5TICovCiBleHRlcm4gdWxvbmcgaTM4NmJvb3Rfc3RhcnQ7CSAgICAvKiBjb2RlIHN0YXJ0IChpbiBmbGFzaCkgKi8KQEAgLTUwLDQgKzUwLDQgQEAKIGludAlkcmFtX2luaXQgKHZvaWQpOwogCiAKLSNlbmRpZgkvKiBfUFBDQk9PVF9JMzg2X0hfICovCisjZW5kaWYJLyogX1VfQk9PVF9JMzg2X0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbW1vbi5oIGIvaW5jbHVkZS9jb21tb24uaAppbmRleCBiY2UwMTMyLi5hYzJhNTdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbW1vbi5oCisrKyBiL2luY2x1ZGUvY29tbW9uLmgKQEAgLTE0OSw3ICsxNDksNyBAQAogIyBpbmNsdWRlIDxhc20vdS1ib290LWFybS5oPgkvKiBBUk0gdmVyc2lvbiB0byBiZSBmaXhlZCEgKi8KICNlbmRpZiAvKiBDT05GSUdfQVJNICovCiAjaWZkZWYgQ09ORklHX0kzODYJCS8qIHg4NiB2ZXJzaW9uIHRvIGJlIGZpeGVkISAqLwotIyBpbmNsdWRlIDxhc20vcHBjYm9vdC1pMzg2Lmg+ICAKKyMgaW5jbHVkZSA8YXNtL3UtYm9vdC1pMzg2Lmg+ICAKICNlbmRpZiAvKiBDT05GSUdfSTM4NiAqLwogCiB2b2lkICAgIHBjaV9pbml0ICAgICAgKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb21tcHJvYy5oIGIvaW5jbHVkZS9jb21tcHJvYy5oCmluZGV4IDE1OWMyOTQuLjVmZjgyYjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29tbXByb2MuaAorKysgYi9pbmNsdWRlL2NvbW1wcm9jLmgKQEAgLTU5NSw2ICs1OTUsMzIgQEAKIAogI2VuZGlmCS8qIENPTkZJR19QQ1VfRSwgQ09ORklHX0NDTSAqLwogCisvKioqICBFTFBUODYwICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIENPTkZJR19FTFBUODYwCisvKiBCaXRzIGluIHBhcmFsbGVsIEkvTyBwb3J0IHJlZ2lzdGVycyB0aGF0IGhhdmUgdG8gYmUgc2V0L2NsZWFyZWQKKyAqIHRvIGNvbmZpZ3VyZSB0aGUgcGlucyBmb3IgU0NDMSB1c2UuCisgKi8KKyMgIGRlZmluZSBQUk9GRl9FTkVUICAgICAgICBQUk9GRl9TQ0MxCisjICBkZWZpbmUgQ1BNX0NSX0VORVQgICAgICAgQ1BNX0NSX0NIX1NDQzEKKyMgIGRlZmluZSBTQ0NfRU5FVCAgICAgICAgICAwCisKKyMgIGRlZmluZSBQQV9FTkVUX1JYRCAgICAgICAoKHVzaG9ydCkweDAwMDEpCS8qIFBBIDE1ICovCisjICBkZWZpbmUgUEFfRU5FVF9UWEQgICAgICAgKCh1c2hvcnQpMHgwMDAyKQkvKiBQQSAxNCAqLworIyAgZGVmaW5lIFBBX0VORVRfUkNMSyAgICAgICgodXNob3J0KTB4MDEwMCkJLyogUEEgIDcgKi8KKyMgIGRlZmluZSBQQV9FTkVUX1RDTEsgICAgICAoKHVzaG9ydCkweDAyMDApCS8qIFBBICA2ICovCisKKyMgIGRlZmluZSBQQ19FTkVUX1RFTkEgICAgICAoKHVzaG9ydCkweDAwMDEpCS8qIFBDIDE1ICovCisjICBkZWZpbmUgUENfRU5FVF9DTFNOICAgICAgKCh1c2hvcnQpMHgwMDEwKQkvKiBQQyAxMSAqLworIyAgZGVmaW5lIFBDX0VORVRfUkVOQSAgICAgICgodXNob3J0KTB4MDAyMCkJLyogUEMgMTAgKi8KKworLyogQ29udHJvbCBiaXRzIGluIHRoZSBTSUNSIHRvIHJvdXRlIFRDTEsgKENMSzIpIGFuZCBSQ0xLIChDTEsxKSB0bworICogU0NDMS4gIEFsc28sIG1ha2Ugc3VyZSBHUjEgKGJpdCAyNCkgYW5kIFNDMSAoYml0IDI1KSBhcmUgemVyby4KKyAqLworIyAgZGVmaW5lIFNJQ1JfRU5FVF9NQVNLICAgICgodWludCkweDAwMDAwMEZGKQorIyAgZGVmaW5lIFNJQ1JfRU5FVF9DTEtSVCAgICgodWludCkweDAwMDAwMDI1KQorI2VuZGlmCS8qIENPTkZJR19FTFBUODYwICovCisKIC8qKiogIEVTVEVFTSAxOTJFICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZmRlZiBDT05GSUdfRVNURUVNMTkyRQogLyogRVNURUVNMTkyRQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL0NQQzQ1LmggYi9pbmNsdWRlL2NvbmZpZ3MvQ1BDNDUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDg0M2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL0NQQzQ1LmgKQEAgLTAsMCArMSw0NDggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDEtMjAwMworICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICoKKyAqIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSBDUEM0NSBib2FyZC4KKyAqCisgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogYm9hcmQvY29uZmlnLmggLSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGJvYXJkIHNwZWNpZmljCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworLyoKKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKiAoZWFzeSB0byBjaGFuZ2UpCisgKi8KKworI2RlZmluZSBDT05GSUdfTVBDODI0WAkJMQorI2RlZmluZSBDT05GSUdfTVBDODI0NQkJMQorI2RlZmluZSBDT05GSUdfQ1BDNDUJCTEKKworCisjZGVmaW5lIENPTkZJR19DT05TX0lOREVYCTEKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQk5NjAwCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7IDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCB9CisKKyNkZWZpbmUgQ09ORklHX0NMT0NLU19JTl9NSFoJMQkvKiBjbG9ja3MgcGFzc3NlZCB0byBMaW51eCBpbiBNSHoJKi8KKworI2RlZmluZSBDT05GSUdfUFJFQk9PVAkiZWNobztlY2hvIFR5cGUgXCJydW4gZmxhc2hfbmZzXCIgdG8gbW91bnQgcm9vdCBmaWxlc3lzdGVtIG92ZXIgTkZTO2VjaG8iCisKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQk1CisKKyNkZWZpbmUgQ09ORklHX0JPT1RQX01BU0sJKENPTkZJR19CT09UUF9ERUZBVUxUIHwgQ09ORklHX0JPT1RQX0JPT1RGSUxFU0laRSkKKworI2RlZmluZSBDT05GSUdfQ09NTUFORFMJICAgICAgKCBDT05GSUdfQ01EX0RGTAl8IFwKKwkJCQlDRkdfQ01EX0JFREJVRyAgfCBcCisJCQkJQ0ZHX0NNRF9ESENQCXwgXAorCQkJCUNGR19DTURfUENJCXwgXAorCQkJCTAgLyogQ0ZHX0NNRF9EQVRFICovCSkKKworLyogVGhpcyBtdXN0IGJlIGluY2x1ZGVkIEFGVEVSIHRoZSBkZWZpbml0aW9uIG9mIENPTkZJR19DT01NQU5EUyAoaWYgYW55KQorICovCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLworI2RlZmluZSBDRkdfTE9OR0hFTFAJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KKyNkZWZpbmUgQ0ZHX1BST01QVAkiPT4gIgkJLyogTW9uaXRvciBDb21tYW5kIFByb21wdAkqLworI2RlZmluZSBDRkdfQ0JTSVpFCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KKworI2lmIDEKKyNkZWZpbmUJQ0ZHX0hVU0hfUEFSU0VSCQkxCS8qIHVzZSAiaHVzaCIgY29tbWFuZCBwYXJzZXIJKi8KKyNlbmRpZgorI2lmZGVmCUNGR19IVVNIX1BBUlNFUgorI2RlZmluZQlDRkdfUFJPTVBUX0hVU0hfUFMyCSI+ICIKKyNlbmRpZgorCisvKiBQcmludCBCdWZmZXIgU2l6ZQorICovCisjZGVmaW5lIENGR19QQlNJWkUJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikKKworI2RlZmluZQlDRkdfTUFYQVJHUwkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFCUNGR19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZQkqLworI2RlZmluZSBDRkdfTE9BRF9BRERSCTB4MDAxMDAwMDAJLyogRGVmYXVsdCBsb2FkIGFkZHJlc3MJCSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFN0YXJ0IGFkZHJlc3NlcyBmb3IgdGhlIGZpbmFsIG1lbW9yeSBjb25maWd1cmF0aW9uCisgKiAoU2V0IHVwIGJ5IHRoZSBzdGFydHVwIGNvZGUpCisgKiBQbGVhc2Ugbm90ZSB0aGF0IENGR19TRFJBTV9CQVNFIF9tdXN0XyBzdGFydCBhdCAwCisgKi8KKworI2RlZmluZSBDRkdfU0RSQU1fQkFTRQkgICAgMHgwMDAwMDAwMAorCisjaWYgZGVmaW5lZChDT05GSUdfQk9PVF9ST00pCisjZGVmaW5lIENGR19GTEFTSF9CQVNFCSAgICAweEZGMDAwMDAwCisjZWxzZQorI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkgICAgMHhGRjgwMDAwMAorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX1JFU0VUX0FERFJFU1MgICAweEZGRjAwMTAwCisKKyNkZWZpbmUgQ0ZHX0VVTUJfQUREUgkgICAgMHhGQ0UwMDAwMAorCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgVEVYVF9CQVNFCisKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOCSAgICAoMjU2IDw8IDEwKSAvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uaXRvcgkqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkgICAgKDEyOCA8PCAxMCkgLyogUmVzZXJ2ZSAxMjgga0IgZm9yIG1hbGxvYygpCSovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQgICAweDAwMDA0MDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24JCSovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkgICAgMHgwMjAwMDAwMAkvKiAwIC4uLiAzMiBNQiBpbiBEUkFNCQkqLworCisJLyogTWF4aW11bSBhbW91bnQgb2YgUkFNLgorCSAqLworI2RlZmluZSBDRkdfTUFYX1JBTV9TSVpFICAgIDB4MTAwMDAwMDAKKworCisjaWYgQ0ZHX01PTklUT1JfQkFTRSA+PSBDRkdfRkxBU0hfQkFTRQorI3VuZGVmIENGR19SQU1CT09UCisjZWxzZQorI2RlZmluZSBDRkdfUkFNQk9PVAorI2VuZGlmCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGVmaW5pdGlvbnMgZm9yIGluaXRpYWwgc3RhY2sgcG9pbnRlciBhbmQgZGF0YSBhcmVhCisgKi8KKworCS8qIFNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YQorCSAqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRSAgICAxMjgKKworI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUiAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5EICAgICAgMHgxMDAwCisjZGVmaW5lIENGR19HQkxfREFUQV9PRkZTRVQgIChDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCisKKy8qCisgKiBOUzE2NTUwIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTlMxNjU1MAkJCisjZGVmaW5lIENGR19OUzE2NTUwX1NFUklBTAorCisjZGVmaW5lIENGR19OUzE2NTUwX1JFR19TSVpFCTEKKworI2RlZmluZSBDRkdfTlMxNjU1MF9DTEsJCWdldF9idXNfZnJlcSgwKQorCisjZGVmaW5lIENGR19OUzE2NTUwX0NPTTEJKENGR19FVU1CX0FERFIgKyAweDQ1MDApCisjZGVmaW5lIENGR19OUzE2NTUwX0NPTTIJKENGR19FVU1CX0FERFIgKyAweDQ2MDApCisjZGVmaW5lCURVQVJUX0RDUgkJKENGR19FVU1CX0FERFIgKyAweDQ1MTEpCisKKy8qCisgKiBMb3cgTGV2ZWwgQ29uZmlndXJhdGlvbiBTZXR0aW5ncworICogKGFkZHJlc3MgbWFwcGluZ3MsIHJlZ2lzdGVyIGluaXRpYWwgdmFsdWVzLCBldGMuKQorICogWW91IHNob3VsZCBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBpZiB5b3UgbWFrZSBjaGFuZ2VzIGhlcmUuCisgKiBGb3IgdGhlIGRldGFpbCBkZXNjcmlwdGlvbiByZWZlciB0byB0aGUgTVBDODI0MCB1c2VyJ3MgbWFudWFsLgorICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUSAgMzMwMDAwMDAKKyNkZWZpbmUgQ0ZHX0haCQkgICAgIDEwMDAKKy8qCisgKiBTRFJBTSBDb25maWd1cmF0aW9uIFNldHRpbmdzCisgKiBQbGVhc2Ugbm90ZTogY3VycmVudGx5IG9ubHkgNjQgYW5kIDEyOCBNQiBTRFJBTSBzaXplIHN1cHBvcnRlZAorICogc2V0IENGR19TRFJBTV9TSVpFIHRvIDY0IG9yIDEyOAorICogTWVtb3J5IGNvbmZpZ3VyYXRpb24gdXNpbmcgU1BEIGluZm9ybWF0aW9uIHN0b3JlZCBvbiB0aGUgU09ESU1NcworICogbm90IHlldCBzdXBwb3J0ZWQuCisgKi8KKyAKKyNkZWZpbmUJQ0ZHX1NEUkFNX1NJWkUgICAgNjQJCS8qIFNEUkFNIHNpemUgLS0gNjQgb3IgMTI4IE1CIHN1cHBvcnRlZCAqLworCisJLyogQml0LWZpZWxkIHZhbHVlcyBmb3IgTUNDUjEuCisJICovCisjZGVmaW5lIENGR19ST01OQUwJICAgIDAKKyNkZWZpbmUgQ0ZHX1JPTUZBTAkgICAgNworCisjaWYgKENGR19TRFJBTV9TSVpFID09IDY0KQkJCS8qIDY0IE1CICovCisjZGVmaW5lIENGR19CQU5LMF9ST1cJMAkJCS8qIFNEUkFNIGJhbmsgNy0wIHJvdyBhZGRyZXNzICovCisjZWxpZiAoQ0ZHX1NEUkFNX1NJWkUgPT0gMTI4KQkJCS8qIDEyOCBNQiAqLworI2RlZmluZSBDRkdfQkFOSzBfUk9XCTIJCQkvKiBTRFJBTSBiYW5rIDctMCByb3cgYWRkcmVzcyAqLworI2Vsc2UKKyMgIGVycm9yICJTRFJBTSBzaXplIG5vdCBzdXBwb3J0ZWQiCisjZW5kaWYKKyNkZWZpbmUgQ0ZHX0JBTksxX1JPVwkwCQorI2RlZmluZSBDRkdfQkFOSzJfUk9XCTAKKyNkZWZpbmUgQ0ZHX0JBTkszX1JPVwkwCisjZGVmaW5lIENGR19CQU5LNF9ST1cJMAorI2RlZmluZSBDRkdfQkFOSzVfUk9XCTAKKyNkZWZpbmUgQ0ZHX0JBTks2X1JPVwkwCisjZGVmaW5lIENGR19CQU5LN19ST1cJMAorCisJLyogQml0LWZpZWxkIHZhbHVlcyBmb3IgTUNDUjIuCisJICovCisjZGVmaW5lIENGR19SRUZJTlQJICAgIDQzMAkgICAgLyogUmVmcmVzaCBpbnRlcnZhbAkJCSovCisKKwkvKiBCdXJzdCBUbyBQcmVjaGFyZ2UuIEJpdHMgb2YgdGhpcyB2YWx1ZSBnbyB0byBNQ0NSMyBhbmQgTUNDUjQuCisJICovCisjZGVmaW5lIENGR19CU1RPUFJFCSAgICAxOTIKKworCS8qIEJpdC1maWVsZCB2YWx1ZXMgZm9yIE1DQ1IzLgorCSAqLworI2RlZmluZSBDRkdfUkVGUkVDCSAgICAyCSAgICAvKiBSZWZyZXNoIHRvIGFjdGl2YXRlIGludGVydmFsCSovCisjZGVmaW5lIENGR19SRExBVAkgICAgMwkgICAgLyogRGF0YSBsYXRhbmN5IGZyb20gcmVhZCBjb21tYW5kCSovCisKKwkvKiBCaXQtZmllbGQgdmFsdWVzIGZvciBNQ0NSNC4KKwkgKi8KKyNkZWZpbmUgQ0ZHX1BSRVRPQUNUCSAgICAyCSAgICAvKiBQcmVjaGFyZ2UgdG8gYWN0aXZhdGUgaW50ZXJ2YWwJKi8KKyNkZWZpbmUgQ0ZHX0FDVFRPUFJFCSAgICA1CSAgICAvKiBBY3RpdmF0ZSB0byBQcmVjaGFyZ2UgaW50ZXJ2YWwJKi8KKyNkZWZpbmUgQ0ZHX1NETU9ERV9DQVNfTEFUICAyCSAgICAvKiBTRE1PREUgQ0FTIGxhdGFuY3kJCSovCisjZGVmaW5lIENGR19TRE1PREVfV1JBUAkgICAgMAkgICAgLyogU0RNT0RFIHdyYXAgdHlwZQkJCSovCisjZGVmaW5lIENGR19TRE1PREVfQlVSU1RMRU4gMgkgICAgLyogU0RNT0RFIEJ1cnN0IGxlbmd0aAkJKi8KKyNkZWZpbmUgQ0ZHX0FDVE9SVwkgICAgMgorI2RlZmluZSBDRkdfUkVHSVNURVJEX1RZUEVfQlVGRkVSIDEKKyNkZWZpbmUgQ0ZHX0VYVFJPTQkgICAgMQorI2RlZmluZSBDRkdfUkVHRElNTQkgICAgMAorCisvKiBNZW1vcnkgYmFuayBzZXR0aW5ncy4KKyAqIE9ubHkgYml0cyAyMC0yOSBhcmUgYWN0dWFsbHkgdXNlZCBmcm9tIHRoZXNlIHZhbGVzIHRvIHNldCB0aGUKKyAqIHN0YXJ0L2VuZCBhZGRyZXNzZXMuIFRoZSB1cHBlciB0d28gYml0cyB3aWxsIGFsd2F5cyBiZSAwLCBhbmQgdGhlIGxvd2VyCisgKiAyMCBiaXRzIHdpbGwgYmUgMHgwMDAwMCBmb3IgYSBzdGFydCBhZGRyZXNzLCBvciAweGZmZmZmIGZvciBhbiBlbmQKKyAqIGFkZHJlc3MuIFJlZmVyIHRvIHRoZSBNUEM4MjQwIGJvb2suCisgKi8KKworI2RlZmluZSBDRkdfQkFOSzBfU1RBUlQJICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0JBTkswX0VORAkgICAgKENGR19NQVhfUkFNX1NJWkUgLSAxKQorI2RlZmluZSBDRkdfQkFOSzBfRU5BQkxFICAgIDEKKyNkZWZpbmUgQ0ZHX0JBTksxX1NUQVJUCSAgICAweDNmZjAwMDAwCisjZGVmaW5lIENGR19CQU5LMV9FTkQJICAgIDB4M2ZmZmZmZmYKKyNkZWZpbmUgQ0ZHX0JBTksxX0VOQUJMRSAgICAwCisjZGVmaW5lIENGR19CQU5LMl9TVEFSVAkgICAgMHgzZmYwMDAwMAorI2RlZmluZSBDRkdfQkFOSzJfRU5ECSAgICAweDNmZmZmZmZmCisjZGVmaW5lIENGR19CQU5LMl9FTkFCTEUgICAgMAorI2RlZmluZSBDRkdfQkFOSzNfU1RBUlQJICAgIDB4M2ZmMDAwMDAKKyNkZWZpbmUgQ0ZHX0JBTkszX0VORAkgICAgMHgzZmZmZmZmZgorI2RlZmluZSBDRkdfQkFOSzNfRU5BQkxFICAgIDAKKyNkZWZpbmUgQ0ZHX0JBTks0X1NUQVJUCSAgICAweDNmZjAwMDAwCisjZGVmaW5lIENGR19CQU5LNF9FTkQJICAgIDB4M2ZmZmZmZmYKKyNkZWZpbmUgQ0ZHX0JBTks0X0VOQUJMRSAgICAwCisjZGVmaW5lIENGR19CQU5LNV9TVEFSVAkgICAgMHgzZmYwMDAwMAorI2RlZmluZSBDRkdfQkFOSzVfRU5ECSAgICAweDNmZmZmZmZmCisjZGVmaW5lIENGR19CQU5LNV9FTkFCTEUgICAgMAorI2RlZmluZSBDRkdfQkFOSzZfU1RBUlQJICAgIDB4M2ZmMDAwMDAKKyNkZWZpbmUgQ0ZHX0JBTks2X0VORAkgICAgMHgzZmZmZmZmZgorI2RlZmluZSBDRkdfQkFOSzZfRU5BQkxFICAgIDAKKyNkZWZpbmUgQ0ZHX0JBTks3X1NUQVJUCSAgICAweDNmZjAwMDAwCisjZGVmaW5lIENGR19CQU5LN19FTkQJICAgIDB4M2ZmZmZmZmYKKyNkZWZpbmUgQ0ZHX0JBTks3X0VOQUJMRSAgICAwCisKKyNkZWZpbmUgQ0ZHX09EQ1IJICAgIDB4ZmYKKworI2RlZmluZSBDRkdfSUJBVDBMICAoQ0ZHX1NEUkFNX0JBU0UgfCBCQVRMX1BQXzEwIHwgQkFUTF9NRU1DT0hFUkVOQ0UpCisjZGVmaW5lIENGR19JQkFUMFUgIChDRkdfU0RSQU1fQkFTRSB8IEJBVFVfQkxfMjU2TSB8IEJBVFVfVlMgfCBCQVRVX1ZQKQorCisjZGVmaW5lIENGR19JQkFUMUwgIChDRkdfSU5JVF9SQU1fQUREUiB8IEJBVExfUFBfMTAgfCBCQVRMX01FTUNPSEVSRU5DRSkKKyNkZWZpbmUgQ0ZHX0lCQVQxVSAgKENGR19JTklUX1JBTV9BRERSIHwgQkFUVV9CTF8xMjhLIHwgQkFUVV9WUyB8IEJBVFVfVlApCisKKyNkZWZpbmUgQ0ZHX0lCQVQyTCAgKDB4ODAwMDAwMDAgfCBCQVRMX1BQXzEwIHwgQkFUTF9DQUNIRUlOSElCSVQpCisjZGVmaW5lIENGR19JQkFUMlUgICgweDgwMDAwMDAwIHwgQkFUVV9CTF8yNTZNIHwgQkFUVV9WUyB8IEJBVFVfVlApCisKKyNkZWZpbmUgQ0ZHX0lCQVQzTCAgKDB4RkMwMDAwMDAgfCBCQVRMX1BQXzEwIHwgQkFUTF9DQUNIRUlOSElCSVQpCisjZGVmaW5lIENGR19JQkFUM1UgICgweEZDMDAwMDAwIHwgQkFUVV9CTF82NE0gfCBCQVRVX1ZTIHwgQkFUVV9WUCkKKworI2RlZmluZSBDRkdfREJBVDBMICBDRkdfSUJBVDBMCisjZGVmaW5lIENGR19EQkFUMFUgIENGR19JQkFUMFUKKyNkZWZpbmUgQ0ZHX0RCQVQxTCAgQ0ZHX0lCQVQxTAorI2RlZmluZSBDRkdfREJBVDFVICBDRkdfSUJBVDFVCisjZGVmaW5lIENGR19EQkFUMkwgIENGR19JQkFUMkwKKyNkZWZpbmUgQ0ZHX0RCQVQyVSAgQ0ZHX0lCQVQyVQorI2RlZmluZSBDRkdfREJBVDNMICBDRkdfSUJBVDNMCisjZGVmaW5lIENGR19EQkFUM1UgIENGR19JQkFUM1UKKworLyoKKyAqIEZvciBib290aW5nIExpbnV4LCB0aGUgYm9hcmQgaW5mbyBhbmQgY29tbWFuZCBsaW5lIGRhdGEKKyAqIGhhdmUgdG8gYmUgaW4gdGhlIGZpcnN0IDggTUIgb2YgbWVtb3J5LCBzaW5jZSB0aGlzIGlzCisgKiB0aGUgbWF4aW11bSBtYXBwZWQgYnkgdGhlIExpbnV4IGtlcm5lbCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisgKi8KKyNkZWZpbmUgQ0ZHX0JPT1RNQVBTWgkgICAgKDggPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXggKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRkxBU0ggb3JnYW5pemF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkxCS8qIE1heCBudW1iZXIgb2YgZmxhc2ggYmFua3MJCSovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkzOQkvKiBNYXggbnVtYmVyIG9mIHNlY3RvcnMgaW4gb25lIGJhbmsJKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGMTYwRjNUCTB4ODhGMzg4RjMJLyogIDE2TSA9IDFNIHggMTYgdG9wIGJvb3Qgc2VjdG9yCSovCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCTEyMDAwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAoaW4gbXMpCSovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCTUwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAoaW4gbXMpCSovCisKKwkvKiBXYXJpbmluZzogZW52aXJvbm1lbnQgaXMgbm90IEVNQkVEREVEIGluIHRoZSBwcGNib290IGNvZGUuCisJICogSXQncyBzdG9yZWQgaW4gZmxhc2ggc2VwYXJhdGVseS4KKwkgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkgICAgMQorCisjZGVmaW5lIENGR19FTlZfQUREUgkJKENGR19GTEFTSF9CQVNFICsgMHg3QzAwMDApCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHg0MDAwCS8qIFNpemUgb2YgdGhlIEVudmlyb25tZW50CQkqLworI2RlZmluZSBDRkdfRU5WX09GRlNFVAkJMAkvKiBzdGFydGluZyByaWdodCBhdCB0aGUgYmVnaW5uaW5nCSovCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCTB4ODAwMCAvKiBTaXplIG9mIHRoZSBFbnZpcm9ubWVudCBTZWN0b3IJKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ2FjaGUgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19DQUNIRUxJTkVfU0laRQkzMgorI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjICBkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSElGVAk1CS8qIGxvZyBiYXNlIDIgb2YgdGhlIGFib3ZlIHZhbHVlCSovCisjZW5kaWYKKworLyoKKyAqIEludGVybmFsIERlZmluaXRpb25zCisgKgorICogQm9vdCBGbGFncworICovCisjZGVmaW5lIEJPT1RGTEFHX0NPTEQJCTB4MDEJLyogTm9ybWFsIFBvd2VyLU9uOiBCb290IGZyb20gRkxBU0gJKi8KKyNkZWZpbmUgQk9PVEZMQUdfV0FSTQkJMHgwMgkvKiBTb2Z0d2FyZSByZWJvb3QJCQkqLworCisKKyNkZWZpbmUJU1JBTV9CQVNFCQkweDgwMDAwMDAwCS8qIFNSQU0gYmFzZSBhZGRyZXNzIAkqLworI2RlZmluZQlTUkFNX0VORAkJMHg4MDFGRkZGRgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBDUEM0NSBNZW1vcnkgTWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCVNSQU1fQkFTRQkweDgwMDAwMDAwCS8qIFNSQU0gYmFzZSBhZGRyZXNzICAgICAgICAgICAgKi8KKyNkZWZpbmUJU1QxNjU1Ml9BX0JBU0UJMHg4MDIwMDAwMAkvKiBTVDE2NTUyIGNoYW5uZWwgQQkJKi8KKyNkZWZpbmUJU1QxNjU1Ml9CX0JBU0UJMHg4MDQwMDAwMAkvKiBTVDE2NTUyIGNoYW5uZWwgQQkJKi8KKyNkZWZpbmUJQkNTUl9CQVNFCTB4ODA2MDAwMDAJLyogYm9hcmQgY29udHJvbCAvIHN0YXR1cyByZWdpc3RlcnMgKi8KKyNkZWZpbmUJRElTUExBWV9CQVNFCTB4ODA2MDAwNDAJLyogRElTUExBWSBiYXNlCQkJKi8KKyNkZWZpbmUJUENNQ0lBX01FTV9CQVNFCTB4ODEwMDAwMDAJLyogUENNQ0lBIG1lbW9yeSB3aW5kb3cgYmFzZSAgICAgICAgKi8KKyNkZWZpbmUJUENNQ0lBX0lPX0JBU0UJMHhGRTAwMDAwMAkvKiBQQ01DSUEgSU8gd2luZG93IGJhc2UgICAgICAgICAgICAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIENQQzQ1IENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJSVJRX0VOQV8xCQkqKCh2b2xhdGlsZSB1Y2hhciopKEJDU1JfQkFTRSArIDB4MDApKQorI2RlZmluZQlJUlFfU1RBVF8xCQkqKCh2b2xhdGlsZSB1Y2hhciopKEJDU1JfQkFTRSArIDB4MDEpKQorI2RlZmluZQlJUlFfRU5BXzIJCSooKHZvbGF0aWxlIHVjaGFyKikoQkNTUl9CQVNFICsgMHgwMikpCisjZGVmaW5lCUlSUV9TVEFUXzIJCSooKHZvbGF0aWxlIHVjaGFyKikoQkNTUl9CQVNFICsgMHgwMykpCisjZGVmaW5lCUJPQVJEX0NUUkwJCSooKHZvbGF0aWxlIHVjaGFyKikoQkNTUl9CQVNFICsgMHgwNCkpCisjZGVmaW5lCUJPQVJEX1NUQVQJCSooKHZvbGF0aWxlIHVjaGFyKikoQkNTUl9CQVNFICsgMHgwNSkpCisjZGVmaW5lCVdER19TVEFSVAkJKigodm9sYXRpbGUgdWNoYXIqKShCQ1NSX0JBU0UgKyAweDA2KSkKKyNkZWZpbmUJV0RHX1BSRVNUT1AJCSooKHZvbGF0aWxlIHVjaGFyKikoQkNTUl9CQVNFICsgMHgwNikpCisjZGVmaW5lCVdER19TVE9QCQkqKCh2b2xhdGlsZSB1Y2hhciopKEJDU1JfQkFTRSArIDB4MDYpKQorI2RlZmluZQlCT0FSRF9SRVYJCSooKHZvbGF0aWxlIHVjaGFyKikoQkNTUl9CQVNFICsgMHgwNykpCisKKy8qIElSUV9FTkFfMSBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUJSV9FTkFfMV9JRVJBCTB4ODAJCS8qIElOVEEgZW5hYmxlIAkJCSovCisjZGVmaW5lCUlfRU5BXzFfSUVSQgkweDQwCQkvKiBJTlRCIGVuYWJsZQkJCSovCisjZGVmaW5lCUlfRU5BXzFfSUVSQwkweDIwCQkvKiBJTlRDIGVuYWJsZQkJCSovCisjZGVmaW5lCUlfRU5BXzFfSUVSRAkweDEwCQkvKiBJTlREIGVuYWJsZQkJCSovCisKKy8qIElSUV9TVEFUXzEgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lCUlfU1RBVF8xX0lOVEEJMHg4MAkJLyogSU5UQSBzdGF0dXMJCQkqLworI2RlZmluZQlJX1NUQVRfMV9JTlRCCTB4NDAJCS8qIElOVEIgc3RhdHVzCQkJKi8KKyNkZWZpbmUJSV9TVEFUXzFfSU5UQwkweDIwCQkvKiBJTlRDIHN0YXR1cwkJCSovCisjZGVmaW5lCUlfU1RBVF8xX0lOVEQJMHgxMAkJLyogSU5URCBzdGF0dXMJCQkqLworCisvKiBJUlFfRU5BXzIgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lCUlfRU5BXzJfSUVBQgkweDgwCQkvKiBBQk9SVCBJUlEgZW5hYmxlCQkqLworI2RlZmluZQlJX0VOQV8yX0lFSzEJMHg0MAkJLyogS0VZMSBJUlEgZW5hYmxlCQkqLworI2RlZmluZQlJX0VOQV8yX0lFSzIJMHgyMAkJLyogS0VZMiBJUlEgZW5hYmxlCQkqLyAKKyNkZWZpbmUJSV9FTkFfMl9JRVJUCTB4MTAJCS8qIFJUQyBJUlEgZW5hYmxlCQkqLworI2RlZmluZQlJX0VOQV8yX0lFU00JMHgwOAkJLyogTE04MSBJUlEgZW5hYmxlCQkqLworI2RlZmluZQlJX0VOQV8yX0lFREcJMHgwNAkJLyogREVHRU5FUkFUSU5HIElSUSBlbmFibGUJKi8KKyNkZWZpbmUJSV9FTkFfMl9JRVMyCTB4MDIJCS8qIFNUMTY1NTIvQiBJUlEgZW5hYmxlCQkqLworI2RlZmluZQlJX0VOQV8yX0lFUzEJMHgwMQkJLyogU1QxNjU1Mi9BIElSUSBlbmFibGUJCSovCisKKy8qIElSUV9TVEFUXzIgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lCUlfU1RBVF8yX0FCTwkweDgwCQkvKiBBQk9SVCBJUlEgc3RhdHVzCQkqLworI2RlZmluZQlJX1NUQVRfMl9LWTEJMHg0MAkJLyogS0VZMSBJUlEgc3RhdHVzCQkqLworI2RlZmluZQlJX1NUQVRfMl9LWTIJMHgyMAkJLyogS0VZMiBJUlEgc3RhdHVzCQkqLyAKKyNkZWZpbmUJSV9TVEFUXzJfUlRDCTB4MTAJCS8qIFJUQyBJUlEgc3RhdHVzCQkqLworI2RlZmluZQlJX1NUQVRfMl9TTU4JMHgwOAkJLyogTE04MSBJUlEgc3RhdHVzCQkqLyAKKyNkZWZpbmUJSV9TVEFUXzJfREVHCTB4MDQJCS8qIERFR0VORVJBVElORyBJUlEgc3RhdHVzCSovCisjZGVmaW5lCUlfU1RBVF8yX1NJTzIJMHgwMgkJLyogU1QxNjU1Mi9CIElSUSBzdGF0dXMJCSovCisjZGVmaW5lCUlfU1RBVF8yX1NJTzEJMHgwMQkJLyogU1QxNjU1Mi9BIElSUSBzdGF0dXMJCSovCisKKy8qIEJPQVJEX0NUUkwgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lCVVTRVJfTEVEUwkJMgkJCS8qIDIgdXNlciBMRURzCSovCisKKyNpZiAoVVNFUl9MRURTID09IDQpCisjZGVmaW5lCUJfQ1RSTF9XUlNFCQkweDgwCisjZGVmaW5lCUJfQ1RSTF9LUlNFCQkweDQwCisjZGVmaW5lCUJfQ1RSTF9GV1JFCQkweDIwCQkvKiBGbGFzaCB3cml0ZSBlbmFibGUJCSovCisjZGVmaW5lCUJfQ1RSTF9GV1BUCQkweDEwCQkvKiBGbGFzaCB3cml0ZSBwcm90ZWN0CQkqLworI2RlZmluZQlCX0NUUkxfTEVEMwkJMHgwOAkJLyogTEVEIDMgY29udHJvbAkJKi8KKyNkZWZpbmUJQl9DVFJMX0xFRDIJCTB4MDQJCS8qIExFRCAyIGNvbnRyb2wJCSovCisjZGVmaW5lCUJfQ1RSTF9MRUQxCQkweDAyCQkvKiBMRUQgMSBjb250cm9sCQkqLworI2RlZmluZQlCX0NUUkxfTEVEMAkJMHgwMQkJLyogTEVEIDAgY29udHJvbAkJKi8KKyNlbHNlCisjZGVmaW5lCUJfQ1RSTF9XUlNFCQkweDgwCisjZGVmaW5lCUJfQ1RSTF9LUlNFCQkweDQwCisjZGVmaW5lCUJfQ1RSTF9GV1JFXzEJCTB4MjAJCS8qIEZsYXNoIHdyaXRlIGVuYWJsZQkJKi8KKyNkZWZpbmUJQl9DVFJMX0ZXUFRfMQkJMHgxMAkJLyogRmxhc2ggd3JpdGUgcHJvdGVjdAkJKi8KKyNkZWZpbmUJQl9DVFJMX0xFRDEJCTB4MDgJCS8qIExFRCAxIGNvbnRyb2wJCSovCisjZGVmaW5lCUJfQ1RSTF9MRUQwCQkweDA0CQkvKiBMRUQgMCBjb250cm9sCQkqLworI2RlZmluZQlCX0NUUkxfRldSRV8wCQkweDAyCQkvKiBGbGFzaCB3cml0ZSBlbmFibGUJCSovCisjZGVmaW5lCUJfQ1RSTF9GV1BUXzAJCTB4MDEJCS8qIEZsYXNoIHdyaXRlIHByb3RlY3QJCSovCisjZW5kaWYKKworLyogQk9BUkRfU1RBVCBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUJQl9TVEFUX1dER0UJCTB4ODAKKyNkZWZpbmUJQl9TVEFUX1dER1MJCTB4NDAKKyNkZWZpbmUJQl9TVEFUX1dSU1QJCTB4MjAKKyNkZWZpbmUJQl9TVEFUX0tSU1QJCTB4MTAKKyNkZWZpbmUJQl9TVEFUX0NTVzMJCTB4MDgJCS8qIHNpdGNoIGJpdCAzIHN0YXR1cwkJKi8KKyNkZWZpbmUJQl9TVEFUX0NTVzIJCTB4MDQJCS8qIHNpdGNoIGJpdCAyIHN0YXR1cwkJKi8KKyNkZWZpbmUJQl9TVEFUX0NTVzEJCTB4MDIJCS8qIHNpdGNoIGJpdCAxIHN0YXR1cwkJKi8KKyNkZWZpbmUJQl9TVEFUX0NTVzAJCTB4MDEJCS8qIHNpdGNoIGJpdCAwIHN0YXR1cwkJKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRGlzcGxheSBhZGRyZXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQlESVNQX1VEQ19SQU0JKERJU1BMQVlfQkFTRSArIDB4MDgpCS8qIFVEQyBSQU0JICAgICAgICovCisjZGVmaW5lCURJU1BfQ0hSX1JBTQkoRElTUExBWV9CQVNFICsgMHgxOCkJLyogY2hhcmFjdGVyIFJhbSAgICAgICAqLworI2RlZmluZQlESVNQX0ZMQVNICShESVNQTEFZX0JBU0UgKyAweDIwKQkvKiBGbGFzaCBSYW0gICAgICAgICAgICovCisKKyNkZWZpbmUJRElTUF9VRENfQURSCSooKHZvbGF0aWxlIHVjaGFyKikoRElTUExBWV9CQVNFICsgMHgwMCkpCS8qIFVEQyBBZGRyZXNzIFJlZy4gICAgKi8KKyNkZWZpbmUJRElTUF9DV09SRAkqKCh2b2xhdGlsZSB1Y2hhciopKERJU1BMQVlfQkFTRSArIDB4MTApKQkvKiBDb250cm9sIFdvcmQgUmVnLiAgICovCisKKyNkZWZpbmUJRElTUF9ESUcwCSooKHZvbGF0aWxlIHVjaGFyKikoRElTUF9DSFJfUkFNICsgMHgwMCkpCS8qIERpZ2l0IDAgYWRkcmVzcyAgICAgKi8gICAgICAKKyNkZWZpbmUJRElTUF9ESUcxCSooKHZvbGF0aWxlIHVjaGFyKikoRElTUF9DSFJfUkFNICsgMHgwMSkpCS8qIERpZ2l0IDAgYWRkcmVzcyAgICAgKi8gICAgICAKKyNkZWZpbmUJRElTUF9ESUcyCSooKHZvbGF0aWxlIHVjaGFyKikoRElTUF9DSFJfUkFNICsgMHgwMikpCS8qIERpZ2l0IDAgYWRkcmVzcyAgICAgKi8KKyNkZWZpbmUJRElTUF9ESUczCSooKHZvbGF0aWxlIHVjaGFyKikoRElTUF9DSFJfUkFNICsgMHgwMykpCS8qIERpZ2l0IDAgYWRkcmVzcyAgICAgKi8gICAgICAKKyNkZWZpbmUJRElTUF9ESUc0CSooKHZvbGF0aWxlIHVjaGFyKikoRElTUF9DSFJfUkFNICsgMHgwNCkpCS8qIERpZ2l0IDAgYWRkcmVzcyAgICAgKi8gICAgICAKKyNkZWZpbmUJRElTUF9ESUc1CSooKHZvbGF0aWxlIHVjaGFyKikoRElTUF9DSFJfUkFNICsgMHgwNSkpCS8qIERpZ2l0IDAgYWRkcmVzcyAgICAgKi8KKyNkZWZpbmUJRElTUF9ESUc2CSooKHZvbGF0aWxlIHVjaGFyKikoRElTUF9DSFJfUkFNICsgMHgwNikpCS8qIERpZ2l0IDAgYWRkcmVzcyAgICAgKi8gICAgICAKKyNkZWZpbmUJRElTUF9ESUc3CSooKHZvbGF0aWxlIHVjaGFyKikoRElTUF9DSFJfUkFNICsgMHgwNykpCS8qIERpZ2l0IDAgYWRkcmVzcyAgICAgKi8gICAgICAKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQQ0kgc3R1ZmYKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBDT05GSUdfUENJCQkJLyogaW5jbHVkZSBwY2kgc3VwcG9ydAkJCSovCisjdW5kZWYgQ09ORklHX1BDSV9QTlAKKworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCQkvKiBNdWx0aSBldGhlcm5ldCBjYXJkcyBzdXBwb3J0IAkqLworCisjZGVmaW5lIENPTkZJR19FRVBSTzEwMAorCisjZGVmaW5lIFBDSV9FTkVUMF9JT0FERFIJMHgwMDEwNDAwMAorI2RlZmluZSBQQ0lfRU5FVDBfTUVNQUREUgkweDgyMDAwMDAwCisjZGVmaW5lCVBDSV9QTFg5MDMwX01FTUFERFIJMHg4MjEwMDAwMAorI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9DUFU4Ni5oIGIvaW5jbHVkZS9jb25maWdzL0NQVTg2LmgKaW5kZXggYWU4NTI1Zi4uOTcxMmQ0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL0NQVTg2LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL0NQVTg2LmgKQEAgLTE3MSw3ICsxNzEsNyBAQAogCQkJCSBDRkdfQ01EX0VFUFJPTSB8IFwKIAkJCQkgQ0ZHX0NNRF9EQVRFCXwgXAogCQkJCSBDRkdfQ01EX0kyQwl8IFwKLQkJCQkgQ0ZHX0NNRF9ET0MpCisJCQkJIENGR19DTURfRE9DCSkKIAogLyogdGhpcyBtdXN0IGJlIGluY2x1ZGVkIEFGVEVSIHRoZSBkZWZpbml0aW9uIG9mIENPTkZJR19DT01NQU5EUyAoaWYgYW55KSAqLwogI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgpAQCAtMzI5LDggKzMyOSw4IEBACiAjZGVmaW5lIENGR19JMkNfRUVQUk9NX0FERFJfT1ZFUkZMT1cJMHgwNwogI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUwk0CiAjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9ERUxBWV9NUwkxMAkvKiBhbmQgdGFrZXMgdXAgdG8gMTAgbXNlYyAqLwotI2RlZmluZSBDRkdfRU5WX09GRlNFVAkJMAotI2RlZmluZSBDRkdfRU5WX1NJWkUJCTIwNDgKKyNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJCTUxMgorI2RlZmluZSBDRkdfRU5WX1NJWkUJCSgyMDQ4IC0gNTEyKQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvQ1U4MjQuaCBiL2luY2x1ZGUvY29uZmlncy9DVTgyNC5oCmluZGV4IGVkMzhlZjYuLjQwYmEyNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9DVTgyNC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9DVTgyNC5oCkBAIC02MCw5ICs2MCwxMCBAQAogI2RlZmluZSBDT05GSUdfQk9PVFBfTUFTSwkoQ09ORklHX0JPT1RQX0RFRkFVTFQgfCBDT05GSUdfQk9PVFBfQk9PVEZJTEVTSVpFKQogCiAjZGVmaW5lIENPTkZJR19DT01NQU5EUwkgICAgICAoIENPTkZJR19DTURfREZMCXwgXAorCQkJCUNGR19DTURfQkVEQlVHICB8IFwKIAkJCQlDRkdfQ01EX0RIQ1AJfCBcCiAJCQkJQ0ZHX0NNRF9QQ0kJfCBcCi0JCQkJMC8qIENGR19DTURfREFURSAqLwkpCisJCQkJMCAvKiBDRkdfQ01EX0RBVEUgKi8JKQogCiAvKiBUaGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpCiAgKi8KQEAgLTMwMiw0ICszMDMsNyBAQAogI2RlZmluZSBDRkdfRVRIX0RFVl9GTgkgICAgIDB4NzgwMAogI2RlZmluZSBDRkdfRVRIX0lPQkFTRQkgICAgIDB4MDAxMDQwMDAKIAorI2RlZmluZSBDT05GSUdfRUVQUk8xMDAKKyNkZWZpbmUgUENJX0VORVQwX0lPQUREUgkweDAwMTA0MDAwCisjZGVmaW5lIFBDSV9FTkVUMF9NRU1BRERSCTB4ODAwMDAwMDAKICNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvRUxQVDg2MC5oIGIvaW5jbHVkZS9jb25maWdzL0VMUFQ4NjAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTU2MWI5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL0VMUFQ4NjAuaApAQCAtMCwwICsxLDM5MCBAQAorLyoKKyoqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqKgorKiogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzCisqKiBUaGUgTEVPWCB0ZWFtIDx0ZWFtQGxlb3gub3JnPiwgaHR0cDovL3d3dy5sZW94Lm9yZworKioKKyoqIExFT1gub3JnIGlzIGFib3V0IHRoZSBkZXZlbG9wbWVudCBvZiBmcmVlIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSByZXNvdXJjZXMKKyoqICAgZm9yIHN5c3RlbSBvbiBjaGlwLgorKioKKyoqIERlc2NyaXB0aW9uOiBVLUJvb3QgcG9ydCBvbiB0aGUgTEVPWCdzIEVMUFQ4NjAgQ1BVIGJvYXJkCisqKiB+fn5+fn5+fn5+fgorKioKKyoqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqKgorKiogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKiogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyoqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisqKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyoqCisqKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyoqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisqKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisqKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKioKKyoqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKiogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyoqIE1BIDAyMTExLTEzMDcgVVNBCisqKgorKio9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisKKy8qCisgKiBib2FyZC9jb25maWcuaCAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYm9hcmQgc3BlY2lmaWMKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICogKGVhc3kgdG8gY2hhbmdlKQorICovCisKKyNkZWZpbmUgQ09ORklHX01QQzg2MAkJMQkvKiBJdCdzIGEgTVBDODYwLCBpbiBmYWN0IGEgODYwVCBDUFUgKi8KKyNkZWZpbmUgQ09ORklHX01QQzg2MFQJCTEKKyNkZWZpbmUgQ09ORklHX0VMUFQ4NjAJCTEJLyogLi4ub24gYSBMRU9YJ3MgRUxQVDg2MCBDUFUgYm9hcmQgKi8KKworI2RlZmluZQlDT05GSUdfOHh4X0NPTlNfU01DMQkxCS8qIENvbnNvbGUgaXMgb24gU01DMQkJICAgICovCisjdW5kZWYJICBDT05GSUdfOHh4X0NPTlNfU01DMgorI3VuZGVmCSAgQ09ORklHXzh4eF9DT05TX05PTkUKKworI2RlZmluZSBDT05GSUdfQ0xPQ0tTX0lOX01IWiAgICAxICAvKiBDbG9jayBwYXNzZWQgdG8gTGludXggKDwyLjQuNSkgaW4gTUh6ICovCisjZGVmaW5lIENPTkZJR184eHhfR0NMS19GUkVRICAgIDUwMDAwMDAwICAgICAgIC8qIE1QQzg2MFQgcnVucyBhdCA1ME1IeiAqLworCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJNQkvKiBhdXRvYm9vdCBhZnRlciA1IHNlY29uZHMJKi8KKworI2RlZmluZSBDT05GSUdfQk9BUkRfUFJFX0lOSVQgICAxICAgICAgIC8qIENhbGwgYm9hcmRfcHJlX2luaXQgICAgICAgICAgKi8KKworLyogQk9PVCBhcmd1bWVudHMgKi8KKyNkZWZpbmUgQ09ORklHX1BSRUJPT1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgImVjaG87IgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgImVjaG8gVHlwZSBcInJ1biBuZnNib290XCIgdG8gbW91bnQgcm9vdCBmaWxlc3lzdGVtIG92ZXIgTkZTOyIgICAgICAgIFwKKyAgICAgImVjaG8iCisKKyN1bmRlZgkgIENPTkZJR19CT09UQVJHUwkKKworI2RlZmluZQlDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCQkJCQlcCisgICAgInJhbWFyZ3M9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9yYW0gcndcMCIJCQlcCisgICAgInJvb3RhcmdzPXNldGVudiByb290cGF0aCAvdGZ0cC8kKGlwYWRkcilcMCIJCQlcCisgICAgIm5mc2FyZ3M9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgIgkJCQlcCisgICAgICAgICJuZnNyb290PSQoc2VydmVyaXApOiQocm9vdHBhdGgpXDAiCQkJCVwKKyAgICAiYWRkaXA9c2V0ZW52IGJvb3RhcmdzICQoYm9vdGFyZ3MpICIJCQkJXAorICAgICAgICAiaXA9JChpcGFkZHIpOiQoc2VydmVyaXApOiQoZ2F0ZXdheWlwKTokKG5ldG1hc2spIgkJXAorICAgICAgICAiOiQoaG9zdG5hbWUpOmV0aDA6b2ZmIHBhbmljPTFcMCIJCQkJXAorICAgICJyYW1ib290PXRmdHAgNDAwMDAwIC9ob21lL3BhdWdhbWwvcE11bHRpOyIJCQkJXAorICAgICAgICAicnVuIHJhbWFyZ3M7Ym9vdG1cMCIJCQkJCQlcCisgICAgIm5mc2Jvb3Q9dGZ0cCA0MDAwMDAgL2hvbWUvcGF1Z2FtbC91SW1hZ2U7IgkJCQlcCisgICAgICAgICJydW4gcm9vdGFyZ3M7cnVuIG5mc2FyZ3M7cnVuIGFkZGlwO2Jvb3RtXDAiCQkJXAorICAgICIiCisjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkicnVuIHJhbWJvb3QiCisKKyNkZWZpbmUgQ09ORklHX0JPT1RQX01BU0sJKENPTkZJR19CT09UUF9ERUZBVUxUIHwgQ09ORklHX0JPT1RQX0JPT1RGSUxFU0laRSkKKworI3VuZGVmCSAgQ09ORklHX1dBVENIRE9HCQkvKiB3YXRjaGRvZyBkaXNhYmxlZAkJKi8KKyN1bmRlZgkgIENPTkZJR19DQU5fRFJJVkVSCQkvKiBDQU4gRHJpdmVyIHN1cHBvcnQgZGlzYWJsZWQJKi8KKyN1bmRlZgkgIENPTkZJR19SVENfTVBDOHh4CQkvKiBpbnRlcm5hbCBSVEMgTVBDOHh4IHVudXNlZAkqLworI2RlZmluZSBDT05GSUdfUlRDX0RTMTY0eCAgICAgICAxICAgICAgIC8qIFJUQyBpcyBhIERhbGxhcyBEUzE2NDYgICAgICAgKi8KKworI2RlZmluZSBDT05GSUdfTE9BRFNfRUNITwkxCS8qIGVjaG8gb24gZm9yIHNlcmlhbCBkb3dubG9hZAkqLworI3VuZGVmCSAgQ0ZHX0xPQURTX0JBVURfQ0hBTkdFCQkvKiBkb24ndCBhbGxvdyBiYXVkcmF0ZSBjaGFuZ2UJKi8KKworI2RlZmluZSBDT05GSUdfQ09NTUFORFMJICAgICAgICAoIENPTkZJR19DTURfREZMIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGR19DTURfQVNLRU5WIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGR19DTURfREFURSAgICkKKworLyogdGhpcyBtdXN0IGJlIGluY2x1ZGVkIEFGVEVSIHRoZSBkZWZpbml0aW9uIG9mIENPTkZJR19DT01NQU5EUyAoaWYgYW55KSAqLworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisvKgorICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucworICovCisjZGVmaW5lCUNGR19MT05HSEVMUAkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZQlDRkdfUFJPTVBUICAgICAiTEVPWF9lbHB0ODYwOiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQJKi8KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjICBkZWZpbmUgQ0ZHX0NCU0laRQkxMDI0CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLworI2Vsc2UKKyMgIGRlZmluZSBDRkdfQ0JTSVpFCSAyNTYJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCisjZW5kaWYKKworI2RlZmluZQlDRkdfUEJTSVpFIChDRkdfQ0JTSVpFK3NpemVvZihDRkdfUFJPTVBUKSsxNikgLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUJQ0ZHX01BWEFSR1MJICAxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFCSAgQ0ZHX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplCSovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgwMDQwMDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uCSovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJMHgwMEMwMDAwMAkvKiA0IC4uLiAxMiBNQiBpbiBEUkFNCSovCisKKyNkZWZpbmUJQ0ZHX0xPQURfQUREUgkJMHgwMDEwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcwkqLworCisjZGVmaW5lCUNGR19IWgkJMTAwMAkJLyogZGVjcmVtZW50ZXIgZnJlcTogMSBtcyB0aWNrcwkqLworCisvKgorICogRW52aXJvbm1lbnQgVmFyaWFibGVzIGFuZCBTdG9yYWdlcworICovCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFICAgIDEgIC8qIEFsbG93IE92ZXJ3cml0ZSBvZiBzZXJpYWwjICYgZXRoYWRkciAqLworCisjdW5kZWYgICAgQ0ZHX0VOVl9JU19JTl9OVlJBTSAgICAgICAgICAvKiBFbnZpcm9ubWVudCBpcyBpbiBOVlJBTSAgICAgICAqLworI3VuZGVmICAgIENGR19FTlZfSVNfSU5fRUVQUk9NICAgICAgICAgLyogRW52aXJvbm1lbnQgaXMgaW4gSTJDIEVFUFJPTSAgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSCAgICAgMSAgICAgIC8qIEVudmlyb25tZW50IGlzIGluIEZMQVNIICAgICAgICovCisKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQk5NjAwICAgLyogY29uc29sZSBiYXVkcmF0ZSA9IDk2MDAgYnBzICAgKi8KKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCXsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwIH0KKworI2RlZmluZSBDT05GSUdfRVRIQUREUiAgICAgICAgICAwMDowMTo3NzowMDo2MDo0MAorI2RlZmluZSBDT05GSUdfSVBBRERSICAgICAgICAgICAxOTIuMTY4LjAuMzAKKyNkZWZpbmUgQ09ORklHX05FVE1BU0sgICAgICAgICAgMjU1LjI1NS4yNTUuMAorCisjZGVmaW5lIENPTkZJR19TRVJWRVJJUCAgICAgICAgIDE5Mi4xNjguMC4xCisjZGVmaW5lIENPTkZJR19HQVRFV0FZSVAgICAgICAgIDE5Mi4xNjguMC4xCisKKy8qCisgKiBMb3cgTGV2ZWwgQ29uZmlndXJhdGlvbiBTZXR0aW5ncworICogKGFkZHJlc3MgbWFwcGluZ3MsIHJlZ2lzdGVyIGluaXRpYWwgdmFsdWVzLCBldGMuKQorICogWW91IHNob3VsZCBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBpZiB5b3UgbWFrZSBjaGFuZ2VzIGhlcmUuCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSW50ZXJuYWwgTWVtb3J5IE1hcHBlZCBSZWdpc3RlcgorICovCisjZGVmaW5lIENGR19JTU1SCQkweEZGMDAwMDAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIERlZmluaXRpb25zIGZvciBpbml0aWFsIHN0YWNrIHBvaW50ZXIgYW5kIGRhdGEgYXJlYSAoaW4gRFBSQU0pCisgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJQ0ZHX0lNTVIKKyNkZWZpbmUJQ0ZHX0lOSVRfUkFNX0VORAkweDJGMDAJLyogRW5kIG9mIHVzZWQgYXJlYSBpbiBEUFJBTQkqLworI2RlZmluZQlDRkdfR0JMX0RBVEFfU0laRQk2NCAgLyogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdGlhbCBkYXRhICovCisjZGVmaW5lIENGR19HQkxfREFUQV9PRkZTRVQgICAgKENGR19JTklUX1JBTV9FTkQgLSBDRkdfR0JMX0RBVEFfU0laRSkKKyNkZWZpbmUJQ0ZHX0lOSVRfU1BfT0ZGU0VUCUNGR19HQkxfREFUQV9PRkZTRVQKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU3RhcnQgYWRkcmVzc2VzIGZvciB0aGUgZmluYWwgbWVtb3J5IGNvbmZpZ3VyYXRpb24KKyAqIChTZXQgdXAgYnkgdGhlIHN0YXJ0dXAgY29kZSkKKyAqIFBsZWFzZSBub3RlIHRoYXQgQ0ZHX1NEUkFNX0JBU0UgX211c3RfIHN0YXJ0IGF0IDAKKyAqLworI2RlZmluZQlDRkdfU0RSQU1fQkFTRQkJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkJMHgwMjAwMDAwMAorI2RlZmluZSBDRkdfTlZSQU1fQkFTRSAgICAgICAgICAweDAzMDAwMDAwCisKKyNpZiBkZWZpbmVkKENGR19FTlZfSVNfSU5fRkxBU0gpCisjICBpZiBkZWZpbmVkKERFQlVHKQorIyAgICBkZWZpbmUgQ0ZHX01PTklUT1JfTEVOCSgzMjAgPDwgMTApICAvKiBSZXNlcnZlIDMyMCBrQiBmb3IgTW9uaXRvciAgKi8KKyMgIGVsc2UKKyMgICAgZGVmaW5lIENGR19NT05JVE9SX0xFTgkoMjU2IDw8IDEwKSAgLyogUmVzZXJ2ZSAyNTYga0IgZm9yIE1vbml0b3IgICovCisjICBlbmRpZgorI2Vsc2UKKyMgIGlmIGRlZmluZWQoREVCVUcpCisjICAgIGRlZmluZSBDRkdfTU9OSVRPUl9MRU4JKDI1NiA8PCAxMCkgIC8qIFJlc2VydmUgMjU2IGtCIGZvciBNb25pdG9yICAqLworIyAgZWxzZQorIyAgICBkZWZpbmUgQ0ZHX01PTklUT1JfTEVOCSgxOTIgPDwgMTApICAvKiBSZXNlcnZlIDE5MiBrQiBmb3IgTW9uaXRvciAgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFCUNGR19GTEFTSF9CQVNFCisjZGVmaW5lCUNGR19NQUxMT0NfTEVOCQkoMTI4IDw8IDEwKSAgLyogUmVzZXJ2ZSAxMjgga0IgZm9yIG1hbGxvYygpICovCisKKy8qCisgKiBGb3IgYm9vdGluZyBMaW51eCwgdGhlIGJvYXJkIGluZm8gYW5kIGNvbW1hbmQgbGluZSBkYXRhCisgKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCA4IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcworICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICovCisjZGVmaW5lCUNGR19CT09UTUFQU1oJCSg4IDw8IDIwKSAgICAvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZMQVNIIG9yZ2FuaXphdGlvbgorICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMQkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcyAgICAgICAgKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTgJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJMTIwMDAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlIChpbiBtcykgICAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAk1MDAJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKGluIG1zKSAgICovCisKKyNpZiBkZWZpbmVkKENGR19FTlZfSVNfSU5fRkxBU0gpCisjICBkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQgICAgICAgIDB4MTAwMDAJLyogT2Zmc2V0ICAgb2YgRW52aXJvbm1lbnQgU2VjdG9yICAgICovCisjICBkZWZpbmUgQ0ZHX0VOVl9TSVpFICAgICAgICAgIDB4MTAwMDAgLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBTZWN0b3IgICovCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTlZSQU0gb3JnYW5pemF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX05WUkFNX0JBU0VfQUREUiAgICAgQ0ZHX05WUkFNX0JBU0UgLyogQmFzZSBhZGRyZXNzIG9mIE5WUkFNIGFyZWEgKi8KKyNkZWZpbmUgQ0ZHX05WUkFNX1NJWkUgICAgICAgICAgKCgxMjgqMTAyNCktOCkgLyogY2xvY2sgcmVncyByZXNpZGVudCBpbiB0aGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICA4IHRvcCBOVlJBTSBsb2NhdGlvbnMgICAgKi8KKworI2lmIGRlZmluZWQoQ0ZHX0VOVl9JU19JTl9OVlJBTSkKKyMgIGRlZmluZSBDRkdfRU5WX0FERFIgICAgICAgICAgQ0ZHX05WUkFNX0JBU0UgLyogQmFzZSBhZGRyZXNzIG9mIE5WUkFNIGFyZWEgKi8KKyMgIGRlZmluZSBDRkdfRU5WX1NJWkUgICAgICAgICAgMHg0MDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yICAqLworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENhY2hlIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NJWkUJMTYJLyogRm9yIGFsbCBNUEM4eHggQ1BVcyAgICAgICAgICAgICAgICovCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorIyAgZGVmaW5lIENGR19DQUNIRUxJTkVfU0hJRlQJIDQgICAgICAvKiBsb2cgYmFzZSAyIG9mIHRoZSBhYm92ZSB2YWx1ZSAgICAgKi8KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTWVBDUiAtIFN5c3RlbSBQcm90ZWN0aW9uIENvbnRyb2wJCQkJMTEtOQorICogU1lQQ1IgY2FuIG9ubHkgYmUgd3JpdHRlbiBvbmNlIGFmdGVyIHJlc2V0IQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU29mdHdhcmUgJiBCdXMgTW9uaXRvciBUaW1lciBtYXgsIEJ1cyBNb25pdG9yIGVuYWJsZSwgU1cgV2F0Y2hkb2cgZnJlZXplCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19XQVRDSERPRykKKyMgIGRlZmluZSBDRkdfU1lQQ1IJKFNZUENSX1NXVEMgfCBTWVBDUl9CTVQgIHwgU1lQQ1JfQk1FIHwgU1lQQ1JfU1dGIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIFNZUENSX1NXRSAgfCBTWVBDUl9TV1JJIHwgU1lQQ1JfU1dQKQorI2Vsc2UKKyMgIGRlZmluZSBDRkdfU1lQQ1IJKFNZUENSX1NXVEMgfCBTWVBDUl9CTVQgIHwgU1lQQ1JfQk1FIHwgU1lQQ1JfU1dGIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1lQQ1JfU1dQKQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNVTUNSIC0gU0lVIE1vZHVsZSBDb25maWd1cmF0aW9uCQkJCTExLTYKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFBDTUNJQSBjb25maWcuLCBtdWx0aS1mdW5jdGlvbiBwaW4gdHJpLXN0YXRlCisgKi8KKyNkZWZpbmUgQ0ZHX1NJVU1DUgkoU0lVTUNSX0RCR0MxMSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVEJTQ1IgLSBUaW1lIEJhc2UgU3RhdHVzIGFuZCBDb250cm9sCQkJCTExLTI2CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDbGVhciBSZWZlcmVuY2UgSW50ZXJydXB0IFN0YXR1cywgVGltZWJhc2UgZnJlZXppbmcgZW5hYmxlZAorICovCisjZGVmaW5lIENGR19UQlNDUgkoVEJTQ1JfUkVGQSB8IFRCU0NSX1JFRkIgfCBUQlNDUl9UQkYpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJUQ1NDIC0gUmVhbC1UaW1lIENsb2NrIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlcgkJMTEtMjcKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9uY2UtcGVyLVNlY29uZCBJbnRlcnJ1cHQsIEFsYXJtIEludGVycnVwdCwgUlRDIGZyZWV6aW5nIGVuYWJsZWQsIFJUQworICogIGVuYWJsZWQKKyAqLworI2RlZmluZSBDRkdfUlRDU0MJKFJUQ1NDX1NFQyB8IFJUQ1NDX0FMUiB8IFJUQ1NDX1JURnwgUlRDU0NfUlRFKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQSVNDUiAtIFBlcmlvZGljIEludGVycnVwdCBTdGF0dXMgYW5kIENvbnRyb2wJCTExLTMxCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDbGVhciBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzLCBJbnRlcnJ1cHQgVGltZXIgZnJlZXppbmcgZW5hYmxlZAorICovCisjZGVmaW5lIENGR19QSVNDUgkoUElTQ1JfUFMgfCBQSVNDUl9QSVRGKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQTFBSQ1IgLSBQTEwsIExvdy1Qb3dlciwgYW5kIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIJCTE1LTMwCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZXNldCBQTEwgbG9jayBzdGF0dXMgc3RpY2t5IGJpdCwgdGltZXIgZXhwaXJlZCBzdGF0dXMgYml0IGFuZCB0aW1lcgorICogaW50ZXJydXB0IHN0YXR1cyBiaXQgLSBsZWF2ZSBQTEwgbXVsdGlwbGljYXRpb24gZmFjdG9yIHVuY2hhbmdlZCAhCisgKi8KKyNkZWZpbmUgQ0ZHX1BMUFJDUgkoUExQUkNSX1NQTFNTIHwgUExQUkNSX1RFWFBTIHwgUExQUkNSX1RNSVNUKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTQ0NSIC0gU3lzdGVtIENsb2NrIGFuZCByZXNldCBDb250cm9sIFJlZ2lzdGVyCQkxNS0yNworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU2V0IGNsb2NrIG91dHB1dCwgdGltZWJhc2UgYW5kIFJUQyBzb3VyY2UgYW5kIGRpdmlkZXIsCisgKiBwb3dlciBtYW5hZ2VtZW50IGFuZCBzb21lIG90aGVyIGludGVybmFsIGNsb2NrcworICovCisjZGVmaW5lIFNDQ1JfTUFTSwkgU0NDUl9FQkRGMTEKKyNkZWZpbmUgQ0ZHX1NDQ1IJKFNDQ1JfVEJTICAgICB8IFwKKwkJCSBTQ0NSX0NPTTAwICAgfCBTQ0NSX0RGU1lOQzAwIHwgU0NDUl9ERkJSRzAwICB8IFwKKwkJCSBTQ0NSX0RGTkwwMDAgfCBTQ0NSX0RGTkgwMDAgIHwgU0NDUl9ERkxDRDAwMCB8IFwKKwkJCSBTQ0NSX0RGQUxDRDAwKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDaGlwIFNlbGVjdHMgKyBTRFJBTSB0aW1pbmdzICsgTWVtb3J5IFBlcmlvZGljIFRpbWVyIFByZXNjYWxlcgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqLworI2lmZGVmIERFQlVHCisjICBkZWZpbmUgQ0ZHX0RFUgkJMHhGRkU3NDAwRgkvKiBEZWJ1ZyBFbmFibGUgUmVnaXN0ZXIgKi8KKyNlbHNlCisjICBkZWZpbmUgQ0ZHX0RFUgkJMAorI2VuZGlmCisKKy8qCisgKiBJbml0IE1lbW9yeSBDb250cm9sbGVyOgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqIEJSMCBhbmQgT1IwIChGTEFTSCkKKyAqLworCisjZGVmaW5lIEZMQVNIX0JBU0UwX1BSRUxJTQlDRkdfRkxBU0hfQkFTRQkvKiBGTEFTSCBiYW5rICMwICAgICAgICAgICovCisKKy8qIHVzZWQgdG8gcmUtbWFwIEZMQVNIIGJvdGggd2hlbiBzdGFydGluZyBmcm9tIFNSQU0gb3IgRkxBU0g6CisgKiByZXN0cmljdCBhY2Nlc3MgZW5vdWdoIHRvIGtlZXAgU1JBTSB3b3JraW5nIChpZiBhbnkpCisgKiBidXQgbm90IHRvbyBtdWNoIHRvIG1lZGRsZSB3aXRoIEZMQVNIIGFjY2Vzc2VzCisgKi8KKyNkZWZpbmUgQ0ZHX1BSRUxJTV9PUl9BTQkweEZGMDAwMDAwCS8qIDE2IE1CIGJldHdlZW4gZWFjaCBDU3ggKi8KKworLyogRkxBU0ggdGltaW5nOiBBQ1MgPSAxMSwgVFJMWCA9IDAsIENTTlQgPSAwLCBTQ1kgPSA4LCBFSFRSID0gMAkgICovCisjZGVmaW5lIENGR19PUl9USU1JTkdfRkxBU0gJKE9SX0FDU19ESVYyIHwgT1JfQkkgfCBPUl9TQ1lfOF9DTEspCisKKyNkZWZpbmUgQ0ZHX09SMF9QUkVMSU0JKENGR19QUkVMSU1fT1JfQU0gfCBDRkdfT1JfVElNSU5HX0ZMQVNIKQorI2RlZmluZSBDRkdfQlIwX1BSRUxJTQkoKEZMQVNIX0JBU0UwX1BSRUxJTSAmIEJSX0JBX01TSykgfCBCUl9QU184IHwgQlJfViApCisKKy8qCisgKiBCUjEgYW5kIE9SMSAoU0RSQU0pCisgKgorICovCisjZGVmaW5lIFNEUkFNX0JBU0UxX1BSRUxJTQlDRkdfU0RSQU1fQkFTRQkvKiBTRFJBTSBiYW5rICMwICAgICAgICAqLworI2RlZmluZQlTRFJBTV9NQVhfU0laRQkJMHgwMjAwMDAwMAkvKiAzMiBNQiBNQVggZm9yIENTMSAgICAqLworCisvKiBTRFJBTSB0aW1pbmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDRkdfT1JfVElNSU5HX1NEUkFNCTB4MDAwMDAwMDAKKworI2RlZmluZSBDRkdfT1IxX1BSRUxJTQkoKDIgKiBDRkdfUFJFTElNX09SX0FNKSB8IENGR19PUl9USU1JTkdfU0RSQU0gKQorI2RlZmluZSBDRkdfQlIxX1BSRUxJTQkoKFNEUkFNX0JBU0UxX1BSRUxJTSAmIEJSX0JBX01TSykgfCBCUl9NU19VUE1BIHwgQlJfViApCisKKy8qCisgKiBCUjIgYW5kIE9SMiAoTlZSQU0pCisgKgorICovCisjZGVmaW5lIE5WUkFNX0JBU0UxX1BSRUxJTQlDRkdfTlZSQU1fQkFTRQkvKiBOVlJBTSBiYW5rICMwICAgICAgICAqLworI2RlZmluZQlOVlJBTV9NQVhfU0laRQkJMHgwMDAyMDAwMAkvKiAxMjggS0IgTUFYIGZvciBDUzIgICAqLworCisjZGVmaW5lIENGR19PUjJfUFJFTElNCSAgICAgICAgMHhGRkY4MDE2MAorI2RlZmluZSBDRkdfQlIyX1BSRUxJTQkoKE5WUkFNX0JBU0UxX1BSRUxJTSAmIEJSX0JBX01TSykgfCBCUl9QU184IHwgQlJfViApCisKKy8qCisgKiBNZW1vcnkgUGVyaW9kaWMgVGltZXIgUHJlc2NhbGVyCisgKi8KKworLyogcGVyaW9kaWMgdGltZXIgZm9yIHJlZnJlc2ggKi8KKyNkZWZpbmUgQ0ZHX01BTVJfUFRBCSAgICAgICAgOTcgICAgIC8qIHN0YXJ0IHdpdGggZGl2aWRlciBmb3IgMTAwIE1IeiAqLworCisvKiByZWZyZXNoIHJhdGUgMTUuNiB1cyAoPSA2NCBtcyAvIDRLID0gNjIuNCAvIHF1YWQgYnVyc3RzKSBmb3IgPD0gMTI4IE1CaXQgKi8KKyNkZWZpbmUgQ0ZHX01QVFBSXzJCS180SwlNUFRQUl9QVFBfRElWMTYJICAvKiBzZXR0aW5nIGZvciAyIGJhbmtzICovCisjZGVmaW5lIENGR19NUFRQUl8xQktfNEsJTVBUUFJfUFRQX0RJVjMyCSAgLyogc2V0dGluZyBmb3IgMSBiYW5rICAqLworCisvKiByZWZyZXNoIHJhdGUgNy44IHVzICg9IDY0IG1zIC8gOEsgPSAzMS4yIC8gcXVhZCBidXJzdHMpIGZvciAyNTYgTUJpdCAgKi8KKyNkZWZpbmUgQ0ZHX01QVFBSXzJCS184SwlNUFRQUl9QVFBfRElWOCAgICAvKiBzZXR0aW5nIGZvciAyIGJhbmtzICovCisjZGVmaW5lIENGR19NUFRQUl8xQktfOEsJTVBUUFJfUFRQX0RJVjE2ICAgLyogc2V0dGluZyBmb3IgMSBiYW5rICAqLworCisvKgorICogTUFNUiBzZXR0aW5ncyBmb3IgU0RSQU0KKyAqLworCisvKiA4IGNvbHVtbiBTRFJBTSAqLworI2RlZmluZSBDRkdfTUFNUl84Q09MCSgoQ0ZHX01BTVJfUFRBIDw8IE1BTVJfUFRBX1NISUZUKSAgfCBNQU1SX1BUQUUJICAgIHwgXAorCQkJIE1BTVJfQU1BX1RZUEVfMCB8IE1BTVJfRFNBXzFfQ1lDTCB8IE1BTVJfRzBDTEFfQTExIHwgXAorCQkJIE1BTVJfUkxGQV8xWAkgfCBNQU1SX1dMRkFfMVgJICAgfCBNQU1SX1RMRkFfNFgpCisvKiA5IGNvbHVtbiBTRFJBTSAqLworI2RlZmluZSBDRkdfTUFNUl85Q09MCSgoQ0ZHX01BTVJfUFRBIDw8IE1BTVJfUFRBX1NISUZUKSAgfCBNQU1SX1BUQUUJICAgIHwgXAorCQkJIE1BTVJfQU1BX1RZUEVfMSB8IE1BTVJfRFNBXzFfQ1lDTCB8IE1BTVJfRzBDTEFfQTEwIHwgXAorCQkJIE1BTVJfUkxGQV8xWAkgfCBNQU1SX1dMRkFfMVgJICAgfCBNQU1SX1RMRkFfNFgpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEludGVybmFsIERlZmluaXRpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICovCisKKy8qCisgKiBCb290IEZsYWdzCisgKi8KKyNkZWZpbmUJQk9PVEZMQUdfQ09MRAkweDAxICAgICAgICAgICAgIC8qIE5vcm1hbCBQb3dlci1PbjogQm9vdCBmcm9tIEZMQVNIICovCisjZGVmaW5lIEJPT1RGTEFHX1dBUk0JMHgwMiAgICAgICAgICAgICAvKiBTb2Z0d2FyZSByZWJvb3QgICAgICAgICAgICAgICAgICAqLworCisKKyNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvSVA4NjAuaCBiL2luY2x1ZGUvY29uZmlncy9JUDg2MC5oCmluZGV4IDZmYTJkMTkuLmQ3ZGNlNzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9JUDg2MC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9JUDg2MC5oCkBAIC0zNSw2ICszNSw3IEBACiAKICNkZWZpbmUgQ09ORklHX01QQzg2MAkJMQkvKiBUaGlzIGlzIGEgTVBDODYwIENQVQkJKi8KICNkZWZpbmUgQ09ORklHX0lQODYwCQkxCS8qIC4uLm9uIGEgSVA4NjAgYm9hcmQJCSovCisjZGVmaW5lIENPTkZJR19CT0FSRF9QUkVfSU5JVAkxCSAgICAvKiBDYWxsIGJvYXJkX3ByZV9pbml0CSovCiAKICNkZWZpbmUJQ09ORklHXzh4eF9DT05TX1NNQzEJMQkvKiBDb25zb2xlIGlzIG9uIFNNQzEJCSovCiAjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJOTYwMApAQCAtNDUsMTAgKzQ2LDYgQEAKICNkZWZpbmUgQ09ORklHX1BSRUJPT1QJImVjaG87ZWNobyBUeXBlIFwicnVuIGZsYXNoX25mc1wiIHRvIG1vdW50IHJvb3QgZmlsZXN5c3RlbSBvdmVyIE5GUztlY2hvIiBcCiAiXDBsb2FkPXRmdHAgXCIvdGZ0cGJvb3QvdS1ib290LmJpblwiXDB1cGRhdGU9cHJvdGVjdCBvZmYgMTowO2VyYSAxOjA7Y3AuYiAxMDAwMDAgMTAwMDAwMDAgJChmaWxlc2l6ZSlcMCIKIAotI2RlZmluZSBDT05GSUdfRVRIQUREUgkwMDozMDpiZjowMTowMjpkMgotI2RlZmluZSBDT05GSUdfSVBBRERSCTEwLjAuMC41Ci0jZGVmaW5lIENPTkZJR19TRVJWRVJJUAkxMC4wLjAuMgotCiAjdW5kZWYJQ09ORklHX0JPT1RBUkdTCiAjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkJCQkJCQlcCiAJImJvb3RwOyAiCQkJCQkJCQlcCkBAIC0yMzAsMTAgKzIyNywxMyBAQAogCQkJIFNJVU1DUl9EQkdDMTEgfCBTSVVNQ1JfTUxSQzEwKQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBDbG9jayBTZXR0aW5nIC0gdGhlIElQODYwIGhhcyBubyAzMmtIeiBjbG9jaywgc28gYXV0b21hdGljIGRldGVjdGlvbiBmYWlscworICogQ2xvY2sgU2V0dGluZyAtIGdldCBjbG9jayBmcmVxdWVuY3kgZnJvbSBCb2FyZCBSZXZpc2lvbiBSZWdpc3RlciAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwotI2RlZmluZQlDT05GSUdfOHh4X0dDTEtfRlJFUQk1MDAwMDAwMAorI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiAgdW5zaWduZWQgbG9uZyAgICAgICAgICAgaXA4NjBfZ2V0X2Nsa19mcmVxICh2b2lkKTsKKyNlbmRpZgorI2RlZmluZQlDT05GSUdfOHh4X0dDTEtfRlJFUQlpcDg2MF9nZXRfY2xrX2ZyZXEoKQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBUQlNDUiAtIFRpbWUgQmFzZSBTdGF0dXMgYW5kIENvbnRyb2wJCQkJMTEtMjYKQEAgLTQzMCw2ICs0MzAsOCBAQAogCXVuc2lnbmVkIGNoYXIJd2RfdHJpZ2dlcjsJLyogKzFBIFdhdGNoZG9nIHRyaWdnZXIgcmVnaXN0ZXIJKi8KIAl1bnNpZ25lZCBjaGFyCXJlc2VydmVkRDsKIAl1bnNpZ25lZCBjaGFyCXJtd19yZXE7CS8qICsxQyBSTVcgcmVxdWVzdCByZWdpc3RlcgkJKi8KKwl1bnNpZ25lZCBjaGFyCXJlc2VydmVkRTsKKwl1bnNpZ25lZCBjaGFyCWJkX3JldjsJCS8qICsxRSBCb2FyZCBSZXZpc2lvbiByZWdpc3RlcgkJKi8KIH0gaXA4NjBfYmNzcl90OwogI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvUE04MjYuaCBiL2luY2x1ZGUvY29uZmlncy9QTTgyNi5oCmluZGV4IGI1NmRhNjkuLmQ5NTU5NmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9QTTgyNi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9QTTgyNi5oCkBAIC0xNTgsOSArMTU4LDkgQEAKICNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCQkoQ09ORklHX0NNRF9ERkwJfCBcCiAJCQkJIENGR19DTURfQkVEQlVHCXwgXAogCQkJCSBDRkdfQ01EX0RBVEUJfCBcCisJCQkJIENGR19DTURfRE9DCXwgXAogCQkJCSBDRkdfQ01EX0VFUFJPTSB8IFwKLQkJCQkgQ0ZHX0NNRF9JMkMJfCBcCi0JCQkJIENGR19DTURfRE9DKQorCQkJCSBDRkdfQ01EX0kyQwkpCiAKIC8qIHRoaXMgbXVzdCBiZSBpbmNsdWRlZCBBRlRFUiB0aGUgZGVmaW5pdGlvbiBvZiBDT05GSUdfQ09NTUFORFMgKGlmIGFueSkgKi8KICNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KQEAgLTIxMSwxMSArMjExLDExIEBACiAgKiBGbGFzaCBhbmQgQm9vdCBST00gbWFwcGluZwogICovCiAKLSNkZWZpbmUJQ0ZHX0JPT1RST01fQkFTRQkweDYwMDAwMDAwCisjZGVmaW5lCUNGR19CT09UUk9NX0JBU0UJMHhGRjgwMDAwMAogI2RlZmluZQlDRkdfQk9PVFJPTV9TSVpFCTB4MDAwODAwMDAKLSNkZWZpbmUJQ0ZHX0ZMQVNIMF9CQVNFCQkweDQwMDAwMDAwCisjZGVmaW5lCUNGR19GTEFTSDBfQkFTRQkJMHhGRjAwMDAwMAogI2RlZmluZQlDRkdfRkxBU0gwX1NJWkUJCTB4MDIwMDAwMDAKLSNkZWZpbmUgQ0ZHX0RPQ19CQVNFCQkweDYwMDAwMDAwCisjZGVmaW5lIENGR19ET0NfQkFTRQkJMHhGRjgwMDAwMAogI2RlZmluZSBDRkdfRE9DX1NJWkUJCTB4MDAxMDAwMDAKIAogCkBAIC0yNDUsOCArMjQ1LDggQEAKICNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4JMQogI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUwk0CiAjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9ERUxBWV9NUwkxMAkvKiBhbmQgdGFrZXMgdXAgdG8gMTAgbXNlYyAqLwotI2RlZmluZSBDRkdfRU5WX09GRlNFVAkJMAotI2RlZmluZSBDRkdfRU5WX1NJWkUJCTIwNDgKKyNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJCTUxMgorI2RlZmluZSBDRkdfRU5WX1NJWkUJCSgyMDQ4IC0gNTEyKQogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9QTjYyLmggYi9pbmNsdWRlL2NvbmZpZ3MvUE42Mi5oCmluZGV4IDA3NTAxMTYuLjZjMzcyMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9QTjYyLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1BONjIuaApAQCAtNzAsNyArNzAsNyBAQAogCQkJInJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD0kKHNlcnZlcmlwKTokKHJvb3RwYXRoKSAiIFwKIAkJCSJpcD0kKGlwYWRkcik6JChzZXJ2ZXJpcCk6OiQobmV0bWFzayk6cG42MjpldGgwOm9mZjsiIFwKIAkJCSJsb2FkcCAxMDAwMDA7IGJvb3RtIgotCQkJLyogInRmdHBib290IDEwMDAwMCBwSW1hZ2U7IGJvb3RtIiAqLworCQkJLyogInRmdHBib290IDEwMDAwMCB1SW1hZ2U7IGJvb3RtIiAqLwogI2Vsc2UKIC8qIEJvb3QgTGludXggd2l0aCBSQU1kaXNrIGJhc2VkIGZpbGVzeXN0ZW0gKGluaXRyZCwgQnVzeUJveCkgKi8KICNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5EIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9SUnZpc2lvbi5oIGIvaW5jbHVkZS9jb25maWdzL1JSdmlzaW9uLmgKaW5kZXggYWQzNmM5NS4uYWNmZTc0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL1JSdmlzaW9uLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1JSdmlzaW9uLmgKQEAgLTc1LDcgKzc1LDcgQEAKIAkJInNldGVudiBmaWxlc2l6ZTtzYXZlZW52XDAiCQkJCVwKIAkia2VybmVsX2FkZHI9NDAwNDAwMDBcMCIJCQkJCVwKIAkicmFtZGlza19hZGRyPTQwMTAwMDAwXDAiCQkJCQlcCi0JImtlcm5lbF9pbWc9L3RmdHBib290L3BJbWFnZVwwIgkJCQkJXAorCSJrZXJuZWxfaW1nPS90ZnRwYm9vdC91SW1hZ2VcMCIJCQkJCVwKIAkia2VybmVsX2xvYWQ9dGZ0cCAyMDAwMDAgJChrZXJuZWxfaW1nKVwwIgkJCVwKIAkibmV0X25mcz1ydW4ga2VybmVsX2xvYWQgbmZzYXJncyBhZGRpcCBhZGR0dHk7Ym9vdG1cMCIJCVwKIAkiZmxhc2hfbmZzPXJ1biBuZnNhcmdzIGFkZGlwIGFkZHR0eTtib290bSAkKGtlcm5lbF9hZGRyKVwwIglcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvU1BEODIzVFMuaCBiL2luY2x1ZGUvY29uZmlncy9TUEQ4MjNUUy5oCmluZGV4IGJiZDU5MzkuLjlhZDE4MzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9TUEQ4MjNUUy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9TUEQ4MjNUUy5oCkBAIC03NCw3ICs3NCw3IEBACiAjZGVmaW5lIENPTkZJR19JUEFERFIJCTEwLjAuMC45OAogI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCTEwLjAuMC4xCiAjdW5kZWYJQ09ORklHX0JPT1RDT01NQU5ECi0jZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkidGZ0cCAyMDAwMDAgcEltYWdlO2Jvb3RtIDIwMDAwMCIKKyNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5ECSJ0ZnRwIDIwMDAwMCB1SW1hZ2U7Ym9vdG0gMjAwMDAwIgogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9UUU04MjNMLmggYi9pbmNsdWRlL2NvbmZpZ3MvVFFNODIzTC5oCmluZGV4IDY4MzYzMjYuLmNjNTFjZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9UUU04MjNMLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1RRTTgyM0wuaApAQCAtNzEsNyArNzEsNyBAQAogCQkiYm9vdG0gJChrZXJuZWxfYWRkcikgJChyYW1kaXNrX2FkZHIpXDAiCQlcCiAJIm5ldF9uZnM9dGZ0cCAyMDAwMDAgJChib290ZmlsZSk7cnVuIG5mc2FyZ3MgYWRkaXA7Ym9vdG1cMCIJXAogCSJyb290cGF0aD0vb3B0L2VsZGsvcHBjXzh4eFwwIgkJCQkJXAotCSJib290ZmlsZT0vdGZ0cGJvb3QvVFFNODYwTC9wSW1hZ2VcMCIJCQkJXAorCSJib290ZmlsZT0vdGZ0cGJvb3QvVFFNODYwTC91SW1hZ2VcMCIJCQkJXAogCSJrZXJuZWxfYWRkcj00MDA0MDAwMFwwIgkJCQkJXAogCSJyYW1kaXNrX2FkZHI9NDAxMDAwMDBcMCIJCQkJCVwKIAkiIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1RRTTg1MEwuaCBiL2luY2x1ZGUvY29uZmlncy9UUU04NTBMLmgKaW5kZXggNzFlMDhjZS4uNjBhYWNmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL1RRTTg1MEwuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvVFFNODUwTC5oCkBAIC02Nyw3ICs2Nyw3IEBACiAJCSJib290bSAkKGtlcm5lbF9hZGRyKSAkKHJhbWRpc2tfYWRkcilcMCIJCVwKIAkibmV0X25mcz10ZnRwIDIwMDAwMCAkKGJvb3RmaWxlKTtydW4gbmZzYXJncyBhZGRpcDtib290bVwwIglcCiAJInJvb3RwYXRoPS9vcHQvZWxkay9wcGNfOHh4XDAiCQkJCQlcCi0JImJvb3RmaWxlPS90ZnRwYm9vdC9UUU04NjBML3BJbWFnZVwwIgkJCQlcCisJImJvb3RmaWxlPS90ZnRwYm9vdC9UUU04NjBML3VJbWFnZVwwIgkJCQlcCiAJImtlcm5lbF9hZGRyPTQwMDQwMDAwXDAiCQkJCQlcCiAJInJhbWRpc2tfYWRkcj00MDEwMDAwMFwwIgkJCQkJXAogCSIiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODU1TC5oIGIvaW5jbHVkZS9jb25maWdzL1RRTTg1NUwuaAppbmRleCBhYzBlMjhhLi4zNzM2M2EyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODU1TC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9UUU04NTVMLmgKQEAgLTY3LDcgKzY3LDcgQEAKIAkJImJvb3RtICQoa2VybmVsX2FkZHIpICQocmFtZGlza19hZGRyKVwwIgkJXAogCSJuZXRfbmZzPXRmdHAgMjAwMDAwICQoYm9vdGZpbGUpO3J1biBuZnNhcmdzIGFkZGlwO2Jvb3RtXDAiCVwKIAkicm9vdHBhdGg9L29wdC9lbGRrL3BwY184eHhcMCIJCQkJCVwKLQkiYm9vdGZpbGU9L3RmdHBib290L1RRTTg2MEwvcEltYWdlXDAiCQkJCVwKKwkiYm9vdGZpbGU9L3RmdHBib290L1RRTTg2MEwvdUltYWdlXDAiCQkJCVwKIAkia2VybmVsX2FkZHI9NDAwNDAwMDBcMCIJCQkJCVwKIAkicmFtZGlza19hZGRyPTQwMTAwMDAwXDAiCQkJCQlcCiAJIiIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9UUU04NjBMLmggYi9pbmNsdWRlL2NvbmZpZ3MvVFFNODYwTC5oCmluZGV4IDU1NjRiMjMuLjBkMGI4YzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9UUU04NjBMLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1RRTTg2MEwuaApAQCAtNjcsNyArNjcsNyBAQAogCQkiYm9vdG0gJChrZXJuZWxfYWRkcikgJChyYW1kaXNrX2FkZHIpXDAiCQlcCiAJIm5ldF9uZnM9dGZ0cCAyMDAwMDAgJChib290ZmlsZSk7cnVuIG5mc2FyZ3MgYWRkaXA7Ym9vdG1cMCIJXAogCSJyb290cGF0aD0vb3B0L2VsZGsvcHBjXzh4eFwwIgkJCQkJXAotCSJib290ZmlsZT0vdGZ0cGJvb3QvVFFNODYwTC9wSW1hZ2VcMCIJCQkJXAorCSJib290ZmlsZT0vdGZ0cGJvb3QvVFFNODYwTC91SW1hZ2VcMCIJCQkJXAogCSJrZXJuZWxfYWRkcj00MDA0MDAwMFwwIgkJCQkJXAogCSJyYW1kaXNrX2FkZHI9NDAxMDAwMDBcMCIJCQkJCVwKIAkiIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2x3bW9uLmggYi9pbmNsdWRlL2NvbmZpZ3MvbHdtb24uaAppbmRleCA2NmM3OTM1Li5mYTQ2NjAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvbHdtb24uaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvbHdtb24uaApAQCAtOTcsNyArOTcsNyBAQAogCQkiYm9vdG0gJChrZXJuZWxfYWRkcilcMCIJCQkJCVwKIAkiZmxhc2hfc2VsZj1ydW4gcmFtYXJncyBhZGRpcCBhZGRfd2R0IGFkZGZiIGFkZF9taXNjOyIJXAogCQkiYm9vdG0gJChrZXJuZWxfYWRkcikgJChyYW1kaXNrX2FkZHIpXDAiCQkJXAotCSJuZXRfbmZzPXRmdHAgMTAwMDAwIC90ZnRwYm9vdC9wSW1hZ2UubHdtb247IgkJXAorCSJuZXRfbmZzPXRmdHAgMTAwMDAwIC90ZnRwYm9vdC91SW1hZ2UubHdtb247IgkJXAogCQkicnVuIG5mc2FyZ3MgYWRkaXAgYWRkX3dkdCBhZGRmYjtib290bVwwIglcCiAJInJvb3RwYXRoPS9vcHQvZWxkay9wcGNfOHh4XDAiCQkJCQkJXAogCSJsb2FkPXRmdHAgMTAwMDAwIC90ZnRwYm9vdC91LWJvb3QuYmluXDAiCQkJCVwKZGlmZiAtLWdpdCBhL2xpYl9wcGMvYm9hcmQuYyBiL2xpYl9wcGMvYm9hcmQuYwppbmRleCBhNjQ2NGYwMC4uYzYxNzA0OSAxMDA2NDQKLS0tIGEvbGliX3BwYy9ib2FyZC5jCisrKyBiL2xpYl9wcGMvYm9hcmQuYwpAQCAtNjM1LDEyICs2MzUsMTUgQEAKIAlpY2FjaGVfZW5hYmxlICgpOwkvKiBpdCdzIHRpbWUgdG8gZW5hYmxlIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSAqLwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19CQUI3eHgpCisjaWYgZGVmaW5lZChDT05GSUdfQkFCN3h4KSB8fCBkZWZpbmVkKENPTkZJR19DUEM0NSkKIAkvKgotCSAqIERvIHBjaSBjb25maWd1cmF0aW9uIG9uIEJBQiA3eHggX2JlZm9yZV8gdGhlIGZsYXNoCi0JICogaXMgaW5pdGlhbGlzZWQsIGJlY2F1c2Ugd2UgbmVlZCB0aGUgSVNBIGJyaWRnZSB0aGVyZS4KKwkgKiBEbyBQQ0kgY29uZmlndXJhdGlvbiBvbiBCQUI3eHggYW5kIENQQzQ1IF9iZWZvcmVfIHRoZSBmbGFzaAorCSAqIGdldHMgaW5pdGlhbGlzZWQsIGJlY2F1c2Ugd2UgbmVlZCB0aGUgSVNBIHJlc3AuIFBDSV90b19MT0NBTCBidXMKKwkgKiBicmlkZ2UgdGhlcmUuCiAJICovCiAJcGNpX2luaXQgKCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19CQUI3eHgpCiAJLyoKIAkgKiBJbml0aWFsaXNlIHRoZSBJU0EgYnJpZGdlCiAJICovCkBAIC04MjEsNiArODI0LDcgQEAKIAogI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05FVCkgJiYgKCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ0NNKQkJfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0VMUFQ4NjApCXx8IFwKICAgICBkZWZpbmVkKENPTkZJR19FUDgyNjApCXx8IFwKICAgICBkZWZpbmVkKENPTkZJR19JUDg2MCkJfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0lWTUwyNCkJfHwgXApkaWZmIC0tZ2l0IGEvcnRjL01ha2VmaWxlIGIvcnRjL01ha2VmaWxlCmluZGV4IDVkNmM3ZjUuLjVlNDcxYTYgMTAwNjQ0Ci0tLSBhL3J0Yy9NYWtlZmlsZQorKysgYi9ydGMvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIExJQgk9IGxpYnJ0Yy5hCiAKIE9CSlMJPSBkYXRlLm8gICBcCi0JICBkczEzMDIubyBkczEzMDYubyBkczEzMDcubyBkczEzMzcubyBkczE1NTYubyBkczE3NHgubyBcCisJICBkczEzMDIubyBkczEzMDYubyBkczEzMDcubyBkczEzMzcubyBkczE1NTYubyBkczE2NHgubyBkczE3NHgubyBcCiAJICBtNDF0MTEubyBtNDh0MzVheC5vIG1jMTQ2ODE4Lm8gbWs0OHQ1OS5vIFwKIAkgIG1wYzh4eC5vIHBjZjg1NjMubwogCmRpZmYgLS1naXQgYS9ydGMvZHMxNjR4LmMgYi9ydGMvZHMxNjR4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzMjljNwotLS0gL2Rldi9udWxsCisrKyBiL3J0Yy9kczE2NHguYwpAQCAtMCwwICsxLDIwMCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogQVJJTyBEYXRhIE5ldHdvcmtzLCBJbmMuIGRjaGl1QGFyaW9kYXRhLmNvbQorICogCisgKiBtb2RpZmllZCBmb3IgRFMxNjR4OgorICogVGhlIExFT1ggdGVhbSA8dGVhbUBsZW94Lm9yZz4sIGh0dHA6Ly93d3cubGVveC5vcmcKKyAqCisgKiBCYXNlZCBvbiBNb250YVZpc3RhIERTMTc0MyBjb2RlIGFuZCBVLUJvb3QgbWMxNDY4MTggY29kZQorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBEYXRlICYgVGltZSBzdXBwb3J0IGZvciB0aGUgRFMxNjR4IFJUQworICovCisKKy8qICNkZWZpbmUJUlRDX0RFQlVHICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8cnRjLmg+CisKKworI2lmIGRlZmluZWQoQ09ORklHX1JUQ19EUzE2NHgpICYmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0RBVEUpCisKK3N0YXRpYyB1Y2hhciAgICBydGNfcmVhZCh1bnNpZ25lZCBpbnQgYWRkciApOworc3RhdGljIHZvaWQgICAgIHJ0Y193cml0ZSh1bnNpZ25lZCBpbnQgYWRkciwgdWNoYXIgdmFsKTsKK3N0YXRpYyB1Y2hhciAgICBiaW4yYmNkKHVuc2lnbmVkIGludCBuKTsKK3N0YXRpYyB1bnNpZ25lZCBiY2QyYmluKHVjaGFyIGMpOworCisjZGVmaW5lIFJUQ19FUE9DSCAgICAgICAgICAgICAgICAgMjAwMAkvKiBjZW50dXJ5ICovCisKKy8qCisgKiBEUzE2NHggcmVnaXN0ZXJzIGxheW91dAorICovCisjZGVmaW5lIFJUQ19CQVNFCQkoIENGR19OVlJBTV9CQVNFX0FERFIgKyBDRkdfTlZSQU1fU0laRSApCisKKyNkZWZpbmUgUlRDX1lFQVIJCSggUlRDX0JBU0UgKyAweDA3ICkKKyNkZWZpbmUgUlRDX01PTlRICQkoIFJUQ19CQVNFICsgMHgwNiApCisjZGVmaW5lIFJUQ19EQVlfT0ZfTU9OVEgJKCBSVENfQkFTRSArIDB4MDUgKQorI2RlZmluZSBSVENfREFZX09GX1dFRUsJCSggUlRDX0JBU0UgKyAweDA0ICkKKyNkZWZpbmUgUlRDX0hPVVJTCQkoIFJUQ19CQVNFICsgMHgwMyApCisjZGVmaW5lIFJUQ19NSU5VVEVTCQkoIFJUQ19CQVNFICsgMHgwMiApCisjZGVmaW5lIFJUQ19TRUNPTkRTCQkoIFJUQ19CQVNFICsgMHgwMSApCisjZGVmaW5lIFJUQ19DT05UUk9MCQkoIFJUQ19CQVNFICsgMHgwMCApCisKKyNkZWZpbmUgUlRDX0NPTlRST0xBCQlSVENfQ09OVFJPTAkvKiBXPWJpdDYsIFI9Yml0NSAqLworI2RlZmluZSAgIFJUQ19DQV9XUklURQkJICAweDgwCisjZGVmaW5lICAgUlRDX0NBX1JFQUQJCSAgMHg0MAorI2RlZmluZSBSVENfQ09OVFJPTEIJCVJUQ19TRUNPTkRTCS8qIE9TQz1iaXQ3ICAgICAgICovCisjZGVmaW5lICAgUlRDX0NCX09TQ19ESVNBQkxFCSAgMHg4MAorI2RlZmluZSBSVENfQ09OVFJPTEMJCVJUQ19EQVlfT0ZfV0VFSwkvKiBGVD1iaXQ2ICAgICAgICAqLworI2RlZmluZSAgIFJUQ19DQ19GUkVRX1RFU1QJICAweDQwCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordm9pZCBydGNfZ2V0KCBzdHJ1Y3QgcnRjX3RpbWUgKnRtcCApCit7CisJdWNoYXIgc2VjLCBtaW4sIGhvdXI7CisJdWNoYXIgbWRheSwgd2RheSwgbW9uLCB5ZWFyOworCisJdWNoYXIgcmVnX2E7CisKKwlyZWdfYSA9IHJ0Y19yZWFkKCBSVENfQ09OVFJPTEEgKTsKKwkvKiBsb2NrIGNsb2NrIHJlZ2lzdGVycyBmb3IgcmVhZCAqLworCXJ0Y193cml0ZSggUlRDX0NPTlRST0xBLCAoIHJlZ19hIHwgUlRDX0NBX1JFQUQgKSk7CisKKwlzZWMgICAgID0gcnRjX3JlYWQoIFJUQ19TRUNPTkRTICk7CisJbWluICAgICA9IHJ0Y19yZWFkKCBSVENfTUlOVVRFUyApOworCWhvdXIgICAgPSBydGNfcmVhZCggUlRDX0hPVVJTICk7CisJbWRheSAgICA9IHJ0Y19yZWFkKCBSVENfREFZX09GX01PTlRIICk7CisJd2RheSAgICA9IHJ0Y19yZWFkKCBSVENfREFZX09GX1dFRUsgKTsKKwltb24gICAgID0gcnRjX3JlYWQoIFJUQ19NT05USCApOworCXllYXIgICAgPSBydGNfcmVhZCggUlRDX1lFQVIgKTsKKworCS8qIHVubG9jayBjbG9jayByZWdpc3RlcnMgYWZ0ZXIgcmVhZCAqLworCXJ0Y193cml0ZSggUlRDX0NPTlRST0xBLCAoIHJlZ19hICYgflJUQ19DQV9SRUFEICkpOworCisjaWZkZWYgUlRDX0RFQlVHCisJcHJpbnRmKCAiR2V0IFJUQyB5ZWFyOiAlMDJ4IG1vbjogJTAyeCBtZGF5OiAlMDJ4IHdkYXk6ICUwMnggIgorCQkiaHI6ICUwMnggbWluOiAlMDJ4IHNlYzogJTAyeFxuIiwKKwkJeWVhciwgbW9uLCBtZGF5LCB3ZGF5LAorCQlob3VyLCBtaW4sIHNlYyApOworI2VuZGlmCisJdG1wLT50bV9zZWMgID0gYmNkMmJpbiggc2VjICAmIDB4N0YgKTsKKwl0bXAtPnRtX21pbiAgPSBiY2QyYmluKCBtaW4gICYgMHg3RiApOworCXRtcC0+dG1faG91ciA9IGJjZDJiaW4oIGhvdXIgJiAweDNGICk7CisJdG1wLT50bV9tZGF5ID0gYmNkMmJpbiggbWRheSAmIDB4M0YgKTsKKwl0bXAtPnRtX21vbiAgPSBiY2QyYmluKCBtb24gICYgMHgxRiApOworCXRtcC0+dG1fd2RheSA9IGJjZDJiaW4oIHdkYXkgJiAweDA3ICk7CisKKwkvKiBnbHVlIHllYXIgaW4gY2VudHVyeSAoMjAwMCkgKi8KKwl0bXAtPnRtX3llYXIgPSBiY2QyYmluKCB5ZWFyICkgKyBSVENfRVBPQ0g7CisKKwl0bXAtPnRtX3lkYXkgPSAwOworCXRtcC0+dG1faXNkc3Q9IDA7CisjaWZkZWYgUlRDX0RFQlVHCisJcHJpbnRmKCAiR2V0IERBVEU6ICU0ZC0lMDJkLSUwMmQgKHdkYXk9JWQpICBUSU1FOiAlMmQ6JTAyZDolMDJkXG4iLAorCQl0bXAtPnRtX3llYXIsIHRtcC0+dG1fbW9uLCB0bXAtPnRtX21kYXksIHRtcC0+dG1fd2RheSwKKwkJdG1wLT50bV9ob3VyLCB0bXAtPnRtX21pbiwgdG1wLT50bV9zZWMgKTsKKyNlbmRpZgorfQorCit2b2lkIHJ0Y19zZXQoIHN0cnVjdCBydGNfdGltZSAqdG1wICkKK3sKKwl1Y2hhciByZWdfYTsKKworI2lmZGVmIFJUQ19ERUJVRworCXByaW50ZiggIlNldCBEQVRFOiAlNGQtJTAyZC0lMDJkICh3ZGF5PSVkKSAgVElNRTogJTJkOiUwMmQ6JTAyZFxuIiwKKwkJdG1wLT50bV95ZWFyLCB0bXAtPnRtX21vbiwgdG1wLT50bV9tZGF5LCB0bXAtPnRtX3dkYXksCisJCXRtcC0+dG1faG91ciwgdG1wLT50bV9taW4sIHRtcC0+dG1fc2VjKTsKKyNlbmRpZgorCS8qIGxvY2sgY2xvY2sgcmVnaXN0ZXJzIGZvciB3cml0ZSAqLworCXJlZ19hID0gcnRjX3JlYWQoIFJUQ19DT05UUk9MQSApOworCXJ0Y193cml0ZSggUlRDX0NPTlRST0xBLCAoIHJlZ19hIHwgUlRDX0NBX1dSSVRFICkpOworCisJcnRjX3dyaXRlKCBSVENfTU9OVEgsIGJpbjJiY2QoIHRtcC0+dG1fbW9uICkpOworCisJcnRjX3dyaXRlKCBSVENfREFZX09GX1dFRUssIGJpbjJiY2QoIHRtcC0+dG1fd2RheSApKTsKKwlydGNfd3JpdGUoIFJUQ19EQVlfT0ZfTU9OVEgsIGJpbjJiY2QoIHRtcC0+dG1fbWRheSApKTsKKwlydGNfd3JpdGUoIFJUQ19IT1VSUywgYmluMmJjZCggdG1wLT50bV9ob3VyICkpOworCXJ0Y193cml0ZSggUlRDX01JTlVURVMsIGJpbjJiY2QoIHRtcC0+dG1fbWluICkpOworCXJ0Y193cml0ZSggUlRDX1NFQ09ORFMsIGJpbjJiY2QoIHRtcC0+dG1fc2VjICkpOworCisJLyogYnJlYWsgeWVhciBpbiBjZW50dXJ5ICovCisJcnRjX3dyaXRlKCBSVENfWUVBUiwgYmluMmJjZCggdG1wLT50bV95ZWFyICUgMTAwICkpOworCisJLyogdW5sb2NrIGNsb2NrIHJlZ2lzdGVycyBhZnRlciByZWFkICovCisJcnRjX3dyaXRlKCBSVENfQ09OVFJPTEEsICggcmVnX2EgICYgflJUQ19DQV9XUklURSApKTsKK30KKwordm9pZCBydGNfcmVzZXQgKHZvaWQpCit7CisJdWNoYXIgcmVnX2EsIHJlZ19iOworCisJcmVnX2EgPSBydGNfcmVhZCggUlRDX0NPTlRST0xBICk7CisJcmVnX2IgPSBydGNfcmVhZCggUlRDX0NPTlRST0xCICk7CisKKwlpZiAoIHJlZ19iICYgUlRDX0NCX09TQ19ESVNBQkxFICkKKwl7CisJCXByaW50ZiggInJlYWwtdGltZS1jbG9jayB3YXMgc3RvcHBlZC4gTm93IHN0YXJ0aW5nLi4uXG4iICk7CisJCXJlZ19hIHw9IFJUQ19DQV9XUklURTsKKwkJcmVnX2IgJj0gflJUQ19DQl9PU0NfRElTQUJMRTsKKworCQlydGNfd3JpdGUoIFJUQ19DT05UUk9MQSwgcmVnX2EgKTsKKwkJcnRjX3dyaXRlKCBSVENfQ09OVFJPTEIsIHJlZ19iICk7CisJfQorCisJLyogbWFrZSBzdXJlIHJlYWQvd3JpdGUgY2xvY2sgcmVnaXN0ZXIgYml0cyBhcmUgY2xlYXJlZCAqLworCXJlZ19hICY9IH4oIFJUQ19DQV9XUklURSB8IFJUQ19DQV9SRUFEICk7CisJcnRjX3dyaXRlKCBSVENfQ09OVFJPTEEsIHJlZ19hICk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHVjaGFyIHJ0Y19yZWFkKCB1bnNpZ25lZCBpbnQgYWRkciApCit7CisJdWNoYXIgdmFsID0gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKikoYWRkcik7CisKKyNpZmRlZiBSVENfREVCVUcKKwlwcmludGYoICJydGNfcmVhZDogJXg6JXhcbiIsIGFkZHIsIHZhbCApOworI2VuZGlmCisJcmV0dXJuKCB2YWwgKTsKK30KKworc3RhdGljIHZvaWQgcnRjX3dyaXRlKCB1bnNpZ25lZCBpbnQgYWRkciwgdWNoYXIgdmFsICkKK3sKKyNpZmRlZiBSVENfREVCVUcKKwlwcmludGYoICJydGNfd3JpdGU6ICV4OiV4XG4iLCBhZGRyLCB2YWwgKTsKKyNlbmRpZgorCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciopKGFkZHIpID0gdmFsOworfQorCitzdGF0aWMgdW5zaWduZWQgYmNkMmJpbiAodWNoYXIgbikKK3sKKwlyZXR1cm4gKCgoKG4gPj4gNCkgJiAweDBGKSAqIDEwKSArIChuICYgMHgwRikpOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBiaW4yYmNkICh1bnNpZ25lZCBpbnQgbikKK3sKKwlyZXR1cm4gKCgobiAvIDEwKSA8PCA0KSB8IChuICUgMTApKTsKK30KKworI2VuZGlmCS8qIENPTkZJR19SVENfRFMxNjR4ICYmIENGR19DTURfREFURSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvZW52L2Z3X2Vudl9tYWluLmMgYi90b29scy9lbnYvZndfZW52X21haW4uYwppbmRleCAxYzIyZTcxLi42OTZlMzBlIDEwMDY0NAotLS0gYS90b29scy9lbnYvZndfZW52X21haW4uYworKysgYi90b29scy9lbnYvZndfZW52X21haW4uYwpAQCAtMjIsNyArMjIsNyBAQAogICovCiAKIC8qCi0gKiBDb21tYW5kIGxpbmUgdXNlciBpbnRlcmZhY2UgdG8gZmlybXdhcmUgKD1QUENCb290KSBlbnZpcm9ubWVudC4KKyAqIENvbW1hbmQgbGluZSB1c2VyIGludGVyZmFjZSB0byBmaXJtd2FyZSAoPVUtQm9vdCkgZW52aXJvbm1lbnQuCiAgKgogICogSW1wbGVtZW50czoKICAqCWZ3X3ByaW50ZW52IFsgbmFtZSAuLi4gXQo=